diff --git a/404.html b/404.html index 3cfb1e6..58e81ff 100644 --- a/404.html +++ b/404.html @@ -6,17 +6,17 @@ 404 | AXP Dev Docs - - + + - - + +
- + \ No newline at end of file diff --git a/api-examples.html b/api-examples.html index 3df663a..6dd52c6 100644 --- a/api-examples.html +++ b/api-examples.html @@ -6,19 +6,19 @@ Runtime API Examples | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Runtime API Examples

This page demonstrates usage of some of the runtime APIs provided by VitePress.

The main useData() API can be used to access site, theme, and page data for the current page. It works in both .md and .vue files:

md
<script setup>
+    
Skip to content

Runtime API Examples

This page demonstrates usage of some of the runtime APIs provided by VitePress.

The main useData() API can be used to access site, theme, and page data for the current page. It works in both .md and .vue files:

md
<script setup>
 import { useData } from 'vitepress'
 
 const { theme, page, frontmatter } = useData()
@@ -1104,8 +1104,8 @@
   "filePath": "api-examples.md"
 }

Page Frontmatter

{
   "outline": "deep"
-}

More

Check out the documentation for the full list of runtime APIs.

- +}

More

Check out the documentation for the full list of runtime APIs.

+ \ No newline at end of file diff --git a/assets/api-examples.md.BQhZzfKm.js b/assets/api-examples.md.BQhZzfKm.js deleted file mode 100644 index 61388b6..0000000 --- a/assets/api-examples.md.BQhZzfKm.js +++ /dev/null @@ -1,16 +0,0 @@ -import{u as p,c as h,o,aG as d,j as a,t,k as i,a as s}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"Runtime API Examples","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"api-examples.md","filePath":"api-examples.md"}'),m={name:"api-examples.md"},E=Object.assign(m,{setup(k){const{site:g,theme:n,page:l,frontmatter:r}=p();return(c,e)=>(o(),h("div",null,[e[0]||(e[0]=d(`

Runtime API Examples

This page demonstrates usage of some of the runtime APIs provided by VitePress.

The main useData() API can be used to access site, theme, and page data for the current page. It works in both .md and .vue files:

md
<script setup>
-import { useData } from 'vitepress'
-
-const { theme, page, frontmatter } = useData()
-</script>
-
-## Results
-
-### Theme Data
-<pre>{{ theme }}</pre>
-
-### Page Data
-<pre>{{ page }}</pre>
-
-### Page Frontmatter
-<pre>{{ frontmatter }}</pre>

Results

Theme Data

`,6)),a("pre",null,t(i(n)),1),e[1]||(e[1]=a("h3",{id:"page-data",tabindex:"-1"},[s("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"'},"​")],-1)),a("pre",null,t(i(l)),1),e[2]||(e[2]=a("h3",{id:"page-frontmatter",tabindex:"-1"},[s("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"'},"​")],-1)),a("pre",null,t(i(r)),1),e[3]||(e[3]=a("h2",{id:"more",tabindex:"-1"},[s("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"'},"​")],-1)),e[4]||(e[4]=a("p",null,[s("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_blank",rel:"noreferrer"},"full list of runtime APIs"),s(".")],-1))]))}});export{f as __pageData,E as default}; diff --git a/assets/api-examples.md.BQhZzfKm.lean.js b/assets/api-examples.md.BQhZzfKm.lean.js deleted file mode 100644 index 15dab3f..0000000 --- a/assets/api-examples.md.BQhZzfKm.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{u as p,c as h,o,aG as d,j as a,t,k as i,a as s}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"Runtime API Examples","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"api-examples.md","filePath":"api-examples.md"}'),m={name:"api-examples.md"},E=Object.assign(m,{setup(k){const{site:g,theme:n,page:l,frontmatter:r}=p();return(c,e)=>(o(),h("div",null,[e[0]||(e[0]=d("",6)),a("pre",null,t(i(n)),1),e[1]||(e[1]=a("h3",{id:"page-data",tabindex:"-1"},[s("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"'},"​")],-1)),a("pre",null,t(i(l)),1),e[2]||(e[2]=a("h3",{id:"page-frontmatter",tabindex:"-1"},[s("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"'},"​")],-1)),a("pre",null,t(i(r)),1),e[3]||(e[3]=a("h2",{id:"more",tabindex:"-1"},[s("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"'},"​")],-1)),e[4]||(e[4]=a("p",null,[s("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_blank",rel:"noreferrer"},"full list of runtime APIs"),s(".")],-1))]))}});export{f as __pageData,E as default}; diff --git a/assets/api-examples.md.ChIkFPJ6.js b/assets/api-examples.md.ChIkFPJ6.js new file mode 100644 index 0000000..04b0464 --- /dev/null +++ b/assets/api-examples.md.ChIkFPJ6.js @@ -0,0 +1,16 @@ +import{u as p,c as h,o,aG as d,j as a,t,k as i,a as s}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"Runtime API Examples","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"api-examples.md","filePath":"api-examples.md"}'),m={name:"api-examples.md"},E=Object.assign(m,{setup(k){const{site:g,theme:n,page:l,frontmatter:r}=p();return(c,e)=>(o(),h("div",null,[e[0]||(e[0]=d(`

Runtime API Examples

This page demonstrates usage of some of the runtime APIs provided by VitePress.

The main useData() API can be used to access site, theme, and page data for the current page. It works in both .md and .vue files:

md
<script setup>
+import { useData } from 'vitepress'
+
+const { theme, page, frontmatter } = useData()
+</script>
+
+## Results
+
+### Theme Data
+<pre>{{ theme }}</pre>
+
+### Page Data
+<pre>{{ page }}</pre>
+
+### Page Frontmatter
+<pre>{{ frontmatter }}</pre>

Results

Theme Data

`,6)),a("pre",null,t(i(n)),1),e[1]||(e[1]=a("h3",{id:"page-data",tabindex:"-1"},[s("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"'},"​")],-1)),a("pre",null,t(i(l)),1),e[2]||(e[2]=a("h3",{id:"page-frontmatter",tabindex:"-1"},[s("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"'},"​")],-1)),a("pre",null,t(i(r)),1),e[3]||(e[3]=a("h2",{id:"more",tabindex:"-1"},[s("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"'},"​")],-1)),e[4]||(e[4]=a("p",null,[s("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_blank",rel:"noreferrer"},"full list of runtime APIs"),s(".")],-1))]))}});export{f as __pageData,E as default}; diff --git a/assets/api-examples.md.ChIkFPJ6.lean.js b/assets/api-examples.md.ChIkFPJ6.lean.js new file mode 100644 index 0000000..482dfa2 --- /dev/null +++ b/assets/api-examples.md.ChIkFPJ6.lean.js @@ -0,0 +1 @@ +import{u as p,c as h,o,aG as d,j as a,t,k as i,a as s}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"Runtime API Examples","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"api-examples.md","filePath":"api-examples.md"}'),m={name:"api-examples.md"},E=Object.assign(m,{setup(k){const{site:g,theme:n,page:l,frontmatter:r}=p();return(c,e)=>(o(),h("div",null,[e[0]||(e[0]=d("",6)),a("pre",null,t(i(n)),1),e[1]||(e[1]=a("h3",{id:"page-data",tabindex:"-1"},[s("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"'},"​")],-1)),a("pre",null,t(i(l)),1),e[2]||(e[2]=a("h3",{id:"page-frontmatter",tabindex:"-1"},[s("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"'},"​")],-1)),a("pre",null,t(i(r)),1),e[3]||(e[3]=a("h2",{id:"more",tabindex:"-1"},[s("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"'},"​")],-1)),e[4]||(e[4]=a("p",null,[s("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_blank",rel:"noreferrer"},"full list of runtime APIs"),s(".")],-1))]))}});export{f as __pageData,E as default}; diff --git a/assets/app.-wExlan1.js b/assets/app.-wExlan1.js deleted file mode 100644 index 5a1e631..0000000 --- a/assets/app.-wExlan1.js +++ /dev/null @@ -1 +0,0 @@ -import{R as p}from"./chunks/theme.DID5n9gm.js";import{R as s,at as i,au as u,av as c,aw as l,ax as f,ay as d,az as m,aA as h,aB as A,aC as g,d as v,u as w,v as y,s as C,aD as R,aE as P,aF as E,aa as b}from"./chunks/framework.CrOSaJJH.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=w();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),P(),E(),n.setup&&n.setup(),()=>b(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=x(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return g(S)}function x(){let e=s;return h(a=>{let t=A(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/assets/app.DffwpAEL.js b/assets/app.DffwpAEL.js new file mode 100644 index 0000000..b13571d --- /dev/null +++ b/assets/app.DffwpAEL.js @@ -0,0 +1 @@ +import{R as p}from"./chunks/theme.2RYyxkAj.js";import{R as s,at as i,au as u,av as c,aw as l,ax as f,ay as d,az as m,aA as h,aB as A,aC as g,d as v,u as w,v as y,s as C,aD as R,aE as P,aF as E,aa as b}from"./chunks/framework.DytOxJW6.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=w();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),P(),E(),n.setup&&n.setup(),()=>b(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=x(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return g(S)}function x(){let e=s;return h(a=>{let t=A(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/assets/backend_api_common_ai.md.Cphb6nko.js b/assets/backend_api_common_ai.md.Cphb6nko.js deleted file mode 100644 index c2bedae..0000000 --- a/assets/backend_api_common_ai.md.Cphb6nko.js +++ /dev/null @@ -1,24 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"AI 서비스 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/ai.md","filePath":"backend/api/common/ai.md"}'),l={name:"backend/api/common/ai.md"};function e(p,s,h,k,o,r){return n(),a("div",null,s[0]||(s[0]=[t(`

AI 서비스 API

Google Gemini AI를 연동하는 API입니다.

기본 정보

API 목록

1. Gemini AI 호출

엔드포인트: /api/ai/genai

설명: Google Gemini AI에 요청을 전송하고 응답을 받습니다.

요청 본문:

json
{
-  "prompt": "질문 내용",
-  "model": "gemini-pro",
-  "temperature": 0.7,
-  "maxTokens": 1000
-}

파라미터:

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": "AI 응답 텍스트입니다."
-}

응답 필드:

응답 예시 (실패):

json
{
-  "status": "E",
-  "message": "AI API 호출 중 오류 발생",
-  "data": null
-}

사용 예시:

javascript
const response = await axios.post('/api/ai/genai', {
-  prompt: 'Spring Boot에서 JWT 인증을 구현하는 방법을 설명해주세요.',
-  model: 'gemini-pro',
-  temperature: 0.7
-});
-
-if (response.data.status === 'S') {
-  const aiResponse = response.data.data;
-  console.log('AI 응답:', aiResponse);
-}

설정

AI 설정 파일

config/ai-config.yaml에서 API 키를 설정합니다.

yaml
gemini:
-  api-key: your-google-api-key

주의사항

  1. API 키: Google Cloud Console에서 API 키를 발급받아야 합니다.
  2. 비용: Gemini API 사용 시 비용이 발생할 수 있습니다.
  3. Rate Limit: API 호출 제한이 있을 수 있습니다.

다음 단계

`,29)]))}const g=i(l,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/backend_api_common_ai.md.Cphb6nko.lean.js b/assets/backend_api_common_ai.md.Cphb6nko.lean.js deleted file mode 100644 index 7700090..0000000 --- a/assets/backend_api_common_ai.md.Cphb6nko.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"AI 서비스 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/ai.md","filePath":"backend/api/common/ai.md"}'),l={name:"backend/api/common/ai.md"};function e(p,s,h,k,o,r){return n(),a("div",null,s[0]||(s[0]=[t("",29)]))}const g=i(l,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/backend_api_common_ai.md.zIuJQ59i.js b/assets/backend_api_common_ai.md.zIuJQ59i.js new file mode 100644 index 0000000..290576d --- /dev/null +++ b/assets/backend_api_common_ai.md.zIuJQ59i.js @@ -0,0 +1,24 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"AI 서비스 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/ai.md","filePath":"backend/api/common/ai.md"}'),l={name:"backend/api/common/ai.md"};function e(p,s,h,k,o,r){return n(),a("div",null,s[0]||(s[0]=[t(`

AI 서비스 API

Google Gemini AI를 연동하는 API입니다.

기본 정보

API 목록

1. Gemini AI 호출

엔드포인트: /api/ai/genai

설명: Google Gemini AI에 요청을 전송하고 응답을 받습니다.

요청 본문:

json
{
+  "prompt": "질문 내용",
+  "model": "gemini-pro",
+  "temperature": 0.7,
+  "maxTokens": 1000
+}

파라미터:

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": "AI 응답 텍스트입니다."
+}

응답 필드:

응답 예시 (실패):

json
{
+  "status": "E",
+  "message": "AI API 호출 중 오류 발생",
+  "data": null
+}

사용 예시:

javascript
const response = await axios.post('/api/ai/genai', {
+  prompt: 'Spring Boot에서 JWT 인증을 구현하는 방법을 설명해주세요.',
+  model: 'gemini-pro',
+  temperature: 0.7
+});
+
+if (response.data.status === 'S') {
+  const aiResponse = response.data.data;
+  console.log('AI 응답:', aiResponse);
+}

설정

AI 설정 파일

config/ai-config.yaml에서 API 키를 설정합니다.

yaml
gemini:
+  api-key: your-google-api-key

주의사항

  1. API 키: Google Cloud Console에서 API 키를 발급받아야 합니다.
  2. 비용: Gemini API 사용 시 비용이 발생할 수 있습니다.
  3. Rate Limit: API 호출 제한이 있을 수 있습니다.

다음 단계

`,29)]))}const g=i(l,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/backend_api_common_ai.md.zIuJQ59i.lean.js b/assets/backend_api_common_ai.md.zIuJQ59i.lean.js new file mode 100644 index 0000000..81812a6 --- /dev/null +++ b/assets/backend_api_common_ai.md.zIuJQ59i.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"AI 서비스 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/ai.md","filePath":"backend/api/common/ai.md"}'),l={name:"backend/api/common/ai.md"};function e(p,s,h,k,o,r){return n(),a("div",null,s[0]||(s[0]=[t("",29)]))}const g=i(l,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/backend_api_common_auth.md.CrFGm3ZQ.js b/assets/backend_api_common_auth.md.CrFGm3ZQ.js deleted file mode 100644 index a0a5f1c..0000000 --- a/assets/backend_api_common_auth.md.CrFGm3ZQ.js +++ /dev/null @@ -1,19 +0,0 @@ -import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"인증/토큰 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/auth.md","filePath":"backend/api/common/auth.md"}'),l={name:"backend/api/common/auth.md"};function t(o,s,h,p,r,c){return e(),i("div",null,s[0]||(s[0]=[n(`

인증/토큰 API

JWT 토큰 재발급을 처리하는 API입니다.

기본 정보

API 목록

1. Access Token 재발급

엔드포인트: /api/auth/getAccessToken

설명: Refresh Token을 사용하여 새로운 Access Token을 발급받습니다.

요청:

동작 순서:

  1. 쿠키에서 refreshToken, uuid 추출
  2. Refresh Token 검증
  3. Redis에서 토큰 정보 조회 및 일치 확인
  4. 새로운 Access Token 생성 및 반환

응답 예시 (성공):

json
{
-  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJVU0VSMDAxIiwidG9rZW5fdHlwZSI6ImFjY2VzcyIsImlhdCI6MTcwNDA2NDgwMCwiZXhwIjoxNzA0MDY1NzAwfQ..."
-}

응답 필드:

응답 예시 (실패 - 401):

json
"클라이언트에 토큰 없음"

또는

json
"레디스 디비에 토큰 정보가 없습니다"

또는

json
"Invalid refresh token"

사용 예시:

javascript
// 쿠키는 자동으로 전송됨
-const response = await axios.post('/api/auth/getAccessToken');
-
-if (response.status === 200) {
-  const newAccessToken = response.data.accessToken;
-  // 새로운 Access Token을 저장하여 사용
-  localStorage.setItem('accessToken', newAccessToken);
-} else {
-  // 토큰이 만료되었거나 유효하지 않음
-  // 로그인 페이지로 리다이렉트
-}

토큰 정보

Access Token

Refresh Token

UUID

에러 처리

401 Unauthorized

다음 경우에 401 응답이 반환됩니다:

  1. 쿠키 없음

    • refreshToken 쿠키가 없는 경우
    • uuid 쿠키가 없는 경우
  2. 토큰 검증 실패

    • Refresh Token이 유효하지 않은 경우
    • 토큰 타입이 일치하지 않는 경우 (Access Token을 전송한 경우)
    • 사용자 ID가 없는 경우
  3. Redis 조회 실패

    • Redis에 토큰 정보가 없는 경우
    • Redis 토큰과 쿠키 토큰이 일치하지 않는 경우

토큰 재발급 플로우

1. 클라이언트 → 서버: POST /api/auth/getAccessToken (쿠키 포함)
-2. 서버: 쿠키에서 refreshToken, uuid 추출
-3. 서버: Refresh Token 검증
-4. 서버: Redis에서 토큰 정보 조회
-5. 서버: 토큰 일치 확인
-6. 서버: 새 Access Token 생성
-7. 서버 → 클라이언트: 새 Access Token 반환

주의사항

  1. 쿠키 자동 전송: 쿠키는 브라우저에서 자동으로 전송되므로 별도 설정 불필요
  2. CORS 설정: 쿠키 전송을 위해 CORS 설정에서 allowCredentials: true 필요
  3. 토큰 만료: Refresh Token이 만료되면 다시 로그인해야 합니다.
  4. 보안: Refresh Token은 HttpOnly 쿠키로 저장되어 JavaScript에서 접근 불가

다음 단계

`,42)]))}const g=a(l,[["render",t]]);export{k as __pageData,g as default}; diff --git a/assets/backend_api_common_auth.md.CrFGm3ZQ.lean.js b/assets/backend_api_common_auth.md.CrFGm3ZQ.lean.js deleted file mode 100644 index 74be27e..0000000 --- a/assets/backend_api_common_auth.md.CrFGm3ZQ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"인증/토큰 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/auth.md","filePath":"backend/api/common/auth.md"}'),l={name:"backend/api/common/auth.md"};function t(o,s,h,p,r,c){return e(),i("div",null,s[0]||(s[0]=[n("",42)]))}const g=a(l,[["render",t]]);export{k as __pageData,g as default}; diff --git a/assets/backend_api_common_auth.md.DVgaEMoE.js b/assets/backend_api_common_auth.md.DVgaEMoE.js new file mode 100644 index 0000000..cba3245 --- /dev/null +++ b/assets/backend_api_common_auth.md.DVgaEMoE.js @@ -0,0 +1,19 @@ +import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"인증/토큰 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/auth.md","filePath":"backend/api/common/auth.md"}'),l={name:"backend/api/common/auth.md"};function t(o,s,h,p,r,c){return e(),i("div",null,s[0]||(s[0]=[n(`

인증/토큰 API

JWT 토큰 재발급을 처리하는 API입니다.

기본 정보

API 목록

1. Access Token 재발급

엔드포인트: /api/auth/getAccessToken

설명: Refresh Token을 사용하여 새로운 Access Token을 발급받습니다.

요청:

동작 순서:

  1. 쿠키에서 refreshToken, uuid 추출
  2. Refresh Token 검증
  3. Redis에서 토큰 정보 조회 및 일치 확인
  4. 새로운 Access Token 생성 및 반환

응답 예시 (성공):

json
{
+  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJVU0VSMDAxIiwidG9rZW5fdHlwZSI6ImFjY2VzcyIsImlhdCI6MTcwNDA2NDgwMCwiZXhwIjoxNzA0MDY1NzAwfQ..."
+}

응답 필드:

응답 예시 (실패 - 401):

json
"클라이언트에 토큰 없음"

또는

json
"레디스 디비에 토큰 정보가 없습니다"

또는

json
"Invalid refresh token"

사용 예시:

javascript
// 쿠키는 자동으로 전송됨
+const response = await axios.post('/api/auth/getAccessToken');
+
+if (response.status === 200) {
+  const newAccessToken = response.data.accessToken;
+  // 새로운 Access Token을 저장하여 사용
+  localStorage.setItem('accessToken', newAccessToken);
+} else {
+  // 토큰이 만료되었거나 유효하지 않음
+  // 로그인 페이지로 리다이렉트
+}

토큰 정보

Access Token

Refresh Token

UUID

에러 처리

401 Unauthorized

다음 경우에 401 응답이 반환됩니다:

  1. 쿠키 없음

    • refreshToken 쿠키가 없는 경우
    • uuid 쿠키가 없는 경우
  2. 토큰 검증 실패

    • Refresh Token이 유효하지 않은 경우
    • 토큰 타입이 일치하지 않는 경우 (Access Token을 전송한 경우)
    • 사용자 ID가 없는 경우
  3. Redis 조회 실패

    • Redis에 토큰 정보가 없는 경우
    • Redis 토큰과 쿠키 토큰이 일치하지 않는 경우

토큰 재발급 플로우

1. 클라이언트 → 서버: POST /api/auth/getAccessToken (쿠키 포함)
+2. 서버: 쿠키에서 refreshToken, uuid 추출
+3. 서버: Refresh Token 검증
+4. 서버: Redis에서 토큰 정보 조회
+5. 서버: 토큰 일치 확인
+6. 서버: 새 Access Token 생성
+7. 서버 → 클라이언트: 새 Access Token 반환

주의사항

  1. 쿠키 자동 전송: 쿠키는 브라우저에서 자동으로 전송되므로 별도 설정 불필요
  2. CORS 설정: 쿠키 전송을 위해 CORS 설정에서 allowCredentials: true 필요
  3. 토큰 만료: Refresh Token이 만료되면 다시 로그인해야 합니다.
  4. 보안: Refresh Token은 HttpOnly 쿠키로 저장되어 JavaScript에서 접근 불가

다음 단계

`,42)]))}const g=a(l,[["render",t]]);export{k as __pageData,g as default}; diff --git a/assets/backend_api_common_auth.md.DVgaEMoE.lean.js b/assets/backend_api_common_auth.md.DVgaEMoE.lean.js new file mode 100644 index 0000000..fedbaae --- /dev/null +++ b/assets/backend_api_common_auth.md.DVgaEMoE.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"인증/토큰 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/auth.md","filePath":"backend/api/common/auth.md"}'),l={name:"backend/api/common/auth.md"};function t(o,s,h,p,r,c){return e(),i("div",null,s[0]||(s[0]=[n("",42)]))}const g=a(l,[["render",t]]);export{k as __pageData,g as default}; diff --git a/assets/backend_api_common_database.md.BlhwGiZ9.js b/assets/backend_api_common_database.md.BlhwGiZ9.js deleted file mode 100644 index badf287..0000000 --- a/assets/backend_api_common_database.md.BlhwGiZ9.js +++ /dev/null @@ -1,136 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"데이터베이스 프로시저 호출 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/database.md","filePath":"backend/api/common/database.md"}'),l={name:"backend/api/common/database.md"};function p(h,s,k,e,E,o){return n(),a("div",null,s[0]||(s[0]=[t(`

데이터베이스 프로시저 호출 API

데이터베이스 프로시저를 직접 호출하는 API입니다.

기본 정보

API 목록

1. 단일 프로시저 실행

엔드포인트: /api/direct/call/atomic

설명: 단일 프로시저를 실행하고 결과를 반환합니다.

요청 본문:

json
{
-  "procedure": "YOUR_PROCEDURE_NAME",
-  "params": {
-    "V_P_PARAM1": "value1",
-    "V_P_PARAM2": "value2"
-  }
-}

파라미터:

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": {
-    "CV_1": [
-      {
-        "COLUMN1": "value1",
-        "COLUMN2": "value2"
-      }
-    ],
-    "V_P_ERROR_CODE": "MSG0001",
-    "V_P_ERROR_STR": ""
-  }
-}

응답 필드 설명:

응답 예시 (실패):

json
{
-  "status": "E",
-  "message": "프로시저 호출 중 오류 발생",
-  "data": null
-}

사용 예시:

javascript
// JavaScript (Axios)
-const response = await axios.post('/api/direct/call/atomic', {
-  procedure: 'P_USER_LIST',
-  params: {
-    V_P_USER_ID: 'USER001',
-    V_P_DEPT_CODE: 'DEPT01'
-  }
-});
-
-if (response.data.status === 'S') {
-  const userList = response.data.data.CV_1;
-  console.log(userList);
-}

2. 다중 프로시저 일괄 실행

엔드포인트: /api/direct/call/atomicList

설명: 여러 프로시저를 순차적으로 실행합니다. 하나라도 실패하면 중단됩니다.

요청 본문:

json
{
-  "listData": [
-    {
-      "rowNum": "1",
-      "procedure": "PROCEDURE_1",
-      "params": {
-        "V_P_PARAM1": "value1"
-      }
-    },
-    {
-      "rowNum": "2",
-      "procedure": "PROCEDURE_2",
-      "params": {
-        "V_P_PARAM2": "value2"
-      }
-    }
-  ]
-}

파라미터:

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": {}
-}

응답 예시 (실패):

json
{
-  "status": "E",
-  "message": "2 번째 데이터에서 에러 발생.",
-  "data": null
-}

사용 예시:

javascript
const response = await axios.post('/api/direct/call/atomicList', {
-  listData: [
-    {
-      rowNum: '1',
-      procedure: 'P_INSERT_USER',
-      params: { V_P_USER_ID: 'USER001' }
-    },
-    {
-      rowNum: '2',
-      procedure: 'P_UPDATE_USER',
-      params: { V_P_USER_ID: 'USER001' }
-    }
-  ]
-});

3. 다중 커서 결과 조회

엔드포인트: /api/direct/call/multiSelectList

설명: 여러 커서 결과를 조회하고, CLOB 데이터를 문자열로 변환합니다.

요청 본문:

json
{
-  "procedure": "YOUR_PROCEDURE",
-  "params": {
-    "V_P_PARAM1": "value1"
-  },
-  "getType": "json"
-}

파라미터:

응답 예시:

json
{
-  "cv_1": [
-    {
-      "BIZCOMPONENTID": "COMP001",
-      "CLOB1": "{\\"key\\":\\"value\\"}"
-    }
-  ],
-  "V_P_ERROR_CODE": "MSG0001"
-}

특징:


4. String 배열 파라미터 프로시저 호출

엔드포인트: /api/direct/jatomic

설명: String 배열을 파라미터로 받는 프로시저를 호출합니다.

요청 본문:

json
{
-  "procedure": "YOUR_PROCEDURE",
-  "params": ["param1", "param2", "param3"],
-  "getType": "json"
-}

또는

json
{
-  "procedure": "YOUR_PROCEDURE",
-  "params": "[\\"param1\\", \\"param2\\", \\"param3\\"]",
-  "getType": "json"
-}

파라미터:

응답 예시:

json
{
-  "list": {
-    "cv_1": [
-      {
-        "COLUMN1": "value1"
-      }
-    ]
-  },
-  "param": {
-    "server_start_time": "2024-01-01 10:00:00",
-    "server_end_time": "2024-01-01 10:00:01",
-    "V_P_ERROR_CODE": "MSG0001"
-  }
-}

응답 구조:


5. 클라이언트 에러 로그 저장

엔드포인트: /api/direct/call/logs

설명: 클라이언트에서 발생한 에러 로그를 서버에 저장합니다.

요청 본문:

json
{
-  "params": {
-    "browser": "Chrome 120.0",
-    "message": "에러 메시지",
-    "stack": "에러 스택 트레이스",
-    "url": "http://localhost:5173/page"
-  }
-}

파라미터:

응답 예시:

json
{
-  "status": "S",
-  "logs": "true",
-  "message": "에러 로그 저장에 성공하였습니다."
-}

프로시저 결과 구조

커서 결과

프로시저에서 반환하는 커서는 CV_1, CV_2, ... 형식의 키로 반환됩니다.

json
{
-  "CV_1": [
-    {
-      "COLUMN1": "value1",
-      "COLUMN2": "value2"
-    },
-    {
-      "COLUMN1": "value3",
-      "COLUMN2": "value4"
-    }
-  ],
-  "CV_2": [
-    {
-      "COLUMN3": "value5"
-    }
-  ]
-}

에러 코드

주의사항

  1. 파라미터명 대소문자: 프로시저 파라미터명은 대문자로 전달하는 것을 권장합니다.
  2. 커서 결과: CV_로 시작하는 키는 자동으로 커서로 인식됩니다.
  3. CLOB 처리: multiSelectList API는 CLOB을 자동으로 문자열로 변환합니다.
  4. 트랜잭션: atomicList는 모든 프로시저가 성공해야 커밋됩니다.

다음 단계

`,81)]))}const g=i(l,[["render",p]]);export{d as __pageData,g as default}; diff --git a/assets/backend_api_common_database.md.BlhwGiZ9.lean.js b/assets/backend_api_common_database.md.BlhwGiZ9.lean.js deleted file mode 100644 index 0767b54..0000000 --- a/assets/backend_api_common_database.md.BlhwGiZ9.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"데이터베이스 프로시저 호출 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/database.md","filePath":"backend/api/common/database.md"}'),l={name:"backend/api/common/database.md"};function p(h,s,k,e,E,o){return n(),a("div",null,s[0]||(s[0]=[t("",81)]))}const g=i(l,[["render",p]]);export{d as __pageData,g as default}; diff --git a/assets/backend_api_common_database.md.CYU8s8pg.js b/assets/backend_api_common_database.md.CYU8s8pg.js new file mode 100644 index 0000000..ad2307a --- /dev/null +++ b/assets/backend_api_common_database.md.CYU8s8pg.js @@ -0,0 +1,136 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"데이터베이스 프로시저 호출 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/database.md","filePath":"backend/api/common/database.md"}'),l={name:"backend/api/common/database.md"};function p(h,s,k,e,E,o){return n(),a("div",null,s[0]||(s[0]=[t(`

데이터베이스 프로시저 호출 API

데이터베이스 프로시저를 직접 호출하는 API입니다.

기본 정보

API 목록

1. 단일 프로시저 실행

엔드포인트: /api/direct/call/atomic

설명: 단일 프로시저를 실행하고 결과를 반환합니다.

요청 본문:

json
{
+  "procedure": "YOUR_PROCEDURE_NAME",
+  "params": {
+    "V_P_PARAM1": "value1",
+    "V_P_PARAM2": "value2"
+  }
+}

파라미터:

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": {
+    "CV_1": [
+      {
+        "COLUMN1": "value1",
+        "COLUMN2": "value2"
+      }
+    ],
+    "V_P_ERROR_CODE": "MSG0001",
+    "V_P_ERROR_STR": ""
+  }
+}

응답 필드 설명:

응답 예시 (실패):

json
{
+  "status": "E",
+  "message": "프로시저 호출 중 오류 발생",
+  "data": null
+}

사용 예시:

javascript
// JavaScript (Axios)
+const response = await axios.post('/api/direct/call/atomic', {
+  procedure: 'P_USER_LIST',
+  params: {
+    V_P_USER_ID: 'USER001',
+    V_P_DEPT_CODE: 'DEPT01'
+  }
+});
+
+if (response.data.status === 'S') {
+  const userList = response.data.data.CV_1;
+  console.log(userList);
+}

2. 다중 프로시저 일괄 실행

엔드포인트: /api/direct/call/atomicList

설명: 여러 프로시저를 순차적으로 실행합니다. 하나라도 실패하면 중단됩니다.

요청 본문:

json
{
+  "listData": [
+    {
+      "rowNum": "1",
+      "procedure": "PROCEDURE_1",
+      "params": {
+        "V_P_PARAM1": "value1"
+      }
+    },
+    {
+      "rowNum": "2",
+      "procedure": "PROCEDURE_2",
+      "params": {
+        "V_P_PARAM2": "value2"
+      }
+    }
+  ]
+}

파라미터:

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": {}
+}

응답 예시 (실패):

json
{
+  "status": "E",
+  "message": "2 번째 데이터에서 에러 발생.",
+  "data": null
+}

사용 예시:

javascript
const response = await axios.post('/api/direct/call/atomicList', {
+  listData: [
+    {
+      rowNum: '1',
+      procedure: 'P_INSERT_USER',
+      params: { V_P_USER_ID: 'USER001' }
+    },
+    {
+      rowNum: '2',
+      procedure: 'P_UPDATE_USER',
+      params: { V_P_USER_ID: 'USER001' }
+    }
+  ]
+});

3. 다중 커서 결과 조회

엔드포인트: /api/direct/call/multiSelectList

설명: 여러 커서 결과를 조회하고, CLOB 데이터를 문자열로 변환합니다.

요청 본문:

json
{
+  "procedure": "YOUR_PROCEDURE",
+  "params": {
+    "V_P_PARAM1": "value1"
+  },
+  "getType": "json"
+}

파라미터:

응답 예시:

json
{
+  "cv_1": [
+    {
+      "BIZCOMPONENTID": "COMP001",
+      "CLOB1": "{\\"key\\":\\"value\\"}"
+    }
+  ],
+  "V_P_ERROR_CODE": "MSG0001"
+}

특징:


4. String 배열 파라미터 프로시저 호출

엔드포인트: /api/direct/jatomic

설명: String 배열을 파라미터로 받는 프로시저를 호출합니다.

요청 본문:

json
{
+  "procedure": "YOUR_PROCEDURE",
+  "params": ["param1", "param2", "param3"],
+  "getType": "json"
+}

또는

json
{
+  "procedure": "YOUR_PROCEDURE",
+  "params": "[\\"param1\\", \\"param2\\", \\"param3\\"]",
+  "getType": "json"
+}

파라미터:

응답 예시:

json
{
+  "list": {
+    "cv_1": [
+      {
+        "COLUMN1": "value1"
+      }
+    ]
+  },
+  "param": {
+    "server_start_time": "2024-01-01 10:00:00",
+    "server_end_time": "2024-01-01 10:00:01",
+    "V_P_ERROR_CODE": "MSG0001"
+  }
+}

응답 구조:


5. 클라이언트 에러 로그 저장

엔드포인트: /api/direct/call/logs

설명: 클라이언트에서 발생한 에러 로그를 서버에 저장합니다.

요청 본문:

json
{
+  "params": {
+    "browser": "Chrome 120.0",
+    "message": "에러 메시지",
+    "stack": "에러 스택 트레이스",
+    "url": "http://localhost:5173/page"
+  }
+}

파라미터:

응답 예시:

json
{
+  "status": "S",
+  "logs": "true",
+  "message": "에러 로그 저장에 성공하였습니다."
+}

프로시저 결과 구조

커서 결과

프로시저에서 반환하는 커서는 CV_1, CV_2, ... 형식의 키로 반환됩니다.

json
{
+  "CV_1": [
+    {
+      "COLUMN1": "value1",
+      "COLUMN2": "value2"
+    },
+    {
+      "COLUMN1": "value3",
+      "COLUMN2": "value4"
+    }
+  ],
+  "CV_2": [
+    {
+      "COLUMN3": "value5"
+    }
+  ]
+}

에러 코드

주의사항

  1. 파라미터명 대소문자: 프로시저 파라미터명은 대문자로 전달하는 것을 권장합니다.
  2. 커서 결과: CV_로 시작하는 키는 자동으로 커서로 인식됩니다.
  3. CLOB 처리: multiSelectList API는 CLOB을 자동으로 문자열로 변환합니다.
  4. 트랜잭션: atomicList는 모든 프로시저가 성공해야 커밋됩니다.

다음 단계

`,81)]))}const g=i(l,[["render",p]]);export{d as __pageData,g as default}; diff --git a/assets/backend_api_common_database.md.CYU8s8pg.lean.js b/assets/backend_api_common_database.md.CYU8s8pg.lean.js new file mode 100644 index 0000000..7d701bf --- /dev/null +++ b/assets/backend_api_common_database.md.CYU8s8pg.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"데이터베이스 프로시저 호출 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/database.md","filePath":"backend/api/common/database.md"}'),l={name:"backend/api/common/database.md"};function p(h,s,k,e,E,o){return n(),a("div",null,s[0]||(s[0]=[t("",81)]))}const g=i(l,[["render",p]]);export{d as __pageData,g as default}; diff --git a/assets/backend_api_common_file.md.BfuynIf1.js b/assets/backend_api_common_file.md.BfuynIf1.js deleted file mode 100644 index d388f66..0000000 --- a/assets/backend_api_common_file.md.BfuynIf1.js +++ /dev/null @@ -1,106 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const r=JSON.parse('{"title":"파일 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/file.md","filePath":"backend/api/common/file.md"}'),l={name:"backend/api/common/file.md"};function h(p,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[t(`

파일 관리 API

파일 업로드 및 다운로드를 처리하는 API입니다.

기본 정보

API 목록

1. 다중 파일/링크 업로드

엔드포인트: /api/file/JSONMultiFileUpload

설명: 파일과 링크를 함께 업로드할 수 있습니다. 신규 추가, 수정, 삭제를 한 번에 처리합니다.

요청 형식: multipart/form-data

파라미터:

Form Data

slist 구조 (JSON 문자열)

json
[
-  {
-    "CHG_STAT": "N",
-    "ORG_STAT": "",
-    "FILE_TYPE": "1",
-    "SEQ": "0",
-    "TITLE_TXT": "파일명",
-    "LINK_TXT": "",
-    "ORD_SEQ": "1",
-    "SERVER_FILE_NAME": ""
-  },
-  {
-    "CHG_STAT": "N",
-    "ORG_STAT": "",
-    "FILE_TYPE": "2",
-    "SEQ": "0",
-    "TITLE_TXT": "링크명",
-    "LINK_TXT": "https://example.com",
-    "ORD_SEQ": "2",
-    "SERVER_FILE_NAME": ""
-  },
-  {
-    "CHG_STAT": "U",
-    "ORG_STAT": "A",
-    "FILE_TYPE": "1",
-    "SEQ": "123",
-    "TITLE_TXT": "수정된 파일명",
-    "LINK_TXT": "",
-    "ORD_SEQ": "3",
-    "SERVER_FILE_NAME": "uuid-filename.ext"
-  },
-  {
-    "CHG_STAT": "D",
-    "ORG_STAT": "A",
-    "FILE_TYPE": "1",
-    "SEQ": "456",
-    "TITLE_TXT": "",
-    "LINK_TXT": "",
-    "ORD_SEQ": "",
-    "SERVER_FILE_NAME": "uuid-filename.ext"
-  }
-]

필드 설명:

처리 순서:

  1. 신규 링크 추가 (CHG_STAT="N", FILE_TYPE="2")
  2. 신규 파일 업로드 (CHG_STAT="N", FILE_TYPE="1")
  3. 기존 파일/링크 수정 (ORG_STAT="A", CHG_STAT="U")
  4. 기존 파일/링크 삭제 (ORG_STAT="A", CHG_STAT="D")

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": {}
-}

응답 예시 (실패):

json
{
-  "status": "E",
-  "message": "파일 업로드에 실패 했습니다.",
-  "data": null
-}

사용 예시:

javascript
// FormData 생성
-const formData = new FormData();
-
-// 파일 목록 JSON 문자열 (URL 인코딩 필요)
-const fileList = [
-  {
-    CHG_STAT: 'N',
-    ORG_STAT: '',
-    FILE_TYPE: '1',
-    SEQ: '0',
-    TITLE_TXT: '새 파일',
-    LINK_TXT: '',
-    ORD_SEQ: '1',
-    SERVER_FILE_NAME: ''
-  }
-];
-formData.append('slist', encodeURIComponent(JSON.stringify(fileList)));
-
-// 실제 파일 추가
-formData.append('files', file1);
-formData.append('files', file2);
-
-// 공통 파라미터
-formData.append('user_id', 'USER001');
-formData.append('lang_id', 'KOR');
-formData.append('pc', 'PC001');
-formData.append('source_type', 'DOC');
-formData.append('source_code', 'DOC001');
-
-// 업로드
-const response = await axios.post('/api/file/JSONMultiFileUpload', formData, {
-  headers: {
-    'Content-Type': 'multipart/form-data'
-  }
-});

2. 파일 다운로드

엔드포인트: /api/file/fileDownload

설명: 서버에 저장된 파일을 다운로드합니다.

요청 본문:

json
{
-  "F_SEQ": "uuid-filename.ext",
-  "LangID": "KOR",
-  "UserID": "USER001",
-  "ipAddress": "192.168.1.100"
-}

파라미터:

내부 동작:

  1. F_SEQ로 파일 정보 조회 (프로시저: P_COM5100_Q)
  2. 서버 파일 경로 확인
  3. 파일 존재 여부 확인
  4. 파일 바이너리 반환

응답:

응답 예시 (실패 - 400):

\`F_SEQ\` 파라미터가 누락되었습니다.

응답 예시 (실패 - 404):

파일이 존재하지 않습니다.

사용 예시:

javascript
// 파일 다운로드
-const response = await axios.post('/api/file/fileDownload', {
-  F_SEQ: 'uuid-filename.ext',
-  LangID: 'KOR',
-  UserID: 'USER001',
-  ipAddress: '192.168.1.100'
-}, {
-  responseType: 'blob' // 바이너리 데이터 받기
-});
-
-// Blob을 파일로 다운로드
-const url = window.URL.createObjectURL(new Blob([response.data]));
-const link = document.createElement('a');
-link.href = url;
-link.setAttribute('download', 'filename.ext');
-document.body.appendChild(link);
-link.click();
-link.remove();

파일 처리 규칙

파일 타입

변경 상태

파일명 규칙

주의사항

  1. slist 인코딩: slist는 URL 인코딩된 JSON 문자열이어야 합니다.
  2. 파일 순서: files 배열의 순서는 slist에서 FILE_TYPE="1"인 항목의 순서와 일치해야 합니다.
  3. 파일 크기 제한: 기본 100MB (설정에서 변경 가능)
  4. 파일 경로: 서버 파일 경로는 application-dev.yamlfile.path 설정 사용

다음 단계

`,54)]))}const g=i(l,[["render",h]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_common_file.md.BfuynIf1.lean.js b/assets/backend_api_common_file.md.BfuynIf1.lean.js deleted file mode 100644 index 9cc6533..0000000 --- a/assets/backend_api_common_file.md.BfuynIf1.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const r=JSON.parse('{"title":"파일 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/file.md","filePath":"backend/api/common/file.md"}'),l={name:"backend/api/common/file.md"};function h(p,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[t("",54)]))}const g=i(l,[["render",h]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_common_file.md.Dt9rNkqn.js b/assets/backend_api_common_file.md.Dt9rNkqn.js new file mode 100644 index 0000000..fb72307 --- /dev/null +++ b/assets/backend_api_common_file.md.Dt9rNkqn.js @@ -0,0 +1,106 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const r=JSON.parse('{"title":"파일 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/file.md","filePath":"backend/api/common/file.md"}'),l={name:"backend/api/common/file.md"};function h(p,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[t(`

파일 관리 API

파일 업로드 및 다운로드를 처리하는 API입니다.

기본 정보

API 목록

1. 다중 파일/링크 업로드

엔드포인트: /api/file/JSONMultiFileUpload

설명: 파일과 링크를 함께 업로드할 수 있습니다. 신규 추가, 수정, 삭제를 한 번에 처리합니다.

요청 형식: multipart/form-data

파라미터:

Form Data

slist 구조 (JSON 문자열)

json
[
+  {
+    "CHG_STAT": "N",
+    "ORG_STAT": "",
+    "FILE_TYPE": "1",
+    "SEQ": "0",
+    "TITLE_TXT": "파일명",
+    "LINK_TXT": "",
+    "ORD_SEQ": "1",
+    "SERVER_FILE_NAME": ""
+  },
+  {
+    "CHG_STAT": "N",
+    "ORG_STAT": "",
+    "FILE_TYPE": "2",
+    "SEQ": "0",
+    "TITLE_TXT": "링크명",
+    "LINK_TXT": "https://example.com",
+    "ORD_SEQ": "2",
+    "SERVER_FILE_NAME": ""
+  },
+  {
+    "CHG_STAT": "U",
+    "ORG_STAT": "A",
+    "FILE_TYPE": "1",
+    "SEQ": "123",
+    "TITLE_TXT": "수정된 파일명",
+    "LINK_TXT": "",
+    "ORD_SEQ": "3",
+    "SERVER_FILE_NAME": "uuid-filename.ext"
+  },
+  {
+    "CHG_STAT": "D",
+    "ORG_STAT": "A",
+    "FILE_TYPE": "1",
+    "SEQ": "456",
+    "TITLE_TXT": "",
+    "LINK_TXT": "",
+    "ORD_SEQ": "",
+    "SERVER_FILE_NAME": "uuid-filename.ext"
+  }
+]

필드 설명:

처리 순서:

  1. 신규 링크 추가 (CHG_STAT="N", FILE_TYPE="2")
  2. 신규 파일 업로드 (CHG_STAT="N", FILE_TYPE="1")
  3. 기존 파일/링크 수정 (ORG_STAT="A", CHG_STAT="U")
  4. 기존 파일/링크 삭제 (ORG_STAT="A", CHG_STAT="D")

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": {}
+}

응답 예시 (실패):

json
{
+  "status": "E",
+  "message": "파일 업로드에 실패 했습니다.",
+  "data": null
+}

사용 예시:

javascript
// FormData 생성
+const formData = new FormData();
+
+// 파일 목록 JSON 문자열 (URL 인코딩 필요)
+const fileList = [
+  {
+    CHG_STAT: 'N',
+    ORG_STAT: '',
+    FILE_TYPE: '1',
+    SEQ: '0',
+    TITLE_TXT: '새 파일',
+    LINK_TXT: '',
+    ORD_SEQ: '1',
+    SERVER_FILE_NAME: ''
+  }
+];
+formData.append('slist', encodeURIComponent(JSON.stringify(fileList)));
+
+// 실제 파일 추가
+formData.append('files', file1);
+formData.append('files', file2);
+
+// 공통 파라미터
+formData.append('user_id', 'USER001');
+formData.append('lang_id', 'KOR');
+formData.append('pc', 'PC001');
+formData.append('source_type', 'DOC');
+formData.append('source_code', 'DOC001');
+
+// 업로드
+const response = await axios.post('/api/file/JSONMultiFileUpload', formData, {
+  headers: {
+    'Content-Type': 'multipart/form-data'
+  }
+});

2. 파일 다운로드

엔드포인트: /api/file/fileDownload

설명: 서버에 저장된 파일을 다운로드합니다.

요청 본문:

json
{
+  "F_SEQ": "uuid-filename.ext",
+  "LangID": "KOR",
+  "UserID": "USER001",
+  "ipAddress": "192.168.1.100"
+}

파라미터:

내부 동작:

  1. F_SEQ로 파일 정보 조회 (프로시저: P_COM5100_Q)
  2. 서버 파일 경로 확인
  3. 파일 존재 여부 확인
  4. 파일 바이너리 반환

응답:

응답 예시 (실패 - 400):

\`F_SEQ\` 파라미터가 누락되었습니다.

응답 예시 (실패 - 404):

파일이 존재하지 않습니다.

사용 예시:

javascript
// 파일 다운로드
+const response = await axios.post('/api/file/fileDownload', {
+  F_SEQ: 'uuid-filename.ext',
+  LangID: 'KOR',
+  UserID: 'USER001',
+  ipAddress: '192.168.1.100'
+}, {
+  responseType: 'blob' // 바이너리 데이터 받기
+});
+
+// Blob을 파일로 다운로드
+const url = window.URL.createObjectURL(new Blob([response.data]));
+const link = document.createElement('a');
+link.href = url;
+link.setAttribute('download', 'filename.ext');
+document.body.appendChild(link);
+link.click();
+link.remove();

파일 처리 규칙

파일 타입

변경 상태

파일명 규칙

주의사항

  1. slist 인코딩: slist는 URL 인코딩된 JSON 문자열이어야 합니다.
  2. 파일 순서: files 배열의 순서는 slist에서 FILE_TYPE="1"인 항목의 순서와 일치해야 합니다.
  3. 파일 크기 제한: 기본 100MB (설정에서 변경 가능)
  4. 파일 경로: 서버 파일 경로는 application-dev.yamlfile.path 설정 사용

다음 단계

`,54)]))}const g=i(l,[["render",h]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_common_file.md.Dt9rNkqn.lean.js b/assets/backend_api_common_file.md.Dt9rNkqn.lean.js new file mode 100644 index 0000000..1a31928 --- /dev/null +++ b/assets/backend_api_common_file.md.Dt9rNkqn.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const r=JSON.parse('{"title":"파일 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/file.md","filePath":"backend/api/common/file.md"}'),l={name:"backend/api/common/file.md"};function h(p,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[t("",54)]))}const g=i(l,[["render",h]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_common_redis.md.B3P6UwTn.js b/assets/backend_api_common_redis.md.B3P6UwTn.js deleted file mode 100644 index 0a22575..0000000 --- a/assets/backend_api_common_redis.md.B3P6UwTn.js +++ /dev/null @@ -1,63 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const r=JSON.parse('{"title":"Redis 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/redis.md","filePath":"backend/api/common/redis.md"}'),l={name:"backend/api/common/redis.md"};function e(p,s,h,k,d,o){return n(),a("div",null,s[0]||(s[0]=[t(`

Redis 관리 API

Redis에 저장된 토큰 정보를 조회하고 삭제하는 API입니다.

기본 정보

API 목록

1. Redis Hash 데이터 조회

엔드포인트: /api/direct/call/getRedisHashData

설명: Redis에 저장된 토큰 정보를 조회합니다. refreshTokenuuid는 응답에서 제외됩니다.

요청 본문:

json
{
-  "session": {
-    "UserID": "USER001"
-  }
-}

파라미터:

내부 동작:

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": [
-    {
-      "userId": "USER001",
-      "ipAddress": "192.168.1.100",
-      "userAgent": "Mozilla/5.0...",
-      "createdAt": "2024-01-01 10:00:00"
-    },
-    {
-      "userId": "USER002",
-      "ipAddress": "192.168.1.101",
-      "userAgent": "Mozilla/5.0...",
-      "createdAt": "2024-01-01 11:00:00"
-    }
-  ]
-}

응답 필드:

사용 예시:

javascript
const response = await axios.post('/api/direct/call/getRedisHashData', {
-  session: {
-    UserID: 'USER001'
-  }
-});
-
-if (response.data.status === 'S') {
-  const tokenList = response.data.data;
-  console.log('활성 토큰 목록:', tokenList);
-}

2. Redis Hash 데이터 삭제

엔드포인트: /api/direct/call/delRedisHashData

설명: 지정된 사용자의 Redis 토큰을 삭제합니다.

요청 본문:

json
{
-  "userList": [
-    {
-      "userId": "USER001"
-    },
-    {
-      "userId": "USER002"
-    }
-  ]
-}

파라미터:

내부 동작:

  1. Redis에서 token:* 패턴의 모든 토큰 조회
  2. userList에 포함된 사용자의 토큰만 필터링
  3. 필터링된 토큰 삭제

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": {
-    "deletedCount": 2,
-    "message": "토큰 삭제 완료"
-  }
-}

응답 필드:

사용 예시:

javascript
const response = await axios.post('/api/direct/call/delRedisHashData', {
-  userList: [
-    { userId: 'USER001' },
-    { userId: 'USER002' }
-  ]
-});
-
-if (response.data.status === 'S') {
-  console.log('삭제된 토큰 수:', response.data.data.deletedCount);
-}

Redis 데이터 구조

토큰 저장 구조

Redis Hash 구조로 저장됩니다:

Key: token:{uuid}

Hash Fields:

예시:

Key: token:abc123def456
-Fields:
-  userId: USER001
-  refreshToken: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
-  uuid: abc123def456
-  ipAddress: 192.168.1.100
-  userAgent: Mozilla/5.0...
-  createdAt: 2024-01-01 10:00:00

주의사항

  1. 보안: refreshTokenuuid는 응답에서 제외되어 전송되지 않습니다.
  2. 패턴 매칭: 현재는 token:* 패턴만 지원합니다.
  3. 권한: 관리자 권한이 필요한 API일 수 있습니다.

다음 단계

`,49)]))}const c=i(l,[["render",e]]);export{r as __pageData,c as default}; diff --git a/assets/backend_api_common_redis.md.B3P6UwTn.lean.js b/assets/backend_api_common_redis.md.B3P6UwTn.lean.js deleted file mode 100644 index 36bd060..0000000 --- a/assets/backend_api_common_redis.md.B3P6UwTn.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const r=JSON.parse('{"title":"Redis 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/redis.md","filePath":"backend/api/common/redis.md"}'),l={name:"backend/api/common/redis.md"};function e(p,s,h,k,d,o){return n(),a("div",null,s[0]||(s[0]=[t("",49)]))}const c=i(l,[["render",e]]);export{r as __pageData,c as default}; diff --git a/assets/backend_api_common_redis.md.ReQWNJXT.js b/assets/backend_api_common_redis.md.ReQWNJXT.js new file mode 100644 index 0000000..348ec1a --- /dev/null +++ b/assets/backend_api_common_redis.md.ReQWNJXT.js @@ -0,0 +1,63 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const r=JSON.parse('{"title":"Redis 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/redis.md","filePath":"backend/api/common/redis.md"}'),l={name:"backend/api/common/redis.md"};function e(p,s,h,k,d,o){return n(),a("div",null,s[0]||(s[0]=[t(`

Redis 관리 API

Redis에 저장된 토큰 정보를 조회하고 삭제하는 API입니다.

기본 정보

API 목록

1. Redis Hash 데이터 조회

엔드포인트: /api/direct/call/getRedisHashData

설명: Redis에 저장된 토큰 정보를 조회합니다. refreshTokenuuid는 응답에서 제외됩니다.

요청 본문:

json
{
+  "session": {
+    "UserID": "USER001"
+  }
+}

파라미터:

내부 동작:

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": [
+    {
+      "userId": "USER001",
+      "ipAddress": "192.168.1.100",
+      "userAgent": "Mozilla/5.0...",
+      "createdAt": "2024-01-01 10:00:00"
+    },
+    {
+      "userId": "USER002",
+      "ipAddress": "192.168.1.101",
+      "userAgent": "Mozilla/5.0...",
+      "createdAt": "2024-01-01 11:00:00"
+    }
+  ]
+}

응답 필드:

사용 예시:

javascript
const response = await axios.post('/api/direct/call/getRedisHashData', {
+  session: {
+    UserID: 'USER001'
+  }
+});
+
+if (response.data.status === 'S') {
+  const tokenList = response.data.data;
+  console.log('활성 토큰 목록:', tokenList);
+}

2. Redis Hash 데이터 삭제

엔드포인트: /api/direct/call/delRedisHashData

설명: 지정된 사용자의 Redis 토큰을 삭제합니다.

요청 본문:

json
{
+  "userList": [
+    {
+      "userId": "USER001"
+    },
+    {
+      "userId": "USER002"
+    }
+  ]
+}

파라미터:

내부 동작:

  1. Redis에서 token:* 패턴의 모든 토큰 조회
  2. userList에 포함된 사용자의 토큰만 필터링
  3. 필터링된 토큰 삭제

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": {
+    "deletedCount": 2,
+    "message": "토큰 삭제 완료"
+  }
+}

응답 필드:

사용 예시:

javascript
const response = await axios.post('/api/direct/call/delRedisHashData', {
+  userList: [
+    { userId: 'USER001' },
+    { userId: 'USER002' }
+  ]
+});
+
+if (response.data.status === 'S') {
+  console.log('삭제된 토큰 수:', response.data.data.deletedCount);
+}

Redis 데이터 구조

토큰 저장 구조

Redis Hash 구조로 저장됩니다:

Key: token:{uuid}

Hash Fields:

예시:

Key: token:abc123def456
+Fields:
+  userId: USER001
+  refreshToken: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
+  uuid: abc123def456
+  ipAddress: 192.168.1.100
+  userAgent: Mozilla/5.0...
+  createdAt: 2024-01-01 10:00:00

주의사항

  1. 보안: refreshTokenuuid는 응답에서 제외되어 전송되지 않습니다.
  2. 패턴 매칭: 현재는 token:* 패턴만 지원합니다.
  3. 권한: 관리자 권한이 필요한 API일 수 있습니다.

다음 단계

`,49)]))}const c=i(l,[["render",e]]);export{r as __pageData,c as default}; diff --git a/assets/backend_api_common_redis.md.ReQWNJXT.lean.js b/assets/backend_api_common_redis.md.ReQWNJXT.lean.js new file mode 100644 index 0000000..31ee327 --- /dev/null +++ b/assets/backend_api_common_redis.md.ReQWNJXT.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const r=JSON.parse('{"title":"Redis 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/redis.md","filePath":"backend/api/common/redis.md"}'),l={name:"backend/api/common/redis.md"};function e(p,s,h,k,d,o){return n(),a("div",null,s[0]||(s[0]=[t("",49)]))}const c=i(l,[["render",e]]);export{r as __pageData,c as default}; diff --git a/assets/backend_api_common_report.md.C4hpMYhE.js b/assets/backend_api_common_report.md.C4hpMYhE.js new file mode 100644 index 0000000..e7e23bb --- /dev/null +++ b/assets/backend_api_common_report.md.C4hpMYhE.js @@ -0,0 +1,57 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"리포트 생성 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/report.md","filePath":"backend/api/common/report.md"}'),l={name:"backend/api/common/report.md"};function e(p,s,h,o,r,k){return n(),a("div",null,s[0]||(s[0]=[t(`

리포트 생성 API

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 API입니다.

기본 정보

API 목록

1. PDF 리포트 생성 (파일 저장)

엔드포인트: /api/direct/report/pdfView

설명: PDF 리포트를 생성하여 서버에 저장하고 파일명을 반환합니다. 생성된 파일은 10초 후 자동 삭제됩니다.

요청 본문:

json
{
+  "jr_report": "REPORT_TEMPLATE",
+  "procedure": "P_REPORT_DATA",
+  "params": {
+    "V_P_PARAM1": "value1"
+  },
+  "decrypt_column": "cv_1:social_num|cv_3:emp_name",
+  "jr_p_title": "리포트 제목",
+  "jr_i_surl_cv_1/IMAGE_PATH": "cv_1/IMAGE_PATH",
+  "jr_i_url_logo": "/resources/images/logo.png",
+  "jr_convert_cv_1/cv_main": "cv_1/cv_main"
+}

파라미터:

필수 파라미터

데이터 조회 파라미터

복호화 파라미터

리포트 파라미터 (jr_p_*)

이미지 파라미터

서버 경로 이미지 (jr_i_surl_*)

웹 경로 이미지 (jr_i_url_*)

커서 변환 파라미터 (jr_convert_*)

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": {
+    "fileName": "REPORT_abc123def456ghi789.pdf",
+    "message": "pdf_생성_성공"
+  }
+}

응답 필드:

PDF 파일 접근:

GET /api/direct/report/open/{fileName}

사용 예시:

javascript
const response = await axios.post('/api/direct/report/pdfView', {
+  jr_report: 'HRA1600_REPORT',
+  procedure: 'P_HRA1600_Q',
+  params: {
+    V_P_USER_ID: 'USER001',
+    V_P_START_DATE: '20240101',
+    V_P_END_DATE: '20241231'
+  },
+  decrypt_column: 'cv_1:social_num',
+  jr_p_title: '급여 명세서',
+  jr_p_date: '2024-01-01'
+});
+
+if (response.data.status === 'S') {
+  const fileName = response.data.data.fileName;
+  // PDF 파일 열기
+  window.open(\`/api/direct/report/open/\${fileName}\`);
+}

2. PDF 리포트 생성 (바이너리 반환)

엔드포인트: /api/direct/report/pdfViewTest

설명: PDF 리포트를 생성하여 바이너리로 직접 반환합니다.

요청 본문: pdfView와 동일

응답:

사용 예시:

javascript
const response = await axios.post('/api/direct/report/pdfViewTest', {
+  jr_report: 'REPORT_TEMPLATE',
+  // ... 파라미터
+}, {
+  responseType: 'blob'
+});
+
+// PDF를 새 창에서 열기
+const url = window.URL.createObjectURL(new Blob([response.data], { type: 'application/pdf' }));
+window.open(url);

3. 암호화된 PDF 생성

엔드포인트: /api/direct/report/pdfViewEc

설명: 암호화된 PDF 리포트를 생성합니다.

요청 본문: pdfView와 동일

암호화 설정:

응답: pdfView와 동일


4. HTML 리포트 생성

엔드포인트: /api/direct/report/html

설명: HTML 형식으로 리포트를 생성합니다.

요청 본문: pdfView와 동일

응답:


5. Excel 리포트 다운로드

엔드포인트: /api/direct/report/excelDown

설명: Excel 형식으로 리포트를 생성하여 다운로드합니다.

요청 형식: application/x-www-form-urlencoded 또는 multipart/form-data

파라미터: pdfView와 동일 (Query Parameter 또는 Form Data)

응답:


6. 생성된 PDF 파일 조회

엔드포인트: GET /api/direct/report/open/{fileName}

설명: 서버에 저장된 PDF 파일을 조회합니다.

파라미터:

응답:

사용 예시:

javascript
// PDF 파일 열기
+window.open('/api/direct/report/open/REPORT_abc123def456ghi789.pdf');

리포트 파라미터 규칙

커서 파라미터

프로시저에서 반환하는 커서는 자동으로 리포트 파라미터로 전달됩니다.

일반 파라미터

jr_p_로 시작하는 키는 리포트 템플릿의 파라미터로 전달됩니다.

json
{
+  "jr_p_title": "제목",
+  "jr_p_date": "2024-01-01"
+}

→ 리포트 템플릿에서 $P{jr_p_title}, $P{jr_p_date}로 사용

이미지 파라미터

서버 경로 이미지

json
{
+  "jr_i_surl_cv_1/IMAGE_PATH": "cv_1/IMAGE_PATH"
+}

웹 경로 이미지

json
{
+  "jr_i_url_logo": "/resources/images/logo.png"
+}

커서 변환

json
{
+  "jr_convert_cv_1/cv_main": "cv_1/cv_main"
+}

복호화

json
{
+  "decrypt_column": "cv_1:social_num|cv_3:emp_name"
+}

리포트 템플릿 위치

src/main/resources/report/jasperForms/{jr_report}.jrxml

한글 폰트

한글 폰트는 다음 위치에 저장됩니다:

src/main/resources/report/jasperfonts/

지원 폰트:

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제됩니다.
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자 cv_*로 변환됩니다.
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 합니다.
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화됩니다.

다음 단계

`,109)]))}const E=i(l,[["render",e]]);export{c as __pageData,E as default}; diff --git a/assets/backend_api_common_report.md.C4hpMYhE.lean.js b/assets/backend_api_common_report.md.C4hpMYhE.lean.js new file mode 100644 index 0000000..2b4ed19 --- /dev/null +++ b/assets/backend_api_common_report.md.C4hpMYhE.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"리포트 생성 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/report.md","filePath":"backend/api/common/report.md"}'),l={name:"backend/api/common/report.md"};function e(p,s,h,o,r,k){return n(),a("div",null,s[0]||(s[0]=[t("",109)]))}const E=i(l,[["render",e]]);export{c as __pageData,E as default}; diff --git a/assets/backend_api_common_report.md.C_pVbIQQ.js b/assets/backend_api_common_report.md.C_pVbIQQ.js deleted file mode 100644 index e94b324..0000000 --- a/assets/backend_api_common_report.md.C_pVbIQQ.js +++ /dev/null @@ -1,57 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"리포트 생성 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/report.md","filePath":"backend/api/common/report.md"}'),l={name:"backend/api/common/report.md"};function e(p,s,h,o,r,k){return n(),a("div",null,s[0]||(s[0]=[t(`

리포트 생성 API

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 API입니다.

기본 정보

API 목록

1. PDF 리포트 생성 (파일 저장)

엔드포인트: /api/direct/report/pdfView

설명: PDF 리포트를 생성하여 서버에 저장하고 파일명을 반환합니다. 생성된 파일은 10초 후 자동 삭제됩니다.

요청 본문:

json
{
-  "jr_report": "REPORT_TEMPLATE",
-  "procedure": "P_REPORT_DATA",
-  "params": {
-    "V_P_PARAM1": "value1"
-  },
-  "decrypt_column": "cv_1:social_num|cv_3:emp_name",
-  "jr_p_title": "리포트 제목",
-  "jr_i_surl_cv_1/IMAGE_PATH": "cv_1/IMAGE_PATH",
-  "jr_i_url_logo": "/resources/images/logo.png",
-  "jr_convert_cv_1/cv_main": "cv_1/cv_main"
-}

파라미터:

필수 파라미터

데이터 조회 파라미터

복호화 파라미터

리포트 파라미터 (jr_p_*)

이미지 파라미터

서버 경로 이미지 (jr_i_surl_*)

웹 경로 이미지 (jr_i_url_*)

커서 변환 파라미터 (jr_convert_*)

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": {
-    "fileName": "REPORT_abc123def456ghi789.pdf",
-    "message": "pdf_생성_성공"
-  }
-}

응답 필드:

PDF 파일 접근:

GET /api/direct/report/open/{fileName}

사용 예시:

javascript
const response = await axios.post('/api/direct/report/pdfView', {
-  jr_report: 'HRA1600_REPORT',
-  procedure: 'P_HRA1600_Q',
-  params: {
-    V_P_USER_ID: 'USER001',
-    V_P_START_DATE: '20240101',
-    V_P_END_DATE: '20241231'
-  },
-  decrypt_column: 'cv_1:social_num',
-  jr_p_title: '급여 명세서',
-  jr_p_date: '2024-01-01'
-});
-
-if (response.data.status === 'S') {
-  const fileName = response.data.data.fileName;
-  // PDF 파일 열기
-  window.open(\`/api/direct/report/open/\${fileName}\`);
-}

2. PDF 리포트 생성 (바이너리 반환)

엔드포인트: /api/direct/report/pdfViewTest

설명: PDF 리포트를 생성하여 바이너리로 직접 반환합니다.

요청 본문: pdfView와 동일

응답:

사용 예시:

javascript
const response = await axios.post('/api/direct/report/pdfViewTest', {
-  jr_report: 'REPORT_TEMPLATE',
-  // ... 파라미터
-}, {
-  responseType: 'blob'
-});
-
-// PDF를 새 창에서 열기
-const url = window.URL.createObjectURL(new Blob([response.data], { type: 'application/pdf' }));
-window.open(url);

3. 암호화된 PDF 생성

엔드포인트: /api/direct/report/pdfViewEc

설명: 암호화된 PDF 리포트를 생성합니다.

요청 본문: pdfView와 동일

암호화 설정:

응답: pdfView와 동일


4. HTML 리포트 생성

엔드포인트: /api/direct/report/html

설명: HTML 형식으로 리포트를 생성합니다.

요청 본문: pdfView와 동일

응답:


5. Excel 리포트 다운로드

엔드포인트: /api/direct/report/excelDown

설명: Excel 형식으로 리포트를 생성하여 다운로드합니다.

요청 형식: application/x-www-form-urlencoded 또는 multipart/form-data

파라미터: pdfView와 동일 (Query Parameter 또는 Form Data)

응답:


6. 생성된 PDF 파일 조회

엔드포인트: GET /api/direct/report/open/{fileName}

설명: 서버에 저장된 PDF 파일을 조회합니다.

파라미터:

응답:

사용 예시:

javascript
// PDF 파일 열기
-window.open('/api/direct/report/open/REPORT_abc123def456ghi789.pdf');

리포트 파라미터 규칙

커서 파라미터

프로시저에서 반환하는 커서는 자동으로 리포트 파라미터로 전달됩니다.

일반 파라미터

jr_p_로 시작하는 키는 리포트 템플릿의 파라미터로 전달됩니다.

json
{
-  "jr_p_title": "제목",
-  "jr_p_date": "2024-01-01"
-}

→ 리포트 템플릿에서 $P{jr_p_title}, $P{jr_p_date}로 사용

이미지 파라미터

서버 경로 이미지

json
{
-  "jr_i_surl_cv_1/IMAGE_PATH": "cv_1/IMAGE_PATH"
-}

웹 경로 이미지

json
{
-  "jr_i_url_logo": "/resources/images/logo.png"
-}

커서 변환

json
{
-  "jr_convert_cv_1/cv_main": "cv_1/cv_main"
-}

복호화

json
{
-  "decrypt_column": "cv_1:social_num|cv_3:emp_name"
-}

리포트 템플릿 위치

src/main/resources/report/jasperForms/{jr_report}.jrxml

한글 폰트

한글 폰트는 다음 위치에 저장됩니다:

src/main/resources/report/jasperfonts/

지원 폰트:

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제됩니다.
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자 cv_*로 변환됩니다.
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 합니다.
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화됩니다.

다음 단계

`,109)]))}const E=i(l,[["render",e]]);export{c as __pageData,E as default}; diff --git a/assets/backend_api_common_report.md.C_pVbIQQ.lean.js b/assets/backend_api_common_report.md.C_pVbIQQ.lean.js deleted file mode 100644 index eba12ff..0000000 --- a/assets/backend_api_common_report.md.C_pVbIQQ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"리포트 생성 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/report.md","filePath":"backend/api/common/report.md"}'),l={name:"backend/api/common/report.md"};function e(p,s,h,o,r,k){return n(),a("div",null,s[0]||(s[0]=[t("",109)]))}const E=i(l,[["render",e]]);export{c as __pageData,E as default}; diff --git a/assets/backend_api_common_sms.md.CTuSsITz.js b/assets/backend_api_common_sms.md.CTuSsITz.js new file mode 100644 index 0000000..023b8c1 --- /dev/null +++ b/assets/backend_api_common_sms.md.CTuSsITz.js @@ -0,0 +1,71 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const r=JSON.parse('{"title":"SMS 발송 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/sms.md","filePath":"backend/api/common/sms.md"}'),l={name:"backend/api/common/sms.md"};function h(p,s,k,e,E,o){return n(),a("div",null,s[0]||(s[0]=[t(`

SMS 발송 API

SMS 메시지를 발송하는 API입니다.

기본 정보

API 목록

1. SMS 메시지 발송

엔드포인트: /api/admin/AsSMSManagement/msgSend

설명: SMS 메시지를 발송합니다. 즉시 발송 또는 예약 발송을 지원합니다.

요청 본문:

json
{
+  "params": {
+    "msg_type": "SMS",
+    "rev_type": "10",
+    "rev_type_value": "",
+    "msg_cont": "메시지 내용",
+    "send_tel": "01012345678",
+    "dt_dtl_no": "1",
+    "dt_send_name": "홍길동",
+    "dt_comy": "회사명",
+    "dt_depart": "부서명",
+    "dt_posi": "직급",
+    "dt_mo_tel": "01012345678",
+    "dt_email": "user@example.com"
+  },
+  "sessionInfo": {
+    "CompCode": "COMP001",
+    "LangID": "KOR",
+    "UserID": "USER001",
+    "ipAddress": "192.168.1.100"
+  }
+}

파라미터:

params (필수)

sessionInfo (필수)

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": {
+    "CV_1": [
+      {
+        "mst_no": "MSG001"
+      }
+    ],
+    "V_P_ERROR_CODE": "MSG0001",
+    "isok": "Y"
+  }
+}

응답 필드:

응답 예시 (실패):

json
{
+  "status": "E",
+  "message": "SMS 전송에 실패했습니다.",
+  "data": {
+    "isok": "N",
+    "V_P_ERROR_CODE": "ERROR001"
+  }
+}

발송 타입별 동작:

  1. 즉시 발송 (rev_type="10")

    • DB 저장 후 즉시 SMS 발송
    • 발송 결과를 응답에 포함
  2. 예약 발송 (rev_type="20", "30", "40")

    • DB에 저장만 하고 발송하지 않음
    • 스케줄러가 예약 시간에 발송

사용 예시:

javascript
// 즉시 발송
+const response = await axios.post('/api/admin/AsSMSManagement/msgSend', {
+  params: {
+    msg_type: 'SMS',
+    rev_type: '10',
+    rev_type_value: '',
+    msg_cont: '안녕하세요. 테스트 메시지입니다.',
+    send_tel: '01012345678',
+    dt_dtl_no: '1',
+    dt_send_name: '홍길동',
+    dt_mo_tel: '01087654321'
+  },
+  sessionInfo: {
+    CompCode: 'COMP001',
+    LangID: 'KOR',
+    UserID: 'USER001',
+    ipAddress: '192.168.1.100'
+  }
+});
+
+if (response.data.status === 'S' && response.data.data.isok === 'Y') {
+  console.log('SMS 발송 성공');
+} else {
+  console.log('SMS 발송 실패');
+}

SMS 설정

application-dev.yaml

yaml
msg:
+  kt:
+    scheduled: false
+    key: Basic Q1BTODQwMDA1ODcxOERPUUZOTzpTVks4NDAwMDU4NzE4R0pVTVdP
+    stel: 15883391
+    url:
+      sms: https://cpaas.api.kt.com/cpaas/v1.0/CPaaS_sendSMS

메시지 상태

주의사항

  1. 즉시 발송: rev_type="10"인 경우에만 즉시 발송됩니다.
  2. 예약 발송: 스케줄러가 실행되어야 발송됩니다.
  3. 메시지 내용: 특수 문자 제한이 있을 수 있습니다.
  4. 전화번호 형식: 하이픈(-) 없이 숫자만 입력 (예: "01012345678")

다음 단계

`,35)]))}const g=i(l,[["render",h]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_common_sms.md.CTuSsITz.lean.js b/assets/backend_api_common_sms.md.CTuSsITz.lean.js new file mode 100644 index 0000000..d778f8e --- /dev/null +++ b/assets/backend_api_common_sms.md.CTuSsITz.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const r=JSON.parse('{"title":"SMS 발송 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/sms.md","filePath":"backend/api/common/sms.md"}'),l={name:"backend/api/common/sms.md"};function h(p,s,k,e,E,o){return n(),a("div",null,s[0]||(s[0]=[t("",35)]))}const g=i(l,[["render",h]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_common_sms.md.D4ICZcEx.js b/assets/backend_api_common_sms.md.D4ICZcEx.js deleted file mode 100644 index 3bd05a6..0000000 --- a/assets/backend_api_common_sms.md.D4ICZcEx.js +++ /dev/null @@ -1,71 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const r=JSON.parse('{"title":"SMS 발송 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/sms.md","filePath":"backend/api/common/sms.md"}'),l={name:"backend/api/common/sms.md"};function h(p,s,k,e,E,o){return n(),a("div",null,s[0]||(s[0]=[t(`

SMS 발송 API

SMS 메시지를 발송하는 API입니다.

기본 정보

API 목록

1. SMS 메시지 발송

엔드포인트: /api/admin/AsSMSManagement/msgSend

설명: SMS 메시지를 발송합니다. 즉시 발송 또는 예약 발송을 지원합니다.

요청 본문:

json
{
-  "params": {
-    "msg_type": "SMS",
-    "rev_type": "10",
-    "rev_type_value": "",
-    "msg_cont": "메시지 내용",
-    "send_tel": "01012345678",
-    "dt_dtl_no": "1",
-    "dt_send_name": "홍길동",
-    "dt_comy": "회사명",
-    "dt_depart": "부서명",
-    "dt_posi": "직급",
-    "dt_mo_tel": "01012345678",
-    "dt_email": "user@example.com"
-  },
-  "sessionInfo": {
-    "CompCode": "COMP001",
-    "LangID": "KOR",
-    "UserID": "USER001",
-    "ipAddress": "192.168.1.100"
-  }
-}

파라미터:

params (필수)

sessionInfo (필수)

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": {
-    "CV_1": [
-      {
-        "mst_no": "MSG001"
-      }
-    ],
-    "V_P_ERROR_CODE": "MSG0001",
-    "isok": "Y"
-  }
-}

응답 필드:

응답 예시 (실패):

json
{
-  "status": "E",
-  "message": "SMS 전송에 실패했습니다.",
-  "data": {
-    "isok": "N",
-    "V_P_ERROR_CODE": "ERROR001"
-  }
-}

발송 타입별 동작:

  1. 즉시 발송 (rev_type="10")

    • DB 저장 후 즉시 SMS 발송
    • 발송 결과를 응답에 포함
  2. 예약 발송 (rev_type="20", "30", "40")

    • DB에 저장만 하고 발송하지 않음
    • 스케줄러가 예약 시간에 발송

사용 예시:

javascript
// 즉시 발송
-const response = await axios.post('/api/admin/AsSMSManagement/msgSend', {
-  params: {
-    msg_type: 'SMS',
-    rev_type: '10',
-    rev_type_value: '',
-    msg_cont: '안녕하세요. 테스트 메시지입니다.',
-    send_tel: '01012345678',
-    dt_dtl_no: '1',
-    dt_send_name: '홍길동',
-    dt_mo_tel: '01087654321'
-  },
-  sessionInfo: {
-    CompCode: 'COMP001',
-    LangID: 'KOR',
-    UserID: 'USER001',
-    ipAddress: '192.168.1.100'
-  }
-});
-
-if (response.data.status === 'S' && response.data.data.isok === 'Y') {
-  console.log('SMS 발송 성공');
-} else {
-  console.log('SMS 발송 실패');
-}

SMS 설정

application-dev.yaml

yaml
msg:
-  kt:
-    scheduled: false
-    key: Basic Q1BTODQwMDA1ODcxOERPUUZOTzpTVks4NDAwMDU4NzE4R0pVTVdP
-    stel: 15883391
-    url:
-      sms: https://cpaas.api.kt.com/cpaas/v1.0/CPaaS_sendSMS

메시지 상태

주의사항

  1. 즉시 발송: rev_type="10"인 경우에만 즉시 발송됩니다.
  2. 예약 발송: 스케줄러가 실행되어야 발송됩니다.
  3. 메시지 내용: 특수 문자 제한이 있을 수 있습니다.
  4. 전화번호 형식: 하이픈(-) 없이 숫자만 입력 (예: "01012345678")

다음 단계

`,35)]))}const g=i(l,[["render",h]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_common_sms.md.D4ICZcEx.lean.js b/assets/backend_api_common_sms.md.D4ICZcEx.lean.js deleted file mode 100644 index 9fe32a5..0000000 --- a/assets/backend_api_common_sms.md.D4ICZcEx.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const r=JSON.parse('{"title":"SMS 발송 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/common/sms.md","filePath":"backend/api/common/sms.md"}'),l={name:"backend/api/common/sms.md"};function h(p,s,k,e,E,o){return n(),a("div",null,s[0]||(s[0]=[t("",35)]))}const g=i(l,[["render",h]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_ess_login.md.BVQaZY09.js b/assets/backend_api_ess_login.md.BVQaZY09.js deleted file mode 100644 index c551679..0000000 --- a/assets/backend_api_ess_login.md.BVQaZY09.js +++ /dev/null @@ -1,89 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const r=JSON.parse('{"title":"로그인/인증 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/ess/login.md","filePath":"backend/api/ess/login.md"}'),l={name:"backend/api/ess/login.md"};function p(h,s,e,k,o,E){return n(),a("div",null,s[0]||(s[0]=[t(`

로그인/인증 API

ESS 모듈의 로그인 및 인증 관련 API입니다.

기본 정보

API 목록

1. 일반 사용자 로그인

엔드포인트: /api/login/loginCheck

설명: 사용자 로그인을 처리하고 JWT 토큰을 발급합니다.

요청 본문:

json
{
-  "params": {
-    "V_P_USER_ID": "USER001",
-    "V_P_PASSWORD": "password123"
-  }
-}

파라미터:

내부 동작:

  1. 로그인 프로시저 호출 (요청 본문의 procedure 사용)
  2. 세션 정보 조회 (프로시저: JPSESSIONINFO)
  3. JWT 토큰 생성 (Access Token, Refresh Token)
  4. Redis에 토큰 저장
  5. 쿠키 설정 (refreshToken, uuid)
  6. 메뉴 데이터 조회 (프로시저: P_SYS5400_Q)

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": {
-    "message": "로그인에 성공했습니다.",
-    "menu": {
-      "menuLevel1": [
-        {
-          "menuId": "M001",
-          "menuName": "메뉴1"
-        }
-      ],
-      "menuLevel2": [
-        {
-          "menuId": "M002",
-          "menuName": "서브메뉴1"
-        }
-      ]
-    },
-    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
-    "sessionData": {
-      "UserID": "USER001",
-      "CompCode": "COMP001",
-      "LangID": "KOR",
-      "ipAddress": "192.168.1.100",
-      "encrypt": "N",
-      "decrypt": "N"
-    }
-  }
-}

응답 필드:

쿠키 설정:

응답 예시 (실패):

json
{
-  "status": "E",
-  "message": "아이디, 비밀번호를 확인하세요.",
-  "data": null
-}

사용 예시:

javascript
const response = await axios.post('/api/login/loginCheck', {
-  params: {
-    V_P_USER_ID: 'USER001',
-    V_P_PASSWORD: 'password123'
-  }
-});
-
-if (response.data.status === 'S') {
-  const { accessToken, menu, sessionData } = response.data.data;
-  
-  // Access Token 저장
-  localStorage.setItem('accessToken', accessToken);
-  
-  // 세션 데이터 저장
-  sessionStorage.setItem('sessionData', JSON.stringify(sessionData));
-  
-  // 메뉴 데이터 저장
-  sessionStorage.setItem('menu', JSON.stringify(menu));
-  
-  // 쿠키는 자동으로 설정됨
-}

2. 관리자 로그인

엔드포인트: /api/login/adminLoginCheck

설명: 관리자 권한으로 로그인합니다. 일반 사용자 로그인과 유사하지만 관리자 사번을 별도로 전달합니다.

요청 본문:

json
{
-  "params": {
-    "V_P_USER_ID": "USER001",
-    "V_P_USER_NAME": "ADMIN001",
-    "V_P_PASSWORD": "password123"
-  }
-}

파라미터:

특징:

응답: loginCheck와 동일


3. 로그아웃

엔드포인트: /api/login/logout

설명: 로그아웃을 처리하고 토큰을 삭제합니다.

요청:

동작:

  1. 쿠키에서 uuid 추출
  2. Redis에서 토큰 삭제
  3. 쿠키 만료 처리
  4. SecurityContext 인증 정보 제거

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "정리 완료",
-  "tokenDeleted": true
-}

응답 필드:

응답 예시 (쿠키 없음):

json
{
-  "status": "S",
-  "message": "로그아웃 처리됨 - 쿠키 없음",
-  "tokenDeleted": false
-}

사용 예시:

javascript
const response = await axios.post('/api/login/logout');
-
-if (response.data.status === 'S') {
-  // 로컬 스토리지 정리
-  localStorage.removeItem('accessToken');
-  sessionStorage.clear();
-  
-  // 로그인 페이지로 이동
-  window.location.href = '/login';
-}

4. 세션 정리

엔드포인트: /api/login/clear

설명: 로그아웃과 동일하게 세션을 정리합니다.

요청 본문:

json
{}

응답: logout과 동일


5. 테스트 프로시저 호출

엔드포인트: /api/login/test

설명: 테스트용 프로시저 호출 API입니다.

요청 본문:

json
{
-  "procedure": "TEST_PROCEDURE",
-  "params": {
-    "V_P_PARAM1": "value1"
-  }
-}

응답: 프로시저 실행 결과


로그인 프로세스

1. 로그인 요청

POST /api/login/loginCheck
-Body: { params: { V_P_USER_ID, V_P_PASSWORD } }

2. 토큰 발급

3. 토큰 저장

4. API 호출

Authorization: Bearer {accessToken}

5. 토큰 만료 시

POST /api/auth/getAccessToken
-(쿠키에서 refreshToken, uuid 자동 추출)

주의사항

  1. 프로시저 호출: 로그인 프로시저는 요청 본문에 procedure 키가 있어야 합니다.
  2. 쿠키 설정: 로컬 환경과 운영 환경의 쿠키 설정이 다릅니다.
  3. 세션 정보: 세션 정보는 프로시저 JPSESSIONINFO에서 조회됩니다.
  4. 메뉴 데이터: 메뉴는 프로시저 P_SYS5400_Q에서 조회됩니다.

다음 단계

`,81)]))}const g=i(l,[["render",p]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_ess_login.md.BVQaZY09.lean.js b/assets/backend_api_ess_login.md.BVQaZY09.lean.js deleted file mode 100644 index 048cbb7..0000000 --- a/assets/backend_api_ess_login.md.BVQaZY09.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const r=JSON.parse('{"title":"로그인/인증 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/ess/login.md","filePath":"backend/api/ess/login.md"}'),l={name:"backend/api/ess/login.md"};function p(h,s,e,k,o,E){return n(),a("div",null,s[0]||(s[0]=[t("",81)]))}const g=i(l,[["render",p]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_ess_login.md.BYriAR7v.js b/assets/backend_api_ess_login.md.BYriAR7v.js new file mode 100644 index 0000000..aa8c92f --- /dev/null +++ b/assets/backend_api_ess_login.md.BYriAR7v.js @@ -0,0 +1,89 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const r=JSON.parse('{"title":"로그인/인증 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/ess/login.md","filePath":"backend/api/ess/login.md"}'),l={name:"backend/api/ess/login.md"};function p(h,s,e,k,o,E){return n(),a("div",null,s[0]||(s[0]=[t(`

로그인/인증 API

ESS 모듈의 로그인 및 인증 관련 API입니다.

기본 정보

API 목록

1. 일반 사용자 로그인

엔드포인트: /api/login/loginCheck

설명: 사용자 로그인을 처리하고 JWT 토큰을 발급합니다.

요청 본문:

json
{
+  "params": {
+    "V_P_USER_ID": "USER001",
+    "V_P_PASSWORD": "password123"
+  }
+}

파라미터:

내부 동작:

  1. 로그인 프로시저 호출 (요청 본문의 procedure 사용)
  2. 세션 정보 조회 (프로시저: JPSESSIONINFO)
  3. JWT 토큰 생성 (Access Token, Refresh Token)
  4. Redis에 토큰 저장
  5. 쿠키 설정 (refreshToken, uuid)
  6. 메뉴 데이터 조회 (프로시저: P_SYS5400_Q)

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": {
+    "message": "로그인에 성공했습니다.",
+    "menu": {
+      "menuLevel1": [
+        {
+          "menuId": "M001",
+          "menuName": "메뉴1"
+        }
+      ],
+      "menuLevel2": [
+        {
+          "menuId": "M002",
+          "menuName": "서브메뉴1"
+        }
+      ]
+    },
+    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
+    "sessionData": {
+      "UserID": "USER001",
+      "CompCode": "COMP001",
+      "LangID": "KOR",
+      "ipAddress": "192.168.1.100",
+      "encrypt": "N",
+      "decrypt": "N"
+    }
+  }
+}

응답 필드:

쿠키 설정:

응답 예시 (실패):

json
{
+  "status": "E",
+  "message": "아이디, 비밀번호를 확인하세요.",
+  "data": null
+}

사용 예시:

javascript
const response = await axios.post('/api/login/loginCheck', {
+  params: {
+    V_P_USER_ID: 'USER001',
+    V_P_PASSWORD: 'password123'
+  }
+});
+
+if (response.data.status === 'S') {
+  const { accessToken, menu, sessionData } = response.data.data;
+  
+  // Access Token 저장
+  localStorage.setItem('accessToken', accessToken);
+  
+  // 세션 데이터 저장
+  sessionStorage.setItem('sessionData', JSON.stringify(sessionData));
+  
+  // 메뉴 데이터 저장
+  sessionStorage.setItem('menu', JSON.stringify(menu));
+  
+  // 쿠키는 자동으로 설정됨
+}

2. 관리자 로그인

엔드포인트: /api/login/adminLoginCheck

설명: 관리자 권한으로 로그인합니다. 일반 사용자 로그인과 유사하지만 관리자 사번을 별도로 전달합니다.

요청 본문:

json
{
+  "params": {
+    "V_P_USER_ID": "USER001",
+    "V_P_USER_NAME": "ADMIN001",
+    "V_P_PASSWORD": "password123"
+  }
+}

파라미터:

특징:

응답: loginCheck와 동일


3. 로그아웃

엔드포인트: /api/login/logout

설명: 로그아웃을 처리하고 토큰을 삭제합니다.

요청:

동작:

  1. 쿠키에서 uuid 추출
  2. Redis에서 토큰 삭제
  3. 쿠키 만료 처리
  4. SecurityContext 인증 정보 제거

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "정리 완료",
+  "tokenDeleted": true
+}

응답 필드:

응답 예시 (쿠키 없음):

json
{
+  "status": "S",
+  "message": "로그아웃 처리됨 - 쿠키 없음",
+  "tokenDeleted": false
+}

사용 예시:

javascript
const response = await axios.post('/api/login/logout');
+
+if (response.data.status === 'S') {
+  // 로컬 스토리지 정리
+  localStorage.removeItem('accessToken');
+  sessionStorage.clear();
+  
+  // 로그인 페이지로 이동
+  window.location.href = '/login';
+}

4. 세션 정리

엔드포인트: /api/login/clear

설명: 로그아웃과 동일하게 세션을 정리합니다.

요청 본문:

json
{}

응답: logout과 동일


5. 테스트 프로시저 호출

엔드포인트: /api/login/test

설명: 테스트용 프로시저 호출 API입니다.

요청 본문:

json
{
+  "procedure": "TEST_PROCEDURE",
+  "params": {
+    "V_P_PARAM1": "value1"
+  }
+}

응답: 프로시저 실행 결과


로그인 프로세스

1. 로그인 요청

POST /api/login/loginCheck
+Body: { params: { V_P_USER_ID, V_P_PASSWORD } }

2. 토큰 발급

3. 토큰 저장

4. API 호출

Authorization: Bearer {accessToken}

5. 토큰 만료 시

POST /api/auth/getAccessToken
+(쿠키에서 refreshToken, uuid 자동 추출)

주의사항

  1. 프로시저 호출: 로그인 프로시저는 요청 본문에 procedure 키가 있어야 합니다.
  2. 쿠키 설정: 로컬 환경과 운영 환경의 쿠키 설정이 다릅니다.
  3. 세션 정보: 세션 정보는 프로시저 JPSESSIONINFO에서 조회됩니다.
  4. 메뉴 데이터: 메뉴는 프로시저 P_SYS5400_Q에서 조회됩니다.

다음 단계

`,81)]))}const g=i(l,[["render",p]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_ess_login.md.BYriAR7v.lean.js b/assets/backend_api_ess_login.md.BYriAR7v.lean.js new file mode 100644 index 0000000..9805f09 --- /dev/null +++ b/assets/backend_api_ess_login.md.BYriAR7v.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const r=JSON.parse('{"title":"로그인/인증 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/ess/login.md","filePath":"backend/api/ess/login.md"}'),l={name:"backend/api/ess/login.md"};function p(h,s,e,k,o,E){return n(),a("div",null,s[0]||(s[0]=[t("",81)]))}const g=i(l,[["render",p]]);export{r as __pageData,g as default}; diff --git a/assets/backend_api_ess_user.md.CtF7LPTD.js b/assets/backend_api_ess_user.md.CtF7LPTD.js new file mode 100644 index 0000000..f56f1a3 --- /dev/null +++ b/assets/backend_api_ess_user.md.CtF7LPTD.js @@ -0,0 +1,78 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"사용자 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/ess/user.md","filePath":"backend/api/ess/user.md"}'),l={name:"backend/api/ess/user.md"};function p(h,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[t(`

사용자 관리 API

ESS 모듈의 사용자 관련 API입니다.

기본 정보

API 목록

1. 사용자 이미지 조회

엔드포인트: /api/user/img/getUserImage

설명: 사번으로 사용자 이미지를 조회합니다.

요청 본문:

json
{
+  "emp_code": "USER001"
+}

파라미터:

동작:

  1. file.empimg.path 경로에서 {emp_code}.* 패턴의 파일 검색
  2. 첫 번째 매칭 파일 반환
  3. MIME 타입 자동 감지

응답:

응답 예시 (실패 - 400):

emp_code 파라미터는 필수값입니다.

응답 예시 (실패 - 404):

이미지가 존재하지 않습니다.

사용 예시:

javascript
// 이미지 조회
+const response = await axios.post('/api/user/img/getUserImage', {
+  emp_code: 'USER001'
+}, {
+  responseType: 'blob'
+});
+
+// 이미지 표시
+const url = window.URL.createObjectURL(new Blob([response.data]));
+document.getElementById('userImage').src = url;

2. 즐겨찾기 목록 조회

엔드포인트: /api/user/bmk/getBmkList

설명: 사용자의 즐겨찾기 목록을 조회합니다.

요청 본문:

json
{
+  "V_P_USER_ID": "USER001",
+  "V_P_CLIENT_CODE": "CLIENT001",
+  "V_P_COMP_CODE": "COMP001"
+}

파라미터:

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": [
+    {
+      "SEQ": "1",
+      "MENU_ID": "M001",
+      "MENU_NAME": "메뉴1",
+      "URL": "/page1"
+    },
+    {
+      "SEQ": "2",
+      "MENU_ID": "M002",
+      "MENU_NAME": "메뉴2",
+      "URL": "/page2"
+    }
+  ]
+}

응답 필드:

응답 예시 (실패):

json
{
+  "status": "E",
+  "message": "파라미터를 확인해주세요.",
+  "data": null
+}

사용 예시:

javascript
const response = await axios.post('/api/user/bmk/getBmkList', {
+  V_P_USER_ID: 'USER001',
+  V_P_CLIENT_CODE: 'CLIENT001',
+  V_P_COMP_CODE: 'COMP001'
+});
+
+if (response.data.status === 'S') {
+  const bookmarkList = response.data.data;
+  console.log('즐겨찾기 목록:', bookmarkList);
+}

3. 즐겨찾기 수정

엔드포인트: /api/user/bmk/updateBmk

설명: 즐겨찾기 정보를 수정합니다.

요청 본문:

json
{
+  "V_P_USER_ID": "USER001",
+  "V_P_CLIENT_CODE": "CLIENT001",
+  "V_P_COMP_CODE": "COMP001",
+  "V_P_SEQ": "1",
+  "V_P_MENU_ID": "M001",
+  "V_P_MENU_NAME": "수정된 메뉴명",
+  "V_P_URL": "/page1",
+  "V_P_ORD_SEQ": "1"
+}

파라미터:

응답 예시 (성공):

json
{
+  "status": "S",
+  "message": "",
+  "data": {
+    "message": "즐겨찾기 수정 성공."
+  }
+}

응답 예시 (실패 - 데이터 없음):

json
{
+  "status": "E",
+  "message": "파라미터와 일치하는 데이터가 없습니다.",
+  "data": null
+}

사용 예시:

javascript
const response = await axios.post('/api/user/bmk/updateBmk', {
+  V_P_USER_ID: 'USER001',
+  V_P_CLIENT_CODE: 'CLIENT001',
+  V_P_COMP_CODE: 'COMP001',
+  V_P_SEQ: '1',
+  V_P_MENU_NAME: '수정된 메뉴명',
+  V_P_ORD_SEQ: '2'
+});
+
+if (response.data.status === 'S') {
+  console.log('즐겨찾기 수정 성공');
+}

파일 경로 설정

사용자 이미지는 다음 경로에서 조회됩니다:

yaml
file:
+  empimg:
+    path: D:\\\\FileUpload\\\\HRMaster\\\\EMP\\\\

파일명 규칙:

주의사항

  1. 이미지 파일: 첫 번째 매칭 파일만 반환됩니다.
  2. MIME 타입: 이미지 파일이 아니면 415 에러가 반환됩니다.
  3. 즐겨찾기: 수정 시 SEQ가 일치하는 데이터가 없으면 실패합니다.

다음 단계

`,62)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_api_ess_user.md.CtF7LPTD.lean.js b/assets/backend_api_ess_user.md.CtF7LPTD.lean.js new file mode 100644 index 0000000..39f1c67 --- /dev/null +++ b/assets/backend_api_ess_user.md.CtF7LPTD.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"사용자 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/ess/user.md","filePath":"backend/api/ess/user.md"}'),l={name:"backend/api/ess/user.md"};function p(h,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[t("",62)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_api_ess_user.md.DtcTL5Pm.js b/assets/backend_api_ess_user.md.DtcTL5Pm.js deleted file mode 100644 index fe2794e..0000000 --- a/assets/backend_api_ess_user.md.DtcTL5Pm.js +++ /dev/null @@ -1,78 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"사용자 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/ess/user.md","filePath":"backend/api/ess/user.md"}'),l={name:"backend/api/ess/user.md"};function p(h,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[t(`

사용자 관리 API

ESS 모듈의 사용자 관련 API입니다.

기본 정보

API 목록

1. 사용자 이미지 조회

엔드포인트: /api/user/img/getUserImage

설명: 사번으로 사용자 이미지를 조회합니다.

요청 본문:

json
{
-  "emp_code": "USER001"
-}

파라미터:

동작:

  1. file.empimg.path 경로에서 {emp_code}.* 패턴의 파일 검색
  2. 첫 번째 매칭 파일 반환
  3. MIME 타입 자동 감지

응답:

응답 예시 (실패 - 400):

emp_code 파라미터는 필수값입니다.

응답 예시 (실패 - 404):

이미지가 존재하지 않습니다.

사용 예시:

javascript
// 이미지 조회
-const response = await axios.post('/api/user/img/getUserImage', {
-  emp_code: 'USER001'
-}, {
-  responseType: 'blob'
-});
-
-// 이미지 표시
-const url = window.URL.createObjectURL(new Blob([response.data]));
-document.getElementById('userImage').src = url;

2. 즐겨찾기 목록 조회

엔드포인트: /api/user/bmk/getBmkList

설명: 사용자의 즐겨찾기 목록을 조회합니다.

요청 본문:

json
{
-  "V_P_USER_ID": "USER001",
-  "V_P_CLIENT_CODE": "CLIENT001",
-  "V_P_COMP_CODE": "COMP001"
-}

파라미터:

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": [
-    {
-      "SEQ": "1",
-      "MENU_ID": "M001",
-      "MENU_NAME": "메뉴1",
-      "URL": "/page1"
-    },
-    {
-      "SEQ": "2",
-      "MENU_ID": "M002",
-      "MENU_NAME": "메뉴2",
-      "URL": "/page2"
-    }
-  ]
-}

응답 필드:

응답 예시 (실패):

json
{
-  "status": "E",
-  "message": "파라미터를 확인해주세요.",
-  "data": null
-}

사용 예시:

javascript
const response = await axios.post('/api/user/bmk/getBmkList', {
-  V_P_USER_ID: 'USER001',
-  V_P_CLIENT_CODE: 'CLIENT001',
-  V_P_COMP_CODE: 'COMP001'
-});
-
-if (response.data.status === 'S') {
-  const bookmarkList = response.data.data;
-  console.log('즐겨찾기 목록:', bookmarkList);
-}

3. 즐겨찾기 수정

엔드포인트: /api/user/bmk/updateBmk

설명: 즐겨찾기 정보를 수정합니다.

요청 본문:

json
{
-  "V_P_USER_ID": "USER001",
-  "V_P_CLIENT_CODE": "CLIENT001",
-  "V_P_COMP_CODE": "COMP001",
-  "V_P_SEQ": "1",
-  "V_P_MENU_ID": "M001",
-  "V_P_MENU_NAME": "수정된 메뉴명",
-  "V_P_URL": "/page1",
-  "V_P_ORD_SEQ": "1"
-}

파라미터:

응답 예시 (성공):

json
{
-  "status": "S",
-  "message": "",
-  "data": {
-    "message": "즐겨찾기 수정 성공."
-  }
-}

응답 예시 (실패 - 데이터 없음):

json
{
-  "status": "E",
-  "message": "파라미터와 일치하는 데이터가 없습니다.",
-  "data": null
-}

사용 예시:

javascript
const response = await axios.post('/api/user/bmk/updateBmk', {
-  V_P_USER_ID: 'USER001',
-  V_P_CLIENT_CODE: 'CLIENT001',
-  V_P_COMP_CODE: 'COMP001',
-  V_P_SEQ: '1',
-  V_P_MENU_NAME: '수정된 메뉴명',
-  V_P_ORD_SEQ: '2'
-});
-
-if (response.data.status === 'S') {
-  console.log('즐겨찾기 수정 성공');
-}

파일 경로 설정

사용자 이미지는 다음 경로에서 조회됩니다:

yaml
file:
-  empimg:
-    path: D:\\\\FileUpload\\\\HRMaster\\\\EMP\\\\

파일명 규칙:

주의사항

  1. 이미지 파일: 첫 번째 매칭 파일만 반환됩니다.
  2. MIME 타입: 이미지 파일이 아니면 415 에러가 반환됩니다.
  3. 즐겨찾기: 수정 시 SEQ가 일치하는 데이터가 없으면 실패합니다.

다음 단계

`,62)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_api_ess_user.md.DtcTL5Pm.lean.js b/assets/backend_api_ess_user.md.DtcTL5Pm.lean.js deleted file mode 100644 index b4c5a15..0000000 --- a/assets/backend_api_ess_user.md.DtcTL5Pm.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"사용자 관리 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/ess/user.md","filePath":"backend/api/ess/user.md"}'),l={name:"backend/api/ess/user.md"};function p(h,s,k,e,E,d){return n(),a("div",null,s[0]||(s[0]=[t("",62)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_api_fcm_index.md.C1RFK85u.js b/assets/backend_api_fcm_index.md.C1RFK85u.js new file mode 100644 index 0000000..eac6858 --- /dev/null +++ b/assets/backend_api_fcm_index.md.C1RFK85u.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as t,aG as l}from"./chunks/framework.DytOxJW6.js";const p=JSON.parse('{"title":"FCM 모듈 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/fcm/index.md","filePath":"backend/api/fcm/index.md"}'),r={name:"backend/api/fcm/index.md"};function n(o,a,d,c,s,h){return t(),i("div",null,a[0]||(a[0]=[l('

FCM 모듈 API

FCM 모듈의 API입니다.

현재 상태

FCM 모듈의 API는 현재 구현 중입니다.

예정된 API

다음 단계

',8)]))}const _=e(r,[["render",n]]);export{p as __pageData,_ as default}; diff --git a/assets/backend_api_fcm_index.md.C1RFK85u.lean.js b/assets/backend_api_fcm_index.md.C1RFK85u.lean.js new file mode 100644 index 0000000..8545e0e --- /dev/null +++ b/assets/backend_api_fcm_index.md.C1RFK85u.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as t,aG as l}from"./chunks/framework.DytOxJW6.js";const p=JSON.parse('{"title":"FCM 모듈 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/fcm/index.md","filePath":"backend/api/fcm/index.md"}'),r={name:"backend/api/fcm/index.md"};function n(o,a,d,c,s,h){return t(),i("div",null,a[0]||(a[0]=[l("",8)]))}const _=e(r,[["render",n]]);export{p as __pageData,_ as default}; diff --git a/assets/backend_api_fcm_index.md.C6iZnzwU.js b/assets/backend_api_fcm_index.md.C6iZnzwU.js deleted file mode 100644 index acb4fb0..0000000 --- a/assets/backend_api_fcm_index.md.C6iZnzwU.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as t,aG as l}from"./chunks/framework.CrOSaJJH.js";const p=JSON.parse('{"title":"FCM 모듈 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/fcm/index.md","filePath":"backend/api/fcm/index.md"}'),r={name:"backend/api/fcm/index.md"};function n(o,a,d,c,s,h){return t(),i("div",null,a[0]||(a[0]=[l('

FCM 모듈 API

FCM 모듈의 API입니다.

현재 상태

FCM 모듈의 API는 현재 구현 중입니다.

예정된 API

다음 단계

',8)]))}const _=e(r,[["render",n]]);export{p as __pageData,_ as default}; diff --git a/assets/backend_api_fcm_index.md.C6iZnzwU.lean.js b/assets/backend_api_fcm_index.md.C6iZnzwU.lean.js deleted file mode 100644 index e2610f5..0000000 --- a/assets/backend_api_fcm_index.md.C6iZnzwU.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as t,aG as l}from"./chunks/framework.CrOSaJJH.js";const p=JSON.parse('{"title":"FCM 모듈 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/fcm/index.md","filePath":"backend/api/fcm/index.md"}'),r={name:"backend/api/fcm/index.md"};function n(o,a,d,c,s,h){return t(),i("div",null,a[0]||(a[0]=[l("",8)]))}const _=e(r,[["render",n]]);export{p as __pageData,_ as default}; diff --git a/assets/backend_api_index.md.BFRlATCv.js b/assets/backend_api_index.md.BFRlATCv.js deleted file mode 100644 index 9f4d1e4..0000000 --- a/assets/backend_api_index.md.BFRlATCv.js +++ /dev/null @@ -1,12 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"API 레퍼런스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/index.md","filePath":"backend/api/index.md"}'),l={name:"backend/api/index.md"};function n(h,a,o,r,p,d){return t(),i("div",null,a[0]||(a[0]=[e(`

API 레퍼런스

AxpFramework에서 제공하는 모든 REST API를 확인할 수 있습니다.

API 개요

AxpFramework는 다음과 같은 API 그룹으로 구성되어 있습니다:

공통 사항

인증 방법

대부분의 API는 JWT 토큰 인증이 필요합니다.

Access Token 사용

http
Authorization: Bearer {accessToken}

Refresh Token 사용

공통 응답 형식

모든 API는 다음 형식으로 응답합니다:

성공 응답

json
{
-  "status": "S",
-  "message": "",
-  "data": { ... }
-}

실패 응답

json
{
-  "status": "E",
-  "message": "에러 메시지",
-  "data": null
-}

HTTP 상태 코드

요청 형식

모든 API는 POST 메서드를 사용하며, 요청 본문은 JSON 형식입니다.

json
{
-  "param1": "value1",
-  "param2": "value2"
-}

API 그룹별 링크

공통 프레임워크 API

ESS 모듈 API

FCM 모듈 API

Swagger UI

모든 API는 Swagger UI에서 확인하고 테스트할 수 있습니다.

접근 URL:

http://localhost:8080/swagger-ui.html

다음 단계

`,36)]))}const u=s(l,[["render",n]]);export{c as __pageData,u as default}; diff --git a/assets/backend_api_index.md.BFRlATCv.lean.js b/assets/backend_api_index.md.BFRlATCv.lean.js deleted file mode 100644 index 79eac57..0000000 --- a/assets/backend_api_index.md.BFRlATCv.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"API 레퍼런스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/index.md","filePath":"backend/api/index.md"}'),l={name:"backend/api/index.md"};function n(h,a,o,r,p,d){return t(),i("div",null,a[0]||(a[0]=[e("",36)]))}const u=s(l,[["render",n]]);export{c as __pageData,u as default}; diff --git a/assets/backend_api_index.md.B_yrViRy.js b/assets/backend_api_index.md.B_yrViRy.js new file mode 100644 index 0000000..979e27f --- /dev/null +++ b/assets/backend_api_index.md.B_yrViRy.js @@ -0,0 +1,12 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"API 레퍼런스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/index.md","filePath":"backend/api/index.md"}'),l={name:"backend/api/index.md"};function n(h,a,o,r,p,d){return t(),i("div",null,a[0]||(a[0]=[e(`

API 레퍼런스

AxpFramework에서 제공하는 모든 REST API를 확인할 수 있습니다.

API 개요

AxpFramework는 다음과 같은 API 그룹으로 구성되어 있습니다:

공통 사항

인증 방법

대부분의 API는 JWT 토큰 인증이 필요합니다.

Access Token 사용

http
Authorization: Bearer {accessToken}

Refresh Token 사용

공통 응답 형식

모든 API는 다음 형식으로 응답합니다:

성공 응답

json
{
+  "status": "S",
+  "message": "",
+  "data": { ... }
+}

실패 응답

json
{
+  "status": "E",
+  "message": "에러 메시지",
+  "data": null
+}

HTTP 상태 코드

요청 형식

모든 API는 POST 메서드를 사용하며, 요청 본문은 JSON 형식입니다.

json
{
+  "param1": "value1",
+  "param2": "value2"
+}

API 그룹별 링크

공통 프레임워크 API

ESS 모듈 API

FCM 모듈 API

Swagger UI

모든 API는 Swagger UI에서 확인하고 테스트할 수 있습니다.

접근 URL:

http://localhost:8080/swagger-ui.html

다음 단계

`,36)]))}const u=s(l,[["render",n]]);export{c as __pageData,u as default}; diff --git a/assets/backend_api_index.md.B_yrViRy.lean.js b/assets/backend_api_index.md.B_yrViRy.lean.js new file mode 100644 index 0000000..3effaf8 --- /dev/null +++ b/assets/backend_api_index.md.B_yrViRy.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"API 레퍼런스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/api/index.md","filePath":"backend/api/index.md"}'),l={name:"backend/api/index.md"};function n(h,a,o,r,p,d){return t(),i("div",null,a[0]||(a[0]=[e("",36)]))}const u=s(l,[["render",n]]);export{c as __pageData,u as default}; diff --git a/assets/backend_common-features_ai.md.BRQrI7TP.js b/assets/backend_common-features_ai.md.BRQrI7TP.js new file mode 100644 index 0000000..a0380f5 --- /dev/null +++ b/assets/backend_common-features_ai.md.BRQrI7TP.js @@ -0,0 +1,8 @@ +import{_ as i,c as s,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"AI 서비스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/ai.md","filePath":"backend/common-features/ai.md"}'),n={name:"backend/common-features/ai.md"};function l(h,a,p,k,r,d){return e(),s("div",null,a[0]||(a[0]=[t(`

AI 서비스

AxpFramework는 Google Gemini AI를 연동합니다.

설정

ai-config.yaml

yaml
gemini:
+  api-key: your-api-key

사용 예시

java
@Autowired
+private AxpGeminiService geminiService;
+
+Map<String, Object> request = new HashMap<>();
+request.put("prompt", "질문 내용");
+
+String response = geminiService.callGeminiAi(request);

API 엔드포인트

POST /api/ai/genai

다음 단계

`,11)]))}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_common-features_ai.md.BRQrI7TP.lean.js b/assets/backend_common-features_ai.md.BRQrI7TP.lean.js new file mode 100644 index 0000000..cac581a --- /dev/null +++ b/assets/backend_common-features_ai.md.BRQrI7TP.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"AI 서비스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/ai.md","filePath":"backend/common-features/ai.md"}'),n={name:"backend/common-features/ai.md"};function l(h,a,p,k,r,d){return e(),s("div",null,a[0]||(a[0]=[t("",11)]))}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_common-features_ai.md.FbpUuNEs.js b/assets/backend_common-features_ai.md.FbpUuNEs.js deleted file mode 100644 index ac096c4..0000000 --- a/assets/backend_common-features_ai.md.FbpUuNEs.js +++ /dev/null @@ -1,8 +0,0 @@ -import{_ as i,c as s,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"AI 서비스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/ai.md","filePath":"backend/common-features/ai.md"}'),n={name:"backend/common-features/ai.md"};function l(h,a,p,k,r,d){return e(),s("div",null,a[0]||(a[0]=[t(`

AI 서비스

AxpFramework는 Google Gemini AI를 연동합니다.

설정

ai-config.yaml

yaml
gemini:
-  api-key: your-api-key

사용 예시

java
@Autowired
-private AxpGeminiService geminiService;
-
-Map<String, Object> request = new HashMap<>();
-request.put("prompt", "질문 내용");
-
-String response = geminiService.callGeminiAi(request);

API 엔드포인트

POST /api/ai/genai

다음 단계

`,11)]))}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_common-features_ai.md.FbpUuNEs.lean.js b/assets/backend_common-features_ai.md.FbpUuNEs.lean.js deleted file mode 100644 index cad9139..0000000 --- a/assets/backend_common-features_ai.md.FbpUuNEs.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as s,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"AI 서비스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/ai.md","filePath":"backend/common-features/ai.md"}'),n={name:"backend/common-features/ai.md"};function l(h,a,p,k,r,d){return e(),s("div",null,a[0]||(a[0]=[t("",11)]))}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_common-features_file.md.CCiXlFRR.js b/assets/backend_common-features_file.md.CCiXlFRR.js new file mode 100644 index 0000000..052769c --- /dev/null +++ b/assets/backend_common-features_file.md.CCiXlFRR.js @@ -0,0 +1,42 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/file.md","filePath":"backend/common-features/file.md"}'),h={name:"backend/common-features/file.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 처리

AxpFramework는 파일 업로드/다운로드 기능을 제공합니다.

파일 업로드

MultipartFile 사용

java
@PostMapping("/upload")
+public ResponseEntity<String> uploadFile(
+    @RequestParam("file") MultipartFile file
+) {
+    if (file.isEmpty()) {
+        return getJSONErrorResponse("파일이 비어있습니다.", null);
+    }
+    
+    String fileName = file.getOriginalFilename();
+    File dest = new File(uploadPath + fileName);
+    file.transferTo(dest);
+    
+    return getJSONSuccessResponse("업로드 성공");
+}

파일 크기 제한

yaml
spring:
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB

파일 다운로드

java
@PostMapping("/download")
+public ResponseEntity<byte[]> downloadFile(
+    @RequestBody Map<String, Object> param
+) {
+    String filePath = param.get("filePath").toString();
+    File file = new File(filePath);
+    byte[] fileBytes = Files.readAllBytes(file.toPath());
+    
+    HttpHeaders headers = new HttpHeaders();
+    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+    headers.setContentDisposition(
+        ContentDisposition.attachment()
+            .filename(file.getName(), StandardCharsets.UTF_8)
+            .build()
+    );
+    
+    return new ResponseEntity<>(fileBytes, headers, HttpStatus.OK);
+}

파일 유틸리티

AxpCommFileUtil

java
@Autowired
+private AxpCommFileUtil fileUtil;
+
+// 파일 삭제
+fileUtil.deleteOne(filePath);
+
+// 디렉토리 생성
+fileUtil.createDirectory(dirPath);

다음 단계

`,14)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/backend_common-features_file.md.CCiXlFRR.lean.js b/assets/backend_common-features_file.md.CCiXlFRR.lean.js new file mode 100644 index 0000000..02327e8 --- /dev/null +++ b/assets/backend_common-features_file.md.CCiXlFRR.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/file.md","filePath":"backend/common-features/file.md"}'),h={name:"backend/common-features/file.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",14)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/backend_common-features_file.md.DetDTpsK.js b/assets/backend_common-features_file.md.DetDTpsK.js deleted file mode 100644 index 0a9999b..0000000 --- a/assets/backend_common-features_file.md.DetDTpsK.js +++ /dev/null @@ -1,42 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/file.md","filePath":"backend/common-features/file.md"}'),h={name:"backend/common-features/file.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 처리

AxpFramework는 파일 업로드/다운로드 기능을 제공합니다.

파일 업로드

MultipartFile 사용

java
@PostMapping("/upload")
-public ResponseEntity<String> uploadFile(
-    @RequestParam("file") MultipartFile file
-) {
-    if (file.isEmpty()) {
-        return getJSONErrorResponse("파일이 비어있습니다.", null);
-    }
-    
-    String fileName = file.getOriginalFilename();
-    File dest = new File(uploadPath + fileName);
-    file.transferTo(dest);
-    
-    return getJSONSuccessResponse("업로드 성공");
-}

파일 크기 제한

yaml
spring:
-  servlet:
-    multipart:
-      max-file-size: 100MB
-      max-request-size: 100MB

파일 다운로드

java
@PostMapping("/download")
-public ResponseEntity<byte[]> downloadFile(
-    @RequestBody Map<String, Object> param
-) {
-    String filePath = param.get("filePath").toString();
-    File file = new File(filePath);
-    byte[] fileBytes = Files.readAllBytes(file.toPath());
-    
-    HttpHeaders headers = new HttpHeaders();
-    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
-    headers.setContentDisposition(
-        ContentDisposition.attachment()
-            .filename(file.getName(), StandardCharsets.UTF_8)
-            .build()
-    );
-    
-    return new ResponseEntity<>(fileBytes, headers, HttpStatus.OK);
-}

파일 유틸리티

AxpCommFileUtil

java
@Autowired
-private AxpCommFileUtil fileUtil;
-
-// 파일 삭제
-fileUtil.deleteOne(filePath);
-
-// 디렉토리 생성
-fileUtil.createDirectory(dirPath);

다음 단계

`,14)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/backend_common-features_file.md.DetDTpsK.lean.js b/assets/backend_common-features_file.md.DetDTpsK.lean.js deleted file mode 100644 index a9fd1f5..0000000 --- a/assets/backend_common-features_file.md.DetDTpsK.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/file.md","filePath":"backend/common-features/file.md"}'),h={name:"backend/common-features/file.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",14)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/backend_common-features_logging.md.CpLBzVCs.js b/assets/backend_common-features_logging.md.CpLBzVCs.js deleted file mode 100644 index 835c231..0000000 --- a/assets/backend_common-features_logging.md.CpLBzVCs.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"로깅","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/logging.md","filePath":"backend/common-features/logging.md"}'),l={name:"backend/common-features/logging.md"};function t(h,a,p,o,r,k){return n(),i("div",null,a[0]||(a[0]=[e(`

로깅

AxpFramework는 AOP 기반 로깅을 제공합니다.

로깅 어노테이션

@AxpCommLogAnnotation

메서드 실행을 자동으로 로깅합니다.

java
@AxpCommLogAnnotation
-public void process(Map<String, Object> param) {
-    // 비즈니스 로직
-}

로그 레벨

설정

yaml
logging:
-  level:
-    org.apache.ibatis: DEBUG
-    axpFramework.common.database.mapper: DEBUG

로그 파일

logs/AxpFramework/AxpFramework.log
-logs/ess/ess-log.log
-logs/fcm/fcm-log.log

Logback 설정

logback-spring.xml

로그 포맷, 레벨, 파일 경로 등을 설정합니다.

다음 단계

`,16)]))}const g=s(l,[["render",t]]);export{c as __pageData,g as default}; diff --git a/assets/backend_common-features_logging.md.CpLBzVCs.lean.js b/assets/backend_common-features_logging.md.CpLBzVCs.lean.js deleted file mode 100644 index 99761d8..0000000 --- a/assets/backend_common-features_logging.md.CpLBzVCs.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"로깅","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/logging.md","filePath":"backend/common-features/logging.md"}'),l={name:"backend/common-features/logging.md"};function t(h,a,p,o,r,k){return n(),i("div",null,a[0]||(a[0]=[e("",16)]))}const g=s(l,[["render",t]]);export{c as __pageData,g as default}; diff --git a/assets/backend_common-features_logging.md.ZTX85n5U.js b/assets/backend_common-features_logging.md.ZTX85n5U.js new file mode 100644 index 0000000..d37bd92 --- /dev/null +++ b/assets/backend_common-features_logging.md.ZTX85n5U.js @@ -0,0 +1,9 @@ +import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"로깅","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/logging.md","filePath":"backend/common-features/logging.md"}'),l={name:"backend/common-features/logging.md"};function t(h,a,p,o,r,k){return n(),i("div",null,a[0]||(a[0]=[e(`

로깅

AxpFramework는 AOP 기반 로깅을 제공합니다.

로깅 어노테이션

@AxpCommLogAnnotation

메서드 실행을 자동으로 로깅합니다.

java
@AxpCommLogAnnotation
+public void process(Map<String, Object> param) {
+    // 비즈니스 로직
+}

로그 레벨

설정

yaml
logging:
+  level:
+    org.apache.ibatis: DEBUG
+    axpFramework.common.database.mapper: DEBUG

로그 파일

logs/AxpFramework/AxpFramework.log
+logs/ess/ess-log.log
+logs/fcm/fcm-log.log

Logback 설정

logback-spring.xml

로그 포맷, 레벨, 파일 경로 등을 설정합니다.

다음 단계

`,16)]))}const g=s(l,[["render",t]]);export{c as __pageData,g as default}; diff --git a/assets/backend_common-features_logging.md.ZTX85n5U.lean.js b/assets/backend_common-features_logging.md.ZTX85n5U.lean.js new file mode 100644 index 0000000..6b4edf3 --- /dev/null +++ b/assets/backend_common-features_logging.md.ZTX85n5U.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"로깅","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/logging.md","filePath":"backend/common-features/logging.md"}'),l={name:"backend/common-features/logging.md"};function t(h,a,p,o,r,k){return n(),i("div",null,a[0]||(a[0]=[e("",16)]))}const g=s(l,[["render",t]]);export{c as __pageData,g as default}; diff --git a/assets/backend_common-features_mail.md.DXC00TlV.js b/assets/backend_common-features_mail.md.DXC00TlV.js new file mode 100644 index 0000000..9d4834f --- /dev/null +++ b/assets/backend_common-features_mail.md.DXC00TlV.js @@ -0,0 +1,20 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"메일 발송","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/mail.md","filePath":"backend/common-features/mail.md"}'),t={name:"backend/common-features/mail.md"};function h(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

메일 발송

AxpFramework는 Spring Mail을 사용하여 이메일을 발송합니다.

설정

application.yaml

yaml
spring:
+  mail:
+    host: smtp.gmail.com
+    port: 587
+    username: your_email@gmail.com
+    password: your_password
+    properties:
+      mail:
+        smtp:
+          auth: true
+          starttls:
+            enable: true

사용 예시

java
@Autowired
+private AxpMailService mailService;
+
+Map<String, Object> mailData = new HashMap<>();
+mailData.put("to", "recipient@example.com");
+mailData.put("subject", "제목");
+mailData.put("body", "내용");
+
+mailService.sendMail(mailData);

다음 단계

`,9)]))}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/backend_common-features_mail.md.DXC00TlV.lean.js b/assets/backend_common-features_mail.md.DXC00TlV.lean.js new file mode 100644 index 0000000..9bd458b --- /dev/null +++ b/assets/backend_common-features_mail.md.DXC00TlV.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"메일 발송","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/mail.md","filePath":"backend/common-features/mail.md"}'),t={name:"backend/common-features/mail.md"};function h(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",9)]))}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/backend_common-features_mail.md.aa5D9BwD.js b/assets/backend_common-features_mail.md.aa5D9BwD.js deleted file mode 100644 index 07836b3..0000000 --- a/assets/backend_common-features_mail.md.aa5D9BwD.js +++ /dev/null @@ -1,20 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"메일 발송","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/mail.md","filePath":"backend/common-features/mail.md"}'),t={name:"backend/common-features/mail.md"};function h(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

메일 발송

AxpFramework는 Spring Mail을 사용하여 이메일을 발송합니다.

설정

application.yaml

yaml
spring:
-  mail:
-    host: smtp.gmail.com
-    port: 587
-    username: your_email@gmail.com
-    password: your_password
-    properties:
-      mail:
-        smtp:
-          auth: true
-          starttls:
-            enable: true

사용 예시

java
@Autowired
-private AxpMailService mailService;
-
-Map<String, Object> mailData = new HashMap<>();
-mailData.put("to", "recipient@example.com");
-mailData.put("subject", "제목");
-mailData.put("body", "내용");
-
-mailService.sendMail(mailData);

다음 단계

`,9)]))}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/backend_common-features_mail.md.aa5D9BwD.lean.js b/assets/backend_common-features_mail.md.aa5D9BwD.lean.js deleted file mode 100644 index ea68d19..0000000 --- a/assets/backend_common-features_mail.md.aa5D9BwD.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"메일 발송","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/mail.md","filePath":"backend/common-features/mail.md"}'),t={name:"backend/common-features/mail.md"};function h(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",9)]))}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/backend_common-features_report.md.DJP8ZNWC.js b/assets/backend_common-features_report.md.DJP8ZNWC.js deleted file mode 100644 index 90827c8..0000000 --- a/assets/backend_common-features_report.md.DJP8ZNWC.js +++ /dev/null @@ -1,159 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"리포트 생성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/report.md","filePath":"backend/common-features/report.md"}'),h={name:"backend/common-features/report.md"};function l(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

리포트 생성

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 방법을 설명합니다.

개요

AxpFramework는 JasperReports를 사용하여 다양한 형식의 리포트를 생성할 수 있습니다.

지원 형식:

리포트 생성 프로세스

1. 리포트 템플릿 작성

리포트 템플릿은 .jrxml 형식으로 작성합니다.

템플릿 위치:

src/main/resources/report/jasperForms/{템플릿명}.jrxml

2. 데이터 조회

프로시저를 호출하여 리포트 데이터를 조회합니다.

java
@Resource(name = "AxpCommDbService")
-private AxpCommDbService axpCommDbService;
-
-Map<String, Object> requestBody = new HashMap<>();
-requestBody.put("procedure", "P_REPORT_DATA");
-requestBody.put("params", params);
-
-Map<String, Object> data = axpCommDbService.executeProcedure(requestBody);
-List<Map<String, Object>> cv1 = (List<Map<String, Object>>) data.get("CV_1");

3. 리포트 파라미터 설정

java
Map<String, Object> parameters = new HashMap<>();
-
-// 커서 데이터 설정
-JRBeanCollectionDataSource dataSource = 
-    new JRBeanCollectionDataSource(cv1);
-parameters.put("cv_1", dataSource);
-
-// 일반 파라미터 설정
-parameters.put("jr_p_title", "리포트 제목");
-parameters.put("jr_p_date", "2024-01-01");

4. 리포트 생성

java
// JRXML 파일 로드
-InputStream jrxmlStream = getClass()
-    .getClassLoader()
-    .getResourceAsStream("report/jasperForms/report.jrxml");
-JasperDesign design = JRXmlLoader.load(jrxmlStream);
-
-// 리포트 컴파일
-JasperReport report = JasperCompileManager.compileReport(design);
-
-// 리포트 채우기
-JasperPrint jasperPrint = JasperFillManager.fillReport(
-    report, parameters, new JREmptyDataSource()
-);
-
-// PDF로 내보내기
-JRPdfExporter exporter = new JRPdfExporter();
-exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
-exporter.setExporterOutput(
-    new SimpleOutputStreamExporterOutput(outputStream)
-);
-exporter.exportReport();

API 사용

PDF 리포트 생성

java
POST /api/direct/report/pdfView
-Body: {
-  "jr_report": "REPORT_TEMPLATE",
-  "procedure": "P_REPORT_DATA",
-  "params": { ... },
-  "jr_p_title": "리포트 제목"
-}

Excel 리포트 다운로드

java
POST /api/direct/report/excelDown
-Form Data: {
-  "jr_report": "REPORT_TEMPLATE",
-  "procedure": "P_REPORT_DATA",
-  "params": { ... }
-}

리포트 파라미터 규칙

커서 파라미터

프로시저에서 반환하는 커서는 자동으로 리포트 파라미터로 전달됩니다.

일반 파라미터

jr_p_* 형식의 키는 리포트 템플릿의 파라미터로 전달됩니다.

json
{
-  "jr_p_title": "제목",
-  "jr_p_date": "2024-01-01"
-}

→ 리포트 템플릿에서 $P{jr_p_title}, $P{jr_p_date}로 사용

이미지 파라미터

서버 경로 이미지

json
{
-  "jr_i_surl_cv_1/IMAGE_PATH": "cv_1/IMAGE_PATH"
-}

웹 경로 이미지

json
{
-  "jr_i_url_logo": "/resources/images/logo.png"
-}

커서 변환

json
{
-  "jr_convert_cv_1/cv_main": "cv_1/cv_main"
-}

cv_1 커서를 cv_main이라는 이름으로 복사

복호화

json
{
-  "decrypt_column": "cv_1:social_num|cv_3:emp_name"
-}

→ 지정된 컬럼을 AES-128로 복호화

한글 폰트

폰트 위치

src/main/resources/report/jasperfonts/

지원 폰트

폰트 설정

JRXML 템플릿에서 폰트를 설정합니다:

xml
<textField>
-    <textElement>
-        <font fontName="NanumGothic" size="12"/>
-    </textElement>
-    <textFieldExpression><![CDATA[$F{fieldName}]]></textFieldExpression>
-</textField>

리포트 템플릿 작성

기본 구조

xml
<?xml version="1.0" encoding="UTF-8"?>
-<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
-              http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
-              name="ReportTemplate"
-              pageWidth="595"
-              pageHeight="842"
-              columnWidth="555"
-              leftMargin="20"
-              rightMargin="20"
-              topMargin="20"
-              bottomMargin="20">
-    
-    <!-- 파라미터 정의 -->
-    <parameter name="jr_p_title" class="java.lang.String"/>
-    <parameter name="cv_1" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
-    
-    <!-- 필드 정의 -->
-    <field name="column1" class="java.lang.String"/>
-    <field name="column2" class="java.lang.String"/>
-    
-    <!-- 제목 -->
-    <title>
-        <band height="50">
-            <staticText>
-                <reportElement x="0" y="0" width="555" height="30"/>
-                <textElement>
-                    <font fontName="NanumGothic" size="16" isBold="true"/>
-                </textElement>
-                <text><![CDATA[리포트 제목]]></text>
-            </staticText>
-        </band>
-    </title>
-    
-    <!-- 상세 -->
-    <detail>
-        <band height="20">
-            <textField>
-                <reportElement x="0" y="0" width="200" height="20"/>
-                <textElement>
-                    <font fontName="NanumGothic" size="10"/>
-                </textElement>
-                <textFieldExpression><![CDATA[$F{column1}]]></textFieldExpression>
-            </textField>
-            <textField>
-                <reportElement x="200" y="0" width="200" height="20"/>
-                <textElement>
-                    <font fontName="NanumGothic" size="10"/>
-                </textElement>
-                <textFieldExpression><![CDATA[$F{column2}]]></textFieldExpression>
-            </textField>
-        </band>
-    </detail>
-</jasperReport>

사용 예시

서비스에서 리포트 생성

java
@Service
-public class MyReportService {
-    
-    @Resource(name = "AxpCommDbService")
-    private AxpCommDbService axpCommDbService;
-    
-    public byte[] generateReport(Map<String, Object> params) throws Exception {
-        // 데이터 조회
-        Map<String, Object> requestBody = new HashMap<>();
-        requestBody.put("procedure", "P_REPORT_DATA");
-        requestBody.put("params", params);
-        Map<String, Object> data = axpCommDbService.executeProcedure(requestBody);
-        
-        // 리포트 파라미터 설정
-        Map<String, Object> reportParams = new HashMap<>();
-        List<Map<String, Object>> cv1 = (List<Map<String, Object>>) data.get("CV_1");
-        JRBeanCollectionDataSource dataSource = 
-            new JRBeanCollectionDataSource(cv1);
-        reportParams.put("cv_1", dataSource);
-        reportParams.put("jr_p_title", "리포트 제목");
-        
-        // 리포트 생성
-        InputStream jrxmlStream = getClass()
-            .getClassLoader()
-            .getResourceAsStream("report/jasperForms/report.jrxml");
-        JasperDesign design = JRXmlLoader.load(jrxmlStream);
-        JasperReport report = JasperCompileManager.compileReport(design);
-        JasperPrint jasperPrint = JasperFillManager.fillReport(
-            report, reportParams, new JREmptyDataSource()
-        );
-        
-        // PDF로 변환
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        JRPdfExporter exporter = new JRPdfExporter();
-        exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
-        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(baos));
-        exporter.exportReport();
-        
-        return baos.toByteArray();
-    }
-}

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제됩니다.
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자로 변환됩니다.
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 합니다.
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화됩니다.
  5. 한글 폰트: 한글을 표시하려면 폰트 설정이 필요합니다.

다음 단계

`,60)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/backend_common-features_report.md.DJP8ZNWC.lean.js b/assets/backend_common-features_report.md.DJP8ZNWC.lean.js deleted file mode 100644 index 6cafcd2..0000000 --- a/assets/backend_common-features_report.md.DJP8ZNWC.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"리포트 생성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/report.md","filePath":"backend/common-features/report.md"}'),h={name:"backend/common-features/report.md"};function l(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",60)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/backend_common-features_report.md.cPNfjxvd.js b/assets/backend_common-features_report.md.cPNfjxvd.js new file mode 100644 index 0000000..a9327c1 --- /dev/null +++ b/assets/backend_common-features_report.md.cPNfjxvd.js @@ -0,0 +1,159 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"리포트 생성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/report.md","filePath":"backend/common-features/report.md"}'),h={name:"backend/common-features/report.md"};function l(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

리포트 생성

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 방법을 설명합니다.

개요

AxpFramework는 JasperReports를 사용하여 다양한 형식의 리포트를 생성할 수 있습니다.

지원 형식:

리포트 생성 프로세스

1. 리포트 템플릿 작성

리포트 템플릿은 .jrxml 형식으로 작성합니다.

템플릿 위치:

src/main/resources/report/jasperForms/{템플릿명}.jrxml

2. 데이터 조회

프로시저를 호출하여 리포트 데이터를 조회합니다.

java
@Resource(name = "AxpCommDbService")
+private AxpCommDbService axpCommDbService;
+
+Map<String, Object> requestBody = new HashMap<>();
+requestBody.put("procedure", "P_REPORT_DATA");
+requestBody.put("params", params);
+
+Map<String, Object> data = axpCommDbService.executeProcedure(requestBody);
+List<Map<String, Object>> cv1 = (List<Map<String, Object>>) data.get("CV_1");

3. 리포트 파라미터 설정

java
Map<String, Object> parameters = new HashMap<>();
+
+// 커서 데이터 설정
+JRBeanCollectionDataSource dataSource = 
+    new JRBeanCollectionDataSource(cv1);
+parameters.put("cv_1", dataSource);
+
+// 일반 파라미터 설정
+parameters.put("jr_p_title", "리포트 제목");
+parameters.put("jr_p_date", "2024-01-01");

4. 리포트 생성

java
// JRXML 파일 로드
+InputStream jrxmlStream = getClass()
+    .getClassLoader()
+    .getResourceAsStream("report/jasperForms/report.jrxml");
+JasperDesign design = JRXmlLoader.load(jrxmlStream);
+
+// 리포트 컴파일
+JasperReport report = JasperCompileManager.compileReport(design);
+
+// 리포트 채우기
+JasperPrint jasperPrint = JasperFillManager.fillReport(
+    report, parameters, new JREmptyDataSource()
+);
+
+// PDF로 내보내기
+JRPdfExporter exporter = new JRPdfExporter();
+exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+exporter.setExporterOutput(
+    new SimpleOutputStreamExporterOutput(outputStream)
+);
+exporter.exportReport();

API 사용

PDF 리포트 생성

java
POST /api/direct/report/pdfView
+Body: {
+  "jr_report": "REPORT_TEMPLATE",
+  "procedure": "P_REPORT_DATA",
+  "params": { ... },
+  "jr_p_title": "리포트 제목"
+}

Excel 리포트 다운로드

java
POST /api/direct/report/excelDown
+Form Data: {
+  "jr_report": "REPORT_TEMPLATE",
+  "procedure": "P_REPORT_DATA",
+  "params": { ... }
+}

리포트 파라미터 규칙

커서 파라미터

프로시저에서 반환하는 커서는 자동으로 리포트 파라미터로 전달됩니다.

일반 파라미터

jr_p_* 형식의 키는 리포트 템플릿의 파라미터로 전달됩니다.

json
{
+  "jr_p_title": "제목",
+  "jr_p_date": "2024-01-01"
+}

→ 리포트 템플릿에서 $P{jr_p_title}, $P{jr_p_date}로 사용

이미지 파라미터

서버 경로 이미지

json
{
+  "jr_i_surl_cv_1/IMAGE_PATH": "cv_1/IMAGE_PATH"
+}

웹 경로 이미지

json
{
+  "jr_i_url_logo": "/resources/images/logo.png"
+}

커서 변환

json
{
+  "jr_convert_cv_1/cv_main": "cv_1/cv_main"
+}

cv_1 커서를 cv_main이라는 이름으로 복사

복호화

json
{
+  "decrypt_column": "cv_1:social_num|cv_3:emp_name"
+}

→ 지정된 컬럼을 AES-128로 복호화

한글 폰트

폰트 위치

src/main/resources/report/jasperfonts/

지원 폰트

폰트 설정

JRXML 템플릿에서 폰트를 설정합니다:

xml
<textField>
+    <textElement>
+        <font fontName="NanumGothic" size="12"/>
+    </textElement>
+    <textFieldExpression><![CDATA[$F{fieldName}]]></textFieldExpression>
+</textField>

리포트 템플릿 작성

기본 구조

xml
<?xml version="1.0" encoding="UTF-8"?>
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
+              http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
+              name="ReportTemplate"
+              pageWidth="595"
+              pageHeight="842"
+              columnWidth="555"
+              leftMargin="20"
+              rightMargin="20"
+              topMargin="20"
+              bottomMargin="20">
+    
+    <!-- 파라미터 정의 -->
+    <parameter name="jr_p_title" class="java.lang.String"/>
+    <parameter name="cv_1" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
+    
+    <!-- 필드 정의 -->
+    <field name="column1" class="java.lang.String"/>
+    <field name="column2" class="java.lang.String"/>
+    
+    <!-- 제목 -->
+    <title>
+        <band height="50">
+            <staticText>
+                <reportElement x="0" y="0" width="555" height="30"/>
+                <textElement>
+                    <font fontName="NanumGothic" size="16" isBold="true"/>
+                </textElement>
+                <text><![CDATA[리포트 제목]]></text>
+            </staticText>
+        </band>
+    </title>
+    
+    <!-- 상세 -->
+    <detail>
+        <band height="20">
+            <textField>
+                <reportElement x="0" y="0" width="200" height="20"/>
+                <textElement>
+                    <font fontName="NanumGothic" size="10"/>
+                </textElement>
+                <textFieldExpression><![CDATA[$F{column1}]]></textFieldExpression>
+            </textField>
+            <textField>
+                <reportElement x="200" y="0" width="200" height="20"/>
+                <textElement>
+                    <font fontName="NanumGothic" size="10"/>
+                </textElement>
+                <textFieldExpression><![CDATA[$F{column2}]]></textFieldExpression>
+            </textField>
+        </band>
+    </detail>
+</jasperReport>

사용 예시

서비스에서 리포트 생성

java
@Service
+public class MyReportService {
+    
+    @Resource(name = "AxpCommDbService")
+    private AxpCommDbService axpCommDbService;
+    
+    public byte[] generateReport(Map<String, Object> params) throws Exception {
+        // 데이터 조회
+        Map<String, Object> requestBody = new HashMap<>();
+        requestBody.put("procedure", "P_REPORT_DATA");
+        requestBody.put("params", params);
+        Map<String, Object> data = axpCommDbService.executeProcedure(requestBody);
+        
+        // 리포트 파라미터 설정
+        Map<String, Object> reportParams = new HashMap<>();
+        List<Map<String, Object>> cv1 = (List<Map<String, Object>>) data.get("CV_1");
+        JRBeanCollectionDataSource dataSource = 
+            new JRBeanCollectionDataSource(cv1);
+        reportParams.put("cv_1", dataSource);
+        reportParams.put("jr_p_title", "리포트 제목");
+        
+        // 리포트 생성
+        InputStream jrxmlStream = getClass()
+            .getClassLoader()
+            .getResourceAsStream("report/jasperForms/report.jrxml");
+        JasperDesign design = JRXmlLoader.load(jrxmlStream);
+        JasperReport report = JasperCompileManager.compileReport(design);
+        JasperPrint jasperPrint = JasperFillManager.fillReport(
+            report, reportParams, new JREmptyDataSource()
+        );
+        
+        // PDF로 변환
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        JRPdfExporter exporter = new JRPdfExporter();
+        exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(baos));
+        exporter.exportReport();
+        
+        return baos.toByteArray();
+    }
+}

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제됩니다.
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자로 변환됩니다.
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 합니다.
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화됩니다.
  5. 한글 폰트: 한글을 표시하려면 폰트 설정이 필요합니다.

다음 단계

`,60)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/backend_common-features_report.md.cPNfjxvd.lean.js b/assets/backend_common-features_report.md.cPNfjxvd.lean.js new file mode 100644 index 0000000..f1f7fc3 --- /dev/null +++ b/assets/backend_common-features_report.md.cPNfjxvd.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"리포트 생성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/report.md","filePath":"backend/common-features/report.md"}'),h={name:"backend/common-features/report.md"};function l(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",60)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/backend_common-features_security.md.DWq4yIEZ.js b/assets/backend_common-features_security.md.DWq4yIEZ.js new file mode 100644 index 0000000..36a6883 --- /dev/null +++ b/assets/backend_common-features_security.md.DWq4yIEZ.js @@ -0,0 +1,64 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"보안 기능","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/security.md","filePath":"backend/common-features/security.md"}'),l={name:"backend/common-features/security.md"};function h(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

보안 기능

AxpFramework에서 제공하는 보안 관련 기능을 설명합니다.

개요

AxpFramework는 다양한 보안 기능을 제공하여 애플리케이션의 보안을 강화합니다.

주요 기능:

암호화 유틸리티

AES-128

대칭키 암호화 알고리즘입니다.

사용 예시:

java
@Resource(name = "AxpCommAES128")
+private AxpCommAES128 aes128;
+
+// 암호화
+String encrypted = aes128.encrypt("평문 데이터");
+
+// 복호화
+String decrypted = aes128.decrypt(encrypted);

용도:

RSA

공개키 암호화 알고리즘입니다.

사용 예시:

java
@Resource(name = "AxpCommRsa")
+private AxpCommRsa rsa;
+
+// 암호화
+String encrypted = rsa.encrypt("평문 데이터");
+
+// 복호화
+String decrypted = rsa.decrypt(encrypted);

설정:

yaml
rsa:
+  private: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCmI2Rk09DaXKzBR3GkbK+33Ye7QZEXx3QfZnMcO7yJOnv3BCO5HYv7fFwqt9Wctu+ZTiuyI3Oqi+PF65/0Y9AdambuWMj2ot+xbm9ipLzIdUcdZGC1XLazMkf6IsepO/xr109e/JEHbFPYmO3Bc6yydl226shGX0H3/nq3uej2w2Z4LcjMaL4qFP9FWZx8nNvzxkHQ2we5les9phYdOtZijcqHvPvzTuPtuA4c+9pFOkjqsEzeck1La3KVlCXb2OFUZ3+dwJHU3pyp9suVNOWk80WVxgtxGJQAAnFfBFCmeOtrOeJ6aXLi8fxAKwdAElhSOIwwW6baAHfvH0Wz3jzdAgMBAAECggEAOZjehsgaSYHEkJNUtiTJ/IvsMQKnqx9GRlaNxLV/BPJGJNqGCfjQ3WR9TYADKfwP7822f2EkCfXKhwTLpP3vmisXuT0Fmt/XfltjeUbUfgiOmYWBs46Ldm+RnYnuP2Eg/0Abb7pPC0xGezp1ftI8Bnjbv30A5sjChZfvcn+c4ONIfA85ogchOL8aSWAqtuj1WmPAHs1fiCbailExuqMZ0mGLYs1g0e0W1zKUqVpWxKchF1rOUmtMAHy0Sqlw+XKSDS4nVxiLTMMxPKM1Jt8Io/nE4j5QmcAAaWExRuvkbokKrCjXAFVj4fIlwFUdxsgqi14yhxbVNLuIj9WtHEnSHwKBgQDlCw7b3dQy8rFQ4CwTaeEii0tIM7xeSwkSYx7BgNgeNcRlhbg6Kl2OVaLmryQhj9VOIFFWXbvK6FIiG0IoBVefit+IYUo8DBYXHsrOHE1eZmdvW2k2uroEAZXTFlcNMRxO3av/nkWr2ldJOEqk9hvc2xfqVEMMjNTqDDhCIqMwwwKBgQC5sQswRitzSqFgEgfrGSuvXW/r8iM/4QLMGNiC5LlWdA9T+p/M0WCaJab43KEC8ZMWq/kH3+AtSYUIZXqKjqQleDN12a1PSQRleolE8iUMRbO4HxfnlC7drZAb1EK0Qbwq61xJE0/EuFLzxIE8SnhylKUtUAcLfKjLEc+1QQIB3wKBgHL+wk8RaODLiMsaQgbdOfOmC/4MO577/WoF6gMtNVS1mg1+vag2bRJxXICFnpZbKLU49J1wIkEVs2b8WJLPW9b2WpSWhDbxuoWRKDGjdBTZRUVbl8+qoIoyYY7BwKMW7SeLlDeat1A5J2nToWaBSivwtGkqNR+v9ZYs3HIYAecRAoGADTqkvmqxW8RcXNjMAZ7IcvToLVoR0tI3/cxjWGftIFCiauw3CEN+a1z1WVN2kRwey4Wy9zGm6fML7D42jbp9zUGUAPhiFXzxOD2Tm/rYUtiAZkSo0lHHSPm9g44KtobcXf5ok7gxfaVYG4/LWT1A+YDHh8PkzJez+supDZO1DecCgYAaKjrJVqScBpXlQ3EHPv5qGyVWwhcSKl9FNkMMIFmJfkIYckWqFqQX/+44EDtCYUFCShoSPuhnre9IVTfmoHBWa/R6CbydFxPYuDHsgDiDI+BMZq0It6rB8NH26gw0CzyxpZxVpI6x3FRWZ/KAJtaLsY8Zewf18C9MXdRYhXlSXg==

해시 함수

MD5

java
@Resource(name = "AxpCommMD5Util")
+private AxpCommMD5Util md5Util;
+
+String hash = md5Util.hash("입력 데이터");

SHA-256

java
@Resource(name = "AxpCommSHA256Util")
+private AxpCommSHA256Util sha256Util;
+
+String hash = sha256Util.hash("입력 데이터");

XSS 방지

AxpXssFilter

모든 HTTP 요청에 대해 XSS 필터링을 자동으로 적용합니다.

처리 내용:

설정:

AxpXssUtil

XSS 필터링 유틸리티입니다.

사용 예시:

java
String safeValue = AxpXssUtil.stripXss(userInput);

JWT 인증

AxpCommAuthService

JWT 토큰 생성 및 검증 서비스입니다.

주요 메서드:

사용 예시:

java
@Resource(name = "AxpCommAuthService")
+private AxpCommAuthService authService;
+
+// 토큰 생성
+String accessToken = authService.createAccessToken("USER001");
+String refreshToken = authService.createRefreshToken("USER001");
+
+// 토큰 검증
+Claims claims = authService.parseToken(accessToken);
+String userId = claims.getSubject();

AxpJwtAuthenticationFilter

JWT 토큰 인증 필터입니다.

동작:

Spring Security 통합

AxpSecurityConfig

Spring Security 설정 클래스입니다.

주요 기능:

보안 헤더:

복호화 필터

AxpDecryptFilter

암호화된 요청 데이터를 복호화하는 필터입니다.

동작:

보안 정책 파일

antisamy-policy.xml

OWASP AntiSamy 정책 파일입니다.

위치:

src/main/resources/antisamy-policy.xml

내용:

사용 예시

개인정보 암호화

java
@Service
+public class UserService {
+    
+    @Resource(name = "AxpCommAES128")
+    private AxpCommAES128 aes128;
+    
+    public void saveUser(Map<String, Object> userData) {
+        // 주민등록번호 암호화
+        String socialNum = userData.get("socialNum").toString();
+        String encrypted = aes128.encrypt(socialNum);
+        userData.put("socialNum", encrypted);
+        
+        // DB 저장
+        // ...
+    }
+    
+    public Map<String, Object> getUser(String userId) {
+        // DB 조회
+        Map<String, Object> user = // ...
+        
+        // 주민등록번호 복호화
+        String encrypted = user.get("socialNum").toString();
+        String decrypted = aes128.decrypt(encrypted);
+        user.put("socialNum", decrypted);
+        
+        return user;
+    }
+}

리포트 생성 시 복호화

java
POST /api/direct/report/pdfView
+Body: {
+  "jr_report": "REPORT_TEMPLATE",
+  "procedure": "P_REPORT_DATA",
+  "params": { ... },
+  "decrypt_column": "cv_1:social_num|cv_3:emp_name"
+}

주의사항

  1. 암호화 키 보안: 암호화 키는 설정 파일에 저장하며, Git에 커밋하지 않도록 주의
  2. XSS 필터: 모든 요청에 자동 적용되므로 성능 고려 필요
  3. 토큰 만료: Access Token은 15분, Refresh Token은 7일
  4. 복호화 필터: 필요한 경우에만 활성화

다음 단계

`,74)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_common-features_security.md.DWq4yIEZ.lean.js b/assets/backend_common-features_security.md.DWq4yIEZ.lean.js new file mode 100644 index 0000000..9e7e0b4 --- /dev/null +++ b/assets/backend_common-features_security.md.DWq4yIEZ.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"보안 기능","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/security.md","filePath":"backend/common-features/security.md"}'),l={name:"backend/common-features/security.md"};function h(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",74)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_common-features_security.md.hxnUyxk-.js b/assets/backend_common-features_security.md.hxnUyxk-.js deleted file mode 100644 index e66bcd5..0000000 --- a/assets/backend_common-features_security.md.hxnUyxk-.js +++ /dev/null @@ -1,64 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"보안 기능","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/security.md","filePath":"backend/common-features/security.md"}'),l={name:"backend/common-features/security.md"};function h(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

보안 기능

AxpFramework에서 제공하는 보안 관련 기능을 설명합니다.

개요

AxpFramework는 다양한 보안 기능을 제공하여 애플리케이션의 보안을 강화합니다.

주요 기능:

암호화 유틸리티

AES-128

대칭키 암호화 알고리즘입니다.

사용 예시:

java
@Resource(name = "AxpCommAES128")
-private AxpCommAES128 aes128;
-
-// 암호화
-String encrypted = aes128.encrypt("평문 데이터");
-
-// 복호화
-String decrypted = aes128.decrypt(encrypted);

용도:

RSA

공개키 암호화 알고리즘입니다.

사용 예시:

java
@Resource(name = "AxpCommRsa")
-private AxpCommRsa rsa;
-
-// 암호화
-String encrypted = rsa.encrypt("평문 데이터");
-
-// 복호화
-String decrypted = rsa.decrypt(encrypted);

설정:

yaml
rsa:
-  private: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCmI2Rk09DaXKzBR3GkbK+33Ye7QZEXx3QfZnMcO7yJOnv3BCO5HYv7fFwqt9Wctu+ZTiuyI3Oqi+PF65/0Y9AdambuWMj2ot+xbm9ipLzIdUcdZGC1XLazMkf6IsepO/xr109e/JEHbFPYmO3Bc6yydl226shGX0H3/nq3uej2w2Z4LcjMaL4qFP9FWZx8nNvzxkHQ2we5les9phYdOtZijcqHvPvzTuPtuA4c+9pFOkjqsEzeck1La3KVlCXb2OFUZ3+dwJHU3pyp9suVNOWk80WVxgtxGJQAAnFfBFCmeOtrOeJ6aXLi8fxAKwdAElhSOIwwW6baAHfvH0Wz3jzdAgMBAAECggEAOZjehsgaSYHEkJNUtiTJ/IvsMQKnqx9GRlaNxLV/BPJGJNqGCfjQ3WR9TYADKfwP7822f2EkCfXKhwTLpP3vmisXuT0Fmt/XfltjeUbUfgiOmYWBs46Ldm+RnYnuP2Eg/0Abb7pPC0xGezp1ftI8Bnjbv30A5sjChZfvcn+c4ONIfA85ogchOL8aSWAqtuj1WmPAHs1fiCbailExuqMZ0mGLYs1g0e0W1zKUqVpWxKchF1rOUmtMAHy0Sqlw+XKSDS4nVxiLTMMxPKM1Jt8Io/nE4j5QmcAAaWExRuvkbokKrCjXAFVj4fIlwFUdxsgqi14yhxbVNLuIj9WtHEnSHwKBgQDlCw7b3dQy8rFQ4CwTaeEii0tIM7xeSwkSYx7BgNgeNcRlhbg6Kl2OVaLmryQhj9VOIFFWXbvK6FIiG0IoBVefit+IYUo8DBYXHsrOHE1eZmdvW2k2uroEAZXTFlcNMRxO3av/nkWr2ldJOEqk9hvc2xfqVEMMjNTqDDhCIqMwwwKBgQC5sQswRitzSqFgEgfrGSuvXW/r8iM/4QLMGNiC5LlWdA9T+p/M0WCaJab43KEC8ZMWq/kH3+AtSYUIZXqKjqQleDN12a1PSQRleolE8iUMRbO4HxfnlC7drZAb1EK0Qbwq61xJE0/EuFLzxIE8SnhylKUtUAcLfKjLEc+1QQIB3wKBgHL+wk8RaODLiMsaQgbdOfOmC/4MO577/WoF6gMtNVS1mg1+vag2bRJxXICFnpZbKLU49J1wIkEVs2b8WJLPW9b2WpSWhDbxuoWRKDGjdBTZRUVbl8+qoIoyYY7BwKMW7SeLlDeat1A5J2nToWaBSivwtGkqNR+v9ZYs3HIYAecRAoGADTqkvmqxW8RcXNjMAZ7IcvToLVoR0tI3/cxjWGftIFCiauw3CEN+a1z1WVN2kRwey4Wy9zGm6fML7D42jbp9zUGUAPhiFXzxOD2Tm/rYUtiAZkSo0lHHSPm9g44KtobcXf5ok7gxfaVYG4/LWT1A+YDHh8PkzJez+supDZO1DecCgYAaKjrJVqScBpXlQ3EHPv5qGyVWwhcSKl9FNkMMIFmJfkIYckWqFqQX/+44EDtCYUFCShoSPuhnre9IVTfmoHBWa/R6CbydFxPYuDHsgDiDI+BMZq0It6rB8NH26gw0CzyxpZxVpI6x3FRWZ/KAJtaLsY8Zewf18C9MXdRYhXlSXg==

해시 함수

MD5

java
@Resource(name = "AxpCommMD5Util")
-private AxpCommMD5Util md5Util;
-
-String hash = md5Util.hash("입력 데이터");

SHA-256

java
@Resource(name = "AxpCommSHA256Util")
-private AxpCommSHA256Util sha256Util;
-
-String hash = sha256Util.hash("입력 데이터");

XSS 방지

AxpXssFilter

모든 HTTP 요청에 대해 XSS 필터링을 자동으로 적용합니다.

처리 내용:

설정:

AxpXssUtil

XSS 필터링 유틸리티입니다.

사용 예시:

java
String safeValue = AxpXssUtil.stripXss(userInput);

JWT 인증

AxpCommAuthService

JWT 토큰 생성 및 검증 서비스입니다.

주요 메서드:

사용 예시:

java
@Resource(name = "AxpCommAuthService")
-private AxpCommAuthService authService;
-
-// 토큰 생성
-String accessToken = authService.createAccessToken("USER001");
-String refreshToken = authService.createRefreshToken("USER001");
-
-// 토큰 검증
-Claims claims = authService.parseToken(accessToken);
-String userId = claims.getSubject();

AxpJwtAuthenticationFilter

JWT 토큰 인증 필터입니다.

동작:

Spring Security 통합

AxpSecurityConfig

Spring Security 설정 클래스입니다.

주요 기능:

보안 헤더:

복호화 필터

AxpDecryptFilter

암호화된 요청 데이터를 복호화하는 필터입니다.

동작:

보안 정책 파일

antisamy-policy.xml

OWASP AntiSamy 정책 파일입니다.

위치:

src/main/resources/antisamy-policy.xml

내용:

사용 예시

개인정보 암호화

java
@Service
-public class UserService {
-    
-    @Resource(name = "AxpCommAES128")
-    private AxpCommAES128 aes128;
-    
-    public void saveUser(Map<String, Object> userData) {
-        // 주민등록번호 암호화
-        String socialNum = userData.get("socialNum").toString();
-        String encrypted = aes128.encrypt(socialNum);
-        userData.put("socialNum", encrypted);
-        
-        // DB 저장
-        // ...
-    }
-    
-    public Map<String, Object> getUser(String userId) {
-        // DB 조회
-        Map<String, Object> user = // ...
-        
-        // 주민등록번호 복호화
-        String encrypted = user.get("socialNum").toString();
-        String decrypted = aes128.decrypt(encrypted);
-        user.put("socialNum", decrypted);
-        
-        return user;
-    }
-}

리포트 생성 시 복호화

java
POST /api/direct/report/pdfView
-Body: {
-  "jr_report": "REPORT_TEMPLATE",
-  "procedure": "P_REPORT_DATA",
-  "params": { ... },
-  "decrypt_column": "cv_1:social_num|cv_3:emp_name"
-}

주의사항

  1. 암호화 키 보안: 암호화 키는 설정 파일에 저장하며, Git에 커밋하지 않도록 주의
  2. XSS 필터: 모든 요청에 자동 적용되므로 성능 고려 필요
  3. 토큰 만료: Access Token은 15분, Refresh Token은 7일
  4. 복호화 필터: 필요한 경우에만 활성화

다음 단계

`,74)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_common-features_security.md.hxnUyxk-.lean.js b/assets/backend_common-features_security.md.hxnUyxk-.lean.js deleted file mode 100644 index 6c8af68..0000000 --- a/assets/backend_common-features_security.md.hxnUyxk-.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"보안 기능","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/security.md","filePath":"backend/common-features/security.md"}'),l={name:"backend/common-features/security.md"};function h(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",74)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_common-features_sms.md.CQn2dNYa.js b/assets/backend_common-features_sms.md.CQn2dNYa.js deleted file mode 100644 index 91f750e..0000000 --- a/assets/backend_common-features_sms.md.CQn2dNYa.js +++ /dev/null @@ -1,10 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"SMS 발송","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/sms.md","filePath":"backend/common-features/sms.md"}'),t={name:"backend/common-features/sms.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[e(`

SMS 발송

AxpFramework는 SMS 발송 기능을 제공합니다.

설정

application.yaml

yaml
msg:
-  kt:
-    scheduled: false
-    key: Basic Q1BTODQwMDA1ODcxOERPUUZOTzpTVks4NDAwMDU4NzE4R0pVTVdP
-    stel: 15883391
-    url:
-      sms: https://cpaas.api.kt.com/cpaas/v1.0/CPaaS_sendSMS

사용 예시

java
@Autowired
-private AxpSmsService smsService;
-
-boolean result = smsService.phoneMsgSend(mstNo, sessionInfo);

다음 단계

`,9)]))}const E=a(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_common-features_sms.md.CQn2dNYa.lean.js b/assets/backend_common-features_sms.md.CQn2dNYa.lean.js deleted file mode 100644 index 553176d..0000000 --- a/assets/backend_common-features_sms.md.CQn2dNYa.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"SMS 발송","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/sms.md","filePath":"backend/common-features/sms.md"}'),t={name:"backend/common-features/sms.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[e("",9)]))}const E=a(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_common-features_sms.md.imPFTBRU.js b/assets/backend_common-features_sms.md.imPFTBRU.js new file mode 100644 index 0000000..62ec11d --- /dev/null +++ b/assets/backend_common-features_sms.md.imPFTBRU.js @@ -0,0 +1,10 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"SMS 발송","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/sms.md","filePath":"backend/common-features/sms.md"}'),t={name:"backend/common-features/sms.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[e(`

SMS 발송

AxpFramework는 SMS 발송 기능을 제공합니다.

설정

application.yaml

yaml
msg:
+  kt:
+    scheduled: false
+    key: Basic Q1BTODQwMDA1ODcxOERPUUZOTzpTVks4NDAwMDU4NzE4R0pVTVdP
+    stel: 15883391
+    url:
+      sms: https://cpaas.api.kt.com/cpaas/v1.0/CPaaS_sendSMS

사용 예시

java
@Autowired
+private AxpSmsService smsService;
+
+boolean result = smsService.phoneMsgSend(mstNo, sessionInfo);

다음 단계

`,9)]))}const E=a(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_common-features_sms.md.imPFTBRU.lean.js b/assets/backend_common-features_sms.md.imPFTBRU.lean.js new file mode 100644 index 0000000..dcf1163 --- /dev/null +++ b/assets/backend_common-features_sms.md.imPFTBRU.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"SMS 발송","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/sms.md","filePath":"backend/common-features/sms.md"}'),t={name:"backend/common-features/sms.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[e("",9)]))}const E=a(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_common-features_utilities.md.BxORt-sQ.js b/assets/backend_common-features_utilities.md.BxORt-sQ.js new file mode 100644 index 0000000..b21c065 --- /dev/null +++ b/assets/backend_common-features_utilities.md.BxORt-sQ.js @@ -0,0 +1,24 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"유틸리티 클래스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/utilities.md","filePath":"backend/common-features/utilities.md"}'),t={name:"backend/common-features/utilities.md"};function e(p,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l(`

유틸리티 클래스

AxpFramework는 다양한 유틸리티 클래스를 제공합니다.

AxpCommUtil

공통 유틸리티 클래스입니다.

주요 메서드

java
@Autowired
+private AxpCommUtil util;
+
+// 빈 값 확인
+boolean isEmpty = util.isEmpty(value);
+
+// 현재 시간
+String nowTime = util.getNowTime();
+
+// 클라이언트 IP
+String ip = util.getClientIp(request);
+
+// User Agent
+String userAgent = util.getUserAgent(request);

AxpCommValidationUtil

유효성 검증 유틸리티입니다.

java
@Autowired
+private AxpCommValidationUtil validationUtil;
+
+// 이메일 검증
+boolean isValid = validationUtil.isValidEmail(email);
+
+// 전화번호 검증
+boolean isValid = validationUtil.isValidPhone(phone);

AxpCommPaging

페이징 처리 유틸리티입니다.

java
@Autowired
+private AxpCommPaging paging;
+
+Map<String, Object> pageInfo = paging.getPageInfo(currentPage, totalCount, pageSize);

다음 단계

`,14)]))}const g=i(t,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/backend_common-features_utilities.md.BxORt-sQ.lean.js b/assets/backend_common-features_utilities.md.BxORt-sQ.lean.js new file mode 100644 index 0000000..a9ed2d7 --- /dev/null +++ b/assets/backend_common-features_utilities.md.BxORt-sQ.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"유틸리티 클래스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/utilities.md","filePath":"backend/common-features/utilities.md"}'),t={name:"backend/common-features/utilities.md"};function e(p,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l("",14)]))}const g=i(t,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/backend_common-features_utilities.md.CIOeqodf.js b/assets/backend_common-features_utilities.md.CIOeqodf.js deleted file mode 100644 index ec3d6b0..0000000 --- a/assets/backend_common-features_utilities.md.CIOeqodf.js +++ /dev/null @@ -1,24 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"유틸리티 클래스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/utilities.md","filePath":"backend/common-features/utilities.md"}'),t={name:"backend/common-features/utilities.md"};function e(p,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l(`

유틸리티 클래스

AxpFramework는 다양한 유틸리티 클래스를 제공합니다.

AxpCommUtil

공통 유틸리티 클래스입니다.

주요 메서드

java
@Autowired
-private AxpCommUtil util;
-
-// 빈 값 확인
-boolean isEmpty = util.isEmpty(value);
-
-// 현재 시간
-String nowTime = util.getNowTime();
-
-// 클라이언트 IP
-String ip = util.getClientIp(request);
-
-// User Agent
-String userAgent = util.getUserAgent(request);

AxpCommValidationUtil

유효성 검증 유틸리티입니다.

java
@Autowired
-private AxpCommValidationUtil validationUtil;
-
-// 이메일 검증
-boolean isValid = validationUtil.isValidEmail(email);
-
-// 전화번호 검증
-boolean isValid = validationUtil.isValidPhone(phone);

AxpCommPaging

페이징 처리 유틸리티입니다.

java
@Autowired
-private AxpCommPaging paging;
-
-Map<String, Object> pageInfo = paging.getPageInfo(currentPage, totalCount, pageSize);

다음 단계

`,14)]))}const g=i(t,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/backend_common-features_utilities.md.CIOeqodf.lean.js b/assets/backend_common-features_utilities.md.CIOeqodf.lean.js deleted file mode 100644 index 685d01e..0000000 --- a/assets/backend_common-features_utilities.md.CIOeqodf.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"유틸리티 클래스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/common-features/utilities.md","filePath":"backend/common-features/utilities.md"}'),t={name:"backend/common-features/utilities.md"};function e(p,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l("",14)]))}const g=i(t,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/backend_configuration_application.md.Br20Vuzf.js b/assets/backend_configuration_application.md.Br20Vuzf.js deleted file mode 100644 index 5ca228d..0000000 --- a/assets/backend_configuration_application.md.Br20Vuzf.js +++ /dev/null @@ -1,57 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"애플리케이션 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/application.md","filePath":"backend/configuration/application.md"}'),p={name:"backend/configuration/application.md"};function t(h,s,e,k,r,d){return n(),i("div",null,s[0]||(s[0]=[l(`

애플리케이션 설정

애플리케이션 설정은 YAML 형식으로 작성되며, 환경별로 분리되어 있습니다.

설정 파일 위치

src/main/resources/
-├── application.yaml                 # 기본 설정
-└── config/
-    ├── application-local.yaml       # 로컬 환경
-    ├── application-dev.yaml         # 개발 환경
-    ├── application-prod.yaml        # 운영 환경
-    └── ai-config.yaml               # AI 설정

기본 설정 (application.yaml)

yaml
spring:
-  application:
-    name: AxpFramework
-  profiles:
-    active: "@spring.profiles.active@"
-  config:
-    import: "optional:config/"

서버 설정

포트 및 컨텍스트

yaml
server:
-  servlet:
-    context-path: /
-    encoding:
-      force: true
-      charset: utf-8
-  port: 8080
-  shutdown: graceful
-  tomcat:
-    max-http-form-post-size: 100MB
-    max-swallow-size: 100MB

JWT 설정

yaml
jwt:
-  secret: U29tZVN1cGVyU2VjcmV0S2V5Rm9ySlBXVC1NeVNlY3JldEtleQ==

주의: 운영 환경에서는 반드시 새로운 시크릿 키를 생성하세요.

RSA 설정

yaml
rsa:
-  private: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCmI2Rk09DaXKzBR3GkbK+33Ye7QZEXx3QfZnMcO7yJOnv3BCO5HYv7fFwqt9Wctu+ZTiuyI3Oqi+PF65/0Y9AdambuWMj2ot+xbm9ipLzIdUcdZGC1XLazMkf6IsepO/xr109e/JEHbFPYmO3Bc6yydl226shGX0H3/nq3uej2w2Z4LcjMaL4qFP9FWZx8nNvzxkHQ2we5les9phYdOtZijcqHvPvzTuPtuA4c+9pFOkjqsEzeck1La3KVlCXb2OFUZ3+dwJHU3pyp9suVNOWk80WVxgtxGJQAAnFfBFCmeOtrOeJ6aXLi8fxAKwdAElhSOIwwW6baAHfvH0Wz3jzdAgMBAAECggEAOZjehsgaSYHEkJNUtiTJ/IvsMQKnqx9GRlaNxLV/BPJGJNqGCfjQ3WR9TYADKfwP7822f2EkCfXKhwTLpP3vmisXuT0Fmt/XfltjeUbUfgiOmYWBs46Ldm+RnYnuP2Eg/0Abb7pPC0xGezp1ftI8Bnjbv30A5sjChZfvcn+c4ONIfA85ogchOL8aSWAqtuj1WmPAHs1fiCbailExuqMZ0mGLYs1g0e0W1zKUqVpWxKchF1rOUmtMAHy0Sqlw+XKSDS4nVxiLTMMxPKM1Jt8Io/nE4j5QmcAAaWExRuvkbokKrCjXAFVj4fIlwFUdxsgqi14yhxbVNLuIj9WtHEnSHwKBgQDlCw7b3dQy8rFQ4CwTaeEii0tIM7xeSwkSYx7BgNgeNcRlhbg6Kl2OVaLmryQhj9VOIFFWXbvK6FIiG0IoBVefit+IYUo8DBYXHsrOHE1eZmdvW2k2uroEAZXTFlcNMRxO3av/nkWr2ldJOEqk9hvc2xfqVEMMjNTqDDhCIqMwwwKBgQC5sQswRitzSqFgEgfrGSuvXW/r8iM/4QLMGNiC5LlWdA9T+p/M0WCaJab43KEC8ZMWq/kH3+AtSYUIZXqKjqQleDN12a1PSQRleolE8iUMRbO4HxfnlC7drZAb1EK0Qbwq61xJE0/EuFLzxIE8SnhylKUtUAcLfKjLEc+1QQIB3wKBgHL+wk8RaODLiMsaQgbdOfOmC/4MO577/WoF6gMtNVS1mg1+vag2bRJxXICFnpZbKLU49J1wIkEVs2b8WJLPW9b2WpSWhDbxuoWRKDGjdBTZRUVbl8+qoIoyYY7BwKMW7SeLlDeat1A5J2nToWaBSivwtGkqNR+v9ZYs3HIYAecRAoGADTqkvmqxW8RcXNjMAZ7IcvToLVoR0tI3/cxjWGftIFCiauw3CEN+a1z1WVN2kRwey4Wy9zGm6fML7D42jbp9zUGUAPhiFXzxOD2Tm/rYUtiAZkSo0lHHSPm9g44KtobcXf5ok7gxfaVYG4/LWT1A+YDHh8PkzJez+supDZO1DecCgYAaKjrJVqScBpXlQ3EHPv5qGyVWwhcSKl9FNkMMIFmJfkIYckWqFqQX/+44EDtCYUFCShoSPuhnre9IVTfmoHBWa/R6CbydFxPYuDHsgDiDI+BMZq0It6rB8NH26gw0CzyxpZxVpI6x3FRWZ/KAJtaLsY8Zewf18C9MXdRYhXlSXg==

CORS 설정

yaml
cors:
-  allowed-origins: >
-    http://localhost:8080
-    ,http://localhost:5173
-    ,https://wbvue.intellicins.com:59443
-  mappings: >
-    /api/**
-    ,/auth/**

Security 설정

제외 URI

yaml
security:
-  excluded-uris: >
-    /api/login/loginCheck
-    ,/api/login/adminLoginCheck
-    ,/api/login/logout
-    ,/api/login/clear
-    ,/api/auth/**
-    ,/report
-  excluded-jwt-uris: >
-    /api/login/loginCheck
-    ,/api/login/adminLoginCheck
-    ,/api/auth/**

파일 업로드 설정

yaml
spring:
-  servlet:
-    multipart:
-      max-file-size: 100MB
-      max-request-size: 100MB

파일 경로 설정

yaml
file:
-  empimg:
-    path: D:\\\\FileUpload\\\\HRMaster\\\\EMP\\\\
-  report:
-    path: D:\\\\FileUpload\\\\JasperReport\\\\
-  path: D:\\\\FileUpload\\\\FCM\\\\COMFiles\\\\

주의: Windows와 Linux의 경로 형식이 다르므로 환경에 맞게 수정하세요.

로깅 설정

yaml
logging:
-  level:
-    org.apache.ibatis: DEBUG
-    axpFramework.common.database.mapper: DEBUG
-  file:
-    name: logs/AxpFramework.log

다음 단계

`,28)]))}const o=a(p,[["render",t]]);export{c as __pageData,o as default}; diff --git a/assets/backend_configuration_application.md.Br20Vuzf.lean.js b/assets/backend_configuration_application.md.Br20Vuzf.lean.js deleted file mode 100644 index d3007a5..0000000 --- a/assets/backend_configuration_application.md.Br20Vuzf.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"애플리케이션 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/application.md","filePath":"backend/configuration/application.md"}'),p={name:"backend/configuration/application.md"};function t(h,s,e,k,r,d){return n(),i("div",null,s[0]||(s[0]=[l("",28)]))}const o=a(p,[["render",t]]);export{c as __pageData,o as default}; diff --git a/assets/backend_configuration_application.md.Dh540A7P.js b/assets/backend_configuration_application.md.Dh540A7P.js new file mode 100644 index 0000000..c116276 --- /dev/null +++ b/assets/backend_configuration_application.md.Dh540A7P.js @@ -0,0 +1,57 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"애플리케이션 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/application.md","filePath":"backend/configuration/application.md"}'),p={name:"backend/configuration/application.md"};function t(h,s,e,k,r,d){return n(),i("div",null,s[0]||(s[0]=[l(`

애플리케이션 설정

애플리케이션 설정은 YAML 형식으로 작성되며, 환경별로 분리되어 있습니다.

설정 파일 위치

src/main/resources/
+├── application.yaml                 # 기본 설정
+└── config/
+    ├── application-local.yaml       # 로컬 환경
+    ├── application-dev.yaml         # 개발 환경
+    ├── application-prod.yaml        # 운영 환경
+    └── ai-config.yaml               # AI 설정

기본 설정 (application.yaml)

yaml
spring:
+  application:
+    name: AxpFramework
+  profiles:
+    active: "@spring.profiles.active@"
+  config:
+    import: "optional:config/"

서버 설정

포트 및 컨텍스트

yaml
server:
+  servlet:
+    context-path: /
+    encoding:
+      force: true
+      charset: utf-8
+  port: 8080
+  shutdown: graceful
+  tomcat:
+    max-http-form-post-size: 100MB
+    max-swallow-size: 100MB

JWT 설정

yaml
jwt:
+  secret: U29tZVN1cGVyU2VjcmV0S2V5Rm9ySlBXVC1NeVNlY3JldEtleQ==

주의: 운영 환경에서는 반드시 새로운 시크릿 키를 생성하세요.

RSA 설정

yaml
rsa:
+  private: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCmI2Rk09DaXKzBR3GkbK+33Ye7QZEXx3QfZnMcO7yJOnv3BCO5HYv7fFwqt9Wctu+ZTiuyI3Oqi+PF65/0Y9AdambuWMj2ot+xbm9ipLzIdUcdZGC1XLazMkf6IsepO/xr109e/JEHbFPYmO3Bc6yydl226shGX0H3/nq3uej2w2Z4LcjMaL4qFP9FWZx8nNvzxkHQ2we5les9phYdOtZijcqHvPvzTuPtuA4c+9pFOkjqsEzeck1La3KVlCXb2OFUZ3+dwJHU3pyp9suVNOWk80WVxgtxGJQAAnFfBFCmeOtrOeJ6aXLi8fxAKwdAElhSOIwwW6baAHfvH0Wz3jzdAgMBAAECggEAOZjehsgaSYHEkJNUtiTJ/IvsMQKnqx9GRlaNxLV/BPJGJNqGCfjQ3WR9TYADKfwP7822f2EkCfXKhwTLpP3vmisXuT0Fmt/XfltjeUbUfgiOmYWBs46Ldm+RnYnuP2Eg/0Abb7pPC0xGezp1ftI8Bnjbv30A5sjChZfvcn+c4ONIfA85ogchOL8aSWAqtuj1WmPAHs1fiCbailExuqMZ0mGLYs1g0e0W1zKUqVpWxKchF1rOUmtMAHy0Sqlw+XKSDS4nVxiLTMMxPKM1Jt8Io/nE4j5QmcAAaWExRuvkbokKrCjXAFVj4fIlwFUdxsgqi14yhxbVNLuIj9WtHEnSHwKBgQDlCw7b3dQy8rFQ4CwTaeEii0tIM7xeSwkSYx7BgNgeNcRlhbg6Kl2OVaLmryQhj9VOIFFWXbvK6FIiG0IoBVefit+IYUo8DBYXHsrOHE1eZmdvW2k2uroEAZXTFlcNMRxO3av/nkWr2ldJOEqk9hvc2xfqVEMMjNTqDDhCIqMwwwKBgQC5sQswRitzSqFgEgfrGSuvXW/r8iM/4QLMGNiC5LlWdA9T+p/M0WCaJab43KEC8ZMWq/kH3+AtSYUIZXqKjqQleDN12a1PSQRleolE8iUMRbO4HxfnlC7drZAb1EK0Qbwq61xJE0/EuFLzxIE8SnhylKUtUAcLfKjLEc+1QQIB3wKBgHL+wk8RaODLiMsaQgbdOfOmC/4MO577/WoF6gMtNVS1mg1+vag2bRJxXICFnpZbKLU49J1wIkEVs2b8WJLPW9b2WpSWhDbxuoWRKDGjdBTZRUVbl8+qoIoyYY7BwKMW7SeLlDeat1A5J2nToWaBSivwtGkqNR+v9ZYs3HIYAecRAoGADTqkvmqxW8RcXNjMAZ7IcvToLVoR0tI3/cxjWGftIFCiauw3CEN+a1z1WVN2kRwey4Wy9zGm6fML7D42jbp9zUGUAPhiFXzxOD2Tm/rYUtiAZkSo0lHHSPm9g44KtobcXf5ok7gxfaVYG4/LWT1A+YDHh8PkzJez+supDZO1DecCgYAaKjrJVqScBpXlQ3EHPv5qGyVWwhcSKl9FNkMMIFmJfkIYckWqFqQX/+44EDtCYUFCShoSPuhnre9IVTfmoHBWa/R6CbydFxPYuDHsgDiDI+BMZq0It6rB8NH26gw0CzyxpZxVpI6x3FRWZ/KAJtaLsY8Zewf18C9MXdRYhXlSXg==

CORS 설정

yaml
cors:
+  allowed-origins: >
+    http://localhost:8080
+    ,http://localhost:5173
+    ,https://wbvue.intellicins.com:59443
+  mappings: >
+    /api/**
+    ,/auth/**

Security 설정

제외 URI

yaml
security:
+  excluded-uris: >
+    /api/login/loginCheck
+    ,/api/login/adminLoginCheck
+    ,/api/login/logout
+    ,/api/login/clear
+    ,/api/auth/**
+    ,/report
+  excluded-jwt-uris: >
+    /api/login/loginCheck
+    ,/api/login/adminLoginCheck
+    ,/api/auth/**

파일 업로드 설정

yaml
spring:
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB

파일 경로 설정

yaml
file:
+  empimg:
+    path: D:\\\\FileUpload\\\\HRMaster\\\\EMP\\\\
+  report:
+    path: D:\\\\FileUpload\\\\JasperReport\\\\
+  path: D:\\\\FileUpload\\\\FCM\\\\COMFiles\\\\

주의: Windows와 Linux의 경로 형식이 다르므로 환경에 맞게 수정하세요.

로깅 설정

yaml
logging:
+  level:
+    org.apache.ibatis: DEBUG
+    axpFramework.common.database.mapper: DEBUG
+  file:
+    name: logs/AxpFramework.log

다음 단계

`,28)]))}const o=a(p,[["render",t]]);export{c as __pageData,o as default}; diff --git a/assets/backend_configuration_application.md.Dh540A7P.lean.js b/assets/backend_configuration_application.md.Dh540A7P.lean.js new file mode 100644 index 0000000..ef2cf2f --- /dev/null +++ b/assets/backend_configuration_application.md.Dh540A7P.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"애플리케이션 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/application.md","filePath":"backend/configuration/application.md"}'),p={name:"backend/configuration/application.md"};function t(h,s,e,k,r,d){return n(),i("div",null,s[0]||(s[0]=[l("",28)]))}const o=a(p,[["render",t]]);export{c as __pageData,o as default}; diff --git a/assets/backend_configuration_datasource.md.CPiWehhC.js b/assets/backend_configuration_datasource.md.CPiWehhC.js new file mode 100644 index 0000000..af8319e --- /dev/null +++ b/assets/backend_configuration_datasource.md.CPiWehhC.js @@ -0,0 +1,32 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"데이터소스 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/datasource.md","filePath":"backend/configuration/datasource.md"}'),l={name:"backend/configuration/datasource.md"};function e(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

데이터소스 설정

AxpFramework는 다중 데이터베이스를 지원하며, 환경 설정을 통해 데이터베이스 타입을 선택할 수 있습니다.

데이터베이스 타입 설정

application-dev.yaml에서 데이터베이스 타입을 설정합니다:

yaml
app:
+  datasource:
+    type: tibero  # tibero, oracle, postgres 중 선택

Tibero 설정

기본 설정

yaml
spring:
+  datasource:
+    tibero:
+      jdbc-url: jdbc:tibero:thin:@localhost:9629:INTDB
+      driver-class-name: com.tmax.tibero.jdbc.TbDriver
+      username: your_username
+      password: your_password

HikariCP 설정

java
dataSource.setMinimumIdle(10);
+dataSource.setMaximumPoolSize(50);
+dataSource.setConnectionTestQuery("SELECT 1 FROM DUAL");
+dataSource.setConnectionTimeout(120000);
+dataSource.setValidationTimeout(10000);

Oracle 설정

yaml
spring:
+  datasource:
+    oracle:
+      jdbc-url: jdbc:oracle:thin:@localhost:1521:XE
+      driver-class-name: oracle.jdbc.OracleDriver
+      username: your_username
+      password: your_password

PostgreSQL 설정

yaml
spring:
+  datasource:
+    postgres:
+      jdbc-url: jdbc:postgresql://localhost:5432/your_database
+      username: your_username
+      password: your_password
+      driver-class-name: org.postgresql.Driver

AxpDataSourceConfig

데이터베이스 타입에 따라 자동으로 적절한 DataSource를 생성합니다.

조건부 빈 생성

java
@Configuration
+@ConditionalOnProperty(prefix = "app.datasource", name = "type", havingValue = "tibero")
+static class TiberoDataSourceConfiguration {
+    // Tibero 설정
+}

생성되는 Bean

MyBatis 설정

DB별 설정 파일

각 데이터베이스마다 별도의 MyBatis 설정 파일을 사용합니다:

매퍼 파일 스캔

모든 매퍼 XML 파일은 다음 경로에서 자동으로 스캔됩니다:

java
factoryBean.setMapperLocations(
+    new PathMatchingResourcePatternResolver()
+        .getResources("classpath:/mapper/**/*.xml")
+);

다음 단계

`,29)]))}const c=i(l,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/backend_configuration_datasource.md.CPiWehhC.lean.js b/assets/backend_configuration_datasource.md.CPiWehhC.lean.js new file mode 100644 index 0000000..760ffcc --- /dev/null +++ b/assets/backend_configuration_datasource.md.CPiWehhC.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"데이터소스 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/datasource.md","filePath":"backend/configuration/datasource.md"}'),l={name:"backend/configuration/datasource.md"};function e(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",29)]))}const c=i(l,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/backend_configuration_datasource.md.Ckfam7vd.js b/assets/backend_configuration_datasource.md.Ckfam7vd.js deleted file mode 100644 index 6dbf2c6..0000000 --- a/assets/backend_configuration_datasource.md.Ckfam7vd.js +++ /dev/null @@ -1,32 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"데이터소스 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/datasource.md","filePath":"backend/configuration/datasource.md"}'),l={name:"backend/configuration/datasource.md"};function e(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

데이터소스 설정

AxpFramework는 다중 데이터베이스를 지원하며, 환경 설정을 통해 데이터베이스 타입을 선택할 수 있습니다.

데이터베이스 타입 설정

application-dev.yaml에서 데이터베이스 타입을 설정합니다:

yaml
app:
-  datasource:
-    type: tibero  # tibero, oracle, postgres 중 선택

Tibero 설정

기본 설정

yaml
spring:
-  datasource:
-    tibero:
-      jdbc-url: jdbc:tibero:thin:@localhost:9629:INTDB
-      driver-class-name: com.tmax.tibero.jdbc.TbDriver
-      username: your_username
-      password: your_password

HikariCP 설정

java
dataSource.setMinimumIdle(10);
-dataSource.setMaximumPoolSize(50);
-dataSource.setConnectionTestQuery("SELECT 1 FROM DUAL");
-dataSource.setConnectionTimeout(120000);
-dataSource.setValidationTimeout(10000);

Oracle 설정

yaml
spring:
-  datasource:
-    oracle:
-      jdbc-url: jdbc:oracle:thin:@localhost:1521:XE
-      driver-class-name: oracle.jdbc.OracleDriver
-      username: your_username
-      password: your_password

PostgreSQL 설정

yaml
spring:
-  datasource:
-    postgres:
-      jdbc-url: jdbc:postgresql://localhost:5432/your_database
-      username: your_username
-      password: your_password
-      driver-class-name: org.postgresql.Driver

AxpDataSourceConfig

데이터베이스 타입에 따라 자동으로 적절한 DataSource를 생성합니다.

조건부 빈 생성

java
@Configuration
-@ConditionalOnProperty(prefix = "app.datasource", name = "type", havingValue = "tibero")
-static class TiberoDataSourceConfiguration {
-    // Tibero 설정
-}

생성되는 Bean

MyBatis 설정

DB별 설정 파일

각 데이터베이스마다 별도의 MyBatis 설정 파일을 사용합니다:

매퍼 파일 스캔

모든 매퍼 XML 파일은 다음 경로에서 자동으로 스캔됩니다:

java
factoryBean.setMapperLocations(
-    new PathMatchingResourcePatternResolver()
-        .getResources("classpath:/mapper/**/*.xml")
-);

다음 단계

`,29)]))}const c=i(l,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/backend_configuration_datasource.md.Ckfam7vd.lean.js b/assets/backend_configuration_datasource.md.Ckfam7vd.lean.js deleted file mode 100644 index 441d69b..0000000 --- a/assets/backend_configuration_datasource.md.Ckfam7vd.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"데이터소스 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/datasource.md","filePath":"backend/configuration/datasource.md"}'),l={name:"backend/configuration/datasource.md"};function e(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",29)]))}const c=i(l,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/backend_configuration_maven.md.DAlYtNz9.js b/assets/backend_configuration_maven.md.DAlYtNz9.js new file mode 100644 index 0000000..db1cb7b --- /dev/null +++ b/assets/backend_configuration_maven.md.DAlYtNz9.js @@ -0,0 +1,57 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Maven 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/maven.md","filePath":"backend/configuration/maven.md"}'),l={name:"backend/configuration/maven.md"};function h(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

Maven 설정

AxpFramework는 Maven을 빌드 도구로 사용합니다.

pom.xml 구조

기본 정보

xml
<groupId>com.itl</groupId>
+<artifactId>AxpFramework</artifactId>
+<version>0.0.1-SNAPSHOT</version>
+<packaging>war</packaging>

Spring Boot Parent

xml
<parent>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-parent</artifactId>
+    <version>3.2.5</version>
+</parent>

Java 버전

xml
<properties>
+    <java.version>17</java.version>
+</properties>

프로파일 설정

프로파일 정의

xml
<profiles>
+    <profile>
+        <id>local</id>
+        <properties>
+            <spring.profiles.active>local</spring.profiles.active>
+        </properties>
+    </profile>
+    <profile>
+        <id>dev</id>
+        <properties>
+            <spring.profiles.active>dev</spring.profiles.active>
+        </properties>
+    </profile>
+    <profile>
+        <id>prod</id>
+        <properties>
+            <spring.profiles.active>prod</spring.profiles.active>
+        </properties>
+    </profile>
+</profiles>

프로파일 사용

bash
# 로컬 환경
+mvn clean install -Plocal
+
+# 개발 환경
+mvn clean install -Pdev
+
+# 운영 환경
+mvn clean install -Pprod

주요 의존성

Spring Boot Starters

데이터베이스

기타

빌드 플러그인

Spring Boot Maven Plugin

xml
<plugin>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-maven-plugin</artifactId>
+    <configuration>
+        <includeSystemScope>true</includeSystemScope>
+        <mainClass>axpFramework.AxpBootApplication</mainClass>
+    </configuration>
+</plugin>

Maven War Plugin

xml
<plugin>
+    <groupId>org.apache.maven.plugins</groupId>
+    <artifactId>maven-war-plugin</artifactId>
+    <configuration>
+        <webResources>
+            <resource>
+                <directory>\${basedir}/src/main/resources/lib</directory>
+                <targetPath>WEB-INF/lib</targetPath>
+                <includes>
+                    <include>*.jar</include>
+                </includes>
+            </resource>
+        </webResources>
+    </configuration>
+</plugin>

빌드 명령어

개발 환경 빌드

bash
mvn clean install -Pdev

WAR 파일 생성

bash
mvn clean package -Pprod

생성된 파일: target/AxpFramework-0.0.1-SNAPSHOT.war

테스트 제외 빌드

bash
mvn clean install -DskipTests

다음 단계

`,36)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_configuration_maven.md.DAlYtNz9.lean.js b/assets/backend_configuration_maven.md.DAlYtNz9.lean.js new file mode 100644 index 0000000..10188e2 --- /dev/null +++ b/assets/backend_configuration_maven.md.DAlYtNz9.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Maven 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/maven.md","filePath":"backend/configuration/maven.md"}'),l={name:"backend/configuration/maven.md"};function h(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",36)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_configuration_maven.md.DGDGD7_w.js b/assets/backend_configuration_maven.md.DGDGD7_w.js deleted file mode 100644 index 744ff47..0000000 --- a/assets/backend_configuration_maven.md.DGDGD7_w.js +++ /dev/null @@ -1,57 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Maven 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/maven.md","filePath":"backend/configuration/maven.md"}'),l={name:"backend/configuration/maven.md"};function h(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

Maven 설정

AxpFramework는 Maven을 빌드 도구로 사용합니다.

pom.xml 구조

기본 정보

xml
<groupId>com.itl</groupId>
-<artifactId>AxpFramework</artifactId>
-<version>0.0.1-SNAPSHOT</version>
-<packaging>war</packaging>

Spring Boot Parent

xml
<parent>
-    <groupId>org.springframework.boot</groupId>
-    <artifactId>spring-boot-starter-parent</artifactId>
-    <version>3.2.5</version>
-</parent>

Java 버전

xml
<properties>
-    <java.version>17</java.version>
-</properties>

프로파일 설정

프로파일 정의

xml
<profiles>
-    <profile>
-        <id>local</id>
-        <properties>
-            <spring.profiles.active>local</spring.profiles.active>
-        </properties>
-    </profile>
-    <profile>
-        <id>dev</id>
-        <properties>
-            <spring.profiles.active>dev</spring.profiles.active>
-        </properties>
-    </profile>
-    <profile>
-        <id>prod</id>
-        <properties>
-            <spring.profiles.active>prod</spring.profiles.active>
-        </properties>
-    </profile>
-</profiles>

프로파일 사용

bash
# 로컬 환경
-mvn clean install -Plocal
-
-# 개발 환경
-mvn clean install -Pdev
-
-# 운영 환경
-mvn clean install -Pprod

주요 의존성

Spring Boot Starters

데이터베이스

기타

빌드 플러그인

Spring Boot Maven Plugin

xml
<plugin>
-    <groupId>org.springframework.boot</groupId>
-    <artifactId>spring-boot-maven-plugin</artifactId>
-    <configuration>
-        <includeSystemScope>true</includeSystemScope>
-        <mainClass>axpFramework.AxpBootApplication</mainClass>
-    </configuration>
-</plugin>

Maven War Plugin

xml
<plugin>
-    <groupId>org.apache.maven.plugins</groupId>
-    <artifactId>maven-war-plugin</artifactId>
-    <configuration>
-        <webResources>
-            <resource>
-                <directory>\${basedir}/src/main/resources/lib</directory>
-                <targetPath>WEB-INF/lib</targetPath>
-                <includes>
-                    <include>*.jar</include>
-                </includes>
-            </resource>
-        </webResources>
-    </configuration>
-</plugin>

빌드 명령어

개발 환경 빌드

bash
mvn clean install -Pdev

WAR 파일 생성

bash
mvn clean package -Pprod

생성된 파일: target/AxpFramework-0.0.1-SNAPSHOT.war

테스트 제외 빌드

bash
mvn clean install -DskipTests

다음 단계

`,36)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_configuration_maven.md.DGDGD7_w.lean.js b/assets/backend_configuration_maven.md.DGDGD7_w.lean.js deleted file mode 100644 index 3d0e48c..0000000 --- a/assets/backend_configuration_maven.md.DGDGD7_w.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Maven 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/maven.md","filePath":"backend/configuration/maven.md"}'),l={name:"backend/configuration/maven.md"};function h(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",36)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_configuration_redis.md.5b5egCnu.js b/assets/backend_configuration_redis.md.5b5egCnu.js deleted file mode 100644 index d972ffa..0000000 --- a/assets/backend_configuration_redis.md.5b5egCnu.js +++ /dev/null @@ -1,47 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Redis 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/redis.md","filePath":"backend/configuration/redis.md"}'),e={name:"backend/configuration/redis.md"};function h(l,s,k,p,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

Redis 설정

AxpFramework는 Redis를 세션 관리, 토큰 저장, 캐시 데이터 관리에 사용합니다.

Redis 연결 설정

application-dev.yaml

yaml
redis:
-  datasource:
-    cache:
-      host: localhost
-      port: 6379
-      password: ""
-      database: 0
-    bizcomp:
-      host: localhost
-      port: 6379
-      password: ""
-      database: 0

AxpRedisConfig

두 개의 Redis 연결을 설정합니다.

캐시용 Redis

java
@Bean(name = "cacheRedisConnectionFactory")
-@Primary
-public RedisConnectionFactory cacheRedisConnectionFactory() {
-    RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
-    config.setHostName(cache.getHost());
-    config.setPort(cache.getPort());
-    config.setDatabase(cache.getDatabase());
-    return new LettuceConnectionFactory(config);
-}

비즈니스 컴포넌트용 Redis

java
@Bean(name = "bizcompRedisConnectionFactory")
-public RedisConnectionFactory bizcompRedisConnectionFactory() {
-    RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
-    config.setHostName(bizcomp.getHost());
-    config.setPort(bizcomp.getPort());
-    config.setDatabase(bizcomp.getDatabase());
-    return new LettuceConnectionFactory(config);
-}

RedisTemplate

캐시용 RedisTemplate

java
@Bean(name = "cacheRedisTemplate")
-public RedisTemplate<String, Object> cacheRedisTemplate(
-    @Qualifier("cacheRedisConnectionFactory") RedisConnectionFactory connectionFactory
-) {
-    return createTemplate(connectionFactory, "cache");
-}

비즈니스 컴포넌트용 RedisTemplate

java
@Bean(name = "bizcompRedisTemplate")
-public RedisTemplate<String, Object> bizcompRedisTemplate(
-    @Qualifier("bizcompRedisConnectionFactory") RedisConnectionFactory connectionFactory
-) {
-    return createTemplate(connectionFactory, "bizcomp");
-}

직렬화 설정

Key 직렬화

java
StringRedisSerializer stringSerializer = new StringRedisSerializer();
-template.setKeySerializer(stringSerializer);
-template.setHashKeySerializer(stringSerializer);

Value 직렬화

java
GenericJackson2JsonRedisSerializer jsonSerializer = 
-    new GenericJackson2JsonRedisSerializer(new ObjectMapper());
-template.setValueSerializer(jsonSerializer);
-template.setHashValueSerializer(jsonSerializer);

Redis 사용 예시

토큰 저장

java
@Autowired
-private AxpCommRedisDbService redisService;
-
-Map<String, Object> result = redisService.setRedisToken(
-    uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
-);

토큰 조회

java
Map<String, Object> token = redisService.getRedisToken(uuid, "rediscache");

토큰 삭제

java
Map<String, Object> result = redisService.delRedisToken(uuid, "rediscache");

다음 단계

`,30)]))}const o=i(e,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_configuration_redis.md.5b5egCnu.lean.js b/assets/backend_configuration_redis.md.5b5egCnu.lean.js deleted file mode 100644 index 582fdfd..0000000 --- a/assets/backend_configuration_redis.md.5b5egCnu.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Redis 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/redis.md","filePath":"backend/configuration/redis.md"}'),e={name:"backend/configuration/redis.md"};function h(l,s,k,p,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",30)]))}const o=i(e,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_configuration_redis.md.Ct3v-dnm.js b/assets/backend_configuration_redis.md.Ct3v-dnm.js new file mode 100644 index 0000000..78312eb --- /dev/null +++ b/assets/backend_configuration_redis.md.Ct3v-dnm.js @@ -0,0 +1,47 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Redis 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/redis.md","filePath":"backend/configuration/redis.md"}'),e={name:"backend/configuration/redis.md"};function h(l,s,k,p,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

Redis 설정

AxpFramework는 Redis를 세션 관리, 토큰 저장, 캐시 데이터 관리에 사용합니다.

Redis 연결 설정

application-dev.yaml

yaml
redis:
+  datasource:
+    cache:
+      host: localhost
+      port: 6379
+      password: ""
+      database: 0
+    bizcomp:
+      host: localhost
+      port: 6379
+      password: ""
+      database: 0

AxpRedisConfig

두 개의 Redis 연결을 설정합니다.

캐시용 Redis

java
@Bean(name = "cacheRedisConnectionFactory")
+@Primary
+public RedisConnectionFactory cacheRedisConnectionFactory() {
+    RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
+    config.setHostName(cache.getHost());
+    config.setPort(cache.getPort());
+    config.setDatabase(cache.getDatabase());
+    return new LettuceConnectionFactory(config);
+}

비즈니스 컴포넌트용 Redis

java
@Bean(name = "bizcompRedisConnectionFactory")
+public RedisConnectionFactory bizcompRedisConnectionFactory() {
+    RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
+    config.setHostName(bizcomp.getHost());
+    config.setPort(bizcomp.getPort());
+    config.setDatabase(bizcomp.getDatabase());
+    return new LettuceConnectionFactory(config);
+}

RedisTemplate

캐시용 RedisTemplate

java
@Bean(name = "cacheRedisTemplate")
+public RedisTemplate<String, Object> cacheRedisTemplate(
+    @Qualifier("cacheRedisConnectionFactory") RedisConnectionFactory connectionFactory
+) {
+    return createTemplate(connectionFactory, "cache");
+}

비즈니스 컴포넌트용 RedisTemplate

java
@Bean(name = "bizcompRedisTemplate")
+public RedisTemplate<String, Object> bizcompRedisTemplate(
+    @Qualifier("bizcompRedisConnectionFactory") RedisConnectionFactory connectionFactory
+) {
+    return createTemplate(connectionFactory, "bizcomp");
+}

직렬화 설정

Key 직렬화

java
StringRedisSerializer stringSerializer = new StringRedisSerializer();
+template.setKeySerializer(stringSerializer);
+template.setHashKeySerializer(stringSerializer);

Value 직렬화

java
GenericJackson2JsonRedisSerializer jsonSerializer = 
+    new GenericJackson2JsonRedisSerializer(new ObjectMapper());
+template.setValueSerializer(jsonSerializer);
+template.setHashValueSerializer(jsonSerializer);

Redis 사용 예시

토큰 저장

java
@Autowired
+private AxpCommRedisDbService redisService;
+
+Map<String, Object> result = redisService.setRedisToken(
+    uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
+);

토큰 조회

java
Map<String, Object> token = redisService.getRedisToken(uuid, "rediscache");

토큰 삭제

java
Map<String, Object> result = redisService.delRedisToken(uuid, "rediscache");

다음 단계

`,30)]))}const o=i(e,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_configuration_redis.md.Ct3v-dnm.lean.js b/assets/backend_configuration_redis.md.Ct3v-dnm.lean.js new file mode 100644 index 0000000..ab3383e --- /dev/null +++ b/assets/backend_configuration_redis.md.Ct3v-dnm.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Redis 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/configuration/redis.md","filePath":"backend/configuration/redis.md"}'),e={name:"backend/configuration/redis.md"};function h(l,s,k,p,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",30)]))}const o=i(e,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_database_common-service.md.BtAYe9Uw.js b/assets/backend_database_common-service.md.BtAYe9Uw.js new file mode 100644 index 0000000..0ecb424 --- /dev/null +++ b/assets/backend_database_common-service.md.BtAYe9Uw.js @@ -0,0 +1,18 @@ +import{_ as i,c as a,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"공통 DB 서비스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/common-service.md","filePath":"backend/database/common-service.md"}'),h={name:"backend/database/common-service.md"};function n(l,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[t(`

공통 DB 서비스

AxpFramework는 데이터베이스 작업을 위한 공통 서비스를 제공합니다.

AxpCommDbService

프로시저 호출을 위한 공통 서비스입니다.

사용 예시

java
@Autowired
+private AxpCommDbService dbService;
+
+Map<String, Object> requestBody = new HashMap<>();
+requestBody.put("procedure", "YOUR_PROCEDURE");
+requestBody.put("params", paramsMap);
+
+Map<String, Object> result = dbService.executeProcedure(requestBody);

지원 데이터베이스

AxpCommRedisDbService

Redis 작업을 위한 공통 서비스입니다.

토큰 저장

java
@Autowired
+private AxpCommRedisDbService redisService;
+
+Map<String, Object> result = redisService.setRedisToken(
+    uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
+);

토큰 조회

java
Map<String, Object> token = redisService.getRedisToken(uuid, "rediscache");

토큰 삭제

java
Map<String, Object> result = redisService.delRedisToken(uuid, "rediscache");

Hash 데이터 조회

java
List<Map<String, Object>> data = redisService.getAllHashesWithScan(
+    "cache", "token:*"
+);

AxpCommDbAdapterService

데이터베이스 어댑터 서비스입니다.

사용 예시

java
@Autowired
+private AxpCommDbAdapterService adapterService;
+
+List<Map<String, Object>> result = adapterService.callOracleTestMapper(requestBody);

다음 단계

`,24)]))}const o=i(h,[["render",n]]);export{c as __pageData,o as default}; diff --git a/assets/backend_database_common-service.md.BtAYe9Uw.lean.js b/assets/backend_database_common-service.md.BtAYe9Uw.lean.js new file mode 100644 index 0000000..1c88b92 --- /dev/null +++ b/assets/backend_database_common-service.md.BtAYe9Uw.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"공통 DB 서비스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/common-service.md","filePath":"backend/database/common-service.md"}'),h={name:"backend/database/common-service.md"};function n(l,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[t("",24)]))}const o=i(h,[["render",n]]);export{c as __pageData,o as default}; diff --git a/assets/backend_database_common-service.md.CaK8z9dj.js b/assets/backend_database_common-service.md.CaK8z9dj.js deleted file mode 100644 index 8112d7a..0000000 --- a/assets/backend_database_common-service.md.CaK8z9dj.js +++ /dev/null @@ -1,18 +0,0 @@ -import{_ as i,c as a,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"공통 DB 서비스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/common-service.md","filePath":"backend/database/common-service.md"}'),h={name:"backend/database/common-service.md"};function n(l,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[t(`

공통 DB 서비스

AxpFramework는 데이터베이스 작업을 위한 공통 서비스를 제공합니다.

AxpCommDbService

프로시저 호출을 위한 공통 서비스입니다.

사용 예시

java
@Autowired
-private AxpCommDbService dbService;
-
-Map<String, Object> requestBody = new HashMap<>();
-requestBody.put("procedure", "YOUR_PROCEDURE");
-requestBody.put("params", paramsMap);
-
-Map<String, Object> result = dbService.executeProcedure(requestBody);

지원 데이터베이스

AxpCommRedisDbService

Redis 작업을 위한 공통 서비스입니다.

토큰 저장

java
@Autowired
-private AxpCommRedisDbService redisService;
-
-Map<String, Object> result = redisService.setRedisToken(
-    uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
-);

토큰 조회

java
Map<String, Object> token = redisService.getRedisToken(uuid, "rediscache");

토큰 삭제

java
Map<String, Object> result = redisService.delRedisToken(uuid, "rediscache");

Hash 데이터 조회

java
List<Map<String, Object>> data = redisService.getAllHashesWithScan(
-    "cache", "token:*"
-);

AxpCommDbAdapterService

데이터베이스 어댑터 서비스입니다.

사용 예시

java
@Autowired
-private AxpCommDbAdapterService adapterService;
-
-List<Map<String, Object>> result = adapterService.callOracleTestMapper(requestBody);

다음 단계

`,24)]))}const o=i(h,[["render",n]]);export{c as __pageData,o as default}; diff --git a/assets/backend_database_common-service.md.CaK8z9dj.lean.js b/assets/backend_database_common-service.md.CaK8z9dj.lean.js deleted file mode 100644 index 474ba8c..0000000 --- a/assets/backend_database_common-service.md.CaK8z9dj.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"공통 DB 서비스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/common-service.md","filePath":"backend/database/common-service.md"}'),h={name:"backend/database/common-service.md"};function n(l,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[t("",24)]))}const o=i(h,[["render",n]]);export{c as __pageData,o as default}; diff --git a/assets/backend_database_mapper-guide.md.CAFR-vkr.js b/assets/backend_database_mapper-guide.md.CAFR-vkr.js new file mode 100644 index 0000000..4c959f7 --- /dev/null +++ b/assets/backend_database_mapper-guide.md.CAFR-vkr.js @@ -0,0 +1,56 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Mapper 작성 가이드","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/mapper-guide.md","filePath":"backend/database/mapper-guide.md"}'),h={name:"backend/database/mapper-guide.md"};function l(p,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`

Mapper 작성 가이드

MyBatis Mapper를 작성하는 방법을 설명합니다.

Mapper 인터페이스

기본 구조

java
package ess.com.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface EssComMapper {
+    List<Map<String, Object>> selectList(Map<String, Object> param);
+    int insert(Map<String, Object> param);
+    int update(Map<String, Object> param);
+    int delete(Map<String, Object> param);
+}

XML 매퍼 파일

파일 위치

src/main/resources/mapper/ess/com/EssComMapper.xml

기본 구조

xml
<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ess.com.mapper.EssComMapper">
+    
+    <select id="selectList" resultType="map">
+        SELECT 
+            column1,
+            column2
+        FROM table_name
+        WHERE condition = #{param}
+    </select>
+    
+</mapper>

프로시저 호출

Tibero/Oracle

xml
<select id="callProcedure" statementType="CALLABLE" resultType="map">
+    { CALL PROCEDURE_NAME(
+        #{param1, mode=IN, jdbcType=VARCHAR},
+        #{param2, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=resultMap}
+    ) }
+</select>
+
+<resultMap id="resultMap" type="map">
+    <result column="COLUMN1" property="column1"/>
+    <result column="COLUMN2" property="column2"/>
+</resultMap>

PostgreSQL

xml
<select id="callProcedure" statementType="CALLABLE" resultType="map">
+    { CALL PROCEDURE_NAME(
+        #{param1, mode=IN, jdbcType=VARCHAR}
+    ) }
+</select>

동적 SQL

if

xml
<select id="selectList" resultType="map">
+    SELECT * FROM table
+    <where>
+        <if test="param1 != null">
+            AND column1 = #{param1}
+        </if>
+        <if test="param2 != null">
+            AND column2 = #{param2}
+        </if>
+    </where>
+</select>

foreach

xml
<select id="selectList" resultType="map">
+    SELECT * FROM table
+    WHERE id IN
+    <foreach collection="ids" item="id" open="(" separator="," close=")">
+        #{id}
+    </foreach>
+</select>

다음 단계

`,22)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/backend_database_mapper-guide.md.CAFR-vkr.lean.js b/assets/backend_database_mapper-guide.md.CAFR-vkr.lean.js new file mode 100644 index 0000000..1c62fc5 --- /dev/null +++ b/assets/backend_database_mapper-guide.md.CAFR-vkr.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Mapper 작성 가이드","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/mapper-guide.md","filePath":"backend/database/mapper-guide.md"}'),h={name:"backend/database/mapper-guide.md"};function l(p,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n("",22)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/backend_database_mapper-guide.md.DoAnw811.js b/assets/backend_database_mapper-guide.md.DoAnw811.js deleted file mode 100644 index 3e899be..0000000 --- a/assets/backend_database_mapper-guide.md.DoAnw811.js +++ /dev/null @@ -1,56 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Mapper 작성 가이드","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/mapper-guide.md","filePath":"backend/database/mapper-guide.md"}'),h={name:"backend/database/mapper-guide.md"};function l(p,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`

Mapper 작성 가이드

MyBatis Mapper를 작성하는 방법을 설명합니다.

Mapper 인터페이스

기본 구조

java
package ess.com.mapper;
-
-import org.apache.ibatis.annotations.Mapper;
-import java.util.List;
-import java.util.Map;
-
-@Mapper
-public interface EssComMapper {
-    List<Map<String, Object>> selectList(Map<String, Object> param);
-    int insert(Map<String, Object> param);
-    int update(Map<String, Object> param);
-    int delete(Map<String, Object> param);
-}

XML 매퍼 파일

파일 위치

src/main/resources/mapper/ess/com/EssComMapper.xml

기본 구조

xml
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="ess.com.mapper.EssComMapper">
-    
-    <select id="selectList" resultType="map">
-        SELECT 
-            column1,
-            column2
-        FROM table_name
-        WHERE condition = #{param}
-    </select>
-    
-</mapper>

프로시저 호출

Tibero/Oracle

xml
<select id="callProcedure" statementType="CALLABLE" resultType="map">
-    { CALL PROCEDURE_NAME(
-        #{param1, mode=IN, jdbcType=VARCHAR},
-        #{param2, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=resultMap}
-    ) }
-</select>
-
-<resultMap id="resultMap" type="map">
-    <result column="COLUMN1" property="column1"/>
-    <result column="COLUMN2" property="column2"/>
-</resultMap>

PostgreSQL

xml
<select id="callProcedure" statementType="CALLABLE" resultType="map">
-    { CALL PROCEDURE_NAME(
-        #{param1, mode=IN, jdbcType=VARCHAR}
-    ) }
-</select>

동적 SQL

if

xml
<select id="selectList" resultType="map">
-    SELECT * FROM table
-    <where>
-        <if test="param1 != null">
-            AND column1 = #{param1}
-        </if>
-        <if test="param2 != null">
-            AND column2 = #{param2}
-        </if>
-    </where>
-</select>

foreach

xml
<select id="selectList" resultType="map">
-    SELECT * FROM table
-    WHERE id IN
-    <foreach collection="ids" item="id" open="(" separator="," close=")">
-        #{id}
-    </foreach>
-</select>

다음 단계

`,22)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/backend_database_mapper-guide.md.DoAnw811.lean.js b/assets/backend_database_mapper-guide.md.DoAnw811.lean.js deleted file mode 100644 index 6cd326c..0000000 --- a/assets/backend_database_mapper-guide.md.DoAnw811.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Mapper 작성 가이드","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/mapper-guide.md","filePath":"backend/database/mapper-guide.md"}'),h={name:"backend/database/mapper-guide.md"};function l(p,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n("",22)]))}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/backend_database_mybatis.md.Br9emqCa.js b/assets/backend_database_mybatis.md.Br9emqCa.js new file mode 100644 index 0000000..f6cc6be --- /dev/null +++ b/assets/backend_database_mybatis.md.Br9emqCa.js @@ -0,0 +1,33 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"MyBatis 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/mybatis.md","filePath":"backend/database/mybatis.md"}'),l={name:"backend/database/mybatis.md"};function e(p,s,h,k,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`

MyBatis 설정

AxpFramework는 MyBatis를 사용하여 데이터베이스와 통신합니다.

MapperScan 설정

java
@MapperScan(
+    basePackages = {
+        "axpFramework.common.database.mapper",
+        "ess.com.mapper"
+    },
+    sqlSessionFactoryRef = "sqlSessionFactory",
+    sqlSessionTemplateRef = "sqlSessionTemplate"
+)

DB별 설정 파일

각 데이터베이스마다 별도의 MyBatis 설정 파일을 사용합니다:

매퍼 파일 위치

모든 매퍼 XML 파일은 다음 경로에서 자동으로 스캔됩니다:

classpath:/mapper/**/*.xml

Mapper 인터페이스 작성

java
@Mapper
+public interface EssComMapper {
+    List<Map<String, Object>> selectList(Map<String, Object> param);
+}

XML 매퍼 작성

xml
<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ess.com.mapper.EssComMapper">
+    <select id="selectList" resultType="map">
+        SELECT * FROM table
+        WHERE condition = #{param}
+    </select>
+</mapper>

프로시저 호출

Tibero

xml
<select id="callProcedure" statementType="CALLABLE">
+    { CALL PROCEDURE_NAME(
+        #{param1, mode=IN, jdbcType=VARCHAR},
+        #{param2, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=resultMap}
+    ) }
+</select>

Oracle

xml
<select id="callProcedure" statementType="CALLABLE">
+    { CALL PROCEDURE_NAME(
+        #{param1, mode=IN, jdbcType=VARCHAR},
+        #{param2, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=resultMap}
+    ) }
+</select>

PostgreSQL

xml
<select id="callProcedure" statementType="CALLABLE">
+    { CALL PROCEDURE_NAME(
+        #{param1, mode=IN, jdbcType=VARCHAR}
+    ) }
+</select>

다음 단계

`,23)]))}const g=i(l,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/backend_database_mybatis.md.Br9emqCa.lean.js b/assets/backend_database_mybatis.md.Br9emqCa.lean.js new file mode 100644 index 0000000..f7bb2f5 --- /dev/null +++ b/assets/backend_database_mybatis.md.Br9emqCa.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"MyBatis 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/mybatis.md","filePath":"backend/database/mybatis.md"}'),l={name:"backend/database/mybatis.md"};function e(p,s,h,k,E,r){return t(),a("div",null,s[0]||(s[0]=[n("",23)]))}const g=i(l,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/backend_database_mybatis.md.DpD_xpC5.js b/assets/backend_database_mybatis.md.DpD_xpC5.js deleted file mode 100644 index 87f9e24..0000000 --- a/assets/backend_database_mybatis.md.DpD_xpC5.js +++ /dev/null @@ -1,33 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"MyBatis 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/mybatis.md","filePath":"backend/database/mybatis.md"}'),l={name:"backend/database/mybatis.md"};function e(p,s,h,k,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`

MyBatis 설정

AxpFramework는 MyBatis를 사용하여 데이터베이스와 통신합니다.

MapperScan 설정

java
@MapperScan(
-    basePackages = {
-        "axpFramework.common.database.mapper",
-        "ess.com.mapper"
-    },
-    sqlSessionFactoryRef = "sqlSessionFactory",
-    sqlSessionTemplateRef = "sqlSessionTemplate"
-)

DB별 설정 파일

각 데이터베이스마다 별도의 MyBatis 설정 파일을 사용합니다:

매퍼 파일 위치

모든 매퍼 XML 파일은 다음 경로에서 자동으로 스캔됩니다:

classpath:/mapper/**/*.xml

Mapper 인터페이스 작성

java
@Mapper
-public interface EssComMapper {
-    List<Map<String, Object>> selectList(Map<String, Object> param);
-}

XML 매퍼 작성

xml
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="ess.com.mapper.EssComMapper">
-    <select id="selectList" resultType="map">
-        SELECT * FROM table
-        WHERE condition = #{param}
-    </select>
-</mapper>

프로시저 호출

Tibero

xml
<select id="callProcedure" statementType="CALLABLE">
-    { CALL PROCEDURE_NAME(
-        #{param1, mode=IN, jdbcType=VARCHAR},
-        #{param2, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=resultMap}
-    ) }
-</select>

Oracle

xml
<select id="callProcedure" statementType="CALLABLE">
-    { CALL PROCEDURE_NAME(
-        #{param1, mode=IN, jdbcType=VARCHAR},
-        #{param2, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=resultMap}
-    ) }
-</select>

PostgreSQL

xml
<select id="callProcedure" statementType="CALLABLE">
-    { CALL PROCEDURE_NAME(
-        #{param1, mode=IN, jdbcType=VARCHAR}
-    ) }
-</select>

다음 단계

`,23)]))}const g=i(l,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/backend_database_mybatis.md.DpD_xpC5.lean.js b/assets/backend_database_mybatis.md.DpD_xpC5.lean.js deleted file mode 100644 index a9c75c4..0000000 --- a/assets/backend_database_mybatis.md.DpD_xpC5.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"MyBatis 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/database/mybatis.md","filePath":"backend/database/mybatis.md"}'),l={name:"backend/database/mybatis.md"};function e(p,s,h,k,E,r){return t(),a("div",null,s[0]||(s[0]=[n("",23)]))}const g=i(l,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/backend_deployment_build.md.BThngNd5.js b/assets/backend_deployment_build.md.BThngNd5.js deleted file mode 100644 index 8d7434e..0000000 --- a/assets/backend_deployment_build.md.BThngNd5.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as s,o as i,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"Maven 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"backend/deployment/build.md","filePath":"backend/deployment/build.md"}'),n={name:"backend/deployment/build.md"};function l(h,a,d,r,p,o){return i(),s("div",null,a[0]||(a[0]=[t('

Maven 빌드

프로젝트를 빌드하는 방법을 설명합니다.

개발 환경 빌드

bash
mvn clean install -Pdev

WAR 파일 생성

bash
mvn clean package -Pprod

생성된 파일: target/AxpFramework-0.0.1-SNAPSHOT.war

다음 단계

',9)]))}const b=e(n,[["render",l]]);export{k as __pageData,b as default}; diff --git a/assets/backend_deployment_build.md.BThngNd5.lean.js b/assets/backend_deployment_build.md.BThngNd5.lean.js deleted file mode 100644 index d00a131..0000000 --- a/assets/backend_deployment_build.md.BThngNd5.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as s,o as i,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"Maven 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"backend/deployment/build.md","filePath":"backend/deployment/build.md"}'),n={name:"backend/deployment/build.md"};function l(h,a,d,r,p,o){return i(),s("div",null,a[0]||(a[0]=[t("",9)]))}const b=e(n,[["render",l]]);export{k as __pageData,b as default}; diff --git a/assets/backend_deployment_build.md.Bk9eyclu.js b/assets/backend_deployment_build.md.Bk9eyclu.js new file mode 100644 index 0000000..6ab5b0e --- /dev/null +++ b/assets/backend_deployment_build.md.Bk9eyclu.js @@ -0,0 +1 @@ +import{_ as e,c as s,o as i,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"Maven 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"backend/deployment/build.md","filePath":"backend/deployment/build.md"}'),n={name:"backend/deployment/build.md"};function l(h,a,d,r,p,o){return i(),s("div",null,a[0]||(a[0]=[t('

Maven 빌드

프로젝트를 빌드하는 방법을 설명합니다.

개발 환경 빌드

bash
mvn clean install -Pdev

WAR 파일 생성

bash
mvn clean package -Pprod

생성된 파일: target/AxpFramework-0.0.1-SNAPSHOT.war

다음 단계

',9)]))}const b=e(n,[["render",l]]);export{k as __pageData,b as default}; diff --git a/assets/backend_deployment_build.md.Bk9eyclu.lean.js b/assets/backend_deployment_build.md.Bk9eyclu.lean.js new file mode 100644 index 0000000..dc2d5c2 --- /dev/null +++ b/assets/backend_deployment_build.md.Bk9eyclu.lean.js @@ -0,0 +1 @@ +import{_ as e,c as s,o as i,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"Maven 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"backend/deployment/build.md","filePath":"backend/deployment/build.md"}'),n={name:"backend/deployment/build.md"};function l(h,a,d,r,p,o){return i(),s("div",null,a[0]||(a[0]=[t("",9)]))}const b=e(n,[["render",l]]);export{k as __pageData,b as default}; diff --git a/assets/backend_deployment_deploy.md.CZIFW9mr.js b/assets/backend_deployment_deploy.md.CZIFW9mr.js deleted file mode 100644 index 8db2929..0000000 --- a/assets/backend_deployment_deploy.md.CZIFW9mr.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o,aG as l}from"./chunks/framework.CrOSaJJH.js";const _=JSON.parse('{"title":"배포 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/deployment/deploy.md","filePath":"backend/deployment/deploy.md"}'),r={name:"backend/deployment/deploy.md"};function i(n,a,d,c,s,m){return o(),t("div",null,a[0]||(a[0]=[l('

배포 설정

WAR 파일을 외부 Tomcat에 배포하는 방법을 설명합니다.

Tomcat 배포

  1. WAR 파일을 webapps 디렉토리에 복사
  2. Tomcat 재시작
  3. 애플리케이션 확인

다음 단계

',6)]))}const h=e(r,[["render",i]]);export{_ as __pageData,h as default}; diff --git a/assets/backend_deployment_deploy.md.CZIFW9mr.lean.js b/assets/backend_deployment_deploy.md.CZIFW9mr.lean.js deleted file mode 100644 index 767d2ed..0000000 --- a/assets/backend_deployment_deploy.md.CZIFW9mr.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o,aG as l}from"./chunks/framework.CrOSaJJH.js";const _=JSON.parse('{"title":"배포 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/deployment/deploy.md","filePath":"backend/deployment/deploy.md"}'),r={name:"backend/deployment/deploy.md"};function i(n,a,d,c,s,m){return o(),t("div",null,a[0]||(a[0]=[l("",6)]))}const h=e(r,[["render",i]]);export{_ as __pageData,h as default}; diff --git a/assets/backend_deployment_deploy.md.D6SVBHfV.js b/assets/backend_deployment_deploy.md.D6SVBHfV.js new file mode 100644 index 0000000..587c7c4 --- /dev/null +++ b/assets/backend_deployment_deploy.md.D6SVBHfV.js @@ -0,0 +1 @@ +import{_ as e,c as t,o,aG as l}from"./chunks/framework.DytOxJW6.js";const _=JSON.parse('{"title":"배포 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/deployment/deploy.md","filePath":"backend/deployment/deploy.md"}'),r={name:"backend/deployment/deploy.md"};function i(n,a,d,c,s,m){return o(),t("div",null,a[0]||(a[0]=[l('

배포 설정

WAR 파일을 외부 Tomcat에 배포하는 방법을 설명합니다.

Tomcat 배포

  1. WAR 파일을 webapps 디렉토리에 복사
  2. Tomcat 재시작
  3. 애플리케이션 확인

다음 단계

',6)]))}const h=e(r,[["render",i]]);export{_ as __pageData,h as default}; diff --git a/assets/backend_deployment_deploy.md.D6SVBHfV.lean.js b/assets/backend_deployment_deploy.md.D6SVBHfV.lean.js new file mode 100644 index 0000000..672ca53 --- /dev/null +++ b/assets/backend_deployment_deploy.md.D6SVBHfV.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o,aG as l}from"./chunks/framework.DytOxJW6.js";const _=JSON.parse('{"title":"배포 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/deployment/deploy.md","filePath":"backend/deployment/deploy.md"}'),r={name:"backend/deployment/deploy.md"};function i(n,a,d,c,s,m){return o(),t("div",null,a[0]||(a[0]=[l("",6)]))}const h=e(r,[["render",i]]);export{_ as __pageData,h as default}; diff --git a/assets/backend_development-guide_api-design.md.B9TyYaeE.js b/assets/backend_development-guide_api-design.md.B9TyYaeE.js deleted file mode 100644 index 19c3d89..0000000 --- a/assets/backend_development-guide_api-design.md.B9TyYaeE.js +++ /dev/null @@ -1,12 +0,0 @@ -import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"REST API 설계 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/api-design.md","filePath":"backend/development-guide/api-design.md"}'),n={name:"backend/development-guide/api-design.md"};function l(h,s,p,k,o,d){return t(),i("div",null,s[0]||(s[0]=[e(`

REST API 설계 규칙

AxpFramework의 REST API 설계 규칙을 설명합니다.

URL 패턴

/api/{모듈명}/{기능}/{액션}

예시:

HTTP 메서드

요청 형식

json
{
-  "param1": "value1",
-  "param2": "value2"
-}

응답 형식

성공

json
{
-  "status": "S",
-  "message": "",
-  "data": { ... }
-}

실패

json
{
-  "status": "E",
-  "message": "에러 메시지",
-  "data": null
-}

다음 단계

`,17)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/backend_development-guide_api-design.md.B9TyYaeE.lean.js b/assets/backend_development-guide_api-design.md.B9TyYaeE.lean.js deleted file mode 100644 index a6ae204..0000000 --- a/assets/backend_development-guide_api-design.md.B9TyYaeE.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"REST API 설계 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/api-design.md","filePath":"backend/development-guide/api-design.md"}'),n={name:"backend/development-guide/api-design.md"};function l(h,s,p,k,o,d){return t(),i("div",null,s[0]||(s[0]=[e("",17)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/backend_development-guide_api-design.md.SIFAK_Ka.js b/assets/backend_development-guide_api-design.md.SIFAK_Ka.js new file mode 100644 index 0000000..49dcdcb --- /dev/null +++ b/assets/backend_development-guide_api-design.md.SIFAK_Ka.js @@ -0,0 +1,12 @@ +import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"REST API 설계 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/api-design.md","filePath":"backend/development-guide/api-design.md"}'),n={name:"backend/development-guide/api-design.md"};function l(h,s,p,k,o,d){return t(),i("div",null,s[0]||(s[0]=[e(`

REST API 설계 규칙

AxpFramework의 REST API 설계 규칙을 설명합니다.

URL 패턴

/api/{모듈명}/{기능}/{액션}

예시:

HTTP 메서드

요청 형식

json
{
+  "param1": "value1",
+  "param2": "value2"
+}

응답 형식

성공

json
{
+  "status": "S",
+  "message": "",
+  "data": { ... }
+}

실패

json
{
+  "status": "E",
+  "message": "에러 메시지",
+  "data": null
+}

다음 단계

`,17)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/backend_development-guide_api-design.md.SIFAK_Ka.lean.js b/assets/backend_development-guide_api-design.md.SIFAK_Ka.lean.js new file mode 100644 index 0000000..b28ee92 --- /dev/null +++ b/assets/backend_development-guide_api-design.md.SIFAK_Ka.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"REST API 설계 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/api-design.md","filePath":"backend/development-guide/api-design.md"}'),n={name:"backend/development-guide/api-design.md"};function l(h,s,p,k,o,d){return t(),i("div",null,s[0]||(s[0]=[e("",17)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/backend_development-guide_authentication.md.D0DsXVfT.js b/assets/backend_development-guide_authentication.md.D0DsXVfT.js new file mode 100644 index 0000000..1ebf35e --- /dev/null +++ b/assets/backend_development-guide_authentication.md.D0DsXVfT.js @@ -0,0 +1,6 @@ +import{_ as i,c as s,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"인증/인가 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/authentication.md","filePath":"backend/development-guide/authentication.md"}'),n={name:"backend/development-guide/authentication.md"};function l(h,a,p,r,d,o){return t(),s("div",null,a[0]||(a[0]=[e(`

인증/인가 처리

인증이 필요한 API를 작성하는 방법을 설명합니다.

JWT 토큰 사용

Authorization 헤더

java
// 클라이언트에서
+headers.set("Authorization", "Bearer " + accessToken);

쿠키

Refresh Token은 HttpOnly 쿠키로 자동 전송됩니다.

제외 URI 설정

인증이 필요 없는 URI를 설정합니다.

yaml
security:
+  excluded-uris: >
+    /api/public/**
+  excluded-jwt-uris: >
+    /api/public/**

다음 단계

`,12)]))}const u=i(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/backend_development-guide_authentication.md.D0DsXVfT.lean.js b/assets/backend_development-guide_authentication.md.D0DsXVfT.lean.js new file mode 100644 index 0000000..4414d97 --- /dev/null +++ b/assets/backend_development-guide_authentication.md.D0DsXVfT.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"인증/인가 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/authentication.md","filePath":"backend/development-guide/authentication.md"}'),n={name:"backend/development-guide/authentication.md"};function l(h,a,p,r,d,o){return t(),s("div",null,a[0]||(a[0]=[e("",12)]))}const u=i(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/backend_development-guide_authentication.md.tHkT7_bk.js b/assets/backend_development-guide_authentication.md.tHkT7_bk.js deleted file mode 100644 index 8e8893d..0000000 --- a/assets/backend_development-guide_authentication.md.tHkT7_bk.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as i,c as s,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"인증/인가 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/authentication.md","filePath":"backend/development-guide/authentication.md"}'),n={name:"backend/development-guide/authentication.md"};function l(h,a,p,r,d,o){return t(),s("div",null,a[0]||(a[0]=[e(`

인증/인가 처리

인증이 필요한 API를 작성하는 방법을 설명합니다.

JWT 토큰 사용

Authorization 헤더

java
// 클라이언트에서
-headers.set("Authorization", "Bearer " + accessToken);

쿠키

Refresh Token은 HttpOnly 쿠키로 자동 전송됩니다.

제외 URI 설정

인증이 필요 없는 URI를 설정합니다.

yaml
security:
-  excluded-uris: >
-    /api/public/**
-  excluded-jwt-uris: >
-    /api/public/**

다음 단계

`,12)]))}const u=i(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/backend_development-guide_authentication.md.tHkT7_bk.lean.js b/assets/backend_development-guide_authentication.md.tHkT7_bk.lean.js deleted file mode 100644 index 51543dc..0000000 --- a/assets/backend_development-guide_authentication.md.tHkT7_bk.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as s,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"인증/인가 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/authentication.md","filePath":"backend/development-guide/authentication.md"}'),n={name:"backend/development-guide/authentication.md"};function l(h,a,p,r,d,o){return t(),s("div",null,a[0]||(a[0]=[e("",12)]))}const u=i(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/backend_development-guide_new-module.md.B9Q-TaWQ.js b/assets/backend_development-guide_new-module.md.B9Q-TaWQ.js deleted file mode 100644 index 1277fb7..0000000 --- a/assets/backend_development-guide_new-module.md.B9Q-TaWQ.js +++ /dev/null @@ -1,63 +0,0 @@ -import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"새로운 모듈 추가","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module.md","filePath":"backend/development-guide/new-module.md"}'),l={name:"backend/development-guide/new-module.md"};function p(t,a,r,o,h,c){return n(),i("div",null,a[0]||(a[0]=[e(`

새로운 모듈 추가

AxpFramework에 새로운 비즈니스 모듈을 추가하는 전체 가이드입니다.

개요

새로운 모듈을 추가할 때는 표준화된 패키지 구조와 개발 패턴을 따라야 합니다. 이 문서는 모듈 생성부터 배포까지의 전체 과정을 안내합니다.

모듈 추가 프로세스

1단계: 모듈 구조 설계

새로운 모듈을 추가하기 전에 다음을 결정해야 합니다:

2단계: 패키지 구조 생성

표준 패키지 구조를 따라 디렉토리를 생성합니다:

src/main/java/
-└── {모듈명}/                        # 예: hr, finance
-    └── {도메인}/                    # 예: payroll, attendance
-        ├── controller/              # REST API 컨트롤러
-        │   └── {모듈명}{도메인}Controller.java
-        ├── service/                 # 비즈니스 로직
-        │   └── {모듈명}{도메인}Service.java
-        ├── mapper/                  # MyBatis Mapper 인터페이스
-        │   └── {모듈명}{도메인}Mapper.java
-        └── utils/                   # 모듈별 유틸리티 (선택)
-            └── {모듈명}{도메인}Util.java

예시:

src/main/java/
-└── hr/
-    └── payroll/
-        ├── controller/
-        │   └── HrPayrollController.java
-        ├── service/
-        │   └── HrPayrollService.java
-        └── mapper/
-            └── HrPayrollMapper.java

3단계: 애플리케이션 설정

ComponentScan 추가

AxpBootApplication.java에 새 모듈을 추가합니다:

java
@SpringBootApplication
-@ComponentScan(basePackages = {"axpFramework", "ess", "fcm", "hr"})  // 새 모듈 추가
-public class AxpBootApplication extends SpringBootServletInitializer {
-    // ...
-}

MapperScan 추가

MyBatis Mapper 인터페이스를 스캔하도록 설정합니다:

java
@MapperScan(
-    basePackages = {
-        "axpFramework.common.database.mapper",
-        "ess.com.mapper",
-        "hr.payroll.mapper"  // 새 모듈 Mapper 추가
-    },
-    sqlSessionFactoryRef = "sqlSessionFactory",
-    sqlSessionTemplateRef = "sqlSessionTemplate"
-)

4단계: 클래스 작성

각 계층별로 클래스를 작성합니다:

  1. 컨트롤러 작성 - REST API 엔드포인트
  2. 서비스 작성 - 비즈니스 로직
  3. Mapper 작성 - 데이터베이스 접근

5단계: 리소스 파일 생성

XML 매퍼 파일

src/main/resources/mapper/{모듈명}/{도메인}/{모듈명}{도메인}Mapper.xml

예시:

src/main/resources/mapper/hr/payroll/HrPayrollMapper.xml

6단계: 설정 파일 추가

필요한 경우 환경별 설정 파일에 모듈 설정을 추가합니다:

표준 패키지 구조

전체 구조

{모듈명}/
-└── {도메인}/
-    ├── controller/                 # REST API 컨트롤러
-    ├── service/                    # 비즈니스 로직
-    ├── mapper/                     # MyBatis Mapper 인터페이스
-    └── utils/                      # 모듈별 유틸리티 (선택)

계층별 역할

Controller

Service

Mapper

개발 가이드

1. 모듈 생성 절차

모듈의 기본 구조를 생성하는 방법:

2. 컨트롤러 작성

REST API 컨트롤러를 작성하는 방법:

주요 규칙:

3. 서비스 작성

비즈니스 로직을 처리하는 서비스를 작성하는 방법:

주요 규칙:

4. Mapper 작성

MyBatis Mapper를 작성하는 방법:

주요 규칙:

5. 설정 파일 추가

모듈에 필요한 설정을 추가하는 방법:

실제 예시: ESS 모듈 구조

현재 프로젝트의 ESS 모듈을 참고할 수 있습니다:

ess/
-├── admin/                          # 관리자 기능
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-├── auth/                           # 인증 기능
-│   ├── controller/
-│   │   └── EssLoginController.java
-│   ├── mapper/
-│   └── service/
-├── com/                            # 공통 기능
-│   ├── controller/
-│   │   └── EssComController.java
-│   ├── mapper/
-│   │   └── EssComMapper.java
-│   ├── service/
-│   │   └── EssComService.java
-│   └── utils/
-└── welfare/                        # 복지 기능
-    ├── controller/
-    ├── mapper/
-    └── service/

공통 프레임워크 활용

새로운 모듈에서는 공통 프레임워크의 기능을 활용할 수 있습니다:

데이터베이스

사용 예시:

java
@Resource(name = "AxpCommDbService")
-private AxpCommDbService axpCommDbService;
-
-Map<String, Object> requestBody = new HashMap<>();
-requestBody.put("procedure", "P_YOUR_PROCEDURE");
-requestBody.put("params", params);
-Map<String, Object> result = axpCommDbService.executeProcedure(requestBody);

인증/보안

유틸리티

API 설계 규칙

새로운 모듈의 API를 설계할 때는 다음 규칙을 따릅니다:

주요 규칙:

인증/인가 처리

새로운 모듈의 API에 인증이 필요한 경우:

설정 방법:

Swagger 문서화

새로운 API를 Swagger에 문서화:

체크리스트

새로운 모듈 추가 시 확인사항:

다음 단계

각 단계별 상세 가이드를 참고하세요:

  1. 모듈 생성 절차 - 기본 구조 생성
  2. 컨트롤러 작성 - REST API 엔드포인트
  3. 서비스 작성 - 비즈니스 로직
  4. Mapper 작성 - 데이터베이스 접근
  5. 설정 파일 추가 - 모듈 설정

참고 자료

`,97)]))}const g=s(l,[["render",p]]);export{k as __pageData,g as default}; diff --git a/assets/backend_development-guide_new-module.md.B9Q-TaWQ.lean.js b/assets/backend_development-guide_new-module.md.B9Q-TaWQ.lean.js deleted file mode 100644 index ed273ab..0000000 --- a/assets/backend_development-guide_new-module.md.B9Q-TaWQ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"새로운 모듈 추가","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module.md","filePath":"backend/development-guide/new-module.md"}'),l={name:"backend/development-guide/new-module.md"};function p(t,a,r,o,h,c){return n(),i("div",null,a[0]||(a[0]=[e("",97)]))}const g=s(l,[["render",p]]);export{k as __pageData,g as default}; diff --git a/assets/backend_development-guide_new-module.md.fslj_pZX.js b/assets/backend_development-guide_new-module.md.fslj_pZX.js new file mode 100644 index 0000000..f186569 --- /dev/null +++ b/assets/backend_development-guide_new-module.md.fslj_pZX.js @@ -0,0 +1,63 @@ +import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"새로운 모듈 추가","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module.md","filePath":"backend/development-guide/new-module.md"}'),l={name:"backend/development-guide/new-module.md"};function p(t,a,r,o,h,c){return n(),i("div",null,a[0]||(a[0]=[e(`

새로운 모듈 추가

AxpFramework에 새로운 비즈니스 모듈을 추가하는 전체 가이드입니다.

개요

새로운 모듈을 추가할 때는 표준화된 패키지 구조와 개발 패턴을 따라야 합니다. 이 문서는 모듈 생성부터 배포까지의 전체 과정을 안내합니다.

모듈 추가 프로세스

1단계: 모듈 구조 설계

새로운 모듈을 추가하기 전에 다음을 결정해야 합니다:

2단계: 패키지 구조 생성

표준 패키지 구조를 따라 디렉토리를 생성합니다:

src/main/java/
+└── {모듈명}/                        # 예: hr, finance
+    └── {도메인}/                    # 예: payroll, attendance
+        ├── controller/              # REST API 컨트롤러
+        │   └── {모듈명}{도메인}Controller.java
+        ├── service/                 # 비즈니스 로직
+        │   └── {모듈명}{도메인}Service.java
+        ├── mapper/                  # MyBatis Mapper 인터페이스
+        │   └── {모듈명}{도메인}Mapper.java
+        └── utils/                   # 모듈별 유틸리티 (선택)
+            └── {모듈명}{도메인}Util.java

예시:

src/main/java/
+└── hr/
+    └── payroll/
+        ├── controller/
+        │   └── HrPayrollController.java
+        ├── service/
+        │   └── HrPayrollService.java
+        └── mapper/
+            └── HrPayrollMapper.java

3단계: 애플리케이션 설정

ComponentScan 추가

AxpBootApplication.java에 새 모듈을 추가합니다:

java
@SpringBootApplication
+@ComponentScan(basePackages = {"axpFramework", "ess", "fcm", "hr"})  // 새 모듈 추가
+public class AxpBootApplication extends SpringBootServletInitializer {
+    // ...
+}

MapperScan 추가

MyBatis Mapper 인터페이스를 스캔하도록 설정합니다:

java
@MapperScan(
+    basePackages = {
+        "axpFramework.common.database.mapper",
+        "ess.com.mapper",
+        "hr.payroll.mapper"  // 새 모듈 Mapper 추가
+    },
+    sqlSessionFactoryRef = "sqlSessionFactory",
+    sqlSessionTemplateRef = "sqlSessionTemplate"
+)

4단계: 클래스 작성

각 계층별로 클래스를 작성합니다:

  1. 컨트롤러 작성 - REST API 엔드포인트
  2. 서비스 작성 - 비즈니스 로직
  3. Mapper 작성 - 데이터베이스 접근

5단계: 리소스 파일 생성

XML 매퍼 파일

src/main/resources/mapper/{모듈명}/{도메인}/{모듈명}{도메인}Mapper.xml

예시:

src/main/resources/mapper/hr/payroll/HrPayrollMapper.xml

6단계: 설정 파일 추가

필요한 경우 환경별 설정 파일에 모듈 설정을 추가합니다:

표준 패키지 구조

전체 구조

{모듈명}/
+└── {도메인}/
+    ├── controller/                 # REST API 컨트롤러
+    ├── service/                    # 비즈니스 로직
+    ├── mapper/                     # MyBatis Mapper 인터페이스
+    └── utils/                      # 모듈별 유틸리티 (선택)

계층별 역할

Controller

Service

Mapper

개발 가이드

1. 모듈 생성 절차

모듈의 기본 구조를 생성하는 방법:

2. 컨트롤러 작성

REST API 컨트롤러를 작성하는 방법:

주요 규칙:

3. 서비스 작성

비즈니스 로직을 처리하는 서비스를 작성하는 방법:

주요 규칙:

4. Mapper 작성

MyBatis Mapper를 작성하는 방법:

주요 규칙:

5. 설정 파일 추가

모듈에 필요한 설정을 추가하는 방법:

실제 예시: ESS 모듈 구조

현재 프로젝트의 ESS 모듈을 참고할 수 있습니다:

ess/
+├── admin/                          # 관리자 기능
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+├── auth/                           # 인증 기능
+│   ├── controller/
+│   │   └── EssLoginController.java
+│   ├── mapper/
+│   └── service/
+├── com/                            # 공통 기능
+│   ├── controller/
+│   │   └── EssComController.java
+│   ├── mapper/
+│   │   └── EssComMapper.java
+│   ├── service/
+│   │   └── EssComService.java
+│   └── utils/
+└── welfare/                        # 복지 기능
+    ├── controller/
+    ├── mapper/
+    └── service/

공통 프레임워크 활용

새로운 모듈에서는 공통 프레임워크의 기능을 활용할 수 있습니다:

데이터베이스

사용 예시:

java
@Resource(name = "AxpCommDbService")
+private AxpCommDbService axpCommDbService;
+
+Map<String, Object> requestBody = new HashMap<>();
+requestBody.put("procedure", "P_YOUR_PROCEDURE");
+requestBody.put("params", params);
+Map<String, Object> result = axpCommDbService.executeProcedure(requestBody);

인증/보안

유틸리티

API 설계 규칙

새로운 모듈의 API를 설계할 때는 다음 규칙을 따릅니다:

주요 규칙:

인증/인가 처리

새로운 모듈의 API에 인증이 필요한 경우:

설정 방법:

Swagger 문서화

새로운 API를 Swagger에 문서화:

체크리스트

새로운 모듈 추가 시 확인사항:

다음 단계

각 단계별 상세 가이드를 참고하세요:

  1. 모듈 생성 절차 - 기본 구조 생성
  2. 컨트롤러 작성 - REST API 엔드포인트
  3. 서비스 작성 - 비즈니스 로직
  4. Mapper 작성 - 데이터베이스 접근
  5. 설정 파일 추가 - 모듈 설정

참고 자료

`,97)]))}const g=s(l,[["render",p]]);export{k as __pageData,g as default}; diff --git a/assets/backend_development-guide_new-module.md.fslj_pZX.lean.js b/assets/backend_development-guide_new-module.md.fslj_pZX.lean.js new file mode 100644 index 0000000..1fa0242 --- /dev/null +++ b/assets/backend_development-guide_new-module.md.fslj_pZX.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"새로운 모듈 추가","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module.md","filePath":"backend/development-guide/new-module.md"}'),l={name:"backend/development-guide/new-module.md"};function p(t,a,r,o,h,c){return n(),i("div",null,a[0]||(a[0]=[e("",97)]))}const g=s(l,[["render",p]]);export{k as __pageData,g as default}; diff --git a/assets/backend_development-guide_new-module_config.md.Cid8TwJT.js b/assets/backend_development-guide_new-module_config.md.Cid8TwJT.js new file mode 100644 index 0000000..02b3628 --- /dev/null +++ b/assets/backend_development-guide_new-module_config.md.Cid8TwJT.js @@ -0,0 +1,3 @@ +import{_ as e,c as i,o as s,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"설정 파일 추가","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/config.md","filePath":"backend/development-guide/new-module/config.md"}'),n={name:"backend/development-guide/new-module/config.md"};function l(o,a,d,h,p,r){return s(),i("div",null,a[0]||(a[0]=[t(`

설정 파일 추가

새로운 모듈에 필요한 설정을 추가하는 방법을 설명합니다.

환경별 설정

application-dev.yaml

yaml
# 새 모듈 설정
+새모듈명:
+  설정키: 설정값

다음 단계

`,7)]))}const m=e(n,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/backend_development-guide_new-module_config.md.Cid8TwJT.lean.js b/assets/backend_development-guide_new-module_config.md.Cid8TwJT.lean.js new file mode 100644 index 0000000..b86ebcb --- /dev/null +++ b/assets/backend_development-guide_new-module_config.md.Cid8TwJT.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as s,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"설정 파일 추가","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/config.md","filePath":"backend/development-guide/new-module/config.md"}'),n={name:"backend/development-guide/new-module/config.md"};function l(o,a,d,h,p,r){return s(),i("div",null,a[0]||(a[0]=[t("",7)]))}const m=e(n,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/backend_development-guide_new-module_config.md.DnpW-8EW.js b/assets/backend_development-guide_new-module_config.md.DnpW-8EW.js deleted file mode 100644 index ddf8a44..0000000 --- a/assets/backend_development-guide_new-module_config.md.DnpW-8EW.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as e,c as i,o as s,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"설정 파일 추가","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/config.md","filePath":"backend/development-guide/new-module/config.md"}'),n={name:"backend/development-guide/new-module/config.md"};function l(o,a,d,h,p,r){return s(),i("div",null,a[0]||(a[0]=[t(`

설정 파일 추가

새로운 모듈에 필요한 설정을 추가하는 방법을 설명합니다.

환경별 설정

application-dev.yaml

yaml
# 새 모듈 설정
-새모듈명:
-  설정키: 설정값

다음 단계

`,7)]))}const m=e(n,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/backend_development-guide_new-module_config.md.DnpW-8EW.lean.js b/assets/backend_development-guide_new-module_config.md.DnpW-8EW.lean.js deleted file mode 100644 index ea4bfd4..0000000 --- a/assets/backend_development-guide_new-module_config.md.DnpW-8EW.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as s,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"설정 파일 추가","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/config.md","filePath":"backend/development-guide/new-module/config.md"}'),n={name:"backend/development-guide/new-module/config.md"};function l(o,a,d,h,p,r){return s(),i("div",null,a[0]||(a[0]=[t("",7)]))}const m=e(n,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/backend_development-guide_new-module_controller.md.C_DJ4yGN.js b/assets/backend_development-guide_new-module_controller.md.C_DJ4yGN.js deleted file mode 100644 index b3fd762..0000000 --- a/assets/backend_development-guide_new-module_controller.md.C_DJ4yGN.js +++ /dev/null @@ -1,33 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"컨트롤러 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/controller.md","filePath":"backend/development-guide/new-module/controller.md"}'),l={name:"backend/development-guide/new-module/controller.md"};function h(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

컨트롤러 작성

컨트롤러를 작성하는 방법을 설명합니다.

기본 구조

java
@RestController
-@RequestMapping(value = "/api/{모듈명}", method = RequestMethod.POST)
-public class {모듈명}Controller extends AxpBaseWebController {
-    
-    private static final Logger LOGGER = LogManager.getLogger({모듈명}Controller.class);
-    
-    private final {모듈명}Service service;
-    
-    public {모듈명}Controller({모듈명}Service service) {
-        this.service = service;
-    }
-    
-    @PostMapping("/endpoint")
-    public ResponseEntity<String> endpoint(
-        @RequestBody Map<String, Object> requestBody
-    ) {
-        try {
-            Object result = service.process(requestBody);
-            return getJSONSuccessResponse(result);
-        } catch (Exception e) {
-            LOGGER.error("오류 발생", e);
-            return getJSONErrorResponse(e.getMessage(), null);
-        }
-    }
-}

응답 형식

성공

json
{
-  "status": "S",
-  "message": "",
-  "data": { ... }
-}

실패

json
{
-  "status": "E",
-  "message": "에러 메시지",
-  "data": null
-}

다음 단계

`,11)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_development-guide_new-module_controller.md.C_DJ4yGN.lean.js b/assets/backend_development-guide_new-module_controller.md.C_DJ4yGN.lean.js deleted file mode 100644 index 34abff9..0000000 --- a/assets/backend_development-guide_new-module_controller.md.C_DJ4yGN.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"컨트롤러 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/controller.md","filePath":"backend/development-guide/new-module/controller.md"}'),l={name:"backend/development-guide/new-module/controller.md"};function h(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",11)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_development-guide_new-module_controller.md.D-gbDROK.js b/assets/backend_development-guide_new-module_controller.md.D-gbDROK.js new file mode 100644 index 0000000..70ee77e --- /dev/null +++ b/assets/backend_development-guide_new-module_controller.md.D-gbDROK.js @@ -0,0 +1,33 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"컨트롤러 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/controller.md","filePath":"backend/development-guide/new-module/controller.md"}'),l={name:"backend/development-guide/new-module/controller.md"};function h(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

컨트롤러 작성

컨트롤러를 작성하는 방법을 설명합니다.

기본 구조

java
@RestController
+@RequestMapping(value = "/api/{모듈명}", method = RequestMethod.POST)
+public class {모듈명}Controller extends AxpBaseWebController {
+    
+    private static final Logger LOGGER = LogManager.getLogger({모듈명}Controller.class);
+    
+    private final {모듈명}Service service;
+    
+    public {모듈명}Controller({모듈명}Service service) {
+        this.service = service;
+    }
+    
+    @PostMapping("/endpoint")
+    public ResponseEntity<String> endpoint(
+        @RequestBody Map<String, Object> requestBody
+    ) {
+        try {
+            Object result = service.process(requestBody);
+            return getJSONSuccessResponse(result);
+        } catch (Exception e) {
+            LOGGER.error("오류 발생", e);
+            return getJSONErrorResponse(e.getMessage(), null);
+        }
+    }
+}

응답 형식

성공

json
{
+  "status": "S",
+  "message": "",
+  "data": { ... }
+}

실패

json
{
+  "status": "E",
+  "message": "에러 메시지",
+  "data": null
+}

다음 단계

`,11)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_development-guide_new-module_controller.md.D-gbDROK.lean.js b/assets/backend_development-guide_new-module_controller.md.D-gbDROK.lean.js new file mode 100644 index 0000000..5dc08b5 --- /dev/null +++ b/assets/backend_development-guide_new-module_controller.md.D-gbDROK.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"컨트롤러 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/controller.md","filePath":"backend/development-guide/new-module/controller.md"}'),l={name:"backend/development-guide/new-module/controller.md"};function h(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",11)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_development-guide_new-module_creation.md.BagBCIbC.js b/assets/backend_development-guide_new-module_creation.md.BagBCIbC.js deleted file mode 100644 index 810ffea..0000000 --- a/assets/backend_development-guide_new-module_creation.md.BagBCIbC.js +++ /dev/null @@ -1,15 +0,0 @@ -import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"모듈 생성 절차","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/creation.md","filePath":"backend/development-guide/new-module/creation.md"}'),p={name:"backend/development-guide/new-module/creation.md"};function t(l,a,h,o,r,c){return n(),i("div",null,a[0]||(a[0]=[e(`

모듈 생성 절차

새로운 비즈니스 모듈을 추가하는 방법을 설명합니다.

1. 패키지 구조 생성

새모듈명/
-├── controller/
-│   └── 새모듈Controller.java
-├── service/
-│   └── 새모듈Service.java
-├── mapper/
-│   └── 새모듈Mapper.java
-└── utils/ (선택)
-    └── 새모듈Util.java

2. ComponentScan 추가

AxpBootApplication.java에 새 모듈을 추가합니다.

java
@ComponentScan(basePackages = {"axpFramework", "ess", "fcm", "새모듈명"})

3. MapperScan 추가

java
@MapperScan(
-    basePackages = {
-        "axpFramework.common.database.mapper",
-        "ess.com.mapper",
-        "새모듈명.mapper"
-    }
-)

4. XML 매퍼 파일 생성

src/main/resources/mapper/새모듈명/새모듈Mapper.xml

다음 단계

`,13)]))}const E=s(p,[["render",t]]);export{d as __pageData,E as default}; diff --git a/assets/backend_development-guide_new-module_creation.md.BagBCIbC.lean.js b/assets/backend_development-guide_new-module_creation.md.BagBCIbC.lean.js deleted file mode 100644 index 8f26acb..0000000 --- a/assets/backend_development-guide_new-module_creation.md.BagBCIbC.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"모듈 생성 절차","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/creation.md","filePath":"backend/development-guide/new-module/creation.md"}'),p={name:"backend/development-guide/new-module/creation.md"};function t(l,a,h,o,r,c){return n(),i("div",null,a[0]||(a[0]=[e("",13)]))}const E=s(p,[["render",t]]);export{d as __pageData,E as default}; diff --git a/assets/backend_development-guide_new-module_creation.md.SNlZXEdG.js b/assets/backend_development-guide_new-module_creation.md.SNlZXEdG.js new file mode 100644 index 0000000..474c145 --- /dev/null +++ b/assets/backend_development-guide_new-module_creation.md.SNlZXEdG.js @@ -0,0 +1,15 @@ +import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"모듈 생성 절차","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/creation.md","filePath":"backend/development-guide/new-module/creation.md"}'),p={name:"backend/development-guide/new-module/creation.md"};function t(l,a,h,o,r,c){return n(),i("div",null,a[0]||(a[0]=[e(`

모듈 생성 절차

새로운 비즈니스 모듈을 추가하는 방법을 설명합니다.

1. 패키지 구조 생성

새모듈명/
+├── controller/
+│   └── 새모듈Controller.java
+├── service/
+│   └── 새모듈Service.java
+├── mapper/
+│   └── 새모듈Mapper.java
+└── utils/ (선택)
+    └── 새모듈Util.java

2. ComponentScan 추가

AxpBootApplication.java에 새 모듈을 추가합니다.

java
@ComponentScan(basePackages = {"axpFramework", "ess", "fcm", "새모듈명"})

3. MapperScan 추가

java
@MapperScan(
+    basePackages = {
+        "axpFramework.common.database.mapper",
+        "ess.com.mapper",
+        "새모듈명.mapper"
+    }
+)

4. XML 매퍼 파일 생성

src/main/resources/mapper/새모듈명/새모듈Mapper.xml

다음 단계

`,13)]))}const E=s(p,[["render",t]]);export{d as __pageData,E as default}; diff --git a/assets/backend_development-guide_new-module_creation.md.SNlZXEdG.lean.js b/assets/backend_development-guide_new-module_creation.md.SNlZXEdG.lean.js new file mode 100644 index 0000000..4257300 --- /dev/null +++ b/assets/backend_development-guide_new-module_creation.md.SNlZXEdG.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"모듈 생성 절차","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/creation.md","filePath":"backend/development-guide/new-module/creation.md"}'),p={name:"backend/development-guide/new-module/creation.md"};function t(l,a,h,o,r,c){return n(),i("div",null,a[0]||(a[0]=[e("",13)]))}const E=s(p,[["render",t]]);export{d as __pageData,E as default}; diff --git a/assets/backend_development-guide_new-module_mapper.md.D1aJj8HV.js b/assets/backend_development-guide_new-module_mapper.md.D1aJj8HV.js new file mode 100644 index 0000000..c99118c --- /dev/null +++ b/assets/backend_development-guide_new-module_mapper.md.D1aJj8HV.js @@ -0,0 +1,11 @@ +import{_ as i,c as a,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Mapper 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/mapper.md","filePath":"backend/development-guide/new-module/mapper.md"}'),p={name:"backend/development-guide/new-module/mapper.md"};function n(l,s,h,k,r,E){return t(),a("div",null,s[0]||(s[0]=[e(`

Mapper 작성

Mapper를 작성하는 방법을 설명합니다.

인터페이스

java
@Mapper
+public interface {모듈명}Mapper {
+    List<Map<String, Object>> selectList(Map<String, Object> param);
+}

XML 매퍼

xml
<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="{모듈명}.mapper.{모듈명}Mapper">
+    <select id="selectList" resultType="map">
+        SELECT * FROM table
+    </select>
+</mapper>

파일 위치

src/main/resources/mapper/{모듈명}/{모듈명}Mapper.xml

다음 단계

`,10)]))}const o=i(p,[["render",n]]);export{g as __pageData,o as default}; diff --git a/assets/backend_development-guide_new-module_mapper.md.D1aJj8HV.lean.js b/assets/backend_development-guide_new-module_mapper.md.D1aJj8HV.lean.js new file mode 100644 index 0000000..b94ce92 --- /dev/null +++ b/assets/backend_development-guide_new-module_mapper.md.D1aJj8HV.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Mapper 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/mapper.md","filePath":"backend/development-guide/new-module/mapper.md"}'),p={name:"backend/development-guide/new-module/mapper.md"};function n(l,s,h,k,r,E){return t(),a("div",null,s[0]||(s[0]=[e("",10)]))}const o=i(p,[["render",n]]);export{g as __pageData,o as default}; diff --git a/assets/backend_development-guide_new-module_mapper.md.Vughb4Kx.js b/assets/backend_development-guide_new-module_mapper.md.Vughb4Kx.js deleted file mode 100644 index 21abeb9..0000000 --- a/assets/backend_development-guide_new-module_mapper.md.Vughb4Kx.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as i,c as a,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Mapper 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/mapper.md","filePath":"backend/development-guide/new-module/mapper.md"}'),p={name:"backend/development-guide/new-module/mapper.md"};function n(l,s,h,k,r,E){return t(),a("div",null,s[0]||(s[0]=[e(`

Mapper 작성

Mapper를 작성하는 방법을 설명합니다.

인터페이스

java
@Mapper
-public interface {모듈명}Mapper {
-    List<Map<String, Object>> selectList(Map<String, Object> param);
-}

XML 매퍼

xml
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="{모듈명}.mapper.{모듈명}Mapper">
-    <select id="selectList" resultType="map">
-        SELECT * FROM table
-    </select>
-</mapper>

파일 위치

src/main/resources/mapper/{모듈명}/{모듈명}Mapper.xml

다음 단계

`,10)]))}const o=i(p,[["render",n]]);export{g as __pageData,o as default}; diff --git a/assets/backend_development-guide_new-module_mapper.md.Vughb4Kx.lean.js b/assets/backend_development-guide_new-module_mapper.md.Vughb4Kx.lean.js deleted file mode 100644 index 69415b6..0000000 --- a/assets/backend_development-guide_new-module_mapper.md.Vughb4Kx.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Mapper 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/mapper.md","filePath":"backend/development-guide/new-module/mapper.md"}'),p={name:"backend/development-guide/new-module/mapper.md"};function n(l,s,h,k,r,E){return t(),a("div",null,s[0]||(s[0]=[e("",10)]))}const o=i(p,[["render",n]]);export{g as __pageData,o as default}; diff --git a/assets/backend_development-guide_new-module_service.md.BTHxiCyT.js b/assets/backend_development-guide_new-module_service.md.BTHxiCyT.js new file mode 100644 index 0000000..dd3cc1b --- /dev/null +++ b/assets/backend_development-guide_new-module_service.md.BTHxiCyT.js @@ -0,0 +1,23 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"서비스 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/service.md","filePath":"backend/development-guide/new-module/service.md"}'),h={name:"backend/development-guide/new-module/service.md"};function k(l,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

서비스 작성

서비스를 작성하는 방법을 설명합니다.

기본 구조

java
@Service
+public class {모듈명}Service {
+    
+    private static final Logger LOGGER = LogManager.getLogger({모듈명}Service.class);
+    
+    @Resource(name = "AxpCommDbService")
+    private AxpCommDbService dbService;
+    
+    public Object process(Map<String, Object> param) {
+        // 프로시저 호출
+        Map<String, Object> requestBody = new HashMap<>();
+        requestBody.put("procedure", "YOUR_PROCEDURE");
+        requestBody.put("params", param);
+        
+        Map<String, Object> result = dbService.executeProcedure(requestBody);
+        return result;
+    }
+}

프로시저 호출

java
Map<String, Object> requestBody = new HashMap<>();
+requestBody.put("procedure", "PROCEDURE_NAME");
+requestBody.put("params", paramsMap);
+
+Map<String, Object> result = dbService.executeProcedure(requestBody);
+List<Map<String, Object>> list = (List<Map<String, Object>>) result.get("CV_1");

다음 단계

`,8)]))}const y=i(h,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/backend_development-guide_new-module_service.md.BTHxiCyT.lean.js b/assets/backend_development-guide_new-module_service.md.BTHxiCyT.lean.js new file mode 100644 index 0000000..d69ae2b --- /dev/null +++ b/assets/backend_development-guide_new-module_service.md.BTHxiCyT.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"서비스 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/service.md","filePath":"backend/development-guide/new-module/service.md"}'),h={name:"backend/development-guide/new-module/service.md"};function k(l,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",8)]))}const y=i(h,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/backend_development-guide_new-module_service.md.N9p-Mefl.js b/assets/backend_development-guide_new-module_service.md.N9p-Mefl.js deleted file mode 100644 index 1b5e8b6..0000000 --- a/assets/backend_development-guide_new-module_service.md.N9p-Mefl.js +++ /dev/null @@ -1,23 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"서비스 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/service.md","filePath":"backend/development-guide/new-module/service.md"}'),h={name:"backend/development-guide/new-module/service.md"};function k(l,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

서비스 작성

서비스를 작성하는 방법을 설명합니다.

기본 구조

java
@Service
-public class {모듈명}Service {
-    
-    private static final Logger LOGGER = LogManager.getLogger({모듈명}Service.class);
-    
-    @Resource(name = "AxpCommDbService")
-    private AxpCommDbService dbService;
-    
-    public Object process(Map<String, Object> param) {
-        // 프로시저 호출
-        Map<String, Object> requestBody = new HashMap<>();
-        requestBody.put("procedure", "YOUR_PROCEDURE");
-        requestBody.put("params", param);
-        
-        Map<String, Object> result = dbService.executeProcedure(requestBody);
-        return result;
-    }
-}

프로시저 호출

java
Map<String, Object> requestBody = new HashMap<>();
-requestBody.put("procedure", "PROCEDURE_NAME");
-requestBody.put("params", paramsMap);
-
-Map<String, Object> result = dbService.executeProcedure(requestBody);
-List<Map<String, Object>> list = (List<Map<String, Object>>) result.get("CV_1");

다음 단계

`,8)]))}const y=i(h,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/backend_development-guide_new-module_service.md.N9p-Mefl.lean.js b/assets/backend_development-guide_new-module_service.md.N9p-Mefl.lean.js deleted file mode 100644 index 84cde80..0000000 --- a/assets/backend_development-guide_new-module_service.md.N9p-Mefl.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"서비스 작성","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/new-module/service.md","filePath":"backend/development-guide/new-module/service.md"}'),h={name:"backend/development-guide/new-module/service.md"};function k(l,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",8)]))}const y=i(h,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/backend_development-guide_swagger.md.byg3AhzZ.js b/assets/backend_development-guide_swagger.md.byg3AhzZ.js new file mode 100644 index 0000000..5884315 --- /dev/null +++ b/assets/backend_development-guide_swagger.md.byg3AhzZ.js @@ -0,0 +1,19 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Swagger/OpenAPI 문서화","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/swagger.md","filePath":"backend/development-guide/swagger.md"}'),t={name:"backend/development-guide/swagger.md"};function k(p,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

Swagger/OpenAPI 문서화

API 문서를 자동으로 생성하는 방법을 설명합니다.

어노테이션 추가

java
@RestController
+@RequestMapping("/api/user")
+@Tag(name = "사용자 관리", description = "사용자 관련 API")
+public class EssComController extends AxpBaseWebController {
+
+    @PostMapping("/bmk/getBmkList")
+    @Operation(summary = "즐겨찾기 목록 조회", description = "사용자의 즐겨찾기 목록을 조회합니다.")
+    @ApiResponses(value = {
+        @ApiResponse(responseCode = "200", description = "성공"),
+        @ApiResponse(responseCode = "401", description = "인증 실패")
+    })
+    public ResponseEntity<String> getBmkList(
+        @RequestBody 
+        @Parameter(description = "조회 파라미터", required = true)
+        Map<String, Object> requestBody
+    ) {
+        // ...
+    }
+}

접근 URL

http://localhost:8080/swagger-ui.html

다음 단계

`,8)]))}const y=i(t,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/backend_development-guide_swagger.md.byg3AhzZ.lean.js b/assets/backend_development-guide_swagger.md.byg3AhzZ.lean.js new file mode 100644 index 0000000..2051913 --- /dev/null +++ b/assets/backend_development-guide_swagger.md.byg3AhzZ.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Swagger/OpenAPI 문서화","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/swagger.md","filePath":"backend/development-guide/swagger.md"}'),t={name:"backend/development-guide/swagger.md"};function k(p,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",8)]))}const y=i(t,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/backend_development-guide_swagger.md.uwpsYqcF.js b/assets/backend_development-guide_swagger.md.uwpsYqcF.js deleted file mode 100644 index 3e2f3be..0000000 --- a/assets/backend_development-guide_swagger.md.uwpsYqcF.js +++ /dev/null @@ -1,19 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Swagger/OpenAPI 문서화","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/swagger.md","filePath":"backend/development-guide/swagger.md"}'),t={name:"backend/development-guide/swagger.md"};function k(p,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

Swagger/OpenAPI 문서화

API 문서를 자동으로 생성하는 방법을 설명합니다.

어노테이션 추가

java
@RestController
-@RequestMapping("/api/user")
-@Tag(name = "사용자 관리", description = "사용자 관련 API")
-public class EssComController extends AxpBaseWebController {
-
-    @PostMapping("/bmk/getBmkList")
-    @Operation(summary = "즐겨찾기 목록 조회", description = "사용자의 즐겨찾기 목록을 조회합니다.")
-    @ApiResponses(value = {
-        @ApiResponse(responseCode = "200", description = "성공"),
-        @ApiResponse(responseCode = "401", description = "인증 실패")
-    })
-    public ResponseEntity<String> getBmkList(
-        @RequestBody 
-        @Parameter(description = "조회 파라미터", required = true)
-        Map<String, Object> requestBody
-    ) {
-        // ...
-    }
-}

접근 URL

http://localhost:8080/swagger-ui.html

다음 단계

`,8)]))}const y=i(t,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/backend_development-guide_swagger.md.uwpsYqcF.lean.js b/assets/backend_development-guide_swagger.md.uwpsYqcF.lean.js deleted file mode 100644 index 2e111fc..0000000 --- a/assets/backend_development-guide_swagger.md.uwpsYqcF.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Swagger/OpenAPI 문서화","description":"","frontmatter":{},"headers":[],"relativePath":"backend/development-guide/swagger.md","filePath":"backend/development-guide/swagger.md"}'),t={name:"backend/development-guide/swagger.md"};function k(p,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",8)]))}const y=i(t,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/backend_getting-started_overview.md.Buo6O1KF.js b/assets/backend_getting-started_overview.md.Buo6O1KF.js deleted file mode 100644 index 02c9b45..0000000 --- a/assets/backend_getting-started_overview.md.Buo6O1KF.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as e,c as i,o as l,aG as r}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"프로젝트 개요","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/overview.md","filePath":"backend/getting-started/overview.md"}'),s={name:"backend/getting-started/overview.md"};function n(t,a,o,p,c,h){return l(),i("div",null,a[0]||(a[0]=[r(`

프로젝트 개요

AxpFramework 소개

AxpFramework는 Spring Boot 기반의 엔터프라이즈 애플리케이션 개발을 위한 통합 프레임워크입니다. 다양한 데이터베이스 지원, 보안 기능, 공통 유틸리티 등을 제공하여 빠르고 안전한 애플리케이션 개발을 지원합니다.

주요 특징

1. 다중 데이터베이스 지원

2. 통합 보안 기능

3. 공통 기능 제공

4. Redis 캐싱

5. 모듈화된 구조

프로젝트 목적

이 프레임워크는 다음과 같은 목적으로 개발되었습니다:

  1. 개발 생산성 향상: 공통 기능을 프레임워크 레벨에서 제공하여 반복 개발 최소화
  2. 일관성 유지: 표준화된 구조와 패턴으로 코드 일관성 보장
  3. 보안 강화: 기본 보안 기능을 내장하여 안전한 애플리케이션 개발 지원
  4. 유지보수성 향상: 모듈화된 구조로 유지보수 용이

기술 스택 요약

프로젝트 구조

AxpFramework/
-├── src/main/java/
-│   ├── axpFramework/          # 공통 프레임워크 모듈
-│   ├── ess/                   # ESS 비즈니스 모듈
-│   └── fcm/                   # FCM 비즈니스 모듈
-└── src/main/resources/
-    ├── config/                # 환경별 설정 파일
-    ├── mapper/                # MyBatis 매퍼 파일
-    └── report/                # 리포트 템플릿

다음 단계

프로젝트를 시작하려면 다음 문서를 참고하세요:

`,24)]))}const g=e(s,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/backend_getting-started_overview.md.Buo6O1KF.lean.js b/assets/backend_getting-started_overview.md.Buo6O1KF.lean.js deleted file mode 100644 index a0bcfec..0000000 --- a/assets/backend_getting-started_overview.md.Buo6O1KF.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as l,aG as r}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"프로젝트 개요","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/overview.md","filePath":"backend/getting-started/overview.md"}'),s={name:"backend/getting-started/overview.md"};function n(t,a,o,p,c,h){return l(),i("div",null,a[0]||(a[0]=[r("",24)]))}const g=e(s,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/backend_getting-started_overview.md.DjJv41zD.js b/assets/backend_getting-started_overview.md.DjJv41zD.js new file mode 100644 index 0000000..c353eef --- /dev/null +++ b/assets/backend_getting-started_overview.md.DjJv41zD.js @@ -0,0 +1,9 @@ +import{_ as e,c as i,o as l,aG as r}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"프로젝트 개요","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/overview.md","filePath":"backend/getting-started/overview.md"}'),s={name:"backend/getting-started/overview.md"};function n(t,a,o,p,c,h){return l(),i("div",null,a[0]||(a[0]=[r(`

프로젝트 개요

AxpFramework 소개

AxpFramework는 Spring Boot 기반의 엔터프라이즈 애플리케이션 개발을 위한 통합 프레임워크입니다. 다양한 데이터베이스 지원, 보안 기능, 공통 유틸리티 등을 제공하여 빠르고 안전한 애플리케이션 개발을 지원합니다.

주요 특징

1. 다중 데이터베이스 지원

2. 통합 보안 기능

3. 공통 기능 제공

4. Redis 캐싱

5. 모듈화된 구조

프로젝트 목적

이 프레임워크는 다음과 같은 목적으로 개발되었습니다:

  1. 개발 생산성 향상: 공통 기능을 프레임워크 레벨에서 제공하여 반복 개발 최소화
  2. 일관성 유지: 표준화된 구조와 패턴으로 코드 일관성 보장
  3. 보안 강화: 기본 보안 기능을 내장하여 안전한 애플리케이션 개발 지원
  4. 유지보수성 향상: 모듈화된 구조로 유지보수 용이

기술 스택 요약

프로젝트 구조

AxpFramework/
+├── src/main/java/
+│   ├── axpFramework/          # 공통 프레임워크 모듈
+│   ├── ess/                   # ESS 비즈니스 모듈
+│   └── fcm/                   # FCM 비즈니스 모듈
+└── src/main/resources/
+    ├── config/                # 환경별 설정 파일
+    ├── mapper/                # MyBatis 매퍼 파일
+    └── report/                # 리포트 템플릿

다음 단계

프로젝트를 시작하려면 다음 문서를 참고하세요:

`,24)]))}const g=e(s,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/backend_getting-started_overview.md.DjJv41zD.lean.js b/assets/backend_getting-started_overview.md.DjJv41zD.lean.js new file mode 100644 index 0000000..6a95d11 --- /dev/null +++ b/assets/backend_getting-started_overview.md.DjJv41zD.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as l,aG as r}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"프로젝트 개요","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/overview.md","filePath":"backend/getting-started/overview.md"}'),s={name:"backend/getting-started/overview.md"};function n(t,a,o,p,c,h){return l(),i("div",null,a[0]||(a[0]=[r("",24)]))}const g=e(s,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/backend_getting-started_project-structure.md.D-q4ax4E.js b/assets/backend_getting-started_project-structure.md.D-q4ax4E.js deleted file mode 100644 index 0dca13e..0000000 --- a/assets/backend_getting-started_project-structure.md.D-q4ax4E.js +++ /dev/null @@ -1,111 +0,0 @@ -import{_ as s,c as n,o as p,aG as i}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/project-structure.md","filePath":"backend/getting-started/project-structure.md"}'),e={name:"backend/getting-started/project-structure.md"};function l(t,a,o,c,r,h){return p(),n("div",null,a[0]||(a[0]=[i(`

프로젝트 구조

이 문서는 AxpFramework 프로젝트의 전체 구조와 각 디렉토리의 역할을 설명합니다.

전체 디렉토리 구조

AxpFramework/
-├── pom.xml                          # Maven 빌드 설정
-├── mvnw, mvnw.cmd                   # Maven Wrapper
-├── src/
-│   ├── main/
-│   │   ├── java/
-│   │   │   ├── axpFramework/        # 공통 프레임워크 모듈
-│   │   │   ├── ess/                 # ESS 비즈니스 모듈
-│   │   │   └── fcm/                 # FCM 비즈니스 모듈
-│   │   └── resources/
-│   │       ├── application.yaml     # 기본 설정 파일
-│   │       ├── config/              # 환경별 설정 파일
-│   │       ├── mapper/              # MyBatis XML 매퍼
-│   │       ├── mapper-config/       # MyBatis 설정 파일
-│   │       ├── report/              # 리포트 템플릿
-│   │       └── lib/                 # 외부 라이브러리
-│   └── test/
-│       ├── java/                    # 테스트 코드
-│       └── resources/               # 테스트 리소스
-└── target/                          # 빌드 결과물

Java 소스 코드 구조

1. 공통 프레임워크 모듈 (axpFramework)

axpFramework/
-├── AxpBootApplication.java          # 메인 애플리케이션 클래스
-├── ai/                              # AI 서비스
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-├── common/                          # 공통 기능
-│   ├── controller/                  # 공통 컨트롤러
-│   ├── database/                    # DB 공통 서비스
-│   │   ├── controller/
-│   │   ├── mapper/
-│   │   └── service/
-│   ├── logging/                     # 로깅 AOP
-│   ├── security/                    # 암호화 유틸리티
-│   ├── token/                       # JWT 인증
-│   └── utils/                       # 공통 유틸리티
-├── config/                          # 설정 클래스
-│   ├── AxpDataSourceConfig.java     # 데이터소스 설정
-│   ├── AxpRedisConfig.java          # Redis 설정
-│   ├── AxpSecurityConfig.java      # Security 설정
-│   └── AxpWebConfig.java            # Web 설정
-├── filter/                          # 필터 클래스
-│   ├── auth/                        # JWT 인증 필터
-│   ├── logging/                    # 로깅 필터
-│   └── security/                    # 보안 필터
-├── file/                            # 파일 관리
-├── mail/                            # 메일 발송
-├── report/                          # 리포트 생성
-└── sms/                             # SMS 발송

2. ESS 비즈니스 모듈 (ess)

ess/
-├── admin/                           # 관리자 기능
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-├── auth/                            # 인증 기능
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-├── com/                             # 공통 기능
-│   ├── controller/
-│   ├── mapper/
-│   ├── service/
-│   └── utils/
-└── welfare/                         # 복지 기능
-    ├── controller/
-    ├── mapper/
-    └── service/

3. FCM 비즈니스 모듈 (fcm)

fcm/
-├── com/                             # 공통 기능
-├── hri/                             # HRI 기능
-└── sys/                             # 시스템 기능

리소스 파일 구조

1. 설정 파일 (resources/config/)

config/
-├── application-dev.yaml            # 개발 환경 설정
-├── application-local.yaml           # 로컬 환경 설정
-├── application-prod.yaml           # 운영 환경 설정
-└── ai-config.yaml                  # AI 서비스 설정

2. MyBatis 매퍼 (resources/mapper/)

mapper/
-├── axpFramework/                   # 공통 프레임워크 매퍼
-│   ├── AxpCommProcMapper.xml
-│   ├── oracle/
-│   ├── postgres/
-│   └── tibero/
-└── ess/                            # ESS 모듈 매퍼
-    └── com/

3. MyBatis 설정 (resources/mapper-config/)

mapper-config/
-├── mybatis-config-tibero.xml       # Tibero 설정
-├── mybatis-config-oracle.xml        # Oracle 설정
-└── mybatis-config-postgresql.xml   # PostgreSQL 설정

4. 리포트 템플릿 (resources/report/)

report/
-├── jasperForms/                    # JasperReports 템플릿 (.jrxml)
-└── jasperfonts/                    # 리포트 폰트

패키지 네이밍 규칙

1. 표준 패키지 구조

각 비즈니스 모듈은 다음 구조를 따릅니다:

{모듈명}/{도메인}/
-├── controller/                     # REST API 컨트롤러
-├── service/                        # 비즈니스 로직
-├── mapper/                        # MyBatis Mapper 인터페이스
-└── utils/                         # 모듈별 유틸리티 (선택)

2. 네이밍 규칙

주요 파일 설명

1. AxpBootApplication.java

Spring Boot 애플리케이션의 진입점입니다.

java
@SpringBootApplication
-@ComponentScan(basePackages = {"axpFramework", "ess", "fcm"})
-@MapperScan(basePackages = {
-    "axpFramework.common.database.mapper",
-    "ess.com.mapper"
-})
-public class AxpBootApplication extends SpringBootServletInitializer {
-    // ...
-}

주요 기능:

2. pom.xml

Maven 빌드 설정 파일입니다.

주요 설정:

3. application.yaml

기본 설정 파일로, 환경별 설정 파일을 import합니다.

yaml
spring:
-  profiles:
-    active: "@spring.profiles.active@"
-  config:
-    import: "optional:config/"

모듈 간 의존성

axpFramework (공통 프레임워크)
-
-    ├── ess (ESS 모듈)
-    └── fcm (FCM 모듈)

새로운 모듈 추가 시 구조

새로운 비즈니스 모듈을 추가할 때는 다음 구조를 따릅니다:

새모듈명/
-├── controller/
-│   └── 새모듈Controller.java
-├── service/
-│   └── 새모듈Service.java
-├── mapper/
-│   └── 새모듈Mapper.java
-└── utils/ (선택)
-    └── 새모듈Util.java

다음 단계

프로젝트 구조를 이해했다면 다음 문서를 참고하세요:

`,48)]))}const g=s(e,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/backend_getting-started_project-structure.md.D-q4ax4E.lean.js b/assets/backend_getting-started_project-structure.md.D-q4ax4E.lean.js deleted file mode 100644 index 2700a28..0000000 --- a/assets/backend_getting-started_project-structure.md.D-q4ax4E.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as n,o as p,aG as i}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/project-structure.md","filePath":"backend/getting-started/project-structure.md"}'),e={name:"backend/getting-started/project-structure.md"};function l(t,a,o,c,r,h){return p(),n("div",null,a[0]||(a[0]=[i("",48)]))}const g=s(e,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/backend_getting-started_project-structure.md.jHFZIBS5.js b/assets/backend_getting-started_project-structure.md.jHFZIBS5.js new file mode 100644 index 0000000..6868566 --- /dev/null +++ b/assets/backend_getting-started_project-structure.md.jHFZIBS5.js @@ -0,0 +1,111 @@ +import{_ as s,c as n,o as p,aG as i}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/project-structure.md","filePath":"backend/getting-started/project-structure.md"}'),e={name:"backend/getting-started/project-structure.md"};function l(t,a,o,c,r,h){return p(),n("div",null,a[0]||(a[0]=[i(`

프로젝트 구조

이 문서는 AxpFramework 프로젝트의 전체 구조와 각 디렉토리의 역할을 설명합니다.

전체 디렉토리 구조

AxpFramework/
+├── pom.xml                          # Maven 빌드 설정
+├── mvnw, mvnw.cmd                   # Maven Wrapper
+├── src/
+│   ├── main/
+│   │   ├── java/
+│   │   │   ├── axpFramework/        # 공통 프레임워크 모듈
+│   │   │   ├── ess/                 # ESS 비즈니스 모듈
+│   │   │   └── fcm/                 # FCM 비즈니스 모듈
+│   │   └── resources/
+│   │       ├── application.yaml     # 기본 설정 파일
+│   │       ├── config/              # 환경별 설정 파일
+│   │       ├── mapper/              # MyBatis XML 매퍼
+│   │       ├── mapper-config/       # MyBatis 설정 파일
+│   │       ├── report/              # 리포트 템플릿
+│   │       └── lib/                 # 외부 라이브러리
+│   └── test/
+│       ├── java/                    # 테스트 코드
+│       └── resources/               # 테스트 리소스
+└── target/                          # 빌드 결과물

Java 소스 코드 구조

1. 공통 프레임워크 모듈 (axpFramework)

axpFramework/
+├── AxpBootApplication.java          # 메인 애플리케이션 클래스
+├── ai/                              # AI 서비스
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+├── common/                          # 공통 기능
+│   ├── controller/                  # 공통 컨트롤러
+│   ├── database/                    # DB 공통 서비스
+│   │   ├── controller/
+│   │   ├── mapper/
+│   │   └── service/
+│   ├── logging/                     # 로깅 AOP
+│   ├── security/                    # 암호화 유틸리티
+│   ├── token/                       # JWT 인증
+│   └── utils/                       # 공통 유틸리티
+├── config/                          # 설정 클래스
+│   ├── AxpDataSourceConfig.java     # 데이터소스 설정
+│   ├── AxpRedisConfig.java          # Redis 설정
+│   ├── AxpSecurityConfig.java      # Security 설정
+│   └── AxpWebConfig.java            # Web 설정
+├── filter/                          # 필터 클래스
+│   ├── auth/                        # JWT 인증 필터
+│   ├── logging/                    # 로깅 필터
+│   └── security/                    # 보안 필터
+├── file/                            # 파일 관리
+├── mail/                            # 메일 발송
+├── report/                          # 리포트 생성
+└── sms/                             # SMS 발송

2. ESS 비즈니스 모듈 (ess)

ess/
+├── admin/                           # 관리자 기능
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+├── auth/                            # 인증 기능
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+├── com/                             # 공통 기능
+│   ├── controller/
+│   ├── mapper/
+│   ├── service/
+│   └── utils/
+└── welfare/                         # 복지 기능
+    ├── controller/
+    ├── mapper/
+    └── service/

3. FCM 비즈니스 모듈 (fcm)

fcm/
+├── com/                             # 공통 기능
+├── hri/                             # HRI 기능
+└── sys/                             # 시스템 기능

리소스 파일 구조

1. 설정 파일 (resources/config/)

config/
+├── application-dev.yaml            # 개발 환경 설정
+├── application-local.yaml           # 로컬 환경 설정
+├── application-prod.yaml           # 운영 환경 설정
+└── ai-config.yaml                  # AI 서비스 설정

2. MyBatis 매퍼 (resources/mapper/)

mapper/
+├── axpFramework/                   # 공통 프레임워크 매퍼
+│   ├── AxpCommProcMapper.xml
+│   ├── oracle/
+│   ├── postgres/
+│   └── tibero/
+└── ess/                            # ESS 모듈 매퍼
+    └── com/

3. MyBatis 설정 (resources/mapper-config/)

mapper-config/
+├── mybatis-config-tibero.xml       # Tibero 설정
+├── mybatis-config-oracle.xml        # Oracle 설정
+└── mybatis-config-postgresql.xml   # PostgreSQL 설정

4. 리포트 템플릿 (resources/report/)

report/
+├── jasperForms/                    # JasperReports 템플릿 (.jrxml)
+└── jasperfonts/                    # 리포트 폰트

패키지 네이밍 규칙

1. 표준 패키지 구조

각 비즈니스 모듈은 다음 구조를 따릅니다:

{모듈명}/{도메인}/
+├── controller/                     # REST API 컨트롤러
+├── service/                        # 비즈니스 로직
+├── mapper/                        # MyBatis Mapper 인터페이스
+└── utils/                         # 모듈별 유틸리티 (선택)

2. 네이밍 규칙

주요 파일 설명

1. AxpBootApplication.java

Spring Boot 애플리케이션의 진입점입니다.

java
@SpringBootApplication
+@ComponentScan(basePackages = {"axpFramework", "ess", "fcm"})
+@MapperScan(basePackages = {
+    "axpFramework.common.database.mapper",
+    "ess.com.mapper"
+})
+public class AxpBootApplication extends SpringBootServletInitializer {
+    // ...
+}

주요 기능:

2. pom.xml

Maven 빌드 설정 파일입니다.

주요 설정:

3. application.yaml

기본 설정 파일로, 환경별 설정 파일을 import합니다.

yaml
spring:
+  profiles:
+    active: "@spring.profiles.active@"
+  config:
+    import: "optional:config/"

모듈 간 의존성

axpFramework (공통 프레임워크)
+
+    ├── ess (ESS 모듈)
+    └── fcm (FCM 모듈)

새로운 모듈 추가 시 구조

새로운 비즈니스 모듈을 추가할 때는 다음 구조를 따릅니다:

새모듈명/
+├── controller/
+│   └── 새모듈Controller.java
+├── service/
+│   └── 새모듈Service.java
+├── mapper/
+│   └── 새모듈Mapper.java
+└── utils/ (선택)
+    └── 새모듈Util.java

다음 단계

프로젝트 구조를 이해했다면 다음 문서를 참고하세요:

`,48)]))}const g=s(e,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/backend_getting-started_project-structure.md.jHFZIBS5.lean.js b/assets/backend_getting-started_project-structure.md.jHFZIBS5.lean.js new file mode 100644 index 0000000..8dc4025 --- /dev/null +++ b/assets/backend_getting-started_project-structure.md.jHFZIBS5.lean.js @@ -0,0 +1 @@ +import{_ as s,c as n,o as p,aG as i}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/project-structure.md","filePath":"backend/getting-started/project-structure.md"}'),e={name:"backend/getting-started/project-structure.md"};function l(t,a,o,c,r,h){return p(),n("div",null,a[0]||(a[0]=[i("",48)]))}const g=s(e,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/backend_getting-started_requirements.md.Bnkqjzuk.js b/assets/backend_getting-started_requirements.md.Bnkqjzuk.js new file mode 100644 index 0000000..054c627 --- /dev/null +++ b/assets/backend_getting-started_requirements.md.Bnkqjzuk.js @@ -0,0 +1,13 @@ +import{_ as i,c as s,o as l,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"시스템 요구사항","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/requirements.md","filePath":"backend/getting-started/requirements.md"}'),n={name:"backend/getting-started/requirements.md"};function t(r,a,o,h,d,p){return l(),s("div",null,a[0]||(a[0]=[e(`

시스템 요구사항

필수 요구사항

1. Java 개발 환경

bash
# Java 버전 확인
+java -version
+
+# 출력 예시
+openjdk version "17.0.8" 2023-07-18
+OpenJDK Runtime Environment (build 17.0.8+7-Ubuntu-0ubuntu120.04)
+OpenJDK 64-Bit Server VM (build 17.0.8+7-Ubuntu-0ubuntu120.04, mixed mode, sharing)

2. 빌드 도구

bash
# Maven 버전 확인
+mvn -version
+
+# 출력 예시
+Apache Maven 3.9.5
+Maven home: /usr/share/maven
+Java version: 17.0.8, vendor: Eclipse Adoptium

3. 데이터베이스

프로젝트는 다음 데이터베이스 중 하나를 사용해야 합니다:

Tibero6 (기본값)

Oracle

PostgreSQL

4. Redis (Valkey 호환)

5. IDE (선택사항)

다음 IDE 중 하나를 사용하는 것을 권장합니다:

선택적 요구사항

1. 외부 Tomcat 서버

WAR 파일로 배포하는 경우:

2. 개발 도구

운영 환경 요구사항

서버 사양 (권장)

네트워크

환경별 설정

프로젝트는 다음 환경별 설정을 지원합니다:

각 환경에 맞는 설정 파일은 src/main/resources/config/ 디렉토리에 있습니다.

다음 단계

환경이 준비되었다면 다음 문서를 참고하여 개발 환경을 설정하세요:

`,39)]))}const c=i(n,[["render",t]]);export{g as __pageData,c as default}; diff --git a/assets/backend_getting-started_requirements.md.Bnkqjzuk.lean.js b/assets/backend_getting-started_requirements.md.Bnkqjzuk.lean.js new file mode 100644 index 0000000..f88fd65 --- /dev/null +++ b/assets/backend_getting-started_requirements.md.Bnkqjzuk.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as l,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"시스템 요구사항","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/requirements.md","filePath":"backend/getting-started/requirements.md"}'),n={name:"backend/getting-started/requirements.md"};function t(r,a,o,h,d,p){return l(),s("div",null,a[0]||(a[0]=[e("",39)]))}const c=i(n,[["render",t]]);export{g as __pageData,c as default}; diff --git a/assets/backend_getting-started_requirements.md.jo0Ec_yS.js b/assets/backend_getting-started_requirements.md.jo0Ec_yS.js deleted file mode 100644 index 60f7618..0000000 --- a/assets/backend_getting-started_requirements.md.jo0Ec_yS.js +++ /dev/null @@ -1,13 +0,0 @@ -import{_ as i,c as s,o as l,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"시스템 요구사항","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/requirements.md","filePath":"backend/getting-started/requirements.md"}'),n={name:"backend/getting-started/requirements.md"};function t(r,a,o,h,d,p){return l(),s("div",null,a[0]||(a[0]=[e(`

시스템 요구사항

필수 요구사항

1. Java 개발 환경

bash
# Java 버전 확인
-java -version
-
-# 출력 예시
-openjdk version "17.0.8" 2023-07-18
-OpenJDK Runtime Environment (build 17.0.8+7-Ubuntu-0ubuntu120.04)
-OpenJDK 64-Bit Server VM (build 17.0.8+7-Ubuntu-0ubuntu120.04, mixed mode, sharing)

2. 빌드 도구

bash
# Maven 버전 확인
-mvn -version
-
-# 출력 예시
-Apache Maven 3.9.5
-Maven home: /usr/share/maven
-Java version: 17.0.8, vendor: Eclipse Adoptium

3. 데이터베이스

프로젝트는 다음 데이터베이스 중 하나를 사용해야 합니다:

Tibero6 (기본값)

Oracle

PostgreSQL

4. Redis (Valkey 호환)

5. IDE (선택사항)

다음 IDE 중 하나를 사용하는 것을 권장합니다:

선택적 요구사항

1. 외부 Tomcat 서버

WAR 파일로 배포하는 경우:

2. 개발 도구

운영 환경 요구사항

서버 사양 (권장)

네트워크

환경별 설정

프로젝트는 다음 환경별 설정을 지원합니다:

각 환경에 맞는 설정 파일은 src/main/resources/config/ 디렉토리에 있습니다.

다음 단계

환경이 준비되었다면 다음 문서를 참고하여 개발 환경을 설정하세요:

`,39)]))}const c=i(n,[["render",t]]);export{g as __pageData,c as default}; diff --git a/assets/backend_getting-started_requirements.md.jo0Ec_yS.lean.js b/assets/backend_getting-started_requirements.md.jo0Ec_yS.lean.js deleted file mode 100644 index 5b9b705..0000000 --- a/assets/backend_getting-started_requirements.md.jo0Ec_yS.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as s,o as l,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"시스템 요구사항","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/requirements.md","filePath":"backend/getting-started/requirements.md"}'),n={name:"backend/getting-started/requirements.md"};function t(r,a,o,h,d,p){return l(),s("div",null,a[0]||(a[0]=[e("",39)]))}const c=i(n,[["render",t]]);export{g as __pageData,c as default}; diff --git a/assets/backend_getting-started_setup.md.Ce16FtvH.js b/assets/backend_getting-started_setup.md.Ce16FtvH.js new file mode 100644 index 0000000..472f0f7 --- /dev/null +++ b/assets/backend_getting-started_setup.md.Ce16FtvH.js @@ -0,0 +1,92 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"개발 환경 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/setup.md","filePath":"backend/getting-started/setup.md"}'),e={name:"backend/getting-started/setup.md"};function t(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[l(`

개발 환경 설정

이 문서는 AxpFramework 프로젝트의 개발 환경을 설정하는 방법을 안내합니다.

1. 프로젝트 클론 및 준비

1.1 프로젝트 다운로드

bash
# Git 저장소에서 클론 (예시)
+git clone <repository-url>
+cd AxpFramework

1.2 프로젝트 구조 확인

AxpFramework/
+├── pom.xml                    # Maven 설정 파일
+├── src/
+│   ├── main/
+│   │   ├── java/             # Java 소스 코드
+│   │   └── resources/        # 리소스 파일
+│   └── test/                 # 테스트 코드
+└── mvnw                       # Maven Wrapper

2. 데이터베이스 설정

2.1 데이터베이스 선택

프로젝트는 다음 데이터베이스 중 하나를 사용할 수 있습니다:

2.2 설정 파일 수정

src/main/resources/config/application-dev.yaml 파일을 열어 데이터베이스 연결 정보를 수정합니다.

Tibero 설정 예시

yaml
app:
+  datasource:
+    type: tibero
+
+spring:
+  datasource:
+    tibero:
+      jdbc-url: jdbc:tibero:thin:@localhost:9629:INTDB
+      driver-class-name: com.tmax.tibero.jdbc.TbDriver
+      username: your_username
+      password: your_password

Oracle 설정 예시

yaml
app:
+  datasource:
+    type: oracle
+
+spring:
+  datasource:
+    oracle:
+      jdbc-url: jdbc:oracle:thin:@localhost:1521:XE
+      driver-class-name: oracle.jdbc.OracleDriver
+      username: your_username
+      password: your_password

PostgreSQL 설정 예시

yaml
app:
+  datasource:
+    type: postgres
+
+spring:
+  datasource:
+    postgres:
+      jdbc-url: jdbc:postgresql://localhost:5432/your_database
+      username: your_username
+      password: your_password
+      driver-class-name: org.postgresql.Driver

2.3 Tibero JDBC 드라이버 확인

Tibero를 사용하는 경우, src/main/resources/lib/tibero6-jdbc.jar 파일이 존재하는지 확인합니다.

3. Redis 설정

3.1 Redis 설치 및 실행

Windows

bash
# Redis 다운로드 및 설치
+# https://github.com/microsoftarchive/redis/releases
+
+# Redis 실행
+redis-server

Linux/Mac

bash
# Redis 설치 (Ubuntu/Debian)
+sudo apt-get install redis-server
+
+# Redis 실행
+redis-server

3.2 Redis 설정 파일 수정

src/main/resources/config/application-dev.yaml 파일에서 Redis 연결 정보를 수정합니다.

yaml
redis:
+  datasource:
+    cache:
+      host: localhost
+      port: 6379
+      password: ""
+      database: 0
+    bizcomp:
+      host: localhost
+      port: 6379
+      password: ""
+      database: 0

4. 애플리케이션 설정

4.1 JWT 시크릿 키 설정

src/main/resources/config/application-dev.yaml 파일에서 JWT 시크릿 키를 설정합니다.

yaml
jwt:
+  secret: U29tZVN1cGVyU2VjcmV0S2V5Rm9ySlBXVC1NeVNlY3JldEtleQ==

주의: 운영 환경에서는 반드시 새로운 시크릿 키를 생성하여 사용하세요.

4.2 CORS 설정

프론트엔드 도메인을 CORS 허용 목록에 추가합니다.

yaml
cors:
+  allowed-origins: >
+    http://localhost:8080
+    ,http://localhost:5173
+    ,http://localhost:3000
+  mappings: >
+    /api/**
+    ,/auth/**

4.3 파일 경로 설정

파일 업로드 경로를 설정합니다.

yaml
file:
+  empimg:
+    path: D:\\\\FileUpload\\\\HRMaster\\\\EMP\\\\
+  report:
+    path: D:\\\\FileUpload\\\\JasperReport\\\\
+  path: D:\\\\FileUpload\\\\FCM\\\\COMFiles\\\\

주의: Windows와 Linux의 경로 형식이 다르므로 환경에 맞게 수정하세요.

5. 프로젝트 빌드

5.1 Maven 의존성 다운로드

bash
# 프로젝트 루트 디렉토리에서 실행
+mvn clean install
+
+# 또는 Maven Wrapper 사용
+./mvnw clean install

5.2 빌드 확인

빌드가 성공하면 target/ 디렉토리에 다음 파일이 생성됩니다:

6. 애플리케이션 실행

6.1 IDE에서 실행

IntelliJ IDEA

  1. 프로젝트를 IntelliJ IDEA로 열기
  2. AxpBootApplication.java 파일 열기
  3. main 메서드 옆의 실행 버튼 클릭
  4. 또는 RunRun 'AxpBootApplication'

Eclipse

  1. 프로젝트를 Eclipse로 Import
  2. AxpBootApplication.java 파일에서 우클릭
  3. Run AsJava Application

6.2 Maven으로 실행

bash
# 개발 환경으로 실행
+mvn spring-boot:run -Pdev
+
+# 또는 특정 프로파일 지정
+mvn spring-boot:run -Plocal

6.3 WAR 파일로 실행

bash
# 빌드
+mvn clean package
+
+# Tomcat에 배포
+# target/AxpFramework-0.0.1-SNAPSHOT.war 파일을 Tomcat의 webapps 디렉토리에 복사

7. 애플리케이션 확인

7.1 서버 시작 확인

애플리케이션이 정상적으로 시작되면 다음과 같은 로그가 출력됩니다:

  .   ____          _            __ _ _
+ /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\
+( ( )\\___ | '_ | '_| | '_ \\/ _\` | \\ \\ \\ \\
+ \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
+  '  |____| .__|_| |_|_| |_\\__, | / / / /
+ =========|_|==============|___/=/_/_/_/
+ :: Spring Boot ::                (v3.2.5)

7.2 API 확인

브라우저에서 다음 URL로 접속하여 확인합니다:

7.3 로그 확인

로그 파일은 다음 위치에 생성됩니다:

8. 문제 해결

8.1 포트 충돌

8080 포트가 이미 사용 중인 경우:

yaml
# application-dev.yaml
+server:
+  port: 8081  # 다른 포트로 변경

8.2 데이터베이스 연결 실패

8.3 Redis 연결 실패

다음 단계

개발 환경이 준비되었다면 다음 문서를 참고하세요:

`,79)]))}const g=a(e,[["render",t]]);export{c as __pageData,g as default}; diff --git a/assets/backend_getting-started_setup.md.Ce16FtvH.lean.js b/assets/backend_getting-started_setup.md.Ce16FtvH.lean.js new file mode 100644 index 0000000..2b1dacc --- /dev/null +++ b/assets/backend_getting-started_setup.md.Ce16FtvH.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"개발 환경 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/setup.md","filePath":"backend/getting-started/setup.md"}'),e={name:"backend/getting-started/setup.md"};function t(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[l("",79)]))}const g=a(e,[["render",t]]);export{c as __pageData,g as default}; diff --git a/assets/backend_getting-started_setup.md.CjgHpzHA.js b/assets/backend_getting-started_setup.md.CjgHpzHA.js deleted file mode 100644 index 9ac074b..0000000 --- a/assets/backend_getting-started_setup.md.CjgHpzHA.js +++ /dev/null @@ -1,92 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"개발 환경 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/setup.md","filePath":"backend/getting-started/setup.md"}'),e={name:"backend/getting-started/setup.md"};function t(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[l(`

개발 환경 설정

이 문서는 AxpFramework 프로젝트의 개발 환경을 설정하는 방법을 안내합니다.

1. 프로젝트 클론 및 준비

1.1 프로젝트 다운로드

bash
# Git 저장소에서 클론 (예시)
-git clone <repository-url>
-cd AxpFramework

1.2 프로젝트 구조 확인

AxpFramework/
-├── pom.xml                    # Maven 설정 파일
-├── src/
-│   ├── main/
-│   │   ├── java/             # Java 소스 코드
-│   │   └── resources/        # 리소스 파일
-│   └── test/                 # 테스트 코드
-└── mvnw                       # Maven Wrapper

2. 데이터베이스 설정

2.1 데이터베이스 선택

프로젝트는 다음 데이터베이스 중 하나를 사용할 수 있습니다:

2.2 설정 파일 수정

src/main/resources/config/application-dev.yaml 파일을 열어 데이터베이스 연결 정보를 수정합니다.

Tibero 설정 예시

yaml
app:
-  datasource:
-    type: tibero
-
-spring:
-  datasource:
-    tibero:
-      jdbc-url: jdbc:tibero:thin:@localhost:9629:INTDB
-      driver-class-name: com.tmax.tibero.jdbc.TbDriver
-      username: your_username
-      password: your_password

Oracle 설정 예시

yaml
app:
-  datasource:
-    type: oracle
-
-spring:
-  datasource:
-    oracle:
-      jdbc-url: jdbc:oracle:thin:@localhost:1521:XE
-      driver-class-name: oracle.jdbc.OracleDriver
-      username: your_username
-      password: your_password

PostgreSQL 설정 예시

yaml
app:
-  datasource:
-    type: postgres
-
-spring:
-  datasource:
-    postgres:
-      jdbc-url: jdbc:postgresql://localhost:5432/your_database
-      username: your_username
-      password: your_password
-      driver-class-name: org.postgresql.Driver

2.3 Tibero JDBC 드라이버 확인

Tibero를 사용하는 경우, src/main/resources/lib/tibero6-jdbc.jar 파일이 존재하는지 확인합니다.

3. Redis 설정

3.1 Redis 설치 및 실행

Windows

bash
# Redis 다운로드 및 설치
-# https://github.com/microsoftarchive/redis/releases
-
-# Redis 실행
-redis-server

Linux/Mac

bash
# Redis 설치 (Ubuntu/Debian)
-sudo apt-get install redis-server
-
-# Redis 실행
-redis-server

3.2 Redis 설정 파일 수정

src/main/resources/config/application-dev.yaml 파일에서 Redis 연결 정보를 수정합니다.

yaml
redis:
-  datasource:
-    cache:
-      host: localhost
-      port: 6379
-      password: ""
-      database: 0
-    bizcomp:
-      host: localhost
-      port: 6379
-      password: ""
-      database: 0

4. 애플리케이션 설정

4.1 JWT 시크릿 키 설정

src/main/resources/config/application-dev.yaml 파일에서 JWT 시크릿 키를 설정합니다.

yaml
jwt:
-  secret: U29tZVN1cGVyU2VjcmV0S2V5Rm9ySlBXVC1NeVNlY3JldEtleQ==

주의: 운영 환경에서는 반드시 새로운 시크릿 키를 생성하여 사용하세요.

4.2 CORS 설정

프론트엔드 도메인을 CORS 허용 목록에 추가합니다.

yaml
cors:
-  allowed-origins: >
-    http://localhost:8080
-    ,http://localhost:5173
-    ,http://localhost:3000
-  mappings: >
-    /api/**
-    ,/auth/**

4.3 파일 경로 설정

파일 업로드 경로를 설정합니다.

yaml
file:
-  empimg:
-    path: D:\\\\FileUpload\\\\HRMaster\\\\EMP\\\\
-  report:
-    path: D:\\\\FileUpload\\\\JasperReport\\\\
-  path: D:\\\\FileUpload\\\\FCM\\\\COMFiles\\\\

주의: Windows와 Linux의 경로 형식이 다르므로 환경에 맞게 수정하세요.

5. 프로젝트 빌드

5.1 Maven 의존성 다운로드

bash
# 프로젝트 루트 디렉토리에서 실행
-mvn clean install
-
-# 또는 Maven Wrapper 사용
-./mvnw clean install

5.2 빌드 확인

빌드가 성공하면 target/ 디렉토리에 다음 파일이 생성됩니다:

6. 애플리케이션 실행

6.1 IDE에서 실행

IntelliJ IDEA

  1. 프로젝트를 IntelliJ IDEA로 열기
  2. AxpBootApplication.java 파일 열기
  3. main 메서드 옆의 실행 버튼 클릭
  4. 또는 RunRun 'AxpBootApplication'

Eclipse

  1. 프로젝트를 Eclipse로 Import
  2. AxpBootApplication.java 파일에서 우클릭
  3. Run AsJava Application

6.2 Maven으로 실행

bash
# 개발 환경으로 실행
-mvn spring-boot:run -Pdev
-
-# 또는 특정 프로파일 지정
-mvn spring-boot:run -Plocal

6.3 WAR 파일로 실행

bash
# 빌드
-mvn clean package
-
-# Tomcat에 배포
-# target/AxpFramework-0.0.1-SNAPSHOT.war 파일을 Tomcat의 webapps 디렉토리에 복사

7. 애플리케이션 확인

7.1 서버 시작 확인

애플리케이션이 정상적으로 시작되면 다음과 같은 로그가 출력됩니다:

  .   ____          _            __ _ _
- /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\
-( ( )\\___ | '_ | '_| | '_ \\/ _\` | \\ \\ \\ \\
- \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
-  '  |____| .__|_| |_|_| |_\\__, | / / / /
- =========|_|==============|___/=/_/_/_/
- :: Spring Boot ::                (v3.2.5)

7.2 API 확인

브라우저에서 다음 URL로 접속하여 확인합니다:

7.3 로그 확인

로그 파일은 다음 위치에 생성됩니다:

8. 문제 해결

8.1 포트 충돌

8080 포트가 이미 사용 중인 경우:

yaml
# application-dev.yaml
-server:
-  port: 8081  # 다른 포트로 변경

8.2 데이터베이스 연결 실패

8.3 Redis 연결 실패

다음 단계

개발 환경이 준비되었다면 다음 문서를 참고하세요:

`,79)]))}const g=a(e,[["render",t]]);export{c as __pageData,g as default}; diff --git a/assets/backend_getting-started_setup.md.CjgHpzHA.lean.js b/assets/backend_getting-started_setup.md.CjgHpzHA.lean.js deleted file mode 100644 index 42d9767..0000000 --- a/assets/backend_getting-started_setup.md.CjgHpzHA.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"개발 환경 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/getting-started/setup.md","filePath":"backend/getting-started/setup.md"}'),e={name:"backend/getting-started/setup.md"};function t(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[l("",79)]))}const g=a(e,[["render",t]]);export{c as __pageData,g as default}; diff --git a/assets/backend_index.md.B8agd6M6.js b/assets/backend_index.md.B8agd6M6.js deleted file mode 100644 index 8a033ba..0000000 --- a/assets/backend_index.md.B8agd6M6.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as l,c as a,o as i,aG as r}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"AXP Framework Dev Docs","description":"","frontmatter":{},"headers":[],"relativePath":"backend/index.md","filePath":"backend/index.md"}'),t={name:"backend/index.md"};function o(n,e,s,h,m,c){return i(),a("div",null,e[0]||(e[0]=[r('

AXP Framework Dev Docs

이 문서는 무엇인가요?

AXP Framework는 Spring Boot 기반의 **엔터프라이즈 애플리케이션 개발을 위한 통합 프레임워크입니다.
이 문서는 다른 개발자들이 빠르게 신규 모듈/기능을 개발할 수 있도록 돕는 개발자용 가이드 문서입니다.


처음 온 개발자를 위한 3단계

  1. 프로젝트 전체 그림 이해하기

  2. 로컬 개발 환경 구축하기

    • 개발 환경 설정
    • 데이터베이스 및 Redis 연결 설정
    • mvn spring-boot:run -Pdev로 로컬 서버 띄우기
  3. AXP Framework 개발 패턴 익히기


핵심 아키텍처 빠른 링크

AXP Framework에서 반드시 알아야 하는 핵심 모듈들입니다.


공통 기능 사용 가이드

프레임워크에서 제공하는 공통 기능들은 아래 문서에서 상세 사용법과 예제를 제공합니다.


새 모듈을 만들 때 추천 흐름

  1. 모듈 구조 잡기

    • 모듈 생성 절차 참고
    • 표준 패키지 구조: {모듈명}/{도메인}/controller, service, mapper
  2. 데이터베이스 연동 설계

  3. API 개발

  4. 보안 및 인증 적용

    • 필요 시 인증/인가 처리 참고
    • 제외 URI는 application-dev.yamlsecurity.excluded-uris에 추가
  5. 문서화


기술 스택 개요

프로젝트에서 사용하는 주요 기술들을 빠르게 확인할 수 있습니다.


환경 설정 가이드

개발 환경을 구축하고 설정하는 방법을 안내합니다.


API 레퍼런스

프로젝트에서 제공하는 모든 API를 확인할 수 있습니다.


문제 해결

개발 중 자주 발생하는 문제와 해결 방법을 정리했습니다.


참고 자료

프로젝트 개발에 필요한 참고 자료를 모았습니다.

',38)]))}const p=l(t,[["render",o]]);export{d as __pageData,p as default}; diff --git a/assets/backend_index.md.B8agd6M6.lean.js b/assets/backend_index.md.B8agd6M6.lean.js deleted file mode 100644 index 10eadfd..0000000 --- a/assets/backend_index.md.B8agd6M6.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as l,c as a,o as i,aG as r}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"AXP Framework Dev Docs","description":"","frontmatter":{},"headers":[],"relativePath":"backend/index.md","filePath":"backend/index.md"}'),t={name:"backend/index.md"};function o(n,e,s,h,m,c){return i(),a("div",null,e[0]||(e[0]=[r("",38)]))}const p=l(t,[["render",o]]);export{d as __pageData,p as default}; diff --git a/assets/backend_index.md.BIN4Uk7l.js b/assets/backend_index.md.BIN4Uk7l.js new file mode 100644 index 0000000..46e8e75 --- /dev/null +++ b/assets/backend_index.md.BIN4Uk7l.js @@ -0,0 +1 @@ +import{_ as l,c as a,o as i,aG as r}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"AXP Framework Dev Docs","description":"","frontmatter":{},"headers":[],"relativePath":"backend/index.md","filePath":"backend/index.md"}'),t={name:"backend/index.md"};function o(n,e,s,h,m,c){return i(),a("div",null,e[0]||(e[0]=[r('

AXP Framework Dev Docs

이 문서는 무엇인가요?

AXP Framework는 Spring Boot 기반의 **엔터프라이즈 애플리케이션 개발을 위한 통합 프레임워크입니다.
이 문서는 다른 개발자들이 빠르게 신규 모듈/기능을 개발할 수 있도록 돕는 개발자용 가이드 문서입니다.


처음 온 개발자를 위한 3단계

  1. 프로젝트 전체 그림 이해하기

  2. 로컬 개발 환경 구축하기

    • 개발 환경 설정
    • 데이터베이스 및 Redis 연결 설정
    • mvn spring-boot:run -Pdev로 로컬 서버 띄우기
  3. AXP Framework 개발 패턴 익히기


핵심 아키텍처 빠른 링크

AXP Framework에서 반드시 알아야 하는 핵심 모듈들입니다.


공통 기능 사용 가이드

프레임워크에서 제공하는 공통 기능들은 아래 문서에서 상세 사용법과 예제를 제공합니다.


새 모듈을 만들 때 추천 흐름

  1. 모듈 구조 잡기

    • 모듈 생성 절차 참고
    • 표준 패키지 구조: {모듈명}/{도메인}/controller, service, mapper
  2. 데이터베이스 연동 설계

  3. API 개발

  4. 보안 및 인증 적용

    • 필요 시 인증/인가 처리 참고
    • 제외 URI는 application-dev.yamlsecurity.excluded-uris에 추가
  5. 문서화


기술 스택 개요

프로젝트에서 사용하는 주요 기술들을 빠르게 확인할 수 있습니다.


환경 설정 가이드

개발 환경을 구축하고 설정하는 방법을 안내합니다.


API 레퍼런스

프로젝트에서 제공하는 모든 API를 확인할 수 있습니다.


문제 해결

개발 중 자주 발생하는 문제와 해결 방법을 정리했습니다.


참고 자료

프로젝트 개발에 필요한 참고 자료를 모았습니다.

',38)]))}const p=l(t,[["render",o]]);export{d as __pageData,p as default}; diff --git a/assets/backend_index.md.BIN4Uk7l.lean.js b/assets/backend_index.md.BIN4Uk7l.lean.js new file mode 100644 index 0000000..71c8146 --- /dev/null +++ b/assets/backend_index.md.BIN4Uk7l.lean.js @@ -0,0 +1 @@ +import{_ as l,c as a,o as i,aG as r}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"AXP Framework Dev Docs","description":"","frontmatter":{},"headers":[],"relativePath":"backend/index.md","filePath":"backend/index.md"}'),t={name:"backend/index.md"};function o(n,e,s,h,m,c){return i(),a("div",null,e[0]||(e[0]=[r("",38)]))}const p=l(t,[["render",o]]);export{d as __pageData,p as default}; diff --git a/assets/backend_project-structure_business.md.CH81eD5k.js b/assets/backend_project-structure_business.md.CH81eD5k.js deleted file mode 100644 index 28c8311..0000000 --- a/assets/backend_project-structure_business.md.CH81eD5k.js +++ /dev/null @@ -1,111 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"비즈니스 모듈 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/business.md","filePath":"backend/project-structure/business.md"}'),p={name:"backend/project-structure/business.md"};function e(t,s,h,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l(`

비즈니스 모듈 구조

비즈니스 모듈은 표준화된 패키지 구조를 따릅니다.

표준 패키지 구조

{모듈명}/{도메인}/
-├── controller/                     # REST API 컨트롤러
-├── service/                        # 비즈니스 로직
-├── mapper/                        # MyBatis Mapper 인터페이스
-└── utils/                         # 모듈별 유틸리티 (선택)

ESS 모듈

구조

ess/
-├── admin/                         # 관리자 기능
-│   ├── controller/
-│   │   └── EssAdminController.java
-│   ├── mapper/
-│   │   └── EssAdminMapper.java
-│   └── service/
-│       └── EssAdminService.java
-├── auth/                          # 인증 기능
-│   ├── controller/
-│   │   └── EssLoginController.java
-│   ├── mapper/
-│   │   └── EssAuthMapper.java
-│   └── service/
-│       └── EssAuthService.java
-├── com/                           # 공통 기능
-│   ├── controller/
-│   │   └── EssComController.java
-│   ├── mapper/
-│   │   └── EssComMapper.java
-│   ├── service/
-│   │   └── EssComService.java
-│   └── utils/
-│       └── EssComUtil.java
-└── welfare/                       # 복지 기능
-    ├── controller/
-    │   └── EssWelfareController.java
-    ├── mapper/
-    │   └── EssWelfareMapper.java
-    └── service/
-        └── EssWelfareService.java

주요 기능

1. 인증 (auth/)

2. 공통 기능 (com/)

3. 관리자 (admin/)

4. 복지 (welfare/)

FCM 모듈

구조

fcm/
-├── com/                           # 공통 기능
-│   ├── controller/
-│   │   └── FcmComController.java
-│   ├── service/
-│   │   └── FcmComService.java
-│   └── utils/
-│       └── FcmComUtil.java
-├── hri/                           # HRI 기능
-│   ├── controller/
-│   │   └── FcmHriController.java
-│   ├── mapper/
-│   │   └── FcmHriMapper.java
-│   └── service/
-│       └── FcmHriService.java
-└── sys/                           # 시스템 기능
-    ├── controller/
-    │   └── FcmSysController.java
-    ├── mapper/
-    │   └── FcmSysMapper.java
-    └── service/
-        └── FcmSysService.java

주요 기능

1. 공통 기능 (com/)

2. HRI (hri/)

3. 시스템 (sys/)

컨트롤러 작성 규칙

기본 구조

java
@RestController
-@RequestMapping(value = "/api/{모듈명}", method = RequestMethod.POST)
-public class {모듈명}Controller extends AxpBaseWebController {
-    
-    private static final Logger LOGGER = LogManager.getLogger({모듈명}Controller.class);
-    
-    private final {모듈명}Service service;
-    
-    public {모듈명}Controller({모듈명}Service service) {
-        this.service = service;
-    }
-    
-    @PostMapping("/endpoint")
-    public ResponseEntity<String> endpoint(
-        @RequestBody Map<String, Object> requestBody
-    ) {
-        try {
-            // 비즈니스 로직
-            Object result = service.process(requestBody);
-            return getJSONSuccessResponse(result);
-        } catch (Exception e) {
-            LOGGER.error("오류 발생", e);
-            return getJSONErrorResponse(e.getMessage(), null);
-        }
-    }
-}

응답 형식

모든 API는 다음 형식으로 응답합니다:

성공:

json
{
-  "status": "S",
-  "message": "",
-  "data": { ... }
-}

실패:

json
{
-  "status": "E",
-  "message": "에러 메시지",
-  "data": null
-}

서비스 작성 규칙

기본 구조

java
@Service
-public class {모듈명}Service {
-    
-    private static final Logger LOGGER = LogManager.getLogger({모듈명}Service.class);
-    
-    @Resource(name = "AxpCommDbService")
-    private AxpCommDbService dbService;
-    
-    public Object process(Map<String, Object> param) {
-        // 비즈니스 로직
-        return result;
-    }
-}

Mapper 작성 규칙

인터페이스

java
@Mapper
-public interface {모듈명}Mapper {
-    List<Map<String, Object>> selectList(Map<String, Object> param);
-}

XML 매퍼

xml
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="{모듈명}.mapper.{모듈명}Mapper">
-    <select id="selectList" resultType="map">
-        SELECT * FROM table
-    </select>
-</mapper>

다음 단계

`,45)]))}const o=a(p,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/backend_project-structure_business.md.CH81eD5k.lean.js b/assets/backend_project-structure_business.md.CH81eD5k.lean.js deleted file mode 100644 index 099ae47..0000000 --- a/assets/backend_project-structure_business.md.CH81eD5k.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"비즈니스 모듈 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/business.md","filePath":"backend/project-structure/business.md"}'),p={name:"backend/project-structure/business.md"};function e(t,s,h,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l("",45)]))}const o=a(p,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/backend_project-structure_business.md.CnSooWTi.js b/assets/backend_project-structure_business.md.CnSooWTi.js new file mode 100644 index 0000000..2a36df6 --- /dev/null +++ b/assets/backend_project-structure_business.md.CnSooWTi.js @@ -0,0 +1,111 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"비즈니스 모듈 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/business.md","filePath":"backend/project-structure/business.md"}'),p={name:"backend/project-structure/business.md"};function e(t,s,h,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l(`

비즈니스 모듈 구조

비즈니스 모듈은 표준화된 패키지 구조를 따릅니다.

표준 패키지 구조

{모듈명}/{도메인}/
+├── controller/                     # REST API 컨트롤러
+├── service/                        # 비즈니스 로직
+├── mapper/                        # MyBatis Mapper 인터페이스
+└── utils/                         # 모듈별 유틸리티 (선택)

ESS 모듈

구조

ess/
+├── admin/                         # 관리자 기능
+│   ├── controller/
+│   │   └── EssAdminController.java
+│   ├── mapper/
+│   │   └── EssAdminMapper.java
+│   └── service/
+│       └── EssAdminService.java
+├── auth/                          # 인증 기능
+│   ├── controller/
+│   │   └── EssLoginController.java
+│   ├── mapper/
+│   │   └── EssAuthMapper.java
+│   └── service/
+│       └── EssAuthService.java
+├── com/                           # 공통 기능
+│   ├── controller/
+│   │   └── EssComController.java
+│   ├── mapper/
+│   │   └── EssComMapper.java
+│   ├── service/
+│   │   └── EssComService.java
+│   └── utils/
+│       └── EssComUtil.java
+└── welfare/                       # 복지 기능
+    ├── controller/
+    │   └── EssWelfareController.java
+    ├── mapper/
+    │   └── EssWelfareMapper.java
+    └── service/
+        └── EssWelfareService.java

주요 기능

1. 인증 (auth/)

2. 공통 기능 (com/)

3. 관리자 (admin/)

4. 복지 (welfare/)

FCM 모듈

구조

fcm/
+├── com/                           # 공통 기능
+│   ├── controller/
+│   │   └── FcmComController.java
+│   ├── service/
+│   │   └── FcmComService.java
+│   └── utils/
+│       └── FcmComUtil.java
+├── hri/                           # HRI 기능
+│   ├── controller/
+│   │   └── FcmHriController.java
+│   ├── mapper/
+│   │   └── FcmHriMapper.java
+│   └── service/
+│       └── FcmHriService.java
+└── sys/                           # 시스템 기능
+    ├── controller/
+    │   └── FcmSysController.java
+    ├── mapper/
+    │   └── FcmSysMapper.java
+    └── service/
+        └── FcmSysService.java

주요 기능

1. 공통 기능 (com/)

2. HRI (hri/)

3. 시스템 (sys/)

컨트롤러 작성 규칙

기본 구조

java
@RestController
+@RequestMapping(value = "/api/{모듈명}", method = RequestMethod.POST)
+public class {모듈명}Controller extends AxpBaseWebController {
+    
+    private static final Logger LOGGER = LogManager.getLogger({모듈명}Controller.class);
+    
+    private final {모듈명}Service service;
+    
+    public {모듈명}Controller({모듈명}Service service) {
+        this.service = service;
+    }
+    
+    @PostMapping("/endpoint")
+    public ResponseEntity<String> endpoint(
+        @RequestBody Map<String, Object> requestBody
+    ) {
+        try {
+            // 비즈니스 로직
+            Object result = service.process(requestBody);
+            return getJSONSuccessResponse(result);
+        } catch (Exception e) {
+            LOGGER.error("오류 발생", e);
+            return getJSONErrorResponse(e.getMessage(), null);
+        }
+    }
+}

응답 형식

모든 API는 다음 형식으로 응답합니다:

성공:

json
{
+  "status": "S",
+  "message": "",
+  "data": { ... }
+}

실패:

json
{
+  "status": "E",
+  "message": "에러 메시지",
+  "data": null
+}

서비스 작성 규칙

기본 구조

java
@Service
+public class {모듈명}Service {
+    
+    private static final Logger LOGGER = LogManager.getLogger({모듈명}Service.class);
+    
+    @Resource(name = "AxpCommDbService")
+    private AxpCommDbService dbService;
+    
+    public Object process(Map<String, Object> param) {
+        // 비즈니스 로직
+        return result;
+    }
+}

Mapper 작성 규칙

인터페이스

java
@Mapper
+public interface {모듈명}Mapper {
+    List<Map<String, Object>> selectList(Map<String, Object> param);
+}

XML 매퍼

xml
<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="{모듈명}.mapper.{모듈명}Mapper">
+    <select id="selectList" resultType="map">
+        SELECT * FROM table
+    </select>
+</mapper>

다음 단계

`,45)]))}const o=a(p,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/backend_project-structure_business.md.CnSooWTi.lean.js b/assets/backend_project-structure_business.md.CnSooWTi.lean.js new file mode 100644 index 0000000..b9cf840 --- /dev/null +++ b/assets/backend_project-structure_business.md.CnSooWTi.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"비즈니스 모듈 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/business.md","filePath":"backend/project-structure/business.md"}'),p={name:"backend/project-structure/business.md"};function e(t,s,h,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l("",45)]))}const o=a(p,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/backend_project-structure_directory.md.DeenTXQD.js b/assets/backend_project-structure_directory.md.DeenTXQD.js new file mode 100644 index 0000000..123c930 --- /dev/null +++ b/assets/backend_project-structure_directory.md.DeenTXQD.js @@ -0,0 +1,119 @@ +import{_ as s,c as n,o as p,aG as e}from"./chunks/framework.DytOxJW6.js";const m=JSON.parse('{"title":"전체 디렉토리 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/directory.md","filePath":"backend/project-structure/directory.md"}'),l={name:"backend/project-structure/directory.md"};function i(c,a,r,t,o,d){return p(),n("div",null,a[0]||(a[0]=[e(`

전체 디렉토리 구조

AxpFramework 프로젝트의 전체 디렉토리 구조와 각 디렉토리의 역할을 설명합니다.

루트 디렉토리 구조

AxpFramework/
+├── pom.xml                          # Maven 빌드 설정 파일
+├── mvnw                             # Maven Wrapper (Linux/Mac)
+├── mvnw.cmd                         # Maven Wrapper (Windows)
+├── src/                             # 소스 코드 디렉토리
+│   ├── main/                        # 메인 소스 코드
+│   └── test/                        # 테스트 코드
+├── target/                          # 빌드 결과물 (자동 생성)
+└── logs/                            # 로그 파일 디렉토리

소스 코드 디렉토리 구조

main 디렉토리

src/main/
+├── java/                            # Java 소스 코드
+│   ├── axpFramework/               # 공통 프레임워크 모듈
+│   ├── ess/                        # ESS 비즈니스 모듈
+│   └── fcm/                        # FCM 비즈니스 모듈
+└── resources/                       # 리소스 파일
+    ├── application.yaml            # 기본 설정 파일
+    ├── banner.txt                  # Spring Boot 배너
+    ├── logback-spring.xml          # Logback 로깅 설정
+    ├── antisamy-policy.xml         # XSS 방지 정책 파일
+    ├── jasperreports_extension.properties  # JasperReports 확장 설정
+    ├── config/                     # 환경별 설정 파일
+    │   ├── application-dev.yaml    # 개발 환경 설정
+    │   ├── application-local.yaml  # 로컬 환경 설정
+    │   ├── application-prod.yaml  # 운영 환경 설정
+    │   └── ai-config.yaml          # AI 서비스 설정
+    ├── mapper/                     # MyBatis XML 매퍼
+    │   ├── axpFramework/          # 프레임워크 매퍼
+    │   └── ess/                    # ESS 모듈 매퍼
+    ├── mapper-config/              # MyBatis 설정 파일
+    │   ├── mybatis-config-tibero.xml
+    │   ├── mybatis-config-oracle.xml
+    │   └── mybatis-config-postgresql.xml
+    ├── report/                     # 리포트 템플릿
+    │   ├── jasperForms/            # JasperReports 템플릿 (.jrxml)
+    │   └── jasperfonts/            # 한글 폰트 파일
+    └── lib/                        # 외부 라이브러리
+        └── tibero6-jdbc.jar        # Tibero JDBC 드라이버

test 디렉토리

src/test/
+├── java/                           # 테스트 Java 코드
+│   └── axpFramework/              # 테스트 클래스
+└── resources/                     # 테스트 리소스
+    └── application.yaml           # 테스트 환경 설정

Java 소스 코드 구조

1. 공통 프레임워크 모듈 (axpFramework/)

axpFramework/
+├── AxpBootApplication.java        # 메인 애플리케이션 클래스
+├── ai/                             # AI 서비스
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+├── common/                         # 공통 기능
+│   ├── controller/                 # 공통 컨트롤러
+│   ├── database/                   # DB 공통 서비스
+│   ├── logging/                    # 로깅 AOP
+│   ├── security/                   # 암호화 유틸리티
+│   ├── token/                      # JWT 인증
+│   └── utils/                      # 공통 유틸리티
+├── config/                         # 설정 클래스
+│   ├── AxpDataSourceConfig.java    # 데이터소스 설정
+│   ├── AxpFilterConfig.java        # 필터 설정
+│   ├── AxpMyBatisResultInterceptor.java  # MyBatis 인터셉터
+│   ├── AxpRedisConfig.java         # Redis 설정
+│   ├── AxpSecurityConfig.java      # Spring Security 설정
+│   └── AxpWebConfig.java           # Web 설정 (CORS 등)
+├── filter/                         # 필터 클래스
+│   ├── auth/                       # JWT 인증 필터
+│   ├── logging/                    # 로깅 필터
+│   ├── security/                   # 보안 필터 (XSS, 복호화)
+│   └── xss/                        # XSS 유틸리티
+├── file/                           # 파일 관리
+│   ├── controller/
+│   └── service/
+├── mail/                           # 메일 발송
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+├── report/                         # 리포트 생성
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+└── sms/                            # SMS 발송
+    ├── controller/
+    ├── mapper/
+    └── service/

2. ESS 비즈니스 모듈 (ess/)

ess/
+├── admin/                          # 관리자 기능
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+├── auth/                           # 인증 기능
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+├── com/                            # 공통 기능
+│   ├── controller/
+│   ├── mapper/
+│   ├── service/
+│   └── utils/
+└── welfare/                        # 복지 기능
+    ├── controller/
+    ├── mapper/
+    └── service/

3. FCM 비즈니스 모듈 (fcm/)

fcm/
+├── com/                            # 공통 기능
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+├── hri/                            # HRI 기능
+│   ├── controller/
+│   ├── mapper/
+│   └── service/
+└── sys/                            # 시스템 기능
+    ├── controller/
+    ├── mapper/
+    └── service/

빌드 결과물 디렉토리

target/
+├── classes/                        # 컴파일된 클래스 파일
+├── generated-sources/              # 자동 생성된 소스
+├── maven-archiver/                 # Maven 아카이버 메타데이터
+├── test-classes/                   # 컴파일된 테스트 클래스
+└── AxpFramework-0.0.1-SNAPSHOT.war  # 빌드된 WAR 파일

로그 디렉토리

logs/
+├── AxpFramework/                   # 애플리케이션 로그
+│   └── AxpFramework-YYYY-MM-DD.N.log
+├── ess/                            # ESS 모듈 로그
+│   └── ess-log-YYYY-MM-DD.N.log
+└── fcm/                            # FCM 모듈 로그
+    └── fcm-log.log

디렉토리 역할 설명

src/main/java/

src/main/resources/

src/test/java/

target/

logs/

패키지 네이밍 규칙

  1. 소문자 사용: 모든 패키지명은 소문자로 작성
  2. 도메인별 분리: 비즈니스 로직은 도메인별로 패키지 분리
  3. 계층별 분리: controller, service, mapper로 계층 분리
  4. 공통 기능: axpFramework.common 패키지에 공통 기능 배치

다음 단계

`,35)]))}const u=s(l,[["render",i]]);export{m as __pageData,u as default}; diff --git a/assets/backend_project-structure_directory.md.DeenTXQD.lean.js b/assets/backend_project-structure_directory.md.DeenTXQD.lean.js new file mode 100644 index 0000000..e7b8f29 --- /dev/null +++ b/assets/backend_project-structure_directory.md.DeenTXQD.lean.js @@ -0,0 +1 @@ +import{_ as s,c as n,o as p,aG as e}from"./chunks/framework.DytOxJW6.js";const m=JSON.parse('{"title":"전체 디렉토리 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/directory.md","filePath":"backend/project-structure/directory.md"}'),l={name:"backend/project-structure/directory.md"};function i(c,a,r,t,o,d){return p(),n("div",null,a[0]||(a[0]=[e("",35)]))}const u=s(l,[["render",i]]);export{m as __pageData,u as default}; diff --git a/assets/backend_project-structure_directory.md.E302WhzK.js b/assets/backend_project-structure_directory.md.E302WhzK.js deleted file mode 100644 index 3f01130..0000000 --- a/assets/backend_project-structure_directory.md.E302WhzK.js +++ /dev/null @@ -1,119 +0,0 @@ -import{_ as s,c as n,o as p,aG as e}from"./chunks/framework.CrOSaJJH.js";const m=JSON.parse('{"title":"전체 디렉토리 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/directory.md","filePath":"backend/project-structure/directory.md"}'),l={name:"backend/project-structure/directory.md"};function i(c,a,r,t,o,d){return p(),n("div",null,a[0]||(a[0]=[e(`

전체 디렉토리 구조

AxpFramework 프로젝트의 전체 디렉토리 구조와 각 디렉토리의 역할을 설명합니다.

루트 디렉토리 구조

AxpFramework/
-├── pom.xml                          # Maven 빌드 설정 파일
-├── mvnw                             # Maven Wrapper (Linux/Mac)
-├── mvnw.cmd                         # Maven Wrapper (Windows)
-├── src/                             # 소스 코드 디렉토리
-│   ├── main/                        # 메인 소스 코드
-│   └── test/                        # 테스트 코드
-├── target/                          # 빌드 결과물 (자동 생성)
-└── logs/                            # 로그 파일 디렉토리

소스 코드 디렉토리 구조

main 디렉토리

src/main/
-├── java/                            # Java 소스 코드
-│   ├── axpFramework/               # 공통 프레임워크 모듈
-│   ├── ess/                        # ESS 비즈니스 모듈
-│   └── fcm/                        # FCM 비즈니스 모듈
-└── resources/                       # 리소스 파일
-    ├── application.yaml            # 기본 설정 파일
-    ├── banner.txt                  # Spring Boot 배너
-    ├── logback-spring.xml          # Logback 로깅 설정
-    ├── antisamy-policy.xml         # XSS 방지 정책 파일
-    ├── jasperreports_extension.properties  # JasperReports 확장 설정
-    ├── config/                     # 환경별 설정 파일
-    │   ├── application-dev.yaml    # 개발 환경 설정
-    │   ├── application-local.yaml  # 로컬 환경 설정
-    │   ├── application-prod.yaml  # 운영 환경 설정
-    │   └── ai-config.yaml          # AI 서비스 설정
-    ├── mapper/                     # MyBatis XML 매퍼
-    │   ├── axpFramework/          # 프레임워크 매퍼
-    │   └── ess/                    # ESS 모듈 매퍼
-    ├── mapper-config/              # MyBatis 설정 파일
-    │   ├── mybatis-config-tibero.xml
-    │   ├── mybatis-config-oracle.xml
-    │   └── mybatis-config-postgresql.xml
-    ├── report/                     # 리포트 템플릿
-    │   ├── jasperForms/            # JasperReports 템플릿 (.jrxml)
-    │   └── jasperfonts/            # 한글 폰트 파일
-    └── lib/                        # 외부 라이브러리
-        └── tibero6-jdbc.jar        # Tibero JDBC 드라이버

test 디렉토리

src/test/
-├── java/                           # 테스트 Java 코드
-│   └── axpFramework/              # 테스트 클래스
-└── resources/                     # 테스트 리소스
-    └── application.yaml           # 테스트 환경 설정

Java 소스 코드 구조

1. 공통 프레임워크 모듈 (axpFramework/)

axpFramework/
-├── AxpBootApplication.java        # 메인 애플리케이션 클래스
-├── ai/                             # AI 서비스
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-├── common/                         # 공통 기능
-│   ├── controller/                 # 공통 컨트롤러
-│   ├── database/                   # DB 공통 서비스
-│   ├── logging/                    # 로깅 AOP
-│   ├── security/                   # 암호화 유틸리티
-│   ├── token/                      # JWT 인증
-│   └── utils/                      # 공통 유틸리티
-├── config/                         # 설정 클래스
-│   ├── AxpDataSourceConfig.java    # 데이터소스 설정
-│   ├── AxpFilterConfig.java        # 필터 설정
-│   ├── AxpMyBatisResultInterceptor.java  # MyBatis 인터셉터
-│   ├── AxpRedisConfig.java         # Redis 설정
-│   ├── AxpSecurityConfig.java      # Spring Security 설정
-│   └── AxpWebConfig.java           # Web 설정 (CORS 등)
-├── filter/                         # 필터 클래스
-│   ├── auth/                       # JWT 인증 필터
-│   ├── logging/                    # 로깅 필터
-│   ├── security/                   # 보안 필터 (XSS, 복호화)
-│   └── xss/                        # XSS 유틸리티
-├── file/                           # 파일 관리
-│   ├── controller/
-│   └── service/
-├── mail/                           # 메일 발송
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-├── report/                         # 리포트 생성
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-└── sms/                            # SMS 발송
-    ├── controller/
-    ├── mapper/
-    └── service/

2. ESS 비즈니스 모듈 (ess/)

ess/
-├── admin/                          # 관리자 기능
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-├── auth/                           # 인증 기능
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-├── com/                            # 공통 기능
-│   ├── controller/
-│   ├── mapper/
-│   ├── service/
-│   └── utils/
-└── welfare/                        # 복지 기능
-    ├── controller/
-    ├── mapper/
-    └── service/

3. FCM 비즈니스 모듈 (fcm/)

fcm/
-├── com/                            # 공통 기능
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-├── hri/                            # HRI 기능
-│   ├── controller/
-│   ├── mapper/
-│   └── service/
-└── sys/                            # 시스템 기능
-    ├── controller/
-    ├── mapper/
-    └── service/

빌드 결과물 디렉토리

target/
-├── classes/                        # 컴파일된 클래스 파일
-├── generated-sources/              # 자동 생성된 소스
-├── maven-archiver/                 # Maven 아카이버 메타데이터
-├── test-classes/                   # 컴파일된 테스트 클래스
-└── AxpFramework-0.0.1-SNAPSHOT.war  # 빌드된 WAR 파일

로그 디렉토리

logs/
-├── AxpFramework/                   # 애플리케이션 로그
-│   └── AxpFramework-YYYY-MM-DD.N.log
-├── ess/                            # ESS 모듈 로그
-│   └── ess-log-YYYY-MM-DD.N.log
-└── fcm/                            # FCM 모듈 로그
-    └── fcm-log.log

디렉토리 역할 설명

src/main/java/

src/main/resources/

src/test/java/

target/

logs/

패키지 네이밍 규칙

  1. 소문자 사용: 모든 패키지명은 소문자로 작성
  2. 도메인별 분리: 비즈니스 로직은 도메인별로 패키지 분리
  3. 계층별 분리: controller, service, mapper로 계층 분리
  4. 공통 기능: axpFramework.common 패키지에 공통 기능 배치

다음 단계

`,35)]))}const u=s(l,[["render",i]]);export{m as __pageData,u as default}; diff --git a/assets/backend_project-structure_directory.md.E302WhzK.lean.js b/assets/backend_project-structure_directory.md.E302WhzK.lean.js deleted file mode 100644 index 179c6e7..0000000 --- a/assets/backend_project-structure_directory.md.E302WhzK.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as n,o as p,aG as e}from"./chunks/framework.CrOSaJJH.js";const m=JSON.parse('{"title":"전체 디렉토리 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/directory.md","filePath":"backend/project-structure/directory.md"}'),l={name:"backend/project-structure/directory.md"};function i(c,a,r,t,o,d){return p(),n("div",null,a[0]||(a[0]=[e("",35)]))}const u=s(l,[["render",i]]);export{m as __pageData,u as default}; diff --git a/assets/backend_project-structure_framework.md.DjVPDFTd.js b/assets/backend_project-structure_framework.md.DjVPDFTd.js new file mode 100644 index 0000000..3da05d8 --- /dev/null +++ b/assets/backend_project-structure_framework.md.DjVPDFTd.js @@ -0,0 +1,38 @@ +import{_ as a,c as s,o as e,aG as l}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"공통 프레임워크 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework.md","filePath":"backend/project-structure/framework.md"}'),n={name:"backend/project-structure/framework.md"};function t(o,i,p,r,h,d){return e(),s("div",null,i[0]||(i[0]=[l(`

공통 프레임워크 모듈

axpFramework 패키지는 모든 비즈니스 모듈에서 공통으로 사용하는 기능을 제공합니다.

모듈 구조

axpFramework/
+├── AxpBootApplication.java          # 메인 애플리케이션
+├── ai/                              # AI 서비스
+├── common/                          # 공통 기능
+├── config/                          # 설정 클래스
+├── filter/                          # 필터
+├── file/                            # 파일 관리
+├── mail/                            # 메일 발송
+├── report/                          # 리포트 생성
+└── sms/                             # SMS 발송

주요 모듈 설명

1. AI 서비스 (ai/)

Google Gemini AI를 연동하여 AI 기능을 제공합니다.

주요 클래스:

사용 예시:

java
@Autowired
+private AxpGeminiService geminiService;
+
+Map<String, Object> request = new HashMap<>();
+request.put("prompt", "질문");
+String response = geminiService.callGeminiAi(request);

2. 공통 기능 (common/)

2.1 Controller (common/controller/)

2.2 Database (common/database/)

2.3 Logging (common/logging/)

2.4 Security (common/security/)

2.5 Token (common/token/)

2.6 Utils (common/utils/)

3. 설정 클래스 (config/)

3.1 AxpDataSourceConfig

데이터베이스 연결을 설정합니다.

주요 Bean:

3.2 AxpRedisConfig

Redis 연결을 설정합니다.

주요 Bean:

3.3 AxpSecurityConfig

Spring Security를 설정합니다.

주요 설정:

3.4 AxpWebConfig

웹 관련 설정을 합니다.

주요 설정:

3.5 AxpFilterConfig

필터를 등록합니다.

등록된 필터:

4. 필터 (filter/)

4.1 Auth Filter (filter/auth/)

4.2 Logging Filter (filter/logging/)

4.3 Security Filter (filter/security/)

5. 파일 관리 (file/)

파일 업로드/다운로드를 처리합니다.

주요 클래스:

6. 메일 발송 (mail/)

이메일 발송 기능을 제공합니다.

주요 클래스:

7. 리포트 생성 (report/)

JasperReports를 사용하여 리포트를 생성합니다.

주요 클래스:

8. SMS 발송 (sms/)

SMS 발송 기능을 제공합니다.

주요 클래스:

공통 기능 사용법

프로시저 호출

java
@Autowired
+private AxpCommDbService dbService;
+
+Map<String, Object> requestBody = new HashMap<>();
+requestBody.put("procedure", "YOUR_PROCEDURE");
+requestBody.put("params", paramsMap);
+
+Map<String, Object> result = dbService.executeProcedure(requestBody);

Redis 사용

java
@Autowired
+private AxpCommRedisDbService redisService;
+
+// 토큰 저장
+Map<String, Object> result = redisService.setRedisToken(
+    uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
+);
+
+// 토큰 조회
+Map<String, Object> token = redisService.getRedisToken(uuid, "rediscache");

암호화

java
@Autowired
+private AxpCommAES128 aes128;
+
+// 암호화
+String encrypted = aes128.encrypt(plainText);
+
+// 복호화
+String decrypted = aes128.decrypt(encrypted);

다음 단계

`,77)]))}const g=a(n,[["render",t]]);export{k as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework.md.DjVPDFTd.lean.js b/assets/backend_project-structure_framework.md.DjVPDFTd.lean.js new file mode 100644 index 0000000..6c16fcd --- /dev/null +++ b/assets/backend_project-structure_framework.md.DjVPDFTd.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as e,aG as l}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"공통 프레임워크 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework.md","filePath":"backend/project-structure/framework.md"}'),n={name:"backend/project-structure/framework.md"};function t(o,i,p,r,h,d){return e(),s("div",null,i[0]||(i[0]=[l("",77)]))}const g=a(n,[["render",t]]);export{k as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework.md.hg4YzYX_.js b/assets/backend_project-structure_framework.md.hg4YzYX_.js deleted file mode 100644 index 4dcf290..0000000 --- a/assets/backend_project-structure_framework.md.hg4YzYX_.js +++ /dev/null @@ -1,38 +0,0 @@ -import{_ as a,c as s,o as e,aG as l}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"공통 프레임워크 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework.md","filePath":"backend/project-structure/framework.md"}'),n={name:"backend/project-structure/framework.md"};function t(o,i,p,r,h,d){return e(),s("div",null,i[0]||(i[0]=[l(`

공통 프레임워크 모듈

axpFramework 패키지는 모든 비즈니스 모듈에서 공통으로 사용하는 기능을 제공합니다.

모듈 구조

axpFramework/
-├── AxpBootApplication.java          # 메인 애플리케이션
-├── ai/                              # AI 서비스
-├── common/                          # 공통 기능
-├── config/                          # 설정 클래스
-├── filter/                          # 필터
-├── file/                            # 파일 관리
-├── mail/                            # 메일 발송
-├── report/                          # 리포트 생성
-└── sms/                             # SMS 발송

주요 모듈 설명

1. AI 서비스 (ai/)

Google Gemini AI를 연동하여 AI 기능을 제공합니다.

주요 클래스:

사용 예시:

java
@Autowired
-private AxpGeminiService geminiService;
-
-Map<String, Object> request = new HashMap<>();
-request.put("prompt", "질문");
-String response = geminiService.callGeminiAi(request);

2. 공통 기능 (common/)

2.1 Controller (common/controller/)

2.2 Database (common/database/)

2.3 Logging (common/logging/)

2.4 Security (common/security/)

2.5 Token (common/token/)

2.6 Utils (common/utils/)

3. 설정 클래스 (config/)

3.1 AxpDataSourceConfig

데이터베이스 연결을 설정합니다.

주요 Bean:

3.2 AxpRedisConfig

Redis 연결을 설정합니다.

주요 Bean:

3.3 AxpSecurityConfig

Spring Security를 설정합니다.

주요 설정:

3.4 AxpWebConfig

웹 관련 설정을 합니다.

주요 설정:

3.5 AxpFilterConfig

필터를 등록합니다.

등록된 필터:

4. 필터 (filter/)

4.1 Auth Filter (filter/auth/)

4.2 Logging Filter (filter/logging/)

4.3 Security Filter (filter/security/)

5. 파일 관리 (file/)

파일 업로드/다운로드를 처리합니다.

주요 클래스:

6. 메일 발송 (mail/)

이메일 발송 기능을 제공합니다.

주요 클래스:

7. 리포트 생성 (report/)

JasperReports를 사용하여 리포트를 생성합니다.

주요 클래스:

8. SMS 발송 (sms/)

SMS 발송 기능을 제공합니다.

주요 클래스:

공통 기능 사용법

프로시저 호출

java
@Autowired
-private AxpCommDbService dbService;
-
-Map<String, Object> requestBody = new HashMap<>();
-requestBody.put("procedure", "YOUR_PROCEDURE");
-requestBody.put("params", paramsMap);
-
-Map<String, Object> result = dbService.executeProcedure(requestBody);

Redis 사용

java
@Autowired
-private AxpCommRedisDbService redisService;
-
-// 토큰 저장
-Map<String, Object> result = redisService.setRedisToken(
-    uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
-);
-
-// 토큰 조회
-Map<String, Object> token = redisService.getRedisToken(uuid, "rediscache");

암호화

java
@Autowired
-private AxpCommAES128 aes128;
-
-// 암호화
-String encrypted = aes128.encrypt(plainText);
-
-// 복호화
-String decrypted = aes128.decrypt(encrypted);

다음 단계

`,77)]))}const g=a(n,[["render",t]]);export{k as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework.md.hg4YzYX_.lean.js b/assets/backend_project-structure_framework.md.hg4YzYX_.lean.js deleted file mode 100644 index 0cb1134..0000000 --- a/assets/backend_project-structure_framework.md.hg4YzYX_.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as s,o as e,aG as l}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"공통 프레임워크 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework.md","filePath":"backend/project-structure/framework.md"}'),n={name:"backend/project-structure/framework.md"};function t(o,i,p,r,h,d){return e(),s("div",null,i[0]||(i[0]=[l("",77)]))}const g=a(n,[["render",t]]);export{k as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_ai.md.CAABzOvA.js b/assets/backend_project-structure_framework_ai.md.CAABzOvA.js new file mode 100644 index 0000000..0a3ee55 --- /dev/null +++ b/assets/backend_project-structure_framework_ai.md.CAABzOvA.js @@ -0,0 +1,82 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"AI 서비스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/ai.md","filePath":"backend/project-structure/framework/ai.md"}'),t={name:"backend/project-structure/framework/ai.md"};function l(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

AI 서비스 모듈

Google Gemini AI를 연동하여 AI 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/ai/
+├── controller/
+│   └── AxpAiController.java        # AI API 컨트롤러
+├── mapper/
+│   └── AxpAiMapper.java            # AI 관련 Mapper (선택적)
+└── service/
+    ├── AxpAiService.java           # AI 공통 서비스
+    └── AxpGeminiService.java       # Gemini AI 서비스 구현

주요 클래스

1. AxpAiController

위치: axpFramework.ai.controller.AxpAiController

역할: AI 서비스 API 엔드포인트 제공

주요 메서드:

사용 예시:

java
@RestController
+@RequestMapping("/api/ai")
+public class AxpAiController extends AxpBaseWebController {
+    
+    @Resource(name = "AxpGeminiService")
+    private AxpGeminiService axpGeminiService;
+    
+    @PostMapping("/genai")
+    public ResponseEntity<String> genai(@RequestBody Map<String, Object> param) {
+        String response = axpGeminiService.callGeminiAi(param);
+        return getJSONSuccessResponse(response);
+    }
+}

2. AxpGeminiService

위치: axpFramework.ai.service.AxpGeminiService

역할: Google Gemini AI API 호출 처리

주요 메서드:

사용 예시:

java
@Service("AxpGeminiService")
+public class AxpGeminiService {
+    
+    @Resource(name = "AxpAiService")
+    private AxpAiService axpAiService;
+    
+    public String callGeminiAi(Map<String, Object> param) throws Exception {
+        String apiKey = axpAiService.getGeminiKey();
+        Client client = Client.builder().apiKey(apiKey).build();
+        
+        Map<String, Object> paramObj = (Map<String, Object>) param.get("params");
+        GenerateContentResponse response = client.models.generateContent(
+            "gemini-2.5-flash",
+            paramObj.get("prompt").toString(),
+            null
+        );
+        
+        return response.text();
+    }
+}

3. AxpAiService

위치: axpFramework.ai.service.AxpAiService

역할: AI 서비스 공통 기능 (API 키 관리 등)

주요 메서드:

설정

AI 설정 파일

위치: src/main/resources/config/ai-config.yaml

yaml
gemini:
+  api-key: your-google-api-key

application.yaml 설정

yaml
# AI 서비스 관련 설정은 ai-config.yaml에서 관리

API 엔드포인트

POST /api/ai/genai

설명: Gemini AI에 질문을 전송하고 응답을 받습니다.

요청 본문:

json
{
+  "params": {
+    "prompt": "질문 내용"
+  }
+}

응답:

json
{
+  "status": "S",
+  "message": "",
+  "data": "AI 응답 텍스트"
+}

사용 방법

1. 서비스에서 직접 사용

java
@Service
+public class MyService {
+    
+    @Resource(name = "AxpGeminiService")
+    private AxpGeminiService geminiService;
+    
+    public String askAI(String question) throws Exception {
+        Map<String, Object> param = new HashMap<>();
+        Map<String, Object> params = new HashMap<>();
+        params.put("prompt", question);
+        param.put("params", params);
+        
+        return geminiService.callGeminiAi(param);
+    }
+}

2. 컨트롤러에서 사용

java
@RestController
+@RequestMapping("/api/my")
+public class MyController extends AxpBaseWebController {
+    
+    @Resource(name = "AxpGeminiService")
+    private AxpGeminiService geminiService;
+    
+    @PostMapping("/ask")
+    public ResponseEntity<String> ask(@RequestBody Map<String, Object> request) {
+        try {
+            String response = geminiService.callGeminiAi(request);
+            return getJSONSuccessResponse(response);
+        } catch (Exception e) {
+            return getJSONErrorResponse("AI 호출 실패", null);
+        }
+    }
+}

의존성

Maven 의존성

xml
<dependency>
+    <groupId>com.google.genai</groupId>
+    <artifactId>genai</artifactId>
+    <version>1.11.0</version>
+</dependency>

주의사항

  1. API 키 보안: API 키는 설정 파일에 저장하며, Git에 커밋하지 않도록 주의
  2. 비용 관리: Gemini API 사용 시 비용이 발생할 수 있으므로 사용량 모니터링 필요
  3. Rate Limit: API 호출 제한이 있을 수 있으므로 적절한 재시도 로직 구현 권장
  4. 에러 처리: API 호출 실패 시 적절한 에러 메시지 반환

다음 단계

`,49)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_ai.md.CAABzOvA.lean.js b/assets/backend_project-structure_framework_ai.md.CAABzOvA.lean.js new file mode 100644 index 0000000..f2a2c1f --- /dev/null +++ b/assets/backend_project-structure_framework_ai.md.CAABzOvA.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"AI 서비스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/ai.md","filePath":"backend/project-structure/framework/ai.md"}'),t={name:"backend/project-structure/framework/ai.md"};function l(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",49)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_ai.md.CXEsW87D.js b/assets/backend_project-structure_framework_ai.md.CXEsW87D.js deleted file mode 100644 index 9580b80..0000000 --- a/assets/backend_project-structure_framework_ai.md.CXEsW87D.js +++ /dev/null @@ -1,82 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"AI 서비스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/ai.md","filePath":"backend/project-structure/framework/ai.md"}'),t={name:"backend/project-structure/framework/ai.md"};function l(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

AI 서비스 모듈

Google Gemini AI를 연동하여 AI 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/ai/
-├── controller/
-│   └── AxpAiController.java        # AI API 컨트롤러
-├── mapper/
-│   └── AxpAiMapper.java            # AI 관련 Mapper (선택적)
-└── service/
-    ├── AxpAiService.java           # AI 공통 서비스
-    └── AxpGeminiService.java       # Gemini AI 서비스 구현

주요 클래스

1. AxpAiController

위치: axpFramework.ai.controller.AxpAiController

역할: AI 서비스 API 엔드포인트 제공

주요 메서드:

사용 예시:

java
@RestController
-@RequestMapping("/api/ai")
-public class AxpAiController extends AxpBaseWebController {
-    
-    @Resource(name = "AxpGeminiService")
-    private AxpGeminiService axpGeminiService;
-    
-    @PostMapping("/genai")
-    public ResponseEntity<String> genai(@RequestBody Map<String, Object> param) {
-        String response = axpGeminiService.callGeminiAi(param);
-        return getJSONSuccessResponse(response);
-    }
-}

2. AxpGeminiService

위치: axpFramework.ai.service.AxpGeminiService

역할: Google Gemini AI API 호출 처리

주요 메서드:

사용 예시:

java
@Service("AxpGeminiService")
-public class AxpGeminiService {
-    
-    @Resource(name = "AxpAiService")
-    private AxpAiService axpAiService;
-    
-    public String callGeminiAi(Map<String, Object> param) throws Exception {
-        String apiKey = axpAiService.getGeminiKey();
-        Client client = Client.builder().apiKey(apiKey).build();
-        
-        Map<String, Object> paramObj = (Map<String, Object>) param.get("params");
-        GenerateContentResponse response = client.models.generateContent(
-            "gemini-2.5-flash",
-            paramObj.get("prompt").toString(),
-            null
-        );
-        
-        return response.text();
-    }
-}

3. AxpAiService

위치: axpFramework.ai.service.AxpAiService

역할: AI 서비스 공통 기능 (API 키 관리 등)

주요 메서드:

설정

AI 설정 파일

위치: src/main/resources/config/ai-config.yaml

yaml
gemini:
-  api-key: your-google-api-key

application.yaml 설정

yaml
# AI 서비스 관련 설정은 ai-config.yaml에서 관리

API 엔드포인트

POST /api/ai/genai

설명: Gemini AI에 질문을 전송하고 응답을 받습니다.

요청 본문:

json
{
-  "params": {
-    "prompt": "질문 내용"
-  }
-}

응답:

json
{
-  "status": "S",
-  "message": "",
-  "data": "AI 응답 텍스트"
-}

사용 방법

1. 서비스에서 직접 사용

java
@Service
-public class MyService {
-    
-    @Resource(name = "AxpGeminiService")
-    private AxpGeminiService geminiService;
-    
-    public String askAI(String question) throws Exception {
-        Map<String, Object> param = new HashMap<>();
-        Map<String, Object> params = new HashMap<>();
-        params.put("prompt", question);
-        param.put("params", params);
-        
-        return geminiService.callGeminiAi(param);
-    }
-}

2. 컨트롤러에서 사용

java
@RestController
-@RequestMapping("/api/my")
-public class MyController extends AxpBaseWebController {
-    
-    @Resource(name = "AxpGeminiService")
-    private AxpGeminiService geminiService;
-    
-    @PostMapping("/ask")
-    public ResponseEntity<String> ask(@RequestBody Map<String, Object> request) {
-        try {
-            String response = geminiService.callGeminiAi(request);
-            return getJSONSuccessResponse(response);
-        } catch (Exception e) {
-            return getJSONErrorResponse("AI 호출 실패", null);
-        }
-    }
-}

의존성

Maven 의존성

xml
<dependency>
-    <groupId>com.google.genai</groupId>
-    <artifactId>genai</artifactId>
-    <version>1.11.0</version>
-</dependency>

주의사항

  1. API 키 보안: API 키는 설정 파일에 저장하며, Git에 커밋하지 않도록 주의
  2. 비용 관리: Gemini API 사용 시 비용이 발생할 수 있으므로 사용량 모니터링 필요
  3. Rate Limit: API 호출 제한이 있을 수 있으므로 적절한 재시도 로직 구현 권장
  4. 에러 처리: API 호출 실패 시 적절한 에러 메시지 반환

다음 단계

`,49)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_ai.md.CXEsW87D.lean.js b/assets/backend_project-structure_framework_ai.md.CXEsW87D.lean.js deleted file mode 100644 index b226979..0000000 --- a/assets/backend_project-structure_framework_ai.md.CXEsW87D.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"AI 서비스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/ai.md","filePath":"backend/project-structure/framework/ai.md"}'),t={name:"backend/project-structure/framework/ai.md"};function l(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",49)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_common.md.Cyjv-RCo.js b/assets/backend_project-structure_framework_common.md.Cyjv-RCo.js new file mode 100644 index 0000000..d37ba9e --- /dev/null +++ b/assets/backend_project-structure_framework_common.md.Cyjv-RCo.js @@ -0,0 +1,94 @@ +import{_ as a,c as i,o as n,aG as p}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"공통 기능 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/common.md","filePath":"backend/project-structure/framework/common.md"}'),l={name:"backend/project-structure/framework/common.md"};function e(t,s,h,k,r,o){return n(),i("div",null,s[0]||(s[0]=[p(`

공통 기능 모듈

모든 비즈니스 모듈에서 공통으로 사용하는 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/common/
+├── controller/                      # 공통 컨트롤러
+│   ├── AxpBaseWebController.java   # 기본 웹 컨트롤러
+│   └── AxpCommAutoScheduler.java   # 스케줄러 컨트롤러
+├── database/                        # DB 공통 서비스
+│   ├── controller/
+│   │   ├── AxpCommDbController.java      # DB 프로시저 호출 컨트롤러
+│   │   └── AxpCommRedisController.java   # Redis 관리 컨트롤러
+│   ├── mapper/
+│   │   ├── AxpCommProcMapper.java        # 공통 프로시저 매퍼
+│   │   ├── oracle/                       # Oracle 전용 매퍼
+│   │   ├── postgres/                     # PostgreSQL 전용 매퍼
+│   │   └── tibero/                       # Tibero 전용 매퍼
+│   └── service/
+│       ├── AxpCommDbService.java         # DB 프로시저 서비스
+│       ├── AxpCommRedisDbService.java    # Redis 서비스
+│       └── adapter/
+│           └── AxpCommDbAdapterService.java  # DB 어댑터 서비스
+├── logging/                         # 로깅 AOP
+│   ├── annotation/
+│   │   └── AxpCommLogAnnotation.java     # 로깅 어노테이션
+│   └── aop/
+│       └── AxpCommLogAop.java           # AOP 기반 로깅
+├── security/                        # 암호화 유틸리티
+│   └── crypto/
+│       ├── AxpCommAES128.java          # AES-128 암호화
+│       ├── AxpCommRsa.java              # RSA 암호화
+│       ├── AxpCommMD5Util.java          # MD5 해시
+│       └── AxpCommSHA256Util.java       # SHA-256 해시
+├── token/                           # JWT 인증
+│   ├── controller/
+│   │   └── AxpCommAuthController.java   # 토큰 재발급 컨트롤러
+│   └── service/
+│       └── AxpCommAuthService.java      # JWT 토큰 서비스
+└── utils/                           # 공통 유틸리티
+    ├── AxpCommApiHttpStatus.java       # HTTP 상태 코드 상수
+    ├── AxpCommConst.java               # 공통 상수
+    ├── AxpCommFileSftpUtil.java        # SFTP 파일 유틸리티
+    ├── AxpCommFileUtil.java            # 파일 유틸리티
+    ├── AxpCommHtmlUtil.java            # HTML 유틸리티
+    ├── AxpCommMailUtil.java            # 메일 유틸리티
+    ├── AxpCommPaging.java              # 페이징 유틸리티
+    ├── AxpCommProperty.java            # 프로퍼티 유틸리티
+    ├── AxpCommSecurityUtil.java        # 보안 유틸리티
+    ├── AxpCommUtil.java                # 공통 유틸리티 (핵심)
+    ├── AxpCommValidationUtil.java      # 검증 유틸리티
+    ├── AxpCommVO.java                  # 공통 VO
+    └── view/                           # 뷰 관련 유틸리티
+        ├── AxpCommValidationUtil.java
+        ├── AxpComValid1.java
+        ├── AxpComValid2.java
+        ├── CommFileDownView.java        # 파일 다운로드 뷰
+        └── CommJxlsView.java            # JXLS 뷰

주요 클래스

1. AxpBaseWebController

위치: axpFramework.common.controller.AxpBaseWebController

역할: 모든 컨트롤러의 기본 클래스

주요 기능:

주요 메서드:

사용 예시:

java
@RestController
+@RequestMapping("/api/my")
+public class MyController extends AxpBaseWebController {
+    
+    @GetMapping("/data")
+    public ResponseEntity<String> getData() {
+        try {
+            Object data = service.getData();
+            return getJSONSuccessResponse(data);
+        } catch (Exception e) {
+            return getJSONErrorResponse("데이터 조회 실패", null);
+        }
+    }
+}

2. AxpCommDbService

위치: axpFramework.common.database.service.AxpCommDbService

역할: 데이터베이스 프로시저 호출 서비스

주요 메서드:

사용 예시:

java
@Resource(name = "AxpCommDbService")
+private AxpCommDbService axpCommDbService;
+
+Map<String, Object> requestBody = new HashMap<>();
+requestBody.put("procedure", "P_USER_LIST");
+Map<String, Object> params = new HashMap<>();
+params.put("V_P_USER_ID", "USER001");
+requestBody.put("params", params);
+
+Map<String, Object> result = axpCommDbService.executeProcedure(requestBody);

3. AxpCommRedisDbService

위치: axpFramework.common.database.service.AxpCommRedisDbService

역할: Redis 데이터 관리 서비스

주요 메서드:

4. AxpCommAuthService

위치: axpFramework.common.token.service.AxpCommAuthService

역할: JWT 토큰 생성 및 검증

주요 메서드:

5. AxpCommUtil

위치: axpFramework.common.utils.AxpCommUtil

역할: 공통 유틸리티 클래스 (핵심)

주요 메서드:

사용 예시:

java
@Resource(name = "AxpCommUtil")
+private AxpCommUtil axpCommUtil;
+
+// 빈 값 체크
+if (axpCommUtil.isEmpty(value)) {
+    // 처리
+}
+
+// Map 키 소문자 변환
+Map<String, Object> lowerMap = AxpCommUtil.lowerKeySetMap(originalMap);
+
+// 클라이언트 IP 추출
+String clientIp = AxpCommUtil.getClientIp(request);

6. 암호화 유틸리티

AxpCommAES128

AxpCommRsa

AxpCommMD5Util

AxpCommSHA256Util

사용 예시:

java
@Resource(name = "AxpCommAES128")
+private AxpCommAES128 aes128;
+
+// 암호화
+String encrypted = aes128.encrypt("평문");
+
+// 복호화
+String decrypted = aes128.decrypt(encrypted);

공통 상수

AxpCommConst

위치: axpFramework.common.utils.AxpCommConst

주요 상수:

다음 단계

`,56)]))}const E=a(l,[["render",e]]);export{d as __pageData,E as default}; diff --git a/assets/backend_project-structure_framework_common.md.Cyjv-RCo.lean.js b/assets/backend_project-structure_framework_common.md.Cyjv-RCo.lean.js new file mode 100644 index 0000000..6b2fad5 --- /dev/null +++ b/assets/backend_project-structure_framework_common.md.Cyjv-RCo.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as p}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"공통 기능 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/common.md","filePath":"backend/project-structure/framework/common.md"}'),l={name:"backend/project-structure/framework/common.md"};function e(t,s,h,k,r,o){return n(),i("div",null,s[0]||(s[0]=[p("",56)]))}const E=a(l,[["render",e]]);export{d as __pageData,E as default}; diff --git a/assets/backend_project-structure_framework_common.md.D-56V9qr.js b/assets/backend_project-structure_framework_common.md.D-56V9qr.js deleted file mode 100644 index b19b8bc..0000000 --- a/assets/backend_project-structure_framework_common.md.D-56V9qr.js +++ /dev/null @@ -1,94 +0,0 @@ -import{_ as a,c as i,o as n,aG as p}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"공통 기능 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/common.md","filePath":"backend/project-structure/framework/common.md"}'),l={name:"backend/project-structure/framework/common.md"};function e(t,s,h,k,r,o){return n(),i("div",null,s[0]||(s[0]=[p(`

공통 기능 모듈

모든 비즈니스 모듈에서 공통으로 사용하는 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/common/
-├── controller/                      # 공통 컨트롤러
-│   ├── AxpBaseWebController.java   # 기본 웹 컨트롤러
-│   └── AxpCommAutoScheduler.java   # 스케줄러 컨트롤러
-├── database/                        # DB 공통 서비스
-│   ├── controller/
-│   │   ├── AxpCommDbController.java      # DB 프로시저 호출 컨트롤러
-│   │   └── AxpCommRedisController.java   # Redis 관리 컨트롤러
-│   ├── mapper/
-│   │   ├── AxpCommProcMapper.java        # 공통 프로시저 매퍼
-│   │   ├── oracle/                       # Oracle 전용 매퍼
-│   │   ├── postgres/                     # PostgreSQL 전용 매퍼
-│   │   └── tibero/                       # Tibero 전용 매퍼
-│   └── service/
-│       ├── AxpCommDbService.java         # DB 프로시저 서비스
-│       ├── AxpCommRedisDbService.java    # Redis 서비스
-│       └── adapter/
-│           └── AxpCommDbAdapterService.java  # DB 어댑터 서비스
-├── logging/                         # 로깅 AOP
-│   ├── annotation/
-│   │   └── AxpCommLogAnnotation.java     # 로깅 어노테이션
-│   └── aop/
-│       └── AxpCommLogAop.java           # AOP 기반 로깅
-├── security/                        # 암호화 유틸리티
-│   └── crypto/
-│       ├── AxpCommAES128.java          # AES-128 암호화
-│       ├── AxpCommRsa.java              # RSA 암호화
-│       ├── AxpCommMD5Util.java          # MD5 해시
-│       └── AxpCommSHA256Util.java       # SHA-256 해시
-├── token/                           # JWT 인증
-│   ├── controller/
-│   │   └── AxpCommAuthController.java   # 토큰 재발급 컨트롤러
-│   └── service/
-│       └── AxpCommAuthService.java      # JWT 토큰 서비스
-└── utils/                           # 공통 유틸리티
-    ├── AxpCommApiHttpStatus.java       # HTTP 상태 코드 상수
-    ├── AxpCommConst.java               # 공통 상수
-    ├── AxpCommFileSftpUtil.java        # SFTP 파일 유틸리티
-    ├── AxpCommFileUtil.java            # 파일 유틸리티
-    ├── AxpCommHtmlUtil.java            # HTML 유틸리티
-    ├── AxpCommMailUtil.java            # 메일 유틸리티
-    ├── AxpCommPaging.java              # 페이징 유틸리티
-    ├── AxpCommProperty.java            # 프로퍼티 유틸리티
-    ├── AxpCommSecurityUtil.java        # 보안 유틸리티
-    ├── AxpCommUtil.java                # 공통 유틸리티 (핵심)
-    ├── AxpCommValidationUtil.java      # 검증 유틸리티
-    ├── AxpCommVO.java                  # 공통 VO
-    └── view/                           # 뷰 관련 유틸리티
-        ├── AxpCommValidationUtil.java
-        ├── AxpComValid1.java
-        ├── AxpComValid2.java
-        ├── CommFileDownView.java        # 파일 다운로드 뷰
-        └── CommJxlsView.java            # JXLS 뷰

주요 클래스

1. AxpBaseWebController

위치: axpFramework.common.controller.AxpBaseWebController

역할: 모든 컨트롤러의 기본 클래스

주요 기능:

주요 메서드:

사용 예시:

java
@RestController
-@RequestMapping("/api/my")
-public class MyController extends AxpBaseWebController {
-    
-    @GetMapping("/data")
-    public ResponseEntity<String> getData() {
-        try {
-            Object data = service.getData();
-            return getJSONSuccessResponse(data);
-        } catch (Exception e) {
-            return getJSONErrorResponse("데이터 조회 실패", null);
-        }
-    }
-}

2. AxpCommDbService

위치: axpFramework.common.database.service.AxpCommDbService

역할: 데이터베이스 프로시저 호출 서비스

주요 메서드:

사용 예시:

java
@Resource(name = "AxpCommDbService")
-private AxpCommDbService axpCommDbService;
-
-Map<String, Object> requestBody = new HashMap<>();
-requestBody.put("procedure", "P_USER_LIST");
-Map<String, Object> params = new HashMap<>();
-params.put("V_P_USER_ID", "USER001");
-requestBody.put("params", params);
-
-Map<String, Object> result = axpCommDbService.executeProcedure(requestBody);

3. AxpCommRedisDbService

위치: axpFramework.common.database.service.AxpCommRedisDbService

역할: Redis 데이터 관리 서비스

주요 메서드:

4. AxpCommAuthService

위치: axpFramework.common.token.service.AxpCommAuthService

역할: JWT 토큰 생성 및 검증

주요 메서드:

5. AxpCommUtil

위치: axpFramework.common.utils.AxpCommUtil

역할: 공통 유틸리티 클래스 (핵심)

주요 메서드:

사용 예시:

java
@Resource(name = "AxpCommUtil")
-private AxpCommUtil axpCommUtil;
-
-// 빈 값 체크
-if (axpCommUtil.isEmpty(value)) {
-    // 처리
-}
-
-// Map 키 소문자 변환
-Map<String, Object> lowerMap = AxpCommUtil.lowerKeySetMap(originalMap);
-
-// 클라이언트 IP 추출
-String clientIp = AxpCommUtil.getClientIp(request);

6. 암호화 유틸리티

AxpCommAES128

AxpCommRsa

AxpCommMD5Util

AxpCommSHA256Util

사용 예시:

java
@Resource(name = "AxpCommAES128")
-private AxpCommAES128 aes128;
-
-// 암호화
-String encrypted = aes128.encrypt("평문");
-
-// 복호화
-String decrypted = aes128.decrypt(encrypted);

공통 상수

AxpCommConst

위치: axpFramework.common.utils.AxpCommConst

주요 상수:

다음 단계

`,56)]))}const E=a(l,[["render",e]]);export{d as __pageData,E as default}; diff --git a/assets/backend_project-structure_framework_common.md.D-56V9qr.lean.js b/assets/backend_project-structure_framework_common.md.D-56V9qr.lean.js deleted file mode 100644 index 29168af..0000000 --- a/assets/backend_project-structure_framework_common.md.D-56V9qr.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as p}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"공통 기능 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/common.md","filePath":"backend/project-structure/framework/common.md"}'),l={name:"backend/project-structure/framework/common.md"};function e(t,s,h,k,r,o){return n(),i("div",null,s[0]||(s[0]=[p("",56)]))}const E=a(l,[["render",e]]);export{d as __pageData,E as default}; diff --git a/assets/backend_project-structure_framework_config.md.CgqQNZgV.js b/assets/backend_project-structure_framework_config.md.CgqQNZgV.js new file mode 100644 index 0000000..b9b88a8 --- /dev/null +++ b/assets/backend_project-structure_framework_config.md.CgqQNZgV.js @@ -0,0 +1,114 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"설정 클래스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/config.md","filePath":"backend/project-structure/framework/config.md"}'),t={name:"backend/project-structure/framework/config.md"};function p(h,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

설정 클래스 모듈

Spring Boot 애플리케이션의 핵심 설정을 담당하는 클래스들입니다.

모듈 구조

axpFramework/config/
+├── AxpDataSourceConfig.java        # 데이터소스 설정
+├── AxpFilterConfig.java            # 필터 설정
+├── AxpMyBatisResultInterceptor.java  # MyBatis 결과 인터셉터
+├── AxpRedisConfig.java             # Redis 설정
+├── AxpSecurityConfig.java          # Spring Security 설정
+└── AxpWebConfig.java               # Web 설정 (CORS 등)

주요 설정 클래스

1. AxpDataSourceConfig

위치: axpFramework.config.AxpDataSourceConfig

역할: 다중 데이터베이스 데이터소스 설정

지원 데이터베이스:

주요 기능:

설정 예시:

java
@Configuration
+public class AxpDataSourceConfig {
+    
+    @Configuration
+    @ConditionalOnProperty(prefix = "app.datasource", name = "type", 
+                         havingValue = "tibero", matchIfMissing = true)
+    static class TiberoDataSourceConfiguration {
+        
+        @Bean("tiberoDataSource")
+        @Primary
+        public DataSource tiberoDataSource(...) {
+            HikariDataSource dataSource = DataSourceBuilder.create()
+                .type(HikariDataSource.class)
+                .url(jdbcUrl)
+                .username(username)
+                .password(password)
+                .driverClassName(driverClassName)
+                .build();
+            
+            // HikariCP 설정
+            dataSource.setMinimumIdle(10);
+            dataSource.setMaximumPoolSize(50);
+            dataSource.setConnectionTimeout(120000);
+            
+            return dataSource;
+        }
+    }
+}

HikariCP 설정:

2. AxpRedisConfig

위치: axpFramework.config.AxpRedisConfig

역할: Redis 연결 설정 (다중 인스턴스 지원)

지원 인스턴스:

주요 기능:

설정 예시:

java
@Configuration
+public class AxpRedisConfig {
+    
+    @Bean("cacheRedisConnectionFactory")
+    public LettuceConnectionFactory cacheRedisConnectionFactory(...) {
+        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
+        config.setHostName(cacheHost);
+        config.setPort(cachePort);
+        config.setPassword(cachePassword);
+        config.setDatabase(cacheDatabase);
+        
+        return new LettuceConnectionFactory(config);
+    }
+    
+    @Bean("cacheRedisTemplate")
+    public RedisTemplate<String, Object> cacheRedisTemplate(...) {
+        RedisTemplate<String, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(cacheRedisConnectionFactory);
+        template.setKeySerializer(new StringRedisSerializer());
+        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
+        return template;
+    }
+}

3. AxpSecurityConfig

위치: axpFramework.config.AxpSecurityConfig

역할: Spring Security 설정

주요 기능:

설정 예시:

java
@Configuration
+@EnableWebSecurity
+public class AxpSecurityConfig {
+    
+    @Bean
+    public SecurityFilterChain securityFilterChain(...) {
+        http.csrf(csrf -> csrf.disable())
+            .authorizeHttpRequests(auth -> {
+                auth.requestMatchers(excludedUris).permitAll();
+                auth.anyRequest().authenticated();
+            })
+            .addFilterBefore(jwtAuthenticationFilter, 
+                           UsernamePasswordAuthenticationFilter.class)
+            .exceptionHandling(ex -> {
+                ex.accessDeniedHandler(accessDeniedHandler);
+                ex.authenticationEntryPoint(authenticationEntryPoint);
+            });
+        
+        // 보안 헤더 설정
+        http.headers(headers -> {
+            headers.contentSecurityPolicy("...");
+            headers.frameOptions(FrameOptionsConfig::deny);
+            headers.referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN);
+        });
+        
+        return http.build();
+    }
+}

보안 헤더:

4. AxpWebConfig

위치: axpFramework.config.AxpWebConfig

역할: Web 설정 (CORS 등)

주요 기능:

설정 예시:

java
@Configuration
+public class AxpWebConfig implements WebMvcConfigurer {
+    
+    @Value("\${cors.allowed-origins}")
+    private String[] allowedOrigins;
+    
+    @Value("\${cors.mappings}")
+    private String[] mappings;
+    
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping(mappings)
+            .allowedOrigins(allowedOrigins)
+            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
+            .allowedHeaders("*")
+            .exposedHeaders("Authorization")
+            .allowCredentials(true)
+            .maxAge(3600);
+    }
+}

5. AxpFilterConfig

위치: axpFramework.config.AxpFilterConfig

역할: 커스텀 필터 등록

등록 필터:

설정 예시:

java
@Configuration
+public class AxpFilterConfig {
+    
+    @Bean
+    public FilterRegistrationBean<AxpXssFilter> xssFilter() {
+        FilterRegistrationBean<AxpXssFilter> registration = 
+            new FilterRegistrationBean<>();
+        registration.setFilter(new AxpXssFilter());
+        registration.addUrlPatterns("/*");
+        registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
+        return registration;
+    }
+}

6. AxpMyBatisResultInterceptor

위치: axpFramework.config.AxpMyBatisResultInterceptor

역할: MyBatis 결과 처리 인터셉터

주요 기능:

설정 파일 위치

application.yaml

위치: src/main/resources/application.yaml

기본 설정 파일

환경별 설정 파일

위치: src/main/resources/config/

설정 우선순위

  1. application-prod.yaml (운영)
  2. application-dev.yaml (개발)
  3. application-local.yaml (로컬)
  4. application.yaml (기본)

다음 단계

`,64)]))}const o=i(t,[["render",p]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_config.md.CgqQNZgV.lean.js b/assets/backend_project-structure_framework_config.md.CgqQNZgV.lean.js new file mode 100644 index 0000000..389374e --- /dev/null +++ b/assets/backend_project-structure_framework_config.md.CgqQNZgV.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"설정 클래스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/config.md","filePath":"backend/project-structure/framework/config.md"}'),t={name:"backend/project-structure/framework/config.md"};function p(h,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",64)]))}const o=i(t,[["render",p]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_config.md.Da7CdaDm.js b/assets/backend_project-structure_framework_config.md.Da7CdaDm.js deleted file mode 100644 index b9231aa..0000000 --- a/assets/backend_project-structure_framework_config.md.Da7CdaDm.js +++ /dev/null @@ -1,114 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"설정 클래스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/config.md","filePath":"backend/project-structure/framework/config.md"}'),t={name:"backend/project-structure/framework/config.md"};function p(h,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

설정 클래스 모듈

Spring Boot 애플리케이션의 핵심 설정을 담당하는 클래스들입니다.

모듈 구조

axpFramework/config/
-├── AxpDataSourceConfig.java        # 데이터소스 설정
-├── AxpFilterConfig.java            # 필터 설정
-├── AxpMyBatisResultInterceptor.java  # MyBatis 결과 인터셉터
-├── AxpRedisConfig.java             # Redis 설정
-├── AxpSecurityConfig.java          # Spring Security 설정
-└── AxpWebConfig.java               # Web 설정 (CORS 등)

주요 설정 클래스

1. AxpDataSourceConfig

위치: axpFramework.config.AxpDataSourceConfig

역할: 다중 데이터베이스 데이터소스 설정

지원 데이터베이스:

주요 기능:

설정 예시:

java
@Configuration
-public class AxpDataSourceConfig {
-    
-    @Configuration
-    @ConditionalOnProperty(prefix = "app.datasource", name = "type", 
-                         havingValue = "tibero", matchIfMissing = true)
-    static class TiberoDataSourceConfiguration {
-        
-        @Bean("tiberoDataSource")
-        @Primary
-        public DataSource tiberoDataSource(...) {
-            HikariDataSource dataSource = DataSourceBuilder.create()
-                .type(HikariDataSource.class)
-                .url(jdbcUrl)
-                .username(username)
-                .password(password)
-                .driverClassName(driverClassName)
-                .build();
-            
-            // HikariCP 설정
-            dataSource.setMinimumIdle(10);
-            dataSource.setMaximumPoolSize(50);
-            dataSource.setConnectionTimeout(120000);
-            
-            return dataSource;
-        }
-    }
-}

HikariCP 설정:

2. AxpRedisConfig

위치: axpFramework.config.AxpRedisConfig

역할: Redis 연결 설정 (다중 인스턴스 지원)

지원 인스턴스:

주요 기능:

설정 예시:

java
@Configuration
-public class AxpRedisConfig {
-    
-    @Bean("cacheRedisConnectionFactory")
-    public LettuceConnectionFactory cacheRedisConnectionFactory(...) {
-        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
-        config.setHostName(cacheHost);
-        config.setPort(cachePort);
-        config.setPassword(cachePassword);
-        config.setDatabase(cacheDatabase);
-        
-        return new LettuceConnectionFactory(config);
-    }
-    
-    @Bean("cacheRedisTemplate")
-    public RedisTemplate<String, Object> cacheRedisTemplate(...) {
-        RedisTemplate<String, Object> template = new RedisTemplate<>();
-        template.setConnectionFactory(cacheRedisConnectionFactory);
-        template.setKeySerializer(new StringRedisSerializer());
-        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
-        return template;
-    }
-}

3. AxpSecurityConfig

위치: axpFramework.config.AxpSecurityConfig

역할: Spring Security 설정

주요 기능:

설정 예시:

java
@Configuration
-@EnableWebSecurity
-public class AxpSecurityConfig {
-    
-    @Bean
-    public SecurityFilterChain securityFilterChain(...) {
-        http.csrf(csrf -> csrf.disable())
-            .authorizeHttpRequests(auth -> {
-                auth.requestMatchers(excludedUris).permitAll();
-                auth.anyRequest().authenticated();
-            })
-            .addFilterBefore(jwtAuthenticationFilter, 
-                           UsernamePasswordAuthenticationFilter.class)
-            .exceptionHandling(ex -> {
-                ex.accessDeniedHandler(accessDeniedHandler);
-                ex.authenticationEntryPoint(authenticationEntryPoint);
-            });
-        
-        // 보안 헤더 설정
-        http.headers(headers -> {
-            headers.contentSecurityPolicy("...");
-            headers.frameOptions(FrameOptionsConfig::deny);
-            headers.referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN);
-        });
-        
-        return http.build();
-    }
-}

보안 헤더:

4. AxpWebConfig

위치: axpFramework.config.AxpWebConfig

역할: Web 설정 (CORS 등)

주요 기능:

설정 예시:

java
@Configuration
-public class AxpWebConfig implements WebMvcConfigurer {
-    
-    @Value("\${cors.allowed-origins}")
-    private String[] allowedOrigins;
-    
-    @Value("\${cors.mappings}")
-    private String[] mappings;
-    
-    @Override
-    public void addCorsMappings(CorsRegistry registry) {
-        registry.addMapping(mappings)
-            .allowedOrigins(allowedOrigins)
-            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
-            .allowedHeaders("*")
-            .exposedHeaders("Authorization")
-            .allowCredentials(true)
-            .maxAge(3600);
-    }
-}

5. AxpFilterConfig

위치: axpFramework.config.AxpFilterConfig

역할: 커스텀 필터 등록

등록 필터:

설정 예시:

java
@Configuration
-public class AxpFilterConfig {
-    
-    @Bean
-    public FilterRegistrationBean<AxpXssFilter> xssFilter() {
-        FilterRegistrationBean<AxpXssFilter> registration = 
-            new FilterRegistrationBean<>();
-        registration.setFilter(new AxpXssFilter());
-        registration.addUrlPatterns("/*");
-        registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
-        return registration;
-    }
-}

6. AxpMyBatisResultInterceptor

위치: axpFramework.config.AxpMyBatisResultInterceptor

역할: MyBatis 결과 처리 인터셉터

주요 기능:

설정 파일 위치

application.yaml

위치: src/main/resources/application.yaml

기본 설정 파일

환경별 설정 파일

위치: src/main/resources/config/

설정 우선순위

  1. application-prod.yaml (운영)
  2. application-dev.yaml (개발)
  3. application-local.yaml (로컬)
  4. application.yaml (기본)

다음 단계

`,64)]))}const o=i(t,[["render",p]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_config.md.Da7CdaDm.lean.js b/assets/backend_project-structure_framework_config.md.Da7CdaDm.lean.js deleted file mode 100644 index 7146166..0000000 --- a/assets/backend_project-structure_framework_config.md.Da7CdaDm.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"설정 클래스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/config.md","filePath":"backend/project-structure/framework/config.md"}'),t={name:"backend/project-structure/framework/config.md"};function p(h,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",64)]))}const o=i(t,[["render",p]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_file.md.C12TzJ-b.js b/assets/backend_project-structure_framework_file.md.C12TzJ-b.js new file mode 100644 index 0000000..8d2851f --- /dev/null +++ b/assets/backend_project-structure_framework_file.md.C12TzJ-b.js @@ -0,0 +1,112 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"파일 관리 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/file.md","filePath":"backend/project-structure/framework/file.md"}'),p={name:"backend/project-structure/framework/file.md"};function t(h,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 관리 모듈

파일 업로드, 다운로드, 관리 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/file/
+├── controller/
+│   └── AxpFileController.java      # 파일 관리 API 컨트롤러
+└── service/
+    └── AxpFileService.java          # 파일 관리 서비스

주요 클래스

1. AxpFileController

위치: axpFramework.file.controller.AxpFileController

역할: 파일 관리 API 엔드포인트 제공

주요 엔드포인트:

사용 예시:

java
@RestController
+@RequestMapping("/api/file")
+public class AxpFileController extends AxpBaseWebController {
+    
+    @Resource(name = "AxpFileService")
+    private AxpFileService axpFileService;
+    
+    @PostMapping("/JSONMultiFileUpload")
+    public ResponseEntity<String> jsonMultiFileUpload(
+            @RequestParam Map<String, Object> param,
+            @RequestParam(value="files", required = false) List<MultipartFile> files) {
+        // 파일 업로드 처리
+    }
+}

2. AxpFileService

위치: axpFramework.file.service.AxpFileService

역할: 파일 업로드/다운로드 비즈니스 로직

주요 메서드:

파일 저장 구조:

{file.path}/
+├── {source_type}/
+│   ├── {source_code}/
+│   │   └── {UUID}.{확장자}
+│   └── null/
+│       └── {UUID}.{확장자}

사용 예시:

java
@Service("AxpFileService")
+@Transactional
+public class AxpFileService {
+    
+    @Value("\${file.path}")
+    private String serverFilePath;
+    
+    public boolean fileAddProcess(MultipartFile mfile, 
+                                 Map<String, Object> param) {
+        // 파일 경로 생성
+        String filePath = serverFilePath + 
+                         param.get("source_type") + "/" + 
+                         param.get("source_code") + "/";
+        
+        // UUID 파일명으로 업로드
+        Map<String, Object> uploadResult = 
+            AxpCommFileUtil.uploadUUID(filePath, files);
+        
+        // DB에 파일 정보 저장
+        // 프로시저 호출: P_COM5100_S
+    }
+}

파일 처리 프로세스

1. 파일 업로드

1. 클라이언트 → 서버: multipart/form-data
+   - files: 실제 파일들
+   - slist: 파일/링크 목록 (JSON 문자열, URL 인코딩)
+   - 공통 파라미터: user_id, lang_id, pc, source_type, source_code
+
+2. 서버 처리:
+   - slist 파싱 (URL 디코딩 → JSON 파싱)
+   - 신규 링크 추가 (FILE_TYPE="2")
+   - 신규 파일 업로드 (FILE_TYPE="1")
+   - 기존 파일/링크 수정 (CHG_STAT="U")
+   - 기존 파일/링크 삭제 (CHG_STAT="D")
+
+3. 파일 저장:
+   - UUID 파일명 생성
+   - {file.path}/{source_type}/{source_code}/{UUID}.{ext}
+   - DB에 파일 정보 저장 (프로시저: P_COM5100_S)
+
+4. 응답:
+   - 성공: { status: "S", data: {} }
+   - 실패: { status: "E", message: "..." }

2. 파일 다운로드

1. 클라이언트 → 서버: { F_SEQ: "uuid-filename.ext", ... }
+
+2. 서버 처리:
+   - F_SEQ로 파일 정보 조회 (프로시저: P_COM5100_Q)
+   - 서버 파일 경로 확인
+   - 파일 존재 여부 확인
+   - 파일 바이너리 읽기
+
+3. 응답:
+   - Content-Type: 파일 MIME 타입
+   - Content-Disposition: attachment; filename="원본파일명"
+   - Body: 파일 바이너리

파일 타입

FILE_TYPE

변경 상태

원본 상태

설정

application.yaml

yaml
file:
+  path: D:\\FileUpload\\              # 파일 저장 경로 (서버)
+  pathDb: /FileUpload/              # 파일 저장 경로 (DB 저장용)
+  empimg:
+    path: D:\\FileUpload\\HRMaster\\EMP\\  # 사원 이미지 경로

파일명 규칙

서버 저장 파일명

원본 파일명

사용 예시

파일 업로드

java
// FormData 생성
+FormData formData = new FormData();
+
+// 파일 목록 JSON
+List<Map<String, Object>> fileList = Arrays.asList(
+    Map.of(
+        "CHG_STAT", "N",
+        "FILE_TYPE", "1",
+        "TITLE_TXT", "새 파일",
+        "SEQ", "0",
+        "ORD_SEQ", "1"
+    )
+);
+formData.append("slist", 
+    URLEncoder.encode(JSON.stringify(fileList), "UTF-8"));
+
+// 실제 파일
+formData.append("files", file1);
+formData.append("files", file2);
+
+// 공통 파라미터
+formData.append("user_id", "USER001");
+formData.append("source_type", "DOC");
+formData.append("source_code", "DOC001");
+
+// 업로드
+POST /api/file/JSONMultiFileUpload

파일 다운로드

java
POST /api/file/fileDownload
+Body: {
+  "F_SEQ": "uuid-filename.ext",
+  "LangID": "KOR",
+  "UserID": "USER001",
+  "ipAddress": "192.168.1.100"
+}
+
+Response: 파일 바이너리 (Content-Type: application/octet-stream)

주의사항

  1. 파일 크기 제한: 기본 100MB (설정에서 변경 가능)
  2. 파일 순서: files 배열 순서는 slistFILE_TYPE="1" 순서와 일치해야 함
  3. slist 인코딩: URL 인코딩된 JSON 문자열이어야 함
  4. 경로 구분자: Windows는 \\, Linux는 / 자동 처리
  5. UUID 파일명: 중복 방지를 위해 UUID 사용

다음 단계

`,50)]))}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_file.md.C12TzJ-b.lean.js b/assets/backend_project-structure_framework_file.md.C12TzJ-b.lean.js new file mode 100644 index 0000000..e1bd76d --- /dev/null +++ b/assets/backend_project-structure_framework_file.md.C12TzJ-b.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"파일 관리 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/file.md","filePath":"backend/project-structure/framework/file.md"}'),p={name:"backend/project-structure/framework/file.md"};function t(h,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",50)]))}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_file.md.ZojyR7vz.js b/assets/backend_project-structure_framework_file.md.ZojyR7vz.js deleted file mode 100644 index 2aea920..0000000 --- a/assets/backend_project-structure_framework_file.md.ZojyR7vz.js +++ /dev/null @@ -1,112 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"파일 관리 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/file.md","filePath":"backend/project-structure/framework/file.md"}'),p={name:"backend/project-structure/framework/file.md"};function t(h,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 관리 모듈

파일 업로드, 다운로드, 관리 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/file/
-├── controller/
-│   └── AxpFileController.java      # 파일 관리 API 컨트롤러
-└── service/
-    └── AxpFileService.java          # 파일 관리 서비스

주요 클래스

1. AxpFileController

위치: axpFramework.file.controller.AxpFileController

역할: 파일 관리 API 엔드포인트 제공

주요 엔드포인트:

사용 예시:

java
@RestController
-@RequestMapping("/api/file")
-public class AxpFileController extends AxpBaseWebController {
-    
-    @Resource(name = "AxpFileService")
-    private AxpFileService axpFileService;
-    
-    @PostMapping("/JSONMultiFileUpload")
-    public ResponseEntity<String> jsonMultiFileUpload(
-            @RequestParam Map<String, Object> param,
-            @RequestParam(value="files", required = false) List<MultipartFile> files) {
-        // 파일 업로드 처리
-    }
-}

2. AxpFileService

위치: axpFramework.file.service.AxpFileService

역할: 파일 업로드/다운로드 비즈니스 로직

주요 메서드:

파일 저장 구조:

{file.path}/
-├── {source_type}/
-│   ├── {source_code}/
-│   │   └── {UUID}.{확장자}
-│   └── null/
-│       └── {UUID}.{확장자}

사용 예시:

java
@Service("AxpFileService")
-@Transactional
-public class AxpFileService {
-    
-    @Value("\${file.path}")
-    private String serverFilePath;
-    
-    public boolean fileAddProcess(MultipartFile mfile, 
-                                 Map<String, Object> param) {
-        // 파일 경로 생성
-        String filePath = serverFilePath + 
-                         param.get("source_type") + "/" + 
-                         param.get("source_code") + "/";
-        
-        // UUID 파일명으로 업로드
-        Map<String, Object> uploadResult = 
-            AxpCommFileUtil.uploadUUID(filePath, files);
-        
-        // DB에 파일 정보 저장
-        // 프로시저 호출: P_COM5100_S
-    }
-}

파일 처리 프로세스

1. 파일 업로드

1. 클라이언트 → 서버: multipart/form-data
-   - files: 실제 파일들
-   - slist: 파일/링크 목록 (JSON 문자열, URL 인코딩)
-   - 공통 파라미터: user_id, lang_id, pc, source_type, source_code
-
-2. 서버 처리:
-   - slist 파싱 (URL 디코딩 → JSON 파싱)
-   - 신규 링크 추가 (FILE_TYPE="2")
-   - 신규 파일 업로드 (FILE_TYPE="1")
-   - 기존 파일/링크 수정 (CHG_STAT="U")
-   - 기존 파일/링크 삭제 (CHG_STAT="D")
-
-3. 파일 저장:
-   - UUID 파일명 생성
-   - {file.path}/{source_type}/{source_code}/{UUID}.{ext}
-   - DB에 파일 정보 저장 (프로시저: P_COM5100_S)
-
-4. 응답:
-   - 성공: { status: "S", data: {} }
-   - 실패: { status: "E", message: "..." }

2. 파일 다운로드

1. 클라이언트 → 서버: { F_SEQ: "uuid-filename.ext", ... }
-
-2. 서버 처리:
-   - F_SEQ로 파일 정보 조회 (프로시저: P_COM5100_Q)
-   - 서버 파일 경로 확인
-   - 파일 존재 여부 확인
-   - 파일 바이너리 읽기
-
-3. 응답:
-   - Content-Type: 파일 MIME 타입
-   - Content-Disposition: attachment; filename="원본파일명"
-   - Body: 파일 바이너리

파일 타입

FILE_TYPE

변경 상태

원본 상태

설정

application.yaml

yaml
file:
-  path: D:\\FileUpload\\              # 파일 저장 경로 (서버)
-  pathDb: /FileUpload/              # 파일 저장 경로 (DB 저장용)
-  empimg:
-    path: D:\\FileUpload\\HRMaster\\EMP\\  # 사원 이미지 경로

파일명 규칙

서버 저장 파일명

원본 파일명

사용 예시

파일 업로드

java
// FormData 생성
-FormData formData = new FormData();
-
-// 파일 목록 JSON
-List<Map<String, Object>> fileList = Arrays.asList(
-    Map.of(
-        "CHG_STAT", "N",
-        "FILE_TYPE", "1",
-        "TITLE_TXT", "새 파일",
-        "SEQ", "0",
-        "ORD_SEQ", "1"
-    )
-);
-formData.append("slist", 
-    URLEncoder.encode(JSON.stringify(fileList), "UTF-8"));
-
-// 실제 파일
-formData.append("files", file1);
-formData.append("files", file2);
-
-// 공통 파라미터
-formData.append("user_id", "USER001");
-formData.append("source_type", "DOC");
-formData.append("source_code", "DOC001");
-
-// 업로드
-POST /api/file/JSONMultiFileUpload

파일 다운로드

java
POST /api/file/fileDownload
-Body: {
-  "F_SEQ": "uuid-filename.ext",
-  "LangID": "KOR",
-  "UserID": "USER001",
-  "ipAddress": "192.168.1.100"
-}
-
-Response: 파일 바이너리 (Content-Type: application/octet-stream)

주의사항

  1. 파일 크기 제한: 기본 100MB (설정에서 변경 가능)
  2. 파일 순서: files 배열 순서는 slistFILE_TYPE="1" 순서와 일치해야 함
  3. slist 인코딩: URL 인코딩된 JSON 문자열이어야 함
  4. 경로 구분자: Windows는 \\, Linux는 / 자동 처리
  5. UUID 파일명: 중복 방지를 위해 UUID 사용

다음 단계

`,50)]))}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_file.md.ZojyR7vz.lean.js b/assets/backend_project-structure_framework_file.md.ZojyR7vz.lean.js deleted file mode 100644 index ed39b64..0000000 --- a/assets/backend_project-structure_framework_file.md.ZojyR7vz.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"파일 관리 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/file.md","filePath":"backend/project-structure/framework/file.md"}'),p={name:"backend/project-structure/framework/file.md"};function t(h,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",50)]))}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_filter.md.BVCau3SF.js b/assets/backend_project-structure_framework_filter.md.BVCau3SF.js deleted file mode 100644 index b29b27d..0000000 --- a/assets/backend_project-structure_framework_filter.md.BVCau3SF.js +++ /dev/null @@ -1,76 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"필터 클래스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/filter.md","filePath":"backend/project-structure/framework/filter.md"}'),l={name:"backend/project-structure/framework/filter.md"};function e(p,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

필터 클래스 모듈

HTTP 요청/응답을 처리하는 필터 클래스들입니다.

모듈 구조

axpFramework/filter/
-├── auth/
-│   └── AxpJwtAuthenticationFilter.java  # JWT 인증 필터
-├── logging/
-│   └── AxpCorsLoggingFilter.java        # CORS 로깅 필터
-├── security/
-│   ├── AxpDecryptFilter.java            # 복호화 필터
-│   └── AxpXssFilter.java                # XSS 방지 필터
-└── xss/
-    └── AxpXssUtil.java                  # XSS 유틸리티

주요 필터

1. AxpXssFilter

위치: axpFramework.filter.security.AxpXssFilter

역할: XSS (Cross-Site Scripting) 공격 방지

우선순위: 최우선 (HIGHEST_PRECEDENCE)

처리 내용:

동작 방식:

java
public class AxpXssFilter implements Filter {
-    
-    @Override
-    public void doFilter(ServletRequest request, ServletResponse response, 
-                        FilterChain chain) {
-        HttpServletRequest httpRequest = (HttpServletRequest) request;
-        XssRequestWrapper wrappedRequest = new XssRequestWrapper(httpRequest);
-        chain.doFilter(wrappedRequest, response);
-    }
-}

필터링 대상:

사용 예시:

java
// 필터는 자동으로 적용됨
-// 별도 설정 불필요

2. AxpDecryptFilter

위치: axpFramework.filter.security.AxpDecryptFilter

역할: 암호화된 요청 데이터 복호화

처리 내용:

동작 방식:

java
public class AxpDecryptFilter implements Filter {
-    
-    @Override
-    public void doFilter(ServletRequest request, ServletResponse response, 
-                        FilterChain chain) {
-        // 요청 본문 읽기
-        // 암호화 여부 확인
-        // 복호화 수행
-        // 복호화된 데이터로 요청 래핑
-        chain.doFilter(wrappedRequest, response);
-    }
-}

설정:

3. AxpJwtAuthenticationFilter

위치: axpFramework.filter.auth.AxpJwtAuthenticationFilter

역할: JWT 토큰 인증 처리

처리 내용:

동작 방식:

java
public class AxpJwtAuthenticationFilter extends OncePerRequestFilter {
-    
-    @Override
-    protected void doFilterInternal(HttpServletRequest request, 
-                                   HttpServletResponse response, 
-                                   FilterChain filterChain) {
-        String token = extractToken(request);
-        if (token != null && validateToken(token)) {
-            Authentication auth = getAuthentication(token);
-            SecurityContextHolder.getContext().setAuthentication(auth);
-        }
-        filterChain.doFilter(request, response);
-    }
-}

토큰 추출:

4. AxpCorsLoggingFilter

위치: axpFramework.filter.logging.AxpCorsLoggingFilter

역할: CORS 요청 로깅

처리 내용:

필터 등록

AxpFilterConfig

위치: axpFramework.config.AxpFilterConfig

필터 등록 순서:

  1. AxpXssFilter (최우선)
  2. AxpDecryptFilter
  3. AxpJwtAuthenticationFilter (Spring Security 필터 체인에 등록)

설정 예시:

java
@Configuration
-public class AxpFilterConfig {
-    
-    @Bean
-    public FilterRegistrationBean<AxpXssFilter> xssFilter() {
-        FilterRegistrationBean<AxpXssFilter> registration = 
-            new FilterRegistrationBean<>();
-        registration.setFilter(new AxpXssFilter());
-        registration.addUrlPatterns("/*");
-        registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
-        return registration;
-    }
-    
-    @Bean
-    public FilterRegistrationBean<AxpDecryptFilter> decryptFilter() {
-        FilterRegistrationBean<AxpDecryptFilter> registration = 
-            new FilterRegistrationBean<>();
-        registration.setFilter(new AxpDecryptFilter());
-        registration.addUrlPatterns("/*");
-        registration.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
-        return registration;
-    }
-}

필터 실행 순서

1. AxpXssFilter (XSS 방지)
-
-2. AxpDecryptFilter (복호화)
-
-3. Spring Security Filter Chain
-   ├── AxpJwtAuthenticationFilter (JWT 인증)
-   └── 기타 Security 필터
-
-4. DispatcherServlet
-
-5. Controller

XSS 유틸리티

AxpXssUtil

위치: axpFramework.filter.xss.AxpXssUtil

역할: XSS 필터링 유틸리티

주요 메서드:

사용 예시:

java
String safeValue = AxpXssUtil.stripXss(userInput);

보안 정책 파일

antisamy-policy.xml

위치: src/main/resources/antisamy-policy.xml

역할: OWASP AntiSamy 정책 파일

내용:

주의사항

  1. 필터 순서: XSS 필터는 반드시 최우선으로 실행되어야 함
  2. 성능: 필터는 모든 요청에 적용되므로 성능 고려 필요
  3. 예외 URI: 특정 URI는 필터에서 제외 가능
  4. 로깅: 필터 동작은 로그로 확인 가능

다음 단계

`,67)]))}const o=i(l,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_filter.md.BVCau3SF.lean.js b/assets/backend_project-structure_framework_filter.md.BVCau3SF.lean.js deleted file mode 100644 index db5f4f5..0000000 --- a/assets/backend_project-structure_framework_filter.md.BVCau3SF.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"필터 클래스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/filter.md","filePath":"backend/project-structure/framework/filter.md"}'),l={name:"backend/project-structure/framework/filter.md"};function e(p,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",67)]))}const o=i(l,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_filter.md.DjDiAHda.js b/assets/backend_project-structure_framework_filter.md.DjDiAHda.js new file mode 100644 index 0000000..c3c4c25 --- /dev/null +++ b/assets/backend_project-structure_framework_filter.md.DjDiAHda.js @@ -0,0 +1,76 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"필터 클래스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/filter.md","filePath":"backend/project-structure/framework/filter.md"}'),l={name:"backend/project-structure/framework/filter.md"};function e(p,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

필터 클래스 모듈

HTTP 요청/응답을 처리하는 필터 클래스들입니다.

모듈 구조

axpFramework/filter/
+├── auth/
+│   └── AxpJwtAuthenticationFilter.java  # JWT 인증 필터
+├── logging/
+│   └── AxpCorsLoggingFilter.java        # CORS 로깅 필터
+├── security/
+│   ├── AxpDecryptFilter.java            # 복호화 필터
+│   └── AxpXssFilter.java                # XSS 방지 필터
+└── xss/
+    └── AxpXssUtil.java                  # XSS 유틸리티

주요 필터

1. AxpXssFilter

위치: axpFramework.filter.security.AxpXssFilter

역할: XSS (Cross-Site Scripting) 공격 방지

우선순위: 최우선 (HIGHEST_PRECEDENCE)

처리 내용:

동작 방식:

java
public class AxpXssFilter implements Filter {
+    
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, 
+                        FilterChain chain) {
+        HttpServletRequest httpRequest = (HttpServletRequest) request;
+        XssRequestWrapper wrappedRequest = new XssRequestWrapper(httpRequest);
+        chain.doFilter(wrappedRequest, response);
+    }
+}

필터링 대상:

사용 예시:

java
// 필터는 자동으로 적용됨
+// 별도 설정 불필요

2. AxpDecryptFilter

위치: axpFramework.filter.security.AxpDecryptFilter

역할: 암호화된 요청 데이터 복호화

처리 내용:

동작 방식:

java
public class AxpDecryptFilter implements Filter {
+    
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, 
+                        FilterChain chain) {
+        // 요청 본문 읽기
+        // 암호화 여부 확인
+        // 복호화 수행
+        // 복호화된 데이터로 요청 래핑
+        chain.doFilter(wrappedRequest, response);
+    }
+}

설정:

3. AxpJwtAuthenticationFilter

위치: axpFramework.filter.auth.AxpJwtAuthenticationFilter

역할: JWT 토큰 인증 처리

처리 내용:

동작 방식:

java
public class AxpJwtAuthenticationFilter extends OncePerRequestFilter {
+    
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, 
+                                   HttpServletResponse response, 
+                                   FilterChain filterChain) {
+        String token = extractToken(request);
+        if (token != null && validateToken(token)) {
+            Authentication auth = getAuthentication(token);
+            SecurityContextHolder.getContext().setAuthentication(auth);
+        }
+        filterChain.doFilter(request, response);
+    }
+}

토큰 추출:

4. AxpCorsLoggingFilter

위치: axpFramework.filter.logging.AxpCorsLoggingFilter

역할: CORS 요청 로깅

처리 내용:

필터 등록

AxpFilterConfig

위치: axpFramework.config.AxpFilterConfig

필터 등록 순서:

  1. AxpXssFilter (최우선)
  2. AxpDecryptFilter
  3. AxpJwtAuthenticationFilter (Spring Security 필터 체인에 등록)

설정 예시:

java
@Configuration
+public class AxpFilterConfig {
+    
+    @Bean
+    public FilterRegistrationBean<AxpXssFilter> xssFilter() {
+        FilterRegistrationBean<AxpXssFilter> registration = 
+            new FilterRegistrationBean<>();
+        registration.setFilter(new AxpXssFilter());
+        registration.addUrlPatterns("/*");
+        registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
+        return registration;
+    }
+    
+    @Bean
+    public FilterRegistrationBean<AxpDecryptFilter> decryptFilter() {
+        FilterRegistrationBean<AxpDecryptFilter> registration = 
+            new FilterRegistrationBean<>();
+        registration.setFilter(new AxpDecryptFilter());
+        registration.addUrlPatterns("/*");
+        registration.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
+        return registration;
+    }
+}

필터 실행 순서

1. AxpXssFilter (XSS 방지)
+
+2. AxpDecryptFilter (복호화)
+
+3. Spring Security Filter Chain
+   ├── AxpJwtAuthenticationFilter (JWT 인증)
+   └── 기타 Security 필터
+
+4. DispatcherServlet
+
+5. Controller

XSS 유틸리티

AxpXssUtil

위치: axpFramework.filter.xss.AxpXssUtil

역할: XSS 필터링 유틸리티

주요 메서드:

사용 예시:

java
String safeValue = AxpXssUtil.stripXss(userInput);

보안 정책 파일

antisamy-policy.xml

위치: src/main/resources/antisamy-policy.xml

역할: OWASP AntiSamy 정책 파일

내용:

주의사항

  1. 필터 순서: XSS 필터는 반드시 최우선으로 실행되어야 함
  2. 성능: 필터는 모든 요청에 적용되므로 성능 고려 필요
  3. 예외 URI: 특정 URI는 필터에서 제외 가능
  4. 로깅: 필터 동작은 로그로 확인 가능

다음 단계

`,67)]))}const o=i(l,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_filter.md.DjDiAHda.lean.js b/assets/backend_project-structure_framework_filter.md.DjDiAHda.lean.js new file mode 100644 index 0000000..79dc1f0 --- /dev/null +++ b/assets/backend_project-structure_framework_filter.md.DjDiAHda.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"필터 클래스 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/filter.md","filePath":"backend/project-structure/framework/filter.md"}'),l={name:"backend/project-structure/framework/filter.md"};function e(p,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",67)]))}const o=i(l,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_mail.md.DLT5Q1Ql.js b/assets/backend_project-structure_framework_mail.md.DLT5Q1Ql.js new file mode 100644 index 0000000..e19e0a5 --- /dev/null +++ b/assets/backend_project-structure_framework_mail.md.DLT5Q1Ql.js @@ -0,0 +1,80 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"메일 발송 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/mail.md","filePath":"backend/project-structure/framework/mail.md"}'),h={name:"backend/project-structure/framework/mail.md"};function t(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

메일 발송 모듈

이메일 발송 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/mail/
+├── controller/
+│   └── AxpMailController.java       # 메일 발송 API 컨트롤러
+├── mapper/
+│   └── AxpMailMapper.java          # 메일 관련 Mapper
+└── service/
+    └── AxpMailService.java          # 메일 발송 서비스

주요 클래스

1. AxpMailController

위치: axpFramework.mail.controller.AxpMailController

역할: 메일 발송 API 엔드포인트 제공

주요 엔드포인트:

2. AxpMailService

위치: axpFramework.mail.service.AxpMailService

역할: 메일 발송 비즈니스 로직

현재 상태: 기본 구조만 구현됨 (확장 예정)

3. AxpCommMailUtil

위치: axpFramework.common.utils.AxpCommMailUtil

역할: 메일 발송 유틸리티

주요 기능:

Spring Mail 설정

application.yaml

yaml
spring:
+  mail:
+    host: smtp.gmail.com
+    port: 587
+    username: your-email@gmail.com
+    password: your-password
+    properties:
+      mail:
+        smtp:
+          auth: true
+          starttls:
+            enable: true

사용 방법

1. JavaMailSender 사용

java
@Service
+public class MyMailService {
+    
+    @Autowired
+    private JavaMailSender mailSender;
+    
+    public void sendEmail(String to, String subject, String body) {
+        SimpleMailMessage message = new SimpleMailMessage();
+        message.setTo(to);
+        message.setSubject(subject);
+        message.setText(body);
+        mailSender.send(message);
+    }
+}

2. HTML 이메일 발송

java
@Service
+public class MyMailService {
+    
+    @Autowired
+    private JavaMailSender mailSender;
+    
+    public void sendHtmlEmail(String to, String subject, String htmlBody) {
+        MimeMessage message = mailSender.createMimeMessage();
+        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
+        
+        helper.setTo(to);
+        helper.setSubject(subject);
+        helper.setText(htmlBody, true); // true = HTML
+        
+        mailSender.send(message);
+    }
+}

3. 첨부 파일 포함

java
public void sendEmailWithAttachment(String to, String subject, 
+                                   String body, File attachment) {
+    MimeMessage message = mailSender.createMimeMessage();
+    MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
+    
+    helper.setTo(to);
+    helper.setSubject(subject);
+    helper.setText(body);
+    helper.addAttachment("attachment.pdf", attachment);
+    
+    mailSender.send(message);
+}

메일 템플릿

Thymeleaf 템플릿 사용 (선택적)

java
@Service
+public class MyMailService {
+    
+    @Autowired
+    private TemplateEngine templateEngine;
+    
+    public void sendTemplatedEmail(String to, String subject, 
+                                  Map<String, Object> variables) {
+        Context context = new Context();
+        context.setVariables(variables);
+        
+        String htmlBody = templateEngine.process("email-template", context);
+        
+        sendHtmlEmail(to, subject, htmlBody);
+    }
+}

공통 유틸리티

AxpCommMailUtil

주요 메서드:

사용 예시:

java
@Resource(name = "AxpCommMailUtil")
+private AxpCommMailUtil mailUtil;
+
+boolean success = mailUtil.sendSMTP(
+    "제목",
+    "본문",
+    "recipient@example.com"
+);

주의사항

  1. SMTP 설정: Gmail 등은 앱 비밀번호 사용 필요
  2. 보안: 비밀번호는 설정 파일에 저장, Git 커밋 주의
  3. 비동기 처리: 대량 발송 시 비동기 처리 권장
  4. 에러 처리: 발송 실패 시 재시도 로직 구현 권장

다음 단계

`,42)]))}const o=i(h,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_mail.md.DLT5Q1Ql.lean.js b/assets/backend_project-structure_framework_mail.md.DLT5Q1Ql.lean.js new file mode 100644 index 0000000..d1fa730 --- /dev/null +++ b/assets/backend_project-structure_framework_mail.md.DLT5Q1Ql.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"메일 발송 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/mail.md","filePath":"backend/project-structure/framework/mail.md"}'),h={name:"backend/project-structure/framework/mail.md"};function t(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",42)]))}const o=i(h,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_mail.md.bguISNdT.js b/assets/backend_project-structure_framework_mail.md.bguISNdT.js deleted file mode 100644 index 8c6e65e..0000000 --- a/assets/backend_project-structure_framework_mail.md.bguISNdT.js +++ /dev/null @@ -1,80 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"메일 발송 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/mail.md","filePath":"backend/project-structure/framework/mail.md"}'),h={name:"backend/project-structure/framework/mail.md"};function t(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

메일 발송 모듈

이메일 발송 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/mail/
-├── controller/
-│   └── AxpMailController.java       # 메일 발송 API 컨트롤러
-├── mapper/
-│   └── AxpMailMapper.java          # 메일 관련 Mapper
-└── service/
-    └── AxpMailService.java          # 메일 발송 서비스

주요 클래스

1. AxpMailController

위치: axpFramework.mail.controller.AxpMailController

역할: 메일 발송 API 엔드포인트 제공

주요 엔드포인트:

2. AxpMailService

위치: axpFramework.mail.service.AxpMailService

역할: 메일 발송 비즈니스 로직

현재 상태: 기본 구조만 구현됨 (확장 예정)

3. AxpCommMailUtil

위치: axpFramework.common.utils.AxpCommMailUtil

역할: 메일 발송 유틸리티

주요 기능:

Spring Mail 설정

application.yaml

yaml
spring:
-  mail:
-    host: smtp.gmail.com
-    port: 587
-    username: your-email@gmail.com
-    password: your-password
-    properties:
-      mail:
-        smtp:
-          auth: true
-          starttls:
-            enable: true

사용 방법

1. JavaMailSender 사용

java
@Service
-public class MyMailService {
-    
-    @Autowired
-    private JavaMailSender mailSender;
-    
-    public void sendEmail(String to, String subject, String body) {
-        SimpleMailMessage message = new SimpleMailMessage();
-        message.setTo(to);
-        message.setSubject(subject);
-        message.setText(body);
-        mailSender.send(message);
-    }
-}

2. HTML 이메일 발송

java
@Service
-public class MyMailService {
-    
-    @Autowired
-    private JavaMailSender mailSender;
-    
-    public void sendHtmlEmail(String to, String subject, String htmlBody) {
-        MimeMessage message = mailSender.createMimeMessage();
-        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
-        
-        helper.setTo(to);
-        helper.setSubject(subject);
-        helper.setText(htmlBody, true); // true = HTML
-        
-        mailSender.send(message);
-    }
-}

3. 첨부 파일 포함

java
public void sendEmailWithAttachment(String to, String subject, 
-                                   String body, File attachment) {
-    MimeMessage message = mailSender.createMimeMessage();
-    MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
-    
-    helper.setTo(to);
-    helper.setSubject(subject);
-    helper.setText(body);
-    helper.addAttachment("attachment.pdf", attachment);
-    
-    mailSender.send(message);
-}

메일 템플릿

Thymeleaf 템플릿 사용 (선택적)

java
@Service
-public class MyMailService {
-    
-    @Autowired
-    private TemplateEngine templateEngine;
-    
-    public void sendTemplatedEmail(String to, String subject, 
-                                  Map<String, Object> variables) {
-        Context context = new Context();
-        context.setVariables(variables);
-        
-        String htmlBody = templateEngine.process("email-template", context);
-        
-        sendHtmlEmail(to, subject, htmlBody);
-    }
-}

공통 유틸리티

AxpCommMailUtil

주요 메서드:

사용 예시:

java
@Resource(name = "AxpCommMailUtil")
-private AxpCommMailUtil mailUtil;
-
-boolean success = mailUtil.sendSMTP(
-    "제목",
-    "본문",
-    "recipient@example.com"
-);

주의사항

  1. SMTP 설정: Gmail 등은 앱 비밀번호 사용 필요
  2. 보안: 비밀번호는 설정 파일에 저장, Git 커밋 주의
  3. 비동기 처리: 대량 발송 시 비동기 처리 권장
  4. 에러 처리: 발송 실패 시 재시도 로직 구현 권장

다음 단계

`,42)]))}const o=i(h,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_mail.md.bguISNdT.lean.js b/assets/backend_project-structure_framework_mail.md.bguISNdT.lean.js deleted file mode 100644 index 5bde4cc..0000000 --- a/assets/backend_project-structure_framework_mail.md.bguISNdT.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"메일 발송 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/mail.md","filePath":"backend/project-structure/framework/mail.md"}'),h={name:"backend/project-structure/framework/mail.md"};function t(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",42)]))}const o=i(h,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/backend_project-structure_framework_report.md.B6I_eJDL.js b/assets/backend_project-structure_framework_report.md.B6I_eJDL.js deleted file mode 100644 index f00006f..0000000 --- a/assets/backend_project-structure_framework_report.md.B6I_eJDL.js +++ /dev/null @@ -1,86 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"리포트 생성 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/report.md","filePath":"backend/project-structure/framework/report.md"}'),l={name:"backend/project-structure/framework/report.md"};function p(h,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

리포트 생성 모듈

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 모듈입니다.

모듈 구조

axpFramework/report/
-├── controller/
-│   └── AxpReportController.java    # 리포트 생성 API 컨트롤러
-├── mapper/
-│   └── AxpReportMapper.java       # 리포트 관련 Mapper
-└── service/
-    └── AxpReportService.java       # 리포트 생성 서비스

주요 클래스

1. AxpReportController

위치: axpFramework.report.controller.AxpReportController

역할: 리포트 생성 API 엔드포인트 제공

주요 엔드포인트:

사용 예시:

java
@RestController
-@RequestMapping("/api/direct")
-public class AxpReportController extends AxpBaseWebController {
-    
-    @Resource(name = "AxpCommDbService")
-    private AxpCommDbService axpCommDbService;
-    
-    @PostMapping("/report/pdfView")
-    public ResponseEntity<String> pdfView(
-            @RequestBody Map<String, Object> requestBody) {
-        // 데이터 조회
-        Map<String, Object> data = axpCommDbService.executeProcedure(requestBody);
-        
-        // JasperReports로 PDF 생성
-        // ...
-        
-        return getJSONSuccessResponse(result);
-    }
-}

2. AxpReportService

위치: axpFramework.report.service.AxpReportService

역할: 리포트 생성 비즈니스 로직

현재 상태: 기본 구조만 구현됨 (확장 예정)

리포트 생성 프로세스

1. 데이터 조회

java
// 프로시저 호출로 데이터 조회
-Map<String, Object> requestBody = new HashMap<>();
-requestBody.put("procedure", "P_REPORT_DATA");
-requestBody.put("params", params);
-
-Map<String, Object> data = axpCommDbService.executeProcedure(requestBody);

2. 리포트 파라미터 설정

java
Map<String, Object> parameters = new HashMap<>();
-
-// 커서 데이터 설정
-List<Map<String, Object>> cv1 = (List<Map<String, Object>>) data.get("CV_1");
-JRBeanCollectionDataSource dataSource = 
-    new JRBeanCollectionDataSource(cv1);
-parameters.put("cv_1", dataSource);
-
-// 일반 파라미터 설정
-parameters.put("jr_p_title", "리포트 제목");
-parameters.put("jr_p_date", "2024-01-01");

3. 리포트 컴파일 및 생성

java
// JRXML 파일 로드
-InputStream jrxmlStream = getClass()
-    .getClassLoader()
-    .getResourceAsStream("report/jasperForms/report.jrxml");
-JasperDesign design = JRXmlLoader.load(jrxmlStream);
-
-// 리포트 컴파일
-JasperReport report = JasperCompileManager.compileReport(design);
-
-// 리포트 채우기
-JasperPrint jasperPrint = JasperFillManager.fillReport(
-    report, parameters, new JREmptyDataSource()
-);

4. PDF 내보내기

java
// PDF로 내보내기
-JRPdfExporter exporter = new JRPdfExporter();
-exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
-exporter.setExporterOutput(
-    new SimpleOutputStreamExporterOutput(outputStream)
-);
-exporter.exportReport();

리포트 템플릿 위치

src/main/resources/report/
-├── jasperForms/                    # JRXML 템플릿 파일
-│   ├── REPORT_TEMPLATE.jrxml
-│   └── ...
-└── jasperfonts/                    # 한글 폰트
-    ├── NanumGothic_OTF/
-    └── ...

리포트 파라미터 규칙

커서 파라미터

일반 파라미터

이미지 파라미터

커서 변환

한글 폰트

지원 폰트

폰트 위치

src/main/resources/report/jasperfonts/

사용 예시

PDF 리포트 생성

java
POST /api/direct/report/pdfView
-Body: {
-  "jr_report": "REPORT_TEMPLATE",
-  "procedure": "P_REPORT_DATA",
-  "params": {
-    "V_P_USER_ID": "USER001"
-  },
-  "jr_p_title": "리포트 제목"
-}
-
-Response: {
-  "status": "S",
-  "data": {
-    "fileName": "REPORT_abc123.pdf"
-  }
-}

Excel 리포트 다운로드

java
POST /api/direct/report/excelDown
-Form Data: {
-  "jr_report": "REPORT_TEMPLATE",
-  "procedure": "P_REPORT_DATA",
-  "params": { ... }
-}
-
-Response: Excel 파일 (application/ms-excel)

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자로 변환
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 함
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화

다음 단계

`,50)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_report.md.B6I_eJDL.lean.js b/assets/backend_project-structure_framework_report.md.B6I_eJDL.lean.js deleted file mode 100644 index 2039f50..0000000 --- a/assets/backend_project-structure_framework_report.md.B6I_eJDL.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"리포트 생성 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/report.md","filePath":"backend/project-structure/framework/report.md"}'),l={name:"backend/project-structure/framework/report.md"};function p(h,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",50)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_report.md.DFbr_Rrd.js b/assets/backend_project-structure_framework_report.md.DFbr_Rrd.js new file mode 100644 index 0000000..7e1cb1e --- /dev/null +++ b/assets/backend_project-structure_framework_report.md.DFbr_Rrd.js @@ -0,0 +1,86 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"리포트 생성 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/report.md","filePath":"backend/project-structure/framework/report.md"}'),l={name:"backend/project-structure/framework/report.md"};function p(h,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

리포트 생성 모듈

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 모듈입니다.

모듈 구조

axpFramework/report/
+├── controller/
+│   └── AxpReportController.java    # 리포트 생성 API 컨트롤러
+├── mapper/
+│   └── AxpReportMapper.java       # 리포트 관련 Mapper
+└── service/
+    └── AxpReportService.java       # 리포트 생성 서비스

주요 클래스

1. AxpReportController

위치: axpFramework.report.controller.AxpReportController

역할: 리포트 생성 API 엔드포인트 제공

주요 엔드포인트:

사용 예시:

java
@RestController
+@RequestMapping("/api/direct")
+public class AxpReportController extends AxpBaseWebController {
+    
+    @Resource(name = "AxpCommDbService")
+    private AxpCommDbService axpCommDbService;
+    
+    @PostMapping("/report/pdfView")
+    public ResponseEntity<String> pdfView(
+            @RequestBody Map<String, Object> requestBody) {
+        // 데이터 조회
+        Map<String, Object> data = axpCommDbService.executeProcedure(requestBody);
+        
+        // JasperReports로 PDF 생성
+        // ...
+        
+        return getJSONSuccessResponse(result);
+    }
+}

2. AxpReportService

위치: axpFramework.report.service.AxpReportService

역할: 리포트 생성 비즈니스 로직

현재 상태: 기본 구조만 구현됨 (확장 예정)

리포트 생성 프로세스

1. 데이터 조회

java
// 프로시저 호출로 데이터 조회
+Map<String, Object> requestBody = new HashMap<>();
+requestBody.put("procedure", "P_REPORT_DATA");
+requestBody.put("params", params);
+
+Map<String, Object> data = axpCommDbService.executeProcedure(requestBody);

2. 리포트 파라미터 설정

java
Map<String, Object> parameters = new HashMap<>();
+
+// 커서 데이터 설정
+List<Map<String, Object>> cv1 = (List<Map<String, Object>>) data.get("CV_1");
+JRBeanCollectionDataSource dataSource = 
+    new JRBeanCollectionDataSource(cv1);
+parameters.put("cv_1", dataSource);
+
+// 일반 파라미터 설정
+parameters.put("jr_p_title", "리포트 제목");
+parameters.put("jr_p_date", "2024-01-01");

3. 리포트 컴파일 및 생성

java
// JRXML 파일 로드
+InputStream jrxmlStream = getClass()
+    .getClassLoader()
+    .getResourceAsStream("report/jasperForms/report.jrxml");
+JasperDesign design = JRXmlLoader.load(jrxmlStream);
+
+// 리포트 컴파일
+JasperReport report = JasperCompileManager.compileReport(design);
+
+// 리포트 채우기
+JasperPrint jasperPrint = JasperFillManager.fillReport(
+    report, parameters, new JREmptyDataSource()
+);

4. PDF 내보내기

java
// PDF로 내보내기
+JRPdfExporter exporter = new JRPdfExporter();
+exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+exporter.setExporterOutput(
+    new SimpleOutputStreamExporterOutput(outputStream)
+);
+exporter.exportReport();

리포트 템플릿 위치

src/main/resources/report/
+├── jasperForms/                    # JRXML 템플릿 파일
+│   ├── REPORT_TEMPLATE.jrxml
+│   └── ...
+└── jasperfonts/                    # 한글 폰트
+    ├── NanumGothic_OTF/
+    └── ...

리포트 파라미터 규칙

커서 파라미터

일반 파라미터

이미지 파라미터

커서 변환

한글 폰트

지원 폰트

폰트 위치

src/main/resources/report/jasperfonts/

사용 예시

PDF 리포트 생성

java
POST /api/direct/report/pdfView
+Body: {
+  "jr_report": "REPORT_TEMPLATE",
+  "procedure": "P_REPORT_DATA",
+  "params": {
+    "V_P_USER_ID": "USER001"
+  },
+  "jr_p_title": "리포트 제목"
+}
+
+Response: {
+  "status": "S",
+  "data": {
+    "fileName": "REPORT_abc123.pdf"
+  }
+}

Excel 리포트 다운로드

java
POST /api/direct/report/excelDown
+Form Data: {
+  "jr_report": "REPORT_TEMPLATE",
+  "procedure": "P_REPORT_DATA",
+  "params": { ... }
+}
+
+Response: Excel 파일 (application/ms-excel)

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자로 변환
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 함
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화

다음 단계

`,50)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_report.md.DFbr_Rrd.lean.js b/assets/backend_project-structure_framework_report.md.DFbr_Rrd.lean.js new file mode 100644 index 0000000..377ec66 --- /dev/null +++ b/assets/backend_project-structure_framework_report.md.DFbr_Rrd.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"리포트 생성 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/report.md","filePath":"backend/project-structure/framework/report.md"}'),l={name:"backend/project-structure/framework/report.md"};function p(h,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",50)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_sms.md.BBDe9UYt.js b/assets/backend_project-structure_framework_sms.md.BBDe9UYt.js new file mode 100644 index 0000000..301906d --- /dev/null +++ b/assets/backend_project-structure_framework_sms.md.BBDe9UYt.js @@ -0,0 +1,115 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"SMS 발송 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/sms.md","filePath":"backend/project-structure/framework/sms.md"}'),l={name:"backend/project-structure/framework/sms.md"};function p(h,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

SMS 발송 모듈

SMS 메시지 발송 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/sms/
+├── controller/
+│   └── AxpSmsController.java       # SMS 발송 API 컨트롤러
+├── mapper/
+│   └── AxpSmsMapper.java          # SMS 관련 Mapper
+└── service/
+    └── AxpSmsService.java          # SMS 발송 서비스

주요 클래스

1. AxpSmsController

위치: axpFramework.sms.controller.AxpSmsController

역할: SMS 발송 API 엔드포인트 제공

주요 엔드포인트:

사용 예시:

java
@RestController
+@RequestMapping("/api/admin")
+public class AxpSmsController extends AxpBaseWebController {
+    
+    @Resource(name = "AxpSmsService")
+    private AxpSmsService axpSmsService;
+    
+    @PostMapping("/AsSMSManagement/msgSend")
+    public ResponseEntity<String> msgSend(
+            @RequestBody Map<String, Object> requestBody) {
+        // SMS 발송 처리
+    }
+}

2. AxpSmsService

위치: axpFramework.sms.service.AxpSmsService

역할: SMS 발송 비즈니스 로직

주요 메서드:

사용 예시:

java
@Service("AxpSmsService")
+public class AxpSmsService {
+    
+    @Value("\${msg.kt.url.sms}")
+    private String msgKtUrlSms;
+    
+    @Value("\${msg.kt.key}")
+    private String msgKtKey;
+    
+    public boolean phoneMsgSend(String mstNo, 
+                               Map<String, Object> sessionInfo) {
+        // DB에서 발송 정보 조회
+        // KT CPaaS API 호출
+        // 발송 결과 업데이트
+    }
+}

SMS 발송 프로세스

1. 발송 정보 저장

1. 클라이언트 → 서버: 발송 요청
+   {
+     "params": {
+       "msg_type": "SMS",
+       "rev_type": "10",
+       "msg_cont": "메시지 내용",
+       "dt_mo_tel": "01012345678",
+       ...
+     },
+     "sessionInfo": { ... }
+   }
+
+2. 서버 처리:
+   - 발송 정보 DB 저장 (프로시저: P_SYSMESSAGESEND_S)
+   - 발송 타입에 따라 처리:
+     * rev_type="10": 즉시 발송
+     * rev_type="20", "30", "40": 예약 발송
+
+3. 즉시 발송인 경우:
+   - 발송 번호 조회
+   - KT CPaaS API 호출
+   - 발송 결과 업데이트

2. KT CPaaS API 호출

java
// HTTP 요청 생성
+URL url = new URL(msgKtUrlSms);
+HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+conn.setRequestMethod("POST");
+conn.setRequestProperty("Authorization", msgKtKey);
+conn.setRequestProperty("Content-Type", "application/json");
+
+// 요청 본문 작성
+JSONObject requestBody = new JSONObject();
+requestBody.put("sendPhone", sendTel);
+requestBody.put("destPhone", moTel);
+requestBody.put("sendMessage", sendCont);
+
+// 요청 전송
+OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
+writer.write(requestBody.toString());
+writer.flush();
+
+// 응답 처리
+BufferedReader reader = new BufferedReader(
+    new InputStreamReader(conn.getInputStream())
+);
+String response = reader.readLine();

발송 타입

rev_type

rev_type_value

메시지 타입

msg_type

메시지 상태

설정

application.yaml

yaml
msg:
+  kt:
+    scheduled: false                 # 스케줄러 활성화 여부
+    key: Basic Q1BTODQwMDA1ODcx...  # KT CPaaS API 키
+    stel: 15883391                   # 발신 번호
+    url:
+      sms: https://cpaas.api.kt.com/cpaas/v1.0/CPaaS_sendSMS

사용 예시

즉시 발송

java
POST /api/admin/AsSMSManagement/msgSend
+Body: {
+  "params": {
+    "msg_type": "SMS",
+    "rev_type": "10",
+    "rev_type_value": "",
+    "msg_cont": "안녕하세요. 테스트 메시지입니다.",
+    "send_tel": "01012345678",
+    "dt_mo_tel": "01087654321",
+    ...
+  },
+  "sessionInfo": {
+    "CompCode": "COMP001",
+    "LangID": "KOR",
+    "UserID": "USER001",
+    "ipAddress": "192.168.1.100"
+  }
+}
+
+Response: {
+  "status": "S",
+  "data": {
+    "CV_1": [{ "mst_no": "MSG001" }],
+    "isok": "Y"
+  }
+}

예약 발송

java
// 5분 후 발송
+{
+  "params": {
+    "rev_type": "20",
+    "rev_type_value": "5",
+    ...
+  }
+}

주의사항

  1. 즉시 발송: rev_type="10"인 경우에만 즉시 발송
  2. 예약 발송: 스케줄러가 실행되어야 발송됨
  3. 메시지 내용: 특수 문자 제한이 있을 수 있음
  4. 전화번호 형식: 하이픈(-) 없이 숫자만 입력
  5. API 키: KT CPaaS API 키는 설정 파일에 저장

다음 단계

`,46)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_sms.md.BBDe9UYt.lean.js b/assets/backend_project-structure_framework_sms.md.BBDe9UYt.lean.js new file mode 100644 index 0000000..7bec432 --- /dev/null +++ b/assets/backend_project-structure_framework_sms.md.BBDe9UYt.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"SMS 발송 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/sms.md","filePath":"backend/project-structure/framework/sms.md"}'),l={name:"backend/project-structure/framework/sms.md"};function p(h,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",46)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_sms.md.C64Hdd-c.js b/assets/backend_project-structure_framework_sms.md.C64Hdd-c.js deleted file mode 100644 index 4f0a170..0000000 --- a/assets/backend_project-structure_framework_sms.md.C64Hdd-c.js +++ /dev/null @@ -1,115 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"SMS 발송 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/sms.md","filePath":"backend/project-structure/framework/sms.md"}'),l={name:"backend/project-structure/framework/sms.md"};function p(h,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

SMS 발송 모듈

SMS 메시지 발송 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/sms/
-├── controller/
-│   └── AxpSmsController.java       # SMS 발송 API 컨트롤러
-├── mapper/
-│   └── AxpSmsMapper.java          # SMS 관련 Mapper
-└── service/
-    └── AxpSmsService.java          # SMS 발송 서비스

주요 클래스

1. AxpSmsController

위치: axpFramework.sms.controller.AxpSmsController

역할: SMS 발송 API 엔드포인트 제공

주요 엔드포인트:

사용 예시:

java
@RestController
-@RequestMapping("/api/admin")
-public class AxpSmsController extends AxpBaseWebController {
-    
-    @Resource(name = "AxpSmsService")
-    private AxpSmsService axpSmsService;
-    
-    @PostMapping("/AsSMSManagement/msgSend")
-    public ResponseEntity<String> msgSend(
-            @RequestBody Map<String, Object> requestBody) {
-        // SMS 발송 처리
-    }
-}

2. AxpSmsService

위치: axpFramework.sms.service.AxpSmsService

역할: SMS 발송 비즈니스 로직

주요 메서드:

사용 예시:

java
@Service("AxpSmsService")
-public class AxpSmsService {
-    
-    @Value("\${msg.kt.url.sms}")
-    private String msgKtUrlSms;
-    
-    @Value("\${msg.kt.key}")
-    private String msgKtKey;
-    
-    public boolean phoneMsgSend(String mstNo, 
-                               Map<String, Object> sessionInfo) {
-        // DB에서 발송 정보 조회
-        // KT CPaaS API 호출
-        // 발송 결과 업데이트
-    }
-}

SMS 발송 프로세스

1. 발송 정보 저장

1. 클라이언트 → 서버: 발송 요청
-   {
-     "params": {
-       "msg_type": "SMS",
-       "rev_type": "10",
-       "msg_cont": "메시지 내용",
-       "dt_mo_tel": "01012345678",
-       ...
-     },
-     "sessionInfo": { ... }
-   }
-
-2. 서버 처리:
-   - 발송 정보 DB 저장 (프로시저: P_SYSMESSAGESEND_S)
-   - 발송 타입에 따라 처리:
-     * rev_type="10": 즉시 발송
-     * rev_type="20", "30", "40": 예약 발송
-
-3. 즉시 발송인 경우:
-   - 발송 번호 조회
-   - KT CPaaS API 호출
-   - 발송 결과 업데이트

2. KT CPaaS API 호출

java
// HTTP 요청 생성
-URL url = new URL(msgKtUrlSms);
-HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-conn.setRequestMethod("POST");
-conn.setRequestProperty("Authorization", msgKtKey);
-conn.setRequestProperty("Content-Type", "application/json");
-
-// 요청 본문 작성
-JSONObject requestBody = new JSONObject();
-requestBody.put("sendPhone", sendTel);
-requestBody.put("destPhone", moTel);
-requestBody.put("sendMessage", sendCont);
-
-// 요청 전송
-OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
-writer.write(requestBody.toString());
-writer.flush();
-
-// 응답 처리
-BufferedReader reader = new BufferedReader(
-    new InputStreamReader(conn.getInputStream())
-);
-String response = reader.readLine();

발송 타입

rev_type

rev_type_value

메시지 타입

msg_type

메시지 상태

설정

application.yaml

yaml
msg:
-  kt:
-    scheduled: false                 # 스케줄러 활성화 여부
-    key: Basic Q1BTODQwMDA1ODcx...  # KT CPaaS API 키
-    stel: 15883391                   # 발신 번호
-    url:
-      sms: https://cpaas.api.kt.com/cpaas/v1.0/CPaaS_sendSMS

사용 예시

즉시 발송

java
POST /api/admin/AsSMSManagement/msgSend
-Body: {
-  "params": {
-    "msg_type": "SMS",
-    "rev_type": "10",
-    "rev_type_value": "",
-    "msg_cont": "안녕하세요. 테스트 메시지입니다.",
-    "send_tel": "01012345678",
-    "dt_mo_tel": "01087654321",
-    ...
-  },
-  "sessionInfo": {
-    "CompCode": "COMP001",
-    "LangID": "KOR",
-    "UserID": "USER001",
-    "ipAddress": "192.168.1.100"
-  }
-}
-
-Response: {
-  "status": "S",
-  "data": {
-    "CV_1": [{ "mst_no": "MSG001" }],
-    "isok": "Y"
-  }
-}

예약 발송

java
// 5분 후 발송
-{
-  "params": {
-    "rev_type": "20",
-    "rev_type_value": "5",
-    ...
-  }
-}

주의사항

  1. 즉시 발송: rev_type="10"인 경우에만 즉시 발송
  2. 예약 발송: 스케줄러가 실행되어야 발송됨
  3. 메시지 내용: 특수 문자 제한이 있을 수 있음
  4. 전화번호 형식: 하이픈(-) 없이 숫자만 입력
  5. API 키: KT CPaaS API 키는 설정 파일에 저장

다음 단계

`,46)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_framework_sms.md.C64Hdd-c.lean.js b/assets/backend_project-structure_framework_sms.md.C64Hdd-c.lean.js deleted file mode 100644 index 2bc9e84..0000000 --- a/assets/backend_project-structure_framework_sms.md.C64Hdd-c.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"SMS 발송 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/framework/sms.md","filePath":"backend/project-structure/framework/sms.md"}'),l={name:"backend/project-structure/framework/sms.md"};function p(h,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",46)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/backend_project-structure_resources.md.BBOYoIgK.js b/assets/backend_project-structure_resources.md.BBOYoIgK.js deleted file mode 100644 index 5a3d5db..0000000 --- a/assets/backend_project-structure_resources.md.BBOYoIgK.js +++ /dev/null @@ -1,61 +0,0 @@ -import{_ as a,c as i,o as n,aG as p}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"리소스 파일 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/resources.md","filePath":"backend/project-structure/resources.md"}'),l={name:"backend/project-structure/resources.md"};function t(e,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[p(`

리소스 파일 구조

리소스 파일은 src/main/resources/ 디렉토리에 위치합니다.

디렉토리 구조

resources/
-├── application.yaml                 # 기본 설정 파일
-├── config/                         # 환경별 설정 파일
-├── mapper/                         # MyBatis XML 매퍼
-├── mapper-config/                  # MyBatis 설정 파일
-├── report/                         # 리포트 템플릿
-├── lib/                            # 외부 라이브러리
-├── antisamy-policy.xml            # XSS 방지 정책
-├── logback-spring.xml             # 로깅 설정
-└── banner.txt                     # 시작 배너

설정 파일

1. application.yaml

기본 설정 파일로, 환경별 설정 파일을 import합니다.

yaml
spring:
-  profiles:
-    active: "@spring.profiles.active@"
-  config:
-    import: "optional:config/"

2. config/ 디렉토리

환경별 설정 파일이 위치합니다.

config/
-├── application-local.yaml          # 로컬 환경
-├── application-dev.yaml            # 개발 환경
-├── application-prod.yaml           # 운영 환경
-└── ai-config.yaml                  # AI 서비스 설정

사용 방법:

bash
# 로컬 환경
-mvn spring-boot:run -Plocal
-
-# 개발 환경
-mvn spring-boot:run -Pdev
-
-# 운영 환경
-mvn spring-boot:run -Pprod

MyBatis 매퍼

mapper/ 디렉토리

MyBatis XML 매퍼 파일이 위치합니다.

mapper/
-├── axpFramework/                   # 공통 프레임워크 매퍼
-│   ├── AxpCommProcMapper.xml
-│   ├── oracle/
-│   ├── postgres/
-│   └── tibero/
-└── ess/                            # ESS 모듈 매퍼
-    └── com/
-        └── EssComMapper.xml

매퍼 파일 구조

xml
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="ess.com.mapper.EssComMapper">
-    <select id="selectList" resultType="map">
-        SELECT * FROM table
-        WHERE condition = #{param}
-    </select>
-</mapper>

mapper-config/ 디렉토리

데이터베이스별 MyBatis 설정 파일이 위치합니다.

mapper-config/
-├── mybatis-config-tibero.xml      # Tibero 설정
-├── mybatis-config-oracle.xml       # Oracle 설정
-└── mybatis-config-postgresql.xml   # PostgreSQL 설정

리포트 템플릿

report/ 디렉토리

JasperReports 템플릿과 폰트가 위치합니다.

report/
-├── jasperForms/                    # 리포트 템플릿 (.jrxml)
-│   ├── FIG3300_REPORT.jrxml
-│   ├── HRA1600_2024_REPORT_ALL.jrxml
-│   └── ...
-└── jasperfonts/                    # 한글 폰트
-    ├── NanumGothic/
-    ├── MalgunGothic/
-    └── ...

리포트 템플릿 작성

.jrxml 파일은 JasperReports Designer 또는 iReport로 작성합니다.

템플릿 위치:

외부 라이브러리

lib/ 디렉토리

Maven으로 관리되지 않는 외부 라이브러리가 위치합니다.

lib/
-└── tibero6-jdbc.jar               # Tibero JDBC 드라이버

Maven 설정:

xml
<dependency>
-    <groupId>com.tmax.tibero</groupId>
-    <artifactId>tibero-jdbc</artifactId>
-    <version>6.0</version>
-    <scope>system</scope>
-    <systemPath>\${basedir}/src/main/resources/lib/tibero6-jdbc.jar</systemPath>
-</dependency>

보안 정책 파일

antisamy-policy.xml

OWASP AntiSamy의 XSS 방지 정책 파일입니다.

위치: src/main/resources/antisamy-policy.xml

용도:

로깅 설정

logback-spring.xml

Logback 로깅 설정 파일입니다.

위치: src/main/resources/logback-spring.xml

주요 설정:

로그 파일 위치:

배너

애플리케이션 시작 시 표시되는 배너입니다.

위치: src/main/resources/banner.txt

비활성화:

yaml
spring:
-  main:
-    banner-mode: off

다음 단계

`,58)]))}const g=a(l,[["render",t]]);export{d as __pageData,g as default}; diff --git a/assets/backend_project-structure_resources.md.BBOYoIgK.lean.js b/assets/backend_project-structure_resources.md.BBOYoIgK.lean.js deleted file mode 100644 index 04e7b5a..0000000 --- a/assets/backend_project-structure_resources.md.BBOYoIgK.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as p}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"리소스 파일 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/resources.md","filePath":"backend/project-structure/resources.md"}'),l={name:"backend/project-structure/resources.md"};function t(e,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[p("",58)]))}const g=a(l,[["render",t]]);export{d as __pageData,g as default}; diff --git a/assets/backend_project-structure_resources.md.BPIkOSX_.js b/assets/backend_project-structure_resources.md.BPIkOSX_.js new file mode 100644 index 0000000..268d29a --- /dev/null +++ b/assets/backend_project-structure_resources.md.BPIkOSX_.js @@ -0,0 +1,61 @@ +import{_ as a,c as i,o as n,aG as p}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"리소스 파일 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/resources.md","filePath":"backend/project-structure/resources.md"}'),l={name:"backend/project-structure/resources.md"};function t(e,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[p(`

리소스 파일 구조

리소스 파일은 src/main/resources/ 디렉토리에 위치합니다.

디렉토리 구조

resources/
+├── application.yaml                 # 기본 설정 파일
+├── config/                         # 환경별 설정 파일
+├── mapper/                         # MyBatis XML 매퍼
+├── mapper-config/                  # MyBatis 설정 파일
+├── report/                         # 리포트 템플릿
+├── lib/                            # 외부 라이브러리
+├── antisamy-policy.xml            # XSS 방지 정책
+├── logback-spring.xml             # 로깅 설정
+└── banner.txt                     # 시작 배너

설정 파일

1. application.yaml

기본 설정 파일로, 환경별 설정 파일을 import합니다.

yaml
spring:
+  profiles:
+    active: "@spring.profiles.active@"
+  config:
+    import: "optional:config/"

2. config/ 디렉토리

환경별 설정 파일이 위치합니다.

config/
+├── application-local.yaml          # 로컬 환경
+├── application-dev.yaml            # 개발 환경
+├── application-prod.yaml           # 운영 환경
+└── ai-config.yaml                  # AI 서비스 설정

사용 방법:

bash
# 로컬 환경
+mvn spring-boot:run -Plocal
+
+# 개발 환경
+mvn spring-boot:run -Pdev
+
+# 운영 환경
+mvn spring-boot:run -Pprod

MyBatis 매퍼

mapper/ 디렉토리

MyBatis XML 매퍼 파일이 위치합니다.

mapper/
+├── axpFramework/                   # 공통 프레임워크 매퍼
+│   ├── AxpCommProcMapper.xml
+│   ├── oracle/
+│   ├── postgres/
+│   └── tibero/
+└── ess/                            # ESS 모듈 매퍼
+    └── com/
+        └── EssComMapper.xml

매퍼 파일 구조

xml
<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ess.com.mapper.EssComMapper">
+    <select id="selectList" resultType="map">
+        SELECT * FROM table
+        WHERE condition = #{param}
+    </select>
+</mapper>

mapper-config/ 디렉토리

데이터베이스별 MyBatis 설정 파일이 위치합니다.

mapper-config/
+├── mybatis-config-tibero.xml      # Tibero 설정
+├── mybatis-config-oracle.xml       # Oracle 설정
+└── mybatis-config-postgresql.xml   # PostgreSQL 설정

리포트 템플릿

report/ 디렉토리

JasperReports 템플릿과 폰트가 위치합니다.

report/
+├── jasperForms/                    # 리포트 템플릿 (.jrxml)
+│   ├── FIG3300_REPORT.jrxml
+│   ├── HRA1600_2024_REPORT_ALL.jrxml
+│   └── ...
+└── jasperfonts/                    # 한글 폰트
+    ├── NanumGothic/
+    ├── MalgunGothic/
+    └── ...

리포트 템플릿 작성

.jrxml 파일은 JasperReports Designer 또는 iReport로 작성합니다.

템플릿 위치:

외부 라이브러리

lib/ 디렉토리

Maven으로 관리되지 않는 외부 라이브러리가 위치합니다.

lib/
+└── tibero6-jdbc.jar               # Tibero JDBC 드라이버

Maven 설정:

xml
<dependency>
+    <groupId>com.tmax.tibero</groupId>
+    <artifactId>tibero-jdbc</artifactId>
+    <version>6.0</version>
+    <scope>system</scope>
+    <systemPath>\${basedir}/src/main/resources/lib/tibero6-jdbc.jar</systemPath>
+</dependency>

보안 정책 파일

antisamy-policy.xml

OWASP AntiSamy의 XSS 방지 정책 파일입니다.

위치: src/main/resources/antisamy-policy.xml

용도:

로깅 설정

logback-spring.xml

Logback 로깅 설정 파일입니다.

위치: src/main/resources/logback-spring.xml

주요 설정:

로그 파일 위치:

배너

애플리케이션 시작 시 표시되는 배너입니다.

위치: src/main/resources/banner.txt

비활성화:

yaml
spring:
+  main:
+    banner-mode: off

다음 단계

`,58)]))}const g=a(l,[["render",t]]);export{d as __pageData,g as default}; diff --git a/assets/backend_project-structure_resources.md.BPIkOSX_.lean.js b/assets/backend_project-structure_resources.md.BPIkOSX_.lean.js new file mode 100644 index 0000000..5594f59 --- /dev/null +++ b/assets/backend_project-structure_resources.md.BPIkOSX_.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as p}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"리소스 파일 구조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/project-structure/resources.md","filePath":"backend/project-structure/resources.md"}'),l={name:"backend/project-structure/resources.md"};function t(e,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[p("",58)]))}const g=a(l,[["render",t]]);export{d as __pageData,g as default}; diff --git a/assets/backend_references_classes.md.CkFo3F5d.js b/assets/backend_references_classes.md.CkFo3F5d.js deleted file mode 100644 index 2ca39d3..0000000 --- a/assets/backend_references_classes.md.CkFo3F5d.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as o,o as i,aG as l}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"주요 클래스 참조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/classes.md","filePath":"backend/references/classes.md"}'),r={name:"backend/references/classes.md"};function c(t,e,d,s,n,h){return i(),o("div",null,e[0]||(e[0]=[l('

주요 클래스 참조

AxpFramework의 주요 클래스를 정리합니다.

공통 컨트롤러

공통 서비스

설정 클래스

다음 단계

',10)]))}const m=a(r,[["render",c]]);export{f as __pageData,m as default}; diff --git a/assets/backend_references_classes.md.CkFo3F5d.lean.js b/assets/backend_references_classes.md.CkFo3F5d.lean.js deleted file mode 100644 index d129f2a..0000000 --- a/assets/backend_references_classes.md.CkFo3F5d.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as o,o as i,aG as l}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"주요 클래스 참조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/classes.md","filePath":"backend/references/classes.md"}'),r={name:"backend/references/classes.md"};function c(t,e,d,s,n,h){return i(),o("div",null,e[0]||(e[0]=[l("",10)]))}const m=a(r,[["render",c]]);export{f as __pageData,m as default}; diff --git a/assets/backend_references_classes.md.DUUjZFEH.js b/assets/backend_references_classes.md.DUUjZFEH.js new file mode 100644 index 0000000..9b08c1f --- /dev/null +++ b/assets/backend_references_classes.md.DUUjZFEH.js @@ -0,0 +1 @@ +import{_ as a,c as o,o as i,aG as l}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"주요 클래스 참조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/classes.md","filePath":"backend/references/classes.md"}'),r={name:"backend/references/classes.md"};function c(t,e,d,s,n,h){return i(),o("div",null,e[0]||(e[0]=[l('

주요 클래스 참조

AxpFramework의 주요 클래스를 정리합니다.

공통 컨트롤러

공통 서비스

설정 클래스

다음 단계

',10)]))}const m=a(r,[["render",c]]);export{f as __pageData,m as default}; diff --git a/assets/backend_references_classes.md.DUUjZFEH.lean.js b/assets/backend_references_classes.md.DUUjZFEH.lean.js new file mode 100644 index 0000000..76e38e8 --- /dev/null +++ b/assets/backend_references_classes.md.DUUjZFEH.lean.js @@ -0,0 +1 @@ +import{_ as a,c as o,o as i,aG as l}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"주요 클래스 참조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/classes.md","filePath":"backend/references/classes.md"}'),r={name:"backend/references/classes.md"};function c(t,e,d,s,n,h){return i(),o("div",null,e[0]||(e[0]=[l("",10)]))}const m=a(r,[["render",c]]);export{f as __pageData,m as default}; diff --git a/assets/backend_references_config-files.md.D2nIZrYt.js b/assets/backend_references_config-files.md.D2nIZrYt.js deleted file mode 100644 index 4f17bf8..0000000 --- a/assets/backend_references_config-files.md.D2nIZrYt.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o,aG as l}from"./chunks/framework.CrOSaJJH.js";const p=JSON.parse('{"title":"설정 파일 참조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/config-files.md","filePath":"backend/references/config-files.md"}'),c={name:"backend/references/config-files.md"};function t(r,e,n,s,d,f){return o(),i("div",null,e[0]||(e[0]=[l('

설정 파일 참조

주요 설정 파일의 위치와 역할을 정리합니다.

설정 파일

MyBatis 설정

다음 단계

',8)]))}const h=a(c,[["render",t]]);export{p as __pageData,h as default}; diff --git a/assets/backend_references_config-files.md.D2nIZrYt.lean.js b/assets/backend_references_config-files.md.D2nIZrYt.lean.js deleted file mode 100644 index ae4b6d2..0000000 --- a/assets/backend_references_config-files.md.D2nIZrYt.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o,aG as l}from"./chunks/framework.CrOSaJJH.js";const p=JSON.parse('{"title":"설정 파일 참조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/config-files.md","filePath":"backend/references/config-files.md"}'),c={name:"backend/references/config-files.md"};function t(r,e,n,s,d,f){return o(),i("div",null,e[0]||(e[0]=[l("",8)]))}const h=a(c,[["render",t]]);export{p as __pageData,h as default}; diff --git a/assets/backend_references_config-files.md.DrGrssZy.js b/assets/backend_references_config-files.md.DrGrssZy.js new file mode 100644 index 0000000..e481bca --- /dev/null +++ b/assets/backend_references_config-files.md.DrGrssZy.js @@ -0,0 +1 @@ +import{_ as a,c as i,o,aG as l}from"./chunks/framework.DytOxJW6.js";const p=JSON.parse('{"title":"설정 파일 참조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/config-files.md","filePath":"backend/references/config-files.md"}'),c={name:"backend/references/config-files.md"};function t(r,e,n,s,d,f){return o(),i("div",null,e[0]||(e[0]=[l('

설정 파일 참조

주요 설정 파일의 위치와 역할을 정리합니다.

설정 파일

MyBatis 설정

다음 단계

',8)]))}const h=a(c,[["render",t]]);export{p as __pageData,h as default}; diff --git a/assets/backend_references_config-files.md.DrGrssZy.lean.js b/assets/backend_references_config-files.md.DrGrssZy.lean.js new file mode 100644 index 0000000..9d2271e --- /dev/null +++ b/assets/backend_references_config-files.md.DrGrssZy.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o,aG as l}from"./chunks/framework.DytOxJW6.js";const p=JSON.parse('{"title":"설정 파일 참조","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/config-files.md","filePath":"backend/references/config-files.md"}'),c={name:"backend/references/config-files.md"};function t(r,e,n,s,d,f){return o(),i("div",null,e[0]||(e[0]=[l("",8)]))}const h=a(c,[["render",t]]);export{p as __pageData,h as default}; diff --git a/assets/backend_references_external-libs.md.BsWxAvun.js b/assets/backend_references_external-libs.md.BsWxAvun.js deleted file mode 100644 index a560611..0000000 --- a/assets/backend_references_external-libs.md.BsWxAvun.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as t,aG as i}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"외부 라이브러리 문서","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/external-libs.md","filePath":"backend/references/external-libs.md"}'),o={name:"backend/references/external-libs.md"};function l(s,r,n,h,p,c){return t(),a("div",null,r[0]||(r[0]=[i('

외부 라이브러리 문서

사용하는 주요 외부 라이브러리의 공식 문서 링크입니다.

Spring Boot

MyBatis

Spring Security

JWT

JasperReports

Apache POI

Redis

',16)]))}const b=e(o,[["render",l]]);export{f as __pageData,b as default}; diff --git a/assets/backend_references_external-libs.md.BsWxAvun.lean.js b/assets/backend_references_external-libs.md.BsWxAvun.lean.js deleted file mode 100644 index 6d0ce15..0000000 --- a/assets/backend_references_external-libs.md.BsWxAvun.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as t,aG as i}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"외부 라이브러리 문서","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/external-libs.md","filePath":"backend/references/external-libs.md"}'),o={name:"backend/references/external-libs.md"};function l(s,r,n,h,p,c){return t(),a("div",null,r[0]||(r[0]=[i("",16)]))}const b=e(o,[["render",l]]);export{f as __pageData,b as default}; diff --git a/assets/backend_references_external-libs.md.DE4b9sIk.js b/assets/backend_references_external-libs.md.DE4b9sIk.js new file mode 100644 index 0000000..53eccff --- /dev/null +++ b/assets/backend_references_external-libs.md.DE4b9sIk.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,aG as i}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"외부 라이브러리 문서","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/external-libs.md","filePath":"backend/references/external-libs.md"}'),o={name:"backend/references/external-libs.md"};function l(s,r,n,h,p,c){return t(),a("div",null,r[0]||(r[0]=[i('

외부 라이브러리 문서

사용하는 주요 외부 라이브러리의 공식 문서 링크입니다.

Spring Boot

MyBatis

Spring Security

JWT

JasperReports

Apache POI

Redis

',16)]))}const b=e(o,[["render",l]]);export{f as __pageData,b as default}; diff --git a/assets/backend_references_external-libs.md.DE4b9sIk.lean.js b/assets/backend_references_external-libs.md.DE4b9sIk.lean.js new file mode 100644 index 0000000..e9dee06 --- /dev/null +++ b/assets/backend_references_external-libs.md.DE4b9sIk.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,aG as i}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"외부 라이브러리 문서","description":"","frontmatter":{},"headers":[],"relativePath":"backend/references/external-libs.md","filePath":"backend/references/external-libs.md"}'),o={name:"backend/references/external-libs.md"};function l(s,r,n,h,p,c){return t(),a("div",null,r[0]||(r[0]=[i("",16)]))}const b=e(o,[["render",l]]);export{f as __pageData,b as default}; diff --git a/assets/backend_security_encryption.md.B1wehdUb.js b/assets/backend_security_encryption.md.B1wehdUb.js new file mode 100644 index 0000000..4090a94 --- /dev/null +++ b/assets/backend_security_encryption.md.B1wehdUb.js @@ -0,0 +1,22 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"암호화 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/encryption.md","filePath":"backend/security/encryption.md"}'),e={name:"backend/security/encryption.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t(`

암호화 유틸리티

AxpFramework는 다양한 암호화 유틸리티를 제공합니다.

AES-128

대칭키 암호화 알고리즘입니다.

사용 예시

java
@Autowired
+private AxpCommAES128 aes128;
+
+// 암호화
+String encrypted = aes128.encrypt(plainText);
+
+// 복호화
+String decrypted = aes128.decrypt(encrypted);

용도

RSA

공개키 암호화 알고리즘입니다.

사용 예시

java
@Autowired
+private AxpCommRsa rsa;
+
+// 암호화
+String encrypted = rsa.encrypt(plainText);
+
+// 복호화
+String decrypted = rsa.decrypt(encrypted);

설정

yaml
rsa:
+  private: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCmI2Rk09DaXKzBR3GkbK+33Ye7QZEXx3QfZnMcO7yJOnv3BCO5HYv7fFwqt9Wctu+ZTiuyI3Oqi+PF65/0Y9AdambuWMj2ot+xbm9ipLzIdUcdZGC1XLazMkf6IsepO/xr109e/JEHbFPYmO3Bc6yydl226shGX0H3/nq3uej2w2Z4LcjMaL4qFP9FWZx8nNvzxkHQ2we5les9phYdOtZijcqHvPvzTuPtuA4c+9pFOkjqsEzeck1La3KVlCXb2OFUZ3+dwJHU3pyp9suVNOWk80WVxgtxGJQAAnFfBFCmeOtrOeJ6aXLi8fxAKwdAElhSOIwwW6baAHfvH0Wz3jzdAgMBAAECggEAOZjehsgaSYHEkJNUtiTJ/IvsMQKnqx9GRlaNxLV/BPJGJNqGCfjQ3WR9TYADKfwP7822f2EkCfXKhwTLpP3vmisXuT0Fmt/XfltjeUbUfgiOmYWBs46Ldm+RnYnuP2Eg/0Abb7pPC0xGezp1ftI8Bnjbv30A5sjChZfvcn+c4ONIfA85ogchOL8aSWAqtuj1WmPAHs1fiCbailExuqMZ0mGLYs1g0e0W1zKUqVpWxKchF1rOUmtMAHy0Sqlw+XKSDS4nVxiLTMMxPKM1Jt8Io/nE4j5QmcAAaWExRuvkbokKrCjXAFVj4fIlwFUdxsgqi14yhxbVNLuIj9WtHEnSHwKBgQDlCw7b3dQy8rFQ4CwTaeEii0tIM7xeSwkSYx7BgNgeNcRlhbg6Kl2OVaLmryQhj9VOIFFWXbvK6FIiG0IoBVefit+IYUo8DBYXHsrOHE1eZmdvW2k2uroEAZXTFlcNMRxO3av/nkWr2ldJOEqk9hvc2xfqVEMMjNTqDDhCIqMwwwKBgQC5sQswRitzSqFgEgfrGSuvXW/r8iM/4QLMGNiC5LlWdA9T+p/M0WCaJab43KEC8ZMWq/kH3+AtSYUIZXqKjqQleDN12a1PSQRleolE8iUMRbO4HxfnlC7drZAb1EK0Qbwq61xJE0/EuFLzxIE8SnhylKUtUAcLfKjLEc+1QQIB3wKBgHL+wk8RaODLiMsaQgbdOfOmC/4MO577/WoF6gMtNVS1mg1+vag2bRJxXICFnpZbKLU49J1wIkEVs2b8WJLPW9b2WpSWhDbxuoWRKDGjdBTZRUVbl8+qoIoyYY7BwKMW7SeLlDeat1A5J2nToWaBSivwtGkqNR+v9ZYs3HIYAecRAoGADTqkvmqxW8RcXNjMAZ7IcvToLVoR0tI3/cxjWGftIFCiauw3CEN+a1z1WVN2kRwey4Wy9zGm6fML7D42jbp9zUGUAPhiFXzxOD2Tm/rYUtiAZkSo0lHHSPm9g44KtobcXf5ok7gxfaVYG4/LWT1A+YDHh8PkzJez+supDZO1DecCgYAaKjrJVqScBpXlQ3EHPv5qGyVWwhcSKl9FNkMMIFmJfkIYckWqFqQX/+44EDtCYUFCShoSPuhnre9IVTfmoHBWa/R6CbydFxPYuDHsgDiDI+BMZq0It6rB8NH26gw0CzyxpZxVpI6x3FRWZ/KAJtaLsY8Zewf18C9MXdRYhXlSXg==

해시 함수

MD5

java
@Autowired
+private AxpCommMD5Util md5Util;
+
+String hash = md5Util.hash(input);

SHA-256

java
@Autowired
+private AxpCommSHA256Util sha256Util;
+
+String hash = sha256Util.hash(input);

다음 단계

`,21)]))}const o=a(e,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/backend_security_encryption.md.B1wehdUb.lean.js b/assets/backend_security_encryption.md.B1wehdUb.lean.js new file mode 100644 index 0000000..e4b4216 --- /dev/null +++ b/assets/backend_security_encryption.md.B1wehdUb.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"암호화 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/encryption.md","filePath":"backend/security/encryption.md"}'),e={name:"backend/security/encryption.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t("",21)]))}const o=a(e,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/backend_security_encryption.md.CdzoDBAG.js b/assets/backend_security_encryption.md.CdzoDBAG.js deleted file mode 100644 index 9302f0a..0000000 --- a/assets/backend_security_encryption.md.CdzoDBAG.js +++ /dev/null @@ -1,22 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"암호화 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/encryption.md","filePath":"backend/security/encryption.md"}'),e={name:"backend/security/encryption.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t(`

암호화 유틸리티

AxpFramework는 다양한 암호화 유틸리티를 제공합니다.

AES-128

대칭키 암호화 알고리즘입니다.

사용 예시

java
@Autowired
-private AxpCommAES128 aes128;
-
-// 암호화
-String encrypted = aes128.encrypt(plainText);
-
-// 복호화
-String decrypted = aes128.decrypt(encrypted);

용도

RSA

공개키 암호화 알고리즘입니다.

사용 예시

java
@Autowired
-private AxpCommRsa rsa;
-
-// 암호화
-String encrypted = rsa.encrypt(plainText);
-
-// 복호화
-String decrypted = rsa.decrypt(encrypted);

설정

yaml
rsa:
-  private: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCmI2Rk09DaXKzBR3GkbK+33Ye7QZEXx3QfZnMcO7yJOnv3BCO5HYv7fFwqt9Wctu+ZTiuyI3Oqi+PF65/0Y9AdambuWMj2ot+xbm9ipLzIdUcdZGC1XLazMkf6IsepO/xr109e/JEHbFPYmO3Bc6yydl226shGX0H3/nq3uej2w2Z4LcjMaL4qFP9FWZx8nNvzxkHQ2we5les9phYdOtZijcqHvPvzTuPtuA4c+9pFOkjqsEzeck1La3KVlCXb2OFUZ3+dwJHU3pyp9suVNOWk80WVxgtxGJQAAnFfBFCmeOtrOeJ6aXLi8fxAKwdAElhSOIwwW6baAHfvH0Wz3jzdAgMBAAECggEAOZjehsgaSYHEkJNUtiTJ/IvsMQKnqx9GRlaNxLV/BPJGJNqGCfjQ3WR9TYADKfwP7822f2EkCfXKhwTLpP3vmisXuT0Fmt/XfltjeUbUfgiOmYWBs46Ldm+RnYnuP2Eg/0Abb7pPC0xGezp1ftI8Bnjbv30A5sjChZfvcn+c4ONIfA85ogchOL8aSWAqtuj1WmPAHs1fiCbailExuqMZ0mGLYs1g0e0W1zKUqVpWxKchF1rOUmtMAHy0Sqlw+XKSDS4nVxiLTMMxPKM1Jt8Io/nE4j5QmcAAaWExRuvkbokKrCjXAFVj4fIlwFUdxsgqi14yhxbVNLuIj9WtHEnSHwKBgQDlCw7b3dQy8rFQ4CwTaeEii0tIM7xeSwkSYx7BgNgeNcRlhbg6Kl2OVaLmryQhj9VOIFFWXbvK6FIiG0IoBVefit+IYUo8DBYXHsrOHE1eZmdvW2k2uroEAZXTFlcNMRxO3av/nkWr2ldJOEqk9hvc2xfqVEMMjNTqDDhCIqMwwwKBgQC5sQswRitzSqFgEgfrGSuvXW/r8iM/4QLMGNiC5LlWdA9T+p/M0WCaJab43KEC8ZMWq/kH3+AtSYUIZXqKjqQleDN12a1PSQRleolE8iUMRbO4HxfnlC7drZAb1EK0Qbwq61xJE0/EuFLzxIE8SnhylKUtUAcLfKjLEc+1QQIB3wKBgHL+wk8RaODLiMsaQgbdOfOmC/4MO577/WoF6gMtNVS1mg1+vag2bRJxXICFnpZbKLU49J1wIkEVs2b8WJLPW9b2WpSWhDbxuoWRKDGjdBTZRUVbl8+qoIoyYY7BwKMW7SeLlDeat1A5J2nToWaBSivwtGkqNR+v9ZYs3HIYAecRAoGADTqkvmqxW8RcXNjMAZ7IcvToLVoR0tI3/cxjWGftIFCiauw3CEN+a1z1WVN2kRwey4Wy9zGm6fML7D42jbp9zUGUAPhiFXzxOD2Tm/rYUtiAZkSo0lHHSPm9g44KtobcXf5ok7gxfaVYG4/LWT1A+YDHh8PkzJez+supDZO1DecCgYAaKjrJVqScBpXlQ3EHPv5qGyVWwhcSKl9FNkMMIFmJfkIYckWqFqQX/+44EDtCYUFCShoSPuhnre9IVTfmoHBWa/R6CbydFxPYuDHsgDiDI+BMZq0It6rB8NH26gw0CzyxpZxVpI6x3FRWZ/KAJtaLsY8Zewf18C9MXdRYhXlSXg==

해시 함수

MD5

java
@Autowired
-private AxpCommMD5Util md5Util;
-
-String hash = md5Util.hash(input);

SHA-256

java
@Autowired
-private AxpCommSHA256Util sha256Util;
-
-String hash = sha256Util.hash(input);

다음 단계

`,21)]))}const o=a(e,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/backend_security_encryption.md.CdzoDBAG.lean.js b/assets/backend_security_encryption.md.CdzoDBAG.lean.js deleted file mode 100644 index 4ecbdd7..0000000 --- a/assets/backend_security_encryption.md.CdzoDBAG.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"암호화 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/encryption.md","filePath":"backend/security/encryption.md"}'),e={name:"backend/security/encryption.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t("",21)]))}const o=a(e,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/backend_security_filters.md.COEaoTgN.js b/assets/backend_security_filters.md.COEaoTgN.js new file mode 100644 index 0000000..de0d985 --- /dev/null +++ b/assets/backend_security_filters.md.COEaoTgN.js @@ -0,0 +1,8 @@ +import{_ as a,c as s,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"보안 필터","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/filters.md","filePath":"backend/security/filters.md"}'),l={name:"backend/security/filters.md"};function n(r,i,h,p,k,o){return t(),s("div",null,i[0]||(i[0]=[e(`

보안 필터

AxpFramework는 여러 보안 필터를 사용하여 요청을 처리합니다.

필터 실행 순서

  1. AxpXssFilter (최우선)
  2. AxpCorsLoggingFilter
  3. AxpDecryptFilter
  4. AxpJwtAuthenticationFilter

XSS 필터

AxpXssFilter

모든 요청에 대해 XSS 공격을 방지합니다.

실행 순서:

  1. 요청 데이터 검사
  2. XSS 패턴 탐지
  3. 위험한 스크립트 제거
  4. 정제된 데이터 전달

설정

java
@Bean
+public FilterRegistrationBean<AxpXssFilter> AxpXssFilterRegistration() {
+    FilterRegistrationBean<AxpXssFilter> registration = new FilterRegistrationBean<>();
+    registration.setFilter(new AxpXssFilter());
+    registration.addUrlPatterns("/*");
+    registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
+    return registration;
+}

복호화 필터

AxpDecryptFilter

RSA로 AES 키를 복호화하고, AES-CBC로 요청 데이터를 복호화합니다.

동작:

  1. 요청 본문에서 암호화된 데이터 추출
  2. RSA로 AES 키 복호화
  3. AES로 요청 데이터 복호화
  4. 원본 JSON 바디로 복원

JWT 인증 필터

AxpJwtAuthenticationFilter

JWT 토큰을 검증하여 인증을 처리합니다.

동작 순서:

  1. 제외 URI 확인
  2. 쿠키에서 Refresh Token 추출
  3. Authorization 헤더에서 Access Token 추출
  4. 토큰 검증
  5. SecurityContext에 인증 정보 설정

Rate Limiting

분당 최대 요청 수를 제한합니다.

java
private static final int MAX_REQUESTS_PER_MINUTE = 120;

CORS 로깅 필터

AxpCorsLoggingFilter

CORS 요청을 로깅합니다.

다음 단계

`,29)]))}const E=a(l,[["render",n]]);export{g as __pageData,E as default}; diff --git a/assets/backend_security_filters.md.COEaoTgN.lean.js b/assets/backend_security_filters.md.COEaoTgN.lean.js new file mode 100644 index 0000000..68d6d69 --- /dev/null +++ b/assets/backend_security_filters.md.COEaoTgN.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"보안 필터","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/filters.md","filePath":"backend/security/filters.md"}'),l={name:"backend/security/filters.md"};function n(r,i,h,p,k,o){return t(),s("div",null,i[0]||(i[0]=[e("",29)]))}const E=a(l,[["render",n]]);export{g as __pageData,E as default}; diff --git a/assets/backend_security_filters.md.DMrGTEKb.js b/assets/backend_security_filters.md.DMrGTEKb.js deleted file mode 100644 index 19212c1..0000000 --- a/assets/backend_security_filters.md.DMrGTEKb.js +++ /dev/null @@ -1,8 +0,0 @@ -import{_ as a,c as s,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"보안 필터","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/filters.md","filePath":"backend/security/filters.md"}'),l={name:"backend/security/filters.md"};function n(r,i,h,p,k,o){return t(),s("div",null,i[0]||(i[0]=[e(`

보안 필터

AxpFramework는 여러 보안 필터를 사용하여 요청을 처리합니다.

필터 실행 순서

  1. AxpXssFilter (최우선)
  2. AxpCorsLoggingFilter
  3. AxpDecryptFilter
  4. AxpJwtAuthenticationFilter

XSS 필터

AxpXssFilter

모든 요청에 대해 XSS 공격을 방지합니다.

실행 순서:

  1. 요청 데이터 검사
  2. XSS 패턴 탐지
  3. 위험한 스크립트 제거
  4. 정제된 데이터 전달

설정

java
@Bean
-public FilterRegistrationBean<AxpXssFilter> AxpXssFilterRegistration() {
-    FilterRegistrationBean<AxpXssFilter> registration = new FilterRegistrationBean<>();
-    registration.setFilter(new AxpXssFilter());
-    registration.addUrlPatterns("/*");
-    registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
-    return registration;
-}

복호화 필터

AxpDecryptFilter

RSA로 AES 키를 복호화하고, AES-CBC로 요청 데이터를 복호화합니다.

동작:

  1. 요청 본문에서 암호화된 데이터 추출
  2. RSA로 AES 키 복호화
  3. AES로 요청 데이터 복호화
  4. 원본 JSON 바디로 복원

JWT 인증 필터

AxpJwtAuthenticationFilter

JWT 토큰을 검증하여 인증을 처리합니다.

동작 순서:

  1. 제외 URI 확인
  2. 쿠키에서 Refresh Token 추출
  3. Authorization 헤더에서 Access Token 추출
  4. 토큰 검증
  5. SecurityContext에 인증 정보 설정

Rate Limiting

분당 최대 요청 수를 제한합니다.

java
private static final int MAX_REQUESTS_PER_MINUTE = 120;

CORS 로깅 필터

AxpCorsLoggingFilter

CORS 요청을 로깅합니다.

다음 단계

`,29)]))}const E=a(l,[["render",n]]);export{g as __pageData,E as default}; diff --git a/assets/backend_security_filters.md.DMrGTEKb.lean.js b/assets/backend_security_filters.md.DMrGTEKb.lean.js deleted file mode 100644 index 82691b1..0000000 --- a/assets/backend_security_filters.md.DMrGTEKb.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as s,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"보안 필터","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/filters.md","filePath":"backend/security/filters.md"}'),l={name:"backend/security/filters.md"};function n(r,i,h,p,k,o){return t(),s("div",null,i[0]||(i[0]=[e("",29)]))}const E=a(l,[["render",n]]);export{g as __pageData,E as default}; diff --git a/assets/backend_security_jwt.md.CJPdXRFu.js b/assets/backend_security_jwt.md.CJPdXRFu.js new file mode 100644 index 0000000..b5594a5 --- /dev/null +++ b/assets/backend_security_jwt.md.CJPdXRFu.js @@ -0,0 +1,20 @@ +import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"JWT 인증","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/jwt.md","filePath":"backend/security/jwt.md"}'),t={name:"backend/security/jwt.md"};function l(h,s,p,k,r,d){return e(),i("div",null,s[0]||(s[0]=[n(`

JWT 인증

AxpFramework는 JWT(JSON Web Token)를 사용하여 인증을 처리합니다.

토큰 타입

Access Token

Refresh Token

토큰 생성

java
@Autowired
+private AxpCommAuthService authService;
+
+// Access Token 생성
+String accessToken = authService.createAccessToken(userId);
+
+// Refresh Token 생성
+String refreshToken = authService.createRefreshToken(userId);

토큰 검증

java
// 토큰 파싱
+Claims claims = authService.parseToken(token);
+String userId = claims.getSubject();
+
+// 토큰 타입 확인
+boolean isRefresh = authService.isRefreshToken(token);

토큰 재발급

API 엔드포인트

POST /api/auth/getAccessToken

요청

응답

json
{
+  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
+}

Redis 토큰 저장

java
@Autowired
+private AxpCommRedisDbService redisService;
+
+Map<String, Object> result = redisService.setRedisToken(
+    uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
+);

다음 단계

`,22)]))}const E=a(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_security_jwt.md.CJPdXRFu.lean.js b/assets/backend_security_jwt.md.CJPdXRFu.lean.js new file mode 100644 index 0000000..22e9d90 --- /dev/null +++ b/assets/backend_security_jwt.md.CJPdXRFu.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"JWT 인증","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/jwt.md","filePath":"backend/security/jwt.md"}'),t={name:"backend/security/jwt.md"};function l(h,s,p,k,r,d){return e(),i("div",null,s[0]||(s[0]=[n("",22)]))}const E=a(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_security_jwt.md.DUux2-kN.js b/assets/backend_security_jwt.md.DUux2-kN.js deleted file mode 100644 index 1eb7da3..0000000 --- a/assets/backend_security_jwt.md.DUux2-kN.js +++ /dev/null @@ -1,20 +0,0 @@ -import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"JWT 인증","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/jwt.md","filePath":"backend/security/jwt.md"}'),t={name:"backend/security/jwt.md"};function l(h,s,p,k,r,d){return e(),i("div",null,s[0]||(s[0]=[n(`

JWT 인증

AxpFramework는 JWT(JSON Web Token)를 사용하여 인증을 처리합니다.

토큰 타입

Access Token

Refresh Token

토큰 생성

java
@Autowired
-private AxpCommAuthService authService;
-
-// Access Token 생성
-String accessToken = authService.createAccessToken(userId);
-
-// Refresh Token 생성
-String refreshToken = authService.createRefreshToken(userId);

토큰 검증

java
// 토큰 파싱
-Claims claims = authService.parseToken(token);
-String userId = claims.getSubject();
-
-// 토큰 타입 확인
-boolean isRefresh = authService.isRefreshToken(token);

토큰 재발급

API 엔드포인트

POST /api/auth/getAccessToken

요청

응답

json
{
-  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
-}

Redis 토큰 저장

java
@Autowired
-private AxpCommRedisDbService redisService;
-
-Map<String, Object> result = redisService.setRedisToken(
-    uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
-);

다음 단계

`,22)]))}const E=a(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_security_jwt.md.DUux2-kN.lean.js b/assets/backend_security_jwt.md.DUux2-kN.lean.js deleted file mode 100644 index 96a72fe..0000000 --- a/assets/backend_security_jwt.md.DUux2-kN.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"JWT 인증","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/jwt.md","filePath":"backend/security/jwt.md"}'),t={name:"backend/security/jwt.md"};function l(h,s,p,k,r,d){return e(),i("div",null,s[0]||(s[0]=[n("",22)]))}const E=a(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/backend_security_spring-security.md.CBs5kSCC.js b/assets/backend_security_spring-security.md.CBs5kSCC.js deleted file mode 100644 index ac6dea1..0000000 --- a/assets/backend_security_spring-security.md.CBs5kSCC.js +++ /dev/null @@ -1,34 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"Spring Security 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/spring-security.md","filePath":"backend/security/spring-security.md"}'),h={name:"backend/security/spring-security.md"};function e(l,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

Spring Security 설정

AxpFramework는 Spring Security를 사용하여 인증/인가를 처리합니다.

SecurityFilterChain

기본 설정

java
@Bean
-public SecurityFilterChain securityFilterChain(HttpSecurity http) {
-    http
-        .csrf(csrf -> csrf.disable())
-        .authorizeHttpRequests(auth -> auth
-            .requestMatchers(excludedUris).permitAll()
-            .anyRequest().authenticated()
-        )
-        .addFilterBefore(
-            new AxpJwtAuthenticationFilter(...),
-            UsernamePasswordAuthenticationFilter.class
-        );
-    return http.build();
-}

제외 URI 설정

yaml
security:
-  excluded-uris: >
-    /api/login/loginCheck
-    ,/api/login/adminLoginCheck
-    ,/api/auth/**
-    ,/report

보안 헤더

Content-Security-Policy

java
.contentSecurityPolicy(csp -> csp.policyDirectives(
-    "default-src 'self'; " +
-    "script-src 'self'; " +
-    "style-src 'self' 'unsafe-inline'; " +
-    "img-src 'self' data: https:; " +
-    "frame-ancestors 'none'; " +
-    "upgrade-insecure-requests"
-))

X-Frame-Options

java
.frameOptions(HeadersConfigurer.FrameOptionsConfig::deny)

기타 보안 헤더

예외 처리

AccessDeniedHandler

java
.accessDeniedHandler((req, res, e) -> {
-    res.setStatus(403);
-    res.setContentType("application/json");
-    res.getWriter().write("{\\"error\\": \\"접근이 거부되었습니다.\\"}");
-})

AuthenticationEntryPoint

java
.authenticationEntryPoint((req, res, e) -> {
-    res.setStatus(401);
-    res.setContentType("application/json");
-    res.getWriter().write("{\\"error\\": \\"인증이 필요합니다.\\"}");
-})

다음 단계

`,21)]))}const o=i(h,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/backend_security_spring-security.md.CBs5kSCC.lean.js b/assets/backend_security_spring-security.md.CBs5kSCC.lean.js deleted file mode 100644 index 23f3c9a..0000000 --- a/assets/backend_security_spring-security.md.CBs5kSCC.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"Spring Security 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/spring-security.md","filePath":"backend/security/spring-security.md"}'),h={name:"backend/security/spring-security.md"};function e(l,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",21)]))}const o=i(h,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/backend_security_spring-security.md.Ff87JO61.js b/assets/backend_security_spring-security.md.Ff87JO61.js new file mode 100644 index 0000000..76ed4ea --- /dev/null +++ b/assets/backend_security_spring-security.md.Ff87JO61.js @@ -0,0 +1,34 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"Spring Security 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/spring-security.md","filePath":"backend/security/spring-security.md"}'),h={name:"backend/security/spring-security.md"};function e(l,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

Spring Security 설정

AxpFramework는 Spring Security를 사용하여 인증/인가를 처리합니다.

SecurityFilterChain

기본 설정

java
@Bean
+public SecurityFilterChain securityFilterChain(HttpSecurity http) {
+    http
+        .csrf(csrf -> csrf.disable())
+        .authorizeHttpRequests(auth -> auth
+            .requestMatchers(excludedUris).permitAll()
+            .anyRequest().authenticated()
+        )
+        .addFilterBefore(
+            new AxpJwtAuthenticationFilter(...),
+            UsernamePasswordAuthenticationFilter.class
+        );
+    return http.build();
+}

제외 URI 설정

yaml
security:
+  excluded-uris: >
+    /api/login/loginCheck
+    ,/api/login/adminLoginCheck
+    ,/api/auth/**
+    ,/report

보안 헤더

Content-Security-Policy

java
.contentSecurityPolicy(csp -> csp.policyDirectives(
+    "default-src 'self'; " +
+    "script-src 'self'; " +
+    "style-src 'self' 'unsafe-inline'; " +
+    "img-src 'self' data: https:; " +
+    "frame-ancestors 'none'; " +
+    "upgrade-insecure-requests"
+))

X-Frame-Options

java
.frameOptions(HeadersConfigurer.FrameOptionsConfig::deny)

기타 보안 헤더

예외 처리

AccessDeniedHandler

java
.accessDeniedHandler((req, res, e) -> {
+    res.setStatus(403);
+    res.setContentType("application/json");
+    res.getWriter().write("{\\"error\\": \\"접근이 거부되었습니다.\\"}");
+})

AuthenticationEntryPoint

java
.authenticationEntryPoint((req, res, e) -> {
+    res.setStatus(401);
+    res.setContentType("application/json");
+    res.getWriter().write("{\\"error\\": \\"인증이 필요합니다.\\"}");
+})

다음 단계

`,21)]))}const o=i(h,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/backend_security_spring-security.md.Ff87JO61.lean.js b/assets/backend_security_spring-security.md.Ff87JO61.lean.js new file mode 100644 index 0000000..4244f81 --- /dev/null +++ b/assets/backend_security_spring-security.md.Ff87JO61.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"Spring Security 설정","description":"","frontmatter":{},"headers":[],"relativePath":"backend/security/spring-security.md","filePath":"backend/security/spring-security.md"}'),h={name:"backend/security/spring-security.md"};function e(l,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",21)]))}const o=i(h,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/backend_tech-stack_databases.md.BXDnpBTq.js b/assets/backend_tech-stack_databases.md.BXDnpBTq.js new file mode 100644 index 0000000..5459d74 --- /dev/null +++ b/assets/backend_tech-stack_databases.md.BXDnpBTq.js @@ -0,0 +1,65 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"데이터베이스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/databases.md","filePath":"backend/tech-stack/databases.md"}'),t={name:"backend/tech-stack/databases.md"};function h(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

데이터베이스

AxpFramework는 여러 데이터베이스를 지원합니다. 환경 설정을 통해 사용할 데이터베이스를 선택할 수 있습니다.

지원 데이터베이스

1. Tibero6 (기본값)

특징:

설정:

yaml
app:
+  datasource:
+    type: tibero
+
+spring:
+  datasource:
+    tibero:
+      jdbc-url: jdbc:tibero:thin:@localhost:9629:INTDB
+      driver-class-name: com.tmax.tibero.jdbc.TbDriver
+      username: your_username
+      password: your_password

JDBC 드라이버:

HikariCP 설정:

java
dataSource.setMinimumIdle(10);
+dataSource.setMaximumPoolSize(50);
+dataSource.setConnectionTestQuery("SELECT 1 FROM DUAL");

2. Oracle

특징:

설정:

yaml
app:
+  datasource:
+    type: oracle
+
+spring:
+  datasource:
+    oracle:
+      jdbc-url: jdbc:oracle:thin:@localhost:1521:XE
+      driver-class-name: oracle.jdbc.OracleDriver
+      username: your_username
+      password: your_password

Maven 의존성:

xml
<dependency>
+    <groupId>com.oracle.database.jdbc</groupId>
+    <artifactId>ojdbc11</artifactId>
+    <version>23.7.0.25.01</version>
+</dependency>

3. PostgreSQL

특징:

설정:

yaml
app:
+  datasource:
+    type: postgres
+
+spring:
+  datasource:
+    postgres:
+      jdbc-url: jdbc:postgresql://localhost:5432/your_database
+      username: your_username
+      password: your_password
+      driver-class-name: org.postgresql.Driver

Maven 의존성:

xml
<dependency>
+    <groupId>org.postgresql</groupId>
+    <artifactId>postgresql</artifactId>
+    <version>42.7.5</version>
+</dependency>

데이터소스 설정

AxpDataSourceConfig

데이터베이스 타입에 따라 자동으로 적절한 DataSource를 생성합니다.

java
@Configuration
+@ConditionalOnProperty(prefix = "app.datasource", name = "type", havingValue = "tibero")
+static class TiberoDataSourceConfiguration {
+    // Tibero DataSource 설정
+}

주요 Bean:

HikariCP 커넥션 풀

모든 데이터베이스에서 HikariCP를 커넥션 풀로 사용합니다.

Tibero 설정

java
dataSource.setMinimumIdle(10);
+dataSource.setMaximumPoolSize(50);
+dataSource.setConnectionTimeout(120000);
+dataSource.setValidationTimeout(10000);

PostgreSQL 설정

java
dataSource.setMinimumIdle(10);
+dataSource.setMaximumPoolSize(20);
+dataSource.setConnectionTestQuery("SELECT 1");

MyBatis 설정

DB별 설정 파일

각 데이터베이스마다 별도의 MyBatis 설정 파일을 사용합니다:

매퍼 파일 위치

모든 매퍼 XML 파일은 classpath:/mapper/**/*.xml 경로에서 자동으로 스캔됩니다.

프로시저 호출

공통 프로시저 호출 서비스

AxpCommDbService를 통해 데이터베이스 타입에 관계없이 프로시저를 호출할 수 있습니다.

java
Map<String, Object> requestBody = new HashMap<>();
+requestBody.put("procedure", "YOUR_PROCEDURE");
+requestBody.put("params", paramsMap);
+
+Map<String, Object> result = axpCommDbService.executeProcedure(requestBody);

DB별 프로시저 호출

Redis (Valkey 호환)

용도

설정

yaml
redis:
+  datasource:
+    cache:
+      host: localhost
+      port: 6379
+      password: ""
+      database: 0
+    bizcomp:
+      host: localhost
+      port: 6379
+      password: ""
+      database: 0

RedisTemplate

두 개의 RedisTemplate을 사용합니다:

다음 단계

`,60)]))}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/backend_tech-stack_databases.md.BXDnpBTq.lean.js b/assets/backend_tech-stack_databases.md.BXDnpBTq.lean.js new file mode 100644 index 0000000..8a5c3fc --- /dev/null +++ b/assets/backend_tech-stack_databases.md.BXDnpBTq.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"데이터베이스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/databases.md","filePath":"backend/tech-stack/databases.md"}'),t={name:"backend/tech-stack/databases.md"};function h(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l("",60)]))}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/backend_tech-stack_databases.md.CDGUR4X3.js b/assets/backend_tech-stack_databases.md.CDGUR4X3.js deleted file mode 100644 index 6ddbef3..0000000 --- a/assets/backend_tech-stack_databases.md.CDGUR4X3.js +++ /dev/null @@ -1,65 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"데이터베이스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/databases.md","filePath":"backend/tech-stack/databases.md"}'),t={name:"backend/tech-stack/databases.md"};function h(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

데이터베이스

AxpFramework는 여러 데이터베이스를 지원합니다. 환경 설정을 통해 사용할 데이터베이스를 선택할 수 있습니다.

지원 데이터베이스

1. Tibero6 (기본값)

특징:

설정:

yaml
app:
-  datasource:
-    type: tibero
-
-spring:
-  datasource:
-    tibero:
-      jdbc-url: jdbc:tibero:thin:@localhost:9629:INTDB
-      driver-class-name: com.tmax.tibero.jdbc.TbDriver
-      username: your_username
-      password: your_password

JDBC 드라이버:

HikariCP 설정:

java
dataSource.setMinimumIdle(10);
-dataSource.setMaximumPoolSize(50);
-dataSource.setConnectionTestQuery("SELECT 1 FROM DUAL");

2. Oracle

특징:

설정:

yaml
app:
-  datasource:
-    type: oracle
-
-spring:
-  datasource:
-    oracle:
-      jdbc-url: jdbc:oracle:thin:@localhost:1521:XE
-      driver-class-name: oracle.jdbc.OracleDriver
-      username: your_username
-      password: your_password

Maven 의존성:

xml
<dependency>
-    <groupId>com.oracle.database.jdbc</groupId>
-    <artifactId>ojdbc11</artifactId>
-    <version>23.7.0.25.01</version>
-</dependency>

3. PostgreSQL

특징:

설정:

yaml
app:
-  datasource:
-    type: postgres
-
-spring:
-  datasource:
-    postgres:
-      jdbc-url: jdbc:postgresql://localhost:5432/your_database
-      username: your_username
-      password: your_password
-      driver-class-name: org.postgresql.Driver

Maven 의존성:

xml
<dependency>
-    <groupId>org.postgresql</groupId>
-    <artifactId>postgresql</artifactId>
-    <version>42.7.5</version>
-</dependency>

데이터소스 설정

AxpDataSourceConfig

데이터베이스 타입에 따라 자동으로 적절한 DataSource를 생성합니다.

java
@Configuration
-@ConditionalOnProperty(prefix = "app.datasource", name = "type", havingValue = "tibero")
-static class TiberoDataSourceConfiguration {
-    // Tibero DataSource 설정
-}

주요 Bean:

HikariCP 커넥션 풀

모든 데이터베이스에서 HikariCP를 커넥션 풀로 사용합니다.

Tibero 설정

java
dataSource.setMinimumIdle(10);
-dataSource.setMaximumPoolSize(50);
-dataSource.setConnectionTimeout(120000);
-dataSource.setValidationTimeout(10000);

PostgreSQL 설정

java
dataSource.setMinimumIdle(10);
-dataSource.setMaximumPoolSize(20);
-dataSource.setConnectionTestQuery("SELECT 1");

MyBatis 설정

DB별 설정 파일

각 데이터베이스마다 별도의 MyBatis 설정 파일을 사용합니다:

매퍼 파일 위치

모든 매퍼 XML 파일은 classpath:/mapper/**/*.xml 경로에서 자동으로 스캔됩니다.

프로시저 호출

공통 프로시저 호출 서비스

AxpCommDbService를 통해 데이터베이스 타입에 관계없이 프로시저를 호출할 수 있습니다.

java
Map<String, Object> requestBody = new HashMap<>();
-requestBody.put("procedure", "YOUR_PROCEDURE");
-requestBody.put("params", paramsMap);
-
-Map<String, Object> result = axpCommDbService.executeProcedure(requestBody);

DB별 프로시저 호출

Redis (Valkey 호환)

용도

설정

yaml
redis:
-  datasource:
-    cache:
-      host: localhost
-      port: 6379
-      password: ""
-      database: 0
-    bizcomp:
-      host: localhost
-      port: 6379
-      password: ""
-      database: 0

RedisTemplate

두 개의 RedisTemplate을 사용합니다:

다음 단계

`,60)]))}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/backend_tech-stack_databases.md.CDGUR4X3.lean.js b/assets/backend_tech-stack_databases.md.CDGUR4X3.lean.js deleted file mode 100644 index 347b0be..0000000 --- a/assets/backend_tech-stack_databases.md.CDGUR4X3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"데이터베이스","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/databases.md","filePath":"backend/tech-stack/databases.md"}'),t={name:"backend/tech-stack/databases.md"};function h(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l("",60)]))}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/backend_tech-stack_documentation.md.Bi7mFHtE.js b/assets/backend_tech-stack_documentation.md.Bi7mFHtE.js deleted file mode 100644 index e7095ab..0000000 --- a/assets/backend_tech-stack_documentation.md.Bi7mFHtE.js +++ /dev/null @@ -1,51 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"문서화 및 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/documentation.md","filePath":"backend/tech-stack/documentation.md"}'),t={name:"backend/tech-stack/documentation.md"};function l(p,s,k,e,r,d){return n(),a("div",null,s[0]||(s[0]=[h(`

문서화 및 API

AxpFramework는 Springdoc OpenAPI를 사용하여 API 문서를 자동으로 생성합니다.

Springdoc OpenAPI

버전

기능

접근 URL

개발 환경에서 다음 URL로 접근할 수 있습니다:

http://localhost:8080/swagger-ui.html

또는

http://localhost:8080/swagger-ui/index.html

API 문서 자동 생성

컨트롤러 어노테이션

컨트롤러에 어노테이션을 추가하면 자동으로 API 문서가 생성됩니다.

java
@RestController
-@RequestMapping("/api/user")
-@Tag(name = "사용자 관리", description = "사용자 관련 API")
-public class EssComController extends AxpBaseWebController {
-
-    @PostMapping("/bmk/getBmkList")
-    @Operation(summary = "즐겨찾기 목록 조회", description = "사용자의 즐겨찾기 목록을 조회합니다.")
-    @ApiResponses(value = {
-        @ApiResponse(responseCode = "200", description = "성공"),
-        @ApiResponse(responseCode = "401", description = "인증 실패")
-    })
-    public ResponseEntity<String> getBmkList(
-        @RequestBody 
-        @Parameter(description = "조회 파라미터", required = true)
-        Map<String, Object> requestBody
-    ) {
-        // ...
-    }
-}

주요 어노테이션

@Tag

java
@Tag(name = "사용자 관리", description = "사용자 관련 API")

@Operation

java
@Operation(
-    summary = "즐겨찾기 목록 조회",
-    description = "사용자의 즐겨찾기 목록을 조회합니다."
-)

@Parameter

java
@Parameter(
-    description = "조회 파라미터",
-    required = true
-)

@ApiResponse

java
@ApiResponses(value = {
-    @ApiResponse(responseCode = "200", description = "성공"),
-    @ApiResponse(responseCode = "400", description = "잘못된 요청"),
-    @ApiResponse(responseCode = "401", description = "인증 실패"),
-    @ApiResponse(responseCode = "500", description = "서버 오류")
-})

OpenAPI 스펙

JSON 형식

OpenAPI 스펙은 다음 URL에서 JSON 형식으로 확인할 수 있습니다:

http://localhost:8080/v3/api-docs

YAML 형식

YAML 형식으로도 확인할 수 있습니다:

http://localhost:8080/v3/api-docs.yaml

문서 커스터마이징

기본 정보 설정

application.yaml에서 기본 정보를 설정할 수 있습니다:

yaml
springdoc:
-  api-docs:
-    path: /v3/api-docs
-  swagger-ui:
-    path: /swagger-ui.html
-    enabled: true
-  default-consumes-media-type: application/json
-  default-produces-media-type: application/json

그룹 설정

여러 API 그룹을 정의할 수 있습니다:

java
@Bean
-public GroupedOpenApi publicApi() {
-    return GroupedOpenApi.builder()
-        .group("public")
-        .pathsToMatch("/api/public/**")
-        .build();
-}
-
-@Bean
-public GroupedOpenApi adminApi() {
-    return GroupedOpenApi.builder()
-        .group("admin")
-        .pathsToMatch("/api/admin/**")
-        .build();
-}

API 테스트

Swagger UI에서 테스트

  1. Swagger UI 접속
  2. 원하는 API 선택
  3. "Try it out" 클릭
  4. 파라미터 입력
  5. "Execute" 클릭
  6. 응답 확인

인증 설정

JWT 토큰이 필요한 API의 경우:

  1. Swagger UI 상단의 "Authorize" 버튼 클릭
  2. 토큰 입력
  3. "Authorize" 클릭
  4. API 호출

다음 단계

`,51)]))}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/backend_tech-stack_documentation.md.Bi7mFHtE.lean.js b/assets/backend_tech-stack_documentation.md.Bi7mFHtE.lean.js deleted file mode 100644 index ceff4eb..0000000 --- a/assets/backend_tech-stack_documentation.md.Bi7mFHtE.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"문서화 및 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/documentation.md","filePath":"backend/tech-stack/documentation.md"}'),t={name:"backend/tech-stack/documentation.md"};function l(p,s,k,e,r,d){return n(),a("div",null,s[0]||(s[0]=[h("",51)]))}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/backend_tech-stack_documentation.md.y8iWaTWY.js b/assets/backend_tech-stack_documentation.md.y8iWaTWY.js new file mode 100644 index 0000000..4df1fa2 --- /dev/null +++ b/assets/backend_tech-stack_documentation.md.y8iWaTWY.js @@ -0,0 +1,51 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"문서화 및 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/documentation.md","filePath":"backend/tech-stack/documentation.md"}'),t={name:"backend/tech-stack/documentation.md"};function l(p,s,k,e,r,d){return n(),a("div",null,s[0]||(s[0]=[h(`

문서화 및 API

AxpFramework는 Springdoc OpenAPI를 사용하여 API 문서를 자동으로 생성합니다.

Springdoc OpenAPI

버전

기능

접근 URL

개발 환경에서 다음 URL로 접근할 수 있습니다:

http://localhost:8080/swagger-ui.html

또는

http://localhost:8080/swagger-ui/index.html

API 문서 자동 생성

컨트롤러 어노테이션

컨트롤러에 어노테이션을 추가하면 자동으로 API 문서가 생성됩니다.

java
@RestController
+@RequestMapping("/api/user")
+@Tag(name = "사용자 관리", description = "사용자 관련 API")
+public class EssComController extends AxpBaseWebController {
+
+    @PostMapping("/bmk/getBmkList")
+    @Operation(summary = "즐겨찾기 목록 조회", description = "사용자의 즐겨찾기 목록을 조회합니다.")
+    @ApiResponses(value = {
+        @ApiResponse(responseCode = "200", description = "성공"),
+        @ApiResponse(responseCode = "401", description = "인증 실패")
+    })
+    public ResponseEntity<String> getBmkList(
+        @RequestBody 
+        @Parameter(description = "조회 파라미터", required = true)
+        Map<String, Object> requestBody
+    ) {
+        // ...
+    }
+}

주요 어노테이션

@Tag

java
@Tag(name = "사용자 관리", description = "사용자 관련 API")

@Operation

java
@Operation(
+    summary = "즐겨찾기 목록 조회",
+    description = "사용자의 즐겨찾기 목록을 조회합니다."
+)

@Parameter

java
@Parameter(
+    description = "조회 파라미터",
+    required = true
+)

@ApiResponse

java
@ApiResponses(value = {
+    @ApiResponse(responseCode = "200", description = "성공"),
+    @ApiResponse(responseCode = "400", description = "잘못된 요청"),
+    @ApiResponse(responseCode = "401", description = "인증 실패"),
+    @ApiResponse(responseCode = "500", description = "서버 오류")
+})

OpenAPI 스펙

JSON 형식

OpenAPI 스펙은 다음 URL에서 JSON 형식으로 확인할 수 있습니다:

http://localhost:8080/v3/api-docs

YAML 형식

YAML 형식으로도 확인할 수 있습니다:

http://localhost:8080/v3/api-docs.yaml

문서 커스터마이징

기본 정보 설정

application.yaml에서 기본 정보를 설정할 수 있습니다:

yaml
springdoc:
+  api-docs:
+    path: /v3/api-docs
+  swagger-ui:
+    path: /swagger-ui.html
+    enabled: true
+  default-consumes-media-type: application/json
+  default-produces-media-type: application/json

그룹 설정

여러 API 그룹을 정의할 수 있습니다:

java
@Bean
+public GroupedOpenApi publicApi() {
+    return GroupedOpenApi.builder()
+        .group("public")
+        .pathsToMatch("/api/public/**")
+        .build();
+}
+
+@Bean
+public GroupedOpenApi adminApi() {
+    return GroupedOpenApi.builder()
+        .group("admin")
+        .pathsToMatch("/api/admin/**")
+        .build();
+}

API 테스트

Swagger UI에서 테스트

  1. Swagger UI 접속
  2. 원하는 API 선택
  3. "Try it out" 클릭
  4. 파라미터 입력
  5. "Execute" 클릭
  6. 응답 확인

인증 설정

JWT 토큰이 필요한 API의 경우:

  1. Swagger UI 상단의 "Authorize" 버튼 클릭
  2. 토큰 입력
  3. "Authorize" 클릭
  4. API 호출

다음 단계

`,51)]))}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/backend_tech-stack_documentation.md.y8iWaTWY.lean.js b/assets/backend_tech-stack_documentation.md.y8iWaTWY.lean.js new file mode 100644 index 0000000..54730d1 --- /dev/null +++ b/assets/backend_tech-stack_documentation.md.y8iWaTWY.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"문서화 및 API","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/documentation.md","filePath":"backend/tech-stack/documentation.md"}'),t={name:"backend/tech-stack/documentation.md"};function l(p,s,k,e,r,d){return n(),a("div",null,s[0]||(s[0]=[h("",51)]))}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/backend_tech-stack_file-processing.md.BLmB1Ntp.js b/assets/backend_tech-stack_file-processing.md.BLmB1Ntp.js new file mode 100644 index 0000000..5c42b17 --- /dev/null +++ b/assets/backend_tech-stack_file-processing.md.BLmB1Ntp.js @@ -0,0 +1,81 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/file-processing.md","filePath":"backend/tech-stack/file-processing.md"}'),t={name:"backend/tech-stack/file-processing.md"};function h(e,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 처리

AxpFramework는 다양한 파일 처리 기능을 제공합니다.

Apache POI

버전

기능

사용 예시

java
// Excel 파일 생성
+Workbook workbook = new XSSFWorkbook();
+Sheet sheet = workbook.createSheet("Sheet1");
+Row row = sheet.createRow(0);
+Cell cell = row.createCell(0);
+cell.setCellValue("Hello World");
+
+// 파일 저장
+FileOutputStream out = new FileOutputStream("example.xlsx");
+workbook.write(out);
+out.close();

JXLS

버전

기능

사용 예시

java
@Autowired
+private CommJxlsView jxlsView;
+
+// 템플릿 파일 경로
+String templatePath = "templates/report.xlsx";
+
+// 데이터 준비
+Map<String, Object> data = new HashMap<>();
+data.put("items", itemList);
+
+// Excel 생성
+jxlsView.generateExcel(templatePath, data, response);

JasperReports

버전

기능

리포트 템플릿

리포트 템플릿은 .jrxml 형식으로 작성합니다.

템플릿 위치:

src/main/resources/report/jasperForms/

리포트 생성

java
@Autowired
+private AxpReportService reportService;
+
+// 리포트 파라미터
+Map<String, Object> parameters = new HashMap<>();
+parameters.put("title", "제목");
+parameters.put("data", dataList);
+
+// PDF 생성
+byte[] pdfBytes = reportService.generatePdf("report_template", parameters);

한글 폰트 설정

한글 폰트는 다음 위치에 저장합니다:

src/main/resources/report/jasperfonts/

지원 폰트:

파일 업로드

MultipartFile

Spring의 MultipartFile을 사용하여 파일을 업로드합니다.

java
@PostMapping("/upload")
+public ResponseEntity<String> uploadFile(
+    @RequestParam("file") MultipartFile file
+) {
+    if (file.isEmpty()) {
+        return getJSONErrorResponse("파일이 비어있습니다.", null);
+    }
+    
+    // 파일 저장
+    String fileName = file.getOriginalFilename();
+    File dest = new File(uploadPath + fileName);
+    file.transferTo(dest);
+    
+    return getJSONSuccessResponse("업로드 성공");
+}

파일 크기 제한

application.yaml에서 파일 크기 제한을 설정합니다:

yaml
spring:
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB

파일 다운로드

ResponseEntity 사용

java
@PostMapping("/download")
+public ResponseEntity<byte[]> downloadFile(
+    @RequestBody Map<String, Object> param
+) {
+    String filePath = param.get("filePath").toString();
+    File file = new File(filePath);
+    
+    byte[] fileBytes = Files.readAllBytes(file.toPath());
+    
+    HttpHeaders headers = new HttpHeaders();
+    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+    headers.setContentDisposition(
+        ContentDisposition.attachment()
+            .filename(file.getName(), StandardCharsets.UTF_8)
+            .build()
+    );
+    
+    return new ResponseEntity<>(fileBytes, headers, HttpStatus.OK);
+}

파일 유틸리티

AxpCommFileUtil

파일 관련 공통 유틸리티를 제공합니다.

java
@Autowired
+private AxpCommFileUtil fileUtil;
+
+// 파일 삭제
+fileUtil.deleteOne(filePath);
+
+// 디렉토리 생성
+fileUtil.createDirectory(dirPath);
+
+// 파일 존재 확인
+boolean exists = fileUtil.fileExists(filePath);

MIME 타입 감지

jmimemagic

파일의 MIME 타입을 자동으로 감지합니다.

java
import net.sf.jmimemagic.Magic;
+import net.sf.jmimemagic.MagicMatch;
+
+MagicMatch match = Magic.getMagicMatch(file);
+String mimeType = match.getMimeType();

다음 단계

`,52)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_tech-stack_file-processing.md.BLmB1Ntp.lean.js b/assets/backend_tech-stack_file-processing.md.BLmB1Ntp.lean.js new file mode 100644 index 0000000..d52a352 --- /dev/null +++ b/assets/backend_tech-stack_file-processing.md.BLmB1Ntp.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/file-processing.md","filePath":"backend/tech-stack/file-processing.md"}'),t={name:"backend/tech-stack/file-processing.md"};function h(e,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",52)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_tech-stack_file-processing.md.Dk_DpfYN.js b/assets/backend_tech-stack_file-processing.md.Dk_DpfYN.js deleted file mode 100644 index ecf4638..0000000 --- a/assets/backend_tech-stack_file-processing.md.Dk_DpfYN.js +++ /dev/null @@ -1,81 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/file-processing.md","filePath":"backend/tech-stack/file-processing.md"}'),t={name:"backend/tech-stack/file-processing.md"};function h(e,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 처리

AxpFramework는 다양한 파일 처리 기능을 제공합니다.

Apache POI

버전

기능

사용 예시

java
// Excel 파일 생성
-Workbook workbook = new XSSFWorkbook();
-Sheet sheet = workbook.createSheet("Sheet1");
-Row row = sheet.createRow(0);
-Cell cell = row.createCell(0);
-cell.setCellValue("Hello World");
-
-// 파일 저장
-FileOutputStream out = new FileOutputStream("example.xlsx");
-workbook.write(out);
-out.close();

JXLS

버전

기능

사용 예시

java
@Autowired
-private CommJxlsView jxlsView;
-
-// 템플릿 파일 경로
-String templatePath = "templates/report.xlsx";
-
-// 데이터 준비
-Map<String, Object> data = new HashMap<>();
-data.put("items", itemList);
-
-// Excel 생성
-jxlsView.generateExcel(templatePath, data, response);

JasperReports

버전

기능

리포트 템플릿

리포트 템플릿은 .jrxml 형식으로 작성합니다.

템플릿 위치:

src/main/resources/report/jasperForms/

리포트 생성

java
@Autowired
-private AxpReportService reportService;
-
-// 리포트 파라미터
-Map<String, Object> parameters = new HashMap<>();
-parameters.put("title", "제목");
-parameters.put("data", dataList);
-
-// PDF 생성
-byte[] pdfBytes = reportService.generatePdf("report_template", parameters);

한글 폰트 설정

한글 폰트는 다음 위치에 저장합니다:

src/main/resources/report/jasperfonts/

지원 폰트:

파일 업로드

MultipartFile

Spring의 MultipartFile을 사용하여 파일을 업로드합니다.

java
@PostMapping("/upload")
-public ResponseEntity<String> uploadFile(
-    @RequestParam("file") MultipartFile file
-) {
-    if (file.isEmpty()) {
-        return getJSONErrorResponse("파일이 비어있습니다.", null);
-    }
-    
-    // 파일 저장
-    String fileName = file.getOriginalFilename();
-    File dest = new File(uploadPath + fileName);
-    file.transferTo(dest);
-    
-    return getJSONSuccessResponse("업로드 성공");
-}

파일 크기 제한

application.yaml에서 파일 크기 제한을 설정합니다:

yaml
spring:
-  servlet:
-    multipart:
-      max-file-size: 100MB
-      max-request-size: 100MB

파일 다운로드

ResponseEntity 사용

java
@PostMapping("/download")
-public ResponseEntity<byte[]> downloadFile(
-    @RequestBody Map<String, Object> param
-) {
-    String filePath = param.get("filePath").toString();
-    File file = new File(filePath);
-    
-    byte[] fileBytes = Files.readAllBytes(file.toPath());
-    
-    HttpHeaders headers = new HttpHeaders();
-    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
-    headers.setContentDisposition(
-        ContentDisposition.attachment()
-            .filename(file.getName(), StandardCharsets.UTF_8)
-            .build()
-    );
-    
-    return new ResponseEntity<>(fileBytes, headers, HttpStatus.OK);
-}

파일 유틸리티

AxpCommFileUtil

파일 관련 공통 유틸리티를 제공합니다.

java
@Autowired
-private AxpCommFileUtil fileUtil;
-
-// 파일 삭제
-fileUtil.deleteOne(filePath);
-
-// 디렉토리 생성
-fileUtil.createDirectory(dirPath);
-
-// 파일 존재 확인
-boolean exists = fileUtil.fileExists(filePath);

MIME 타입 감지

jmimemagic

파일의 MIME 타입을 자동으로 감지합니다.

java
import net.sf.jmimemagic.Magic;
-import net.sf.jmimemagic.MagicMatch;
-
-MagicMatch match = Magic.getMagicMatch(file);
-String mimeType = match.getMimeType();

다음 단계

`,52)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_tech-stack_file-processing.md.Dk_DpfYN.lean.js b/assets/backend_tech-stack_file-processing.md.Dk_DpfYN.lean.js deleted file mode 100644 index 763a55a..0000000 --- a/assets/backend_tech-stack_file-processing.md.Dk_DpfYN.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/file-processing.md","filePath":"backend/tech-stack/file-processing.md"}'),t={name:"backend/tech-stack/file-processing.md"};function h(e,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",52)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/backend_tech-stack_frameworks.md.BciIYQ8-.js b/assets/backend_tech-stack_frameworks.md.BciIYQ8-.js deleted file mode 100644 index 2505cff..0000000 --- a/assets/backend_tech-stack_frameworks.md.BciIYQ8-.js +++ /dev/null @@ -1,42 +0,0 @@ -import{_ as i,c as a,o as l,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"프레임워크 및 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/frameworks.md","filePath":"backend/tech-stack/frameworks.md"}'),n={name:"backend/tech-stack/frameworks.md"};function e(h,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[t(`

프레임워크 및 라이브러리

AxpFramework에서 사용하는 주요 프레임워크와 라이브러리를 설명합니다.

Spring Boot

버전

주요 모듈

Spring Boot Starter Web

xml
<dependency>
-    <groupId>org.springframework.boot</groupId>
-    <artifactId>spring-boot-starter-web</artifactId>
-</dependency>

Spring Boot Starter AOP

xml
<dependency>
-    <groupId>org.springframework.boot</groupId>
-    <artifactId>spring-boot-starter-aop</artifactId>
-</dependency>

Spring Session

xml
<dependency>
-    <groupId>org.springframework.session</groupId>
-    <artifactId>spring-session-core</artifactId>
-</dependency>

MyBatis

버전

특징

설정

java
@MapperScan(
-    basePackages = {
-        "axpFramework.common.database.mapper",
-        "ess.com.mapper"
-    },
-    sqlSessionFactoryRef = "sqlSessionFactory",
-    sqlSessionTemplateRef = "sqlSessionTemplate"
-)

Lombok

버전

주요 기능

사용 예시

java
@Data
-@Builder
-public class User {
-    private String userId;
-    private String userName;
-}

Spring Security

버전

주요 기능

설정 위치

Springdoc OpenAPI

버전

기능

Jackson

기능

설정

java
@Bean
-public ObjectMapper objectMapper() {
-    ObjectMapper mapper = new ObjectMapper();
-    mapper.registerModule(new JavaTimeModule());
-    return mapper;
-}

Apache Commons

주요 라이브러리

Commons IO

xml
<dependency>
-    <groupId>commons-io</groupId>
-    <artifactId>commons-io</artifactId>
-    <version>2.16.1</version>
-</dependency>

Commons Codec

xml
<dependency>
-    <groupId>commons-codec</groupId>
-    <artifactId>commons-codec</artifactId>
-</dependency>

Commons Lang3

xml
<dependency>
-    <groupId>org.apache.commons</groupId>
-    <artifactId>commons-lang3</artifactId>
-    <version>3.12.0</version>
-</dependency>

JWT (JSON Web Token)

버전

모듈

사용 예시

java
String token = Jwts.builder()
-    .setSubject(userId)
-    .setExpiration(expiryDate)
-    .signWith(key)
-    .compact();

OWASP AntiSamy

버전

기능

다음 단계

`,71)]))}const g=i(n,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/backend_tech-stack_frameworks.md.BciIYQ8-.lean.js b/assets/backend_tech-stack_frameworks.md.BciIYQ8-.lean.js deleted file mode 100644 index 524abad..0000000 --- a/assets/backend_tech-stack_frameworks.md.BciIYQ8-.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as l,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"프레임워크 및 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/frameworks.md","filePath":"backend/tech-stack/frameworks.md"}'),n={name:"backend/tech-stack/frameworks.md"};function e(h,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[t("",71)]))}const g=i(n,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/backend_tech-stack_frameworks.md.Dn5pundH.js b/assets/backend_tech-stack_frameworks.md.Dn5pundH.js new file mode 100644 index 0000000..0538c1c --- /dev/null +++ b/assets/backend_tech-stack_frameworks.md.Dn5pundH.js @@ -0,0 +1,42 @@ +import{_ as i,c as a,o as l,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"프레임워크 및 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/frameworks.md","filePath":"backend/tech-stack/frameworks.md"}'),n={name:"backend/tech-stack/frameworks.md"};function e(h,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[t(`

프레임워크 및 라이브러리

AxpFramework에서 사용하는 주요 프레임워크와 라이브러리를 설명합니다.

Spring Boot

버전

주요 모듈

Spring Boot Starter Web

xml
<dependency>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-web</artifactId>
+</dependency>

Spring Boot Starter AOP

xml
<dependency>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-aop</artifactId>
+</dependency>

Spring Session

xml
<dependency>
+    <groupId>org.springframework.session</groupId>
+    <artifactId>spring-session-core</artifactId>
+</dependency>

MyBatis

버전

특징

설정

java
@MapperScan(
+    basePackages = {
+        "axpFramework.common.database.mapper",
+        "ess.com.mapper"
+    },
+    sqlSessionFactoryRef = "sqlSessionFactory",
+    sqlSessionTemplateRef = "sqlSessionTemplate"
+)

Lombok

버전

주요 기능

사용 예시

java
@Data
+@Builder
+public class User {
+    private String userId;
+    private String userName;
+}

Spring Security

버전

주요 기능

설정 위치

Springdoc OpenAPI

버전

기능

Jackson

기능

설정

java
@Bean
+public ObjectMapper objectMapper() {
+    ObjectMapper mapper = new ObjectMapper();
+    mapper.registerModule(new JavaTimeModule());
+    return mapper;
+}

Apache Commons

주요 라이브러리

Commons IO

xml
<dependency>
+    <groupId>commons-io</groupId>
+    <artifactId>commons-io</artifactId>
+    <version>2.16.1</version>
+</dependency>

Commons Codec

xml
<dependency>
+    <groupId>commons-codec</groupId>
+    <artifactId>commons-codec</artifactId>
+</dependency>

Commons Lang3

xml
<dependency>
+    <groupId>org.apache.commons</groupId>
+    <artifactId>commons-lang3</artifactId>
+    <version>3.12.0</version>
+</dependency>

JWT (JSON Web Token)

버전

모듈

사용 예시

java
String token = Jwts.builder()
+    .setSubject(userId)
+    .setExpiration(expiryDate)
+    .signWith(key)
+    .compact();

OWASP AntiSamy

버전

기능

다음 단계

`,71)]))}const g=i(n,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/backend_tech-stack_frameworks.md.Dn5pundH.lean.js b/assets/backend_tech-stack_frameworks.md.Dn5pundH.lean.js new file mode 100644 index 0000000..871ac9b --- /dev/null +++ b/assets/backend_tech-stack_frameworks.md.Dn5pundH.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as l,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"프레임워크 및 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/frameworks.md","filePath":"backend/tech-stack/frameworks.md"}'),n={name:"backend/tech-stack/frameworks.md"};function e(h,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[t("",71)]))}const g=i(n,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/backend_tech-stack_security.md.CL9fNcgV.js b/assets/backend_tech-stack_security.md.CL9fNcgV.js deleted file mode 100644 index d1b0726..0000000 --- a/assets/backend_tech-stack_security.md.CL9fNcgV.js +++ /dev/null @@ -1,60 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"보안 및 인증","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/security.md","filePath":"backend/tech-stack/security.md"}'),e={name:"backend/tech-stack/security.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

보안 및 인증

AxpFramework는 다양한 보안 기능을 제공하여 안전한 애플리케이션 개발을 지원합니다.

JWT (JSON Web Token)

버전

토큰 타입

Access Token

Refresh Token

토큰 생성

java
@Autowired
-private AxpCommAuthService axpCommAuthService;
-
-// Access Token 생성
-String accessToken = axpCommAuthService.createAccessToken(userId);
-
-// Refresh Token 생성
-String refreshToken = axpCommAuthService.createRefreshToken(userId);

토큰 검증

java
// 토큰 파싱
-Claims claims = axpCommAuthService.parseToken(token);
-String userId = claims.getSubject();
-
-// 토큰 타입 확인
-boolean isRefresh = axpCommAuthService.isRefreshToken(token);

설정

yaml
jwt:
-  secret: U29tZVN1cGVyU2VjcmV0S2V5Rm9ySlBXVC1NeVNlY3JldEtleQ==

주의: 운영 환경에서는 반드시 새로운 시크릿 키를 생성하세요.

Spring Security

SecurityFilterChain

모든 요청은 Spring Security를 통해 인증/인가를 거칩니다.

java
@Bean
-public SecurityFilterChain securityFilterChain(HttpSecurity http) {
-    http
-        .csrf(csrf -> csrf.disable())
-        .authorizeHttpRequests(auth -> auth
-            .requestMatchers(excludedUris).permitAll()
-            .anyRequest().authenticated()
-        )
-        .addFilterBefore(
-            new AxpJwtAuthenticationFilter(...),
-            UsernamePasswordAuthenticationFilter.class
-        );
-    return http.build();
-}

제외 URI 설정

인증이 필요 없는 URI를 설정할 수 있습니다.

yaml
security:
-  excluded-uris: >
-    /api/login/loginCheck
-    ,/api/login/adminLoginCheck
-    ,/api/auth/**
-    ,/report

JWT 제외 URI 설정

JWT 검증을 건너뛸 URI를 설정할 수 있습니다.

yaml
security:
-  excluded-jwt-uris: >
-    /api/login/loginCheck
-    ,/api/login/adminLoginCheck
-    ,/api/auth/**

JWT 인증 필터

AxpJwtAuthenticationFilter

모든 요청에 대해 JWT 토큰을 검증합니다.

동작 순서:

  1. 제외 URI 확인
  2. 쿠키에서 Refresh Token 추출
  3. Authorization 헤더에서 Access Token 추출
  4. 토큰 검증
  5. SecurityContext에 인증 정보 설정

Rate Limiting

분당 최대 요청 수를 제한합니다.

java
private static final int MAX_REQUESTS_PER_MINUTE = 120;

초과 시 429 Too Many Requests 응답을 반환합니다.

암호화

AES-128

대칭키 암호화 알고리즘입니다.

java
@Autowired
-private AxpCommAES128 aes128;
-
-// 암호화
-String encrypted = aes128.encrypt(plainText);
-
-// 복호화
-String decrypted = aes128.decrypt(encrypted);

사용 예시:

RSA

공개키 암호화 알고리즘입니다.

java
@Autowired
-private AxpCommRsa rsa;
-
-// 암호화
-String encrypted = rsa.encrypt(plainText);
-
-// 복호화
-String decrypted = rsa.decrypt(encrypted);

설정:

yaml
rsa:
-  private: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCmI2Rk09DaXKzBR3GkbK+33Ye7QZEXx3QfZnMcO7yJOnv3BCO5HYv7fFwqt9Wctu+ZTiuyI3Oqi+PF65/0Y9AdambuWMj2ot+xbm9ipLzIdUcdZGC1XLazMkf6IsepO/xr109e/JEHbFPYmO3Bc6yydl226shGX0H3/nq3uej2w2Z4LcjMaL4qFP9FWZx8nNvzxkHQ2we5les9phYdOtZijcqHvPvzTuPtuA4c+9pFOkjqsEzeck1La3KVlCXb2OFUZ3+dwJHU3pyp9suVNOWk80WVxgtxGJQAAnFfBFCmeOtrOeJ6aXLi8fxAKwdAElhSOIwwW6baAHfvH0Wz3jzdAgMBAAECggEAOZjehsgaSYHEkJNUtiTJ/IvsMQKnqx9GRlaNxLV/BPJGJNqGCfjQ3WR9TYADKfwP7822f2EkCfXKhwTLpP3vmisXuT0Fmt/XfltjeUbUfgiOmYWBs46Ldm+RnYnuP2Eg/0Abb7pPC0xGezp1ftI8Bnjbv30A5sjChZfvcn+c4ONIfA85ogchOL8aSWAqtuj1WmPAHs1fiCbailExuqMZ0mGLYs1g0e0W1zKUqVpWxKchF1rOUmtMAHy0Sqlw+XKSDS4nVxiLTMMxPKM1Jt8Io/nE4j5QmcAAaWExRuvkbokKrCjXAFVj4fIlwFUdxsgqi14yhxbVNLuIj9WtHEnSHwKBgQDlCw7b3dQy8rFQ4CwTaeEii0tIM7xeSwkSYx7BgNgeNcRlhbg6Kl2OVaLmryQhj9VOIFFWXbvK6FIiG0IoBVefit+IYUo8DBYXHsrOHE1eZmdvW2k2uroEAZXTFlcNMRxO3av/nkWr2ldJOEqk9hvc2xfqVEMMjNTqDDhCIqMwwwKBgQC5sQswRitzSqFgEgfrGSuvXW/r8iM/4QLMGNiC5LlWdA9T+p/M0WCaJab43KEC8ZMWq/kH3+AtSYUIZXqKjqQleDN12a1PSQRleolE8iUMRbO4HxfnlC7drZAb1EK0Qbwq61xJE0/EuFLzxIE8SnhylKUtUAcLfKjLEc+1QQIB3wKBgHL+wk8RaODLiMsaQgbdOfOmC/4MO577/WoF6gMtNVS1mg1+vag2bRJxXICFnpZbKLU49J1wIkEVs2b8WJLPW9b2WpSWhDbxuoWRKDGjdBTZRUVbl8+qoIoyYY7BwKMW7SeLlDeat1A5J2nToWaBSivwtGkqNR+v9ZYs3HIYAecRAoGADTqkvmqxW8RcXNjMAZ7IcvToLVoR0tI3/cxjWGftIFCiauw3CEN+a1z1WVN2kRwey4Wy9zGm6fML7D42jbp9zUGUAPhiFXzxOD2Tm/rYUtiAZkSo0lHHSPm9g44KtobcXf5ok7gxfaVYG4/LWT1A+YDHh8PkzJez+supDZO1DecCgYAaKjrJVqScBpXlQ3EHPv5qGyVWwhcSKl9FNkMMIFmJfkIYckWqFqQX/+44EDtCYUFCShoSPuhnre9IVTfmoHBWa/R6CbydFxPYuDHsgDiDI+BMZq0It6rB8NH26gw0CzyxpZxVpI6x3FRWZ/KAJtaLsY8Zewf18C9MXdRYhXlSXg==

해시 함수

MD5

java
@Autowired
-private AxpCommMD5Util md5Util;
-
-String hash = md5Util.hash(input);

SHA-256

java
@Autowired
-private AxpCommSHA256Util sha256Util;
-
-String hash = sha256Util.hash(input);

XSS 방지

OWASP AntiSamy

HTML 입력을 정제하여 XSS 공격을 방지합니다.

java
@Autowired
-private AxpXssUtil xssUtil;
-
-String sanitized = xssUtil.sanitize(htmlInput);

정책 파일

antisamy-policy.xml 파일에서 허용할 HTML 태그와 속성을 정의합니다.

XSS 필터

AxpXssFilter가 모든 요청에 대해 XSS 공격을 방지합니다.

실행 순서:

  1. 요청 데이터 검사
  2. XSS 패턴 탐지
  3. 위험한 스크립트 제거
  4. 정제된 데이터를 컨트롤러에 전달

보안 헤더

Spring Security를 통해 다음 보안 헤더를 자동으로 설정합니다:

다음 단계

`,67)]))}const c=i(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/backend_tech-stack_security.md.CL9fNcgV.lean.js b/assets/backend_tech-stack_security.md.CL9fNcgV.lean.js deleted file mode 100644 index 910dc06..0000000 --- a/assets/backend_tech-stack_security.md.CL9fNcgV.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"보안 및 인증","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/security.md","filePath":"backend/tech-stack/security.md"}'),e={name:"backend/tech-stack/security.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",67)]))}const c=i(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/backend_tech-stack_security.md.CcSKL3mO.js b/assets/backend_tech-stack_security.md.CcSKL3mO.js new file mode 100644 index 0000000..124f559 --- /dev/null +++ b/assets/backend_tech-stack_security.md.CcSKL3mO.js @@ -0,0 +1,60 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"보안 및 인증","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/security.md","filePath":"backend/tech-stack/security.md"}'),e={name:"backend/tech-stack/security.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

보안 및 인증

AxpFramework는 다양한 보안 기능을 제공하여 안전한 애플리케이션 개발을 지원합니다.

JWT (JSON Web Token)

버전

토큰 타입

Access Token

Refresh Token

토큰 생성

java
@Autowired
+private AxpCommAuthService axpCommAuthService;
+
+// Access Token 생성
+String accessToken = axpCommAuthService.createAccessToken(userId);
+
+// Refresh Token 생성
+String refreshToken = axpCommAuthService.createRefreshToken(userId);

토큰 검증

java
// 토큰 파싱
+Claims claims = axpCommAuthService.parseToken(token);
+String userId = claims.getSubject();
+
+// 토큰 타입 확인
+boolean isRefresh = axpCommAuthService.isRefreshToken(token);

설정

yaml
jwt:
+  secret: U29tZVN1cGVyU2VjcmV0S2V5Rm9ySlBXVC1NeVNlY3JldEtleQ==

주의: 운영 환경에서는 반드시 새로운 시크릿 키를 생성하세요.

Spring Security

SecurityFilterChain

모든 요청은 Spring Security를 통해 인증/인가를 거칩니다.

java
@Bean
+public SecurityFilterChain securityFilterChain(HttpSecurity http) {
+    http
+        .csrf(csrf -> csrf.disable())
+        .authorizeHttpRequests(auth -> auth
+            .requestMatchers(excludedUris).permitAll()
+            .anyRequest().authenticated()
+        )
+        .addFilterBefore(
+            new AxpJwtAuthenticationFilter(...),
+            UsernamePasswordAuthenticationFilter.class
+        );
+    return http.build();
+}

제외 URI 설정

인증이 필요 없는 URI를 설정할 수 있습니다.

yaml
security:
+  excluded-uris: >
+    /api/login/loginCheck
+    ,/api/login/adminLoginCheck
+    ,/api/auth/**
+    ,/report

JWT 제외 URI 설정

JWT 검증을 건너뛸 URI를 설정할 수 있습니다.

yaml
security:
+  excluded-jwt-uris: >
+    /api/login/loginCheck
+    ,/api/login/adminLoginCheck
+    ,/api/auth/**

JWT 인증 필터

AxpJwtAuthenticationFilter

모든 요청에 대해 JWT 토큰을 검증합니다.

동작 순서:

  1. 제외 URI 확인
  2. 쿠키에서 Refresh Token 추출
  3. Authorization 헤더에서 Access Token 추출
  4. 토큰 검증
  5. SecurityContext에 인증 정보 설정

Rate Limiting

분당 최대 요청 수를 제한합니다.

java
private static final int MAX_REQUESTS_PER_MINUTE = 120;

초과 시 429 Too Many Requests 응답을 반환합니다.

암호화

AES-128

대칭키 암호화 알고리즘입니다.

java
@Autowired
+private AxpCommAES128 aes128;
+
+// 암호화
+String encrypted = aes128.encrypt(plainText);
+
+// 복호화
+String decrypted = aes128.decrypt(encrypted);

사용 예시:

RSA

공개키 암호화 알고리즘입니다.

java
@Autowired
+private AxpCommRsa rsa;
+
+// 암호화
+String encrypted = rsa.encrypt(plainText);
+
+// 복호화
+String decrypted = rsa.decrypt(encrypted);

설정:

yaml
rsa:
+  private: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCmI2Rk09DaXKzBR3GkbK+33Ye7QZEXx3QfZnMcO7yJOnv3BCO5HYv7fFwqt9Wctu+ZTiuyI3Oqi+PF65/0Y9AdambuWMj2ot+xbm9ipLzIdUcdZGC1XLazMkf6IsepO/xr109e/JEHbFPYmO3Bc6yydl226shGX0H3/nq3uej2w2Z4LcjMaL4qFP9FWZx8nNvzxkHQ2we5les9phYdOtZijcqHvPvzTuPtuA4c+9pFOkjqsEzeck1La3KVlCXb2OFUZ3+dwJHU3pyp9suVNOWk80WVxgtxGJQAAnFfBFCmeOtrOeJ6aXLi8fxAKwdAElhSOIwwW6baAHfvH0Wz3jzdAgMBAAECggEAOZjehsgaSYHEkJNUtiTJ/IvsMQKnqx9GRlaNxLV/BPJGJNqGCfjQ3WR9TYADKfwP7822f2EkCfXKhwTLpP3vmisXuT0Fmt/XfltjeUbUfgiOmYWBs46Ldm+RnYnuP2Eg/0Abb7pPC0xGezp1ftI8Bnjbv30A5sjChZfvcn+c4ONIfA85ogchOL8aSWAqtuj1WmPAHs1fiCbailExuqMZ0mGLYs1g0e0W1zKUqVpWxKchF1rOUmtMAHy0Sqlw+XKSDS4nVxiLTMMxPKM1Jt8Io/nE4j5QmcAAaWExRuvkbokKrCjXAFVj4fIlwFUdxsgqi14yhxbVNLuIj9WtHEnSHwKBgQDlCw7b3dQy8rFQ4CwTaeEii0tIM7xeSwkSYx7BgNgeNcRlhbg6Kl2OVaLmryQhj9VOIFFWXbvK6FIiG0IoBVefit+IYUo8DBYXHsrOHE1eZmdvW2k2uroEAZXTFlcNMRxO3av/nkWr2ldJOEqk9hvc2xfqVEMMjNTqDDhCIqMwwwKBgQC5sQswRitzSqFgEgfrGSuvXW/r8iM/4QLMGNiC5LlWdA9T+p/M0WCaJab43KEC8ZMWq/kH3+AtSYUIZXqKjqQleDN12a1PSQRleolE8iUMRbO4HxfnlC7drZAb1EK0Qbwq61xJE0/EuFLzxIE8SnhylKUtUAcLfKjLEc+1QQIB3wKBgHL+wk8RaODLiMsaQgbdOfOmC/4MO577/WoF6gMtNVS1mg1+vag2bRJxXICFnpZbKLU49J1wIkEVs2b8WJLPW9b2WpSWhDbxuoWRKDGjdBTZRUVbl8+qoIoyYY7BwKMW7SeLlDeat1A5J2nToWaBSivwtGkqNR+v9ZYs3HIYAecRAoGADTqkvmqxW8RcXNjMAZ7IcvToLVoR0tI3/cxjWGftIFCiauw3CEN+a1z1WVN2kRwey4Wy9zGm6fML7D42jbp9zUGUAPhiFXzxOD2Tm/rYUtiAZkSo0lHHSPm9g44KtobcXf5ok7gxfaVYG4/LWT1A+YDHh8PkzJez+supDZO1DecCgYAaKjrJVqScBpXlQ3EHPv5qGyVWwhcSKl9FNkMMIFmJfkIYckWqFqQX/+44EDtCYUFCShoSPuhnre9IVTfmoHBWa/R6CbydFxPYuDHsgDiDI+BMZq0It6rB8NH26gw0CzyxpZxVpI6x3FRWZ/KAJtaLsY8Zewf18C9MXdRYhXlSXg==

해시 함수

MD5

java
@Autowired
+private AxpCommMD5Util md5Util;
+
+String hash = md5Util.hash(input);

SHA-256

java
@Autowired
+private AxpCommSHA256Util sha256Util;
+
+String hash = sha256Util.hash(input);

XSS 방지

OWASP AntiSamy

HTML 입력을 정제하여 XSS 공격을 방지합니다.

java
@Autowired
+private AxpXssUtil xssUtil;
+
+String sanitized = xssUtil.sanitize(htmlInput);

정책 파일

antisamy-policy.xml 파일에서 허용할 HTML 태그와 속성을 정의합니다.

XSS 필터

AxpXssFilter가 모든 요청에 대해 XSS 공격을 방지합니다.

실행 순서:

  1. 요청 데이터 검사
  2. XSS 패턴 탐지
  3. 위험한 스크립트 제거
  4. 정제된 데이터를 컨트롤러에 전달

보안 헤더

Spring Security를 통해 다음 보안 헤더를 자동으로 설정합니다:

다음 단계

`,67)]))}const c=i(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/backend_tech-stack_security.md.CcSKL3mO.lean.js b/assets/backend_tech-stack_security.md.CcSKL3mO.lean.js new file mode 100644 index 0000000..481a56f --- /dev/null +++ b/assets/backend_tech-stack_security.md.CcSKL3mO.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"보안 및 인증","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/security.md","filePath":"backend/tech-stack/security.md"}'),e={name:"backend/tech-stack/security.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",67)]))}const c=i(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/backend_tech-stack_utilities.md.BsxwVbYD.js b/assets/backend_tech-stack_utilities.md.BsxwVbYD.js deleted file mode 100644 index e92c166..0000000 --- a/assets/backend_tech-stack_utilities.md.BsxwVbYD.js +++ /dev/null @@ -1,35 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"기타 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/utilities.md","filePath":"backend/tech-stack/utilities.md"}'),t={name:"backend/tech-stack/utilities.md"};function e(h,s,p,k,r,o){return n(),a("div",null,s[0]||(s[0]=[l(`

기타 유틸리티

AxpFramework에서 사용하는 기타 유틸리티 라이브러리를 설명합니다.

Jsoup

버전

기능

사용 예시

java
import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-
-// HTML 파싱
-Document doc = Jsoup.parse(htmlString);
-
-// 요소 선택
-Elements links = doc.select("a[href]");
-String title = doc.title();

JUniversalCharDet

버전

기능

사용 예시

java
import org.mozilla.universalchardet.UniversalDetector;
-
-UniversalDetector detector = new UniversalDetector(null);
-detector.handleData(bytes, 0, bytes.length);
-detector.dataEnd();
-String encoding = detector.getDetectedCharset();

Google GenAI SDK

버전

기능

사용 예시

java
@Autowired
-private AxpGeminiService geminiService;
-
-Map<String, Object> request = new HashMap<>();
-request.put("prompt", "질문 내용");
-
-String response = geminiService.callGeminiAi(request);

Commons BeanUtils

버전

기능

사용 예시

java
import org.apache.commons.beanutils.BeanUtils;
-
-// Bean 속성 복사
-BeanUtils.copyProperties(dest, source);
-
-// 속성 값 가져오기
-String value = BeanUtils.getProperty(bean, "propertyName");
-
-// 속성 값 설정
-BeanUtils.setProperty(bean, "propertyName", value);

Commons Collections

버전

기능

사용 예시

java
import org.apache.commons.collections4.CollectionUtils;
-
-// 컬렉션 비어있는지 확인
-boolean isEmpty = CollectionUtils.isEmpty(list);
-
-// 컬렉션 필터링
-Collection<String> filtered = CollectionUtils.select(list, predicate);

다음 단계

`,39)]))}const c=i(t,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/backend_tech-stack_utilities.md.BsxwVbYD.lean.js b/assets/backend_tech-stack_utilities.md.BsxwVbYD.lean.js deleted file mode 100644 index 348c601..0000000 --- a/assets/backend_tech-stack_utilities.md.BsxwVbYD.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"기타 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/utilities.md","filePath":"backend/tech-stack/utilities.md"}'),t={name:"backend/tech-stack/utilities.md"};function e(h,s,p,k,r,o){return n(),a("div",null,s[0]||(s[0]=[l("",39)]))}const c=i(t,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/backend_tech-stack_utilities.md.Z-r0wcQt.js b/assets/backend_tech-stack_utilities.md.Z-r0wcQt.js new file mode 100644 index 0000000..03c20e6 --- /dev/null +++ b/assets/backend_tech-stack_utilities.md.Z-r0wcQt.js @@ -0,0 +1,35 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"기타 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/utilities.md","filePath":"backend/tech-stack/utilities.md"}'),t={name:"backend/tech-stack/utilities.md"};function e(h,s,p,k,r,o){return n(),a("div",null,s[0]||(s[0]=[l(`

기타 유틸리티

AxpFramework에서 사용하는 기타 유틸리티 라이브러리를 설명합니다.

Jsoup

버전

기능

사용 예시

java
import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+
+// HTML 파싱
+Document doc = Jsoup.parse(htmlString);
+
+// 요소 선택
+Elements links = doc.select("a[href]");
+String title = doc.title();

JUniversalCharDet

버전

기능

사용 예시

java
import org.mozilla.universalchardet.UniversalDetector;
+
+UniversalDetector detector = new UniversalDetector(null);
+detector.handleData(bytes, 0, bytes.length);
+detector.dataEnd();
+String encoding = detector.getDetectedCharset();

Google GenAI SDK

버전

기능

사용 예시

java
@Autowired
+private AxpGeminiService geminiService;
+
+Map<String, Object> request = new HashMap<>();
+request.put("prompt", "질문 내용");
+
+String response = geminiService.callGeminiAi(request);

Commons BeanUtils

버전

기능

사용 예시

java
import org.apache.commons.beanutils.BeanUtils;
+
+// Bean 속성 복사
+BeanUtils.copyProperties(dest, source);
+
+// 속성 값 가져오기
+String value = BeanUtils.getProperty(bean, "propertyName");
+
+// 속성 값 설정
+BeanUtils.setProperty(bean, "propertyName", value);

Commons Collections

버전

기능

사용 예시

java
import org.apache.commons.collections4.CollectionUtils;
+
+// 컬렉션 비어있는지 확인
+boolean isEmpty = CollectionUtils.isEmpty(list);
+
+// 컬렉션 필터링
+Collection<String> filtered = CollectionUtils.select(list, predicate);

다음 단계

`,39)]))}const c=i(t,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/backend_tech-stack_utilities.md.Z-r0wcQt.lean.js b/assets/backend_tech-stack_utilities.md.Z-r0wcQt.lean.js new file mode 100644 index 0000000..8d33dce --- /dev/null +++ b/assets/backend_tech-stack_utilities.md.Z-r0wcQt.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"기타 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"backend/tech-stack/utilities.md","filePath":"backend/tech-stack/utilities.md"}'),t={name:"backend/tech-stack/utilities.md"};function e(h,s,p,k,r,o){return n(),a("div",null,s[0]||(s[0]=[l("",39)]))}const c=i(t,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/backend_testing_integration-test.md.1bSRyHdQ.js b/assets/backend_testing_integration-test.md.1bSRyHdQ.js deleted file mode 100644 index 5275ee4..0000000 --- a/assets/backend_testing_integration-test.md.1bSRyHdQ.js +++ /dev/null @@ -1,15 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"통합 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"backend/testing/integration-test.md","filePath":"backend/testing/integration-test.md"}'),h={name:"backend/testing/integration-test.md"};function l(e,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

통합 테스트

통합 테스트를 작성하는 방법을 설명합니다.

기본 구조

java
@SpringBootTest
-@AutoConfigureMockMvc
-class ControllerTest {
-    
-    @Autowired
-    private MockMvc mockMvc;
-    
-    @Test
-    void testEndpoint() throws Exception {
-        mockMvc.perform(post("/api/endpoint")
-            .contentType(MediaType.APPLICATION_JSON)
-            .content("{}"))
-            .andExpect(status().isOk());
-    }
-}

다음 단계

`,6)]))}const g=i(h,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/backend_testing_integration-test.md.1bSRyHdQ.lean.js b/assets/backend_testing_integration-test.md.1bSRyHdQ.lean.js deleted file mode 100644 index bc334e4..0000000 --- a/assets/backend_testing_integration-test.md.1bSRyHdQ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"통합 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"backend/testing/integration-test.md","filePath":"backend/testing/integration-test.md"}'),h={name:"backend/testing/integration-test.md"};function l(e,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",6)]))}const g=i(h,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/backend_testing_integration-test.md.BdGuJWLN.js b/assets/backend_testing_integration-test.md.BdGuJWLN.js new file mode 100644 index 0000000..bcd7973 --- /dev/null +++ b/assets/backend_testing_integration-test.md.BdGuJWLN.js @@ -0,0 +1,15 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"통합 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"backend/testing/integration-test.md","filePath":"backend/testing/integration-test.md"}'),h={name:"backend/testing/integration-test.md"};function l(e,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

통합 테스트

통합 테스트를 작성하는 방법을 설명합니다.

기본 구조

java
@SpringBootTest
+@AutoConfigureMockMvc
+class ControllerTest {
+    
+    @Autowired
+    private MockMvc mockMvc;
+    
+    @Test
+    void testEndpoint() throws Exception {
+        mockMvc.perform(post("/api/endpoint")
+            .contentType(MediaType.APPLICATION_JSON)
+            .content("{}"))
+            .andExpect(status().isOk());
+    }
+}

다음 단계

`,6)]))}const g=i(h,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/backend_testing_integration-test.md.BdGuJWLN.lean.js b/assets/backend_testing_integration-test.md.BdGuJWLN.lean.js new file mode 100644 index 0000000..331bd20 --- /dev/null +++ b/assets/backend_testing_integration-test.md.BdGuJWLN.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"통합 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"backend/testing/integration-test.md","filePath":"backend/testing/integration-test.md"}'),h={name:"backend/testing/integration-test.md"};function l(e,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",6)]))}const g=i(h,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/backend_testing_unit-test.md.BZ7CWtDo.js b/assets/backend_testing_unit-test.md.BZ7CWtDo.js deleted file mode 100644 index 435cd57..0000000 --- a/assets/backend_testing_unit-test.md.BZ7CWtDo.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"단위 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"backend/testing/unit-test.md","filePath":"backend/testing/unit-test.md"}'),e={name:"backend/testing/unit-test.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t(`

단위 테스트

단위 테스트를 작성하는 방법을 설명합니다.

기본 구조

java
@SpringBootTest
-class ServiceTest {
-    
-    @Autowired
-    private YourService service;
-    
-    @Test
-    void testMethod() {
-        // 테스트 코드
-    }
-}

다음 단계

`,6)]))}const E=a(e,[["render",l]]);export{o as __pageData,E as default}; diff --git a/assets/backend_testing_unit-test.md.BZ7CWtDo.lean.js b/assets/backend_testing_unit-test.md.BZ7CWtDo.lean.js deleted file mode 100644 index c5ac2f0..0000000 --- a/assets/backend_testing_unit-test.md.BZ7CWtDo.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"단위 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"backend/testing/unit-test.md","filePath":"backend/testing/unit-test.md"}'),e={name:"backend/testing/unit-test.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t("",6)]))}const E=a(e,[["render",l]]);export{o as __pageData,E as default}; diff --git a/assets/backend_testing_unit-test.md.CI4FWioR.js b/assets/backend_testing_unit-test.md.CI4FWioR.js new file mode 100644 index 0000000..1cc7a01 --- /dev/null +++ b/assets/backend_testing_unit-test.md.CI4FWioR.js @@ -0,0 +1,11 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"단위 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"backend/testing/unit-test.md","filePath":"backend/testing/unit-test.md"}'),e={name:"backend/testing/unit-test.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t(`

단위 테스트

단위 테스트를 작성하는 방법을 설명합니다.

기본 구조

java
@SpringBootTest
+class ServiceTest {
+    
+    @Autowired
+    private YourService service;
+    
+    @Test
+    void testMethod() {
+        // 테스트 코드
+    }
+}

다음 단계

`,6)]))}const E=a(e,[["render",l]]);export{o as __pageData,E as default}; diff --git a/assets/backend_testing_unit-test.md.CI4FWioR.lean.js b/assets/backend_testing_unit-test.md.CI4FWioR.lean.js new file mode 100644 index 0000000..7f6647a --- /dev/null +++ b/assets/backend_testing_unit-test.md.CI4FWioR.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"단위 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"backend/testing/unit-test.md","filePath":"backend/testing/unit-test.md"}'),e={name:"backend/testing/unit-test.md"};function l(h,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t("",6)]))}const E=a(e,[["render",l]]);export{o as __pageData,E as default}; diff --git a/assets/backend_troubleshooting_common-issues.md.BDCcNN-Q.js b/assets/backend_troubleshooting_common-issues.md.BDCcNN-Q.js deleted file mode 100644 index a94e6c7..0000000 --- a/assets/backend_troubleshooting_common-issues.md.BDCcNN-Q.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as s,c as e,o as i,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"일반적인 문제 해결","description":"","frontmatter":{},"headers":[],"relativePath":"backend/troubleshooting/common-issues.md","filePath":"backend/troubleshooting/common-issues.md"}'),o={name:"backend/troubleshooting/common-issues.md"};function l(n,a,r,h,d,p){return i(),e("div",null,a[0]||(a[0]=[t(`

일반적인 문제 해결

자주 발생하는 문제와 해결 방법을 설명합니다.

포트 충돌

문제: 8080 포트가 이미 사용 중

해결: application-dev.yaml에서 포트 변경

yaml
server:
-  port: 8081

데이터베이스 연결 실패

문제: 데이터베이스 연결 실패

해결:

  1. 데이터베이스 서버 실행 확인
  2. 연결 정보 확인
  3. 방화벽 설정 확인

Redis 연결 실패

문제: Redis 연결 실패

해결:

  1. Redis 서버 실행 확인
  2. 포트 확인
  3. 비밀번호 설정 확인

다음 단계

`,16)]))}const u=s(o,[["render",l]]);export{g as __pageData,u as default}; diff --git a/assets/backend_troubleshooting_common-issues.md.BDCcNN-Q.lean.js b/assets/backend_troubleshooting_common-issues.md.BDCcNN-Q.lean.js deleted file mode 100644 index 52a34d1..0000000 --- a/assets/backend_troubleshooting_common-issues.md.BDCcNN-Q.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as e,o as i,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"일반적인 문제 해결","description":"","frontmatter":{},"headers":[],"relativePath":"backend/troubleshooting/common-issues.md","filePath":"backend/troubleshooting/common-issues.md"}'),o={name:"backend/troubleshooting/common-issues.md"};function l(n,a,r,h,d,p){return i(),e("div",null,a[0]||(a[0]=[t("",16)]))}const u=s(o,[["render",l]]);export{g as __pageData,u as default}; diff --git a/assets/backend_troubleshooting_common-issues.md.C9wx1MZA.js b/assets/backend_troubleshooting_common-issues.md.C9wx1MZA.js new file mode 100644 index 0000000..8e0b111 --- /dev/null +++ b/assets/backend_troubleshooting_common-issues.md.C9wx1MZA.js @@ -0,0 +1,2 @@ +import{_ as s,c as e,o as i,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"일반적인 문제 해결","description":"","frontmatter":{},"headers":[],"relativePath":"backend/troubleshooting/common-issues.md","filePath":"backend/troubleshooting/common-issues.md"}'),o={name:"backend/troubleshooting/common-issues.md"};function l(n,a,r,h,d,p){return i(),e("div",null,a[0]||(a[0]=[t(`

일반적인 문제 해결

자주 발생하는 문제와 해결 방법을 설명합니다.

포트 충돌

문제: 8080 포트가 이미 사용 중

해결: application-dev.yaml에서 포트 변경

yaml
server:
+  port: 8081

데이터베이스 연결 실패

문제: 데이터베이스 연결 실패

해결:

  1. 데이터베이스 서버 실행 확인
  2. 연결 정보 확인
  3. 방화벽 설정 확인

Redis 연결 실패

문제: Redis 연결 실패

해결:

  1. Redis 서버 실행 확인
  2. 포트 확인
  3. 비밀번호 설정 확인

다음 단계

`,16)]))}const u=s(o,[["render",l]]);export{g as __pageData,u as default}; diff --git a/assets/backend_troubleshooting_common-issues.md.C9wx1MZA.lean.js b/assets/backend_troubleshooting_common-issues.md.C9wx1MZA.lean.js new file mode 100644 index 0000000..18de279 --- /dev/null +++ b/assets/backend_troubleshooting_common-issues.md.C9wx1MZA.lean.js @@ -0,0 +1 @@ +import{_ as s,c as e,o as i,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"일반적인 문제 해결","description":"","frontmatter":{},"headers":[],"relativePath":"backend/troubleshooting/common-issues.md","filePath":"backend/troubleshooting/common-issues.md"}'),o={name:"backend/troubleshooting/common-issues.md"};function l(n,a,r,h,d,p){return i(),e("div",null,a[0]||(a[0]=[t("",16)]))}const u=s(o,[["render",l]]);export{g as __pageData,u as default}; diff --git a/assets/backend_troubleshooting_logging.md.CCu2WgpS.js b/assets/backend_troubleshooting_logging.md.CCu2WgpS.js deleted file mode 100644 index a4bf36c..0000000 --- a/assets/backend_troubleshooting_logging.md.CCu2WgpS.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as s,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"로그 확인","description":"","frontmatter":{},"headers":[],"relativePath":"backend/troubleshooting/logging.md","filePath":"backend/troubleshooting/logging.md"}'),l={name:"backend/troubleshooting/logging.md"};function t(o,a,p,h,r,d){return e(),i("div",null,a[0]||(a[0]=[n(`

로그 확인

로그 파일 위치와 확인 방법을 설명합니다.

로그 파일 위치

logs/AxpFramework/AxpFramework.log
-logs/ess/ess-log.log
-logs/fcm/fcm-log.log

로그 레벨 설정

yaml
logging:
-  level:
-    org.apache.ibatis: DEBUG
-    axpFramework: DEBUG

다음 단계

`,8)]))}const k=s(l,[["render",t]]);export{g as __pageData,k as default}; diff --git a/assets/backend_troubleshooting_logging.md.CCu2WgpS.lean.js b/assets/backend_troubleshooting_logging.md.CCu2WgpS.lean.js deleted file mode 100644 index 8273da9..0000000 --- a/assets/backend_troubleshooting_logging.md.CCu2WgpS.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"로그 확인","description":"","frontmatter":{},"headers":[],"relativePath":"backend/troubleshooting/logging.md","filePath":"backend/troubleshooting/logging.md"}'),l={name:"backend/troubleshooting/logging.md"};function t(o,a,p,h,r,d){return e(),i("div",null,a[0]||(a[0]=[n("",8)]))}const k=s(l,[["render",t]]);export{g as __pageData,k as default}; diff --git a/assets/backend_troubleshooting_logging.md.x3l4FLJA.js b/assets/backend_troubleshooting_logging.md.x3l4FLJA.js new file mode 100644 index 0000000..5e7ca1c --- /dev/null +++ b/assets/backend_troubleshooting_logging.md.x3l4FLJA.js @@ -0,0 +1,6 @@ +import{_ as s,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"로그 확인","description":"","frontmatter":{},"headers":[],"relativePath":"backend/troubleshooting/logging.md","filePath":"backend/troubleshooting/logging.md"}'),l={name:"backend/troubleshooting/logging.md"};function t(o,a,p,h,r,d){return e(),i("div",null,a[0]||(a[0]=[n(`

로그 확인

로그 파일 위치와 확인 방법을 설명합니다.

로그 파일 위치

logs/AxpFramework/AxpFramework.log
+logs/ess/ess-log.log
+logs/fcm/fcm-log.log

로그 레벨 설정

yaml
logging:
+  level:
+    org.apache.ibatis: DEBUG
+    axpFramework: DEBUG

다음 단계

`,8)]))}const k=s(l,[["render",t]]);export{g as __pageData,k as default}; diff --git a/assets/backend_troubleshooting_logging.md.x3l4FLJA.lean.js b/assets/backend_troubleshooting_logging.md.x3l4FLJA.lean.js new file mode 100644 index 0000000..f62c1f0 --- /dev/null +++ b/assets/backend_troubleshooting_logging.md.x3l4FLJA.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"로그 확인","description":"","frontmatter":{},"headers":[],"relativePath":"backend/troubleshooting/logging.md","filePath":"backend/troubleshooting/logging.md"}'),l={name:"backend/troubleshooting/logging.md"};function t(o,a,p,h,r,d){return e(),i("div",null,a[0]||(a[0]=[n("",8)]))}const k=s(l,[["render",t]]);export{g as __pageData,k as default}; diff --git a/assets/chunks/@localSearchIndexroot.BNPcOFiT.js b/assets/chunks/@localSearchIndexroot.BNPcOFiT.js deleted file mode 100644 index ba8a569..0000000 --- a/assets/chunks/@localSearchIndexroot.BNPcOFiT.js +++ /dev/null @@ -1 +0,0 @@ -const t='{"documentCount":2335,"nextId":2335,"documentIds":{"0":"/api-examples.html#runtime-api-examples","1":"/api-examples.html#results","2":"/api-examples.html#theme-data","3":"/api-examples.html#page-data","4":"/api-examples.html#page-frontmatter","5":"/api-examples.html#more","6":"/backend/api/common/auth.html#인증-토큰-api","7":"/backend/api/common/auth.html#기본-정보","8":"/backend/api/common/auth.html#api-목록","9":"/backend/api/common/auth.html#_1-access-token-재발급","10":"/backend/api/common/auth.html#토큰-정보","11":"/backend/api/common/auth.html#access-token","12":"/backend/api/common/auth.html#refresh-token","13":"/backend/api/common/auth.html#uuid","14":"/backend/api/common/auth.html#에러-처리","15":"/backend/api/common/auth.html#_401-unauthorized","16":"/backend/api/common/auth.html#토큰-재발급-플로우","17":"/backend/api/common/auth.html#주의사항","18":"/backend/api/common/auth.html#다음-단계","19":"/backend/api/common/ai.html#ai-서비스-api","20":"/backend/api/common/ai.html#기본-정보","21":"/backend/api/common/ai.html#api-목록","22":"/backend/api/common/ai.html#_1-gemini-ai-호출","23":"/backend/api/common/ai.html#설정","24":"/backend/api/common/ai.html#ai-설정-파일","25":"/backend/api/common/ai.html#주의사항","26":"/backend/api/common/ai.html#다음-단계","27":"/backend/api/common/database.html#데이터베이스-프로시저-호출-api","28":"/backend/api/common/database.html#기본-정보","29":"/backend/api/common/database.html#api-목록","30":"/backend/api/common/database.html#_1-단일-프로시저-실행","31":"/backend/api/common/database.html#_2-다중-프로시저-일괄-실행","32":"/backend/api/common/database.html#_3-다중-커서-결과-조회","33":"/backend/api/common/database.html#_4-string-배열-파라미터-프로시저-호출","34":"/backend/api/common/database.html#_5-클라이언트-에러-로그-저장","35":"/backend/api/common/database.html#프로시저-결과-구조","36":"/backend/api/common/database.html#커서-결과","37":"/backend/api/common/database.html#에러-코드","38":"/backend/api/common/database.html#주의사항","39":"/backend/api/common/database.html#다음-단계","40":"/backend/api/common/file.html#파일-관리-api","41":"/backend/api/common/file.html#기본-정보","42":"/backend/api/common/file.html#api-목록","43":"/backend/api/common/file.html#_1-다중-파일-링크-업로드","44":"/backend/api/common/file.html#form-data","45":"/backend/api/common/file.html#slist-구조-json-문자열","46":"/backend/api/common/file.html#_2-파일-다운로드","47":"/backend/api/common/file.html#파일-처리-규칙","48":"/backend/api/common/file.html#파일-타입","49":"/backend/api/common/file.html#변경-상태","50":"/backend/api/common/file.html#파일명-규칙","51":"/backend/api/common/file.html#주의사항","52":"/backend/api/common/file.html#다음-단계","53":"/backend/api/common/redis.html#redis-관리-api","54":"/backend/api/common/redis.html#기본-정보","55":"/backend/api/common/redis.html#api-목록","56":"/backend/api/common/redis.html#_1-redis-hash-데이터-조회","57":"/backend/api/common/redis.html#_2-redis-hash-데이터-삭제","58":"/backend/api/common/redis.html#redis-데이터-구조","59":"/backend/api/common/redis.html#토큰-저장-구조","60":"/backend/api/common/redis.html#주의사항","61":"/backend/api/common/redis.html#다음-단계","62":"/backend/api/common/report.html#리포트-생성-api","63":"/backend/api/common/report.html#기본-정보","64":"/backend/api/common/report.html#api-목록","65":"/backend/api/common/report.html#_1-pdf-리포트-생성-파일-저장","66":"/backend/api/common/report.html#필수-파라미터","67":"/backend/api/common/report.html#데이터-조회-파라미터","68":"/backend/api/common/report.html#복호화-파라미터","69":"/backend/api/common/report.html#리포트-파라미터-jr-p","70":"/backend/api/common/report.html#이미지-파라미터","71":"/backend/api/common/report.html#커서-변환-파라미터-jr-convert","72":"/backend/api/common/report.html#_2-pdf-리포트-생성-바이너리-반환","73":"/backend/api/common/report.html#_3-암호화된-pdf-생성","74":"/backend/api/common/report.html#_4-html-리포트-생성","75":"/backend/api/common/report.html#_5-excel-리포트-다운로드","76":"/backend/api/common/report.html#_6-생성된-pdf-파일-조회","77":"/backend/api/common/report.html#리포트-파라미터-규칙","78":"/backend/api/common/report.html#커서-파라미터","79":"/backend/api/common/report.html#일반-파라미터","80":"/backend/api/common/report.html#이미지-파라미터-1","81":"/backend/api/common/report.html#서버-경로-이미지","82":"/backend/api/common/report.html#웹-경로-이미지","83":"/backend/api/common/report.html#커서-변환","84":"/backend/api/common/report.html#복호화","85":"/backend/api/common/report.html#리포트-템플릿-위치","86":"/backend/api/common/report.html#한글-폰트","87":"/backend/api/common/report.html#주의사항","88":"/backend/api/common/report.html#다음-단계","89":"/backend/api/common/sms.html#sms-발송-api","90":"/backend/api/common/sms.html#기본-정보","91":"/backend/api/common/sms.html#api-목록","92":"/backend/api/common/sms.html#_1-sms-메시지-발송","93":"/backend/api/common/sms.html#params-필수","94":"/backend/api/common/sms.html#sessioninfo-필수","95":"/backend/api/common/sms.html#sms-설정","96":"/backend/api/common/sms.html#application-dev-yaml","97":"/backend/api/common/sms.html#메시지-상태","98":"/backend/api/common/sms.html#주의사항","99":"/backend/api/common/sms.html#다음-단계","100":"/backend/api/ess/login.html#로그인-인증-api","101":"/backend/api/ess/login.html#기본-정보","102":"/backend/api/ess/login.html#api-목록","103":"/backend/api/ess/login.html#_1-일반-사용자-로그인","104":"/backend/api/ess/login.html#_2-관리자-로그인","105":"/backend/api/ess/login.html#_3-로그아웃","106":"/backend/api/ess/login.html#_4-세션-정리","107":"/backend/api/ess/login.html#_5-테스트-프로시저-호출","108":"/backend/api/ess/login.html#로그인-프로세스","109":"/backend/api/ess/login.html#_1-로그인-요청","110":"/backend/api/ess/login.html#_2-토큰-발급","111":"/backend/api/ess/login.html#_3-토큰-저장","112":"/backend/api/ess/login.html#_4-api-호출","113":"/backend/api/ess/login.html#_5-토큰-만료-시","114":"/backend/api/ess/login.html#주의사항","115":"/backend/api/ess/login.html#다음-단계","116":"/backend/api/ess/user.html#사용자-관리-api","117":"/backend/api/ess/user.html#기본-정보","118":"/backend/api/ess/user.html#api-목록","119":"/backend/api/ess/user.html#_1-사용자-이미지-조회","120":"/backend/api/ess/user.html#_2-즐겨찾기-목록-조회","121":"/backend/api/ess/user.html#_3-즐겨찾기-수정","122":"/backend/api/ess/user.html#파일-경로-설정","123":"/backend/api/ess/user.html#주의사항","124":"/backend/api/ess/user.html#다음-단계","125":"/backend/api/fcm/#fcm-모듈-api","126":"/backend/api/fcm/#현재-상태","127":"/backend/api/fcm/#예정된-api","128":"/backend/api/fcm/#다음-단계","129":"/backend/api/#api-레퍼런스","130":"/backend/api/#api-개요","131":"/backend/api/#공통-사항","132":"/backend/api/#인증-방법","133":"/backend/api/#access-token-사용","134":"/backend/api/#refresh-token-사용","135":"/backend/api/#공통-응답-형식","136":"/backend/api/#성공-응답","137":"/backend/api/#실패-응답","138":"/backend/api/#http-상태-코드","139":"/backend/api/#요청-형식","140":"/backend/api/#api-그룹별-링크","141":"/backend/api/#공통-프레임워크-api","142":"/backend/api/#ess-모듈-api","143":"/backend/api/#fcm-모듈-api","144":"/backend/api/#swagger-ui","145":"/backend/api/#다음-단계","146":"/backend/common-features/ai.html#ai-서비스","147":"/backend/common-features/ai.html#설정","148":"/backend/common-features/ai.html#ai-config-yaml","149":"/backend/common-features/ai.html#사용-예시","150":"/backend/common-features/ai.html#api-엔드포인트","151":"/backend/common-features/ai.html#다음-단계","152":"/backend/common-features/logging.html#로깅","153":"/backend/common-features/logging.html#로깅-어노테이션","154":"/backend/common-features/logging.html#axpcommlogannotation","155":"/backend/common-features/logging.html#로그-레벨","156":"/backend/common-features/logging.html#설정","157":"/backend/common-features/logging.html#로그-파일","158":"/backend/common-features/logging.html#logback-설정","159":"/backend/common-features/logging.html#logback-spring-xml","160":"/backend/common-features/logging.html#다음-단계","161":"/backend/common-features/file.html#파일-처리","162":"/backend/common-features/file.html#파일-업로드","163":"/backend/common-features/file.html#multipartfile-사용","164":"/backend/common-features/file.html#파일-크기-제한","165":"/backend/common-features/file.html#파일-다운로드","166":"/backend/common-features/file.html#파일-유틸리티","167":"/backend/common-features/file.html#axpcommfileutil","168":"/backend/common-features/file.html#다음-단계","169":"/backend/common-features/mail.html#메일-발송","170":"/backend/common-features/mail.html#설정","171":"/backend/common-features/mail.html#application-yaml","172":"/backend/common-features/mail.html#사용-예시","173":"/backend/common-features/mail.html#다음-단계","174":"/backend/common-features/report.html#리포트-생성","175":"/backend/common-features/report.html#개요","176":"/backend/common-features/report.html#리포트-생성-프로세스","177":"/backend/common-features/report.html#_1-리포트-템플릿-작성","178":"/backend/common-features/report.html#_2-데이터-조회","179":"/backend/common-features/report.html#_3-리포트-파라미터-설정","180":"/backend/common-features/report.html#_4-리포트-생성","181":"/backend/common-features/report.html#api-사용","182":"/backend/common-features/report.html#pdf-리포트-생성","183":"/backend/common-features/report.html#excel-리포트-다운로드","184":"/backend/common-features/report.html#리포트-파라미터-규칙","185":"/backend/common-features/report.html#커서-파라미터","186":"/backend/common-features/report.html#일반-파라미터","187":"/backend/common-features/report.html#이미지-파라미터","188":"/backend/common-features/report.html#서버-경로-이미지","189":"/backend/common-features/report.html#웹-경로-이미지","190":"/backend/common-features/report.html#커서-변환","191":"/backend/common-features/report.html#복호화","192":"/backend/common-features/report.html#한글-폰트","193":"/backend/common-features/report.html#폰트-위치","194":"/backend/common-features/report.html#지원-폰트","195":"/backend/common-features/report.html#폰트-설정","196":"/backend/common-features/report.html#리포트-템플릿-작성","197":"/backend/common-features/report.html#기본-구조","198":"/backend/common-features/report.html#사용-예시","199":"/backend/common-features/report.html#서비스에서-리포트-생성","200":"/backend/common-features/report.html#주의사항","201":"/backend/common-features/report.html#다음-단계","202":"/backend/common-features/security.html#보안-기능","203":"/backend/common-features/security.html#개요","204":"/backend/common-features/security.html#암호화-유틸리티","205":"/backend/common-features/security.html#aes-128","206":"/backend/common-features/security.html#rsa","207":"/backend/common-features/security.html#해시-함수","208":"/backend/common-features/security.html#md5","209":"/backend/common-features/security.html#sha-256","210":"/backend/common-features/security.html#xss-방지","211":"/backend/common-features/security.html#axpxssfilter","212":"/backend/common-features/security.html#axpxssutil","213":"/backend/common-features/security.html#jwt-인증","214":"/backend/common-features/security.html#axpcommauthservice","215":"/backend/common-features/security.html#axpjwtauthenticationfilter","216":"/backend/common-features/security.html#spring-security-통합","217":"/backend/common-features/security.html#axpsecurityconfig","218":"/backend/common-features/security.html#복호화-필터","219":"/backend/common-features/security.html#axpdecryptfilter","220":"/backend/common-features/security.html#보안-정책-파일","221":"/backend/common-features/security.html#antisamy-policy-xml","222":"/backend/common-features/security.html#사용-예시","223":"/backend/common-features/security.html#개인정보-암호화","224":"/backend/common-features/security.html#리포트-생성-시-복호화","225":"/backend/common-features/security.html#주의사항","226":"/backend/common-features/security.html#다음-단계","227":"/backend/common-features/sms.html#sms-발송","228":"/backend/common-features/sms.html#설정","229":"/backend/common-features/sms.html#application-yaml","230":"/backend/common-features/sms.html#사용-예시","231":"/backend/common-features/sms.html#다음-단계","232":"/backend/common-features/utilities.html#유틸리티-클래스","233":"/backend/common-features/utilities.html#axpcommutil","234":"/backend/common-features/utilities.html#주요-메서드","235":"/backend/common-features/utilities.html#axpcommvalidationutil","236":"/backend/common-features/utilities.html#axpcommpaging","237":"/backend/common-features/utilities.html#다음-단계","238":"/backend/configuration/application.html#애플리케이션-설정","239":"/backend/configuration/application.html#설정-파일-위치","240":"/backend/configuration/application.html#기본-설정-application-yaml","241":"/backend/configuration/application.html#서버-설정","242":"/backend/configuration/application.html#포트-및-컨텍스트","243":"/backend/configuration/application.html#jwt-설정","244":"/backend/configuration/application.html#rsa-설정","245":"/backend/configuration/application.html#cors-설정","246":"/backend/configuration/application.html#security-설정","247":"/backend/configuration/application.html#제외-uri","248":"/backend/configuration/application.html#파일-업로드-설정","249":"/backend/configuration/application.html#파일-경로-설정","250":"/backend/configuration/application.html#로깅-설정","251":"/backend/configuration/application.html#다음-단계","252":"/backend/configuration/datasource.html#데이터소스-설정","253":"/backend/configuration/datasource.html#데이터베이스-타입-설정","254":"/backend/configuration/datasource.html#tibero-설정","255":"/backend/configuration/datasource.html#기본-설정","256":"/backend/configuration/datasource.html#hikaricp-설정","257":"/backend/configuration/datasource.html#oracle-설정","258":"/backend/configuration/datasource.html#postgresql-설정","259":"/backend/configuration/datasource.html#axpdatasourceconfig","260":"/backend/configuration/datasource.html#조건부-빈-생성","261":"/backend/configuration/datasource.html#생성되는-bean","262":"/backend/configuration/datasource.html#mybatis-설정","263":"/backend/configuration/datasource.html#db별-설정-파일","264":"/backend/configuration/datasource.html#매퍼-파일-스캔","265":"/backend/configuration/datasource.html#다음-단계","266":"/backend/configuration/redis.html#redis-설정","267":"/backend/configuration/redis.html#redis-연결-설정","268":"/backend/configuration/redis.html#application-dev-yaml","269":"/backend/configuration/redis.html#axpredisconfig","270":"/backend/configuration/redis.html#캐시용-redis","271":"/backend/configuration/redis.html#비즈니스-컴포넌트용-redis","272":"/backend/configuration/redis.html#redistemplate","273":"/backend/configuration/redis.html#캐시용-redistemplate","274":"/backend/configuration/redis.html#비즈니스-컴포넌트용-redistemplate","275":"/backend/configuration/redis.html#직렬화-설정","276":"/backend/configuration/redis.html#key-직렬화","277":"/backend/configuration/redis.html#value-직렬화","278":"/backend/configuration/redis.html#redis-사용-예시","279":"/backend/configuration/redis.html#토큰-저장","280":"/backend/configuration/redis.html#토큰-조회","281":"/backend/configuration/redis.html#토큰-삭제","282":"/backend/configuration/redis.html#다음-단계","283":"/backend/configuration/maven.html#maven-설정","284":"/backend/configuration/maven.html#pom-xml-구조","285":"/backend/configuration/maven.html#기본-정보","286":"/backend/configuration/maven.html#spring-boot-parent","287":"/backend/configuration/maven.html#java-버전","288":"/backend/configuration/maven.html#프로파일-설정","289":"/backend/configuration/maven.html#프로파일-정의","290":"/backend/configuration/maven.html#프로파일-사용","291":"/backend/configuration/maven.html#주요-의존성","292":"/backend/configuration/maven.html#spring-boot-starters","293":"/backend/configuration/maven.html#데이터베이스","294":"/backend/configuration/maven.html#기타","295":"/backend/configuration/maven.html#빌드-플러그인","296":"/backend/configuration/maven.html#spring-boot-maven-plugin","297":"/backend/configuration/maven.html#maven-war-plugin","298":"/backend/configuration/maven.html#빌드-명령어","299":"/backend/configuration/maven.html#개발-환경-빌드","300":"/backend/configuration/maven.html#war-파일-생성","301":"/backend/configuration/maven.html#테스트-제외-빌드","302":"/backend/configuration/maven.html#다음-단계","303":"/backend/database/mapper-guide.html#mapper-작성-가이드","304":"/backend/database/mapper-guide.html#mapper-인터페이스","305":"/backend/database/mapper-guide.html#기본-구조","306":"/backend/database/mapper-guide.html#xml-매퍼-파일","307":"/backend/database/mapper-guide.html#파일-위치","308":"/backend/database/mapper-guide.html#기본-구조-1","309":"/backend/database/mapper-guide.html#프로시저-호출","310":"/backend/database/mapper-guide.html#tibero-oracle","311":"/backend/database/mapper-guide.html#postgresql","312":"/backend/database/mapper-guide.html#동적-sql","313":"/backend/database/mapper-guide.html#if","314":"/backend/database/mapper-guide.html#foreach","315":"/backend/database/mapper-guide.html#다음-단계","316":"/backend/database/common-service.html#공통-db-서비스","317":"/backend/database/common-service.html#axpcommdbservice","318":"/backend/database/common-service.html#사용-예시","319":"/backend/database/common-service.html#지원-데이터베이스","320":"/backend/database/common-service.html#axpcommredisdbservice","321":"/backend/database/common-service.html#토큰-저장","322":"/backend/database/common-service.html#토큰-조회","323":"/backend/database/common-service.html#토큰-삭제","324":"/backend/database/common-service.html#hash-데이터-조회","325":"/backend/database/common-service.html#axpcommdbadapterservice","326":"/backend/database/common-service.html#사용-예시-1","327":"/backend/database/common-service.html#다음-단계","328":"/backend/database/mybatis.html#mybatis-설정","329":"/backend/database/mybatis.html#mapperscan-설정","330":"/backend/database/mybatis.html#db별-설정-파일","331":"/backend/database/mybatis.html#매퍼-파일-위치","332":"/backend/database/mybatis.html#mapper-인터페이스-작성","333":"/backend/database/mybatis.html#xml-매퍼-작성","334":"/backend/database/mybatis.html#프로시저-호출","335":"/backend/database/mybatis.html#tibero","336":"/backend/database/mybatis.html#oracle","337":"/backend/database/mybatis.html#postgresql","338":"/backend/database/mybatis.html#다음-단계","339":"/backend/deployment/build.html#maven-빌드","340":"/backend/deployment/build.html#개발-환경-빌드","341":"/backend/deployment/build.html#war-파일-생성","342":"/backend/deployment/build.html#다음-단계","343":"/backend/deployment/deploy.html#배포-설정","344":"/backend/deployment/deploy.html#tomcat-배포","345":"/backend/deployment/deploy.html#다음-단계","346":"/backend/development-guide/api-design.html#rest-api-설계-규칙","347":"/backend/development-guide/api-design.html#url-패턴","348":"/backend/development-guide/api-design.html#http-메서드","349":"/backend/development-guide/api-design.html#요청-형식","350":"/backend/development-guide/api-design.html#응답-형식","351":"/backend/development-guide/api-design.html#성공","352":"/backend/development-guide/api-design.html#실패","353":"/backend/development-guide/api-design.html#다음-단계","354":"/backend/development-guide/authentication.html#인증-인가-처리","355":"/backend/development-guide/authentication.html#jwt-토큰-사용","356":"/backend/development-guide/authentication.html#authorization-헤더","357":"/backend/development-guide/authentication.html#쿠키","358":"/backend/development-guide/authentication.html#제외-uri-설정","359":"/backend/development-guide/authentication.html#다음-단계","360":"/backend/development-guide/new-module/config.html#설정-파일-추가","361":"/backend/development-guide/new-module/config.html#환경별-설정","362":"/backend/development-guide/new-module/config.html#application-dev-yaml","363":"/backend/development-guide/new-module/config.html#다음-단계","364":"/backend/development-guide/new-module.html#새로운-모듈-추가","365":"/backend/development-guide/new-module.html#개요","366":"/backend/development-guide/new-module.html#모듈-추가-프로세스","367":"/backend/development-guide/new-module.html#_1단계-모듈-구조-설계","368":"/backend/development-guide/new-module.html#_2단계-패키지-구조-생성","369":"/backend/development-guide/new-module.html#_3단계-애플리케이션-설정","370":"/backend/development-guide/new-module.html#componentscan-추가","371":"/backend/development-guide/new-module.html#mapperscan-추가","372":"/backend/development-guide/new-module.html#_4단계-클래스-작성","373":"/backend/development-guide/new-module.html#_5단계-리소스-파일-생성","374":"/backend/development-guide/new-module.html#xml-매퍼-파일","375":"/backend/development-guide/new-module.html#_6단계-설정-파일-추가","376":"/backend/development-guide/new-module.html#표준-패키지-구조","377":"/backend/development-guide/new-module.html#전체-구조","378":"/backend/development-guide/new-module.html#계층별-역할","379":"/backend/development-guide/new-module.html#controller","380":"/backend/development-guide/new-module.html#service","381":"/backend/development-guide/new-module.html#mapper","382":"/backend/development-guide/new-module.html#개발-가이드","383":"/backend/development-guide/new-module.html#_1-모듈-생성-절차","384":"/backend/development-guide/new-module.html#_2-컨트롤러-작성","385":"/backend/development-guide/new-module.html#_3-서비스-작성","386":"/backend/development-guide/new-module.html#_4-mapper-작성","387":"/backend/development-guide/new-module.html#_5-설정-파일-추가","388":"/backend/development-guide/new-module.html#실제-예시-ess-모듈-구조","389":"/backend/development-guide/new-module.html#공통-프레임워크-활용","390":"/backend/development-guide/new-module.html#데이터베이스","391":"/backend/development-guide/new-module.html#인증-보안","392":"/backend/development-guide/new-module.html#유틸리티","393":"/backend/development-guide/new-module.html#api-설계-규칙","394":"/backend/development-guide/new-module.html#인증-인가-처리","395":"/backend/development-guide/new-module.html#swagger-문서화","396":"/backend/development-guide/new-module.html#체크리스트","397":"/backend/development-guide/new-module.html#다음-단계","398":"/backend/development-guide/new-module.html#참고-자료","399":"/backend/development-guide/new-module/controller.html#컨트롤러-작성","400":"/backend/development-guide/new-module/controller.html#기본-구조","401":"/backend/development-guide/new-module/controller.html#응답-형식","402":"/backend/development-guide/new-module/controller.html#성공","403":"/backend/development-guide/new-module/controller.html#실패","404":"/backend/development-guide/new-module/controller.html#다음-단계","405":"/backend/development-guide/new-module/creation.html#모듈-생성-절차","406":"/backend/development-guide/new-module/creation.html#_1-패키지-구조-생성","407":"/backend/development-guide/new-module/creation.html#_2-componentscan-추가","408":"/backend/development-guide/new-module/creation.html#_3-mapperscan-추가","409":"/backend/development-guide/new-module/creation.html#_4-xml-매퍼-파일-생성","410":"/backend/development-guide/new-module/creation.html#다음-단계","411":"/backend/development-guide/new-module/mapper.html#mapper-작성","412":"/backend/development-guide/new-module/mapper.html#인터페이스","413":"/backend/development-guide/new-module/mapper.html#xml-매퍼","414":"/backend/development-guide/new-module/mapper.html#파일-위치","415":"/backend/development-guide/new-module/mapper.html#다음-단계","416":"/backend/development-guide/new-module/service.html#서비스-작성","417":"/backend/development-guide/new-module/service.html#기본-구조","418":"/backend/development-guide/new-module/service.html#프로시저-호출","419":"/backend/development-guide/new-module/service.html#다음-단계","420":"/backend/development-guide/swagger.html#swagger-openapi-문서화","421":"/backend/development-guide/swagger.html#어노테이션-추가","422":"/backend/development-guide/swagger.html#접근-url","423":"/backend/development-guide/swagger.html#다음-단계","424":"/backend/getting-started/overview.html#프로젝트-개요","425":"/backend/getting-started/overview.html#axpframework-소개","426":"/backend/getting-started/overview.html#주요-특징","427":"/backend/getting-started/overview.html#_1-다중-데이터베이스-지원","428":"/backend/getting-started/overview.html#_2-통합-보안-기능","429":"/backend/getting-started/overview.html#_3-공통-기능-제공","430":"/backend/getting-started/overview.html#_4-redis-캐싱","431":"/backend/getting-started/overview.html#_5-모듈화된-구조","432":"/backend/getting-started/overview.html#프로젝트-목적","433":"/backend/getting-started/overview.html#기술-스택-요약","434":"/backend/getting-started/overview.html#프로젝트-구조","435":"/backend/getting-started/overview.html#다음-단계","436":"/backend/getting-started/project-structure.html#프로젝트-구조","437":"/backend/getting-started/project-structure.html#전체-디렉토리-구조","438":"/backend/getting-started/project-structure.html#java-소스-코드-구조","439":"/backend/getting-started/project-structure.html#_1-공통-프레임워크-모듈-axpframework","440":"/backend/getting-started/project-structure.html#_2-ess-비즈니스-모듈-ess","441":"/backend/getting-started/project-structure.html#_3-fcm-비즈니스-모듈-fcm","442":"/backend/getting-started/project-structure.html#리소스-파일-구조","443":"/backend/getting-started/project-structure.html#_1-설정-파일-resources-config","444":"/backend/getting-started/project-structure.html#_2-mybatis-매퍼-resources-mapper","445":"/backend/getting-started/project-structure.html#_3-mybatis-설정-resources-mapper-config","446":"/backend/getting-started/project-structure.html#_4-리포트-템플릿-resources-report","447":"/backend/getting-started/project-structure.html#패키지-네이밍-규칙","448":"/backend/getting-started/project-structure.html#_1-표준-패키지-구조","449":"/backend/getting-started/project-structure.html#_2-네이밍-규칙","450":"/backend/getting-started/project-structure.html#주요-파일-설명","451":"/backend/getting-started/project-structure.html#_1-axpbootapplication-java","452":"/backend/getting-started/project-structure.html#_2-pom-xml","453":"/backend/getting-started/project-structure.html#_3-application-yaml","454":"/backend/getting-started/project-structure.html#모듈-간-의존성","455":"/backend/getting-started/project-structure.html#새로운-모듈-추가-시-구조","456":"/backend/getting-started/project-structure.html#다음-단계","457":"/backend/getting-started/requirements.html#시스템-요구사항","458":"/backend/getting-started/requirements.html#필수-요구사항","459":"/backend/getting-started/requirements.html#_1-java-개발-환경","460":"/backend/getting-started/requirements.html#_2-빌드-도구","461":"/backend/getting-started/requirements.html#_3-데이터베이스","462":"/backend/getting-started/requirements.html#tibero6-기본값","463":"/backend/getting-started/requirements.html#oracle","464":"/backend/getting-started/requirements.html#postgresql","465":"/backend/getting-started/requirements.html#_4-redis-valkey-호환","466":"/backend/getting-started/requirements.html#_5-ide-선택사항","467":"/backend/getting-started/requirements.html#선택적-요구사항","468":"/backend/getting-started/requirements.html#_1-외부-tomcat-서버","469":"/backend/getting-started/requirements.html#_2-개발-도구","470":"/backend/getting-started/requirements.html#운영-환경-요구사항","471":"/backend/getting-started/requirements.html#서버-사양-권장","472":"/backend/getting-started/requirements.html#네트워크","473":"/backend/getting-started/requirements.html#환경별-설정","474":"/backend/getting-started/requirements.html#다음-단계","475":"/backend/getting-started/setup.html#개발-환경-설정","476":"/backend/getting-started/setup.html#_1-프로젝트-클론-및-준비","477":"/backend/getting-started/setup.html#_1-1-프로젝트-다운로드","478":"/backend/getting-started/setup.html#_1-2-프로젝트-구조-확인","479":"/backend/getting-started/setup.html#_2-데이터베이스-설정","480":"/backend/getting-started/setup.html#_2-1-데이터베이스-선택","481":"/backend/getting-started/setup.html#_2-2-설정-파일-수정","482":"/backend/getting-started/setup.html#tibero-설정-예시","483":"/backend/getting-started/setup.html#oracle-설정-예시","484":"/backend/getting-started/setup.html#postgresql-설정-예시","485":"/backend/getting-started/setup.html#_2-3-tibero-jdbc-드라이버-확인","486":"/backend/getting-started/setup.html#_3-redis-설정","487":"/backend/getting-started/setup.html#_3-1-redis-설치-및-실행","488":"/backend/getting-started/setup.html#windows","489":"/backend/getting-started/setup.html#linux-mac","490":"/backend/getting-started/setup.html#_3-2-redis-설정-파일-수정","491":"/backend/getting-started/setup.html#_4-애플리케이션-설정","492":"/backend/getting-started/setup.html#_4-1-jwt-시크릿-키-설정","493":"/backend/getting-started/setup.html#_4-2-cors-설정","494":"/backend/getting-started/setup.html#_4-3-파일-경로-설정","495":"/backend/getting-started/setup.html#_5-프로젝트-빌드","496":"/backend/getting-started/setup.html#_5-1-maven-의존성-다운로드","497":"/backend/getting-started/setup.html#_5-2-빌드-확인","498":"/backend/getting-started/setup.html#_6-애플리케이션-실행","499":"/backend/getting-started/setup.html#_6-1-ide에서-실행","500":"/backend/getting-started/setup.html#intellij-idea","501":"/backend/getting-started/setup.html#eclipse","502":"/backend/getting-started/setup.html#_6-2-maven으로-실행","503":"/backend/getting-started/setup.html#_6-3-war-파일로-실행","504":"/backend/getting-started/setup.html#_7-애플리케이션-확인","505":"/backend/getting-started/setup.html#_7-1-서버-시작-확인","506":"/backend/getting-started/setup.html#_7-2-api-확인","507":"/backend/getting-started/setup.html#_7-3-로그-확인","508":"/backend/getting-started/setup.html#_8-문제-해결","509":"/backend/getting-started/setup.html#_8-1-포트-충돌","510":"/backend/getting-started/setup.html#_8-2-데이터베이스-연결-실패","511":"/backend/getting-started/setup.html#_8-3-redis-연결-실패","512":"/backend/getting-started/setup.html#다음-단계","513":"/backend/project-structure/business.html#비즈니스-모듈-구조","514":"/backend/project-structure/business.html#표준-패키지-구조","515":"/backend/project-structure/business.html#ess-모듈","516":"/backend/project-structure/business.html#구조","517":"/backend/project-structure/business.html#주요-기능","518":"/backend/project-structure/business.html#_1-인증-auth","519":"/backend/project-structure/business.html#_2-공통-기능-com","520":"/backend/project-structure/business.html#_3-관리자-admin","521":"/backend/project-structure/business.html#_4-복지-welfare","522":"/backend/project-structure/business.html#fcm-모듈","523":"/backend/project-structure/business.html#구조-1","524":"/backend/project-structure/business.html#주요-기능-1","525":"/backend/project-structure/business.html#_1-공통-기능-com","526":"/backend/project-structure/business.html#_2-hri-hri","527":"/backend/project-structure/business.html#_3-시스템-sys","528":"/backend/project-structure/business.html#컨트롤러-작성-규칙","529":"/backend/project-structure/business.html#기본-구조","530":"/backend/project-structure/business.html#응답-형식","531":"/backend/project-structure/business.html#서비스-작성-규칙","532":"/backend/project-structure/business.html#기본-구조-1","533":"/backend/project-structure/business.html#mapper-작성-규칙","534":"/backend/project-structure/business.html#인터페이스","535":"/backend/project-structure/business.html#xml-매퍼","536":"/backend/project-structure/business.html#다음-단계","537":"/backend/#axp-framework-dev-docs","538":"/backend/#이-문서는-무엇인가요","539":"/backend/#처음-온-개발자를-위한-3단계","540":"/backend/#핵심-아키텍처-빠른-링크","541":"/backend/#공통-기능-사용-가이드","542":"/backend/#새-모듈을-만들-때-추천-흐름","543":"/backend/#기술-스택-개요","544":"/backend/#환경-설정-가이드","545":"/backend/#api-레퍼런스","546":"/backend/#문제-해결","547":"/backend/#참고-자료","548":"/backend/project-structure/directory.html#전체-디렉토리-구조","549":"/backend/project-structure/directory.html#루트-디렉토리-구조","550":"/backend/project-structure/directory.html#소스-코드-디렉토리-구조","551":"/backend/project-structure/directory.html#main-디렉토리","552":"/backend/project-structure/directory.html#test-디렉토리","553":"/backend/project-structure/directory.html#java-소스-코드-구조","554":"/backend/project-structure/directory.html#_1-공통-프레임워크-모듈-axpframework","555":"/backend/project-structure/directory.html#_2-ess-비즈니스-모듈-ess","556":"/backend/project-structure/directory.html#_3-fcm-비즈니스-모듈-fcm","557":"/backend/project-structure/directory.html#빌드-결과물-디렉토리","558":"/backend/project-structure/directory.html#로그-디렉토리","559":"/backend/project-structure/directory.html#디렉토리-역할-설명","560":"/backend/project-structure/directory.html#src-main-java","561":"/backend/project-structure/directory.html#src-main-resources","562":"/backend/project-structure/directory.html#src-test-java","563":"/backend/project-structure/directory.html#target","564":"/backend/project-structure/directory.html#logs","565":"/backend/project-structure/directory.html#패키지-네이밍-규칙","566":"/backend/project-structure/directory.html#다음-단계","567":"/backend/project-structure/framework.html#공통-프레임워크-모듈","568":"/backend/project-structure/framework.html#모듈-구조","569":"/backend/project-structure/framework.html#주요-모듈-설명","570":"/backend/project-structure/framework.html#_1-ai-서비스-ai","571":"/backend/project-structure/framework.html#_2-공통-기능-common","572":"/backend/project-structure/framework.html#_2-1-controller-common-controller","573":"/backend/project-structure/framework.html#_2-2-database-common-database","574":"/backend/project-structure/framework.html#_2-3-logging-common-logging","575":"/backend/project-structure/framework.html#_2-4-security-common-security","576":"/backend/project-structure/framework.html#_2-5-token-common-token","577":"/backend/project-structure/framework.html#_2-6-utils-common-utils","578":"/backend/project-structure/framework.html#_3-설정-클래스-config","579":"/backend/project-structure/framework.html#_3-1-axpdatasourceconfig","580":"/backend/project-structure/framework.html#_3-2-axpredisconfig","581":"/backend/project-structure/framework.html#_3-3-axpsecurityconfig","582":"/backend/project-structure/framework.html#_3-4-axpwebconfig","583":"/backend/project-structure/framework.html#_3-5-axpfilterconfig","584":"/backend/project-structure/framework.html#_4-필터-filter","585":"/backend/project-structure/framework.html#_4-1-auth-filter-filter-auth","586":"/backend/project-structure/framework.html#_4-2-logging-filter-filter-logging","587":"/backend/project-structure/framework.html#_4-3-security-filter-filter-security","588":"/backend/project-structure/framework.html#_5-파일-관리-file","589":"/backend/project-structure/framework.html#_6-메일-발송-mail","590":"/backend/project-structure/framework.html#_7-리포트-생성-report","591":"/backend/project-structure/framework.html#_8-sms-발송-sms","592":"/backend/project-structure/framework.html#공통-기능-사용법","593":"/backend/project-structure/framework.html#프로시저-호출","594":"/backend/project-structure/framework.html#redis-사용","595":"/backend/project-structure/framework.html#암호화","596":"/backend/project-structure/framework.html#다음-단계","597":"/backend/project-structure/framework/common.html#공통-기능-모듈","598":"/backend/project-structure/framework/common.html#모듈-구조","599":"/backend/project-structure/framework/common.html#주요-클래스","600":"/backend/project-structure/framework/common.html#_1-axpbasewebcontroller","601":"/backend/project-structure/framework/common.html#_2-axpcommdbservice","602":"/backend/project-structure/framework/common.html#_3-axpcommredisdbservice","603":"/backend/project-structure/framework/common.html#_4-axpcommauthservice","604":"/backend/project-structure/framework/common.html#_5-axpcommutil","605":"/backend/project-structure/framework/common.html#_6-암호화-유틸리티","606":"/backend/project-structure/framework/common.html#axpcommaes128","607":"/backend/project-structure/framework/common.html#axpcommrsa","608":"/backend/project-structure/framework/common.html#axpcommmd5util","609":"/backend/project-structure/framework/common.html#axpcommsha256util","610":"/backend/project-structure/framework/common.html#공통-상수","611":"/backend/project-structure/framework/common.html#axpcommconst","612":"/backend/project-structure/framework/common.html#다음-단계","613":"/backend/project-structure/framework/ai.html#ai-서비스-모듈","614":"/backend/project-structure/framework/ai.html#모듈-구조","615":"/backend/project-structure/framework/ai.html#주요-클래스","616":"/backend/project-structure/framework/ai.html#_1-axpaicontroller","617":"/backend/project-structure/framework/ai.html#_2-axpgeminiservice","618":"/backend/project-structure/framework/ai.html#_3-axpaiservice","619":"/backend/project-structure/framework/ai.html#설정","620":"/backend/project-structure/framework/ai.html#ai-설정-파일","621":"/backend/project-structure/framework/ai.html#application-yaml-설정","622":"/backend/project-structure/framework/ai.html#api-엔드포인트","623":"/backend/project-structure/framework/ai.html#post-api-ai-genai","624":"/backend/project-structure/framework/ai.html#사용-방법","625":"/backend/project-structure/framework/ai.html#_1-서비스에서-직접-사용","626":"/backend/project-structure/framework/ai.html#_2-컨트롤러에서-사용","627":"/backend/project-structure/framework/ai.html#의존성","628":"/backend/project-structure/framework/ai.html#maven-의존성","629":"/backend/project-structure/framework/ai.html#주의사항","630":"/backend/project-structure/framework/ai.html#다음-단계","631":"/backend/project-structure/framework/config.html#설정-클래스-모듈","632":"/backend/project-structure/framework/config.html#모듈-구조","633":"/backend/project-structure/framework/config.html#주요-설정-클래스","634":"/backend/project-structure/framework/config.html#_1-axpdatasourceconfig","635":"/backend/project-structure/framework/config.html#_2-axpredisconfig","636":"/backend/project-structure/framework/config.html#_3-axpsecurityconfig","637":"/backend/project-structure/framework/config.html#_4-axpwebconfig","638":"/backend/project-structure/framework/config.html#_5-axpfilterconfig","639":"/backend/project-structure/framework/config.html#_6-axpmybatisresultinterceptor","640":"/backend/project-structure/framework/config.html#설정-파일-위치","641":"/backend/project-structure/framework/config.html#application-yaml","642":"/backend/project-structure/framework/config.html#환경별-설정-파일","643":"/backend/project-structure/framework/config.html#설정-우선순위","644":"/backend/project-structure/framework/config.html#다음-단계","645":"/backend/project-structure/framework/file.html#파일-관리-모듈","646":"/backend/project-structure/framework/file.html#모듈-구조","647":"/backend/project-structure/framework/file.html#주요-클래스","648":"/backend/project-structure/framework/file.html#_1-axpfilecontroller","649":"/backend/project-structure/framework/file.html#_2-axpfileservice","650":"/backend/project-structure/framework/file.html#파일-처리-프로세스","651":"/backend/project-structure/framework/file.html#_1-파일-업로드","652":"/backend/project-structure/framework/file.html#_2-파일-다운로드","653":"/backend/project-structure/framework/file.html#파일-타입","654":"/backend/project-structure/framework/file.html#file-type","655":"/backend/project-structure/framework/file.html#변경-상태","656":"/backend/project-structure/framework/file.html#원본-상태","657":"/backend/project-structure/framework/file.html#설정","658":"/backend/project-structure/framework/file.html#application-yaml","659":"/backend/project-structure/framework/file.html#파일명-규칙","660":"/backend/project-structure/framework/file.html#서버-저장-파일명","661":"/backend/project-structure/framework/file.html#원본-파일명","662":"/backend/project-structure/framework/file.html#사용-예시","663":"/backend/project-structure/framework/file.html#파일-업로드","664":"/backend/project-structure/framework/file.html#파일-다운로드","665":"/backend/project-structure/framework/file.html#주의사항","666":"/backend/project-structure/framework/file.html#다음-단계","667":"/backend/project-structure/framework/filter.html#필터-클래스-모듈","668":"/backend/project-structure/framework/filter.html#모듈-구조","669":"/backend/project-structure/framework/filter.html#주요-필터","670":"/backend/project-structure/framework/filter.html#_1-axpxssfilter","671":"/backend/project-structure/framework/filter.html#_2-axpdecryptfilter","672":"/backend/project-structure/framework/filter.html#_3-axpjwtauthenticationfilter","673":"/backend/project-structure/framework/filter.html#_4-axpcorsloggingfilter","674":"/backend/project-structure/framework/filter.html#필터-등록","675":"/backend/project-structure/framework/filter.html#axpfilterconfig","676":"/backend/project-structure/framework/filter.html#필터-실행-순서","677":"/backend/project-structure/framework/filter.html#xss-유틸리티","678":"/backend/project-structure/framework/filter.html#axpxssutil","679":"/backend/project-structure/framework/filter.html#보안-정책-파일","680":"/backend/project-structure/framework/filter.html#antisamy-policy-xml","681":"/backend/project-structure/framework/filter.html#주의사항","682":"/backend/project-structure/framework/filter.html#다음-단계","683":"/backend/project-structure/framework/mail.html#메일-발송-모듈","684":"/backend/project-structure/framework/mail.html#모듈-구조","685":"/backend/project-structure/framework/mail.html#주요-클래스","686":"/backend/project-structure/framework/mail.html#_1-axpmailcontroller","687":"/backend/project-structure/framework/mail.html#_2-axpmailservice","688":"/backend/project-structure/framework/mail.html#_3-axpcommmailutil","689":"/backend/project-structure/framework/mail.html#spring-mail-설정","690":"/backend/project-structure/framework/mail.html#application-yaml","691":"/backend/project-structure/framework/mail.html#사용-방법","692":"/backend/project-structure/framework/mail.html#_1-javamailsender-사용","693":"/backend/project-structure/framework/mail.html#_2-html-이메일-발송","694":"/backend/project-structure/framework/mail.html#_3-첨부-파일-포함","695":"/backend/project-structure/framework/mail.html#메일-템플릿","696":"/backend/project-structure/framework/mail.html#thymeleaf-템플릿-사용-선택적","697":"/backend/project-structure/framework/mail.html#공통-유틸리티","698":"/backend/project-structure/framework/mail.html#axpcommmailutil","699":"/backend/project-structure/framework/mail.html#주의사항","700":"/backend/project-structure/framework/mail.html#다음-단계","701":"/backend/project-structure/framework/report.html#리포트-생성-모듈","702":"/backend/project-structure/framework/report.html#모듈-구조","703":"/backend/project-structure/framework/report.html#주요-클래스","704":"/backend/project-structure/framework/report.html#_1-axpreportcontroller","705":"/backend/project-structure/framework/report.html#_2-axpreportservice","706":"/backend/project-structure/framework/report.html#리포트-생성-프로세스","707":"/backend/project-structure/framework/report.html#_1-데이터-조회","708":"/backend/project-structure/framework/report.html#_2-리포트-파라미터-설정","709":"/backend/project-structure/framework/report.html#_3-리포트-컴파일-및-생성","710":"/backend/project-structure/framework/report.html#_4-pdf-내보내기","711":"/backend/project-structure/framework/report.html#리포트-템플릿-위치","712":"/backend/project-structure/framework/report.html#리포트-파라미터-규칙","713":"/backend/project-structure/framework/report.html#커서-파라미터","714":"/backend/project-structure/framework/report.html#일반-파라미터","715":"/backend/project-structure/framework/report.html#이미지-파라미터","716":"/backend/project-structure/framework/report.html#커서-변환","717":"/backend/project-structure/framework/report.html#한글-폰트","718":"/backend/project-structure/framework/report.html#지원-폰트","719":"/backend/project-structure/framework/report.html#폰트-위치","720":"/backend/project-structure/framework/report.html#사용-예시","721":"/backend/project-structure/framework/report.html#pdf-리포트-생성","722":"/backend/project-structure/framework/report.html#excel-리포트-다운로드","723":"/backend/project-structure/framework/report.html#주의사항","724":"/backend/project-structure/framework/report.html#다음-단계","725":"/backend/project-structure/framework/sms.html#sms-발송-모듈","726":"/backend/project-structure/framework/sms.html#모듈-구조","727":"/backend/project-structure/framework/sms.html#주요-클래스","728":"/backend/project-structure/framework/sms.html#_1-axpsmscontroller","729":"/backend/project-structure/framework/sms.html#_2-axpsmsservice","730":"/backend/project-structure/framework/sms.html#sms-발송-프로세스","731":"/backend/project-structure/framework/sms.html#_1-발송-정보-저장","732":"/backend/project-structure/framework/sms.html#_2-kt-cpaas-api-호출","733":"/backend/project-structure/framework/sms.html#발송-타입","734":"/backend/project-structure/framework/sms.html#rev-type","735":"/backend/project-structure/framework/sms.html#rev-type-value","736":"/backend/project-structure/framework/sms.html#메시지-타입","737":"/backend/project-structure/framework/sms.html#msg-type","738":"/backend/project-structure/framework/sms.html#메시지-상태","739":"/backend/project-structure/framework/sms.html#설정","740":"/backend/project-structure/framework/sms.html#application-yaml","741":"/backend/project-structure/framework/sms.html#사용-예시","742":"/backend/project-structure/framework/sms.html#즉시-발송","743":"/backend/project-structure/framework/sms.html#예약-발송","744":"/backend/project-structure/framework/sms.html#주의사항","745":"/backend/project-structure/framework/sms.html#다음-단계","746":"/backend/project-structure/resources.html#리소스-파일-구조","747":"/backend/project-structure/resources.html#디렉토리-구조","748":"/backend/project-structure/resources.html#설정-파일","749":"/backend/project-structure/resources.html#_1-application-yaml","750":"/backend/project-structure/resources.html#_2-config-디렉토리","751":"/backend/project-structure/resources.html#mybatis-매퍼","752":"/backend/project-structure/resources.html#mapper-디렉토리","753":"/backend/project-structure/resources.html#매퍼-파일-구조","754":"/backend/project-structure/resources.html#mapper-config-디렉토리","755":"/backend/project-structure/resources.html#리포트-템플릿","756":"/backend/project-structure/resources.html#report-디렉토리","757":"/backend/project-structure/resources.html#리포트-템플릿-작성","758":"/backend/project-structure/resources.html#외부-라이브러리","759":"/backend/project-structure/resources.html#lib-디렉토리","760":"/backend/project-structure/resources.html#보안-정책-파일","761":"/backend/project-structure/resources.html#antisamy-policy-xml","762":"/backend/project-structure/resources.html#로깅-설정","763":"/backend/project-structure/resources.html#logback-spring-xml","764":"/backend/project-structure/resources.html#배너","765":"/backend/project-structure/resources.html#banner-txt","766":"/backend/project-structure/resources.html#다음-단계","767":"/backend/references/classes.html#주요-클래스-참조","768":"/backend/references/classes.html#공통-컨트롤러","769":"/backend/references/classes.html#공통-서비스","770":"/backend/references/classes.html#설정-클래스","771":"/backend/references/classes.html#다음-단계","772":"/backend/references/config-files.html#설정-파일-참조","773":"/backend/references/config-files.html#설정-파일","774":"/backend/references/config-files.html#mybatis-설정","775":"/backend/references/config-files.html#다음-단계","776":"/backend/references/external-libs.html#외부-라이브러리-문서","777":"/backend/references/external-libs.html#spring-boot","778":"/backend/references/external-libs.html#mybatis","779":"/backend/references/external-libs.html#spring-security","780":"/backend/references/external-libs.html#jwt","781":"/backend/references/external-libs.html#jasperreports","782":"/backend/references/external-libs.html#apache-poi","783":"/backend/references/external-libs.html#redis","784":"/backend/security/encryption.html#암호화-유틸리티","785":"/backend/security/encryption.html#aes-128","786":"/backend/security/encryption.html#사용-예시","787":"/backend/security/encryption.html#용도","788":"/backend/security/encryption.html#rsa","789":"/backend/security/encryption.html#사용-예시-1","790":"/backend/security/encryption.html#설정","791":"/backend/security/encryption.html#해시-함수","792":"/backend/security/encryption.html#md5","793":"/backend/security/encryption.html#sha-256","794":"/backend/security/encryption.html#다음-단계","795":"/backend/security/filters.html#보안-필터","796":"/backend/security/filters.html#필터-실행-순서","797":"/backend/security/filters.html#xss-필터","798":"/backend/security/filters.html#axpxssfilter","799":"/backend/security/filters.html#설정","800":"/backend/security/filters.html#복호화-필터","801":"/backend/security/filters.html#axpdecryptfilter","802":"/backend/security/filters.html#jwt-인증-필터","803":"/backend/security/filters.html#axpjwtauthenticationfilter","804":"/backend/security/filters.html#rate-limiting","805":"/backend/security/filters.html#cors-로깅-필터","806":"/backend/security/filters.html#axpcorsloggingfilter","807":"/backend/security/filters.html#다음-단계","808":"/backend/security/jwt.html#jwt-인증","809":"/backend/security/jwt.html#토큰-타입","810":"/backend/security/jwt.html#access-token","811":"/backend/security/jwt.html#refresh-token","812":"/backend/security/jwt.html#토큰-생성","813":"/backend/security/jwt.html#토큰-검증","814":"/backend/security/jwt.html#토큰-재발급","815":"/backend/security/jwt.html#api-엔드포인트","816":"/backend/security/jwt.html#요청","817":"/backend/security/jwt.html#응답","818":"/backend/security/jwt.html#redis-토큰-저장","819":"/backend/security/jwt.html#다음-단계","820":"/backend/security/spring-security.html#spring-security-설정","821":"/backend/security/spring-security.html#securityfilterchain","822":"/backend/security/spring-security.html#기본-설정","823":"/backend/security/spring-security.html#제외-uri-설정","824":"/backend/security/spring-security.html#보안-헤더","825":"/backend/security/spring-security.html#content-security-policy","826":"/backend/security/spring-security.html#x-frame-options","827":"/backend/security/spring-security.html#기타-보안-헤더","828":"/backend/security/spring-security.html#예외-처리","829":"/backend/security/spring-security.html#accessdeniedhandler","830":"/backend/security/spring-security.html#authenticationentrypoint","831":"/backend/security/spring-security.html#다음-단계","832":"/backend/tech-stack/databases.html#데이터베이스","833":"/backend/tech-stack/databases.html#지원-데이터베이스","834":"/backend/tech-stack/databases.html#_1-tibero6-기본값","835":"/backend/tech-stack/databases.html#_2-oracle","836":"/backend/tech-stack/databases.html#_3-postgresql","837":"/backend/tech-stack/databases.html#데이터소스-설정","838":"/backend/tech-stack/databases.html#axpdatasourceconfig","839":"/backend/tech-stack/databases.html#hikaricp-커넥션-풀","840":"/backend/tech-stack/databases.html#tibero-설정","841":"/backend/tech-stack/databases.html#postgresql-설정","842":"/backend/tech-stack/databases.html#mybatis-설정","843":"/backend/tech-stack/databases.html#db별-설정-파일","844":"/backend/tech-stack/databases.html#매퍼-파일-위치","845":"/backend/tech-stack/databases.html#프로시저-호출","846":"/backend/tech-stack/databases.html#공통-프로시저-호출-서비스","847":"/backend/tech-stack/databases.html#db별-프로시저-호출","848":"/backend/tech-stack/databases.html#redis-valkey-호환","849":"/backend/tech-stack/databases.html#용도","850":"/backend/tech-stack/databases.html#설정","851":"/backend/tech-stack/databases.html#redistemplate","852":"/backend/tech-stack/databases.html#다음-단계","853":"/backend/tech-stack/documentation.html#문서화-및-api","854":"/backend/tech-stack/documentation.html#springdoc-openapi","855":"/backend/tech-stack/documentation.html#버전","856":"/backend/tech-stack/documentation.html#기능","857":"/backend/tech-stack/documentation.html#접근-url","858":"/backend/tech-stack/documentation.html#api-문서-자동-생성","859":"/backend/tech-stack/documentation.html#컨트롤러-어노테이션","860":"/backend/tech-stack/documentation.html#주요-어노테이션","861":"/backend/tech-stack/documentation.html#tag","862":"/backend/tech-stack/documentation.html#operation","863":"/backend/tech-stack/documentation.html#parameter","864":"/backend/tech-stack/documentation.html#apiresponse","865":"/backend/tech-stack/documentation.html#openapi-스펙","866":"/backend/tech-stack/documentation.html#json-형식","867":"/backend/tech-stack/documentation.html#yaml-형식","868":"/backend/tech-stack/documentation.html#문서-커스터마이징","869":"/backend/tech-stack/documentation.html#기본-정보-설정","870":"/backend/tech-stack/documentation.html#그룹-설정","871":"/backend/tech-stack/documentation.html#api-테스트","872":"/backend/tech-stack/documentation.html#swagger-ui에서-테스트","873":"/backend/tech-stack/documentation.html#인증-설정","874":"/backend/tech-stack/documentation.html#다음-단계","875":"/backend/tech-stack/file-processing.html#파일-처리","876":"/backend/tech-stack/file-processing.html#apache-poi","877":"/backend/tech-stack/file-processing.html#버전","878":"/backend/tech-stack/file-processing.html#기능","879":"/backend/tech-stack/file-processing.html#사용-예시","880":"/backend/tech-stack/file-processing.html#jxls","881":"/backend/tech-stack/file-processing.html#버전-1","882":"/backend/tech-stack/file-processing.html#기능-1","883":"/backend/tech-stack/file-processing.html#사용-예시-1","884":"/backend/tech-stack/file-processing.html#jasperreports","885":"/backend/tech-stack/file-processing.html#버전-2","886":"/backend/tech-stack/file-processing.html#기능-2","887":"/backend/tech-stack/file-processing.html#리포트-템플릿","888":"/backend/tech-stack/file-processing.html#리포트-생성","889":"/backend/tech-stack/file-processing.html#한글-폰트-설정","890":"/backend/tech-stack/file-processing.html#파일-업로드","891":"/backend/tech-stack/file-processing.html#multipartfile","892":"/backend/tech-stack/file-processing.html#파일-크기-제한","893":"/backend/tech-stack/file-processing.html#파일-다운로드","894":"/backend/tech-stack/file-processing.html#responseentity-사용","895":"/backend/tech-stack/file-processing.html#파일-유틸리티","896":"/backend/tech-stack/file-processing.html#axpcommfileutil","897":"/backend/tech-stack/file-processing.html#mime-타입-감지","898":"/backend/tech-stack/file-processing.html#jmimemagic","899":"/backend/tech-stack/file-processing.html#다음-단계","900":"/backend/tech-stack/frameworks.html#프레임워크-및-라이브러리","901":"/backend/tech-stack/frameworks.html#spring-boot","902":"/backend/tech-stack/frameworks.html#버전","903":"/backend/tech-stack/frameworks.html#주요-모듈","904":"/backend/tech-stack/frameworks.html#spring-boot-starter-web","905":"/backend/tech-stack/frameworks.html#spring-boot-starter-aop","906":"/backend/tech-stack/frameworks.html#spring-session","907":"/backend/tech-stack/frameworks.html#mybatis","908":"/backend/tech-stack/frameworks.html#버전-1","909":"/backend/tech-stack/frameworks.html#특징","910":"/backend/tech-stack/frameworks.html#설정","911":"/backend/tech-stack/frameworks.html#lombok","912":"/backend/tech-stack/frameworks.html#버전-2","913":"/backend/tech-stack/frameworks.html#주요-기능","914":"/backend/tech-stack/frameworks.html#사용-예시","915":"/backend/tech-stack/frameworks.html#spring-security","916":"/backend/tech-stack/frameworks.html#버전-3","917":"/backend/tech-stack/frameworks.html#주요-기능-1","918":"/backend/tech-stack/frameworks.html#설정-위치","919":"/backend/tech-stack/frameworks.html#springdoc-openapi","920":"/backend/tech-stack/frameworks.html#버전-4","921":"/backend/tech-stack/frameworks.html#기능","922":"/backend/tech-stack/frameworks.html#jackson","923":"/backend/tech-stack/frameworks.html#기능-1","924":"/backend/tech-stack/frameworks.html#설정-1","925":"/backend/tech-stack/frameworks.html#apache-commons","926":"/backend/tech-stack/frameworks.html#주요-라이브러리","927":"/backend/tech-stack/frameworks.html#commons-io","928":"/backend/tech-stack/frameworks.html#commons-codec","929":"/backend/tech-stack/frameworks.html#commons-lang3","930":"/backend/tech-stack/frameworks.html#jwt-json-web-token","931":"/backend/tech-stack/frameworks.html#버전-5","932":"/backend/tech-stack/frameworks.html#모듈","933":"/backend/tech-stack/frameworks.html#사용-예시-1","934":"/backend/tech-stack/frameworks.html#owasp-antisamy","935":"/backend/tech-stack/frameworks.html#버전-6","936":"/backend/tech-stack/frameworks.html#기능-2","937":"/backend/tech-stack/frameworks.html#다음-단계","938":"/backend/tech-stack/security.html#보안-및-인증","939":"/backend/tech-stack/security.html#jwt-json-web-token","940":"/backend/tech-stack/security.html#버전","941":"/backend/tech-stack/security.html#토큰-타입","942":"/backend/tech-stack/security.html#access-token","943":"/backend/tech-stack/security.html#refresh-token","944":"/backend/tech-stack/security.html#토큰-생성","945":"/backend/tech-stack/security.html#토큰-검증","946":"/backend/tech-stack/security.html#설정","947":"/backend/tech-stack/security.html#spring-security","948":"/backend/tech-stack/security.html#securityfilterchain","949":"/backend/tech-stack/security.html#제외-uri-설정","950":"/backend/tech-stack/security.html#jwt-제외-uri-설정","951":"/backend/tech-stack/security.html#jwt-인증-필터","952":"/backend/tech-stack/security.html#axpjwtauthenticationfilter","953":"/backend/tech-stack/security.html#rate-limiting","954":"/backend/tech-stack/security.html#암호화","955":"/backend/tech-stack/security.html#aes-128","956":"/backend/tech-stack/security.html#rsa","957":"/backend/tech-stack/security.html#해시-함수","958":"/backend/tech-stack/security.html#md5","959":"/backend/tech-stack/security.html#sha-256","960":"/backend/tech-stack/security.html#xss-방지","961":"/backend/tech-stack/security.html#owasp-antisamy","962":"/backend/tech-stack/security.html#정책-파일","963":"/backend/tech-stack/security.html#xss-필터","964":"/backend/tech-stack/security.html#보안-헤더","965":"/backend/tech-stack/security.html#다음-단계","966":"/backend/tech-stack/utilities.html#기타-유틸리티","967":"/backend/tech-stack/utilities.html#jsoup","968":"/backend/tech-stack/utilities.html#버전","969":"/backend/tech-stack/utilities.html#기능","970":"/backend/tech-stack/utilities.html#사용-예시","971":"/backend/tech-stack/utilities.html#juniversalchardet","972":"/backend/tech-stack/utilities.html#버전-1","973":"/backend/tech-stack/utilities.html#기능-1","974":"/backend/tech-stack/utilities.html#사용-예시-1","975":"/backend/tech-stack/utilities.html#google-genai-sdk","976":"/backend/tech-stack/utilities.html#버전-2","977":"/backend/tech-stack/utilities.html#기능-2","978":"/backend/tech-stack/utilities.html#사용-예시-2","979":"/backend/tech-stack/utilities.html#commons-beanutils","980":"/backend/tech-stack/utilities.html#버전-3","981":"/backend/tech-stack/utilities.html#기능-3","982":"/backend/tech-stack/utilities.html#사용-예시-3","983":"/backend/tech-stack/utilities.html#commons-collections","984":"/backend/tech-stack/utilities.html#버전-4","985":"/backend/tech-stack/utilities.html#기능-4","986":"/backend/tech-stack/utilities.html#사용-예시-4","987":"/backend/tech-stack/utilities.html#다음-단계","988":"/backend/testing/unit-test.html#단위-테스트","989":"/backend/testing/unit-test.html#기본-구조","990":"/backend/testing/unit-test.html#다음-단계","991":"/backend/troubleshooting/logging.html#로그-확인","992":"/backend/troubleshooting/logging.html#로그-파일-위치","993":"/backend/troubleshooting/logging.html#로그-레벨-설정","994":"/backend/troubleshooting/logging.html#다음-단계","995":"/backend/testing/integration-test.html#통합-테스트","996":"/backend/testing/integration-test.html#기본-구조","997":"/backend/testing/integration-test.html#다음-단계","998":"/backend/troubleshooting/common-issues.html#일반적인-문제-해결","999":"/backend/troubleshooting/common-issues.html#포트-충돌","1000":"/backend/troubleshooting/common-issues.html#데이터베이스-연결-실패","1001":"/backend/troubleshooting/common-issues.html#redis-연결-실패","1002":"/backend/troubleshooting/common-issues.html#다음-단계","1003":"/components/common/button.html#버튼-컴포넌트","1004":"/components/common/button.html#buttonbox","1005":"/components/common/button.html#파일-위치","1006":"/components/common/button.html#사용-예제","1007":"/components/common/button.html#vuetify-버튼","1008":"/components/common/input.html#입력-컴포넌트","1009":"/components/common/input.html#inputphone","1010":"/components/common/input.html#파일-위치","1011":"/components/common/input.html#사용-예제","1012":"/components/common/input.html#vuetify-입력","1013":"/components/common/loading.html#로딩-컴포넌트","1014":"/components/common/loading.html#loading","1015":"/components/common/loading.html#파일-위치","1016":"/components/common/loading.html#사용-예제","1017":"/components/common/lookup.html#조회-컴포넌트-lookup","1018":"/components/common/lookup.html#lookupbox","1019":"/components/common/lookup.html#파일-위치","1020":"/components/common/lookup.html#사용-예제","1021":"/components/common/select.html#선택-컴포넌트","1022":"/components/common/select.html#개요","1023":"/components/common/select.html#selectboxsql","1024":"/components/common/select.html#개요-1","1025":"/components/common/select.html#파일-위치","1026":"/components/common/select.html#props","1027":"/components/common/select.html#사용-예제","1028":"/components/common/select.html#실제-컴포넌트","1029":"/components/common/select.html#api-연동-예제","1030":"/components/common/select.html#multiselectboxsql","1031":"/components/common/select.html#개요-2","1032":"/components/common/select.html#파일-위치-1","1033":"/components/common/select.html#props-1","1034":"/components/common/select.html#columns-정의","1035":"/components/common/select.html#사용-예제-1","1036":"/components/common/select.html#콜백-함수-사용","1037":"/components/common/select.html#selectboxdate","1038":"/components/common/select.html#개요-3","1039":"/components/common/select.html#파일-위치-2","1040":"/components/common/select.html#사용-예제-2","1041":"/components/common/select.html#ag-grid에서-사용하기","1042":"/components/common/select.html#gridmultiselectwrapper","1043":"/components/common/select.html#사용-예제-3","1044":"/components/common/select.html#스타일-커스터마이징","1045":"/components/common/select.html#주의사항","1046":"/components/common/select.html#관련-문서","1047":"/components/common/tree.html#트리-컴포넌트","1048":"/components/common/tree.html#treedeptdropdown","1049":"/components/common/tree.html#파일-위치","1050":"/components/common/tree.html#treeempdropdown","1051":"/components/common/tree.html#파일-위치-1","1052":"/components/common/tree.html#treeorgnode","1053":"/components/common/tree.html#파일-위치-2","1054":"/components/grid/ag-grid.html#ag-grid-래퍼","1055":"/components/grid/ag-grid.html#개요","1056":"/components/grid/ag-grid.html#기본-사용","1057":"/components/grid/ag-grid.html#셀-에디터","1058":"/components/grid/click-field.html#그리드-클릭-필드","1059":"/components/grid/click-field.html#gridclickfield","1060":"/components/grid/click-field.html#개요","1061":"/components/grid/click-field.html#파일-위치","1062":"/components/grid/click-field.html#주요-기능","1063":"/components/grid/click-field.html#사용-예제","1064":"/components/grid/click-field.html#props","1065":"/components/grid/context-menu.html#그리드-컨텍스트-메뉴","1066":"/components/grid/context-menu.html#gridcontextmenu","1067":"/components/grid/context-menu.html#개요","1068":"/components/grid/context-menu.html#파일-위치","1069":"/components/grid/context-menu.html#주요-기능","1070":"/components/grid/context-menu.html#컬럼-헤더-컨텍스트-메뉴","1071":"/components/grid/context-menu.html#셀-컨텍스트-메뉴","1072":"/components/grid/context-menu.html#사용-예제","1073":"/components/grid/context-menu.html#컨텍스트-메뉴-스토어","1074":"/components/grid/multi-select.html#멀티-선택-그리드","1075":"/components/grid/multi-select.html#gridmultiselectwrapper","1076":"/components/grid/multi-select.html#파일-위치","1077":"/components/grid/multi-select.html#사용-예제","1078":"/components/layouts/blank.html#블랭크-레이아웃","1079":"/components/layouts/blank.html#blank-vue","1080":"/components/layouts/blank.html#개요","1081":"/components/layouts/blank.html#파일-위치","1082":"/components/layouts/blank.html#특징","1083":"/components/layouts/blank.html#사용-예제","1084":"/components/layouts/main.html#메인-레이아웃","1085":"/components/layouts/main.html#main-vue","1086":"/components/layouts/main.html#개요","1087":"/components/layouts/main.html#파일-위치","1088":"/components/layouts/main.html#주요-구성-요소","1089":"/components/layouts/main.html#레이아웃-구조","1090":"/components/layouts/main.html#탭-관리","1091":"/components/layouts/main.html#사용-예제","1092":"/components/layouts/popup.html#팝업-레이아웃","1093":"/components/layouts/popup.html#popblank-vue","1094":"/components/layouts/popup.html#개요","1095":"/components/layouts/popup.html#파일-위치","1096":"/components/layouts/popup.html#특징","1097":"/components/layouts/popup.html#동적-컴포넌트-로드","1098":"/components/layouts/popup.html#사용-예제","1099":"/components/layouts/popup.html#팝업-열기","1100":"/components/menu/bookmark.html#북마크-메뉴","1101":"/components/menu/bookmark.html#menubmk","1102":"/components/menu/bookmark.html#개요","1103":"/components/menu/bookmark.html#파일-위치","1104":"/components/menu/bookmark.html#주요-기능","1105":"/components/menu/bookmark.html#사용-예제","1106":"/components/menu/bookmark.html#드래그-앤-드롭","1107":"/components/menu/header-bar.html#메뉴-헤더바","1108":"/components/menu/header-bar.html#menuheaderbar","1109":"/components/menu/header-bar.html#개요","1110":"/components/menu/header-bar.html#파일-위치","1111":"/components/menu/header-bar.html#주요-기능","1112":"/components/menu/header-bar.html#사용-예제","1113":"/components/menu/header-bar.html#메뉴-구조","1114":"/components/menu/sidebar.html#사이드바-메뉴","1115":"/components/menu/sidebar.html#menusidebar","1116":"/components/menu/sidebar.html#개요","1117":"/components/menu/sidebar.html#파일-위치","1118":"/components/menu/sidebar.html#주요-기능","1119":"/components/menu/sidebar.html#사용-예제","1120":"/components/menu/sidebar.html#메뉴-구조","1121":"/components/menu/sidebar.html#즐겨찾기","1122":"/components/popup/approval-list.html#승인-목록-팝업","1123":"/components/popup/approval-list.html#popupapprovelist","1124":"/components/popup/approval-list.html#개요","1125":"/components/popup/approval-list.html#파일-위치","1126":"/components/popup/approval-list.html#사용-예제","1127":"/components/popup/approval-list.html#props","1128":"/components/popup/approval.html#승인-팝업","1129":"/components/popup/approval.html#popupapproval","1130":"/components/popup/approval.html#파일-위치","1131":"/components/popup/approval.html#popupapprovalbox","1132":"/components/popup/approval.html#파일-위치-1","1133":"/components/popup/approval.html#popupapprovelist","1134":"/components/popup/approval.html#파일-위치-2","1135":"/components/popup/file-link.html#파일-링크-팝업","1136":"/components/popup/file-link.html#popupfilelink","1137":"/components/popup/file-link.html#개요","1138":"/components/popup/file-link.html#파일-위치","1139":"/components/popup/file-link.html#주요-기능","1140":"/components/popup/file-link.html#사용-예제","1141":"/components/popup/log.html#로그-팝업","1142":"/components/popup/log.html#popuplog","1143":"/components/popup/log.html#파일-위치","1144":"/components/popup/log.html#popuppagelog","1145":"/components/popup/log.html#파일-위치-1","1146":"/components/popup/page-log.html#페이지-로그-팝업","1147":"/components/popup/page-log.html#popuppagelog","1148":"/components/popup/page-log.html#개요","1149":"/components/popup/page-log.html#파일-위치","1150":"/components/popup/page-log.html#주요-기능","1151":"/components/popup/page-log.html#사용-예제","1152":"/components/popup/sms-template.html#sms-템플릿-팝업","1153":"/components/popup/sms-template.html#popupsmstemplatelist","1154":"/components/popup/sms-template.html#개요","1155":"/components/popup/sms-template.html#파일-위치","1156":"/components/popup/sms-template.html#주요-기능","1157":"/components/popup/sms-template.html#사용-예제","1158":"/configuration/alias.html#경로-별칭-alias","1159":"/configuration/alias.html#개요","1160":"/configuration/alias.html#설정-위치","1161":"/configuration/alias.html#주요-별칭","1162":"/configuration/alias.html#사용-예제","1163":"/configuration/alias.html#jsconfig-json","1164":"/configuration/alias.html#주의사항","1165":"/configuration/env.html#환경-변수-env","1166":"/configuration/env.html#개요","1167":"/configuration/env.html#환경-변수-파일","1168":"/configuration/env.html#필수-환경-변수","1169":"/configuration/env.html#환경-변수-사용","1170":"/configuration/env.html#환경별-설정","1171":"/configuration/env.html#개발-환경-env-development","1172":"/configuration/env.html#프로덕션-환경-env-production","1173":"/configuration/env.html#주의사항","1174":"/configuration/build.html#빌드-설정","1175":"/configuration/build.html#개요","1176":"/configuration/build.html#설정-위치","1177":"/configuration/build.html#빌드-옵션","1178":"/configuration/build.html#chunksizewarninglimit","1179":"/configuration/build.html#빌드-명령어","1180":"/configuration/build.html#개발-빌드","1181":"/configuration/build.html#스테이징-빌드","1182":"/configuration/build.html#프로덕션-빌드","1183":"/configuration/build.html#빌드-결과물","1184":"/configuration/build.html#빌드-최적화","1185":"/configuration/build.html#환경별-빌드","1186":"/configuration/proxy.html#프록시-설정","1187":"/configuration/proxy.html#개요","1188":"/configuration/proxy.html#설정-위치","1189":"/configuration/proxy.html#프록시-설정-1","1190":"/configuration/proxy.html#프록시-경로","1191":"/configuration/proxy.html#api","1192":"/configuration/proxy.html#auth","1193":"/configuration/proxy.html#files","1194":"/configuration/proxy.html#사용-예제","1195":"/configuration/proxy.html#주의사항","1196":"/configuration/vite.html#vite-설정","1197":"/configuration/vite.html#개요","1198":"/configuration/vite.html#주요-설정","1199":"/configuration/vite.html#플러그인","1200":"/configuration/vite.html#서버-설정","1201":"/configuration/vite.html#경로-별칭","1202":"/configuration/vite.html#환경-변수","1203":"/configuration/vite.html#빌드-설정","1204":"/configuration/vite.html#자동-임포트-설정","1205":"/configuration/vite.html#autoimport","1206":"/configuration/vite.html#components","1207":"/core-features/auth/encryption.html#암호화-복호화","1208":"/core-features/auth/encryption.html#개요","1209":"/core-features/auth/encryption.html#암호화-설정","1210":"/core-features/auth/encryption.html#요청-암호화","1211":"/core-features/auth/encryption.html#일반-요청-json","1212":"/core-features/auth/encryption.html#파일-업로드-formdata","1213":"/core-features/auth/encryption.html#응답-복호화","1214":"/core-features/auth/encryption.html#암호화-함수","1215":"/core-features/auth/encryption.html#encryptobject-data","1216":"/core-features/auth/encryption.html#decryptobject-data","1217":"/core-features/auth/encryption.html#encryptbinary-bytes-file","1218":"/core-features/auth/encryption.html#사용-예제","1219":"/core-features/auth/encryption.html#암호화-활성화","1220":"/core-features/auth/encryption.html#수동-암호화-복호화","1221":"/core-features/auth/encryption.html#주의사항","1222":"/core-features/auth/encryption.html#관련-문서","1223":"/core-features/auth/jwt.html#jwt-인증","1224":"/core-features/auth/jwt.html#개요","1225":"/core-features/auth/jwt.html#토큰-구조","1226":"/core-features/auth/jwt.html#access-token","1227":"/core-features/auth/jwt.html#refresh-token","1228":"/core-features/auth/jwt.html#인증-흐름","1229":"/core-features/auth/jwt.html#_1-로그인","1230":"/core-features/auth/jwt.html#_2-api-요청","1231":"/core-features/auth/jwt.html#_3-토큰-갱신","1232":"/core-features/auth/jwt.html#토큰-관리","1233":"/core-features/auth/jwt.html#access-token-설정","1234":"/core-features/auth/jwt.html#access-token-초기화","1235":"/core-features/auth/jwt.html#인증-상태-확인","1236":"/core-features/auth/jwt.html#보안-고려사항","1237":"/core-features/auth/jwt.html#관련-문서","1238":"/core-features/auth/session.html#세션-관리","1239":"/core-features/auth/session.html#개요","1240":"/core-features/auth/session.html#세션-데이터-구조","1241":"/core-features/auth/session.html#주요-메서드","1242":"/core-features/auth/session.html#setsessiondata-data","1243":"/core-features/auth/session.html#setsessionkey-key-value","1244":"/core-features/auth/session.html#getsessionvalue-key","1245":"/core-features/auth/session.html#getsessionvalues-keys","1246":"/core-features/auth/session.html#removesessionkey-key","1247":"/core-features/auth/session.html#clearsessiondata","1248":"/core-features/auth/session.html#로그인-시-세션-설정","1249":"/core-features/auth/session.html#로그아웃-시-세션-초기화","1250":"/core-features/auth/session.html#세션-데이터-사용","1251":"/core-features/auth/session.html#세션-영속화","1252":"/core-features/auth/session.html#주의사항","1253":"/core-features/auth/session.html#관련-문서","1254":"/core-features/auth/token-refresh.html#토큰-갱신","1255":"/core-features/auth/token-refresh.html#개요","1256":"/core-features/auth/token-refresh.html#자동-갱신-메커니즘","1257":"/core-features/auth/token-refresh.html#갱신-프로세스","1258":"/core-features/auth/token-refresh.html#_1-401-419-에러-감지","1259":"/core-features/auth/token-refresh.html#_2-refresh-token으로-새-토큰-요청","1260":"/core-features/auth/token-refresh.html#_3-원래-요청-재시도","1261":"/core-features/auth/token-refresh.html#동시-요청-처리","1262":"/core-features/auth/token-refresh.html#갱신-실패-처리","1263":"/core-features/auth/token-refresh.html#수동-갱신","1264":"/core-features/auth/token-refresh.html#주의사항","1265":"/core-features/auth/token-refresh.html#관련-문서","1266":"/core-features/http/axios-instance.html#axios-인스턴스-설정","1267":"/core-features/http/axios-instance.html#개요","1268":"/core-features/http/axios-instance.html#파일-위치","1269":"/core-features/http/axios-instance.html#기본-설정","1270":"/core-features/http/axios-instance.html#주요-설정-항목","1271":"/core-features/http/axios-instance.html#요청-인터셉터","1272":"/core-features/http/axios-instance.html#주요-기능","1273":"/core-features/http/axios-instance.html#코드-예제","1274":"/core-features/http/axios-instance.html#응답-인터셉터","1275":"/core-features/http/axios-instance.html#주요-기능-1","1276":"/core-features/http/axios-instance.html#토큰-갱신-로직","1277":"/core-features/http/axios-instance.html#사용-방법","1278":"/core-features/http/axios-instance.html#기본-사용","1279":"/core-features/http/axios-instance.html#응답-처리","1280":"/core-features/http/axios-instance.html#파일-업로드","1281":"/core-features/http/axios-instance.html#파일-다운로드","1282":"/core-features/http/axios-instance.html#암호화-복호화","1283":"/core-features/http/axios-instance.html#암호화-설정","1284":"/core-features/http/axios-instance.html#formdata-암호화","1285":"/core-features/http/axios-instance.html#에러-처리","1286":"/core-features/http/axios-instance.html#타임아웃-에러","1287":"/core-features/http/axios-instance.html#_429-에러-too-many-requests","1288":"/core-features/http/axios-instance.html#기타-에러","1289":"/core-features/http/axios-instance.html#주의사항","1290":"/core-features/http/axios-instance.html#관련-문서","1291":"/core-features/http/request-interceptor.html#요청-인터셉터","1292":"/core-features/http/request-interceptor.html#개요","1293":"/core-features/http/request-interceptor.html#주요-기능","1294":"/core-features/http/request-interceptor.html#_1-로딩-표시","1295":"/core-features/http/request-interceptor.html#_2-jwt-토큰-추가","1296":"/core-features/http/request-interceptor.html#_3-암호화-헤더-추가","1297":"/core-features/http/request-interceptor.html#_4-요청-로그-저장","1298":"/core-features/http/request-interceptor.html#_5-데이터-암호화","1299":"/core-features/http/request-interceptor.html#formdata-처리","1300":"/core-features/http/request-interceptor.html#타임스탬프-추가","1301":"/core-features/http/request-interceptor.html#원본-데이터-저장","1302":"/core-features/http/request-interceptor.html#에러-처리","1303":"/core-features/http/request-interceptor.html#사용-예제","1304":"/core-features/http/request-interceptor.html#관련-문서","1305":"/core-features/http/error-handling.html#에러-처리","1306":"/core-features/http/error-handling.html#개요","1307":"/core-features/http/error-handling.html#에러-타입별-처리","1308":"/core-features/http/error-handling.html#_1-401-419-에러-인증-실패","1309":"/core-features/http/error-handling.html#_2-429-에러-too-many-requests","1310":"/core-features/http/error-handling.html#_3-타임아웃-에러","1311":"/core-features/http/error-handling.html#_4-404-에러-silent-처리","1312":"/core-features/http/error-handling.html#_5-기타-에러","1313":"/core-features/http/error-handling.html#에러-로그-기록","1314":"/core-features/http/error-handling.html#커스텀-에러-처리","1315":"/core-features/http/error-handling.html#에러-메시지-표시","1316":"/core-features/http/error-handling.html#alert-사용","1317":"/core-features/http/error-handling.html#커스텀-알림-사용","1318":"/core-features/http/error-handling.html#재시도-로직","1319":"/core-features/http/error-handling.html#에러-타입-확인","1320":"/core-features/http/error-handling.html#베스트-프랙티스","1321":"/core-features/http/error-handling.html#관련-문서","1322":"/core-features/http/response-interceptor.html#응답-인터셉터","1323":"/core-features/http/response-interceptor.html#개요","1324":"/core-features/http/response-interceptor.html#성공-응답-처리","1325":"/core-features/http/response-interceptor.html#_1-로딩-숨김","1326":"/core-features/http/response-interceptor.html#_2-파일-다운로드-처리","1327":"/core-features/http/response-interceptor.html#_3-응답-데이터-반환","1328":"/core-features/http/response-interceptor.html#에러-응답-처리","1329":"/core-features/http/response-interceptor.html#_1-로딩-숨김-1","1330":"/core-features/http/response-interceptor.html#_2-로그-에러-표시","1331":"/core-features/http/response-interceptor.html#_3-429-에러-처리-too-many-requests","1332":"/core-features/http/response-interceptor.html#_4-401-419-에러-처리-토큰-갱신","1333":"/core-features/http/response-interceptor.html#_5-타임아웃-에러-처리","1334":"/core-features/http/response-interceptor.html#_6-기타-에러-처리","1335":"/core-features/http/response-interceptor.html#토큰-갱신-로직","1336":"/core-features/http/response-interceptor.html#동시-요청-처리","1337":"/core-features/http/response-interceptor.html#토큰-갱신-요청","1338":"/core-features/http/response-interceptor.html#silent-에러-처리","1339":"/core-features/http/response-interceptor.html#응답-데이터-구조","1340":"/core-features/http/response-interceptor.html#사용-예제","1341":"/core-features/http/response-interceptor.html#성공-응답-처리-1","1342":"/core-features/http/response-interceptor.html#파일-다운로드","1343":"/core-features/http/response-interceptor.html#관련-문서","1344":"/core-features/routing/dynamic.html#동적-라우팅","1345":"/core-features/routing/dynamic.html#개요","1346":"/core-features/routing/dynamic.html#동적-라우트-등록","1347":"/core-features/routing/dynamic.html#메뉴-데이터-구조","1348":"/core-features/routing/dynamic.html#라우트-변환","1349":"/core-features/routing/dynamic.html#동적-컴포넌트-로드","1350":"/core-features/routing/dynamic.html#메뉴-스토어-연동","1351":"/core-features/routing/dynamic.html#사용-예제","1352":"/core-features/routing/dynamic.html#동적-라우트-접근","1353":"/core-features/routing/dynamic.html#주의사항","1354":"/core-features/routing/dynamic.html#관련-문서","1355":"/core-features/routing/guards.html#라우트-가드","1356":"/core-features/routing/guards.html#개요","1357":"/core-features/routing/guards.html#beforeeach-가드","1358":"/core-features/routing/guards.html#현재-구현","1359":"/core-features/routing/guards.html#기능","1360":"/core-features/routing/guards.html#인증-가드-예제","1361":"/core-features/routing/guards.html#aftereach-가드","1362":"/core-features/routing/guards.html#메타-필드","1363":"/core-features/routing/guards.html#관련-문서","1364":"/core-features/routing/routes.html#라우트-설정","1365":"/core-features/routing/routes.html#개요","1366":"/core-features/routing/routes.html#기본-라우트-구조","1367":"/core-features/routing/routes.html#라우트-추가","1368":"/core-features/routing/routes.html#정적-라우트","1369":"/core-features/routing/routes.html#동적-라우트","1370":"/core-features/routing/routes.html#라우트-매핑-규칙","1371":"/core-features/routing/routes.html#레이아웃","1372":"/core-features/routing/routes.html#blank-레이아웃","1373":"/core-features/routing/routes.html#main-레이아웃","1374":"/core-features/routing/routes.html#popup-레이아웃","1375":"/core-features/routing/routes.html#관련-문서","1376":"/core-features/stores/auth.html#인증-스토어-authstore","1377":"/core-features/stores/auth.html#개요","1378":"/core-features/stores/auth.html#파일-위치","1379":"/core-features/stores/auth.html#상태-state","1380":"/core-features/stores/auth.html#accesstoken","1381":"/core-features/stores/auth.html#액션-actions","1382":"/core-features/stores/auth.html#setaccesstoken-token","1383":"/core-features/stores/auth.html#clearaccesstoken","1384":"/core-features/stores/auth.html#게터-getters","1385":"/core-features/stores/auth.html#isauthenticated","1386":"/core-features/stores/auth.html#사용-예제","1387":"/core-features/stores/auth.html#로그인-처리","1388":"/core-features/stores/auth.html#로그아웃-처리","1389":"/core-features/stores/auth.html#인증-상태-확인","1390":"/core-features/stores/auth.html#주의사항","1391":"/core-features/stores/auth.html#관련-문서","1392":"/core-features/stores/loading.html#로딩-스토어-loadingstore","1393":"/core-features/stores/loading.html#개요","1394":"/core-features/stores/loading.html#파일-위치","1395":"/core-features/stores/loading.html#상태-state","1396":"/core-features/stores/loading.html#액션-actions","1397":"/core-features/stores/loading.html#showloading","1398":"/core-features/stores/loading.html#hideloading","1399":"/core-features/stores/loading.html#사용-예제","1400":"/core-features/stores/loading.html#주의사항","1401":"/core-features/stores/log.html#로그-스토어-logstore","1402":"/core-features/stores/log.html#개요","1403":"/core-features/stores/log.html#파일-위치","1404":"/core-features/stores/log.html#상태-state","1405":"/core-features/stores/log.html#주요-액션","1406":"/core-features/stores/log.html#togglelogyn","1407":"/core-features/stores/log.html#addlogdata-config-menudata","1408":"/core-features/stores/log.html#clearlogdata","1409":"/core-features/stores/log.html#로그-구조","1410":"/core-features/stores/log.html#사용-예제","1411":"/core-features/stores/log.html#주의사항","1412":"/core-features/stores/menu.html#메뉴-스토어-menustore","1413":"/core-features/stores/menu.html#개요","1414":"/core-features/stores/menu.html#파일-위치","1415":"/core-features/stores/menu.html#상태-state","1416":"/core-features/stores/menu.html#주요-액션","1417":"/core-features/stores/menu.html#setmenudata-data","1418":"/core-features/stores/menu.html#setbmk-menu","1419":"/core-features/stores/menu.html#getbmk","1420":"/core-features/stores/menu.html#사용-예제","1421":"/core-features/stores/modal.html#모달-스토어-modalstore","1422":"/core-features/stores/modal.html#개요","1423":"/core-features/stores/modal.html#파일-위치","1424":"/core-features/stores/modal.html#상태-state","1425":"/core-features/stores/modal.html#액션-actions","1426":"/core-features/stores/modal.html#openmodal-modalid-config","1427":"/core-features/stores/modal.html#closemodal","1428":"/core-features/stores/modal.html#사용-예제","1429":"/core-features/stores/others.html#기타-스토어","1430":"/core-features/stores/others.html#버튼-스토어-buttonstore","1431":"/core-features/stores/others.html#개요","1432":"/core-features/stores/others.html#파일-위치","1433":"/core-features/stores/others.html#주요-기능","1434":"/core-features/stores/others.html#사용-예제","1435":"/core-features/stores/others.html#지원하는-버튼","1436":"/core-features/stores/others.html#컨텍스트-메뉴-스토어-contextmenustore","1437":"/core-features/stores/others.html#개요-1","1438":"/core-features/stores/others.html#파일-위치-1","1439":"/core-features/stores/others.html#주요-기능-1","1440":"/core-features/stores/others.html#사용-예제-1","1441":"/core-features/stores/others.html#동적-스토어-dynamicstore","1442":"/core-features/stores/others.html#개요-2","1443":"/core-features/stores/others.html#파일-위치-2","1444":"/core-features/stores/others.html#주요-기능-2","1445":"/core-features/stores/others.html#사용-예제-2","1446":"/core-features/stores/session.html#세션-스토어-sessionstore","1447":"/core-features/stores/session.html#개요","1448":"/core-features/stores/session.html#파일-위치","1449":"/core-features/stores/session.html#상태-state","1450":"/core-features/stores/session.html#주요-액션","1451":"/core-features/stores/session.html#setsessiondata-data","1452":"/core-features/stores/session.html#setsessionkey-key-value","1453":"/core-features/stores/session.html#getsessionvalue-key","1454":"/core-features/stores/session.html#사용-예제","1455":"/core-features/stores/sidebar.html#사이드바-스토어-sidebarstore","1456":"/core-features/stores/sidebar.html#개요","1457":"/core-features/stores/sidebar.html#파일-위치","1458":"/core-features/stores/sidebar.html#상태-state","1459":"/core-features/stores/sidebar.html#주요-액션","1460":"/core-features/stores/sidebar.html#togglevisible-value","1461":"/core-features/stores/sidebar.html#toggleunfoldable","1462":"/core-features/stores/sidebar.html#사용-예제","1463":"/core-features/stores/sidebar.html#composition-api에서-사용","1464":"/core-features/stores/sidebar.html#컴포넌트에서-직접-사용","1465":"/core-features/stores/sidebar.html#상태-관리","1466":"/core-features/stores/sidebar.html#visible-상태","1467":"/core-features/stores/sidebar.html#unfoldable-상태","1468":"/core-features/stores/sidebar.html#다른-스토어와의-연동","1469":"/core-features/stores/sidebar.html#관련-문서","1470":"/core-features/stores/tab.html#탭-스토어-tabstore","1471":"/core-features/stores/tab.html#개요","1472":"/core-features/stores/tab.html#파일-위치","1473":"/core-features/stores/tab.html#상태-state","1474":"/core-features/stores/tab.html#주요-액션","1475":"/core-features/stores/tab.html#opentab-menu","1476":"/core-features/stores/tab.html#switchtab-idxdbkey","1477":"/core-features/stores/tab.html#closetab-tab","1478":"/core-features/stores/tab.html#closealltab","1479":"/core-features/stores/tab.html#indexeddb-연동","1480":"/core-features/stores/tab.html#사용-예제","1481":"/deployment/deploy.html#배포-절차","1482":"/deployment/deploy.html#_1-빌드","1483":"/deployment/deploy.html#_2-빌드-결과물-확인","1484":"/deployment/deploy.html#_3-웹-서버-설정","1485":"/deployment/deploy.html#_4-환경-변수-확인","1486":"/deployment/deploy.html#_5-테스트","1487":"/deployment/deploy.html#주의사항","1488":"/deployment/dev-server.html#개발-서버-실행","1489":"/deployment/dev-server.html#개발-서버-시작","1490":"/deployment/dev-server.html#기본-설정","1491":"/deployment/dev-server.html#포트-변경","1492":"/deployment/dev-server.html#접속","1493":"/deployment/dev-server.html#핫-모듈-교체-hmr","1494":"/deployment/dev-server.html#프록시","1495":"/deployment/optimization.html#빌드-최적화","1496":"/deployment/optimization.html#코드-분할","1497":"/deployment/optimization.html#트리-쉐이킹","1498":"/deployment/optimization.html#압축","1499":"/deployment/optimization.html#에셋-최적화","1500":"/deployment/optimization.html#청크-크기-제한","1501":"/deployment/optimization.html#성능-모니터링","1502":"/deployment/production-build.html#프로덕션-빌드","1503":"/deployment/production-build.html#빌드-명령어","1504":"/deployment/production-build.html#빌드-결과물","1505":"/deployment/production-build.html#빌드-최적화","1506":"/deployment/production-build.html#배포","1507":"/deployment/production-build.html#환경-변수","1508":"/deployment/staging-build.html#스테이징-빌드","1509":"/deployment/staging-build.html#빌드-명령어","1510":"/deployment/staging-build.html#환경-변수","1511":"/deployment/staging-build.html#빌드-결과물","1512":"/deployment/staging-build.html#스테이징-서버-배포","1513":"/development-guide/api/calling.html#api-호출-방법","1514":"/development-guide/api/calling.html#개요","1515":"/development-guide/api/calling.html#기본-사용법","1516":"/development-guide/api/calling.html#응답-처리","1517":"/development-guide/api/calling.html#프로시저-호출","1518":"/development-guide/api/calling.html#파일-업로드","1519":"/development-guide/api/calling.html#파일-다운로드","1520":"/development-guide/api/error-handling.html#api-에러-처리","1521":"/development-guide/api/error-handling.html#개요","1522":"/development-guide/api/error-handling.html#기본-에러-처리","1523":"/development-guide/api/error-handling.html#try-catch-사용","1524":"/development-guide/api/error-handling.html#에러-타입별-처리","1525":"/development-guide/api/error-handling.html#_401-419-에러-인증-실패","1526":"/development-guide/api/error-handling.html#_400-에러-잘못된-요청","1527":"/development-guide/api/error-handling.html#_404-에러-리소스-없음","1528":"/development-guide/api/error-handling.html#_500-에러-서버-오류","1529":"/development-guide/api/error-handling.html#타임아웃-에러","1530":"/development-guide/api/error-handling.html#네트워크-오류","1531":"/development-guide/api/error-handling.html#커스텀-에러-처리","1532":"/development-guide/api/error-handling.html#에러-타입-확인","1533":"/development-guide/api/error-handling.html#에러-메시지-추출","1534":"/development-guide/api/error-handling.html#재시도-로직","1535":"/development-guide/api/error-handling.html#에러-로깅","1536":"/development-guide/api/error-handling.html#사용자-친화적-에러-메시지","1537":"/development-guide/api/error-handling.html#vuetify-snackbar-사용","1538":"/development-guide/api/error-handling.html#에러-처리-유틸리티-함수","1539":"/development-guide/api/error-handling.html#베스트-프랙티스","1540":"/development-guide/api/error-handling.html#관련-문서","1541":"/development-guide/api/file.html#파일-업로드-다운로드","1542":"/development-guide/api/file.html#파일-업로드","1543":"/development-guide/api/file.html#formdata-사용","1544":"/development-guide/api/file.html#암호화된-파일-업로드","1545":"/development-guide/api/file.html#파일-다운로드","1546":"/development-guide/api/file.html#blob-응답","1547":"/development-guide/api/file.html#filesaver-사용","1548":"/development-guide/api/file.html#excel-다운로드","1549":"/development-guide/api/request-response.html#요청-응답-처리","1550":"/development-guide/api/request-response.html#요청-처리","1551":"/development-guide/api/request-response.html#기본-요청","1552":"/development-guide/api/request-response.html#프로시저-호출","1553":"/development-guide/api/request-response.html#응답-처리","1554":"/development-guide/api/request-response.html#성공-응답","1555":"/development-guide/api/request-response.html#응답-구조","1556":"/development-guide/api/request-response.html#에러-처리","1557":"/development-guide/conventions/file-structure.html#파일-구조-규칙","1558":"/development-guide/conventions/file-structure.html#컴포넌트-파일-구조","1559":"/development-guide/conventions/file-structure.html#디렉토리-구조","1560":"/development-guide/conventions/file-structure.html#페이지-컴포넌트","1561":"/development-guide/conventions/file-structure.html#공통-컴포넌트","1562":"/development-guide/conventions/file-structure.html#스토어","1563":"/development-guide/conventions/file-structure.html#파일-조직","1564":"/development-guide/conventions/js-ts.html#javascript-typescript-규칙","1565":"/development-guide/conventions/js-ts.html#코딩-스타일","1566":"/development-guide/conventions/js-ts.html#함수-작성","1567":"/development-guide/conventions/js-ts.html#비동기-처리","1568":"/development-guide/conventions/js-ts.html#에러-처리","1569":"/development-guide/conventions/naming.html#네이밍-규칙","1570":"/development-guide/conventions/naming.html#파일명","1571":"/development-guide/conventions/naming.html#변수명","1572":"/development-guide/conventions/naming.html#함수명","1573":"/development-guide/conventions/naming.html#컴포넌트명","1574":"/development-guide/conventions/naming.html#css-클래스명","1575":"/development-guide/new-component/registration.html#컴포넌트-등록","1576":"/development-guide/new-component/registration.html#자동-등록","1577":"/development-guide/new-component/registration.html#등록-디렉토리","1578":"/development-guide/new-component/registration.html#수동-등록","1579":"/development-guide/new-component/registration.html#타입-정의","1580":"/development-guide/conventions/vue.html#vue-컴포넌트-작성-규칙","1581":"/development-guide/conventions/vue.html#컴포넌트-구조","1582":"/development-guide/conventions/vue.html#네이밍","1583":"/development-guide/conventions/vue.html#props-정의","1584":"/development-guide/conventions/vue.html#emits-정의","1585":"/development-guide/conventions/vue.html#반응형-변수","1586":"/development-guide/new-component/creation.html#컴포넌트-생성","1587":"/development-guide/new-component/creation.html#디렉토리-구조","1588":"/development-guide/new-component/creation.html#컴포넌트-템플릿","1589":"/development-guide/new-component/creation.html#자동-임포트","1590":"/development-guide/new-component/usage.html#컴포넌트-사용법","1591":"/development-guide/new-component/usage.html#자동-등록된-컴포넌트","1592":"/development-guide/new-component/usage.html#props-전달","1593":"/development-guide/new-component/usage.html#이벤트-처리","1594":"/development-guide/new-component/usage.html#슬롯-사용","1595":"/development-guide/new-page/creation.html#페이지-생성-절차","1596":"/development-guide/new-page/creation.html#개요","1597":"/development-guide/new-page/creation.html#_1-페이지-컴포넌트-생성","1598":"/development-guide/new-page/creation.html#_1-1-디렉토리-구조-확인","1599":"/development-guide/new-page/creation.html#_1-2-컴포넌트-파일-생성","1600":"/development-guide/new-page/creation.html#_1-3-기본-템플릿-작성","1601":"/development-guide/new-page/creation.html#_2-라우트-등록","1602":"/development-guide/new-page/creation.html#_2-1-라우트-파일-확인","1603":"/development-guide/new-page/creation.html#_2-2-라우트-추가","1604":"/development-guide/new-page/creation.html#_2-3-동적-라우팅-선택사항","1605":"/development-guide/new-page/creation.html#_3-메뉴-등록","1606":"/development-guide/new-page/creation.html#_3-1-백엔드-메뉴-등록","1607":"/development-guide/new-page/creation.html#_3-2-메뉴-매핑-규칙","1608":"/development-guide/new-page/creation.html#_4-완성된-예제","1609":"/development-guide/new-page/creation.html#_4-1-전체-컴포넌트-예제","1610":"/development-guide/new-page/creation.html#_5-베스트-프랙티스","1611":"/development-guide/new-page/creation.html#_5-1-컴포넌트-구조","1612":"/development-guide/new-page/creation.html#_5-2-네이밍-규칙","1613":"/development-guide/new-page/creation.html#_5-3-코드-조직","1614":"/development-guide/new-page/creation.html#_5-4-에러-처리","1615":"/development-guide/new-page/creation.html#_5-5-로딩-상태-관리","1616":"/development-guide/new-page/creation.html#_6-테스트","1617":"/development-guide/new-page/creation.html#_6-1-개발-서버에서-확인","1618":"/development-guide/new-page/creation.html#_6-2-기능-테스트","1619":"/development-guide/new-page/creation.html#다음-단계","1620":"/development-guide/new-page/route.html#라우트-등록","1621":"/development-guide/new-page/route.html#라우트-파일","1622":"/development-guide/new-page/route.html#라우트-추가","1623":"/development-guide/new-page/route.html#동적-라우팅","1624":"/development-guide/new-page/menu.html#메뉴-등록","1625":"/development-guide/new-page/menu.html#백엔드-메뉴-등록","1626":"/development-guide/new-page/menu.html#메뉴-매핑-규칙","1627":"/development-guide/new-store/creation.html#스토어-생성","1628":"/development-guide/new-store/creation.html#스토어-파일-위치","1629":"/development-guide/new-store/creation.html#스토어-템플릿","1630":"/development-guide/new-store/creation.html#사용법","1631":"/development-guide/new-store/usage.html#스토어-사용법","1632":"/development-guide/new-store/usage.html#스토어-가져오기","1633":"/development-guide/new-store/usage.html#상태-읽기","1634":"/development-guide/new-store/usage.html#액션-호출","1635":"/development-guide/new-store/usage.html#반응성","1636":"/development-guide/styling/custom.html#커스텀-css","1637":"/development-guide/styling/custom.html#커스텀-css-파일","1638":"/development-guide/styling/custom.html#스타일-오버라이드","1639":"/development-guide/styling/custom.html#전역-스타일","1640":"/development-guide/styling/scss.html#scss-사용법","1641":"/development-guide/styling/scss.html#컴포넌트-스타일","1642":"/development-guide/styling/scss.html#전역-스타일","1643":"/development-guide/styling/scss.html#변수-사용","1644":"/development-guide/styling/scss.html#믹스인-사용","1645":"/development-guide/styling/vuetify.html#vuetify-사용법","1646":"/development-guide/styling/vuetify.html#기본-컴포넌트","1647":"/development-guide/styling/vuetify.html#테마","1648":"/development-guide/styling/vuetify.html#그리드-시스템","1649":"/development-guide/styling/vuetify.html#아이콘","1650":"/development-guide/styling/vuetify.html#공식-문서","1651":"/getting-started/project-structure.html#프로젝트-구조","1652":"/getting-started/project-structure.html#전체-디렉토리-구조","1653":"/getting-started/project-structure.html#주요-디렉토리-설명","1654":"/getting-started/project-structure.html#src-소스-코드","1655":"/getting-started/project-structure.html#src-app-vue","1656":"/getting-started/project-structure.html#src-main-js","1657":"/getting-started/project-structure.html#src-customaxios-js","1658":"/getting-started/project-structure.html#src-utils-유틸리티","1659":"/getting-started/project-structure.html#src-utils-common","1660":"/getting-started/project-structure.html#src-utils-stores","1661":"/getting-started/project-structure.html#src-utils-plugins","1662":"/getting-started/project-structure.html#src-views-페이지-컴포넌트","1663":"/getting-started/project-structure.html#src-views-axpframework","1664":"/getting-started/project-structure.html#src-views-ess","1665":"/getting-started/project-structure.html#src-views-fcm","1666":"/getting-started/project-structure.html#src-views-geosan","1667":"/getting-started/project-structure.html#src-views-ui","1668":"/getting-started/project-structure.html#src-script-비즈니스-로직","1669":"/getting-started/project-structure.html#src-vendor-외부-라이브러리","1670":"/getting-started/project-structure.html#public-정적-리소스","1671":"/getting-started/project-structure.html#설정-파일","1672":"/getting-started/project-structure.html#package-json","1673":"/getting-started/project-structure.html#vite-config-js","1674":"/getting-started/project-structure.html#env","1675":"/getting-started/project-structure.html#jsconfig-json","1676":"/getting-started/project-structure.html#파일-명명-규칙","1677":"/getting-started/project-structure.html#다음-단계","1678":"/getting-started/overview.html#프로젝트-개요","1679":"/getting-started/overview.html#프로젝트-소개","1680":"/getting-started/overview.html#주요-특징","1681":"/getting-started/overview.html#프로젝트-버전","1682":"/getting-started/overview.html#기술-스택-요약","1683":"/getting-started/overview.html#핵심-프레임워크","1684":"/getting-started/overview.html#ui-프레임워크","1685":"/getting-started/overview.html#주요-라이브러리","1686":"/getting-started/overview.html#프로젝트-목적","1687":"/getting-started/overview.html#주요-모듈","1688":"/getting-started/overview.html#axp-framework","1689":"/getting-started/overview.html#ess-모듈","1690":"/getting-started/overview.html#fcm-모듈","1691":"/getting-started/overview.html#geosan-모듈","1692":"/getting-started/overview.html#다음-단계","1693":"/getting-started/quick-start.html#빠른-시작-가이드","1694":"/getting-started/quick-start.html#_1-프로젝트-클론-및-설치","1695":"/getting-started/quick-start.html#_2-환경-변수-설정","1696":"/getting-started/quick-start.html#_3-개발-서버-실행","1697":"/getting-started/quick-start.html#_4-기본-로그인","1698":"/getting-started/quick-start.html#_5-첫-번째-컴포넌트-만들기","1699":"/getting-started/quick-start.html#_5-1-페이지-컴포넌트-생성","1700":"/getting-started/quick-start.html#_5-2-라우트-등록","1701":"/getting-started/quick-start.html#_5-3-메뉴-등록-선택사항","1702":"/getting-started/quick-start.html#_6-api-호출하기","1703":"/getting-started/quick-start.html#_7-공통-컴포넌트-사용하기","1704":"/getting-started/quick-start.html#selectboxsql-사용-예제","1705":"/getting-started/quick-start.html#ag-grid-사용-예제","1706":"/getting-started/quick-start.html#_8-pinia-스토어-사용하기","1707":"/getting-started/quick-start.html#_9-유틸리티-함수-사용하기","1708":"/getting-started/quick-start.html#_10-스타일링","1709":"/getting-started/quick-start.html#vuetify-컴포넌트-사용","1710":"/getting-started/quick-start.html#커스텀-스타일","1711":"/getting-started/quick-start.html#다음-단계","1712":"/getting-started/requirements.html#시스템-요구사항","1713":"/getting-started/requirements.html#필수-소프트웨어","1714":"/getting-started/requirements.html#node-js","1715":"/getting-started/requirements.html#npm-또는-yarn","1716":"/getting-started/requirements.html#git","1717":"/getting-started/requirements.html#개발-도구","1718":"/getting-started/requirements.html#코드-에디터","1719":"/getting-started/requirements.html#브라우저","1720":"/getting-started/requirements.html#운영-체제","1721":"/getting-started/requirements.html#하드웨어-요구사항","1722":"/getting-started/requirements.html#최소-사양","1723":"/getting-started/requirements.html#권장-사양","1724":"/getting-started/requirements.html#네트워크-요구사항","1725":"/getting-started/requirements.html#개발-환경","1726":"/getting-started/requirements.html#환경-변수","1727":"/getting-started/requirements.html#의존성-확인","1728":"/getting-started/requirements.html#버전-관리","1729":"/getting-started/requirements.html#다음-단계","1730":"/getting-started/setup.html#개발-환경-설정","1731":"/getting-started/setup.html#프로젝트-클론","1732":"/getting-started/setup.html#node-js-버전-확인","1733":"/getting-started/setup.html#의존성-설치","1734":"/getting-started/setup.html#환경-변수-설정","1735":"/getting-started/setup.html#환경별-설정-파일","1736":"/getting-started/setup.html#개발-서버-실행","1737":"/getting-started/setup.html#빌드","1738":"/getting-started/setup.html#개발-빌드","1739":"/getting-started/setup.html#스테이징-빌드","1740":"/getting-started/setup.html#프로덕션-빌드","1741":"/getting-started/setup.html#빌드-미리보기","1742":"/getting-started/setup.html#추가-설정","1743":"/getting-started/setup.html#아이콘-빌드","1744":"/getting-started/setup.html#eslint-설정","1745":"/getting-started/setup.html#prettier-설정","1746":"/getting-started/setup.html#문제-해결","1747":"/getting-started/setup.html#포트-충돌","1748":"/getting-started/setup.html#의존성-설치-오류","1749":"/getting-started/setup.html#환경-변수-인식-안-됨","1750":"/getting-started/setup.html#다음-단계","1751":"/#axp-dev-docs","1752":"/#이-문서는-무엇인가요","1753":"/#처음-온-개발자를-위한-3단계","1754":"/#_1-프로젝트-전체-그림-이해하기","1755":"/#_2-로컬-개발-환경-구축하기","1756":"/#_3-axp-방식-개발-패턴-익히기","1757":"/#핵심-아키텍처-빠른-링크","1758":"/#상태-관리-pinia-stores","1759":"/#http-통신-규약","1760":"/#인증-및-보안","1761":"/#ui-컴포넌트-사용-가이드","1762":"/#공통-컴포넌트","1763":"/#그리드-컴포넌트","1764":"/#팝업-컴포넌트","1765":"/#레이아웃-컴포넌트","1766":"/#유틸리티-함수","1767":"/#새-화면을-만들-때-추천-흐름","1768":"/#_1-페이지-생성","1769":"/#_2-데이터-통신-설계","1770":"/#_3-ui-구성","1771":"/#_4-상태-관리","1772":"/#_5-스타일링","1773":"/#기술-스택","1774":"/#프로젝트-구조","1775":"/#모듈별-가이드","1776":"/#환경-설정","1777":"/#코딩-컨벤션","1778":"/#테스트","1779":"/#빌드-및-배포","1780":"/#트러블슈팅","1781":"/#참고-자료","1782":"/#빠른-참조","1783":"/#자주-사용하는-함수","1784":"/#자주-사용하는-스토어","1785":"/#api-호출-기본-패턴","1786":"/#다음-단계","1787":"/markdown-examples.html#markdown-extension-examples","1788":"/markdown-examples.html#syntax-highlighting","1789":"/markdown-examples.html#custom-containers","1790":"/markdown-examples.html#more","1791":"/modules/axpframework/auth.html#axp-framework-인증-모듈","1792":"/modules/axpframework/auth.html#개요","1793":"/modules/axpframework/auth.html#주요-페이지","1794":"/modules/axpframework/auth.html#login-vue","1795":"/modules/axpframework/auth.html#adminlogin-vue","1796":"/modules/axpframework/auth.html#register-vue","1797":"/modules/axpframework/auth.html#로그인-프로세스","1798":"/modules/axpframework/auth.html#관련-문서","1799":"/modules/fcm/erp.html#fcm-모듈-erp-기능","1800":"/modules/fcm/erp.html#개요","1801":"/modules/fcm/erp.html#디렉토리-구조","1802":"/modules/fcm/erp.html#주요-기능","1803":"/modules/ess/persadm.html#ess-모듈-인사-관리","1804":"/modules/ess/persadm.html#개요","1805":"/modules/ess/persadm.html#주요-페이지","1806":"/modules/ess/persadm.html#pimypersonnelinformation-vue","1807":"/modules/ess/persadm.html#paattendancerequest-vue","1808":"/modules/ess/persadm.html#pcbillreqhipass-vue","1809":"/modules/ess/persadm.html#poorganizationchart-vue","1810":"/modules/ess/persadm.html#관련-스크립트","1811":"/modules/geosan/bi.html#geosan-모듈-bi-기능","1812":"/modules/geosan/bi.html#개요","1813":"/modules/geosan/bi.html#디렉토리-구조","1814":"/modules/geosan/bi.html#주요-기능","1815":"/project-structure/directory.html#전체-디렉토리-구조","1816":"/project-structure/directory.html#프로젝트-루트-구조","1817":"/project-structure/directory.html#src-디렉토리-상세-구조","1818":"/project-structure/directory.html#주요-디렉토리-설명","1819":"/project-structure/directory.html#src-script","1820":"/project-structure/directory.html#src-utils-common","1821":"/project-structure/directory.html#src-utils-stores","1822":"/project-structure/directory.html#src-utils-plugins","1823":"/project-structure/directory.html#src-views","1824":"/project-structure/directory.html#src-vendor","1825":"/project-structure/directory.html#파일-명명-규칙","1826":"/project-structure/directory.html#컴포넌트-파일","1827":"/project-structure/directory.html#유틸리티-파일","1828":"/project-structure/directory.html#상수-파일","1829":"/project-structure/directory.html#경로-별칭-alias","1830":"/project-structure/directory.html#사용-예제","1831":"/project-structure/directory.html#다음-단계","1832":"/project-structure/public.html#public-디렉토리","1833":"/project-structure/public.html#개요","1834":"/project-structure/public.html#디렉토리-구조","1835":"/project-structure/public.html#주요-파일","1836":"/project-structure/public.html#favicon-ico","1837":"/project-structure/public.html#logo-png","1838":"/project-structure/public.html#loader-css","1839":"/project-structure/public.html#custom-css","1840":"/project-structure/public.html#custom-css-1","1841":"/project-structure/public.html#custom-datepicker-css","1842":"/project-structure/public.html#custom-orgchart-css","1843":"/project-structure/public.html#파일-참조-방법","1844":"/project-structure/public.html#절대-경로-사용","1845":"/project-structure/public.html#동적-경로-사용","1846":"/project-structure/public.html#css-파일-임포트","1847":"/project-structure/public.html#빌드-시-처리","1848":"/project-structure/public.html#주의사항","1849":"/project-structure/public.html#관련-문서","1850":"/project-structure/scripts.html#스크립트-파일","1851":"/project-structure/scripts.html#개요","1852":"/project-structure/scripts.html#파일-위치","1853":"/project-structure/scripts.html#디렉토리-구조","1854":"/project-structure/scripts.html#사용-목적","1855":"/project-structure/scripts.html#사용-예제","1856":"/project-structure/src.html#src-디렉토리","1857":"/project-structure/src.html#개요","1858":"/project-structure/src.html#디렉토리-구조","1859":"/project-structure/src.html#주요-파일","1860":"/project-structure/src.html#app-vue","1861":"/project-structure/src.html#main-js","1862":"/project-structure/src.html#customaxios-js","1863":"/project-structure/src.html#디렉토리별-상세-설명","1864":"/project-structure/src.html#views","1865":"/project-structure/src.html#utils","1866":"/project-structure/src.html#관련-문서","1867":"/project-structure/utils/common.html#공통-유틸리티","1868":"/project-structure/utils/common.html#개요","1869":"/project-structure/utils/common.html#파일-위치","1870":"/project-structure/utils/common.html#주요-파일","1871":"/project-structure/utils/common.html#common-js","1872":"/project-structure/utils/common.html#comfcm-js","1873":"/project-structure/utils/common.html#자동-임포트","1874":"/project-structure/utils/common.html#관련-문서","1875":"/project-structure/utils/lang.html#언어-및-국제화","1876":"/project-structure/utils/lang.html#개요","1877":"/project-structure/utils/lang.html#디렉토리-구조","1878":"/project-structure/utils/lang.html#주요-파일","1879":"/project-structure/utils/lang.html#i18n-js","1880":"/project-structure/utils/lang.html#aggrid-ko-kr-js","1881":"/project-structure/utils/lang.html#사용-방법","1882":"/project-structure/utils/lang.html#composition-api에서-사용","1883":"/project-structure/utils/lang.html#options-api에서-사용","1884":"/project-structure/utils/lang.html#숫자-형식-사용","1885":"/project-structure/utils/lang.html#메시지-추가","1886":"/project-structure/utils/lang.html#언어-변경","1887":"/project-structure/utils/lang.html#ag-grid-로케일-적용","1888":"/project-structure/utils/lang.html#관련-문서","1889":"/project-structure/utils/plugins.html#플러그인-설정","1890":"/project-structure/utils/plugins.html#개요","1891":"/project-structure/utils/plugins.html#디렉토리-구조","1892":"/project-structure/utils/plugins.html#주요-플러그인","1893":"/project-structure/utils/plugins.html#pinia-pinia-js","1894":"/project-structure/utils/plugins.html#vue-router-router","1895":"/project-structure/utils/plugins.html#routes-js","1896":"/project-structure/utils/plugins.html#index-js","1897":"/project-structure/utils/plugins.html#vuetify-vuetify","1898":"/project-structure/utils/plugins.html#index-js-1","1899":"/project-structure/utils/plugins.html#defaults-js","1900":"/project-structure/utils/plugins.html#icons-js","1901":"/project-structure/utils/plugins.html#theme-js","1902":"/project-structure/utils/plugins.html#iconify-iconify","1903":"/project-structure/utils/plugins.html#webfontloader-webfontloader-js","1904":"/project-structure/utils/plugins.html#플러그인-등록","1905":"/project-structure/utils/plugins.html#커스텀-플러그인-추가","1906":"/project-structure/utils/plugins.html#관련-문서","1907":"/project-structure/utils/stores.html#pinia-스토어","1908":"/project-structure/utils/stores.html#개요","1909":"/project-structure/utils/stores.html#디렉토리-구조","1910":"/project-structure/utils/stores.html#주요-스토어","1911":"/project-structure/utils/stores.html#authstore-js","1912":"/project-structure/utils/stores.html#loadingstore-js","1913":"/project-structure/utils/stores.html#menustore-js","1914":"/project-structure/utils/stores.html#sessionstore-js","1915":"/project-structure/utils/stores.html#modalstore-js","1916":"/project-structure/utils/stores.html#tabstore-js","1917":"/project-structure/utils/stores.html#sidebarstore-js","1918":"/project-structure/utils/stores.html#logstore-js","1919":"/project-structure/utils/stores.html#스토어-사용-패턴","1920":"/project-structure/utils/stores.html#composition-api에서-사용","1921":"/project-structure/utils/stores.html#options-api에서-사용","1922":"/project-structure/utils/stores.html#스토어-생성-가이드","1923":"/project-structure/utils/stores.html#관련-문서","1924":"/project-structure/vendor.html#벤더-라이브러리","1925":"/project-structure/vendor.html#개요","1926":"/project-structure/vendor.html#디렉토리-구조","1927":"/project-structure/vendor.html#주요-디렉토리","1928":"/project-structure/vendor.html#core","1929":"/project-structure/vendor.html#layouts","1930":"/project-structure/vendor.html#dashboard","1931":"/project-structure/vendor.html#assets","1932":"/project-structure/views/axpframework.html#axpframework-모듈","1933":"/project-structure/views/axpframework.html#개요","1934":"/project-structure/views/axpframework.html#디렉토리-구조","1935":"/project-structure/views/axpframework.html#주요-컴포넌트","1936":"/project-structure/views/axpframework.html#login-vue","1937":"/project-structure/views/axpframework.html#adminlogin-vue","1938":"/project-structure/views/axpframework.html#main-vue","1939":"/project-structure/views/axpframework.html#dashboard-vue","1940":"/project-structure/views/ess.html#ess-모듈-뷰-컴포넌트","1941":"/project-structure/views/ess.html#개요","1942":"/project-structure/views/ess.html#디렉토리-구조","1943":"/project-structure/views/ess.html#주요-컴포넌트","1944":"/project-structure/views/ess.html#인사-관리-persadm","1945":"/project-structure/views/ess.html#paattendancerequest-vue","1946":"/project-structure/views/ess.html#pimypersonnelinformation-vue","1947":"/project-structure/views/ess.html#poorganizationchart-vue","1948":"/project-structure/views/ess.html#관리자-기능-admin","1949":"/project-structure/views/ess.html#assmsmanagement-vue","1950":"/project-structure/views/ess.html#법인카드-creditcard","1951":"/project-structure/views/ess.html#billapprovelist-vue","1952":"/project-structure/views/ess.html#교육-education","1953":"/project-structure/views/ess.html#etedurequest-vue","1954":"/project-structure/views/ess.html#평가-estimation","1955":"/project-structure/views/ess.html#ebadminestimationstatistics-vue","1956":"/project-structure/views/ess.html#공통-패턴","1957":"/project-structure/views/ess.html#api-호출-패턴","1958":"/project-structure/views/ess.html#세션-정보-사용","1959":"/project-structure/views/ess.html#관련-문서","1960":"/project-structure/views/fcm.html#fcm-모듈-뷰-컴포넌트","1961":"/project-structure/views/fcm.html#개요","1962":"/project-structure/views/fcm.html#디렉토리-구조","1963":"/project-structure/views/fcm.html#주요-컴포넌트","1964":"/project-structure/views/fcm.html#erp-모듈-erp-sys","1965":"/project-structure/views/fcm.html#sys1200-vue","1966":"/project-structure/views/fcm.html#sys1710-vue","1967":"/project-structure/views/fcm.html#sys5300-vue","1968":"/project-structure/views/fcm.html#hr-모듈-hr-hri","1969":"/project-structure/views/fcm.html#hri1000-vue","1970":"/project-structure/views/fcm.html#hri1000tabcontents-vue","1971":"/project-structure/views/fcm.html#hri5100-vue","1972":"/project-structure/views/fcm.html#공통-패턴","1973":"/project-structure/views/fcm.html#검색-폼-구조","1974":"/project-structure/views/fcm.html#그리드-사용","1975":"/project-structure/views/fcm.html#관련-문서","1976":"/project-structure/views/geosan.html#geosan-모듈-뷰-컴포넌트","1977":"/project-structure/views/geosan.html#개요","1978":"/project-structure/views/geosan.html#디렉토리-구조","1979":"/project-structure/views/geosan.html#주요-컴포넌트","1980":"/project-structure/views/geosan.html#고객-관리-bi-customer","1981":"/project-structure/views/geosan.html#customerlist-vue","1982":"/project-structure/views/geosan.html#customergrplist-vue","1983":"/project-structure/views/geosan.html#customerlistpop-vue","1984":"/project-structure/views/geosan.html#customergrppop-vue","1985":"/project-structure/views/geosan.html#데이터-파일","1986":"/project-structure/views/geosan.html#customerlistdata-js","1987":"/project-structure/views/geosan.html#customergrplistdata-js","1988":"/project-structure/views/geosan.html#공통-패턴","1989":"/project-structure/views/geosan.html#검색-폼-구조","1990":"/project-structure/views/geosan.html#그리드-사용","1991":"/project-structure/views/geosan.html#관련-문서","1992":"/project-structure/views/ui.html#ui-컴포넌트-및-레이아웃","1993":"/project-structure/views/ui.html#개요","1994":"/project-structure/views/ui.html#디렉토리-구조","1995":"/project-structure/views/ui.html#공통-컴포넌트-components-common","1996":"/project-structure/views/ui.html#버튼-컴포넌트","1997":"/project-structure/views/ui.html#buttonbox-vue","1998":"/project-structure/views/ui.html#입력-컴포넌트","1999":"/project-structure/views/ui.html#inputphone-vue","2000":"/project-structure/views/ui.html#로딩-컴포넌트","2001":"/project-structure/views/ui.html#loading-vue","2002":"/project-structure/views/ui.html#조회-컴포넌트-lookup","2003":"/project-structure/views/ui.html#lookupbox-vue","2004":"/project-structure/views/ui.html#선택-컴포넌트-select","2005":"/project-structure/views/ui.html#selectboxsql-vue","2006":"/project-structure/views/ui.html#selectboxdate-vue","2007":"/project-structure/views/ui.html#multiselectboxsql-vue","2008":"/project-structure/views/ui.html#트리-컴포넌트-tree","2009":"/project-structure/views/ui.html#treedeptdropdown-vue","2010":"/project-structure/views/ui.html#treeempdropdown-vue","2011":"/project-structure/views/ui.html#treeorgnode-vue","2012":"/project-structure/views/ui.html#그리드-컴포넌트-components-grid","2013":"/project-structure/views/ui.html#gridclickfield-vue","2014":"/project-structure/views/ui.html#gridcontextmenu-vue","2015":"/project-structure/views/ui.html#gridmultiselectwrapper-vue","2016":"/project-structure/views/ui.html#메뉴-컴포넌트-components-menu","2017":"/project-structure/views/ui.html#menusidebar-vue","2018":"/project-structure/views/ui.html#menuheaderbar-vue","2019":"/project-structure/views/ui.html#menubmk-vue","2020":"/project-structure/views/ui.html#팝업-컴포넌트-components-popup","2021":"/project-structure/views/ui.html#popupapproval-vue","2022":"/project-structure/views/ui.html#popupapprovelist-vue","2023":"/project-structure/views/ui.html#popupfilelink-vue","2024":"/project-structure/views/ui.html#popuplog-vue","2025":"/project-structure/views/ui.html#popuppagelog-vue","2026":"/project-structure/views/ui.html#popupsmstemplatelist-vue","2027":"/project-structure/views/ui.html#레이아웃-컴포넌트-layouts","2028":"/project-structure/views/ui.html#blank-vue","2029":"/project-structure/views/ui.html#default-vue","2030":"/project-structure/views/ui.html#popblank-vue","2031":"/project-structure/views/ui.html#관련-문서","2032":"/references/classes.html#주요-클래스-함수-참조","2033":"/references/classes.html#유틸리티-함수","2034":"/references/classes.html#스토어","2035":"/references/classes.html#api-호출","2036":"/references/config-files.html#설정-파일-참조","2037":"/references/config-files.html#주요-설정-파일","2038":"/references/config-files.html#package-json","2039":"/references/config-files.html#vite-config-js","2040":"/references/config-files.html#env","2041":"/references/config-files.html#jsconfig-json","2042":"/references/config-files.html#플러그인-설정","2043":"/references/config-files.html#router-routes-js","2044":"/references/config-files.html#pinia-js","2045":"/references/config-files.html#vuetify-index-js","2046":"/references/external-libs.html#외부-라이브러리-문서","2047":"/references/external-libs.html#vue-3","2048":"/references/external-libs.html#vite","2049":"/references/external-libs.html#pinia","2050":"/references/external-libs.html#vuetify","2051":"/references/external-libs.html#vue-router","2052":"/references/external-libs.html#ag-grid","2053":"/references/external-libs.html#axios","2054":"/references/faq.html#자주-묻는-질문-faq","2055":"/references/faq.html#q-자동-임포트가-작동하지-않아요","2056":"/references/faq.html#q-컴포넌트를-찾을-수-없어요","2057":"/references/faq.html#q-api-호출-시-401-에러가-발생해요","2058":"/references/faq.html#q-환경-변수가-적용되지-않아요","2059":"/references/faq.html#q-빌드가-실패해요","2060":"/references/icons.html#아이콘-사용법","2061":"/references/icons.html#iconify","2062":"/references/icons.html#사용-예제","2063":"/references/icons.html#아이콘-빌드","2064":"/references/icons.html#아이콘-라이브러리","2065":"/tech-stack/axios.html#http-클라이언트-axios","2066":"/tech-stack/axios.html#개요","2067":"/tech-stack/axios.html#커스텀-인스턴스","2068":"/tech-stack/axios.html#주요-기능","2069":"/tech-stack/axios.html#사용법","2070":"/tech-stack/charts.html#차트-라이브러리","2071":"/tech-stack/charts.html#apexcharts","2072":"/tech-stack/charts.html#echarts","2073":"/tech-stack/charts.html#사용-목적","2074":"/tech-stack/frameworks.html#프레임워크-및-라이브러리","2075":"/tech-stack/frameworks.html#vue-3","2076":"/tech-stack/frameworks.html#버전","2077":"/tech-stack/frameworks.html#주요-특징","2078":"/tech-stack/frameworks.html#사용-예제","2079":"/tech-stack/frameworks.html#자동-임포트","2080":"/tech-stack/frameworks.html#vite","2081":"/tech-stack/frameworks.html#버전-1","2082":"/tech-stack/frameworks.html#주요-기능","2083":"/tech-stack/frameworks.html#주요-플러그인","2084":"/tech-stack/frameworks.html#pinia","2085":"/tech-stack/frameworks.html#버전-2","2086":"/tech-stack/frameworks.html#특징","2087":"/tech-stack/frameworks.html#스토어-구조","2088":"/tech-stack/frameworks.html#vue-router","2089":"/tech-stack/frameworks.html#버전-3","2090":"/tech-stack/frameworks.html#라우팅-구조","2091":"/tech-stack/frameworks.html#라우트-가드","2092":"/tech-stack/frameworks.html#axios","2093":"/tech-stack/frameworks.html#버전-4","2094":"/tech-stack/frameworks.html#커스텀-인스턴스","2095":"/tech-stack/frameworks.html#주요-기능-1","2096":"/tech-stack/frameworks.html#ag-grid","2097":"/tech-stack/frameworks.html#버전-5","2098":"/tech-stack/frameworks.html#사용-목적","2099":"/tech-stack/frameworks.html#주요-기능-2","2100":"/tech-stack/frameworks.html#차트-라이브러리","2101":"/tech-stack/frameworks.html#apexcharts","2102":"/tech-stack/frameworks.html#echarts","2103":"/tech-stack/frameworks.html#사용-목적-1","2104":"/tech-stack/frameworks.html#excel-처리","2105":"/tech-stack/frameworks.html#exceljs","2106":"/tech-stack/frameworks.html#사용-목적-2","2107":"/tech-stack/frameworks.html#암호화","2108":"/tech-stack/frameworks.html#cryptojs","2109":"/tech-stack/frameworks.html#사용-목적-3","2110":"/tech-stack/frameworks.html#기타-주요-라이브러리","2111":"/tech-stack/frameworks.html#파일-처리","2112":"/tech-stack/frameworks.html#pdf-처리","2113":"/tech-stack/frameworks.html#날짜-처리","2114":"/tech-stack/frameworks.html#드래그-앤-드롭","2115":"/tech-stack/frameworks.html#트리-뷰","2116":"/tech-stack/frameworks.html#다음-단계","2117":"/tech-stack/grid.html#그리드-라이브러리-ag-grid","2118":"/tech-stack/grid.html#개요","2119":"/tech-stack/grid.html#주요-기능","2120":"/tech-stack/grid.html#사용-예제","2121":"/tech-stack/pinia.html#상태-관리-pinia","2122":"/tech-stack/pinia.html#개요","2123":"/tech-stack/pinia.html#주요-스토어","2124":"/tech-stack/pinia.html#사용법","2125":"/tech-stack/pinia.html#상태-영속화","2126":"/tech-stack/router.html#라우팅-vue-router","2127":"/tech-stack/router.html#개요","2128":"/tech-stack/router.html#라우트-정의","2129":"/tech-stack/router.html#동적-라우팅","2130":"/tech-stack/router.html#라우트-가드","2131":"/tech-stack/utilities.html#기타-유틸리티","2132":"/tech-stack/utilities.html#excel-처리","2133":"/tech-stack/utilities.html#암호화","2134":"/tech-stack/utilities.html#파일-처리","2135":"/tech-stack/utilities.html#pdf-처리","2136":"/tech-stack/utilities.html#날짜-처리","2137":"/tech-stack/utilities.html#드래그-앤-드롭","2138":"/tech-stack/utilities.html#트리-뷰","2139":"/tech-stack/vuetify.html#ui-프레임워크-vuetify","2140":"/tech-stack/vuetify.html#개요","2141":"/tech-stack/vuetify.html#주요-컴포넌트","2142":"/tech-stack/vuetify.html#테마","2143":"/tech-stack/vuetify.html#로케일","2144":"/testing/component-test.html#컴포넌트-테스트","2145":"/testing/component-test.html#개요","2146":"/testing/component-test.html#테스트-예제","2147":"/testing/component-test.html#스토어-통합-테스트","2148":"/testing/e2e-test.html#e2e-테스트","2149":"/testing/e2e-test.html#개요","2150":"/testing/e2e-test.html#테스트-프레임워크","2151":"/testing/e2e-test.html#테스트-예제","2152":"/testing/e2e-test.html#테스트-실행","2153":"/testing/unit-test.html#단위-테스트","2154":"/testing/unit-test.html#개요","2155":"/testing/unit-test.html#테스트-프레임워크","2156":"/testing/unit-test.html#유틸리티-함수-테스트","2157":"/testing/unit-test.html#스토어-테스트","2158":"/testing/unit-test.html#테스트-실행","2159":"/troubleshooting/api-issues.html#api-통신-문제","2160":"/troubleshooting/api-issues.html#cors-오류","2161":"/troubleshooting/api-issues.html#타임아웃","2162":"/troubleshooting/api-issues.html#_429-에러","2163":"/troubleshooting/api-issues.html#암호화-오류","2164":"/troubleshooting/auth-issues.html#인증-관련-문제","2165":"/troubleshooting/auth-issues.html#토큰-만료","2166":"/troubleshooting/auth-issues.html#refresh-token-만료","2167":"/troubleshooting/auth-issues.html#토큰이-저장되지-않음","2168":"/troubleshooting/auth-issues.html#인증-상태가-유지되지-않음","2169":"/troubleshooting/build-errors.html#빌드-오류","2170":"/troubleshooting/build-errors.html#일반적인-빌드-오류","2171":"/troubleshooting/build-errors.html#타입-오류","2172":"/troubleshooting/build-errors.html#의존성-오류","2173":"/troubleshooting/build-errors.html#경로-오류","2174":"/troubleshooting/build-errors.html#메모리-오류","2175":"/troubleshooting/build-errors.html#빌드-최적화","2176":"/troubleshooting/common-issues.html#일반적인-문제-해결","2177":"/troubleshooting/common-issues.html#포트-충돌","2178":"/troubleshooting/common-issues.html#의존성-설치-오류","2179":"/troubleshooting/common-issues.html#환경-변수-인식-안-됨","2180":"/troubleshooting/common-issues.html#빌드-오류","2181":"/troubleshooting/common-issues.html#토큰-갱신-실패","2182":"/troubleshooting/runtime-errors.html#런타임-오류","2183":"/troubleshooting/runtime-errors.html#일반적인-런타임-오류","2184":"/troubleshooting/runtime-errors.html#컴포넌트를-찾을-수-없음","2185":"/troubleshooting/runtime-errors.html#스토어를-찾을-수-없음","2186":"/troubleshooting/runtime-errors.html#라우트를-찾을-수-없음","2187":"/troubleshooting/runtime-errors.html#api-요청-실패","2188":"/troubleshooting/runtime-errors.html#디버깅","2189":"/utilities/array-object.html#배열-객체-처리","2190":"/utilities/array-object.html#개요","2191":"/utilities/array-object.html#주요-함수","2192":"/utilities/array-object.html#gfarraytoobject-array-keyfield-valuefield","2193":"/utilities/array-object.html#gfgetrowtable-listdata","2194":"/utilities/array-object.html#gfgetjsonfilter-data-key-values","2195":"/utilities/array-object.html#gfjsondatavalidation-jsondata-code","2196":"/utilities/array-object.html#gfclonejson-obj","2197":"/utilities/array-object.html#gfobjecttostring-obj-log","2198":"/utilities/array-object.html#관련-문서","2199":"/utilities/common.html#공통-유틸리티-common-js","2200":"/utilities/common.html#개요","2201":"/utilities/common.html#파일-위치","2202":"/utilities/common.html#주요-함수-카테고리","2203":"/utilities/common.html#_1-기본-유틸리티-검증-함수","2204":"/utilities/common.html#gfisempty-value","2205":"/utilities/common.html#gfnvl-val-defaultval","2206":"/utilities/common.html#_2-날짜-시간-관련-함수","2207":"/utilities/common.html#gfformatdatestring-datestr-delimiter","2208":"/utilities/common.html#gfformatdatetime-date","2209":"/utilities/common.html#gfaddday-date-add","2210":"/utilities/common.html#gfdiffdate-fromdate-todate","2211":"/utilities/common.html#_3-숫자-처리-함수","2212":"/utilities/common.html#gfnumberformat-number-decimals-decpoint-thousandssep","2213":"/utilities/common.html#_4-문자열-처리-함수","2214":"/utilities/common.html#gftrim-str","2215":"/utilities/common.html#_5-배열-객체-처리-함수","2216":"/utilities/common.html#gfarraytoobject-array-keyfield-valuefield","2217":"/utilities/common.html#_6-파일-처리-함수","2218":"/utilities/common.html#gfdownloadfile-data-filename-mimetype","2219":"/utilities/common.html#_7-검증-함수","2220":"/utilities/common.html#gfvalidateresidentnumber-residentnumber","2221":"/utilities/common.html#gfisdate-str","2222":"/utilities/common.html#자동-임포트","2223":"/utilities/common.html#사용-예제","2224":"/utilities/common.html#날짜-처리","2225":"/utilities/common.html#숫자-포맷팅","2226":"/utilities/common.html#데이터-검증","2227":"/utilities/common.html#관련-문서","2228":"/utilities/crypto.html#암호화-복호화","2229":"/utilities/crypto.html#개요","2230":"/utilities/crypto.html#주요-함수","2231":"/utilities/crypto.html#encryptobject-data","2232":"/utilities/crypto.html#decryptobject-data","2233":"/utilities/crypto.html#encryptbinary-bytes-file","2234":"/utilities/crypto.html#자동-암호화","2235":"/utilities/crypto.html#관련-문서","2236":"/utilities/date.html#날짜-처리","2237":"/utilities/date.html#개요","2238":"/utilities/date.html#주요-함수","2239":"/utilities/date.html#gfformatdatestring-datestr-delimiter","2240":"/utilities/date.html#gfformatdatetime-date","2241":"/utilities/date.html#gfformatdatetimestring-pdate","2242":"/utilities/date.html#gfaddday-date-add","2243":"/utilities/date.html#gfdiffdate-fromdate-todate","2244":"/utilities/date.html#gfaddmonth-date-val","2245":"/utilities/date.html#gfformatdatewithsep-date","2246":"/utilities/date.html#gftimestamptodatestr-date","2247":"/utilities/date.html#gfconverttimestamp-pdate","2248":"/utilities/date.html#gftoday","2249":"/utilities/date.html#gfdayformat-str","2250":"/utilities/date.html#날짜-드롭다운-생성","2251":"/utilities/date.html#gfsetyearbox","2252":"/utilities/date.html#gfsetmonthbox","2253":"/utilities/date.html#gfsetdaybox","2254":"/utilities/date.html#관련-문서","2255":"/utilities/excel.html#excel-처리","2256":"/utilities/excel.html#개요","2257":"/utilities/excel.html#주요-함수","2258":"/utilities/excel.html#gfhtmlexceldown-obj","2259":"/utilities/excel.html#gfsavetableasexcel-id-filename","2260":"/utilities/excel.html#gfsaveaggridasexcel-gridapi-filename","2261":"/utilities/excel.html#gfsaveaggridasexcel-2-columns-rowdata-filename","2262":"/utilities/excel.html#exceljs-직접-사용","2263":"/utilities/excel.html#관련-문서","2264":"/utilities/file.html#파일-처리","2265":"/utilities/file.html#개요","2266":"/utilities/file.html#주요-함수","2267":"/utilities/file.html#gffiledownload-obj","2268":"/utilities/file.html#gfgetuserimage-empcode-compcode","2269":"/utilities/file.html#파일-다운로드","2270":"/utilities/file.html#관련-문서","2271":"/utilities/fcm.html#fcm-유틸리티","2272":"/utilities/fcm.html#개요","2273":"/utilities/fcm.html#파일-위치","2274":"/utilities/fcm.html#현재-상태","2275":"/utilities/fcm.html#주요-함수-주석-처리됨","2276":"/utilities/fcm.html#gfisempty-obj","2277":"/utilities/fcm.html#gfaddday-date-add","2278":"/utilities/fcm.html#gfobjecttostring-obj-log","2279":"/utilities/fcm.html#gfgetthreecomma-val","2280":"/utilities/fcm.html#활성화된-함수","2281":"/utilities/fcm.html#사용-가이드","2282":"/utilities/fcm.html#함수-활성화","2283":"/utilities/fcm.html#대안-사용","2284":"/utilities/fcm.html#향후-계획","2285":"/utilities/fcm.html#관련-문서","2286":"/utilities/string.html#문자열-처리","2287":"/utilities/string.html#개요","2288":"/utilities/string.html#주요-함수","2289":"/utilities/string.html#gftrim-str","2290":"/utilities/string.html#gfcameltosnakeupper-str","2291":"/utilities/string.html#gfsnaketocamel-str","2292":"/utilities/string.html#gfformidstr-val","2293":"/utilities/string.html#gfsetclobdata-strstring-strappend-strseparator-strnull","2294":"/utilities/string.html#gfobjecttostring-obj-log","2295":"/utilities/string.html#전화번호-처리","2296":"/utilities/string.html#gfcheckphonehyphen-phonenum","2297":"/utilities/string.html#gfcheckphonenumber-p-num","2298":"/utilities/string.html#gfmobliephoneformat-str","2299":"/utilities/string.html#관련-문서","2300":"/utilities/number.html#숫자-처리","2301":"/utilities/number.html#개요","2302":"/utilities/number.html#주요-함수","2303":"/utilities/number.html#gfnumberformat-number-decimals-decpoint-thousandssep","2304":"/utilities/number.html#gfsetnumber-str","2305":"/utilities/number.html#gfgetcomma-val","2306":"/utilities/number.html#gfgetthreecomma-val","2307":"/utilities/number.html#gfrremovecomma-val","2308":"/utilities/number.html#gffillzeros-n-digits","2309":"/utilities/number.html#gfgetnumber-str","2310":"/utilities/number.html#gfgetround-val-unit","2311":"/utilities/number.html#관련-문서","2312":"/utilities/validation.html#폼-검증","2313":"/utilities/validation.html#개요","2314":"/utilities/validation.html#주요-함수","2315":"/utilities/validation.html#gfisempty-value","2316":"/utilities/validation.html#gfisdate-str","2317":"/utilities/validation.html#gfvalidateresidentnumber-residentnumber","2318":"/utilities/validation.html#gfcheckphonenumber-p-num","2319":"/utilities/validation.html#폼-검증-예제","2320":"/utilities/validation.html#관련-문서","2321":"/utilities/indexeddb.html#indexeddb-유틸리티","2322":"/utilities/indexeddb.html#개요","2323":"/utilities/indexeddb.html#파일-위치","2324":"/utilities/indexeddb.html#주요-함수","2325":"/utilities/indexeddb.html#savetoindexeddb-key-value","2326":"/utilities/indexeddb.html#loadfromindexeddb-key","2327":"/utilities/indexeddb.html#getkeyindexeddb","2328":"/utilities/indexeddb.html#removekeyindexeddb-key","2329":"/utilities/indexeddb.html#removeallkeyindexeddb","2330":"/utilities/indexeddb.html#getpagedata-pagedata-callback","2331":"/utilities/indexeddb.html#데이터-압축","2332":"/utilities/indexeddb.html#탭-스토어-연동","2333":"/utilities/indexeddb.html#주의사항","2334":"/utilities/indexeddb.html#관련-문서"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[3,1,51],"1":[1,3,1],"2":[2,4,2],"3":[2,4,2],"4":[2,4,2],"5":[1,3,11],"6":[3,1,6],"7":[2,3,15],"8":[2,3,1],"9":[4,4,91],"10":[2,3,1],"11":[2,4,15],"12":[2,4,15],"13":[1,4,10],"14":[2,3,1],"15":[2,5,34],"16":[3,3,34],"17":[1,3,34],"18":[2,3,5],"19":[3,1,6],"20":[2,3,12],"21":[2,3,1],"22":[4,4,87],"23":[1,3,1],"24":[3,4,12],"25":[1,3,22],"26":[2,3,5],"27":[4,1,6],"28":[2,4,17],"29":[2,4,1],"30":[4,5,102],"31":[5,5,72],"32":[5,5,66],"33":[6,5,70],"34":[5,5,48],"35":[3,4,1],"36":[2,6,19],"37":[2,6,12],"38":[1,4,31],"39":[2,4,6],"40":[3,1,7],"41":[2,3,12],"42":[2,3,1],"43":[5,4,25],"44":[2,8,31],"45":[5,8,130],"46":[3,4,114],"47":[3,3,1],"48":[2,5,15],"49":[2,5,11],"50":[2,5,19],"51":[1,3,40],"52":[2,3,6],"53":[3,1,8],"54":[2,3,12],"55":[2,3,1],"56":[5,4,96],"57":[5,4,72],"58":[3,3,1],"59":[3,5,43],"60":[1,3,21],"61":[2,3,6],"62":[3,1,9],"63":[2,3,15],"64":[2,3,1],"65":[7,4,58],"66":[2,9,13],"67":[3,9,12],"68":[2,9,21],"69":[5,9,13],"70":[2,9,38],"71":[6,9,84],"72":[7,4,56],"73":[4,4,27],"74":[4,4,23],"75":[4,4,45],"76":[5,4,37],"77":[3,3,1],"78":[2,5,17],"79":[2,5,20],"80":[2,5,1],"81":[3,6,24],"82":[3,6,16],"83":[2,5,17],"84":[1,5,17],"85":[3,3,8],"86":[2,3,17],"87":[1,3,34],"88":[2,3,6],"89":[3,1,5],"90":[2,3,12],"91":[2,3,1],"92":[4,4,60],"93":[3,6,59],"94":[3,6,118],"95":[2,3,1],"96":[3,4,20],"97":[2,3,8],"98":[1,3,29],"99":[2,3,5],"100":[3,1,8],"101":[2,3,12],"102":[2,3,1],"103":[4,4,136],"104":[3,4,54],"105":[2,4,74],"106":[3,4,16],"107":[4,4,24],"108":[2,3,1],"109":[3,4,12],"110":[3,4,11],"111":[3,4,16],"112":[3,4,4],"113":[4,4,10],"114":[1,3,30],"115":[2,3,6],"116":[3,1,6],"117":[2,3,12],"118":[2,3,1],"119":[4,4,79],"120":[4,4,73],"121":[3,4,73],"122":[3,3,23],"123":[1,3,22],"124":[2,3,7],"125":[3,1,4],"126":[2,3,7],"127":[2,3,6],"128":[2,3,6],"129":[2,1,9],"130":[2,2,27],"131":[2,2,1],"132":[2,4,7],"133":[3,6,4],"134":[3,6,8],"135":[3,4,6],"136":[2,6,6],"137":[2,6,9],"138":[3,4,33],"139":[2,4,15],"140":[3,2,1],"141":[3,4,15],"142":[3,4,5],"143":[3,4,3],"144":[2,2,17],"145":[2,2,8],"146":[2,1,6],"147":[1,2,1],"148":[3,3,5],"149":[2,2,21],"150":[2,2,5],"151":[2,2,5],"152":[1,1,6],"153":[2,1,1],"154":[2,2,17],"155":[2,1,1],"156":[1,3,11],"157":[2,3,6],"158":[2,1,1],"159":[3,3,8],"160":[2,1,5],"161":[2,1,7],"162":[2,2,1],"163":[2,3,32],"164":[3,3,9],"165":[2,2,45],"166":[2,2,1],"167":[1,3,14],"168":[2,2,5],"169":[2,1,7],"170":[1,2,1],"171":[2,3,18],"172":[2,2,25],"173":[2,2,5],"174":[2,1,10],"175":[1,2,17],"176":[3,2,1],"177":[4,3,14],"178":[3,3,35],"179":[4,3,29],"180":[3,3,41],"181":[2,2,1],"182":[3,4,18],"183":[3,4,15],"184":[3,2,1],"185":[2,4,17],"186":[2,4,20],"187":[2,4,1],"188":[3,5,9],"189":[3,5,9],"190":[2,4,12],"191":[1,4,17],"192":[2,2,1],"193":[2,4,6],"194":[2,4,5],"195":[2,4,19],"196":[3,2,1],"197":[2,4,91],"198":[2,2,1],"199":[3,4,85],"200":[1,2,38],"201":[2,2,9],"202":[2,1,7],"203":[1,2,23],"204":[2,2,1],"205":[2,4,31],"206":[1,4,47],"207":[2,4,1],"208":[1,6,12],"209":[2,6,12],"210":[2,2,1],"211":[1,4,30],"212":[1,4,12],"213":[2,2,1],"214":[1,4,37],"215":[1,4,15],"216":[3,2,1],"217":[1,5,30],"218":[2,2,1],"219":[1,4,20],"220":[3,2,1],"221":[3,4,24],"222":[2,2,1],"223":[2,4,37],"224":[4,4,23],"225":[1,2,32],"226":[2,2,10],"227":[2,1,6],"228":[1,2,1],"229":[2,3,20],"230":[2,2,12],"231":[2,2,5],"232":[2,1,6],"233":[1,2,4],"234":[2,3,27],"235":[1,2,18],"236":[1,2,19],"237":[2,2,4],"238":[2,1,9],"239":[3,2,20],"240":[5,2,11],"241":[2,2,1],"242":[3,3,23],"243":[2,2,12],"244":[2,2,27],"245":[2,2,17],"246":[2,2,1],"247":[2,3,14],"248":[3,2,9],"249":[3,2,21],"250":[2,2,16],"251":[2,2,4],"252":[2,1,13],"253":[3,2,15],"254":[2,2,1],"255":[2,3,19],"256":[2,3,16],"257":[2,2,17],"258":[2,2,18],"259":[1,2,8],"260":[3,3,17],"261":[2,3,12],"262":[2,2,1],"263":[3,3,15],"264":[3,3,17],"265":[2,2,5],"266":[2,1,11],"267":[3,2,1],"268":[3,3,12],"269":[1,2,6],"270":[2,3,21],"271":[3,3,20],"272":[1,2,1],"273":[2,3,18],"274":[3,3,18],"275":[2,2,1],"276":[2,3,9],"277":[2,3,10],"278":[3,2,1],"279":[2,4,19],"280":[2,4,11],"281":[2,4,11],"282":[2,2,6],"283":[2,1,6],"284":[3,2,1],"285":[2,5,15],"286":[3,5,16],"287":[2,5,7],"288":[2,2,1],"289":[2,3,16],"290":[2,3,12],"291":[2,2,1],"292":[3,4,20],"293":[1,4,16],"294":[1,4,21],"295":[2,2,1],"296":[4,4,18],"297":[3,4,29],"298":[2,2,1],"299":[3,4,5],"300":[3,4,13],"301":[3,4,5],"302":[2,2,4],"303":[3,1,6],"304":[2,3,1],"305":[2,4,28],"306":[3,3,1],"307":[2,6,9],"308":[2,6,42],"309":[2,3,1],"310":[2,5,35],"311":[1,5,18],"312":[2,3,1],"313":[1,5,24],"314":[1,5,24],"315":[2,3,7],"316":[3,1,8],"317":[1,3,6],"318":[2,4,23],"319":[2,4,7],"320":[1,3,6],"321":[2,4,19],"322":[2,4,11],"323":[2,4,11],"324":[3,4,12],"325":[1,3,4],"326":[2,4,15],"327":[2,3,6],"328":[2,1,6],"329":[2,2,15],"330":[3,2,15],"331":[3,2,12],"332":[3,2,14],"333":[3,2,39],"334":[2,2,1],"335":[1,4,23],"336":[1,4,23],"337":[1,4,16],"338":[2,2,7],"339":[2,1,5],"340":[3,2,5],"341":[3,2,13],"342":[2,2,3],"343":[2,1,8],"344":[2,2,10],"345":[2,2,2],"346":[4,1,7],"347":[2,4,11],"348":[2,4,6],"349":[2,4,6],"350":[2,4,1],"351":[1,6,6],"352":[1,6,9],"353":[2,4,7],"354":[3,1,7],"355":[3,3,1],"356":[2,6,9],"357":[1,6,7],"358":[3,3,13],"359":[2,3,4],"360":[3,1,8],"361":[2,3,1],"362":[3,4,8],"363":[2,3,7],"364":[3,1,8],"365":[1,3,20],"366":[3,3,1],"367":[4,4,27],"368":[4,4,42],"369":[3,4,1],"370":[2,7,21],"371":[2,7,25],"372":[3,4,16],"373":[4,4,1],"374":[3,8,13],"375":[4,4,11],"376":[3,3,1],"377":[2,6,20],"378":[2,6,1],"379":[1,8,10],"380":[1,8,10],"381":[1,8,7],"382":[2,3,1],"383":[4,5,9],"384":[3,5,23],"385":[3,5,23],"386":[3,5,17],"387":[4,5,9],"388":[5,3,30],"389":[3,3,9],"390":[1,6,31],"391":[2,6,7],"392":[1,6,9],"393":[3,3,32],"394":[3,3,26],"395":[2,3,7],"396":[1,3,30],"397":[2,3,25],"398":[2,3,13],"399":[2,1,5],"400":[2,2,51],"401":[2,2,1],"402":[1,4,6],"403":[1,4,9],"404":[2,2,6],"405":[3,1,7],"406":[4,3,15],"407":[3,3,14],"408":[3,3,12],"409":[5,3,8],"410":[2,3,5],"411":[2,1,5],"412":[1,2,14],"413":[2,2,33],"414":[2,2,8],"415":[2,2,7],"416":[2,1,5],"417":[2,2,39],"418":[2,2,26],"419":[2,2,6],"420":[3,1,7],"421":[2,3,51],"422":[2,3,7],"423":[2,3,4],"424":[2,1,1],"425":[2,2,23],"426":[2,2,1],"427":[4,4,16],"428":[4,4,16],"429":[4,4,20],"430":[3,4,7],"431":[3,4,12],"432":[2,2,36],"433":[3,2,27],"434":[2,2,28],"435":[2,2,13],"436":[2,1,11],"437":[3,2,48],"438":[4,2,1],"439":[6,5,57],"440":[6,5,18],"441":[6,5,11],"442":[3,2,1],"443":[6,4,17],"444":[6,4,18],"445":[7,4,14],"446":[6,4,11],"447":[3,2,1],"448":[4,5,25],"449":[3,5,22],"450":[3,2,1],"451":[3,5,34],"452":[3,5,19],"453":[3,5,14],"454":[3,2,21],"455":[5,2,23],"456":[2,2,15],"457":[2,1,1],"458":[2,2,1],"459":[4,3,41],"460":[3,3,32],"461":[2,3,8],"462":[3,5,16],"463":[1,5,16],"464":[1,5,16],"465":[5,3,20],"466":[4,3,22],"467":[2,2,1],"468":[4,3,11],"469":[3,3,11],"470":[3,2,1],"471":[4,4,22],"472":[1,4,14],"473":[2,2,25],"474":[2,2,11],"475":[3,1,10],"476":[5,3,1],"477":[3,8,13],"478":[5,8,22],"479":[3,3,1],"480":[4,5,13],"481":[4,5,14],"482":[3,7,21],"483":[3,7,19],"484":[3,7,20],"485":[6,5,14],"486":[3,3,1],"487":[6,5,1],"488":[1,9,14],"489":[2,9,13],"490":[6,5,24],"491":[3,3,1],"492":[6,5,23],"493":[4,5,19],"494":[5,5,25],"495":[3,3,1],"496":[5,6,14],"497":[4,6,16],"498":[3,3,1],"499":[4,6,1],"500":[2,8,17],"501":[1,8,13],"502":[4,6,15],"503":[5,6,19],"504":[3,3,1],"505":[5,6,19],"506":[4,6,20],"507":[4,6,11],"508":[3,3,1],"509":[4,6,16],"510":[5,6,14],"511":[5,6,10],"512":[2,3,11],"513":[3,1,7],"514":[3,3,20],"515":[2,3,1],"516":[1,4,32],"517":[2,4,1],"518":[4,6,6],"519":[5,6,6],"520":[4,6,5],"521":[4,6,5],"522":[2,3,1],"523":[1,4,26],"524":[2,4,1],"525":[5,6,5],"526":[4,6,6],"527":[4,6,6],"528":[3,3,1],"529":[2,6,53],"530":[2,6,17],"531":[3,3,1],"532":[2,6,29],"533":[3,3,1],"534":[1,6,14],"535":[2,6,33],"536":[2,3,7],"537":[4,1,1],"538":[4,4,61],"539":[5,4,37],"540":[4,4,35],"541":[4,4,33],"542":[6,4,64],"543":[3,4,30],"544":[3,4,21],"545":[2,4,18],"546":[2,4,14],"547":[2,4,15],"548":[3,1,10],"549":[3,3,31],"550":[4,3,1],"551":[2,5,83],"552":[2,5,18],"553":[4,3,1],"554":[6,6,67],"555":[6,6,18],"556":[6,6,15],"557":[3,3,27],"558":[2,3,18],"559":[3,3,1],"560":[4,5,14],"561":[4,5,12],"562":[4,5,9],"563":[2,5,11],"564":[2,5,10],"565":[3,3,24],"566":[2,3,8],"567":[3,1,10],"568":[2,3,30],"569":[3,3,1],"570":[5,5,37],"571":[5,5,1],"572":[6,9,9],"573":[5,9,10],"574":[6,9,7],"575":[6,9,12],"576":[6,9,9],"577":[6,9,14],"578":[5,5,1],"579":[3,10,16],"580":[3,10,14],"581":[2,10,16],"582":[3,10,10],"583":[3,10,14],"584":[4,5,1],"585":[7,9,5],"586":[7,9,5],"587":[7,9,9],"588":[5,5,12],"589":[5,5,15],"590":[5,5,15],"591":[5,5,14],"592":[3,3,1],"593":[2,5,23],"594":[2,5,24],"595":[1,5,15],"596":[2,3,7],"597":[3,1,9],"598":[2,3,107],"599":[2,3,1],"600":[2,5,67],"601":[2,5,51],"602":[2,5,25],"603":[2,5,27],"604":[2,5,60],"605":[3,5,1],"606":[1,8,5],"607":[1,8,4],"608":[1,8,4],"609":[1,8,22],"610":[2,3,1],"611":[1,4,26],"612":[2,3,9],"613":[3,1,9],"614":[2,3,24],"615":[2,3,1],"616":[2,5,46],"617":[2,5,60],"618":[2,5,20],"619":[1,3,1],"620":[3,4,13],"621":[3,4,10],"622":[2,3,1],"623":[4,5,22],"624":[2,3,1],"625":[4,5,29],"626":[3,5,40],"627":[1,3,1],"628":[2,4,14],"629":[1,3,39],"630":[2,3,10],"631":[3,1,8],"632":[2,3,24],"633":[3,3,1],"634":[2,4,82],"635":[2,4,54],"636":[2,4,81],"637":[2,4,53],"638":[2,4,40],"639":[2,4,17],"640":[3,3,1],"641":[2,5,10],"642":[3,5,15],"643":[2,3,10],"644":[2,3,9],"645":[3,1,8],"646":[2,3,16],"647":[2,3,1],"648":[2,5,53],"649":[2,5,73],"650":[3,3,1],"651":[3,5,65],"652":[3,5,37],"653":[2,3,1],"654":[2,4,13],"655":[2,4,11],"656":[2,4,10],"657":[1,3,1],"658":[2,4,17],"659":[2,3,1],"660":[3,5,9],"661":[2,5,10],"662":[2,3,1],"663":[2,5,57],"664":[2,5,28],"665":[1,3,39],"666":[2,3,10],"667":[3,1,7],"668":[2,3,25],"669":[2,3,1],"670":[2,4,72],"671":[2,4,51],"672":[2,4,55],"673":[2,4,16],"674":[2,3,1],"675":[1,4,41],"676":[3,3,25],"677":[2,3,1],"678":[1,5,22],"679":[3,3,1],"680":[3,6,25],"681":[1,3,26],"682":[2,3,7],"683":[3,1,6],"684":[2,3,20],"685":[2,3,1],"686":[2,5,15],"687":[2,5,18],"688":[2,5,19],"689":[3,3,1],"690":[2,6,18],"691":[2,3,1],"692":[3,5,24],"693":[4,5,31],"694":[4,5,27],"695":[2,3,1],"696":[5,4,29],"697":[2,3,1],"698":[1,5,24],"699":[1,3,27],"700":[2,3,9],"701":[3,1,9],"702":[2,3,20],"703":[2,3,1],"704":[2,5,66],"705":[2,5,18],"706":[3,3,1],"707":[3,4,24],"708":[4,4,35],"709":[5,4,31],"710":[3,4,15],"711":[3,3,20],"712":[3,3,1],"713":[2,5,15],"714":[2,5,12],"715":[2,5,12],"716":[2,5,11],"717":[2,3,1],"718":[2,5,5],"719":[2,5,6],"720":[2,3,1],"721":[3,5,29],"722":[3,5,21],"723":[1,3,29],"724":[2,3,11],"725":[3,1,7],"726":[2,3,20],"727":[2,3,1],"728":[2,5,44],"729":[2,5,46],"730":[3,3,1],"731":[4,4,49],"732":[5,4,49],"733":[2,3,1],"734":[2,4,13],"735":[3,4,15],"736":[2,3,1],"737":[2,5,6],"738":[2,3,9],"739":[1,3,1],"740":[2,4,28],"741":[2,3,1],"742":[2,5,46],"743":[2,5,11],"744":[1,3,35],"745":[2,3,8],"746":[3,1,8],"747":[2,3,34],"748":[2,3,1],"749":[3,4,14],"750":[3,4,30],"751":[2,3,1],"752":[2,5,23],"753":[3,5,39],"754":[3,5,18],"755":[2,3,1],"756":[2,5,23],"757":[3,5,15],"758":[2,3,1],"759":[2,5,37],"760":[3,3,1],"761":[3,5,22],"762":[2,3,1],"763":[3,5,25],"764":[1,3,1],"765":[2,4,16],"766":[2,3,5],"767":[3,1,5],"768":[2,3,6],"769":[2,3,10],"770":[2,3,10],"771":[2,3,4],"772":[3,1,7],"773":[2,3,13],"774":[2,3,12],"775":[2,3,4],"776":[3,1,8],"777":[2,3,4],"778":[1,3,6],"779":[2,3,4],"780":[1,3,5],"781":[1,3,4],"782":[2,3,4],"783":[1,3,6],"784":[2,1,6],"785":[2,2,4],"786":[2,4,15],"787":[1,4,10],"788":[1,2,4],"789":[2,3,15],"790":[1,3,27],"791":[2,2,1],"792":[1,4,10],"793":[2,4,10],"794":[2,2,5],"795":[2,1,8],"796":[3,2,6],"797":[2,2,1],"798":[1,3,19],"799":[1,3,20],"800":[2,2,1],"801":[1,3,21],"802":[3,2,1],"803":[1,4,24],"804":[2,4,16],"805":[3,2,1],"806":[1,4,4],"807":[2,2,5],"808":[2,1,10],"809":[2,2,1],"810":[2,4,11],"811":[2,4,10],"812":[2,2,17],"813":[2,2,18],"814":[2,2,1],"815":[2,4,5],"816":[1,4,6],"817":[1,4,4],"818":[3,2,19],"819":[2,2,5],"820":[3,1,8],"821":[1,3,1],"822":[2,4,25],"823":[3,4,11],"824":[2,3,1],"825":[3,5,23],"826":[3,5,6],"827":[3,5,19],"828":[2,3,1],"829":[1,5,17],"830":[1,5,17],"831":[2,3,5],"832":[1,1,12],"833":[2,1,1],"834":[4,2,54],"835":[2,2,43],"836":[2,2,40],"837":[2,1,1],"838":[1,3,37],"839":[3,1,7],"840":[2,4,11],"841":[2,4,10],"842":[2,1,1],"843":[3,3,15],"844":[3,3,11],"845":[2,1,1],"846":[4,3,29],"847":[3,3,7],"848":[4,1,1],"849":[1,5,8],"850":[1,5,12],"851":[1,5,10],"852":[2,1,7],"853":[3,1,9],"854":[2,3,1],"855":[1,5,6],"856":[1,5,10],"857":[2,5,16],"858":[4,3,1],"859":[2,6,57],"860":[2,6,1],"861":[2,8,14],"862":[2,8,18],"863":[2,8,13],"864":[2,8,26],"865":[2,3,1],"866":[2,5,16],"867":[2,5,13],"868":[2,3,1],"869":[3,5,24],"870":[2,5,20],"871":[2,3,1],"872":[3,4,17],"873":[2,4,17],"874":[2,3,6],"875":[2,1,7],"876":[2,2,1],"877":[1,4,5],"878":[1,4,8],"879":[2,4,31],"880":[1,2,1],"881":[1,3,6],"882":[1,3,11],"883":[2,3,31],"884":[1,2,1],"885":[1,3,5],"886":[1,3,11],"887":[2,3,13],"888":[2,3,29],"889":[3,3,17],"890":[2,2,1],"891":[1,3,39],"892":[3,3,15],"893":[2,2,1],"894":[2,3,45],"895":[2,2,1],"896":[1,3,24],"897":[3,2,1],"898":[1,5,20],"899":[2,2,8],"900":[3,1,7],"901":[2,3,1],"902":[1,5,6],"903":[2,5,1],"904":[4,7,26],"905":[4,7,22],"906":[2,7,17],"907":[1,3,1],"908":[1,4,8],"909":[1,4,12],"910":[1,4,15],"911":[1,3,1],"912":[1,4,5],"913":[2,4,13],"914":[2,4,11],"915":[2,3,1],"916":[1,5,10],"917":[2,5,11],"918":[2,5,4],"919":[2,3,1],"920":[1,5,6],"921":[1,5,16],"922":[1,3,1],"923":[1,4,9],"924":[1,4,12],"925":[2,3,1],"926":[2,5,1],"927":[2,6,16],"928":[2,6,12],"929":[2,6,18],"930":[5,3,1],"931":[1,8,5],"932":[1,8,10],"933":[2,8,13],"934":[2,3,1],"935":[1,5,5],"936":[1,5,12],"937":[2,3,5],"938":[3,1,10],"939":[5,3,1],"940":[1,8,5],"941":[2,8,1],"942":[2,9,12],"943":[2,9,11],"944":[2,8,17],"945":[2,8,18],"946":[1,8,12],"947":[2,3,1],"948":[1,5,33],"949":[3,5,18],"950":[4,5,18],"951":[3,3,1],"952":[1,5,25],"953":[2,5,24],"954":[1,3,1],"955":[2,4,26],"956":[1,4,43],"957":[2,4,1],"958":[1,6,10],"959":[2,6,10],"960":[2,3,1],"961":[2,5,17],"962":[2,5,10],"963":[2,5,22],"964":[2,3,34],"965":[2,3,7],"966":[2,1,7],"967":[1,2,1],"968":[1,3,4],"969":[1,3,6],"970":[2,3,23],"971":[1,2,1],"972":[1,3,5],"973":[1,3,7],"974":[2,3,18],"975":[3,2,1],"976":[1,5,6],"977":[1,5,10],"978":[2,5,21],"979":[2,2,1],"980":[1,4,6],"981":[1,4,7],"982":[2,4,23],"983":[2,2,1],"984":[1,4,4],"985":[1,4,5],"986":[2,4,21],"987":[2,2,7],"988":[2,1,6],"989":[2,2,14],"990":[2,2,3],"991":[2,1,7],"992":[3,2,6],"993":[3,2,8],"994":[2,2,3],"995":[2,1,6],"996":[2,2,27],"997":[2,2,4],"998":[3,1,7],"999":[2,3,16],"1000":[3,3,12],"1001":[3,3,12],"1002":[2,3,3],"1003":[2,1,1],"1004":[1,2,1],"1005":[2,3,9],"1006":[2,3,10],"1007":[2,2,19],"1008":[2,1,1],"1009":[1,2,1],"1010":[2,3,9],"1011":[2,3,11],"1012":[2,2,18],"1013":[2,1,1],"1014":[1,2,1],"1015":[2,3,8],"1016":[2,3,20],"1017":[4,1,1],"1018":[1,4,1],"1019":[2,4,9],"1020":[2,4,19],"1021":[2,1,1],"1022":[1,2,11],"1023":[1,2,1],"1024":[1,3,13],"1025":[2,3,9],"1026":[1,3,36],"1027":[2,3,39],"1028":[2,3,2],"1029":[3,3,39],"1030":[1,2,1],"1031":[1,3,18],"1032":[2,3,9],"1033":[1,3,50],"1034":[2,3,24],"1035":[2,3,55],"1036":[3,3,35],"1037":[1,2,1],"1038":[1,3,7],"1039":[2,3,9],"1040":[2,3,20],"1041":[3,2,8],"1042":[1,5,17],"1043":[2,5,32],"1044":[2,2,20],"1045":[1,2,27],"1046":[2,2,7],"1047":[2,1,1],"1048":[1,2,5],"1049":[2,3,9],"1050":[1,2,5],"1051":[2,3,9],"1052":[1,2,5],"1053":[2,3,9],"1054":[3,1,1],"1055":[1,3,8],"1056":[2,3,33],"1057":[2,3,16],"1058":[3,1,1],"1059":[1,3,1],"1060":[1,4,9],"1061":[2,4,8],"1062":[2,4,11],"1063":[2,4,38],"1064":[1,4,15],"1065":[3,1,1],"1066":[1,3,1],"1067":[1,4,9],"1068":[2,4,8],"1069":[2,4,1],"1070":[4,6,4],"1071":[3,6,10],"1072":[2,4,33],"1073":[3,4,7],"1074":[3,1,1],"1075":[1,3,9],"1076":[2,4,8],"1077":[2,4,27],"1078":[2,1,1],"1079":[2,2,1],"1080":[1,4,7],"1081":[2,4,7],"1082":[1,4,9],"1083":[2,4,16],"1084":[2,1,1],"1085":[2,2,1],"1086":[1,4,4],"1087":[2,4,7],"1088":[3,4,12],"1089":[2,4,15],"1090":[2,4,7],"1091":[2,4,15],"1092":[2,1,1],"1093":[2,2,1],"1094":[1,4,5],"1095":[2,4,7],"1096":[1,4,10],"1097":[3,4,28],"1098":[2,4,13],"1099":[2,4,20],"1100":[2,1,1],"1101":[1,2,1],"1102":[1,3,5],"1103":[2,3,8],"1104":[2,3,11],"1105":[2,3,17],"1106":[3,3,9],"1107":[2,1,1],"1108":[1,2,1],"1109":[1,3,5],"1110":[2,3,8],"1111":[2,3,12],"1112":[2,3,17],"1113":[2,3,8],"1114":[2,1,1],"1115":[1,2,1],"1116":[1,3,5],"1117":[2,3,8],"1118":[2,3,11],"1119":[2,3,17],"1120":[2,3,6],"1121":[1,3,11],"1122":[3,1,1],"1123":[1,3,1],"1124":[1,4,6],"1125":[2,4,8],"1126":[2,4,32],"1127":[1,4,9],"1128":[2,1,1],"1129":[1,2,6],"1130":[2,3,8],"1131":[1,2,5],"1132":[2,3,8],"1133":[1,2,5],"1134":[2,3,8],"1135":[3,1,1],"1136":[1,3,1],"1137":[1,4,6],"1138":[2,4,8],"1139":[2,4,6],"1140":[2,4,28],"1141":[2,1,1],"1142":[1,2,5],"1143":[2,3,8],"1144":[1,2,6],"1145":[2,3,8],"1146":[3,1,1],"1147":[1,3,1],"1148":[1,4,6],"1149":[2,4,8],"1150":[2,4,8],"1151":[2,4,22],"1152":[3,1,1],"1153":[1,3,1],"1154":[1,4,10],"1155":[2,4,8],"1156":[2,4,7],"1157":[2,4,23],"1158":[4,1,1],"1159":[1,4,11],"1160":[2,4,6],"1161":[2,4,17],"1162":[2,4,19],"1163":[2,4,10],"1164":[1,4,15],"1165":[4,1,1],"1166":[1,4,10],"1167":[3,4,11],"1168":[3,4,15],"1169":[3,4,18],"1170":[2,4,1],"1171":[5,5,9],"1172":[5,5,11],"1173":[1,4,28],"1174":[2,1,1],"1175":[1,2,4],"1176":[2,2,4],"1177":[2,2,4],"1178":[1,3,8],"1179":[2,2,1],"1180":[2,3,5],"1181":[2,3,5],"1182":[2,3,7],"1183":[2,2,6],"1184":[2,2,13],"1185":[2,2,21],"1186":[2,1,1],"1187":[1,2,6],"1188":[2,2,4],"1189":[2,2,17],"1190":[2,2,1],"1191":[2,3,5],"1192":[2,3,4],"1193":[2,3,4],"1194":[2,2,14],"1195":[1,2,11],"1196":[2,1,1],"1197":[1,2,12],"1198":[2,2,1],"1199":[1,3,22],"1200":[2,3,20],"1201":[2,3,12],"1202":[2,2,16],"1203":[2,2,4],"1204":[3,2,1],"1205":[1,4,15],"1206":[1,4,12],"1207":[2,1,1],"1208":[1,2,14],"1209":[2,2,21],"1210":[2,2,1],"1211":[4,3,18],"1212":[4,3,40],"1213":[2,2,15],"1214":[2,2,1],"1215":[3,3,14],"1216":[3,3,14],"1217":[4,3,17],"1218":[2,2,1],"1219":[2,4,23],"1220":[3,4,18],"1221":[1,2,26],"1222":[2,2,5],"1223":[2,1,1],"1224":[1,2,15],"1225":[2,2,1],"1226":[2,4,24],"1227":[2,4,17],"1228":[2,2,1],"1229":[2,3,28],"1230":[3,3,21],"1231":[3,3,9],"1232":[2,2,1],"1233":[3,4,13],"1234":[3,4,3],"1235":[3,4,7],"1236":[2,2,24],"1237":[2,2,7],"1238":[2,1,1],"1239":[1,2,13],"1240":[3,2,16],"1241":[2,2,1],"1242":[3,4,19],"1243":[4,4,12],"1244":[3,4,14],"1245":[3,4,16],"1246":[3,4,7],"1247":[2,4,7],"1248":[4,2,30],"1249":[4,2,19],"1250":[3,2,39],"1251":[2,2,16],"1252":[1,2,25],"1253":[2,2,5],"1254":[2,1,1],"1255":[1,2,10],"1256":[3,2,14],"1257":[2,2,1],"1258":[5,3,14],"1259":[6,3,22],"1260":[4,3,12],"1261":[3,2,36],"1262":[3,2,22],"1263":[2,2,26],"1264":[1,2,27],"1265":[2,2,5],"1266":[3,1,1],"1267":[1,3,24],"1268":[2,3,4],"1269":[2,3,19],"1270":[3,4,12],"1271":[2,3,6],"1272":[2,5,25],"1273":[2,5,45],"1274":[2,3,6],"1275":[2,5,24],"1276":[3,5,79],"1277":[2,3,1],"1278":[2,5,23],"1279":[2,5,28],"1280":[2,5,26],"1281":[2,5,34],"1282":[2,3,10],"1283":[2,5,12],"1284":[2,5,11],"1285":[2,3,1],"1286":[2,5,19],"1287":[6,5,10],"1288":[2,5,15],"1289":[1,3,39],"1290":[2,3,8],"1291":[2,1,1],"1292":[1,2,11],"1293":[2,2,1],"1294":[3,4,6],"1295":[4,4,15],"1296":[4,4,10],"1297":[4,4,11],"1298":[3,4,18],"1299":[2,2,52],"1300":[2,2,15],"1301":[3,2,15],"1302":[2,2,17],"1303":[2,2,31],"1304":[2,2,8],"1305":[2,1,1],"1306":[1,2,9],"1307":[3,2,1],"1308":[7,3,24],"1309":[7,3,30],"1310":[3,3,30],"1311":[6,3,38],"1312":[3,3,25],"1313":[3,2,19],"1314":[3,2,37],"1315":[3,2,1],"1316":[2,4,8],"1317":[3,4,32],"1318":[2,2,45],"1319":[3,2,19],"1320":[2,2,23],"1321":[2,2,8],"1322":[2,1,1],"1323":[1,2,11],"1324":[3,2,1],"1325":[3,4,3],"1326":[4,4,22],"1327":[4,4,4],"1328":[3,2,1],"1329":[3,4,3],"1330":[4,4,14],"1331":[8,4,24],"1332":[8,4,14],"1333":[4,4,22],"1334":[4,4,15],"1335":[3,2,1],"1336":[3,5,22],"1337":[3,5,57],"1338":[3,2,35],"1339":[3,2,14],"1340":[2,2,1],"1341":[3,4,25],"1342":[2,4,34],"1343":[2,2,10],"1344":[2,1,1],"1345":[1,2,8],"1346":[3,2,1],"1347":[3,4,14],"1348":[2,4,20],"1349":[3,4,19],"1350":[3,2,28],"1351":[2,2,1],"1352":[3,4,21],"1353":[1,2,20],"1354":[2,2,6],"1355":[2,1,1],"1356":[1,2,7],"1357":[2,2,7],"1358":[2,3,40],"1359":[1,3,16],"1360":[3,2,23],"1361":[2,2,18],"1362":[2,2,22],"1363":[2,2,5],"1364":[2,1,1],"1365":[1,2,9],"1366":[3,2,25],"1367":[2,2,1],"1368":[2,3,12],"1369":[2,3,7],"1370":[3,2,15],"1371":[1,2,1],"1372":[2,3,5],"1373":[2,3,4],"1374":[2,3,4],"1375":[2,2,5],"1376":[4,1,1],"1377":[1,4,13],"1378":[2,4,6],"1379":[3,4,8],"1380":[1,6,16],"1381":[3,4,1],"1382":[3,6,22],"1383":[2,6,14],"1384":[3,4,1],"1385":[1,6,39],"1386":[2,4,1],"1387":[2,5,41],"1388":[2,5,23],"1389":[3,5,30],"1390":[1,4,41],"1391":[2,4,9],"1392":[4,1,1],"1393":[1,4,8],"1394":[2,4,6],"1395":[3,4,5],"1396":[3,4,1],"1397":[2,6,4],"1398":[2,6,4],"1399":[2,4,29],"1400":[1,4,14],"1401":[4,1,1],"1402":[1,4,13],"1403":[2,4,6],"1404":[3,4,10],"1405":[2,4,1],"1406":[2,5,5],"1407":[4,5,17],"1408":[2,5,4],"1409":[2,4,27],"1410":[2,4,29],"1411":[1,4,7],"1412":[4,1,1],"1413":[1,4,8],"1414":[2,4,6],"1415":[3,4,13],"1416":[2,4,1],"1417":[3,5,4],"1418":[3,5,5],"1419":[2,5,5],"1420":[2,4,28],"1421":[4,1,1],"1422":[1,4,8],"1423":[2,4,6],"1424":[3,4,9],"1425":[3,4,1],"1426":[4,6,28],"1427":[2,6,10],"1428":[2,4,38],"1429":[2,1,1],"1430":[4,2,1],"1431":[1,5,7],"1432":[2,5,6],"1433":[2,5,8],"1434":[2,5,24],"1435":[2,5,33],"1436":[5,2,1],"1437":[1,6,7],"1438":[2,6,6],"1439":[2,6,10],"1440":[2,6,29],"1441":[4,2,1],"1442":[1,5,6],"1443":[2,5,6],"1444":[2,5,7],"1445":[2,5,23],"1446":[4,1,1],"1447":[1,4,8],"1448":[2,4,6],"1449":[3,4,6],"1450":[2,4,1],"1451":[3,5,4],"1452":[4,5,5],"1453":[3,5,5],"1454":[2,4,27],"1455":[4,1,1],"1456":[1,4,15],"1457":[2,4,6],"1458":[3,4,18],"1459":[2,4,1],"1460":[3,5,27],"1461":[2,5,11],"1462":[2,4,1],"1463":[3,5,39],"1464":[3,5,30],"1465":[2,4,1],"1466":[2,5,10],"1467":[2,5,13],"1468":[3,4,32],"1469":[2,4,8],"1470":[4,1,1],"1471":[1,4,14],"1472":[2,4,6],"1473":[3,4,12],"1474":[2,4,1],"1475":[3,5,31],"1476":[3,5,8],"1477":[3,5,8],"1478":[2,5,6],"1479":[2,4,8],"1480":[2,4,31],"1481":[2,1,1],"1482":[2,2,5],"1483":[4,2,7],"1484":[4,2,6],"1485":[4,2,7],"1486":[2,2,4],"1487":[1,2,14],"1488":[3,1,1],"1489":[3,3,4],"1490":[2,3,11],"1491":[2,3,11],"1492":[1,3,6],"1493":[5,3,6],"1494":[1,3,8],"1495":[2,1,1],"1496":[2,2,6],"1497":[2,2,6],"1498":[1,2,6],"1499":[2,2,5],"1500":[3,2,8],"1501":[2,2,9],"1502":[2,1,1],"1503":[2,2,7],"1504":[2,2,6],"1505":[2,2,8],"1506":[1,2,7],"1507":[2,2,8],"1508":[2,1,1],"1509":[2,2,5],"1510":[2,2,8],"1511":[2,2,6],"1512":[3,2,6],"1513":[3,1,1],"1514":[1,3,7],"1515":[2,3,21],"1516":[2,3,27],"1517":[2,3,24],"1518":[2,3,20],"1519":[2,3,31],"1520":[3,1,1],"1521":[1,3,9],"1522":[3,3,17],"1523":[3,3,27],"1524":[3,3,1],"1525":[6,4,37],"1526":[5,4,30],"1527":[5,4,36],"1528":[5,4,27],"1529":[2,4,32],"1530":[2,4,22],"1531":[3,3,1],"1532":[3,4,19],"1533":[3,4,18],"1534":[2,3,52],"1535":[2,3,37],"1536":[4,3,57],"1537":[3,3,45],"1538":[4,3,49],"1539":[2,3,35],"1540":[2,3,9],"1541":[3,1,1],"1542":[2,3,1],"1543":[2,3,20],"1544":[3,3,7],"1545":[2,3,1],"1546":[2,3,34],"1547":[2,3,22],"1548":[2,3,41],"1549":[3,1,1],"1550":[2,3,1],"1551":[2,3,13],"1552":[2,3,20],"1553":[2,3,1],"1554":[2,3,14],"1555":[2,3,11],"1556":[2,3,17],"1557":[3,1,1],"1558":[3,3,14],"1559":[2,3,1],"1560":[2,4,10],"1561":[2,4,11],"1562":[1,4,7],"1563":[2,3,21],"1564":[3,1,1],"1565":[2,3,8],"1566":[2,3,15],"1567":[2,3,23],"1568":[2,3,14],"1569":[2,1,1],"1570":[1,2,14],"1571":[1,2,15],"1572":[1,2,18],"1573":[1,2,9],"1574":[2,2,12],"1575":[2,1,1],"1576":[2,2,9],"1577":[2,2,12],"1578":[2,2,18],"1579":[2,2,11],"1580":[4,1,1],"1581":[2,4,16],"1582":[1,4,16],"1583":[2,4,19],"1584":[2,4,13],"1585":[2,4,24],"1586":[2,1,1],"1587":[2,2,17],"1588":[2,2,33],"1589":[2,2,8],"1590":[2,1,1],"1591":[3,2,20],"1592":[2,2,12],"1593":[2,2,20],"1594":[2,2,11],"1595":[3,1,1],"1596":[1,3,7],"1597":[4,3,1],"1598":[4,5,16],"1599":[5,5,22],"1600":[5,5,32],"1601":[3,3,1],"1602":[5,6,9],"1603":[3,6,12],"1604":[6,6,13],"1605":[3,3,1],"1606":[5,6,26],"1607":[5,6,14],"1608":[3,3,1],"1609":[5,6,108],"1610":[3,3,1],"1611":[4,6,14],"1612":[4,6,15],"1613":[4,6,53],"1614":[4,6,29],"1615":[4,6,19],"1616":[2,3,1],"1617":[5,5,12],"1618":[4,5,10],"1619":[2,3,13],"1620":[2,1,1],"1621":[2,2,9],"1622":[2,2,12],"1623":[2,2,12],"1624":[2,1,1],"1625":[3,2,24],"1626":[3,2,14],"1627":[2,1,1],"1628":[3,2,7],"1629":[2,2,25],"1630":[1,2,12],"1631":[2,1,1],"1632":[2,2,10],"1633":[2,2,14],"1634":[2,2,7],"1635":[1,2,33],"1636":[2,1,1],"1637":[3,2,16],"1638":[2,2,21],"1639":[2,2,11],"1640":[2,1,1],"1641":[2,2,19],"1642":[2,2,9],"1643":[2,2,10],"1644":[2,2,10],"1645":[2,1,1],"1646":[2,2,17],"1647":[1,2,8],"1648":[2,2,16],"1649":[1,2,13],"1650":[2,2,7],"1651":[2,1,1],"1652":[3,2,73],"1653":[3,2,1],"1654":[4,5,7],"1655":[4,8,14],"1656":[4,8,10],"1657":[4,8,18],"1658":[4,5,8],"1659":[4,8,20],"1660":[4,8,29],"1661":[4,8,16],"1662":[5,5,7],"1663":[4,9,15],"1664":[4,9,18],"1665":[4,9,11],"1666":[4,9,8],"1667":[4,9,22],"1668":[5,5,9],"1669":[5,5,24],"1670":[4,5,8],"1671":[2,2,1],"1672":[2,4,7],"1673":[3,4,12],"1674":[2,4,11],"1675":[2,4,11],"1676":[3,2,19],"1677":[2,2,14],"1678":[2,1,1],"1679":[2,2,27],"1680":[2,2,60],"1681":[2,2,13],"1682":[3,2,1],"1683":[2,5,14],"1684":[2,5,8],"1685":[2,5,26],"1686":[2,2,44],"1687":[2,2,1],"1688":[2,4,12],"1689":[2,4,12],"1690":[2,4,10],"1691":[2,4,8],"1692":[2,2,13],"1693":[3,1,11],"1694":[5,3,16],"1695":[4,3,24],"1696":[4,3,9],"1697":[3,3,19],"1698":[5,3,1],"1699":[5,8,35],"1700":[4,8,21],"1701":[6,8,10],"1702":[3,3,47],"1703":[4,3,1],"1704":[3,7,28],"1705":[4,7,42],"1706":[4,3,30],"1707":[4,3,41],"1708":[2,3,1],"1709":[3,5,11],"1710":[2,5,19],"1711":[2,3,20],"1712":[2,1,1],"1713":[2,2,1],"1714":[2,4,17],"1715":[3,4,24],"1716":[1,4,13],"1717":[2,2,1],"1718":[2,4,16],"1719":[1,4,14],"1720":[2,2,19],"1721":[2,2,1],"1722":[2,3,11],"1723":[2,3,17],"1724":[2,2,1],"1725":[2,3,14],"1726":[2,3,23],"1727":[2,2,21],"1728":[2,2,21],"1729":[2,2,11],"1730":[3,1,1],"1731":[2,3,13],"1732":[4,3,24],"1733":[2,3,25],"1734":[3,3,23],"1735":[3,4,23],"1736":[3,3,24],"1737":[1,3,1],"1738":[2,4,5],"1739":[2,4,5],"1740":[2,4,11],"1741":[2,3,16],"1742":[2,3,1],"1743":[2,4,13],"1744":[2,4,17],"1745":[2,4,10],"1746":[2,3,1],"1747":[2,5,19],"1748":[3,5,21],"1749":[5,5,20],"1750":[2,3,13],"1751":[3,1,1],"1752":[4,3,44],"1753":[5,3,1],"1754":[5,8,15],"1755":[5,8,16],"1756":[6,8,15],"1757":[4,3,8],"1758":[5,7,44],"1759":[3,7,29],"1760":[3,7,22],"1761":[4,3,10],"1762":[2,7,26],"1763":[2,7,21],"1764":[2,7,19],"1765":[2,7,13],"1766":[2,3,49],"1767":[6,3,1],"1768":[3,9,11],"1769":[4,9,13],"1770":[3,9,10],"1771":[3,9,7],"1772":[2,9,9],"1773":[2,3,43],"1774":[2,3,29],"1775":[2,3,23],"1776":[2,3,21],"1777":[2,3,22],"1778":[1,3,12],"1779":[3,3,16],"1780":[1,3,15],"1781":[2,3,30],"1782":[2,3,1],"1783":[3,5,23],"1784":[3,5,24],"1785":[4,5,22],"1786":[2,3,38],"1787":[3,1,14],"1788":[2,3,26],"1789":[2,3,21],"1790":[1,3,11],"1791":[4,1,1],"1792":[1,4,5],"1793":[2,4,1],"1794":[2,6,21],"1795":[2,6,12],"1796":[2,6,11],"1797":[2,4,19],"1798":[2,4,5],"1799":[4,1,1],"1800":[1,4,5],"1801":[2,4,5],"1802":[2,4,7],"1803":[4,1,1],"1804":[1,4,6],"1805":[2,4,1],"1806":[2,6,13],"1807":[2,6,14],"1808":[2,6,13],"1809":[2,6,11],"1810":[2,4,12],"1811":[4,1,1],"1812":[1,4,5],"1813":[2,4,5],"1814":[2,4,6],"1815":[3,1,1],"1816":[3,3,36],"1817":[4,3,116],"1818":[3,3,1],"1819":[3,5,13],"1820":[4,5,21],"1821":[4,5,11],"1822":[4,5,17],"1823":[3,5,11],"1824":[3,5,12],"1825":[3,3,1],"1826":[2,6,7],"1827":[2,6,7],"1828":[2,6,8],"1829":[4,3,16],"1830":[2,7,16],"1831":[2,3,9],"1832":[2,1,1],"1833":[1,2,18],"1834":[2,2,21],"1835":[2,2,1],"1836":[2,4,24],"1837":[2,4,29],"1838":[2,4,23],"1839":[3,4,5],"1840":[2,7,19],"1841":[3,7,23],"1842":[3,7,19],"1843":[3,2,1],"1844":[3,5,21],"1845":[3,5,29],"1846":[3,5,22],"1847":[3,2,23],"1848":[1,2,41],"1849":[2,2,7],"1850":[2,1,1],"1851":[1,2,6],"1852":[2,2,3],"1853":[2,2,13],"1854":[2,2,8],"1855":[2,2,16],"1856":[2,1,1],"1857":[1,2,19],"1858":[2,2,51],"1859":[2,2,1],"1860":[2,4,14],"1861":[2,4,44],"1862":[2,4,23],"1863":[3,2,1],"1864":[2,5,32],"1865":[2,5,21],"1866":[2,2,4],"1867":[2,1,1],"1868":[1,2,7],"1869":[2,2,4],"1870":[2,2,1],"1871":[2,4,16],"1872":[2,4,7],"1873":[2,2,11],"1874":[2,2,4],"1875":[3,1,1],"1876":[1,3,14],"1877":[2,3,19],"1878":[2,3,1],"1879":[2,5,74],"1880":[4,5,48],"1881":[2,3,1],"1882":[3,5,27],"1883":[3,5,17],"1884":[3,5,25],"1885":[2,3,29],"1886":[2,3,20],"1887":[4,3,38],"1888":[2,3,10],"1889":[2,1,1],"1890":[1,2,12],"1891":[2,2,37],"1892":[2,2,1],"1893":[4,3,34],"1894":[4,3,3],"1895":[2,7,41],"1896":[2,7,13],"1897":[3,3,5],"1898":[2,6,41],"1899":[2,6,12],"1900":[2,6,10],"1901":[2,6,10],"1902":[3,3,12],"1903":[4,3,11],"1904":[2,2,30],"1905":[3,2,32],"1906":[2,2,8],"1907":[2,1,1],"1908":[1,2,18],"1909":[2,2,24],"1910":[2,2,1],"1911":[2,3,38],"1912":[2,3,31],"1913":[2,3,23],"1914":[2,3,38],"1915":[2,3,39],"1916":[2,3,25],"1917":[2,3,34],"1918":[2,3,41],"1919":[3,2,1],"1920":[3,4,35],"1921":[3,4,20],"1922":[3,2,31],"1923":[2,2,13],"1924":[2,1,1],"1925":[1,2,7],"1926":[2,2,29],"1927":[2,2,1],"1928":[2,4,6],"1929":[2,4,4],"1930":[2,4,3],"1931":[1,4,7],"1932":[2,1,1],"1933":[1,2,5],"1934":[2,2,20],"1935":[2,2,1],"1936":[2,4,5],"1937":[2,4,4],"1938":[2,4,4],"1939":[2,4,3],"1940":[4,1,1],"1941":[1,4,15],"1942":[2,4,47],"1943":[2,4,1],"1944":[4,5,1],"1945":[2,9,19],"1946":[2,9,43],"1947":[2,9,11],"1948":[4,5,1],"1949":[2,9,62],"1950":[3,5,1],"1951":[2,8,11],"1952":[3,5,1],"1953":[2,8,8],"1954":[3,5,1],"1955":[2,8,9],"1956":[2,4,1],"1957":[3,6,47],"1958":[3,6,26],"1959":[2,4,8],"1960":[4,1,1],"1961":[1,4,11],"1962":[2,4,25],"1963":[2,4,1],"1964":[5,5,1],"1965":[2,9,7],"1966":[2,9,7],"1967":[2,9,7],"1968":[5,5,1],"1969":[2,9,69],"1970":[2,9,14],"1971":[2,9,9],"1972":[2,4,1],"1973":[3,6,44],"1974":[2,6,45],"1975":[2,4,10],"1976":[4,1,1],"1977":[1,4,11],"1978":[2,4,24],"1979":[2,4,1],"1980":[5,5,1],"1981":[2,10,94],"1982":[2,10,13],"1983":[2,10,22],"1984":[2,10,10],"1985":[2,5,1],"1986":[2,7,37],"1987":[2,7,12],"1988":[2,4,1],"1989":[3,6,46],"1990":[2,6,27],"1991":[2,4,10],"1992":[4,1,1],"1993":[1,4,14],"1994":[2,4,69],"1995":[5,4,1],"1996":[2,8,1],"1997":[2,8,17],"1998":[2,8,1],"1999":[2,8,25],"2000":[2,8,1],"2001":[2,8,24],"2002":[4,8,1],"2003":[2,10,34],"2004":[4,8,1],"2005":[2,10,41],"2006":[2,10,23],"2007":[2,10,13],"2008":[4,8,1],"2009":[2,10,23],"2010":[2,10,11],"2011":[2,10,10],"2012":[5,4,1],"2013":[2,8,13],"2014":[2,8,20],"2015":[2,8,12],"2016":[5,4,1],"2017":[2,8,12],"2018":[2,8,10],"2019":[2,8,10],"2020":[5,4,1],"2021":[2,8,10],"2022":[2,8,11],"2023":[2,8,11],"2024":[2,8,11],"2025":[2,8,33],"2026":[2,8,10],"2027":[4,4,1],"2028":[2,6,14],"2029":[2,6,15],"2030":[2,6,11],"2031":[2,4,8],"2032":[4,1,1],"2033":[2,4,20],"2034":[1,4,18],"2035":[2,4,10],"2036":[3,1,1],"2037":[3,3,1],"2038":[2,4,6],"2039":[3,4,5],"2040":[2,4,4],"2041":[2,4,4],"2042":[2,3,1],"2043":[3,4,3],"2044":[2,4,3],"2045":[3,4,3],"2046":[3,1,1],"2047":[2,3,6],"2048":[1,3,6],"2049":[1,3,7],"2050":[1,3,6],"2051":[2,3,7],"2052":[2,3,8],"2053":[1,3,7],"2054":[5,1,1],"2055":[5,5,13],"2056":[5,5,14],"2057":[7,5,13],"2058":[5,5,11],"2059":[3,5,10],"2060":[2,1,1],"2061":[1,2,6],"2062":[2,2,13],"2063":[2,2,9],"2064":[2,2,8],"2065":[4,1,1],"2066":[1,4,9],"2067":[2,4,8],"2068":[2,4,12],"2069":[1,4,14],"2070":[2,1,1],"2071":[1,2,11],"2072":[1,2,11],"2073":[2,2,11],"2074":[3,1,1],"2075":[2,3,1],"2076":[1,5,9],"2077":[2,5,21],"2078":[2,5,27],"2079":[2,5,24],"2080":[1,3,1],"2081":[1,4,5],"2082":[2,4,16],"2083":[2,4,19],"2084":[1,3,1],"2085":[1,4,11],"2086":[1,4,16],"2087":[2,4,31],"2088":[2,3,1],"2089":[1,5,6],"2090":[2,5,13],"2091":[2,5,12],"2092":[1,3,1],"2093":[1,4,5],"2094":[2,4,11],"2095":[2,4,12],"2096":[2,3,1],"2097":[1,5,8],"2098":[2,5,8],"2099":[2,5,10],"2100":[2,3,1],"2101":[1,4,9],"2102":[1,4,9],"2103":[2,4,11],"2104":[2,3,1],"2105":[1,5,4],"2106":[2,5,8],"2107":[1,3,1],"2108":[1,4,5],"2109":[2,4,12],"2110":[3,3,1],"2111":[2,5,8],"2112":[2,5,16],"2113":[2,5,9],"2114":[3,5,9],"2115":[2,5,10],"2116":[2,3,22],"2117":[5,1,1],"2118":[1,5,10],"2119":[2,5,10],"2120":[2,5,32],"2121":[4,1,1],"2122":[1,4,6],"2123":[2,4,16],"2124":[1,4,10],"2125":[2,4,8],"2126":[4,1,1],"2127":[1,4,9],"2128":[2,4,9],"2129":[2,4,7],"2130":[2,4,11],"2131":[2,1,1],"2132":[2,2,9],"2133":[1,2,8],"2134":[2,2,8],"2135":[2,2,14],"2136":[2,2,9],"2137":[3,2,9],"2138":[2,2,10],"2139":[4,1,1],"2140":[1,4,9],"2141":[2,4,15],"2142":[1,4,8],"2143":[1,4,7],"2144":[2,1,1],"2145":[1,2,5],"2146":[2,2,33],"2147":[3,2,27],"2148":[2,1,1],"2149":[1,2,5],"2150":[2,2,7],"2151":[2,2,27],"2152":[2,2,5],"2153":[2,1,1],"2154":[1,2,5],"2155":[2,2,8],"2156":[3,2,28],"2157":[2,2,28],"2158":[2,2,4],"2159":[3,1,1],"2160":[2,3,10],"2161":[1,3,12],"2162":[2,3,17],"2163":[2,3,11],"2164":[3,1,1],"2165":[2,3,15],"2166":[3,3,8],"2167":[3,3,14],"2168":[4,3,16],"2169":[2,1,1],"2170":[3,2,1],"2171":[2,3,13],"2172":[2,3,15],"2173":[2,3,13],"2174":[2,3,16],"2175":[2,2,14],"2176":[3,1,1],"2177":[2,3,29],"2178":[3,3,22],"2179":[5,3,20],"2180":[2,3,11],"2181":[3,3,15],"2182":[2,1,1],"2183":[3,2,1],"2184":[4,3,14],"2185":[4,3,14],"2186":[4,3,14],"2187":[3,3,12],"2188":[1,2,8],"2189":[3,1,1],"2190":[1,3,8],"2191":[2,3,1],"2192":[5,5,14],"2193":[3,5,18],"2194":[5,5,18],"2195":[4,5,19],"2196":[3,5,19],"2197":[4,5,13],"2198":[2,3,3],"2199":[5,1,1],"2200":[1,5,27],"2201":[2,5,5],"2202":[3,5,1],"2203":[5,7,1],"2204":[3,10,34],"2205":[4,10,32],"2206":[5,7,1],"2207":[4,11,19],"2208":[3,11,28],"2209":[4,11,34],"2210":[4,11,26],"2211":[4,7,1],"2212":[6,10,31],"2213":[4,7,1],"2214":[3,10,16],"2215":[5,7,1],"2216":[5,11,30],"2217":[4,7,1],"2218":[5,10,27],"2219":[3,7,1],"2220":[3,9,23],"2221":[3,9,22],"2222":[2,5,29],"2223":[2,5,1],"2224":[2,6,25],"2225":[2,6,21],"2226":[2,6,26],"2227":[2,5,7],"2228":[2,1,1],"2229":[1,2,6],"2230":[2,2,1],"2231":[3,4,26],"2232":[3,4,27],"2233":[4,4,34],"2234":[2,2,17],"2235":[2,2,5],"2236":[2,1,1],"2237":[1,2,8],"2238":[2,2,1],"2239":[4,4,9],"2240":[3,4,9],"2241":[3,4,17],"2242":[4,4,15],"2243":[4,4,11],"2244":[4,4,16],"2245":[3,4,9],"2246":[3,4,11],"2247":[3,4,15],"2248":[2,4,8],"2249":[3,4,9],"2250":[3,2,1],"2251":[2,4,13],"2252":[2,4,13],"2253":[2,4,13],"2254":[2,2,3],"2255":[2,1,1],"2256":[1,2,7],"2257":[2,2,1],"2258":[3,4,37],"2259":[4,4,16],"2260":[4,4,21],"2261":[6,4,25],"2262":[3,2,34],"2263":[2,2,5],"2264":[2,1,1],"2265":[1,2,7],"2266":[2,2,1],"2267":[3,4,29],"2268":[4,4,27],"2269":[2,2,34],"2270":[2,2,5],"2271":[2,1,1],"2272":[1,2,18],"2273":[2,2,6],"2274":[2,2,19],"2275":[5,2,1],"2276":[3,7,25],"2277":[4,7,19],"2278":[4,7,18],"2279":[3,7,19],"2280":[2,2,12],"2281":[2,2,1],"2282":[2,4,26],"2283":[2,4,23],"2284":[2,2,18],"2285":[2,2,7],"2286":[2,1,1],"2287":[1,2,7],"2288":[2,2,1],"2289":[3,4,7],"2290":[3,4,9],"2291":[3,4,8],"2292":[3,4,9],"2293":[6,4,12],"2294":[4,4,13],"2295":[2,2,1],"2296":[3,3,9],"2297":[4,3,9],"2298":[3,3,9],"2299":[2,2,3],"2300":[2,1,1],"2301":[1,2,7],"2302":[2,2,1],"2303":[6,4,12],"2304":[3,4,14],"2305":[3,4,11],"2306":[3,4,11],"2307":[3,4,8],"2308":[4,4,13],"2309":[3,4,7],"2310":[4,4,10],"2311":[2,2,3],"2312":[2,1,1],"2313":[1,2,6],"2314":[2,2,1],"2315":[3,4,11],"2316":[3,4,12],"2317":[3,4,10],"2318":[4,4,12],"2319":[3,2,34],"2320":[2,2,3],"2321":[2,1,1],"2322":[1,2,8],"2323":[2,2,5],"2324":[2,2,1],"2325":[4,4,28],"2326":[3,4,21],"2327":[2,4,7],"2328":[3,4,9],"2329":[2,4,4],"2330":[4,4,31],"2331":[2,2,14],"2332":[3,2,22],"2333":[1,2,19],"2334":[2,2,3]},"averageFieldLength":[2.4188436830835194,3.6132762312633835,14.155032119914353],"storedFields":{"0":{"title":"Runtime API Examples","titles":[]},"1":{"title":"Results","titles":["Runtime API Examples"]},"2":{"title":"Theme Data","titles":["Runtime API Examples","Results"]},"3":{"title":"Page Data","titles":["Runtime API Examples","Results"]},"4":{"title":"Page Frontmatter","titles":["Runtime API Examples","Results"]},"5":{"title":"More","titles":["Runtime API Examples"]},"6":{"title":"인증/토큰 API","titles":[]},"7":{"title":"기본 정보","titles":["인증/토큰 API"]},"8":{"title":"API 목록","titles":["인증/토큰 API"]},"9":{"title":"1. Access Token 재발급","titles":["인증/토큰 API","API 목록"]},"10":{"title":"토큰 정보","titles":["인증/토큰 API"]},"11":{"title":"Access Token","titles":["인증/토큰 API","토큰 정보"]},"12":{"title":"Refresh Token","titles":["인증/토큰 API","토큰 정보"]},"13":{"title":"UUID","titles":["인증/토큰 API","토큰 정보"]},"14":{"title":"에러 처리","titles":["인증/토큰 API"]},"15":{"title":"401 Unauthorized","titles":["인증/토큰 API","에러 처리"]},"16":{"title":"토큰 재발급 플로우","titles":["인증/토큰 API"]},"17":{"title":"주의사항","titles":["인증/토큰 API"]},"18":{"title":"다음 단계","titles":["인증/토큰 API"]},"19":{"title":"AI 서비스 API","titles":[]},"20":{"title":"기본 정보","titles":["AI 서비스 API"]},"21":{"title":"API 목록","titles":["AI 서비스 API"]},"22":{"title":"1. Gemini AI 호출","titles":["AI 서비스 API","API 목록"]},"23":{"title":"설정","titles":["AI 서비스 API"]},"24":{"title":"AI 설정 파일","titles":["AI 서비스 API","설정"]},"25":{"title":"주의사항","titles":["AI 서비스 API"]},"26":{"title":"다음 단계","titles":["AI 서비스 API"]},"27":{"title":"데이터베이스 프로시저 호출 API","titles":[]},"28":{"title":"기본 정보","titles":["데이터베이스 프로시저 호출 API"]},"29":{"title":"API 목록","titles":["데이터베이스 프로시저 호출 API"]},"30":{"title":"1. 단일 프로시저 실행","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"31":{"title":"2. 다중 프로시저 일괄 실행","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"32":{"title":"3. 다중 커서 결과 조회","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"33":{"title":"4. String 배열 파라미터 프로시저 호출","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"34":{"title":"5. 클라이언트 에러 로그 저장","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"35":{"title":"프로시저 결과 구조","titles":["데이터베이스 프로시저 호출 API"]},"36":{"title":"커서 결과","titles":["데이터베이스 프로시저 호출 API","프로시저 결과 구조"]},"37":{"title":"에러 코드","titles":["데이터베이스 프로시저 호출 API","프로시저 결과 구조"]},"38":{"title":"주의사항","titles":["데이터베이스 프로시저 호출 API"]},"39":{"title":"다음 단계","titles":["데이터베이스 프로시저 호출 API"]},"40":{"title":"파일 관리 API","titles":[]},"41":{"title":"기본 정보","titles":["파일 관리 API"]},"42":{"title":"API 목록","titles":["파일 관리 API"]},"43":{"title":"1. 다중 파일/링크 업로드","titles":["파일 관리 API","API 목록"]},"44":{"title":"Form Data","titles":["파일 관리 API","API 목록","1. 다중 파일/링크 업로드"]},"45":{"title":"slist 구조 (JSON 문자열)","titles":["파일 관리 API","API 목록","1. 다중 파일/링크 업로드"]},"46":{"title":"2. 파일 다운로드","titles":["파일 관리 API","API 목록"]},"47":{"title":"파일 처리 규칙","titles":["파일 관리 API"]},"48":{"title":"파일 타입","titles":["파일 관리 API","파일 처리 규칙"]},"49":{"title":"변경 상태","titles":["파일 관리 API","파일 처리 규칙"]},"50":{"title":"파일명 규칙","titles":["파일 관리 API","파일 처리 규칙"]},"51":{"title":"주의사항","titles":["파일 관리 API"]},"52":{"title":"다음 단계","titles":["파일 관리 API"]},"53":{"title":"Redis 관리 API","titles":[]},"54":{"title":"기본 정보","titles":["Redis 관리 API"]},"55":{"title":"API 목록","titles":["Redis 관리 API"]},"56":{"title":"1. Redis Hash 데이터 조회","titles":["Redis 관리 API","API 목록"]},"57":{"title":"2. Redis Hash 데이터 삭제","titles":["Redis 관리 API","API 목록"]},"58":{"title":"Redis 데이터 구조","titles":["Redis 관리 API"]},"59":{"title":"토큰 저장 구조","titles":["Redis 관리 API","Redis 데이터 구조"]},"60":{"title":"주의사항","titles":["Redis 관리 API"]},"61":{"title":"다음 단계","titles":["Redis 관리 API"]},"62":{"title":"리포트 생성 API","titles":[]},"63":{"title":"기본 정보","titles":["리포트 생성 API"]},"64":{"title":"API 목록","titles":["리포트 생성 API"]},"65":{"title":"1. PDF 리포트 생성 (파일 저장)","titles":["리포트 생성 API","API 목록"]},"66":{"title":"필수 파라미터","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"67":{"title":"데이터 조회 파라미터","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"68":{"title":"복호화 파라미터","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"69":{"title":"리포트 파라미터 (jr_p_*)","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"70":{"title":"이미지 파라미터","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"71":{"title":"커서 변환 파라미터 (jr_convert_*)","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"72":{"title":"2. PDF 리포트 생성 (바이너리 반환)","titles":["리포트 생성 API","API 목록"]},"73":{"title":"3. 암호화된 PDF 생성","titles":["리포트 생성 API","API 목록"]},"74":{"title":"4. HTML 리포트 생성","titles":["리포트 생성 API","API 목록"]},"75":{"title":"5. Excel 리포트 다운로드","titles":["리포트 생성 API","API 목록"]},"76":{"title":"6. 생성된 PDF 파일 조회","titles":["리포트 생성 API","API 목록"]},"77":{"title":"리포트 파라미터 규칙","titles":["리포트 생성 API"]},"78":{"title":"커서 파라미터","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"79":{"title":"일반 파라미터","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"80":{"title":"이미지 파라미터","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"81":{"title":"서버 경로 이미지","titles":["리포트 생성 API","리포트 파라미터 규칙","이미지 파라미터"]},"82":{"title":"웹 경로 이미지","titles":["리포트 생성 API","리포트 파라미터 규칙","이미지 파라미터"]},"83":{"title":"커서 변환","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"84":{"title":"복호화","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"85":{"title":"리포트 템플릿 위치","titles":["리포트 생성 API"]},"86":{"title":"한글 폰트","titles":["리포트 생성 API"]},"87":{"title":"주의사항","titles":["리포트 생성 API"]},"88":{"title":"다음 단계","titles":["리포트 생성 API"]},"89":{"title":"SMS 발송 API","titles":[]},"90":{"title":"기본 정보","titles":["SMS 발송 API"]},"91":{"title":"API 목록","titles":["SMS 발송 API"]},"92":{"title":"1. SMS 메시지 발송","titles":["SMS 발송 API","API 목록"]},"93":{"title":"params (필수)","titles":["SMS 발송 API","API 목록","1. SMS 메시지 발송"]},"94":{"title":"sessionInfo (필수)","titles":["SMS 발송 API","API 목록","1. SMS 메시지 발송"]},"95":{"title":"SMS 설정","titles":["SMS 발송 API"]},"96":{"title":"application-dev.yaml","titles":["SMS 발송 API","SMS 설정"]},"97":{"title":"메시지 상태","titles":["SMS 발송 API"]},"98":{"title":"주의사항","titles":["SMS 발송 API"]},"99":{"title":"다음 단계","titles":["SMS 발송 API"]},"100":{"title":"로그인/인증 API","titles":[]},"101":{"title":"기본 정보","titles":["로그인/인증 API"]},"102":{"title":"API 목록","titles":["로그인/인증 API"]},"103":{"title":"1. 일반 사용자 로그인","titles":["로그인/인증 API","API 목록"]},"104":{"title":"2. 관리자 로그인","titles":["로그인/인증 API","API 목록"]},"105":{"title":"3. 로그아웃","titles":["로그인/인증 API","API 목록"]},"106":{"title":"4. 세션 정리","titles":["로그인/인증 API","API 목록"]},"107":{"title":"5. 테스트 프로시저 호출","titles":["로그인/인증 API","API 목록"]},"108":{"title":"로그인 프로세스","titles":["로그인/인증 API"]},"109":{"title":"1. 로그인 요청","titles":["로그인/인증 API","로그인 프로세스"]},"110":{"title":"2. 토큰 발급","titles":["로그인/인증 API","로그인 프로세스"]},"111":{"title":"3. 토큰 저장","titles":["로그인/인증 API","로그인 프로세스"]},"112":{"title":"4. API 호출","titles":["로그인/인증 API","로그인 프로세스"]},"113":{"title":"5. 토큰 만료 시","titles":["로그인/인증 API","로그인 프로세스"]},"114":{"title":"주의사항","titles":["로그인/인증 API"]},"115":{"title":"다음 단계","titles":["로그인/인증 API"]},"116":{"title":"사용자 관리 API","titles":[]},"117":{"title":"기본 정보","titles":["사용자 관리 API"]},"118":{"title":"API 목록","titles":["사용자 관리 API"]},"119":{"title":"1. 사용자 이미지 조회","titles":["사용자 관리 API","API 목록"]},"120":{"title":"2. 즐겨찾기 목록 조회","titles":["사용자 관리 API","API 목록"]},"121":{"title":"3. 즐겨찾기 수정","titles":["사용자 관리 API","API 목록"]},"122":{"title":"파일 경로 설정","titles":["사용자 관리 API"]},"123":{"title":"주의사항","titles":["사용자 관리 API"]},"124":{"title":"다음 단계","titles":["사용자 관리 API"]},"125":{"title":"FCM 모듈 API","titles":[]},"126":{"title":"현재 상태","titles":["FCM 모듈 API"]},"127":{"title":"예정된 API","titles":["FCM 모듈 API"]},"128":{"title":"다음 단계","titles":["FCM 모듈 API"]},"129":{"title":"API 레퍼런스","titles":[]},"130":{"title":"API 개요","titles":["API 레퍼런스"]},"131":{"title":"공통 사항","titles":["API 레퍼런스"]},"132":{"title":"인증 방법","titles":["API 레퍼런스","공통 사항"]},"133":{"title":"Access Token 사용","titles":["API 레퍼런스","공통 사항","인증 방법"]},"134":{"title":"Refresh Token 사용","titles":["API 레퍼런스","공통 사항","인증 방법"]},"135":{"title":"공통 응답 형식","titles":["API 레퍼런스","공통 사항"]},"136":{"title":"성공 응답","titles":["API 레퍼런스","공통 사항","공통 응답 형식"]},"137":{"title":"실패 응답","titles":["API 레퍼런스","공통 사항","공통 응답 형식"]},"138":{"title":"HTTP 상태 코드","titles":["API 레퍼런스","공통 사항"]},"139":{"title":"요청 형식","titles":["API 레퍼런스","공통 사항"]},"140":{"title":"API 그룹별 링크","titles":["API 레퍼런스"]},"141":{"title":"공통 프레임워크 API","titles":["API 레퍼런스","API 그룹별 링크"]},"142":{"title":"ESS 모듈 API","titles":["API 레퍼런스","API 그룹별 링크"]},"143":{"title":"FCM 모듈 API","titles":["API 레퍼런스","API 그룹별 링크"]},"144":{"title":"Swagger UI","titles":["API 레퍼런스"]},"145":{"title":"다음 단계","titles":["API 레퍼런스"]},"146":{"title":"AI 서비스","titles":[]},"147":{"title":"설정","titles":["AI 서비스"]},"148":{"title":"ai-config.yaml","titles":["AI 서비스","설정"]},"149":{"title":"사용 예시","titles":["AI 서비스"]},"150":{"title":"API 엔드포인트","titles":["AI 서비스"]},"151":{"title":"다음 단계","titles":["AI 서비스"]},"152":{"title":"로깅","titles":[]},"153":{"title":"로깅 어노테이션","titles":["로깅"]},"154":{"title":"@AxpCommLogAnnotation","titles":["로깅","로깅 어노테이션"]},"155":{"title":"로그 레벨","titles":["로깅"]},"156":{"title":"설정","titles":["로깅","로그 레벨"]},"157":{"title":"로그 파일","titles":["로깅","로그 레벨"]},"158":{"title":"Logback 설정","titles":["로깅"]},"159":{"title":"logback-spring.xml","titles":["로깅","Logback 설정"]},"160":{"title":"다음 단계","titles":["로깅"]},"161":{"title":"파일 처리","titles":[]},"162":{"title":"파일 업로드","titles":["파일 처리"]},"163":{"title":"MultipartFile 사용","titles":["파일 처리","파일 업로드"]},"164":{"title":"파일 크기 제한","titles":["파일 처리","파일 업로드"]},"165":{"title":"파일 다운로드","titles":["파일 처리"]},"166":{"title":"파일 유틸리티","titles":["파일 처리"]},"167":{"title":"AxpCommFileUtil","titles":["파일 처리","파일 유틸리티"]},"168":{"title":"다음 단계","titles":["파일 처리"]},"169":{"title":"메일 발송","titles":[]},"170":{"title":"설정","titles":["메일 발송"]},"171":{"title":"application.yaml","titles":["메일 발송","설정"]},"172":{"title":"사용 예시","titles":["메일 발송"]},"173":{"title":"다음 단계","titles":["메일 발송"]},"174":{"title":"리포트 생성","titles":[]},"175":{"title":"개요","titles":["리포트 생성"]},"176":{"title":"리포트 생성 프로세스","titles":["리포트 생성"]},"177":{"title":"1. 리포트 템플릿 작성","titles":["리포트 생성","리포트 생성 프로세스"]},"178":{"title":"2. 데이터 조회","titles":["리포트 생성","리포트 생성 프로세스"]},"179":{"title":"3. 리포트 파라미터 설정","titles":["리포트 생성","리포트 생성 프로세스"]},"180":{"title":"4. 리포트 생성","titles":["리포트 생성","리포트 생성 프로세스"]},"181":{"title":"API 사용","titles":["리포트 생성"]},"182":{"title":"PDF 리포트 생성","titles":["리포트 생성","API 사용"]},"183":{"title":"Excel 리포트 다운로드","titles":["리포트 생성","API 사용"]},"184":{"title":"리포트 파라미터 규칙","titles":["리포트 생성"]},"185":{"title":"커서 파라미터","titles":["리포트 생성","리포트 파라미터 규칙"]},"186":{"title":"일반 파라미터","titles":["리포트 생성","리포트 파라미터 규칙"]},"187":{"title":"이미지 파라미터","titles":["리포트 생성","리포트 파라미터 규칙"]},"188":{"title":"서버 경로 이미지","titles":["리포트 생성","리포트 파라미터 규칙","이미지 파라미터"]},"189":{"title":"웹 경로 이미지","titles":["리포트 생성","리포트 파라미터 규칙","이미지 파라미터"]},"190":{"title":"커서 변환","titles":["리포트 생성","리포트 파라미터 규칙"]},"191":{"title":"복호화","titles":["리포트 생성","리포트 파라미터 규칙"]},"192":{"title":"한글 폰트","titles":["리포트 생성"]},"193":{"title":"폰트 위치","titles":["리포트 생성","한글 폰트"]},"194":{"title":"지원 폰트","titles":["리포트 생성","한글 폰트"]},"195":{"title":"폰트 설정","titles":["리포트 생성","한글 폰트"]},"196":{"title":"리포트 템플릿 작성","titles":["리포트 생성"]},"197":{"title":"기본 구조","titles":["리포트 생성","리포트 템플릿 작성"]},"198":{"title":"사용 예시","titles":["리포트 생성"]},"199":{"title":"서비스에서 리포트 생성","titles":["리포트 생성","사용 예시"]},"200":{"title":"주의사항","titles":["리포트 생성"]},"201":{"title":"다음 단계","titles":["리포트 생성"]},"202":{"title":"보안 기능","titles":[]},"203":{"title":"개요","titles":["보안 기능"]},"204":{"title":"암호화 유틸리티","titles":["보안 기능"]},"205":{"title":"AES-128","titles":["보안 기능","암호화 유틸리티"]},"206":{"title":"RSA","titles":["보안 기능","암호화 유틸리티"]},"207":{"title":"해시 함수","titles":["보안 기능","암호화 유틸리티"]},"208":{"title":"MD5","titles":["보안 기능","암호화 유틸리티","해시 함수"]},"209":{"title":"SHA-256","titles":["보안 기능","암호화 유틸리티","해시 함수"]},"210":{"title":"XSS 방지","titles":["보안 기능"]},"211":{"title":"AxpXssFilter","titles":["보안 기능","XSS 방지"]},"212":{"title":"AxpXssUtil","titles":["보안 기능","XSS 방지"]},"213":{"title":"JWT 인증","titles":["보안 기능"]},"214":{"title":"AxpCommAuthService","titles":["보안 기능","JWT 인증"]},"215":{"title":"AxpJwtAuthenticationFilter","titles":["보안 기능","JWT 인증"]},"216":{"title":"Spring Security 통합","titles":["보안 기능"]},"217":{"title":"AxpSecurityConfig","titles":["보안 기능","Spring Security 통합"]},"218":{"title":"복호화 필터","titles":["보안 기능"]},"219":{"title":"AxpDecryptFilter","titles":["보안 기능","복호화 필터"]},"220":{"title":"보안 정책 파일","titles":["보안 기능"]},"221":{"title":"antisamy-policy.xml","titles":["보안 기능","보안 정책 파일"]},"222":{"title":"사용 예시","titles":["보안 기능"]},"223":{"title":"개인정보 암호화","titles":["보안 기능","사용 예시"]},"224":{"title":"리포트 생성 시 복호화","titles":["보안 기능","사용 예시"]},"225":{"title":"주의사항","titles":["보안 기능"]},"226":{"title":"다음 단계","titles":["보안 기능"]},"227":{"title":"SMS 발송","titles":[]},"228":{"title":"설정","titles":["SMS 발송"]},"229":{"title":"application.yaml","titles":["SMS 발송","설정"]},"230":{"title":"사용 예시","titles":["SMS 발송"]},"231":{"title":"다음 단계","titles":["SMS 발송"]},"232":{"title":"유틸리티 클래스","titles":[]},"233":{"title":"AxpCommUtil","titles":["유틸리티 클래스"]},"234":{"title":"주요 메서드","titles":["유틸리티 클래스","AxpCommUtil"]},"235":{"title":"AxpCommValidationUtil","titles":["유틸리티 클래스"]},"236":{"title":"AxpCommPaging","titles":["유틸리티 클래스"]},"237":{"title":"다음 단계","titles":["유틸리티 클래스"]},"238":{"title":"애플리케이션 설정","titles":[]},"239":{"title":"설정 파일 위치","titles":["애플리케이션 설정"]},"240":{"title":"기본 설정 (application.yaml)","titles":["애플리케이션 설정"]},"241":{"title":"서버 설정","titles":["애플리케이션 설정"]},"242":{"title":"포트 및 컨텍스트","titles":["애플리케이션 설정","서버 설정"]},"243":{"title":"JWT 설정","titles":["애플리케이션 설정"]},"244":{"title":"RSA 설정","titles":["애플리케이션 설정"]},"245":{"title":"CORS 설정","titles":["애플리케이션 설정"]},"246":{"title":"Security 설정","titles":["애플리케이션 설정"]},"247":{"title":"제외 URI","titles":["애플리케이션 설정","Security 설정"]},"248":{"title":"파일 업로드 설정","titles":["애플리케이션 설정"]},"249":{"title":"파일 경로 설정","titles":["애플리케이션 설정"]},"250":{"title":"로깅 설정","titles":["애플리케이션 설정"]},"251":{"title":"다음 단계","titles":["애플리케이션 설정"]},"252":{"title":"데이터소스 설정","titles":[]},"253":{"title":"데이터베이스 타입 설정","titles":["데이터소스 설정"]},"254":{"title":"Tibero 설정","titles":["데이터소스 설정"]},"255":{"title":"기본 설정","titles":["데이터소스 설정","Tibero 설정"]},"256":{"title":"HikariCP 설정","titles":["데이터소스 설정","Tibero 설정"]},"257":{"title":"Oracle 설정","titles":["데이터소스 설정"]},"258":{"title":"PostgreSQL 설정","titles":["데이터소스 설정"]},"259":{"title":"AxpDataSourceConfig","titles":["데이터소스 설정"]},"260":{"title":"조건부 빈 생성","titles":["데이터소스 설정","AxpDataSourceConfig"]},"261":{"title":"생성되는 Bean","titles":["데이터소스 설정","AxpDataSourceConfig"]},"262":{"title":"MyBatis 설정","titles":["데이터소스 설정"]},"263":{"title":"DB별 설정 파일","titles":["데이터소스 설정","MyBatis 설정"]},"264":{"title":"매퍼 파일 스캔","titles":["데이터소스 설정","MyBatis 설정"]},"265":{"title":"다음 단계","titles":["데이터소스 설정"]},"266":{"title":"Redis 설정","titles":[]},"267":{"title":"Redis 연결 설정","titles":["Redis 설정"]},"268":{"title":"application-dev.yaml","titles":["Redis 설정","Redis 연결 설정"]},"269":{"title":"AxpRedisConfig","titles":["Redis 설정"]},"270":{"title":"캐시용 Redis","titles":["Redis 설정","AxpRedisConfig"]},"271":{"title":"비즈니스 컴포넌트용 Redis","titles":["Redis 설정","AxpRedisConfig"]},"272":{"title":"RedisTemplate","titles":["Redis 설정"]},"273":{"title":"캐시용 RedisTemplate","titles":["Redis 설정","RedisTemplate"]},"274":{"title":"비즈니스 컴포넌트용 RedisTemplate","titles":["Redis 설정","RedisTemplate"]},"275":{"title":"직렬화 설정","titles":["Redis 설정"]},"276":{"title":"Key 직렬화","titles":["Redis 설정","직렬화 설정"]},"277":{"title":"Value 직렬화","titles":["Redis 설정","직렬화 설정"]},"278":{"title":"Redis 사용 예시","titles":["Redis 설정"]},"279":{"title":"토큰 저장","titles":["Redis 설정","Redis 사용 예시"]},"280":{"title":"토큰 조회","titles":["Redis 설정","Redis 사용 예시"]},"281":{"title":"토큰 삭제","titles":["Redis 설정","Redis 사용 예시"]},"282":{"title":"다음 단계","titles":["Redis 설정"]},"283":{"title":"Maven 설정","titles":[]},"284":{"title":"pom.xml 구조","titles":["Maven 설정"]},"285":{"title":"기본 정보","titles":["Maven 설정","pom.xml 구조"]},"286":{"title":"Spring Boot Parent","titles":["Maven 설정","pom.xml 구조"]},"287":{"title":"Java 버전","titles":["Maven 설정","pom.xml 구조"]},"288":{"title":"프로파일 설정","titles":["Maven 설정"]},"289":{"title":"프로파일 정의","titles":["Maven 설정","프로파일 설정"]},"290":{"title":"프로파일 사용","titles":["Maven 설정","프로파일 설정"]},"291":{"title":"주요 의존성","titles":["Maven 설정"]},"292":{"title":"Spring Boot Starters","titles":["Maven 설정","주요 의존성"]},"293":{"title":"데이터베이스","titles":["Maven 설정","주요 의존성"]},"294":{"title":"기타","titles":["Maven 설정","주요 의존성"]},"295":{"title":"빌드 플러그인","titles":["Maven 설정"]},"296":{"title":"Spring Boot Maven Plugin","titles":["Maven 설정","빌드 플러그인"]},"297":{"title":"Maven War Plugin","titles":["Maven 설정","빌드 플러그인"]},"298":{"title":"빌드 명령어","titles":["Maven 설정"]},"299":{"title":"개발 환경 빌드","titles":["Maven 설정","빌드 명령어"]},"300":{"title":"WAR 파일 생성","titles":["Maven 설정","빌드 명령어"]},"301":{"title":"테스트 제외 빌드","titles":["Maven 설정","빌드 명령어"]},"302":{"title":"다음 단계","titles":["Maven 설정"]},"303":{"title":"Mapper 작성 가이드","titles":[]},"304":{"title":"Mapper 인터페이스","titles":["Mapper 작성 가이드"]},"305":{"title":"기본 구조","titles":["Mapper 작성 가이드","Mapper 인터페이스"]},"306":{"title":"XML 매퍼 파일","titles":["Mapper 작성 가이드"]},"307":{"title":"파일 위치","titles":["Mapper 작성 가이드","XML 매퍼 파일"]},"308":{"title":"기본 구조","titles":["Mapper 작성 가이드","XML 매퍼 파일"]},"309":{"title":"프로시저 호출","titles":["Mapper 작성 가이드"]},"310":{"title":"Tibero/Oracle","titles":["Mapper 작성 가이드","프로시저 호출"]},"311":{"title":"PostgreSQL","titles":["Mapper 작성 가이드","프로시저 호출"]},"312":{"title":"동적 SQL","titles":["Mapper 작성 가이드"]},"313":{"title":"if","titles":["Mapper 작성 가이드","동적 SQL"]},"314":{"title":"foreach","titles":["Mapper 작성 가이드","동적 SQL"]},"315":{"title":"다음 단계","titles":["Mapper 작성 가이드"]},"316":{"title":"공통 DB 서비스","titles":[]},"317":{"title":"AxpCommDbService","titles":["공통 DB 서비스"]},"318":{"title":"사용 예시","titles":["공통 DB 서비스","AxpCommDbService"]},"319":{"title":"지원 데이터베이스","titles":["공통 DB 서비스","AxpCommDbService"]},"320":{"title":"AxpCommRedisDbService","titles":["공통 DB 서비스"]},"321":{"title":"토큰 저장","titles":["공통 DB 서비스","AxpCommRedisDbService"]},"322":{"title":"토큰 조회","titles":["공통 DB 서비스","AxpCommRedisDbService"]},"323":{"title":"토큰 삭제","titles":["공통 DB 서비스","AxpCommRedisDbService"]},"324":{"title":"Hash 데이터 조회","titles":["공통 DB 서비스","AxpCommRedisDbService"]},"325":{"title":"AxpCommDbAdapterService","titles":["공통 DB 서비스"]},"326":{"title":"사용 예시","titles":["공통 DB 서비스","AxpCommDbAdapterService"]},"327":{"title":"다음 단계","titles":["공통 DB 서비스"]},"328":{"title":"MyBatis 설정","titles":[]},"329":{"title":"MapperScan 설정","titles":["MyBatis 설정"]},"330":{"title":"DB별 설정 파일","titles":["MyBatis 설정"]},"331":{"title":"매퍼 파일 위치","titles":["MyBatis 설정"]},"332":{"title":"Mapper 인터페이스 작성","titles":["MyBatis 설정"]},"333":{"title":"XML 매퍼 작성","titles":["MyBatis 설정"]},"334":{"title":"프로시저 호출","titles":["MyBatis 설정"]},"335":{"title":"Tibero","titles":["MyBatis 설정","프로시저 호출"]},"336":{"title":"Oracle","titles":["MyBatis 설정","프로시저 호출"]},"337":{"title":"PostgreSQL","titles":["MyBatis 설정","프로시저 호출"]},"338":{"title":"다음 단계","titles":["MyBatis 설정"]},"339":{"title":"Maven 빌드","titles":[]},"340":{"title":"개발 환경 빌드","titles":["Maven 빌드"]},"341":{"title":"WAR 파일 생성","titles":["Maven 빌드"]},"342":{"title":"다음 단계","titles":["Maven 빌드"]},"343":{"title":"배포 설정","titles":[]},"344":{"title":"Tomcat 배포","titles":["배포 설정"]},"345":{"title":"다음 단계","titles":["배포 설정"]},"346":{"title":"REST API 설계 규칙","titles":[]},"347":{"title":"URL 패턴","titles":["REST API 설계 규칙"]},"348":{"title":"HTTP 메서드","titles":["REST API 설계 규칙"]},"349":{"title":"요청 형식","titles":["REST API 설계 규칙"]},"350":{"title":"응답 형식","titles":["REST API 설계 규칙"]},"351":{"title":"성공","titles":["REST API 설계 규칙","응답 형식"]},"352":{"title":"실패","titles":["REST API 설계 규칙","응답 형식"]},"353":{"title":"다음 단계","titles":["REST API 설계 규칙"]},"354":{"title":"인증/인가 처리","titles":[]},"355":{"title":"JWT 토큰 사용","titles":["인증/인가 처리"]},"356":{"title":"Authorization 헤더","titles":["인증/인가 처리","JWT 토큰 사용"]},"357":{"title":"쿠키","titles":["인증/인가 처리","JWT 토큰 사용"]},"358":{"title":"제외 URI 설정","titles":["인증/인가 처리"]},"359":{"title":"다음 단계","titles":["인증/인가 처리"]},"360":{"title":"설정 파일 추가","titles":[]},"361":{"title":"환경별 설정","titles":["설정 파일 추가"]},"362":{"title":"application-dev.yaml","titles":["설정 파일 추가","환경별 설정"]},"363":{"title":"다음 단계","titles":["설정 파일 추가"]},"364":{"title":"새로운 모듈 추가","titles":[]},"365":{"title":"개요","titles":["새로운 모듈 추가"]},"366":{"title":"모듈 추가 프로세스","titles":["새로운 모듈 추가"]},"367":{"title":"1단계: 모듈 구조 설계","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"368":{"title":"2단계: 패키지 구조 생성","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"369":{"title":"3단계: 애플리케이션 설정","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"370":{"title":"ComponentScan 추가","titles":["새로운 모듈 추가","모듈 추가 프로세스","3단계: 애플리케이션 설정"]},"371":{"title":"MapperScan 추가","titles":["새로운 모듈 추가","모듈 추가 프로세스","3단계: 애플리케이션 설정"]},"372":{"title":"4단계: 클래스 작성","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"373":{"title":"5단계: 리소스 파일 생성","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"374":{"title":"XML 매퍼 파일","titles":["새로운 모듈 추가","모듈 추가 프로세스","5단계: 리소스 파일 생성"]},"375":{"title":"6단계: 설정 파일 추가","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"376":{"title":"표준 패키지 구조","titles":["새로운 모듈 추가"]},"377":{"title":"전체 구조","titles":["새로운 모듈 추가","표준 패키지 구조"]},"378":{"title":"계층별 역할","titles":["새로운 모듈 추가","표준 패키지 구조"]},"379":{"title":"Controller","titles":["새로운 모듈 추가","표준 패키지 구조","계층별 역할"]},"380":{"title":"Service","titles":["새로운 모듈 추가","표준 패키지 구조","계층별 역할"]},"381":{"title":"Mapper","titles":["새로운 모듈 추가","표준 패키지 구조","계층별 역할"]},"382":{"title":"개발 가이드","titles":["새로운 모듈 추가"]},"383":{"title":"1. 모듈 생성 절차","titles":["새로운 모듈 추가","개발 가이드"]},"384":{"title":"2. 컨트롤러 작성","titles":["새로운 모듈 추가","개발 가이드"]},"385":{"title":"3. 서비스 작성","titles":["새로운 모듈 추가","개발 가이드"]},"386":{"title":"4. Mapper 작성","titles":["새로운 모듈 추가","개발 가이드"]},"387":{"title":"5. 설정 파일 추가","titles":["새로운 모듈 추가","개발 가이드"]},"388":{"title":"실제 예시: ESS 모듈 구조","titles":["새로운 모듈 추가"]},"389":{"title":"공통 프레임워크 활용","titles":["새로운 모듈 추가"]},"390":{"title":"데이터베이스","titles":["새로운 모듈 추가","공통 프레임워크 활용"]},"391":{"title":"인증/보안","titles":["새로운 모듈 추가","공통 프레임워크 활용"]},"392":{"title":"유틸리티","titles":["새로운 모듈 추가","공통 프레임워크 활용"]},"393":{"title":"API 설계 규칙","titles":["새로운 모듈 추가"]},"394":{"title":"인증/인가 처리","titles":["새로운 모듈 추가"]},"395":{"title":"Swagger 문서화","titles":["새로운 모듈 추가"]},"396":{"title":"체크리스트","titles":["새로운 모듈 추가"]},"397":{"title":"다음 단계","titles":["새로운 모듈 추가"]},"398":{"title":"참고 자료","titles":["새로운 모듈 추가"]},"399":{"title":"컨트롤러 작성","titles":[]},"400":{"title":"기본 구조","titles":["컨트롤러 작성"]},"401":{"title":"응답 형식","titles":["컨트롤러 작성"]},"402":{"title":"성공","titles":["컨트롤러 작성","응답 형식"]},"403":{"title":"실패","titles":["컨트롤러 작성","응답 형식"]},"404":{"title":"다음 단계","titles":["컨트롤러 작성"]},"405":{"title":"모듈 생성 절차","titles":[]},"406":{"title":"1. 패키지 구조 생성","titles":["모듈 생성 절차"]},"407":{"title":"2. ComponentScan 추가","titles":["모듈 생성 절차"]},"408":{"title":"3. MapperScan 추가","titles":["모듈 생성 절차"]},"409":{"title":"4. XML 매퍼 파일 생성","titles":["모듈 생성 절차"]},"410":{"title":"다음 단계","titles":["모듈 생성 절차"]},"411":{"title":"Mapper 작성","titles":[]},"412":{"title":"인터페이스","titles":["Mapper 작성"]},"413":{"title":"XML 매퍼","titles":["Mapper 작성"]},"414":{"title":"파일 위치","titles":["Mapper 작성"]},"415":{"title":"다음 단계","titles":["Mapper 작성"]},"416":{"title":"서비스 작성","titles":[]},"417":{"title":"기본 구조","titles":["서비스 작성"]},"418":{"title":"프로시저 호출","titles":["서비스 작성"]},"419":{"title":"다음 단계","titles":["서비스 작성"]},"420":{"title":"Swagger/OpenAPI 문서화","titles":[]},"421":{"title":"어노테이션 추가","titles":["Swagger/OpenAPI 문서화"]},"422":{"title":"접근 URL","titles":["Swagger/OpenAPI 문서화"]},"423":{"title":"다음 단계","titles":["Swagger/OpenAPI 문서화"]},"424":{"title":"프로젝트 개요","titles":[]},"425":{"title":"AxpFramework 소개","titles":["프로젝트 개요"]},"426":{"title":"주요 특징","titles":["프로젝트 개요"]},"427":{"title":"1. 다중 데이터베이스 지원","titles":["프로젝트 개요","주요 특징"]},"428":{"title":"2. 통합 보안 기능","titles":["프로젝트 개요","주요 특징"]},"429":{"title":"3. 공통 기능 제공","titles":["프로젝트 개요","주요 특징"]},"430":{"title":"4. Redis 캐싱","titles":["프로젝트 개요","주요 특징"]},"431":{"title":"5. 모듈화된 구조","titles":["프로젝트 개요","주요 특징"]},"432":{"title":"프로젝트 목적","titles":["프로젝트 개요"]},"433":{"title":"기술 스택 요약","titles":["프로젝트 개요"]},"434":{"title":"프로젝트 구조","titles":["프로젝트 개요"]},"435":{"title":"다음 단계","titles":["프로젝트 개요"]},"436":{"title":"프로젝트 구조","titles":[]},"437":{"title":"전체 디렉토리 구조","titles":["프로젝트 구조"]},"438":{"title":"Java 소스 코드 구조","titles":["프로젝트 구조"]},"439":{"title":"1. 공통 프레임워크 모듈 (axpFramework)","titles":["프로젝트 구조","Java 소스 코드 구조"]},"440":{"title":"2. ESS 비즈니스 모듈 (ess)","titles":["프로젝트 구조","Java 소스 코드 구조"]},"441":{"title":"3. FCM 비즈니스 모듈 (fcm)","titles":["프로젝트 구조","Java 소스 코드 구조"]},"442":{"title":"리소스 파일 구조","titles":["프로젝트 구조"]},"443":{"title":"1. 설정 파일 (resources/config/)","titles":["프로젝트 구조","리소스 파일 구조"]},"444":{"title":"2. MyBatis 매퍼 (resources/mapper/)","titles":["프로젝트 구조","리소스 파일 구조"]},"445":{"title":"3. MyBatis 설정 (resources/mapper-config/)","titles":["프로젝트 구조","리소스 파일 구조"]},"446":{"title":"4. 리포트 템플릿 (resources/report/)","titles":["프로젝트 구조","리소스 파일 구조"]},"447":{"title":"패키지 네이밍 규칙","titles":["프로젝트 구조"]},"448":{"title":"1. 표준 패키지 구조","titles":["프로젝트 구조","패키지 네이밍 규칙"]},"449":{"title":"2. 네이밍 규칙","titles":["프로젝트 구조","패키지 네이밍 규칙"]},"450":{"title":"주요 파일 설명","titles":["프로젝트 구조"]},"451":{"title":"1. AxpBootApplication.java","titles":["프로젝트 구조","주요 파일 설명"]},"452":{"title":"2. pom.xml","titles":["프로젝트 구조","주요 파일 설명"]},"453":{"title":"3. application.yaml","titles":["프로젝트 구조","주요 파일 설명"]},"454":{"title":"모듈 간 의존성","titles":["프로젝트 구조"]},"455":{"title":"새로운 모듈 추가 시 구조","titles":["프로젝트 구조"]},"456":{"title":"다음 단계","titles":["프로젝트 구조"]},"457":{"title":"시스템 요구사항","titles":[]},"458":{"title":"필수 요구사항","titles":["시스템 요구사항"]},"459":{"title":"1. Java 개발 환경","titles":["시스템 요구사항","필수 요구사항"]},"460":{"title":"2. 빌드 도구","titles":["시스템 요구사항","필수 요구사항"]},"461":{"title":"3. 데이터베이스","titles":["시스템 요구사항","필수 요구사항"]},"462":{"title":"Tibero6 (기본값)","titles":["시스템 요구사항","필수 요구사항","3. 데이터베이스"]},"463":{"title":"Oracle","titles":["시스템 요구사항","필수 요구사항","3. 데이터베이스"]},"464":{"title":"PostgreSQL","titles":["시스템 요구사항","필수 요구사항","3. 데이터베이스"]},"465":{"title":"4. Redis (Valkey 호환)","titles":["시스템 요구사항","필수 요구사항"]},"466":{"title":"5. IDE (선택사항)","titles":["시스템 요구사항","필수 요구사항"]},"467":{"title":"선택적 요구사항","titles":["시스템 요구사항"]},"468":{"title":"1. 외부 Tomcat 서버","titles":["시스템 요구사항","선택적 요구사항"]},"469":{"title":"2. 개발 도구","titles":["시스템 요구사항","선택적 요구사항"]},"470":{"title":"운영 환경 요구사항","titles":["시스템 요구사항"]},"471":{"title":"서버 사양 (권장)","titles":["시스템 요구사항","운영 환경 요구사항"]},"472":{"title":"네트워크","titles":["시스템 요구사항","운영 환경 요구사항"]},"473":{"title":"환경별 설정","titles":["시스템 요구사항"]},"474":{"title":"다음 단계","titles":["시스템 요구사항"]},"475":{"title":"개발 환경 설정","titles":[]},"476":{"title":"1. 프로젝트 클론 및 준비","titles":["개발 환경 설정"]},"477":{"title":"1.1 프로젝트 다운로드","titles":["개발 환경 설정","1. 프로젝트 클론 및 준비"]},"478":{"title":"1.2 프로젝트 구조 확인","titles":["개발 환경 설정","1. 프로젝트 클론 및 준비"]},"479":{"title":"2. 데이터베이스 설정","titles":["개발 환경 설정"]},"480":{"title":"2.1 데이터베이스 선택","titles":["개발 환경 설정","2. 데이터베이스 설정"]},"481":{"title":"2.2 설정 파일 수정","titles":["개발 환경 설정","2. 데이터베이스 설정"]},"482":{"title":"Tibero 설정 예시","titles":["개발 환경 설정","2. 데이터베이스 설정","2.2 설정 파일 수정"]},"483":{"title":"Oracle 설정 예시","titles":["개발 환경 설정","2. 데이터베이스 설정","2.2 설정 파일 수정"]},"484":{"title":"PostgreSQL 설정 예시","titles":["개발 환경 설정","2. 데이터베이스 설정","2.2 설정 파일 수정"]},"485":{"title":"2.3 Tibero JDBC 드라이버 확인","titles":["개발 환경 설정","2. 데이터베이스 설정"]},"486":{"title":"3. Redis 설정","titles":["개발 환경 설정"]},"487":{"title":"3.1 Redis 설치 및 실행","titles":["개발 환경 설정","3. Redis 설정"]},"488":{"title":"Windows","titles":["개발 환경 설정","3. Redis 설정","3.1 Redis 설치 및 실행"]},"489":{"title":"Linux/Mac","titles":["개발 환경 설정","3. Redis 설정","3.1 Redis 설치 및 실행"]},"490":{"title":"3.2 Redis 설정 파일 수정","titles":["개발 환경 설정","3. Redis 설정"]},"491":{"title":"4. 애플리케이션 설정","titles":["개발 환경 설정"]},"492":{"title":"4.1 JWT 시크릿 키 설정","titles":["개발 환경 설정","4. 애플리케이션 설정"]},"493":{"title":"4.2 CORS 설정","titles":["개발 환경 설정","4. 애플리케이션 설정"]},"494":{"title":"4.3 파일 경로 설정","titles":["개발 환경 설정","4. 애플리케이션 설정"]},"495":{"title":"5. 프로젝트 빌드","titles":["개발 환경 설정"]},"496":{"title":"5.1 Maven 의존성 다운로드","titles":["개발 환경 설정","5. 프로젝트 빌드"]},"497":{"title":"5.2 빌드 확인","titles":["개발 환경 설정","5. 프로젝트 빌드"]},"498":{"title":"6. 애플리케이션 실행","titles":["개발 환경 설정"]},"499":{"title":"6.1 IDE에서 실행","titles":["개발 환경 설정","6. 애플리케이션 실행"]},"500":{"title":"IntelliJ IDEA","titles":["개발 환경 설정","6. 애플리케이션 실행","6.1 IDE에서 실행"]},"501":{"title":"Eclipse","titles":["개발 환경 설정","6. 애플리케이션 실행","6.1 IDE에서 실행"]},"502":{"title":"6.2 Maven으로 실행","titles":["개발 환경 설정","6. 애플리케이션 실행"]},"503":{"title":"6.3 WAR 파일로 실행","titles":["개발 환경 설정","6. 애플리케이션 실행"]},"504":{"title":"7. 애플리케이션 확인","titles":["개발 환경 설정"]},"505":{"title":"7.1 서버 시작 확인","titles":["개발 환경 설정","7. 애플리케이션 확인"]},"506":{"title":"7.2 API 확인","titles":["개발 환경 설정","7. 애플리케이션 확인"]},"507":{"title":"7.3 로그 확인","titles":["개발 환경 설정","7. 애플리케이션 확인"]},"508":{"title":"8. 문제 해결","titles":["개발 환경 설정"]},"509":{"title":"8.1 포트 충돌","titles":["개발 환경 설정","8. 문제 해결"]},"510":{"title":"8.2 데이터베이스 연결 실패","titles":["개발 환경 설정","8. 문제 해결"]},"511":{"title":"8.3 Redis 연결 실패","titles":["개발 환경 설정","8. 문제 해결"]},"512":{"title":"다음 단계","titles":["개발 환경 설정"]},"513":{"title":"비즈니스 모듈 구조","titles":[]},"514":{"title":"표준 패키지 구조","titles":["비즈니스 모듈 구조"]},"515":{"title":"ESS 모듈","titles":["비즈니스 모듈 구조"]},"516":{"title":"구조","titles":["비즈니스 모듈 구조","ESS 모듈"]},"517":{"title":"주요 기능","titles":["비즈니스 모듈 구조","ESS 모듈"]},"518":{"title":"1. 인증 (auth/)","titles":["비즈니스 모듈 구조","ESS 모듈","주요 기능"]},"519":{"title":"2. 공통 기능 (com/)","titles":["비즈니스 모듈 구조","ESS 모듈","주요 기능"]},"520":{"title":"3. 관리자 (admin/)","titles":["비즈니스 모듈 구조","ESS 모듈","주요 기능"]},"521":{"title":"4. 복지 (welfare/)","titles":["비즈니스 모듈 구조","ESS 모듈","주요 기능"]},"522":{"title":"FCM 모듈","titles":["비즈니스 모듈 구조"]},"523":{"title":"구조","titles":["비즈니스 모듈 구조","FCM 모듈"]},"524":{"title":"주요 기능","titles":["비즈니스 모듈 구조","FCM 모듈"]},"525":{"title":"1. 공통 기능 (com/)","titles":["비즈니스 모듈 구조","FCM 모듈","주요 기능"]},"526":{"title":"2. HRI (hri/)","titles":["비즈니스 모듈 구조","FCM 모듈","주요 기능"]},"527":{"title":"3. 시스템 (sys/)","titles":["비즈니스 모듈 구조","FCM 모듈","주요 기능"]},"528":{"title":"컨트롤러 작성 규칙","titles":["비즈니스 모듈 구조"]},"529":{"title":"기본 구조","titles":["비즈니스 모듈 구조","컨트롤러 작성 규칙"]},"530":{"title":"응답 형식","titles":["비즈니스 모듈 구조","컨트롤러 작성 규칙"]},"531":{"title":"서비스 작성 규칙","titles":["비즈니스 모듈 구조"]},"532":{"title":"기본 구조","titles":["비즈니스 모듈 구조","서비스 작성 규칙"]},"533":{"title":"Mapper 작성 규칙","titles":["비즈니스 모듈 구조"]},"534":{"title":"인터페이스","titles":["비즈니스 모듈 구조","Mapper 작성 규칙"]},"535":{"title":"XML 매퍼","titles":["비즈니스 모듈 구조","Mapper 작성 규칙"]},"536":{"title":"다음 단계","titles":["비즈니스 모듈 구조"]},"537":{"title":"AXP Framework Dev Docs","titles":[]},"538":{"title":"이 문서는 무엇인가요?","titles":["AXP Framework Dev Docs"]},"539":{"title":"처음 온 개발자를 위한 3단계","titles":["AXP Framework Dev Docs"]},"540":{"title":"핵심 아키텍처 빠른 링크","titles":["AXP Framework Dev Docs"]},"541":{"title":"공통 기능 사용 가이드","titles":["AXP Framework Dev Docs"]},"542":{"title":"새 모듈을 만들 때 추천 흐름","titles":["AXP Framework Dev Docs"]},"543":{"title":"기술 스택 개요","titles":["AXP Framework Dev Docs"]},"544":{"title":"환경 설정 가이드","titles":["AXP Framework Dev Docs"]},"545":{"title":"API 레퍼런스","titles":["AXP Framework Dev Docs"]},"546":{"title":"문제 해결","titles":["AXP Framework Dev Docs"]},"547":{"title":"참고 자료","titles":["AXP Framework Dev Docs"]},"548":{"title":"전체 디렉토리 구조","titles":[]},"549":{"title":"루트 디렉토리 구조","titles":["전체 디렉토리 구조"]},"550":{"title":"소스 코드 디렉토리 구조","titles":["전체 디렉토리 구조"]},"551":{"title":"main 디렉토리","titles":["전체 디렉토리 구조","소스 코드 디렉토리 구조"]},"552":{"title":"test 디렉토리","titles":["전체 디렉토리 구조","소스 코드 디렉토리 구조"]},"553":{"title":"Java 소스 코드 구조","titles":["전체 디렉토리 구조"]},"554":{"title":"1. 공통 프레임워크 모듈 (axpFramework/)","titles":["전체 디렉토리 구조","Java 소스 코드 구조"]},"555":{"title":"2. ESS 비즈니스 모듈 (ess/)","titles":["전체 디렉토리 구조","Java 소스 코드 구조"]},"556":{"title":"3. FCM 비즈니스 모듈 (fcm/)","titles":["전체 디렉토리 구조","Java 소스 코드 구조"]},"557":{"title":"빌드 결과물 디렉토리","titles":["전체 디렉토리 구조"]},"558":{"title":"로그 디렉토리","titles":["전체 디렉토리 구조"]},"559":{"title":"디렉토리 역할 설명","titles":["전체 디렉토리 구조"]},"560":{"title":"src/main/java/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"561":{"title":"src/main/resources/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"562":{"title":"src/test/java/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"563":{"title":"target/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"564":{"title":"logs/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"565":{"title":"패키지 네이밍 규칙","titles":["전체 디렉토리 구조"]},"566":{"title":"다음 단계","titles":["전체 디렉토리 구조"]},"567":{"title":"공통 프레임워크 모듈","titles":[]},"568":{"title":"모듈 구조","titles":["공통 프레임워크 모듈"]},"569":{"title":"주요 모듈 설명","titles":["공통 프레임워크 모듈"]},"570":{"title":"1. AI 서비스 (ai/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"571":{"title":"2. 공통 기능 (common/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"572":{"title":"2.1 Controller (common/controller/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"573":{"title":"2.2 Database (common/database/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"574":{"title":"2.3 Logging (common/logging/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"575":{"title":"2.4 Security (common/security/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"576":{"title":"2.5 Token (common/token/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"577":{"title":"2.6 Utils (common/utils/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"578":{"title":"3. 설정 클래스 (config/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"579":{"title":"3.1 AxpDataSourceConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"580":{"title":"3.2 AxpRedisConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"581":{"title":"3.3 AxpSecurityConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"582":{"title":"3.4 AxpWebConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"583":{"title":"3.5 AxpFilterConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"584":{"title":"4. 필터 (filter/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"585":{"title":"4.1 Auth Filter (filter/auth/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","4. 필터 (filter/)"]},"586":{"title":"4.2 Logging Filter (filter/logging/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","4. 필터 (filter/)"]},"587":{"title":"4.3 Security Filter (filter/security/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","4. 필터 (filter/)"]},"588":{"title":"5. 파일 관리 (file/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"589":{"title":"6. 메일 발송 (mail/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"590":{"title":"7. 리포트 생성 (report/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"591":{"title":"8. SMS 발송 (sms/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"592":{"title":"공통 기능 사용법","titles":["공통 프레임워크 모듈"]},"593":{"title":"프로시저 호출","titles":["공통 프레임워크 모듈","공통 기능 사용법"]},"594":{"title":"Redis 사용","titles":["공통 프레임워크 모듈","공통 기능 사용법"]},"595":{"title":"암호화","titles":["공통 프레임워크 모듈","공통 기능 사용법"]},"596":{"title":"다음 단계","titles":["공통 프레임워크 모듈"]},"597":{"title":"공통 기능 모듈","titles":[]},"598":{"title":"모듈 구조","titles":["공통 기능 모듈"]},"599":{"title":"주요 클래스","titles":["공통 기능 모듈"]},"600":{"title":"1. AxpBaseWebController","titles":["공통 기능 모듈","주요 클래스"]},"601":{"title":"2. AxpCommDbService","titles":["공통 기능 모듈","주요 클래스"]},"602":{"title":"3. AxpCommRedisDbService","titles":["공통 기능 모듈","주요 클래스"]},"603":{"title":"4. AxpCommAuthService","titles":["공통 기능 모듈","주요 클래스"]},"604":{"title":"5. AxpCommUtil","titles":["공통 기능 모듈","주요 클래스"]},"605":{"title":"6. 암호화 유틸리티","titles":["공통 기능 모듈","주요 클래스"]},"606":{"title":"AxpCommAES128","titles":["공통 기능 모듈","주요 클래스","6. 암호화 유틸리티"]},"607":{"title":"AxpCommRsa","titles":["공통 기능 모듈","주요 클래스","6. 암호화 유틸리티"]},"608":{"title":"AxpCommMD5Util","titles":["공통 기능 모듈","주요 클래스","6. 암호화 유틸리티"]},"609":{"title":"AxpCommSHA256Util","titles":["공통 기능 모듈","주요 클래스","6. 암호화 유틸리티"]},"610":{"title":"공통 상수","titles":["공통 기능 모듈"]},"611":{"title":"AxpCommConst","titles":["공통 기능 모듈","공통 상수"]},"612":{"title":"다음 단계","titles":["공통 기능 모듈"]},"613":{"title":"AI 서비스 모듈","titles":[]},"614":{"title":"모듈 구조","titles":["AI 서비스 모듈"]},"615":{"title":"주요 클래스","titles":["AI 서비스 모듈"]},"616":{"title":"1. AxpAiController","titles":["AI 서비스 모듈","주요 클래스"]},"617":{"title":"2. AxpGeminiService","titles":["AI 서비스 모듈","주요 클래스"]},"618":{"title":"3. AxpAiService","titles":["AI 서비스 모듈","주요 클래스"]},"619":{"title":"설정","titles":["AI 서비스 모듈"]},"620":{"title":"AI 설정 파일","titles":["AI 서비스 모듈","설정"]},"621":{"title":"application.yaml 설정","titles":["AI 서비스 모듈","설정"]},"622":{"title":"API 엔드포인트","titles":["AI 서비스 모듈"]},"623":{"title":"POST /api/ai/genai","titles":["AI 서비스 모듈","API 엔드포인트"]},"624":{"title":"사용 방법","titles":["AI 서비스 모듈"]},"625":{"title":"1. 서비스에서 직접 사용","titles":["AI 서비스 모듈","사용 방법"]},"626":{"title":"2. 컨트롤러에서 사용","titles":["AI 서비스 모듈","사용 방법"]},"627":{"title":"의존성","titles":["AI 서비스 모듈"]},"628":{"title":"Maven 의존성","titles":["AI 서비스 모듈","의존성"]},"629":{"title":"주의사항","titles":["AI 서비스 모듈"]},"630":{"title":"다음 단계","titles":["AI 서비스 모듈"]},"631":{"title":"설정 클래스 모듈","titles":[]},"632":{"title":"모듈 구조","titles":["설정 클래스 모듈"]},"633":{"title":"주요 설정 클래스","titles":["설정 클래스 모듈"]},"634":{"title":"1. AxpDataSourceConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"635":{"title":"2. AxpRedisConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"636":{"title":"3. AxpSecurityConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"637":{"title":"4. AxpWebConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"638":{"title":"5. AxpFilterConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"639":{"title":"6. AxpMyBatisResultInterceptor","titles":["설정 클래스 모듈","주요 설정 클래스"]},"640":{"title":"설정 파일 위치","titles":["설정 클래스 모듈"]},"641":{"title":"application.yaml","titles":["설정 클래스 모듈","설정 파일 위치"]},"642":{"title":"환경별 설정 파일","titles":["설정 클래스 모듈","설정 파일 위치"]},"643":{"title":"설정 우선순위","titles":["설정 클래스 모듈"]},"644":{"title":"다음 단계","titles":["설정 클래스 모듈"]},"645":{"title":"파일 관리 모듈","titles":[]},"646":{"title":"모듈 구조","titles":["파일 관리 모듈"]},"647":{"title":"주요 클래스","titles":["파일 관리 모듈"]},"648":{"title":"1. AxpFileController","titles":["파일 관리 모듈","주요 클래스"]},"649":{"title":"2. AxpFileService","titles":["파일 관리 모듈","주요 클래스"]},"650":{"title":"파일 처리 프로세스","titles":["파일 관리 모듈"]},"651":{"title":"1. 파일 업로드","titles":["파일 관리 모듈","파일 처리 프로세스"]},"652":{"title":"2. 파일 다운로드","titles":["파일 관리 모듈","파일 처리 프로세스"]},"653":{"title":"파일 타입","titles":["파일 관리 모듈"]},"654":{"title":"FILE_TYPE","titles":["파일 관리 모듈","파일 타입"]},"655":{"title":"변경 상태","titles":["파일 관리 모듈","파일 타입"]},"656":{"title":"원본 상태","titles":["파일 관리 모듈","파일 타입"]},"657":{"title":"설정","titles":["파일 관리 모듈"]},"658":{"title":"application.yaml","titles":["파일 관리 모듈","설정"]},"659":{"title":"파일명 규칙","titles":["파일 관리 모듈"]},"660":{"title":"서버 저장 파일명","titles":["파일 관리 모듈","파일명 규칙"]},"661":{"title":"원본 파일명","titles":["파일 관리 모듈","파일명 규칙"]},"662":{"title":"사용 예시","titles":["파일 관리 모듈"]},"663":{"title":"파일 업로드","titles":["파일 관리 모듈","사용 예시"]},"664":{"title":"파일 다운로드","titles":["파일 관리 모듈","사용 예시"]},"665":{"title":"주의사항","titles":["파일 관리 모듈"]},"666":{"title":"다음 단계","titles":["파일 관리 모듈"]},"667":{"title":"필터 클래스 모듈","titles":[]},"668":{"title":"모듈 구조","titles":["필터 클래스 모듈"]},"669":{"title":"주요 필터","titles":["필터 클래스 모듈"]},"670":{"title":"1. AxpXssFilter","titles":["필터 클래스 모듈","주요 필터"]},"671":{"title":"2. AxpDecryptFilter","titles":["필터 클래스 모듈","주요 필터"]},"672":{"title":"3. AxpJwtAuthenticationFilter","titles":["필터 클래스 모듈","주요 필터"]},"673":{"title":"4. AxpCorsLoggingFilter","titles":["필터 클래스 모듈","주요 필터"]},"674":{"title":"필터 등록","titles":["필터 클래스 모듈"]},"675":{"title":"AxpFilterConfig","titles":["필터 클래스 모듈","필터 등록"]},"676":{"title":"필터 실행 순서","titles":["필터 클래스 모듈"]},"677":{"title":"XSS 유틸리티","titles":["필터 클래스 모듈"]},"678":{"title":"AxpXssUtil","titles":["필터 클래스 모듈","XSS 유틸리티"]},"679":{"title":"보안 정책 파일","titles":["필터 클래스 모듈"]},"680":{"title":"antisamy-policy.xml","titles":["필터 클래스 모듈","보안 정책 파일"]},"681":{"title":"주의사항","titles":["필터 클래스 모듈"]},"682":{"title":"다음 단계","titles":["필터 클래스 모듈"]},"683":{"title":"메일 발송 모듈","titles":[]},"684":{"title":"모듈 구조","titles":["메일 발송 모듈"]},"685":{"title":"주요 클래스","titles":["메일 발송 모듈"]},"686":{"title":"1. AxpMailController","titles":["메일 발송 모듈","주요 클래스"]},"687":{"title":"2. AxpMailService","titles":["메일 발송 모듈","주요 클래스"]},"688":{"title":"3. AxpCommMailUtil","titles":["메일 발송 모듈","주요 클래스"]},"689":{"title":"Spring Mail 설정","titles":["메일 발송 모듈"]},"690":{"title":"application.yaml","titles":["메일 발송 모듈","Spring Mail 설정"]},"691":{"title":"사용 방법","titles":["메일 발송 모듈"]},"692":{"title":"1. JavaMailSender 사용","titles":["메일 발송 모듈","사용 방법"]},"693":{"title":"2. HTML 이메일 발송","titles":["메일 발송 모듈","사용 방법"]},"694":{"title":"3. 첨부 파일 포함","titles":["메일 발송 모듈","사용 방법"]},"695":{"title":"메일 템플릿","titles":["메일 발송 모듈"]},"696":{"title":"Thymeleaf 템플릿 사용 (선택적)","titles":["메일 발송 모듈","메일 템플릿"]},"697":{"title":"공통 유틸리티","titles":["메일 발송 모듈"]},"698":{"title":"AxpCommMailUtil","titles":["메일 발송 모듈","공통 유틸리티"]},"699":{"title":"주의사항","titles":["메일 발송 모듈"]},"700":{"title":"다음 단계","titles":["메일 발송 모듈"]},"701":{"title":"리포트 생성 모듈","titles":[]},"702":{"title":"모듈 구조","titles":["리포트 생성 모듈"]},"703":{"title":"주요 클래스","titles":["리포트 생성 모듈"]},"704":{"title":"1. AxpReportController","titles":["리포트 생성 모듈","주요 클래스"]},"705":{"title":"2. AxpReportService","titles":["리포트 생성 모듈","주요 클래스"]},"706":{"title":"리포트 생성 프로세스","titles":["리포트 생성 모듈"]},"707":{"title":"1. 데이터 조회","titles":["리포트 생성 모듈","리포트 생성 프로세스"]},"708":{"title":"2. 리포트 파라미터 설정","titles":["리포트 생성 모듈","리포트 생성 프로세스"]},"709":{"title":"3. 리포트 컴파일 및 생성","titles":["리포트 생성 모듈","리포트 생성 프로세스"]},"710":{"title":"4. PDF 내보내기","titles":["리포트 생성 모듈","리포트 생성 프로세스"]},"711":{"title":"리포트 템플릿 위치","titles":["리포트 생성 모듈"]},"712":{"title":"리포트 파라미터 규칙","titles":["리포트 생성 모듈"]},"713":{"title":"커서 파라미터","titles":["리포트 생성 모듈","리포트 파라미터 규칙"]},"714":{"title":"일반 파라미터","titles":["리포트 생성 모듈","리포트 파라미터 규칙"]},"715":{"title":"이미지 파라미터","titles":["리포트 생성 모듈","리포트 파라미터 규칙"]},"716":{"title":"커서 변환","titles":["리포트 생성 모듈","리포트 파라미터 규칙"]},"717":{"title":"한글 폰트","titles":["리포트 생성 모듈"]},"718":{"title":"지원 폰트","titles":["리포트 생성 모듈","한글 폰트"]},"719":{"title":"폰트 위치","titles":["리포트 생성 모듈","한글 폰트"]},"720":{"title":"사용 예시","titles":["리포트 생성 모듈"]},"721":{"title":"PDF 리포트 생성","titles":["리포트 생성 모듈","사용 예시"]},"722":{"title":"Excel 리포트 다운로드","titles":["리포트 생성 모듈","사용 예시"]},"723":{"title":"주의사항","titles":["리포트 생성 모듈"]},"724":{"title":"다음 단계","titles":["리포트 생성 모듈"]},"725":{"title":"SMS 발송 모듈","titles":[]},"726":{"title":"모듈 구조","titles":["SMS 발송 모듈"]},"727":{"title":"주요 클래스","titles":["SMS 발송 모듈"]},"728":{"title":"1. AxpSmsController","titles":["SMS 발송 모듈","주요 클래스"]},"729":{"title":"2. AxpSmsService","titles":["SMS 발송 모듈","주요 클래스"]},"730":{"title":"SMS 발송 프로세스","titles":["SMS 발송 모듈"]},"731":{"title":"1. 발송 정보 저장","titles":["SMS 발송 모듈","SMS 발송 프로세스"]},"732":{"title":"2. KT CPaaS API 호출","titles":["SMS 발송 모듈","SMS 발송 프로세스"]},"733":{"title":"발송 타입","titles":["SMS 발송 모듈"]},"734":{"title":"rev_type","titles":["SMS 발송 모듈","발송 타입"]},"735":{"title":"rev_type_value","titles":["SMS 발송 모듈","발송 타입"]},"736":{"title":"메시지 타입","titles":["SMS 발송 모듈"]},"737":{"title":"msg_type","titles":["SMS 발송 모듈","메시지 타입"]},"738":{"title":"메시지 상태","titles":["SMS 발송 모듈"]},"739":{"title":"설정","titles":["SMS 발송 모듈"]},"740":{"title":"application.yaml","titles":["SMS 발송 모듈","설정"]},"741":{"title":"사용 예시","titles":["SMS 발송 모듈"]},"742":{"title":"즉시 발송","titles":["SMS 발송 모듈","사용 예시"]},"743":{"title":"예약 발송","titles":["SMS 발송 모듈","사용 예시"]},"744":{"title":"주의사항","titles":["SMS 발송 모듈"]},"745":{"title":"다음 단계","titles":["SMS 발송 모듈"]},"746":{"title":"리소스 파일 구조","titles":[]},"747":{"title":"디렉토리 구조","titles":["리소스 파일 구조"]},"748":{"title":"설정 파일","titles":["리소스 파일 구조"]},"749":{"title":"1. application.yaml","titles":["리소스 파일 구조","설정 파일"]},"750":{"title":"2. config/ 디렉토리","titles":["리소스 파일 구조","설정 파일"]},"751":{"title":"MyBatis 매퍼","titles":["리소스 파일 구조"]},"752":{"title":"mapper/ 디렉토리","titles":["리소스 파일 구조","MyBatis 매퍼"]},"753":{"title":"매퍼 파일 구조","titles":["리소스 파일 구조","MyBatis 매퍼"]},"754":{"title":"mapper-config/ 디렉토리","titles":["리소스 파일 구조","MyBatis 매퍼"]},"755":{"title":"리포트 템플릿","titles":["리소스 파일 구조"]},"756":{"title":"report/ 디렉토리","titles":["리소스 파일 구조","리포트 템플릿"]},"757":{"title":"리포트 템플릿 작성","titles":["리소스 파일 구조","리포트 템플릿"]},"758":{"title":"외부 라이브러리","titles":["리소스 파일 구조"]},"759":{"title":"lib/ 디렉토리","titles":["리소스 파일 구조","외부 라이브러리"]},"760":{"title":"보안 정책 파일","titles":["리소스 파일 구조"]},"761":{"title":"antisamy-policy.xml","titles":["리소스 파일 구조","보안 정책 파일"]},"762":{"title":"로깅 설정","titles":["리소스 파일 구조"]},"763":{"title":"logback-spring.xml","titles":["리소스 파일 구조","로깅 설정"]},"764":{"title":"배너","titles":["리소스 파일 구조"]},"765":{"title":"banner.txt","titles":["리소스 파일 구조","배너"]},"766":{"title":"다음 단계","titles":["리소스 파일 구조"]},"767":{"title":"주요 클래스 참조","titles":[]},"768":{"title":"공통 컨트롤러","titles":["주요 클래스 참조"]},"769":{"title":"공통 서비스","titles":["주요 클래스 참조"]},"770":{"title":"설정 클래스","titles":["주요 클래스 참조"]},"771":{"title":"다음 단계","titles":["주요 클래스 참조"]},"772":{"title":"설정 파일 참조","titles":[]},"773":{"title":"설정 파일","titles":["설정 파일 참조"]},"774":{"title":"MyBatis 설정","titles":["설정 파일 참조"]},"775":{"title":"다음 단계","titles":["설정 파일 참조"]},"776":{"title":"외부 라이브러리 문서","titles":[]},"777":{"title":"Spring Boot","titles":["외부 라이브러리 문서"]},"778":{"title":"MyBatis","titles":["외부 라이브러리 문서"]},"779":{"title":"Spring Security","titles":["외부 라이브러리 문서"]},"780":{"title":"JWT","titles":["외부 라이브러리 문서"]},"781":{"title":"JasperReports","titles":["외부 라이브러리 문서"]},"782":{"title":"Apache POI","titles":["외부 라이브러리 문서"]},"783":{"title":"Redis","titles":["외부 라이브러리 문서"]},"784":{"title":"암호화 유틸리티","titles":[]},"785":{"title":"AES-128","titles":["암호화 유틸리티"]},"786":{"title":"사용 예시","titles":["암호화 유틸리티","AES-128"]},"787":{"title":"용도","titles":["암호화 유틸리티","AES-128"]},"788":{"title":"RSA","titles":["암호화 유틸리티"]},"789":{"title":"사용 예시","titles":["암호화 유틸리티","RSA"]},"790":{"title":"설정","titles":["암호화 유틸리티","RSA"]},"791":{"title":"해시 함수","titles":["암호화 유틸리티"]},"792":{"title":"MD5","titles":["암호화 유틸리티","해시 함수"]},"793":{"title":"SHA-256","titles":["암호화 유틸리티","해시 함수"]},"794":{"title":"다음 단계","titles":["암호화 유틸리티"]},"795":{"title":"보안 필터","titles":[]},"796":{"title":"필터 실행 순서","titles":["보안 필터"]},"797":{"title":"XSS 필터","titles":["보안 필터"]},"798":{"title":"AxpXssFilter","titles":["보안 필터","XSS 필터"]},"799":{"title":"설정","titles":["보안 필터","XSS 필터"]},"800":{"title":"복호화 필터","titles":["보안 필터"]},"801":{"title":"AxpDecryptFilter","titles":["보안 필터","복호화 필터"]},"802":{"title":"JWT 인증 필터","titles":["보안 필터"]},"803":{"title":"AxpJwtAuthenticationFilter","titles":["보안 필터","JWT 인증 필터"]},"804":{"title":"Rate Limiting","titles":["보안 필터","JWT 인증 필터"]},"805":{"title":"CORS 로깅 필터","titles":["보안 필터"]},"806":{"title":"AxpCorsLoggingFilter","titles":["보안 필터","CORS 로깅 필터"]},"807":{"title":"다음 단계","titles":["보안 필터"]},"808":{"title":"JWT 인증","titles":[]},"809":{"title":"토큰 타입","titles":["JWT 인증"]},"810":{"title":"Access Token","titles":["JWT 인증","토큰 타입"]},"811":{"title":"Refresh Token","titles":["JWT 인증","토큰 타입"]},"812":{"title":"토큰 생성","titles":["JWT 인증"]},"813":{"title":"토큰 검증","titles":["JWT 인증"]},"814":{"title":"토큰 재발급","titles":["JWT 인증"]},"815":{"title":"API 엔드포인트","titles":["JWT 인증","토큰 재발급"]},"816":{"title":"요청","titles":["JWT 인증","토큰 재발급"]},"817":{"title":"응답","titles":["JWT 인증","토큰 재발급"]},"818":{"title":"Redis 토큰 저장","titles":["JWT 인증"]},"819":{"title":"다음 단계","titles":["JWT 인증"]},"820":{"title":"Spring Security 설정","titles":[]},"821":{"title":"SecurityFilterChain","titles":["Spring Security 설정"]},"822":{"title":"기본 설정","titles":["Spring Security 설정","SecurityFilterChain"]},"823":{"title":"제외 URI 설정","titles":["Spring Security 설정","SecurityFilterChain"]},"824":{"title":"보안 헤더","titles":["Spring Security 설정"]},"825":{"title":"Content-Security-Policy","titles":["Spring Security 설정","보안 헤더"]},"826":{"title":"X-Frame-Options","titles":["Spring Security 설정","보안 헤더"]},"827":{"title":"기타 보안 헤더","titles":["Spring Security 설정","보안 헤더"]},"828":{"title":"예외 처리","titles":["Spring Security 설정"]},"829":{"title":"AccessDeniedHandler","titles":["Spring Security 설정","예외 처리"]},"830":{"title":"AuthenticationEntryPoint","titles":["Spring Security 설정","예외 처리"]},"831":{"title":"다음 단계","titles":["Spring Security 설정"]},"832":{"title":"데이터베이스","titles":[]},"833":{"title":"지원 데이터베이스","titles":["데이터베이스"]},"834":{"title":"1. Tibero6 (기본값)","titles":["데이터베이스","지원 데이터베이스"]},"835":{"title":"2. Oracle","titles":["데이터베이스","지원 데이터베이스"]},"836":{"title":"3. PostgreSQL","titles":["데이터베이스","지원 데이터베이스"]},"837":{"title":"데이터소스 설정","titles":["데이터베이스"]},"838":{"title":"AxpDataSourceConfig","titles":["데이터베이스","데이터소스 설정"]},"839":{"title":"HikariCP 커넥션 풀","titles":["데이터베이스"]},"840":{"title":"Tibero 설정","titles":["데이터베이스","HikariCP 커넥션 풀"]},"841":{"title":"PostgreSQL 설정","titles":["데이터베이스","HikariCP 커넥션 풀"]},"842":{"title":"MyBatis 설정","titles":["데이터베이스"]},"843":{"title":"DB별 설정 파일","titles":["데이터베이스","MyBatis 설정"]},"844":{"title":"매퍼 파일 위치","titles":["데이터베이스","MyBatis 설정"]},"845":{"title":"프로시저 호출","titles":["데이터베이스"]},"846":{"title":"공통 프로시저 호출 서비스","titles":["데이터베이스","프로시저 호출"]},"847":{"title":"DB별 프로시저 호출","titles":["데이터베이스","프로시저 호출"]},"848":{"title":"Redis (Valkey 호환)","titles":["데이터베이스"]},"849":{"title":"용도","titles":["데이터베이스","Redis (Valkey 호환)"]},"850":{"title":"설정","titles":["데이터베이스","Redis (Valkey 호환)"]},"851":{"title":"RedisTemplate","titles":["데이터베이스","Redis (Valkey 호환)"]},"852":{"title":"다음 단계","titles":["데이터베이스"]},"853":{"title":"문서화 및 API","titles":[]},"854":{"title":"Springdoc OpenAPI","titles":["문서화 및 API"]},"855":{"title":"버전","titles":["문서화 및 API","Springdoc OpenAPI"]},"856":{"title":"기능","titles":["문서화 및 API","Springdoc OpenAPI"]},"857":{"title":"접근 URL","titles":["문서화 및 API","Springdoc OpenAPI"]},"858":{"title":"API 문서 자동 생성","titles":["문서화 및 API"]},"859":{"title":"컨트롤러 어노테이션","titles":["문서화 및 API","API 문서 자동 생성"]},"860":{"title":"주요 어노테이션","titles":["문서화 및 API","API 문서 자동 생성"]},"861":{"title":"@Tag","titles":["문서화 및 API","API 문서 자동 생성","주요 어노테이션"]},"862":{"title":"@Operation","titles":["문서화 및 API","API 문서 자동 생성","주요 어노테이션"]},"863":{"title":"@Parameter","titles":["문서화 및 API","API 문서 자동 생성","주요 어노테이션"]},"864":{"title":"@ApiResponse","titles":["문서화 및 API","API 문서 자동 생성","주요 어노테이션"]},"865":{"title":"OpenAPI 스펙","titles":["문서화 및 API"]},"866":{"title":"JSON 형식","titles":["문서화 및 API","OpenAPI 스펙"]},"867":{"title":"YAML 형식","titles":["문서화 및 API","OpenAPI 스펙"]},"868":{"title":"문서 커스터마이징","titles":["문서화 및 API"]},"869":{"title":"기본 정보 설정","titles":["문서화 및 API","문서 커스터마이징"]},"870":{"title":"그룹 설정","titles":["문서화 및 API","문서 커스터마이징"]},"871":{"title":"API 테스트","titles":["문서화 및 API"]},"872":{"title":"Swagger UI에서 테스트","titles":["문서화 및 API","API 테스트"]},"873":{"title":"인증 설정","titles":["문서화 및 API","API 테스트"]},"874":{"title":"다음 단계","titles":["문서화 및 API"]},"875":{"title":"파일 처리","titles":[]},"876":{"title":"Apache POI","titles":["파일 처리"]},"877":{"title":"버전","titles":["파일 처리","Apache POI"]},"878":{"title":"기능","titles":["파일 처리","Apache POI"]},"879":{"title":"사용 예시","titles":["파일 처리","Apache POI"]},"880":{"title":"JXLS","titles":["파일 처리"]},"881":{"title":"버전","titles":["파일 처리","JXLS"]},"882":{"title":"기능","titles":["파일 처리","JXLS"]},"883":{"title":"사용 예시","titles":["파일 처리","JXLS"]},"884":{"title":"JasperReports","titles":["파일 처리"]},"885":{"title":"버전","titles":["파일 처리","JasperReports"]},"886":{"title":"기능","titles":["파일 처리","JasperReports"]},"887":{"title":"리포트 템플릿","titles":["파일 처리","JasperReports"]},"888":{"title":"리포트 생성","titles":["파일 처리","JasperReports"]},"889":{"title":"한글 폰트 설정","titles":["파일 처리","JasperReports"]},"890":{"title":"파일 업로드","titles":["파일 처리"]},"891":{"title":"MultipartFile","titles":["파일 처리","파일 업로드"]},"892":{"title":"파일 크기 제한","titles":["파일 처리","파일 업로드"]},"893":{"title":"파일 다운로드","titles":["파일 처리"]},"894":{"title":"ResponseEntity 사용","titles":["파일 처리","파일 다운로드"]},"895":{"title":"파일 유틸리티","titles":["파일 처리"]},"896":{"title":"AxpCommFileUtil","titles":["파일 처리","파일 유틸리티"]},"897":{"title":"MIME 타입 감지","titles":["파일 처리"]},"898":{"title":"jmimemagic","titles":["파일 처리","MIME 타입 감지"]},"899":{"title":"다음 단계","titles":["파일 처리"]},"900":{"title":"프레임워크 및 라이브러리","titles":[]},"901":{"title":"Spring Boot","titles":["프레임워크 및 라이브러리"]},"902":{"title":"버전","titles":["프레임워크 및 라이브러리","Spring Boot"]},"903":{"title":"주요 모듈","titles":["프레임워크 및 라이브러리","Spring Boot"]},"904":{"title":"Spring Boot Starter Web","titles":["프레임워크 및 라이브러리","Spring Boot","주요 모듈"]},"905":{"title":"Spring Boot Starter AOP","titles":["프레임워크 및 라이브러리","Spring Boot","주요 모듈"]},"906":{"title":"Spring Session","titles":["프레임워크 및 라이브러리","Spring Boot","주요 모듈"]},"907":{"title":"MyBatis","titles":["프레임워크 및 라이브러리"]},"908":{"title":"버전","titles":["프레임워크 및 라이브러리","MyBatis"]},"909":{"title":"특징","titles":["프레임워크 및 라이브러리","MyBatis"]},"910":{"title":"설정","titles":["프레임워크 및 라이브러리","MyBatis"]},"911":{"title":"Lombok","titles":["프레임워크 및 라이브러리"]},"912":{"title":"버전","titles":["프레임워크 및 라이브러리","Lombok"]},"913":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","Lombok"]},"914":{"title":"사용 예시","titles":["프레임워크 및 라이브러리","Lombok"]},"915":{"title":"Spring Security","titles":["프레임워크 및 라이브러리"]},"916":{"title":"버전","titles":["프레임워크 및 라이브러리","Spring Security"]},"917":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","Spring Security"]},"918":{"title":"설정 위치","titles":["프레임워크 및 라이브러리","Spring Security"]},"919":{"title":"Springdoc OpenAPI","titles":["프레임워크 및 라이브러리"]},"920":{"title":"버전","titles":["프레임워크 및 라이브러리","Springdoc OpenAPI"]},"921":{"title":"기능","titles":["프레임워크 및 라이브러리","Springdoc OpenAPI"]},"922":{"title":"Jackson","titles":["프레임워크 및 라이브러리"]},"923":{"title":"기능","titles":["프레임워크 및 라이브러리","Jackson"]},"924":{"title":"설정","titles":["프레임워크 및 라이브러리","Jackson"]},"925":{"title":"Apache Commons","titles":["프레임워크 및 라이브러리"]},"926":{"title":"주요 라이브러리","titles":["프레임워크 및 라이브러리","Apache Commons"]},"927":{"title":"Commons IO","titles":["프레임워크 및 라이브러리","Apache Commons","주요 라이브러리"]},"928":{"title":"Commons Codec","titles":["프레임워크 및 라이브러리","Apache Commons","주요 라이브러리"]},"929":{"title":"Commons Lang3","titles":["프레임워크 및 라이브러리","Apache Commons","주요 라이브러리"]},"930":{"title":"JWT (JSON Web Token)","titles":["프레임워크 및 라이브러리"]},"931":{"title":"버전","titles":["프레임워크 및 라이브러리","JWT (JSON Web Token)"]},"932":{"title":"모듈","titles":["프레임워크 및 라이브러리","JWT (JSON Web Token)"]},"933":{"title":"사용 예시","titles":["프레임워크 및 라이브러리","JWT (JSON Web Token)"]},"934":{"title":"OWASP AntiSamy","titles":["프레임워크 및 라이브러리"]},"935":{"title":"버전","titles":["프레임워크 및 라이브러리","OWASP AntiSamy"]},"936":{"title":"기능","titles":["프레임워크 및 라이브러리","OWASP AntiSamy"]},"937":{"title":"다음 단계","titles":["프레임워크 및 라이브러리"]},"938":{"title":"보안 및 인증","titles":[]},"939":{"title":"JWT (JSON Web Token)","titles":["보안 및 인증"]},"940":{"title":"버전","titles":["보안 및 인증","JWT (JSON Web Token)"]},"941":{"title":"토큰 타입","titles":["보안 및 인증","JWT (JSON Web Token)"]},"942":{"title":"Access Token","titles":["보안 및 인증","JWT (JSON Web Token)","토큰 타입"]},"943":{"title":"Refresh Token","titles":["보안 및 인증","JWT (JSON Web Token)","토큰 타입"]},"944":{"title":"토큰 생성","titles":["보안 및 인증","JWT (JSON Web Token)"]},"945":{"title":"토큰 검증","titles":["보안 및 인증","JWT (JSON Web Token)"]},"946":{"title":"설정","titles":["보안 및 인증","JWT (JSON Web Token)"]},"947":{"title":"Spring Security","titles":["보안 및 인증"]},"948":{"title":"SecurityFilterChain","titles":["보안 및 인증","Spring Security"]},"949":{"title":"제외 URI 설정","titles":["보안 및 인증","Spring Security"]},"950":{"title":"JWT 제외 URI 설정","titles":["보안 및 인증","Spring Security"]},"951":{"title":"JWT 인증 필터","titles":["보안 및 인증"]},"952":{"title":"AxpJwtAuthenticationFilter","titles":["보안 및 인증","JWT 인증 필터"]},"953":{"title":"Rate Limiting","titles":["보안 및 인증","JWT 인증 필터"]},"954":{"title":"암호화","titles":["보안 및 인증"]},"955":{"title":"AES-128","titles":["보안 및 인증","암호화"]},"956":{"title":"RSA","titles":["보안 및 인증","암호화"]},"957":{"title":"해시 함수","titles":["보안 및 인증","암호화"]},"958":{"title":"MD5","titles":["보안 및 인증","암호화","해시 함수"]},"959":{"title":"SHA-256","titles":["보안 및 인증","암호화","해시 함수"]},"960":{"title":"XSS 방지","titles":["보안 및 인증"]},"961":{"title":"OWASP AntiSamy","titles":["보안 및 인증","XSS 방지"]},"962":{"title":"정책 파일","titles":["보안 및 인증","XSS 방지"]},"963":{"title":"XSS 필터","titles":["보안 및 인증","XSS 방지"]},"964":{"title":"보안 헤더","titles":["보안 및 인증"]},"965":{"title":"다음 단계","titles":["보안 및 인증"]},"966":{"title":"기타 유틸리티","titles":[]},"967":{"title":"Jsoup","titles":["기타 유틸리티"]},"968":{"title":"버전","titles":["기타 유틸리티","Jsoup"]},"969":{"title":"기능","titles":["기타 유틸리티","Jsoup"]},"970":{"title":"사용 예시","titles":["기타 유틸리티","Jsoup"]},"971":{"title":"JUniversalCharDet","titles":["기타 유틸리티"]},"972":{"title":"버전","titles":["기타 유틸리티","JUniversalCharDet"]},"973":{"title":"기능","titles":["기타 유틸리티","JUniversalCharDet"]},"974":{"title":"사용 예시","titles":["기타 유틸리티","JUniversalCharDet"]},"975":{"title":"Google GenAI SDK","titles":["기타 유틸리티"]},"976":{"title":"버전","titles":["기타 유틸리티","Google GenAI SDK"]},"977":{"title":"기능","titles":["기타 유틸리티","Google GenAI SDK"]},"978":{"title":"사용 예시","titles":["기타 유틸리티","Google GenAI SDK"]},"979":{"title":"Commons BeanUtils","titles":["기타 유틸리티"]},"980":{"title":"버전","titles":["기타 유틸리티","Commons BeanUtils"]},"981":{"title":"기능","titles":["기타 유틸리티","Commons BeanUtils"]},"982":{"title":"사용 예시","titles":["기타 유틸리티","Commons BeanUtils"]},"983":{"title":"Commons Collections","titles":["기타 유틸리티"]},"984":{"title":"버전","titles":["기타 유틸리티","Commons Collections"]},"985":{"title":"기능","titles":["기타 유틸리티","Commons Collections"]},"986":{"title":"사용 예시","titles":["기타 유틸리티","Commons Collections"]},"987":{"title":"다음 단계","titles":["기타 유틸리티"]},"988":{"title":"단위 테스트","titles":[]},"989":{"title":"기본 구조","titles":["단위 테스트"]},"990":{"title":"다음 단계","titles":["단위 테스트"]},"991":{"title":"로그 확인","titles":[]},"992":{"title":"로그 파일 위치","titles":["로그 확인"]},"993":{"title":"로그 레벨 설정","titles":["로그 확인"]},"994":{"title":"다음 단계","titles":["로그 확인"]},"995":{"title":"통합 테스트","titles":[]},"996":{"title":"기본 구조","titles":["통합 테스트"]},"997":{"title":"다음 단계","titles":["통합 테스트"]},"998":{"title":"일반적인 문제 해결","titles":[]},"999":{"title":"포트 충돌","titles":["일반적인 문제 해결"]},"1000":{"title":"데이터베이스 연결 실패","titles":["일반적인 문제 해결"]},"1001":{"title":"Redis 연결 실패","titles":["일반적인 문제 해결"]},"1002":{"title":"다음 단계","titles":["일반적인 문제 해결"]},"1003":{"title":"버튼 컴포넌트","titles":[]},"1004":{"title":"ButtonBox","titles":["버튼 컴포넌트"]},"1005":{"title":"파일 위치","titles":["버튼 컴포넌트","ButtonBox"]},"1006":{"title":"사용 예제","titles":["버튼 컴포넌트","ButtonBox"]},"1007":{"title":"Vuetify 버튼","titles":["버튼 컴포넌트"]},"1008":{"title":"입력 컴포넌트","titles":[]},"1009":{"title":"InputPhone","titles":["입력 컴포넌트"]},"1010":{"title":"파일 위치","titles":["입력 컴포넌트","InputPhone"]},"1011":{"title":"사용 예제","titles":["입력 컴포넌트","InputPhone"]},"1012":{"title":"Vuetify 입력","titles":["입력 컴포넌트"]},"1013":{"title":"로딩 컴포넌트","titles":[]},"1014":{"title":"Loading","titles":["로딩 컴포넌트"]},"1015":{"title":"파일 위치","titles":["로딩 컴포넌트","Loading"]},"1016":{"title":"사용 예제","titles":["로딩 컴포넌트","Loading"]},"1017":{"title":"조회 컴포넌트 (LookUp)","titles":[]},"1018":{"title":"LookUpBox","titles":["조회 컴포넌트 (LookUp)"]},"1019":{"title":"파일 위치","titles":["조회 컴포넌트 (LookUp)","LookUpBox"]},"1020":{"title":"사용 예제","titles":["조회 컴포넌트 (LookUp)","LookUpBox"]},"1021":{"title":"선택 컴포넌트","titles":[]},"1022":{"title":"개요","titles":["선택 컴포넌트"]},"1023":{"title":"SelectBoxSQL","titles":["선택 컴포넌트"]},"1024":{"title":"개요","titles":["선택 컴포넌트","SelectBoxSQL"]},"1025":{"title":"파일 위치","titles":["선택 컴포넌트","SelectBoxSQL"]},"1026":{"title":"Props","titles":["선택 컴포넌트","SelectBoxSQL"]},"1027":{"title":"사용 예제","titles":["선택 컴포넌트","SelectBoxSQL"]},"1028":{"title":"실제 컴포넌트","titles":["선택 컴포넌트","SelectBoxSQL"]},"1029":{"title":"API 연동 예제","titles":["선택 컴포넌트","SelectBoxSQL"]},"1030":{"title":"MultiSelectBoxSQL","titles":["선택 컴포넌트"]},"1031":{"title":"개요","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1032":{"title":"파일 위치","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1033":{"title":"Props","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1034":{"title":"Columns 정의","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1035":{"title":"사용 예제","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1036":{"title":"콜백 함수 사용","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1037":{"title":"SelectBoxDate","titles":["선택 컴포넌트"]},"1038":{"title":"개요","titles":["선택 컴포넌트","SelectBoxDate"]},"1039":{"title":"파일 위치","titles":["선택 컴포넌트","SelectBoxDate"]},"1040":{"title":"사용 예제","titles":["선택 컴포넌트","SelectBoxDate"]},"1041":{"title":"AG Grid에서 사용하기","titles":["선택 컴포넌트"]},"1042":{"title":"GridMultiSelectWrapper","titles":["선택 컴포넌트","AG Grid에서 사용하기"]},"1043":{"title":"사용 예제","titles":["선택 컴포넌트","AG Grid에서 사용하기"]},"1044":{"title":"스타일 커스터마이징","titles":["선택 컴포넌트"]},"1045":{"title":"주의사항","titles":["선택 컴포넌트"]},"1046":{"title":"관련 문서","titles":["선택 컴포넌트"]},"1047":{"title":"트리 컴포넌트","titles":[]},"1048":{"title":"TreeDeptDropdown","titles":["트리 컴포넌트"]},"1049":{"title":"파일 위치","titles":["트리 컴포넌트","TreeDeptDropdown"]},"1050":{"title":"TreeEmpDropdown","titles":["트리 컴포넌트"]},"1051":{"title":"파일 위치","titles":["트리 컴포넌트","TreeEmpDropdown"]},"1052":{"title":"TreeOrgNode","titles":["트리 컴포넌트"]},"1053":{"title":"파일 위치","titles":["트리 컴포넌트","TreeOrgNode"]},"1054":{"title":"AG Grid 래퍼","titles":[]},"1055":{"title":"개요","titles":["AG Grid 래퍼"]},"1056":{"title":"기본 사용","titles":["AG Grid 래퍼"]},"1057":{"title":"셀 에디터","titles":["AG Grid 래퍼"]},"1058":{"title":"그리드 클릭 필드","titles":[]},"1059":{"title":"GridClickField","titles":["그리드 클릭 필드"]},"1060":{"title":"개요","titles":["그리드 클릭 필드","GridClickField"]},"1061":{"title":"파일 위치","titles":["그리드 클릭 필드","GridClickField"]},"1062":{"title":"주요 기능","titles":["그리드 클릭 필드","GridClickField"]},"1063":{"title":"사용 예제","titles":["그리드 클릭 필드","GridClickField"]},"1064":{"title":"Props","titles":["그리드 클릭 필드","GridClickField"]},"1065":{"title":"그리드 컨텍스트 메뉴","titles":[]},"1066":{"title":"GridContextMenu","titles":["그리드 컨텍스트 메뉴"]},"1067":{"title":"개요","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1068":{"title":"파일 위치","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1069":{"title":"주요 기능","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1070":{"title":"컬럼 헤더 컨텍스트 메뉴","titles":["그리드 컨텍스트 메뉴","GridContextMenu","주요 기능"]},"1071":{"title":"셀 컨텍스트 메뉴","titles":["그리드 컨텍스트 메뉴","GridContextMenu","주요 기능"]},"1072":{"title":"사용 예제","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1073":{"title":"컨텍스트 메뉴 스토어","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1074":{"title":"멀티 선택 그리드","titles":[]},"1075":{"title":"GridMultiSelectWrapper","titles":["멀티 선택 그리드"]},"1076":{"title":"파일 위치","titles":["멀티 선택 그리드","GridMultiSelectWrapper"]},"1077":{"title":"사용 예제","titles":["멀티 선택 그리드","GridMultiSelectWrapper"]},"1078":{"title":"블랭크 레이아웃","titles":[]},"1079":{"title":"blank.vue","titles":["블랭크 레이아웃"]},"1080":{"title":"개요","titles":["블랭크 레이아웃","blank.vue"]},"1081":{"title":"파일 위치","titles":["블랭크 레이아웃","blank.vue"]},"1082":{"title":"특징","titles":["블랭크 레이아웃","blank.vue"]},"1083":{"title":"사용 예제","titles":["블랭크 레이아웃","blank.vue"]},"1084":{"title":"메인 레이아웃","titles":[]},"1085":{"title":"Main.vue","titles":["메인 레이아웃"]},"1086":{"title":"개요","titles":["메인 레이아웃","Main.vue"]},"1087":{"title":"파일 위치","titles":["메인 레이아웃","Main.vue"]},"1088":{"title":"주요 구성 요소","titles":["메인 레이아웃","Main.vue"]},"1089":{"title":"레이아웃 구조","titles":["메인 레이아웃","Main.vue"]},"1090":{"title":"탭 관리","titles":["메인 레이아웃","Main.vue"]},"1091":{"title":"사용 예제","titles":["메인 레이아웃","Main.vue"]},"1092":{"title":"팝업 레이아웃","titles":[]},"1093":{"title":"popBlank.vue","titles":["팝업 레이아웃"]},"1094":{"title":"개요","titles":["팝업 레이아웃","popBlank.vue"]},"1095":{"title":"파일 위치","titles":["팝업 레이아웃","popBlank.vue"]},"1096":{"title":"특징","titles":["팝업 레이아웃","popBlank.vue"]},"1097":{"title":"동적 컴포넌트 로드","titles":["팝업 레이아웃","popBlank.vue"]},"1098":{"title":"사용 예제","titles":["팝업 레이아웃","popBlank.vue"]},"1099":{"title":"팝업 열기","titles":["팝업 레이아웃","popBlank.vue"]},"1100":{"title":"북마크 메뉴","titles":[]},"1101":{"title":"MenuBmk","titles":["북마크 메뉴"]},"1102":{"title":"개요","titles":["북마크 메뉴","MenuBmk"]},"1103":{"title":"파일 위치","titles":["북마크 메뉴","MenuBmk"]},"1104":{"title":"주요 기능","titles":["북마크 메뉴","MenuBmk"]},"1105":{"title":"사용 예제","titles":["북마크 메뉴","MenuBmk"]},"1106":{"title":"드래그 앤 드롭","titles":["북마크 메뉴","MenuBmk"]},"1107":{"title":"메뉴 헤더바","titles":[]},"1108":{"title":"MenuHeaderBar","titles":["메뉴 헤더바"]},"1109":{"title":"개요","titles":["메뉴 헤더바","MenuHeaderBar"]},"1110":{"title":"파일 위치","titles":["메뉴 헤더바","MenuHeaderBar"]},"1111":{"title":"주요 기능","titles":["메뉴 헤더바","MenuHeaderBar"]},"1112":{"title":"사용 예제","titles":["메뉴 헤더바","MenuHeaderBar"]},"1113":{"title":"메뉴 구조","titles":["메뉴 헤더바","MenuHeaderBar"]},"1114":{"title":"사이드바 메뉴","titles":[]},"1115":{"title":"MenuSideBar","titles":["사이드바 메뉴"]},"1116":{"title":"개요","titles":["사이드바 메뉴","MenuSideBar"]},"1117":{"title":"파일 위치","titles":["사이드바 메뉴","MenuSideBar"]},"1118":{"title":"주요 기능","titles":["사이드바 메뉴","MenuSideBar"]},"1119":{"title":"사용 예제","titles":["사이드바 메뉴","MenuSideBar"]},"1120":{"title":"메뉴 구조","titles":["사이드바 메뉴","MenuSideBar"]},"1121":{"title":"즐겨찾기","titles":["사이드바 메뉴","MenuSideBar"]},"1122":{"title":"승인 목록 팝업","titles":[]},"1123":{"title":"PopupApproveList","titles":["승인 목록 팝업"]},"1124":{"title":"개요","titles":["승인 목록 팝업","PopupApproveList"]},"1125":{"title":"파일 위치","titles":["승인 목록 팝업","PopupApproveList"]},"1126":{"title":"사용 예제","titles":["승인 목록 팝업","PopupApproveList"]},"1127":{"title":"Props","titles":["승인 목록 팝업","PopupApproveList"]},"1128":{"title":"승인 팝업","titles":[]},"1129":{"title":"PopupApproval","titles":["승인 팝업"]},"1130":{"title":"파일 위치","titles":["승인 팝업","PopupApproval"]},"1131":{"title":"PopupApprovalBox","titles":["승인 팝업"]},"1132":{"title":"파일 위치","titles":["승인 팝업","PopupApprovalBox"]},"1133":{"title":"PopupApproveList","titles":["승인 팝업"]},"1134":{"title":"파일 위치","titles":["승인 팝업","PopupApproveList"]},"1135":{"title":"파일 링크 팝업","titles":[]},"1136":{"title":"PopupFileLink","titles":["파일 링크 팝업"]},"1137":{"title":"개요","titles":["파일 링크 팝업","PopupFileLink"]},"1138":{"title":"파일 위치","titles":["파일 링크 팝업","PopupFileLink"]},"1139":{"title":"주요 기능","titles":["파일 링크 팝업","PopupFileLink"]},"1140":{"title":"사용 예제","titles":["파일 링크 팝업","PopupFileLink"]},"1141":{"title":"로그 팝업","titles":[]},"1142":{"title":"PopupLog","titles":["로그 팝업"]},"1143":{"title":"파일 위치","titles":["로그 팝업","PopupLog"]},"1144":{"title":"PopupPageLog","titles":["로그 팝업"]},"1145":{"title":"파일 위치","titles":["로그 팝업","PopupPageLog"]},"1146":{"title":"페이지 로그 팝업","titles":[]},"1147":{"title":"PopupPageLog","titles":["페이지 로그 팝업"]},"1148":{"title":"개요","titles":["페이지 로그 팝업","PopupPageLog"]},"1149":{"title":"파일 위치","titles":["페이지 로그 팝업","PopupPageLog"]},"1150":{"title":"주요 기능","titles":["페이지 로그 팝업","PopupPageLog"]},"1151":{"title":"사용 예제","titles":["페이지 로그 팝업","PopupPageLog"]},"1152":{"title":"SMS 템플릿 팝업","titles":[]},"1153":{"title":"PopupSmsTemplateList","titles":["SMS 템플릿 팝업"]},"1154":{"title":"개요","titles":["SMS 템플릿 팝업","PopupSmsTemplateList"]},"1155":{"title":"파일 위치","titles":["SMS 템플릿 팝업","PopupSmsTemplateList"]},"1156":{"title":"주요 기능","titles":["SMS 템플릿 팝업","PopupSmsTemplateList"]},"1157":{"title":"사용 예제","titles":["SMS 템플릿 팝업","PopupSmsTemplateList"]},"1158":{"title":"경로 별칭 (Alias)","titles":[]},"1159":{"title":"개요","titles":["경로 별칭 (Alias)"]},"1160":{"title":"설정 위치","titles":["경로 별칭 (Alias)"]},"1161":{"title":"주요 별칭","titles":["경로 별칭 (Alias)"]},"1162":{"title":"사용 예제","titles":["경로 별칭 (Alias)"]},"1163":{"title":"jsconfig.json","titles":["경로 별칭 (Alias)"]},"1164":{"title":"주의사항","titles":["경로 별칭 (Alias)"]},"1165":{"title":"환경 변수 (.env)","titles":[]},"1166":{"title":"개요","titles":["환경 변수 (.env)"]},"1167":{"title":"환경 변수 파일","titles":["환경 변수 (.env)"]},"1168":{"title":"필수 환경 변수","titles":["환경 변수 (.env)"]},"1169":{"title":"환경 변수 사용","titles":["환경 변수 (.env)"]},"1170":{"title":"환경별 설정","titles":["환경 변수 (.env)"]},"1171":{"title":"개발 환경 (.env.development)","titles":["환경 변수 (.env)","환경별 설정"]},"1172":{"title":"프로덕션 환경 (.env.production)","titles":["환경 변수 (.env)","환경별 설정"]},"1173":{"title":"주의사항","titles":["환경 변수 (.env)"]},"1174":{"title":"빌드 설정","titles":[]},"1175":{"title":"개요","titles":["빌드 설정"]},"1176":{"title":"설정 위치","titles":["빌드 설정"]},"1177":{"title":"빌드 옵션","titles":["빌드 설정"]},"1178":{"title":"chunkSizeWarningLimit","titles":["빌드 설정","빌드 옵션"]},"1179":{"title":"빌드 명령어","titles":["빌드 설정"]},"1180":{"title":"개발 빌드","titles":["빌드 설정","빌드 명령어"]},"1181":{"title":"스테이징 빌드","titles":["빌드 설정","빌드 명령어"]},"1182":{"title":"프로덕션 빌드","titles":["빌드 설정","빌드 명령어"]},"1183":{"title":"빌드 결과물","titles":["빌드 설정"]},"1184":{"title":"빌드 최적화","titles":["빌드 설정"]},"1185":{"title":"환경별 빌드","titles":["빌드 설정"]},"1186":{"title":"프록시 설정","titles":[]},"1187":{"title":"개요","titles":["프록시 설정"]},"1188":{"title":"설정 위치","titles":["프록시 설정"]},"1189":{"title":"프록시 설정","titles":["프록시 설정"]},"1190":{"title":"프록시 경로","titles":["프록시 설정"]},"1191":{"title":"/api","titles":["프록시 설정","프록시 경로"]},"1192":{"title":"/auth","titles":["프록시 설정","프록시 경로"]},"1193":{"title":"/files","titles":["프록시 설정","프록시 경로"]},"1194":{"title":"사용 예제","titles":["프록시 설정"]},"1195":{"title":"주의사항","titles":["프록시 설정"]},"1196":{"title":"Vite 설정","titles":[]},"1197":{"title":"개요","titles":["Vite 설정"]},"1198":{"title":"주요 설정","titles":["Vite 설정"]},"1199":{"title":"플러그인","titles":["Vite 설정","주요 설정"]},"1200":{"title":"서버 설정","titles":["Vite 설정","주요 설정"]},"1201":{"title":"경로 별칭","titles":["Vite 설정","주요 설정"]},"1202":{"title":"환경 변수","titles":["Vite 설정"]},"1203":{"title":"빌드 설정","titles":["Vite 설정"]},"1204":{"title":"자동 임포트 설정","titles":["Vite 설정"]},"1205":{"title":"AutoImport","titles":["Vite 설정","자동 임포트 설정"]},"1206":{"title":"Components","titles":["Vite 설정","자동 임포트 설정"]},"1207":{"title":"암호화/복호화","titles":[]},"1208":{"title":"개요","titles":["암호화/복호화"]},"1209":{"title":"암호화 설정","titles":["암호화/복호화"]},"1210":{"title":"요청 암호화","titles":["암호화/복호화"]},"1211":{"title":"일반 요청 (JSON)","titles":["암호화/복호화","요청 암호화"]},"1212":{"title":"파일 업로드 (FormData)","titles":["암호화/복호화","요청 암호화"]},"1213":{"title":"응답 복호화","titles":["암호화/복호화"]},"1214":{"title":"암호화 함수","titles":["암호화/복호화"]},"1215":{"title":"encryptObject(data)","titles":["암호화/복호화","암호화 함수"]},"1216":{"title":"decryptObject(data)","titles":["암호화/복호화","암호화 함수"]},"1217":{"title":"encryptBinary(bytes, file)","titles":["암호화/복호화","암호화 함수"]},"1218":{"title":"사용 예제","titles":["암호화/복호화"]},"1219":{"title":"암호화 활성화","titles":["암호화/복호화","사용 예제"]},"1220":{"title":"수동 암호화/복호화","titles":["암호화/복호화","사용 예제"]},"1221":{"title":"주의사항","titles":["암호화/복호화"]},"1222":{"title":"관련 문서","titles":["암호화/복호화"]},"1223":{"title":"JWT 인증","titles":[]},"1224":{"title":"개요","titles":["JWT 인증"]},"1225":{"title":"토큰 구조","titles":["JWT 인증"]},"1226":{"title":"Access Token","titles":["JWT 인증","토큰 구조"]},"1227":{"title":"Refresh Token","titles":["JWT 인증","토큰 구조"]},"1228":{"title":"인증 흐름","titles":["JWT 인증"]},"1229":{"title":"1. 로그인","titles":["JWT 인증","인증 흐름"]},"1230":{"title":"2. API 요청","titles":["JWT 인증","인증 흐름"]},"1231":{"title":"3. 토큰 갱신","titles":["JWT 인증","인증 흐름"]},"1232":{"title":"토큰 관리","titles":["JWT 인증"]},"1233":{"title":"Access Token 설정","titles":["JWT 인증","토큰 관리"]},"1234":{"title":"Access Token 초기화","titles":["JWT 인증","토큰 관리"]},"1235":{"title":"인증 상태 확인","titles":["JWT 인증","토큰 관리"]},"1236":{"title":"보안 고려사항","titles":["JWT 인증"]},"1237":{"title":"관련 문서","titles":["JWT 인증"]},"1238":{"title":"세션 관리","titles":[]},"1239":{"title":"개요","titles":["세션 관리"]},"1240":{"title":"세션 데이터 구조","titles":["세션 관리"]},"1241":{"title":"주요 메서드","titles":["세션 관리"]},"1242":{"title":"setSessionData(data)","titles":["세션 관리","주요 메서드"]},"1243":{"title":"setSessionKey(key, value)","titles":["세션 관리","주요 메서드"]},"1244":{"title":"getSessionValue(key)","titles":["세션 관리","주요 메서드"]},"1245":{"title":"getSessionValues(keys)","titles":["세션 관리","주요 메서드"]},"1246":{"title":"removeSessionKey(key)","titles":["세션 관리","주요 메서드"]},"1247":{"title":"clearSessionData()","titles":["세션 관리","주요 메서드"]},"1248":{"title":"로그인 시 세션 설정","titles":["세션 관리"]},"1249":{"title":"로그아웃 시 세션 초기화","titles":["세션 관리"]},"1250":{"title":"세션 데이터 사용","titles":["세션 관리"]},"1251":{"title":"세션 영속화","titles":["세션 관리"]},"1252":{"title":"주의사항","titles":["세션 관리"]},"1253":{"title":"관련 문서","titles":["세션 관리"]},"1254":{"title":"토큰 갱신","titles":[]},"1255":{"title":"개요","titles":["토큰 갱신"]},"1256":{"title":"자동 갱신 메커니즘","titles":["토큰 갱신"]},"1257":{"title":"갱신 프로세스","titles":["토큰 갱신"]},"1258":{"title":"1. 401/419 에러 감지","titles":["토큰 갱신","갱신 프로세스"]},"1259":{"title":"2. Refresh Token으로 새 토큰 요청","titles":["토큰 갱신","갱신 프로세스"]},"1260":{"title":"3. 원래 요청 재시도","titles":["토큰 갱신","갱신 프로세스"]},"1261":{"title":"동시 요청 처리","titles":["토큰 갱신"]},"1262":{"title":"갱신 실패 처리","titles":["토큰 갱신"]},"1263":{"title":"수동 갱신","titles":["토큰 갱신"]},"1264":{"title":"주의사항","titles":["토큰 갱신"]},"1265":{"title":"관련 문서","titles":["토큰 갱신"]},"1266":{"title":"Axios 인스턴스 설정","titles":[]},"1267":{"title":"개요","titles":["Axios 인스턴스 설정"]},"1268":{"title":"파일 위치","titles":["Axios 인스턴스 설정"]},"1269":{"title":"기본 설정","titles":["Axios 인스턴스 설정"]},"1270":{"title":"주요 설정 항목","titles":["Axios 인스턴스 설정","기본 설정"]},"1271":{"title":"요청 인터셉터","titles":["Axios 인스턴스 설정"]},"1272":{"title":"주요 기능","titles":["Axios 인스턴스 설정","요청 인터셉터"]},"1273":{"title":"코드 예제","titles":["Axios 인스턴스 설정","요청 인터셉터"]},"1274":{"title":"응답 인터셉터","titles":["Axios 인스턴스 설정"]},"1275":{"title":"주요 기능","titles":["Axios 인스턴스 설정","응답 인터셉터"]},"1276":{"title":"토큰 갱신 로직","titles":["Axios 인스턴스 설정","응답 인터셉터"]},"1277":{"title":"사용 방법","titles":["Axios 인스턴스 설정"]},"1278":{"title":"기본 사용","titles":["Axios 인스턴스 설정","사용 방법"]},"1279":{"title":"응답 처리","titles":["Axios 인스턴스 설정","사용 방법"]},"1280":{"title":"파일 업로드","titles":["Axios 인스턴스 설정","사용 방법"]},"1281":{"title":"파일 다운로드","titles":["Axios 인스턴스 설정","사용 방법"]},"1282":{"title":"암호화/복호화","titles":["Axios 인스턴스 설정"]},"1283":{"title":"암호화 설정","titles":["Axios 인스턴스 설정","암호화/복호화"]},"1284":{"title":"FormData 암호화","titles":["Axios 인스턴스 설정","암호화/복호화"]},"1285":{"title":"에러 처리","titles":["Axios 인스턴스 설정"]},"1286":{"title":"타임아웃 에러","titles":["Axios 인스턴스 설정","에러 처리"]},"1287":{"title":"429 에러 (Too Many Requests)","titles":["Axios 인스턴스 설정","에러 처리"]},"1288":{"title":"기타 에러","titles":["Axios 인스턴스 설정","에러 처리"]},"1289":{"title":"주의사항","titles":["Axios 인스턴스 설정"]},"1290":{"title":"관련 문서","titles":["Axios 인스턴스 설정"]},"1291":{"title":"요청 인터셉터","titles":[]},"1292":{"title":"개요","titles":["요청 인터셉터"]},"1293":{"title":"주요 기능","titles":["요청 인터셉터"]},"1294":{"title":"1. 로딩 표시","titles":["요청 인터셉터","주요 기능"]},"1295":{"title":"2. JWT 토큰 추가","titles":["요청 인터셉터","주요 기능"]},"1296":{"title":"3. 암호화 헤더 추가","titles":["요청 인터셉터","주요 기능"]},"1297":{"title":"4. 요청 로그 저장","titles":["요청 인터셉터","주요 기능"]},"1298":{"title":"5. 데이터 암호화","titles":["요청 인터셉터","주요 기능"]},"1299":{"title":"FormData 처리","titles":["요청 인터셉터"]},"1300":{"title":"타임스탬프 추가","titles":["요청 인터셉터"]},"1301":{"title":"원본 데이터 저장","titles":["요청 인터셉터"]},"1302":{"title":"에러 처리","titles":["요청 인터셉터"]},"1303":{"title":"사용 예제","titles":["요청 인터셉터"]},"1304":{"title":"관련 문서","titles":["요청 인터셉터"]},"1305":{"title":"에러 처리","titles":[]},"1306":{"title":"개요","titles":["에러 처리"]},"1307":{"title":"에러 타입별 처리","titles":["에러 처리"]},"1308":{"title":"1. 401/419 에러 (인증 실패)","titles":["에러 처리","에러 타입별 처리"]},"1309":{"title":"2. 429 에러 (Too Many Requests)","titles":["에러 처리","에러 타입별 처리"]},"1310":{"title":"3. 타임아웃 에러","titles":["에러 처리","에러 타입별 처리"]},"1311":{"title":"4. 404 에러 (Silent 처리)","titles":["에러 처리","에러 타입별 처리"]},"1312":{"title":"5. 기타 에러","titles":["에러 처리","에러 타입별 처리"]},"1313":{"title":"에러 로그 기록","titles":["에러 처리"]},"1314":{"title":"커스텀 에러 처리","titles":["에러 처리"]},"1315":{"title":"에러 메시지 표시","titles":["에러 처리"]},"1316":{"title":"Alert 사용","titles":["에러 처리","에러 메시지 표시"]},"1317":{"title":"커스텀 알림 사용","titles":["에러 처리","에러 메시지 표시"]},"1318":{"title":"재시도 로직","titles":["에러 처리"]},"1319":{"title":"에러 타입 확인","titles":["에러 처리"]},"1320":{"title":"베스트 프랙티스","titles":["에러 처리"]},"1321":{"title":"관련 문서","titles":["에러 처리"]},"1322":{"title":"응답 인터셉터","titles":[]},"1323":{"title":"개요","titles":["응답 인터셉터"]},"1324":{"title":"성공 응답 처리","titles":["응답 인터셉터"]},"1325":{"title":"1. 로딩 숨김","titles":["응답 인터셉터","성공 응답 처리"]},"1326":{"title":"2. 파일 다운로드 처리","titles":["응답 인터셉터","성공 응답 처리"]},"1327":{"title":"3. 응답 데이터 반환","titles":["응답 인터셉터","성공 응답 처리"]},"1328":{"title":"에러 응답 처리","titles":["응답 인터셉터"]},"1329":{"title":"1. 로딩 숨김","titles":["응답 인터셉터","에러 응답 처리"]},"1330":{"title":"2. 로그 에러 표시","titles":["응답 인터셉터","에러 응답 처리"]},"1331":{"title":"3. 429 에러 처리 (Too Many Requests)","titles":["응답 인터셉터","에러 응답 처리"]},"1332":{"title":"4. 401/419 에러 처리 (토큰 갱신)","titles":["응답 인터셉터","에러 응답 처리"]},"1333":{"title":"5. 타임아웃 에러 처리","titles":["응답 인터셉터","에러 응답 처리"]},"1334":{"title":"6. 기타 에러 처리","titles":["응답 인터셉터","에러 응답 처리"]},"1335":{"title":"토큰 갱신 로직","titles":["응답 인터셉터"]},"1336":{"title":"동시 요청 처리","titles":["응답 인터셉터","토큰 갱신 로직"]},"1337":{"title":"토큰 갱신 요청","titles":["응답 인터셉터","토큰 갱신 로직"]},"1338":{"title":"Silent 에러 처리","titles":["응답 인터셉터"]},"1339":{"title":"응답 데이터 구조","titles":["응답 인터셉터"]},"1340":{"title":"사용 예제","titles":["응답 인터셉터"]},"1341":{"title":"성공 응답 처리","titles":["응답 인터셉터","사용 예제"]},"1342":{"title":"파일 다운로드","titles":["응답 인터셉터","사용 예제"]},"1343":{"title":"관련 문서","titles":["응답 인터셉터"]},"1344":{"title":"동적 라우팅","titles":[]},"1345":{"title":"개요","titles":["동적 라우팅"]},"1346":{"title":"동적 라우트 등록","titles":["동적 라우팅"]},"1347":{"title":"메뉴 데이터 구조","titles":["동적 라우팅","동적 라우트 등록"]},"1348":{"title":"라우트 변환","titles":["동적 라우팅","동적 라우트 등록"]},"1349":{"title":"동적 컴포넌트 로드","titles":["동적 라우팅","동적 라우트 등록"]},"1350":{"title":"메뉴 스토어 연동","titles":["동적 라우팅"]},"1351":{"title":"사용 예제","titles":["동적 라우팅"]},"1352":{"title":"동적 라우트 접근","titles":["동적 라우팅","사용 예제"]},"1353":{"title":"주의사항","titles":["동적 라우팅"]},"1354":{"title":"관련 문서","titles":["동적 라우팅"]},"1355":{"title":"라우트 가드","titles":[]},"1356":{"title":"개요","titles":["라우트 가드"]},"1357":{"title":"beforeEach 가드","titles":["라우트 가드"]},"1358":{"title":"현재 구현","titles":["라우트 가드","beforeEach 가드"]},"1359":{"title":"기능","titles":["라우트 가드","beforeEach 가드"]},"1360":{"title":"인증 가드 예제","titles":["라우트 가드"]},"1361":{"title":"afterEach 가드","titles":["라우트 가드"]},"1362":{"title":"메타 필드","titles":["라우트 가드"]},"1363":{"title":"관련 문서","titles":["라우트 가드"]},"1364":{"title":"라우트 설정","titles":[]},"1365":{"title":"개요","titles":["라우트 설정"]},"1366":{"title":"기본 라우트 구조","titles":["라우트 설정"]},"1367":{"title":"라우트 추가","titles":["라우트 설정"]},"1368":{"title":"정적 라우트","titles":["라우트 설정","라우트 추가"]},"1369":{"title":"동적 라우트","titles":["라우트 설정","라우트 추가"]},"1370":{"title":"라우트 매핑 규칙","titles":["라우트 설정"]},"1371":{"title":"레이아웃","titles":["라우트 설정"]},"1372":{"title":"Blank 레이아웃","titles":["라우트 설정","레이아웃"]},"1373":{"title":"Main 레이아웃","titles":["라우트 설정","레이아웃"]},"1374":{"title":"Popup 레이아웃","titles":["라우트 설정","레이아웃"]},"1375":{"title":"관련 문서","titles":["라우트 설정"]},"1376":{"title":"인증 스토어 (authStore)","titles":[]},"1377":{"title":"개요","titles":["인증 스토어 (authStore)"]},"1378":{"title":"파일 위치","titles":["인증 스토어 (authStore)"]},"1379":{"title":"상태 (State)","titles":["인증 스토어 (authStore)"]},"1380":{"title":"accessToken","titles":["인증 스토어 (authStore)","상태 (State)"]},"1381":{"title":"액션 (Actions)","titles":["인증 스토어 (authStore)"]},"1382":{"title":"setAccessToken(token)","titles":["인증 스토어 (authStore)","액션 (Actions)"]},"1383":{"title":"clearAccessToken()","titles":["인증 스토어 (authStore)","액션 (Actions)"]},"1384":{"title":"게터 (Getters)","titles":["인증 스토어 (authStore)"]},"1385":{"title":"isAuthenticated","titles":["인증 스토어 (authStore)","게터 (Getters)"]},"1386":{"title":"사용 예제","titles":["인증 스토어 (authStore)"]},"1387":{"title":"로그인 처리","titles":["인증 스토어 (authStore)","사용 예제"]},"1388":{"title":"로그아웃 처리","titles":["인증 스토어 (authStore)","사용 예제"]},"1389":{"title":"인증 상태 확인","titles":["인증 스토어 (authStore)","사용 예제"]},"1390":{"title":"주의사항","titles":["인증 스토어 (authStore)"]},"1391":{"title":"관련 문서","titles":["인증 스토어 (authStore)"]},"1392":{"title":"로딩 스토어 (loadingStore)","titles":[]},"1393":{"title":"개요","titles":["로딩 스토어 (loadingStore)"]},"1394":{"title":"파일 위치","titles":["로딩 스토어 (loadingStore)"]},"1395":{"title":"상태 (State)","titles":["로딩 스토어 (loadingStore)"]},"1396":{"title":"액션 (Actions)","titles":["로딩 스토어 (loadingStore)"]},"1397":{"title":"showLoading()","titles":["로딩 스토어 (loadingStore)","액션 (Actions)"]},"1398":{"title":"hideLoading()","titles":["로딩 스토어 (loadingStore)","액션 (Actions)"]},"1399":{"title":"사용 예제","titles":["로딩 스토어 (loadingStore)"]},"1400":{"title":"주의사항","titles":["로딩 스토어 (loadingStore)"]},"1401":{"title":"로그 스토어 (logStore)","titles":[]},"1402":{"title":"개요","titles":["로그 스토어 (logStore)"]},"1403":{"title":"파일 위치","titles":["로그 스토어 (logStore)"]},"1404":{"title":"상태 (State)","titles":["로그 스토어 (logStore)"]},"1405":{"title":"주요 액션","titles":["로그 스토어 (logStore)"]},"1406":{"title":"toggleLogYN()","titles":["로그 스토어 (logStore)","주요 액션"]},"1407":{"title":"addLogData(config, menuData)","titles":["로그 스토어 (logStore)","주요 액션"]},"1408":{"title":"clearLogData()","titles":["로그 스토어 (logStore)","주요 액션"]},"1409":{"title":"로그 구조","titles":["로그 스토어 (logStore)"]},"1410":{"title":"사용 예제","titles":["로그 스토어 (logStore)"]},"1411":{"title":"주의사항","titles":["로그 스토어 (logStore)"]},"1412":{"title":"메뉴 스토어 (menuStore)","titles":[]},"1413":{"title":"개요","titles":["메뉴 스토어 (menuStore)"]},"1414":{"title":"파일 위치","titles":["메뉴 스토어 (menuStore)"]},"1415":{"title":"상태 (State)","titles":["메뉴 스토어 (menuStore)"]},"1416":{"title":"주요 액션","titles":["메뉴 스토어 (menuStore)"]},"1417":{"title":"setMenuData(data)","titles":["메뉴 스토어 (menuStore)","주요 액션"]},"1418":{"title":"setBmk(menu)","titles":["메뉴 스토어 (menuStore)","주요 액션"]},"1419":{"title":"getBmk()","titles":["메뉴 스토어 (menuStore)","주요 액션"]},"1420":{"title":"사용 예제","titles":["메뉴 스토어 (menuStore)"]},"1421":{"title":"모달 스토어 (modalStore)","titles":[]},"1422":{"title":"개요","titles":["모달 스토어 (modalStore)"]},"1423":{"title":"파일 위치","titles":["모달 스토어 (modalStore)"]},"1424":{"title":"상태 (State)","titles":["모달 스토어 (modalStore)"]},"1425":{"title":"액션 (Actions)","titles":["모달 스토어 (modalStore)"]},"1426":{"title":"openModal(modalId, config)","titles":["모달 스토어 (modalStore)","액션 (Actions)"]},"1427":{"title":"closeModal()","titles":["모달 스토어 (modalStore)","액션 (Actions)"]},"1428":{"title":"사용 예제","titles":["모달 스토어 (modalStore)"]},"1429":{"title":"기타 스토어","titles":[]},"1430":{"title":"버튼 스토어 (buttonStore)","titles":["기타 스토어"]},"1431":{"title":"개요","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1432":{"title":"파일 위치","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1433":{"title":"주요 기능","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1434":{"title":"사용 예제","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1435":{"title":"지원하는 버튼","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1436":{"title":"컨텍스트 메뉴 스토어 (contextMenuStore)","titles":["기타 스토어"]},"1437":{"title":"개요","titles":["기타 스토어","컨텍스트 메뉴 스토어 (contextMenuStore)"]},"1438":{"title":"파일 위치","titles":["기타 스토어","컨텍스트 메뉴 스토어 (contextMenuStore)"]},"1439":{"title":"주요 기능","titles":["기타 스토어","컨텍스트 메뉴 스토어 (contextMenuStore)"]},"1440":{"title":"사용 예제","titles":["기타 스토어","컨텍스트 메뉴 스토어 (contextMenuStore)"]},"1441":{"title":"동적 스토어 (dynamicStore)","titles":["기타 스토어"]},"1442":{"title":"개요","titles":["기타 스토어","동적 스토어 (dynamicStore)"]},"1443":{"title":"파일 위치","titles":["기타 스토어","동적 스토어 (dynamicStore)"]},"1444":{"title":"주요 기능","titles":["기타 스토어","동적 스토어 (dynamicStore)"]},"1445":{"title":"사용 예제","titles":["기타 스토어","동적 스토어 (dynamicStore)"]},"1446":{"title":"세션 스토어 (sessionStore)","titles":[]},"1447":{"title":"개요","titles":["세션 스토어 (sessionStore)"]},"1448":{"title":"파일 위치","titles":["세션 스토어 (sessionStore)"]},"1449":{"title":"상태 (State)","titles":["세션 스토어 (sessionStore)"]},"1450":{"title":"주요 액션","titles":["세션 스토어 (sessionStore)"]},"1451":{"title":"setSessionData(data)","titles":["세션 스토어 (sessionStore)","주요 액션"]},"1452":{"title":"setSessionKey(key, value)","titles":["세션 스토어 (sessionStore)","주요 액션"]},"1453":{"title":"getSessionValue(key)","titles":["세션 스토어 (sessionStore)","주요 액션"]},"1454":{"title":"사용 예제","titles":["세션 스토어 (sessionStore)"]},"1455":{"title":"사이드바 스토어 (sidebarStore)","titles":[]},"1456":{"title":"개요","titles":["사이드바 스토어 (sidebarStore)"]},"1457":{"title":"파일 위치","titles":["사이드바 스토어 (sidebarStore)"]},"1458":{"title":"상태 (State)","titles":["사이드바 스토어 (sidebarStore)"]},"1459":{"title":"주요 액션","titles":["사이드바 스토어 (sidebarStore)"]},"1460":{"title":"toggleVisible(value)","titles":["사이드바 스토어 (sidebarStore)","주요 액션"]},"1461":{"title":"toggleUnfoldable()","titles":["사이드바 스토어 (sidebarStore)","주요 액션"]},"1462":{"title":"사용 예제","titles":["사이드바 스토어 (sidebarStore)"]},"1463":{"title":"Composition API에서 사용","titles":["사이드바 스토어 (sidebarStore)","사용 예제"]},"1464":{"title":"컴포넌트에서 직접 사용","titles":["사이드바 스토어 (sidebarStore)","사용 예제"]},"1465":{"title":"상태 관리","titles":["사이드바 스토어 (sidebarStore)"]},"1466":{"title":"visible 상태","titles":["사이드바 스토어 (sidebarStore)","상태 관리"]},"1467":{"title":"unfoldable 상태","titles":["사이드바 스토어 (sidebarStore)","상태 관리"]},"1468":{"title":"다른 스토어와의 연동","titles":["사이드바 스토어 (sidebarStore)"]},"1469":{"title":"관련 문서","titles":["사이드바 스토어 (sidebarStore)"]},"1470":{"title":"탭 스토어 (tabStore)","titles":[]},"1471":{"title":"개요","titles":["탭 스토어 (tabStore)"]},"1472":{"title":"파일 위치","titles":["탭 스토어 (tabStore)"]},"1473":{"title":"상태 (State)","titles":["탭 스토어 (tabStore)"]},"1474":{"title":"주요 액션","titles":["탭 스토어 (tabStore)"]},"1475":{"title":"openTab(menu)","titles":["탭 스토어 (tabStore)","주요 액션"]},"1476":{"title":"switchTab(idxDbKey)","titles":["탭 스토어 (tabStore)","주요 액션"]},"1477":{"title":"closeTab(tab)","titles":["탭 스토어 (tabStore)","주요 액션"]},"1478":{"title":"closeAllTab()","titles":["탭 스토어 (tabStore)","주요 액션"]},"1479":{"title":"IndexedDB 연동","titles":["탭 스토어 (tabStore)"]},"1480":{"title":"사용 예제","titles":["탭 스토어 (tabStore)"]},"1481":{"title":"배포 절차","titles":[]},"1482":{"title":"1. 빌드","titles":["배포 절차"]},"1483":{"title":"2. 빌드 결과물 확인","titles":["배포 절차"]},"1484":{"title":"3. 웹 서버 설정","titles":["배포 절차"]},"1485":{"title":"4. 환경 변수 확인","titles":["배포 절차"]},"1486":{"title":"5. 테스트","titles":["배포 절차"]},"1487":{"title":"주의사항","titles":["배포 절차"]},"1488":{"title":"개발 서버 실행","titles":[]},"1489":{"title":"개발 서버 시작","titles":["개발 서버 실행"]},"1490":{"title":"기본 설정","titles":["개발 서버 실행"]},"1491":{"title":"포트 변경","titles":["개발 서버 실행"]},"1492":{"title":"접속","titles":["개발 서버 실행"]},"1493":{"title":"핫 모듈 교체 (HMR)","titles":["개발 서버 실행"]},"1494":{"title":"프록시","titles":["개발 서버 실행"]},"1495":{"title":"빌드 최적화","titles":[]},"1496":{"title":"코드 분할","titles":["빌드 최적화"]},"1497":{"title":"트리 쉐이킹","titles":["빌드 최적화"]},"1498":{"title":"압축","titles":["빌드 최적화"]},"1499":{"title":"에셋 최적화","titles":["빌드 최적화"]},"1500":{"title":"청크 크기 제한","titles":["빌드 최적화"]},"1501":{"title":"성능 모니터링","titles":["빌드 최적화"]},"1502":{"title":"프로덕션 빌드","titles":[]},"1503":{"title":"빌드 명령어","titles":["프로덕션 빌드"]},"1504":{"title":"빌드 결과물","titles":["프로덕션 빌드"]},"1505":{"title":"빌드 최적화","titles":["프로덕션 빌드"]},"1506":{"title":"배포","titles":["프로덕션 빌드"]},"1507":{"title":"환경 변수","titles":["프로덕션 빌드"]},"1508":{"title":"스테이징 빌드","titles":[]},"1509":{"title":"빌드 명령어","titles":["스테이징 빌드"]},"1510":{"title":"환경 변수","titles":["스테이징 빌드"]},"1511":{"title":"빌드 결과물","titles":["스테이징 빌드"]},"1512":{"title":"스테이징 서버 배포","titles":["스테이징 빌드"]},"1513":{"title":"API 호출 방법","titles":[]},"1514":{"title":"개요","titles":["API 호출 방법"]},"1515":{"title":"기본 사용법","titles":["API 호출 방법"]},"1516":{"title":"응답 처리","titles":["API 호출 방법"]},"1517":{"title":"프로시저 호출","titles":["API 호출 방법"]},"1518":{"title":"파일 업로드","titles":["API 호출 방법"]},"1519":{"title":"파일 다운로드","titles":["API 호출 방법"]},"1520":{"title":"API 에러 처리","titles":[]},"1521":{"title":"개요","titles":["API 에러 처리"]},"1522":{"title":"기본 에러 처리","titles":["API 에러 처리"]},"1523":{"title":"Try-Catch 사용","titles":["API 에러 처리"]},"1524":{"title":"에러 타입별 처리","titles":["API 에러 처리"]},"1525":{"title":"401/419 에러 (인증 실패)","titles":["API 에러 처리","에러 타입별 처리"]},"1526":{"title":"400 에러 (잘못된 요청)","titles":["API 에러 처리","에러 타입별 처리"]},"1527":{"title":"404 에러 (리소스 없음)","titles":["API 에러 처리","에러 타입별 처리"]},"1528":{"title":"500 에러 (서버 오류)","titles":["API 에러 처리","에러 타입별 처리"]},"1529":{"title":"타임아웃 에러","titles":["API 에러 처리","에러 타입별 처리"]},"1530":{"title":"네트워크 오류","titles":["API 에러 처리","에러 타입별 처리"]},"1531":{"title":"커스텀 에러 처리","titles":["API 에러 처리"]},"1532":{"title":"에러 타입 확인","titles":["API 에러 처리","커스텀 에러 처리"]},"1533":{"title":"에러 메시지 추출","titles":["API 에러 처리","커스텀 에러 처리"]},"1534":{"title":"재시도 로직","titles":["API 에러 처리"]},"1535":{"title":"에러 로깅","titles":["API 에러 처리"]},"1536":{"title":"사용자 친화적 에러 메시지","titles":["API 에러 처리"]},"1537":{"title":"Vuetify Snackbar 사용","titles":["API 에러 처리"]},"1538":{"title":"에러 처리 유틸리티 함수","titles":["API 에러 처리"]},"1539":{"title":"베스트 프랙티스","titles":["API 에러 처리"]},"1540":{"title":"관련 문서","titles":["API 에러 처리"]},"1541":{"title":"파일 업로드/다운로드","titles":[]},"1542":{"title":"파일 업로드","titles":["파일 업로드/다운로드"]},"1543":{"title":"FormData 사용","titles":["파일 업로드/다운로드","파일 업로드"]},"1544":{"title":"암호화된 파일 업로드","titles":["파일 업로드/다운로드","파일 업로드"]},"1545":{"title":"파일 다운로드","titles":["파일 업로드/다운로드"]},"1546":{"title":"Blob 응답","titles":["파일 업로드/다운로드","파일 다운로드"]},"1547":{"title":"FileSaver 사용","titles":["파일 업로드/다운로드","파일 다운로드"]},"1548":{"title":"Excel 다운로드","titles":["파일 업로드/다운로드"]},"1549":{"title":"요청/응답 처리","titles":[]},"1550":{"title":"요청 처리","titles":["요청/응답 처리"]},"1551":{"title":"기본 요청","titles":["요청/응답 처리","요청 처리"]},"1552":{"title":"프로시저 호출","titles":["요청/응답 처리","요청 처리"]},"1553":{"title":"응답 처리","titles":["요청/응답 처리"]},"1554":{"title":"성공 응답","titles":["요청/응답 처리","응답 처리"]},"1555":{"title":"응답 구조","titles":["요청/응답 처리","응답 처리"]},"1556":{"title":"에러 처리","titles":["요청/응답 처리"]},"1557":{"title":"파일 구조 규칙","titles":[]},"1558":{"title":"컴포넌트 파일 구조","titles":["파일 구조 규칙"]},"1559":{"title":"디렉토리 구조","titles":["파일 구조 규칙"]},"1560":{"title":"페이지 컴포넌트","titles":["파일 구조 규칙","디렉토리 구조"]},"1561":{"title":"공통 컴포넌트","titles":["파일 구조 규칙","디렉토리 구조"]},"1562":{"title":"스토어","titles":["파일 구조 규칙","디렉토리 구조"]},"1563":{"title":"파일 조직","titles":["파일 구조 규칙"]},"1564":{"title":"JavaScript/TypeScript 규칙","titles":[]},"1565":{"title":"코딩 스타일","titles":["JavaScript/TypeScript 규칙"]},"1566":{"title":"함수 작성","titles":["JavaScript/TypeScript 규칙"]},"1567":{"title":"비동기 처리","titles":["JavaScript/TypeScript 규칙"]},"1568":{"title":"에러 처리","titles":["JavaScript/TypeScript 규칙"]},"1569":{"title":"네이밍 규칙","titles":[]},"1570":{"title":"파일명","titles":["네이밍 규칙"]},"1571":{"title":"변수명","titles":["네이밍 규칙"]},"1572":{"title":"함수명","titles":["네이밍 규칙"]},"1573":{"title":"컴포넌트명","titles":["네이밍 규칙"]},"1574":{"title":"CSS 클래스명","titles":["네이밍 규칙"]},"1575":{"title":"컴포넌트 등록","titles":[]},"1576":{"title":"자동 등록","titles":["컴포넌트 등록"]},"1577":{"title":"등록 디렉토리","titles":["컴포넌트 등록"]},"1578":{"title":"수동 등록","titles":["컴포넌트 등록"]},"1579":{"title":"타입 정의","titles":["컴포넌트 등록"]},"1580":{"title":"Vue 컴포넌트 작성 규칙","titles":[]},"1581":{"title":"컴포넌트 구조","titles":["Vue 컴포넌트 작성 규칙"]},"1582":{"title":"네이밍","titles":["Vue 컴포넌트 작성 규칙"]},"1583":{"title":"Props 정의","titles":["Vue 컴포넌트 작성 규칙"]},"1584":{"title":"Emits 정의","titles":["Vue 컴포넌트 작성 규칙"]},"1585":{"title":"반응형 변수","titles":["Vue 컴포넌트 작성 규칙"]},"1586":{"title":"컴포넌트 생성","titles":[]},"1587":{"title":"디렉토리 구조","titles":["컴포넌트 생성"]},"1588":{"title":"컴포넌트 템플릿","titles":["컴포넌트 생성"]},"1589":{"title":"자동 임포트","titles":["컴포넌트 생성"]},"1590":{"title":"컴포넌트 사용법","titles":[]},"1591":{"title":"자동 등록된 컴포넌트","titles":["컴포넌트 사용법"]},"1592":{"title":"Props 전달","titles":["컴포넌트 사용법"]},"1593":{"title":"이벤트 처리","titles":["컴포넌트 사용법"]},"1594":{"title":"슬롯 사용","titles":["컴포넌트 사용법"]},"1595":{"title":"페이지 생성 절차","titles":[]},"1596":{"title":"개요","titles":["페이지 생성 절차"]},"1597":{"title":"1. 페이지 컴포넌트 생성","titles":["페이지 생성 절차"]},"1598":{"title":"1.1 디렉토리 구조 확인","titles":["페이지 생성 절차","1. 페이지 컴포넌트 생성"]},"1599":{"title":"1.2 컴포넌트 파일 생성","titles":["페이지 생성 절차","1. 페이지 컴포넌트 생성"]},"1600":{"title":"1.3 기본 템플릿 작성","titles":["페이지 생성 절차","1. 페이지 컴포넌트 생성"]},"1601":{"title":"2. 라우트 등록","titles":["페이지 생성 절차"]},"1602":{"title":"2.1 라우트 파일 확인","titles":["페이지 생성 절차","2. 라우트 등록"]},"1603":{"title":"2.2 라우트 추가","titles":["페이지 생성 절차","2. 라우트 등록"]},"1604":{"title":"2.3 동적 라우팅 (선택사항)","titles":["페이지 생성 절차","2. 라우트 등록"]},"1605":{"title":"3. 메뉴 등록","titles":["페이지 생성 절차"]},"1606":{"title":"3.1 백엔드 메뉴 등록","titles":["페이지 생성 절차","3. 메뉴 등록"]},"1607":{"title":"3.2 메뉴 매핑 규칙","titles":["페이지 생성 절차","3. 메뉴 등록"]},"1608":{"title":"4. 완성된 예제","titles":["페이지 생성 절차"]},"1609":{"title":"4.1 전체 컴포넌트 예제","titles":["페이지 생성 절차","4. 완성된 예제"]},"1610":{"title":"5. 베스트 프랙티스","titles":["페이지 생성 절차"]},"1611":{"title":"5.1 컴포넌트 구조","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1612":{"title":"5.2 네이밍 규칙","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1613":{"title":"5.3 코드 조직","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1614":{"title":"5.4 에러 처리","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1615":{"title":"5.5 로딩 상태 관리","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1616":{"title":"6. 테스트","titles":["페이지 생성 절차"]},"1617":{"title":"6.1 개발 서버에서 확인","titles":["페이지 생성 절차","6. 테스트"]},"1618":{"title":"6.2 기능 테스트","titles":["페이지 생성 절차","6. 테스트"]},"1619":{"title":"다음 단계","titles":["페이지 생성 절차"]},"1620":{"title":"라우트 등록","titles":[]},"1621":{"title":"라우트 파일","titles":["라우트 등록"]},"1622":{"title":"라우트 추가","titles":["라우트 등록"]},"1623":{"title":"동적 라우팅","titles":["라우트 등록"]},"1624":{"title":"메뉴 등록","titles":[]},"1625":{"title":"백엔드 메뉴 등록","titles":["메뉴 등록"]},"1626":{"title":"메뉴 매핑 규칙","titles":["메뉴 등록"]},"1627":{"title":"스토어 생성","titles":[]},"1628":{"title":"스토어 파일 위치","titles":["스토어 생성"]},"1629":{"title":"스토어 템플릿","titles":["스토어 생성"]},"1630":{"title":"사용법","titles":["스토어 생성"]},"1631":{"title":"스토어 사용법","titles":[]},"1632":{"title":"스토어 가져오기","titles":["스토어 사용법"]},"1633":{"title":"상태 읽기","titles":["스토어 사용법"]},"1634":{"title":"액션 호출","titles":["스토어 사용법"]},"1635":{"title":"반응성","titles":["스토어 사용법"]},"1636":{"title":"커스텀 CSS","titles":[]},"1637":{"title":"커스텀 CSS 파일","titles":["커스텀 CSS"]},"1638":{"title":"스타일 오버라이드","titles":["커스텀 CSS"]},"1639":{"title":"전역 스타일","titles":["커스텀 CSS"]},"1640":{"title":"SCSS 사용법","titles":[]},"1641":{"title":"컴포넌트 스타일","titles":["SCSS 사용법"]},"1642":{"title":"전역 스타일","titles":["SCSS 사용법"]},"1643":{"title":"변수 사용","titles":["SCSS 사용법"]},"1644":{"title":"믹스인 사용","titles":["SCSS 사용법"]},"1645":{"title":"Vuetify 사용법","titles":[]},"1646":{"title":"기본 컴포넌트","titles":["Vuetify 사용법"]},"1647":{"title":"테마","titles":["Vuetify 사용법"]},"1648":{"title":"그리드 시스템","titles":["Vuetify 사용법"]},"1649":{"title":"아이콘","titles":["Vuetify 사용법"]},"1650":{"title":"공식 문서","titles":["Vuetify 사용법"]},"1651":{"title":"프로젝트 구조","titles":[]},"1652":{"title":"전체 디렉토리 구조","titles":["프로젝트 구조"]},"1653":{"title":"주요 디렉토리 설명","titles":["프로젝트 구조"]},"1654":{"title":"/src - 소스 코드","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1655":{"title":"/src/App.vue","titles":["프로젝트 구조","주요 디렉토리 설명","/src - 소스 코드"]},"1656":{"title":"/src/main.js","titles":["프로젝트 구조","주요 디렉토리 설명","/src - 소스 코드"]},"1657":{"title":"/src/CustomAxios.js","titles":["프로젝트 구조","주요 디렉토리 설명","/src - 소스 코드"]},"1658":{"title":"/src/utils - 유틸리티","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1659":{"title":"/src/utils/common/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/utils - 유틸리티"]},"1660":{"title":"/src/utils/stores/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/utils - 유틸리티"]},"1661":{"title":"/src/utils/plugins/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/utils - 유틸리티"]},"1662":{"title":"/src/views - 페이지 컴포넌트","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1663":{"title":"/src/views/axpFramework/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1664":{"title":"/src/views/ess/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1665":{"title":"/src/views/fcm/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1666":{"title":"/src/views/geosan/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1667":{"title":"/src/views/ui/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1668":{"title":"/src/script - 비즈니스 로직","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1669":{"title":"/src/vendor - 외부 라이브러리","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1670":{"title":"/public - 정적 리소스","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1671":{"title":"설정 파일","titles":["프로젝트 구조"]},"1672":{"title":"package.json","titles":["프로젝트 구조","설정 파일"]},"1673":{"title":"vite.config.js","titles":["프로젝트 구조","설정 파일"]},"1674":{"title":".env","titles":["프로젝트 구조","설정 파일"]},"1675":{"title":"jsconfig.json","titles":["프로젝트 구조","설정 파일"]},"1676":{"title":"파일 명명 규칙","titles":["프로젝트 구조"]},"1677":{"title":"다음 단계","titles":["프로젝트 구조"]},"1678":{"title":"프로젝트 개요","titles":[]},"1679":{"title":"프로젝트 소개","titles":["프로젝트 개요"]},"1680":{"title":"주요 특징","titles":["프로젝트 개요"]},"1681":{"title":"프로젝트 버전","titles":["프로젝트 개요"]},"1682":{"title":"기술 스택 요약","titles":["프로젝트 개요"]},"1683":{"title":"핵심 프레임워크","titles":["프로젝트 개요","기술 스택 요약"]},"1684":{"title":"UI 프레임워크","titles":["프로젝트 개요","기술 스택 요약"]},"1685":{"title":"주요 라이브러리","titles":["프로젝트 개요","기술 스택 요약"]},"1686":{"title":"프로젝트 목적","titles":["프로젝트 개요"]},"1687":{"title":"주요 모듈","titles":["프로젝트 개요"]},"1688":{"title":"AXP Framework","titles":["프로젝트 개요","주요 모듈"]},"1689":{"title":"ESS 모듈","titles":["프로젝트 개요","주요 모듈"]},"1690":{"title":"FCM 모듈","titles":["프로젝트 개요","주요 모듈"]},"1691":{"title":"geosan 모듈","titles":["프로젝트 개요","주요 모듈"]},"1692":{"title":"다음 단계","titles":["프로젝트 개요"]},"1693":{"title":"빠른 시작 가이드","titles":[]},"1694":{"title":"1. 프로젝트 클론 및 설치","titles":["빠른 시작 가이드"]},"1695":{"title":"2. 환경 변수 설정","titles":["빠른 시작 가이드"]},"1696":{"title":"3. 개발 서버 실행","titles":["빠른 시작 가이드"]},"1697":{"title":"4. 기본 로그인","titles":["빠른 시작 가이드"]},"1698":{"title":"5. 첫 번째 컴포넌트 만들기","titles":["빠른 시작 가이드"]},"1699":{"title":"5.1 페이지 컴포넌트 생성","titles":["빠른 시작 가이드","5. 첫 번째 컴포넌트 만들기"]},"1700":{"title":"5.2 라우트 등록","titles":["빠른 시작 가이드","5. 첫 번째 컴포넌트 만들기"]},"1701":{"title":"5.3 메뉴 등록 (선택사항)","titles":["빠른 시작 가이드","5. 첫 번째 컴포넌트 만들기"]},"1702":{"title":"6. API 호출하기","titles":["빠른 시작 가이드"]},"1703":{"title":"7. 공통 컴포넌트 사용하기","titles":["빠른 시작 가이드"]},"1704":{"title":"SelectBoxSQL 사용 예제","titles":["빠른 시작 가이드","7. 공통 컴포넌트 사용하기"]},"1705":{"title":"AG Grid 사용 예제","titles":["빠른 시작 가이드","7. 공통 컴포넌트 사용하기"]},"1706":{"title":"8. Pinia 스토어 사용하기","titles":["빠른 시작 가이드"]},"1707":{"title":"9. 유틸리티 함수 사용하기","titles":["빠른 시작 가이드"]},"1708":{"title":"10. 스타일링","titles":["빠른 시작 가이드"]},"1709":{"title":"Vuetify 컴포넌트 사용","titles":["빠른 시작 가이드","10. 스타일링"]},"1710":{"title":"커스텀 스타일","titles":["빠른 시작 가이드","10. 스타일링"]},"1711":{"title":"다음 단계","titles":["빠른 시작 가이드"]},"1712":{"title":"시스템 요구사항","titles":[]},"1713":{"title":"필수 소프트웨어","titles":["시스템 요구사항"]},"1714":{"title":"Node.js","titles":["시스템 요구사항","필수 소프트웨어"]},"1715":{"title":"npm 또는 yarn","titles":["시스템 요구사항","필수 소프트웨어"]},"1716":{"title":"Git","titles":["시스템 요구사항","필수 소프트웨어"]},"1717":{"title":"개발 도구","titles":["시스템 요구사항"]},"1718":{"title":"코드 에디터","titles":["시스템 요구사항","개발 도구"]},"1719":{"title":"브라우저","titles":["시스템 요구사항","개발 도구"]},"1720":{"title":"운영 체제","titles":["시스템 요구사항"]},"1721":{"title":"하드웨어 요구사항","titles":["시스템 요구사항"]},"1722":{"title":"최소 사양","titles":["시스템 요구사항","하드웨어 요구사항"]},"1723":{"title":"권장 사양","titles":["시스템 요구사항","하드웨어 요구사항"]},"1724":{"title":"네트워크 요구사항","titles":["시스템 요구사항"]},"1725":{"title":"개발 환경","titles":["시스템 요구사항","네트워크 요구사항"]},"1726":{"title":"환경 변수","titles":["시스템 요구사항","네트워크 요구사항"]},"1727":{"title":"의존성 확인","titles":["시스템 요구사항"]},"1728":{"title":"버전 관리","titles":["시스템 요구사항"]},"1729":{"title":"다음 단계","titles":["시스템 요구사항"]},"1730":{"title":"개발 환경 설정","titles":[]},"1731":{"title":"프로젝트 클론","titles":["개발 환경 설정"]},"1732":{"title":"Node.js 버전 확인","titles":["개발 환경 설정"]},"1733":{"title":"의존성 설치","titles":["개발 환경 설정"]},"1734":{"title":"환경 변수 설정","titles":["개발 환경 설정"]},"1735":{"title":"환경별 설정 파일","titles":["개발 환경 설정","환경 변수 설정"]},"1736":{"title":"개발 서버 실행","titles":["개발 환경 설정"]},"1737":{"title":"빌드","titles":["개발 환경 설정"]},"1738":{"title":"개발 빌드","titles":["개발 환경 설정","빌드"]},"1739":{"title":"스테이징 빌드","titles":["개발 환경 설정","빌드"]},"1740":{"title":"프로덕션 빌드","titles":["개발 환경 설정","빌드"]},"1741":{"title":"빌드 미리보기","titles":["개발 환경 설정"]},"1742":{"title":"추가 설정","titles":["개발 환경 설정"]},"1743":{"title":"아이콘 빌드","titles":["개발 환경 설정","추가 설정"]},"1744":{"title":"ESLint 설정","titles":["개발 환경 설정","추가 설정"]},"1745":{"title":"Prettier 설정","titles":["개발 환경 설정","추가 설정"]},"1746":{"title":"문제 해결","titles":["개발 환경 설정"]},"1747":{"title":"포트 충돌","titles":["개발 환경 설정","문제 해결"]},"1748":{"title":"의존성 설치 오류","titles":["개발 환경 설정","문제 해결"]},"1749":{"title":"환경 변수 인식 안 됨","titles":["개발 환경 설정","문제 해결"]},"1750":{"title":"다음 단계","titles":["개발 환경 설정"]},"1751":{"title":"AXP Dev Docs","titles":[]},"1752":{"title":"이 문서는 무엇인가요?","titles":["AXP Dev Docs"]},"1753":{"title":"처음 온 개발자를 위한 3단계","titles":["AXP Dev Docs"]},"1754":{"title":"1. 프로젝트 전체 그림 이해하기","titles":["AXP Dev Docs","처음 온 개발자를 위한 3단계"]},"1755":{"title":"2. 로컬 개발 환경 구축하기","titles":["AXP Dev Docs","처음 온 개발자를 위한 3단계"]},"1756":{"title":"3. AXP 방식 개발 패턴 익히기","titles":["AXP Dev Docs","처음 온 개발자를 위한 3단계"]},"1757":{"title":"핵심 아키텍처 빠른 링크","titles":["AXP Dev Docs"]},"1758":{"title":"상태 관리 (Pinia Stores)","titles":["AXP Dev Docs","핵심 아키텍처 빠른 링크"]},"1759":{"title":"HTTP 통신 규약","titles":["AXP Dev Docs","핵심 아키텍처 빠른 링크"]},"1760":{"title":"인증 및 보안","titles":["AXP Dev Docs","핵심 아키텍처 빠른 링크"]},"1761":{"title":"UI 컴포넌트 사용 가이드","titles":["AXP Dev Docs"]},"1762":{"title":"공통 컴포넌트","titles":["AXP Dev Docs","UI 컴포넌트 사용 가이드"]},"1763":{"title":"그리드 컴포넌트","titles":["AXP Dev Docs","UI 컴포넌트 사용 가이드"]},"1764":{"title":"팝업 컴포넌트","titles":["AXP Dev Docs","UI 컴포넌트 사용 가이드"]},"1765":{"title":"레이아웃 컴포넌트","titles":["AXP Dev Docs","UI 컴포넌트 사용 가이드"]},"1766":{"title":"유틸리티 함수","titles":["AXP Dev Docs"]},"1767":{"title":"새 화면을 만들 때 추천 흐름","titles":["AXP Dev Docs"]},"1768":{"title":"1. 페이지 생성","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1769":{"title":"2. 데이터 통신 설계","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1770":{"title":"3. UI 구성","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1771":{"title":"4. 상태 관리","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1772":{"title":"5. 스타일링","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1773":{"title":"기술 스택","titles":["AXP Dev Docs"]},"1774":{"title":"프로젝트 구조","titles":["AXP Dev Docs"]},"1775":{"title":"모듈별 가이드","titles":["AXP Dev Docs"]},"1776":{"title":"환경 설정","titles":["AXP Dev Docs"]},"1777":{"title":"코딩 컨벤션","titles":["AXP Dev Docs"]},"1778":{"title":"테스트","titles":["AXP Dev Docs"]},"1779":{"title":"빌드 및 배포","titles":["AXP Dev Docs"]},"1780":{"title":"트러블슈팅","titles":["AXP Dev Docs"]},"1781":{"title":"참고 자료","titles":["AXP Dev Docs"]},"1782":{"title":"빠른 참조","titles":["AXP Dev Docs"]},"1783":{"title":"자주 사용하는 함수","titles":["AXP Dev Docs","빠른 참조"]},"1784":{"title":"자주 사용하는 스토어","titles":["AXP Dev Docs","빠른 참조"]},"1785":{"title":"API 호출 기본 패턴","titles":["AXP Dev Docs","빠른 참조"]},"1786":{"title":"다음 단계","titles":["AXP Dev Docs"]},"1787":{"title":"Markdown Extension Examples","titles":[]},"1788":{"title":"Syntax Highlighting","titles":["Markdown Extension Examples"]},"1789":{"title":"Custom Containers","titles":["Markdown Extension Examples"]},"1790":{"title":"More","titles":["Markdown Extension Examples"]},"1791":{"title":"AXP Framework - 인증 모듈","titles":[]},"1792":{"title":"개요","titles":["AXP Framework - 인증 모듈"]},"1793":{"title":"주요 페이지","titles":["AXP Framework - 인증 모듈"]},"1794":{"title":"Login.vue","titles":["AXP Framework - 인증 모듈","주요 페이지"]},"1795":{"title":"AdminLogin.vue","titles":["AXP Framework - 인증 모듈","주요 페이지"]},"1796":{"title":"register.vue","titles":["AXP Framework - 인증 모듈","주요 페이지"]},"1797":{"title":"로그인 프로세스","titles":["AXP Framework - 인증 모듈"]},"1798":{"title":"관련 문서","titles":["AXP Framework - 인증 모듈"]},"1799":{"title":"FCM 모듈 - ERP 기능","titles":[]},"1800":{"title":"개요","titles":["FCM 모듈 - ERP 기능"]},"1801":{"title":"디렉토리 구조","titles":["FCM 모듈 - ERP 기능"]},"1802":{"title":"주요 기능","titles":["FCM 모듈 - ERP 기능"]},"1803":{"title":"ESS 모듈 - 인사 관리","titles":[]},"1804":{"title":"개요","titles":["ESS 모듈 - 인사 관리"]},"1805":{"title":"주요 페이지","titles":["ESS 모듈 - 인사 관리"]},"1806":{"title":"PiMyPersonnelInformation.vue","titles":["ESS 모듈 - 인사 관리","주요 페이지"]},"1807":{"title":"PaAttendanceRequest.vue","titles":["ESS 모듈 - 인사 관리","주요 페이지"]},"1808":{"title":"PcBillReqHipass.vue","titles":["ESS 모듈 - 인사 관리","주요 페이지"]},"1809":{"title":"PoOrganizationChart.vue","titles":["ESS 모듈 - 인사 관리","주요 페이지"]},"1810":{"title":"관련 스크립트","titles":["ESS 모듈 - 인사 관리"]},"1811":{"title":"geosan 모듈 - BI 기능","titles":[]},"1812":{"title":"개요","titles":["geosan 모듈 - BI 기능"]},"1813":{"title":"디렉토리 구조","titles":["geosan 모듈 - BI 기능"]},"1814":{"title":"주요 기능","titles":["geosan 모듈 - BI 기능"]},"1815":{"title":"전체 디렉토리 구조","titles":[]},"1816":{"title":"프로젝트 루트 구조","titles":["전체 디렉토리 구조"]},"1817":{"title":"src 디렉토리 상세 구조","titles":["전체 디렉토리 구조"]},"1818":{"title":"주요 디렉토리 설명","titles":["전체 디렉토리 구조"]},"1819":{"title":"/src/script","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1820":{"title":"/src/utils/common","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1821":{"title":"/src/utils/stores","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1822":{"title":"/src/utils/plugins","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1823":{"title":"/src/views","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1824":{"title":"/src/vendor","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1825":{"title":"파일 명명 규칙","titles":["전체 디렉토리 구조"]},"1826":{"title":"컴포넌트 파일","titles":["전체 디렉토리 구조","파일 명명 규칙"]},"1827":{"title":"유틸리티 파일","titles":["전체 디렉토리 구조","파일 명명 규칙"]},"1828":{"title":"상수 파일","titles":["전체 디렉토리 구조","파일 명명 규칙"]},"1829":{"title":"경로 별칭 (Alias)","titles":["전체 디렉토리 구조"]},"1830":{"title":"사용 예제","titles":["전체 디렉토리 구조","경로 별칭 (Alias)"]},"1831":{"title":"다음 단계","titles":["전체 디렉토리 구조"]},"1832":{"title":"public 디렉토리","titles":[]},"1833":{"title":"개요","titles":["public 디렉토리"]},"1834":{"title":"디렉토리 구조","titles":["public 디렉토리"]},"1835":{"title":"주요 파일","titles":["public 디렉토리"]},"1836":{"title":"favicon.ico","titles":["public 디렉토리","주요 파일"]},"1837":{"title":"logo.png","titles":["public 디렉토리","주요 파일"]},"1838":{"title":"loader.css","titles":["public 디렉토리","주요 파일"]},"1839":{"title":"custom-css/","titles":["public 디렉토리","주요 파일"]},"1840":{"title":"custom.css","titles":["public 디렉토리","주요 파일","custom-css/"]},"1841":{"title":"custom-datepicker.css","titles":["public 디렉토리","주요 파일","custom-css/"]},"1842":{"title":"custom-orgchart.css","titles":["public 디렉토리","주요 파일","custom-css/"]},"1843":{"title":"파일 참조 방법","titles":["public 디렉토리"]},"1844":{"title":"절대 경로 사용","titles":["public 디렉토리","파일 참조 방법"]},"1845":{"title":"동적 경로 사용","titles":["public 디렉토리","파일 참조 방법"]},"1846":{"title":"CSS 파일 임포트","titles":["public 디렉토리","파일 참조 방법"]},"1847":{"title":"빌드 시 처리","titles":["public 디렉토리"]},"1848":{"title":"주의사항","titles":["public 디렉토리"]},"1849":{"title":"관련 문서","titles":["public 디렉토리"]},"1850":{"title":"스크립트 파일","titles":[]},"1851":{"title":"개요","titles":["스크립트 파일"]},"1852":{"title":"파일 위치","titles":["스크립트 파일"]},"1853":{"title":"디렉토리 구조","titles":["스크립트 파일"]},"1854":{"title":"사용 목적","titles":["스크립트 파일"]},"1855":{"title":"사용 예제","titles":["스크립트 파일"]},"1856":{"title":"src 디렉토리","titles":[]},"1857":{"title":"개요","titles":["src 디렉토리"]},"1858":{"title":"디렉토리 구조","titles":["src 디렉토리"]},"1859":{"title":"주요 파일","titles":["src 디렉토리"]},"1860":{"title":"App.vue","titles":["src 디렉토리","주요 파일"]},"1861":{"title":"main.js","titles":["src 디렉토리","주요 파일"]},"1862":{"title":"CustomAxios.js","titles":["src 디렉토리","주요 파일"]},"1863":{"title":"디렉토리별 상세 설명","titles":["src 디렉토리"]},"1864":{"title":"views/","titles":["src 디렉토리","디렉토리별 상세 설명"]},"1865":{"title":"utils/","titles":["src 디렉토리","디렉토리별 상세 설명"]},"1866":{"title":"관련 문서","titles":["src 디렉토리"]},"1867":{"title":"공통 유틸리티","titles":[]},"1868":{"title":"개요","titles":["공통 유틸리티"]},"1869":{"title":"파일 위치","titles":["공통 유틸리티"]},"1870":{"title":"주요 파일","titles":["공통 유틸리티"]},"1871":{"title":"common.js","titles":["공통 유틸리티","주요 파일"]},"1872":{"title":"comfcm.js","titles":["공통 유틸리티","주요 파일"]},"1873":{"title":"자동 임포트","titles":["공통 유틸리티"]},"1874":{"title":"관련 문서","titles":["공통 유틸리티"]},"1875":{"title":"언어 및 국제화","titles":[]},"1876":{"title":"개요","titles":["언어 및 국제화"]},"1877":{"title":"디렉토리 구조","titles":["언어 및 국제화"]},"1878":{"title":"주요 파일","titles":["언어 및 국제화"]},"1879":{"title":"i18n.js","titles":["언어 및 국제화","주요 파일"]},"1880":{"title":"agGrid/ko-KR.js","titles":["언어 및 국제화","주요 파일"]},"1881":{"title":"사용 방법","titles":["언어 및 국제화"]},"1882":{"title":"Composition API에서 사용","titles":["언어 및 국제화","사용 방법"]},"1883":{"title":"Options API에서 사용","titles":["언어 및 국제화","사용 방법"]},"1884":{"title":"숫자 형식 사용","titles":["언어 및 국제화","사용 방법"]},"1885":{"title":"메시지 추가","titles":["언어 및 국제화"]},"1886":{"title":"언어 변경","titles":["언어 및 국제화"]},"1887":{"title":"AG Grid 로케일 적용","titles":["언어 및 국제화"]},"1888":{"title":"관련 문서","titles":["언어 및 국제화"]},"1889":{"title":"플러그인 설정","titles":[]},"1890":{"title":"개요","titles":["플러그인 설정"]},"1891":{"title":"디렉토리 구조","titles":["플러그인 설정"]},"1892":{"title":"주요 플러그인","titles":["플러그인 설정"]},"1893":{"title":"Pinia (pinia.js)","titles":["플러그인 설정","주요 플러그인"]},"1894":{"title":"Vue Router (router/)","titles":["플러그인 설정","주요 플러그인"]},"1895":{"title":"routes.js","titles":["플러그인 설정","주요 플러그인","Vue Router (router/)"]},"1896":{"title":"index.js","titles":["플러그인 설정","주요 플러그인","Vue Router (router/)"]},"1897":{"title":"Vuetify (vuetify/)","titles":["플러그인 설정","주요 플러그인"]},"1898":{"title":"index.js","titles":["플러그인 설정","주요 플러그인","Vuetify (vuetify/)"]},"1899":{"title":"defaults.js","titles":["플러그인 설정","주요 플러그인","Vuetify (vuetify/)"]},"1900":{"title":"icons.js","titles":["플러그인 설정","주요 플러그인","Vuetify (vuetify/)"]},"1901":{"title":"theme.js","titles":["플러그인 설정","주요 플러그인","Vuetify (vuetify/)"]},"1902":{"title":"Iconify (iconify/)","titles":["플러그인 설정","주요 플러그인"]},"1903":{"title":"WebFontLoader (webfontloader.js)","titles":["플러그인 설정","주요 플러그인"]},"1904":{"title":"플러그인 등록","titles":["플러그인 설정"]},"1905":{"title":"커스텀 플러그인 추가","titles":["플러그인 설정"]},"1906":{"title":"관련 문서","titles":["플러그인 설정"]},"1907":{"title":"Pinia 스토어","titles":[]},"1908":{"title":"개요","titles":["Pinia 스토어"]},"1909":{"title":"디렉토리 구조","titles":["Pinia 스토어"]},"1910":{"title":"주요 스토어","titles":["Pinia 스토어"]},"1911":{"title":"authStore.js","titles":["Pinia 스토어","주요 스토어"]},"1912":{"title":"loadingStore.js","titles":["Pinia 스토어","주요 스토어"]},"1913":{"title":"menuStore.js","titles":["Pinia 스토어","주요 스토어"]},"1914":{"title":"sessionStore.js","titles":["Pinia 스토어","주요 스토어"]},"1915":{"title":"modalStore.js","titles":["Pinia 스토어","주요 스토어"]},"1916":{"title":"tabStore.js","titles":["Pinia 스토어","주요 스토어"]},"1917":{"title":"sidebarStore.js","titles":["Pinia 스토어","주요 스토어"]},"1918":{"title":"logStore.js","titles":["Pinia 스토어","주요 스토어"]},"1919":{"title":"스토어 사용 패턴","titles":["Pinia 스토어"]},"1920":{"title":"Composition API에서 사용","titles":["Pinia 스토어","스토어 사용 패턴"]},"1921":{"title":"Options API에서 사용","titles":["Pinia 스토어","스토어 사용 패턴"]},"1922":{"title":"스토어 생성 가이드","titles":["Pinia 스토어"]},"1923":{"title":"관련 문서","titles":["Pinia 스토어"]},"1924":{"title":"벤더 라이브러리","titles":[]},"1925":{"title":"개요","titles":["벤더 라이브러리"]},"1926":{"title":"디렉토리 구조","titles":["벤더 라이브러리"]},"1927":{"title":"주요 디렉토리","titles":["벤더 라이브러리"]},"1928":{"title":"@core","titles":["벤더 라이브러리","주요 디렉토리"]},"1929":{"title":"@layouts","titles":["벤더 라이브러리","주요 디렉토리"]},"1930":{"title":"@dashboard","titles":["벤더 라이브러리","주요 디렉토리"]},"1931":{"title":"assets","titles":["벤더 라이브러리","주요 디렉토리"]},"1932":{"title":"axpFramework 모듈","titles":[]},"1933":{"title":"개요","titles":["axpFramework 모듈"]},"1934":{"title":"디렉토리 구조","titles":["axpFramework 모듈"]},"1935":{"title":"주요 컴포넌트","titles":["axpFramework 모듈"]},"1936":{"title":"Login.vue","titles":["axpFramework 모듈","주요 컴포넌트"]},"1937":{"title":"AdminLogin.vue","titles":["axpFramework 모듈","주요 컴포넌트"]},"1938":{"title":"Main.vue","titles":["axpFramework 모듈","주요 컴포넌트"]},"1939":{"title":"Dashboard.vue","titles":["axpFramework 모듈","주요 컴포넌트"]},"1940":{"title":"ESS 모듈 뷰 컴포넌트","titles":[]},"1941":{"title":"개요","titles":["ESS 모듈 뷰 컴포넌트"]},"1942":{"title":"디렉토리 구조","titles":["ESS 모듈 뷰 컴포넌트"]},"1943":{"title":"주요 컴포넌트","titles":["ESS 모듈 뷰 컴포넌트"]},"1944":{"title":"인사 관리 (persadm)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1945":{"title":"PaAttendanceRequest.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","인사 관리 (persadm)"]},"1946":{"title":"PiMyPersonnelInformation.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","인사 관리 (persadm)"]},"1947":{"title":"PoOrganizationChart.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","인사 관리 (persadm)"]},"1948":{"title":"관리자 기능 (admin)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1949":{"title":"AsSMSManagement.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","관리자 기능 (admin)"]},"1950":{"title":"법인카드 (creditcard)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1951":{"title":"BillApproveList.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","법인카드 (creditcard)"]},"1952":{"title":"교육 (education)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1953":{"title":"EtEduRequest.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","교육 (education)"]},"1954":{"title":"평가 (estimation)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1955":{"title":"EbAdminEstimationStatistics.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","평가 (estimation)"]},"1956":{"title":"공통 패턴","titles":["ESS 모듈 뷰 컴포넌트"]},"1957":{"title":"API 호출 패턴","titles":["ESS 모듈 뷰 컴포넌트","공통 패턴"]},"1958":{"title":"세션 정보 사용","titles":["ESS 모듈 뷰 컴포넌트","공통 패턴"]},"1959":{"title":"관련 문서","titles":["ESS 모듈 뷰 컴포넌트"]},"1960":{"title":"FCM 모듈 뷰 컴포넌트","titles":[]},"1961":{"title":"개요","titles":["FCM 모듈 뷰 컴포넌트"]},"1962":{"title":"디렉토리 구조","titles":["FCM 모듈 뷰 컴포넌트"]},"1963":{"title":"주요 컴포넌트","titles":["FCM 모듈 뷰 컴포넌트"]},"1964":{"title":"ERP 모듈 (erp/sys)","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1965":{"title":"sys1200.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","ERP 모듈 (erp/sys)"]},"1966":{"title":"sys1710.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","ERP 모듈 (erp/sys)"]},"1967":{"title":"sys5300.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","ERP 모듈 (erp/sys)"]},"1968":{"title":"HR 모듈 (hr/hri)","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1969":{"title":"Hri1000.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","HR 모듈 (hr/hri)"]},"1970":{"title":"Hri1000TabContents.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","HR 모듈 (hr/hri)"]},"1971":{"title":"hri5100.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","HR 모듈 (hr/hri)"]},"1972":{"title":"공통 패턴","titles":["FCM 모듈 뷰 컴포넌트"]},"1973":{"title":"검색 폼 구조","titles":["FCM 모듈 뷰 컴포넌트","공통 패턴"]},"1974":{"title":"그리드 사용","titles":["FCM 모듈 뷰 컴포넌트","공통 패턴"]},"1975":{"title":"관련 문서","titles":["FCM 모듈 뷰 컴포넌트"]},"1976":{"title":"geosan 모듈 뷰 컴포넌트","titles":[]},"1977":{"title":"개요","titles":["geosan 모듈 뷰 컴포넌트"]},"1978":{"title":"디렉토리 구조","titles":["geosan 모듈 뷰 컴포넌트"]},"1979":{"title":"주요 컴포넌트","titles":["geosan 모듈 뷰 컴포넌트"]},"1980":{"title":"고객 관리 (BI/Customer)","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1981":{"title":"CustomerList.vue","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","고객 관리 (BI/Customer)"]},"1982":{"title":"CustomerGrpList.vue","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","고객 관리 (BI/Customer)"]},"1983":{"title":"CustomerListPop.vue","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","고객 관리 (BI/Customer)"]},"1984":{"title":"CustomerGrpPop.vue","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","고객 관리 (BI/Customer)"]},"1985":{"title":"데이터 파일","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1986":{"title":"CustomerListData.js","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","데이터 파일"]},"1987":{"title":"CustomerGrpListData.js","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","데이터 파일"]},"1988":{"title":"공통 패턴","titles":["geosan 모듈 뷰 컴포넌트"]},"1989":{"title":"검색 폼 구조","titles":["geosan 모듈 뷰 컴포넌트","공통 패턴"]},"1990":{"title":"그리드 사용","titles":["geosan 모듈 뷰 컴포넌트","공통 패턴"]},"1991":{"title":"관련 문서","titles":["geosan 모듈 뷰 컴포넌트"]},"1992":{"title":"UI 컴포넌트 및 레이아웃","titles":[]},"1993":{"title":"개요","titles":["UI 컴포넌트 및 레이아웃"]},"1994":{"title":"디렉토리 구조","titles":["UI 컴포넌트 및 레이아웃"]},"1995":{"title":"공통 컴포넌트 (components/common)","titles":["UI 컴포넌트 및 레이아웃"]},"1996":{"title":"버튼 컴포넌트","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"1997":{"title":"ButtonBox.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","버튼 컴포넌트"]},"1998":{"title":"입력 컴포넌트","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"1999":{"title":"InputPhone.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","입력 컴포넌트"]},"2000":{"title":"로딩 컴포넌트","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"2001":{"title":"Loading.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","로딩 컴포넌트"]},"2002":{"title":"조회 컴포넌트 (lookup)","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"2003":{"title":"LookUpBox.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","조회 컴포넌트 (lookup)"]},"2004":{"title":"선택 컴포넌트 (select)","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"2005":{"title":"SelectBoxSQL.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","선택 컴포넌트 (select)"]},"2006":{"title":"SelectBoxDate.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","선택 컴포넌트 (select)"]},"2007":{"title":"MultiSelectBoxSQL.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","선택 컴포넌트 (select)"]},"2008":{"title":"트리 컴포넌트 (tree)","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"2009":{"title":"TreeDeptDropdown.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","트리 컴포넌트 (tree)"]},"2010":{"title":"TreeEmpDropdown.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","트리 컴포넌트 (tree)"]},"2011":{"title":"TreeOrgNode.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","트리 컴포넌트 (tree)"]},"2012":{"title":"그리드 컴포넌트 (components/grid)","titles":["UI 컴포넌트 및 레이아웃"]},"2013":{"title":"GridClickField.vue","titles":["UI 컴포넌트 및 레이아웃","그리드 컴포넌트 (components/grid)"]},"2014":{"title":"GridContextMenu.vue","titles":["UI 컴포넌트 및 레이아웃","그리드 컴포넌트 (components/grid)"]},"2015":{"title":"GridMultiSelectWrapper.vue","titles":["UI 컴포넌트 및 레이아웃","그리드 컴포넌트 (components/grid)"]},"2016":{"title":"메뉴 컴포넌트 (components/menu)","titles":["UI 컴포넌트 및 레이아웃"]},"2017":{"title":"MenuSideBar.vue","titles":["UI 컴포넌트 및 레이아웃","메뉴 컴포넌트 (components/menu)"]},"2018":{"title":"MenuHeaderBar.vue","titles":["UI 컴포넌트 및 레이아웃","메뉴 컴포넌트 (components/menu)"]},"2019":{"title":"MenuBmk.vue","titles":["UI 컴포넌트 및 레이아웃","메뉴 컴포넌트 (components/menu)"]},"2020":{"title":"팝업 컴포넌트 (components/popup)","titles":["UI 컴포넌트 및 레이아웃"]},"2021":{"title":"PopupApproval.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2022":{"title":"PopupApproveList.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2023":{"title":"PopupFileLink.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2024":{"title":"PopupLog.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2025":{"title":"PopupPageLog.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2026":{"title":"PopupSmsTemplateList.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2027":{"title":"레이아웃 컴포넌트 (layouts)","titles":["UI 컴포넌트 및 레이아웃"]},"2028":{"title":"blank.vue","titles":["UI 컴포넌트 및 레이아웃","레이아웃 컴포넌트 (layouts)"]},"2029":{"title":"default.vue","titles":["UI 컴포넌트 및 레이아웃","레이아웃 컴포넌트 (layouts)"]},"2030":{"title":"popBlank.vue","titles":["UI 컴포넌트 및 레이아웃","레이아웃 컴포넌트 (layouts)"]},"2031":{"title":"관련 문서","titles":["UI 컴포넌트 및 레이아웃"]},"2032":{"title":"주요 클래스/함수 참조","titles":[]},"2033":{"title":"유틸리티 함수","titles":["주요 클래스/함수 참조"]},"2034":{"title":"스토어","titles":["주요 클래스/함수 참조"]},"2035":{"title":"API 호출","titles":["주요 클래스/함수 참조"]},"2036":{"title":"설정 파일 참조","titles":[]},"2037":{"title":"주요 설정 파일","titles":["설정 파일 참조"]},"2038":{"title":"package.json","titles":["설정 파일 참조","주요 설정 파일"]},"2039":{"title":"vite.config.js","titles":["설정 파일 참조","주요 설정 파일"]},"2040":{"title":".env","titles":["설정 파일 참조","주요 설정 파일"]},"2041":{"title":"jsconfig.json","titles":["설정 파일 참조","주요 설정 파일"]},"2042":{"title":"플러그인 설정","titles":["설정 파일 참조"]},"2043":{"title":"router/routes.js","titles":["설정 파일 참조","플러그인 설정"]},"2044":{"title":"pinia.js","titles":["설정 파일 참조","플러그인 설정"]},"2045":{"title":"vuetify/index.js","titles":["설정 파일 참조","플러그인 설정"]},"2046":{"title":"외부 라이브러리 문서","titles":[]},"2047":{"title":"Vue 3","titles":["외부 라이브러리 문서"]},"2048":{"title":"Vite","titles":["외부 라이브러리 문서"]},"2049":{"title":"Pinia","titles":["외부 라이브러리 문서"]},"2050":{"title":"Vuetify","titles":["외부 라이브러리 문서"]},"2051":{"title":"Vue Router","titles":["외부 라이브러리 문서"]},"2052":{"title":"AG Grid","titles":["외부 라이브러리 문서"]},"2053":{"title":"Axios","titles":["외부 라이브러리 문서"]},"2054":{"title":"자주 묻는 질문 (FAQ)","titles":[]},"2055":{"title":"Q: 자동 임포트가 작동하지 않아요","titles":["자주 묻는 질문 (FAQ)"]},"2056":{"title":"Q: 컴포넌트를 찾을 수 없어요","titles":["자주 묻는 질문 (FAQ)"]},"2057":{"title":"Q: API 호출 시 401 에러가 발생해요","titles":["자주 묻는 질문 (FAQ)"]},"2058":{"title":"Q: 환경 변수가 적용되지 않아요","titles":["자주 묻는 질문 (FAQ)"]},"2059":{"title":"Q: 빌드가 실패해요","titles":["자주 묻는 질문 (FAQ)"]},"2060":{"title":"아이콘 사용법","titles":[]},"2061":{"title":"Iconify","titles":["아이콘 사용법"]},"2062":{"title":"사용 예제","titles":["아이콘 사용법"]},"2063":{"title":"아이콘 빌드","titles":["아이콘 사용법"]},"2064":{"title":"아이콘 라이브러리","titles":["아이콘 사용법"]},"2065":{"title":"HTTP 클라이언트 (Axios)","titles":[]},"2066":{"title":"개요","titles":["HTTP 클라이언트 (Axios)"]},"2067":{"title":"커스텀 인스턴스","titles":["HTTP 클라이언트 (Axios)"]},"2068":{"title":"주요 기능","titles":["HTTP 클라이언트 (Axios)"]},"2069":{"title":"사용법","titles":["HTTP 클라이언트 (Axios)"]},"2070":{"title":"차트 라이브러리","titles":[]},"2071":{"title":"ApexCharts","titles":["차트 라이브러리"]},"2072":{"title":"ECharts","titles":["차트 라이브러리"]},"2073":{"title":"사용 목적","titles":["차트 라이브러리"]},"2074":{"title":"프레임워크 및 라이브러리","titles":[]},"2075":{"title":"Vue 3","titles":["프레임워크 및 라이브러리"]},"2076":{"title":"버전","titles":["프레임워크 및 라이브러리","Vue 3"]},"2077":{"title":"주요 특징","titles":["프레임워크 및 라이브러리","Vue 3"]},"2078":{"title":"사용 예제","titles":["프레임워크 및 라이브러리","Vue 3"]},"2079":{"title":"자동 임포트","titles":["프레임워크 및 라이브러리","Vue 3"]},"2080":{"title":"Vite","titles":["프레임워크 및 라이브러리"]},"2081":{"title":"버전","titles":["프레임워크 및 라이브러리","Vite"]},"2082":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","Vite"]},"2083":{"title":"주요 플러그인","titles":["프레임워크 및 라이브러리","Vite"]},"2084":{"title":"Pinia","titles":["프레임워크 및 라이브러리"]},"2085":{"title":"버전","titles":["프레임워크 및 라이브러리","Pinia"]},"2086":{"title":"특징","titles":["프레임워크 및 라이브러리","Pinia"]},"2087":{"title":"스토어 구조","titles":["프레임워크 및 라이브러리","Pinia"]},"2088":{"title":"Vue Router","titles":["프레임워크 및 라이브러리"]},"2089":{"title":"버전","titles":["프레임워크 및 라이브러리","Vue Router"]},"2090":{"title":"라우팅 구조","titles":["프레임워크 및 라이브러리","Vue Router"]},"2091":{"title":"라우트 가드","titles":["프레임워크 및 라이브러리","Vue Router"]},"2092":{"title":"Axios","titles":["프레임워크 및 라이브러리"]},"2093":{"title":"버전","titles":["프레임워크 및 라이브러리","Axios"]},"2094":{"title":"커스텀 인스턴스","titles":["프레임워크 및 라이브러리","Axios"]},"2095":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","Axios"]},"2096":{"title":"AG Grid","titles":["프레임워크 및 라이브러리"]},"2097":{"title":"버전","titles":["프레임워크 및 라이브러리","AG Grid"]},"2098":{"title":"사용 목적","titles":["프레임워크 및 라이브러리","AG Grid"]},"2099":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","AG Grid"]},"2100":{"title":"차트 라이브러리","titles":["프레임워크 및 라이브러리"]},"2101":{"title":"ApexCharts","titles":["프레임워크 및 라이브러리","차트 라이브러리"]},"2102":{"title":"ECharts","titles":["프레임워크 및 라이브러리","차트 라이브러리"]},"2103":{"title":"사용 목적","titles":["프레임워크 및 라이브러리","차트 라이브러리"]},"2104":{"title":"Excel 처리","titles":["프레임워크 및 라이브러리"]},"2105":{"title":"ExcelJS","titles":["프레임워크 및 라이브러리","Excel 처리"]},"2106":{"title":"사용 목적","titles":["프레임워크 및 라이브러리","Excel 처리"]},"2107":{"title":"암호화","titles":["프레임워크 및 라이브러리"]},"2108":{"title":"CryptoJS","titles":["프레임워크 및 라이브러리","암호화"]},"2109":{"title":"사용 목적","titles":["프레임워크 및 라이브러리","암호화"]},"2110":{"title":"기타 주요 라이브러리","titles":["프레임워크 및 라이브러리"]},"2111":{"title":"파일 처리","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2112":{"title":"PDF 처리","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2113":{"title":"날짜 처리","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2114":{"title":"드래그 앤 드롭","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2115":{"title":"트리 뷰","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2116":{"title":"다음 단계","titles":["프레임워크 및 라이브러리"]},"2117":{"title":"그리드 라이브러리 (AG Grid)","titles":[]},"2118":{"title":"개요","titles":["그리드 라이브러리 (AG Grid)"]},"2119":{"title":"주요 기능","titles":["그리드 라이브러리 (AG Grid)"]},"2120":{"title":"사용 예제","titles":["그리드 라이브러리 (AG Grid)"]},"2121":{"title":"상태 관리 (Pinia)","titles":[]},"2122":{"title":"개요","titles":["상태 관리 (Pinia)"]},"2123":{"title":"주요 스토어","titles":["상태 관리 (Pinia)"]},"2124":{"title":"사용법","titles":["상태 관리 (Pinia)"]},"2125":{"title":"상태 영속화","titles":["상태 관리 (Pinia)"]},"2126":{"title":"라우팅 (Vue Router)","titles":[]},"2127":{"title":"개요","titles":["라우팅 (Vue Router)"]},"2128":{"title":"라우트 정의","titles":["라우팅 (Vue Router)"]},"2129":{"title":"동적 라우팅","titles":["라우팅 (Vue Router)"]},"2130":{"title":"라우트 가드","titles":["라우팅 (Vue Router)"]},"2131":{"title":"기타 유틸리티","titles":[]},"2132":{"title":"Excel 처리","titles":["기타 유틸리티"]},"2133":{"title":"암호화","titles":["기타 유틸리티"]},"2134":{"title":"파일 처리","titles":["기타 유틸리티"]},"2135":{"title":"PDF 처리","titles":["기타 유틸리티"]},"2136":{"title":"날짜 처리","titles":["기타 유틸리티"]},"2137":{"title":"드래그 앤 드롭","titles":["기타 유틸리티"]},"2138":{"title":"트리 뷰","titles":["기타 유틸리티"]},"2139":{"title":"UI 프레임워크 (Vuetify)","titles":[]},"2140":{"title":"개요","titles":["UI 프레임워크 (Vuetify)"]},"2141":{"title":"주요 컴포넌트","titles":["UI 프레임워크 (Vuetify)"]},"2142":{"title":"테마","titles":["UI 프레임워크 (Vuetify)"]},"2143":{"title":"로케일","titles":["UI 프레임워크 (Vuetify)"]},"2144":{"title":"컴포넌트 테스트","titles":[]},"2145":{"title":"개요","titles":["컴포넌트 테스트"]},"2146":{"title":"테스트 예제","titles":["컴포넌트 테스트"]},"2147":{"title":"스토어 통합 테스트","titles":["컴포넌트 테스트"]},"2148":{"title":"E2E 테스트","titles":[]},"2149":{"title":"개요","titles":["E2E 테스트"]},"2150":{"title":"테스트 프레임워크","titles":["E2E 테스트"]},"2151":{"title":"테스트 예제","titles":["E2E 테스트"]},"2152":{"title":"테스트 실행","titles":["E2E 테스트"]},"2153":{"title":"단위 테스트","titles":[]},"2154":{"title":"개요","titles":["단위 테스트"]},"2155":{"title":"테스트 프레임워크","titles":["단위 테스트"]},"2156":{"title":"유틸리티 함수 테스트","titles":["단위 테스트"]},"2157":{"title":"스토어 테스트","titles":["단위 테스트"]},"2158":{"title":"테스트 실행","titles":["단위 테스트"]},"2159":{"title":"API 통신 문제","titles":[]},"2160":{"title":"CORS 오류","titles":["API 통신 문제"]},"2161":{"title":"타임아웃","titles":["API 통신 문제"]},"2162":{"title":"429 에러","titles":["API 통신 문제"]},"2163":{"title":"암호화 오류","titles":["API 통신 문제"]},"2164":{"title":"인증 관련 문제","titles":[]},"2165":{"title":"토큰 만료","titles":["인증 관련 문제"]},"2166":{"title":"Refresh Token 만료","titles":["인증 관련 문제"]},"2167":{"title":"토큰이 저장되지 않음","titles":["인증 관련 문제"]},"2168":{"title":"인증 상태가 유지되지 않음","titles":["인증 관련 문제"]},"2169":{"title":"빌드 오류","titles":[]},"2170":{"title":"일반적인 빌드 오류","titles":["빌드 오류"]},"2171":{"title":"타입 오류","titles":["빌드 오류","일반적인 빌드 오류"]},"2172":{"title":"의존성 오류","titles":["빌드 오류","일반적인 빌드 오류"]},"2173":{"title":"경로 오류","titles":["빌드 오류","일반적인 빌드 오류"]},"2174":{"title":"메모리 오류","titles":["빌드 오류","일반적인 빌드 오류"]},"2175":{"title":"빌드 최적화","titles":["빌드 오류"]},"2176":{"title":"일반적인 문제 해결","titles":[]},"2177":{"title":"포트 충돌","titles":["일반적인 문제 해결"]},"2178":{"title":"의존성 설치 오류","titles":["일반적인 문제 해결"]},"2179":{"title":"환경 변수 인식 안 됨","titles":["일반적인 문제 해결"]},"2180":{"title":"빌드 오류","titles":["일반적인 문제 해결"]},"2181":{"title":"토큰 갱신 실패","titles":["일반적인 문제 해결"]},"2182":{"title":"런타임 오류","titles":[]},"2183":{"title":"일반적인 런타임 오류","titles":["런타임 오류"]},"2184":{"title":"컴포넌트를 찾을 수 없음","titles":["런타임 오류","일반적인 런타임 오류"]},"2185":{"title":"스토어를 찾을 수 없음","titles":["런타임 오류","일반적인 런타임 오류"]},"2186":{"title":"라우트를 찾을 수 없음","titles":["런타임 오류","일반적인 런타임 오류"]},"2187":{"title":"API 요청 실패","titles":["런타임 오류","일반적인 런타임 오류"]},"2188":{"title":"디버깅","titles":["런타임 오류"]},"2189":{"title":"배열/객체 처리","titles":[]},"2190":{"title":"개요","titles":["배열/객체 처리"]},"2191":{"title":"주요 함수","titles":["배열/객체 처리"]},"2192":{"title":"gfArrayToObject(array, keyField, valueField)","titles":["배열/객체 처리","주요 함수"]},"2193":{"title":"gfGetRowTable(listData)","titles":["배열/객체 처리","주요 함수"]},"2194":{"title":"gfGetJsonFilter(data, key, values)","titles":["배열/객체 처리","주요 함수"]},"2195":{"title":"gfJsonDataValidation(jsonData, _code)","titles":["배열/객체 처리","주요 함수"]},"2196":{"title":"gfCloneJson(obj)","titles":["배열/객체 처리","주요 함수"]},"2197":{"title":"gfObjectToString(obj, log)","titles":["배열/객체 처리","주요 함수"]},"2198":{"title":"관련 문서","titles":["배열/객체 처리"]},"2199":{"title":"공통 유틸리티 (common.js)","titles":[]},"2200":{"title":"개요","titles":["공통 유틸리티 (common.js)"]},"2201":{"title":"파일 위치","titles":["공통 유틸리티 (common.js)"]},"2202":{"title":"주요 함수 카테고리","titles":["공통 유틸리티 (common.js)"]},"2203":{"title":"1. 기본 유틸리티/검증 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2204":{"title":"gfIsEmpty(value)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","1. 기본 유틸리티/검증 함수"]},"2205":{"title":"gfNvl(val, defaultVal)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","1. 기본 유틸리티/검증 함수"]},"2206":{"title":"2. 날짜/시간 관련 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2207":{"title":"gfFormatDateString(dateStr, delimiter)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","2. 날짜/시간 관련 함수"]},"2208":{"title":"gfFormatDateTime(date)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","2. 날짜/시간 관련 함수"]},"2209":{"title":"gfAddDay(date, add)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","2. 날짜/시간 관련 함수"]},"2210":{"title":"gfDiffDate(fromDate, toDate)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","2. 날짜/시간 관련 함수"]},"2211":{"title":"3. 숫자 처리 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2212":{"title":"gfNumberFormat(number, decimals, decPoint, thousandsSep)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","3. 숫자 처리 함수"]},"2213":{"title":"4. 문자열 처리 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2214":{"title":"gfTrim(str)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","4. 문자열 처리 함수"]},"2215":{"title":"5. 배열/객체 처리 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2216":{"title":"gfArrayToObject(array, keyField, valueField)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","5. 배열/객체 처리 함수"]},"2217":{"title":"6. 파일 처리 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2218":{"title":"gfDownloadFile(data, fileName, mimeType)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","6. 파일 처리 함수"]},"2219":{"title":"7. 검증 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2220":{"title":"gfValidateResidentNumber(residentNumber)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","7. 검증 함수"]},"2221":{"title":"gfIsDate(str)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","7. 검증 함수"]},"2222":{"title":"자동 임포트","titles":["공통 유틸리티 (common.js)"]},"2223":{"title":"사용 예제","titles":["공통 유틸리티 (common.js)"]},"2224":{"title":"날짜 처리","titles":["공통 유틸리티 (common.js)","사용 예제"]},"2225":{"title":"숫자 포맷팅","titles":["공통 유틸리티 (common.js)","사용 예제"]},"2226":{"title":"데이터 검증","titles":["공통 유틸리티 (common.js)","사용 예제"]},"2227":{"title":"관련 문서","titles":["공통 유틸리티 (common.js)"]},"2228":{"title":"암호화/복호화","titles":[]},"2229":{"title":"개요","titles":["암호화/복호화"]},"2230":{"title":"주요 함수","titles":["암호화/복호화"]},"2231":{"title":"encryptObject(data)","titles":["암호화/복호화","주요 함수"]},"2232":{"title":"decryptObject(data)","titles":["암호화/복호화","주요 함수"]},"2233":{"title":"encryptBinary(bytes, file)","titles":["암호화/복호화","주요 함수"]},"2234":{"title":"자동 암호화","titles":["암호화/복호화"]},"2235":{"title":"관련 문서","titles":["암호화/복호화"]},"2236":{"title":"날짜 처리","titles":[]},"2237":{"title":"개요","titles":["날짜 처리"]},"2238":{"title":"주요 함수","titles":["날짜 처리"]},"2239":{"title":"gfFormatDateString(dateStr, delimiter)","titles":["날짜 처리","주요 함수"]},"2240":{"title":"gfFormatDateTime(date)","titles":["날짜 처리","주요 함수"]},"2241":{"title":"gfFormatDateTimeString(pDate)","titles":["날짜 처리","주요 함수"]},"2242":{"title":"gfAddDay(date, add)","titles":["날짜 처리","주요 함수"]},"2243":{"title":"gfDiffDate(fromDate, toDate)","titles":["날짜 처리","주요 함수"]},"2244":{"title":"gfAddMonth(date, val)","titles":["날짜 처리","주요 함수"]},"2245":{"title":"gfFormatDateWithSep(date)","titles":["날짜 처리","주요 함수"]},"2246":{"title":"gfTimestampToDateStr(date)","titles":["날짜 처리","주요 함수"]},"2247":{"title":"gfConvertTimestamp(pDate)","titles":["날짜 처리","주요 함수"]},"2248":{"title":"gfToday()","titles":["날짜 처리","주요 함수"]},"2249":{"title":"gfDayFormat(str)","titles":["날짜 처리","주요 함수"]},"2250":{"title":"날짜 드롭다운 생성","titles":["날짜 처리"]},"2251":{"title":"gfSetYearBox()","titles":["날짜 처리","날짜 드롭다운 생성"]},"2252":{"title":"gfSetMonthBox()","titles":["날짜 처리","날짜 드롭다운 생성"]},"2253":{"title":"gfSetDayBox()","titles":["날짜 처리","날짜 드롭다운 생성"]},"2254":{"title":"관련 문서","titles":["날짜 처리"]},"2255":{"title":"Excel 처리","titles":[]},"2256":{"title":"개요","titles":["Excel 처리"]},"2257":{"title":"주요 함수","titles":["Excel 처리"]},"2258":{"title":"gfHtmlExcelDown(obj)","titles":["Excel 처리","주요 함수"]},"2259":{"title":"gfSaveTableAsExcel(id, fileName)","titles":["Excel 처리","주요 함수"]},"2260":{"title":"gfSaveAgGridAsExcel(gridApi, fileName)","titles":["Excel 처리","주요 함수"]},"2261":{"title":"gfSaveAgGridAsExcel_2(columns, rowData, fileName)","titles":["Excel 처리","주요 함수"]},"2262":{"title":"ExcelJS 직접 사용","titles":["Excel 처리"]},"2263":{"title":"관련 문서","titles":["Excel 처리"]},"2264":{"title":"파일 처리","titles":[]},"2265":{"title":"개요","titles":["파일 처리"]},"2266":{"title":"주요 함수","titles":["파일 처리"]},"2267":{"title":"gfFileDownload(obj)","titles":["파일 처리","주요 함수"]},"2268":{"title":"gfGetUserImage(empCode, compCode)","titles":["파일 처리","주요 함수"]},"2269":{"title":"파일 다운로드","titles":["파일 처리"]},"2270":{"title":"관련 문서","titles":["파일 처리"]},"2271":{"title":"FCM 유틸리티","titles":[]},"2272":{"title":"개요","titles":["FCM 유틸리티"]},"2273":{"title":"파일 위치","titles":["FCM 유틸리티"]},"2274":{"title":"현재 상태","titles":["FCM 유틸리티"]},"2275":{"title":"주요 함수 (주석 처리됨)","titles":["FCM 유틸리티"]},"2276":{"title":"gfIsEmpty(obj)","titles":["FCM 유틸리티","주요 함수 (주석 처리됨)"]},"2277":{"title":"gfAddDay(date, add)","titles":["FCM 유틸리티","주요 함수 (주석 처리됨)"]},"2278":{"title":"gfObjectToString(obj, log)","titles":["FCM 유틸리티","주요 함수 (주석 처리됨)"]},"2279":{"title":"gfGetThreeComma(val)","titles":["FCM 유틸리티","주요 함수 (주석 처리됨)"]},"2280":{"title":"활성화된 함수","titles":["FCM 유틸리티"]},"2281":{"title":"사용 가이드","titles":["FCM 유틸리티"]},"2282":{"title":"함수 활성화","titles":["FCM 유틸리티","사용 가이드"]},"2283":{"title":"대안 사용","titles":["FCM 유틸리티","사용 가이드"]},"2284":{"title":"향후 계획","titles":["FCM 유틸리티"]},"2285":{"title":"관련 문서","titles":["FCM 유틸리티"]},"2286":{"title":"문자열 처리","titles":[]},"2287":{"title":"개요","titles":["문자열 처리"]},"2288":{"title":"주요 함수","titles":["문자열 처리"]},"2289":{"title":"gfTrim(str)","titles":["문자열 처리","주요 함수"]},"2290":{"title":"gfCamelToSnakeUpper(str)","titles":["문자열 처리","주요 함수"]},"2291":{"title":"gfSnakeToCamel(str)","titles":["문자열 처리","주요 함수"]},"2292":{"title":"gfFormIdStr(val)","titles":["문자열 처리","주요 함수"]},"2293":{"title":"gfSetClobData(strString, strAppend, strSeparator, strNull)","titles":["문자열 처리","주요 함수"]},"2294":{"title":"gfObjectToString(obj, log)","titles":["문자열 처리","주요 함수"]},"2295":{"title":"전화번호 처리","titles":["문자열 처리"]},"2296":{"title":"gfCheckPhoneHyphen(phoneNum)","titles":["문자열 처리","전화번호 처리"]},"2297":{"title":"gfCheckPhoneNumber(p_num)","titles":["문자열 처리","전화번호 처리"]},"2298":{"title":"gfMobliePhoneFormat(str)","titles":["문자열 처리","전화번호 처리"]},"2299":{"title":"관련 문서","titles":["문자열 처리"]},"2300":{"title":"숫자 처리","titles":[]},"2301":{"title":"개요","titles":["숫자 처리"]},"2302":{"title":"주요 함수","titles":["숫자 처리"]},"2303":{"title":"gfNumberFormat(number, decimals, decPoint, thousandsSep)","titles":["숫자 처리","주요 함수"]},"2304":{"title":"gfSetNumber(str)","titles":["숫자 처리","주요 함수"]},"2305":{"title":"gfGetComma(val)","titles":["숫자 처리","주요 함수"]},"2306":{"title":"gfGetThreeComma(val)","titles":["숫자 처리","주요 함수"]},"2307":{"title":"gfrRemoveComma(val)","titles":["숫자 처리","주요 함수"]},"2308":{"title":"gfFillZeros(n, digits)","titles":["숫자 처리","주요 함수"]},"2309":{"title":"gfGetNumber(str)","titles":["숫자 처리","주요 함수"]},"2310":{"title":"gfGetRound(val, unit)","titles":["숫자 처리","주요 함수"]},"2311":{"title":"관련 문서","titles":["숫자 처리"]},"2312":{"title":"폼 검증","titles":[]},"2313":{"title":"개요","titles":["폼 검증"]},"2314":{"title":"주요 함수","titles":["폼 검증"]},"2315":{"title":"gfIsEmpty(value)","titles":["폼 검증","주요 함수"]},"2316":{"title":"gfIsDate(str)","titles":["폼 검증","주요 함수"]},"2317":{"title":"gfValidateResidentNumber(residentNumber)","titles":["폼 검증","주요 함수"]},"2318":{"title":"gfCheckPhoneNumber(p_num)","titles":["폼 검증","주요 함수"]},"2319":{"title":"폼 검증 예제","titles":["폼 검증"]},"2320":{"title":"관련 문서","titles":["폼 검증"]},"2321":{"title":"IndexedDB 유틸리티","titles":[]},"2322":{"title":"개요","titles":["IndexedDB 유틸리티"]},"2323":{"title":"파일 위치","titles":["IndexedDB 유틸리티"]},"2324":{"title":"주요 함수","titles":["IndexedDB 유틸리티"]},"2325":{"title":"saveToIndexedDB(key, value)","titles":["IndexedDB 유틸리티","주요 함수"]},"2326":{"title":"loadFromIndexedDB(key)","titles":["IndexedDB 유틸리티","주요 함수"]},"2327":{"title":"getKeyIndexedDB()","titles":["IndexedDB 유틸리티","주요 함수"]},"2328":{"title":"removeKeyIndexedDB(key)","titles":["IndexedDB 유틸리티","주요 함수"]},"2329":{"title":"removeAllKeyIndexedDB()","titles":["IndexedDB 유틸리티","주요 함수"]},"2330":{"title":"getPageData(pageData, callback)","titles":["IndexedDB 유틸리티","주요 함수"]},"2331":{"title":"데이터 압축","titles":["IndexedDB 유틸리티"]},"2332":{"title":"탭 스토어 연동","titles":["IndexedDB 유틸리티"]},"2333":{"title":"주의사항","titles":["IndexedDB 유틸리티"]},"2334":{"title":"관련 문서","titles":["IndexedDB 유틸리티"]}},"dirtCount":0,"index":[["채워",{"2":{"2308":1}}],["채우기",{"2":{"180":1,"709":1}}],["콤마를",{"2":{"2307":1}}],["콤마",{"2":{"2278":1}}],["향후",{"0":{"2284":1},"2":{"2274":1}}],["향상을",{"2":{"1723":1}}],["향상",{"2":{"432":2,"1686":2}}],["월",{"2":{"2221":1,"2252":1,"2316":1}}],["앞뒤",{"2":{"2214":1,"2289":1}}],["천",{"2":{"2212":1,"2304":1,"2305":1,"2306":1}}],["빼기",{"2":{"2209":1}}],["음수",{"2":{"2209":1}}],["양수",{"2":{"2209":1}}],["증감",{"2":{"2209":1,"2277":2}}],["뺍니다",{"2":{"2209":1,"2242":1,"2244":1}}],["깊은",{"2":{"2196":1}}],["깊이",{"2":{"1711":1}}],["임시",{"2":{"2171":1}}],["임포트합니다",{"2":{"2079":1}}],["임포트가",{"0":{"2055":1}}],["임포트할",{"2":{"1846":1}}],["임포트를",{"2":{"1744":1}}],["임포트되므로",{"2":{"1707":1,"1766":1,"1873":1,"2200":1,"2222":1}}],["임포트됩니다",{"2":{"1589":1}}],["임포트",{"0":{"1204":1,"1589":1,"1846":1,"1873":1,"2079":1,"2222":1},"1":{"1205":1,"1206":1},"2":{"1199":2,"1680":2,"1686":1,"1817":1,"1838":1,"1840":1,"1841":1,"1842":1,"1846":1,"1861":1,"2083":2,"2184":1}}],["줄이세요",{"2":{"2162":1}}],["효율적으로",{"2":{"2098":1}}],["효율적인",{"2":{"2077":1}}],["효율성",{"2":{"1686":1}}],["푸터",{"2":{"2028":1}}],["축소",{"2":{"2011":1}}],["점포코드",{"2":{"1981":2}}],["현황",{"2":{"1955":1}}],["현재는",{"2":{"60":1}}],["현재",{"0":{"126":1,"1358":1,"2274":1},"2":{"56":1,"126":1,"234":1,"388":1,"604":1,"687":1,"705":1,"1407":1,"1415":1,"1420":1,"1473":1,"1480":1,"1913":2,"1915":1,"1916":1,"2018":1,"2161":1,"2208":2,"2272":1,"2274":1,"2280":1,"2283":1}}],["평가",{"0":{"1954":1},"1":{"1955":1},"2":{"1942":1,"1946":1,"1955":3}}],["평문",{"2":{"205":1,"206":1,"609":1}}],["법인카드",{"0":{"1950":1},"1":{"1951":1},"2":{"1942":1,"1951":2}}],["팔레트",{"2":{"1901":1}}],["색상",{"2":{"1901":3}}],["히스토리",{"2":{"1896":1}}],["₩1",{"2":{"1884":1}}],["폴백",{"2":{"1879":1}}],["폴더와",{"2":{"1748":1}}],["폴더에",{"2":{"1740":1}}],["폴더가",{"2":{"1727":1}}],["국제화",{"0":{"1875":1},"1":{"1876":1,"1877":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1887":1,"1888":1},"2":{"1858":1,"1876":1,"1888":1}}],["국산",{"2":{"427":1,"834":1}}],["좋습니다",{"2":{"1848":1}}],["것으로",{"2":{"2274":1}}],["것이",{"2":{"1848":1}}],["것을",{"2":{"38":1,"466":1}}],["달력",{"2":{"1841":1}}],["애니메이션",{"2":{"1838":2}}],["애플리케이션을",{"2":{"1486":1,"1736":1}}],["애플리케이션에서",{"2":{"1890":1}}],["애플리케이션에",{"2":{"1373":1}}],["애플리케이션이",{"2":{"505":1}}],["애플리케이션",{"0":{"238":1,"369":1,"491":1,"498":1,"504":1},"1":{"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"370":1,"371":1,"492":1,"493":1,"494":1,"499":1,"500":1,"501":1,"502":1,"503":1,"505":1,"506":1,"507":1},"2":{"238":1,"292":1,"302":1,"344":1,"425":2,"432":1,"439":1,"472":1,"538":1,"544":1,"554":1,"558":1,"564":1,"568":1,"765":1,"938":1,"1086":1,"1652":1,"1679":1,"1765":1,"1817":1,"1837":1,"1858":1,"1938":1}}],["애플리케이션의",{"2":{"203":1,"451":1,"631":1,"1377":1,"1393":1,"1413":1,"1422":1,"1471":1,"1655":1,"1656":1,"1857":1,"1860":1,"1861":1}}],["담은",{"2":{"1819":1,"1851":1}}],["담당합니다",{"2":{"1679":1}}],["담당하는",{"2":{"631":1}}],["청구",{"2":{"1808":1,"1942":3,"1951":2}}],["청크로",{"2":{"1496":1}}],["청크",{"0":{"1500":1},"2":{"1178":1,"1500":1,"1501":1}}],["근태",{"2":{"1807":1,"1942":1,"1945":3}}],["본인",{"2":{"1806":1,"1942":1,"1946":1}}],["본문은",{"2":{"139":1,"393":1}}],["본문에서",{"2":{"801":1}}],["본문에",{"2":{"110":1,"114":1}}],["본문의",{"2":{"103":1,"219":1,"671":1}}],["본문",{"2":{"22":1,"30":1,"31":1,"32":1,"33":1,"34":1,"46":1,"56":1,"57":1,"65":1,"72":1,"73":1,"74":1,"92":1,"103":1,"104":1,"106":1,"107":1,"119":1,"120":1,"121":1,"211":1,"623":1,"670":2,"671":1,"698":1,"732":1}}],["팁",{"2":{"1786":1}}],["💡",{"2":{"1786":1}}],["되셨다면",{"2":{"1786":1}}],["묻는",{"0":{"2054":1},"1":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"1781":1}}],["런타임",{"0":{"2182":1,"2183":1},"1":{"2183":1,"2184":2,"2185":2,"2186":2,"2187":2,"2188":1},"2":{"1780":2}}],["할",{"2":{"1777":1}}],["벤더",{"0":{"1924":1},"1":{"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1,"1931":1},"2":{"1774":1}}],["쓰리콤마가",{"2":{"2279":1}}],["쓰리콤마로",{"2":{"2279":1}}],["쓰는",{"2":{"1761":1}}],["쓰기",{"2":{"878":1,"2106":1,"2132":1}}],["규약",{"0":{"1759":1}}],["규칙입니다",{"2":{"1777":1}}],["규칙을",{"2":{"346":1,"393":1}}],["규칙",{"0":{"47":1,"50":1,"77":1,"184":1,"346":1,"393":1,"447":1,"449":1,"528":1,"531":1,"533":1,"565":1,"659":1,"712":1,"1370":1,"1557":1,"1564":1,"1569":1,"1580":1,"1607":1,"1612":1,"1626":1,"1676":1,"1825":1},"1":{"48":1,"49":1,"50":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"448":1,"449":1,"529":1,"530":1,"532":1,"534":1,"535":1,"660":1,"661":1,"713":1,"714":1,"715":1,"716":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1565":1,"1566":1,"1567":1,"1568":1,"1570":1,"1571":1,"1572":1,"1573":1,"1574":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1826":1,"1827":1,"1828":1},"2":{"122":1,"221":1,"363":1,"384":1,"385":1,"386":1,"393":2,"398":1,"404":1,"542":1,"581":1,"680":1,"1752":1,"1777":5}}],["됨",{"0":{"1749":1,"2179":1}}],["콘솔과",{"2":{"2188":1}}],["콘솔",{"2":{"2167":1}}],["콘솔에",{"2":{"1747":1}}],["콘텐츠",{"2":{"1088":1}}],["품질을",{"2":{"1744":1}}],["미리",{"2":{"1741":1}}],["미리보기",{"0":{"1741":1},"2":{"1156":1}}],["됩니다",{"2":{"1735":1,"1759":1}}],["먼저",{"2":{"1731":1}}],["속도",{"2":{"1723":1}}],["속성으로",{"2":{"1861":1}}],["속성을",{"2":{"962":1}}],["속성",{"2":{"221":1,"680":1,"761":1,"981":2,"982":3,"1026":1,"1033":1}}],["터미널에서",{"2":{"1714":1,"1715":1,"1716":1}}],["학습하세요",{"2":{"1711":1}}],["더하기",{"2":{"2209":1}}],["더하거나",{"2":{"2209":1,"2242":1,"2244":1}}],["더",{"2":{"1711":1,"2077":1,"2086":1}}],["익명",{"2":{"2205":1}}],["익히세요",{"2":{"1786":1}}],["익히기",{"0":{"1756":1},"2":{"539":1}}],["익혔다면",{"2":{"1711":1}}],["김철수",{"2":{"1705":1,"2193":2,"2258":1}}],["⚠️",{"2":{"1697":1}}],["편의성",{"2":{"1686":1}}],["편집",{"2":{"1071":1,"2099":1,"2119":1}}],["차이",{"2":{"2210":1}}],["차이를",{"2":{"2210":1,"2243":1}}],["차트를",{"2":{"2073":1,"2103":1}}],["차트",{"0":{"2070":1,"2100":1},"1":{"2071":1,"2072":1,"2073":1,"2101":1,"2102":1,"2103":1},"2":{"1685":2,"1773":2}}],["차단",{"2":{"221":1,"680":1,"761":1}}],["독립적으로",{"2":{"1680":1}}],["풍부한",{"2":{"1680":1}}],["집중식",{"2":{"1680":1}}],["집약적",{"2":{"1221":1}}],["을",{"2":{"1679":1,"2079":1}}],["견적",{"2":{"1664":1}}],["교육",{"0":{"1952":1},"1":{"1953":1},"2":{"1664":1,"1689":1,"1942":1,"1946":2,"1953":3}}],["교체",{"0":{"1493":1}}],["회계",{"2":{"1802":1,"1961":1}}],["회원가입",{"2":{"1663":1,"1796":1,"1895":1}}],["회사",{"2":{"94":1,"103":1,"120":1,"121":1,"2268":1}}],["회사명",{"2":{"92":1,"93":1}}],["숫자에",{"2":{"2304":1}}],["숫자를",{"2":{"2212":1,"2303":1,"2308":1,"2310":1}}],["숫자",{"0":{"1884":1,"2211":1,"2225":1,"2300":1},"1":{"2212":1,"2301":1,"2302":1,"2303":1,"2304":1,"2305":1,"2306":1,"2307":1,"2308":1,"2309":1,"2310":1,"2311":1},"2":{"1659":1,"1766":3,"1783":1,"1820":1,"1871":1,"1879":2,"2033":1,"2210":1,"2212":2,"2227":1,"2285":1,"2301":1}}],["숫자만",{"2":{"98":1,"744":1,"2309":1}}],["믹스인",{"0":{"1644":1}}],["계획",{"0":{"2284":1}}],["계정을",{"2":{"1697":1}}],["계산할",{"2":{"2277":1}}],["계산하고",{"2":{"2277":1}}],["계산합니다",{"2":{"2210":1,"2243":1}}],["계산",{"2":{"1613":1,"1766":2}}],["계층적",{"2":{"2009":1,"2017":1}}],["계층",{"2":{"565":1}}],["계층별로",{"2":{"372":1}}],["계층별",{"0":{"378":1},"1":{"379":1,"380":1,"381":1},"2":{"103":1,"565":1}}],["완벽한",{"2":{"2086":1}}],["완성된",{"0":{"1608":1},"1":{"1609":1}}],["완료되면",{"2":{"1727":1,"1736":1}}],["완료되었다면",{"2":{"1619":1,"1750":1}}],["완료",{"2":{"57":1,"97":1,"105":1,"396":7,"738":1}}],["부족",{"2":{"2174":1}}],["부분을",{"2":{"1679":1}}],["부모",{"2":{"1606":1,"1625":1}}],["부서별",{"2":{"1947":1,"1969":1,"2010":1}}],["부서",{"2":{"1027":1,"1043":1,"1048":1,"1077":1,"1609":1,"1945":1,"1949":1,"1969":1,"1970":1,"2009":3}}],["부서명",{"2":{"92":1,"93":1}}],["슬롯",{"0":{"1594":1}}],["카멜케이스로",{"2":{"2291":1}}],["카멜케이스를",{"2":{"2290":1}}],["카드",{"2":{"1899":1,"2141":1}}],["카운트",{"2":{"1585":1}}],["카테고리",{"0":{"2202":1},"1":{"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1},"2":{"861":1}}],["화살표",{"2":{"1566":1}}],["화면을",{"0":{"1767":1},"1":{"1768":1,"1769":1,"1770":1,"1771":1,"1772":1}}],["화면별",{"2":{"1444":1}}],["화면",{"2":{"1082":1,"1442":1,"1444":2,"1445":3,"1752":1}}],["세미콜론",{"2":{"1565":1}}],["세션이",{"2":{"1262":1,"1276":1,"1337":1}}],["세션에",{"2":{"1252":1}}],["세션을",{"2":{"106":1}}],["세션",{"0":{"106":1,"1238":1,"1240":1,"1248":1,"1249":1,"1250":1,"1251":1,"1446":1,"1958":1},"1":{"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"1452":1,"1453":1,"1454":1},"2":{"56":1,"103":3,"104":1,"114":2,"219":1,"266":1,"430":1,"465":1,"671":1,"849":1,"906":2,"1209":1,"1222":1,"1239":3,"1240":1,"1242":1,"1247":1,"1248":1,"1249":1,"1250":1,"1251":1,"1253":1,"1272":1,"1273":1,"1282":1,"1447":1,"1449":1,"1451":1,"1454":2,"1660":1,"1758":2,"1760":3,"1784":1,"1794":1,"1797":2,"1798":1,"1909":1,"1914":6,"1923":1,"1958":2,"2034":1,"2123":1,"2234":1}}],["들여쓰기",{"2":{"1565":1}}],["코딩",{"0":{"1565":1,"1777":1},"2":{"1777":1}}],["코드이거나",{"2":{"2274":1}}],["코드에서",{"2":{"1847":1}}],["코드는",{"2":{"1497":1}}],["코드를",{"2":{"1493":1,"1496":1,"1848":1,"2077":1}}],["코드2",{"2":{"1035":1}}],["코드1",{"2":{"1035":1}}],["코드가",{"2":{"560":1,"1654":1,"1857":1}}],["코드",{"0":{"37":1,"138":1,"438":1,"550":1,"553":1,"1273":1,"1496":1,"1613":1,"1654":1,"1718":1},"1":{"439":1,"440":1,"441":1,"551":1,"552":1,"554":1,"555":1,"556":1,"1655":1,"1656":1,"1657":1},"2":{"30":1,"37":1,"44":1,"94":2,"103":1,"120":2,"121":2,"294":1,"393":1,"432":1,"437":1,"478":2,"549":3,"551":1,"552":1,"562":1,"598":1,"864":1,"989":1,"1034":1,"1035":1,"1043":1,"1077":1,"1164":1,"1184":1,"1308":1,"1309":1,"1310":1,"1311":1,"1312":1,"1319":1,"1505":2,"1532":1,"1568":1,"1652":1,"1744":1,"1745":1,"1816":1,"1893":1,"1895":1,"1898":1,"2175":1,"2195":1,"2268":2,"2276":1}}],["나이",{"2":{"1548":1,"2262":1}}],["나머지는",{"2":{"1261":1}}],["친화적으로",{"2":{"1536":1}}],["친화적",{"0":{"1536":1}}],["백오프",{"2":{"1534":1}}],["백엔드의",{"2":{"1607":1,"1626":1}}],["백엔드에서",{"2":{"1604":1,"1623":1,"1701":1}}],["백엔드",{"0":{"1606":1,"1625":1},"2":{"1191":1,"1370":1,"1517":1,"1606":1,"1625":1,"1725":1,"1726":1,"1768":1,"2160":1}}],["못함",{"2":{"1530":1}}],["못했을",{"2":{"1358":1}}],["폼",{"0":{"1973":1,"1989":1,"2312":1,"2319":1},"1":{"2313":1,"2314":1,"2315":1,"2316":1,"2317":1,"2318":1,"2319":1,"2320":1},"2":{"1526":1,"1766":1,"1973":1,"1989":1}}],["판단합니다",{"2":{"1501":1}}],["핫",{"0":{"1493":1}}],["올바른",{"2":{"2226":1,"2319":1}}],["올바른지",{"2":{"1353":1,"1487":1}}],["올바르게",{"2":{"1485":1}}],["많습니다",{"2":{"1468":1}}],["펼쳐진",{"2":{"1467":1}}],["펼치기",{"2":{"1456":1,"1458":1,"1461":1,"1463":2,"1917":2,"2017":1}}],["항상",{"2":{"1467":1,"1539":1,"1568":1,"1614":1}}],["항목",{"0":{"1270":1},"2":{"2007":1}}],["항목의",{"2":{"51":1}}],["신용카드",{"2":{"1664":1,"1689":1}}],["신청",{"2":{"1435":1,"1807":1,"1942":1,"1945":2,"1953":2}}],["신규는",{"2":{"45":1}}],["신규",{"2":{"43":1,"45":4,"49":1,"538":1,"651":2,"655":1,"656":1,"1752":1,"1879":1}}],["엽니다",{"2":{"1426":1,"1475":1}}],["토글합니다",{"2":{"1460":1,"1461":1}}],["토글",{"2":{"1410":1,"1460":2,"1463":2,"1917":2,"1918":1}}],["토큰은",{"2":{"104":1,"1390":1}}],["토큰만",{"2":{"57":1}}],["토큰을",{"2":{"57":1,"103":1,"105":1,"803":1,"952":1,"1263":1,"1272":1,"1377":1,"1380":1,"1382":1,"1383":1,"1390":1}}],["토큰과",{"2":{"15":1}}],["토큰이",{"0":{"2167":1},"2":{"9":1,"15":1,"873":1,"1390":1,"2057":1,"2167":1}}],["토큰",{"0":{"6":1,"10":1,"16":1,"59":1,"110":1,"111":1,"113":1,"279":1,"280":1,"281":1,"321":1,"322":1,"323":1,"355":1,"809":1,"812":1,"813":1,"814":1,"818":1,"941":1,"944":1,"945":1,"1225":1,"1231":1,"1232":1,"1254":1,"1259":1,"1276":1,"1295":1,"1332":1,"1335":1,"1337":1,"2165":1,"2181":1},"1":{"7":1,"8":1,"9":1,"10":1,"11":2,"12":2,"13":2,"14":1,"15":1,"16":1,"17":1,"18":1,"356":1,"357":1,"810":1,"811":1,"815":1,"816":1,"817":1,"942":1,"943":1,"1226":1,"1227":1,"1233":1,"1234":1,"1235":1,"1255":1,"1256":1,"1257":1,"1258":1,"1259":1,"1260":1,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1336":1,"1337":1},"2":{"6":1,"9":5,"13":1,"15":3,"16":2,"17":1,"20":1,"22":1,"28":1,"39":1,"41":1,"53":1,"54":1,"56":3,"57":5,"59":2,"61":1,"63":1,"90":1,"103":4,"105":2,"111":1,"115":1,"117":1,"132":1,"141":1,"214":4,"215":2,"225":1,"266":1,"391":1,"430":1,"465":1,"518":1,"540":2,"576":2,"594":2,"598":2,"602":3,"603":2,"672":4,"803":1,"813":2,"849":1,"873":1,"917":1,"945":2,"952":1,"1230":1,"1236":1,"1237":1,"1249":1,"1252":1,"1256":1,"1258":1,"1267":1,"1272":1,"1273":1,"1275":2,"1276":1,"1289":2,"1308":2,"1321":1,"1332":1,"1343":1,"1379":1,"1382":1,"1387":1,"1390":3,"1391":1,"1409":1,"1525":1,"1635":1,"1657":1,"1680":1,"1758":1,"1759":3,"1760":2,"1794":1,"1797":1,"1862":2,"2068":2,"2095":2,"2165":1,"2166":1}}],["게터",{"0":{"1384":1},"1":{"1385":1}}],["찾을",{"0":{"2056":1,"2184":1,"2185":1,"2186":1},"2":{"1527":1,"1536":1,"2173":1}}],["찾지",{"2":{"1358":1}}],["찾음",{"2":{"1064":1}}],["같이",{"2":{"1348":1,"1370":1,"1607":1,"1626":1}}],["같은",{"2":{"130":1,"432":1,"505":1,"1252":1,"1563":1,"1686":1,"1829":1,"1957":1,"1973":1,"1989":1}}],["^",{"2":{"1326":1,"2293":2}}],["베스트",{"0":{"1320":1,"1539":1,"1610":1},"1":{"1611":1,"1612":1,"1613":1,"1614":1,"1615":1}}],["취소",{"2":{"1309":1,"1942":1}}],["취소되고",{"2":{"1287":1}}],["블록에서",{"2":{"1289":1}}],["블랭크",{"0":{"1078":1},"1":{"1079":1,"1080":1,"1081":1,"1082":1,"1083":1},"2":{"1765":1}}],["잠시",{"2":{"1286":1,"1310":1,"1333":1,"1529":1,"1536":1}}],["무효화",{"2":{"1848":1}}],["무한",{"2":{"1264":1}}],["무엇인가요",{"0":{"538":1,"1752":1}}],["횟수를",{"2":{"1264":1}}],["횟수",{"2":{"1264":1}}],["진입점과",{"2":{"1857":1}}],["진입점",{"2":{"1652":1,"1817":1,"1858":1}}],["진입점입니다",{"2":{"451":1,"1656":1,"1861":1}}],["진행",{"2":{"1264":1,"1309":1,"1358":1}}],["영어로",{"2":{"1886":1}}],["영어",{"2":{"1879":2}}],["영속화가",{"2":{"1390":1}}],["영속화",{"0":{"1251":1,"2125":1},"2":{"1893":1,"2085":1,"2086":1}}],["영역",{"2":{"367":1,"1088":1,"2029":1}}],["닫습니다",{"2":{"1427":1,"1477":1,"1478":1}}],["닫아도",{"2":{"1239":1,"1411":1}}],["닫기",{"2":{"1090":2,"1435":1,"1915":1}}],["초기",{"2":{"1986":2,"1987":1,"2330":1}}],["초기화됩니다",{"2":{"1380":1,"2168":1}}],["초기화합니다",{"2":{"1247":1,"1383":1,"1408":1}}],["초기화",{"0":{"1234":1,"1249":1},"2":{"1249":2,"1410":1,"1433":1,"1434":1,"1435":1,"1613":1,"1911":1,"1918":1,"2185":1}}],["초과",{"2":{"953":1}}],["길음",{"2":{"1227":1}}],["갱신됩니다",{"2":{"2168":1}}],["갱신되지만",{"2":{"2057":1}}],["갱신은",{"2":{"1289":1}}],["갱신이",{"2":{"1264":1,"1390":1}}],["갱신할",{"2":{"1263":1,"1390":1}}],["갱신을",{"2":{"1256":1,"1261":1,"1390":1,"1525":1}}],["갱신합니다",{"2":{"1231":1}}],["갱신",{"0":{"1231":1,"1254":1,"1256":1,"1257":1,"1262":1,"1263":1,"1276":1,"1332":1,"1335":1,"1337":1,"2181":1},"1":{"1255":1,"1256":1,"1257":1,"1258":2,"1259":2,"1260":2,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1336":1,"1337":1},"2":{"1227":1,"1237":1,"1258":1,"1261":1,"1264":3,"1275":2,"1276":3,"1289":1,"1308":3,"1321":1,"1332":1,"1336":1,"1337":1,"1343":1,"1390":2,"1391":1,"1525":1,"1759":1,"1760":3,"1862":1,"2068":1,"2095":1,"2165":2,"2166":1}}],["짧음",{"2":{"1226":1}}],["짧게",{"2":{"1159":1}}],["걸릴",{"2":{"1221":1,"2175":1}}],["큰",{"2":{"1221":1,"1252":1,"1848":1,"2175":1}}],["객체로",{"2":{"2192":1,"2216":1}}],["객체에",{"2":{"1885":1}}],["객체",{"0":{"2189":1,"2215":1},"1":{"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2216":1},"2":{"1215":1,"1216":1,"1217":2,"1298":1,"1473":1,"1659":1,"1766":2,"1820":1,"1871":1,"1914":1,"2190":1,"2193":1,"2204":1,"2208":1,"2209":1,"2216":1,"2227":1,"2231":1,"2232":1,"2233":2,"2277":1,"2278":1,"2330":1}}],["객체를",{"2":{"1215":1,"1216":1,"2196":1,"2197":1,"2231":1,"2232":1,"2294":1}}],["객체는",{"2":{"1045":1}}],["압축되어",{"2":{"2331":1}}],["압축",{"0":{"1498":1,"2331":1},"2":{"1184":1,"1498":3,"1505":1}}],["쉐이킹",{"0":{"1497":1},"2":{"1184":1,"1505":1}}],["마운트",{"2":{"1702":1}}],["마운트합니다",{"2":{"1656":1}}],["마세요",{"2":{"1173":1,"1252":2}}],["마우스",{"2":{"1111":1}}],["민감한",{"2":{"1173":1,"1252":2}}],["붙은",{"2":{"1169":1}}],["높이세요",{"2":{"1164":1}}],["긴",{"2":{"1159":1}}],["박스의",{"2":{"1431":1}}],["박스",{"2":{"1131":1,"1762":2,"2005":1,"2007":1}}],["승인취소",{"2":{"1435":1}}],["승인",{"0":{"1122":1,"1128":1},"1":{"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1129":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1},"2":{"1124":1,"1126":2,"1127":1,"1129":1,"1131":1,"1133":1,"1435":1,"1764":2,"1915":1,"1942":2,"1951":2,"2021":2,"2022":1}}],["별칭과",{"2":{"1675":1}}],["별칭을",{"2":{"1159":1,"1164":2,"1829":1}}],["별칭",{"0":{"1158":1,"1161":1,"1201":1,"1829":1},"1":{"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1830":1},"2":{"1162":1,"1164":1,"1673":1,"1776":1,"1830":1,"2173":1}}],["별",{"2":{"1121":1}}],["별도의",{"2":{"263":1,"330":1,"843":1,"1303":1,"1766":1,"1873":1,"2079":1,"2200":1,"2222":1}}],["별도로",{"2":{"104":1,"1289":1}}],["별도",{"2":{"17":1,"670":1}}],["앤",{"0":{"1106":1,"2114":1,"2137":1},"2":{"1104":1,"2114":1,"2137":1}}],["북마크",{"0":{"1100":1},"1":{"1101":1,"1102":1,"1103":1,"1104":1,"1105":1,"1106":1},"2":{"2018":1,"2019":2}}],["팝업을",{"2":{"2003":1}}],["팝업",{"0":{"1092":1,"1099":1,"1122":1,"1128":1,"1135":1,"1141":1,"1146":1,"1152":1,"1764":1,"2020":1},"1":{"1093":1,"1094":1,"1095":1,"1096":1,"1097":1,"1098":1,"1099":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1129":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1136":1,"1137":1,"1138":1,"1139":1,"1140":1,"1142":1,"1143":1,"1144":1,"1145":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1},"2":{"1094":1,"1096":1,"1124":1,"1127":1,"1129":1,"1131":1,"1133":1,"1137":1,"1142":1,"1144":1,"1148":1,"1154":1,"1374":1,"1587":1,"1667":1,"1758":1,"1762":1,"1764":2,"1765":2,"1817":1,"1895":1,"1978":2,"1983":2,"1984":2,"1994":2,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2030":3,"2031":1}}],["┌─────────────────────────────────┐",{"2":{"1089":1}}],["탭에",{"2":{"1836":1}}],["탭을",{"2":{"1475":1,"1476":1,"1477":1,"1478":1,"2188":1}}],["탭으로",{"2":{"1471":1}}],["탭",{"0":{"1090":1,"1470":1,"2332":1},"1":{"1471":1,"1472":1,"1473":1,"1474":1,"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1},"2":{"1088":2,"1089":1,"1090":4,"1118":1,"1471":1,"1473":3,"1476":1,"1477":1,"1479":1,"1480":2,"1660":1,"1758":2,"1909":1,"1916":7,"1923":1,"1970":4,"2029":1,"2123":1,"2332":1,"2334":1}}],["멀티",{"0":{"1074":1},"1":{"1075":1,"1076":1,"1077":1},"2":{"1075":1,"1763":1,"2015":1}}],["엑셀",{"2":{"1071":3,"1435":1}}],["숨겨질",{"2":{"1467":1}}],["숨기고",{"2":{"1302":1}}],["숨기기",{"2":{"1070":1,"1463":1}}],["숨김",{"0":{"1325":1,"1329":1},"2":{"1026":1,"1033":1,"1275":1,"1433":1,"1439":1,"1440":1,"1456":1,"1458":1,"1460":2,"1466":1,"1912":1,"2001":2}}],["핸들러",{"2":{"1063":1,"1433":1,"1572":1}}],["렌더링합니다",{"2":{"1860":1}}],["렌더링",{"2":{"1062":1,"1064":1,"2011":1,"2112":1,"2135":1}}],["렌더링하는",{"2":{"1060":1}}],["노드",{"2":{"1052":1,"1842":1,"2011":2}}],["래퍼입니다",{"2":{"1055":1,"1075":1}}],["래퍼",{"0":{"1054":1},"1":{"1055":1,"1056":1,"1057":1},"2":{"1042":1,"1763":1,"2015":1,"2071":1,"2072":1}}],["래핑",{"2":{"219":1,"671":1}}],["에셋",{"0":{"1499":1},"2":{"1505":1}}],["에디터를",{"2":{"1057":1}}],["에디터",{"0":{"1057":1,"1718":1},"2":{"1763":1}}],["에디터로",{"2":{"1041":1}}],["에러는",{"2":{"1289":1,"1313":1,"1320":1,"1522":1,"1525":2,"1535":1,"1539":1}}],["에러를",{"2":{"1261":1,"1302":1,"1338":1,"1521":1,"1527":1,"1568":1,"1614":1,"2333":1}}],["에러가",{"0":{"2057":1},"2":{"123":1,"1287":1,"1302":1,"1317":1}}],["에러",{"0":{"14":1,"34":1,"37":1,"1258":1,"1285":1,"1286":1,"1287":1,"1288":1,"1302":1,"1305":1,"1307":1,"1308":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1315":1,"1319":1,"1328":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1338":1,"1520":1,"1522":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1531":1,"1532":1,"1533":1,"1535":1,"1536":1,"1538":1,"1556":1,"1568":1,"1614":1,"2162":1},"1":{"15":1,"1286":1,"1287":1,"1288":1,"1306":1,"1307":1,"1308":2,"1309":2,"1310":2,"1311":2,"1312":2,"1313":1,"1314":1,"1315":1,"1316":2,"1317":2,"1318":1,"1319":1,"1320":1,"1321":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1521":1,"1522":1,"1523":1,"1524":1,"1525":2,"1526":2,"1527":2,"1528":2,"1529":2,"1530":2,"1531":1,"1532":2,"1533":2,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1},"2":{"30":3,"31":2,"34":7,"37":2,"94":1,"137":1,"352":1,"403":1,"530":1,"600":1,"629":2,"699":1,"1256":1,"1264":2,"1267":1,"1275":3,"1279":1,"1288":1,"1289":1,"1290":1,"1304":1,"1306":1,"1310":1,"1311":2,"1314":6,"1316":1,"1319":4,"1320":4,"1331":1,"1338":1,"1341":1,"1343":1,"1409":1,"1516":1,"1522":1,"1523":2,"1527":1,"1532":4,"1533":1,"1535":2,"1536":1,"1538":2,"1539":5,"1540":1,"1556":2,"1567":1,"1568":2,"1609":1,"1614":1,"1618":1,"1657":1,"1702":1,"1759":5,"1769":2,"1785":1,"1862":1,"1880":1,"1994":1,"2068":1,"2095":1,"2162":1,"2165":1,"2181":1,"2333":1}}],["셀을",{"2":{"1060":1}}],["셀",{"0":{"1057":1,"1071":1},"2":{"1041":1,"1057":1,"1062":1,"1763":2,"2013":1,"2099":1,"2119":1}}],["너비",{"2":{"1034":1}}],["콜백을",{"2":{"2330":1}}],["콜백",{"0":{"1036":1},"2":{"1033":1}}],["드롭",{"0":{"1106":1,"2114":1,"2137":1},"2":{"1104":1,"2114":1,"2137":1}}],["드롭다운",{"0":{"2250":1},"1":{"2251":1,"2252":1,"2253":1},"2":{"1033":1,"1048":1,"1050":1,"2009":1,"2010":1,"2251":1,"2252":1,"2253":1}}],["드래그",{"0":{"1106":1,"2114":1,"2137":1},"2":{"1104":1,"2114":1,"2137":1}}],["드라이버",{"0":{"485":1},"2":{"462":1,"463":1,"464":1,"551":1,"759":1,"834":2}}],["볼",{"2":{"1031":1,"1741":1}}],["테마도",{"2":{"1647":1,"2142":1}}],["테마는",{"2":{"1647":1,"2142":1}}],["테마",{"0":{"1647":1,"2142":1},"2":{"1898":1,"1901":3}}],["테이블을",{"2":{"2258":1,"2259":1}}],["테이블",{"2":{"1031":1,"2141":1,"2259":1}}],["테스트합니다",{"2":{"1486":1}}],["테스트를",{"2":{"988":1,"995":1,"1719":1}}],["테스트할",{"2":{"144":1,"1701":1}}],["테스트용",{"2":{"107":1}}],["테스트",{"0":{"107":1,"301":1,"871":1,"872":1,"988":1,"995":1,"1486":1,"1616":1,"1618":1,"1778":1,"2144":1,"2146":1,"2147":1,"2148":1,"2150":1,"2151":1,"2152":1,"2153":1,"2155":1,"2156":1,"2157":1,"2158":1},"1":{"872":1,"873":1,"989":1,"990":1,"996":1,"997":1,"1617":1,"1618":1,"2145":1,"2146":1,"2147":1,"2149":1,"2150":1,"2151":1,"2152":1,"2154":1,"2155":1,"2156":1,"2157":1,"2158":1},"2":{"94":1,"292":1,"359":1,"396":1,"437":2,"469":1,"478":1,"542":1,"549":1,"552":4,"557":1,"562":3,"742":1,"856":1,"989":1,"990":1,"1778":7,"1879":1,"2145":1,"2147":1,"2149":1,"2150":1,"2154":1,"2155":1}}],["옵션이",{"2":{"1045":1,"1311":1}}],["옵션을",{"2":{"1031":1,"1390":1,"1527":1}}],["옵션",{"0":{"1177":1},"1":{"1178":1},"2":{"1026":2,"1029":1,"1033":2,"1704":2,"1776":1,"2005":1}}],["라이트",{"2":{"1901":1}}],["라이브러리와",{"2":{"1669":1,"1824":1}}],["라이브러리를",{"2":{"900":1,"966":1,"2073":1,"2103":1}}],["라이브러리의",{"2":{"776":1}}],["라이브러리가",{"2":{"759":1}}],["라이브러리",{"0":{"758":1,"776":1,"900":1,"926":1,"1669":1,"1685":1,"1924":1,"2046":1,"2064":1,"2070":1,"2074":1,"2100":1,"2110":1,"2117":1},"1":{"759":1,"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"901":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":2,"928":2,"929":2,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1,"1931":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1,"2071":1,"2072":1,"2073":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1,"2101":2,"2102":2,"2103":2,"2104":1,"2105":1,"2106":1,"2107":1,"2108":1,"2109":1,"2110":1,"2111":2,"2112":2,"2113":2,"2114":2,"2115":2,"2116":1,"2118":1,"2119":1,"2120":1},"2":{"437":1,"547":1,"551":1,"747":1,"775":1,"1652":1,"1669":1,"1680":1,"1773":3,"1774":1,"1781":1,"1817":1,"1925":1}}],["라우터에",{"2":{"1358":1}}],["라우트는",{"2":{"1365":1,"1602":1,"1621":1,"2090":1,"2128":1}}],["라우트에",{"2":{"1362":1}}],["라우트에서",{"2":{"1091":1}}],["라우트가",{"2":{"1353":1,"1359":1,"1369":1,"1604":2,"1623":2,"2129":1}}],["라우트로",{"2":{"1350":1,"1617":1}}],["라우트",{"0":{"1346":1,"1348":1,"1352":1,"1355":1,"1364":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1601":1,"1602":1,"1603":1,"1620":1,"1621":1,"1622":1,"1700":1,"2091":1,"2128":1,"2130":1},"1":{"1347":1,"1348":1,"1349":1,"1356":1,"1357":1,"1358":1,"1359":1,"1360":1,"1361":1,"1362":1,"1363":1,"1365":1,"1366":1,"1367":1,"1368":2,"1369":2,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1602":1,"1603":1,"1604":1,"1621":1,"1622":1,"1623":1},"2":{"1353":1,"1354":2,"1356":2,"1357":1,"1359":1,"1361":3,"1363":1,"1375":1,"1619":1,"1768":2,"1895":2,"1896":1,"2043":1,"2091":1,"2130":1,"2186":3}}],["라우트를",{"0":{"2186":1},"2":{"1345":1,"1350":1,"1353":1,"1700":1}}],["라우팅을",{"2":{"1655":1,"2090":1,"2127":1}}],["라우팅",{"0":{"1344":1,"1604":1,"1623":1,"2090":1,"2126":1,"2129":1},"1":{"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1351":1,"1352":1,"1353":1,"1354":1,"2127":1,"2128":1,"2129":1,"2130":1},"2":{"1363":1,"1375":1,"1773":2,"1822":1,"1894":1,"2116":1}}],["라벨",{"2":{"1026":2,"1033":1}}],["형태",{"2":{"1062":1}}],["형태로",{"2":{"1031":1}}],["형태의",{"2":{"1022":1,"2073":1,"2103":1}}],["형식을",{"2":{"2226":1,"2319":1}}],["형식인지",{"2":{"2221":1,"2316":1}}],["형식이면",{"2":{"2221":1}}],["형식이",{"2":{"249":1,"494":1}}],["형식입니다",{"2":{"139":1}}],["형식으로도",{"2":{"867":1}}],["형식으로",{"2":{"74":1,"75":1,"135":1,"177":1,"238":1,"530":1,"866":1,"887":1,"2240":1,"2241":1,"2246":1,"2247":1,"2248":1}}],["형식의",{"2":{"36":1,"175":1,"186":1,"714":1,"2208":1,"2209":1,"2277":2}}],["형식",{"0":{"135":1,"139":1,"349":1,"350":1,"401":1,"530":1,"866":1,"867":1,"1884":1},"1":{"136":1,"137":1,"351":1,"352":1,"402":1,"403":1},"2":{"32":3,"33":1,"43":1,"45":1,"50":1,"68":1,"75":1,"98":1,"122":1,"175":1,"384":1,"393":2,"660":1,"672":1,"744":1,"1045":1,"1826":1,"1827":1,"1828":1,"1879":2,"1884":1,"1999":1,"2006":1,"2163":1,"2210":2}}],["컬렉션",{"2":{"985":3,"986":2}}],["컬럼을",{"2":{"191":1,"1031":1}}],["컬럼만",{"2":{"87":1,"200":1,"723":1}}],["컬럼에",{"2":{"81":1,"661":1}}],["컬럼의",{"2":{"70":1}}],["컬럼명",{"2":{"68":2,"70":1}}],["컬럼",{"0":{"1070":1},"2":{"68":1,"84":2,"1031":1,"1033":1,"1034":2,"1648":2,"1986":2,"1987":1,"2258":1,"2261":2}}],["컬럼이",{"2":{"32":1}}],["강제",{"2":{"964":1}}],["강화",{"2":{"432":1}}],["강화합니다",{"2":{"203":1}}],["건너뛸",{"2":{"950":1}}],["거래구분",{"2":{"1981":2}}],["거래처유형",{"2":{"1981":2}}],["거래처코드",{"2":{"1981":2}}],["거래처명",{"2":{"1981":2}}],["거칩니다",{"2":{"948":1}}],["거부되었습니다",{"2":{"829":1}}],["날짜에",{"2":{"2209":1,"2242":1,"2244":1,"2245":1,"2277":1}}],["날짜를",{"2":{"2208":1,"2240":1,"2241":1,"2248":1,"2249":1}}],["날짜",{"0":{"2113":1,"2136":1,"2206":1,"2224":1,"2236":1,"2250":1},"1":{"2207":1,"2208":1,"2209":1,"2210":1,"2237":1,"2238":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1,"2246":1,"2247":1,"2248":1,"2249":1,"2250":1,"2251":2,"2252":2,"2253":2,"2254":1},"2":{"923":1,"1038":2,"1040":1,"1637":1,"1659":1,"1707":1,"1766":3,"1783":1,"1820":1,"1841":3,"1871":1,"2006":3,"2033":1,"2113":1,"2136":1,"2207":3,"2208":4,"2209":1,"2210":3,"2221":2,"2226":1,"2227":1,"2237":1,"2239":1,"2243":1,"2277":2,"2285":1,"2316":1,"2319":1}}],["빌더",{"2":{"913":1}}],["빌드에서는",{"2":{"1195":1}}],["빌드된",{"2":{"557":1,"1484":1,"1506":1,"1512":1,"1741":1}}],["빌드가",{"0":{"2059":1},"2":{"497":1}}],["빌드하는",{"2":{"339":1}}],["빌드",{"0":{"295":1,"298":1,"299":1,"301":1,"339":1,"340":1,"460":1,"495":1,"497":1,"557":1,"1174":1,"1177":1,"1179":1,"1180":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1203":1,"1482":1,"1483":1,"1495":1,"1502":1,"1503":1,"1504":1,"1505":1,"1508":1,"1509":1,"1511":1,"1737":1,"1738":1,"1739":1,"1740":1,"1741":1,"1743":1,"1779":1,"1847":1,"2063":1,"2169":1,"2170":1,"2175":1,"2180":1},"1":{"296":1,"297":1,"299":1,"300":1,"301":1,"340":1,"341":1,"342":1,"496":1,"497":1,"1175":1,"1176":1,"1177":1,"1178":2,"1179":1,"1180":2,"1181":2,"1182":2,"1183":1,"1184":1,"1185":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1,"1509":1,"1510":1,"1511":1,"1512":1,"1738":1,"1739":1,"1740":1,"2170":1,"2171":2,"2172":2,"2173":2,"2174":2,"2175":1},"2":{"283":1,"433":1,"437":2,"452":1,"503":1,"544":1,"549":2,"563":1,"997":1,"1175":1,"1183":1,"1197":1,"1483":1,"1501":1,"1504":1,"1511":1,"1652":1,"1670":1,"1673":1,"1680":2,"1733":1,"1740":1,"1776":3,"1779":7,"1780":2,"1816":2,"1833":2,"1844":1,"1847":2,"1848":1,"1849":1,"1902":1,"2039":1,"2082":2,"2174":1,"2175":1,"2180":1}}],["역직렬화",{"2":{"904":1,"923":2}}],["역할을",{"2":{"436":1,"548":1,"772":1,"1774":1}}],["역할",{"0":{"378":1,"559":1},"1":{"379":1,"380":1,"381":1,"560":1,"561":1,"562":1,"563":1,"564":1},"2":{"600":1,"601":1,"602":1,"603":1,"604":1,"616":1,"617":1,"618":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"648":1,"649":1,"670":1,"671":1,"672":1,"673":1,"678":1,"680":1,"686":1,"687":1,"688":1,"704":1,"705":1,"728":1,"729":1}}],["삽입",{"2":{"886":1}}],["원",{"2":{"2225":1}}],["원래",{"0":{"1260":1},"2":{"1276":1,"1337":1}}],["원하는",{"2":{"872":1}}],["원본커서",{"2":{"71":1}}],["원본파일명",{"2":{"46":1,"652":1}}],["원본",{"0":{"656":1,"661":1,"1301":1},"2":{"45":1,"50":2,"661":1,"716":1,"801":1,"1301":1}}],["를",{"2":{"808":1,"1316":1,"1655":1,"1786":1,"2245":1}}],["바로",{"2":{"1591":1,"1707":1,"1766":1,"1879":1,"2079":1,"2200":1,"2222":1}}],["바이트",{"2":{"1217":1,"2233":1}}],["바이너리로",{"2":{"72":1}}],["바이너리",{"0":{"72":1},"2":{"46":3,"72":1,"75":1,"76":1,"119":1,"652":2,"664":1,"704":1,"1217":1,"2233":1}}],["바인딩",{"2":{"882":1}}],["바디로",{"2":{"801":1}}],["탐지",{"2":{"798":1,"963":1}}],["롤링",{"2":{"763":1}}],["업그레이드",{"2":{"1994":1}}],["업데이트할",{"2":{"1848":1}}],["업데이트됩니다",{"2":{"1045":1,"1493":1}}],["업데이트",{"2":{"729":1,"731":1}}],["업로드합니다",{"2":{"891":1,"1484":1}}],["업로드에",{"2":{"45":1}}],["업로드할",{"2":{"43":1}}],["업로드",{"0":{"43":1,"162":1,"248":1,"651":1,"663":1,"890":1,"1212":1,"1280":1,"1518":1,"1541":1,"1542":1,"1544":1},"1":{"44":1,"45":1,"163":1,"164":1,"891":1,"892":1,"1542":1,"1543":2,"1544":2,"1545":1,"1546":1,"1547":1,"1548":1},"2":{"40":1,"45":2,"161":1,"163":1,"429":1,"494":1,"541":1,"588":1,"645":1,"648":2,"649":2,"651":1,"663":1,"891":1,"1071":1,"1769":1}}],["는",{"2":{"713":1,"1173":1,"1679":1}}],["앱을",{"2":{"1656":1,"1861":1}}],["앱",{"2":{"699":1,"1861":1}}],["첨부",{"0":{"694":1},"2":{"688":1,"2023":1}}],["↓",{"2":{"676":4}}],["체제에서",{"2":{"1720":1}}],["체제",{"0":{"1720":1}}],["체인에",{"2":{"675":1}}],["체크할",{"2":{"2276":1}}],["체크",{"2":{"604":2,"1707":1,"1783":1,"2033":1,"2276":1}}],["체크리스트",{"0":{"396":1}}],["읽기",{"0":{"1633":1},"2":{"652":1,"671":1,"878":1,"1026":1,"1706":1,"2106":1,"2132":1}}],["읽어",{"2":{"70":1,"81":1}}],["우선순위",{"0":{"643":1},"2":{"670":1}}],["우클릭",{"2":{"501":1,"1067":1,"1763":1,"2014":1}}],["타임스탬프를",{"2":{"1300":1,"2246":1,"2247":1}}],["타임스탬프",{"0":{"1300":1},"2":{"1409":1}}],["타임아웃",{"0":{"1286":1,"1310":1,"1333":1,"1529":1,"2161":1},"2":{"634":2,"1270":1,"1529":1,"2161":2}}],["타입을",{"2":{"252":1,"253":1,"427":1,"898":1}}],["타입별",{"0":{"1307":1,"1524":1},"1":{"1308":1,"1309":1,"1310":1,"1311":1,"1312":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1},"2":{"94":1,"1759":1}}],["타입",{"0":{"48":1,"253":1,"653":1,"733":1,"736":1,"809":1,"897":1,"941":1,"1319":1,"1532":1,"1579":1,"2171":1},"1":{"654":1,"655":1,"656":1,"734":1,"735":1,"737":1,"810":1,"811":1,"898":1,"942":1,"943":1},"2":{"44":1,"45":1,"46":1,"93":2,"119":2,"123":1,"604":1,"639":1,"652":1,"813":1,"945":1,"964":1,"981":1,"1026":1,"1033":1,"1064":2,"1320":1,"1380":1,"1539":1,"1579":1,"1686":1,"1817":2,"2059":1,"2086":1,"2171":4,"2180":1,"2204":1,"2218":1}}],["타입인",{"2":{"32":1}}],["타입에",{"2":{"30":1,"259":1,"731":1,"838":1,"846":1,"1320":1,"1539":1}}],["타입이",{"2":{"15":1}}],["풀로",{"2":{"839":1}}],["풀",{"0":{"839":1},"1":{"840":1,"841":1},"2":{"634":2}}],["뷰어",{"2":{"611":1}}],["뷰",{"0":{"1940":1,"1960":1,"1976":1,"2115":1,"2138":1},"1":{"1941":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1,"1973":1,"1974":1,"1975":1,"1977":1,"1978":1,"1979":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"2":{"598":3,"1774":1,"1941":1,"1961":1,"1977":1}}],["참조하는",{"2":{"1848":1}}],["참조하면",{"2":{"1847":1}}],["참조합니다",{"2":{"1844":1}}],["참조됩니다",{"2":{"1836":1}}],["참조",{"0":{"767":1,"772":1,"1782":1,"1843":1,"2032":1,"2036":1},"1":{"768":1,"769":1,"770":1,"771":1,"773":1,"774":1,"775":1,"1783":1,"1784":1,"1785":1,"1844":1,"1845":1,"1846":1,"2033":1,"2034":1,"2035":1,"2037":1,"2038":1,"2039":1,"2040":1,"2041":1,"2042":1,"2043":1,"2044":1,"2045":1},"2":{"547":2,"771":1,"834":1,"1781":2}}],["참고하여",{"2":{"474":1,"1711":1,"1729":1}}],["참고하세요",{"2":{"397":1,"435":1,"456":1,"512":1,"1619":1,"1650":1,"1677":1,"1692":1,"1750":1,"1831":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"2033":1,"2034":1,"2035":1,"2116":1}}],["참고",{"0":{"398":1,"547":1,"1781":1},"2":{"542":3,"547":1,"994":1}}],["참고할",{"2":{"388":1,"1781":1}}],["준수",{"2":{"542":1}}],["준비",{"0":{"476":1},"1":{"477":1,"478":1},"2":{"883":1}}],["준비되었다면",{"2":{"474":1,"512":1}}],["잡기",{"2":{"542":1}}],["흐름",{"0":{"542":1,"1228":1,"1767":1},"1":{"1229":1,"1230":1,"1231":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1}}],["때",{"0":{"542":1,"1767":1},"1":{"1768":1,"1769":1,"1770":1,"1771":1,"1772":1},"2":{"1358":1,"2330":1}}],["때는",{"2":{"365":1,"393":1,"455":1,"1264":1,"1848":1,"1922":1}}],["만듭니다",{"2":{"2293":1}}],["만들어보세요",{"2":{"1786":1}}],["만들기",{"0":{"1698":1},"1":{"1699":1,"1700":1,"1701":1},"2":{"1755":1,"1770":1,"1771":1}}],["만들",{"0":{"542":1,"1767":1},"1":{"1768":1,"1769":1,"1770":1,"1771":1,"1772":1},"2":{"1538":1}}],["만료된",{"2":{"1262":1}}],["만료되었을",{"2":{"2057":1,"2181":1}}],["만료되었습니다",{"2":{"1262":1,"1276":1,"1337":1}}],["만료되었거나",{"2":{"9":1}}],["만료되면",{"2":{"17":1,"1231":1,"1255":1,"1390":1}}],["만료",{"0":{"113":1,"2165":1,"2166":1},"2":{"17":1,"105":1,"225":1,"1226":1,"1227":1,"1236":2,"1390":1,"1760":1}}],["알",{"2":{"1533":1}}],["알림",{"0":{"1317":1},"2":{"1309":1,"1310":1}}],["알아야",{"2":{"540":1,"1757":1}}],["알고리즘입니다",{"2":{"205":1,"206":1,"785":1,"788":1,"955":1,"956":1}}],["빠른",{"0":{"540":1,"1693":1,"1757":1,"1782":1},"1":{"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1706":1,"1707":1,"1708":1,"1709":1,"1710":1,"1711":1,"1758":1,"1759":1,"1760":1,"1783":1,"1784":1,"1785":1},"2":{"1680":1,"1693":1,"1750":1,"1755":1,"1786":1,"2019":1,"2082":1}}],["빠르게",{"2":{"538":1,"543":1,"1752":1}}],["빠르고",{"2":{"425":1}}],["핵심",{"0":{"540":1,"1683":1,"1757":1},"1":{"1758":1,"1759":1,"1760":1},"2":{"540":1,"598":1,"604":1,"631":1,"1663":1,"1669":1,"1688":1,"1757":1,"1773":1,"1817":1,"1857":1,"1858":1,"1864":1,"1926":1,"1928":1,"1933":1,"2034":1}}],["띄우기",{"2":{"539":1}}],["그대로",{"2":{"1670":1,"1816":1,"1833":2,"1847":1}}],["그리드데이터",{"2":{"2260":1,"2261":1}}],["그리드를",{"2":{"2118":1}}],["그리드",{"0":{"1058":1,"1065":1,"1074":1,"1648":1,"1763":1,"1974":1,"1990":1,"2012":1,"2117":1},"1":{"1059":1,"1060":1,"1061":1,"1062":1,"1063":1,"1064":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1075":1,"1076":1,"1077":1,"2013":1,"2014":1,"2015":1,"2118":1,"2119":1,"2120":1},"2":{"1063":1,"1437":1,"1439":1,"1587":1,"1667":1,"1685":1,"1763":2,"1773":2,"1817":1,"1986":1,"1987":1,"1994":1,"2013":2,"2014":1,"2015":1,"2031":1,"2098":1}}],["그림",{"0":{"1754":1},"2":{"539":1}}],["그룹구분",{"2":{"1981":2}}],["그룹을",{"2":{"870":1}}],["그룹",{"0":{"870":1},"2":{"1978":3,"1982":3,"1984":3,"1987":1}}],["그룹화",{"2":{"861":1,"1563":1,"1880":1}}],["그룹별",{"0":{"140":1},"1":{"141":1,"142":1,"143":1}}],["그룹으로",{"2":{"130":1}}],["온",{"0":{"539":1,"1753":1},"1":{"1754":1,"1755":1,"1756":1}}],["처음",{"0":{"539":1,"1753":1},"1":{"1754":1,"1755":1,"1756":1},"2":{"1693":1}}],["처리된",{"2":{"2276":1}}],["처리됩니다",{"2":{"1390":1,"1522":1,"2001":1}}],["처리가",{"2":{"1289":1,"1303":1,"1314":1,"1522":1,"1525":1,"1759":1}}],["처리되어",{"2":{"2272":1,"2274":1,"2280":1}}],["처리되지만",{"2":{"1289":1}}],["처리되므로",{"2":{"1289":1,"1525":1}}],["처리할",{"2":{"1289":2,"2214":1}}],["처리를",{"2":{"1129":1,"1320":1,"1539":1}}],["처리됨",{"0":{"2275":1},"1":{"2276":1,"2277":1,"2278":1,"2279":1},"2":{"105":1,"1785":1}}],["처리하세요",{"2":{"2333":1}}],["처리하려면",{"2":{"1338":1,"1527":1}}],["처리하고",{"2":{"103":1,"105":1}}],["처리하는",{"2":{"6":1,"40":1,"385":1,"667":1,"1521":1}}],["처리합니다",{"2":{"43":1,"588":1,"795":1,"803":1,"808":1,"820":1,"1267":1,"1306":1,"1568":1,"1614":1,"1655":1,"2066":1}}],["처리",{"0":{"14":1,"47":1,"161":1,"354":1,"394":1,"650":1,"828":1,"875":1,"1261":1,"1262":1,"1279":1,"1285":1,"1299":1,"1302":1,"1305":1,"1307":1,"1311":1,"1314":1,"1324":1,"1326":1,"1328":1,"1331":1,"1332":1,"1333":1,"1334":1,"1336":1,"1338":1,"1341":1,"1387":1,"1388":1,"1516":1,"1520":1,"1522":1,"1524":1,"1531":1,"1538":1,"1549":1,"1550":1,"1553":1,"1556":1,"1567":1,"1568":1,"1593":1,"1614":1,"1847":1,"2104":1,"2111":1,"2112":1,"2113":1,"2132":1,"2134":1,"2135":1,"2136":1,"2189":1,"2211":1,"2213":1,"2215":1,"2217":1,"2224":1,"2236":1,"2255":1,"2264":1,"2286":1,"2295":1,"2300":1},"1":{"15":1,"48":1,"49":1,"50":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"355":1,"356":1,"357":1,"358":1,"359":1,"651":1,"652":1,"829":1,"830":1,"876":1,"877":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":1,"892":1,"893":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"1286":1,"1287":1,"1288":1,"1306":1,"1307":1,"1308":2,"1309":2,"1310":2,"1311":2,"1312":2,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1325":1,"1326":1,"1327":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1521":1,"1522":1,"1523":1,"1524":1,"1525":2,"1526":2,"1527":2,"1528":2,"1529":2,"1530":2,"1531":1,"1532":2,"1533":2,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"1550":1,"1551":2,"1552":2,"1553":1,"1554":2,"1555":2,"1556":1,"2105":1,"2106":1,"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2212":1,"2214":1,"2216":1,"2218":1,"2237":1,"2238":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1,"2246":1,"2247":1,"2248":1,"2249":1,"2250":1,"2251":1,"2252":1,"2253":1,"2254":1,"2256":1,"2257":1,"2258":1,"2259":1,"2260":1,"2261":1,"2262":1,"2263":1,"2265":1,"2266":1,"2267":1,"2268":1,"2269":1,"2270":1,"2287":1,"2288":1,"2289":1,"2290":1,"2291":1,"2292":1,"2293":1,"2294":1,"2295":1,"2296":2,"2297":2,"2298":2,"2299":1,"2301":1,"2302":1,"2303":1,"2304":1,"2305":1,"2306":1,"2307":1,"2308":1,"2309":1,"2310":1,"2311":1},"2":{"38":1,"45":1,"57":1,"71":1,"94":1,"105":2,"138":1,"160":1,"201":1,"211":1,"217":1,"236":1,"294":1,"353":1,"363":1,"379":1,"380":1,"392":1,"394":1,"398":1,"423":1,"538":1,"541":1,"542":1,"543":1,"577":1,"600":2,"604":1,"617":1,"629":1,"636":1,"639":1,"648":1,"649":5,"651":1,"652":1,"665":1,"666":1,"670":1,"671":1,"672":2,"673":1,"699":3,"724":1,"728":1,"731":2,"732":1,"874":1,"875":1,"878":2,"899":1,"917":1,"923":1,"927":1,"929":1,"977":1,"1036":1,"1062":1,"1211":1,"1264":1,"1267":1,"1272":1,"1273":1,"1275":3,"1276":1,"1279":1,"1289":1,"1290":1,"1298":2,"1303":2,"1304":1,"1308":1,"1309":1,"1310":1,"1311":1,"1312":1,"1314":4,"1337":1,"1343":1,"1361":1,"1435":2,"1516":2,"1523":3,"1526":1,"1527":1,"1528":1,"1529":1,"1538":2,"1540":2,"1556":2,"1568":1,"1614":1,"1618":1,"1657":1,"1659":1,"1685":1,"1707":1,"1759":6,"1764":1,"1766":6,"1769":5,"1783":1,"1785":2,"1820":1,"1862":2,"1871":5,"1951":1,"2013":1,"2033":1,"2068":2,"2095":2,"2190":1,"2227":4,"2237":1,"2256":1,"2263":1,"2265":1,"2270":1,"2285":3,"2287":1,"2301":1,"2333":2}}],["돕는",{"2":{"538":1,"1752":1}}],["충돌",{"0":{"509":1,"999":1,"1747":1,"2177":1}}],["접히거나",{"2":{"1467":1}}],["접기",{"2":{"1456":1,"1458":1,"1461":1,"1463":2,"1917":2,"2017":1}}],["접두사",{"2":{"1173":1,"1571":1,"1572":2}}],["접두사가",{"2":{"1169":1}}],["접속하면",{"2":{"1736":1}}],["접속하여",{"2":{"506":1,"1617":1}}],["접속합니다",{"2":{"1492":1,"1696":1}}],["접속",{"0":{"1492":1},"2":{"872":1}}],["접근할",{"2":{"857":1}}],["접근이",{"2":{"829":1}}],["접근",{"0":{"422":1,"857":1,"1352":1},"2":{"17":1,"71":1,"144":1,"372":1,"381":1,"397":1,"921":1,"981":1,"1169":1,"1385":1,"1536":1,"1633":1,"2019":1,"2025":2}}],["버튼이",{"2":{"1699":1}}],["버튼",{"0":{"1003":1,"1007":1,"1430":1,"1435":1,"1996":1},"1":{"1004":1,"1005":1,"1006":1,"1007":1,"1431":1,"1432":1,"1433":1,"1434":1,"1435":1,"1997":1},"2":{"500":1,"873":1,"1062":1,"1088":1,"1431":2,"1433":3,"1434":3,"1638":1,"1667":1,"1762":2,"1899":1,"1997":1,"2141":1}}],["버전으로",{"2":{"1728":1}}],["버전을",{"2":{"1728":1,"1732":2,"1848":1,"2059":1}}],["버전",{"0":{"287":1,"855":1,"877":1,"881":1,"885":1,"902":1,"908":1,"912":1,"916":1,"920":1,"931":1,"935":1,"940":1,"968":1,"972":1,"976":1,"980":1,"984":1,"1681":1,"1728":1,"1732":1,"2076":1,"2081":1,"2085":1,"2089":1,"2093":1,"2097":1},"2":{"459":2,"460":1,"462":1,"463":1,"464":1,"465":1,"469":1,"1681":3,"1714":2,"1715":1,"1716":1,"1719":4,"2071":1,"2072":1,"2101":1,"2102":1,"2105":1,"2108":1,"2180":1}}],["옆의",{"2":{"500":1,"1121":1}}],["루트의",{"2":{"1732":1}}],["루트에",{"2":{"1695":1,"1726":1,"1734":1,"1749":1,"1833":1,"1844":1,"2179":1}}],["루트로",{"2":{"561":1}}],["루트",{"0":{"549":1,"1816":1},"2":{"496":1,"1652":1,"1655":1,"1733":1,"1817":1,"1858":1,"1860":1}}],["열린",{"2":{"1915":1}}],["열",{"2":{"1070":2}}],["열려있는지",{"2":{"511":1}}],["열어",{"2":{"481":1}}],["열기",{"0":{"1099":1},"2":{"71":1,"72":1,"76":1,"500":2,"1118":1,"1915":1}}],["9",{"0":{"1707":1},"2":{"460":1,"980":1,"1685":1,"1715":1,"2066":1,"2093":1,"2210":1,"2243":1}}],["9629",{"2":{"255":1,"472":1,"482":1,"834":1}}],["출력됩니다",{"2":{"505":1}}],["출력",{"2":{"459":1,"460":1,"2278":1}}],["↑",{"2":{"454":1}}],["간단하고",{"2":{"2086":1}}],["간단한",{"2":{"1080":1}}],["간결하고",{"2":{"2077":1}}],["간",{"0":{"454":1},"2":{"454":1}}],["범위",{"2":{"451":1,"1038":1,"2006":1}}],["네비게이션",{"2":{"2017":1}}],["네트워크",{"0":{"472":1,"1530":1,"1724":1},"1":{"1725":1,"1726":1},"2":{"1318":1,"1490":1,"1530":2,"1534":1,"1536":1,"1725":1,"2187":1,"2188":1}}],["네이밍",{"0":{"447":1,"449":1,"565":1,"1569":1,"1582":1,"1612":1},"1":{"448":1,"449":1,"1570":1,"1571":1,"1572":1,"1573":1,"1574":1},"2":{"1777":1}}],["네임스페이스는",{"2":{"386":1}}],["호스트",{"2":{"510":1,"1490":1}}],["호환성",{"2":{"834":1}}],["호환",{"0":{"465":1,"848":1},"1":{"849":1,"850":1,"851":1},"2":{"433":1}}],["호출은",{"2":{"1759":1}}],["호출에",{"2":{"1539":1}}],["호출됩니다",{"2":{"1383":1,"1407":1,"1904":1}}],["호출할",{"2":{"846":1,"1033":1,"1400":1}}],["호출로",{"2":{"707":1}}],["호출을",{"2":{"317":1}}],["호출하기",{"0":{"1702":1}}],["호출하여",{"2":{"178":1}}],["호출하는",{"2":{"27":1,"1517":1,"1702":1}}],["호출합니다",{"2":{"33":1,"1514":1,"1957":1}}],["호출",{"0":{"22":1,"27":1,"33":1,"107":1,"112":1,"309":1,"334":1,"418":1,"593":1,"732":1,"845":1,"846":1,"847":1,"1513":1,"1517":1,"1552":1,"1634":1,"1785":1,"1957":1,"2035":1,"2057":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"310":1,"311":1,"335":1,"336":1,"337":1,"846":1,"847":1,"1514":1,"1515":1,"1516":1,"1517":1,"1518":1,"1519":1},"2":{"22":1,"25":1,"30":1,"103":1,"107":1,"114":1,"141":1,"315":1,"327":1,"380":2,"385":1,"390":1,"417":1,"540":1,"573":1,"598":1,"601":4,"616":1,"617":2,"626":1,"629":2,"649":1,"729":1,"731":1,"769":1,"873":1,"909":1,"1272":1,"1275":1,"1399":1,"1402":1,"1521":1,"1540":1,"1615":2,"1706":1,"1756":1,"1758":1,"1769":2,"1905":1,"1912":1,"1918":1,"1920":1,"1946":1,"1949":1,"1959":1,"1969":1,"1975":1,"1981":1,"1991":1,"2024":1,"2025":1,"2167":1}}],["용량",{"2":{"1252":1,"2333":2}}],["용이",{"2":{"432":1}}],["용도",{"0":{"787":1,"849":1},"2":{"11":1,"12":1,"13":1,"205":1,"465":1,"761":1,"810":1,"811":1,"942":1,"943":1,"1226":1,"1227":1}}],["생년월일",{"2":{"2319":1}}],["생산성",{"2":{"432":1}}],["생성이",{"2":{"1619":1}}],["생성되고",{"2":{"1727":1}}],["생성되었는지",{"2":{"1483":1,"2055":1}}],["생성되는",{"0":{"261":1},"2":{"564":1}}],["생성됨",{"2":{"560":1,"564":1,"1652":2,"1816":2}}],["생성됩니다",{"2":{"497":1,"507":1,"859":1,"1183":1,"1504":1,"1511":1,"1579":1,"1604":1,"1623":1,"1740":1}}],["생성부터",{"2":{"365":1}}],["생성할",{"2":{"175":1,"1548":1,"1922":1}}],["생성합니다",{"2":{"73":1,"74":1,"259":1,"368":1,"590":1,"838":1,"853":1,"1350":1,"1587":1,"1598":1,"1599":1,"1628":1,"1699":1,"2251":1,"2252":1,"2253":1}}],["생성된",{"0":{"76":1},"2":{"65":1,"71":1,"87":1,"200":1,"300":1,"341":1,"557":1,"704":1,"723":1}}],["생성하고",{"2":{"1267":1,"1656":1,"1657":1,"1695":1,"1734":1,"1861":1,"1862":1,"2067":1,"2094":1}}],["생성하세요",{"2":{"243":1,"946":1}}],["생성하여",{"2":{"65":1,"72":1,"75":1,"492":1}}],["생성하는",{"2":{"62":1,"174":1,"383":1,"420":1,"701":1}}],["생성한",{"2":{"22":1}}],["생성",{"0":{"62":1,"65":1,"72":1,"73":1,"74":1,"174":1,"176":1,"180":1,"182":1,"199":1,"224":1,"260":1,"300":1,"341":1,"368":1,"373":1,"383":1,"405":1,"406":1,"409":1,"590":1,"701":1,"706":1,"709":1,"721":1,"812":1,"858":1,"888":1,"944":1,"1586":1,"1595":1,"1597":1,"1599":1,"1627":1,"1699":1,"1768":1,"1922":1,"2250":1},"1":{"63":1,"64":1,"65":1,"66":2,"67":2,"68":2,"69":2,"70":2,"71":2,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"175":1,"176":1,"177":2,"178":2,"179":2,"180":2,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"374":1,"406":1,"407":1,"408":1,"409":1,"410":1,"702":1,"703":1,"704":1,"705":1,"706":1,"707":2,"708":2,"709":2,"710":2,"711":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"1587":1,"1588":1,"1589":1,"1596":1,"1597":1,"1598":2,"1599":2,"1600":2,"1601":1,"1602":1,"1603":1,"1604":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":1,"1616":1,"1617":1,"1618":1,"1619":1,"1628":1,"1629":1,"1630":1,"2251":1,"2252":1,"2253":1},"2":{"9":1,"16":1,"32":1,"45":1,"52":1,"56":1,"59":1,"71":1,"103":1,"104":1,"141":1,"151":1,"167":1,"168":1,"199":1,"201":1,"205":1,"214":4,"294":2,"383":1,"396":1,"397":2,"429":2,"439":1,"538":1,"541":2,"542":2,"549":1,"554":1,"568":1,"576":1,"600":5,"603":3,"608":1,"609":1,"634":1,"649":1,"651":1,"663":1,"700":1,"702":2,"704":6,"705":1,"724":1,"732":1,"787":1,"812":2,"856":1,"879":1,"882":1,"883":1,"886":3,"888":1,"896":1,"899":1,"913":3,"921":1,"944":2,"955":1,"1184":1,"1548":1,"1599":1,"1766":1,"1768":2,"1770":1,"1771":1,"1861":1,"1879":1,"1893":1,"1896":2,"1898":2,"1902":1,"1905":1,"2262":1}}],["목적으로",{"2":{"432":1,"1686":1}}],["목적",{"0":{"432":1,"1686":1,"1854":1,"2073":1,"2098":1,"2103":1,"2106":1,"2109":1}}],["목록에",{"2":{"493":1}}],["목록을",{"2":{"120":1,"421":1,"859":1,"862":1,"1124":1,"1154":1,"1408":1,"1419":1}}],["목록",{"0":{"8":1,"21":1,"29":1,"42":1,"55":1,"64":1,"91":1,"102":1,"118":1,"120":1,"1122":1},"1":{"9":1,"22":1,"30":1,"31":1,"32":1,"33":1,"34":1,"43":1,"44":1,"45":1,"46":1,"56":1,"57":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"92":1,"93":1,"94":1,"103":1,"104":1,"105":1,"106":1,"107":1,"119":1,"120":1,"121":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1},"2":{"31":1,"44":1,"45":1,"56":1,"57":1,"103":1,"120":1,"421":1,"651":1,"663":1,"859":1,"862":1,"1090":1,"1104":1,"1126":2,"1127":1,"1133":1,"1150":1,"1156":1,"1347":1,"1404":1,"1410":1,"1415":2,"1473":1,"1475":1,"1609":1,"1913":3,"1916":1,"1918":1,"1951":1,"1978":5,"1981":2,"1982":2,"1983":1,"1986":1,"1987":1,"2022":2,"2023":1,"2026":2}}],["캐싱될",{"2":{"1848":1}}],["캐싱",{"0":{"430":1},"2":{"538":1,"1848":1}}],["캐시용",{"0":{"270":1,"273":1},"2":{"580":2,"635":1,"851":1}}],["캐시",{"2":{"266":1,"430":1,"433":1,"465":1,"849":1,"964":1,"1848":1,"2178":1}}],["쉽게",{"2":{"427":1,"1686":1}}],["오늘",{"2":{"2248":1,"2249":1}}],["오래",{"2":{"1221":1,"2175":1}}],["오버레이",{"2":{"1762":1}}],["오버라이드할",{"2":{"1638":1}}],["오버라이드",{"0":{"1638":1},"2":{"1638":1,"1840":1}}],["오버",{"2":{"1111":1}}],["오픈소스",{"2":{"427":1,"836":1}}],["오류를",{"2":{"2059":1}}],["오류나",{"2":{"2059":1}}],["오류는",{"2":{"1320":1,"1539":1}}],["오류의",{"2":{"1318":1,"1534":1}}],["오류가",{"2":{"1312":1,"1334":1,"1528":1,"1533":1,"1536":2,"1609":1,"1614":1,"1748":1}}],["오류",{"0":{"1528":1,"1530":1,"1748":1,"2160":1,"2163":1,"2169":1,"2170":1,"2171":1,"2172":1,"2173":1,"2174":1,"2178":1,"2180":1,"2182":1,"2183":1},"1":{"2170":1,"2171":2,"2172":2,"2173":2,"2174":2,"2175":1,"2183":1,"2184":2,"2185":2,"2186":2,"2187":2,"2188":1},"2":{"22":1,"30":1,"138":1,"400":1,"529":1,"864":1,"1276":1,"1314":1,"1526":1,"1528":2,"1530":1,"1780":4,"2160":1,"2171":2,"2172":1,"2180":2,"2187":1}}],["엔터프라이즈급",{"2":{"1679":1}}],["엔터프라이즈",{"2":{"425":1,"538":1}}],["엔드포인트",{"0":{"150":1,"622":1,"815":1},"1":{"623":1},"2":{"9":1,"22":1,"30":1,"31":1,"32":1,"33":1,"34":1,"43":1,"46":1,"56":1,"57":1,"65":1,"72":1,"73":1,"74":1,"75":1,"76":1,"92":1,"103":1,"104":1,"105":1,"106":1,"107":1,"119":1,"120":1,"121":1,"367":1,"372":1,"379":1,"397":1,"542":1,"616":1,"648":2,"686":2,"704":2,"728":2}}],["자릿수로",{"2":{"2308":1}}],["자릿수",{"2":{"2212":1}}],["자격증",{"2":{"1946":1}}],["자가",{"2":{"1941":1}}],["자세한",{"2":{"1650":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"2033":1,"2034":1,"2035":1}}],["자연어",{"2":{"977":1}}],["자주",{"0":{"1783":1,"1784":1,"2054":1},"1":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"546":1,"998":1,"1761":1,"1780":1,"1781":1,"2019":1}}],["자료입니다",{"2":{"1781":1}}],["자료를",{"2":{"547":1}}],["자료",{"0":{"398":1,"547":1,"1781":1},"2":{"994":1}}],["자동등록유무",{"2":{"1981":2}}],["자동화",{"2":{"856":1,"921":1}}],["자동으로",{"2":{"9":1,"17":1,"32":1,"38":2,"78":1,"103":1,"154":1,"185":1,"211":1,"259":1,"264":1,"331":1,"420":1,"670":1,"713":1,"838":1,"844":1,"853":1,"859":1,"898":1,"964":1,"1045":1,"1091":1,"1213":1,"1230":1,"1231":1,"1251":1,"1255":1,"1256":1,"1267":1,"1275":1,"1282":1,"1289":3,"1303":1,"1308":1,"1390":2,"1400":1,"1402":1,"1407":1,"1466":1,"1491":1,"1493":1,"1496":1,"1497":1,"1522":1,"1525":2,"1544":1,"1576":1,"1577":1,"1589":1,"1604":1,"1623":1,"1707":1,"1747":1,"1759":1,"1766":1,"1785":1,"1836":1,"1873":1,"1893":1,"2001":1,"2057":1,"2079":1,"2162":1,"2165":1,"2200":1,"2222":1,"2234":1,"2332":1}}],["자동",{"0":{"858":1,"1204":1,"1256":1,"1576":1,"1589":1,"1591":1,"1873":1,"2055":1,"2079":1,"2222":1,"2234":1},"1":{"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"1205":1,"1206":1},"2":{"9":1,"17":1,"46":1,"65":1,"87":2,"105":1,"111":1,"113":1,"119":1,"134":1,"200":2,"211":1,"225":1,"357":1,"394":1,"542":1,"549":1,"557":1,"560":1,"665":1,"723":2,"816":1,"856":1,"913":3,"921":1,"973":1,"1199":2,"1211":1,"1227":1,"1229":1,"1458":1,"1468":1,"1579":1,"1591":1,"1680":2,"1686":1,"1715":1,"1728":1,"1744":1,"1760":2,"1770":1,"1817":1,"1862":1,"1999":1,"2068":2,"2083":2,"2095":2,"2168":1,"2184":1}}],["따옴표",{"2":{"1565":1}}],["따릅니다",{"2":{"393":1,"448":1,"455":1,"513":1,"1922":1}}],["따라야",{"2":{"365":1}}],["따라",{"2":{"259":1,"368":1,"560":1,"731":1,"838":1,"1044":1,"1272":1,"1273":1,"1282":1,"1320":1,"1539":1,"2234":1}}],["활동",{"2":{"1946":1}}],["활용하여",{"2":{"2175":1}}],["활용하세요",{"2":{"1786":1}}],["활용한",{"2":{"1680":1}}],["활용할",{"2":{"389":1}}],["활용",{"0":{"389":1},"1":{"390":1,"391":1,"392":1},"2":{"1770":1,"1771":1}}],["활성화되어",{"2":{"2280":1}}],["활성화됨",{"2":{"1490":1}}],["활성화합니다",{"2":{"1397":1}}],["활성화된",{"0":{"2280":1},"2":{"1289":1,"1544":1,"2283":1}}],["활성화",{"0":{"1219":1,"2282":1},"2":{"225":1,"671":1,"740":1,"1209":2,"1219":1,"1250":1,"1283":2}}],["활성",{"2":{"56":1,"1916":2}}],["쿼리",{"2":{"385":1,"1024":1}}],["절차를",{"2":{"1596":1}}],["절차",{"0":{"383":1,"405":1,"1481":1,"1595":1},"1":{"406":1,"407":1,"408":1,"409":1,"410":1,"1482":1,"1483":1,"1484":1,"1485":1,"1486":1,"1487":1,"1596":1,"1597":1,"1598":1,"1599":1,"1600":1,"1601":1,"1602":1,"1603":1,"1604":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":1,"1616":1,"1617":1,"1618":1,"1619":1},"2":{"383":1,"397":1,"542":1,"1768":1,"1779":1}}],["절대",{"0":{"1844":1},"2":{"87":1,"200":1,"723":1,"1162":1,"1830":1,"1844":1}}],["│",{"2":{"368":5,"388":18,"406":3,"434":3,"437":29,"439":22,"440":10,"444":4,"455":3,"478":6,"516":29,"523":18,"549":2,"551":14,"552":1,"554":27,"555":10,"556":6,"558":2,"598":36,"614":2,"646":1,"649":5,"668":4,"684":2,"702":2,"711":2,"726":2,"752":4,"756":3,"1089":11,"1560":3,"1561":1,"1652":11,"1817":83,"1834":3,"1853":4,"1858":9,"1891":10,"1934":3,"1942":5,"1962":4,"1994":74}}],["컨텐츠",{"2":{"1970":1,"2029":1}}],["컨벤션",{"0":{"1777":1}}],["컨트롤러에",{"2":{"859":1,"963":1}}],["컨트롤러에서",{"0":{"626":1}}],["컨트롤러의",{"2":{"572":1,"600":1,"768":1}}],["컨트롤러를",{"2":{"384":1,"399":1}}],["컨트롤러",{"0":{"384":1,"399":1,"528":1,"768":1,"859":1},"1":{"400":1,"401":1,"402":1,"403":1,"404":1,"529":1,"530":1},"2":{"368":1,"372":1,"377":1,"384":1,"397":1,"410":1,"439":1,"448":1,"514":1,"536":1,"539":1,"542":1,"554":1,"570":1,"572":1,"588":1,"589":1,"590":1,"591":1,"598":6,"614":1,"646":1,"684":1,"702":1,"726":1,"861":1}}],["컨텍스트에서",{"2":{"1064":1}}],["컨텍스트에",{"2":{"1063":1}}],["컨텍스트",{"0":{"242":1,"1065":1,"1070":1,"1071":1,"1073":1,"1436":1},"1":{"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1437":1,"1438":1,"1439":1,"1440":1},"2":{"1067":1,"1073":1,"1437":1,"1439":1,"1440":2,"1763":1,"2014":1,"2099":1,"2119":1}}],["도달하지",{"2":{"1530":1}}],["도구의",{"2":{"1673":1,"2188":1}}],["도구",{"0":{"460":1,"469":1,"1717":1},"1":{"1718":1,"1719":1},"2":{"433":1,"1680":1,"1776":1,"2039":1}}],["도구로",{"2":{"283":1,"1197":1}}],["도메인의",{"2":{"1758":1,"1821":1,"1908":1}}],["도메인별로",{"2":{"565":1}}],["도메인별",{"2":{"565":1}}],["도메인을",{"2":{"493":1}}],["도메인",{"2":{"367":1,"368":5,"374":2,"377":1,"448":1,"514":1,"542":1}}],["결정됨",{"2":{"1466":1}}],["결정해야",{"2":{"367":1}}],["결재",{"2":{"1435":1,"2021":2,"2022":2}}],["결과물을",{"2":{"1512":1,"1741":1}}],["결과물은",{"2":{"1183":1,"1504":1,"1511":1,"1740":1}}],["결과물이",{"2":{"563":1,"1483":1}}],["결과물",{"0":{"557":1,"1183":1,"1483":1,"1504":1,"1511":1},"2":{"437":1,"549":1,"1652":1,"1816":1}}],["결과들",{"2":{"33":1}}],["결과",{"0":{"32":1,"35":1,"36":1},"1":{"36":1,"37":1},"2":{"30":1,"33":1,"38":1,"57":1,"71":1,"94":1,"105":1,"107":1,"632":1,"639":2,"729":1,"731":1,"1707":1}}],["결과를",{"2":{"30":1,"32":1,"94":1,"1024":1}}],["과정을",{"2":{"365":1}}],["패키징",{"2":{"452":1}}],["패키지가",{"2":{"1727":1}}],["패키지는",{"2":{"567":1}}],["패키지에",{"2":{"565":1}}],["패키지명은",{"2":{"565":1}}],["패키지명",{"2":{"449":1}}],["패키지",{"0":{"368":1,"376":1,"406":1,"447":1,"448":1,"514":1,"565":1},"1":{"377":1,"378":1,"379":1,"380":1,"381":1,"448":1,"449":1},"2":{"365":1,"368":1,"386":1,"396":1,"431":1,"513":1,"542":1,"560":1,"565":1,"1652":1,"1725":1,"1733":1,"1816":1,"2172":1}}],["패턴으로",{"2":{"432":1,"1957":1}}],["패턴을",{"2":{"365":1,"1752":1,"1922":1}}],["패턴만",{"2":{"60":1}}],["패턴",{"0":{"347":1,"1756":1,"1785":1,"1919":1,"1956":1,"1957":1,"1972":1,"1988":1},"1":{"1920":1,"1921":1,"1957":1,"1958":1,"1973":1,"1974":1,"1989":1,"1990":1},"2":{"60":1,"221":1,"538":1,"539":1,"680":1,"798":1,"913":1,"963":1,"1969":1,"1981":1}}],["패턴의",{"2":{"56":1,"57":1,"119":1}}],["표현",{"2":{"1563":1}}],["표현할",{"2":{"1159":1}}],["표준화해서",{"2":{"1752":1}}],["표준화된",{"2":{"365":1,"431":1,"432":1,"513":1,"538":1}}],["표준",{"0":{"376":1,"448":1,"514":1},"1":{"377":1,"378":1,"379":1,"380":1,"381":1},"2":{"368":1,"542":1,"836":1}}],["표시된",{"2":{"1747":1}}],["표시되므로",{"2":{"1289":1}}],["표시되는지",{"2":{"1617":1}}],["표시되는",{"2":{"765":1,"1067":1,"1109":1,"1116":1,"1836":1}}],["표시됩니다",{"2":{"1288":1}}],["표시합니다",{"2":{"1264":1,"1316":1,"1536":1,"1974":1,"1990":1}}],["표시하기",{"2":{"2073":1,"2098":1,"2103":1}}],["표시하세요",{"2":{"1320":1,"1539":1}}],["표시하고",{"2":{"1154":1}}],["표시하며",{"2":{"1031":1}}],["표시하는",{"2":{"1031":1,"1102":1,"1124":1,"1142":1,"1144":1,"1148":1}}],["표시하려면",{"2":{"200":1}}],["표시할",{"2":{"1026":1,"1033":1,"1289":1}}],["표시",{"0":{"1294":1,"1315":1,"1330":1},"1":{"1316":1,"1317":1},"2":{"31":1,"119":1,"1082":1,"1090":1,"1104":1,"1111":4,"1118":2,"1150":2,"1272":1,"1273":1,"1309":1,"1310":1,"1311":2,"1312":2,"1338":1,"1404":1,"1406":1,"1410":1,"1433":1,"1439":1,"1440":1,"1456":2,"1458":2,"1460":3,"1466":1,"1468":1,"1526":1,"1527":1,"1784":1,"1912":1,"1917":2,"1918":2,"1981":1,"2001":2,"2009":1,"2010":1,"2014":1,"2017":1,"2018":1,"2023":1,"2024":1,"2115":1,"2138":1}}],["문법을",{"2":{"2077":1}}],["문이",{"2":{"1873":1,"2222":1}}],["문",{"2":{"1613":1,"1766":1,"2079":1,"2200":1,"2222":1}}],["문의하세요",{"2":{"1528":1}}],["문제와",{"2":{"546":1,"998":1,"1780":1}}],["문제",{"0":{"508":1,"546":1,"998":1,"1746":1,"2159":1,"2164":1,"2176":1},"1":{"509":1,"510":1,"511":1,"999":1,"1000":1,"1001":1,"1002":1,"1747":1,"1748":1,"1749":1,"2160":1,"2161":1,"2162":1,"2163":1,"2165":1,"2166":1,"2167":1,"2168":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1},"2":{"546":1,"999":1,"1000":1,"1001":1,"1780":6,"2160":1,"2161":1,"2162":1,"2163":1,"2165":1,"2166":1,"2167":1,"2168":1,"2171":1,"2172":1,"2173":1,"2174":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2184":1,"2185":1,"2186":1,"2187":1}}],["문서들을",{"2":{"1711":1}}],["문서가",{"2":{"859":1}}],["문서",{"0":{"776":1,"858":1,"868":1,"1046":1,"1222":1,"1237":1,"1253":1,"1265":1,"1290":1,"1304":1,"1321":1,"1343":1,"1354":1,"1363":1,"1375":1,"1391":1,"1469":1,"1540":1,"1650":1,"1798":1,"1849":1,"1866":1,"1874":1,"1888":1,"1906":1,"1923":1,"1959":1,"1975":1,"1991":1,"2031":1,"2046":1,"2198":1,"2227":1,"2235":1,"2254":1,"2263":1,"2270":1,"2285":1,"2299":1,"2311":1,"2320":1,"2334":1},"1":{"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"869":1,"870":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1},"2":{"542":1,"547":1,"775":1,"776":1,"777":2,"778":1,"779":1,"781":2,"782":2,"783":1,"856":1,"921":1,"1781":1,"1888":2,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1}}],["문서에서",{"2":{"541":1,"1761":1,"1786":1}}],["문서입니다",{"2":{"538":1,"1752":1}}],["문서를",{"2":{"420":1,"435":1,"456":1,"474":1,"512":1,"853":1,"1619":1,"1650":1,"1677":1,"1692":1,"1729":1,"1750":1,"1786":1,"1831":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"2033":1,"2034":1,"2035":1,"2116":1}}],["문서는",{"0":{"538":1,"1752":1},"2":{"365":1,"436":1,"475":1,"538":1}}],["문서화",{"0":{"395":1,"420":1,"853":1},"1":{"421":1,"422":1,"423":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1},"2":{"353":1,"395":2,"396":1,"433":1,"542":2,"543":1}}],["문자를",{"2":{"2293":1}}],["문자",{"2":{"98":1,"744":1,"973":1}}],["문자열에서",{"2":{"2309":1}}],["문자열의",{"2":{"2214":1,"2289":1}}],["문자열을",{"2":{"2207":1,"2239":1,"2277":1}}],["문자열인",{"2":{"2205":1}}],["문자열이어야",{"2":{"51":1,"665":1}}],["문자열",{"0":{"45":1,"2213":1,"2286":1},"1":{"2214":1,"2287":1,"2288":1,"2289":1,"2290":1,"2291":1,"2292":1,"2293":1,"2294":1,"2295":1,"2296":1,"2297":1,"2298":1,"2299":1},"2":{"33":1,"44":1,"45":1,"651":1,"929":1,"1659":1,"1766":3,"1820":1,"1871":1,"2204":1,"2207":2,"2208":1,"2209":1,"2212":1,"2214":2,"2221":1,"2227":1,"2277":1,"2278":1,"2279":1,"2285":1,"2287":1}}],["문자열로",{"2":{"32":2,"38":1,"2197":1,"2208":1,"2294":1}}],["액션",{"0":{"1381":1,"1396":1,"1405":1,"1416":1,"1425":1,"1450":1,"1459":1,"1474":1,"1634":1},"1":{"1382":1,"1383":1,"1397":1,"1398":1,"1406":1,"1407":1,"1408":1,"1417":1,"1418":1,"1419":1,"1426":1,"1427":1,"1451":1,"1452":1,"1453":1,"1460":1,"1461":1,"1475":1,"1476":1,"1477":1,"1478":1},"2":{"347":1,"1062":1,"1063":1,"1064":1,"1706":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1920":1}}],["액세스",{"2":{"9":1,"103":1,"1377":1,"1379":1,"1380":1,"1382":2,"1383":1,"1390":1}}],["재설치",{"2":{"2178":1}}],["재설정",{"2":{"671":1}}],["재직구분",{"2":{"1969":2}}],["재무",{"2":{"1802":1,"1961":1}}],["재시도할",{"2":{"1318":1,"1534":1}}],["재시도를",{"2":{"1264":1}}],["재시도",{"0":{"1260":1,"1318":1,"1534":1},"2":{"629":1,"699":1,"1264":2,"1276":2,"1301":1,"1320":2,"1337":1,"1534":1,"1539":2}}],["재시작하세요",{"2":{"2058":1}}],["재시작하고",{"2":{"2055":1}}],["재시작해야",{"2":{"1173":1}}],["재시작",{"2":{"344":1,"1173":1,"1749":1,"2179":1}}],["재사용",{"2":{"538":1,"1667":1,"1686":1,"1752":1,"1817":1}}],["재발급",{"0":{"9":1,"16":1,"814":1},"1":{"815":1,"816":1,"817":1},"2":{"12":1,"576":1,"598":1,"811":1,"943":1}}],["재발급을",{"2":{"6":1}}],["외부",{"0":{"468":1,"758":1,"776":1,"1669":1,"2046":1},"1":{"759":1,"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1},"2":{"343":1,"437":1,"547":1,"551":1,"747":1,"759":1,"775":1,"776":1,"1652":1,"1669":1,"1774":1,"1781":1,"1817":1,"1824":1,"1925":1,"1946":1}}],["배치",{"2":{"565":1,"1563":1}}],["배너입니다",{"2":{"765":1}}],["배너",{"0":{"764":1},"1":{"765":1},"2":{"551":1,"747":1}}],["배포합니다",{"2":{"1506":1,"1512":1}}],["배포된",{"2":{"1486":1}}],["배포용",{"2":{"497":1}}],["배포까지의",{"2":{"365":1}}],["배포하는",{"2":{"343":1,"468":1}}],["배포",{"0":{"343":1,"344":1,"1481":1,"1506":1,"1512":1,"1779":1},"1":{"344":1,"345":1,"1482":1,"1483":1,"1484":1,"1485":1,"1486":1,"1487":1},"2":{"342":1,"359":1,"451":1,"503":1,"997":1,"1776":1,"1779":3}}],["배열에서",{"2":{"2195":1}}],["배열로",{"2":{"2193":1}}],["배열이",{"2":{"1045":1}}],["배열의",{"2":{"51":1,"1045":1}}],["배열을",{"2":{"33":1,"2192":1,"2193":1,"2216":1}}],["배열",{"0":{"33":1,"2189":1,"2215":1},"1":{"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2216":1},"2":{"33":2,"665":1,"670":1,"1033":1,"1217":1,"1659":1,"1766":2,"1820":1,"1871":1,"2190":1,"2204":1,"2216":1,"2227":1,"2233":1,"2261":2,"2327":1}}],["어제",{"2":{"2209":1,"2242":1}}],["어댑터",{"2":{"325":1,"573":1,"598":1}}],["어노테이션을",{"2":{"859":1}}],["어노테이션",{"0":{"153":1,"421":1,"859":1,"860":1},"1":{"154":1,"861":1,"862":1,"863":1,"864":1},"2":{"385":1,"574":1,"598":1}}],["작은따옴표",{"2":{"1565":1}}],["작동하지",{"0":{"2055":1}}],["작동하므로",{"2":{"1303":1}}],["작동합니다",{"2":{"1195":1,"1847":1}}],["작업",{"2":{"1614":1,"1706":1,"2014":1}}],["작업이므로",{"2":{"1221":1}}],["작업을",{"2":{"316":1,"320":1,"2091":1}}],["작성할",{"2":{"2077":1}}],["작성하는",{"2":{"303":1,"354":1,"384":1,"385":1,"386":1,"399":1,"411":1,"416":1,"988":1,"995":1}}],["작성되며",{"2":{"238":1}}],["작성합니다",{"2":{"177":1,"372":1,"757":1,"887":1}}],["작성",{"0":{"177":1,"196":1,"303":1,"332":1,"333":1,"372":1,"384":1,"385":1,"386":1,"399":1,"411":1,"416":1,"528":1,"531":1,"533":1,"757":1,"1566":1,"1580":1,"1600":1},"1":{"197":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"400":1,"401":1,"402":1,"403":1,"404":1,"412":1,"413":1,"414":1,"415":1,"417":1,"418":1,"419":1,"529":1,"530":1,"532":1,"534":1,"535":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1},"2":{"315":1,"327":1,"338":1,"372":3,"384":1,"385":1,"386":3,"396":4,"397":3,"404":1,"410":3,"415":1,"419":1,"536":1,"539":3,"540":2,"542":3,"562":1,"565":1,"732":1,"909":1,"1772":1,"1777":1}}],["명시된",{"2":{"1732":1,"1733":1}}],["명명",{"0":{"1676":1,"1825":1},"1":{"1826":1,"1827":1,"1828":1}}],["명확히",{"2":{"1563":1}}],["명확한",{"2":{"1320":1,"1539":2,"1563":1}}],["명칭",{"2":{"1034":1,"1035":1,"1043":1,"1077":1}}],["명령어는",{"2":{"1733":1}}],["명령어를",{"2":{"1733":1}}],["명령어로",{"2":{"1714":1,"1715":1,"1716":1,"1727":1,"1728":1}}],["명령어",{"0":{"298":1,"1179":1,"1503":1,"1509":1},"1":{"299":1,"300":1,"301":1,"1180":1,"1181":1,"1182":1}}],["명세서",{"2":{"71":1}}],["플랫폼에서",{"2":{"1686":1}}],["플러그인은",{"2":{"1904":1}}],["플러그인입니다",{"2":{"1893":1}}],["플러그인들의",{"2":{"1890":1}}],["플러그인을",{"2":{"1656":1,"1861":1,"1905":1}}],["플러그인",{"0":{"295":1,"1199":1,"1889":1,"1892":1,"1904":1,"1905":1,"2042":1,"2083":1},"1":{"296":1,"297":1,"1890":1,"1891":1,"1892":1,"1893":2,"1894":2,"1895":2,"1896":2,"1897":2,"1898":2,"1899":2,"1900":2,"1901":2,"1902":2,"1903":2,"1904":1,"1905":1,"1906":1,"2043":1,"2044":1,"2045":1},"2":{"1661":1,"1673":1,"1774":1,"1817":2,"1822":1,"1858":1,"1861":1,"1865":2,"1879":1,"1891":2,"1893":1,"1902":1,"1904":1,"1905":3,"1906":1,"2082":2}}],["플로우",{"0":{"16":1}}],["의존성을",{"2":{"1727":1}}],["의존성으로",{"2":{"835":1}}],["의존성은",{"2":{"454":1}}],["의존성",{"0":{"291":1,"454":1,"496":1,"627":1,"628":1,"1727":1,"1733":1,"1748":1,"2172":1,"2178":1},"1":{"292":1,"293":1,"294":1,"628":1},"2":{"463":1,"464":1,"835":1,"836":1,"1652":1,"1672":1,"1694":1,"1733":1,"1748":1,"2038":1,"2059":1,"2172":1,"2180":1}}],["컴포넌트와",{"2":{"1993":1}}],["컴포넌트가",{"2":{"1864":1,"2056":1}}],["컴포넌트들은",{"2":{"1761":1}}],["컴포넌트들이",{"2":{"1662":1,"1823":1}}],["컴포넌트들입니다",{"2":{"1022":1,"1941":1,"1961":1,"1977":1}}],["컴포넌트명",{"0":{"1573":1},"2":{"1612":1}}],["컴포넌트에서",{"0":{"1464":1},"2":{"1314":1,"1522":1,"1668":1,"1702":1,"1819":1,"1838":1,"1841":1,"1842":1,"1854":1}}],["컴포넌트로",{"2":{"1055":1,"1860":1}}],["컴포넌트는",{"2":{"1044":1,"1577":1,"1579":1,"1587":1,"1589":1,"1591":1,"1957":1,"1973":1,"1989":1}}],["컴포넌트입니다",{"2":{"1024":1,"1031":1,"1038":1,"1042":1,"1048":1,"1050":1,"1052":1,"1060":1,"1067":1,"1102":1,"1109":1,"1116":1,"1124":1,"1129":1,"1131":1,"1133":1,"1137":1,"1142":1,"1144":1,"1148":1,"1154":1,"1655":1,"1970":1,"1983":1,"1984":1,"1997":1,"1999":1,"2001":1,"2003":1,"2005":1,"2006":1,"2007":1,"2009":1,"2010":1,"2011":1,"2013":1,"2014":1,"2015":1,"2017":1,"2018":1,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2098":1}}],["컴포넌트를",{"0":{"2056":1,"2184":1},"2":{"1007":1,"1012":1,"1022":1,"1075":1,"1576":1,"1646":1,"1686":1,"1993":1}}],["컴포넌트",{"0":{"1003":1,"1008":1,"1013":1,"1017":1,"1021":1,"1028":1,"1047":1,"1097":1,"1349":1,"1558":1,"1560":1,"1561":1,"1575":1,"1580":1,"1581":1,"1586":1,"1588":1,"1590":1,"1591":1,"1597":1,"1599":1,"1609":1,"1611":1,"1641":1,"1646":1,"1662":1,"1698":1,"1699":1,"1703":1,"1709":1,"1761":1,"1762":1,"1763":1,"1764":1,"1765":1,"1826":1,"1935":1,"1940":1,"1943":1,"1960":1,"1963":1,"1976":1,"1979":1,"1992":1,"1995":1,"1996":1,"1998":1,"2000":1,"2002":1,"2004":1,"2008":1,"2012":1,"2016":1,"2020":1,"2027":1,"2141":1,"2144":1},"1":{"1004":1,"1005":1,"1006":1,"1007":1,"1009":1,"1010":1,"1011":1,"1012":1,"1014":1,"1015":1,"1016":1,"1018":1,"1019":1,"1020":1,"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1576":1,"1577":1,"1578":1,"1579":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1587":1,"1588":1,"1589":1,"1591":1,"1592":1,"1593":1,"1594":1,"1598":1,"1599":1,"1600":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1699":1,"1700":1,"1701":1,"1704":1,"1705":1,"1762":1,"1763":1,"1764":1,"1765":1,"1936":1,"1937":1,"1938":1,"1939":1,"1941":1,"1942":1,"1943":1,"1944":2,"1945":2,"1946":2,"1947":2,"1948":2,"1949":2,"1950":2,"1951":2,"1952":2,"1953":2,"1954":2,"1955":2,"1956":1,"1957":1,"1958":1,"1959":1,"1961":1,"1962":1,"1963":1,"1964":2,"1965":2,"1966":2,"1967":2,"1968":2,"1969":2,"1970":2,"1971":2,"1972":1,"1973":1,"1974":1,"1975":1,"1977":1,"1978":1,"1979":1,"1980":2,"1981":2,"1982":2,"1983":2,"1984":2,"1985":2,"1986":2,"1987":2,"1988":1,"1989":1,"1990":1,"1991":1,"1993":1,"1994":1,"1995":1,"1996":2,"1997":3,"1998":2,"1999":3,"2000":2,"2001":3,"2002":2,"2003":3,"2004":2,"2005":3,"2006":3,"2007":3,"2008":2,"2009":3,"2010":3,"2011":3,"2012":1,"2013":2,"2014":2,"2015":2,"2016":1,"2017":2,"2018":2,"2019":2,"2020":1,"2021":2,"2022":2,"2023":2,"2024":2,"2025":2,"2026":2,"2027":1,"2028":2,"2029":2,"2030":2,"2031":1,"2145":1,"2146":1,"2147":1},"2":{"451":1,"1046":1,"1096":1,"1105":1,"1112":1,"1119":1,"1199":1,"1353":2,"1469":1,"1570":1,"1573":1,"1582":1,"1587":4,"1588":2,"1600":1,"1606":1,"1611":1,"1625":1,"1638":1,"1652":2,"1667":7,"1669":3,"1676":1,"1680":3,"1686":1,"1702":1,"1711":1,"1752":2,"1755":1,"1756":2,"1762":6,"1768":1,"1770":5,"1772":1,"1773":1,"1774":1,"1777":2,"1778":2,"1786":2,"1817":14,"1858":3,"1864":1,"1899":1,"1926":4,"1928":1,"1929":1,"1930":1,"1994":10,"2005":1,"2031":5,"2083":1,"2112":1,"2145":1,"2184":2}}],["컴포넌트용",{"0":{"271":1,"274":1},"2":{"635":1,"851":1}}],["컴파일된",{"2":{"557":2}}],["컴파일",{"0":{"709":1},"2":{"180":1,"709":1}}],["두",{"2":{"269":1,"851":1,"2073":1,"2103":1,"2210":1,"2243":1}}],["연도",{"2":{"2251":1}}],["연결을",{"2":{"269":1,"579":1,"580":1,"1530":1,"1536":1}}],["연결",{"0":{"267":1,"510":1,"511":1,"1000":1,"1001":1},"1":{"268":1},"2":{"462":1,"463":1,"464":1,"465":1,"481":1,"490":1,"510":1,"539":1,"544":2,"580":2,"635":1,"1000":2,"1001":1,"1725":2}}],["연동하여",{"2":{"570":1,"613":1}}],["연동하는",{"2":{"19":1}}],["연동",{"0":{"1029":1,"1350":1,"1468":1,"1479":1,"2332":1},"2":{"381":1,"429":1,"540":1,"542":1,"778":1,"852":1,"932":1,"977":1}}],["연동합니다",{"2":{"146":1}}],["매핑됩니다",{"2":{"1370":1,"1607":1,"1626":1}}],["매핑",{"0":{"1370":1,"1607":1,"1626":1}}],["매니저",{"2":{"634":1}}],["매퍼와",{"2":{"381":1}}],["매퍼",{"0":{"264":1,"306":1,"331":1,"333":1,"374":1,"409":1,"413":1,"444":1,"535":1,"751":1,"753":1,"844":1},"1":{"307":1,"308":1,"752":1,"753":1,"754":1},"2":{"264":1,"331":1,"386":1,"396":1,"434":1,"437":1,"444":2,"551":3,"561":1,"589":1,"590":1,"591":1,"598":4,"747":1,"752":3,"844":1,"909":1}}],["매칭",{"2":{"60":1,"119":1,"123":1}}],["각",{"2":{"263":1,"330":1,"372":1,"397":1,"436":1,"448":1,"473":1,"548":1,"843":1,"1045":1,"1735":1,"1758":1,"1774":1,"1775":1,"1821":1,"1864":1,"1908":1,"2116":1}}],["조정",{"2":{"1841":1,"2161":1}}],["조건",{"2":{"1969":1,"1981":1,"1986":1}}],["조건에",{"2":{"1358":1,"2194":1}}],["조건부",{"0":{"260":1},"2":{"634":1}}],["조용히",{"2":{"1338":1,"1527":2}}],["조직도",{"2":{"1637":1,"1809":1,"1842":3,"1942":1,"1947":1}}],["조직",{"0":{"1563":1,"1613":1},"2":{"1052":1,"1762":1,"1947":1,"2011":2}}],["조회에",{"2":{"1609":1}}],["조회됩니다",{"2":{"114":2,"122":1}}],["조회합니다",{"2":{"56":1,"76":1,"119":1,"120":1,"178":1,"421":1,"859":1,"862":1}}],["조회하고",{"2":{"32":1,"53":1}}],["조회",{"0":{"32":1,"56":1,"67":1,"76":1,"119":1,"120":1,"178":1,"280":1,"322":1,"324":1,"707":1,"1017":1,"2002":1},"1":{"1018":1,"1019":1,"1020":1,"2003":1},"2":{"9":1,"13":1,"15":1,"16":1,"46":1,"56":1,"57":1,"67":1,"103":2,"104":2,"119":1,"199":1,"223":1,"421":2,"519":1,"594":1,"600":1,"602":2,"618":1,"652":1,"704":2,"707":1,"729":1,"731":1,"859":2,"862":1,"863":1,"1020":1,"1139":1,"1156":1,"1609":1,"1667":1,"1762":2,"1764":1,"1807":1,"1942":1,"1945":2,"1946":10,"1947":1,"1949":2,"1951":1,"1953":1,"1955":1,"1969":2,"1971":1,"1981":2,"1982":2,"2003":2,"2005":1,"2021":1,"2022":1,"2025":1,"2026":1}}],["적절한",{"2":{"259":1,"393":1,"629":2,"838":1,"1236":1,"1264":1,"1320":1,"1539":1,"1599":1}}],["적용된",{"2":{"2279":1}}],["적용되지",{"0":{"2058":1},"2":{"2179":1}}],["적용되므로",{"2":{"225":1,"681":1}}],["적용하려면",{"2":{"1887":1}}],["적용할",{"2":{"1185":1}}],["적용됨",{"2":{"670":1}}],["적용",{"0":{"1887":1},"2":{"542":1,"1880":1}}],["적용합니다",{"2":{"211":1}}],["통계",{"2":{"1955":2}}],["통화",{"2":{"1884":1}}],["통신을",{"2":{"1725":1,"2066":1}}],["통신",{"0":{"1759":1,"1769":1,"2159":1},"1":{"2160":1,"2161":1,"2162":1,"2163":1},"2":{"541":1,"1391":1,"1619":1,"1711":1,"1756":1,"1773":1,"1780":2,"2035":1}}],["통신합니다",{"2":{"328":1}}],["통한",{"2":{"394":1,"688":1,"698":1,"1680":1,"1686":2,"2003":1,"2005":1}}],["통해",{"2":{"252":1,"427":1,"832":1,"846":1,"948":1,"964":1,"1239":1,"1251":1,"1267":1,"1345":1,"1369":1,"1514":1,"1589":1,"1604":1,"1623":1,"1728":1,"1759":1,"1958":1,"2001":1,"2077":1,"2091":1,"2129":1,"2130":1,"2200":1}}],["통합",{"0":{"216":1,"428":1,"995":1,"2147":1},"1":{"217":1,"996":1,"997":1},"2":{"203":1,"425":1,"428":1,"538":1,"562":1,"990":1,"995":1,"1679":1,"1686":1,"1904":1,"2086":1}}],["맞는",{"2":{"473":1,"1728":1,"1735":1,"2194":1}}],["맞게",{"2":{"249":1,"494":1,"1695":1}}],["맞춰",{"2":{"30":1}}],["반올림합니다",{"2":{"2310":1}}],["반응형이므로",{"2":{"1635":1}}],["반응형",{"0":{"1585":1},"2":{"1463":1,"1613":1,"1920":1}}],["반응성",{"0":{"1635":1},"2":{"1045":1}}],["반려",{"2":{"1435":1,"2021":1}}],["반복",{"2":{"432":1}}],["반드시",{"2":{"243":1,"492":1,"540":1,"681":1,"946":1,"1236":1,"1757":1}}],["반환값",{"2":{"1215":1,"1216":1,"1217":1,"1385":1,"2204":1,"2205":1,"2207":1,"2208":1,"2209":1,"2210":1,"2212":1,"2214":1,"2216":1,"2220":1,"2221":1,"2231":1,"2232":1,"2233":1,"2268":1,"2276":1,"2277":1,"2278":1,"2279":1,"2326":1,"2327":1}}],["반환된",{"2":{"87":1,"200":1,"723":1}}],["반환하는",{"2":{"30":1,"36":1,"78":1,"185":1,"713":1}}],["반환합니다",{"2":{"30":1,"65":1,"72":1,"953":1,"1302":1,"1385":1,"2205":1,"2248":1,"2277":1}}],["반환됩니다",{"2":{"15":1,"36":1,"123":2}}],["반환",{"0":{"72":1,"1327":1},"2":{"9":1,"16":1,"46":1,"50":1,"119":1,"604":1,"629":1,"661":1,"704":1,"1310":1,"1311":1}}],["└──────────┴──────────────────────┘",{"2":{"1089":1}}],["└──",{"2":{"239":2,"368":13,"377":2,"388":9,"406":5,"434":3,"437":6,"439":6,"440":5,"441":1,"443":1,"444":3,"445":1,"446":1,"448":1,"454":1,"455":5,"478":3,"514":1,"516":18,"523":13,"549":2,"551":8,"552":3,"554":9,"555":5,"556":4,"557":1,"558":4,"568":1,"598":17,"614":4,"632":1,"646":3,"649":3,"668":5,"676":1,"684":4,"702":4,"711":3,"726":4,"747":1,"750":1,"752":4,"754":1,"756":3,"759":1,"1558":1,"1560":1,"1561":1,"1562":1,"1652":3,"1816":1,"1817":16,"1834":2,"1853":3,"1858":3,"1877":2,"1891":4,"1909":1,"1926":2,"1934":3,"1942":6,"1962":5,"1978":3,"1994":15}}],["├──────────┬──────────────────────┤",{"2":{"1089":1}}],["├──",{"2":{"239":4,"368":5,"377":3,"388":12,"406":3,"434":5,"437":13,"439":22,"440":12,"441":2,"443":3,"444":4,"445":2,"446":1,"448":3,"454":1,"455":3,"478":4,"514":3,"516":12,"523":8,"549":6,"551":19,"552":1,"554":30,"555":12,"556":8,"557":4,"558":2,"568":8,"598":35,"614":3,"632":5,"646":1,"649":2,"668":4,"676":1,"684":2,"702":2,"711":3,"726":2,"747":8,"750":3,"752":4,"754":2,"756":5,"1558":2,"1560":2,"1561":1,"1652":16,"1816":7,"1817":47,"1834":5,"1853":4,"1858":12,"1877":1,"1891":11,"1909":7,"1926":8,"1934":5,"1942":12,"1962":5,"1978":5,"1994":33}}],["가진",{"2":{"2193":1}}],["가지",{"2":{"2073":1,"2103":1}}],["가",{"2":{"1747":1}}],["가드는",{"2":{"1356":1}}],["가드",{"0":{"1355":1,"1357":1,"1360":1,"1361":1,"2091":1,"2130":1},"1":{"1356":1,"1357":1,"1358":2,"1359":2,"1360":1,"1361":1,"1362":1,"1363":1},"2":{"1354":1,"1375":1,"1896":1}}],["가져와",{"2":{"1272":1,"1350":1}}],["가져옵니다",{"2":{"1244":1,"1245":1,"1419":1,"1453":1,"1958":1,"2268":1,"2327":1}}],["가져오기",{"0":{"1632":1},"2":{"982":1,"1250":1,"1420":1,"1454":1,"1784":1,"1914":2,"1958":1}}],["가독성을",{"2":{"1164":1}}],["가상",{"2":{"1045":1}}],["가이드에서",{"2":{"1786":1}}],["가이드로",{"2":{"1786":1}}],["가이드는",{"2":{"1693":1}}],["가이드를",{"2":{"397":1}}],["가이드입니다",{"2":{"364":1,"1693":1,"1775":1,"2145":1,"2149":1,"2154":1}}],["가이드",{"0":{"303":1,"382":1,"541":1,"544":1,"1693":1,"1761":1,"1775":1,"1922":1,"2281":1},"1":{"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"383":1,"384":1,"385":1,"386":1,"387":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1706":1,"1707":1,"1708":1,"1709":1,"1710":1,"1711":1,"1762":1,"1763":1,"1764":1,"1765":1,"2282":1,"2283":1},"2":{"237":2,"265":1,"315":1,"327":2,"338":1,"359":2,"415":1,"456":1,"536":2,"538":1,"539":1,"540":1,"542":1,"612":1,"766":2,"852":1,"874":1,"899":1,"965":1,"1619":1,"1711":3,"1750":1,"1752":1,"1755":1,"1759":1,"1766":1,"1779":1,"1888":1}}],["가능합니다",{"2":{"1169":1,"1720":1}}],["가능한",{"2":{"1060":1,"1164":1,"1667":1,"1686":2,"1763":1,"1817":1,"2280":1}}],["가능",{"2":{"51":1,"83":1,"427":1,"665":1,"681":2,"864":1,"906":1,"1458":1,"1461":1,"1715":1,"1879":1,"1917":1,"2222":1}}],["페이드",{"2":{"1838":1}}],["페이지에서",{"2":{"2029":1}}],["페이지의",{"2":{"1970":1,"1986":1,"1987":1}}],["페이지입니다",{"2":{"1794":1,"1795":1,"1796":1,"1806":1,"1807":1,"1808":1,"1809":1,"1936":1,"1937":1,"1939":1,"1945":1,"1946":1,"1947":1,"1949":1,"1951":1,"1953":1,"1955":1,"1965":1,"1966":1,"1967":1,"1969":1,"1971":1,"1981":1,"1982":1}}],["페이지가",{"2":{"1617":1}}],["페이지는",{"2":{"1598":1}}],["페이지를",{"2":{"1471":1,"1596":1,"1786":1}}],["페이지",{"0":{"1146":1,"1560":1,"1595":1,"1597":1,"1662":1,"1699":1,"1768":1,"1793":1,"1805":1},"1":{"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1596":1,"1597":1,"1598":2,"1599":2,"1600":2,"1601":1,"1602":1,"1603":1,"1604":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":1,"1616":1,"1617":1,"1618":1,"1619":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1794":1,"1795":1,"1796":1,"1806":1,"1807":1,"1808":1,"1809":1},"2":{"1080":1,"1144":1,"1148":1,"1150":1,"1151":1,"1360":1,"1362":1,"1372":1,"1599":1,"1600":1,"1619":1,"1652":1,"1655":1,"1662":1,"1663":1,"1668":1,"1699":1,"1711":1,"1765":1,"1768":1,"1817":4,"1819":1,"1823":1,"1854":1,"1858":1,"1864":5,"1879":1,"1895":5,"1926":1,"1934":2,"2025":2,"2028":1,"2330":2,"2332":2}}],["페이지로",{"2":{"9":1,"105":1,"1249":1,"1262":1,"1276":1,"1287":1,"1308":1,"1309":1,"1359":1,"1389":1,"1390":1,"1525":2,"1797":1,"2057":1,"2162":1,"2165":1,"2181":1}}],["페이징",{"2":{"236":1,"577":1,"598":1,"1817":1,"2099":1,"2119":1}}],["고객",{"0":{"1980":1},"1":{"1981":1,"1982":1,"1983":1,"1984":1},"2":{"1978":7,"1981":2,"1982":3,"1983":3,"1984":3,"1986":1,"1987":1}}],["고유",{"2":{"1606":1,"1625":1}}],["고려해야",{"2":{"1848":1}}],["고려사항",{"0":{"1236":1}}],["고려하세요",{"2":{"1045":1}}],["고려",{"2":{"225":1,"681":1}}],["고정",{"2":{"56":2,"73":1,"1070":1,"1467":1}}],["성별",{"2":{"1969":2}}],["성능",{"0":{"1501":1},"2":{"225":1,"681":2,"1045":1,"1221":1}}],["성공하면",{"2":{"497":1}}],["성공하였습니다",{"2":{"34":1}}],["성공했습니다",{"2":{"103":1}}],["성공해야",{"2":{"38":1}}],["성공",{"0":{"136":1,"351":1,"402":1,"1324":1,"1341":1,"1554":1},"1":{"1325":1,"1326":1,"1327":1},"2":{"9":1,"22":1,"30":2,"31":1,"37":1,"45":1,"56":1,"57":1,"71":2,"94":4,"103":1,"105":2,"120":1,"121":3,"138":1,"163":1,"421":1,"530":1,"600":2,"651":1,"859":1,"864":1,"891":1,"1279":2,"1314":1,"1339":1,"1341":1,"1516":1,"1523":2,"1554":1,"1555":1,"1556":1,"1614":1,"1785":1}}],["태그의",{"2":{"2268":1}}],["태그와",{"2":{"962":1}}],["태그",{"2":{"221":1,"680":1,"761":1}}],["해제하거나",{"2":{"2284":1}}],["해제하고",{"2":{"2282":1}}],["해제",{"2":{"2282":1}}],["해석",{"2":{"1675":1}}],["해주세요",{"2":{"1262":1,"1276":1,"1337":1}}],["해결",{"0":{"508":1,"546":1,"998":1,"1746":1,"2176":1},"1":{"509":1,"510":1,"511":1,"999":1,"1000":1,"1001":1,"1002":1,"1747":1,"1748":1,"1749":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1},"2":{"546":2,"998":1,"999":1,"1000":1,"1001":1,"1780":4,"2160":1,"2161":1,"2162":1,"2163":1,"2165":1,"2166":1,"2167":1,"2168":1,"2171":1,"2172":1,"2173":1,"2174":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2184":1,"2185":1,"2186":1,"2187":1}}],["해시",{"0":{"207":1,"791":1,"957":1},"1":{"208":1,"209":1,"792":1,"793":1,"958":1,"959":1},"2":{"575":2,"598":2,"608":1,"609":1}}],["해당하지",{"2":{"1358":1}}],["해당하는",{"2":{"1045":1,"1662":1,"1823":1}}],["해당",{"2":{"70":1,"81":1,"1617":1,"1736":1}}],["공백이",{"2":{"2214":1}}],["공백을",{"2":{"2214":1,"2289":1}}],["공간",{"2":{"1722":2,"1723":2}}],["공식",{"0":{"1650":1},"2":{"776":1,"777":1,"778":1,"779":1,"781":1,"782":1,"783":1,"1650":1,"1781":1,"1888":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1}}],["공격을",{"2":{"798":1,"961":1,"963":1}}],["공격",{"2":{"221":1,"428":1,"587":1,"638":1,"670":1,"680":1,"936":1,"1236":1}}],["공개키",{"2":{"206":1,"788":1,"956":1}}],["공통으로",{"2":{"567":1,"597":1,"1538":1,"1658":1,"1819":1,"1854":1}}],["공통",{"0":{"131":1,"135":1,"141":1,"316":1,"389":1,"429":1,"439":1,"519":1,"525":1,"541":1,"554":1,"567":1,"571":1,"592":1,"597":1,"610":1,"697":1,"768":1,"769":1,"846":1,"1561":1,"1703":1,"1762":1,"1867":1,"1956":1,"1972":1,"1988":1,"1995":1,"2199":1},"1":{"132":1,"133":1,"134":1,"135":1,"136":2,"137":2,"138":1,"139":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"390":1,"391":1,"392":1,"568":1,"569":1,"570":1,"571":1,"572":2,"573":2,"574":2,"575":2,"576":2,"577":2,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":2,"594":2,"595":2,"596":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":2,"612":1,"698":1,"1704":1,"1705":1,"1868":1,"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1957":1,"1958":1,"1973":1,"1974":1,"1989":1,"1990":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2222":1,"2223":1,"2224":1,"2225":1,"2226":1,"2227":1},"2":{"45":1,"124":1,"127":1,"128":1,"130":2,"145":1,"233":1,"316":1,"317":1,"320":1,"338":1,"388":1,"389":1,"392":1,"398":1,"425":1,"431":1,"432":1,"434":1,"437":1,"439":4,"440":1,"441":1,"444":1,"454":2,"456":1,"516":1,"523":1,"525":1,"538":1,"540":4,"541":2,"542":1,"545":1,"551":1,"554":4,"555":1,"556":1,"565":2,"566":1,"568":1,"570":1,"577":1,"598":7,"604":1,"612":1,"614":1,"618":1,"630":1,"651":1,"663":1,"666":1,"700":1,"724":1,"745":2,"752":1,"794":1,"896":1,"899":1,"987":1,"1046":1,"1431":1,"1587":1,"1667":2,"1686":1,"1752":3,"1756":1,"1762":1,"1766":2,"1774":1,"1817":2,"1820":1,"1858":1,"1864":1,"1865":1,"1868":1,"1874":1,"1993":1,"1994":1,"1997":1,"2031":1,"2033":1,"2198":1,"2200":1,"2235":1,"2254":1,"2263":1,"2270":1,"2285":1,"2299":1,"2311":1,"2320":1}}],["방문한",{"2":{"1415":1,"1913":1}}],["방식",{"0":{"1756":1},"2":{"670":1,"671":1,"672":1,"1226":1,"1227":1,"1574":1,"1760":1,"1770":1}}],["방화벽",{"2":{"510":1,"1000":1}}],["방지하기",{"2":{"1264":1}}],["방지합니다",{"2":{"798":1,"961":1,"963":1}}],["방지를",{"2":{"665":1}}],["방지",{"0":{"210":1,"960":1},"1":{"211":1,"212":1,"961":1,"962":1,"963":1},"2":{"203":1,"428":1,"551":1,"583":1,"587":1,"638":1,"668":1,"670":1,"676":1,"682":1,"747":1,"761":1,"936":1,"964":3,"1236":1}}],["방법입니다",{"2":{"1778":1,"1779":1,"1780":1}}],["방법",{"0":{"132":1,"624":1,"691":1,"1277":1,"1513":1,"1843":1,"1881":1},"1":{"133":1,"134":1,"625":1,"626":1,"692":1,"693":1,"694":1,"1278":1,"1279":1,"1280":1,"1281":1,"1514":1,"1515":1,"1516":1,"1517":1,"1518":1,"1519":1,"1844":1,"1845":1,"1846":1,"1882":1,"1883":1,"1884":1},"2":{"383":1,"384":1,"385":1,"386":1,"387":1,"394":1,"546":1,"750":1,"1308":1,"1309":1,"1310":1,"1311":1,"1312":1,"1540":1,"1756":1,"1769":2,"1779":3,"1836":1,"1838":1,"1840":1,"1841":1,"1842":1,"1893":1,"1959":1,"1975":1,"1991":1,"2001":1}}],["방법을",{"2":{"22":1,"174":1,"303":1,"339":1,"343":1,"354":1,"360":1,"399":1,"405":1,"411":1,"416":1,"420":1,"475":1,"544":1,"546":1,"988":1,"991":1,"995":1,"998":1,"1521":1,"1786":1}}],["+44edtcyufcshospuhnre9ivtfmohbwa",{"2":{"206":1,"244":1,"790":1,"956":1}}],["+",{"2":{"163":1,"356":1,"538":1,"649":4,"675":1,"825":5,"891":1,"1318":1,"1326":1,"1570":1,"1676":1,"1752":3,"1845":1}}],["포트를",{"2":{"1491":1,"1747":1,"2177":1}}],["포트로",{"2":{"509":1}}],["포트가",{"2":{"509":1,"511":1,"999":1,"1491":1}}],["포트",{"0":{"242":1,"509":1,"999":1,"1491":1,"1747":1,"2177":1},"2":{"472":2,"510":1,"999":1,"1001":1,"1490":1,"1747":2,"2177":1}}],["포맷팅할",{"2":{"2212":1}}],["포맷팅된",{"2":{"2207":1,"2212":1}}],["포맷팅합니다",{"2":{"2207":1,"2212":1,"2239":1,"2249":1,"2298":1,"2303":1,"2305":1,"2306":1,"2308":1}}],["포맷팅은",{"2":{"1745":1}}],["포맷팅",{"0":{"2225":1},"2":{"1707":1,"1766":2,"1783":2,"1999":1,"2033":2}}],["포맷",{"2":{"159":1,"763":1}}],["포함됩니다",{"2":{"1673":1,"1675":1}}],["포함합니다",{"2":{"1657":1,"1689":1,"1993":1}}],["포함하여",{"2":{"1655":1}}],["포함됨",{"2":{"1281":1,"1342":1,"1546":1}}],["포함한",{"2":{"1270":1}}],["포함해야",{"2":{"1045":1}}],["포함되어",{"2":{"563":1,"1824":1,"1857":1,"1871":1}}],["포함된",{"2":{"57":1,"1212":1,"1299":1}}],["포함",{"0":{"694":1},"2":{"16":1,"33":1,"37":1,"94":1,"110":1,"462":1,"471":1,"834":1,"904":1,"916":1}}],["클릭되었습니다",{"2":{"1699":1}}],["클릭하여",{"2":{"1121":1}}],["클릭재킹",{"2":{"964":1}}],["클릭",{"0":{"1058":1},"1":{"1059":1,"1060":1,"1061":1,"1062":1,"1063":1,"1064":1},"2":{"500":1,"872":2,"873":2,"1007":1,"1060":1,"1062":1,"1104":1,"1118":1,"1434":1,"1566":1,"1763":2,"2013":2}}],["클론합니다",{"2":{"1731":1}}],["클론한",{"2":{"1727":1}}],["클론",{"0":{"476":1,"1694":1,"1731":1},"1":{"477":1,"478":1},"2":{"477":1,"1694":1}}],["클래스들입니다",{"2":{"631":1,"667":1}}],["클래스패스",{"2":{"561":1,"757":1}}],["클래스명",{"0":{"1574":1},"2":{"449":1}}],["클래스를",{"2":{"232":1,"372":1,"767":1,"1044":1}}],["클래스입니다",{"2":{"217":1,"233":1}}],["클래스",{"0":{"232":1,"372":1,"578":1,"599":1,"615":1,"631":1,"633":1,"647":1,"667":1,"685":1,"703":1,"727":1,"767":1,"770":1,"2032":1},"1":{"233":1,"234":1,"235":1,"236":1,"237":1,"579":1,"580":1,"581":1,"582":1,"583":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"616":1,"617":1,"618":1,"632":1,"633":1,"634":2,"635":2,"636":2,"637":2,"638":2,"639":2,"640":1,"641":1,"642":1,"643":1,"644":1,"648":1,"649":1,"668":1,"669":1,"670":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"686":1,"687":1,"688":1,"704":1,"705":1,"728":1,"729":1,"768":1,"769":1,"770":1,"771":1,"2033":1,"2034":1,"2035":1},"2":{"151":1,"160":1,"231":1,"396":2,"439":3,"541":1,"547":1,"552":1,"554":3,"557":2,"568":1,"570":1,"572":1,"588":1,"589":1,"590":1,"591":1,"596":1,"600":1,"604":1,"612":2,"630":1,"644":1,"768":1,"987":1,"1781":1,"1840":1}}],["클라이언트",{"0":{"34":1,"2065":1},"1":{"2066":1,"2067":1,"2068":1,"2069":1},"2":{"11":1,"12":1,"16":2,"46":1,"111":1,"120":1,"121":1,"234":1,"604":2,"651":1,"652":1,"731":1,"1685":1,"1773":1,"2116":1}}],["클라이언트에서",{"2":{"34":1,"356":1,"1169":1,"1173":1}}],["클라이언트에",{"2":{"9":1}}],[">카운트",{"2":{"2078":1}}],[">사업장",{"2":{"1973":1}}],[">클릭하세요",{"2":{"1699":1}}],[">조회",{"2":{"1609":1}}],[">",{"2":{"149":1,"165":2,"172":1,"178":1,"179":1,"195":2,"197":21,"199":2,"245":2,"247":2,"308":4,"310":4,"311":1,"313":3,"314":2,"318":1,"333":4,"335":1,"336":1,"337":1,"358":2,"390":1,"413":4,"417":1,"418":1,"493":2,"535":4,"570":1,"593":1,"601":2,"625":2,"635":1,"636":4,"638":1,"675":2,"707":1,"708":1,"753":4,"799":1,"822":2,"823":1,"825":1,"829":1,"830":1,"846":1,"883":1,"888":1,"894":2,"948":2,"949":1,"950":1,"978":1,"1006":1,"1007":1,"1011":1,"1012":1,"1016":1,"1020":1,"1027":2,"1035":1,"1036":1,"1040":1,"1056":1,"1072":2,"1105":1,"1112":1,"1119":1,"1126":1,"1140":1,"1399":1,"1428":2,"1463":2,"1464":2,"1537":1,"1578":1,"1581":2,"1588":3,"1591":1,"1592":1,"1593":1,"1600":3,"1609":3,"1638":1,"1641":1,"1648":2,"1649":2,"1699":1,"1704":1,"1705":1,"1710":1,"1836":1,"1837":2,"1844":1,"1845":1,"1860":1,"1887":1,"1945":1,"1949":1,"1969":1,"1973":6,"1974":1,"1981":1,"1983":1,"1989":5,"1990":1,"1997":1,"1999":1,"2003":1,"2005":1,"2006":1,"2009":1,"2014":1,"2062":2,"2120":1}}],["잘못된",{"0":{"1526":1},"2":{"138":1,"864":1,"1314":1,"1526":2,"1536":1,"2221":1,"2316":1}}],["개월수를",{"2":{"2244":1}}],["개별",{"2":{"1212":1,"1299":1}}],["개별적으로",{"2":{"1212":1,"1284":1,"1299":1}}],["개의",{"2":{"269":1,"851":1}}],["개발용",{"2":{"1697":2}}],["개발팀",{"2":{"1027":1}}],["개발에",{"2":{"547":1}}],["개발자",{"2":{"1686":1,"2188":1}}],["개발자를",{"0":{"539":1,"1753":1},"1":{"1754":1,"1755":1,"1756":1},"2":{"1693":1}}],["개발자용",{"2":{"538":1,"1752":1}}],["개발자들이",{"2":{"538":1,"1752":1}}],["개발할",{"2":{"538":1,"1752":1}}],["개발되었습니다",{"2":{"432":1,"1686":1}}],["개발을",{"2":{"425":2,"538":1,"904":1,"938":1}}],["개발",{"0":{"299":1,"340":1,"382":1,"459":1,"469":1,"475":1,"1171":1,"1180":1,"1488":1,"1489":1,"1617":1,"1696":1,"1717":1,"1725":1,"1730":1,"1736":1,"1738":1,"1755":1,"1756":1},"1":{"383":1,"384":1,"385":1,"386":1,"387":1,"476":1,"477":1,"478":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1,"1718":1,"1719":1,"1731":1,"1732":1,"1733":1,"1734":1,"1735":1,"1736":1,"1737":1,"1738":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1,"1745":1,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1},"2":{"237":2,"239":1,"290":1,"365":1,"432":3,"435":1,"443":1,"473":2,"474":2,"475":1,"502":1,"512":1,"538":1,"539":3,"542":1,"544":1,"546":1,"551":1,"642":1,"643":1,"750":2,"773":1,"857":1,"874":1,"1167":1,"1173":1,"1187":1,"1195":1,"1494":1,"1680":2,"1686":2,"1692":1,"1697":1,"1701":1,"1711":1,"1719":1,"1720":1,"1723":1,"1729":2,"1735":1,"1736":2,"1747":1,"1749":1,"1750":1,"1754":1,"1755":2,"1776":2,"1779":2,"1781":1,"1786":2,"2055":1,"2058":1,"2082":1,"2177":1,"2179":1}}],["개인정보",{"0":{"223":1},"2":{"205":1,"787":1,"955":1}}],["개요",{"0":{"130":1,"175":1,"203":1,"365":1,"424":1,"543":1,"1022":1,"1024":1,"1031":1,"1038":1,"1055":1,"1060":1,"1067":1,"1080":1,"1086":1,"1094":1,"1102":1,"1109":1,"1116":1,"1124":1,"1137":1,"1148":1,"1154":1,"1159":1,"1166":1,"1175":1,"1187":1,"1197":1,"1208":1,"1224":1,"1239":1,"1255":1,"1267":1,"1292":1,"1306":1,"1323":1,"1345":1,"1356":1,"1365":1,"1377":1,"1393":1,"1402":1,"1413":1,"1422":1,"1431":1,"1437":1,"1442":1,"1447":1,"1456":1,"1471":1,"1514":1,"1521":1,"1596":1,"1678":1,"1792":1,"1800":1,"1804":1,"1812":1,"1833":1,"1851":1,"1857":1,"1868":1,"1876":1,"1890":1,"1908":1,"1925":1,"1933":1,"1941":1,"1961":1,"1977":1,"1993":1,"2066":1,"2118":1,"2122":1,"2127":1,"2140":1,"2145":1,"2149":1,"2154":1,"2190":1,"2200":1,"2229":1,"2237":1,"2256":1,"2265":1,"2272":1,"2287":1,"2301":1,"2313":1,"2322":1},"1":{"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"1679":1,"1680":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":1},"2":{"539":1,"540":1,"1046":1,"1754":1,"1766":1}}],["개수",{"2":{"57":1,"1473":1}}],["보입니다",{"2":{"2274":1}}],["보관된",{"2":{"2274":1}}],["보상",{"2":{"1946":1}}],["보이기",{"2":{"1463":1}}],["보통",{"2":{"1226":1,"1227":1}}],["보장",{"2":{"432":1}}],["보기",{"2":{"124":1,"545":1}}],["보안상",{"2":{"1390":1}}],["보안을",{"2":{"203":1}}],["보안",{"0":{"202":1,"220":1,"391":1,"428":1,"679":1,"760":1,"795":1,"824":1,"827":1,"938":1,"964":1,"1236":1,"1760":1},"1":{"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":2,"222":1,"223":1,"224":1,"225":1,"226":1,"680":1,"761":1,"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"825":1,"826":1,"827":1,"939":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"947":1,"948":1,"949":1,"950":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"961":1,"962":1,"963":1,"964":1,"965":1},"2":{"17":1,"60":1,"202":1,"203":1,"217":2,"225":1,"226":1,"282":1,"292":1,"425":1,"432":2,"433":1,"439":1,"540":3,"542":1,"543":1,"554":1,"581":1,"598":1,"629":1,"636":3,"682":1,"699":1,"794":2,"795":1,"819":1,"831":1,"852":1,"917":1,"937":1,"938":1,"964":1,"965":1,"1173":1,"1252":1,"1390":1}}],["레거시",{"2":{"2274":1}}],["레이아웃입니다",{"2":{"1080":1,"1086":1,"1094":1,"1938":1,"2028":1,"2029":1,"2030":1}}],["레이아웃",{"0":{"1078":1,"1084":1,"1089":1,"1092":1,"1371":1,"1372":1,"1373":1,"1374":1,"1765":1,"1992":1,"2027":1},"1":{"1079":1,"1080":1,"1081":1,"1082":1,"1083":1,"1085":1,"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1,"1093":1,"1094":1,"1095":1,"1096":1,"1097":1,"1098":1,"1099":1,"1372":1,"1373":1,"1374":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":2,"2029":2,"2030":2,"2031":1},"2":{"882":1,"1663":1,"1667":1,"1669":1,"1765":6,"1817":2,"1841":1,"1858":1,"1864":1,"1895":1,"1926":1,"1929":1,"1993":1,"1994":5,"2028":1,"2030":1,"2031":1}}],["레벨에서",{"2":{"432":1,"1860":1}}],["레벨",{"0":{"155":1,"993":1},"1":{"156":1,"157":1},"2":{"159":1,"763":1,"1864":1}}],["레퍼런스",{"0":{"129":1,"545":1},"1":{"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1},"2":{"124":1,"545":1,"630":1,"779":1}}],["레디스",{"2":{"9":1}}],["아니므로",{"2":{"1848":1}}],["아니면",{"2":{"123":1,"2204":1,"2205":1,"2220":1,"2221":1,"2276":1}}],["아웃",{"2":{"1838":1}}],["아이콘",{"0":{"1649":1,"1743":1,"2060":1,"2063":1,"2064":1},"1":{"2061":1,"2062":1,"2063":1,"2064":1},"2":{"1661":1,"1733":1,"1781":2,"1822":1,"1891":1,"1898":1,"1900":2,"1902":4}}],["아이콘을",{"2":{"1121":1,"1743":2,"2061":1,"2063":1}}],["아이디",{"2":{"103":1,"1697":1}}],["아카이버",{"2":{"557":1}}],["아래",{"2":{"541":1,"1761":1}}],["아키텍처",{"0":{"540":1,"1757":1},"1":{"1758":1,"1759":1,"1760":1},"2":{"1686":1}}],["즐겨찾기에",{"2":{"1121":1,"1418":1}}],["즐겨찾기",{"0":{"120":1,"121":1,"1121":1},"2":{"120":3,"121":4,"123":1,"421":2,"519":1,"859":2,"862":2,"1102":1,"1104":3,"1106":1,"1111":1,"1118":1,"1415":1,"1419":1,"1420":1,"1758":1}}],["첫",{"0":{"1698":1},"1":{"1699":1,"1700":1,"1701":1},"2":{"119":1,"123":1,"1261":1,"1699":1,"1755":1,"1786":1}}],["검사",{"2":{"798":1,"963":1}}],["검색하려면",{"2":{"1786":1}}],["검색",{"0":{"1973":1,"1989":1},"2":{"119":1,"1435":1,"1786":1,"1969":1,"1973":1,"1981":2,"1983":1,"1984":1,"1986":1,"1989":1,"2003":1}}],["검증합니다",{"2":{"952":1,"2220":1,"2297":1,"2317":1,"2318":1}}],["검증을",{"2":{"950":1}}],["검증하여",{"2":{"803":1}}],["검증",{"0":{"813":1,"945":1,"2203":1,"2219":1,"2226":1,"2312":1,"2319":1},"1":{"2204":1,"2205":1,"2220":1,"2221":1,"2313":1,"2314":1,"2315":1,"2316":1,"2317":1,"2318":1,"2319":1,"2320":1},"2":{"9":1,"15":1,"16":1,"214":2,"215":1,"235":3,"392":1,"576":1,"577":1,"598":1,"603":1,"634":1,"672":1,"803":1,"917":1,"952":1,"1526":1,"1766":5,"1871":1,"1880":1,"1999":1,"2313":1,"2319":3}}],["환경으로",{"2":{"502":1}}],["환경을",{"2":{"474":1,"475":1,"544":1,"1729":1}}],["환경이",{"2":{"474":1,"512":1}}],["환경별",{"0":{"361":1,"473":1,"642":1,"1170":1,"1185":1,"1735":1},"1":{"362":1,"1171":1,"1172":1},"2":{"375":1,"434":1,"437":1,"453":1,"473":1,"551":1,"747":1,"749":1,"750":1,"1735":1}}],["환경별로",{"2":{"238":1,"1166":1,"1185":1}}],["환경에서만",{"2":{"1195":1}}],["환경에서",{"2":{"857":1,"1697":1,"1701":1}}],["환경에서는",{"2":{"243":1,"492":1,"946":1,"1236":1,"1252":1,"1487":1,"1697":1}}],["환경에",{"2":{"249":1,"473":1,"494":1,"1735":1}}],["환경",{"0":{"299":1,"340":1,"459":1,"470":1,"475":1,"544":1,"1165":1,"1167":1,"1168":1,"1169":1,"1171":1,"1172":1,"1202":1,"1485":1,"1507":1,"1510":1,"1695":1,"1725":1,"1726":1,"1730":1,"1734":1,"1749":1,"1755":1,"1776":1,"2058":1,"2179":1},"1":{"471":1,"472":1,"476":1,"477":1,"478":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1172":1,"1173":1,"1731":1,"1732":1,"1733":1,"1734":1,"1735":2,"1736":1,"1737":1,"1738":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1,"1745":1,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1},"2":{"239":3,"252":1,"290":3,"427":1,"435":1,"443":3,"459":1,"460":1,"473":3,"474":1,"539":2,"551":3,"552":1,"642":3,"750":6,"766":1,"773":3,"832":1,"1167":4,"1173":2,"1185":1,"1202":1,"1485":1,"1487":2,"1507":1,"1510":1,"1652":1,"1674":1,"1692":1,"1726":1,"1729":1,"1734":1,"1735":4,"1736":1,"1749":2,"1750":1,"1754":1,"1755":1,"1776":2,"1816":1,"1845":1,"2040":1,"2058":1,"2179":1}}],["환경의",{"2":{"114":1}}],["환경과",{"2":{"114":1}}],["운영",{"0":{"470":1,"1720":1},"1":{"471":1,"472":1},"2":{"114":1,"239":1,"243":1,"290":1,"443":1,"473":1,"492":1,"551":1,"642":1,"643":1,"750":2,"773":1,"946":1,"1697":1,"1720":1}}],["유휴",{"2":{"634":1}}],["유지되지",{"0":{"2168":1}}],["유지되므로",{"2":{"1847":1}}],["유지됩니다",{"2":{"1239":1,"1411":1,"1479":1}}],["유지보수",{"2":{"432":1}}],["유지보수성",{"2":{"432":1}}],["유지",{"2":{"432":1,"1563":1}}],["유틸",{"2":{"392":1,"1752":2}}],["유틸리티를",{"2":{"784":1,"896":1}}],["유틸리티입니다",{"2":{"212":1,"235":1,"236":1,"1872":1,"2322":1}}],["유틸리티",{"0":{"166":1,"204":1,"232":1,"392":1,"605":1,"677":1,"697":1,"784":1,"895":1,"966":1,"1538":1,"1658":1,"1707":1,"1766":1,"1827":1,"1867":1,"2033":1,"2131":1,"2156":1,"2199":1,"2203":1,"2271":1,"2321":1},"1":{"167":1,"205":1,"206":1,"207":1,"208":1,"209":1,"233":1,"234":1,"235":1,"236":1,"237":1,"606":1,"607":1,"608":1,"609":1,"678":1,"698":1,"785":1,"786":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"896":1,"967":1,"968":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"985":1,"986":1,"987":1,"1659":1,"1660":1,"1661":1,"1868":1,"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"2132":1,"2133":1,"2134":1,"2135":1,"2136":1,"2137":1,"2138":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":2,"2205":2,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2222":1,"2223":1,"2224":1,"2225":1,"2226":1,"2227":1,"2272":1,"2273":1,"2274":1,"2275":1,"2276":1,"2277":1,"2278":1,"2279":1,"2280":1,"2281":1,"2282":1,"2283":1,"2284":1,"2285":1,"2322":1,"2323":1,"2324":1,"2325":1,"2326":1,"2327":1,"2328":1,"2329":1,"2330":1,"2331":1,"2332":1,"2333":1,"2334":1},"2":{"151":1,"160":1,"226":1,"231":1,"232":1,"233":1,"368":1,"377":1,"425":1,"439":2,"448":1,"514":1,"540":1,"541":2,"554":3,"577":3,"598":12,"604":1,"668":1,"678":1,"688":1,"807":1,"819":1,"927":1,"928":1,"929":1,"966":1,"985":1,"987":1,"1570":1,"1572":1,"1652":1,"1658":1,"1659":2,"1676":1,"1766":3,"1773":1,"1774":2,"1778":1,"1781":1,"1817":6,"1820":2,"1840":1,"1858":2,"1865":2,"1868":1,"1871":1,"1874":1,"2033":1,"2198":1,"2200":1,"2235":1,"2254":1,"2263":1,"2270":1,"2272":2,"2284":1,"2285":1,"2299":1,"2311":1,"2320":1}}],["유사하지만",{"2":{"104":1}}],["유효한",{"2":{"2220":1}}],["유효하면",{"2":{"2220":1}}],["유효하지",{"2":{"9":1,"15":1}}],["유효성을",{"2":{"2297":1,"2318":1}}],["유효성",{"2":{"235":1,"577":1,"634":1,"1999":1}}],["유효기간",{"2":{"9":1,"11":1,"12":1,"103":1,"810":1,"811":1,"942":1,"943":1}}],["사이의",{"2":{"2210":1,"2243":1}}],["사이드바가",{"2":{"1467":2}}],["사이드바의",{"2":{"1456":1}}],["사이드바에",{"2":{"1116":1}}],["사이드바",{"0":{"1114":1,"1455":1},"1":{"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1121":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1},"2":{"1082":1,"1088":1,"1456":1,"1458":2,"1460":1,"1461":1,"1463":2,"1464":1,"1466":2,"1468":2,"1469":1,"1660":1,"1909":1,"1917":4,"1923":1,"2017":1,"2029":1}}],["사업장",{"2":{"1945":1,"1969":2}}],["사원명",{"2":{"1974":1}}],["사원코드",{"2":{"1974":1}}],["사원별",{"2":{"1945":1,"1949":1}}],["사원번호",{"2":{"1609":1,"2258":1}}],["사원",{"2":{"658":1,"1969":4,"2010":3,"2268":1}}],["사양",{"0":{"471":1,"1722":1,"1723":1}}],["사항",{"0":{"131":1},"1":{"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1},"2":{"1715":1}}],["사번으로",{"2":{"119":1}}],["사번을",{"2":{"104":1}}],["사번",{"2":{"103":1,"104":2,"119":1}}],["사용을",{"2":{"2274":1}}],["사용유무",{"2":{"1981":2}}],["사용됩니다",{"2":{"1091":1,"1372":1,"1373":1,"1374":1,"2028":1,"2029":1,"2030":1,"2109":2}}],["사용되는",{"2":{"1080":1,"1094":1,"1468":1,"1658":1,"1668":1,"1766":1,"1819":1,"1820":1,"1854":1,"1868":1,"1993":1,"2200":1}}],["사용량",{"2":{"629":1}}],["사용해야",{"2":{"461":1}}],["사용법은",{"2":{"2116":1}}],["사용법을",{"2":{"1711":1,"1786":1}}],["사용법과",{"2":{"541":1,"1761":1}}],["사용법",{"0":{"592":1,"1515":1,"1590":1,"1630":1,"1631":1,"1640":1,"1645":1,"2060":1,"2069":1,"2124":1},"1":{"593":1,"594":1,"595":1,"1591":1,"1592":1,"1593":1,"1594":1,"1632":1,"1633":1,"1634":1,"1635":1,"1641":1,"1642":1,"1643":1,"1644":1,"1646":1,"1647":1,"1648":1,"1649":1,"1650":1,"2061":1,"2062":1,"2063":1,"2064":1},"2":{"282":1,"987":1,"1046":1,"1756":2,"1759":1,"1763":1,"1770":1,"1771":1,"1772":2,"1781":1,"1906":1,"1975":1,"1991":1}}],["사용합니다",{"2":{"263":1,"266":1,"283":1,"330":1,"348":1,"454":1,"839":1,"843":1,"851":1,"1166":1,"1195":1,"1197":1,"1224":1,"1491":1,"1527":1,"1732":1,"1745":1,"1747":1,"1758":1,"1829":1,"1973":1,"1989":1,"2073":1,"2077":1,"2103":1,"2140":1}}],["사용한",{"2":{"211":1,"385":2,"562":1,"634":1,"670":1,"1680":1,"1908":1,"1981":1,"2229":1,"2256":1}}],["사용하거나",{"2":{"1786":1,"2177":1}}],["사용하지",{"2":{"1497":1,"1848":1}}],["사용하려면",{"2":{"1317":1,"2282":1}}],["사용하므로",{"2":{"1044":1}}],["사용하기",{"0":{"1041":1,"1703":1,"1706":1,"1707":1},"1":{"1042":1,"1043":1,"1704":1,"1705":1},"2":{"1042":1,"1055":1,"1075":1,"1166":1}}],["사용하세요",{"2":{"492":1,"1164":1,"1221":1,"1487":1,"1539":1,"1697":1,"2333":1}}],["사용하는",{"0":{"1783":1,"1784":1},"2":{"466":1,"485":1,"543":1,"567":1,"597":1,"776":1,"900":1,"966":1,"1022":1,"1045":1,"1267":1,"1284":1,"1728":1,"1732":1,"1773":1,"1841":1,"1890":1,"1941":1,"2019":1,"2272":1}}],["사용하며",{"2":{"139":1,"1288":1}}],["사용하여",{"2":{"9":1,"32":1,"62":1,"169":1,"174":1,"175":1,"328":1,"590":1,"701":1,"795":1,"808":1,"820":1,"853":1,"891":1,"1073":1,"1106":1,"1159":1,"1164":1,"1185":1,"1208":1,"1224":1,"1231":1,"1255":1,"1316":1,"1548":1,"1568":1,"1576":1,"1614":1,"1743":1,"1744":1,"1974":1,"1990":1,"2061":1,"2066":1,"2079":1,"2118":1,"2122":1,"2125":1,"2127":1,"2322":1,"2331":1}}],["사용할",{"2":{"22":1,"69":1,"480":1,"832":1,"1007":1,"1012":1,"1026":1,"1033":1,"1041":1,"1057":1,"1173":1,"1537":1,"1538":1,"1591":1,"1635":1,"1646":1,"1707":1,"1766":1,"2079":1,"2200":1,"2216":2,"2283":1}}],["사용자별",{"2":{"2025":1}}],["사용자입니다",{"2":{"1385":1}}],["사용자가",{"2":{"1385":1}}],["사용자에게",{"2":{"1310":1,"1320":1,"1536":1,"1539":1}}],["사용자명",{"2":{"510":1}}],["사용자의",{"2":{"57":2,"120":1,"421":1,"859":1,"862":1}}],["사용자",{"0":{"103":1,"116":1,"119":1,"1536":1},"1":{"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1},"2":{"15":1,"44":1,"46":1,"52":1,"56":1,"57":2,"59":1,"94":1,"99":1,"103":4,"104":2,"115":1,"116":1,"119":1,"120":1,"121":1,"122":1,"130":1,"142":1,"421":2,"519":1,"859":2,"861":2,"1239":1,"1447":1,"1618":1,"1758":1,"1760":1,"1794":2,"1797":1,"1936":1,"2204":1,"2226":1,"2267":1,"2268":1,"2319":2}}],["사용",{"0":{"133":1,"134":1,"149":1,"163":1,"172":1,"181":1,"198":1,"222":1,"230":1,"278":1,"290":1,"318":1,"326":1,"355":1,"541":1,"594":1,"624":1,"625":1,"626":1,"662":1,"691":1,"692":1,"696":1,"720":1,"741":1,"786":1,"789":1,"879":1,"883":1,"894":1,"914":1,"933":1,"970":1,"974":1,"978":1,"982":1,"986":1,"1006":1,"1011":1,"1016":1,"1020":1,"1027":1,"1035":1,"1036":1,"1040":1,"1043":1,"1056":1,"1063":1,"1072":1,"1077":1,"1083":1,"1091":1,"1098":1,"1105":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":1,"1169":1,"1194":1,"1218":1,"1250":1,"1277":1,"1278":1,"1303":1,"1316":1,"1317":1,"1340":1,"1351":1,"1386":1,"1399":1,"1410":1,"1420":1,"1428":1,"1434":1,"1440":1,"1445":1,"1454":1,"1462":1,"1463":1,"1464":1,"1480":1,"1523":1,"1537":1,"1543":1,"1547":1,"1594":1,"1643":1,"1644":1,"1704":1,"1705":1,"1709":1,"1761":1,"1830":1,"1844":1,"1845":1,"1854":1,"1855":1,"1881":1,"1882":1,"1883":1,"1884":1,"1919":1,"1920":1,"1921":1,"1958":1,"1974":1,"1990":1,"2062":1,"2073":1,"2078":1,"2098":1,"2103":1,"2106":1,"2109":1,"2120":1,"2223":1,"2262":1,"2281":1,"2283":1},"1":{"182":1,"183":1,"199":1,"223":1,"224":1,"279":1,"280":1,"281":1,"356":1,"357":1,"625":1,"626":1,"663":1,"664":1,"692":1,"693":1,"694":1,"721":1,"722":1,"742":1,"743":1,"1219":1,"1220":1,"1278":1,"1279":1,"1280":1,"1281":1,"1341":1,"1342":1,"1352":1,"1387":1,"1388":1,"1389":1,"1463":1,"1464":1,"1762":1,"1763":1,"1764":1,"1765":1,"1882":1,"1883":1,"1884":1,"1920":1,"1921":1,"2224":1,"2225":1,"2226":1,"2282":1,"2283":1},"2":{"9":2,"22":1,"25":1,"30":1,"31":1,"45":1,"46":1,"51":1,"56":2,"57":1,"71":1,"72":1,"76":1,"79":1,"83":1,"94":1,"103":2,"104":1,"105":1,"119":1,"120":1,"121":1,"186":1,"205":1,"206":1,"212":1,"214":1,"384":2,"385":1,"390":1,"393":2,"496":1,"509":1,"544":1,"565":1,"570":1,"600":1,"601":1,"604":1,"609":1,"612":1,"616":1,"617":1,"629":1,"648":1,"649":1,"665":1,"670":1,"678":1,"698":1,"699":1,"704":1,"728":1,"729":1,"750":1,"905":1,"906":1,"955":1,"999":1,"1082":1,"1162":1,"1164":1,"1236":4,"1301":1,"1311":1,"1318":1,"1338":1,"1382":1,"1383":1,"1385":2,"1409":1,"1426":1,"1427":1,"1460":1,"1461":1,"1475":1,"1491":1,"1534":1,"1538":1,"1539":1,"1565":2,"1567":1,"1613":1,"1633":1,"1715":1,"1747":1,"1781":1,"1830":1,"1836":1,"1837":1,"1838":1,"1840":1,"1841":1,"1842":1,"1855":1,"1879":2,"1880":1,"1885":1,"1893":2,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":1,"1945":1,"1949":1,"1969":1,"1981":1,"1983":1,"1986":1,"1997":1,"1999":1,"2001":1,"2003":1,"2005":1,"2006":1,"2009":1,"2014":1,"2076":1,"2147":1,"2171":1,"2177":1,"2204":1,"2205":1,"2207":1,"2208":1,"2209":1,"2210":1,"2212":1,"2214":1,"2216":1,"2218":1,"2220":1,"2221":1,"2222":1,"2231":1,"2232":1,"2233":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":2,"2276":1,"2280":1,"2325":1,"2326":1,"2330":1}}],["관계없이",{"2":{"846":1}}],["관련된",{"2":{"1563":1}}],["관련",{"0":{"1046":1,"1222":1,"1237":1,"1253":1,"1265":1,"1290":1,"1304":1,"1321":1,"1343":1,"1354":1,"1363":1,"1375":1,"1391":1,"1469":1,"1540":1,"1798":1,"1810":1,"1849":1,"1866":1,"1874":1,"1888":1,"1906":1,"1923":1,"1959":1,"1975":1,"1991":1,"2031":1,"2164":1,"2198":1,"2206":1,"2227":1,"2235":1,"2254":1,"2263":1,"2270":1,"2285":1,"2299":1,"2311":1,"2320":1,"2334":1},"1":{"2165":1,"2166":1,"2167":1,"2168":1,"2207":1,"2208":1,"2209":1,"2210":1},"2":{"100":1,"116":1,"130":1,"202":1,"421":1,"526":1,"582":1,"598":1,"614":1,"621":1,"673":1,"684":1,"702":1,"726":1,"859":1,"861":1,"896":1,"1022":1,"1071":1,"1563":1,"1659":1,"1660":1,"1663":1,"1665":2,"1666":1,"1667":1,"1690":1,"1691":1,"1780":1,"1802":1,"1810":1,"1814":1,"1820":1,"1864":3,"1872":1,"1876":1,"1911":1,"1913":1,"1929":1,"1934":1,"1942":3,"1961":1,"1962":1,"1977":1,"2272":1}}],["관리됩니다",{"2":{"1904":1}}],["관리는",{"2":{"1758":1}}],["관리하고",{"2":{"1471":1}}],["관리하는",{"2":{"1137":1,"1377":1,"1393":1,"1402":1,"1413":1,"1422":1,"1431":1,"1437":1,"1442":1,"1447":1,"1456":1,"1471":1}}],["관리되므로",{"2":{"1400":1}}],["관리되지",{"2":{"759":1}}],["관리해야",{"2":{"1221":1}}],["관리합니다",{"2":{"1073":1,"1224":1,"1239":1,"1377":1,"1615":1,"1728":1,"1743":1,"1744":1,"1758":1,"1819":1,"1821":1,"1854":1,"1908":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1986":1,"1987":1,"2061":1,"2122":1,"2127":1}}],["관리에",{"2":{"266":1}}],["관리자용",{"2":{"1955":1}}],["관리자에게",{"2":{"1528":1}}],["관리자",{"0":{"104":1,"520":1,"1948":1},"1":{"1949":1},"2":{"60":1,"104":4,"261":1,"388":1,"440":1,"516":1,"518":1,"520":1,"555":1,"579":1,"838":1,"1664":1,"1775":1,"1795":1,"1895":1,"1937":1,"1942":1}}],["관리",{"0":{"40":1,"53":1,"116":1,"588":1,"645":1,"1090":1,"1232":1,"1238":1,"1465":1,"1615":1,"1728":1,"1758":1,"1771":1,"1803":1,"1944":1,"1980":1,"2121":1},"1":{"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"1233":1,"1234":1,"1235":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1466":1,"1467":1,"1804":1,"1805":1,"1806":1,"1807":1,"1808":1,"1809":1,"1810":1,"1945":1,"1946":1,"1947":1,"1981":1,"1982":1,"1983":1,"1984":1,"2122":1,"2123":1,"2124":1,"2125":1},"2":{"18":1,"39":1,"52":1,"61":1,"99":1,"111":1,"115":1,"130":1,"141":2,"142":1,"266":1,"380":1,"390":1,"421":1,"430":2,"439":1,"465":1,"469":2,"518":1,"519":1,"527":1,"554":1,"568":1,"598":1,"602":1,"618":1,"621":1,"629":1,"645":1,"646":2,"648":1,"666":1,"835":1,"849":1,"859":1,"861":1,"905":1,"906":1,"1088":1,"1140":2,"1221":1,"1222":1,"1267":1,"1439":1,"1469":1,"1599":1,"1611":1,"1657":1,"1660":8,"1664":4,"1679":1,"1680":3,"1686":2,"1689":2,"1752":1,"1756":1,"1758":9,"1759":1,"1760":2,"1764":1,"1766":1,"1773":3,"1775":1,"1798":1,"1804":1,"1810":1,"1822":1,"1849":1,"1862":1,"1891":1,"1893":1,"1908":1,"1923":1,"1942":2,"1949":2,"1959":1,"1962":3,"1965":2,"1966":2,"1967":2,"1969":1,"1971":2,"1978":1,"1981":1,"1982":1,"2015":1,"2034":1,"2086":1,"2116":1}}],["하이패스",{"2":{"1808":1,"1942":3}}],["하이픈을",{"2":{"2296":1}}],["하이픈",{"2":{"98":1,"744":1}}],["하드웨어",{"0":{"1721":1},"1":{"1722":1,"1723":1}}],["하세요",{"2":{"1320":1,"1539":1}}],["하지",{"2":{"1264":1}}],["하지만",{"2":{"1263":1,"1303":1,"1522":1}}],["하위에",{"2":{"1587":1,"1598":1}}],["하위",{"2":{"560":1,"1864":1,"1994":1}}],["하는",{"2":{"540":1,"1024":1,"1757":1}}],["하나의",{"2":{"1686":1}}],["하나를",{"2":{"461":1,"466":1,"480":1}}],["하나라도",{"2":{"31":1}}],["하고",{"2":{"94":1}}],["최상위",{"2":{"1860":1}}],["최신",{"2":{"1680":1,"1719":4}}],["최적화하세요",{"2":{"2175":1}}],["최적화된",{"2":{"1680":1,"2082":1}}],["최적화",{"0":{"1184":1,"1495":1,"1499":1,"1505":1,"2175":1},"1":{"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1},"2":{"1499":3,"1501":1,"1505":1,"1779":2,"1848":1,"2082":1}}],["최소한의",{"2":{"2028":1}}],["최소",{"0":{"1722":1},"2":{"634":1,"1714":1,"1716":1}}],["최소화",{"2":{"432":1}}],["최우선으로",{"2":{"681":1}}],["최우선",{"2":{"211":1,"583":1,"638":1,"670":1,"675":1,"796":1}}],["최종",{"2":{"94":1}}],["최대",{"2":{"22":1,"634":1,"804":1,"953":1}}],["상황을",{"2":{"1306":1}}],["상황에",{"2":{"1275":1}}],["상단의",{"2":{"873":1}}],["상수",{"0":{"610":1,"1828":1},"1":{"611":1},"2":{"598":2,"611":5,"1571":1,"1582":1,"1676":1}}],["상수명",{"2":{"449":1,"1612":1}}],["상속",{"2":{"379":1,"384":1}}],["상세한",{"2":{"1786":1,"2116":1}}],["상세",{"0":{"1817":1,"1863":1},"1":{"1864":1,"1865":1},"2":{"93":1,"197":1,"397":1,"541":1,"596":1,"862":1,"1150":1,"1435":1,"1677":1,"1761":1,"1773":1,"1831":1,"1874":1,"1959":1,"1970":1,"1975":1,"1991":1,"2024":1,"2031":5}}],["상태는",{"2":{"1635":1}}],["상태로",{"2":{"1467":1}}],["상태가",{"0":{"2168":1},"2":{"1400":1}}],["상태를",{"2":{"1073":1,"1359":1,"1377":1,"1393":1,"1397":1,"1398":1,"1422":1,"1431":1,"1437":1,"1456":2,"1471":1,"1615":1,"1758":1,"1821":1,"1908":1,"1911":1,"1912":1,"1913":1,"1915":1,"1916":1,"1917":1,"2122":1,"2125":1}}],["상태",{"0":{"49":1,"97":1,"126":1,"138":1,"655":1,"656":1,"738":1,"1235":1,"1379":1,"1389":1,"1395":1,"1404":1,"1415":1,"1424":1,"1449":1,"1458":1,"1465":1,"1466":1,"1467":1,"1473":1,"1615":1,"1633":1,"1758":1,"1771":1,"2121":1,"2125":1,"2274":1},"1":{"1380":1,"1466":1,"1467":1,"2122":1,"2123":1,"2124":1,"2125":1},"2":{"45":2,"105":1,"393":1,"598":1,"687":1,"705":1,"1289":1,"1319":1,"1463":1,"1469":1,"1532":1,"1611":1,"1618":1,"1660":5,"1680":2,"1706":1,"1752":1,"1756":1,"1758":3,"1773":2,"1784":1,"1822":1,"1862":1,"1891":1,"1893":2,"1908":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1920":1,"1923":1,"2022":1,"2034":1,"2085":1,"2086":2,"2116":1,"2123":4,"2187":1}}],["분할을",{"2":{"2175":1}}],["분할합니다",{"2":{"1496":1}}],["분할",{"0":{"1496":1},"2":{"1184":1,"1505":1}}],["분류",{"2":{"861":1}}],["분당",{"2":{"804":1,"953":1}}],["분리하여",{"2":{"1819":1,"1854":1}}],["분리",{"2":{"431":1,"565":4,"1299":2}}],["분리되어",{"2":{"238":1}}],["분",{"2":{"93":1,"735":1}}],["특별",{"2":{"1314":2}}],["특별한",{"2":{"1289":1,"1303":1,"1525":1}}],["특수",{"2":{"98":1,"604":1,"639":1,"744":1}}],["특정",{"2":{"93":1,"502":1,"681":1,"734":1,"1243":1,"1244":1,"1246":1,"1452":1,"1453":1,"1758":1,"1821":1,"1908":1,"2208":1,"2328":1}}],["특징",{"0":{"426":1,"909":1,"1082":1,"1096":1,"1680":1,"2077":1,"2086":1},"1":{"427":1,"428":1,"429":1,"430":1,"431":1},"2":{"32":1,"104":1,"834":1,"835":1,"836":1,"1754":1,"2028":1,"2029":1,"2030":1}}],["직군",{"2":{"1969":2}}],["직원목록",{"2":{"2258":1,"2259":1}}],["직원이",{"2":{"1941":1}}],["직원",{"2":{"1050":1,"1347":1,"1475":1,"1762":1,"1947":1}}],["직렬화",{"0":{"275":1,"276":1,"277":1},"1":{"276":1,"277":1},"2":{"635":1,"904":1,"923":2}}],["직급",{"2":{"92":1,"93":1}}],["직접",{"0":{"625":1,"1464":1,"2262":1},"2":{"27":1,"72":1,"385":1,"454":1,"1007":1,"1012":1,"1289":1,"1385":1,"1390":1,"1633":1,"1646":1,"1701":1,"1732":1,"1846":1,"1941":1}}],["홍길동∥30",{"2":{"2197":1,"2294":1}}],["홍길동",{"2":{"92":1,"94":1,"1220":1,"1240":1,"1242":1,"1245":1,"1278":1,"1548":1,"1705":1,"2120":1,"2193":2,"2197":1,"2258":1,"2262":1,"2294":1}}],["즉시",{"0":{"742":1},"2":{"92":1,"93":1,"94":4,"98":2,"731":2,"734":1,"744":2}}],["폰트가",{"2":{"756":1}}],["폰트를",{"2":{"195":1}}],["폰트는",{"2":{"86":1,"889":1}}],["폰트",{"0":{"86":1,"192":1,"193":1,"194":1,"195":1,"717":1,"718":1,"719":1,"889":1},"1":{"193":1,"194":1,"195":1,"718":1,"719":1},"2":{"86":1,"200":2,"446":1,"551":1,"711":1,"756":1,"886":1,"889":1,"1499":1,"1669":1,"1891":1,"1903":2,"1926":1,"1931":1}}],["으로",{"2":{"83":1,"104":1,"2278":1}}],["소수점",{"2":{"2212":2}}],["소프트웨어",{"0":{"1713":1},"1":{"1714":1,"1715":1,"1716":1}}],["소개",{"0":{"425":1,"1679":1},"2":{"1754":1}}],["소문자",{"2":{"87":1,"449":1,"565":1,"604":1}}],["소문자로",{"2":{"78":1,"185":1,"200":1,"565":1,"604":1,"713":1,"723":1}}],["소스맵",{"2":{"1184":1}}],["소스",{"0":{"438":1,"550":1,"553":1,"1654":1},"1":{"439":1,"440":1,"441":1,"551":1,"552":1,"554":1,"555":1,"556":1,"1655":1,"1656":1,"1657":1},"2":{"44":2,"478":1,"549":2,"551":1,"557":1,"560":1,"1652":1,"1654":1,"1816":1,"1857":1}}],["스네이크케이스를",{"2":{"2291":1}}],["스네이크케이스로",{"2":{"2290":1}}],["스피너",{"2":{"1838":1}}],["스페이스",{"2":{"1565":1}}],["스테이징",{"0":{"1181":1,"1508":1,"1512":1,"1739":1},"1":{"1509":1,"1510":1,"1511":1,"1512":1},"2":{"1167":1,"1510":1,"1512":1,"1735":1,"1779":2}}],["스토어들",{"2":{"1660":1}}],["스토어의",{"2":{"1635":1}}],["스토어와",{"2":{"1468":1}}],["스토어와의",{"0":{"1468":1}}],["스토어는",{"2":{"1468":1,"1628":1,"1758":1,"1821":1,"1908":1}}],["스토어입니다",{"2":{"1377":1,"1393":1,"1402":1,"1413":1,"1422":1,"1431":1,"1437":1,"1442":1,"1447":1,"1456":1,"1471":1}}],["스토어에",{"2":{"1313":1,"1535":1}}],["스토어에서",{"2":{"1209":1,"1350":1}}],["스토어를",{"0":{"2185":1},"2":{"1239":1,"1922":1,"2001":1}}],["스토어",{"0":{"1073":1,"1350":1,"1376":1,"1392":1,"1401":1,"1412":1,"1421":1,"1429":1,"1430":1,"1436":1,"1441":1,"1446":1,"1455":1,"1470":1,"1562":1,"1627":1,"1628":1,"1629":1,"1631":1,"1632":1,"1706":1,"1784":1,"1907":1,"1910":1,"1919":1,"1922":1,"2034":1,"2087":1,"2123":1,"2147":1,"2157":1,"2332":1},"1":{"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1,"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1,"1402":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1,"1413":1,"1414":1,"1415":1,"1416":1,"1417":1,"1418":1,"1419":1,"1420":1,"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1,"1428":1,"1430":1,"1431":2,"1432":2,"1433":2,"1434":2,"1435":2,"1436":1,"1437":2,"1438":2,"1439":2,"1440":2,"1441":1,"1442":2,"1443":2,"1444":2,"1445":2,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"1452":1,"1453":1,"1454":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1471":1,"1472":1,"1473":1,"1474":1,"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1628":1,"1629":1,"1630":1,"1632":1,"1633":1,"1634":1,"1635":1,"1908":1,"1909":1,"1910":1,"1911":2,"1912":2,"1913":2,"1914":2,"1915":2,"1916":2,"1917":2,"1918":2,"1919":1,"1920":2,"1921":2,"1922":1,"1923":1},"2":{"1237":1,"1253":1,"1354":1,"1469":1,"1570":1,"1660":1,"1676":1,"1706":2,"1752":1,"1756":1,"1758":1,"1771":4,"1774":1,"1781":1,"1817":1,"1821":1,"1858":1,"1865":2,"1908":1,"1909":8,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1923":8,"2034":4,"2147":1,"2185":2,"2334":1}}],["스토리지",{"2":{"105":1}}],["스타일입니다",{"2":{"1838":1,"1840":1,"1841":1,"1842":1}}],["스타일이",{"2":{"1824":1}}],["스타일링",{"0":{"1708":1,"1772":1},"1":{"1709":1,"1710":1}}],["스타일은",{"2":{"1642":1}}],["스타일을",{"2":{"1044":1,"1638":1,"1639":1}}],["스타일",{"0":{"1044":1,"1565":1,"1638":1,"1639":1,"1641":1,"1642":1,"1710":1},"2":{"1034":1,"1044":1,"1558":1,"1581":1,"1588":1,"1611":1,"1637":3,"1638":1,"1652":1,"1669":1,"1772":2,"1838":1,"1840":1,"1841":1,"1842":2,"1858":1,"1899":1,"1928":1,"2030":1}}],["스크롤링을",{"2":{"1045":1}}],["스크래핑",{"2":{"969":1}}],["스크립트가",{"2":{"1672":1}}],["스크립트",{"0":{"1810":1,"1850":1},"1":{"1851":1,"1852":1,"1853":1,"1854":1,"1855":1},"2":{"761":1,"798":1,"936":1,"963":1,"1558":1,"1581":1,"1652":1,"1668":1,"1733":1,"1774":2,"1817":1,"1855":1,"1902":1,"2038":1}}],["스니핑",{"2":{"964":1}}],["스펙은",{"2":{"866":1}}],["스펙",{"0":{"865":1},"1":{"866":1,"867":1}}],["스케줄러",{"2":{"572":1,"598":1,"740":1}}],["스케줄러가",{"2":{"94":1,"98":1,"744":1}}],["스캔하도록",{"2":{"371":1}}],["스캔됩니다",{"2":{"264":1,"331":1,"844":1}}],["스캔",{"0":{"264":1},"2":{"451":2}}],["스트림",{"2":{"74":1,"75":1}}],["스택에",{"2":{"1773":1,"2116":1}}],["스택",{"0":{"433":1,"543":1,"1682":1,"1773":1},"1":{"1683":1,"1684":1,"1685":1},"2":{"34":2,"512":1}}],["8자리",{"2":{"2245":1}}],["8gb",{"2":{"1723":1}}],["800",{"2":{"1428":1}}],["80바이트",{"2":{"737":1}}],["8081",{"2":{"509":1,"999":1}}],["8080",{"2":{"144":1,"242":1,"245":1,"422":1,"472":1,"493":1,"506":2,"509":1,"542":1,"857":2,"866":1,"867":1,"921":1,"999":1,"1168":3,"1171":2,"1194":1,"1202":3,"1695":3,"1734":3}}],["8+7",{"2":{"459":2}}],["842",{"2":{"197":1}}],["8",{"0":{"508":1,"509":1,"510":1,"511":1,"591":1,"1706":1},"1":{"509":1,"510":1,"511":1},"2":{"74":1,"75":1,"165":1,"197":1,"242":1,"308":1,"333":1,"413":1,"459":1,"460":1,"535":1,"663":1,"693":1,"694":1,"753":1,"894":1,"1326":1,"1613":1,"1973":1}}],["허용할",{"2":{"761":2,"962":1}}],["허용된",{"2":{"221":1,"637":1,"680":1}}],["허용",{"2":{"73":1,"493":1,"637":1}}],["비어있으면",{"2":{"2204":1,"2205":1}}],["비어있는지",{"2":{"986":1,"2204":1,"2315":1}}],["비어있습니다",{"2":{"163":1,"891":1,"1707":1}}],["비동기이므로",{"2":{"2333":1}}],["비동기",{"0":{"1567":1},"2":{"699":2,"2333":1}}],["비활성화합니다",{"2":{"1398":1}}],["비활성화",{"2":{"217":1,"581":1,"636":1,"765":1,"964":1,"1033":1,"1250":1}}],["비즈니스용",{"2":{"580":2}}],["비즈니스",{"0":{"271":1,"274":1,"440":1,"441":1,"513":1,"555":1,"556":1,"1668":1},"1":{"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"525":1,"526":1,"527":1,"528":1,"529":1,"530":1,"531":1,"532":1,"533":1,"534":1,"535":1,"536":1},"2":{"130":2,"154":1,"364":1,"368":1,"372":1,"377":1,"380":1,"385":1,"397":1,"398":1,"405":1,"431":1,"434":2,"437":2,"448":2,"455":1,"456":1,"513":1,"514":1,"529":1,"532":1,"542":1,"551":2,"565":1,"566":1,"567":1,"596":1,"597":1,"635":1,"649":1,"687":1,"705":1,"729":1,"851":1,"1652":1,"1662":1,"1668":1,"1679":1,"1680":1,"1686":1,"1774":1,"1775":1,"1810":1,"1817":1,"1819":1,"1823":1,"1851":1,"1857":1,"1977":1,"1978":1,"2005":1}}],["비밀번호나",{"2":{"1252":1}}],["비밀번호는",{"2":{"699":1}}],["비밀번호를",{"2":{"103":1}}],["비밀번호",{"2":{"73":1,"103":1,"104":1,"510":1,"511":1,"699":1,"1001":1,"1173":1,"1697":1}}],["비용이",{"2":{"25":1,"629":1}}],["비용",{"2":{"25":1,"629":1}}],["암호화에",{"2":{"2109":1}}],["암호화가",{"2":{"1289":1,"1544":1}}],["암호화됩니다",{"2":{"1284":1,"1289":1,"1544":1,"2234":1}}],["암호화되고",{"2":{"1284":1}}],["암호화하여",{"2":{"1252":1}}],["암호화하고",{"2":{"1212":1}}],["암호화할",{"2":{"1215":1,"1217":1,"2231":1,"2233":1}}],["암호화합니다",{"2":{"1212":1,"1215":1,"1217":1,"2231":1,"2233":1}}],["암호화를",{"2":{"1208":1}}],["암호화",{"0":{"204":1,"223":1,"595":1,"605":1,"784":1,"954":1,"1207":1,"1209":1,"1210":1,"1214":1,"1219":1,"1220":1,"1282":1,"1283":1,"1284":1,"1296":1,"1298":1,"2107":1,"2133":1,"2163":1,"2228":1,"2234":1},"1":{"205":1,"206":1,"207":1,"208":1,"209":1,"606":1,"607":1,"608":1,"609":1,"785":1,"786":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"955":1,"956":1,"957":1,"958":1,"959":1,"1208":1,"1209":1,"1210":1,"1211":2,"1212":2,"1213":1,"1214":1,"1215":2,"1216":2,"1217":2,"1218":1,"1219":1,"1220":1,"1221":1,"1222":1,"1283":1,"1284":1,"2108":1,"2109":1,"2229":1,"2230":1,"2231":1,"2232":1,"2233":1,"2234":1,"2235":1},"2":{"73":1,"103":1,"203":1,"205":4,"206":2,"219":1,"223":1,"225":2,"226":1,"391":1,"428":1,"439":1,"540":2,"543":1,"554":1,"575":2,"595":1,"598":3,"606":1,"607":1,"609":1,"671":2,"784":1,"785":1,"786":1,"787":1,"788":1,"789":1,"807":1,"819":1,"955":3,"956":2,"1208":1,"1209":2,"1212":2,"1219":1,"1220":1,"1221":3,"1250":1,"1267":1,"1272":2,"1273":2,"1282":1,"1283":1,"1289":1,"1299":4,"1301":1,"1657":1,"1685":1,"1759":2,"1760":3,"1766":3,"1773":1,"1862":1,"2068":1,"2095":1,"2109":1,"2133":1,"2163":2,"2229":1,"2235":1}}],["암호화된",{"0":{"73":1,"1544":1},"2":{"73":1,"219":2,"671":2,"704":1,"801":1,"1215":1,"1217":1,"2231":1,"2233":1}}],["창",{"2":{"1765":1}}],["창에",{"2":{"1094":1,"1374":1}}],["창에서",{"2":{"72":1,"1096":1,"2030":1}}],["창의성",{"2":{"22":1}}],["동시에",{"2":{"1261":1}}],["동시",{"0":{"1261":1,"1336":1}}],["동적으로",{"2":{"1345":1,"1369":1,"1604":1,"1623":1,"1886":1,"2129":1}}],["동적",{"0":{"312":1,"1097":1,"1344":1,"1346":1,"1349":1,"1352":1,"1369":1,"1441":1,"1604":1,"1623":1,"1845":1,"2129":1},"1":{"313":1,"314":1,"1345":1,"1346":1,"1347":2,"1348":2,"1349":2,"1350":1,"1351":1,"1352":1,"1353":1,"1354":1,"1442":1,"1443":1,"1444":1,"1445":1},"2":{"1096":1,"1105":1,"1112":1,"1119":1,"1363":1,"1375":1,"1442":1,"1845":1,"2005":1,"2090":1,"2186":1}}],["동일한",{"2":{"1164":1,"1353":1}}],["동일하게",{"2":{"106":1}}],["동일",{"2":{"72":1,"73":2,"74":1,"75":1,"104":1,"106":1,"1612":1}}],["동작은",{"2":{"681":1}}],["동작",{"2":{"9":1,"46":1,"56":1,"57":1,"70":2,"71":1,"94":1,"103":1,"105":1,"119":1,"215":1,"219":1,"670":1,"671":1,"672":1,"801":1,"803":1,"952":1,"2013":1}}],["$1",{"2":{"1884":1}}],["$t",{"2":{"1883":2}}],["$axios",{"2":{"1861":1}}],["$f",{"2":{"195":1,"197":2}}],["$primary",{"2":{"1643":1}}],["$p",{"2":{"79":2,"83":1,"186":2}}],["$",{"2":{"71":1,"637":2,"649":1,"729":2,"1230":1,"1260":1,"1261":1,"1273":1,"1276":2,"1295":1,"1336":1,"1337":1,"2224":1}}],["`차이",{"2":{"2224":1}}],["```",{"2":{"1788":1}}],["`bearer",{"2":{"1230":1,"1260":1,"1261":1,"1273":1,"1276":2,"1295":1,"1336":1,"1337":1}}],["`",{"2":{"71":2,"505":1,"1230":1,"1260":1,"1261":1,"1273":1,"1276":2,"1295":1,"1336":1,"1337":1}}],["`f",{"2":{"46":1}}],["급여",{"2":{"71":1,"1970":1}}],["복잡한",{"2":{"882":1}}],["복원",{"2":{"801":1}}],["복지",{"0":{"521":1},"2":{"388":1,"440":1,"516":1,"521":1,"555":1}}],["복사합니다",{"2":{"1847":1,"2196":1}}],["복사되므로",{"2":{"1844":1}}],["복사되는",{"2":{"1670":1,"1833":1}}],["복사됩니다",{"2":{"1833":1}}],["복사",{"2":{"71":2,"73":1,"83":1,"190":1,"344":1,"503":1,"716":1,"981":1,"982":1,"1816":1}}],["복호화는",{"2":{"1221":1}}],["복호화를",{"2":{"1208":1,"2109":1}}],["복호화합니다",{"2":{"801":1,"1216":1,"2232":1}}],["복호화하고",{"2":{"801":1}}],["복호화하는",{"2":{"219":1}}],["복호화된",{"2":{"219":1,"671":2,"1216":1,"2232":1}}],["복호화됩니다",{"2":{"87":1,"200":1,"1213":1,"1282":1}}],["복호화할",{"2":{"68":1,"1216":1,"2232":1}}],["복호화",{"0":{"68":1,"84":1,"191":1,"218":1,"224":1,"800":1,"1207":1,"1213":1,"1220":1,"1282":1,"2228":1},"1":{"219":1,"801":1,"1208":1,"1209":1,"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1,"1217":1,"1218":1,"1219":1,"1220":1,"1221":1,"1222":1,"1283":1,"1284":1,"2229":1,"2230":1,"2231":1,"2232":1,"2233":1,"2234":1,"2235":1},"2":{"84":3,"87":1,"103":1,"191":1,"200":1,"203":1,"205":2,"206":1,"219":1,"223":1,"225":1,"554":1,"583":1,"587":1,"595":1,"606":1,"607":1,"609":1,"638":1,"668":1,"671":3,"676":1,"723":2,"786":1,"787":1,"789":1,"801":2,"955":2,"956":1,"1209":1,"1220":1,"1267":1,"1283":1,"1657":1,"1760":1,"1766":1,"1862":1,"2068":1,"2095":1,"2133":1,"2163":1,"2229":1,"2235":1}}],["웹앱",{"2":{"70":1,"82":1,"715":1}}],["웹",{"0":{"82":1,"189":1,"1484":1},"2":{"70":2,"292":1,"582":1,"598":1,"611":1,"904":1,"969":1,"1484":1,"1506":1,"1891":1,"1903":1}}],["이는",{"2":{"2274":1}}],["이수",{"2":{"1946":1}}],["이력",{"2":{"1946":4,"1953":1,"1970":1,"2021":1,"2025":1}}],["이제",{"2":{"1786":1}}],["이루어지며",{"2":{"1759":1}}],["이며",{"2":{"1647":1,"2142":1}}],["이벤트",{"0":{"1593":1},"2":{"1062":1,"1572":1,"2013":1}}],["이해가",{"2":{"1786":1}}],["이해합니다",{"2":{"1774":1}}],["이해하기",{"0":{"1754":1},"2":{"539":1}}],["이해했다면",{"2":{"456":1,"1677":1,"1831":1}}],["이미",{"2":{"509":1,"999":1,"1261":1,"1276":1,"1336":1,"1491":1,"1525":1,"1747":1}}],["이미지입니다",{"2":{"1837":1}}],["이미지가",{"2":{"119":1}}],["이미지는",{"2":{"87":1,"122":1,"200":1,"723":1}}],["이미지를",{"2":{"70":1,"81":1,"119":1,"2268":1}}],["이미지",{"0":{"70":1,"80":1,"81":1,"82":1,"119":1,"187":1,"188":1,"189":1,"715":1},"1":{"81":1,"82":1,"188":1,"189":1},"2":{"70":3,"87":1,"119":4,"123":2,"200":1,"519":1,"611":2,"658":1,"715":2,"723":1,"886":1,"1499":1,"1652":1,"1669":1,"1766":1,"1834":1,"1926":1,"1931":1,"2268":1}}],["이상이어야",{"2":{"1732":1}}],["이상의",{"2":{"1722":1,"1723":1}}],["이상",{"2":{"459":1,"460":1,"463":1,"464":1,"465":1,"466":2,"468":2,"471":5,"835":1,"1714":1,"1715":1,"1716":1,"1720":2,"1722":2,"1723":2}}],["이",{"0":{"538":1,"1752":1},"2":{"365":1,"432":1,"436":1,"475":1,"538":1,"1679":1,"1686":1,"1693":1,"1728":1,"1733":1,"1833":1,"1873":1,"2077":1,"2200":1,"2222":1}}],["이동합니다",{"2":{"2057":1,"2162":1}}],["이동",{"2":{"105":1,"1249":1,"1797":1,"2165":1,"2181":1}}],["이메일을",{"2":{"169":1}}],["이메일",{"0":{"693":1},"2":{"93":1,"235":1,"589":1,"683":1,"688":2}}],["이름을",{"2":{"2204":1,"2226":1,"2319":1}}],["이름이",{"2":{"1749":1}}],["이름으로",{"2":{"71":1,"83":1,"190":1}}],["이름",{"2":{"30":1,"31":1,"32":1,"33":1,"93":1,"1056":1,"1064":1,"1548":1,"1563":1,"1606":1,"1609":1,"1625":1,"1705":1,"1887":1,"2120":1,"2186":1,"2258":1,"2262":1,"2319":1}}],["등이",{"2":{"1673":1}}],["등의",{"2":{"1657":1,"1688":1,"1689":1,"1880":1,"2091":1}}],["등에서",{"2":{"2028":1}}],["등에",{"2":{"905":1,"1080":1,"1372":1}}],["등은",{"2":{"699":1}}],["등록한",{"2":{"1656":1}}],["등록하거나",{"2":{"1701":1}}],["등록하면",{"2":{"1604":1,"1623":1}}],["등록하세요",{"2":{"1353":1}}],["등록되는",{"2":{"1604":1}}],["등록되지",{"2":{"1353":1}}],["등록할",{"2":{"1578":1}}],["등록됩니다",{"2":{"1369":1,"1577":1,"1623":1,"1893":1,"2129":1}}],["등록된",{"0":{"1591":1},"2":{"583":1,"1579":1,"1591":1}}],["등록합니다",{"2":{"583":1,"1345":1,"1576":1,"1606":1,"1625":1,"1861":1}}],["등록",{"0":{"674":1,"1346":1,"1575":1,"1576":1,"1577":1,"1578":1,"1601":1,"1605":1,"1606":1,"1620":1,"1624":1,"1625":1,"1700":1,"1701":1,"1904":1},"1":{"675":1,"1347":1,"1348":1,"1349":1,"1576":1,"1577":1,"1578":1,"1579":1,"1602":1,"1603":1,"1604":1,"1606":1,"1607":1,"1621":1,"1622":1,"1623":1,"1625":1,"1626":1},"2":{"211":1,"217":1,"581":1,"582":1,"636":1,"638":2,"675":2,"1619":2,"1768":3,"1770":2,"1817":1,"1861":3,"1900":1,"1902":1,"1905":1,"1969":1,"1982":1,"2184":1,"2186":1}}],["등을",{"2":{"159":1,"425":1,"1267":1,"1317":1,"1674":1,"1686":1,"2130":1}}],["등",{"2":{"69":1,"130":2,"205":1,"367":1,"538":1,"545":1,"554":1,"561":1,"604":1,"618":1,"632":1,"637":1,"670":1,"787":1,"913":1,"955":1,"1173":1,"1526":1,"1659":1,"1663":1,"1667":1,"1669":1,"1679":1,"1680":1,"1752":2,"1758":1,"1773":1,"1775":1,"1820":1,"1864":1,"1865":1,"1931":1,"1994":1,"2079":1,"2218":1}}],["템플릿과",{"2":{"756":1,"1824":1}}],["템플릿은",{"2":{"177":1,"887":1}}],["템플릿",{"0":{"85":1,"177":1,"196":1,"446":1,"695":1,"696":1,"711":1,"755":1,"757":1,"887":1,"1152":1,"1588":1,"1600":1,"1629":1},"1":{"197":1,"696":1,"756":1,"757":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1},"2":{"177":1,"434":1,"437":1,"446":1,"551":2,"561":1,"711":1,"747":1,"756":1,"757":1,"882":1,"883":1,"887":1,"1154":1,"1156":3,"1157":1,"1558":1,"1581":1,"1652":1,"1669":1,"1764":2,"1774":1,"1817":2,"1824":1,"1858":1,"1925":1,"1926":1,"1949":1,"2026":3}}],["템플릿의",{"2":{"79":1,"186":1,"714":1}}],["템플릿에서",{"2":{"69":1,"79":1,"83":1,"186":1,"195":1}}],["템플릿명",{"2":{"66":1,"177":1,"757":1}}],["|==============|",{"2":{"505":1}}],["||",{"2":{"505":1,"1099":1,"1299":1,"1300":1,"1309":1,"1312":2,"1317":1,"1331":1,"1334":2,"1358":1,"1526":1,"1533":3,"1536":3,"1538":1,"1609":1}}],["|",{"2":{"68":1,"505":23,"1380":1,"2177":1}}],["확장",{"2":{"551":1,"687":1,"705":1,"1686":1,"1718":1,"2011":1}}],["확장자",{"2":{"66":1,"122":1,"649":2,"660":1}}],["확인했다면",{"2":{"1729":1}}],["확인합니다",{"2":{"485":1,"506":1,"1483":1,"1485":1,"1617":1,"2195":1,"2204":1,"2221":1,"2315":1,"2316":1}}],["확인사항",{"2":{"396":1}}],["확인하여",{"2":{"1501":1}}],["확인하고",{"2":{"144":1,"2056":1,"2058":1,"2059":1}}],["확인하세요",{"2":{"103":1,"1353":1,"1487":2,"1747":1,"1786":1,"2055":1,"2056":1,"2059":1,"2188":1}}],["확인할",{"2":{"129":1,"543":1,"545":1,"866":1,"867":1,"1359":1,"1727":1,"1736":1,"2204":1,"2205":1,"2221":1}}],["확인해주세요",{"2":{"120":1,"1530":1,"1536":1}}],["확인",{"0":{"478":1,"485":1,"497":1,"504":1,"505":1,"506":1,"507":1,"991":1,"1235":1,"1319":1,"1389":1,"1483":1,"1485":1,"1532":1,"1598":1,"1602":1,"1617":1,"1727":1,"1732":1},"1":{"505":1,"506":1,"507":1,"992":1,"993":1,"994":1},"2":{"9":1,"16":1,"46":2,"214":1,"219":2,"234":1,"344":1,"459":1,"460":1,"510":3,"511":3,"546":1,"603":1,"652":2,"671":2,"681":1,"803":1,"813":1,"872":1,"896":1,"945":1,"952":1,"986":1,"991":1,"1000":3,"1001":3,"1002":1,"1250":1,"1275":1,"1359":2,"1410":1,"1420":1,"1480":1,"1539":1,"1714":2,"1715":2,"1716":2,"1732":1,"1749":2,"1784":1,"2022":1,"2091":1,"2130":1,"2160":2,"2161":1,"2163":3,"2167":2,"2171":1,"2173":2,"2177":1,"2179":2,"2180":3,"2184":3,"2185":3,"2186":3,"2187":3}}],["후속작으로",{"2":{"2086":1}}],["후속작인",{"2":{"1680":1}}],["후에도",{"2":{"1479":1,"1847":1}}],["후에",{"2":{"1361":1}}],["후처리",{"2":{"639":1}}],["후",{"2":{"65":1,"87":1,"93":2,"94":1,"200":1,"723":1,"734":2,"743":1,"1173":1,"1274":1,"1286":1,"1310":1,"1323":1,"1333":1,"1353":1,"1361":1,"1501":1,"1529":1,"1536":1,"1656":1,"1727":1,"1833":1,"1844":1,"2167":1,"2168":1,"2178":1,"2181":1}}],["권장하지",{"2":{"1390":1}}],["권장",{"0":{"471":1,"1723":1},"2":{"460":1,"466":1,"629":1,"699":2,"1574":1,"1714":1,"1715":1,"1718":1,"1720":1,"1723":1,"2150":1,"2155":1}}],["권장합니다",{"2":{"38":1,"466":1}}],["권한으로",{"2":{"104":1}}],["권한이",{"2":{"60":1,"1536":1}}],["권한",{"2":{"60":1,"73":1,"104":1,"138":1}}],["지켜야",{"2":{"1777":1}}],["지수",{"2":{"1534":1}}],["지연되고",{"2":{"1286":1,"1310":1,"1333":1,"1529":1}}],["지원하는",{"0":{"1435":1},"2":{"1679":1}}],["지원하며",{"2":{"252":1}}],["지원",{"0":{"194":1,"319":1,"427":1,"718":1,"833":1},"1":{"834":1,"835":1,"836":1},"2":{"86":1,"175":1,"292":1,"425":1,"427":3,"428":1,"432":1,"451":1,"538":1,"634":1,"635":2,"688":2,"835":1,"836":1,"882":1,"886":1,"889":1,"904":1,"905":1,"909":2,"973":1,"1199":2,"1718":1,"1865":1,"1876":1,"1879":1,"2003":1,"2082":2,"2083":3,"2086":1}}],["지원합니다",{"2":{"60":1,"92":1,"425":1,"473":1,"832":1,"938":1,"1038":1,"1208":1,"1647":1,"1719":1,"1735":1,"2090":1,"2142":1}}],["지정",{"2":{"68":1,"502":1,"863":1,"2006":1}}],["지정된",{"2":{"57":1,"87":1,"191":1,"200":1,"723":1,"2249":1,"2308":1}}],["안전하게",{"2":{"1221":1}}],["안전한",{"2":{"425":1,"432":1,"938":1,"1680":1,"2086":1}}],["안내합니다",{"2":{"365":1,"475":1,"544":1}}],["안녕하세요",{"2":{"94":1,"742":1}}],["안",{"0":{"1749":1,"2179":1},"2":{"56":1,"1236":1,"1311":2,"1338":1,"1527":1}}],["크기를",{"2":{"1501":1}}],["크기",{"0":{"164":1,"892":1,"1500":1},"2":{"51":1,"634":1,"665":1,"892":1,"1178":1,"1221":1,"1252":1,"1500":1,"1848":1}}],["예제",{"0":{"1006":1,"1011":1,"1016":1,"1020":1,"1027":1,"1029":1,"1035":1,"1040":1,"1043":1,"1063":1,"1072":1,"1077":1,"1083":1,"1091":1,"1098":1,"1105":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":1,"1194":1,"1218":1,"1273":1,"1303":1,"1340":1,"1351":1,"1360":1,"1386":1,"1399":1,"1410":1,"1420":1,"1428":1,"1434":1,"1440":1,"1445":1,"1454":1,"1462":1,"1480":1,"1608":1,"1609":1,"1704":1,"1705":1,"1830":1,"1855":1,"2062":1,"2078":1,"2120":1,"2146":1,"2151":1,"2223":1,"2319":1},"1":{"1219":1,"1220":1,"1341":1,"1342":1,"1352":1,"1387":1,"1388":1,"1389":1,"1463":1,"1464":1,"1609":1,"2224":1,"2225":1,"2226":1},"2":{"1311":1,"1338":1,"1382":1,"1383":1,"1385":1,"1426":1,"1427":1,"1460":1,"1461":1,"1475":1,"1599":1,"1702":1,"1837":1,"1880":1,"1893":1,"1895":1,"1898":1,"1905":1,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1945":1,"1949":1,"1969":1,"1981":1,"1983":1,"1986":1,"1997":1,"1999":1,"2003":1,"2005":1,"2006":1,"2009":1,"2014":1,"2078":1,"2204":1,"2205":1,"2207":1,"2208":1,"2209":1,"2210":1,"2212":1,"2214":1,"2216":1,"2218":1,"2220":1,"2221":1,"2231":1,"2232":1,"2233":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":1,"2276":1,"2279":1,"2325":1,"2326":1,"2330":1}}],["예제를",{"2":{"541":1,"1761":1}}],["예정",{"2":{"520":1,"521":1,"525":1,"526":1,"527":1,"686":1,"687":1,"705":1}}],["예정된",{"0":{"127":1}}],["예외",{"0":{"828":1},"1":{"829":1,"830":1},"2":{"217":1,"600":2,"636":1,"681":1}}],["예약",{"0":{"743":1},"2":{"92":1,"94":2,"98":1,"731":1,"744":1}}],["예",{"2":{"50":1,"68":1,"69":1,"70":2,"71":1,"93":3,"98":1,"119":1,"122":1,"367":3,"368":2,"449":4,"660":1,"714":1,"716":1,"735":3,"1570":3,"1571":3,"1572":3,"1573":2,"1582":3,"1606":1,"1612":1,"1625":1,"1676":3,"2207":3,"2208":1,"2220":1,"2258":1}}],["예시",{"0":{"149":1,"172":1,"198":1,"222":1,"230":1,"278":1,"318":1,"326":1,"388":1,"482":1,"483":1,"484":1,"662":1,"720":1,"741":1,"786":1,"789":1,"879":1,"883":1,"914":1,"933":1,"970":1,"974":1,"978":1,"982":1,"986":1},"1":{"199":1,"223":1,"224":1,"279":1,"280":1,"281":1,"663":1,"664":1,"721":1,"722":1,"742":1,"743":1},"2":{"9":3,"22":3,"30":3,"31":3,"32":1,"33":1,"34":1,"45":3,"46":3,"56":2,"57":2,"59":1,"71":2,"72":1,"76":1,"94":3,"103":3,"105":3,"119":3,"120":3,"121":3,"205":1,"206":1,"212":1,"214":1,"315":1,"347":1,"368":1,"374":1,"390":1,"459":1,"460":1,"477":1,"570":1,"600":1,"601":1,"604":1,"609":1,"616":1,"617":1,"634":1,"635":1,"636":1,"637":1,"638":1,"648":1,"649":1,"670":1,"675":1,"678":1,"698":1,"704":1,"728":1,"729":1,"955":1,"1826":1,"1827":1,"1828":1}}],["watch를",{"2":{"1635":1}}],["watch",{"2":{"1468":1,"1585":2,"1635":1,"2079":1}}],["warning",{"2":{"1789":6}}],["warn",{"2":{"1311":1,"1338":1,"1527":1}}],["war",{"0":{"297":1,"300":1,"341":1,"503":1},"2":{"297":1,"300":1,"341":1,"343":1,"344":1,"451":1,"452":1,"468":1,"497":2,"503":1,"557":2}}],["writebuffer",{"2":{"1548":1,"2262":1}}],["write",{"2":{"732":1,"829":1,"830":1,"879":1}}],["writer",{"2":{"732":3}}],["wrappedrequest",{"2":{"670":2,"671":1}}],["wrapper",{"2":{"437":1,"478":1,"496":1,"549":2,"2146":5,"2147":1}}],["when",{"2":{"636":1,"827":1}}],["whereclause",{"2":{"2005":1}}],["where>",{"2":{"313":2}}],["where",{"2":{"308":1,"314":1,"333":1,"753":1}}],["weight",{"2":{"1641":1,"1710":1}}],["welfare",{"0":{"521":1},"2":{"388":1,"440":1,"516":1,"555":1}}],["webfontloader",{"0":{"1903":2},"2":{"1817":1,"1891":1}}],["webapp",{"2":{"611":1}}],["webapps",{"2":{"344":1,"503":1}}],["webresources>",{"2":{"297":2}}],["webmvcconfigurer",{"2":{"637":1}}],["webmvc",{"2":{"294":1}}],["web",{"0":{"904":1,"930":1,"939":1},"1":{"931":1,"932":1,"933":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1},"2":{"292":1,"439":1,"554":1,"632":1,"637":1,"770":1,"808":1,"904":1,"1224":1}}],["wbvue",{"2":{"245":1}}],["world",{"2":{"879":1}}],["work",{"2":{"1946":1,"1949":1,"1957":1,"1969":1,"1981":1,"2025":1}}],["workbook",{"2":{"879":4,"1548":4,"2262":4}}],["worksheet",{"2":{"1548":3,"2262":3}}],["works",{"2":{"0":1}}],["word",{"2":{"878":1}}],["wof6gmtnvs1mg1+vag2brjxxicfnpzbklu49j1wikevs2b8wjlpw9b2wpswhdbxuowrkdgjdbtzruvbl8+qoioyyy7bwkmw7selldeat1a5j2ntowabsivwtgkqnr+v9zys3hiyaecraogadtqkvmqxw8rcxnjmaz7icvtolvor0ti3",{"2":{"206":1,"244":1,"790":1,"956":1}}],["with",{"2":{"1788":1,"2147":1}}],["withcredentials",{"2":{"1259":1,"1263":1,"1269":1,"1270":1,"1276":1,"1337":1}}],["width",{"2":{"1034":2,"1035":3,"1043":2,"1077":2,"1609":3,"1973":2}}],["width=800",{"2":{"1099":1}}],["width=",{"2":{"197":3,"1428":1}}],["windows는",{"2":{"665":1}}],["windows",{"0":{"488":1},"2":{"471":1,"549":1,"1720":1}}],["windows와",{"2":{"249":1,"494":1}}],["window",{"2":{"46":1,"71":1,"72":2,"76":1,"105":1,"119":1,"1097":2,"1099":3,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["w3",{"2":{"197":1}}],["www",{"2":{"75":1,"197":1,"2052":1}}],["누락되었습니다",{"2":{"46":1}}],["감지합니다",{"2":{"898":1}}],["감지",{"0":{"897":1,"1258":1},"1":{"898":1},"2":{"46":1,"119":1,"973":1}}],["여전히",{"2":{"2196":1}}],["여유",{"2":{"1722":1,"1723":1}}],["여부를",{"2":{"1209":1,"1385":1,"1406":1,"1460":1,"1461":1,"1501":1,"2195":1}}],["여부",{"2":{"46":1,"103":2,"105":1,"214":1,"219":1,"603":1,"652":1,"671":2,"740":1,"863":1,"1026":2,"1033":3,"1404":1,"1409":2,"1458":2,"1911":1,"1912":1,"1917":3,"1918":2,"2278":1}}],["여러",{"2":{"31":1,"32":1,"795":1,"832":1,"864":1,"870":1,"1031":1,"1245":1,"1261":1,"1471":1,"2007":1}}],["존재하면",{"2":{"1385":1}}],["존재하는지",{"2":{"485":1}}],["존재하지",{"2":{"46":1,"119":1,"1359":1}}],["존재",{"2":{"46":1,"652":1,"896":1,"1359":1,"2195":1}}],["경력",{"2":{"1946":1}}],["경험",{"2":{"1686":1}}],["경고를",{"2":{"1500":1}}],["경고",{"2":{"1178":1}}],["경로로",{"2":{"1844":1}}],["경로와",{"2":{"386":1}}],["경로여야",{"2":{"87":1,"200":1,"723":1}}],["경로를",{"2":{"82":1,"494":1,"1159":1,"1358":1,"1494":1,"2173":1}}],["경로의",{"2":{"81":1}}],["경로가",{"2":{"81":1,"1353":1,"1358":1,"1845":1}}],["경로에서",{"2":{"70":1,"119":1,"122":1,"264":1,"331":1,"844":1}}],["경로는",{"2":{"51":1,"1847":1}}],["경로",{"0":{"81":1,"82":1,"122":1,"188":1,"189":1,"249":1,"494":1,"1158":1,"1190":1,"1201":1,"1829":1,"1844":1,"1845":1,"2173":1},"1":{"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1191":1,"1192":1,"1193":1,"1830":1},"2":{"46":1,"51":1,"70":4,"87":2,"159":1,"200":2,"249":1,"367":1,"384":1,"494":1,"611":2,"649":1,"652":1,"658":3,"665":1,"715":2,"723":2,"763":1,"883":1,"1159":1,"1162":1,"1353":1,"1606":2,"1625":2,"1673":1,"1675":1,"1776":1,"1829":1,"1830":1,"1895":1,"2018":1,"2173":3}}],["경우가",{"2":{"1468":1,"1522":1}}],["경우",{"2":{"15":8,"32":1,"45":1,"81":1,"94":1,"375":1,"394":1,"396":1,"468":1,"485":1,"506":1,"509":1,"731":1,"873":1,"1045":1,"1212":1,"1221":1,"1261":1,"1262":1,"1263":1,"1284":1,"1288":1,"1289":2,"1299":1,"1303":1,"1314":1,"1318":1,"1389":1,"1390":1,"1400":1,"1491":1,"1517":1,"1534":1,"1544":1,"1578":1,"1604":1,"1728":1,"1732":1,"1743":1,"1747":1,"1748":1,"1749":1,"1845":1,"2063":1,"2175":1,"2205":1,"2284":1}}],["경우에만",{"2":{"98":1,"225":1,"744":1,"1221":1}}],["경우에",{"2":{"15":1}}],["q1btodqwmda1odcx",{"2":{"740":1}}],["q1btodqwmda1odcxoerpuuzotzptvks4ndawmdu4nze4r0pvtvdp",{"2":{"96":1,"229":1}}],["q에서",{"2":{"114":1}}],["question",{"2":{"625":2}}],["queryselector",{"2":{"2233":1}}],["query",{"2":{"75":1}}],["qualifier",{"2":{"273":1,"274":1}}],["quot",{"2":{"22":2,"30":2,"32":4,"33":4,"45":30,"46":2,"48":4,"49":6,"51":2,"56":4,"68":2,"70":8,"71":4,"72":2,"73":2,"75":2,"76":2,"93":26,"94":14,"98":4,"105":2,"654":4,"655":6,"656":2,"665":2,"734":8,"735":12,"737":4,"738":6,"744":2,"872":4,"873":4}}],["q",{"0":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"46":1,"71":1,"103":1,"652":1,"1946":1,"1949":2,"1957":1,"1969":2,"1981":2,"2003":1,"2025":2}}],["내일",{"2":{"2209":1,"2242":1}}],["내역",{"2":{"1949":2,"1951":1}}],["내",{"2":{"1362":1}}],["내장",{"2":{"904":1}}],["내장하여",{"2":{"432":1}}],["내보내기",{"0":{"710":1},"2":{"180":1,"710":1}}],["내부의",{"2":{"367":1}}],["내부",{"2":{"46":1,"56":1,"57":1,"103":1}}],["내용은",{"2":{"1650":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"2033":1,"2034":1,"2035":1}}],["내용을",{"2":{"1563":1,"1695":1}}],["내용",{"2":{"22":1,"92":1,"93":1,"98":1,"149":1,"172":1,"211":1,"221":1,"623":1,"670":1,"671":1,"672":1,"673":1,"680":1,"731":1,"744":1,"978":1,"1428":1,"1464":1,"1588":1,"1594":1,"1600":1,"1838":1,"1840":1,"1841":1,"1842":1,"1880":1,"1893":1,"1898":1,"1899":1,"1900":1,"1901":1,"1949":1,"1986":1}}],["주석을",{"2":{"2282":1,"2284":1}}],["주석",{"0":{"2275":1},"1":{"2276":1,"2277":1,"2278":1,"2279":1},"2":{"2272":1,"2274":1,"2276":1,"2280":1,"2282":1}}],["주로",{"2":{"2109":1}}],["주의하세요",{"2":{"1353":1}}],["주의",{"2":{"225":1,"243":1,"249":1,"492":1,"494":1,"629":1,"699":1,"946":1}}],["주의사항",{"0":{"17":1,"25":1,"38":1,"51":1,"60":1,"87":1,"98":1,"114":1,"123":1,"200":1,"225":1,"629":1,"665":1,"681":1,"699":1,"723":1,"744":1,"1045":1,"1164":1,"1173":1,"1195":1,"1221":1,"1252":1,"1264":1,"1289":1,"1353":1,"1390":1,"1400":1,"1411":1,"1487":1,"1848":1,"2333":1}}],["주민등록번호입니다",{"2":{"2220":1}}],["주민등록번호를",{"2":{"2220":1,"2317":1}}],["주민등록번호",{"2":{"205":1,"223":2,"787":1,"955":1,"2220":1}}],["주요",{"0":{"234":1,"291":1,"426":1,"450":1,"517":1,"524":1,"569":1,"599":1,"615":1,"633":1,"647":1,"669":1,"685":1,"703":1,"727":1,"767":1,"860":1,"903":1,"913":1,"917":1,"926":1,"1062":1,"1069":1,"1088":1,"1104":1,"1111":1,"1118":1,"1139":1,"1150":1,"1156":1,"1161":1,"1198":1,"1241":1,"1270":1,"1272":1,"1275":1,"1293":1,"1405":1,"1416":1,"1433":1,"1439":1,"1444":1,"1450":1,"1459":1,"1474":1,"1653":1,"1680":1,"1685":1,"1687":1,"1793":1,"1802":1,"1805":1,"1814":1,"1818":1,"1835":1,"1859":1,"1870":1,"1878":1,"1892":1,"1910":1,"1927":1,"1935":1,"1943":1,"1963":1,"1979":1,"2032":1,"2037":1,"2068":1,"2077":1,"2082":1,"2083":1,"2095":1,"2099":1,"2110":1,"2119":1,"2123":1,"2141":1,"2191":1,"2202":1,"2230":1,"2238":1,"2257":1,"2266":1,"2275":1,"2288":1,"2302":1,"2314":1,"2324":1},"1":{"292":1,"293":1,"294":1,"427":1,"428":1,"429":1,"430":1,"431":1,"451":1,"452":1,"453":1,"518":1,"519":1,"520":1,"521":1,"525":1,"526":1,"527":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"616":1,"617":1,"618":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"648":1,"649":1,"670":1,"671":1,"672":1,"673":1,"686":1,"687":1,"688":1,"704":1,"705":1,"728":1,"729":1,"768":1,"769":1,"770":1,"771":1,"861":1,"862":1,"863":1,"864":1,"904":1,"905":1,"906":1,"927":1,"928":1,"929":1,"1070":1,"1071":1,"1199":1,"1200":1,"1201":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1406":1,"1407":1,"1408":1,"1417":1,"1418":1,"1419":1,"1451":1,"1452":1,"1453":1,"1460":1,"1461":1,"1475":1,"1476":1,"1477":1,"1478":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1688":1,"1689":1,"1690":1,"1691":1,"1794":1,"1795":1,"1796":1,"1806":1,"1807":1,"1808":1,"1809":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1860":1,"1861":1,"1862":1,"1871":1,"1872":1,"1879":1,"1880":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"1900":1,"1901":1,"1902":1,"1903":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1928":1,"1929":1,"1930":1,"1931":1,"1936":1,"1937":1,"1938":1,"1939":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1964":1,"1965":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"2033":1,"2034":1,"2035":1,"2038":1,"2039":1,"2040":1,"2041":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2231":1,"2232":1,"2233":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1,"2246":1,"2247":1,"2248":1,"2249":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":1,"2276":1,"2277":1,"2278":1,"2279":1,"2289":1,"2290":1,"2291":1,"2292":1,"2293":1,"2294":1,"2303":1,"2304":1,"2305":1,"2306":1,"2307":1,"2308":1,"2309":1,"2310":1,"2315":1,"2316":1,"2317":1,"2318":1,"2325":1,"2326":1,"2327":1,"2328":1,"2329":1,"2330":1},"2":{"203":1,"214":1,"217":1,"384":1,"385":1,"386":1,"393":1,"451":1,"452":1,"543":1,"547":1,"570":1,"579":1,"580":1,"581":1,"582":1,"588":1,"589":1,"590":1,"591":1,"600":2,"601":1,"602":1,"603":1,"604":1,"611":1,"616":1,"617":1,"618":1,"634":1,"635":1,"636":1,"637":1,"639":1,"648":1,"649":1,"678":1,"686":1,"688":1,"698":1,"704":1,"728":1,"729":1,"763":1,"767":1,"772":1,"776":1,"838":1,"900":1,"1754":2,"1766":1,"1773":1,"1781":2,"1794":1,"1817":1,"1838":1,"1840":1,"1841":1,"1842":1,"1861":1,"1862":1,"1871":1,"1879":1,"1880":1,"1895":1,"1896":1,"1902":1,"1903":1,"1911":2,"1912":2,"1913":2,"1914":2,"1915":2,"1916":2,"1917":2,"1918":2,"1945":1,"1946":1,"1947":1,"1949":1,"1951":1,"1953":1,"1955":1,"1965":1,"1966":1,"1967":1,"1969":1,"1970":1,"1971":1,"1981":1,"1982":1,"1983":1,"1984":1,"1986":1,"1999":1,"2003":1,"2005":1,"2006":1,"2007":1,"2009":1,"2010":1,"2011":1,"2013":1,"2014":1,"2015":1,"2017":1,"2018":1,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2028":1,"2029":1,"2030":1}}],["주소로",{"2":{"1736":1}}],["주소에",{"2":{"1695":1}}],["주소가",{"2":{"1487":1}}],["주소를",{"2":{"1195":1}}],["주소",{"2":{"46":1,"56":1,"59":1,"94":1,"103":1,"604":1,"1168":3,"1487":1,"1674":2,"1726":3,"1734":3,"2267":1}}],["디자인팀",{"2":{"1027":1}}],["디버깅",{"0":{"2188":1},"2":{"673":1}}],["디스크",{"2":{"471":1,"1722":1,"1723":1}}],["디렉토리별",{"0":{"1863":1},"1":{"1864":1,"1865":1}}],["디렉토리로",{"2":{"1847":1}}],["디렉토리는",{"2":{"1833":1,"1857":1,"1876":1,"1890":1,"1908":1,"1993":1}}],["디렉토리입니다",{"2":{"1654":1,"1857":1}}],["디렉토리가",{"2":{"560":1,"1823":1}}],["디렉토리의",{"2":{"436":1,"548":1,"1577":1,"1774":1,"1833":2,"1844":1,"1847":1,"1848":2}}],["디렉토리를",{"2":{"368":1,"1506":1,"1864":1}}],["디렉토리에서",{"2":{"496":1,"1733":1}}],["디렉토리에",{"2":{"344":1,"473":1,"497":1,"503":1,"746":1,"1183":1,"1483":1,"1504":1,"1511":1,"1563":1,"1599":1,"1628":1,"1637":1,"1642":1,"1699":1,"1810":1,"1905":1,"2056":1}}],["디렉토리",{"0":{"437":1,"548":1,"549":1,"550":1,"551":1,"552":1,"557":1,"558":1,"559":1,"747":1,"750":1,"752":1,"754":1,"756":1,"759":1,"1559":1,"1577":1,"1587":1,"1598":1,"1652":1,"1653":1,"1801":1,"1813":1,"1815":1,"1817":1,"1818":1,"1832":1,"1834":1,"1853":1,"1856":1,"1858":1,"1877":1,"1891":1,"1909":1,"1926":1,"1927":1,"1934":1,"1942":1,"1962":1,"1978":1,"1994":1},"1":{"549":1,"550":1,"551":2,"552":2,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":2,"561":2,"562":2,"563":2,"564":2,"565":1,"566":1,"1560":1,"1561":1,"1562":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1816":1,"1817":1,"1818":1,"1819":2,"1820":2,"1821":2,"1822":2,"1823":2,"1824":2,"1825":1,"1826":1,"1827":1,"1828":1,"1829":1,"1830":1,"1831":1,"1833":1,"1834":1,"1835":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1843":1,"1844":1,"1845":1,"1846":1,"1847":1,"1848":1,"1849":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1863":1,"1864":1,"1865":1,"1866":1,"1928":1,"1929":1,"1930":1,"1931":1},"2":{"167":1,"548":1,"549":2,"560":1,"563":1,"896":1,"1677":1,"1754":1,"1774":3,"1777":1,"1829":1,"1831":2,"1866":1}}],["디코딩",{"2":{"46":1,"651":1,"928":1}}],["디비에",{"2":{"9":1}}],["krw",{"2":{"1879":1}}],["kr",{"0":{"1880":1},"2":{"1877":1,"1880":3,"1887":3}}],["ko",{"0":{"1880":1},"2":{"1877":1,"1880":1,"1887":1,"1898":3,"2143":1}}],["kor",{"2":{"45":1,"46":2,"92":1,"94":1,"103":1,"664":1,"742":1,"1879":4,"1884":1,"1885":1,"1886":1,"2267":1}}],["kebab",{"2":{"1574":1}}],["keyfield",{"0":{"2192":1,"2216":1},"2":{"2216":1}}],["keyup",{"2":{"1989":2}}],["keys",{"0":{"1245":1}}],["key",{"0":{"276":1,"1243":1,"1244":1,"1246":1,"1452":1,"1453":1,"2194":1,"2325":1,"2326":1,"2328":1},"2":{"24":2,"32":1,"59":2,"96":1,"148":2,"229":1,"620":2,"729":1,"740":1,"933":1,"1212":1,"1215":1,"1216":1,"1251":1,"1299":4,"1629":1,"1914":2,"2087":1,"2231":3,"2232":3,"2325":1,"2326":1,"2328":1}}],["kb",{"2":{"1178":1}}],["kajtalsy8zewf18c9mxdryhxlsxg==",{"2":{"206":1,"244":1,"790":1,"956":1}}],["kh3+atsyuizxqkjqqledn12a1psqrleole8iumrbo4hxfnlc7drzab1ek0qbwq61xje0",{"2":{"206":1,"244":1,"790":1,"956":1}}],["kt",{"0":{"732":1},"2":{"96":2,"229":2,"729":3,"731":1,"740":3,"744":1}}],["했습니다",{"2":{"45":1}}],["정적",{"0":{"1368":1,"1670":1},"2":{"1652":1,"1670":1,"1816":1,"1833":1,"1848":1,"1849":1}}],["정제하여",{"2":{"961":1}}],["정제",{"2":{"936":1,"969":1}}],["정제된",{"2":{"798":1,"963":1}}],["정책",{"0":{"220":1,"679":1,"760":1,"962":1},"1":{"221":1,"680":1,"761":1},"2":{"221":1,"551":1,"680":1,"747":1,"761":1,"763":1,"936":1}}],["정화",{"2":{"211":1,"670":1}}],["정의와",{"2":{"2261":1}}],["정의되어",{"2":{"2090":1}}],["정의된",{"2":{"1672":1}}],["정의가",{"2":{"1579":1}}],["정의됩니다",{"2":{"1365":1,"1602":1,"1621":1,"2128":1}}],["정의합니다",{"2":{"962":1}}],["정의할",{"2":{"870":1}}],["정의",{"0":{"289":1,"1034":1,"1579":1,"1583":1,"1584":1,"2128":1},"2":{"197":2,"221":1,"680":1,"761":2,"864":1,"1033":1,"1063":1,"1588":2,"1611":1,"1613":3,"1817":2,"1879":1,"1895":1,"1986":2,"1987":1,"2038":1,"2043":1,"2171":1,"2186":1,"2261":1}}],["정상적으로",{"2":{"505":1,"1358":1,"1617":1,"1847":1}}],["정상",{"2":{"138":1}}],["정리했습니다",{"2":{"546":1}}],["정리합니다",{"2":{"106":1,"767":1,"772":1}}],["정리",{"0":{"106":1},"2":{"105":2,"538":1,"1752":1,"2178":1}}],["정렬",{"2":{"45":1,"1880":1,"2099":1,"2119":1}}],["정보입니다",{"2":{"1773":1,"1776":1}}],["정보는",{"2":{"104":1,"114":1,"1252":1}}],["정보를",{"2":{"53":1,"56":1,"121":1,"215":1,"481":1,"490":1,"672":1,"869":1,"1031":1,"1272":1,"1362":1,"1413":1,"1606":1,"1625":1,"1914":1,"1958":1}}],["정보가",{"2":{"9":1,"15":1}}],["정보",{"0":{"7":1,"10":1,"20":1,"28":1,"41":1,"54":1,"63":1,"90":1,"101":1,"117":1,"285":1,"731":1,"869":1,"1958":1},"1":{"11":1,"12":1,"13":1},"2":{"9":1,"13":1,"16":1,"33":1,"34":2,"44":1,"46":1,"56":2,"59":1,"103":2,"105":1,"111":1,"114":1,"462":1,"463":1,"464":1,"465":1,"510":1,"649":1,"651":1,"652":1,"673":1,"729":1,"731":1,"803":1,"952":1,"964":1,"1000":1,"1150":1,"1173":1,"1252":1,"1407":1,"1409":2,"1439":1,"1475":1,"1477":1,"1606":1,"1660":1,"1697":1,"1758":1,"1760":1,"1797":1,"1806":1,"1942":1,"1946":6,"1962":2,"1969":3,"1970":2,"1971":2,"2024":1,"2123":1,"2258":1}}],["값만",{"2":{"2193":1}}],["값이",{"2":{"1707":1,"2204":1,"2205":2,"2315":1}}],["값을",{"2":{"1243":1,"1244":1,"1245":1,"1452":1,"1453":1,"2279":1,"2305":1,"2306":1}}],["값으로",{"2":{"1026":1,"1033":1,"2216":1}}],["값",{"2":{"45":2,"93":1,"219":1,"234":1,"604":2,"656":1,"671":1,"982":2,"1026":2,"1033":2,"1035":1,"1250":1,"1454":2,"1593":1,"1707":1,"1783":1,"1784":1,"1914":2,"1958":1,"2033":1,"2204":1,"2205":1,"2276":1,"2279":1}}],["값은",{"2":{"30":1}}],["빈값이면",{"2":{"2276":1}}],["빈값",{"2":{"2276":1}}],["빈도를",{"2":{"2162":1}}],["빈",{"0":{"260":1},"2":{"45":1,"234":1,"604":2,"634":1,"656":1,"1707":1,"1783":1,"1994":1,"2028":1,"2033":1,"2205":1}}],["삭제됩니다",{"2":{"65":1,"87":1,"200":1}}],["삭제된",{"2":{"57":2}}],["삭제할",{"2":{"57":1,"2328":1}}],["삭제합니다",{"2":{"57":1,"105":1,"2328":1,"2329":1}}],["삭제하는",{"2":{"53":1}}],["삭제",{"0":{"57":1,"281":1,"323":1},"2":{"45":3,"49":1,"57":2,"87":1,"105":2,"167":1,"200":1,"602":2,"649":2,"651":1,"655":1,"723":2,"896":1,"1063":1,"1071":1,"1435":1,"1444":1,"1445":1,"1748":1,"1982":1,"2178":1}}],["삭제를",{"2":{"43":1}}],["변수나",{"2":{"1845":1}}],["변수들이",{"2":{"1726":1}}],["변수명이",{"2":{"2058":1,"2179":1}}],["변수명",{"0":{"1571":1},"2":{"1612":1}}],["변수가",{"0":{"2058":1},"2":{"1485":1,"1749":1,"2179":1}}],["변수를",{"2":{"1185":1,"1202":1,"1487":1,"1734":1,"1735":1}}],["변수는",{"2":{"1173":1,"1507":1,"1510":1}}],["변수에",{"2":{"1173":1}}],["변수만",{"2":{"1169":1}}],["변수",{"0":{"1165":1,"1167":1,"1168":1,"1169":1,"1202":1,"1485":1,"1507":1,"1510":1,"1585":1,"1643":1,"1695":1,"1726":1,"1734":1,"1749":1,"2179":1},"1":{"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1172":1,"1173":1,"1735":1},"2":{"459":1,"460":1,"1167":1,"1173":1,"1487":1,"1571":2,"1582":1,"1613":1,"1652":1,"1674":1,"1735":4,"1749":1,"1776":1,"1777":1,"1816":1,"2040":1}}],["변경합니다",{"2":{"2279":1}}],["변경하면",{"2":{"1848":1}}],["변경한",{"2":{"1743":1,"2063":1}}],["변경할",{"2":{"1106":1,"1886":1}}],["변경되면",{"2":{"1045":1}}],["변경",{"0":{"49":1,"655":1,"1491":1,"1886":1},"2":{"45":1,"51":1,"427":1,"509":1,"665":1,"999":1,"1104":1,"1173":1,"1585":1,"1593":1,"1635":1,"1848":1,"1882":1,"1886":2}}],["변환된",{"2":{"2216":1,"2278":1}}],["변환할",{"2":{"2216":1,"2278":1,"2279":1}}],["변환됩니다",{"2":{"87":1,"200":1,"1348":1}}],["변환하여",{"2":{"70":1,"81":1,"82":1}}],["변환",{"0":{"71":1,"83":1,"190":1,"716":1,"1348":1},"2":{"32":1,"70":1,"78":1,"87":1,"185":1,"199":1,"200":1,"604":3,"639":1,"713":1,"723":2,"981":1,"985":1,"1350":1,"1766":2,"1986":1}}],["변환합니다",{"2":{"32":1,"38":1,"2192":1,"2193":1,"2197":1,"2208":1,"2216":1,"2240":1,"2241":1,"2246":1,"2247":1,"2278":1,"2290":1,"2291":1,"2294":1}}],["언어를",{"2":{"1886":1}}],["언어",{"0":{"1875":1,"1886":1},"1":{"1876":1,"1877":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1887":1,"1888":1},"2":{"44":1,"46":1,"94":1,"103":1,"433":1,"1817":1,"1858":1,"1879":4,"1882":1,"2267":1}}],["한국어로",{"2":{"1880":1,"1886":1}}],["한국어",{"2":{"1877":1,"1879":2,"1880":1,"1887":1,"1898":1,"2143":1}}],["한글을",{"2":{"200":1}}],["한글",{"0":{"86":1,"192":1,"717":1,"889":1},"1":{"193":1,"194":1,"195":1,"718":1,"719":1},"2":{"86":1,"200":1,"551":1,"711":1,"756":1,"886":1,"889":1}}],["한",{"2":{"43":1,"1031":1,"1164":1,"1245":1}}],["추론",{"2":{"1686":1}}],["추적을",{"2":{"1300":1}}],["추천",{"0":{"542":1,"1767":1},"1":{"1768":1,"1769":1,"1770":1,"1771":1,"1772":1}}],["추가적인",{"2":{"1314":1,"1522":1}}],["추가합니다",{"2":{"370":1,"375":1,"407":1,"493":1,"1300":1,"1407":1,"1695":1,"1700":1,"1885":1,"2245":1,"2296":1,"2304":1}}],["추가하려면",{"2":{"1885":1,"1905":1}}],["추가하거나",{"2":{"1418":1,"1743":1,"1848":1,"2063":1}}],["추가하면",{"2":{"859":1}}],["추가하기",{"2":{"367":1}}],["추가하는",{"2":{"360":1,"364":1,"387":1,"405":1,"1596":1}}],["추가할",{"2":{"365":1,"455":1,"1362":1,"1390":1,"1686":1,"2284":1}}],["추가",{"0":{"360":1,"364":1,"366":1,"370":1,"371":1,"375":1,"387":1,"407":1,"408":1,"421":1,"455":1,"1295":1,"1296":1,"1300":1,"1367":1,"1603":1,"1622":1,"1742":1,"1885":1,"1905":1},"1":{"361":1,"362":1,"363":1,"365":1,"366":1,"367":2,"368":2,"369":2,"370":2,"371":2,"372":2,"373":2,"374":2,"375":2,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"1368":1,"1369":1,"1743":1,"1744":1,"1745":1},"2":{"43":1,"45":3,"49":1,"370":1,"371":1,"375":1,"387":1,"394":1,"396":4,"397":1,"415":1,"419":1,"456":1,"536":1,"539":1,"542":1,"649":2,"651":1,"655":1,"1026":1,"1033":1,"1036":1,"1071":1,"1121":1,"1139":2,"1230":1,"1272":2,"1273":1,"1535":1,"1548":1,"1599":1,"1711":1,"1759":1,"1862":1,"1905":1,"1916":1,"1918":1,"2068":1,"2095":1,"2262":1}}],["추출합니다",{"2":{"2292":1,"2309":1}}],["추출",{"0":{"1533":1},"2":{"9":2,"16":1,"105":2,"113":1,"215":1,"604":3,"672":3,"801":1,"803":2,"816":1,"952":2}}],["링크입니다",{"2":{"776":1}}],["링크인",{"2":{"45":1}}],["링크명",{"2":{"45":1}}],["링크를",{"2":{"43":1,"1137":1}}],["링크",{"0":{"43":1,"140":1,"540":1,"1135":1,"1757":1},"1":{"44":1,"45":1,"141":1,"142":1,"143":1,"1136":1,"1137":1,"1138":1,"1139":1,"1140":1,"1758":1,"1759":1,"1760":1},"2":{"44":1,"45":6,"48":1,"648":1,"649":3,"651":4,"654":1,"1139":2,"1140":2,"1764":2,"1781":1,"2023":1}}],["커스터마이징",{"0":{"868":1,"1044":1},"1":{"869":1,"870":1},"2":{"1841":1,"1842":1}}],["커스텀",{"0":{"1314":1,"1317":1,"1531":1,"1636":1,"1637":1,"1710":1,"1905":1,"2067":1,"2094":1},"1":{"1532":1,"1533":1,"1637":1,"1638":1,"1639":1},"2":{"638":1,"1044":2,"1057":1,"1062":1,"1303":1,"1314":1,"1637":2,"1652":1,"1772":2,"1834":1,"1839":1,"1840":2,"1841":1,"1842":1,"1885":2,"1900":1,"1901":1,"1903":1,"2013":1}}],["커넥션",{"0":{"839":1},"1":{"840":1,"841":1},"2":{"634":4,"839":1}}],["커밋",{"2":{"699":1}}],["커밋되지",{"2":{"563":1}}],["커밋하지",{"2":{"225":1,"629":1}}],["커밋됩니다",{"2":{"38":1}}],["커서의",{"2":{"81":1,"84":2}}],["커서를",{"2":{"71":1,"83":1,"190":1}}],["커서명",{"2":{"68":2,"70":1}}],["커서로",{"2":{"38":1}}],["커서는",{"2":{"36":1,"78":1,"185":1}}],["커서",{"0":{"32":1,"36":1,"71":1,"78":1,"83":1,"185":1,"190":1,"713":1,"716":1},"2":{"30":1,"32":1,"33":1,"38":1,"71":1,"87":1,"179":1,"200":1,"611":1,"708":1,"716":1,"723":1}}],["모바일",{"2":{"2298":1}}],["모달을",{"2":{"1426":1,"1427":1}}],["모달",{"0":{"1421":1},"1":{"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1,"1428":1},"2":{"1422":1,"1424":2,"1426":2,"1428":1,"1660":1,"1758":2,"1909":1,"1915":6,"1923":1,"2030":1,"2123":1}}],["모드",{"2":{"1026":1,"1896":1}}],["모니터링",{"0":{"1501":1},"2":{"629":1}}],["모았습니다",{"2":{"547":1}}],["모두",{"2":{"138":1,"2073":1,"2103":1}}],["모듈로",{"2":{"1688":1,"1689":1,"1690":1}}],["모듈과",{"2":{"1686":1}}],["모듈입니다",{"2":{"597":1,"613":1,"645":1,"683":1,"701":1,"725":1,"1691":1,"1792":1,"1933":1}}],["모듈들입니다",{"2":{"540":1,"1757":1}}],["모듈은",{"2":{"448":1,"454":1,"513":1,"1941":1,"1961":1,"1977":1}}],["모듈화된",{"0":{"431":1},"2":{"432":1,"1680":1}}],["모듈별로",{"2":{"1598":1,"1823":1,"1864":1}}],["모듈별",{"0":{"1775":1},"2":{"368":1,"377":1,"448":1,"514":1}}],["모듈을",{"0":{"542":1},"2":{"364":1,"365":1,"367":1,"370":1,"388":1,"405":1,"407":1,"455":1,"1680":1,"1686":1}}],["모듈에서",{"2":{"567":1,"597":1,"2272":1}}],["모듈에서는",{"2":{"389":1,"1958":1}}],["모듈에",{"2":{"360":1,"387":1,"1599":1,"1775":1}}],["모듈명",{"2":{"347":1,"367":1,"368":5,"374":2,"377":1,"400":6,"412":1,"413":2,"414":2,"417":2,"448":1,"514":1,"529":6,"532":2,"534":1,"535":2,"542":1}}],["모듈",{"0":{"125":1,"142":1,"143":1,"364":1,"366":1,"367":1,"383":1,"388":1,"405":1,"439":1,"440":1,"441":1,"454":1,"455":1,"513":1,"515":1,"522":1,"554":1,"555":1,"556":1,"567":1,"568":1,"569":1,"597":1,"598":1,"613":1,"614":1,"631":1,"632":1,"645":1,"646":1,"667":1,"668":1,"683":1,"684":1,"701":1,"702":1,"725":1,"726":1,"903":1,"932":1,"1493":1,"1687":1,"1689":1,"1690":1,"1691":1,"1791":1,"1799":1,"1803":1,"1811":1,"1932":1,"1940":1,"1960":1,"1964":1,"1968":1,"1976":1},"1":{"126":1,"127":1,"128":1,"365":1,"366":1,"367":2,"368":2,"369":2,"370":2,"371":2,"372":2,"373":2,"374":2,"375":2,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"406":1,"407":1,"408":1,"409":1,"410":1,"514":1,"515":1,"516":2,"517":2,"518":2,"519":2,"520":2,"521":2,"522":1,"523":2,"524":2,"525":2,"526":2,"527":2,"528":1,"529":1,"530":1,"531":1,"532":1,"533":1,"534":1,"535":1,"536":1,"568":1,"569":1,"570":2,"571":2,"572":2,"573":2,"574":2,"575":2,"576":2,"577":2,"578":2,"579":2,"580":2,"581":2,"582":2,"583":2,"584":2,"585":2,"586":2,"587":2,"588":2,"589":2,"590":2,"591":2,"592":1,"593":1,"594":1,"595":1,"596":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"668":1,"669":1,"670":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"702":1,"703":1,"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1,"726":1,"727":1,"728":1,"729":1,"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"904":1,"905":1,"906":1,"1688":1,"1689":1,"1690":1,"1691":1,"1792":1,"1793":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1800":1,"1801":1,"1802":1,"1804":1,"1805":1,"1806":1,"1807":1,"1808":1,"1809":1,"1810":1,"1812":1,"1813":1,"1814":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1941":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":2,"1966":2,"1967":2,"1968":1,"1969":2,"1970":2,"1971":2,"1972":1,"1973":1,"1974":1,"1975":1,"1977":1,"1978":1,"1979":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"2":{"128":1,"130":2,"145":1,"201":1,"362":1,"365":1,"367":1,"370":1,"371":1,"375":1,"383":1,"396":1,"397":2,"398":2,"431":2,"434":3,"437":3,"444":1,"454":3,"456":3,"536":1,"538":2,"539":1,"540":2,"542":2,"545":2,"551":4,"558":2,"566":2,"596":1,"612":2,"630":2,"644":1,"666":1,"700":2,"724":1,"745":1,"752":1,"904":1,"1105":1,"1112":1,"1119":1,"1598":3,"1663":1,"1664":1,"1665":1,"1666":1,"1675":1,"1677":1,"1679":1,"1774":1,"1775":4,"1817":4,"1858":4,"1861":1,"1864":2,"1959":1,"1975":1,"1991":1,"2284":1}}],["모듈의",{"2":{"100":1,"116":1,"125":1,"126":1,"383":1,"393":1,"394":1,"1800":1,"1804":1,"1812":1,"1957":1,"1973":1,"1989":1}}],["모든",{"2":{"38":1,"56":1,"57":1,"129":1,"135":1,"139":1,"144":1,"211":1,"225":1,"264":1,"331":1,"348":1,"393":1,"530":1,"545":1,"560":1,"565":1,"567":1,"572":1,"597":1,"600":1,"670":1,"681":1,"768":1,"798":1,"839":1,"844":1,"948":1,"952":1,"963":1,"1287":1,"1289":1,"1292":1,"1309":1,"1313":1,"1323":1,"1358":1,"1402":1,"1478":1,"1490":1,"1539":1,"1654":1,"1727":1,"1733":1,"1759":1,"1848":1,"1857":2,"1880":1,"1914":1,"2204":1,"2280":1,"2327":1,"2329":1,"2333":1}}],["모델명",{"2":{"22":1}}],["트리",{"0":{"1047":1,"1497":1,"2008":1,"2115":1,"2138":1},"1":{"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"2009":1,"2010":1,"2011":1},"2":{"1048":1,"1050":1,"1052":1,"1184":1,"1505":1,"1762":2,"1842":1,"2009":1,"2010":1,"2115":1,"2138":1}}],["트러블슈팅",{"0":{"1780":1},"2":{"345":1}}],["트랜잭션",{"2":{"38":1,"261":1,"380":1,"579":1,"634":1,"838":1,"905":1}}],["트레이스",{"2":{"34":2}}],["인디케이터",{"2":{"2001":1}}],["인텔리전스",{"2":{"1977":1,"1978":1}}],["인사",{"0":{"1803":1,"1944":1},"1":{"1804":1,"1805":1,"1806":1,"1807":1,"1808":1,"1809":1,"1810":1,"1945":1,"1946":1,"1947":1},"2":{"1599":1,"1664":1,"1689":1,"1775":1,"1804":1,"1806":1,"1810":1,"1942":2,"1946":2,"1959":1,"1962":3,"1969":1,"1970":1,"1971":2}}],["인식되지",{"2":{"1749":1}}],["인식",{"0":{"1749":1,"2179":1}}],["인식됨",{"2":{"561":1}}],["인식됩니다",{"2":{"38":1}}],["인터넷",{"2":{"1725":1}}],["인터랙션",{"2":{"1618":1}}],["인터랙티브",{"2":{"856":1}}],["인터셉터는",{"2":{"1292":1,"1303":1,"1323":1}}],["인터셉터입니다",{"2":{"1271":1,"1274":1}}],["인터셉터를",{"2":{"1267":1,"1657":1,"1862":1,"2094":1}}],["인터셉터에서",{"2":{"1211":1,"1213":1,"1230":1,"1256":1,"1289":1,"1302":1,"1306":1,"1390":2,"1400":1,"1407":1,"1522":1,"2234":1}}],["인터셉터",{"0":{"1271":1,"1274":1,"1291":1,"1322":1},"1":{"1272":1,"1273":1,"1275":1,"1276":1,"1292":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1,"1301":1,"1302":1,"1303":1,"1304":1,"1323":1,"1324":1,"1325":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1340":1,"1341":1,"1342":1,"1343":1},"2":{"554":1,"582":1,"632":1,"639":1,"1222":1,"1290":2,"1304":1,"1321":1,"1343":1,"1759":2,"1858":1}}],["인터페이스를",{"2":{"371":1}}],["인터페이스",{"0":{"304":1,"332":1,"412":1,"534":1},"1":{"305":1},"2":{"368":1,"377":1,"386":1,"396":1,"448":1,"514":1,"1490":1}}],["인가를",{"2":{"820":1,"948":1}}],["인가",{"0":{"354":1,"394":1},"1":{"355":1,"356":1,"357":1,"358":1,"359":1},"2":{"353":1,"363":1,"394":1,"398":1,"423":1,"428":1,"538":1,"542":1,"581":1,"917":1}}],["인스턴스를",{"2":{"1267":1,"1657":1,"1861":1,"1862":1,"2067":1,"2094":1}}],["인스턴스",{"0":{"1266":1,"2067":1,"2094":1},"1":{"1267":1,"1268":1,"1269":1,"1270":1,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":1},"2":{"261":1,"635":2,"838":1,"1237":1,"1265":1,"1304":1,"1321":1,"1343":1,"1391":1,"1652":1,"1759":1,"1817":1,"1858":1,"1879":1,"1893":1,"1896":2,"1898":2,"2035":1}}],["인쇄",{"2":{"73":1,"1435":1}}],["인",{"2":{"51":1,"98":1,"744":1,"1838":1}}],["인코딩됨",{"2":{"59":1}}],["인코딩",{"2":{"45":1,"51":1,"651":1,"665":1,"928":1,"973":2}}],["인코딩된",{"2":{"44":1,"51":1,"665":1}}],["인증되지",{"2":{"1389":1}}],["인증되었는지",{"2":{"1385":1}}],["인증된",{"2":{"1385":1}}],["인증이",{"2":{"132":1,"354":1,"358":1,"394":1,"830":1,"949":1,"1360":1,"1536":1}}],["인증을",{"2":{"22":1,"803":1,"808":1,"1224":2}}],["인증",{"0":{"6":1,"100":1,"132":1,"213":1,"354":1,"391":1,"394":1,"518":1,"802":1,"808":1,"873":1,"938":1,"951":1,"1223":1,"1228":1,"1235":1,"1308":1,"1360":1,"1376":1,"1389":1,"1525":1,"1760":1,"1791":1,"2164":1,"2168":1},"1":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"133":1,"134":1,"214":1,"215":1,"355":1,"356":1,"357":1,"358":1,"359":1,"803":1,"804":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1,"816":1,"817":1,"818":1,"819":1,"939":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"947":1,"948":1,"949":1,"950":1,"951":1,"952":2,"953":2,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"961":1,"962":1,"963":1,"964":1,"965":1,"1224":1,"1225":1,"1226":1,"1227":1,"1228":1,"1229":2,"1230":2,"1231":2,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1,"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1,"1792":1,"1793":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"2165":1,"2166":1,"2167":1,"2168":1},"2":{"7":2,"11":1,"20":1,"28":2,"39":1,"41":1,"54":1,"61":1,"63":1,"90":1,"100":1,"101":2,"105":1,"115":1,"117":1,"130":2,"138":1,"141":1,"142":1,"203":1,"215":2,"217":2,"226":1,"353":1,"363":1,"388":1,"394":2,"398":1,"421":1,"423":1,"428":1,"439":2,"440":1,"516":1,"538":1,"540":4,"542":2,"554":2,"555":1,"581":1,"585":1,"598":1,"636":2,"668":1,"672":2,"676":1,"682":1,"769":1,"803":1,"807":1,"810":1,"820":1,"831":1,"852":1,"859":1,"864":1,"917":1,"937":1,"942":1,"948":1,"952":1,"965":1,"1080":1,"1168":1,"1192":1,"1226":1,"1237":1,"1253":1,"1265":1,"1290":1,"1359":2,"1372":1,"1377":1,"1391":1,"1525":1,"1660":1,"1663":1,"1674":1,"1680":2,"1688":1,"1726":1,"1734":1,"1758":1,"1760":2,"1765":1,"1775":1,"1780":2,"1784":1,"1792":1,"1797":1,"1798":1,"1817":1,"1864":1,"1909":1,"1911":3,"1923":1,"1934":1,"2034":1,"2091":1,"2123":1,"2130":1}}],["로케일이",{"2":{"2143":1}}],["로케일을",{"2":{"1887":1}}],["로케일",{"0":{"1887":1,"2143":1},"2":{"1877":1,"1880":2,"1888":1,"1898":1}}],["로더",{"2":{"1199":1,"1652":1,"1834":1,"1891":1,"1903":1}}],["로고",{"2":{"1088":1,"1089":1,"1652":1,"1834":1,"1837":1}}],["로딩을",{"2":{"1289":1,"1302":1}}],["로딩이",{"2":{"1289":1}}],["로딩",{"0":{"1013":1,"1294":1,"1325":1,"1329":1,"1392":1,"1615":1,"2000":1},"1":{"1014":1,"1015":1,"1016":1,"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1,"2001":1},"2":{"1272":1,"1273":1,"1275":1,"1289":1,"1393":1,"1397":1,"1398":1,"1400":1,"1615":1,"1618":1,"1660":1,"1758":2,"1762":2,"1784":1,"1838":2,"1862":1,"1903":2,"1909":1,"1912":5,"1923":1,"2001":4,"2005":1,"2007":1,"2034":1,"2123":1}}],["로거",{"2":{"913":1}}],["로드된",{"2":{"1353":1}}],["로드",{"0":{"1097":1,"1349":1},"2":{"180":1,"709":1,"1029":1,"1096":1,"1353":1,"1618":1,"1702":1,"2330":1}}],["로직이",{"2":{"1857":1}}],["로직에",{"2":{"1662":1,"1823":1}}],["로직은",{"2":{"565":1,"1810":1}}],["로직을",{"2":{"385":1,"1320":1,"1539":1,"1819":2,"1851":1,"1854":1}}],["로직",{"0":{"1276":1,"1318":1,"1335":1,"1534":1,"1668":1},"1":{"1336":1,"1337":1},"2":{"154":1,"368":1,"372":1,"377":1,"380":1,"397":1,"448":1,"514":1,"529":1,"532":1,"542":1,"629":1,"649":1,"687":1,"699":1,"705":1,"729":1,"1036":1,"1273":1,"1308":1,"1332":1,"1539":1,"1588":1,"1600":1,"1611":1,"1613":3,"1652":1,"1668":1,"1774":1,"1817":1,"1862":1,"1920":1}}],["로깅합니다",{"2":{"154":1,"806":1}}],["로깅을",{"2":{"152":1}}],["로깅",{"0":{"152":1,"153":1,"250":1,"762":1,"805":1,"1535":1},"1":{"153":1,"154":2,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"763":1,"806":1},"2":{"439":2,"541":1,"551":1,"554":2,"574":2,"583":1,"586":1,"598":3,"668":1,"673":2,"681":1,"747":1,"763":1,"905":1,"1320":1,"1535":2,"1539":1}}],["로컬에서",{"2":{"1741":1}}],["로컬",{"0":{"1755":1},"2":{"105":1,"114":1,"239":1,"290":1,"443":1,"473":1,"539":2,"551":1,"642":1,"643":1,"750":2,"773":1,"1779":1}}],["로",{"2":{"38":1,"79":2,"87":1,"186":1,"1173":1,"1749":1,"2058":1,"2179":1}}],["로그는",{"2":{"1411":1}}],["로그에",{"2":{"1320":1,"1402":1,"1539":1}}],["로그로",{"2":{"681":1}}],["로그가",{"2":{"505":1}}],["로그아웃됨",{"2":{"2168":1}}],["로그아웃과",{"2":{"106":1}}],["로그아웃을",{"2":{"105":1}}],["로그아웃",{"0":{"105":1,"1249":1,"1388":1},"2":{"105":1,"518":1,"1380":1,"1383":1,"1895":1}}],["로그를",{"2":{"34":1,"1142":1,"1144":1,"1148":1,"1402":1,"1407":1,"1918":1}}],["로그",{"0":{"34":1,"155":1,"157":1,"507":1,"558":1,"991":1,"992":1,"993":1,"1141":1,"1146":1,"1297":1,"1313":1,"1330":1,"1401":1,"1409":1},"1":{"156":1,"157":1,"992":1,"993":1,"994":1,"1142":1,"1143":1,"1144":1,"1145":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1402":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1},"2":{"34":1,"159":1,"471":1,"507":1,"546":1,"549":1,"558":3,"564":2,"763":5,"991":1,"1002":1,"1088":1,"1089":1,"1150":3,"1151":1,"1272":1,"1313":1,"1404":2,"1406":1,"1408":1,"1410":3,"1535":1,"1660":1,"1758":2,"1764":2,"1909":1,"1918":6,"1923":1,"2024":3,"2025":2,"2278":1}}],["로그인하세요",{"2":{"2166":1,"2181":1}}],["로그인과",{"2":{"104":1}}],["로그인합니다",{"2":{"104":1}}],["로그인에",{"2":{"103":1}}],["로그인을",{"2":{"103":1}}],["로그인해야",{"2":{"17":1}}],["로그인",{"0":{"100":1,"103":1,"104":1,"108":1,"109":1,"1229":1,"1248":1,"1387":1,"1697":1,"1797":1},"1":{"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":2,"110":2,"111":2,"112":2,"113":2,"114":1,"115":1},"2":{"9":1,"18":1,"26":1,"56":1,"59":1,"99":1,"100":1,"103":2,"104":2,"105":1,"114":1,"130":1,"142":1,"145":1,"518":2,"1249":1,"1262":2,"1276":2,"1287":1,"1308":1,"1309":1,"1337":1,"1380":1,"1387":1,"1389":1,"1390":1,"1525":2,"1663":1,"1697":1,"1794":2,"1795":1,"1797":1,"1895":2,"1920":1,"1936":1,"1937":1,"1994":1,"2028":1,"2057":1,"2162":1,"2165":1,"2167":1,"2181":1}}],["대문자",{"2":{"2290":1}}],["대문자로",{"2":{"38":1}}],["대안",{"0":{"2283":1}}],["대용량",{"2":{"2098":1,"2322":1}}],["대시보드",{"2":{"1478":1,"1663":1,"1669":1,"1688":1,"1775":1,"1817":1,"1879":1,"1926":1,"1930":1,"1939":1}}],["대한",{"2":{"1275":1,"1773":1,"1775":1,"1776":1,"1786":1,"2116":1}}],["대신",{"2":{"1162":1,"1537":1,"1715":1,"1830":1}}],["대량의",{"2":{"1045":1}}],["대량",{"2":{"699":1}}],["대상이",{"2":{"1848":1}}],["대상",{"2":{"670":1,"1949":1}}],["대해",{"2":{"211":1,"798":1,"952":1,"963":1}}],["대칭키",{"2":{"205":1,"785":1,"955":1}}],["대부분",{"2":{"101":1}}],["대부분의",{"2":{"28":1,"132":1,"1289":1,"1400":1,"1522":1,"1957":1,"1973":1,"2029":1,"2274":1}}],["대기합니다",{"2":{"1261":1}}],["대기",{"2":{"97":1,"738":1,"1261":1,"1276":1,"1336":1,"1534":1}}],["대소문자",{"2":{"38":1}}],["기록할",{"2":{"1535":1}}],["기록하세요",{"2":{"1320":1,"1539":1}}],["기록됩니다",{"2":{"1313":1,"1402":1}}],["기록",{"0":{"1313":1}}],["기획팀",{"2":{"1027":1}}],["기술들을",{"2":{"543":1}}],["기술",{"0":{"433":1,"543":1,"1682":1,"1773":1},"1":{"1683":1,"1684":1,"1685":1},"2":{"512":1,"1773":1,"2116":1}}],["기반으로",{"2":{"1024":2}}],["기반의",{"2":{"425":1,"538":1,"1679":1,"1680":1}}],["기반",{"2":{"152":1,"428":1,"538":2,"574":1,"598":1,"882":1,"909":1,"977":1,"1224":1,"1680":3,"1752":1,"1762":1,"2005":1,"2007":1}}],["기능입니다",{"2":{"1800":1,"1804":1,"1812":1}}],["기능들은",{"2":{"541":1}}],["기능을",{"2":{"161":1,"202":1,"203":1,"227":1,"389":1,"432":2,"454":1,"538":1,"567":1,"570":1,"589":1,"591":1,"597":1,"613":1,"645":1,"683":1,"725":1,"875":1,"938":1,"1657":1,"1686":1,"1688":1,"1689":1,"1690":1,"1691":1,"1752":1,"1786":1,"1802":1,"1814":1,"1941":1,"1961":1,"1977":1,"2106":1}}],["기능",{"0":{"202":1,"428":1,"429":1,"517":1,"519":1,"524":1,"525":1,"541":1,"571":1,"592":1,"597":1,"856":1,"878":1,"882":1,"886":1,"913":1,"917":1,"921":1,"923":1,"936":1,"969":1,"973":1,"977":1,"981":1,"985":1,"1062":1,"1069":1,"1104":1,"1111":1,"1118":1,"1139":1,"1150":1,"1156":1,"1272":1,"1275":1,"1293":1,"1359":1,"1433":1,"1439":1,"1444":1,"1618":1,"1799":1,"1802":1,"1811":1,"1814":1,"1948":1,"2068":1,"2082":1,"2095":1,"2099":1,"2119":1},"1":{"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"518":1,"519":1,"520":1,"521":1,"525":1,"526":1,"527":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"593":1,"594":1,"595":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"1070":1,"1071":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1800":1,"1801":1,"1802":1,"1812":1,"1813":1,"1814":1,"1949":1},"2":{"130":3,"203":1,"217":1,"347":1,"367":1,"388":4,"425":1,"439":1,"440":4,"441":3,"451":1,"516":4,"520":1,"521":1,"523":3,"525":1,"526":1,"527":1,"538":1,"554":1,"555":4,"556":3,"565":2,"568":1,"600":1,"612":1,"618":1,"630":1,"634":1,"635":1,"636":1,"637":1,"639":1,"666":1,"688":1,"700":1,"724":1,"745":1,"794":1,"827":1,"899":1,"977":1,"1111":1,"1118":1,"1618":1,"1664":1,"1665":2,"1666":1,"1775":3,"1794":1,"1861":1,"1862":1,"1864":1,"1879":1,"1896":1,"1902":1,"1903":1,"1942":1,"1945":1,"1946":1,"1947":1,"1949":1,"1951":1,"1953":1,"1955":1,"1962":1,"1965":1,"1966":1,"1967":1,"1969":1,"1970":1,"1971":1,"1981":1,"1982":1,"1983":1,"1984":1,"1999":1,"2003":2,"2005":1,"2006":1,"2007":1,"2009":1,"2010":1,"2011":2,"2013":1,"2014":1,"2015":1,"2017":1,"2018":2,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2029":1,"2034":1,"2114":1,"2137":1}}],["기존은",{"2":{"45":1}}],["기존",{"2":{"45":3,"651":2,"656":1,"1885":2,"2177":1}}],["기타",{"0":{"294":1,"827":1,"966":1,"1288":1,"1312":1,"1334":1,"1429":1,"2110":1,"2131":1},"1":{"967":1,"968":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"985":1,"986":1,"987":1,"1430":1,"1431":1,"1432":1,"1433":1,"1434":1,"1435":1,"1436":1,"1437":1,"1438":1,"1439":1,"1440":1,"1441":1,"1442":1,"1443":1,"1444":1,"1445":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2132":1,"2133":1,"2134":1,"2135":1,"2136":1,"2137":1,"2138":1},"2":{"37":1,"103":1,"121":1,"676":1,"966":1,"1099":1,"1240":1,"1314":1,"1319":1,"1532":1,"1606":1,"1660":1,"1758":1,"1773":1,"1904":1}}],["기본으로",{"2":{"2143":1}}],["기본적인",{"2":{"1711":1,"1786":1}}],["기본적으로",{"2":{"1316":1,"1736":1,"1741":1}}],["기본값을",{"2":{"2205":1}}],["기본값은",{"2":{"1178":1}}],["기본값",{"0":{"462":1,"834":1},"2":{"22":1,"32":1,"427":1,"472":1,"480":1,"634":1,"1026":1,"1033":1,"1466":1,"1467":1,"1707":1,"1783":1,"2205":2,"2208":1,"2212":3}}],["기본",{"0":{"7":1,"20":1,"28":1,"41":1,"54":1,"63":1,"90":1,"101":1,"117":1,"197":1,"240":1,"255":1,"285":1,"305":1,"308":1,"400":1,"417":1,"529":1,"532":1,"822":1,"869":1,"989":1,"996":1,"1056":1,"1269":1,"1278":1,"1366":1,"1490":1,"1515":1,"1522":1,"1551":1,"1600":1,"1646":1,"1697":1,"1785":1,"2203":1},"1":{"1270":1,"2204":1,"2205":1},"2":{"51":1,"239":1,"383":1,"384":1,"397":1,"432":1,"437":1,"453":1,"551":1,"572":1,"598":1,"600":1,"641":1,"643":1,"665":1,"687":1,"705":1,"747":1,"749":1,"768":1,"773":1,"869":1,"1167":1,"1288":1,"1312":1,"1637":1,"1647":1,"1688":1,"1697":1,"1735":1,"1759":1,"1763":1,"1769":1,"1824":1,"1879":3,"1895":1,"1898":1,"1899":4,"1946":1,"1994":2,"2029":1,"2079":1,"2142":1}}],["브라우저별로",{"2":{"2333":1}}],["브라우저에",{"2":{"1848":1,"2322":1}}],["브라우저에서",{"2":{"17":1,"506":1,"1492":1,"1617":1,"1696":1,"1736":1}}],["브라우저의",{"2":{"1786":1}}],["브라우저가",{"2":{"1493":1}}],["브라우저를",{"2":{"1239":1,"1411":1,"1719":1}}],["브라우저",{"0":{"1719":1},"2":{"34":1,"56":1,"59":1,"1766":1,"1836":1,"2167":1,"2188":1}}],["종료합니다",{"2":{"2177":1}}],["종료",{"2":{"33":1,"2177":1,"2210":1}}],["구성합니다",{"2":{"1864":1}}],["구성",{"0":{"1088":1,"1770":1}}],["구성되어",{"2":{"130":1}}],["구축하고",{"2":{"544":1}}],["구축하기",{"0":{"1755":1},"2":{"539":1}}],["구분되어",{"2":{"1823":1}}],["구분자를",{"2":{"2304":1}}],["구분자로",{"2":{"2249":1,"2305":1,"2306":1}}],["구분자",{"2":{"665":1,"2207":1,"2212":2}}],["구분",{"2":{"138":1,"449":1}}],["구현합니다",{"2":{"2118":1}}],["구현하세요",{"2":{"1320":1,"1539":1}}],["구현하는",{"2":{"22":1}}],["구현되었습니다",{"2":{"1024":1}}],["구현체",{"2":{"932":1}}],["구현됨",{"2":{"687":1,"705":1}}],["구현된",{"2":{"506":1}}],["구현",{"0":{"1358":1},"2":{"126":1,"520":1,"521":1,"525":1,"526":1,"527":1,"614":1,"629":1,"686":1,"699":1,"977":1,"2282":1}}],["구조만",{"2":{"687":1,"705":1}}],["구조에",{"2":{"560":1}}],["구조를",{"2":{"368":1,"383":1,"448":1,"455":1,"456":1,"513":1,"1677":1,"1831":1,"1973":1,"1989":1}}],["구조와",{"2":{"365":1,"432":1,"436":1,"538":1,"548":1,"1774":1}}],["구조로",{"2":{"59":1,"432":1}}],["구조",{"0":{"35":1,"45":1,"58":1,"59":1,"197":1,"284":1,"305":1,"308":1,"367":1,"368":1,"376":1,"377":1,"388":1,"400":1,"406":1,"417":1,"431":1,"434":1,"436":1,"437":1,"438":1,"442":1,"448":1,"455":1,"478":1,"513":1,"514":1,"516":1,"523":1,"529":1,"532":1,"548":1,"549":1,"550":1,"553":1,"568":1,"598":1,"614":1,"632":1,"646":1,"668":1,"684":1,"702":1,"726":1,"746":1,"747":1,"753":1,"989":1,"996":1,"1089":1,"1113":1,"1120":1,"1225":1,"1240":1,"1339":1,"1347":1,"1366":1,"1409":1,"1555":1,"1557":1,"1558":1,"1559":1,"1581":1,"1587":1,"1598":1,"1611":1,"1651":1,"1652":1,"1774":1,"1801":1,"1813":1,"1815":1,"1816":1,"1817":1,"1834":1,"1853":1,"1858":1,"1877":1,"1891":1,"1909":1,"1926":1,"1934":1,"1942":1,"1962":1,"1973":1,"1978":1,"1989":1,"1994":1,"2087":1,"2090":1},"1":{"36":1,"37":1,"59":1,"285":1,"286":1,"287":1,"377":1,"378":1,"379":1,"380":1,"381":1,"437":1,"438":1,"439":2,"440":2,"441":2,"442":1,"443":2,"444":2,"445":2,"446":2,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"525":1,"526":1,"527":1,"528":1,"529":1,"530":1,"531":1,"532":1,"533":1,"534":1,"535":1,"536":1,"549":1,"550":1,"551":2,"552":2,"553":1,"554":2,"555":2,"556":2,"557":1,"558":1,"559":1,"560":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1,"1226":1,"1227":1,"1558":1,"1559":1,"1560":2,"1561":2,"1562":2,"1563":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1816":1,"1817":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"1828":1,"1829":1,"1830":1,"1831":1},"2":{"33":1,"201":1,"396":1,"397":1,"398":1,"431":1,"435":1,"456":1,"512":1,"539":1,"542":2,"566":2,"596":1,"600":1,"649":1,"1339":1,"1563":1,"1611":1,"1677":1,"1680":1,"1686":1,"1692":1,"1750":1,"1754":2,"1774":3,"1777":2,"1866":1,"1879":1,"1947":1,"2009":1,"2010":1,"2011":1,"2017":1,"2115":1,"2138":1}}],["받은",{"2":{"1274":1,"1323":1}}],["받기",{"2":{"46":1}}],["받는",{"2":{"33":1,"1261":1}}],["받습니다",{"2":{"22":1,"623":1}}],["맵",{"2":{"32":1}}],["xe",{"2":{"257":1,"483":1,"835":1}}],["xfltjeubufgiomywbs46ldm+rnynup2eg",{"2":{"206":1,"244":1,"790":1,"956":1}}],["xr109e",{"2":{"206":1,"244":1,"790":1,"956":1}}],["x=",{"2":{"197":3}}],["xssutil",{"2":{"961":2}}],["xssfworkbook",{"2":{"879":1}}],["xssfilter",{"2":{"638":1,"675":1}}],["xssrequestwrapper",{"2":{"670":2}}],["xss",{"0":{"210":1,"677":1,"797":1,"960":1,"963":1},"1":{"211":1,"212":1,"678":1,"798":1,"799":1,"961":1,"962":1,"963":1},"2":{"203":1,"211":4,"212":1,"221":1,"225":1,"428":1,"551":1,"554":3,"583":1,"587":1,"638":1,"668":3,"670":4,"676":1,"678":3,"680":1,"681":1,"682":1,"747":1,"761":1,"798":2,"936":1,"961":1,"963":2,"964":1,"1236":1}}],["xsd",{"2":{"197":2}}],["xsi",{"2":{"197":1}}],["xsi=",{"2":{"197":1}}],["x26",{"2":{"94":2,"672":2,"1258":4,"1276":6,"1286":2,"1308":4,"1310":2,"1326":2,"1332":4,"1333":2,"1360":2,"1529":2,"1538":2}}],["xlsx",{"2":{"175":1,"879":1,"883":1,"1548":2,"2262":2}}],["xls",{"2":{"75":1,"175":1}}],["x",{"0":{"826":1},"2":{"75":1,"217":1,"636":1,"964":2,"1714":2,"1715":1,"1732":1,"1836":1}}],["xmlschema",{"2":{"197":1}}],["xmlns",{"2":{"197":1}}],["xmlns=",{"2":{"197":1}}],["xml",{"0":{"159":1,"221":1,"284":1,"306":1,"333":1,"374":1,"409":1,"413":1,"452":1,"535":1,"680":1,"761":1,"763":1},"1":{"285":1,"286":1,"287":1,"307":1,"308":1},"2":{"32":2,"33":1,"195":1,"197":2,"221":1,"263":3,"264":2,"285":1,"286":1,"287":1,"289":1,"296":1,"297":1,"307":1,"308":2,"310":1,"311":1,"313":1,"314":1,"330":3,"331":2,"333":2,"335":1,"336":1,"337":1,"374":2,"381":1,"386":1,"396":1,"409":1,"413":2,"414":1,"437":2,"444":1,"445":3,"478":1,"535":2,"549":1,"551":6,"561":1,"600":2,"628":1,"680":1,"747":3,"752":3,"753":2,"754":3,"759":1,"761":1,"763":1,"774":3,"835":1,"836":1,"843":3,"844":2,"904":1,"905":1,"906":1,"909":1,"923":1,"927":1,"928":1,"929":1,"936":1,"962":1}}],["x3c",{"2":{"0":8,"149":2,"154":1,"163":1,"165":3,"172":2,"178":7,"179":2,"195":8,"197":46,"199":10,"223":3,"236":1,"273":1,"274":1,"279":1,"280":1,"281":1,"285":8,"286":8,"287":4,"289":26,"296":12,"297":20,"305":6,"308":6,"310":6,"311":2,"313":8,"314":4,"318":3,"321":1,"322":1,"323":1,"324":2,"326":2,"332":3,"333":6,"335":2,"336":2,"337":2,"390":3,"400":2,"412":3,"413":6,"417":4,"418":7,"421":2,"477":1,"529":2,"532":1,"534":3,"535":6,"570":2,"593":3,"594":2,"600":1,"601":5,"604":1,"616":2,"617":3,"625":4,"626":2,"628":8,"635":3,"638":3,"648":3,"649":2,"663":2,"675":6,"696":1,"704":3,"707":3,"708":6,"728":2,"729":1,"753":6,"759":12,"799":3,"818":1,"835":8,"836":8,"846":3,"859":2,"883":2,"888":2,"891":1,"894":3,"904":6,"905":6,"906":6,"927":8,"928":6,"929":8,"978":2,"986":1,"1006":3,"1007":4,"1011":3,"1012":3,"1016":5,"1020":5,"1027":11,"1029":2,"1035":5,"1036":5,"1040":5,"1043":2,"1044":2,"1056":5,"1072":6,"1105":5,"1112":5,"1119":5,"1126":5,"1140":5,"1151":2,"1157":2,"1219":2,"1250":10,"1318":1,"1352":2,"1385":2,"1387":2,"1388":2,"1389":2,"1399":5,"1410":2,"1420":2,"1428":13,"1454":2,"1463":10,"1464":7,"1480":2,"1534":1,"1537":6,"1558":3,"1578":5,"1581":7,"1583":2,"1584":2,"1585":2,"1588":9,"1591":3,"1592":3,"1593":5,"1594":10,"1600":15,"1609":21,"1613":2,"1635":2,"1638":2,"1641":2,"1646":8,"1648":8,"1649":4,"1694":1,"1699":11,"1702":2,"1704":5,"1705":5,"1706":2,"1707":2,"1709":8,"1710":2,"1731":1,"1836":1,"1837":8,"1844":3,"1845":5,"1855":2,"1860":5,"1882":6,"1883":6,"1884":2,"1885":4,"1887":5,"1920":2,"1921":2,"1945":3,"1949":3,"1969":3,"1973":19,"1974":5,"1981":3,"1983":3,"1989":15,"1990":3,"1997":3,"1999":3,"2003":3,"2005":5,"2006":3,"2009":3,"2014":3,"2062":4,"2078":10,"2120":5,"2177":1,"2222":2,"2224":2,"2225":8,"2226":2,"2319":2}}],["데이터는",{"2":{"1239":1,"1251":1,"1252":1,"1479":1,"2331":1,"2332":1}}],["데이터소스",{"0":{"252":1,"837":1},"1":{"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"838":1},"2":{"251":1,"302":1,"439":1,"544":1,"554":1,"632":1,"634":1,"644":1,"770":1}}],["데이터로",{"2":{"219":1,"671":1}}],["데이터의",{"2":{"219":1,"671":1,"1208":1,"2109":1}}],["데이터가",{"2":{"121":1,"123":1,"1282":1,"1289":1,"1348":1,"1353":1,"2330":1}}],["데이터도",{"2":{"104":1}}],["데이터",{"0":{"56":1,"57":1,"58":1,"67":1,"178":1,"324":1,"707":1,"1240":1,"1250":1,"1298":1,"1301":1,"1327":1,"1339":1,"1347":1,"1769":1,"1985":1,"2226":1,"2331":1},"1":{"59":1,"1986":1,"1987":1},"2":{"45":1,"46":1,"56":1,"67":1,"103":4,"114":1,"121":1,"179":1,"199":1,"205":1,"206":1,"208":1,"209":1,"219":1,"266":1,"430":1,"587":1,"600":1,"602":2,"638":1,"656":1,"671":2,"704":1,"707":1,"708":1,"798":2,"801":2,"849":1,"882":1,"883":1,"963":1,"1026":1,"1033":1,"1034":1,"1045":1,"1127":1,"1215":1,"1216":1,"1217":1,"1240":1,"1248":1,"1252":1,"1272":1,"1319":1,"1339":1,"1415":1,"1426":1,"1444":3,"1445":5,"1449":1,"1532":1,"1548":1,"1555":1,"1609":2,"1618":1,"1660":1,"1685":1,"1702":1,"1758":1,"1760":2,"1763":1,"1766":3,"1769":1,"1773":1,"1794":1,"1797":1,"1914":2,"1915":1,"1978":2,"1981":1,"1986":1,"2003":2,"2005":1,"2007":1,"2109":1,"2118":1,"2123":1,"2133":1,"2163":1,"2194":1,"2218":1,"2231":1,"2232":1,"2233":1,"2258":2,"2261":1,"2262":1,"2325":3,"2326":1,"2330":2,"2332":2}}],["데이터를",{"2":{"32":1,"178":1,"219":1,"671":1,"801":1,"963":1,"1045":1,"1217":1,"1239":1,"1242":1,"1247":1,"1252":1,"1301":1,"1350":2,"1417":1,"1442":1,"1447":1,"1451":1,"1974":1,"1986":1,"1987":1,"1990":1,"2098":1,"2194":1,"2233":1,"2261":1,"2322":1,"2325":1,"2326":1,"2329":1,"2330":1}}],["데이터에서",{"2":{"31":1}}],["데이터베이스에",{"2":{"1606":1,"1625":1}}],["데이터베이스에서",{"2":{"839":1}}],["데이터베이스별",{"2":{"754":1}}],["데이터베이스와",{"2":{"328":1}}],["데이터베이스마다",{"2":{"263":1,"330":1,"843":1}}],["데이터베이스를",{"2":{"252":1,"832":2}}],["데이터베이스",{"0":{"27":1,"253":1,"293":1,"319":1,"390":1,"427":1,"461":1,"479":1,"480":1,"510":1,"832":1,"833":1,"1000":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"462":1,"463":1,"464":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"833":1,"834":2,"835":2,"836":2,"837":1,"838":1,"839":1,"840":1,"841":1,"842":1,"843":1,"844":1,"845":1,"846":1,"847":1,"848":1,"849":1,"850":1,"851":1,"852":1},"2":{"27":1,"130":1,"141":1,"145":1,"205":1,"252":1,"253":1,"259":1,"316":1,"325":1,"372":1,"381":1,"397":1,"425":1,"427":4,"461":1,"469":1,"472":1,"480":1,"481":1,"510":1,"538":1,"539":1,"540":2,"542":1,"543":1,"579":1,"601":1,"634":2,"834":1,"836":1,"838":1,"846":1,"852":1,"909":1,"937":1,"1000":2}}],["번역",{"2":{"1880":1,"1882":1}}],["번에",{"2":{"43":1,"1031":1,"1245":1}}],["번째",{"0":{"1698":1},"1":{"1699":1,"1700":1,"1701":1},"2":{"31":1,"119":1,"123":1,"1261":1,"1699":1,"1755":1,"1786":1}}],["번호를",{"2":{"1747":1}}],["번호",{"2":{"31":1,"45":1,"93":1,"94":1,"731":1,"740":1}}],["행별",{"2":{"2014":1}}],["행",{"2":{"31":1,"1071":3,"2015":2,"2099":1,"2119":1,"2261":1}}],["순위로",{"2":{"211":1}}],["순차적으로",{"2":{"31":1}}],["순서를",{"2":{"1106":1}}],["순서와",{"2":{"51":1,"665":1}}],["순서는",{"2":{"51":1,"665":1}}],["순서",{"0":{"676":1,"796":1},"2":{"9":1,"45":2,"51":1,"665":1,"675":1,"681":1,"798":1,"803":1,"952":1,"963":1,"1104":1}}],["일",{"2":{"2253":1}}],["일`",{"2":{"2224":1}}],["일수",{"2":{"2209":1,"2210":2,"2243":1,"2277":1}}],["일수를",{"2":{"2209":1,"2242":1,"2277":1}}],["일별로",{"2":{"564":1}}],["일관성",{"2":{"432":2,"1164":1,"1563":1}}],["일관된",{"2":{"384":1,"393":1,"600":1,"1563":1}}],["일시적인",{"2":{"1318":1,"1320":1,"1534":1,"1539":1}}],["일시",{"2":{"93":2,"734":1,"735":1}}],["일부",{"2":{"63":2}}],["일반적으로",{"2":{"1263":1,"1303":1}}],["일반적인",{"0":{"998":1,"2170":1,"2176":1,"2183":1},"1":{"999":1,"1000":1,"1001":1,"1002":1,"2171":1,"2172":1,"2173":1,"2174":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2184":1,"2185":1,"2186":1,"2187":1},"2":{"546":1,"1339":1,"1780":2,"2269":1}}],["일반",{"0":{"79":1,"103":1,"186":1,"714":1,"1211":1},"2":{"33":1,"69":1,"104":1,"179":1,"600":1,"708":1,"1298":1,"1566":1,"1571":1,"1572":1,"1794":1,"1936":1}}],["일괄",{"0":{"31":1}}],["일치하는",{"2":{"121":1,"123":1,"1358":1}}],["일치하지",{"2":{"15":2}}],["일치해야",{"2":{"30":1,"51":1,"665":1}}],["일치",{"2":{"9":1,"16":1,"386":1}}],["메타",{"0":{"1362":1},"2":{"1362":1}}],["메타데이터",{"2":{"557":1,"1672":1,"1817":1,"2038":1}}],["메커니즘",{"0":{"1256":1}}],["메인",{"0":{"1084":1},"1":{"1085":1,"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1},"2":{"439":1,"549":1,"554":1,"568":1,"1086":1,"1088":1,"1359":1,"1373":1,"1663":2,"1688":1,"1765":2,"1775":1,"1797":1,"1817":1,"1857":1,"1864":1,"1895":1,"1934":1,"1938":1,"1994":1}}],["메일",{"0":{"169":1,"589":1,"683":1,"695":1},"1":{"170":1,"171":1,"172":1,"173":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":2,"697":1,"698":1,"699":1,"700":1},"2":{"168":1,"292":1,"429":1,"439":1,"541":1,"554":1,"568":1,"577":1,"589":3,"598":1,"666":1,"684":3,"686":2,"687":1,"688":1,"698":1,"700":1}}],["메서드명",{"2":{"449":1}}],["메서드",{"0":{"234":1,"348":1,"1241":1},"1":{"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1},"2":{"154":1,"214":1,"393":1,"500":1,"600":1,"601":1,"602":1,"603":1,"604":1,"616":1,"617":1,"618":1,"649":1,"678":1,"698":1,"729":1,"862":1}}],["메서드를",{"2":{"139":1,"348":1}}],["메뉴를",{"2":{"1102":1,"1418":1,"1604":1,"1623":1,"1701":1}}],["메뉴의",{"2":{"1073":1,"1106":1,"1370":1,"1437":1,"1456":1}}],["메뉴명",{"2":{"120":1,"121":2}}],["메뉴2",{"2":{"120":1}}],["메뉴는",{"2":{"114":1}}],["메뉴1",{"2":{"103":1,"120":1}}],["메뉴",{"0":{"1065":1,"1070":1,"1071":1,"1073":1,"1100":1,"1107":1,"1113":1,"1114":1,"1120":1,"1347":1,"1350":1,"1412":1,"1436":1,"1605":1,"1606":1,"1607":1,"1624":1,"1625":1,"1626":1,"1701":1,"2016":1},"1":{"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1101":1,"1102":1,"1103":1,"1104":1,"1105":1,"1106":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1113":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1121":1,"1413":1,"1414":1,"1415":1,"1416":1,"1417":1,"1418":1,"1419":1,"1420":1,"1437":1,"1438":1,"1439":1,"1440":1,"1606":1,"1607":1,"1625":1,"1626":1,"2017":1,"2018":1,"2019":1},"2":{"103":4,"104":1,"114":1,"120":2,"1067":1,"1088":2,"1089":1,"1104":2,"1109":1,"1111":3,"1113":3,"1116":1,"1118":3,"1120":2,"1121":1,"1345":1,"1348":1,"1350":3,"1353":2,"1354":1,"1369":1,"1407":1,"1409":2,"1413":1,"1415":3,"1417":1,"1420":1,"1439":2,"1440":2,"1468":2,"1469":2,"1475":1,"1587":1,"1604":1,"1606":5,"1619":1,"1623":1,"1625":4,"1660":1,"1667":1,"1758":2,"1763":2,"1768":2,"1817":1,"1880":1,"1909":1,"1913":7,"1923":1,"1994":1,"2014":3,"2017":4,"2018":2,"2019":2,"2029":1,"2031":1,"2034":1,"2099":1,"2119":1,"2123":1,"2129":1}}],["메시지가",{"2":{"1288":1,"1312":1}}],["메시지입니다",{"2":{"94":1,"742":1}}],["메시지를",{"2":{"89":1,"92":1,"1264":1,"1316":1,"1320":1,"1536":1,"1539":1,"1885":1}}],["메시지는",{"2":{"37":1,"1288":1}}],["메시지",{"0":{"92":1,"97":1,"736":1,"738":1,"1315":1,"1533":1,"1536":1,"1885":1},"1":{"93":1,"94":1,"737":1,"1316":1,"1317":1},"2":{"30":1,"34":2,"57":1,"71":1,"92":1,"93":2,"94":1,"98":1,"105":1,"137":1,"352":1,"403":1,"530":1,"629":1,"725":1,"728":1,"729":1,"731":1,"744":1,"1312":2,"1320":1,"1339":1,"1533":1,"1539":1,"1555":1,"1879":2,"1880":2,"1885":3,"1949":1}}],["메모리에만",{"2":{"1236":1,"1390":1,"2168":1}}],["메모리",{"0":{"2174":1},"2":{"11":1,"111":1,"471":1,"810":1,"942":1,"1226":1,"2174":1}}],["요소",{"0":{"1088":1},"2":{"970":1}}],["요구사항을",{"2":{"1729":1}}],["요구사항",{"0":{"457":1,"458":1,"467":1,"470":1,"1712":1,"1721":1,"1724":1},"1":{"458":1,"459":2,"460":2,"461":2,"462":2,"463":2,"464":2,"465":2,"466":2,"467":1,"468":2,"469":2,"470":1,"471":2,"472":2,"473":1,"474":1,"1713":1,"1714":1,"1715":1,"1716":1,"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":2,"1723":2,"1724":1,"1725":2,"1726":2,"1727":1,"1728":1,"1729":1},"2":{"435":1,"539":1,"1692":1,"1754":2}}],["요구하는",{"2":{"30":1,"103":1}}],["요약",{"0":{"433":1,"1682":1},"1":{"1683":1,"1684":1,"1685":1},"2":{"862":1}}],["요청한",{"2":{"1536":1}}],["요청입니다",{"2":{"1526":1,"1536":1}}],["요청만",{"2":{"1261":1}}],["요청이",{"2":{"1261":1,"1271":1,"1287":1,"1292":1,"1402":1}}],["요청은",{"2":{"948":1}}],["요청에",{"2":{"211":1,"225":1,"671":1,"681":1,"798":1,"952":1,"963":1}}],["요청을",{"2":{"22":1,"795":1,"806":1,"1264":1}}],["요청",{"0":{"109":1,"139":1,"349":1,"816":1,"1210":1,"1211":1,"1230":1,"1259":1,"1260":1,"1261":1,"1271":1,"1291":1,"1297":1,"1336":1,"1337":1,"1526":1,"1549":1,"1550":1,"1551":1,"2187":1},"1":{"1211":1,"1212":1,"1272":1,"1273":1,"1292":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1,"1301":1,"1302":1,"1303":1,"1304":1,"1550":1,"1551":2,"1552":2,"1553":1,"1554":1,"1555":1,"1556":1},"2":{"9":1,"22":1,"30":1,"31":1,"32":1,"33":1,"34":1,"43":1,"46":1,"56":1,"57":1,"65":1,"72":1,"73":1,"74":1,"75":1,"92":1,"103":2,"104":1,"105":1,"106":1,"107":1,"114":1,"119":1,"120":1,"121":1,"138":1,"139":1,"211":2,"219":3,"379":1,"393":1,"586":1,"587":1,"623":1,"638":1,"667":1,"670":3,"671":4,"673":2,"731":1,"732":3,"798":1,"801":3,"804":1,"864":1,"953":1,"963":1,"1208":1,"1211":1,"1222":1,"1226":1,"1230":1,"1264":1,"1267":1,"1270":2,"1272":2,"1276":2,"1278":2,"1282":1,"1289":2,"1290":1,"1292":1,"1300":1,"1302":1,"1303":2,"1309":1,"1314":1,"1337":1,"1343":1,"1407":2,"1409":2,"1515":2,"1526":1,"1540":1,"1657":1,"1759":2,"1760":1,"1769":1,"1797":1,"1808":1,"1862":1,"1942":1,"2068":1,"2094":1,"2095":1,"2109":1,"2161":1,"2162":1,"2234":1}}],["함수는",{"2":{"2280":1,"2283":1,"2333":1}}],["함수가",{"2":{"2274":1,"2280":1,"2284":1}}],["함수에서",{"2":{"1905":1}}],["함수들을",{"2":{"2200":1}}],["함수들",{"2":{"1855":1,"2079":1}}],["함수들이",{"2":{"1820":1,"1871":1,"2272":1}}],["함수들입니다",{"2":{"1766":1,"1868":1,"2190":1,"2229":1,"2237":1,"2256":1,"2265":1,"2272":1,"2287":1,"2301":1,"2313":1}}],["함수들은",{"2":{"1707":1,"1873":1,"2200":1,"2222":1}}],["함수와",{"2":{"1658":1}}],["함수명",{"0":{"1572":1}}],["함수를",{"2":{"1538":1,"2282":1,"2284":1}}],["함수입니다",{"2":{"1356":1,"2276":1}}],["함수",{"0":{"207":1,"791":1,"957":1,"1036":1,"1214":1,"1538":1,"1566":1,"1707":1,"1766":1,"1783":1,"2032":1,"2033":1,"2156":1,"2191":1,"2202":1,"2203":1,"2206":1,"2211":1,"2213":1,"2215":1,"2217":1,"2219":1,"2230":1,"2238":1,"2257":1,"2266":1,"2275":1,"2280":1,"2282":1,"2288":1,"2302":1,"2314":1,"2324":1},"1":{"208":1,"209":1,"792":1,"793":1,"958":1,"959":1,"1215":1,"1216":1,"1217":1,"2033":1,"2034":1,"2035":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2203":1,"2204":2,"2205":2,"2206":1,"2207":2,"2208":2,"2209":2,"2210":2,"2211":1,"2212":2,"2213":1,"2214":2,"2215":1,"2216":2,"2217":1,"2218":2,"2219":1,"2220":2,"2221":2,"2231":1,"2232":1,"2233":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1,"2246":1,"2247":1,"2248":1,"2249":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":1,"2276":1,"2277":1,"2278":1,"2279":1,"2289":1,"2290":1,"2291":1,"2292":1,"2293":1,"2294":1,"2303":1,"2304":1,"2305":1,"2306":1,"2307":1,"2308":1,"2309":1,"2310":1,"2315":1,"2316":1,"2317":1,"2318":1,"2325":1,"2326":1,"2327":1,"2328":1,"2329":1,"2330":1},"2":{"1033":1,"1063":1,"1064":1,"1199":1,"1566":2,"1572":2,"1613":1,"1652":1,"1659":1,"1676":1,"1680":1,"1766":10,"1777":1,"1778":1,"1781":2,"1817":1,"1855":1,"1858":2,"1865":2,"1871":1,"1905":1,"1986":1,"2282":1,"2330":1}}],["함께",{"2":{"43":1,"1212":1,"1284":1,"1299":1,"1468":1,"1715":1}}],["함",{"2":{"30":1,"56":1,"665":2,"681":1,"723":1,"1236":1,"1311":2,"1338":1,"1527":1,"1732":1}}],["입력해주세요",{"2":{"2204":1,"2226":2,"2319":2}}],["입력을",{"2":{"961":1}}],["입력",{"0":{"1008":1,"1012":1,"1998":1},"1":{"1009":1,"1010":1,"1011":1,"1012":1,"1999":1},"2":{"30":1,"98":1,"208":1,"209":1,"744":1,"872":1,"873":1,"1012":1,"1667":1,"1762":2,"1797":1,"1899":1,"1999":1,"2141":1}}],["실제",{"0":{"388":1,"1028":1},"2":{"44":1,"45":2,"48":1,"104":1,"651":1,"654":1,"663":1,"1195":1,"1695":1,"1697":1}}],["실행까지",{"2":{"1755":1}}],["실행이",{"2":{"1720":1}}],["실행됩니다",{"2":{"1292":1,"1323":1,"1357":1,"1361":1,"1736":1,"1741":1}}],["실행되는",{"2":{"1271":1,"1274":1,"1356":1}}],["실행되어야",{"2":{"98":1,"681":1,"744":1}}],["실행을",{"2":{"154":1}}],["실행합니다",{"2":{"31":1,"1733":1,"1736":1,"2330":1}}],["실행할",{"2":{"30":1,"31":1,"1064":1,"2330":1}}],["실행하고",{"2":{"30":1}}],["실행",{"0":{"30":1,"31":1,"487":1,"498":1,"499":1,"502":1,"503":1,"676":1,"796":1,"1488":1,"1696":1,"1736":1,"2152":1,"2158":1},"1":{"488":1,"489":1,"499":1,"500":2,"501":2,"502":1,"503":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1},"2":{"107":1,"211":1,"385":1,"488":1,"489":1,"496":1,"500":1,"502":1,"510":1,"511":1,"564":1,"601":1,"798":1,"963":1,"1000":1,"1001":1,"1062":1,"1096":1,"1733":1,"1748":2,"1779":1}}],["실패해요",{"0":{"2059":1}}],["실패합니다",{"2":{"123":1}}],["실패했습니다",{"2":{"94":1,"1609":1}}],["실패하면",{"2":{"31":1}}],["실패",{"0":{"137":1,"352":1,"403":1,"510":1,"511":1,"1000":1,"1001":1,"1262":1,"1308":1,"1525":1,"2181":1,"2187":1},"2":{"9":1,"15":2,"22":1,"30":1,"31":1,"45":2,"46":2,"94":3,"97":1,"103":1,"119":2,"120":1,"121":1,"138":2,"421":1,"530":1,"600":2,"626":1,"629":1,"651":1,"699":1,"738":1,"859":1,"864":1,"1000":1,"1001":1,"1029":1,"1264":1,"1276":1,"1279":1,"1308":1,"1337":1,"1339":1,"1341":1,"1387":1,"1390":1,"1516":1,"1523":2,"1525":2,"1554":1,"1555":1,"2057":1,"2163":1,"2165":1,"2166":1,"2178":1,"2180":1}}],["단위",{"0":{"988":1,"2153":1},"1":{"989":1,"990":1,"2154":1,"2155":1,"2156":1,"2157":1,"2158":1},"2":{"562":1,"988":1,"1778":1,"2154":1,"2212":1,"2304":1,"2305":1,"2306":1}}],["단어",{"2":{"449":1}}],["단일",{"0":{"30":1},"2":{"30":1,"1024":1}}],["단계별",{"2":{"397":1}}],["단계",{"0":{"18":1,"26":1,"39":1,"52":1,"61":1,"88":1,"99":1,"115":1,"124":1,"128":1,"145":1,"151":1,"160":1,"168":1,"173":1,"201":1,"226":1,"231":1,"237":1,"251":1,"265":1,"282":1,"302":1,"315":1,"327":1,"338":1,"342":1,"345":1,"353":1,"359":1,"363":1,"397":1,"404":1,"410":1,"415":1,"419":1,"423":1,"435":1,"456":1,"474":1,"512":1,"536":1,"566":1,"596":1,"612":1,"630":1,"644":1,"666":1,"682":1,"700":1,"724":1,"745":1,"766":1,"771":1,"775":1,"794":1,"807":1,"819":1,"831":1,"852":1,"874":1,"899":1,"937":1,"965":1,"987":1,"990":1,"994":1,"997":1,"1002":1,"1619":1,"1677":1,"1692":1,"1711":1,"1729":1,"1750":1,"1786":1,"1831":1,"2116":1}}],["프라이빗",{"2":{"1571":1}}],["프랙티스",{"0":{"1320":1,"1539":1,"1610":1},"1":{"1611":1,"1612":1,"1613":1,"1614":1,"1615":1}}],["프록시합니다",{"2":{"1494":1}}],["프록시는",{"2":{"1195":1}}],["프록시됩니다",{"2":{"1191":1,"1192":1,"1193":1}}],["프록시",{"0":{"1186":1,"1189":1,"1190":1,"1494":1},"1":{"1187":1,"1188":1,"1189":1,"1190":1,"1191":2,"1192":2,"1193":2,"1194":1,"1195":1},"2":{"1187":1,"1673":1,"1776":2,"2160":1,"2187":1}}],["프론트엔드",{"2":{"493":1,"1679":2,"1752":1}}],["프레임워크로",{"2":{"2140":1}}],["프레임워크와",{"2":{"900":1}}],["프레임워크에서",{"2":{"541":1}}],["프레임워크는",{"2":{"432":1}}],["프레임워크입니다",{"2":{"425":1,"538":1,"1679":1}}],["프레임워크의",{"2":{"389":1}}],["프레임워크",{"0":{"141":1,"389":1,"439":1,"554":1,"567":1,"900":1,"1683":1,"1684":1,"2074":1,"2139":1,"2150":1,"2155":1},"1":{"390":1,"391":1,"392":1,"568":1,"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"596":1,"901":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1,"2101":1,"2102":1,"2103":1,"2104":1,"2105":1,"2106":1,"2107":1,"2108":1,"2109":1,"2110":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2116":1,"2140":1,"2141":1,"2142":1,"2143":1},"2":{"124":1,"128":1,"130":1,"145":1,"398":1,"431":1,"432":1,"433":1,"434":1,"437":1,"444":1,"454":1,"456":1,"540":2,"543":1,"545":1,"551":2,"566":1,"745":1,"752":1,"909":1,"1663":1,"1680":1,"1688":1,"1773":3,"1817":1,"1822":1,"1864":1,"1891":1,"1897":1,"2116":1,"2150":1,"2155":1}}],["프로그램",{"2":{"1718":1}}],["프로덕션",{"0":{"1172":1,"1182":1,"1502":1,"1740":1},"1":{"1503":1,"1504":1,"1505":1,"1506":1,"1507":1},"2":{"1167":1,"1195":1,"1236":1,"1252":1,"1485":1,"1487":3,"1507":1,"1680":1,"1735":1,"1779":2,"2082":1}}],["프로퍼티",{"2":{"598":1}}],["프로파일",{"0":{"288":1,"289":1,"290":1},"1":{"289":1,"290":1},"2":{"452":1,"502":1,"544":1}}],["프로젝트명",{"2":{"1681":1}}],["프로젝트에서는",{"2":{"1514":1}}],["프로젝트에서",{"2":{"543":1,"545":1,"1022":1,"1267":1,"1752":1,"1757":1,"1773":1,"1777":1}}],["프로젝트에",{"2":{"462":1,"834":1,"1728":1,"1786":1}}],["프로젝트는",{"2":{"461":1,"473":1,"480":1,"1159":1,"1166":1,"1197":1,"1208":1,"1224":1,"1345":1,"1576":1,"1679":1,"1686":1,"1728":1,"1735":1,"1743":1,"1744":1,"1829":1,"2061":1,"2077":1,"2079":1,"2122":1,"2140":1}}],["프로젝트의",{"2":{"388":1,"436":1,"475":1,"548":1,"1654":1,"1688":1,"1758":1,"1774":1,"1778":1,"1824":1,"1857":1,"1928":1,"2154":1,"2175":1}}],["프로젝트를",{"2":{"339":1,"435":1,"500":1,"501":1,"1692":1,"1693":1,"1727":1}}],["프로젝트",{"0":{"424":1,"432":1,"434":1,"436":1,"476":1,"477":1,"478":1,"495":1,"1651":1,"1678":1,"1679":1,"1681":1,"1686":1,"1694":1,"1731":1,"1754":1,"1774":1,"1816":1},"1":{"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"477":1,"478":1,"496":1,"497":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1679":1,"1680":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":1},"2":{"201":1,"435":1,"456":1,"496":1,"512":1,"539":3,"547":1,"1163":1,"1164":1,"1563":1,"1652":2,"1672":1,"1675":1,"1677":1,"1692":1,"1695":1,"1726":1,"1731":1,"1732":1,"1733":1,"1734":1,"1749":1,"1750":1,"1752":1,"1754":3,"1766":1,"1779":1,"1781":1,"1816":2,"1820":1,"1868":1,"1993":1,"2038":1,"2041":1,"2179":1,"2200":1}}],["프로세스를",{"2":{"2177":1}}],["프로세스",{"0":{"108":1,"176":1,"366":1,"650":1,"706":1,"730":1,"1257":1,"1797":1},"1":{"109":1,"110":1,"111":1,"112":1,"113":1,"177":1,"178":1,"179":1,"180":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"651":1,"652":1,"707":1,"708":1,"709":1,"710":1,"731":1,"732":1,"1258":1,"1259":1,"1260":1},"2":{"2177":1}}],["프로시저는",{"2":{"114":1}}],["프로시저명",{"2":{"67":1,"1409":1}}],["프로시저가",{"2":{"38":1}}],["프로시저에서",{"2":{"30":2,"36":1,"78":1,"103":1,"185":1,"713":1}}],["프로시저를",{"2":{"27":1,"30":1,"31":1,"33":1,"178":1,"846":1,"1517":1}}],["프로시저",{"0":{"27":1,"30":1,"31":1,"33":1,"35":1,"107":1,"309":1,"334":1,"418":1,"593":1,"845":1,"846":1,"847":1,"1517":1,"1552":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":2,"37":2,"38":1,"39":1,"310":1,"311":1,"335":1,"336":1,"337":1,"846":1,"847":1},"2":{"30":4,"31":3,"32":2,"33":3,"38":1,"46":1,"67":1,"103":3,"107":2,"114":3,"141":1,"315":1,"317":1,"327":1,"380":1,"385":1,"390":1,"417":1,"540":1,"542":1,"573":1,"598":3,"601":5,"639":1,"649":1,"651":1,"652":1,"707":1,"731":1,"769":1,"909":1}}],["프롬프트",{"2":{"22":1}}],["있게",{"2":{"1711":1}}],["있지만",{"2":{"1390":1}}],["있으며",{"2":{"2090":1}}],["있으면",{"2":{"1311":1}}],["있으므로",{"2":{"629":2,"1252":1,"1848":1}}],["있음",{"2":{"744":1,"1467":1}}],["있도록",{"2":{"538":1,"1752":1}}],["있어야",{"2":{"114":1}}],["있는지",{"2":{"1749":1,"2056":1,"2179":1}}],["있는",{"2":{"81":1,"1154":1,"1538":1,"1686":1,"1781":1}}],["있을",{"2":{"25":1,"98":1,"629":1,"744":1}}],["있습니다",{"2":{"25":2,"43":1,"60":1,"98":1,"129":1,"130":1,"144":1,"175":1,"238":1,"252":1,"388":1,"389":1,"473":1,"480":1,"543":1,"545":1,"832":1,"846":1,"857":1,"866":1,"867":1,"869":1,"870":1,"949":1,"950":1,"1007":1,"1012":1,"1031":1,"1041":1,"1044":1,"1057":1,"1106":1,"1121":1,"1159":1,"1185":1,"1197":1,"1221":1,"1286":1,"1289":1,"1310":1,"1318":1,"1333":1,"1359":1,"1362":1,"1500":1,"1522":1,"1529":1,"1534":1,"1535":1,"1537":1,"1538":1,"1548":1,"1578":1,"1591":1,"1635":1,"1637":1,"1638":1,"1642":1,"1646":1,"1701":1,"1707":1,"1727":1,"1736":1,"1741":1,"1744":1,"1745":1,"1766":1,"1810":1,"1823":1,"1824":1,"1846":1,"1857":1,"1871":1,"1886":1,"2057":1,"2077":1,"2079":1,"2143":1,"2175":1,"2181":1,"2200":1,"2272":1,"2274":1,"2280":1,"2283":1,"2284":1,"2333":1}}],["제출",{"2":{"1566":1}}],["제어합니다",{"2":{"1456":1}}],["제어",{"2":{"1433":1}}],["제공",{"0":{"429":1},"2":{"379":1,"538":1,"616":1,"648":1,"673":1,"686":1,"704":1,"728":1,"1686":1,"1752":1}}],["제공하여",{"2":{"203":1,"425":1,"432":1,"938":1}}],["제공하는",{"2":{"129":1,"202":1,"541":1,"545":1,"597":1,"613":1,"645":1,"683":1,"725":1,"1691":1,"1941":1,"1961":1,"1977":1,"2190":1,"2237":1,"2265":1,"2287":1,"2301":1,"2313":1}}],["제공합니다",{"2":{"152":1,"161":1,"227":1,"232":1,"316":1,"541":1,"567":1,"570":1,"589":1,"591":1,"784":1,"875":1,"896":1,"1022":1,"1688":1,"1690":1,"1761":1,"1802":1,"1814":1,"2106":1,"2200":1}}],["제거된",{"2":{"2214":1}}],["제거됩니다",{"2":{"1497":1}}],["제거합니다",{"2":{"1246":1,"1418":1,"2214":1,"2289":1,"2307":1}}],["제거할",{"2":{"1121":1}}],["제거",{"2":{"105":1,"678":1,"798":1,"963":1,"1916":1}}],["제한을",{"2":{"892":1}}],["제한합니다",{"2":{"804":1,"953":1,"1264":1}}],["제한",{"0":{"164":1,"892":1,"1500":1},"2":{"51":1,"665":1,"827":1,"964":1,"1178":1,"2333":1}}],["제한이",{"2":{"25":1,"98":1,"629":1,"744":1,"1252":1,"2333":1}}],["제목",{"2":{"45":1,"65":1,"79":1,"172":1,"179":1,"182":1,"186":1,"197":2,"199":1,"698":1,"708":1,"721":1,"888":1,"1127":1,"1426":1,"1600":1,"1885":1}}],["제외되어",{"2":{"60":1}}],["제외됨",{"2":{"56":1}}],["제외됩니다",{"2":{"56":1}}],["제외",{"0":{"247":1,"301":1,"358":1,"823":1,"949":1,"950":1},"2":{"7":1,"28":1,"63":1,"66":1,"78":1,"101":1,"185":1,"217":1,"394":1,"542":1,"636":1,"681":1,"803":1,"952":1,"1478":1}}],["시트명",{"2":{"2258":1}}],["시각화",{"2":{"1947":1}}],["시도해주세요",{"2":{"1286":1,"1310":1,"1333":1,"1529":1,"1536":1}}],["시도",{"2":{"1275":1,"1308":1,"2165":1}}],["시도하고",{"2":{"1261":1}}],["시도합니다",{"2":{"1256":1,"1390":1,"1525":1}}],["시도한",{"2":{"104":1}}],["시스템을",{"2":{"1345":1,"1369":1,"1604":1,"1623":1,"2129":1}}],["시스템",{"0":{"457":1,"527":1,"1648":1,"1712":1},"1":{"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"1713":1,"1714":1,"1715":1,"1716":1,"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"1726":1,"1727":1,"1728":1,"1729":1},"2":{"435":1,"441":1,"523":1,"527":1,"539":1,"556":1,"715":1,"1680":1,"1686":1,"1692":1,"1754":1,"1962":1,"1965":2,"1966":2,"1967":2,"2082":1}}],["시스템의",{"2":{"70":1,"1679":1}}],["시크릿",{"0":{"492":1},"2":{"243":1,"492":2,"946":1}}],["시퀀스",{"2":{"45":1,"120":1,"121":1}}],["시작되지",{"2":{"2177":1}}],["시작되면",{"2":{"505":1}}],["시작해야",{"2":{"1173":1}}],["시작하려면",{"2":{"435":1,"1692":1}}],["시작하는지",{"2":{"1749":1,"2058":1,"2179":1}}],["시작하는",{"2":{"38":1,"79":1,"1693":1}}],["시작",{"0":{"505":1,"1489":1,"1693":1},"1":{"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1706":1,"1707":1,"1708":1,"1709":1,"1710":1,"1711":1},"2":{"33":1,"747":1,"765":1,"1258":1,"1693":1,"1750":1,"1755":1,"1786":1,"2210":1,"2258":1}}],["시간이",{"2":{"1221":1,"2175":1}}],["시간에",{"2":{"94":1}}],["시간",{"0":{"2206":1},"1":{"2207":1,"2208":1,"2209":1,"2210":1},"2":{"33":3,"56":1,"59":1,"93":2,"234":1,"604":1,"735":1,"923":1,"1226":1,"1227":1,"1236":1,"1270":1,"1871":1,"2161":2,"2208":3,"2237":1}}],["시",{"0":{"113":1,"224":1,"455":1,"1248":1,"1249":1,"1847":1,"2057":1},"2":{"25":1,"30":1,"31":1,"45":1,"50":1,"123":1,"205":2,"396":1,"542":1,"629":2,"661":1,"699":2,"765":1,"787":1,"953":1,"955":1,"1033":1,"1067":1,"1111":1,"1118":1,"1226":1,"1256":1,"1264":1,"1275":1,"1276":1,"1289":1,"1301":1,"1308":1,"1311":1,"1338":1,"1358":1,"1380":2,"1383":1,"1390":1,"1468":1,"1521":1,"1525":1,"1527":1,"1615":1,"1670":1,"1702":1,"1725":1,"1760":1,"1781":1,"1816":1,"1833":1,"1847":1,"2057":1,"2162":1,"2165":1,"2168":1}}],["years",{"2":{"2251":1}}],["yesterday",{"2":{"2209":1}}],["yn",{"2":{"1981":6}}],["yarn",{"0":{"1715":1},"2":{"1715":2}}],["yamlredis",{"2":{"268":1,"490":1,"850":1}}],["yamlrsa",{"2":{"206":1,"244":1,"790":1,"956":1}}],["yamlapp",{"2":{"253":1,"482":1,"483":1,"484":1,"834":1,"835":1,"836":1}}],["yamlcors",{"2":{"245":1,"493":1}}],["yamljwt",{"2":{"243":1,"492":1,"946":1}}],["yamlsecurity",{"2":{"247":1,"358":1,"823":1,"949":1,"950":1}}],["yamlserver",{"2":{"242":1,"999":1}}],["yamlspringdoc",{"2":{"869":1}}],["yamlspring",{"2":{"164":1,"171":1,"240":1,"248":1,"255":1,"257":1,"258":1,"453":1,"690":1,"749":1,"765":1,"892":1}}],["yamllogging",{"2":{"156":1,"250":1,"993":1}}],["yamlfile",{"2":{"122":1,"249":1,"494":1,"658":1}}],["yamlmsg",{"2":{"96":1,"229":1,"740":1}}],["yaml",{"0":{"96":1,"148":1,"171":1,"229":1,"240":1,"268":1,"362":1,"453":1,"621":1,"641":1,"658":1,"690":1,"740":1,"749":1,"867":1},"2":{"238":1,"239":5,"362":1,"437":1,"443":4,"481":1,"490":1,"492":1,"509":2,"544":1,"551":5,"552":1,"620":1,"621":1,"641":1,"642":3,"643":4,"747":1,"750":4,"773":4,"867":2}}],["yaml의",{"2":{"51":1,"394":1,"542":1}}],["yamlgemini",{"2":{"24":1,"148":1,"620":1}}],["yaml에서",{"2":{"24":1,"253":1,"462":1,"463":1,"464":1,"465":1,"621":1,"671":1,"869":1,"892":1,"999":1}}],["yyyymmdd",{"2":{"2209":1,"2210":2,"2242":2,"2248":1,"2277":2}}],["yyyymmddhhmmss",{"2":{"2208":1,"2240":1}}],["yyyy",{"2":{"558":2,"2006":1,"2241":1,"2246":1,"2247":1}}],["y=",{"2":{"197":3}}],["y",{"2":{"94":3,"742":1,"1209":2,"1211":1,"1213":1,"1219":2,"1240":2,"1243":1,"1250":1,"1273":1,"1283":2,"1298":1,"1313":1,"1330":1,"1409":1,"1454":1,"2195":1,"2234":1}}],["yourservice",{"2":{"989":1}}],["your",{"2":{"24":1,"30":1,"32":1,"33":2,"148":1,"171":2,"255":2,"257":2,"258":3,"318":1,"390":1,"417":1,"482":2,"483":2,"484":3,"593":1,"620":1,"690":2,"834":2,"835":2,"836":3,"846":1,"1702":1}}],["키의",{"2":{"1243":1,"1244":1,"1245":1,"1452":1,"1453":1}}],["키가",{"2":{"114":1}}],["키로",{"2":{"32":1,"36":1,"2216":1}}],["키는",{"2":{"30":1,"38":1,"79":1,"87":1,"186":1,"200":1,"225":1,"629":1,"714":1,"723":1,"744":1,"1221":1}}],["키",{"0":{"492":1},"2":{"25":1,"33":1,"87":1,"200":1,"225":1,"602":1,"604":1,"618":2,"629":1,"723":1,"740":1,"744":1,"801":1,"1173":1,"1221":1,"1476":1,"2163":1,"2325":1,"2326":1,"2327":1,"2328":1}}],["키를",{"2":{"24":1,"25":1,"243":1,"492":2,"604":1,"801":1,"946":1,"1246":1,"2327":1,"2328":1}}],["키값",{"2":{"9":1,"103":1}}],["발령",{"2":{"1946":1}}],["발신자",{"2":{"93":1}}],["발신",{"2":{"93":1,"740":1}}],["발송됨",{"2":{"744":1}}],["발송됩니다",{"2":{"98":2}}],["발송하지",{"2":{"94":1}}],["발송하는",{"2":{"89":1}}],["발송인",{"2":{"94":1,"731":1}}],["발송을",{"2":{"92":1}}],["발송합니다",{"2":{"92":1,"169":1}}],["발송",{"0":{"89":1,"92":1,"169":1,"227":1,"589":1,"591":1,"683":1,"693":1,"725":1,"730":1,"731":1,"733":1,"742":1,"743":1},"1":{"90":1,"91":1,"92":1,"93":2,"94":2,"95":1,"96":1,"97":1,"98":1,"99":1,"170":1,"171":1,"172":1,"173":1,"228":1,"229":1,"230":1,"231":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"726":1,"727":1,"728":1,"729":1,"730":1,"731":2,"732":2,"733":1,"734":2,"735":2,"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"2":{"26":1,"88":1,"92":1,"93":6,"94":10,"97":3,"98":2,"141":1,"168":1,"173":1,"227":1,"292":1,"429":2,"439":2,"541":3,"554":2,"568":2,"589":1,"591":1,"666":1,"683":1,"684":2,"686":2,"687":1,"688":2,"698":1,"699":2,"700":2,"724":1,"725":1,"726":2,"728":3,"729":4,"731":7,"734":4,"738":3,"743":1,"744":3,"745":2,"1949":5}}],["발생해요",{"0":{"2057":1}}],["발생했습니다",{"2":{"1312":1,"1317":1,"1334":1,"1528":1,"1533":1,"1536":2,"1609":1,"1614":1}}],["발생하면",{"2":{"1287":1,"1302":1}}],["발생하는",{"2":{"546":1,"998":1,"1521":1,"1748":1,"1780":1}}],["발생한",{"2":{"34":1}}],["발생할",{"2":{"25":1,"629":1}}],["발생",{"2":{"22":1,"30":2,"31":2,"34":1,"400":1,"529":1,"1256":1,"1279":1,"1314":1,"1523":1,"1609":1,"1614":1,"1702":1,"2162":1,"2165":1}}],["발급",{"0":{"110":1},"2":{"1794":1}}],["발급합니다",{"2":{"103":1}}],["발급받아야",{"2":{"25":1}}],["발급받습니다",{"2":{"9":1,"1255":1}}],["발급된",{"2":{"9":1}}],["중앙",{"2":{"1680":1}}],["중단",{"2":{"1331":1}}],["중단됩니다",{"2":{"31":1}}],["중일",{"2":{"1264":1}}],["중이면",{"2":{"1261":1,"1276":1,"1336":1}}],["중요한",{"2":{"1252":1,"1320":1,"1535":1,"1539":1}}],["중복",{"2":{"665":1,"1353":2}}],["중인지",{"2":{"510":1,"511":1}}],["중인",{"2":{"509":1,"1309":1,"1491":1,"1747":1}}],["중입니다",{"2":{"126":1}}],["중",{"2":{"22":1,"30":1,"253":1,"461":1,"466":1,"480":1,"546":1,"564":1,"999":1,"1264":1,"1609":1,"1614":1,"1748":1,"2076":1,"2174":1}}],["텍스트를",{"2":{"1880":1}}],["텍스트",{"2":{"22":1,"623":1,"1026":1,"1034":1,"1212":2,"1284":1,"1299":3,"1880":1,"1882":1,"2141":1}}],["텍스트입니다",{"2":{"22":1}}],["수동으로",{"2":{"1263":1,"1400":1,"1578":1}}],["수동",{"0":{"1220":1,"1263":1,"1578":1}}],["수도",{"2":{"1007":1,"1012":1}}],["수를",{"2":{"804":1,"953":1}}],["수행합니다",{"2":{"1208":1,"1733":1,"2091":1,"2130":1}}],["수행",{"2":{"671":1,"1706":1}}],["수신",{"2":{"93":1,"1797":1}}],["수정해야",{"2":{"1848":1}}],["수정하면",{"2":{"1493":1}}],["수정하세요",{"2":{"249":1,"494":1,"1695":1}}],["수정할",{"2":{"121":1,"1044":1}}],["수정합니다",{"2":{"121":1,"481":1,"490":1}}],["수정된",{"2":{"45":1,"121":2}}],["수정",{"0":{"121":1,"481":1,"490":1},"1":{"482":1,"483":1,"484":1},"2":{"43":1,"45":2,"49":1,"121":2,"123":1,"649":1,"651":1,"655":1,"1435":1,"1969":1,"1982":1,"2106":1,"2132":1,"2171":1,"2173":1}}],["수",{"0":{"2056":1,"2184":1,"2185":1,"2186":1},"2":{"22":1,"25":2,"43":1,"57":1,"60":1,"93":2,"98":1,"129":1,"144":1,"175":1,"252":1,"388":1,"389":1,"480":1,"538":1,"543":1,"545":1,"629":2,"634":1,"735":2,"744":1,"832":1,"846":1,"857":1,"866":1,"867":1,"869":1,"870":1,"949":1,"950":1,"1031":1,"1041":1,"1044":1,"1057":1,"1106":1,"1121":1,"1154":1,"1159":1,"1185":1,"1221":1,"1289":1,"1318":1,"1359":1,"1362":1,"1390":1,"1467":1,"1500":1,"1527":1,"1533":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":2,"1548":1,"1578":1,"1591":1,"1635":1,"1638":1,"1646":1,"1686":1,"1701":1,"1707":1,"1727":1,"1736":1,"1741":1,"1752":1,"1766":1,"1781":1,"1846":1,"1848":1,"1886":1,"2057":1,"2077":1,"2079":1,"2173":1,"2175":1,"2181":1,"2200":1,"2283":1,"2284":1}}],["~",{"2":{"22":1}}],["nm",{"2":{"1981":3,"1989":1}}],["nvmenu=",{"2":{"1949":1}}],["nvm을",{"2":{"1728":1,"1732":1}}],["nvmrc",{"2":{"1728":1,"1732":1}}],["npm",{"0":{"1715":1},"2":{"1182":1,"1503":1,"1652":1,"1694":1,"1715":3,"1725":1,"1748":2,"1816":1,"2172":1,"2174":1,"2178":3}}],["nkwr2ldjoeqk9hvc2xfqvemmjntqddhciqmwwwkbgqc5sqswritzsqfgegfrgsuvxw",{"2":{"206":1,"244":1,"790":1,"956":1}}],["nq3uej2w2z4lcjmal4qfp9fwzx8nnvzxkhq2we5les9phydotzijcqhvpvztuptua4c+9pfokjqsezeck1la3kvlcxb2ofuz3+dwjhu3pyp9suvnowk80wvxgtxgjqaanffbfcmeotroej6axli8fxakwdaelhsoiwww6baahfvh0wz3jzdagmbaaecggeaozjehsgasyhekjnutitj",{"2":{"206":1,"244":1,"790":1,"956":1}}],["nextdate",{"2":{"2283":1}}],["next",{"2":{"1358":2,"1360":3}}],["ne4j5qmcaaawexruvkbokkrcjxafvj4filwfudxsgqi14yhxbvnluij9wthenshwkbgqdlcw7b3dqy8rfq4cwtaeeii0tim7xeswksyx7bgngencrlhbg6kl2ovalmryqhj9voiffwxbvk6fiig0iobvefit+iyuo8dbyxhsrohe1ezmdvw2k2uroeazxtflcnmrxo3av",{"2":{"206":1,"244":1,"790":1,"956":1}}],["netstat",{"2":{"2177":1}}],["net",{"2":{"197":4,"898":2}}],["newdata",{"2":{"1629":2,"2087":2}}],["newval",{"2":{"1585":2}}],["newmenu",{"2":{"1468":2}}],["newtoken",{"2":{"1261":2,"1276":2,"1336":2,"1635":2}}],["new",{"2":{"45":1,"46":1,"72":1,"119":1,"149":1,"163":1,"165":3,"172":1,"178":1,"179":2,"180":4,"199":8,"264":1,"270":2,"271":2,"276":1,"277":2,"318":1,"390":1,"417":1,"418":1,"570":1,"593":1,"601":2,"625":2,"635":5,"638":2,"663":1,"670":1,"675":4,"692":1,"693":1,"694":1,"696":1,"707":1,"708":2,"709":1,"710":3,"732":5,"799":2,"822":1,"846":1,"879":2,"883":1,"888":1,"891":1,"894":3,"924":2,"948":1,"974":1,"978":1,"1161":6,"1201":2,"1212":1,"1233":1,"1261":1,"1276":2,"1280":1,"1281":1,"1299":1,"1300":1,"1318":1,"1331":1,"1336":1,"1337":1,"1342":1,"1435":1,"1518":1,"1519":1,"1534":1,"1543":1,"1546":1,"1547":1,"1548":2,"1600":2,"1634":1,"1837":1,"1879":3,"1934":1,"2208":1,"2209":1,"2218":1,"2233":1,"2240":1,"2241":1,"2242":1,"2244":1,"2262":2,"2269":1,"2283":1}}],["newaccesstoken",{"2":{"9":2,"1259":2,"1260":1,"1276":5,"1337":5}}],["n시간",{"2":{"93":1,"734":1}}],["n분",{"2":{"93":1,"734":1}}],["node",{"0":{"1714":1,"1732":1},"2":{"1652":1,"1714":3,"1715":1,"1727":1,"1728":2,"1732":2,"1748":1,"1755":1,"1816":1,"2172":1,"2178":2}}],["nodes",{"2":{"970":1}}],["now",{"2":{"2208":1}}],["nowtab",{"2":{"1473":1,"1480":1,"1916":1,"2332":1}}],["nowtime",{"2":{"234":1}}],["nowmenu",{"2":{"1297":1,"1415":1,"1420":1}}],["none",{"2":{"825":1}}],["not",{"2":{"138":1}}],["no",{"2":{"92":1,"93":1,"94":3,"742":1,"827":2,"1989":2,"2186":1}}],["navitems",{"2":{"1994":1}}],["navigation",{"2":{"1464":2}}],["navbarthemeswitcher",{"2":{"1994":1}}],["nav",{"2":{"1879":2,"1882":1,"1883":1}}],["nanumgothic",{"2":{"86":1,"194":1,"195":1,"197":3,"711":1,"718":1,"756":1,"889":1}}],["namespace=",{"2":{"308":1,"333":1,"413":1,"535":1,"753":1}}],["name=",{"2":{"197":5}}],["name으로",{"2":{"104":1}}],["name",{"2":{"30":1,"45":6,"65":1,"68":1,"84":2,"92":1,"93":1,"94":1,"104":3,"120":3,"121":2,"178":1,"191":1,"199":1,"205":1,"206":1,"208":1,"209":1,"214":1,"223":1,"224":1,"240":1,"250":1,"255":1,"257":1,"258":1,"260":1,"270":1,"271":1,"273":1,"274":1,"308":1,"310":1,"311":1,"335":1,"336":1,"337":1,"390":1,"417":1,"418":1,"421":1,"482":1,"483":1,"484":1,"532":1,"601":1,"604":1,"609":1,"616":1,"617":1,"625":1,"626":1,"634":1,"648":1,"698":1,"704":1,"728":1,"834":1,"835":1,"836":1,"838":1,"859":1,"861":1,"1027":4,"1034":1,"1035":4,"1036":1,"1043":2,"1056":1,"1077":2,"1083":1,"1091":1,"1097":1,"1098":1,"1220":1,"1249":1,"1262":1,"1276":1,"1278":1,"1280":1,"1309":1,"1331":1,"1337":1,"1348":1,"1350":1,"1352":1,"1358":2,"1360":1,"1362":1,"1366":4,"1368":1,"1388":1,"1389":1,"1409":1,"1517":1,"1518":1,"1543":1,"1552":1,"1603":1,"1622":1,"1700":1,"1705":3,"1887":1,"1895":3,"1957":1,"2025":1,"2120":2,"2192":3,"2193":2,"2197":1,"2205":1,"2216":3,"2251":1,"2252":1,"2253":1,"2290":1,"2291":1,"2294":1}}],["n",{"0":{"2308":1},"2":{"45":6,"49":1,"94":2,"103":2,"558":2,"655":1,"663":1,"1404":1,"1409":1,"1884":2}}],["num",{"0":{"2297":1,"2318":1},"2":{"71":1,"84":1}}],["num|cv",{"2":{"65":1,"68":1,"84":1,"191":1,"224":1}}],["numberformats",{"2":{"1879":2}}],["number",{"0":{"2212":1,"2303":1},"2":{"22":2,"1583":1,"2212":1}}],["null로",{"2":{"1380":1}}],["null",{"2":{"22":1,"30":1,"31":1,"45":1,"103":1,"120":1,"121":1,"137":1,"163":1,"313":2,"352":1,"400":1,"403":1,"529":1,"530":1,"600":1,"617":1,"626":1,"649":1,"672":1,"891":1,"974":1,"1097":1,"1379":1,"1380":1,"1424":2,"1473":1,"1538":2,"1613":1,"1629":1,"1702":1,"1707":1,"1783":1,"1974":1,"2033":1,"2087":1,"2156":3,"2204":2,"2205":1,"2315":1}}],["선택기를",{"2":{"1841":1}}],["선택기",{"2":{"1637":1,"1841":2,"2113":1,"2136":1}}],["선택을",{"2":{"1038":1}}],["선택됨",{"2":{"1036":1}}],["선택된",{"2":{"1026":2,"1033":2,"1035":1,"2015":1}}],["선택적",{"0":{"467":1,"696":1},"1":{"468":1,"469":1},"2":{"614":1,"672":1}}],["선택사항",{"0":{"466":1,"1604":1,"1701":1},"2":{"2205":1,"2208":1,"2218":1}}],["선택할",{"2":{"252":1,"832":1,"1154":1}}],["선택",{"0":{"480":1,"1021":1,"1074":1,"2004":1},"1":{"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1075":1,"1076":1,"1077":1,"2005":1,"2006":1,"2007":1},"2":{"22":3,"30":1,"31":1,"32":2,"33":1,"34":4,"44":1,"56":1,"67":1,"68":1,"93":5,"253":1,"368":1,"377":1,"406":1,"448":1,"455":1,"514":1,"872":1,"970":1,"1022":2,"1024":1,"1026":2,"1027":1,"1031":1,"1033":3,"1038":1,"1040":1,"1075":1,"1156":1,"1157":1,"1468":1,"1667":1,"1715":1,"1762":2,"1763":1,"1764":1,"1949":1,"1983":2,"1984":2,"2003":2,"2005":1,"2006":2,"2007":2,"2009":1,"2010":1,"2015":2,"2026":1,"2099":1,"2119":1,"2141":1}}],["전략을",{"2":{"1848":1}}],["전반에서",{"2":{"1766":1,"1820":1,"1868":1,"1993":1,"2200":1}}],["전후에",{"2":{"1356":1}}],["전파",{"2":{"1331":1}}],["전",{"2":{"1301":1,"1303":1,"1534":1,"2091":1,"2130":1}}],["전환됩니다",{"2":{"1728":1}}],["전환합니다",{"2":{"1406":1,"1476":1}}],["전환",{"2":{"1090":1,"1356":1,"1357":1,"1361":3,"1480":1,"2091":1,"2130":1}}],["전역에서",{"2":{"1879":1}}],["전역으로",{"2":{"1846":1}}],["전역",{"0":{"1639":1,"1642":1},"2":{"600":2,"1639":1,"1642":1,"1758":1,"1762":1,"1840":2,"1861":1,"2001":1}}],["전용",{"2":{"598":3,"1026":1,"1752":1,"2030":1,"2284":1}}],["전에",{"2":{"367":1,"1271":1,"1292":1,"1357":1}}],["전화번호를",{"2":{"2298":1}}],["전화번호에",{"2":{"2296":1}}],["전화번호",{"0":{"2295":1},"1":{"2296":1,"2297":1,"2298":1},"2":{"93":2,"98":1,"205":1,"235":1,"744":1,"787":1,"955":1,"1011":1,"1762":1,"1999":2,"2297":1,"2318":1,"2319":1}}],["전체에서",{"2":{"1164":1,"1563":1}}],["전체",{"0":{"377":1,"437":1,"548":1,"1609":1,"1652":1,"1754":1,"1815":1},"1":{"549":1,"550":1,"551":1,"552":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"1816":1,"1817":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"1828":1,"1829":1,"1830":1,"1831":1},"2":{"82":1,"124":1,"364":1,"365":1,"436":1,"539":1,"540":1,"545":1,"548":1,"1082":1,"1090":1,"1242":1,"1247":1,"1596":1,"1677":1,"1766":1,"1774":2,"1866":1,"2194":1}}],["전달된",{"2":{"1288":1,"1312":1}}],["전달합니다",{"2":{"104":1}}],["전달됩니다",{"2":{"78":1,"79":1,"185":1,"186":1}}],["전달하는",{"2":{"38":1}}],["전달",{"0":{"1592":1},"2":{"30":1,"70":1,"81":1,"82":1,"713":1,"714":1,"798":1,"963":1,"1096":1}}],["전달할",{"2":{"22":1}}],["전송용",{"2":{"1270":1}}],["전송됩니다",{"2":{"357":1}}],["전송에",{"2":{"94":1}}],["전송되기",{"2":{"1271":1,"1292":1}}],["전송되지",{"2":{"60":1}}],["전송되므로",{"2":{"17":1}}],["전송하고",{"2":{"22":1,"623":1}}],["전송을",{"2":{"17":1}}],["전송한",{"2":{"15":1}}],["전송",{"2":{"11":1,"17":1,"134":1,"732":1,"1226":1,"1227":2,"1259":1,"1269":1,"1270":1}}],["전송됨",{"2":{"9":1}}],["02",{"2":{"2244":1}}],["0을",{"2":{"2066":1,"2127":1,"2308":1}}],["03",{"2":{"466":1}}],["04",{"2":{"459":2,"471":1,"1720":1}}],["0ubuntu120",{"2":{"459":2}}],["07",{"2":{"459":1}}],["0abb7ppc0xgezp1fti8bnjbv30a5sjchzfvcn+c4onifa85ogchol8aswaqtuj1wmpahs1ficbailexuqmz0mglys1g0e0w1zkuqvpwxkchf1roumtmahy0sqlw+xksds4nvxiltmmxpkm1jt8io",{"2":{"206":1,"244":1,"790":1,"956":1}}],["0y9adambuwmj2ot+xbm9iplziducdzgc1xlazmkf6isepo",{"2":{"206":1,"244":1,"790":1,"956":1}}],["005",{"2":{"2308":1}}],["000",{"2":{"1884":4,"2279":2}}],["00",{"2":{"33":3,"56":4,"59":2,"1884":1,"2241":2,"2247":2}}],["01일",{"2":{"2253":1}}],["01월",{"2":{"2252":1}}],["010",{"2":{"1949":1,"1999":1,"2296":1,"2297":1,"2298":1,"2318":1}}],["01087654321",{"2":{"94":1,"742":1}}],["01012345678",{"2":{"92":2,"94":1,"98":1,"731":1,"742":1,"2296":1,"2298":1}}],["01",{"2":{"33":5,"56":4,"59":2,"71":2,"79":2,"179":2,"186":2,"708":2,"835":1,"1707":2,"2207":8,"2239":4,"2241":2,"2244":1,"2245":2,"2246":2,"2247":2,"2249":2,"2252":1,"2253":1}}],["0",{"2":{"22":5,"34":1,"45":4,"56":2,"59":1,"94":1,"96":1,"197":6,"229":1,"268":2,"285":1,"300":2,"308":2,"333":2,"341":2,"413":2,"433":2,"459":3,"460":2,"465":1,"468":1,"490":2,"497":2,"503":2,"535":2,"557":2,"628":1,"663":1,"740":1,"753":2,"759":1,"835":1,"850":2,"855":1,"879":2,"881":2,"885":1,"908":1,"920":1,"929":1,"931":1,"940":1,"972":1,"974":1,"976":1,"1318":1,"1358":1,"1440":1,"1534":1,"1583":1,"1585":1,"1681":1,"1683":2,"1685":4,"1879":2,"2072":2,"2078":1,"2085":1,"2089":1,"2093":1,"2102":2,"2105":1,"2108":1,"2111":1,"2113":1,"2114":1,"2115":1,"2132":1,"2133":1,"2134":1,"2136":1,"2137":1,"2138":1,"2205":1,"2212":1,"2233":1,"2310":1}}],["질문을",{"2":{"623":1}}],["질문",{"0":{"2054":1},"1":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"22":2,"149":1,"570":1,"623":1,"978":1,"1781":1}}],["gutters>",{"2":{"1989":1}}],["gutters",{"2":{"1989":1}}],["gb",{"2":{"1981":3}}],["gfrremovecomma",{"0":{"2307":1}}],["gfmobliephoneformat",{"0":{"2298":1}}],["gffillzeros",{"0":{"2308":1},"2":{"2308":1}}],["gffiledownload",{"0":{"2267":1},"2":{"2267":1}}],["gfformidstr",{"0":{"2292":1}}],["gfformatdatewithsep",{"0":{"2245":1}}],["gfformatdatetimestring",{"0":{"2241":1}}],["gfformatdatetime",{"0":{"2208":1,"2240":1},"2":{"2208":2,"2224":1}}],["gfformatdatestring",{"0":{"2207":1,"2239":1},"2":{"1707":1,"1783":1,"2033":1,"2207":2,"2222":1,"2224":1,"2239":1}}],["gfformatdate",{"2":{"1572":1}}],["gfsnaketocamel",{"0":{"2291":1}}],["gfsaveaggridasexcel",{"0":{"2260":1,"2261":1},"2":{"2260":1,"2261":1}}],["gfsavetableasexcel",{"0":{"2259":1}}],["gfsetnumber",{"0":{"2304":1},"2":{"2304":1}}],["gfsetclobdata",{"0":{"2293":1},"2":{"2293":2}}],["gfsetdaybox",{"0":{"2253":1},"2":{"2253":1}}],["gfsetmonthbox",{"0":{"2252":1},"2":{"2252":1}}],["gfsetyearbox",{"0":{"2251":1},"2":{"2251":1}}],["gfhtmlexceldown",{"0":{"2258":1}}],["gfcheckphonenumber",{"0":{"2297":1,"2318":1},"2":{"2318":1,"2319":1}}],["gfcheckphonehyphen",{"0":{"2296":1}}],["gfcameltosnakeupper",{"0":{"2290":1}}],["gfconverttimestamp",{"0":{"2247":1}}],["gfclonejson",{"0":{"2196":1},"2":{"2196":1}}],["gftoday",{"0":{"2248":1}}],["gftimestamptodatestr",{"0":{"2246":1}}],["gftrim",{"0":{"2214":1,"2289":1}}],["gfisdate",{"0":{"2221":1,"2316":1},"2":{"2221":1,"2226":1,"2316":1,"2319":1}}],["gfisempty",{"0":{"2204":1,"2276":1,"2315":1},"2":{"1572":1,"1707":1,"1783":1,"2033":1,"2156":4,"2204":9,"2222":1,"2226":1,"2276":1,"2282":2,"2283":2,"2315":5,"2319":1}}],["gfvalidateresidentnumber",{"0":{"2220":1,"2317":1},"2":{"2220":1,"2317":1}}],["gfdayformat",{"0":{"2249":1}}],["gfdownloadfile",{"0":{"2218":1},"2":{"2218":1}}],["gfdiffdate",{"0":{"2210":1,"2243":1},"2":{"2210":1,"2224":1}}],["gfaddmonth",{"0":{"2244":1},"2":{"2244":1}}],["gfaddday",{"0":{"2209":1,"2242":1,"2277":1},"2":{"2209":2,"2242":2,"2283":2}}],["gfarraytoobject",{"0":{"2192":1,"2216":1},"2":{"2192":1,"2216":1}}],["gfobjecttostring",{"0":{"2197":1,"2278":1,"2294":1},"2":{"2197":1,"2294":1}}],["gfjsondatavalidation",{"0":{"2195":1},"2":{"2195":2}}],["gfgetround",{"0":{"2310":1},"2":{"2310":1}}],["gfgetrowtable",{"0":{"2193":1},"2":{"2193":1}}],["gfgetnumber",{"0":{"2309":1}}],["gfgetcomma",{"0":{"2305":1}}],["gfgetthreecomma",{"0":{"2279":1,"2306":1}}],["gfgetuserimage",{"0":{"2268":1},"2":{"2268":1}}],["gfgetjsonfilter",{"0":{"2194":1},"2":{"2194":2}}],["gfnumberformat",{"0":{"2212":1,"2303":1},"2":{"1783":1,"2033":1,"2212":2,"2225":1,"2303":2}}],["gfnvl",{"0":{"2205":1},"2":{"1707":1,"1783":1,"2033":1,"2156":3,"2205":2}}],["gf",{"2":{"1572":1}}],["globalinjection",{"2":{"1879":1}}],["globalproperties",{"2":{"1861":1}}],["glob",{"2":{"1097":1,"1349":1}}],["gitignore에",{"2":{"563":1}}],["github",{"2":{"488":1,"780":1}}],["git",{"0":{"1716":1},"2":{"469":1,"477":2,"699":1,"1694":1,"1716":2}}],["git에",{"2":{"225":1,"563":1,"629":1}}],["grp",{"2":{"1981":3}}],["gridref",{"2":{"2260":1}}],["grid에",{"2":{"1880":1,"1887":1}}],["grid에서",{"0":{"1041":1},"1":{"1042":1,"1043":1},"2":{"1042":1,"1067":1,"1075":1}}],["griddata",{"2":{"1445":1,"1974":4,"1986":1,"2325":1}}],["gridid",{"2":{"1072":1,"1440":1}}],["gridcustomerlist",{"2":{"1990":3}}],["gridcontextmenu",{"0":{"1066":1,"2014":1},"1":{"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1},"2":{"1068":1,"1072":1,"1763":1,"1994":1}}],["gridclickfield",{"0":{"1059":1,"2013":1},"1":{"1060":1,"1061":1,"1062":1,"1063":1,"1064":1},"2":{"1061":1,"1063":1,"1763":1,"1994":1}}],["gridapi",{"0":{"2260":1},"2":{"1063":1,"1440":1,"1974":2,"2260":3}}],["gridoptions=",{"2":{"1887":1}}],["gridoptions",{"2":{"1063":1,"1880":1,"1887":4}}],["grid를",{"2":{"1055":1,"1974":1,"1981":1,"1990":1,"2260":1}}],["grid",{"0":{"1054":1,"1705":1,"1887":1,"2012":1,"2052":1,"2096":1,"2117":1},"1":{"1055":1,"1056":1,"1057":1,"2013":1,"2014":1,"2015":1,"2097":1,"2098":1,"2099":1,"2118":1,"2119":1,"2120":1},"2":{"1042":1,"1046":1,"1056":1,"1061":1,"1068":1,"1076":1,"1587":1,"1609":1,"1667":1,"1685":1,"1705":1,"1752":1,"1763":2,"1773":1,"1817":1,"1861":1,"1877":2,"1880":4,"1887":2,"1888":1,"1974":2,"1975":1,"1986":1,"1990":1,"1991":1,"1994":1,"2014":1,"2052":1,"2097":2,"2118":1,"2120":1,"2260":1}}],["gridmultiselectwrapper",{"0":{"1042":1,"1075":1,"2015":1},"1":{"1076":1,"1077":1},"2":{"1042":1,"1043":1,"1057":1,"1076":1,"1077":1,"1763":1,"1994":1}}],["grid의",{"2":{"1041":1,"1060":1,"1880":1,"2261":1}}],["group",{"2":{"870":2,"1969":2}}],["groupedopenapi",{"2":{"870":4}}],["groupid>org",{"2":{"286":1,"296":1,"297":1,"836":1,"904":1,"905":1,"906":1,"929":1}}],["groupid>",{"2":{"285":1,"286":1,"296":1,"297":1,"628":1,"759":1,"835":1,"836":1,"904":1,"905":1,"906":1,"927":1,"928":1,"929":1}}],["groupid>commons",{"2":{"927":1,"928":1}}],["groupid>com",{"2":{"285":1,"628":1,"759":1,"835":1}}],["graceful",{"2":{"242":1}}],["gmail",{"2":{"171":2,"690":2,"699":1}}],["goto",{"2":{"2151":1}}],["gotomenu",{"2":{"1352":1}}],["gothic",{"2":{"86":1,"194":1,"718":1,"889":1}}],["google",{"0":{"975":1},"1":{"976":1,"977":1,"978":1},"2":{"19":1,"22":1,"24":1,"25":1,"146":1,"429":1,"570":1,"613":1,"617":1,"620":1,"628":1,"976":1,"977":1,"1903":1}}],["ghi789",{"2":{"50":1,"660":1}}],["gt",{"2":{"30":3,"31":1,"57":1,"601":1,"617":1,"1226":1,"1655":1,"2077":1}}],["geosan",{"0":{"1666":1,"1691":1,"1811":1,"1976":1},"1":{"1812":1,"1813":1,"1814":1,"1977":1,"1978":1,"1979":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"2":{"1598":2,"1666":1,"1679":1,"1680":1,"1774":1,"1775":1,"1812":1,"1813":1,"1817":2,"1858":2,"1864":2,"1977":1,"1978":1,"1981":1,"1986":1,"1989":1,"1991":1}}],["gender",{"2":{"1969":2}}],["generatepdf",{"2":{"888":1}}],["generateexcel",{"2":{"883":1}}],["generatecontent",{"2":{"617":1}}],["generatecontentresponse",{"2":{"617":1}}],["generated",{"2":{"557":1}}],["generatereport",{"2":{"199":1}}],["genericjackson2jsonredisserializer",{"2":{"277":1,"635":1}}],["genai",{"0":{"623":1,"975":1},"1":{"976":1,"977":1,"978":1},"2":{"22":2,"150":1,"616":3,"628":1,"976":1}}],["getkeyindexeddb",{"0":{"2327":1}}],["geterrormessage",{"2":{"1536":2,"1537":1,"1538":1}}],["getelementbyid",{"2":{"119":1}}],["getbmk",{"0":{"1419":1}}],["getbmklist",{"2":{"120":2,"347":1,"421":2,"859":2}}],["getstate",{"2":{"1922":2}}],["getscreendata",{"2":{"1445":1}}],["getsessionvalues",{"0":{"1245":1},"2":{"1245":1}}],["getsessionvalue",{"0":{"1244":1,"1453":1},"2":{"1211":1,"1213":1,"1244":2,"1250":3,"1273":1,"1296":1,"1298":1,"1454":1,"1784":1,"1914":2,"1946":3,"1957":5,"1958":3,"1969":2,"1981":2}}],["getsubject",{"2":{"214":1,"813":1,"945":1}}],["getdetectedcharset",{"2":{"974":1}}],["getdata",{"2":{"600":2,"1629":1,"2087":1}}],["getdatabase",{"2":{"270":1,"271":1}}],["gettext",{"2":{"1883":1}}],["getters",{"0":{"1384":1},"1":{"1385":1},"2":{"1629":1,"1922":1,"2087":1}}],["getter",{"2":{"913":1,"1633":1}}],["gettime",{"2":{"1300":1}}],["gettype",{"2":{"32":2,"33":3}}],["getwriter",{"2":{"829":1,"830":1}}],["getoutputstream",{"2":{"732":1}}],["getoriginalfilename",{"2":{"163":1,"891":1}}],["getinputstream",{"2":{"670":1,"732":1}}],["getheader",{"2":{"670":1}}],["gethost",{"2":{"270":1,"271":1}}],["getgeminikey",{"2":{"617":1,"618":1}}],["getcontext",{"2":{"672":1}}],["getconvertspecialtype",{"2":{"604":1}}],["getclientip",{"2":{"234":1,"604":2}}],["getclassloader",{"2":{"180":1,"199":1,"709":1}}],["getclass",{"2":{"180":1,"199":1,"709":1}}],["getmimetype",{"2":{"898":1}}],["getmagicmatch",{"2":{"898":1}}],["getmapping",{"2":{"600":1}}],["getmessage",{"2":{"400":1,"529":1}}],["getxmlresponse",{"2":{"600":1}}],["getlogger",{"2":{"400":1,"417":1,"529":1,"532":1}}],["getallsessiondata",{"2":{"1914":1}}],["getallmenudata",{"2":{"1350":1}}],["getallhasheswithscan",{"2":{"324":1,"602":1}}],["getauthentication",{"2":{"672":1}}],["getaccesstoken",{"2":{"9":2,"16":1,"113":1,"815":1,"1259":1,"1263":1,"1276":2,"1337":1}}],["getproperty",{"2":{"982":1}}],["getpagedata",{"0":{"2330":1},"2":{"2330":2}}],["getpageinfo",{"2":{"236":1}}],["getparametermap",{"2":{"670":1}}],["getparametervalues",{"2":{"670":1}}],["getparameter",{"2":{"670":1}}],["getport",{"2":{"270":1,"271":1}}],["getnowtime",{"2":{"234":1,"604":1}}],["getname",{"2":{"165":1,"894":1}}],["getuserlist",{"2":{"449":1}}],["getuseragent",{"2":{"234":1,"604":1}}],["getuser",{"2":{"223":1}}],["getuserimage",{"2":{"119":2}}],["getredistoken",{"2":{"280":1,"322":1,"594":1,"602":1}}],["getredishashdata",{"2":{"56":2}}],["getresources",{"2":{"264":1}}],["getresourceasstream",{"2":{"180":1,"199":1,"709":1}}],["getjsonresponse",{"2":{"600":1}}],["getjsonsuccessresponse",{"2":{"163":1,"384":1,"400":1,"529":1,"600":2,"616":1,"626":1,"704":1,"891":1}}],["getjsonerrorresponse",{"2":{"163":1,"384":1,"400":1,"529":1,"600":2,"626":1,"891":1}}],["get",{"2":{"63":1,"71":1,"76":1,"165":1,"178":1,"199":1,"223":2,"418":1,"489":1,"617":2,"637":1,"649":2,"704":1,"708":1,"894":1,"1194":1,"1278":2,"1311":1,"1338":1,"1515":2,"1527":1}}],["geminiservice",{"2":{"149":2,"570":2,"625":2,"626":2,"978":2}}],["gemini",{"0":{"22":1},"2":{"19":1,"22":4,"25":1,"146":1,"429":1,"541":1,"570":2,"613":1,"614":1,"616":1,"617":3,"618":1,"623":1,"629":1,"977":1}}],["서드파티",{"2":{"1669":1}}],["서브메뉴",{"2":{"1111":1}}],["서브메뉴1",{"2":{"103":1}}],["서비스를",{"2":{"316":1,"385":1,"416":1}}],["서비스입니다",{"2":{"214":1,"317":1,"320":1,"325":1}}],["서비스에서",{"0":{"199":1,"625":1}}],["서비스",{"0":{"19":1,"146":1,"316":1,"385":1,"416":1,"531":1,"570":1,"613":1,"769":1,"846":1},"1":{"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"147":1,"148":1,"149":1,"150":1,"151":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"417":1,"418":1,"419":1,"532":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1},"2":{"88":1,"141":1,"173":1,"231":1,"282":1,"315":1,"338":1,"372":1,"385":1,"397":1,"404":1,"410":1,"429":1,"439":2,"443":1,"538":1,"539":1,"540":2,"541":1,"542":2,"551":1,"554":2,"568":1,"570":2,"573":3,"588":1,"589":1,"590":1,"591":1,"598":5,"601":1,"602":1,"614":2,"616":1,"618":1,"621":1,"630":1,"646":1,"684":1,"702":1,"726":1,"750":1,"769":3,"987":1,"1941":1}}],["서버와의",{"2":{"1725":1}}],["서버와",{"2":{"1680":1}}],["서버는",{"2":{"1494":1,"1736":1}}],["서버로",{"2":{"1191":1,"1192":1,"1193":1}}],["서버의",{"2":{"1187":1}}],["서버를",{"2":{"1173":1,"1736":1,"1749":1,"2055":1,"2058":1}}],["서버가",{"2":{"510":1,"511":1,"2177":1}}],["서버에서",{"0":{"1617":1},"2":{"1288":1,"1312":1,"1419":1}}],["서버에",{"2":{"34":1,"45":1,"46":2,"50":1,"65":1,"76":1,"1484":1,"1506":1,"1512":1,"1530":1,"1797":1,"2267":1}}],["서버",{"0":{"81":1,"188":1,"241":1,"468":1,"471":1,"505":1,"660":1,"1200":1,"1484":1,"1488":1,"1489":1,"1512":1,"1528":1,"1696":1,"1736":1},"1":{"242":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1},"2":{"12":1,"16":7,"33":1,"46":1,"51":1,"70":2,"81":1,"87":1,"138":1,"200":1,"473":2,"539":1,"611":1,"651":2,"652":3,"658":1,"715":1,"723":1,"731":2,"864":1,"904":1,"1000":1,"1001":1,"1168":3,"1195":1,"1286":1,"1310":1,"1312":1,"1314":1,"1333":1,"1334":1,"1528":3,"1529":1,"1536":1,"1674":2,"1695":1,"1726":3,"1734":3,"1747":1,"1755":1,"1776":1,"1779":2,"2082":1,"2161":1,"2179":1,"2187":1,"2267":1}}],["파비콘",{"2":{"1652":1,"1834":1,"1836":1}}],["파싱",{"2":{"214":1,"603":1,"651":2,"813":1,"945":1,"969":1,"970":1}}],["파일의",{"2":{"772":1,"898":1,"1221":1,"1873":1,"2106":1,"2200":1,"2222":1,"2284":1}}],["파일에는",{"2":{"2274":1}}],["파일에서",{"2":{"490":1,"492":1,"501":1,"962":1,"1202":1,"1507":1,"1510":1,"1846":1}}],["파일에",{"2":{"225":1,"375":1,"629":1,"699":1,"744":1,"1700":1,"1732":1,"2272":1}}],["파일입니다",{"2":{"221":1,"452":1,"761":1,"763":1,"1267":1,"1672":1,"1673":1,"1674":1,"1675":1,"1836":1,"1879":1,"1880":1,"1895":1,"1896":1,"1898":1,"1900":1,"1901":1}}],["파일만",{"2":{"123":1}}],["파일은",{"2":{"65":1,"87":1,"200":1,"264":1,"331":1,"473":1,"507":1,"723":1,"746":1,"757":1,"844":1,"1197":1,"1212":1,"1284":1,"1299":1,"1544":1,"1637":1,"1744":1,"1745":1,"1844":1,"1846":1,"1848":2}}],["파일로",{"0":{"503":1},"2":{"46":1,"453":1,"468":1,"749":1}}],["파일이",{"2":{"46":1,"123":1,"163":1,"485":1,"497":1,"564":1,"750":1,"752":1,"754":1,"891":1,"1212":1,"1299":1,"1726":1,"1749":1,"1876":1,"1890":1,"2055":1,"2179":1}}],["파일을",{"2":{"46":1,"76":1,"263":1,"330":1,"343":1,"344":1,"453":1,"481":1,"503":1,"749":1,"843":1,"891":1,"1166":1,"1299":1,"1484":1,"1548":1,"1599":1,"1695":1,"1699":1,"1728":1,"1734":1,"1735":1,"1847":1,"1848":1,"2056":1,"2218":1,"2267":1}}],["파일명에",{"2":{"1848":1}}],["파일명과",{"2":{"1612":1}}],["파일명이",{"2":{"1281":1,"1342":1,"1546":1,"1563":1}}],["파일명을",{"2":{"65":1,"1848":1}}],["파일명으로",{"2":{"50":1,"649":1,"661":1}}],["파일명",{"0":{"50":1,"659":1,"660":1,"661":1,"1570":1},"1":{"660":1,"661":1},"2":{"45":3,"46":1,"50":2,"71":1,"76":1,"122":1,"651":1,"665":1,"1612":1,"1777":1,"1848":1,"2218":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1}}],["파일들입니다",{"2":{"1851":1}}],["파일들은",{"2":{"1833":1}}],["파일들이",{"2":{"1658":1,"1660":1,"1661":1,"1668":1,"1669":1,"1670":1,"1819":1,"1821":1,"1822":1,"1824":1,"1833":1,"1839":1,"1908":1,"1925":1}}],["파일들을",{"2":{"1563":1}}],["파일들",{"2":{"44":1,"651":1,"1865":1}}],["파일과",{"2":{"43":1,"1137":1}}],["파일",{"0":{"24":1,"40":1,"43":1,"46":1,"47":1,"48":1,"65":1,"76":1,"122":1,"157":1,"161":1,"162":1,"164":1,"165":1,"166":1,"220":1,"239":1,"248":1,"249":1,"263":1,"264":1,"300":1,"306":1,"307":1,"330":1,"331":1,"341":1,"360":1,"373":1,"374":1,"375":1,"387":1,"409":1,"414":1,"442":1,"443":1,"450":1,"481":1,"490":1,"494":1,"588":1,"620":1,"640":1,"642":1,"645":1,"650":1,"651":1,"652":1,"653":1,"663":1,"664":1,"679":1,"694":1,"746":1,"748":1,"753":1,"760":1,"772":1,"773":1,"843":1,"844":1,"875":1,"890":1,"892":1,"893":1,"895":1,"962":1,"992":1,"1005":1,"1010":1,"1015":1,"1019":1,"1025":1,"1032":1,"1039":1,"1049":1,"1051":1,"1053":1,"1061":1,"1068":1,"1076":1,"1081":1,"1087":1,"1095":1,"1103":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1135":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1167":1,"1212":1,"1268":1,"1280":1,"1281":1,"1326":1,"1342":1,"1378":1,"1394":1,"1403":1,"1414":1,"1423":1,"1432":1,"1438":1,"1443":1,"1448":1,"1457":1,"1472":1,"1518":1,"1519":1,"1541":1,"1542":1,"1544":1,"1545":1,"1557":1,"1558":1,"1563":1,"1599":1,"1602":1,"1621":1,"1628":1,"1637":1,"1671":1,"1676":1,"1735":1,"1825":1,"1826":1,"1827":1,"1828":1,"1835":1,"1843":1,"1846":1,"1850":1,"1852":1,"1859":1,"1869":1,"1870":1,"1878":1,"1985":1,"2036":1,"2037":1,"2111":1,"2134":1,"2201":1,"2217":1,"2264":1,"2269":1,"2273":1,"2323":1},"1":{"41":1,"42":1,"43":1,"44":2,"45":2,"46":1,"47":1,"48":2,"49":2,"50":2,"51":1,"52":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"162":1,"163":2,"164":2,"165":1,"166":1,"167":2,"168":1,"221":1,"307":1,"308":1,"361":1,"362":1,"363":1,"374":1,"443":1,"444":1,"445":1,"446":1,"451":1,"452":1,"453":1,"482":1,"483":1,"484":1,"641":1,"642":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":2,"652":2,"653":1,"654":2,"655":2,"656":2,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"680":1,"747":1,"748":1,"749":2,"750":2,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":2,"762":1,"763":1,"764":1,"765":1,"766":1,"773":1,"774":1,"775":1,"876":1,"877":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":2,"892":2,"893":1,"894":2,"895":1,"896":2,"897":1,"898":1,"899":1,"1136":1,"1137":1,"1138":1,"1139":1,"1140":1,"1542":1,"1543":2,"1544":2,"1545":1,"1546":2,"1547":2,"1548":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1672":1,"1673":1,"1674":1,"1675":1,"1826":1,"1827":1,"1828":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1844":1,"1845":1,"1846":1,"1851":1,"1852":1,"1853":1,"1854":1,"1855":1,"1860":1,"1861":1,"1862":1,"1871":1,"1872":1,"1879":1,"1880":1,"1986":1,"1987":1,"2037":1,"2038":2,"2039":2,"2040":2,"2041":2,"2042":1,"2043":1,"2044":1,"2045":1,"2218":1,"2265":1,"2266":1,"2267":1,"2268":1,"2269":1,"2270":1},"2":{"18":1,"40":1,"44":1,"45":10,"46":7,"48":1,"51":4,"61":1,"70":1,"71":2,"76":1,"81":1,"87":1,"119":2,"123":1,"130":1,"141":1,"159":1,"160":1,"161":1,"167":1,"180":1,"200":1,"201":1,"300":1,"341":1,"375":1,"386":1,"387":1,"392":1,"396":2,"397":1,"415":1,"419":1,"429":1,"434":2,"437":3,"439":1,"471":1,"478":2,"494":1,"497":1,"500":1,"538":1,"541":2,"543":1,"544":1,"547":1,"549":2,"551":6,"554":1,"557":2,"561":2,"564":1,"566":1,"568":1,"577":1,"588":3,"598":3,"641":1,"645":1,"646":2,"648":4,"649":7,"651":6,"652":6,"654":1,"658":2,"663":3,"664":1,"665":2,"666":2,"680":1,"688":1,"704":2,"709":1,"711":1,"715":1,"722":1,"723":1,"724":1,"747":3,"763":2,"771":1,"874":1,"875":1,"878":3,"879":2,"882":1,"883":1,"891":1,"892":1,"896":3,"899":1,"927":1,"936":1,"991":1,"1042":1,"1139":3,"1140":2,"1168":1,"1193":1,"1212":1,"1217":1,"1221":1,"1275":1,"1299":1,"1435":1,"1548":1,"1563":1,"1582":1,"1599":1,"1606":1,"1625":1,"1652":2,"1659":1,"1726":1,"1734":1,"1754":1,"1764":2,"1766":4,"1768":1,"1769":2,"1776":1,"1777":2,"1781":2,"1794":1,"1795":1,"1796":1,"1806":1,"1807":1,"1808":1,"1809":1,"1817":1,"1820":1,"1834":1,"1847":1,"1848":1,"1861":1,"1871":1,"1905":1,"1926":3,"1931":1,"2023":3,"2111":1,"2132":1,"2134":1,"2173":2,"2218":1,"2233":1,"2256":1,"2262":1,"2263":1,"2265":1,"2269":1}}],["파라미터와",{"2":{"121":1}}],["파라미터를",{"2":{"120":1}}],["파라미터는",{"2":{"119":1}}],["파라미터가",{"2":{"46":1}}],["파라미터명은",{"2":{"38":1}}],["파라미터명",{"2":{"38":1}}],["파라미터명과",{"2":{"30":1}}],["파라미터로",{"2":{"33":1,"78":1,"79":1,"185":1,"186":1,"713":1,"714":1}}],["파라미터",{"0":{"33":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"77":1,"78":1,"79":1,"80":1,"179":1,"184":1,"185":1,"186":1,"187":1,"708":1,"712":1,"713":1,"714":1,"715":1},"1":{"78":1,"79":1,"80":1,"81":2,"82":2,"83":1,"84":1,"185":1,"186":1,"187":1,"188":2,"189":2,"190":1,"191":1,"713":1,"714":1,"715":1,"716":1},"2":{"9":1,"22":1,"30":2,"31":2,"32":2,"33":1,"34":1,"43":1,"45":1,"46":1,"56":1,"57":1,"65":1,"67":1,"69":1,"72":1,"75":1,"76":1,"92":1,"103":3,"104":2,"105":1,"119":1,"120":1,"121":1,"179":1,"197":1,"199":1,"211":1,"421":1,"611":1,"651":1,"663":1,"670":4,"708":1,"859":1,"863":2,"872":1,"888":1,"1057":1,"1096":1,"1099":1,"1215":1,"1216":1,"1217":1,"1382":1,"1407":1,"1409":2,"1426":1,"1460":1,"1475":1,"1476":1,"1477":1,"1609":1,"1702":1,"2204":1,"2205":1,"2207":1,"2208":1,"2209":1,"2210":1,"2212":1,"2214":1,"2216":1,"2218":1,"2220":1,"2221":1,"2231":1,"2232":1,"2233":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":1,"2276":1,"2277":1,"2278":1,"2279":1,"2325":1,"2326":1,"2328":1,"2330":1}}],["불러오고",{"2":{"2330":1}}],["불러오기",{"2":{"1444":1,"1445":1,"2332":1}}],["불러올",{"2":{"2326":1}}],["불러옵니다",{"2":{"2326":1}}],["불가",{"2":{"17":1}}],["불필요",{"2":{"17":1,"28":1,"670":1}}],["합니다",{"2":{"17":1,"25":1,"51":2,"87":1,"114":1,"200":1,"365":1,"367":1,"461":1,"582":1,"1045":1,"1173":2,"1221":1,"1726":1,"1848":2,"2282":1}}],["다크",{"2":{"1901":1}}],["다국어",{"2":{"1865":1,"1876":1,"1877":1,"1879":1}}],["다른",{"0":{"1468":1},"2":{"509":1,"538":1,"1166":1,"1185":1,"1491":1,"1697":1,"1747":1,"1752":1,"2177":1}}],["다르므로",{"2":{"249":1,"494":1}}],["다양한",{"2":{"175":1,"203":1,"232":1,"425":1,"784":1,"875":1,"938":1,"973":1,"1022":1,"1275":1,"1306":1,"1659":1,"1679":1,"1680":1,"1686":1,"2073":1,"2082":1,"2103":1}}],["다릅니다",{"2":{"114":1}}],["다운로드합니다",{"2":{"46":1,"75":1,"2218":1,"2258":1,"2267":1}}],["다운로드",{"0":{"46":1,"75":1,"165":1,"183":1,"477":1,"496":1,"652":1,"664":1,"722":1,"893":1,"1281":1,"1326":1,"1342":1,"1519":1,"1541":1,"1545":1,"1548":1,"2269":1},"1":{"894":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":2,"1547":2,"1548":1},"2":{"46":2,"50":1,"161":1,"429":2,"488":1,"541":1,"598":1,"645":1,"648":1,"649":1,"661":1,"704":1,"1071":2,"1275":1,"1435":1,"1766":2,"1769":1,"2023":1,"2111":1,"2134":1,"2269":1}}],["다운로드를",{"2":{"40":1,"588":1}}],["다중",{"0":{"31":1,"32":1,"43":1,"427":1},"1":{"44":1,"45":1},"2":{"252":1,"538":1,"544":1,"634":1,"635":1,"648":1,"909":1,"1031":1,"1758":1,"2003":1,"2007":1,"2015":1}}],["다시",{"2":{"17":1,"1262":1,"1276":1,"1286":1,"1310":1,"1333":1,"1337":1,"1529":1,"1536":1,"1748":1,"2166":1,"2181":1}}],["다음으로",{"2":{"1358":1}}],["다음을",{"2":{"367":1,"1733":1}}],["다음과",{"2":{"130":1,"432":1,"505":1,"1348":1,"1370":1,"1607":1,"1626":1,"1686":1,"1829":1,"1957":1,"1973":1,"1989":1}}],["다음",{"0":{"18":1,"26":1,"39":1,"52":1,"61":1,"88":1,"99":1,"115":1,"124":1,"128":1,"145":1,"151":1,"160":1,"168":1,"173":1,"201":1,"226":1,"231":1,"237":1,"251":1,"265":1,"282":1,"302":1,"315":1,"327":1,"338":1,"342":1,"345":1,"353":1,"359":1,"363":1,"397":1,"404":1,"410":1,"415":1,"419":1,"423":1,"435":1,"456":1,"474":1,"512":1,"536":1,"566":1,"596":1,"612":1,"630":1,"644":1,"666":1,"682":1,"700":1,"724":1,"745":1,"766":1,"771":1,"775":1,"794":1,"807":1,"819":1,"831":1,"852":1,"874":1,"899":1,"937":1,"965":1,"987":1,"990":1,"994":1,"997":1,"1002":1,"1619":1,"1677":1,"1692":1,"1711":1,"1729":1,"1750":1,"1786":1,"1831":1,"2116":1},"2":{"15":1,"86":1,"122":1,"135":1,"264":1,"331":1,"393":1,"435":1,"448":1,"455":1,"456":1,"461":1,"466":1,"473":1,"474":1,"480":1,"497":1,"506":1,"507":1,"512":1,"530":1,"857":1,"866":1,"889":1,"964":1,"1577":1,"1619":1,"1677":1,"1692":1,"1695":1,"1711":1,"1719":1,"1720":1,"1726":1,"1727":1,"1729":1,"1733":1,"1735":1,"1750":1,"1831":1,"1922":1,"2116":1}}],["위험한",{"2":{"798":1,"963":1}}],["위한",{"0":{"539":1,"1753":1},"1":{"1754":1,"1755":1,"1756":1},"2":{"316":1,"317":1,"320":1,"425":1,"538":1,"904":1,"1042":1,"1055":1,"1075":1,"1129":1,"1693":1,"1725":1,"1744":1,"2098":1}}],["위해",{"2":{"17":1,"665":1,"1166":1,"1264":1,"1300":1,"1719":1,"1723":1,"2073":1,"2103":1,"2109":1,"2274":1}}],["위치와",{"2":{"772":1,"991":1}}],["위치합니다",{"2":{"746":1,"750":1,"752":1,"754":1,"756":1,"759":1,"1658":1,"1660":1,"1661":1,"1662":1,"1668":1,"1669":1,"1670":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1833":1,"1839":1,"1864":1,"1865":1,"1876":1,"1890":1,"1908":1,"1925":1}}],["위치하는",{"2":{"560":1,"1654":1,"1857":1}}],["위치에",{"2":{"86":1,"507":1,"889":1}}],["위치",{"0":{"85":1,"193":1,"239":1,"307":1,"331":1,"414":1,"640":1,"711":1,"719":1,"844":1,"918":1,"992":1,"1005":1,"1010":1,"1015":1,"1019":1,"1025":1,"1032":1,"1039":1,"1049":1,"1051":1,"1053":1,"1061":1,"1068":1,"1076":1,"1081":1,"1087":1,"1095":1,"1103":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1160":1,"1176":1,"1188":1,"1268":1,"1378":1,"1394":1,"1403":1,"1414":1,"1423":1,"1432":1,"1438":1,"1443":1,"1448":1,"1457":1,"1472":1,"1628":1,"1852":1,"1869":1,"2201":1,"2273":1,"2323":1},"1":{"641":1,"642":1},"2":{"11":1,"12":1,"13":1,"66":1,"177":1,"221":1,"600":1,"601":1,"602":1,"603":1,"604":1,"611":2,"616":1,"617":1,"618":1,"620":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"641":1,"642":1,"648":1,"649":1,"670":1,"671":1,"672":1,"673":1,"675":1,"678":1,"680":1,"686":1,"687":1,"688":1,"704":1,"705":1,"728":1,"729":1,"757":1,"761":1,"763":2,"765":1,"834":1,"887":1,"942":1,"943":1,"1033":1,"1042":1,"1226":1,"1227":1,"1439":1,"1794":1,"1795":1,"1796":1,"1806":1,"1807":1,"1808":1,"1809":1}}],["설치부터",{"2":{"1755":1}}],["설치됩니다",{"2":{"1727":1}}],["설치가",{"2":{"1727":1}}],["설치됨",{"2":{"1715":1}}],["설치",{"0":{"487":1,"1694":1,"1733":1,"1748":1,"2178":1},"1":{"488":1,"489":1},"2":{"466":1,"488":1,"489":1,"1694":1,"1714":1,"1715":1,"1716":1,"1725":1,"1733":1,"1748":1}}],["설계할",{"2":{"393":1}}],["설계",{"0":{"346":1,"367":1,"393":1,"1769":1},"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1},"2":{"346":1,"363":1,"393":1,"398":1,"404":1,"542":3}}],["설정되어",{"2":{"2143":1}}],["설정되어야",{"2":{"1726":1}}],["설정되었는지",{"2":{"1485":1}}],["설정되고",{"2":{"1380":1}}],["설정에",{"2":{"1272":1,"1273":1,"1282":1,"1776":1,"2234":1}}],["설정에서",{"2":{"17":1,"51":1,"665":1}}],["설정입니다",{"2":{"1175":1,"1187":1,"1894":1,"1897":1,"1899":1,"1902":1,"1903":1}}],["설정할",{"2":{"869":1,"949":1,"950":1,"1382":1,"1500":1}}],["설정하면",{"2":{"1735":1}}],["설정하는",{"2":{"475":1,"544":1,"1267":1}}],["설정하세요",{"2":{"474":1,"1729":1}}],["설정값",{"2":{"362":1}}],["설정키",{"2":{"362":1}}],["설정을",{"2":{"252":1,"360":1,"375":1,"387":1,"427":1,"473":1,"582":1,"631":1,"832":1,"1166":1,"1185":1}}],["설정은",{"2":{"238":1,"621":1}}],["설정이",{"2":{"114":1,"200":1,"1303":1,"1675":1,"1736":1,"1750":1,"1865":1}}],["설정됨",{"2":{"103":1}}],["설정합니다",{"2":{"24":1,"159":1,"195":1,"253":1,"269":1,"358":1,"371":1,"492":1,"494":1,"579":1,"580":1,"581":1,"892":1,"964":1,"1202":1,"1209":1,"1242":1,"1243":1,"1382":1,"1417":1,"1451":1,"1452":1,"1507":1,"1510":1,"1657":1,"1674":1,"1734":1,"1862":1,"2067":1,"2094":1}}],["설정",{"0":{"23":1,"24":1,"95":1,"122":1,"147":1,"156":1,"158":1,"170":1,"179":1,"195":1,"228":1,"238":1,"239":1,"240":1,"241":1,"243":1,"244":1,"245":1,"246":1,"248":1,"249":1,"250":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"262":1,"263":1,"266":1,"267":1,"275":1,"283":1,"288":1,"328":1,"329":1,"330":1,"343":1,"358":1,"360":1,"361":1,"369":1,"375":1,"387":1,"443":1,"445":1,"473":1,"475":1,"479":1,"481":1,"482":1,"483":1,"484":1,"486":1,"490":1,"491":1,"492":1,"493":1,"494":1,"544":1,"578":1,"619":1,"620":1,"621":1,"631":1,"633":1,"640":1,"642":1,"643":1,"657":1,"689":1,"708":1,"739":1,"748":1,"762":1,"770":1,"772":1,"773":1,"774":1,"790":1,"799":1,"820":1,"822":1,"823":1,"837":1,"840":1,"841":1,"842":1,"843":1,"850":1,"869":1,"870":1,"873":1,"889":1,"910":1,"918":1,"924":1,"946":1,"949":1,"950":1,"993":1,"1160":1,"1170":1,"1174":1,"1176":1,"1186":1,"1188":1,"1189":1,"1196":1,"1198":1,"1200":1,"1203":1,"1204":1,"1209":1,"1233":1,"1248":1,"1266":1,"1269":1,"1270":1,"1283":1,"1364":1,"1484":1,"1490":1,"1671":1,"1695":1,"1730":1,"1734":1,"1735":1,"1742":1,"1744":1,"1745":1,"1776":1,"1889":1,"2036":1,"2037":1,"2042":1},"1":{"24":1,"96":1,"148":1,"159":1,"171":1,"229":1,"239":1,"240":1,"241":1,"242":2,"243":1,"244":1,"245":1,"246":1,"247":2,"248":1,"249":1,"250":1,"251":1,"253":1,"254":1,"255":2,"256":2,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":2,"264":2,"265":1,"267":1,"268":2,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":2,"277":2,"278":1,"279":1,"280":1,"281":1,"282":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":2,"290":2,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"344":1,"345":1,"361":1,"362":2,"363":1,"370":1,"371":1,"476":1,"477":1,"478":1,"479":1,"480":2,"481":2,"482":3,"483":3,"484":3,"485":2,"486":1,"487":2,"488":2,"489":2,"490":2,"491":1,"492":2,"493":2,"494":2,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"579":1,"580":1,"581":1,"582":1,"583":1,"620":1,"621":1,"632":1,"633":1,"634":2,"635":2,"636":2,"637":2,"638":2,"639":2,"640":1,"641":2,"642":2,"643":1,"644":1,"658":1,"690":1,"740":1,"749":1,"750":1,"763":1,"773":1,"774":1,"775":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"838":1,"843":1,"844":1,"1171":1,"1172":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1187":1,"1188":1,"1189":1,"1190":1,"1191":1,"1192":1,"1193":1,"1194":1,"1195":1,"1197":1,"1198":1,"1199":2,"1200":2,"1201":2,"1202":1,"1203":1,"1204":1,"1205":2,"1206":2,"1267":1,"1268":1,"1269":1,"1270":2,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":1,"1365":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1672":1,"1673":1,"1674":1,"1675":1,"1731":1,"1732":1,"1733":1,"1734":1,"1735":2,"1736":1,"1737":1,"1738":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":2,"1744":2,"1745":2,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1,"1890":1,"1891":1,"1892":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"1900":1,"1901":1,"1902":1,"1903":1,"1904":1,"1905":1,"1906":1,"2037":1,"2038":2,"2039":2,"2040":2,"2041":2,"2042":1,"2043":2,"2044":2,"2045":2},"2":{"17":2,"51":1,"73":1,"103":2,"110":2,"114":1,"179":2,"199":1,"206":1,"211":1,"215":1,"217":3,"225":1,"226":1,"239":2,"251":2,"260":1,"263":1,"265":2,"282":1,"302":2,"330":1,"342":1,"362":1,"375":2,"384":1,"387":1,"394":1,"396":1,"397":2,"415":1,"419":1,"434":1,"435":1,"437":4,"439":5,"443":4,"445":3,"451":2,"452":2,"453":2,"459":1,"460":1,"462":1,"463":1,"464":1,"465":1,"473":1,"474":1,"478":1,"510":1,"511":1,"539":2,"540":4,"544":6,"547":1,"549":1,"551":9,"552":1,"554":6,"561":1,"568":1,"581":2,"582":2,"596":1,"600":1,"612":1,"629":1,"630":1,"632":5,"634":7,"635":5,"636":5,"637":5,"638":1,"641":1,"644":3,"670":1,"671":2,"672":1,"675":1,"699":2,"708":2,"744":1,"747":4,"749":2,"750":2,"754":4,"759":1,"763":2,"766":2,"770":4,"771":1,"772":1,"773":4,"774":3,"803":1,"834":2,"835":1,"836":1,"838":1,"843":1,"917":2,"952":1,"956":1,"965":1,"982":1,"1000":1,"1001":1,"1020":1,"1163":1,"1197":1,"1199":1,"1236":1,"1248":2,"1250":1,"1304":1,"1321":1,"1343":1,"1354":1,"1363":1,"1407":1,"1424":1,"1426":1,"1433":1,"1434":1,"1454":1,"1652":4,"1658":1,"1661":5,"1673":2,"1674":1,"1675":1,"1692":1,"1729":1,"1735":1,"1744":1,"1745":1,"1755":1,"1759":2,"1768":1,"1776":6,"1781":2,"1794":1,"1816":2,"1817":8,"1822":5,"1849":2,"1858":4,"1865":2,"1876":1,"1877":2,"1879":4,"1880":1,"1890":1,"1891":2,"1893":1,"1896":3,"1898":4,"1899":3,"1900":3,"1901":2,"1905":2,"1906":3,"1911":1,"1913":2,"1914":1,"1916":1,"1965":1,"1966":1,"1967":1,"2039":1,"2040":1,"2041":1,"2044":1,"2045":1,"2160":2,"2163":1,"2184":1,"2185":1,"2187":2}}],["설명2",{"2":{"1035":1}}],["설명1",{"2":{"1035":1}}],["설명합니다",{"2":{"174":1,"202":1,"303":1,"339":1,"343":1,"346":1,"354":1,"360":1,"399":1,"405":1,"411":1,"416":1,"420":1,"436":1,"548":1,"900":1,"966":1,"988":1,"991":1,"995":1,"998":1,"1521":1,"1596":1}}],["설명해주세요",{"2":{"22":1}}],["설명",{"0":{"450":1,"559":1,"569":1,"1653":1,"1818":1,"1863":1},"1":{"451":1,"452":1,"453":1,"560":1,"561":1,"562":1,"563":1,"564":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1864":1,"1865":1},"2":{"9":1,"22":1,"30":2,"31":1,"32":1,"33":1,"34":1,"43":1,"45":1,"46":1,"56":1,"57":1,"65":1,"72":1,"73":1,"74":1,"75":1,"76":1,"92":1,"103":1,"104":1,"105":1,"106":1,"107":1,"119":1,"120":1,"121":1,"623":1,"862":2,"863":1,"864":1,"1026":1,"1033":1,"1035":1,"1380":1,"1652":1,"1754":1,"1816":1}}],["7",{"0":{"504":1,"505":1,"506":1,"507":1,"590":1,"1703":1,"2219":1},"1":{"505":1,"506":1,"507":1,"1704":1,"1705":1,"2220":1,"2221":1},"2":{"16":1,"22":2,"471":1,"835":1,"836":1,"935":1,"1613":1,"1684":1,"1973":1,"2072":1,"2102":1,"2140":1,"2283":1}}],["7일~30일",{"2":{"1227":1}}],["7일",{"2":{"12":1,"225":1,"811":1,"943":1}}],["새이름",{"2":{"716":1}}],["새모듈util",{"2":{"406":1,"455":1}}],["새모듈mapper",{"2":{"406":1,"409":1,"455":1}}],["새모듈service",{"2":{"406":1,"455":1}}],["새모듈controller",{"2":{"406":1,"455":1}}],["새모듈명",{"2":{"362":1,"406":1,"407":1,"408":1,"409":1,"455":1}}],["새커서명",{"2":{"71":1}}],["새",{"0":{"542":1,"1259":1,"1767":1},"1":{"1768":1,"1769":1,"1770":1,"1771":1,"1772":1},"2":{"16":2,"45":1,"72":1,"362":1,"370":2,"371":1,"407":1,"663":1,"1096":1,"1599":1,"1699":1,"1770":1}}],["새로고침",{"2":{"1358":1,"1479":1,"2168":2}}],["새로",{"2":{"9":1}}],["새로운",{"0":{"364":1,"455":1},"1":{"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1},"2":{"9":3,"243":1,"360":1,"364":1,"365":1,"367":1,"389":1,"393":1,"394":1,"395":1,"396":1,"405":1,"455":1,"456":1,"492":1,"536":1,"539":1,"946":1,"1255":1,"1264":1,"1475":1,"1596":1,"1686":1,"1711":1,"1885":1,"1905":1,"1922":1,"2284":1}}],["6121607",{"2":{"1697":1}}],["64",{"2":{"459":1}}],["6단계",{"0":{"375":1}}],["6379",{"2":{"268":2,"472":1,"490":2,"850":2}}],["6",{"0":{"76":1,"498":1,"499":1,"502":1,"503":1,"577":1,"589":1,"605":1,"639":1,"1334":1,"1616":1,"1617":1,"1618":1,"1702":1,"2217":1},"1":{"499":1,"500":2,"501":2,"502":1,"503":1,"606":1,"607":1,"608":1,"609":1,"1617":1,"1618":1,"2218":1},"2":{"16":1,"460":1,"465":1,"885":1,"1027":1,"1613":1,"1648":2,"1685":1,"2072":1,"2102":1}}],["56",{"2":{"2212":4,"2303":4,"2304":2}}],["567",{"2":{"2212":1,"2303":1,"2304":1,"2305":1,"2306":1,"2307":1}}],["5678",{"2":{"1949":1,"1999":1,"2296":1,"2297":1,"2298":1,"2318":1}}],["5를",{"2":{"2140":1}}],["5gb",{"2":{"1723":1}}],["54",{"2":{"1685":1,"2071":1,"2101":1}}],["5432",{"2":{"258":1,"472":1,"484":1,"836":1}}],["5분",{"2":{"743":1}}],["5단계",{"0":{"373":1},"1":{"374":1}}],["59443",{"2":{"245":1}}],["595",{"2":{"197":1}}],["5050에서",{"2":{"1741":1}}],["50",{"2":{"197":1,"256":1,"634":2,"834":1,"840":1}}],["500입니다",{"2":{"1178":1}}],["5000",{"2":{"1177":1,"1203":1}}],["500px",{"2":{"1056":1,"1609":1,"1705":1}}],["500",{"0":{"1528":1},"2":{"138":1,"864":1,"1314":2,"1528":1,"1536":1}}],["555",{"2":{"197":2}}],["587",{"2":{"171":1,"690":1}}],["5173에서",{"2":{"1736":1}}],["5173으로",{"2":{"1492":1,"1696":1}}],["5173",{"2":{"34":1,"245":1,"493":1,"1200":1,"1490":1,"1747":1,"2151":1,"2177":1}}],["5",{"0":{"34":1,"75":1,"107":1,"113":1,"387":1,"431":1,"466":1,"495":1,"496":1,"497":1,"576":1,"583":1,"588":1,"604":1,"638":1,"1298":1,"1312":1,"1333":1,"1486":1,"1610":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":2,"1698":1,"1699":1,"1700":1,"1701":1,"1772":1,"2215":1},"1":{"496":1,"497":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":1,"1699":1,"1700":1,"1701":1,"2216":1},"2":{"16":1,"56":2,"59":1,"93":1,"286":1,"433":2,"452":1,"460":1,"505":1,"538":1,"617":1,"676":1,"735":1,"743":1,"836":1,"855":1,"877":4,"902":1,"916":1,"920":1,"931":1,"940":1,"1613":1,"1681":2,"1683":3,"1684":1,"1685":1,"2071":1,"2072":1,"2076":1,"2081":1,"2089":1,"2101":1,"2102":1,"2111":1,"2112":1,"2113":1,"2127":1,"2134":1,"2135":1,"2136":1,"2308":1}}],["46",{"2":{"2310":1}}],["4코어",{"2":{"1723":1}}],["419",{"0":{"1258":1,"1308":1,"1332":1,"1525":1},"2":{"1256":1,"1258":1,"1275":1,"1276":1,"1308":1,"1332":1,"1525":1}}],["415",{"2":{"123":1}}],["429",{"0":{"1287":1,"1309":1,"1331":1,"2162":1},"2":{"953":1,"1287":1,"1309":1,"1331":1,"2162":1}}],["4gb",{"2":{"471":1,"1722":1}}],["4단계",{"0":{"372":1}}],["4mo577",{"2":{"206":1,"244":1,"790":1,"956":1}}],["4qlmgnic5llwda9t+p",{"2":{"206":1,"244":1,"790":1,"956":1}}],["403",{"2":{"138":1,"829":1,"1536":1}}],["40",{"2":{"93":2,"94":1,"731":1,"734":1,"735":1}}],["404",{"0":{"1311":1,"1527":1},"2":{"46":1,"119":1,"138":1,"1311":2,"1338":3,"1527":3,"1536":1}}],["400",{"0":{"1526":1},"2":{"46":1,"119":1,"138":1,"864":1,"1314":2,"1526":1,"1536":1}}],["401",{"0":{"15":1,"1258":1,"1308":1,"1332":1,"1525":1,"2057":1},"2":{"9":1,"15":1,"138":1,"421":1,"830":1,"859":1,"864":1,"1256":1,"1258":1,"1261":1,"1275":1,"1276":2,"1308":1,"1332":1,"1525":2,"1536":1,"2165":1,"2181":1}}],["456",{"2":{"45":1,"2310":2}}],["4",{"0":{"33":1,"74":1,"106":1,"112":1,"180":1,"386":1,"409":1,"430":1,"446":1,"465":1,"491":1,"492":1,"493":1,"494":1,"521":1,"575":1,"582":1,"584":1,"585":1,"586":1,"587":1,"603":1,"637":1,"673":1,"710":1,"1297":1,"1311":1,"1332":1,"1485":1,"1608":1,"1609":1,"1614":1,"1697":1,"1771":1,"2213":1},"1":{"492":1,"493":1,"494":1,"585":1,"586":1,"587":1,"1609":1,"2214":1},"2":{"16":1,"433":1,"651":1,"676":1,"908":1,"935":1,"980":1,"984":2,"1613":1,"1681":1,"1683":2,"1685":3,"1788":1,"2081":1,"2089":1,"2105":2,"2108":1,"2112":1,"2114":1,"2127":1,"2132":2,"2133":1,"2135":1,"2137":1}}],["33",{"2":{"1685":1,"2097":2,"2118":1}}],["3의",{"2":{"1680":1,"2077":1}}],["3600",{"2":{"637":1}}],["3단계",{"0":{"369":1,"539":1,"1753":1},"1":{"370":1,"371":1,"1754":1,"1755":1,"1756":1},"2":{"1111":1,"1113":1,"1118":1,"1120":1}}],["300초",{"2":{"1269":1,"1270":1,"2161":1}}],["300px",{"2":{"1035":1}}],["300000",{"2":{"1269":1}}],["3000",{"2":{"493":1,"1537":1}}],["30",{"2":{"93":2,"94":1,"97":1,"197":1,"731":1,"734":1,"735":1,"738":1,"1220":1,"1548":1,"1716":1,"2197":1,"2262":1,"2294":1}}],["3",{"0":{"32":1,"73":1,"105":1,"111":1,"121":1,"179":1,"385":1,"408":1,"429":1,"441":1,"445":1,"453":1,"461":1,"485":1,"486":1,"487":1,"490":1,"494":1,"503":1,"507":1,"511":1,"520":1,"527":1,"556":1,"574":1,"578":1,"579":1,"580":1,"581":2,"582":1,"583":1,"587":1,"602":1,"618":1,"636":1,"672":1,"688":1,"694":1,"709":1,"836":1,"1231":1,"1260":1,"1296":1,"1310":1,"1327":1,"1331":1,"1484":1,"1600":1,"1604":1,"1605":1,"1606":1,"1607":1,"1613":1,"1696":1,"1701":1,"1756":1,"1770":1,"2047":1,"2075":1,"2211":1},"1":{"462":1,"463":1,"464":1,"487":1,"488":2,"489":2,"490":1,"579":1,"580":1,"581":1,"582":1,"583":1,"1606":1,"1607":1,"2076":1,"2077":1,"2078":1,"2079":1,"2212":1},"2":{"16":1,"45":1,"65":1,"68":1,"84":2,"191":1,"224":1,"308":2,"333":2,"413":2,"433":2,"452":1,"460":2,"535":2,"538":1,"651":1,"652":1,"676":1,"731":1,"753":2,"902":1,"908":1,"916":1,"972":1,"1199":1,"1318":1,"1534":1,"1613":1,"1679":1,"1680":1,"1681":2,"1683":2,"1684":1,"1685":2,"1718":1,"1752":1,"1773":1,"1857":1,"2071":1,"2072":1,"2076":1,"2078":1,"2083":1,"2085":2,"2097":2,"2101":1,"2102":1,"2112":1,"2118":1,"2135":1,"2140":1,"2194":2,"2196":1,"2308":2}}],["234",{"2":{"2212":3,"2303":3,"2304":2,"2305":1,"2306":1,"2307":1}}],["2차원",{"2":{"2193":1}}],["2를",{"2":{"2118":1}}],["2gb",{"2":{"1722":1}}],["2코어",{"2":{"1722":1}}],["2칸",{"2":{"1565":1}}],["24",{"2":{"912":1}}],["25",{"2":{"835":1}}],["256",{"0":{"209":1,"793":1,"959":1},"2":{"575":1,"598":1,"609":1}}],["2단계",{"0":{"368":1},"2":{"1111":1,"1113":1,"1118":1,"1120":1}}],["20gb",{"2":{"471":1}}],["2023",{"2":{"459":1,"466":2}}],["2024년",{"2":{"2251":1}}],["20241301",{"2":{"2221":1,"2316":1}}],["20241231",{"2":{"71":1,"1949":1}}],["20240110",{"2":{"2210":1,"2224":1,"2243":1}}],["20240101120000",{"2":{"93":1,"735":1,"2208":1,"2240":1}}],["20240101",{"2":{"71":1,"93":1,"1707":1,"1783":1,"1949":1,"2207":4,"2210":1,"2221":1,"2222":1,"2224":1,"2239":2,"2243":1,"2245":1,"2248":1,"2316":1}}],["2024",{"2":{"33":2,"56":2,"59":1,"71":1,"79":1,"179":1,"186":1,"708":1,"756":1,"1707":1,"2207":4,"2239":2,"2241":1,"2244":2,"2245":1,"2246":1,"2247":1,"2249":1,"2251":1}}],["20",{"2":{"93":2,"94":1,"97":1,"197":7,"471":1,"731":1,"734":1,"735":1,"738":1,"743":1,"841":1,"885":1,"1714":1,"1720":1}}],["200px",{"2":{"1034":1,"1035":1,"1043":1,"1077":1}}],["2000바이트",{"2":{"737":1}}],["2001",{"2":{"197":1}}],["200",{"2":{"9":1,"138":2,"197":3,"421":1,"859":1,"864":1,"1609":1}}],["2",{"0":{"31":1,"46":1,"57":1,"72":1,"104":1,"110":1,"120":1,"178":1,"384":1,"407":1,"428":1,"440":1,"444":1,"449":1,"452":1,"460":1,"469":1,"478":1,"479":1,"480":1,"481":2,"485":1,"490":1,"493":1,"497":1,"502":1,"506":1,"510":1,"519":1,"526":1,"555":1,"571":1,"572":1,"573":2,"574":1,"575":1,"576":1,"577":1,"580":1,"586":1,"601":1,"617":1,"626":1,"635":1,"649":1,"652":1,"671":1,"687":1,"693":1,"705":1,"708":1,"729":1,"732":1,"750":1,"835":1,"1230":1,"1259":1,"1295":1,"1309":1,"1326":1,"1330":1,"1483":1,"1599":1,"1601":1,"1602":1,"1603":2,"1604":1,"1607":1,"1612":1,"1618":1,"1695":1,"1700":1,"1755":1,"1769":1,"2206":1,"2261":1},"1":{"480":1,"481":1,"482":3,"483":3,"484":3,"485":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"1602":1,"1603":1,"1604":1,"2207":1,"2208":1,"2209":1,"2210":1},"2":{"16":1,"30":1,"31":4,"36":2,"45":4,"48":1,"57":1,"78":2,"93":1,"120":1,"121":1,"185":2,"286":1,"433":2,"452":1,"471":1,"505":1,"538":1,"617":1,"651":2,"652":1,"654":1,"676":1,"713":1,"731":1,"735":1,"855":1,"877":2,"881":2,"902":1,"916":1,"920":1,"1534":1,"1585":1,"1613":1,"1648":1,"1681":1,"1683":1,"1685":2,"1704":2,"1705":1,"1716":1,"1879":2,"2071":1,"2085":2,"2097":2,"2101":1,"2108":1,"2111":1,"2112":1,"2115":1,"2133":1,"2134":1,"2135":1,"2138":1,"2193":2,"2194":1,"2196":2,"2204":1,"2212":2,"2261":1,"2303":2,"2310":1}}],["→",{"2":{"16":2,"78":1,"79":1,"185":1,"186":1,"190":1,"191":1,"500":1,"501":1,"651":2,"652":1,"713":1,"731":1,"1194":1,"1361":1,"1370":1,"1607":1,"1626":1,"1847":1,"2279":1}}],["않아요",{"0":{"2055":1,"2058":1}}],["않으면",{"2":{"1358":1,"1359":1}}],["않도록",{"2":{"225":1,"629":1,"1353":1}}],["않습니다",{"2":{"46":1,"60":1,"119":1,"1264":1,"1390":1}}],["않는",{"2":{"15":2,"759":1,"1497":1,"1749":1,"1848":1}}],["않은",{"2":{"15":1,"1389":1}}],["않음",{"0":{"2167":1,"2168":1},"2":{"9":1,"94":1,"563":1,"2167":1,"2177":1,"2179":1}}],["hh",{"2":{"2241":1,"2247":1}}],["h1>내",{"2":{"1699":1}}],["h1>",{"2":{"1594":1,"1699":1,"2078":2}}],["h1>제목",{"2":{"1594":1}}],["hmr",{"0":{"1493":1},"2":{"1490":1,"2082":1}}],["hsts",{"2":{"827":1}}],["highlighted",{"2":{"1788":2}}],["highlighting",{"0":{"1788":1},"2":{"1788":2}}],["highest",{"2":{"638":1,"670":1,"675":2,"799":1}}],["hide",{"2":{"1440":1}}],["hideloading",{"0":{"1398":1},"2":{"1273":1,"1275":1,"1302":1,"1325":1,"1329":1,"1399":1,"1609":1,"1615":1,"1706":1,"1912":2,"1920":1,"2001":1}}],["hidden",{"2":{"1026":1,"1033":1}}],["hikaridatasource",{"2":{"634":2}}],["hikaricp를",{"2":{"839":1}}],["hikaricp",{"0":{"256":1,"839":1},"1":{"840":1,"841":1},"2":{"634":3,"834":1}}],["hot",{"2":{"2082":1}}],["hooks",{"2":{"1613":1}}],["hong",{"2":{"1278":1}}],["home",{"2":{"459":1,"460":2,"1649":1,"2062":1}}],["host",{"2":{"171":1,"268":2,"490":2,"690":1,"850":2,"1200":1,"1490":1}}],["hasroute",{"2":{"1358":1}}],["hashmap",{"2":{"149":1,"172":1,"178":1,"179":1,"199":2,"318":1,"390":1,"417":1,"418":1,"570":1,"593":1,"601":2,"625":2,"707":1,"708":1,"846":1,"883":1,"888":1,"978":1}}],["hash",{"0":{"56":1,"57":1,"324":1},"2":{"12":1,"56":1,"59":2,"208":2,"209":2,"602":2,"792":2,"793":2,"958":2,"959":2}}],["handlelogin",{"2":{"1920":1}}],["handleupdate",{"2":{"1593":2}}],["handleevent",{"2":{"1592":1}}],["handleexception",{"2":{"600":1}}],["handle",{"2":{"1572":1,"2146":1}}],["handleapierror",{"2":{"1538":2}}],["handleaction",{"2":{"1063":2,"1706":1}}],["handletoggleunfoldable",{"2":{"1463":2}}],["handletogglesidebar",{"2":{"1463":2}}],["handler",{"2":{"1434":1}}],["handledeptselect",{"2":{"2009":1}}],["handled",{"2":{"1311":1,"1338":1}}],["handledata",{"2":{"974":1}}],["handleheadercontextmenu",{"2":{"1072":1}}],["handlesubmit",{"2":{"1566":1,"1572":1}}],["handleselect",{"2":{"1036":2,"2003":1}}],["handlesave",{"2":{"1006":1,"1997":1}}],["handlecustomerselect",{"2":{"1983":1}}],["handlecontextmenu",{"2":{"1072":2}}],["handlechange",{"2":{"1035":2}}],["handleclick",{"2":{"1007":1,"1566":1,"1572":1,"1613":1,"1699":2}}],["havingvalue",{"2":{"260":1,"634":1,"838":1}}],["height",{"2":{"1056":1,"1609":1,"1705":1}}],["height=600",{"2":{"1099":1}}],["height=",{"2":{"197":5}}],["hello",{"2":{"879":1,"2146":1,"2214":2,"2289":2}}],["helper",{"2":{"693":4,"694":5}}],["heads",{"2":{"2258":2}}],["header>",{"2":{"1594":1}}],["headername",{"2":{"1043":1,"1056":2,"1063":1,"1077":1,"1609":3,"1705":2,"1887":1,"1974":2,"2120":2}}],["header",{"2":{"637":1,"1089":1,"1303":1}}],["headersconfigurer",{"2":{"826":1}}],["headers",{"2":{"45":1,"165":4,"356":1,"636":5,"894":4,"1230":1,"1260":1,"1261":1,"1269":1,"1273":1,"1276":2,"1280":1,"1295":1,"1296":1,"1303":1,"1326":1,"1336":1,"1337":1}}],["health",{"2":{"506":2}}],["hress1300",{"2":{"1946":1}}],["href=",{"2":{"1836":1}}],["href",{"2":{"46":1,"105":1,"970":1,"1281":1,"1342":1,"1519":1,"1546":1,"1837":1,"2269":1}}],["hrpayrollmapper",{"2":{"368":1,"374":1}}],["hrpayrollservice",{"2":{"368":1}}],["hrpayrollcontroller",{"2":{"368":1}}],["hr",{"0":{"1968":2},"1":{"1969":2,"1970":2,"1971":2},"2":{"367":2,"368":2,"370":1,"371":1,"374":1,"1665":3,"1690":2,"1775":1,"1817":1,"1962":1}}],["hri5100",{"0":{"1971":1},"2":{"1962":1}}],["hri1000tabcontents",{"0":{"1970":1},"2":{"1962":1}}],["hri1000",{"0":{"1969":1},"2":{"1962":1,"1969":2,"1970":1}}],["hri",{"0":{"526":2,"1968":1},"1":{"1969":1,"1970":1,"1971":1},"2":{"127":1,"441":2,"523":2,"526":1,"556":2,"1962":1}}],["hrmaster",{"2":{"122":1,"249":1,"494":1,"658":1}}],["hra1600",{"2":{"71":2,"756":1}}],["html에서",{"2":{"1836":1}}],["htmlstring",{"2":{"970":1}}],["htmlinput",{"2":{"961":1}}],["htmlbody",{"2":{"693":2,"696":2}}],["html",{"0":{"74":1,"693":1},"2":{"62":1,"74":4,"144":1,"174":1,"175":1,"211":1,"221":1,"422":1,"506":1,"542":1,"598":1,"670":1,"680":1,"688":1,"693":1,"701":1,"704":2,"761":1,"857":2,"869":1,"886":1,"921":1,"936":1,"961":1,"962":1,"969":2,"970":1,"1498":1,"1836":1,"2258":1,"2259":1}}],["httpurlconnection",{"2":{"732":2}}],["httprequest",{"2":{"670":2}}],["httpheaders",{"2":{"165":2,"894":2}}],["httpauthorization",{"2":{"133":1}}],["https를",{"2":{"1487":1}}],["httpsecurity",{"2":{"822":1,"948":1}}],["httpservletresponse",{"2":{"672":1}}],["httpservletrequest",{"2":{"670":2,"672":1}}],["httpstatus",{"2":{"165":1,"894":1}}],["https",{"2":{"45":1,"96":1,"229":1,"245":1,"488":1,"740":1,"825":1,"964":1,"1236":2,"1487":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1}}],["httponly",{"2":{"9":2,"12":1,"13":1,"17":1,"103":2,"110":2,"111":1,"134":1,"357":1,"811":1,"943":1,"1227":1,"1236":1}}],["http",{"0":{"138":1,"348":1,"1759":1,"2065":1},"1":{"2066":1,"2067":1,"2068":1,"2069":1},"2":{"7":1,"20":1,"28":1,"34":1,"41":1,"54":1,"63":1,"90":1,"101":1,"117":1,"144":1,"197":4,"211":1,"217":1,"242":1,"245":2,"308":1,"333":1,"393":1,"413":1,"422":1,"493":3,"506":2,"535":1,"542":1,"598":1,"600":1,"636":4,"667":1,"670":1,"732":1,"753":1,"822":3,"857":2,"866":1,"867":1,"921":1,"948":3,"1194":1,"1391":1,"1492":1,"1540":1,"1685":1,"1696":1,"1736":1,"1741":1,"1756":1,"1773":1,"2035":1,"2053":1,"2066":1,"2116":1,"2151":1}}],["헤더에",{"2":{"1109":1,"1272":1}}],["헤더에서",{"2":{"215":1,"672":1,"803":1,"952":1}}],["헤더바",{"0":{"1107":1},"1":{"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1113":1},"2":{"2018":1,"2029":1}}],["헤더를",{"2":{"964":1}}],["헤더",{"0":{"356":1,"824":1,"827":1,"964":1,"1070":1,"1296":1},"1":{"825":1,"826":1,"827":1},"2":{"11":1,"211":1,"217":2,"581":1,"600":1,"604":1,"636":3,"670":2,"810":1,"917":1,"942":1,"1034":1,"1082":1,"1088":1,"1226":1,"1275":1,"2028":1,"2258":1}}],["저장할",{"2":{"2325":1}}],["저장됨",{"2":{"1229":1}}],["저장소를",{"2":{"1731":1}}],["저장소",{"2":{"1694":1,"1766":1}}],["저장소로",{"2":{"906":1}}],["저장소에서",{"2":{"477":1}}],["저장용",{"2":{"658":1}}],["저장만",{"2":{"94":1}}],["저장하는",{"2":{"2322":1}}],["저장하세요",{"2":{"1252":1}}],["저장하지",{"2":{"1173":1,"1252":2}}],["저장하며",{"2":{"225":1,"629":1}}],["저장하고",{"2":{"65":1,"1377":1}}],["저장하여",{"2":{"9":1,"1301":1}}],["저장됩니다",{"2":{"59":1,"86":1,"1251":1,"1390":1,"2331":1,"2332":1}}],["저장되지",{"0":{"2167":1},"2":{"2167":1}}],["저장되므로",{"2":{"1411":1,"2168":1}}],["저장되는",{"2":{"50":1,"563":1}}],["저장되어",{"2":{"17":1,"1239":1,"1479":1}}],["저장된",{"2":{"45":1,"46":2,"53":1,"56":1,"76":1,"2267":1,"2326":1}}],["저장에",{"2":{"34":1}}],["저장합니다",{"2":{"34":1,"889":1,"1380":1,"1471":1,"2125":1,"2259":1,"2260":1,"2261":1,"2325":1}}],["저장",{"0":{"34":1,"59":1,"65":1,"111":1,"279":1,"321":1,"660":1,"731":1,"818":1,"1297":1,"1301":1},"1":{"66":1,"67":1,"68":1,"69":1,"70":1,"71":1},"2":{"11":1,"12":1,"13":1,"48":1,"50":1,"94":1,"103":4,"111":1,"205":1,"223":1,"266":1,"430":1,"465":1,"594":1,"602":1,"649":2,"651":2,"654":1,"658":2,"661":1,"699":1,"704":1,"731":1,"744":1,"810":1,"811":1,"849":2,"879":1,"891":1,"942":1,"943":1,"1006":1,"1139":1,"1226":1,"1227":1,"1229":1,"1236":1,"1272":2,"1379":1,"1387":1,"1434":1,"1435":1,"1439":1,"1444":1,"1445":1,"1797":1,"1879":1,"1997":1,"2325":1,"2332":1}}],["리소스는",{"2":{"1848":1}}],["리소스를",{"2":{"1527":1,"1536":1}}],["리소스",{"0":{"373":1,"442":1,"746":1,"1527":1,"1670":1},"1":{"374":1,"443":1,"444":1,"445":1,"446":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1},"2":{"70":1,"82":1,"138":1,"437":1,"478":1,"551":1,"552":1,"561":1,"566":1,"715":1,"746":1,"1652":1,"1669":1,"1816":1,"1817":1,"1833":1,"1849":1,"1926":1,"1931":1}}],["리포트에",{"2":{"70":1,"81":1}}],["리포트를",{"2":{"62":1,"65":1,"72":1,"73":1,"74":1,"75":1,"174":1,"175":1,"590":1,"701":1}}],["리포트",{"0":{"62":1,"65":1,"69":1,"72":1,"74":1,"75":1,"77":1,"85":1,"174":1,"176":1,"177":1,"179":1,"180":1,"182":1,"183":1,"184":1,"196":1,"199":1,"224":1,"446":1,"590":1,"701":1,"706":1,"708":1,"709":1,"711":1,"712":1,"721":1,"722":1,"755":1,"757":1,"887":1,"888":1},"1":{"63":1,"64":1,"65":1,"66":2,"67":2,"68":2,"69":2,"70":2,"71":2,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":2,"79":2,"80":2,"81":2,"82":2,"83":2,"84":2,"85":1,"86":1,"87":1,"88":1,"175":1,"176":1,"177":2,"178":2,"179":2,"180":2,"181":1,"182":1,"183":1,"184":1,"185":2,"186":2,"187":2,"188":2,"189":2,"190":2,"191":2,"192":1,"193":1,"194":1,"195":1,"196":1,"197":2,"198":1,"199":1,"200":1,"201":1,"702":1,"703":1,"704":1,"705":1,"706":1,"707":2,"708":2,"709":2,"710":2,"711":1,"712":1,"713":2,"714":2,"715":2,"716":2,"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1,"756":1,"757":1},"2":{"52":1,"65":1,"66":1,"69":1,"78":1,"79":2,"83":1,"130":1,"141":1,"151":1,"168":1,"177":1,"178":1,"179":1,"180":2,"182":1,"185":1,"186":2,"197":1,"199":3,"201":2,"205":1,"294":1,"429":1,"434":1,"437":1,"439":1,"446":1,"538":1,"541":1,"551":1,"554":1,"561":1,"568":1,"590":3,"700":1,"702":3,"704":5,"705":1,"708":1,"709":2,"713":1,"714":1,"721":1,"724":1,"747":1,"756":1,"787":1,"886":3,"887":1,"888":1,"899":1,"955":1}}],["리스트를",{"2":{"2251":1,"2252":1,"2253":1}}],["리스트",{"2":{"32":1}}],["리다이렉트됨",{"2":{"1525":1}}],["리다이렉트됩니다",{"2":{"1287":1,"1390":1,"1525":1}}],["리다이렉트합니다",{"2":{"1262":1}}],["리다이렉트",{"2":{"9":1,"1276":1,"1308":1,"1309":1,"1359":1,"1389":1,"1895":1}}],["리프레시",{"2":{"9":1,"59":1,"103":1}}],["lzstring",{"2":{"2331":1}}],["lzstring을",{"2":{"2331":1}}],["layout",{"2":{"1752":1}}],["layouts",{"0":{"1929":1,"2027":1},"1":{"2028":1,"2029":1,"2030":1},"2":{"1081":1,"1083":1,"1095":1,"1098":1,"1161":2,"1366":2,"1667":1,"1669":1,"1817":2,"1829":2,"1926":1,"1994":1}}],["label>점포코드",{"2":{"1989":1}}],["label>",{"2":{"1989":2}}],["label>거래처명",{"2":{"1989":1}}],["label",{"2":{"1026":1,"1704":3,"2195":2}}],["label=",{"2":{"1011":1,"1012":1,"1027":2,"1035":1,"1036":1,"1040":1,"1704":1}}],["lang=",{"2":{"1581":1,"1588":1,"1600":1,"1609":1,"1638":1,"1641":1,"1710":1}}],["lang3",{"0":{"929":1},"2":{"929":1}}],["langid",{"2":{"46":3,"92":1,"94":2,"103":2,"664":1,"742":1,"1946":1,"1957":1,"1958":2,"1969":1,"1981":1,"2267":2}}],["lang",{"2":{"44":1,"45":1,"197":3,"651":1,"1817":1,"1858":1,"1865":1,"1876":1,"1877":1,"1880":1,"1887":1,"1946":1,"1957":1,"1969":1,"1981":1}}],["lwt1a+ydhh8pkzjez+supdzo1deccgyaakjrjvqscbpxlq3ehpv5qgyvwwhcskl9fnkmmifmjfkiyckwqfqqx",{"2":{"206":1,"244":1,"790":1,"956":1}}],["legacy",{"2":{"1879":1}}],["let",{"2":{"1318":1,"1326":1,"1534":1,"1974":1}}],["lettuceconnectionfactory",{"2":{"270":1,"271":1,"635":3}}],["left",{"2":{"1034":2,"1035":3}}],["leftmargin=",{"2":{"197":1}}],["length",{"2":{"974":1,"1358":1}}],["leave",{"2":{"367":1}}],["level",{"2":{"156":1,"250":1,"993":1}}],["lms",{"2":{"93":2,"737":2}}],["lts",{"2":{"1714":1}}],["lt",{"2":{"30":3,"31":1,"57":1,"601":1,"617":1,"1226":1,"1655":1,"2077":1}}],["like",{"2":{"1788":1}}],["light",{"2":{"1647":1,"1898":1,"2142":1}}],["lifecycle",{"2":{"1613":1}}],["lib",{"0":{"759":1},"2":{"297":2,"437":1,"485":1,"551":1,"747":1,"759":2,"834":1,"1669":1}}],["line",{"2":{"1649":1,"1788":1,"2062":1}}],["linux는",{"2":{"665":1}}],["linux",{"0":{"489":1},"2":{"471":1,"549":1,"1720":1}}],["linux의",{"2":{"249":1,"494":1}}],["links",{"2":{"970":1}}],["linkfileupdateprocess",{"2":{"649":1}}],["linkdeleteprocess",{"2":{"649":1}}],["linkaddprocess",{"2":{"649":1}}],["link",{"2":{"45":6,"46":6,"48":1,"654":1,"1281":6,"1342":6,"1519":6,"1546":6,"1836":1,"2269":6}}],["limiting",{"0":{"804":1,"953":1}}],["limit",{"2":{"25":1,"629":1}}],["listdata",{"0":{"2193":1},"2":{"31":3}}],["list",{"2":{"5":1,"30":2,"31":1,"33":2,"57":1,"178":2,"199":2,"305":2,"326":1,"332":1,"412":1,"418":3,"534":1,"601":1,"648":1,"663":1,"708":2,"986":2,"1609":3,"1790":1}}],["lock",{"2":{"1748":1,"2172":1,"2178":1}}],["location",{"2":{"105":1,"2186":1}}],["localetext",{"2":{"1880":1,"1887":1}}],["locale",{"2":{"1879":1,"1880":2,"1882":2,"1886":3,"1887":2,"1898":3}}],["local",{"2":{"239":1,"443":1,"452":1,"473":1,"551":1,"642":1,"643":1,"750":1,"773":1}}],["localhost",{"2":{"34":1,"144":1,"245":2,"255":1,"257":1,"258":1,"268":2,"422":1,"482":1,"483":1,"484":1,"490":2,"493":3,"506":2,"542":1,"834":1,"835":1,"836":1,"850":2,"857":2,"866":1,"867":1,"921":1,"1168":3,"1171":2,"1194":1,"1202":3,"1492":1,"1695":3,"1696":1,"1734":3,"1736":1,"1741":1,"2151":1}}],["localstorage는",{"2":{"1252":1}}],["localstorage에",{"2":{"1239":1,"1251":1,"1411":1,"2125":1}}],["localstorage",{"2":{"9":1,"11":1,"103":1,"105":1,"111":1,"1236":1,"1251":1,"1629":1,"2086":1,"2087":1}}],["lookupconfig",{"2":{"1020":2}}],["lookupbox",{"0":{"1018":1,"2003":1},"1":{"1019":1,"1020":1},"2":{"1019":1,"1020":1,"1762":1,"1994":1,"2003":1}}],["lookup",{"0":{"1017":1,"2002":1},"1":{"1018":1,"1019":1,"1020":1,"2003":1},"2":{"1019":1,"1020":1,"1994":1,"2003":1}}],["lowermap",{"2":{"604":1}}],["lowerkeysetmap",{"2":{"604":2}}],["lombok",{"0":{"911":1},"1":{"912":1,"913":1,"914":1},"2":{"294":1,"543":1,"912":1}}],["loadinitialdata",{"2":{"2330":1}}],["loadingstore는",{"2":{"1393":1}}],["loadingstore",{"0":{"1392":1,"1912":1},"1":{"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1},"2":{"1016":3,"1272":1,"1273":2,"1275":1,"1294":2,"1394":1,"1399":5,"1609":4,"1613":1,"1615":3,"1660":1,"1706":4,"1758":1,"1784":2,"1817":1,"1909":1,"1912":4,"1920":4,"2001":4,"2123":1}}],["loading",{"0":{"1014":1,"2001":1},"1":{"1015":1,"1016":1},"2":{"1015":1,"1016":1,"1399":1,"1762":1,"1994":1}}],["loadfromindexeddb",{"0":{"2326":1},"2":{"2326":2,"2332":1}}],["loader",{"0":{"1838":1},"2":{"1652":1,"1834":1,"1838":1}}],["loadenv",{"2":{"1185":1}}],["loaddata",{"2":{"1609":3}}],["loadcomponent",{"2":{"1097":1,"1349":1}}],["loadrelateddata",{"2":{"1036":1}}],["loadoptions",{"2":{"1029":2}}],["load",{"2":{"180":1,"199":1,"709":1}}],["logyn",{"2":{"1404":1,"1918":1}}],["loglist",{"2":{"1313":1,"1330":1,"1404":1,"1410":1,"1918":2}}],["logging",{"0":{"574":2,"586":2},"2":{"439":2,"554":2,"598":1,"668":1,"673":1}}],["logger",{"2":{"400":3,"417":2,"529":3,"532":2}}],["logmanager",{"2":{"400":1,"417":1,"529":1,"532":1}}],["logback",{"0":{"158":1,"159":1,"763":1},"1":{"159":1},"2":{"551":2,"747":1,"763":2}}],["logincheck와",{"2":{"104":1}}],["logincheck",{"2":{"103":2,"109":1,"247":2,"347":1,"823":1,"949":1,"950":1}}],["login",{"0":{"1794":1,"1936":1},"2":{"101":1,"103":2,"104":1,"105":3,"106":1,"107":1,"109":1,"247":6,"347":1,"823":2,"949":2,"950":2,"1083":3,"1229":1,"1248":2,"1249":1,"1262":1,"1276":1,"1309":1,"1331":1,"1337":1,"1360":1,"1366":4,"1387":2,"1388":1,"1389":1,"1794":1,"1895":5,"1934":1,"2151":1}}],["logopath",{"2":{"1845":2}}],["logourl",{"2":{"1837":2}}],["logout과",{"2":{"106":1}}],["logout",{"2":{"105":2,"247":1,"1249":1,"1388":1,"1895":1}}],["logo",{"0":{"1837":1},"2":{"65":2,"70":2,"82":2,"189":2,"1162":2,"1652":1,"1834":1,"1837":4,"1844":2,"1845":2,"1847":3}}],["logstore는",{"2":{"1402":1}}],["logstore",{"0":{"1401":1,"1918":1},"1":{"1402":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1},"2":{"1297":2,"1403":1,"1410":5,"1535":3,"1660":1,"1758":1,"1909":1,"1918":4}}],["logstore에",{"2":{"1272":1}}],["logs",{"0":{"564":1},"2":{"34":2,"157":3,"250":1,"507":3,"549":1,"558":1,"763":3,"992":3,"1410":1,"1918":1}}],["log",{"0":{"2197":1,"2278":1,"2294":1},"2":{"22":1,"30":1,"56":1,"57":1,"94":2,"120":1,"121":1,"157":5,"250":1,"507":5,"558":5,"763":5,"992":5,"1035":1,"1036":1,"1063":1,"1279":1,"1313":3,"1330":3,"1341":1,"1361":1,"1385":1,"1434":1,"1516":1,"1523":1,"1554":1,"1566":2,"1585":1,"1593":1,"1635":1,"1707":1,"2220":1,"2224":1,"2278":1}}],["없어요",{"0":{"2056":1}}],["없거나",{"2":{"1358":1}}],["없을",{"2":{"1288":1,"2330":1}}],["없으면",{"2":{"123":1,"1312":1,"1385":1,"2330":1}}],["없이",{"2":{"98":1,"744":1,"1591":1,"1766":1,"2079":1,"2200":1,"2222":1}}],["없는",{"2":{"15":4,"358":1,"949":1,"1533":1}}],["없습니다",{"2":{"9":1,"121":1,"454":1,"1263":1,"1289":2,"1303":1,"1390":1,"1400":1,"1525":1,"1527":1,"1536":2,"1873":1,"2222":1,"2280":1}}],["없음",{"0":{"1527":1,"2184":1,"2185":1,"2186":1},"2":{"9":2,"15":1,"105":3,"121":1,"138":2,"449":1,"1082":1,"1276":1,"1337":1,"2028":1,"2173":1}}],["또는",{"0":{"1715":1},"2":{"9":2,"11":1,"33":4,"75":2,"92":1,"93":1,"111":1,"380":1,"385":1,"394":1,"459":1,"465":1,"471":1,"496":1,"500":1,"502":1,"542":2,"757":1,"810":1,"857":1,"942":1,"1063":1,"1064":1,"1182":1,"1288":1,"1352":1,"1503":1,"1572":1,"1574":1,"1715":1,"1732":1,"1740":1,"1786":1,"1837":1,"1838":1,"1846":1}}],["필터에서",{"2":{"681":1}}],["필터는",{"2":{"670":1,"681":2}}],["필터를",{"2":{"394":1,"583":1,"795":1}}],["필터",{"0":{"218":1,"584":1,"667":1,"669":1,"674":1,"676":1,"795":1,"796":1,"797":1,"800":1,"802":1,"805":1,"951":1,"963":1},"1":{"219":1,"585":1,"586":1,"587":1,"668":1,"669":1,"670":2,"671":2,"672":2,"673":2,"674":1,"675":2,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"796":1,"797":1,"798":2,"799":2,"800":1,"801":2,"802":1,"803":2,"804":2,"805":1,"806":2,"807":1,"952":1,"953":1},"2":{"217":1,"225":2,"226":1,"428":1,"439":4,"540":2,"554":5,"568":1,"581":1,"583":4,"585":1,"612":1,"632":1,"636":1,"638":4,"644":1,"667":1,"668":4,"675":2,"676":1,"681":2,"682":1,"794":1,"819":1,"831":1,"965":1,"1880":1}}],["필터입니다",{"2":{"215":1,"219":1}}],["필터링합니다",{"2":{"2194":1}}],["필터링을",{"2":{"211":1}}],["필터링된",{"2":{"57":1}}],["필터링",{"2":{"57":1,"211":3,"212":1,"670":4,"678":1,"985":1,"986":1,"1150":1,"1766":1,"1945":1,"1969":1,"1981":2,"2099":1,"2119":1}}],["필수값입니다",{"2":{"119":1}}],["필수",{"0":{"66":1,"93":1,"94":1,"458":1,"1168":1,"1713":1},"1":{"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"1714":1,"1715":1,"1716":1},"2":{"22":1,"30":1,"31":3,"32":1,"33":2,"34":1,"44":6,"46":4,"57":2,"66":1,"67":1,"76":1,"93":7,"94":4,"103":3,"104":4,"119":1,"120":3,"121":4,"459":1,"863":1,"1718":1}}],["필드별",{"2":{"2013":1}}],["필드와",{"2":{"1299":1}}],["필드는",{"2":{"1212":1,"1284":1,"1299":1}}],["필드를",{"2":{"1045":1,"1288":1}}],["필드명",{"2":{"1026":2,"1033":2,"1034":1,"2216":2}}],["필드로",{"2":{"138":1,"1060":1}}],["필드들",{"2":{"121":1}}],["필드",{"0":{"1058":1,"1362":1},"1":{"1059":1,"1060":1,"1061":1,"1062":1,"1063":1,"1064":1},"2":{"9":1,"22":1,"30":1,"45":1,"56":1,"57":1,"71":1,"94":1,"103":1,"105":1,"120":1,"197":1,"1212":1,"1299":2,"1763":1,"1899":1,"2013":1}}],["필요할",{"2":{"2284":1}}],["필요하며",{"2":{"1726":1}}],["필요시",{"2":{"1359":1,"1535":1}}],["필요가",{"2":{"1289":2,"1400":1}}],["필요는",{"2":{"1263":1,"1390":1}}],["필요에",{"2":{"1044":1}}],["필요합니다",{"2":{"132":1,"200":1,"830":1,"1536":1}}],["필요한",{"2":{"60":1,"225":1,"354":1,"360":1,"375":1,"387":1,"394":1,"396":1,"547":1,"873":1,"1221":1,"1263":1,"1289":1,"1303":1,"1314":1,"1360":1,"1390":1,"1522":1,"1578":1,"1734":1,"1838":1,"1845":1,"1861":1,"2282":1}}],["필요",{"2":{"7":1,"17":1,"20":1,"28":1,"41":1,"45":2,"46":1,"48":1,"54":1,"63":1,"90":1,"117":1,"225":1,"358":1,"542":1,"629":1,"654":1,"681":1,"699":1,"949":1,"1303":1,"1525":1,"1725":2,"1873":1,"2222":1}}],["e002",{"2":{"2258":1}}],["e001",{"2":{"2258":1,"2268":1}}],["ebadminestimationstatistics",{"0":{"1955":1},"2":{"1942":1}}],["etedurequest",{"0":{"1953":1},"2":{"1942":1}}],["e2e",{"0":{"2148":1},"1":{"2149":1,"2150":1,"2151":1,"2152":1},"2":{"1778":1,"2150":1,"2152":1}}],["erp",{"0":{"1799":1,"1964":2},"1":{"1800":1,"1801":1,"1802":1,"1965":2,"1966":2,"1967":2},"2":{"1665":2,"1690":1,"1775":1,"1800":1,"1801":1,"1817":1,"1962":2}}],["err",{"2":{"1538":2}}],["errstatus",{"2":{"1309":1,"1331":1}}],["errorheader",{"2":{"1994":1}}],["errorhandler",{"2":{"1538":1}}],["error001",{"2":{"94":1}}],["error",{"2":{"30":4,"32":1,"33":1,"37":1,"94":3,"138":1,"400":1,"529":1,"829":1,"830":1,"1029":3,"1258":2,"1273":2,"1276":3,"1279":4,"1286":2,"1288":1,"1302":2,"1308":2,"1309":2,"1310":3,"1311":2,"1312":4,"1313":1,"1314":9,"1317":3,"1318":2,"1319":10,"1330":1,"1331":2,"1332":2,"1333":3,"1334":4,"1337":1,"1338":2,"1341":4,"1387":3,"1409":1,"1516":3,"1523":4,"1525":2,"1526":3,"1527":2,"1528":4,"1529":3,"1530":2,"1532":10,"1533":6,"1534":2,"1535":6,"1536":8,"1537":4,"1538":6,"1554":1,"1556":3,"1567":4,"1568":3,"1609":3,"1614":3,"1702":3,"1785":1,"1994":1}}],["eslintrc",{"2":{"1744":1}}],["eslint를",{"2":{"1744":1}}],["eslint",{"0":{"1744":1},"2":{"1718":1,"2059":1,"2180":1}}],["estimation",{"0":{"1954":1},"1":{"1955":1},"2":{"1664":1,"1817":1,"1942":1}}],["ess000001",{"2":{"1347":1,"1348":1,"1475":1}}],["esswelfareservice",{"2":{"516":1}}],["esswelfaremapper",{"2":{"516":1}}],["esswelfarecontroller",{"2":{"516":1}}],["essauthservice",{"2":{"516":1}}],["essauthmapper",{"2":{"516":1}}],["essadminservice",{"2":{"516":1}}],["essadminmapper",{"2":{"516":1}}],["essadmincontroller",{"2":{"516":1}}],["ess와",{"2":{"454":1}}],["esscomutil",{"2":{"516":1}}],["esscomservice",{"2":{"388":1,"516":1}}],["esscomcontroller",{"2":{"388":1,"421":1,"449":1,"516":1,"859":1}}],["esscommapper",{"2":{"305":1,"307":1,"308":1,"332":1,"333":1,"388":1,"516":1,"752":1,"753":1}}],["esslogincontroller",{"2":{"388":1,"516":1}}],["ess",{"0":{"142":1,"388":1,"440":2,"515":1,"555":2,"1664":1,"1689":1,"1803":1,"1940":1},"1":{"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"1804":1,"1805":1,"1806":1,"1807":1,"1808":1,"1809":1,"1810":1,"1941":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"2":{"100":1,"116":1,"128":1,"130":2,"145":1,"157":2,"305":1,"307":1,"308":1,"329":1,"333":1,"370":1,"371":1,"388":2,"407":1,"408":1,"431":1,"434":2,"437":2,"440":1,"444":2,"449":1,"451":2,"454":2,"507":2,"516":1,"545":1,"551":4,"555":1,"558":3,"752":2,"753":1,"763":2,"910":1,"992":2,"1099":1,"1347":1,"1348":3,"1368":1,"1370":2,"1475":1,"1560":1,"1598":2,"1599":2,"1603":1,"1606":1,"1607":2,"1622":1,"1625":1,"1626":2,"1664":1,"1679":1,"1680":1,"1699":2,"1700":1,"1774":1,"1775":1,"1804":1,"1806":1,"1807":1,"1808":1,"1809":1,"1810":1,"1817":3,"1853":1,"1855":1,"1858":2,"1864":1,"1941":1,"1942":1,"1946":1,"1957":1,"1958":1,"2292":1}}],["edge",{"2":{"1719":1}}],["education",{"0":{"1952":1},"1":{"1953":1},"2":{"1664":1,"1817":1,"1942":1}}],["edit",{"2":{"1435":1}}],["editable",{"2":{"1043":1,"1057":1,"1077":1}}],["echarts",{"0":{"2072":1,"2102":1},"2":{"1685":1,"1773":1,"2072":1,"2102":1}}],["econnaborted",{"2":{"1286":1,"1310":1,"1333":1,"1529":1}}],["eclipse로",{"2":{"501":1}}],["eclipse",{"0":{"501":1},"2":{"460":1,"466":1}}],["event=",{"2":{"1592":1}}],["event",{"2":{"1072":8,"1440":1,"2146":1}}],["element",{"2":{"1574":1}}],["elements",{"2":{"970":1}}],["else",{"2":{"9":1,"94":1,"1279":1,"1298":1,"1299":1,"1314":2,"1319":1,"1341":1,"1360":1,"1516":1,"1523":1,"1532":1,"1554":1,"1609":1}}],["euflzxie8snhylkutuaclfkjlec+1qqib3wkbghl+wk8raodlimsaqgbdofomc",{"2":{"206":1,"244":1,"790":1,"956":1}}],["embed",{"2":{"2112":1,"2135":1}}],["emitted",{"2":{"2146":1}}],["emit",{"2":{"1584":1,"1588":1,"1613":1}}],["emits",{"0":{"1584":1},"2":{"1588":1,"1613":1}}],["email",{"2":{"92":1,"93":1,"171":1,"235":1,"690":1,"696":1,"1278":1}}],["empty",{"2":{"2156":1}}],["empname",{"2":{"1609":1,"1974":1}}],["empcode",{"0":{"2268":1},"2":{"1609":1,"1946":1,"1957":1,"1958":2,"1974":1,"2025":1,"2268":1}}],["employee",{"2":{"1609":3,"1664":1,"1689":1,"1864":1,"1941":1}}],["employeelist",{"2":{"1347":2,"1348":3,"1475":1}}],["empimg",{"2":{"119":1,"122":1,"249":1,"494":1,"658":1}}],["emp",{"2":{"65":1,"68":1,"84":2,"119":5,"122":2,"191":1,"224":1,"249":1,"494":1,"658":1,"1946":1,"1957":1,"1969":4,"2025":1}}],["enter=",{"2":{"1989":2}}],["entries",{"2":{"1299":1}}],["eng",{"2":{"1879":4,"1882":1,"1884":1,"1885":1,"1886":1}}],["engine",{"2":{"197":1}}],["envvite",{"2":{"1171":1,"1172":1,"1202":1,"1695":1}}],["env",{"0":{"1165":1,"1171":1,"1172":1,"1674":1,"2040":1},"1":{"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1172":1,"1173":1},"2":{"1166":1,"1167":4,"1168":1,"1169":1,"1185":1,"1189":3,"1200":3,"1202":1,"1507":1,"1510":1,"1652":1,"1695":1,"1726":1,"1734":2,"1735":4,"1749":1,"1776":1,"1816":1,"1845":1,"2179":1}}],["environment",{"2":{"459":1}}],["en",{"2":{"308":1,"333":1,"413":1,"535":1,"753":1}}],["enabled",{"2":{"869":1}}],["enablewebsecurity",{"2":{"636":1}}],["enable",{"2":{"171":1,"690":1}}],["encode",{"2":{"663":1}}],["encodeuricomponent",{"2":{"45":1}}],["encoding",{"2":{"242":1,"974":1}}],["encoding=",{"2":{"197":1,"308":1,"333":1,"413":1,"535":1,"753":1}}],["encryptbinary",{"0":{"1217":1,"2233":1},"2":{"1212":1,"1299":1,"2233":1}}],["encryptobject",{"0":{"1215":1,"2231":1},"2":{"1211":1,"1212":1,"1220":2,"1298":1,"1299":1,"2231":1}}],["encrypteddata",{"2":{"1212":2,"1299":2}}],["encrypted",{"2":{"205":2,"206":2,"223":4,"595":2,"609":2,"786":2,"789":2,"955":2,"956":2,"1220":2,"2231":2,"2232":1,"2233":1}}],["encrypt",{"2":{"103":2,"205":1,"206":1,"223":1,"595":1,"609":1,"786":1,"789":1,"955":1,"956":1,"1209":1,"1211":1,"1219":1,"1240":1,"1243":1,"1244":1,"1246":1,"1250":1,"1273":1,"1283":1,"1298":1,"1454":1,"2234":1}}],["endpoint",{"2":{"400":2,"529":2,"996":1,"1279":1,"1311":1,"1314":1,"1317":1,"1318":1,"1338":1,"1341":1,"1409":1,"1515":2,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":2,"1536":1,"1537":1,"1538":1,"1551":1,"1556":1,"1567":1,"1614":1,"1702":1,"1785":1,"2069":1}}],["end",{"2":{"33":2,"71":1,"1033":1,"1778":2,"2149":2}}],["exists",{"2":{"896":1}}],["execute",{"2":{"872":1}}],["executeprocedure",{"2":{"178":1,"199":1,"318":1,"390":2,"417":1,"418":1,"593":1,"601":2,"704":1,"707":1,"846":1}}],["expect",{"2":{"2146":2,"2151":2,"2156":6,"2157":1}}],["expirydate",{"2":{"933":1}}],["expires",{"2":{"636":1}}],["exposedheaders",{"2":{"637":1}}],["export해야",{"2":{"2282":1}}],["export",{"2":{"1538":1,"1629":1,"1788":1,"1879":1,"1883":1,"1893":2,"1898":1,"1904":1,"1905":2,"1921":1,"1922":1,"2087":1,"2282":1}}],["exportreport",{"2":{"180":1,"199":1,"710":1}}],["exporter",{"2":{"180":4,"199":4,"710":4}}],["ex",{"2":{"636":3}}],["excludeduris",{"2":{"636":1,"822":1,"948":1}}],["excluded",{"2":{"247":2,"358":2,"394":1,"542":1,"823":1,"949":1,"950":1}}],["exceptionhandling",{"2":{"636":1}}],["exception",{"2":{"199":1,"400":1,"529":1,"600":2,"617":1,"625":1,"626":1,"996":1}}],["excel로",{"2":{"2258":1,"2259":1,"2260":1,"2261":1}}],["exceljs",{"0":{"2105":1,"2262":1},"2":{"1548":3,"1685":1,"2132":1,"2262":3}}],["exceljs를",{"2":{"1548":1,"2256":1}}],["exceldown",{"2":{"75":1,"183":1,"704":1,"722":1,"1435":1}}],["excel",{"0":{"75":1,"183":1,"722":1,"1548":1,"2104":1,"2132":1,"2255":1},"1":{"2105":1,"2106":1,"2256":1,"2257":1,"2258":1,"2259":1,"2260":1,"2261":1,"2262":1,"2263":1},"2":{"62":1,"75":3,"174":1,"175":1,"294":1,"429":1,"541":1,"701":1,"704":1,"722":2,"878":1,"879":1,"882":1,"883":1,"886":1,"1548":1,"1685":1,"1766":3,"1773":1,"2106":1,"2132":1,"2256":1,"2270":1}}],["extracttoken",{"2":{"672":1}}],["extensions",{"2":{"1787":1,"1790":1}}],["extension",{"0":{"1787":1},"1":{"1788":1,"1789":1,"1790":1},"2":{"466":1,"551":1}}],["extends",{"2":{"370":1,"400":1,"421":1,"451":1,"529":1,"600":1,"616":1,"626":1,"648":1,"672":1,"704":1,"728":1,"859":1}}],["ext",{"2":{"45":2,"46":3,"50":1,"651":1,"652":1,"664":1}}],["example",{"2":{"45":1,"92":1,"172":1,"698":1,"879":1,"1172":2,"1278":1,"2087":2}}],["examplestore",{"2":{"2087":1}}],["examples",{"0":{"0":1,"1787":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"1788":1,"1789":1,"1790":1}}],["e",{"2":{"22":1,"30":1,"31":1,"45":1,"94":1,"103":1,"120":1,"121":1,"137":1,"352":1,"400":3,"403":1,"529":3,"530":1,"600":2,"626":1,"651":1,"829":1,"830":1,"1949":1,"2025":1}}],["eyjzdwiioijvu0vsmdaxiiwidg9rzw5fdhlwzsi6imfjy2vzcyisimlhdci6mtcwnda2ndgwmcwizxhwijoxnza0mdy1nzawfq",{"2":{"9":1}}],["eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9",{"2":{"9":1,"59":1,"103":1,"817":1,"1382":1}}],["jum",{"2":{"1981":3,"1989":1}}],["juniversalchardet",{"0":{"971":1},"1":{"972":1,"973":1,"974":1},"2":{"972":1}}],["junit을",{"2":{"562":1}}],["job",{"2":{"1969":2}}],["jsexport",{"2":{"1788":1}}],["js를",{"2":{"1514":1}}],["js는",{"2":{"1267":1,"2200":1}}],["js의",{"2":{"1211":1,"1230":1,"1256":1,"1292":1,"1306":1,"1323":1,"1390":2,"1400":1,"1407":1,"1522":1,"1707":1,"1885":1,"2234":1}}],["jsx",{"2":{"1199":1,"2083":2}}],["js에서",{"2":{"1639":1,"1840":1,"1846":1,"1893":1,"1904":2,"2067":1,"2094":1,"2190":1,"2237":1,"2265":1,"2282":3,"2283":1,"2287":1,"2301":1,"2313":1}}],["js에",{"2":{"1197":1,"1365":1,"1602":1,"1621":1,"1905":1,"2090":1,"2128":1}}],["jsconfig",{"0":{"1163":1,"1675":1,"2041":1},"2":{"1160":1}}],["js와",{"2":{"1160":1,"1715":1}}],["js",{"0":{"1656":1,"1657":1,"1673":1,"1714":1,"1732":1,"1861":1,"1862":1,"1871":1,"1872":1,"1879":1,"1880":1,"1893":1,"1895":1,"1896":1,"1898":1,"1899":1,"1900":1,"1901":1,"1903":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1986":1,"1987":1,"2039":1,"2043":1,"2044":1,"2045":1,"2199":1},"1":{"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2222":1,"2223":1,"2224":1,"2225":1,"2226":1,"2227":1},"2":{"1016":1,"1029":1,"1072":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":2,"1176":1,"1188":1,"1209":1,"1219":1,"1220":1,"1233":1,"1242":1,"1250":1,"1268":1,"1278":1,"1317":1,"1378":1,"1382":1,"1385":1,"1387":2,"1388":1,"1389":1,"1394":1,"1399":1,"1403":1,"1410":1,"1414":1,"1420":1,"1423":1,"1426":1,"1428":1,"1432":1,"1434":1,"1438":1,"1440":1,"1443":1,"1445":1,"1448":1,"1454":1,"1457":1,"1460":1,"1463":1,"1464":1,"1468":2,"1472":1,"1475":1,"1480":1,"1515":1,"1535":1,"1538":1,"1562":1,"1570":2,"1609":2,"1613":1,"1630":1,"1632":1,"1635":1,"1652":3,"1659":2,"1660":8,"1661":1,"1676":2,"1700":1,"1702":1,"1706":2,"1714":2,"1728":2,"1732":2,"1755":1,"1766":1,"1777":1,"1816":1,"1817":16,"1820":2,"1822":1,"1827":2,"1828":1,"1830":2,"1838":1,"1846":1,"1853":2,"1855":1,"1858":2,"1861":2,"1877":2,"1880":1,"1887":1,"1891":10,"1898":3,"1904":4,"1905":3,"1909":8,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":2,"1921":1,"1926":1,"1958":1,"1978":2,"1986":1,"2001":1,"2069":1,"2087":1,"2124":1,"2156":2,"2157":1,"2201":1,"2272":1,"2273":1,"2274":1,"2282":1,"2283":1,"2284":1,"2323":1,"2325":1}}],["jsoup",{"0":{"967":1},"1":{"968":1,"969":1,"970":1},"2":{"968":1,"970":4}}],["jsondata",{"0":{"2195":1},"2":{"2005":2}}],["jsonsitecode",{"2":{"1973":1}}],["jsonserializer",{"2":{"277":3}}],["json에",{"2":{"1733":1,"1744":1,"1745":1}}],["jsonobject",{"2":{"732":2}}],["jsonmultifileupload",{"2":{"43":1,"45":1,"648":3,"663":1}}],["json",{"0":{"45":1,"866":1,"930":1,"939":1,"1163":1,"1211":1,"1672":1,"1675":1,"2038":1,"2041":1},"1":{"931":1,"932":1,"933":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1},"2":{"9":4,"22":3,"30":3,"31":3,"32":5,"33":7,"34":2,"36":1,"44":1,"45":5,"46":1,"51":1,"56":2,"57":2,"65":1,"71":1,"79":1,"81":1,"82":1,"83":1,"84":1,"92":1,"94":2,"103":5,"104":1,"105":2,"106":1,"107":1,"119":1,"120":3,"121":3,"136":1,"137":1,"139":2,"186":1,"188":1,"189":1,"190":1,"191":1,"211":1,"349":1,"351":1,"352":1,"393":1,"402":1,"403":1,"530":2,"600":2,"623":2,"635":1,"651":2,"663":2,"665":1,"670":2,"732":1,"801":1,"808":1,"817":1,"829":1,"830":1,"866":1,"869":2,"904":1,"923":1,"996":1,"1160":1,"1163":1,"1224":1,"1269":1,"1280":1,"1518":1,"1543":1,"1652":1,"1748":1,"1816":1,"1891":1,"2172":1,"2178":1,"2195":1,"2196":1,"2331":1}}],["jsr310",{"2":{"923":1}}],["jmimemagic",{"0":{"898":1},"2":{"898":2}}],["jdk",{"2":{"459":2}}],["jdbcurl",{"2":{"634":1}}],["jdbctype=cursor",{"2":{"310":1,"335":1,"336":1}}],["jdbctype=varchar",{"2":{"310":1,"311":1,"335":1,"336":1,"337":1}}],["jdbc",{"0":{"485":1},"2":{"255":3,"257":3,"258":2,"293":4,"462":2,"463":1,"464":1,"482":3,"483":3,"484":2,"485":1,"551":2,"759":4,"834":6,"835":4,"836":2}}],["jxlsview",{"2":{"883":2}}],["jxls",{"0":{"880":1},"1":{"881":1,"882":1,"883":1},"2":{"429":1,"541":1,"543":1,"598":1,"881":2}}],["jjwt",{"2":{"294":3,"780":1,"931":1,"932":3,"940":1}}],["jehbfpymo3bc6yydl226shgx0h3",{"2":{"206":1,"244":1,"790":1,"956":1}}],["jpg",{"2":{"122":1,"660":1}}],["jpeg",{"2":{"119":1}}],["jpsessioninfo에서",{"2":{"114":1}}],["jpsessioninfo",{"2":{"103":1}}],["jrpdfexporter",{"2":{"180":2,"199":2,"710":2}}],["jremptydatasource",{"2":{"180":1,"199":1,"709":1}}],["jrbeancollectiondatasource",{"2":{"179":2,"197":1,"199":2,"708":2}}],["jrxmlloader",{"2":{"180":1,"199":1,"709":1}}],["jrxmlstream",{"2":{"180":2,"199":2,"709":2}}],["jrxml",{"2":{"66":2,"85":1,"177":2,"180":2,"195":1,"199":1,"446":1,"551":1,"709":2,"711":2,"756":3,"757":2,"887":1}}],["jr",{"0":{"69":1,"71":1},"2":{"65":5,"66":2,"69":3,"70":6,"71":5,"72":1,"79":5,"81":1,"82":1,"83":1,"85":1,"179":2,"182":2,"183":1,"186":5,"188":1,"189":1,"190":1,"197":1,"199":1,"224":1,"708":2,"714":3,"715":2,"716":2,"721":2,"722":1}}],["jar",{"2":{"297":1,"462":1,"485":1,"551":1,"759":2,"834":1}}],["jackson",{"0":{"922":1},"1":{"923":1,"924":1},"2":{"294":1,"932":2}}],["javabean",{"2":{"981":1}}],["javatimemodule",{"2":{"924":1}}],["javatype=java",{"2":{"310":1,"335":1,"336":1}}],["javaimport",{"2":{"898":1,"970":1,"974":1,"982":1,"986":1}}],["javamailsender",{"0":{"692":1},"2":{"692":1,"693":1}}],["javamap",{"2":{"179":1,"280":1,"281":1,"322":1,"323":1,"418":1,"708":1,"846":1}}],["java에",{"2":{"370":1,"396":2,"407":1}}],["javalist",{"2":{"324":1}}],["javaprivate",{"2":{"804":1,"953":1}}],["javapublic",{"2":{"670":1,"671":1,"672":1,"694":1}}],["javapackage",{"2":{"305":1}}],["javapost",{"2":{"182":1,"183":1,"224":1,"664":1,"721":1,"722":1,"742":1}}],["javagenericjackson2jsonredisserializer",{"2":{"277":1}}],["javafactorybean",{"2":{"264":1}}],["javadatasource",{"2":{"256":1,"834":1,"840":1,"841":1}}],["javastringredisserializer",{"2":{"276":1}}],["javastring",{"2":{"212":1,"678":1,"933":1}}],["javascriptlet",{"2":{"2293":1}}],["javascriptgfvalidateresidentnumber",{"2":{"2317":1}}],["javascriptgfisempty",{"2":{"2315":1}}],["javascriptgfisdate",{"2":{"2221":1,"2316":1}}],["javascriptgffillzeros",{"2":{"2308":1}}],["javascriptgfformidstr",{"2":{"2292":1}}],["javascriptgfformatdatewithsep",{"2":{"2245":1}}],["javascriptgfformatdatetimestring",{"2":{"2241":1}}],["javascriptgfformatdatetime",{"2":{"2240":1}}],["javascriptgfformatdatestring",{"2":{"2207":1,"2239":1}}],["javascriptgfrremovecomma",{"2":{"2307":1}}],["javascriptgfgetround",{"2":{"2310":1}}],["javascriptgfgetnumber",{"2":{"2309":1}}],["javascriptgfgetthreecomma",{"2":{"2306":1}}],["javascriptgfgetcomma",{"2":{"2305":1}}],["javascriptgfmobliephoneformat",{"2":{"2298":1}}],["javascriptgfsetnumber",{"2":{"2304":1}}],["javascriptgfsnaketocamel",{"2":{"2291":1}}],["javascriptgfsavetableasexcel",{"2":{"2259":1}}],["javascriptgfcheckphonenumber",{"2":{"2297":1,"2318":1}}],["javascriptgfcheckphonehyphen",{"2":{"2296":1}}],["javascriptgfcameltosnakeupper",{"2":{"2290":1}}],["javascriptgfconverttimestamp",{"2":{"2247":1}}],["javascriptgfhtmlexceldown",{"2":{"2258":1}}],["javascriptgfdayformat",{"2":{"2249":1}}],["javascriptgfdiffdate",{"2":{"2243":1}}],["javascriptgftoday",{"2":{"2248":1}}],["javascriptgftimestamptodatestr",{"2":{"2246":1}}],["javascriptgftrim",{"2":{"2214":1,"2289":1}}],["javascriptgfnumberformat",{"2":{"2212":1,"2303":1}}],["javascriptsidebarstore",{"2":{"1461":1}}],["javascriptstate",{"2":{"1379":1,"1395":1,"1404":1,"1415":1,"1424":1,"1449":1,"1473":1}}],["javascriptsessionstore",{"2":{"1243":1,"1246":1,"1247":1}}],["javascriptsession",{"2":{"1240":1}}],["javascriptserver",{"2":{"1189":1,"1200":1}}],["javascriptrouter",{"2":{"1358":1,"1360":1,"1361":1}}],["javascriptreturn",{"2":{"1327":1}}],["javascriptresolve",{"2":{"1161":1,"1201":1}}],["javascriptuseloadingstore",{"2":{"1325":1,"1329":1}}],["javascriptuselogstore",{"2":{"1313":1,"1330":1}}],["javascripttry",{"2":{"1279":1,"1314":1,"1341":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1556":1,"1568":1,"1614":1,"1785":1}}],["javascriptawait",{"2":{"2261":1,"2267":1}}],["javascriptaxiosinstance",{"2":{"1273":1}}],["javascriptauthstore",{"2":{"1234":1,"1634":1}}],["javascriptautoimport",{"2":{"1205":1}}],["javascriptcatch",{"2":{"1262":1,"1319":1,"1532":1,"1533":1}}],["javascriptconfig",{"2":{"1300":1}}],["javascriptconst",{"2":{"22":1,"31":1,"56":1,"57":1,"71":1,"72":1,"103":1,"105":1,"120":1,"121":1,"1034":1,"1063":1,"1077":1,"1097":1,"1169":1,"1229":1,"1235":1,"1244":1,"1245":1,"1248":1,"1249":1,"1259":1,"1263":1,"1269":1,"1280":1,"1281":1,"1283":1,"1294":1,"1295":1,"1296":1,"1297":1,"1311":1,"1312":1,"1318":1,"1326":1,"1334":1,"1338":1,"1342":1,"1349":1,"1350":1,"1383":1,"1427":1,"1458":1,"1517":1,"1518":1,"1519":1,"1534":1,"1536":1,"1543":1,"1546":1,"1551":1,"1552":1,"1615":1,"1879":2,"1885":1,"1946":1,"1957":1,"1969":1,"1981":1,"2025":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2205":1,"2208":1,"2209":1,"2210":1,"2216":1,"2218":1,"2231":1,"2232":1,"2233":1,"2234":1,"2242":1,"2244":1,"2251":1,"2252":1,"2253":1,"2260":1,"2268":1,"2269":1,"2294":1,"2326":1,"2330":1,"2331":1,"2332":1}}],["javascriptcomponents",{"2":{"1206":1}}],["javascriptoriginalrequest",{"2":{"1260":1}}],["javascriptpersist",{"2":{"1251":1}}],["javascriptplugins",{"2":{"1199":1}}],["javascriptisrefreshing",{"2":{"1337":1}}],["javascriptif",{"2":{"1212":1,"1213":1,"1258":1,"1261":1,"1286":1,"1298":1,"1299":1,"1301":1,"1308":1,"1309":1,"1310":1,"1311":1,"1331":1,"1332":1,"1333":1,"1336":1,"1338":1,"1554":1,"2204":1,"2220":1}}],["javascriptimport",{"2":{"1209":1,"1220":1,"1233":1,"1242":1,"1278":1,"1317":1,"1382":1,"1426":1,"1434":1,"1440":1,"1445":1,"1460":1,"1468":1,"1475":1,"1515":1,"1535":1,"1547":1,"1548":1,"1629":1,"1630":1,"1632":1,"1639":1,"1838":1,"1840":1,"1841":1,"1842":1,"1846":1,"1861":1,"1879":1,"1880":1,"1886":1,"1893":1,"1898":1,"1904":2,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1922":1,"1958":1,"1986":1,"2001":1,"2069":1,"2124":1,"2146":1,"2147":1,"2151":1,"2156":1,"2157":1,"2262":1,"2283":1,"2325":1}}],["javascriptexport",{"2":{"1185":1,"1366":1,"1895":1}}],["javascriptbuild",{"2":{"1177":1,"1203":1}}],["javascriptwindow",{"2":{"1099":1}}],["javascript에서",{"2":{"17":1}}],["javascript",{"0":{"1564":1},"1":{"1565":1,"1566":1,"1567":1,"1568":1},"2":{"9":1,"30":2,"45":1,"46":1,"76":1,"94":1,"119":1,"1057":1,"1083":1,"1091":1,"1098":1,"1162":1,"1163":1,"1194":1,"1211":1,"1230":1,"1276":1,"1302":1,"1303":1,"1339":1,"1347":1,"1348":1,"1362":1,"1368":1,"1409":1,"1498":1,"1538":1,"1555":1,"1566":1,"1567":1,"1603":1,"1622":1,"1633":1,"1675":1,"1700":1,"1777":1,"1783":1,"1784":1,"1819":1,"1830":1,"1846":2,"1851":1,"1905":1,"1926":1,"1949":1,"2041":1,"2087":1,"2171":1,"2276":1,"2279":1,"2282":1}}],["java",{"0":{"287":1,"438":1,"451":1,"459":1,"553":1,"560":1,"562":1},"1":{"439":1,"440":1,"441":1,"554":1,"555":1,"556":1},"2":{"149":1,"154":1,"163":1,"165":1,"167":1,"172":1,"178":1,"180":1,"197":3,"199":1,"205":1,"206":1,"208":1,"209":1,"214":1,"223":1,"230":1,"234":1,"235":1,"236":1,"260":1,"270":1,"271":1,"273":1,"274":1,"279":1,"287":2,"305":2,"318":1,"321":1,"326":1,"329":1,"332":1,"356":1,"368":9,"370":1,"371":1,"388":4,"390":1,"400":1,"406":4,"407":1,"408":1,"412":1,"417":1,"421":1,"433":1,"434":1,"437":2,"439":5,"451":1,"452":1,"455":4,"459":5,"460":1,"466":1,"468":2,"478":2,"500":1,"501":2,"516":13,"523":9,"529":1,"532":1,"534":1,"538":1,"551":2,"552":2,"554":7,"560":1,"568":1,"570":1,"593":1,"594":1,"595":1,"598":33,"600":1,"601":1,"604":1,"609":1,"614":4,"616":1,"617":1,"625":1,"626":1,"632":6,"634":1,"635":1,"636":1,"637":1,"638":1,"646":2,"648":1,"649":1,"663":1,"668":5,"670":1,"675":1,"684":3,"692":1,"693":1,"696":1,"698":1,"702":3,"704":1,"707":1,"709":1,"710":1,"726":3,"728":1,"729":1,"732":1,"743":1,"786":1,"789":1,"792":1,"793":1,"799":1,"812":1,"813":1,"818":1,"822":1,"825":1,"826":1,"829":1,"830":1,"838":1,"859":1,"861":1,"862":1,"863":1,"864":1,"870":1,"879":1,"883":1,"888":1,"891":1,"894":1,"896":1,"910":1,"914":1,"924":1,"944":1,"945":1,"948":1,"955":1,"956":1,"958":1,"959":1,"961":1,"978":1,"989":1,"996":1}}],["jasper",{"2":{"611":4}}],["jasperfillmanager",{"2":{"180":1,"199":1,"709":1}}],["jasperfonts",{"2":{"86":1,"193":1,"446":1,"551":1,"711":1,"719":1,"756":1,"889":1}}],["jasperforms",{"2":{"66":1,"85":1,"177":1,"180":1,"199":1,"446":1,"551":1,"709":1,"711":1,"756":1,"757":1,"887":1}}],["jasperprint",{"2":{"180":3,"199":3,"709":2,"710":1}}],["jaspercompilemanager",{"2":{"180":1,"199":1,"709":1}}],["jasperdesign",{"2":{"180":1,"199":1,"709":1}}],["jasperreport>",{"2":{"197":1}}],["jasperreports로",{"2":{"704":1}}],["jasperreports",{"0":{"781":1,"884":1},"1":{"885":1,"886":1,"887":1,"888":1,"889":1},"2":{"197":6,"294":1,"429":1,"446":1,"541":1,"543":1,"551":3,"611":2,"756":1,"757":1,"885":1}}],["jasperreports를",{"2":{"62":1,"174":1,"175":1,"590":1,"701":1}}],["jasperreport",{"2":{"75":1,"180":1,"197":2,"199":1,"249":1,"494":1,"709":1}}],["jatomic",{"2":{"33":1}}],["jwts",{"2":{"933":1}}],["jwtauthenticationfilter",{"2":{"636":1}}],["jwt",{"0":{"213":1,"243":1,"355":1,"492":1,"780":1,"802":1,"808":1,"930":1,"939":1,"950":1,"951":1,"1223":1,"1295":1},"1":{"214":1,"215":1,"356":1,"357":1,"803":1,"804":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1,"816":1,"817":1,"818":1,"819":1,"931":1,"932":1,"933":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"952":1,"953":1,"1224":1,"1225":1,"1226":1,"1227":1,"1228":1,"1229":1,"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1},"2":{"6":1,"20":1,"22":1,"28":1,"41":1,"54":1,"63":1,"90":1,"103":2,"117":1,"132":1,"203":1,"214":1,"215":1,"217":1,"226":1,"247":1,"294":1,"358":1,"391":1,"394":1,"428":1,"433":1,"439":2,"492":1,"538":1,"540":3,"543":1,"554":2,"576":1,"581":1,"585":1,"598":2,"603":1,"636":1,"668":1,"672":1,"676":1,"682":1,"769":1,"780":1,"803":1,"807":1,"808":1,"831":1,"849":1,"873":1,"917":1,"932":1,"950":2,"952":1,"965":1,"1224":1,"1253":1,"1265":1,"1267":1,"1272":1,"1273":1,"1290":1,"1377":1,"1380":1,"1391":1,"1657":1,"1680":1,"1758":1,"1760":2,"1794":1,"1798":1,"1862":1,"1911":1,"2068":1,"2095":1}}],["응답합니다",{"2":{"135":1,"530":1}}],["응답에",{"2":{"94":1}}],["응답에서",{"2":{"56":2,"60":1}}],["응답의",{"2":{"22":1}}],["응답을",{"2":{"22":1,"623":1,"667":1,"953":1,"1274":1,"1323":1}}],["응답이",{"2":{"15":1,"1286":1,"1310":1,"1333":1,"1529":1}}],["응답",{"0":{"135":1,"136":1,"137":1,"350":1,"401":1,"530":1,"817":1,"1213":1,"1274":1,"1279":1,"1322":1,"1324":1,"1327":1,"1328":1,"1339":1,"1341":1,"1516":1,"1546":1,"1549":1,"1553":1,"1554":1,"1555":1},"1":{"136":1,"137":1,"351":1,"352":1,"402":1,"403":1,"1275":1,"1276":1,"1323":1,"1324":1,"1325":2,"1326":2,"1327":2,"1328":1,"1329":2,"1330":2,"1331":2,"1332":2,"1333":2,"1334":2,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1340":1,"1341":1,"1342":1,"1343":1,"1550":1,"1551":1,"1552":1,"1553":1,"1554":2,"1555":2,"1556":1},"2":{"9":3,"22":6,"30":3,"31":2,"32":2,"33":3,"34":1,"45":2,"46":3,"56":2,"57":2,"71":2,"72":1,"73":1,"74":1,"75":1,"76":1,"94":3,"103":3,"104":1,"105":3,"106":1,"107":1,"110":1,"119":3,"120":3,"121":2,"379":1,"384":1,"393":1,"600":6,"623":2,"651":1,"652":1,"732":1,"864":2,"872":1,"1208":1,"1213":1,"1256":1,"1267":1,"1279":1,"1282":1,"1290":1,"1304":1,"1306":1,"1319":1,"1321":1,"1323":1,"1339":1,"1390":1,"1522":1,"1532":1,"1540":1,"1657":1,"1759":2,"1760":1,"1769":1,"1862":1,"2068":1,"2094":1,"2095":1,"2109":1,"2161":1}}],["및",{"0":{"242":1,"476":1,"487":1,"709":1,"853":1,"900":1,"938":1,"1694":1,"1760":1,"1779":1,"1875":1,"1992":1,"2074":1},"1":{"477":1,"478":1,"488":1,"489":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1,"901":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"939":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"947":1,"948":1,"949":1,"950":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"961":1,"962":1,"963":1,"964":1,"965":1,"1876":1,"1877":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1887":1,"1888":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1,"2029":1,"2030":1,"2031":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1,"2101":1,"2102":1,"2103":1,"2104":1,"2105":1,"2106":1,"2107":1,"2108":1,"2109":1,"2110":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2116":1},"2":{"9":2,"33":1,"40":1,"73":1,"100":1,"214":1,"221":1,"429":1,"488":1,"539":1,"540":1,"541":1,"542":1,"544":2,"562":1,"603":1,"635":1,"680":1,"852":1,"862":1,"864":1,"937":1,"997":1,"1140":2,"1276":1,"1456":1,"1611":1,"1652":3,"1669":1,"1690":1,"1719":1,"1720":1,"1754":2,"1758":1,"1759":1,"1760":1,"1764":1,"1766":7,"1774":1,"1776":1,"1777":1,"1779":1,"1781":1,"1797":2,"1802":1,"1807":1,"1817":2,"1858":5,"1864":1,"1876":1,"1880":1,"1896":1,"1925":1,"1928":1,"1942":1,"1945":1,"1949":1,"1961":1,"1971":1,"1981":1,"1982":1,"1983":1,"1984":1,"1986":1,"1987":1,"2003":1}}],["13",{"2":{"1681":1,"1683":1,"2076":1}}],["149",{"2":{"2112":1,"2135":1}}],["14",{"2":{"881":2,"2115":1,"2138":1}}],["18px",{"2":{"1641":1,"1710":1}}],["18",{"2":{"459":1,"912":1,"968":1,"1714":1,"1732":1}}],["1704067200000",{"2":{"2246":1,"2247":1}}],["17",{"2":{"433":1,"452":1,"459":6,"460":1,"468":1,"538":1}}],["1단계",{"0":{"367":1},"2":{"1111":1,"1113":1}}],["16px",{"2":{"1600":1,"1609":1,"1641":1,"1710":1}}],["16",{"2":{"197":1,"927":1}}],["168",{"2":{"46":2,"56":2,"59":1,"92":1,"94":1,"103":1,"664":1,"742":1,"2267":1}}],["15",{"2":{"1720":1,"2244":2}}],["150",{"2":{"1609":1}}],["150px",{"2":{"1034":1,"1035":1}}],["1521",{"2":{"257":1,"472":1,"483":1,"835":1}}],["15883391",{"2":{"96":1,"229":1,"740":1}}],["15분~1시간",{"2":{"1226":1}}],["15분",{"2":{"9":1,"11":1,"103":1,"225":1,"810":1,"942":1}}],["11g",{"2":{"463":1,"835":1}}],["11",{"2":{"56":1,"628":1,"931":1,"940":1,"976":1,"1681":1,"1683":1,"1720":1,"2081":1,"2113":1,"2136":1}}],["192",{"2":{"46":2,"56":2,"59":1,"92":1,"94":1,"103":1,"664":1,"742":1,"2267":1}}],["128",{"0":{"205":1,"785":1,"955":1},"1":{"786":1,"787":1},"2":{"203":1,"598":1,"606":1}}],["128로",{"2":{"84":1,"191":1}}],["12",{"2":{"195":1,"464":1,"929":1,"1648":2,"1989":1,"2241":1,"2247":1}}],["1234568",{"2":{"2317":1}}],["123456",{"2":{"2220":2,"2309":1,"2317":2}}],["1234567",{"2":{"1783":1,"2212":1,"2220":2,"2225":1,"2303":1,"2304":1,"2305":1,"2306":1,"2307":1,"2317":1}}],["1234567890",{"2":{"1409":1}}],["1234",{"2":{"73":1,"1949":1,"1999":1,"2212":2,"2296":1,"2297":1,"2298":1,"2303":2,"2304":1,"2318":1}}],["123",{"2":{"45":1,"2308":2,"2310":4,"2318":1}}],["120초",{"2":{"634":1}}],["120000",{"2":{"256":1,"634":1,"840":1}}],["120",{"2":{"34":1,"804":1,"953":1,"1609":1}}],["10초",{"2":{"65":1,"87":1,"200":1,"634":1,"723":1}}],["101",{"2":{"56":1}}],["100px",{"2":{"1043":1,"1077":1}}],["100mb",{"2":{"51":1,"164":2,"242":2,"248":2,"665":1,"892":2}}],["100",{"2":{"46":2,"56":1,"59":1,"92":1,"94":1,"103":1,"664":1,"742":1,"1240":1}}],["1000000",{"2":{"1884":1,"2279":1}}],["10000",{"2":{"256":1,"840":1}}],["1000",{"2":{"22":1,"1240":1,"1318":1,"1534":1,"1914":1,"2005":1,"2268":1}}],["10",{"0":{"1708":1},"1":{"1709":1,"1710":1},"2":{"33":2,"56":1,"59":1,"92":1,"93":1,"94":2,"97":1,"98":1,"197":2,"256":1,"468":1,"634":2,"731":2,"734":1,"738":1,"742":1,"744":1,"834":1,"840":1,"841":1,"1720":2}}],["1의",{"2":{"32":1}}],["1",{"0":{"9":1,"22":1,"30":1,"43":1,"56":1,"65":1,"92":1,"103":1,"109":1,"119":1,"177":1,"383":1,"406":1,"427":1,"439":1,"443":1,"448":1,"451":1,"459":1,"468":1,"476":1,"477":2,"478":1,"480":1,"487":1,"492":1,"496":1,"499":1,"505":1,"509":1,"518":1,"525":1,"554":1,"570":1,"572":1,"579":1,"585":1,"600":1,"616":1,"625":1,"634":1,"648":1,"651":1,"670":1,"686":1,"692":1,"704":1,"707":1,"728":1,"731":1,"749":1,"834":1,"1229":1,"1258":1,"1294":1,"1308":1,"1325":1,"1329":1,"1482":1,"1597":1,"1598":2,"1599":1,"1600":1,"1602":1,"1606":1,"1609":1,"1611":1,"1617":1,"1694":1,"1699":1,"1754":1,"1768":1,"2203":1},"1":{"44":1,"45":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"93":1,"94":1,"477":1,"478":1,"488":1,"489":1,"500":1,"501":1,"1598":1,"1599":1,"1600":1,"2204":1,"2205":1},"2":{"16":1,"22":1,"30":3,"31":3,"32":1,"33":1,"36":2,"45":8,"46":2,"48":1,"51":1,"56":2,"59":1,"65":5,"68":1,"70":2,"71":4,"78":2,"81":3,"83":3,"84":2,"92":2,"94":4,"103":1,"120":1,"121":3,"178":1,"179":1,"185":2,"188":2,"190":3,"191":1,"197":2,"199":2,"224":1,"256":1,"285":1,"300":1,"308":1,"333":1,"341":1,"413":1,"418":1,"466":1,"497":1,"503":1,"535":1,"557":1,"651":2,"652":1,"654":1,"663":2,"664":1,"665":1,"675":1,"676":1,"708":2,"713":3,"716":1,"731":1,"742":2,"753":1,"834":1,"841":1,"912":1,"927":1,"935":1,"968":2,"972":1,"976":1,"980":1,"1318":2,"1326":2,"1534":1,"1613":1,"1648":1,"1685":2,"1704":2,"1705":1,"2066":1,"2071":2,"2085":1,"2093":1,"2101":2,"2112":1,"2114":1,"2120":1,"2135":1,"2137":1,"2193":2,"2194":2,"2196":1,"2204":2,"2209":2,"2212":3,"2242":2,"2244":1,"2267":2,"2279":1,"2303":3,"2304":2,"2305":1,"2306":1,"2307":1}}],["쿠키를",{"2":{"1270":1}}],["쿠키에",{"2":{"1229":1}}],["쿠키에서",{"2":{"9":2,"16":1,"105":1,"113":1,"672":1,"803":1,"816":1,"952":1}}],["쿠키명",{"2":{"134":1}}],["쿠키로",{"2":{"17":1,"110":2,"134":1,"357":1,"1269":1}}],["쿠키가",{"2":{"15":2}}],["쿠키는",{"2":{"9":1,"17":1,"103":1}}],["쿠키",{"0":{"357":1},"2":{"7":1,"9":1,"12":1,"13":1,"15":2,"16":1,"17":2,"103":2,"105":4,"111":1,"114":2,"811":1,"943":1,"1259":1}}],["unit",{"0":{"2310":1}}],["universaldetector",{"2":{"974":3}}],["universalchardet",{"2":{"974":1}}],["unplugin",{"2":{"1576":1,"1589":1,"1680":2,"2079":1,"2083":2,"2200":1}}],["unfoldable",{"0":{"1467":1},"2":{"1458":1,"1463":1,"1464":1,"1917":1}}],["undefined면",{"2":{"1460":1}}],["undefined",{"2":{"1458":2,"1466":1,"1707":1,"2033":1,"2185":1,"2204":2,"2205":1,"2315":1}}],["unsafe",{"2":{"825":1}}],["unauthorized",{"0":{"15":1},"2":{"138":1}}],["ubuntu",{"2":{"459":2,"471":1,"489":1,"1720":1}}],["u29tzvn1cgvyu2vjcmv0s2v5rm9yslbxvc1nevnly3jldetleq==",{"2":{"243":1,"492":1,"946":1}}],["utils",{"0":{"577":2,"1658":1,"1659":1,"1660":1,"1661":1,"1820":1,"1821":1,"1822":1,"1865":1},"1":{"1659":1,"1660":1,"1661":1},"2":{"368":1,"377":1,"388":1,"406":1,"439":1,"440":1,"448":1,"455":1,"514":1,"516":1,"523":1,"554":1,"555":1,"598":1,"604":1,"611":1,"688":1,"1016":1,"1072":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":1,"1205":1,"1209":1,"1219":1,"1220":1,"1233":1,"1242":1,"1250":1,"1317":1,"1365":1,"1378":1,"1382":1,"1385":1,"1387":1,"1388":1,"1389":1,"1394":1,"1399":1,"1403":1,"1410":1,"1414":1,"1420":1,"1423":1,"1426":1,"1428":1,"1432":1,"1434":1,"1438":1,"1440":1,"1443":1,"1445":1,"1448":1,"1454":1,"1457":1,"1460":1,"1463":1,"1464":1,"1468":2,"1472":1,"1475":1,"1480":1,"1535":1,"1538":1,"1562":1,"1602":1,"1609":1,"1621":1,"1628":1,"1630":1,"1632":1,"1635":1,"1652":1,"1700":1,"1706":2,"1817":1,"1830":1,"1858":1,"1861":1,"1869":1,"1876":1,"1877":1,"1880":1,"1887":1,"1890":1,"1891":1,"1904":2,"1905":4,"1908":1,"1909":1,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":2,"1921":1,"1958":1,"2001":1,"2087":1,"2090":1,"2124":1,"2128":1,"2146":1,"2147":1,"2155":1,"2156":1,"2157":1,"2201":1,"2272":1,"2273":1,"2282":1,"2283":1,"2323":1,"2325":1}}],["util",{"2":{"234":5,"305":2,"368":1}}],["utf",{"2":{"165":1,"197":1,"242":1,"308":1,"333":1,"413":1,"535":1,"663":1,"693":1,"694":1,"753":1,"894":1}}],["upgradetopro",{"2":{"1994":1}}],["upgrade",{"2":{"825":1}}],["upper",{"2":{"449":1,"1571":1,"1582":1,"1612":1,"1676":1,"1828":1}}],["uploaduuid",{"2":{"649":1}}],["uploadresult",{"2":{"649":1}}],["uploadpath",{"2":{"163":1,"891":1}}],["uploadfile",{"2":{"163":1,"891":1}}],["upload",{"2":{"163":1,"891":1,"1280":1,"1518":1,"1543":1}}],["updatebmk",{"2":{"121":2}}],["update",{"2":{"31":1,"305":1,"1035":1,"1464":1,"1584":1,"1588":1,"1593":1,"1613":1}}],["uint8array",{"2":{"1212":1,"1217":1,"1299":1,"2233":2}}],["ui에서",{"0":{"872":1},"2":{"144":1,"542":1}}],["ui",{"0":{"144":1,"1667":1,"1684":1,"1761":1,"1770":1,"1992":1,"2139":1},"1":{"1762":1,"1763":1,"1764":1,"1765":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1,"2029":1,"2030":1,"2031":1,"2140":1,"2141":1,"2142":1,"2143":1},"2":{"144":1,"294":1,"422":1,"506":2,"542":1,"856":1,"857":2,"869":2,"872":1,"873":1,"921":2,"1005":1,"1010":1,"1015":1,"1019":1,"1025":1,"1032":1,"1039":1,"1042":1,"1049":1,"1051":1,"1053":1,"1061":1,"1068":1,"1076":1,"1081":1,"1083":1,"1095":1,"1098":1,"1103":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1206":1,"1366":2,"1561":1,"1577":2,"1587":1,"1611":1,"1667":1,"1680":2,"1686":1,"1711":1,"1756":1,"1773":1,"1786":1,"1817":3,"1822":1,"1858":2,"1864":2,"1880":1,"1891":1,"1897":1,"1926":1,"1993":2,"1994":1,"2056":1,"2116":1,"2140":1}}],["u",{"2":{"45":3,"49":1,"651":1,"655":1}}],["uuid는",{"2":{"56":1,"60":1}}],["uuid",{"0":{"13":1},"2":{"9":2,"15":1,"16":1,"45":3,"46":3,"50":1,"56":1,"59":4,"103":2,"105":2,"110":1,"113":1,"134":1,"279":1,"280":1,"281":1,"321":1,"322":1,"323":1,"594":2,"649":3,"651":2,"652":1,"660":1,"664":1,"665":2,"816":1,"818":1,"1445":3}}],["uri를",{"2":{"358":1,"949":1,"950":1}}],["uris에",{"2":{"394":1,"542":1}}],["uris",{"2":{"247":2,"358":2,"823":1,"949":1,"950":1}}],["uri는",{"2":{"28":1,"542":1,"681":1}}],["uri",{"0":{"247":1,"358":1,"823":1,"949":1,"950":1},"2":{"7":1,"101":1,"217":1,"394":1,"636":1,"681":1,"803":1,"952":1}}],["url=",{"2":{"2003":1}}],["url=https",{"2":{"1172":2}}],["url=http",{"2":{"1168":3,"1171":2,"1202":3,"1695":3,"1734":3}}],["urlid는",{"2":{"1370":1,"1607":1,"1626":1}}],["urlid",{"2":{"1347":1,"1350":1,"1352":1,"1475":1,"1606":1,"1625":1}}],["url에서",{"2":{"866":1,"2292":1}}],["urlencoder",{"2":{"663":1}}],["urlencoded",{"2":{"75":1}}],["url>",{"2":{"477":1,"1694":1,"1731":1}}],["url로",{"2":{"70":1,"82":1,"506":1,"857":1}}],["url",{"0":{"347":1,"422":1,"857":1},"2":{"7":1,"20":1,"28":1,"34":3,"41":1,"44":1,"45":2,"46":4,"48":1,"51":1,"54":1,"59":1,"63":1,"65":1,"70":3,"72":3,"82":1,"90":1,"96":1,"101":1,"117":1,"119":3,"120":4,"121":1,"144":1,"189":1,"211":1,"229":1,"255":1,"257":1,"258":1,"482":1,"483":1,"484":1,"634":1,"651":2,"654":1,"665":1,"670":4,"715":1,"729":1,"732":4,"740":1,"834":1,"835":1,"836":1,"921":1,"1161":12,"1169":1,"1189":3,"1200":3,"1201":4,"1276":1,"1281":3,"1311":1,"1338":1,"1342":3,"1409":2,"1519":3,"1535":1,"1546":3,"1606":1,"1625":1,"1726":3,"1837":2,"1845":1,"1957":2,"1969":2,"1981":2,"2268":2,"2269":3}}],["usd",{"2":{"1879":1}}],["usr",{"2":{"460":1}}],["useexamplestore",{"2":{"2087":1}}],["usecustomstore",{"2":{"1922":1}}],["usecontextmenustore",{"2":{"1072":2,"1440":2}}],["usei18n",{"2":{"1882":2,"1884":2,"1886":2}}],["usegrouping",{"2":{"1879":2}}],["usetabstore",{"2":{"1475":2,"1480":2,"2332":1}}],["usebuttonstore",{"2":{"1434":2}}],["usesidebarstore",{"2":{"1460":2,"1463":2,"1464":2,"1468":2,"1917":2}}],["usesnackbar",{"2":{"1317":2}}],["usesessionstore",{"2":{"1209":2,"1219":2,"1242":2,"1250":2,"1273":1,"1283":1,"1296":1,"1454":2,"1784":1,"1914":2,"1958":2,"2034":1,"2234":1}}],["usemystore",{"2":{"1629":1,"1630":2}}],["usemenustore",{"2":{"1297":1,"1350":1,"1420":2,"1468":2,"2034":1}}],["usemodalstore",{"2":{"1126":2,"1140":2,"1151":2,"1157":2,"1426":2,"1427":1,"1428":2,"1915":2}}],["uselogstore",{"2":{"1297":1,"1410":2,"1535":2,"1918":2}}],["useloadingstore",{"2":{"1016":2,"1273":2,"1294":1,"1302":1,"1399":2,"1609":2,"1613":1,"1615":1,"1706":2,"1784":1,"1912":2,"1920":2,"2001":2,"2034":1}}],["useauthstore",{"2":{"1162":1,"1233":2,"1273":1,"1295":1,"1360":1,"1382":2,"1383":1,"1385":2,"1387":2,"1388":2,"1389":2,"1632":2,"1635":2,"1706":2,"1784":1,"1830":1,"1911":2,"1920":2,"1921":2,"2034":1,"2124":2,"2157":2}}],["use",{"2":{"611":1,"1273":1,"1303":1,"1728":1,"1732":1,"1893":2,"1898":1,"1905":1,"1981":3,"2147":1}}],["userprofile",{"2":{"1994":1}}],["userouter",{"2":{"1352":2,"1388":2,"1389":2}}],["user123",{"2":{"1229":1,"1240":1,"1242":1,"1243":1,"1245":1,"2151":1,"2231":1,"2232":1,"2267":1}}],["users",{"2":{"1194":3,"1278":2}}],["userservice",{"2":{"223":1}}],["userdata",{"2":{"223":3}}],["usernamepasswordauthenticationfilter",{"2":{"636":1,"822":1,"948":1}}],["username",{"2":{"171":1,"255":2,"257":2,"258":2,"482":2,"483":2,"484":2,"634":2,"690":1,"834":2,"835":2,"836":2,"914":1,"1240":1,"1242":1,"1245":2,"1250":3,"1571":1,"1582":1,"2204":1,"2205":1,"2226":1,"2290":1,"2291":1,"2319":2}}],["userinput",{"2":{"212":1,"678":1}}],["userimage",{"2":{"119":1}}],["userid",{"2":{"46":3,"56":5,"57":5,"59":2,"92":1,"94":2,"103":2,"214":3,"223":1,"279":1,"321":1,"594":1,"603":2,"664":1,"742":1,"812":2,"813":1,"818":1,"914":1,"933":1,"944":2,"945":1,"1229":1,"1240":1,"1242":1,"1243":1,"1244":2,"1245":2,"1248":2,"1250":2,"1387":2,"1454":2,"1784":2,"1957":2,"2151":1,"2231":1,"2232":1,"2267":2}}],["user002",{"2":{"56":1,"57":2}}],["user001",{"2":{"30":1,"31":2,"45":1,"46":2,"56":3,"57":2,"59":1,"71":1,"92":1,"94":1,"103":3,"104":1,"119":2,"120":2,"121":2,"122":2,"214":2,"601":1,"663":1,"664":1,"721":1,"742":1}}],["useragent",{"2":{"56":3,"59":2,"234":1,"279":1,"321":1,"594":1,"818":1}}],["userlist에",{"2":{"57":1}}],["userlist",{"2":{"30":2,"57":3}}],["user",{"2":{"30":2,"31":4,"44":1,"45":1,"71":1,"92":1,"103":3,"104":7,"109":1,"117":1,"119":2,"120":5,"121":5,"223":4,"234":1,"347":1,"421":1,"601":2,"604":1,"651":1,"663":1,"721":1,"859":1,"914":1,"1817":1,"1926":1,"2205":1,"2290":1,"2291":1}}],["usedynamicstore",{"2":{"1445":2}}],["used",{"2":{"0":1}}],["usedata",{"2":{"0":3}}],["usage",{"2":{"0":1}}],["old",{"2":{"2174":1}}],["onrowclicked",{"2":{"1990":1}}],["onrefreshed",{"2":{"1276":1,"1337":1}}],["ongridready",{"2":{"1974":2,"1990":1}}],["onclick",{"2":{"1572":1}}],["onceperrequestfilter",{"2":{"672":1}}],["on",{"2":{"1572":1}}],["onerror",{"2":{"1538":5}}],["onmounted",{"2":{"1029":2,"1219":2,"1389":2,"1609":2,"1613":2,"1702":1}}],["otf",{"2":{"711":1}}],["override",{"2":{"637":1,"670":1,"671":1,"672":1}}],["obj",{"0":{"2196":1,"2197":1,"2258":1,"2267":1,"2276":1,"2278":1,"2294":1},"2":{"600":2,"2197":2,"2216":1,"2258":5,"2267":4,"2276":1,"2278":1,"2282":1,"2294":2}}],["object를",{"2":{"2278":1}}],["objectmapper",{"2":{"277":1,"924":4}}],["object>>",{"2":{"178":2,"199":2,"305":1,"324":1,"326":1,"332":1,"412":1,"418":2,"534":1,"663":1,"708":2}}],["object>",{"2":{"149":1,"154":1,"165":1,"172":1,"178":2,"179":1,"199":4,"223":3,"236":1,"273":1,"274":1,"279":1,"280":1,"281":1,"305":4,"318":2,"321":1,"322":1,"323":1,"332":1,"390":2,"400":1,"412":1,"417":3,"418":2,"421":1,"529":1,"532":1,"534":1,"570":1,"593":2,"594":2,"601":3,"604":1,"616":1,"617":3,"625":2,"626":1,"635":2,"648":1,"649":2,"696":1,"704":2,"707":2,"708":1,"728":1,"729":1,"818":1,"846":2,"859":1,"883":1,"888":1,"894":1,"978":1}}],["object",{"2":{"30":2,"400":1,"417":1,"529":1,"532":1,"600":5,"601":1,"617":1,"1215":1,"1216":1,"1426":1,"1475":1,"1477":1,"2231":1,"2232":1,"2330":1}}],["os",{"2":{"471":1}}],["ooxml",{"2":{"294":1,"877":1}}],["ojdbc11",{"2":{"293":1,"463":1}}],["operation",{"0":{"862":1},"2":{"421":1,"859":1,"862":1}}],["opentab",{"0":{"1475":1},"2":{"1475":1}}],["opensmstemplate",{"2":{"1157":1}}],["openpagelog",{"2":{"1151":1}}],["openfilelink",{"2":{"1140":1}}],["openmodal",{"0":{"1426":1},"2":{"1126":1,"1140":1,"1151":1,"1157":1,"1426":1,"1915":2}}],["openapprovallist",{"2":{"1126":1}}],["openapi를",{"2":{"853":1}}],["openapi",{"0":{"420":1,"854":1,"865":1,"919":1},"1":{"421":1,"422":1,"423":1,"855":1,"856":1,"857":1,"866":1,"867":1,"920":1,"921":1},"2":{"294":1,"353":1,"395":1,"433":1,"542":1,"543":1,"855":1,"866":1,"920":1}}],["opener",{"2":{"1097":1}}],["openconnection",{"2":{"732":1}}],["openjdk",{"2":{"459":4}}],["open=",{"2":{"314":1}}],["open",{"2":{"71":3,"72":1,"76":3,"704":1,"1099":1}}],["option",{"2":{"1027":3,"1035":3,"1036":2,"1704":3}}],["optionvalue에",{"2":{"1045":1}}],["optionvalue",{"2":{"1026":1,"1033":1,"1043":1,"1077":1}}],["optionlabel과",{"2":{"1045":1}}],["optionlabel",{"2":{"1026":1,"1033":1,"1043":1,"1077":1,"1573":1}}],["optional",{"2":{"240":1,"453":1,"749":1,"1460":1}}],["options=",{"2":{"2174":1}}],["options",{"0":{"826":1,"1883":1,"1921":1},"2":{"217":1,"636":1,"637":1,"964":2,"1027":2,"1029":2,"1035":2,"1036":1,"1043":1,"1077":1,"1538":2,"1591":1,"1704":2}}],["owasp",{"0":{"934":1,"961":1},"1":{"935":1,"936":1},"2":{"211":1,"221":1,"670":1,"680":1,"761":1}}],["octet",{"2":{"165":1,"664":1,"894":1}}],["ok",{"2":{"138":1,"165":1,"894":1}}],["or",{"2":{"1884":1}}],["oriented",{"2":{"905":1}}],["original",{"2":{"2196":3}}],["originalrequest",{"2":{"1258":1,"1260":1,"1261":2,"1276":7,"1308":1,"1311":2,"1313":1,"1330":1,"1332":1,"1336":2,"1337":2,"1338":2}}],["originalmap",{"2":{"604":1}}],["origin",{"2":{"636":2,"637":1,"827":2}}],["origins",{"2":{"245":1,"493":1,"637":1}}],["orm",{"2":{"433":1}}],["oracledriver",{"2":{"257":1,"483":1,"835":1}}],["oracle",{"0":{"257":1,"310":1,"336":1,"463":1,"483":1,"835":1},"2":{"253":1,"257":3,"263":1,"293":1,"319":1,"330":1,"427":2,"444":1,"445":2,"459":1,"463":1,"472":1,"480":1,"483":4,"538":1,"543":1,"551":1,"598":2,"601":1,"634":1,"752":1,"754":2,"774":2,"834":1,"835":6,"843":1,"847":1}}],["ordered",{"2":{"638":1,"675":2,"799":1}}],["ord",{"2":{"45":6,"121":2,"663":1}}],["orgchart",{"0":{"1842":1},"2":{"1637":1,"1834":1,"1842":1}}],["org",{"2":{"45":8,"156":1,"197":1,"250":1,"258":1,"305":1,"308":2,"333":2,"413":2,"484":1,"535":2,"656":1,"753":2,"836":1,"970":2,"974":1,"982":1,"986":1,"993":1,"2047":1,"2049":1,"2051":1}}],["output",{"2":{"1788":1,"1789":1}}],["outputstreamwriter",{"2":{"732":2}}],["outputstream",{"2":{"180":1,"710":1}}],["out",{"2":{"5":1,"872":1,"879":3,"1790":1}}],["off",{"2":{"765":1}}],["of",{"2":{"0":2,"5":1,"663":1,"1299":1,"1787":1,"1790":1,"2185":1}}],["rm",{"2":{"2178":1}}],["rf",{"2":{"2172":1,"2178":1}}],["ri",{"2":{"1649":1,"2062":1,"2064":1}}],["rightmargin=",{"2":{"197":1}}],["ram",{"2":{"1722":1,"1723":1}}],["rawdata",{"2":{"1301":2}}],["rate",{"0":{"804":1,"953":1},"2":{"25":1,"629":1}}],["routes",{"0":{"1895":1,"2043":1},"2":{"1365":1,"1366":1,"1602":1,"1621":1,"1700":1,"1891":1,"1895":1,"2090":1,"2128":1}}],["router의",{"2":{"1655":1}}],["router",{"0":{"1894":2,"2043":1,"2051":1,"2088":1,"2126":1},"1":{"1895":2,"1896":2,"2089":1,"2090":1,"2091":1,"2127":1,"2128":1,"2129":1,"2130":1},"2":{"1205":1,"1249":1,"1262":1,"1276":1,"1309":1,"1331":1,"1337":1,"1350":1,"1352":3,"1357":1,"1358":2,"1361":1,"1365":1,"1388":3,"1389":3,"1602":1,"1621":1,"1661":2,"1683":1,"1700":1,"1773":1,"1817":2,"1822":1,"1865":1,"1891":2,"1896":2,"1904":3,"1906":1,"2051":1,"2089":1,"2090":1,"2091":1,"2116":1,"2127":1,"2128":1,"2130":1}}],["routerview를",{"2":{"1860":1}}],["routerview",{"2":{"1089":1,"1655":1,"1860":1}}],["routerview만",{"2":{"1082":1}}],["rows",{"2":{"1974":2,"1986":1,"1990":1}}],["rowindex",{"2":{"1072":2,"1440":1}}],["rowdata",{"0":{"2261":1},"2":{"1056":2,"1440":1,"1609":3,"1705":2,"1887":2,"2120":2,"2261":2}}],["rowdata=",{"2":{"1056":1,"1609":1,"1705":1,"1887":1,"1974":1,"1990":1,"2120":1}}],["row>",{"2":{"1027":2,"1648":2,"1989":2}}],["row",{"2":{"879":3,"1973":1,"1989":2,"1990":1}}],["rownum",{"2":{"31":5}}],["run",{"2":{"500":2,"501":1,"502":2,"539":1,"750":3,"1180":1,"1181":1,"1182":2,"1482":1,"1489":1,"1503":2,"1509":1,"1617":1,"1696":1,"1736":1,"1738":1,"1739":1,"1740":2,"1741":1,"1743":1,"2063":1,"2152":1,"2158":1,"2174":1}}],["runtime",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"0":1,"5":1,"459":1}}],["r6cbydfxpyudhsgdidi+bmzq0it6rb8nh26gw0czyxpzxvpi6x3frwz",{"2":{"206":1,"244":1,"790":1,"956":1}}],["ryutiazkso0lhhspm9g44ktobcxf5ok7gxfavyg4",{"2":{"206":1,"244":1,"790":1,"956":1}}],["r8im",{"2":{"206":1,"244":1,"790":1,"956":1}}],["rsa로",{"2":{"801":2}}],["rsa",{"0":{"206":1,"244":1,"788":1,"956":1},"1":{"789":1,"790":1},"2":{"203":1,"206":3,"428":1,"575":1,"598":1,"607":1,"789":3,"956":3}}],["render",{"2":{"2146":1}}],["rendertype",{"2":{"1063":1,"1064":1}}],["remix",{"2":{"2064":1}}],["removeallkeyindexeddb",{"0":{"2329":1}}],["removekeyindexeddb",{"0":{"2328":1}}],["removetab",{"2":{"1916":1}}],["removescreendata",{"2":{"1445":1}}],["removesessionkey",{"0":{"1246":1},"2":{"1246":1}}],["removeitem",{"2":{"105":1}}],["remove",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["reg",{"2":{"1981":3}}],["registerplugins",{"2":{"1861":3,"1904":3,"1905":2}}],["register",{"0":{"1796":1},"2":{"1796":1,"1895":1,"1934":1}}],["registermodule",{"2":{"924":1}}],["registration",{"2":{"638":5,"675":10,"799":5}}],["registry",{"2":{"637":2}}],["reactive",{"2":{"1887":1,"1974":1,"1986":1,"2005":1}}],["read",{"2":{"2185":1}}],["ready=",{"2":{"1974":1,"1990":1}}],["readme",{"2":{"1652":1,"1816":1}}],["readonly",{"2":{"1026":1}}],["readline",{"2":{"732":1}}],["reader",{"2":{"732":2}}],["readallbytes",{"2":{"165":1,"894":1}}],["rel=",{"2":{"1836":1}}],["releases",{"2":{"488":1}}],["redirect",{"2":{"1366":1,"1895":1}}],["rediscache",{"2":{"279":1,"280":1,"281":1,"321":1,"322":1,"323":1,"594":2,"818":1}}],["redisconnectionfactory",{"2":{"270":1,"271":1,"273":1,"274":1}}],["redisservice",{"2":{"279":2,"280":1,"281":1,"321":2,"322":1,"323":1,"324":1,"594":3,"818":2}}],["redisstandaloneconfiguration",{"2":{"270":2,"271":2,"635":2}}],["redistemplate을",{"2":{"851":1}}],["redistemplate",{"0":{"272":1,"273":1,"274":1,"851":1},"1":{"273":1,"274":1},"2":{"273":1,"274":1,"580":2,"635":4}}],["redis를",{"2":{"266":1,"906":1}}],["redis에",{"2":{"15":1,"53":1,"56":1,"103":1}}],["redis에서",{"2":{"9":1,"13":1,"16":1,"56":1,"57":1,"105":1}}],["redis",{"0":{"53":1,"56":1,"57":1,"58":1,"266":1,"267":1,"270":1,"271":1,"278":1,"430":1,"465":1,"486":1,"487":1,"490":1,"511":1,"594":1,"783":1,"818":1,"848":1,"1001":1},"1":{"54":1,"55":1,"56":1,"57":1,"58":1,"59":2,"60":1,"61":1,"267":1,"268":2,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":2,"280":2,"281":2,"282":1,"487":1,"488":2,"489":2,"490":1,"849":1,"850":1,"851":1},"2":{"9":1,"12":1,"15":2,"39":1,"57":1,"59":1,"103":1,"111":1,"130":1,"141":1,"251":1,"265":1,"269":1,"282":1,"292":2,"320":1,"390":1,"433":1,"439":1,"465":1,"472":1,"488":4,"489":4,"490":1,"511":3,"538":1,"539":1,"540":2,"544":2,"554":1,"573":1,"580":3,"598":2,"602":1,"632":1,"635":3,"644":1,"769":1,"770":1,"783":1,"1001":2}}],["reject",{"2":{"1273":1,"1276":1,"1302":1,"1310":1,"1311":1,"1312":1,"1333":1,"1334":1,"1337":1,"1338":1,"1435":1}}],["replacement",{"2":{"2082":1}}],["replace",{"2":{"1262":1,"1276":1,"1309":1,"1331":1,"1337":1,"1348":2}}],["repository",{"2":{"477":1,"1694":1,"1731":1}}],["reportservice",{"2":{"888":2}}],["reportparams",{"2":{"199":4}}],["reportelement",{"2":{"197":3}}],["reporttemplate",{"2":{"197":1}}],["report",{"0":{"446":1,"590":1,"756":1},"2":{"65":4,"66":3,"71":6,"72":5,"73":1,"74":1,"75":1,"76":3,"85":2,"86":1,"177":1,"178":1,"180":4,"182":4,"183":4,"193":1,"199":5,"224":4,"247":1,"249":1,"434":1,"437":1,"439":1,"446":1,"494":1,"551":1,"554":1,"568":1,"702":1,"704":8,"705":1,"707":1,"709":4,"711":2,"719":1,"721":5,"722":4,"747":1,"756":3,"757":1,"823":1,"883":1,"887":1,"888":1,"889":1,"949":1}}],["req",{"2":{"829":1,"830":1}}],["requiresauth",{"2":{"1360":1,"1362":1}}],["required",{"2":{"421":1,"648":1,"859":1,"863":1,"1583":1}}],["requestfn",{"2":{"1318":2,"1534":2}}],["requests",{"0":{"1287":1,"1309":1,"1331":1},"2":{"804":1,"825":1,"953":2,"2162":1}}],["requestmatchers",{"2":{"636":1,"822":1,"948":1}}],["requestmapping",{"2":{"400":1,"421":1,"529":1,"600":1,"616":1,"626":1,"648":1,"704":1,"728":1,"859":1}}],["requestmapping으로",{"2":{"384":1}}],["requestmethod",{"2":{"400":1,"529":1}}],["requestbody",{"2":{"165":1,"178":4,"199":4,"318":4,"326":1,"390":4,"400":3,"417":4,"418":4,"421":2,"529":3,"593":4,"601":5,"616":1,"626":1,"704":3,"707":4,"728":2,"732":5,"846":4,"859":2,"894":1}}],["requestparam",{"2":{"163":1,"648":2,"891":1}}],["request",{"2":{"138":1,"149":3,"164":1,"234":2,"248":1,"570":3,"604":1,"626":2,"670":2,"671":1,"672":3,"892":1,"978":3,"1273":1,"1303":1}}],["retryrequest",{"2":{"1318":2,"1534":2}}],["retry",{"2":{"449":1,"1258":1,"1276":2,"1308":1,"1332":1}}],["return",{"2":{"163":2,"165":1,"199":1,"223":1,"270":1,"271":1,"273":1,"274":1,"400":2,"417":1,"529":2,"532":1,"600":2,"616":1,"617":1,"625":1,"626":2,"634":1,"635":2,"636":1,"638":1,"675":2,"704":1,"799":1,"822":1,"870":2,"891":2,"894":1,"924":1,"948":1,"1260":1,"1261":1,"1273":2,"1276":3,"1302":1,"1303":1,"1310":1,"1311":1,"1312":1,"1318":1,"1331":1,"1333":1,"1334":1,"1336":1,"1337":2,"1338":1,"1349":1,"1420":1,"1480":1,"1534":1,"1536":7,"1538":1,"1567":1,"1788":2,"1883":1,"1921":2,"1922":1,"2156":1,"2226":3,"2319":4}}],["ref",{"2":{"1027":3,"1029":3,"1034":2,"1035":6,"1040":2,"1043":3,"1056":2,"1063":1,"1077":3,"1105":1,"1112":1,"1119":1,"1126":2,"1458":2,"1537":1,"1585":2,"1609":3,"1613":2,"1702":2,"1704":3,"1705":3,"1922":2,"2078":3,"2079":1,"2120":2,"2224":1,"2225":1,"2319":1}}],["referer",{"2":{"964":1}}],["referrerpolicyheaderwriter",{"2":{"636":1}}],["referrerpolicy",{"2":{"636":2}}],["referrer",{"2":{"217":1,"636":1,"827":1,"964":1}}],["refresherror",{"2":{"1262":1,"1276":2,"1337":2}}],["refreshtoken이",{"2":{"2181":1}}],["refreshtoken을",{"2":{"1269":1}}],["refreshtoken과",{"2":{"56":1,"60":1}}],["refreshtoken",{"2":{"9":2,"15":1,"16":1,"56":1,"59":2,"103":2,"105":1,"113":1,"134":1,"214":1,"279":1,"321":1,"594":1,"812":1,"816":1,"818":1,"944":1,"1270":1}}],["refresh",{"0":{"12":1,"134":1,"811":1,"943":1,"1227":1,"1259":1,"2166":1},"2":{"7":1,"9":3,"15":1,"16":1,"17":2,"103":1,"110":1,"111":1,"214":2,"225":1,"357":1,"603":2,"803":1,"812":1,"944":1,"952":1,"1224":1,"1229":1,"1231":1,"1236":1,"1255":1,"1259":1,"1262":1,"1760":1,"2168":1}}],["recipient",{"2":{"172":1,"698":1}}],["rev",{"0":{"734":1,"735":1},"2":{"92":2,"93":5,"94":4,"98":1,"731":3,"735":3,"742":2,"743":2,"744":1,"1949":1}}],["residentnumber",{"0":{"2220":1,"2317":1},"2":{"2220":1}}],["resetsubscribers",{"2":{"1276":1,"1337":1}}],["resolve",{"2":{"1261":2,"1276":2,"1318":2,"1336":2,"1534":2,"2184":1}}],["resource>",{"2":{"297":2}}],["resource",{"2":{"178":1,"199":1,"205":1,"206":1,"208":1,"209":1,"214":1,"223":1,"390":1,"417":1,"532":1,"601":1,"604":1,"609":1,"616":1,"617":1,"625":1,"626":1,"648":1,"698":1,"704":1,"728":1}}],["resources",{"0":{"443":1,"444":1,"445":1,"446":1,"561":1},"2":{"65":1,"70":1,"82":1,"85":1,"86":1,"177":1,"189":1,"193":1,"221":1,"239":1,"297":1,"307":1,"374":2,"409":1,"414":1,"434":1,"437":2,"473":1,"478":1,"481":1,"485":1,"490":1,"492":1,"551":1,"552":1,"620":1,"641":1,"642":1,"680":1,"711":1,"719":1,"746":1,"747":1,"759":1,"761":1,"763":1,"765":1,"834":1,"887":1,"889":1}}],["res",{"2":{"829":4,"830":4,"1259":2,"1276":2,"1337":2}}],["resultmap>",{"2":{"310":1}}],["resultmap",{"2":{"310":2}}],["resultmap=resultmap",{"2":{"310":1,"335":1,"336":1}}],["resulttype=",{"2":{"308":1,"310":1,"311":1,"313":1,"314":1,"333":1,"413":1,"535":1,"753":1}}],["result",{"2":{"230":1,"279":1,"281":1,"310":2,"318":1,"321":1,"323":1,"326":1,"390":1,"400":2,"417":2,"418":2,"529":2,"532":1,"593":1,"594":1,"601":1,"704":1,"818":1,"846":1,"2293":6}}],["resultset",{"2":{"310":1,"335":1,"336":1}}],["results",{"0":{"1":1},"1":{"2":1,"3":1,"4":1},"2":{"0":1}}],["restful",{"2":{"904":1}}],["restcontroller",{"2":{"384":1,"400":1,"421":1,"529":1,"600":1,"616":1,"626":1,"648":1,"704":1,"728":1,"859":1}}],["rest",{"0":{"346":1},"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1},"2":{"129":1,"346":1,"367":1,"368":1,"372":1,"377":1,"379":1,"384":1,"393":1,"397":1,"398":1,"448":1,"514":1,"542":1}}],["responsecode",{"2":{"421":2,"859":2,"864":4}}],["responseentity",{"0":{"894":1},"2":{"163":1,"165":2,"400":1,"421":1,"529":1,"600":1,"616":1,"626":1,"648":1,"704":1,"728":1,"859":1,"891":1,"894":2}}],["responsetype",{"2":{"46":1,"72":1,"119":1,"1281":1,"1342":1,"1519":1,"1546":1,"1547":1,"2269":1}}],["response",{"2":{"9":3,"22":3,"30":3,"31":1,"45":1,"46":2,"56":3,"57":3,"71":3,"72":2,"94":3,"103":3,"105":2,"119":2,"120":3,"121":2,"149":1,"570":1,"616":2,"617":2,"626":2,"664":1,"670":2,"671":2,"672":2,"721":1,"722":1,"732":1,"742":1,"883":1,"978":1,"1029":3,"1194":1,"1213":2,"1229":3,"1248":4,"1258":2,"1263":3,"1276":2,"1278":2,"1279":4,"1280":1,"1281":4,"1308":2,"1309":1,"1311":1,"1312":2,"1314":5,"1317":2,"1318":1,"1319":2,"1326":2,"1327":1,"1331":1,"1332":2,"1334":2,"1338":1,"1341":4,"1342":4,"1387":3,"1515":2,"1516":4,"1517":1,"1518":1,"1519":3,"1523":4,"1525":2,"1526":3,"1527":2,"1528":3,"1529":1,"1530":2,"1532":2,"1533":2,"1534":1,"1535":2,"1536":5,"1537":1,"1538":1,"1543":1,"1546":4,"1547":3,"1551":1,"1552":1,"1554":3,"1556":1,"1567":2,"1609":4,"1614":1,"1702":3,"1785":2,"1957":1,"1969":1,"1981":1,"2069":1,"2269":3}}],["=utf",{"2":{"1326":1}}],["==",{"2":{"1313":1,"1330":1}}],["=========|",{"2":{"505":1}}],["===",{"2":{"9":1,"22":1,"30":1,"56":1,"57":1,"71":1,"94":2,"103":1,"105":1,"120":1,"121":1,"1029":1,"1063":1,"1211":1,"1213":1,"1229":1,"1248":1,"1250":1,"1273":1,"1279":1,"1286":1,"1298":1,"1309":1,"1310":1,"1314":2,"1318":1,"1331":1,"1333":1,"1341":1,"1358":1,"1387":1,"1428":1,"1480":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1534":1,"1538":1,"1554":1,"1609":1,"1702":1,"1785":1}}],["=>",{"2":{"1029":2,"1035":1,"1036":1,"1063":1,"1072":1,"1083":2,"1091":1,"1097":1,"1098":1,"1126":1,"1140":1,"1151":1,"1157":1,"1185":1,"1212":1,"1219":1,"1235":1,"1248":1,"1249":1,"1250":3,"1261":2,"1273":2,"1276":2,"1299":1,"1302":1,"1303":1,"1313":1,"1318":3,"1330":1,"1331":1,"1336":2,"1349":1,"1350":2,"1352":1,"1358":1,"1360":1,"1361":1,"1362":1,"1366":4,"1368":1,"1379":1,"1385":1,"1387":1,"1388":1,"1389":1,"1395":1,"1399":1,"1404":1,"1410":3,"1415":1,"1420":2,"1424":1,"1428":1,"1434":1,"1449":1,"1454":1,"1463":4,"1468":2,"1473":1,"1480":3,"1534":3,"1536":1,"1537":1,"1538":2,"1566":1,"1567":1,"1585":2,"1593":1,"1603":1,"1609":2,"1613":3,"1615":1,"1622":1,"1629":2,"1633":1,"1635":3,"1699":1,"1700":1,"1702":2,"1706":2,"1895":2,"1911":1,"1918":1,"1920":2,"1922":3,"1974":1,"2078":1,"2087":2,"2146":3,"2147":3,"2151":1,"2156":3,"2157":3,"2224":1,"2225":1,"2226":1,"2319":1,"2330":1}}],["=",{"2":{"0":1,"9":2,"22":2,"30":3,"31":1,"45":3,"46":4,"56":2,"57":1,"71":2,"72":2,"94":4,"103":2,"105":3,"119":3,"120":2,"121":1,"149":2,"163":2,"165":4,"172":1,"178":4,"179":2,"180":5,"199":12,"205":3,"206":3,"208":2,"209":2,"212":1,"214":5,"223":6,"230":1,"234":4,"235":2,"236":1,"260":3,"270":2,"271":2,"273":1,"274":1,"276":1,"277":1,"279":1,"280":1,"281":1,"308":1,"313":4,"318":2,"321":1,"322":1,"323":1,"324":1,"326":1,"329":3,"333":1,"370":1,"371":3,"390":3,"400":5,"407":1,"408":1,"417":4,"418":3,"421":11,"451":2,"505":1,"529":5,"532":2,"570":2,"593":2,"594":2,"595":2,"600":1,"601":4,"604":3,"609":3,"616":2,"617":5,"625":3,"626":2,"634":5,"635":2,"638":1,"648":2,"649":2,"663":2,"670":2,"672":3,"675":2,"678":1,"692":1,"693":3,"694":2,"696":2,"698":2,"704":2,"707":2,"708":3,"709":4,"710":1,"728":1,"732":6,"753":1,"786":2,"789":2,"792":1,"793":1,"799":1,"804":1,"812":2,"813":3,"818":1,"838":3,"846":2,"859":11,"861":2,"862":2,"863":2,"864":9,"879":5,"883":2,"888":2,"891":2,"894":4,"896":1,"898":2,"910":3,"924":1,"933":1,"944":2,"945":3,"953":1,"955":2,"956":2,"958":1,"959":1,"961":1,"970":3,"974":2,"978":2,"982":1,"986":2,"1016":1,"1020":1,"1027":2,"1029":5,"1034":1,"1035":4,"1036":1,"1040":1,"1043":1,"1056":2,"1063":2,"1072":2,"1077":1,"1097":7,"1099":2,"1105":1,"1112":1,"1119":1,"1126":3,"1140":2,"1151":2,"1157":2,"1169":1,"1185":1,"1194":1,"1209":1,"1211":1,"1212":4,"1213":1,"1219":1,"1220":2,"1229":1,"1230":2,"1233":1,"1235":1,"1242":1,"1244":2,"1245":1,"1248":2,"1249":1,"1250":4,"1259":2,"1260":1,"1261":1,"1263":1,"1269":1,"1273":5,"1276":8,"1278":2,"1279":1,"1280":2,"1281":4,"1283":1,"1294":1,"1295":3,"1296":2,"1297":2,"1298":1,"1299":7,"1300":2,"1301":1,"1303":1,"1311":1,"1312":1,"1313":1,"1314":1,"1317":2,"1318":4,"1326":5,"1330":1,"1334":1,"1336":1,"1337":6,"1338":1,"1341":1,"1342":4,"1349":3,"1350":2,"1352":2,"1358":1,"1360":1,"1366":1,"1382":1,"1383":1,"1385":2,"1387":3,"1388":3,"1389":2,"1399":2,"1410":4,"1420":3,"1426":1,"1427":1,"1428":2,"1434":1,"1440":1,"1445":2,"1454":2,"1458":2,"1460":1,"1463":5,"1464":1,"1468":2,"1475":1,"1480":3,"1515":2,"1516":1,"1517":2,"1518":2,"1519":4,"1523":1,"1525":1,"1526":2,"1527":1,"1528":1,"1529":1,"1530":1,"1533":1,"1534":4,"1535":2,"1536":5,"1537":4,"1538":8,"1543":2,"1546":4,"1547":2,"1548":4,"1551":1,"1552":2,"1556":1,"1566":1,"1567":2,"1583":1,"1584":1,"1585":2,"1588":2,"1593":1,"1609":6,"1613":6,"1614":1,"1615":2,"1629":2,"1630":1,"1632":1,"1633":2,"1635":2,"1699":1,"1702":4,"1704":2,"1705":3,"1706":4,"1707":2,"1783":3,"1784":4,"1785":1,"1837":1,"1845":1,"1861":2,"1879":3,"1880":1,"1882":3,"1884":2,"1885":1,"1886":3,"1887":1,"1893":1,"1895":1,"1898":1,"1904":1,"1911":2,"1912":1,"1914":2,"1915":1,"1917":1,"1918":2,"1920":4,"1921":1,"1922":5,"1946":1,"1949":2,"1957":4,"1958":4,"1969":4,"1974":4,"1981":4,"1986":1,"2001":1,"2005":1,"2025":1,"2069":1,"2078":3,"2087":2,"2120":2,"2124":1,"2146":2,"2147":1,"2157":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":3,"2197":1,"2205":2,"2208":2,"2209":3,"2210":1,"2216":2,"2218":1,"2222":2,"2224":5,"2225":2,"2226":1,"2231":1,"2232":1,"2233":4,"2234":1,"2242":1,"2244":1,"2251":1,"2252":1,"2253":1,"2260":1,"2262":4,"2268":1,"2269":4,"2276":1,"2282":1,"2283":2,"2293":3,"2294":1,"2319":2,"2325":1,"2326":2,"2330":1,"2331":1,"2332":3}}],["fngetdata",{"2":{"1989":2}}],["features",{"2":{"1788":1}}],["fetchdata",{"2":{"1399":1,"1567":1,"1615":1,"1702":2}}],["failed",{"2":{"2184":1}}],["fallbacklocale",{"2":{"1879":1}}],["false면",{"2":{"1460":1}}],["false",{"2":{"96":1,"105":1,"229":1,"648":1,"740":1,"1026":3,"1033":3,"1276":2,"1337":2,"1385":1,"1395":1,"1458":2,"1460":1,"1466":1,"1467":1,"1537":1,"1879":1,"2156":1,"2204":4,"2220":1,"2221":2,"2226":2,"2276":1,"2315":1,"2316":1,"2317":1,"2318":1,"2319":3}}],["faq",{"0":{"2054":1},"1":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"1781":1}}],["favicon",{"0":{"1836":1},"2":{"1652":1,"1834":1,"1836":1}}],["function",{"2":{"1033":1,"1538":1,"1566":1,"1893":1,"1898":1,"1904":1,"1905":2,"2282":1,"2330":1}}],["full",{"2":{"5":1,"1790":1}}],["flatpickr",{"2":{"2113":1,"2136":1}}],["flash",{"2":{"617":1}}],["flex",{"2":{"1644":1}}],["flush",{"2":{"732":1}}],["frameoptionsconfig",{"2":{"636":1,"826":1}}],["frameoptions",{"2":{"636":1,"826":1}}],["framework의",{"2":{"1792":1,"1933":1}}],["framework에서",{"2":{"540":1}}],["framework는",{"2":{"538":1}}],["framework",{"0":{"537":1,"1688":1,"1791":1},"1":{"538":1,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"1792":1,"1793":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1},"2":{"539":1,"1598":1,"1677":1,"1679":1,"1775":1,"1858":1}}],["frame",{"0":{"826":1},"2":{"217":1,"636":1,"825":1,"964":1}}],["frontmatter",{"0":{"4":1},"2":{"0":3,"4":1}}],["fromdate",{"0":{"2210":1,"2243":1},"2":{"2210":1}}],["from",{"2":{"0":1,"256":1,"308":1,"313":1,"314":1,"333":1,"413":1,"535":1,"753":1,"834":1,"1016":1,"1027":1,"1029":2,"1035":1,"1040":1,"1056":1,"1072":1,"1126":2,"1140":1,"1151":1,"1157":1,"1162":3,"1209":1,"1219":2,"1220":1,"1233":1,"1242":1,"1250":2,"1278":1,"1317":1,"1352":1,"1358":1,"1360":1,"1361":2,"1382":1,"1385":1,"1387":2,"1388":2,"1389":3,"1399":1,"1410":1,"1420":1,"1426":1,"1428":2,"1434":1,"1440":1,"1445":1,"1454":1,"1460":1,"1463":2,"1464":1,"1468":2,"1475":1,"1480":1,"1515":1,"1535":1,"1547":1,"1548":2,"1578":1,"1585":1,"1609":4,"1613":2,"1629":1,"1630":1,"1632":1,"1635":2,"1702":2,"1704":1,"1705":2,"1706":2,"1830":2,"1855":1,"1861":4,"1879":1,"1880":2,"1882":1,"1884":1,"1886":1,"1887":1,"1893":2,"1898":5,"1904":4,"1905":1,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":2,"1921":1,"1922":2,"1958":1,"1974":1,"1986":1,"2001":1,"2069":1,"2078":1,"2087":1,"2120":1,"2124":1,"2146":2,"2147":3,"2151":1,"2156":2,"2157":2,"2224":2,"2262":2,"2282":1,"2283":1,"2325":1}}],["footer",{"2":{"1994":1}}],["fonts",{"2":{"1903":1,"1926":1}}],["fontname=",{"2":{"195":1,"197":3}}],["font",{"2":{"195":1,"197":3,"1641":2,"1710":2}}],["found",{"2":{"138":1,"2186":1}}],["foreach>",{"2":{"314":1}}],["foreach",{"0":{"314":1},"2":{"314":1,"1313":1,"1330":1,"1350":1}}],["force",{"2":{"242":1,"1748":1,"2178":1}}],["forbidden",{"2":{"138":1}}],["formid를",{"2":{"2292":1}}],["format=",{"2":{"2006":1}}],["formattedprice",{"2":{"2225":2}}],["formatted",{"2":{"1783":2,"2222":1}}],["formatteddate",{"2":{"1707":1}}],["formdata의",{"2":{"1299":1}}],["formdata를",{"2":{"1284":1}}],["formdata",{"0":{"1212":1,"1284":1,"1299":1,"1543":1},"2":{"45":12,"663":10,"1212":1,"1280":5,"1298":2,"1299":1,"1445":1,"1518":5,"1543":5,"2226":2,"2319":4,"2325":1}}],["form",{"0":{"44":1},"2":{"43":1,"45":1,"75":3,"183":1,"242":1,"651":1,"722":1,"1280":1}}],["for",{"2":{"0":1,"5":1,"1299":1,"1311":1,"1318":1,"1338":1,"1534":1,"1790":1,"2156":1,"2186":1}}],["fcmsysservice",{"2":{"523":1}}],["fcmsysmapper",{"2":{"523":1}}],["fcmsyscontroller",{"2":{"523":1}}],["fcmhriservice",{"2":{"523":1}}],["fcmhrimapper",{"2":{"523":1}}],["fcmhricontroller",{"2":{"523":1}}],["fcmcomutil",{"2":{"523":1}}],["fcmcomservice",{"2":{"523":1}}],["fcmcomcontroller",{"2":{"523":1}}],["fcm",{"0":{"125":1,"143":1,"441":2,"522":1,"556":2,"1665":1,"1690":1,"1799":1,"1960":1,"2271":1},"1":{"126":1,"127":1,"128":1,"523":1,"524":1,"525":1,"526":1,"527":1,"1800":1,"1801":1,"1802":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1,"1973":1,"1974":1,"1975":1,"2272":1,"2273":1,"2274":1,"2275":1,"2276":1,"2277":1,"2278":1,"2279":1,"2280":1,"2281":1,"2282":1,"2283":1,"2284":1,"2285":1},"2":{"125":1,"126":1,"127":3,"130":2,"143":1,"157":2,"249":1,"370":1,"407":1,"431":1,"434":2,"437":2,"441":1,"451":1,"454":3,"494":1,"507":2,"523":1,"545":1,"551":2,"556":1,"558":3,"763":2,"992":2,"1598":2,"1659":1,"1665":1,"1679":1,"1680":1,"1774":1,"1775":1,"1800":1,"1801":1,"1817":4,"1820":1,"1853":1,"1858":2,"1864":2,"1872":1,"1961":1,"1962":1,"1973":1,"1975":1,"2272":2,"2284":1}}],["firefox",{"2":{"1719":1}}],["firebase",{"2":{"1659":1,"1872":1}}],["findstr",{"2":{"2177":1}}],["find",{"2":{"1480":1,"1989":1,"2146":1}}],["finally",{"2":{"1399":1,"1609":1,"1615":1,"1920":1}}],["final",{"2":{"400":2,"417":1,"529":2,"532":1,"804":1,"953":1}}],["finance",{"2":{"367":2,"368":1,"1665":1,"1690":1}}],["fig3300",{"2":{"756":1}}],["field",{"2":{"197":2,"1012":2,"1043":1,"1056":2,"1057":1,"1063":1,"1077":1,"1609":3,"1705":2,"1887":1,"1974":2,"1989":2,"2120":2,"2141":1}}],["fieldname",{"2":{"195":1}}],["fields",{"2":{"59":2}}],["fill",{"2":{"2151":2}}],["fillreport",{"2":{"180":1,"199":1,"709":1}}],["filtered",{"2":{"986":1}}],["filterchain",{"2":{"670":1,"671":1,"672":3}}],["filterregistrationbean",{"2":{"638":3,"675":6,"799":3}}],["filter",{"0":{"584":1,"585":2,"586":2,"587":2},"1":{"585":1,"586":1,"587":1},"2":{"439":1,"554":1,"568":1,"668":1,"670":2,"671":2,"672":1,"673":1,"676":1,"678":1,"1705":1}}],["filelink",{"2":{"1140":1}}],["filelist",{"2":{"45":2,"663":2}}],["fileexists",{"2":{"896":1}}],["fileoutputstream",{"2":{"879":2}}],["filedata",{"2":{"2218":2}}],["filedeleteprocess",{"2":{"649":1}}],["filedownload",{"2":{"46":2,"648":1,"664":1}}],["fileaddprocess",{"2":{"649":2}}],["fileurltopath",{"2":{"1161":6,"1201":2}}],["fileutil",{"2":{"167":3,"896":4}}],["fileupload",{"2":{"122":1,"249":3,"494":3,"658":3}}],["filebytes",{"2":{"165":2,"894":2}}],["filepath",{"2":{"165":3,"167":1,"649":2,"894":3,"896":2}}],["file2",{"2":{"45":1,"663":1}}],["file123",{"2":{"2267":1}}],["file1",{"2":{"45":1,"663":1}}],["filenamestarmatch",{"2":{"1326":4}}],["filename에",{"2":{"1281":1,"1342":1,"1546":1}}],["filename=",{"2":{"46":1,"72":1,"75":1,"76":1,"652":1}}],["filename",{"0":{"2218":1,"2259":1,"2260":1,"2261":1},"2":{"45":2,"46":3,"71":6,"76":3,"163":2,"165":1,"652":1,"664":1,"704":1,"721":1,"891":2,"894":1,"1281":1,"1326":5,"1342":1,"1519":1,"1546":1,"1547":1,"2218":1,"2258":2,"2259":1,"2260":1,"2261":1,"2269":1}}],["file",{"0":{"588":1,"654":1,"1217":1,"2233":1},"2":{"41":1,"43":1,"45":15,"46":2,"48":2,"51":2,"119":1,"163":7,"164":1,"165":5,"248":1,"250":1,"439":1,"554":1,"568":1,"646":1,"648":4,"649":3,"651":3,"663":2,"664":1,"665":1,"694":1,"891":7,"892":1,"894":5,"898":1,"1168":1,"1189":1,"1200":1,"1202":1,"1212":3,"1217":2,"1280":2,"1299":5,"1435":1,"1518":2,"1543":2,"1547":1,"1548":1,"1695":1,"1726":1,"1734":1,"2111":1,"2134":1,"2233":6,"2262":1}}],["filesaver",{"0":{"1547":1},"2":{"1547":2,"1548":2,"2262":2}}],["files",{"0":{"1193":1},"2":{"0":1,"44":1,"45":2,"51":1,"165":1,"648":2,"649":1,"651":1,"663":2,"665":1,"894":1,"1189":1,"1200":1,"1212":1,"1299":3,"1494":1,"2233":1}}],["f",{"2":{"46":4,"652":2,"664":1,"1339":1,"1555":1,"2177":1}}],["vbtn",{"2":{"1898":1}}],["vapp>",{"2":{"1860":2}}],["variables",{"2":{"696":2,"1643":1}}],["val",{"0":{"2205":1,"2244":1,"2279":1,"2292":1,"2305":1,"2306":1,"2307":1,"2310":1},"2":{"2205":2,"2279":1}}],["validateform",{"2":{"2226":1,"2319":1}}],["validatetoken",{"2":{"672":1}}],["validationtimeout",{"2":{"634":1}}],["validationutil",{"2":{"235":3}}],["valkey",{"0":{"465":1,"848":1},"1":{"849":1,"850":1,"851":1},"2":{"433":1,"465":1}}],["valuefield",{"0":{"2192":1,"2216":1},"2":{"2216":1}}],["value++",{"2":{"2078":1}}],["values",{"0":{"2194":1},"2":{"1245":1}}],["value=",{"2":{"648":1,"1027":1,"1035":1,"1036":1,"1464":2,"1704":1}}],["value5",{"2":{"36":1}}],["value4",{"2":{"36":1}}],["value3",{"2":{"36":1}}],["value",{"0":{"277":1,"735":1,"1243":1,"1452":1,"1460":1,"2204":1,"2315":1,"2325":1},"2":{"32":1,"92":1,"93":1,"94":1,"234":1,"400":1,"421":1,"529":1,"604":1,"637":2,"649":1,"678":1,"729":2,"742":1,"743":1,"859":1,"864":1,"982":2,"1012":1,"1029":1,"1035":2,"1036":4,"1063":1,"1097":1,"1126":1,"1299":5,"1303":1,"1460":1,"1537":1,"1585":1,"1591":1,"1593":2,"1609":1,"1630":1,"1702":1,"1704":3,"1707":2,"1783":2,"1882":1,"1886":2,"1914":1,"1917":1,"1922":4,"2156":4,"2195":2,"2204":1,"2222":1,"2225":1,"2260":1,"2261":2,"2276":1,"2283":1,"2319":3,"2325":1,"2331":1}}],["value2",{"2":{"30":2,"31":1,"36":1,"139":1,"349":1,"1515":1,"1517":1,"1551":1,"1552":1,"1592":1,"2293":1}}],["value1^value2^",{"2":{"2293":1}}],["value1",{"2":{"30":2,"31":1,"32":1,"33":1,"36":1,"65":1,"107":1,"139":1,"349":1,"1515":1,"1517":1,"1551":1,"1552":1,"1592":1,"2293":1}}],["visual",{"2":{"1718":1}}],["visible",{"0":{"1466":1},"2":{"1434":1,"1458":1,"1463":1,"1464":1,"1917":1}}],["visitedmenu",{"2":{"1415":1,"1913":1}}],["vitest",{"2":{"2155":1,"2156":1}}],["vitejs",{"2":{"2048":1,"2083":2}}],["vite는",{"2":{"1496":1,"1847":1}}],["vite가",{"2":{"1491":1,"1747":1}}],["vite를",{"2":{"1197":1}}],["vite에서는",{"2":{"1169":1}}],["vite",{"0":{"1196":1,"1673":1,"2039":1,"2048":1,"2080":1},"1":{"1197":1,"1198":1,"1199":1,"1200":1,"1201":1,"1202":1,"1203":1,"1204":1,"1205":1,"1206":1,"2081":1,"2082":1,"2083":1},"2":{"1160":1,"1168":3,"1169":2,"1171":1,"1172":1,"1173":1,"1175":1,"1176":1,"1187":1,"1188":1,"1189":3,"1197":1,"1200":3,"1202":2,"1652":2,"1673":1,"1680":1,"1681":1,"1683":1,"1695":2,"1718":1,"1726":3,"1734":3,"1749":1,"1752":1,"1773":1,"1776":1,"1816":2,"1849":1,"2039":1,"2058":1,"2081":1,"2083":1,"2179":1}}],["vitepress의",{"2":{"1786":1}}],["vitepress",{"2":{"0":2,"1787":1,"1788":1}}],["views",{"0":{"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1823":1,"1864":1},"1":{"1663":1,"1664":1,"1665":1,"1666":1,"1667":1},"2":{"1005":1,"1010":1,"1015":1,"1019":1,"1025":1,"1032":1,"1039":1,"1042":1,"1049":1,"1051":1,"1053":1,"1061":1,"1068":1,"1076":1,"1081":1,"1083":2,"1087":1,"1091":1,"1095":1,"1097":1,"1098":1,"1099":1,"1103":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1206":1,"1348":1,"1349":1,"1362":1,"1366":4,"1368":1,"1370":1,"1560":1,"1561":1,"1577":2,"1587":1,"1598":5,"1599":1,"1603":1,"1607":1,"1622":1,"1626":1,"1652":1,"1699":2,"1700":1,"1794":1,"1795":1,"1796":1,"1801":1,"1806":1,"1807":1,"1808":1,"1809":1,"1813":1,"1817":1,"1858":1,"1895":2,"1934":1,"1942":1,"1962":1,"1978":1,"1986":1,"1993":1,"1994":1,"2056":1,"2146":1,"2147":1}}],["viewer",{"2":{"611":1}}],["view",{"2":{"598":1}}],["volar",{"2":{"1718":1}}],["vo",{"2":{"598":1}}],["void",{"2":{"154":1,"223":1,"637":1,"670":1,"671":1,"672":1,"692":1,"693":1,"694":1,"696":1,"989":1,"996":1}}],["v3",{"2":{"505":1,"866":1,"867":1,"869":1}}],["vs",{"2":{"466":1,"1718":1}}],["vendor",{"0":{"1669":1,"1824":1},"2":{"460":1,"1161":5,"1201":1,"1206":1,"1577":1,"1639":1,"1642":1,"1652":1,"1817":1,"1829":5,"1926":1}}],["version",{"2":{"459":2,"460":2,"1714":1,"1715":2,"1716":1,"1732":1}}],["version>2",{"2":{"927":1}}],["version>23",{"2":{"835":1}}],["version>42",{"2":{"836":1}}],["version>6",{"2":{"759":1}}],["version>1",{"2":{"628":1}}],["version>17",{"2":{"287":1}}],["version>3",{"2":{"286":1,"929":1}}],["version>",{"2":{"285":1,"286":1,"287":1,"628":1,"759":1,"835":1,"836":1,"927":1,"929":1}}],["version>0",{"2":{"285":1}}],["version=",{"2":{"197":1,"308":1,"333":1,"413":1,"535":1,"753":1}}],["vm",{"2":{"459":1}}],["v1",{"2":{"96":1,"229":1,"740":1}}],["v",{"2":{"30":8,"31":4,"32":2,"33":1,"37":1,"65":1,"71":3,"94":3,"103":6,"104":9,"107":1,"109":2,"120":9,"121":18,"601":1,"721":1,"1007":3,"1011":1,"1012":3,"1020":1,"1024":1,"1026":1,"1027":5,"1033":1,"1035":1,"1036":1,"1040":1,"1428":9,"1464":2,"1517":2,"1537":3,"1552":2,"1591":1,"1600":6,"1609":10,"1638":2,"1646":6,"1648":6,"1649":2,"1699":2,"1704":1,"1709":6,"1946":4,"1949":5,"1957":6,"1969":9,"1973":2,"1981":11,"1983":1,"1989":10,"1999":1,"2003":1,"2005":2,"2006":1,"2009":1,"2025":5,"2062":2,"2141":5}}],["vue의",{"2":{"2079":1}}],["vuejs",{"2":{"2047":1,"2049":1,"2051":1}}],["vuejsx",{"2":{"1199":1}}],["vuex의",{"2":{"1680":1,"2086":1}}],["vueuse",{"2":{"1205":1}}],["vuedraggable",{"2":{"2114":1,"2137":1}}],["vuedraggable을",{"2":{"1106":1}}],["vuedevtools",{"2":{"1199":1}}],["vue3",{"2":{"1056":1,"1609":1,"1705":1,"1880":1,"1974":1,"2071":1,"2097":1,"2101":1,"2115":1,"2120":1,"2138":1}}],["vuetifyjs",{"2":{"2050":1}}],["vuetify의",{"2":{"1007":1,"1012":1,"1024":1,"1317":1,"1537":1,"1646":1}}],["vuetify",{"0":{"1007":1,"1012":1,"1537":1,"1645":1,"1709":1,"1897":2,"2045":1,"2050":1,"2139":1},"1":{"1646":1,"1647":1,"1648":1,"1649":1,"1650":1,"1898":2,"1899":2,"1900":2,"1901":2,"2140":1,"2141":1,"2142":1,"2143":1},"2":{"1199":2,"1638":1,"1650":1,"1661":2,"1680":1,"1684":1,"1752":1,"1772":2,"1773":1,"1817":2,"1822":1,"1865":1,"1891":2,"1897":1,"1898":6,"1899":1,"1904":3,"1906":1,"2045":1,"2083":2,"2116":1,"2140":1}}],["vue",{"0":{"1079":1,"1085":1,"1093":1,"1580":1,"1655":1,"1794":1,"1795":1,"1796":1,"1806":1,"1807":1,"1808":1,"1809":1,"1860":1,"1894":1,"1936":1,"1937":1,"1938":1,"1939":1,"1945":1,"1946":1,"1947":1,"1949":1,"1951":1,"1953":1,"1955":1,"1965":1,"1966":1,"1967":1,"1969":1,"1970":1,"1971":1,"1981":1,"1982":1,"1983":1,"1984":1,"1997":1,"1999":1,"2001":1,"2003":1,"2005":1,"2006":1,"2007":1,"2009":1,"2010":1,"2011":1,"2013":1,"2014":1,"2015":1,"2017":1,"2018":1,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2028":1,"2029":1,"2030":1,"2047":1,"2051":1,"2075":1,"2088":1,"2126":1},"1":{"1080":1,"1081":1,"1082":1,"1083":1,"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1,"1094":1,"1095":1,"1096":1,"1097":1,"1098":1,"1099":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1895":1,"1896":1,"2076":1,"2077":1,"2078":1,"2079":1,"2089":1,"2090":1,"2091":1,"2127":1,"2128":1,"2129":1,"2130":1},"2":{"0":1,"1005":1,"1006":1,"1007":1,"1010":1,"1011":1,"1012":1,"1015":1,"1016":1,"1019":1,"1020":1,"1025":1,"1027":2,"1029":2,"1032":1,"1035":2,"1036":1,"1039":1,"1040":2,"1042":1,"1043":1,"1044":1,"1049":1,"1051":1,"1053":1,"1055":1,"1056":1,"1061":1,"1068":1,"1072":1,"1076":1,"1081":1,"1083":2,"1087":1,"1091":1,"1095":1,"1097":1,"1098":1,"1099":1,"1103":1,"1105":1,"1110":1,"1112":1,"1117":1,"1119":1,"1125":1,"1126":2,"1130":1,"1132":1,"1134":1,"1138":1,"1140":1,"1143":1,"1145":1,"1149":1,"1151":1,"1155":1,"1157":1,"1199":3,"1205":2,"1219":2,"1250":2,"1347":1,"1348":3,"1349":1,"1352":2,"1362":1,"1366":4,"1368":1,"1370":1,"1385":1,"1387":1,"1388":2,"1389":3,"1399":1,"1410":1,"1420":1,"1428":2,"1454":1,"1463":2,"1464":1,"1475":1,"1480":1,"1537":1,"1558":1,"1560":1,"1561":1,"1570":1,"1576":1,"1578":2,"1581":1,"1582":1,"1583":1,"1584":1,"1585":2,"1588":1,"1589":1,"1591":1,"1592":1,"1593":1,"1594":1,"1599":2,"1600":1,"1603":1,"1607":1,"1609":2,"1612":1,"1613":2,"1622":1,"1626":1,"1635":2,"1638":1,"1641":1,"1646":1,"1648":1,"1649":1,"1652":2,"1655":1,"1656":1,"1661":1,"1676":1,"1679":1,"1680":3,"1681":1,"1683":2,"1694":1,"1699":2,"1700":1,"1702":2,"1704":2,"1705":2,"1706":1,"1707":1,"1709":1,"1710":1,"1718":1,"1731":1,"1752":1,"1765":3,"1773":2,"1777":1,"1778":1,"1794":1,"1795":1,"1796":1,"1806":1,"1807":1,"1808":1,"1809":1,"1816":1,"1817":2,"1822":1,"1826":2,"1837":2,"1844":1,"1845":1,"1855":1,"1857":1,"1858":2,"1860":1,"1861":4,"1865":1,"1877":1,"1879":2,"1882":2,"1883":1,"1884":2,"1885":1,"1886":1,"1887":1,"1888":1,"1890":1,"1891":1,"1895":2,"1906":1,"1920":1,"1921":1,"1922":1,"1934":6,"1942":13,"1945":1,"1949":1,"1962":6,"1969":1,"1973":1,"1974":1,"1978":4,"1981":1,"1983":1,"1989":1,"1990":1,"1994":34,"1997":1,"1999":1,"2003":1,"2005":1,"2006":1,"2009":1,"2014":1,"2062":1,"2071":1,"2072":2,"2076":1,"2077":1,"2078":3,"2083":4,"2089":1,"2102":1,"2112":2,"2113":1,"2115":1,"2116":1,"2120":1,"2127":1,"2135":1,"2136":1,"2138":1,"2145":1,"2146":2,"2147":2,"2155":1,"2222":1,"2224":1,"2225":1,"2226":1,"2319":1}}],["mfile",{"2":{"649":1}}],["mm",{"2":{"558":2,"2006":1,"2241":2,"2246":1,"2247":2}}],["mvnw",{"2":{"437":2,"478":1,"496":1,"549":2}}],["mvn",{"2":{"290":3,"460":1,"496":1,"502":2,"503":1,"539":1,"750":3}}],["mytable",{"2":{"2259":1}}],["myfirstpage",{"2":{"1699":1,"1700":3}}],["mynewpage",{"2":{"1599":1,"1603":3,"1606":1,"1607":2,"1612":1,"1622":3,"1625":1,"1626":2,"1826":1}}],["mystore",{"2":{"1562":1,"1629":2,"1630":3}}],["myservice",{"2":{"625":1}}],["mycomponent>",{"2":{"1594":2}}],["mycomponent",{"2":{"1558":1,"1561":1,"1570":1,"1578":3,"1582":1,"1592":1,"1593":1,"2146":5,"2147":4}}],["mycontroller",{"2":{"600":1,"626":1}}],["mymodal",{"2":{"1426":1,"1428":1}}],["mymailservice",{"2":{"692":1,"693":1,"696":1}}],["mypage",{"2":{"1362":3,"1368":3,"1370":2,"1560":1,"2292":2}}],["mypopup",{"2":{"1099":1}}],["my",{"2":{"600":1,"626":1,"1574":1,"1588":2,"1600":2,"1641":1,"1643":1,"1644":1,"1710":1}}],["mybatis를",{"2":{"328":1}}],["mybatis",{"0":{"262":1,"328":1,"444":1,"445":1,"751":1,"774":1,"778":1,"842":1,"907":1},"1":{"263":1,"264":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"752":1,"753":1,"754":1,"843":1,"844":1,"908":1,"909":1,"910":1},"2":{"261":2,"263":4,"265":1,"293":2,"303":1,"308":3,"330":4,"333":3,"368":1,"371":1,"377":1,"381":1,"386":1,"413":3,"433":1,"434":1,"437":2,"445":3,"448":1,"451":1,"514":1,"535":3,"540":2,"543":1,"551":5,"554":1,"579":2,"632":1,"634":1,"639":1,"747":2,"752":1,"753":3,"754":4,"766":1,"774":3,"838":2,"843":4,"908":1}}],["myreportservice",{"2":{"199":1}}],["m0wcajab43kec8zmwq",{"2":{"206":1,"244":1,"790":1,"956":1}}],["m002",{"2":{"103":1,"120":1}}],["m001",{"2":{"103":1,"120":1,"121":1}}],["mixins",{"2":{"1644":1}}],["mixed",{"2":{"459":1}}],["minimumfractiondigits",{"2":{"1879":2}}],["minimumidle",{"2":{"634":1}}],["minification",{"2":{"1184":1}}],["minute",{"2":{"804":1,"953":1}}],["microsoftarchive",{"2":{"488":1}}],["miievaibadanbgkqhkig9w0baqefaascbkywggsiageaaoibaqcmi2rk09daxkzbr3gkbk+33ye7qzexx3qfznmco7yjonv3bco5hyv7ffwqt9wctu+ztiuyi3oqi+pf65",{"2":{"206":1,"244":1,"790":1,"956":1}}],["mimetype",{"0":{"2218":1},"2":{"898":1,"2218":1}}],["mimemessagehelper",{"2":{"693":2,"694":2}}],["mimemessage",{"2":{"693":1,"694":1}}],["mime",{"0":{"897":1},"1":{"898":1},"2":{"46":1,"119":2,"123":1,"652":1,"898":1,"964":1,"2218":1}}],["mstno",{"2":{"230":1,"729":1}}],["mst",{"2":{"94":2,"742":1}}],["msgktstel=",{"2":{"1949":1}}],["msgktkey",{"2":{"729":1,"732":1}}],["msgkturlsms",{"2":{"729":1,"732":1}}],["msg001",{"2":{"94":1,"742":1}}],["msg0001",{"2":{"30":2,"32":1,"33":1,"37":1,"94":2}}],["msg",{"0":{"737":1},"2":{"92":2,"93":2,"94":2,"729":2,"731":2,"742":2,"1538":2,"1788":2,"1949":4}}],["msgsend",{"2":{"92":1,"94":1,"728":3,"742":1}}],["ms",{"2":{"75":1,"722":1}}],["multiselectboxsql을",{"2":{"1042":1}}],["multiselectboxsql",{"0":{"1030":1,"2007":1},"1":{"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1},"2":{"1032":1,"1035":1,"1036":1,"1762":1,"1994":1}}],["multiselectlist",{"2":{"32":1,"38":1}}],["multipartfile을",{"2":{"891":1}}],["multipartfile>",{"2":{"648":1}}],["multipartfile",{"0":{"163":1,"891":1},"2":{"44":1,"48":1,"163":1,"649":1,"654":1,"891":1}}],["multipart",{"2":{"43":1,"45":1,"75":1,"164":1,"248":1,"651":1,"892":1,"1280":1}}],["messaging",{"2":{"1659":1,"1872":1}}],["messages",{"2":{"1879":2,"1885":2,"1898":1}}],["message",{"2":{"22":2,"30":2,"31":2,"34":3,"45":2,"56":1,"57":3,"71":3,"94":2,"103":3,"105":3,"120":2,"121":3,"136":1,"137":1,"351":1,"352":1,"393":1,"402":1,"403":1,"530":2,"600":1,"623":1,"651":1,"692":5,"693":3,"694":3,"1279":1,"1286":1,"1288":1,"1310":1,"1312":3,"1317":1,"1319":1,"1333":1,"1334":3,"1339":1,"1341":1,"1516":1,"1523":1,"1526":3,"1529":1,"1532":1,"1533":5,"1535":1,"1536":6,"1537":2,"1538":4,"1554":1,"1555":1,"1609":1,"1885":3}}],["meta",{"2":{"1097":1,"1161":6,"1169":1,"1201":2,"1300":3,"1301":2,"1313":1,"1330":1,"1349":1,"1360":1,"1362":1,"1837":1,"1845":1}}],["methods",{"2":{"1883":1}}],["method",{"2":{"7":1,"20":1,"28":1,"41":1,"54":1,"63":1,"90":1,"101":1,"117":1,"400":1,"529":1,"637":1}}],["media",{"2":{"869":2}}],["mediatype",{"2":{"165":1,"894":1,"996":1}}],["menulist",{"2":{"1913":2}}],["menulevel3",{"2":{"1113":1,"1120":1,"1350":1}}],["menulevel2",{"2":{"103":2,"1113":1,"1120":1}}],["menulevel1",{"2":{"103":2,"1113":1}}],["menudata",{"0":{"1407":1},"2":{"1350":2,"1407":1,"1918":1}}],["menustore는",{"2":{"1413":1}}],["menustore",{"0":{"1412":1,"1913":1},"1":{"1413":1,"1414":1,"1415":1,"1416":1,"1417":1,"1418":1,"1419":1,"1420":1},"2":{"1297":2,"1350":2,"1414":1,"1420":4,"1468":3,"1660":1,"1758":1,"1817":1,"1909":1,"2123":1}}],["menusidebar",{"0":{"1115":1,"2017":1},"1":{"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1121":1},"2":{"1117":1,"1119":1,"1994":1}}],["menuheaderbar",{"0":{"1108":1,"2018":1},"1":{"1109":1,"1110":1,"1111":1,"1112":1,"1113":1},"2":{"1110":1,"1112":1,"1994":1}}],["menubmk",{"0":{"1101":1,"2019":1},"1":{"1102":1,"1103":1,"1104":1,"1105":1,"1106":1},"2":{"1103":1,"1105":1,"1994":1}}],["menuname",{"2":{"103":2,"1347":1,"1475":1,"1606":1,"1625":1,"1949":1}}],["menuid",{"2":{"103":2,"1347":1,"1350":1,"1352":1,"1475":1,"1606":1,"1625":1,"1949":1}}],["menu",{"0":{"1418":1,"1475":1,"2016":1},"1":{"2017":1,"2018":1,"2019":1},"2":{"103":5,"120":6,"121":3,"1089":1,"1103":1,"1110":1,"1117":1,"1350":4,"1352":3,"1409":1,"1415":1,"1420":2,"1475":1,"1587":1,"1667":1,"1817":1,"1913":1,"1994":1,"2014":1,"2025":1}}],["markdown",{"0":{"1787":1},"1":{"1788":1,"1789":1,"1790":1},"2":{"1787":1,"1790":1}}],["material",{"2":{"1680":1,"1684":1,"1773":1,"1900":1,"2064":1}}],["math",{"2":{"1534":1}}],["matched",{"2":{"1358":1}}],["match",{"2":{"898":2,"1326":1,"2186":1}}],["matchifmissing",{"2":{"634":1}}],["many",{"0":{"1287":1,"1309":1,"1331":1},"2":{"953":1,"2162":1}}],["magicmatch",{"2":{"898":2}}],["magic",{"2":{"898":2}}],["macos",{"2":{"1720":1}}],["mac",{"0":{"489":1},"2":{"549":1}}],["maven에서",{"2":{"834":1}}],["maven으로",{"0":{"502":1},"2":{"759":1}}],["maven을",{"2":{"283":1}}],["maven",{"0":{"283":1,"296":1,"297":1,"339":1,"496":1,"628":1},"1":{"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"340":1,"341":1,"342":1},"2":{"296":1,"297":1,"433":1,"437":2,"452":1,"460":6,"463":1,"464":1,"478":2,"496":1,"544":2,"549":3,"557":2,"563":1,"759":1,"835":2,"836":1}}],["mailutil",{"2":{"698":2}}],["mailsender",{"2":{"692":2,"693":3,"694":2}}],["mailservice",{"2":{"172":2}}],["maildata",{"2":{"172":5}}],["mail",{"0":{"589":1,"689":1},"1":{"690":1},"2":{"171":2,"292":1,"439":1,"554":1,"568":1,"684":1,"686":1,"687":1,"690":2}}],["mail을",{"2":{"169":1}}],["mainheader",{"2":{"1994":1}}],["mainclass>",{"2":{"296":1}}],["mainclass>axpframework",{"2":{"296":1}}],["main이라는",{"2":{"71":1,"83":1,"190":1}}],["main",{"0":{"551":1,"560":1,"561":1,"1085":1,"1373":1,"1656":1,"1861":1,"1938":1},"1":{"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1},"2":{"0":1,"65":2,"71":2,"83":3,"85":1,"86":1,"177":1,"190":2,"193":1,"221":1,"239":1,"297":1,"307":1,"368":2,"374":2,"409":1,"414":1,"434":2,"437":1,"473":1,"478":1,"481":1,"485":1,"490":1,"492":1,"500":1,"549":1,"551":1,"620":1,"641":1,"642":1,"680":1,"711":1,"716":1,"719":1,"746":1,"759":1,"761":1,"763":1,"765":2,"834":1,"887":1,"889":1,"1087":2,"1089":1,"1091":4,"1358":1,"1366":4,"1639":1,"1652":1,"1663":1,"1765":1,"1817":2,"1838":1,"1840":1,"1846":2,"1858":1,"1893":1,"1895":5,"1904":1,"1934":2,"1994":1,"2151":1}}],["maximumfractiondigits",{"2":{"1879":2}}],["maximumpoolsize",{"2":{"634":1}}],["maxretries",{"2":{"1318":3,"1534":3}}],["maxage",{"2":{"637":1}}],["max",{"2":{"164":2,"242":2,"248":2,"449":1,"804":1,"892":2,"953":1,"1428":1,"1571":1,"1582":1,"2174":1}}],["maxtokens",{"2":{"22":2}}],["malgungothic",{"2":{"86":1,"194":1,"718":1,"756":1,"889":1}}],["mappings",{"2":{"245":1,"493":1,"637":3}}],["mapper로",{"2":{"565":1}}],["mapperscan",{"0":{"329":1,"371":1,"408":1},"2":{"329":1,"371":1,"396":1,"408":1,"451":1,"910":1}}],["mapper>",{"2":{"308":1,"333":1,"413":1,"535":1,"753":1}}],["mapper를",{"2":{"303":1,"385":1,"386":1,"411":1}}],["mapper",{"0":{"303":1,"304":1,"332":1,"381":1,"386":1,"411":1,"444":1,"445":1,"533":1,"752":1,"754":1},"1":{"304":1,"305":2,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"412":1,"413":1,"414":1,"415":1,"534":1,"535":1},"2":{"156":1,"250":1,"263":3,"264":1,"305":3,"307":1,"308":5,"327":1,"329":2,"330":3,"331":1,"332":1,"333":5,"338":1,"368":4,"371":5,"372":1,"374":3,"377":2,"380":1,"386":2,"388":4,"396":1,"397":1,"406":1,"408":3,"409":1,"410":1,"412":2,"413":6,"414":2,"415":1,"419":1,"434":1,"437":2,"439":2,"440":4,"444":1,"445":1,"448":2,"451":3,"455":1,"514":2,"516":4,"523":2,"534":2,"535":6,"539":1,"540":2,"542":3,"551":2,"554":4,"555":4,"556":3,"598":1,"614":2,"684":2,"702":2,"726":2,"747":2,"752":1,"753":5,"754":1,"774":3,"843":3,"844":1,"910":2,"924":3}}],["map",{"2":{"30":2,"31":2,"32":1,"34":1,"56":1,"57":1,"67":1,"103":3,"104":1,"149":1,"154":1,"165":1,"172":1,"178":4,"199":6,"223":3,"236":1,"279":1,"305":6,"308":1,"310":2,"311":1,"313":1,"314":1,"318":2,"321":1,"324":1,"326":1,"332":2,"333":1,"390":2,"400":1,"412":2,"413":1,"417":3,"418":3,"421":1,"529":1,"532":1,"534":2,"535":1,"570":1,"593":2,"594":2,"601":4,"604":3,"616":1,"617":4,"625":2,"626":1,"648":1,"649":2,"663":2,"696":1,"704":2,"707":2,"708":2,"728":1,"729":1,"753":1,"818":1,"846":1,"859":1,"883":1,"888":1,"894":1,"978":1,"1212":1,"1299":1}}],["months",{"2":{"2252":1}}],["mount",{"2":{"1861":1,"1904":1,"2146":3,"2147":2}}],["mouseevent",{"2":{"1440":1}}],["module",{"2":{"2082":1}}],["modules=",{"2":{"1105":1,"1112":1,"1119":1}}],["modules",{"2":{"1097":2,"1105":2,"1112":2,"1119":2,"1349":2,"1652":1,"1727":1,"1748":1,"1816":1,"2172":1,"2178":2}}],["modifier",{"2":{"1574":1}}],["modaldata",{"2":{"1915":1}}],["modalid",{"0":{"1426":1},"2":{"1424":1,"1426":1,"1428":1,"1915":1}}],["modalconfig",{"2":{"1424":1,"1428":1}}],["modalstore는",{"2":{"1422":1}}],["modalstore",{"0":{"1421":1,"1915":1},"1":{"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1,"1428":1},"2":{"1126":3,"1140":3,"1151":3,"1157":3,"1423":1,"1426":3,"1427":2,"1428":4,"1660":1,"1758":1,"1817":1,"1909":1,"1915":3,"2123":1}}],["mode",{"2":{"459":1,"765":1,"1185":2}}],["mode=out",{"2":{"310":1,"335":1,"336":1}}],["mode=in",{"2":{"310":1,"311":1,"335":1,"336":1,"337":1}}],["modelvalue=",{"2":{"1035":1,"1593":1}}],["modelvalue",{"2":{"1026":1,"1033":1,"1573":1,"1584":1,"1588":1,"1613":1}}],["model=",{"2":{"1011":1,"1012":1,"1020":1,"1027":1,"1035":1,"1036":1,"1040":1,"1428":1,"1537":1,"1591":1,"1704":1,"1973":1,"1983":1,"1989":2,"1999":1,"2003":1,"2005":1,"2006":1,"2009":1}}],["models",{"2":{"617":1}}],["model",{"2":{"22":3,"1026":1,"1033":1,"1464":2}}],["mockmvc",{"2":{"996":3}}],["motel",{"2":{"732":1}}],["mo",{"2":{"92":1,"93":1,"94":1,"731":1,"742":1}}],["mozilla",{"2":{"56":2,"59":1,"974":1}}],["more",{"0":{"5":1,"1790":1}}],["md```js",{"2":{"1788":1}}],["mdi",{"2":{"1649":1,"1898":1,"2062":1,"2064":1}}],["md=",{"2":{"1648":2}}],["md5util",{"2":{"208":2,"792":2,"958":2}}],["md5",{"0":{"208":1,"792":1,"958":1},"2":{"575":1,"598":1,"608":1}}],["md",{"2":{"0":2,"1652":1,"1789":1,"1816":1}}],["i18n",{"0":{"1879":1},"2":{"1817":1,"1876":1,"1877":2,"1879":5,"1882":1,"1884":1,"1885":1,"1886":1,"1888":1}}],["ico",{"0":{"1836":1},"2":{"1652":1,"1834":1,"1836":1}}],["iconbtn",{"2":{"1898":1}}],["icons",{"0":{"1900":1},"2":{"1684":1,"1743":1,"1891":3,"1898":3,"1900":1,"2063":1,"2064":1}}],["iconify를",{"2":{"1743":1,"2061":1}}],["iconify",{"0":{"1902":2,"2061":1},"2":{"1661":2,"1781":1,"1817":2,"1822":1,"1891":2,"1902":1}}],["icon=",{"2":{"1649":2,"2062":2}}],["icon",{"2":{"1649":2,"1836":2,"2062":2,"2064":1}}],["i++",{"2":{"1318":1,"1534":1}}],["iv",{"2":{"1215":1,"1216":1,"2231":3,"2232":3}}],["ivsmqknqx9grlanxlv",{"2":{"206":1,"244":1,"790":1,"956":1}}],["io",{"0":{"927":1},"2":{"780":1,"927":2}}],["ireport로",{"2":{"757":1}}],["is",{"2":{"1789":10,"2156":1}}],["isunfoldable",{"2":{"1463":2}}],["isvisible",{"2":{"1463":2}}],["isvalidphone",{"2":{"235":1}}],["isvalidemail",{"2":{"235":1}}],["isvalid",{"2":{"235":2}}],["ismodalopen",{"2":{"1428":2}}],["isbmk",{"2":{"1420":1}}],["isbookmarked",{"2":{"1420":1}}],["isbold=",{"2":{"197":1}}],["isroutenotfound",{"2":{"1358":2}}],["isrefreshing",{"2":{"1261":1,"1276":4,"1336":1,"1337":2}}],["isrefresh",{"2":{"813":1,"945":1}}],["isrefreshtoken",{"2":{"214":1,"603":1,"813":1,"945":1}}],["isauth",{"2":{"1911":1}}],["isauthenticated",{"0":{"1385":1},"2":{"1235":2,"1360":1,"1385":3,"1389":1,"1633":2,"1635":2,"1706":2,"1784":1,"1911":2,"1920":2,"1921":2}}],["isaxioserror",{"2":{"1319":1,"1532":1}}],["isencrypt",{"2":{"1244":1,"1250":2}}],["isempty",{"2":{"163":1,"234":2,"604":2,"891":1,"986":2,"2222":1,"2276":1,"2283":1}}],["isloading",{"2":{"1016":1,"1395":1,"1399":1,"1912":1}}],["isloading=",{"2":{"1016":1,"1399":1}}],["isok",{"2":{"94":4,"742":1,"996":1}}],["ibatis",{"2":{"156":1,"250":1,"305":1,"993":1}}],["implements",{"2":{"637":1,"670":1,"671":1}}],["impl",{"2":{"294":1,"932":1}}],["import를",{"2":{"2079":1,"2200":1}}],["import와",{"2":{"1680":1}}],["imports",{"2":{"1205":2,"1817":1,"2055":1}}],["import합니다",{"2":{"453":1,"749":1,"1639":1}}],["import",{"2":{"0":1,"240":1,"305":3,"453":1,"501":1,"749":1,"898":1,"970":1,"1016":1,"1027":1,"1029":2,"1035":1,"1040":1,"1056":1,"1072":1,"1083":2,"1091":1,"1097":1,"1098":1,"1126":2,"1140":1,"1151":1,"1157":1,"1161":6,"1162":3,"1169":1,"1201":2,"1219":2,"1250":2,"1349":1,"1350":1,"1352":1,"1362":1,"1366":4,"1368":1,"1385":1,"1387":2,"1388":2,"1389":3,"1399":1,"1410":1,"1420":1,"1428":2,"1454":1,"1463":2,"1464":1,"1468":1,"1480":1,"1548":1,"1578":1,"1585":1,"1591":1,"1603":1,"1609":4,"1613":3,"1622":1,"1635":2,"1643":1,"1644":1,"1700":1,"1702":2,"1704":1,"1705":2,"1706":2,"1744":1,"1766":1,"1830":2,"1837":1,"1845":1,"1846":1,"1855":1,"1861":3,"1873":1,"1880":1,"1882":1,"1884":1,"1887":1,"1893":1,"1895":2,"1898":4,"1904":2,"1905":1,"1920":2,"1921":1,"1922":1,"1974":1,"2078":1,"2079":1,"2083":1,"2087":1,"2120":1,"2146":1,"2147":2,"2156":1,"2157":1,"2173":1,"2184":1,"2185":1,"2200":1,"2222":2,"2262":1,"2282":2}}],["img",{"2":{"119":2,"825":1,"1837":2,"1844":1,"1845":1,"2268":1}}],["imageurl을",{"2":{"2268":1}}],["imageurl",{"2":{"2268":1}}],["images",{"2":{"65":1,"70":1,"82":1,"189":1,"1161":2,"1162":1,"1829":2,"1926":1}}],["image",{"2":{"65":2,"70":2,"81":3,"119":2,"188":2,"611":2,"1836":1}}],["i",{"2":{"65":2,"70":6,"81":1,"82":1,"188":1,"189":1,"715":2,"1318":4,"1534":4}}],["ip",{"2":{"46":1,"56":1,"59":1,"94":1,"103":1,"234":2,"604":2,"2267":1}}],["ipaddress",{"2":{"46":3,"56":3,"59":2,"92":1,"94":2,"103":2,"279":1,"321":1,"594":1,"664":1,"742":1,"818":1,"1957":1,"2267":2}}],["idbutil",{"2":{"2325":2,"2326":1,"2330":1}}],["id를",{"2":{"2005":1}}],["idxdbkey",{"0":{"1476":1},"2":{"1476":1,"1480":2}}],["ide에서",{"0":{"499":1},"1":{"500":1,"501":1}}],["idea로",{"2":{"500":1}}],["idea",{"0":{"500":1},"2":{"466":1}}],["ide",{"0":{"466":1},"2":{"466":1}}],["ids",{"2":{"314":1}}],["id=",{"2":{"308":1,"310":2,"311":1,"313":1,"314":1,"333":1,"335":1,"336":1,"337":1,"413":1,"535":1,"753":1,"1973":1,"1974":1,"1990":1}}],["id>prod",{"2":{"289":1}}],["id>dev",{"2":{"289":1}}],["id>",{"2":{"289":3}}],["id>local",{"2":{"289":1}}],["id로",{"2":{"104":1}}],["id",{"0":{"2259":1},"2":{"30":1,"31":2,"44":4,"45":2,"46":2,"56":1,"57":1,"59":1,"71":1,"94":2,"103":6,"104":3,"109":1,"120":8,"121":5,"314":3,"601":1,"651":2,"663":1,"721":1,"1056":2,"1348":1,"1424":1,"1426":1,"1606":2,"1625":2,"1705":4,"1915":2,"1946":1,"1957":1,"1969":1,"1981":1,"2005":1,"2120":3,"2193":2,"2194":5,"2259":2,"2267":2}}],["id가",{"2":{"15":1}}],["if>",{"2":{"313":2}}],["if",{"0":{"313":1},"2":{"9":1,"22":1,"30":1,"56":1,"57":1,"71":1,"94":1,"103":1,"105":1,"120":1,"121":1,"163":1,"313":2,"604":1,"672":1,"891":1,"1029":1,"1036":1,"1063":1,"1211":1,"1229":1,"1230":1,"1248":1,"1263":1,"1273":2,"1276":3,"1279":1,"1295":1,"1298":1,"1299":1,"1313":1,"1314":2,"1318":1,"1319":1,"1326":2,"1330":1,"1337":1,"1341":1,"1358":1,"1360":1,"1385":1,"1387":1,"1389":1,"1468":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1532":1,"1534":1,"1536":1,"1538":2,"1609":1,"1702":1,"1707":1,"1783":1,"1784":1,"1785":1,"2156":1,"2226":2,"2319":3}}],["inactive",{"2":{"2194":2}}],["increment",{"2":{"2078":2}}],["include",{"2":{"1644":1}}],["include>",{"2":{"297":2}}],["includes",{"2":{"1258":1,"1276":2,"1286":1,"1308":1,"1310":1,"1332":1,"1333":1,"1529":1}}],["includes>",{"2":{"297":2}}],["includesystemscope>",{"2":{"296":1}}],["includesystemscope>true",{"2":{"296":1}}],["initial",{"2":{"1922":1}}],["init",{"2":{"1435":1}}],["indexeddb는",{"2":{"2333":1}}],["indexeddb를",{"2":{"2322":1}}],["indexeddbutil",{"2":{"1817":1,"2323":1,"2325":1}}],["indexeddb",{"0":{"1479":1,"2321":1},"1":{"2322":1,"2323":1,"2324":1,"2325":1,"2326":1,"2327":1,"2328":1,"2329":1,"2330":1,"2331":1,"2332":1,"2333":1,"2334":1},"2":{"1766":2,"1817":1}}],["indexeddb에서",{"2":{"2326":1}}],["indexeddb에",{"2":{"1471":1,"1479":1,"2325":1,"2332":1}}],["index",{"0":{"1896":1,"1898":1,"2045":1},"2":{"857":1,"1836":1,"1891":3,"1904":2}}],["inputphone",{"0":{"1009":1,"1999":1},"1":{"1010":1,"1011":1},"2":{"1010":1,"1011":1,"1762":1,"1994":1,"1999":1}}],["input",{"2":{"792":1,"793":1,"958":1,"959":1,"1010":1,"1788":1,"1789":1,"1994":1,"2233":1}}],["inputstreamreader",{"2":{"732":1}}],["inputstream",{"2":{"180":1,"199":1,"709":1}}],["inventory",{"2":{"367":1}}],["invalid",{"2":{"9":1}}],["info",{"2":{"1789":4}}],["inf",{"2":{"297":1}}],["int",{"2":{"305":3,"804":1,"953":1}}],["intdb",{"2":{"255":1,"482":1,"834":1}}],["intelligence",{"2":{"1666":1,"1691":1,"1814":1}}],["intellij",{"0":{"500":1},"2":{"466":1,"500":1}}],["intellicins",{"2":{"245":1}}],["interceptors",{"2":{"1273":1,"1303":1}}],["interface",{"2":{"305":1,"332":1,"412":1,"534":1,"1817":1,"1926":1}}],["internal",{"2":{"138":1}}],["insecure",{"2":{"825":1}}],["insert",{"2":{"31":1,"305":1}}],["insomnia",{"2":{"469":1}}],["install",{"2":{"290":3,"299":1,"301":1,"340":1,"489":1,"496":2,"1694":1,"1727":1,"1733":1,"1748":1,"2172":1,"2178":2}}],["instanceof",{"2":{"1212":1,"1298":1,"1299":3}}],["instance",{"2":{"197":1}}],["inline",{"2":{"72":1,"76":1,"825":1}}],["in",{"2":{"0":1,"314":1,"1787":1}}],["itemlist",{"2":{"883":1}}],["items",{"2":{"883":1,"1989":1}}],["item=",{"2":{"314":1}}],["itl",{"2":{"285":1}}],["it",{"2":{"0":1,"872":1,"2146":2,"2147":1,"2156":3,"2157":1}}],["c는",{"2":{"2196":1}}],["c",{"2":{"2195":1,"2196":2}}],["cypress",{"2":{"2150":1}}],["ctrl+f",{"2":{"1786":1}}],["cwd",{"2":{"1185":1}}],["c002",{"2":{"1035":1}}],["c001",{"2":{"1035":1}}],["cu",{"2":{"1989":1}}],["cust",{"2":{"1981":6,"1989":1}}],["customerlistpop",{"0":{"1983":1},"2":{"1978":1,"1983":1}}],["customerlistdata",{"0":{"1986":1},"2":{"1978":1,"1986":3}}],["customerlist",{"0":{"1981":1},"2":{"1978":1,"1981":1}}],["customergrppop",{"0":{"1984":1},"2":{"1978":1}}],["customergrplistdata",{"0":{"1987":1},"2":{"1978":1}}],["customergrplist",{"0":{"1982":1},"2":{"1978":1}}],["customer",{"0":{"1980":1},"1":{"1981":1,"1982":1,"1983":1,"1984":1},"2":{"1978":1,"1981":1,"1986":1}}],["customplugin",{"2":{"1905":1}}],["custommessage",{"2":{"1538":2}}],["custom",{"0":{"1789":1,"1839":1,"1840":1,"1841":1,"1842":1},"1":{"1840":1,"1841":1,"1842":1},"2":{"1044":1,"1303":1,"1637":4,"1652":1,"1834":4,"1840":2,"1841":2,"1842":2,"1846":4,"1885":5,"1905":4,"1922":1,"1973":1}}],["customaxios를",{"2":{"1759":1}}],["customaxios",{"0":{"1657":1,"1862":1},"2":{"1029":1,"1162":1,"1211":1,"1230":1,"1256":1,"1267":1,"1268":1,"1278":1,"1292":1,"1306":1,"1323":1,"1387":1,"1390":2,"1400":1,"1407":1,"1514":1,"1515":1,"1522":1,"1609":1,"1613":1,"1652":1,"1702":1,"1752":1,"1756":1,"1759":1,"1817":1,"1830":1,"1858":1,"1861":1,"2067":1,"2069":1,"2094":1,"2234":1}}],["currency",{"2":{"1879":6,"1884":1}}],["currenttab",{"2":{"1480":1}}],["currentmenu",{"2":{"1420":1,"1468":1,"1913":1}}],["currentpage",{"2":{"236":1}}],["current",{"2":{"0":1}}],["curser",{"2":{"611":1}}],["center",{"2":{"1033":1,"1644":1,"1989":1}}],["centos",{"2":{"471":1}}],["cellcontextmenu",{"2":{"1072":1,"1440":1}}],["cellcontextmenu=",{"2":{"1072":1}}],["cellrendererparams",{"2":{"1063":1}}],["cellrenderer",{"2":{"1063":1}}],["celleditorparams",{"2":{"1043":1,"1057":1,"1077":1}}],["celleditor",{"2":{"1043":1,"1057":1,"1077":1}}],["cell",{"2":{"879":3}}],["csv",{"2":{"1071":1}}],["css",{"0":{"1574":1,"1636":1,"1637":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1846":1},"1":{"1637":1,"1638":1,"1639":1,"1840":1,"1841":1,"1842":1},"2":{"1044":1,"1498":1,"1499":1,"1637":5,"1639":2,"1652":3,"1669":1,"1772":1,"1834":7,"1838":1,"1839":1,"1840":2,"1841":2,"1842":2,"1846":5,"1861":1,"1891":1,"1902":1,"1926":2,"1931":1}}],["csp",{"2":{"825":2}}],["csrf",{"2":{"217":1,"581":1,"636":4,"822":3,"948":3}}],["cbc로",{"2":{"801":1}}],["creditcard",{"0":{"1950":1},"1":{"1951":1},"2":{"1664":1,"1817":1,"1942":1}}],["credentials",{"2":{"637":1}}],["createvuetify",{"2":{"1898":2}}],["createpinia",{"2":{"1893":2,"2147":2,"2157":2}}],["createi18n",{"2":{"1879":2}}],["createapp",{"2":{"1861":2,"1904":1}}],["createaccesstoken",{"2":{"214":2,"603":1,"812":1,"944":1}}],["createcell",{"2":{"879":1}}],["createrow",{"2":{"879":1}}],["createrefreshtoken",{"2":{"214":2,"603":1,"812":1,"944":1}}],["createsheet",{"2":{"879":1}}],["createmimemessage",{"2":{"693":1,"694":1}}],["create",{"2":{"634":1,"1269":1}}],["createtemplate",{"2":{"273":1,"274":1}}],["createdirectory",{"2":{"167":1,"896":1}}],["createdat",{"2":{"56":3,"59":2}}],["createelement",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["createobjecturl",{"2":{"46":1,"72":1,"119":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["cross",{"2":{"636":1,"670":1,"827":1}}],["cryptojs",{"0":{"2108":1},"2":{"1685":1,"2133":1}}],["cryptojs를",{"2":{"1208":1,"2229":1}}],["crypto",{"2":{"598":1}}],["cd",{"2":{"477":1,"1694":1,"1731":1,"1981":9,"1989":1}}],["cdata",{"2":{"195":1,"197":3}}],["cpu",{"2":{"471":1,"1221":1,"1722":1,"1723":1}}],["cpaas",{"0":{"732":1},"2":{"96":3,"229":3,"729":1,"731":1,"740":4,"744":1}}],["cmd+f",{"2":{"1786":1}}],["cmd",{"2":{"437":1,"549":1}}],["cxjwgftifciauw3cen+a1z1wvn2krwey4wy9zgm6fml7d42jbp9zuguaphifxzxod2tm",{"2":{"206":1,"244":1,"790":1,"956":1}}],["clean",{"2":{"290":3,"299":1,"300":1,"301":1,"340":1,"341":1,"496":2,"503":1,"1748":1,"2178":1}}],["clearlogs",{"2":{"1410":1}}],["clearlogdata",{"0":{"1408":1},"2":{"1410":1,"1918":1}}],["clearsessiondata",{"0":{"1247":1},"2":{"1247":1,"1249":1}}],["clearaccesstoken",{"0":{"1383":1},"2":{"1234":1,"1249":1,"1262":1,"1276":1,"1337":1,"1383":1,"1388":1,"1634":1,"1911":1}}],["clear",{"2":{"105":1,"106":1,"247":1,"1434":1}}],["claims",{"2":{"214":3,"813":3,"945":3}}],["classes",{"2":{"557":2}}],["class",{"2":{"199":1,"223":1,"255":1,"257":1,"258":1,"260":1,"370":1,"400":2,"417":2,"421":1,"451":1,"482":1,"483":1,"484":1,"529":2,"532":2,"600":1,"616":1,"617":1,"625":1,"626":1,"634":3,"635":1,"636":2,"637":1,"638":1,"648":1,"649":1,"670":1,"671":1,"672":1,"675":1,"692":1,"693":1,"696":1,"704":1,"728":1,"729":1,"822":1,"834":1,"835":1,"836":1,"838":1,"859":1,"914":1,"948":1,"989":1,"996":1}}],["class=",{"2":{"197":4,"1056":1,"1588":1,"1600":1,"1609":2,"1705":1,"1973":1,"1974":1,"1989":2,"1990":1,"2120":1}}],["classpath",{"2":{"66":1,"264":1,"331":1,"757":1,"844":1}}],["clientcode",{"2":{"1240":1}}],["clientip",{"2":{"604":1}}],["client001",{"2":{"120":2,"121":2}}],["client",{"2":{"120":3,"121":3,"617":4}}],["clicked=",{"2":{"1990":1}}],["click=",{"2":{"1006":1,"1007":1,"1463":2,"1609":1,"1699":1,"1997":1,"2078":1}}],["click",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2146":3,"2151":1,"2269":1}}],["closealltab",{"0":{"1478":1}}],["closetab",{"0":{"1477":1}}],["closemodal",{"0":{"1427":1},"2":{"1427":1,"1915":1}}],["close",{"2":{"879":1,"1435":1}}],["close=",{"2":{"314":1}}],["cloned",{"2":{"2196":2}}],["clone",{"2":{"477":1,"1694":1,"1731":1}}],["clob을",{"2":{"38":1}}],["clob1",{"2":{"32":2}}],["clob",{"2":{"32":2,"38":1,"604":1,"2293":1}}],["cloud",{"2":{"25":1,"1659":1,"1872":1}}],["chunksizewarninglimit로",{"2":{"1500":1}}],["chunksizewarninglimit",{"0":{"1178":1},"2":{"1177":1,"1203":1}}],["children",{"2":{"1083":1,"1366":2,"1895":1}}],["change",{"2":{"1584":1}}],["changeorigin",{"2":{"1189":3,"1200":3}}],["chain",{"2":{"670":2,"671":2,"676":1}}],["charset",{"2":{"242":1}}],["charset=utf",{"2":{"74":1,"75":1}}],["chg",{"2":{"45":10,"49":3,"651":2,"655":3,"663":1}}],["chrome",{"2":{"34":1,"1719":1}}],["check",{"2":{"5":1,"506":1,"1790":1,"2156":1}}],["cv1",{"2":{"178":1,"179":1,"199":2,"708":2}}],["cv",{"2":{"30":4,"32":2,"33":2,"36":4,"38":1,"65":7,"68":1,"70":2,"71":7,"78":5,"81":3,"83":7,"84":3,"87":2,"94":2,"178":1,"179":1,"185":5,"188":2,"190":6,"191":1,"197":1,"199":2,"200":1,"224":1,"418":1,"708":2,"713":4,"716":2,"723":1,"742":1}}],["calculatedays",{"2":{"2224":1}}],["callback=",{"2":{"1036":1}}],["callback",{"0":{"2330":1},"2":{"1033":1,"2330":1}}],["calloracletestmapper",{"2":{"326":1}}],["callprocpostgresql",{"2":{"319":1,"601":1,"847":1}}],["callprocoracle",{"2":{"319":1,"601":1,"847":1}}],["callproctibero",{"2":{"319":1,"601":1,"847":1}}],["callprocedure",{"2":{"310":1,"311":1,"335":1,"336":1,"337":1}}],["callable",{"2":{"310":1,"311":1,"335":1,"336":1,"337":1}}],["callgeminiai",{"2":{"149":1,"570":1,"616":1,"617":2,"625":1,"626":1,"978":1}}],["call",{"2":{"30":2,"31":2,"32":1,"34":1,"56":2,"57":2,"310":1,"311":1,"335":1,"336":1,"337":1,"1957":1,"1969":1,"1981":1,"2003":1}}],["card",{"2":{"1428":4,"1600":4,"1609":4,"1646":4,"1709":4,"2141":1}}],["card>",{"2":{"1428":2,"1600":2,"1609":2,"1646":2,"1709":2}}],["caption",{"2":{"1034":2,"1035":3,"1043":2,"1077":2}}],["case",{"2":{"449":1,"1536":5,"1571":1,"1574":1,"1582":1,"1612":1,"1676":1,"1828":1}}],["camelcase",{"2":{"449":1,"1570":2,"1571":1,"1572":1,"1573":1,"1582":1,"1612":1,"1676":2,"1827":1}}],["catch로",{"2":{"2333":1}}],["catch를",{"2":{"1539":1,"1568":1,"1614":1}}],["catch",{"0":{"1523":1},"2":{"400":1,"529":1,"600":1,"626":1,"1029":1,"1276":1,"1279":1,"1289":1,"1314":1,"1317":1,"1318":1,"1337":1,"1341":1,"1387":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1556":1,"1567":1,"1568":1,"1609":1,"1614":1,"1702":1,"1785":1}}],["cachedatabase",{"2":{"635":1}}],["cachepassword",{"2":{"635":1}}],["cacheport",{"2":{"635":1}}],["cachehost",{"2":{"635":1}}],["cacheredistemplate",{"2":{"273":2,"580":1,"635":2,"851":1}}],["cacheredisconnectionfactory",{"2":{"270":2,"273":1,"580":1,"635":3}}],["cache",{"2":{"56":1,"268":1,"270":3,"273":1,"324":1,"490":1,"635":1,"636":1,"827":2,"850":1,"964":1,"1748":1,"2178":1}}],["cannot",{"2":{"2185":1}}],["can",{"2":{"0":1}}],["cookie",{"2":{"1227":2,"1236":1}}],["copyproperties",{"2":{"982":1}}],["correctly",{"2":{"2146":1}}],["core",{"0":{"1928":1},"2":{"471":1,"906":1,"1161":2,"1201":2,"1205":1,"1206":1,"1577":1,"1669":1,"1817":1,"1829":2,"1858":1,"1926":1}}],["corsregistry",{"2":{"637":1}}],["cors",{"0":{"245":1,"493":1,"805":1,"2160":1},"1":{"806":1},"2":{"17":2,"493":1,"554":1,"582":1,"583":1,"586":1,"632":1,"637":4,"668":1,"673":2,"806":1,"917":1,"2160":2,"2187":1}}],["count",{"2":{"449":1,"1571":1,"1582":1,"1583":1,"1585":3,"2078":3,"2205":2}}],["count는",{"2":{"78":1,"185":1}}],["colgroup>",{"2":{"1973":2}}],["color",{"2":{"1317":1,"1537":3,"1643":2}}],["color=",{"2":{"1007":1,"1537":1,"1609":1,"1997":1}}],["col>",{"2":{"1027":1,"1648":2,"1989":1}}],["cols=",{"2":{"1027":1,"1648":2,"1989":1}}],["col",{"2":{"1027":1,"1648":2,"1973":2,"1989":1}}],["collection",{"2":{"986":1}}],["collectionutils",{"2":{"986":3}}],["collections4",{"2":{"984":1,"986":1}}],["collections",{"0":{"983":1},"1":{"984":1,"985":1,"986":1}}],["collection=",{"2":{"314":1}}],["columndef",{"2":{"1440":1}}],["columndefs=",{"2":{"1056":1,"1609":1,"1705":1,"1887":1,"1974":1,"1990":1,"2120":1}}],["columndefs",{"2":{"1043":1,"1056":2,"1063":1,"1077":1,"1609":2,"1705":2,"1887":2,"2120":2,"2261":1}}],["columnheadercontextmenu=",{"2":{"1072":1}}],["columnid",{"2":{"1063":1}}],["columns=",{"2":{"1035":1,"1036":1}}],["columns",{"0":{"1034":1,"2261":1},"2":{"1033":1,"1034":1,"1035":2,"1036":1,"1043":1,"1077":1,"1974":2,"1986":2,"1990":1,"2261":1}}],["column=",{"2":{"310":2}}],["columnwidth=",{"2":{"197":1}}],["column에",{"2":{"87":1,"200":1,"723":1}}],["column",{"2":{"65":1,"68":1,"71":1,"84":1,"191":1,"224":1,"1072":2,"1440":1,"2258":2}}],["column3",{"2":{"36":1}}],["column2",{"2":{"30":1,"36":2,"197":2,"308":1,"310":2,"313":1}}],["column1",{"2":{"30":1,"33":1,"36":2,"197":2,"308":1,"310":2,"313":1}}],["comfcm",{"0":{"1872":1},"2":{"1659":1,"1817":1,"1820":1,"2272":1,"2273":1,"2274":1,"2282":2,"2284":1}}],["comfiles",{"2":{"249":1,"494":1}}],["combobox",{"2":{"1044":1}}],["combobox를",{"2":{"1024":1}}],["community",{"2":{"2097":1}}],["commjxlsview",{"2":{"598":1,"883":1}}],["commfiledownview",{"2":{"598":1}}],["commons",{"0":{"925":1,"927":1,"928":1,"929":1,"979":1,"983":1},"1":{"926":1,"927":1,"928":1,"929":1,"980":1,"981":1,"982":1,"984":1,"985":1,"986":1},"2":{"929":1,"980":1,"982":1,"984":1,"986":1}}],["common",{"0":{"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"1659":1,"1820":1,"1871":1,"1995":1,"2199":1},"1":{"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2222":1,"2223":1,"2224":1,"2225":1,"2226":1,"2227":1},"2":{"156":1,"250":1,"329":1,"371":1,"408":1,"439":1,"451":1,"554":1,"565":1,"568":1,"598":1,"600":1,"601":1,"602":1,"603":1,"604":1,"611":1,"688":1,"910":1,"1005":1,"1010":1,"1015":1,"1019":1,"1025":1,"1032":1,"1039":1,"1049":1,"1051":1,"1053":1,"1220":2,"1561":1,"1570":1,"1587":1,"1659":1,"1667":1,"1676":1,"1707":1,"1766":1,"1817":3,"1820":1,"1827":1,"1858":1,"1865":1,"1869":1,"1994":1,"2156":3,"2190":1,"2200":1,"2201":2,"2237":1,"2265":1,"2272":1,"2273":1,"2282":3,"2283":3,"2287":1,"2301":1,"2313":1}}],["compresstoutf16",{"2":{"2331":1}}],["compressvalue",{"2":{"2331":1}}],["composition",{"0":{"1463":1,"1882":1,"1920":1},"2":{"1680":2,"1683":1,"1879":1,"2076":1,"2077":1,"2086":1}}],["componentmodule",{"2":{"1097":2,"1349":2}}],["componentpath",{"2":{"1097":2,"1349":2}}],["component",{"2":{"1083":2,"1091":1,"1098":1,"1348":1,"1350":2,"1362":1,"1366":4,"1368":1,"1574":1,"1588":2,"1603":1,"1622":1,"1641":1,"1643":1,"1644":1,"1700":1,"1710":1,"1895":2,"2113":1,"2136":1,"2184":1}}],["components를",{"2":{"1576":1,"1589":1,"1680":1}}],["components",{"0":{"1206":1,"1995":1,"2012":1,"2016":1,"2020":1},"1":{"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2013":1,"2014":1,"2015":1,"2017":1,"2018":1,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1},"2":{"1005":1,"1010":1,"1015":1,"1019":1,"1025":1,"1032":1,"1039":1,"1042":1,"1049":1,"1051":1,"1053":1,"1061":1,"1068":1,"1076":1,"1103":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1199":1,"1206":3,"1561":1,"1577":3,"1578":1,"1579":1,"1587":1,"1667":1,"1817":2,"1994":2,"2056":2,"2083":1}}],["componentscan",{"0":{"370":1,"407":1},"2":{"370":1,"396":1,"407":1,"451":1}}],["computed나",{"2":{"1635":1}}],["computedvalue",{"2":{"1613":1}}],["computed로",{"2":{"1385":1}}],["computed",{"2":{"1235":1,"1250":4,"1385":1,"1410":1,"1420":1,"1428":2,"1454":1,"1463":3,"1480":1,"1585":2,"1613":2,"1633":1,"1635":2,"1706":1,"1911":1,"1918":1,"1920":1,"1921":1,"1922":2,"2079":1,"2225":1}}],["compileroptions",{"2":{"1163":1}}],["compilereport",{"2":{"180":1,"199":1,"709":1}}],["compact",{"2":{"933":1}}],["comp",{"2":{"120":3,"121":3,"1946":1,"1957":1,"1969":1,"1981":1}}],["compcode",{"0":{"2268":1},"2":{"92":1,"94":2,"103":2,"742":1,"1240":1,"1914":3,"1946":1,"1957":1,"1958":2,"1969":1,"1981":1,"2005":1,"2268":1}}],["comp001",{"2":{"32":1,"92":1,"94":1,"103":1,"120":2,"121":2,"742":1}}],["comy",{"2":{"92":1,"93":1}}],["com5100",{"2":{"46":1,"649":1,"651":1,"652":1}}],["com",{"0":{"519":1,"525":1},"2":{"45":1,"92":1,"96":1,"171":2,"172":1,"229":1,"245":1,"255":1,"305":1,"307":1,"308":1,"329":1,"333":1,"371":1,"388":1,"408":1,"440":1,"441":1,"444":1,"449":1,"451":1,"482":1,"488":1,"516":1,"523":1,"555":1,"556":1,"690":2,"698":1,"740":1,"752":1,"753":1,"834":1,"910":1,"1172":2,"1278":1,"2050":1,"2052":1,"2053":1}}],["codes",{"2":{"1029":1}}],["codec",{"0":{"928":1},"2":{"928":2}}],["code",{"0":{"2195":1},"2":{"30":3,"32":1,"33":1,"44":1,"45":1,"94":3,"119":5,"120":6,"121":6,"122":1,"466":1,"649":2,"651":2,"663":1,"1027":4,"1034":1,"1035":4,"1036":1,"1043":2,"1077":2,"1184":1,"1286":1,"1310":1,"1333":1,"1529":1,"1718":2,"1946":2,"1957":2,"1969":7,"1973":1,"1981":1,"2025":1,"2192":3,"2216":3,"2251":1,"2252":1,"2253":1}}],["conn",{"2":{"732":6}}],["connectiontimeout",{"2":{"634":1}}],["connectionfactory",{"2":{"273":2,"274":2}}],["condition",{"2":{"308":1,"333":1,"753":1}}],["conditionalonproperty를",{"2":{"634":1}}],["conditionalonproperty",{"2":{"260":1,"634":1,"838":1}}],["containers",{"0":{"1789":1}}],["control",{"2":{"636":1,"827":1,"964":1}}],["controllertest",{"2":{"996":1}}],["controller",{"0":{"379":1,"572":2},"2":{"368":3,"377":1,"388":4,"396":1,"400":3,"406":1,"439":3,"440":4,"448":1,"455":1,"514":1,"516":4,"523":3,"529":3,"542":1,"554":6,"555":4,"556":3,"565":1,"598":3,"600":1,"614":1,"616":1,"646":1,"648":1,"676":1,"684":1,"686":1,"702":1,"704":1,"726":1,"728":1}}],["contextmenustore를",{"2":{"1073":1}}],["contextmenustore",{"0":{"1436":1},"1":{"1437":1,"1438":1,"1439":1,"1440":1},"2":{"1072":3,"1438":1,"1440":4,"1758":1}}],["context",{"2":{"242":1,"696":5,"1063":1,"2014":1}}],["contenttype",{"2":{"996":1}}],["contentsecuritypolicy",{"2":{"636":1,"825":1}}],["contentdisposition",{"2":{"165":1,"894":1}}],["content",{"0":{"825":1},"2":{"45":1,"46":2,"72":2,"74":1,"75":2,"76":2,"119":1,"217":1,"636":1,"652":2,"664":1,"732":1,"964":2,"996":1,"1089":1,"1269":1,"1275":1,"1280":1,"1326":1}}],["cont",{"2":{"92":1,"93":1,"94":1,"731":1,"742":1,"1949":1}}],["convert",{"0":{"71":1},"2":{"65":1,"71":2,"83":1,"190":1,"716":2}}],["config=",{"2":{"1020":1}}],["configuration>",{"2":{"296":2,"297":2}}],["configuration",{"2":{"260":1,"634":2,"635":1,"636":1,"637":1,"638":1,"675":1,"838":1}}],["config",{"0":{"148":1,"443":1,"445":1,"578":1,"750":1,"754":1,"1407":1,"1426":1,"1673":1,"2039":1},"1":{"579":1,"580":1,"581":1,"582":1,"583":1},"2":{"24":2,"239":2,"240":2,"263":6,"270":5,"271":5,"330":6,"434":1,"437":2,"439":1,"443":2,"445":4,"453":2,"473":1,"481":1,"490":1,"492":1,"551":6,"554":1,"568":1,"620":2,"621":1,"632":1,"634":1,"635":7,"636":1,"637":1,"638":1,"639":1,"642":1,"675":1,"747":2,"749":2,"750":2,"754":4,"773":3,"774":6,"843":6,"918":1,"1160":1,"1176":1,"1188":1,"1197":1,"1211":2,"1212":1,"1230":1,"1273":3,"1295":1,"1296":1,"1297":1,"1298":3,"1299":2,"1300":2,"1301":3,"1303":3,"1407":1,"1426":1,"1652":1,"1816":1,"1861":1,"1918":1}}],["consumes",{"2":{"869":1}}],["console에서",{"2":{"25":1}}],["console",{"2":{"22":1,"30":1,"56":1,"57":1,"94":2,"120":1,"121":1,"1029":1,"1035":1,"1036":1,"1063":1,"1279":3,"1311":1,"1314":3,"1319":4,"1338":1,"1341":3,"1361":1,"1385":1,"1387":1,"1434":1,"1516":2,"1523":3,"1527":1,"1528":1,"1532":4,"1533":1,"1535":1,"1538":1,"1554":2,"1556":1,"1566":2,"1567":1,"1568":1,"1585":1,"1593":1,"1609":1,"1614":1,"1635":1,"1702":1,"1707":1,"2220":1,"2224":1}}],["constants",{"2":{"1828":1}}],["const",{"2":{"0":1,"9":2,"22":1,"30":2,"45":3,"46":3,"56":1,"71":1,"72":1,"94":1,"103":1,"119":2,"120":1,"1016":1,"1020":1,"1027":2,"1029":4,"1035":4,"1036":1,"1040":1,"1043":1,"1056":2,"1063":1,"1072":2,"1097":5,"1105":1,"1112":1,"1119":1,"1126":3,"1140":2,"1151":2,"1157":2,"1185":1,"1194":1,"1209":1,"1212":4,"1219":1,"1220":2,"1230":1,"1233":1,"1242":1,"1244":1,"1248":1,"1250":4,"1259":1,"1273":4,"1276":2,"1278":2,"1279":1,"1280":1,"1281":2,"1295":1,"1297":1,"1299":7,"1314":1,"1317":2,"1318":1,"1326":1,"1337":2,"1341":1,"1342":2,"1349":2,"1350":1,"1352":2,"1358":1,"1360":1,"1366":1,"1382":1,"1385":2,"1387":3,"1388":3,"1389":2,"1399":2,"1410":4,"1420":3,"1426":1,"1428":2,"1434":1,"1440":1,"1445":2,"1454":2,"1458":1,"1460":1,"1463":5,"1464":1,"1468":2,"1475":1,"1480":3,"1515":2,"1516":1,"1517":1,"1518":1,"1519":2,"1523":1,"1525":1,"1526":2,"1527":1,"1528":1,"1529":1,"1530":1,"1533":1,"1534":1,"1535":2,"1536":4,"1537":3,"1538":4,"1543":1,"1546":2,"1547":2,"1548":4,"1552":1,"1556":1,"1566":1,"1567":2,"1583":1,"1584":1,"1585":2,"1588":2,"1593":1,"1609":5,"1613":6,"1614":1,"1615":1,"1629":1,"1630":1,"1632":1,"1633":2,"1635":2,"1699":1,"1702":3,"1704":2,"1705":3,"1706":4,"1707":2,"1783":3,"1784":4,"1785":1,"1837":1,"1845":1,"1861":1,"1879":1,"1880":1,"1882":2,"1884":2,"1886":1,"1887":1,"1893":1,"1895":1,"1898":1,"1904":1,"1911":2,"1912":1,"1914":2,"1915":1,"1917":1,"1918":2,"1920":4,"1921":1,"1922":4,"1949":2,"1957":3,"1958":4,"1969":3,"1974":2,"1981":3,"1986":1,"2001":1,"2005":1,"2069":1,"2078":3,"2087":1,"2120":2,"2124":1,"2146":2,"2147":1,"2157":1,"2196":1,"2205":1,"2208":1,"2209":2,"2216":1,"2222":2,"2224":5,"2225":2,"2226":1,"2233":3,"2262":4,"2269":2,"2276":1,"2282":1,"2283":2,"2319":2,"2325":1,"2326":1,"2332":2}}],["d6121607",{"2":{"1697":1}}],["dynamicstore",{"0":{"1441":1},"1":{"1442":1,"1443":1,"1444":1,"1445":1},"2":{"1443":1,"1445":5}}],["days",{"2":{"2224":2,"2253":1}}],["dangerous",{"2":{"1789":2}}],["danger",{"2":{"1789":2}}],["dark",{"2":{"1647":1,"2142":1}}],["dashforge",{"2":{"1639":1}}],["dashboard",{"0":{"1930":1,"1939":1},"2":{"1161":2,"1669":1,"1817":1,"1829":2,"1879":3,"1882":1,"1883":1,"1926":1,"1934":2}}],["datestr",{"0":{"2207":1,"2239":1},"2":{"2207":1}}],["datetime",{"2":{"1949":2,"2025":2}}],["datepicker",{"0":{"1841":1},"2":{"1637":1,"1834":1,"1841":1}}],["date",{"0":{"2208":1,"2209":1,"2240":1,"2242":1,"2244":1,"2245":1,"2246":1,"2277":1},"2":{"69":1,"71":3,"79":2,"179":1,"186":2,"708":1,"714":1,"1300":1,"2208":4,"2209":3,"2240":1,"2241":1,"2242":1,"2244":3,"2277":1,"2283":1}}],["datastartcolumn",{"2":{"2258":2}}],["datasourcebuilder",{"2":{"634":1}}],["datasource를",{"2":{"259":1,"838":1}}],["datasource",{"2":{"179":2,"199":2,"253":1,"255":1,"256":4,"257":1,"258":1,"260":1,"261":2,"268":1,"482":2,"483":2,"484":2,"490":1,"579":2,"634":7,"708":2,"834":4,"835":2,"836":2,"838":4,"840":3,"841":2,"850":1}}],["data=",{"2":{"1027":1,"1035":1,"1036":1,"1126":1,"1591":1,"1704":1}}],["dataend",{"2":{"974":1}}],["datalist",{"2":{"888":1}}],["datagrip",{"2":{"469":1}}],["database",{"0":{"573":2},"2":{"156":1,"250":1,"258":1,"268":2,"329":1,"371":1,"408":1,"439":1,"451":1,"484":1,"490":2,"554":1,"598":1,"601":1,"602":1,"835":1,"836":1,"850":2,"910":1}}],["data",{"0":{"2":1,"3":1,"44":1,"1215":1,"1216":1,"1242":1,"1417":1,"1451":1,"2194":1,"2218":1,"2231":1,"2232":1},"2":{"0":3,"9":1,"22":6,"30":5,"31":2,"43":1,"45":3,"46":1,"56":4,"57":4,"65":1,"71":4,"72":1,"75":2,"94":5,"103":5,"105":1,"119":1,"120":5,"121":3,"136":1,"137":1,"178":3,"182":1,"183":2,"197":1,"199":3,"224":1,"292":1,"324":1,"351":1,"352":1,"393":1,"402":1,"403":1,"530":2,"600":5,"623":1,"651":2,"704":1,"707":2,"708":1,"721":2,"722":2,"742":1,"783":1,"825":1,"883":3,"888":1,"913":1,"914":1,"1026":1,"1029":1,"1033":1,"1045":2,"1063":2,"1072":2,"1126":1,"1127":1,"1211":2,"1212":1,"1213":2,"1215":1,"1216":1,"1229":1,"1248":2,"1259":1,"1263":2,"1276":1,"1279":1,"1280":1,"1281":3,"1298":3,"1299":2,"1301":1,"1309":1,"1312":2,"1314":2,"1317":1,"1319":1,"1326":1,"1327":1,"1331":1,"1334":2,"1337":1,"1339":1,"1341":1,"1342":3,"1387":1,"1426":1,"1440":1,"1516":1,"1519":2,"1523":1,"1526":1,"1528":1,"1532":1,"1533":2,"1536":2,"1546":3,"1547":2,"1548":1,"1554":1,"1555":1,"1567":1,"1609":1,"1613":1,"1629":4,"1702":3,"1788":2,"1915":2,"2087":4,"2141":1,"2193":2,"2194":3,"2195":3,"2205":1,"2218":2,"2231":1,"2232":1,"2258":2,"2262":1,"2269":2}}],["drawer>",{"2":{"1464":1}}],["drawer",{"2":{"1464":1}}],["droptype",{"2":{"1033":1}}],["driverclassname",{"2":{"634":2}}],["driver",{"2":{"255":1,"257":1,"258":2,"482":1,"483":1,"484":2,"834":1,"835":1,"836":2}}],["d003",{"2":{"1027":1}}],["d002",{"2":{"1027":1}}],["d001",{"2":{"1027":1}}],["dd",{"2":{"558":2,"2006":1,"2241":1,"2246":1,"2247":1}}],["dskiptests",{"2":{"301":1}}],["dual",{"2":{"256":1,"834":1}}],["dts",{"2":{"1205":1,"1206":1}}],["dtd",{"2":{"308":3,"333":3,"413":3,"535":3,"753":3}}],["dtl",{"2":{"92":1,"93":1,"94":1}}],["dt",{"2":{"92":7,"93":7,"94":3,"731":1,"742":1}}],["dbeaver",{"2":{"469":1}}],["dbservice",{"2":{"318":2,"417":2,"418":1,"532":1,"593":2}}],["db별",{"0":{"263":1,"330":1,"843":1,"847":1}}],["db에",{"2":{"94":1,"649":1,"651":1}}],["db에서",{"2":{"87":1,"200":1,"723":1,"729":1}}],["db",{"0":{"316":1},"1":{"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1},"2":{"94":1,"223":2,"338":1,"439":1,"538":1,"540":2,"542":1,"544":1,"554":1,"573":1,"598":4,"658":1,"731":1}}],["dbname",{"2":{"56":1}}],["doubled",{"2":{"1585":1}}],["do",{"2":{"1347":1,"1348":2,"1370":1,"1606":1,"1607":1,"1625":1,"1626":1,"2292":2}}],["dofilterinternal",{"2":{"672":1}}],["dofilter",{"2":{"670":2,"671":2,"672":1}}],["downloadfile",{"2":{"165":1,"894":1}}],["download",{"2":{"46":1,"165":1,"894":1,"1281":2,"1342":2,"1519":2,"1546":2,"1547":1,"2269":2}}],["docs",{"0":{"537":1,"1751":1},"1":{"538":1,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"1752":1,"1753":1,"1754":1,"1755":1,"1756":1,"1757":1,"1758":1,"1759":1,"1760":1,"1761":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1,"1778":1,"1779":1,"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1},"2":{"866":1,"867":1,"869":2}}],["doctype",{"2":{"308":1,"333":1,"413":1,"535":1,"753":1}}],["document",{"2":{"46":2,"119":1,"970":2,"1281":2,"1342":2,"1519":2,"1546":2,"2218":1,"2233":1,"2269":2}}],["documentation",{"2":{"5":1,"1790":1}}],["doc001",{"2":{"45":1,"663":1}}],["doc",{"2":{"45":1,"663":1,"970":3}}],["digits",{"0":{"2308":1}}],["diff",{"2":{"2210":1}}],["div",{"2":{"1588":1,"1600":1,"1609":1}}],["div>",{"2":{"1250":2,"1463":2,"1588":1,"1600":1,"1609":1,"1699":2,"1882":2,"1883":2,"1885":2,"2078":2,"2225":2}}],["dialog>",{"2":{"1428":1}}],["dialog",{"2":{"1428":1}}],["dist",{"2":{"1183":1,"1483":1,"1504":1,"1506":1,"1511":1,"1652":1,"1740":1,"1816":1,"1833":1,"1847":2,"2112":1,"2135":1}}],["dispatcherservlet",{"2":{"676":1}}],["disposition",{"2":{"46":1,"72":1,"75":1,"76":1,"652":1,"1275":1,"1326":4}}],["disabled",{"2":{"1033":1}}],["disable",{"2":{"636":1,"822":1,"948":1}}],["dirs",{"2":{"1205":1,"1206":1}}],["dirpath",{"2":{"167":1,"896":1}}],["directory>",{"2":{"297":1}}],["directory>$",{"2":{"297":1}}],["direct",{"2":{"28":1,"30":2,"31":2,"32":1,"33":1,"34":1,"54":1,"56":2,"57":2,"63":1,"65":1,"71":3,"72":2,"73":1,"74":1,"75":1,"76":2,"182":1,"183":1,"224":1,"704":7,"721":1,"722":1,"1957":1,"1969":1,"1981":1,"2003":1}}],["d",{"2":{"45":3,"49":1,"122":1,"249":3,"494":3,"651":1,"655":1,"658":2,"1205":1,"1206":1,"1579":1,"1697":1,"1817":2,"2055":1,"2056":1}}],["deal",{"2":{"1981":6}}],["deep",{"2":{"1638":1}}],["decpoint",{"0":{"2212":1,"2303":1},"2":{"2212":1}}],["decimals",{"0":{"2212":1,"2303":1},"2":{"2212":1}}],["decodeuricomponent",{"2":{"1326":1}}],["decryptobject",{"0":{"1216":1,"2232":1},"2":{"1213":1,"1220":2,"2232":1}}],["decryptfilter",{"2":{"675":1}}],["decrypted",{"2":{"205":1,"206":1,"223":2,"595":1,"609":1,"786":1,"789":1,"955":1,"956":1,"1220":1,"2232":1}}],["decrypt",{"2":{"65":1,"68":1,"71":1,"84":1,"87":1,"103":2,"191":1,"200":1,"205":1,"206":1,"219":1,"223":1,"224":1,"595":1,"609":1,"671":1,"723":1,"786":1,"789":1,"955":1,"956":1,"1209":1,"1213":1,"1219":1,"1240":1,"1283":1,"1296":2}}],["details",{"2":{"1789":4}}],["detail",{"2":{"1435":1}}],["detail>",{"2":{"197":2}}],["detector",{"2":{"974":4}}],["definestore",{"2":{"1629":2,"1922":2,"2087":2}}],["defineemits",{"2":{"1584":1,"1588":1,"1613":1}}],["defineprops",{"2":{"1583":1,"1588":1,"1613":1}}],["defineconfig",{"2":{"1185":1}}],["defaultval",{"0":{"2205":1},"2":{"2205":2}}],["defaultlayoutwithverticalnav",{"2":{"1994":1}}],["defaulttheme",{"2":{"1898":1}}],["defaultset",{"2":{"1898":1}}],["defaults",{"0":{"1899":1},"2":{"1891":1,"1898":3}}],["defaultcoldef",{"2":{"1705":2}}],["defaultcoldef=",{"2":{"1705":1}}],["default>",{"2":{"1594":1}}],["defaultoption",{"2":{"1026":1,"1033":1}}],["default",{"0":{"2029":1},"2":{"825":1,"869":2,"1027":1,"1035":1,"1097":1,"1185":1,"1349":1,"1366":1,"1536":1,"1583":1,"1704":1,"1788":2,"1879":1,"1883":1,"1893":1,"1895":1,"1898":1,"1905":1,"1921":1,"1994":1,"2156":4}}],["def456",{"2":{"50":1,"660":1}}],["debian",{"2":{"489":1}}],["debug",{"2":{"156":2,"250":2,"993":2}}],["deny",{"2":{"217":1,"636":2,"826":1}}],["describe",{"2":{"2146":1,"2147":1,"2156":2,"2157":1}}],["description",{"2":{"421":5,"859":5,"861":1,"862":1,"863":1,"864":4,"1035":3}}],["designer",{"2":{"757":1}}],["design",{"2":{"180":2,"199":2,"709":2,"1680":1,"1684":1,"1773":1,"1900":1,"2064":1}}],["destphone",{"2":{"732":1}}],["dest",{"2":{"163":2,"891":2,"982":1}}],["dependency>",{"2":{"628":2,"759":2,"835":2,"836":2,"904":2,"905":2,"906":2,"927":2,"928":2,"929":2}}],["departmentoptions",{"2":{"1043":1,"1077":1}}],["department",{"2":{"1043":1,"1057":1,"1077":1}}],["departments",{"2":{"1029":1}}],["depart",{"2":{"92":1,"93":1}}],["deptname",{"2":{"1609":1}}],["dept01",{"2":{"30":1}}],["dept",{"2":{"30":1,"1949":1,"1969":2}}],["delimiter",{"0":{"2207":1,"2239":1},"2":{"2207":1}}],["delhashkeys",{"2":{"602":1}}],["delredistoken",{"2":{"281":1,"323":1,"602":1}}],["delredishashdata",{"2":{"57":2}}],["delete",{"2":{"305":1,"637":1,"1063":2,"1435":1}}],["deleteone",{"2":{"167":1,"896":1}}],["deletedcount",{"2":{"57":3}}],["devtools",{"2":{"1199":1}}],["development",{"0":{"1171":1},"2":{"1167":1,"1735":1}}],["dev",{"0":{"96":1,"268":1,"362":1,"537":1,"1751":1},"1":{"538":1,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"1752":1,"1753":1,"1754":1,"1755":1,"1756":1,"1757":1,"1758":1,"1759":1,"1760":1,"1761":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1,"1778":1,"1779":1,"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1},"2":{"51":1,"239":1,"253":1,"394":1,"443":1,"452":1,"462":1,"463":1,"464":1,"465":1,"473":1,"481":1,"490":1,"492":1,"509":1,"542":1,"551":1,"642":1,"643":1,"750":1,"773":1,"999":1,"1180":1,"1489":1,"1617":1,"1696":1,"1736":1,"1738":1,"2048":1}}],["demonstrates",{"2":{"0":1,"1787":1}}],["ss",{"2":{"2241":1,"2247":1}}],["ssd",{"2":{"1723":1}}],["syntax",{"0":{"1788":1},"2":{"1788":1}}],["sysnewesslog",{"2":{"2025":1}}],["sys5300",{"0":{"1967":1},"2":{"1962":1}}],["sys5400",{"2":{"103":1,"114":1}}],["sys1710",{"0":{"1966":1},"2":{"1962":1}}],["sys1200",{"0":{"1965":1},"2":{"1962":1}}],["sysmessagesend",{"2":{"731":1,"1949":2}}],["systempath>",{"2":{"759":1}}],["systempath>$",{"2":{"759":1}}],["system",{"2":{"293":1,"834":1}}],["sys",{"0":{"527":1,"1964":1},"1":{"1965":1,"1966":1,"1967":1},"2":{"127":1,"441":1,"523":1,"556":1,"1962":1}}],["switch",{"2":{"1536":1}}],["switchtotab",{"2":{"1480":1}}],["switchtab",{"0":{"1476":1},"2":{"1480":1}}],["swallow",{"2":{"242":1}}],["swagger에",{"2":{"395":1}}],["swagger",{"0":{"144":1,"395":1,"420":1,"872":1},"1":{"421":1,"422":1,"423":1},"2":{"144":2,"294":1,"353":1,"395":1,"396":1,"422":1,"506":2,"542":3,"543":1,"856":1,"857":2,"869":2,"872":1,"873":1,"921":2}}],["svg",{"2":{"1199":1}}],["svgloader",{"2":{"1199":1}}],["space",{"2":{"2174":1}}],["spacer>",{"2":{"1609":2}}],["span>",{"2":{"1609":1}}],["span>직원",{"2":{"1609":1}}],["splitting",{"2":{"1184":1}}],["spring의",{"2":{"891":1}}],["springboottest",{"2":{"989":1,"996":1}}],["springbootservletinitializer",{"2":{"370":1,"451":1}}],["springbootapplication",{"2":{"370":1,"451":1}}],["springdoc",{"0":{"854":1,"919":1},"1":{"855":1,"856":1,"857":1,"920":1,"921":1},"2":{"294":1,"433":1,"853":1,"855":1,"920":1}}],["springframework",{"2":{"286":1,"296":1,"904":1,"905":1,"906":1}}],["spring",{"0":{"159":1,"216":1,"286":1,"292":1,"296":1,"689":1,"763":1,"777":1,"779":1,"820":1,"901":1,"904":1,"905":1,"906":1,"915":1,"947":1},"1":{"217":1,"690":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"902":1,"903":1,"904":1,"905":1,"906":1,"916":1,"917":1,"918":1,"948":1,"949":1,"950":1},"2":{"22":1,"169":1,"203":1,"217":1,"226":1,"240":1,"289":6,"292":6,"293":1,"425":1,"428":1,"433":2,"451":1,"452":1,"453":1,"482":1,"483":1,"484":1,"502":2,"505":1,"538":2,"539":1,"540":2,"543":2,"551":2,"554":1,"581":1,"631":1,"632":1,"636":1,"644":1,"675":1,"676":1,"747":1,"749":1,"750":3,"763":1,"778":1,"783":1,"820":1,"834":1,"835":1,"836":1,"902":1,"908":1,"916":2,"948":1,"964":1}}],["sdk",{"0":{"975":1},"1":{"976":1,"977":1,"978":1}}],["slf4j",{"2":{"913":1}}],["slist의",{"2":{"665":1}}],["slist에서",{"2":{"51":1}}],["slist는",{"2":{"51":1}}],["slist",{"0":{"45":1},"2":{"44":1,"45":1,"51":1,"651":2,"663":1,"665":1}}],["snackbar>",{"2":{"1537":1}}],["snackbar를",{"2":{"1537":1}}],["snackbarstore",{"2":{"1317":3}}],["snackbar",{"0":{"1537":1},"2":{"1317":1,"1537":6}}],["snake",{"2":{"449":1,"1571":1,"1582":1,"1612":1,"1676":1,"1828":1}}],["snapshot",{"2":{"285":1,"300":1,"341":1,"497":1,"503":1,"557":1}}],["sql",{"0":{"312":1},"1":{"313":1,"314":1},"2":{"310":1,"335":1,"336":1,"836":1,"909":2,"1024":1,"1762":1,"2005":1,"2007":1}}],["sqlsessiontemplateref",{"2":{"329":1,"371":1,"910":1}}],["sqlsessiontemplate",{"2":{"261":2,"329":1,"371":1,"579":2,"838":2,"910":1}}],["sqlsessionfactoryref",{"2":{"329":1,"371":1,"910":1}}],["sqlsessionfactory",{"2":{"261":2,"329":1,"371":1,"579":2,"634":1,"838":2,"910":1}}],["should",{"2":{"2146":2,"2147":1,"2151":1,"2156":2,"2157":1}}],["showalert",{"2":{"1538":3}}],["showerror",{"2":{"1537":2}}],["showloading",{"0":{"1397":1},"2":{"1272":1,"1273":1,"1294":1,"1399":1,"1609":1,"1615":1,"1706":1,"1784":1,"1912":2,"1920":1,"2001":1}}],["show",{"2":{"1072":1,"1317":1,"1440":1,"1537":3}}],["shiki",{"2":{"1788":1}}],["sheetname",{"2":{"2258":2}}],["sheet1",{"2":{"879":1,"1548":1,"2258":1,"2262":1}}],["sheet",{"2":{"879":3}}],["shutdown",{"2":{"242":1}}],["shaking",{"2":{"1184":1}}],["shallowref",{"2":{"1097":1}}],["share",{"2":{"460":1}}],["sharing",{"2":{"459":1}}],["sha256util",{"2":{"209":2,"793":2,"959":2}}],["sha",{"0":{"209":1,"793":1,"959":1},"2":{"575":1,"598":1,"609":1}}],["safari",{"2":{"1719":1}}],["safevalue",{"2":{"212":1,"678":1,"1707":1,"1783":1}}],["saveddata",{"2":{"2332":1}}],["savetoindexeddb",{"0":{"2325":1},"2":{"2325":2,"2332":1}}],["saveas",{"2":{"1547":1,"1548":1,"2262":1}}],["saver",{"2":{"1547":1,"1548":1,"2111":1,"2134":1,"2262":1}}],["save",{"2":{"1434":1,"1435":1,"1879":3,"1882":1,"1883":1}}],["saveuser",{"2":{"223":1}}],["sanitize",{"2":{"961":1}}],["sanitized",{"2":{"961":1}}],["samesite=none",{"2":{"103":2}}],["sftp",{"2":{"598":1}}],["sf",{"2":{"197":1,"898":2}}],["submit",{"2":{"2151":1}}],["subscribetokenrefresh",{"2":{"1261":1,"1276":1,"1336":1}}],["subject",{"2":{"172":1,"692":2,"693":2,"694":2,"696":2}}],["successfully",{"2":{"2151":1}}],["success",{"2":{"698":1}}],["sudo",{"2":{"489":1}}],["summary",{"2":{"421":1,"859":1,"862":1}}],["surl",{"2":{"65":1,"70":3,"81":1,"188":1,"715":1}}],["smtp를",{"2":{"688":1,"698":1}}],["smtp",{"2":{"171":2,"690":2,"699":1}}],["smstemplate",{"2":{"1157":1}}],["smsservice",{"2":{"230":2}}],["sms",{"0":{"89":1,"92":1,"95":1,"227":1,"591":2,"725":1,"730":1,"1152":1},"1":{"90":1,"91":1,"92":1,"93":2,"94":2,"95":1,"96":2,"97":1,"98":1,"99":1,"228":1,"229":1,"230":1,"231":1,"726":1,"727":1,"728":1,"729":1,"730":1,"731":2,"732":2,"733":1,"734":1,"735":1,"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1},"2":{"26":1,"88":1,"89":1,"92":2,"93":2,"94":5,"96":1,"130":1,"141":1,"173":1,"227":1,"229":1,"429":1,"439":2,"541":1,"554":2,"568":2,"591":4,"700":1,"724":1,"725":1,"726":4,"728":4,"729":4,"731":1,"737":2,"740":1,"742":1,"745":2,"1154":1,"1156":1,"1157":1,"1764":2,"1942":1,"1949":5,"2026":2}}],["silenterror",{"2":{"1311":3,"1338":2,"1527":2}}],["silent",{"0":{"1311":1,"1338":1},"2":{"1311":1,"1338":1}}],["sidebarstore는",{"2":{"1456":1}}],["sidebarstore",{"0":{"1455":1,"1917":1},"1":{"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1},"2":{"1457":1,"1460":5,"1463":6,"1464":5,"1468":3,"1660":1,"1909":1,"1917":4}}],["sidebar",{"2":{"1089":1}}],["signwith",{"2":{"933":1}}],["simplemailmessage",{"2":{"692":2}}],["simpleoutputstreamexporteroutput",{"2":{"180":1,"199":1,"710":1}}],["simpleexporterinput",{"2":{"180":1,"199":1,"710":1}}],["size=4096",{"2":{"2174":1}}],["size=",{"2":{"195":1,"197":3}}],["size",{"2":{"164":2,"242":2,"248":2,"892":2,"1641":1,"1710":1}}],["site",{"2":{"0":1,"670":1,"1969":2,"1973":1}}],["sc",{"2":{"1981":16,"1989":2}}],["scss",{"0":{"1640":1},"1":{"1641":1,"1642":1,"1643":1,"1644":1},"2":{"1581":1,"1588":1,"1600":1,"1609":1,"1638":1,"1641":1,"1643":2,"1644":1,"1710":1,"1772":1}}],["screendata",{"2":{"1445":1}}],["screen",{"2":{"1445":3}}],["scripting",{"2":{"670":1}}],["script>",{"2":{"0":1,"1016":1,"1020":1,"1027":1,"1029":1,"1035":1,"1036":1,"1040":1,"1043":1,"1056":1,"1072":1,"1105":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1219":1,"1250":1,"1352":1,"1385":1,"1387":1,"1388":1,"1389":1,"1399":1,"1410":1,"1420":1,"1428":1,"1454":1,"1463":1,"1464":1,"1480":1,"1537":1,"1578":1,"1581":1,"1583":1,"1584":1,"1585":1,"1588":1,"1593":1,"1600":1,"1609":1,"1613":1,"1635":1,"1699":1,"1702":1,"1704":1,"1705":1,"1706":1,"1707":1,"1837":1,"1845":1,"1855":1,"1882":1,"1883":2,"1884":1,"1887":1,"1920":1,"1921":2,"1974":1,"2005":1,"2078":1,"2120":1,"2222":1,"2224":1,"2225":1,"2226":1,"2319":1}}],["script",{"0":{"1668":1,"1819":1},"2":{"0":1,"825":1,"1016":1,"1020":1,"1027":1,"1029":1,"1035":1,"1036":1,"1040":1,"1043":1,"1056":1,"1072":1,"1105":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1219":1,"1250":1,"1352":1,"1385":1,"1387":1,"1388":1,"1389":1,"1399":1,"1410":1,"1420":1,"1428":1,"1454":1,"1463":1,"1464":1,"1480":1,"1537":1,"1558":1,"1578":1,"1581":1,"1583":1,"1584":1,"1585":1,"1588":1,"1593":1,"1600":1,"1609":1,"1611":1,"1613":1,"1635":1,"1652":1,"1699":1,"1702":1,"1704":1,"1705":1,"1706":1,"1707":1,"1810":1,"1817":1,"1837":1,"1845":1,"1852":1,"1853":1,"1855":2,"1882":1,"1884":1,"1887":1,"1920":1,"1974":1,"2005":1,"2077":1,"2078":1,"2120":1,"2222":1,"2224":1,"2225":1,"2226":1,"2319":1}}],["scope=",{"2":{"1973":1}}],["scoped",{"2":{"1581":1,"1588":1,"1600":1,"1609":1,"1638":1,"1641":1,"1710":1}}],["scoped>",{"2":{"1044":1,"1558":1}}],["scope로",{"2":{"834":1}}],["scope>",{"2":{"759":1}}],["scope>system",{"2":{"759":1}}],["scope",{"2":{"293":1}}],["schemalocation=",{"2":{"197":1}}],["scheduled",{"2":{"96":1,"229":1,"740":1}}],["src에",{"2":{"2268":1}}],["srcharea",{"2":{"1973":1}}],["srch",{"2":{"1969":6,"1973":1}}],["src=",{"2":{"1837":2,"1844":1,"1845":1}}],["src",{"0":{"560":1,"561":1,"562":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1817":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1856":1},"1":{"1655":1,"1656":1,"1657":1,"1659":1,"1660":1,"1661":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1863":1,"1864":1,"1865":1,"1866":1},"2":{"85":1,"86":1,"119":1,"177":1,"193":1,"221":1,"239":1,"297":1,"307":1,"368":2,"374":2,"409":1,"414":1,"434":2,"437":1,"473":1,"478":1,"481":1,"485":1,"490":1,"492":1,"549":1,"551":1,"552":1,"620":1,"641":1,"642":1,"680":1,"711":1,"719":1,"746":1,"759":1,"761":1,"763":1,"765":1,"825":4,"834":1,"887":1,"889":1,"1005":1,"1010":1,"1015":1,"1019":1,"1025":1,"1032":1,"1039":1,"1042":1,"1049":1,"1051":1,"1053":1,"1061":1,"1068":1,"1076":1,"1081":1,"1087":1,"1095":1,"1097":1,"1099":1,"1103":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1161":6,"1163":1,"1201":2,"1205":2,"1206":3,"1268":1,"1348":1,"1349":1,"1365":1,"1370":1,"1378":1,"1394":1,"1403":1,"1414":1,"1423":1,"1432":1,"1438":1,"1443":1,"1448":1,"1457":1,"1472":1,"1560":1,"1561":1,"1562":1,"1577":3,"1579":1,"1587":1,"1598":5,"1599":1,"1602":1,"1607":1,"1621":1,"1626":1,"1628":1,"1642":1,"1652":1,"1699":2,"1700":1,"1794":1,"1795":1,"1796":1,"1801":1,"1806":1,"1807":1,"1808":1,"1809":1,"1810":1,"1813":1,"1816":1,"1817":1,"1829":6,"1831":1,"1852":1,"1853":1,"1857":1,"1858":1,"1869":1,"1876":1,"1877":1,"1890":1,"1891":1,"1904":1,"1905":4,"1908":1,"1909":1,"1926":1,"1934":1,"1942":1,"1962":1,"1978":1,"1993":1,"1994":1,"2055":1,"2056":2,"2067":1,"2087":1,"2090":1,"2094":1,"2128":1,"2201":1,"2272":1,"2273":1,"2323":1}}],["sortable",{"2":{"1705":1}}],["socialnum",{"2":{"223":6}}],["social",{"2":{"65":1,"68":1,"71":1,"84":2,"191":1,"224":1}}],["sources",{"2":{"557":1}}],["sourceforge",{"2":{"197":3}}],["source",{"2":{"44":2,"45":2,"649":4,"651":4,"663":2,"982":1}}],["some",{"2":{"0":1,"1787":1}}],["serp",{"2":{"1981":5}}],["servicetest",{"2":{"989":1}}],["service",{"0":{"380":1},"2":{"199":1,"223":1,"368":3,"377":1,"385":1,"388":4,"396":1,"400":7,"406":1,"417":3,"439":2,"440":4,"448":1,"455":1,"514":1,"516":4,"523":3,"529":7,"532":3,"542":1,"554":5,"555":4,"556":3,"565":1,"598":2,"600":1,"601":1,"602":1,"603":1,"614":1,"617":2,"618":1,"625":1,"646":1,"649":2,"684":1,"687":1,"692":1,"693":1,"696":1,"702":1,"705":1,"726":1,"729":2,"989":1,"1664":1,"1689":1,"1864":1,"1941":1}}],["servletresponse",{"2":{"670":1,"671":1}}],["servletrequest",{"2":{"670":1,"671":1}}],["servlet",{"2":{"164":1,"242":1,"248":1,"892":1}}],["serverfilename",{"2":{"2267":2}}],["serverfilepath",{"2":{"649":2}}],["server",{"2":{"33":4,"45":6,"138":1,"459":1,"471":1,"488":1,"489":2,"509":1,"611":1,"1168":1,"1189":1,"1200":1,"1202":1,"1695":1,"1726":1,"1734":1}}],["searchdata",{"2":{"1969":6,"1973":1,"1981":8,"1989":2}}],["search",{"2":{"1435":1,"1649":1,"2062":1}}],["self",{"2":{"825":4,"1664":1,"1689":1,"1864":1,"1941":1}}],["select=",{"2":{"1983":1,"2003":1,"2009":1}}],["selecteddept",{"2":{"2009":1}}],["selecteddata",{"2":{"2003":1}}],["selecteddate",{"2":{"1040":2,"2006":1}}],["selectedcustomer",{"2":{"1983":1}}],["selectedvalue",{"2":{"1020":1,"1027":4,"1028":2,"1029":1,"1035":2,"1036":1,"1704":2,"2005":1}}],["selectbox",{"2":{"1752":1}}],["selectboxdate",{"0":{"1037":1,"2006":1},"1":{"1038":1,"1039":1,"1040":1},"2":{"1039":1,"1040":1,"1994":1,"2006":1}}],["selectboxsql",{"0":{"1023":1,"1704":1,"2005":1},"1":{"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1},"2":{"1025":1,"1027":1,"1573":1,"1591":1,"1676":1,"1704":1,"1762":1,"1826":1,"1973":1,"1994":1,"2005":1}}],["select>",{"2":{"308":1,"310":1,"311":1,"313":1,"314":1,"333":1,"335":1,"336":1,"337":1,"413":1,"535":1,"753":1}}],["selectlist",{"2":{"305":1,"308":1,"313":1,"314":1,"332":1,"333":1,"412":1,"413":1,"534":1,"535":1,"753":1}}],["select",{"0":{"2004":1},"1":{"2005":1,"2006":1,"2007":1},"2":{"256":1,"308":2,"310":1,"311":1,"313":2,"314":2,"333":2,"335":1,"336":1,"337":1,"413":2,"535":2,"753":2,"834":1,"841":1,"970":1,"986":1,"1022":1,"1025":1,"1032":1,"1039":1,"1994":1,"2141":1}}],["separator=",{"2":{"314":1}}],["secret",{"2":{"243":1,"492":1,"946":1}}],["securityfilterchain",{"0":{"821":1,"948":1},"1":{"822":1,"823":1},"2":{"636":2,"822":2,"948":2}}],["security를",{"2":{"581":1,"820":1,"948":1,"964":1}}],["security",{"0":{"216":1,"246":1,"575":2,"587":2,"779":1,"820":1,"825":1,"915":1,"947":1},"1":{"217":1,"247":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"916":1,"917":1,"918":1,"948":1,"949":1,"950":1},"2":{"203":1,"217":3,"226":1,"292":1,"394":1,"428":1,"433":1,"439":3,"540":2,"542":1,"543":1,"554":3,"598":1,"632":1,"636":3,"644":1,"668":1,"670":1,"671":1,"675":1,"676":2,"770":1,"827":1,"916":1,"964":2}}],["securitycontextholder",{"2":{"672":1}}],["securitycontext에",{"2":{"215":1,"672":1,"803":1,"952":1}}],["securitycontext",{"2":{"105":1}}],["secure",{"2":{"103":2}}],["sendcont",{"2":{"732":1}}],["sendmessage",{"2":{"732":1}}],["sendmail",{"2":{"172":1}}],["sendtelno",{"2":{"1949":1}}],["sendtel",{"2":{"732":1}}],["sendtemplatedemail",{"2":{"696":1}}],["sendphone",{"2":{"732":1}}],["sendsmtp",{"2":{"698":2}}],["sendsms",{"2":{"96":1,"229":1,"740":1}}],["sendhtmlemail",{"2":{"693":1,"696":1}}],["sendemailwithattachment",{"2":{"694":1}}],["sendemail",{"2":{"692":1}}],["send",{"2":{"92":2,"93":2,"94":2,"692":1,"693":1,"694":1,"742":1,"1949":3}}],["sessionstore를",{"2":{"1958":1}}],["sessionstore는",{"2":{"1447":1}}],["sessionstore",{"0":{"1446":1,"1914":1},"1":{"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"1452":1,"1453":1,"1454":1},"2":{"1209":4,"1211":1,"1213":1,"1219":4,"1242":3,"1243":1,"1244":2,"1245":1,"1248":1,"1249":1,"1250":5,"1273":2,"1283":3,"1296":2,"1298":1,"1448":1,"1454":4,"1660":1,"1758":1,"1784":2,"1817":1,"1909":1,"1914":4,"1946":3,"1957":5,"1958":5,"1969":2,"1981":2,"2123":1,"2234":2}}],["sessionstorage",{"2":{"103":2,"105":1}}],["sessiondata",{"2":{"103":5,"1248":1,"1914":1}}],["sessioninfo",{"0":{"94":1},"2":{"92":1,"94":1,"230":1,"729":1,"731":1,"742":1}}],["session",{"0":{"906":1},"2":{"56":3,"906":2,"1251":2,"1449":1}}],["seq가",{"2":{"123":1}}],["seq`",{"2":{"46":1}}],["seq로",{"2":{"46":1,"652":1}}],["seq",{"2":{"45":13,"46":3,"120":3,"121":5,"652":1,"663":2,"664":1}}],["setdata",{"2":{"1629":1,"1630":1,"2087":1}}],["setdatabase",{"2":{"270":1,"271":1,"635":1}}],["setup",{"2":{"1611":1,"1921":1,"2077":1}}],["setup>",{"2":{"0":1,"1016":1,"1020":1,"1027":1,"1029":1,"1035":1,"1036":1,"1040":1,"1043":1,"1056":1,"1072":1,"1105":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1219":1,"1250":1,"1352":1,"1385":1,"1387":1,"1388":1,"1389":1,"1399":1,"1410":1,"1420":1,"1428":1,"1454":1,"1463":1,"1464":1,"1480":1,"1537":1,"1558":1,"1578":1,"1581":1,"1583":1,"1584":1,"1585":1,"1588":1,"1593":1,"1600":1,"1609":1,"1613":1,"1635":1,"1699":1,"1702":1,"1704":1,"1705":1,"1706":1,"1707":1,"1837":1,"1845":1,"1855":1,"1882":1,"1884":1,"1887":1,"1920":1,"1974":1,"2005":1,"2078":1,"2120":1,"2222":1,"2224":1,"2225":1,"2226":1,"2319":1}}],["setbutton",{"2":{"1434":1}}],["setbmk",{"0":{"1418":1}}],["setexpiration",{"2":{"933":1}}],["setexporteroutput",{"2":{"180":1,"199":1,"710":1}}],["setexporterinput",{"2":{"180":1,"199":1,"710":1}}],["setcurrentmenu",{"2":{"1913":1}}],["setcellvalue",{"2":{"879":1}}],["setconnectionfactory",{"2":{"635":1}}],["setconnectiontimeout",{"2":{"256":1,"634":1,"840":1}}],["setconnectiontestquery",{"2":{"256":1,"834":1,"841":1}}],["setcontentdisposition",{"2":{"165":1,"894":1}}],["setcontenttype",{"2":{"165":1,"829":1,"830":1,"894":1}}],["setstate",{"2":{"1922":2}}],["setstatus",{"2":{"829":1,"830":1}}],["setscreendata",{"2":{"1445":1}}],["setsessionvalue",{"2":{"1914":2}}],["setsessiondata",{"0":{"1242":1,"1451":1},"2":{"1242":1,"1248":1}}],["setsessionkey",{"0":{"1243":1,"1452":1},"2":{"1209":2,"1219":2,"1243":2,"1283":2,"1454":1,"2234":1}}],["setsubject",{"2":{"692":1,"693":1,"694":1,"933":1}}],["setrequestproperty",{"2":{"732":2}}],["setrequestmethod",{"2":{"732":1}}],["setredistoken",{"2":{"279":1,"321":1,"594":1,"602":1,"818":1}}],["setvariables",{"2":{"696":1}}],["setvalueserializer",{"2":{"277":1,"635":1}}],["setvalidationtimeout",{"2":{"256":1,"840":1}}],["settimeout",{"2":{"1318":1,"1534":1}}],["setter",{"2":{"913":1}}],["settext",{"2":{"692":1,"693":1,"694":1}}],["setto",{"2":{"692":1,"693":1,"694":1}}],["setactivepinia",{"2":{"2147":2,"2157":2}}],["setactivetab",{"2":{"1916":1}}],["setaccesstoken",{"0":{"1382":1},"2":{"1229":1,"1233":1,"1248":1,"1259":1,"1263":1,"1276":1,"1337":1,"1382":1,"1387":1,"1634":1,"1911":2,"1920":1,"2157":1,"2167":1}}],["setauthentication",{"2":{"672":1}}],["setattribute",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["setorder",{"2":{"638":1,"675":2,"799":1}}],["setfilter",{"2":{"638":1,"675":2,"799":1}}],["setproperty",{"2":{"982":1}}],["setpassword",{"2":{"635":1}}],["setport",{"2":{"270":1,"271":1,"635":1}}],["set",{"2":{"356":1,"2157":1}}],["sethashvalueserializer",{"2":{"277":1}}],["sethashkeyserializer",{"2":{"276":1}}],["sethostname",{"2":{"270":1,"271":1,"635":1}}],["setkeyserializer",{"2":{"276":1,"635":1}}],["setmenulist",{"2":{"1913":1}}],["setmenudata",{"0":{"1417":1}}],["setmapperlocations",{"2":{"264":1}}],["setmaximumpoolsize",{"2":{"256":1,"634":1,"834":1,"840":1,"841":1}}],["setminimumidle",{"2":{"256":1,"634":1,"834":1,"840":1,"841":1}}],["setitem",{"2":{"9":1,"103":3}}],["s",{"2":{"22":2,"30":2,"31":1,"34":1,"45":1,"56":2,"57":2,"71":2,"94":2,"103":2,"105":4,"120":2,"121":2,"136":1,"351":1,"402":1,"530":1,"623":1,"649":1,"651":2,"721":1,"731":1,"742":1,"1029":1,"1229":1,"1248":1,"1279":1,"1339":2,"1341":1,"1387":1,"1516":1,"1523":1,"1554":1,"1555":2,"1609":1,"1702":1,"1785":1,"1949":2,"2025":1}}],["studio",{"2":{"1718":1}}],["storage",{"2":{"1251":1,"1629":1,"2087":1}}],["stores",{"0":{"1660":1,"1758":1,"1821":1},"2":{"1016":1,"1072":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":1,"1209":1,"1219":1,"1233":1,"1242":1,"1250":1,"1317":1,"1378":1,"1382":1,"1385":1,"1387":1,"1388":1,"1389":1,"1394":1,"1399":1,"1403":1,"1410":1,"1414":1,"1420":1,"1423":1,"1426":1,"1428":1,"1432":1,"1434":1,"1438":1,"1440":1,"1443":1,"1445":1,"1448":1,"1454":1,"1457":1,"1460":1,"1463":1,"1464":1,"1468":2,"1472":1,"1475":1,"1480":1,"1535":1,"1562":1,"1609":1,"1628":1,"1630":1,"1632":1,"1635":1,"1706":2,"1817":1,"1830":1,"1858":1,"1865":1,"1908":1,"1909":1,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":2,"1921":1,"1958":1,"2001":1,"2087":1,"2124":1,"2157":1}}],["store",{"2":{"827":1,"1570":1,"1613":1,"1676":1,"2147":2,"2157":3}}],["styles",{"2":{"1161":2,"1642":1,"1643":1,"1644":1,"1829":2}}],["style=",{"2":{"1056":1,"1609":1,"1705":1,"1973":2}}],["style>",{"2":{"1044":1,"1581":1,"1588":1,"1600":1,"1609":1,"1638":1,"1641":1,"1710":1}}],["style",{"2":{"825":1,"1034":2,"1035":3,"1044":1,"1558":1,"1581":1,"1588":1,"1600":1,"1609":1,"1611":1,"1638":1,"1641":1,"1710":1,"1879":2}}],["stel",{"2":{"96":1,"229":1,"740":1}}],["staging",{"2":{"1167":1,"1181":1,"1509":1,"1510":1,"1735":1,"1739":1}}],["standardcharsets",{"2":{"165":1,"894":1}}],["state",{"0":{"1379":1,"1395":1,"1404":1,"1415":1,"1424":1,"1449":1,"1458":1,"1473":1},"1":{"1380":1},"2":{"1629":3,"1922":5,"1949":1,"1969":2,"2087":3}}],["statementtype=",{"2":{"310":1,"311":1,"335":1,"336":1,"337":1}}],["static",{"2":{"260":1,"400":1,"417":1,"529":1,"532":1,"634":1,"804":1,"838":1,"953":1}}],["statictext>",{"2":{"197":2}}],["stat=",{"2":{"45":6,"49":3,"651":2,"655":3,"656":1}}],["stat",{"2":{"45":12,"663":1}}],["status",{"2":{"9":1,"22":3,"30":3,"31":2,"34":1,"45":2,"56":2,"57":2,"71":2,"94":3,"103":3,"105":4,"120":3,"121":3,"136":1,"137":1,"138":1,"351":1,"352":1,"393":1,"402":1,"403":1,"530":2,"623":1,"651":2,"721":1,"742":1,"996":1,"1029":1,"1229":1,"1248":1,"1258":1,"1276":1,"1279":1,"1308":1,"1314":2,"1319":1,"1332":1,"1339":1,"1341":1,"1387":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1532":1,"1535":2,"1536":3,"1554":1,"1555":1,"1609":1,"1702":1,"1785":1,"2194":7}}],["stack",{"2":{"34":2}}],["starters",{"0":{"292":1}}],["starter",{"0":{"904":1,"905":1},"2":{"286":1,"292":6,"293":1,"294":1,"904":1,"905":1,"908":1,"916":1}}],["starttls",{"2":{"171":1,"690":1}}],["start",{"2":{"33":2,"71":1,"1033":1}}],["strnull",{"0":{"2293":1}}],["strseparator",{"0":{"2293":1}}],["strstring",{"0":{"2293":1}}],["strappend",{"0":{"2293":1}}],["strict",{"2":{"217":1,"636":2,"827":2,"964":1}}],["stripxss",{"2":{"212":1,"678":2}}],["stringredisserializer",{"2":{"276":1,"635":1}}],["stringserializer",{"2":{"276":3}}],["string>",{"2":{"163":1,"400":1,"421":1,"529":1,"600":1,"616":1,"626":1,"648":1,"704":1,"728":1,"859":1,"891":1,"986":1}}],["stringify",{"2":{"45":1,"103":2,"663":1,"1280":1,"1518":1,"1543":1,"2331":1}}],["string",{"0":{"33":1},"2":{"9":1,"22":3,"30":3,"31":2,"32":2,"33":6,"34":4,"44":6,"46":4,"57":1,"66":1,"67":1,"68":1,"70":2,"71":3,"93":12,"94":7,"103":3,"104":3,"105":2,"119":1,"120":7,"121":4,"149":2,"154":1,"163":1,"165":2,"172":1,"178":4,"179":1,"197":3,"199":6,"205":2,"206":2,"208":1,"209":1,"214":7,"223":8,"234":3,"236":1,"273":1,"274":1,"279":1,"280":1,"281":1,"305":5,"318":2,"321":1,"322":1,"323":1,"324":1,"326":1,"332":2,"390":2,"400":1,"412":2,"417":3,"418":4,"421":1,"529":1,"532":1,"534":2,"570":2,"593":2,"594":2,"595":2,"600":1,"601":4,"603":4,"604":2,"609":2,"616":2,"617":6,"625":4,"626":2,"635":3,"637":2,"648":1,"649":4,"663":1,"672":1,"678":1,"692":3,"693":3,"694":3,"696":4,"704":2,"707":2,"708":3,"728":1,"729":4,"732":1,"786":2,"789":2,"792":1,"793":1,"812":2,"813":1,"818":1,"846":2,"859":1,"883":2,"888":1,"891":1,"894":2,"898":1,"914":2,"944":2,"945":1,"955":2,"956":2,"958":1,"959":1,"961":1,"970":1,"974":1,"978":2,"982":1,"1026":4,"1033":4,"1380":1,"1382":1,"1426":1,"1476":1,"1583":1,"2231":1,"2232":1,"2277":1,"2278":2,"2279":1,"2325":1,"2326":1,"2328":1}}],["stream",{"2":{"165":1,"664":1,"894":1}}],["str에",{"2":{"37":1}}],["str",{"0":{"2214":1,"2221":1,"2249":1,"2289":1,"2290":1,"2291":1,"2298":1,"2304":1,"2309":1,"2316":1},"2":{"30":2,"2214":1,"2221":1}}],["a2",{"2":{"2258":1}}],["a5",{"2":{"2258":1}}],["amp",{"2":{"1665":1,"1690":1}}],["aftereach는",{"2":{"1361":1}}],["aftereach",{"0":{"1361":1},"2":{"1361":1}}],["abort",{"2":{"1309":1,"1331":1}}],["abortcontroller",{"2":{"1309":1,"1331":1}}],["abc123def456ghi789",{"2":{"71":1,"76":1}}],["abc123def456",{"2":{"59":2,"2309":1}}],["abc123",{"2":{"50":1,"660":1,"721":1}}],["aggrid",{"0":{"1880":1},"2":{"1817":1,"1877":1,"1880":1,"1887":1}}],["aggridvue",{"2":{"1056":2,"1072":1,"1609":2,"1705":2,"1880":1,"1887":1,"1974":2,"1990":1,"2120":2}}],["age",{"2":{"1220":1,"2197":1,"2294":1}}],["agent",{"2":{"234":1,"604":1}}],["ag",{"0":{"1041":1,"1054":1,"1705":1,"1887":1,"2052":1,"2096":1,"2117":1},"1":{"1042":1,"1043":1,"1055":1,"1056":1,"1057":1,"2097":1,"2098":1,"2099":1,"2118":1,"2119":1,"2120":1},"2":{"1041":1,"1042":1,"1046":1,"1055":1,"1056":2,"1060":1,"1067":1,"1075":1,"1609":2,"1685":1,"1705":2,"1763":2,"1773":1,"1861":1,"1877":2,"1880":6,"1887":3,"1888":1,"1974":3,"1975":1,"1981":1,"1986":1,"1990":2,"1991":1,"2052":1,"2097":2,"2118":1,"2120":2,"2260":2,"2261":1}}],["alt=",{"2":{"1837":2,"1844":1,"1845":1}}],["alert",{"0":{"1316":1},"2":{"1262":1,"1276":1,"1286":1,"1309":1,"1310":1,"1311":2,"1312":1,"1316":1,"1331":1,"1333":1,"1334":1,"1337":1,"1338":1,"1516":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1533":1,"1536":1,"1537":1,"1538":1,"1609":2,"1614":1,"1699":1,"2204":1,"2226":2,"2319":2}}],["aliases",{"2":{"1898":1}}],["alias",{"0":{"1158":1,"1829":1},"1":{"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1830":1},"2":{"1161":1,"1201":1,"1776":1}}],["align",{"2":{"1034":2,"1035":3,"1989":1}}],["all",{"2":{"756":1,"1212":1,"1299":1}}],["allowedheaders",{"2":{"637":1}}],["allowedmethods",{"2":{"637":1}}],["allowedorigins",{"2":{"637":3}}],["allowed",{"2":{"245":1,"493":1,"637":1}}],["allowcredentials",{"2":{"17":1,"637":1}}],["arr",{"2":{"1212":2,"1299":2,"2233":2}}],["arraybuffer",{"2":{"1212":1,"1299":1,"2218":1,"2233":1}}],["array",{"0":{"2192":1,"2216":1},"2":{"1026":1,"1033":2,"2192":2,"2216":3}}],["arrays",{"2":{"663":1}}],["archiver",{"2":{"557":1}}],["artifactid>commons",{"2":{"927":1,"928":1,"929":1}}],["artifactid>postgresql",{"2":{"836":1}}],["artifactid>ojdbc11",{"2":{"835":1}}],["artifactid>tibero",{"2":{"759":1}}],["artifactid>genai",{"2":{"628":1}}],["artifactid>maven",{"2":{"297":1}}],["artifactid>spring",{"2":{"286":1,"296":1,"904":1,"905":1,"906":1}}],["artifactid>",{"2":{"285":1,"286":1,"296":1,"297":1,"628":1,"759":1,"835":1,"836":1,"904":1,"905":1,"906":1,"927":1,"928":1,"929":1}}],["artifactid>axpframework",{"2":{"285":1}}],["assemblyfile",{"2":{"1347":1,"1606":1,"1625":1}}],["assets",{"0":{"1931":1},"2":{"1161":2,"1639":1,"1642":1,"1669":1,"1817":1,"1829":2,"1926":1}}],["assmsmanagement",{"0":{"1949":1},"2":{"92":1,"94":1,"728":2,"742":1,"1942":1,"1949":1}}],["async",{"2":{"1029":1,"1097":1,"1212":1,"1248":1,"1273":1,"1299":1,"1318":1,"1349":1,"1358":1,"1360":1,"1387":1,"1399":1,"1534":1,"1567":2,"1609":1,"1615":1,"1702":1,"1920":1,"2146":1,"2151":1,"2330":1}}],["aspect",{"2":{"905":1}}],["aslist",{"2":{"663":1}}],["ask",{"2":{"626":2}}],["askai",{"2":{"625":1}}],["as",{"2":{"501":1}}],["add",{"0":{"2209":1,"2242":1,"2277":1},"2":{"2209":1,"2277":1}}],["addtab",{"2":{"1916":1}}],["additional",{"2":{"1788":1}}],["addrow",{"2":{"1548":2,"2262":2}}],["addroute",{"2":{"1350":1}}],["addworksheet",{"2":{"1548":1,"2262":1}}],["adderrorlog",{"2":{"1535":1}}],["addlogdata",{"0":{"1407":1},"2":{"1297":1,"1918":1}}],["addattachment",{"2":{"694":1}}],["addurlpatterns",{"2":{"638":1,"675":2,"799":1}}],["addmapping",{"2":{"637":1}}],["addcorsmappings",{"2":{"637":1}}],["addfilterbefore",{"2":{"636":1,"822":1,"948":1}}],["adapter",{"2":{"598":1}}],["adapterservice",{"2":{"326":2}}],["adoptium",{"2":{"460":1}}],["admintest",{"2":{"1942":1}}],["adminlogin",{"0":{"1795":1,"1937":1},"2":{"1795":1,"1895":1,"1934":1}}],["adminlogincheck",{"2":{"104":1,"247":2,"823":1,"949":1,"950":1}}],["adminapi",{"2":{"870":1}}],["admin001",{"2":{"104":1}}],["admin",{"0":{"520":1,"1948":1},"1":{"1949":1},"2":{"90":1,"92":1,"94":1,"388":1,"440":1,"516":1,"555":1,"728":2,"742":1,"870":2,"1664":1,"1699":2,"1700":1,"1817":1,"1942":1}}],["ac",{"2":{"2025":4}}],["actions",{"0":{"1381":1,"1396":1,"1425":1},"1":{"1382":1,"1383":1,"1397":1,"1398":1,"1426":1,"1427":1},"2":{"1629":1,"1922":1,"2087":1}}],["actiontype",{"2":{"1063":1,"1064":1}}],["actionname",{"2":{"1063":1,"1064":1}}],["action",{"2":{"1063":3}}],["active>prod",{"2":{"289":1}}],["active>dev",{"2":{"289":1}}],["active>",{"2":{"289":3}}],["active>local",{"2":{"289":1}}],["active",{"2":{"240":2,"453":2,"749":2,"2194":6}}],["accessdeniedhandler",{"0":{"829":1},"2":{"636":3,"829":1}}],["accesstoken이",{"2":{"1385":1}}],["accesstoken",{"0":{"1380":1},"2":{"9":4,"103":5,"105":1,"112":1,"133":1,"214":2,"356":1,"812":1,"817":1,"944":1,"1226":1,"1229":1,"1230":1,"1248":1,"1259":1,"1263":2,"1273":1,"1276":2,"1295":1,"1337":2,"1379":1,"1387":1,"1633":1,"1635":1,"1911":1,"2157":1}}],["access",{"0":{"9":1,"11":1,"133":1,"810":1,"942":1,"1226":1,"1233":1,"1234":1},"2":{"0":1,"9":3,"12":1,"15":1,"16":2,"103":2,"110":1,"111":1,"214":1,"215":1,"225":1,"603":1,"672":1,"803":1,"811":1,"812":1,"943":1,"944":1,"952":1,"1224":1,"1227":1,"1229":1,"1231":1,"1236":1,"1248":1,"1255":2,"1760":1,"1797":1,"1911":3,"2157":1,"2168":1}}],["aop",{"0":{"905":1},"2":{"152":1,"292":2,"439":1,"554":1,"574":1,"598":3,"905":2}}],["auto",{"2":{"1205":1,"1680":1,"1744":1,"1817":1,"1981":3,"2055":1,"2079":1,"2083":1,"2200":1}}],["autoimport",{"0":{"1205":1},"2":{"1199":1}}],["autoconfiguremockmvc",{"2":{"996":1}}],["autowired",{"2":{"149":1,"167":1,"172":1,"230":1,"234":1,"235":1,"236":1,"279":1,"318":1,"321":1,"326":1,"570":1,"593":1,"594":1,"595":1,"692":1,"693":1,"696":1,"786":1,"789":1,"792":1,"793":1,"812":1,"818":1,"883":1,"888":1,"896":1,"944":1,"955":1,"956":1,"958":1,"959":1,"961":1,"978":1,"989":1,"996":1}}],["authstore는",{"2":{"1377":1}}],["authstore에서",{"2":{"1272":1}}],["authstore",{"0":{"1376":1,"1911":1},"1":{"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1},"2":{"1162":1,"1226":1,"1229":1,"1230":1,"1233":3,"1235":1,"1248":1,"1249":1,"1259":1,"1262":1,"1263":1,"1273":2,"1276":2,"1295":2,"1337":2,"1360":2,"1378":1,"1382":3,"1383":2,"1385":4,"1387":3,"1388":3,"1389":3,"1570":1,"1632":2,"1633":2,"1634":1,"1635":4,"1660":1,"1676":1,"1706":3,"1758":1,"1784":2,"1817":1,"1827":1,"1830":1,"1909":1,"1911":4,"1920":4,"1921":4,"2123":1,"2124":2,"2157":2,"2167":1}}],["authservice",{"2":{"214":4,"812":3,"813":2}}],["authentication",{"2":{"672":1}}],["authenticationentrypoint",{"0":{"830":1},"2":{"636":3,"830":1}}],["authenticated",{"2":{"636":1,"822":1,"948":1}}],["authorize",{"2":{"873":2}}],["authorizehttprequests",{"2":{"636":1,"822":1,"948":1}}],["authorization",{"0":{"356":1},"2":{"11":1,"112":1,"215":1,"356":1,"637":1,"672":2,"732":1,"803":1,"810":1,"942":1,"952":1,"1226":1,"1230":1,"1260":1,"1261":1,"1272":1,"1273":1,"1276":2,"1295":1,"1336":1,"1337":1}}],["auth",{"0":{"518":1,"585":2,"1192":1},"2":{"7":1,"9":2,"16":1,"113":1,"171":1,"245":1,"247":2,"388":1,"439":1,"440":1,"493":1,"516":1,"554":1,"555":1,"636":3,"668":1,"672":3,"690":1,"815":1,"822":2,"823":1,"948":2,"949":1,"950":1,"1083":1,"1168":1,"1171":1,"1172":2,"1189":2,"1200":2,"1202":1,"1259":1,"1263":1,"1276":2,"1337":1,"1366":1,"1494":1,"1663":1,"1695":1,"1726":1,"1734":1,"1794":1,"1795":1,"1796":1,"1817":1,"1895":1,"1934":1}}],["axpreportmapper",{"2":{"590":1,"702":1}}],["axpreportservice",{"0":{"705":1},"2":{"590":1,"702":1,"705":1,"888":1}}],["axpreportcontroller",{"0":{"704":1},"2":{"590":1,"702":1,"704":2}}],["axpredisconfig",{"0":{"269":1,"580":1,"635":1},"1":{"270":1,"271":1},"2":{"439":1,"554":1,"632":1,"635":2,"770":1}}],["axpcomvalid2",{"2":{"598":1}}],["axpcomvalid1",{"2":{"598":1}}],["axpcommvo",{"2":{"598":1}}],["axpcommvalidationutil",{"0":{"235":1},"2":{"235":1,"392":1,"577":1,"598":2}}],["axpcommsecurityutil",{"2":{"598":1}}],["axpcommsha256util",{"0":{"609":1},"2":{"209":2,"575":1,"598":1,"793":1,"959":1}}],["axpcommhtmlutil",{"2":{"598":1}}],["axpcommfilesftputil",{"2":{"598":1}}],["axpcommfileutil",{"0":{"167":1,"896":1},"2":{"167":1,"392":1,"577":1,"598":1,"649":1,"896":1}}],["axpcommconst",{"0":{"611":1},"2":{"598":1,"611":1}}],["axpcommmailutil",{"0":{"688":1,"698":1},"2":{"577":1,"598":1,"688":1,"698":2}}],["axpcommmd5util",{"0":{"608":1},"2":{"208":2,"575":1,"598":1,"792":1,"958":1}}],["axpcommlogaop",{"2":{"574":1,"598":1}}],["axpcommlogannotation",{"0":{"154":1},"2":{"154":1,"574":1,"598":1}}],["axpcommproperty",{"2":{"598":1}}],["axpcommprocmapper",{"2":{"444":1,"598":1,"752":1}}],["axpcommpaging",{"0":{"236":1},"2":{"236":1,"577":1,"598":1}}],["axpcommdbcontroller",{"2":{"598":1}}],["axpcommdbadapterservice",{"0":{"325":1},"1":{"326":1},"2":{"326":1,"573":1,"598":1}}],["axpcommdbservice를",{"2":{"385":1,"846":1}}],["axpcommdbservice",{"0":{"317":1,"601":1},"1":{"318":1,"319":1},"2":{"178":4,"199":4,"318":1,"390":5,"417":2,"532":2,"573":1,"593":1,"598":1,"601":5,"704":4,"707":1,"769":1,"846":1}}],["axpcommrediscontroller",{"2":{"598":1}}],["axpcommredisdbservice",{"0":{"320":1,"602":1},"1":{"321":1,"322":1,"323":1,"324":1},"2":{"279":1,"321":1,"390":1,"573":1,"594":1,"598":1,"602":1,"769":1,"818":1}}],["axpcommrsa",{"0":{"607":1},"2":{"206":2,"391":1,"575":1,"598":1,"789":1,"956":1}}],["axpcommutil",{"0":{"233":1,"604":1},"1":{"234":1},"2":{"234":1,"392":1,"577":1,"598":1,"604":7}}],["axpcommapihttpstatus",{"2":{"598":1}}],["axpcommauthcontroller",{"2":{"576":1,"598":1}}],["axpcommauthservice",{"0":{"214":1,"603":1},"2":{"214":2,"391":1,"576":1,"598":1,"603":1,"769":1,"812":1,"944":4,"945":2}}],["axpcommautoscheduler",{"2":{"572":1,"598":1}}],["axpcommaes128",{"0":{"606":1},"2":{"205":2,"223":2,"391":1,"575":1,"595":1,"598":1,"609":2,"786":1,"955":1}}],["axpcorsloggingfilter",{"0":{"673":1,"806":1},"2":{"583":1,"586":1,"668":1,"673":1,"796":1}}],["axpaimapper",{"2":{"614":1}}],["axpaiservice",{"0":{"618":1},"2":{"570":1,"614":1,"617":4,"618":1}}],["axpaicontroller",{"0":{"616":1},"2":{"570":1,"614":1,"616":2}}],["axpmailmapper",{"2":{"589":1,"684":1}}],["axpmailcontroller",{"0":{"686":1},"2":{"589":1,"684":1,"686":1}}],["axpmailservice",{"0":{"687":1},"2":{"172":1,"589":1,"684":1,"687":1}}],["axpmybatisresultinterceptor",{"0":{"639":1},"2":{"554":1,"632":1,"639":1}}],["axp",{"0":{"537":1,"1688":1,"1751":1,"1756":1,"1791":1},"1":{"538":1,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"1752":1,"1753":1,"1754":1,"1755":1,"1756":1,"1757":1,"1758":1,"1759":1,"1760":1,"1761":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1,"1778":1,"1779":1,"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1792":1,"1793":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1},"2":{"538":1,"539":1,"540":1,"1598":1,"1677":1,"1679":2,"1681":1,"1752":1,"1757":1,"1775":1,"1792":1,"1858":1,"1933":1}}],["axpwebconfig",{"0":{"582":1,"637":1},"2":{"439":1,"554":1,"632":1,"637":2,"770":1}}],["axpbasewebcontroller",{"0":{"600":1},"2":{"379":1,"384":1,"400":1,"421":1,"529":1,"572":1,"598":1,"600":2,"616":1,"626":1,"648":1,"704":1,"728":1,"768":1,"859":1}}],["axpbootapplication",{"0":{"451":1},"2":{"296":1,"370":2,"396":2,"407":1,"439":1,"451":1,"500":2,"501":1,"554":1,"568":1}}],["axpdatasourceconfig",{"0":{"259":1,"579":1,"634":1,"838":1},"1":{"260":1,"261":1},"2":{"439":1,"554":1,"632":1,"634":2,"770":1}}],["axpdecryptfilter>",{"2":{"675":2}}],["axpdecryptfilter",{"0":{"219":1,"671":1,"801":1},"2":{"583":1,"587":1,"638":1,"668":1,"671":2,"675":2,"676":1,"796":1}}],["axpsmsmapper",{"2":{"591":1,"726":1}}],["axpsmscontroller",{"0":{"728":1},"2":{"591":1,"726":1,"728":2}}],["axpsmsservice",{"0":{"729":1},"2":{"230":1,"591":1,"726":1,"728":3,"729":3}}],["axpsecurityconfig",{"0":{"217":1,"581":1,"636":1},"2":{"439":1,"554":1,"632":1,"636":2,"770":1,"918":1}}],["axpjwtauthenticationfilter",{"0":{"215":1,"672":1,"803":1,"952":1},"2":{"585":1,"668":1,"672":2,"675":1,"676":1,"796":1,"822":1,"948":1}}],["axpxssutil",{"0":{"212":1,"678":1},"2":{"212":1,"668":1,"678":2,"961":1}}],["axpxssfilter가",{"2":{"963":1}}],["axpxssfilterregistration",{"2":{"799":1}}],["axpxssfilter>",{"2":{"638":2,"675":2,"799":2}}],["axpxssfilter",{"0":{"211":1,"670":1,"798":1},"2":{"583":1,"587":1,"638":2,"668":1,"670":2,"675":2,"676":1,"796":1,"799":1}}],["axpfileservice",{"0":{"649":1},"2":{"588":1,"646":1,"648":3,"649":3}}],["axpfilecontroller",{"0":{"648":1},"2":{"588":1,"646":1,"648":2}}],["axpfilterconfig",{"0":{"583":1,"638":1,"675":1},"2":{"554":1,"632":1,"638":2,"675":2}}],["axpfilterconfig에서",{"2":{"211":1}}],["axpframework에",{"2":{"364":1}}],["axpframework에서",{"2":{"129":1,"202":1,"900":1,"966":1}}],["axpframework의",{"2":{"346":1,"454":1,"767":1}}],["axpframework",{"0":{"425":1,"439":1,"554":1,"1663":1,"1932":1},"1":{"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1},"2":{"156":1,"157":2,"240":1,"250":2,"300":1,"329":1,"341":1,"370":1,"371":1,"407":1,"408":1,"431":1,"434":2,"436":1,"437":2,"439":1,"444":1,"451":2,"454":1,"475":1,"477":1,"478":1,"497":1,"503":1,"507":2,"548":1,"549":1,"551":2,"552":1,"554":1,"557":1,"558":2,"565":1,"567":1,"568":1,"598":1,"600":1,"601":1,"602":1,"603":1,"604":1,"611":1,"614":1,"616":1,"617":1,"618":1,"632":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"646":1,"648":1,"649":1,"668":1,"670":1,"671":1,"672":1,"673":1,"675":1,"678":1,"684":1,"686":1,"687":1,"688":1,"702":1,"704":1,"705":1,"726":1,"728":1,"729":1,"752":1,"763":2,"910":1,"918":1,"992":2,"993":1,"1083":1,"1087":1,"1091":1,"1366":2,"1598":1,"1774":1,"1794":1,"1795":1,"1796":1,"1817":2,"1853":1,"1858":1,"1864":1,"1895":2,"1934":1}}],["axpframework는",{"2":{"130":1,"146":1,"152":1,"161":1,"169":1,"175":1,"203":1,"227":1,"232":1,"252":1,"266":1,"283":1,"316":1,"328":1,"425":1,"784":1,"795":1,"808":1,"820":1,"832":1,"853":1,"875":1,"938":1}}],["axpgeminiservice",{"0":{"617":1},"2":{"149":1,"570":2,"614":1,"616":4,"617":3,"625":2,"626":2,"978":1}}],["axiosinstance",{"2":{"1029":2,"1162":1,"1194":1,"1229":1,"1248":1,"1260":1,"1261":1,"1269":1,"1276":2,"1278":3,"1279":1,"1280":1,"1281":1,"1303":1,"1311":1,"1314":1,"1317":1,"1318":1,"1336":1,"1337":1,"1338":1,"1341":1,"1342":1,"1387":2,"1515":3,"1516":1,"1517":1,"1518":1,"1519":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1543":1,"1546":1,"1547":1,"1551":1,"1552":1,"1556":1,"1567":1,"1609":2,"1613":1,"1614":1,"1702":2,"1785":1,"1830":1,"1861":2,"1957":1,"1969":1,"1981":1,"2035":1,"2069":2,"2269":1}}],["axios",{"0":{"1266":1,"2053":1,"2065":1,"2092":1},"1":{"1267":1,"1268":1,"1269":1,"1270":1,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":1,"2066":1,"2067":1,"2068":1,"2069":1,"2093":1,"2094":1,"2095":1},"2":{"9":1,"22":1,"30":2,"31":1,"45":1,"46":1,"56":1,"57":1,"71":1,"72":1,"94":1,"103":1,"105":1,"119":1,"120":1,"121":1,"1237":1,"1259":1,"1263":1,"1265":1,"1267":1,"1269":1,"1276":1,"1304":1,"1319":3,"1321":1,"1337":1,"1343":1,"1391":1,"1407":1,"1532":3,"1652":1,"1657":1,"1685":1,"1759":1,"1773":1,"1817":1,"1858":1,"1861":1,"1862":1,"2035":1,"2053":1,"2066":1,"2067":1,"2093":1,"2094":1,"2116":1}}],["a1",{"2":{"86":1,"194":1,"718":1,"889":1,"2258":1}}],["aes로",{"2":{"801":1}}],["aes128",{"2":{"205":3,"223":3,"595":3,"609":3,"786":3,"955":3}}],["aes",{"0":{"205":1,"785":1,"955":1},"1":{"786":1,"787":1},"2":{"84":1,"191":1,"203":1,"428":1,"575":1,"598":1,"606":1,"801":3,"1208":1}}],["ano",{"2":{"2177":1}}],["an",{"2":{"1789":2}}],["ancestors",{"2":{"825":1}}],["annotation",{"2":{"598":1}}],["annotations",{"2":{"305":1}}],["antisamy의",{"2":{"761":1}}],["antisamy",{"0":{"221":1,"680":1,"761":1,"934":1,"961":1},"1":{"935":1,"936":1},"2":{"221":2,"551":1,"680":2,"747":1,"761":1,"935":1,"936":1,"962":1}}],["antisamy를",{"2":{"211":1,"670":1}}],["anyrequest",{"2":{"636":1,"822":1,"948":1}}],["any",{"2":{"69":1,"2171":1,"2325":1}}],["andexpect",{"2":{"996":1}}],["and",{"2":{"0":2,"313":2}}],["attendance",{"2":{"367":1,"368":1}}],["attachment",{"2":{"46":1,"75":1,"165":1,"652":1,"694":3,"894":1}}],["atomiclist는",{"2":{"38":1}}],["atomiclist",{"2":{"31":2}}],["atomic",{"2":{"30":2,"1957":1,"1969":1,"1981":1,"2003":1}}],["apexcharts",{"0":{"2071":1,"2101":1},"2":{"1685":1,"1773":1,"2071":1,"2101":1}}],["apt",{"2":{"489":1}}],["apache",{"0":{"782":1,"876":1,"925":1},"1":{"877":1,"878":1,"879":1,"926":1,"927":1,"928":1,"929":1},"2":{"156":1,"250":1,"297":1,"305":1,"460":1,"929":1,"982":1,"986":1,"993":1}}],["apple",{"2":{"2192":2,"2195":1,"2216":2}}],["application",{"0":{"96":1,"171":1,"229":1,"240":1,"268":1,"362":1,"453":1,"621":1,"641":1,"658":1,"690":1,"740":1,"749":1},"2":{"51":1,"72":2,"75":2,"76":1,"165":1,"239":4,"240":1,"253":1,"394":1,"437":1,"443":3,"462":1,"463":1,"464":1,"465":1,"481":1,"490":1,"492":1,"501":1,"509":1,"542":1,"551":4,"552":1,"641":1,"642":3,"643":4,"664":1,"671":1,"722":1,"732":1,"747":1,"750":3,"773":4,"829":1,"830":1,"869":3,"892":1,"894":1,"996":1,"999":1,"1269":1,"2218":2}}],["approvecancel",{"2":{"1435":1}}],["approve",{"2":{"1435":1}}],["approvallist",{"2":{"1126":1}}],["approvaldata",{"2":{"1126":3,"1915":1}}],["approval",{"2":{"1126":1,"1127":1,"1435":1}}],["app",{"0":{"1655":1,"1860":1},"2":{"260":1,"634":1,"838":1,"1652":1,"1817":1,"1858":1,"1861":8,"1893":2,"1898":2,"1904":9,"1905":4}}],["appendchild",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["append",{"2":{"45":8,"663":6,"1280":2,"1518":2,"1543":2}}],["api와",{"2":{"2086":1}}],["apiurl",{"2":{"1169":1}}],["api의",{"2":{"873":1}}],["apikey",{"2":{"617":3}}],["apiresponse",{"0":{"864":1},"2":{"421":2,"859":2,"864":4}}],["apiresponses",{"2":{"421":1,"859":1,"864":1}}],["api에서",{"0":{"1463":1,"1882":1,"1883":1,"1920":1,"1921":1}}],["api에",{"2":{"394":1}}],["api를",{"2":{"129":1,"354":1,"393":1,"395":1,"545":1,"1514":1,"1680":1,"1702":1,"1957":1,"2077":1}}],["api일",{"2":{"60":1}}],["api는",{"2":{"28":1,"38":1,"126":1,"132":1,"135":1,"139":1,"144":1,"348":1,"393":1,"530":1}}],["api입니다",{"2":{"6":1,"19":1,"27":1,"40":1,"53":1,"62":1,"89":1,"100":1,"107":1,"116":1,"125":1}}],["apis",{"2":{"0":1,"5":1}}],["api",{"0":{"0":1,"6":1,"8":1,"19":1,"21":1,"27":1,"29":1,"40":1,"42":1,"53":1,"55":1,"62":1,"64":1,"89":1,"91":1,"100":1,"102":1,"112":1,"116":1,"118":1,"125":1,"127":1,"129":1,"130":1,"140":1,"141":1,"142":1,"143":1,"150":1,"181":1,"346":1,"393":1,"506":1,"545":1,"622":1,"623":1,"732":1,"815":1,"853":1,"858":1,"871":1,"1029":1,"1191":1,"1230":1,"1513":1,"1520":1,"1702":1,"1785":1,"1957":1,"2035":1,"2057":1,"2159":1,"2187":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"8":1,"9":2,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"20":1,"21":1,"22":2,"23":1,"24":1,"25":1,"26":1,"28":1,"29":1,"30":2,"31":2,"32":2,"33":2,"34":2,"35":1,"36":1,"37":1,"38":1,"39":1,"41":1,"42":1,"43":2,"44":2,"45":2,"46":2,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"54":1,"55":1,"56":2,"57":2,"58":1,"59":1,"60":1,"61":1,"63":1,"64":1,"65":2,"66":2,"67":2,"68":2,"69":2,"70":2,"71":2,"72":2,"73":2,"74":2,"75":2,"76":2,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"90":1,"91":1,"92":2,"93":2,"94":2,"95":1,"96":1,"97":1,"98":1,"99":1,"101":1,"102":1,"103":2,"104":2,"105":2,"106":2,"107":2,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"117":1,"118":1,"119":2,"120":2,"121":2,"122":1,"123":1,"124":1,"126":1,"127":1,"128":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":2,"142":2,"143":2,"144":1,"145":1,"182":1,"183":1,"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"623":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":2,"860":2,"861":2,"862":2,"863":2,"864":2,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":2,"873":2,"874":1,"1514":1,"1515":1,"1516":1,"1517":1,"1518":1,"1519":1,"1521":1,"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"2160":1,"2161":1,"2162":1,"2163":1},"2":{"0":1,"7":1,"9":2,"11":1,"16":1,"18":2,"20":1,"22":3,"24":3,"25":4,"26":2,"28":1,"30":2,"31":2,"32":1,"33":1,"34":1,"39":2,"41":1,"43":1,"45":1,"46":2,"52":2,"54":1,"56":2,"57":2,"61":2,"63":1,"65":1,"71":3,"72":2,"73":1,"74":1,"75":1,"76":2,"88":2,"90":1,"92":1,"94":1,"96":1,"99":2,"101":1,"103":2,"104":1,"105":2,"106":1,"107":1,"109":1,"113":1,"115":2,"117":1,"119":2,"120":2,"121":2,"124":2,"127":3,"128":2,"130":4,"143":1,"145":2,"148":2,"150":1,"182":1,"183":1,"201":1,"224":1,"229":1,"237":1,"245":1,"247":8,"294":1,"346":1,"347":3,"358":2,"363":1,"367":4,"368":1,"372":1,"377":1,"379":1,"384":1,"393":1,"396":1,"397":1,"398":1,"400":1,"404":1,"420":1,"421":2,"448":1,"469":1,"493":1,"506":1,"514":1,"529":1,"542":5,"545":4,"570":1,"576":1,"588":1,"589":1,"590":1,"591":1,"600":2,"614":1,"616":3,"617":2,"618":2,"620":2,"626":1,"629":5,"630":1,"646":1,"648":4,"663":1,"664":1,"666":1,"684":1,"686":2,"702":1,"704":8,"721":1,"722":1,"724":1,"726":1,"728":3,"729":1,"731":1,"740":2,"742":1,"744":2,"745":1,"777":1,"781":1,"782":1,"810":1,"815":1,"823":3,"853":1,"856":2,"859":3,"861":2,"862":1,"866":1,"867":1,"869":2,"870":3,"872":1,"873":1,"874":1,"904":1,"921":1,"932":2,"942":1,"949":3,"950":3,"996":1,"1029":1,"1072":2,"1168":2,"1169":1,"1171":1,"1172":2,"1173":1,"1189":2,"1191":1,"1194":3,"1200":2,"1202":1,"1208":1,"1226":1,"1229":1,"1248":1,"1259":1,"1263":1,"1276":1,"1278":2,"1279":1,"1280":1,"1281":1,"1292":1,"1311":1,"1314":1,"1317":1,"1318":1,"1323":1,"1337":1,"1338":1,"1341":1,"1342":1,"1387":1,"1399":1,"1402":2,"1409":1,"1440":1,"1487":2,"1494":1,"1515":2,"1516":1,"1517":1,"1518":1,"1519":1,"1521":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":3,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"1543":1,"1546":1,"1547":1,"1551":1,"1552":1,"1556":1,"1567":1,"1609":1,"1614":1,"1615":2,"1619":1,"1674":1,"1680":1,"1683":1,"1695":1,"1702":1,"1711":1,"1725":1,"1726":2,"1734":2,"1756":1,"1758":1,"1759":1,"1769":2,"1773":1,"1780":2,"1785":1,"1879":1,"1912":1,"1918":1,"1946":1,"1949":1,"1957":1,"1959":1,"1969":2,"1974":1,"1975":1,"1981":2,"1991":1,"2003":1,"2024":1,"2025":1,"2069":1,"2076":1,"2109":1,"2187":1,"2260":2,"2269":1}}],["a",{"2":{"45":5,"46":1,"656":1,"970":1,"1281":1,"1342":1,"1519":1,"1546":1,"1789":8,"2055":1,"2056":1,"2057":1,"2058":1,"2059":1,"2192":2,"2195":2,"2196":1,"2204":1,"2216":2,"2269":1}}],["airesponse",{"2":{"22":2}}],["ai가",{"2":{"22":1}}],["ai에게",{"2":{"22":1}}],["ai에",{"2":{"22":1,"623":1}}],["ai를",{"2":{"19":1,"146":1,"570":1,"613":1}}],["ai",{"0":{"19":1,"22":1,"24":1,"146":1,"148":1,"570":2,"613":1,"620":1,"623":1},"1":{"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"147":1,"148":1,"149":1,"150":1,"151":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1},"2":{"20":1,"22":5,"24":1,"88":1,"130":1,"141":1,"150":1,"173":1,"231":1,"239":2,"429":1,"439":2,"443":2,"541":1,"551":2,"554":2,"568":2,"570":4,"613":1,"614":5,"616":4,"617":3,"618":2,"620":1,"621":2,"623":1,"626":1,"630":1,"750":2,"977":2,"987":1}}],["await를",{"2":{"2333":1}}],["await",{"2":{"9":1,"22":1,"30":1,"31":1,"45":1,"46":1,"56":1,"57":1,"71":1,"72":1,"94":1,"103":1,"105":1,"119":1,"120":1,"121":1,"1029":1,"1097":1,"1194":1,"1212":2,"1229":1,"1248":1,"1259":1,"1262":1,"1263":1,"1276":2,"1278":2,"1279":1,"1280":1,"1281":1,"1299":2,"1309":1,"1311":1,"1314":1,"1317":1,"1318":3,"1331":1,"1337":2,"1338":1,"1341":1,"1342":1,"1349":1,"1358":1,"1387":1,"1515":2,"1516":1,"1517":1,"1518":1,"1519":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":3,"1535":1,"1536":1,"1537":1,"1538":1,"1543":1,"1546":1,"1547":1,"1548":1,"1551":1,"1552":1,"1556":1,"1567":2,"1609":1,"1614":1,"1702":1,"1785":1,"1957":1,"1969":1,"1981":1,"2069":1,"2146":1,"2151":5,"2233":1,"2260":1,"2262":1,"2268":1,"2269":1,"2325":1,"2326":1,"2330":2,"2332":2}}],["ty",{"2":{"1981":3}}],["typeof",{"2":{"1538":1}}],["typescript",{"0":{"1564":1},"1":{"1565":1,"1566":1,"1567":1,"1568":1},"2":{"1163":1,"1777":1,"1846":1,"2171":1}}],["type=",{"2":{"45":2,"48":2,"51":1,"93":3,"94":2,"98":1,"310":1,"651":2,"665":1,"731":2,"735":3,"744":1,"1836":1,"2151":1,"2233":1}}],["type",{"0":{"654":1,"734":1,"735":1,"737":1},"2":{"44":1,"45":8,"46":1,"72":2,"74":1,"75":1,"76":1,"92":3,"93":3,"94":3,"119":1,"253":1,"260":1,"482":1,"483":1,"484":1,"634":2,"649":2,"651":2,"652":1,"663":2,"664":1,"731":2,"732":1,"742":3,"743":2,"834":1,"835":1,"836":1,"838":1,"869":2,"964":1,"1072":1,"1269":1,"1280":1,"1440":1,"1583":2,"1946":1,"1949":4,"1957":1,"1969":1,"1981":1,"2025":1,"2218":1}}],["td>",{"2":{"1973":2}}],["tbody>",{"2":{"1973":2}}],["tbdriver",{"2":{"255":1,"482":1,"834":1}}],["t",{"2":{"1879":1,"1882":3,"1885":1}}],["ts에",{"2":{"1579":1}}],["ts",{"2":{"1205":1,"1206":1,"1777":1,"1817":2,"2055":1,"2056":1}}],["taskkill",{"2":{"2177":1}}],["tabid",{"2":{"1916":2}}],["tab",{"0":{"1477":1},"2":{"1477":1,"1480":4,"1916":1}}],["tabcntobj",{"2":{"1473":1}}],["tablist",{"2":{"1473":1,"1480":1,"1916":1}}],["table>",{"2":{"1973":1}}],["table",{"2":{"308":1,"313":1,"314":1,"333":1,"413":1,"535":1,"753":1,"1973":2,"2141":1}}],["tabstore는",{"2":{"1471":1}}],["tabstore",{"0":{"1470":1,"1916":1},"1":{"1471":1,"1472":1,"1473":1,"1474":1,"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1},"2":{"1472":1,"1475":3,"1480":5,"1660":1,"1758":1,"1817":1,"1909":1,"2123":1,"2332":2}}],["tag",{"0":{"861":1},"2":{"421":1,"859":1,"861":1}}],["target",{"0":{"563":1},"2":{"300":1,"341":1,"437":1,"497":1,"503":1,"549":1,"557":1,"1189":3,"1200":3}}],["targetpath>",{"2":{"297":1}}],["targetpath>web",{"2":{"297":1}}],["tmax",{"2":{"255":1,"482":1,"759":1,"834":1}}],["trigger",{"2":{"2146":1}}],["tr>",{"2":{"1973":2}}],["treeorgnode",{"0":{"1052":1,"2011":1},"1":{"1053":1},"2":{"1053":1,"1994":1}}],["treeempdropdown",{"0":{"1050":1,"2010":1},"1":{"1051":1},"2":{"1051":1,"1762":1,"1994":1}}],["tree",{"0":{"2008":1},"1":{"2009":1,"2010":1,"2011":1},"2":{"1049":1,"1051":1,"1053":1,"1184":1,"1994":1,"2115":1,"2138":1}}],["treedeptdropdown",{"0":{"1048":1,"2009":1},"1":{"1049":1},"2":{"1049":1,"1762":1,"1994":1,"2009":1}}],["try",{"0":{"1523":1},"2":{"400":1,"529":1,"600":1,"626":1,"872":1,"1029":1,"1276":1,"1317":1,"1318":1,"1337":1,"1387":1,"1399":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":2,"1567":1,"1568":1,"1609":1,"1614":1,"1615":1,"1702":1,"1920":1,"2333":1}}],["transactional",{"2":{"649":1}}],["transactionmanager",{"2":{"261":1,"579":1,"838":1}}],["transport",{"2":{"217":1,"636":1,"827":1,"964":1}}],["transferto",{"2":{"163":1,"891":1}}],["true면",{"2":{"1460":1}}],["true",{"2":{"17":1,"34":1,"105":1,"171":2,"197":1,"242":1,"421":1,"634":1,"637":1,"690":2,"693":3,"694":1,"859":1,"863":1,"869":1,"1043":1,"1057":1,"1077":1,"1189":3,"1200":4,"1259":1,"1263":1,"1269":1,"1276":3,"1311":1,"1337":2,"1338":1,"1362":1,"1385":1,"1434":1,"1458":1,"1460":1,"1466":1,"1467":1,"1468":1,"1490":1,"1527":1,"1537":1,"1538":2,"1583":1,"1705":2,"1879":3,"2156":2,"2204":6,"2220":1,"2221":2,"2226":1,"2276":1,"2297":1,"2315":5,"2316":1,"2317":1,"2318":1,"2319":1}}],["terser로",{"2":{"1498":1}}],["testpages",{"2":{"1879":2}}],["testendpoint",{"2":{"996":1}}],["testmethod",{"2":{"989":1}}],["test=",{"2":{"313":2}}],["test",{"0":{"552":1,"562":1},"2":{"107":2,"292":1,"437":1,"478":1,"549":1,"552":1,"557":1,"989":1,"996":1,"1280":1,"1518":1,"1543":1,"1879":1,"2146":1,"2147":1,"2151":3,"2152":1,"2155":1,"2158":1}}],["tel",{"2":{"92":2,"93":2,"94":2,"731":1,"742":2,"1949":1}}],["text=",{"2":{"1006":1,"1997":1}}],["text>내용",{"2":{"1646":1,"1709":1}}],["text>",{"2":{"197":2,"1428":2,"1600":2,"1609":2,"1646":1,"1709":1}}],["textfields",{"2":{"1212":1,"1299":3}}],["textfieldexpression>",{"2":{"195":2,"197":4}}],["textfield>",{"2":{"195":2,"197":4}}],["textelement>",{"2":{"195":2,"197":6}}],["text",{"2":{"74":1,"617":1,"1012":2,"1034":2,"1035":3,"1063":1,"1064":1,"1317":1,"1537":3,"1989":2,"2141":1,"2146":1,"2156":1,"2204":1,"2258":2,"2315":1}}],["template>",{"2":{"1006":2,"1007":2,"1011":2,"1012":2,"1016":2,"1020":2,"1027":2,"1035":2,"1036":2,"1040":2,"1056":2,"1072":2,"1105":2,"1112":2,"1119":2,"1126":2,"1140":2,"1250":2,"1399":2,"1428":2,"1463":2,"1464":2,"1537":2,"1558":1,"1578":2,"1581":2,"1588":2,"1591":2,"1592":2,"1593":2,"1594":4,"1600":2,"1609":2,"1646":2,"1648":2,"1649":2,"1699":2,"1704":2,"1705":2,"1709":2,"1837":4,"1844":2,"1845":2,"1860":2,"1882":2,"1883":2,"1885":2,"1887":2,"1945":2,"1949":2,"1969":2,"1973":2,"1974":2,"1981":2,"1983":2,"1989":2,"1990":2,"1997":2,"1999":2,"2003":2,"2005":2,"2006":2,"2009":2,"2014":2,"2062":2,"2078":2,"2120":2,"2225":2}}],["templates",{"2":{"883":1}}],["templatepath",{"2":{"883":2}}],["templateengine",{"2":{"696":3}}],["template",{"2":{"65":1,"72":1,"182":1,"183":1,"224":1,"276":2,"277":2,"635":5,"696":1,"711":1,"721":1,"722":1,"888":1,"1594":2,"1611":1,"1643":1}}],["temperature",{"2":{"22":3}}],["txt에",{"2":{"48":1,"50":1,"654":1}}],["txt",{"0":{"765":1},"2":{"45":12,"551":1,"661":1,"663":1,"747":1,"765":1}}],["tip",{"2":{"1789":4}}],["tiberodatasource",{"2":{"634":2}}],["tiberodatasourceconfiguration",{"2":{"260":1,"634":1,"838":1}}],["tibero를",{"2":{"485":1}}],["tibero6",{"0":{"462":1,"834":1},"2":{"427":1,"462":2,"480":1,"485":1,"551":1,"634":1,"759":2,"834":1}}],["tibero",{"0":{"254":1,"310":1,"335":1,"482":1,"485":1,"840":1},"1":{"255":1,"256":1},"2":{"253":2,"255":3,"260":2,"263":1,"293":2,"319":1,"330":1,"444":1,"445":2,"472":1,"482":4,"538":1,"543":1,"551":2,"598":2,"601":1,"634":1,"752":1,"754":2,"759":2,"774":2,"834":4,"838":2,"843":1,"847":1}}],["title=",{"2":{"1126":1,"1140":1}}],["title>제목",{"2":{"1646":1,"1709":1}}],["title>페이지",{"2":{"1600":1}}],["title>",{"2":{"197":2,"1428":2,"1600":1,"1609":2,"1646":1,"1709":1}}],["title",{"2":{"45":6,"50":1,"65":1,"69":1,"71":1,"79":2,"179":1,"182":1,"186":2,"197":1,"199":1,"661":1,"663":1,"708":1,"714":1,"721":1,"888":1,"970":2,"1126":1,"1127":1,"1140":1,"1151":1,"1157":1,"1362":1,"1426":1,"1428":1,"1583":1,"1641":1,"1710":1,"1882":1,"1885":4,"1915":1,"2078":2}}],["timestamp",{"2":{"1300":1,"1313":2,"1330":2,"1409":1}}],["timeout=",{"2":{"1537":1}}],["timeout",{"2":{"1269":1,"1270":1,"1286":1,"1310":1,"1333":1,"1529":1}}],["time",{"2":{"33":4}}],["todate",{"0":{"2210":1,"2243":1},"2":{"2210":1}}],["today",{"2":{"2209":3,"2224":1,"2242":3}}],["tomorrow",{"2":{"2209":1}}],["tomcat의",{"2":{"503":1}}],["tomcat에",{"2":{"343":1,"503":1}}],["tomcat",{"0":{"344":1,"468":1},"2":{"242":1,"344":1,"468":1,"904":1}}],["tohaveurl",{"2":{"2151":1}}],["tobe",{"2":{"2156":5,"2157":1}}],["tobetruthy",{"2":{"2146":1}}],["tobytearray",{"2":{"199":1}}],["tocontain",{"2":{"2146":1}}],["toggleunfoldable",{"0":{"1461":1},"2":{"1461":1,"1463":1,"1917":2}}],["togglevisible",{"0":{"1460":1},"2":{"1460":3,"1463":1,"1464":1,"1468":1,"1917":2}}],["togglelog",{"2":{"1410":1}}],["togglelogyn",{"0":{"1406":1},"2":{"1410":1,"1918":2}}],["too",{"0":{"1287":1,"1309":1,"1331":1},"2":{"953":1,"2162":1}}],["totalcount",{"2":{"236":1}}],["top",{"2":{"1033":1}}],["topmargin=",{"2":{"197":1}}],["topath",{"2":{"165":1,"894":1}}],["tostring",{"2":{"165":1,"223":2,"617":1,"732":1,"894":1,"913":1}}],["token123",{"2":{"2157":2}}],["tokenyn",{"2":{"1409":1}}],["token도",{"2":{"1262":1}}],["token으로",{"0":{"1259":1},"2":{"2168":1}}],["token과",{"2":{"1224":1}}],["tokendeleted",{"2":{"105":3}}],["tokenlist",{"2":{"56":2}}],["token은",{"2":{"17":1,"225":2,"357":1,"1229":1,"2168":1}}],["token이",{"2":{"15":1,"17":1,"1231":1,"1255":1}}],["token을",{"2":{"9":3,"15":1,"1224":1,"1231":1,"1255":2}}],["token",{"0":{"9":1,"11":1,"12":1,"133":1,"134":1,"576":2,"810":1,"811":1,"930":1,"939":1,"942":1,"943":1,"1226":1,"1227":1,"1233":1,"1234":1,"1382":1,"2166":1},"1":{"931":1,"932":1,"933":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1},"2":{"7":1,"9":3,"12":1,"16":3,"56":2,"57":1,"59":2,"60":1,"103":3,"110":2,"111":2,"214":5,"215":1,"280":1,"322":1,"324":1,"439":1,"554":1,"594":1,"598":1,"603":6,"672":6,"803":2,"808":1,"811":1,"812":2,"813":2,"933":1,"943":1,"944":2,"945":2,"952":2,"1224":1,"1226":1,"1227":1,"1229":1,"1230":3,"1233":1,"1236":2,"1248":1,"1259":1,"1273":3,"1295":3,"1382":1,"1633":1,"1634":1,"1760":2,"1797":1,"1911":5,"1920":1,"2157":1}}],["to",{"2":{"0":1,"172":1,"692":2,"693":2,"694":2,"696":2,"1358":3,"1360":2,"1361":2,"1778":1,"2149":1,"2184":1,"2224":2}}],["thousandssep",{"0":{"2212":1,"2303":1},"2":{"2212":1}}],["th>",{"2":{"1973":1}}],["th",{"2":{"1973":1}}],["throw",{"2":{"1276":1,"1318":1,"1337":1,"1534":1,"1567":1}}],["throws",{"2":{"199":1,"617":1,"625":1,"996":1}}],["thymeleaf",{"0":{"696":1}}],["thin",{"2":{"255":1,"257":1,"482":1,"483":1,"834":1,"835":1}}],["this",{"2":{"0":1,"400":1,"529":1,"1629":1,"1787":1,"1789":10,"1883":1,"1921":1,"2087":1}}],["themes",{"2":{"1898":2}}],["theme",{"0":{"2":1,"1901":1},"2":{"0":4,"2":1,"1056":1,"1609":1,"1705":1,"1891":1,"1898":2,"1974":1,"1990":1,"2120":1}}],["the",{"2":{"0":3,"5":2,"1787":1,"1790":2}}],["b1",{"2":{"2258":1}}],["b",{"2":{"2192":2,"2195":1,"2196":3,"2216":2}}],["bd",{"2":{"1989":1}}],["block",{"2":{"1574":1,"1789":2}}],["blob을",{"2":{"46":1}}],["blob",{"0":{"1546":1},"2":{"46":2,"72":2,"119":2,"1281":2,"1299":1,"1342":2,"1519":2,"1546":2,"1547":4,"1548":3,"2218":2,"2262":3,"2268":1,"2269":2}}],["blank",{"0":{"1079":1,"1372":1,"2028":1},"1":{"1080":1,"1081":1,"1082":1,"1083":1},"2":{"1081":1,"1083":1,"1366":1,"1765":1,"1994":1}}],["btn>",{"2":{"1007":1,"1609":1,"1699":1}}],["btn",{"2":{"1007":2,"1609":1,"1638":1,"1699":1,"1879":2,"1882":1,"1883":1,"2141":1}}],["built",{"2":{"1787":1}}],["builder",{"2":{"617":1,"870":2,"913":1,"914":1,"933":1}}],["build",{"2":{"165":1,"459":2,"617":1,"634":1,"636":1,"822":1,"870":2,"894":1,"948":1,"1180":1,"1181":1,"1182":2,"1482":1,"1503":2,"1509":1,"1738":1,"1739":1,"1740":2,"1743":1,"1891":1,"2063":1,"2174":1}}],["business",{"2":{"1666":1,"1691":1,"1814":1}}],["buffer",{"2":{"1548":2,"2262":2}}],["bufferedreader",{"2":{"732":2}}],["button>",{"2":{"1463":2,"2078":1}}],["buttonstore",{"0":{"1430":1},"1":{"1431":1,"1432":1,"1433":1,"1434":1,"1435":1},"2":{"1432":1,"1434":4,"1758":1}}],["button",{"2":{"1005":1,"1063":2,"1064":1,"1463":2,"1994":1,"2078":1,"2146":1,"2151":1}}],["buttonbox",{"0":{"1004":1,"1997":1},"1":{"1005":1,"1006":1},"2":{"1005":1,"1006":1,"1762":1,"1994":1,"1997":1}}],["birthdate",{"2":{"2226":1,"2319":2}}],["bind=",{"2":{"1973":1,"2005":1}}],["billapprovelist",{"0":{"1951":1},"2":{"1942":1}}],["bi",{"0":{"1811":1,"1980":1},"1":{"1812":1,"1813":1,"1814":1,"1981":1,"1982":1,"1983":1,"1984":1},"2":{"1666":2,"1691":1,"1775":1,"1812":1,"1813":1,"1817":1,"1977":1,"1978":1,"1986":1}}],["bit",{"2":{"459":1}}],["bizcompid",{"2":{"2005":1}}],["bizcompredistemplate",{"2":{"274":2,"580":1,"851":1}}],["bizcompredisconnectionfactory",{"2":{"271":2,"274":1,"580":1}}],["bizcomp",{"2":{"268":1,"271":3,"274":1,"490":1,"635":1,"850":1,"2005":1}}],["bizcomponentid를",{"2":{"32":1}}],["bizcomponentid",{"2":{"32":1}}],["bpjgjnqgcfjq3wr9tyadkfwp7822f2ekcfxkhwtlpp3vmisxut0fmt",{"2":{"206":1,"244":1,"790":1,"956":1}}],["balham",{"2":{"1056":1,"1609":1,"1705":1,"1974":1,"1990":1,"2120":1}}],["banana",{"2":{"2192":2,"2195":1,"2216":2}}],["banner",{"0":{"765":1},"2":{"551":1,"747":1,"765":2}}],["band>",{"2":{"197":2}}],["band",{"2":{"197":2}}],["baos",{"2":{"199":3}}],["bad",{"2":{"138":1}}],["bashrm",{"2":{"2172":1}}],["bashgit",{"2":{"1731":1}}],["bashnode",{"2":{"1732":1,"2174":1}}],["bashnvm",{"2":{"1728":1,"1732":1}}],["bashnpm",{"2":{"1180":1,"1181":1,"1182":1,"1482":1,"1489":1,"1503":1,"1509":1,"1617":1,"1696":1,"1727":1,"1733":1,"1736":1,"1738":1,"1739":1,"1740":2,"1741":1,"1743":1,"2063":1,"2152":1,"2158":1}}],["bashmvn",{"2":{"299":1,"300":1,"301":1,"340":1,"341":1}}],["bash",{"2":{"290":1,"459":1,"460":1,"477":1,"488":1,"489":1,"496":1,"502":1,"503":1,"750":1,"1599":1,"1694":1,"2177":1,"2178":1}}],["basic",{"2":{"96":1,"229":1,"740":1}}],["baseurl",{"2":{"1163":1}}],["basepackages",{"2":{"329":1,"370":1,"371":1,"407":1,"408":1,"451":2,"910":1}}],["basedir",{"2":{"297":1,"759":1}}],["base",{"2":{"7":1,"20":1,"28":1,"41":1,"54":1,"63":1,"90":1,"101":1,"117":1,"1168":2,"1169":1,"1171":2,"1172":2,"1189":2,"1200":2,"1202":2,"1695":2,"1726":2,"1734":2,"1845":1}}],["bmklist",{"2":{"1415":1}}],["bmk",{"2":{"120":2,"121":2,"347":1,"421":1,"859":1}}],["browser",{"2":{"34":2}}],["box",{"2":{"1789":2}}],["bold",{"2":{"1641":1,"1710":1}}],["bottom",{"2":{"1033":2}}],["bottommargin=",{"2":{"197":1}}],["both",{"2":{"0":1}}],["boot에",{"2":{"916":1}}],["boot에서",{"2":{"22":1}}],["boot",{"0":{"286":1,"292":1,"296":1,"777":1,"901":1,"904":1,"905":1},"1":{"902":1,"903":1,"904":1,"905":1,"906":1},"2":{"286":2,"292":6,"293":1,"296":2,"425":1,"433":1,"451":1,"452":1,"502":2,"505":1,"538":2,"539":1,"543":1,"551":1,"631":1,"750":3,"778":1,"902":1,"904":2,"905":2,"908":1,"916":1}}],["bookmarklist",{"2":{"120":2}}],["boolean",{"2":{"105":1,"230":1,"234":1,"235":2,"649":1,"698":1,"729":1,"813":1,"896":1,"945":1,"986":1,"1026":3,"1033":3,"1385":1,"2204":1,"2220":1,"2221":1,"2276":1}}],["body",{"2":{"46":2,"72":1,"74":1,"75":1,"76":1,"109":1,"119":1,"172":1,"182":1,"224":1,"652":1,"664":1,"692":2,"694":2,"721":1,"742":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["bem",{"2":{"1574":1}}],["beforeeach를",{"2":{"2091":1,"2130":1}}],["beforeeach는",{"2":{"1357":1}}],["beforeeach",{"0":{"1357":1},"1":{"1358":1,"1359":1},"2":{"1358":1,"1360":1,"2147":1,"2157":1}}],["beanutils",{"0":{"979":1},"1":{"980":1,"981":1,"982":1},"2":{"980":1,"982":5}}],["bean",{"0":{"261":1},"2":{"270":1,"271":1,"273":1,"274":1,"579":1,"580":1,"634":1,"635":2,"636":1,"638":1,"675":2,"799":1,"822":1,"838":1,"870":2,"924":1,"948":1,"982":3}}],["bearer",{"2":{"112":1,"133":1,"356":1,"672":1,"1226":1}}],["be",{"2":{"0":1}}],["bytes",{"0":{"1217":1,"2233":1},"2":{"974":2,"1212":2,"1217":1,"1299":2,"2233":3}}],["bytearrayoutputstream",{"2":{"199":2}}],["byte",{"2":{"165":2,"199":1,"888":1,"894":2}}],["byte로",{"2":{"70":1,"81":1}}],["by",{"2":{"0":1,"1787":1,"1788":1}}],["pemenu=",{"2":{"1949":1}}],["permanent=",{"2":{"1464":1}}],["permitall",{"2":{"636":1,"822":1,"948":1}}],["permissions",{"2":{"217":1,"636":1,"827":1}}],["persistedstate",{"2":{"1893":2,"2085":1}}],["persistedstate를",{"2":{"1251":1,"2125":1}}],["persist",{"2":{"1390":1,"1629":1,"2087":1}}],["persadm",{"0":{"1944":1},"1":{"1945":1,"1946":1,"1947":1},"2":{"1099":1,"1347":1,"1348":1,"1368":1,"1370":2,"1475":1,"1560":1,"1599":1,"1603":1,"1606":1,"1607":2,"1622":1,"1625":1,"1626":2,"1664":1,"1806":1,"1807":1,"1808":1,"1809":1,"1810":1,"1817":2,"1853":1,"1855":1,"1942":1,"2292":1}}],["perform",{"2":{"996":1}}],["per",{"2":{"804":1,"953":1}}],["pid>",{"2":{"2177":1}}],["pid",{"2":{"2177":1}}],["pimypersonnelinformation",{"0":{"1806":1,"1946":1},"2":{"1806":1,"1942":1}}],["piniapluginpersistedstate",{"2":{"1893":2}}],["pinia를",{"2":{"1680":1,"1758":1,"1908":1,"2122":1}}],["pinia",{"0":{"1706":1,"1758":1,"1893":2,"1907":1,"2044":1,"2049":1,"2084":1,"2121":1},"1":{"1908":1,"1909":1,"1910":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1919":1,"1920":1,"1921":1,"1922":1,"1923":1,"2085":1,"2086":1,"2087":1,"2122":1,"2123":1,"2124":1,"2125":1},"2":{"1205":1,"1251":1,"1377":1,"1393":1,"1402":1,"1413":1,"1422":1,"1447":1,"1456":1,"1469":1,"1471":1,"1629":1,"1660":1,"1661":2,"1680":1,"1683":1,"1752":2,"1756":2,"1771":1,"1773":1,"1817":3,"1821":1,"1822":1,"1858":1,"1865":2,"1891":2,"1893":7,"1904":3,"1906":1,"1922":1,"1923":1,"2044":1,"2049":1,"2085":2,"2087":1,"2116":1,"2125":1,"2147":1,"2157":1,"2185":1}}],["p>가격",{"2":{"2225":1}}],["p>암호화",{"2":{"1250":1}}],["p>사용자",{"2":{"1250":1}}],["p>",{"2":{"1027":2,"1250":2,"2225":1}}],["playwright",{"2":{"2150":1,"2151":1}}],["placeholder=",{"2":{"1999":1}}],["plaintext",{"2":{"595":1,"786":1,"789":1,"955":1,"956":1}}],["pluginsutil",{"2":{"1817":1,"1861":1,"1904":2,"1905":2}}],["plugins",{"0":{"1661":1,"1822":1},"2":{"297":1,"1365":1,"1602":1,"1621":1,"1700":1,"1817":1,"1858":1,"1865":1,"1890":1,"1891":1,"1904":3,"1905":3,"2090":1,"2128":1}}],["plugin>",{"2":{"296":2,"297":2}}],["plugin",{"0":{"296":1,"297":1},"2":{"296":1,"297":1,"1251":1,"1893":2,"2083":3,"2085":1,"2125":1}}],["plocal",{"2":{"290":1,"502":1,"750":1}}],["pprod",{"2":{"290":1,"300":1,"341":1,"750":1}}],["pdate",{"0":{"2241":1,"2247":1}}],["pdev로",{"2":{"539":1}}],["pdev",{"2":{"290":1,"299":1,"340":1,"502":1,"750":1}}],["pdfjs",{"2":{"2112":1,"2135":1}}],["pdfbytes",{"2":{"888":1}}],["pdf로",{"2":{"180":1,"199":1,"710":1}}],["pdf를",{"2":{"72":1}}],["pdfview로",{"2":{"87":1,"200":1,"723":1}}],["pdfviewec",{"2":{"73":1,"704":1}}],["pdfview와",{"2":{"72":1,"73":2,"74":1,"75":1}}],["pdfviewtest",{"2":{"72":2,"704":1}}],["pdfview",{"2":{"65":1,"71":1,"182":1,"224":1,"704":3,"721":1}}],["pdf",{"0":{"65":1,"72":1,"73":1,"76":1,"182":1,"710":1,"721":1,"2112":1,"2135":1},"1":{"66":1,"67":1,"68":1,"69":1,"70":1,"71":1},"2":{"62":1,"65":1,"71":5,"72":5,"73":1,"76":6,"174":1,"175":1,"429":1,"541":1,"611":2,"694":1,"701":1,"704":5,"721":1,"886":1,"888":1,"1773":1,"2112":3,"2135":2,"2218":3}}],["phonenum",{"0":{"2296":1}}],["phonenumber",{"2":{"1011":1,"1999":1,"2319":2}}],["phone",{"2":{"235":1}}],["phonemsgsend",{"2":{"230":1,"729":2}}],["poorganizationchart",{"0":{"1809":1,"1947":1},"2":{"1809":1,"1942":1}}],["powered",{"2":{"1788":1}}],["powerpoint",{"2":{"878":1}}],["pow",{"2":{"1534":1}}],["popupsmstemplatelist",{"0":{"1153":1,"2026":1},"1":{"1154":1,"1155":1,"1156":1,"1157":1},"2":{"1155":1,"1764":1,"1994":1}}],["popuppagelog",{"0":{"1144":1,"1147":1,"2025":1},"1":{"1145":1,"1148":1,"1149":1,"1150":1,"1151":1},"2":{"1145":1,"1149":1,"1764":1,"1994":1}}],["popuplog",{"0":{"1142":1,"2024":1},"1":{"1143":1},"2":{"1143":1,"1764":1,"1994":1}}],["popupfilelink",{"0":{"1136":1,"2023":1},"1":{"1137":1,"1138":1,"1139":1,"1140":1},"2":{"1138":1,"1140":1,"1764":1,"1994":1}}],["popupapprovalbox",{"0":{"1131":1},"1":{"1132":1},"2":{"1132":1,"1994":1}}],["popupapproval",{"0":{"1129":1,"2021":1},"1":{"1130":1},"2":{"1130":1,"1764":1,"1915":1,"1994":1}}],["popupapprovelist",{"0":{"1123":1,"1133":1,"2022":1},"1":{"1124":1,"1125":1,"1126":1,"1127":1,"1134":1},"2":{"1125":1,"1126":1,"1134":1,"1764":1,"1994":1}}],["popupname",{"2":{"1099":2}}],["popup",{"0":{"1374":1,"2020":1},"1":{"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1},"2":{"1098":2,"1099":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1366":2,"1587":1,"1667":1,"1752":1,"1817":1,"1895":1,"1942":1,"1994":1}}],["popupcomponent",{"2":{"1097":2}}],["popparam",{"2":{"1097":1,"1099":3}}],["popname",{"2":{"1097":2}}],["popblank",{"0":{"1093":1,"2030":1},"1":{"1094":1,"1095":1,"1096":1,"1097":1,"1098":1,"1099":1},"2":{"1095":1,"1098":1,"1366":1,"1765":1,"1994":1}}],["poi",{"0":{"782":1,"876":1},"1":{"877":1,"878":1,"879":1},"2":{"294":2,"429":1,"541":1,"543":1,"877":2,"881":1}}],["pom",{"0":{"284":1,"452":1},"1":{"285":1,"286":1,"287":1},"2":{"437":1,"478":1,"549":1}}],["policydirectives",{"2":{"825":1}}],["policy",{"0":{"221":1,"680":1,"761":1,"825":1},"2":{"217":3,"221":1,"551":1,"636":3,"680":1,"747":1,"761":1,"827":2,"936":1,"962":1,"964":2,"2160":1}}],["port",{"2":{"171":1,"242":1,"268":2,"490":2,"509":1,"690":1,"850":2,"999":1,"1200":1}}],["position",{"2":{"611":3}}],["posi",{"2":{"92":1,"93":1}}],["postinstall",{"2":{"1733":1}}],["postman",{"2":{"469":1}}],["postmapping",{"2":{"163":1,"165":1,"400":1,"421":1,"529":1,"616":1,"626":1,"648":1,"704":1,"728":1,"859":1,"891":1,"894":1}}],["postgresql",{"0":{"258":1,"311":1,"337":1,"464":1,"484":1,"836":1,"841":1},"2":{"258":2,"263":1,"293":2,"319":1,"330":1,"427":1,"445":2,"464":2,"472":1,"480":1,"484":2,"538":1,"543":1,"551":1,"598":1,"601":1,"634":1,"754":2,"774":2,"836":3,"843":1,"847":1}}],["postgres",{"2":{"253":1,"258":1,"444":1,"484":2,"598":1,"752":1,"836":2}}],["post",{"0":{"623":1},"2":{"7":1,"9":1,"16":1,"20":1,"22":1,"28":1,"30":1,"31":1,"41":1,"45":1,"46":1,"54":1,"56":1,"57":1,"63":1,"71":1,"72":1,"90":1,"94":1,"101":1,"103":1,"105":1,"109":1,"113":1,"117":1,"119":1,"120":1,"121":1,"139":1,"150":1,"242":1,"348":2,"393":1,"400":1,"529":1,"637":1,"648":2,"663":1,"704":5,"728":1,"732":1,"815":1,"996":1,"1029":1,"1229":1,"1248":1,"1259":1,"1263":1,"1276":1,"1278":2,"1279":1,"1280":1,"1281":1,"1314":1,"1317":1,"1318":1,"1337":1,"1341":1,"1342":1,"1387":1,"1515":2,"1516":1,"1517":1,"1518":1,"1519":1,"1523":1,"1525":1,"1526":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1543":1,"1546":1,"1547":1,"1551":1,"1552":1,"1556":1,"1567":1,"1609":1,"1614":1,"1702":1,"1785":1,"1957":1,"1969":1,"1981":1,"2069":1,"2269":1}}],["push",{"2":{"1249":1,"1299":1,"1352":1,"1358":1,"1388":1,"1389":1}}],["publicapi",{"2":{"870":1}}],["public",{"0":{"1670":1,"1832":1},"1":{"1833":1,"1834":1,"1835":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1843":1,"1844":1,"1845":1,"1846":1,"1847":1,"1848":1,"1849":1},"2":{"154":1,"163":1,"165":1,"199":2,"223":3,"270":1,"271":1,"273":1,"274":1,"305":1,"308":1,"332":1,"333":1,"358":2,"370":1,"400":3,"412":1,"413":1,"417":2,"421":2,"451":1,"529":3,"532":2,"534":1,"535":1,"600":2,"616":2,"617":2,"625":2,"626":2,"634":2,"635":3,"636":2,"637":2,"638":2,"648":2,"649":2,"670":1,"671":1,"675":3,"692":2,"693":2,"696":2,"704":2,"728":2,"729":2,"753":1,"799":1,"822":1,"859":2,"870":4,"891":1,"894":1,"914":1,"924":1,"948":1,"1637":1,"1652":1,"1816":1,"1833":1,"1834":1,"1838":1,"1840":1,"1841":1,"1842":1,"1844":1,"1846":2,"1847":2,"1848":2}}],["put",{"2":{"149":1,"172":3,"178":2,"179":3,"199":4,"223":2,"318":2,"390":2,"417":2,"418":2,"570":1,"593":2,"601":3,"625":2,"637":1,"707":2,"708":3,"732":3,"846":2,"883":1,"888":2,"978":1}}],["png로",{"2":{"1847":1}}],["png",{"0":{"1837":1},"2":{"65":1,"70":1,"82":1,"119":1,"122":1,"189":1,"1162":1,"1652":1,"1834":1,"1837":2,"1844":1,"1845":1,"1847":2}}],["pcbillreqhipassapprovalcancel",{"2":{"1942":1}}],["pcbillreqhipassapproval",{"2":{"1853":1,"1942":1}}],["pcbillreqhipass2",{"2":{"1853":1,"1855":1,"1942":1}}],["pcbillreqhipass",{"0":{"1808":1},"2":{"1808":1,"1942":2}}],["pc001",{"2":{"45":1}}],["pc",{"2":{"44":2,"45":1,"651":1,"1957":1}}],["p",{"0":{"69":1,"2297":1,"2318":1},"2":{"30":9,"31":6,"32":2,"33":1,"37":1,"46":1,"65":3,"69":3,"71":6,"79":5,"94":3,"103":7,"104":9,"107":1,"109":2,"114":1,"120":9,"121":18,"178":1,"179":2,"182":2,"183":1,"186":5,"197":1,"199":2,"224":1,"390":1,"601":2,"649":1,"651":1,"652":1,"707":1,"708":2,"714":3,"721":3,"722":1,"731":1,"1517":2,"1552":2,"1946":5,"1949":7,"1957":6,"1969":10,"1981":12,"2003":1,"2025":6,"2267":8}}],["paattendancerequest",{"0":{"1807":1,"1945":1},"2":{"1807":1,"1942":1,"1945":1}}],["padding",{"2":{"1600":1,"1609":1,"1641":1,"1710":1}}],["pack",{"2":{"466":1}}],["package",{"0":{"1672":1,"2038":1},"2":{"300":1,"341":1,"503":1,"1652":1,"1733":1,"1748":1,"1816":1,"1891":1,"2172":1,"2178":1}}],["packaging>",{"2":{"285":1}}],["packaging>war",{"2":{"285":1}}],["pascalcase",{"2":{"449":1,"1570":1,"1573":1,"1582":1,"1612":1,"1676":1,"1826":1}}],["password123",{"2":{"103":2,"104":1}}],["password",{"2":{"103":3,"104":2,"109":1,"171":2,"255":2,"257":2,"258":2,"268":2,"482":2,"483":2,"484":2,"490":2,"634":2,"690":2,"834":2,"835":2,"836":2,"850":2,"1229":2,"1248":2,"1387":2,"2151":2,"2231":2,"2232":2}}],["payroll",{"2":{"367":1,"368":2,"371":1,"374":1}}],["paginationmeta",{"2":{"1817":1}}],["paging",{"2":{"236":2}}],["pageid",{"2":{"2332":3}}],["pageinfo",{"2":{"236":1}}],["pagedata",{"0":{"2330":1},"2":{"2325":1,"2326":2,"2330":2,"2332":1}}],["pages",{"2":{"1817":1,"1879":1,"1926":1}}],["pagesize",{"2":{"236":1}}],["pagelog",{"2":{"1151":1}}],["pageheight=",{"2":{"197":1}}],["pagewidth=",{"2":{"197":1}}],["page2",{"2":{"120":1}}],["page1",{"2":{"120":1,"121":1}}],["page",{"0":{"3":1,"4":1},"2":{"0":7,"3":1,"34":1,"1600":2,"1609":2,"1787":1,"2151":6}}],["parse",{"2":{"970":1}}],["parsetoken",{"2":{"214":2,"603":1,"813":1,"945":1}}],["parentmenuid",{"2":{"1606":1,"1625":1}}],["parent>",{"2":{"286":2}}],["parent",{"0":{"286":1},"2":{"286":1}}],["paramobj",{"2":{"617":2,"1957":2,"1969":2,"1981":2}}],["parameters",{"2":{"179":4,"180":1,"708":4,"709":1,"888":4}}],["parameter",{"0":{"863":1},"2":{"75":1,"197":2,"421":1,"611":1,"859":1,"863":1}}],["param",{"2":{"33":2,"154":1,"165":2,"305":4,"308":1,"332":1,"333":1,"412":1,"417":2,"532":1,"534":1,"616":2,"617":3,"625":3,"648":1,"649":3,"753":1,"894":2,"1097":1,"1215":1,"1216":1,"1280":1,"1409":1,"1517":2,"1518":1,"1543":1,"1552":2,"1946":1,"1949":2,"1957":2,"1969":2,"1981":2,"2025":1,"2231":2,"2232":2}}],["param3",{"2":{"33":2}}],["param2",{"2":{"30":1,"31":1,"33":2,"139":1,"310":1,"313":2,"335":1,"336":1,"349":1,"1515":1,"1517":1,"1551":1,"1552":1}}],["param1",{"2":{"30":1,"31":1,"32":1,"33":2,"65":1,"107":1,"139":1,"310":1,"311":1,"313":2,"335":1,"336":1,"337":1,"349":1,"1515":1,"1517":1,"1551":1,"1552":1}}],["paramsmap",{"2":{"318":1,"418":1,"593":1,"846":1}}],["params",{"0":{"93":1},"2":{"30":3,"31":5,"32":2,"33":3,"34":2,"65":1,"67":1,"71":1,"92":1,"94":1,"103":3,"104":2,"107":1,"109":1,"178":2,"182":1,"183":1,"199":3,"224":1,"318":1,"390":2,"417":1,"418":1,"593":1,"601":4,"617":1,"623":1,"625":4,"707":2,"721":1,"722":1,"731":1,"742":1,"743":1,"846":1,"1279":1,"1281":1,"1314":1,"1317":1,"1318":1,"1341":1,"1342":1,"1516":1,"1517":1,"1519":1,"1523":1,"1525":1,"1526":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1546":1,"1547":1,"1552":1,"1556":1,"1567":1,"1614":1,"1785":1,"1946":1,"1949":2,"1957":1,"1969":1,"1974":2,"1981":1,"2025":1,"2069":1,"2269":1}}],["pattern",{"2":{"56":1}}],["paths",{"2":{"1163":1,"1251":1,"1629":1,"2087":1}}],["pathstomatch",{"2":{"870":2}}],["pathdb",{"2":{"658":1}}],["pathmatchingresourcepatternresolver",{"2":{"264":1}}],["pathvariable",{"2":{"76":1}}],["path",{"2":{"51":1,"65":2,"70":2,"81":3,"119":1,"122":1,"188":2,"242":1,"249":3,"494":3,"649":2,"651":1,"658":2,"869":2,"1083":2,"1091":1,"1098":1,"1099":1,"1348":1,"1350":1,"1352":1,"1361":2,"1362":1,"1366":5,"1368":1,"1603":1,"1622":1,"1700":1,"1895":3}}],["pragma",{"2":{"636":1}}],["price",{"2":{"1884":1,"2225":2}}],["print",{"2":{"1435":1}}],["primary",{"2":{"270":1,"634":1,"1007":1,"1609":1,"1997":1}}],["privatevar",{"2":{"1571":1}}],["private",{"2":{"149":1,"167":1,"172":1,"178":1,"199":1,"205":1,"206":2,"208":1,"209":1,"214":1,"223":1,"230":1,"234":1,"235":1,"236":1,"244":1,"279":1,"318":1,"321":1,"326":1,"390":1,"400":2,"417":2,"529":2,"532":2,"570":1,"593":1,"594":1,"595":1,"601":1,"604":1,"609":1,"616":1,"617":1,"625":1,"626":1,"637":2,"648":1,"649":1,"692":1,"693":1,"696":1,"698":1,"704":1,"728":1,"729":2,"786":1,"789":1,"790":1,"792":1,"793":1,"812":1,"818":1,"883":1,"888":1,"896":1,"914":2,"944":1,"955":1,"956":2,"958":1,"959":1,"961":1,"978":1,"989":1,"996":1}}],["preview",{"2":{"1741":1}}],["prettierrc",{"2":{"1745":1}}],["prettier를",{"2":{"1745":1}}],["prettier",{"0":{"1745":1},"2":{"1718":1}}],["predicate",{"2":{"986":1}}],["precedence",{"2":{"638":1,"670":1,"675":2,"799":1}}],["prefix",{"2":{"260":1,"634":1,"838":1}}],["pre>",{"2":{"0":6}}],["provides",{"2":{"1788":1}}],["provided",{"2":{"0":1,"1787":1}}],["project",{"2":{"1652":1,"1694":1,"1731":1,"1816":1}}],["promise",{"2":{"1212":1,"1261":1,"1273":1,"1276":2,"1299":1,"1302":1,"1310":1,"1311":1,"1312":1,"1318":1,"1331":1,"1333":1,"1334":1,"1336":1,"1337":1,"1338":1,"1534":1}}],["prompt",{"2":{"22":3,"149":1,"570":1,"617":1,"623":1,"625":1,"978":1}}],["proxy",{"2":{"1189":1,"1200":1}}],["prop2=",{"2":{"1592":1}}],["prop1=",{"2":{"1592":1}}],["props",{"0":{"1026":1,"1033":1,"1064":1,"1127":1,"1583":1,"1592":1},"2":{"1573":1,"1583":1,"1588":3,"1613":3}}],["property",{"2":{"2185":1}}],["propertyname",{"2":{"982":2}}],["property=",{"2":{"310":2}}],["properties>",{"2":{"287":2,"289":6}}],["properties",{"2":{"171":1,"551":1,"690":1}}],["programming",{"2":{"905":1}}],["protected",{"2":{"672":1}}],["profile>",{"2":{"289":6}}],["profiles>",{"2":{"289":2}}],["profiles",{"2":{"240":2,"289":6,"453":2,"749":2}}],["production",{"0":{"1172":1},"2":{"1167":1,"1507":1,"1735":1}}],["produces",{"2":{"869":1}}],["prod",{"2":{"239":1,"443":1,"452":1,"473":1,"551":1,"642":1,"643":1,"750":1,"773":1,"1182":1,"1482":1,"1503":1,"1740":1}}],["process",{"2":{"154":1,"400":1,"417":1,"529":1,"532":1,"696":1,"1185":1}}],["procedure=",{"2":{"2003":1}}],["procedure",{"2":{"30":4,"31":7,"32":3,"33":5,"65":1,"67":1,"71":1,"103":1,"107":2,"114":1,"178":1,"182":1,"183":1,"199":1,"224":1,"310":1,"311":1,"318":2,"335":1,"336":1,"337":1,"390":2,"417":2,"418":2,"593":2,"601":1,"707":1,"721":1,"722":1,"846":2,"1409":2,"1517":3,"1552":3,"1946":1,"1949":2,"1957":2,"1969":1,"1981":1,"2025":1}}],["pro",{"2":{"22":3}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/@localSearchIndexroot.CQLjUtjU.js b/assets/chunks/@localSearchIndexroot.CQLjUtjU.js new file mode 100644 index 0000000..98fd272 --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.CQLjUtjU.js @@ -0,0 +1 @@ +const t='{"documentCount":2335,"nextId":2335,"documentIds":{"0":"/docs/api-examples.html#runtime-api-examples","1":"/docs/api-examples.html#results","2":"/docs/api-examples.html#theme-data","3":"/docs/api-examples.html#page-data","4":"/docs/api-examples.html#page-frontmatter","5":"/docs/api-examples.html#more","6":"/docs/backend/api/common/ai.html#ai-서비스-api","7":"/docs/backend/api/common/ai.html#기본-정보","8":"/docs/backend/api/common/ai.html#api-목록","9":"/docs/backend/api/common/ai.html#_1-gemini-ai-호출","10":"/docs/backend/api/common/ai.html#설정","11":"/docs/backend/api/common/ai.html#ai-설정-파일","12":"/docs/backend/api/common/ai.html#주의사항","13":"/docs/backend/api/common/ai.html#다음-단계","14":"/docs/backend/api/common/auth.html#인증-토큰-api","15":"/docs/backend/api/common/auth.html#기본-정보","16":"/docs/backend/api/common/auth.html#api-목록","17":"/docs/backend/api/common/auth.html#_1-access-token-재발급","18":"/docs/backend/api/common/auth.html#토큰-정보","19":"/docs/backend/api/common/auth.html#access-token","20":"/docs/backend/api/common/auth.html#refresh-token","21":"/docs/backend/api/common/auth.html#uuid","22":"/docs/backend/api/common/auth.html#에러-처리","23":"/docs/backend/api/common/auth.html#_401-unauthorized","24":"/docs/backend/api/common/auth.html#토큰-재발급-플로우","25":"/docs/backend/api/common/auth.html#주의사항","26":"/docs/backend/api/common/auth.html#다음-단계","27":"/docs/backend/api/common/database.html#데이터베이스-프로시저-호출-api","28":"/docs/backend/api/common/database.html#기본-정보","29":"/docs/backend/api/common/database.html#api-목록","30":"/docs/backend/api/common/database.html#_1-단일-프로시저-실행","31":"/docs/backend/api/common/database.html#_2-다중-프로시저-일괄-실행","32":"/docs/backend/api/common/database.html#_3-다중-커서-결과-조회","33":"/docs/backend/api/common/database.html#_4-string-배열-파라미터-프로시저-호출","34":"/docs/backend/api/common/database.html#_5-클라이언트-에러-로그-저장","35":"/docs/backend/api/common/database.html#프로시저-결과-구조","36":"/docs/backend/api/common/database.html#커서-결과","37":"/docs/backend/api/common/database.html#에러-코드","38":"/docs/backend/api/common/database.html#주의사항","39":"/docs/backend/api/common/database.html#다음-단계","40":"/docs/backend/api/common/file.html#파일-관리-api","41":"/docs/backend/api/common/file.html#기본-정보","42":"/docs/backend/api/common/file.html#api-목록","43":"/docs/backend/api/common/file.html#_1-다중-파일-링크-업로드","44":"/docs/backend/api/common/file.html#form-data","45":"/docs/backend/api/common/file.html#slist-구조-json-문자열","46":"/docs/backend/api/common/file.html#_2-파일-다운로드","47":"/docs/backend/api/common/file.html#파일-처리-규칙","48":"/docs/backend/api/common/file.html#파일-타입","49":"/docs/backend/api/common/file.html#변경-상태","50":"/docs/backend/api/common/file.html#파일명-규칙","51":"/docs/backend/api/common/file.html#주의사항","52":"/docs/backend/api/common/file.html#다음-단계","53":"/docs/backend/api/common/redis.html#redis-관리-api","54":"/docs/backend/api/common/redis.html#기본-정보","55":"/docs/backend/api/common/redis.html#api-목록","56":"/docs/backend/api/common/redis.html#_1-redis-hash-데이터-조회","57":"/docs/backend/api/common/redis.html#_2-redis-hash-데이터-삭제","58":"/docs/backend/api/common/redis.html#redis-데이터-구조","59":"/docs/backend/api/common/redis.html#토큰-저장-구조","60":"/docs/backend/api/common/redis.html#주의사항","61":"/docs/backend/api/common/redis.html#다음-단계","62":"/docs/backend/api/common/sms.html#sms-발송-api","63":"/docs/backend/api/common/sms.html#기본-정보","64":"/docs/backend/api/common/sms.html#api-목록","65":"/docs/backend/api/common/sms.html#_1-sms-메시지-발송","66":"/docs/backend/api/common/sms.html#params-필수","67":"/docs/backend/api/common/sms.html#sessioninfo-필수","68":"/docs/backend/api/common/sms.html#sms-설정","69":"/docs/backend/api/common/sms.html#application-dev-yaml","70":"/docs/backend/api/common/sms.html#메시지-상태","71":"/docs/backend/api/common/sms.html#주의사항","72":"/docs/backend/api/common/sms.html#다음-단계","73":"/docs/backend/api/ess/login.html#로그인-인증-api","74":"/docs/backend/api/ess/login.html#기본-정보","75":"/docs/backend/api/ess/login.html#api-목록","76":"/docs/backend/api/ess/login.html#_1-일반-사용자-로그인","77":"/docs/backend/api/ess/login.html#_2-관리자-로그인","78":"/docs/backend/api/ess/login.html#_3-로그아웃","79":"/docs/backend/api/ess/login.html#_4-세션-정리","80":"/docs/backend/api/ess/login.html#_5-테스트-프로시저-호출","81":"/docs/backend/api/ess/login.html#로그인-프로세스","82":"/docs/backend/api/ess/login.html#_1-로그인-요청","83":"/docs/backend/api/ess/login.html#_2-토큰-발급","84":"/docs/backend/api/ess/login.html#_3-토큰-저장","85":"/docs/backend/api/ess/login.html#_4-api-호출","86":"/docs/backend/api/ess/login.html#_5-토큰-만료-시","87":"/docs/backend/api/ess/login.html#주의사항","88":"/docs/backend/api/ess/login.html#다음-단계","89":"/docs/backend/api/common/report.html#리포트-생성-api","90":"/docs/backend/api/common/report.html#기본-정보","91":"/docs/backend/api/common/report.html#api-목록","92":"/docs/backend/api/common/report.html#_1-pdf-리포트-생성-파일-저장","93":"/docs/backend/api/common/report.html#필수-파라미터","94":"/docs/backend/api/common/report.html#데이터-조회-파라미터","95":"/docs/backend/api/common/report.html#복호화-파라미터","96":"/docs/backend/api/common/report.html#리포트-파라미터-jr-p","97":"/docs/backend/api/common/report.html#이미지-파라미터","98":"/docs/backend/api/common/report.html#커서-변환-파라미터-jr-convert","99":"/docs/backend/api/common/report.html#_2-pdf-리포트-생성-바이너리-반환","100":"/docs/backend/api/common/report.html#_3-암호화된-pdf-생성","101":"/docs/backend/api/common/report.html#_4-html-리포트-생성","102":"/docs/backend/api/common/report.html#_5-excel-리포트-다운로드","103":"/docs/backend/api/common/report.html#_6-생성된-pdf-파일-조회","104":"/docs/backend/api/common/report.html#리포트-파라미터-규칙","105":"/docs/backend/api/common/report.html#커서-파라미터","106":"/docs/backend/api/common/report.html#일반-파라미터","107":"/docs/backend/api/common/report.html#이미지-파라미터-1","108":"/docs/backend/api/common/report.html#서버-경로-이미지","109":"/docs/backend/api/common/report.html#웹-경로-이미지","110":"/docs/backend/api/common/report.html#커서-변환","111":"/docs/backend/api/common/report.html#복호화","112":"/docs/backend/api/common/report.html#리포트-템플릿-위치","113":"/docs/backend/api/common/report.html#한글-폰트","114":"/docs/backend/api/common/report.html#주의사항","115":"/docs/backend/api/common/report.html#다음-단계","116":"/docs/backend/api/ess/user.html#사용자-관리-api","117":"/docs/backend/api/ess/user.html#기본-정보","118":"/docs/backend/api/ess/user.html#api-목록","119":"/docs/backend/api/ess/user.html#_1-사용자-이미지-조회","120":"/docs/backend/api/ess/user.html#_2-즐겨찾기-목록-조회","121":"/docs/backend/api/ess/user.html#_3-즐겨찾기-수정","122":"/docs/backend/api/ess/user.html#파일-경로-설정","123":"/docs/backend/api/ess/user.html#주의사항","124":"/docs/backend/api/ess/user.html#다음-단계","125":"/docs/backend/api/fcm/#fcm-모듈-api","126":"/docs/backend/api/fcm/#현재-상태","127":"/docs/backend/api/fcm/#예정된-api","128":"/docs/backend/api/fcm/#다음-단계","129":"/docs/backend/api/#api-레퍼런스","130":"/docs/backend/api/#api-개요","131":"/docs/backend/api/#공통-사항","132":"/docs/backend/api/#인증-방법","133":"/docs/backend/api/#access-token-사용","134":"/docs/backend/api/#refresh-token-사용","135":"/docs/backend/api/#공통-응답-형식","136":"/docs/backend/api/#성공-응답","137":"/docs/backend/api/#실패-응답","138":"/docs/backend/api/#http-상태-코드","139":"/docs/backend/api/#요청-형식","140":"/docs/backend/api/#api-그룹별-링크","141":"/docs/backend/api/#공통-프레임워크-api","142":"/docs/backend/api/#ess-모듈-api","143":"/docs/backend/api/#fcm-모듈-api","144":"/docs/backend/api/#swagger-ui","145":"/docs/backend/api/#다음-단계","146":"/docs/backend/common-features/ai.html#ai-서비스","147":"/docs/backend/common-features/ai.html#설정","148":"/docs/backend/common-features/ai.html#ai-config-yaml","149":"/docs/backend/common-features/ai.html#사용-예시","150":"/docs/backend/common-features/ai.html#api-엔드포인트","151":"/docs/backend/common-features/ai.html#다음-단계","152":"/docs/backend/common-features/file.html#파일-처리","153":"/docs/backend/common-features/file.html#파일-업로드","154":"/docs/backend/common-features/file.html#multipartfile-사용","155":"/docs/backend/common-features/file.html#파일-크기-제한","156":"/docs/backend/common-features/file.html#파일-다운로드","157":"/docs/backend/common-features/file.html#파일-유틸리티","158":"/docs/backend/common-features/file.html#axpcommfileutil","159":"/docs/backend/common-features/file.html#다음-단계","160":"/docs/backend/common-features/logging.html#로깅","161":"/docs/backend/common-features/logging.html#로깅-어노테이션","162":"/docs/backend/common-features/logging.html#axpcommlogannotation","163":"/docs/backend/common-features/logging.html#로그-레벨","164":"/docs/backend/common-features/logging.html#설정","165":"/docs/backend/common-features/logging.html#로그-파일","166":"/docs/backend/common-features/logging.html#logback-설정","167":"/docs/backend/common-features/logging.html#logback-spring-xml","168":"/docs/backend/common-features/logging.html#다음-단계","169":"/docs/backend/common-features/mail.html#메일-발송","170":"/docs/backend/common-features/mail.html#설정","171":"/docs/backend/common-features/mail.html#application-yaml","172":"/docs/backend/common-features/mail.html#사용-예시","173":"/docs/backend/common-features/mail.html#다음-단계","174":"/docs/backend/common-features/report.html#리포트-생성","175":"/docs/backend/common-features/report.html#개요","176":"/docs/backend/common-features/report.html#리포트-생성-프로세스","177":"/docs/backend/common-features/report.html#_1-리포트-템플릿-작성","178":"/docs/backend/common-features/report.html#_2-데이터-조회","179":"/docs/backend/common-features/report.html#_3-리포트-파라미터-설정","180":"/docs/backend/common-features/report.html#_4-리포트-생성","181":"/docs/backend/common-features/report.html#api-사용","182":"/docs/backend/common-features/report.html#pdf-리포트-생성","183":"/docs/backend/common-features/report.html#excel-리포트-다운로드","184":"/docs/backend/common-features/report.html#리포트-파라미터-규칙","185":"/docs/backend/common-features/report.html#커서-파라미터","186":"/docs/backend/common-features/report.html#일반-파라미터","187":"/docs/backend/common-features/report.html#이미지-파라미터","188":"/docs/backend/common-features/report.html#서버-경로-이미지","189":"/docs/backend/common-features/report.html#웹-경로-이미지","190":"/docs/backend/common-features/report.html#커서-변환","191":"/docs/backend/common-features/report.html#복호화","192":"/docs/backend/common-features/report.html#한글-폰트","193":"/docs/backend/common-features/report.html#폰트-위치","194":"/docs/backend/common-features/report.html#지원-폰트","195":"/docs/backend/common-features/report.html#폰트-설정","196":"/docs/backend/common-features/report.html#리포트-템플릿-작성","197":"/docs/backend/common-features/report.html#기본-구조","198":"/docs/backend/common-features/report.html#사용-예시","199":"/docs/backend/common-features/report.html#서비스에서-리포트-생성","200":"/docs/backend/common-features/report.html#주의사항","201":"/docs/backend/common-features/report.html#다음-단계","202":"/docs/backend/common-features/sms.html#sms-발송","203":"/docs/backend/common-features/sms.html#설정","204":"/docs/backend/common-features/sms.html#application-yaml","205":"/docs/backend/common-features/sms.html#사용-예시","206":"/docs/backend/common-features/sms.html#다음-단계","207":"/docs/backend/common-features/security.html#보안-기능","208":"/docs/backend/common-features/security.html#개요","209":"/docs/backend/common-features/security.html#암호화-유틸리티","210":"/docs/backend/common-features/security.html#aes-128","211":"/docs/backend/common-features/security.html#rsa","212":"/docs/backend/common-features/security.html#해시-함수","213":"/docs/backend/common-features/security.html#md5","214":"/docs/backend/common-features/security.html#sha-256","215":"/docs/backend/common-features/security.html#xss-방지","216":"/docs/backend/common-features/security.html#axpxssfilter","217":"/docs/backend/common-features/security.html#axpxssutil","218":"/docs/backend/common-features/security.html#jwt-인증","219":"/docs/backend/common-features/security.html#axpcommauthservice","220":"/docs/backend/common-features/security.html#axpjwtauthenticationfilter","221":"/docs/backend/common-features/security.html#spring-security-통합","222":"/docs/backend/common-features/security.html#axpsecurityconfig","223":"/docs/backend/common-features/security.html#복호화-필터","224":"/docs/backend/common-features/security.html#axpdecryptfilter","225":"/docs/backend/common-features/security.html#보안-정책-파일","226":"/docs/backend/common-features/security.html#antisamy-policy-xml","227":"/docs/backend/common-features/security.html#사용-예시","228":"/docs/backend/common-features/security.html#개인정보-암호화","229":"/docs/backend/common-features/security.html#리포트-생성-시-복호화","230":"/docs/backend/common-features/security.html#주의사항","231":"/docs/backend/common-features/security.html#다음-단계","232":"/docs/backend/configuration/application.html#애플리케이션-설정","233":"/docs/backend/configuration/application.html#설정-파일-위치","234":"/docs/backend/configuration/application.html#기본-설정-application-yaml","235":"/docs/backend/configuration/application.html#서버-설정","236":"/docs/backend/configuration/application.html#포트-및-컨텍스트","237":"/docs/backend/configuration/application.html#jwt-설정","238":"/docs/backend/configuration/application.html#rsa-설정","239":"/docs/backend/configuration/application.html#cors-설정","240":"/docs/backend/configuration/application.html#security-설정","241":"/docs/backend/configuration/application.html#제외-uri","242":"/docs/backend/configuration/application.html#파일-업로드-설정","243":"/docs/backend/configuration/application.html#파일-경로-설정","244":"/docs/backend/configuration/application.html#로깅-설정","245":"/docs/backend/configuration/application.html#다음-단계","246":"/docs/backend/common-features/utilities.html#유틸리티-클래스","247":"/docs/backend/common-features/utilities.html#axpcommutil","248":"/docs/backend/common-features/utilities.html#주요-메서드","249":"/docs/backend/common-features/utilities.html#axpcommvalidationutil","250":"/docs/backend/common-features/utilities.html#axpcommpaging","251":"/docs/backend/common-features/utilities.html#다음-단계","252":"/docs/backend/configuration/datasource.html#데이터소스-설정","253":"/docs/backend/configuration/datasource.html#데이터베이스-타입-설정","254":"/docs/backend/configuration/datasource.html#tibero-설정","255":"/docs/backend/configuration/datasource.html#기본-설정","256":"/docs/backend/configuration/datasource.html#hikaricp-설정","257":"/docs/backend/configuration/datasource.html#oracle-설정","258":"/docs/backend/configuration/datasource.html#postgresql-설정","259":"/docs/backend/configuration/datasource.html#axpdatasourceconfig","260":"/docs/backend/configuration/datasource.html#조건부-빈-생성","261":"/docs/backend/configuration/datasource.html#생성되는-bean","262":"/docs/backend/configuration/datasource.html#mybatis-설정","263":"/docs/backend/configuration/datasource.html#db별-설정-파일","264":"/docs/backend/configuration/datasource.html#매퍼-파일-스캔","265":"/docs/backend/configuration/datasource.html#다음-단계","266":"/docs/backend/configuration/maven.html#maven-설정","267":"/docs/backend/configuration/maven.html#pom-xml-구조","268":"/docs/backend/configuration/maven.html#기본-정보","269":"/docs/backend/configuration/maven.html#spring-boot-parent","270":"/docs/backend/configuration/maven.html#java-버전","271":"/docs/backend/configuration/maven.html#프로파일-설정","272":"/docs/backend/configuration/maven.html#프로파일-정의","273":"/docs/backend/configuration/maven.html#프로파일-사용","274":"/docs/backend/configuration/maven.html#주요-의존성","275":"/docs/backend/configuration/maven.html#spring-boot-starters","276":"/docs/backend/configuration/maven.html#데이터베이스","277":"/docs/backend/configuration/maven.html#기타","278":"/docs/backend/configuration/maven.html#빌드-플러그인","279":"/docs/backend/configuration/maven.html#spring-boot-maven-plugin","280":"/docs/backend/configuration/maven.html#maven-war-plugin","281":"/docs/backend/configuration/maven.html#빌드-명령어","282":"/docs/backend/configuration/maven.html#개발-환경-빌드","283":"/docs/backend/configuration/maven.html#war-파일-생성","284":"/docs/backend/configuration/maven.html#테스트-제외-빌드","285":"/docs/backend/configuration/maven.html#다음-단계","286":"/docs/backend/configuration/redis.html#redis-설정","287":"/docs/backend/configuration/redis.html#redis-연결-설정","288":"/docs/backend/configuration/redis.html#application-dev-yaml","289":"/docs/backend/configuration/redis.html#axpredisconfig","290":"/docs/backend/configuration/redis.html#캐시용-redis","291":"/docs/backend/configuration/redis.html#비즈니스-컴포넌트용-redis","292":"/docs/backend/configuration/redis.html#redistemplate","293":"/docs/backend/configuration/redis.html#캐시용-redistemplate","294":"/docs/backend/configuration/redis.html#비즈니스-컴포넌트용-redistemplate","295":"/docs/backend/configuration/redis.html#직렬화-설정","296":"/docs/backend/configuration/redis.html#key-직렬화","297":"/docs/backend/configuration/redis.html#value-직렬화","298":"/docs/backend/configuration/redis.html#redis-사용-예시","299":"/docs/backend/configuration/redis.html#토큰-저장","300":"/docs/backend/configuration/redis.html#토큰-조회","301":"/docs/backend/configuration/redis.html#토큰-삭제","302":"/docs/backend/configuration/redis.html#다음-단계","303":"/docs/backend/database/common-service.html#공통-db-서비스","304":"/docs/backend/database/common-service.html#axpcommdbservice","305":"/docs/backend/database/common-service.html#사용-예시","306":"/docs/backend/database/common-service.html#지원-데이터베이스","307":"/docs/backend/database/common-service.html#axpcommredisdbservice","308":"/docs/backend/database/common-service.html#토큰-저장","309":"/docs/backend/database/common-service.html#토큰-조회","310":"/docs/backend/database/common-service.html#토큰-삭제","311":"/docs/backend/database/common-service.html#hash-데이터-조회","312":"/docs/backend/database/common-service.html#axpcommdbadapterservice","313":"/docs/backend/database/common-service.html#사용-예시-1","314":"/docs/backend/database/common-service.html#다음-단계","315":"/docs/backend/database/mapper-guide.html#mapper-작성-가이드","316":"/docs/backend/database/mapper-guide.html#mapper-인터페이스","317":"/docs/backend/database/mapper-guide.html#기본-구조","318":"/docs/backend/database/mapper-guide.html#xml-매퍼-파일","319":"/docs/backend/database/mapper-guide.html#파일-위치","320":"/docs/backend/database/mapper-guide.html#기본-구조-1","321":"/docs/backend/database/mapper-guide.html#프로시저-호출","322":"/docs/backend/database/mapper-guide.html#tibero-oracle","323":"/docs/backend/database/mapper-guide.html#postgresql","324":"/docs/backend/database/mapper-guide.html#동적-sql","325":"/docs/backend/database/mapper-guide.html#if","326":"/docs/backend/database/mapper-guide.html#foreach","327":"/docs/backend/database/mapper-guide.html#다음-단계","328":"/docs/backend/database/mybatis.html#mybatis-설정","329":"/docs/backend/database/mybatis.html#mapperscan-설정","330":"/docs/backend/database/mybatis.html#db별-설정-파일","331":"/docs/backend/database/mybatis.html#매퍼-파일-위치","332":"/docs/backend/database/mybatis.html#mapper-인터페이스-작성","333":"/docs/backend/database/mybatis.html#xml-매퍼-작성","334":"/docs/backend/database/mybatis.html#프로시저-호출","335":"/docs/backend/database/mybatis.html#tibero","336":"/docs/backend/database/mybatis.html#oracle","337":"/docs/backend/database/mybatis.html#postgresql","338":"/docs/backend/database/mybatis.html#다음-단계","339":"/docs/backend/deployment/build.html#maven-빌드","340":"/docs/backend/deployment/build.html#개발-환경-빌드","341":"/docs/backend/deployment/build.html#war-파일-생성","342":"/docs/backend/deployment/build.html#다음-단계","343":"/docs/backend/deployment/deploy.html#배포-설정","344":"/docs/backend/deployment/deploy.html#tomcat-배포","345":"/docs/backend/deployment/deploy.html#다음-단계","346":"/docs/backend/development-guide/api-design.html#rest-api-설계-규칙","347":"/docs/backend/development-guide/api-design.html#url-패턴","348":"/docs/backend/development-guide/api-design.html#http-메서드","349":"/docs/backend/development-guide/api-design.html#요청-형식","350":"/docs/backend/development-guide/api-design.html#응답-형식","351":"/docs/backend/development-guide/api-design.html#성공","352":"/docs/backend/development-guide/api-design.html#실패","353":"/docs/backend/development-guide/api-design.html#다음-단계","354":"/docs/backend/development-guide/authentication.html#인증-인가-처리","355":"/docs/backend/development-guide/authentication.html#jwt-토큰-사용","356":"/docs/backend/development-guide/authentication.html#authorization-헤더","357":"/docs/backend/development-guide/authentication.html#쿠키","358":"/docs/backend/development-guide/authentication.html#제외-uri-설정","359":"/docs/backend/development-guide/authentication.html#다음-단계","360":"/docs/backend/development-guide/new-module/config.html#설정-파일-추가","361":"/docs/backend/development-guide/new-module/config.html#환경별-설정","362":"/docs/backend/development-guide/new-module/config.html#application-dev-yaml","363":"/docs/backend/development-guide/new-module/config.html#다음-단계","364":"/docs/backend/development-guide/new-module.html#새로운-모듈-추가","365":"/docs/backend/development-guide/new-module.html#개요","366":"/docs/backend/development-guide/new-module.html#모듈-추가-프로세스","367":"/docs/backend/development-guide/new-module.html#_1단계-모듈-구조-설계","368":"/docs/backend/development-guide/new-module.html#_2단계-패키지-구조-생성","369":"/docs/backend/development-guide/new-module.html#_3단계-애플리케이션-설정","370":"/docs/backend/development-guide/new-module.html#componentscan-추가","371":"/docs/backend/development-guide/new-module.html#mapperscan-추가","372":"/docs/backend/development-guide/new-module.html#_4단계-클래스-작성","373":"/docs/backend/development-guide/new-module.html#_5단계-리소스-파일-생성","374":"/docs/backend/development-guide/new-module.html#xml-매퍼-파일","375":"/docs/backend/development-guide/new-module.html#_6단계-설정-파일-추가","376":"/docs/backend/development-guide/new-module.html#표준-패키지-구조","377":"/docs/backend/development-guide/new-module.html#전체-구조","378":"/docs/backend/development-guide/new-module.html#계층별-역할","379":"/docs/backend/development-guide/new-module.html#controller","380":"/docs/backend/development-guide/new-module.html#service","381":"/docs/backend/development-guide/new-module.html#mapper","382":"/docs/backend/development-guide/new-module.html#개발-가이드","383":"/docs/backend/development-guide/new-module.html#_1-모듈-생성-절차","384":"/docs/backend/development-guide/new-module.html#_2-컨트롤러-작성","385":"/docs/backend/development-guide/new-module.html#_3-서비스-작성","386":"/docs/backend/development-guide/new-module.html#_4-mapper-작성","387":"/docs/backend/development-guide/new-module.html#_5-설정-파일-추가","388":"/docs/backend/development-guide/new-module.html#실제-예시-ess-모듈-구조","389":"/docs/backend/development-guide/new-module.html#공통-프레임워크-활용","390":"/docs/backend/development-guide/new-module.html#데이터베이스","391":"/docs/backend/development-guide/new-module.html#인증-보안","392":"/docs/backend/development-guide/new-module.html#유틸리티","393":"/docs/backend/development-guide/new-module.html#api-설계-규칙","394":"/docs/backend/development-guide/new-module.html#인증-인가-처리","395":"/docs/backend/development-guide/new-module.html#swagger-문서화","396":"/docs/backend/development-guide/new-module.html#체크리스트","397":"/docs/backend/development-guide/new-module.html#다음-단계","398":"/docs/backend/development-guide/new-module.html#참고-자료","399":"/docs/backend/development-guide/new-module/controller.html#컨트롤러-작성","400":"/docs/backend/development-guide/new-module/controller.html#기본-구조","401":"/docs/backend/development-guide/new-module/controller.html#응답-형식","402":"/docs/backend/development-guide/new-module/controller.html#성공","403":"/docs/backend/development-guide/new-module/controller.html#실패","404":"/docs/backend/development-guide/new-module/controller.html#다음-단계","405":"/docs/backend/development-guide/new-module/creation.html#모듈-생성-절차","406":"/docs/backend/development-guide/new-module/creation.html#_1-패키지-구조-생성","407":"/docs/backend/development-guide/new-module/creation.html#_2-componentscan-추가","408":"/docs/backend/development-guide/new-module/creation.html#_3-mapperscan-추가","409":"/docs/backend/development-guide/new-module/creation.html#_4-xml-매퍼-파일-생성","410":"/docs/backend/development-guide/new-module/creation.html#다음-단계","411":"/docs/backend/development-guide/new-module/mapper.html#mapper-작성","412":"/docs/backend/development-guide/new-module/mapper.html#인터페이스","413":"/docs/backend/development-guide/new-module/mapper.html#xml-매퍼","414":"/docs/backend/development-guide/new-module/mapper.html#파일-위치","415":"/docs/backend/development-guide/new-module/mapper.html#다음-단계","416":"/docs/backend/development-guide/new-module/service.html#서비스-작성","417":"/docs/backend/development-guide/new-module/service.html#기본-구조","418":"/docs/backend/development-guide/new-module/service.html#프로시저-호출","419":"/docs/backend/development-guide/new-module/service.html#다음-단계","420":"/docs/backend/development-guide/swagger.html#swagger-openapi-문서화","421":"/docs/backend/development-guide/swagger.html#어노테이션-추가","422":"/docs/backend/development-guide/swagger.html#접근-url","423":"/docs/backend/development-guide/swagger.html#다음-단계","424":"/docs/backend/getting-started/overview.html#프로젝트-개요","425":"/docs/backend/getting-started/overview.html#axpframework-소개","426":"/docs/backend/getting-started/overview.html#주요-특징","427":"/docs/backend/getting-started/overview.html#_1-다중-데이터베이스-지원","428":"/docs/backend/getting-started/overview.html#_2-통합-보안-기능","429":"/docs/backend/getting-started/overview.html#_3-공통-기능-제공","430":"/docs/backend/getting-started/overview.html#_4-redis-캐싱","431":"/docs/backend/getting-started/overview.html#_5-모듈화된-구조","432":"/docs/backend/getting-started/overview.html#프로젝트-목적","433":"/docs/backend/getting-started/overview.html#기술-스택-요약","434":"/docs/backend/getting-started/overview.html#프로젝트-구조","435":"/docs/backend/getting-started/overview.html#다음-단계","436":"/docs/backend/getting-started/project-structure.html#프로젝트-구조","437":"/docs/backend/getting-started/project-structure.html#전체-디렉토리-구조","438":"/docs/backend/getting-started/project-structure.html#java-소스-코드-구조","439":"/docs/backend/getting-started/project-structure.html#_1-공통-프레임워크-모듈-axpframework","440":"/docs/backend/getting-started/project-structure.html#_2-ess-비즈니스-모듈-ess","441":"/docs/backend/getting-started/project-structure.html#_3-fcm-비즈니스-모듈-fcm","442":"/docs/backend/getting-started/project-structure.html#리소스-파일-구조","443":"/docs/backend/getting-started/project-structure.html#_1-설정-파일-resources-config","444":"/docs/backend/getting-started/project-structure.html#_2-mybatis-매퍼-resources-mapper","445":"/docs/backend/getting-started/project-structure.html#_3-mybatis-설정-resources-mapper-config","446":"/docs/backend/getting-started/project-structure.html#_4-리포트-템플릿-resources-report","447":"/docs/backend/getting-started/project-structure.html#패키지-네이밍-규칙","448":"/docs/backend/getting-started/project-structure.html#_1-표준-패키지-구조","449":"/docs/backend/getting-started/project-structure.html#_2-네이밍-규칙","450":"/docs/backend/getting-started/project-structure.html#주요-파일-설명","451":"/docs/backend/getting-started/project-structure.html#_1-axpbootapplication-java","452":"/docs/backend/getting-started/project-structure.html#_2-pom-xml","453":"/docs/backend/getting-started/project-structure.html#_3-application-yaml","454":"/docs/backend/getting-started/project-structure.html#모듈-간-의존성","455":"/docs/backend/getting-started/project-structure.html#새로운-모듈-추가-시-구조","456":"/docs/backend/getting-started/project-structure.html#다음-단계","457":"/docs/backend/getting-started/requirements.html#시스템-요구사항","458":"/docs/backend/getting-started/requirements.html#필수-요구사항","459":"/docs/backend/getting-started/requirements.html#_1-java-개발-환경","460":"/docs/backend/getting-started/requirements.html#_2-빌드-도구","461":"/docs/backend/getting-started/requirements.html#_3-데이터베이스","462":"/docs/backend/getting-started/requirements.html#tibero6-기본값","463":"/docs/backend/getting-started/requirements.html#oracle","464":"/docs/backend/getting-started/requirements.html#postgresql","465":"/docs/backend/getting-started/requirements.html#_4-redis-valkey-호환","466":"/docs/backend/getting-started/requirements.html#_5-ide-선택사항","467":"/docs/backend/getting-started/requirements.html#선택적-요구사항","468":"/docs/backend/getting-started/requirements.html#_1-외부-tomcat-서버","469":"/docs/backend/getting-started/requirements.html#_2-개발-도구","470":"/docs/backend/getting-started/requirements.html#운영-환경-요구사항","471":"/docs/backend/getting-started/requirements.html#서버-사양-권장","472":"/docs/backend/getting-started/requirements.html#네트워크","473":"/docs/backend/getting-started/requirements.html#환경별-설정","474":"/docs/backend/getting-started/requirements.html#다음-단계","475":"/docs/backend/getting-started/setup.html#개발-환경-설정","476":"/docs/backend/getting-started/setup.html#_1-프로젝트-클론-및-준비","477":"/docs/backend/getting-started/setup.html#_1-1-프로젝트-다운로드","478":"/docs/backend/getting-started/setup.html#_1-2-프로젝트-구조-확인","479":"/docs/backend/getting-started/setup.html#_2-데이터베이스-설정","480":"/docs/backend/getting-started/setup.html#_2-1-데이터베이스-선택","481":"/docs/backend/getting-started/setup.html#_2-2-설정-파일-수정","482":"/docs/backend/getting-started/setup.html#tibero-설정-예시","483":"/docs/backend/getting-started/setup.html#oracle-설정-예시","484":"/docs/backend/getting-started/setup.html#postgresql-설정-예시","485":"/docs/backend/getting-started/setup.html#_2-3-tibero-jdbc-드라이버-확인","486":"/docs/backend/getting-started/setup.html#_3-redis-설정","487":"/docs/backend/getting-started/setup.html#_3-1-redis-설치-및-실행","488":"/docs/backend/getting-started/setup.html#windows","489":"/docs/backend/getting-started/setup.html#linux-mac","490":"/docs/backend/getting-started/setup.html#_3-2-redis-설정-파일-수정","491":"/docs/backend/getting-started/setup.html#_4-애플리케이션-설정","492":"/docs/backend/getting-started/setup.html#_4-1-jwt-시크릿-키-설정","493":"/docs/backend/getting-started/setup.html#_4-2-cors-설정","494":"/docs/backend/getting-started/setup.html#_4-3-파일-경로-설정","495":"/docs/backend/getting-started/setup.html#_5-프로젝트-빌드","496":"/docs/backend/getting-started/setup.html#_5-1-maven-의존성-다운로드","497":"/docs/backend/getting-started/setup.html#_5-2-빌드-확인","498":"/docs/backend/getting-started/setup.html#_6-애플리케이션-실행","499":"/docs/backend/getting-started/setup.html#_6-1-ide에서-실행","500":"/docs/backend/getting-started/setup.html#intellij-idea","501":"/docs/backend/getting-started/setup.html#eclipse","502":"/docs/backend/getting-started/setup.html#_6-2-maven으로-실행","503":"/docs/backend/getting-started/setup.html#_6-3-war-파일로-실행","504":"/docs/backend/getting-started/setup.html#_7-애플리케이션-확인","505":"/docs/backend/getting-started/setup.html#_7-1-서버-시작-확인","506":"/docs/backend/getting-started/setup.html#_7-2-api-확인","507":"/docs/backend/getting-started/setup.html#_7-3-로그-확인","508":"/docs/backend/getting-started/setup.html#_8-문제-해결","509":"/docs/backend/getting-started/setup.html#_8-1-포트-충돌","510":"/docs/backend/getting-started/setup.html#_8-2-데이터베이스-연결-실패","511":"/docs/backend/getting-started/setup.html#_8-3-redis-연결-실패","512":"/docs/backend/getting-started/setup.html#다음-단계","513":"/docs/backend/#axp-framework-dev-docs","514":"/docs/backend/#이-문서는-무엇인가요","515":"/docs/backend/#처음-온-개발자를-위한-3단계","516":"/docs/backend/#핵심-아키텍처-빠른-링크","517":"/docs/backend/#공통-기능-사용-가이드","518":"/docs/backend/#새-모듈을-만들-때-추천-흐름","519":"/docs/backend/#기술-스택-개요","520":"/docs/backend/#환경-설정-가이드","521":"/docs/backend/#api-레퍼런스","522":"/docs/backend/#문제-해결","523":"/docs/backend/#참고-자료","524":"/docs/backend/project-structure/business.html#비즈니스-모듈-구조","525":"/docs/backend/project-structure/business.html#표준-패키지-구조","526":"/docs/backend/project-structure/business.html#ess-모듈","527":"/docs/backend/project-structure/business.html#구조","528":"/docs/backend/project-structure/business.html#주요-기능","529":"/docs/backend/project-structure/business.html#_1-인증-auth","530":"/docs/backend/project-structure/business.html#_2-공통-기능-com","531":"/docs/backend/project-structure/business.html#_3-관리자-admin","532":"/docs/backend/project-structure/business.html#_4-복지-welfare","533":"/docs/backend/project-structure/business.html#fcm-모듈","534":"/docs/backend/project-structure/business.html#구조-1","535":"/docs/backend/project-structure/business.html#주요-기능-1","536":"/docs/backend/project-structure/business.html#_1-공통-기능-com","537":"/docs/backend/project-structure/business.html#_2-hri-hri","538":"/docs/backend/project-structure/business.html#_3-시스템-sys","539":"/docs/backend/project-structure/business.html#컨트롤러-작성-규칙","540":"/docs/backend/project-structure/business.html#기본-구조","541":"/docs/backend/project-structure/business.html#응답-형식","542":"/docs/backend/project-structure/business.html#서비스-작성-규칙","543":"/docs/backend/project-structure/business.html#기본-구조-1","544":"/docs/backend/project-structure/business.html#mapper-작성-규칙","545":"/docs/backend/project-structure/business.html#인터페이스","546":"/docs/backend/project-structure/business.html#xml-매퍼","547":"/docs/backend/project-structure/business.html#다음-단계","548":"/docs/backend/project-structure/directory.html#전체-디렉토리-구조","549":"/docs/backend/project-structure/directory.html#루트-디렉토리-구조","550":"/docs/backend/project-structure/directory.html#소스-코드-디렉토리-구조","551":"/docs/backend/project-structure/directory.html#main-디렉토리","552":"/docs/backend/project-structure/directory.html#test-디렉토리","553":"/docs/backend/project-structure/directory.html#java-소스-코드-구조","554":"/docs/backend/project-structure/directory.html#_1-공통-프레임워크-모듈-axpframework","555":"/docs/backend/project-structure/directory.html#_2-ess-비즈니스-모듈-ess","556":"/docs/backend/project-structure/directory.html#_3-fcm-비즈니스-모듈-fcm","557":"/docs/backend/project-structure/directory.html#빌드-결과물-디렉토리","558":"/docs/backend/project-structure/directory.html#로그-디렉토리","559":"/docs/backend/project-structure/directory.html#디렉토리-역할-설명","560":"/docs/backend/project-structure/directory.html#src-main-java","561":"/docs/backend/project-structure/directory.html#src-main-resources","562":"/docs/backend/project-structure/directory.html#src-test-java","563":"/docs/backend/project-structure/directory.html#target","564":"/docs/backend/project-structure/directory.html#logs","565":"/docs/backend/project-structure/directory.html#패키지-네이밍-규칙","566":"/docs/backend/project-structure/directory.html#다음-단계","567":"/docs/backend/project-structure/framework.html#공통-프레임워크-모듈","568":"/docs/backend/project-structure/framework.html#모듈-구조","569":"/docs/backend/project-structure/framework.html#주요-모듈-설명","570":"/docs/backend/project-structure/framework.html#_1-ai-서비스-ai","571":"/docs/backend/project-structure/framework.html#_2-공통-기능-common","572":"/docs/backend/project-structure/framework.html#_2-1-controller-common-controller","573":"/docs/backend/project-structure/framework.html#_2-2-database-common-database","574":"/docs/backend/project-structure/framework.html#_2-3-logging-common-logging","575":"/docs/backend/project-structure/framework.html#_2-4-security-common-security","576":"/docs/backend/project-structure/framework.html#_2-5-token-common-token","577":"/docs/backend/project-structure/framework.html#_2-6-utils-common-utils","578":"/docs/backend/project-structure/framework.html#_3-설정-클래스-config","579":"/docs/backend/project-structure/framework.html#_3-1-axpdatasourceconfig","580":"/docs/backend/project-structure/framework.html#_3-2-axpredisconfig","581":"/docs/backend/project-structure/framework.html#_3-3-axpsecurityconfig","582":"/docs/backend/project-structure/framework.html#_3-4-axpwebconfig","583":"/docs/backend/project-structure/framework.html#_3-5-axpfilterconfig","584":"/docs/backend/project-structure/framework.html#_4-필터-filter","585":"/docs/backend/project-structure/framework.html#_4-1-auth-filter-filter-auth","586":"/docs/backend/project-structure/framework.html#_4-2-logging-filter-filter-logging","587":"/docs/backend/project-structure/framework.html#_4-3-security-filter-filter-security","588":"/docs/backend/project-structure/framework.html#_5-파일-관리-file","589":"/docs/backend/project-structure/framework.html#_6-메일-발송-mail","590":"/docs/backend/project-structure/framework.html#_7-리포트-생성-report","591":"/docs/backend/project-structure/framework.html#_8-sms-발송-sms","592":"/docs/backend/project-structure/framework.html#공통-기능-사용법","593":"/docs/backend/project-structure/framework.html#프로시저-호출","594":"/docs/backend/project-structure/framework.html#redis-사용","595":"/docs/backend/project-structure/framework.html#암호화","596":"/docs/backend/project-structure/framework.html#다음-단계","597":"/docs/backend/project-structure/framework/ai.html#ai-서비스-모듈","598":"/docs/backend/project-structure/framework/ai.html#모듈-구조","599":"/docs/backend/project-structure/framework/ai.html#주요-클래스","600":"/docs/backend/project-structure/framework/ai.html#_1-axpaicontroller","601":"/docs/backend/project-structure/framework/ai.html#_2-axpgeminiservice","602":"/docs/backend/project-structure/framework/ai.html#_3-axpaiservice","603":"/docs/backend/project-structure/framework/ai.html#설정","604":"/docs/backend/project-structure/framework/ai.html#ai-설정-파일","605":"/docs/backend/project-structure/framework/ai.html#application-yaml-설정","606":"/docs/backend/project-structure/framework/ai.html#api-엔드포인트","607":"/docs/backend/project-structure/framework/ai.html#post-api-ai-genai","608":"/docs/backend/project-structure/framework/ai.html#사용-방법","609":"/docs/backend/project-structure/framework/ai.html#_1-서비스에서-직접-사용","610":"/docs/backend/project-structure/framework/ai.html#_2-컨트롤러에서-사용","611":"/docs/backend/project-structure/framework/ai.html#의존성","612":"/docs/backend/project-structure/framework/ai.html#maven-의존성","613":"/docs/backend/project-structure/framework/ai.html#주의사항","614":"/docs/backend/project-structure/framework/ai.html#다음-단계","615":"/docs/backend/project-structure/framework/config.html#설정-클래스-모듈","616":"/docs/backend/project-structure/framework/config.html#모듈-구조","617":"/docs/backend/project-structure/framework/config.html#주요-설정-클래스","618":"/docs/backend/project-structure/framework/config.html#_1-axpdatasourceconfig","619":"/docs/backend/project-structure/framework/config.html#_2-axpredisconfig","620":"/docs/backend/project-structure/framework/config.html#_3-axpsecurityconfig","621":"/docs/backend/project-structure/framework/config.html#_4-axpwebconfig","622":"/docs/backend/project-structure/framework/config.html#_5-axpfilterconfig","623":"/docs/backend/project-structure/framework/config.html#_6-axpmybatisresultinterceptor","624":"/docs/backend/project-structure/framework/config.html#설정-파일-위치","625":"/docs/backend/project-structure/framework/config.html#application-yaml","626":"/docs/backend/project-structure/framework/config.html#환경별-설정-파일","627":"/docs/backend/project-structure/framework/config.html#설정-우선순위","628":"/docs/backend/project-structure/framework/config.html#다음-단계","629":"/docs/backend/project-structure/framework/common.html#공통-기능-모듈","630":"/docs/backend/project-structure/framework/common.html#모듈-구조","631":"/docs/backend/project-structure/framework/common.html#주요-클래스","632":"/docs/backend/project-structure/framework/common.html#_1-axpbasewebcontroller","633":"/docs/backend/project-structure/framework/common.html#_2-axpcommdbservice","634":"/docs/backend/project-structure/framework/common.html#_3-axpcommredisdbservice","635":"/docs/backend/project-structure/framework/common.html#_4-axpcommauthservice","636":"/docs/backend/project-structure/framework/common.html#_5-axpcommutil","637":"/docs/backend/project-structure/framework/common.html#_6-암호화-유틸리티","638":"/docs/backend/project-structure/framework/common.html#axpcommaes128","639":"/docs/backend/project-structure/framework/common.html#axpcommrsa","640":"/docs/backend/project-structure/framework/common.html#axpcommmd5util","641":"/docs/backend/project-structure/framework/common.html#axpcommsha256util","642":"/docs/backend/project-structure/framework/common.html#공통-상수","643":"/docs/backend/project-structure/framework/common.html#axpcommconst","644":"/docs/backend/project-structure/framework/common.html#다음-단계","645":"/docs/backend/project-structure/framework/file.html#파일-관리-모듈","646":"/docs/backend/project-structure/framework/file.html#모듈-구조","647":"/docs/backend/project-structure/framework/file.html#주요-클래스","648":"/docs/backend/project-structure/framework/file.html#_1-axpfilecontroller","649":"/docs/backend/project-structure/framework/file.html#_2-axpfileservice","650":"/docs/backend/project-structure/framework/file.html#파일-처리-프로세스","651":"/docs/backend/project-structure/framework/file.html#_1-파일-업로드","652":"/docs/backend/project-structure/framework/file.html#_2-파일-다운로드","653":"/docs/backend/project-structure/framework/file.html#파일-타입","654":"/docs/backend/project-structure/framework/file.html#file-type","655":"/docs/backend/project-structure/framework/file.html#변경-상태","656":"/docs/backend/project-structure/framework/file.html#원본-상태","657":"/docs/backend/project-structure/framework/file.html#설정","658":"/docs/backend/project-structure/framework/file.html#application-yaml","659":"/docs/backend/project-structure/framework/file.html#파일명-규칙","660":"/docs/backend/project-structure/framework/file.html#서버-저장-파일명","661":"/docs/backend/project-structure/framework/file.html#원본-파일명","662":"/docs/backend/project-structure/framework/file.html#사용-예시","663":"/docs/backend/project-structure/framework/file.html#파일-업로드","664":"/docs/backend/project-structure/framework/file.html#파일-다운로드","665":"/docs/backend/project-structure/framework/file.html#주의사항","666":"/docs/backend/project-structure/framework/file.html#다음-단계","667":"/docs/backend/project-structure/framework/filter.html#필터-클래스-모듈","668":"/docs/backend/project-structure/framework/filter.html#모듈-구조","669":"/docs/backend/project-structure/framework/filter.html#주요-필터","670":"/docs/backend/project-structure/framework/filter.html#_1-axpxssfilter","671":"/docs/backend/project-structure/framework/filter.html#_2-axpdecryptfilter","672":"/docs/backend/project-structure/framework/filter.html#_3-axpjwtauthenticationfilter","673":"/docs/backend/project-structure/framework/filter.html#_4-axpcorsloggingfilter","674":"/docs/backend/project-structure/framework/filter.html#필터-등록","675":"/docs/backend/project-structure/framework/filter.html#axpfilterconfig","676":"/docs/backend/project-structure/framework/filter.html#필터-실행-순서","677":"/docs/backend/project-structure/framework/filter.html#xss-유틸리티","678":"/docs/backend/project-structure/framework/filter.html#axpxssutil","679":"/docs/backend/project-structure/framework/filter.html#보안-정책-파일","680":"/docs/backend/project-structure/framework/filter.html#antisamy-policy-xml","681":"/docs/backend/project-structure/framework/filter.html#주의사항","682":"/docs/backend/project-structure/framework/filter.html#다음-단계","683":"/docs/backend/project-structure/framework/mail.html#메일-발송-모듈","684":"/docs/backend/project-structure/framework/mail.html#모듈-구조","685":"/docs/backend/project-structure/framework/mail.html#주요-클래스","686":"/docs/backend/project-structure/framework/mail.html#_1-axpmailcontroller","687":"/docs/backend/project-structure/framework/mail.html#_2-axpmailservice","688":"/docs/backend/project-structure/framework/mail.html#_3-axpcommmailutil","689":"/docs/backend/project-structure/framework/mail.html#spring-mail-설정","690":"/docs/backend/project-structure/framework/mail.html#application-yaml","691":"/docs/backend/project-structure/framework/mail.html#사용-방법","692":"/docs/backend/project-structure/framework/mail.html#_1-javamailsender-사용","693":"/docs/backend/project-structure/framework/mail.html#_2-html-이메일-발송","694":"/docs/backend/project-structure/framework/mail.html#_3-첨부-파일-포함","695":"/docs/backend/project-structure/framework/mail.html#메일-템플릿","696":"/docs/backend/project-structure/framework/mail.html#thymeleaf-템플릿-사용-선택적","697":"/docs/backend/project-structure/framework/mail.html#공통-유틸리티","698":"/docs/backend/project-structure/framework/mail.html#axpcommmailutil","699":"/docs/backend/project-structure/framework/mail.html#주의사항","700":"/docs/backend/project-structure/framework/mail.html#다음-단계","701":"/docs/backend/project-structure/framework/report.html#리포트-생성-모듈","702":"/docs/backend/project-structure/framework/report.html#모듈-구조","703":"/docs/backend/project-structure/framework/report.html#주요-클래스","704":"/docs/backend/project-structure/framework/report.html#_1-axpreportcontroller","705":"/docs/backend/project-structure/framework/report.html#_2-axpreportservice","706":"/docs/backend/project-structure/framework/report.html#리포트-생성-프로세스","707":"/docs/backend/project-structure/framework/report.html#_1-데이터-조회","708":"/docs/backend/project-structure/framework/report.html#_2-리포트-파라미터-설정","709":"/docs/backend/project-structure/framework/report.html#_3-리포트-컴파일-및-생성","710":"/docs/backend/project-structure/framework/report.html#_4-pdf-내보내기","711":"/docs/backend/project-structure/framework/report.html#리포트-템플릿-위치","712":"/docs/backend/project-structure/framework/report.html#리포트-파라미터-규칙","713":"/docs/backend/project-structure/framework/report.html#커서-파라미터","714":"/docs/backend/project-structure/framework/report.html#일반-파라미터","715":"/docs/backend/project-structure/framework/report.html#이미지-파라미터","716":"/docs/backend/project-structure/framework/report.html#커서-변환","717":"/docs/backend/project-structure/framework/report.html#한글-폰트","718":"/docs/backend/project-structure/framework/report.html#지원-폰트","719":"/docs/backend/project-structure/framework/report.html#폰트-위치","720":"/docs/backend/project-structure/framework/report.html#사용-예시","721":"/docs/backend/project-structure/framework/report.html#pdf-리포트-생성","722":"/docs/backend/project-structure/framework/report.html#excel-리포트-다운로드","723":"/docs/backend/project-structure/framework/report.html#주의사항","724":"/docs/backend/project-structure/framework/report.html#다음-단계","725":"/docs/backend/project-structure/framework/sms.html#sms-발송-모듈","726":"/docs/backend/project-structure/framework/sms.html#모듈-구조","727":"/docs/backend/project-structure/framework/sms.html#주요-클래스","728":"/docs/backend/project-structure/framework/sms.html#_1-axpsmscontroller","729":"/docs/backend/project-structure/framework/sms.html#_2-axpsmsservice","730":"/docs/backend/project-structure/framework/sms.html#sms-발송-프로세스","731":"/docs/backend/project-structure/framework/sms.html#_1-발송-정보-저장","732":"/docs/backend/project-structure/framework/sms.html#_2-kt-cpaas-api-호출","733":"/docs/backend/project-structure/framework/sms.html#발송-타입","734":"/docs/backend/project-structure/framework/sms.html#rev-type","735":"/docs/backend/project-structure/framework/sms.html#rev-type-value","736":"/docs/backend/project-structure/framework/sms.html#메시지-타입","737":"/docs/backend/project-structure/framework/sms.html#msg-type","738":"/docs/backend/project-structure/framework/sms.html#메시지-상태","739":"/docs/backend/project-structure/framework/sms.html#설정","740":"/docs/backend/project-structure/framework/sms.html#application-yaml","741":"/docs/backend/project-structure/framework/sms.html#사용-예시","742":"/docs/backend/project-structure/framework/sms.html#즉시-발송","743":"/docs/backend/project-structure/framework/sms.html#예약-발송","744":"/docs/backend/project-structure/framework/sms.html#주의사항","745":"/docs/backend/project-structure/framework/sms.html#다음-단계","746":"/docs/backend/project-structure/resources.html#리소스-파일-구조","747":"/docs/backend/project-structure/resources.html#디렉토리-구조","748":"/docs/backend/project-structure/resources.html#설정-파일","749":"/docs/backend/project-structure/resources.html#_1-application-yaml","750":"/docs/backend/project-structure/resources.html#_2-config-디렉토리","751":"/docs/backend/project-structure/resources.html#mybatis-매퍼","752":"/docs/backend/project-structure/resources.html#mapper-디렉토리","753":"/docs/backend/project-structure/resources.html#매퍼-파일-구조","754":"/docs/backend/project-structure/resources.html#mapper-config-디렉토리","755":"/docs/backend/project-structure/resources.html#리포트-템플릿","756":"/docs/backend/project-structure/resources.html#report-디렉토리","757":"/docs/backend/project-structure/resources.html#리포트-템플릿-작성","758":"/docs/backend/project-structure/resources.html#외부-라이브러리","759":"/docs/backend/project-structure/resources.html#lib-디렉토리","760":"/docs/backend/project-structure/resources.html#보안-정책-파일","761":"/docs/backend/project-structure/resources.html#antisamy-policy-xml","762":"/docs/backend/project-structure/resources.html#로깅-설정","763":"/docs/backend/project-structure/resources.html#logback-spring-xml","764":"/docs/backend/project-structure/resources.html#배너","765":"/docs/backend/project-structure/resources.html#banner-txt","766":"/docs/backend/project-structure/resources.html#다음-단계","767":"/docs/backend/references/classes.html#주요-클래스-참조","768":"/docs/backend/references/classes.html#공통-컨트롤러","769":"/docs/backend/references/classes.html#공통-서비스","770":"/docs/backend/references/classes.html#설정-클래스","771":"/docs/backend/references/classes.html#다음-단계","772":"/docs/backend/references/config-files.html#설정-파일-참조","773":"/docs/backend/references/config-files.html#설정-파일","774":"/docs/backend/references/config-files.html#mybatis-설정","775":"/docs/backend/references/config-files.html#다음-단계","776":"/docs/backend/references/external-libs.html#외부-라이브러리-문서","777":"/docs/backend/references/external-libs.html#spring-boot","778":"/docs/backend/references/external-libs.html#mybatis","779":"/docs/backend/references/external-libs.html#spring-security","780":"/docs/backend/references/external-libs.html#jwt","781":"/docs/backend/references/external-libs.html#jasperreports","782":"/docs/backend/references/external-libs.html#apache-poi","783":"/docs/backend/references/external-libs.html#redis","784":"/docs/backend/security/encryption.html#암호화-유틸리티","785":"/docs/backend/security/encryption.html#aes-128","786":"/docs/backend/security/encryption.html#사용-예시","787":"/docs/backend/security/encryption.html#용도","788":"/docs/backend/security/encryption.html#rsa","789":"/docs/backend/security/encryption.html#사용-예시-1","790":"/docs/backend/security/encryption.html#설정","791":"/docs/backend/security/encryption.html#해시-함수","792":"/docs/backend/security/encryption.html#md5","793":"/docs/backend/security/encryption.html#sha-256","794":"/docs/backend/security/encryption.html#다음-단계","795":"/docs/backend/security/filters.html#보안-필터","796":"/docs/backend/security/filters.html#필터-실행-순서","797":"/docs/backend/security/filters.html#xss-필터","798":"/docs/backend/security/filters.html#axpxssfilter","799":"/docs/backend/security/filters.html#설정","800":"/docs/backend/security/filters.html#복호화-필터","801":"/docs/backend/security/filters.html#axpdecryptfilter","802":"/docs/backend/security/filters.html#jwt-인증-필터","803":"/docs/backend/security/filters.html#axpjwtauthenticationfilter","804":"/docs/backend/security/filters.html#rate-limiting","805":"/docs/backend/security/filters.html#cors-로깅-필터","806":"/docs/backend/security/filters.html#axpcorsloggingfilter","807":"/docs/backend/security/filters.html#다음-단계","808":"/docs/backend/security/jwt.html#jwt-인증","809":"/docs/backend/security/jwt.html#토큰-타입","810":"/docs/backend/security/jwt.html#access-token","811":"/docs/backend/security/jwt.html#refresh-token","812":"/docs/backend/security/jwt.html#토큰-생성","813":"/docs/backend/security/jwt.html#토큰-검증","814":"/docs/backend/security/jwt.html#토큰-재발급","815":"/docs/backend/security/jwt.html#api-엔드포인트","816":"/docs/backend/security/jwt.html#요청","817":"/docs/backend/security/jwt.html#응답","818":"/docs/backend/security/jwt.html#redis-토큰-저장","819":"/docs/backend/security/jwt.html#다음-단계","820":"/docs/backend/security/spring-security.html#spring-security-설정","821":"/docs/backend/security/spring-security.html#securityfilterchain","822":"/docs/backend/security/spring-security.html#기본-설정","823":"/docs/backend/security/spring-security.html#제외-uri-설정","824":"/docs/backend/security/spring-security.html#보안-헤더","825":"/docs/backend/security/spring-security.html#content-security-policy","826":"/docs/backend/security/spring-security.html#x-frame-options","827":"/docs/backend/security/spring-security.html#기타-보안-헤더","828":"/docs/backend/security/spring-security.html#예외-처리","829":"/docs/backend/security/spring-security.html#accessdeniedhandler","830":"/docs/backend/security/spring-security.html#authenticationentrypoint","831":"/docs/backend/security/spring-security.html#다음-단계","832":"/docs/backend/tech-stack/databases.html#데이터베이스","833":"/docs/backend/tech-stack/databases.html#지원-데이터베이스","834":"/docs/backend/tech-stack/databases.html#_1-tibero6-기본값","835":"/docs/backend/tech-stack/databases.html#_2-oracle","836":"/docs/backend/tech-stack/databases.html#_3-postgresql","837":"/docs/backend/tech-stack/databases.html#데이터소스-설정","838":"/docs/backend/tech-stack/databases.html#axpdatasourceconfig","839":"/docs/backend/tech-stack/databases.html#hikaricp-커넥션-풀","840":"/docs/backend/tech-stack/databases.html#tibero-설정","841":"/docs/backend/tech-stack/databases.html#postgresql-설정","842":"/docs/backend/tech-stack/databases.html#mybatis-설정","843":"/docs/backend/tech-stack/databases.html#db별-설정-파일","844":"/docs/backend/tech-stack/databases.html#매퍼-파일-위치","845":"/docs/backend/tech-stack/databases.html#프로시저-호출","846":"/docs/backend/tech-stack/databases.html#공통-프로시저-호출-서비스","847":"/docs/backend/tech-stack/databases.html#db별-프로시저-호출","848":"/docs/backend/tech-stack/databases.html#redis-valkey-호환","849":"/docs/backend/tech-stack/databases.html#용도","850":"/docs/backend/tech-stack/databases.html#설정","851":"/docs/backend/tech-stack/databases.html#redistemplate","852":"/docs/backend/tech-stack/databases.html#다음-단계","853":"/docs/backend/tech-stack/documentation.html#문서화-및-api","854":"/docs/backend/tech-stack/documentation.html#springdoc-openapi","855":"/docs/backend/tech-stack/documentation.html#버전","856":"/docs/backend/tech-stack/documentation.html#기능","857":"/docs/backend/tech-stack/documentation.html#접근-url","858":"/docs/backend/tech-stack/documentation.html#api-문서-자동-생성","859":"/docs/backend/tech-stack/documentation.html#컨트롤러-어노테이션","860":"/docs/backend/tech-stack/documentation.html#주요-어노테이션","861":"/docs/backend/tech-stack/documentation.html#tag","862":"/docs/backend/tech-stack/documentation.html#operation","863":"/docs/backend/tech-stack/documentation.html#parameter","864":"/docs/backend/tech-stack/documentation.html#apiresponse","865":"/docs/backend/tech-stack/documentation.html#openapi-스펙","866":"/docs/backend/tech-stack/documentation.html#json-형식","867":"/docs/backend/tech-stack/documentation.html#yaml-형식","868":"/docs/backend/tech-stack/documentation.html#문서-커스터마이징","869":"/docs/backend/tech-stack/documentation.html#기본-정보-설정","870":"/docs/backend/tech-stack/documentation.html#그룹-설정","871":"/docs/backend/tech-stack/documentation.html#api-테스트","872":"/docs/backend/tech-stack/documentation.html#swagger-ui에서-테스트","873":"/docs/backend/tech-stack/documentation.html#인증-설정","874":"/docs/backend/tech-stack/documentation.html#다음-단계","875":"/docs/backend/tech-stack/file-processing.html#파일-처리","876":"/docs/backend/tech-stack/file-processing.html#apache-poi","877":"/docs/backend/tech-stack/file-processing.html#버전","878":"/docs/backend/tech-stack/file-processing.html#기능","879":"/docs/backend/tech-stack/file-processing.html#사용-예시","880":"/docs/backend/tech-stack/file-processing.html#jxls","881":"/docs/backend/tech-stack/file-processing.html#버전-1","882":"/docs/backend/tech-stack/file-processing.html#기능-1","883":"/docs/backend/tech-stack/file-processing.html#사용-예시-1","884":"/docs/backend/tech-stack/file-processing.html#jasperreports","885":"/docs/backend/tech-stack/file-processing.html#버전-2","886":"/docs/backend/tech-stack/file-processing.html#기능-2","887":"/docs/backend/tech-stack/file-processing.html#리포트-템플릿","888":"/docs/backend/tech-stack/file-processing.html#리포트-생성","889":"/docs/backend/tech-stack/file-processing.html#한글-폰트-설정","890":"/docs/backend/tech-stack/file-processing.html#파일-업로드","891":"/docs/backend/tech-stack/file-processing.html#multipartfile","892":"/docs/backend/tech-stack/file-processing.html#파일-크기-제한","893":"/docs/backend/tech-stack/file-processing.html#파일-다운로드","894":"/docs/backend/tech-stack/file-processing.html#responseentity-사용","895":"/docs/backend/tech-stack/file-processing.html#파일-유틸리티","896":"/docs/backend/tech-stack/file-processing.html#axpcommfileutil","897":"/docs/backend/tech-stack/file-processing.html#mime-타입-감지","898":"/docs/backend/tech-stack/file-processing.html#jmimemagic","899":"/docs/backend/tech-stack/file-processing.html#다음-단계","900":"/docs/backend/tech-stack/frameworks.html#프레임워크-및-라이브러리","901":"/docs/backend/tech-stack/frameworks.html#spring-boot","902":"/docs/backend/tech-stack/frameworks.html#버전","903":"/docs/backend/tech-stack/frameworks.html#주요-모듈","904":"/docs/backend/tech-stack/frameworks.html#spring-boot-starter-web","905":"/docs/backend/tech-stack/frameworks.html#spring-boot-starter-aop","906":"/docs/backend/tech-stack/frameworks.html#spring-session","907":"/docs/backend/tech-stack/frameworks.html#mybatis","908":"/docs/backend/tech-stack/frameworks.html#버전-1","909":"/docs/backend/tech-stack/frameworks.html#특징","910":"/docs/backend/tech-stack/frameworks.html#설정","911":"/docs/backend/tech-stack/frameworks.html#lombok","912":"/docs/backend/tech-stack/frameworks.html#버전-2","913":"/docs/backend/tech-stack/frameworks.html#주요-기능","914":"/docs/backend/tech-stack/frameworks.html#사용-예시","915":"/docs/backend/tech-stack/frameworks.html#spring-security","916":"/docs/backend/tech-stack/frameworks.html#버전-3","917":"/docs/backend/tech-stack/frameworks.html#주요-기능-1","918":"/docs/backend/tech-stack/frameworks.html#설정-위치","919":"/docs/backend/tech-stack/frameworks.html#springdoc-openapi","920":"/docs/backend/tech-stack/frameworks.html#버전-4","921":"/docs/backend/tech-stack/frameworks.html#기능","922":"/docs/backend/tech-stack/frameworks.html#jackson","923":"/docs/backend/tech-stack/frameworks.html#기능-1","924":"/docs/backend/tech-stack/frameworks.html#설정-1","925":"/docs/backend/tech-stack/frameworks.html#apache-commons","926":"/docs/backend/tech-stack/frameworks.html#주요-라이브러리","927":"/docs/backend/tech-stack/frameworks.html#commons-io","928":"/docs/backend/tech-stack/frameworks.html#commons-codec","929":"/docs/backend/tech-stack/frameworks.html#commons-lang3","930":"/docs/backend/tech-stack/frameworks.html#jwt-json-web-token","931":"/docs/backend/tech-stack/frameworks.html#버전-5","932":"/docs/backend/tech-stack/frameworks.html#모듈","933":"/docs/backend/tech-stack/frameworks.html#사용-예시-1","934":"/docs/backend/tech-stack/frameworks.html#owasp-antisamy","935":"/docs/backend/tech-stack/frameworks.html#버전-6","936":"/docs/backend/tech-stack/frameworks.html#기능-2","937":"/docs/backend/tech-stack/frameworks.html#다음-단계","938":"/docs/backend/tech-stack/utilities.html#기타-유틸리티","939":"/docs/backend/tech-stack/utilities.html#jsoup","940":"/docs/backend/tech-stack/utilities.html#버전","941":"/docs/backend/tech-stack/utilities.html#기능","942":"/docs/backend/tech-stack/utilities.html#사용-예시","943":"/docs/backend/tech-stack/utilities.html#juniversalchardet","944":"/docs/backend/tech-stack/utilities.html#버전-1","945":"/docs/backend/tech-stack/utilities.html#기능-1","946":"/docs/backend/tech-stack/utilities.html#사용-예시-1","947":"/docs/backend/tech-stack/utilities.html#google-genai-sdk","948":"/docs/backend/tech-stack/utilities.html#버전-2","949":"/docs/backend/tech-stack/utilities.html#기능-2","950":"/docs/backend/tech-stack/utilities.html#사용-예시-2","951":"/docs/backend/tech-stack/utilities.html#commons-beanutils","952":"/docs/backend/tech-stack/utilities.html#버전-3","953":"/docs/backend/tech-stack/utilities.html#기능-3","954":"/docs/backend/tech-stack/utilities.html#사용-예시-3","955":"/docs/backend/tech-stack/utilities.html#commons-collections","956":"/docs/backend/tech-stack/utilities.html#버전-4","957":"/docs/backend/tech-stack/utilities.html#기능-4","958":"/docs/backend/tech-stack/utilities.html#사용-예시-4","959":"/docs/backend/tech-stack/utilities.html#다음-단계","960":"/docs/backend/tech-stack/security.html#보안-및-인증","961":"/docs/backend/tech-stack/security.html#jwt-json-web-token","962":"/docs/backend/tech-stack/security.html#버전","963":"/docs/backend/tech-stack/security.html#토큰-타입","964":"/docs/backend/tech-stack/security.html#access-token","965":"/docs/backend/tech-stack/security.html#refresh-token","966":"/docs/backend/tech-stack/security.html#토큰-생성","967":"/docs/backend/tech-stack/security.html#토큰-검증","968":"/docs/backend/tech-stack/security.html#설정","969":"/docs/backend/tech-stack/security.html#spring-security","970":"/docs/backend/tech-stack/security.html#securityfilterchain","971":"/docs/backend/tech-stack/security.html#제외-uri-설정","972":"/docs/backend/tech-stack/security.html#jwt-제외-uri-설정","973":"/docs/backend/tech-stack/security.html#jwt-인증-필터","974":"/docs/backend/tech-stack/security.html#axpjwtauthenticationfilter","975":"/docs/backend/tech-stack/security.html#rate-limiting","976":"/docs/backend/tech-stack/security.html#암호화","977":"/docs/backend/tech-stack/security.html#aes-128","978":"/docs/backend/tech-stack/security.html#rsa","979":"/docs/backend/tech-stack/security.html#해시-함수","980":"/docs/backend/tech-stack/security.html#md5","981":"/docs/backend/tech-stack/security.html#sha-256","982":"/docs/backend/tech-stack/security.html#xss-방지","983":"/docs/backend/tech-stack/security.html#owasp-antisamy","984":"/docs/backend/tech-stack/security.html#정책-파일","985":"/docs/backend/tech-stack/security.html#xss-필터","986":"/docs/backend/tech-stack/security.html#보안-헤더","987":"/docs/backend/tech-stack/security.html#다음-단계","988":"/docs/backend/testing/integration-test.html#통합-테스트","989":"/docs/backend/testing/integration-test.html#기본-구조","990":"/docs/backend/testing/integration-test.html#다음-단계","991":"/docs/backend/testing/unit-test.html#단위-테스트","992":"/docs/backend/testing/unit-test.html#기본-구조","993":"/docs/backend/testing/unit-test.html#다음-단계","994":"/docs/backend/troubleshooting/common-issues.html#일반적인-문제-해결","995":"/docs/backend/troubleshooting/common-issues.html#포트-충돌","996":"/docs/backend/troubleshooting/common-issues.html#데이터베이스-연결-실패","997":"/docs/backend/troubleshooting/common-issues.html#redis-연결-실패","998":"/docs/backend/troubleshooting/common-issues.html#다음-단계","999":"/docs/backend/troubleshooting/logging.html#로그-확인","1000":"/docs/backend/troubleshooting/logging.html#로그-파일-위치","1001":"/docs/backend/troubleshooting/logging.html#로그-레벨-설정","1002":"/docs/backend/troubleshooting/logging.html#다음-단계","1003":"/docs/components/common/button.html#버튼-컴포넌트","1004":"/docs/components/common/button.html#buttonbox","1005":"/docs/components/common/button.html#파일-위치","1006":"/docs/components/common/button.html#사용-예제","1007":"/docs/components/common/button.html#vuetify-버튼","1008":"/docs/components/common/loading.html#로딩-컴포넌트","1009":"/docs/components/common/loading.html#loading","1010":"/docs/components/common/loading.html#파일-위치","1011":"/docs/components/common/loading.html#사용-예제","1012":"/docs/components/common/input.html#입력-컴포넌트","1013":"/docs/components/common/input.html#inputphone","1014":"/docs/components/common/input.html#파일-위치","1015":"/docs/components/common/input.html#사용-예제","1016":"/docs/components/common/input.html#vuetify-입력","1017":"/docs/components/common/lookup.html#조회-컴포넌트-lookup","1018":"/docs/components/common/lookup.html#lookupbox","1019":"/docs/components/common/lookup.html#파일-위치","1020":"/docs/components/common/lookup.html#사용-예제","1021":"/docs/components/common/select.html#선택-컴포넌트","1022":"/docs/components/common/select.html#개요","1023":"/docs/components/common/select.html#selectboxsql","1024":"/docs/components/common/select.html#개요-1","1025":"/docs/components/common/select.html#파일-위치","1026":"/docs/components/common/select.html#props","1027":"/docs/components/common/select.html#사용-예제","1028":"/docs/components/common/select.html#실제-컴포넌트","1029":"/docs/components/common/select.html#api-연동-예제","1030":"/docs/components/common/select.html#multiselectboxsql","1031":"/docs/components/common/select.html#개요-2","1032":"/docs/components/common/select.html#파일-위치-1","1033":"/docs/components/common/select.html#props-1","1034":"/docs/components/common/select.html#columns-정의","1035":"/docs/components/common/select.html#사용-예제-1","1036":"/docs/components/common/select.html#콜백-함수-사용","1037":"/docs/components/common/select.html#selectboxdate","1038":"/docs/components/common/select.html#개요-3","1039":"/docs/components/common/select.html#파일-위치-2","1040":"/docs/components/common/select.html#사용-예제-2","1041":"/docs/components/common/select.html#ag-grid에서-사용하기","1042":"/docs/components/common/select.html#gridmultiselectwrapper","1043":"/docs/components/common/select.html#사용-예제-3","1044":"/docs/components/common/select.html#스타일-커스터마이징","1045":"/docs/components/common/select.html#주의사항","1046":"/docs/components/common/select.html#관련-문서","1047":"/docs/components/common/tree.html#트리-컴포넌트","1048":"/docs/components/common/tree.html#treedeptdropdown","1049":"/docs/components/common/tree.html#파일-위치","1050":"/docs/components/common/tree.html#treeempdropdown","1051":"/docs/components/common/tree.html#파일-위치-1","1052":"/docs/components/common/tree.html#treeorgnode","1053":"/docs/components/common/tree.html#파일-위치-2","1054":"/docs/components/grid/click-field.html#그리드-클릭-필드","1055":"/docs/components/grid/click-field.html#gridclickfield","1056":"/docs/components/grid/click-field.html#개요","1057":"/docs/components/grid/click-field.html#파일-위치","1058":"/docs/components/grid/click-field.html#주요-기능","1059":"/docs/components/grid/click-field.html#사용-예제","1060":"/docs/components/grid/click-field.html#props","1061":"/docs/components/grid/ag-grid.html#ag-grid-래퍼","1062":"/docs/components/grid/ag-grid.html#개요","1063":"/docs/components/grid/ag-grid.html#기본-사용","1064":"/docs/components/grid/ag-grid.html#셀-에디터","1065":"/docs/components/grid/context-menu.html#그리드-컨텍스트-메뉴","1066":"/docs/components/grid/context-menu.html#gridcontextmenu","1067":"/docs/components/grid/context-menu.html#개요","1068":"/docs/components/grid/context-menu.html#파일-위치","1069":"/docs/components/grid/context-menu.html#주요-기능","1070":"/docs/components/grid/context-menu.html#컬럼-헤더-컨텍스트-메뉴","1071":"/docs/components/grid/context-menu.html#셀-컨텍스트-메뉴","1072":"/docs/components/grid/context-menu.html#사용-예제","1073":"/docs/components/grid/context-menu.html#컨텍스트-메뉴-스토어","1074":"/docs/components/grid/multi-select.html#멀티-선택-그리드","1075":"/docs/components/grid/multi-select.html#gridmultiselectwrapper","1076":"/docs/components/grid/multi-select.html#파일-위치","1077":"/docs/components/grid/multi-select.html#사용-예제","1078":"/docs/components/layouts/blank.html#블랭크-레이아웃","1079":"/docs/components/layouts/blank.html#blank-vue","1080":"/docs/components/layouts/blank.html#개요","1081":"/docs/components/layouts/blank.html#파일-위치","1082":"/docs/components/layouts/blank.html#특징","1083":"/docs/components/layouts/blank.html#사용-예제","1084":"/docs/components/layouts/main.html#메인-레이아웃","1085":"/docs/components/layouts/main.html#main-vue","1086":"/docs/components/layouts/main.html#개요","1087":"/docs/components/layouts/main.html#파일-위치","1088":"/docs/components/layouts/main.html#주요-구성-요소","1089":"/docs/components/layouts/main.html#레이아웃-구조","1090":"/docs/components/layouts/main.html#탭-관리","1091":"/docs/components/layouts/main.html#사용-예제","1092":"/docs/components/menu/bookmark.html#북마크-메뉴","1093":"/docs/components/menu/bookmark.html#menubmk","1094":"/docs/components/menu/bookmark.html#개요","1095":"/docs/components/menu/bookmark.html#파일-위치","1096":"/docs/components/menu/bookmark.html#주요-기능","1097":"/docs/components/menu/bookmark.html#사용-예제","1098":"/docs/components/menu/bookmark.html#드래그-앤-드롭","1099":"/docs/components/layouts/popup.html#팝업-레이아웃","1100":"/docs/components/layouts/popup.html#popblank-vue","1101":"/docs/components/layouts/popup.html#개요","1102":"/docs/components/layouts/popup.html#파일-위치","1103":"/docs/components/layouts/popup.html#특징","1104":"/docs/components/layouts/popup.html#동적-컴포넌트-로드","1105":"/docs/components/layouts/popup.html#사용-예제","1106":"/docs/components/layouts/popup.html#팝업-열기","1107":"/docs/components/menu/header-bar.html#메뉴-헤더바","1108":"/docs/components/menu/header-bar.html#menuheaderbar","1109":"/docs/components/menu/header-bar.html#개요","1110":"/docs/components/menu/header-bar.html#파일-위치","1111":"/docs/components/menu/header-bar.html#주요-기능","1112":"/docs/components/menu/header-bar.html#사용-예제","1113":"/docs/components/menu/header-bar.html#메뉴-구조","1114":"/docs/components/menu/sidebar.html#사이드바-메뉴","1115":"/docs/components/menu/sidebar.html#menusidebar","1116":"/docs/components/menu/sidebar.html#개요","1117":"/docs/components/menu/sidebar.html#파일-위치","1118":"/docs/components/menu/sidebar.html#주요-기능","1119":"/docs/components/menu/sidebar.html#사용-예제","1120":"/docs/components/menu/sidebar.html#메뉴-구조","1121":"/docs/components/menu/sidebar.html#즐겨찾기","1122":"/docs/components/popup/approval-list.html#승인-목록-팝업","1123":"/docs/components/popup/approval-list.html#popupapprovelist","1124":"/docs/components/popup/approval-list.html#개요","1125":"/docs/components/popup/approval-list.html#파일-위치","1126":"/docs/components/popup/approval-list.html#사용-예제","1127":"/docs/components/popup/approval-list.html#props","1128":"/docs/components/popup/approval.html#승인-팝업","1129":"/docs/components/popup/approval.html#popupapproval","1130":"/docs/components/popup/approval.html#파일-위치","1131":"/docs/components/popup/approval.html#popupapprovalbox","1132":"/docs/components/popup/approval.html#파일-위치-1","1133":"/docs/components/popup/approval.html#popupapprovelist","1134":"/docs/components/popup/approval.html#파일-위치-2","1135":"/docs/components/popup/file-link.html#파일-링크-팝업","1136":"/docs/components/popup/file-link.html#popupfilelink","1137":"/docs/components/popup/file-link.html#개요","1138":"/docs/components/popup/file-link.html#파일-위치","1139":"/docs/components/popup/file-link.html#주요-기능","1140":"/docs/components/popup/file-link.html#사용-예제","1141":"/docs/components/popup/log.html#로그-팝업","1142":"/docs/components/popup/log.html#popuplog","1143":"/docs/components/popup/log.html#파일-위치","1144":"/docs/components/popup/log.html#popuppagelog","1145":"/docs/components/popup/log.html#파일-위치-1","1146":"/docs/components/popup/page-log.html#페이지-로그-팝업","1147":"/docs/components/popup/page-log.html#popuppagelog","1148":"/docs/components/popup/page-log.html#개요","1149":"/docs/components/popup/page-log.html#파일-위치","1150":"/docs/components/popup/page-log.html#주요-기능","1151":"/docs/components/popup/page-log.html#사용-예제","1152":"/docs/components/popup/sms-template.html#sms-템플릿-팝업","1153":"/docs/components/popup/sms-template.html#popupsmstemplatelist","1154":"/docs/components/popup/sms-template.html#개요","1155":"/docs/components/popup/sms-template.html#파일-위치","1156":"/docs/components/popup/sms-template.html#주요-기능","1157":"/docs/components/popup/sms-template.html#사용-예제","1158":"/docs/configuration/alias.html#경로-별칭-alias","1159":"/docs/configuration/alias.html#개요","1160":"/docs/configuration/alias.html#설정-위치","1161":"/docs/configuration/alias.html#주요-별칭","1162":"/docs/configuration/alias.html#사용-예제","1163":"/docs/configuration/alias.html#jsconfig-json","1164":"/docs/configuration/alias.html#주의사항","1165":"/docs/configuration/build.html#빌드-설정","1166":"/docs/configuration/build.html#개요","1167":"/docs/configuration/build.html#설정-위치","1168":"/docs/configuration/build.html#빌드-옵션","1169":"/docs/configuration/build.html#chunksizewarninglimit","1170":"/docs/configuration/build.html#빌드-명령어","1171":"/docs/configuration/build.html#개발-빌드","1172":"/docs/configuration/build.html#스테이징-빌드","1173":"/docs/configuration/build.html#프로덕션-빌드","1174":"/docs/configuration/build.html#빌드-결과물","1175":"/docs/configuration/build.html#빌드-최적화","1176":"/docs/configuration/build.html#환경별-빌드","1177":"/docs/configuration/env.html#환경-변수-env","1178":"/docs/configuration/env.html#개요","1179":"/docs/configuration/env.html#환경-변수-파일","1180":"/docs/configuration/env.html#필수-환경-변수","1181":"/docs/configuration/env.html#환경-변수-사용","1182":"/docs/configuration/env.html#환경별-설정","1183":"/docs/configuration/env.html#개발-환경-env-development","1184":"/docs/configuration/env.html#프로덕션-환경-env-production","1185":"/docs/configuration/env.html#주의사항","1186":"/docs/configuration/proxy.html#프록시-설정","1187":"/docs/configuration/proxy.html#개요","1188":"/docs/configuration/proxy.html#설정-위치","1189":"/docs/configuration/proxy.html#프록시-설정-1","1190":"/docs/configuration/proxy.html#프록시-경로","1191":"/docs/configuration/proxy.html#api","1192":"/docs/configuration/proxy.html#auth","1193":"/docs/configuration/proxy.html#files","1194":"/docs/configuration/proxy.html#사용-예제","1195":"/docs/configuration/proxy.html#주의사항","1196":"/docs/configuration/vite.html#vite-설정","1197":"/docs/configuration/vite.html#개요","1198":"/docs/configuration/vite.html#주요-설정","1199":"/docs/configuration/vite.html#플러그인","1200":"/docs/configuration/vite.html#서버-설정","1201":"/docs/configuration/vite.html#경로-별칭","1202":"/docs/configuration/vite.html#환경-변수","1203":"/docs/configuration/vite.html#빌드-설정","1204":"/docs/configuration/vite.html#자동-임포트-설정","1205":"/docs/configuration/vite.html#autoimport","1206":"/docs/configuration/vite.html#components","1207":"/docs/core-features/auth/encryption.html#암호화-복호화","1208":"/docs/core-features/auth/encryption.html#개요","1209":"/docs/core-features/auth/encryption.html#암호화-설정","1210":"/docs/core-features/auth/encryption.html#요청-암호화","1211":"/docs/core-features/auth/encryption.html#일반-요청-json","1212":"/docs/core-features/auth/encryption.html#파일-업로드-formdata","1213":"/docs/core-features/auth/encryption.html#응답-복호화","1214":"/docs/core-features/auth/encryption.html#암호화-함수","1215":"/docs/core-features/auth/encryption.html#encryptobject-data","1216":"/docs/core-features/auth/encryption.html#decryptobject-data","1217":"/docs/core-features/auth/encryption.html#encryptbinary-bytes-file","1218":"/docs/core-features/auth/encryption.html#사용-예제","1219":"/docs/core-features/auth/encryption.html#암호화-활성화","1220":"/docs/core-features/auth/encryption.html#수동-암호화-복호화","1221":"/docs/core-features/auth/encryption.html#주의사항","1222":"/docs/core-features/auth/encryption.html#관련-문서","1223":"/docs/core-features/auth/jwt.html#jwt-인증","1224":"/docs/core-features/auth/jwt.html#개요","1225":"/docs/core-features/auth/jwt.html#토큰-구조","1226":"/docs/core-features/auth/jwt.html#access-token","1227":"/docs/core-features/auth/jwt.html#refresh-token","1228":"/docs/core-features/auth/jwt.html#인증-흐름","1229":"/docs/core-features/auth/jwt.html#_1-로그인","1230":"/docs/core-features/auth/jwt.html#_2-api-요청","1231":"/docs/core-features/auth/jwt.html#_3-토큰-갱신","1232":"/docs/core-features/auth/jwt.html#토큰-관리","1233":"/docs/core-features/auth/jwt.html#access-token-설정","1234":"/docs/core-features/auth/jwt.html#access-token-초기화","1235":"/docs/core-features/auth/jwt.html#인증-상태-확인","1236":"/docs/core-features/auth/jwt.html#보안-고려사항","1237":"/docs/core-features/auth/jwt.html#관련-문서","1238":"/docs/core-features/auth/session.html#세션-관리","1239":"/docs/core-features/auth/session.html#개요","1240":"/docs/core-features/auth/session.html#세션-데이터-구조","1241":"/docs/core-features/auth/session.html#주요-메서드","1242":"/docs/core-features/auth/session.html#setsessiondata-data","1243":"/docs/core-features/auth/session.html#setsessionkey-key-value","1244":"/docs/core-features/auth/session.html#getsessionvalue-key","1245":"/docs/core-features/auth/session.html#getsessionvalues-keys","1246":"/docs/core-features/auth/session.html#removesessionkey-key","1247":"/docs/core-features/auth/session.html#clearsessiondata","1248":"/docs/core-features/auth/session.html#로그인-시-세션-설정","1249":"/docs/core-features/auth/session.html#로그아웃-시-세션-초기화","1250":"/docs/core-features/auth/session.html#세션-데이터-사용","1251":"/docs/core-features/auth/session.html#세션-영속화","1252":"/docs/core-features/auth/session.html#주의사항","1253":"/docs/core-features/auth/session.html#관련-문서","1254":"/docs/core-features/auth/token-refresh.html#토큰-갱신","1255":"/docs/core-features/auth/token-refresh.html#개요","1256":"/docs/core-features/auth/token-refresh.html#자동-갱신-메커니즘","1257":"/docs/core-features/auth/token-refresh.html#갱신-프로세스","1258":"/docs/core-features/auth/token-refresh.html#_1-401-419-에러-감지","1259":"/docs/core-features/auth/token-refresh.html#_2-refresh-token으로-새-토큰-요청","1260":"/docs/core-features/auth/token-refresh.html#_3-원래-요청-재시도","1261":"/docs/core-features/auth/token-refresh.html#동시-요청-처리","1262":"/docs/core-features/auth/token-refresh.html#갱신-실패-처리","1263":"/docs/core-features/auth/token-refresh.html#수동-갱신","1264":"/docs/core-features/auth/token-refresh.html#주의사항","1265":"/docs/core-features/auth/token-refresh.html#관련-문서","1266":"/docs/core-features/http/axios-instance.html#axios-인스턴스-설정","1267":"/docs/core-features/http/axios-instance.html#개요","1268":"/docs/core-features/http/axios-instance.html#파일-위치","1269":"/docs/core-features/http/axios-instance.html#기본-설정","1270":"/docs/core-features/http/axios-instance.html#주요-설정-항목","1271":"/docs/core-features/http/axios-instance.html#요청-인터셉터","1272":"/docs/core-features/http/axios-instance.html#주요-기능","1273":"/docs/core-features/http/axios-instance.html#코드-예제","1274":"/docs/core-features/http/axios-instance.html#응답-인터셉터","1275":"/docs/core-features/http/axios-instance.html#주요-기능-1","1276":"/docs/core-features/http/axios-instance.html#토큰-갱신-로직","1277":"/docs/core-features/http/axios-instance.html#사용-방법","1278":"/docs/core-features/http/axios-instance.html#기본-사용","1279":"/docs/core-features/http/axios-instance.html#응답-처리","1280":"/docs/core-features/http/axios-instance.html#파일-업로드","1281":"/docs/core-features/http/axios-instance.html#파일-다운로드","1282":"/docs/core-features/http/axios-instance.html#암호화-복호화","1283":"/docs/core-features/http/axios-instance.html#암호화-설정","1284":"/docs/core-features/http/axios-instance.html#formdata-암호화","1285":"/docs/core-features/http/axios-instance.html#에러-처리","1286":"/docs/core-features/http/axios-instance.html#타임아웃-에러","1287":"/docs/core-features/http/axios-instance.html#_429-에러-too-many-requests","1288":"/docs/core-features/http/axios-instance.html#기타-에러","1289":"/docs/core-features/http/axios-instance.html#주의사항","1290":"/docs/core-features/http/axios-instance.html#관련-문서","1291":"/docs/core-features/http/error-handling.html#에러-처리","1292":"/docs/core-features/http/error-handling.html#개요","1293":"/docs/core-features/http/error-handling.html#에러-타입별-처리","1294":"/docs/core-features/http/error-handling.html#_1-401-419-에러-인증-실패","1295":"/docs/core-features/http/error-handling.html#_2-429-에러-too-many-requests","1296":"/docs/core-features/http/error-handling.html#_3-타임아웃-에러","1297":"/docs/core-features/http/error-handling.html#_4-404-에러-silent-처리","1298":"/docs/core-features/http/error-handling.html#_5-기타-에러","1299":"/docs/core-features/http/error-handling.html#에러-로그-기록","1300":"/docs/core-features/http/error-handling.html#커스텀-에러-처리","1301":"/docs/core-features/http/error-handling.html#에러-메시지-표시","1302":"/docs/core-features/http/error-handling.html#alert-사용","1303":"/docs/core-features/http/error-handling.html#커스텀-알림-사용","1304":"/docs/core-features/http/error-handling.html#재시도-로직","1305":"/docs/core-features/http/error-handling.html#에러-타입-확인","1306":"/docs/core-features/http/error-handling.html#베스트-프랙티스","1307":"/docs/core-features/http/error-handling.html#관련-문서","1308":"/docs/core-features/http/request-interceptor.html#요청-인터셉터","1309":"/docs/core-features/http/request-interceptor.html#개요","1310":"/docs/core-features/http/request-interceptor.html#주요-기능","1311":"/docs/core-features/http/request-interceptor.html#_1-로딩-표시","1312":"/docs/core-features/http/request-interceptor.html#_2-jwt-토큰-추가","1313":"/docs/core-features/http/request-interceptor.html#_3-암호화-헤더-추가","1314":"/docs/core-features/http/request-interceptor.html#_4-요청-로그-저장","1315":"/docs/core-features/http/request-interceptor.html#_5-데이터-암호화","1316":"/docs/core-features/http/request-interceptor.html#formdata-처리","1317":"/docs/core-features/http/request-interceptor.html#타임스탬프-추가","1318":"/docs/core-features/http/request-interceptor.html#원본-데이터-저장","1319":"/docs/core-features/http/request-interceptor.html#에러-처리","1320":"/docs/core-features/http/request-interceptor.html#사용-예제","1321":"/docs/core-features/http/request-interceptor.html#관련-문서","1322":"/docs/core-features/http/response-interceptor.html#응답-인터셉터","1323":"/docs/core-features/http/response-interceptor.html#개요","1324":"/docs/core-features/http/response-interceptor.html#성공-응답-처리","1325":"/docs/core-features/http/response-interceptor.html#_1-로딩-숨김","1326":"/docs/core-features/http/response-interceptor.html#_2-파일-다운로드-처리","1327":"/docs/core-features/http/response-interceptor.html#_3-응답-데이터-반환","1328":"/docs/core-features/http/response-interceptor.html#에러-응답-처리","1329":"/docs/core-features/http/response-interceptor.html#_1-로딩-숨김-1","1330":"/docs/core-features/http/response-interceptor.html#_2-로그-에러-표시","1331":"/docs/core-features/http/response-interceptor.html#_3-429-에러-처리-too-many-requests","1332":"/docs/core-features/http/response-interceptor.html#_4-401-419-에러-처리-토큰-갱신","1333":"/docs/core-features/http/response-interceptor.html#_5-타임아웃-에러-처리","1334":"/docs/core-features/http/response-interceptor.html#_6-기타-에러-처리","1335":"/docs/core-features/http/response-interceptor.html#토큰-갱신-로직","1336":"/docs/core-features/http/response-interceptor.html#동시-요청-처리","1337":"/docs/core-features/http/response-interceptor.html#토큰-갱신-요청","1338":"/docs/core-features/http/response-interceptor.html#silent-에러-처리","1339":"/docs/core-features/http/response-interceptor.html#응답-데이터-구조","1340":"/docs/core-features/http/response-interceptor.html#사용-예제","1341":"/docs/core-features/http/response-interceptor.html#성공-응답-처리-1","1342":"/docs/core-features/http/response-interceptor.html#파일-다운로드","1343":"/docs/core-features/http/response-interceptor.html#관련-문서","1344":"/docs/core-features/routing/dynamic.html#동적-라우팅","1345":"/docs/core-features/routing/dynamic.html#개요","1346":"/docs/core-features/routing/dynamic.html#동적-라우트-등록","1347":"/docs/core-features/routing/dynamic.html#메뉴-데이터-구조","1348":"/docs/core-features/routing/dynamic.html#라우트-변환","1349":"/docs/core-features/routing/dynamic.html#동적-컴포넌트-로드","1350":"/docs/core-features/routing/dynamic.html#메뉴-스토어-연동","1351":"/docs/core-features/routing/dynamic.html#사용-예제","1352":"/docs/core-features/routing/dynamic.html#동적-라우트-접근","1353":"/docs/core-features/routing/dynamic.html#주의사항","1354":"/docs/core-features/routing/dynamic.html#관련-문서","1355":"/docs/core-features/routing/guards.html#라우트-가드","1356":"/docs/core-features/routing/guards.html#개요","1357":"/docs/core-features/routing/guards.html#beforeeach-가드","1358":"/docs/core-features/routing/guards.html#현재-구현","1359":"/docs/core-features/routing/guards.html#기능","1360":"/docs/core-features/routing/guards.html#인증-가드-예제","1361":"/docs/core-features/routing/guards.html#aftereach-가드","1362":"/docs/core-features/routing/guards.html#메타-필드","1363":"/docs/core-features/routing/guards.html#관련-문서","1364":"/docs/core-features/routing/routes.html#라우트-설정","1365":"/docs/core-features/routing/routes.html#개요","1366":"/docs/core-features/routing/routes.html#기본-라우트-구조","1367":"/docs/core-features/routing/routes.html#라우트-추가","1368":"/docs/core-features/routing/routes.html#정적-라우트","1369":"/docs/core-features/routing/routes.html#동적-라우트","1370":"/docs/core-features/routing/routes.html#라우트-매핑-규칙","1371":"/docs/core-features/routing/routes.html#레이아웃","1372":"/docs/core-features/routing/routes.html#blank-레이아웃","1373":"/docs/core-features/routing/routes.html#main-레이아웃","1374":"/docs/core-features/routing/routes.html#popup-레이아웃","1375":"/docs/core-features/routing/routes.html#관련-문서","1376":"/docs/core-features/stores/auth.html#인증-스토어-authstore","1377":"/docs/core-features/stores/auth.html#개요","1378":"/docs/core-features/stores/auth.html#파일-위치","1379":"/docs/core-features/stores/auth.html#상태-state","1380":"/docs/core-features/stores/auth.html#accesstoken","1381":"/docs/core-features/stores/auth.html#액션-actions","1382":"/docs/core-features/stores/auth.html#setaccesstoken-token","1383":"/docs/core-features/stores/auth.html#clearaccesstoken","1384":"/docs/core-features/stores/auth.html#게터-getters","1385":"/docs/core-features/stores/auth.html#isauthenticated","1386":"/docs/core-features/stores/auth.html#사용-예제","1387":"/docs/core-features/stores/auth.html#로그인-처리","1388":"/docs/core-features/stores/auth.html#로그아웃-처리","1389":"/docs/core-features/stores/auth.html#인증-상태-확인","1390":"/docs/core-features/stores/auth.html#주의사항","1391":"/docs/core-features/stores/auth.html#관련-문서","1392":"/docs/core-features/stores/loading.html#로딩-스토어-loadingstore","1393":"/docs/core-features/stores/loading.html#개요","1394":"/docs/core-features/stores/loading.html#파일-위치","1395":"/docs/core-features/stores/loading.html#상태-state","1396":"/docs/core-features/stores/loading.html#액션-actions","1397":"/docs/core-features/stores/loading.html#showloading","1398":"/docs/core-features/stores/loading.html#hideloading","1399":"/docs/core-features/stores/loading.html#사용-예제","1400":"/docs/core-features/stores/loading.html#주의사항","1401":"/docs/core-features/stores/menu.html#메뉴-스토어-menustore","1402":"/docs/core-features/stores/menu.html#개요","1403":"/docs/core-features/stores/menu.html#파일-위치","1404":"/docs/core-features/stores/menu.html#상태-state","1405":"/docs/core-features/stores/menu.html#주요-액션","1406":"/docs/core-features/stores/menu.html#setmenudata-data","1407":"/docs/core-features/stores/menu.html#setbmk-menu","1408":"/docs/core-features/stores/menu.html#getbmk","1409":"/docs/core-features/stores/menu.html#사용-예제","1410":"/docs/core-features/stores/log.html#로그-스토어-logstore","1411":"/docs/core-features/stores/log.html#개요","1412":"/docs/core-features/stores/log.html#파일-위치","1413":"/docs/core-features/stores/log.html#상태-state","1414":"/docs/core-features/stores/log.html#주요-액션","1415":"/docs/core-features/stores/log.html#togglelogyn","1416":"/docs/core-features/stores/log.html#addlogdata-config-menudata","1417":"/docs/core-features/stores/log.html#clearlogdata","1418":"/docs/core-features/stores/log.html#로그-구조","1419":"/docs/core-features/stores/log.html#사용-예제","1420":"/docs/core-features/stores/log.html#주의사항","1421":"/docs/core-features/stores/modal.html#모달-스토어-modalstore","1422":"/docs/core-features/stores/modal.html#개요","1423":"/docs/core-features/stores/modal.html#파일-위치","1424":"/docs/core-features/stores/modal.html#상태-state","1425":"/docs/core-features/stores/modal.html#액션-actions","1426":"/docs/core-features/stores/modal.html#openmodal-modalid-config","1427":"/docs/core-features/stores/modal.html#closemodal","1428":"/docs/core-features/stores/modal.html#사용-예제","1429":"/docs/core-features/stores/others.html#기타-스토어","1430":"/docs/core-features/stores/others.html#버튼-스토어-buttonstore","1431":"/docs/core-features/stores/others.html#개요","1432":"/docs/core-features/stores/others.html#파일-위치","1433":"/docs/core-features/stores/others.html#주요-기능","1434":"/docs/core-features/stores/others.html#사용-예제","1435":"/docs/core-features/stores/others.html#지원하는-버튼","1436":"/docs/core-features/stores/others.html#컨텍스트-메뉴-스토어-contextmenustore","1437":"/docs/core-features/stores/others.html#개요-1","1438":"/docs/core-features/stores/others.html#파일-위치-1","1439":"/docs/core-features/stores/others.html#주요-기능-1","1440":"/docs/core-features/stores/others.html#사용-예제-1","1441":"/docs/core-features/stores/others.html#동적-스토어-dynamicstore","1442":"/docs/core-features/stores/others.html#개요-2","1443":"/docs/core-features/stores/others.html#파일-위치-2","1444":"/docs/core-features/stores/others.html#주요-기능-2","1445":"/docs/core-features/stores/others.html#사용-예제-2","1446":"/docs/core-features/stores/session.html#세션-스토어-sessionstore","1447":"/docs/core-features/stores/session.html#개요","1448":"/docs/core-features/stores/session.html#파일-위치","1449":"/docs/core-features/stores/session.html#상태-state","1450":"/docs/core-features/stores/session.html#주요-액션","1451":"/docs/core-features/stores/session.html#setsessiondata-data","1452":"/docs/core-features/stores/session.html#setsessionkey-key-value","1453":"/docs/core-features/stores/session.html#getsessionvalue-key","1454":"/docs/core-features/stores/session.html#사용-예제","1455":"/docs/core-features/stores/sidebar.html#사이드바-스토어-sidebarstore","1456":"/docs/core-features/stores/sidebar.html#개요","1457":"/docs/core-features/stores/sidebar.html#파일-위치","1458":"/docs/core-features/stores/sidebar.html#상태-state","1459":"/docs/core-features/stores/sidebar.html#주요-액션","1460":"/docs/core-features/stores/sidebar.html#togglevisible-value","1461":"/docs/core-features/stores/sidebar.html#toggleunfoldable","1462":"/docs/core-features/stores/sidebar.html#사용-예제","1463":"/docs/core-features/stores/sidebar.html#composition-api에서-사용","1464":"/docs/core-features/stores/sidebar.html#컴포넌트에서-직접-사용","1465":"/docs/core-features/stores/sidebar.html#상태-관리","1466":"/docs/core-features/stores/sidebar.html#visible-상태","1467":"/docs/core-features/stores/sidebar.html#unfoldable-상태","1468":"/docs/core-features/stores/sidebar.html#다른-스토어와의-연동","1469":"/docs/core-features/stores/sidebar.html#관련-문서","1470":"/docs/core-features/stores/tab.html#탭-스토어-tabstore","1471":"/docs/core-features/stores/tab.html#개요","1472":"/docs/core-features/stores/tab.html#파일-위치","1473":"/docs/core-features/stores/tab.html#상태-state","1474":"/docs/core-features/stores/tab.html#주요-액션","1475":"/docs/core-features/stores/tab.html#opentab-menu","1476":"/docs/core-features/stores/tab.html#switchtab-idxdbkey","1477":"/docs/core-features/stores/tab.html#closetab-tab","1478":"/docs/core-features/stores/tab.html#closealltab","1479":"/docs/core-features/stores/tab.html#indexeddb-연동","1480":"/docs/core-features/stores/tab.html#사용-예제","1481":"/docs/deployment/deploy.html#배포-절차","1482":"/docs/deployment/deploy.html#_1-빌드","1483":"/docs/deployment/deploy.html#_2-빌드-결과물-확인","1484":"/docs/deployment/deploy.html#_3-웹-서버-설정","1485":"/docs/deployment/deploy.html#_4-환경-변수-확인","1486":"/docs/deployment/deploy.html#_5-테스트","1487":"/docs/deployment/deploy.html#주의사항","1488":"/docs/deployment/dev-server.html#개발-서버-실행","1489":"/docs/deployment/dev-server.html#개발-서버-시작","1490":"/docs/deployment/dev-server.html#기본-설정","1491":"/docs/deployment/dev-server.html#포트-변경","1492":"/docs/deployment/dev-server.html#접속","1493":"/docs/deployment/dev-server.html#핫-모듈-교체-hmr","1494":"/docs/deployment/dev-server.html#프록시","1495":"/docs/deployment/optimization.html#빌드-최적화","1496":"/docs/deployment/optimization.html#코드-분할","1497":"/docs/deployment/optimization.html#트리-쉐이킹","1498":"/docs/deployment/optimization.html#압축","1499":"/docs/deployment/optimization.html#에셋-최적화","1500":"/docs/deployment/optimization.html#청크-크기-제한","1501":"/docs/deployment/optimization.html#성능-모니터링","1502":"/docs/deployment/production-build.html#프로덕션-빌드","1503":"/docs/deployment/production-build.html#빌드-명령어","1504":"/docs/deployment/production-build.html#빌드-결과물","1505":"/docs/deployment/production-build.html#빌드-최적화","1506":"/docs/deployment/production-build.html#배포","1507":"/docs/deployment/production-build.html#환경-변수","1508":"/docs/deployment/staging-build.html#스테이징-빌드","1509":"/docs/deployment/staging-build.html#빌드-명령어","1510":"/docs/deployment/staging-build.html#환경-변수","1511":"/docs/deployment/staging-build.html#빌드-결과물","1512":"/docs/deployment/staging-build.html#스테이징-서버-배포","1513":"/docs/development-guide/api/calling.html#api-호출-방법","1514":"/docs/development-guide/api/calling.html#개요","1515":"/docs/development-guide/api/calling.html#기본-사용법","1516":"/docs/development-guide/api/calling.html#응답-처리","1517":"/docs/development-guide/api/calling.html#프로시저-호출","1518":"/docs/development-guide/api/calling.html#파일-업로드","1519":"/docs/development-guide/api/calling.html#파일-다운로드","1520":"/docs/development-guide/api/error-handling.html#api-에러-처리","1521":"/docs/development-guide/api/error-handling.html#개요","1522":"/docs/development-guide/api/error-handling.html#기본-에러-처리","1523":"/docs/development-guide/api/error-handling.html#try-catch-사용","1524":"/docs/development-guide/api/error-handling.html#에러-타입별-처리","1525":"/docs/development-guide/api/error-handling.html#_401-419-에러-인증-실패","1526":"/docs/development-guide/api/error-handling.html#_400-에러-잘못된-요청","1527":"/docs/development-guide/api/error-handling.html#_404-에러-리소스-없음","1528":"/docs/development-guide/api/error-handling.html#_500-에러-서버-오류","1529":"/docs/development-guide/api/error-handling.html#타임아웃-에러","1530":"/docs/development-guide/api/error-handling.html#네트워크-오류","1531":"/docs/development-guide/api/error-handling.html#커스텀-에러-처리","1532":"/docs/development-guide/api/error-handling.html#에러-타입-확인","1533":"/docs/development-guide/api/error-handling.html#에러-메시지-추출","1534":"/docs/development-guide/api/error-handling.html#재시도-로직","1535":"/docs/development-guide/api/error-handling.html#에러-로깅","1536":"/docs/development-guide/api/error-handling.html#사용자-친화적-에러-메시지","1537":"/docs/development-guide/api/error-handling.html#vuetify-snackbar-사용","1538":"/docs/development-guide/api/error-handling.html#에러-처리-유틸리티-함수","1539":"/docs/development-guide/api/error-handling.html#베스트-프랙티스","1540":"/docs/development-guide/api/error-handling.html#관련-문서","1541":"/docs/development-guide/api/file.html#파일-업로드-다운로드","1542":"/docs/development-guide/api/file.html#파일-업로드","1543":"/docs/development-guide/api/file.html#formdata-사용","1544":"/docs/development-guide/api/file.html#암호화된-파일-업로드","1545":"/docs/development-guide/api/file.html#파일-다운로드","1546":"/docs/development-guide/api/file.html#blob-응답","1547":"/docs/development-guide/api/file.html#filesaver-사용","1548":"/docs/development-guide/api/file.html#excel-다운로드","1549":"/docs/development-guide/api/request-response.html#요청-응답-처리","1550":"/docs/development-guide/api/request-response.html#요청-처리","1551":"/docs/development-guide/api/request-response.html#기본-요청","1552":"/docs/development-guide/api/request-response.html#프로시저-호출","1553":"/docs/development-guide/api/request-response.html#응답-처리","1554":"/docs/development-guide/api/request-response.html#성공-응답","1555":"/docs/development-guide/api/request-response.html#응답-구조","1556":"/docs/development-guide/api/request-response.html#에러-처리","1557":"/docs/development-guide/conventions/file-structure.html#파일-구조-규칙","1558":"/docs/development-guide/conventions/file-structure.html#컴포넌트-파일-구조","1559":"/docs/development-guide/conventions/file-structure.html#디렉토리-구조","1560":"/docs/development-guide/conventions/file-structure.html#페이지-컴포넌트","1561":"/docs/development-guide/conventions/file-structure.html#공통-컴포넌트","1562":"/docs/development-guide/conventions/file-structure.html#스토어","1563":"/docs/development-guide/conventions/file-structure.html#파일-조직","1564":"/docs/development-guide/conventions/js-ts.html#javascript-typescript-규칙","1565":"/docs/development-guide/conventions/js-ts.html#코딩-스타일","1566":"/docs/development-guide/conventions/js-ts.html#함수-작성","1567":"/docs/development-guide/conventions/js-ts.html#비동기-처리","1568":"/docs/development-guide/conventions/js-ts.html#에러-처리","1569":"/docs/development-guide/conventions/vue.html#vue-컴포넌트-작성-규칙","1570":"/docs/development-guide/conventions/vue.html#컴포넌트-구조","1571":"/docs/development-guide/conventions/vue.html#네이밍","1572":"/docs/development-guide/conventions/vue.html#props-정의","1573":"/docs/development-guide/conventions/vue.html#emits-정의","1574":"/docs/development-guide/conventions/vue.html#반응형-변수","1575":"/docs/development-guide/conventions/naming.html#네이밍-규칙","1576":"/docs/development-guide/conventions/naming.html#파일명","1577":"/docs/development-guide/conventions/naming.html#변수명","1578":"/docs/development-guide/conventions/naming.html#함수명","1579":"/docs/development-guide/conventions/naming.html#컴포넌트명","1580":"/docs/development-guide/conventions/naming.html#css-클래스명","1581":"/docs/development-guide/new-component/creation.html#컴포넌트-생성","1582":"/docs/development-guide/new-component/creation.html#디렉토리-구조","1583":"/docs/development-guide/new-component/creation.html#컴포넌트-템플릿","1584":"/docs/development-guide/new-component/creation.html#자동-임포트","1585":"/docs/development-guide/new-component/registration.html#컴포넌트-등록","1586":"/docs/development-guide/new-component/registration.html#자동-등록","1587":"/docs/development-guide/new-component/registration.html#등록-디렉토리","1588":"/docs/development-guide/new-component/registration.html#수동-등록","1589":"/docs/development-guide/new-component/registration.html#타입-정의","1590":"/docs/development-guide/new-component/usage.html#컴포넌트-사용법","1591":"/docs/development-guide/new-component/usage.html#자동-등록된-컴포넌트","1592":"/docs/development-guide/new-component/usage.html#props-전달","1593":"/docs/development-guide/new-component/usage.html#이벤트-처리","1594":"/docs/development-guide/new-component/usage.html#슬롯-사용","1595":"/docs/development-guide/new-page/creation.html#페이지-생성-절차","1596":"/docs/development-guide/new-page/creation.html#개요","1597":"/docs/development-guide/new-page/creation.html#_1-페이지-컴포넌트-생성","1598":"/docs/development-guide/new-page/creation.html#_1-1-디렉토리-구조-확인","1599":"/docs/development-guide/new-page/creation.html#_1-2-컴포넌트-파일-생성","1600":"/docs/development-guide/new-page/creation.html#_1-3-기본-템플릿-작성","1601":"/docs/development-guide/new-page/creation.html#_2-라우트-등록","1602":"/docs/development-guide/new-page/creation.html#_2-1-라우트-파일-확인","1603":"/docs/development-guide/new-page/creation.html#_2-2-라우트-추가","1604":"/docs/development-guide/new-page/creation.html#_2-3-동적-라우팅-선택사항","1605":"/docs/development-guide/new-page/creation.html#_3-메뉴-등록","1606":"/docs/development-guide/new-page/creation.html#_3-1-백엔드-메뉴-등록","1607":"/docs/development-guide/new-page/creation.html#_3-2-메뉴-매핑-규칙","1608":"/docs/development-guide/new-page/creation.html#_4-완성된-예제","1609":"/docs/development-guide/new-page/creation.html#_4-1-전체-컴포넌트-예제","1610":"/docs/development-guide/new-page/creation.html#_5-베스트-프랙티스","1611":"/docs/development-guide/new-page/creation.html#_5-1-컴포넌트-구조","1612":"/docs/development-guide/new-page/creation.html#_5-2-네이밍-규칙","1613":"/docs/development-guide/new-page/creation.html#_5-3-코드-조직","1614":"/docs/development-guide/new-page/creation.html#_5-4-에러-처리","1615":"/docs/development-guide/new-page/creation.html#_5-5-로딩-상태-관리","1616":"/docs/development-guide/new-page/creation.html#_6-테스트","1617":"/docs/development-guide/new-page/creation.html#_6-1-개발-서버에서-확인","1618":"/docs/development-guide/new-page/creation.html#_6-2-기능-테스트","1619":"/docs/development-guide/new-page/creation.html#다음-단계","1620":"/docs/development-guide/new-page/menu.html#메뉴-등록","1621":"/docs/development-guide/new-page/menu.html#백엔드-메뉴-등록","1622":"/docs/development-guide/new-page/menu.html#메뉴-매핑-규칙","1623":"/docs/development-guide/new-page/route.html#라우트-등록","1624":"/docs/development-guide/new-page/route.html#라우트-파일","1625":"/docs/development-guide/new-page/route.html#라우트-추가","1626":"/docs/development-guide/new-page/route.html#동적-라우팅","1627":"/docs/development-guide/new-store/creation.html#스토어-생성","1628":"/docs/development-guide/new-store/creation.html#스토어-파일-위치","1629":"/docs/development-guide/new-store/creation.html#스토어-템플릿","1630":"/docs/development-guide/new-store/creation.html#사용법","1631":"/docs/development-guide/new-store/usage.html#스토어-사용법","1632":"/docs/development-guide/new-store/usage.html#스토어-가져오기","1633":"/docs/development-guide/new-store/usage.html#상태-읽기","1634":"/docs/development-guide/new-store/usage.html#액션-호출","1635":"/docs/development-guide/new-store/usage.html#반응성","1636":"/docs/development-guide/styling/scss.html#scss-사용법","1637":"/docs/development-guide/styling/scss.html#컴포넌트-스타일","1638":"/docs/development-guide/styling/scss.html#전역-스타일","1639":"/docs/development-guide/styling/scss.html#변수-사용","1640":"/docs/development-guide/styling/scss.html#믹스인-사용","1641":"/docs/development-guide/styling/custom.html#커스텀-css","1642":"/docs/development-guide/styling/custom.html#커스텀-css-파일","1643":"/docs/development-guide/styling/custom.html#스타일-오버라이드","1644":"/docs/development-guide/styling/custom.html#전역-스타일","1645":"/docs/development-guide/styling/vuetify.html#vuetify-사용법","1646":"/docs/development-guide/styling/vuetify.html#기본-컴포넌트","1647":"/docs/development-guide/styling/vuetify.html#테마","1648":"/docs/development-guide/styling/vuetify.html#그리드-시스템","1649":"/docs/development-guide/styling/vuetify.html#아이콘","1650":"/docs/development-guide/styling/vuetify.html#공식-문서","1651":"/docs/getting-started/overview.html#프로젝트-개요","1652":"/docs/getting-started/overview.html#프로젝트-소개","1653":"/docs/getting-started/overview.html#주요-특징","1654":"/docs/getting-started/overview.html#프로젝트-버전","1655":"/docs/getting-started/overview.html#기술-스택-요약","1656":"/docs/getting-started/overview.html#핵심-프레임워크","1657":"/docs/getting-started/overview.html#ui-프레임워크","1658":"/docs/getting-started/overview.html#주요-라이브러리","1659":"/docs/getting-started/overview.html#프로젝트-목적","1660":"/docs/getting-started/overview.html#주요-모듈","1661":"/docs/getting-started/overview.html#axp-framework","1662":"/docs/getting-started/overview.html#ess-모듈","1663":"/docs/getting-started/overview.html#fcm-모듈","1664":"/docs/getting-started/overview.html#geosan-모듈","1665":"/docs/getting-started/overview.html#다음-단계","1666":"/docs/getting-started/project-structure.html#프로젝트-구조","1667":"/docs/getting-started/project-structure.html#전체-디렉토리-구조","1668":"/docs/getting-started/project-structure.html#주요-디렉토리-설명","1669":"/docs/getting-started/project-structure.html#src-소스-코드","1670":"/docs/getting-started/project-structure.html#src-app-vue","1671":"/docs/getting-started/project-structure.html#src-main-js","1672":"/docs/getting-started/project-structure.html#src-customaxios-js","1673":"/docs/getting-started/project-structure.html#src-utils-유틸리티","1674":"/docs/getting-started/project-structure.html#src-utils-common","1675":"/docs/getting-started/project-structure.html#src-utils-stores","1676":"/docs/getting-started/project-structure.html#src-utils-plugins","1677":"/docs/getting-started/project-structure.html#src-views-페이지-컴포넌트","1678":"/docs/getting-started/project-structure.html#src-views-axpframework","1679":"/docs/getting-started/project-structure.html#src-views-ess","1680":"/docs/getting-started/project-structure.html#src-views-fcm","1681":"/docs/getting-started/project-structure.html#src-views-geosan","1682":"/docs/getting-started/project-structure.html#src-views-ui","1683":"/docs/getting-started/project-structure.html#src-script-비즈니스-로직","1684":"/docs/getting-started/project-structure.html#src-vendor-외부-라이브러리","1685":"/docs/getting-started/project-structure.html#public-정적-리소스","1686":"/docs/getting-started/project-structure.html#설정-파일","1687":"/docs/getting-started/project-structure.html#package-json","1688":"/docs/getting-started/project-structure.html#vite-config-js","1689":"/docs/getting-started/project-structure.html#env","1690":"/docs/getting-started/project-structure.html#jsconfig-json","1691":"/docs/getting-started/project-structure.html#파일-명명-규칙","1692":"/docs/getting-started/project-structure.html#다음-단계","1693":"/docs/getting-started/requirements.html#시스템-요구사항","1694":"/docs/getting-started/requirements.html#필수-소프트웨어","1695":"/docs/getting-started/requirements.html#node-js","1696":"/docs/getting-started/requirements.html#npm-또는-yarn","1697":"/docs/getting-started/requirements.html#git","1698":"/docs/getting-started/requirements.html#개발-도구","1699":"/docs/getting-started/requirements.html#코드-에디터","1700":"/docs/getting-started/requirements.html#브라우저","1701":"/docs/getting-started/requirements.html#운영-체제","1702":"/docs/getting-started/requirements.html#하드웨어-요구사항","1703":"/docs/getting-started/requirements.html#최소-사양","1704":"/docs/getting-started/requirements.html#권장-사양","1705":"/docs/getting-started/requirements.html#네트워크-요구사항","1706":"/docs/getting-started/requirements.html#개발-환경","1707":"/docs/getting-started/requirements.html#환경-변수","1708":"/docs/getting-started/requirements.html#의존성-확인","1709":"/docs/getting-started/requirements.html#버전-관리","1710":"/docs/getting-started/requirements.html#다음-단계","1711":"/docs/getting-started/quick-start.html#빠른-시작-가이드","1712":"/docs/getting-started/quick-start.html#_1-프로젝트-클론-및-설치","1713":"/docs/getting-started/quick-start.html#_2-환경-변수-설정","1714":"/docs/getting-started/quick-start.html#_3-개발-서버-실행","1715":"/docs/getting-started/quick-start.html#_4-기본-로그인","1716":"/docs/getting-started/quick-start.html#_5-첫-번째-컴포넌트-만들기","1717":"/docs/getting-started/quick-start.html#_5-1-페이지-컴포넌트-생성","1718":"/docs/getting-started/quick-start.html#_5-2-라우트-등록","1719":"/docs/getting-started/quick-start.html#_5-3-메뉴-등록-선택사항","1720":"/docs/getting-started/quick-start.html#_6-api-호출하기","1721":"/docs/getting-started/quick-start.html#_7-공통-컴포넌트-사용하기","1722":"/docs/getting-started/quick-start.html#selectboxsql-사용-예제","1723":"/docs/getting-started/quick-start.html#ag-grid-사용-예제","1724":"/docs/getting-started/quick-start.html#_8-pinia-스토어-사용하기","1725":"/docs/getting-started/quick-start.html#_9-유틸리티-함수-사용하기","1726":"/docs/getting-started/quick-start.html#_10-스타일링","1727":"/docs/getting-started/quick-start.html#vuetify-컴포넌트-사용","1728":"/docs/getting-started/quick-start.html#커스텀-스타일","1729":"/docs/getting-started/quick-start.html#다음-단계","1730":"/docs/getting-started/setup.html#개발-환경-설정","1731":"/docs/getting-started/setup.html#프로젝트-클론","1732":"/docs/getting-started/setup.html#node-js-버전-확인","1733":"/docs/getting-started/setup.html#의존성-설치","1734":"/docs/getting-started/setup.html#환경-변수-설정","1735":"/docs/getting-started/setup.html#환경별-설정-파일","1736":"/docs/getting-started/setup.html#개발-서버-실행","1737":"/docs/getting-started/setup.html#빌드","1738":"/docs/getting-started/setup.html#개발-빌드","1739":"/docs/getting-started/setup.html#스테이징-빌드","1740":"/docs/getting-started/setup.html#프로덕션-빌드","1741":"/docs/getting-started/setup.html#빌드-미리보기","1742":"/docs/getting-started/setup.html#추가-설정","1743":"/docs/getting-started/setup.html#아이콘-빌드","1744":"/docs/getting-started/setup.html#eslint-설정","1745":"/docs/getting-started/setup.html#prettier-설정","1746":"/docs/getting-started/setup.html#문제-해결","1747":"/docs/getting-started/setup.html#포트-충돌","1748":"/docs/getting-started/setup.html#의존성-설치-오류","1749":"/docs/getting-started/setup.html#환경-변수-인식-안-됨","1750":"/docs/getting-started/setup.html#다음-단계","1751":"/docs/markdown-examples.html#markdown-extension-examples","1752":"/docs/markdown-examples.html#syntax-highlighting","1753":"/docs/markdown-examples.html#custom-containers","1754":"/docs/markdown-examples.html#more","1755":"/docs/#axp-dev-docs","1756":"/docs/#이-문서는-무엇인가요","1757":"/docs/#처음-온-개발자를-위한-3단계","1758":"/docs/#_1-프로젝트-전체-그림-이해하기","1759":"/docs/#_2-로컬-개발-환경-구축하기","1760":"/docs/#_3-axp-방식-개발-패턴-익히기","1761":"/docs/#핵심-아키텍처-빠른-링크","1762":"/docs/#상태-관리-pinia-stores","1763":"/docs/#http-통신-규약","1764":"/docs/#인증-및-보안","1765":"/docs/#ui-컴포넌트-사용-가이드","1766":"/docs/#공통-컴포넌트","1767":"/docs/#그리드-컴포넌트","1768":"/docs/#팝업-컴포넌트","1769":"/docs/#레이아웃-컴포넌트","1770":"/docs/#유틸리티-함수","1771":"/docs/#새-화면을-만들-때-추천-흐름","1772":"/docs/#_1-페이지-생성","1773":"/docs/#_2-데이터-통신-설계","1774":"/docs/#_3-ui-구성","1775":"/docs/#_4-상태-관리","1776":"/docs/#_5-스타일링","1777":"/docs/#기술-스택","1778":"/docs/#프로젝트-구조","1779":"/docs/#모듈별-가이드","1780":"/docs/#환경-설정","1781":"/docs/#코딩-컨벤션","1782":"/docs/#테스트","1783":"/docs/#빌드-및-배포","1784":"/docs/#트러블슈팅","1785":"/docs/#참고-자료","1786":"/docs/#빠른-참조","1787":"/docs/#자주-사용하는-함수","1788":"/docs/#자주-사용하는-스토어","1789":"/docs/#api-호출-기본-패턴","1790":"/docs/#다음-단계","1791":"/docs/modules/axpframework/auth.html#axp-framework-인증-모듈","1792":"/docs/modules/axpframework/auth.html#개요","1793":"/docs/modules/axpframework/auth.html#주요-페이지","1794":"/docs/modules/axpframework/auth.html#login-vue","1795":"/docs/modules/axpframework/auth.html#adminlogin-vue","1796":"/docs/modules/axpframework/auth.html#register-vue","1797":"/docs/modules/axpframework/auth.html#로그인-프로세스","1798":"/docs/modules/axpframework/auth.html#관련-문서","1799":"/docs/modules/ess/persadm.html#ess-모듈-인사-관리","1800":"/docs/modules/ess/persadm.html#개요","1801":"/docs/modules/ess/persadm.html#주요-페이지","1802":"/docs/modules/ess/persadm.html#pimypersonnelinformation-vue","1803":"/docs/modules/ess/persadm.html#paattendancerequest-vue","1804":"/docs/modules/ess/persadm.html#pcbillreqhipass-vue","1805":"/docs/modules/ess/persadm.html#poorganizationchart-vue","1806":"/docs/modules/ess/persadm.html#관련-스크립트","1807":"/docs/modules/fcm/erp.html#fcm-모듈-erp-기능","1808":"/docs/modules/fcm/erp.html#개요","1809":"/docs/modules/fcm/erp.html#디렉토리-구조","1810":"/docs/modules/fcm/erp.html#주요-기능","1811":"/docs/modules/geosan/bi.html#geosan-모듈-bi-기능","1812":"/docs/modules/geosan/bi.html#개요","1813":"/docs/modules/geosan/bi.html#디렉토리-구조","1814":"/docs/modules/geosan/bi.html#주요-기능","1815":"/docs/project-structure/directory.html#전체-디렉토리-구조","1816":"/docs/project-structure/directory.html#프로젝트-루트-구조","1817":"/docs/project-structure/directory.html#src-디렉토리-상세-구조","1818":"/docs/project-structure/directory.html#주요-디렉토리-설명","1819":"/docs/project-structure/directory.html#src-script","1820":"/docs/project-structure/directory.html#src-utils-common","1821":"/docs/project-structure/directory.html#src-utils-stores","1822":"/docs/project-structure/directory.html#src-utils-plugins","1823":"/docs/project-structure/directory.html#src-views","1824":"/docs/project-structure/directory.html#src-vendor","1825":"/docs/project-structure/directory.html#파일-명명-규칙","1826":"/docs/project-structure/directory.html#컴포넌트-파일","1827":"/docs/project-structure/directory.html#유틸리티-파일","1828":"/docs/project-structure/directory.html#상수-파일","1829":"/docs/project-structure/directory.html#경로-별칭-alias","1830":"/docs/project-structure/directory.html#사용-예제","1831":"/docs/project-structure/directory.html#다음-단계","1832":"/docs/project-structure/public.html#public-디렉토리","1833":"/docs/project-structure/public.html#개요","1834":"/docs/project-structure/public.html#디렉토리-구조","1835":"/docs/project-structure/public.html#주요-파일","1836":"/docs/project-structure/public.html#favicon-ico","1837":"/docs/project-structure/public.html#logo-png","1838":"/docs/project-structure/public.html#loader-css","1839":"/docs/project-structure/public.html#custom-css","1840":"/docs/project-structure/public.html#custom-css-1","1841":"/docs/project-structure/public.html#custom-datepicker-css","1842":"/docs/project-structure/public.html#custom-orgchart-css","1843":"/docs/project-structure/public.html#파일-참조-방법","1844":"/docs/project-structure/public.html#절대-경로-사용","1845":"/docs/project-structure/public.html#동적-경로-사용","1846":"/docs/project-structure/public.html#css-파일-임포트","1847":"/docs/project-structure/public.html#빌드-시-처리","1848":"/docs/project-structure/public.html#주의사항","1849":"/docs/project-structure/public.html#관련-문서","1850":"/docs/project-structure/scripts.html#스크립트-파일","1851":"/docs/project-structure/scripts.html#개요","1852":"/docs/project-structure/scripts.html#파일-위치","1853":"/docs/project-structure/scripts.html#디렉토리-구조","1854":"/docs/project-structure/scripts.html#사용-목적","1855":"/docs/project-structure/scripts.html#사용-예제","1856":"/docs/project-structure/src.html#src-디렉토리","1857":"/docs/project-structure/src.html#개요","1858":"/docs/project-structure/src.html#디렉토리-구조","1859":"/docs/project-structure/src.html#주요-파일","1860":"/docs/project-structure/src.html#app-vue","1861":"/docs/project-structure/src.html#main-js","1862":"/docs/project-structure/src.html#customaxios-js","1863":"/docs/project-structure/src.html#디렉토리별-상세-설명","1864":"/docs/project-structure/src.html#views","1865":"/docs/project-structure/src.html#utils","1866":"/docs/project-structure/src.html#관련-문서","1867":"/docs/project-structure/utils/common.html#공통-유틸리티","1868":"/docs/project-structure/utils/common.html#개요","1869":"/docs/project-structure/utils/common.html#파일-위치","1870":"/docs/project-structure/utils/common.html#주요-파일","1871":"/docs/project-structure/utils/common.html#common-js","1872":"/docs/project-structure/utils/common.html#comfcm-js","1873":"/docs/project-structure/utils/common.html#자동-임포트","1874":"/docs/project-structure/utils/common.html#관련-문서","1875":"/docs/project-structure/utils/lang.html#언어-및-국제화","1876":"/docs/project-structure/utils/lang.html#개요","1877":"/docs/project-structure/utils/lang.html#디렉토리-구조","1878":"/docs/project-structure/utils/lang.html#주요-파일","1879":"/docs/project-structure/utils/lang.html#i18n-js","1880":"/docs/project-structure/utils/lang.html#aggrid-ko-kr-js","1881":"/docs/project-structure/utils/lang.html#사용-방법","1882":"/docs/project-structure/utils/lang.html#composition-api에서-사용","1883":"/docs/project-structure/utils/lang.html#options-api에서-사용","1884":"/docs/project-structure/utils/lang.html#숫자-형식-사용","1885":"/docs/project-structure/utils/lang.html#메시지-추가","1886":"/docs/project-structure/utils/lang.html#언어-변경","1887":"/docs/project-structure/utils/lang.html#ag-grid-로케일-적용","1888":"/docs/project-structure/utils/lang.html#관련-문서","1889":"/docs/project-structure/utils/plugins.html#플러그인-설정","1890":"/docs/project-structure/utils/plugins.html#개요","1891":"/docs/project-structure/utils/plugins.html#디렉토리-구조","1892":"/docs/project-structure/utils/plugins.html#주요-플러그인","1893":"/docs/project-structure/utils/plugins.html#pinia-pinia-js","1894":"/docs/project-structure/utils/plugins.html#vue-router-router","1895":"/docs/project-structure/utils/plugins.html#routes-js","1896":"/docs/project-structure/utils/plugins.html#index-js","1897":"/docs/project-structure/utils/plugins.html#vuetify-vuetify","1898":"/docs/project-structure/utils/plugins.html#index-js-1","1899":"/docs/project-structure/utils/plugins.html#defaults-js","1900":"/docs/project-structure/utils/plugins.html#icons-js","1901":"/docs/project-structure/utils/plugins.html#theme-js","1902":"/docs/project-structure/utils/plugins.html#iconify-iconify","1903":"/docs/project-structure/utils/plugins.html#webfontloader-webfontloader-js","1904":"/docs/project-structure/utils/plugins.html#플러그인-등록","1905":"/docs/project-structure/utils/plugins.html#커스텀-플러그인-추가","1906":"/docs/project-structure/utils/plugins.html#관련-문서","1907":"/docs/project-structure/utils/stores.html#pinia-스토어","1908":"/docs/project-structure/utils/stores.html#개요","1909":"/docs/project-structure/utils/stores.html#디렉토리-구조","1910":"/docs/project-structure/utils/stores.html#주요-스토어","1911":"/docs/project-structure/utils/stores.html#authstore-js","1912":"/docs/project-structure/utils/stores.html#loadingstore-js","1913":"/docs/project-structure/utils/stores.html#menustore-js","1914":"/docs/project-structure/utils/stores.html#sessionstore-js","1915":"/docs/project-structure/utils/stores.html#modalstore-js","1916":"/docs/project-structure/utils/stores.html#tabstore-js","1917":"/docs/project-structure/utils/stores.html#sidebarstore-js","1918":"/docs/project-structure/utils/stores.html#logstore-js","1919":"/docs/project-structure/utils/stores.html#스토어-사용-패턴","1920":"/docs/project-structure/utils/stores.html#composition-api에서-사용","1921":"/docs/project-structure/utils/stores.html#options-api에서-사용","1922":"/docs/project-structure/utils/stores.html#스토어-생성-가이드","1923":"/docs/project-structure/utils/stores.html#관련-문서","1924":"/docs/project-structure/vendor.html#벤더-라이브러리","1925":"/docs/project-structure/vendor.html#개요","1926":"/docs/project-structure/vendor.html#디렉토리-구조","1927":"/docs/project-structure/vendor.html#주요-디렉토리","1928":"/docs/project-structure/vendor.html#core","1929":"/docs/project-structure/vendor.html#layouts","1930":"/docs/project-structure/vendor.html#dashboard","1931":"/docs/project-structure/vendor.html#assets","1932":"/docs/project-structure/views/axpframework.html#axpframework-모듈","1933":"/docs/project-structure/views/axpframework.html#개요","1934":"/docs/project-structure/views/axpframework.html#디렉토리-구조","1935":"/docs/project-structure/views/axpframework.html#주요-컴포넌트","1936":"/docs/project-structure/views/axpframework.html#login-vue","1937":"/docs/project-structure/views/axpframework.html#adminlogin-vue","1938":"/docs/project-structure/views/axpframework.html#main-vue","1939":"/docs/project-structure/views/axpframework.html#dashboard-vue","1940":"/docs/project-structure/views/ess.html#ess-모듈-뷰-컴포넌트","1941":"/docs/project-structure/views/ess.html#개요","1942":"/docs/project-structure/views/ess.html#디렉토리-구조","1943":"/docs/project-structure/views/ess.html#주요-컴포넌트","1944":"/docs/project-structure/views/ess.html#인사-관리-persadm","1945":"/docs/project-structure/views/ess.html#paattendancerequest-vue","1946":"/docs/project-structure/views/ess.html#pimypersonnelinformation-vue","1947":"/docs/project-structure/views/ess.html#poorganizationchart-vue","1948":"/docs/project-structure/views/ess.html#관리자-기능-admin","1949":"/docs/project-structure/views/ess.html#assmsmanagement-vue","1950":"/docs/project-structure/views/ess.html#법인카드-creditcard","1951":"/docs/project-structure/views/ess.html#billapprovelist-vue","1952":"/docs/project-structure/views/ess.html#교육-education","1953":"/docs/project-structure/views/ess.html#etedurequest-vue","1954":"/docs/project-structure/views/ess.html#평가-estimation","1955":"/docs/project-structure/views/ess.html#ebadminestimationstatistics-vue","1956":"/docs/project-structure/views/ess.html#공통-패턴","1957":"/docs/project-structure/views/ess.html#api-호출-패턴","1958":"/docs/project-structure/views/ess.html#세션-정보-사용","1959":"/docs/project-structure/views/ess.html#관련-문서","1960":"/docs/project-structure/views/fcm.html#fcm-모듈-뷰-컴포넌트","1961":"/docs/project-structure/views/fcm.html#개요","1962":"/docs/project-structure/views/fcm.html#디렉토리-구조","1963":"/docs/project-structure/views/fcm.html#주요-컴포넌트","1964":"/docs/project-structure/views/fcm.html#erp-모듈-erp-sys","1965":"/docs/project-structure/views/fcm.html#sys1200-vue","1966":"/docs/project-structure/views/fcm.html#sys1710-vue","1967":"/docs/project-structure/views/fcm.html#sys5300-vue","1968":"/docs/project-structure/views/fcm.html#hr-모듈-hr-hri","1969":"/docs/project-structure/views/fcm.html#hri1000-vue","1970":"/docs/project-structure/views/fcm.html#hri1000tabcontents-vue","1971":"/docs/project-structure/views/fcm.html#hri5100-vue","1972":"/docs/project-structure/views/fcm.html#공통-패턴","1973":"/docs/project-structure/views/fcm.html#검색-폼-구조","1974":"/docs/project-structure/views/fcm.html#그리드-사용","1975":"/docs/project-structure/views/fcm.html#관련-문서","1976":"/docs/project-structure/views/geosan.html#geosan-모듈-뷰-컴포넌트","1977":"/docs/project-structure/views/geosan.html#개요","1978":"/docs/project-structure/views/geosan.html#디렉토리-구조","1979":"/docs/project-structure/views/geosan.html#주요-컴포넌트","1980":"/docs/project-structure/views/geosan.html#고객-관리-bi-customer","1981":"/docs/project-structure/views/geosan.html#customerlist-vue","1982":"/docs/project-structure/views/geosan.html#customergrplist-vue","1983":"/docs/project-structure/views/geosan.html#customerlistpop-vue","1984":"/docs/project-structure/views/geosan.html#customergrppop-vue","1985":"/docs/project-structure/views/geosan.html#데이터-파일","1986":"/docs/project-structure/views/geosan.html#customerlistdata-js","1987":"/docs/project-structure/views/geosan.html#customergrplistdata-js","1988":"/docs/project-structure/views/geosan.html#공통-패턴","1989":"/docs/project-structure/views/geosan.html#검색-폼-구조","1990":"/docs/project-structure/views/geosan.html#그리드-사용","1991":"/docs/project-structure/views/geosan.html#관련-문서","1992":"/docs/project-structure/views/ui.html#ui-컴포넌트-및-레이아웃","1993":"/docs/project-structure/views/ui.html#개요","1994":"/docs/project-structure/views/ui.html#디렉토리-구조","1995":"/docs/project-structure/views/ui.html#공통-컴포넌트-components-common","1996":"/docs/project-structure/views/ui.html#버튼-컴포넌트","1997":"/docs/project-structure/views/ui.html#buttonbox-vue","1998":"/docs/project-structure/views/ui.html#입력-컴포넌트","1999":"/docs/project-structure/views/ui.html#inputphone-vue","2000":"/docs/project-structure/views/ui.html#로딩-컴포넌트","2001":"/docs/project-structure/views/ui.html#loading-vue","2002":"/docs/project-structure/views/ui.html#조회-컴포넌트-lookup","2003":"/docs/project-structure/views/ui.html#lookupbox-vue","2004":"/docs/project-structure/views/ui.html#선택-컴포넌트-select","2005":"/docs/project-structure/views/ui.html#selectboxsql-vue","2006":"/docs/project-structure/views/ui.html#selectboxdate-vue","2007":"/docs/project-structure/views/ui.html#multiselectboxsql-vue","2008":"/docs/project-structure/views/ui.html#트리-컴포넌트-tree","2009":"/docs/project-structure/views/ui.html#treedeptdropdown-vue","2010":"/docs/project-structure/views/ui.html#treeempdropdown-vue","2011":"/docs/project-structure/views/ui.html#treeorgnode-vue","2012":"/docs/project-structure/views/ui.html#그리드-컴포넌트-components-grid","2013":"/docs/project-structure/views/ui.html#gridclickfield-vue","2014":"/docs/project-structure/views/ui.html#gridcontextmenu-vue","2015":"/docs/project-structure/views/ui.html#gridmultiselectwrapper-vue","2016":"/docs/project-structure/views/ui.html#메뉴-컴포넌트-components-menu","2017":"/docs/project-structure/views/ui.html#menusidebar-vue","2018":"/docs/project-structure/views/ui.html#menuheaderbar-vue","2019":"/docs/project-structure/views/ui.html#menubmk-vue","2020":"/docs/project-structure/views/ui.html#팝업-컴포넌트-components-popup","2021":"/docs/project-structure/views/ui.html#popupapproval-vue","2022":"/docs/project-structure/views/ui.html#popupapprovelist-vue","2023":"/docs/project-structure/views/ui.html#popupfilelink-vue","2024":"/docs/project-structure/views/ui.html#popuplog-vue","2025":"/docs/project-structure/views/ui.html#popuppagelog-vue","2026":"/docs/project-structure/views/ui.html#popupsmstemplatelist-vue","2027":"/docs/project-structure/views/ui.html#레이아웃-컴포넌트-layouts","2028":"/docs/project-structure/views/ui.html#blank-vue","2029":"/docs/project-structure/views/ui.html#default-vue","2030":"/docs/project-structure/views/ui.html#popblank-vue","2031":"/docs/project-structure/views/ui.html#관련-문서","2032":"/docs/references/classes.html#주요-클래스-함수-참조","2033":"/docs/references/classes.html#유틸리티-함수","2034":"/docs/references/classes.html#스토어","2035":"/docs/references/classes.html#api-호출","2036":"/docs/references/config-files.html#설정-파일-참조","2037":"/docs/references/config-files.html#주요-설정-파일","2038":"/docs/references/config-files.html#package-json","2039":"/docs/references/config-files.html#vite-config-js","2040":"/docs/references/config-files.html#env","2041":"/docs/references/config-files.html#jsconfig-json","2042":"/docs/references/config-files.html#플러그인-설정","2043":"/docs/references/config-files.html#router-routes-js","2044":"/docs/references/config-files.html#pinia-js","2045":"/docs/references/config-files.html#vuetify-index-js","2046":"/docs/references/external-libs.html#외부-라이브러리-문서","2047":"/docs/references/external-libs.html#vue-3","2048":"/docs/references/external-libs.html#vite","2049":"/docs/references/external-libs.html#pinia","2050":"/docs/references/external-libs.html#vuetify","2051":"/docs/references/external-libs.html#vue-router","2052":"/docs/references/external-libs.html#ag-grid","2053":"/docs/references/external-libs.html#axios","2054":"/docs/references/faq.html#자주-묻는-질문-faq","2055":"/docs/references/faq.html#q-자동-임포트가-작동하지-않아요","2056":"/docs/references/faq.html#q-컴포넌트를-찾을-수-없어요","2057":"/docs/references/faq.html#q-api-호출-시-401-에러가-발생해요","2058":"/docs/references/faq.html#q-환경-변수가-적용되지-않아요","2059":"/docs/references/faq.html#q-빌드가-실패해요","2060":"/docs/references/icons.html#아이콘-사용법","2061":"/docs/references/icons.html#iconify","2062":"/docs/references/icons.html#사용-예제","2063":"/docs/references/icons.html#아이콘-빌드","2064":"/docs/references/icons.html#아이콘-라이브러리","2065":"/docs/tech-stack/axios.html#http-클라이언트-axios","2066":"/docs/tech-stack/axios.html#개요","2067":"/docs/tech-stack/axios.html#커스텀-인스턴스","2068":"/docs/tech-stack/axios.html#주요-기능","2069":"/docs/tech-stack/axios.html#사용법","2070":"/docs/tech-stack/charts.html#차트-라이브러리","2071":"/docs/tech-stack/charts.html#apexcharts","2072":"/docs/tech-stack/charts.html#echarts","2073":"/docs/tech-stack/charts.html#사용-목적","2074":"/docs/tech-stack/frameworks.html#프레임워크-및-라이브러리","2075":"/docs/tech-stack/frameworks.html#vue-3","2076":"/docs/tech-stack/frameworks.html#버전","2077":"/docs/tech-stack/frameworks.html#주요-특징","2078":"/docs/tech-stack/frameworks.html#사용-예제","2079":"/docs/tech-stack/frameworks.html#자동-임포트","2080":"/docs/tech-stack/frameworks.html#vite","2081":"/docs/tech-stack/frameworks.html#버전-1","2082":"/docs/tech-stack/frameworks.html#주요-기능","2083":"/docs/tech-stack/frameworks.html#주요-플러그인","2084":"/docs/tech-stack/frameworks.html#pinia","2085":"/docs/tech-stack/frameworks.html#버전-2","2086":"/docs/tech-stack/frameworks.html#특징","2087":"/docs/tech-stack/frameworks.html#스토어-구조","2088":"/docs/tech-stack/frameworks.html#vue-router","2089":"/docs/tech-stack/frameworks.html#버전-3","2090":"/docs/tech-stack/frameworks.html#라우팅-구조","2091":"/docs/tech-stack/frameworks.html#라우트-가드","2092":"/docs/tech-stack/frameworks.html#axios","2093":"/docs/tech-stack/frameworks.html#버전-4","2094":"/docs/tech-stack/frameworks.html#커스텀-인스턴스","2095":"/docs/tech-stack/frameworks.html#주요-기능-1","2096":"/docs/tech-stack/frameworks.html#ag-grid","2097":"/docs/tech-stack/frameworks.html#버전-5","2098":"/docs/tech-stack/frameworks.html#사용-목적","2099":"/docs/tech-stack/frameworks.html#주요-기능-2","2100":"/docs/tech-stack/frameworks.html#차트-라이브러리","2101":"/docs/tech-stack/frameworks.html#apexcharts","2102":"/docs/tech-stack/frameworks.html#echarts","2103":"/docs/tech-stack/frameworks.html#사용-목적-1","2104":"/docs/tech-stack/frameworks.html#excel-처리","2105":"/docs/tech-stack/frameworks.html#exceljs","2106":"/docs/tech-stack/frameworks.html#사용-목적-2","2107":"/docs/tech-stack/frameworks.html#암호화","2108":"/docs/tech-stack/frameworks.html#cryptojs","2109":"/docs/tech-stack/frameworks.html#사용-목적-3","2110":"/docs/tech-stack/frameworks.html#기타-주요-라이브러리","2111":"/docs/tech-stack/frameworks.html#파일-처리","2112":"/docs/tech-stack/frameworks.html#pdf-처리","2113":"/docs/tech-stack/frameworks.html#날짜-처리","2114":"/docs/tech-stack/frameworks.html#드래그-앤-드롭","2115":"/docs/tech-stack/frameworks.html#트리-뷰","2116":"/docs/tech-stack/frameworks.html#다음-단계","2117":"/docs/tech-stack/grid.html#그리드-라이브러리-ag-grid","2118":"/docs/tech-stack/grid.html#개요","2119":"/docs/tech-stack/grid.html#주요-기능","2120":"/docs/tech-stack/grid.html#사용-예제","2121":"/docs/tech-stack/pinia.html#상태-관리-pinia","2122":"/docs/tech-stack/pinia.html#개요","2123":"/docs/tech-stack/pinia.html#주요-스토어","2124":"/docs/tech-stack/pinia.html#사용법","2125":"/docs/tech-stack/pinia.html#상태-영속화","2126":"/docs/tech-stack/utilities.html#기타-유틸리티","2127":"/docs/tech-stack/utilities.html#excel-처리","2128":"/docs/tech-stack/utilities.html#암호화","2129":"/docs/tech-stack/utilities.html#파일-처리","2130":"/docs/tech-stack/utilities.html#pdf-처리","2131":"/docs/tech-stack/utilities.html#날짜-처리","2132":"/docs/tech-stack/utilities.html#드래그-앤-드롭","2133":"/docs/tech-stack/utilities.html#트리-뷰","2134":"/docs/tech-stack/router.html#라우팅-vue-router","2135":"/docs/tech-stack/router.html#개요","2136":"/docs/tech-stack/router.html#라우트-정의","2137":"/docs/tech-stack/router.html#동적-라우팅","2138":"/docs/tech-stack/router.html#라우트-가드","2139":"/docs/tech-stack/vuetify.html#ui-프레임워크-vuetify","2140":"/docs/tech-stack/vuetify.html#개요","2141":"/docs/tech-stack/vuetify.html#주요-컴포넌트","2142":"/docs/tech-stack/vuetify.html#테마","2143":"/docs/tech-stack/vuetify.html#로케일","2144":"/docs/testing/component-test.html#컴포넌트-테스트","2145":"/docs/testing/component-test.html#개요","2146":"/docs/testing/component-test.html#테스트-예제","2147":"/docs/testing/component-test.html#스토어-통합-테스트","2148":"/docs/testing/e2e-test.html#e2e-테스트","2149":"/docs/testing/e2e-test.html#개요","2150":"/docs/testing/e2e-test.html#테스트-프레임워크","2151":"/docs/testing/e2e-test.html#테스트-예제","2152":"/docs/testing/e2e-test.html#테스트-실행","2153":"/docs/testing/unit-test.html#단위-테스트","2154":"/docs/testing/unit-test.html#개요","2155":"/docs/testing/unit-test.html#테스트-프레임워크","2156":"/docs/testing/unit-test.html#유틸리티-함수-테스트","2157":"/docs/testing/unit-test.html#스토어-테스트","2158":"/docs/testing/unit-test.html#테스트-실행","2159":"/docs/troubleshooting/api-issues.html#api-통신-문제","2160":"/docs/troubleshooting/api-issues.html#cors-오류","2161":"/docs/troubleshooting/api-issues.html#타임아웃","2162":"/docs/troubleshooting/api-issues.html#_429-에러","2163":"/docs/troubleshooting/api-issues.html#암호화-오류","2164":"/docs/troubleshooting/auth-issues.html#인증-관련-문제","2165":"/docs/troubleshooting/auth-issues.html#토큰-만료","2166":"/docs/troubleshooting/auth-issues.html#refresh-token-만료","2167":"/docs/troubleshooting/auth-issues.html#토큰이-저장되지-않음","2168":"/docs/troubleshooting/auth-issues.html#인증-상태가-유지되지-않음","2169":"/docs/troubleshooting/build-errors.html#빌드-오류","2170":"/docs/troubleshooting/build-errors.html#일반적인-빌드-오류","2171":"/docs/troubleshooting/build-errors.html#타입-오류","2172":"/docs/troubleshooting/build-errors.html#의존성-오류","2173":"/docs/troubleshooting/build-errors.html#경로-오류","2174":"/docs/troubleshooting/build-errors.html#메모리-오류","2175":"/docs/troubleshooting/build-errors.html#빌드-최적화","2176":"/docs/troubleshooting/common-issues.html#일반적인-문제-해결","2177":"/docs/troubleshooting/common-issues.html#포트-충돌","2178":"/docs/troubleshooting/common-issues.html#의존성-설치-오류","2179":"/docs/troubleshooting/common-issues.html#환경-변수-인식-안-됨","2180":"/docs/troubleshooting/common-issues.html#빌드-오류","2181":"/docs/troubleshooting/common-issues.html#토큰-갱신-실패","2182":"/docs/troubleshooting/runtime-errors.html#런타임-오류","2183":"/docs/troubleshooting/runtime-errors.html#일반적인-런타임-오류","2184":"/docs/troubleshooting/runtime-errors.html#컴포넌트를-찾을-수-없음","2185":"/docs/troubleshooting/runtime-errors.html#스토어를-찾을-수-없음","2186":"/docs/troubleshooting/runtime-errors.html#라우트를-찾을-수-없음","2187":"/docs/troubleshooting/runtime-errors.html#api-요청-실패","2188":"/docs/troubleshooting/runtime-errors.html#디버깅","2189":"/docs/utilities/array-object.html#배열-객체-처리","2190":"/docs/utilities/array-object.html#개요","2191":"/docs/utilities/array-object.html#주요-함수","2192":"/docs/utilities/array-object.html#gfarraytoobject-array-keyfield-valuefield","2193":"/docs/utilities/array-object.html#gfgetrowtable-listdata","2194":"/docs/utilities/array-object.html#gfgetjsonfilter-data-key-values","2195":"/docs/utilities/array-object.html#gfjsondatavalidation-jsondata-code","2196":"/docs/utilities/array-object.html#gfclonejson-obj","2197":"/docs/utilities/array-object.html#gfobjecttostring-obj-log","2198":"/docs/utilities/array-object.html#관련-문서","2199":"/docs/utilities/common.html#공통-유틸리티-common-js","2200":"/docs/utilities/common.html#개요","2201":"/docs/utilities/common.html#파일-위치","2202":"/docs/utilities/common.html#주요-함수-카테고리","2203":"/docs/utilities/common.html#_1-기본-유틸리티-검증-함수","2204":"/docs/utilities/common.html#gfisempty-value","2205":"/docs/utilities/common.html#gfnvl-val-defaultval","2206":"/docs/utilities/common.html#_2-날짜-시간-관련-함수","2207":"/docs/utilities/common.html#gfformatdatestring-datestr-delimiter","2208":"/docs/utilities/common.html#gfformatdatetime-date","2209":"/docs/utilities/common.html#gfaddday-date-add","2210":"/docs/utilities/common.html#gfdiffdate-fromdate-todate","2211":"/docs/utilities/common.html#_3-숫자-처리-함수","2212":"/docs/utilities/common.html#gfnumberformat-number-decimals-decpoint-thousandssep","2213":"/docs/utilities/common.html#_4-문자열-처리-함수","2214":"/docs/utilities/common.html#gftrim-str","2215":"/docs/utilities/common.html#_5-배열-객체-처리-함수","2216":"/docs/utilities/common.html#gfarraytoobject-array-keyfield-valuefield","2217":"/docs/utilities/common.html#_6-파일-처리-함수","2218":"/docs/utilities/common.html#gfdownloadfile-data-filename-mimetype","2219":"/docs/utilities/common.html#_7-검증-함수","2220":"/docs/utilities/common.html#gfvalidateresidentnumber-residentnumber","2221":"/docs/utilities/common.html#gfisdate-str","2222":"/docs/utilities/common.html#자동-임포트","2223":"/docs/utilities/common.html#사용-예제","2224":"/docs/utilities/common.html#날짜-처리","2225":"/docs/utilities/common.html#숫자-포맷팅","2226":"/docs/utilities/common.html#데이터-검증","2227":"/docs/utilities/common.html#관련-문서","2228":"/docs/utilities/crypto.html#암호화-복호화","2229":"/docs/utilities/crypto.html#개요","2230":"/docs/utilities/crypto.html#주요-함수","2231":"/docs/utilities/crypto.html#encryptobject-data","2232":"/docs/utilities/crypto.html#decryptobject-data","2233":"/docs/utilities/crypto.html#encryptbinary-bytes-file","2234":"/docs/utilities/crypto.html#자동-암호화","2235":"/docs/utilities/crypto.html#관련-문서","2236":"/docs/utilities/date.html#날짜-처리","2237":"/docs/utilities/date.html#개요","2238":"/docs/utilities/date.html#주요-함수","2239":"/docs/utilities/date.html#gfformatdatestring-datestr-delimiter","2240":"/docs/utilities/date.html#gfformatdatetime-date","2241":"/docs/utilities/date.html#gfformatdatetimestring-pdate","2242":"/docs/utilities/date.html#gfaddday-date-add","2243":"/docs/utilities/date.html#gfdiffdate-fromdate-todate","2244":"/docs/utilities/date.html#gfaddmonth-date-val","2245":"/docs/utilities/date.html#gfformatdatewithsep-date","2246":"/docs/utilities/date.html#gftimestamptodatestr-date","2247":"/docs/utilities/date.html#gfconverttimestamp-pdate","2248":"/docs/utilities/date.html#gftoday","2249":"/docs/utilities/date.html#gfdayformat-str","2250":"/docs/utilities/date.html#날짜-드롭다운-생성","2251":"/docs/utilities/date.html#gfsetyearbox","2252":"/docs/utilities/date.html#gfsetmonthbox","2253":"/docs/utilities/date.html#gfsetdaybox","2254":"/docs/utilities/date.html#관련-문서","2255":"/docs/utilities/excel.html#excel-처리","2256":"/docs/utilities/excel.html#개요","2257":"/docs/utilities/excel.html#주요-함수","2258":"/docs/utilities/excel.html#gfhtmlexceldown-obj","2259":"/docs/utilities/excel.html#gfsavetableasexcel-id-filename","2260":"/docs/utilities/excel.html#gfsaveaggridasexcel-gridapi-filename","2261":"/docs/utilities/excel.html#gfsaveaggridasexcel-2-columns-rowdata-filename","2262":"/docs/utilities/excel.html#exceljs-직접-사용","2263":"/docs/utilities/excel.html#관련-문서","2264":"/docs/utilities/file.html#파일-처리","2265":"/docs/utilities/file.html#개요","2266":"/docs/utilities/file.html#주요-함수","2267":"/docs/utilities/file.html#gffiledownload-obj","2268":"/docs/utilities/file.html#gfgetuserimage-empcode-compcode","2269":"/docs/utilities/file.html#파일-다운로드","2270":"/docs/utilities/file.html#관련-문서","2271":"/docs/utilities/number.html#숫자-처리","2272":"/docs/utilities/number.html#개요","2273":"/docs/utilities/number.html#주요-함수","2274":"/docs/utilities/number.html#gfnumberformat-number-decimals-decpoint-thousandssep","2275":"/docs/utilities/number.html#gfsetnumber-str","2276":"/docs/utilities/number.html#gfgetcomma-val","2277":"/docs/utilities/number.html#gfgetthreecomma-val","2278":"/docs/utilities/number.html#gfrremovecomma-val","2279":"/docs/utilities/number.html#gffillzeros-n-digits","2280":"/docs/utilities/number.html#gfgetnumber-str","2281":"/docs/utilities/number.html#gfgetround-val-unit","2282":"/docs/utilities/number.html#관련-문서","2283":"/docs/utilities/indexeddb.html#indexeddb-유틸리티","2284":"/docs/utilities/indexeddb.html#개요","2285":"/docs/utilities/indexeddb.html#파일-위치","2286":"/docs/utilities/indexeddb.html#주요-함수","2287":"/docs/utilities/indexeddb.html#savetoindexeddb-key-value","2288":"/docs/utilities/indexeddb.html#loadfromindexeddb-key","2289":"/docs/utilities/indexeddb.html#getkeyindexeddb","2290":"/docs/utilities/indexeddb.html#removekeyindexeddb-key","2291":"/docs/utilities/indexeddb.html#removeallkeyindexeddb","2292":"/docs/utilities/indexeddb.html#getpagedata-pagedata-callback","2293":"/docs/utilities/indexeddb.html#데이터-압축","2294":"/docs/utilities/indexeddb.html#탭-스토어-연동","2295":"/docs/utilities/indexeddb.html#주의사항","2296":"/docs/utilities/indexeddb.html#관련-문서","2297":"/docs/utilities/fcm.html#fcm-유틸리티","2298":"/docs/utilities/fcm.html#개요","2299":"/docs/utilities/fcm.html#파일-위치","2300":"/docs/utilities/fcm.html#현재-상태","2301":"/docs/utilities/fcm.html#주요-함수-주석-처리됨","2302":"/docs/utilities/fcm.html#gfisempty-obj","2303":"/docs/utilities/fcm.html#gfaddday-date-add","2304":"/docs/utilities/fcm.html#gfobjecttostring-obj-log","2305":"/docs/utilities/fcm.html#gfgetthreecomma-val","2306":"/docs/utilities/fcm.html#활성화된-함수","2307":"/docs/utilities/fcm.html#사용-가이드","2308":"/docs/utilities/fcm.html#함수-활성화","2309":"/docs/utilities/fcm.html#대안-사용","2310":"/docs/utilities/fcm.html#향후-계획","2311":"/docs/utilities/fcm.html#관련-문서","2312":"/docs/utilities/string.html#문자열-처리","2313":"/docs/utilities/string.html#개요","2314":"/docs/utilities/string.html#주요-함수","2315":"/docs/utilities/string.html#gftrim-str","2316":"/docs/utilities/string.html#gfcameltosnakeupper-str","2317":"/docs/utilities/string.html#gfsnaketocamel-str","2318":"/docs/utilities/string.html#gfformidstr-val","2319":"/docs/utilities/string.html#gfsetclobdata-strstring-strappend-strseparator-strnull","2320":"/docs/utilities/string.html#gfobjecttostring-obj-log","2321":"/docs/utilities/string.html#전화번호-처리","2322":"/docs/utilities/string.html#gfcheckphonehyphen-phonenum","2323":"/docs/utilities/string.html#gfcheckphonenumber-p-num","2324":"/docs/utilities/string.html#gfmobliephoneformat-str","2325":"/docs/utilities/string.html#관련-문서","2326":"/docs/utilities/validation.html#폼-검증","2327":"/docs/utilities/validation.html#개요","2328":"/docs/utilities/validation.html#주요-함수","2329":"/docs/utilities/validation.html#gfisempty-value","2330":"/docs/utilities/validation.html#gfisdate-str","2331":"/docs/utilities/validation.html#gfvalidateresidentnumber-residentnumber","2332":"/docs/utilities/validation.html#gfcheckphonenumber-p-num","2333":"/docs/utilities/validation.html#폼-검증-예제","2334":"/docs/utilities/validation.html#관련-문서"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[3,1,51],"1":[1,3,1],"2":[2,4,2],"3":[2,4,2],"4":[2,4,2],"5":[1,3,11],"6":[3,1,6],"7":[2,3,12],"8":[2,3,1],"9":[4,4,87],"10":[1,3,1],"11":[3,4,12],"12":[1,3,22],"13":[2,3,5],"14":[3,1,6],"15":[2,3,15],"16":[2,3,1],"17":[4,4,91],"18":[2,3,1],"19":[2,4,15],"20":[2,4,15],"21":[1,4,10],"22":[2,3,1],"23":[2,5,34],"24":[3,3,34],"25":[1,3,34],"26":[2,3,5],"27":[4,1,6],"28":[2,4,17],"29":[2,4,1],"30":[4,5,102],"31":[5,5,72],"32":[5,5,66],"33":[6,5,70],"34":[5,5,48],"35":[3,4,1],"36":[2,6,19],"37":[2,6,12],"38":[1,4,31],"39":[2,4,6],"40":[3,1,7],"41":[2,3,12],"42":[2,3,1],"43":[5,4,25],"44":[2,8,31],"45":[5,8,130],"46":[3,4,114],"47":[3,3,1],"48":[2,5,15],"49":[2,5,11],"50":[2,5,19],"51":[1,3,40],"52":[2,3,6],"53":[3,1,8],"54":[2,3,12],"55":[2,3,1],"56":[5,4,96],"57":[5,4,72],"58":[3,3,1],"59":[3,5,43],"60":[1,3,21],"61":[2,3,6],"62":[3,1,5],"63":[2,3,12],"64":[2,3,1],"65":[4,4,60],"66":[3,6,59],"67":[3,6,118],"68":[2,3,1],"69":[3,4,20],"70":[2,3,8],"71":[1,3,29],"72":[2,3,5],"73":[3,1,8],"74":[2,3,12],"75":[2,3,1],"76":[4,4,136],"77":[3,4,54],"78":[2,4,74],"79":[3,4,16],"80":[4,4,24],"81":[2,3,1],"82":[3,4,12],"83":[3,4,11],"84":[3,4,16],"85":[3,4,4],"86":[4,4,10],"87":[1,3,30],"88":[2,3,6],"89":[3,1,9],"90":[2,3,15],"91":[2,3,1],"92":[7,4,58],"93":[2,9,13],"94":[3,9,12],"95":[2,9,21],"96":[5,9,13],"97":[2,9,38],"98":[6,9,84],"99":[7,4,56],"100":[4,4,27],"101":[4,4,23],"102":[4,4,45],"103":[5,4,37],"104":[3,3,1],"105":[2,5,17],"106":[2,5,20],"107":[2,5,1],"108":[3,6,24],"109":[3,6,16],"110":[2,5,17],"111":[1,5,17],"112":[3,3,8],"113":[2,3,17],"114":[1,3,34],"115":[2,3,6],"116":[3,1,6],"117":[2,3,12],"118":[2,3,1],"119":[4,4,79],"120":[4,4,73],"121":[3,4,73],"122":[3,3,23],"123":[1,3,22],"124":[2,3,7],"125":[3,1,4],"126":[2,3,7],"127":[2,3,6],"128":[2,3,6],"129":[2,1,9],"130":[2,2,27],"131":[2,2,1],"132":[2,4,7],"133":[3,6,4],"134":[3,6,8],"135":[3,4,6],"136":[2,6,6],"137":[2,6,9],"138":[3,4,33],"139":[2,4,15],"140":[3,2,1],"141":[3,4,15],"142":[3,4,5],"143":[3,4,3],"144":[2,2,17],"145":[2,2,8],"146":[2,1,6],"147":[1,2,1],"148":[3,3,5],"149":[2,2,21],"150":[2,2,5],"151":[2,2,5],"152":[2,1,7],"153":[2,2,1],"154":[2,3,32],"155":[3,3,9],"156":[2,2,45],"157":[2,2,1],"158":[1,3,14],"159":[2,2,5],"160":[1,1,6],"161":[2,1,1],"162":[2,2,17],"163":[2,1,1],"164":[1,3,11],"165":[2,3,6],"166":[2,1,1],"167":[3,3,8],"168":[2,1,5],"169":[2,1,7],"170":[1,2,1],"171":[2,3,18],"172":[2,2,25],"173":[2,2,5],"174":[2,1,10],"175":[1,2,17],"176":[3,2,1],"177":[4,3,14],"178":[3,3,35],"179":[4,3,29],"180":[3,3,41],"181":[2,2,1],"182":[3,4,18],"183":[3,4,15],"184":[3,2,1],"185":[2,4,17],"186":[2,4,20],"187":[2,4,1],"188":[3,5,9],"189":[3,5,9],"190":[2,4,12],"191":[1,4,17],"192":[2,2,1],"193":[2,4,6],"194":[2,4,5],"195":[2,4,19],"196":[3,2,1],"197":[2,4,91],"198":[2,2,1],"199":[3,4,85],"200":[1,2,38],"201":[2,2,9],"202":[2,1,6],"203":[1,2,1],"204":[2,3,20],"205":[2,2,12],"206":[2,2,5],"207":[2,1,7],"208":[1,2,23],"209":[2,2,1],"210":[2,4,31],"211":[1,4,47],"212":[2,4,1],"213":[1,6,12],"214":[2,6,12],"215":[2,2,1],"216":[1,4,30],"217":[1,4,12],"218":[2,2,1],"219":[1,4,37],"220":[1,4,15],"221":[3,2,1],"222":[1,5,30],"223":[2,2,1],"224":[1,4,20],"225":[3,2,1],"226":[3,4,24],"227":[2,2,1],"228":[2,4,37],"229":[4,4,23],"230":[1,2,32],"231":[2,2,10],"232":[2,1,9],"233":[3,2,20],"234":[5,2,11],"235":[2,2,1],"236":[3,3,23],"237":[2,2,12],"238":[2,2,27],"239":[2,2,17],"240":[2,2,1],"241":[2,3,14],"242":[3,2,9],"243":[3,2,21],"244":[2,2,16],"245":[2,2,4],"246":[2,1,6],"247":[1,2,4],"248":[2,3,27],"249":[1,2,18],"250":[1,2,19],"251":[2,2,4],"252":[2,1,13],"253":[3,2,15],"254":[2,2,1],"255":[2,3,19],"256":[2,3,16],"257":[2,2,17],"258":[2,2,18],"259":[1,2,8],"260":[3,3,17],"261":[2,3,12],"262":[2,2,1],"263":[3,3,15],"264":[3,3,17],"265":[2,2,5],"266":[2,1,6],"267":[3,2,1],"268":[2,5,15],"269":[3,5,16],"270":[2,5,7],"271":[2,2,1],"272":[2,3,16],"273":[2,3,12],"274":[2,2,1],"275":[3,4,20],"276":[1,4,16],"277":[1,4,21],"278":[2,2,1],"279":[4,4,18],"280":[3,4,29],"281":[2,2,1],"282":[3,4,5],"283":[3,4,13],"284":[3,4,5],"285":[2,2,4],"286":[2,1,11],"287":[3,2,1],"288":[3,3,12],"289":[1,2,6],"290":[2,3,21],"291":[3,3,20],"292":[1,2,1],"293":[2,3,18],"294":[3,3,18],"295":[2,2,1],"296":[2,3,9],"297":[2,3,10],"298":[3,2,1],"299":[2,4,19],"300":[2,4,11],"301":[2,4,11],"302":[2,2,6],"303":[3,1,8],"304":[1,3,6],"305":[2,4,23],"306":[2,4,7],"307":[1,3,6],"308":[2,4,19],"309":[2,4,11],"310":[2,4,11],"311":[3,4,12],"312":[1,3,4],"313":[2,4,15],"314":[2,3,6],"315":[3,1,6],"316":[2,3,1],"317":[2,4,28],"318":[3,3,1],"319":[2,6,9],"320":[2,6,42],"321":[2,3,1],"322":[2,5,35],"323":[1,5,18],"324":[2,3,1],"325":[1,5,24],"326":[1,5,24],"327":[2,3,7],"328":[2,1,6],"329":[2,2,15],"330":[3,2,15],"331":[3,2,12],"332":[3,2,14],"333":[3,2,39],"334":[2,2,1],"335":[1,4,23],"336":[1,4,23],"337":[1,4,16],"338":[2,2,7],"339":[2,1,5],"340":[3,2,5],"341":[3,2,13],"342":[2,2,3],"343":[2,1,8],"344":[2,2,10],"345":[2,2,2],"346":[4,1,7],"347":[2,4,11],"348":[2,4,6],"349":[2,4,6],"350":[2,4,1],"351":[1,6,6],"352":[1,6,9],"353":[2,4,7],"354":[3,1,7],"355":[3,3,1],"356":[2,6,9],"357":[1,6,7],"358":[3,3,13],"359":[2,3,4],"360":[3,1,8],"361":[2,3,1],"362":[3,4,8],"363":[2,3,7],"364":[3,1,8],"365":[1,3,20],"366":[3,3,1],"367":[4,4,27],"368":[4,4,42],"369":[3,4,1],"370":[2,7,21],"371":[2,7,25],"372":[3,4,16],"373":[4,4,1],"374":[3,8,13],"375":[4,4,11],"376":[3,3,1],"377":[2,6,20],"378":[2,6,1],"379":[1,8,10],"380":[1,8,10],"381":[1,8,7],"382":[2,3,1],"383":[4,5,9],"384":[3,5,23],"385":[3,5,23],"386":[3,5,17],"387":[4,5,9],"388":[5,3,30],"389":[3,3,9],"390":[1,6,31],"391":[2,6,7],"392":[1,6,9],"393":[3,3,32],"394":[3,3,26],"395":[2,3,7],"396":[1,3,30],"397":[2,3,25],"398":[2,3,13],"399":[2,1,5],"400":[2,2,51],"401":[2,2,1],"402":[1,4,6],"403":[1,4,9],"404":[2,2,6],"405":[3,1,7],"406":[4,3,15],"407":[3,3,14],"408":[3,3,12],"409":[5,3,8],"410":[2,3,5],"411":[2,1,5],"412":[1,2,14],"413":[2,2,33],"414":[2,2,8],"415":[2,2,7],"416":[2,1,5],"417":[2,2,39],"418":[2,2,26],"419":[2,2,6],"420":[3,1,7],"421":[2,3,51],"422":[2,3,7],"423":[2,3,4],"424":[2,1,1],"425":[2,2,23],"426":[2,2,1],"427":[4,4,16],"428":[4,4,16],"429":[4,4,20],"430":[3,4,7],"431":[3,4,12],"432":[2,2,36],"433":[3,2,27],"434":[2,2,28],"435":[2,2,13],"436":[2,1,11],"437":[3,2,48],"438":[4,2,1],"439":[6,5,57],"440":[6,5,18],"441":[6,5,11],"442":[3,2,1],"443":[6,4,17],"444":[6,4,18],"445":[7,4,14],"446":[6,4,11],"447":[3,2,1],"448":[4,5,25],"449":[3,5,22],"450":[3,2,1],"451":[3,5,34],"452":[3,5,19],"453":[3,5,14],"454":[3,2,21],"455":[5,2,23],"456":[2,2,15],"457":[2,1,1],"458":[2,2,1],"459":[4,3,41],"460":[3,3,32],"461":[2,3,8],"462":[3,5,16],"463":[1,5,16],"464":[1,5,16],"465":[5,3,20],"466":[4,3,22],"467":[2,2,1],"468":[4,3,11],"469":[3,3,11],"470":[3,2,1],"471":[4,4,22],"472":[1,4,14],"473":[2,2,25],"474":[2,2,11],"475":[3,1,10],"476":[5,3,1],"477":[3,8,13],"478":[5,8,22],"479":[3,3,1],"480":[4,5,13],"481":[4,5,14],"482":[3,7,21],"483":[3,7,19],"484":[3,7,20],"485":[6,5,14],"486":[3,3,1],"487":[6,5,1],"488":[1,9,14],"489":[2,9,13],"490":[6,5,24],"491":[3,3,1],"492":[6,5,23],"493":[4,5,19],"494":[5,5,25],"495":[3,3,1],"496":[5,6,14],"497":[4,6,16],"498":[3,3,1],"499":[4,6,1],"500":[2,8,17],"501":[1,8,13],"502":[4,6,15],"503":[5,6,19],"504":[3,3,1],"505":[5,6,19],"506":[4,6,20],"507":[4,6,11],"508":[3,3,1],"509":[4,6,16],"510":[5,6,14],"511":[5,6,10],"512":[2,3,11],"513":[4,1,1],"514":[4,4,61],"515":[5,4,37],"516":[4,4,35],"517":[4,4,33],"518":[6,4,64],"519":[3,4,30],"520":[3,4,21],"521":[2,4,18],"522":[2,4,14],"523":[2,4,15],"524":[3,1,7],"525":[3,3,20],"526":[2,3,1],"527":[1,4,32],"528":[2,4,1],"529":[4,6,6],"530":[5,6,6],"531":[4,6,5],"532":[4,6,5],"533":[2,3,1],"534":[1,4,26],"535":[2,4,1],"536":[5,6,5],"537":[4,6,6],"538":[4,6,6],"539":[3,3,1],"540":[2,6,53],"541":[2,6,17],"542":[3,3,1],"543":[2,6,29],"544":[3,3,1],"545":[1,6,14],"546":[2,6,33],"547":[2,3,7],"548":[3,1,10],"549":[3,3,31],"550":[4,3,1],"551":[2,5,83],"552":[2,5,18],"553":[4,3,1],"554":[6,6,67],"555":[6,6,18],"556":[6,6,15],"557":[3,3,27],"558":[2,3,18],"559":[3,3,1],"560":[4,5,14],"561":[4,5,12],"562":[4,5,9],"563":[2,5,11],"564":[2,5,10],"565":[3,3,24],"566":[2,3,8],"567":[3,1,10],"568":[2,3,30],"569":[3,3,1],"570":[5,5,37],"571":[5,5,1],"572":[6,9,9],"573":[5,9,10],"574":[6,9,7],"575":[6,9,12],"576":[6,9,9],"577":[6,9,14],"578":[5,5,1],"579":[3,10,16],"580":[3,10,14],"581":[2,10,16],"582":[3,10,10],"583":[3,10,14],"584":[4,5,1],"585":[7,9,5],"586":[7,9,5],"587":[7,9,9],"588":[5,5,12],"589":[5,5,15],"590":[5,5,15],"591":[5,5,14],"592":[3,3,1],"593":[2,5,23],"594":[2,5,24],"595":[1,5,15],"596":[2,3,7],"597":[3,1,9],"598":[2,3,24],"599":[2,3,1],"600":[2,5,46],"601":[2,5,60],"602":[2,5,20],"603":[1,3,1],"604":[3,4,13],"605":[3,4,10],"606":[2,3,1],"607":[4,5,22],"608":[2,3,1],"609":[4,5,29],"610":[3,5,40],"611":[1,3,1],"612":[2,4,14],"613":[1,3,39],"614":[2,3,10],"615":[3,1,8],"616":[2,3,24],"617":[3,3,1],"618":[2,4,82],"619":[2,4,54],"620":[2,4,81],"621":[2,4,53],"622":[2,4,40],"623":[2,4,17],"624":[3,3,1],"625":[2,5,10],"626":[3,5,15],"627":[2,3,10],"628":[2,3,9],"629":[3,1,9],"630":[2,3,107],"631":[2,3,1],"632":[2,5,67],"633":[2,5,51],"634":[2,5,25],"635":[2,5,27],"636":[2,5,60],"637":[3,5,1],"638":[1,8,5],"639":[1,8,4],"640":[1,8,4],"641":[1,8,22],"642":[2,3,1],"643":[1,4,26],"644":[2,3,9],"645":[3,1,8],"646":[2,3,16],"647":[2,3,1],"648":[2,5,53],"649":[2,5,73],"650":[3,3,1],"651":[3,5,65],"652":[3,5,37],"653":[2,3,1],"654":[2,4,13],"655":[2,4,11],"656":[2,4,10],"657":[1,3,1],"658":[2,4,17],"659":[2,3,1],"660":[3,5,9],"661":[2,5,10],"662":[2,3,1],"663":[2,5,57],"664":[2,5,28],"665":[1,3,39],"666":[2,3,10],"667":[3,1,7],"668":[2,3,25],"669":[2,3,1],"670":[2,4,72],"671":[2,4,51],"672":[2,4,55],"673":[2,4,16],"674":[2,3,1],"675":[1,4,41],"676":[3,3,25],"677":[2,3,1],"678":[1,5,22],"679":[3,3,1],"680":[3,6,25],"681":[1,3,26],"682":[2,3,7],"683":[3,1,6],"684":[2,3,20],"685":[2,3,1],"686":[2,5,15],"687":[2,5,18],"688":[2,5,19],"689":[3,3,1],"690":[2,6,18],"691":[2,3,1],"692":[3,5,24],"693":[4,5,31],"694":[4,5,27],"695":[2,3,1],"696":[5,4,29],"697":[2,3,1],"698":[1,5,24],"699":[1,3,27],"700":[2,3,9],"701":[3,1,9],"702":[2,3,20],"703":[2,3,1],"704":[2,5,66],"705":[2,5,18],"706":[3,3,1],"707":[3,4,24],"708":[4,4,35],"709":[5,4,31],"710":[3,4,15],"711":[3,3,20],"712":[3,3,1],"713":[2,5,15],"714":[2,5,12],"715":[2,5,12],"716":[2,5,11],"717":[2,3,1],"718":[2,5,5],"719":[2,5,6],"720":[2,3,1],"721":[3,5,29],"722":[3,5,21],"723":[1,3,29],"724":[2,3,11],"725":[3,1,7],"726":[2,3,20],"727":[2,3,1],"728":[2,5,44],"729":[2,5,46],"730":[3,3,1],"731":[4,4,49],"732":[5,4,49],"733":[2,3,1],"734":[2,4,13],"735":[3,4,15],"736":[2,3,1],"737":[2,5,6],"738":[2,3,9],"739":[1,3,1],"740":[2,4,28],"741":[2,3,1],"742":[2,5,46],"743":[2,5,11],"744":[1,3,35],"745":[2,3,8],"746":[3,1,8],"747":[2,3,34],"748":[2,3,1],"749":[3,4,14],"750":[3,4,30],"751":[2,3,1],"752":[2,5,23],"753":[3,5,39],"754":[3,5,18],"755":[2,3,1],"756":[2,5,23],"757":[3,5,15],"758":[2,3,1],"759":[2,5,37],"760":[3,3,1],"761":[3,5,22],"762":[2,3,1],"763":[3,5,25],"764":[1,3,1],"765":[2,4,16],"766":[2,3,5],"767":[3,1,5],"768":[2,3,6],"769":[2,3,10],"770":[2,3,10],"771":[2,3,4],"772":[3,1,7],"773":[2,3,13],"774":[2,3,12],"775":[2,3,4],"776":[3,1,8],"777":[2,3,4],"778":[1,3,6],"779":[2,3,4],"780":[1,3,5],"781":[1,3,4],"782":[2,3,4],"783":[1,3,6],"784":[2,1,6],"785":[2,2,4],"786":[2,4,15],"787":[1,4,10],"788":[1,2,4],"789":[2,3,15],"790":[1,3,27],"791":[2,2,1],"792":[1,4,10],"793":[2,4,10],"794":[2,2,5],"795":[2,1,8],"796":[3,2,6],"797":[2,2,1],"798":[1,3,19],"799":[1,3,20],"800":[2,2,1],"801":[1,3,21],"802":[3,2,1],"803":[1,4,24],"804":[2,4,16],"805":[3,2,1],"806":[1,4,4],"807":[2,2,5],"808":[2,1,10],"809":[2,2,1],"810":[2,4,11],"811":[2,4,10],"812":[2,2,17],"813":[2,2,18],"814":[2,2,1],"815":[2,4,5],"816":[1,4,6],"817":[1,4,4],"818":[3,2,19],"819":[2,2,5],"820":[3,1,8],"821":[1,3,1],"822":[2,4,25],"823":[3,4,11],"824":[2,3,1],"825":[3,5,23],"826":[3,5,6],"827":[3,5,19],"828":[2,3,1],"829":[1,5,17],"830":[1,5,17],"831":[2,3,5],"832":[1,1,12],"833":[2,1,1],"834":[4,2,54],"835":[2,2,43],"836":[2,2,40],"837":[2,1,1],"838":[1,3,37],"839":[3,1,7],"840":[2,4,11],"841":[2,4,10],"842":[2,1,1],"843":[3,3,15],"844":[3,3,11],"845":[2,1,1],"846":[4,3,29],"847":[3,3,7],"848":[4,1,1],"849":[1,5,8],"850":[1,5,12],"851":[1,5,10],"852":[2,1,7],"853":[3,1,9],"854":[2,3,1],"855":[1,5,6],"856":[1,5,10],"857":[2,5,16],"858":[4,3,1],"859":[2,6,57],"860":[2,6,1],"861":[2,8,14],"862":[2,8,18],"863":[2,8,13],"864":[2,8,26],"865":[2,3,1],"866":[2,5,16],"867":[2,5,13],"868":[2,3,1],"869":[3,5,24],"870":[2,5,20],"871":[2,3,1],"872":[3,4,17],"873":[2,4,17],"874":[2,3,6],"875":[2,1,7],"876":[2,2,1],"877":[1,4,5],"878":[1,4,8],"879":[2,4,31],"880":[1,2,1],"881":[1,3,6],"882":[1,3,11],"883":[2,3,31],"884":[1,2,1],"885":[1,3,5],"886":[1,3,11],"887":[2,3,13],"888":[2,3,29],"889":[3,3,17],"890":[2,2,1],"891":[1,3,39],"892":[3,3,15],"893":[2,2,1],"894":[2,3,45],"895":[2,2,1],"896":[1,3,24],"897":[3,2,1],"898":[1,5,20],"899":[2,2,8],"900":[3,1,7],"901":[2,3,1],"902":[1,5,6],"903":[2,5,1],"904":[4,7,26],"905":[4,7,22],"906":[2,7,17],"907":[1,3,1],"908":[1,4,8],"909":[1,4,12],"910":[1,4,15],"911":[1,3,1],"912":[1,4,5],"913":[2,4,13],"914":[2,4,11],"915":[2,3,1],"916":[1,5,10],"917":[2,5,11],"918":[2,5,4],"919":[2,3,1],"920":[1,5,6],"921":[1,5,16],"922":[1,3,1],"923":[1,4,9],"924":[1,4,12],"925":[2,3,1],"926":[2,5,1],"927":[2,6,16],"928":[2,6,12],"929":[2,6,18],"930":[5,3,1],"931":[1,8,5],"932":[1,8,10],"933":[2,8,13],"934":[2,3,1],"935":[1,5,5],"936":[1,5,12],"937":[2,3,5],"938":[2,1,7],"939":[1,2,1],"940":[1,3,4],"941":[1,3,6],"942":[2,3,23],"943":[1,2,1],"944":[1,3,5],"945":[1,3,7],"946":[2,3,18],"947":[3,2,1],"948":[1,5,6],"949":[1,5,10],"950":[2,5,21],"951":[2,2,1],"952":[1,4,6],"953":[1,4,7],"954":[2,4,23],"955":[2,2,1],"956":[1,4,4],"957":[1,4,5],"958":[2,4,21],"959":[2,2,7],"960":[3,1,10],"961":[5,3,1],"962":[1,8,5],"963":[2,8,1],"964":[2,9,12],"965":[2,9,11],"966":[2,8,17],"967":[2,8,18],"968":[1,8,12],"969":[2,3,1],"970":[1,5,33],"971":[3,5,18],"972":[4,5,18],"973":[3,3,1],"974":[1,5,25],"975":[2,5,24],"976":[1,3,1],"977":[2,4,26],"978":[1,4,43],"979":[2,4,1],"980":[1,6,10],"981":[2,6,10],"982":[2,3,1],"983":[2,5,17],"984":[2,5,10],"985":[2,5,22],"986":[2,3,34],"987":[2,3,7],"988":[2,1,6],"989":[2,2,27],"990":[2,2,4],"991":[2,1,6],"992":[2,2,14],"993":[2,2,3],"994":[3,1,7],"995":[2,3,16],"996":[3,3,12],"997":[3,3,12],"998":[2,3,3],"999":[2,1,7],"1000":[3,2,6],"1001":[3,2,8],"1002":[2,2,3],"1003":[2,1,1],"1004":[1,2,1],"1005":[2,3,9],"1006":[2,3,10],"1007":[2,2,19],"1008":[2,1,1],"1009":[1,2,1],"1010":[2,3,8],"1011":[2,3,20],"1012":[2,1,1],"1013":[1,2,1],"1014":[2,3,9],"1015":[2,3,11],"1016":[2,2,18],"1017":[4,1,1],"1018":[1,4,1],"1019":[2,4,9],"1020":[2,4,19],"1021":[2,1,1],"1022":[1,2,11],"1023":[1,2,1],"1024":[1,3,13],"1025":[2,3,9],"1026":[1,3,36],"1027":[2,3,39],"1028":[2,3,2],"1029":[3,3,39],"1030":[1,2,1],"1031":[1,3,18],"1032":[2,3,9],"1033":[1,3,50],"1034":[2,3,24],"1035":[2,3,56],"1036":[3,3,35],"1037":[1,2,1],"1038":[1,3,7],"1039":[2,3,9],"1040":[2,3,20],"1041":[3,2,8],"1042":[1,5,17],"1043":[2,5,32],"1044":[2,2,20],"1045":[1,2,27],"1046":[2,2,7],"1047":[2,1,1],"1048":[1,2,5],"1049":[2,3,9],"1050":[1,2,5],"1051":[2,3,9],"1052":[1,2,5],"1053":[2,3,9],"1054":[3,1,1],"1055":[1,3,1],"1056":[1,4,9],"1057":[2,4,8],"1058":[2,4,11],"1059":[2,4,38],"1060":[1,4,15],"1061":[3,1,1],"1062":[1,3,8],"1063":[2,3,33],"1064":[2,3,16],"1065":[3,1,1],"1066":[1,3,1],"1067":[1,4,9],"1068":[2,4,8],"1069":[2,4,1],"1070":[4,6,4],"1071":[3,6,10],"1072":[2,4,33],"1073":[3,4,7],"1074":[3,1,1],"1075":[1,3,9],"1076":[2,4,8],"1077":[2,4,27],"1078":[2,1,1],"1079":[2,2,1],"1080":[1,4,7],"1081":[2,4,7],"1082":[1,4,9],"1083":[2,4,16],"1084":[2,1,1],"1085":[2,2,1],"1086":[1,4,4],"1087":[2,4,7],"1088":[3,4,12],"1089":[2,4,15],"1090":[2,4,7],"1091":[2,4,15],"1092":[2,1,1],"1093":[1,2,1],"1094":[1,3,5],"1095":[2,3,8],"1096":[2,3,11],"1097":[2,3,17],"1098":[3,3,9],"1099":[2,1,1],"1100":[2,2,1],"1101":[1,4,5],"1102":[2,4,7],"1103":[1,4,10],"1104":[3,4,28],"1105":[2,4,13],"1106":[2,4,20],"1107":[2,1,1],"1108":[1,2,1],"1109":[1,3,5],"1110":[2,3,8],"1111":[2,3,12],"1112":[2,3,17],"1113":[2,3,8],"1114":[2,1,1],"1115":[1,2,1],"1116":[1,3,5],"1117":[2,3,8],"1118":[2,3,11],"1119":[2,3,17],"1120":[2,3,6],"1121":[1,3,11],"1122":[3,1,1],"1123":[1,3,1],"1124":[1,4,6],"1125":[2,4,8],"1126":[2,4,32],"1127":[1,4,9],"1128":[2,1,1],"1129":[1,2,6],"1130":[2,3,8],"1131":[1,2,5],"1132":[2,3,8],"1133":[1,2,5],"1134":[2,3,8],"1135":[3,1,1],"1136":[1,3,1],"1137":[1,4,6],"1138":[2,4,8],"1139":[2,4,6],"1140":[2,4,28],"1141":[2,1,1],"1142":[1,2,5],"1143":[2,3,8],"1144":[1,2,6],"1145":[2,3,8],"1146":[3,1,1],"1147":[1,3,1],"1148":[1,4,6],"1149":[2,4,8],"1150":[2,4,8],"1151":[2,4,22],"1152":[3,1,1],"1153":[1,3,1],"1154":[1,4,10],"1155":[2,4,8],"1156":[2,4,7],"1157":[2,4,23],"1158":[4,1,1],"1159":[1,4,11],"1160":[2,4,6],"1161":[2,4,17],"1162":[2,4,19],"1163":[2,4,10],"1164":[1,4,15],"1165":[2,1,1],"1166":[1,2,4],"1167":[2,2,4],"1168":[2,2,4],"1169":[1,3,8],"1170":[2,2,1],"1171":[2,3,5],"1172":[2,3,5],"1173":[2,3,7],"1174":[2,2,6],"1175":[2,2,13],"1176":[2,2,21],"1177":[4,1,1],"1178":[1,4,10],"1179":[3,4,11],"1180":[3,4,15],"1181":[3,4,18],"1182":[2,4,1],"1183":[5,5,9],"1184":[5,5,11],"1185":[1,4,28],"1186":[2,1,1],"1187":[1,2,6],"1188":[2,2,4],"1189":[2,2,17],"1190":[2,2,1],"1191":[2,3,5],"1192":[2,3,4],"1193":[2,3,4],"1194":[2,2,14],"1195":[1,2,11],"1196":[2,1,1],"1197":[1,2,12],"1198":[2,2,1],"1199":[1,3,22],"1200":[2,3,20],"1201":[2,3,12],"1202":[2,2,16],"1203":[2,2,4],"1204":[3,2,1],"1205":[1,4,15],"1206":[1,4,12],"1207":[2,1,1],"1208":[1,2,14],"1209":[2,2,21],"1210":[2,2,1],"1211":[4,3,18],"1212":[4,3,40],"1213":[2,2,15],"1214":[2,2,1],"1215":[3,3,14],"1216":[3,3,14],"1217":[4,3,17],"1218":[2,2,1],"1219":[2,4,23],"1220":[3,4,18],"1221":[1,2,26],"1222":[2,2,5],"1223":[2,1,1],"1224":[1,2,15],"1225":[2,2,1],"1226":[2,4,24],"1227":[2,4,17],"1228":[2,2,1],"1229":[2,3,28],"1230":[3,3,21],"1231":[3,3,9],"1232":[2,2,1],"1233":[3,4,13],"1234":[3,4,3],"1235":[3,4,7],"1236":[2,2,24],"1237":[2,2,7],"1238":[2,1,1],"1239":[1,2,13],"1240":[3,2,16],"1241":[2,2,1],"1242":[3,4,19],"1243":[4,4,12],"1244":[3,4,14],"1245":[3,4,16],"1246":[3,4,7],"1247":[2,4,7],"1248":[4,2,30],"1249":[4,2,19],"1250":[3,2,39],"1251":[2,2,16],"1252":[1,2,25],"1253":[2,2,5],"1254":[2,1,1],"1255":[1,2,10],"1256":[3,2,14],"1257":[2,2,1],"1258":[5,3,14],"1259":[6,3,22],"1260":[4,3,12],"1261":[3,2,36],"1262":[3,2,22],"1263":[2,2,26],"1264":[1,2,27],"1265":[2,2,5],"1266":[3,1,1],"1267":[1,3,24],"1268":[2,3,4],"1269":[2,3,19],"1270":[3,4,12],"1271":[2,3,6],"1272":[2,5,25],"1273":[2,5,45],"1274":[2,3,6],"1275":[2,5,24],"1276":[3,5,79],"1277":[2,3,1],"1278":[2,5,23],"1279":[2,5,28],"1280":[2,5,26],"1281":[2,5,34],"1282":[2,3,10],"1283":[2,5,12],"1284":[2,5,11],"1285":[2,3,1],"1286":[2,5,19],"1287":[6,5,10],"1288":[2,5,15],"1289":[1,3,39],"1290":[2,3,8],"1291":[2,1,1],"1292":[1,2,9],"1293":[3,2,1],"1294":[7,3,24],"1295":[7,3,30],"1296":[3,3,30],"1297":[6,3,38],"1298":[3,3,25],"1299":[3,2,19],"1300":[3,2,37],"1301":[3,2,1],"1302":[2,4,8],"1303":[3,4,32],"1304":[2,2,45],"1305":[3,2,19],"1306":[2,2,23],"1307":[2,2,8],"1308":[2,1,1],"1309":[1,2,11],"1310":[2,2,1],"1311":[3,4,6],"1312":[4,4,15],"1313":[4,4,10],"1314":[4,4,11],"1315":[3,4,18],"1316":[2,2,52],"1317":[2,2,15],"1318":[3,2,15],"1319":[2,2,17],"1320":[2,2,31],"1321":[2,2,8],"1322":[2,1,1],"1323":[1,2,11],"1324":[3,2,1],"1325":[3,4,3],"1326":[4,4,22],"1327":[4,4,4],"1328":[3,2,1],"1329":[3,4,3],"1330":[4,4,14],"1331":[8,4,24],"1332":[8,4,14],"1333":[4,4,22],"1334":[4,4,15],"1335":[3,2,1],"1336":[3,5,22],"1337":[3,5,57],"1338":[3,2,35],"1339":[3,2,14],"1340":[2,2,1],"1341":[3,4,25],"1342":[2,4,34],"1343":[2,2,10],"1344":[2,1,1],"1345":[1,2,8],"1346":[3,2,1],"1347":[3,4,14],"1348":[2,4,20],"1349":[3,4,19],"1350":[3,2,28],"1351":[2,2,1],"1352":[3,4,21],"1353":[1,2,20],"1354":[2,2,6],"1355":[2,1,1],"1356":[1,2,7],"1357":[2,2,7],"1358":[2,3,40],"1359":[1,3,16],"1360":[3,2,23],"1361":[2,2,18],"1362":[2,2,22],"1363":[2,2,5],"1364":[2,1,1],"1365":[1,2,9],"1366":[3,2,25],"1367":[2,2,1],"1368":[2,3,12],"1369":[2,3,7],"1370":[3,2,15],"1371":[1,2,1],"1372":[2,3,5],"1373":[2,3,4],"1374":[2,3,4],"1375":[2,2,5],"1376":[4,1,1],"1377":[1,4,13],"1378":[2,4,6],"1379":[3,4,8],"1380":[1,6,16],"1381":[3,4,1],"1382":[3,6,22],"1383":[2,6,14],"1384":[3,4,1],"1385":[1,6,39],"1386":[2,4,1],"1387":[2,5,41],"1388":[2,5,23],"1389":[3,5,30],"1390":[1,4,41],"1391":[2,4,9],"1392":[4,1,1],"1393":[1,4,8],"1394":[2,4,6],"1395":[3,4,5],"1396":[3,4,1],"1397":[2,6,4],"1398":[2,6,4],"1399":[2,4,29],"1400":[1,4,14],"1401":[4,1,1],"1402":[1,4,8],"1403":[2,4,6],"1404":[3,4,13],"1405":[2,4,1],"1406":[3,5,4],"1407":[3,5,5],"1408":[2,5,5],"1409":[2,4,28],"1410":[4,1,1],"1411":[1,4,13],"1412":[2,4,6],"1413":[3,4,10],"1414":[2,4,1],"1415":[2,5,5],"1416":[4,5,17],"1417":[2,5,4],"1418":[2,4,27],"1419":[2,4,29],"1420":[1,4,7],"1421":[4,1,1],"1422":[1,4,8],"1423":[2,4,6],"1424":[3,4,9],"1425":[3,4,1],"1426":[4,6,28],"1427":[2,6,10],"1428":[2,4,38],"1429":[2,1,1],"1430":[4,2,1],"1431":[1,5,7],"1432":[2,5,6],"1433":[2,5,8],"1434":[2,5,24],"1435":[2,5,33],"1436":[5,2,1],"1437":[1,6,7],"1438":[2,6,6],"1439":[2,6,10],"1440":[2,6,29],"1441":[4,2,1],"1442":[1,5,6],"1443":[2,5,6],"1444":[2,5,7],"1445":[2,5,23],"1446":[4,1,1],"1447":[1,4,8],"1448":[2,4,6],"1449":[3,4,6],"1450":[2,4,1],"1451":[3,5,4],"1452":[4,5,5],"1453":[3,5,5],"1454":[2,4,27],"1455":[4,1,1],"1456":[1,4,15],"1457":[2,4,6],"1458":[3,4,18],"1459":[2,4,1],"1460":[3,5,27],"1461":[2,5,11],"1462":[2,4,1],"1463":[3,5,39],"1464":[3,5,30],"1465":[2,4,1],"1466":[2,5,10],"1467":[2,5,13],"1468":[3,4,32],"1469":[2,4,8],"1470":[4,1,1],"1471":[1,4,14],"1472":[2,4,6],"1473":[3,4,12],"1474":[2,4,1],"1475":[3,5,31],"1476":[3,5,8],"1477":[3,5,8],"1478":[2,5,6],"1479":[2,4,8],"1480":[2,4,31],"1481":[2,1,1],"1482":[2,2,5],"1483":[4,2,7],"1484":[4,2,6],"1485":[4,2,7],"1486":[2,2,4],"1487":[1,2,14],"1488":[3,1,1],"1489":[3,3,4],"1490":[2,3,11],"1491":[2,3,11],"1492":[1,3,6],"1493":[5,3,6],"1494":[1,3,8],"1495":[2,1,1],"1496":[2,2,6],"1497":[2,2,6],"1498":[1,2,6],"1499":[2,2,5],"1500":[3,2,8],"1501":[2,2,9],"1502":[2,1,1],"1503":[2,2,7],"1504":[2,2,6],"1505":[2,2,8],"1506":[1,2,7],"1507":[2,2,8],"1508":[2,1,1],"1509":[2,2,5],"1510":[2,2,8],"1511":[2,2,6],"1512":[3,2,6],"1513":[3,1,1],"1514":[1,3,7],"1515":[2,3,21],"1516":[2,3,27],"1517":[2,3,24],"1518":[2,3,20],"1519":[2,3,31],"1520":[3,1,1],"1521":[1,3,9],"1522":[3,3,17],"1523":[3,3,27],"1524":[3,3,1],"1525":[6,4,37],"1526":[5,4,30],"1527":[5,4,36],"1528":[5,4,27],"1529":[2,4,32],"1530":[2,4,22],"1531":[3,3,1],"1532":[3,4,19],"1533":[3,4,18],"1534":[2,3,52],"1535":[2,3,37],"1536":[4,3,57],"1537":[3,3,45],"1538":[4,3,49],"1539":[2,3,35],"1540":[2,3,9],"1541":[3,1,1],"1542":[2,3,1],"1543":[2,3,20],"1544":[3,3,7],"1545":[2,3,1],"1546":[2,3,34],"1547":[2,3,22],"1548":[2,3,41],"1549":[3,1,1],"1550":[2,3,1],"1551":[2,3,13],"1552":[2,3,20],"1553":[2,3,1],"1554":[2,3,14],"1555":[2,3,11],"1556":[2,3,17],"1557":[3,1,1],"1558":[3,3,14],"1559":[2,3,1],"1560":[2,4,10],"1561":[2,4,11],"1562":[1,4,7],"1563":[2,3,21],"1564":[3,1,1],"1565":[2,3,8],"1566":[2,3,15],"1567":[2,3,23],"1568":[2,3,14],"1569":[4,1,1],"1570":[2,4,16],"1571":[1,4,16],"1572":[2,4,19],"1573":[2,4,13],"1574":[2,4,24],"1575":[2,1,1],"1576":[1,2,14],"1577":[1,2,15],"1578":[1,2,18],"1579":[1,2,9],"1580":[2,2,12],"1581":[2,1,1],"1582":[2,2,17],"1583":[2,2,33],"1584":[2,2,8],"1585":[2,1,1],"1586":[2,2,9],"1587":[2,2,12],"1588":[2,2,18],"1589":[2,2,11],"1590":[2,1,1],"1591":[3,2,20],"1592":[2,2,12],"1593":[2,2,20],"1594":[2,2,11],"1595":[3,1,1],"1596":[1,3,7],"1597":[4,3,1],"1598":[4,5,16],"1599":[5,5,22],"1600":[5,5,32],"1601":[3,3,1],"1602":[5,6,9],"1603":[3,6,12],"1604":[6,6,13],"1605":[3,3,1],"1606":[5,6,26],"1607":[5,6,14],"1608":[3,3,1],"1609":[5,6,108],"1610":[3,3,1],"1611":[4,6,14],"1612":[4,6,15],"1613":[4,6,53],"1614":[4,6,29],"1615":[4,6,19],"1616":[2,3,1],"1617":[5,5,12],"1618":[4,5,10],"1619":[2,3,13],"1620":[2,1,1],"1621":[3,2,24],"1622":[3,2,14],"1623":[2,1,1],"1624":[2,2,9],"1625":[2,2,12],"1626":[2,2,12],"1627":[2,1,1],"1628":[3,2,7],"1629":[2,2,25],"1630":[1,2,12],"1631":[2,1,1],"1632":[2,2,10],"1633":[2,2,14],"1634":[2,2,7],"1635":[1,2,33],"1636":[2,1,1],"1637":[2,2,19],"1638":[2,2,9],"1639":[2,2,10],"1640":[2,2,10],"1641":[2,1,1],"1642":[3,2,16],"1643":[2,2,21],"1644":[2,2,11],"1645":[2,1,1],"1646":[2,2,17],"1647":[1,2,8],"1648":[2,2,16],"1649":[1,2,13],"1650":[2,2,7],"1651":[2,1,1],"1652":[2,2,27],"1653":[2,2,60],"1654":[2,2,13],"1655":[3,2,1],"1656":[2,5,14],"1657":[2,5,8],"1658":[2,5,26],"1659":[2,2,44],"1660":[2,2,1],"1661":[2,4,12],"1662":[2,4,12],"1663":[2,4,10],"1664":[2,4,8],"1665":[2,2,13],"1666":[2,1,1],"1667":[3,2,73],"1668":[3,2,1],"1669":[4,5,7],"1670":[4,8,14],"1671":[4,8,10],"1672":[4,8,18],"1673":[4,5,8],"1674":[4,8,20],"1675":[4,8,29],"1676":[4,8,16],"1677":[5,5,7],"1678":[4,9,15],"1679":[4,9,18],"1680":[4,9,11],"1681":[4,9,8],"1682":[4,9,22],"1683":[5,5,9],"1684":[5,5,24],"1685":[4,5,8],"1686":[2,2,1],"1687":[2,4,7],"1688":[3,4,12],"1689":[2,4,11],"1690":[2,4,11],"1691":[3,2,19],"1692":[2,2,14],"1693":[2,1,1],"1694":[2,2,1],"1695":[2,4,17],"1696":[3,4,24],"1697":[1,4,13],"1698":[2,2,1],"1699":[2,4,16],"1700":[1,4,14],"1701":[2,2,19],"1702":[2,2,1],"1703":[2,3,11],"1704":[2,3,17],"1705":[2,2,1],"1706":[2,3,14],"1707":[2,3,23],"1708":[2,2,21],"1709":[2,2,21],"1710":[2,2,11],"1711":[3,1,11],"1712":[5,3,16],"1713":[4,3,24],"1714":[4,3,9],"1715":[3,3,19],"1716":[5,3,1],"1717":[5,8,35],"1718":[4,8,21],"1719":[6,8,10],"1720":[3,3,47],"1721":[4,3,1],"1722":[3,7,28],"1723":[4,7,42],"1724":[4,3,30],"1725":[4,3,41],"1726":[2,3,1],"1727":[3,5,11],"1728":[2,5,19],"1729":[2,3,20],"1730":[3,1,1],"1731":[2,3,13],"1732":[4,3,24],"1733":[2,3,25],"1734":[3,3,23],"1735":[3,4,23],"1736":[3,3,24],"1737":[1,3,1],"1738":[2,4,5],"1739":[2,4,5],"1740":[2,4,11],"1741":[2,3,16],"1742":[2,3,1],"1743":[2,4,13],"1744":[2,4,17],"1745":[2,4,10],"1746":[2,3,1],"1747":[2,5,19],"1748":[3,5,21],"1749":[5,5,20],"1750":[2,3,13],"1751":[3,1,14],"1752":[2,3,26],"1753":[2,3,21],"1754":[1,3,11],"1755":[3,1,1],"1756":[4,3,44],"1757":[5,3,1],"1758":[5,8,15],"1759":[5,8,16],"1760":[6,8,15],"1761":[4,3,8],"1762":[5,7,44],"1763":[3,7,29],"1764":[3,7,22],"1765":[4,3,10],"1766":[2,7,26],"1767":[2,7,21],"1768":[2,7,19],"1769":[2,7,13],"1770":[2,3,49],"1771":[6,3,1],"1772":[3,9,11],"1773":[4,9,13],"1774":[3,9,10],"1775":[3,9,7],"1776":[2,9,9],"1777":[2,3,43],"1778":[2,3,29],"1779":[2,3,23],"1780":[2,3,21],"1781":[2,3,22],"1782":[1,3,12],"1783":[3,3,16],"1784":[1,3,15],"1785":[2,3,30],"1786":[2,3,1],"1787":[3,5,23],"1788":[3,5,24],"1789":[4,5,22],"1790":[2,3,38],"1791":[4,1,1],"1792":[1,4,5],"1793":[2,4,1],"1794":[2,6,21],"1795":[2,6,12],"1796":[2,6,11],"1797":[2,4,19],"1798":[2,4,5],"1799":[4,1,1],"1800":[1,4,6],"1801":[2,4,1],"1802":[2,6,13],"1803":[2,6,14],"1804":[2,6,13],"1805":[2,6,11],"1806":[2,4,12],"1807":[4,1,1],"1808":[1,4,5],"1809":[2,4,5],"1810":[2,4,7],"1811":[4,1,1],"1812":[1,4,5],"1813":[2,4,5],"1814":[2,4,6],"1815":[3,1,1],"1816":[3,3,36],"1817":[4,3,116],"1818":[3,3,1],"1819":[3,5,13],"1820":[4,5,21],"1821":[4,5,11],"1822":[4,5,17],"1823":[3,5,11],"1824":[3,5,12],"1825":[3,3,1],"1826":[2,6,7],"1827":[2,6,7],"1828":[2,6,8],"1829":[4,3,16],"1830":[2,7,16],"1831":[2,3,9],"1832":[2,1,1],"1833":[1,2,18],"1834":[2,2,21],"1835":[2,2,1],"1836":[2,4,24],"1837":[2,4,29],"1838":[2,4,23],"1839":[3,4,5],"1840":[2,7,19],"1841":[3,7,23],"1842":[3,7,19],"1843":[3,2,1],"1844":[3,5,21],"1845":[3,5,29],"1846":[3,5,22],"1847":[3,2,23],"1848":[1,2,41],"1849":[2,2,7],"1850":[2,1,1],"1851":[1,2,6],"1852":[2,2,3],"1853":[2,2,13],"1854":[2,2,8],"1855":[2,2,16],"1856":[2,1,1],"1857":[1,2,19],"1858":[2,2,51],"1859":[2,2,1],"1860":[2,4,14],"1861":[2,4,44],"1862":[2,4,23],"1863":[3,2,1],"1864":[2,5,32],"1865":[2,5,21],"1866":[2,2,4],"1867":[2,1,1],"1868":[1,2,7],"1869":[2,2,4],"1870":[2,2,1],"1871":[2,4,16],"1872":[2,4,7],"1873":[2,2,11],"1874":[2,2,4],"1875":[3,1,1],"1876":[1,3,14],"1877":[2,3,19],"1878":[2,3,1],"1879":[2,5,74],"1880":[4,5,48],"1881":[2,3,1],"1882":[3,5,27],"1883":[3,5,17],"1884":[3,5,25],"1885":[2,3,29],"1886":[2,3,20],"1887":[4,3,38],"1888":[2,3,10],"1889":[2,1,1],"1890":[1,2,12],"1891":[2,2,37],"1892":[2,2,1],"1893":[4,3,34],"1894":[4,3,3],"1895":[2,7,41],"1896":[2,7,13],"1897":[3,3,5],"1898":[2,6,41],"1899":[2,6,12],"1900":[2,6,10],"1901":[2,6,10],"1902":[3,3,12],"1903":[4,3,11],"1904":[2,2,30],"1905":[3,2,32],"1906":[2,2,8],"1907":[2,1,1],"1908":[1,2,18],"1909":[2,2,24],"1910":[2,2,1],"1911":[2,3,38],"1912":[2,3,31],"1913":[2,3,23],"1914":[2,3,38],"1915":[2,3,39],"1916":[2,3,25],"1917":[2,3,34],"1918":[2,3,41],"1919":[3,2,1],"1920":[3,4,35],"1921":[3,4,20],"1922":[3,2,31],"1923":[2,2,13],"1924":[2,1,1],"1925":[1,2,7],"1926":[2,2,29],"1927":[2,2,1],"1928":[2,4,6],"1929":[2,4,4],"1930":[2,4,3],"1931":[1,4,7],"1932":[2,1,1],"1933":[1,2,5],"1934":[2,2,20],"1935":[2,2,1],"1936":[2,4,5],"1937":[2,4,4],"1938":[2,4,4],"1939":[2,4,3],"1940":[4,1,1],"1941":[1,4,15],"1942":[2,4,47],"1943":[2,4,1],"1944":[4,5,1],"1945":[2,9,19],"1946":[2,9,43],"1947":[2,9,11],"1948":[4,5,1],"1949":[2,9,62],"1950":[3,5,1],"1951":[2,8,11],"1952":[3,5,1],"1953":[2,8,8],"1954":[3,5,1],"1955":[2,8,9],"1956":[2,4,1],"1957":[3,6,47],"1958":[3,6,26],"1959":[2,4,8],"1960":[4,1,1],"1961":[1,4,11],"1962":[2,4,25],"1963":[2,4,1],"1964":[5,5,1],"1965":[2,9,7],"1966":[2,9,7],"1967":[2,9,7],"1968":[5,5,1],"1969":[2,9,69],"1970":[2,9,14],"1971":[2,9,9],"1972":[2,4,1],"1973":[3,6,44],"1974":[2,6,45],"1975":[2,4,10],"1976":[4,1,1],"1977":[1,4,11],"1978":[2,4,24],"1979":[2,4,1],"1980":[5,5,1],"1981":[2,10,94],"1982":[2,10,13],"1983":[2,10,22],"1984":[2,10,10],"1985":[2,5,1],"1986":[2,7,37],"1987":[2,7,12],"1988":[2,4,1],"1989":[3,6,46],"1990":[2,6,27],"1991":[2,4,10],"1992":[4,1,1],"1993":[1,4,14],"1994":[2,4,69],"1995":[5,4,1],"1996":[2,8,1],"1997":[2,8,17],"1998":[2,8,1],"1999":[2,8,25],"2000":[2,8,1],"2001":[2,8,24],"2002":[4,8,1],"2003":[2,10,34],"2004":[4,8,1],"2005":[2,10,41],"2006":[2,10,23],"2007":[2,10,13],"2008":[4,8,1],"2009":[2,10,23],"2010":[2,10,11],"2011":[2,10,10],"2012":[5,4,1],"2013":[2,8,13],"2014":[2,8,20],"2015":[2,8,12],"2016":[5,4,1],"2017":[2,8,12],"2018":[2,8,10],"2019":[2,8,10],"2020":[5,4,1],"2021":[2,8,10],"2022":[2,8,11],"2023":[2,8,11],"2024":[2,8,11],"2025":[2,8,33],"2026":[2,8,10],"2027":[4,4,1],"2028":[2,6,14],"2029":[2,6,15],"2030":[2,6,11],"2031":[2,4,8],"2032":[4,1,1],"2033":[2,4,20],"2034":[1,4,18],"2035":[2,4,10],"2036":[3,1,1],"2037":[3,3,1],"2038":[2,4,6],"2039":[3,4,5],"2040":[2,4,4],"2041":[2,4,4],"2042":[2,3,1],"2043":[3,4,3],"2044":[2,4,3],"2045":[3,4,3],"2046":[3,1,1],"2047":[2,3,6],"2048":[1,3,6],"2049":[1,3,7],"2050":[1,3,6],"2051":[2,3,7],"2052":[2,3,8],"2053":[1,3,7],"2054":[5,1,1],"2055":[5,5,13],"2056":[5,5,14],"2057":[7,5,13],"2058":[5,5,11],"2059":[3,5,10],"2060":[2,1,1],"2061":[1,2,6],"2062":[2,2,13],"2063":[2,2,9],"2064":[2,2,8],"2065":[4,1,1],"2066":[1,4,9],"2067":[2,4,8],"2068":[2,4,12],"2069":[1,4,14],"2070":[2,1,1],"2071":[1,2,11],"2072":[1,2,11],"2073":[2,2,11],"2074":[3,1,1],"2075":[2,3,1],"2076":[1,5,9],"2077":[2,5,21],"2078":[2,5,27],"2079":[2,5,24],"2080":[1,3,1],"2081":[1,4,5],"2082":[2,4,16],"2083":[2,4,19],"2084":[1,3,1],"2085":[1,4,11],"2086":[1,4,16],"2087":[2,4,31],"2088":[2,3,1],"2089":[1,5,6],"2090":[2,5,13],"2091":[2,5,12],"2092":[1,3,1],"2093":[1,4,5],"2094":[2,4,11],"2095":[2,4,12],"2096":[2,3,1],"2097":[1,5,8],"2098":[2,5,8],"2099":[2,5,10],"2100":[2,3,1],"2101":[1,4,9],"2102":[1,4,9],"2103":[2,4,11],"2104":[2,3,1],"2105":[1,5,4],"2106":[2,5,8],"2107":[1,3,1],"2108":[1,4,5],"2109":[2,4,12],"2110":[3,3,1],"2111":[2,5,8],"2112":[2,5,16],"2113":[2,5,9],"2114":[3,5,9],"2115":[2,5,10],"2116":[2,3,22],"2117":[5,1,1],"2118":[1,5,10],"2119":[2,5,10],"2120":[2,5,32],"2121":[4,1,1],"2122":[1,4,6],"2123":[2,4,16],"2124":[1,4,10],"2125":[2,4,8],"2126":[2,1,1],"2127":[2,2,9],"2128":[1,2,8],"2129":[2,2,8],"2130":[2,2,14],"2131":[2,2,9],"2132":[3,2,9],"2133":[2,2,10],"2134":[4,1,1],"2135":[1,4,9],"2136":[2,4,9],"2137":[2,4,7],"2138":[2,4,11],"2139":[4,1,1],"2140":[1,4,9],"2141":[2,4,15],"2142":[1,4,8],"2143":[1,4,7],"2144":[2,1,1],"2145":[1,2,5],"2146":[2,2,33],"2147":[3,2,27],"2148":[2,1,1],"2149":[1,2,5],"2150":[2,2,7],"2151":[2,2,27],"2152":[2,2,5],"2153":[2,1,1],"2154":[1,2,5],"2155":[2,2,8],"2156":[3,2,28],"2157":[2,2,28],"2158":[2,2,4],"2159":[3,1,1],"2160":[2,3,10],"2161":[1,3,12],"2162":[2,3,17],"2163":[2,3,11],"2164":[3,1,1],"2165":[2,3,15],"2166":[3,3,8],"2167":[3,3,14],"2168":[4,3,16],"2169":[2,1,1],"2170":[3,2,1],"2171":[2,3,13],"2172":[2,3,15],"2173":[2,3,13],"2174":[2,3,16],"2175":[2,2,14],"2176":[3,1,1],"2177":[2,3,29],"2178":[3,3,22],"2179":[5,3,20],"2180":[2,3,11],"2181":[3,3,15],"2182":[2,1,1],"2183":[3,2,1],"2184":[4,3,14],"2185":[4,3,14],"2186":[4,3,14],"2187":[3,3,12],"2188":[1,2,8],"2189":[3,1,1],"2190":[1,3,8],"2191":[2,3,1],"2192":[5,5,14],"2193":[3,5,18],"2194":[5,5,18],"2195":[4,5,19],"2196":[3,5,19],"2197":[4,5,13],"2198":[2,3,3],"2199":[5,1,1],"2200":[1,5,27],"2201":[2,5,5],"2202":[3,5,1],"2203":[5,7,1],"2204":[3,10,34],"2205":[4,10,32],"2206":[5,7,1],"2207":[4,11,19],"2208":[3,11,28],"2209":[4,11,34],"2210":[4,11,26],"2211":[4,7,1],"2212":[6,10,31],"2213":[4,7,1],"2214":[3,10,16],"2215":[5,7,1],"2216":[5,11,30],"2217":[4,7,1],"2218":[5,10,27],"2219":[3,7,1],"2220":[3,9,23],"2221":[3,9,22],"2222":[2,5,29],"2223":[2,5,1],"2224":[2,6,25],"2225":[2,6,21],"2226":[2,6,26],"2227":[2,5,7],"2228":[2,1,1],"2229":[1,2,6],"2230":[2,2,1],"2231":[3,4,26],"2232":[3,4,27],"2233":[4,4,34],"2234":[2,2,17],"2235":[2,2,5],"2236":[2,1,1],"2237":[1,2,8],"2238":[2,2,1],"2239":[4,4,9],"2240":[3,4,9],"2241":[3,4,17],"2242":[4,4,15],"2243":[4,4,11],"2244":[4,4,16],"2245":[3,4,9],"2246":[3,4,11],"2247":[3,4,15],"2248":[2,4,8],"2249":[3,4,9],"2250":[3,2,1],"2251":[2,4,13],"2252":[2,4,13],"2253":[2,4,13],"2254":[2,2,3],"2255":[2,1,1],"2256":[1,2,7],"2257":[2,2,1],"2258":[3,4,37],"2259":[4,4,16],"2260":[4,4,21],"2261":[6,4,25],"2262":[3,2,34],"2263":[2,2,5],"2264":[2,1,1],"2265":[1,2,7],"2266":[2,2,1],"2267":[3,4,29],"2268":[4,4,27],"2269":[2,2,34],"2270":[2,2,5],"2271":[2,1,1],"2272":[1,2,7],"2273":[2,2,1],"2274":[6,4,12],"2275":[3,4,14],"2276":[3,4,11],"2277":[3,4,11],"2278":[3,4,8],"2279":[4,4,13],"2280":[3,4,7],"2281":[4,4,10],"2282":[2,2,3],"2283":[2,1,1],"2284":[1,2,8],"2285":[2,2,5],"2286":[2,2,1],"2287":[4,4,28],"2288":[3,4,21],"2289":[2,4,7],"2290":[3,4,9],"2291":[2,4,4],"2292":[4,4,31],"2293":[2,2,14],"2294":[3,2,22],"2295":[1,2,19],"2296":[2,2,3],"2297":[2,1,1],"2298":[1,2,18],"2299":[2,2,6],"2300":[2,2,19],"2301":[5,2,1],"2302":[3,7,25],"2303":[4,7,19],"2304":[4,7,18],"2305":[3,7,19],"2306":[2,2,12],"2307":[2,2,1],"2308":[2,4,26],"2309":[2,4,23],"2310":[2,2,18],"2311":[2,2,7],"2312":[2,1,1],"2313":[1,2,7],"2314":[2,2,1],"2315":[3,4,7],"2316":[3,4,9],"2317":[3,4,8],"2318":[3,4,9],"2319":[6,4,12],"2320":[4,4,13],"2321":[2,2,1],"2322":[3,3,9],"2323":[4,3,9],"2324":[3,3,9],"2325":[2,2,3],"2326":[2,1,1],"2327":[1,2,6],"2328":[2,2,1],"2329":[3,4,11],"2330":[3,4,12],"2331":[3,4,10],"2332":[4,4,12],"2333":[3,2,34],"2334":[2,2,3]},"averageFieldLength":[2.4188436830835087,3.6132762312633835,14.155460385438973],"storedFields":{"0":{"title":"Runtime API Examples","titles":[]},"1":{"title":"Results","titles":["Runtime API Examples"]},"2":{"title":"Theme Data","titles":["Runtime API Examples","Results"]},"3":{"title":"Page Data","titles":["Runtime API Examples","Results"]},"4":{"title":"Page Frontmatter","titles":["Runtime API Examples","Results"]},"5":{"title":"More","titles":["Runtime API Examples"]},"6":{"title":"AI 서비스 API","titles":[]},"7":{"title":"기본 정보","titles":["AI 서비스 API"]},"8":{"title":"API 목록","titles":["AI 서비스 API"]},"9":{"title":"1. Gemini AI 호출","titles":["AI 서비스 API","API 목록"]},"10":{"title":"설정","titles":["AI 서비스 API"]},"11":{"title":"AI 설정 파일","titles":["AI 서비스 API","설정"]},"12":{"title":"주의사항","titles":["AI 서비스 API"]},"13":{"title":"다음 단계","titles":["AI 서비스 API"]},"14":{"title":"인증/토큰 API","titles":[]},"15":{"title":"기본 정보","titles":["인증/토큰 API"]},"16":{"title":"API 목록","titles":["인증/토큰 API"]},"17":{"title":"1. Access Token 재발급","titles":["인증/토큰 API","API 목록"]},"18":{"title":"토큰 정보","titles":["인증/토큰 API"]},"19":{"title":"Access Token","titles":["인증/토큰 API","토큰 정보"]},"20":{"title":"Refresh Token","titles":["인증/토큰 API","토큰 정보"]},"21":{"title":"UUID","titles":["인증/토큰 API","토큰 정보"]},"22":{"title":"에러 처리","titles":["인증/토큰 API"]},"23":{"title":"401 Unauthorized","titles":["인증/토큰 API","에러 처리"]},"24":{"title":"토큰 재발급 플로우","titles":["인증/토큰 API"]},"25":{"title":"주의사항","titles":["인증/토큰 API"]},"26":{"title":"다음 단계","titles":["인증/토큰 API"]},"27":{"title":"데이터베이스 프로시저 호출 API","titles":[]},"28":{"title":"기본 정보","titles":["데이터베이스 프로시저 호출 API"]},"29":{"title":"API 목록","titles":["데이터베이스 프로시저 호출 API"]},"30":{"title":"1. 단일 프로시저 실행","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"31":{"title":"2. 다중 프로시저 일괄 실행","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"32":{"title":"3. 다중 커서 결과 조회","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"33":{"title":"4. String 배열 파라미터 프로시저 호출","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"34":{"title":"5. 클라이언트 에러 로그 저장","titles":["데이터베이스 프로시저 호출 API","API 목록"]},"35":{"title":"프로시저 결과 구조","titles":["데이터베이스 프로시저 호출 API"]},"36":{"title":"커서 결과","titles":["데이터베이스 프로시저 호출 API","프로시저 결과 구조"]},"37":{"title":"에러 코드","titles":["데이터베이스 프로시저 호출 API","프로시저 결과 구조"]},"38":{"title":"주의사항","titles":["데이터베이스 프로시저 호출 API"]},"39":{"title":"다음 단계","titles":["데이터베이스 프로시저 호출 API"]},"40":{"title":"파일 관리 API","titles":[]},"41":{"title":"기본 정보","titles":["파일 관리 API"]},"42":{"title":"API 목록","titles":["파일 관리 API"]},"43":{"title":"1. 다중 파일/링크 업로드","titles":["파일 관리 API","API 목록"]},"44":{"title":"Form Data","titles":["파일 관리 API","API 목록","1. 다중 파일/링크 업로드"]},"45":{"title":"slist 구조 (JSON 문자열)","titles":["파일 관리 API","API 목록","1. 다중 파일/링크 업로드"]},"46":{"title":"2. 파일 다운로드","titles":["파일 관리 API","API 목록"]},"47":{"title":"파일 처리 규칙","titles":["파일 관리 API"]},"48":{"title":"파일 타입","titles":["파일 관리 API","파일 처리 규칙"]},"49":{"title":"변경 상태","titles":["파일 관리 API","파일 처리 규칙"]},"50":{"title":"파일명 규칙","titles":["파일 관리 API","파일 처리 규칙"]},"51":{"title":"주의사항","titles":["파일 관리 API"]},"52":{"title":"다음 단계","titles":["파일 관리 API"]},"53":{"title":"Redis 관리 API","titles":[]},"54":{"title":"기본 정보","titles":["Redis 관리 API"]},"55":{"title":"API 목록","titles":["Redis 관리 API"]},"56":{"title":"1. Redis Hash 데이터 조회","titles":["Redis 관리 API","API 목록"]},"57":{"title":"2. Redis Hash 데이터 삭제","titles":["Redis 관리 API","API 목록"]},"58":{"title":"Redis 데이터 구조","titles":["Redis 관리 API"]},"59":{"title":"토큰 저장 구조","titles":["Redis 관리 API","Redis 데이터 구조"]},"60":{"title":"주의사항","titles":["Redis 관리 API"]},"61":{"title":"다음 단계","titles":["Redis 관리 API"]},"62":{"title":"SMS 발송 API","titles":[]},"63":{"title":"기본 정보","titles":["SMS 발송 API"]},"64":{"title":"API 목록","titles":["SMS 발송 API"]},"65":{"title":"1. SMS 메시지 발송","titles":["SMS 발송 API","API 목록"]},"66":{"title":"params (필수)","titles":["SMS 발송 API","API 목록","1. SMS 메시지 발송"]},"67":{"title":"sessionInfo (필수)","titles":["SMS 발송 API","API 목록","1. SMS 메시지 발송"]},"68":{"title":"SMS 설정","titles":["SMS 발송 API"]},"69":{"title":"application-dev.yaml","titles":["SMS 발송 API","SMS 설정"]},"70":{"title":"메시지 상태","titles":["SMS 발송 API"]},"71":{"title":"주의사항","titles":["SMS 발송 API"]},"72":{"title":"다음 단계","titles":["SMS 발송 API"]},"73":{"title":"로그인/인증 API","titles":[]},"74":{"title":"기본 정보","titles":["로그인/인증 API"]},"75":{"title":"API 목록","titles":["로그인/인증 API"]},"76":{"title":"1. 일반 사용자 로그인","titles":["로그인/인증 API","API 목록"]},"77":{"title":"2. 관리자 로그인","titles":["로그인/인증 API","API 목록"]},"78":{"title":"3. 로그아웃","titles":["로그인/인증 API","API 목록"]},"79":{"title":"4. 세션 정리","titles":["로그인/인증 API","API 목록"]},"80":{"title":"5. 테스트 프로시저 호출","titles":["로그인/인증 API","API 목록"]},"81":{"title":"로그인 프로세스","titles":["로그인/인증 API"]},"82":{"title":"1. 로그인 요청","titles":["로그인/인증 API","로그인 프로세스"]},"83":{"title":"2. 토큰 발급","titles":["로그인/인증 API","로그인 프로세스"]},"84":{"title":"3. 토큰 저장","titles":["로그인/인증 API","로그인 프로세스"]},"85":{"title":"4. API 호출","titles":["로그인/인증 API","로그인 프로세스"]},"86":{"title":"5. 토큰 만료 시","titles":["로그인/인증 API","로그인 프로세스"]},"87":{"title":"주의사항","titles":["로그인/인증 API"]},"88":{"title":"다음 단계","titles":["로그인/인증 API"]},"89":{"title":"리포트 생성 API","titles":[]},"90":{"title":"기본 정보","titles":["리포트 생성 API"]},"91":{"title":"API 목록","titles":["리포트 생성 API"]},"92":{"title":"1. PDF 리포트 생성 (파일 저장)","titles":["리포트 생성 API","API 목록"]},"93":{"title":"필수 파라미터","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"94":{"title":"데이터 조회 파라미터","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"95":{"title":"복호화 파라미터","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"96":{"title":"리포트 파라미터 (jr_p_*)","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"97":{"title":"이미지 파라미터","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"98":{"title":"커서 변환 파라미터 (jr_convert_*)","titles":["리포트 생성 API","API 목록","1. PDF 리포트 생성 (파일 저장)"]},"99":{"title":"2. PDF 리포트 생성 (바이너리 반환)","titles":["리포트 생성 API","API 목록"]},"100":{"title":"3. 암호화된 PDF 생성","titles":["리포트 생성 API","API 목록"]},"101":{"title":"4. HTML 리포트 생성","titles":["리포트 생성 API","API 목록"]},"102":{"title":"5. Excel 리포트 다운로드","titles":["리포트 생성 API","API 목록"]},"103":{"title":"6. 생성된 PDF 파일 조회","titles":["리포트 생성 API","API 목록"]},"104":{"title":"리포트 파라미터 규칙","titles":["리포트 생성 API"]},"105":{"title":"커서 파라미터","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"106":{"title":"일반 파라미터","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"107":{"title":"이미지 파라미터","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"108":{"title":"서버 경로 이미지","titles":["리포트 생성 API","리포트 파라미터 규칙","이미지 파라미터"]},"109":{"title":"웹 경로 이미지","titles":["리포트 생성 API","리포트 파라미터 규칙","이미지 파라미터"]},"110":{"title":"커서 변환","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"111":{"title":"복호화","titles":["리포트 생성 API","리포트 파라미터 규칙"]},"112":{"title":"리포트 템플릿 위치","titles":["리포트 생성 API"]},"113":{"title":"한글 폰트","titles":["리포트 생성 API"]},"114":{"title":"주의사항","titles":["리포트 생성 API"]},"115":{"title":"다음 단계","titles":["리포트 생성 API"]},"116":{"title":"사용자 관리 API","titles":[]},"117":{"title":"기본 정보","titles":["사용자 관리 API"]},"118":{"title":"API 목록","titles":["사용자 관리 API"]},"119":{"title":"1. 사용자 이미지 조회","titles":["사용자 관리 API","API 목록"]},"120":{"title":"2. 즐겨찾기 목록 조회","titles":["사용자 관리 API","API 목록"]},"121":{"title":"3. 즐겨찾기 수정","titles":["사용자 관리 API","API 목록"]},"122":{"title":"파일 경로 설정","titles":["사용자 관리 API"]},"123":{"title":"주의사항","titles":["사용자 관리 API"]},"124":{"title":"다음 단계","titles":["사용자 관리 API"]},"125":{"title":"FCM 모듈 API","titles":[]},"126":{"title":"현재 상태","titles":["FCM 모듈 API"]},"127":{"title":"예정된 API","titles":["FCM 모듈 API"]},"128":{"title":"다음 단계","titles":["FCM 모듈 API"]},"129":{"title":"API 레퍼런스","titles":[]},"130":{"title":"API 개요","titles":["API 레퍼런스"]},"131":{"title":"공통 사항","titles":["API 레퍼런스"]},"132":{"title":"인증 방법","titles":["API 레퍼런스","공통 사항"]},"133":{"title":"Access Token 사용","titles":["API 레퍼런스","공통 사항","인증 방법"]},"134":{"title":"Refresh Token 사용","titles":["API 레퍼런스","공통 사항","인증 방법"]},"135":{"title":"공통 응답 형식","titles":["API 레퍼런스","공통 사항"]},"136":{"title":"성공 응답","titles":["API 레퍼런스","공통 사항","공통 응답 형식"]},"137":{"title":"실패 응답","titles":["API 레퍼런스","공통 사항","공통 응답 형식"]},"138":{"title":"HTTP 상태 코드","titles":["API 레퍼런스","공통 사항"]},"139":{"title":"요청 형식","titles":["API 레퍼런스","공통 사항"]},"140":{"title":"API 그룹별 링크","titles":["API 레퍼런스"]},"141":{"title":"공통 프레임워크 API","titles":["API 레퍼런스","API 그룹별 링크"]},"142":{"title":"ESS 모듈 API","titles":["API 레퍼런스","API 그룹별 링크"]},"143":{"title":"FCM 모듈 API","titles":["API 레퍼런스","API 그룹별 링크"]},"144":{"title":"Swagger UI","titles":["API 레퍼런스"]},"145":{"title":"다음 단계","titles":["API 레퍼런스"]},"146":{"title":"AI 서비스","titles":[]},"147":{"title":"설정","titles":["AI 서비스"]},"148":{"title":"ai-config.yaml","titles":["AI 서비스","설정"]},"149":{"title":"사용 예시","titles":["AI 서비스"]},"150":{"title":"API 엔드포인트","titles":["AI 서비스"]},"151":{"title":"다음 단계","titles":["AI 서비스"]},"152":{"title":"파일 처리","titles":[]},"153":{"title":"파일 업로드","titles":["파일 처리"]},"154":{"title":"MultipartFile 사용","titles":["파일 처리","파일 업로드"]},"155":{"title":"파일 크기 제한","titles":["파일 처리","파일 업로드"]},"156":{"title":"파일 다운로드","titles":["파일 처리"]},"157":{"title":"파일 유틸리티","titles":["파일 처리"]},"158":{"title":"AxpCommFileUtil","titles":["파일 처리","파일 유틸리티"]},"159":{"title":"다음 단계","titles":["파일 처리"]},"160":{"title":"로깅","titles":[]},"161":{"title":"로깅 어노테이션","titles":["로깅"]},"162":{"title":"@AxpCommLogAnnotation","titles":["로깅","로깅 어노테이션"]},"163":{"title":"로그 레벨","titles":["로깅"]},"164":{"title":"설정","titles":["로깅","로그 레벨"]},"165":{"title":"로그 파일","titles":["로깅","로그 레벨"]},"166":{"title":"Logback 설정","titles":["로깅"]},"167":{"title":"logback-spring.xml","titles":["로깅","Logback 설정"]},"168":{"title":"다음 단계","titles":["로깅"]},"169":{"title":"메일 발송","titles":[]},"170":{"title":"설정","titles":["메일 발송"]},"171":{"title":"application.yaml","titles":["메일 발송","설정"]},"172":{"title":"사용 예시","titles":["메일 발송"]},"173":{"title":"다음 단계","titles":["메일 발송"]},"174":{"title":"리포트 생성","titles":[]},"175":{"title":"개요","titles":["리포트 생성"]},"176":{"title":"리포트 생성 프로세스","titles":["리포트 생성"]},"177":{"title":"1. 리포트 템플릿 작성","titles":["리포트 생성","리포트 생성 프로세스"]},"178":{"title":"2. 데이터 조회","titles":["리포트 생성","리포트 생성 프로세스"]},"179":{"title":"3. 리포트 파라미터 설정","titles":["리포트 생성","리포트 생성 프로세스"]},"180":{"title":"4. 리포트 생성","titles":["리포트 생성","리포트 생성 프로세스"]},"181":{"title":"API 사용","titles":["리포트 생성"]},"182":{"title":"PDF 리포트 생성","titles":["리포트 생성","API 사용"]},"183":{"title":"Excel 리포트 다운로드","titles":["리포트 생성","API 사용"]},"184":{"title":"리포트 파라미터 규칙","titles":["리포트 생성"]},"185":{"title":"커서 파라미터","titles":["리포트 생성","리포트 파라미터 규칙"]},"186":{"title":"일반 파라미터","titles":["리포트 생성","리포트 파라미터 규칙"]},"187":{"title":"이미지 파라미터","titles":["리포트 생성","리포트 파라미터 규칙"]},"188":{"title":"서버 경로 이미지","titles":["리포트 생성","리포트 파라미터 규칙","이미지 파라미터"]},"189":{"title":"웹 경로 이미지","titles":["리포트 생성","리포트 파라미터 규칙","이미지 파라미터"]},"190":{"title":"커서 변환","titles":["리포트 생성","리포트 파라미터 규칙"]},"191":{"title":"복호화","titles":["리포트 생성","리포트 파라미터 규칙"]},"192":{"title":"한글 폰트","titles":["리포트 생성"]},"193":{"title":"폰트 위치","titles":["리포트 생성","한글 폰트"]},"194":{"title":"지원 폰트","titles":["리포트 생성","한글 폰트"]},"195":{"title":"폰트 설정","titles":["리포트 생성","한글 폰트"]},"196":{"title":"리포트 템플릿 작성","titles":["리포트 생성"]},"197":{"title":"기본 구조","titles":["리포트 생성","리포트 템플릿 작성"]},"198":{"title":"사용 예시","titles":["리포트 생성"]},"199":{"title":"서비스에서 리포트 생성","titles":["리포트 생성","사용 예시"]},"200":{"title":"주의사항","titles":["리포트 생성"]},"201":{"title":"다음 단계","titles":["리포트 생성"]},"202":{"title":"SMS 발송","titles":[]},"203":{"title":"설정","titles":["SMS 발송"]},"204":{"title":"application.yaml","titles":["SMS 발송","설정"]},"205":{"title":"사용 예시","titles":["SMS 발송"]},"206":{"title":"다음 단계","titles":["SMS 발송"]},"207":{"title":"보안 기능","titles":[]},"208":{"title":"개요","titles":["보안 기능"]},"209":{"title":"암호화 유틸리티","titles":["보안 기능"]},"210":{"title":"AES-128","titles":["보안 기능","암호화 유틸리티"]},"211":{"title":"RSA","titles":["보안 기능","암호화 유틸리티"]},"212":{"title":"해시 함수","titles":["보안 기능","암호화 유틸리티"]},"213":{"title":"MD5","titles":["보안 기능","암호화 유틸리티","해시 함수"]},"214":{"title":"SHA-256","titles":["보안 기능","암호화 유틸리티","해시 함수"]},"215":{"title":"XSS 방지","titles":["보안 기능"]},"216":{"title":"AxpXssFilter","titles":["보안 기능","XSS 방지"]},"217":{"title":"AxpXssUtil","titles":["보안 기능","XSS 방지"]},"218":{"title":"JWT 인증","titles":["보안 기능"]},"219":{"title":"AxpCommAuthService","titles":["보안 기능","JWT 인증"]},"220":{"title":"AxpJwtAuthenticationFilter","titles":["보안 기능","JWT 인증"]},"221":{"title":"Spring Security 통합","titles":["보안 기능"]},"222":{"title":"AxpSecurityConfig","titles":["보안 기능","Spring Security 통합"]},"223":{"title":"복호화 필터","titles":["보안 기능"]},"224":{"title":"AxpDecryptFilter","titles":["보안 기능","복호화 필터"]},"225":{"title":"보안 정책 파일","titles":["보안 기능"]},"226":{"title":"antisamy-policy.xml","titles":["보안 기능","보안 정책 파일"]},"227":{"title":"사용 예시","titles":["보안 기능"]},"228":{"title":"개인정보 암호화","titles":["보안 기능","사용 예시"]},"229":{"title":"리포트 생성 시 복호화","titles":["보안 기능","사용 예시"]},"230":{"title":"주의사항","titles":["보안 기능"]},"231":{"title":"다음 단계","titles":["보안 기능"]},"232":{"title":"애플리케이션 설정","titles":[]},"233":{"title":"설정 파일 위치","titles":["애플리케이션 설정"]},"234":{"title":"기본 설정 (application.yaml)","titles":["애플리케이션 설정"]},"235":{"title":"서버 설정","titles":["애플리케이션 설정"]},"236":{"title":"포트 및 컨텍스트","titles":["애플리케이션 설정","서버 설정"]},"237":{"title":"JWT 설정","titles":["애플리케이션 설정"]},"238":{"title":"RSA 설정","titles":["애플리케이션 설정"]},"239":{"title":"CORS 설정","titles":["애플리케이션 설정"]},"240":{"title":"Security 설정","titles":["애플리케이션 설정"]},"241":{"title":"제외 URI","titles":["애플리케이션 설정","Security 설정"]},"242":{"title":"파일 업로드 설정","titles":["애플리케이션 설정"]},"243":{"title":"파일 경로 설정","titles":["애플리케이션 설정"]},"244":{"title":"로깅 설정","titles":["애플리케이션 설정"]},"245":{"title":"다음 단계","titles":["애플리케이션 설정"]},"246":{"title":"유틸리티 클래스","titles":[]},"247":{"title":"AxpCommUtil","titles":["유틸리티 클래스"]},"248":{"title":"주요 메서드","titles":["유틸리티 클래스","AxpCommUtil"]},"249":{"title":"AxpCommValidationUtil","titles":["유틸리티 클래스"]},"250":{"title":"AxpCommPaging","titles":["유틸리티 클래스"]},"251":{"title":"다음 단계","titles":["유틸리티 클래스"]},"252":{"title":"데이터소스 설정","titles":[]},"253":{"title":"데이터베이스 타입 설정","titles":["데이터소스 설정"]},"254":{"title":"Tibero 설정","titles":["데이터소스 설정"]},"255":{"title":"기본 설정","titles":["데이터소스 설정","Tibero 설정"]},"256":{"title":"HikariCP 설정","titles":["데이터소스 설정","Tibero 설정"]},"257":{"title":"Oracle 설정","titles":["데이터소스 설정"]},"258":{"title":"PostgreSQL 설정","titles":["데이터소스 설정"]},"259":{"title":"AxpDataSourceConfig","titles":["데이터소스 설정"]},"260":{"title":"조건부 빈 생성","titles":["데이터소스 설정","AxpDataSourceConfig"]},"261":{"title":"생성되는 Bean","titles":["데이터소스 설정","AxpDataSourceConfig"]},"262":{"title":"MyBatis 설정","titles":["데이터소스 설정"]},"263":{"title":"DB별 설정 파일","titles":["데이터소스 설정","MyBatis 설정"]},"264":{"title":"매퍼 파일 스캔","titles":["데이터소스 설정","MyBatis 설정"]},"265":{"title":"다음 단계","titles":["데이터소스 설정"]},"266":{"title":"Maven 설정","titles":[]},"267":{"title":"pom.xml 구조","titles":["Maven 설정"]},"268":{"title":"기본 정보","titles":["Maven 설정","pom.xml 구조"]},"269":{"title":"Spring Boot Parent","titles":["Maven 설정","pom.xml 구조"]},"270":{"title":"Java 버전","titles":["Maven 설정","pom.xml 구조"]},"271":{"title":"프로파일 설정","titles":["Maven 설정"]},"272":{"title":"프로파일 정의","titles":["Maven 설정","프로파일 설정"]},"273":{"title":"프로파일 사용","titles":["Maven 설정","프로파일 설정"]},"274":{"title":"주요 의존성","titles":["Maven 설정"]},"275":{"title":"Spring Boot Starters","titles":["Maven 설정","주요 의존성"]},"276":{"title":"데이터베이스","titles":["Maven 설정","주요 의존성"]},"277":{"title":"기타","titles":["Maven 설정","주요 의존성"]},"278":{"title":"빌드 플러그인","titles":["Maven 설정"]},"279":{"title":"Spring Boot Maven Plugin","titles":["Maven 설정","빌드 플러그인"]},"280":{"title":"Maven War Plugin","titles":["Maven 설정","빌드 플러그인"]},"281":{"title":"빌드 명령어","titles":["Maven 설정"]},"282":{"title":"개발 환경 빌드","titles":["Maven 설정","빌드 명령어"]},"283":{"title":"WAR 파일 생성","titles":["Maven 설정","빌드 명령어"]},"284":{"title":"테스트 제외 빌드","titles":["Maven 설정","빌드 명령어"]},"285":{"title":"다음 단계","titles":["Maven 설정"]},"286":{"title":"Redis 설정","titles":[]},"287":{"title":"Redis 연결 설정","titles":["Redis 설정"]},"288":{"title":"application-dev.yaml","titles":["Redis 설정","Redis 연결 설정"]},"289":{"title":"AxpRedisConfig","titles":["Redis 설정"]},"290":{"title":"캐시용 Redis","titles":["Redis 설정","AxpRedisConfig"]},"291":{"title":"비즈니스 컴포넌트용 Redis","titles":["Redis 설정","AxpRedisConfig"]},"292":{"title":"RedisTemplate","titles":["Redis 설정"]},"293":{"title":"캐시용 RedisTemplate","titles":["Redis 설정","RedisTemplate"]},"294":{"title":"비즈니스 컴포넌트용 RedisTemplate","titles":["Redis 설정","RedisTemplate"]},"295":{"title":"직렬화 설정","titles":["Redis 설정"]},"296":{"title":"Key 직렬화","titles":["Redis 설정","직렬화 설정"]},"297":{"title":"Value 직렬화","titles":["Redis 설정","직렬화 설정"]},"298":{"title":"Redis 사용 예시","titles":["Redis 설정"]},"299":{"title":"토큰 저장","titles":["Redis 설정","Redis 사용 예시"]},"300":{"title":"토큰 조회","titles":["Redis 설정","Redis 사용 예시"]},"301":{"title":"토큰 삭제","titles":["Redis 설정","Redis 사용 예시"]},"302":{"title":"다음 단계","titles":["Redis 설정"]},"303":{"title":"공통 DB 서비스","titles":[]},"304":{"title":"AxpCommDbService","titles":["공통 DB 서비스"]},"305":{"title":"사용 예시","titles":["공통 DB 서비스","AxpCommDbService"]},"306":{"title":"지원 데이터베이스","titles":["공통 DB 서비스","AxpCommDbService"]},"307":{"title":"AxpCommRedisDbService","titles":["공통 DB 서비스"]},"308":{"title":"토큰 저장","titles":["공통 DB 서비스","AxpCommRedisDbService"]},"309":{"title":"토큰 조회","titles":["공통 DB 서비스","AxpCommRedisDbService"]},"310":{"title":"토큰 삭제","titles":["공통 DB 서비스","AxpCommRedisDbService"]},"311":{"title":"Hash 데이터 조회","titles":["공통 DB 서비스","AxpCommRedisDbService"]},"312":{"title":"AxpCommDbAdapterService","titles":["공통 DB 서비스"]},"313":{"title":"사용 예시","titles":["공통 DB 서비스","AxpCommDbAdapterService"]},"314":{"title":"다음 단계","titles":["공통 DB 서비스"]},"315":{"title":"Mapper 작성 가이드","titles":[]},"316":{"title":"Mapper 인터페이스","titles":["Mapper 작성 가이드"]},"317":{"title":"기본 구조","titles":["Mapper 작성 가이드","Mapper 인터페이스"]},"318":{"title":"XML 매퍼 파일","titles":["Mapper 작성 가이드"]},"319":{"title":"파일 위치","titles":["Mapper 작성 가이드","XML 매퍼 파일"]},"320":{"title":"기본 구조","titles":["Mapper 작성 가이드","XML 매퍼 파일"]},"321":{"title":"프로시저 호출","titles":["Mapper 작성 가이드"]},"322":{"title":"Tibero/Oracle","titles":["Mapper 작성 가이드","프로시저 호출"]},"323":{"title":"PostgreSQL","titles":["Mapper 작성 가이드","프로시저 호출"]},"324":{"title":"동적 SQL","titles":["Mapper 작성 가이드"]},"325":{"title":"if","titles":["Mapper 작성 가이드","동적 SQL"]},"326":{"title":"foreach","titles":["Mapper 작성 가이드","동적 SQL"]},"327":{"title":"다음 단계","titles":["Mapper 작성 가이드"]},"328":{"title":"MyBatis 설정","titles":[]},"329":{"title":"MapperScan 설정","titles":["MyBatis 설정"]},"330":{"title":"DB별 설정 파일","titles":["MyBatis 설정"]},"331":{"title":"매퍼 파일 위치","titles":["MyBatis 설정"]},"332":{"title":"Mapper 인터페이스 작성","titles":["MyBatis 설정"]},"333":{"title":"XML 매퍼 작성","titles":["MyBatis 설정"]},"334":{"title":"프로시저 호출","titles":["MyBatis 설정"]},"335":{"title":"Tibero","titles":["MyBatis 설정","프로시저 호출"]},"336":{"title":"Oracle","titles":["MyBatis 설정","프로시저 호출"]},"337":{"title":"PostgreSQL","titles":["MyBatis 설정","프로시저 호출"]},"338":{"title":"다음 단계","titles":["MyBatis 설정"]},"339":{"title":"Maven 빌드","titles":[]},"340":{"title":"개발 환경 빌드","titles":["Maven 빌드"]},"341":{"title":"WAR 파일 생성","titles":["Maven 빌드"]},"342":{"title":"다음 단계","titles":["Maven 빌드"]},"343":{"title":"배포 설정","titles":[]},"344":{"title":"Tomcat 배포","titles":["배포 설정"]},"345":{"title":"다음 단계","titles":["배포 설정"]},"346":{"title":"REST API 설계 규칙","titles":[]},"347":{"title":"URL 패턴","titles":["REST API 설계 규칙"]},"348":{"title":"HTTP 메서드","titles":["REST API 설계 규칙"]},"349":{"title":"요청 형식","titles":["REST API 설계 규칙"]},"350":{"title":"응답 형식","titles":["REST API 설계 규칙"]},"351":{"title":"성공","titles":["REST API 설계 규칙","응답 형식"]},"352":{"title":"실패","titles":["REST API 설계 규칙","응답 형식"]},"353":{"title":"다음 단계","titles":["REST API 설계 규칙"]},"354":{"title":"인증/인가 처리","titles":[]},"355":{"title":"JWT 토큰 사용","titles":["인증/인가 처리"]},"356":{"title":"Authorization 헤더","titles":["인증/인가 처리","JWT 토큰 사용"]},"357":{"title":"쿠키","titles":["인증/인가 처리","JWT 토큰 사용"]},"358":{"title":"제외 URI 설정","titles":["인증/인가 처리"]},"359":{"title":"다음 단계","titles":["인증/인가 처리"]},"360":{"title":"설정 파일 추가","titles":[]},"361":{"title":"환경별 설정","titles":["설정 파일 추가"]},"362":{"title":"application-dev.yaml","titles":["설정 파일 추가","환경별 설정"]},"363":{"title":"다음 단계","titles":["설정 파일 추가"]},"364":{"title":"새로운 모듈 추가","titles":[]},"365":{"title":"개요","titles":["새로운 모듈 추가"]},"366":{"title":"모듈 추가 프로세스","titles":["새로운 모듈 추가"]},"367":{"title":"1단계: 모듈 구조 설계","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"368":{"title":"2단계: 패키지 구조 생성","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"369":{"title":"3단계: 애플리케이션 설정","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"370":{"title":"ComponentScan 추가","titles":["새로운 모듈 추가","모듈 추가 프로세스","3단계: 애플리케이션 설정"]},"371":{"title":"MapperScan 추가","titles":["새로운 모듈 추가","모듈 추가 프로세스","3단계: 애플리케이션 설정"]},"372":{"title":"4단계: 클래스 작성","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"373":{"title":"5단계: 리소스 파일 생성","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"374":{"title":"XML 매퍼 파일","titles":["새로운 모듈 추가","모듈 추가 프로세스","5단계: 리소스 파일 생성"]},"375":{"title":"6단계: 설정 파일 추가","titles":["새로운 모듈 추가","모듈 추가 프로세스"]},"376":{"title":"표준 패키지 구조","titles":["새로운 모듈 추가"]},"377":{"title":"전체 구조","titles":["새로운 모듈 추가","표준 패키지 구조"]},"378":{"title":"계층별 역할","titles":["새로운 모듈 추가","표준 패키지 구조"]},"379":{"title":"Controller","titles":["새로운 모듈 추가","표준 패키지 구조","계층별 역할"]},"380":{"title":"Service","titles":["새로운 모듈 추가","표준 패키지 구조","계층별 역할"]},"381":{"title":"Mapper","titles":["새로운 모듈 추가","표준 패키지 구조","계층별 역할"]},"382":{"title":"개발 가이드","titles":["새로운 모듈 추가"]},"383":{"title":"1. 모듈 생성 절차","titles":["새로운 모듈 추가","개발 가이드"]},"384":{"title":"2. 컨트롤러 작성","titles":["새로운 모듈 추가","개발 가이드"]},"385":{"title":"3. 서비스 작성","titles":["새로운 모듈 추가","개발 가이드"]},"386":{"title":"4. Mapper 작성","titles":["새로운 모듈 추가","개발 가이드"]},"387":{"title":"5. 설정 파일 추가","titles":["새로운 모듈 추가","개발 가이드"]},"388":{"title":"실제 예시: ESS 모듈 구조","titles":["새로운 모듈 추가"]},"389":{"title":"공통 프레임워크 활용","titles":["새로운 모듈 추가"]},"390":{"title":"데이터베이스","titles":["새로운 모듈 추가","공통 프레임워크 활용"]},"391":{"title":"인증/보안","titles":["새로운 모듈 추가","공통 프레임워크 활용"]},"392":{"title":"유틸리티","titles":["새로운 모듈 추가","공통 프레임워크 활용"]},"393":{"title":"API 설계 규칙","titles":["새로운 모듈 추가"]},"394":{"title":"인증/인가 처리","titles":["새로운 모듈 추가"]},"395":{"title":"Swagger 문서화","titles":["새로운 모듈 추가"]},"396":{"title":"체크리스트","titles":["새로운 모듈 추가"]},"397":{"title":"다음 단계","titles":["새로운 모듈 추가"]},"398":{"title":"참고 자료","titles":["새로운 모듈 추가"]},"399":{"title":"컨트롤러 작성","titles":[]},"400":{"title":"기본 구조","titles":["컨트롤러 작성"]},"401":{"title":"응답 형식","titles":["컨트롤러 작성"]},"402":{"title":"성공","titles":["컨트롤러 작성","응답 형식"]},"403":{"title":"실패","titles":["컨트롤러 작성","응답 형식"]},"404":{"title":"다음 단계","titles":["컨트롤러 작성"]},"405":{"title":"모듈 생성 절차","titles":[]},"406":{"title":"1. 패키지 구조 생성","titles":["모듈 생성 절차"]},"407":{"title":"2. ComponentScan 추가","titles":["모듈 생성 절차"]},"408":{"title":"3. MapperScan 추가","titles":["모듈 생성 절차"]},"409":{"title":"4. XML 매퍼 파일 생성","titles":["모듈 생성 절차"]},"410":{"title":"다음 단계","titles":["모듈 생성 절차"]},"411":{"title":"Mapper 작성","titles":[]},"412":{"title":"인터페이스","titles":["Mapper 작성"]},"413":{"title":"XML 매퍼","titles":["Mapper 작성"]},"414":{"title":"파일 위치","titles":["Mapper 작성"]},"415":{"title":"다음 단계","titles":["Mapper 작성"]},"416":{"title":"서비스 작성","titles":[]},"417":{"title":"기본 구조","titles":["서비스 작성"]},"418":{"title":"프로시저 호출","titles":["서비스 작성"]},"419":{"title":"다음 단계","titles":["서비스 작성"]},"420":{"title":"Swagger/OpenAPI 문서화","titles":[]},"421":{"title":"어노테이션 추가","titles":["Swagger/OpenAPI 문서화"]},"422":{"title":"접근 URL","titles":["Swagger/OpenAPI 문서화"]},"423":{"title":"다음 단계","titles":["Swagger/OpenAPI 문서화"]},"424":{"title":"프로젝트 개요","titles":[]},"425":{"title":"AxpFramework 소개","titles":["프로젝트 개요"]},"426":{"title":"주요 특징","titles":["프로젝트 개요"]},"427":{"title":"1. 다중 데이터베이스 지원","titles":["프로젝트 개요","주요 특징"]},"428":{"title":"2. 통합 보안 기능","titles":["프로젝트 개요","주요 특징"]},"429":{"title":"3. 공통 기능 제공","titles":["프로젝트 개요","주요 특징"]},"430":{"title":"4. Redis 캐싱","titles":["프로젝트 개요","주요 특징"]},"431":{"title":"5. 모듈화된 구조","titles":["프로젝트 개요","주요 특징"]},"432":{"title":"프로젝트 목적","titles":["프로젝트 개요"]},"433":{"title":"기술 스택 요약","titles":["프로젝트 개요"]},"434":{"title":"프로젝트 구조","titles":["프로젝트 개요"]},"435":{"title":"다음 단계","titles":["프로젝트 개요"]},"436":{"title":"프로젝트 구조","titles":[]},"437":{"title":"전체 디렉토리 구조","titles":["프로젝트 구조"]},"438":{"title":"Java 소스 코드 구조","titles":["프로젝트 구조"]},"439":{"title":"1. 공통 프레임워크 모듈 (axpFramework)","titles":["프로젝트 구조","Java 소스 코드 구조"]},"440":{"title":"2. ESS 비즈니스 모듈 (ess)","titles":["프로젝트 구조","Java 소스 코드 구조"]},"441":{"title":"3. FCM 비즈니스 모듈 (fcm)","titles":["프로젝트 구조","Java 소스 코드 구조"]},"442":{"title":"리소스 파일 구조","titles":["프로젝트 구조"]},"443":{"title":"1. 설정 파일 (resources/config/)","titles":["프로젝트 구조","리소스 파일 구조"]},"444":{"title":"2. MyBatis 매퍼 (resources/mapper/)","titles":["프로젝트 구조","리소스 파일 구조"]},"445":{"title":"3. MyBatis 설정 (resources/mapper-config/)","titles":["프로젝트 구조","리소스 파일 구조"]},"446":{"title":"4. 리포트 템플릿 (resources/report/)","titles":["프로젝트 구조","리소스 파일 구조"]},"447":{"title":"패키지 네이밍 규칙","titles":["프로젝트 구조"]},"448":{"title":"1. 표준 패키지 구조","titles":["프로젝트 구조","패키지 네이밍 규칙"]},"449":{"title":"2. 네이밍 규칙","titles":["프로젝트 구조","패키지 네이밍 규칙"]},"450":{"title":"주요 파일 설명","titles":["프로젝트 구조"]},"451":{"title":"1. AxpBootApplication.java","titles":["프로젝트 구조","주요 파일 설명"]},"452":{"title":"2. pom.xml","titles":["프로젝트 구조","주요 파일 설명"]},"453":{"title":"3. application.yaml","titles":["프로젝트 구조","주요 파일 설명"]},"454":{"title":"모듈 간 의존성","titles":["프로젝트 구조"]},"455":{"title":"새로운 모듈 추가 시 구조","titles":["프로젝트 구조"]},"456":{"title":"다음 단계","titles":["프로젝트 구조"]},"457":{"title":"시스템 요구사항","titles":[]},"458":{"title":"필수 요구사항","titles":["시스템 요구사항"]},"459":{"title":"1. Java 개발 환경","titles":["시스템 요구사항","필수 요구사항"]},"460":{"title":"2. 빌드 도구","titles":["시스템 요구사항","필수 요구사항"]},"461":{"title":"3. 데이터베이스","titles":["시스템 요구사항","필수 요구사항"]},"462":{"title":"Tibero6 (기본값)","titles":["시스템 요구사항","필수 요구사항","3. 데이터베이스"]},"463":{"title":"Oracle","titles":["시스템 요구사항","필수 요구사항","3. 데이터베이스"]},"464":{"title":"PostgreSQL","titles":["시스템 요구사항","필수 요구사항","3. 데이터베이스"]},"465":{"title":"4. Redis (Valkey 호환)","titles":["시스템 요구사항","필수 요구사항"]},"466":{"title":"5. IDE (선택사항)","titles":["시스템 요구사항","필수 요구사항"]},"467":{"title":"선택적 요구사항","titles":["시스템 요구사항"]},"468":{"title":"1. 외부 Tomcat 서버","titles":["시스템 요구사항","선택적 요구사항"]},"469":{"title":"2. 개발 도구","titles":["시스템 요구사항","선택적 요구사항"]},"470":{"title":"운영 환경 요구사항","titles":["시스템 요구사항"]},"471":{"title":"서버 사양 (권장)","titles":["시스템 요구사항","운영 환경 요구사항"]},"472":{"title":"네트워크","titles":["시스템 요구사항","운영 환경 요구사항"]},"473":{"title":"환경별 설정","titles":["시스템 요구사항"]},"474":{"title":"다음 단계","titles":["시스템 요구사항"]},"475":{"title":"개발 환경 설정","titles":[]},"476":{"title":"1. 프로젝트 클론 및 준비","titles":["개발 환경 설정"]},"477":{"title":"1.1 프로젝트 다운로드","titles":["개발 환경 설정","1. 프로젝트 클론 및 준비"]},"478":{"title":"1.2 프로젝트 구조 확인","titles":["개발 환경 설정","1. 프로젝트 클론 및 준비"]},"479":{"title":"2. 데이터베이스 설정","titles":["개발 환경 설정"]},"480":{"title":"2.1 데이터베이스 선택","titles":["개발 환경 설정","2. 데이터베이스 설정"]},"481":{"title":"2.2 설정 파일 수정","titles":["개발 환경 설정","2. 데이터베이스 설정"]},"482":{"title":"Tibero 설정 예시","titles":["개발 환경 설정","2. 데이터베이스 설정","2.2 설정 파일 수정"]},"483":{"title":"Oracle 설정 예시","titles":["개발 환경 설정","2. 데이터베이스 설정","2.2 설정 파일 수정"]},"484":{"title":"PostgreSQL 설정 예시","titles":["개발 환경 설정","2. 데이터베이스 설정","2.2 설정 파일 수정"]},"485":{"title":"2.3 Tibero JDBC 드라이버 확인","titles":["개발 환경 설정","2. 데이터베이스 설정"]},"486":{"title":"3. Redis 설정","titles":["개발 환경 설정"]},"487":{"title":"3.1 Redis 설치 및 실행","titles":["개발 환경 설정","3. Redis 설정"]},"488":{"title":"Windows","titles":["개발 환경 설정","3. Redis 설정","3.1 Redis 설치 및 실행"]},"489":{"title":"Linux/Mac","titles":["개발 환경 설정","3. Redis 설정","3.1 Redis 설치 및 실행"]},"490":{"title":"3.2 Redis 설정 파일 수정","titles":["개발 환경 설정","3. Redis 설정"]},"491":{"title":"4. 애플리케이션 설정","titles":["개발 환경 설정"]},"492":{"title":"4.1 JWT 시크릿 키 설정","titles":["개발 환경 설정","4. 애플리케이션 설정"]},"493":{"title":"4.2 CORS 설정","titles":["개발 환경 설정","4. 애플리케이션 설정"]},"494":{"title":"4.3 파일 경로 설정","titles":["개발 환경 설정","4. 애플리케이션 설정"]},"495":{"title":"5. 프로젝트 빌드","titles":["개발 환경 설정"]},"496":{"title":"5.1 Maven 의존성 다운로드","titles":["개발 환경 설정","5. 프로젝트 빌드"]},"497":{"title":"5.2 빌드 확인","titles":["개발 환경 설정","5. 프로젝트 빌드"]},"498":{"title":"6. 애플리케이션 실행","titles":["개발 환경 설정"]},"499":{"title":"6.1 IDE에서 실행","titles":["개발 환경 설정","6. 애플리케이션 실행"]},"500":{"title":"IntelliJ IDEA","titles":["개발 환경 설정","6. 애플리케이션 실행","6.1 IDE에서 실행"]},"501":{"title":"Eclipse","titles":["개발 환경 설정","6. 애플리케이션 실행","6.1 IDE에서 실행"]},"502":{"title":"6.2 Maven으로 실행","titles":["개발 환경 설정","6. 애플리케이션 실행"]},"503":{"title":"6.3 WAR 파일로 실행","titles":["개발 환경 설정","6. 애플리케이션 실행"]},"504":{"title":"7. 애플리케이션 확인","titles":["개발 환경 설정"]},"505":{"title":"7.1 서버 시작 확인","titles":["개발 환경 설정","7. 애플리케이션 확인"]},"506":{"title":"7.2 API 확인","titles":["개발 환경 설정","7. 애플리케이션 확인"]},"507":{"title":"7.3 로그 확인","titles":["개발 환경 설정","7. 애플리케이션 확인"]},"508":{"title":"8. 문제 해결","titles":["개발 환경 설정"]},"509":{"title":"8.1 포트 충돌","titles":["개발 환경 설정","8. 문제 해결"]},"510":{"title":"8.2 데이터베이스 연결 실패","titles":["개발 환경 설정","8. 문제 해결"]},"511":{"title":"8.3 Redis 연결 실패","titles":["개발 환경 설정","8. 문제 해결"]},"512":{"title":"다음 단계","titles":["개발 환경 설정"]},"513":{"title":"AXP Framework Dev Docs","titles":[]},"514":{"title":"이 문서는 무엇인가요?","titles":["AXP Framework Dev Docs"]},"515":{"title":"처음 온 개발자를 위한 3단계","titles":["AXP Framework Dev Docs"]},"516":{"title":"핵심 아키텍처 빠른 링크","titles":["AXP Framework Dev Docs"]},"517":{"title":"공통 기능 사용 가이드","titles":["AXP Framework Dev Docs"]},"518":{"title":"새 모듈을 만들 때 추천 흐름","titles":["AXP Framework Dev Docs"]},"519":{"title":"기술 스택 개요","titles":["AXP Framework Dev Docs"]},"520":{"title":"환경 설정 가이드","titles":["AXP Framework Dev Docs"]},"521":{"title":"API 레퍼런스","titles":["AXP Framework Dev Docs"]},"522":{"title":"문제 해결","titles":["AXP Framework Dev Docs"]},"523":{"title":"참고 자료","titles":["AXP Framework Dev Docs"]},"524":{"title":"비즈니스 모듈 구조","titles":[]},"525":{"title":"표준 패키지 구조","titles":["비즈니스 모듈 구조"]},"526":{"title":"ESS 모듈","titles":["비즈니스 모듈 구조"]},"527":{"title":"구조","titles":["비즈니스 모듈 구조","ESS 모듈"]},"528":{"title":"주요 기능","titles":["비즈니스 모듈 구조","ESS 모듈"]},"529":{"title":"1. 인증 (auth/)","titles":["비즈니스 모듈 구조","ESS 모듈","주요 기능"]},"530":{"title":"2. 공통 기능 (com/)","titles":["비즈니스 모듈 구조","ESS 모듈","주요 기능"]},"531":{"title":"3. 관리자 (admin/)","titles":["비즈니스 모듈 구조","ESS 모듈","주요 기능"]},"532":{"title":"4. 복지 (welfare/)","titles":["비즈니스 모듈 구조","ESS 모듈","주요 기능"]},"533":{"title":"FCM 모듈","titles":["비즈니스 모듈 구조"]},"534":{"title":"구조","titles":["비즈니스 모듈 구조","FCM 모듈"]},"535":{"title":"주요 기능","titles":["비즈니스 모듈 구조","FCM 모듈"]},"536":{"title":"1. 공통 기능 (com/)","titles":["비즈니스 모듈 구조","FCM 모듈","주요 기능"]},"537":{"title":"2. HRI (hri/)","titles":["비즈니스 모듈 구조","FCM 모듈","주요 기능"]},"538":{"title":"3. 시스템 (sys/)","titles":["비즈니스 모듈 구조","FCM 모듈","주요 기능"]},"539":{"title":"컨트롤러 작성 규칙","titles":["비즈니스 모듈 구조"]},"540":{"title":"기본 구조","titles":["비즈니스 모듈 구조","컨트롤러 작성 규칙"]},"541":{"title":"응답 형식","titles":["비즈니스 모듈 구조","컨트롤러 작성 규칙"]},"542":{"title":"서비스 작성 규칙","titles":["비즈니스 모듈 구조"]},"543":{"title":"기본 구조","titles":["비즈니스 모듈 구조","서비스 작성 규칙"]},"544":{"title":"Mapper 작성 규칙","titles":["비즈니스 모듈 구조"]},"545":{"title":"인터페이스","titles":["비즈니스 모듈 구조","Mapper 작성 규칙"]},"546":{"title":"XML 매퍼","titles":["비즈니스 모듈 구조","Mapper 작성 규칙"]},"547":{"title":"다음 단계","titles":["비즈니스 모듈 구조"]},"548":{"title":"전체 디렉토리 구조","titles":[]},"549":{"title":"루트 디렉토리 구조","titles":["전체 디렉토리 구조"]},"550":{"title":"소스 코드 디렉토리 구조","titles":["전체 디렉토리 구조"]},"551":{"title":"main 디렉토리","titles":["전체 디렉토리 구조","소스 코드 디렉토리 구조"]},"552":{"title":"test 디렉토리","titles":["전체 디렉토리 구조","소스 코드 디렉토리 구조"]},"553":{"title":"Java 소스 코드 구조","titles":["전체 디렉토리 구조"]},"554":{"title":"1. 공통 프레임워크 모듈 (axpFramework/)","titles":["전체 디렉토리 구조","Java 소스 코드 구조"]},"555":{"title":"2. ESS 비즈니스 모듈 (ess/)","titles":["전체 디렉토리 구조","Java 소스 코드 구조"]},"556":{"title":"3. FCM 비즈니스 모듈 (fcm/)","titles":["전체 디렉토리 구조","Java 소스 코드 구조"]},"557":{"title":"빌드 결과물 디렉토리","titles":["전체 디렉토리 구조"]},"558":{"title":"로그 디렉토리","titles":["전체 디렉토리 구조"]},"559":{"title":"디렉토리 역할 설명","titles":["전체 디렉토리 구조"]},"560":{"title":"src/main/java/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"561":{"title":"src/main/resources/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"562":{"title":"src/test/java/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"563":{"title":"target/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"564":{"title":"logs/","titles":["전체 디렉토리 구조","디렉토리 역할 설명"]},"565":{"title":"패키지 네이밍 규칙","titles":["전체 디렉토리 구조"]},"566":{"title":"다음 단계","titles":["전체 디렉토리 구조"]},"567":{"title":"공통 프레임워크 모듈","titles":[]},"568":{"title":"모듈 구조","titles":["공통 프레임워크 모듈"]},"569":{"title":"주요 모듈 설명","titles":["공통 프레임워크 모듈"]},"570":{"title":"1. AI 서비스 (ai/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"571":{"title":"2. 공통 기능 (common/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"572":{"title":"2.1 Controller (common/controller/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"573":{"title":"2.2 Database (common/database/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"574":{"title":"2.3 Logging (common/logging/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"575":{"title":"2.4 Security (common/security/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"576":{"title":"2.5 Token (common/token/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"577":{"title":"2.6 Utils (common/utils/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","2. 공통 기능 (common/)"]},"578":{"title":"3. 설정 클래스 (config/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"579":{"title":"3.1 AxpDataSourceConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"580":{"title":"3.2 AxpRedisConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"581":{"title":"3.3 AxpSecurityConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"582":{"title":"3.4 AxpWebConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"583":{"title":"3.5 AxpFilterConfig","titles":["공통 프레임워크 모듈","주요 모듈 설명","3. 설정 클래스 (config/)"]},"584":{"title":"4. 필터 (filter/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"585":{"title":"4.1 Auth Filter (filter/auth/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","4. 필터 (filter/)"]},"586":{"title":"4.2 Logging Filter (filter/logging/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","4. 필터 (filter/)"]},"587":{"title":"4.3 Security Filter (filter/security/)","titles":["공통 프레임워크 모듈","주요 모듈 설명","4. 필터 (filter/)"]},"588":{"title":"5. 파일 관리 (file/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"589":{"title":"6. 메일 발송 (mail/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"590":{"title":"7. 리포트 생성 (report/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"591":{"title":"8. SMS 발송 (sms/)","titles":["공통 프레임워크 모듈","주요 모듈 설명"]},"592":{"title":"공통 기능 사용법","titles":["공통 프레임워크 모듈"]},"593":{"title":"프로시저 호출","titles":["공통 프레임워크 모듈","공통 기능 사용법"]},"594":{"title":"Redis 사용","titles":["공통 프레임워크 모듈","공통 기능 사용법"]},"595":{"title":"암호화","titles":["공통 프레임워크 모듈","공통 기능 사용법"]},"596":{"title":"다음 단계","titles":["공통 프레임워크 모듈"]},"597":{"title":"AI 서비스 모듈","titles":[]},"598":{"title":"모듈 구조","titles":["AI 서비스 모듈"]},"599":{"title":"주요 클래스","titles":["AI 서비스 모듈"]},"600":{"title":"1. AxpAiController","titles":["AI 서비스 모듈","주요 클래스"]},"601":{"title":"2. AxpGeminiService","titles":["AI 서비스 모듈","주요 클래스"]},"602":{"title":"3. AxpAiService","titles":["AI 서비스 모듈","주요 클래스"]},"603":{"title":"설정","titles":["AI 서비스 모듈"]},"604":{"title":"AI 설정 파일","titles":["AI 서비스 모듈","설정"]},"605":{"title":"application.yaml 설정","titles":["AI 서비스 모듈","설정"]},"606":{"title":"API 엔드포인트","titles":["AI 서비스 모듈"]},"607":{"title":"POST /api/ai/genai","titles":["AI 서비스 모듈","API 엔드포인트"]},"608":{"title":"사용 방법","titles":["AI 서비스 모듈"]},"609":{"title":"1. 서비스에서 직접 사용","titles":["AI 서비스 모듈","사용 방법"]},"610":{"title":"2. 컨트롤러에서 사용","titles":["AI 서비스 모듈","사용 방법"]},"611":{"title":"의존성","titles":["AI 서비스 모듈"]},"612":{"title":"Maven 의존성","titles":["AI 서비스 모듈","의존성"]},"613":{"title":"주의사항","titles":["AI 서비스 모듈"]},"614":{"title":"다음 단계","titles":["AI 서비스 모듈"]},"615":{"title":"설정 클래스 모듈","titles":[]},"616":{"title":"모듈 구조","titles":["설정 클래스 모듈"]},"617":{"title":"주요 설정 클래스","titles":["설정 클래스 모듈"]},"618":{"title":"1. AxpDataSourceConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"619":{"title":"2. AxpRedisConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"620":{"title":"3. AxpSecurityConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"621":{"title":"4. AxpWebConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"622":{"title":"5. AxpFilterConfig","titles":["설정 클래스 모듈","주요 설정 클래스"]},"623":{"title":"6. AxpMyBatisResultInterceptor","titles":["설정 클래스 모듈","주요 설정 클래스"]},"624":{"title":"설정 파일 위치","titles":["설정 클래스 모듈"]},"625":{"title":"application.yaml","titles":["설정 클래스 모듈","설정 파일 위치"]},"626":{"title":"환경별 설정 파일","titles":["설정 클래스 모듈","설정 파일 위치"]},"627":{"title":"설정 우선순위","titles":["설정 클래스 모듈"]},"628":{"title":"다음 단계","titles":["설정 클래스 모듈"]},"629":{"title":"공통 기능 모듈","titles":[]},"630":{"title":"모듈 구조","titles":["공통 기능 모듈"]},"631":{"title":"주요 클래스","titles":["공통 기능 모듈"]},"632":{"title":"1. AxpBaseWebController","titles":["공통 기능 모듈","주요 클래스"]},"633":{"title":"2. AxpCommDbService","titles":["공통 기능 모듈","주요 클래스"]},"634":{"title":"3. AxpCommRedisDbService","titles":["공통 기능 모듈","주요 클래스"]},"635":{"title":"4. AxpCommAuthService","titles":["공통 기능 모듈","주요 클래스"]},"636":{"title":"5. AxpCommUtil","titles":["공통 기능 모듈","주요 클래스"]},"637":{"title":"6. 암호화 유틸리티","titles":["공통 기능 모듈","주요 클래스"]},"638":{"title":"AxpCommAES128","titles":["공통 기능 모듈","주요 클래스","6. 암호화 유틸리티"]},"639":{"title":"AxpCommRsa","titles":["공통 기능 모듈","주요 클래스","6. 암호화 유틸리티"]},"640":{"title":"AxpCommMD5Util","titles":["공통 기능 모듈","주요 클래스","6. 암호화 유틸리티"]},"641":{"title":"AxpCommSHA256Util","titles":["공통 기능 모듈","주요 클래스","6. 암호화 유틸리티"]},"642":{"title":"공통 상수","titles":["공통 기능 모듈"]},"643":{"title":"AxpCommConst","titles":["공통 기능 모듈","공통 상수"]},"644":{"title":"다음 단계","titles":["공통 기능 모듈"]},"645":{"title":"파일 관리 모듈","titles":[]},"646":{"title":"모듈 구조","titles":["파일 관리 모듈"]},"647":{"title":"주요 클래스","titles":["파일 관리 모듈"]},"648":{"title":"1. AxpFileController","titles":["파일 관리 모듈","주요 클래스"]},"649":{"title":"2. AxpFileService","titles":["파일 관리 모듈","주요 클래스"]},"650":{"title":"파일 처리 프로세스","titles":["파일 관리 모듈"]},"651":{"title":"1. 파일 업로드","titles":["파일 관리 모듈","파일 처리 프로세스"]},"652":{"title":"2. 파일 다운로드","titles":["파일 관리 모듈","파일 처리 프로세스"]},"653":{"title":"파일 타입","titles":["파일 관리 모듈"]},"654":{"title":"FILE_TYPE","titles":["파일 관리 모듈","파일 타입"]},"655":{"title":"변경 상태","titles":["파일 관리 모듈","파일 타입"]},"656":{"title":"원본 상태","titles":["파일 관리 모듈","파일 타입"]},"657":{"title":"설정","titles":["파일 관리 모듈"]},"658":{"title":"application.yaml","titles":["파일 관리 모듈","설정"]},"659":{"title":"파일명 규칙","titles":["파일 관리 모듈"]},"660":{"title":"서버 저장 파일명","titles":["파일 관리 모듈","파일명 규칙"]},"661":{"title":"원본 파일명","titles":["파일 관리 모듈","파일명 규칙"]},"662":{"title":"사용 예시","titles":["파일 관리 모듈"]},"663":{"title":"파일 업로드","titles":["파일 관리 모듈","사용 예시"]},"664":{"title":"파일 다운로드","titles":["파일 관리 모듈","사용 예시"]},"665":{"title":"주의사항","titles":["파일 관리 모듈"]},"666":{"title":"다음 단계","titles":["파일 관리 모듈"]},"667":{"title":"필터 클래스 모듈","titles":[]},"668":{"title":"모듈 구조","titles":["필터 클래스 모듈"]},"669":{"title":"주요 필터","titles":["필터 클래스 모듈"]},"670":{"title":"1. AxpXssFilter","titles":["필터 클래스 모듈","주요 필터"]},"671":{"title":"2. AxpDecryptFilter","titles":["필터 클래스 모듈","주요 필터"]},"672":{"title":"3. AxpJwtAuthenticationFilter","titles":["필터 클래스 모듈","주요 필터"]},"673":{"title":"4. AxpCorsLoggingFilter","titles":["필터 클래스 모듈","주요 필터"]},"674":{"title":"필터 등록","titles":["필터 클래스 모듈"]},"675":{"title":"AxpFilterConfig","titles":["필터 클래스 모듈","필터 등록"]},"676":{"title":"필터 실행 순서","titles":["필터 클래스 모듈"]},"677":{"title":"XSS 유틸리티","titles":["필터 클래스 모듈"]},"678":{"title":"AxpXssUtil","titles":["필터 클래스 모듈","XSS 유틸리티"]},"679":{"title":"보안 정책 파일","titles":["필터 클래스 모듈"]},"680":{"title":"antisamy-policy.xml","titles":["필터 클래스 모듈","보안 정책 파일"]},"681":{"title":"주의사항","titles":["필터 클래스 모듈"]},"682":{"title":"다음 단계","titles":["필터 클래스 모듈"]},"683":{"title":"메일 발송 모듈","titles":[]},"684":{"title":"모듈 구조","titles":["메일 발송 모듈"]},"685":{"title":"주요 클래스","titles":["메일 발송 모듈"]},"686":{"title":"1. AxpMailController","titles":["메일 발송 모듈","주요 클래스"]},"687":{"title":"2. AxpMailService","titles":["메일 발송 모듈","주요 클래스"]},"688":{"title":"3. AxpCommMailUtil","titles":["메일 발송 모듈","주요 클래스"]},"689":{"title":"Spring Mail 설정","titles":["메일 발송 모듈"]},"690":{"title":"application.yaml","titles":["메일 발송 모듈","Spring Mail 설정"]},"691":{"title":"사용 방법","titles":["메일 발송 모듈"]},"692":{"title":"1. JavaMailSender 사용","titles":["메일 발송 모듈","사용 방법"]},"693":{"title":"2. HTML 이메일 발송","titles":["메일 발송 모듈","사용 방법"]},"694":{"title":"3. 첨부 파일 포함","titles":["메일 발송 모듈","사용 방법"]},"695":{"title":"메일 템플릿","titles":["메일 발송 모듈"]},"696":{"title":"Thymeleaf 템플릿 사용 (선택적)","titles":["메일 발송 모듈","메일 템플릿"]},"697":{"title":"공통 유틸리티","titles":["메일 발송 모듈"]},"698":{"title":"AxpCommMailUtil","titles":["메일 발송 모듈","공통 유틸리티"]},"699":{"title":"주의사항","titles":["메일 발송 모듈"]},"700":{"title":"다음 단계","titles":["메일 발송 모듈"]},"701":{"title":"리포트 생성 모듈","titles":[]},"702":{"title":"모듈 구조","titles":["리포트 생성 모듈"]},"703":{"title":"주요 클래스","titles":["리포트 생성 모듈"]},"704":{"title":"1. AxpReportController","titles":["리포트 생성 모듈","주요 클래스"]},"705":{"title":"2. AxpReportService","titles":["리포트 생성 모듈","주요 클래스"]},"706":{"title":"리포트 생성 프로세스","titles":["리포트 생성 모듈"]},"707":{"title":"1. 데이터 조회","titles":["리포트 생성 모듈","리포트 생성 프로세스"]},"708":{"title":"2. 리포트 파라미터 설정","titles":["리포트 생성 모듈","리포트 생성 프로세스"]},"709":{"title":"3. 리포트 컴파일 및 생성","titles":["리포트 생성 모듈","리포트 생성 프로세스"]},"710":{"title":"4. PDF 내보내기","titles":["리포트 생성 모듈","리포트 생성 프로세스"]},"711":{"title":"리포트 템플릿 위치","titles":["리포트 생성 모듈"]},"712":{"title":"리포트 파라미터 규칙","titles":["리포트 생성 모듈"]},"713":{"title":"커서 파라미터","titles":["리포트 생성 모듈","리포트 파라미터 규칙"]},"714":{"title":"일반 파라미터","titles":["리포트 생성 모듈","리포트 파라미터 규칙"]},"715":{"title":"이미지 파라미터","titles":["리포트 생성 모듈","리포트 파라미터 규칙"]},"716":{"title":"커서 변환","titles":["리포트 생성 모듈","리포트 파라미터 규칙"]},"717":{"title":"한글 폰트","titles":["리포트 생성 모듈"]},"718":{"title":"지원 폰트","titles":["리포트 생성 모듈","한글 폰트"]},"719":{"title":"폰트 위치","titles":["리포트 생성 모듈","한글 폰트"]},"720":{"title":"사용 예시","titles":["리포트 생성 모듈"]},"721":{"title":"PDF 리포트 생성","titles":["리포트 생성 모듈","사용 예시"]},"722":{"title":"Excel 리포트 다운로드","titles":["리포트 생성 모듈","사용 예시"]},"723":{"title":"주의사항","titles":["리포트 생성 모듈"]},"724":{"title":"다음 단계","titles":["리포트 생성 모듈"]},"725":{"title":"SMS 발송 모듈","titles":[]},"726":{"title":"모듈 구조","titles":["SMS 발송 모듈"]},"727":{"title":"주요 클래스","titles":["SMS 발송 모듈"]},"728":{"title":"1. AxpSmsController","titles":["SMS 발송 모듈","주요 클래스"]},"729":{"title":"2. AxpSmsService","titles":["SMS 발송 모듈","주요 클래스"]},"730":{"title":"SMS 발송 프로세스","titles":["SMS 발송 모듈"]},"731":{"title":"1. 발송 정보 저장","titles":["SMS 발송 모듈","SMS 발송 프로세스"]},"732":{"title":"2. KT CPaaS API 호출","titles":["SMS 발송 모듈","SMS 발송 프로세스"]},"733":{"title":"발송 타입","titles":["SMS 발송 모듈"]},"734":{"title":"rev_type","titles":["SMS 발송 모듈","발송 타입"]},"735":{"title":"rev_type_value","titles":["SMS 발송 모듈","발송 타입"]},"736":{"title":"메시지 타입","titles":["SMS 발송 모듈"]},"737":{"title":"msg_type","titles":["SMS 발송 모듈","메시지 타입"]},"738":{"title":"메시지 상태","titles":["SMS 발송 모듈"]},"739":{"title":"설정","titles":["SMS 발송 모듈"]},"740":{"title":"application.yaml","titles":["SMS 발송 모듈","설정"]},"741":{"title":"사용 예시","titles":["SMS 발송 모듈"]},"742":{"title":"즉시 발송","titles":["SMS 발송 모듈","사용 예시"]},"743":{"title":"예약 발송","titles":["SMS 발송 모듈","사용 예시"]},"744":{"title":"주의사항","titles":["SMS 발송 모듈"]},"745":{"title":"다음 단계","titles":["SMS 발송 모듈"]},"746":{"title":"리소스 파일 구조","titles":[]},"747":{"title":"디렉토리 구조","titles":["리소스 파일 구조"]},"748":{"title":"설정 파일","titles":["리소스 파일 구조"]},"749":{"title":"1. application.yaml","titles":["리소스 파일 구조","설정 파일"]},"750":{"title":"2. config/ 디렉토리","titles":["리소스 파일 구조","설정 파일"]},"751":{"title":"MyBatis 매퍼","titles":["리소스 파일 구조"]},"752":{"title":"mapper/ 디렉토리","titles":["리소스 파일 구조","MyBatis 매퍼"]},"753":{"title":"매퍼 파일 구조","titles":["리소스 파일 구조","MyBatis 매퍼"]},"754":{"title":"mapper-config/ 디렉토리","titles":["리소스 파일 구조","MyBatis 매퍼"]},"755":{"title":"리포트 템플릿","titles":["리소스 파일 구조"]},"756":{"title":"report/ 디렉토리","titles":["리소스 파일 구조","리포트 템플릿"]},"757":{"title":"리포트 템플릿 작성","titles":["리소스 파일 구조","리포트 템플릿"]},"758":{"title":"외부 라이브러리","titles":["리소스 파일 구조"]},"759":{"title":"lib/ 디렉토리","titles":["리소스 파일 구조","외부 라이브러리"]},"760":{"title":"보안 정책 파일","titles":["리소스 파일 구조"]},"761":{"title":"antisamy-policy.xml","titles":["리소스 파일 구조","보안 정책 파일"]},"762":{"title":"로깅 설정","titles":["리소스 파일 구조"]},"763":{"title":"logback-spring.xml","titles":["리소스 파일 구조","로깅 설정"]},"764":{"title":"배너","titles":["리소스 파일 구조"]},"765":{"title":"banner.txt","titles":["리소스 파일 구조","배너"]},"766":{"title":"다음 단계","titles":["리소스 파일 구조"]},"767":{"title":"주요 클래스 참조","titles":[]},"768":{"title":"공통 컨트롤러","titles":["주요 클래스 참조"]},"769":{"title":"공통 서비스","titles":["주요 클래스 참조"]},"770":{"title":"설정 클래스","titles":["주요 클래스 참조"]},"771":{"title":"다음 단계","titles":["주요 클래스 참조"]},"772":{"title":"설정 파일 참조","titles":[]},"773":{"title":"설정 파일","titles":["설정 파일 참조"]},"774":{"title":"MyBatis 설정","titles":["설정 파일 참조"]},"775":{"title":"다음 단계","titles":["설정 파일 참조"]},"776":{"title":"외부 라이브러리 문서","titles":[]},"777":{"title":"Spring Boot","titles":["외부 라이브러리 문서"]},"778":{"title":"MyBatis","titles":["외부 라이브러리 문서"]},"779":{"title":"Spring Security","titles":["외부 라이브러리 문서"]},"780":{"title":"JWT","titles":["외부 라이브러리 문서"]},"781":{"title":"JasperReports","titles":["외부 라이브러리 문서"]},"782":{"title":"Apache POI","titles":["외부 라이브러리 문서"]},"783":{"title":"Redis","titles":["외부 라이브러리 문서"]},"784":{"title":"암호화 유틸리티","titles":[]},"785":{"title":"AES-128","titles":["암호화 유틸리티"]},"786":{"title":"사용 예시","titles":["암호화 유틸리티","AES-128"]},"787":{"title":"용도","titles":["암호화 유틸리티","AES-128"]},"788":{"title":"RSA","titles":["암호화 유틸리티"]},"789":{"title":"사용 예시","titles":["암호화 유틸리티","RSA"]},"790":{"title":"설정","titles":["암호화 유틸리티","RSA"]},"791":{"title":"해시 함수","titles":["암호화 유틸리티"]},"792":{"title":"MD5","titles":["암호화 유틸리티","해시 함수"]},"793":{"title":"SHA-256","titles":["암호화 유틸리티","해시 함수"]},"794":{"title":"다음 단계","titles":["암호화 유틸리티"]},"795":{"title":"보안 필터","titles":[]},"796":{"title":"필터 실행 순서","titles":["보안 필터"]},"797":{"title":"XSS 필터","titles":["보안 필터"]},"798":{"title":"AxpXssFilter","titles":["보안 필터","XSS 필터"]},"799":{"title":"설정","titles":["보안 필터","XSS 필터"]},"800":{"title":"복호화 필터","titles":["보안 필터"]},"801":{"title":"AxpDecryptFilter","titles":["보안 필터","복호화 필터"]},"802":{"title":"JWT 인증 필터","titles":["보안 필터"]},"803":{"title":"AxpJwtAuthenticationFilter","titles":["보안 필터","JWT 인증 필터"]},"804":{"title":"Rate Limiting","titles":["보안 필터","JWT 인증 필터"]},"805":{"title":"CORS 로깅 필터","titles":["보안 필터"]},"806":{"title":"AxpCorsLoggingFilter","titles":["보안 필터","CORS 로깅 필터"]},"807":{"title":"다음 단계","titles":["보안 필터"]},"808":{"title":"JWT 인증","titles":[]},"809":{"title":"토큰 타입","titles":["JWT 인증"]},"810":{"title":"Access Token","titles":["JWT 인증","토큰 타입"]},"811":{"title":"Refresh Token","titles":["JWT 인증","토큰 타입"]},"812":{"title":"토큰 생성","titles":["JWT 인증"]},"813":{"title":"토큰 검증","titles":["JWT 인증"]},"814":{"title":"토큰 재발급","titles":["JWT 인증"]},"815":{"title":"API 엔드포인트","titles":["JWT 인증","토큰 재발급"]},"816":{"title":"요청","titles":["JWT 인증","토큰 재발급"]},"817":{"title":"응답","titles":["JWT 인증","토큰 재발급"]},"818":{"title":"Redis 토큰 저장","titles":["JWT 인증"]},"819":{"title":"다음 단계","titles":["JWT 인증"]},"820":{"title":"Spring Security 설정","titles":[]},"821":{"title":"SecurityFilterChain","titles":["Spring Security 설정"]},"822":{"title":"기본 설정","titles":["Spring Security 설정","SecurityFilterChain"]},"823":{"title":"제외 URI 설정","titles":["Spring Security 설정","SecurityFilterChain"]},"824":{"title":"보안 헤더","titles":["Spring Security 설정"]},"825":{"title":"Content-Security-Policy","titles":["Spring Security 설정","보안 헤더"]},"826":{"title":"X-Frame-Options","titles":["Spring Security 설정","보안 헤더"]},"827":{"title":"기타 보안 헤더","titles":["Spring Security 설정","보안 헤더"]},"828":{"title":"예외 처리","titles":["Spring Security 설정"]},"829":{"title":"AccessDeniedHandler","titles":["Spring Security 설정","예외 처리"]},"830":{"title":"AuthenticationEntryPoint","titles":["Spring Security 설정","예외 처리"]},"831":{"title":"다음 단계","titles":["Spring Security 설정"]},"832":{"title":"데이터베이스","titles":[]},"833":{"title":"지원 데이터베이스","titles":["데이터베이스"]},"834":{"title":"1. Tibero6 (기본값)","titles":["데이터베이스","지원 데이터베이스"]},"835":{"title":"2. Oracle","titles":["데이터베이스","지원 데이터베이스"]},"836":{"title":"3. PostgreSQL","titles":["데이터베이스","지원 데이터베이스"]},"837":{"title":"데이터소스 설정","titles":["데이터베이스"]},"838":{"title":"AxpDataSourceConfig","titles":["데이터베이스","데이터소스 설정"]},"839":{"title":"HikariCP 커넥션 풀","titles":["데이터베이스"]},"840":{"title":"Tibero 설정","titles":["데이터베이스","HikariCP 커넥션 풀"]},"841":{"title":"PostgreSQL 설정","titles":["데이터베이스","HikariCP 커넥션 풀"]},"842":{"title":"MyBatis 설정","titles":["데이터베이스"]},"843":{"title":"DB별 설정 파일","titles":["데이터베이스","MyBatis 설정"]},"844":{"title":"매퍼 파일 위치","titles":["데이터베이스","MyBatis 설정"]},"845":{"title":"프로시저 호출","titles":["데이터베이스"]},"846":{"title":"공통 프로시저 호출 서비스","titles":["데이터베이스","프로시저 호출"]},"847":{"title":"DB별 프로시저 호출","titles":["데이터베이스","프로시저 호출"]},"848":{"title":"Redis (Valkey 호환)","titles":["데이터베이스"]},"849":{"title":"용도","titles":["데이터베이스","Redis (Valkey 호환)"]},"850":{"title":"설정","titles":["데이터베이스","Redis (Valkey 호환)"]},"851":{"title":"RedisTemplate","titles":["데이터베이스","Redis (Valkey 호환)"]},"852":{"title":"다음 단계","titles":["데이터베이스"]},"853":{"title":"문서화 및 API","titles":[]},"854":{"title":"Springdoc OpenAPI","titles":["문서화 및 API"]},"855":{"title":"버전","titles":["문서화 및 API","Springdoc OpenAPI"]},"856":{"title":"기능","titles":["문서화 및 API","Springdoc OpenAPI"]},"857":{"title":"접근 URL","titles":["문서화 및 API","Springdoc OpenAPI"]},"858":{"title":"API 문서 자동 생성","titles":["문서화 및 API"]},"859":{"title":"컨트롤러 어노테이션","titles":["문서화 및 API","API 문서 자동 생성"]},"860":{"title":"주요 어노테이션","titles":["문서화 및 API","API 문서 자동 생성"]},"861":{"title":"@Tag","titles":["문서화 및 API","API 문서 자동 생성","주요 어노테이션"]},"862":{"title":"@Operation","titles":["문서화 및 API","API 문서 자동 생성","주요 어노테이션"]},"863":{"title":"@Parameter","titles":["문서화 및 API","API 문서 자동 생성","주요 어노테이션"]},"864":{"title":"@ApiResponse","titles":["문서화 및 API","API 문서 자동 생성","주요 어노테이션"]},"865":{"title":"OpenAPI 스펙","titles":["문서화 및 API"]},"866":{"title":"JSON 형식","titles":["문서화 및 API","OpenAPI 스펙"]},"867":{"title":"YAML 형식","titles":["문서화 및 API","OpenAPI 스펙"]},"868":{"title":"문서 커스터마이징","titles":["문서화 및 API"]},"869":{"title":"기본 정보 설정","titles":["문서화 및 API","문서 커스터마이징"]},"870":{"title":"그룹 설정","titles":["문서화 및 API","문서 커스터마이징"]},"871":{"title":"API 테스트","titles":["문서화 및 API"]},"872":{"title":"Swagger UI에서 테스트","titles":["문서화 및 API","API 테스트"]},"873":{"title":"인증 설정","titles":["문서화 및 API","API 테스트"]},"874":{"title":"다음 단계","titles":["문서화 및 API"]},"875":{"title":"파일 처리","titles":[]},"876":{"title":"Apache POI","titles":["파일 처리"]},"877":{"title":"버전","titles":["파일 처리","Apache POI"]},"878":{"title":"기능","titles":["파일 처리","Apache POI"]},"879":{"title":"사용 예시","titles":["파일 처리","Apache POI"]},"880":{"title":"JXLS","titles":["파일 처리"]},"881":{"title":"버전","titles":["파일 처리","JXLS"]},"882":{"title":"기능","titles":["파일 처리","JXLS"]},"883":{"title":"사용 예시","titles":["파일 처리","JXLS"]},"884":{"title":"JasperReports","titles":["파일 처리"]},"885":{"title":"버전","titles":["파일 처리","JasperReports"]},"886":{"title":"기능","titles":["파일 처리","JasperReports"]},"887":{"title":"리포트 템플릿","titles":["파일 처리","JasperReports"]},"888":{"title":"리포트 생성","titles":["파일 처리","JasperReports"]},"889":{"title":"한글 폰트 설정","titles":["파일 처리","JasperReports"]},"890":{"title":"파일 업로드","titles":["파일 처리"]},"891":{"title":"MultipartFile","titles":["파일 처리","파일 업로드"]},"892":{"title":"파일 크기 제한","titles":["파일 처리","파일 업로드"]},"893":{"title":"파일 다운로드","titles":["파일 처리"]},"894":{"title":"ResponseEntity 사용","titles":["파일 처리","파일 다운로드"]},"895":{"title":"파일 유틸리티","titles":["파일 처리"]},"896":{"title":"AxpCommFileUtil","titles":["파일 처리","파일 유틸리티"]},"897":{"title":"MIME 타입 감지","titles":["파일 처리"]},"898":{"title":"jmimemagic","titles":["파일 처리","MIME 타입 감지"]},"899":{"title":"다음 단계","titles":["파일 처리"]},"900":{"title":"프레임워크 및 라이브러리","titles":[]},"901":{"title":"Spring Boot","titles":["프레임워크 및 라이브러리"]},"902":{"title":"버전","titles":["프레임워크 및 라이브러리","Spring Boot"]},"903":{"title":"주요 모듈","titles":["프레임워크 및 라이브러리","Spring Boot"]},"904":{"title":"Spring Boot Starter Web","titles":["프레임워크 및 라이브러리","Spring Boot","주요 모듈"]},"905":{"title":"Spring Boot Starter AOP","titles":["프레임워크 및 라이브러리","Spring Boot","주요 모듈"]},"906":{"title":"Spring Session","titles":["프레임워크 및 라이브러리","Spring Boot","주요 모듈"]},"907":{"title":"MyBatis","titles":["프레임워크 및 라이브러리"]},"908":{"title":"버전","titles":["프레임워크 및 라이브러리","MyBatis"]},"909":{"title":"특징","titles":["프레임워크 및 라이브러리","MyBatis"]},"910":{"title":"설정","titles":["프레임워크 및 라이브러리","MyBatis"]},"911":{"title":"Lombok","titles":["프레임워크 및 라이브러리"]},"912":{"title":"버전","titles":["프레임워크 및 라이브러리","Lombok"]},"913":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","Lombok"]},"914":{"title":"사용 예시","titles":["프레임워크 및 라이브러리","Lombok"]},"915":{"title":"Spring Security","titles":["프레임워크 및 라이브러리"]},"916":{"title":"버전","titles":["프레임워크 및 라이브러리","Spring Security"]},"917":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","Spring Security"]},"918":{"title":"설정 위치","titles":["프레임워크 및 라이브러리","Spring Security"]},"919":{"title":"Springdoc OpenAPI","titles":["프레임워크 및 라이브러리"]},"920":{"title":"버전","titles":["프레임워크 및 라이브러리","Springdoc OpenAPI"]},"921":{"title":"기능","titles":["프레임워크 및 라이브러리","Springdoc OpenAPI"]},"922":{"title":"Jackson","titles":["프레임워크 및 라이브러리"]},"923":{"title":"기능","titles":["프레임워크 및 라이브러리","Jackson"]},"924":{"title":"설정","titles":["프레임워크 및 라이브러리","Jackson"]},"925":{"title":"Apache Commons","titles":["프레임워크 및 라이브러리"]},"926":{"title":"주요 라이브러리","titles":["프레임워크 및 라이브러리","Apache Commons"]},"927":{"title":"Commons IO","titles":["프레임워크 및 라이브러리","Apache Commons","주요 라이브러리"]},"928":{"title":"Commons Codec","titles":["프레임워크 및 라이브러리","Apache Commons","주요 라이브러리"]},"929":{"title":"Commons Lang3","titles":["프레임워크 및 라이브러리","Apache Commons","주요 라이브러리"]},"930":{"title":"JWT (JSON Web Token)","titles":["프레임워크 및 라이브러리"]},"931":{"title":"버전","titles":["프레임워크 및 라이브러리","JWT (JSON Web Token)"]},"932":{"title":"모듈","titles":["프레임워크 및 라이브러리","JWT (JSON Web Token)"]},"933":{"title":"사용 예시","titles":["프레임워크 및 라이브러리","JWT (JSON Web Token)"]},"934":{"title":"OWASP AntiSamy","titles":["프레임워크 및 라이브러리"]},"935":{"title":"버전","titles":["프레임워크 및 라이브러리","OWASP AntiSamy"]},"936":{"title":"기능","titles":["프레임워크 및 라이브러리","OWASP AntiSamy"]},"937":{"title":"다음 단계","titles":["프레임워크 및 라이브러리"]},"938":{"title":"기타 유틸리티","titles":[]},"939":{"title":"Jsoup","titles":["기타 유틸리티"]},"940":{"title":"버전","titles":["기타 유틸리티","Jsoup"]},"941":{"title":"기능","titles":["기타 유틸리티","Jsoup"]},"942":{"title":"사용 예시","titles":["기타 유틸리티","Jsoup"]},"943":{"title":"JUniversalCharDet","titles":["기타 유틸리티"]},"944":{"title":"버전","titles":["기타 유틸리티","JUniversalCharDet"]},"945":{"title":"기능","titles":["기타 유틸리티","JUniversalCharDet"]},"946":{"title":"사용 예시","titles":["기타 유틸리티","JUniversalCharDet"]},"947":{"title":"Google GenAI SDK","titles":["기타 유틸리티"]},"948":{"title":"버전","titles":["기타 유틸리티","Google GenAI SDK"]},"949":{"title":"기능","titles":["기타 유틸리티","Google GenAI SDK"]},"950":{"title":"사용 예시","titles":["기타 유틸리티","Google GenAI SDK"]},"951":{"title":"Commons BeanUtils","titles":["기타 유틸리티"]},"952":{"title":"버전","titles":["기타 유틸리티","Commons BeanUtils"]},"953":{"title":"기능","titles":["기타 유틸리티","Commons BeanUtils"]},"954":{"title":"사용 예시","titles":["기타 유틸리티","Commons BeanUtils"]},"955":{"title":"Commons Collections","titles":["기타 유틸리티"]},"956":{"title":"버전","titles":["기타 유틸리티","Commons Collections"]},"957":{"title":"기능","titles":["기타 유틸리티","Commons Collections"]},"958":{"title":"사용 예시","titles":["기타 유틸리티","Commons Collections"]},"959":{"title":"다음 단계","titles":["기타 유틸리티"]},"960":{"title":"보안 및 인증","titles":[]},"961":{"title":"JWT (JSON Web Token)","titles":["보안 및 인증"]},"962":{"title":"버전","titles":["보안 및 인증","JWT (JSON Web Token)"]},"963":{"title":"토큰 타입","titles":["보안 및 인증","JWT (JSON Web Token)"]},"964":{"title":"Access Token","titles":["보안 및 인증","JWT (JSON Web Token)","토큰 타입"]},"965":{"title":"Refresh Token","titles":["보안 및 인증","JWT (JSON Web Token)","토큰 타입"]},"966":{"title":"토큰 생성","titles":["보안 및 인증","JWT (JSON Web Token)"]},"967":{"title":"토큰 검증","titles":["보안 및 인증","JWT (JSON Web Token)"]},"968":{"title":"설정","titles":["보안 및 인증","JWT (JSON Web Token)"]},"969":{"title":"Spring Security","titles":["보안 및 인증"]},"970":{"title":"SecurityFilterChain","titles":["보안 및 인증","Spring Security"]},"971":{"title":"제외 URI 설정","titles":["보안 및 인증","Spring Security"]},"972":{"title":"JWT 제외 URI 설정","titles":["보안 및 인증","Spring Security"]},"973":{"title":"JWT 인증 필터","titles":["보안 및 인증"]},"974":{"title":"AxpJwtAuthenticationFilter","titles":["보안 및 인증","JWT 인증 필터"]},"975":{"title":"Rate Limiting","titles":["보안 및 인증","JWT 인증 필터"]},"976":{"title":"암호화","titles":["보안 및 인증"]},"977":{"title":"AES-128","titles":["보안 및 인증","암호화"]},"978":{"title":"RSA","titles":["보안 및 인증","암호화"]},"979":{"title":"해시 함수","titles":["보안 및 인증","암호화"]},"980":{"title":"MD5","titles":["보안 및 인증","암호화","해시 함수"]},"981":{"title":"SHA-256","titles":["보안 및 인증","암호화","해시 함수"]},"982":{"title":"XSS 방지","titles":["보안 및 인증"]},"983":{"title":"OWASP AntiSamy","titles":["보안 및 인증","XSS 방지"]},"984":{"title":"정책 파일","titles":["보안 및 인증","XSS 방지"]},"985":{"title":"XSS 필터","titles":["보안 및 인증","XSS 방지"]},"986":{"title":"보안 헤더","titles":["보안 및 인증"]},"987":{"title":"다음 단계","titles":["보안 및 인증"]},"988":{"title":"통합 테스트","titles":[]},"989":{"title":"기본 구조","titles":["통합 테스트"]},"990":{"title":"다음 단계","titles":["통합 테스트"]},"991":{"title":"단위 테스트","titles":[]},"992":{"title":"기본 구조","titles":["단위 테스트"]},"993":{"title":"다음 단계","titles":["단위 테스트"]},"994":{"title":"일반적인 문제 해결","titles":[]},"995":{"title":"포트 충돌","titles":["일반적인 문제 해결"]},"996":{"title":"데이터베이스 연결 실패","titles":["일반적인 문제 해결"]},"997":{"title":"Redis 연결 실패","titles":["일반적인 문제 해결"]},"998":{"title":"다음 단계","titles":["일반적인 문제 해결"]},"999":{"title":"로그 확인","titles":[]},"1000":{"title":"로그 파일 위치","titles":["로그 확인"]},"1001":{"title":"로그 레벨 설정","titles":["로그 확인"]},"1002":{"title":"다음 단계","titles":["로그 확인"]},"1003":{"title":"버튼 컴포넌트","titles":[]},"1004":{"title":"ButtonBox","titles":["버튼 컴포넌트"]},"1005":{"title":"파일 위치","titles":["버튼 컴포넌트","ButtonBox"]},"1006":{"title":"사용 예제","titles":["버튼 컴포넌트","ButtonBox"]},"1007":{"title":"Vuetify 버튼","titles":["버튼 컴포넌트"]},"1008":{"title":"로딩 컴포넌트","titles":[]},"1009":{"title":"Loading","titles":["로딩 컴포넌트"]},"1010":{"title":"파일 위치","titles":["로딩 컴포넌트","Loading"]},"1011":{"title":"사용 예제","titles":["로딩 컴포넌트","Loading"]},"1012":{"title":"입력 컴포넌트","titles":[]},"1013":{"title":"InputPhone","titles":["입력 컴포넌트"]},"1014":{"title":"파일 위치","titles":["입력 컴포넌트","InputPhone"]},"1015":{"title":"사용 예제","titles":["입력 컴포넌트","InputPhone"]},"1016":{"title":"Vuetify 입력","titles":["입력 컴포넌트"]},"1017":{"title":"조회 컴포넌트 (LookUp)","titles":[]},"1018":{"title":"LookUpBox","titles":["조회 컴포넌트 (LookUp)"]},"1019":{"title":"파일 위치","titles":["조회 컴포넌트 (LookUp)","LookUpBox"]},"1020":{"title":"사용 예제","titles":["조회 컴포넌트 (LookUp)","LookUpBox"]},"1021":{"title":"선택 컴포넌트","titles":[]},"1022":{"title":"개요","titles":["선택 컴포넌트"]},"1023":{"title":"SelectBoxSQL","titles":["선택 컴포넌트"]},"1024":{"title":"개요","titles":["선택 컴포넌트","SelectBoxSQL"]},"1025":{"title":"파일 위치","titles":["선택 컴포넌트","SelectBoxSQL"]},"1026":{"title":"Props","titles":["선택 컴포넌트","SelectBoxSQL"]},"1027":{"title":"사용 예제","titles":["선택 컴포넌트","SelectBoxSQL"]},"1028":{"title":"실제 컴포넌트","titles":["선택 컴포넌트","SelectBoxSQL"]},"1029":{"title":"API 연동 예제","titles":["선택 컴포넌트","SelectBoxSQL"]},"1030":{"title":"MultiSelectBoxSQL","titles":["선택 컴포넌트"]},"1031":{"title":"개요","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1032":{"title":"파일 위치","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1033":{"title":"Props","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1034":{"title":"Columns 정의","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1035":{"title":"사용 예제","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1036":{"title":"콜백 함수 사용","titles":["선택 컴포넌트","MultiSelectBoxSQL"]},"1037":{"title":"SelectBoxDate","titles":["선택 컴포넌트"]},"1038":{"title":"개요","titles":["선택 컴포넌트","SelectBoxDate"]},"1039":{"title":"파일 위치","titles":["선택 컴포넌트","SelectBoxDate"]},"1040":{"title":"사용 예제","titles":["선택 컴포넌트","SelectBoxDate"]},"1041":{"title":"AG Grid에서 사용하기","titles":["선택 컴포넌트"]},"1042":{"title":"GridMultiSelectWrapper","titles":["선택 컴포넌트","AG Grid에서 사용하기"]},"1043":{"title":"사용 예제","titles":["선택 컴포넌트","AG Grid에서 사용하기"]},"1044":{"title":"스타일 커스터마이징","titles":["선택 컴포넌트"]},"1045":{"title":"주의사항","titles":["선택 컴포넌트"]},"1046":{"title":"관련 문서","titles":["선택 컴포넌트"]},"1047":{"title":"트리 컴포넌트","titles":[]},"1048":{"title":"TreeDeptDropdown","titles":["트리 컴포넌트"]},"1049":{"title":"파일 위치","titles":["트리 컴포넌트","TreeDeptDropdown"]},"1050":{"title":"TreeEmpDropdown","titles":["트리 컴포넌트"]},"1051":{"title":"파일 위치","titles":["트리 컴포넌트","TreeEmpDropdown"]},"1052":{"title":"TreeOrgNode","titles":["트리 컴포넌트"]},"1053":{"title":"파일 위치","titles":["트리 컴포넌트","TreeOrgNode"]},"1054":{"title":"그리드 클릭 필드","titles":[]},"1055":{"title":"GridClickField","titles":["그리드 클릭 필드"]},"1056":{"title":"개요","titles":["그리드 클릭 필드","GridClickField"]},"1057":{"title":"파일 위치","titles":["그리드 클릭 필드","GridClickField"]},"1058":{"title":"주요 기능","titles":["그리드 클릭 필드","GridClickField"]},"1059":{"title":"사용 예제","titles":["그리드 클릭 필드","GridClickField"]},"1060":{"title":"Props","titles":["그리드 클릭 필드","GridClickField"]},"1061":{"title":"AG Grid 래퍼","titles":[]},"1062":{"title":"개요","titles":["AG Grid 래퍼"]},"1063":{"title":"기본 사용","titles":["AG Grid 래퍼"]},"1064":{"title":"셀 에디터","titles":["AG Grid 래퍼"]},"1065":{"title":"그리드 컨텍스트 메뉴","titles":[]},"1066":{"title":"GridContextMenu","titles":["그리드 컨텍스트 메뉴"]},"1067":{"title":"개요","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1068":{"title":"파일 위치","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1069":{"title":"주요 기능","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1070":{"title":"컬럼 헤더 컨텍스트 메뉴","titles":["그리드 컨텍스트 메뉴","GridContextMenu","주요 기능"]},"1071":{"title":"셀 컨텍스트 메뉴","titles":["그리드 컨텍스트 메뉴","GridContextMenu","주요 기능"]},"1072":{"title":"사용 예제","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1073":{"title":"컨텍스트 메뉴 스토어","titles":["그리드 컨텍스트 메뉴","GridContextMenu"]},"1074":{"title":"멀티 선택 그리드","titles":[]},"1075":{"title":"GridMultiSelectWrapper","titles":["멀티 선택 그리드"]},"1076":{"title":"파일 위치","titles":["멀티 선택 그리드","GridMultiSelectWrapper"]},"1077":{"title":"사용 예제","titles":["멀티 선택 그리드","GridMultiSelectWrapper"]},"1078":{"title":"블랭크 레이아웃","titles":[]},"1079":{"title":"blank.vue","titles":["블랭크 레이아웃"]},"1080":{"title":"개요","titles":["블랭크 레이아웃","blank.vue"]},"1081":{"title":"파일 위치","titles":["블랭크 레이아웃","blank.vue"]},"1082":{"title":"특징","titles":["블랭크 레이아웃","blank.vue"]},"1083":{"title":"사용 예제","titles":["블랭크 레이아웃","blank.vue"]},"1084":{"title":"메인 레이아웃","titles":[]},"1085":{"title":"Main.vue","titles":["메인 레이아웃"]},"1086":{"title":"개요","titles":["메인 레이아웃","Main.vue"]},"1087":{"title":"파일 위치","titles":["메인 레이아웃","Main.vue"]},"1088":{"title":"주요 구성 요소","titles":["메인 레이아웃","Main.vue"]},"1089":{"title":"레이아웃 구조","titles":["메인 레이아웃","Main.vue"]},"1090":{"title":"탭 관리","titles":["메인 레이아웃","Main.vue"]},"1091":{"title":"사용 예제","titles":["메인 레이아웃","Main.vue"]},"1092":{"title":"북마크 메뉴","titles":[]},"1093":{"title":"MenuBmk","titles":["북마크 메뉴"]},"1094":{"title":"개요","titles":["북마크 메뉴","MenuBmk"]},"1095":{"title":"파일 위치","titles":["북마크 메뉴","MenuBmk"]},"1096":{"title":"주요 기능","titles":["북마크 메뉴","MenuBmk"]},"1097":{"title":"사용 예제","titles":["북마크 메뉴","MenuBmk"]},"1098":{"title":"드래그 앤 드롭","titles":["북마크 메뉴","MenuBmk"]},"1099":{"title":"팝업 레이아웃","titles":[]},"1100":{"title":"popBlank.vue","titles":["팝업 레이아웃"]},"1101":{"title":"개요","titles":["팝업 레이아웃","popBlank.vue"]},"1102":{"title":"파일 위치","titles":["팝업 레이아웃","popBlank.vue"]},"1103":{"title":"특징","titles":["팝업 레이아웃","popBlank.vue"]},"1104":{"title":"동적 컴포넌트 로드","titles":["팝업 레이아웃","popBlank.vue"]},"1105":{"title":"사용 예제","titles":["팝업 레이아웃","popBlank.vue"]},"1106":{"title":"팝업 열기","titles":["팝업 레이아웃","popBlank.vue"]},"1107":{"title":"메뉴 헤더바","titles":[]},"1108":{"title":"MenuHeaderBar","titles":["메뉴 헤더바"]},"1109":{"title":"개요","titles":["메뉴 헤더바","MenuHeaderBar"]},"1110":{"title":"파일 위치","titles":["메뉴 헤더바","MenuHeaderBar"]},"1111":{"title":"주요 기능","titles":["메뉴 헤더바","MenuHeaderBar"]},"1112":{"title":"사용 예제","titles":["메뉴 헤더바","MenuHeaderBar"]},"1113":{"title":"메뉴 구조","titles":["메뉴 헤더바","MenuHeaderBar"]},"1114":{"title":"사이드바 메뉴","titles":[]},"1115":{"title":"MenuSideBar","titles":["사이드바 메뉴"]},"1116":{"title":"개요","titles":["사이드바 메뉴","MenuSideBar"]},"1117":{"title":"파일 위치","titles":["사이드바 메뉴","MenuSideBar"]},"1118":{"title":"주요 기능","titles":["사이드바 메뉴","MenuSideBar"]},"1119":{"title":"사용 예제","titles":["사이드바 메뉴","MenuSideBar"]},"1120":{"title":"메뉴 구조","titles":["사이드바 메뉴","MenuSideBar"]},"1121":{"title":"즐겨찾기","titles":["사이드바 메뉴","MenuSideBar"]},"1122":{"title":"승인 목록 팝업","titles":[]},"1123":{"title":"PopupApproveList","titles":["승인 목록 팝업"]},"1124":{"title":"개요","titles":["승인 목록 팝업","PopupApproveList"]},"1125":{"title":"파일 위치","titles":["승인 목록 팝업","PopupApproveList"]},"1126":{"title":"사용 예제","titles":["승인 목록 팝업","PopupApproveList"]},"1127":{"title":"Props","titles":["승인 목록 팝업","PopupApproveList"]},"1128":{"title":"승인 팝업","titles":[]},"1129":{"title":"PopupApproval","titles":["승인 팝업"]},"1130":{"title":"파일 위치","titles":["승인 팝업","PopupApproval"]},"1131":{"title":"PopupApprovalBox","titles":["승인 팝업"]},"1132":{"title":"파일 위치","titles":["승인 팝업","PopupApprovalBox"]},"1133":{"title":"PopupApproveList","titles":["승인 팝업"]},"1134":{"title":"파일 위치","titles":["승인 팝업","PopupApproveList"]},"1135":{"title":"파일 링크 팝업","titles":[]},"1136":{"title":"PopupFileLink","titles":["파일 링크 팝업"]},"1137":{"title":"개요","titles":["파일 링크 팝업","PopupFileLink"]},"1138":{"title":"파일 위치","titles":["파일 링크 팝업","PopupFileLink"]},"1139":{"title":"주요 기능","titles":["파일 링크 팝업","PopupFileLink"]},"1140":{"title":"사용 예제","titles":["파일 링크 팝업","PopupFileLink"]},"1141":{"title":"로그 팝업","titles":[]},"1142":{"title":"PopupLog","titles":["로그 팝업"]},"1143":{"title":"파일 위치","titles":["로그 팝업","PopupLog"]},"1144":{"title":"PopupPageLog","titles":["로그 팝업"]},"1145":{"title":"파일 위치","titles":["로그 팝업","PopupPageLog"]},"1146":{"title":"페이지 로그 팝업","titles":[]},"1147":{"title":"PopupPageLog","titles":["페이지 로그 팝업"]},"1148":{"title":"개요","titles":["페이지 로그 팝업","PopupPageLog"]},"1149":{"title":"파일 위치","titles":["페이지 로그 팝업","PopupPageLog"]},"1150":{"title":"주요 기능","titles":["페이지 로그 팝업","PopupPageLog"]},"1151":{"title":"사용 예제","titles":["페이지 로그 팝업","PopupPageLog"]},"1152":{"title":"SMS 템플릿 팝업","titles":[]},"1153":{"title":"PopupSmsTemplateList","titles":["SMS 템플릿 팝업"]},"1154":{"title":"개요","titles":["SMS 템플릿 팝업","PopupSmsTemplateList"]},"1155":{"title":"파일 위치","titles":["SMS 템플릿 팝업","PopupSmsTemplateList"]},"1156":{"title":"주요 기능","titles":["SMS 템플릿 팝업","PopupSmsTemplateList"]},"1157":{"title":"사용 예제","titles":["SMS 템플릿 팝업","PopupSmsTemplateList"]},"1158":{"title":"경로 별칭 (Alias)","titles":[]},"1159":{"title":"개요","titles":["경로 별칭 (Alias)"]},"1160":{"title":"설정 위치","titles":["경로 별칭 (Alias)"]},"1161":{"title":"주요 별칭","titles":["경로 별칭 (Alias)"]},"1162":{"title":"사용 예제","titles":["경로 별칭 (Alias)"]},"1163":{"title":"jsconfig.json","titles":["경로 별칭 (Alias)"]},"1164":{"title":"주의사항","titles":["경로 별칭 (Alias)"]},"1165":{"title":"빌드 설정","titles":[]},"1166":{"title":"개요","titles":["빌드 설정"]},"1167":{"title":"설정 위치","titles":["빌드 설정"]},"1168":{"title":"빌드 옵션","titles":["빌드 설정"]},"1169":{"title":"chunkSizeWarningLimit","titles":["빌드 설정","빌드 옵션"]},"1170":{"title":"빌드 명령어","titles":["빌드 설정"]},"1171":{"title":"개발 빌드","titles":["빌드 설정","빌드 명령어"]},"1172":{"title":"스테이징 빌드","titles":["빌드 설정","빌드 명령어"]},"1173":{"title":"프로덕션 빌드","titles":["빌드 설정","빌드 명령어"]},"1174":{"title":"빌드 결과물","titles":["빌드 설정"]},"1175":{"title":"빌드 최적화","titles":["빌드 설정"]},"1176":{"title":"환경별 빌드","titles":["빌드 설정"]},"1177":{"title":"환경 변수 (.env)","titles":[]},"1178":{"title":"개요","titles":["환경 변수 (.env)"]},"1179":{"title":"환경 변수 파일","titles":["환경 변수 (.env)"]},"1180":{"title":"필수 환경 변수","titles":["환경 변수 (.env)"]},"1181":{"title":"환경 변수 사용","titles":["환경 변수 (.env)"]},"1182":{"title":"환경별 설정","titles":["환경 변수 (.env)"]},"1183":{"title":"개발 환경 (.env.development)","titles":["환경 변수 (.env)","환경별 설정"]},"1184":{"title":"프로덕션 환경 (.env.production)","titles":["환경 변수 (.env)","환경별 설정"]},"1185":{"title":"주의사항","titles":["환경 변수 (.env)"]},"1186":{"title":"프록시 설정","titles":[]},"1187":{"title":"개요","titles":["프록시 설정"]},"1188":{"title":"설정 위치","titles":["프록시 설정"]},"1189":{"title":"프록시 설정","titles":["프록시 설정"]},"1190":{"title":"프록시 경로","titles":["프록시 설정"]},"1191":{"title":"/api","titles":["프록시 설정","프록시 경로"]},"1192":{"title":"/auth","titles":["프록시 설정","프록시 경로"]},"1193":{"title":"/files","titles":["프록시 설정","프록시 경로"]},"1194":{"title":"사용 예제","titles":["프록시 설정"]},"1195":{"title":"주의사항","titles":["프록시 설정"]},"1196":{"title":"Vite 설정","titles":[]},"1197":{"title":"개요","titles":["Vite 설정"]},"1198":{"title":"주요 설정","titles":["Vite 설정"]},"1199":{"title":"플러그인","titles":["Vite 설정","주요 설정"]},"1200":{"title":"서버 설정","titles":["Vite 설정","주요 설정"]},"1201":{"title":"경로 별칭","titles":["Vite 설정","주요 설정"]},"1202":{"title":"환경 변수","titles":["Vite 설정"]},"1203":{"title":"빌드 설정","titles":["Vite 설정"]},"1204":{"title":"자동 임포트 설정","titles":["Vite 설정"]},"1205":{"title":"AutoImport","titles":["Vite 설정","자동 임포트 설정"]},"1206":{"title":"Components","titles":["Vite 설정","자동 임포트 설정"]},"1207":{"title":"암호화/복호화","titles":[]},"1208":{"title":"개요","titles":["암호화/복호화"]},"1209":{"title":"암호화 설정","titles":["암호화/복호화"]},"1210":{"title":"요청 암호화","titles":["암호화/복호화"]},"1211":{"title":"일반 요청 (JSON)","titles":["암호화/복호화","요청 암호화"]},"1212":{"title":"파일 업로드 (FormData)","titles":["암호화/복호화","요청 암호화"]},"1213":{"title":"응답 복호화","titles":["암호화/복호화"]},"1214":{"title":"암호화 함수","titles":["암호화/복호화"]},"1215":{"title":"encryptObject(data)","titles":["암호화/복호화","암호화 함수"]},"1216":{"title":"decryptObject(data)","titles":["암호화/복호화","암호화 함수"]},"1217":{"title":"encryptBinary(bytes, file)","titles":["암호화/복호화","암호화 함수"]},"1218":{"title":"사용 예제","titles":["암호화/복호화"]},"1219":{"title":"암호화 활성화","titles":["암호화/복호화","사용 예제"]},"1220":{"title":"수동 암호화/복호화","titles":["암호화/복호화","사용 예제"]},"1221":{"title":"주의사항","titles":["암호화/복호화"]},"1222":{"title":"관련 문서","titles":["암호화/복호화"]},"1223":{"title":"JWT 인증","titles":[]},"1224":{"title":"개요","titles":["JWT 인증"]},"1225":{"title":"토큰 구조","titles":["JWT 인증"]},"1226":{"title":"Access Token","titles":["JWT 인증","토큰 구조"]},"1227":{"title":"Refresh Token","titles":["JWT 인증","토큰 구조"]},"1228":{"title":"인증 흐름","titles":["JWT 인증"]},"1229":{"title":"1. 로그인","titles":["JWT 인증","인증 흐름"]},"1230":{"title":"2. API 요청","titles":["JWT 인증","인증 흐름"]},"1231":{"title":"3. 토큰 갱신","titles":["JWT 인증","인증 흐름"]},"1232":{"title":"토큰 관리","titles":["JWT 인증"]},"1233":{"title":"Access Token 설정","titles":["JWT 인증","토큰 관리"]},"1234":{"title":"Access Token 초기화","titles":["JWT 인증","토큰 관리"]},"1235":{"title":"인증 상태 확인","titles":["JWT 인증","토큰 관리"]},"1236":{"title":"보안 고려사항","titles":["JWT 인증"]},"1237":{"title":"관련 문서","titles":["JWT 인증"]},"1238":{"title":"세션 관리","titles":[]},"1239":{"title":"개요","titles":["세션 관리"]},"1240":{"title":"세션 데이터 구조","titles":["세션 관리"]},"1241":{"title":"주요 메서드","titles":["세션 관리"]},"1242":{"title":"setSessionData(data)","titles":["세션 관리","주요 메서드"]},"1243":{"title":"setSessionKey(key, value)","titles":["세션 관리","주요 메서드"]},"1244":{"title":"getSessionValue(key)","titles":["세션 관리","주요 메서드"]},"1245":{"title":"getSessionValues(keys)","titles":["세션 관리","주요 메서드"]},"1246":{"title":"removeSessionKey(key)","titles":["세션 관리","주요 메서드"]},"1247":{"title":"clearSessionData()","titles":["세션 관리","주요 메서드"]},"1248":{"title":"로그인 시 세션 설정","titles":["세션 관리"]},"1249":{"title":"로그아웃 시 세션 초기화","titles":["세션 관리"]},"1250":{"title":"세션 데이터 사용","titles":["세션 관리"]},"1251":{"title":"세션 영속화","titles":["세션 관리"]},"1252":{"title":"주의사항","titles":["세션 관리"]},"1253":{"title":"관련 문서","titles":["세션 관리"]},"1254":{"title":"토큰 갱신","titles":[]},"1255":{"title":"개요","titles":["토큰 갱신"]},"1256":{"title":"자동 갱신 메커니즘","titles":["토큰 갱신"]},"1257":{"title":"갱신 프로세스","titles":["토큰 갱신"]},"1258":{"title":"1. 401/419 에러 감지","titles":["토큰 갱신","갱신 프로세스"]},"1259":{"title":"2. Refresh Token으로 새 토큰 요청","titles":["토큰 갱신","갱신 프로세스"]},"1260":{"title":"3. 원래 요청 재시도","titles":["토큰 갱신","갱신 프로세스"]},"1261":{"title":"동시 요청 처리","titles":["토큰 갱신"]},"1262":{"title":"갱신 실패 처리","titles":["토큰 갱신"]},"1263":{"title":"수동 갱신","titles":["토큰 갱신"]},"1264":{"title":"주의사항","titles":["토큰 갱신"]},"1265":{"title":"관련 문서","titles":["토큰 갱신"]},"1266":{"title":"Axios 인스턴스 설정","titles":[]},"1267":{"title":"개요","titles":["Axios 인스턴스 설정"]},"1268":{"title":"파일 위치","titles":["Axios 인스턴스 설정"]},"1269":{"title":"기본 설정","titles":["Axios 인스턴스 설정"]},"1270":{"title":"주요 설정 항목","titles":["Axios 인스턴스 설정","기본 설정"]},"1271":{"title":"요청 인터셉터","titles":["Axios 인스턴스 설정"]},"1272":{"title":"주요 기능","titles":["Axios 인스턴스 설정","요청 인터셉터"]},"1273":{"title":"코드 예제","titles":["Axios 인스턴스 설정","요청 인터셉터"]},"1274":{"title":"응답 인터셉터","titles":["Axios 인스턴스 설정"]},"1275":{"title":"주요 기능","titles":["Axios 인스턴스 설정","응답 인터셉터"]},"1276":{"title":"토큰 갱신 로직","titles":["Axios 인스턴스 설정","응답 인터셉터"]},"1277":{"title":"사용 방법","titles":["Axios 인스턴스 설정"]},"1278":{"title":"기본 사용","titles":["Axios 인스턴스 설정","사용 방법"]},"1279":{"title":"응답 처리","titles":["Axios 인스턴스 설정","사용 방법"]},"1280":{"title":"파일 업로드","titles":["Axios 인스턴스 설정","사용 방법"]},"1281":{"title":"파일 다운로드","titles":["Axios 인스턴스 설정","사용 방법"]},"1282":{"title":"암호화/복호화","titles":["Axios 인스턴스 설정"]},"1283":{"title":"암호화 설정","titles":["Axios 인스턴스 설정","암호화/복호화"]},"1284":{"title":"FormData 암호화","titles":["Axios 인스턴스 설정","암호화/복호화"]},"1285":{"title":"에러 처리","titles":["Axios 인스턴스 설정"]},"1286":{"title":"타임아웃 에러","titles":["Axios 인스턴스 설정","에러 처리"]},"1287":{"title":"429 에러 (Too Many Requests)","titles":["Axios 인스턴스 설정","에러 처리"]},"1288":{"title":"기타 에러","titles":["Axios 인스턴스 설정","에러 처리"]},"1289":{"title":"주의사항","titles":["Axios 인스턴스 설정"]},"1290":{"title":"관련 문서","titles":["Axios 인스턴스 설정"]},"1291":{"title":"에러 처리","titles":[]},"1292":{"title":"개요","titles":["에러 처리"]},"1293":{"title":"에러 타입별 처리","titles":["에러 처리"]},"1294":{"title":"1. 401/419 에러 (인증 실패)","titles":["에러 처리","에러 타입별 처리"]},"1295":{"title":"2. 429 에러 (Too Many Requests)","titles":["에러 처리","에러 타입별 처리"]},"1296":{"title":"3. 타임아웃 에러","titles":["에러 처리","에러 타입별 처리"]},"1297":{"title":"4. 404 에러 (Silent 처리)","titles":["에러 처리","에러 타입별 처리"]},"1298":{"title":"5. 기타 에러","titles":["에러 처리","에러 타입별 처리"]},"1299":{"title":"에러 로그 기록","titles":["에러 처리"]},"1300":{"title":"커스텀 에러 처리","titles":["에러 처리"]},"1301":{"title":"에러 메시지 표시","titles":["에러 처리"]},"1302":{"title":"Alert 사용","titles":["에러 처리","에러 메시지 표시"]},"1303":{"title":"커스텀 알림 사용","titles":["에러 처리","에러 메시지 표시"]},"1304":{"title":"재시도 로직","titles":["에러 처리"]},"1305":{"title":"에러 타입 확인","titles":["에러 처리"]},"1306":{"title":"베스트 프랙티스","titles":["에러 처리"]},"1307":{"title":"관련 문서","titles":["에러 처리"]},"1308":{"title":"요청 인터셉터","titles":[]},"1309":{"title":"개요","titles":["요청 인터셉터"]},"1310":{"title":"주요 기능","titles":["요청 인터셉터"]},"1311":{"title":"1. 로딩 표시","titles":["요청 인터셉터","주요 기능"]},"1312":{"title":"2. JWT 토큰 추가","titles":["요청 인터셉터","주요 기능"]},"1313":{"title":"3. 암호화 헤더 추가","titles":["요청 인터셉터","주요 기능"]},"1314":{"title":"4. 요청 로그 저장","titles":["요청 인터셉터","주요 기능"]},"1315":{"title":"5. 데이터 암호화","titles":["요청 인터셉터","주요 기능"]},"1316":{"title":"FormData 처리","titles":["요청 인터셉터"]},"1317":{"title":"타임스탬프 추가","titles":["요청 인터셉터"]},"1318":{"title":"원본 데이터 저장","titles":["요청 인터셉터"]},"1319":{"title":"에러 처리","titles":["요청 인터셉터"]},"1320":{"title":"사용 예제","titles":["요청 인터셉터"]},"1321":{"title":"관련 문서","titles":["요청 인터셉터"]},"1322":{"title":"응답 인터셉터","titles":[]},"1323":{"title":"개요","titles":["응답 인터셉터"]},"1324":{"title":"성공 응답 처리","titles":["응답 인터셉터"]},"1325":{"title":"1. 로딩 숨김","titles":["응답 인터셉터","성공 응답 처리"]},"1326":{"title":"2. 파일 다운로드 처리","titles":["응답 인터셉터","성공 응답 처리"]},"1327":{"title":"3. 응답 데이터 반환","titles":["응답 인터셉터","성공 응답 처리"]},"1328":{"title":"에러 응답 처리","titles":["응답 인터셉터"]},"1329":{"title":"1. 로딩 숨김","titles":["응답 인터셉터","에러 응답 처리"]},"1330":{"title":"2. 로그 에러 표시","titles":["응답 인터셉터","에러 응답 처리"]},"1331":{"title":"3. 429 에러 처리 (Too Many Requests)","titles":["응답 인터셉터","에러 응답 처리"]},"1332":{"title":"4. 401/419 에러 처리 (토큰 갱신)","titles":["응답 인터셉터","에러 응답 처리"]},"1333":{"title":"5. 타임아웃 에러 처리","titles":["응답 인터셉터","에러 응답 처리"]},"1334":{"title":"6. 기타 에러 처리","titles":["응답 인터셉터","에러 응답 처리"]},"1335":{"title":"토큰 갱신 로직","titles":["응답 인터셉터"]},"1336":{"title":"동시 요청 처리","titles":["응답 인터셉터","토큰 갱신 로직"]},"1337":{"title":"토큰 갱신 요청","titles":["응답 인터셉터","토큰 갱신 로직"]},"1338":{"title":"Silent 에러 처리","titles":["응답 인터셉터"]},"1339":{"title":"응답 데이터 구조","titles":["응답 인터셉터"]},"1340":{"title":"사용 예제","titles":["응답 인터셉터"]},"1341":{"title":"성공 응답 처리","titles":["응답 인터셉터","사용 예제"]},"1342":{"title":"파일 다운로드","titles":["응답 인터셉터","사용 예제"]},"1343":{"title":"관련 문서","titles":["응답 인터셉터"]},"1344":{"title":"동적 라우팅","titles":[]},"1345":{"title":"개요","titles":["동적 라우팅"]},"1346":{"title":"동적 라우트 등록","titles":["동적 라우팅"]},"1347":{"title":"메뉴 데이터 구조","titles":["동적 라우팅","동적 라우트 등록"]},"1348":{"title":"라우트 변환","titles":["동적 라우팅","동적 라우트 등록"]},"1349":{"title":"동적 컴포넌트 로드","titles":["동적 라우팅","동적 라우트 등록"]},"1350":{"title":"메뉴 스토어 연동","titles":["동적 라우팅"]},"1351":{"title":"사용 예제","titles":["동적 라우팅"]},"1352":{"title":"동적 라우트 접근","titles":["동적 라우팅","사용 예제"]},"1353":{"title":"주의사항","titles":["동적 라우팅"]},"1354":{"title":"관련 문서","titles":["동적 라우팅"]},"1355":{"title":"라우트 가드","titles":[]},"1356":{"title":"개요","titles":["라우트 가드"]},"1357":{"title":"beforeEach 가드","titles":["라우트 가드"]},"1358":{"title":"현재 구현","titles":["라우트 가드","beforeEach 가드"]},"1359":{"title":"기능","titles":["라우트 가드","beforeEach 가드"]},"1360":{"title":"인증 가드 예제","titles":["라우트 가드"]},"1361":{"title":"afterEach 가드","titles":["라우트 가드"]},"1362":{"title":"메타 필드","titles":["라우트 가드"]},"1363":{"title":"관련 문서","titles":["라우트 가드"]},"1364":{"title":"라우트 설정","titles":[]},"1365":{"title":"개요","titles":["라우트 설정"]},"1366":{"title":"기본 라우트 구조","titles":["라우트 설정"]},"1367":{"title":"라우트 추가","titles":["라우트 설정"]},"1368":{"title":"정적 라우트","titles":["라우트 설정","라우트 추가"]},"1369":{"title":"동적 라우트","titles":["라우트 설정","라우트 추가"]},"1370":{"title":"라우트 매핑 규칙","titles":["라우트 설정"]},"1371":{"title":"레이아웃","titles":["라우트 설정"]},"1372":{"title":"Blank 레이아웃","titles":["라우트 설정","레이아웃"]},"1373":{"title":"Main 레이아웃","titles":["라우트 설정","레이아웃"]},"1374":{"title":"Popup 레이아웃","titles":["라우트 설정","레이아웃"]},"1375":{"title":"관련 문서","titles":["라우트 설정"]},"1376":{"title":"인증 스토어 (authStore)","titles":[]},"1377":{"title":"개요","titles":["인증 스토어 (authStore)"]},"1378":{"title":"파일 위치","titles":["인증 스토어 (authStore)"]},"1379":{"title":"상태 (State)","titles":["인증 스토어 (authStore)"]},"1380":{"title":"accessToken","titles":["인증 스토어 (authStore)","상태 (State)"]},"1381":{"title":"액션 (Actions)","titles":["인증 스토어 (authStore)"]},"1382":{"title":"setAccessToken(token)","titles":["인증 스토어 (authStore)","액션 (Actions)"]},"1383":{"title":"clearAccessToken()","titles":["인증 스토어 (authStore)","액션 (Actions)"]},"1384":{"title":"게터 (Getters)","titles":["인증 스토어 (authStore)"]},"1385":{"title":"isAuthenticated","titles":["인증 스토어 (authStore)","게터 (Getters)"]},"1386":{"title":"사용 예제","titles":["인증 스토어 (authStore)"]},"1387":{"title":"로그인 처리","titles":["인증 스토어 (authStore)","사용 예제"]},"1388":{"title":"로그아웃 처리","titles":["인증 스토어 (authStore)","사용 예제"]},"1389":{"title":"인증 상태 확인","titles":["인증 스토어 (authStore)","사용 예제"]},"1390":{"title":"주의사항","titles":["인증 스토어 (authStore)"]},"1391":{"title":"관련 문서","titles":["인증 스토어 (authStore)"]},"1392":{"title":"로딩 스토어 (loadingStore)","titles":[]},"1393":{"title":"개요","titles":["로딩 스토어 (loadingStore)"]},"1394":{"title":"파일 위치","titles":["로딩 스토어 (loadingStore)"]},"1395":{"title":"상태 (State)","titles":["로딩 스토어 (loadingStore)"]},"1396":{"title":"액션 (Actions)","titles":["로딩 스토어 (loadingStore)"]},"1397":{"title":"showLoading()","titles":["로딩 스토어 (loadingStore)","액션 (Actions)"]},"1398":{"title":"hideLoading()","titles":["로딩 스토어 (loadingStore)","액션 (Actions)"]},"1399":{"title":"사용 예제","titles":["로딩 스토어 (loadingStore)"]},"1400":{"title":"주의사항","titles":["로딩 스토어 (loadingStore)"]},"1401":{"title":"메뉴 스토어 (menuStore)","titles":[]},"1402":{"title":"개요","titles":["메뉴 스토어 (menuStore)"]},"1403":{"title":"파일 위치","titles":["메뉴 스토어 (menuStore)"]},"1404":{"title":"상태 (State)","titles":["메뉴 스토어 (menuStore)"]},"1405":{"title":"주요 액션","titles":["메뉴 스토어 (menuStore)"]},"1406":{"title":"setMenuData(data)","titles":["메뉴 스토어 (menuStore)","주요 액션"]},"1407":{"title":"setBmk(menu)","titles":["메뉴 스토어 (menuStore)","주요 액션"]},"1408":{"title":"getBmk()","titles":["메뉴 스토어 (menuStore)","주요 액션"]},"1409":{"title":"사용 예제","titles":["메뉴 스토어 (menuStore)"]},"1410":{"title":"로그 스토어 (logStore)","titles":[]},"1411":{"title":"개요","titles":["로그 스토어 (logStore)"]},"1412":{"title":"파일 위치","titles":["로그 스토어 (logStore)"]},"1413":{"title":"상태 (State)","titles":["로그 스토어 (logStore)"]},"1414":{"title":"주요 액션","titles":["로그 스토어 (logStore)"]},"1415":{"title":"toggleLogYN()","titles":["로그 스토어 (logStore)","주요 액션"]},"1416":{"title":"addLogData(config, menuData)","titles":["로그 스토어 (logStore)","주요 액션"]},"1417":{"title":"clearLogData()","titles":["로그 스토어 (logStore)","주요 액션"]},"1418":{"title":"로그 구조","titles":["로그 스토어 (logStore)"]},"1419":{"title":"사용 예제","titles":["로그 스토어 (logStore)"]},"1420":{"title":"주의사항","titles":["로그 스토어 (logStore)"]},"1421":{"title":"모달 스토어 (modalStore)","titles":[]},"1422":{"title":"개요","titles":["모달 스토어 (modalStore)"]},"1423":{"title":"파일 위치","titles":["모달 스토어 (modalStore)"]},"1424":{"title":"상태 (State)","titles":["모달 스토어 (modalStore)"]},"1425":{"title":"액션 (Actions)","titles":["모달 스토어 (modalStore)"]},"1426":{"title":"openModal(modalId, config)","titles":["모달 스토어 (modalStore)","액션 (Actions)"]},"1427":{"title":"closeModal()","titles":["모달 스토어 (modalStore)","액션 (Actions)"]},"1428":{"title":"사용 예제","titles":["모달 스토어 (modalStore)"]},"1429":{"title":"기타 스토어","titles":[]},"1430":{"title":"버튼 스토어 (buttonStore)","titles":["기타 스토어"]},"1431":{"title":"개요","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1432":{"title":"파일 위치","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1433":{"title":"주요 기능","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1434":{"title":"사용 예제","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1435":{"title":"지원하는 버튼","titles":["기타 스토어","버튼 스토어 (buttonStore)"]},"1436":{"title":"컨텍스트 메뉴 스토어 (contextMenuStore)","titles":["기타 스토어"]},"1437":{"title":"개요","titles":["기타 스토어","컨텍스트 메뉴 스토어 (contextMenuStore)"]},"1438":{"title":"파일 위치","titles":["기타 스토어","컨텍스트 메뉴 스토어 (contextMenuStore)"]},"1439":{"title":"주요 기능","titles":["기타 스토어","컨텍스트 메뉴 스토어 (contextMenuStore)"]},"1440":{"title":"사용 예제","titles":["기타 스토어","컨텍스트 메뉴 스토어 (contextMenuStore)"]},"1441":{"title":"동적 스토어 (dynamicStore)","titles":["기타 스토어"]},"1442":{"title":"개요","titles":["기타 스토어","동적 스토어 (dynamicStore)"]},"1443":{"title":"파일 위치","titles":["기타 스토어","동적 스토어 (dynamicStore)"]},"1444":{"title":"주요 기능","titles":["기타 스토어","동적 스토어 (dynamicStore)"]},"1445":{"title":"사용 예제","titles":["기타 스토어","동적 스토어 (dynamicStore)"]},"1446":{"title":"세션 스토어 (sessionStore)","titles":[]},"1447":{"title":"개요","titles":["세션 스토어 (sessionStore)"]},"1448":{"title":"파일 위치","titles":["세션 스토어 (sessionStore)"]},"1449":{"title":"상태 (State)","titles":["세션 스토어 (sessionStore)"]},"1450":{"title":"주요 액션","titles":["세션 스토어 (sessionStore)"]},"1451":{"title":"setSessionData(data)","titles":["세션 스토어 (sessionStore)","주요 액션"]},"1452":{"title":"setSessionKey(key, value)","titles":["세션 스토어 (sessionStore)","주요 액션"]},"1453":{"title":"getSessionValue(key)","titles":["세션 스토어 (sessionStore)","주요 액션"]},"1454":{"title":"사용 예제","titles":["세션 스토어 (sessionStore)"]},"1455":{"title":"사이드바 스토어 (sidebarStore)","titles":[]},"1456":{"title":"개요","titles":["사이드바 스토어 (sidebarStore)"]},"1457":{"title":"파일 위치","titles":["사이드바 스토어 (sidebarStore)"]},"1458":{"title":"상태 (State)","titles":["사이드바 스토어 (sidebarStore)"]},"1459":{"title":"주요 액션","titles":["사이드바 스토어 (sidebarStore)"]},"1460":{"title":"toggleVisible(value)","titles":["사이드바 스토어 (sidebarStore)","주요 액션"]},"1461":{"title":"toggleUnfoldable()","titles":["사이드바 스토어 (sidebarStore)","주요 액션"]},"1462":{"title":"사용 예제","titles":["사이드바 스토어 (sidebarStore)"]},"1463":{"title":"Composition API에서 사용","titles":["사이드바 스토어 (sidebarStore)","사용 예제"]},"1464":{"title":"컴포넌트에서 직접 사용","titles":["사이드바 스토어 (sidebarStore)","사용 예제"]},"1465":{"title":"상태 관리","titles":["사이드바 스토어 (sidebarStore)"]},"1466":{"title":"visible 상태","titles":["사이드바 스토어 (sidebarStore)","상태 관리"]},"1467":{"title":"unfoldable 상태","titles":["사이드바 스토어 (sidebarStore)","상태 관리"]},"1468":{"title":"다른 스토어와의 연동","titles":["사이드바 스토어 (sidebarStore)"]},"1469":{"title":"관련 문서","titles":["사이드바 스토어 (sidebarStore)"]},"1470":{"title":"탭 스토어 (tabStore)","titles":[]},"1471":{"title":"개요","titles":["탭 스토어 (tabStore)"]},"1472":{"title":"파일 위치","titles":["탭 스토어 (tabStore)"]},"1473":{"title":"상태 (State)","titles":["탭 스토어 (tabStore)"]},"1474":{"title":"주요 액션","titles":["탭 스토어 (tabStore)"]},"1475":{"title":"openTab(menu)","titles":["탭 스토어 (tabStore)","주요 액션"]},"1476":{"title":"switchTab(idxDbKey)","titles":["탭 스토어 (tabStore)","주요 액션"]},"1477":{"title":"closeTab(tab)","titles":["탭 스토어 (tabStore)","주요 액션"]},"1478":{"title":"closeAllTab()","titles":["탭 스토어 (tabStore)","주요 액션"]},"1479":{"title":"IndexedDB 연동","titles":["탭 스토어 (tabStore)"]},"1480":{"title":"사용 예제","titles":["탭 스토어 (tabStore)"]},"1481":{"title":"배포 절차","titles":[]},"1482":{"title":"1. 빌드","titles":["배포 절차"]},"1483":{"title":"2. 빌드 결과물 확인","titles":["배포 절차"]},"1484":{"title":"3. 웹 서버 설정","titles":["배포 절차"]},"1485":{"title":"4. 환경 변수 확인","titles":["배포 절차"]},"1486":{"title":"5. 테스트","titles":["배포 절차"]},"1487":{"title":"주의사항","titles":["배포 절차"]},"1488":{"title":"개발 서버 실행","titles":[]},"1489":{"title":"개발 서버 시작","titles":["개발 서버 실행"]},"1490":{"title":"기본 설정","titles":["개발 서버 실행"]},"1491":{"title":"포트 변경","titles":["개발 서버 실행"]},"1492":{"title":"접속","titles":["개발 서버 실행"]},"1493":{"title":"핫 모듈 교체 (HMR)","titles":["개발 서버 실행"]},"1494":{"title":"프록시","titles":["개발 서버 실행"]},"1495":{"title":"빌드 최적화","titles":[]},"1496":{"title":"코드 분할","titles":["빌드 최적화"]},"1497":{"title":"트리 쉐이킹","titles":["빌드 최적화"]},"1498":{"title":"압축","titles":["빌드 최적화"]},"1499":{"title":"에셋 최적화","titles":["빌드 최적화"]},"1500":{"title":"청크 크기 제한","titles":["빌드 최적화"]},"1501":{"title":"성능 모니터링","titles":["빌드 최적화"]},"1502":{"title":"프로덕션 빌드","titles":[]},"1503":{"title":"빌드 명령어","titles":["프로덕션 빌드"]},"1504":{"title":"빌드 결과물","titles":["프로덕션 빌드"]},"1505":{"title":"빌드 최적화","titles":["프로덕션 빌드"]},"1506":{"title":"배포","titles":["프로덕션 빌드"]},"1507":{"title":"환경 변수","titles":["프로덕션 빌드"]},"1508":{"title":"스테이징 빌드","titles":[]},"1509":{"title":"빌드 명령어","titles":["스테이징 빌드"]},"1510":{"title":"환경 변수","titles":["스테이징 빌드"]},"1511":{"title":"빌드 결과물","titles":["스테이징 빌드"]},"1512":{"title":"스테이징 서버 배포","titles":["스테이징 빌드"]},"1513":{"title":"API 호출 방법","titles":[]},"1514":{"title":"개요","titles":["API 호출 방법"]},"1515":{"title":"기본 사용법","titles":["API 호출 방법"]},"1516":{"title":"응답 처리","titles":["API 호출 방법"]},"1517":{"title":"프로시저 호출","titles":["API 호출 방법"]},"1518":{"title":"파일 업로드","titles":["API 호출 방법"]},"1519":{"title":"파일 다운로드","titles":["API 호출 방법"]},"1520":{"title":"API 에러 처리","titles":[]},"1521":{"title":"개요","titles":["API 에러 처리"]},"1522":{"title":"기본 에러 처리","titles":["API 에러 처리"]},"1523":{"title":"Try-Catch 사용","titles":["API 에러 처리"]},"1524":{"title":"에러 타입별 처리","titles":["API 에러 처리"]},"1525":{"title":"401/419 에러 (인증 실패)","titles":["API 에러 처리","에러 타입별 처리"]},"1526":{"title":"400 에러 (잘못된 요청)","titles":["API 에러 처리","에러 타입별 처리"]},"1527":{"title":"404 에러 (리소스 없음)","titles":["API 에러 처리","에러 타입별 처리"]},"1528":{"title":"500 에러 (서버 오류)","titles":["API 에러 처리","에러 타입별 처리"]},"1529":{"title":"타임아웃 에러","titles":["API 에러 처리","에러 타입별 처리"]},"1530":{"title":"네트워크 오류","titles":["API 에러 처리","에러 타입별 처리"]},"1531":{"title":"커스텀 에러 처리","titles":["API 에러 처리"]},"1532":{"title":"에러 타입 확인","titles":["API 에러 처리","커스텀 에러 처리"]},"1533":{"title":"에러 메시지 추출","titles":["API 에러 처리","커스텀 에러 처리"]},"1534":{"title":"재시도 로직","titles":["API 에러 처리"]},"1535":{"title":"에러 로깅","titles":["API 에러 처리"]},"1536":{"title":"사용자 친화적 에러 메시지","titles":["API 에러 처리"]},"1537":{"title":"Vuetify Snackbar 사용","titles":["API 에러 처리"]},"1538":{"title":"에러 처리 유틸리티 함수","titles":["API 에러 처리"]},"1539":{"title":"베스트 프랙티스","titles":["API 에러 처리"]},"1540":{"title":"관련 문서","titles":["API 에러 처리"]},"1541":{"title":"파일 업로드/다운로드","titles":[]},"1542":{"title":"파일 업로드","titles":["파일 업로드/다운로드"]},"1543":{"title":"FormData 사용","titles":["파일 업로드/다운로드","파일 업로드"]},"1544":{"title":"암호화된 파일 업로드","titles":["파일 업로드/다운로드","파일 업로드"]},"1545":{"title":"파일 다운로드","titles":["파일 업로드/다운로드"]},"1546":{"title":"Blob 응답","titles":["파일 업로드/다운로드","파일 다운로드"]},"1547":{"title":"FileSaver 사용","titles":["파일 업로드/다운로드","파일 다운로드"]},"1548":{"title":"Excel 다운로드","titles":["파일 업로드/다운로드"]},"1549":{"title":"요청/응답 처리","titles":[]},"1550":{"title":"요청 처리","titles":["요청/응답 처리"]},"1551":{"title":"기본 요청","titles":["요청/응답 처리","요청 처리"]},"1552":{"title":"프로시저 호출","titles":["요청/응답 처리","요청 처리"]},"1553":{"title":"응답 처리","titles":["요청/응답 처리"]},"1554":{"title":"성공 응답","titles":["요청/응답 처리","응답 처리"]},"1555":{"title":"응답 구조","titles":["요청/응답 처리","응답 처리"]},"1556":{"title":"에러 처리","titles":["요청/응답 처리"]},"1557":{"title":"파일 구조 규칙","titles":[]},"1558":{"title":"컴포넌트 파일 구조","titles":["파일 구조 규칙"]},"1559":{"title":"디렉토리 구조","titles":["파일 구조 규칙"]},"1560":{"title":"페이지 컴포넌트","titles":["파일 구조 규칙","디렉토리 구조"]},"1561":{"title":"공통 컴포넌트","titles":["파일 구조 규칙","디렉토리 구조"]},"1562":{"title":"스토어","titles":["파일 구조 규칙","디렉토리 구조"]},"1563":{"title":"파일 조직","titles":["파일 구조 규칙"]},"1564":{"title":"JavaScript/TypeScript 규칙","titles":[]},"1565":{"title":"코딩 스타일","titles":["JavaScript/TypeScript 규칙"]},"1566":{"title":"함수 작성","titles":["JavaScript/TypeScript 규칙"]},"1567":{"title":"비동기 처리","titles":["JavaScript/TypeScript 규칙"]},"1568":{"title":"에러 처리","titles":["JavaScript/TypeScript 규칙"]},"1569":{"title":"Vue 컴포넌트 작성 규칙","titles":[]},"1570":{"title":"컴포넌트 구조","titles":["Vue 컴포넌트 작성 규칙"]},"1571":{"title":"네이밍","titles":["Vue 컴포넌트 작성 규칙"]},"1572":{"title":"Props 정의","titles":["Vue 컴포넌트 작성 규칙"]},"1573":{"title":"Emits 정의","titles":["Vue 컴포넌트 작성 규칙"]},"1574":{"title":"반응형 변수","titles":["Vue 컴포넌트 작성 규칙"]},"1575":{"title":"네이밍 규칙","titles":[]},"1576":{"title":"파일명","titles":["네이밍 규칙"]},"1577":{"title":"변수명","titles":["네이밍 규칙"]},"1578":{"title":"함수명","titles":["네이밍 규칙"]},"1579":{"title":"컴포넌트명","titles":["네이밍 규칙"]},"1580":{"title":"CSS 클래스명","titles":["네이밍 규칙"]},"1581":{"title":"컴포넌트 생성","titles":[]},"1582":{"title":"디렉토리 구조","titles":["컴포넌트 생성"]},"1583":{"title":"컴포넌트 템플릿","titles":["컴포넌트 생성"]},"1584":{"title":"자동 임포트","titles":["컴포넌트 생성"]},"1585":{"title":"컴포넌트 등록","titles":[]},"1586":{"title":"자동 등록","titles":["컴포넌트 등록"]},"1587":{"title":"등록 디렉토리","titles":["컴포넌트 등록"]},"1588":{"title":"수동 등록","titles":["컴포넌트 등록"]},"1589":{"title":"타입 정의","titles":["컴포넌트 등록"]},"1590":{"title":"컴포넌트 사용법","titles":[]},"1591":{"title":"자동 등록된 컴포넌트","titles":["컴포넌트 사용법"]},"1592":{"title":"Props 전달","titles":["컴포넌트 사용법"]},"1593":{"title":"이벤트 처리","titles":["컴포넌트 사용법"]},"1594":{"title":"슬롯 사용","titles":["컴포넌트 사용법"]},"1595":{"title":"페이지 생성 절차","titles":[]},"1596":{"title":"개요","titles":["페이지 생성 절차"]},"1597":{"title":"1. 페이지 컴포넌트 생성","titles":["페이지 생성 절차"]},"1598":{"title":"1.1 디렉토리 구조 확인","titles":["페이지 생성 절차","1. 페이지 컴포넌트 생성"]},"1599":{"title":"1.2 컴포넌트 파일 생성","titles":["페이지 생성 절차","1. 페이지 컴포넌트 생성"]},"1600":{"title":"1.3 기본 템플릿 작성","titles":["페이지 생성 절차","1. 페이지 컴포넌트 생성"]},"1601":{"title":"2. 라우트 등록","titles":["페이지 생성 절차"]},"1602":{"title":"2.1 라우트 파일 확인","titles":["페이지 생성 절차","2. 라우트 등록"]},"1603":{"title":"2.2 라우트 추가","titles":["페이지 생성 절차","2. 라우트 등록"]},"1604":{"title":"2.3 동적 라우팅 (선택사항)","titles":["페이지 생성 절차","2. 라우트 등록"]},"1605":{"title":"3. 메뉴 등록","titles":["페이지 생성 절차"]},"1606":{"title":"3.1 백엔드 메뉴 등록","titles":["페이지 생성 절차","3. 메뉴 등록"]},"1607":{"title":"3.2 메뉴 매핑 규칙","titles":["페이지 생성 절차","3. 메뉴 등록"]},"1608":{"title":"4. 완성된 예제","titles":["페이지 생성 절차"]},"1609":{"title":"4.1 전체 컴포넌트 예제","titles":["페이지 생성 절차","4. 완성된 예제"]},"1610":{"title":"5. 베스트 프랙티스","titles":["페이지 생성 절차"]},"1611":{"title":"5.1 컴포넌트 구조","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1612":{"title":"5.2 네이밍 규칙","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1613":{"title":"5.3 코드 조직","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1614":{"title":"5.4 에러 처리","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1615":{"title":"5.5 로딩 상태 관리","titles":["페이지 생성 절차","5. 베스트 프랙티스"]},"1616":{"title":"6. 테스트","titles":["페이지 생성 절차"]},"1617":{"title":"6.1 개발 서버에서 확인","titles":["페이지 생성 절차","6. 테스트"]},"1618":{"title":"6.2 기능 테스트","titles":["페이지 생성 절차","6. 테스트"]},"1619":{"title":"다음 단계","titles":["페이지 생성 절차"]},"1620":{"title":"메뉴 등록","titles":[]},"1621":{"title":"백엔드 메뉴 등록","titles":["메뉴 등록"]},"1622":{"title":"메뉴 매핑 규칙","titles":["메뉴 등록"]},"1623":{"title":"라우트 등록","titles":[]},"1624":{"title":"라우트 파일","titles":["라우트 등록"]},"1625":{"title":"라우트 추가","titles":["라우트 등록"]},"1626":{"title":"동적 라우팅","titles":["라우트 등록"]},"1627":{"title":"스토어 생성","titles":[]},"1628":{"title":"스토어 파일 위치","titles":["스토어 생성"]},"1629":{"title":"스토어 템플릿","titles":["스토어 생성"]},"1630":{"title":"사용법","titles":["스토어 생성"]},"1631":{"title":"스토어 사용법","titles":[]},"1632":{"title":"스토어 가져오기","titles":["스토어 사용법"]},"1633":{"title":"상태 읽기","titles":["스토어 사용법"]},"1634":{"title":"액션 호출","titles":["스토어 사용법"]},"1635":{"title":"반응성","titles":["스토어 사용법"]},"1636":{"title":"SCSS 사용법","titles":[]},"1637":{"title":"컴포넌트 스타일","titles":["SCSS 사용법"]},"1638":{"title":"전역 스타일","titles":["SCSS 사용법"]},"1639":{"title":"변수 사용","titles":["SCSS 사용법"]},"1640":{"title":"믹스인 사용","titles":["SCSS 사용법"]},"1641":{"title":"커스텀 CSS","titles":[]},"1642":{"title":"커스텀 CSS 파일","titles":["커스텀 CSS"]},"1643":{"title":"스타일 오버라이드","titles":["커스텀 CSS"]},"1644":{"title":"전역 스타일","titles":["커스텀 CSS"]},"1645":{"title":"Vuetify 사용법","titles":[]},"1646":{"title":"기본 컴포넌트","titles":["Vuetify 사용법"]},"1647":{"title":"테마","titles":["Vuetify 사용법"]},"1648":{"title":"그리드 시스템","titles":["Vuetify 사용법"]},"1649":{"title":"아이콘","titles":["Vuetify 사용법"]},"1650":{"title":"공식 문서","titles":["Vuetify 사용법"]},"1651":{"title":"프로젝트 개요","titles":[]},"1652":{"title":"프로젝트 소개","titles":["프로젝트 개요"]},"1653":{"title":"주요 특징","titles":["프로젝트 개요"]},"1654":{"title":"프로젝트 버전","titles":["프로젝트 개요"]},"1655":{"title":"기술 스택 요약","titles":["프로젝트 개요"]},"1656":{"title":"핵심 프레임워크","titles":["프로젝트 개요","기술 스택 요약"]},"1657":{"title":"UI 프레임워크","titles":["프로젝트 개요","기술 스택 요약"]},"1658":{"title":"주요 라이브러리","titles":["프로젝트 개요","기술 스택 요약"]},"1659":{"title":"프로젝트 목적","titles":["프로젝트 개요"]},"1660":{"title":"주요 모듈","titles":["프로젝트 개요"]},"1661":{"title":"AXP Framework","titles":["프로젝트 개요","주요 모듈"]},"1662":{"title":"ESS 모듈","titles":["프로젝트 개요","주요 모듈"]},"1663":{"title":"FCM 모듈","titles":["프로젝트 개요","주요 모듈"]},"1664":{"title":"geosan 모듈","titles":["프로젝트 개요","주요 모듈"]},"1665":{"title":"다음 단계","titles":["프로젝트 개요"]},"1666":{"title":"프로젝트 구조","titles":[]},"1667":{"title":"전체 디렉토리 구조","titles":["프로젝트 구조"]},"1668":{"title":"주요 디렉토리 설명","titles":["프로젝트 구조"]},"1669":{"title":"/src - 소스 코드","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1670":{"title":"/src/App.vue","titles":["프로젝트 구조","주요 디렉토리 설명","/src - 소스 코드"]},"1671":{"title":"/src/main.js","titles":["프로젝트 구조","주요 디렉토리 설명","/src - 소스 코드"]},"1672":{"title":"/src/CustomAxios.js","titles":["프로젝트 구조","주요 디렉토리 설명","/src - 소스 코드"]},"1673":{"title":"/src/utils - 유틸리티","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1674":{"title":"/src/utils/common/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/utils - 유틸리티"]},"1675":{"title":"/src/utils/stores/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/utils - 유틸리티"]},"1676":{"title":"/src/utils/plugins/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/utils - 유틸리티"]},"1677":{"title":"/src/views - 페이지 컴포넌트","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1678":{"title":"/src/views/axpFramework/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1679":{"title":"/src/views/ess/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1680":{"title":"/src/views/fcm/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1681":{"title":"/src/views/geosan/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1682":{"title":"/src/views/ui/","titles":["프로젝트 구조","주요 디렉토리 설명","/src/views - 페이지 컴포넌트"]},"1683":{"title":"/src/script - 비즈니스 로직","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1684":{"title":"/src/vendor - 외부 라이브러리","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1685":{"title":"/public - 정적 리소스","titles":["프로젝트 구조","주요 디렉토리 설명"]},"1686":{"title":"설정 파일","titles":["프로젝트 구조"]},"1687":{"title":"package.json","titles":["프로젝트 구조","설정 파일"]},"1688":{"title":"vite.config.js","titles":["프로젝트 구조","설정 파일"]},"1689":{"title":".env","titles":["프로젝트 구조","설정 파일"]},"1690":{"title":"jsconfig.json","titles":["프로젝트 구조","설정 파일"]},"1691":{"title":"파일 명명 규칙","titles":["프로젝트 구조"]},"1692":{"title":"다음 단계","titles":["프로젝트 구조"]},"1693":{"title":"시스템 요구사항","titles":[]},"1694":{"title":"필수 소프트웨어","titles":["시스템 요구사항"]},"1695":{"title":"Node.js","titles":["시스템 요구사항","필수 소프트웨어"]},"1696":{"title":"npm 또는 yarn","titles":["시스템 요구사항","필수 소프트웨어"]},"1697":{"title":"Git","titles":["시스템 요구사항","필수 소프트웨어"]},"1698":{"title":"개발 도구","titles":["시스템 요구사항"]},"1699":{"title":"코드 에디터","titles":["시스템 요구사항","개발 도구"]},"1700":{"title":"브라우저","titles":["시스템 요구사항","개발 도구"]},"1701":{"title":"운영 체제","titles":["시스템 요구사항"]},"1702":{"title":"하드웨어 요구사항","titles":["시스템 요구사항"]},"1703":{"title":"최소 사양","titles":["시스템 요구사항","하드웨어 요구사항"]},"1704":{"title":"권장 사양","titles":["시스템 요구사항","하드웨어 요구사항"]},"1705":{"title":"네트워크 요구사항","titles":["시스템 요구사항"]},"1706":{"title":"개발 환경","titles":["시스템 요구사항","네트워크 요구사항"]},"1707":{"title":"환경 변수","titles":["시스템 요구사항","네트워크 요구사항"]},"1708":{"title":"의존성 확인","titles":["시스템 요구사항"]},"1709":{"title":"버전 관리","titles":["시스템 요구사항"]},"1710":{"title":"다음 단계","titles":["시스템 요구사항"]},"1711":{"title":"빠른 시작 가이드","titles":[]},"1712":{"title":"1. 프로젝트 클론 및 설치","titles":["빠른 시작 가이드"]},"1713":{"title":"2. 환경 변수 설정","titles":["빠른 시작 가이드"]},"1714":{"title":"3. 개발 서버 실행","titles":["빠른 시작 가이드"]},"1715":{"title":"4. 기본 로그인","titles":["빠른 시작 가이드"]},"1716":{"title":"5. 첫 번째 컴포넌트 만들기","titles":["빠른 시작 가이드"]},"1717":{"title":"5.1 페이지 컴포넌트 생성","titles":["빠른 시작 가이드","5. 첫 번째 컴포넌트 만들기"]},"1718":{"title":"5.2 라우트 등록","titles":["빠른 시작 가이드","5. 첫 번째 컴포넌트 만들기"]},"1719":{"title":"5.3 메뉴 등록 (선택사항)","titles":["빠른 시작 가이드","5. 첫 번째 컴포넌트 만들기"]},"1720":{"title":"6. API 호출하기","titles":["빠른 시작 가이드"]},"1721":{"title":"7. 공통 컴포넌트 사용하기","titles":["빠른 시작 가이드"]},"1722":{"title":"SelectBoxSQL 사용 예제","titles":["빠른 시작 가이드","7. 공통 컴포넌트 사용하기"]},"1723":{"title":"AG Grid 사용 예제","titles":["빠른 시작 가이드","7. 공통 컴포넌트 사용하기"]},"1724":{"title":"8. Pinia 스토어 사용하기","titles":["빠른 시작 가이드"]},"1725":{"title":"9. 유틸리티 함수 사용하기","titles":["빠른 시작 가이드"]},"1726":{"title":"10. 스타일링","titles":["빠른 시작 가이드"]},"1727":{"title":"Vuetify 컴포넌트 사용","titles":["빠른 시작 가이드","10. 스타일링"]},"1728":{"title":"커스텀 스타일","titles":["빠른 시작 가이드","10. 스타일링"]},"1729":{"title":"다음 단계","titles":["빠른 시작 가이드"]},"1730":{"title":"개발 환경 설정","titles":[]},"1731":{"title":"프로젝트 클론","titles":["개발 환경 설정"]},"1732":{"title":"Node.js 버전 확인","titles":["개발 환경 설정"]},"1733":{"title":"의존성 설치","titles":["개발 환경 설정"]},"1734":{"title":"환경 변수 설정","titles":["개발 환경 설정"]},"1735":{"title":"환경별 설정 파일","titles":["개발 환경 설정","환경 변수 설정"]},"1736":{"title":"개발 서버 실행","titles":["개발 환경 설정"]},"1737":{"title":"빌드","titles":["개발 환경 설정"]},"1738":{"title":"개발 빌드","titles":["개발 환경 설정","빌드"]},"1739":{"title":"스테이징 빌드","titles":["개발 환경 설정","빌드"]},"1740":{"title":"프로덕션 빌드","titles":["개발 환경 설정","빌드"]},"1741":{"title":"빌드 미리보기","titles":["개발 환경 설정"]},"1742":{"title":"추가 설정","titles":["개발 환경 설정"]},"1743":{"title":"아이콘 빌드","titles":["개발 환경 설정","추가 설정"]},"1744":{"title":"ESLint 설정","titles":["개발 환경 설정","추가 설정"]},"1745":{"title":"Prettier 설정","titles":["개발 환경 설정","추가 설정"]},"1746":{"title":"문제 해결","titles":["개발 환경 설정"]},"1747":{"title":"포트 충돌","titles":["개발 환경 설정","문제 해결"]},"1748":{"title":"의존성 설치 오류","titles":["개발 환경 설정","문제 해결"]},"1749":{"title":"환경 변수 인식 안 됨","titles":["개발 환경 설정","문제 해결"]},"1750":{"title":"다음 단계","titles":["개발 환경 설정"]},"1751":{"title":"Markdown Extension Examples","titles":[]},"1752":{"title":"Syntax Highlighting","titles":["Markdown Extension Examples"]},"1753":{"title":"Custom Containers","titles":["Markdown Extension Examples"]},"1754":{"title":"More","titles":["Markdown Extension Examples"]},"1755":{"title":"AXP Dev Docs","titles":[]},"1756":{"title":"이 문서는 무엇인가요?","titles":["AXP Dev Docs"]},"1757":{"title":"처음 온 개발자를 위한 3단계","titles":["AXP Dev Docs"]},"1758":{"title":"1. 프로젝트 전체 그림 이해하기","titles":["AXP Dev Docs","처음 온 개발자를 위한 3단계"]},"1759":{"title":"2. 로컬 개발 환경 구축하기","titles":["AXP Dev Docs","처음 온 개발자를 위한 3단계"]},"1760":{"title":"3. AXP 방식 개발 패턴 익히기","titles":["AXP Dev Docs","처음 온 개발자를 위한 3단계"]},"1761":{"title":"핵심 아키텍처 빠른 링크","titles":["AXP Dev Docs"]},"1762":{"title":"상태 관리 (Pinia Stores)","titles":["AXP Dev Docs","핵심 아키텍처 빠른 링크"]},"1763":{"title":"HTTP 통신 규약","titles":["AXP Dev Docs","핵심 아키텍처 빠른 링크"]},"1764":{"title":"인증 및 보안","titles":["AXP Dev Docs","핵심 아키텍처 빠른 링크"]},"1765":{"title":"UI 컴포넌트 사용 가이드","titles":["AXP Dev Docs"]},"1766":{"title":"공통 컴포넌트","titles":["AXP Dev Docs","UI 컴포넌트 사용 가이드"]},"1767":{"title":"그리드 컴포넌트","titles":["AXP Dev Docs","UI 컴포넌트 사용 가이드"]},"1768":{"title":"팝업 컴포넌트","titles":["AXP Dev Docs","UI 컴포넌트 사용 가이드"]},"1769":{"title":"레이아웃 컴포넌트","titles":["AXP Dev Docs","UI 컴포넌트 사용 가이드"]},"1770":{"title":"유틸리티 함수","titles":["AXP Dev Docs"]},"1771":{"title":"새 화면을 만들 때 추천 흐름","titles":["AXP Dev Docs"]},"1772":{"title":"1. 페이지 생성","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1773":{"title":"2. 데이터 통신 설계","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1774":{"title":"3. UI 구성","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1775":{"title":"4. 상태 관리","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1776":{"title":"5. 스타일링","titles":["AXP Dev Docs","새 화면을 만들 때 추천 흐름"]},"1777":{"title":"기술 스택","titles":["AXP Dev Docs"]},"1778":{"title":"프로젝트 구조","titles":["AXP Dev Docs"]},"1779":{"title":"모듈별 가이드","titles":["AXP Dev Docs"]},"1780":{"title":"환경 설정","titles":["AXP Dev Docs"]},"1781":{"title":"코딩 컨벤션","titles":["AXP Dev Docs"]},"1782":{"title":"테스트","titles":["AXP Dev Docs"]},"1783":{"title":"빌드 및 배포","titles":["AXP Dev Docs"]},"1784":{"title":"트러블슈팅","titles":["AXP Dev Docs"]},"1785":{"title":"참고 자료","titles":["AXP Dev Docs"]},"1786":{"title":"빠른 참조","titles":["AXP Dev Docs"]},"1787":{"title":"자주 사용하는 함수","titles":["AXP Dev Docs","빠른 참조"]},"1788":{"title":"자주 사용하는 스토어","titles":["AXP Dev Docs","빠른 참조"]},"1789":{"title":"API 호출 기본 패턴","titles":["AXP Dev Docs","빠른 참조"]},"1790":{"title":"다음 단계","titles":["AXP Dev Docs"]},"1791":{"title":"AXP Framework - 인증 모듈","titles":[]},"1792":{"title":"개요","titles":["AXP Framework - 인증 모듈"]},"1793":{"title":"주요 페이지","titles":["AXP Framework - 인증 모듈"]},"1794":{"title":"Login.vue","titles":["AXP Framework - 인증 모듈","주요 페이지"]},"1795":{"title":"AdminLogin.vue","titles":["AXP Framework - 인증 모듈","주요 페이지"]},"1796":{"title":"register.vue","titles":["AXP Framework - 인증 모듈","주요 페이지"]},"1797":{"title":"로그인 프로세스","titles":["AXP Framework - 인증 모듈"]},"1798":{"title":"관련 문서","titles":["AXP Framework - 인증 모듈"]},"1799":{"title":"ESS 모듈 - 인사 관리","titles":[]},"1800":{"title":"개요","titles":["ESS 모듈 - 인사 관리"]},"1801":{"title":"주요 페이지","titles":["ESS 모듈 - 인사 관리"]},"1802":{"title":"PiMyPersonnelInformation.vue","titles":["ESS 모듈 - 인사 관리","주요 페이지"]},"1803":{"title":"PaAttendanceRequest.vue","titles":["ESS 모듈 - 인사 관리","주요 페이지"]},"1804":{"title":"PcBillReqHipass.vue","titles":["ESS 모듈 - 인사 관리","주요 페이지"]},"1805":{"title":"PoOrganizationChart.vue","titles":["ESS 모듈 - 인사 관리","주요 페이지"]},"1806":{"title":"관련 스크립트","titles":["ESS 모듈 - 인사 관리"]},"1807":{"title":"FCM 모듈 - ERP 기능","titles":[]},"1808":{"title":"개요","titles":["FCM 모듈 - ERP 기능"]},"1809":{"title":"디렉토리 구조","titles":["FCM 모듈 - ERP 기능"]},"1810":{"title":"주요 기능","titles":["FCM 모듈 - ERP 기능"]},"1811":{"title":"geosan 모듈 - BI 기능","titles":[]},"1812":{"title":"개요","titles":["geosan 모듈 - BI 기능"]},"1813":{"title":"디렉토리 구조","titles":["geosan 모듈 - BI 기능"]},"1814":{"title":"주요 기능","titles":["geosan 모듈 - BI 기능"]},"1815":{"title":"전체 디렉토리 구조","titles":[]},"1816":{"title":"프로젝트 루트 구조","titles":["전체 디렉토리 구조"]},"1817":{"title":"src 디렉토리 상세 구조","titles":["전체 디렉토리 구조"]},"1818":{"title":"주요 디렉토리 설명","titles":["전체 디렉토리 구조"]},"1819":{"title":"/src/script","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1820":{"title":"/src/utils/common","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1821":{"title":"/src/utils/stores","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1822":{"title":"/src/utils/plugins","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1823":{"title":"/src/views","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1824":{"title":"/src/vendor","titles":["전체 디렉토리 구조","주요 디렉토리 설명"]},"1825":{"title":"파일 명명 규칙","titles":["전체 디렉토리 구조"]},"1826":{"title":"컴포넌트 파일","titles":["전체 디렉토리 구조","파일 명명 규칙"]},"1827":{"title":"유틸리티 파일","titles":["전체 디렉토리 구조","파일 명명 규칙"]},"1828":{"title":"상수 파일","titles":["전체 디렉토리 구조","파일 명명 규칙"]},"1829":{"title":"경로 별칭 (Alias)","titles":["전체 디렉토리 구조"]},"1830":{"title":"사용 예제","titles":["전체 디렉토리 구조","경로 별칭 (Alias)"]},"1831":{"title":"다음 단계","titles":["전체 디렉토리 구조"]},"1832":{"title":"public 디렉토리","titles":[]},"1833":{"title":"개요","titles":["public 디렉토리"]},"1834":{"title":"디렉토리 구조","titles":["public 디렉토리"]},"1835":{"title":"주요 파일","titles":["public 디렉토리"]},"1836":{"title":"favicon.ico","titles":["public 디렉토리","주요 파일"]},"1837":{"title":"logo.png","titles":["public 디렉토리","주요 파일"]},"1838":{"title":"loader.css","titles":["public 디렉토리","주요 파일"]},"1839":{"title":"custom-css/","titles":["public 디렉토리","주요 파일"]},"1840":{"title":"custom.css","titles":["public 디렉토리","주요 파일","custom-css/"]},"1841":{"title":"custom-datepicker.css","titles":["public 디렉토리","주요 파일","custom-css/"]},"1842":{"title":"custom-orgchart.css","titles":["public 디렉토리","주요 파일","custom-css/"]},"1843":{"title":"파일 참조 방법","titles":["public 디렉토리"]},"1844":{"title":"절대 경로 사용","titles":["public 디렉토리","파일 참조 방법"]},"1845":{"title":"동적 경로 사용","titles":["public 디렉토리","파일 참조 방법"]},"1846":{"title":"CSS 파일 임포트","titles":["public 디렉토리","파일 참조 방법"]},"1847":{"title":"빌드 시 처리","titles":["public 디렉토리"]},"1848":{"title":"주의사항","titles":["public 디렉토리"]},"1849":{"title":"관련 문서","titles":["public 디렉토리"]},"1850":{"title":"스크립트 파일","titles":[]},"1851":{"title":"개요","titles":["스크립트 파일"]},"1852":{"title":"파일 위치","titles":["스크립트 파일"]},"1853":{"title":"디렉토리 구조","titles":["스크립트 파일"]},"1854":{"title":"사용 목적","titles":["스크립트 파일"]},"1855":{"title":"사용 예제","titles":["스크립트 파일"]},"1856":{"title":"src 디렉토리","titles":[]},"1857":{"title":"개요","titles":["src 디렉토리"]},"1858":{"title":"디렉토리 구조","titles":["src 디렉토리"]},"1859":{"title":"주요 파일","titles":["src 디렉토리"]},"1860":{"title":"App.vue","titles":["src 디렉토리","주요 파일"]},"1861":{"title":"main.js","titles":["src 디렉토리","주요 파일"]},"1862":{"title":"CustomAxios.js","titles":["src 디렉토리","주요 파일"]},"1863":{"title":"디렉토리별 상세 설명","titles":["src 디렉토리"]},"1864":{"title":"views/","titles":["src 디렉토리","디렉토리별 상세 설명"]},"1865":{"title":"utils/","titles":["src 디렉토리","디렉토리별 상세 설명"]},"1866":{"title":"관련 문서","titles":["src 디렉토리"]},"1867":{"title":"공통 유틸리티","titles":[]},"1868":{"title":"개요","titles":["공통 유틸리티"]},"1869":{"title":"파일 위치","titles":["공통 유틸리티"]},"1870":{"title":"주요 파일","titles":["공통 유틸리티"]},"1871":{"title":"common.js","titles":["공통 유틸리티","주요 파일"]},"1872":{"title":"comfcm.js","titles":["공통 유틸리티","주요 파일"]},"1873":{"title":"자동 임포트","titles":["공통 유틸리티"]},"1874":{"title":"관련 문서","titles":["공통 유틸리티"]},"1875":{"title":"언어 및 국제화","titles":[]},"1876":{"title":"개요","titles":["언어 및 국제화"]},"1877":{"title":"디렉토리 구조","titles":["언어 및 국제화"]},"1878":{"title":"주요 파일","titles":["언어 및 국제화"]},"1879":{"title":"i18n.js","titles":["언어 및 국제화","주요 파일"]},"1880":{"title":"agGrid/ko-KR.js","titles":["언어 및 국제화","주요 파일"]},"1881":{"title":"사용 방법","titles":["언어 및 국제화"]},"1882":{"title":"Composition API에서 사용","titles":["언어 및 국제화","사용 방법"]},"1883":{"title":"Options API에서 사용","titles":["언어 및 국제화","사용 방법"]},"1884":{"title":"숫자 형식 사용","titles":["언어 및 국제화","사용 방법"]},"1885":{"title":"메시지 추가","titles":["언어 및 국제화"]},"1886":{"title":"언어 변경","titles":["언어 및 국제화"]},"1887":{"title":"AG Grid 로케일 적용","titles":["언어 및 국제화"]},"1888":{"title":"관련 문서","titles":["언어 및 국제화"]},"1889":{"title":"플러그인 설정","titles":[]},"1890":{"title":"개요","titles":["플러그인 설정"]},"1891":{"title":"디렉토리 구조","titles":["플러그인 설정"]},"1892":{"title":"주요 플러그인","titles":["플러그인 설정"]},"1893":{"title":"Pinia (pinia.js)","titles":["플러그인 설정","주요 플러그인"]},"1894":{"title":"Vue Router (router/)","titles":["플러그인 설정","주요 플러그인"]},"1895":{"title":"routes.js","titles":["플러그인 설정","주요 플러그인","Vue Router (router/)"]},"1896":{"title":"index.js","titles":["플러그인 설정","주요 플러그인","Vue Router (router/)"]},"1897":{"title":"Vuetify (vuetify/)","titles":["플러그인 설정","주요 플러그인"]},"1898":{"title":"index.js","titles":["플러그인 설정","주요 플러그인","Vuetify (vuetify/)"]},"1899":{"title":"defaults.js","titles":["플러그인 설정","주요 플러그인","Vuetify (vuetify/)"]},"1900":{"title":"icons.js","titles":["플러그인 설정","주요 플러그인","Vuetify (vuetify/)"]},"1901":{"title":"theme.js","titles":["플러그인 설정","주요 플러그인","Vuetify (vuetify/)"]},"1902":{"title":"Iconify (iconify/)","titles":["플러그인 설정","주요 플러그인"]},"1903":{"title":"WebFontLoader (webfontloader.js)","titles":["플러그인 설정","주요 플러그인"]},"1904":{"title":"플러그인 등록","titles":["플러그인 설정"]},"1905":{"title":"커스텀 플러그인 추가","titles":["플러그인 설정"]},"1906":{"title":"관련 문서","titles":["플러그인 설정"]},"1907":{"title":"Pinia 스토어","titles":[]},"1908":{"title":"개요","titles":["Pinia 스토어"]},"1909":{"title":"디렉토리 구조","titles":["Pinia 스토어"]},"1910":{"title":"주요 스토어","titles":["Pinia 스토어"]},"1911":{"title":"authStore.js","titles":["Pinia 스토어","주요 스토어"]},"1912":{"title":"loadingStore.js","titles":["Pinia 스토어","주요 스토어"]},"1913":{"title":"menuStore.js","titles":["Pinia 스토어","주요 스토어"]},"1914":{"title":"sessionStore.js","titles":["Pinia 스토어","주요 스토어"]},"1915":{"title":"modalStore.js","titles":["Pinia 스토어","주요 스토어"]},"1916":{"title":"tabStore.js","titles":["Pinia 스토어","주요 스토어"]},"1917":{"title":"sidebarStore.js","titles":["Pinia 스토어","주요 스토어"]},"1918":{"title":"logStore.js","titles":["Pinia 스토어","주요 스토어"]},"1919":{"title":"스토어 사용 패턴","titles":["Pinia 스토어"]},"1920":{"title":"Composition API에서 사용","titles":["Pinia 스토어","스토어 사용 패턴"]},"1921":{"title":"Options API에서 사용","titles":["Pinia 스토어","스토어 사용 패턴"]},"1922":{"title":"스토어 생성 가이드","titles":["Pinia 스토어"]},"1923":{"title":"관련 문서","titles":["Pinia 스토어"]},"1924":{"title":"벤더 라이브러리","titles":[]},"1925":{"title":"개요","titles":["벤더 라이브러리"]},"1926":{"title":"디렉토리 구조","titles":["벤더 라이브러리"]},"1927":{"title":"주요 디렉토리","titles":["벤더 라이브러리"]},"1928":{"title":"@core","titles":["벤더 라이브러리","주요 디렉토리"]},"1929":{"title":"@layouts","titles":["벤더 라이브러리","주요 디렉토리"]},"1930":{"title":"@dashboard","titles":["벤더 라이브러리","주요 디렉토리"]},"1931":{"title":"assets","titles":["벤더 라이브러리","주요 디렉토리"]},"1932":{"title":"axpFramework 모듈","titles":[]},"1933":{"title":"개요","titles":["axpFramework 모듈"]},"1934":{"title":"디렉토리 구조","titles":["axpFramework 모듈"]},"1935":{"title":"주요 컴포넌트","titles":["axpFramework 모듈"]},"1936":{"title":"Login.vue","titles":["axpFramework 모듈","주요 컴포넌트"]},"1937":{"title":"AdminLogin.vue","titles":["axpFramework 모듈","주요 컴포넌트"]},"1938":{"title":"Main.vue","titles":["axpFramework 모듈","주요 컴포넌트"]},"1939":{"title":"Dashboard.vue","titles":["axpFramework 모듈","주요 컴포넌트"]},"1940":{"title":"ESS 모듈 뷰 컴포넌트","titles":[]},"1941":{"title":"개요","titles":["ESS 모듈 뷰 컴포넌트"]},"1942":{"title":"디렉토리 구조","titles":["ESS 모듈 뷰 컴포넌트"]},"1943":{"title":"주요 컴포넌트","titles":["ESS 모듈 뷰 컴포넌트"]},"1944":{"title":"인사 관리 (persadm)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1945":{"title":"PaAttendanceRequest.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","인사 관리 (persadm)"]},"1946":{"title":"PiMyPersonnelInformation.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","인사 관리 (persadm)"]},"1947":{"title":"PoOrganizationChart.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","인사 관리 (persadm)"]},"1948":{"title":"관리자 기능 (admin)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1949":{"title":"AsSMSManagement.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","관리자 기능 (admin)"]},"1950":{"title":"법인카드 (creditcard)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1951":{"title":"BillApproveList.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","법인카드 (creditcard)"]},"1952":{"title":"교육 (education)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1953":{"title":"EtEduRequest.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","교육 (education)"]},"1954":{"title":"평가 (estimation)","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1955":{"title":"EbAdminEstimationStatistics.vue","titles":["ESS 모듈 뷰 컴포넌트","주요 컴포넌트","평가 (estimation)"]},"1956":{"title":"공통 패턴","titles":["ESS 모듈 뷰 컴포넌트"]},"1957":{"title":"API 호출 패턴","titles":["ESS 모듈 뷰 컴포넌트","공통 패턴"]},"1958":{"title":"세션 정보 사용","titles":["ESS 모듈 뷰 컴포넌트","공통 패턴"]},"1959":{"title":"관련 문서","titles":["ESS 모듈 뷰 컴포넌트"]},"1960":{"title":"FCM 모듈 뷰 컴포넌트","titles":[]},"1961":{"title":"개요","titles":["FCM 모듈 뷰 컴포넌트"]},"1962":{"title":"디렉토리 구조","titles":["FCM 모듈 뷰 컴포넌트"]},"1963":{"title":"주요 컴포넌트","titles":["FCM 모듈 뷰 컴포넌트"]},"1964":{"title":"ERP 모듈 (erp/sys)","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1965":{"title":"sys1200.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","ERP 모듈 (erp/sys)"]},"1966":{"title":"sys1710.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","ERP 모듈 (erp/sys)"]},"1967":{"title":"sys5300.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","ERP 모듈 (erp/sys)"]},"1968":{"title":"HR 모듈 (hr/hri)","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1969":{"title":"Hri1000.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","HR 모듈 (hr/hri)"]},"1970":{"title":"Hri1000TabContents.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","HR 모듈 (hr/hri)"]},"1971":{"title":"hri5100.vue","titles":["FCM 모듈 뷰 컴포넌트","주요 컴포넌트","HR 모듈 (hr/hri)"]},"1972":{"title":"공통 패턴","titles":["FCM 모듈 뷰 컴포넌트"]},"1973":{"title":"검색 폼 구조","titles":["FCM 모듈 뷰 컴포넌트","공통 패턴"]},"1974":{"title":"그리드 사용","titles":["FCM 모듈 뷰 컴포넌트","공통 패턴"]},"1975":{"title":"관련 문서","titles":["FCM 모듈 뷰 컴포넌트"]},"1976":{"title":"geosan 모듈 뷰 컴포넌트","titles":[]},"1977":{"title":"개요","titles":["geosan 모듈 뷰 컴포넌트"]},"1978":{"title":"디렉토리 구조","titles":["geosan 모듈 뷰 컴포넌트"]},"1979":{"title":"주요 컴포넌트","titles":["geosan 모듈 뷰 컴포넌트"]},"1980":{"title":"고객 관리 (BI/Customer)","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1981":{"title":"CustomerList.vue","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","고객 관리 (BI/Customer)"]},"1982":{"title":"CustomerGrpList.vue","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","고객 관리 (BI/Customer)"]},"1983":{"title":"CustomerListPop.vue","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","고객 관리 (BI/Customer)"]},"1984":{"title":"CustomerGrpPop.vue","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","고객 관리 (BI/Customer)"]},"1985":{"title":"데이터 파일","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트"]},"1986":{"title":"CustomerListData.js","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","데이터 파일"]},"1987":{"title":"CustomerGrpListData.js","titles":["geosan 모듈 뷰 컴포넌트","주요 컴포넌트","데이터 파일"]},"1988":{"title":"공통 패턴","titles":["geosan 모듈 뷰 컴포넌트"]},"1989":{"title":"검색 폼 구조","titles":["geosan 모듈 뷰 컴포넌트","공통 패턴"]},"1990":{"title":"그리드 사용","titles":["geosan 모듈 뷰 컴포넌트","공통 패턴"]},"1991":{"title":"관련 문서","titles":["geosan 모듈 뷰 컴포넌트"]},"1992":{"title":"UI 컴포넌트 및 레이아웃","titles":[]},"1993":{"title":"개요","titles":["UI 컴포넌트 및 레이아웃"]},"1994":{"title":"디렉토리 구조","titles":["UI 컴포넌트 및 레이아웃"]},"1995":{"title":"공통 컴포넌트 (components/common)","titles":["UI 컴포넌트 및 레이아웃"]},"1996":{"title":"버튼 컴포넌트","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"1997":{"title":"ButtonBox.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","버튼 컴포넌트"]},"1998":{"title":"입력 컴포넌트","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"1999":{"title":"InputPhone.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","입력 컴포넌트"]},"2000":{"title":"로딩 컴포넌트","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"2001":{"title":"Loading.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","로딩 컴포넌트"]},"2002":{"title":"조회 컴포넌트 (lookup)","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"2003":{"title":"LookUpBox.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","조회 컴포넌트 (lookup)"]},"2004":{"title":"선택 컴포넌트 (select)","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"2005":{"title":"SelectBoxSQL.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","선택 컴포넌트 (select)"]},"2006":{"title":"SelectBoxDate.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","선택 컴포넌트 (select)"]},"2007":{"title":"MultiSelectBoxSQL.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","선택 컴포넌트 (select)"]},"2008":{"title":"트리 컴포넌트 (tree)","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)"]},"2009":{"title":"TreeDeptDropdown.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","트리 컴포넌트 (tree)"]},"2010":{"title":"TreeEmpDropdown.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","트리 컴포넌트 (tree)"]},"2011":{"title":"TreeOrgNode.vue","titles":["UI 컴포넌트 및 레이아웃","공통 컴포넌트 (components/common)","트리 컴포넌트 (tree)"]},"2012":{"title":"그리드 컴포넌트 (components/grid)","titles":["UI 컴포넌트 및 레이아웃"]},"2013":{"title":"GridClickField.vue","titles":["UI 컴포넌트 및 레이아웃","그리드 컴포넌트 (components/grid)"]},"2014":{"title":"GridContextMenu.vue","titles":["UI 컴포넌트 및 레이아웃","그리드 컴포넌트 (components/grid)"]},"2015":{"title":"GridMultiSelectWrapper.vue","titles":["UI 컴포넌트 및 레이아웃","그리드 컴포넌트 (components/grid)"]},"2016":{"title":"메뉴 컴포넌트 (components/menu)","titles":["UI 컴포넌트 및 레이아웃"]},"2017":{"title":"MenuSideBar.vue","titles":["UI 컴포넌트 및 레이아웃","메뉴 컴포넌트 (components/menu)"]},"2018":{"title":"MenuHeaderBar.vue","titles":["UI 컴포넌트 및 레이아웃","메뉴 컴포넌트 (components/menu)"]},"2019":{"title":"MenuBmk.vue","titles":["UI 컴포넌트 및 레이아웃","메뉴 컴포넌트 (components/menu)"]},"2020":{"title":"팝업 컴포넌트 (components/popup)","titles":["UI 컴포넌트 및 레이아웃"]},"2021":{"title":"PopupApproval.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2022":{"title":"PopupApproveList.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2023":{"title":"PopupFileLink.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2024":{"title":"PopupLog.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2025":{"title":"PopupPageLog.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2026":{"title":"PopupSmsTemplateList.vue","titles":["UI 컴포넌트 및 레이아웃","팝업 컴포넌트 (components/popup)"]},"2027":{"title":"레이아웃 컴포넌트 (layouts)","titles":["UI 컴포넌트 및 레이아웃"]},"2028":{"title":"blank.vue","titles":["UI 컴포넌트 및 레이아웃","레이아웃 컴포넌트 (layouts)"]},"2029":{"title":"default.vue","titles":["UI 컴포넌트 및 레이아웃","레이아웃 컴포넌트 (layouts)"]},"2030":{"title":"popBlank.vue","titles":["UI 컴포넌트 및 레이아웃","레이아웃 컴포넌트 (layouts)"]},"2031":{"title":"관련 문서","titles":["UI 컴포넌트 및 레이아웃"]},"2032":{"title":"주요 클래스/함수 참조","titles":[]},"2033":{"title":"유틸리티 함수","titles":["주요 클래스/함수 참조"]},"2034":{"title":"스토어","titles":["주요 클래스/함수 참조"]},"2035":{"title":"API 호출","titles":["주요 클래스/함수 참조"]},"2036":{"title":"설정 파일 참조","titles":[]},"2037":{"title":"주요 설정 파일","titles":["설정 파일 참조"]},"2038":{"title":"package.json","titles":["설정 파일 참조","주요 설정 파일"]},"2039":{"title":"vite.config.js","titles":["설정 파일 참조","주요 설정 파일"]},"2040":{"title":".env","titles":["설정 파일 참조","주요 설정 파일"]},"2041":{"title":"jsconfig.json","titles":["설정 파일 참조","주요 설정 파일"]},"2042":{"title":"플러그인 설정","titles":["설정 파일 참조"]},"2043":{"title":"router/routes.js","titles":["설정 파일 참조","플러그인 설정"]},"2044":{"title":"pinia.js","titles":["설정 파일 참조","플러그인 설정"]},"2045":{"title":"vuetify/index.js","titles":["설정 파일 참조","플러그인 설정"]},"2046":{"title":"외부 라이브러리 문서","titles":[]},"2047":{"title":"Vue 3","titles":["외부 라이브러리 문서"]},"2048":{"title":"Vite","titles":["외부 라이브러리 문서"]},"2049":{"title":"Pinia","titles":["외부 라이브러리 문서"]},"2050":{"title":"Vuetify","titles":["외부 라이브러리 문서"]},"2051":{"title":"Vue Router","titles":["외부 라이브러리 문서"]},"2052":{"title":"AG Grid","titles":["외부 라이브러리 문서"]},"2053":{"title":"Axios","titles":["외부 라이브러리 문서"]},"2054":{"title":"자주 묻는 질문 (FAQ)","titles":[]},"2055":{"title":"Q: 자동 임포트가 작동하지 않아요","titles":["자주 묻는 질문 (FAQ)"]},"2056":{"title":"Q: 컴포넌트를 찾을 수 없어요","titles":["자주 묻는 질문 (FAQ)"]},"2057":{"title":"Q: API 호출 시 401 에러가 발생해요","titles":["자주 묻는 질문 (FAQ)"]},"2058":{"title":"Q: 환경 변수가 적용되지 않아요","titles":["자주 묻는 질문 (FAQ)"]},"2059":{"title":"Q: 빌드가 실패해요","titles":["자주 묻는 질문 (FAQ)"]},"2060":{"title":"아이콘 사용법","titles":[]},"2061":{"title":"Iconify","titles":["아이콘 사용법"]},"2062":{"title":"사용 예제","titles":["아이콘 사용법"]},"2063":{"title":"아이콘 빌드","titles":["아이콘 사용법"]},"2064":{"title":"아이콘 라이브러리","titles":["아이콘 사용법"]},"2065":{"title":"HTTP 클라이언트 (Axios)","titles":[]},"2066":{"title":"개요","titles":["HTTP 클라이언트 (Axios)"]},"2067":{"title":"커스텀 인스턴스","titles":["HTTP 클라이언트 (Axios)"]},"2068":{"title":"주요 기능","titles":["HTTP 클라이언트 (Axios)"]},"2069":{"title":"사용법","titles":["HTTP 클라이언트 (Axios)"]},"2070":{"title":"차트 라이브러리","titles":[]},"2071":{"title":"ApexCharts","titles":["차트 라이브러리"]},"2072":{"title":"ECharts","titles":["차트 라이브러리"]},"2073":{"title":"사용 목적","titles":["차트 라이브러리"]},"2074":{"title":"프레임워크 및 라이브러리","titles":[]},"2075":{"title":"Vue 3","titles":["프레임워크 및 라이브러리"]},"2076":{"title":"버전","titles":["프레임워크 및 라이브러리","Vue 3"]},"2077":{"title":"주요 특징","titles":["프레임워크 및 라이브러리","Vue 3"]},"2078":{"title":"사용 예제","titles":["프레임워크 및 라이브러리","Vue 3"]},"2079":{"title":"자동 임포트","titles":["프레임워크 및 라이브러리","Vue 3"]},"2080":{"title":"Vite","titles":["프레임워크 및 라이브러리"]},"2081":{"title":"버전","titles":["프레임워크 및 라이브러리","Vite"]},"2082":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","Vite"]},"2083":{"title":"주요 플러그인","titles":["프레임워크 및 라이브러리","Vite"]},"2084":{"title":"Pinia","titles":["프레임워크 및 라이브러리"]},"2085":{"title":"버전","titles":["프레임워크 및 라이브러리","Pinia"]},"2086":{"title":"특징","titles":["프레임워크 및 라이브러리","Pinia"]},"2087":{"title":"스토어 구조","titles":["프레임워크 및 라이브러리","Pinia"]},"2088":{"title":"Vue Router","titles":["프레임워크 및 라이브러리"]},"2089":{"title":"버전","titles":["프레임워크 및 라이브러리","Vue Router"]},"2090":{"title":"라우팅 구조","titles":["프레임워크 및 라이브러리","Vue Router"]},"2091":{"title":"라우트 가드","titles":["프레임워크 및 라이브러리","Vue Router"]},"2092":{"title":"Axios","titles":["프레임워크 및 라이브러리"]},"2093":{"title":"버전","titles":["프레임워크 및 라이브러리","Axios"]},"2094":{"title":"커스텀 인스턴스","titles":["프레임워크 및 라이브러리","Axios"]},"2095":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","Axios"]},"2096":{"title":"AG Grid","titles":["프레임워크 및 라이브러리"]},"2097":{"title":"버전","titles":["프레임워크 및 라이브러리","AG Grid"]},"2098":{"title":"사용 목적","titles":["프레임워크 및 라이브러리","AG Grid"]},"2099":{"title":"주요 기능","titles":["프레임워크 및 라이브러리","AG Grid"]},"2100":{"title":"차트 라이브러리","titles":["프레임워크 및 라이브러리"]},"2101":{"title":"ApexCharts","titles":["프레임워크 및 라이브러리","차트 라이브러리"]},"2102":{"title":"ECharts","titles":["프레임워크 및 라이브러리","차트 라이브러리"]},"2103":{"title":"사용 목적","titles":["프레임워크 및 라이브러리","차트 라이브러리"]},"2104":{"title":"Excel 처리","titles":["프레임워크 및 라이브러리"]},"2105":{"title":"ExcelJS","titles":["프레임워크 및 라이브러리","Excel 처리"]},"2106":{"title":"사용 목적","titles":["프레임워크 및 라이브러리","Excel 처리"]},"2107":{"title":"암호화","titles":["프레임워크 및 라이브러리"]},"2108":{"title":"CryptoJS","titles":["프레임워크 및 라이브러리","암호화"]},"2109":{"title":"사용 목적","titles":["프레임워크 및 라이브러리","암호화"]},"2110":{"title":"기타 주요 라이브러리","titles":["프레임워크 및 라이브러리"]},"2111":{"title":"파일 처리","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2112":{"title":"PDF 처리","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2113":{"title":"날짜 처리","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2114":{"title":"드래그 앤 드롭","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2115":{"title":"트리 뷰","titles":["프레임워크 및 라이브러리","기타 주요 라이브러리"]},"2116":{"title":"다음 단계","titles":["프레임워크 및 라이브러리"]},"2117":{"title":"그리드 라이브러리 (AG Grid)","titles":[]},"2118":{"title":"개요","titles":["그리드 라이브러리 (AG Grid)"]},"2119":{"title":"주요 기능","titles":["그리드 라이브러리 (AG Grid)"]},"2120":{"title":"사용 예제","titles":["그리드 라이브러리 (AG Grid)"]},"2121":{"title":"상태 관리 (Pinia)","titles":[]},"2122":{"title":"개요","titles":["상태 관리 (Pinia)"]},"2123":{"title":"주요 스토어","titles":["상태 관리 (Pinia)"]},"2124":{"title":"사용법","titles":["상태 관리 (Pinia)"]},"2125":{"title":"상태 영속화","titles":["상태 관리 (Pinia)"]},"2126":{"title":"기타 유틸리티","titles":[]},"2127":{"title":"Excel 처리","titles":["기타 유틸리티"]},"2128":{"title":"암호화","titles":["기타 유틸리티"]},"2129":{"title":"파일 처리","titles":["기타 유틸리티"]},"2130":{"title":"PDF 처리","titles":["기타 유틸리티"]},"2131":{"title":"날짜 처리","titles":["기타 유틸리티"]},"2132":{"title":"드래그 앤 드롭","titles":["기타 유틸리티"]},"2133":{"title":"트리 뷰","titles":["기타 유틸리티"]},"2134":{"title":"라우팅 (Vue Router)","titles":[]},"2135":{"title":"개요","titles":["라우팅 (Vue Router)"]},"2136":{"title":"라우트 정의","titles":["라우팅 (Vue Router)"]},"2137":{"title":"동적 라우팅","titles":["라우팅 (Vue Router)"]},"2138":{"title":"라우트 가드","titles":["라우팅 (Vue Router)"]},"2139":{"title":"UI 프레임워크 (Vuetify)","titles":[]},"2140":{"title":"개요","titles":["UI 프레임워크 (Vuetify)"]},"2141":{"title":"주요 컴포넌트","titles":["UI 프레임워크 (Vuetify)"]},"2142":{"title":"테마","titles":["UI 프레임워크 (Vuetify)"]},"2143":{"title":"로케일","titles":["UI 프레임워크 (Vuetify)"]},"2144":{"title":"컴포넌트 테스트","titles":[]},"2145":{"title":"개요","titles":["컴포넌트 테스트"]},"2146":{"title":"테스트 예제","titles":["컴포넌트 테스트"]},"2147":{"title":"스토어 통합 테스트","titles":["컴포넌트 테스트"]},"2148":{"title":"E2E 테스트","titles":[]},"2149":{"title":"개요","titles":["E2E 테스트"]},"2150":{"title":"테스트 프레임워크","titles":["E2E 테스트"]},"2151":{"title":"테스트 예제","titles":["E2E 테스트"]},"2152":{"title":"테스트 실행","titles":["E2E 테스트"]},"2153":{"title":"단위 테스트","titles":[]},"2154":{"title":"개요","titles":["단위 테스트"]},"2155":{"title":"테스트 프레임워크","titles":["단위 테스트"]},"2156":{"title":"유틸리티 함수 테스트","titles":["단위 테스트"]},"2157":{"title":"스토어 테스트","titles":["단위 테스트"]},"2158":{"title":"테스트 실행","titles":["단위 테스트"]},"2159":{"title":"API 통신 문제","titles":[]},"2160":{"title":"CORS 오류","titles":["API 통신 문제"]},"2161":{"title":"타임아웃","titles":["API 통신 문제"]},"2162":{"title":"429 에러","titles":["API 통신 문제"]},"2163":{"title":"암호화 오류","titles":["API 통신 문제"]},"2164":{"title":"인증 관련 문제","titles":[]},"2165":{"title":"토큰 만료","titles":["인증 관련 문제"]},"2166":{"title":"Refresh Token 만료","titles":["인증 관련 문제"]},"2167":{"title":"토큰이 저장되지 않음","titles":["인증 관련 문제"]},"2168":{"title":"인증 상태가 유지되지 않음","titles":["인증 관련 문제"]},"2169":{"title":"빌드 오류","titles":[]},"2170":{"title":"일반적인 빌드 오류","titles":["빌드 오류"]},"2171":{"title":"타입 오류","titles":["빌드 오류","일반적인 빌드 오류"]},"2172":{"title":"의존성 오류","titles":["빌드 오류","일반적인 빌드 오류"]},"2173":{"title":"경로 오류","titles":["빌드 오류","일반적인 빌드 오류"]},"2174":{"title":"메모리 오류","titles":["빌드 오류","일반적인 빌드 오류"]},"2175":{"title":"빌드 최적화","titles":["빌드 오류"]},"2176":{"title":"일반적인 문제 해결","titles":[]},"2177":{"title":"포트 충돌","titles":["일반적인 문제 해결"]},"2178":{"title":"의존성 설치 오류","titles":["일반적인 문제 해결"]},"2179":{"title":"환경 변수 인식 안 됨","titles":["일반적인 문제 해결"]},"2180":{"title":"빌드 오류","titles":["일반적인 문제 해결"]},"2181":{"title":"토큰 갱신 실패","titles":["일반적인 문제 해결"]},"2182":{"title":"런타임 오류","titles":[]},"2183":{"title":"일반적인 런타임 오류","titles":["런타임 오류"]},"2184":{"title":"컴포넌트를 찾을 수 없음","titles":["런타임 오류","일반적인 런타임 오류"]},"2185":{"title":"스토어를 찾을 수 없음","titles":["런타임 오류","일반적인 런타임 오류"]},"2186":{"title":"라우트를 찾을 수 없음","titles":["런타임 오류","일반적인 런타임 오류"]},"2187":{"title":"API 요청 실패","titles":["런타임 오류","일반적인 런타임 오류"]},"2188":{"title":"디버깅","titles":["런타임 오류"]},"2189":{"title":"배열/객체 처리","titles":[]},"2190":{"title":"개요","titles":["배열/객체 처리"]},"2191":{"title":"주요 함수","titles":["배열/객체 처리"]},"2192":{"title":"gfArrayToObject(array, keyField, valueField)","titles":["배열/객체 처리","주요 함수"]},"2193":{"title":"gfGetRowTable(listData)","titles":["배열/객체 처리","주요 함수"]},"2194":{"title":"gfGetJsonFilter(data, key, values)","titles":["배열/객체 처리","주요 함수"]},"2195":{"title":"gfJsonDataValidation(jsonData, _code)","titles":["배열/객체 처리","주요 함수"]},"2196":{"title":"gfCloneJson(obj)","titles":["배열/객체 처리","주요 함수"]},"2197":{"title":"gfObjectToString(obj, log)","titles":["배열/객체 처리","주요 함수"]},"2198":{"title":"관련 문서","titles":["배열/객체 처리"]},"2199":{"title":"공통 유틸리티 (common.js)","titles":[]},"2200":{"title":"개요","titles":["공통 유틸리티 (common.js)"]},"2201":{"title":"파일 위치","titles":["공통 유틸리티 (common.js)"]},"2202":{"title":"주요 함수 카테고리","titles":["공통 유틸리티 (common.js)"]},"2203":{"title":"1. 기본 유틸리티/검증 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2204":{"title":"gfIsEmpty(value)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","1. 기본 유틸리티/검증 함수"]},"2205":{"title":"gfNvl(val, defaultVal)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","1. 기본 유틸리티/검증 함수"]},"2206":{"title":"2. 날짜/시간 관련 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2207":{"title":"gfFormatDateString(dateStr, delimiter)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","2. 날짜/시간 관련 함수"]},"2208":{"title":"gfFormatDateTime(date)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","2. 날짜/시간 관련 함수"]},"2209":{"title":"gfAddDay(date, add)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","2. 날짜/시간 관련 함수"]},"2210":{"title":"gfDiffDate(fromDate, toDate)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","2. 날짜/시간 관련 함수"]},"2211":{"title":"3. 숫자 처리 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2212":{"title":"gfNumberFormat(number, decimals, decPoint, thousandsSep)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","3. 숫자 처리 함수"]},"2213":{"title":"4. 문자열 처리 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2214":{"title":"gfTrim(str)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","4. 문자열 처리 함수"]},"2215":{"title":"5. 배열/객체 처리 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2216":{"title":"gfArrayToObject(array, keyField, valueField)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","5. 배열/객체 처리 함수"]},"2217":{"title":"6. 파일 처리 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2218":{"title":"gfDownloadFile(data, fileName, mimeType)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","6. 파일 처리 함수"]},"2219":{"title":"7. 검증 함수","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리"]},"2220":{"title":"gfValidateResidentNumber(residentNumber)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","7. 검증 함수"]},"2221":{"title":"gfIsDate(str)","titles":["공통 유틸리티 (common.js)","주요 함수 카테고리","7. 검증 함수"]},"2222":{"title":"자동 임포트","titles":["공통 유틸리티 (common.js)"]},"2223":{"title":"사용 예제","titles":["공통 유틸리티 (common.js)"]},"2224":{"title":"날짜 처리","titles":["공통 유틸리티 (common.js)","사용 예제"]},"2225":{"title":"숫자 포맷팅","titles":["공통 유틸리티 (common.js)","사용 예제"]},"2226":{"title":"데이터 검증","titles":["공통 유틸리티 (common.js)","사용 예제"]},"2227":{"title":"관련 문서","titles":["공통 유틸리티 (common.js)"]},"2228":{"title":"암호화/복호화","titles":[]},"2229":{"title":"개요","titles":["암호화/복호화"]},"2230":{"title":"주요 함수","titles":["암호화/복호화"]},"2231":{"title":"encryptObject(data)","titles":["암호화/복호화","주요 함수"]},"2232":{"title":"decryptObject(data)","titles":["암호화/복호화","주요 함수"]},"2233":{"title":"encryptBinary(bytes, file)","titles":["암호화/복호화","주요 함수"]},"2234":{"title":"자동 암호화","titles":["암호화/복호화"]},"2235":{"title":"관련 문서","titles":["암호화/복호화"]},"2236":{"title":"날짜 처리","titles":[]},"2237":{"title":"개요","titles":["날짜 처리"]},"2238":{"title":"주요 함수","titles":["날짜 처리"]},"2239":{"title":"gfFormatDateString(dateStr, delimiter)","titles":["날짜 처리","주요 함수"]},"2240":{"title":"gfFormatDateTime(date)","titles":["날짜 처리","주요 함수"]},"2241":{"title":"gfFormatDateTimeString(pDate)","titles":["날짜 처리","주요 함수"]},"2242":{"title":"gfAddDay(date, add)","titles":["날짜 처리","주요 함수"]},"2243":{"title":"gfDiffDate(fromDate, toDate)","titles":["날짜 처리","주요 함수"]},"2244":{"title":"gfAddMonth(date, val)","titles":["날짜 처리","주요 함수"]},"2245":{"title":"gfFormatDateWithSep(date)","titles":["날짜 처리","주요 함수"]},"2246":{"title":"gfTimestampToDateStr(date)","titles":["날짜 처리","주요 함수"]},"2247":{"title":"gfConvertTimestamp(pDate)","titles":["날짜 처리","주요 함수"]},"2248":{"title":"gfToday()","titles":["날짜 처리","주요 함수"]},"2249":{"title":"gfDayFormat(str)","titles":["날짜 처리","주요 함수"]},"2250":{"title":"날짜 드롭다운 생성","titles":["날짜 처리"]},"2251":{"title":"gfSetYearBox()","titles":["날짜 처리","날짜 드롭다운 생성"]},"2252":{"title":"gfSetMonthBox()","titles":["날짜 처리","날짜 드롭다운 생성"]},"2253":{"title":"gfSetDayBox()","titles":["날짜 처리","날짜 드롭다운 생성"]},"2254":{"title":"관련 문서","titles":["날짜 처리"]},"2255":{"title":"Excel 처리","titles":[]},"2256":{"title":"개요","titles":["Excel 처리"]},"2257":{"title":"주요 함수","titles":["Excel 처리"]},"2258":{"title":"gfHtmlExcelDown(obj)","titles":["Excel 처리","주요 함수"]},"2259":{"title":"gfSaveTableAsExcel(id, fileName)","titles":["Excel 처리","주요 함수"]},"2260":{"title":"gfSaveAgGridAsExcel(gridApi, fileName)","titles":["Excel 처리","주요 함수"]},"2261":{"title":"gfSaveAgGridAsExcel_2(columns, rowData, fileName)","titles":["Excel 처리","주요 함수"]},"2262":{"title":"ExcelJS 직접 사용","titles":["Excel 처리"]},"2263":{"title":"관련 문서","titles":["Excel 처리"]},"2264":{"title":"파일 처리","titles":[]},"2265":{"title":"개요","titles":["파일 처리"]},"2266":{"title":"주요 함수","titles":["파일 처리"]},"2267":{"title":"gfFileDownload(obj)","titles":["파일 처리","주요 함수"]},"2268":{"title":"gfGetUserImage(empCode, compCode)","titles":["파일 처리","주요 함수"]},"2269":{"title":"파일 다운로드","titles":["파일 처리"]},"2270":{"title":"관련 문서","titles":["파일 처리"]},"2271":{"title":"숫자 처리","titles":[]},"2272":{"title":"개요","titles":["숫자 처리"]},"2273":{"title":"주요 함수","titles":["숫자 처리"]},"2274":{"title":"gfNumberFormat(number, decimals, decPoint, thousandsSep)","titles":["숫자 처리","주요 함수"]},"2275":{"title":"gfSetNumber(str)","titles":["숫자 처리","주요 함수"]},"2276":{"title":"gfGetComma(val)","titles":["숫자 처리","주요 함수"]},"2277":{"title":"gfGetThreeComma(val)","titles":["숫자 처리","주요 함수"]},"2278":{"title":"gfrRemoveComma(val)","titles":["숫자 처리","주요 함수"]},"2279":{"title":"gfFillZeros(n, digits)","titles":["숫자 처리","주요 함수"]},"2280":{"title":"gfGetNumber(str)","titles":["숫자 처리","주요 함수"]},"2281":{"title":"gfGetRound(val, unit)","titles":["숫자 처리","주요 함수"]},"2282":{"title":"관련 문서","titles":["숫자 처리"]},"2283":{"title":"IndexedDB 유틸리티","titles":[]},"2284":{"title":"개요","titles":["IndexedDB 유틸리티"]},"2285":{"title":"파일 위치","titles":["IndexedDB 유틸리티"]},"2286":{"title":"주요 함수","titles":["IndexedDB 유틸리티"]},"2287":{"title":"saveToIndexedDB(key, value)","titles":["IndexedDB 유틸리티","주요 함수"]},"2288":{"title":"loadFromIndexedDB(key)","titles":["IndexedDB 유틸리티","주요 함수"]},"2289":{"title":"getKeyIndexedDB()","titles":["IndexedDB 유틸리티","주요 함수"]},"2290":{"title":"removeKeyIndexedDB(key)","titles":["IndexedDB 유틸리티","주요 함수"]},"2291":{"title":"removeAllKeyIndexedDB()","titles":["IndexedDB 유틸리티","주요 함수"]},"2292":{"title":"getPageData(pageData, callback)","titles":["IndexedDB 유틸리티","주요 함수"]},"2293":{"title":"데이터 압축","titles":["IndexedDB 유틸리티"]},"2294":{"title":"탭 스토어 연동","titles":["IndexedDB 유틸리티"]},"2295":{"title":"주의사항","titles":["IndexedDB 유틸리티"]},"2296":{"title":"관련 문서","titles":["IndexedDB 유틸리티"]},"2297":{"title":"FCM 유틸리티","titles":[]},"2298":{"title":"개요","titles":["FCM 유틸리티"]},"2299":{"title":"파일 위치","titles":["FCM 유틸리티"]},"2300":{"title":"현재 상태","titles":["FCM 유틸리티"]},"2301":{"title":"주요 함수 (주석 처리됨)","titles":["FCM 유틸리티"]},"2302":{"title":"gfIsEmpty(obj)","titles":["FCM 유틸리티","주요 함수 (주석 처리됨)"]},"2303":{"title":"gfAddDay(date, add)","titles":["FCM 유틸리티","주요 함수 (주석 처리됨)"]},"2304":{"title":"gfObjectToString(obj, log)","titles":["FCM 유틸리티","주요 함수 (주석 처리됨)"]},"2305":{"title":"gfGetThreeComma(val)","titles":["FCM 유틸리티","주요 함수 (주석 처리됨)"]},"2306":{"title":"활성화된 함수","titles":["FCM 유틸리티"]},"2307":{"title":"사용 가이드","titles":["FCM 유틸리티"]},"2308":{"title":"함수 활성화","titles":["FCM 유틸리티","사용 가이드"]},"2309":{"title":"대안 사용","titles":["FCM 유틸리티","사용 가이드"]},"2310":{"title":"향후 계획","titles":["FCM 유틸리티"]},"2311":{"title":"관련 문서","titles":["FCM 유틸리티"]},"2312":{"title":"문자열 처리","titles":[]},"2313":{"title":"개요","titles":["문자열 처리"]},"2314":{"title":"주요 함수","titles":["문자열 처리"]},"2315":{"title":"gfTrim(str)","titles":["문자열 처리","주요 함수"]},"2316":{"title":"gfCamelToSnakeUpper(str)","titles":["문자열 처리","주요 함수"]},"2317":{"title":"gfSnakeToCamel(str)","titles":["문자열 처리","주요 함수"]},"2318":{"title":"gfFormIdStr(val)","titles":["문자열 처리","주요 함수"]},"2319":{"title":"gfSetClobData(strString, strAppend, strSeparator, strNull)","titles":["문자열 처리","주요 함수"]},"2320":{"title":"gfObjectToString(obj, log)","titles":["문자열 처리","주요 함수"]},"2321":{"title":"전화번호 처리","titles":["문자열 처리"]},"2322":{"title":"gfCheckPhoneHyphen(phoneNum)","titles":["문자열 처리","전화번호 처리"]},"2323":{"title":"gfCheckPhoneNumber(p_num)","titles":["문자열 처리","전화번호 처리"]},"2324":{"title":"gfMobliePhoneFormat(str)","titles":["문자열 처리","전화번호 처리"]},"2325":{"title":"관련 문서","titles":["문자열 처리"]},"2326":{"title":"폼 검증","titles":[]},"2327":{"title":"개요","titles":["폼 검증"]},"2328":{"title":"주요 함수","titles":["폼 검증"]},"2329":{"title":"gfIsEmpty(value)","titles":["폼 검증","주요 함수"]},"2330":{"title":"gfIsDate(str)","titles":["폼 검증","주요 함수"]},"2331":{"title":"gfValidateResidentNumber(residentNumber)","titles":["폼 검증","주요 함수"]},"2332":{"title":"gfCheckPhoneNumber(p_num)","titles":["폼 검증","주요 함수"]},"2333":{"title":"폼 검증 예제","titles":["폼 검증"]},"2334":{"title":"관련 문서","titles":["폼 검증"]}},"dirtCount":0,"index":[["콤마",{"2":{"2304":1}}],["콤마를",{"2":{"2278":1}}],["향후",{"0":{"2310":1},"2":{"2300":1}}],["향상을",{"2":{"1704":1}}],["향상",{"2":{"432":2,"1659":2}}],["채워",{"2":{"2279":1}}],["채우기",{"2":{"180":1,"709":1}}],["월",{"2":{"2221":1,"2252":1,"2330":1}}],["앞뒤",{"2":{"2214":1,"2315":1}}],["천",{"2":{"2212":1,"2275":1,"2276":1,"2277":1}}],["빼기",{"2":{"2209":1}}],["음수",{"2":{"2209":1}}],["양수",{"2":{"2209":1}}],["증감",{"2":{"2209":1,"2303":2}}],["뺍니다",{"2":{"2209":1,"2242":1,"2244":1}}],["깊은",{"2":{"2196":1}}],["깊이",{"2":{"1729":1}}],["임시",{"2":{"2171":1}}],["임포트합니다",{"2":{"2079":1}}],["임포트가",{"0":{"2055":1}}],["임포트할",{"2":{"1846":1}}],["임포트를",{"2":{"1744":1}}],["임포트되므로",{"2":{"1725":1,"1770":1,"1873":1,"2200":1,"2222":1}}],["임포트됩니다",{"2":{"1584":1}}],["임포트",{"0":{"1204":1,"1584":1,"1846":1,"1873":1,"2079":1,"2222":1},"1":{"1205":1,"1206":1},"2":{"1199":2,"1653":2,"1659":1,"1817":1,"1838":1,"1840":1,"1841":1,"1842":1,"1846":1,"1861":1,"2083":2,"2184":1}}],["줄이세요",{"2":{"2162":1}}],["효율적으로",{"2":{"2098":1}}],["효율적인",{"2":{"2077":1}}],["효율성",{"2":{"1659":1}}],["푸터",{"2":{"2028":1}}],["축소",{"2":{"2011":1}}],["점포코드",{"2":{"1981":2}}],["현황",{"2":{"1955":1}}],["현재는",{"2":{"60":1}}],["현재",{"0":{"126":1,"1358":1,"2300":1},"2":{"56":1,"126":1,"248":1,"388":1,"636":1,"687":1,"705":1,"1404":1,"1409":1,"1416":1,"1473":1,"1480":1,"1913":2,"1915":1,"1916":1,"2018":1,"2161":1,"2208":2,"2298":1,"2300":1,"2306":1,"2309":1}}],["평가",{"0":{"1954":1},"1":{"1955":1},"2":{"1942":1,"1946":1,"1955":3}}],["평문",{"2":{"210":1,"211":1,"641":1}}],["법인카드",{"0":{"1950":1},"1":{"1951":1},"2":{"1942":1,"1951":2}}],["팔레트",{"2":{"1901":1}}],["색상",{"2":{"1901":3}}],["히스토리",{"2":{"1896":1}}],["₩1",{"2":{"1884":1}}],["폴백",{"2":{"1879":1}}],["폴더와",{"2":{"1748":1}}],["폴더에",{"2":{"1740":1}}],["폴더가",{"2":{"1708":1}}],["국제화",{"0":{"1875":1},"1":{"1876":1,"1877":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1887":1,"1888":1},"2":{"1858":1,"1876":1,"1888":1}}],["국산",{"2":{"427":1,"834":1}}],["좋습니다",{"2":{"1848":1}}],["것으로",{"2":{"2300":1}}],["것이",{"2":{"1848":1}}],["것을",{"2":{"38":1,"466":1}}],["달력",{"2":{"1841":1}}],["애니메이션",{"2":{"1838":2}}],["애플리케이션을",{"2":{"1486":1,"1736":1}}],["애플리케이션에서",{"2":{"1890":1}}],["애플리케이션에",{"2":{"1373":1}}],["애플리케이션이",{"2":{"505":1}}],["애플리케이션",{"0":{"232":1,"369":1,"491":1,"498":1,"504":1},"1":{"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"370":1,"371":1,"492":1,"493":1,"494":1,"499":1,"500":1,"501":1,"502":1,"503":1,"505":1,"506":1,"507":1},"2":{"232":1,"275":1,"285":1,"344":1,"425":2,"432":1,"439":1,"472":1,"514":1,"520":1,"554":1,"558":1,"564":1,"568":1,"765":1,"960":1,"1086":1,"1652":1,"1667":1,"1769":1,"1817":1,"1837":1,"1858":1,"1938":1}}],["애플리케이션의",{"2":{"208":1,"451":1,"615":1,"1377":1,"1393":1,"1402":1,"1422":1,"1471":1,"1670":1,"1671":1,"1857":1,"1860":1,"1861":1}}],["담은",{"2":{"1819":1,"1851":1}}],["담당합니다",{"2":{"1652":1}}],["담당하는",{"2":{"615":1}}],["청구",{"2":{"1804":1,"1942":3,"1951":2}}],["청크로",{"2":{"1496":1}}],["청크",{"0":{"1500":1},"2":{"1169":1,"1500":1,"1501":1}}],["근태",{"2":{"1803":1,"1942":1,"1945":3}}],["본인",{"2":{"1802":1,"1942":1,"1946":1}}],["본문은",{"2":{"139":1,"393":1}}],["본문에서",{"2":{"801":1}}],["본문에",{"2":{"83":1,"87":1}}],["본문의",{"2":{"76":1,"224":1,"671":1}}],["본문",{"2":{"9":1,"30":1,"31":1,"32":1,"33":1,"34":1,"46":1,"56":1,"57":1,"65":1,"76":1,"77":1,"79":1,"80":1,"92":1,"99":1,"100":1,"101":1,"119":1,"120":1,"121":1,"216":1,"607":1,"670":2,"671":1,"698":1,"732":1}}],["팁",{"2":{"1790":1}}],["💡",{"2":{"1790":1}}],["되셨다면",{"2":{"1790":1}}],["묻는",{"0":{"2054":1},"1":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"1785":1}}],["런타임",{"0":{"2182":1,"2183":1},"1":{"2183":1,"2184":2,"2185":2,"2186":2,"2187":2,"2188":1},"2":{"1784":2}}],["할",{"2":{"1781":1}}],["벤더",{"0":{"1924":1},"1":{"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1,"1931":1},"2":{"1778":1}}],["쓰리콤마가",{"2":{"2305":1}}],["쓰리콤마로",{"2":{"2305":1}}],["쓰는",{"2":{"1765":1}}],["쓰기",{"2":{"878":1,"2106":1,"2127":1}}],["규약",{"0":{"1763":1}}],["규칙입니다",{"2":{"1781":1}}],["규칙을",{"2":{"346":1,"393":1}}],["규칙",{"0":{"47":1,"50":1,"104":1,"184":1,"346":1,"393":1,"447":1,"449":1,"539":1,"542":1,"544":1,"565":1,"659":1,"712":1,"1370":1,"1557":1,"1564":1,"1569":1,"1575":1,"1607":1,"1612":1,"1622":1,"1691":1,"1825":1},"1":{"48":1,"49":1,"50":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"448":1,"449":1,"540":1,"541":1,"543":1,"545":1,"546":1,"660":1,"661":1,"713":1,"714":1,"715":1,"716":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1565":1,"1566":1,"1567":1,"1568":1,"1570":1,"1571":1,"1572":1,"1573":1,"1574":1,"1576":1,"1577":1,"1578":1,"1579":1,"1580":1,"1826":1,"1827":1,"1828":1},"2":{"122":1,"226":1,"363":1,"384":1,"385":1,"386":1,"393":2,"398":1,"404":1,"518":1,"581":1,"680":1,"1756":1,"1781":5}}],["됨",{"0":{"1749":1,"2179":1}}],["콘솔과",{"2":{"2188":1}}],["콘솔",{"2":{"2167":1}}],["콘솔에",{"2":{"1747":1}}],["콘텐츠",{"2":{"1088":1}}],["품질을",{"2":{"1744":1}}],["미리",{"2":{"1741":1}}],["미리보기",{"0":{"1741":1},"2":{"1156":1}}],["됩니다",{"2":{"1735":1,"1763":1}}],["먼저",{"2":{"1731":1}}],["학습하세요",{"2":{"1729":1}}],["더하기",{"2":{"2209":1}}],["더하거나",{"2":{"2209":1,"2242":1,"2244":1}}],["더",{"2":{"1729":1,"2077":1,"2086":1}}],["익명",{"2":{"2205":1}}],["익히세요",{"2":{"1790":1}}],["익히기",{"0":{"1760":1},"2":{"515":1}}],["익혔다면",{"2":{"1729":1}}],["김철수",{"2":{"1723":1,"2193":2,"2258":1}}],["⚠️",{"2":{"1715":1}}],["속도",{"2":{"1704":1}}],["속성으로",{"2":{"1861":1}}],["속성을",{"2":{"984":1}}],["속성",{"2":{"226":1,"680":1,"761":1,"953":2,"954":3,"1026":1,"1033":1}}],["터미널에서",{"2":{"1695":1,"1696":1,"1697":1}}],["견적",{"2":{"1679":1}}],["회계",{"2":{"1810":1,"1961":1}}],["회원가입",{"2":{"1678":1,"1796":1,"1895":1}}],["회사",{"2":{"67":1,"76":1,"120":1,"121":1,"2268":1}}],["회사명",{"2":{"65":1,"66":1}}],["숫자에",{"2":{"2275":1}}],["숫자를",{"2":{"2212":1,"2274":1,"2279":1,"2281":1}}],["숫자",{"0":{"1884":1,"2211":1,"2225":1,"2271":1},"1":{"2212":1,"2272":1,"2273":1,"2274":1,"2275":1,"2276":1,"2277":1,"2278":1,"2279":1,"2280":1,"2281":1,"2282":1},"2":{"1674":1,"1770":3,"1787":1,"1820":1,"1871":1,"1879":2,"2033":1,"2210":1,"2212":2,"2227":1,"2272":1,"2311":1}}],["숫자만",{"2":{"71":1,"744":1,"2280":1}}],["교육",{"0":{"1952":1},"1":{"1953":1},"2":{"1662":1,"1679":1,"1942":1,"1946":2,"1953":3}}],["교체",{"0":{"1493":1}}],["편의성",{"2":{"1659":1}}],["편집",{"2":{"1071":1,"2099":1,"2119":1}}],["차이",{"2":{"2210":1}}],["차이를",{"2":{"2210":1,"2243":1}}],["차트를",{"2":{"2073":1,"2103":1}}],["차트",{"0":{"2070":1,"2100":1},"1":{"2071":1,"2072":1,"2073":1,"2101":1,"2102":1,"2103":1},"2":{"1658":2,"1777":2}}],["차단",{"2":{"226":1,"680":1,"761":1}}],["독립적으로",{"2":{"1653":1}}],["풍부한",{"2":{"1653":1}}],["집중식",{"2":{"1653":1}}],["집약적",{"2":{"1221":1}}],["을",{"2":{"1652":1,"2079":1}}],["믹스인",{"0":{"1640":1}}],["계획",{"0":{"2310":1}}],["계정을",{"2":{"1715":1}}],["계산할",{"2":{"2303":1}}],["계산하고",{"2":{"2303":1}}],["계산합니다",{"2":{"2210":1,"2243":1}}],["계산",{"2":{"1613":1,"1770":2}}],["계층적",{"2":{"2009":1,"2017":1}}],["계층",{"2":{"565":1}}],["계층별로",{"2":{"372":1}}],["계층별",{"0":{"378":1},"1":{"379":1,"380":1,"381":1},"2":{"76":1,"565":1}}],["완벽한",{"2":{"2086":1}}],["완성된",{"0":{"1608":1},"1":{"1609":1}}],["완료되면",{"2":{"1708":1,"1736":1}}],["완료되었다면",{"2":{"1619":1,"1750":1}}],["완료",{"2":{"57":1,"70":1,"78":1,"396":7,"738":1}}],["부족",{"2":{"2174":1}}],["부분을",{"2":{"1652":1}}],["부모",{"2":{"1606":1,"1621":1}}],["부서별",{"2":{"1947":1,"1969":1,"2010":1}}],["부서",{"2":{"1027":1,"1043":1,"1048":1,"1077":1,"1609":1,"1945":1,"1949":1,"1969":1,"1970":1,"2009":3}}],["부서명",{"2":{"65":1,"66":1}}],["슬롯",{"0":{"1594":1}}],["카멜케이스로",{"2":{"2317":1}}],["카멜케이스를",{"2":{"2316":1}}],["카드",{"2":{"1899":1,"2141":1}}],["카운트",{"2":{"1574":1}}],["카테고리",{"0":{"2202":1},"1":{"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1},"2":{"861":1}}],["화살표",{"2":{"1566":1}}],["화면을",{"0":{"1771":1},"1":{"1772":1,"1773":1,"1774":1,"1775":1,"1776":1}}],["화면별",{"2":{"1444":1}}],["화면",{"2":{"1082":1,"1442":1,"1444":2,"1445":3,"1756":1}}],["세미콜론",{"2":{"1565":1}}],["세션이",{"2":{"1262":1,"1276":1,"1337":1}}],["세션에",{"2":{"1252":1}}],["세션을",{"2":{"79":1}}],["세션",{"0":{"79":1,"1238":1,"1240":1,"1248":1,"1249":1,"1250":1,"1251":1,"1446":1,"1958":1},"1":{"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"1452":1,"1453":1,"1454":1},"2":{"56":1,"76":3,"77":1,"87":2,"224":1,"286":1,"430":1,"465":1,"671":1,"849":1,"906":2,"1209":1,"1222":1,"1239":3,"1240":1,"1242":1,"1247":1,"1248":1,"1249":1,"1250":1,"1251":1,"1253":1,"1272":1,"1273":1,"1282":1,"1447":1,"1449":1,"1451":1,"1454":2,"1675":1,"1762":2,"1764":3,"1788":1,"1794":1,"1797":2,"1798":1,"1909":1,"1914":6,"1923":1,"1958":2,"2034":1,"2123":1,"2234":1}}],["들여쓰기",{"2":{"1565":1}}],["코딩",{"0":{"1565":1,"1781":1},"2":{"1781":1}}],["코드이거나",{"2":{"2300":1}}],["코드에서",{"2":{"1847":1}}],["코드는",{"2":{"1497":1}}],["코드를",{"2":{"1493":1,"1496":1,"1848":1,"2077":1}}],["코드2",{"2":{"1035":1}}],["코드1",{"2":{"1035":1}}],["코드가",{"2":{"560":1,"1669":1,"1857":1}}],["코드",{"0":{"37":1,"138":1,"438":1,"550":1,"553":1,"1273":1,"1496":1,"1613":1,"1669":1,"1699":1},"1":{"439":1,"440":1,"441":1,"551":1,"552":1,"554":1,"555":1,"556":1,"1670":1,"1671":1,"1672":1},"2":{"30":1,"37":1,"44":1,"67":2,"76":1,"120":2,"121":2,"277":1,"393":1,"432":1,"437":1,"478":2,"549":3,"551":1,"552":1,"562":1,"630":1,"864":1,"992":1,"1034":1,"1035":1,"1043":1,"1077":1,"1164":1,"1175":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1305":1,"1505":2,"1532":1,"1568":1,"1667":1,"1744":1,"1745":1,"1816":1,"1893":1,"1895":1,"1898":1,"2175":1,"2195":1,"2268":2,"2302":1}}],["나이",{"2":{"1548":1,"2262":1}}],["나머지는",{"2":{"1261":1}}],["친화적으로",{"2":{"1536":1}}],["친화적",{"0":{"1536":1}}],["백오프",{"2":{"1534":1}}],["백엔드의",{"2":{"1607":1,"1622":1}}],["백엔드에서",{"2":{"1604":1,"1626":1,"1719":1}}],["백엔드",{"0":{"1606":1,"1621":1},"2":{"1191":1,"1370":1,"1517":1,"1606":1,"1621":1,"1706":1,"1707":1,"1772":1,"2160":1}}],["못함",{"2":{"1530":1}}],["못했을",{"2":{"1358":1}}],["폼",{"0":{"1973":1,"1989":1,"2326":1,"2333":1},"1":{"2327":1,"2328":1,"2329":1,"2330":1,"2331":1,"2332":1,"2333":1,"2334":1},"2":{"1526":1,"1770":1,"1973":1,"1989":1}}],["판단합니다",{"2":{"1501":1}}],["핫",{"0":{"1493":1}}],["올바른",{"2":{"2226":1,"2333":1}}],["올바른지",{"2":{"1353":1,"1487":1}}],["올바르게",{"2":{"1485":1}}],["많습니다",{"2":{"1468":1}}],["펼쳐진",{"2":{"1467":1}}],["펼치기",{"2":{"1456":1,"1458":1,"1461":1,"1463":2,"1917":2,"2017":1}}],["항상",{"2":{"1467":1,"1539":1,"1568":1,"1614":1}}],["항목",{"0":{"1270":1},"2":{"2007":1}}],["항목의",{"2":{"51":1}}],["신용카드",{"2":{"1662":1,"1679":1}}],["신청",{"2":{"1435":1,"1803":1,"1942":1,"1945":2,"1953":2}}],["신규는",{"2":{"45":1}}],["신규",{"2":{"43":1,"45":4,"49":1,"514":1,"651":2,"655":1,"656":1,"1756":1,"1879":1}}],["엽니다",{"2":{"1426":1,"1475":1}}],["토글합니다",{"2":{"1460":1,"1461":1}}],["토글",{"2":{"1419":1,"1460":2,"1463":2,"1917":2,"1918":1}}],["토큰은",{"2":{"77":1,"1390":1}}],["토큰만",{"2":{"57":1}}],["토큰을",{"2":{"57":1,"76":1,"78":1,"803":1,"974":1,"1263":1,"1272":1,"1377":1,"1380":1,"1382":1,"1383":1,"1390":1}}],["토큰과",{"2":{"23":1}}],["토큰이",{"0":{"2167":1},"2":{"17":1,"23":1,"873":1,"1390":1,"2057":1,"2167":1}}],["토큰",{"0":{"14":1,"18":1,"24":1,"59":1,"83":1,"84":1,"86":1,"299":1,"300":1,"301":1,"308":1,"309":1,"310":1,"355":1,"809":1,"812":1,"813":1,"814":1,"818":1,"963":1,"966":1,"967":1,"1225":1,"1231":1,"1232":1,"1254":1,"1259":1,"1276":1,"1312":1,"1332":1,"1335":1,"1337":1,"2165":1,"2181":1},"1":{"15":1,"16":1,"17":1,"18":1,"19":2,"20":2,"21":2,"22":1,"23":1,"24":1,"25":1,"26":1,"356":1,"357":1,"810":1,"811":1,"815":1,"816":1,"817":1,"964":1,"965":1,"1226":1,"1227":1,"1233":1,"1234":1,"1235":1,"1255":1,"1256":1,"1257":1,"1258":1,"1259":1,"1260":1,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1336":1,"1337":1},"2":{"7":1,"9":1,"14":1,"17":5,"21":1,"23":3,"24":2,"25":1,"28":1,"39":1,"41":1,"53":1,"54":1,"56":3,"57":5,"59":2,"61":1,"63":1,"76":4,"78":2,"84":1,"88":1,"90":1,"117":1,"132":1,"141":1,"219":4,"220":2,"230":1,"286":1,"391":1,"430":1,"465":1,"516":2,"529":1,"576":2,"594":2,"630":2,"634":3,"635":2,"672":4,"803":1,"813":2,"849":1,"873":1,"917":1,"967":2,"974":1,"1230":1,"1236":1,"1237":1,"1249":1,"1252":1,"1256":1,"1258":1,"1267":1,"1272":1,"1273":1,"1275":2,"1276":1,"1289":2,"1294":2,"1307":1,"1332":1,"1343":1,"1379":1,"1382":1,"1387":1,"1390":3,"1391":1,"1418":1,"1525":1,"1635":1,"1653":1,"1672":1,"1762":1,"1763":3,"1764":2,"1794":1,"1797":1,"1862":2,"2068":2,"2095":2,"2165":1,"2166":1}}],["게터",{"0":{"1384":1},"1":{"1385":1}}],["찾을",{"0":{"2056":1,"2184":1,"2185":1,"2186":1},"2":{"1527":1,"1536":1,"2173":1}}],["찾지",{"2":{"1358":1}}],["찾음",{"2":{"1060":1}}],["같이",{"2":{"1348":1,"1370":1,"1607":1,"1622":1}}],["같은",{"2":{"130":1,"432":1,"505":1,"1252":1,"1563":1,"1659":1,"1829":1,"1957":1,"1973":1,"1989":1}}],["^",{"2":{"1326":1,"2319":2}}],["베스트",{"0":{"1306":1,"1539":1,"1610":1},"1":{"1611":1,"1612":1,"1613":1,"1614":1,"1615":1}}],["취소",{"2":{"1295":1,"1942":1}}],["취소되고",{"2":{"1287":1}}],["블록에서",{"2":{"1289":1}}],["블랭크",{"0":{"1078":1},"1":{"1079":1,"1080":1,"1081":1,"1082":1,"1083":1},"2":{"1769":1}}],["잠시",{"2":{"1286":1,"1296":1,"1333":1,"1529":1,"1536":1}}],["무효화",{"2":{"1848":1}}],["무한",{"2":{"1264":1}}],["무엇인가요",{"0":{"514":1,"1756":1}}],["횟수를",{"2":{"1264":1}}],["횟수",{"2":{"1264":1}}],["진입점과",{"2":{"1857":1}}],["진입점",{"2":{"1667":1,"1817":1,"1858":1}}],["진입점입니다",{"2":{"451":1,"1671":1,"1861":1}}],["진행",{"2":{"1264":1,"1295":1,"1358":1}}],["영어로",{"2":{"1886":1}}],["영어",{"2":{"1879":2}}],["영속화가",{"2":{"1390":1}}],["영속화",{"0":{"1251":1,"2125":1},"2":{"1893":1,"2085":1,"2086":1}}],["영역",{"2":{"367":1,"1088":1,"2029":1}}],["닫습니다",{"2":{"1427":1,"1477":1,"1478":1}}],["닫아도",{"2":{"1239":1,"1420":1}}],["닫기",{"2":{"1090":2,"1435":1,"1915":1}}],["초기",{"2":{"1986":2,"1987":1,"2292":1}}],["초기화됩니다",{"2":{"1380":1,"2168":1}}],["초기화합니다",{"2":{"1247":1,"1383":1,"1417":1}}],["초기화",{"0":{"1234":1,"1249":1},"2":{"1249":2,"1419":1,"1433":1,"1434":1,"1435":1,"1613":1,"1911":1,"1918":1,"2185":1}}],["초과",{"2":{"975":1}}],["길음",{"2":{"1227":1}}],["갱신됩니다",{"2":{"2168":1}}],["갱신되지만",{"2":{"2057":1}}],["갱신은",{"2":{"1289":1}}],["갱신이",{"2":{"1264":1,"1390":1}}],["갱신할",{"2":{"1263":1,"1390":1}}],["갱신을",{"2":{"1256":1,"1261":1,"1390":1,"1525":1}}],["갱신합니다",{"2":{"1231":1}}],["갱신",{"0":{"1231":1,"1254":1,"1256":1,"1257":1,"1262":1,"1263":1,"1276":1,"1332":1,"1335":1,"1337":1,"2181":1},"1":{"1255":1,"1256":1,"1257":1,"1258":2,"1259":2,"1260":2,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1336":1,"1337":1},"2":{"1227":1,"1237":1,"1258":1,"1261":1,"1264":3,"1275":2,"1276":3,"1289":1,"1294":3,"1307":1,"1332":1,"1336":1,"1337":1,"1343":1,"1390":2,"1391":1,"1525":1,"1763":1,"1764":3,"1862":1,"2068":1,"2095":1,"2165":2,"2166":1}}],["짧음",{"2":{"1226":1}}],["짧게",{"2":{"1159":1}}],["걸릴",{"2":{"1221":1,"2175":1}}],["큰",{"2":{"1221":1,"1252":1,"1848":1,"2175":1}}],["객체로",{"2":{"2192":1,"2216":1}}],["객체에",{"2":{"1885":1}}],["객체",{"0":{"2189":1,"2215":1},"1":{"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2216":1},"2":{"1215":1,"1216":1,"1217":2,"1315":1,"1473":1,"1674":1,"1770":2,"1820":1,"1871":1,"1914":1,"2190":1,"2193":1,"2204":1,"2208":1,"2209":1,"2216":1,"2227":1,"2231":1,"2232":1,"2233":2,"2292":1,"2303":1,"2304":1}}],["객체를",{"2":{"1215":1,"1216":1,"2196":1,"2197":1,"2231":1,"2232":1,"2320":1}}],["객체는",{"2":{"1045":1}}],["마운트",{"2":{"1720":1}}],["마운트합니다",{"2":{"1671":1}}],["마세요",{"2":{"1185":1,"1252":2}}],["마우스",{"2":{"1111":1}}],["민감한",{"2":{"1185":1,"1252":2}}],["붙은",{"2":{"1181":1}}],["압축되어",{"2":{"2293":1}}],["압축",{"0":{"1498":1,"2293":1},"2":{"1175":1,"1498":3,"1505":1}}],["쉐이킹",{"0":{"1497":1},"2":{"1175":1,"1505":1}}],["높이세요",{"2":{"1164":1}}],["긴",{"2":{"1159":1}}],["박스의",{"2":{"1431":1}}],["박스",{"2":{"1131":1,"1766":2,"2005":1,"2007":1}}],["승인취소",{"2":{"1435":1}}],["승인",{"0":{"1122":1,"1128":1},"1":{"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1129":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1},"2":{"1124":1,"1126":2,"1127":1,"1129":1,"1131":1,"1133":1,"1435":1,"1768":2,"1915":1,"1942":2,"1951":2,"2021":2,"2022":1}}],["별칭과",{"2":{"1690":1}}],["별칭을",{"2":{"1159":1,"1164":2,"1829":1}}],["별칭",{"0":{"1158":1,"1161":1,"1201":1,"1829":1},"1":{"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1830":1},"2":{"1162":1,"1164":1,"1688":1,"1780":1,"1830":1,"2173":1}}],["별",{"2":{"1121":1}}],["별도의",{"2":{"263":1,"330":1,"843":1,"1320":1,"1770":1,"1873":1,"2079":1,"2200":1,"2222":1}}],["별도로",{"2":{"77":1,"1289":1}}],["별도",{"2":{"25":1,"670":1}}],["팝업을",{"2":{"2003":1}}],["팝업",{"0":{"1099":1,"1106":1,"1122":1,"1128":1,"1135":1,"1141":1,"1146":1,"1152":1,"1768":1,"2020":1},"1":{"1100":1,"1101":1,"1102":1,"1103":1,"1104":1,"1105":1,"1106":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1129":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1136":1,"1137":1,"1138":1,"1139":1,"1140":1,"1142":1,"1143":1,"1144":1,"1145":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1},"2":{"1101":1,"1103":1,"1124":1,"1127":1,"1129":1,"1131":1,"1133":1,"1137":1,"1142":1,"1144":1,"1148":1,"1154":1,"1374":1,"1582":1,"1682":1,"1762":1,"1766":1,"1768":2,"1769":2,"1817":1,"1895":1,"1978":2,"1983":2,"1984":2,"1994":2,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2030":3,"2031":1}}],["앤",{"0":{"1098":1,"2114":1,"2132":1},"2":{"1096":1,"2114":1,"2132":1}}],["북마크",{"0":{"1092":1},"1":{"1093":1,"1094":1,"1095":1,"1096":1,"1097":1,"1098":1},"2":{"2018":1,"2019":2}}],["┌─────────────────────────────────┐",{"2":{"1089":1}}],["탭에",{"2":{"1836":1}}],["탭을",{"2":{"1475":1,"1476":1,"1477":1,"1478":1,"2188":1}}],["탭으로",{"2":{"1471":1}}],["탭",{"0":{"1090":1,"1470":1,"2294":1},"1":{"1471":1,"1472":1,"1473":1,"1474":1,"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1},"2":{"1088":2,"1089":1,"1090":4,"1118":1,"1471":1,"1473":3,"1476":1,"1477":1,"1479":1,"1480":2,"1675":1,"1762":2,"1909":1,"1916":7,"1923":1,"1970":4,"2029":1,"2123":1,"2294":1,"2296":1}}],["멀티",{"0":{"1074":1},"1":{"1075":1,"1076":1,"1077":1},"2":{"1075":1,"1767":1,"2015":1}}],["엑셀",{"2":{"1071":3,"1435":1}}],["숨겨질",{"2":{"1467":1}}],["숨기고",{"2":{"1319":1}}],["숨기기",{"2":{"1070":1,"1463":1}}],["숨김",{"0":{"1325":1,"1329":1},"2":{"1026":1,"1033":1,"1275":1,"1433":1,"1439":1,"1440":1,"1456":1,"1458":1,"1460":2,"1466":1,"1912":1,"2001":2}}],["핸들러",{"2":{"1059":1,"1433":1,"1578":1}}],["렌더링합니다",{"2":{"1860":1}}],["렌더링",{"2":{"1058":1,"1060":1,"2011":1,"2112":1,"2130":1}}],["렌더링하는",{"2":{"1056":1}}],["노드",{"2":{"1052":1,"1842":1,"2011":2}}],["래퍼입니다",{"2":{"1062":1,"1075":1}}],["래퍼",{"0":{"1061":1},"1":{"1062":1,"1063":1,"1064":1},"2":{"1042":1,"1767":1,"2015":1,"2071":1,"2072":1}}],["래핑",{"2":{"224":1,"671":1}}],["에셋",{"0":{"1499":1},"2":{"1505":1}}],["에디터를",{"2":{"1064":1}}],["에디터",{"0":{"1064":1,"1699":1},"2":{"1767":1}}],["에디터로",{"2":{"1041":1}}],["에러는",{"2":{"1289":1,"1299":1,"1306":1,"1522":1,"1525":2,"1535":1,"1539":1}}],["에러를",{"2":{"1261":1,"1319":1,"1338":1,"1521":1,"1527":1,"1568":1,"1614":1,"2295":1}}],["에러가",{"0":{"2057":1},"2":{"123":1,"1287":1,"1303":1,"1319":1}}],["에러",{"0":{"22":1,"34":1,"37":1,"1258":1,"1285":1,"1286":1,"1287":1,"1288":1,"1291":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1,"1301":1,"1305":1,"1319":1,"1328":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1338":1,"1520":1,"1522":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1531":1,"1532":1,"1533":1,"1535":1,"1536":1,"1538":1,"1556":1,"1568":1,"1614":1,"2162":1},"1":{"23":1,"1286":1,"1287":1,"1288":1,"1292":1,"1293":1,"1294":2,"1295":2,"1296":2,"1297":2,"1298":2,"1299":1,"1300":1,"1301":1,"1302":2,"1303":2,"1304":1,"1305":1,"1306":1,"1307":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1521":1,"1522":1,"1523":1,"1524":1,"1525":2,"1526":2,"1527":2,"1528":2,"1529":2,"1530":2,"1531":1,"1532":2,"1533":2,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1},"2":{"30":3,"31":2,"34":7,"37":2,"67":1,"137":1,"352":1,"403":1,"541":1,"613":2,"632":1,"699":1,"1256":1,"1264":2,"1267":1,"1275":3,"1279":1,"1288":1,"1289":1,"1290":1,"1292":1,"1296":1,"1297":2,"1300":6,"1302":1,"1305":4,"1306":4,"1321":1,"1331":1,"1338":1,"1341":1,"1343":1,"1418":1,"1516":1,"1522":1,"1523":2,"1527":1,"1532":4,"1533":1,"1535":2,"1536":1,"1538":2,"1539":5,"1540":1,"1556":2,"1567":1,"1568":2,"1609":1,"1614":1,"1618":1,"1672":1,"1720":1,"1763":5,"1773":2,"1789":1,"1862":1,"1880":1,"1994":1,"2068":1,"2095":1,"2162":1,"2165":1,"2181":1,"2295":1}}],["셀을",{"2":{"1056":1}}],["셀",{"0":{"1064":1,"1071":1},"2":{"1041":1,"1058":1,"1064":1,"1767":2,"2013":1,"2099":1,"2119":1}}],["너비",{"2":{"1034":1}}],["콜백을",{"2":{"2292":1}}],["콜백",{"0":{"1036":1},"2":{"1033":1}}],["드롭",{"0":{"1098":1,"2114":1,"2132":1},"2":{"1096":1,"2114":1,"2132":1}}],["드롭다운",{"0":{"2250":1},"1":{"2251":1,"2252":1,"2253":1},"2":{"1033":1,"1048":1,"1050":1,"2009":1,"2010":1,"2251":1,"2252":1,"2253":1}}],["드래그",{"0":{"1098":1,"2114":1,"2132":1},"2":{"1096":1,"2114":1,"2132":1}}],["드라이버",{"0":{"485":1},"2":{"462":1,"463":1,"464":1,"551":1,"759":1,"834":2}}],["볼",{"2":{"1031":1,"1741":1}}],["테마도",{"2":{"1647":1,"2142":1}}],["테마는",{"2":{"1647":1,"2142":1}}],["테마",{"0":{"1647":1,"2142":1},"2":{"1898":1,"1901":3}}],["테이블을",{"2":{"2258":1,"2259":1}}],["테이블",{"2":{"1031":1,"2141":1,"2259":1}}],["테스트합니다",{"2":{"1486":1}}],["테스트를",{"2":{"988":1,"991":1,"1700":1}}],["테스트할",{"2":{"144":1,"1719":1}}],["테스트용",{"2":{"80":1}}],["테스트",{"0":{"80":1,"284":1,"871":1,"872":1,"988":1,"991":1,"1486":1,"1616":1,"1618":1,"1782":1,"2144":1,"2146":1,"2147":1,"2148":1,"2150":1,"2151":1,"2152":1,"2153":1,"2155":1,"2156":1,"2157":1,"2158":1},"1":{"872":1,"873":1,"989":1,"990":1,"992":1,"993":1,"1617":1,"1618":1,"2145":1,"2146":1,"2147":1,"2149":1,"2150":1,"2151":1,"2152":1,"2154":1,"2155":1,"2156":1,"2157":1,"2158":1},"2":{"67":1,"275":1,"359":1,"396":1,"437":2,"469":1,"478":1,"518":1,"549":1,"552":4,"557":1,"562":3,"742":1,"856":1,"992":1,"993":1,"1782":7,"1879":1,"2145":1,"2147":1,"2149":1,"2150":1,"2154":1,"2155":1}}],["옵션이",{"2":{"1045":1,"1297":1}}],["옵션을",{"2":{"1031":1,"1390":1,"1527":1}}],["옵션",{"0":{"1168":1},"1":{"1169":1},"2":{"1026":2,"1029":1,"1033":2,"1722":2,"1780":1,"2005":1}}],["라이트",{"2":{"1901":1}}],["라이브러리와",{"2":{"1684":1,"1824":1}}],["라이브러리를",{"2":{"900":1,"938":1,"2073":1,"2103":1}}],["라이브러리의",{"2":{"776":1}}],["라이브러리가",{"2":{"759":1}}],["라이브러리",{"0":{"758":1,"776":1,"900":1,"926":1,"1658":1,"1684":1,"1924":1,"2046":1,"2064":1,"2070":1,"2074":1,"2100":1,"2110":1,"2117":1},"1":{"759":1,"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"901":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":2,"928":2,"929":2,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1,"1931":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1,"2071":1,"2072":1,"2073":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1,"2101":2,"2102":2,"2103":2,"2104":1,"2105":1,"2106":1,"2107":1,"2108":1,"2109":1,"2110":1,"2111":2,"2112":2,"2113":2,"2114":2,"2115":2,"2116":1,"2118":1,"2119":1,"2120":1},"2":{"437":1,"523":1,"551":1,"747":1,"775":1,"1653":1,"1667":1,"1684":1,"1777":3,"1778":1,"1785":1,"1817":1,"1925":1}}],["라우터에",{"2":{"1358":1}}],["라우트는",{"2":{"1365":1,"1602":1,"1624":1,"2090":1,"2136":1}}],["라우트에",{"2":{"1362":1}}],["라우트에서",{"2":{"1091":1}}],["라우트가",{"2":{"1353":1,"1359":1,"1369":1,"1604":2,"1626":2,"2137":1}}],["라우트로",{"2":{"1350":1,"1617":1}}],["라우트",{"0":{"1346":1,"1348":1,"1352":1,"1355":1,"1364":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1601":1,"1602":1,"1603":1,"1623":1,"1624":1,"1625":1,"1718":1,"2091":1,"2136":1,"2138":1},"1":{"1347":1,"1348":1,"1349":1,"1356":1,"1357":1,"1358":1,"1359":1,"1360":1,"1361":1,"1362":1,"1363":1,"1365":1,"1366":1,"1367":1,"1368":2,"1369":2,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1602":1,"1603":1,"1604":1,"1624":1,"1625":1,"1626":1},"2":{"1353":1,"1354":2,"1356":2,"1357":1,"1359":1,"1361":3,"1363":1,"1375":1,"1619":1,"1772":2,"1895":2,"1896":1,"2043":1,"2091":1,"2138":1,"2186":3}}],["라우트를",{"0":{"2186":1},"2":{"1345":1,"1350":1,"1353":1,"1718":1}}],["라우팅을",{"2":{"1670":1,"2090":1,"2135":1}}],["라우팅",{"0":{"1344":1,"1604":1,"1626":1,"2090":1,"2134":1,"2137":1},"1":{"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1351":1,"1352":1,"1353":1,"1354":1,"2135":1,"2136":1,"2137":1,"2138":1},"2":{"1363":1,"1375":1,"1777":2,"1822":1,"1894":1,"2116":1}}],["라벨",{"2":{"1026":2,"1033":1}}],["형태",{"2":{"1058":1}}],["형태로",{"2":{"1031":1}}],["형태의",{"2":{"1022":1,"2073":1,"2103":1}}],["형식을",{"2":{"2226":1,"2333":1}}],["형식인지",{"2":{"2221":1,"2330":1}}],["형식이면",{"2":{"2221":1}}],["형식이",{"2":{"243":1,"494":1}}],["형식입니다",{"2":{"139":1}}],["형식으로도",{"2":{"867":1}}],["형식으로",{"2":{"101":1,"102":1,"135":1,"177":1,"232":1,"541":1,"866":1,"887":1,"2240":1,"2241":1,"2246":1,"2247":1,"2248":1}}],["형식의",{"2":{"36":1,"175":1,"186":1,"714":1,"2208":1,"2209":1,"2303":2}}],["형식",{"0":{"135":1,"139":1,"349":1,"350":1,"401":1,"541":1,"866":1,"867":1,"1884":1},"1":{"136":1,"137":1,"351":1,"352":1,"402":1,"403":1},"2":{"32":3,"33":1,"43":1,"45":1,"50":1,"71":1,"95":1,"102":1,"122":1,"175":1,"384":1,"393":2,"660":1,"672":1,"744":1,"1045":1,"1826":1,"1827":1,"1828":1,"1879":2,"1884":1,"1999":1,"2006":1,"2163":1,"2210":2}}],["강제",{"2":{"986":1}}],["강화",{"2":{"432":1}}],["강화합니다",{"2":{"208":1}}],["건너뛸",{"2":{"972":1}}],["거래구분",{"2":{"1981":2}}],["거래처유형",{"2":{"1981":2}}],["거래처코드",{"2":{"1981":2}}],["거래처명",{"2":{"1981":2}}],["거칩니다",{"2":{"970":1}}],["거부되었습니다",{"2":{"829":1}}],["컬렉션",{"2":{"957":3,"958":2}}],["컬럼을",{"2":{"191":1,"1031":1}}],["컬럼만",{"2":{"114":1,"200":1,"723":1}}],["컬럼에",{"2":{"108":1,"661":1}}],["컬럼의",{"2":{"97":1}}],["컬럼명",{"2":{"95":2,"97":1}}],["컬럼",{"0":{"1070":1},"2":{"95":1,"111":2,"1031":1,"1033":1,"1034":2,"1648":2,"1986":2,"1987":1,"2258":1,"2261":2}}],["컬럼이",{"2":{"32":1}}],["날짜에",{"2":{"2209":1,"2242":1,"2244":1,"2245":1,"2303":1}}],["날짜를",{"2":{"2208":1,"2240":1,"2241":1,"2248":1,"2249":1}}],["날짜",{"0":{"2113":1,"2131":1,"2206":1,"2224":1,"2236":1,"2250":1},"1":{"2207":1,"2208":1,"2209":1,"2210":1,"2237":1,"2238":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1,"2246":1,"2247":1,"2248":1,"2249":1,"2250":1,"2251":2,"2252":2,"2253":2,"2254":1},"2":{"923":1,"1038":2,"1040":1,"1642":1,"1674":1,"1725":1,"1770":3,"1787":1,"1820":1,"1841":3,"1871":1,"2006":3,"2033":1,"2113":1,"2131":1,"2207":3,"2208":4,"2209":1,"2210":3,"2221":2,"2226":1,"2227":1,"2237":1,"2239":1,"2243":1,"2303":2,"2311":1,"2330":1,"2333":1}}],["빌더",{"2":{"913":1}}],["빌드에서는",{"2":{"1195":1}}],["빌드된",{"2":{"557":1,"1484":1,"1506":1,"1512":1,"1741":1}}],["빌드가",{"0":{"2059":1},"2":{"497":1}}],["빌드하는",{"2":{"339":1}}],["빌드",{"0":{"278":1,"281":1,"282":1,"284":1,"339":1,"340":1,"460":1,"495":1,"497":1,"557":1,"1165":1,"1168":1,"1170":1,"1171":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1203":1,"1482":1,"1483":1,"1495":1,"1502":1,"1503":1,"1504":1,"1505":1,"1508":1,"1509":1,"1511":1,"1737":1,"1738":1,"1739":1,"1740":1,"1741":1,"1743":1,"1783":1,"1847":1,"2063":1,"2169":1,"2170":1,"2175":1,"2180":1},"1":{"279":1,"280":1,"282":1,"283":1,"284":1,"340":1,"341":1,"342":1,"496":1,"497":1,"1166":1,"1167":1,"1168":1,"1169":2,"1170":1,"1171":2,"1172":2,"1173":2,"1174":1,"1175":1,"1176":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1,"1509":1,"1510":1,"1511":1,"1512":1,"1738":1,"1739":1,"1740":1,"2170":1,"2171":2,"2172":2,"2173":2,"2174":2,"2175":1},"2":{"266":1,"433":1,"437":2,"452":1,"503":1,"520":1,"549":2,"563":1,"990":1,"1166":1,"1174":1,"1197":1,"1483":1,"1501":1,"1504":1,"1511":1,"1653":2,"1667":1,"1685":1,"1688":1,"1733":1,"1740":1,"1780":3,"1783":7,"1784":2,"1816":2,"1833":2,"1844":1,"1847":2,"1848":1,"1849":1,"1902":1,"2039":1,"2082":2,"2174":1,"2175":1,"2180":1}}],["역직렬화",{"2":{"904":1,"923":2}}],["역할을",{"2":{"436":1,"548":1,"772":1,"1778":1}}],["역할",{"0":{"378":1,"559":1},"1":{"379":1,"380":1,"381":1,"560":1,"561":1,"562":1,"563":1,"564":1},"2":{"600":1,"601":1,"602":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"632":1,"633":1,"634":1,"635":1,"636":1,"648":1,"649":1,"670":1,"671":1,"672":1,"673":1,"678":1,"680":1,"686":1,"687":1,"688":1,"704":1,"705":1,"728":1,"729":1}}],["삽입",{"2":{"886":1}}],["원",{"2":{"2225":1}}],["원래",{"0":{"1260":1},"2":{"1276":1,"1337":1}}],["원하는",{"2":{"872":1}}],["원본커서",{"2":{"98":1}}],["원본파일명",{"2":{"46":1,"652":1}}],["원본",{"0":{"656":1,"661":1,"1318":1},"2":{"45":1,"50":2,"661":1,"716":1,"801":1,"1318":1}}],["를",{"2":{"808":1,"1302":1,"1670":1,"1790":1,"2245":1}}],["바로",{"2":{"1591":1,"1725":1,"1770":1,"1879":1,"2079":1,"2200":1,"2222":1}}],["바이트",{"2":{"1217":1,"2233":1}}],["바이너리로",{"2":{"99":1}}],["바이너리",{"0":{"99":1},"2":{"46":3,"99":1,"102":1,"103":1,"119":1,"652":2,"664":1,"704":1,"1217":1,"2233":1}}],["바인딩",{"2":{"882":1}}],["바디로",{"2":{"801":1}}],["탐지",{"2":{"798":1,"985":1}}],["롤링",{"2":{"763":1}}],["업그레이드",{"2":{"1994":1}}],["업데이트할",{"2":{"1848":1}}],["업데이트됩니다",{"2":{"1045":1,"1493":1}}],["업데이트",{"2":{"729":1,"731":1}}],["업로드합니다",{"2":{"891":1,"1484":1}}],["업로드에",{"2":{"45":1}}],["업로드할",{"2":{"43":1}}],["업로드",{"0":{"43":1,"153":1,"242":1,"651":1,"663":1,"890":1,"1212":1,"1280":1,"1518":1,"1541":1,"1542":1,"1544":1},"1":{"44":1,"45":1,"154":1,"155":1,"891":1,"892":1,"1542":1,"1543":2,"1544":2,"1545":1,"1546":1,"1547":1,"1548":1},"2":{"40":1,"45":2,"152":1,"154":1,"429":1,"494":1,"517":1,"588":1,"645":1,"648":2,"649":2,"651":1,"663":1,"891":1,"1071":1,"1773":1}}],["는",{"2":{"713":1,"1185":1,"1652":1}}],["앱을",{"2":{"1671":1,"1861":1}}],["앱",{"2":{"699":1,"1861":1}}],["첨부",{"0":{"694":1},"2":{"688":1,"2023":1}}],["↓",{"2":{"676":4}}],["체제에서",{"2":{"1701":1}}],["체제",{"0":{"1701":1}}],["체인에",{"2":{"675":1}}],["체크할",{"2":{"2302":1}}],["체크",{"2":{"636":2,"1725":1,"1787":1,"2033":1,"2302":1}}],["체크리스트",{"0":{"396":1}}],["읽기",{"0":{"1633":1},"2":{"652":1,"671":1,"878":1,"1026":1,"1724":1,"2106":1,"2127":1}}],["읽어",{"2":{"97":1,"108":1}}],["뷰어",{"2":{"643":1}}],["뷰",{"0":{"1940":1,"1960":1,"1976":1,"2115":1,"2133":1},"1":{"1941":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1,"1973":1,"1974":1,"1975":1,"1977":1,"1978":1,"1979":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"2":{"630":3,"1778":1,"1941":1,"1961":1,"1977":1}}],["우선순위",{"0":{"627":1},"2":{"670":1}}],["우클릭",{"2":{"501":1,"1067":1,"1767":1,"2014":1}}],["타임스탬프를",{"2":{"1317":1,"2246":1,"2247":1}}],["타임스탬프",{"0":{"1317":1},"2":{"1418":1}}],["타임아웃",{"0":{"1286":1,"1296":1,"1333":1,"1529":1,"2161":1},"2":{"618":2,"1270":1,"1529":1,"2161":2}}],["타입을",{"2":{"252":1,"253":1,"427":1,"898":1}}],["타입별",{"0":{"1293":1,"1524":1},"1":{"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1},"2":{"67":1,"1763":1}}],["타입",{"0":{"48":1,"253":1,"653":1,"733":1,"736":1,"809":1,"897":1,"963":1,"1305":1,"1532":1,"1589":1,"2171":1},"1":{"654":1,"655":1,"656":1,"734":1,"735":1,"737":1,"810":1,"811":1,"898":1,"964":1,"965":1},"2":{"44":1,"45":1,"46":1,"66":2,"119":2,"123":1,"623":1,"636":1,"652":1,"813":1,"953":1,"967":1,"986":1,"1026":1,"1033":1,"1060":2,"1306":1,"1380":1,"1539":1,"1589":1,"1659":1,"1817":2,"2059":1,"2086":1,"2171":4,"2180":1,"2204":1,"2218":1}}],["타입인",{"2":{"32":1}}],["타입에",{"2":{"30":1,"259":1,"731":1,"838":1,"846":1,"1306":1,"1539":1}}],["타입이",{"2":{"23":1}}],["풀로",{"2":{"839":1}}],["풀",{"0":{"839":1},"1":{"840":1,"841":1},"2":{"618":2}}],["참조하는",{"2":{"1848":1}}],["참조하면",{"2":{"1847":1}}],["참조합니다",{"2":{"1844":1}}],["참조됩니다",{"2":{"1836":1}}],["참조",{"0":{"767":1,"772":1,"1786":1,"1843":1,"2032":1,"2036":1},"1":{"768":1,"769":1,"770":1,"771":1,"773":1,"774":1,"775":1,"1787":1,"1788":1,"1789":1,"1844":1,"1845":1,"1846":1,"2033":1,"2034":1,"2035":1,"2037":1,"2038":1,"2039":1,"2040":1,"2041":1,"2042":1,"2043":1,"2044":1,"2045":1},"2":{"523":2,"771":1,"834":1,"1785":2}}],["참고하여",{"2":{"474":1,"1710":1,"1729":1}}],["참고하세요",{"2":{"397":1,"435":1,"456":1,"512":1,"1619":1,"1650":1,"1665":1,"1692":1,"1750":1,"1831":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"2033":1,"2034":1,"2035":1,"2116":1}}],["참고",{"0":{"398":1,"523":1,"1785":1},"2":{"518":3,"523":1,"1002":1}}],["참고할",{"2":{"388":1,"1785":1}}],["준수",{"2":{"518":1}}],["준비",{"0":{"476":1},"1":{"477":1,"478":1},"2":{"883":1}}],["준비되었다면",{"2":{"474":1,"512":1}}],["잡기",{"2":{"518":1}}],["흐름",{"0":{"518":1,"1228":1,"1771":1},"1":{"1229":1,"1230":1,"1231":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1}}],["때",{"0":{"518":1,"1771":1},"1":{"1772":1,"1773":1,"1774":1,"1775":1,"1776":1},"2":{"1358":1,"2292":1}}],["때는",{"2":{"365":1,"393":1,"455":1,"1264":1,"1848":1,"1922":1}}],["만듭니다",{"2":{"2319":1}}],["만들어보세요",{"2":{"1790":1}}],["만들기",{"0":{"1716":1},"1":{"1717":1,"1718":1,"1719":1},"2":{"1759":1,"1774":1,"1775":1}}],["만들",{"0":{"518":1,"1771":1},"1":{"1772":1,"1773":1,"1774":1,"1775":1,"1776":1},"2":{"1538":1}}],["만료된",{"2":{"1262":1}}],["만료되었을",{"2":{"2057":1,"2181":1}}],["만료되었습니다",{"2":{"1262":1,"1276":1,"1337":1}}],["만료되었거나",{"2":{"17":1}}],["만료되면",{"2":{"25":1,"1231":1,"1255":1,"1390":1}}],["만료",{"0":{"86":1,"2165":1,"2166":1},"2":{"25":1,"78":1,"230":1,"1226":1,"1227":1,"1236":2,"1390":1,"1764":1}}],["알",{"2":{"1533":1}}],["알림",{"0":{"1303":1},"2":{"1295":1,"1296":1}}],["알아야",{"2":{"516":1,"1761":1}}],["알고리즘입니다",{"2":{"210":1,"211":1,"785":1,"788":1,"977":1,"978":1}}],["빠른",{"0":{"516":1,"1711":1,"1761":1,"1786":1},"1":{"1712":1,"1713":1,"1714":1,"1715":1,"1716":1,"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"1726":1,"1727":1,"1728":1,"1729":1,"1762":1,"1763":1,"1764":1,"1787":1,"1788":1,"1789":1},"2":{"1653":1,"1711":1,"1750":1,"1759":1,"1790":1,"2019":1,"2082":1}}],["빠르게",{"2":{"514":1,"519":1,"1756":1}}],["빠르고",{"2":{"425":1}}],["핵심",{"0":{"516":1,"1656":1,"1761":1},"1":{"1762":1,"1763":1,"1764":1},"2":{"516":1,"615":1,"630":1,"636":1,"1661":1,"1678":1,"1684":1,"1761":1,"1777":1,"1817":1,"1857":1,"1858":1,"1864":1,"1926":1,"1928":1,"1933":1,"2034":1}}],["띄우기",{"2":{"515":1}}],["그대로",{"2":{"1685":1,"1816":1,"1833":2,"1847":1}}],["그리드데이터",{"2":{"2260":1,"2261":1}}],["그리드를",{"2":{"2118":1}}],["그리드",{"0":{"1054":1,"1065":1,"1074":1,"1648":1,"1767":1,"1974":1,"1990":1,"2012":1,"2117":1},"1":{"1055":1,"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1075":1,"1076":1,"1077":1,"2013":1,"2014":1,"2015":1,"2118":1,"2119":1,"2120":1},"2":{"1059":1,"1437":1,"1439":1,"1582":1,"1658":1,"1682":1,"1767":2,"1777":2,"1817":1,"1986":1,"1987":1,"1994":1,"2013":2,"2014":1,"2015":1,"2031":1,"2098":1}}],["그림",{"0":{"1758":1},"2":{"515":1}}],["그룹구분",{"2":{"1981":2}}],["그룹을",{"2":{"870":1}}],["그룹",{"0":{"870":1},"2":{"1978":3,"1982":3,"1984":3,"1987":1}}],["그룹화",{"2":{"861":1,"1563":1,"1880":1}}],["그룹별",{"0":{"140":1},"1":{"141":1,"142":1,"143":1}}],["그룹으로",{"2":{"130":1}}],["온",{"0":{"515":1,"1757":1},"1":{"1758":1,"1759":1,"1760":1}}],["처음",{"0":{"515":1,"1757":1},"1":{"1758":1,"1759":1,"1760":1},"2":{"1711":1}}],["처리된",{"2":{"2302":1}}],["처리됩니다",{"2":{"1390":1,"1522":1,"2001":1}}],["처리가",{"2":{"1289":1,"1300":1,"1320":1,"1522":1,"1525":1,"1763":1}}],["처리되어",{"2":{"2298":1,"2300":1,"2306":1}}],["처리되지만",{"2":{"1289":1}}],["처리되므로",{"2":{"1289":1,"1525":1}}],["처리할",{"2":{"1289":2,"2214":1}}],["처리를",{"2":{"1129":1,"1306":1,"1539":1}}],["처리됨",{"0":{"2301":1},"1":{"2302":1,"2303":1,"2304":1,"2305":1},"2":{"78":1,"1789":1}}],["처리하세요",{"2":{"2295":1}}],["처리하려면",{"2":{"1338":1,"1527":1}}],["처리하고",{"2":{"76":1,"78":1}}],["처리하는",{"2":{"14":1,"40":1,"385":1,"667":1,"1521":1}}],["처리합니다",{"2":{"43":1,"588":1,"795":1,"803":1,"808":1,"820":1,"1267":1,"1292":1,"1568":1,"1614":1,"1670":1,"2066":1}}],["처리",{"0":{"22":1,"47":1,"152":1,"354":1,"394":1,"650":1,"828":1,"875":1,"1261":1,"1262":1,"1279":1,"1285":1,"1291":1,"1293":1,"1297":1,"1300":1,"1316":1,"1319":1,"1324":1,"1326":1,"1328":1,"1331":1,"1332":1,"1333":1,"1334":1,"1336":1,"1338":1,"1341":1,"1387":1,"1388":1,"1516":1,"1520":1,"1522":1,"1524":1,"1531":1,"1538":1,"1549":1,"1550":1,"1553":1,"1556":1,"1567":1,"1568":1,"1593":1,"1614":1,"1847":1,"2104":1,"2111":1,"2112":1,"2113":1,"2127":1,"2129":1,"2130":1,"2131":1,"2189":1,"2211":1,"2213":1,"2215":1,"2217":1,"2224":1,"2236":1,"2255":1,"2264":1,"2271":1,"2312":1,"2321":1},"1":{"23":1,"48":1,"49":1,"50":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"355":1,"356":1,"357":1,"358":1,"359":1,"651":1,"652":1,"829":1,"830":1,"876":1,"877":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":1,"892":1,"893":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"1286":1,"1287":1,"1288":1,"1292":1,"1293":1,"1294":2,"1295":2,"1296":2,"1297":2,"1298":2,"1299":1,"1300":1,"1301":1,"1302":1,"1303":1,"1304":1,"1305":1,"1306":1,"1307":1,"1325":1,"1326":1,"1327":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1521":1,"1522":1,"1523":1,"1524":1,"1525":2,"1526":2,"1527":2,"1528":2,"1529":2,"1530":2,"1531":1,"1532":2,"1533":2,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"1550":1,"1551":2,"1552":2,"1553":1,"1554":2,"1555":2,"1556":1,"2105":1,"2106":1,"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2212":1,"2214":1,"2216":1,"2218":1,"2237":1,"2238":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1,"2246":1,"2247":1,"2248":1,"2249":1,"2250":1,"2251":1,"2252":1,"2253":1,"2254":1,"2256":1,"2257":1,"2258":1,"2259":1,"2260":1,"2261":1,"2262":1,"2263":1,"2265":1,"2266":1,"2267":1,"2268":1,"2269":1,"2270":1,"2272":1,"2273":1,"2274":1,"2275":1,"2276":1,"2277":1,"2278":1,"2279":1,"2280":1,"2281":1,"2282":1,"2313":1,"2314":1,"2315":1,"2316":1,"2317":1,"2318":1,"2319":1,"2320":1,"2321":1,"2322":2,"2323":2,"2324":2,"2325":1},"2":{"38":1,"45":1,"57":1,"67":1,"78":2,"98":1,"138":1,"168":1,"201":1,"216":1,"222":1,"250":1,"277":1,"353":1,"363":1,"379":1,"380":1,"392":1,"394":1,"398":1,"423":1,"514":1,"517":1,"518":1,"519":1,"577":1,"601":1,"613":1,"620":1,"623":1,"632":2,"636":1,"648":1,"649":5,"651":1,"652":1,"665":1,"666":1,"670":1,"671":1,"672":2,"673":1,"699":3,"724":1,"728":1,"731":2,"732":1,"874":1,"875":1,"878":2,"899":1,"917":1,"923":1,"927":1,"929":1,"949":1,"1036":1,"1058":1,"1211":1,"1264":1,"1267":1,"1272":1,"1273":1,"1275":3,"1276":1,"1279":1,"1289":1,"1290":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1300":4,"1315":2,"1320":2,"1321":1,"1337":1,"1343":1,"1361":1,"1435":2,"1516":2,"1523":3,"1526":1,"1527":1,"1528":1,"1529":1,"1538":2,"1540":2,"1556":2,"1568":1,"1614":1,"1618":1,"1658":1,"1672":1,"1674":1,"1725":1,"1763":6,"1768":1,"1770":6,"1773":5,"1787":1,"1789":2,"1820":1,"1862":2,"1871":5,"1951":1,"2013":1,"2033":1,"2068":2,"2095":2,"2190":1,"2227":4,"2237":1,"2256":1,"2263":1,"2265":1,"2270":1,"2272":1,"2295":2,"2311":3,"2313":1}}],["돕는",{"2":{"514":1,"1756":1}}],["충돌",{"0":{"509":1,"995":1,"1747":1,"2177":1}}],["접히거나",{"2":{"1467":1}}],["접기",{"2":{"1456":1,"1458":1,"1461":1,"1463":2,"1917":2,"2017":1}}],["접두사",{"2":{"1185":1,"1577":1,"1578":2}}],["접두사가",{"2":{"1181":1}}],["접속하면",{"2":{"1736":1}}],["접속하여",{"2":{"506":1,"1617":1}}],["접속합니다",{"2":{"1492":1,"1714":1}}],["접속",{"0":{"1492":1},"2":{"872":1}}],["접근할",{"2":{"857":1}}],["접근이",{"2":{"829":1}}],["접근",{"0":{"422":1,"857":1,"1352":1},"2":{"25":1,"98":1,"144":1,"372":1,"381":1,"397":1,"921":1,"953":1,"1181":1,"1385":1,"1536":1,"1633":1,"2019":1,"2025":2}}],["버튼이",{"2":{"1717":1}}],["버튼",{"0":{"1003":1,"1007":1,"1430":1,"1435":1,"1996":1},"1":{"1004":1,"1005":1,"1006":1,"1007":1,"1431":1,"1432":1,"1433":1,"1434":1,"1435":1,"1997":1},"2":{"500":1,"873":1,"1058":1,"1088":1,"1431":2,"1433":3,"1434":3,"1643":1,"1682":1,"1766":2,"1899":1,"1997":1,"2141":1}}],["버전으로",{"2":{"1709":1}}],["버전을",{"2":{"1709":1,"1732":2,"1848":1,"2059":1}}],["버전",{"0":{"270":1,"855":1,"877":1,"881":1,"885":1,"902":1,"908":1,"912":1,"916":1,"920":1,"931":1,"935":1,"940":1,"944":1,"948":1,"952":1,"956":1,"962":1,"1654":1,"1709":1,"1732":1,"2076":1,"2081":1,"2085":1,"2089":1,"2093":1,"2097":1},"2":{"459":2,"460":1,"462":1,"463":1,"464":1,"465":1,"469":1,"1654":3,"1695":2,"1696":1,"1697":1,"1700":4,"2071":1,"2072":1,"2101":1,"2102":1,"2105":1,"2108":1,"2180":1}}],["옆의",{"2":{"500":1,"1121":1}}],["루트의",{"2":{"1732":1}}],["루트에",{"2":{"1707":1,"1713":1,"1734":1,"1749":1,"1833":1,"1844":1,"2179":1}}],["루트로",{"2":{"561":1}}],["루트",{"0":{"549":1,"1816":1},"2":{"496":1,"1667":1,"1670":1,"1733":1,"1817":1,"1858":1,"1860":1}}],["열린",{"2":{"1915":1}}],["열",{"2":{"1070":2}}],["열려있는지",{"2":{"511":1}}],["열어",{"2":{"481":1}}],["열기",{"0":{"1106":1},"2":{"98":1,"99":1,"103":1,"500":2,"1118":1,"1915":1}}],["9",{"0":{"1725":1},"2":{"460":1,"952":1,"1658":1,"1696":1,"2066":1,"2093":1,"2210":1,"2243":1}}],["9629",{"2":{"255":1,"472":1,"482":1,"834":1}}],["출력됩니다",{"2":{"505":1}}],["출력",{"2":{"459":1,"460":1,"2304":1}}],["↑",{"2":{"454":1}}],["간단하고",{"2":{"2086":1}}],["간단한",{"2":{"1080":1}}],["간결하고",{"2":{"2077":1}}],["간",{"0":{"454":1},"2":{"454":1}}],["범위",{"2":{"451":1,"1038":1,"2006":1}}],["네비게이션",{"2":{"2017":1}}],["네트워크",{"0":{"472":1,"1530":1,"1705":1},"1":{"1706":1,"1707":1},"2":{"1304":1,"1490":1,"1530":2,"1534":1,"1536":1,"1706":1,"2187":1,"2188":1}}],["네이밍",{"0":{"447":1,"449":1,"565":1,"1571":1,"1575":1,"1612":1},"1":{"448":1,"449":1,"1576":1,"1577":1,"1578":1,"1579":1,"1580":1},"2":{"1781":1}}],["네임스페이스는",{"2":{"386":1}}],["호스트",{"2":{"510":1,"1490":1}}],["호환성",{"2":{"834":1}}],["호환",{"0":{"465":1,"848":1},"1":{"849":1,"850":1,"851":1},"2":{"433":1}}],["호출은",{"2":{"1763":1}}],["호출에",{"2":{"1539":1}}],["호출됩니다",{"2":{"1383":1,"1416":1,"1904":1}}],["호출할",{"2":{"846":1,"1033":1,"1400":1}}],["호출로",{"2":{"707":1}}],["호출을",{"2":{"304":1}}],["호출하기",{"0":{"1720":1}}],["호출하여",{"2":{"178":1}}],["호출하는",{"2":{"27":1,"1517":1,"1720":1}}],["호출합니다",{"2":{"33":1,"1514":1,"1957":1}}],["호출",{"0":{"9":1,"27":1,"33":1,"80":1,"85":1,"321":1,"334":1,"418":1,"593":1,"732":1,"845":1,"846":1,"847":1,"1513":1,"1517":1,"1552":1,"1634":1,"1789":1,"1957":1,"2035":1,"2057":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"322":1,"323":1,"335":1,"336":1,"337":1,"846":1,"847":1,"1514":1,"1515":1,"1516":1,"1517":1,"1518":1,"1519":1},"2":{"9":1,"12":1,"30":1,"76":1,"80":1,"87":1,"141":1,"314":1,"327":1,"380":2,"385":1,"390":1,"417":1,"516":1,"573":1,"600":1,"601":2,"610":1,"613":2,"630":1,"633":4,"649":1,"729":1,"731":1,"769":1,"873":1,"909":1,"1272":1,"1275":1,"1399":1,"1411":1,"1521":1,"1540":1,"1615":2,"1724":1,"1760":1,"1762":1,"1773":2,"1905":1,"1912":1,"1918":1,"1920":1,"1946":1,"1949":1,"1959":1,"1969":1,"1975":1,"1981":1,"1991":1,"2024":1,"2025":1,"2167":1}}],["용량",{"2":{"1252":1,"2295":2}}],["용이",{"2":{"432":1}}],["용도",{"0":{"787":1,"849":1},"2":{"19":1,"20":1,"21":1,"210":1,"465":1,"761":1,"810":1,"811":1,"964":1,"965":1,"1226":1,"1227":1}}],["생년월일",{"2":{"2333":1}}],["생산성",{"2":{"432":1}}],["생성이",{"2":{"1619":1}}],["생성되고",{"2":{"1708":1}}],["생성되었는지",{"2":{"1483":1,"2055":1}}],["생성되는",{"0":{"261":1},"2":{"564":1}}],["생성됨",{"2":{"560":1,"564":1,"1667":2,"1816":2}}],["생성됩니다",{"2":{"497":1,"507":1,"859":1,"1174":1,"1504":1,"1511":1,"1589":1,"1604":1,"1626":1,"1740":1}}],["생성부터",{"2":{"365":1}}],["생성할",{"2":{"175":1,"1548":1,"1922":1}}],["생성합니다",{"2":{"100":1,"101":1,"259":1,"368":1,"590":1,"838":1,"853":1,"1350":1,"1582":1,"1598":1,"1599":1,"1628":1,"1717":1,"2251":1,"2252":1,"2253":1}}],["생성된",{"0":{"103":1},"2":{"92":1,"98":1,"114":1,"200":1,"283":1,"341":1,"557":1,"704":1,"723":1}}],["생성하고",{"2":{"1267":1,"1671":1,"1672":1,"1713":1,"1734":1,"1861":1,"1862":1,"2067":1,"2094":1}}],["생성하세요",{"2":{"237":1,"968":1}}],["생성하여",{"2":{"92":1,"99":1,"102":1,"492":1}}],["생성하는",{"2":{"89":1,"174":1,"383":1,"420":1,"701":1}}],["생성",{"0":{"89":1,"92":1,"99":1,"100":1,"101":1,"174":1,"176":1,"180":1,"182":1,"199":1,"229":1,"260":1,"283":1,"341":1,"368":1,"373":1,"383":1,"405":1,"406":1,"409":1,"590":1,"701":1,"706":1,"709":1,"721":1,"812":1,"858":1,"888":1,"966":1,"1581":1,"1595":1,"1597":1,"1599":1,"1627":1,"1717":1,"1772":1,"1922":1,"2250":1},"1":{"90":1,"91":1,"92":1,"93":2,"94":2,"95":2,"96":2,"97":2,"98":2,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"175":1,"176":1,"177":2,"178":2,"179":2,"180":2,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"374":1,"406":1,"407":1,"408":1,"409":1,"410":1,"702":1,"703":1,"704":1,"705":1,"706":1,"707":2,"708":2,"709":2,"710":2,"711":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"1582":1,"1583":1,"1584":1,"1596":1,"1597":1,"1598":2,"1599":2,"1600":2,"1601":1,"1602":1,"1603":1,"1604":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":1,"1616":1,"1617":1,"1618":1,"1619":1,"1628":1,"1629":1,"1630":1,"2251":1,"2252":1,"2253":1},"2":{"17":1,"24":1,"32":1,"45":1,"52":1,"56":1,"59":1,"76":1,"77":1,"98":1,"141":1,"151":1,"158":1,"159":1,"199":1,"201":1,"210":1,"219":4,"277":2,"383":1,"396":1,"397":2,"429":2,"439":1,"514":1,"517":2,"518":2,"549":1,"554":1,"568":1,"576":1,"618":1,"632":5,"635":3,"640":1,"641":1,"649":1,"651":1,"663":1,"700":1,"702":2,"704":6,"705":1,"724":1,"732":1,"787":1,"812":2,"856":1,"879":1,"882":1,"883":1,"886":3,"888":1,"896":1,"899":1,"913":3,"921":1,"966":2,"977":1,"1175":1,"1548":1,"1599":1,"1770":1,"1772":2,"1774":1,"1775":1,"1861":1,"1879":1,"1893":1,"1896":2,"1898":2,"1902":1,"1905":1,"2262":1}}],["생성한",{"2":{"9":1}}],["목적으로",{"2":{"432":1,"1659":1}}],["목적",{"0":{"432":1,"1659":1,"1854":1,"2073":1,"2098":1,"2103":1,"2106":1,"2109":1}}],["목록에",{"2":{"493":1}}],["목록을",{"2":{"120":1,"421":1,"859":1,"862":1,"1124":1,"1154":1,"1408":1,"1417":1}}],["목록",{"0":{"8":1,"16":1,"29":1,"42":1,"55":1,"64":1,"75":1,"91":1,"118":1,"120":1,"1122":1},"1":{"9":1,"17":1,"30":1,"31":1,"32":1,"33":1,"34":1,"43":1,"44":1,"45":1,"46":1,"56":1,"57":1,"65":1,"66":1,"67":1,"76":1,"77":1,"78":1,"79":1,"80":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"119":1,"120":1,"121":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1},"2":{"31":1,"44":1,"45":1,"56":1,"57":1,"76":1,"120":1,"421":1,"651":1,"663":1,"859":1,"862":1,"1090":1,"1096":1,"1126":2,"1127":1,"1133":1,"1150":1,"1156":1,"1347":1,"1404":2,"1413":1,"1419":1,"1473":1,"1475":1,"1609":1,"1913":3,"1916":1,"1918":1,"1951":1,"1978":5,"1981":2,"1982":2,"1983":1,"1986":1,"1987":1,"2022":2,"2023":1,"2026":2}}],["캐싱될",{"2":{"1848":1}}],["캐싱",{"0":{"430":1},"2":{"514":1,"1848":1}}],["캐시용",{"0":{"290":1,"293":1},"2":{"580":2,"619":1,"851":1}}],["캐시",{"2":{"286":1,"430":1,"433":1,"465":1,"849":1,"986":1,"1848":1,"2178":1}}],["쉽게",{"2":{"427":1,"1659":1}}],["오늘",{"2":{"2248":1,"2249":1}}],["오래",{"2":{"1221":1,"2175":1}}],["오버레이",{"2":{"1766":1}}],["오버라이드할",{"2":{"1643":1}}],["오버라이드",{"0":{"1643":1},"2":{"1643":1,"1840":1}}],["오버",{"2":{"1111":1}}],["오픈소스",{"2":{"427":1,"836":1}}],["오류를",{"2":{"2059":1}}],["오류나",{"2":{"2059":1}}],["오류는",{"2":{"1306":1,"1539":1}}],["오류의",{"2":{"1304":1,"1534":1}}],["오류가",{"2":{"1298":1,"1334":1,"1528":1,"1533":1,"1536":2,"1609":1,"1614":1,"1748":1}}],["오류",{"0":{"1528":1,"1530":1,"1748":1,"2160":1,"2163":1,"2169":1,"2170":1,"2171":1,"2172":1,"2173":1,"2174":1,"2178":1,"2180":1,"2182":1,"2183":1},"1":{"2170":1,"2171":2,"2172":2,"2173":2,"2174":2,"2175":1,"2183":1,"2184":2,"2185":2,"2186":2,"2187":2,"2188":1},"2":{"9":1,"30":1,"138":1,"400":1,"540":1,"864":1,"1276":1,"1300":1,"1526":1,"1528":2,"1530":1,"1784":4,"2160":1,"2171":2,"2172":1,"2180":2,"2187":1}}],["엔터프라이즈급",{"2":{"1652":1}}],["엔터프라이즈",{"2":{"425":1,"514":1}}],["엔드포인트",{"0":{"150":1,"606":1,"815":1},"1":{"607":1},"2":{"9":1,"17":1,"30":1,"31":1,"32":1,"33":1,"34":1,"43":1,"46":1,"56":1,"57":1,"65":1,"76":1,"77":1,"78":1,"79":1,"80":1,"92":1,"99":1,"100":1,"101":1,"102":1,"103":1,"119":1,"120":1,"121":1,"367":1,"372":1,"379":1,"397":1,"518":1,"600":1,"648":2,"686":2,"704":2,"728":2}}],["자릿수로",{"2":{"2279":1}}],["자릿수",{"2":{"2212":1}}],["자격증",{"2":{"1946":1}}],["자가",{"2":{"1941":1}}],["자세한",{"2":{"1650":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"2033":1,"2034":1,"2035":1}}],["자연어",{"2":{"949":1}}],["자주",{"0":{"1787":1,"1788":1,"2054":1},"1":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"522":1,"994":1,"1765":1,"1784":1,"1785":1,"2019":1}}],["자료입니다",{"2":{"1785":1}}],["자료를",{"2":{"523":1}}],["자료",{"0":{"398":1,"523":1,"1785":1},"2":{"1002":1}}],["자동등록유무",{"2":{"1981":2}}],["자동화",{"2":{"856":1,"921":1}}],["자동으로",{"2":{"17":1,"25":1,"32":1,"38":2,"76":1,"105":1,"162":1,"185":1,"216":1,"259":1,"264":1,"331":1,"420":1,"670":1,"713":1,"838":1,"844":1,"853":1,"859":1,"898":1,"986":1,"1045":1,"1091":1,"1213":1,"1230":1,"1231":1,"1251":1,"1255":1,"1256":1,"1267":1,"1275":1,"1282":1,"1289":3,"1294":1,"1320":1,"1390":2,"1400":1,"1411":1,"1416":1,"1466":1,"1491":1,"1493":1,"1496":1,"1497":1,"1522":1,"1525":2,"1544":1,"1584":1,"1586":1,"1587":1,"1604":1,"1626":1,"1725":1,"1747":1,"1763":1,"1770":1,"1789":1,"1836":1,"1873":1,"1893":1,"2001":1,"2057":1,"2079":1,"2162":1,"2165":1,"2200":1,"2222":1,"2234":1,"2294":1}}],["자동",{"0":{"858":1,"1204":1,"1256":1,"1584":1,"1586":1,"1591":1,"1873":1,"2055":1,"2079":1,"2222":1,"2234":1},"1":{"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"1205":1,"1206":1},"2":{"17":1,"25":1,"46":1,"78":1,"84":1,"86":1,"92":1,"114":2,"119":1,"134":1,"200":2,"216":1,"230":1,"357":1,"394":1,"518":1,"549":1,"557":1,"560":1,"665":1,"723":2,"816":1,"856":1,"913":3,"921":1,"945":1,"1199":2,"1211":1,"1227":1,"1229":1,"1458":1,"1468":1,"1589":1,"1591":1,"1653":2,"1659":1,"1696":1,"1709":1,"1744":1,"1764":2,"1774":1,"1817":1,"1862":1,"1999":1,"2068":2,"2083":2,"2095":2,"2168":1,"2184":1}}],["따옴표",{"2":{"1565":1}}],["따릅니다",{"2":{"393":1,"448":1,"455":1,"524":1,"1922":1}}],["따라야",{"2":{"365":1}}],["따라",{"2":{"259":1,"368":1,"560":1,"731":1,"838":1,"1044":1,"1272":1,"1273":1,"1282":1,"1306":1,"1539":1,"2234":1}}],["활동",{"2":{"1946":1}}],["활용하여",{"2":{"2175":1}}],["활용하세요",{"2":{"1790":1}}],["활용한",{"2":{"1653":1}}],["활용할",{"2":{"389":1}}],["활용",{"0":{"389":1},"1":{"390":1,"391":1,"392":1},"2":{"1774":1,"1775":1}}],["활성화되어",{"2":{"2306":1}}],["활성화됨",{"2":{"1490":1}}],["활성화합니다",{"2":{"1397":1}}],["활성화된",{"0":{"2306":1},"2":{"1289":1,"1544":1,"2309":1}}],["활성화",{"0":{"1219":1,"2308":1},"2":{"230":1,"671":1,"740":1,"1209":2,"1219":1,"1250":1,"1283":2}}],["활성",{"2":{"56":1,"1916":2}}],["쿼리",{"2":{"385":1,"1024":1}}],["절차를",{"2":{"1596":1}}],["절차",{"0":{"383":1,"405":1,"1481":1,"1595":1},"1":{"406":1,"407":1,"408":1,"409":1,"410":1,"1482":1,"1483":1,"1484":1,"1485":1,"1486":1,"1487":1,"1596":1,"1597":1,"1598":1,"1599":1,"1600":1,"1601":1,"1602":1,"1603":1,"1604":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":1,"1616":1,"1617":1,"1618":1,"1619":1},"2":{"383":1,"397":1,"518":1,"1772":1,"1783":1}}],["절대",{"0":{"1844":1},"2":{"114":1,"200":1,"723":1,"1162":1,"1830":1,"1844":1}}],["│",{"2":{"368":5,"388":18,"406":3,"434":3,"437":29,"439":22,"440":10,"444":4,"455":3,"478":6,"527":29,"534":18,"549":2,"551":14,"552":1,"554":27,"555":10,"556":6,"558":2,"598":2,"630":36,"646":1,"649":5,"668":4,"684":2,"702":2,"711":2,"726":2,"752":4,"756":3,"1089":11,"1560":3,"1561":1,"1667":11,"1817":83,"1834":3,"1853":4,"1858":9,"1891":10,"1934":3,"1942":5,"1962":4,"1994":74}}],["컨텐츠",{"2":{"1970":1,"2029":1}}],["컨벤션",{"0":{"1781":1}}],["컨트롤러에",{"2":{"859":1,"985":1}}],["컨트롤러에서",{"0":{"610":1}}],["컨트롤러의",{"2":{"572":1,"632":1,"768":1}}],["컨트롤러를",{"2":{"384":1,"399":1}}],["컨트롤러",{"0":{"384":1,"399":1,"539":1,"768":1,"859":1},"1":{"400":1,"401":1,"402":1,"403":1,"404":1,"540":1,"541":1},"2":{"368":1,"372":1,"377":1,"384":1,"397":1,"410":1,"439":1,"448":1,"515":1,"518":1,"525":1,"547":1,"554":1,"570":1,"572":1,"588":1,"589":1,"590":1,"591":1,"598":1,"630":6,"646":1,"684":1,"702":1,"726":1,"861":1}}],["컨텍스트에서",{"2":{"1060":1}}],["컨텍스트에",{"2":{"1059":1}}],["컨텍스트",{"0":{"236":1,"1065":1,"1070":1,"1071":1,"1073":1,"1436":1},"1":{"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1437":1,"1438":1,"1439":1,"1440":1},"2":{"1067":1,"1073":1,"1437":1,"1439":1,"1440":2,"1767":1,"2014":1,"2099":1,"2119":1}}],["도달하지",{"2":{"1530":1}}],["도구의",{"2":{"1688":1,"2188":1}}],["도구",{"0":{"460":1,"469":1,"1698":1},"1":{"1699":1,"1700":1},"2":{"433":1,"1653":1,"1780":1,"2039":1}}],["도구로",{"2":{"266":1,"1197":1}}],["도메인의",{"2":{"1762":1,"1821":1,"1908":1}}],["도메인별로",{"2":{"565":1}}],["도메인별",{"2":{"565":1}}],["도메인을",{"2":{"493":1}}],["도메인",{"2":{"367":1,"368":5,"374":2,"377":1,"448":1,"518":1,"525":1}}],["결정됨",{"2":{"1466":1}}],["결정해야",{"2":{"367":1}}],["결재",{"2":{"1435":1,"2021":2,"2022":2}}],["결과물을",{"2":{"1512":1,"1741":1}}],["결과물은",{"2":{"1174":1,"1504":1,"1511":1,"1740":1}}],["결과물이",{"2":{"563":1,"1483":1}}],["결과물",{"0":{"557":1,"1174":1,"1483":1,"1504":1,"1511":1},"2":{"437":1,"549":1,"1667":1,"1816":1}}],["결과들",{"2":{"33":1}}],["결과",{"0":{"32":1,"35":1,"36":1},"1":{"36":1,"37":1},"2":{"30":1,"33":1,"38":1,"57":1,"67":1,"78":1,"80":1,"98":1,"616":1,"623":2,"729":1,"731":1,"1725":1}}],["결과를",{"2":{"30":1,"32":1,"67":1,"1024":1}}],["과정을",{"2":{"365":1}}],["패키징",{"2":{"452":1}}],["패키지가",{"2":{"1708":1}}],["패키지는",{"2":{"567":1}}],["패키지에",{"2":{"565":1}}],["패키지명은",{"2":{"565":1}}],["패키지명",{"2":{"449":1}}],["패키지",{"0":{"368":1,"376":1,"406":1,"447":1,"448":1,"525":1,"565":1},"1":{"377":1,"378":1,"379":1,"380":1,"381":1,"448":1,"449":1},"2":{"365":1,"368":1,"386":1,"396":1,"431":1,"518":1,"524":1,"560":1,"565":1,"1667":1,"1706":1,"1733":1,"1816":1,"2172":1}}],["패턴으로",{"2":{"432":1,"1957":1}}],["패턴을",{"2":{"365":1,"1756":1,"1922":1}}],["패턴만",{"2":{"60":1}}],["패턴",{"0":{"347":1,"1760":1,"1789":1,"1919":1,"1956":1,"1957":1,"1972":1,"1988":1},"1":{"1920":1,"1921":1,"1957":1,"1958":1,"1973":1,"1974":1,"1989":1,"1990":1},"2":{"60":1,"226":1,"514":1,"515":1,"680":1,"798":1,"913":1,"985":1,"1969":1,"1981":1}}],["패턴의",{"2":{"56":1,"57":1,"119":1}}],["표현",{"2":{"1563":1}}],["표현할",{"2":{"1159":1}}],["표준화해서",{"2":{"1756":1}}],["표준화된",{"2":{"365":1,"431":1,"432":1,"514":1,"524":1}}],["표준",{"0":{"376":1,"448":1,"525":1},"1":{"377":1,"378":1,"379":1,"380":1,"381":1},"2":{"368":1,"518":1,"836":1}}],["표시된",{"2":{"1747":1}}],["표시되므로",{"2":{"1289":1}}],["표시되는지",{"2":{"1617":1}}],["표시되는",{"2":{"765":1,"1067":1,"1109":1,"1116":1,"1836":1}}],["표시됩니다",{"2":{"1288":1}}],["표시합니다",{"2":{"1264":1,"1302":1,"1536":1,"1974":1,"1990":1}}],["표시하기",{"2":{"2073":1,"2098":1,"2103":1}}],["표시하세요",{"2":{"1306":1,"1539":1}}],["표시하고",{"2":{"1154":1}}],["표시하며",{"2":{"1031":1}}],["표시하는",{"2":{"1031":1,"1094":1,"1124":1,"1142":1,"1144":1,"1148":1}}],["표시하려면",{"2":{"200":1}}],["표시할",{"2":{"1026":1,"1033":1,"1289":1}}],["표시",{"0":{"1301":1,"1311":1,"1330":1},"1":{"1302":1,"1303":1},"2":{"31":1,"119":1,"1082":1,"1090":1,"1096":1,"1111":4,"1118":2,"1150":2,"1272":1,"1273":1,"1295":1,"1296":1,"1297":2,"1298":2,"1338":1,"1413":1,"1415":1,"1419":1,"1433":1,"1439":1,"1440":1,"1456":2,"1458":2,"1460":3,"1466":1,"1468":1,"1526":1,"1527":1,"1788":1,"1912":1,"1917":2,"1918":2,"1981":1,"2001":2,"2009":1,"2010":1,"2014":1,"2017":1,"2018":1,"2023":1,"2024":1,"2115":1,"2133":1}}],["문법을",{"2":{"2077":1}}],["문이",{"2":{"1873":1,"2222":1}}],["문",{"2":{"1613":1,"1770":1,"2079":1,"2200":1,"2222":1}}],["문의하세요",{"2":{"1528":1}}],["문제와",{"2":{"522":1,"994":1,"1784":1}}],["문제",{"0":{"508":1,"522":1,"994":1,"1746":1,"2159":1,"2164":1,"2176":1},"1":{"509":1,"510":1,"511":1,"995":1,"996":1,"997":1,"998":1,"1747":1,"1748":1,"1749":1,"2160":1,"2161":1,"2162":1,"2163":1,"2165":1,"2166":1,"2167":1,"2168":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1},"2":{"522":1,"995":1,"996":1,"997":1,"1784":6,"2160":1,"2161":1,"2162":1,"2163":1,"2165":1,"2166":1,"2167":1,"2168":1,"2171":1,"2172":1,"2173":1,"2174":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2184":1,"2185":1,"2186":1,"2187":1}}],["문서들을",{"2":{"1729":1}}],["문서가",{"2":{"859":1}}],["문서",{"0":{"776":1,"858":1,"868":1,"1046":1,"1222":1,"1237":1,"1253":1,"1265":1,"1290":1,"1307":1,"1321":1,"1343":1,"1354":1,"1363":1,"1375":1,"1391":1,"1469":1,"1540":1,"1650":1,"1798":1,"1849":1,"1866":1,"1874":1,"1888":1,"1906":1,"1923":1,"1959":1,"1975":1,"1991":1,"2031":1,"2046":1,"2198":1,"2227":1,"2235":1,"2254":1,"2263":1,"2270":1,"2282":1,"2296":1,"2311":1,"2325":1,"2334":1},"1":{"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"869":1,"870":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1},"2":{"518":1,"523":1,"775":1,"776":1,"777":2,"778":1,"779":1,"781":2,"782":2,"783":1,"856":1,"921":1,"1785":1,"1888":2,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1}}],["문서에서",{"2":{"517":1,"1765":1,"1790":1}}],["문서입니다",{"2":{"514":1,"1756":1}}],["문서를",{"2":{"420":1,"435":1,"456":1,"474":1,"512":1,"853":1,"1619":1,"1650":1,"1665":1,"1692":1,"1710":1,"1750":1,"1790":1,"1831":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"2033":1,"2034":1,"2035":1,"2116":1}}],["문서는",{"0":{"514":1,"1756":1},"2":{"365":1,"436":1,"475":1,"514":1}}],["문서화",{"0":{"395":1,"420":1,"853":1},"1":{"421":1,"422":1,"423":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1},"2":{"353":1,"395":2,"396":1,"433":1,"518":2,"519":1}}],["문자를",{"2":{"2319":1}}],["문자",{"2":{"71":1,"744":1,"945":1}}],["문자열에서",{"2":{"2280":1}}],["문자열의",{"2":{"2214":1,"2315":1}}],["문자열을",{"2":{"2207":1,"2239":1,"2303":1}}],["문자열인",{"2":{"2205":1}}],["문자열이어야",{"2":{"51":1,"665":1}}],["문자열",{"0":{"45":1,"2213":1,"2312":1},"1":{"2214":1,"2313":1,"2314":1,"2315":1,"2316":1,"2317":1,"2318":1,"2319":1,"2320":1,"2321":1,"2322":1,"2323":1,"2324":1,"2325":1},"2":{"33":1,"44":1,"45":1,"651":1,"929":1,"1674":1,"1770":3,"1820":1,"1871":1,"2204":1,"2207":2,"2208":1,"2209":1,"2212":1,"2214":2,"2221":1,"2227":1,"2303":1,"2304":1,"2305":1,"2311":1,"2313":1}}],["문자열로",{"2":{"32":2,"38":1,"2197":1,"2208":1,"2320":1}}],["액션",{"0":{"1381":1,"1396":1,"1405":1,"1414":1,"1425":1,"1450":1,"1459":1,"1474":1,"1634":1},"1":{"1382":1,"1383":1,"1397":1,"1398":1,"1406":1,"1407":1,"1408":1,"1415":1,"1416":1,"1417":1,"1426":1,"1427":1,"1451":1,"1452":1,"1453":1,"1460":1,"1461":1,"1475":1,"1476":1,"1477":1,"1478":1},"2":{"347":1,"1058":1,"1059":1,"1060":1,"1724":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1920":1}}],["액세스",{"2":{"17":1,"76":1,"1377":1,"1379":1,"1380":1,"1382":2,"1383":1,"1390":1}}],["재설치",{"2":{"2178":1}}],["재설정",{"2":{"671":1}}],["재직구분",{"2":{"1969":2}}],["재무",{"2":{"1810":1,"1961":1}}],["재시도할",{"2":{"1304":1,"1534":1}}],["재시도를",{"2":{"1264":1}}],["재시도",{"0":{"1260":1,"1304":1,"1534":1},"2":{"613":1,"699":1,"1264":2,"1276":2,"1306":2,"1318":1,"1337":1,"1534":1,"1539":2}}],["재시작하세요",{"2":{"2058":1}}],["재시작하고",{"2":{"2055":1}}],["재시작해야",{"2":{"1185":1}}],["재시작",{"2":{"344":1,"1185":1,"1749":1,"2179":1}}],["재사용",{"2":{"514":1,"1659":1,"1682":1,"1756":1,"1817":1}}],["재발급",{"0":{"17":1,"24":1,"814":1},"1":{"815":1,"816":1,"817":1},"2":{"20":1,"576":1,"630":1,"811":1,"965":1}}],["재발급을",{"2":{"14":1}}],["외부",{"0":{"468":1,"758":1,"776":1,"1684":1,"2046":1},"1":{"759":1,"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1},"2":{"343":1,"437":1,"523":1,"551":1,"747":1,"759":1,"775":1,"776":1,"1667":1,"1684":1,"1778":1,"1785":1,"1817":1,"1824":1,"1925":1,"1946":1}}],["배치",{"2":{"565":1,"1563":1}}],["배너입니다",{"2":{"765":1}}],["배너",{"0":{"764":1},"1":{"765":1},"2":{"551":1,"747":1}}],["배포합니다",{"2":{"1506":1,"1512":1}}],["배포된",{"2":{"1486":1}}],["배포용",{"2":{"497":1}}],["배포까지의",{"2":{"365":1}}],["배포하는",{"2":{"343":1,"468":1}}],["배포",{"0":{"343":1,"344":1,"1481":1,"1506":1,"1512":1,"1783":1},"1":{"344":1,"345":1,"1482":1,"1483":1,"1484":1,"1485":1,"1486":1,"1487":1},"2":{"342":1,"359":1,"451":1,"503":1,"990":1,"1780":1,"1783":3}}],["배열에서",{"2":{"2195":1}}],["배열로",{"2":{"2193":1}}],["배열이",{"2":{"1045":1}}],["배열의",{"2":{"51":1,"1045":1}}],["배열을",{"2":{"33":1,"2192":1,"2193":1,"2216":1}}],["배열",{"0":{"33":1,"2189":1,"2215":1},"1":{"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2216":1},"2":{"33":2,"665":1,"670":1,"1033":1,"1217":1,"1674":1,"1770":2,"1820":1,"1871":1,"2190":1,"2204":1,"2216":1,"2227":1,"2233":1,"2261":2,"2289":1}}],["어제",{"2":{"2209":1,"2242":1}}],["어댑터",{"2":{"312":1,"573":1,"630":1}}],["어노테이션을",{"2":{"859":1}}],["어노테이션",{"0":{"161":1,"421":1,"859":1,"860":1},"1":{"162":1,"861":1,"862":1,"863":1,"864":1},"2":{"385":1,"574":1,"630":1}}],["작은따옴표",{"2":{"1565":1}}],["작동하지",{"0":{"2055":1}}],["작동하므로",{"2":{"1320":1}}],["작동합니다",{"2":{"1195":1,"1847":1}}],["작업",{"2":{"1614":1,"1724":1,"2014":1}}],["작업이므로",{"2":{"1221":1}}],["작업을",{"2":{"303":1,"307":1,"2091":1}}],["작성할",{"2":{"2077":1}}],["작성하는",{"2":{"315":1,"354":1,"384":1,"385":1,"386":1,"399":1,"411":1,"416":1,"988":1,"991":1}}],["작성되며",{"2":{"232":1}}],["작성합니다",{"2":{"177":1,"372":1,"757":1,"887":1}}],["작성",{"0":{"177":1,"196":1,"315":1,"332":1,"333":1,"372":1,"384":1,"385":1,"386":1,"399":1,"411":1,"416":1,"539":1,"542":1,"544":1,"757":1,"1566":1,"1569":1,"1600":1},"1":{"197":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"400":1,"401":1,"402":1,"403":1,"404":1,"412":1,"413":1,"414":1,"415":1,"417":1,"418":1,"419":1,"540":1,"541":1,"543":1,"545":1,"546":1,"1570":1,"1571":1,"1572":1,"1573":1,"1574":1},"2":{"314":1,"327":1,"338":1,"372":3,"384":1,"385":1,"386":3,"396":4,"397":3,"404":1,"410":3,"415":1,"419":1,"515":3,"516":2,"518":3,"547":1,"562":1,"565":1,"732":1,"909":1,"1776":1,"1781":1}}],["컴포넌트와",{"2":{"1993":1}}],["컴포넌트가",{"2":{"1864":1,"2056":1}}],["컴포넌트들은",{"2":{"1765":1}}],["컴포넌트들이",{"2":{"1677":1,"1823":1}}],["컴포넌트들입니다",{"2":{"1022":1,"1941":1,"1961":1,"1977":1}}],["컴포넌트명",{"0":{"1579":1},"2":{"1612":1}}],["컴포넌트에서",{"0":{"1464":1},"2":{"1300":1,"1522":1,"1683":1,"1720":1,"1819":1,"1838":1,"1841":1,"1842":1,"1854":1}}],["컴포넌트로",{"2":{"1062":1,"1860":1}}],["컴포넌트는",{"2":{"1044":1,"1582":1,"1584":1,"1587":1,"1589":1,"1591":1,"1957":1,"1973":1,"1989":1}}],["컴포넌트입니다",{"2":{"1024":1,"1031":1,"1038":1,"1042":1,"1048":1,"1050":1,"1052":1,"1056":1,"1067":1,"1094":1,"1109":1,"1116":1,"1124":1,"1129":1,"1131":1,"1133":1,"1137":1,"1142":1,"1144":1,"1148":1,"1154":1,"1670":1,"1970":1,"1983":1,"1984":1,"1997":1,"1999":1,"2001":1,"2003":1,"2005":1,"2006":1,"2007":1,"2009":1,"2010":1,"2011":1,"2013":1,"2014":1,"2015":1,"2017":1,"2018":1,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2098":1}}],["컴포넌트를",{"0":{"2056":1,"2184":1},"2":{"1007":1,"1016":1,"1022":1,"1075":1,"1586":1,"1646":1,"1659":1,"1993":1}}],["컴포넌트",{"0":{"1003":1,"1008":1,"1012":1,"1017":1,"1021":1,"1028":1,"1047":1,"1104":1,"1349":1,"1558":1,"1560":1,"1561":1,"1569":1,"1570":1,"1581":1,"1583":1,"1585":1,"1590":1,"1591":1,"1597":1,"1599":1,"1609":1,"1611":1,"1637":1,"1646":1,"1677":1,"1716":1,"1717":1,"1721":1,"1727":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1826":1,"1935":1,"1940":1,"1943":1,"1960":1,"1963":1,"1976":1,"1979":1,"1992":1,"1995":1,"1996":1,"1998":1,"2000":1,"2002":1,"2004":1,"2008":1,"2012":1,"2016":1,"2020":1,"2027":1,"2141":1,"2144":1},"1":{"1004":1,"1005":1,"1006":1,"1007":1,"1009":1,"1010":1,"1011":1,"1013":1,"1014":1,"1015":1,"1016":1,"1018":1,"1019":1,"1020":1,"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1570":1,"1571":1,"1572":1,"1573":1,"1574":1,"1582":1,"1583":1,"1584":1,"1586":1,"1587":1,"1588":1,"1589":1,"1591":1,"1592":1,"1593":1,"1594":1,"1598":1,"1599":1,"1600":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1717":1,"1718":1,"1719":1,"1722":1,"1723":1,"1766":1,"1767":1,"1768":1,"1769":1,"1936":1,"1937":1,"1938":1,"1939":1,"1941":1,"1942":1,"1943":1,"1944":2,"1945":2,"1946":2,"1947":2,"1948":2,"1949":2,"1950":2,"1951":2,"1952":2,"1953":2,"1954":2,"1955":2,"1956":1,"1957":1,"1958":1,"1959":1,"1961":1,"1962":1,"1963":1,"1964":2,"1965":2,"1966":2,"1967":2,"1968":2,"1969":2,"1970":2,"1971":2,"1972":1,"1973":1,"1974":1,"1975":1,"1977":1,"1978":1,"1979":1,"1980":2,"1981":2,"1982":2,"1983":2,"1984":2,"1985":2,"1986":2,"1987":2,"1988":1,"1989":1,"1990":1,"1991":1,"1993":1,"1994":1,"1995":1,"1996":2,"1997":3,"1998":2,"1999":3,"2000":2,"2001":3,"2002":2,"2003":3,"2004":2,"2005":3,"2006":3,"2007":3,"2008":2,"2009":3,"2010":3,"2011":3,"2012":1,"2013":2,"2014":2,"2015":2,"2016":1,"2017":2,"2018":2,"2019":2,"2020":1,"2021":2,"2022":2,"2023":2,"2024":2,"2025":2,"2026":2,"2027":1,"2028":2,"2029":2,"2030":2,"2031":1,"2145":1,"2146":1,"2147":1},"2":{"451":1,"1046":1,"1097":1,"1103":1,"1112":1,"1119":1,"1199":1,"1353":2,"1469":1,"1571":1,"1576":1,"1579":1,"1582":4,"1583":2,"1600":1,"1606":1,"1611":1,"1621":1,"1643":1,"1653":3,"1659":1,"1667":2,"1682":7,"1684":3,"1691":1,"1720":1,"1729":1,"1756":2,"1759":1,"1760":2,"1766":6,"1772":1,"1774":5,"1776":1,"1777":1,"1778":1,"1781":2,"1782":2,"1790":2,"1817":14,"1858":3,"1864":1,"1899":1,"1926":4,"1928":1,"1929":1,"1930":1,"1994":10,"2005":1,"2031":5,"2083":1,"2112":1,"2145":1,"2184":2}}],["컴포넌트용",{"0":{"291":1,"294":1},"2":{"619":1,"851":1}}],["컴파일된",{"2":{"557":2}}],["컴파일",{"0":{"709":1},"2":{"180":1,"709":1}}],["두",{"2":{"289":1,"851":1,"2073":1,"2103":1,"2210":1,"2243":1}}],["연도",{"2":{"2251":1}}],["연결을",{"2":{"289":1,"579":1,"580":1,"1530":1,"1536":1}}],["연결",{"0":{"287":1,"510":1,"511":1,"996":1,"997":1},"1":{"288":1},"2":{"462":1,"463":1,"464":1,"465":1,"481":1,"490":1,"510":1,"515":1,"520":2,"580":2,"619":1,"996":2,"997":1,"1706":2}}],["연동하여",{"2":{"570":1,"597":1}}],["연동하는",{"2":{"6":1}}],["연동",{"0":{"1029":1,"1350":1,"1468":1,"1479":1,"2294":1},"2":{"381":1,"429":1,"516":1,"518":1,"778":1,"852":1,"932":1,"949":1}}],["연동합니다",{"2":{"146":1}}],["명시된",{"2":{"1732":1,"1733":1}}],["명명",{"0":{"1691":1,"1825":1},"1":{"1826":1,"1827":1,"1828":1}}],["명확히",{"2":{"1563":1}}],["명확한",{"2":{"1306":1,"1539":2,"1563":1}}],["명칭",{"2":{"1034":1,"1035":1,"1043":1,"1077":1}}],["명령어는",{"2":{"1733":1}}],["명령어를",{"2":{"1733":1}}],["명령어로",{"2":{"1695":1,"1696":1,"1697":1,"1708":1,"1709":1}}],["명령어",{"0":{"281":1,"1170":1,"1503":1,"1509":1},"1":{"282":1,"283":1,"284":1,"1171":1,"1172":1,"1173":1}}],["명세서",{"2":{"98":1}}],["플랫폼에서",{"2":{"1659":1}}],["플러그인은",{"2":{"1904":1}}],["플러그인입니다",{"2":{"1893":1}}],["플러그인들의",{"2":{"1890":1}}],["플러그인을",{"2":{"1671":1,"1861":1,"1905":1}}],["플러그인",{"0":{"278":1,"1199":1,"1889":1,"1892":1,"1904":1,"1905":1,"2042":1,"2083":1},"1":{"279":1,"280":1,"1890":1,"1891":1,"1892":1,"1893":2,"1894":2,"1895":2,"1896":2,"1897":2,"1898":2,"1899":2,"1900":2,"1901":2,"1902":2,"1903":2,"1904":1,"1905":1,"1906":1,"2043":1,"2044":1,"2045":1},"2":{"1676":1,"1688":1,"1778":1,"1817":2,"1822":1,"1858":1,"1861":1,"1865":2,"1879":1,"1891":2,"1893":1,"1902":1,"1904":1,"1905":3,"1906":1,"2082":2}}],["플로우",{"0":{"24":1}}],["의존성을",{"2":{"1708":1}}],["의존성으로",{"2":{"835":1}}],["의존성은",{"2":{"454":1}}],["의존성",{"0":{"274":1,"454":1,"496":1,"611":1,"612":1,"1708":1,"1733":1,"1748":1,"2172":1,"2178":1},"1":{"275":1,"276":1,"277":1,"612":1},"2":{"463":1,"464":1,"835":1,"836":1,"1667":1,"1687":1,"1712":1,"1733":1,"1748":1,"2038":1,"2059":1,"2172":1,"2180":1}}],["매핑됩니다",{"2":{"1370":1,"1607":1,"1622":1}}],["매핑",{"0":{"1370":1,"1607":1,"1622":1}}],["매니저",{"2":{"618":1}}],["매퍼와",{"2":{"381":1}}],["매퍼",{"0":{"264":1,"318":1,"331":1,"333":1,"374":1,"409":1,"413":1,"444":1,"546":1,"751":1,"753":1,"844":1},"1":{"319":1,"320":1,"752":1,"753":1,"754":1},"2":{"264":1,"331":1,"386":1,"396":1,"434":1,"437":1,"444":2,"551":3,"561":1,"589":1,"590":1,"591":1,"630":4,"747":1,"752":3,"844":1,"909":1}}],["매칭",{"2":{"60":1,"119":1,"123":1}}],["각",{"2":{"263":1,"330":1,"372":1,"397":1,"436":1,"448":1,"473":1,"548":1,"843":1,"1045":1,"1735":1,"1762":1,"1778":1,"1779":1,"1821":1,"1864":1,"1908":1,"2116":1}}],["조정",{"2":{"1841":1,"2161":1}}],["조건",{"2":{"1969":1,"1981":1,"1986":1}}],["조건에",{"2":{"1358":1,"2194":1}}],["조건부",{"0":{"260":1},"2":{"618":1}}],["조용히",{"2":{"1338":1,"1527":2}}],["조직도",{"2":{"1642":1,"1805":1,"1842":3,"1942":1,"1947":1}}],["조직",{"0":{"1563":1,"1613":1},"2":{"1052":1,"1766":1,"1947":1,"2011":2}}],["조회에",{"2":{"1609":1}}],["조회됩니다",{"2":{"87":2,"122":1}}],["조회합니다",{"2":{"56":1,"103":1,"119":1,"120":1,"178":1,"421":1,"859":1,"862":1}}],["조회하고",{"2":{"32":1,"53":1}}],["조회",{"0":{"32":1,"56":1,"94":1,"103":1,"119":1,"120":1,"178":1,"300":1,"309":1,"311":1,"707":1,"1017":1,"2002":1},"1":{"1018":1,"1019":1,"1020":1,"2003":1},"2":{"17":1,"21":1,"23":1,"24":1,"46":1,"56":1,"57":1,"76":2,"77":2,"94":1,"119":1,"199":1,"228":1,"421":2,"530":1,"594":1,"602":1,"632":1,"634":2,"652":1,"704":2,"707":1,"729":1,"731":1,"859":2,"862":1,"863":1,"1020":1,"1139":1,"1156":1,"1609":1,"1682":1,"1766":2,"1768":1,"1803":1,"1942":1,"1945":2,"1946":10,"1947":1,"1949":2,"1951":1,"1953":1,"1955":1,"1969":2,"1971":1,"1981":2,"1982":2,"2003":2,"2005":1,"2021":1,"2022":1,"2025":1,"2026":1}}],["적절한",{"2":{"259":1,"393":1,"613":2,"838":1,"1236":1,"1264":1,"1306":1,"1539":1,"1599":1}}],["적용된",{"2":{"2305":1}}],["적용되지",{"0":{"2058":1},"2":{"2179":1}}],["적용되므로",{"2":{"230":1,"681":1}}],["적용하려면",{"2":{"1887":1}}],["적용할",{"2":{"1176":1}}],["적용됨",{"2":{"670":1}}],["적용",{"0":{"1887":1},"2":{"518":1,"1880":1}}],["적용합니다",{"2":{"216":1}}],["통계",{"2":{"1955":2}}],["통화",{"2":{"1884":1}}],["통신을",{"2":{"1706":1,"2066":1}}],["통신",{"0":{"1763":1,"1773":1,"2159":1},"1":{"2160":1,"2161":1,"2162":1,"2163":1},"2":{"517":1,"1391":1,"1619":1,"1729":1,"1760":1,"1777":1,"1784":2,"2035":1}}],["통신합니다",{"2":{"328":1}}],["통한",{"2":{"394":1,"688":1,"698":1,"1653":1,"1659":2,"2003":1,"2005":1}}],["통해",{"2":{"252":1,"427":1,"832":1,"846":1,"970":1,"986":1,"1239":1,"1251":1,"1267":1,"1345":1,"1369":1,"1514":1,"1584":1,"1604":1,"1626":1,"1709":1,"1763":1,"1958":1,"2001":1,"2077":1,"2091":1,"2137":1,"2138":1,"2200":1}}],["통합",{"0":{"221":1,"428":1,"988":1,"2147":1},"1":{"222":1,"989":1,"990":1},"2":{"208":1,"425":1,"428":1,"514":1,"562":1,"988":1,"993":1,"1652":1,"1659":1,"1904":1,"2086":1}}],["가진",{"2":{"2193":1}}],["가지",{"2":{"2073":1,"2103":1}}],["가",{"2":{"1747":1}}],["가드는",{"2":{"1356":1}}],["가드",{"0":{"1355":1,"1357":1,"1360":1,"1361":1,"2091":1,"2138":1},"1":{"1356":1,"1357":1,"1358":2,"1359":2,"1360":1,"1361":1,"1362":1,"1363":1},"2":{"1354":1,"1375":1,"1896":1}}],["가져와",{"2":{"1272":1,"1350":1}}],["가져옵니다",{"2":{"1244":1,"1245":1,"1408":1,"1453":1,"1958":1,"2268":1,"2289":1}}],["가져오기",{"0":{"1632":1},"2":{"954":1,"1250":1,"1409":1,"1454":1,"1788":1,"1914":2,"1958":1}}],["가독성을",{"2":{"1164":1}}],["가상",{"2":{"1045":1}}],["가이드에서",{"2":{"1790":1}}],["가이드로",{"2":{"1790":1}}],["가이드는",{"2":{"1711":1}}],["가이드를",{"2":{"397":1}}],["가이드입니다",{"2":{"364":1,"1711":1,"1779":1,"2145":1,"2149":1,"2154":1}}],["가이드",{"0":{"315":1,"382":1,"517":1,"520":1,"1711":1,"1765":1,"1779":1,"1922":1,"2307":1},"1":{"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"383":1,"384":1,"385":1,"386":1,"387":1,"1712":1,"1713":1,"1714":1,"1715":1,"1716":1,"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"1726":1,"1727":1,"1728":1,"1729":1,"1766":1,"1767":1,"1768":1,"1769":1,"2308":1,"2309":1},"2":{"251":2,"265":1,"314":2,"327":1,"338":1,"359":2,"415":1,"456":1,"514":1,"515":1,"516":1,"518":1,"547":2,"644":1,"766":2,"852":1,"874":1,"899":1,"987":1,"1619":1,"1729":3,"1750":1,"1756":1,"1759":1,"1763":1,"1770":1,"1783":1,"1888":1}}],["가능합니다",{"2":{"1181":1,"1701":1}}],["가능한",{"2":{"1056":1,"1164":1,"1659":2,"1682":1,"1767":1,"1817":1,"2306":1}}],["가능",{"2":{"51":1,"110":1,"427":1,"665":1,"681":2,"864":1,"906":1,"1458":1,"1461":1,"1696":1,"1879":1,"1917":1,"2222":1}}],["페이드",{"2":{"1838":1}}],["페이지에서",{"2":{"2029":1}}],["페이지의",{"2":{"1970":1,"1986":1,"1987":1}}],["페이지입니다",{"2":{"1794":1,"1795":1,"1796":1,"1802":1,"1803":1,"1804":1,"1805":1,"1936":1,"1937":1,"1939":1,"1945":1,"1946":1,"1947":1,"1949":1,"1951":1,"1953":1,"1955":1,"1965":1,"1966":1,"1967":1,"1969":1,"1971":1,"1981":1,"1982":1}}],["페이지가",{"2":{"1617":1}}],["페이지는",{"2":{"1598":1}}],["페이지를",{"2":{"1471":1,"1596":1,"1790":1}}],["페이지",{"0":{"1146":1,"1560":1,"1595":1,"1597":1,"1677":1,"1717":1,"1772":1,"1793":1,"1801":1},"1":{"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1596":1,"1597":1,"1598":2,"1599":2,"1600":2,"1601":1,"1602":1,"1603":1,"1604":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":1,"1616":1,"1617":1,"1618":1,"1619":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1794":1,"1795":1,"1796":1,"1802":1,"1803":1,"1804":1,"1805":1},"2":{"1080":1,"1144":1,"1148":1,"1150":1,"1151":1,"1360":1,"1362":1,"1372":1,"1599":1,"1600":1,"1619":1,"1667":1,"1670":1,"1677":1,"1678":1,"1683":1,"1717":1,"1729":1,"1769":1,"1772":1,"1817":4,"1819":1,"1823":1,"1854":1,"1858":1,"1864":5,"1879":1,"1895":5,"1926":1,"1934":2,"2025":2,"2028":1,"2292":2,"2294":2}}],["페이지로",{"2":{"17":1,"78":1,"1249":1,"1262":1,"1276":1,"1287":1,"1294":1,"1295":1,"1359":1,"1389":1,"1390":1,"1525":2,"1797":1,"2057":1,"2162":1,"2165":1,"2181":1}}],["페이징",{"2":{"250":1,"577":1,"630":1,"1817":1,"2099":1,"2119":1}}],["맞는",{"2":{"473":1,"1709":1,"1735":1,"2194":1}}],["맞게",{"2":{"243":1,"494":1,"1713":1}}],["맞춰",{"2":{"30":1}}],["반올림합니다",{"2":{"2281":1}}],["반응형이므로",{"2":{"1635":1}}],["반응형",{"0":{"1574":1},"2":{"1463":1,"1613":1,"1920":1}}],["반응성",{"0":{"1635":1},"2":{"1045":1}}],["반려",{"2":{"1435":1,"2021":1}}],["반복",{"2":{"432":1}}],["반드시",{"2":{"237":1,"492":1,"516":1,"681":1,"968":1,"1236":1,"1761":1}}],["반환값",{"2":{"1215":1,"1216":1,"1217":1,"1385":1,"2204":1,"2205":1,"2207":1,"2208":1,"2209":1,"2210":1,"2212":1,"2214":1,"2216":1,"2220":1,"2221":1,"2231":1,"2232":1,"2233":1,"2268":1,"2288":1,"2289":1,"2302":1,"2303":1,"2304":1,"2305":1}}],["반환된",{"2":{"114":1,"200":1,"723":1}}],["반환하는",{"2":{"30":1,"36":1,"105":1,"185":1,"713":1}}],["반환합니다",{"2":{"30":1,"92":1,"99":1,"975":1,"1319":1,"1385":1,"2205":1,"2248":1,"2303":1}}],["반환됩니다",{"2":{"23":1,"36":1,"123":2}}],["반환",{"0":{"99":1,"1327":1},"2":{"17":1,"24":1,"46":1,"50":1,"119":1,"613":1,"636":1,"661":1,"704":1,"1296":1,"1297":1}}],["└──────────┴──────────────────────┘",{"2":{"1089":1}}],["└──",{"2":{"233":2,"368":13,"377":2,"388":9,"406":5,"434":3,"437":6,"439":6,"440":5,"441":1,"443":1,"444":3,"445":1,"446":1,"448":1,"454":1,"455":5,"478":3,"525":1,"527":18,"534":13,"549":2,"551":8,"552":3,"554":9,"555":5,"556":4,"557":1,"558":4,"568":1,"598":4,"616":1,"630":17,"646":3,"649":3,"668":5,"676":1,"684":4,"702":4,"711":3,"726":4,"747":1,"750":1,"752":4,"754":1,"756":3,"759":1,"1558":1,"1560":1,"1561":1,"1562":1,"1667":3,"1816":1,"1817":16,"1834":2,"1853":3,"1858":3,"1877":2,"1891":4,"1909":1,"1926":2,"1934":3,"1942":6,"1962":5,"1978":3,"1994":15}}],["├──────────┬──────────────────────┤",{"2":{"1089":1}}],["├──",{"2":{"233":4,"368":5,"377":3,"388":12,"406":3,"434":5,"437":13,"439":22,"440":12,"441":2,"443":3,"444":4,"445":2,"446":1,"448":3,"454":1,"455":3,"478":4,"525":3,"527":12,"534":8,"549":6,"551":19,"552":1,"554":30,"555":12,"556":8,"557":4,"558":2,"568":8,"598":3,"616":5,"630":35,"646":1,"649":2,"668":4,"676":1,"684":2,"702":2,"711":3,"726":2,"747":8,"750":3,"752":4,"754":2,"756":5,"1558":2,"1560":2,"1561":1,"1667":16,"1816":7,"1817":47,"1834":5,"1853":4,"1858":12,"1877":1,"1891":11,"1909":7,"1926":8,"1934":5,"1942":12,"1962":5,"1978":5,"1994":33}}],["고객",{"0":{"1980":1},"1":{"1981":1,"1982":1,"1983":1,"1984":1},"2":{"1978":7,"1981":2,"1982":3,"1983":3,"1984":3,"1986":1,"1987":1}}],["고유",{"2":{"1606":1,"1621":1}}],["고려해야",{"2":{"1848":1}}],["고려사항",{"0":{"1236":1}}],["고려하세요",{"2":{"1045":1}}],["고려",{"2":{"230":1,"681":1}}],["고정",{"2":{"56":2,"100":1,"1070":1,"1467":1}}],["성별",{"2":{"1969":2}}],["성능",{"0":{"1501":1},"2":{"230":1,"681":2,"1045":1,"1221":1}}],["성공하면",{"2":{"497":1}}],["성공하였습니다",{"2":{"34":1}}],["성공했습니다",{"2":{"76":1}}],["성공해야",{"2":{"38":1}}],["성공",{"0":{"136":1,"351":1,"402":1,"1324":1,"1341":1,"1554":1},"1":{"1325":1,"1326":1,"1327":1},"2":{"9":1,"17":1,"30":2,"31":1,"37":1,"45":1,"56":1,"57":1,"67":4,"76":1,"78":2,"98":2,"120":1,"121":3,"138":1,"154":1,"421":1,"541":1,"632":2,"651":1,"859":1,"864":1,"891":1,"1279":2,"1300":1,"1339":1,"1341":1,"1516":1,"1523":2,"1554":1,"1555":1,"1556":1,"1614":1,"1789":1}}],["태그의",{"2":{"2268":1}}],["태그와",{"2":{"984":1}}],["태그",{"2":{"226":1,"680":1,"761":1}}],["해제하거나",{"2":{"2310":1}}],["해제하고",{"2":{"2308":1}}],["해제",{"2":{"2308":1}}],["해석",{"2":{"1690":1}}],["해주세요",{"2":{"1262":1,"1276":1,"1337":1}}],["해결",{"0":{"508":1,"522":1,"994":1,"1746":1,"2176":1},"1":{"509":1,"510":1,"511":1,"995":1,"996":1,"997":1,"998":1,"1747":1,"1748":1,"1749":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1},"2":{"522":2,"994":1,"995":1,"996":1,"997":1,"1784":4,"2160":1,"2161":1,"2162":1,"2163":1,"2165":1,"2166":1,"2167":1,"2168":1,"2171":1,"2172":1,"2173":1,"2174":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2184":1,"2185":1,"2186":1,"2187":1}}],["해시",{"0":{"212":1,"791":1,"979":1},"1":{"213":1,"214":1,"792":1,"793":1,"980":1,"981":1},"2":{"575":2,"630":2,"640":1,"641":1}}],["해당하지",{"2":{"1358":1}}],["해당하는",{"2":{"1045":1,"1677":1,"1823":1}}],["해당",{"2":{"97":1,"108":1,"1617":1,"1736":1}}],["공백이",{"2":{"2214":1}}],["공백을",{"2":{"2214":1,"2315":1}}],["공간",{"2":{"1703":2,"1704":2}}],["공식",{"0":{"1650":1},"2":{"776":1,"777":1,"778":1,"779":1,"781":1,"782":1,"783":1,"1650":1,"1785":1,"1888":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1}}],["공격을",{"2":{"798":1,"983":1,"985":1}}],["공격",{"2":{"226":1,"428":1,"587":1,"622":1,"670":1,"680":1,"936":1,"1236":1}}],["공개키",{"2":{"211":1,"788":1,"978":1}}],["공통으로",{"2":{"567":1,"629":1,"1538":1,"1673":1,"1819":1,"1854":1}}],["공통",{"0":{"131":1,"135":1,"141":1,"303":1,"389":1,"429":1,"439":1,"517":1,"530":1,"536":1,"554":1,"567":1,"571":1,"592":1,"629":1,"642":1,"697":1,"768":1,"769":1,"846":1,"1561":1,"1721":1,"1766":1,"1867":1,"1956":1,"1972":1,"1988":1,"1995":1,"2199":1},"1":{"132":1,"133":1,"134":1,"135":1,"136":2,"137":2,"138":1,"139":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"390":1,"391":1,"392":1,"568":1,"569":1,"570":1,"571":1,"572":2,"573":2,"574":2,"575":2,"576":2,"577":2,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":2,"594":2,"595":2,"596":1,"630":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":2,"644":1,"698":1,"1722":1,"1723":1,"1868":1,"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1957":1,"1958":1,"1973":1,"1974":1,"1989":1,"1990":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2222":1,"2223":1,"2224":1,"2225":1,"2226":1,"2227":1},"2":{"45":1,"124":1,"127":1,"128":1,"130":2,"145":1,"247":1,"303":1,"304":1,"307":1,"338":1,"388":1,"389":1,"392":1,"398":1,"425":1,"431":1,"432":1,"434":1,"437":1,"439":4,"440":1,"441":1,"444":1,"454":2,"456":1,"514":1,"516":4,"517":2,"518":1,"521":1,"527":1,"534":1,"536":1,"551":1,"554":4,"555":1,"556":1,"565":2,"566":1,"568":1,"570":1,"577":1,"598":1,"602":1,"614":1,"630":7,"636":1,"644":1,"651":1,"663":1,"666":1,"700":1,"724":1,"745":2,"752":1,"794":1,"896":1,"899":1,"959":1,"1046":1,"1431":1,"1582":1,"1659":1,"1682":2,"1756":3,"1760":1,"1766":1,"1770":2,"1778":1,"1817":2,"1820":1,"1858":1,"1864":1,"1865":1,"1868":1,"1874":1,"1993":1,"1994":1,"1997":1,"2031":1,"2033":1,"2198":1,"2200":1,"2235":1,"2254":1,"2263":1,"2270":1,"2282":1,"2311":1,"2325":1,"2334":1}}],["방문한",{"2":{"1404":1,"1913":1}}],["방식",{"0":{"1760":1},"2":{"670":1,"671":1,"672":1,"1226":1,"1227":1,"1580":1,"1764":1,"1774":1}}],["방화벽",{"2":{"510":1,"996":1}}],["방지하기",{"2":{"1264":1}}],["방지합니다",{"2":{"798":1,"983":1,"985":1}}],["방지를",{"2":{"665":1}}],["방지",{"0":{"215":1,"982":1},"1":{"216":1,"217":1,"983":1,"984":1,"985":1},"2":{"208":1,"428":1,"551":1,"583":1,"587":1,"622":1,"668":1,"670":1,"676":1,"682":1,"747":1,"761":1,"936":1,"986":3,"1236":1}}],["방법입니다",{"2":{"1782":1,"1783":1,"1784":1}}],["방법",{"0":{"132":1,"608":1,"691":1,"1277":1,"1513":1,"1843":1,"1881":1},"1":{"133":1,"134":1,"609":1,"610":1,"692":1,"693":1,"694":1,"1278":1,"1279":1,"1280":1,"1281":1,"1514":1,"1515":1,"1516":1,"1517":1,"1518":1,"1519":1,"1844":1,"1845":1,"1846":1,"1882":1,"1883":1,"1884":1},"2":{"383":1,"384":1,"385":1,"386":1,"387":1,"394":1,"522":1,"750":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1540":1,"1760":1,"1773":2,"1783":3,"1836":1,"1838":1,"1840":1,"1841":1,"1842":1,"1893":1,"1959":1,"1975":1,"1991":1,"2001":1}}],["방법을",{"2":{"9":1,"174":1,"315":1,"339":1,"343":1,"354":1,"360":1,"399":1,"405":1,"411":1,"416":1,"420":1,"475":1,"520":1,"522":1,"988":1,"991":1,"994":1,"999":1,"1521":1,"1790":1}}],["포트를",{"2":{"1491":1,"1747":1,"2177":1}}],["포트로",{"2":{"509":1}}],["포트가",{"2":{"509":1,"511":1,"995":1,"1491":1}}],["포트",{"0":{"236":1,"509":1,"995":1,"1491":1,"1747":1,"2177":1},"2":{"472":2,"510":1,"995":1,"997":1,"1490":1,"1747":2,"2177":1}}],["포맷팅할",{"2":{"2212":1}}],["포맷팅된",{"2":{"2207":1,"2212":1}}],["포맷팅합니다",{"2":{"2207":1,"2212":1,"2239":1,"2249":1,"2274":1,"2276":1,"2277":1,"2279":1,"2324":1}}],["포맷팅은",{"2":{"1745":1}}],["포맷팅",{"0":{"2225":1},"2":{"1725":1,"1770":2,"1787":2,"1999":1,"2033":2}}],["포맷",{"2":{"167":1,"763":1}}],["포함됩니다",{"2":{"1688":1,"1690":1}}],["포함하여",{"2":{"1670":1}}],["포함합니다",{"2":{"1662":1,"1672":1,"1993":1}}],["포함됨",{"2":{"1281":1,"1342":1,"1546":1}}],["포함한",{"2":{"1270":1}}],["포함해야",{"2":{"1045":1}}],["포함되어",{"2":{"563":1,"1824":1,"1857":1,"1871":1}}],["포함된",{"2":{"57":1,"1212":1,"1316":1}}],["포함",{"0":{"694":1},"2":{"24":1,"33":1,"37":1,"67":1,"83":1,"462":1,"471":1,"834":1,"904":1,"916":1}}],["+44edtcyufcshospuhnre9ivtfmohbwa",{"2":{"211":1,"238":1,"790":1,"978":1}}],["+",{"2":{"154":1,"356":1,"514":1,"649":4,"675":1,"825":5,"891":1,"1304":1,"1326":1,"1576":1,"1691":1,"1756":3,"1845":1}}],["클릭되었습니다",{"2":{"1717":1}}],["클릭하여",{"2":{"1121":1}}],["클릭재킹",{"2":{"986":1}}],["클릭",{"0":{"1054":1},"1":{"1055":1,"1056":1,"1057":1,"1058":1,"1059":1,"1060":1},"2":{"500":1,"872":2,"873":2,"1007":1,"1056":1,"1058":1,"1096":1,"1118":1,"1434":1,"1566":1,"1767":2,"2013":2}}],["클론합니다",{"2":{"1731":1}}],["클론한",{"2":{"1708":1}}],["클론",{"0":{"476":1,"1712":1,"1731":1},"1":{"477":1,"478":1},"2":{"477":1,"1712":1}}],["클래스들입니다",{"2":{"615":1,"667":1}}],["클래스패스",{"2":{"561":1,"757":1}}],["클래스명",{"0":{"1580":1},"2":{"449":1}}],["클래스를",{"2":{"246":1,"372":1,"767":1,"1044":1}}],["클래스입니다",{"2":{"222":1,"247":1}}],["클래스",{"0":{"246":1,"372":1,"578":1,"599":1,"615":1,"617":1,"631":1,"647":1,"667":1,"685":1,"703":1,"727":1,"767":1,"770":1,"2032":1},"1":{"247":1,"248":1,"249":1,"250":1,"251":1,"579":1,"580":1,"581":1,"582":1,"583":1,"600":1,"601":1,"602":1,"616":1,"617":1,"618":2,"619":2,"620":2,"621":2,"622":2,"623":2,"624":1,"625":1,"626":1,"627":1,"628":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"640":1,"641":1,"648":1,"649":1,"668":1,"669":1,"670":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"686":1,"687":1,"688":1,"704":1,"705":1,"728":1,"729":1,"768":1,"769":1,"770":1,"771":1,"2033":1,"2034":1,"2035":1},"2":{"151":1,"168":1,"206":1,"396":2,"439":3,"517":1,"523":1,"552":1,"554":3,"557":2,"568":1,"570":1,"572":1,"588":1,"589":1,"590":1,"591":1,"596":1,"614":1,"628":1,"632":1,"636":1,"644":2,"768":1,"959":1,"1785":1,"1840":1}}],["클라이언트",{"0":{"34":1,"2065":1},"1":{"2066":1,"2067":1,"2068":1,"2069":1},"2":{"19":1,"20":1,"24":2,"46":1,"84":1,"120":1,"121":1,"248":1,"636":2,"651":1,"652":1,"731":1,"1658":1,"1777":1,"2116":1}}],["클라이언트에서",{"2":{"34":1,"356":1,"1181":1,"1185":1}}],["클라이언트에",{"2":{"17":1}}],[">카운트",{"2":{"2078":1}}],[">사업장",{"2":{"1973":1}}],[">클릭하세요",{"2":{"1717":1}}],[">조회",{"2":{"1609":1}}],[">",{"2":{"149":1,"156":2,"172":1,"178":1,"179":1,"195":2,"197":21,"199":2,"239":2,"241":2,"305":1,"320":4,"322":4,"323":1,"325":3,"326":2,"333":4,"335":1,"336":1,"337":1,"358":2,"390":1,"413":4,"417":1,"418":1,"493":2,"546":4,"570":1,"593":1,"609":2,"619":1,"620":4,"622":1,"633":2,"675":2,"707":1,"708":1,"753":4,"799":1,"822":2,"823":1,"825":1,"829":1,"830":1,"846":1,"883":1,"888":1,"894":2,"950":1,"970":2,"971":1,"972":1,"1006":1,"1007":1,"1011":1,"1015":1,"1016":1,"1020":1,"1027":2,"1035":1,"1036":1,"1040":1,"1063":1,"1072":2,"1097":1,"1112":1,"1119":1,"1126":1,"1140":1,"1399":1,"1428":2,"1463":2,"1464":2,"1537":1,"1570":2,"1583":3,"1588":1,"1591":1,"1592":1,"1593":1,"1600":3,"1609":3,"1637":1,"1643":1,"1648":2,"1649":2,"1717":1,"1722":1,"1723":1,"1728":1,"1836":1,"1837":2,"1844":1,"1845":1,"1860":1,"1887":1,"1945":1,"1949":1,"1969":1,"1973":6,"1974":1,"1981":1,"1983":1,"1989":5,"1990":1,"1997":1,"1999":1,"2003":1,"2005":1,"2006":1,"2009":1,"2014":1,"2062":2,"2120":1}}],["잘못된",{"0":{"1526":1},"2":{"138":1,"864":1,"1300":1,"1526":2,"1536":1,"2221":1,"2330":1}}],["개월수를",{"2":{"2244":1}}],["개별",{"2":{"1212":1,"1316":1}}],["개별적으로",{"2":{"1212":1,"1284":1,"1316":1}}],["개의",{"2":{"289":1,"851":1}}],["개발용",{"2":{"1715":2}}],["개발팀",{"2":{"1027":1}}],["개발에",{"2":{"523":1}}],["개발자",{"2":{"1659":1,"2188":1}}],["개발자를",{"0":{"515":1,"1757":1},"1":{"1758":1,"1759":1,"1760":1},"2":{"1711":1}}],["개발자용",{"2":{"514":1,"1756":1}}],["개발자들이",{"2":{"514":1,"1756":1}}],["개발할",{"2":{"514":1,"1756":1}}],["개발되었습니다",{"2":{"432":1,"1659":1}}],["개발을",{"2":{"425":2,"514":1,"904":1,"960":1}}],["개발",{"0":{"282":1,"340":1,"382":1,"459":1,"469":1,"475":1,"1171":1,"1183":1,"1488":1,"1489":1,"1617":1,"1698":1,"1706":1,"1714":1,"1730":1,"1736":1,"1738":1,"1759":1,"1760":1},"1":{"383":1,"384":1,"385":1,"386":1,"387":1,"476":1,"477":1,"478":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1,"1699":1,"1700":1,"1731":1,"1732":1,"1733":1,"1734":1,"1735":1,"1736":1,"1737":1,"1738":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1,"1745":1,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1},"2":{"233":1,"251":2,"273":1,"365":1,"432":3,"435":1,"443":1,"473":2,"474":2,"475":1,"502":1,"512":1,"514":1,"515":3,"518":1,"520":1,"522":1,"551":1,"626":1,"627":1,"750":2,"773":1,"857":1,"874":1,"1179":1,"1185":1,"1187":1,"1195":1,"1494":1,"1653":2,"1659":2,"1665":1,"1700":1,"1701":1,"1704":1,"1710":2,"1715":1,"1719":1,"1729":1,"1735":1,"1736":2,"1747":1,"1749":1,"1750":1,"1758":1,"1759":2,"1780":2,"1783":2,"1785":1,"1790":2,"2055":1,"2058":1,"2082":1,"2177":1,"2179":1}}],["개인정보",{"0":{"228":1},"2":{"210":1,"787":1,"977":1}}],["개요",{"0":{"130":1,"175":1,"208":1,"365":1,"424":1,"519":1,"1022":1,"1024":1,"1031":1,"1038":1,"1056":1,"1062":1,"1067":1,"1080":1,"1086":1,"1094":1,"1101":1,"1109":1,"1116":1,"1124":1,"1137":1,"1148":1,"1154":1,"1159":1,"1166":1,"1178":1,"1187":1,"1197":1,"1208":1,"1224":1,"1239":1,"1255":1,"1267":1,"1292":1,"1309":1,"1323":1,"1345":1,"1356":1,"1365":1,"1377":1,"1393":1,"1402":1,"1411":1,"1422":1,"1431":1,"1437":1,"1442":1,"1447":1,"1456":1,"1471":1,"1514":1,"1521":1,"1596":1,"1651":1,"1792":1,"1800":1,"1808":1,"1812":1,"1833":1,"1851":1,"1857":1,"1868":1,"1876":1,"1890":1,"1908":1,"1925":1,"1933":1,"1941":1,"1961":1,"1977":1,"1993":1,"2066":1,"2118":1,"2122":1,"2135":1,"2140":1,"2145":1,"2149":1,"2154":1,"2190":1,"2200":1,"2229":1,"2237":1,"2256":1,"2265":1,"2272":1,"2284":1,"2298":1,"2313":1,"2327":1},"1":{"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1},"2":{"515":1,"516":1,"1046":1,"1758":1,"1770":1}}],["개수",{"2":{"57":1,"1473":1}}],["보입니다",{"2":{"2300":1}}],["보관된",{"2":{"2300":1}}],["보상",{"2":{"1946":1}}],["보이기",{"2":{"1463":1}}],["보통",{"2":{"1226":1,"1227":1}}],["보장",{"2":{"432":1}}],["보기",{"2":{"124":1,"521":1}}],["보안상",{"2":{"1390":1}}],["보안을",{"2":{"208":1}}],["보안",{"0":{"207":1,"225":1,"391":1,"428":1,"679":1,"760":1,"795":1,"824":1,"827":1,"960":1,"986":1,"1236":1,"1764":1},"1":{"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":2,"227":1,"228":1,"229":1,"230":1,"231":1,"680":1,"761":1,"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"825":1,"826":1,"827":1,"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"985":1,"986":1,"987":1},"2":{"25":1,"60":1,"207":1,"208":1,"222":2,"230":1,"231":1,"275":1,"302":1,"425":1,"432":2,"433":1,"439":1,"516":3,"518":1,"519":1,"554":1,"581":1,"613":1,"620":3,"630":1,"682":1,"699":1,"794":2,"795":1,"819":1,"831":1,"852":1,"917":1,"937":1,"960":1,"986":1,"987":1,"1185":1,"1252":1,"1390":1}}],["레거시",{"2":{"2300":1}}],["레이아웃입니다",{"2":{"1080":1,"1086":1,"1101":1,"1938":1,"2028":1,"2029":1,"2030":1}}],["레이아웃",{"0":{"1078":1,"1084":1,"1089":1,"1099":1,"1371":1,"1372":1,"1373":1,"1374":1,"1769":1,"1992":1,"2027":1},"1":{"1079":1,"1080":1,"1081":1,"1082":1,"1083":1,"1085":1,"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1,"1100":1,"1101":1,"1102":1,"1103":1,"1104":1,"1105":1,"1106":1,"1372":1,"1373":1,"1374":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":2,"2029":2,"2030":2,"2031":1},"2":{"882":1,"1678":1,"1682":1,"1684":1,"1769":6,"1817":2,"1841":1,"1858":1,"1864":1,"1895":1,"1926":1,"1929":1,"1993":1,"1994":5,"2028":1,"2030":1,"2031":1}}],["레벨에서",{"2":{"432":1,"1860":1}}],["레벨",{"0":{"163":1,"1001":1},"1":{"164":1,"165":1},"2":{"167":1,"763":1,"1864":1}}],["레퍼런스",{"0":{"129":1,"521":1},"1":{"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1},"2":{"124":1,"521":1,"614":1,"779":1}}],["레디스",{"2":{"17":1}}],["아니므로",{"2":{"1848":1}}],["아니면",{"2":{"123":1,"2204":1,"2205":1,"2220":1,"2221":1,"2302":1}}],["아웃",{"2":{"1838":1}}],["아이콘",{"0":{"1649":1,"1743":1,"2060":1,"2063":1,"2064":1},"1":{"2061":1,"2062":1,"2063":1,"2064":1},"2":{"1676":1,"1733":1,"1785":2,"1822":1,"1891":1,"1898":1,"1900":2,"1902":4}}],["아이콘을",{"2":{"1121":1,"1743":2,"2061":1,"2063":1}}],["아이디",{"2":{"76":1,"1715":1}}],["아카이버",{"2":{"557":1}}],["아래",{"2":{"517":1,"1765":1}}],["아키텍처",{"0":{"516":1,"1761":1},"1":{"1762":1,"1763":1,"1764":1},"2":{"1659":1}}],["즐겨찾기에",{"2":{"1121":1,"1407":1}}],["즐겨찾기",{"0":{"120":1,"121":1,"1121":1},"2":{"120":3,"121":4,"123":1,"421":2,"530":1,"859":2,"862":2,"1094":1,"1096":3,"1098":1,"1111":1,"1118":1,"1404":1,"1408":1,"1409":1,"1762":1}}],["첫",{"0":{"1716":1},"1":{"1717":1,"1718":1,"1719":1},"2":{"119":1,"123":1,"1261":1,"1717":1,"1759":1,"1790":1}}],["검사",{"2":{"798":1,"985":1}}],["검색하려면",{"2":{"1790":1}}],["검색",{"0":{"1973":1,"1989":1},"2":{"119":1,"1435":1,"1790":1,"1969":1,"1973":1,"1981":2,"1983":1,"1984":1,"1986":1,"1989":1,"2003":1}}],["검증합니다",{"2":{"974":1,"2220":1,"2323":1,"2331":1,"2332":1}}],["검증을",{"2":{"972":1}}],["검증하여",{"2":{"803":1}}],["검증",{"0":{"813":1,"967":1,"2203":1,"2219":1,"2226":1,"2326":1,"2333":1},"1":{"2204":1,"2205":1,"2220":1,"2221":1,"2327":1,"2328":1,"2329":1,"2330":1,"2331":1,"2332":1,"2333":1,"2334":1},"2":{"17":1,"23":1,"24":1,"219":2,"220":1,"249":3,"392":1,"576":1,"577":1,"618":1,"630":1,"635":1,"672":1,"803":1,"917":1,"974":1,"1526":1,"1770":5,"1871":1,"1880":1,"1999":1,"2327":1,"2333":3}}],["폰트가",{"2":{"756":1}}],["폰트를",{"2":{"195":1}}],["폰트는",{"2":{"113":1,"889":1}}],["폰트",{"0":{"113":1,"192":1,"193":1,"194":1,"195":1,"717":1,"718":1,"719":1,"889":1},"1":{"193":1,"194":1,"195":1,"718":1,"719":1},"2":{"113":1,"200":2,"446":1,"551":1,"711":1,"756":1,"886":1,"889":1,"1499":1,"1684":1,"1891":1,"1903":2,"1926":1,"1931":1}}],["소수점",{"2":{"2212":2}}],["소프트웨어",{"0":{"1694":1},"1":{"1695":1,"1696":1,"1697":1}}],["소개",{"0":{"425":1,"1652":1},"2":{"1758":1}}],["소문자",{"2":{"114":1,"449":1,"565":1,"636":1}}],["소문자로",{"2":{"105":1,"185":1,"200":1,"565":1,"636":1,"713":1,"723":1}}],["소스맵",{"2":{"1175":1}}],["소스",{"0":{"438":1,"550":1,"553":1,"1669":1},"1":{"439":1,"440":1,"441":1,"551":1,"552":1,"554":1,"555":1,"556":1,"1670":1,"1671":1,"1672":1},"2":{"44":2,"478":1,"549":2,"551":1,"557":1,"560":1,"1667":1,"1669":1,"1816":1,"1857":1}}],["8자리",{"2":{"2245":1}}],["8gb",{"2":{"1704":1}}],["800",{"2":{"1428":1}}],["80바이트",{"2":{"737":1}}],["8081",{"2":{"509":1,"995":1}}],["8080",{"2":{"144":1,"236":1,"239":1,"422":1,"472":1,"493":1,"506":2,"509":1,"518":1,"857":2,"866":1,"867":1,"921":1,"995":1,"1180":3,"1183":2,"1194":1,"1202":3,"1713":3,"1734":3}}],["8+7",{"2":{"459":2}}],["842",{"2":{"197":1}}],["8",{"0":{"508":1,"509":1,"510":1,"511":1,"591":1,"1724":1},"1":{"509":1,"510":1,"511":1},"2":{"101":1,"102":1,"156":1,"197":1,"236":1,"320":1,"333":1,"413":1,"459":1,"460":1,"546":1,"663":1,"693":1,"694":1,"753":1,"894":1,"1326":1,"1613":1,"1973":1}}],["허용할",{"2":{"761":2,"984":1}}],["허용된",{"2":{"226":1,"621":1,"680":1}}],["허용",{"2":{"100":1,"493":1,"621":1}}],["창",{"2":{"1769":1}}],["창에",{"2":{"1101":1,"1374":1}}],["창에서",{"2":{"99":1,"1103":1,"2030":1}}],["창의성",{"2":{"9":1}}],["$1",{"2":{"1884":1}}],["$t",{"2":{"1883":2}}],["$axios",{"2":{"1861":1}}],["$f",{"2":{"195":1,"197":2}}],["$primary",{"2":{"1639":1}}],["$p",{"2":{"106":2,"110":1,"186":2}}],["$",{"2":{"98":1,"621":2,"649":1,"729":2,"1230":1,"1260":1,"1261":1,"1273":1,"1276":2,"1312":1,"1336":1,"1337":1,"2224":1}}],["`차이",{"2":{"2224":1}}],["```",{"2":{"1752":1}}],["`bearer",{"2":{"1230":1,"1260":1,"1261":1,"1273":1,"1276":2,"1312":1,"1336":1,"1337":1}}],["`",{"2":{"98":2,"505":1,"1230":1,"1260":1,"1261":1,"1273":1,"1276":2,"1312":1,"1336":1,"1337":1}}],["`f",{"2":{"46":1}}],["급여",{"2":{"98":1,"1970":1}}],["복잡한",{"2":{"882":1}}],["복원",{"2":{"801":1}}],["복지",{"0":{"532":1},"2":{"388":1,"440":1,"527":1,"532":1,"555":1}}],["복사합니다",{"2":{"1847":1,"2196":1}}],["복사되므로",{"2":{"1844":1}}],["복사되는",{"2":{"1685":1,"1833":1}}],["복사됩니다",{"2":{"1833":1}}],["복사",{"2":{"98":2,"100":1,"110":1,"190":1,"344":1,"503":1,"716":1,"953":1,"954":1,"1816":1}}],["복호화는",{"2":{"1221":1}}],["복호화를",{"2":{"1208":1,"2109":1}}],["복호화합니다",{"2":{"801":1,"1216":1,"2232":1}}],["복호화하고",{"2":{"801":1}}],["복호화하는",{"2":{"224":1}}],["복호화된",{"2":{"224":1,"671":2,"1216":1,"2232":1}}],["복호화됩니다",{"2":{"114":1,"200":1,"1213":1,"1282":1}}],["복호화할",{"2":{"95":1,"1216":1,"2232":1}}],["복호화",{"0":{"95":1,"111":1,"191":1,"223":1,"229":1,"800":1,"1207":1,"1213":1,"1220":1,"1282":1,"2228":1},"1":{"224":1,"801":1,"1208":1,"1209":1,"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1,"1217":1,"1218":1,"1219":1,"1220":1,"1221":1,"1222":1,"1283":1,"1284":1,"2229":1,"2230":1,"2231":1,"2232":1,"2233":1,"2234":1,"2235":1},"2":{"76":1,"111":3,"114":1,"191":1,"200":1,"208":1,"210":2,"211":1,"224":1,"228":1,"230":1,"554":1,"583":1,"587":1,"595":1,"622":1,"638":1,"639":1,"641":1,"668":1,"671":3,"676":1,"723":2,"786":1,"787":1,"789":1,"801":2,"977":2,"978":1,"1209":1,"1220":1,"1267":1,"1283":1,"1672":1,"1764":1,"1770":1,"1862":1,"2068":1,"2095":1,"2128":1,"2163":1,"2229":1,"2235":1}}],["웹앱",{"2":{"97":1,"109":1,"715":1}}],["웹",{"0":{"109":1,"189":1,"1484":1},"2":{"97":2,"275":1,"582":1,"630":1,"643":1,"904":1,"941":1,"1484":1,"1506":1,"1891":1,"1903":1}}],["등이",{"2":{"1688":1}}],["등의",{"2":{"1661":1,"1662":1,"1672":1,"1880":1,"2091":1}}],["등에서",{"2":{"2028":1}}],["등에",{"2":{"905":1,"1080":1,"1372":1}}],["등은",{"2":{"699":1}}],["등록한",{"2":{"1671":1}}],["등록하거나",{"2":{"1719":1}}],["등록하면",{"2":{"1604":1,"1626":1}}],["등록하세요",{"2":{"1353":1}}],["등록되는",{"2":{"1604":1}}],["등록되지",{"2":{"1353":1}}],["등록할",{"2":{"1588":1}}],["등록됩니다",{"2":{"1369":1,"1587":1,"1626":1,"1893":1,"2137":1}}],["등록된",{"0":{"1591":1},"2":{"583":1,"1589":1,"1591":1}}],["등록합니다",{"2":{"583":1,"1345":1,"1586":1,"1606":1,"1621":1,"1861":1}}],["등록",{"0":{"674":1,"1346":1,"1585":1,"1586":1,"1587":1,"1588":1,"1601":1,"1605":1,"1606":1,"1620":1,"1621":1,"1623":1,"1718":1,"1719":1,"1904":1},"1":{"675":1,"1347":1,"1348":1,"1349":1,"1586":1,"1587":1,"1588":1,"1589":1,"1602":1,"1603":1,"1604":1,"1606":1,"1607":1,"1621":1,"1622":1,"1624":1,"1625":1,"1626":1},"2":{"216":1,"222":1,"581":1,"582":1,"620":1,"622":2,"675":2,"1619":2,"1772":3,"1774":2,"1817":1,"1861":3,"1900":1,"1902":1,"1905":1,"1969":1,"1982":1,"2184":1,"2186":1}}],["등을",{"2":{"167":1,"425":1,"1267":1,"1303":1,"1659":1,"1689":1,"2138":1}}],["등",{"2":{"96":1,"130":2,"210":1,"367":1,"514":1,"521":1,"554":1,"561":1,"602":1,"616":1,"621":1,"636":1,"670":1,"787":1,"913":1,"977":1,"1185":1,"1526":1,"1652":1,"1653":1,"1674":1,"1678":1,"1682":1,"1684":1,"1756":2,"1762":1,"1777":1,"1779":1,"1820":1,"1864":1,"1865":1,"1931":1,"1994":1,"2079":1,"2218":1}}],["템플릿과",{"2":{"756":1,"1824":1}}],["템플릿은",{"2":{"177":1,"887":1}}],["템플릿",{"0":{"112":1,"177":1,"196":1,"446":1,"695":1,"696":1,"711":1,"755":1,"757":1,"887":1,"1152":1,"1583":1,"1600":1,"1629":1},"1":{"197":1,"696":1,"756":1,"757":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1},"2":{"177":1,"434":1,"437":1,"446":1,"551":2,"561":1,"711":1,"747":1,"756":1,"757":1,"882":1,"883":1,"887":1,"1154":1,"1156":3,"1157":1,"1558":1,"1570":1,"1667":1,"1684":1,"1768":2,"1778":1,"1817":2,"1824":1,"1858":1,"1925":1,"1926":1,"1949":1,"2026":3}}],["템플릿의",{"2":{"106":1,"186":1,"714":1}}],["템플릿에서",{"2":{"96":1,"106":1,"110":1,"186":1,"195":1}}],["템플릿명",{"2":{"93":1,"177":1,"757":1}}],["|==============|",{"2":{"505":1}}],["||",{"2":{"505":1,"1106":1,"1295":1,"1298":2,"1303":1,"1316":1,"1317":1,"1331":1,"1334":2,"1358":1,"1526":1,"1533":3,"1536":3,"1538":1,"1609":1}}],["|",{"2":{"95":1,"505":23,"1380":1,"2177":1}}],["확장",{"2":{"551":1,"687":1,"705":1,"1659":1,"1699":1,"2011":1}}],["확장자",{"2":{"93":1,"122":1,"649":2,"660":1}}],["확인했다면",{"2":{"1710":1}}],["확인합니다",{"2":{"485":1,"506":1,"1483":1,"1485":1,"1617":1,"2195":1,"2204":1,"2221":1,"2329":1,"2330":1}}],["확인사항",{"2":{"396":1}}],["확인하여",{"2":{"1501":1}}],["확인하고",{"2":{"144":1,"2056":1,"2058":1,"2059":1}}],["확인하세요",{"2":{"76":1,"1353":1,"1487":2,"1747":1,"1790":1,"2055":1,"2056":1,"2059":1,"2188":1}}],["확인할",{"2":{"129":1,"519":1,"521":1,"866":1,"867":1,"1359":1,"1708":1,"1736":1,"2204":1,"2205":1,"2221":1}}],["확인해주세요",{"2":{"120":1,"1530":1,"1536":1}}],["확인",{"0":{"478":1,"485":1,"497":1,"504":1,"505":1,"506":1,"507":1,"999":1,"1235":1,"1305":1,"1389":1,"1483":1,"1485":1,"1532":1,"1598":1,"1602":1,"1617":1,"1708":1,"1732":1},"1":{"505":1,"506":1,"507":1,"1000":1,"1001":1,"1002":1},"2":{"17":1,"24":1,"46":2,"219":1,"224":2,"248":1,"344":1,"459":1,"460":1,"510":3,"511":3,"522":1,"635":1,"652":2,"671":2,"681":1,"803":1,"813":1,"872":1,"896":1,"958":1,"967":1,"974":1,"996":3,"997":3,"998":1,"999":1,"1250":1,"1275":1,"1359":2,"1409":1,"1419":1,"1480":1,"1539":1,"1695":2,"1696":2,"1697":2,"1732":1,"1749":2,"1788":1,"2022":1,"2091":1,"2138":1,"2160":2,"2161":1,"2163":3,"2167":2,"2171":1,"2173":2,"2177":1,"2179":2,"2180":3,"2184":3,"2185":3,"2186":3,"2187":3}}],["환경으로",{"2":{"502":1}}],["환경을",{"2":{"474":1,"475":1,"520":1,"1710":1}}],["환경이",{"2":{"474":1,"512":1}}],["환경별",{"0":{"361":1,"473":1,"626":1,"1176":1,"1182":1,"1735":1},"1":{"362":1,"1183":1,"1184":1},"2":{"375":1,"434":1,"437":1,"453":1,"473":1,"551":1,"747":1,"749":1,"750":1,"1735":1}}],["환경별로",{"2":{"232":1,"1176":1,"1178":1}}],["환경에서만",{"2":{"1195":1}}],["환경에서",{"2":{"857":1,"1715":1,"1719":1}}],["환경에서는",{"2":{"237":1,"492":1,"968":1,"1236":1,"1252":1,"1487":1,"1715":1}}],["환경에",{"2":{"243":1,"473":1,"494":1,"1735":1}}],["환경",{"0":{"282":1,"340":1,"459":1,"470":1,"475":1,"520":1,"1177":1,"1179":1,"1180":1,"1181":1,"1183":1,"1184":1,"1202":1,"1485":1,"1507":1,"1510":1,"1706":1,"1707":1,"1713":1,"1730":1,"1734":1,"1749":1,"1759":1,"1780":1,"2058":1,"2179":1},"1":{"471":1,"472":1,"476":1,"477":1,"478":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"1178":1,"1179":1,"1180":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1731":1,"1732":1,"1733":1,"1734":1,"1735":2,"1736":1,"1737":1,"1738":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1,"1745":1,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1},"2":{"233":3,"252":1,"273":3,"427":1,"435":1,"443":3,"459":1,"460":1,"473":3,"474":1,"515":2,"551":3,"552":1,"626":3,"750":6,"766":1,"773":3,"832":1,"1176":1,"1179":4,"1185":2,"1202":1,"1485":1,"1487":2,"1507":1,"1510":1,"1665":1,"1667":1,"1689":1,"1707":1,"1710":1,"1734":1,"1735":4,"1736":1,"1749":2,"1750":1,"1758":1,"1759":1,"1780":2,"1816":1,"1845":1,"2040":1,"2058":1,"2179":1}}],["환경의",{"2":{"87":1}}],["환경과",{"2":{"87":1}}],["운영",{"0":{"470":1,"1701":1},"1":{"471":1,"472":1},"2":{"87":1,"233":1,"237":1,"273":1,"443":1,"473":1,"492":1,"551":1,"626":1,"627":1,"750":2,"773":1,"968":1,"1701":1,"1715":1}}],["동시에",{"2":{"1261":1}}],["동시",{"0":{"1261":1,"1336":1}}],["동적으로",{"2":{"1345":1,"1369":1,"1604":1,"1626":1,"1886":1,"2137":1}}],["동적",{"0":{"324":1,"1104":1,"1344":1,"1346":1,"1349":1,"1352":1,"1369":1,"1441":1,"1604":1,"1626":1,"1845":1,"2137":1},"1":{"325":1,"326":1,"1345":1,"1346":1,"1347":2,"1348":2,"1349":2,"1350":1,"1351":1,"1352":1,"1353":1,"1354":1,"1442":1,"1443":1,"1444":1,"1445":1},"2":{"1097":1,"1103":1,"1112":1,"1119":1,"1363":1,"1375":1,"1442":1,"1845":1,"2005":1,"2090":1,"2186":1}}],["동일한",{"2":{"1164":1,"1353":1}}],["동일하게",{"2":{"79":1}}],["동일",{"2":{"77":1,"79":1,"99":1,"100":2,"101":1,"102":1,"1612":1}}],["동작은",{"2":{"681":1}}],["동작",{"2":{"17":1,"46":1,"56":1,"57":1,"67":1,"76":1,"78":1,"97":2,"98":1,"119":1,"220":1,"224":1,"670":1,"671":1,"672":1,"801":1,"803":1,"974":1,"2013":1}}],["으로",{"2":{"77":1,"110":1,"2304":1}}],["유휴",{"2":{"618":1}}],["유지되지",{"0":{"2168":1}}],["유지되므로",{"2":{"1847":1}}],["유지됩니다",{"2":{"1239":1,"1420":1,"1479":1}}],["유지보수",{"2":{"432":1}}],["유지보수성",{"2":{"432":1}}],["유지",{"2":{"432":1,"1563":1}}],["유틸",{"2":{"392":1,"1756":2}}],["유틸리티를",{"2":{"784":1,"896":1}}],["유틸리티입니다",{"2":{"217":1,"249":1,"250":1,"1872":1,"2284":1}}],["유틸리티",{"0":{"157":1,"209":1,"246":1,"392":1,"637":1,"677":1,"697":1,"784":1,"895":1,"938":1,"1538":1,"1673":1,"1725":1,"1770":1,"1827":1,"1867":1,"2033":1,"2126":1,"2156":1,"2199":1,"2203":1,"2283":1,"2297":1},"1":{"158":1,"210":1,"211":1,"212":1,"213":1,"214":1,"247":1,"248":1,"249":1,"250":1,"251":1,"638":1,"639":1,"640":1,"641":1,"678":1,"698":1,"785":1,"786":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"896":1,"939":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"947":1,"948":1,"949":1,"950":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"1674":1,"1675":1,"1676":1,"1868":1,"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"2127":1,"2128":1,"2129":1,"2130":1,"2131":1,"2132":1,"2133":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":2,"2205":2,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2222":1,"2223":1,"2224":1,"2225":1,"2226":1,"2227":1,"2284":1,"2285":1,"2286":1,"2287":1,"2288":1,"2289":1,"2290":1,"2291":1,"2292":1,"2293":1,"2294":1,"2295":1,"2296":1,"2298":1,"2299":1,"2300":1,"2301":1,"2302":1,"2303":1,"2304":1,"2305":1,"2306":1,"2307":1,"2308":1,"2309":1,"2310":1,"2311":1},"2":{"151":1,"168":1,"206":1,"231":1,"246":1,"247":1,"368":1,"377":1,"425":1,"439":2,"448":1,"516":1,"517":2,"525":1,"554":3,"577":3,"630":12,"636":1,"668":1,"678":1,"688":1,"807":1,"819":1,"927":1,"928":1,"929":1,"938":1,"957":1,"959":1,"1576":1,"1578":1,"1667":1,"1673":1,"1674":2,"1691":1,"1770":3,"1777":1,"1778":2,"1782":1,"1785":1,"1817":6,"1820":2,"1840":1,"1858":2,"1865":2,"1868":1,"1871":1,"1874":1,"2033":1,"2198":1,"2200":1,"2235":1,"2254":1,"2263":1,"2270":1,"2282":1,"2298":2,"2310":1,"2311":1,"2325":1,"2334":1}}],["유사하지만",{"2":{"77":1}}],["유효한",{"2":{"2220":1}}],["유효하면",{"2":{"2220":1}}],["유효하지",{"2":{"17":1,"23":1}}],["유효성을",{"2":{"2323":1,"2332":1}}],["유효성",{"2":{"249":1,"577":1,"618":1,"1999":1}}],["유효기간",{"2":{"17":1,"19":1,"20":1,"76":1,"810":1,"811":1,"964":1,"965":1}}],["암호화에",{"2":{"2109":1}}],["암호화가",{"2":{"1289":1,"1544":1}}],["암호화됩니다",{"2":{"1284":1,"1289":1,"1544":1,"2234":1}}],["암호화되고",{"2":{"1284":1}}],["암호화하여",{"2":{"1252":1}}],["암호화하고",{"2":{"1212":1}}],["암호화할",{"2":{"1215":1,"1217":1,"2231":1,"2233":1}}],["암호화합니다",{"2":{"1212":1,"1215":1,"1217":1,"2231":1,"2233":1}}],["암호화를",{"2":{"1208":1}}],["암호화된",{"0":{"100":1,"1544":1},"2":{"100":1,"224":2,"671":2,"704":1,"801":1,"1215":1,"1217":1,"2231":1,"2233":1}}],["암호화",{"0":{"209":1,"228":1,"595":1,"637":1,"784":1,"976":1,"1207":1,"1209":1,"1210":1,"1214":1,"1219":1,"1220":1,"1282":1,"1283":1,"1284":1,"1313":1,"1315":1,"2107":1,"2128":1,"2163":1,"2228":1,"2234":1},"1":{"210":1,"211":1,"212":1,"213":1,"214":1,"638":1,"639":1,"640":1,"641":1,"785":1,"786":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"977":1,"978":1,"979":1,"980":1,"981":1,"1208":1,"1209":1,"1210":1,"1211":2,"1212":2,"1213":1,"1214":1,"1215":2,"1216":2,"1217":2,"1218":1,"1219":1,"1220":1,"1221":1,"1222":1,"1283":1,"1284":1,"2108":1,"2109":1,"2229":1,"2230":1,"2231":1,"2232":1,"2233":1,"2234":1,"2235":1},"2":{"76":1,"100":1,"208":1,"210":4,"211":2,"224":1,"228":1,"230":2,"231":1,"391":1,"428":1,"439":1,"516":2,"519":1,"554":1,"575":2,"595":1,"630":3,"638":1,"639":1,"641":1,"671":2,"784":1,"785":1,"786":1,"787":1,"788":1,"789":1,"807":1,"819":1,"977":3,"978":2,"1208":1,"1209":2,"1212":2,"1219":1,"1220":1,"1221":3,"1250":1,"1267":1,"1272":2,"1273":2,"1282":1,"1283":1,"1289":1,"1316":4,"1318":1,"1658":1,"1672":1,"1763":2,"1764":3,"1770":3,"1777":1,"1862":1,"2068":1,"2095":1,"2109":1,"2128":1,"2163":2,"2229":1,"2235":1}}],["비어있으면",{"2":{"2204":1,"2205":1}}],["비어있는지",{"2":{"958":1,"2204":1,"2329":1}}],["비어있습니다",{"2":{"154":1,"891":1,"1725":1}}],["비동기이므로",{"2":{"2295":1}}],["비동기",{"0":{"1567":1},"2":{"699":2,"2295":1}}],["비활성화합니다",{"2":{"1398":1}}],["비활성화",{"2":{"222":1,"581":1,"620":1,"765":1,"986":1,"1033":1,"1250":1}}],["비즈니스용",{"2":{"580":2}}],["비즈니스",{"0":{"291":1,"294":1,"440":1,"441":1,"524":1,"555":1,"556":1,"1683":1},"1":{"525":1,"526":1,"527":1,"528":1,"529":1,"530":1,"531":1,"532":1,"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1},"2":{"130":2,"162":1,"364":1,"368":1,"372":1,"377":1,"380":1,"385":1,"397":1,"398":1,"405":1,"431":1,"434":2,"437":2,"448":2,"455":1,"456":1,"518":1,"524":1,"525":1,"540":1,"543":1,"551":2,"565":1,"566":1,"567":1,"596":1,"619":1,"629":1,"649":1,"687":1,"705":1,"729":1,"851":1,"1652":1,"1653":1,"1659":1,"1667":1,"1677":1,"1683":1,"1778":1,"1779":1,"1806":1,"1817":1,"1819":1,"1823":1,"1851":1,"1857":1,"1977":1,"1978":1,"2005":1}}],["비밀번호나",{"2":{"1252":1}}],["비밀번호는",{"2":{"699":1}}],["비밀번호를",{"2":{"76":1}}],["비밀번호",{"2":{"76":1,"77":1,"100":1,"510":1,"511":1,"699":1,"997":1,"1185":1,"1715":1}}],["비용이",{"2":{"12":1,"613":1}}],["비용",{"2":{"12":1,"613":1}}],["사이의",{"2":{"2210":1,"2243":1}}],["사이드바가",{"2":{"1467":2}}],["사이드바의",{"2":{"1456":1}}],["사이드바에",{"2":{"1116":1}}],["사이드바",{"0":{"1114":1,"1455":1},"1":{"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1121":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1},"2":{"1082":1,"1088":1,"1456":1,"1458":2,"1460":1,"1461":1,"1463":2,"1464":1,"1466":2,"1468":2,"1469":1,"1675":1,"1909":1,"1917":4,"1923":1,"2017":1,"2029":1}}],["사업장",{"2":{"1945":1,"1969":2}}],["사원명",{"2":{"1974":1}}],["사원코드",{"2":{"1974":1}}],["사원별",{"2":{"1945":1,"1949":1}}],["사원번호",{"2":{"1609":1,"2258":1}}],["사원",{"2":{"658":1,"1969":4,"2010":3,"2268":1}}],["사양",{"0":{"471":1,"1703":1,"1704":1}}],["사항",{"0":{"131":1},"1":{"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1},"2":{"1696":1}}],["사번으로",{"2":{"119":1}}],["사번을",{"2":{"77":1}}],["사번",{"2":{"76":1,"77":2,"119":1}}],["사용을",{"2":{"2300":1}}],["사용유무",{"2":{"1981":2}}],["사용됩니다",{"2":{"1091":1,"1372":1,"1373":1,"1374":1,"2028":1,"2029":1,"2030":1,"2109":2}}],["사용되는",{"2":{"1080":1,"1101":1,"1468":1,"1673":1,"1683":1,"1770":1,"1819":1,"1820":1,"1854":1,"1868":1,"1993":1,"2200":1}}],["사용량",{"2":{"613":1}}],["사용해야",{"2":{"461":1}}],["사용법은",{"2":{"2116":1}}],["사용법을",{"2":{"1729":1,"1790":1}}],["사용법과",{"2":{"517":1,"1765":1}}],["사용법",{"0":{"592":1,"1515":1,"1590":1,"1630":1,"1631":1,"1636":1,"1645":1,"2060":1,"2069":1,"2124":1},"1":{"593":1,"594":1,"595":1,"1591":1,"1592":1,"1593":1,"1594":1,"1632":1,"1633":1,"1634":1,"1635":1,"1637":1,"1638":1,"1639":1,"1640":1,"1646":1,"1647":1,"1648":1,"1649":1,"1650":1,"2061":1,"2062":1,"2063":1,"2064":1},"2":{"302":1,"959":1,"1046":1,"1760":2,"1763":1,"1767":1,"1774":1,"1775":1,"1776":2,"1785":1,"1906":1,"1975":1,"1991":1}}],["사용합니다",{"2":{"263":1,"266":1,"286":1,"330":1,"348":1,"454":1,"839":1,"843":1,"851":1,"1178":1,"1195":1,"1197":1,"1224":1,"1491":1,"1527":1,"1732":1,"1745":1,"1747":1,"1762":1,"1829":1,"1973":1,"1989":1,"2073":1,"2077":1,"2103":1,"2140":1}}],["사용한",{"2":{"216":1,"385":2,"562":1,"618":1,"670":1,"1653":1,"1908":1,"1981":1,"2229":1,"2256":1}}],["사용하거나",{"2":{"1790":1,"2177":1}}],["사용하지",{"2":{"1497":1,"1848":1}}],["사용하려면",{"2":{"1303":1,"2308":1}}],["사용하므로",{"2":{"1044":1}}],["사용하기",{"0":{"1041":1,"1721":1,"1724":1,"1725":1},"1":{"1042":1,"1043":1,"1722":1,"1723":1},"2":{"1042":1,"1062":1,"1075":1,"1178":1}}],["사용하세요",{"2":{"492":1,"1164":1,"1221":1,"1487":1,"1539":1,"1715":1,"2295":1}}],["사용하는",{"0":{"1787":1,"1788":1},"2":{"466":1,"485":1,"519":1,"567":1,"629":1,"776":1,"900":1,"938":1,"1022":1,"1045":1,"1267":1,"1284":1,"1709":1,"1732":1,"1777":1,"1841":1,"1890":1,"1941":1,"2019":1,"2298":1}}],["사용하며",{"2":{"139":1,"1288":1}}],["사용하여",{"2":{"17":1,"32":1,"89":1,"169":1,"174":1,"175":1,"328":1,"590":1,"701":1,"795":1,"808":1,"820":1,"853":1,"891":1,"1073":1,"1098":1,"1159":1,"1164":1,"1176":1,"1208":1,"1224":1,"1231":1,"1255":1,"1302":1,"1548":1,"1568":1,"1586":1,"1614":1,"1743":1,"1744":1,"1974":1,"1990":1,"2061":1,"2066":1,"2079":1,"2118":1,"2122":1,"2125":1,"2135":1,"2284":1,"2293":1}}],["사용자별",{"2":{"2025":1}}],["사용자입니다",{"2":{"1385":1}}],["사용자가",{"2":{"1385":1}}],["사용자에게",{"2":{"1296":1,"1306":1,"1536":1,"1539":1}}],["사용자명",{"2":{"510":1}}],["사용자의",{"2":{"57":2,"120":1,"421":1,"859":1,"862":1}}],["사용자",{"0":{"76":1,"116":1,"119":1,"1536":1},"1":{"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1},"2":{"23":1,"44":1,"46":1,"52":1,"56":1,"57":2,"59":1,"67":1,"72":1,"76":4,"77":2,"88":1,"116":1,"119":1,"120":1,"121":1,"122":1,"130":1,"142":1,"421":2,"530":1,"859":2,"861":2,"1239":1,"1447":1,"1618":1,"1762":1,"1764":1,"1794":2,"1797":1,"1936":1,"2204":1,"2226":1,"2267":1,"2268":1,"2333":2}}],["사용",{"0":{"133":1,"134":1,"149":1,"154":1,"172":1,"181":1,"198":1,"205":1,"227":1,"273":1,"298":1,"305":1,"313":1,"355":1,"517":1,"594":1,"608":1,"609":1,"610":1,"662":1,"691":1,"692":1,"696":1,"720":1,"741":1,"786":1,"789":1,"879":1,"883":1,"894":1,"914":1,"933":1,"942":1,"946":1,"950":1,"954":1,"958":1,"1006":1,"1011":1,"1015":1,"1020":1,"1027":1,"1035":1,"1036":1,"1040":1,"1043":1,"1059":1,"1063":1,"1072":1,"1077":1,"1083":1,"1091":1,"1097":1,"1105":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":1,"1181":1,"1194":1,"1218":1,"1250":1,"1277":1,"1278":1,"1302":1,"1303":1,"1320":1,"1340":1,"1351":1,"1386":1,"1399":1,"1409":1,"1419":1,"1428":1,"1434":1,"1440":1,"1445":1,"1454":1,"1462":1,"1463":1,"1464":1,"1480":1,"1523":1,"1537":1,"1543":1,"1547":1,"1594":1,"1639":1,"1640":1,"1722":1,"1723":1,"1727":1,"1765":1,"1830":1,"1844":1,"1845":1,"1854":1,"1855":1,"1881":1,"1882":1,"1883":1,"1884":1,"1919":1,"1920":1,"1921":1,"1958":1,"1974":1,"1990":1,"2062":1,"2073":1,"2078":1,"2098":1,"2103":1,"2106":1,"2109":1,"2120":1,"2223":1,"2262":1,"2307":1,"2309":1},"1":{"182":1,"183":1,"199":1,"228":1,"229":1,"299":1,"300":1,"301":1,"356":1,"357":1,"609":1,"610":1,"663":1,"664":1,"692":1,"693":1,"694":1,"721":1,"722":1,"742":1,"743":1,"1219":1,"1220":1,"1278":1,"1279":1,"1280":1,"1281":1,"1341":1,"1342":1,"1352":1,"1387":1,"1388":1,"1389":1,"1463":1,"1464":1,"1766":1,"1767":1,"1768":1,"1769":1,"1882":1,"1883":1,"1884":1,"1920":1,"1921":1,"2224":1,"2225":1,"2226":1,"2308":1,"2309":1},"2":{"9":1,"12":1,"17":2,"30":1,"31":1,"45":1,"46":1,"51":1,"56":2,"57":1,"67":1,"76":2,"77":1,"78":1,"98":1,"99":1,"103":1,"106":1,"110":1,"119":1,"120":1,"121":1,"186":1,"210":1,"211":1,"217":1,"219":1,"384":2,"385":1,"390":1,"393":2,"496":1,"509":1,"520":1,"565":1,"570":1,"600":1,"601":1,"613":1,"632":1,"633":1,"636":1,"641":1,"644":1,"648":1,"649":1,"665":1,"670":1,"678":1,"698":1,"699":1,"704":1,"728":1,"729":1,"750":1,"905":1,"906":1,"977":1,"995":1,"1082":1,"1162":1,"1164":1,"1236":4,"1297":1,"1304":1,"1318":1,"1338":1,"1382":1,"1383":1,"1385":2,"1418":1,"1426":1,"1427":1,"1460":1,"1461":1,"1475":1,"1491":1,"1534":1,"1538":1,"1539":1,"1565":2,"1567":1,"1613":1,"1633":1,"1696":1,"1747":1,"1785":1,"1830":1,"1836":1,"1837":1,"1838":1,"1840":1,"1841":1,"1842":1,"1855":1,"1879":2,"1880":1,"1885":1,"1893":2,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":1,"1945":1,"1949":1,"1969":1,"1981":1,"1983":1,"1986":1,"1997":1,"1999":1,"2001":1,"2003":1,"2005":1,"2006":1,"2009":1,"2014":1,"2076":1,"2147":1,"2171":1,"2177":1,"2204":1,"2205":1,"2207":1,"2208":1,"2209":1,"2210":1,"2212":1,"2214":1,"2216":1,"2218":1,"2220":1,"2221":1,"2222":1,"2231":1,"2232":1,"2233":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":2,"2287":1,"2288":1,"2292":1,"2302":1,"2306":1}}],["사용할",{"2":{"9":1,"96":1,"480":1,"832":1,"1007":1,"1016":1,"1026":1,"1033":1,"1041":1,"1064":1,"1185":1,"1537":1,"1538":1,"1591":1,"1635":1,"1646":1,"1725":1,"1770":1,"2079":1,"2200":1,"2216":2,"2309":1}}],["관계없이",{"2":{"846":1}}],["관련된",{"2":{"1563":1}}],["관련",{"0":{"1046":1,"1222":1,"1237":1,"1253":1,"1265":1,"1290":1,"1307":1,"1321":1,"1343":1,"1354":1,"1363":1,"1375":1,"1391":1,"1469":1,"1540":1,"1798":1,"1806":1,"1849":1,"1866":1,"1874":1,"1888":1,"1906":1,"1923":1,"1959":1,"1975":1,"1991":1,"2031":1,"2164":1,"2198":1,"2206":1,"2227":1,"2235":1,"2254":1,"2263":1,"2270":1,"2282":1,"2296":1,"2311":1,"2325":1,"2334":1},"1":{"2165":1,"2166":1,"2167":1,"2168":1,"2207":1,"2208":1,"2209":1,"2210":1},"2":{"73":1,"116":1,"130":1,"207":1,"421":1,"537":1,"582":1,"598":1,"605":1,"630":1,"673":1,"684":1,"702":1,"726":1,"859":1,"861":1,"896":1,"1022":1,"1071":1,"1563":1,"1663":1,"1664":1,"1674":1,"1675":1,"1678":1,"1680":2,"1681":1,"1682":1,"1784":1,"1806":1,"1810":1,"1814":1,"1820":1,"1864":3,"1872":1,"1876":1,"1911":1,"1913":1,"1929":1,"1934":1,"1942":3,"1961":1,"1962":1,"1977":1,"2298":1}}],["관리됩니다",{"2":{"1904":1}}],["관리는",{"2":{"1762":1}}],["관리하고",{"2":{"1471":1}}],["관리하는",{"2":{"1137":1,"1377":1,"1393":1,"1402":1,"1411":1,"1422":1,"1431":1,"1437":1,"1442":1,"1447":1,"1456":1,"1471":1}}],["관리되므로",{"2":{"1400":1}}],["관리되지",{"2":{"759":1}}],["관리해야",{"2":{"1221":1}}],["관리합니다",{"2":{"1073":1,"1224":1,"1239":1,"1377":1,"1615":1,"1709":1,"1743":1,"1744":1,"1762":1,"1819":1,"1821":1,"1854":1,"1908":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1986":1,"1987":1,"2061":1,"2122":1,"2135":1}}],["관리에",{"2":{"286":1}}],["관리자용",{"2":{"1955":1}}],["관리자에게",{"2":{"1528":1}}],["관리자",{"0":{"77":1,"531":1,"1948":1},"1":{"1949":1},"2":{"60":1,"77":4,"261":1,"388":1,"440":1,"527":1,"529":1,"531":1,"555":1,"579":1,"838":1,"1679":1,"1779":1,"1795":1,"1895":1,"1937":1,"1942":1}}],["관리",{"0":{"40":1,"53":1,"116":1,"588":1,"645":1,"1090":1,"1232":1,"1238":1,"1465":1,"1615":1,"1709":1,"1762":1,"1775":1,"1799":1,"1944":1,"1980":1,"2121":1},"1":{"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"1233":1,"1234":1,"1235":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1466":1,"1467":1,"1800":1,"1801":1,"1802":1,"1803":1,"1804":1,"1805":1,"1806":1,"1945":1,"1946":1,"1947":1,"1981":1,"1982":1,"1983":1,"1984":1,"2122":1,"2123":1,"2124":1,"2125":1},"2":{"26":1,"39":1,"52":1,"61":1,"72":1,"84":1,"88":1,"130":1,"141":2,"142":1,"286":1,"380":1,"390":1,"421":1,"430":2,"439":1,"465":1,"469":2,"529":1,"530":1,"538":1,"554":1,"568":1,"602":1,"605":1,"613":1,"630":1,"634":1,"645":1,"646":2,"648":1,"666":1,"835":1,"849":1,"859":1,"861":1,"905":1,"906":1,"1088":1,"1140":2,"1221":1,"1222":1,"1267":1,"1439":1,"1469":1,"1599":1,"1611":1,"1652":1,"1653":3,"1659":2,"1662":2,"1672":1,"1675":8,"1679":4,"1756":1,"1760":1,"1762":9,"1763":1,"1764":2,"1768":1,"1770":1,"1777":3,"1779":1,"1798":1,"1800":1,"1806":1,"1822":1,"1849":1,"1862":1,"1891":1,"1893":1,"1908":1,"1923":1,"1942":2,"1949":2,"1959":1,"1962":3,"1965":2,"1966":2,"1967":2,"1969":1,"1971":2,"1978":1,"1981":1,"1982":1,"2015":1,"2034":1,"2086":1,"2116":1}}],["스네이크케이스를",{"2":{"2317":1}}],["스네이크케이스로",{"2":{"2316":1}}],["스피너",{"2":{"1838":1}}],["스페이스",{"2":{"1565":1}}],["스테이징",{"0":{"1172":1,"1508":1,"1512":1,"1739":1},"1":{"1509":1,"1510":1,"1511":1,"1512":1},"2":{"1179":1,"1510":1,"1512":1,"1735":1,"1783":2}}],["스토어들",{"2":{"1675":1}}],["스토어의",{"2":{"1635":1}}],["스토어와",{"2":{"1468":1}}],["스토어와의",{"0":{"1468":1}}],["스토어는",{"2":{"1468":1,"1628":1,"1762":1,"1821":1,"1908":1}}],["스토어입니다",{"2":{"1377":1,"1393":1,"1402":1,"1411":1,"1422":1,"1431":1,"1437":1,"1442":1,"1447":1,"1456":1,"1471":1}}],["스토어에",{"2":{"1299":1,"1535":1}}],["스토어에서",{"2":{"1209":1,"1350":1}}],["스토어를",{"0":{"2185":1},"2":{"1239":1,"1922":1,"2001":1}}],["스토어",{"0":{"1073":1,"1350":1,"1376":1,"1392":1,"1401":1,"1410":1,"1421":1,"1429":1,"1430":1,"1436":1,"1441":1,"1446":1,"1455":1,"1470":1,"1562":1,"1627":1,"1628":1,"1629":1,"1631":1,"1632":1,"1724":1,"1788":1,"1907":1,"1910":1,"1919":1,"1922":1,"2034":1,"2087":1,"2123":1,"2147":1,"2157":1,"2294":1},"1":{"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1,"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1,"1402":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1411":1,"1412":1,"1413":1,"1414":1,"1415":1,"1416":1,"1417":1,"1418":1,"1419":1,"1420":1,"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1,"1428":1,"1430":1,"1431":2,"1432":2,"1433":2,"1434":2,"1435":2,"1436":1,"1437":2,"1438":2,"1439":2,"1440":2,"1441":1,"1442":2,"1443":2,"1444":2,"1445":2,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"1452":1,"1453":1,"1454":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1471":1,"1472":1,"1473":1,"1474":1,"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1628":1,"1629":1,"1630":1,"1632":1,"1633":1,"1634":1,"1635":1,"1908":1,"1909":1,"1910":1,"1911":2,"1912":2,"1913":2,"1914":2,"1915":2,"1916":2,"1917":2,"1918":2,"1919":1,"1920":2,"1921":2,"1922":1,"1923":1},"2":{"1237":1,"1253":1,"1354":1,"1469":1,"1576":1,"1675":1,"1691":1,"1724":2,"1756":1,"1760":1,"1762":1,"1775":4,"1778":1,"1785":1,"1817":1,"1821":1,"1858":1,"1865":2,"1908":1,"1909":8,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1923":8,"2034":4,"2147":1,"2185":2,"2296":1}}],["스토리지",{"2":{"78":1}}],["스타일입니다",{"2":{"1838":1,"1840":1,"1841":1,"1842":1}}],["스타일이",{"2":{"1824":1}}],["스타일링",{"0":{"1726":1,"1776":1},"1":{"1727":1,"1728":1}}],["스타일은",{"2":{"1638":1}}],["스타일을",{"2":{"1044":1,"1643":1,"1644":1}}],["스타일",{"0":{"1044":1,"1565":1,"1637":1,"1638":1,"1643":1,"1644":1,"1728":1},"2":{"1034":1,"1044":1,"1558":1,"1570":1,"1583":1,"1611":1,"1642":3,"1643":1,"1667":1,"1684":1,"1776":2,"1838":1,"1840":1,"1841":1,"1842":2,"1858":1,"1899":1,"1928":1,"2030":1}}],["스니핑",{"2":{"986":1}}],["스크롤링을",{"2":{"1045":1}}],["스크래핑",{"2":{"941":1}}],["스크립트가",{"2":{"1687":1}}],["스크립트",{"0":{"1806":1,"1850":1},"1":{"1851":1,"1852":1,"1853":1,"1854":1,"1855":1},"2":{"761":1,"798":1,"936":1,"985":1,"1558":1,"1570":1,"1667":1,"1683":1,"1733":1,"1778":2,"1817":1,"1855":1,"1902":1,"2038":1}}],["스펙은",{"2":{"866":1}}],["스펙",{"0":{"865":1},"1":{"866":1,"867":1}}],["스케줄러",{"2":{"572":1,"630":1,"740":1}}],["스케줄러가",{"2":{"67":1,"71":1,"744":1}}],["스캔하도록",{"2":{"371":1}}],["스캔됩니다",{"2":{"264":1,"331":1,"844":1}}],["스캔",{"0":{"264":1},"2":{"451":2}}],["스트림",{"2":{"101":1,"102":1}}],["스택에",{"2":{"1777":1,"2116":1}}],["스택",{"0":{"433":1,"519":1,"1655":1,"1777":1},"1":{"1656":1,"1657":1,"1658":1},"2":{"34":2,"512":1}}],["하이패스",{"2":{"1804":1,"1942":3}}],["하이픈을",{"2":{"2322":1}}],["하이픈",{"2":{"71":1,"744":1}}],["하드웨어",{"0":{"1702":1},"1":{"1703":1,"1704":1}}],["하세요",{"2":{"1306":1,"1539":1}}],["하지",{"2":{"1264":1}}],["하지만",{"2":{"1263":1,"1320":1,"1522":1}}],["하위에",{"2":{"1582":1,"1598":1}}],["하위",{"2":{"560":1,"1864":1,"1994":1}}],["하는",{"2":{"516":1,"1024":1,"1761":1}}],["하나의",{"2":{"1659":1}}],["하나를",{"2":{"461":1,"466":1,"480":1}}],["하나라도",{"2":{"31":1}}],["하고",{"2":{"67":1}}],["최상위",{"2":{"1860":1}}],["최신",{"2":{"1653":1,"1700":4}}],["최적화하세요",{"2":{"2175":1}}],["최적화된",{"2":{"1653":1,"2082":1}}],["최적화",{"0":{"1175":1,"1495":1,"1499":1,"1505":1,"2175":1},"1":{"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1},"2":{"1499":3,"1501":1,"1505":1,"1783":2,"1848":1,"2082":1}}],["최소한의",{"2":{"2028":1}}],["최소",{"0":{"1703":1},"2":{"618":1,"1695":1,"1697":1}}],["최소화",{"2":{"432":1}}],["최우선으로",{"2":{"681":1}}],["최우선",{"2":{"216":1,"583":1,"622":1,"670":1,"675":1,"796":1}}],["최종",{"2":{"67":1}}],["최대",{"2":{"9":1,"618":1,"804":1,"975":1}}],["이는",{"2":{"2300":1}}],["이수",{"2":{"1946":1}}],["이력",{"2":{"1946":4,"1953":1,"1970":1,"2021":1,"2025":1}}],["이제",{"2":{"1790":1}}],["이루어지며",{"2":{"1763":1}}],["이며",{"2":{"1647":1,"2142":1}}],["이벤트",{"0":{"1593":1},"2":{"1058":1,"1578":1,"2013":1}}],["이해가",{"2":{"1790":1}}],["이해합니다",{"2":{"1778":1}}],["이해하기",{"0":{"1758":1},"2":{"515":1}}],["이해했다면",{"2":{"456":1,"1692":1,"1831":1}}],["이미",{"2":{"509":1,"995":1,"1261":1,"1276":1,"1336":1,"1491":1,"1525":1,"1747":1}}],["이미지입니다",{"2":{"1837":1}}],["이미지가",{"2":{"119":1}}],["이미지는",{"2":{"114":1,"122":1,"200":1,"723":1}}],["이미지를",{"2":{"97":1,"108":1,"119":1,"2268":1}}],["이미지",{"0":{"97":1,"107":1,"108":1,"109":1,"119":1,"187":1,"188":1,"189":1,"715":1},"1":{"108":1,"109":1,"188":1,"189":1},"2":{"97":3,"114":1,"119":4,"123":2,"200":1,"530":1,"643":2,"658":1,"715":2,"723":1,"886":1,"1499":1,"1667":1,"1684":1,"1770":1,"1834":1,"1926":1,"1931":1,"2268":1}}],["이상이어야",{"2":{"1732":1}}],["이상의",{"2":{"1703":1,"1704":1}}],["이상",{"2":{"459":1,"460":1,"463":1,"464":1,"465":1,"466":2,"468":2,"471":5,"835":1,"1695":1,"1696":1,"1697":1,"1701":2,"1703":2,"1704":2}}],["이",{"0":{"514":1,"1756":1},"2":{"365":1,"432":1,"436":1,"475":1,"514":1,"1652":1,"1659":1,"1709":1,"1711":1,"1733":1,"1833":1,"1873":1,"2077":1,"2200":1,"2222":1}}],["이동합니다",{"2":{"2057":1,"2162":1}}],["이동",{"2":{"78":1,"1249":1,"1797":1,"2165":1,"2181":1}}],["이메일을",{"2":{"169":1}}],["이메일",{"0":{"693":1},"2":{"66":1,"249":1,"589":1,"683":1,"688":2}}],["이름을",{"2":{"2204":1,"2226":1,"2333":1}}],["이름이",{"2":{"1749":1}}],["이름으로",{"2":{"98":1,"110":1,"190":1}}],["이름",{"2":{"30":1,"31":1,"32":1,"33":1,"66":1,"1060":1,"1063":1,"1548":1,"1563":1,"1606":1,"1609":1,"1621":1,"1723":1,"1887":1,"2120":1,"2186":1,"2258":1,"2262":1,"2333":1}}],["상황을",{"2":{"1292":1}}],["상황에",{"2":{"1275":1}}],["상단의",{"2":{"873":1}}],["상수",{"0":{"642":1,"1828":1},"1":{"643":1},"2":{"630":2,"643":5,"1571":1,"1577":1,"1691":1}}],["상수명",{"2":{"449":1,"1612":1}}],["상속",{"2":{"379":1,"384":1}}],["상세한",{"2":{"1790":1,"2116":1}}],["상세",{"0":{"1817":1,"1863":1},"1":{"1864":1,"1865":1},"2":{"66":1,"197":1,"397":1,"517":1,"596":1,"862":1,"1150":1,"1435":1,"1692":1,"1765":1,"1777":1,"1831":1,"1874":1,"1959":1,"1970":1,"1975":1,"1991":1,"2024":1,"2031":5}}],["상태는",{"2":{"1635":1}}],["상태로",{"2":{"1467":1}}],["상태가",{"0":{"2168":1},"2":{"1400":1}}],["상태를",{"2":{"1073":1,"1359":1,"1377":1,"1393":1,"1397":1,"1398":1,"1422":1,"1431":1,"1437":1,"1456":2,"1471":1,"1615":1,"1762":1,"1821":1,"1908":1,"1911":1,"1912":1,"1913":1,"1915":1,"1916":1,"1917":1,"2122":1,"2125":1}}],["상태",{"0":{"49":1,"70":1,"126":1,"138":1,"655":1,"656":1,"738":1,"1235":1,"1379":1,"1389":1,"1395":1,"1404":1,"1413":1,"1424":1,"1449":1,"1458":1,"1465":1,"1466":1,"1467":1,"1473":1,"1615":1,"1633":1,"1762":1,"1775":1,"2121":1,"2125":1,"2300":1},"1":{"1380":1,"1466":1,"1467":1,"2122":1,"2123":1,"2124":1,"2125":1},"2":{"45":2,"78":1,"393":1,"630":1,"687":1,"705":1,"1289":1,"1305":1,"1463":1,"1469":1,"1532":1,"1611":1,"1618":1,"1653":2,"1675":5,"1724":1,"1756":1,"1760":1,"1762":3,"1777":2,"1788":1,"1822":1,"1862":1,"1891":1,"1893":2,"1908":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1920":1,"1923":1,"2022":1,"2034":1,"2085":1,"2086":2,"2116":1,"2123":4,"2187":1}}],["분할을",{"2":{"2175":1}}],["분할합니다",{"2":{"1496":1}}],["분할",{"0":{"1496":1},"2":{"1175":1,"1505":1}}],["분류",{"2":{"861":1}}],["분당",{"2":{"804":1,"975":1}}],["분리하여",{"2":{"1819":1,"1854":1}}],["분리",{"2":{"431":1,"565":4,"1316":2}}],["분리되어",{"2":{"232":1}}],["분",{"2":{"66":1,"735":1}}],["특별",{"2":{"1300":2}}],["특별한",{"2":{"1289":1,"1320":1,"1525":1}}],["특수",{"2":{"71":1,"623":1,"636":1,"744":1}}],["특정",{"2":{"66":1,"502":1,"681":1,"734":1,"1243":1,"1244":1,"1246":1,"1452":1,"1453":1,"1762":1,"1821":1,"1908":1,"2208":1,"2290":1}}],["특징",{"0":{"426":1,"909":1,"1082":1,"1103":1,"1653":1,"2077":1,"2086":1},"1":{"427":1,"428":1,"429":1,"430":1,"431":1},"2":{"32":1,"77":1,"834":1,"835":1,"836":1,"1758":1,"2028":1,"2029":1,"2030":1}}],["후속작으로",{"2":{"2086":1}}],["후속작인",{"2":{"1653":1}}],["후에도",{"2":{"1479":1,"1847":1}}],["후에",{"2":{"1361":1}}],["후처리",{"2":{"623":1}}],["후",{"2":{"66":2,"67":1,"92":1,"114":1,"200":1,"723":1,"734":2,"743":1,"1185":1,"1274":1,"1286":1,"1296":1,"1323":1,"1333":1,"1353":1,"1361":1,"1501":1,"1529":1,"1536":1,"1671":1,"1708":1,"1833":1,"1844":1,"2167":1,"2168":1,"2178":1,"2181":1}}],["직군",{"2":{"1969":2}}],["직원목록",{"2":{"2258":1,"2259":1}}],["직원이",{"2":{"1941":1}}],["직원",{"2":{"1050":1,"1347":1,"1475":1,"1766":1,"1947":1}}],["직렬화",{"0":{"295":1,"296":1,"297":1},"1":{"296":1,"297":1},"2":{"619":1,"904":1,"923":2}}],["직급",{"2":{"65":1,"66":1}}],["직접",{"0":{"609":1,"1464":1,"2262":1},"2":{"27":1,"99":1,"385":1,"454":1,"1007":1,"1016":1,"1289":1,"1385":1,"1390":1,"1633":1,"1646":1,"1719":1,"1732":1,"1846":1,"1941":1}}],["홍길동∥30",{"2":{"2197":1,"2320":1}}],["홍길동",{"2":{"65":1,"67":1,"1220":1,"1240":1,"1242":1,"1245":1,"1278":1,"1548":1,"1723":1,"2120":1,"2193":2,"2197":1,"2258":1,"2262":1,"2320":1}}],["즉시",{"0":{"742":1},"2":{"65":1,"66":1,"67":4,"71":2,"731":2,"734":1,"744":2}}],["권장하지",{"2":{"1390":1}}],["권장",{"0":{"471":1,"1704":1},"2":{"460":1,"466":1,"613":1,"699":2,"1580":1,"1695":1,"1696":1,"1699":1,"1701":1,"1704":1,"2150":1,"2155":1}}],["권장합니다",{"2":{"38":1,"466":1}}],["권한으로",{"2":{"77":1}}],["권한이",{"2":{"60":1,"1536":1}}],["권한",{"2":{"60":1,"77":1,"100":1,"138":1}}],["지켜야",{"2":{"1781":1}}],["지수",{"2":{"1534":1}}],["지연되고",{"2":{"1286":1,"1296":1,"1333":1,"1529":1}}],["지원하는",{"0":{"1435":1},"2":{"1652":1}}],["지원하며",{"2":{"252":1}}],["지원",{"0":{"194":1,"306":1,"427":1,"718":1,"833":1},"1":{"834":1,"835":1,"836":1},"2":{"113":1,"175":1,"275":1,"425":1,"427":3,"428":1,"432":1,"451":1,"514":1,"618":1,"619":2,"688":2,"835":1,"836":1,"882":1,"886":1,"889":1,"904":1,"905":1,"909":2,"945":1,"1199":2,"1699":1,"1865":1,"1876":1,"1879":1,"2003":1,"2082":2,"2083":3,"2086":1}}],["지원합니다",{"2":{"60":1,"65":1,"425":1,"473":1,"832":1,"960":1,"1038":1,"1208":1,"1647":1,"1700":1,"1735":1,"2090":1,"2142":1}}],["지정",{"2":{"95":1,"502":1,"863":1,"2006":1}}],["지정된",{"2":{"57":1,"114":1,"191":1,"200":1,"723":1,"2249":1,"2279":1}}],["안전하게",{"2":{"1221":1}}],["안전한",{"2":{"425":1,"432":1,"960":1,"1653":1,"2086":1}}],["안내합니다",{"2":{"365":1,"475":1,"520":1}}],["안녕하세요",{"2":{"67":1,"742":1}}],["안",{"0":{"1749":1,"2179":1},"2":{"56":1,"1236":1,"1297":2,"1338":1,"1527":1}}],["크기를",{"2":{"1501":1}}],["크기",{"0":{"155":1,"892":1,"1500":1},"2":{"51":1,"618":1,"665":1,"892":1,"1169":1,"1221":1,"1252":1,"1500":1,"1848":1}}],["예제",{"0":{"1006":1,"1011":1,"1015":1,"1020":1,"1027":1,"1029":1,"1035":1,"1040":1,"1043":1,"1059":1,"1072":1,"1077":1,"1083":1,"1091":1,"1097":1,"1105":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":1,"1194":1,"1218":1,"1273":1,"1320":1,"1340":1,"1351":1,"1360":1,"1386":1,"1399":1,"1409":1,"1419":1,"1428":1,"1434":1,"1440":1,"1445":1,"1454":1,"1462":1,"1480":1,"1608":1,"1609":1,"1722":1,"1723":1,"1830":1,"1855":1,"2062":1,"2078":1,"2120":1,"2146":1,"2151":1,"2223":1,"2333":1},"1":{"1219":1,"1220":1,"1341":1,"1342":1,"1352":1,"1387":1,"1388":1,"1389":1,"1463":1,"1464":1,"1609":1,"2224":1,"2225":1,"2226":1},"2":{"1297":1,"1338":1,"1382":1,"1383":1,"1385":1,"1426":1,"1427":1,"1460":1,"1461":1,"1475":1,"1599":1,"1720":1,"1837":1,"1880":1,"1893":1,"1895":1,"1898":1,"1905":1,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1945":1,"1949":1,"1969":1,"1981":1,"1983":1,"1986":1,"1997":1,"1999":1,"2003":1,"2005":1,"2006":1,"2009":1,"2014":1,"2078":1,"2204":1,"2205":1,"2207":1,"2208":1,"2209":1,"2210":1,"2212":1,"2214":1,"2216":1,"2218":1,"2220":1,"2221":1,"2231":1,"2232":1,"2233":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":1,"2287":1,"2288":1,"2292":1,"2302":1,"2305":1}}],["예제를",{"2":{"517":1,"1765":1}}],["예정",{"2":{"531":1,"532":1,"536":1,"537":1,"538":1,"686":1,"687":1,"705":1}}],["예정된",{"0":{"127":1}}],["예외",{"0":{"828":1},"1":{"829":1,"830":1},"2":{"222":1,"620":1,"632":2,"681":1}}],["예약",{"0":{"743":1},"2":{"65":1,"67":2,"71":1,"731":1,"744":1}}],["예",{"2":{"50":1,"66":3,"71":1,"95":1,"96":1,"97":2,"98":1,"119":1,"122":1,"367":3,"368":2,"449":4,"660":1,"714":1,"716":1,"735":3,"1571":3,"1576":3,"1577":3,"1578":3,"1579":2,"1606":1,"1612":1,"1621":1,"1691":3,"2207":3,"2208":1,"2220":1,"2258":1}}],["예시",{"0":{"149":1,"172":1,"198":1,"205":1,"227":1,"298":1,"305":1,"313":1,"388":1,"482":1,"483":1,"484":1,"662":1,"720":1,"741":1,"786":1,"789":1,"879":1,"883":1,"914":1,"933":1,"942":1,"946":1,"950":1,"954":1,"958":1},"1":{"199":1,"228":1,"229":1,"299":1,"300":1,"301":1,"663":1,"664":1,"721":1,"722":1,"742":1,"743":1},"2":{"9":3,"17":3,"30":3,"31":3,"32":1,"33":1,"34":1,"45":3,"46":3,"56":2,"57":2,"59":1,"67":3,"76":3,"78":3,"98":2,"99":1,"103":1,"119":3,"120":3,"121":3,"210":1,"211":1,"217":1,"219":1,"327":1,"347":1,"368":1,"374":1,"390":1,"459":1,"460":1,"477":1,"570":1,"600":1,"601":1,"618":1,"619":1,"620":1,"621":1,"622":1,"632":1,"633":1,"636":1,"641":1,"648":1,"649":1,"670":1,"675":1,"678":1,"698":1,"704":1,"728":1,"729":1,"977":1,"1826":1,"1827":1,"1828":1}}],["watch를",{"2":{"1635":1}}],["watch",{"2":{"1468":1,"1574":2,"1635":1,"2079":1}}],["warning",{"2":{"1753":6}}],["warn",{"2":{"1297":1,"1338":1,"1527":1}}],["war",{"0":{"280":1,"283":1,"341":1,"503":1},"2":{"280":1,"283":1,"341":1,"343":1,"344":1,"451":1,"452":1,"468":1,"497":2,"503":1,"557":2}}],["writebuffer",{"2":{"1548":1,"2262":1}}],["write",{"2":{"732":1,"829":1,"830":1,"879":1}}],["writer",{"2":{"732":3}}],["wrappedrequest",{"2":{"670":2,"671":1}}],["wrapper",{"2":{"437":1,"478":1,"496":1,"549":2,"2146":5,"2147":1}}],["when",{"2":{"620":1,"827":1}}],["whereclause",{"2":{"2005":1}}],["where>",{"2":{"325":2}}],["where",{"2":{"320":1,"326":1,"333":1,"753":1}}],["weight",{"2":{"1637":1,"1728":1}}],["welfare",{"0":{"532":1},"2":{"388":1,"440":1,"527":1,"555":1}}],["webfontloader",{"0":{"1903":2},"2":{"1817":1,"1891":1}}],["webapp",{"2":{"643":1}}],["webapps",{"2":{"344":1,"503":1}}],["webresources>",{"2":{"280":2}}],["webmvcconfigurer",{"2":{"621":1}}],["webmvc",{"2":{"277":1}}],["web",{"0":{"904":1,"930":1,"961":1},"1":{"931":1,"932":1,"933":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1},"2":{"275":1,"439":1,"554":1,"616":1,"621":1,"770":1,"808":1,"904":1,"1224":1}}],["wbvue",{"2":{"239":1}}],["world",{"2":{"879":1}}],["work",{"2":{"1946":1,"1949":1,"1957":1,"1969":1,"1981":1,"2025":1}}],["workbook",{"2":{"879":4,"1548":4,"2262":4}}],["worksheet",{"2":{"1548":3,"2262":3}}],["works",{"2":{"0":1}}],["word",{"2":{"878":1}}],["wof6gmtnvs1mg1+vag2brjxxicfnpzbklu49j1wikevs2b8wjlpw9b2wpswhdbxuowrkdgjdbtzruvbl8+qoioyyy7bwkmw7selldeat1a5j2ntowabsivwtgkqnr+v9zys3hiyaecraogadtqkvmqxw8rcxnjmaz7icvtolvor0ti3",{"2":{"211":1,"238":1,"790":1,"978":1}}],["with",{"2":{"1752":1,"2147":1}}],["withcredentials",{"2":{"1259":1,"1263":1,"1269":1,"1270":1,"1276":1,"1337":1}}],["width",{"2":{"1034":2,"1035":3,"1043":2,"1077":2,"1609":3,"1973":2}}],["width=800",{"2":{"1106":1}}],["width=",{"2":{"197":3,"1428":1}}],["windows는",{"2":{"665":1}}],["windows",{"0":{"488":1},"2":{"471":1,"549":1,"1701":1}}],["windows와",{"2":{"243":1,"494":1}}],["window",{"2":{"46":1,"78":1,"98":1,"99":2,"103":1,"119":1,"1104":2,"1106":3,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["w3",{"2":{"197":1}}],["www",{"2":{"102":1,"197":1,"2052":1}}],["누락되었습니다",{"2":{"46":1}}],["감지합니다",{"2":{"898":1}}],["감지",{"0":{"897":1,"1258":1},"1":{"898":1},"2":{"46":1,"119":1,"945":1}}],["여전히",{"2":{"2196":1}}],["여유",{"2":{"1703":1,"1704":1}}],["여부를",{"2":{"1209":1,"1385":1,"1415":1,"1460":1,"1461":1,"1501":1,"2195":1}}],["여부",{"2":{"46":1,"76":2,"78":1,"219":1,"224":1,"635":1,"652":1,"671":2,"740":1,"863":1,"1026":2,"1033":3,"1413":1,"1418":2,"1458":2,"1911":1,"1912":1,"1917":3,"1918":2,"2304":1}}],["여러",{"2":{"31":1,"32":1,"795":1,"832":1,"864":1,"870":1,"1031":1,"1245":1,"1261":1,"1471":1,"2007":1}}],["존재하면",{"2":{"1385":1}}],["존재하는지",{"2":{"485":1}}],["존재하지",{"2":{"46":1,"119":1,"1359":1}}],["존재",{"2":{"46":1,"652":1,"896":1,"1359":1,"2195":1}}],["경력",{"2":{"1946":1}}],["경험",{"2":{"1659":1}}],["경고를",{"2":{"1500":1}}],["경고",{"2":{"1169":1}}],["경로로",{"2":{"1844":1}}],["경로와",{"2":{"386":1}}],["경로여야",{"2":{"114":1,"200":1,"723":1}}],["경로를",{"2":{"109":1,"494":1,"1159":1,"1358":1,"1494":1,"2173":1}}],["경로의",{"2":{"108":1}}],["경로가",{"2":{"108":1,"1353":1,"1358":1,"1845":1}}],["경로에서",{"2":{"97":1,"119":1,"122":1,"264":1,"331":1,"844":1}}],["경로는",{"2":{"51":1,"1847":1}}],["경로",{"0":{"108":1,"109":1,"122":1,"188":1,"189":1,"243":1,"494":1,"1158":1,"1190":1,"1201":1,"1829":1,"1844":1,"1845":1,"2173":1},"1":{"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1191":1,"1192":1,"1193":1,"1830":1},"2":{"46":1,"51":1,"97":4,"114":2,"167":1,"200":2,"243":1,"367":1,"384":1,"494":1,"643":2,"649":1,"652":1,"658":3,"665":1,"715":2,"723":2,"763":1,"883":1,"1159":1,"1162":1,"1353":1,"1606":2,"1621":2,"1688":1,"1690":1,"1780":1,"1829":1,"1830":1,"1895":1,"2018":1,"2173":3}}],["경우가",{"2":{"1468":1,"1522":1}}],["경우",{"2":{"23":8,"32":1,"45":1,"67":1,"108":1,"375":1,"394":1,"396":1,"468":1,"485":1,"506":1,"509":1,"731":1,"873":1,"1045":1,"1212":1,"1221":1,"1261":1,"1262":1,"1263":1,"1284":1,"1288":1,"1289":2,"1300":1,"1304":1,"1316":1,"1320":1,"1389":1,"1390":1,"1400":1,"1491":1,"1517":1,"1534":1,"1544":1,"1588":1,"1604":1,"1709":1,"1732":1,"1743":1,"1747":1,"1748":1,"1749":1,"1845":1,"2063":1,"2175":1,"2205":1,"2310":1}}],["경우에만",{"2":{"71":1,"230":1,"744":1,"1221":1}}],["경우에",{"2":{"23":1}}],["q1btodqwmda1odcx",{"2":{"740":1}}],["q1btodqwmda1odcxoerpuuzotzptvks4ndawmdu4nze4r0pvtvdp",{"2":{"69":1,"204":1}}],["question",{"2":{"609":2}}],["queryselector",{"2":{"2233":1}}],["query",{"2":{"102":1}}],["qualifier",{"2":{"293":1,"294":1}}],["quot",{"2":{"9":2,"30":2,"32":4,"33":4,"45":30,"46":2,"48":4,"49":6,"51":2,"56":4,"66":26,"67":14,"71":4,"78":2,"95":2,"97":8,"98":4,"99":2,"100":2,"102":2,"103":2,"654":4,"655":6,"656":2,"665":2,"734":8,"735":12,"737":4,"738":6,"744":2,"872":4,"873":4}}],["q에서",{"2":{"87":1}}],["q",{"0":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"46":1,"76":1,"98":1,"652":1,"1946":1,"1949":2,"1957":1,"1969":2,"1981":2,"2003":1,"2025":2}}],["내일",{"2":{"2209":1,"2242":1}}],["내역",{"2":{"1949":2,"1951":1}}],["내",{"2":{"1362":1}}],["내장",{"2":{"904":1}}],["내장하여",{"2":{"432":1}}],["내보내기",{"0":{"710":1},"2":{"180":1,"710":1}}],["내부의",{"2":{"367":1}}],["내부",{"2":{"46":1,"56":1,"57":1,"76":1}}],["내용은",{"2":{"1650":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"2033":1,"2034":1,"2035":1}}],["내용을",{"2":{"1563":1,"1713":1}}],["내용",{"2":{"9":1,"65":1,"66":1,"71":1,"149":1,"172":1,"216":1,"226":1,"607":1,"670":1,"671":1,"672":1,"673":1,"680":1,"731":1,"744":1,"950":1,"1428":1,"1464":1,"1583":1,"1594":1,"1600":1,"1838":1,"1840":1,"1841":1,"1842":1,"1880":1,"1893":1,"1898":1,"1899":1,"1900":1,"1901":1,"1949":1,"1986":1}}],["주석을",{"2":{"2308":1,"2310":1}}],["주석",{"0":{"2301":1},"1":{"2302":1,"2303":1,"2304":1,"2305":1},"2":{"2298":1,"2300":1,"2302":1,"2306":1,"2308":1}}],["주로",{"2":{"2109":1}}],["주의하세요",{"2":{"1353":1}}],["주의",{"2":{"230":1,"237":1,"243":1,"492":1,"494":1,"613":1,"699":1,"968":1}}],["주의사항",{"0":{"12":1,"25":1,"38":1,"51":1,"60":1,"71":1,"87":1,"114":1,"123":1,"200":1,"230":1,"613":1,"665":1,"681":1,"699":1,"723":1,"744":1,"1045":1,"1164":1,"1185":1,"1195":1,"1221":1,"1252":1,"1264":1,"1289":1,"1353":1,"1390":1,"1400":1,"1420":1,"1487":1,"1848":1,"2295":1}}],["주민등록번호입니다",{"2":{"2220":1}}],["주민등록번호를",{"2":{"2220":1,"2331":1}}],["주민등록번호",{"2":{"210":1,"228":2,"787":1,"977":1,"2220":1}}],["주요",{"0":{"248":1,"274":1,"426":1,"450":1,"528":1,"535":1,"569":1,"599":1,"617":1,"631":1,"647":1,"669":1,"685":1,"703":1,"727":1,"767":1,"860":1,"903":1,"913":1,"917":1,"926":1,"1058":1,"1069":1,"1088":1,"1096":1,"1111":1,"1118":1,"1139":1,"1150":1,"1156":1,"1161":1,"1198":1,"1241":1,"1270":1,"1272":1,"1275":1,"1310":1,"1405":1,"1414":1,"1433":1,"1439":1,"1444":1,"1450":1,"1459":1,"1474":1,"1653":1,"1658":1,"1660":1,"1668":1,"1793":1,"1801":1,"1810":1,"1814":1,"1818":1,"1835":1,"1859":1,"1870":1,"1878":1,"1892":1,"1910":1,"1927":1,"1935":1,"1943":1,"1963":1,"1979":1,"2032":1,"2037":1,"2068":1,"2077":1,"2082":1,"2083":1,"2095":1,"2099":1,"2110":1,"2119":1,"2123":1,"2141":1,"2191":1,"2202":1,"2230":1,"2238":1,"2257":1,"2266":1,"2273":1,"2286":1,"2301":1,"2314":1,"2328":1},"1":{"275":1,"276":1,"277":1,"427":1,"428":1,"429":1,"430":1,"431":1,"451":1,"452":1,"453":1,"529":1,"530":1,"531":1,"532":1,"536":1,"537":1,"538":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"600":1,"601":1,"602":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"640":1,"641":1,"648":1,"649":1,"670":1,"671":1,"672":1,"673":1,"686":1,"687":1,"688":1,"704":1,"705":1,"728":1,"729":1,"768":1,"769":1,"770":1,"771":1,"861":1,"862":1,"863":1,"864":1,"904":1,"905":1,"906":1,"927":1,"928":1,"929":1,"1070":1,"1071":1,"1199":1,"1200":1,"1201":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1311":1,"1312":1,"1313":1,"1314":1,"1315":1,"1406":1,"1407":1,"1408":1,"1415":1,"1416":1,"1417":1,"1451":1,"1452":1,"1453":1,"1460":1,"1461":1,"1475":1,"1476":1,"1477":1,"1478":1,"1661":1,"1662":1,"1663":1,"1664":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1794":1,"1795":1,"1796":1,"1802":1,"1803":1,"1804":1,"1805":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1860":1,"1861":1,"1862":1,"1871":1,"1872":1,"1879":1,"1880":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"1900":1,"1901":1,"1902":1,"1903":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1928":1,"1929":1,"1930":1,"1931":1,"1936":1,"1937":1,"1938":1,"1939":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1964":1,"1965":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"2033":1,"2034":1,"2035":1,"2038":1,"2039":1,"2040":1,"2041":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2231":1,"2232":1,"2233":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1,"2246":1,"2247":1,"2248":1,"2249":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":1,"2274":1,"2275":1,"2276":1,"2277":1,"2278":1,"2279":1,"2280":1,"2281":1,"2287":1,"2288":1,"2289":1,"2290":1,"2291":1,"2292":1,"2302":1,"2303":1,"2304":1,"2305":1,"2315":1,"2316":1,"2317":1,"2318":1,"2319":1,"2320":1,"2329":1,"2330":1,"2331":1,"2332":1},"2":{"208":1,"219":1,"222":1,"384":1,"385":1,"386":1,"393":1,"451":1,"452":1,"519":1,"523":1,"570":1,"579":1,"580":1,"581":1,"582":1,"588":1,"589":1,"590":1,"591":1,"600":1,"601":1,"602":1,"618":1,"619":1,"620":1,"621":1,"623":1,"632":2,"633":1,"634":1,"635":1,"636":1,"643":1,"648":1,"649":1,"678":1,"686":1,"688":1,"698":1,"704":1,"728":1,"729":1,"763":1,"767":1,"772":1,"776":1,"838":1,"900":1,"1758":2,"1770":1,"1777":1,"1785":2,"1794":1,"1817":1,"1838":1,"1840":1,"1841":1,"1842":1,"1861":1,"1862":1,"1871":1,"1879":1,"1880":1,"1895":1,"1896":1,"1902":1,"1903":1,"1911":2,"1912":2,"1913":2,"1914":2,"1915":2,"1916":2,"1917":2,"1918":2,"1945":1,"1946":1,"1947":1,"1949":1,"1951":1,"1953":1,"1955":1,"1965":1,"1966":1,"1967":1,"1969":1,"1970":1,"1971":1,"1981":1,"1982":1,"1983":1,"1984":1,"1986":1,"1999":1,"2003":1,"2005":1,"2006":1,"2007":1,"2009":1,"2010":1,"2011":1,"2013":1,"2014":1,"2015":1,"2017":1,"2018":1,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2028":1,"2029":1,"2030":1}}],["주소로",{"2":{"1736":1}}],["주소에",{"2":{"1713":1}}],["주소가",{"2":{"1487":1}}],["주소를",{"2":{"1195":1}}],["주소",{"2":{"46":1,"56":1,"59":1,"67":1,"76":1,"636":1,"1180":3,"1487":1,"1689":2,"1707":3,"1734":3,"2267":1}}],["디자인팀",{"2":{"1027":1}}],["디버깅",{"0":{"2188":1},"2":{"673":1}}],["디스크",{"2":{"471":1,"1703":1,"1704":1}}],["디렉토리별",{"0":{"1863":1},"1":{"1864":1,"1865":1}}],["디렉토리로",{"2":{"1847":1}}],["디렉토리는",{"2":{"1833":1,"1857":1,"1876":1,"1890":1,"1908":1,"1993":1}}],["디렉토리입니다",{"2":{"1669":1,"1857":1}}],["디렉토리가",{"2":{"560":1,"1823":1}}],["디렉토리의",{"2":{"436":1,"548":1,"1587":1,"1778":1,"1833":2,"1844":1,"1847":1,"1848":2}}],["디렉토리를",{"2":{"368":1,"1506":1,"1864":1}}],["디렉토리에서",{"2":{"496":1,"1733":1}}],["디렉토리에",{"2":{"344":1,"473":1,"497":1,"503":1,"746":1,"1174":1,"1483":1,"1504":1,"1511":1,"1563":1,"1599":1,"1628":1,"1638":1,"1642":1,"1717":1,"1806":1,"1905":1,"2056":1}}],["디렉토리",{"0":{"437":1,"548":1,"549":1,"550":1,"551":1,"552":1,"557":1,"558":1,"559":1,"747":1,"750":1,"752":1,"754":1,"756":1,"759":1,"1559":1,"1582":1,"1587":1,"1598":1,"1667":1,"1668":1,"1809":1,"1813":1,"1815":1,"1817":1,"1818":1,"1832":1,"1834":1,"1853":1,"1856":1,"1858":1,"1877":1,"1891":1,"1909":1,"1926":1,"1927":1,"1934":1,"1942":1,"1962":1,"1978":1,"1994":1},"1":{"549":1,"550":1,"551":2,"552":2,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":2,"561":2,"562":2,"563":2,"564":2,"565":1,"566":1,"1560":1,"1561":1,"1562":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1816":1,"1817":1,"1818":1,"1819":2,"1820":2,"1821":2,"1822":2,"1823":2,"1824":2,"1825":1,"1826":1,"1827":1,"1828":1,"1829":1,"1830":1,"1831":1,"1833":1,"1834":1,"1835":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1843":1,"1844":1,"1845":1,"1846":1,"1847":1,"1848":1,"1849":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1863":1,"1864":1,"1865":1,"1866":1,"1928":1,"1929":1,"1930":1,"1931":1},"2":{"158":1,"548":1,"549":2,"560":1,"563":1,"896":1,"1692":1,"1758":1,"1778":3,"1781":1,"1829":1,"1831":2,"1866":1}}],["디코딩",{"2":{"46":1,"651":1,"928":1}}],["디비에",{"2":{"17":1}}],["krw",{"2":{"1879":1}}],["kr",{"0":{"1880":1},"2":{"1877":1,"1880":3,"1887":3}}],["ko",{"0":{"1880":1},"2":{"1877":1,"1880":1,"1887":1,"1898":3,"2143":1}}],["kor",{"2":{"45":1,"46":2,"65":1,"67":1,"76":1,"664":1,"742":1,"1879":4,"1884":1,"1885":1,"1886":1,"2267":1}}],["kebab",{"2":{"1580":1}}],["keyfield",{"0":{"2192":1,"2216":1},"2":{"2216":1}}],["keyup",{"2":{"1989":2}}],["keys",{"0":{"1245":1}}],["key",{"0":{"296":1,"1243":1,"1244":1,"1246":1,"1452":1,"1453":1,"2194":1,"2287":1,"2288":1,"2290":1},"2":{"11":2,"32":1,"59":2,"69":1,"148":2,"204":1,"604":2,"729":1,"740":1,"933":1,"1212":1,"1215":1,"1216":1,"1251":1,"1316":4,"1629":1,"1914":2,"2087":1,"2231":3,"2232":3,"2287":1,"2288":1,"2290":1}}],["kb",{"2":{"1169":1}}],["kajtalsy8zewf18c9mxdryhxlsxg==",{"2":{"211":1,"238":1,"790":1,"978":1}}],["kh3+atsyuizxqkjqqledn12a1psqrleole8iumrbo4hxfnlc7drzab1ek0qbwq61xje0",{"2":{"211":1,"238":1,"790":1,"978":1}}],["kt",{"0":{"732":1},"2":{"69":2,"204":2,"729":3,"731":1,"740":3,"744":1}}],["했습니다",{"2":{"45":1}}],["정적",{"0":{"1368":1,"1685":1},"2":{"1667":1,"1685":1,"1816":1,"1833":1,"1848":1,"1849":1}}],["정제하여",{"2":{"983":1}}],["정제",{"2":{"936":1,"941":1}}],["정제된",{"2":{"798":1,"985":1}}],["정책",{"0":{"225":1,"679":1,"760":1,"984":1},"1":{"226":1,"680":1,"761":1},"2":{"226":1,"551":1,"680":1,"747":1,"761":1,"763":1,"936":1}}],["정화",{"2":{"216":1,"670":1}}],["정의와",{"2":{"2261":1}}],["정의되어",{"2":{"2090":1}}],["정의된",{"2":{"1687":1}}],["정의가",{"2":{"1589":1}}],["정의됩니다",{"2":{"1365":1,"1602":1,"1624":1,"2136":1}}],["정의합니다",{"2":{"984":1}}],["정의할",{"2":{"870":1}}],["정의",{"0":{"272":1,"1034":1,"1572":1,"1573":1,"1589":1,"2136":1},"2":{"197":2,"226":1,"680":1,"761":2,"864":1,"1033":1,"1059":1,"1583":2,"1611":1,"1613":3,"1817":2,"1879":1,"1895":1,"1986":2,"1987":1,"2038":1,"2043":1,"2171":1,"2186":1,"2261":1}}],["정상적으로",{"2":{"505":1,"1358":1,"1617":1,"1847":1}}],["정상",{"2":{"138":1}}],["정리했습니다",{"2":{"522":1}}],["정리합니다",{"2":{"79":1,"767":1,"772":1}}],["정리",{"0":{"79":1},"2":{"78":2,"514":1,"1756":1,"2178":1}}],["정렬",{"2":{"45":1,"1880":1,"2099":1,"2119":1}}],["정보입니다",{"2":{"1777":1,"1780":1}}],["정보는",{"2":{"77":1,"87":1,"1252":1}}],["정보를",{"2":{"53":1,"56":1,"121":1,"220":1,"481":1,"490":1,"672":1,"869":1,"1031":1,"1272":1,"1362":1,"1402":1,"1606":1,"1621":1,"1914":1,"1958":1}}],["정보가",{"2":{"17":1,"23":1}}],["정보",{"0":{"7":1,"15":1,"18":1,"28":1,"41":1,"54":1,"63":1,"74":1,"90":1,"117":1,"268":1,"731":1,"869":1,"1958":1},"1":{"19":1,"20":1,"21":1},"2":{"17":1,"21":1,"24":1,"33":1,"34":2,"44":1,"46":1,"56":2,"59":1,"76":2,"78":1,"84":1,"87":1,"462":1,"463":1,"464":1,"465":1,"510":1,"649":1,"651":1,"652":1,"673":1,"729":1,"731":1,"803":1,"974":1,"986":1,"996":1,"1150":1,"1185":1,"1252":1,"1416":1,"1418":2,"1439":1,"1475":1,"1477":1,"1606":1,"1675":1,"1715":1,"1762":1,"1764":1,"1797":1,"1802":1,"1942":1,"1946":6,"1962":2,"1969":3,"1970":2,"1971":2,"2024":1,"2123":1,"2258":1}}],["값만",{"2":{"2193":1}}],["값이",{"2":{"1725":1,"2204":1,"2205":2,"2329":1}}],["값을",{"2":{"1243":1,"1244":1,"1245":1,"1452":1,"1453":1,"2276":1,"2277":1,"2305":1}}],["값으로",{"2":{"1026":1,"1033":1,"2216":1}}],["값",{"2":{"45":2,"66":1,"224":1,"248":1,"636":2,"656":1,"671":1,"954":2,"1026":2,"1033":2,"1035":2,"1250":1,"1454":2,"1593":1,"1725":1,"1787":1,"1788":1,"1914":2,"1958":1,"2033":1,"2204":1,"2205":1,"2302":1,"2305":1}}],["값은",{"2":{"30":1}}],["빈값이면",{"2":{"2302":1}}],["빈값",{"2":{"2302":1}}],["빈도를",{"2":{"2162":1}}],["빈",{"0":{"260":1},"2":{"45":1,"248":1,"618":1,"636":2,"656":1,"1725":1,"1787":1,"1994":1,"2028":1,"2033":1,"2205":1}}],["삭제됩니다",{"2":{"92":1,"114":1,"200":1}}],["삭제된",{"2":{"57":2}}],["삭제할",{"2":{"57":1,"2290":1}}],["삭제합니다",{"2":{"57":1,"78":1,"2290":1,"2291":1}}],["삭제하는",{"2":{"53":1}}],["삭제",{"0":{"57":1,"301":1,"310":1},"2":{"45":3,"49":1,"57":2,"78":2,"114":1,"158":1,"200":1,"634":2,"649":2,"651":1,"655":1,"723":2,"896":1,"1059":1,"1071":1,"1435":1,"1444":1,"1445":1,"1748":1,"1982":1,"2178":1}}],["삭제를",{"2":{"43":1}}],["변수나",{"2":{"1845":1}}],["변수들이",{"2":{"1707":1}}],["변수명이",{"2":{"2058":1,"2179":1}}],["변수명",{"0":{"1577":1},"2":{"1612":1}}],["변수가",{"0":{"2058":1},"2":{"1485":1,"1749":1,"2179":1}}],["변수는",{"2":{"1185":1,"1507":1,"1510":1}}],["변수에",{"2":{"1185":1}}],["변수만",{"2":{"1181":1}}],["변수를",{"2":{"1176":1,"1202":1,"1487":1,"1734":1,"1735":1}}],["변수",{"0":{"1177":1,"1179":1,"1180":1,"1181":1,"1202":1,"1485":1,"1507":1,"1510":1,"1574":1,"1639":1,"1707":1,"1713":1,"1734":1,"1749":1,"2179":1},"1":{"1178":1,"1179":1,"1180":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1735":1},"2":{"459":1,"460":1,"1179":1,"1185":1,"1487":1,"1571":1,"1577":2,"1613":1,"1667":1,"1689":1,"1735":4,"1749":1,"1780":1,"1781":1,"1816":1,"2040":1}}],["변경합니다",{"2":{"2305":1}}],["변경하면",{"2":{"1848":1}}],["변경한",{"2":{"1743":1,"2063":1}}],["변경할",{"2":{"1098":1,"1886":1}}],["변경되면",{"2":{"1045":1}}],["변경",{"0":{"49":1,"655":1,"1491":1,"1886":1},"2":{"45":1,"51":1,"427":1,"509":1,"665":1,"995":1,"1096":1,"1185":1,"1574":1,"1593":1,"1635":1,"1848":1,"1882":1,"1886":2}}],["변환된",{"2":{"2216":1,"2304":1}}],["변환할",{"2":{"2216":1,"2304":1,"2305":1}}],["변환됩니다",{"2":{"114":1,"200":1,"1348":1}}],["변환하여",{"2":{"97":1,"108":1,"109":1}}],["변환",{"0":{"98":1,"110":1,"190":1,"716":1,"1348":1},"2":{"32":1,"97":1,"105":1,"114":1,"185":1,"199":1,"200":1,"623":1,"636":3,"713":1,"723":2,"953":1,"957":1,"1350":1,"1770":2,"1986":1}}],["변환합니다",{"2":{"32":1,"38":1,"2192":1,"2193":1,"2197":1,"2208":1,"2216":1,"2240":1,"2241":1,"2246":1,"2247":1,"2304":1,"2316":1,"2317":1,"2320":1}}],["언어를",{"2":{"1886":1}}],["언어",{"0":{"1875":1,"1886":1},"1":{"1876":1,"1877":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1887":1,"1888":1},"2":{"44":1,"46":1,"67":1,"76":1,"433":1,"1817":1,"1858":1,"1879":4,"1882":1,"2267":1}}],["한국어로",{"2":{"1880":1,"1886":1}}],["한국어",{"2":{"1877":1,"1879":2,"1880":1,"1887":1,"1898":1,"2143":1}}],["한글을",{"2":{"200":1}}],["한글",{"0":{"113":1,"192":1,"717":1,"889":1},"1":{"193":1,"194":1,"195":1,"718":1,"719":1},"2":{"113":1,"200":1,"551":1,"711":1,"756":1,"886":1,"889":1}}],["한",{"2":{"43":1,"1031":1,"1164":1,"1245":1}}],["추론",{"2":{"1659":1}}],["추적을",{"2":{"1317":1}}],["추천",{"0":{"518":1,"1771":1},"1":{"1772":1,"1773":1,"1774":1,"1775":1,"1776":1}}],["추가적인",{"2":{"1300":1,"1522":1}}],["추가합니다",{"2":{"370":1,"375":1,"407":1,"493":1,"1317":1,"1416":1,"1713":1,"1718":1,"1885":1,"2245":1,"2275":1,"2322":1}}],["추가하려면",{"2":{"1885":1,"1905":1}}],["추가하거나",{"2":{"1407":1,"1743":1,"1848":1,"2063":1}}],["추가하면",{"2":{"859":1}}],["추가하기",{"2":{"367":1}}],["추가하는",{"2":{"360":1,"364":1,"387":1,"405":1,"1596":1}}],["추가할",{"2":{"365":1,"455":1,"1362":1,"1390":1,"1659":1,"2310":1}}],["추가",{"0":{"360":1,"364":1,"366":1,"370":1,"371":1,"375":1,"387":1,"407":1,"408":1,"421":1,"455":1,"1312":1,"1313":1,"1317":1,"1367":1,"1603":1,"1625":1,"1742":1,"1885":1,"1905":1},"1":{"361":1,"362":1,"363":1,"365":1,"366":1,"367":2,"368":2,"369":2,"370":2,"371":2,"372":2,"373":2,"374":2,"375":2,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"1368":1,"1369":1,"1743":1,"1744":1,"1745":1},"2":{"43":1,"45":3,"49":1,"370":1,"371":1,"375":1,"387":1,"394":1,"396":4,"397":1,"415":1,"419":1,"456":1,"515":1,"518":1,"547":1,"649":2,"651":1,"655":1,"1026":1,"1033":1,"1036":1,"1071":1,"1121":1,"1139":2,"1230":1,"1272":2,"1273":1,"1535":1,"1548":1,"1599":1,"1729":1,"1763":1,"1862":1,"1905":1,"1916":1,"1918":1,"2068":1,"2095":1,"2262":1}}],["추출합니다",{"2":{"2280":1,"2318":1}}],["추출",{"0":{"1533":1},"2":{"17":2,"24":1,"78":2,"86":1,"220":1,"636":3,"672":3,"801":1,"803":2,"816":1,"974":2}}],["링크입니다",{"2":{"776":1}}],["링크인",{"2":{"45":1}}],["링크명",{"2":{"45":1}}],["링크를",{"2":{"43":1,"1137":1}}],["링크",{"0":{"43":1,"140":1,"516":1,"1135":1,"1761":1},"1":{"44":1,"45":1,"141":1,"142":1,"143":1,"1136":1,"1137":1,"1138":1,"1139":1,"1140":1,"1762":1,"1763":1,"1764":1},"2":{"44":1,"45":6,"48":1,"648":1,"649":3,"651":4,"654":1,"1139":2,"1140":2,"1768":2,"1785":1,"2023":1}}],["커스터마이징",{"0":{"868":1,"1044":1},"1":{"869":1,"870":1},"2":{"1841":1,"1842":1}}],["커스텀",{"0":{"1300":1,"1303":1,"1531":1,"1641":1,"1642":1,"1728":1,"1905":1,"2067":1,"2094":1},"1":{"1532":1,"1533":1,"1642":1,"1643":1,"1644":1},"2":{"622":1,"1044":2,"1058":1,"1064":1,"1300":1,"1320":1,"1642":2,"1667":1,"1776":2,"1834":1,"1839":1,"1840":2,"1841":1,"1842":1,"1885":2,"1900":1,"1901":1,"1903":1,"2013":1}}],["커넥션",{"0":{"839":1},"1":{"840":1,"841":1},"2":{"618":4,"839":1}}],["커밋",{"2":{"699":1}}],["커밋되지",{"2":{"563":1}}],["커밋하지",{"2":{"230":1,"613":1}}],["커밋됩니다",{"2":{"38":1}}],["커서의",{"2":{"108":1,"111":2}}],["커서를",{"2":{"98":1,"110":1,"190":1}}],["커서명",{"2":{"95":2,"97":1}}],["커서로",{"2":{"38":1}}],["커서는",{"2":{"36":1,"105":1,"185":1}}],["커서",{"0":{"32":1,"36":1,"98":1,"105":1,"110":1,"185":1,"190":1,"713":1,"716":1},"2":{"30":1,"32":1,"33":1,"38":1,"98":1,"114":1,"179":1,"200":1,"643":1,"708":1,"716":1,"723":1}}],["모바일",{"2":{"2324":1}}],["모달을",{"2":{"1426":1,"1427":1}}],["모달",{"0":{"1421":1},"1":{"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1,"1428":1},"2":{"1422":1,"1424":2,"1426":2,"1428":1,"1675":1,"1762":2,"1909":1,"1915":6,"1923":1,"2030":1,"2123":1}}],["모드",{"2":{"1026":1,"1896":1}}],["모니터링",{"0":{"1501":1},"2":{"613":1}}],["모았습니다",{"2":{"523":1}}],["모두",{"2":{"138":1,"2073":1,"2103":1}}],["모듈로",{"2":{"1661":1,"1662":1,"1663":1}}],["모듈과",{"2":{"1659":1}}],["모듈입니다",{"2":{"597":1,"629":1,"645":1,"683":1,"701":1,"725":1,"1664":1,"1792":1,"1933":1}}],["모듈들입니다",{"2":{"516":1,"1761":1}}],["모듈은",{"2":{"448":1,"454":1,"524":1,"1941":1,"1961":1,"1977":1}}],["모듈화된",{"0":{"431":1},"2":{"432":1,"1653":1}}],["모듈별로",{"2":{"1598":1,"1823":1,"1864":1}}],["모듈별",{"0":{"1779":1},"2":{"368":1,"377":1,"448":1,"525":1}}],["모듈을",{"0":{"518":1},"2":{"364":1,"365":1,"367":1,"370":1,"388":1,"405":1,"407":1,"455":1,"1653":1,"1659":1}}],["모듈에서",{"2":{"567":1,"629":1,"2298":1}}],["모듈에서는",{"2":{"389":1,"1958":1}}],["모듈에",{"2":{"360":1,"387":1,"1599":1,"1779":1}}],["모듈명",{"2":{"347":1,"367":1,"368":5,"374":2,"377":1,"400":6,"412":1,"413":2,"414":2,"417":2,"448":1,"518":1,"525":1,"540":6,"543":2,"545":1,"546":2}}],["모듈",{"0":{"125":1,"142":1,"143":1,"364":1,"366":1,"367":1,"383":1,"388":1,"405":1,"439":1,"440":1,"441":1,"454":1,"455":1,"524":1,"526":1,"533":1,"554":1,"555":1,"556":1,"567":1,"568":1,"569":1,"597":1,"598":1,"615":1,"616":1,"629":1,"630":1,"645":1,"646":1,"667":1,"668":1,"683":1,"684":1,"701":1,"702":1,"725":1,"726":1,"903":1,"932":1,"1493":1,"1660":1,"1662":1,"1663":1,"1664":1,"1791":1,"1799":1,"1807":1,"1811":1,"1932":1,"1940":1,"1960":1,"1964":1,"1968":1,"1976":1},"1":{"126":1,"127":1,"128":1,"365":1,"366":1,"367":2,"368":2,"369":2,"370":2,"371":2,"372":2,"373":2,"374":2,"375":2,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"406":1,"407":1,"408":1,"409":1,"410":1,"525":1,"526":1,"527":2,"528":2,"529":2,"530":2,"531":2,"532":2,"533":1,"534":2,"535":2,"536":2,"537":2,"538":2,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"568":1,"569":1,"570":2,"571":2,"572":2,"573":2,"574":2,"575":2,"576":2,"577":2,"578":2,"579":2,"580":2,"581":2,"582":2,"583":2,"584":2,"585":2,"586":2,"587":2,"588":2,"589":2,"590":2,"591":2,"592":1,"593":1,"594":1,"595":1,"596":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"630":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"668":1,"669":1,"670":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"702":1,"703":1,"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1,"726":1,"727":1,"728":1,"729":1,"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"904":1,"905":1,"906":1,"1661":1,"1662":1,"1663":1,"1664":1,"1792":1,"1793":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1800":1,"1801":1,"1802":1,"1803":1,"1804":1,"1805":1,"1806":1,"1808":1,"1809":1,"1810":1,"1812":1,"1813":1,"1814":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1941":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":2,"1966":2,"1967":2,"1968":1,"1969":2,"1970":2,"1971":2,"1972":1,"1973":1,"1974":1,"1975":1,"1977":1,"1978":1,"1979":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"2":{"128":1,"130":2,"145":1,"201":1,"362":1,"365":1,"367":1,"370":1,"371":1,"375":1,"383":1,"396":1,"397":2,"398":2,"431":2,"434":3,"437":3,"444":1,"454":3,"456":3,"514":2,"515":1,"516":2,"518":2,"521":2,"547":1,"551":4,"558":2,"566":2,"596":1,"614":2,"628":1,"644":2,"666":1,"700":2,"724":1,"745":1,"752":1,"904":1,"1097":1,"1112":1,"1119":1,"1598":3,"1652":1,"1678":1,"1679":1,"1680":1,"1681":1,"1690":1,"1692":1,"1778":1,"1779":4,"1817":4,"1858":4,"1861":1,"1864":2,"1959":1,"1975":1,"1991":1,"2310":1}}],["모듈의",{"2":{"73":1,"116":1,"125":1,"126":1,"383":1,"393":1,"394":1,"1800":1,"1808":1,"1812":1,"1957":1,"1973":1,"1989":1}}],["모든",{"2":{"38":1,"56":1,"57":1,"129":1,"135":1,"139":1,"144":1,"216":1,"230":1,"264":1,"331":1,"348":1,"393":1,"521":1,"541":1,"560":1,"565":1,"567":1,"572":1,"629":1,"632":1,"670":1,"681":1,"768":1,"798":1,"839":1,"844":1,"970":1,"974":1,"985":1,"1287":1,"1289":1,"1295":1,"1299":1,"1309":1,"1323":1,"1358":1,"1411":1,"1478":1,"1490":1,"1539":1,"1669":1,"1708":1,"1733":1,"1763":1,"1848":1,"1857":2,"1880":1,"1914":1,"2204":1,"2289":1,"2291":1,"2295":1,"2306":1}}],["모델명",{"2":{"9":1}}],["트리",{"0":{"1047":1,"1497":1,"2008":1,"2115":1,"2133":1},"1":{"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"2009":1,"2010":1,"2011":1},"2":{"1048":1,"1050":1,"1052":1,"1175":1,"1505":1,"1766":2,"1842":1,"2009":1,"2010":1,"2115":1,"2133":1}}],["트러블슈팅",{"0":{"1784":1},"2":{"345":1}}],["트랜잭션",{"2":{"38":1,"261":1,"380":1,"579":1,"618":1,"838":1,"905":1}}],["트레이스",{"2":{"34":2}}],["인디케이터",{"2":{"2001":1}}],["인텔리전스",{"2":{"1977":1,"1978":1}}],["인사",{"0":{"1799":1,"1944":1},"1":{"1800":1,"1801":1,"1802":1,"1803":1,"1804":1,"1805":1,"1806":1,"1945":1,"1946":1,"1947":1},"2":{"1599":1,"1662":1,"1679":1,"1779":1,"1800":1,"1802":1,"1806":1,"1942":2,"1946":2,"1959":1,"1962":3,"1969":1,"1970":1,"1971":2}}],["인식되지",{"2":{"1749":1}}],["인식",{"0":{"1749":1,"2179":1}}],["인식됨",{"2":{"561":1}}],["인식됩니다",{"2":{"38":1}}],["인터넷",{"2":{"1706":1}}],["인터랙션",{"2":{"1618":1}}],["인터랙티브",{"2":{"856":1}}],["인터셉터는",{"2":{"1309":1,"1320":1,"1323":1}}],["인터셉터입니다",{"2":{"1271":1,"1274":1}}],["인터셉터를",{"2":{"1267":1,"1672":1,"1862":1,"2094":1}}],["인터셉터에서",{"2":{"1211":1,"1213":1,"1230":1,"1256":1,"1289":1,"1292":1,"1319":1,"1390":2,"1400":1,"1416":1,"1522":1,"2234":1}}],["인터셉터",{"0":{"1271":1,"1274":1,"1308":1,"1322":1},"1":{"1272":1,"1273":1,"1275":1,"1276":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1323":1,"1324":1,"1325":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1340":1,"1341":1,"1342":1,"1343":1},"2":{"554":1,"582":1,"616":1,"623":1,"1222":1,"1290":2,"1307":1,"1321":1,"1343":1,"1763":2,"1858":1}}],["인터페이스를",{"2":{"371":1}}],["인터페이스",{"0":{"316":1,"332":1,"412":1,"545":1},"1":{"317":1},"2":{"368":1,"377":1,"386":1,"396":1,"448":1,"525":1,"1490":1}}],["인가를",{"2":{"820":1,"970":1}}],["인가",{"0":{"354":1,"394":1},"1":{"355":1,"356":1,"357":1,"358":1,"359":1},"2":{"353":1,"363":1,"394":1,"398":1,"423":1,"428":1,"514":1,"518":1,"581":1,"917":1}}],["인스턴스를",{"2":{"1267":1,"1672":1,"1861":1,"1862":1,"2067":1,"2094":1}}],["인스턴스",{"0":{"1266":1,"2067":1,"2094":1},"1":{"1267":1,"1268":1,"1269":1,"1270":1,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":1},"2":{"261":1,"619":2,"838":1,"1237":1,"1265":1,"1307":1,"1321":1,"1343":1,"1391":1,"1667":1,"1763":1,"1817":1,"1858":1,"1879":1,"1893":1,"1896":2,"1898":2,"2035":1}}],["인쇄",{"2":{"100":1,"1435":1}}],["인",{"2":{"51":1,"71":1,"744":1,"1838":1}}],["인코딩됨",{"2":{"59":1}}],["인코딩",{"2":{"45":1,"51":1,"651":1,"665":1,"928":1,"945":2}}],["인코딩된",{"2":{"44":1,"51":1,"665":1}}],["인증되지",{"2":{"1389":1}}],["인증되었는지",{"2":{"1385":1}}],["인증된",{"2":{"1385":1}}],["인증이",{"2":{"132":1,"354":1,"358":1,"394":1,"830":1,"971":1,"1360":1,"1536":1}}],["인증을",{"2":{"9":1,"803":1,"808":1,"1224":2}}],["인증",{"0":{"14":1,"73":1,"132":1,"218":1,"354":1,"391":1,"394":1,"529":1,"802":1,"808":1,"873":1,"960":1,"973":1,"1223":1,"1228":1,"1235":1,"1294":1,"1360":1,"1376":1,"1389":1,"1525":1,"1764":1,"1791":1,"2164":1,"2168":1},"1":{"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"133":1,"134":1,"219":1,"220":1,"355":1,"356":1,"357":1,"358":1,"359":1,"803":1,"804":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1,"816":1,"817":1,"818":1,"819":1,"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":2,"975":2,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"985":1,"986":1,"987":1,"1224":1,"1225":1,"1226":1,"1227":1,"1228":1,"1229":2,"1230":2,"1231":2,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1,"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1,"1792":1,"1793":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"2165":1,"2166":1,"2167":1,"2168":1},"2":{"7":1,"15":2,"19":1,"28":2,"39":1,"41":1,"54":1,"61":1,"63":1,"73":1,"74":2,"78":1,"88":1,"90":1,"117":1,"130":2,"138":1,"141":1,"142":1,"208":1,"220":2,"222":2,"231":1,"353":1,"363":1,"388":1,"394":2,"398":1,"421":1,"423":1,"428":1,"439":2,"440":1,"514":1,"516":4,"518":2,"527":1,"554":2,"555":1,"581":1,"585":1,"620":2,"630":1,"668":1,"672":2,"676":1,"682":1,"769":1,"803":1,"807":1,"810":1,"820":1,"831":1,"852":1,"859":1,"864":1,"917":1,"937":1,"964":1,"970":1,"974":1,"987":1,"1080":1,"1180":1,"1192":1,"1226":1,"1237":1,"1253":1,"1265":1,"1290":1,"1359":2,"1372":1,"1377":1,"1391":1,"1525":1,"1653":2,"1661":1,"1675":1,"1678":1,"1689":1,"1707":1,"1734":1,"1762":1,"1764":2,"1769":1,"1779":1,"1784":2,"1788":1,"1792":1,"1797":1,"1798":1,"1817":1,"1864":1,"1909":1,"1911":3,"1923":1,"1934":1,"2034":1,"2091":1,"2123":1,"2138":1}}],["로케일이",{"2":{"2143":1}}],["로케일을",{"2":{"1887":1}}],["로케일",{"0":{"1887":1,"2143":1},"2":{"1877":1,"1880":2,"1888":1,"1898":1}}],["로더",{"2":{"1199":1,"1667":1,"1834":1,"1891":1,"1903":1}}],["로고",{"2":{"1088":1,"1089":1,"1667":1,"1834":1,"1837":1}}],["로딩을",{"2":{"1289":1,"1319":1}}],["로딩이",{"2":{"1289":1}}],["로딩",{"0":{"1008":1,"1311":1,"1325":1,"1329":1,"1392":1,"1615":1,"2000":1},"1":{"1009":1,"1010":1,"1011":1,"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1,"2001":1},"2":{"1272":1,"1273":1,"1275":1,"1289":1,"1393":1,"1397":1,"1398":1,"1400":1,"1615":1,"1618":1,"1675":1,"1762":2,"1766":2,"1788":1,"1838":2,"1862":1,"1903":2,"1909":1,"1912":5,"1923":1,"2001":4,"2005":1,"2007":1,"2034":1,"2123":1}}],["로거",{"2":{"913":1}}],["로드된",{"2":{"1353":1}}],["로드",{"0":{"1104":1,"1349":1},"2":{"180":1,"709":1,"1029":1,"1103":1,"1353":1,"1618":1,"1720":1,"2292":1}}],["로직이",{"2":{"1857":1}}],["로직에",{"2":{"1677":1,"1823":1}}],["로직은",{"2":{"565":1,"1806":1}}],["로직을",{"2":{"385":1,"1306":1,"1539":1,"1819":2,"1851":1,"1854":1}}],["로직",{"0":{"1276":1,"1304":1,"1335":1,"1534":1,"1683":1},"1":{"1336":1,"1337":1},"2":{"162":1,"368":1,"372":1,"377":1,"380":1,"397":1,"448":1,"518":1,"525":1,"540":1,"543":1,"613":1,"649":1,"687":1,"699":1,"705":1,"729":1,"1036":1,"1273":1,"1294":1,"1332":1,"1539":1,"1583":1,"1600":1,"1611":1,"1613":3,"1667":1,"1683":1,"1778":1,"1817":1,"1862":1,"1920":1}}],["로깅합니다",{"2":{"162":1,"806":1}}],["로깅을",{"2":{"160":1}}],["로깅",{"0":{"160":1,"161":1,"244":1,"762":1,"805":1,"1535":1},"1":{"161":1,"162":2,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"763":1,"806":1},"2":{"439":2,"517":1,"551":1,"554":2,"574":2,"583":1,"586":1,"630":3,"668":1,"673":2,"681":1,"747":1,"763":1,"905":1,"1306":1,"1535":2,"1539":1}}],["로컬에서",{"2":{"1741":1}}],["로컬",{"0":{"1759":1},"2":{"78":1,"87":1,"233":1,"273":1,"443":1,"473":1,"515":2,"551":1,"626":1,"627":1,"750":2,"773":1,"1783":1}}],["로",{"2":{"38":1,"106":2,"114":1,"186":1,"1185":1,"1749":1,"2058":1,"2179":1}}],["로그는",{"2":{"1420":1}}],["로그에",{"2":{"1306":1,"1411":1,"1539":1}}],["로그로",{"2":{"681":1}}],["로그가",{"2":{"505":1}}],["로그아웃됨",{"2":{"2168":1}}],["로그아웃과",{"2":{"79":1}}],["로그아웃을",{"2":{"78":1}}],["로그아웃",{"0":{"78":1,"1249":1,"1388":1},"2":{"78":1,"529":1,"1380":1,"1383":1,"1895":1}}],["로그를",{"2":{"34":1,"1142":1,"1144":1,"1148":1,"1411":1,"1416":1,"1918":1}}],["로그",{"0":{"34":1,"163":1,"165":1,"507":1,"558":1,"999":1,"1000":1,"1001":1,"1141":1,"1146":1,"1299":1,"1314":1,"1330":1,"1410":1,"1418":1},"1":{"164":1,"165":1,"1000":1,"1001":1,"1002":1,"1142":1,"1143":1,"1144":1,"1145":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1411":1,"1412":1,"1413":1,"1414":1,"1415":1,"1416":1,"1417":1,"1418":1,"1419":1,"1420":1},"2":{"34":1,"167":1,"471":1,"507":1,"522":1,"549":1,"558":3,"564":2,"763":5,"998":1,"999":1,"1088":1,"1089":1,"1150":3,"1151":1,"1272":1,"1299":1,"1413":2,"1415":1,"1417":1,"1419":3,"1535":1,"1675":1,"1762":2,"1768":2,"1909":1,"1918":6,"1923":1,"2024":3,"2025":2,"2304":1}}],["로그인하세요",{"2":{"2166":1,"2181":1}}],["로그인과",{"2":{"77":1}}],["로그인합니다",{"2":{"77":1}}],["로그인에",{"2":{"76":1}}],["로그인을",{"2":{"76":1}}],["로그인해야",{"2":{"25":1}}],["로그인",{"0":{"73":1,"76":1,"77":1,"81":1,"82":1,"1229":1,"1248":1,"1387":1,"1715":1,"1797":1},"1":{"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":2,"83":2,"84":2,"85":2,"86":2,"87":1,"88":1},"2":{"13":1,"17":1,"26":1,"56":1,"59":1,"72":1,"73":1,"76":2,"77":2,"78":1,"87":1,"130":1,"142":1,"145":1,"529":2,"1249":1,"1262":2,"1276":2,"1287":1,"1294":1,"1295":1,"1337":1,"1380":1,"1387":1,"1389":1,"1390":1,"1525":2,"1678":1,"1715":1,"1794":2,"1795":1,"1797":1,"1895":2,"1920":1,"1936":1,"1937":1,"1994":1,"2028":1,"2057":1,"2162":1,"2165":1,"2167":1,"2181":1}}],["대문자",{"2":{"2316":1}}],["대문자로",{"2":{"38":1}}],["대안",{"0":{"2309":1}}],["대용량",{"2":{"2098":1,"2284":1}}],["대시보드",{"2":{"1478":1,"1661":1,"1678":1,"1684":1,"1779":1,"1817":1,"1879":1,"1926":1,"1930":1,"1939":1}}],["대한",{"2":{"1275":1,"1777":1,"1779":1,"1780":1,"1790":1,"2116":1}}],["대신",{"2":{"1162":1,"1537":1,"1696":1,"1830":1}}],["대량의",{"2":{"1045":1}}],["대량",{"2":{"699":1}}],["대상이",{"2":{"1848":1}}],["대상",{"2":{"670":1,"1949":1}}],["대해",{"2":{"216":1,"798":1,"974":1,"985":1}}],["대칭키",{"2":{"210":1,"785":1,"977":1}}],["대부분",{"2":{"74":1}}],["대부분의",{"2":{"28":1,"132":1,"1289":1,"1400":1,"1522":1,"1957":1,"1973":1,"2029":1,"2300":1}}],["대기합니다",{"2":{"1261":1}}],["대기",{"2":{"70":1,"738":1,"1261":1,"1276":1,"1336":1,"1534":1}}],["대소문자",{"2":{"38":1}}],["기록할",{"2":{"1535":1}}],["기록하세요",{"2":{"1306":1,"1539":1}}],["기록됩니다",{"2":{"1299":1,"1411":1}}],["기록",{"0":{"1299":1}}],["기획팀",{"2":{"1027":1}}],["기술들을",{"2":{"519":1}}],["기술",{"0":{"433":1,"519":1,"1655":1,"1777":1},"1":{"1656":1,"1657":1,"1658":1},"2":{"512":1,"1777":1,"2116":1}}],["기반으로",{"2":{"1024":2}}],["기반의",{"2":{"425":1,"514":1,"1652":1,"1653":1}}],["기반",{"2":{"160":1,"428":1,"514":2,"574":1,"630":1,"882":1,"909":1,"949":1,"1224":1,"1653":3,"1756":1,"1766":1,"2005":1,"2007":1}}],["기능입니다",{"2":{"1800":1,"1808":1,"1812":1}}],["기능들은",{"2":{"517":1}}],["기능을",{"2":{"152":1,"202":1,"207":1,"208":1,"389":1,"432":2,"454":1,"514":1,"567":1,"570":1,"589":1,"591":1,"597":1,"629":1,"645":1,"683":1,"725":1,"875":1,"960":1,"1659":1,"1661":1,"1662":1,"1663":1,"1664":1,"1672":1,"1756":1,"1790":1,"1810":1,"1814":1,"1941":1,"1961":1,"1977":1,"2106":1}}],["기능",{"0":{"207":1,"428":1,"429":1,"517":1,"528":1,"530":1,"535":1,"536":1,"571":1,"592":1,"629":1,"856":1,"878":1,"882":1,"886":1,"913":1,"917":1,"921":1,"923":1,"936":1,"941":1,"945":1,"949":1,"953":1,"957":1,"1058":1,"1069":1,"1096":1,"1111":1,"1118":1,"1139":1,"1150":1,"1156":1,"1272":1,"1275":1,"1310":1,"1359":1,"1433":1,"1439":1,"1444":1,"1618":1,"1807":1,"1810":1,"1811":1,"1814":1,"1948":1,"2068":1,"2082":1,"2095":1,"2099":1,"2119":1},"1":{"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"529":1,"530":1,"531":1,"532":1,"536":1,"537":1,"538":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"593":1,"594":1,"595":1,"630":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"1070":1,"1071":1,"1311":1,"1312":1,"1313":1,"1314":1,"1315":1,"1808":1,"1809":1,"1810":1,"1812":1,"1813":1,"1814":1,"1949":1},"2":{"130":3,"208":1,"222":1,"347":1,"367":1,"388":4,"425":1,"439":1,"440":4,"441":3,"451":1,"514":1,"527":4,"531":1,"532":1,"534":3,"536":1,"537":1,"538":1,"554":1,"555":4,"556":3,"565":2,"568":1,"602":1,"614":1,"618":1,"619":1,"620":1,"621":1,"623":1,"632":1,"644":1,"666":1,"688":1,"700":1,"724":1,"745":1,"794":1,"827":1,"899":1,"949":1,"1111":1,"1118":1,"1618":1,"1679":1,"1680":2,"1681":1,"1779":3,"1794":1,"1861":1,"1862":1,"1864":1,"1879":1,"1896":1,"1902":1,"1903":1,"1942":1,"1945":1,"1946":1,"1947":1,"1949":1,"1951":1,"1953":1,"1955":1,"1962":1,"1965":1,"1966":1,"1967":1,"1969":1,"1970":1,"1971":1,"1981":1,"1982":1,"1983":1,"1984":1,"1999":1,"2003":2,"2005":1,"2006":1,"2007":1,"2009":1,"2010":1,"2011":2,"2013":1,"2014":1,"2015":1,"2017":1,"2018":2,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2029":1,"2034":1,"2114":1,"2132":1}}],["기존은",{"2":{"45":1}}],["기존",{"2":{"45":3,"651":2,"656":1,"1885":2,"2177":1}}],["기타",{"0":{"277":1,"827":1,"938":1,"1288":1,"1298":1,"1334":1,"1429":1,"2110":1,"2126":1},"1":{"939":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"947":1,"948":1,"949":1,"950":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"1430":1,"1431":1,"1432":1,"1433":1,"1434":1,"1435":1,"1436":1,"1437":1,"1438":1,"1439":1,"1440":1,"1441":1,"1442":1,"1443":1,"1444":1,"1445":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2127":1,"2128":1,"2129":1,"2130":1,"2131":1,"2132":1,"2133":1},"2":{"37":1,"76":1,"121":1,"676":1,"938":1,"1106":1,"1240":1,"1300":1,"1305":1,"1532":1,"1606":1,"1675":1,"1762":1,"1777":1,"1904":1}}],["기본으로",{"2":{"2143":1}}],["기본적인",{"2":{"1729":1,"1790":1}}],["기본적으로",{"2":{"1302":1,"1736":1,"1741":1}}],["기본값을",{"2":{"2205":1}}],["기본값은",{"2":{"1169":1}}],["기본값",{"0":{"462":1,"834":1},"2":{"9":1,"32":1,"427":1,"472":1,"480":1,"618":1,"1026":1,"1033":1,"1466":1,"1467":1,"1725":1,"1787":1,"2205":2,"2208":1,"2212":3}}],["기본",{"0":{"7":1,"15":1,"28":1,"41":1,"54":1,"63":1,"74":1,"90":1,"117":1,"197":1,"234":1,"255":1,"268":1,"317":1,"320":1,"400":1,"417":1,"540":1,"543":1,"822":1,"869":1,"989":1,"992":1,"1063":1,"1269":1,"1278":1,"1366":1,"1490":1,"1515":1,"1522":1,"1551":1,"1600":1,"1646":1,"1715":1,"1789":1,"2203":1},"1":{"1270":1,"2204":1,"2205":1},"2":{"51":1,"233":1,"383":1,"384":1,"397":1,"432":1,"437":1,"453":1,"551":1,"572":1,"625":1,"627":1,"630":1,"632":1,"665":1,"687":1,"705":1,"747":1,"749":1,"768":1,"773":1,"869":1,"1179":1,"1288":1,"1298":1,"1642":1,"1647":1,"1661":1,"1715":1,"1735":1,"1763":1,"1767":1,"1773":1,"1824":1,"1879":3,"1895":1,"1898":1,"1899":4,"1946":1,"1994":2,"2029":1,"2079":1,"2142":1}}],["브라우저별로",{"2":{"2295":1}}],["브라우저에",{"2":{"1848":1,"2284":1}}],["브라우저에서",{"2":{"25":1,"506":1,"1492":1,"1617":1,"1714":1,"1736":1}}],["브라우저의",{"2":{"1790":1}}],["브라우저가",{"2":{"1493":1}}],["브라우저를",{"2":{"1239":1,"1420":1,"1700":1}}],["브라우저",{"0":{"1700":1},"2":{"34":1,"56":1,"59":1,"1770":1,"1836":1,"2167":1,"2188":1}}],["종료합니다",{"2":{"2177":1}}],["종료",{"2":{"33":1,"2177":1,"2210":1}}],["구성합니다",{"2":{"1864":1}}],["구성",{"0":{"1088":1,"1774":1}}],["구성되어",{"2":{"130":1}}],["구축하고",{"2":{"520":1}}],["구축하기",{"0":{"1759":1},"2":{"515":1}}],["구분되어",{"2":{"1823":1}}],["구분자를",{"2":{"2275":1}}],["구분자로",{"2":{"2249":1,"2276":1,"2277":1}}],["구분자",{"2":{"665":1,"2207":1,"2212":2}}],["구분",{"2":{"138":1,"449":1}}],["구현합니다",{"2":{"2118":1}}],["구현하세요",{"2":{"1306":1,"1539":1}}],["구현하는",{"2":{"9":1}}],["구현되었습니다",{"2":{"1024":1}}],["구현체",{"2":{"932":1}}],["구현됨",{"2":{"687":1,"705":1}}],["구현된",{"2":{"506":1}}],["구현",{"0":{"1358":1},"2":{"126":1,"531":1,"532":1,"536":1,"537":1,"538":1,"598":1,"613":1,"686":1,"699":1,"949":1,"2308":1}}],["구조만",{"2":{"687":1,"705":1}}],["구조에",{"2":{"560":1}}],["구조를",{"2":{"368":1,"383":1,"448":1,"455":1,"456":1,"524":1,"1692":1,"1831":1,"1973":1,"1989":1}}],["구조와",{"2":{"365":1,"432":1,"436":1,"514":1,"548":1,"1778":1}}],["구조로",{"2":{"59":1,"432":1}}],["구조",{"0":{"35":1,"45":1,"58":1,"59":1,"197":1,"267":1,"317":1,"320":1,"367":1,"368":1,"376":1,"377":1,"388":1,"400":1,"406":1,"417":1,"431":1,"434":1,"436":1,"437":1,"438":1,"442":1,"448":1,"455":1,"478":1,"524":1,"525":1,"527":1,"534":1,"540":1,"543":1,"548":1,"549":1,"550":1,"553":1,"568":1,"598":1,"616":1,"630":1,"646":1,"668":1,"684":1,"702":1,"726":1,"746":1,"747":1,"753":1,"989":1,"992":1,"1089":1,"1113":1,"1120":1,"1225":1,"1240":1,"1339":1,"1347":1,"1366":1,"1418":1,"1555":1,"1557":1,"1558":1,"1559":1,"1570":1,"1582":1,"1598":1,"1611":1,"1666":1,"1667":1,"1778":1,"1809":1,"1813":1,"1815":1,"1816":1,"1817":1,"1834":1,"1853":1,"1858":1,"1877":1,"1891":1,"1909":1,"1926":1,"1934":1,"1942":1,"1962":1,"1973":1,"1978":1,"1989":1,"1994":1,"2087":1,"2090":1},"1":{"36":1,"37":1,"59":1,"268":1,"269":1,"270":1,"377":1,"378":1,"379":1,"380":1,"381":1,"437":1,"438":1,"439":2,"440":2,"441":2,"442":1,"443":2,"444":2,"445":2,"446":2,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"525":1,"526":1,"527":1,"528":1,"529":1,"530":1,"531":1,"532":1,"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"549":1,"550":1,"551":2,"552":2,"553":1,"554":2,"555":2,"556":2,"557":1,"558":1,"559":1,"560":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1,"1226":1,"1227":1,"1558":1,"1559":1,"1560":2,"1561":2,"1562":2,"1563":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":1,"1816":1,"1817":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"1828":1,"1829":1,"1830":1,"1831":1},"2":{"33":1,"201":1,"396":1,"397":1,"398":1,"431":1,"435":1,"456":1,"512":1,"515":1,"518":2,"566":2,"596":1,"632":1,"649":1,"1339":1,"1563":1,"1611":1,"1653":1,"1659":1,"1665":1,"1692":1,"1750":1,"1758":2,"1778":3,"1781":2,"1866":1,"1879":1,"1947":1,"2009":1,"2010":1,"2011":1,"2017":1,"2115":1,"2133":1}}],["받은",{"2":{"1274":1,"1323":1}}],["받기",{"2":{"46":1}}],["받는",{"2":{"33":1,"1261":1}}],["받습니다",{"2":{"9":1,"607":1}}],["맵",{"2":{"32":1}}],["xe",{"2":{"257":1,"483":1,"835":1}}],["xfltjeubufgiomywbs46ldm+rnynup2eg",{"2":{"211":1,"238":1,"790":1,"978":1}}],["xr109e",{"2":{"211":1,"238":1,"790":1,"978":1}}],["x=",{"2":{"197":3}}],["xssutil",{"2":{"983":2}}],["xssfworkbook",{"2":{"879":1}}],["xssfilter",{"2":{"622":1,"675":1}}],["xssrequestwrapper",{"2":{"670":2}}],["xss",{"0":{"215":1,"677":1,"797":1,"982":1,"985":1},"1":{"216":1,"217":1,"678":1,"798":1,"799":1,"983":1,"984":1,"985":1},"2":{"208":1,"216":4,"217":1,"226":1,"230":1,"428":1,"551":1,"554":3,"583":1,"587":1,"622":1,"668":3,"670":4,"676":1,"678":3,"680":1,"681":1,"682":1,"747":1,"761":1,"798":2,"936":1,"983":1,"985":2,"986":1,"1236":1}}],["xsd",{"2":{"197":2}}],["xsi",{"2":{"197":1}}],["xsi=",{"2":{"197":1}}],["xlsx",{"2":{"175":1,"879":1,"883":1,"1548":2,"2262":2}}],["xls",{"2":{"102":1,"175":1}}],["x",{"0":{"826":1},"2":{"102":1,"222":1,"620":1,"986":2,"1695":2,"1696":1,"1732":1,"1836":1}}],["x26",{"2":{"67":2,"672":2,"1258":4,"1276":6,"1286":2,"1294":4,"1296":2,"1326":2,"1332":4,"1333":2,"1360":2,"1529":2,"1538":2}}],["xmlschema",{"2":{"197":1}}],["xmlns",{"2":{"197":1}}],["xmlns=",{"2":{"197":1}}],["xml",{"0":{"167":1,"226":1,"267":1,"318":1,"333":1,"374":1,"409":1,"413":1,"452":1,"546":1,"680":1,"761":1,"763":1},"1":{"268":1,"269":1,"270":1,"319":1,"320":1},"2":{"32":2,"33":1,"195":1,"197":2,"226":1,"263":3,"264":2,"268":1,"269":1,"270":1,"272":1,"279":1,"280":1,"319":1,"320":2,"322":1,"323":1,"325":1,"326":1,"330":3,"331":2,"333":2,"335":1,"336":1,"337":1,"374":2,"381":1,"386":1,"396":1,"409":1,"413":2,"414":1,"437":2,"444":1,"445":3,"478":1,"546":2,"549":1,"551":6,"561":1,"612":1,"632":2,"680":1,"747":3,"752":3,"753":2,"754":3,"759":1,"761":1,"763":1,"774":3,"835":1,"836":1,"843":3,"844":2,"904":1,"905":1,"906":1,"909":1,"923":1,"927":1,"928":1,"929":1,"936":1,"984":1}}],["x3c",{"2":{"0":8,"149":2,"154":1,"156":3,"162":1,"172":2,"178":7,"179":2,"195":8,"197":46,"199":10,"228":3,"250":1,"268":8,"269":8,"270":4,"272":26,"279":12,"280":20,"293":1,"294":1,"299":1,"300":1,"301":1,"305":3,"308":1,"309":1,"310":1,"311":2,"313":2,"317":6,"320":6,"322":6,"323":2,"325":8,"326":4,"332":3,"333":6,"335":2,"336":2,"337":2,"390":3,"400":2,"412":3,"413":6,"417":4,"418":7,"421":2,"477":1,"540":2,"543":1,"545":3,"546":6,"570":2,"593":3,"594":2,"600":2,"601":3,"609":4,"610":2,"612":8,"619":3,"622":3,"632":1,"633":5,"636":1,"648":3,"649":2,"663":2,"675":6,"696":1,"704":3,"707":3,"708":6,"728":2,"729":1,"753":6,"759":12,"799":3,"818":1,"835":8,"836":8,"846":3,"859":2,"883":2,"888":2,"891":1,"894":3,"904":6,"905":6,"906":6,"927":8,"928":6,"929":8,"950":2,"958":1,"1006":3,"1007":4,"1011":5,"1015":3,"1016":3,"1020":5,"1027":11,"1029":2,"1035":5,"1036":5,"1040":5,"1043":2,"1044":2,"1063":5,"1072":6,"1097":5,"1112":5,"1119":5,"1126":5,"1140":5,"1151":2,"1157":2,"1219":2,"1250":10,"1304":1,"1352":2,"1385":2,"1387":2,"1388":2,"1389":2,"1399":5,"1409":2,"1419":2,"1428":13,"1454":2,"1463":10,"1464":7,"1480":2,"1534":1,"1537":6,"1558":3,"1570":7,"1572":2,"1573":2,"1574":2,"1583":9,"1588":5,"1591":3,"1592":3,"1593":5,"1594":10,"1600":15,"1609":21,"1613":2,"1635":2,"1637":2,"1643":2,"1646":8,"1648":8,"1649":4,"1712":1,"1717":11,"1720":2,"1722":5,"1723":5,"1724":2,"1725":2,"1727":8,"1728":2,"1731":1,"1836":1,"1837":8,"1844":3,"1845":5,"1855":2,"1860":5,"1882":6,"1883":6,"1884":2,"1885":4,"1887":5,"1920":2,"1921":2,"1945":3,"1949":3,"1969":3,"1973":19,"1974":5,"1981":3,"1983":3,"1989":15,"1990":3,"1997":3,"1999":3,"2003":3,"2005":5,"2006":3,"2009":3,"2014":3,"2062":4,"2078":10,"2120":5,"2177":1,"2222":2,"2224":2,"2225":8,"2226":2,"2333":2}}],["데이터는",{"2":{"1239":1,"1251":1,"1252":1,"1479":1,"2293":1,"2294":1}}],["데이터소스",{"0":{"252":1,"837":1},"1":{"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"838":1},"2":{"245":1,"285":1,"439":1,"520":1,"554":1,"616":1,"618":1,"628":1,"770":1}}],["데이터로",{"2":{"224":1,"671":1}}],["데이터의",{"2":{"224":1,"671":1,"1208":1,"2109":1}}],["데이터가",{"2":{"121":1,"123":1,"1282":1,"1289":1,"1348":1,"1353":1,"2292":1}}],["데이터도",{"2":{"77":1}}],["데이터",{"0":{"56":1,"57":1,"58":1,"94":1,"178":1,"311":1,"707":1,"1240":1,"1250":1,"1315":1,"1318":1,"1327":1,"1339":1,"1347":1,"1773":1,"1985":1,"2226":1,"2293":1},"1":{"59":1,"1986":1,"1987":1},"2":{"45":1,"46":1,"56":1,"76":4,"87":1,"94":1,"121":1,"179":1,"199":1,"210":1,"211":1,"213":1,"214":1,"224":1,"286":1,"430":1,"587":1,"622":1,"632":1,"634":2,"656":1,"671":2,"704":1,"707":1,"708":1,"798":2,"801":2,"849":1,"882":1,"883":1,"985":1,"1026":1,"1033":1,"1034":1,"1045":1,"1127":1,"1215":1,"1216":1,"1217":1,"1240":1,"1248":1,"1252":1,"1272":1,"1305":1,"1339":1,"1404":1,"1426":1,"1444":3,"1445":5,"1449":1,"1532":1,"1548":1,"1555":1,"1609":2,"1618":1,"1658":1,"1675":1,"1720":1,"1762":1,"1764":2,"1767":1,"1770":3,"1773":1,"1777":1,"1794":1,"1797":1,"1914":2,"1915":1,"1978":2,"1981":1,"1986":1,"2003":2,"2005":1,"2007":1,"2109":1,"2118":1,"2123":1,"2128":1,"2163":1,"2194":1,"2218":1,"2231":1,"2232":1,"2233":1,"2258":2,"2261":1,"2262":1,"2287":3,"2288":1,"2292":2,"2294":2}}],["데이터를",{"2":{"32":1,"178":1,"224":1,"671":1,"801":1,"985":1,"1045":1,"1217":1,"1239":1,"1242":1,"1247":1,"1252":1,"1318":1,"1350":2,"1406":1,"1442":1,"1447":1,"1451":1,"1974":1,"1986":1,"1987":1,"1990":1,"2098":1,"2194":1,"2233":1,"2261":1,"2284":1,"2287":1,"2288":1,"2291":1,"2292":1}}],["데이터에서",{"2":{"31":1}}],["데이터베이스에",{"2":{"1606":1,"1621":1}}],["데이터베이스에서",{"2":{"839":1}}],["데이터베이스별",{"2":{"754":1}}],["데이터베이스와",{"2":{"328":1}}],["데이터베이스마다",{"2":{"263":1,"330":1,"843":1}}],["데이터베이스를",{"2":{"252":1,"832":2}}],["데이터베이스",{"0":{"27":1,"253":1,"276":1,"306":1,"390":1,"427":1,"461":1,"479":1,"480":1,"510":1,"832":1,"833":1,"996":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"462":1,"463":1,"464":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"833":1,"834":2,"835":2,"836":2,"837":1,"838":1,"839":1,"840":1,"841":1,"842":1,"843":1,"844":1,"845":1,"846":1,"847":1,"848":1,"849":1,"850":1,"851":1,"852":1},"2":{"27":1,"130":1,"141":1,"145":1,"210":1,"252":1,"253":1,"259":1,"303":1,"312":1,"372":1,"381":1,"397":1,"425":1,"427":4,"461":1,"469":1,"472":1,"480":1,"481":1,"510":1,"514":1,"515":1,"516":2,"518":1,"519":1,"579":1,"618":2,"633":1,"834":1,"836":1,"838":1,"846":1,"852":1,"909":1,"937":1,"996":2}}],["번역",{"2":{"1880":1,"1882":1}}],["번에",{"2":{"43":1,"1031":1,"1245":1}}],["번째",{"0":{"1716":1},"1":{"1717":1,"1718":1,"1719":1},"2":{"31":1,"119":1,"123":1,"1261":1,"1717":1,"1759":1,"1790":1}}],["번호를",{"2":{"1747":1}}],["번호",{"2":{"31":1,"45":1,"66":1,"67":1,"731":1,"740":1}}],["행별",{"2":{"2014":1}}],["행",{"2":{"31":1,"1071":3,"2015":2,"2099":1,"2119":1,"2261":1}}],["순위로",{"2":{"216":1}}],["순차적으로",{"2":{"31":1}}],["순서를",{"2":{"1098":1}}],["순서와",{"2":{"51":1,"665":1}}],["순서는",{"2":{"51":1,"665":1}}],["순서",{"0":{"676":1,"796":1},"2":{"17":1,"45":2,"51":1,"665":1,"675":1,"681":1,"798":1,"803":1,"974":1,"985":1,"1096":1}}],["일",{"2":{"2253":1}}],["일`",{"2":{"2224":1}}],["일수",{"2":{"2209":1,"2210":2,"2243":1,"2303":1}}],["일수를",{"2":{"2209":1,"2242":1,"2303":1}}],["일별로",{"2":{"564":1}}],["일관성",{"2":{"432":2,"1164":1,"1563":1}}],["일관된",{"2":{"384":1,"393":1,"632":1,"1563":1}}],["일부",{"2":{"90":2}}],["일시적인",{"2":{"1304":1,"1306":1,"1534":1,"1539":1}}],["일시",{"2":{"66":2,"734":1,"735":1}}],["일반적으로",{"2":{"1263":1,"1320":1}}],["일반적인",{"0":{"994":1,"2170":1,"2176":1,"2183":1},"1":{"995":1,"996":1,"997":1,"998":1,"2171":1,"2172":1,"2173":1,"2174":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2184":1,"2185":1,"2186":1,"2187":1},"2":{"522":1,"1339":1,"1784":2,"2269":1}}],["일반",{"0":{"76":1,"106":1,"186":1,"714":1,"1211":1},"2":{"33":1,"77":1,"96":1,"179":1,"632":1,"708":1,"1315":1,"1566":1,"1577":1,"1578":1,"1794":1,"1936":1}}],["일괄",{"0":{"31":1}}],["일치하는",{"2":{"121":1,"123":1,"1358":1}}],["일치하지",{"2":{"23":2}}],["일치해야",{"2":{"30":1,"51":1,"665":1}}],["일치",{"2":{"17":1,"24":1,"386":1}}],["메타",{"0":{"1362":1},"2":{"1362":1}}],["메타데이터",{"2":{"557":1,"1687":1,"1817":1,"2038":1}}],["메커니즘",{"0":{"1256":1}}],["메인",{"0":{"1084":1},"1":{"1085":1,"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1},"2":{"439":1,"549":1,"554":1,"568":1,"1086":1,"1088":1,"1359":1,"1373":1,"1661":1,"1678":2,"1769":2,"1779":1,"1797":1,"1817":1,"1857":1,"1864":1,"1895":1,"1934":1,"1938":1,"1994":1}}],["메서드명",{"2":{"449":1}}],["메서드",{"0":{"248":1,"348":1,"1241":1},"1":{"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1},"2":{"162":1,"219":1,"393":1,"500":1,"600":1,"601":1,"602":1,"632":1,"633":1,"634":1,"635":1,"636":1,"649":1,"678":1,"698":1,"729":1,"862":1}}],["메서드를",{"2":{"139":1,"348":1}}],["메일",{"0":{"169":1,"589":1,"683":1,"695":1},"1":{"170":1,"171":1,"172":1,"173":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":2,"697":1,"698":1,"699":1,"700":1},"2":{"159":1,"275":1,"429":1,"439":1,"517":1,"554":1,"568":1,"577":1,"589":3,"630":1,"666":1,"684":3,"686":2,"687":1,"688":1,"698":1,"700":1}}],["메뉴를",{"2":{"1094":1,"1407":1,"1604":1,"1626":1,"1719":1}}],["메뉴의",{"2":{"1073":1,"1098":1,"1370":1,"1437":1,"1456":1}}],["메뉴명",{"2":{"120":1,"121":2}}],["메뉴2",{"2":{"120":1}}],["메뉴는",{"2":{"87":1}}],["메뉴1",{"2":{"76":1,"120":1}}],["메뉴",{"0":{"1065":1,"1070":1,"1071":1,"1073":1,"1092":1,"1107":1,"1113":1,"1114":1,"1120":1,"1347":1,"1350":1,"1401":1,"1436":1,"1605":1,"1606":1,"1607":1,"1620":1,"1621":1,"1622":1,"1719":1,"2016":1},"1":{"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1093":1,"1094":1,"1095":1,"1096":1,"1097":1,"1098":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1113":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1121":1,"1402":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1437":1,"1438":1,"1439":1,"1440":1,"1606":1,"1607":1,"1621":1,"1622":1,"2017":1,"2018":1,"2019":1},"2":{"76":4,"77":1,"87":1,"120":2,"1067":1,"1088":2,"1089":1,"1096":2,"1109":1,"1111":3,"1113":3,"1116":1,"1118":3,"1120":2,"1121":1,"1345":1,"1348":1,"1350":3,"1353":2,"1354":1,"1369":1,"1402":1,"1404":3,"1406":1,"1409":1,"1416":1,"1418":2,"1439":2,"1440":2,"1468":2,"1469":2,"1475":1,"1582":1,"1604":1,"1606":5,"1619":1,"1621":4,"1626":1,"1675":1,"1682":1,"1762":2,"1767":2,"1772":2,"1817":1,"1880":1,"1909":1,"1913":7,"1923":1,"1994":1,"2014":3,"2017":4,"2018":2,"2019":2,"2029":1,"2031":1,"2034":1,"2099":1,"2119":1,"2123":1,"2137":1}}],["메시지가",{"2":{"1288":1,"1298":1}}],["메시지입니다",{"2":{"67":1,"742":1}}],["메시지를",{"2":{"62":1,"65":1,"1264":1,"1302":1,"1306":1,"1536":1,"1539":1,"1885":1}}],["메시지는",{"2":{"37":1,"1288":1}}],["메시지",{"0":{"65":1,"70":1,"736":1,"738":1,"1301":1,"1533":1,"1536":1,"1885":1},"1":{"66":1,"67":1,"737":1,"1302":1,"1303":1},"2":{"30":1,"34":2,"57":1,"65":1,"66":2,"67":1,"71":1,"78":1,"98":1,"137":1,"352":1,"403":1,"541":1,"613":1,"725":1,"728":1,"729":1,"731":1,"744":1,"1298":2,"1306":1,"1339":1,"1533":1,"1539":1,"1555":1,"1879":2,"1880":2,"1885":3,"1949":1}}],["메모리에만",{"2":{"1236":1,"1390":1,"2168":1}}],["메모리",{"0":{"2174":1},"2":{"19":1,"84":1,"471":1,"810":1,"964":1,"1226":1,"2174":1}}],["요소",{"0":{"1088":1},"2":{"942":1}}],["요구사항을",{"2":{"1710":1}}],["요구사항",{"0":{"457":1,"458":1,"467":1,"470":1,"1693":1,"1702":1,"1705":1},"1":{"458":1,"459":2,"460":2,"461":2,"462":2,"463":2,"464":2,"465":2,"466":2,"467":1,"468":2,"469":2,"470":1,"471":2,"472":2,"473":1,"474":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":2,"1704":2,"1705":1,"1706":2,"1707":2,"1708":1,"1709":1,"1710":1},"2":{"435":1,"515":1,"1665":1,"1758":2}}],["요구하는",{"2":{"30":1,"76":1}}],["요약",{"0":{"433":1,"1655":1},"1":{"1656":1,"1657":1,"1658":1},"2":{"862":1}}],["요청한",{"2":{"1536":1}}],["요청입니다",{"2":{"1526":1,"1536":1}}],["요청만",{"2":{"1261":1}}],["요청이",{"2":{"1261":1,"1271":1,"1287":1,"1309":1,"1411":1}}],["요청은",{"2":{"970":1}}],["요청에",{"2":{"216":1,"230":1,"671":1,"681":1,"798":1,"974":1,"985":1}}],["요청",{"0":{"82":1,"139":1,"349":1,"816":1,"1210":1,"1211":1,"1230":1,"1259":1,"1260":1,"1261":1,"1271":1,"1308":1,"1314":1,"1336":1,"1337":1,"1526":1,"1549":1,"1550":1,"1551":1,"2187":1},"1":{"1211":1,"1212":1,"1272":1,"1273":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1550":1,"1551":2,"1552":2,"1553":1,"1554":1,"1555":1,"1556":1},"2":{"9":1,"17":1,"30":1,"31":1,"32":1,"33":1,"34":1,"43":1,"46":1,"56":1,"57":1,"65":1,"76":2,"77":1,"78":1,"79":1,"80":1,"87":1,"92":1,"99":1,"100":1,"101":1,"102":1,"119":1,"120":1,"121":1,"138":1,"139":1,"216":2,"224":3,"379":1,"393":1,"586":1,"587":1,"607":1,"622":1,"667":1,"670":3,"671":4,"673":2,"731":1,"732":3,"798":1,"801":3,"804":1,"864":1,"975":1,"985":1,"1208":1,"1211":1,"1222":1,"1226":1,"1230":1,"1264":1,"1267":1,"1270":2,"1272":2,"1276":2,"1278":2,"1282":1,"1289":2,"1290":1,"1295":1,"1300":1,"1309":1,"1317":1,"1319":1,"1320":2,"1337":1,"1343":1,"1416":2,"1418":2,"1515":2,"1526":1,"1540":1,"1672":1,"1763":2,"1764":1,"1773":1,"1797":1,"1804":1,"1862":1,"1942":1,"2068":1,"2094":1,"2095":1,"2109":1,"2161":1,"2162":1,"2234":1}}],["요청을",{"2":{"9":1,"795":1,"806":1,"1264":1}}],["함수가",{"2":{"2300":1,"2306":1,"2310":1}}],["함수는",{"2":{"2295":1,"2306":1,"2309":1}}],["함수에서",{"2":{"1905":1}}],["함수들을",{"2":{"2200":1}}],["함수들",{"2":{"1855":1,"2079":1}}],["함수들이",{"2":{"1820":1,"1871":1,"2298":1}}],["함수들입니다",{"2":{"1770":1,"1868":1,"2190":1,"2229":1,"2237":1,"2256":1,"2265":1,"2272":1,"2298":1,"2313":1,"2327":1}}],["함수들은",{"2":{"1725":1,"1873":1,"2200":1,"2222":1}}],["함수와",{"2":{"1673":1}}],["함수명",{"0":{"1578":1}}],["함수를",{"2":{"1538":1,"2308":1,"2310":1}}],["함수입니다",{"2":{"1356":1,"2302":1}}],["함수",{"0":{"212":1,"791":1,"979":1,"1036":1,"1214":1,"1538":1,"1566":1,"1725":1,"1770":1,"1787":1,"2032":1,"2033":1,"2156":1,"2191":1,"2202":1,"2203":1,"2206":1,"2211":1,"2213":1,"2215":1,"2217":1,"2219":1,"2230":1,"2238":1,"2257":1,"2266":1,"2273":1,"2286":1,"2301":1,"2306":1,"2308":1,"2314":1,"2328":1},"1":{"213":1,"214":1,"792":1,"793":1,"980":1,"981":1,"1215":1,"1216":1,"1217":1,"2033":1,"2034":1,"2035":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2203":1,"2204":2,"2205":2,"2206":1,"2207":2,"2208":2,"2209":2,"2210":2,"2211":1,"2212":2,"2213":1,"2214":2,"2215":1,"2216":2,"2217":1,"2218":2,"2219":1,"2220":2,"2221":2,"2231":1,"2232":1,"2233":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1,"2246":1,"2247":1,"2248":1,"2249":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":1,"2274":1,"2275":1,"2276":1,"2277":1,"2278":1,"2279":1,"2280":1,"2281":1,"2287":1,"2288":1,"2289":1,"2290":1,"2291":1,"2292":1,"2302":1,"2303":1,"2304":1,"2305":1,"2315":1,"2316":1,"2317":1,"2318":1,"2319":1,"2320":1,"2329":1,"2330":1,"2331":1,"2332":1},"2":{"1033":1,"1059":1,"1060":1,"1199":1,"1566":2,"1578":2,"1613":1,"1653":1,"1667":1,"1674":1,"1691":1,"1770":10,"1781":1,"1782":1,"1785":2,"1817":1,"1855":1,"1858":2,"1865":2,"1871":1,"1905":1,"1986":1,"2292":1,"2308":1}}],["함께",{"2":{"43":1,"1212":1,"1284":1,"1316":1,"1468":1,"1696":1}}],["함",{"2":{"30":1,"56":1,"665":2,"681":1,"723":1,"1236":1,"1297":2,"1338":1,"1527":1,"1732":1}}],["입력해주세요",{"2":{"2204":1,"2226":2,"2333":2}}],["입력을",{"2":{"983":1}}],["입력",{"0":{"1012":1,"1016":1,"1998":1},"1":{"1013":1,"1014":1,"1015":1,"1016":1,"1999":1},"2":{"30":1,"71":1,"213":1,"214":1,"744":1,"872":1,"873":1,"1016":1,"1682":1,"1766":2,"1797":1,"1899":1,"1999":1,"2141":1}}],["실제",{"0":{"388":1,"1028":1},"2":{"44":1,"45":2,"48":1,"77":1,"651":1,"654":1,"663":1,"1195":1,"1713":1,"1715":1}}],["실행까지",{"2":{"1759":1}}],["실행이",{"2":{"1701":1}}],["실행됩니다",{"2":{"1309":1,"1323":1,"1357":1,"1361":1,"1736":1,"1741":1}}],["실행되는",{"2":{"1271":1,"1274":1,"1356":1}}],["실행되어야",{"2":{"71":1,"681":1,"744":1}}],["실행을",{"2":{"162":1}}],["실행합니다",{"2":{"31":1,"1733":1,"1736":1,"2292":1}}],["실행할",{"2":{"30":1,"31":1,"1060":1,"2292":1}}],["실행하고",{"2":{"30":1}}],["실행",{"0":{"30":1,"31":1,"487":1,"498":1,"499":1,"502":1,"503":1,"676":1,"796":1,"1488":1,"1714":1,"1736":1,"2152":1,"2158":1},"1":{"488":1,"489":1,"499":1,"500":2,"501":2,"502":1,"503":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1},"2":{"80":1,"216":1,"385":1,"488":1,"489":1,"496":1,"500":1,"502":1,"510":1,"511":1,"564":1,"633":1,"798":1,"985":1,"996":1,"997":1,"1058":1,"1103":1,"1733":1,"1748":2,"1783":1}}],["실패해요",{"0":{"2059":1}}],["실패합니다",{"2":{"123":1}}],["실패했습니다",{"2":{"67":1,"1609":1}}],["실패하면",{"2":{"31":1}}],["실패",{"0":{"137":1,"352":1,"403":1,"510":1,"511":1,"996":1,"997":1,"1262":1,"1294":1,"1525":1,"2181":1,"2187":1},"2":{"9":1,"17":1,"23":2,"30":1,"31":1,"45":2,"46":2,"67":3,"70":1,"76":1,"119":2,"120":1,"121":1,"138":2,"421":1,"541":1,"610":1,"613":1,"632":2,"651":1,"699":1,"738":1,"859":1,"864":1,"996":1,"997":1,"1029":1,"1264":1,"1276":1,"1279":1,"1294":1,"1337":1,"1339":1,"1341":1,"1387":1,"1390":1,"1516":1,"1523":2,"1525":2,"1554":1,"1555":1,"2057":1,"2163":1,"2165":1,"2166":1,"2178":1,"2180":1}}],["단위",{"0":{"991":1,"2153":1},"1":{"992":1,"993":1,"2154":1,"2155":1,"2156":1,"2157":1,"2158":1},"2":{"562":1,"991":1,"1782":1,"2154":1,"2212":1,"2275":1,"2276":1,"2277":1}}],["단어",{"2":{"449":1}}],["단일",{"0":{"30":1},"2":{"30":1,"1024":1}}],["단계별",{"2":{"397":1}}],["단계",{"0":{"13":1,"26":1,"39":1,"52":1,"61":1,"72":1,"88":1,"115":1,"124":1,"128":1,"145":1,"151":1,"159":1,"168":1,"173":1,"201":1,"206":1,"231":1,"245":1,"251":1,"265":1,"285":1,"302":1,"314":1,"327":1,"338":1,"342":1,"345":1,"353":1,"359":1,"363":1,"397":1,"404":1,"410":1,"415":1,"419":1,"423":1,"435":1,"456":1,"474":1,"512":1,"547":1,"566":1,"596":1,"614":1,"628":1,"644":1,"666":1,"682":1,"700":1,"724":1,"745":1,"766":1,"771":1,"775":1,"794":1,"807":1,"819":1,"831":1,"852":1,"874":1,"899":1,"937":1,"959":1,"987":1,"990":1,"993":1,"998":1,"1002":1,"1619":1,"1665":1,"1692":1,"1710":1,"1729":1,"1750":1,"1790":1,"1831":1,"2116":1}}],["프라이빗",{"2":{"1577":1}}],["프랙티스",{"0":{"1306":1,"1539":1,"1610":1},"1":{"1611":1,"1612":1,"1613":1,"1614":1,"1615":1}}],["프록시합니다",{"2":{"1494":1}}],["프록시는",{"2":{"1195":1}}],["프록시됩니다",{"2":{"1191":1,"1192":1,"1193":1}}],["프록시",{"0":{"1186":1,"1189":1,"1190":1,"1494":1},"1":{"1187":1,"1188":1,"1189":1,"1190":1,"1191":2,"1192":2,"1193":2,"1194":1,"1195":1},"2":{"1187":1,"1688":1,"1780":2,"2160":1,"2187":1}}],["프론트엔드",{"2":{"493":1,"1652":2,"1756":1}}],["프레임워크로",{"2":{"2140":1}}],["프레임워크와",{"2":{"900":1}}],["프레임워크에서",{"2":{"517":1}}],["프레임워크는",{"2":{"432":1}}],["프레임워크입니다",{"2":{"425":1,"514":1,"1652":1}}],["프레임워크의",{"2":{"389":1}}],["프레임워크",{"0":{"141":1,"389":1,"439":1,"554":1,"567":1,"900":1,"1656":1,"1657":1,"2074":1,"2139":1,"2150":1,"2155":1},"1":{"390":1,"391":1,"392":1,"568":1,"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"596":1,"901":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1,"2101":1,"2102":1,"2103":1,"2104":1,"2105":1,"2106":1,"2107":1,"2108":1,"2109":1,"2110":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2116":1,"2140":1,"2141":1,"2142":1,"2143":1},"2":{"124":1,"128":1,"130":1,"145":1,"398":1,"431":1,"432":1,"433":1,"434":1,"437":1,"444":1,"454":1,"456":1,"516":2,"519":1,"521":1,"551":2,"566":1,"745":1,"752":1,"909":1,"1653":1,"1661":1,"1678":1,"1777":3,"1817":1,"1822":1,"1864":1,"1891":1,"1897":1,"2116":1,"2150":1,"2155":1}}],["프로그램",{"2":{"1699":1}}],["프로덕션",{"0":{"1173":1,"1184":1,"1502":1,"1740":1},"1":{"1503":1,"1504":1,"1505":1,"1506":1,"1507":1},"2":{"1179":1,"1195":1,"1236":1,"1252":1,"1485":1,"1487":3,"1507":1,"1653":1,"1735":1,"1783":2,"2082":1}}],["프로퍼티",{"2":{"630":1}}],["프로파일",{"0":{"271":1,"272":1,"273":1},"1":{"272":1,"273":1},"2":{"452":1,"502":1,"520":1}}],["프로젝트명",{"2":{"1654":1}}],["프로젝트에서는",{"2":{"1514":1}}],["프로젝트에서",{"2":{"519":1,"521":1,"1022":1,"1267":1,"1756":1,"1761":1,"1777":1,"1781":1}}],["프로젝트에",{"2":{"462":1,"834":1,"1709":1,"1790":1}}],["프로젝트는",{"2":{"461":1,"473":1,"480":1,"1159":1,"1178":1,"1197":1,"1208":1,"1224":1,"1345":1,"1586":1,"1652":1,"1659":1,"1709":1,"1735":1,"1743":1,"1744":1,"1829":1,"2061":1,"2077":1,"2079":1,"2122":1,"2140":1}}],["프로젝트의",{"2":{"388":1,"436":1,"475":1,"548":1,"1661":1,"1669":1,"1762":1,"1778":1,"1782":1,"1824":1,"1857":1,"1928":1,"2154":1,"2175":1}}],["프로젝트를",{"2":{"339":1,"435":1,"500":1,"501":1,"1665":1,"1708":1,"1711":1}}],["프로젝트",{"0":{"424":1,"432":1,"434":1,"436":1,"476":1,"477":1,"478":1,"495":1,"1651":1,"1652":1,"1654":1,"1659":1,"1666":1,"1712":1,"1731":1,"1758":1,"1778":1,"1816":1},"1":{"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"477":1,"478":1,"496":1,"497":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":1},"2":{"201":1,"435":1,"456":1,"496":1,"512":1,"515":3,"523":1,"1163":1,"1164":1,"1563":1,"1665":1,"1667":2,"1687":1,"1690":1,"1692":1,"1707":1,"1713":1,"1731":1,"1732":1,"1733":1,"1734":1,"1749":1,"1750":1,"1756":1,"1758":3,"1770":1,"1783":1,"1785":1,"1816":2,"1820":1,"1868":1,"1993":1,"2038":1,"2041":1,"2179":1,"2200":1}}],["프로세스를",{"2":{"2177":1}}],["프로세스",{"0":{"81":1,"176":1,"366":1,"650":1,"706":1,"730":1,"1257":1,"1797":1},"1":{"82":1,"83":1,"84":1,"85":1,"86":1,"177":1,"178":1,"179":1,"180":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"651":1,"652":1,"707":1,"708":1,"709":1,"710":1,"731":1,"732":1,"1258":1,"1259":1,"1260":1},"2":{"2177":1}}],["프로시저명",{"2":{"94":1,"1418":1}}],["프로시저는",{"2":{"87":1}}],["프로시저가",{"2":{"38":1}}],["프로시저에서",{"2":{"30":2,"36":1,"76":1,"105":1,"185":1,"713":1}}],["프로시저를",{"2":{"27":1,"30":1,"31":1,"33":1,"178":1,"846":1,"1517":1}}],["프로시저",{"0":{"27":1,"30":1,"31":1,"33":1,"35":1,"80":1,"321":1,"334":1,"418":1,"593":1,"845":1,"846":1,"847":1,"1517":1,"1552":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":2,"37":2,"38":1,"39":1,"322":1,"323":1,"335":1,"336":1,"337":1,"846":1,"847":1},"2":{"30":4,"31":3,"32":2,"33":3,"38":1,"46":1,"76":3,"80":2,"87":3,"94":1,"141":1,"304":1,"314":1,"327":1,"380":1,"385":1,"390":1,"417":1,"516":1,"518":1,"573":1,"623":1,"630":3,"633":5,"649":1,"651":1,"652":1,"707":1,"731":1,"769":1,"909":1}}],["프롬프트",{"2":{"9":1}}],["불러오고",{"2":{"2292":1}}],["불러오기",{"2":{"1444":1,"1445":1,"2294":1}}],["불러올",{"2":{"2288":1}}],["불러옵니다",{"2":{"2288":1}}],["불가",{"2":{"25":1}}],["불필요",{"2":{"25":1,"28":1,"670":1}}],["다크",{"2":{"1901":1}}],["다국어",{"2":{"1865":1,"1876":1,"1877":1,"1879":1}}],["다른",{"0":{"1468":1},"2":{"509":1,"514":1,"1176":1,"1178":1,"1491":1,"1715":1,"1747":1,"1756":1,"2177":1}}],["다르므로",{"2":{"243":1,"494":1}}],["다양한",{"2":{"175":1,"208":1,"246":1,"425":1,"784":1,"875":1,"945":1,"960":1,"1022":1,"1275":1,"1292":1,"1652":1,"1653":1,"1659":1,"1674":1,"2073":1,"2082":1,"2103":1}}],["다릅니다",{"2":{"87":1}}],["다운로드합니다",{"2":{"46":1,"102":1,"2218":1,"2258":1,"2267":1}}],["다운로드",{"0":{"46":1,"102":1,"156":1,"183":1,"477":1,"496":1,"652":1,"664":1,"722":1,"893":1,"1281":1,"1326":1,"1342":1,"1519":1,"1541":1,"1545":1,"1548":1,"2269":1},"1":{"894":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":2,"1547":2,"1548":1},"2":{"46":2,"50":1,"152":1,"429":2,"488":1,"517":1,"630":1,"645":1,"648":1,"649":1,"661":1,"704":1,"1071":2,"1275":1,"1435":1,"1770":2,"1773":1,"2023":1,"2111":1,"2129":1,"2269":1}}],["다운로드를",{"2":{"40":1,"588":1}}],["다중",{"0":{"31":1,"32":1,"43":1,"427":1},"1":{"44":1,"45":1},"2":{"252":1,"514":1,"520":1,"618":1,"619":1,"648":1,"909":1,"1031":1,"1762":1,"2003":1,"2007":1,"2015":1}}],["다시",{"2":{"25":1,"1262":1,"1276":1,"1286":1,"1296":1,"1333":1,"1337":1,"1529":1,"1536":1,"1748":1,"2166":1,"2181":1}}],["다음으로",{"2":{"1358":1}}],["다음을",{"2":{"367":1,"1733":1}}],["다음과",{"2":{"130":1,"432":1,"505":1,"1348":1,"1370":1,"1607":1,"1622":1,"1659":1,"1829":1,"1957":1,"1973":1,"1989":1}}],["다음",{"0":{"13":1,"26":1,"39":1,"52":1,"61":1,"72":1,"88":1,"115":1,"124":1,"128":1,"145":1,"151":1,"159":1,"168":1,"173":1,"201":1,"206":1,"231":1,"245":1,"251":1,"265":1,"285":1,"302":1,"314":1,"327":1,"338":1,"342":1,"345":1,"353":1,"359":1,"363":1,"397":1,"404":1,"410":1,"415":1,"419":1,"423":1,"435":1,"456":1,"474":1,"512":1,"547":1,"566":1,"596":1,"614":1,"628":1,"644":1,"666":1,"682":1,"700":1,"724":1,"745":1,"766":1,"771":1,"775":1,"794":1,"807":1,"819":1,"831":1,"852":1,"874":1,"899":1,"937":1,"959":1,"987":1,"990":1,"993":1,"998":1,"1002":1,"1619":1,"1665":1,"1692":1,"1710":1,"1729":1,"1750":1,"1790":1,"1831":1,"2116":1},"2":{"23":1,"113":1,"122":1,"135":1,"264":1,"331":1,"393":1,"435":1,"448":1,"455":1,"456":1,"461":1,"466":1,"473":1,"474":1,"480":1,"497":1,"506":1,"507":1,"512":1,"541":1,"857":1,"866":1,"889":1,"986":1,"1587":1,"1619":1,"1665":1,"1692":1,"1700":1,"1701":1,"1707":1,"1708":1,"1710":1,"1713":1,"1729":1,"1733":1,"1735":1,"1750":1,"1831":1,"1922":1,"2116":1}}],["위험한",{"2":{"798":1,"985":1}}],["위한",{"0":{"515":1,"1757":1},"1":{"1758":1,"1759":1,"1760":1},"2":{"303":1,"304":1,"307":1,"425":1,"514":1,"904":1,"1042":1,"1062":1,"1075":1,"1129":1,"1706":1,"1711":1,"1744":1,"2098":1}}],["위해",{"2":{"25":1,"665":1,"1178":1,"1264":1,"1317":1,"1700":1,"1704":1,"2073":1,"2103":1,"2109":1,"2300":1}}],["위치와",{"2":{"772":1,"999":1}}],["위치합니다",{"2":{"746":1,"750":1,"752":1,"754":1,"756":1,"759":1,"1673":1,"1675":1,"1676":1,"1677":1,"1683":1,"1684":1,"1685":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1833":1,"1839":1,"1864":1,"1865":1,"1876":1,"1890":1,"1908":1,"1925":1}}],["위치하는",{"2":{"560":1,"1669":1,"1857":1}}],["위치에",{"2":{"113":1,"507":1,"889":1}}],["위치",{"0":{"112":1,"193":1,"233":1,"319":1,"331":1,"414":1,"624":1,"711":1,"719":1,"844":1,"918":1,"1000":1,"1005":1,"1010":1,"1014":1,"1019":1,"1025":1,"1032":1,"1039":1,"1049":1,"1051":1,"1053":1,"1057":1,"1068":1,"1076":1,"1081":1,"1087":1,"1095":1,"1102":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1160":1,"1167":1,"1188":1,"1268":1,"1378":1,"1394":1,"1403":1,"1412":1,"1423":1,"1432":1,"1438":1,"1443":1,"1448":1,"1457":1,"1472":1,"1628":1,"1852":1,"1869":1,"2201":1,"2285":1,"2299":1},"1":{"625":1,"626":1},"2":{"19":1,"20":1,"21":1,"93":1,"177":1,"226":1,"600":1,"601":1,"602":1,"604":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"625":1,"626":1,"632":1,"633":1,"634":1,"635":1,"636":1,"643":2,"648":1,"649":1,"670":1,"671":1,"672":1,"673":1,"675":1,"678":1,"680":1,"686":1,"687":1,"688":1,"704":1,"705":1,"728":1,"729":1,"757":1,"761":1,"763":2,"765":1,"834":1,"887":1,"964":1,"965":1,"1033":1,"1042":1,"1226":1,"1227":1,"1439":1,"1794":1,"1795":1,"1796":1,"1802":1,"1803":1,"1804":1,"1805":1}}],["새이름",{"2":{"716":1}}],["새모듈util",{"2":{"406":1,"455":1}}],["새모듈mapper",{"2":{"406":1,"409":1,"455":1}}],["새모듈service",{"2":{"406":1,"455":1}}],["새모듈controller",{"2":{"406":1,"455":1}}],["새모듈명",{"2":{"362":1,"406":1,"407":1,"408":1,"409":1,"455":1}}],["새커서명",{"2":{"98":1}}],["새",{"0":{"518":1,"1259":1,"1771":1},"1":{"1772":1,"1773":1,"1774":1,"1775":1,"1776":1},"2":{"24":2,"45":1,"99":1,"362":1,"370":2,"371":1,"407":1,"663":1,"1103":1,"1599":1,"1717":1,"1774":1}}],["새로고침",{"2":{"1358":1,"1479":1,"2168":2}}],["새로",{"2":{"17":1}}],["새로운",{"0":{"364":1,"455":1},"1":{"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1},"2":{"17":3,"237":1,"360":1,"364":1,"365":1,"367":1,"389":1,"393":1,"394":1,"395":1,"396":1,"405":1,"455":1,"456":1,"492":1,"515":1,"547":1,"968":1,"1255":1,"1264":1,"1475":1,"1596":1,"1659":1,"1729":1,"1885":1,"1905":1,"1922":1,"2310":1}}],["6121607",{"2":{"1715":1}}],["64",{"2":{"459":1}}],["6단계",{"0":{"375":1}}],["6379",{"2":{"288":2,"472":1,"490":2,"850":2}}],["6",{"0":{"103":1,"498":1,"499":1,"502":1,"503":1,"577":1,"589":1,"623":1,"637":1,"1334":1,"1616":1,"1617":1,"1618":1,"1720":1,"2217":1},"1":{"499":1,"500":2,"501":2,"502":1,"503":1,"638":1,"639":1,"640":1,"641":1,"1617":1,"1618":1,"2218":1},"2":{"24":1,"460":1,"465":1,"885":1,"1027":1,"1613":1,"1648":2,"1658":1,"2072":1,"2102":1}}],["56",{"2":{"2212":4,"2274":4,"2275":2}}],["567",{"2":{"2212":1,"2274":1,"2275":1,"2276":1,"2277":1,"2278":1}}],["5678",{"2":{"1949":1,"1999":1,"2322":1,"2323":1,"2324":1,"2332":1}}],["5를",{"2":{"2140":1}}],["5gb",{"2":{"1704":1}}],["54",{"2":{"1658":1,"2071":1,"2101":1}}],["5432",{"2":{"258":1,"472":1,"484":1,"836":1}}],["5분",{"2":{"743":1}}],["5단계",{"0":{"373":1},"1":{"374":1}}],["59443",{"2":{"239":1}}],["595",{"2":{"197":1}}],["5050에서",{"2":{"1741":1}}],["50",{"2":{"197":1,"256":1,"618":2,"834":1,"840":1}}],["500입니다",{"2":{"1169":1}}],["5000",{"2":{"1168":1,"1203":1}}],["500px",{"2":{"1063":1,"1609":1,"1723":1}}],["500",{"0":{"1528":1},"2":{"138":1,"864":1,"1300":2,"1528":1,"1536":1}}],["555",{"2":{"197":2}}],["587",{"2":{"171":1,"690":1}}],["5173에서",{"2":{"1736":1}}],["5173으로",{"2":{"1492":1,"1714":1}}],["5173",{"2":{"34":1,"239":1,"493":1,"1200":1,"1490":1,"1747":1,"2151":1,"2177":1}}],["5",{"0":{"34":1,"80":1,"86":1,"102":1,"387":1,"431":1,"466":1,"495":1,"496":1,"497":1,"576":1,"583":1,"588":1,"622":1,"636":1,"1298":1,"1315":1,"1333":1,"1486":1,"1610":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":2,"1716":1,"1717":1,"1718":1,"1719":1,"1776":1,"2215":1},"1":{"496":1,"497":1,"1611":1,"1612":1,"1613":1,"1614":1,"1615":1,"1717":1,"1718":1,"1719":1,"2216":1},"2":{"24":1,"56":2,"59":1,"66":1,"269":1,"433":2,"452":1,"460":1,"505":1,"514":1,"601":1,"676":1,"735":1,"743":1,"836":1,"855":1,"877":4,"902":1,"916":1,"920":1,"931":1,"962":1,"1613":1,"1654":2,"1656":3,"1657":1,"1658":1,"2071":1,"2072":1,"2076":1,"2081":1,"2089":1,"2101":1,"2102":1,"2111":1,"2112":1,"2113":1,"2129":1,"2130":1,"2131":1,"2135":1,"2279":1}}],["46",{"2":{"2281":1}}],["4코어",{"2":{"1704":1}}],["419",{"0":{"1258":1,"1294":1,"1332":1,"1525":1},"2":{"1256":1,"1258":1,"1275":1,"1276":1,"1294":1,"1332":1,"1525":1}}],["415",{"2":{"123":1}}],["429",{"0":{"1287":1,"1295":1,"1331":1,"2162":1},"2":{"975":1,"1287":1,"1295":1,"1331":1,"2162":1}}],["4gb",{"2":{"471":1,"1703":1}}],["4단계",{"0":{"372":1}}],["4mo577",{"2":{"211":1,"238":1,"790":1,"978":1}}],["4qlmgnic5llwda9t+p",{"2":{"211":1,"238":1,"790":1,"978":1}}],["403",{"2":{"138":1,"829":1,"1536":1}}],["40",{"2":{"66":2,"67":1,"731":1,"734":1,"735":1}}],["404",{"0":{"1297":1,"1527":1},"2":{"46":1,"119":1,"138":1,"1297":2,"1338":3,"1527":3,"1536":1}}],["400",{"0":{"1526":1},"2":{"46":1,"119":1,"138":1,"864":1,"1300":2,"1526":1,"1536":1}}],["401",{"0":{"23":1,"1258":1,"1294":1,"1332":1,"1525":1,"2057":1},"2":{"17":1,"23":1,"138":1,"421":1,"830":1,"859":1,"864":1,"1256":1,"1258":1,"1261":1,"1275":1,"1276":2,"1294":1,"1332":1,"1525":2,"1536":1,"2165":1,"2181":1}}],["456",{"2":{"45":1,"2281":2}}],["4",{"0":{"33":1,"79":1,"85":1,"101":1,"180":1,"386":1,"409":1,"430":1,"446":1,"465":1,"491":1,"492":1,"493":1,"494":1,"532":1,"575":1,"582":1,"584":1,"585":1,"586":1,"587":1,"621":1,"635":1,"673":1,"710":1,"1297":1,"1314":1,"1332":1,"1485":1,"1608":1,"1609":1,"1614":1,"1715":1,"1775":1,"2213":1},"1":{"492":1,"493":1,"494":1,"585":1,"586":1,"587":1,"1609":1,"2214":1},"2":{"24":1,"433":1,"651":1,"676":1,"908":1,"935":1,"952":1,"956":2,"1613":1,"1654":1,"1656":2,"1658":3,"1752":1,"2081":1,"2089":1,"2105":2,"2108":1,"2112":1,"2114":1,"2127":2,"2128":1,"2130":1,"2132":1,"2135":1}}],["33",{"2":{"1658":1,"2097":2,"2118":1}}],["3의",{"2":{"1653":1,"2077":1}}],["3600",{"2":{"621":1}}],["3단계",{"0":{"369":1,"515":1,"1757":1},"1":{"370":1,"371":1,"1758":1,"1759":1,"1760":1},"2":{"1111":1,"1113":1,"1118":1,"1120":1}}],["300초",{"2":{"1269":1,"1270":1,"2161":1}}],["300px",{"2":{"1035":1}}],["300000",{"2":{"1269":1}}],["3000",{"2":{"493":1,"1537":1}}],["30",{"2":{"66":2,"67":1,"70":1,"197":1,"731":1,"734":1,"735":1,"738":1,"1220":1,"1548":1,"1697":1,"2197":1,"2262":1,"2320":1}}],["3",{"0":{"32":1,"78":1,"84":1,"100":1,"121":1,"179":1,"385":1,"408":1,"429":1,"441":1,"445":1,"453":1,"461":1,"485":1,"486":1,"487":1,"490":1,"494":1,"503":1,"507":1,"511":1,"531":1,"538":1,"556":1,"574":1,"578":1,"579":1,"580":1,"581":2,"582":1,"583":1,"587":1,"602":1,"620":1,"634":1,"672":1,"688":1,"694":1,"709":1,"836":1,"1231":1,"1260":1,"1296":1,"1313":1,"1327":1,"1331":1,"1484":1,"1600":1,"1604":1,"1605":1,"1606":1,"1607":1,"1613":1,"1714":1,"1719":1,"1760":1,"1774":1,"2047":1,"2075":1,"2211":1},"1":{"462":1,"463":1,"464":1,"487":1,"488":2,"489":2,"490":1,"579":1,"580":1,"581":1,"582":1,"583":1,"1606":1,"1607":1,"2076":1,"2077":1,"2078":1,"2079":1,"2212":1},"2":{"24":1,"45":1,"92":1,"95":1,"111":2,"191":1,"229":1,"320":2,"333":2,"413":2,"433":2,"452":1,"460":2,"514":1,"546":2,"651":1,"652":1,"676":1,"731":1,"753":2,"902":1,"908":1,"916":1,"944":1,"1199":1,"1304":1,"1534":1,"1613":1,"1652":1,"1653":1,"1654":2,"1656":2,"1657":1,"1658":2,"1699":1,"1756":1,"1777":1,"1857":1,"2071":1,"2072":1,"2076":1,"2078":1,"2083":1,"2085":2,"2097":2,"2101":1,"2102":1,"2112":1,"2118":1,"2130":1,"2140":1,"2194":2,"2196":1,"2279":2}}],["234",{"2":{"2212":3,"2274":3,"2275":2,"2276":1,"2277":1,"2278":1}}],["2차원",{"2":{"2193":1}}],["2를",{"2":{"2118":1}}],["2gb",{"2":{"1703":1}}],["2코어",{"2":{"1703":1}}],["2칸",{"2":{"1565":1}}],["24",{"2":{"912":1}}],["25",{"2":{"835":1}}],["256",{"0":{"214":1,"793":1,"981":1},"2":{"575":1,"630":1,"641":1}}],["2단계",{"0":{"368":1},"2":{"1111":1,"1113":1,"1118":1,"1120":1}}],["20gb",{"2":{"471":1}}],["2023",{"2":{"459":1,"466":2}}],["2024년",{"2":{"2251":1}}],["20241301",{"2":{"2221":1,"2330":1}}],["20241231",{"2":{"98":1,"1949":1}}],["20240110",{"2":{"2210":1,"2224":1,"2243":1}}],["20240101",{"2":{"66":1,"98":1,"1725":1,"1787":1,"1949":1,"2207":4,"2210":1,"2221":1,"2222":1,"2224":1,"2239":2,"2243":1,"2245":1,"2248":1,"2330":1}}],["20240101120000",{"2":{"66":1,"735":1,"2208":1,"2240":1}}],["2024",{"2":{"33":2,"56":2,"59":1,"98":1,"106":1,"179":1,"186":1,"708":1,"756":1,"1725":1,"2207":4,"2239":2,"2241":1,"2244":2,"2245":1,"2246":1,"2247":1,"2249":1,"2251":1}}],["20",{"2":{"66":2,"67":1,"70":1,"197":7,"471":1,"731":1,"734":1,"735":1,"738":1,"743":1,"841":1,"885":1,"1695":1,"1701":1}}],["200px",{"2":{"1034":1,"1035":1,"1043":1,"1077":1}}],["2000바이트",{"2":{"737":1}}],["2001",{"2":{"197":1}}],["200",{"2":{"17":1,"138":2,"197":3,"421":1,"859":1,"864":1,"1609":1}}],["2",{"0":{"31":1,"46":1,"57":1,"77":1,"83":1,"99":1,"120":1,"178":1,"384":1,"407":1,"428":1,"440":1,"444":1,"449":1,"452":1,"460":1,"469":1,"478":1,"479":1,"480":1,"481":2,"485":1,"490":1,"493":1,"497":1,"502":1,"506":1,"510":1,"530":1,"537":1,"555":1,"571":1,"572":1,"573":2,"574":1,"575":1,"576":1,"577":1,"580":1,"586":1,"601":1,"610":1,"619":1,"633":1,"649":1,"652":1,"671":1,"687":1,"693":1,"705":1,"708":1,"729":1,"732":1,"750":1,"835":1,"1230":1,"1259":1,"1295":1,"1312":1,"1326":1,"1330":1,"1483":1,"1599":1,"1601":1,"1602":1,"1603":2,"1604":1,"1607":1,"1612":1,"1618":1,"1713":1,"1718":1,"1759":1,"1773":1,"2206":1,"2261":1},"1":{"480":1,"481":1,"482":3,"483":3,"484":3,"485":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"1602":1,"1603":1,"1604":1,"2207":1,"2208":1,"2209":1,"2210":1},"2":{"24":1,"30":1,"31":4,"36":2,"45":4,"48":1,"57":1,"66":1,"105":2,"120":1,"121":1,"185":2,"269":1,"433":2,"452":1,"471":1,"505":1,"514":1,"601":1,"651":2,"652":1,"654":1,"676":1,"713":1,"731":1,"735":1,"855":1,"877":2,"881":2,"902":1,"916":1,"920":1,"1534":1,"1574":1,"1613":1,"1648":1,"1654":1,"1656":1,"1658":2,"1697":1,"1722":2,"1723":1,"1879":2,"2071":1,"2085":2,"2097":2,"2101":1,"2108":1,"2111":1,"2112":1,"2115":1,"2128":1,"2129":1,"2130":1,"2133":1,"2193":2,"2194":1,"2196":2,"2204":1,"2212":2,"2261":1,"2274":2,"2281":1}}],["→",{"2":{"24":2,"105":1,"106":1,"185":1,"186":1,"190":1,"191":1,"500":1,"501":1,"651":2,"652":1,"713":1,"731":1,"1194":1,"1361":1,"1370":1,"1607":1,"1622":1,"1847":1,"2305":1}}],["않아요",{"0":{"2055":1,"2058":1}}],["않으면",{"2":{"1358":1,"1359":1}}],["않도록",{"2":{"230":1,"613":1,"1353":1}}],["않습니다",{"2":{"46":1,"60":1,"119":1,"1264":1,"1390":1}}],["않는",{"2":{"23":2,"759":1,"1497":1,"1749":1,"1848":1}}],["않은",{"2":{"23":1,"1389":1}}],["않음",{"0":{"2167":1,"2168":1},"2":{"17":1,"67":1,"563":1,"2167":1,"2177":1,"2179":1}}],["hh",{"2":{"2241":1,"2247":1}}],["h1>내",{"2":{"1717":1}}],["h1>",{"2":{"1594":1,"1717":1,"2078":2}}],["h1>제목",{"2":{"1594":1}}],["hmr",{"0":{"1493":1},"2":{"1490":1,"2082":1}}],["hsts",{"2":{"827":1}}],["highlighted",{"2":{"1752":2}}],["highlighting",{"0":{"1752":1},"2":{"1752":2}}],["highest",{"2":{"622":1,"670":1,"675":2,"799":1}}],["hide",{"2":{"1440":1}}],["hideloading",{"0":{"1398":1},"2":{"1273":1,"1275":1,"1319":1,"1325":1,"1329":1,"1399":1,"1609":1,"1615":1,"1724":1,"1912":2,"1920":1,"2001":1}}],["hidden",{"2":{"1026":1,"1033":1}}],["hikaridatasource",{"2":{"618":2}}],["hikaricp를",{"2":{"839":1}}],["hikaricp",{"0":{"256":1,"839":1},"1":{"840":1,"841":1},"2":{"618":3,"834":1}}],["hot",{"2":{"2082":1}}],["hooks",{"2":{"1613":1}}],["hong",{"2":{"1278":1}}],["home",{"2":{"459":1,"460":2,"1649":1,"2062":1}}],["host",{"2":{"171":1,"288":2,"490":2,"690":1,"850":2,"1200":1,"1490":1}}],["hasroute",{"2":{"1358":1}}],["hashmap",{"2":{"149":1,"172":1,"178":1,"179":1,"199":2,"305":1,"390":1,"417":1,"418":1,"570":1,"593":1,"609":2,"633":2,"707":1,"708":1,"846":1,"883":1,"888":1,"950":1}}],["hash",{"0":{"56":1,"57":1,"311":1},"2":{"20":1,"56":1,"59":2,"213":2,"214":2,"634":2,"792":2,"793":2,"980":2,"981":2}}],["handlelogin",{"2":{"1920":1}}],["handleupdate",{"2":{"1593":2}}],["handleevent",{"2":{"1592":1}}],["handleexception",{"2":{"632":1}}],["handle",{"2":{"1578":1,"2146":1}}],["handleapierror",{"2":{"1538":2}}],["handleaction",{"2":{"1059":2,"1724":1}}],["handletoggleunfoldable",{"2":{"1463":2}}],["handletogglesidebar",{"2":{"1463":2}}],["handler",{"2":{"1434":1}}],["handledeptselect",{"2":{"2009":1}}],["handled",{"2":{"1297":1,"1338":1}}],["handledata",{"2":{"946":1}}],["handleheadercontextmenu",{"2":{"1072":1}}],["handlesubmit",{"2":{"1566":1,"1578":1}}],["handleselect",{"2":{"1036":2,"2003":1}}],["handlesave",{"2":{"1006":1,"1997":1}}],["handlecustomerselect",{"2":{"1983":1}}],["handlecontextmenu",{"2":{"1072":2}}],["handlechange",{"2":{"1035":2}}],["handleclick",{"2":{"1007":1,"1566":1,"1578":1,"1613":1,"1717":2}}],["havingvalue",{"2":{"260":1,"618":1,"838":1}}],["height",{"2":{"1063":1,"1609":1,"1723":1}}],["height=600",{"2":{"1106":1}}],["height=",{"2":{"197":5}}],["hello",{"2":{"879":1,"2146":1,"2214":2,"2315":2}}],["helper",{"2":{"693":4,"694":5}}],["heads",{"2":{"2258":2}}],["header>",{"2":{"1594":1}}],["headername",{"2":{"1043":1,"1059":1,"1063":2,"1077":1,"1609":3,"1723":2,"1887":1,"1974":2,"2120":2}}],["header",{"2":{"621":1,"1089":1,"1320":1}}],["headersconfigurer",{"2":{"826":1}}],["headers",{"2":{"45":1,"156":4,"356":1,"620":5,"894":4,"1230":1,"1260":1,"1261":1,"1269":1,"1273":1,"1276":2,"1280":1,"1312":1,"1313":1,"1320":1,"1326":1,"1336":1,"1337":1}}],["health",{"2":{"506":2}}],["hress1300",{"2":{"1946":1}}],["href=",{"2":{"1836":1}}],["href",{"2":{"46":1,"78":1,"942":1,"1281":1,"1342":1,"1519":1,"1546":1,"1837":1,"2269":1}}],["hrpayrollmapper",{"2":{"368":1,"374":1}}],["hrpayrollservice",{"2":{"368":1}}],["hrpayrollcontroller",{"2":{"368":1}}],["hr",{"0":{"1968":2},"1":{"1969":2,"1970":2,"1971":2},"2":{"367":2,"368":2,"370":1,"371":1,"374":1,"1663":2,"1680":3,"1779":1,"1817":1,"1962":1}}],["hri5100",{"0":{"1971":1},"2":{"1962":1}}],["hri1000tabcontents",{"0":{"1970":1},"2":{"1962":1}}],["hri1000",{"0":{"1969":1},"2":{"1962":1,"1969":2,"1970":1}}],["hri",{"0":{"537":2,"1968":1},"1":{"1969":1,"1970":1,"1971":1},"2":{"127":1,"441":2,"534":2,"537":1,"556":2,"1962":1}}],["hrmaster",{"2":{"122":1,"243":1,"494":1,"658":1}}],["hra1600",{"2":{"98":2,"756":1}}],["html에서",{"2":{"1836":1}}],["htmlinput",{"2":{"983":1}}],["htmlstring",{"2":{"942":1}}],["htmlbody",{"2":{"693":2,"696":2}}],["html",{"0":{"101":1,"693":1},"2":{"89":1,"101":4,"144":1,"174":1,"175":1,"216":1,"226":1,"422":1,"506":1,"518":1,"630":1,"670":1,"680":1,"688":1,"693":1,"701":1,"704":2,"761":1,"857":2,"869":1,"886":1,"921":1,"936":1,"941":2,"942":1,"983":1,"984":1,"1498":1,"1836":1,"2258":1,"2259":1}}],["httpurlconnection",{"2":{"732":2}}],["httprequest",{"2":{"670":2}}],["httpheaders",{"2":{"156":2,"894":2}}],["httpauthorization",{"2":{"133":1}}],["https를",{"2":{"1487":1}}],["httpsecurity",{"2":{"822":1,"970":1}}],["httpservletresponse",{"2":{"672":1}}],["httpservletrequest",{"2":{"670":2,"672":1}}],["httpstatus",{"2":{"156":1,"894":1}}],["https",{"2":{"45":1,"69":1,"204":1,"239":1,"488":1,"740":1,"825":1,"986":1,"1236":2,"1487":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2052":1,"2053":1}}],["httponly",{"2":{"17":2,"20":1,"21":1,"25":1,"76":2,"83":2,"84":1,"134":1,"357":1,"811":1,"965":1,"1227":1,"1236":1}}],["http",{"0":{"138":1,"348":1,"1763":1,"2065":1},"1":{"2066":1,"2067":1,"2068":1,"2069":1},"2":{"7":1,"15":1,"28":1,"34":1,"41":1,"54":1,"63":1,"74":1,"90":1,"117":1,"144":1,"197":4,"216":1,"222":1,"236":1,"239":2,"320":1,"333":1,"393":1,"413":1,"422":1,"493":3,"506":2,"518":1,"546":1,"620":4,"630":1,"632":1,"667":1,"670":1,"732":1,"753":1,"822":3,"857":2,"866":1,"867":1,"921":1,"970":3,"1194":1,"1391":1,"1492":1,"1540":1,"1658":1,"1714":1,"1736":1,"1741":1,"1760":1,"1777":1,"2035":1,"2053":1,"2066":1,"2116":1,"2151":1}}],["서드파티",{"2":{"1684":1}}],["서브메뉴",{"2":{"1111":1}}],["서브메뉴1",{"2":{"76":1}}],["서버와의",{"2":{"1706":1}}],["서버와",{"2":{"1653":1}}],["서버는",{"2":{"1494":1,"1736":1}}],["서버로",{"2":{"1191":1,"1192":1,"1193":1}}],["서버의",{"2":{"1187":1}}],["서버를",{"2":{"1185":1,"1736":1,"1749":1,"2055":1,"2058":1}}],["서버가",{"2":{"510":1,"511":1,"2177":1}}],["서버에서",{"0":{"1617":1},"2":{"1288":1,"1298":1,"1408":1}}],["서버에",{"2":{"34":1,"45":1,"46":2,"50":1,"92":1,"103":1,"1484":1,"1506":1,"1512":1,"1530":1,"1797":1,"2267":1}}],["서버",{"0":{"108":1,"188":1,"235":1,"468":1,"471":1,"505":1,"660":1,"1200":1,"1484":1,"1488":1,"1489":1,"1512":1,"1528":1,"1714":1,"1736":1},"1":{"236":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1},"2":{"20":1,"24":7,"33":1,"46":1,"51":1,"97":2,"108":1,"114":1,"138":1,"200":1,"473":2,"515":1,"643":1,"651":2,"652":3,"658":1,"715":1,"723":1,"731":2,"864":1,"904":1,"996":1,"997":1,"1180":3,"1195":1,"1286":1,"1296":1,"1298":1,"1300":1,"1333":1,"1334":1,"1528":3,"1529":1,"1536":1,"1689":2,"1707":3,"1713":1,"1734":3,"1747":1,"1759":1,"1780":1,"1783":2,"2082":1,"2161":1,"2179":1,"2187":1,"2267":1}}],["서비스를",{"2":{"303":1,"385":1,"416":1}}],["서비스입니다",{"2":{"219":1,"304":1,"307":1,"312":1}}],["서비스에서",{"0":{"199":1,"609":1}}],["서비스",{"0":{"6":1,"146":1,"303":1,"385":1,"416":1,"542":1,"570":1,"597":1,"769":1,"846":1},"1":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"147":1,"148":1,"149":1,"150":1,"151":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"417":1,"418":1,"419":1,"543":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1},"2":{"115":1,"141":1,"173":1,"206":1,"302":1,"327":1,"338":1,"372":1,"385":1,"397":1,"404":1,"410":1,"429":1,"439":2,"443":1,"514":1,"515":1,"516":2,"517":1,"518":2,"551":1,"554":2,"568":1,"570":2,"573":3,"588":1,"589":1,"590":1,"591":1,"598":2,"600":1,"602":1,"605":1,"614":1,"630":5,"633":1,"634":1,"646":1,"684":1,"702":1,"726":1,"750":1,"769":3,"959":1,"1941":1}}],["헤더에",{"2":{"1109":1,"1272":1}}],["헤더에서",{"2":{"220":1,"672":1,"803":1,"974":1}}],["헤더바",{"0":{"1107":1},"1":{"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1113":1},"2":{"2018":1,"2029":1}}],["헤더를",{"2":{"986":1}}],["헤더",{"0":{"356":1,"824":1,"827":1,"986":1,"1070":1,"1313":1},"1":{"825":1,"826":1,"827":1},"2":{"19":1,"216":1,"222":2,"581":1,"620":3,"632":1,"636":1,"670":2,"810":1,"917":1,"964":1,"1034":1,"1082":1,"1088":1,"1226":1,"1275":1,"2028":1,"2258":1}}],["저장할",{"2":{"2287":1}}],["저장됨",{"2":{"1229":1}}],["저장소를",{"2":{"1731":1}}],["저장소",{"2":{"1712":1,"1770":1}}],["저장소로",{"2":{"906":1}}],["저장소에서",{"2":{"477":1}}],["저장용",{"2":{"658":1}}],["저장하는",{"2":{"2284":1}}],["저장하세요",{"2":{"1252":1}}],["저장하지",{"2":{"1185":1,"1252":2}}],["저장하며",{"2":{"230":1,"613":1}}],["저장하고",{"2":{"92":1,"1377":1}}],["저장하여",{"2":{"17":1,"1318":1}}],["저장만",{"2":{"67":1}}],["저장됩니다",{"2":{"59":1,"113":1,"1251":1,"1390":1,"2293":1,"2294":1}}],["저장되지",{"0":{"2167":1},"2":{"2167":1}}],["저장되므로",{"2":{"1420":1,"2168":1}}],["저장되는",{"2":{"50":1,"563":1}}],["저장되어",{"2":{"25":1,"1239":1,"1479":1}}],["저장된",{"2":{"45":1,"46":2,"53":1,"56":1,"103":1,"2267":1,"2288":1}}],["저장에",{"2":{"34":1}}],["저장합니다",{"2":{"34":1,"889":1,"1380":1,"1471":1,"2125":1,"2259":1,"2260":1,"2261":1,"2287":1}}],["저장",{"0":{"34":1,"59":1,"84":1,"92":1,"299":1,"308":1,"660":1,"731":1,"818":1,"1314":1,"1318":1},"1":{"93":1,"94":1,"95":1,"96":1,"97":1,"98":1},"2":{"19":1,"20":1,"21":1,"48":1,"50":1,"67":1,"76":4,"84":1,"210":1,"228":1,"286":1,"430":1,"465":1,"594":1,"634":1,"649":2,"651":2,"654":1,"658":2,"661":1,"699":1,"704":1,"731":1,"744":1,"810":1,"811":1,"849":2,"879":1,"891":1,"964":1,"965":1,"1006":1,"1139":1,"1226":1,"1227":1,"1229":1,"1236":1,"1272":2,"1379":1,"1387":1,"1434":1,"1435":1,"1439":1,"1444":1,"1445":1,"1797":1,"1879":1,"1997":1,"2287":1,"2294":1}}],["리소스는",{"2":{"1848":1}}],["리소스를",{"2":{"1527":1,"1536":1}}],["리소스",{"0":{"373":1,"442":1,"746":1,"1527":1,"1685":1},"1":{"374":1,"443":1,"444":1,"445":1,"446":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1},"2":{"97":1,"109":1,"138":1,"437":1,"478":1,"551":1,"552":1,"561":1,"566":1,"715":1,"746":1,"1667":1,"1684":1,"1816":1,"1817":1,"1833":1,"1849":1,"1926":1,"1931":1}}],["리포트에",{"2":{"97":1,"108":1}}],["리포트를",{"2":{"89":1,"92":1,"99":1,"100":1,"101":1,"102":1,"174":1,"175":1,"590":1,"701":1}}],["리포트",{"0":{"89":1,"92":1,"96":1,"99":1,"101":1,"102":1,"104":1,"112":1,"174":1,"176":1,"177":1,"179":1,"180":1,"182":1,"183":1,"184":1,"196":1,"199":1,"229":1,"446":1,"590":1,"701":1,"706":1,"708":1,"709":1,"711":1,"712":1,"721":1,"722":1,"755":1,"757":1,"887":1,"888":1},"1":{"90":1,"91":1,"92":1,"93":2,"94":2,"95":2,"96":2,"97":2,"98":2,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":2,"106":2,"107":2,"108":2,"109":2,"110":2,"111":2,"112":1,"113":1,"114":1,"115":1,"175":1,"176":1,"177":2,"178":2,"179":2,"180":2,"181":1,"182":1,"183":1,"184":1,"185":2,"186":2,"187":2,"188":2,"189":2,"190":2,"191":2,"192":1,"193":1,"194":1,"195":1,"196":1,"197":2,"198":1,"199":1,"200":1,"201":1,"702":1,"703":1,"704":1,"705":1,"706":1,"707":2,"708":2,"709":2,"710":2,"711":1,"712":1,"713":2,"714":2,"715":2,"716":2,"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1,"756":1,"757":1},"2":{"52":1,"92":1,"93":1,"96":1,"105":1,"106":2,"110":1,"130":1,"141":1,"151":1,"159":1,"177":1,"178":1,"179":1,"180":2,"182":1,"185":1,"186":2,"197":1,"199":3,"201":2,"210":1,"277":1,"429":1,"434":1,"437":1,"439":1,"446":1,"514":1,"517":1,"551":1,"554":1,"561":1,"568":1,"590":3,"700":1,"702":3,"704":5,"705":1,"708":1,"709":2,"713":1,"714":1,"721":1,"724":1,"747":1,"756":1,"787":1,"886":3,"887":1,"888":1,"899":1,"977":1}}],["리스트를",{"2":{"2251":1,"2252":1,"2253":1}}],["리스트",{"2":{"32":1}}],["리다이렉트됨",{"2":{"1525":1}}],["리다이렉트됩니다",{"2":{"1287":1,"1390":1,"1525":1}}],["리다이렉트합니다",{"2":{"1262":1}}],["리다이렉트",{"2":{"17":1,"1276":1,"1294":1,"1295":1,"1359":1,"1389":1,"1895":1}}],["리프레시",{"2":{"17":1,"59":1,"76":1}}],["nm",{"2":{"1981":3,"1989":1}}],["nvmenu=",{"2":{"1949":1}}],["nvm을",{"2":{"1709":1,"1732":1}}],["nvmrc",{"2":{"1709":1,"1732":1}}],["npm",{"0":{"1696":1},"2":{"1173":1,"1503":1,"1667":1,"1696":3,"1706":1,"1712":1,"1748":2,"1816":1,"2172":1,"2174":1,"2178":3}}],["nkwr2ldjoeqk9hvc2xfqvemmjntqddhciqmwwwkbgqc5sqswritzsqfgegfrgsuvxw",{"2":{"211":1,"238":1,"790":1,"978":1}}],["nq3uej2w2z4lcjmal4qfp9fwzx8nnvzxkhq2we5les9phydotzijcqhvpvztuptua4c+9pfokjqsezeck1la3kvlcxb2ofuz3+dwjhu3pyp9suvnowk80wvxgtxgjqaanffbfcmeotroej6axli8fxakwdaelhsoiwww6baahfvh0wz3jzdagmbaaecggeaozjehsgasyhekjnutitj",{"2":{"211":1,"238":1,"790":1,"978":1}}],["nextdate",{"2":{"2309":1}}],["next",{"2":{"1358":2,"1360":3}}],["ne4j5qmcaaawexruvkbokkrcjxafvj4filwfudxsgqi14yhxbvnluij9wthenshwkbgqdlcw7b3dqy8rfq4cwtaeeii0tim7xeswksyx7bgngencrlhbg6kl2ovalmryqhj9voiffwxbvk6fiig0iobvefit+iyuo8dbyxhsrohe1ezmdvw2k2uroeazxtflcnmrxo3av",{"2":{"211":1,"238":1,"790":1,"978":1}}],["netstat",{"2":{"2177":1}}],["net",{"2":{"197":4,"898":2}}],["newdata",{"2":{"1629":2,"2087":2}}],["newval",{"2":{"1574":2}}],["newmenu",{"2":{"1468":2}}],["newtoken",{"2":{"1261":2,"1276":2,"1336":2,"1635":2}}],["new",{"2":{"45":1,"46":1,"99":1,"119":1,"149":1,"154":1,"156":3,"172":1,"178":1,"179":2,"180":4,"199":8,"264":1,"290":2,"291":2,"296":1,"297":2,"305":1,"390":1,"417":1,"418":1,"570":1,"593":1,"609":2,"619":5,"622":2,"633":2,"663":1,"670":1,"675":4,"692":1,"693":1,"694":1,"696":1,"707":1,"708":2,"709":1,"710":3,"732":5,"799":2,"822":1,"846":1,"879":2,"883":1,"888":1,"891":1,"894":3,"924":2,"946":1,"950":1,"970":1,"1161":6,"1201":2,"1212":1,"1233":1,"1261":1,"1276":2,"1280":1,"1281":1,"1304":1,"1316":1,"1317":1,"1331":1,"1336":1,"1337":1,"1342":1,"1435":1,"1518":1,"1519":1,"1534":1,"1543":1,"1546":1,"1547":1,"1548":2,"1600":2,"1634":1,"1837":1,"1879":3,"1934":1,"2208":1,"2209":1,"2218":1,"2233":1,"2240":1,"2241":1,"2242":1,"2244":1,"2262":2,"2269":1,"2309":1}}],["newaccesstoken",{"2":{"17":2,"1259":2,"1260":1,"1276":5,"1337":5}}],["navitems",{"2":{"1994":1}}],["navigation",{"2":{"1464":2}}],["navbarthemeswitcher",{"2":{"1994":1}}],["nav",{"2":{"1879":2,"1882":1,"1883":1}}],["nanumgothic",{"2":{"113":1,"194":1,"195":1,"197":3,"711":1,"718":1,"756":1,"889":1}}],["namespace=",{"2":{"320":1,"333":1,"413":1,"546":1,"753":1}}],["name=",{"2":{"197":5}}],["name으로",{"2":{"77":1}}],["name",{"2":{"30":1,"45":6,"65":1,"66":1,"67":1,"77":3,"92":1,"95":1,"111":2,"120":3,"121":2,"178":1,"191":1,"199":1,"210":1,"211":1,"213":1,"214":1,"219":1,"228":1,"229":1,"234":1,"244":1,"255":1,"257":1,"258":1,"260":1,"290":1,"291":1,"293":1,"294":1,"320":1,"322":1,"323":1,"335":1,"336":1,"337":1,"390":1,"417":1,"418":1,"421":1,"482":1,"483":1,"484":1,"543":1,"600":1,"601":1,"609":1,"610":1,"618":1,"633":1,"636":1,"641":1,"648":1,"698":1,"704":1,"728":1,"834":1,"835":1,"836":1,"838":1,"859":1,"861":1,"1027":4,"1034":1,"1035":4,"1036":1,"1043":2,"1063":1,"1077":2,"1083":1,"1091":1,"1104":1,"1105":1,"1220":1,"1249":1,"1262":1,"1276":1,"1278":1,"1280":1,"1295":1,"1331":1,"1337":1,"1348":1,"1350":1,"1352":1,"1358":2,"1360":1,"1362":1,"1366":4,"1368":1,"1388":1,"1389":1,"1418":1,"1517":1,"1518":1,"1543":1,"1552":1,"1603":1,"1625":1,"1718":1,"1723":3,"1887":1,"1895":3,"1957":1,"2025":1,"2120":2,"2192":3,"2193":2,"2197":1,"2205":1,"2216":3,"2251":1,"2252":1,"2253":1,"2316":1,"2317":1,"2320":1}}],["n시간",{"2":{"66":1,"734":1}}],["n분",{"2":{"66":1,"734":1}}],["node",{"0":{"1695":1,"1732":1},"2":{"1667":1,"1695":3,"1696":1,"1708":1,"1709":2,"1732":2,"1748":1,"1759":1,"1816":1,"2172":1,"2178":2}}],["nodes",{"2":{"942":1}}],["now",{"2":{"2208":1}}],["nowtab",{"2":{"1473":1,"1480":1,"1916":1,"2294":1}}],["nowtime",{"2":{"248":1}}],["nowmenu",{"2":{"1314":1,"1404":1,"1409":1}}],["none",{"2":{"825":1}}],["not",{"2":{"138":1}}],["no",{"2":{"65":1,"66":1,"67":3,"742":1,"827":2,"1989":2,"2186":1}}],["n",{"0":{"2279":1},"2":{"45":6,"49":1,"67":2,"76":2,"558":2,"655":1,"663":1,"1413":1,"1418":1,"1884":2}}],["num",{"0":{"2323":1,"2332":1},"2":{"98":1,"111":1}}],["num|cv",{"2":{"92":1,"95":1,"111":1,"191":1,"229":1}}],["numberformats",{"2":{"1879":2}}],["number",{"0":{"2212":1,"2274":1},"2":{"9":2,"1572":1,"2212":1}}],["null로",{"2":{"1380":1}}],["null",{"2":{"9":1,"30":1,"31":1,"45":1,"76":1,"120":1,"121":1,"137":1,"154":1,"325":2,"352":1,"400":1,"403":1,"540":1,"541":1,"601":1,"610":1,"632":1,"649":1,"672":1,"891":1,"946":1,"1104":1,"1379":1,"1380":1,"1424":2,"1473":1,"1538":2,"1613":1,"1629":1,"1720":1,"1725":1,"1787":1,"1974":1,"2033":1,"2087":1,"2156":3,"2204":2,"2205":1,"2329":1}}],["없어요",{"0":{"2056":1}}],["없거나",{"2":{"1358":1}}],["없을",{"2":{"1288":1,"2292":1}}],["없으면",{"2":{"123":1,"1298":1,"1385":1,"2292":1}}],["없이",{"2":{"71":1,"744":1,"1591":1,"1770":1,"2079":1,"2200":1,"2222":1}}],["없는",{"2":{"23":4,"358":1,"971":1,"1533":1}}],["없습니다",{"2":{"17":1,"121":1,"454":1,"1263":1,"1289":2,"1320":1,"1390":1,"1400":1,"1525":1,"1527":1,"1536":2,"1873":1,"2222":1,"2306":1}}],["없음",{"0":{"1527":1,"2184":1,"2185":1,"2186":1},"2":{"17":2,"23":1,"78":3,"121":1,"138":2,"449":1,"1082":1,"1276":1,"1337":1,"2028":1,"2173":1}}],["또는",{"0":{"1696":1},"2":{"17":2,"19":1,"33":4,"65":1,"66":1,"84":1,"102":2,"380":1,"385":1,"394":1,"459":1,"465":1,"471":1,"496":1,"500":1,"502":1,"518":2,"757":1,"810":1,"857":1,"964":1,"1059":1,"1060":1,"1173":1,"1288":1,"1352":1,"1503":1,"1578":1,"1580":1,"1696":1,"1732":1,"1740":1,"1790":1,"1837":1,"1838":1,"1846":1}}],["및",{"0":{"236":1,"476":1,"487":1,"709":1,"853":1,"900":1,"960":1,"1712":1,"1764":1,"1783":1,"1875":1,"1992":1,"2074":1},"1":{"477":1,"478":1,"488":1,"489":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1,"901":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"985":1,"986":1,"987":1,"1876":1,"1877":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1887":1,"1888":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1,"2029":1,"2030":1,"2031":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1,"2101":1,"2102":1,"2103":1,"2104":1,"2105":1,"2106":1,"2107":1,"2108":1,"2109":1,"2110":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2116":1},"2":{"17":2,"33":1,"40":1,"73":1,"100":1,"219":1,"226":1,"429":1,"488":1,"515":1,"516":1,"517":1,"518":1,"520":2,"562":1,"619":1,"635":1,"680":1,"852":1,"862":1,"864":1,"937":1,"990":1,"1140":2,"1276":1,"1456":1,"1611":1,"1663":1,"1667":3,"1684":1,"1700":1,"1701":1,"1758":2,"1762":1,"1763":1,"1764":1,"1768":1,"1770":7,"1778":1,"1780":1,"1781":1,"1783":1,"1785":1,"1797":2,"1803":1,"1810":1,"1817":2,"1858":5,"1864":1,"1876":1,"1880":1,"1896":1,"1925":1,"1928":1,"1942":1,"1945":1,"1949":1,"1961":1,"1971":1,"1981":1,"1982":1,"1983":1,"1984":1,"1986":1,"1987":1,"2003":1}}],["제출",{"2":{"1566":1}}],["제어합니다",{"2":{"1456":1}}],["제어",{"2":{"1433":1}}],["제공",{"0":{"429":1},"2":{"379":1,"514":1,"600":1,"648":1,"673":1,"686":1,"704":1,"728":1,"1659":1,"1756":1}}],["제공하여",{"2":{"208":1,"425":1,"432":1,"960":1}}],["제공하는",{"2":{"129":1,"207":1,"517":1,"521":1,"597":1,"629":1,"645":1,"683":1,"725":1,"1664":1,"1941":1,"1961":1,"1977":1,"2190":1,"2237":1,"2265":1,"2272":1,"2313":1,"2327":1}}],["제공합니다",{"2":{"152":1,"160":1,"202":1,"246":1,"303":1,"517":1,"567":1,"570":1,"589":1,"591":1,"784":1,"875":1,"896":1,"1022":1,"1661":1,"1663":1,"1765":1,"1810":1,"1814":1,"2106":1,"2200":1}}],["제거된",{"2":{"2214":1}}],["제거됩니다",{"2":{"1497":1}}],["제거합니다",{"2":{"1246":1,"1407":1,"2214":1,"2278":1,"2315":1}}],["제거할",{"2":{"1121":1}}],["제거",{"2":{"78":1,"678":1,"798":1,"985":1,"1916":1}}],["제한을",{"2":{"892":1}}],["제한합니다",{"2":{"804":1,"975":1,"1264":1}}],["제한",{"0":{"155":1,"892":1,"1500":1},"2":{"51":1,"665":1,"827":1,"986":1,"1169":1,"2295":1}}],["제한이",{"2":{"12":1,"71":1,"613":1,"744":1,"1252":1,"2295":1}}],["제목",{"2":{"45":1,"92":1,"106":1,"172":1,"179":1,"182":1,"186":1,"197":2,"199":1,"698":1,"708":1,"721":1,"888":1,"1127":1,"1426":1,"1600":1,"1885":1}}],["제외되어",{"2":{"60":1}}],["제외됨",{"2":{"56":1}}],["제외됩니다",{"2":{"56":1}}],["제외",{"0":{"241":1,"284":1,"358":1,"823":1,"971":1,"972":1},"2":{"15":1,"28":1,"74":1,"90":1,"93":1,"105":1,"185":1,"222":1,"394":1,"518":1,"620":1,"681":1,"803":1,"974":1,"1478":1}}],["쿠키를",{"2":{"1270":1}}],["쿠키에",{"2":{"1229":1}}],["쿠키에서",{"2":{"17":2,"24":1,"78":1,"86":1,"672":1,"803":1,"816":1,"974":1}}],["쿠키명",{"2":{"134":1}}],["쿠키로",{"2":{"25":1,"83":2,"134":1,"357":1,"1269":1}}],["쿠키가",{"2":{"23":2}}],["쿠키는",{"2":{"17":1,"25":1,"76":1}}],["쿠키",{"0":{"357":1},"2":{"15":1,"17":1,"20":1,"21":1,"23":2,"24":1,"25":2,"76":2,"78":4,"84":1,"87":2,"811":1,"965":1,"1259":1}}],["있게",{"2":{"1729":1}}],["있지만",{"2":{"1390":1}}],["있으며",{"2":{"2090":1}}],["있으면",{"2":{"1297":1}}],["있으므로",{"2":{"613":2,"1252":1,"1848":1}}],["있음",{"2":{"744":1,"1467":1}}],["있도록",{"2":{"514":1,"1756":1}}],["있는지",{"2":{"1749":1,"2056":1,"2179":1}}],["있는",{"2":{"108":1,"1154":1,"1538":1,"1659":1,"1785":1}}],["있어야",{"2":{"87":1}}],["있을",{"2":{"12":1,"71":1,"613":1,"744":1}}],["있습니다",{"2":{"12":2,"43":1,"60":1,"71":1,"129":1,"130":1,"144":1,"175":1,"232":1,"252":1,"388":1,"389":1,"473":1,"480":1,"519":1,"521":1,"832":1,"846":1,"857":1,"866":1,"867":1,"869":1,"870":1,"971":1,"972":1,"1007":1,"1016":1,"1031":1,"1041":1,"1044":1,"1064":1,"1098":1,"1121":1,"1159":1,"1176":1,"1197":1,"1221":1,"1286":1,"1289":1,"1296":1,"1304":1,"1333":1,"1359":1,"1362":1,"1500":1,"1522":1,"1529":1,"1534":1,"1535":1,"1537":1,"1538":1,"1548":1,"1588":1,"1591":1,"1635":1,"1638":1,"1642":1,"1643":1,"1646":1,"1708":1,"1719":1,"1725":1,"1736":1,"1741":1,"1744":1,"1745":1,"1770":1,"1806":1,"1823":1,"1824":1,"1846":1,"1857":1,"1871":1,"1886":1,"2057":1,"2077":1,"2079":1,"2143":1,"2175":1,"2181":1,"2200":1,"2295":1,"2298":1,"2300":1,"2306":1,"2309":1,"2310":1}}],["시트명",{"2":{"2258":1}}],["시각화",{"2":{"1947":1}}],["시도해주세요",{"2":{"1286":1,"1296":1,"1333":1,"1529":1,"1536":1}}],["시도",{"2":{"1275":1,"1294":1,"2165":1}}],["시도하고",{"2":{"1261":1}}],["시도합니다",{"2":{"1256":1,"1390":1,"1525":1}}],["시도한",{"2":{"77":1}}],["시스템을",{"2":{"1345":1,"1369":1,"1604":1,"1626":1,"2137":1}}],["시스템",{"0":{"457":1,"538":1,"1648":1,"1693":1},"1":{"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1706":1,"1707":1,"1708":1,"1709":1,"1710":1},"2":{"435":1,"441":1,"515":1,"534":1,"538":1,"556":1,"715":1,"1653":1,"1659":1,"1665":1,"1758":1,"1962":1,"1965":2,"1966":2,"1967":2,"2082":1}}],["시스템의",{"2":{"97":1,"1652":1}}],["시크릿",{"0":{"492":1},"2":{"237":1,"492":2,"968":1}}],["시퀀스",{"2":{"45":1,"120":1,"121":1}}],["시작되지",{"2":{"2177":1}}],["시작되면",{"2":{"505":1}}],["시작해야",{"2":{"1185":1}}],["시작하려면",{"2":{"435":1,"1665":1}}],["시작하는지",{"2":{"1749":1,"2058":1,"2179":1}}],["시작하는",{"2":{"38":1,"106":1,"1711":1}}],["시작",{"0":{"505":1,"1489":1,"1711":1},"1":{"1712":1,"1713":1,"1714":1,"1715":1,"1716":1,"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"1726":1,"1727":1,"1728":1,"1729":1},"2":{"33":1,"747":1,"765":1,"1258":1,"1711":1,"1750":1,"1759":1,"1790":1,"2210":1,"2258":1}}],["시간이",{"2":{"1221":1,"2175":1}}],["시간에",{"2":{"67":1}}],["시간",{"0":{"2206":1},"1":{"2207":1,"2208":1,"2209":1,"2210":1},"2":{"33":3,"56":1,"59":1,"66":2,"248":1,"636":1,"735":1,"923":1,"1226":1,"1227":1,"1236":1,"1270":1,"1871":1,"2161":2,"2208":3,"2237":1}}],["시",{"0":{"86":1,"229":1,"455":1,"1248":1,"1249":1,"1847":1,"2057":1},"2":{"12":1,"30":1,"31":1,"45":1,"50":1,"123":1,"210":2,"396":1,"518":1,"613":2,"661":1,"699":2,"765":1,"787":1,"975":1,"977":1,"1033":1,"1067":1,"1111":1,"1118":1,"1226":1,"1256":1,"1264":1,"1275":1,"1276":1,"1289":1,"1294":1,"1297":1,"1318":1,"1338":1,"1358":1,"1380":2,"1383":1,"1390":1,"1468":1,"1521":1,"1525":1,"1527":1,"1615":1,"1685":1,"1706":1,"1720":1,"1764":1,"1785":1,"1816":1,"1833":1,"1847":1,"2057":1,"2162":1,"2165":1,"2168":1}}],["합니다",{"2":{"12":1,"25":1,"51":2,"87":1,"114":1,"200":1,"365":1,"367":1,"461":1,"582":1,"1045":1,"1185":2,"1221":1,"1707":1,"1848":2,"2308":1}}],["발령",{"2":{"1946":1}}],["발신자",{"2":{"66":1}}],["발신",{"2":{"66":1,"740":1}}],["발급",{"0":{"83":1},"2":{"1794":1}}],["발급합니다",{"2":{"76":1}}],["발급된",{"2":{"17":1}}],["발급받습니다",{"2":{"17":1,"1255":1}}],["발급받아야",{"2":{"12":1}}],["발송됨",{"2":{"744":1}}],["발송됩니다",{"2":{"71":2}}],["발송하지",{"2":{"67":1}}],["발송하는",{"2":{"62":1}}],["발송인",{"2":{"67":1,"731":1}}],["발송을",{"2":{"65":1}}],["발송합니다",{"2":{"65":1,"169":1}}],["발송",{"0":{"62":1,"65":1,"169":1,"202":1,"589":1,"591":1,"683":1,"693":1,"725":1,"730":1,"731":1,"733":1,"742":1,"743":1},"1":{"63":1,"64":1,"65":1,"66":2,"67":2,"68":1,"69":1,"70":1,"71":1,"72":1,"170":1,"171":1,"172":1,"173":1,"203":1,"204":1,"205":1,"206":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"726":1,"727":1,"728":1,"729":1,"730":1,"731":2,"732":2,"733":1,"734":2,"735":2,"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"2":{"13":1,"65":1,"66":6,"67":10,"70":3,"71":2,"115":1,"141":1,"159":1,"173":1,"202":1,"275":1,"429":2,"439":2,"517":3,"554":2,"568":2,"589":1,"591":1,"666":1,"683":1,"684":2,"686":2,"687":1,"688":2,"698":1,"699":2,"700":2,"724":1,"725":1,"726":2,"728":3,"729":4,"731":7,"734":4,"738":3,"743":1,"744":3,"745":2,"1949":5}}],["발생해요",{"0":{"2057":1}}],["발생했습니다",{"2":{"1298":1,"1303":1,"1334":1,"1528":1,"1533":1,"1536":2,"1609":1,"1614":1}}],["발생하면",{"2":{"1287":1,"1319":1}}],["발생하는",{"2":{"522":1,"994":1,"1521":1,"1748":1,"1784":1}}],["발생한",{"2":{"34":1}}],["발생할",{"2":{"12":1,"613":1}}],["발생",{"2":{"9":1,"30":2,"31":2,"34":1,"400":1,"540":1,"1256":1,"1279":1,"1300":1,"1523":1,"1609":1,"1614":1,"1720":1,"2162":1,"2165":1}}],["키의",{"2":{"1243":1,"1244":1,"1245":1,"1452":1,"1453":1}}],["키가",{"2":{"87":1}}],["키로",{"2":{"32":1,"36":1,"2216":1}}],["키는",{"2":{"30":1,"38":1,"106":1,"114":1,"186":1,"200":1,"230":1,"613":1,"714":1,"723":1,"744":1,"1221":1}}],["키값",{"2":{"17":1,"76":1}}],["키",{"0":{"492":1},"2":{"12":1,"33":1,"114":1,"200":1,"230":1,"602":2,"613":1,"634":1,"636":1,"723":1,"740":1,"744":1,"801":1,"1185":1,"1221":1,"1476":1,"2163":1,"2287":1,"2288":1,"2289":1,"2290":1}}],["키를",{"2":{"11":1,"12":1,"237":1,"492":2,"636":1,"801":1,"968":1,"1246":1,"2289":1,"2290":1}}],["years",{"2":{"2251":1}}],["yesterday",{"2":{"2209":1}}],["yn",{"2":{"1981":6}}],["yarn",{"0":{"1696":1},"2":{"1696":2}}],["yamlredis",{"2":{"288":1,"490":1,"850":1}}],["yamlrsa",{"2":{"211":1,"238":1,"790":1,"978":1}}],["yamlapp",{"2":{"253":1,"482":1,"483":1,"484":1,"834":1,"835":1,"836":1}}],["yamlcors",{"2":{"239":1,"493":1}}],["yamljwt",{"2":{"237":1,"492":1,"968":1}}],["yamlsecurity",{"2":{"241":1,"358":1,"823":1,"971":1,"972":1}}],["yamlserver",{"2":{"236":1,"995":1}}],["yamlspringdoc",{"2":{"869":1}}],["yamlspring",{"2":{"155":1,"171":1,"234":1,"242":1,"255":1,"257":1,"258":1,"453":1,"690":1,"749":1,"765":1,"892":1}}],["yamllogging",{"2":{"164":1,"244":1,"1001":1}}],["yamlfile",{"2":{"122":1,"243":1,"494":1,"658":1}}],["yamlmsg",{"2":{"69":1,"204":1,"740":1}}],["yaml",{"0":{"69":1,"148":1,"171":1,"204":1,"234":1,"288":1,"362":1,"453":1,"605":1,"625":1,"658":1,"690":1,"740":1,"749":1,"867":1},"2":{"232":1,"233":5,"362":1,"437":1,"443":4,"481":1,"490":1,"492":1,"509":2,"520":1,"551":5,"552":1,"604":1,"605":1,"625":1,"626":3,"627":4,"747":1,"750":4,"773":4,"867":2}}],["yaml의",{"2":{"51":1,"394":1,"518":1}}],["yamlgemini",{"2":{"11":1,"148":1,"604":1}}],["yaml에서",{"2":{"11":1,"253":1,"462":1,"463":1,"464":1,"465":1,"605":1,"671":1,"869":1,"892":1,"995":1}}],["yyyymmdd",{"2":{"2209":1,"2210":2,"2242":2,"2248":1,"2303":2}}],["yyyymmddhhmmss",{"2":{"2208":1,"2240":1}}],["yyyy",{"2":{"558":2,"2006":1,"2241":1,"2246":1,"2247":1}}],["y=",{"2":{"197":3}}],["y",{"2":{"67":3,"742":1,"1209":2,"1211":1,"1213":1,"1219":2,"1240":2,"1243":1,"1250":1,"1273":1,"1283":2,"1299":1,"1315":1,"1330":1,"1418":1,"1454":1,"2195":1,"2234":1}}],["yourservice",{"2":{"992":1}}],["your",{"2":{"11":1,"30":1,"32":1,"33":2,"148":1,"171":2,"255":2,"257":2,"258":3,"305":1,"390":1,"417":1,"482":2,"483":2,"484":3,"593":1,"604":1,"690":2,"834":2,"835":2,"836":3,"846":1,"1720":1}}],["파비콘",{"2":{"1667":1,"1834":1,"1836":1}}],["파싱",{"2":{"219":1,"635":1,"651":2,"813":1,"941":1,"942":1,"967":1}}],["파일의",{"2":{"772":1,"898":1,"1221":1,"1873":1,"2106":1,"2200":1,"2222":1,"2310":1}}],["파일에는",{"2":{"2300":1}}],["파일에서",{"2":{"490":1,"492":1,"501":1,"984":1,"1202":1,"1507":1,"1510":1,"1846":1}}],["파일에",{"2":{"230":1,"375":1,"613":1,"699":1,"744":1,"1718":1,"1732":1,"2298":1}}],["파일입니다",{"2":{"226":1,"452":1,"761":1,"763":1,"1267":1,"1687":1,"1688":1,"1689":1,"1690":1,"1836":1,"1879":1,"1880":1,"1895":1,"1896":1,"1898":1,"1900":1,"1901":1}}],["파일만",{"2":{"123":1}}],["파일은",{"2":{"92":1,"114":1,"200":1,"264":1,"331":1,"473":1,"507":1,"723":1,"746":1,"757":1,"844":1,"1197":1,"1212":1,"1284":1,"1316":1,"1544":1,"1642":1,"1744":1,"1745":1,"1844":1,"1846":1,"1848":2}}],["파일로",{"0":{"503":1},"2":{"46":1,"453":1,"468":1,"749":1}}],["파일이",{"2":{"46":1,"123":1,"154":1,"485":1,"497":1,"564":1,"750":1,"752":1,"754":1,"891":1,"1212":1,"1316":1,"1707":1,"1749":1,"1876":1,"1890":1,"2055":1,"2179":1}}],["파일을",{"2":{"46":1,"103":1,"263":1,"330":1,"343":1,"344":1,"453":1,"481":1,"503":1,"749":1,"843":1,"891":1,"1178":1,"1316":1,"1484":1,"1548":1,"1599":1,"1709":1,"1713":1,"1717":1,"1734":1,"1735":1,"1847":1,"1848":1,"2056":1,"2218":1,"2267":1}}],["파일명에",{"2":{"1848":1}}],["파일명과",{"2":{"1612":1}}],["파일명이",{"2":{"1281":1,"1342":1,"1546":1,"1563":1}}],["파일명을",{"2":{"92":1,"1848":1}}],["파일명으로",{"2":{"50":1,"649":1,"661":1}}],["파일명",{"0":{"50":1,"659":1,"660":1,"661":1,"1576":1},"1":{"660":1,"661":1},"2":{"45":3,"46":1,"50":2,"98":1,"103":1,"122":1,"651":1,"665":1,"1612":1,"1781":1,"1848":1,"2218":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1}}],["파일들입니다",{"2":{"1851":1}}],["파일들은",{"2":{"1833":1}}],["파일들이",{"2":{"1673":1,"1675":1,"1676":1,"1683":1,"1684":1,"1685":1,"1819":1,"1821":1,"1822":1,"1824":1,"1833":1,"1839":1,"1908":1,"1925":1}}],["파일들을",{"2":{"1563":1}}],["파일들",{"2":{"44":1,"651":1,"1865":1}}],["파일과",{"2":{"43":1,"1137":1}}],["파일",{"0":{"11":1,"40":1,"43":1,"46":1,"47":1,"48":1,"92":1,"103":1,"122":1,"152":1,"153":1,"155":1,"156":1,"157":1,"165":1,"225":1,"233":1,"242":1,"243":1,"263":1,"264":1,"283":1,"318":1,"319":1,"330":1,"331":1,"341":1,"360":1,"373":1,"374":1,"375":1,"387":1,"409":1,"414":1,"442":1,"443":1,"450":1,"481":1,"490":1,"494":1,"588":1,"604":1,"624":1,"626":1,"645":1,"650":1,"651":1,"652":1,"653":1,"663":1,"664":1,"679":1,"694":1,"746":1,"748":1,"753":1,"760":1,"772":1,"773":1,"843":1,"844":1,"875":1,"890":1,"892":1,"893":1,"895":1,"984":1,"1000":1,"1005":1,"1010":1,"1014":1,"1019":1,"1025":1,"1032":1,"1039":1,"1049":1,"1051":1,"1053":1,"1057":1,"1068":1,"1076":1,"1081":1,"1087":1,"1095":1,"1102":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1135":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1179":1,"1212":1,"1268":1,"1280":1,"1281":1,"1326":1,"1342":1,"1378":1,"1394":1,"1403":1,"1412":1,"1423":1,"1432":1,"1438":1,"1443":1,"1448":1,"1457":1,"1472":1,"1518":1,"1519":1,"1541":1,"1542":1,"1544":1,"1545":1,"1557":1,"1558":1,"1563":1,"1599":1,"1602":1,"1624":1,"1628":1,"1642":1,"1686":1,"1691":1,"1735":1,"1825":1,"1826":1,"1827":1,"1828":1,"1835":1,"1843":1,"1846":1,"1850":1,"1852":1,"1859":1,"1869":1,"1870":1,"1878":1,"1985":1,"2036":1,"2037":1,"2111":1,"2129":1,"2201":1,"2217":1,"2264":1,"2269":1,"2285":1,"2299":1},"1":{"41":1,"42":1,"43":1,"44":2,"45":2,"46":1,"47":1,"48":2,"49":2,"50":2,"51":1,"52":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"153":1,"154":2,"155":2,"156":1,"157":1,"158":2,"159":1,"226":1,"319":1,"320":1,"361":1,"362":1,"363":1,"374":1,"443":1,"444":1,"445":1,"446":1,"451":1,"452":1,"453":1,"482":1,"483":1,"484":1,"625":1,"626":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":2,"652":2,"653":1,"654":2,"655":2,"656":2,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"680":1,"747":1,"748":1,"749":2,"750":2,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":2,"762":1,"763":1,"764":1,"765":1,"766":1,"773":1,"774":1,"775":1,"876":1,"877":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":2,"892":2,"893":1,"894":2,"895":1,"896":2,"897":1,"898":1,"899":1,"1136":1,"1137":1,"1138":1,"1139":1,"1140":1,"1542":1,"1543":2,"1544":2,"1545":1,"1546":2,"1547":2,"1548":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1687":1,"1688":1,"1689":1,"1690":1,"1826":1,"1827":1,"1828":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1844":1,"1845":1,"1846":1,"1851":1,"1852":1,"1853":1,"1854":1,"1855":1,"1860":1,"1861":1,"1862":1,"1871":1,"1872":1,"1879":1,"1880":1,"1986":1,"1987":1,"2037":1,"2038":2,"2039":2,"2040":2,"2041":2,"2042":1,"2043":1,"2044":1,"2045":1,"2218":1,"2265":1,"2266":1,"2267":1,"2268":1,"2269":1,"2270":1},"2":{"26":1,"40":1,"44":1,"45":10,"46":7,"48":1,"51":4,"61":1,"97":1,"98":2,"103":1,"108":1,"114":1,"119":2,"123":1,"130":1,"141":1,"152":1,"158":1,"167":1,"168":1,"180":1,"200":1,"201":1,"283":1,"341":1,"375":1,"386":1,"387":1,"392":1,"396":2,"397":1,"415":1,"419":1,"429":1,"434":2,"437":3,"439":1,"471":1,"478":2,"494":1,"497":1,"500":1,"514":1,"517":2,"519":1,"520":1,"523":1,"549":2,"551":6,"554":1,"557":2,"561":2,"564":1,"566":1,"568":1,"577":1,"588":3,"625":1,"630":3,"645":1,"646":2,"648":4,"649":7,"651":6,"652":6,"654":1,"658":2,"663":3,"664":1,"665":2,"666":2,"680":1,"688":1,"704":2,"709":1,"711":1,"715":1,"722":1,"723":1,"724":1,"747":3,"763":2,"771":1,"874":1,"875":1,"878":3,"879":2,"882":1,"883":1,"891":1,"892":1,"896":3,"899":1,"927":1,"936":1,"999":1,"1042":1,"1139":3,"1140":2,"1180":1,"1193":1,"1212":1,"1217":1,"1221":1,"1275":1,"1316":1,"1435":1,"1548":1,"1563":1,"1571":1,"1599":1,"1606":1,"1621":1,"1667":2,"1674":1,"1707":1,"1734":1,"1758":1,"1768":2,"1770":4,"1772":1,"1773":2,"1780":1,"1781":2,"1785":2,"1794":1,"1795":1,"1796":1,"1802":1,"1803":1,"1804":1,"1805":1,"1817":1,"1820":1,"1834":1,"1847":1,"1848":1,"1861":1,"1871":1,"1905":1,"1926":3,"1931":1,"2023":3,"2111":1,"2127":1,"2129":1,"2173":2,"2218":1,"2233":1,"2256":1,"2262":1,"2263":1,"2265":1,"2269":1}}],["파라미터와",{"2":{"121":1}}],["파라미터를",{"2":{"120":1}}],["파라미터는",{"2":{"119":1}}],["파라미터가",{"2":{"46":1}}],["파라미터명은",{"2":{"38":1}}],["파라미터명",{"2":{"38":1}}],["파라미터명과",{"2":{"30":1}}],["파라미터로",{"2":{"33":1,"105":1,"106":1,"185":1,"186":1,"713":1,"714":1}}],["파라미터",{"0":{"33":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"104":1,"105":1,"106":1,"107":1,"179":1,"184":1,"185":1,"186":1,"187":1,"708":1,"712":1,"713":1,"714":1,"715":1},"1":{"105":1,"106":1,"107":1,"108":2,"109":2,"110":1,"111":1,"185":1,"186":1,"187":1,"188":2,"189":2,"190":1,"191":1,"713":1,"714":1,"715":1,"716":1},"2":{"9":1,"17":1,"30":2,"31":2,"32":2,"33":1,"34":1,"43":1,"45":1,"46":1,"56":1,"57":1,"65":1,"76":3,"77":2,"78":1,"92":1,"94":1,"96":1,"99":1,"102":1,"103":1,"119":1,"120":1,"121":1,"179":1,"197":1,"199":1,"216":1,"421":1,"643":1,"651":1,"663":1,"670":4,"708":1,"859":1,"863":2,"872":1,"888":1,"1064":1,"1103":1,"1106":1,"1215":1,"1216":1,"1217":1,"1382":1,"1416":1,"1418":2,"1426":1,"1460":1,"1475":1,"1476":1,"1477":1,"1609":1,"1720":1,"2204":1,"2205":1,"2207":1,"2208":1,"2209":1,"2210":1,"2212":1,"2214":1,"2216":1,"2218":1,"2220":1,"2221":1,"2231":1,"2232":1,"2233":1,"2258":1,"2259":1,"2260":1,"2261":1,"2267":1,"2268":1,"2287":1,"2288":1,"2290":1,"2292":1,"2302":1,"2303":1,"2304":1,"2305":1}}],["설치부터",{"2":{"1759":1}}],["설치됩니다",{"2":{"1708":1}}],["설치가",{"2":{"1708":1}}],["설치됨",{"2":{"1696":1}}],["설치",{"0":{"487":1,"1712":1,"1733":1,"1748":1,"2178":1},"1":{"488":1,"489":1},"2":{"466":1,"488":1,"489":1,"1695":1,"1696":1,"1697":1,"1706":1,"1712":1,"1733":1,"1748":1}}],["설계할",{"2":{"393":1}}],["설계",{"0":{"346":1,"367":1,"393":1,"1773":1},"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1},"2":{"346":1,"363":1,"393":1,"398":1,"404":1,"518":3}}],["설정되어",{"2":{"2143":1}}],["설정되어야",{"2":{"1707":1}}],["설정되었는지",{"2":{"1485":1}}],["설정되고",{"2":{"1380":1}}],["설정에",{"2":{"1272":1,"1273":1,"1282":1,"1780":1,"2234":1}}],["설정에서",{"2":{"25":1,"51":1,"665":1}}],["설정입니다",{"2":{"1166":1,"1187":1,"1894":1,"1897":1,"1899":1,"1902":1,"1903":1}}],["설정할",{"2":{"869":1,"971":1,"972":1,"1382":1,"1500":1}}],["설정하면",{"2":{"1735":1}}],["설정하는",{"2":{"475":1,"520":1,"1267":1}}],["설정하세요",{"2":{"474":1,"1710":1}}],["설정값",{"2":{"362":1}}],["설정키",{"2":{"362":1}}],["설정을",{"2":{"252":1,"360":1,"375":1,"387":1,"427":1,"473":1,"582":1,"615":1,"832":1,"1176":1,"1178":1}}],["설정은",{"2":{"232":1,"605":1}}],["설정이",{"2":{"87":1,"200":1,"1320":1,"1690":1,"1736":1,"1750":1,"1865":1}}],["설정됨",{"2":{"76":1}}],["설정합니다",{"2":{"11":1,"167":1,"195":1,"253":1,"289":1,"358":1,"371":1,"492":1,"494":1,"579":1,"580":1,"581":1,"892":1,"986":1,"1202":1,"1209":1,"1242":1,"1243":1,"1382":1,"1406":1,"1451":1,"1452":1,"1507":1,"1510":1,"1672":1,"1689":1,"1734":1,"1862":1,"2067":1,"2094":1}}],["설정",{"0":{"10":1,"11":1,"68":1,"122":1,"147":1,"164":1,"166":1,"170":1,"179":1,"195":1,"203":1,"232":1,"233":1,"234":1,"235":1,"237":1,"238":1,"239":1,"240":1,"242":1,"243":1,"244":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"262":1,"263":1,"266":1,"271":1,"286":1,"287":1,"295":1,"328":1,"329":1,"330":1,"343":1,"358":1,"360":1,"361":1,"369":1,"375":1,"387":1,"443":1,"445":1,"473":1,"475":1,"479":1,"481":1,"482":1,"483":1,"484":1,"486":1,"490":1,"491":1,"492":1,"493":1,"494":1,"520":1,"578":1,"603":1,"604":1,"605":1,"615":1,"617":1,"624":1,"626":1,"627":1,"657":1,"689":1,"708":1,"739":1,"748":1,"762":1,"770":1,"772":1,"773":1,"774":1,"790":1,"799":1,"820":1,"822":1,"823":1,"837":1,"840":1,"841":1,"842":1,"843":1,"850":1,"869":1,"870":1,"873":1,"889":1,"910":1,"918":1,"924":1,"968":1,"971":1,"972":1,"1001":1,"1160":1,"1165":1,"1167":1,"1182":1,"1186":1,"1188":1,"1189":1,"1196":1,"1198":1,"1200":1,"1203":1,"1204":1,"1209":1,"1233":1,"1248":1,"1266":1,"1269":1,"1270":1,"1283":1,"1364":1,"1484":1,"1490":1,"1686":1,"1713":1,"1730":1,"1734":1,"1735":1,"1742":1,"1744":1,"1745":1,"1780":1,"1889":1,"2036":1,"2037":1,"2042":1},"1":{"11":1,"69":1,"148":1,"167":1,"171":1,"204":1,"233":1,"234":1,"235":1,"236":2,"237":1,"238":1,"239":1,"240":1,"241":2,"242":1,"243":1,"244":1,"245":1,"253":1,"254":1,"255":2,"256":2,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":2,"264":2,"265":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":2,"273":2,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"287":1,"288":2,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":2,"297":2,"298":1,"299":1,"300":1,"301":1,"302":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"344":1,"345":1,"361":1,"362":2,"363":1,"370":1,"371":1,"476":1,"477":1,"478":1,"479":1,"480":2,"481":2,"482":3,"483":3,"484":3,"485":2,"486":1,"487":2,"488":2,"489":2,"490":2,"491":1,"492":2,"493":2,"494":2,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"579":1,"580":1,"581":1,"582":1,"583":1,"604":1,"605":1,"616":1,"617":1,"618":2,"619":2,"620":2,"621":2,"622":2,"623":2,"624":1,"625":2,"626":2,"627":1,"628":1,"658":1,"690":1,"740":1,"749":1,"750":1,"763":1,"773":1,"774":1,"775":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"838":1,"843":1,"844":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1183":1,"1184":1,"1187":1,"1188":1,"1189":1,"1190":1,"1191":1,"1192":1,"1193":1,"1194":1,"1195":1,"1197":1,"1198":1,"1199":2,"1200":2,"1201":2,"1202":1,"1203":1,"1204":1,"1205":2,"1206":2,"1267":1,"1268":1,"1269":1,"1270":2,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":1,"1365":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1687":1,"1688":1,"1689":1,"1690":1,"1731":1,"1732":1,"1733":1,"1734":1,"1735":2,"1736":1,"1737":1,"1738":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":2,"1744":2,"1745":2,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1,"1890":1,"1891":1,"1892":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"1900":1,"1901":1,"1902":1,"1903":1,"1904":1,"1905":1,"1906":1,"2037":1,"2038":2,"2039":2,"2040":2,"2041":2,"2042":1,"2043":2,"2044":2,"2045":2},"2":{"25":2,"51":1,"76":2,"83":2,"87":1,"100":1,"179":2,"199":1,"211":1,"216":1,"220":1,"222":3,"230":1,"231":1,"233":2,"245":2,"260":1,"263":1,"265":2,"285":2,"302":1,"330":1,"342":1,"362":1,"375":2,"384":1,"387":1,"394":1,"396":1,"397":2,"415":1,"419":1,"434":1,"435":1,"437":4,"439":5,"443":4,"445":3,"451":2,"452":2,"453":2,"459":1,"460":1,"462":1,"463":1,"464":1,"465":1,"473":1,"474":1,"478":1,"510":1,"511":1,"515":2,"516":4,"520":6,"523":1,"549":1,"551":9,"552":1,"554":6,"561":1,"568":1,"581":2,"582":2,"596":1,"613":1,"614":1,"616":5,"618":7,"619":5,"620":5,"621":5,"622":1,"625":1,"628":3,"632":1,"644":1,"670":1,"671":2,"672":1,"675":1,"699":2,"708":2,"744":1,"747":4,"749":2,"750":2,"754":4,"759":1,"763":2,"766":2,"770":4,"771":1,"772":1,"773":4,"774":3,"803":1,"834":2,"835":1,"836":1,"838":1,"843":1,"917":2,"954":1,"974":1,"978":1,"987":1,"996":1,"997":1,"1020":1,"1163":1,"1197":1,"1199":1,"1236":1,"1248":2,"1250":1,"1307":1,"1321":1,"1343":1,"1354":1,"1363":1,"1416":1,"1424":1,"1426":1,"1433":1,"1434":1,"1454":1,"1665":1,"1667":4,"1673":1,"1676":5,"1688":2,"1689":1,"1690":1,"1710":1,"1735":1,"1744":1,"1745":1,"1759":1,"1763":2,"1772":1,"1780":6,"1785":2,"1794":1,"1816":2,"1817":8,"1822":5,"1849":2,"1858":4,"1865":2,"1876":1,"1877":2,"1879":4,"1880":1,"1890":1,"1891":2,"1893":1,"1896":3,"1898":4,"1899":3,"1900":3,"1901":2,"1905":2,"1906":3,"1911":1,"1913":2,"1914":1,"1916":1,"1965":1,"1966":1,"1967":1,"2039":1,"2040":1,"2041":1,"2044":1,"2045":1,"2160":2,"2163":1,"2184":1,"2185":1,"2187":2}}],["설명2",{"2":{"1035":1}}],["설명1",{"2":{"1035":1}}],["설명합니다",{"2":{"174":1,"207":1,"315":1,"339":1,"343":1,"346":1,"354":1,"360":1,"399":1,"405":1,"411":1,"416":1,"420":1,"436":1,"548":1,"900":1,"938":1,"988":1,"991":1,"994":1,"999":1,"1521":1,"1596":1}}],["설명해주세요",{"2":{"9":1}}],["설명",{"0":{"450":1,"559":1,"569":1,"1668":1,"1818":1,"1863":1},"1":{"451":1,"452":1,"453":1,"560":1,"561":1,"562":1,"563":1,"564":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1864":1,"1865":1},"2":{"9":1,"17":1,"30":2,"31":1,"32":1,"33":1,"34":1,"43":1,"45":1,"46":1,"56":1,"57":1,"65":1,"76":1,"77":1,"78":1,"79":1,"80":1,"92":1,"99":1,"100":1,"101":1,"102":1,"103":1,"119":1,"120":1,"121":1,"607":1,"862":2,"863":1,"864":1,"1026":1,"1033":1,"1035":1,"1380":1,"1667":1,"1758":1,"1816":1}}],["lzstring",{"2":{"2293":1}}],["lzstring을",{"2":{"2293":1}}],["layout",{"2":{"1756":1}}],["layouts",{"0":{"1929":1,"2027":1},"1":{"2028":1,"2029":1,"2030":1},"2":{"1081":1,"1083":1,"1102":1,"1105":1,"1161":2,"1366":2,"1682":1,"1684":1,"1817":2,"1829":2,"1926":1,"1994":1}}],["label>점포코드",{"2":{"1989":1}}],["label>",{"2":{"1989":2}}],["label>거래처명",{"2":{"1989":1}}],["label",{"2":{"1026":1,"1722":3,"2195":2}}],["label=",{"2":{"1015":1,"1016":1,"1027":2,"1035":1,"1036":1,"1040":1,"1722":1}}],["lang=",{"2":{"1570":1,"1583":1,"1600":1,"1609":1,"1637":1,"1643":1,"1728":1}}],["lang3",{"0":{"929":1},"2":{"929":1}}],["langid",{"2":{"46":3,"65":1,"67":2,"76":2,"664":1,"742":1,"1946":1,"1957":1,"1958":2,"1969":1,"1981":1,"2267":2}}],["lang",{"2":{"44":1,"45":1,"197":3,"651":1,"1817":1,"1858":1,"1865":1,"1876":1,"1877":1,"1880":1,"1887":1,"1946":1,"1957":1,"1969":1,"1981":1}}],["lwt1a+ydhh8pkzjez+supdzo1deccgyaakjrjvqscbpxlq3ehpv5qgyvwwhcskl9fnkmmifmjfkiyckwqfqqx",{"2":{"211":1,"238":1,"790":1,"978":1}}],["legacy",{"2":{"1879":1}}],["let",{"2":{"1304":1,"1326":1,"1534":1,"1974":1}}],["lettuceconnectionfactory",{"2":{"290":1,"291":1,"619":3}}],["left",{"2":{"1034":2,"1035":3}}],["leftmargin=",{"2":{"197":1}}],["length",{"2":{"946":1,"1358":1}}],["leave",{"2":{"367":1}}],["level",{"2":{"164":1,"244":1,"1001":1}}],["lms",{"2":{"66":2,"737":2}}],["lts",{"2":{"1695":1}}],["lt",{"2":{"30":3,"31":1,"57":1,"601":1,"633":1,"1226":1,"1670":1,"2077":1}}],["lock",{"2":{"1748":1,"2172":1,"2178":1}}],["location",{"2":{"78":1,"2186":1}}],["localetext",{"2":{"1880":1,"1887":1}}],["locale",{"2":{"1879":1,"1880":2,"1882":2,"1886":3,"1887":2,"1898":3}}],["local",{"2":{"233":1,"443":1,"452":1,"473":1,"551":1,"626":1,"627":1,"750":1,"773":1}}],["localhost",{"2":{"34":1,"144":1,"239":2,"255":1,"257":1,"258":1,"288":2,"422":1,"482":1,"483":1,"484":1,"490":2,"493":3,"506":2,"518":1,"834":1,"835":1,"836":1,"850":2,"857":2,"866":1,"867":1,"921":1,"1180":3,"1183":2,"1194":1,"1202":3,"1492":1,"1713":3,"1714":1,"1734":3,"1736":1,"1741":1,"2151":1}}],["localstorage는",{"2":{"1252":1}}],["localstorage에",{"2":{"1239":1,"1251":1,"1420":1,"2125":1}}],["localstorage",{"2":{"17":1,"19":1,"76":1,"78":1,"84":1,"1236":1,"1251":1,"1629":1,"2086":1,"2087":1}}],["lookupconfig",{"2":{"1020":2}}],["lookupbox",{"0":{"1018":1,"2003":1},"1":{"1019":1,"1020":1},"2":{"1019":1,"1020":1,"1766":1,"1994":1,"2003":1}}],["lookup",{"0":{"1017":1,"2002":1},"1":{"1018":1,"1019":1,"1020":1,"2003":1},"2":{"1019":1,"1020":1,"1994":1,"2003":1}}],["lowermap",{"2":{"636":1}}],["lowerkeysetmap",{"2":{"636":2}}],["lombok",{"0":{"911":1},"1":{"912":1,"913":1,"914":1},"2":{"277":1,"519":1,"912":1}}],["loadinitialdata",{"2":{"2292":1}}],["loadingstore는",{"2":{"1393":1}}],["loadingstore",{"0":{"1392":1,"1912":1},"1":{"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1},"2":{"1011":3,"1272":1,"1273":2,"1275":1,"1311":2,"1394":1,"1399":5,"1609":4,"1613":1,"1615":3,"1675":1,"1724":4,"1762":1,"1788":2,"1817":1,"1909":1,"1912":4,"1920":4,"2001":4,"2123":1}}],["loading",{"0":{"1009":1,"2001":1},"1":{"1010":1,"1011":1},"2":{"1010":1,"1011":1,"1399":1,"1766":1,"1994":1}}],["loadfromindexeddb",{"0":{"2288":1},"2":{"2288":2,"2294":1}}],["loader",{"0":{"1838":1},"2":{"1667":1,"1834":1,"1838":1}}],["loadenv",{"2":{"1176":1}}],["loaddata",{"2":{"1609":3}}],["loadcomponent",{"2":{"1104":1,"1349":1}}],["loadrelateddata",{"2":{"1036":1}}],["loadoptions",{"2":{"1029":2}}],["load",{"2":{"180":1,"199":1,"709":1}}],["logyn",{"2":{"1413":1,"1918":1}}],["loglist",{"2":{"1299":1,"1330":1,"1413":1,"1419":1,"1918":2}}],["logging",{"0":{"574":2,"586":2},"2":{"439":2,"554":2,"630":1,"668":1,"673":1}}],["logger",{"2":{"400":3,"417":2,"540":3,"543":2}}],["logmanager",{"2":{"400":1,"417":1,"540":1,"543":1}}],["logback",{"0":{"166":1,"167":1,"763":1},"1":{"167":1},"2":{"551":2,"747":1,"763":2}}],["logopath",{"2":{"1845":2}}],["logourl",{"2":{"1837":2}}],["logout과",{"2":{"79":1}}],["logout",{"2":{"78":2,"241":1,"1249":1,"1388":1,"1895":1}}],["logo",{"0":{"1837":1},"2":{"92":2,"97":2,"109":2,"189":2,"1162":2,"1667":1,"1834":1,"1837":4,"1844":2,"1845":2,"1847":3}}],["logincheck와",{"2":{"77":1}}],["logincheck",{"2":{"76":2,"82":1,"241":2,"347":1,"823":1,"971":1,"972":1}}],["login",{"0":{"1794":1,"1936":1},"2":{"74":1,"76":2,"77":1,"78":3,"79":1,"80":1,"82":1,"241":6,"347":1,"823":2,"971":2,"972":2,"1083":3,"1229":1,"1248":2,"1249":1,"1262":1,"1276":1,"1295":1,"1331":1,"1337":1,"1360":1,"1366":4,"1387":2,"1388":1,"1389":1,"1794":1,"1895":5,"1934":1,"2151":1}}],["logstore는",{"2":{"1411":1}}],["logstore",{"0":{"1410":1,"1918":1},"1":{"1411":1,"1412":1,"1413":1,"1414":1,"1415":1,"1416":1,"1417":1,"1418":1,"1419":1,"1420":1},"2":{"1314":2,"1412":1,"1419":5,"1535":3,"1675":1,"1762":1,"1909":1,"1918":4}}],["logstore에",{"2":{"1272":1}}],["logs",{"0":{"564":1},"2":{"34":2,"165":3,"244":1,"507":3,"549":1,"558":1,"763":3,"1000":3,"1419":1,"1918":1}}],["log",{"0":{"2197":1,"2304":1,"2320":1},"2":{"9":1,"30":1,"56":1,"57":1,"67":2,"120":1,"121":1,"165":5,"244":1,"507":5,"558":5,"763":5,"1000":5,"1035":1,"1036":1,"1059":1,"1279":1,"1299":3,"1330":3,"1341":1,"1361":1,"1385":1,"1434":1,"1516":1,"1523":1,"1554":1,"1566":2,"1574":1,"1593":1,"1635":1,"1725":1,"2220":1,"2224":1,"2304":1}}],["like",{"2":{"1752":1}}],["light",{"2":{"1647":1,"1898":1,"2142":1}}],["lifecycle",{"2":{"1613":1}}],["lib",{"0":{"759":1},"2":{"280":2,"437":1,"485":1,"551":1,"747":1,"759":2,"834":1,"1684":1}}],["line",{"2":{"1649":1,"1752":1,"2062":1}}],["linux는",{"2":{"665":1}}],["linux",{"0":{"489":1},"2":{"471":1,"549":1,"1701":1}}],["linux의",{"2":{"243":1,"494":1}}],["links",{"2":{"942":1}}],["linkfileupdateprocess",{"2":{"649":1}}],["linkdeleteprocess",{"2":{"649":1}}],["linkaddprocess",{"2":{"649":1}}],["link",{"2":{"45":6,"46":6,"48":1,"654":1,"1281":6,"1342":6,"1519":6,"1546":6,"1836":1,"2269":6}}],["limiting",{"0":{"804":1,"975":1}}],["limit",{"2":{"12":1,"613":1}}],["listdata",{"0":{"2193":1},"2":{"31":3}}],["list",{"2":{"5":1,"30":2,"31":1,"33":2,"57":1,"178":2,"199":2,"313":1,"317":2,"332":1,"412":1,"418":3,"545":1,"633":1,"648":1,"663":1,"708":2,"958":2,"1609":3,"1754":1}}],["중앙",{"2":{"1653":1}}],["중단",{"2":{"1331":1}}],["중단됩니다",{"2":{"31":1}}],["중일",{"2":{"1264":1}}],["중이면",{"2":{"1261":1,"1276":1,"1336":1}}],["중요한",{"2":{"1252":1,"1306":1,"1535":1,"1539":1}}],["중복",{"2":{"665":1,"1353":2}}],["중인지",{"2":{"510":1,"511":1}}],["중인",{"2":{"509":1,"1295":1,"1491":1,"1747":1}}],["중입니다",{"2":{"126":1}}],["중",{"2":{"9":1,"30":1,"253":1,"461":1,"466":1,"480":1,"522":1,"564":1,"995":1,"1264":1,"1609":1,"1614":1,"1748":1,"2076":1,"2174":1}}],["e002",{"2":{"2258":1}}],["e001",{"2":{"2258":1,"2268":1}}],["ebadminestimationstatistics",{"0":{"1955":1},"2":{"1942":1}}],["etedurequest",{"0":{"1953":1},"2":{"1942":1}}],["e2e",{"0":{"2148":1},"1":{"2149":1,"2150":1,"2151":1,"2152":1},"2":{"1782":1,"2150":1,"2152":1}}],["eslintrc",{"2":{"1744":1}}],["eslint를",{"2":{"1744":1}}],["eslint",{"0":{"1744":1},"2":{"1699":1,"2059":1,"2180":1}}],["estimation",{"0":{"1954":1},"1":{"1955":1},"2":{"1679":1,"1817":1,"1942":1}}],["ess000001",{"2":{"1347":1,"1348":1,"1475":1}}],["esswelfareservice",{"2":{"527":1}}],["esswelfaremapper",{"2":{"527":1}}],["esswelfarecontroller",{"2":{"527":1}}],["essauthservice",{"2":{"527":1}}],["essauthmapper",{"2":{"527":1}}],["essadminservice",{"2":{"527":1}}],["essadminmapper",{"2":{"527":1}}],["essadmincontroller",{"2":{"527":1}}],["ess와",{"2":{"454":1}}],["esscomutil",{"2":{"527":1}}],["esscomservice",{"2":{"388":1,"527":1}}],["esscomcontroller",{"2":{"388":1,"421":1,"449":1,"527":1,"859":1}}],["esscommapper",{"2":{"317":1,"319":1,"320":1,"332":1,"333":1,"388":1,"527":1,"752":1,"753":1}}],["esslogincontroller",{"2":{"388":1,"527":1}}],["ess",{"0":{"142":1,"388":1,"440":2,"526":1,"555":2,"1662":1,"1679":1,"1799":1,"1940":1},"1":{"527":1,"528":1,"529":1,"530":1,"531":1,"532":1,"1800":1,"1801":1,"1802":1,"1803":1,"1804":1,"1805":1,"1806":1,"1941":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"2":{"73":1,"116":1,"128":1,"130":2,"145":1,"165":2,"317":1,"319":1,"320":1,"329":1,"333":1,"370":1,"371":1,"388":2,"407":1,"408":1,"431":1,"434":2,"437":2,"440":1,"444":2,"449":1,"451":2,"454":2,"507":2,"521":1,"527":1,"551":4,"555":1,"558":3,"752":2,"753":1,"763":2,"910":1,"1000":2,"1106":1,"1347":1,"1348":3,"1368":1,"1370":2,"1475":1,"1560":1,"1598":2,"1599":2,"1603":1,"1606":1,"1607":2,"1621":1,"1622":2,"1625":1,"1652":1,"1653":1,"1679":1,"1717":2,"1718":1,"1778":1,"1779":1,"1800":1,"1802":1,"1803":1,"1804":1,"1805":1,"1806":1,"1817":3,"1853":1,"1855":1,"1858":2,"1864":1,"1941":1,"1942":1,"1946":1,"1957":1,"1958":1,"2318":1}}],["edge",{"2":{"1700":1}}],["education",{"0":{"1952":1},"1":{"1953":1},"2":{"1679":1,"1817":1,"1942":1}}],["edit",{"2":{"1435":1}}],["editable",{"2":{"1043":1,"1064":1,"1077":1}}],["erp",{"0":{"1807":1,"1964":2},"1":{"1808":1,"1809":1,"1810":1,"1965":2,"1966":2,"1967":2},"2":{"1663":1,"1680":2,"1779":1,"1808":1,"1809":1,"1817":1,"1962":2}}],["err",{"2":{"1538":2}}],["errstatus",{"2":{"1295":1,"1331":1}}],["errorheader",{"2":{"1994":1}}],["errorhandler",{"2":{"1538":1}}],["error001",{"2":{"67":1}}],["error",{"2":{"30":4,"32":1,"33":1,"37":1,"67":3,"138":1,"400":1,"540":1,"829":1,"830":1,"1029":3,"1258":2,"1273":2,"1276":3,"1279":4,"1286":2,"1288":1,"1294":2,"1295":2,"1296":3,"1297":2,"1298":4,"1299":1,"1300":9,"1303":3,"1304":2,"1305":10,"1319":2,"1330":1,"1331":2,"1332":2,"1333":3,"1334":4,"1337":1,"1338":2,"1341":4,"1387":3,"1418":1,"1516":3,"1523":4,"1525":2,"1526":3,"1527":2,"1528":4,"1529":3,"1530":2,"1532":10,"1533":6,"1534":2,"1535":6,"1536":8,"1537":4,"1538":6,"1554":1,"1556":3,"1567":4,"1568":3,"1609":3,"1614":3,"1720":3,"1789":1,"1994":1}}],["echarts",{"0":{"2072":1,"2102":1},"2":{"1658":1,"1777":1,"2072":1,"2102":1}}],["econnaborted",{"2":{"1286":1,"1296":1,"1333":1,"1529":1}}],["eclipse로",{"2":{"501":1}}],["eclipse",{"0":{"501":1},"2":{"460":1,"466":1}}],["event=",{"2":{"1592":1}}],["event",{"2":{"1072":8,"1440":1,"2146":1}}],["element",{"2":{"1580":1}}],["elements",{"2":{"942":1}}],["else",{"2":{"17":1,"67":1,"1279":1,"1300":2,"1305":1,"1315":1,"1316":1,"1341":1,"1360":1,"1516":1,"1523":1,"1532":1,"1554":1,"1609":1}}],["euflzxie8snhylkutuaclfkjlec+1qqib3wkbghl+wk8raodlimsaqgbdofomc",{"2":{"211":1,"238":1,"790":1,"978":1}}],["embed",{"2":{"2112":1,"2130":1}}],["emitted",{"2":{"2146":1}}],["emit",{"2":{"1573":1,"1583":1,"1613":1}}],["emits",{"0":{"1573":1},"2":{"1583":1,"1613":1}}],["empty",{"2":{"2156":1}}],["empname",{"2":{"1609":1,"1974":1}}],["empcode",{"0":{"2268":1},"2":{"1609":1,"1946":1,"1957":1,"1958":2,"1974":1,"2025":1,"2268":1}}],["employee",{"2":{"1609":3,"1662":1,"1679":1,"1864":1,"1941":1}}],["employeelist",{"2":{"1347":2,"1348":3,"1475":1}}],["empimg",{"2":{"119":1,"122":1,"243":1,"494":1,"658":1}}],["emp",{"2":{"92":1,"95":1,"111":2,"119":5,"122":2,"191":1,"229":1,"243":1,"494":1,"658":1,"1946":1,"1957":1,"1969":4,"2025":1}}],["email",{"2":{"65":1,"66":1,"171":1,"249":1,"690":1,"696":1,"1278":1}}],["enter=",{"2":{"1989":2}}],["entries",{"2":{"1316":1}}],["eng",{"2":{"1879":4,"1882":1,"1884":1,"1885":1,"1886":1}}],["engine",{"2":{"197":1}}],["envvite",{"2":{"1183":1,"1184":1,"1202":1,"1713":1}}],["env",{"0":{"1177":1,"1183":1,"1184":1,"1689":1,"2040":1},"1":{"1178":1,"1179":1,"1180":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1},"2":{"1176":1,"1178":1,"1179":4,"1180":1,"1181":1,"1189":3,"1200":3,"1202":1,"1507":1,"1510":1,"1667":1,"1707":1,"1713":1,"1734":2,"1735":4,"1749":1,"1780":1,"1816":1,"1845":1,"2179":1}}],["environment",{"2":{"459":1}}],["en",{"2":{"320":1,"333":1,"413":1,"546":1,"753":1}}],["enabled",{"2":{"869":1}}],["enablewebsecurity",{"2":{"620":1}}],["enable",{"2":{"171":1,"690":1}}],["encode",{"2":{"663":1}}],["encodeuricomponent",{"2":{"45":1}}],["encoding",{"2":{"236":1,"946":1}}],["encoding=",{"2":{"197":1,"320":1,"333":1,"413":1,"546":1,"753":1}}],["encryptbinary",{"0":{"1217":1,"2233":1},"2":{"1212":1,"1316":1,"2233":1}}],["encryptobject",{"0":{"1215":1,"2231":1},"2":{"1211":1,"1212":1,"1220":2,"1315":1,"1316":1,"2231":1}}],["encrypteddata",{"2":{"1212":2,"1316":2}}],["encrypted",{"2":{"210":2,"211":2,"228":4,"595":2,"641":2,"786":2,"789":2,"977":2,"978":2,"1220":2,"2231":2,"2232":1,"2233":1}}],["encrypt",{"2":{"76":2,"210":1,"211":1,"228":1,"595":1,"641":1,"786":1,"789":1,"977":1,"978":1,"1209":1,"1211":1,"1219":1,"1240":1,"1243":1,"1244":1,"1246":1,"1250":1,"1273":1,"1283":1,"1315":1,"1454":1,"2234":1}}],["endpoint",{"2":{"400":2,"540":2,"989":1,"1279":1,"1297":1,"1300":1,"1303":1,"1304":1,"1338":1,"1341":1,"1418":1,"1515":2,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":2,"1536":1,"1537":1,"1538":1,"1551":1,"1556":1,"1567":1,"1614":1,"1720":1,"1789":1,"2069":1}}],["end",{"2":{"33":2,"98":1,"1033":1,"1782":2,"2149":2}}],["exists",{"2":{"896":1}}],["execute",{"2":{"872":1}}],["executeprocedure",{"2":{"178":1,"199":1,"305":1,"390":2,"417":1,"418":1,"593":1,"633":2,"704":1,"707":1,"846":1}}],["expect",{"2":{"2146":2,"2151":2,"2156":6,"2157":1}}],["expirydate",{"2":{"933":1}}],["expires",{"2":{"620":1}}],["exposedheaders",{"2":{"621":1}}],["export해야",{"2":{"2308":1}}],["export",{"2":{"1538":1,"1629":1,"1752":1,"1879":1,"1883":1,"1893":2,"1898":1,"1904":1,"1905":2,"1921":1,"1922":1,"2087":1,"2308":1}}],["exportreport",{"2":{"180":1,"199":1,"710":1}}],["exporter",{"2":{"180":4,"199":4,"710":4}}],["ex",{"2":{"620":3}}],["excludeduris",{"2":{"620":1,"822":1,"970":1}}],["excluded",{"2":{"241":2,"358":2,"394":1,"518":1,"823":1,"971":1,"972":1}}],["exceptionhandling",{"2":{"620":1}}],["exception",{"2":{"199":1,"400":1,"540":1,"601":1,"609":1,"610":1,"632":2,"989":1}}],["excel로",{"2":{"2258":1,"2259":1,"2260":1,"2261":1}}],["exceljs",{"0":{"2105":1,"2262":1},"2":{"1548":3,"1658":1,"2127":1,"2262":3}}],["exceljs를",{"2":{"1548":1,"2256":1}}],["exceldown",{"2":{"102":1,"183":1,"704":1,"722":1,"1435":1}}],["excel",{"0":{"102":1,"183":1,"722":1,"1548":1,"2104":1,"2127":1,"2255":1},"1":{"2105":1,"2106":1,"2256":1,"2257":1,"2258":1,"2259":1,"2260":1,"2261":1,"2262":1,"2263":1},"2":{"89":1,"102":3,"174":1,"175":1,"277":1,"429":1,"517":1,"701":1,"704":1,"722":2,"878":1,"879":1,"882":1,"883":1,"886":1,"1548":1,"1658":1,"1770":3,"1777":1,"2106":1,"2127":1,"2256":1,"2270":1}}],["extracttoken",{"2":{"672":1}}],["extensions",{"2":{"1751":1,"1754":1}}],["extension",{"0":{"1751":1},"1":{"1752":1,"1753":1,"1754":1},"2":{"466":1,"551":1}}],["extends",{"2":{"370":1,"400":1,"421":1,"451":1,"540":1,"600":1,"610":1,"632":1,"648":1,"672":1,"704":1,"728":1,"859":1}}],["ext",{"2":{"45":2,"46":3,"50":1,"651":1,"652":1,"664":1}}],["example",{"2":{"45":1,"65":1,"172":1,"698":1,"879":1,"1184":2,"1278":1,"2087":2}}],["examplestore",{"2":{"2087":1}}],["examples",{"0":{"0":1,"1751":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"1752":1,"1753":1,"1754":1}}],["eyjzdwiioijvu0vsmdaxiiwidg9rzw5fdhlwzsi6imfjy2vzcyisimlhdci6mtcwnda2ndgwmcwizxhwijoxnza0mdy1nzawfq",{"2":{"17":1}}],["eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9",{"2":{"17":1,"59":1,"76":1,"817":1,"1382":1}}],["e",{"2":{"9":1,"30":1,"31":1,"45":1,"67":1,"76":1,"120":1,"121":1,"137":1,"352":1,"400":3,"403":1,"540":3,"541":1,"610":1,"632":2,"651":1,"829":1,"830":1,"1949":1,"2025":1}}],["텍스트를",{"2":{"1880":1}}],["텍스트",{"2":{"9":1,"607":1,"1026":1,"1034":1,"1212":2,"1284":1,"1316":3,"1880":1,"1882":1,"2141":1}}],["텍스트입니다",{"2":{"9":1}}],["수동으로",{"2":{"1263":1,"1400":1,"1588":1}}],["수동",{"0":{"1220":1,"1263":1,"1588":1}}],["수도",{"2":{"1007":1,"1016":1}}],["수를",{"2":{"804":1,"975":1}}],["수행합니다",{"2":{"1208":1,"1733":1,"2091":1,"2138":1}}],["수행",{"2":{"671":1,"1724":1}}],["수신",{"2":{"66":1,"1797":1}}],["수정해야",{"2":{"1848":1}}],["수정하면",{"2":{"1493":1}}],["수정하세요",{"2":{"243":1,"494":1,"1713":1}}],["수정할",{"2":{"121":1,"1044":1}}],["수정합니다",{"2":{"121":1,"481":1,"490":1}}],["수정된",{"2":{"45":1,"121":2}}],["수정",{"0":{"121":1,"481":1,"490":1},"1":{"482":1,"483":1,"484":1},"2":{"43":1,"45":2,"49":1,"121":2,"123":1,"649":1,"651":1,"655":1,"1435":1,"1969":1,"1982":1,"2106":1,"2127":1,"2171":1,"2173":1}}],["수",{"0":{"2056":1,"2184":1,"2185":1,"2186":1},"2":{"9":1,"12":2,"43":1,"57":1,"60":1,"66":2,"71":1,"129":1,"144":1,"175":1,"252":1,"388":1,"389":1,"480":1,"514":1,"519":1,"521":1,"613":2,"618":1,"735":2,"744":1,"832":1,"846":1,"857":1,"866":1,"867":1,"869":1,"870":1,"971":1,"972":1,"1031":1,"1041":1,"1044":1,"1064":1,"1098":1,"1121":1,"1154":1,"1159":1,"1176":1,"1221":1,"1289":1,"1304":1,"1359":1,"1362":1,"1390":1,"1467":1,"1500":1,"1527":1,"1533":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":2,"1548":1,"1588":1,"1591":1,"1635":1,"1643":1,"1646":1,"1659":1,"1708":1,"1719":1,"1725":1,"1736":1,"1741":1,"1756":1,"1770":1,"1785":1,"1846":1,"1848":1,"1886":1,"2057":1,"2077":1,"2079":1,"2173":1,"2175":1,"2181":1,"2200":1,"2309":1,"2310":1}}],["~",{"2":{"9":1}}],["응답합니다",{"2":{"135":1,"541":1}}],["응답에",{"2":{"67":1}}],["응답에서",{"2":{"56":2,"60":1}}],["응답이",{"2":{"23":1,"1286":1,"1296":1,"1333":1,"1529":1}}],["응답",{"0":{"135":1,"136":1,"137":1,"350":1,"401":1,"541":1,"817":1,"1213":1,"1274":1,"1279":1,"1322":1,"1324":1,"1327":1,"1328":1,"1339":1,"1341":1,"1516":1,"1546":1,"1549":1,"1553":1,"1554":1,"1555":1},"1":{"136":1,"137":1,"351":1,"352":1,"402":1,"403":1,"1275":1,"1276":1,"1323":1,"1324":1,"1325":2,"1326":2,"1327":2,"1328":1,"1329":2,"1330":2,"1331":2,"1332":2,"1333":2,"1334":2,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1340":1,"1341":1,"1342":1,"1343":1,"1550":1,"1551":1,"1552":1,"1553":1,"1554":2,"1555":2,"1556":1},"2":{"9":6,"17":3,"30":3,"31":2,"32":2,"33":3,"34":1,"45":2,"46":3,"56":2,"57":2,"67":3,"76":3,"77":1,"78":3,"79":1,"80":1,"83":1,"98":2,"99":1,"100":1,"101":1,"102":1,"103":1,"119":3,"120":3,"121":2,"379":1,"384":1,"393":1,"607":2,"632":6,"651":1,"652":1,"732":1,"864":2,"872":1,"1208":1,"1213":1,"1256":1,"1267":1,"1279":1,"1282":1,"1290":1,"1292":1,"1305":1,"1307":1,"1321":1,"1323":1,"1339":1,"1390":1,"1522":1,"1532":1,"1540":1,"1672":1,"1763":2,"1764":1,"1773":1,"1862":1,"2068":1,"2094":1,"2095":1,"2109":1,"2161":1}}],["응답의",{"2":{"9":1}}],["응답을",{"2":{"9":1,"607":1,"667":1,"975":1,"1274":1,"1323":1}}],["선택기를",{"2":{"1841":1}}],["선택기",{"2":{"1642":1,"1841":2,"2113":1,"2131":1}}],["선택을",{"2":{"1038":1}}],["선택됨",{"2":{"1036":1}}],["선택된",{"2":{"1026":2,"1033":2,"1035":2,"2015":1}}],["선택적",{"0":{"467":1,"696":1},"1":{"468":1,"469":1},"2":{"598":1,"672":1}}],["선택사항",{"0":{"466":1,"1604":1,"1719":1},"2":{"2205":1,"2208":1,"2218":1}}],["선택할",{"2":{"252":1,"832":1,"1154":1}}],["선택",{"0":{"480":1,"1021":1,"1074":1,"2004":1},"1":{"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1075":1,"1076":1,"1077":1,"2005":1,"2006":1,"2007":1},"2":{"9":3,"30":1,"31":1,"32":2,"33":1,"34":4,"44":1,"56":1,"66":5,"94":1,"95":1,"253":1,"368":1,"377":1,"406":1,"448":1,"455":1,"525":1,"872":1,"942":1,"1022":2,"1024":1,"1026":2,"1027":1,"1031":1,"1033":3,"1038":1,"1040":1,"1075":1,"1156":1,"1157":1,"1468":1,"1682":1,"1696":1,"1766":2,"1767":1,"1768":1,"1949":1,"1983":2,"1984":2,"2003":2,"2005":1,"2006":2,"2007":2,"2009":1,"2010":1,"2015":2,"2026":1,"2099":1,"2119":1,"2141":1}}],["전략을",{"2":{"1848":1}}],["전반에서",{"2":{"1770":1,"1820":1,"1868":1,"1993":1,"2200":1}}],["전후에",{"2":{"1356":1}}],["전파",{"2":{"1331":1}}],["전",{"2":{"1318":1,"1320":1,"1534":1,"2091":1,"2138":1}}],["전환됩니다",{"2":{"1709":1}}],["전환합니다",{"2":{"1415":1,"1476":1}}],["전환",{"2":{"1090":1,"1356":1,"1357":1,"1361":3,"1480":1,"2091":1,"2138":1}}],["전역에서",{"2":{"1879":1}}],["전역으로",{"2":{"1846":1}}],["전역",{"0":{"1638":1,"1644":1},"2":{"632":2,"1638":1,"1644":1,"1762":1,"1766":1,"1840":2,"1861":1,"2001":1}}],["전용",{"2":{"630":3,"1026":1,"1756":1,"2030":1,"2310":1}}],["전에",{"2":{"367":1,"1271":1,"1309":1,"1357":1}}],["전체에서",{"2":{"1164":1,"1563":1}}],["전체",{"0":{"377":1,"437":1,"548":1,"1609":1,"1667":1,"1758":1,"1815":1},"1":{"549":1,"550":1,"551":1,"552":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"1816":1,"1817":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"1828":1,"1829":1,"1830":1,"1831":1},"2":{"109":1,"124":1,"364":1,"365":1,"436":1,"515":1,"516":1,"521":1,"548":1,"1082":1,"1090":1,"1242":1,"1247":1,"1596":1,"1692":1,"1770":1,"1778":2,"1866":1,"2194":1}}],["전화번호를",{"2":{"2324":1}}],["전화번호에",{"2":{"2322":1}}],["전화번호",{"0":{"2321":1},"1":{"2322":1,"2323":1,"2324":1},"2":{"66":2,"71":1,"210":1,"249":1,"744":1,"787":1,"977":1,"1015":1,"1766":1,"1999":2,"2323":1,"2332":1,"2333":1}}],["전달된",{"2":{"1288":1,"1298":1}}],["전달됩니다",{"2":{"105":1,"106":1,"185":1,"186":1}}],["전달합니다",{"2":{"77":1}}],["전달하는",{"2":{"38":1}}],["전달",{"0":{"1592":1},"2":{"30":1,"97":1,"108":1,"109":1,"713":1,"714":1,"798":1,"985":1,"1103":1}}],["전달할",{"2":{"9":1}}],["전송용",{"2":{"1270":1}}],["전송됩니다",{"2":{"357":1}}],["전송에",{"2":{"67":1}}],["전송되기",{"2":{"1271":1,"1309":1}}],["전송되지",{"2":{"60":1}}],["전송되므로",{"2":{"25":1}}],["전송을",{"2":{"25":1}}],["전송한",{"2":{"23":1}}],["전송",{"2":{"19":1,"25":1,"134":1,"732":1,"1226":1,"1227":2,"1259":1,"1269":1,"1270":1}}],["전송됨",{"2":{"17":1}}],["전송하고",{"2":{"9":1,"607":1}}],["필터에서",{"2":{"681":1}}],["필터는",{"2":{"670":1,"681":2}}],["필터를",{"2":{"394":1,"583":1,"795":1}}],["필터",{"0":{"223":1,"584":1,"667":1,"669":1,"674":1,"676":1,"795":1,"796":1,"797":1,"800":1,"802":1,"805":1,"973":1,"985":1},"1":{"224":1,"585":1,"586":1,"587":1,"668":1,"669":1,"670":2,"671":2,"672":2,"673":2,"674":1,"675":2,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"796":1,"797":1,"798":2,"799":2,"800":1,"801":2,"802":1,"803":2,"804":2,"805":1,"806":2,"807":1,"974":1,"975":1},"2":{"222":1,"230":2,"231":1,"428":1,"439":4,"516":2,"554":5,"568":1,"581":1,"583":4,"585":1,"616":1,"620":1,"622":4,"628":1,"644":1,"667":1,"668":4,"675":2,"676":1,"681":2,"682":1,"794":1,"819":1,"831":1,"987":1,"1880":1}}],["필터입니다",{"2":{"220":1,"224":1}}],["필터링합니다",{"2":{"2194":1}}],["필터링을",{"2":{"216":1}}],["필터링된",{"2":{"57":1}}],["필터링",{"2":{"57":1,"216":3,"217":1,"670":4,"678":1,"957":1,"958":1,"1150":1,"1770":1,"1945":1,"1969":1,"1981":2,"2099":1,"2119":1}}],["필드별",{"2":{"2013":1}}],["필드와",{"2":{"1316":1}}],["필드는",{"2":{"1212":1,"1284":1,"1316":1}}],["필드를",{"2":{"1045":1,"1288":1}}],["필드명",{"2":{"1026":2,"1033":2,"1034":1,"2216":2}}],["필드로",{"2":{"138":1,"1056":1}}],["필드들",{"2":{"121":1}}],["필드",{"0":{"1054":1,"1362":1},"1":{"1055":1,"1056":1,"1057":1,"1058":1,"1059":1,"1060":1},"2":{"9":1,"17":1,"30":1,"45":1,"56":1,"57":1,"67":1,"76":1,"78":1,"98":1,"120":1,"197":1,"1212":1,"1316":2,"1767":1,"1899":1,"2013":1}}],["필수값입니다",{"2":{"119":1}}],["필수",{"0":{"66":1,"67":1,"93":1,"458":1,"1180":1,"1694":1},"1":{"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"1695":1,"1696":1,"1697":1},"2":{"9":1,"30":1,"31":3,"32":1,"33":2,"34":1,"44":6,"46":4,"57":2,"66":7,"67":4,"76":3,"77":4,"93":1,"94":1,"103":1,"119":1,"120":3,"121":4,"459":1,"863":1,"1699":1}}],["필요할",{"2":{"2310":1}}],["필요하며",{"2":{"1707":1}}],["필요시",{"2":{"1359":1,"1535":1}}],["필요가",{"2":{"1289":2,"1400":1}}],["필요는",{"2":{"1263":1,"1390":1}}],["필요에",{"2":{"1044":1}}],["필요합니다",{"2":{"132":1,"200":1,"830":1,"1536":1}}],["필요한",{"2":{"60":1,"230":1,"354":1,"360":1,"375":1,"387":1,"394":1,"396":1,"523":1,"873":1,"1221":1,"1263":1,"1289":1,"1300":1,"1320":1,"1360":1,"1390":1,"1522":1,"1588":1,"1734":1,"1838":1,"1845":1,"1861":1,"2308":1}}],["필요",{"2":{"7":1,"15":1,"25":1,"28":1,"41":1,"45":2,"46":1,"48":1,"54":1,"63":1,"90":1,"117":1,"230":1,"358":1,"518":1,"613":1,"654":1,"681":1,"699":1,"971":1,"1320":1,"1525":1,"1706":2,"1873":1,"2222":1}}],["7일~30일",{"2":{"1227":1}}],["7일",{"2":{"20":1,"230":1,"811":1,"965":1}}],["7",{"0":{"504":1,"505":1,"506":1,"507":1,"590":1,"1721":1,"2219":1},"1":{"505":1,"506":1,"507":1,"1722":1,"1723":1,"2220":1,"2221":1},"2":{"9":2,"24":1,"471":1,"835":1,"836":1,"935":1,"1613":1,"1657":1,"1973":1,"2072":1,"2102":1,"2140":1,"2309":1}}],["02",{"2":{"2244":1}}],["0을",{"2":{"2066":1,"2135":1,"2279":1}}],["03",{"2":{"466":1}}],["04",{"2":{"459":2,"471":1,"1701":1}}],["0ubuntu120",{"2":{"459":2}}],["07",{"2":{"459":1}}],["0abb7ppc0xgezp1fti8bnjbv30a5sjchzfvcn+c4onifa85ogchol8aswaqtuj1wmpahs1ficbailexuqmz0mglys1g0e0w1zkuqvpwxkchf1roumtmahy0sqlw+xksds4nvxiltmmxpkm1jt8io",{"2":{"211":1,"238":1,"790":1,"978":1}}],["0y9adambuwmj2ot+xbm9iplziducdzgc1xlazmkf6isepo",{"2":{"211":1,"238":1,"790":1,"978":1}}],["005",{"2":{"2279":1}}],["000",{"2":{"1884":4,"2305":2}}],["00",{"2":{"33":3,"56":4,"59":2,"1884":1,"2241":2,"2247":2}}],["01일",{"2":{"2253":1}}],["01월",{"2":{"2252":1}}],["010",{"2":{"1949":1,"1999":1,"2322":1,"2323":1,"2324":1,"2332":1}}],["01087654321",{"2":{"67":1,"742":1}}],["01012345678",{"2":{"65":2,"67":1,"71":1,"731":1,"742":1,"2322":1,"2324":1}}],["01",{"2":{"33":5,"56":4,"59":2,"98":2,"106":2,"179":2,"186":2,"708":2,"835":1,"1725":2,"2207":8,"2239":4,"2241":2,"2244":1,"2245":2,"2246":2,"2247":2,"2249":2,"2252":1,"2253":1}}],["0",{"2":{"9":5,"34":1,"45":4,"56":2,"59":1,"67":1,"69":1,"197":6,"204":1,"268":1,"283":2,"288":2,"320":2,"333":2,"341":2,"413":2,"433":2,"459":3,"460":2,"465":1,"468":1,"490":2,"497":2,"503":2,"546":2,"557":2,"612":1,"663":1,"740":1,"753":2,"759":1,"835":1,"850":2,"855":1,"879":2,"881":2,"885":1,"908":1,"920":1,"929":1,"931":1,"944":1,"946":1,"948":1,"962":1,"1304":1,"1358":1,"1440":1,"1534":1,"1572":1,"1574":1,"1654":1,"1656":2,"1658":4,"1879":2,"2072":2,"2078":1,"2085":1,"2089":1,"2093":1,"2102":2,"2105":1,"2108":1,"2111":1,"2113":1,"2114":1,"2115":1,"2127":1,"2128":1,"2129":1,"2131":1,"2132":1,"2133":1,"2205":1,"2212":1,"2233":1,"2281":1}}],["질문을",{"2":{"607":1}}],["질문",{"0":{"2054":1},"1":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"9":2,"149":1,"570":1,"607":1,"950":1,"1785":1}}],["jum",{"2":{"1981":3,"1989":1}}],["juniversalchardet",{"0":{"943":1},"1":{"944":1,"945":1,"946":1},"2":{"944":1}}],["junit을",{"2":{"562":1}}],["job",{"2":{"1969":2}}],["jsexport",{"2":{"1752":1}}],["js를",{"2":{"1514":1}}],["js는",{"2":{"1267":1,"2200":1}}],["js의",{"2":{"1211":1,"1230":1,"1256":1,"1292":1,"1309":1,"1323":1,"1390":2,"1400":1,"1416":1,"1522":1,"1725":1,"1885":1,"2234":1}}],["jsx",{"2":{"1199":1,"2083":2}}],["js에서",{"2":{"1644":1,"1840":1,"1846":1,"1893":1,"1904":2,"2067":1,"2094":1,"2190":1,"2237":1,"2265":1,"2272":1,"2308":3,"2309":1,"2313":1,"2327":1}}],["js에",{"2":{"1197":1,"1365":1,"1602":1,"1624":1,"1905":1,"2090":1,"2136":1}}],["jsconfig",{"0":{"1163":1,"1690":1,"2041":1},"2":{"1160":1}}],["js와",{"2":{"1160":1,"1696":1}}],["js",{"0":{"1671":1,"1672":1,"1688":1,"1695":1,"1732":1,"1861":1,"1862":1,"1871":1,"1872":1,"1879":1,"1880":1,"1893":1,"1895":1,"1896":1,"1898":1,"1899":1,"1900":1,"1901":1,"1903":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1986":1,"1987":1,"2039":1,"2043":1,"2044":1,"2045":1,"2199":1},"1":{"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2222":1,"2223":1,"2224":1,"2225":1,"2226":1,"2227":1},"2":{"1011":1,"1029":1,"1072":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":2,"1167":1,"1188":1,"1209":1,"1219":1,"1220":1,"1233":1,"1242":1,"1250":1,"1268":1,"1278":1,"1303":1,"1378":1,"1382":1,"1385":1,"1387":2,"1388":1,"1389":1,"1394":1,"1399":1,"1403":1,"1409":1,"1412":1,"1419":1,"1423":1,"1426":1,"1428":1,"1432":1,"1434":1,"1438":1,"1440":1,"1443":1,"1445":1,"1448":1,"1454":1,"1457":1,"1460":1,"1463":1,"1464":1,"1468":2,"1472":1,"1475":1,"1480":1,"1515":1,"1535":1,"1538":1,"1562":1,"1576":2,"1609":2,"1613":1,"1630":1,"1632":1,"1635":1,"1667":3,"1674":2,"1675":8,"1676":1,"1691":2,"1695":2,"1709":2,"1718":1,"1720":1,"1724":2,"1732":2,"1759":1,"1770":1,"1781":1,"1816":1,"1817":16,"1820":2,"1822":1,"1827":2,"1828":1,"1830":2,"1838":1,"1846":1,"1853":2,"1855":1,"1858":2,"1861":2,"1877":2,"1880":1,"1887":1,"1891":10,"1898":3,"1904":4,"1905":3,"1909":8,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":2,"1921":1,"1926":1,"1958":1,"1978":2,"1986":1,"2001":1,"2069":1,"2087":1,"2124":1,"2156":2,"2157":1,"2201":1,"2285":1,"2287":1,"2298":1,"2299":1,"2300":1,"2308":1,"2309":1,"2310":1}}],["jsoup",{"0":{"939":1},"1":{"940":1,"941":1,"942":1},"2":{"940":1,"942":4}}],["jsondata",{"0":{"2195":1},"2":{"2005":2}}],["jsonsitecode",{"2":{"1973":1}}],["jsonserializer",{"2":{"297":3}}],["json에",{"2":{"1733":1,"1744":1,"1745":1}}],["jsonobject",{"2":{"732":2}}],["jsonmultifileupload",{"2":{"43":1,"45":1,"648":3,"663":1}}],["json",{"0":{"45":1,"866":1,"930":1,"961":1,"1163":1,"1211":1,"1687":1,"1690":1,"2038":1,"2041":1},"1":{"931":1,"932":1,"933":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1},"2":{"9":3,"17":4,"30":3,"31":3,"32":5,"33":7,"34":2,"36":1,"44":1,"45":5,"46":1,"51":1,"56":2,"57":2,"65":1,"67":2,"76":5,"77":1,"78":2,"79":1,"80":1,"92":1,"98":1,"106":1,"108":1,"109":1,"110":1,"111":1,"119":1,"120":3,"121":3,"136":1,"137":1,"139":2,"186":1,"188":1,"189":1,"190":1,"191":1,"216":1,"349":1,"351":1,"352":1,"393":1,"402":1,"403":1,"541":2,"607":2,"619":1,"632":2,"651":2,"663":2,"665":1,"670":2,"732":1,"801":1,"808":1,"817":1,"829":1,"830":1,"866":1,"869":2,"904":1,"923":1,"989":1,"1160":1,"1163":1,"1224":1,"1269":1,"1280":1,"1518":1,"1543":1,"1667":1,"1748":1,"1816":1,"1891":1,"2172":1,"2178":1,"2195":1,"2196":1,"2293":1}}],["jsr310",{"2":{"923":1}}],["jmimemagic",{"0":{"898":1},"2":{"898":2}}],["jdk",{"2":{"459":2}}],["jdbcurl",{"2":{"618":1}}],["jdbctype=cursor",{"2":{"322":1,"335":1,"336":1}}],["jdbctype=varchar",{"2":{"322":1,"323":1,"335":1,"336":1,"337":1}}],["jdbc",{"0":{"485":1},"2":{"255":3,"257":3,"258":2,"276":4,"462":2,"463":1,"464":1,"482":3,"483":3,"484":2,"485":1,"551":2,"759":4,"834":6,"835":4,"836":2}}],["jxlsview",{"2":{"883":2}}],["jxls",{"0":{"880":1},"1":{"881":1,"882":1,"883":1},"2":{"429":1,"517":1,"519":1,"630":1,"881":2}}],["jjwt",{"2":{"277":3,"780":1,"931":1,"932":3,"962":1}}],["jehbfpymo3bc6yydl226shgx0h3",{"2":{"211":1,"238":1,"790":1,"978":1}}],["jpg",{"2":{"122":1,"660":1}}],["jpeg",{"2":{"119":1}}],["jpsessioninfo에서",{"2":{"87":1}}],["jpsessioninfo",{"2":{"76":1}}],["jrpdfexporter",{"2":{"180":2,"199":2,"710":2}}],["jremptydatasource",{"2":{"180":1,"199":1,"709":1}}],["jrbeancollectiondatasource",{"2":{"179":2,"197":1,"199":2,"708":2}}],["jrxmlloader",{"2":{"180":1,"199":1,"709":1}}],["jrxmlstream",{"2":{"180":2,"199":2,"709":2}}],["jrxml",{"2":{"93":2,"112":1,"177":2,"180":2,"195":1,"199":1,"446":1,"551":1,"709":2,"711":2,"756":3,"757":2,"887":1}}],["jr",{"0":{"96":1,"98":1},"2":{"92":5,"93":2,"96":3,"97":6,"98":5,"99":1,"106":5,"108":1,"109":1,"110":1,"112":1,"179":2,"182":2,"183":1,"186":5,"188":1,"189":1,"190":1,"197":1,"199":1,"229":1,"708":2,"714":3,"715":2,"716":2,"721":2,"722":1}}],["jar",{"2":{"280":1,"462":1,"485":1,"551":1,"759":2,"834":1}}],["jackson",{"0":{"922":1},"1":{"923":1,"924":1},"2":{"277":1,"932":2}}],["javabean",{"2":{"953":1}}],["javatimemodule",{"2":{"924":1}}],["javatype=java",{"2":{"322":1,"335":1,"336":1}}],["javaimport",{"2":{"898":1,"942":1,"946":1,"954":1,"958":1}}],["javamailsender",{"0":{"692":1},"2":{"692":1,"693":1}}],["javamap",{"2":{"179":1,"300":1,"301":1,"309":1,"310":1,"418":1,"708":1,"846":1}}],["java에",{"2":{"370":1,"396":2,"407":1}}],["javaprivate",{"2":{"804":1,"975":1}}],["javapublic",{"2":{"670":1,"671":1,"672":1,"694":1}}],["javapackage",{"2":{"317":1}}],["javapost",{"2":{"182":1,"183":1,"229":1,"664":1,"721":1,"722":1,"742":1}}],["javalist",{"2":{"311":1}}],["javagenericjackson2jsonredisserializer",{"2":{"297":1}}],["javafactorybean",{"2":{"264":1}}],["javadatasource",{"2":{"256":1,"834":1,"840":1,"841":1}}],["javastringredisserializer",{"2":{"296":1}}],["javastring",{"2":{"217":1,"678":1,"933":1}}],["javascriptlet",{"2":{"2319":1}}],["javascriptgfvalidateresidentnumber",{"2":{"2331":1}}],["javascriptgfisempty",{"2":{"2329":1}}],["javascriptgfisdate",{"2":{"2221":1,"2330":1}}],["javascriptgfmobliephoneformat",{"2":{"2324":1}}],["javascriptgfcheckphonenumber",{"2":{"2323":1,"2332":1}}],["javascriptgfcheckphonehyphen",{"2":{"2322":1}}],["javascriptgfcameltosnakeupper",{"2":{"2316":1}}],["javascriptgfconverttimestamp",{"2":{"2247":1}}],["javascriptgfformidstr",{"2":{"2318":1}}],["javascriptgfformatdatewithsep",{"2":{"2245":1}}],["javascriptgfformatdatetimestring",{"2":{"2241":1}}],["javascriptgfformatdatetime",{"2":{"2240":1}}],["javascriptgfformatdatestring",{"2":{"2207":1,"2239":1}}],["javascriptgffillzeros",{"2":{"2279":1}}],["javascriptgfrremovecomma",{"2":{"2278":1}}],["javascriptgfgetround",{"2":{"2281":1}}],["javascriptgfgetnumber",{"2":{"2280":1}}],["javascriptgfgetthreecomma",{"2":{"2277":1}}],["javascriptgfgetcomma",{"2":{"2276":1}}],["javascriptgfsnaketocamel",{"2":{"2317":1}}],["javascriptgfsetnumber",{"2":{"2275":1}}],["javascriptgfsavetableasexcel",{"2":{"2259":1}}],["javascriptgfhtmlexceldown",{"2":{"2258":1}}],["javascriptgfdayformat",{"2":{"2249":1}}],["javascriptgfdiffdate",{"2":{"2243":1}}],["javascriptgftoday",{"2":{"2248":1}}],["javascriptgftimestamptodatestr",{"2":{"2246":1}}],["javascriptgftrim",{"2":{"2214":1,"2315":1}}],["javascriptgfnumberformat",{"2":{"2212":1,"2274":1}}],["javascriptsidebarstore",{"2":{"1461":1}}],["javascriptstate",{"2":{"1379":1,"1395":1,"1404":1,"1413":1,"1424":1,"1449":1,"1473":1}}],["javascriptsessionstore",{"2":{"1243":1,"1246":1,"1247":1}}],["javascriptsession",{"2":{"1240":1}}],["javascriptserver",{"2":{"1189":1,"1200":1}}],["javascriptrouter",{"2":{"1358":1,"1360":1,"1361":1}}],["javascriptreturn",{"2":{"1327":1}}],["javascriptresolve",{"2":{"1161":1,"1201":1}}],["javascriptuseloadingstore",{"2":{"1325":1,"1329":1}}],["javascriptuselogstore",{"2":{"1299":1,"1330":1}}],["javascripttry",{"2":{"1279":1,"1300":1,"1341":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1556":1,"1568":1,"1614":1,"1789":1}}],["javascriptawait",{"2":{"2261":1,"2267":1}}],["javascriptaxiosinstance",{"2":{"1273":1}}],["javascriptauthstore",{"2":{"1234":1,"1634":1}}],["javascriptautoimport",{"2":{"1205":1}}],["javascriptcatch",{"2":{"1262":1,"1305":1,"1532":1,"1533":1}}],["javascriptconfig",{"2":{"1317":1}}],["javascriptconst",{"2":{"9":1,"31":1,"56":1,"57":1,"76":1,"78":1,"98":1,"99":1,"120":1,"121":1,"1034":1,"1059":1,"1077":1,"1104":1,"1181":1,"1229":1,"1235":1,"1244":1,"1245":1,"1248":1,"1249":1,"1259":1,"1263":1,"1269":1,"1280":1,"1281":1,"1283":1,"1297":1,"1298":1,"1304":1,"1311":1,"1312":1,"1313":1,"1314":1,"1326":1,"1334":1,"1338":1,"1342":1,"1349":1,"1350":1,"1383":1,"1427":1,"1458":1,"1517":1,"1518":1,"1519":1,"1534":1,"1536":1,"1543":1,"1546":1,"1551":1,"1552":1,"1615":1,"1879":2,"1885":1,"1946":1,"1957":1,"1969":1,"1981":1,"2025":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2205":1,"2208":1,"2209":1,"2210":1,"2216":1,"2218":1,"2231":1,"2232":1,"2233":1,"2234":1,"2242":1,"2244":1,"2251":1,"2252":1,"2253":1,"2260":1,"2268":1,"2269":1,"2288":1,"2292":1,"2293":1,"2294":1,"2320":1}}],["javascriptcomponents",{"2":{"1206":1}}],["javascriptoriginalrequest",{"2":{"1260":1}}],["javascriptpersist",{"2":{"1251":1}}],["javascriptplugins",{"2":{"1199":1}}],["javascriptisrefreshing",{"2":{"1337":1}}],["javascriptif",{"2":{"1212":1,"1213":1,"1258":1,"1261":1,"1286":1,"1294":1,"1295":1,"1296":1,"1297":1,"1315":1,"1316":1,"1318":1,"1331":1,"1332":1,"1333":1,"1336":1,"1338":1,"1554":1,"2204":1,"2220":1}}],["javascriptimport",{"2":{"1209":1,"1220":1,"1233":1,"1242":1,"1278":1,"1303":1,"1382":1,"1426":1,"1434":1,"1440":1,"1445":1,"1460":1,"1468":1,"1475":1,"1515":1,"1535":1,"1547":1,"1548":1,"1629":1,"1630":1,"1632":1,"1644":1,"1838":1,"1840":1,"1841":1,"1842":1,"1846":1,"1861":1,"1879":1,"1880":1,"1886":1,"1893":1,"1898":1,"1904":2,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1922":1,"1958":1,"1986":1,"2001":1,"2069":1,"2124":1,"2146":1,"2147":1,"2151":1,"2156":1,"2157":1,"2262":1,"2287":1,"2309":1}}],["javascriptexport",{"2":{"1176":1,"1366":1,"1895":1}}],["javascriptbuild",{"2":{"1168":1,"1203":1}}],["javascriptwindow",{"2":{"1106":1}}],["javascript에서",{"2":{"25":1}}],["javascript",{"0":{"1564":1},"1":{"1565":1,"1566":1,"1567":1,"1568":1},"2":{"17":1,"30":2,"45":1,"46":1,"67":1,"103":1,"119":1,"1064":1,"1083":1,"1091":1,"1105":1,"1162":1,"1163":1,"1194":1,"1211":1,"1230":1,"1276":1,"1319":1,"1320":1,"1339":1,"1347":1,"1348":1,"1362":1,"1368":1,"1418":1,"1498":1,"1538":1,"1555":1,"1566":1,"1567":1,"1603":1,"1625":1,"1633":1,"1690":1,"1718":1,"1781":1,"1787":1,"1788":1,"1819":1,"1830":1,"1846":2,"1851":1,"1905":1,"1926":1,"1949":1,"2041":1,"2087":1,"2171":1,"2302":1,"2305":1,"2308":1}}],["java",{"0":{"270":1,"438":1,"451":1,"459":1,"553":1,"560":1,"562":1},"1":{"439":1,"440":1,"441":1,"554":1,"555":1,"556":1},"2":{"149":1,"154":1,"156":1,"158":1,"162":1,"172":1,"178":1,"180":1,"197":3,"199":1,"205":1,"210":1,"211":1,"213":1,"214":1,"219":1,"228":1,"248":1,"249":1,"250":1,"260":1,"270":2,"290":1,"291":1,"293":1,"294":1,"299":1,"305":1,"308":1,"313":1,"317":2,"329":1,"332":1,"356":1,"368":9,"370":1,"371":1,"388":4,"390":1,"400":1,"406":4,"407":1,"408":1,"412":1,"417":1,"421":1,"433":1,"434":1,"437":2,"439":5,"451":1,"452":1,"455":4,"459":5,"460":1,"466":1,"468":2,"478":2,"500":1,"501":2,"514":1,"527":13,"534":9,"540":1,"543":1,"545":1,"551":2,"552":2,"554":7,"560":1,"568":1,"570":1,"593":1,"594":1,"595":1,"598":4,"600":1,"601":1,"609":1,"610":1,"616":6,"618":1,"619":1,"620":1,"621":1,"622":1,"630":33,"632":1,"633":1,"636":1,"641":1,"646":2,"648":1,"649":1,"663":1,"668":5,"670":1,"675":1,"684":3,"692":1,"693":1,"696":1,"698":1,"702":3,"704":1,"707":1,"709":1,"710":1,"726":3,"728":1,"729":1,"732":1,"743":1,"786":1,"789":1,"792":1,"793":1,"799":1,"812":1,"813":1,"818":1,"822":1,"825":1,"826":1,"829":1,"830":1,"838":1,"859":1,"861":1,"862":1,"863":1,"864":1,"870":1,"879":1,"883":1,"888":1,"891":1,"894":1,"896":1,"910":1,"914":1,"924":1,"950":1,"966":1,"967":1,"970":1,"977":1,"978":1,"980":1,"981":1,"983":1,"989":1,"992":1}}],["jasper",{"2":{"643":4}}],["jasperfillmanager",{"2":{"180":1,"199":1,"709":1}}],["jasperfonts",{"2":{"113":1,"193":1,"446":1,"551":1,"711":1,"719":1,"756":1,"889":1}}],["jasperforms",{"2":{"93":1,"112":1,"177":1,"180":1,"199":1,"446":1,"551":1,"709":1,"711":1,"756":1,"757":1,"887":1}}],["jasperprint",{"2":{"180":3,"199":3,"709":2,"710":1}}],["jaspercompilemanager",{"2":{"180":1,"199":1,"709":1}}],["jasperdesign",{"2":{"180":1,"199":1,"709":1}}],["jasperreport>",{"2":{"197":1}}],["jasperreports로",{"2":{"704":1}}],["jasperreports",{"0":{"781":1,"884":1},"1":{"885":1,"886":1,"887":1,"888":1,"889":1},"2":{"197":6,"277":1,"429":1,"446":1,"517":1,"519":1,"551":3,"643":2,"756":1,"757":1,"885":1}}],["jasperreports를",{"2":{"89":1,"174":1,"175":1,"590":1,"701":1}}],["jasperreport",{"2":{"102":1,"180":1,"197":2,"199":1,"243":1,"494":1,"709":1}}],["jatomic",{"2":{"33":1}}],["jwts",{"2":{"933":1}}],["jwtauthenticationfilter",{"2":{"620":1}}],["jwt",{"0":{"218":1,"237":1,"355":1,"492":1,"780":1,"802":1,"808":1,"930":1,"961":1,"972":1,"973":1,"1223":1,"1312":1},"1":{"219":1,"220":1,"356":1,"357":1,"803":1,"804":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1,"816":1,"817":1,"818":1,"819":1,"931":1,"932":1,"933":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"974":1,"975":1,"1224":1,"1225":1,"1226":1,"1227":1,"1228":1,"1229":1,"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1},"2":{"7":1,"9":1,"14":1,"28":1,"41":1,"54":1,"63":1,"76":2,"90":1,"117":1,"132":1,"208":1,"219":1,"220":1,"222":1,"231":1,"241":1,"277":1,"358":1,"391":1,"394":1,"428":1,"433":1,"439":2,"492":1,"514":1,"516":3,"519":1,"554":2,"576":1,"581":1,"585":1,"620":1,"630":2,"635":1,"668":1,"672":1,"676":1,"682":1,"769":1,"780":1,"803":1,"807":1,"808":1,"831":1,"849":1,"873":1,"917":1,"932":1,"972":2,"974":1,"987":1,"1224":1,"1253":1,"1265":1,"1267":1,"1272":1,"1273":1,"1290":1,"1377":1,"1380":1,"1391":1,"1653":1,"1672":1,"1762":1,"1764":2,"1794":1,"1798":1,"1862":1,"1911":1,"2068":1,"2095":1}}],["13",{"2":{"1654":1,"1656":1,"2076":1}}],["149",{"2":{"2112":1,"2130":1}}],["14",{"2":{"881":2,"2115":1,"2133":1}}],["18px",{"2":{"1637":1,"1728":1}}],["18",{"2":{"459":1,"912":1,"940":1,"1695":1,"1732":1}}],["1704067200000",{"2":{"2246":1,"2247":1}}],["17",{"2":{"433":1,"452":1,"459":6,"460":1,"468":1,"514":1}}],["1단계",{"0":{"367":1},"2":{"1111":1,"1113":1}}],["16px",{"2":{"1600":1,"1609":1,"1637":1,"1728":1}}],["16",{"2":{"197":1,"927":1}}],["168",{"2":{"46":2,"56":2,"59":1,"65":1,"67":1,"76":1,"664":1,"742":1,"2267":1}}],["15",{"2":{"1701":1,"2244":2}}],["150",{"2":{"1609":1}}],["150px",{"2":{"1034":1,"1035":1}}],["1521",{"2":{"257":1,"472":1,"483":1,"835":1}}],["15883391",{"2":{"69":1,"204":1,"740":1}}],["15분~1시간",{"2":{"1226":1}}],["15분",{"2":{"17":1,"19":1,"76":1,"230":1,"810":1,"964":1}}],["11g",{"2":{"463":1,"835":1}}],["11",{"2":{"56":1,"612":1,"931":1,"948":1,"962":1,"1654":1,"1656":1,"1701":1,"2081":1,"2113":1,"2131":1}}],["192",{"2":{"46":2,"56":2,"59":1,"65":1,"67":1,"76":1,"664":1,"742":1,"2267":1}}],["128",{"0":{"210":1,"785":1,"977":1},"1":{"786":1,"787":1},"2":{"208":1,"630":1,"638":1}}],["128로",{"2":{"111":1,"191":1}}],["12",{"2":{"195":1,"464":1,"929":1,"1648":2,"1989":1,"2241":1,"2247":1}}],["1234568",{"2":{"2331":1}}],["123456",{"2":{"2220":2,"2280":1,"2331":2}}],["1234567",{"2":{"1787":1,"2212":1,"2220":2,"2225":1,"2274":1,"2275":1,"2276":1,"2277":1,"2278":1,"2331":1}}],["1234567890",{"2":{"1418":1}}],["1234",{"2":{"100":1,"1949":1,"1999":1,"2212":2,"2274":2,"2275":1,"2322":1,"2323":1,"2324":1,"2332":1}}],["123",{"2":{"45":1,"2279":2,"2281":4,"2332":1}}],["120초",{"2":{"618":1}}],["120000",{"2":{"256":1,"618":1,"840":1}}],["120",{"2":{"34":1,"804":1,"975":1,"1609":1}}],["10초",{"2":{"92":1,"114":1,"200":1,"618":1,"723":1}}],["101",{"2":{"56":1}}],["100px",{"2":{"1043":1,"1077":1}}],["100mb",{"2":{"51":1,"155":2,"236":2,"242":2,"665":1,"892":2}}],["100",{"2":{"46":2,"56":1,"59":1,"65":1,"67":1,"76":1,"664":1,"742":1,"1240":1}}],["1000000",{"2":{"1884":1,"2305":1}}],["10000",{"2":{"256":1,"840":1}}],["1000",{"2":{"9":1,"1240":1,"1304":1,"1534":1,"1914":1,"2005":1,"2268":1}}],["10",{"0":{"1726":1},"1":{"1727":1,"1728":1},"2":{"33":2,"56":1,"59":1,"65":1,"66":1,"67":2,"70":1,"71":1,"197":2,"256":1,"468":1,"618":2,"731":2,"734":1,"738":1,"742":1,"744":1,"834":1,"840":1,"841":1,"1701":2}}],["1의",{"2":{"32":1}}],["1",{"0":{"9":1,"17":1,"30":1,"43":1,"56":1,"65":1,"76":1,"82":1,"92":1,"119":1,"177":1,"383":1,"406":1,"427":1,"439":1,"443":1,"448":1,"451":1,"459":1,"468":1,"476":1,"477":2,"478":1,"480":1,"487":1,"492":1,"496":1,"499":1,"505":1,"509":1,"529":1,"536":1,"554":1,"570":1,"572":1,"579":1,"585":1,"600":1,"609":1,"618":1,"632":1,"648":1,"651":1,"670":1,"686":1,"692":1,"704":1,"707":1,"728":1,"731":1,"749":1,"834":1,"1229":1,"1258":1,"1294":1,"1311":1,"1325":1,"1329":1,"1482":1,"1597":1,"1598":2,"1599":1,"1600":1,"1602":1,"1606":1,"1609":1,"1611":1,"1617":1,"1712":1,"1717":1,"1758":1,"1772":1,"2203":1},"1":{"44":1,"45":1,"66":1,"67":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"477":1,"478":1,"488":1,"489":1,"500":1,"501":1,"1598":1,"1599":1,"1600":1,"2204":1,"2205":1},"2":{"9":1,"24":1,"30":3,"31":3,"32":1,"33":1,"36":2,"45":8,"46":2,"48":1,"51":1,"56":2,"59":1,"65":2,"67":4,"76":1,"92":5,"95":1,"97":2,"98":4,"105":2,"108":3,"110":3,"111":2,"120":1,"121":3,"178":1,"179":1,"185":2,"188":2,"190":3,"191":1,"197":2,"199":2,"229":1,"256":1,"268":1,"283":1,"320":1,"333":1,"341":1,"413":1,"418":1,"466":1,"497":1,"503":1,"546":1,"557":1,"651":2,"652":1,"654":1,"663":2,"664":1,"665":1,"675":1,"676":1,"708":2,"713":3,"716":1,"731":1,"742":2,"753":1,"834":1,"841":1,"912":1,"927":1,"935":1,"940":2,"944":1,"948":1,"952":1,"1304":2,"1326":2,"1534":1,"1613":1,"1648":1,"1658":2,"1722":2,"1723":1,"2066":1,"2071":2,"2085":1,"2093":1,"2101":2,"2112":1,"2114":1,"2120":1,"2130":1,"2132":1,"2193":2,"2194":2,"2196":1,"2204":2,"2209":2,"2212":3,"2242":2,"2244":1,"2267":2,"2274":3,"2275":2,"2276":1,"2277":1,"2278":1,"2305":1}}],["unit",{"0":{"2281":1}}],["universaldetector",{"2":{"946":3}}],["universalchardet",{"2":{"946":1}}],["unplugin",{"2":{"1584":1,"1586":1,"1653":2,"2079":1,"2083":2,"2200":1}}],["unfoldable",{"0":{"1467":1},"2":{"1458":1,"1463":1,"1464":1,"1917":1}}],["undefined면",{"2":{"1460":1}}],["undefined",{"2":{"1458":2,"1466":1,"1725":1,"2033":1,"2185":1,"2204":2,"2205":1,"2329":1}}],["unsafe",{"2":{"825":1}}],["unauthorized",{"0":{"23":1},"2":{"138":1}}],["ubuntu",{"2":{"459":2,"471":1,"489":1,"1701":1}}],["utils",{"0":{"577":2,"1673":1,"1674":1,"1675":1,"1676":1,"1820":1,"1821":1,"1822":1,"1865":1},"1":{"1674":1,"1675":1,"1676":1},"2":{"368":1,"377":1,"388":1,"406":1,"439":1,"440":1,"448":1,"455":1,"525":1,"527":1,"534":1,"554":1,"555":1,"630":1,"636":1,"643":1,"688":1,"1011":1,"1072":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":1,"1205":1,"1209":1,"1219":1,"1220":1,"1233":1,"1242":1,"1250":1,"1303":1,"1365":1,"1378":1,"1382":1,"1385":1,"1387":1,"1388":1,"1389":1,"1394":1,"1399":1,"1403":1,"1409":1,"1412":1,"1419":1,"1423":1,"1426":1,"1428":1,"1432":1,"1434":1,"1438":1,"1440":1,"1443":1,"1445":1,"1448":1,"1454":1,"1457":1,"1460":1,"1463":1,"1464":1,"1468":2,"1472":1,"1475":1,"1480":1,"1535":1,"1538":1,"1562":1,"1602":1,"1609":1,"1624":1,"1628":1,"1630":1,"1632":1,"1635":1,"1667":1,"1718":1,"1724":2,"1817":1,"1830":1,"1858":1,"1861":1,"1869":1,"1876":1,"1877":1,"1880":1,"1887":1,"1890":1,"1891":1,"1904":2,"1905":4,"1908":1,"1909":1,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":2,"1921":1,"1958":1,"2001":1,"2087":1,"2090":1,"2124":1,"2136":1,"2146":1,"2147":1,"2155":1,"2156":1,"2157":1,"2201":1,"2285":1,"2287":1,"2298":1,"2299":1,"2308":1,"2309":1}}],["util",{"2":{"248":5,"317":2,"368":1}}],["utf",{"2":{"156":1,"197":1,"236":1,"320":1,"333":1,"413":1,"546":1,"663":1,"693":1,"694":1,"753":1,"894":1}}],["u29tzvn1cgvyu2vjcmv0s2v5rm9yslbxvc1nevnly3jldetleq==",{"2":{"237":1,"492":1,"968":1}}],["upgradetopro",{"2":{"1994":1}}],["upgrade",{"2":{"825":1}}],["upper",{"2":{"449":1,"1571":1,"1577":1,"1612":1,"1691":1,"1828":1}}],["uploaduuid",{"2":{"649":1}}],["uploadresult",{"2":{"649":1}}],["uploadpath",{"2":{"154":1,"891":1}}],["uploadfile",{"2":{"154":1,"891":1}}],["upload",{"2":{"154":1,"891":1,"1280":1,"1518":1,"1543":1}}],["updatebmk",{"2":{"121":2}}],["update",{"2":{"31":1,"317":1,"1035":1,"1464":1,"1573":1,"1583":1,"1593":1,"1613":1}}],["uint8array",{"2":{"1212":1,"1217":1,"1316":1,"2233":2}}],["ui에서",{"0":{"872":1},"2":{"144":1,"518":1}}],["ui",{"0":{"144":1,"1657":1,"1682":1,"1765":1,"1774":1,"1992":1,"2139":1},"1":{"1766":1,"1767":1,"1768":1,"1769":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1,"2029":1,"2030":1,"2031":1,"2140":1,"2141":1,"2142":1,"2143":1},"2":{"144":1,"277":1,"422":1,"506":2,"518":1,"856":1,"857":2,"869":2,"872":1,"873":1,"921":2,"1005":1,"1010":1,"1014":1,"1019":1,"1025":1,"1032":1,"1039":1,"1042":1,"1049":1,"1051":1,"1053":1,"1057":1,"1068":1,"1076":1,"1081":1,"1083":1,"1095":1,"1102":1,"1105":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1206":1,"1366":2,"1561":1,"1582":1,"1587":2,"1611":1,"1653":2,"1659":1,"1682":1,"1729":1,"1760":1,"1777":1,"1790":1,"1817":3,"1822":1,"1858":2,"1864":2,"1880":1,"1891":1,"1897":1,"1926":1,"1993":2,"1994":1,"2056":1,"2116":1,"2140":1}}],["u",{"2":{"45":3,"49":1,"651":1,"655":1}}],["uuid는",{"2":{"56":1,"60":1}}],["uuid",{"0":{"21":1},"2":{"17":2,"23":1,"24":1,"45":3,"46":3,"50":1,"56":1,"59":4,"76":2,"78":2,"83":1,"86":1,"134":1,"299":1,"300":1,"301":1,"308":1,"309":1,"310":1,"594":2,"649":3,"651":2,"652":1,"660":1,"664":1,"665":2,"816":1,"818":1,"1445":3}}],["uri를",{"2":{"358":1,"971":1,"972":1}}],["uris에",{"2":{"394":1,"518":1}}],["uris",{"2":{"241":2,"358":2,"823":1,"971":1,"972":1}}],["uri는",{"2":{"28":1,"518":1,"681":1}}],["uri",{"0":{"241":1,"358":1,"823":1,"971":1,"972":1},"2":{"15":1,"74":1,"222":1,"394":1,"620":1,"681":1,"803":1,"974":1}}],["url=",{"2":{"2003":1}}],["url=https",{"2":{"1184":2}}],["url=http",{"2":{"1180":3,"1183":2,"1202":3,"1713":3,"1734":3}}],["urlid는",{"2":{"1370":1,"1607":1,"1622":1}}],["urlid",{"2":{"1347":1,"1350":1,"1352":1,"1475":1,"1606":1,"1621":1}}],["url에서",{"2":{"866":1,"2318":1}}],["urlencoder",{"2":{"663":1}}],["urlencoded",{"2":{"102":1}}],["url>",{"2":{"477":1,"1712":1,"1731":1}}],["url로",{"2":{"97":1,"109":1,"506":1,"857":1}}],["url",{"0":{"347":1,"422":1,"857":1},"2":{"7":1,"15":1,"28":1,"34":3,"41":1,"44":1,"45":2,"46":4,"48":1,"51":1,"54":1,"59":1,"63":1,"69":1,"74":1,"90":1,"92":1,"97":3,"99":3,"109":1,"117":1,"119":3,"120":4,"121":1,"144":1,"189":1,"204":1,"216":1,"255":1,"257":1,"258":1,"482":1,"483":1,"484":1,"618":1,"651":2,"654":1,"665":1,"670":4,"715":1,"729":1,"732":4,"740":1,"834":1,"835":1,"836":1,"921":1,"1161":12,"1181":1,"1189":3,"1200":3,"1201":4,"1276":1,"1281":3,"1297":1,"1338":1,"1342":3,"1418":2,"1519":3,"1535":1,"1546":3,"1606":1,"1621":1,"1707":3,"1837":2,"1845":1,"1957":2,"1969":2,"1981":2,"2268":2,"2269":3}}],["usd",{"2":{"1879":1}}],["usr",{"2":{"460":1}}],["useexamplestore",{"2":{"2087":1}}],["usecustomstore",{"2":{"1922":1}}],["usecontextmenustore",{"2":{"1072":2,"1440":2}}],["usei18n",{"2":{"1882":2,"1884":2,"1886":2}}],["usegrouping",{"2":{"1879":2}}],["usetabstore",{"2":{"1475":2,"1480":2,"2294":1}}],["usebuttonstore",{"2":{"1434":2}}],["usemystore",{"2":{"1629":1,"1630":2}}],["usemenustore",{"2":{"1314":1,"1350":1,"1409":2,"1468":2,"2034":1}}],["usemodalstore",{"2":{"1126":2,"1140":2,"1151":2,"1157":2,"1426":2,"1427":1,"1428":2,"1915":2}}],["uselogstore",{"2":{"1314":1,"1419":2,"1535":2,"1918":2}}],["useloadingstore",{"2":{"1011":2,"1273":2,"1311":1,"1319":1,"1399":2,"1609":2,"1613":1,"1615":1,"1724":2,"1788":1,"1912":2,"1920":2,"2001":2,"2034":1}}],["usesidebarstore",{"2":{"1460":2,"1463":2,"1464":2,"1468":2,"1917":2}}],["usesnackbar",{"2":{"1303":2}}],["usesessionstore",{"2":{"1209":2,"1219":2,"1242":2,"1250":2,"1273":1,"1283":1,"1313":1,"1454":2,"1788":1,"1914":2,"1958":2,"2034":1,"2234":1}}],["useauthstore",{"2":{"1162":1,"1233":2,"1273":1,"1312":1,"1360":1,"1382":2,"1383":1,"1385":2,"1387":2,"1388":2,"1389":2,"1632":2,"1635":2,"1724":2,"1788":1,"1830":1,"1911":2,"1920":2,"1921":2,"2034":1,"2124":2,"2157":2}}],["use",{"2":{"643":1,"1273":1,"1320":1,"1709":1,"1732":1,"1893":2,"1898":1,"1905":1,"1981":3,"2147":1}}],["userprofile",{"2":{"1994":1}}],["userouter",{"2":{"1352":2,"1388":2,"1389":2}}],["user123",{"2":{"1229":1,"1240":1,"1242":1,"1243":1,"1245":1,"2151":1,"2231":1,"2232":1,"2267":1}}],["users",{"2":{"1194":3,"1278":2}}],["userservice",{"2":{"228":1}}],["userdata",{"2":{"228":3}}],["usernamepasswordauthenticationfilter",{"2":{"620":1,"822":1,"970":1}}],["username",{"2":{"171":1,"255":2,"257":2,"258":2,"482":2,"483":2,"484":2,"618":2,"690":1,"834":2,"835":2,"836":2,"914":1,"1240":1,"1242":1,"1245":2,"1250":3,"1571":1,"1577":1,"2204":1,"2205":1,"2226":1,"2316":1,"2317":1,"2333":2}}],["userinput",{"2":{"217":1,"678":1}}],["userimage",{"2":{"119":1}}],["userid",{"2":{"46":3,"56":5,"57":5,"59":2,"65":1,"67":2,"76":2,"219":3,"228":1,"299":1,"308":1,"594":1,"635":2,"664":1,"742":1,"812":2,"813":1,"818":1,"914":1,"933":1,"966":2,"967":1,"1229":1,"1240":1,"1242":1,"1243":1,"1244":2,"1245":2,"1248":2,"1250":2,"1387":2,"1454":2,"1788":2,"1957":2,"2151":1,"2231":1,"2232":1,"2267":2}}],["user002",{"2":{"56":1,"57":2}}],["user001",{"2":{"30":1,"31":2,"45":1,"46":2,"56":3,"57":2,"59":1,"65":1,"67":1,"76":3,"77":1,"98":1,"119":2,"120":2,"121":2,"122":2,"219":2,"633":1,"663":1,"664":1,"721":1,"742":1}}],["useragent",{"2":{"56":3,"59":2,"248":1,"299":1,"308":1,"594":1,"818":1}}],["userlist에",{"2":{"57":1}}],["userlist",{"2":{"30":2,"57":3}}],["user",{"2":{"30":2,"31":4,"44":1,"45":1,"65":1,"76":3,"77":7,"82":1,"98":1,"117":1,"119":2,"120":5,"121":5,"228":4,"248":1,"347":1,"421":1,"633":2,"636":1,"651":1,"663":1,"721":1,"859":1,"914":1,"1817":1,"1926":1,"2205":1,"2316":1,"2317":1}}],["usedynamicstore",{"2":{"1445":2}}],["used",{"2":{"0":1}}],["usedata",{"2":{"0":3}}],["usage",{"2":{"0":1}}],["gutters>",{"2":{"1989":1}}],["gutters",{"2":{"1989":1}}],["gb",{"2":{"1981":3}}],["gfmobliephoneformat",{"0":{"2324":1}}],["gfrremovecomma",{"0":{"2278":1}}],["gfformidstr",{"0":{"2318":1}}],["gfformatdatewithsep",{"0":{"2245":1}}],["gfformatdatetimestring",{"0":{"2241":1}}],["gfformatdatetime",{"0":{"2208":1,"2240":1},"2":{"2208":2,"2224":1}}],["gfformatdatestring",{"0":{"2207":1,"2239":1},"2":{"1725":1,"1787":1,"2033":1,"2207":2,"2222":1,"2224":1,"2239":1}}],["gfformatdate",{"2":{"1578":1}}],["gffillzeros",{"0":{"2279":1},"2":{"2279":1}}],["gffiledownload",{"0":{"2267":1},"2":{"2267":1}}],["gfsnaketocamel",{"0":{"2317":1}}],["gfsaveaggridasexcel",{"0":{"2260":1,"2261":1},"2":{"2260":1,"2261":1}}],["gfsavetableasexcel",{"0":{"2259":1}}],["gfsetclobdata",{"0":{"2319":1},"2":{"2319":2}}],["gfsetnumber",{"0":{"2275":1},"2":{"2275":1}}],["gfsetdaybox",{"0":{"2253":1},"2":{"2253":1}}],["gfsetmonthbox",{"0":{"2252":1},"2":{"2252":1}}],["gfsetyearbox",{"0":{"2251":1},"2":{"2251":1}}],["gfhtmlexceldown",{"0":{"2258":1}}],["gfcheckphonenumber",{"0":{"2323":1,"2332":1},"2":{"2332":1,"2333":1}}],["gfcheckphonehyphen",{"0":{"2322":1}}],["gfcameltosnakeupper",{"0":{"2316":1}}],["gfconverttimestamp",{"0":{"2247":1}}],["gfclonejson",{"0":{"2196":1},"2":{"2196":1}}],["gftoday",{"0":{"2248":1}}],["gftimestamptodatestr",{"0":{"2246":1}}],["gftrim",{"0":{"2214":1,"2315":1}}],["gfisdate",{"0":{"2221":1,"2330":1},"2":{"2221":1,"2226":1,"2330":1,"2333":1}}],["gfisempty",{"0":{"2204":1,"2302":1,"2329":1},"2":{"1578":1,"1725":1,"1787":1,"2033":1,"2156":4,"2204":9,"2222":1,"2226":1,"2302":1,"2308":2,"2309":2,"2329":5,"2333":1}}],["gfvalidateresidentnumber",{"0":{"2220":1,"2331":1},"2":{"2220":1,"2331":1}}],["gfdayformat",{"0":{"2249":1}}],["gfdownloadfile",{"0":{"2218":1},"2":{"2218":1}}],["gfdiffdate",{"0":{"2210":1,"2243":1},"2":{"2210":1,"2224":1}}],["gfaddmonth",{"0":{"2244":1},"2":{"2244":1}}],["gfaddday",{"0":{"2209":1,"2242":1,"2303":1},"2":{"2209":2,"2242":2,"2309":2}}],["gfarraytoobject",{"0":{"2192":1,"2216":1},"2":{"2192":1,"2216":1}}],["gfobjecttostring",{"0":{"2197":1,"2304":1,"2320":1},"2":{"2197":1,"2320":1}}],["gfjsondatavalidation",{"0":{"2195":1},"2":{"2195":2}}],["gfgetround",{"0":{"2281":1},"2":{"2281":1}}],["gfgetrowtable",{"0":{"2193":1},"2":{"2193":1}}],["gfgetnumber",{"0":{"2280":1}}],["gfgetthreecomma",{"0":{"2277":1,"2305":1}}],["gfgetcomma",{"0":{"2276":1}}],["gfgetuserimage",{"0":{"2268":1},"2":{"2268":1}}],["gfgetjsonfilter",{"0":{"2194":1},"2":{"2194":2}}],["gfnumberformat",{"0":{"2212":1,"2274":1},"2":{"1787":1,"2033":1,"2212":2,"2225":1,"2274":2}}],["gfnvl",{"0":{"2205":1},"2":{"1725":1,"1787":1,"2033":1,"2156":3,"2205":2}}],["gf",{"2":{"1578":1}}],["globalinjection",{"2":{"1879":1}}],["globalproperties",{"2":{"1861":1}}],["glob",{"2":{"1104":1,"1349":1}}],["gitignore에",{"2":{"563":1}}],["github",{"2":{"488":1,"780":1}}],["git",{"0":{"1697":1},"2":{"469":1,"477":2,"699":1,"1697":2,"1712":1}}],["git에",{"2":{"230":1,"563":1,"613":1}}],["grp",{"2":{"1981":3}}],["gridref",{"2":{"2260":1}}],["grid에",{"2":{"1880":1,"1887":1}}],["grid에서",{"0":{"1041":1},"1":{"1042":1,"1043":1},"2":{"1042":1,"1067":1,"1075":1}}],["griddata",{"2":{"1445":1,"1974":4,"1986":1,"2287":1}}],["gridid",{"2":{"1072":1,"1440":1}}],["gridcustomerlist",{"2":{"1990":3}}],["gridcontextmenu",{"0":{"1066":1,"2014":1},"1":{"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1},"2":{"1068":1,"1072":1,"1767":1,"1994":1}}],["gridclickfield",{"0":{"1055":1,"2013":1},"1":{"1056":1,"1057":1,"1058":1,"1059":1,"1060":1},"2":{"1057":1,"1059":1,"1767":1,"1994":1}}],["grid를",{"2":{"1062":1,"1974":1,"1981":1,"1990":1,"2260":1}}],["gridapi",{"0":{"2260":1},"2":{"1059":1,"1440":1,"1974":2,"2260":3}}],["gridoptions=",{"2":{"1887":1}}],["gridoptions",{"2":{"1059":1,"1880":1,"1887":4}}],["grid",{"0":{"1061":1,"1723":1,"1887":1,"2012":1,"2052":1,"2096":1,"2117":1},"1":{"1062":1,"1063":1,"1064":1,"2013":1,"2014":1,"2015":1,"2097":1,"2098":1,"2099":1,"2118":1,"2119":1,"2120":1},"2":{"1042":1,"1046":1,"1057":1,"1063":1,"1068":1,"1076":1,"1582":1,"1609":1,"1658":1,"1682":1,"1723":1,"1756":1,"1767":2,"1777":1,"1817":1,"1861":1,"1877":2,"1880":4,"1887":2,"1888":1,"1974":2,"1975":1,"1986":1,"1990":1,"1991":1,"1994":1,"2014":1,"2052":1,"2097":2,"2118":1,"2120":1,"2260":1}}],["gridmultiselectwrapper",{"0":{"1042":1,"1075":1,"2015":1},"1":{"1076":1,"1077":1},"2":{"1042":1,"1043":1,"1064":1,"1076":1,"1077":1,"1767":1,"1994":1}}],["grid의",{"2":{"1041":1,"1056":1,"1880":1,"2261":1}}],["group",{"2":{"870":2,"1969":2}}],["groupedopenapi",{"2":{"870":4}}],["groupid>org",{"2":{"269":1,"279":1,"280":1,"836":1,"904":1,"905":1,"906":1,"929":1}}],["groupid>",{"2":{"268":1,"269":1,"279":1,"280":1,"612":1,"759":1,"835":1,"836":1,"904":1,"905":1,"906":1,"927":1,"928":1,"929":1}}],["groupid>commons",{"2":{"927":1,"928":1}}],["groupid>com",{"2":{"268":1,"612":1,"759":1,"835":1}}],["graceful",{"2":{"236":1}}],["gmail",{"2":{"171":2,"690":2,"699":1}}],["goto",{"2":{"2151":1}}],["gotomenu",{"2":{"1352":1}}],["gothic",{"2":{"113":1,"194":1,"718":1,"889":1}}],["google",{"0":{"947":1},"1":{"948":1,"949":1,"950":1},"2":{"6":1,"9":1,"11":1,"12":1,"146":1,"429":1,"570":1,"597":1,"601":1,"604":1,"612":1,"948":1,"949":1,"1903":1}}],["ghi789",{"2":{"50":1,"660":1}}],["gt",{"2":{"30":3,"31":1,"57":1,"601":1,"633":1,"1226":1,"1670":1,"2077":1}}],["geosan",{"0":{"1664":1,"1681":1,"1811":1,"1976":1},"1":{"1812":1,"1813":1,"1814":1,"1977":1,"1978":1,"1979":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"2":{"1598":2,"1652":1,"1653":1,"1681":1,"1778":1,"1779":1,"1812":1,"1813":1,"1817":2,"1858":2,"1864":2,"1977":1,"1978":1,"1981":1,"1986":1,"1989":1,"1991":1}}],["gender",{"2":{"1969":2}}],["generatepdf",{"2":{"888":1}}],["generateexcel",{"2":{"883":1}}],["generatecontent",{"2":{"601":1}}],["generatecontentresponse",{"2":{"601":1}}],["generated",{"2":{"557":1}}],["generatereport",{"2":{"199":1}}],["genericjackson2jsonredisserializer",{"2":{"297":1,"619":1}}],["genai",{"0":{"607":1,"947":1},"1":{"948":1,"949":1,"950":1},"2":{"9":2,"150":1,"600":3,"612":1,"948":1}}],["getkeyindexeddb",{"0":{"2289":1}}],["geterrormessage",{"2":{"1536":2,"1537":1,"1538":1}}],["getelementbyid",{"2":{"119":1}}],["getbmk",{"0":{"1408":1}}],["getbmklist",{"2":{"120":2,"347":1,"421":2,"859":2}}],["getstate",{"2":{"1922":2}}],["getscreendata",{"2":{"1445":1}}],["getsessionvalues",{"0":{"1245":1},"2":{"1245":1}}],["getsessionvalue",{"0":{"1244":1,"1453":1},"2":{"1211":1,"1213":1,"1244":2,"1250":3,"1273":1,"1313":1,"1315":1,"1454":1,"1788":1,"1914":2,"1946":3,"1957":5,"1958":3,"1969":2,"1981":2}}],["getsubject",{"2":{"219":1,"813":1,"967":1}}],["getdetectedcharset",{"2":{"946":1}}],["getdata",{"2":{"632":2,"1629":1,"2087":1}}],["getdatabase",{"2":{"290":1,"291":1}}],["gettext",{"2":{"1883":1}}],["getters",{"0":{"1384":1},"1":{"1385":1},"2":{"1629":1,"1922":1,"2087":1}}],["getter",{"2":{"913":1,"1633":1}}],["gettime",{"2":{"1317":1}}],["gettype",{"2":{"32":2,"33":3}}],["getwriter",{"2":{"829":1,"830":1}}],["getoutputstream",{"2":{"732":1}}],["getoriginalfilename",{"2":{"154":1,"891":1}}],["getinputstream",{"2":{"670":1,"732":1}}],["getheader",{"2":{"670":1}}],["gethost",{"2":{"290":1,"291":1}}],["getcontext",{"2":{"672":1}}],["getconvertspecialtype",{"2":{"636":1}}],["getclientip",{"2":{"248":1,"636":2}}],["getclassloader",{"2":{"180":1,"199":1,"709":1}}],["getclass",{"2":{"180":1,"199":1,"709":1}}],["getmimetype",{"2":{"898":1}}],["getmagicmatch",{"2":{"898":1}}],["getmapping",{"2":{"632":1}}],["getmessage",{"2":{"400":1,"540":1}}],["getxmlresponse",{"2":{"632":1}}],["getgeminikey",{"2":{"601":1,"602":1}}],["getlogger",{"2":{"400":1,"417":1,"540":1,"543":1}}],["getallsessiondata",{"2":{"1914":1}}],["getallmenudata",{"2":{"1350":1}}],["getallhasheswithscan",{"2":{"311":1,"634":1}}],["getauthentication",{"2":{"672":1}}],["getaccesstoken",{"2":{"17":2,"24":1,"86":1,"815":1,"1259":1,"1263":1,"1276":2,"1337":1}}],["getproperty",{"2":{"954":1}}],["getpagedata",{"0":{"2292":1},"2":{"2292":2}}],["getpageinfo",{"2":{"250":1}}],["getparametermap",{"2":{"670":1}}],["getparametervalues",{"2":{"670":1}}],["getparameter",{"2":{"670":1}}],["getport",{"2":{"290":1,"291":1}}],["getnowtime",{"2":{"248":1,"636":1}}],["getname",{"2":{"156":1,"894":1}}],["getuserlist",{"2":{"449":1}}],["getuseragent",{"2":{"248":1,"636":1}}],["getuser",{"2":{"228":1}}],["getuserimage",{"2":{"119":2}}],["getredistoken",{"2":{"300":1,"309":1,"594":1,"634":1}}],["getredishashdata",{"2":{"56":2}}],["getresources",{"2":{"264":1}}],["getresourceasstream",{"2":{"180":1,"199":1,"709":1}}],["getjsonresponse",{"2":{"632":1}}],["getjsonsuccessresponse",{"2":{"154":1,"384":1,"400":1,"540":1,"600":1,"610":1,"632":2,"704":1,"891":1}}],["getjsonerrorresponse",{"2":{"154":1,"384":1,"400":1,"540":1,"610":1,"632":2,"891":1}}],["get",{"2":{"90":1,"98":1,"103":1,"156":1,"178":1,"199":1,"228":2,"418":1,"489":1,"601":2,"621":1,"649":2,"704":1,"708":1,"894":1,"1194":1,"1278":2,"1297":1,"1338":1,"1515":2,"1527":1}}],["geminiservice",{"2":{"149":2,"570":2,"609":2,"610":2,"950":2}}],["gemini",{"0":{"9":1},"2":{"6":1,"9":4,"12":1,"146":1,"429":1,"517":1,"570":2,"597":1,"598":1,"600":1,"601":3,"602":1,"607":1,"613":1,"949":1}}],["old",{"2":{"2174":1}}],["onrowclicked",{"2":{"1990":1}}],["onrefreshed",{"2":{"1276":1,"1337":1}}],["ongridready",{"2":{"1974":2,"1990":1}}],["onclick",{"2":{"1578":1}}],["onceperrequestfilter",{"2":{"672":1}}],["on",{"2":{"1578":1}}],["onerror",{"2":{"1538":5}}],["onmounted",{"2":{"1029":2,"1219":2,"1389":2,"1609":2,"1613":2,"1720":1}}],["otf",{"2":{"711":1}}],["obj",{"0":{"2196":1,"2197":1,"2258":1,"2267":1,"2302":1,"2304":1,"2320":1},"2":{"632":2,"2197":2,"2216":1,"2258":5,"2267":4,"2302":1,"2304":1,"2308":1,"2320":2}}],["object를",{"2":{"2304":1}}],["objectmapper",{"2":{"297":1,"924":4}}],["object>>",{"2":{"178":2,"199":2,"311":1,"313":1,"317":1,"332":1,"412":1,"418":2,"545":1,"663":1,"708":2}}],["object>",{"2":{"149":1,"156":1,"162":1,"172":1,"178":2,"179":1,"199":4,"228":3,"250":1,"293":1,"294":1,"299":1,"300":1,"301":1,"305":2,"308":1,"309":1,"310":1,"317":4,"332":1,"390":2,"400":1,"412":1,"417":3,"418":2,"421":1,"540":1,"543":1,"545":1,"570":1,"593":2,"594":2,"600":1,"601":3,"609":2,"610":1,"619":2,"633":3,"636":1,"648":1,"649":2,"696":1,"704":2,"707":2,"708":1,"728":1,"729":1,"818":1,"846":2,"859":1,"883":1,"888":1,"894":1,"950":1}}],["object",{"2":{"30":2,"400":1,"417":1,"540":1,"543":1,"601":1,"632":5,"633":1,"1215":1,"1216":1,"1426":1,"1475":1,"1477":1,"2231":1,"2232":1,"2292":1}}],["override",{"2":{"621":1,"670":1,"671":1,"672":1}}],["os",{"2":{"471":1}}],["ooxml",{"2":{"277":1,"877":1}}],["ojdbc11",{"2":{"276":1,"463":1}}],["operation",{"0":{"862":1},"2":{"421":1,"859":1,"862":1}}],["opentab",{"0":{"1475":1},"2":{"1475":1}}],["opensmstemplate",{"2":{"1157":1}}],["openpagelog",{"2":{"1151":1}}],["openfilelink",{"2":{"1140":1}}],["openmodal",{"0":{"1426":1},"2":{"1126":1,"1140":1,"1151":1,"1157":1,"1426":1,"1915":2}}],["openapprovallist",{"2":{"1126":1}}],["openapi를",{"2":{"853":1}}],["openapi",{"0":{"420":1,"854":1,"865":1,"919":1},"1":{"421":1,"422":1,"423":1,"855":1,"856":1,"857":1,"866":1,"867":1,"920":1,"921":1},"2":{"277":1,"353":1,"395":1,"433":1,"518":1,"519":1,"855":1,"866":1,"920":1}}],["opener",{"2":{"1104":1}}],["openconnection",{"2":{"732":1}}],["openjdk",{"2":{"459":4}}],["open=",{"2":{"326":1}}],["open",{"2":{"98":3,"99":1,"103":3,"704":1,"1106":1}}],["option",{"2":{"1027":3,"1035":3,"1036":2,"1722":3}}],["optionvalue에",{"2":{"1045":1}}],["optionvalue",{"2":{"1026":1,"1033":1,"1043":1,"1077":1}}],["optionlabel과",{"2":{"1045":1}}],["optionlabel",{"2":{"1026":1,"1033":1,"1043":1,"1077":1,"1579":1}}],["optional",{"2":{"234":1,"453":1,"749":1,"1460":1}}],["options=",{"2":{"2174":1}}],["options",{"0":{"826":1,"1883":1,"1921":1},"2":{"222":1,"620":1,"621":1,"986":2,"1027":2,"1029":2,"1035":2,"1036":1,"1043":1,"1077":1,"1538":2,"1591":1,"1722":2}}],["owasp",{"0":{"934":1,"983":1},"1":{"935":1,"936":1},"2":{"216":1,"226":1,"670":1,"680":1,"761":1}}],["octet",{"2":{"156":1,"664":1,"894":1}}],["ok",{"2":{"138":1,"156":1,"894":1}}],["or",{"2":{"1884":1}}],["oriented",{"2":{"905":1}}],["original",{"2":{"2196":3}}],["originalrequest",{"2":{"1258":1,"1260":1,"1261":2,"1276":7,"1294":1,"1297":2,"1299":1,"1330":1,"1332":1,"1336":2,"1337":2,"1338":2}}],["originalmap",{"2":{"636":1}}],["origin",{"2":{"620":2,"621":1,"827":2}}],["origins",{"2":{"239":1,"493":1,"621":1}}],["orm",{"2":{"433":1}}],["oracledriver",{"2":{"257":1,"483":1,"835":1}}],["oracle",{"0":{"257":1,"322":1,"336":1,"463":1,"483":1,"835":1},"2":{"253":1,"257":3,"263":1,"276":1,"306":1,"330":1,"427":2,"444":1,"445":2,"459":1,"463":1,"472":1,"480":1,"483":4,"514":1,"519":1,"551":1,"618":1,"630":2,"633":1,"752":1,"754":2,"774":2,"834":1,"835":6,"843":1,"847":1}}],["ordered",{"2":{"622":1,"675":2,"799":1}}],["ord",{"2":{"45":6,"121":2,"663":1}}],["orgchart",{"0":{"1842":1},"2":{"1642":1,"1834":1,"1842":1}}],["org",{"2":{"45":8,"164":1,"197":1,"244":1,"258":1,"317":1,"320":2,"333":2,"413":2,"484":1,"546":2,"656":1,"753":2,"836":1,"942":2,"946":1,"954":1,"958":1,"1001":1,"2047":1,"2049":1,"2051":1}}],["output",{"2":{"1752":1,"1753":1}}],["outputstreamwriter",{"2":{"732":2}}],["outputstream",{"2":{"180":1,"710":1}}],["out",{"2":{"5":1,"872":1,"879":3,"1754":1}}],["off",{"2":{"765":1}}],["of",{"2":{"0":2,"5":1,"663":1,"1316":1,"1751":1,"1754":1,"2185":1}}],["rm",{"2":{"2178":1}}],["rf",{"2":{"2172":1,"2178":1}}],["ri",{"2":{"1649":1,"2062":1,"2064":1}}],["rightmargin=",{"2":{"197":1}}],["ram",{"2":{"1703":1,"1704":1}}],["rawdata",{"2":{"1318":2}}],["rate",{"0":{"804":1,"975":1},"2":{"12":1,"613":1}}],["routes",{"0":{"1895":1,"2043":1},"2":{"1365":1,"1366":1,"1602":1,"1624":1,"1718":1,"1891":1,"1895":1,"2090":1,"2136":1}}],["router의",{"2":{"1670":1}}],["router",{"0":{"1894":2,"2043":1,"2051":1,"2088":1,"2134":1},"1":{"1895":2,"1896":2,"2089":1,"2090":1,"2091":1,"2135":1,"2136":1,"2137":1,"2138":1},"2":{"1205":1,"1249":1,"1262":1,"1276":1,"1295":1,"1331":1,"1337":1,"1350":1,"1352":3,"1357":1,"1358":2,"1361":1,"1365":1,"1388":3,"1389":3,"1602":1,"1624":1,"1656":1,"1676":2,"1718":1,"1777":1,"1817":2,"1822":1,"1865":1,"1891":2,"1896":2,"1904":3,"1906":1,"2051":1,"2089":1,"2090":1,"2091":1,"2116":1,"2135":1,"2136":1,"2138":1}}],["routerview를",{"2":{"1860":1}}],["routerview",{"2":{"1089":1,"1670":1,"1860":1}}],["routerview만",{"2":{"1082":1}}],["rows",{"2":{"1974":2,"1986":1,"1990":1}}],["rowindex",{"2":{"1072":2,"1440":1}}],["rowdata",{"0":{"2261":1},"2":{"1063":2,"1440":1,"1609":3,"1723":2,"1887":2,"2120":2,"2261":2}}],["rowdata=",{"2":{"1063":1,"1609":1,"1723":1,"1887":1,"1974":1,"1990":1,"2120":1}}],["row>",{"2":{"1027":2,"1648":2,"1989":2}}],["row",{"2":{"879":3,"1973":1,"1989":2,"1990":1}}],["rownum",{"2":{"31":5}}],["run",{"2":{"500":2,"501":1,"502":2,"515":1,"750":3,"1171":1,"1172":1,"1173":2,"1482":1,"1489":1,"1503":2,"1509":1,"1617":1,"1714":1,"1736":1,"1738":1,"1739":1,"1740":2,"1741":1,"1743":1,"2063":1,"2152":1,"2158":1,"2174":1}}],["runtime",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"0":1,"5":1,"459":1}}],["r6cbydfxpyudhsgdidi+bmzq0it6rb8nh26gw0czyxpzxvpi6x3frwz",{"2":{"211":1,"238":1,"790":1,"978":1}}],["ryutiazkso0lhhspm9g44ktobcxf5ok7gxfavyg4",{"2":{"211":1,"238":1,"790":1,"978":1}}],["r8im",{"2":{"211":1,"238":1,"790":1,"978":1}}],["rsa로",{"2":{"801":2}}],["rsa",{"0":{"211":1,"238":1,"788":1,"978":1},"1":{"789":1,"790":1},"2":{"208":1,"211":3,"428":1,"575":1,"630":1,"639":1,"789":3,"978":3}}],["render",{"2":{"2146":1}}],["rendertype",{"2":{"1059":1,"1060":1}}],["remix",{"2":{"2064":1}}],["removeallkeyindexeddb",{"0":{"2291":1}}],["removekeyindexeddb",{"0":{"2290":1}}],["removetab",{"2":{"1916":1}}],["removescreendata",{"2":{"1445":1}}],["removesessionkey",{"0":{"1246":1},"2":{"1246":1}}],["removeitem",{"2":{"78":1}}],["remove",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["reg",{"2":{"1981":3}}],["registerplugins",{"2":{"1861":3,"1904":3,"1905":2}}],["register",{"0":{"1796":1},"2":{"1796":1,"1895":1,"1934":1}}],["registermodule",{"2":{"924":1}}],["registration",{"2":{"622":5,"675":10,"799":5}}],["registry",{"2":{"621":2}}],["reactive",{"2":{"1887":1,"1974":1,"1986":1,"2005":1}}],["read",{"2":{"2185":1}}],["ready=",{"2":{"1974":1,"1990":1}}],["readme",{"2":{"1667":1,"1816":1}}],["readonly",{"2":{"1026":1}}],["readline",{"2":{"732":1}}],["reader",{"2":{"732":2}}],["readallbytes",{"2":{"156":1,"894":1}}],["rel=",{"2":{"1836":1}}],["releases",{"2":{"488":1}}],["redirect",{"2":{"1366":1,"1895":1}}],["rediscache",{"2":{"299":1,"300":1,"301":1,"308":1,"309":1,"310":1,"594":2,"818":1}}],["redisconnectionfactory",{"2":{"290":1,"291":1,"293":1,"294":1}}],["redisservice",{"2":{"299":2,"300":1,"301":1,"308":2,"309":1,"310":1,"311":1,"594":3,"818":2}}],["redisstandaloneconfiguration",{"2":{"290":2,"291":2,"619":2}}],["redistemplate을",{"2":{"851":1}}],["redistemplate",{"0":{"292":1,"293":1,"294":1,"851":1},"1":{"293":1,"294":1},"2":{"293":1,"294":1,"580":2,"619":4}}],["redis를",{"2":{"286":1,"906":1}}],["redis에",{"2":{"23":1,"53":1,"56":1,"76":1}}],["redis에서",{"2":{"17":1,"21":1,"24":1,"56":1,"57":1,"78":1}}],["redis",{"0":{"53":1,"56":1,"57":1,"58":1,"286":1,"287":1,"290":1,"291":1,"298":1,"430":1,"465":1,"486":1,"487":1,"490":1,"511":1,"594":1,"783":1,"818":1,"848":1,"997":1},"1":{"54":1,"55":1,"56":1,"57":1,"58":1,"59":2,"60":1,"61":1,"287":1,"288":2,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":2,"300":2,"301":2,"302":1,"487":1,"488":2,"489":2,"490":1,"849":1,"850":1,"851":1},"2":{"17":1,"20":1,"23":2,"39":1,"57":1,"59":1,"76":1,"84":1,"130":1,"141":1,"245":1,"265":1,"275":2,"289":1,"302":1,"307":1,"390":1,"433":1,"439":1,"465":1,"472":1,"488":4,"489":4,"490":1,"511":3,"514":1,"515":1,"516":2,"520":2,"554":1,"573":1,"580":3,"616":1,"619":3,"628":1,"630":2,"634":1,"769":1,"770":1,"783":1,"997":2}}],["reject",{"2":{"1273":1,"1276":1,"1296":1,"1297":1,"1298":1,"1319":1,"1333":1,"1334":1,"1337":1,"1338":1,"1435":1}}],["replacement",{"2":{"2082":1}}],["replace",{"2":{"1262":1,"1276":1,"1295":1,"1331":1,"1337":1,"1348":2}}],["repository",{"2":{"477":1,"1712":1,"1731":1}}],["reportservice",{"2":{"888":2}}],["reportparams",{"2":{"199":4}}],["reportelement",{"2":{"197":3}}],["reporttemplate",{"2":{"197":1}}],["report",{"0":{"446":1,"590":1,"756":1},"2":{"92":4,"93":3,"98":6,"99":5,"100":1,"101":1,"102":1,"103":3,"112":2,"113":1,"177":1,"178":1,"180":4,"182":4,"183":4,"193":1,"199":5,"229":4,"241":1,"243":1,"434":1,"437":1,"439":1,"446":1,"494":1,"551":1,"554":1,"568":1,"702":1,"704":8,"705":1,"707":1,"709":4,"711":2,"719":1,"721":5,"722":4,"747":1,"756":3,"757":1,"823":1,"883":1,"887":1,"888":1,"889":1,"971":1}}],["req",{"2":{"829":1,"830":1}}],["requiresauth",{"2":{"1360":1,"1362":1}}],["required",{"2":{"421":1,"648":1,"859":1,"863":1,"1572":1}}],["requestfn",{"2":{"1304":2,"1534":2}}],["requests",{"0":{"1287":1,"1295":1,"1331":1},"2":{"804":1,"825":1,"975":2,"2162":1}}],["requestmatchers",{"2":{"620":1,"822":1,"970":1}}],["requestmapping",{"2":{"400":1,"421":1,"540":1,"600":1,"610":1,"632":1,"648":1,"704":1,"728":1,"859":1}}],["requestmapping으로",{"2":{"384":1}}],["requestmethod",{"2":{"400":1,"540":1}}],["requestbody",{"2":{"156":1,"178":4,"199":4,"305":4,"313":1,"390":4,"400":3,"417":4,"418":4,"421":2,"540":3,"593":4,"600":1,"610":1,"633":5,"704":3,"707":4,"728":2,"732":5,"846":4,"859":2,"894":1}}],["requestparam",{"2":{"154":1,"648":2,"891":1}}],["request",{"2":{"138":1,"149":3,"155":1,"242":1,"248":2,"570":3,"610":2,"636":1,"670":2,"671":1,"672":3,"892":1,"950":3,"1273":1,"1320":1}}],["retryrequest",{"2":{"1304":2,"1534":2}}],["retry",{"2":{"449":1,"1258":1,"1276":2,"1294":1,"1332":1}}],["return",{"2":{"154":2,"156":1,"199":1,"228":1,"290":1,"291":1,"293":1,"294":1,"400":2,"417":1,"540":2,"543":1,"600":1,"601":1,"609":1,"610":2,"618":1,"619":2,"620":1,"622":1,"632":2,"675":2,"704":1,"799":1,"822":1,"870":2,"891":2,"894":1,"924":1,"970":1,"1260":1,"1261":1,"1273":2,"1276":3,"1296":1,"1297":1,"1298":1,"1304":1,"1319":1,"1320":1,"1331":1,"1333":1,"1334":1,"1336":1,"1337":2,"1338":1,"1349":1,"1409":1,"1480":1,"1534":1,"1536":7,"1538":1,"1567":1,"1752":2,"1883":1,"1921":2,"1922":1,"2156":1,"2226":3,"2333":4}}],["ref",{"2":{"1027":3,"1029":3,"1034":2,"1035":6,"1040":2,"1043":3,"1059":1,"1063":2,"1077":3,"1097":1,"1112":1,"1119":1,"1126":2,"1458":2,"1537":1,"1574":2,"1609":3,"1613":2,"1720":2,"1722":3,"1723":3,"1922":2,"2078":3,"2079":1,"2120":2,"2224":1,"2225":1,"2333":1}}],["referer",{"2":{"986":1}}],["referrerpolicyheaderwriter",{"2":{"620":1}}],["referrerpolicy",{"2":{"620":2}}],["referrer",{"2":{"222":1,"620":1,"827":1,"986":1}}],["refresherror",{"2":{"1262":1,"1276":2,"1337":2}}],["refreshtoken이",{"2":{"2181":1}}],["refreshtoken을",{"2":{"1269":1}}],["refreshtoken과",{"2":{"56":1,"60":1}}],["refreshtoken",{"2":{"17":2,"23":1,"24":1,"56":1,"59":2,"76":2,"78":1,"86":1,"134":1,"219":1,"299":1,"308":1,"594":1,"812":1,"816":1,"818":1,"966":1,"1270":1}}],["refresh",{"0":{"20":1,"134":1,"811":1,"965":1,"1227":1,"1259":1,"2166":1},"2":{"15":1,"17":3,"23":1,"24":1,"25":2,"76":1,"83":1,"84":1,"219":2,"230":1,"357":1,"635":2,"803":1,"812":1,"966":1,"974":1,"1224":1,"1229":1,"1231":1,"1236":1,"1255":1,"1259":1,"1262":1,"1764":1,"2168":1}}],["recipient",{"2":{"172":1,"698":1}}],["rev",{"0":{"734":1,"735":1},"2":{"65":2,"66":5,"67":4,"71":1,"731":3,"735":3,"742":2,"743":2,"744":1,"1949":1}}],["residentnumber",{"0":{"2220":1,"2331":1},"2":{"2220":1}}],["resetsubscribers",{"2":{"1276":1,"1337":1}}],["resolve",{"2":{"1261":2,"1276":2,"1304":2,"1336":2,"1534":2,"2184":1}}],["resource>",{"2":{"280":2}}],["resource",{"2":{"178":1,"199":1,"210":1,"211":1,"213":1,"214":1,"219":1,"228":1,"390":1,"417":1,"543":1,"600":1,"601":1,"609":1,"610":1,"633":1,"636":1,"641":1,"648":1,"698":1,"704":1,"728":1}}],["resources",{"0":{"443":1,"444":1,"445":1,"446":1,"561":1},"2":{"92":1,"97":1,"109":1,"112":1,"113":1,"177":1,"189":1,"193":1,"226":1,"233":1,"280":1,"319":1,"374":2,"409":1,"414":1,"434":1,"437":2,"473":1,"478":1,"481":1,"485":1,"490":1,"492":1,"551":1,"552":1,"604":1,"625":1,"626":1,"680":1,"711":1,"719":1,"746":1,"747":1,"759":1,"761":1,"763":1,"765":1,"834":1,"887":1,"889":1}}],["res",{"2":{"829":4,"830":4,"1259":2,"1276":2,"1337":2}}],["resultmap>",{"2":{"322":1}}],["resultmap",{"2":{"322":2}}],["resultmap=resultmap",{"2":{"322":1,"335":1,"336":1}}],["resulttype=",{"2":{"320":1,"322":1,"323":1,"325":1,"326":1,"333":1,"413":1,"546":1,"753":1}}],["result",{"2":{"205":1,"299":1,"301":1,"305":1,"308":1,"310":1,"313":1,"322":2,"390":1,"400":2,"417":2,"418":2,"540":2,"543":1,"593":1,"594":1,"633":1,"704":1,"818":1,"846":1,"2319":6}}],["resultset",{"2":{"322":1,"335":1,"336":1}}],["results",{"0":{"1":1},"1":{"2":1,"3":1,"4":1},"2":{"0":1}}],["restful",{"2":{"904":1}}],["restcontroller",{"2":{"384":1,"400":1,"421":1,"540":1,"600":1,"610":1,"632":1,"648":1,"704":1,"728":1,"859":1}}],["rest",{"0":{"346":1},"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1},"2":{"129":1,"346":1,"367":1,"368":1,"372":1,"377":1,"379":1,"384":1,"393":1,"397":1,"398":1,"448":1,"518":1,"525":1}}],["responsecode",{"2":{"421":2,"859":2,"864":4}}],["responseentity",{"0":{"894":1},"2":{"154":1,"156":2,"400":1,"421":1,"540":1,"600":1,"610":1,"632":1,"648":1,"704":1,"728":1,"859":1,"891":1,"894":2}}],["responsetype",{"2":{"46":1,"99":1,"119":1,"1281":1,"1342":1,"1519":1,"1546":1,"1547":1,"2269":1}}],["response",{"2":{"9":3,"17":3,"30":3,"31":1,"45":1,"46":2,"56":3,"57":3,"67":3,"76":3,"78":2,"98":3,"99":2,"119":2,"120":3,"121":2,"149":1,"570":1,"600":2,"601":2,"610":2,"664":1,"670":2,"671":2,"672":2,"721":1,"722":1,"732":1,"742":1,"883":1,"950":1,"1029":3,"1194":1,"1213":2,"1229":3,"1248":4,"1258":2,"1263":3,"1276":2,"1278":2,"1279":4,"1280":1,"1281":4,"1294":2,"1295":1,"1297":1,"1298":2,"1300":5,"1303":2,"1304":1,"1305":2,"1326":2,"1327":1,"1331":1,"1332":2,"1334":2,"1338":1,"1341":4,"1342":4,"1387":3,"1515":2,"1516":4,"1517":1,"1518":1,"1519":3,"1523":4,"1525":2,"1526":3,"1527":2,"1528":3,"1529":1,"1530":2,"1532":2,"1533":2,"1534":1,"1535":2,"1536":5,"1537":1,"1538":1,"1543":1,"1546":4,"1547":3,"1551":1,"1552":1,"1554":3,"1556":1,"1567":2,"1609":4,"1614":1,"1720":3,"1789":2,"1957":1,"1969":1,"1981":1,"2069":1,"2269":3}}],["=utf",{"2":{"1326":1}}],["==",{"2":{"1299":1,"1330":1}}],["=========|",{"2":{"505":1}}],["===",{"2":{"9":1,"17":1,"30":1,"56":1,"57":1,"67":2,"76":1,"78":1,"98":1,"120":1,"121":1,"1029":1,"1059":1,"1211":1,"1213":1,"1229":1,"1248":1,"1250":1,"1273":1,"1279":1,"1286":1,"1295":1,"1296":1,"1300":2,"1304":1,"1315":1,"1331":1,"1333":1,"1341":1,"1358":1,"1387":1,"1428":1,"1480":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1534":1,"1538":1,"1554":1,"1609":1,"1720":1,"1789":1}}],["=>",{"2":{"1029":2,"1035":1,"1036":1,"1059":1,"1072":1,"1083":2,"1091":1,"1104":1,"1105":1,"1126":1,"1140":1,"1151":1,"1157":1,"1176":1,"1212":1,"1219":1,"1235":1,"1248":1,"1249":1,"1250":3,"1261":2,"1273":2,"1276":2,"1299":1,"1304":3,"1316":1,"1319":1,"1320":1,"1330":1,"1331":1,"1336":2,"1349":1,"1350":2,"1352":1,"1358":1,"1360":1,"1361":1,"1362":1,"1366":4,"1368":1,"1379":1,"1385":1,"1387":1,"1388":1,"1389":1,"1395":1,"1399":1,"1404":1,"1409":2,"1413":1,"1419":3,"1424":1,"1428":1,"1434":1,"1449":1,"1454":1,"1463":4,"1468":2,"1473":1,"1480":3,"1534":3,"1536":1,"1537":1,"1538":2,"1566":1,"1567":1,"1574":2,"1593":1,"1603":1,"1609":2,"1613":3,"1615":1,"1625":1,"1629":2,"1633":1,"1635":3,"1717":1,"1718":1,"1720":2,"1724":2,"1895":2,"1911":1,"1918":1,"1920":2,"1922":3,"1974":1,"2078":1,"2087":2,"2146":3,"2147":3,"2151":1,"2156":3,"2157":3,"2224":1,"2225":1,"2226":1,"2292":1,"2333":1}}],["=",{"2":{"0":1,"9":2,"17":2,"30":3,"31":1,"45":3,"46":4,"56":2,"57":1,"67":4,"76":2,"78":3,"98":2,"99":2,"119":3,"120":2,"121":1,"149":2,"154":2,"156":4,"172":1,"178":4,"179":2,"180":5,"199":12,"205":1,"210":3,"211":3,"213":2,"214":2,"217":1,"219":5,"228":6,"248":4,"249":2,"250":1,"260":3,"290":2,"291":2,"293":1,"294":1,"296":1,"297":1,"299":1,"300":1,"301":1,"305":2,"308":1,"309":1,"310":1,"311":1,"313":1,"320":1,"325":4,"329":3,"333":1,"370":1,"371":3,"390":3,"400":5,"407":1,"408":1,"417":4,"418":3,"421":11,"451":2,"505":1,"540":5,"543":2,"570":2,"593":2,"594":2,"595":2,"600":2,"601":5,"609":3,"610":2,"618":5,"619":2,"622":1,"632":1,"633":4,"636":3,"641":3,"648":2,"649":2,"663":2,"670":2,"672":3,"675":2,"678":1,"692":1,"693":3,"694":2,"696":2,"698":2,"704":2,"707":2,"708":3,"709":4,"710":1,"728":1,"732":6,"753":1,"786":2,"789":2,"792":1,"793":1,"799":1,"804":1,"812":2,"813":3,"818":1,"838":3,"846":2,"859":11,"861":2,"862":2,"863":2,"864":9,"879":5,"883":2,"888":2,"891":2,"894":4,"896":1,"898":2,"910":3,"924":1,"933":1,"942":3,"946":2,"950":2,"954":1,"958":2,"966":2,"967":3,"975":1,"977":2,"978":2,"980":1,"981":1,"983":1,"1011":1,"1020":1,"1027":2,"1029":5,"1034":1,"1035":4,"1036":1,"1040":1,"1043":1,"1059":2,"1063":2,"1072":2,"1077":1,"1097":1,"1104":7,"1106":2,"1112":1,"1119":1,"1126":3,"1140":2,"1151":2,"1157":2,"1176":1,"1181":1,"1194":1,"1209":1,"1211":1,"1212":4,"1213":1,"1219":1,"1220":2,"1229":1,"1230":2,"1233":1,"1235":1,"1242":1,"1244":2,"1245":1,"1248":2,"1249":1,"1250":4,"1259":2,"1260":1,"1261":1,"1263":1,"1269":1,"1273":5,"1276":8,"1278":2,"1279":1,"1280":2,"1281":4,"1283":1,"1297":1,"1298":1,"1299":1,"1300":1,"1303":2,"1304":4,"1311":1,"1312":3,"1313":2,"1314":2,"1315":1,"1316":7,"1317":2,"1318":1,"1320":1,"1326":5,"1330":1,"1334":1,"1336":1,"1337":6,"1338":1,"1341":1,"1342":4,"1349":3,"1350":2,"1352":2,"1358":1,"1360":1,"1366":1,"1382":1,"1383":1,"1385":2,"1387":3,"1388":3,"1389":2,"1399":2,"1409":3,"1419":4,"1426":1,"1427":1,"1428":2,"1434":1,"1440":1,"1445":2,"1454":2,"1458":2,"1460":1,"1463":5,"1464":1,"1468":2,"1475":1,"1480":3,"1515":2,"1516":1,"1517":2,"1518":2,"1519":4,"1523":1,"1525":1,"1526":2,"1527":1,"1528":1,"1529":1,"1530":1,"1533":1,"1534":4,"1535":2,"1536":5,"1537":4,"1538":8,"1543":2,"1546":4,"1547":2,"1548":4,"1551":1,"1552":2,"1556":1,"1566":1,"1567":2,"1572":1,"1573":1,"1574":2,"1583":2,"1593":1,"1609":6,"1613":6,"1614":1,"1615":2,"1629":2,"1630":1,"1632":1,"1633":2,"1635":2,"1717":1,"1720":4,"1722":2,"1723":3,"1724":4,"1725":2,"1787":3,"1788":4,"1789":1,"1837":1,"1845":1,"1861":2,"1879":3,"1880":1,"1882":3,"1884":2,"1885":1,"1886":3,"1887":1,"1893":1,"1895":1,"1898":1,"1904":1,"1911":2,"1912":1,"1914":2,"1915":1,"1917":1,"1918":2,"1920":4,"1921":1,"1922":5,"1946":1,"1949":2,"1957":4,"1958":4,"1969":4,"1974":4,"1981":4,"1986":1,"2001":1,"2005":1,"2025":1,"2069":1,"2078":3,"2087":2,"2120":2,"2124":1,"2146":2,"2147":1,"2157":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":3,"2197":1,"2205":2,"2208":2,"2209":3,"2210":1,"2216":2,"2218":1,"2222":2,"2224":5,"2225":2,"2226":1,"2231":1,"2232":1,"2233":4,"2234":1,"2242":1,"2244":1,"2251":1,"2252":1,"2253":1,"2260":1,"2262":4,"2268":1,"2269":4,"2287":1,"2288":2,"2292":1,"2293":1,"2294":3,"2302":1,"2308":1,"2309":2,"2319":3,"2320":1,"2333":2}}],["fngetdata",{"2":{"1989":2}}],["features",{"2":{"1752":1}}],["fetchdata",{"2":{"1399":1,"1567":1,"1615":1,"1720":2}}],["failed",{"2":{"2184":1}}],["fallbacklocale",{"2":{"1879":1}}],["false면",{"2":{"1460":1}}],["false",{"2":{"69":1,"78":1,"204":1,"648":1,"740":1,"1026":3,"1033":3,"1276":2,"1337":2,"1385":1,"1395":1,"1458":2,"1460":1,"1466":1,"1467":1,"1537":1,"1879":1,"2156":1,"2204":4,"2220":1,"2221":2,"2226":2,"2302":1,"2329":1,"2330":1,"2331":1,"2332":1,"2333":3}}],["faq",{"0":{"2054":1},"1":{"2055":1,"2056":1,"2057":1,"2058":1,"2059":1},"2":{"1785":1}}],["favicon",{"0":{"1836":1},"2":{"1667":1,"1834":1,"1836":1}}],["function",{"2":{"1033":1,"1538":1,"1566":1,"1893":1,"1898":1,"1904":1,"1905":2,"2292":1,"2308":1}}],["full",{"2":{"5":1,"1754":1}}],["flatpickr",{"2":{"2113":1,"2131":1}}],["flash",{"2":{"601":1}}],["flex",{"2":{"1640":1}}],["flush",{"2":{"732":1}}],["frameoptionsconfig",{"2":{"620":1,"826":1}}],["frameoptions",{"2":{"620":1,"826":1}}],["framework의",{"2":{"1792":1,"1933":1}}],["framework에서",{"2":{"516":1}}],["framework는",{"2":{"514":1}}],["framework",{"0":{"513":1,"1661":1,"1791":1},"1":{"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"1792":1,"1793":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1},"2":{"515":1,"1598":1,"1652":1,"1692":1,"1779":1,"1858":1}}],["frame",{"0":{"826":1},"2":{"222":1,"620":1,"825":1,"986":1}}],["frontmatter",{"0":{"4":1},"2":{"0":3,"4":1}}],["fromdate",{"0":{"2210":1,"2243":1},"2":{"2210":1}}],["from",{"2":{"0":1,"256":1,"320":1,"325":1,"326":1,"333":1,"413":1,"546":1,"753":1,"834":1,"1011":1,"1027":1,"1029":2,"1035":1,"1040":1,"1063":1,"1072":1,"1126":2,"1140":1,"1151":1,"1157":1,"1162":3,"1209":1,"1219":2,"1220":1,"1233":1,"1242":1,"1250":2,"1278":1,"1303":1,"1352":1,"1358":1,"1360":1,"1361":2,"1382":1,"1385":1,"1387":2,"1388":2,"1389":3,"1399":1,"1409":1,"1419":1,"1426":1,"1428":2,"1434":1,"1440":1,"1445":1,"1454":1,"1460":1,"1463":2,"1464":1,"1468":2,"1475":1,"1480":1,"1515":1,"1535":1,"1547":1,"1548":2,"1574":1,"1588":1,"1609":4,"1613":2,"1629":1,"1630":1,"1632":1,"1635":2,"1720":2,"1722":1,"1723":2,"1724":2,"1830":2,"1855":1,"1861":4,"1879":1,"1880":2,"1882":1,"1884":1,"1886":1,"1887":1,"1893":2,"1898":5,"1904":4,"1905":1,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":2,"1921":1,"1922":2,"1958":1,"1974":1,"1986":1,"2001":1,"2069":1,"2078":1,"2087":1,"2120":1,"2124":1,"2146":2,"2147":3,"2151":1,"2156":2,"2157":2,"2224":2,"2262":2,"2287":1,"2308":1,"2309":1}}],["footer",{"2":{"1994":1}}],["fonts",{"2":{"1903":1,"1926":1}}],["fontname=",{"2":{"195":1,"197":3}}],["font",{"2":{"195":1,"197":3,"1637":2,"1728":2}}],["found",{"2":{"138":1,"2186":1}}],["foreach>",{"2":{"326":1}}],["foreach",{"0":{"326":1},"2":{"326":1,"1299":1,"1330":1,"1350":1}}],["force",{"2":{"236":1,"1748":1,"2178":1}}],["forbidden",{"2":{"138":1}}],["formid를",{"2":{"2318":1}}],["format=",{"2":{"2006":1}}],["formattedprice",{"2":{"2225":2}}],["formatted",{"2":{"1787":2,"2222":1}}],["formatteddate",{"2":{"1725":1}}],["formdata의",{"2":{"1316":1}}],["formdata를",{"2":{"1284":1}}],["formdata",{"0":{"1212":1,"1284":1,"1316":1,"1543":1},"2":{"45":12,"663":10,"1212":1,"1280":5,"1315":2,"1316":1,"1445":1,"1518":5,"1543":5,"2226":2,"2287":1,"2333":4}}],["form",{"0":{"44":1},"2":{"43":1,"45":1,"102":3,"183":1,"236":1,"651":1,"722":1,"1280":1}}],["for",{"2":{"0":1,"5":1,"1297":1,"1304":1,"1316":1,"1338":1,"1534":1,"1754":1,"2156":1,"2186":1}}],["fcmsysservice",{"2":{"534":1}}],["fcmsysmapper",{"2":{"534":1}}],["fcmsyscontroller",{"2":{"534":1}}],["fcmhriservice",{"2":{"534":1}}],["fcmhrimapper",{"2":{"534":1}}],["fcmhricontroller",{"2":{"534":1}}],["fcmcomutil",{"2":{"534":1}}],["fcmcomservice",{"2":{"534":1}}],["fcmcomcontroller",{"2":{"534":1}}],["fcm",{"0":{"125":1,"143":1,"441":2,"533":1,"556":2,"1663":1,"1680":1,"1807":1,"1960":1,"2297":1},"1":{"126":1,"127":1,"128":1,"534":1,"535":1,"536":1,"537":1,"538":1,"1808":1,"1809":1,"1810":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1,"1973":1,"1974":1,"1975":1,"2298":1,"2299":1,"2300":1,"2301":1,"2302":1,"2303":1,"2304":1,"2305":1,"2306":1,"2307":1,"2308":1,"2309":1,"2310":1,"2311":1},"2":{"125":1,"126":1,"127":3,"130":2,"143":1,"165":2,"243":1,"370":1,"407":1,"431":1,"434":2,"437":2,"441":1,"451":1,"454":3,"494":1,"507":2,"521":1,"534":1,"551":2,"556":1,"558":3,"763":2,"1000":2,"1598":2,"1652":1,"1653":1,"1674":1,"1680":1,"1778":1,"1779":1,"1808":1,"1809":1,"1817":4,"1820":1,"1853":1,"1858":2,"1864":2,"1872":1,"1961":1,"1962":1,"1973":1,"1975":1,"2298":2,"2310":1}}],["firefox",{"2":{"1700":1}}],["firebase",{"2":{"1674":1,"1872":1}}],["findstr",{"2":{"2177":1}}],["find",{"2":{"1480":1,"1989":1,"2146":1}}],["finally",{"2":{"1399":1,"1609":1,"1615":1,"1920":1}}],["final",{"2":{"400":2,"417":1,"540":2,"543":1,"804":1,"975":1}}],["finance",{"2":{"367":2,"368":1,"1663":1,"1680":1}}],["fig3300",{"2":{"756":1}}],["field",{"2":{"197":2,"1016":2,"1043":1,"1059":1,"1063":2,"1064":1,"1077":1,"1609":3,"1723":2,"1887":1,"1974":2,"1989":2,"2120":2,"2141":1}}],["fieldname",{"2":{"195":1}}],["fields",{"2":{"59":2}}],["fill",{"2":{"2151":2}}],["fillreport",{"2":{"180":1,"199":1,"709":1}}],["filtered",{"2":{"958":1}}],["filterchain",{"2":{"670":1,"671":1,"672":3}}],["filterregistrationbean",{"2":{"622":3,"675":6,"799":3}}],["filter",{"0":{"584":1,"585":2,"586":2,"587":2},"1":{"585":1,"586":1,"587":1},"2":{"439":1,"554":1,"568":1,"668":1,"670":2,"671":2,"672":1,"673":1,"676":1,"678":1,"1723":1}}],["filelink",{"2":{"1140":1}}],["filelist",{"2":{"45":2,"663":2}}],["fileexists",{"2":{"896":1}}],["fileoutputstream",{"2":{"879":2}}],["filedata",{"2":{"2218":2}}],["filedeleteprocess",{"2":{"649":1}}],["filedownload",{"2":{"46":2,"648":1,"664":1}}],["fileaddprocess",{"2":{"649":2}}],["fileurltopath",{"2":{"1161":6,"1201":2}}],["fileutil",{"2":{"158":3,"896":4}}],["fileupload",{"2":{"122":1,"243":3,"494":3,"658":3}}],["filebytes",{"2":{"156":2,"894":2}}],["filepath",{"2":{"156":3,"158":1,"649":2,"894":3,"896":2}}],["file2",{"2":{"45":1,"663":1}}],["file123",{"2":{"2267":1}}],["file1",{"2":{"45":1,"663":1}}],["filenamestarmatch",{"2":{"1326":4}}],["filename에",{"2":{"1281":1,"1342":1,"1546":1}}],["filename=",{"2":{"46":1,"99":1,"102":1,"103":1,"652":1}}],["filename",{"0":{"2218":1,"2259":1,"2260":1,"2261":1},"2":{"45":2,"46":3,"98":6,"103":3,"154":2,"156":1,"652":1,"664":1,"704":1,"721":1,"891":2,"894":1,"1281":1,"1326":5,"1342":1,"1519":1,"1546":1,"1547":1,"2218":1,"2258":2,"2259":1,"2260":1,"2261":1,"2269":1}}],["file",{"0":{"588":1,"654":1,"1217":1,"2233":1},"2":{"41":1,"43":1,"45":15,"46":2,"48":2,"51":2,"119":1,"154":7,"155":1,"156":5,"242":1,"244":1,"439":1,"554":1,"568":1,"646":1,"648":4,"649":3,"651":3,"663":2,"664":1,"665":1,"694":1,"891":7,"892":1,"894":5,"898":1,"1180":1,"1189":1,"1200":1,"1202":1,"1212":3,"1217":2,"1280":2,"1316":5,"1435":1,"1518":2,"1543":2,"1547":1,"1548":1,"1707":1,"1713":1,"1734":1,"2111":1,"2129":1,"2233":6,"2262":1}}],["filesaver",{"0":{"1547":1},"2":{"1547":2,"1548":2,"2262":2}}],["files",{"0":{"1193":1},"2":{"0":1,"44":1,"45":2,"51":1,"156":1,"648":2,"649":1,"651":1,"663":2,"665":1,"894":1,"1189":1,"1200":1,"1212":1,"1316":3,"1494":1,"2233":1}}],["f",{"2":{"46":4,"652":2,"664":1,"1339":1,"1555":1,"2177":1}}],["vbtn",{"2":{"1898":1}}],["vapp>",{"2":{"1860":2}}],["variables",{"2":{"696":2,"1639":1}}],["val",{"0":{"2205":1,"2244":1,"2276":1,"2277":1,"2278":1,"2281":1,"2305":1,"2318":1},"2":{"2205":2,"2305":1}}],["validateform",{"2":{"2226":1,"2333":1}}],["validatetoken",{"2":{"672":1}}],["validationtimeout",{"2":{"618":1}}],["validationutil",{"2":{"249":3}}],["valkey",{"0":{"465":1,"848":1},"1":{"849":1,"850":1,"851":1},"2":{"433":1,"465":1}}],["valuefield",{"0":{"2192":1,"2216":1},"2":{"2216":1}}],["value++",{"2":{"2078":1}}],["values",{"0":{"2194":1},"2":{"1245":1}}],["value=",{"2":{"648":1,"1027":1,"1035":1,"1036":1,"1464":2,"1722":1}}],["value5",{"2":{"36":1}}],["value4",{"2":{"36":1}}],["value3",{"2":{"36":1}}],["value",{"0":{"297":1,"735":1,"1243":1,"1452":1,"1460":1,"2204":1,"2287":1,"2329":1},"2":{"32":1,"65":1,"66":1,"67":1,"248":1,"400":1,"421":1,"540":1,"621":2,"636":1,"649":1,"678":1,"729":2,"742":1,"743":1,"859":1,"864":1,"954":2,"1016":1,"1029":1,"1035":2,"1036":4,"1059":1,"1104":1,"1126":1,"1316":5,"1320":1,"1460":1,"1537":1,"1574":1,"1591":1,"1593":2,"1609":1,"1630":1,"1720":1,"1722":3,"1725":2,"1787":2,"1882":1,"1886":2,"1914":1,"1917":1,"1922":4,"2156":4,"2195":2,"2204":1,"2222":1,"2225":1,"2260":1,"2261":2,"2287":1,"2293":1,"2302":1,"2309":1,"2333":3}}],["value2",{"2":{"30":2,"31":1,"36":1,"139":1,"349":1,"1515":1,"1517":1,"1551":1,"1552":1,"1592":1,"2319":1}}],["value1^value2^",{"2":{"2319":1}}],["value1",{"2":{"30":2,"31":1,"32":1,"33":1,"36":1,"80":1,"92":1,"139":1,"349":1,"1515":1,"1517":1,"1551":1,"1552":1,"1592":1,"2319":1}}],["visual",{"2":{"1699":1}}],["visible",{"0":{"1466":1},"2":{"1434":1,"1458":1,"1463":1,"1464":1,"1917":1}}],["visitedmenu",{"2":{"1404":1,"1913":1}}],["vitest",{"2":{"2155":1,"2156":1}}],["vitejs",{"2":{"2048":1,"2083":2}}],["vite는",{"2":{"1496":1,"1847":1}}],["vite가",{"2":{"1491":1,"1747":1}}],["vite를",{"2":{"1197":1}}],["vite에서는",{"2":{"1181":1}}],["vite",{"0":{"1196":1,"1688":1,"2039":1,"2048":1,"2080":1},"1":{"1197":1,"1198":1,"1199":1,"1200":1,"1201":1,"1202":1,"1203":1,"1204":1,"1205":1,"1206":1,"2081":1,"2082":1,"2083":1},"2":{"1160":1,"1166":1,"1167":1,"1180":3,"1181":2,"1183":1,"1184":1,"1185":1,"1187":1,"1188":1,"1189":3,"1197":1,"1200":3,"1202":2,"1653":1,"1654":1,"1656":1,"1667":2,"1688":1,"1699":1,"1707":3,"1713":2,"1734":3,"1749":1,"1756":1,"1777":1,"1780":1,"1816":2,"1849":1,"2039":1,"2058":1,"2081":1,"2083":1,"2179":1}}],["vitepress의",{"2":{"1790":1}}],["vitepress",{"2":{"0":2,"1751":1,"1752":1}}],["views",{"0":{"1677":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1823":1,"1864":1},"1":{"1678":1,"1679":1,"1680":1,"1681":1,"1682":1},"2":{"1005":1,"1010":1,"1014":1,"1019":1,"1025":1,"1032":1,"1039":1,"1042":1,"1049":1,"1051":1,"1053":1,"1057":1,"1068":1,"1076":1,"1081":1,"1083":2,"1087":1,"1091":1,"1095":1,"1102":1,"1104":1,"1105":1,"1106":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1206":1,"1348":1,"1349":1,"1362":1,"1366":4,"1368":1,"1370":1,"1560":1,"1561":1,"1582":1,"1587":2,"1598":5,"1599":1,"1603":1,"1607":1,"1622":1,"1625":1,"1667":1,"1717":2,"1718":1,"1794":1,"1795":1,"1796":1,"1802":1,"1803":1,"1804":1,"1805":1,"1809":1,"1813":1,"1817":1,"1858":1,"1895":2,"1934":1,"1942":1,"1962":1,"1978":1,"1986":1,"1993":1,"1994":1,"2056":1,"2146":1,"2147":1}}],["viewer",{"2":{"643":1}}],["view",{"2":{"630":1}}],["volar",{"2":{"1699":1}}],["vo",{"2":{"630":1}}],["void",{"2":{"162":1,"228":1,"621":1,"670":1,"671":1,"672":1,"692":1,"693":1,"694":1,"696":1,"989":1,"992":1}}],["v3",{"2":{"505":1,"866":1,"867":1,"869":1}}],["vs",{"2":{"466":1,"1699":1}}],["vendor",{"0":{"1684":1,"1824":1},"2":{"460":1,"1161":5,"1201":1,"1206":1,"1587":1,"1638":1,"1644":1,"1667":1,"1817":1,"1829":5,"1926":1}}],["version",{"2":{"459":2,"460":2,"1695":1,"1696":2,"1697":1,"1732":1}}],["version>2",{"2":{"927":1}}],["version>23",{"2":{"835":1}}],["version>42",{"2":{"836":1}}],["version>6",{"2":{"759":1}}],["version>1",{"2":{"612":1}}],["version>17",{"2":{"270":1}}],["version>3",{"2":{"269":1,"929":1}}],["version>",{"2":{"268":1,"269":1,"270":1,"612":1,"759":1,"835":1,"836":1,"927":1,"929":1}}],["version>0",{"2":{"268":1}}],["version=",{"2":{"197":1,"320":1,"333":1,"413":1,"546":1,"753":1}}],["vm",{"2":{"459":1}}],["v1",{"2":{"69":1,"204":1,"740":1}}],["v",{"2":{"30":8,"31":4,"32":2,"33":1,"37":1,"67":3,"76":6,"77":9,"80":1,"82":2,"92":1,"98":3,"120":9,"121":18,"633":1,"721":1,"1007":3,"1015":1,"1016":3,"1020":1,"1024":1,"1026":1,"1027":5,"1033":1,"1035":1,"1036":1,"1040":1,"1428":9,"1464":2,"1517":2,"1537":3,"1552":2,"1591":1,"1600":6,"1609":10,"1643":2,"1646":6,"1648":6,"1649":2,"1717":2,"1722":1,"1727":6,"1946":4,"1949":5,"1957":6,"1969":9,"1973":2,"1981":11,"1983":1,"1989":10,"1999":1,"2003":1,"2005":2,"2006":1,"2009":1,"2025":5,"2062":2,"2141":5}}],["vue의",{"2":{"2079":1}}],["vuejs",{"2":{"2047":1,"2049":1,"2051":1}}],["vuejsx",{"2":{"1199":1}}],["vuex의",{"2":{"1653":1,"2086":1}}],["vueuse",{"2":{"1205":1}}],["vuedraggable",{"2":{"2114":1,"2132":1}}],["vuedraggable을",{"2":{"1098":1}}],["vuedevtools",{"2":{"1199":1}}],["vue3",{"2":{"1063":1,"1609":1,"1723":1,"1880":1,"1974":1,"2071":1,"2097":1,"2101":1,"2115":1,"2120":1,"2133":1}}],["vuetifyjs",{"2":{"2050":1}}],["vuetify의",{"2":{"1007":1,"1016":1,"1024":1,"1303":1,"1537":1,"1646":1}}],["vuetify",{"0":{"1007":1,"1016":1,"1537":1,"1645":1,"1727":1,"1897":2,"2045":1,"2050":1,"2139":1},"1":{"1646":1,"1647":1,"1648":1,"1649":1,"1650":1,"1898":2,"1899":2,"1900":2,"1901":2,"2140":1,"2141":1,"2142":1,"2143":1},"2":{"1199":2,"1643":1,"1650":1,"1653":1,"1657":1,"1676":2,"1756":1,"1776":2,"1777":1,"1817":2,"1822":1,"1865":1,"1891":2,"1897":1,"1898":6,"1899":1,"1904":3,"1906":1,"2045":1,"2083":2,"2116":1,"2140":1}}],["vue",{"0":{"1079":1,"1085":1,"1100":1,"1569":1,"1670":1,"1794":1,"1795":1,"1796":1,"1802":1,"1803":1,"1804":1,"1805":1,"1860":1,"1894":1,"1936":1,"1937":1,"1938":1,"1939":1,"1945":1,"1946":1,"1947":1,"1949":1,"1951":1,"1953":1,"1955":1,"1965":1,"1966":1,"1967":1,"1969":1,"1970":1,"1971":1,"1981":1,"1982":1,"1983":1,"1984":1,"1997":1,"1999":1,"2001":1,"2003":1,"2005":1,"2006":1,"2007":1,"2009":1,"2010":1,"2011":1,"2013":1,"2014":1,"2015":1,"2017":1,"2018":1,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2028":1,"2029":1,"2030":1,"2047":1,"2051":1,"2075":1,"2088":1,"2134":1},"1":{"1080":1,"1081":1,"1082":1,"1083":1,"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1,"1101":1,"1102":1,"1103":1,"1104":1,"1105":1,"1106":1,"1570":1,"1571":1,"1572":1,"1573":1,"1574":1,"1895":1,"1896":1,"2076":1,"2077":1,"2078":1,"2079":1,"2089":1,"2090":1,"2091":1,"2135":1,"2136":1,"2137":1,"2138":1},"2":{"0":1,"1005":1,"1006":1,"1007":1,"1010":1,"1011":1,"1014":1,"1015":1,"1016":1,"1019":1,"1020":1,"1025":1,"1027":2,"1029":2,"1032":1,"1035":2,"1036":1,"1039":1,"1040":2,"1042":1,"1043":1,"1044":1,"1049":1,"1051":1,"1053":1,"1057":1,"1062":1,"1063":1,"1068":1,"1072":1,"1076":1,"1081":1,"1083":2,"1087":1,"1091":1,"1095":1,"1097":1,"1102":1,"1104":1,"1105":1,"1106":1,"1110":1,"1112":1,"1117":1,"1119":1,"1125":1,"1126":2,"1130":1,"1132":1,"1134":1,"1138":1,"1140":1,"1143":1,"1145":1,"1149":1,"1151":1,"1155":1,"1157":1,"1199":3,"1205":2,"1219":2,"1250":2,"1347":1,"1348":3,"1349":1,"1352":2,"1362":1,"1366":4,"1368":1,"1370":1,"1385":1,"1387":1,"1388":2,"1389":3,"1399":1,"1409":1,"1419":1,"1428":2,"1454":1,"1463":2,"1464":1,"1475":1,"1480":1,"1537":1,"1558":1,"1560":1,"1561":1,"1570":1,"1571":1,"1572":1,"1573":1,"1574":2,"1576":1,"1583":1,"1584":1,"1586":1,"1588":2,"1591":1,"1592":1,"1593":1,"1594":1,"1599":2,"1600":1,"1603":1,"1607":1,"1609":2,"1612":1,"1613":2,"1622":1,"1625":1,"1635":2,"1637":1,"1643":1,"1646":1,"1648":1,"1649":1,"1652":1,"1653":3,"1654":1,"1656":2,"1667":2,"1670":1,"1671":1,"1676":1,"1691":1,"1699":1,"1712":1,"1717":2,"1718":1,"1720":2,"1722":2,"1723":2,"1724":1,"1725":1,"1727":1,"1728":1,"1731":1,"1756":1,"1769":3,"1777":2,"1781":1,"1782":1,"1794":1,"1795":1,"1796":1,"1802":1,"1803":1,"1804":1,"1805":1,"1816":1,"1817":2,"1822":1,"1826":2,"1837":2,"1844":1,"1845":1,"1855":1,"1857":1,"1858":2,"1860":1,"1861":4,"1865":1,"1877":1,"1879":2,"1882":2,"1883":1,"1884":2,"1885":1,"1886":1,"1887":1,"1888":1,"1890":1,"1891":1,"1895":2,"1906":1,"1920":1,"1921":1,"1922":1,"1934":6,"1942":13,"1945":1,"1949":1,"1962":6,"1969":1,"1973":1,"1974":1,"1978":4,"1981":1,"1983":1,"1989":1,"1990":1,"1994":34,"1997":1,"1999":1,"2003":1,"2005":1,"2006":1,"2009":1,"2014":1,"2062":1,"2071":1,"2072":2,"2076":1,"2077":1,"2078":3,"2083":4,"2089":1,"2102":1,"2112":2,"2113":1,"2115":1,"2116":1,"2120":1,"2130":1,"2131":1,"2133":1,"2135":1,"2145":1,"2146":2,"2147":2,"2155":1,"2222":1,"2224":1,"2225":1,"2226":1,"2333":1}}],["mfile",{"2":{"649":1}}],["mm",{"2":{"558":2,"2006":1,"2241":2,"2246":1,"2247":2}}],["mvnw",{"2":{"437":2,"478":1,"496":1,"549":2}}],["mvn",{"2":{"273":3,"460":1,"496":1,"502":2,"503":1,"515":1,"750":3}}],["mytable",{"2":{"2259":1}}],["myfirstpage",{"2":{"1717":1,"1718":3}}],["mynewpage",{"2":{"1599":1,"1603":3,"1606":1,"1607":2,"1612":1,"1621":1,"1622":2,"1625":3,"1826":1}}],["mystore",{"2":{"1562":1,"1629":2,"1630":3}}],["myservice",{"2":{"609":1}}],["mycomponent>",{"2":{"1594":2}}],["mycomponent",{"2":{"1558":1,"1561":1,"1571":1,"1576":1,"1588":3,"1592":1,"1593":1,"2146":5,"2147":4}}],["mycontroller",{"2":{"610":1,"632":1}}],["mymodal",{"2":{"1426":1,"1428":1}}],["mymailservice",{"2":{"692":1,"693":1,"696":1}}],["mypage",{"2":{"1362":3,"1368":3,"1370":2,"1560":1,"2318":2}}],["mypopup",{"2":{"1106":1}}],["my",{"2":{"610":1,"632":1,"1580":1,"1583":2,"1600":2,"1637":1,"1639":1,"1640":1,"1728":1}}],["mybatis를",{"2":{"328":1}}],["mybatis",{"0":{"262":1,"328":1,"444":1,"445":1,"751":1,"774":1,"778":1,"842":1,"907":1},"1":{"263":1,"264":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"752":1,"753":1,"754":1,"843":1,"844":1,"908":1,"909":1,"910":1},"2":{"261":2,"263":4,"265":1,"276":2,"315":1,"320":3,"330":4,"333":3,"368":1,"371":1,"377":1,"381":1,"386":1,"413":3,"433":1,"434":1,"437":2,"445":3,"448":1,"451":1,"516":2,"519":1,"525":1,"546":3,"551":5,"554":1,"579":2,"616":1,"618":1,"623":1,"747":2,"752":1,"753":3,"754":4,"766":1,"774":3,"838":2,"843":4,"908":1}}],["myreportservice",{"2":{"199":1}}],["m0wcajab43kec8zmwq",{"2":{"211":1,"238":1,"790":1,"978":1}}],["m002",{"2":{"76":1,"120":1}}],["m001",{"2":{"76":1,"120":1,"121":1}}],["mixins",{"2":{"1640":1}}],["mixed",{"2":{"459":1}}],["minimumfractiondigits",{"2":{"1879":2}}],["minimumidle",{"2":{"618":1}}],["minification",{"2":{"1175":1}}],["minute",{"2":{"804":1,"975":1}}],["microsoftarchive",{"2":{"488":1}}],["miievaibadanbgkqhkig9w0baqefaascbkywggsiageaaoibaqcmi2rk09daxkzbr3gkbk+33ye7qzexx3qfznmco7yjonv3bco5hyv7ffwqt9wctu+ztiuyi3oqi+pf65",{"2":{"211":1,"238":1,"790":1,"978":1}}],["mimetype",{"0":{"2218":1},"2":{"898":1,"2218":1}}],["mimemessagehelper",{"2":{"693":2,"694":2}}],["mimemessage",{"2":{"693":1,"694":1}}],["mime",{"0":{"897":1},"1":{"898":1},"2":{"46":1,"119":2,"123":1,"652":1,"898":1,"986":1,"2218":1}}],["ms",{"2":{"102":1,"722":1}}],["mstno",{"2":{"205":1,"729":1}}],["mst",{"2":{"67":2,"742":1}}],["msgktstel=",{"2":{"1949":1}}],["msgktkey",{"2":{"729":1,"732":1}}],["msgkturlsms",{"2":{"729":1,"732":1}}],["msg001",{"2":{"67":1,"742":1}}],["msg0001",{"2":{"30":2,"32":1,"33":1,"37":1,"67":2}}],["msg",{"0":{"737":1},"2":{"65":2,"66":2,"67":2,"729":2,"731":2,"742":2,"1538":2,"1752":2,"1949":4}}],["msgsend",{"2":{"65":1,"67":1,"728":3,"742":1}}],["multiselectedvalue",{"2":{"1035":1}}],["multiselectboxsql을",{"2":{"1042":1}}],["multiselectboxsql",{"0":{"1030":1,"2007":1},"1":{"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1},"2":{"1032":1,"1035":1,"1036":1,"1766":1,"1994":1}}],["multiselectlist",{"2":{"32":1,"38":1}}],["multipartfile을",{"2":{"891":1}}],["multipartfile>",{"2":{"648":1}}],["multipartfile",{"0":{"154":1,"891":1},"2":{"44":1,"48":1,"154":1,"649":1,"654":1,"891":1}}],["multipart",{"2":{"43":1,"45":1,"102":1,"155":1,"242":1,"651":1,"892":1,"1280":1}}],["messaging",{"2":{"1674":1,"1872":1}}],["messages",{"2":{"1879":2,"1885":2,"1898":1}}],["message",{"2":{"9":2,"30":2,"31":2,"34":3,"45":2,"56":1,"57":3,"67":2,"76":3,"78":3,"98":3,"120":2,"121":3,"136":1,"137":1,"351":1,"352":1,"393":1,"402":1,"403":1,"541":2,"607":1,"632":1,"651":1,"692":5,"693":3,"694":3,"1279":1,"1286":1,"1288":1,"1296":1,"1298":3,"1303":1,"1305":1,"1333":1,"1334":3,"1339":1,"1341":1,"1516":1,"1523":1,"1526":3,"1529":1,"1532":1,"1533":5,"1535":1,"1536":6,"1537":2,"1538":4,"1554":1,"1555":1,"1609":1,"1885":3}}],["meta",{"2":{"1104":1,"1161":6,"1181":1,"1201":2,"1299":1,"1317":3,"1318":2,"1330":1,"1349":1,"1360":1,"1362":1,"1837":1,"1845":1}}],["methods",{"2":{"1883":1}}],["method",{"2":{"7":1,"15":1,"28":1,"41":1,"54":1,"63":1,"74":1,"90":1,"117":1,"400":1,"540":1,"621":1}}],["media",{"2":{"869":2}}],["mediatype",{"2":{"156":1,"894":1,"989":1}}],["menulist",{"2":{"1913":2}}],["menulevel3",{"2":{"1113":1,"1120":1,"1350":1}}],["menulevel2",{"2":{"76":2,"1113":1,"1120":1}}],["menulevel1",{"2":{"76":2,"1113":1}}],["menudata",{"0":{"1416":1},"2":{"1350":2,"1416":1,"1918":1}}],["menustore는",{"2":{"1402":1}}],["menustore",{"0":{"1401":1,"1913":1},"1":{"1402":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1},"2":{"1314":2,"1350":2,"1403":1,"1409":4,"1468":3,"1675":1,"1762":1,"1817":1,"1909":1,"2123":1}}],["menusidebar",{"0":{"1115":1,"2017":1},"1":{"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1121":1},"2":{"1117":1,"1119":1,"1994":1}}],["menuheaderbar",{"0":{"1108":1,"2018":1},"1":{"1109":1,"1110":1,"1111":1,"1112":1,"1113":1},"2":{"1110":1,"1112":1,"1994":1}}],["menubmk",{"0":{"1093":1,"2019":1},"1":{"1094":1,"1095":1,"1096":1,"1097":1,"1098":1},"2":{"1095":1,"1097":1,"1994":1}}],["menuname",{"2":{"76":2,"1347":1,"1475":1,"1606":1,"1621":1,"1949":1}}],["menuid",{"2":{"76":2,"1347":1,"1350":1,"1352":1,"1475":1,"1606":1,"1621":1,"1949":1}}],["menu",{"0":{"1407":1,"1475":1,"2016":1},"1":{"2017":1,"2018":1,"2019":1},"2":{"76":5,"120":6,"121":3,"1089":1,"1095":1,"1110":1,"1117":1,"1350":4,"1352":3,"1404":1,"1409":2,"1418":1,"1475":1,"1582":1,"1682":1,"1817":1,"1913":1,"1994":1,"2014":1,"2025":1}}],["markdown",{"0":{"1751":1},"1":{"1752":1,"1753":1,"1754":1},"2":{"1751":1,"1754":1}}],["material",{"2":{"1653":1,"1657":1,"1777":1,"1900":1,"2064":1}}],["math",{"2":{"1534":1}}],["matched",{"2":{"1358":1}}],["match",{"2":{"898":2,"1326":1,"2186":1}}],["matchifmissing",{"2":{"618":1}}],["many",{"0":{"1287":1,"1295":1,"1331":1},"2":{"975":1,"2162":1}}],["magicmatch",{"2":{"898":2}}],["magic",{"2":{"898":2}}],["macos",{"2":{"1701":1}}],["mac",{"0":{"489":1},"2":{"549":1}}],["maven에서",{"2":{"834":1}}],["maven으로",{"0":{"502":1},"2":{"759":1}}],["maven을",{"2":{"266":1}}],["maven",{"0":{"266":1,"279":1,"280":1,"339":1,"496":1,"612":1},"1":{"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"340":1,"341":1,"342":1},"2":{"279":1,"280":1,"433":1,"437":2,"452":1,"460":6,"463":1,"464":1,"478":2,"496":1,"520":2,"549":3,"557":2,"563":1,"759":1,"835":2,"836":1}}],["mailutil",{"2":{"698":2}}],["mailsender",{"2":{"692":2,"693":3,"694":2}}],["mailservice",{"2":{"172":2}}],["maildata",{"2":{"172":5}}],["mail",{"0":{"589":1,"689":1},"1":{"690":1},"2":{"171":2,"275":1,"439":1,"554":1,"568":1,"684":1,"686":1,"687":1,"690":2}}],["mail을",{"2":{"169":1}}],["mainheader",{"2":{"1994":1}}],["mainclass>",{"2":{"279":1}}],["mainclass>axpframework",{"2":{"279":1}}],["main이라는",{"2":{"98":1,"110":1,"190":1}}],["main",{"0":{"551":1,"560":1,"561":1,"1085":1,"1373":1,"1671":1,"1861":1,"1938":1},"1":{"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1},"2":{"0":1,"92":2,"98":2,"110":3,"112":1,"113":1,"177":1,"190":2,"193":1,"226":1,"233":1,"280":1,"319":1,"368":2,"374":2,"409":1,"414":1,"434":2,"437":1,"473":1,"478":1,"481":1,"485":1,"490":1,"492":1,"500":1,"549":1,"551":1,"604":1,"625":1,"626":1,"680":1,"711":1,"716":1,"719":1,"746":1,"759":1,"761":1,"763":1,"765":2,"834":1,"887":1,"889":1,"1087":2,"1089":1,"1091":4,"1358":1,"1366":4,"1644":1,"1667":1,"1678":1,"1769":1,"1817":2,"1838":1,"1840":1,"1846":2,"1858":1,"1893":1,"1895":5,"1904":1,"1934":2,"1994":1,"2151":1}}],["maximumfractiondigits",{"2":{"1879":2}}],["maximumpoolsize",{"2":{"618":1}}],["maxretries",{"2":{"1304":3,"1534":3}}],["maxage",{"2":{"621":1}}],["max",{"2":{"155":2,"236":2,"242":2,"449":1,"804":1,"892":2,"975":1,"1428":1,"1571":1,"1577":1,"2174":1}}],["maxtokens",{"2":{"9":2}}],["malgungothic",{"2":{"113":1,"194":1,"718":1,"756":1,"889":1}}],["mappings",{"2":{"239":1,"493":1,"621":3}}],["mapper로",{"2":{"565":1}}],["mapperscan",{"0":{"329":1,"371":1,"408":1},"2":{"329":1,"371":1,"396":1,"408":1,"451":1,"910":1}}],["mapper>",{"2":{"320":1,"333":1,"413":1,"546":1,"753":1}}],["mapper를",{"2":{"315":1,"385":1,"386":1,"411":1}}],["mapper",{"0":{"315":1,"316":1,"332":1,"381":1,"386":1,"411":1,"444":1,"445":1,"544":1,"752":1,"754":1},"1":{"316":1,"317":2,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"412":1,"413":1,"414":1,"415":1,"545":1,"546":1},"2":{"164":1,"244":1,"263":3,"264":1,"314":1,"317":3,"319":1,"320":5,"329":2,"330":3,"331":1,"332":1,"333":5,"338":1,"368":4,"371":5,"372":1,"374":3,"377":2,"380":1,"386":2,"388":4,"396":1,"397":1,"406":1,"408":3,"409":1,"410":1,"412":2,"413":6,"414":2,"415":1,"419":1,"434":1,"437":2,"439":2,"440":4,"444":1,"445":1,"448":2,"451":3,"455":1,"515":1,"516":2,"518":3,"525":2,"527":4,"534":2,"545":2,"546":6,"551":2,"554":4,"555":4,"556":3,"598":2,"630":1,"684":2,"702":2,"726":2,"747":2,"752":1,"753":5,"754":1,"774":3,"843":3,"844":1,"910":2,"924":3}}],["map",{"2":{"30":2,"31":2,"32":1,"34":1,"56":1,"57":1,"76":3,"77":1,"94":1,"149":1,"156":1,"162":1,"172":1,"178":4,"199":6,"228":3,"250":1,"299":1,"305":2,"308":1,"311":1,"313":1,"317":6,"320":1,"322":2,"323":1,"325":1,"326":1,"332":2,"333":1,"390":2,"400":1,"412":2,"413":1,"417":3,"418":3,"421":1,"540":1,"543":1,"545":2,"546":1,"570":1,"593":2,"594":2,"600":1,"601":4,"609":2,"610":1,"633":4,"636":3,"648":1,"649":2,"663":2,"696":1,"704":2,"707":2,"708":2,"728":1,"729":1,"753":1,"818":1,"846":1,"859":1,"883":1,"888":1,"894":1,"950":1,"1212":1,"1316":1}}],["months",{"2":{"2252":1}}],["mount",{"2":{"1861":1,"1904":1,"2146":3,"2147":2}}],["mouseevent",{"2":{"1440":1}}],["module",{"2":{"2082":1}}],["modules",{"2":{"1097":2,"1104":2,"1112":2,"1119":2,"1349":2,"1667":1,"1708":1,"1748":1,"1816":1,"2172":1,"2178":2}}],["modules=",{"2":{"1097":1,"1112":1,"1119":1}}],["modifier",{"2":{"1580":1}}],["modaldata",{"2":{"1915":1}}],["modalid",{"0":{"1426":1},"2":{"1424":1,"1426":1,"1428":1,"1915":1}}],["modalconfig",{"2":{"1424":1,"1428":1}}],["modalstore는",{"2":{"1422":1}}],["modalstore",{"0":{"1421":1,"1915":1},"1":{"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1,"1428":1},"2":{"1126":3,"1140":3,"1151":3,"1157":3,"1423":1,"1426":3,"1427":2,"1428":4,"1675":1,"1762":1,"1817":1,"1909":1,"1915":3,"2123":1}}],["mode",{"2":{"459":1,"765":1,"1176":2}}],["mode=out",{"2":{"322":1,"335":1,"336":1}}],["mode=in",{"2":{"322":1,"323":1,"335":1,"336":1,"337":1}}],["modelvalue=",{"2":{"1035":1,"1593":1}}],["modelvalue",{"2":{"1026":1,"1033":1,"1573":1,"1579":1,"1583":1,"1613":1}}],["model=",{"2":{"1015":1,"1016":1,"1020":1,"1027":1,"1035":1,"1036":1,"1040":1,"1428":1,"1537":1,"1591":1,"1722":1,"1973":1,"1983":1,"1989":2,"1999":1,"2003":1,"2005":1,"2006":1,"2009":1}}],["models",{"2":{"601":1}}],["model",{"2":{"9":3,"1026":1,"1033":1,"1464":2}}],["mockmvc",{"2":{"989":3}}],["motel",{"2":{"732":1}}],["mo",{"2":{"65":1,"66":1,"67":1,"731":1,"742":1}}],["mozilla",{"2":{"56":2,"59":1,"946":1}}],["more",{"0":{"5":1,"1754":1}}],["md```js",{"2":{"1752":1}}],["mdi",{"2":{"1649":1,"1898":1,"2062":1,"2064":1}}],["md=",{"2":{"1648":2}}],["md5util",{"2":{"213":2,"792":2,"980":2}}],["md5",{"0":{"213":1,"792":1,"980":1},"2":{"575":1,"630":1,"640":1}}],["md",{"2":{"0":2,"1667":1,"1753":1,"1816":1}}],["i18n",{"0":{"1879":1},"2":{"1817":1,"1876":1,"1877":2,"1879":5,"1882":1,"1884":1,"1885":1,"1886":1,"1888":1}}],["ico",{"0":{"1836":1},"2":{"1667":1,"1834":1,"1836":1}}],["iconbtn",{"2":{"1898":1}}],["iconify를",{"2":{"1743":1,"2061":1}}],["iconify",{"0":{"1902":2,"2061":1},"2":{"1676":2,"1785":1,"1817":2,"1822":1,"1891":2,"1902":1}}],["icons",{"0":{"1900":1},"2":{"1657":1,"1743":1,"1891":3,"1898":3,"1900":1,"2063":1,"2064":1}}],["icon=",{"2":{"1649":2,"2062":2}}],["icon",{"2":{"1649":2,"1836":2,"2062":2,"2064":1}}],["i++",{"2":{"1304":1,"1534":1}}],["iv",{"2":{"1215":1,"1216":1,"2231":3,"2232":3}}],["ivsmqknqx9grlanxlv",{"2":{"211":1,"238":1,"790":1,"978":1}}],["io",{"0":{"927":1},"2":{"780":1,"927":2}}],["ireport로",{"2":{"757":1}}],["ibatis",{"2":{"164":1,"244":1,"317":1,"1001":1}}],["is",{"2":{"1753":10,"2156":1}}],["isunfoldable",{"2":{"1463":2}}],["isvisible",{"2":{"1463":2}}],["isvalidphone",{"2":{"249":1}}],["isvalidemail",{"2":{"249":1}}],["isvalid",{"2":{"249":2}}],["ismodalopen",{"2":{"1428":2}}],["isbmk",{"2":{"1409":1}}],["isbookmarked",{"2":{"1409":1}}],["isbold=",{"2":{"197":1}}],["isroutenotfound",{"2":{"1358":2}}],["isrefreshing",{"2":{"1261":1,"1276":4,"1336":1,"1337":2}}],["isrefresh",{"2":{"813":1,"967":1}}],["isrefreshtoken",{"2":{"219":1,"635":1,"813":1,"967":1}}],["isauth",{"2":{"1911":1}}],["isauthenticated",{"0":{"1385":1},"2":{"1235":2,"1360":1,"1385":3,"1389":1,"1633":2,"1635":2,"1724":2,"1788":1,"1911":2,"1920":2,"1921":2}}],["isaxioserror",{"2":{"1305":1,"1532":1}}],["isencrypt",{"2":{"1244":1,"1250":2}}],["isempty",{"2":{"154":1,"248":2,"636":2,"891":1,"958":2,"2222":1,"2302":1,"2309":1}}],["isloading",{"2":{"1011":1,"1395":1,"1399":1,"1912":1}}],["isloading=",{"2":{"1011":1,"1399":1}}],["isok",{"2":{"67":4,"742":1,"989":1}}],["implements",{"2":{"621":1,"670":1,"671":1}}],["impl",{"2":{"277":1,"932":1}}],["import를",{"2":{"2079":1,"2200":1}}],["import와",{"2":{"1653":1}}],["imports",{"2":{"1205":2,"1817":1,"2055":1}}],["import합니다",{"2":{"453":1,"749":1,"1644":1}}],["import",{"2":{"0":1,"234":1,"317":3,"453":1,"501":1,"749":1,"898":1,"942":1,"1011":1,"1027":1,"1029":2,"1035":1,"1040":1,"1063":1,"1072":1,"1083":2,"1091":1,"1104":1,"1105":1,"1126":2,"1140":1,"1151":1,"1157":1,"1161":6,"1162":3,"1181":1,"1201":2,"1219":2,"1250":2,"1349":1,"1350":1,"1352":1,"1362":1,"1366":4,"1368":1,"1385":1,"1387":2,"1388":2,"1389":3,"1399":1,"1409":1,"1419":1,"1428":2,"1454":1,"1463":2,"1464":1,"1468":1,"1480":1,"1548":1,"1574":1,"1588":1,"1591":1,"1603":1,"1609":4,"1613":3,"1625":1,"1635":2,"1639":1,"1640":1,"1718":1,"1720":2,"1722":1,"1723":2,"1724":2,"1744":1,"1770":1,"1830":2,"1837":1,"1845":1,"1846":1,"1855":1,"1861":3,"1873":1,"1880":1,"1882":1,"1884":1,"1887":1,"1893":1,"1895":2,"1898":4,"1904":2,"1905":1,"1920":2,"1921":1,"1922":1,"1974":1,"2078":1,"2079":1,"2083":1,"2087":1,"2120":1,"2146":1,"2147":2,"2156":1,"2157":1,"2173":1,"2184":1,"2185":1,"2200":1,"2222":2,"2262":1,"2308":2}}],["img",{"2":{"119":2,"825":1,"1837":2,"1844":1,"1845":1,"2268":1}}],["imageurl을",{"2":{"2268":1}}],["imageurl",{"2":{"2268":1}}],["images",{"2":{"92":1,"97":1,"109":1,"189":1,"1161":2,"1162":1,"1829":2,"1926":1}}],["image",{"2":{"92":2,"97":2,"108":3,"119":2,"188":2,"643":2,"1836":1}}],["i",{"2":{"92":2,"97":6,"108":1,"109":1,"188":1,"189":1,"715":2,"1304":4,"1534":4}}],["ip",{"2":{"46":1,"56":1,"59":1,"67":1,"76":1,"248":2,"636":2,"2267":1}}],["ipaddress",{"2":{"46":3,"56":3,"59":2,"65":1,"67":2,"76":2,"299":1,"308":1,"594":1,"664":1,"742":1,"818":1,"1957":1,"2267":2}}],["idbutil",{"2":{"2287":2,"2288":1,"2292":1}}],["id를",{"2":{"2005":1}}],["idxdbkey",{"0":{"1476":1},"2":{"1476":1,"1480":2}}],["ide에서",{"0":{"499":1},"1":{"500":1,"501":1}}],["idea로",{"2":{"500":1}}],["idea",{"0":{"500":1},"2":{"466":1}}],["ide",{"0":{"466":1},"2":{"466":1}}],["ids",{"2":{"326":1}}],["id=",{"2":{"320":1,"322":2,"323":1,"325":1,"326":1,"333":1,"335":1,"336":1,"337":1,"413":1,"546":1,"753":1,"1973":1,"1974":1,"1990":1}}],["id>prod",{"2":{"272":1}}],["id>dev",{"2":{"272":1}}],["id>",{"2":{"272":3}}],["id>local",{"2":{"272":1}}],["id로",{"2":{"77":1}}],["id",{"0":{"2259":1},"2":{"30":1,"31":2,"44":4,"45":2,"46":2,"56":1,"57":1,"59":1,"67":2,"76":6,"77":3,"82":1,"98":1,"120":8,"121":5,"326":3,"633":1,"651":2,"663":1,"721":1,"1063":2,"1348":1,"1424":1,"1426":1,"1606":2,"1621":2,"1723":4,"1915":2,"1946":1,"1957":1,"1969":1,"1981":1,"2005":1,"2120":3,"2193":2,"2194":5,"2259":2,"2267":2}}],["id가",{"2":{"23":1}}],["if>",{"2":{"325":2}}],["if",{"0":{"325":1},"2":{"9":1,"17":1,"30":1,"56":1,"57":1,"67":1,"76":1,"78":1,"98":1,"120":1,"121":1,"154":1,"325":2,"636":1,"672":1,"891":1,"1029":1,"1036":1,"1059":1,"1211":1,"1229":1,"1230":1,"1248":1,"1263":1,"1273":2,"1276":3,"1279":1,"1299":1,"1300":2,"1304":1,"1305":1,"1312":1,"1315":1,"1316":1,"1326":2,"1330":1,"1337":1,"1341":1,"1358":1,"1360":1,"1385":1,"1387":1,"1389":1,"1468":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1532":1,"1534":1,"1536":1,"1538":2,"1609":1,"1720":1,"1725":1,"1787":1,"1788":1,"1789":1,"2156":1,"2226":2,"2333":3}}],["inactive",{"2":{"2194":2}}],["increment",{"2":{"2078":2}}],["include",{"2":{"1640":1}}],["include>",{"2":{"280":2}}],["includes",{"2":{"1258":1,"1276":2,"1286":1,"1294":1,"1296":1,"1332":1,"1333":1,"1529":1}}],["includes>",{"2":{"280":2}}],["includesystemscope>",{"2":{"279":1}}],["includesystemscope>true",{"2":{"279":1}}],["initial",{"2":{"1922":1}}],["init",{"2":{"1435":1}}],["indexeddb는",{"2":{"2295":1}}],["indexeddb를",{"2":{"2284":1}}],["indexeddbutil",{"2":{"1817":1,"2285":1,"2287":1}}],["indexeddb",{"0":{"1479":1,"2283":1},"1":{"2284":1,"2285":1,"2286":1,"2287":1,"2288":1,"2289":1,"2290":1,"2291":1,"2292":1,"2293":1,"2294":1,"2295":1,"2296":1},"2":{"1770":2,"1817":1}}],["indexeddb에서",{"2":{"2288":1}}],["indexeddb에",{"2":{"1471":1,"1479":1,"2287":1,"2294":1}}],["index",{"0":{"1896":1,"1898":1,"2045":1},"2":{"857":1,"1836":1,"1891":3,"1904":2}}],["inputphone",{"0":{"1013":1,"1999":1},"1":{"1014":1,"1015":1},"2":{"1014":1,"1015":1,"1766":1,"1994":1,"1999":1}}],["input",{"2":{"792":1,"793":1,"980":1,"981":1,"1014":1,"1752":1,"1753":1,"1994":1,"2233":1}}],["inputstreamreader",{"2":{"732":1}}],["inputstream",{"2":{"180":1,"199":1,"709":1}}],["inventory",{"2":{"367":1}}],["invalid",{"2":{"17":1}}],["info",{"2":{"1753":4}}],["inf",{"2":{"280":1}}],["int",{"2":{"317":3,"804":1,"975":1}}],["intdb",{"2":{"255":1,"482":1,"834":1}}],["intelligence",{"2":{"1664":1,"1681":1,"1814":1}}],["intellij",{"0":{"500":1},"2":{"466":1,"500":1}}],["intellicins",{"2":{"239":1}}],["interceptors",{"2":{"1273":1,"1320":1}}],["interface",{"2":{"317":1,"332":1,"412":1,"545":1,"1817":1,"1926":1}}],["internal",{"2":{"138":1}}],["insecure",{"2":{"825":1}}],["insert",{"2":{"31":1,"317":1}}],["insomnia",{"2":{"469":1}}],["install",{"2":{"273":3,"282":1,"284":1,"340":1,"489":1,"496":2,"1708":1,"1712":1,"1733":1,"1748":1,"2172":1,"2178":2}}],["instanceof",{"2":{"1212":1,"1315":1,"1316":3}}],["instance",{"2":{"197":1}}],["inline",{"2":{"99":1,"103":1,"825":1}}],["in",{"2":{"0":1,"326":1,"1751":1}}],["itemlist",{"2":{"883":1}}],["items",{"2":{"883":1,"1989":1}}],["item=",{"2":{"326":1}}],["itl",{"2":{"268":1}}],["it",{"2":{"0":1,"872":1,"2146":2,"2147":1,"2156":3,"2157":1}}],["c는",{"2":{"2196":1}}],["c",{"2":{"2195":1,"2196":2}}],["cypress",{"2":{"2150":1}}],["ctrl+f",{"2":{"1790":1}}],["cwd",{"2":{"1176":1}}],["c002",{"2":{"1035":1}}],["c001",{"2":{"1035":1}}],["cu",{"2":{"1989":1}}],["cust",{"2":{"1981":6,"1989":1}}],["customerlistpop",{"0":{"1983":1},"2":{"1978":1,"1983":1}}],["customerlistdata",{"0":{"1986":1},"2":{"1978":1,"1986":3}}],["customerlist",{"0":{"1981":1},"2":{"1978":1,"1981":1}}],["customergrppop",{"0":{"1984":1},"2":{"1978":1}}],["customergrplistdata",{"0":{"1987":1},"2":{"1978":1}}],["customergrplist",{"0":{"1982":1},"2":{"1978":1}}],["customer",{"0":{"1980":1},"1":{"1981":1,"1982":1,"1983":1,"1984":1},"2":{"1978":1,"1981":1,"1986":1}}],["customplugin",{"2":{"1905":1}}],["custommessage",{"2":{"1538":2}}],["custom",{"0":{"1753":1,"1839":1,"1840":1,"1841":1,"1842":1},"1":{"1840":1,"1841":1,"1842":1},"2":{"1044":1,"1320":1,"1642":4,"1667":1,"1834":4,"1840":2,"1841":2,"1842":2,"1846":4,"1885":5,"1905":4,"1922":1,"1973":1}}],["customaxios를",{"2":{"1763":1}}],["customaxios",{"0":{"1672":1,"1862":1},"2":{"1029":1,"1162":1,"1211":1,"1230":1,"1256":1,"1267":1,"1268":1,"1278":1,"1292":1,"1309":1,"1323":1,"1387":1,"1390":2,"1400":1,"1416":1,"1514":1,"1515":1,"1522":1,"1609":1,"1613":1,"1667":1,"1720":1,"1756":1,"1760":1,"1763":1,"1817":1,"1830":1,"1858":1,"1861":1,"2067":1,"2069":1,"2094":1,"2234":1}}],["currency",{"2":{"1879":6,"1884":1}}],["currenttab",{"2":{"1480":1}}],["currentmenu",{"2":{"1409":1,"1468":1,"1913":1}}],["currentpage",{"2":{"250":1}}],["current",{"2":{"0":1}}],["curser",{"2":{"643":1}}],["center",{"2":{"1033":1,"1640":1,"1989":1}}],["centos",{"2":{"471":1}}],["cellcontextmenu",{"2":{"1072":1,"1440":1}}],["cellcontextmenu=",{"2":{"1072":1}}],["cellrendererparams",{"2":{"1059":1}}],["cellrenderer",{"2":{"1059":1}}],["celleditorparams",{"2":{"1043":1,"1064":1,"1077":1}}],["celleditor",{"2":{"1043":1,"1064":1,"1077":1}}],["cell",{"2":{"879":3}}],["csv",{"2":{"1071":1}}],["css",{"0":{"1580":1,"1641":1,"1642":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1846":1},"1":{"1642":1,"1643":1,"1644":1,"1840":1,"1841":1,"1842":1},"2":{"1044":1,"1498":1,"1499":1,"1642":5,"1644":2,"1667":3,"1684":1,"1776":1,"1834":7,"1838":1,"1839":1,"1840":2,"1841":2,"1842":2,"1846":5,"1861":1,"1891":1,"1902":1,"1926":2,"1931":1}}],["csp",{"2":{"825":2}}],["csrf",{"2":{"222":1,"581":1,"620":4,"822":3,"970":3}}],["cbc로",{"2":{"801":1}}],["cryptojs",{"0":{"2108":1},"2":{"1658":1,"2128":1}}],["cryptojs를",{"2":{"1208":1,"2229":1}}],["crypto",{"2":{"630":1}}],["creditcard",{"0":{"1950":1},"1":{"1951":1},"2":{"1679":1,"1817":1,"1942":1}}],["credentials",{"2":{"621":1}}],["createvuetify",{"2":{"1898":2}}],["createpinia",{"2":{"1893":2,"2147":2,"2157":2}}],["createi18n",{"2":{"1879":2}}],["createapp",{"2":{"1861":2,"1904":1}}],["createaccesstoken",{"2":{"219":2,"635":1,"812":1,"966":1}}],["createcell",{"2":{"879":1}}],["createrow",{"2":{"879":1}}],["createrefreshtoken",{"2":{"219":2,"635":1,"812":1,"966":1}}],["createsheet",{"2":{"879":1}}],["createmimemessage",{"2":{"693":1,"694":1}}],["create",{"2":{"618":1,"1269":1}}],["createtemplate",{"2":{"293":1,"294":1}}],["createdirectory",{"2":{"158":1,"896":1}}],["createdat",{"2":{"56":3,"59":2}}],["createelement",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["createobjecturl",{"2":{"46":1,"99":1,"119":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["cross",{"2":{"620":1,"670":1,"827":1}}],["cd",{"2":{"477":1,"1712":1,"1731":1,"1981":9,"1989":1}}],["cdata",{"2":{"195":1,"197":3}}],["cpu",{"2":{"471":1,"1221":1,"1703":1,"1704":1}}],["cpaas",{"0":{"732":1},"2":{"69":3,"204":3,"729":1,"731":1,"740":4,"744":1}}],["cmd+f",{"2":{"1790":1}}],["cmd",{"2":{"437":1,"549":1}}],["cxjwgftifciauw3cen+a1z1wvn2krwey4wy9zgm6fml7d42jbp9zuguaphifxzxod2tm",{"2":{"211":1,"238":1,"790":1,"978":1}}],["clean",{"2":{"273":3,"282":1,"283":1,"284":1,"340":1,"341":1,"496":2,"503":1,"1748":1,"2178":1}}],["clearlogs",{"2":{"1419":1}}],["clearlogdata",{"0":{"1417":1},"2":{"1419":1,"1918":1}}],["clearsessiondata",{"0":{"1247":1},"2":{"1247":1,"1249":1}}],["clearaccesstoken",{"0":{"1383":1},"2":{"1234":1,"1249":1,"1262":1,"1276":1,"1337":1,"1383":1,"1388":1,"1634":1,"1911":1}}],["clear",{"2":{"78":1,"79":1,"241":1,"1434":1}}],["claims",{"2":{"219":3,"813":3,"967":3}}],["classes",{"2":{"557":2}}],["class",{"2":{"199":1,"228":1,"255":1,"257":1,"258":1,"260":1,"370":1,"400":2,"417":2,"421":1,"451":1,"482":1,"483":1,"484":1,"540":2,"543":2,"600":1,"601":1,"609":1,"610":1,"618":3,"619":1,"620":2,"621":1,"622":1,"632":1,"648":1,"649":1,"670":1,"671":1,"672":1,"675":1,"692":1,"693":1,"696":1,"704":1,"728":1,"729":1,"822":1,"834":1,"835":1,"836":1,"838":1,"859":1,"914":1,"970":1,"989":1,"992":1}}],["class=",{"2":{"197":4,"1063":1,"1583":1,"1600":1,"1609":2,"1723":1,"1973":1,"1974":1,"1989":2,"1990":1,"2120":1}}],["classpath",{"2":{"93":1,"264":1,"331":1,"757":1,"844":1}}],["clientcode",{"2":{"1240":1}}],["clientip",{"2":{"636":1}}],["client001",{"2":{"120":2,"121":2}}],["client",{"2":{"120":3,"121":3,"601":4}}],["clicked=",{"2":{"1990":1}}],["click=",{"2":{"1006":1,"1007":1,"1463":2,"1609":1,"1717":1,"1997":1,"2078":1}}],["click",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2146":3,"2151":1,"2269":1}}],["closealltab",{"0":{"1478":1}}],["closetab",{"0":{"1477":1}}],["closemodal",{"0":{"1427":1},"2":{"1427":1,"1915":1}}],["close",{"2":{"879":1,"1435":1}}],["close=",{"2":{"326":1}}],["cloned",{"2":{"2196":2}}],["clone",{"2":{"477":1,"1712":1,"1731":1}}],["clob을",{"2":{"38":1}}],["clob1",{"2":{"32":2}}],["clob",{"2":{"32":2,"38":1,"636":1,"2319":1}}],["cloud",{"2":{"12":1,"1674":1,"1872":1}}],["chunksizewarninglimit로",{"2":{"1500":1}}],["chunksizewarninglimit",{"0":{"1169":1},"2":{"1168":1,"1203":1}}],["children",{"2":{"1083":1,"1366":2,"1895":1}}],["change",{"2":{"1573":1}}],["changeorigin",{"2":{"1189":3,"1200":3}}],["chain",{"2":{"670":2,"671":2,"676":1}}],["charset",{"2":{"236":1}}],["charset=utf",{"2":{"101":1,"102":1}}],["chg",{"2":{"45":10,"49":3,"651":2,"655":3,"663":1}}],["chrome",{"2":{"34":1,"1700":1}}],["check",{"2":{"5":1,"506":1,"1754":1,"2156":1}}],["cv1",{"2":{"178":1,"179":1,"199":2,"708":2}}],["cv",{"2":{"30":4,"32":2,"33":2,"36":4,"38":1,"67":2,"92":7,"95":1,"97":2,"98":7,"105":5,"108":3,"110":7,"111":3,"114":2,"178":1,"179":1,"185":5,"188":2,"190":6,"191":1,"197":1,"199":2,"200":1,"229":1,"418":1,"708":2,"713":4,"716":2,"723":1,"742":1}}],["calculatedays",{"2":{"2224":1}}],["callback=",{"2":{"1036":1}}],["callback",{"0":{"2292":1},"2":{"1033":1,"2292":1}}],["callable",{"2":{"322":1,"323":1,"335":1,"336":1,"337":1}}],["calloracletestmapper",{"2":{"313":1}}],["callprocedure",{"2":{"322":1,"323":1,"335":1,"336":1,"337":1}}],["callprocpostgresql",{"2":{"306":1,"633":1,"847":1}}],["callprocoracle",{"2":{"306":1,"633":1,"847":1}}],["callproctibero",{"2":{"306":1,"633":1,"847":1}}],["callgeminiai",{"2":{"149":1,"570":1,"600":1,"601":2,"609":1,"610":1,"950":1}}],["call",{"2":{"30":2,"31":2,"32":1,"34":1,"56":2,"57":2,"322":1,"323":1,"335":1,"336":1,"337":1,"1957":1,"1969":1,"1981":1,"2003":1}}],["card",{"2":{"1428":4,"1600":4,"1609":4,"1646":4,"1727":4,"2141":1}}],["card>",{"2":{"1428":2,"1600":2,"1609":2,"1646":2,"1727":2}}],["caption",{"2":{"1034":2,"1035":3,"1043":2,"1077":2}}],["case",{"2":{"449":1,"1536":5,"1571":1,"1577":1,"1580":1,"1612":1,"1691":1,"1828":1}}],["camelcase",{"2":{"449":1,"1571":1,"1576":2,"1577":1,"1578":1,"1579":1,"1612":1,"1691":2,"1827":1}}],["catch로",{"2":{"2295":1}}],["catch를",{"2":{"1539":1,"1568":1,"1614":1}}],["catch",{"0":{"1523":1},"2":{"400":1,"540":1,"610":1,"632":1,"1029":1,"1276":1,"1279":1,"1289":1,"1300":1,"1303":1,"1304":1,"1337":1,"1341":1,"1387":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1556":1,"1567":1,"1568":1,"1609":1,"1614":1,"1720":1,"1789":1}}],["cachedatabase",{"2":{"619":1}}],["cachepassword",{"2":{"619":1}}],["cacheport",{"2":{"619":1}}],["cachehost",{"2":{"619":1}}],["cacheredistemplate",{"2":{"293":2,"580":1,"619":2,"851":1}}],["cacheredisconnectionfactory",{"2":{"290":2,"293":1,"580":1,"619":3}}],["cache",{"2":{"56":1,"288":1,"290":3,"293":1,"311":1,"490":1,"619":1,"620":1,"827":2,"850":1,"986":1,"1748":1,"2178":1}}],["cannot",{"2":{"2185":1}}],["can",{"2":{"0":1}}],["cookie",{"2":{"1227":2,"1236":1}}],["copyproperties",{"2":{"954":1}}],["correctly",{"2":{"2146":1}}],["core",{"0":{"1928":1},"2":{"471":1,"906":1,"1161":2,"1201":2,"1205":1,"1206":1,"1587":1,"1684":1,"1817":1,"1829":2,"1858":1,"1926":1}}],["corsregistry",{"2":{"621":1}}],["cors",{"0":{"239":1,"493":1,"805":1,"2160":1},"1":{"806":1},"2":{"25":2,"493":1,"554":1,"582":1,"583":1,"586":1,"616":1,"621":4,"668":1,"673":2,"806":1,"917":1,"2160":2,"2187":1}}],["count",{"2":{"449":1,"1571":1,"1572":1,"1574":3,"1577":1,"2078":3,"2205":2}}],["count는",{"2":{"105":1,"185":1}}],["colgroup>",{"2":{"1973":2}}],["color",{"2":{"1303":1,"1537":3,"1639":2}}],["color=",{"2":{"1007":1,"1537":1,"1609":1,"1997":1}}],["col>",{"2":{"1027":1,"1648":2,"1989":1}}],["cols=",{"2":{"1027":1,"1648":2,"1989":1}}],["col",{"2":{"1027":1,"1648":2,"1973":2,"1989":1}}],["collection",{"2":{"958":1}}],["collectionutils",{"2":{"958":3}}],["collections4",{"2":{"956":1,"958":1}}],["collections",{"0":{"955":1},"1":{"956":1,"957":1,"958":1}}],["collection=",{"2":{"326":1}}],["columndef",{"2":{"1440":1}}],["columndefs=",{"2":{"1063":1,"1609":1,"1723":1,"1887":1,"1974":1,"1990":1,"2120":1}}],["columndefs",{"2":{"1043":1,"1059":1,"1063":2,"1077":1,"1609":2,"1723":2,"1887":2,"2120":2,"2261":1}}],["columnheadercontextmenu=",{"2":{"1072":1}}],["columnid",{"2":{"1059":1}}],["columns=",{"2":{"1035":1,"1036":1}}],["columns",{"0":{"1034":1,"2261":1},"2":{"1033":1,"1034":1,"1035":2,"1036":1,"1043":1,"1077":1,"1974":2,"1986":2,"1990":1,"2261":1}}],["column=",{"2":{"322":2}}],["columnwidth=",{"2":{"197":1}}],["column에",{"2":{"114":1,"200":1,"723":1}}],["column",{"2":{"92":1,"95":1,"98":1,"111":1,"191":1,"229":1,"1072":2,"1440":1,"2258":2}}],["column3",{"2":{"36":1}}],["column2",{"2":{"30":1,"36":2,"197":2,"320":1,"322":2,"325":1}}],["column1",{"2":{"30":1,"33":1,"36":2,"197":2,"320":1,"322":2,"325":1}}],["comfcm",{"0":{"1872":1},"2":{"1674":1,"1817":1,"1820":1,"2298":1,"2299":1,"2300":1,"2308":2,"2310":1}}],["comfiles",{"2":{"243":1,"494":1}}],["combobox",{"2":{"1044":1}}],["combobox를",{"2":{"1024":1}}],["community",{"2":{"2097":1}}],["commjxlsview",{"2":{"630":1,"883":1}}],["commfiledownview",{"2":{"630":1}}],["commons",{"0":{"925":1,"927":1,"928":1,"929":1,"951":1,"955":1},"1":{"926":1,"927":1,"928":1,"929":1,"952":1,"953":1,"954":1,"956":1,"957":1,"958":1},"2":{"929":1,"952":1,"954":1,"956":1,"958":1}}],["common",{"0":{"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"1674":1,"1820":1,"1871":1,"1995":1,"2199":1},"1":{"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2214":1,"2215":1,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2222":1,"2223":1,"2224":1,"2225":1,"2226":1,"2227":1},"2":{"164":1,"244":1,"329":1,"371":1,"408":1,"439":1,"451":1,"554":1,"565":1,"568":1,"630":1,"632":1,"633":1,"634":1,"635":1,"636":1,"643":1,"688":1,"910":1,"1005":1,"1010":1,"1014":1,"1019":1,"1025":1,"1032":1,"1039":1,"1049":1,"1051":1,"1053":1,"1220":2,"1561":1,"1576":1,"1582":1,"1674":1,"1682":1,"1691":1,"1725":1,"1770":1,"1817":3,"1820":1,"1827":1,"1858":1,"1865":1,"1869":1,"1994":1,"2156":3,"2190":1,"2200":1,"2201":2,"2237":1,"2265":1,"2272":1,"2298":1,"2299":1,"2308":3,"2309":3,"2313":1,"2327":1}}],["compresstoutf16",{"2":{"2293":1}}],["compressvalue",{"2":{"2293":1}}],["composition",{"0":{"1463":1,"1882":1,"1920":1},"2":{"1653":2,"1656":1,"1879":1,"2076":1,"2077":1,"2086":1}}],["componentmodule",{"2":{"1104":2,"1349":2}}],["componentpath",{"2":{"1104":2,"1349":2}}],["component",{"2":{"1083":2,"1091":1,"1105":1,"1348":1,"1350":2,"1362":1,"1366":4,"1368":1,"1580":1,"1583":2,"1603":1,"1625":1,"1637":1,"1639":1,"1640":1,"1718":1,"1728":1,"1895":2,"2113":1,"2131":1,"2184":1}}],["components를",{"2":{"1584":1,"1586":1,"1653":1}}],["components",{"0":{"1206":1,"1995":1,"2012":1,"2016":1,"2020":1},"1":{"1996":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2013":1,"2014":1,"2015":1,"2017":1,"2018":1,"2019":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1},"2":{"1005":1,"1010":1,"1014":1,"1019":1,"1025":1,"1032":1,"1039":1,"1042":1,"1049":1,"1051":1,"1053":1,"1057":1,"1068":1,"1076":1,"1095":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1199":1,"1206":3,"1561":1,"1582":1,"1587":3,"1588":1,"1589":1,"1682":1,"1817":2,"1994":2,"2056":2,"2083":1}}],["componentscan",{"0":{"370":1,"407":1},"2":{"370":1,"396":1,"407":1,"451":1}}],["computed나",{"2":{"1635":1}}],["computedvalue",{"2":{"1613":1}}],["computed로",{"2":{"1385":1}}],["computed",{"2":{"1235":1,"1250":4,"1385":1,"1409":1,"1419":1,"1428":2,"1454":1,"1463":3,"1480":1,"1574":2,"1613":2,"1633":1,"1635":2,"1724":1,"1911":1,"1918":1,"1920":1,"1921":1,"1922":2,"2079":1,"2225":1}}],["compileroptions",{"2":{"1163":1}}],["compilereport",{"2":{"180":1,"199":1,"709":1}}],["compact",{"2":{"933":1}}],["comp",{"2":{"120":3,"121":3,"1946":1,"1957":1,"1969":1,"1981":1}}],["compcode",{"0":{"2268":1},"2":{"65":1,"67":2,"76":2,"742":1,"1240":1,"1914":3,"1946":1,"1957":1,"1958":2,"1969":1,"1981":1,"2005":1,"2268":1}}],["comp001",{"2":{"32":1,"65":1,"67":1,"76":1,"120":2,"121":2,"742":1}}],["comy",{"2":{"65":1,"66":1}}],["com5100",{"2":{"46":1,"649":1,"651":1,"652":1}}],["com",{"0":{"530":1,"536":1},"2":{"45":1,"65":1,"69":1,"171":2,"172":1,"204":1,"239":1,"255":1,"317":1,"319":1,"320":1,"329":1,"333":1,"371":1,"388":1,"408":1,"440":1,"441":1,"444":1,"449":1,"451":1,"482":1,"488":1,"527":1,"534":1,"555":1,"556":1,"690":2,"698":1,"740":1,"752":1,"753":1,"834":1,"910":1,"1184":2,"1278":1,"2050":1,"2052":1,"2053":1}}],["codes",{"2":{"1029":1}}],["codec",{"0":{"928":1},"2":{"928":2}}],["code",{"0":{"2195":1},"2":{"30":3,"32":1,"33":1,"44":1,"45":1,"67":3,"119":5,"120":6,"121":6,"122":1,"466":1,"649":2,"651":2,"663":1,"1027":4,"1034":1,"1035":4,"1036":1,"1043":2,"1077":2,"1175":1,"1286":1,"1296":1,"1333":1,"1529":1,"1699":2,"1946":2,"1957":2,"1969":7,"1973":1,"1981":1,"2025":1,"2192":3,"2216":3,"2251":1,"2252":1,"2253":1}}],["conn",{"2":{"732":6}}],["connectiontimeout",{"2":{"618":1}}],["connectionfactory",{"2":{"293":2,"294":2}}],["condition",{"2":{"320":1,"333":1,"753":1}}],["conditionalonproperty를",{"2":{"618":1}}],["conditionalonproperty",{"2":{"260":1,"618":1,"838":1}}],["convert",{"0":{"98":1},"2":{"92":1,"98":2,"110":1,"190":1,"716":2}}],["containers",{"0":{"1753":1}}],["control",{"2":{"620":1,"827":1,"986":1}}],["controllertest",{"2":{"989":1}}],["controller",{"0":{"379":1,"572":2},"2":{"368":3,"377":1,"388":4,"396":1,"400":3,"406":1,"439":3,"440":4,"448":1,"455":1,"518":1,"525":1,"527":4,"534":3,"540":3,"554":6,"555":4,"556":3,"565":1,"598":1,"600":1,"630":3,"632":1,"646":1,"648":1,"676":1,"684":1,"686":1,"702":1,"704":1,"726":1,"728":1}}],["contextmenustore를",{"2":{"1073":1}}],["contextmenustore",{"0":{"1436":1},"1":{"1437":1,"1438":1,"1439":1,"1440":1},"2":{"1072":3,"1438":1,"1440":4,"1762":1}}],["context",{"2":{"236":1,"696":5,"1059":1,"2014":1}}],["contenttype",{"2":{"989":1}}],["contentsecuritypolicy",{"2":{"620":1,"825":1}}],["contentdisposition",{"2":{"156":1,"894":1}}],["content",{"0":{"825":1},"2":{"45":1,"46":2,"99":2,"101":1,"102":2,"103":2,"119":1,"222":1,"620":1,"652":2,"664":1,"732":1,"986":2,"989":1,"1089":1,"1269":1,"1275":1,"1280":1,"1326":1}}],["cont",{"2":{"65":1,"66":1,"67":1,"731":1,"742":1,"1949":1}}],["config=",{"2":{"1020":1}}],["configuration>",{"2":{"279":2,"280":2}}],["configuration",{"2":{"260":1,"618":2,"619":1,"620":1,"621":1,"622":1,"675":1,"838":1}}],["config",{"0":{"148":1,"443":1,"445":1,"578":1,"750":1,"754":1,"1416":1,"1426":1,"1688":1,"2039":1},"1":{"579":1,"580":1,"581":1,"582":1,"583":1},"2":{"11":2,"233":2,"234":2,"263":6,"290":5,"291":5,"330":6,"434":1,"437":2,"439":1,"443":2,"445":4,"453":2,"473":1,"481":1,"490":1,"492":1,"551":6,"554":1,"568":1,"604":2,"605":1,"616":1,"618":1,"619":7,"620":1,"621":1,"622":1,"623":1,"626":1,"675":1,"747":2,"749":2,"750":2,"754":4,"773":3,"774":6,"843":6,"918":1,"1160":1,"1167":1,"1188":1,"1197":1,"1211":2,"1212":1,"1230":1,"1273":3,"1312":1,"1313":1,"1314":1,"1315":3,"1316":2,"1317":2,"1318":3,"1320":3,"1416":1,"1426":1,"1667":1,"1816":1,"1861":1,"1918":1}}],["consumes",{"2":{"869":1}}],["console에서",{"2":{"12":1}}],["console",{"2":{"9":1,"30":1,"56":1,"57":1,"67":2,"120":1,"121":1,"1029":1,"1035":1,"1036":1,"1059":1,"1279":3,"1297":1,"1300":3,"1305":4,"1338":1,"1341":3,"1361":1,"1385":1,"1387":1,"1434":1,"1516":2,"1523":3,"1527":1,"1528":1,"1532":4,"1533":1,"1535":1,"1538":1,"1554":2,"1556":1,"1566":2,"1567":1,"1568":1,"1574":1,"1593":1,"1609":1,"1614":1,"1635":1,"1720":1,"1725":1,"2220":1,"2224":1}}],["constants",{"2":{"1828":1}}],["const",{"2":{"0":1,"9":1,"17":2,"30":2,"45":3,"46":3,"56":1,"67":1,"76":1,"98":1,"99":1,"119":2,"120":1,"1011":1,"1020":1,"1027":2,"1029":4,"1035":4,"1036":1,"1040":1,"1043":1,"1059":1,"1063":2,"1072":2,"1097":1,"1104":5,"1112":1,"1119":1,"1126":3,"1140":2,"1151":2,"1157":2,"1176":1,"1194":1,"1209":1,"1212":4,"1219":1,"1220":2,"1230":1,"1233":1,"1242":1,"1244":1,"1248":1,"1250":4,"1259":1,"1273":4,"1276":2,"1278":2,"1279":1,"1280":1,"1281":2,"1300":1,"1303":2,"1304":1,"1312":1,"1314":1,"1316":7,"1326":1,"1337":2,"1341":1,"1342":2,"1349":2,"1350":1,"1352":2,"1358":1,"1360":1,"1366":1,"1382":1,"1385":2,"1387":3,"1388":3,"1389":2,"1399":2,"1409":3,"1419":4,"1426":1,"1428":2,"1434":1,"1440":1,"1445":2,"1454":2,"1458":1,"1460":1,"1463":5,"1464":1,"1468":2,"1475":1,"1480":3,"1515":2,"1516":1,"1517":1,"1518":1,"1519":2,"1523":1,"1525":1,"1526":2,"1527":1,"1528":1,"1529":1,"1530":1,"1533":1,"1534":1,"1535":2,"1536":4,"1537":3,"1538":4,"1543":1,"1546":2,"1547":2,"1548":4,"1552":1,"1556":1,"1566":1,"1567":2,"1572":1,"1573":1,"1574":2,"1583":2,"1593":1,"1609":5,"1613":6,"1614":1,"1615":1,"1629":1,"1630":1,"1632":1,"1633":2,"1635":2,"1717":1,"1720":3,"1722":2,"1723":3,"1724":4,"1725":2,"1787":3,"1788":4,"1789":1,"1837":1,"1845":1,"1861":1,"1879":1,"1880":1,"1882":2,"1884":2,"1886":1,"1887":1,"1893":1,"1895":1,"1898":1,"1904":1,"1911":2,"1912":1,"1914":2,"1915":1,"1917":1,"1918":2,"1920":4,"1921":1,"1922":4,"1949":2,"1957":3,"1958":4,"1969":3,"1974":2,"1981":3,"1986":1,"2001":1,"2005":1,"2069":1,"2078":3,"2087":1,"2120":2,"2124":1,"2146":2,"2147":1,"2157":1,"2196":1,"2205":1,"2208":1,"2209":2,"2216":1,"2222":2,"2224":5,"2225":2,"2226":1,"2233":3,"2262":4,"2269":2,"2287":1,"2288":1,"2294":2,"2302":1,"2308":1,"2309":2,"2333":2}}],["d6121607",{"2":{"1715":1}}],["dynamicstore",{"0":{"1441":1},"1":{"1442":1,"1443":1,"1444":1,"1445":1},"2":{"1443":1,"1445":5}}],["days",{"2":{"2224":2,"2253":1}}],["dangerous",{"2":{"1753":2}}],["danger",{"2":{"1753":2}}],["dark",{"2":{"1647":1,"2142":1}}],["dashforge",{"2":{"1644":1}}],["dashboard",{"0":{"1930":1,"1939":1},"2":{"1161":2,"1684":1,"1817":1,"1829":2,"1879":3,"1882":1,"1883":1,"1926":1,"1934":2}}],["datestr",{"0":{"2207":1,"2239":1},"2":{"2207":1}}],["datetime",{"2":{"1949":2,"2025":2}}],["datepicker",{"0":{"1841":1},"2":{"1642":1,"1834":1,"1841":1}}],["date",{"0":{"2208":1,"2209":1,"2240":1,"2242":1,"2244":1,"2245":1,"2246":1,"2303":1},"2":{"96":1,"98":3,"106":2,"179":1,"186":2,"708":1,"714":1,"1317":1,"2208":4,"2209":3,"2240":1,"2241":1,"2242":1,"2244":3,"2303":1,"2309":1}}],["datastartcolumn",{"2":{"2258":2}}],["datasourcebuilder",{"2":{"618":1}}],["datasource를",{"2":{"259":1,"838":1}}],["datasource",{"2":{"179":2,"199":2,"253":1,"255":1,"256":4,"257":1,"258":1,"260":1,"261":2,"288":1,"482":2,"483":2,"484":2,"490":1,"579":2,"618":7,"708":2,"834":4,"835":2,"836":2,"838":4,"840":3,"841":2,"850":1}}],["data=",{"2":{"1027":1,"1035":1,"1036":1,"1126":1,"1591":1,"1722":1}}],["dataend",{"2":{"946":1}}],["datalist",{"2":{"888":1}}],["datagrip",{"2":{"469":1}}],["database",{"0":{"573":2},"2":{"164":1,"244":1,"258":1,"288":2,"329":1,"371":1,"408":1,"439":1,"451":1,"484":1,"490":2,"554":1,"630":1,"633":1,"634":1,"835":1,"836":1,"850":2,"910":1}}],["data",{"0":{"2":1,"3":1,"44":1,"1215":1,"1216":1,"1242":1,"1406":1,"1451":1,"2194":1,"2218":1,"2231":1,"2232":1},"2":{"0":3,"9":6,"17":1,"30":5,"31":2,"43":1,"45":3,"46":1,"56":4,"57":4,"67":5,"76":5,"78":1,"92":1,"98":4,"99":1,"102":2,"119":1,"120":5,"121":3,"136":1,"137":1,"178":3,"182":1,"183":2,"197":1,"199":3,"229":1,"275":1,"311":1,"351":1,"352":1,"393":1,"402":1,"403":1,"541":2,"607":1,"632":5,"651":2,"704":1,"707":2,"708":1,"721":2,"722":2,"742":1,"783":1,"825":1,"883":3,"888":1,"913":1,"914":1,"1026":1,"1029":1,"1033":1,"1045":2,"1059":2,"1072":2,"1126":1,"1127":1,"1211":2,"1212":1,"1213":2,"1215":1,"1216":1,"1229":1,"1248":2,"1259":1,"1263":2,"1276":1,"1279":1,"1280":1,"1281":3,"1295":1,"1298":2,"1300":2,"1303":1,"1305":1,"1315":3,"1316":2,"1318":1,"1326":1,"1327":1,"1331":1,"1334":2,"1337":1,"1339":1,"1341":1,"1342":3,"1387":1,"1426":1,"1440":1,"1516":1,"1519":2,"1523":1,"1526":1,"1528":1,"1532":1,"1533":2,"1536":2,"1546":3,"1547":2,"1548":1,"1554":1,"1555":1,"1567":1,"1609":1,"1613":1,"1629":4,"1720":3,"1752":2,"1915":2,"2087":4,"2141":1,"2193":2,"2194":3,"2195":3,"2205":1,"2218":2,"2231":1,"2232":1,"2258":2,"2262":1,"2269":2}}],["drawer>",{"2":{"1464":1}}],["drawer",{"2":{"1464":1}}],["droptype",{"2":{"1033":1}}],["driverclassname",{"2":{"618":2}}],["driver",{"2":{"255":1,"257":1,"258":2,"482":1,"483":1,"484":2,"834":1,"835":1,"836":2}}],["d003",{"2":{"1027":1}}],["d002",{"2":{"1027":1}}],["d001",{"2":{"1027":1}}],["dd",{"2":{"558":2,"2006":1,"2241":1,"2246":1,"2247":1}}],["dskiptests",{"2":{"284":1}}],["dual",{"2":{"256":1,"834":1}}],["dbeaver",{"2":{"469":1}}],["dbservice",{"2":{"305":2,"417":2,"418":1,"543":1,"593":2}}],["db별",{"0":{"263":1,"330":1,"843":1,"847":1}}],["db에서",{"2":{"114":1,"200":1,"723":1,"729":1}}],["db에",{"2":{"67":1,"649":1,"651":1}}],["db",{"0":{"303":1},"1":{"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1},"2":{"67":1,"228":2,"338":1,"439":1,"514":1,"516":2,"518":1,"520":1,"554":1,"573":1,"630":4,"658":1,"731":1}}],["dbname",{"2":{"56":1}}],["dts",{"2":{"1205":1,"1206":1}}],["dtd",{"2":{"320":3,"333":3,"413":3,"546":3,"753":3}}],["dtl",{"2":{"65":1,"66":1,"67":1}}],["dt",{"2":{"65":7,"66":7,"67":3,"731":1,"742":1}}],["doubled",{"2":{"1574":1}}],["do",{"2":{"1347":1,"1348":2,"1370":1,"1606":1,"1607":1,"1621":1,"1622":1,"2318":2}}],["dofilterinternal",{"2":{"672":1}}],["dofilter",{"2":{"670":2,"671":2,"672":1}}],["downloadfile",{"2":{"156":1,"894":1}}],["download",{"2":{"46":1,"156":1,"894":1,"1281":2,"1342":2,"1519":2,"1546":2,"1547":1,"2269":2}}],["docs",{"0":{"513":1,"1755":1},"1":{"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"1756":1,"1757":1,"1758":1,"1759":1,"1760":1,"1761":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1,"1778":1,"1779":1,"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1,"1788":1,"1789":1,"1790":1},"2":{"866":1,"867":1,"869":2}}],["doctype",{"2":{"320":1,"333":1,"413":1,"546":1,"753":1}}],["document",{"2":{"46":2,"119":1,"942":2,"1281":2,"1342":2,"1519":2,"1546":2,"2218":1,"2233":1,"2269":2}}],["documentation",{"2":{"5":1,"1754":1}}],["doc001",{"2":{"45":1,"663":1}}],["doc",{"2":{"45":1,"663":1,"942":3}}],["digits",{"0":{"2279":1}}],["diff",{"2":{"2210":1}}],["div",{"2":{"1583":1,"1600":1,"1609":1}}],["div>",{"2":{"1250":2,"1463":2,"1583":1,"1600":1,"1609":1,"1717":2,"1882":2,"1883":2,"1885":2,"2078":2,"2225":2}}],["dialog>",{"2":{"1428":1}}],["dialog",{"2":{"1428":1}}],["dist",{"2":{"1174":1,"1483":1,"1504":1,"1506":1,"1511":1,"1667":1,"1740":1,"1816":1,"1833":1,"1847":2,"2112":1,"2130":1}}],["dispatcherservlet",{"2":{"676":1}}],["disposition",{"2":{"46":1,"99":1,"102":1,"103":1,"652":1,"1275":1,"1326":4}}],["disabled",{"2":{"1033":1}}],["disable",{"2":{"620":1,"822":1,"970":1}}],["dirs",{"2":{"1205":1,"1206":1}}],["dirpath",{"2":{"158":1,"896":1}}],["directory>",{"2":{"280":1}}],["directory>$",{"2":{"280":1}}],["direct",{"2":{"28":1,"30":2,"31":2,"32":1,"33":1,"34":1,"54":1,"56":2,"57":2,"90":1,"92":1,"98":3,"99":2,"100":1,"101":1,"102":1,"103":2,"182":1,"183":1,"229":1,"704":7,"721":1,"722":1,"1957":1,"1969":1,"1981":1,"2003":1}}],["d",{"2":{"45":3,"49":1,"122":1,"243":3,"494":3,"651":1,"655":1,"658":2,"1205":1,"1206":1,"1589":1,"1715":1,"1817":2,"2055":1,"2056":1}}],["deal",{"2":{"1981":6}}],["deep",{"2":{"1643":1}}],["decpoint",{"0":{"2212":1,"2274":1},"2":{"2212":1}}],["decimals",{"0":{"2212":1,"2274":1},"2":{"2212":1}}],["decodeuricomponent",{"2":{"1326":1}}],["decryptobject",{"0":{"1216":1,"2232":1},"2":{"1213":1,"1220":2,"2232":1}}],["decryptfilter",{"2":{"675":1}}],["decrypted",{"2":{"210":1,"211":1,"228":2,"595":1,"641":1,"786":1,"789":1,"977":1,"978":1,"1220":1,"2232":1}}],["decrypt",{"2":{"76":2,"92":1,"95":1,"98":1,"111":1,"114":1,"191":1,"200":1,"210":1,"211":1,"224":1,"228":1,"229":1,"595":1,"641":1,"671":1,"723":1,"786":1,"789":1,"977":1,"978":1,"1209":1,"1213":1,"1219":1,"1240":1,"1283":1,"1313":2}}],["details",{"2":{"1753":4}}],["detail",{"2":{"1435":1}}],["detail>",{"2":{"197":2}}],["detector",{"2":{"946":4}}],["definestore",{"2":{"1629":2,"1922":2,"2087":2}}],["defineemits",{"2":{"1573":1,"1583":1,"1613":1}}],["defineprops",{"2":{"1572":1,"1583":1,"1613":1}}],["defineconfig",{"2":{"1176":1}}],["defaultval",{"0":{"2205":1},"2":{"2205":2}}],["defaultlayoutwithverticalnav",{"2":{"1994":1}}],["defaulttheme",{"2":{"1898":1}}],["defaultset",{"2":{"1898":1}}],["defaults",{"0":{"1899":1},"2":{"1891":1,"1898":3}}],["defaultcoldef",{"2":{"1723":2}}],["defaultcoldef=",{"2":{"1723":1}}],["default>",{"2":{"1594":1}}],["defaultoption",{"2":{"1026":1,"1033":1}}],["default",{"0":{"2029":1},"2":{"825":1,"869":2,"1027":1,"1035":1,"1104":1,"1176":1,"1349":1,"1366":1,"1536":1,"1572":1,"1722":1,"1752":2,"1879":1,"1883":1,"1893":1,"1895":1,"1898":1,"1905":1,"1921":1,"1994":1,"2156":4}}],["def456",{"2":{"50":1,"660":1}}],["debian",{"2":{"489":1}}],["debug",{"2":{"164":2,"244":2,"1001":2}}],["deny",{"2":{"222":1,"620":2,"826":1}}],["describe",{"2":{"2146":1,"2147":1,"2156":2,"2157":1}}],["description",{"2":{"421":5,"859":5,"861":1,"862":1,"863":1,"864":4,"1035":3}}],["designer",{"2":{"757":1}}],["design",{"2":{"180":2,"199":2,"709":2,"1653":1,"1657":1,"1777":1,"1900":1,"2064":1}}],["destphone",{"2":{"732":1}}],["dest",{"2":{"154":2,"891":2,"954":1}}],["dependency>",{"2":{"612":2,"759":2,"835":2,"836":2,"904":2,"905":2,"906":2,"927":2,"928":2,"929":2}}],["departmentoptions",{"2":{"1043":1,"1077":1}}],["department",{"2":{"1043":1,"1064":1,"1077":1}}],["departments",{"2":{"1029":1}}],["depart",{"2":{"65":1,"66":1}}],["deptname",{"2":{"1609":1}}],["dept01",{"2":{"30":1}}],["dept",{"2":{"30":1,"1949":1,"1969":2}}],["delimiter",{"0":{"2207":1,"2239":1},"2":{"2207":1}}],["delhashkeys",{"2":{"634":1}}],["delredistoken",{"2":{"301":1,"310":1,"634":1}}],["delredishashdata",{"2":{"57":2}}],["delete",{"2":{"317":1,"621":1,"1059":2,"1435":1}}],["deleteone",{"2":{"158":1,"896":1}}],["deletedcount",{"2":{"57":3}}],["devtools",{"2":{"1199":1}}],["development",{"0":{"1183":1},"2":{"1179":1,"1735":1}}],["dev",{"0":{"69":1,"288":1,"362":1,"513":1,"1755":1},"1":{"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"1756":1,"1757":1,"1758":1,"1759":1,"1760":1,"1761":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1,"1778":1,"1779":1,"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1,"1788":1,"1789":1,"1790":1},"2":{"51":1,"233":1,"253":1,"394":1,"443":1,"452":1,"462":1,"463":1,"464":1,"465":1,"473":1,"481":1,"490":1,"492":1,"509":1,"518":1,"551":1,"626":1,"627":1,"750":1,"773":1,"995":1,"1171":1,"1489":1,"1617":1,"1714":1,"1736":1,"1738":1,"2048":1}}],["demonstrates",{"2":{"0":1,"1751":1}}],["ss",{"2":{"2241":1,"2247":1}}],["ssd",{"2":{"1704":1}}],["syntax",{"0":{"1752":1},"2":{"1752":1}}],["sysnewesslog",{"2":{"2025":1}}],["sys5300",{"0":{"1967":1},"2":{"1962":1}}],["sys5400",{"2":{"76":1,"87":1}}],["sys1710",{"0":{"1966":1},"2":{"1962":1}}],["sys1200",{"0":{"1965":1},"2":{"1962":1}}],["sysmessagesend",{"2":{"731":1,"1949":2}}],["systempath>",{"2":{"759":1}}],["systempath>$",{"2":{"759":1}}],["system",{"2":{"276":1,"834":1}}],["sys",{"0":{"538":1,"1964":1},"1":{"1965":1,"1966":1,"1967":1},"2":{"127":1,"441":1,"534":1,"556":1,"1962":1}}],["switch",{"2":{"1536":1}}],["switchtotab",{"2":{"1480":1}}],["switchtab",{"0":{"1476":1},"2":{"1480":1}}],["swallow",{"2":{"236":1}}],["swagger에",{"2":{"395":1}}],["swagger",{"0":{"144":1,"395":1,"420":1,"872":1},"1":{"421":1,"422":1,"423":1},"2":{"144":2,"277":1,"353":1,"395":1,"396":1,"422":1,"506":2,"518":3,"519":1,"856":1,"857":2,"869":2,"872":1,"873":1,"921":2}}],["svg",{"2":{"1199":1}}],["svgloader",{"2":{"1199":1}}],["space",{"2":{"2174":1}}],["spacer>",{"2":{"1609":2}}],["span>",{"2":{"1609":1}}],["span>직원",{"2":{"1609":1}}],["splitting",{"2":{"1175":1}}],["spring의",{"2":{"891":1}}],["springboottest",{"2":{"989":1,"992":1}}],["springbootservletinitializer",{"2":{"370":1,"451":1}}],["springbootapplication",{"2":{"370":1,"451":1}}],["springdoc",{"0":{"854":1,"919":1},"1":{"855":1,"856":1,"857":1,"920":1,"921":1},"2":{"277":1,"433":1,"853":1,"855":1,"920":1}}],["springframework",{"2":{"269":1,"279":1,"904":1,"905":1,"906":1}}],["spring",{"0":{"167":1,"221":1,"269":1,"275":1,"279":1,"689":1,"763":1,"777":1,"779":1,"820":1,"901":1,"904":1,"905":1,"906":1,"915":1,"969":1},"1":{"222":1,"690":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"902":1,"903":1,"904":1,"905":1,"906":1,"916":1,"917":1,"918":1,"970":1,"971":1,"972":1},"2":{"9":1,"169":1,"208":1,"222":1,"231":1,"234":1,"272":6,"275":6,"276":1,"425":1,"428":1,"433":2,"451":1,"452":1,"453":1,"482":1,"483":1,"484":1,"502":2,"505":1,"514":2,"515":1,"516":2,"519":2,"551":2,"554":1,"581":1,"615":1,"616":1,"620":1,"628":1,"675":1,"676":1,"747":1,"749":1,"750":3,"763":1,"778":1,"783":1,"820":1,"834":1,"835":1,"836":1,"902":1,"908":1,"916":2,"970":1,"986":1}}],["sdk",{"0":{"947":1},"1":{"948":1,"949":1,"950":1}}],["slf4j",{"2":{"913":1}}],["slist의",{"2":{"665":1}}],["slist에서",{"2":{"51":1}}],["slist는",{"2":{"51":1}}],["slist",{"0":{"45":1},"2":{"44":1,"45":1,"51":1,"651":2,"663":1,"665":1}}],["snackbar>",{"2":{"1537":1}}],["snackbar를",{"2":{"1537":1}}],["snackbarstore",{"2":{"1303":3}}],["snackbar",{"0":{"1537":1},"2":{"1303":1,"1537":6}}],["snake",{"2":{"449":1,"1571":1,"1577":1,"1612":1,"1691":1,"1828":1}}],["snapshot",{"2":{"268":1,"283":1,"341":1,"497":1,"503":1,"557":1}}],["sql",{"0":{"324":1},"1":{"325":1,"326":1},"2":{"322":1,"335":1,"336":1,"836":1,"909":2,"1024":1,"1766":1,"2005":1,"2007":1}}],["sqlsessiontemplateref",{"2":{"329":1,"371":1,"910":1}}],["sqlsessiontemplate",{"2":{"261":2,"329":1,"371":1,"579":2,"838":2,"910":1}}],["sqlsessionfactoryref",{"2":{"329":1,"371":1,"910":1}}],["sqlsessionfactory",{"2":{"261":2,"329":1,"371":1,"579":2,"618":1,"838":2,"910":1}}],["should",{"2":{"2146":2,"2147":1,"2151":1,"2156":2,"2157":1}}],["showalert",{"2":{"1538":3}}],["showerror",{"2":{"1537":2}}],["showloading",{"0":{"1397":1},"2":{"1272":1,"1273":1,"1311":1,"1399":1,"1609":1,"1615":1,"1724":1,"1788":1,"1912":2,"1920":1,"2001":1}}],["show",{"2":{"1072":1,"1303":1,"1440":1,"1537":3}}],["shiki",{"2":{"1752":1}}],["sheetname",{"2":{"2258":2}}],["sheet1",{"2":{"879":1,"1548":1,"2258":1,"2262":1}}],["sheet",{"2":{"879":3}}],["shutdown",{"2":{"236":1}}],["shaking",{"2":{"1175":1}}],["shallowref",{"2":{"1104":1}}],["share",{"2":{"460":1}}],["sharing",{"2":{"459":1}}],["sha256util",{"2":{"214":2,"793":2,"981":2}}],["sha",{"0":{"214":1,"793":1,"981":1},"2":{"575":1,"630":1,"641":1}}],["safari",{"2":{"1700":1}}],["safevalue",{"2":{"217":1,"678":1,"1725":1,"1787":1}}],["saveddata",{"2":{"2294":1}}],["savetoindexeddb",{"0":{"2287":1},"2":{"2287":2,"2294":1}}],["saveas",{"2":{"1547":1,"1548":1,"2262":1}}],["saver",{"2":{"1547":1,"1548":1,"2111":1,"2129":1,"2262":1}}],["save",{"2":{"1434":1,"1435":1,"1879":3,"1882":1,"1883":1}}],["saveuser",{"2":{"228":1}}],["sanitize",{"2":{"983":1}}],["sanitized",{"2":{"983":1}}],["samesite=none",{"2":{"76":2}}],["sftp",{"2":{"630":1}}],["sf",{"2":{"197":1,"898":2}}],["submit",{"2":{"2151":1}}],["subscribetokenrefresh",{"2":{"1261":1,"1276":1,"1336":1}}],["subject",{"2":{"172":1,"692":2,"693":2,"694":2,"696":2}}],["successfully",{"2":{"2151":1}}],["success",{"2":{"698":1}}],["sudo",{"2":{"489":1}}],["summary",{"2":{"421":1,"859":1,"862":1}}],["surl",{"2":{"92":1,"97":3,"108":1,"188":1,"715":1}}],["smtp를",{"2":{"688":1,"698":1}}],["smtp",{"2":{"171":2,"690":2,"699":1}}],["smstemplate",{"2":{"1157":1}}],["smsservice",{"2":{"205":2}}],["sms",{"0":{"62":1,"65":1,"68":1,"202":1,"591":2,"725":1,"730":1,"1152":1},"1":{"63":1,"64":1,"65":1,"66":2,"67":2,"68":1,"69":2,"70":1,"71":1,"72":1,"203":1,"204":1,"205":1,"206":1,"726":1,"727":1,"728":1,"729":1,"730":1,"731":2,"732":2,"733":1,"734":1,"735":1,"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1},"2":{"13":1,"62":1,"65":2,"66":2,"67":5,"69":1,"115":1,"130":1,"141":1,"173":1,"202":1,"204":1,"429":1,"439":2,"517":1,"554":2,"568":2,"591":4,"700":1,"724":1,"725":1,"726":4,"728":4,"729":4,"731":1,"737":2,"740":1,"742":1,"745":2,"1154":1,"1156":1,"1157":1,"1768":2,"1942":1,"1949":5,"2026":2}}],["silenterror",{"2":{"1297":3,"1338":2,"1527":2}}],["silent",{"0":{"1297":1,"1338":1},"2":{"1297":1,"1338":1}}],["sidebarstore는",{"2":{"1456":1}}],["sidebarstore",{"0":{"1455":1,"1917":1},"1":{"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1},"2":{"1457":1,"1460":5,"1463":6,"1464":5,"1468":3,"1675":1,"1909":1,"1917":4}}],["sidebar",{"2":{"1089":1}}],["signwith",{"2":{"933":1}}],["simplemailmessage",{"2":{"692":2}}],["simpleoutputstreamexporteroutput",{"2":{"180":1,"199":1,"710":1}}],["simpleexporterinput",{"2":{"180":1,"199":1,"710":1}}],["size=4096",{"2":{"2174":1}}],["size=",{"2":{"195":1,"197":3}}],["size",{"2":{"155":2,"236":2,"242":2,"892":2,"1637":1,"1728":1}}],["site",{"2":{"0":1,"670":1,"1969":2,"1973":1}}],["src에",{"2":{"2268":1}}],["srcharea",{"2":{"1973":1}}],["srch",{"2":{"1969":6,"1973":1}}],["src=",{"2":{"1837":2,"1844":1,"1845":1}}],["src",{"0":{"560":1,"561":1,"562":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1683":1,"1684":1,"1817":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1856":1},"1":{"1670":1,"1671":1,"1672":1,"1674":1,"1675":1,"1676":1,"1678":1,"1679":1,"1680":1,"1681":1,"1682":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1863":1,"1864":1,"1865":1,"1866":1},"2":{"112":1,"113":1,"119":1,"177":1,"193":1,"226":1,"233":1,"280":1,"319":1,"368":2,"374":2,"409":1,"414":1,"434":2,"437":1,"473":1,"478":1,"481":1,"485":1,"490":1,"492":1,"549":1,"551":1,"552":1,"604":1,"625":1,"626":1,"680":1,"711":1,"719":1,"746":1,"759":1,"761":1,"763":1,"765":1,"825":4,"834":1,"887":1,"889":1,"1005":1,"1010":1,"1014":1,"1019":1,"1025":1,"1032":1,"1039":1,"1042":1,"1049":1,"1051":1,"1053":1,"1057":1,"1068":1,"1076":1,"1081":1,"1087":1,"1095":1,"1102":1,"1104":1,"1106":1,"1110":1,"1117":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1161":6,"1163":1,"1201":2,"1205":2,"1206":3,"1268":1,"1348":1,"1349":1,"1365":1,"1370":1,"1378":1,"1394":1,"1403":1,"1412":1,"1423":1,"1432":1,"1438":1,"1443":1,"1448":1,"1457":1,"1472":1,"1560":1,"1561":1,"1562":1,"1582":1,"1587":3,"1589":1,"1598":5,"1599":1,"1602":1,"1607":1,"1622":1,"1624":1,"1628":1,"1638":1,"1667":1,"1717":2,"1718":1,"1794":1,"1795":1,"1796":1,"1802":1,"1803":1,"1804":1,"1805":1,"1806":1,"1809":1,"1813":1,"1816":1,"1817":1,"1829":6,"1831":1,"1852":1,"1853":1,"1857":1,"1858":1,"1869":1,"1876":1,"1877":1,"1890":1,"1891":1,"1904":1,"1905":4,"1908":1,"1909":1,"1926":1,"1934":1,"1942":1,"1962":1,"1978":1,"1993":1,"1994":1,"2055":1,"2056":2,"2067":1,"2087":1,"2090":1,"2094":1,"2136":1,"2201":1,"2285":1,"2298":1,"2299":1}}],["sc",{"2":{"1981":16,"1989":2}}],["scss",{"0":{"1636":1},"1":{"1637":1,"1638":1,"1639":1,"1640":1},"2":{"1570":1,"1583":1,"1600":1,"1609":1,"1637":1,"1639":2,"1640":1,"1643":1,"1728":1,"1776":1}}],["screendata",{"2":{"1445":1}}],["screen",{"2":{"1445":3}}],["scripting",{"2":{"670":1}}],["script>",{"2":{"0":1,"1011":1,"1020":1,"1027":1,"1029":1,"1035":1,"1036":1,"1040":1,"1043":1,"1063":1,"1072":1,"1097":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1219":1,"1250":1,"1352":1,"1385":1,"1387":1,"1388":1,"1389":1,"1399":1,"1409":1,"1419":1,"1428":1,"1454":1,"1463":1,"1464":1,"1480":1,"1537":1,"1570":1,"1572":1,"1573":1,"1574":1,"1583":1,"1588":1,"1593":1,"1600":1,"1609":1,"1613":1,"1635":1,"1717":1,"1720":1,"1722":1,"1723":1,"1724":1,"1725":1,"1837":1,"1845":1,"1855":1,"1882":1,"1883":2,"1884":1,"1887":1,"1920":1,"1921":2,"1974":1,"2005":1,"2078":1,"2120":1,"2222":1,"2224":1,"2225":1,"2226":1,"2333":1}}],["script",{"0":{"1683":1,"1819":1},"2":{"0":1,"825":1,"1011":1,"1020":1,"1027":1,"1029":1,"1035":1,"1036":1,"1040":1,"1043":1,"1063":1,"1072":1,"1097":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1219":1,"1250":1,"1352":1,"1385":1,"1387":1,"1388":1,"1389":1,"1399":1,"1409":1,"1419":1,"1428":1,"1454":1,"1463":1,"1464":1,"1480":1,"1537":1,"1558":1,"1570":1,"1572":1,"1573":1,"1574":1,"1583":1,"1588":1,"1593":1,"1600":1,"1609":1,"1611":1,"1613":1,"1635":1,"1667":1,"1717":1,"1720":1,"1722":1,"1723":1,"1724":1,"1725":1,"1806":1,"1817":1,"1837":1,"1845":1,"1852":1,"1853":1,"1855":2,"1882":1,"1884":1,"1887":1,"1920":1,"1974":1,"2005":1,"2077":1,"2078":1,"2120":1,"2222":1,"2224":1,"2225":1,"2226":1,"2333":1}}],["scope=",{"2":{"1973":1}}],["scoped",{"2":{"1570":1,"1583":1,"1600":1,"1609":1,"1637":1,"1643":1,"1728":1}}],["scoped>",{"2":{"1044":1,"1558":1}}],["scope로",{"2":{"834":1}}],["scope>",{"2":{"759":1}}],["scope>system",{"2":{"759":1}}],["scope",{"2":{"276":1}}],["schemalocation=",{"2":{"197":1}}],["scheduled",{"2":{"69":1,"204":1,"740":1}}],["sortable",{"2":{"1723":1}}],["socialnum",{"2":{"228":6}}],["social",{"2":{"92":1,"95":1,"98":1,"111":2,"191":1,"229":1}}],["sources",{"2":{"557":1}}],["sourceforge",{"2":{"197":3}}],["source",{"2":{"44":2,"45":2,"649":4,"651":4,"663":2,"954":1}}],["some",{"2":{"0":1,"1751":1}}],["serp",{"2":{"1981":5}}],["servicetest",{"2":{"992":1}}],["service",{"0":{"380":1},"2":{"199":1,"228":1,"368":3,"377":1,"385":1,"388":4,"396":1,"400":7,"406":1,"417":3,"439":2,"440":4,"448":1,"455":1,"518":1,"525":1,"527":4,"534":3,"540":7,"543":3,"554":5,"555":4,"556":3,"565":1,"598":1,"601":2,"602":1,"609":1,"630":2,"632":1,"633":1,"634":1,"635":1,"646":1,"649":2,"684":1,"687":1,"692":1,"693":1,"696":1,"702":1,"705":1,"726":1,"729":2,"992":1,"1662":1,"1679":1,"1864":1,"1941":1}}],["servletresponse",{"2":{"670":1,"671":1}}],["servletrequest",{"2":{"670":1,"671":1}}],["servlet",{"2":{"155":1,"236":1,"242":1,"892":1}}],["serverfilename",{"2":{"2267":2}}],["serverfilepath",{"2":{"649":2}}],["server",{"2":{"33":4,"45":6,"138":1,"459":1,"471":1,"488":1,"489":2,"509":1,"643":1,"1180":1,"1189":1,"1200":1,"1202":1,"1707":1,"1713":1,"1734":1}}],["searchdata",{"2":{"1969":6,"1973":1,"1981":8,"1989":2}}],["search",{"2":{"1435":1,"1649":1,"2062":1}}],["self",{"2":{"825":4,"1662":1,"1679":1,"1864":1,"1941":1}}],["select=",{"2":{"1983":1,"2003":1,"2009":1}}],["selecteddept",{"2":{"2009":1}}],["selecteddata",{"2":{"2003":1}}],["selecteddate",{"2":{"1040":2,"2006":1}}],["selectedcustomer",{"2":{"1983":1}}],["selectedvalue",{"2":{"1020":1,"1027":4,"1028":2,"1029":1,"1035":2,"1036":1,"1722":2,"2005":1}}],["selectbox",{"2":{"1756":1}}],["selectboxdate",{"0":{"1037":1,"2006":1},"1":{"1038":1,"1039":1,"1040":1},"2":{"1039":1,"1040":1,"1994":1,"2006":1}}],["selectboxsql",{"0":{"1023":1,"1722":1,"2005":1},"1":{"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1},"2":{"1025":1,"1027":1,"1579":1,"1591":1,"1691":1,"1722":1,"1766":1,"1826":1,"1973":1,"1994":1,"2005":1}}],["select>",{"2":{"320":1,"322":1,"323":1,"325":1,"326":1,"333":1,"335":1,"336":1,"337":1,"413":1,"546":1,"753":1}}],["selectlist",{"2":{"317":1,"320":1,"325":1,"326":1,"332":1,"333":1,"412":1,"413":1,"545":1,"546":1,"753":1}}],["select",{"0":{"2004":1},"1":{"2005":1,"2006":1,"2007":1},"2":{"256":1,"320":2,"322":1,"323":1,"325":2,"326":2,"333":2,"335":1,"336":1,"337":1,"413":2,"546":2,"753":2,"834":1,"841":1,"942":1,"958":1,"1022":1,"1025":1,"1032":1,"1039":1,"1994":1,"2141":1}}],["separator=",{"2":{"326":1}}],["secret",{"2":{"237":1,"492":1,"968":1}}],["securityfilterchain",{"0":{"821":1,"970":1},"1":{"822":1,"823":1},"2":{"620":2,"822":2,"970":2}}],["security를",{"2":{"581":1,"820":1,"970":1,"986":1}}],["security",{"0":{"221":1,"240":1,"575":2,"587":2,"779":1,"820":1,"825":1,"915":1,"969":1},"1":{"222":1,"241":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"916":1,"917":1,"918":1,"970":1,"971":1,"972":1},"2":{"208":1,"222":3,"231":1,"275":1,"394":1,"428":1,"433":1,"439":3,"516":2,"518":1,"519":1,"554":3,"616":1,"620":3,"628":1,"630":1,"668":1,"670":1,"671":1,"675":1,"676":2,"770":1,"827":1,"916":1,"986":2}}],["securitycontextholder",{"2":{"672":1}}],["securitycontext에",{"2":{"220":1,"672":1,"803":1,"974":1}}],["securitycontext",{"2":{"78":1}}],["secure",{"2":{"76":2}}],["sendcont",{"2":{"732":1}}],["sendmessage",{"2":{"732":1}}],["sendmail",{"2":{"172":1}}],["sendtelno",{"2":{"1949":1}}],["sendtel",{"2":{"732":1}}],["sendtemplatedemail",{"2":{"696":1}}],["sendphone",{"2":{"732":1}}],["sendsmtp",{"2":{"698":2}}],["sendsms",{"2":{"69":1,"204":1,"740":1}}],["sendhtmlemail",{"2":{"693":1,"696":1}}],["sendemailwithattachment",{"2":{"694":1}}],["sendemail",{"2":{"692":1}}],["send",{"2":{"65":2,"66":2,"67":2,"692":1,"693":1,"694":1,"742":1,"1949":3}}],["sessionstore를",{"2":{"1958":1}}],["sessionstore는",{"2":{"1447":1}}],["sessionstore",{"0":{"1446":1,"1914":1},"1":{"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"1452":1,"1453":1,"1454":1},"2":{"1209":4,"1211":1,"1213":1,"1219":4,"1242":3,"1243":1,"1244":2,"1245":1,"1248":1,"1249":1,"1250":5,"1273":2,"1283":3,"1313":2,"1315":1,"1448":1,"1454":4,"1675":1,"1762":1,"1788":2,"1817":1,"1909":1,"1914":4,"1946":3,"1957":5,"1958":5,"1969":2,"1981":2,"2123":1,"2234":2}}],["sessionstorage",{"2":{"76":2,"78":1}}],["sessiondata",{"2":{"76":5,"1248":1,"1914":1}}],["sessioninfo",{"0":{"67":1},"2":{"65":1,"67":1,"205":1,"729":1,"731":1,"742":1}}],["session",{"0":{"906":1},"2":{"56":3,"906":2,"1251":2,"1449":1}}],["seq가",{"2":{"123":1}}],["seq`",{"2":{"46":1}}],["seq로",{"2":{"46":1,"652":1}}],["seq",{"2":{"45":13,"46":3,"120":3,"121":5,"652":1,"663":2,"664":1}}],["setdata",{"2":{"1629":1,"1630":1,"2087":1}}],["setdatabase",{"2":{"290":1,"291":1,"619":1}}],["setup",{"2":{"1611":1,"1921":1,"2077":1}}],["setup>",{"2":{"0":1,"1011":1,"1020":1,"1027":1,"1029":1,"1035":1,"1036":1,"1040":1,"1043":1,"1063":1,"1072":1,"1097":1,"1112":1,"1119":1,"1126":1,"1140":1,"1151":1,"1157":1,"1219":1,"1250":1,"1352":1,"1385":1,"1387":1,"1388":1,"1389":1,"1399":1,"1409":1,"1419":1,"1428":1,"1454":1,"1463":1,"1464":1,"1480":1,"1537":1,"1558":1,"1570":1,"1572":1,"1573":1,"1574":1,"1583":1,"1588":1,"1593":1,"1600":1,"1609":1,"1613":1,"1635":1,"1717":1,"1720":1,"1722":1,"1723":1,"1724":1,"1725":1,"1837":1,"1845":1,"1855":1,"1882":1,"1884":1,"1887":1,"1920":1,"1974":1,"2005":1,"2078":1,"2120":1,"2222":1,"2224":1,"2225":1,"2226":1,"2333":1}}],["setbutton",{"2":{"1434":1}}],["setbmk",{"0":{"1407":1}}],["setexpiration",{"2":{"933":1}}],["setexporteroutput",{"2":{"180":1,"199":1,"710":1}}],["setexporterinput",{"2":{"180":1,"199":1,"710":1}}],["setcurrentmenu",{"2":{"1913":1}}],["setcellvalue",{"2":{"879":1}}],["setconnectionfactory",{"2":{"619":1}}],["setconnectiontimeout",{"2":{"256":1,"618":1,"840":1}}],["setconnectiontestquery",{"2":{"256":1,"834":1,"841":1}}],["setcontentdisposition",{"2":{"156":1,"894":1}}],["setcontenttype",{"2":{"156":1,"829":1,"830":1,"894":1}}],["setstate",{"2":{"1922":2}}],["setstatus",{"2":{"829":1,"830":1}}],["setscreendata",{"2":{"1445":1}}],["setsessionvalue",{"2":{"1914":2}}],["setsessiondata",{"0":{"1242":1,"1451":1},"2":{"1242":1,"1248":1}}],["setsessionkey",{"0":{"1243":1,"1452":1},"2":{"1209":2,"1219":2,"1243":2,"1283":2,"1454":1,"2234":1}}],["setsubject",{"2":{"692":1,"693":1,"694":1,"933":1}}],["setrequestproperty",{"2":{"732":2}}],["setrequestmethod",{"2":{"732":1}}],["setredistoken",{"2":{"299":1,"308":1,"594":1,"634":1,"818":1}}],["setvariables",{"2":{"696":1}}],["setvalueserializer",{"2":{"297":1,"619":1}}],["setvalidationtimeout",{"2":{"256":1,"840":1}}],["settimeout",{"2":{"1304":1,"1534":1}}],["setter",{"2":{"913":1}}],["settext",{"2":{"692":1,"693":1,"694":1}}],["setto",{"2":{"692":1,"693":1,"694":1}}],["setactivepinia",{"2":{"2147":2,"2157":2}}],["setactivetab",{"2":{"1916":1}}],["setaccesstoken",{"0":{"1382":1},"2":{"1229":1,"1233":1,"1248":1,"1259":1,"1263":1,"1276":1,"1337":1,"1382":1,"1387":1,"1634":1,"1911":2,"1920":1,"2157":1,"2167":1}}],["setauthentication",{"2":{"672":1}}],["setattribute",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["setorder",{"2":{"622":1,"675":2,"799":1}}],["setfilter",{"2":{"622":1,"675":2,"799":1}}],["setproperty",{"2":{"954":1}}],["setpassword",{"2":{"619":1}}],["setport",{"2":{"290":1,"291":1,"619":1}}],["set",{"2":{"356":1,"2157":1}}],["sethashvalueserializer",{"2":{"297":1}}],["sethashkeyserializer",{"2":{"296":1}}],["sethostname",{"2":{"290":1,"291":1,"619":1}}],["setkeyserializer",{"2":{"296":1,"619":1}}],["setmenulist",{"2":{"1913":1}}],["setmenudata",{"0":{"1406":1}}],["setmapperlocations",{"2":{"264":1}}],["setmaximumpoolsize",{"2":{"256":1,"618":1,"834":1,"840":1,"841":1}}],["setminimumidle",{"2":{"256":1,"618":1,"834":1,"840":1,"841":1}}],["setitem",{"2":{"17":1,"76":3}}],["s",{"2":{"9":2,"30":2,"31":1,"34":1,"45":1,"56":2,"57":2,"67":2,"76":2,"78":4,"98":2,"120":2,"121":2,"136":1,"351":1,"402":1,"541":1,"607":1,"649":1,"651":2,"721":1,"731":1,"742":1,"1029":1,"1229":1,"1248":1,"1279":1,"1339":2,"1341":1,"1387":1,"1516":1,"1523":1,"1554":1,"1555":2,"1609":1,"1720":1,"1789":1,"1949":2,"2025":1}}],["studio",{"2":{"1699":1}}],["storage",{"2":{"1251":1,"1629":1,"2087":1}}],["stores",{"0":{"1675":1,"1762":1,"1821":1},"2":{"1011":1,"1072":1,"1126":1,"1140":1,"1151":1,"1157":1,"1162":1,"1209":1,"1219":1,"1233":1,"1242":1,"1250":1,"1303":1,"1378":1,"1382":1,"1385":1,"1387":1,"1388":1,"1389":1,"1394":1,"1399":1,"1403":1,"1409":1,"1412":1,"1419":1,"1423":1,"1426":1,"1428":1,"1432":1,"1434":1,"1438":1,"1440":1,"1443":1,"1445":1,"1448":1,"1454":1,"1457":1,"1460":1,"1463":1,"1464":1,"1468":2,"1472":1,"1475":1,"1480":1,"1535":1,"1562":1,"1609":1,"1628":1,"1630":1,"1632":1,"1635":1,"1724":2,"1817":1,"1830":1,"1858":1,"1865":1,"1908":1,"1909":1,"1911":1,"1912":1,"1914":1,"1915":1,"1917":1,"1918":1,"1920":2,"1921":1,"1958":1,"2001":1,"2087":1,"2124":1,"2157":1}}],["store",{"2":{"827":1,"1576":1,"1613":1,"1691":1,"2147":2,"2157":3}}],["styles",{"2":{"1161":2,"1638":1,"1639":1,"1640":1,"1829":2}}],["style=",{"2":{"1063":1,"1609":1,"1723":1,"1973":2}}],["style>",{"2":{"1044":1,"1570":1,"1583":1,"1600":1,"1609":1,"1637":1,"1643":1,"1728":1}}],["style",{"2":{"825":1,"1034":2,"1035":3,"1044":1,"1558":1,"1570":1,"1583":1,"1600":1,"1609":1,"1611":1,"1637":1,"1643":1,"1728":1,"1879":2}}],["stel",{"2":{"69":1,"204":1,"740":1}}],["staging",{"2":{"1172":1,"1179":1,"1509":1,"1510":1,"1735":1,"1739":1}}],["standardcharsets",{"2":{"156":1,"894":1}}],["state",{"0":{"1379":1,"1395":1,"1404":1,"1413":1,"1424":1,"1449":1,"1458":1,"1473":1},"1":{"1380":1},"2":{"1629":3,"1922":5,"1949":1,"1969":2,"2087":3}}],["statementtype=",{"2":{"322":1,"323":1,"335":1,"336":1,"337":1}}],["static",{"2":{"260":1,"400":1,"417":1,"540":1,"543":1,"618":1,"804":1,"838":1,"975":1}}],["statictext>",{"2":{"197":2}}],["stat=",{"2":{"45":6,"49":3,"651":2,"655":3,"656":1}}],["stat",{"2":{"45":12,"663":1}}],["status",{"2":{"9":3,"17":1,"30":3,"31":2,"34":1,"45":2,"56":2,"57":2,"67":3,"76":3,"78":4,"98":2,"120":3,"121":3,"136":1,"137":1,"138":1,"351":1,"352":1,"393":1,"402":1,"403":1,"541":2,"607":1,"651":2,"721":1,"742":1,"989":1,"1029":1,"1229":1,"1248":1,"1258":1,"1276":1,"1279":1,"1294":1,"1300":2,"1305":1,"1332":1,"1339":1,"1341":1,"1387":1,"1516":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1532":1,"1535":2,"1536":3,"1554":1,"1555":1,"1609":1,"1720":1,"1789":1,"2194":7}}],["stack",{"2":{"34":2}}],["starters",{"0":{"275":1}}],["starter",{"0":{"904":1,"905":1},"2":{"269":1,"275":6,"276":1,"277":1,"904":1,"905":1,"908":1,"916":1}}],["starttls",{"2":{"171":1,"690":1}}],["start",{"2":{"33":2,"98":1,"1033":1}}],["strnull",{"0":{"2319":1}}],["strseparator",{"0":{"2319":1}}],["strstring",{"0":{"2319":1}}],["strappend",{"0":{"2319":1}}],["strict",{"2":{"222":1,"620":2,"827":2,"986":1}}],["stripxss",{"2":{"217":1,"678":2}}],["stringredisserializer",{"2":{"296":1,"619":1}}],["stringserializer",{"2":{"296":3}}],["string>",{"2":{"154":1,"400":1,"421":1,"540":1,"600":1,"610":1,"632":1,"648":1,"704":1,"728":1,"859":1,"891":1,"958":1}}],["stringify",{"2":{"45":1,"76":2,"663":1,"1280":1,"1518":1,"1543":1,"2293":1}}],["string",{"0":{"33":1},"2":{"9":3,"17":1,"30":3,"31":2,"32":2,"33":6,"34":4,"44":6,"46":4,"57":1,"66":12,"67":7,"76":3,"77":3,"78":2,"93":1,"94":1,"95":1,"97":2,"98":3,"119":1,"120":7,"121":4,"149":2,"154":1,"156":2,"162":1,"172":1,"178":4,"179":1,"197":3,"199":6,"210":2,"211":2,"213":1,"214":1,"219":7,"228":8,"248":3,"250":1,"293":1,"294":1,"299":1,"300":1,"301":1,"305":2,"308":1,"309":1,"310":1,"311":1,"313":1,"317":5,"332":2,"390":2,"400":1,"412":2,"417":3,"418":4,"421":1,"540":1,"543":1,"545":2,"570":2,"593":2,"594":2,"595":2,"600":2,"601":6,"609":4,"610":2,"619":3,"621":2,"632":1,"633":4,"635":4,"636":2,"641":2,"648":1,"649":4,"663":1,"672":1,"678":1,"692":3,"693":3,"694":3,"696":4,"704":2,"707":2,"708":3,"728":1,"729":4,"732":1,"786":2,"789":2,"792":1,"793":1,"812":2,"813":1,"818":1,"846":2,"859":1,"883":2,"888":1,"891":1,"894":2,"898":1,"914":2,"942":1,"946":1,"950":2,"954":1,"966":2,"967":1,"977":2,"978":2,"980":1,"981":1,"983":1,"1026":4,"1033":4,"1380":1,"1382":1,"1426":1,"1476":1,"1572":1,"2231":1,"2232":1,"2287":1,"2288":1,"2290":1,"2303":1,"2304":2,"2305":1}}],["stream",{"2":{"156":1,"664":1,"894":1}}],["str에",{"2":{"37":1}}],["str",{"0":{"2214":1,"2221":1,"2249":1,"2275":1,"2280":1,"2315":1,"2316":1,"2317":1,"2324":1,"2330":1},"2":{"30":2,"2214":1,"2221":1}}],["a2",{"2":{"2258":1}}],["a5",{"2":{"2258":1}}],["amp",{"2":{"1663":1,"1680":1}}],["aftereach는",{"2":{"1361":1}}],["aftereach",{"0":{"1361":1},"2":{"1361":1}}],["abort",{"2":{"1295":1,"1331":1}}],["abortcontroller",{"2":{"1295":1,"1331":1}}],["abc123def456ghi789",{"2":{"98":1,"103":1}}],["abc123def456",{"2":{"59":2,"2280":1}}],["abc123",{"2":{"50":1,"660":1,"721":1}}],["aggrid",{"0":{"1880":1},"2":{"1817":1,"1877":1,"1880":1,"1887":1}}],["aggridvue",{"2":{"1063":2,"1072":1,"1609":2,"1723":2,"1880":1,"1887":1,"1974":2,"1990":1,"2120":2}}],["age",{"2":{"1220":1,"2197":1,"2320":1}}],["agent",{"2":{"248":1,"636":1}}],["ag",{"0":{"1041":1,"1061":1,"1723":1,"1887":1,"2052":1,"2096":1,"2117":1},"1":{"1042":1,"1043":1,"1062":1,"1063":1,"1064":1,"2097":1,"2098":1,"2099":1,"2118":1,"2119":1,"2120":1},"2":{"1041":1,"1042":1,"1046":1,"1056":1,"1062":1,"1063":2,"1067":1,"1075":1,"1609":2,"1658":1,"1723":2,"1767":2,"1777":1,"1861":1,"1877":2,"1880":6,"1887":3,"1888":1,"1974":3,"1975":1,"1981":1,"1986":1,"1990":2,"1991":1,"2052":1,"2097":2,"2118":1,"2120":2,"2260":2,"2261":1}}],["alt=",{"2":{"1837":2,"1844":1,"1845":1}}],["alert",{"0":{"1302":1},"2":{"1262":1,"1276":1,"1286":1,"1295":1,"1296":1,"1297":2,"1298":1,"1302":1,"1331":1,"1333":1,"1334":1,"1337":1,"1338":1,"1516":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1533":1,"1536":1,"1537":1,"1538":1,"1609":2,"1614":1,"1717":1,"2204":1,"2226":2,"2333":2}}],["aliases",{"2":{"1898":1}}],["alias",{"0":{"1158":1,"1829":1},"1":{"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1830":1},"2":{"1161":1,"1201":1,"1780":1}}],["align",{"2":{"1034":2,"1035":3,"1989":1}}],["all",{"2":{"756":1,"1212":1,"1316":1}}],["allowedheaders",{"2":{"621":1}}],["allowedmethods",{"2":{"621":1}}],["allowedorigins",{"2":{"621":3}}],["allowed",{"2":{"239":1,"493":1,"621":1}}],["allowcredentials",{"2":{"25":1,"621":1}}],["arr",{"2":{"1212":2,"1316":2,"2233":2}}],["arraybuffer",{"2":{"1212":1,"1316":1,"2218":1,"2233":1}}],["array",{"0":{"2192":1,"2216":1},"2":{"1026":1,"1033":2,"2192":2,"2216":3}}],["arrays",{"2":{"663":1}}],["archiver",{"2":{"557":1}}],["artifactid>commons",{"2":{"927":1,"928":1,"929":1}}],["artifactid>postgresql",{"2":{"836":1}}],["artifactid>ojdbc11",{"2":{"835":1}}],["artifactid>tibero",{"2":{"759":1}}],["artifactid>genai",{"2":{"612":1}}],["artifactid>maven",{"2":{"280":1}}],["artifactid>spring",{"2":{"269":1,"279":1,"904":1,"905":1,"906":1}}],["artifactid>",{"2":{"268":1,"269":1,"279":1,"280":1,"612":1,"759":1,"835":1,"836":1,"904":1,"905":1,"906":1,"927":1,"928":1,"929":1}}],["artifactid>axpframework",{"2":{"268":1}}],["assemblyfile",{"2":{"1347":1,"1606":1,"1621":1}}],["assets",{"0":{"1931":1},"2":{"1161":2,"1638":1,"1644":1,"1684":1,"1817":1,"1829":2,"1926":1}}],["assmsmanagement",{"0":{"1949":1},"2":{"65":1,"67":1,"728":2,"742":1,"1942":1,"1949":1}}],["async",{"2":{"1029":1,"1104":1,"1212":1,"1248":1,"1273":1,"1304":1,"1316":1,"1349":1,"1358":1,"1360":1,"1387":1,"1399":1,"1534":1,"1567":2,"1609":1,"1615":1,"1720":1,"1920":1,"2146":1,"2151":1,"2292":1}}],["aspect",{"2":{"905":1}}],["aslist",{"2":{"663":1}}],["ask",{"2":{"610":2}}],["askai",{"2":{"609":1}}],["as",{"2":{"501":1}}],["adapter",{"2":{"630":1}}],["adapterservice",{"2":{"313":2}}],["add",{"0":{"2209":1,"2242":1,"2303":1},"2":{"2209":1,"2303":1}}],["addtab",{"2":{"1916":1}}],["additional",{"2":{"1752":1}}],["addrow",{"2":{"1548":2,"2262":2}}],["addroute",{"2":{"1350":1}}],["addworksheet",{"2":{"1548":1,"2262":1}}],["adderrorlog",{"2":{"1535":1}}],["addlogdata",{"0":{"1416":1},"2":{"1314":1,"1918":1}}],["addattachment",{"2":{"694":1}}],["addurlpatterns",{"2":{"622":1,"675":2,"799":1}}],["addmapping",{"2":{"621":1}}],["addcorsmappings",{"2":{"621":1}}],["addfilterbefore",{"2":{"620":1,"822":1,"970":1}}],["adoptium",{"2":{"460":1}}],["admintest",{"2":{"1942":1}}],["adminlogin",{"0":{"1795":1,"1937":1},"2":{"1795":1,"1895":1,"1934":1}}],["adminlogincheck",{"2":{"77":1,"241":2,"823":1,"971":1,"972":1}}],["adminapi",{"2":{"870":1}}],["admin001",{"2":{"77":1}}],["admin",{"0":{"531":1,"1948":1},"1":{"1949":1},"2":{"63":1,"65":1,"67":1,"388":1,"440":1,"527":1,"555":1,"728":2,"742":1,"870":2,"1679":1,"1717":2,"1718":1,"1817":1,"1942":1}}],["ac",{"2":{"2025":4}}],["actions",{"0":{"1381":1,"1396":1,"1425":1},"1":{"1382":1,"1383":1,"1397":1,"1398":1,"1426":1,"1427":1},"2":{"1629":1,"1922":1,"2087":1}}],["actiontype",{"2":{"1059":1,"1060":1}}],["actionname",{"2":{"1059":1,"1060":1}}],["action",{"2":{"1059":3}}],["active>prod",{"2":{"272":1}}],["active>dev",{"2":{"272":1}}],["active>",{"2":{"272":3}}],["active>local",{"2":{"272":1}}],["active",{"2":{"234":2,"453":2,"749":2,"2194":6}}],["accessdeniedhandler",{"0":{"829":1},"2":{"620":3,"829":1}}],["accesstoken이",{"2":{"1385":1}}],["accesstoken",{"0":{"1380":1},"2":{"17":4,"76":5,"78":1,"85":1,"133":1,"219":2,"356":1,"812":1,"817":1,"966":1,"1226":1,"1229":1,"1230":1,"1248":1,"1259":1,"1263":2,"1273":1,"1276":2,"1312":1,"1337":2,"1379":1,"1387":1,"1633":1,"1635":1,"1911":1,"2157":1}}],["access",{"0":{"17":1,"19":1,"133":1,"810":1,"964":1,"1226":1,"1233":1,"1234":1},"2":{"0":1,"17":3,"20":1,"23":1,"24":2,"76":2,"83":1,"84":1,"219":1,"220":1,"230":1,"635":1,"672":1,"803":1,"811":1,"812":1,"965":1,"966":1,"974":1,"1224":1,"1227":1,"1229":1,"1231":1,"1236":1,"1248":1,"1255":2,"1764":1,"1797":1,"1911":3,"2157":1,"2168":1}}],["aop",{"0":{"905":1},"2":{"160":1,"275":2,"439":1,"554":1,"574":1,"630":3,"905":2}}],["auto",{"2":{"1205":1,"1653":1,"1744":1,"1817":1,"1981":3,"2055":1,"2079":1,"2083":1,"2200":1}}],["autoimport",{"0":{"1205":1},"2":{"1199":1}}],["autoconfiguremockmvc",{"2":{"989":1}}],["autowired",{"2":{"149":1,"158":1,"172":1,"205":1,"248":1,"249":1,"250":1,"299":1,"305":1,"308":1,"313":1,"570":1,"593":1,"594":1,"595":1,"692":1,"693":1,"696":1,"786":1,"789":1,"792":1,"793":1,"812":1,"818":1,"883":1,"888":1,"896":1,"950":1,"966":1,"977":1,"978":1,"980":1,"981":1,"983":1,"989":1,"992":1}}],["authstore는",{"2":{"1377":1}}],["authstore에서",{"2":{"1272":1}}],["authstore",{"0":{"1376":1,"1911":1},"1":{"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1},"2":{"1162":1,"1226":1,"1229":1,"1230":1,"1233":3,"1235":1,"1248":1,"1249":1,"1259":1,"1262":1,"1263":1,"1273":2,"1276":2,"1312":2,"1337":2,"1360":2,"1378":1,"1382":3,"1383":2,"1385":4,"1387":3,"1388":3,"1389":3,"1576":1,"1632":2,"1633":2,"1634":1,"1635":4,"1675":1,"1691":1,"1724":3,"1762":1,"1788":2,"1817":1,"1827":1,"1830":1,"1909":1,"1911":4,"1920":4,"1921":4,"2123":1,"2124":2,"2157":2,"2167":1}}],["authservice",{"2":{"219":4,"812":3,"813":2}}],["authentication",{"2":{"672":1}}],["authenticationentrypoint",{"0":{"830":1},"2":{"620":3,"830":1}}],["authenticated",{"2":{"620":1,"822":1,"970":1}}],["authorize",{"2":{"873":2}}],["authorizehttprequests",{"2":{"620":1,"822":1,"970":1}}],["authorization",{"0":{"356":1},"2":{"19":1,"85":1,"220":1,"356":1,"621":1,"672":2,"732":1,"803":1,"810":1,"964":1,"974":1,"1226":1,"1230":1,"1260":1,"1261":1,"1272":1,"1273":1,"1276":2,"1312":1,"1336":1,"1337":1}}],["auth",{"0":{"529":1,"585":2,"1192":1},"2":{"15":1,"17":2,"24":1,"86":1,"171":1,"239":1,"241":2,"388":1,"439":1,"440":1,"493":1,"527":1,"554":1,"555":1,"620":3,"668":1,"672":3,"690":1,"815":1,"822":2,"823":1,"970":2,"971":1,"972":1,"1083":1,"1180":1,"1183":1,"1184":2,"1189":2,"1200":2,"1202":1,"1259":1,"1263":1,"1276":2,"1337":1,"1366":1,"1494":1,"1678":1,"1707":1,"1713":1,"1734":1,"1794":1,"1795":1,"1796":1,"1817":1,"1895":1,"1934":1}}],["axpreportmapper",{"2":{"590":1,"702":1}}],["axpreportservice",{"0":{"705":1},"2":{"590":1,"702":1,"705":1,"888":1}}],["axpreportcontroller",{"0":{"704":1},"2":{"590":1,"702":1,"704":2}}],["axpredisconfig",{"0":{"289":1,"580":1,"619":1},"1":{"290":1,"291":1},"2":{"439":1,"554":1,"616":1,"619":2,"770":1}}],["axpcomvalid2",{"2":{"630":1}}],["axpcomvalid1",{"2":{"630":1}}],["axpcommvo",{"2":{"630":1}}],["axpcommvalidationutil",{"0":{"249":1},"2":{"249":1,"392":1,"577":1,"630":2}}],["axpcommsecurityutil",{"2":{"630":1}}],["axpcommsha256util",{"0":{"641":1},"2":{"214":2,"575":1,"630":1,"793":1,"981":1}}],["axpcommhtmlutil",{"2":{"630":1}}],["axpcommfilesftputil",{"2":{"630":1}}],["axpcommfileutil",{"0":{"158":1,"896":1},"2":{"158":1,"392":1,"577":1,"630":1,"649":1,"896":1}}],["axpcommconst",{"0":{"643":1},"2":{"630":1,"643":1}}],["axpcommmailutil",{"0":{"688":1,"698":1},"2":{"577":1,"630":1,"688":1,"698":2}}],["axpcommmd5util",{"0":{"640":1},"2":{"213":2,"575":1,"630":1,"792":1,"980":1}}],["axpcommlogaop",{"2":{"574":1,"630":1}}],["axpcommlogannotation",{"0":{"162":1},"2":{"162":1,"574":1,"630":1}}],["axpcommproperty",{"2":{"630":1}}],["axpcommprocmapper",{"2":{"444":1,"630":1,"752":1}}],["axpcommpaging",{"0":{"250":1},"2":{"250":1,"577":1,"630":1}}],["axpcommdbcontroller",{"2":{"630":1}}],["axpcommdbadapterservice",{"0":{"312":1},"1":{"313":1},"2":{"313":1,"573":1,"630":1}}],["axpcommdbservice를",{"2":{"385":1,"846":1}}],["axpcommdbservice",{"0":{"304":1,"633":1},"1":{"305":1,"306":1},"2":{"178":4,"199":4,"305":1,"390":5,"417":2,"543":2,"573":1,"593":1,"630":1,"633":5,"704":4,"707":1,"769":1,"846":1}}],["axpcommrediscontroller",{"2":{"630":1}}],["axpcommredisdbservice",{"0":{"307":1,"634":1},"1":{"308":1,"309":1,"310":1,"311":1},"2":{"299":1,"308":1,"390":1,"573":1,"594":1,"630":1,"634":1,"769":1,"818":1}}],["axpcommrsa",{"0":{"639":1},"2":{"211":2,"391":1,"575":1,"630":1,"789":1,"978":1}}],["axpcommutil",{"0":{"247":1,"636":1},"1":{"248":1},"2":{"248":1,"392":1,"577":1,"630":1,"636":7}}],["axpcommapihttpstatus",{"2":{"630":1}}],["axpcommauthcontroller",{"2":{"576":1,"630":1}}],["axpcommauthservice",{"0":{"219":1,"635":1},"2":{"219":2,"391":1,"576":1,"630":1,"635":1,"769":1,"812":1,"966":4,"967":2}}],["axpcommautoscheduler",{"2":{"572":1,"630":1}}],["axpcommaes128",{"0":{"638":1},"2":{"210":2,"228":2,"391":1,"575":1,"595":1,"630":1,"641":2,"786":1,"977":1}}],["axpcorsloggingfilter",{"0":{"673":1,"806":1},"2":{"583":1,"586":1,"668":1,"673":1,"796":1}}],["axpaimapper",{"2":{"598":1}}],["axpaiservice",{"0":{"602":1},"2":{"570":1,"598":1,"601":4,"602":1}}],["axpaicontroller",{"0":{"600":1},"2":{"570":1,"598":1,"600":2}}],["axpmailmapper",{"2":{"589":1,"684":1}}],["axpmailcontroller",{"0":{"686":1},"2":{"589":1,"684":1,"686":1}}],["axpmailservice",{"0":{"687":1},"2":{"172":1,"589":1,"684":1,"687":1}}],["axpmybatisresultinterceptor",{"0":{"623":1},"2":{"554":1,"616":1,"623":1}}],["axp",{"0":{"513":1,"1661":1,"1755":1,"1760":1,"1791":1},"1":{"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"1756":1,"1757":1,"1758":1,"1759":1,"1760":1,"1761":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1,"1778":1,"1779":1,"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1,"1788":1,"1789":1,"1790":1,"1792":1,"1793":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1},"2":{"514":1,"515":1,"516":1,"1598":1,"1652":2,"1654":1,"1692":1,"1756":1,"1761":1,"1779":1,"1792":1,"1858":1,"1933":1}}],["axpwebconfig",{"0":{"582":1,"621":1},"2":{"439":1,"554":1,"616":1,"621":2,"770":1}}],["axpbasewebcontroller",{"0":{"632":1},"2":{"379":1,"384":1,"400":1,"421":1,"540":1,"572":1,"600":1,"610":1,"630":1,"632":2,"648":1,"704":1,"728":1,"768":1,"859":1}}],["axpbootapplication",{"0":{"451":1},"2":{"279":1,"370":2,"396":2,"407":1,"439":1,"451":1,"500":2,"501":1,"554":1,"568":1}}],["axpdatasourceconfig",{"0":{"259":1,"579":1,"618":1,"838":1},"1":{"260":1,"261":1},"2":{"439":1,"554":1,"616":1,"618":2,"770":1}}],["axpdecryptfilter>",{"2":{"675":2}}],["axpdecryptfilter",{"0":{"224":1,"671":1,"801":1},"2":{"583":1,"587":1,"622":1,"668":1,"671":2,"675":2,"676":1,"796":1}}],["axpsmsmapper",{"2":{"591":1,"726":1}}],["axpsmscontroller",{"0":{"728":1},"2":{"591":1,"726":1,"728":2}}],["axpsmsservice",{"0":{"729":1},"2":{"205":1,"591":1,"726":1,"728":3,"729":3}}],["axpsecurityconfig",{"0":{"222":1,"581":1,"620":1},"2":{"439":1,"554":1,"616":1,"620":2,"770":1,"918":1}}],["axpjwtauthenticationfilter",{"0":{"220":1,"672":1,"803":1,"974":1},"2":{"585":1,"668":1,"672":2,"675":1,"676":1,"796":1,"822":1,"970":1}}],["axpxssutil",{"0":{"217":1,"678":1},"2":{"217":1,"668":1,"678":2,"983":1}}],["axpxssfilter가",{"2":{"985":1}}],["axpxssfilterregistration",{"2":{"799":1}}],["axpxssfilter>",{"2":{"622":2,"675":2,"799":2}}],["axpxssfilter",{"0":{"216":1,"670":1,"798":1},"2":{"583":1,"587":1,"622":2,"668":1,"670":2,"675":2,"676":1,"796":1,"799":1}}],["axpfileservice",{"0":{"649":1},"2":{"588":1,"646":1,"648":3,"649":3}}],["axpfilecontroller",{"0":{"648":1},"2":{"588":1,"646":1,"648":2}}],["axpfilterconfig",{"0":{"583":1,"622":1,"675":1},"2":{"554":1,"616":1,"622":2,"675":2}}],["axpfilterconfig에서",{"2":{"216":1}}],["axpframework에",{"2":{"364":1}}],["axpframework에서",{"2":{"129":1,"207":1,"900":1,"938":1}}],["axpframework의",{"2":{"346":1,"454":1,"767":1}}],["axpframework",{"0":{"425":1,"439":1,"554":1,"1678":1,"1932":1},"1":{"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1},"2":{"164":1,"165":2,"234":1,"244":2,"283":1,"329":1,"341":1,"370":1,"371":1,"407":1,"408":1,"431":1,"434":2,"436":1,"437":2,"439":1,"444":1,"451":2,"454":1,"475":1,"477":1,"478":1,"497":1,"503":1,"507":2,"548":1,"549":1,"551":2,"552":1,"554":1,"557":1,"558":2,"565":1,"567":1,"568":1,"598":1,"600":1,"601":1,"602":1,"616":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"630":1,"632":1,"633":1,"634":1,"635":1,"636":1,"643":1,"646":1,"648":1,"649":1,"668":1,"670":1,"671":1,"672":1,"673":1,"675":1,"678":1,"684":1,"686":1,"687":1,"688":1,"702":1,"704":1,"705":1,"726":1,"728":1,"729":1,"752":1,"763":2,"910":1,"918":1,"1000":2,"1001":1,"1083":1,"1087":1,"1091":1,"1366":2,"1598":1,"1778":1,"1794":1,"1795":1,"1796":1,"1817":2,"1853":1,"1858":1,"1864":1,"1895":2,"1934":1}}],["axpframework는",{"2":{"130":1,"146":1,"152":1,"160":1,"169":1,"175":1,"202":1,"208":1,"246":1,"252":1,"266":1,"286":1,"303":1,"328":1,"425":1,"784":1,"795":1,"808":1,"820":1,"832":1,"853":1,"875":1,"960":1}}],["axpgeminiservice",{"0":{"601":1},"2":{"149":1,"570":2,"598":1,"600":4,"601":3,"609":2,"610":2,"950":1}}],["axiosinstance",{"2":{"1029":2,"1162":1,"1194":1,"1229":1,"1248":1,"1260":1,"1261":1,"1269":1,"1276":2,"1278":3,"1279":1,"1280":1,"1281":1,"1297":1,"1300":1,"1303":1,"1304":1,"1320":1,"1336":1,"1337":1,"1338":1,"1341":1,"1342":1,"1387":2,"1515":3,"1516":1,"1517":1,"1518":1,"1519":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1543":1,"1546":1,"1547":1,"1551":1,"1552":1,"1556":1,"1567":1,"1609":2,"1613":1,"1614":1,"1720":2,"1789":1,"1830":1,"1861":2,"1957":1,"1969":1,"1981":1,"2035":1,"2069":2,"2269":1}}],["axios",{"0":{"1266":1,"2053":1,"2065":1,"2092":1},"1":{"1267":1,"1268":1,"1269":1,"1270":1,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":1,"2066":1,"2067":1,"2068":1,"2069":1,"2093":1,"2094":1,"2095":1},"2":{"9":1,"17":1,"30":2,"31":1,"45":1,"46":1,"56":1,"57":1,"67":1,"76":1,"78":1,"98":1,"99":1,"119":1,"120":1,"121":1,"1237":1,"1259":1,"1263":1,"1265":1,"1267":1,"1269":1,"1276":1,"1305":3,"1307":1,"1321":1,"1337":1,"1343":1,"1391":1,"1416":1,"1532":3,"1658":1,"1667":1,"1672":1,"1763":1,"1777":1,"1817":1,"1858":1,"1861":1,"1862":1,"2035":1,"2053":1,"2066":1,"2067":1,"2093":1,"2094":1,"2116":1}}],["a1",{"2":{"113":1,"194":1,"718":1,"889":1,"2258":1}}],["aes로",{"2":{"801":1}}],["aes128",{"2":{"210":3,"228":3,"595":3,"641":3,"786":3,"977":3}}],["aes",{"0":{"210":1,"785":1,"977":1},"1":{"786":1,"787":1},"2":{"111":1,"191":1,"208":1,"428":1,"575":1,"630":1,"638":1,"801":3,"1208":1}}],["ano",{"2":{"2177":1}}],["an",{"2":{"1753":2}}],["ancestors",{"2":{"825":1}}],["annotation",{"2":{"630":1}}],["annotations",{"2":{"317":1}}],["antisamy의",{"2":{"761":1}}],["antisamy",{"0":{"226":1,"680":1,"761":1,"934":1,"983":1},"1":{"935":1,"936":1},"2":{"226":2,"551":1,"680":2,"747":1,"761":1,"935":1,"936":1,"984":1}}],["antisamy를",{"2":{"216":1,"670":1}}],["anyrequest",{"2":{"620":1,"822":1,"970":1}}],["any",{"2":{"96":1,"2171":1,"2287":1}}],["andexpect",{"2":{"989":1}}],["and",{"2":{"0":2,"325":2}}],["attendance",{"2":{"367":1,"368":1}}],["attachment",{"2":{"46":1,"102":1,"156":1,"652":1,"694":3,"894":1}}],["atomiclist는",{"2":{"38":1}}],["atomiclist",{"2":{"31":2}}],["atomic",{"2":{"30":2,"1957":1,"1969":1,"1981":1,"2003":1}}],["apexcharts",{"0":{"2071":1,"2101":1},"2":{"1658":1,"1777":1,"2071":1,"2101":1}}],["apt",{"2":{"489":1}}],["apache",{"0":{"782":1,"876":1,"925":1},"1":{"877":1,"878":1,"879":1,"926":1,"927":1,"928":1,"929":1},"2":{"164":1,"244":1,"280":1,"317":1,"460":1,"929":1,"954":1,"958":1,"1001":1}}],["apple",{"2":{"2192":2,"2195":1,"2216":2}}],["application",{"0":{"69":1,"171":1,"204":1,"234":1,"288":1,"362":1,"453":1,"605":1,"625":1,"658":1,"690":1,"740":1,"749":1},"2":{"51":1,"99":2,"102":2,"103":1,"156":1,"233":4,"234":1,"253":1,"394":1,"437":1,"443":3,"462":1,"463":1,"464":1,"465":1,"481":1,"490":1,"492":1,"501":1,"509":1,"518":1,"551":4,"552":1,"625":1,"626":3,"627":4,"664":1,"671":1,"722":1,"732":1,"747":1,"750":3,"773":4,"829":1,"830":1,"869":3,"892":1,"894":1,"989":1,"995":1,"1269":1,"2218":2}}],["approvecancel",{"2":{"1435":1}}],["approve",{"2":{"1435":1}}],["approvallist",{"2":{"1126":1}}],["approvaldata",{"2":{"1126":3,"1915":1}}],["approval",{"2":{"1126":1,"1127":1,"1435":1}}],["app",{"0":{"1670":1,"1860":1},"2":{"260":1,"618":1,"838":1,"1667":1,"1817":1,"1858":1,"1861":8,"1893":2,"1898":2,"1904":9,"1905":4}}],["appendchild",{"2":{"46":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["append",{"2":{"45":8,"663":6,"1280":2,"1518":2,"1543":2}}],["api와",{"2":{"2086":1}}],["apiurl",{"2":{"1181":1}}],["api의",{"2":{"873":1}}],["apikey",{"2":{"601":3}}],["apiresponse",{"0":{"864":1},"2":{"421":2,"859":2,"864":4}}],["apiresponses",{"2":{"421":1,"859":1,"864":1}}],["api에서",{"0":{"1463":1,"1882":1,"1883":1,"1920":1,"1921":1}}],["api에",{"2":{"394":1}}],["api를",{"2":{"129":1,"354":1,"393":1,"395":1,"521":1,"1514":1,"1653":1,"1720":1,"1957":1,"2077":1}}],["api일",{"2":{"60":1}}],["api는",{"2":{"28":1,"38":1,"126":1,"132":1,"135":1,"139":1,"144":1,"348":1,"393":1,"541":1}}],["api입니다",{"2":{"6":1,"14":1,"27":1,"40":1,"53":1,"62":1,"73":1,"80":1,"89":1,"116":1,"125":1}}],["apis",{"2":{"0":1,"5":1}}],["api",{"0":{"0":1,"6":1,"8":1,"14":1,"16":1,"27":1,"29":1,"40":1,"42":1,"53":1,"55":1,"62":1,"64":1,"73":1,"75":1,"85":1,"89":1,"91":1,"116":1,"118":1,"125":1,"127":1,"129":1,"130":1,"140":1,"141":1,"142":1,"143":1,"150":1,"181":1,"346":1,"393":1,"506":1,"521":1,"606":1,"607":1,"732":1,"815":1,"853":1,"858":1,"871":1,"1029":1,"1191":1,"1230":1,"1513":1,"1520":1,"1720":1,"1789":1,"1957":1,"2035":1,"2057":1,"2159":1,"2187":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"8":1,"9":2,"10":1,"11":1,"12":1,"13":1,"15":1,"16":1,"17":2,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"28":1,"29":1,"30":2,"31":2,"32":2,"33":2,"34":2,"35":1,"36":1,"37":1,"38":1,"39":1,"41":1,"42":1,"43":2,"44":2,"45":2,"46":2,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"54":1,"55":1,"56":2,"57":2,"58":1,"59":1,"60":1,"61":1,"63":1,"64":1,"65":2,"66":2,"67":2,"68":1,"69":1,"70":1,"71":1,"72":1,"74":1,"75":1,"76":2,"77":2,"78":2,"79":2,"80":2,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"90":1,"91":1,"92":2,"93":2,"94":2,"95":2,"96":2,"97":2,"98":2,"99":2,"100":2,"101":2,"102":2,"103":2,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"117":1,"118":1,"119":2,"120":2,"121":2,"122":1,"123":1,"124":1,"126":1,"127":1,"128":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":2,"142":2,"143":2,"144":1,"145":1,"182":1,"183":1,"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"607":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":2,"860":2,"861":2,"862":2,"863":2,"864":2,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":2,"873":2,"874":1,"1514":1,"1515":1,"1516":1,"1517":1,"1518":1,"1519":1,"1521":1,"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"2160":1,"2161":1,"2162":1,"2163":1},"2":{"0":1,"7":1,"9":3,"11":3,"12":4,"13":2,"15":1,"17":2,"19":1,"24":1,"26":2,"28":1,"30":2,"31":2,"32":1,"33":1,"34":1,"39":2,"41":1,"43":1,"45":1,"46":2,"52":2,"54":1,"56":2,"57":2,"61":2,"63":1,"65":1,"67":1,"69":1,"72":2,"74":1,"76":2,"77":1,"78":2,"79":1,"80":1,"82":1,"86":1,"88":2,"90":1,"92":1,"98":3,"99":2,"100":1,"101":1,"102":1,"103":2,"115":2,"117":1,"119":2,"120":2,"121":2,"124":2,"127":3,"128":2,"130":4,"143":1,"145":2,"148":2,"150":1,"182":1,"183":1,"201":1,"204":1,"229":1,"239":1,"241":8,"251":1,"277":1,"346":1,"347":3,"358":2,"363":1,"367":4,"368":1,"372":1,"377":1,"379":1,"384":1,"393":1,"396":1,"397":1,"398":1,"400":1,"404":1,"420":1,"421":2,"448":1,"469":1,"493":1,"506":1,"518":5,"521":4,"525":1,"540":1,"570":1,"576":1,"588":1,"589":1,"590":1,"591":1,"598":1,"600":3,"601":2,"602":2,"604":2,"610":1,"613":5,"614":1,"632":2,"646":1,"648":4,"663":1,"664":1,"666":1,"684":1,"686":2,"702":1,"704":8,"721":1,"722":1,"724":1,"726":1,"728":3,"729":1,"731":1,"740":2,"742":1,"744":2,"745":1,"777":1,"781":1,"782":1,"810":1,"815":1,"823":3,"853":1,"856":2,"859":3,"861":2,"862":1,"866":1,"867":1,"869":2,"870":3,"872":1,"873":1,"874":1,"904":1,"921":1,"932":2,"964":1,"971":3,"972":3,"989":1,"1029":1,"1072":2,"1180":2,"1181":1,"1183":1,"1184":2,"1185":1,"1189":2,"1191":1,"1194":3,"1200":2,"1202":1,"1208":1,"1226":1,"1229":1,"1248":1,"1259":1,"1263":1,"1276":1,"1278":2,"1279":1,"1280":1,"1281":1,"1297":1,"1300":1,"1303":1,"1304":1,"1309":1,"1323":1,"1337":1,"1338":1,"1341":1,"1342":1,"1387":1,"1399":1,"1411":2,"1418":1,"1440":1,"1487":2,"1494":1,"1515":2,"1516":1,"1517":1,"1518":1,"1519":1,"1521":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":3,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"1543":1,"1546":1,"1547":1,"1551":1,"1552":1,"1556":1,"1567":1,"1609":1,"1614":1,"1615":2,"1619":1,"1653":1,"1656":1,"1689":1,"1706":1,"1707":2,"1713":1,"1720":1,"1729":1,"1734":2,"1760":1,"1762":1,"1763":1,"1773":2,"1777":1,"1784":2,"1789":1,"1879":1,"1912":1,"1918":1,"1946":1,"1949":1,"1957":1,"1959":1,"1969":2,"1974":1,"1975":1,"1981":2,"1991":1,"2003":1,"2024":1,"2025":1,"2069":1,"2076":1,"2109":1,"2187":1,"2260":2,"2269":1}}],["a",{"2":{"45":5,"46":1,"656":1,"942":1,"1281":1,"1342":1,"1519":1,"1546":1,"1753":8,"2055":1,"2056":1,"2057":1,"2058":1,"2059":1,"2192":2,"2195":2,"2196":1,"2204":1,"2216":2,"2269":1}}],["await를",{"2":{"2295":1}}],["await",{"2":{"9":1,"17":1,"30":1,"31":1,"45":1,"46":1,"56":1,"57":1,"67":1,"76":1,"78":1,"98":1,"99":1,"119":1,"120":1,"121":1,"1029":1,"1104":1,"1194":1,"1212":2,"1229":1,"1248":1,"1259":1,"1262":1,"1263":1,"1276":2,"1278":2,"1279":1,"1280":1,"1281":1,"1295":1,"1297":1,"1300":1,"1303":1,"1304":3,"1316":2,"1331":1,"1337":2,"1338":1,"1341":1,"1342":1,"1349":1,"1358":1,"1387":1,"1515":2,"1516":1,"1517":1,"1518":1,"1519":1,"1523":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1534":3,"1535":1,"1536":1,"1537":1,"1538":1,"1543":1,"1546":1,"1547":1,"1548":1,"1551":1,"1552":1,"1556":1,"1567":2,"1609":1,"1614":1,"1720":1,"1789":1,"1957":1,"1969":1,"1981":1,"2069":1,"2146":1,"2151":5,"2233":1,"2260":1,"2262":1,"2268":1,"2269":1,"2287":1,"2288":1,"2292":2,"2294":2}}],["airesponse",{"2":{"9":2}}],["ai가",{"2":{"9":1}}],["ai에게",{"2":{"9":1}}],["ai에",{"2":{"9":1,"607":1}}],["ai를",{"2":{"6":1,"146":1,"570":1,"597":1}}],["ai",{"0":{"6":1,"9":1,"11":1,"146":1,"148":1,"570":2,"597":1,"604":1,"607":1},"1":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"147":1,"148":1,"149":1,"150":1,"151":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1},"2":{"7":1,"9":5,"11":1,"115":1,"130":1,"141":1,"150":1,"173":1,"206":1,"233":2,"429":1,"439":2,"443":2,"517":1,"551":2,"554":2,"568":2,"570":4,"597":1,"598":5,"600":4,"601":3,"602":2,"604":1,"605":2,"607":1,"610":1,"614":1,"750":2,"949":2,"959":1}}],["ty",{"2":{"1981":3}}],["typeof",{"2":{"1538":1}}],["typescript",{"0":{"1564":1},"1":{"1565":1,"1566":1,"1567":1,"1568":1},"2":{"1163":1,"1781":1,"1846":1,"2171":1}}],["type=",{"2":{"45":2,"48":2,"51":1,"66":3,"67":2,"71":1,"322":1,"651":2,"665":1,"731":2,"735":3,"744":1,"1836":1,"2151":1,"2233":1}}],["type",{"0":{"654":1,"734":1,"735":1,"737":1},"2":{"44":1,"45":8,"46":1,"65":3,"66":3,"67":3,"99":2,"101":1,"102":1,"103":1,"119":1,"253":1,"260":1,"482":1,"483":1,"484":1,"618":2,"649":2,"651":2,"652":1,"663":2,"664":1,"731":2,"732":1,"742":3,"743":2,"834":1,"835":1,"836":1,"838":1,"869":2,"986":1,"1072":1,"1269":1,"1280":1,"1440":1,"1572":2,"1946":1,"1949":4,"1957":1,"1969":1,"1981":1,"2025":1,"2218":1}}],["td>",{"2":{"1973":2}}],["tbody>",{"2":{"1973":2}}],["tbdriver",{"2":{"255":1,"482":1,"834":1}}],["t",{"2":{"1879":1,"1882":3,"1885":1}}],["ts에",{"2":{"1589":1}}],["ts",{"2":{"1205":1,"1206":1,"1781":1,"1817":2,"2055":1,"2056":1}}],["taskkill",{"2":{"2177":1}}],["tabid",{"2":{"1916":2}}],["tab",{"0":{"1477":1},"2":{"1477":1,"1480":4,"1916":1}}],["tabcntobj",{"2":{"1473":1}}],["tablist",{"2":{"1473":1,"1480":1,"1916":1}}],["table>",{"2":{"1973":1}}],["table",{"2":{"320":1,"325":1,"326":1,"333":1,"413":1,"546":1,"753":1,"1973":2,"2141":1}}],["tabstore는",{"2":{"1471":1}}],["tabstore",{"0":{"1470":1,"1916":1},"1":{"1471":1,"1472":1,"1473":1,"1474":1,"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1},"2":{"1472":1,"1475":3,"1480":5,"1675":1,"1762":1,"1817":1,"1909":1,"2123":1,"2294":2}}],["tag",{"0":{"861":1},"2":{"421":1,"859":1,"861":1}}],["target",{"0":{"563":1},"2":{"283":1,"341":1,"437":1,"497":1,"503":1,"549":1,"557":1,"1189":3,"1200":3}}],["targetpath>",{"2":{"280":1}}],["targetpath>web",{"2":{"280":1}}],["tmax",{"2":{"255":1,"482":1,"759":1,"834":1}}],["trigger",{"2":{"2146":1}}],["tr>",{"2":{"1973":2}}],["treeorgnode",{"0":{"1052":1,"2011":1},"1":{"1053":1},"2":{"1053":1,"1994":1}}],["treeempdropdown",{"0":{"1050":1,"2010":1},"1":{"1051":1},"2":{"1051":1,"1766":1,"1994":1}}],["tree",{"0":{"2008":1},"1":{"2009":1,"2010":1,"2011":1},"2":{"1049":1,"1051":1,"1053":1,"1175":1,"1994":1,"2115":1,"2133":1}}],["treedeptdropdown",{"0":{"1048":1,"2009":1},"1":{"1049":1},"2":{"1049":1,"1766":1,"1994":1,"2009":1}}],["try",{"0":{"1523":1},"2":{"400":1,"540":1,"610":1,"632":1,"872":1,"1029":1,"1276":1,"1303":1,"1304":1,"1337":1,"1387":1,"1399":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":2,"1567":1,"1568":1,"1609":1,"1614":1,"1615":1,"1720":1,"1920":1,"2295":1}}],["transactional",{"2":{"649":1}}],["transactionmanager",{"2":{"261":1,"579":1,"838":1}}],["transport",{"2":{"222":1,"620":1,"827":1,"986":1}}],["transferto",{"2":{"154":1,"891":1}}],["true면",{"2":{"1460":1}}],["true",{"2":{"25":1,"34":1,"78":1,"171":2,"197":1,"236":1,"421":1,"618":1,"621":1,"690":2,"693":3,"694":1,"859":1,"863":1,"869":1,"1043":1,"1064":1,"1077":1,"1189":3,"1200":4,"1259":1,"1263":1,"1269":1,"1276":3,"1297":1,"1337":2,"1338":1,"1362":1,"1385":1,"1434":1,"1458":1,"1460":1,"1466":1,"1467":1,"1468":1,"1490":1,"1527":1,"1537":1,"1538":2,"1572":1,"1723":2,"1879":3,"2156":2,"2204":6,"2220":1,"2221":2,"2226":1,"2302":1,"2323":1,"2329":5,"2330":1,"2331":1,"2332":1,"2333":1}}],["terser로",{"2":{"1498":1}}],["text=",{"2":{"1006":1,"1997":1}}],["text>내용",{"2":{"1646":1,"1727":1}}],["text>",{"2":{"197":2,"1428":2,"1600":2,"1609":2,"1646":1,"1727":1}}],["textfields",{"2":{"1212":1,"1316":3}}],["textfieldexpression>",{"2":{"195":2,"197":4}}],["textfield>",{"2":{"195":2,"197":4}}],["textelement>",{"2":{"195":2,"197":6}}],["text",{"2":{"101":1,"601":1,"1016":2,"1034":2,"1035":3,"1059":1,"1060":1,"1303":1,"1537":3,"1989":2,"2141":1,"2146":1,"2156":1,"2204":1,"2258":2,"2329":1}}],["template>",{"2":{"1006":2,"1007":2,"1011":2,"1015":2,"1016":2,"1020":2,"1027":2,"1035":2,"1036":2,"1040":2,"1063":2,"1072":2,"1097":2,"1112":2,"1119":2,"1126":2,"1140":2,"1250":2,"1399":2,"1428":2,"1463":2,"1464":2,"1537":2,"1558":1,"1570":2,"1583":2,"1588":2,"1591":2,"1592":2,"1593":2,"1594":4,"1600":2,"1609":2,"1646":2,"1648":2,"1649":2,"1717":2,"1722":2,"1723":2,"1727":2,"1837":4,"1844":2,"1845":2,"1860":2,"1882":2,"1883":2,"1885":2,"1887":2,"1945":2,"1949":2,"1969":2,"1973":2,"1974":2,"1981":2,"1983":2,"1989":2,"1990":2,"1997":2,"1999":2,"2003":2,"2005":2,"2006":2,"2009":2,"2014":2,"2062":2,"2078":2,"2120":2,"2225":2}}],["templates",{"2":{"883":1}}],["templatepath",{"2":{"883":2}}],["templateengine",{"2":{"696":3}}],["template",{"2":{"92":1,"99":1,"182":1,"183":1,"229":1,"296":2,"297":2,"619":5,"696":1,"711":1,"721":1,"722":1,"888":1,"1594":2,"1611":1,"1639":1}}],["temperature",{"2":{"9":3}}],["testpages",{"2":{"1879":2}}],["testmethod",{"2":{"992":1}}],["testendpoint",{"2":{"989":1}}],["test=",{"2":{"325":2}}],["test",{"0":{"552":1,"562":1},"2":{"80":2,"275":1,"437":1,"478":1,"549":1,"552":1,"557":1,"989":1,"992":1,"1280":1,"1518":1,"1543":1,"1879":1,"2146":1,"2147":1,"2151":3,"2152":1,"2155":1,"2158":1}}],["tel",{"2":{"65":2,"66":2,"67":2,"731":1,"742":2,"1949":1}}],["txt에",{"2":{"48":1,"50":1,"654":1}}],["txt",{"0":{"765":1},"2":{"45":12,"551":1,"661":1,"663":1,"747":1,"765":1}}],["tip",{"2":{"1753":4}}],["tiberodatasource",{"2":{"618":2}}],["tiberodatasourceconfiguration",{"2":{"260":1,"618":1,"838":1}}],["tibero를",{"2":{"485":1}}],["tibero6",{"0":{"462":1,"834":1},"2":{"427":1,"462":2,"480":1,"485":1,"551":1,"618":1,"759":2,"834":1}}],["tibero",{"0":{"254":1,"322":1,"335":1,"482":1,"485":1,"840":1},"1":{"255":1,"256":1},"2":{"253":2,"255":3,"260":2,"263":1,"276":2,"306":1,"330":1,"444":1,"445":2,"472":1,"482":4,"514":1,"519":1,"551":2,"618":1,"630":2,"633":1,"752":1,"754":2,"759":2,"774":2,"834":4,"838":2,"843":1,"847":1}}],["title=",{"2":{"1126":1,"1140":1}}],["title>제목",{"2":{"1646":1,"1727":1}}],["title>페이지",{"2":{"1600":1}}],["title>",{"2":{"197":2,"1428":2,"1600":1,"1609":2,"1646":1,"1727":1}}],["title",{"2":{"45":6,"50":1,"92":1,"96":1,"98":1,"106":2,"179":1,"182":1,"186":2,"197":1,"199":1,"661":1,"663":1,"708":1,"714":1,"721":1,"888":1,"942":2,"1126":1,"1127":1,"1140":1,"1151":1,"1157":1,"1362":1,"1426":1,"1428":1,"1572":1,"1637":1,"1728":1,"1882":1,"1885":4,"1915":1,"2078":2}}],["timestamp",{"2":{"1299":2,"1317":1,"1330":2,"1418":1}}],["timeout=",{"2":{"1537":1}}],["timeout",{"2":{"1269":1,"1270":1,"1286":1,"1296":1,"1333":1,"1529":1}}],["time",{"2":{"33":4}}],["todate",{"0":{"2210":1,"2243":1},"2":{"2210":1}}],["today",{"2":{"2209":3,"2224":1,"2242":3}}],["tomorrow",{"2":{"2209":1}}],["tomcat의",{"2":{"503":1}}],["tomcat에",{"2":{"343":1,"503":1}}],["tomcat",{"0":{"344":1,"468":1},"2":{"236":1,"344":1,"468":1,"904":1}}],["tohaveurl",{"2":{"2151":1}}],["tobe",{"2":{"2156":5,"2157":1}}],["tobetruthy",{"2":{"2146":1}}],["tobytearray",{"2":{"199":1}}],["tocontain",{"2":{"2146":1}}],["toggleunfoldable",{"0":{"1461":1},"2":{"1461":1,"1463":1,"1917":2}}],["togglevisible",{"0":{"1460":1},"2":{"1460":3,"1463":1,"1464":1,"1468":1,"1917":2}}],["togglelog",{"2":{"1419":1}}],["togglelogyn",{"0":{"1415":1},"2":{"1419":1,"1918":2}}],["too",{"0":{"1287":1,"1295":1,"1331":1},"2":{"975":1,"2162":1}}],["totalcount",{"2":{"250":1}}],["top",{"2":{"1033":1}}],["topmargin=",{"2":{"197":1}}],["topath",{"2":{"156":1,"894":1}}],["tostring",{"2":{"156":1,"228":2,"601":1,"732":1,"894":1,"913":1}}],["token123",{"2":{"2157":2}}],["tokenyn",{"2":{"1418":1}}],["token도",{"2":{"1262":1}}],["token으로",{"0":{"1259":1},"2":{"2168":1}}],["token과",{"2":{"1224":1}}],["tokendeleted",{"2":{"78":3}}],["tokenlist",{"2":{"56":2}}],["token은",{"2":{"25":1,"230":2,"357":1,"1229":1,"2168":1}}],["token이",{"2":{"23":1,"25":1,"1231":1,"1255":1}}],["token을",{"2":{"17":3,"23":1,"1224":1,"1231":1,"1255":2}}],["token",{"0":{"17":1,"19":1,"20":1,"133":1,"134":1,"576":2,"810":1,"811":1,"930":1,"961":1,"964":1,"965":1,"1226":1,"1227":1,"1233":1,"1234":1,"1382":1,"2166":1},"1":{"931":1,"932":1,"933":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1},"2":{"15":1,"17":3,"20":1,"24":3,"56":2,"57":1,"59":2,"60":1,"76":3,"83":2,"84":2,"219":5,"220":1,"300":1,"309":1,"311":1,"439":1,"554":1,"594":1,"630":1,"635":6,"672":6,"803":2,"808":1,"811":1,"812":2,"813":2,"933":1,"965":1,"966":2,"967":2,"974":2,"1224":1,"1226":1,"1227":1,"1229":1,"1230":3,"1233":1,"1236":2,"1248":1,"1259":1,"1273":3,"1312":3,"1382":1,"1633":1,"1634":1,"1764":2,"1797":1,"1911":5,"1920":1,"2157":1}}],["to",{"2":{"0":1,"172":1,"692":2,"693":2,"694":2,"696":2,"1358":3,"1360":2,"1361":2,"1782":1,"2149":1,"2184":1,"2224":2}}],["thousandssep",{"0":{"2212":1,"2274":1},"2":{"2212":1}}],["th>",{"2":{"1973":1}}],["th",{"2":{"1973":1}}],["throw",{"2":{"1276":1,"1304":1,"1337":1,"1534":1,"1567":1}}],["throws",{"2":{"199":1,"601":1,"609":1,"989":1}}],["thymeleaf",{"0":{"696":1}}],["thin",{"2":{"255":1,"257":1,"482":1,"483":1,"834":1,"835":1}}],["this",{"2":{"0":1,"400":1,"540":1,"1629":1,"1751":1,"1753":10,"1883":1,"1921":1,"2087":1}}],["themes",{"2":{"1898":2}}],["theme",{"0":{"2":1,"1901":1},"2":{"0":4,"2":1,"1063":1,"1609":1,"1723":1,"1891":1,"1898":2,"1974":1,"1990":1,"2120":1}}],["the",{"2":{"0":3,"5":2,"1751":1,"1754":2}}],["b1",{"2":{"2258":1}}],["b",{"2":{"2192":2,"2195":1,"2196":3,"2216":2}}],["bd",{"2":{"1989":1}}],["block",{"2":{"1580":1,"1753":2}}],["blob을",{"2":{"46":1}}],["blob",{"0":{"1546":1},"2":{"46":2,"99":2,"119":2,"1281":2,"1316":1,"1342":2,"1519":2,"1546":2,"1547":4,"1548":3,"2218":2,"2262":3,"2268":1,"2269":2}}],["blank",{"0":{"1079":1,"1372":1,"2028":1},"1":{"1080":1,"1081":1,"1082":1,"1083":1},"2":{"1081":1,"1083":1,"1366":1,"1769":1,"1994":1}}],["btn>",{"2":{"1007":1,"1609":1,"1717":1}}],["btn",{"2":{"1007":2,"1609":1,"1643":1,"1717":1,"1879":2,"1882":1,"1883":1,"2141":1}}],["built",{"2":{"1751":1}}],["builder",{"2":{"601":1,"870":2,"913":1,"914":1,"933":1}}],["build",{"2":{"156":1,"459":2,"601":1,"618":1,"620":1,"822":1,"870":2,"894":1,"970":1,"1171":1,"1172":1,"1173":2,"1482":1,"1503":2,"1509":1,"1738":1,"1739":1,"1740":2,"1743":1,"1891":1,"2063":1,"2174":1}}],["business",{"2":{"1664":1,"1681":1,"1814":1}}],["buffer",{"2":{"1548":2,"2262":2}}],["bufferedreader",{"2":{"732":2}}],["button>",{"2":{"1463":2,"2078":1}}],["buttonstore",{"0":{"1430":1},"1":{"1431":1,"1432":1,"1433":1,"1434":1,"1435":1},"2":{"1432":1,"1434":4,"1762":1}}],["button",{"2":{"1005":1,"1059":2,"1060":1,"1463":2,"1994":1,"2078":1,"2146":1,"2151":1}}],["buttonbox",{"0":{"1004":1,"1997":1},"1":{"1005":1,"1006":1},"2":{"1005":1,"1006":1,"1766":1,"1994":1,"1997":1}}],["birthdate",{"2":{"2226":1,"2333":2}}],["bind=",{"2":{"1973":1,"2005":1}}],["billapprovelist",{"0":{"1951":1},"2":{"1942":1}}],["bi",{"0":{"1811":1,"1980":1},"1":{"1812":1,"1813":1,"1814":1,"1981":1,"1982":1,"1983":1,"1984":1},"2":{"1664":1,"1681":2,"1779":1,"1812":1,"1813":1,"1817":1,"1977":1,"1978":1,"1986":1}}],["bit",{"2":{"459":1}}],["bizcompid",{"2":{"2005":1}}],["bizcompredistemplate",{"2":{"294":2,"580":1,"851":1}}],["bizcompredisconnectionfactory",{"2":{"291":2,"294":1,"580":1}}],["bizcomp",{"2":{"288":1,"291":3,"294":1,"490":1,"619":1,"850":1,"2005":1}}],["bizcomponentid를",{"2":{"32":1}}],["bizcomponentid",{"2":{"32":1}}],["bpjgjnqgcfjq3wr9tyadkfwp7822f2ekcfxkhwtlpp3vmisxut0fmt",{"2":{"211":1,"238":1,"790":1,"978":1}}],["balham",{"2":{"1063":1,"1609":1,"1723":1,"1974":1,"1990":1,"2120":1}}],["banana",{"2":{"2192":2,"2195":1,"2216":2}}],["banner",{"0":{"765":1},"2":{"551":1,"747":1,"765":2}}],["band>",{"2":{"197":2}}],["band",{"2":{"197":2}}],["baos",{"2":{"199":3}}],["bad",{"2":{"138":1}}],["bashrm",{"2":{"2172":1}}],["bashgit",{"2":{"1731":1}}],["bashnode",{"2":{"1732":1,"2174":1}}],["bashnvm",{"2":{"1709":1,"1732":1}}],["bashnpm",{"2":{"1171":1,"1172":1,"1173":1,"1482":1,"1489":1,"1503":1,"1509":1,"1617":1,"1708":1,"1714":1,"1733":1,"1736":1,"1738":1,"1739":1,"1740":2,"1741":1,"1743":1,"2063":1,"2152":1,"2158":1}}],["bashmvn",{"2":{"282":1,"283":1,"284":1,"340":1,"341":1}}],["bash",{"2":{"273":1,"459":1,"460":1,"477":1,"488":1,"489":1,"496":1,"502":1,"503":1,"750":1,"1599":1,"1712":1,"2177":1,"2178":1}}],["basic",{"2":{"69":1,"204":1,"740":1}}],["baseurl",{"2":{"1163":1}}],["basepackages",{"2":{"329":1,"370":1,"371":1,"407":1,"408":1,"451":2,"910":1}}],["basedir",{"2":{"280":1,"759":1}}],["base",{"2":{"7":1,"15":1,"28":1,"41":1,"54":1,"63":1,"74":1,"90":1,"117":1,"1180":2,"1181":1,"1183":2,"1184":2,"1189":2,"1200":2,"1202":2,"1707":2,"1713":2,"1734":2,"1845":1}}],["bmklist",{"2":{"1404":1}}],["bmk",{"2":{"120":2,"121":2,"347":1,"421":1,"859":1}}],["browser",{"2":{"34":2}}],["box",{"2":{"1753":2}}],["bold",{"2":{"1637":1,"1728":1}}],["bottom",{"2":{"1033":2}}],["bottommargin=",{"2":{"197":1}}],["both",{"2":{"0":1}}],["boot에",{"2":{"916":1}}],["boot에서",{"2":{"9":1}}],["boot",{"0":{"269":1,"275":1,"279":1,"777":1,"901":1,"904":1,"905":1},"1":{"902":1,"903":1,"904":1,"905":1,"906":1},"2":{"269":2,"275":6,"276":1,"279":2,"425":1,"433":1,"451":1,"452":1,"502":2,"505":1,"514":2,"515":1,"519":1,"551":1,"615":1,"750":3,"778":1,"902":1,"904":2,"905":2,"908":1,"916":1}}],["bookmarklist",{"2":{"120":2}}],["boolean",{"2":{"78":1,"205":1,"248":1,"249":2,"649":1,"698":1,"729":1,"813":1,"896":1,"958":1,"967":1,"1026":3,"1033":3,"1385":1,"2204":1,"2220":1,"2221":1,"2302":1}}],["body",{"2":{"46":2,"82":1,"99":1,"101":1,"102":1,"103":1,"119":1,"172":1,"182":1,"229":1,"652":1,"664":1,"692":2,"694":2,"721":1,"742":1,"1281":1,"1342":1,"1519":1,"1546":1,"2269":1}}],["bem",{"2":{"1580":1}}],["beforeeach를",{"2":{"2091":1,"2138":1}}],["beforeeach는",{"2":{"1357":1}}],["beforeeach",{"0":{"1357":1},"1":{"1358":1,"1359":1},"2":{"1358":1,"1360":1,"2147":1,"2157":1}}],["beanutils",{"0":{"951":1},"1":{"952":1,"953":1,"954":1},"2":{"952":1,"954":5}}],["bean",{"0":{"261":1},"2":{"290":1,"291":1,"293":1,"294":1,"579":1,"580":1,"618":1,"619":2,"620":1,"622":1,"675":2,"799":1,"822":1,"838":1,"870":2,"924":1,"954":3,"970":1}}],["bearer",{"2":{"85":1,"133":1,"356":1,"672":1,"1226":1}}],["be",{"2":{"0":1}}],["bytes",{"0":{"1217":1,"2233":1},"2":{"946":2,"1212":2,"1217":1,"1316":2,"2233":3}}],["bytearrayoutputstream",{"2":{"199":2}}],["byte",{"2":{"156":2,"199":1,"888":1,"894":2}}],["byte로",{"2":{"97":1,"108":1}}],["by",{"2":{"0":1,"1751":1,"1752":1}}],["pemenu=",{"2":{"1949":1}}],["permanent=",{"2":{"1464":1}}],["permitall",{"2":{"620":1,"822":1,"970":1}}],["permissions",{"2":{"222":1,"620":1,"827":1}}],["persistedstate",{"2":{"1893":2,"2085":1}}],["persistedstate를",{"2":{"1251":1,"2125":1}}],["persist",{"2":{"1390":1,"1629":1,"2087":1}}],["persadm",{"0":{"1944":1},"1":{"1945":1,"1946":1,"1947":1},"2":{"1106":1,"1347":1,"1348":1,"1368":1,"1370":2,"1475":1,"1560":1,"1599":1,"1603":1,"1606":1,"1607":2,"1621":1,"1622":2,"1625":1,"1679":1,"1802":1,"1803":1,"1804":1,"1805":1,"1806":1,"1817":2,"1853":1,"1855":1,"1942":1,"2318":1}}],["perform",{"2":{"989":1}}],["per",{"2":{"804":1,"975":1}}],["pid>",{"2":{"2177":1}}],["pid",{"2":{"2177":1}}],["pimypersonnelinformation",{"0":{"1802":1,"1946":1},"2":{"1802":1,"1942":1}}],["piniapluginpersistedstate",{"2":{"1893":2}}],["pinia를",{"2":{"1653":1,"1762":1,"1908":1,"2122":1}}],["pinia",{"0":{"1724":1,"1762":1,"1893":2,"1907":1,"2044":1,"2049":1,"2084":1,"2121":1},"1":{"1908":1,"1909":1,"1910":1,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1919":1,"1920":1,"1921":1,"1922":1,"1923":1,"2085":1,"2086":1,"2087":1,"2122":1,"2123":1,"2124":1,"2125":1},"2":{"1205":1,"1251":1,"1377":1,"1393":1,"1402":1,"1411":1,"1422":1,"1447":1,"1456":1,"1469":1,"1471":1,"1629":1,"1653":1,"1656":1,"1675":1,"1676":2,"1756":2,"1760":2,"1775":1,"1777":1,"1817":3,"1821":1,"1822":1,"1858":1,"1865":2,"1891":2,"1893":7,"1904":3,"1906":1,"1922":1,"1923":1,"2044":1,"2049":1,"2085":2,"2087":1,"2116":1,"2125":1,"2147":1,"2157":1,"2185":1}}],["p>가격",{"2":{"2225":1}}],["p>암호화",{"2":{"1250":1}}],["p>사용자",{"2":{"1250":1}}],["p>",{"2":{"1027":2,"1250":2,"2225":1}}],["playwright",{"2":{"2150":1,"2151":1}}],["placeholder=",{"2":{"1999":1}}],["plaintext",{"2":{"595":1,"786":1,"789":1,"977":1,"978":1}}],["pluginsutil",{"2":{"1817":1,"1861":1,"1904":2,"1905":2}}],["plugins",{"0":{"1676":1,"1822":1},"2":{"280":1,"1365":1,"1602":1,"1624":1,"1718":1,"1817":1,"1858":1,"1865":1,"1890":1,"1891":1,"1904":3,"1905":3,"2090":1,"2136":1}}],["plugin>",{"2":{"279":2,"280":2}}],["plugin",{"0":{"279":1,"280":1},"2":{"279":1,"280":1,"1251":1,"1893":2,"2083":3,"2085":1,"2125":1}}],["plocal",{"2":{"273":1,"502":1,"750":1}}],["pprod",{"2":{"273":1,"283":1,"341":1,"750":1}}],["pdate",{"0":{"2241":1,"2247":1}}],["pdev로",{"2":{"515":1}}],["pdev",{"2":{"273":1,"282":1,"340":1,"502":1,"750":1}}],["pdfjs",{"2":{"2112":1,"2130":1}}],["pdfbytes",{"2":{"888":1}}],["pdf로",{"2":{"180":1,"199":1,"710":1}}],["pdf를",{"2":{"99":1}}],["pdfview로",{"2":{"114":1,"200":1,"723":1}}],["pdfviewec",{"2":{"100":1,"704":1}}],["pdfview와",{"2":{"99":1,"100":2,"101":1,"102":1}}],["pdfviewtest",{"2":{"99":2,"704":1}}],["pdfview",{"2":{"92":1,"98":1,"182":1,"229":1,"704":3,"721":1}}],["pdf",{"0":{"92":1,"99":1,"100":1,"103":1,"182":1,"710":1,"721":1,"2112":1,"2130":1},"1":{"93":1,"94":1,"95":1,"96":1,"97":1,"98":1},"2":{"89":1,"92":1,"98":5,"99":5,"100":1,"103":6,"174":1,"175":1,"429":1,"517":1,"643":2,"694":1,"701":1,"704":5,"721":1,"886":1,"888":1,"1777":1,"2112":3,"2130":2,"2218":3}}],["phonenum",{"0":{"2322":1}}],["phonenumber",{"2":{"1015":1,"1999":1,"2333":2}}],["phone",{"2":{"249":1}}],["phonemsgsend",{"2":{"205":1,"729":2}}],["poorganizationchart",{"0":{"1805":1,"1947":1},"2":{"1805":1,"1942":1}}],["powered",{"2":{"1752":1}}],["powerpoint",{"2":{"878":1}}],["pow",{"2":{"1534":1}}],["popupsmstemplatelist",{"0":{"1153":1,"2026":1},"1":{"1154":1,"1155":1,"1156":1,"1157":1},"2":{"1155":1,"1768":1,"1994":1}}],["popuppagelog",{"0":{"1144":1,"1147":1,"2025":1},"1":{"1145":1,"1148":1,"1149":1,"1150":1,"1151":1},"2":{"1145":1,"1149":1,"1768":1,"1994":1}}],["popuplog",{"0":{"1142":1,"2024":1},"1":{"1143":1},"2":{"1143":1,"1768":1,"1994":1}}],["popupfilelink",{"0":{"1136":1,"2023":1},"1":{"1137":1,"1138":1,"1139":1,"1140":1},"2":{"1138":1,"1140":1,"1768":1,"1994":1}}],["popupapprovalbox",{"0":{"1131":1},"1":{"1132":1},"2":{"1132":1,"1994":1}}],["popupapproval",{"0":{"1129":1,"2021":1},"1":{"1130":1},"2":{"1130":1,"1768":1,"1915":1,"1994":1}}],["popupapprovelist",{"0":{"1123":1,"1133":1,"2022":1},"1":{"1124":1,"1125":1,"1126":1,"1127":1,"1134":1},"2":{"1125":1,"1126":1,"1134":1,"1768":1,"1994":1}}],["popupname",{"2":{"1106":2}}],["popup",{"0":{"1374":1,"2020":1},"1":{"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1},"2":{"1105":2,"1106":1,"1125":1,"1130":1,"1132":1,"1134":1,"1138":1,"1143":1,"1145":1,"1149":1,"1155":1,"1366":2,"1582":1,"1682":1,"1756":1,"1817":1,"1895":1,"1942":1,"1994":1}}],["popupcomponent",{"2":{"1104":2}}],["popparam",{"2":{"1104":1,"1106":3}}],["popname",{"2":{"1104":2}}],["popblank",{"0":{"1100":1,"2030":1},"1":{"1101":1,"1102":1,"1103":1,"1104":1,"1105":1,"1106":1},"2":{"1102":1,"1105":1,"1366":1,"1769":1,"1994":1}}],["poi",{"0":{"782":1,"876":1},"1":{"877":1,"878":1,"879":1},"2":{"277":2,"429":1,"517":1,"519":1,"877":2,"881":1}}],["pom",{"0":{"267":1,"452":1},"1":{"268":1,"269":1,"270":1},"2":{"437":1,"478":1,"549":1}}],["policydirectives",{"2":{"825":1}}],["policy",{"0":{"226":1,"680":1,"761":1,"825":1},"2":{"222":3,"226":1,"551":1,"620":3,"680":1,"747":1,"761":1,"827":2,"936":1,"984":1,"986":2,"2160":1}}],["port",{"2":{"171":1,"236":1,"288":2,"490":2,"509":1,"690":1,"850":2,"995":1,"1200":1}}],["position",{"2":{"643":3}}],["posi",{"2":{"65":1,"66":1}}],["postinstall",{"2":{"1733":1}}],["postman",{"2":{"469":1}}],["postmapping",{"2":{"154":1,"156":1,"400":1,"421":1,"540":1,"600":1,"610":1,"648":1,"704":1,"728":1,"859":1,"891":1,"894":1}}],["postgresql",{"0":{"258":1,"323":1,"337":1,"464":1,"484":1,"836":1,"841":1},"2":{"258":2,"263":1,"276":2,"306":1,"330":1,"427":1,"445":2,"464":2,"472":1,"480":1,"484":2,"514":1,"519":1,"551":1,"618":1,"630":1,"633":1,"754":2,"774":2,"836":3,"843":1,"847":1}}],["postgres",{"2":{"253":1,"258":1,"444":1,"484":2,"630":1,"752":1,"836":2}}],["post",{"0":{"607":1},"2":{"7":1,"9":1,"15":1,"17":1,"24":1,"28":1,"30":1,"31":1,"41":1,"45":1,"46":1,"54":1,"56":1,"57":1,"63":1,"67":1,"74":1,"76":1,"78":1,"82":1,"86":1,"90":1,"98":1,"99":1,"117":1,"119":1,"120":1,"121":1,"139":1,"150":1,"236":1,"348":2,"393":1,"400":1,"540":1,"621":1,"648":2,"663":1,"704":5,"728":1,"732":1,"815":1,"989":1,"1029":1,"1229":1,"1248":1,"1259":1,"1263":1,"1276":1,"1278":2,"1279":1,"1280":1,"1281":1,"1300":1,"1303":1,"1304":1,"1337":1,"1341":1,"1342":1,"1387":1,"1515":2,"1516":1,"1517":1,"1518":1,"1519":1,"1523":1,"1525":1,"1526":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1543":1,"1546":1,"1547":1,"1551":1,"1552":1,"1556":1,"1567":1,"1609":1,"1614":1,"1720":1,"1789":1,"1957":1,"1969":1,"1981":1,"2069":1,"2269":1}}],["push",{"2":{"1249":1,"1316":1,"1352":1,"1358":1,"1388":1,"1389":1}}],["publicapi",{"2":{"870":1}}],["public",{"0":{"1685":1,"1832":1},"1":{"1833":1,"1834":1,"1835":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1843":1,"1844":1,"1845":1,"1846":1,"1847":1,"1848":1,"1849":1},"2":{"154":1,"156":1,"162":1,"199":2,"228":3,"290":1,"291":1,"293":1,"294":1,"317":1,"320":1,"332":1,"333":1,"358":2,"370":1,"400":3,"412":1,"413":1,"417":2,"421":2,"451":1,"540":3,"543":2,"545":1,"546":1,"600":2,"601":2,"609":2,"610":2,"618":2,"619":3,"620":2,"621":2,"622":2,"632":2,"648":2,"649":2,"670":1,"671":1,"675":3,"692":2,"693":2,"696":2,"704":2,"728":2,"729":2,"753":1,"799":1,"822":1,"859":2,"870":4,"891":1,"894":1,"914":1,"924":1,"970":1,"1642":1,"1667":1,"1816":1,"1833":1,"1834":1,"1838":1,"1840":1,"1841":1,"1842":1,"1844":1,"1846":2,"1847":2,"1848":2}}],["put",{"2":{"149":1,"172":3,"178":2,"179":3,"199":4,"228":2,"305":2,"390":2,"417":2,"418":2,"570":1,"593":2,"609":2,"621":1,"633":3,"707":2,"708":3,"732":3,"846":2,"883":1,"888":2,"950":1}}],["png로",{"2":{"1847":1}}],["png",{"0":{"1837":1},"2":{"92":1,"97":1,"109":1,"119":1,"122":1,"189":1,"1162":1,"1667":1,"1834":1,"1837":2,"1844":1,"1845":1,"1847":2}}],["pcbillreqhipassapprovalcancel",{"2":{"1942":1}}],["pcbillreqhipassapproval",{"2":{"1853":1,"1942":1}}],["pcbillreqhipass2",{"2":{"1853":1,"1855":1,"1942":1}}],["pcbillreqhipass",{"0":{"1804":1},"2":{"1804":1,"1942":2}}],["pc001",{"2":{"45":1}}],["pc",{"2":{"44":2,"45":1,"651":1,"1957":1}}],["p",{"0":{"96":1,"2323":1,"2332":1},"2":{"30":9,"31":6,"32":2,"33":1,"37":1,"46":1,"67":3,"76":7,"77":9,"80":1,"82":2,"87":1,"92":3,"96":3,"98":6,"106":5,"120":9,"121":18,"178":1,"179":2,"182":2,"183":1,"186":5,"197":1,"199":2,"229":1,"390":1,"633":2,"649":1,"651":1,"652":1,"707":1,"708":2,"714":3,"721":3,"722":1,"731":1,"1517":2,"1552":2,"1946":5,"1949":7,"1957":6,"1969":10,"1981":12,"2003":1,"2025":6,"2267":8}}],["paattendancerequest",{"0":{"1803":1,"1945":1},"2":{"1803":1,"1942":1,"1945":1}}],["padding",{"2":{"1600":1,"1609":1,"1637":1,"1728":1}}],["pack",{"2":{"466":1}}],["package",{"0":{"1687":1,"2038":1},"2":{"283":1,"341":1,"503":1,"1667":1,"1733":1,"1748":1,"1816":1,"1891":1,"2172":1,"2178":1}}],["packaging>",{"2":{"268":1}}],["packaging>war",{"2":{"268":1}}],["pascalcase",{"2":{"449":1,"1571":1,"1576":1,"1579":1,"1612":1,"1691":1,"1826":1}}],["password123",{"2":{"76":2,"77":1}}],["password",{"2":{"76":3,"77":2,"82":1,"171":2,"255":2,"257":2,"258":2,"288":2,"482":2,"483":2,"484":2,"490":2,"618":2,"690":2,"834":2,"835":2,"836":2,"850":2,"1229":2,"1248":2,"1387":2,"2151":2,"2231":2,"2232":2}}],["payroll",{"2":{"367":1,"368":2,"371":1,"374":1}}],["paginationmeta",{"2":{"1817":1}}],["paging",{"2":{"250":2}}],["pageid",{"2":{"2294":3}}],["pageinfo",{"2":{"250":1}}],["pagedata",{"0":{"2292":1},"2":{"2287":1,"2288":2,"2292":2,"2294":1}}],["pages",{"2":{"1817":1,"1879":1,"1926":1}}],["pagesize",{"2":{"250":1}}],["pagelog",{"2":{"1151":1}}],["pageheight=",{"2":{"197":1}}],["pagewidth=",{"2":{"197":1}}],["page2",{"2":{"120":1}}],["page1",{"2":{"120":1,"121":1}}],["page",{"0":{"3":1,"4":1},"2":{"0":7,"3":1,"34":1,"1600":2,"1609":2,"1751":1,"2151":6}}],["parse",{"2":{"942":1}}],["parsetoken",{"2":{"219":2,"635":1,"813":1,"967":1}}],["parentmenuid",{"2":{"1606":1,"1621":1}}],["parent>",{"2":{"269":2}}],["parent",{"0":{"269":1},"2":{"269":1}}],["paramobj",{"2":{"601":2,"1957":2,"1969":2,"1981":2}}],["parameters",{"2":{"179":4,"180":1,"708":4,"709":1,"888":4}}],["parameter",{"0":{"863":1},"2":{"102":1,"197":2,"421":1,"643":1,"859":1,"863":1}}],["param",{"2":{"33":2,"156":2,"162":1,"317":4,"320":1,"332":1,"333":1,"412":1,"417":2,"543":1,"545":1,"600":2,"601":3,"609":3,"648":1,"649":3,"753":1,"894":2,"1104":1,"1215":1,"1216":1,"1280":1,"1418":1,"1517":2,"1518":1,"1543":1,"1552":2,"1946":1,"1949":2,"1957":2,"1969":2,"1981":2,"2025":1,"2231":2,"2232":2}}],["param3",{"2":{"33":2}}],["param2",{"2":{"30":1,"31":1,"33":2,"139":1,"322":1,"325":2,"335":1,"336":1,"349":1,"1515":1,"1517":1,"1551":1,"1552":1}}],["param1",{"2":{"30":1,"31":1,"32":1,"33":2,"80":1,"92":1,"139":1,"322":1,"323":1,"325":2,"335":1,"336":1,"337":1,"349":1,"1515":1,"1517":1,"1551":1,"1552":1}}],["paramsmap",{"2":{"305":1,"418":1,"593":1,"846":1}}],["params",{"0":{"66":1},"2":{"30":3,"31":5,"32":2,"33":3,"34":2,"65":1,"67":1,"76":3,"77":2,"80":1,"82":1,"92":1,"94":1,"98":1,"178":2,"182":1,"183":1,"199":3,"229":1,"305":1,"390":2,"417":1,"418":1,"593":1,"601":1,"607":1,"609":4,"633":4,"707":2,"721":1,"722":1,"731":1,"742":1,"743":1,"846":1,"1279":1,"1281":1,"1300":1,"1303":1,"1304":1,"1341":1,"1342":1,"1516":1,"1517":1,"1519":1,"1523":1,"1525":1,"1526":1,"1528":1,"1529":1,"1530":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1546":1,"1547":1,"1552":1,"1556":1,"1567":1,"1614":1,"1789":1,"1946":1,"1949":2,"1957":1,"1969":1,"1974":2,"1981":1,"2025":1,"2069":1,"2269":1}}],["pattern",{"2":{"56":1}}],["paths",{"2":{"1163":1,"1251":1,"1629":1,"2087":1}}],["pathstomatch",{"2":{"870":2}}],["pathdb",{"2":{"658":1}}],["pathmatchingresourcepatternresolver",{"2":{"264":1}}],["pathvariable",{"2":{"103":1}}],["path",{"2":{"51":1,"92":2,"97":2,"108":3,"119":1,"122":1,"188":2,"236":1,"243":3,"494":3,"649":2,"651":1,"658":2,"869":2,"1083":2,"1091":1,"1105":1,"1106":1,"1348":1,"1350":1,"1352":1,"1361":2,"1362":1,"1366":5,"1368":1,"1603":1,"1625":1,"1718":1,"1895":3}}],["pragma",{"2":{"620":1}}],["price",{"2":{"1884":1,"2225":2}}],["print",{"2":{"1435":1}}],["primary",{"2":{"290":1,"618":1,"1007":1,"1609":1,"1997":1}}],["privatevar",{"2":{"1577":1}}],["private",{"2":{"149":1,"158":1,"172":1,"178":1,"199":1,"205":1,"210":1,"211":2,"213":1,"214":1,"219":1,"228":1,"238":1,"248":1,"249":1,"250":1,"299":1,"305":1,"308":1,"313":1,"390":1,"400":2,"417":2,"540":2,"543":2,"570":1,"593":1,"594":1,"595":1,"600":1,"601":1,"609":1,"610":1,"621":2,"633":1,"636":1,"641":1,"648":1,"649":1,"692":1,"693":1,"696":1,"698":1,"704":1,"728":1,"729":2,"786":1,"789":1,"790":1,"792":1,"793":1,"812":1,"818":1,"883":1,"888":1,"896":1,"914":2,"950":1,"966":1,"977":1,"978":2,"980":1,"981":1,"983":1,"989":1,"992":1}}],["preview",{"2":{"1741":1}}],["prettierrc",{"2":{"1745":1}}],["prettier를",{"2":{"1745":1}}],["prettier",{"0":{"1745":1},"2":{"1699":1}}],["predicate",{"2":{"958":1}}],["precedence",{"2":{"622":1,"670":1,"675":2,"799":1}}],["prefix",{"2":{"260":1,"618":1,"838":1}}],["pre>",{"2":{"0":6}}],["provides",{"2":{"1752":1}}],["provided",{"2":{"0":1,"1751":1}}],["project",{"2":{"1667":1,"1712":1,"1731":1,"1816":1}}],["promise",{"2":{"1212":1,"1261":1,"1273":1,"1276":2,"1296":1,"1297":1,"1298":1,"1304":1,"1316":1,"1319":1,"1331":1,"1333":1,"1334":1,"1336":1,"1337":1,"1338":1,"1534":1}}],["prompt",{"2":{"9":3,"149":1,"570":1,"601":1,"607":1,"609":1,"950":1}}],["proxy",{"2":{"1189":1,"1200":1}}],["prop2=",{"2":{"1592":1}}],["prop1=",{"2":{"1592":1}}],["props",{"0":{"1026":1,"1033":1,"1060":1,"1127":1,"1572":1,"1592":1},"2":{"1572":1,"1579":1,"1583":3,"1613":3}}],["property",{"2":{"2185":1}}],["propertyname",{"2":{"954":2}}],["property=",{"2":{"322":2}}],["properties>",{"2":{"270":2,"272":6}}],["properties",{"2":{"171":1,"551":1,"690":1}}],["programming",{"2":{"905":1}}],["protected",{"2":{"672":1}}],["profile>",{"2":{"272":6}}],["profiles>",{"2":{"272":2}}],["profiles",{"2":{"234":2,"272":6,"453":2,"749":2}}],["production",{"0":{"1184":1},"2":{"1179":1,"1507":1,"1735":1}}],["produces",{"2":{"869":1}}],["prod",{"2":{"233":1,"443":1,"452":1,"473":1,"551":1,"626":1,"627":1,"750":1,"773":1,"1173":1,"1482":1,"1503":1,"1740":1}}],["process",{"2":{"162":1,"400":1,"417":1,"540":1,"543":1,"696":1,"1176":1}}],["procedure=",{"2":{"2003":1}}],["procedure",{"2":{"30":4,"31":7,"32":3,"33":5,"76":1,"80":2,"87":1,"92":1,"94":1,"98":1,"178":1,"182":1,"183":1,"199":1,"229":1,"305":2,"322":1,"323":1,"335":1,"336":1,"337":1,"390":2,"417":2,"418":2,"593":2,"633":1,"707":1,"721":1,"722":1,"846":2,"1418":2,"1517":3,"1552":3,"1946":1,"1949":2,"1957":2,"1969":1,"1981":1,"2025":1}}],["pro",{"2":{"9":3}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/VPLocalSearchBox.B9umghyX.js b/assets/chunks/VPLocalSearchBox.B9umghyX.js new file mode 100644 index 0000000..6f421f2 --- /dev/null +++ b/assets/chunks/VPLocalSearchBox.B9umghyX.js @@ -0,0 +1,8 @@ +var Ft=Object.defineProperty;var Ot=(a,e,t)=>e in a?Ft(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ae=(a,e,t)=>Ot(a,typeof e!="symbol"?e+"":e,t);import{V as Rt,D as le,h as ge,aO as tt,aP as Ct,aQ as At,aR as Mt,q as je,aS as Lt,d as Dt,aT as st,p as he,aU as Pt,aV as zt,s as Vt,aW as $t,v as Me,P as fe,O as Se,aX as jt,aY as Bt,W as Wt,R as Kt,$ as Jt,b as Ut,o as H,j as x,a0 as qt,aj as Gt,k as L,ar as Ht,ag as Qt,c as Z,e as Ee,n as nt,B as it,F as rt,a as pe,t as ve,ao as Yt,an as at,aZ as Zt,aw as Xt,aB as es,a_ as ts,_ as ss}from"./framework.DytOxJW6.js";import{u as ns,c as is}from"./theme.2RYyxkAj.js";const rs={root:()=>Rt(()=>import("./@localSearchIndexroot.CQLjUtjU.js"),[])};/*! +* tabbable 6.3.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var mt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=mt.join(","),gt=typeof Element>"u",re=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Fe=!gt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},ye=function(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&ye(e.parentNode);return i},as=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},bt=function(e,t,s){if(ye(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&re.call(e,Ne)&&n.unshift(e),n=n.filter(s),n},Oe=function(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!ye(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=Oe(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=re.call(i,Ne);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var m=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),f=!ye(m,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(m&&f){var g=Oe(m===!0?i.children:m.children,!0,s);s.flatten?n.push.apply(n,g):n.push({scopeParent:i,candidates:g})}else r.unshift.apply(r,i.children)}}return n},yt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ie=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||as(e))&&!yt(e)?0:e.tabIndex},os=function(e,t){var s=ie(e);return s<0&&t&&!yt(e)?0:s},ls=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},wt=function(e){return e.tagName==="INPUT"},cs=function(e){return wt(e)&&e.type==="hidden"},us=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},ds=function(e,t){for(var s=0;ssummary:first-of-type"),o=i?e.parentElement:e;if(re.call(o,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="full-native"||s==="legacy-full"){if(typeof n=="function"){for(var l=e;e;){var c=e.parentElement,h=Fe(e);if(c&&!c.shadowRoot&&n(c)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!c&&h!==e.ownerDocument?e=h.host:e=c}e=l}if(vs(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return ot(e);return!1},gs=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},xt=function(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=os(o,i),c=i?xt(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(ls).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},ys=function(e,t){t=t||{};var s;return t.getShadowRoot?s=Oe([e],t.includeContainer,{filter:Be.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:bs}):s=bt(e,t.includeContainer,Be.bind(null,t)),xt(s)},ws=function(e,t){t=t||{};var s;return t.getShadowRoot?s=Oe([e],t.includeContainer,{filter:Re.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=bt(e,t.includeContainer,Re.bind(null,t)),s},ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,Ne)===!1?!1:Be(t,e)},xs=mt.concat("iframe").join(","),Le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,xs)===!1?!1:Re(t,e)};/*! +* focus-trap 7.6.6 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function We(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,s=Array(e);t0){var s=e[e.length-1];s!==t&&s._setPausedState(!0)}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var s=e.indexOf(t);s!==-1&&e.splice(s,1),e.length>0&&!e[e.length-1]._isManuallyPaused()&&e[e.length-1]._setPausedState(!1)}},Os=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Rs=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},be=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Cs=function(e){return be(e)&&!e.shiftKey},As=function(e){return be(e)&&e.shiftKey},dt=function(e){return setTimeout(e,0)},me=function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),n=1;n1&&arguments[1]!==void 0?arguments[1]:{},b=d.hasFallback,E=b===void 0?!1:b,T=d.params,F=T===void 0?[]:T,_=r[u];if(typeof _=="function"&&(_=_.apply(void 0,Is(F))),_===!0&&(_=void 0),!_){if(_===void 0||_===!1)return _;throw new Error("`".concat(u,"` was specified but was not a node, or did not return a node"))}var C=_;if(typeof _=="string"){try{C=s.querySelector(_)}catch(v){throw new Error("`".concat(u,'` appears to be an invalid selector; error="').concat(v.message,'"'))}if(!C&&!E)throw new Error("`".concat(u,"` as selector refers to no known node"))}return C},m=function(){var u=h("initialFocus",{hasFallback:!0});if(u===!1)return!1;if(u===void 0||u&&!Le(u,r.tabbableOptions))if(c(s.activeElement)>=0)u=s.activeElement;else{var d=i.tabbableGroups[0],b=d&&d.firstTabbableNode;u=b||h("fallbackFocus")}else u===null&&(u=h("fallbackFocus"));if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},f=function(){if(i.containerGroups=i.containers.map(function(u){var d=ys(u,r.tabbableOptions),b=ws(u,r.tabbableOptions),E=d.length>0?d[0]:void 0,T=d.length>0?d[d.length-1]:void 0,F=b.find(function(v){return ae(v)}),_=b.slice().reverse().find(function(v){return ae(v)}),C=!!d.find(function(v){return ie(v)>0});return{container:u,tabbableNodes:d,focusableNodes:b,posTabIndexesFound:C,firstTabbableNode:E,lastTabbableNode:T,firstDomTabbableNode:F,lastDomTabbableNode:_,nextTabbableNode:function(p){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,O=d.indexOf(p);return O<0?I?b.slice(b.indexOf(p)+1).find(function(P){return ae(P)}):b.slice(0,b.indexOf(p)).reverse().find(function(P){return ae(P)}):d[O+(I?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(u){return u.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(u){return u.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},g=function(u){var d=u.activeElement;if(d)return d.shadowRoot&&d.shadowRoot.activeElement!==null?g(d.shadowRoot):d},w=function(u){if(u!==!1&&u!==g(document)){if(!u||!u.focus){w(m());return}u.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=u,Os(u)&&u.select()}},S=function(u){var d=h("setReturnFocus",{params:[u]});return d||(d===!1?!1:u)},y=function(u){var d=u.target,b=u.event,E=u.isBackward,T=E===void 0?!1:E;d=d||Te(b),f();var F=null;if(i.tabbableGroups.length>0){var _=c(d,b),C=_>=0?i.containerGroups[_]:void 0;if(_<0)T?F=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:F=i.tabbableGroups[0].firstTabbableNode;else if(T){var v=i.tabbableGroups.findIndex(function(V){var k=V.firstTabbableNode;return d===k});if(v<0&&(C.container===d||Le(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!C.nextTabbableNode(d,!1))&&(v=_),v>=0){var p=v===0?i.tabbableGroups.length-1:v-1,I=i.tabbableGroups[p];F=ie(d)>=0?I.lastTabbableNode:I.lastDomTabbableNode}else be(b)||(F=C.nextTabbableNode(d,!1))}else{var O=i.tabbableGroups.findIndex(function(V){var k=V.lastTabbableNode;return d===k});if(O<0&&(C.container===d||Le(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!C.nextTabbableNode(d))&&(O=_),O>=0){var P=O===i.tabbableGroups.length-1?0:O+1,z=i.tabbableGroups[P];F=ie(d)>=0?z.firstTabbableNode:z.firstDomTabbableNode}else be(b)||(F=C.nextTabbableNode(d))}}else F=h("fallbackFocus");return F},R=function(u){var d=Te(u);if(!(c(d,u)>=0)){if(me(r.clickOutsideDeactivates,u)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}me(r.allowOutsideClick,u)||u.preventDefault()}},A=function(u){var d=Te(u),b=c(d,u)>=0;if(b||d instanceof Document)b&&(i.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var E,T=!0;if(i.mostRecentlyFocusedNode)if(ie(i.mostRecentlyFocusedNode)>0){var F=c(i.mostRecentlyFocusedNode),_=i.containerGroups[F].tabbableNodes;if(_.length>0){var C=_.findIndex(function(v){return v===i.mostRecentlyFocusedNode});C>=0&&(r.isKeyForward(i.recentNavEvent)?C+1<_.length&&(E=_[C+1],T=!1):C-1>=0&&(E=_[C-1],T=!1))}}else i.containerGroups.some(function(v){return v.tabbableNodes.some(function(p){return ie(p)>0})})||(T=!1);else T=!1;T&&(E=y({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),w(E||i.mostRecentlyFocusedNode||m())}i.recentNavEvent=void 0},J=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=u;var b=y({event:u,isBackward:d});b&&(be(u)&&u.preventDefault(),w(b))},Q=function(u){(r.isKeyForward(u)||r.isKeyBackward(u))&&J(u,r.isKeyBackward(u))},W=function(u){Rs(u)&&me(r.escapeDeactivates,u)!==!1&&(u.preventDefault(),o.deactivate())},$=function(u){var d=Te(u);c(d,u)>=0||me(r.clickOutsideDeactivates,u)||me(r.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},j=function(){if(i.active)return ut.activateTrap(n,o),i.delayInitialFocusTimer=r.delayInitialFocus?dt(function(){w(m())}):w(m()),s.addEventListener("focusin",A,!0),s.addEventListener("mousedown",R,{capture:!0,passive:!1}),s.addEventListener("touchstart",R,{capture:!0,passive:!1}),s.addEventListener("click",$,{capture:!0,passive:!1}),s.addEventListener("keydown",Q,{capture:!0,passive:!1}),s.addEventListener("keydown",W),o},we=function(){if(i.active)return s.removeEventListener("focusin",A,!0),s.removeEventListener("mousedown",R,!0),s.removeEventListener("touchstart",R,!0),s.removeEventListener("click",$,!0),s.removeEventListener("keydown",Q,!0),s.removeEventListener("keydown",W),o},M=function(u){var d=u.some(function(b){var E=Array.from(b.removedNodes);return E.some(function(T){return T===i.mostRecentlyFocusedNode})});d&&w(m())},U=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(M):void 0,q=function(){U&&(U.disconnect(),i.active&&!i.paused&&i.containers.map(function(u){U.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(u){if(i.active)return this;var d=l(u,"onActivate"),b=l(u,"onPostActivate"),E=l(u,"checkCanFocusTrap");E||f(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=g(s),d==null||d();var T=function(){E&&f(),j(),q(),b==null||b()};return E?(E(i.containers.concat()).then(T,T),this):(T(),this)},deactivate:function(u){if(!i.active)return this;var d=ct({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},u);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,we(),i.active=!1,i.paused=!1,q(),ut.deactivateTrap(n,o);var b=l(d,"onDeactivate"),E=l(d,"onPostDeactivate"),T=l(d,"checkCanReturnFocus"),F=l(d,"returnFocus","returnFocusOnDeactivate");b==null||b();var _=function(){dt(function(){F&&w(S(i.nodeFocusedBeforeActivation)),E==null||E()})};return F&&T?(T(S(i.nodeFocusedBeforeActivation)).then(_,_),this):(_(),this)},pause:function(u){return i.active?(i.manuallyPaused=!0,this._setPausedState(!0,u)):this},unpause:function(u){return i.active?(i.manuallyPaused=!1,n[n.length-1]!==this?this:this._setPausedState(!1,u)):this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return i.containers=d.map(function(b){return typeof b=="string"?s.querySelector(b):b}),i.active&&f(),q(),this}},Object.defineProperties(o,{_isManuallyPaused:{value:function(){return i.manuallyPaused}},_setPausedState:{value:function(u,d){if(i.paused===u)return this;if(i.paused=u,u){var b=l(d,"onPause"),E=l(d,"onPostPause");b==null||b(),we(),q(),E==null||E()}else{var T=l(d,"onUnpause"),F=l(d,"onPostUnpause");T==null||T(),f(),j(),q(),F==null||F()}return this}}}),o.updateContainerElements(e),o};function Ds(a,e={}){let t;const{immediate:s,...n}=e,r=le(!1),i=le(!1),o=f=>t&&t.activate(f),l=f=>t&&t.deactivate(f),c=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)},m=ge(()=>{const f=tt(a);return Ct(f).map(g=>{const w=tt(g);return typeof w=="string"?w:At(w)}).filter(Mt)});return je(m,f=>{f.length&&(t=Ls(f,{...n,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),s&&o())},{flush:"post"}),Lt(()=>l()),{hasFocus:r,isPaused:i,activate:o,deactivate:l,pause:c,unpause:h}}class ce{constructor(e,t=!0,s=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=n}static matches(e,t){const s=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let r=!1;return s.every(i=>n.call(e,i)?(r=!0,!1):!0),r}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(s=>{const n=t.filter(r=>r.contains(s)).length>0;t.indexOf(s)===-1&&!n&&t.push(s)}),t}getIframeContents(e,t,s=()=>{}){let n;try{const r=e.contentWindow;if(n=r.document,!r||!n)throw new Error("iframe inaccessible")}catch{s()}n&&t(n)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let n=!1,r=null;const i=()=>{if(!n){n=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,s))}catch{s()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,s){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch{s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,n=>{s++,this.waitForIframes(n.querySelector("html"),()=>{--s||t()})},n=>{n||t()})}forEachIframe(e,t,s,n=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const l=()=>{--i<=0&&n(o)};i||l(),r.forEach(c=>{ce.matches(c,this.exclude)?l():this.onIframeReady(c,h=>{t(c)&&(o++,s(h)),l()},l)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(e){return new ce(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){const n=e.compareDocumentPosition(s),r=Node.DOCUMENT_POSITION_PRECEDING;if(n&r)if(t!==null){const i=t.compareDocumentPosition(s),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let s;return t===null?s=e.nextNode():s=e.nextNode()&&e.nextNode(),{prevNode:t,node:s}}checkIframeFilter(e,t,s,n){let r=!1,i=!1;return n.forEach((o,l)=>{o.val===s&&(r=l,i=o.handled)}),this.compareNodeIframe(e,t,s)?(r===!1&&!i?n.push({val:s,handled:!0}):r!==!1&&!i&&(n[r].handled=!0),!0):(r===!1&&n.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,n){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,s,n)})})}iterateThroughNodes(e,t,s,n,r){const i=this.createIterator(t,e,n);let o=[],l=[],c,h,m=()=>({prevNode:h,node:c}=this.getIteratorNode(i),c);for(;m();)this.iframes&&this.forEachIframe(t,f=>this.checkIframeFilter(c,h,f,o),f=>{this.createInstanceOnIframe(f).forEachNode(e,g=>l.push(g),n)}),l.push(c);l.forEach(f=>{s(f)}),this.iframes&&this.handleOpenIframes(o,e,s,n),r()}forEachNode(e,t,s,n=()=>{}){const r=this.getContexts();let i=r.length;i||n(),r.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,s,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(o,l):l()})}}let Ps=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ce(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&typeof s=="object"&&typeof s[t]=="function"&&s[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,s=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${s}`),n+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,s,n)=>{let r=n.charAt(s+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",s=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(r=>{s.every(i=>{if(i.indexOf(r)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let s=this.opt.accuracy,n=typeof s=="string"?s:s.value,r=typeof s=="string"?[]:s.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(s=>{this.opt.separateWordSearch?s.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):s.trim()&&t.indexOf(s)===-1&&t.push(s)}),{keywords:t.sort((s,n)=>n.length-s.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let s=0;return e.sort((n,r)=>n.start-r.start).forEach(n=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(n,s);o&&(n.start=r,n.length=i-r,t.push(n),s=i)}),t}callNoMatchOnInvalidRanges(e,t){let s,n,r=!1;return e&&typeof e.start<"u"?(s=parseInt(e.start,10),n=s+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-s>0?r=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:s,end:n,valid:r}}checkWhitespaceRanges(e,t,s){let n,r=!0,i=s.length,o=t-i,l=parseInt(e.start,10)-o;return l=l>i?i:l,n=l+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),l<0||n-l<0||l>i||n>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):s.substring(l,n).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:n,valid:r}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{s.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:s})})}matchesExclude(e){return ce.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const n=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(s-t);let o=document.createElement(n);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,s,n,r){e.nodes.every((i,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!n(i.node))return!1;const c=t-i.start,h=(s>i.end?i.end:s)-i.start,m=e.value.substr(0,i.start),f=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,c,h),e.value=m+f,e.nodes.forEach((g,w)=>{w>=o&&(e.nodes[w].start>0&&w!==o&&(e.nodes[w].start-=h),e.nodes[w].end-=h)}),s-=h,r(i.node.previousSibling,i.start),s>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,s,n,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[i]!=="";){if(!s(c[i],l))continue;let h=c.index;if(i!==0)for(let m=1;m{let l;for(;(l=e.exec(o.value))!==null&&l[i]!=="";){let c=l.index;if(i!==0)for(let m=1;ms(l[i],m),(m,f)=>{e.lastIndex=f,n(m)})}r()})}wrapRangeFromIndex(e,t,s,n){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,l)=>{let{start:c,end:h,valid:m}=this.checkWhitespaceRanges(o,i,r.value);m&&this.wrapRangeInMappedTextNode(r,c,h,f=>t(f,o,r.value.substring(c,h),l),f=>{s(f,o)})}),n()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let s=0,n="wrapMatches";const r=i=>{s++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,s),r,()=>{s===0&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,t){this.opt=t;let s=0,n="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let h=new RegExp(this.createRegExp(c),`gm${o}`),m=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(f,g)=>this.opt.filter(g,c,s,m),f=>{m++,s++,this.opt.each(f)},()=>{m===0&&this.opt.noMatch(c),r[i-1]===c?this.opt.done(s):l(r[r.indexOf(c)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(s):l(r[0])}markRanges(e,t){this.opt=t;let s=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(r,i,o,l)=>this.opt.filter(r,i,o,l),(r,i)=>{s++,this.opt.each(r,i)},()=>{this.opt.done(s)})):this.opt.done(s)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,s=>{this.unwrapMatches(s)},s=>{const n=ce.matches(s,t),r=this.matchesExclude(s);return!n||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function zs(a){const e=new Ps(a);return this.mark=(t,s)=>(e.mark(t,s),this),this.markRegExp=(t,s)=>(e.markRegExp(t,s),this),this.markRanges=(t,s)=>(e.markRanges(t,s),this),this.unmark=t=>(e.unmark(t),this),this}const Vs="ENTRIES",_t="KEYS",St="VALUES",D="";class De{constructor(e,t){const s=e._tree,n=Array.from(s.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:s,keys:n}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=oe(this._path);if(oe(t)===D)return{done:!1,value:this.result()};const s=e.get(oe(t));return this._path.push({node:s,keys:Array.from(s.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=oe(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>oe(e)).filter(e=>e!==D).join("")}value(){return oe(this._path).node.get(D)}result(){switch(this._type){case St:return this.value();case _t:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const oe=a=>a[a.length-1],$s=(a,e,t)=>{const s=new Map;if(e===void 0)return s;const n=e.length+1,r=n+t,i=new Uint8Array(r*n).fill(t+1);for(let o=0;o{const l=r*i;e:for(const c of a.keys())if(c===D){const h=n[l-1];h<=t&&s.set(o,[a.get(c),h])}else{let h=r;for(let m=0;mt)continue e}Et(a.get(c),e,t,s,n,h,i,o+c)}};class X{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,s]=Ce(this._tree,e.slice(this._prefix.length));if(t===void 0){const[n,r]=qe(s);for(const i of n.keys())if(i!==D&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),n.get(i)),new X(o,e)}}return new X(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,js(this._tree,e)}entries(){return new De(this,Vs)}forEach(e){for(const[t,s]of this)e(t,s,this)}fuzzyGet(e,t){return $s(this._tree,e,t)}get(e){const t=Ke(this._tree,e);return t!==void 0?t.get(D):void 0}has(e){const t=Ke(this._tree,e);return t!==void 0&&t.has(D)}keys(){return new De(this,_t)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,Pe(this._tree,e).set(D,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=Pe(this._tree,e);return s.set(D,t(s.get(D))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=Pe(this._tree,e);let n=s.get(D);return n===void 0&&s.set(D,n=t()),n}values(){return new De(this,St)}[Symbol.iterator](){return this.entries()}static from(e){const t=new X;for(const[s,n]of e)t.set(s,n);return t}static fromObject(e){return X.from(Object.entries(e))}}const Ce=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const s of a.keys())if(s!==D&&e.startsWith(s))return t.push([a,s]),Ce(a.get(s),e.slice(s.length),t);return t.push([a,e]),Ce(void 0,"",t)},Ke=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==D&&e.startsWith(t))return Ke(a.get(t),e.slice(t.length))},Pe=(a,e)=>{const t=e.length;e:for(let s=0;a&&s{const[t,s]=Ce(a,e);if(t!==void 0){if(t.delete(D),t.size===0)Tt(s);else if(t.size===1){const[n,r]=t.entries().next().value;It(s,n,r)}}},Tt=a=>{if(a.length===0)return;const[e,t]=qe(a);if(e.delete(t),e.size===0)Tt(a.slice(0,-1));else if(e.size===1){const[s,n]=e.entries().next().value;s!==D&&It(a.slice(0,-1),s,n)}},It=(a,e,t)=>{if(a.length===0)return;const[s,n]=qe(a);s.set(n+e,t),s.delete(n)},qe=a=>a[a.length-1],Ge="or",kt="and",Bs="and_not";class ue{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?$e:e.autoVacuum;this._options={...Ve,...e,autoVacuum:t,searchOptions:{...ht,...e.searchOptions||{}},autoSuggestOptions:{...qs,...e.autoSuggestOptions||{}}},this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=Ue,this.addFields(this._options.fields)}add(e){const{extractField:t,stringifyField:s,tokenize:n,processTerm:r,fields:i,idField:o}=this._options,l=t(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);if(this._idToShortId.has(l))throw new Error(`MiniSearch: duplicate ID ${l}`);const c=this.addDocumentId(l);this.saveStoredFields(c,e);for(const h of i){const m=t(e,h);if(m==null)continue;const f=n(s(m,h),h),g=this._fieldIds[h],w=new Set(f).size;this.addFieldLength(c,g,this._documentCount-1,w);for(const S of f){const y=r(S,h);if(Array.isArray(y))for(const R of y)this.addTerm(g,c,R);else y&&this.addTerm(g,c,y)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:s=10}=t,n={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:l},c,h)=>(o.push(c),(h+1)%s===0?{chunk:[],promise:l.then(()=>new Promise(m=>setTimeout(m,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),n);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:s,extractField:n,stringifyField:r,fields:i,idField:o}=this._options,l=n(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);const c=this._idToShortId.get(l);if(c==null)throw new Error(`MiniSearch: cannot remove document with ID ${l}: it is not in the index`);for(const h of i){const m=n(e,h);if(m==null)continue;const f=t(r(m,h),h),g=this._fieldIds[h],w=new Set(f).size;this.removeFieldLength(c,g,this._documentCount,w);for(const S of f){const y=s(S,h);if(Array.isArray(y))for(const R of y)this.removeTerm(g,c,R);else y&&this.removeTerm(g,c,y)}}this._storedFields.delete(c),this._documentIds.delete(c),this._idToShortId.delete(l),this._fieldLength.delete(c),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((s,n)=>{this.removeFieldLength(t,n,this._documentCount,s)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:s,batchWait:n}=this._options.autoVacuum;this.conditionalVacuum({batchSize:s,batchWait:n},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const s of e)this.discard(s)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:s}=this._options,n=s(e,t);this.discard(n),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const s=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=Ue,this.performVacuuming(e,s)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const s=this._dirtCount;if(this.vacuumConditionsMet(t)){const n=e.batchSize||Je.batchSize,r=e.batchWait||Je.batchWait;let i=1;for(const[o,l]of this._index){for(const[c,h]of l)for(const[m]of h)this._documentIds.has(m)||(h.size<=1?l.delete(c):h.delete(m));this._index.get(o).size===0&&this._index.delete(o),i%n===0&&await new Promise(c=>setTimeout(c,r)),i+=1}this._dirtCount-=s}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:s}=e;return t=t||$e.minDirtCount,s=s||$e.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=s}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:s}=this._options,n={...s,...t},r=this.executeQuery(e,t),i=[];for(const[o,{score:l,terms:c,match:h}]of r){const m=c.length||1,f={id:this._documentIds.get(o),score:l*m,terms:Object.keys(h),queryTerms:c,match:h};Object.assign(f,this._storedFields.get(o)),(n.filter==null||n.filter(f))&&i.push(f)}return e===ue.wildcard&&n.boostDocument==null||i.sort(pt),i}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const s=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),l=s.get(o);l!=null?(l.score+=r,l.count+=1):s.set(o,{score:r,terms:i,count:1})}const n=[];for(const[r,{score:i,terms:o,count:l}]of s)n.push({suggestion:r,terms:o,score:i/l});return n.sort(pt),n}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(Ve.hasOwnProperty(e))return ze(Ve,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=Ie(n),l._fieldLength=Ie(r),l._storedFields=Ie(i);for(const[c,h]of l._documentIds)l._idToShortId.set(h,c);for(const[c,h]of s){const m=new Map;for(const f of Object.keys(h)){let g=h[f];o===1&&(g=g.ds),m.set(parseInt(f,10),Ie(g))}l._index.set(c,m)}return l}static async loadJSAsync(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=await ke(n),l._fieldLength=await ke(r),l._storedFields=await ke(i);for(const[h,m]of l._documentIds)l._idToShortId.set(m,h);let c=0;for(const[h,m]of s){const f=new Map;for(const g of Object.keys(m)){let w=m[g];o===1&&(w=w.ds),f.set(parseInt(g,10),await ke(w))}++c%1e3===0&&await Nt(0),l._index.set(h,f)}return l}static instantiateMiniSearch(e,t){const{documentCount:s,nextId:n,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new ue(t);return c._documentCount=s,c._nextId=n,c._idToShortId=new Map,c._fieldIds=r,c._avgFieldLength=i,c._dirtCount=o||0,c._index=new X,c}executeQuery(e,t={}){if(e===ue.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const f={...t,...e,queries:void 0},g=e.queries.map(w=>this.executeQuery(w,f));return this.combineResults(g,f.combineWith)}const{tokenize:s,processTerm:n,searchOptions:r}=this._options,i={tokenize:s,processTerm:n,...r,...t},{tokenize:o,processTerm:l}=i,m=o(e).flatMap(f=>l(f)).filter(f=>!!f).map(Us(i)).map(f=>this.executeQuerySpec(f,i));return this.combineResults(m,i.combineWith)}executeQuerySpec(e,t){const s={...this._options.searchOptions,...t},n=(s.fields||this._options.fields).reduce((S,y)=>({...S,[y]:ze(s.boost,y)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:l}=s,{fuzzy:c,prefix:h}={...ht.weights,...i},m=this._index.get(e.term),f=this.termResults(e.term,e.term,1,e.termBoost,m,n,r,l);let g,w;if(e.prefix&&(g=this._index.atPrefix(e.term)),e.fuzzy){const S=e.fuzzy===!0?.2:e.fuzzy,y=S<1?Math.min(o,Math.round(e.term.length*S)):S;y&&(w=this._index.fuzzyGet(e.term,y))}if(g)for(const[S,y]of g){const R=S.length-e.term.length;if(!R)continue;w==null||w.delete(S);const A=h*S.length/(S.length+.3*R);this.termResults(e.term,S,A,e.termBoost,y,n,r,l,f)}if(w)for(const S of w.keys()){const[y,R]=w.get(S);if(!R)continue;const A=c*S.length/(S.length+R);this.termResults(e.term,S,A,e.termBoost,y,n,r,l,f)}return f}executeWildcardQuery(e){const t=new Map,s={...this._options.searchOptions,...e};for(const[n,r]of this._documentIds){const i=s.boostDocument?s.boostDocument(r,"",this._storedFields.get(n)):1;t.set(n,{score:i,terms:[],match:{}})}return t}combineResults(e,t=Ge){if(e.length===0)return new Map;const s=t.toLowerCase(),n=Ws[s];if(!n)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(n)||new Map}toJSON(){const e=[];for(const[t,s]of this._index){const n={};for(const[r,i]of s)n[r]=Object.fromEntries(i);e.push([t,n])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,s,n,r,i,o,l,c=new Map){if(r==null)return c;for(const h of Object.keys(i)){const m=i[h],f=this._fieldIds[h],g=r.get(f);if(g==null)continue;let w=g.size;const S=this._avgFieldLength[f];for(const y of g.keys()){if(!this._documentIds.has(y)){this.removeTerm(f,y,t),w-=1;continue}const R=o?o(this._documentIds.get(y),t,this._storedFields.get(y)):1;if(!R)continue;const A=g.get(y),J=this._fieldLength.get(y)[f],Q=Js(A,w,this._documentCount,J,S,l),W=s*n*m*R*Q,$=c.get(y);if($){$.score+=W,Gs($.terms,e);const j=ze($.match,t);j?j.push(h):$.match[t]=[h]}else c.set(y,{score:W,terms:[e],match:{[t]:[h]}})}}return c}addTerm(e,t,s){const n=this._index.fetch(s,vt);let r=n.get(e);if(r==null)r=new Map,r.set(t,1),n.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,s){if(!this._index.has(s)){this.warnDocumentChanged(t,e,s);return}const n=this._index.fetch(s,vt),r=n.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,s):r.get(t)<=1?r.size<=1?n.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(s).size===0&&this._index.delete(s)}warnDocumentChanged(e,t,s){for(const n of Object.keys(this._fieldIds))if(this._fieldIds[n]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${s}" was not present in field "${n}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,Ws={[Ge]:(a,e)=>{for(const t of e.keys()){const s=a.get(t);if(s==null)a.set(t,e.get(t));else{const{score:n,terms:r,match:i}=e.get(t);s.score=s.score+n,s.match=Object.assign(s.match,i),ft(s.terms,r)}}return a},[kt]:(a,e)=>{const t=new Map;for(const s of e.keys()){const n=a.get(s);if(n==null)continue;const{score:r,terms:i,match:o}=e.get(s);ft(n.terms,i),t.set(s,{score:n.score+r,terms:n.terms,match:Object.assign(n.match,o)})}return t},[Bs]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},Ks={k:1.2,b:.7,d:.5},Js=(a,e,t,s,n,r)=>{const{k:i,b:o,d:l}=r;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(i+1)/(a+i*(1-o+o*s/n)))},Us=a=>(e,t,s)=>{const n=typeof a.fuzzy=="function"?a.fuzzy(e,t,s):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,s):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,s):1;return{term:e,fuzzy:n,prefix:r,termBoost:i}},Ve={idField:"id",extractField:(a,e)=>a[e],stringifyField:(a,e)=>a.toString(),tokenize:a=>a.split(Hs),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},ht={combineWith:Ge,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Ks},qs={combineWith:kt,prefix:(a,e,t)=>e===t.length-1},Je={batchSize:1e3,batchWait:10},Ue={minDirtFactor:.1,minDirtCount:20},$e={...Je,...Ue},Gs=(a,e)=>{a.includes(e)||a.push(e)},ft=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},pt=({score:a},{score:e})=>e-a,vt=()=>new Map,Ie=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},ke=async a=>{const e=new Map;let t=0;for(const s of Object.keys(a))e.set(parseInt(s,10),a[s]),++t%1e3===0&&await Nt(0);return e},Nt=a=>new Promise(e=>setTimeout(e,a)),Hs=/[\n\r\p{Z}\p{P}]+/u;class Qs{constructor(e=10){Ae(this,"max");Ae(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const Ys=["aria-owns"],Zs={class:"shell"},Xs=["title"],en={class:"search-actions before"},tn=["title"],sn=["aria-activedescendant","aria-controls","placeholder"],nn={class:"search-actions"},rn=["title"],an=["disabled","title"],on=["id","role","aria-labelledby"],ln=["id","aria-selected"],cn=["href","aria-label","onMouseenter","onFocusin","data-index"],un={class:"titles"},dn=["innerHTML"],hn={class:"title main"},fn=["innerHTML"],pn={key:0,class:"excerpt-wrapper"},vn={key:0,class:"excerpt",inert:""},mn=["innerHTML"],gn={key:0,class:"no-results"},bn={class:"search-keyboard-shortcuts"},yn=["aria-label"],wn=["aria-label"],xn=["aria-label"],_n=["aria-label"],Sn=Dt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var _,C;const t=e,s=le(),n=le(),r=le(rs),i=ns(),{activate:o}=Ds(s,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,h=st(async()=>{var v,p,I,O,P,z,V,k,K;return at(ue.loadJSON((I=await((p=(v=r.value)[l.value])==null?void 0:p.call(v)))==null?void 0:I.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((O=c.value.search)==null?void 0:O.provider)==="local"&&((z=(P=c.value.search.options)==null?void 0:P.miniSearch)==null?void 0:z.searchOptions)},...((V=c.value.search)==null?void 0:V.provider)==="local"&&((K=(k=c.value.search.options)==null?void 0:k.miniSearch)==null?void 0:K.options)}))}),f=ge(()=>{var v,p;return((v=c.value.search)==null?void 0:v.provider)==="local"&&((p=c.value.search.options)==null?void 0:p.disableQueryPersistence)===!0}).value?he(""):Pt("vitepress:local-search-filter",""),g=zt("vitepress:local-search-detailed-list",((_=c.value.search)==null?void 0:_.provider)==="local"&&((C=c.value.search.options)==null?void 0:C.detailedView)===!0),w=ge(()=>{var v,p,I;return((v=c.value.search)==null?void 0:v.provider)==="local"&&(((p=c.value.search.options)==null?void 0:p.disableDetailedView)===!0||((I=c.value.search.options)==null?void 0:I.detailedView)===!1)}),S=ge(()=>{var p,I,O,P,z,V,k;const v=((p=c.value.search)==null?void 0:p.options)??c.value.algolia;return((z=(P=(O=(I=v==null?void 0:v.locales)==null?void 0:I[l.value])==null?void 0:O.translations)==null?void 0:P.button)==null?void 0:z.buttonText)||((k=(V=v==null?void 0:v.translations)==null?void 0:V.button)==null?void 0:k.buttonText)||"Search"});Vt(()=>{w.value&&(g.value=!1)});const y=le([]),R=he(!1);je(f,()=>{R.value=!1});const A=st(async()=>{if(n.value)return at(new zs(n.value))},null),J=new Qs(16);$t(()=>[h.value,f.value,g.value],async([v,p,I],O,P)=>{var ee,xe,He,Qe;(O==null?void 0:O[0])!==v&&J.clear();let z=!1;if(P(()=>{z=!0}),!v)return;y.value=v.search(p).slice(0,16),R.value=!0;const V=I?await Promise.all(y.value.map(B=>Q(B.id))):[];if(z)return;for(const{id:B,mod:te}of V){const se=B.slice(0,B.indexOf("#"));let Y=J.get(se);if(Y)continue;Y=new Map,J.set(se,Y);const G=te.default??te;if(G!=null&&G.render||G!=null&&G.setup){const ne=Zt(G);ne.config.warnHandler=()=>{},ne.provide(Xt,i),Object.defineProperties(ne.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ye=document.createElement("div");ne.mount(Ye),Ye.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(de=>{var et;const _e=(et=de.querySelector("a"))==null?void 0:et.getAttribute("href"),Ze=(_e==null?void 0:_e.startsWith("#"))&&_e.slice(1);if(!Ze)return;let Xe="";for(;(de=de.nextElementSibling)&&!/^h[1-6]$/i.test(de.tagName);)Xe+=de.outerHTML;Y.set(Ze,Xe)}),ne.unmount()}if(z)return}const k=new Set;if(y.value=y.value.map(B=>{const[te,se]=B.id.split("#"),Y=J.get(te),G=(Y==null?void 0:Y.get(se))??"";for(const ne in B.match)k.add(ne);return{...B,text:G}}),await fe(),z)return;await new Promise(B=>{var te;(te=A.value)==null||te.unmark({done:()=>{var se;(se=A.value)==null||se.markRegExp(T(k),{done:B})}})});const K=((ee=s.value)==null?void 0:ee.querySelectorAll(".result .excerpt"))??[];for(const B of K)(xe=B.querySelector('mark[data-markjs="true"]'))==null||xe.scrollIntoView({block:"center"});(Qe=(He=n.value)==null?void 0:He.firstElementChild)==null||Qe.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function Q(v){const p=es(v.slice(0,v.indexOf("#")));try{if(!p)throw new Error(`Cannot find file for id: ${v}`);return{id:v,mod:await import(p)}}catch(I){return console.error(I),{id:v,mod:{}}}}const W=he(),$=ge(()=>{var v;return((v=f.value)==null?void 0:v.length)<=0});function j(v=!0){var p,I;(p=W.value)==null||p.focus(),v&&((I=W.value)==null||I.select())}Me(()=>{j()});function we(v){v.pointerType==="mouse"&&j()}const M=he(-1),U=he(!0);je(y,v=>{M.value=v.length?0:-1,q()});function q(){fe(()=>{const v=document.querySelector(".result.selected");v==null||v.scrollIntoView({block:"nearest"})})}Se("ArrowUp",v=>{v.preventDefault(),M.value--,M.value<0&&(M.value=y.value.length-1),U.value=!0,q()}),Se("ArrowDown",v=>{v.preventDefault(),M.value++,M.value>=y.value.length&&(M.value=0),U.value=!0,q()});const N=jt();Se("Enter",v=>{if(v.isComposing||v.target instanceof HTMLButtonElement&&v.target.type!=="submit")return;const p=y.value[M.value];if(v.target instanceof HTMLInputElement&&!p){v.preventDefault();return}p&&(N.go(p.id),t("close"))}),Se("Escape",()=>{t("close")});const d=is({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Me(()=>{window.history.pushState(null,"",null)}),Bt("popstate",v=>{v.preventDefault(),t("close")});const b=Wt(Kt?document.body:null);Me(()=>{fe(()=>{b.value=!0,fe().then(()=>o())})}),Jt(()=>{b.value=!1});function E(){f.value="",fe().then(()=>j(!1))}function T(v){return new RegExp([...v].sort((p,I)=>I.length-p.length).map(p=>`(${ts(p)})`).join("|"),"gi")}function F(v){var O;if(!U.value)return;const p=(O=v.target)==null?void 0:O.closest(".result"),I=Number.parseInt(p==null?void 0:p.dataset.index);I>=0&&I!==M.value&&(M.value=I),U.value=!1}return(v,p)=>{var I,O,P,z,V;return H(),Ut(Yt,{to:"body"},[x("div",{ref_key:"el",ref:s,role:"button","aria-owns":(I=y.value)!=null&&I.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[x("div",{class:"backdrop",onClick:p[0]||(p[0]=k=>v.$emit("close"))}),x("div",Zs,[x("form",{class:"search-bar",onPointerup:p[4]||(p[4]=k=>we(k)),onSubmit:p[5]||(p[5]=qt(()=>{},["prevent"]))},[x("label",{title:S.value,id:"localsearch-label",for:"localsearch-input"},p[7]||(p[7]=[x("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)]),8,Xs),x("div",en,[x("button",{class:"back-button",title:L(d)("modal.backButtonTitle"),onClick:p[1]||(p[1]=k=>v.$emit("close"))},p[8]||(p[8]=[x("span",{class:"vpi-arrow-left local-search-icon"},null,-1)]),8,tn)]),Gt(x("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":p[2]||(p[2]=k=>Qt(f)?f.value=k:null),"aria-activedescendant":M.value>-1?"localsearch-item-"+M.value:void 0,"aria-autocomplete":"both","aria-controls":(O=y.value)!=null&&O.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:S.value,spellcheck:"false",type:"search"},null,8,sn),[[Ht,L(f)]]),x("div",nn,[w.value?Ee("",!0):(H(),Z("button",{key:0,class:nt(["toggle-layout-button",{"detailed-list":L(g)}]),type:"button",title:L(d)("modal.displayDetails"),onClick:p[3]||(p[3]=k=>M.value>-1&&(g.value=!L(g)))},p[9]||(p[9]=[x("span",{class:"vpi-layout-list local-search-icon"},null,-1)]),10,rn)),x("button",{class:"clear-button",type:"reset",disabled:$.value,title:L(d)("modal.resetButtonTitle"),onClick:E},p[10]||(p[10]=[x("span",{class:"vpi-delete local-search-icon"},null,-1)]),8,an)])],32),x("ul",{ref_key:"resultsEl",ref:n,id:(P=y.value)!=null&&P.length?"localsearch-list":void 0,role:(z=y.value)!=null&&z.length?"listbox":void 0,"aria-labelledby":(V=y.value)!=null&&V.length?"localsearch-label":void 0,class:"results",onMousemove:F},[(H(!0),Z(rt,null,it(y.value,(k,K)=>(H(),Z("li",{key:k.id,id:"localsearch-item-"+K,"aria-selected":M.value===K?"true":"false",role:"option"},[x("a",{href:k.id,class:nt(["result",{selected:M.value===K}]),"aria-label":[...k.titles,k.title].join(" > "),onMouseenter:ee=>!U.value&&(M.value=K),onFocusin:ee=>M.value=K,onClick:p[6]||(p[6]=ee=>v.$emit("close")),"data-index":K},[x("div",null,[x("div",un,[p[12]||(p[12]=x("span",{class:"title-icon"},"#",-1)),(H(!0),Z(rt,null,it(k.titles,(ee,xe)=>(H(),Z("span",{key:xe,class:"title"},[x("span",{class:"text",innerHTML:ee},null,8,dn),p[11]||(p[11]=x("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),x("span",hn,[x("span",{class:"text",innerHTML:k.title},null,8,fn)])]),L(g)?(H(),Z("div",pn,[k.text?(H(),Z("div",vn,[x("div",{class:"vp-doc",innerHTML:k.text},null,8,mn)])):Ee("",!0),p[13]||(p[13]=x("div",{class:"excerpt-gradient-bottom"},null,-1)),p[14]||(p[14]=x("div",{class:"excerpt-gradient-top"},null,-1))])):Ee("",!0)])],42,cn)],8,ln))),128)),L(f)&&!y.value.length&&R.value?(H(),Z("li",gn,[pe(ve(L(d)("modal.noResultsText"))+' "',1),x("strong",null,ve(L(f)),1),p[15]||(p[15]=pe('" '))])):Ee("",!0)],40,on),x("div",bn,[x("span",null,[x("kbd",{"aria-label":L(d)("modal.footer.navigateUpKeyAriaLabel")},p[16]||(p[16]=[x("span",{class:"vpi-arrow-up navigate-icon"},null,-1)]),8,yn),x("kbd",{"aria-label":L(d)("modal.footer.navigateDownKeyAriaLabel")},p[17]||(p[17]=[x("span",{class:"vpi-arrow-down navigate-icon"},null,-1)]),8,wn),pe(" "+ve(L(d)("modal.footer.navigateText")),1)]),x("span",null,[x("kbd",{"aria-label":L(d)("modal.footer.selectKeyAriaLabel")},p[18]||(p[18]=[x("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)]),8,xn),pe(" "+ve(L(d)("modal.footer.selectText")),1)]),x("span",null,[x("kbd",{"aria-label":L(d)("modal.footer.closeKeyAriaLabel")},"esc",8,_n),pe(" "+ve(L(d)("modal.footer.closeText")),1)])])])],8,Ys)])}}}),Fn=ss(Sn,[["__scopeId","data-v-ce626c7c"]]);export{Fn as default}; diff --git a/assets/chunks/VPLocalSearchBox.ZsI9nk2w.js b/assets/chunks/VPLocalSearchBox.ZsI9nk2w.js deleted file mode 100644 index f3df151..0000000 --- a/assets/chunks/VPLocalSearchBox.ZsI9nk2w.js +++ /dev/null @@ -1,8 +0,0 @@ -var Ft=Object.defineProperty;var Ot=(a,e,t)=>e in a?Ft(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ae=(a,e,t)=>Ot(a,typeof e!="symbol"?e+"":e,t);import{V as Rt,D as le,h as ge,aI as tt,aJ as Ct,aK as At,aL as Mt,q as je,aM as Lt,d as Dt,aN as st,p as he,aO as Pt,aP as zt,s as Vt,aQ as $t,v as Me,P as fe,O as Se,aR as jt,aS as Bt,W as Wt,R as Kt,$ as Jt,b as Ut,o as H,j as x,a0 as qt,aj as Gt,k as L,ar as Ht,ag as Qt,c as Z,e as Ee,n as nt,B as it,F as rt,a as pe,t as ve,ao as Yt,an as at,aT as Zt,aw as Xt,aB as es,aU as ts,_ as ss}from"./framework.CrOSaJJH.js";import{u as ns,c as is}from"./theme.DID5n9gm.js";const rs={root:()=>Rt(()=>import("./@localSearchIndexroot.BNPcOFiT.js"),[])};/*! -* tabbable 6.3.0 -* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE -*/var mt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=mt.join(","),gt=typeof Element>"u",re=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Fe=!gt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},ye=function(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&ye(e.parentNode);return i},as=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},bt=function(e,t,s){if(ye(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&re.call(e,Ne)&&n.unshift(e),n=n.filter(s),n},Oe=function(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!ye(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=Oe(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=re.call(i,Ne);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var m=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),f=!ye(m,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(m&&f){var g=Oe(m===!0?i.children:m.children,!0,s);s.flatten?n.push.apply(n,g):n.push({scopeParent:i,candidates:g})}else r.unshift.apply(r,i.children)}}return n},yt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ie=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||as(e))&&!yt(e)?0:e.tabIndex},os=function(e,t){var s=ie(e);return s<0&&t&&!yt(e)?0:s},ls=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},wt=function(e){return e.tagName==="INPUT"},cs=function(e){return wt(e)&&e.type==="hidden"},us=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},ds=function(e,t){for(var s=0;ssummary:first-of-type"),o=i?e.parentElement:e;if(re.call(o,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="full-native"||s==="legacy-full"){if(typeof n=="function"){for(var l=e;e;){var c=e.parentElement,h=Fe(e);if(c&&!c.shadowRoot&&n(c)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!c&&h!==e.ownerDocument?e=h.host:e=c}e=l}if(vs(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return ot(e);return!1},gs=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},xt=function(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=os(o,i),c=i?xt(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(ls).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},ys=function(e,t){t=t||{};var s;return t.getShadowRoot?s=Oe([e],t.includeContainer,{filter:Be.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:bs}):s=bt(e,t.includeContainer,Be.bind(null,t)),xt(s)},ws=function(e,t){t=t||{};var s;return t.getShadowRoot?s=Oe([e],t.includeContainer,{filter:Re.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=bt(e,t.includeContainer,Re.bind(null,t)),s},ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,Ne)===!1?!1:Be(t,e)},xs=mt.concat("iframe").join(","),Le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,xs)===!1?!1:Re(t,e)};/*! -* focus-trap 7.6.6 -* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE -*/function We(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,s=Array(e);t0){var s=e[e.length-1];s!==t&&s._setPausedState(!0)}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var s=e.indexOf(t);s!==-1&&e.splice(s,1),e.length>0&&!e[e.length-1]._isManuallyPaused()&&e[e.length-1]._setPausedState(!1)}},Os=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Rs=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},be=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Cs=function(e){return be(e)&&!e.shiftKey},As=function(e){return be(e)&&e.shiftKey},dt=function(e){return setTimeout(e,0)},me=function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),n=1;n1&&arguments[1]!==void 0?arguments[1]:{},b=d.hasFallback,E=b===void 0?!1:b,T=d.params,F=T===void 0?[]:T,_=r[u];if(typeof _=="function"&&(_=_.apply(void 0,Is(F))),_===!0&&(_=void 0),!_){if(_===void 0||_===!1)return _;throw new Error("`".concat(u,"` was specified but was not a node, or did not return a node"))}var C=_;if(typeof _=="string"){try{C=s.querySelector(_)}catch(v){throw new Error("`".concat(u,'` appears to be an invalid selector; error="').concat(v.message,'"'))}if(!C&&!E)throw new Error("`".concat(u,"` as selector refers to no known node"))}return C},m=function(){var u=h("initialFocus",{hasFallback:!0});if(u===!1)return!1;if(u===void 0||u&&!Le(u,r.tabbableOptions))if(c(s.activeElement)>=0)u=s.activeElement;else{var d=i.tabbableGroups[0],b=d&&d.firstTabbableNode;u=b||h("fallbackFocus")}else u===null&&(u=h("fallbackFocus"));if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},f=function(){if(i.containerGroups=i.containers.map(function(u){var d=ys(u,r.tabbableOptions),b=ws(u,r.tabbableOptions),E=d.length>0?d[0]:void 0,T=d.length>0?d[d.length-1]:void 0,F=b.find(function(v){return ae(v)}),_=b.slice().reverse().find(function(v){return ae(v)}),C=!!d.find(function(v){return ie(v)>0});return{container:u,tabbableNodes:d,focusableNodes:b,posTabIndexesFound:C,firstTabbableNode:E,lastTabbableNode:T,firstDomTabbableNode:F,lastDomTabbableNode:_,nextTabbableNode:function(p){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,O=d.indexOf(p);return O<0?I?b.slice(b.indexOf(p)+1).find(function(P){return ae(P)}):b.slice(0,b.indexOf(p)).reverse().find(function(P){return ae(P)}):d[O+(I?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(u){return u.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(u){return u.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},g=function(u){var d=u.activeElement;if(d)return d.shadowRoot&&d.shadowRoot.activeElement!==null?g(d.shadowRoot):d},w=function(u){if(u!==!1&&u!==g(document)){if(!u||!u.focus){w(m());return}u.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=u,Os(u)&&u.select()}},S=function(u){var d=h("setReturnFocus",{params:[u]});return d||(d===!1?!1:u)},y=function(u){var d=u.target,b=u.event,E=u.isBackward,T=E===void 0?!1:E;d=d||Te(b),f();var F=null;if(i.tabbableGroups.length>0){var _=c(d,b),C=_>=0?i.containerGroups[_]:void 0;if(_<0)T?F=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:F=i.tabbableGroups[0].firstTabbableNode;else if(T){var v=i.tabbableGroups.findIndex(function(V){var k=V.firstTabbableNode;return d===k});if(v<0&&(C.container===d||Le(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!C.nextTabbableNode(d,!1))&&(v=_),v>=0){var p=v===0?i.tabbableGroups.length-1:v-1,I=i.tabbableGroups[p];F=ie(d)>=0?I.lastTabbableNode:I.lastDomTabbableNode}else be(b)||(F=C.nextTabbableNode(d,!1))}else{var O=i.tabbableGroups.findIndex(function(V){var k=V.lastTabbableNode;return d===k});if(O<0&&(C.container===d||Le(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!C.nextTabbableNode(d))&&(O=_),O>=0){var P=O===i.tabbableGroups.length-1?0:O+1,z=i.tabbableGroups[P];F=ie(d)>=0?z.firstTabbableNode:z.firstDomTabbableNode}else be(b)||(F=C.nextTabbableNode(d))}}else F=h("fallbackFocus");return F},R=function(u){var d=Te(u);if(!(c(d,u)>=0)){if(me(r.clickOutsideDeactivates,u)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}me(r.allowOutsideClick,u)||u.preventDefault()}},A=function(u){var d=Te(u),b=c(d,u)>=0;if(b||d instanceof Document)b&&(i.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var E,T=!0;if(i.mostRecentlyFocusedNode)if(ie(i.mostRecentlyFocusedNode)>0){var F=c(i.mostRecentlyFocusedNode),_=i.containerGroups[F].tabbableNodes;if(_.length>0){var C=_.findIndex(function(v){return v===i.mostRecentlyFocusedNode});C>=0&&(r.isKeyForward(i.recentNavEvent)?C+1<_.length&&(E=_[C+1],T=!1):C-1>=0&&(E=_[C-1],T=!1))}}else i.containerGroups.some(function(v){return v.tabbableNodes.some(function(p){return ie(p)>0})})||(T=!1);else T=!1;T&&(E=y({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),w(E||i.mostRecentlyFocusedNode||m())}i.recentNavEvent=void 0},J=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=u;var b=y({event:u,isBackward:d});b&&(be(u)&&u.preventDefault(),w(b))},Q=function(u){(r.isKeyForward(u)||r.isKeyBackward(u))&&J(u,r.isKeyBackward(u))},W=function(u){Rs(u)&&me(r.escapeDeactivates,u)!==!1&&(u.preventDefault(),o.deactivate())},$=function(u){var d=Te(u);c(d,u)>=0||me(r.clickOutsideDeactivates,u)||me(r.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},j=function(){if(i.active)return ut.activateTrap(n,o),i.delayInitialFocusTimer=r.delayInitialFocus?dt(function(){w(m())}):w(m()),s.addEventListener("focusin",A,!0),s.addEventListener("mousedown",R,{capture:!0,passive:!1}),s.addEventListener("touchstart",R,{capture:!0,passive:!1}),s.addEventListener("click",$,{capture:!0,passive:!1}),s.addEventListener("keydown",Q,{capture:!0,passive:!1}),s.addEventListener("keydown",W),o},we=function(){if(i.active)return s.removeEventListener("focusin",A,!0),s.removeEventListener("mousedown",R,!0),s.removeEventListener("touchstart",R,!0),s.removeEventListener("click",$,!0),s.removeEventListener("keydown",Q,!0),s.removeEventListener("keydown",W),o},M=function(u){var d=u.some(function(b){var E=Array.from(b.removedNodes);return E.some(function(T){return T===i.mostRecentlyFocusedNode})});d&&w(m())},U=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(M):void 0,q=function(){U&&(U.disconnect(),i.active&&!i.paused&&i.containers.map(function(u){U.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(u){if(i.active)return this;var d=l(u,"onActivate"),b=l(u,"onPostActivate"),E=l(u,"checkCanFocusTrap");E||f(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=g(s),d==null||d();var T=function(){E&&f(),j(),q(),b==null||b()};return E?(E(i.containers.concat()).then(T,T),this):(T(),this)},deactivate:function(u){if(!i.active)return this;var d=ct({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},u);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,we(),i.active=!1,i.paused=!1,q(),ut.deactivateTrap(n,o);var b=l(d,"onDeactivate"),E=l(d,"onPostDeactivate"),T=l(d,"checkCanReturnFocus"),F=l(d,"returnFocus","returnFocusOnDeactivate");b==null||b();var _=function(){dt(function(){F&&w(S(i.nodeFocusedBeforeActivation)),E==null||E()})};return F&&T?(T(S(i.nodeFocusedBeforeActivation)).then(_,_),this):(_(),this)},pause:function(u){return i.active?(i.manuallyPaused=!0,this._setPausedState(!0,u)):this},unpause:function(u){return i.active?(i.manuallyPaused=!1,n[n.length-1]!==this?this:this._setPausedState(!1,u)):this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return i.containers=d.map(function(b){return typeof b=="string"?s.querySelector(b):b}),i.active&&f(),q(),this}},Object.defineProperties(o,{_isManuallyPaused:{value:function(){return i.manuallyPaused}},_setPausedState:{value:function(u,d){if(i.paused===u)return this;if(i.paused=u,u){var b=l(d,"onPause"),E=l(d,"onPostPause");b==null||b(),we(),q(),E==null||E()}else{var T=l(d,"onUnpause"),F=l(d,"onPostUnpause");T==null||T(),f(),j(),q(),F==null||F()}return this}}}),o.updateContainerElements(e),o};function Ds(a,e={}){let t;const{immediate:s,...n}=e,r=le(!1),i=le(!1),o=f=>t&&t.activate(f),l=f=>t&&t.deactivate(f),c=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)},m=ge(()=>{const f=tt(a);return Ct(f).map(g=>{const w=tt(g);return typeof w=="string"?w:At(w)}).filter(Mt)});return je(m,f=>{f.length&&(t=Ls(f,{...n,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),s&&o())},{flush:"post"}),Lt(()=>l()),{hasFocus:r,isPaused:i,activate:o,deactivate:l,pause:c,unpause:h}}class ce{constructor(e,t=!0,s=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=n}static matches(e,t){const s=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let r=!1;return s.every(i=>n.call(e,i)?(r=!0,!1):!0),r}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(s=>{const n=t.filter(r=>r.contains(s)).length>0;t.indexOf(s)===-1&&!n&&t.push(s)}),t}getIframeContents(e,t,s=()=>{}){let n;try{const r=e.contentWindow;if(n=r.document,!r||!n)throw new Error("iframe inaccessible")}catch{s()}n&&t(n)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let n=!1,r=null;const i=()=>{if(!n){n=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,s))}catch{s()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,s){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch{s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,n=>{s++,this.waitForIframes(n.querySelector("html"),()=>{--s||t()})},n=>{n||t()})}forEachIframe(e,t,s,n=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const l=()=>{--i<=0&&n(o)};i||l(),r.forEach(c=>{ce.matches(c,this.exclude)?l():this.onIframeReady(c,h=>{t(c)&&(o++,s(h)),l()},l)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(e){return new ce(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){const n=e.compareDocumentPosition(s),r=Node.DOCUMENT_POSITION_PRECEDING;if(n&r)if(t!==null){const i=t.compareDocumentPosition(s),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let s;return t===null?s=e.nextNode():s=e.nextNode()&&e.nextNode(),{prevNode:t,node:s}}checkIframeFilter(e,t,s,n){let r=!1,i=!1;return n.forEach((o,l)=>{o.val===s&&(r=l,i=o.handled)}),this.compareNodeIframe(e,t,s)?(r===!1&&!i?n.push({val:s,handled:!0}):r!==!1&&!i&&(n[r].handled=!0),!0):(r===!1&&n.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,n){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,s,n)})})}iterateThroughNodes(e,t,s,n,r){const i=this.createIterator(t,e,n);let o=[],l=[],c,h,m=()=>({prevNode:h,node:c}=this.getIteratorNode(i),c);for(;m();)this.iframes&&this.forEachIframe(t,f=>this.checkIframeFilter(c,h,f,o),f=>{this.createInstanceOnIframe(f).forEachNode(e,g=>l.push(g),n)}),l.push(c);l.forEach(f=>{s(f)}),this.iframes&&this.handleOpenIframes(o,e,s,n),r()}forEachNode(e,t,s,n=()=>{}){const r=this.getContexts();let i=r.length;i||n(),r.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,s,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(o,l):l()})}}let Ps=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ce(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&typeof s=="object"&&typeof s[t]=="function"&&s[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,s=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${s}`),n+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,s,n)=>{let r=n.charAt(s+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",s=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(r=>{s.every(i=>{if(i.indexOf(r)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let s=this.opt.accuracy,n=typeof s=="string"?s:s.value,r=typeof s=="string"?[]:s.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(s=>{this.opt.separateWordSearch?s.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):s.trim()&&t.indexOf(s)===-1&&t.push(s)}),{keywords:t.sort((s,n)=>n.length-s.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let s=0;return e.sort((n,r)=>n.start-r.start).forEach(n=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(n,s);o&&(n.start=r,n.length=i-r,t.push(n),s=i)}),t}callNoMatchOnInvalidRanges(e,t){let s,n,r=!1;return e&&typeof e.start<"u"?(s=parseInt(e.start,10),n=s+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-s>0?r=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:s,end:n,valid:r}}checkWhitespaceRanges(e,t,s){let n,r=!0,i=s.length,o=t-i,l=parseInt(e.start,10)-o;return l=l>i?i:l,n=l+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),l<0||n-l<0||l>i||n>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):s.substring(l,n).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:n,valid:r}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{s.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:s})})}matchesExclude(e){return ce.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const n=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(s-t);let o=document.createElement(n);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,s,n,r){e.nodes.every((i,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!n(i.node))return!1;const c=t-i.start,h=(s>i.end?i.end:s)-i.start,m=e.value.substr(0,i.start),f=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,c,h),e.value=m+f,e.nodes.forEach((g,w)=>{w>=o&&(e.nodes[w].start>0&&w!==o&&(e.nodes[w].start-=h),e.nodes[w].end-=h)}),s-=h,r(i.node.previousSibling,i.start),s>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,s,n,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[i]!=="";){if(!s(c[i],l))continue;let h=c.index;if(i!==0)for(let m=1;m{let l;for(;(l=e.exec(o.value))!==null&&l[i]!=="";){let c=l.index;if(i!==0)for(let m=1;ms(l[i],m),(m,f)=>{e.lastIndex=f,n(m)})}r()})}wrapRangeFromIndex(e,t,s,n){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,l)=>{let{start:c,end:h,valid:m}=this.checkWhitespaceRanges(o,i,r.value);m&&this.wrapRangeInMappedTextNode(r,c,h,f=>t(f,o,r.value.substring(c,h),l),f=>{s(f,o)})}),n()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let s=0,n="wrapMatches";const r=i=>{s++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,s),r,()=>{s===0&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,t){this.opt=t;let s=0,n="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let h=new RegExp(this.createRegExp(c),`gm${o}`),m=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(f,g)=>this.opt.filter(g,c,s,m),f=>{m++,s++,this.opt.each(f)},()=>{m===0&&this.opt.noMatch(c),r[i-1]===c?this.opt.done(s):l(r[r.indexOf(c)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(s):l(r[0])}markRanges(e,t){this.opt=t;let s=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(r,i,o,l)=>this.opt.filter(r,i,o,l),(r,i)=>{s++,this.opt.each(r,i)},()=>{this.opt.done(s)})):this.opt.done(s)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,s=>{this.unwrapMatches(s)},s=>{const n=ce.matches(s,t),r=this.matchesExclude(s);return!n||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function zs(a){const e=new Ps(a);return this.mark=(t,s)=>(e.mark(t,s),this),this.markRegExp=(t,s)=>(e.markRegExp(t,s),this),this.markRanges=(t,s)=>(e.markRanges(t,s),this),this.unmark=t=>(e.unmark(t),this),this}const Vs="ENTRIES",_t="KEYS",St="VALUES",D="";class De{constructor(e,t){const s=e._tree,n=Array.from(s.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:s,keys:n}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=oe(this._path);if(oe(t)===D)return{done:!1,value:this.result()};const s=e.get(oe(t));return this._path.push({node:s,keys:Array.from(s.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=oe(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>oe(e)).filter(e=>e!==D).join("")}value(){return oe(this._path).node.get(D)}result(){switch(this._type){case St:return this.value();case _t:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const oe=a=>a[a.length-1],$s=(a,e,t)=>{const s=new Map;if(e===void 0)return s;const n=e.length+1,r=n+t,i=new Uint8Array(r*n).fill(t+1);for(let o=0;o{const l=r*i;e:for(const c of a.keys())if(c===D){const h=n[l-1];h<=t&&s.set(o,[a.get(c),h])}else{let h=r;for(let m=0;mt)continue e}Et(a.get(c),e,t,s,n,h,i,o+c)}};class X{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,s]=Ce(this._tree,e.slice(this._prefix.length));if(t===void 0){const[n,r]=qe(s);for(const i of n.keys())if(i!==D&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),n.get(i)),new X(o,e)}}return new X(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,js(this._tree,e)}entries(){return new De(this,Vs)}forEach(e){for(const[t,s]of this)e(t,s,this)}fuzzyGet(e,t){return $s(this._tree,e,t)}get(e){const t=Ke(this._tree,e);return t!==void 0?t.get(D):void 0}has(e){const t=Ke(this._tree,e);return t!==void 0&&t.has(D)}keys(){return new De(this,_t)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,Pe(this._tree,e).set(D,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=Pe(this._tree,e);return s.set(D,t(s.get(D))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=Pe(this._tree,e);let n=s.get(D);return n===void 0&&s.set(D,n=t()),n}values(){return new De(this,St)}[Symbol.iterator](){return this.entries()}static from(e){const t=new X;for(const[s,n]of e)t.set(s,n);return t}static fromObject(e){return X.from(Object.entries(e))}}const Ce=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const s of a.keys())if(s!==D&&e.startsWith(s))return t.push([a,s]),Ce(a.get(s),e.slice(s.length),t);return t.push([a,e]),Ce(void 0,"",t)},Ke=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==D&&e.startsWith(t))return Ke(a.get(t),e.slice(t.length))},Pe=(a,e)=>{const t=e.length;e:for(let s=0;a&&s{const[t,s]=Ce(a,e);if(t!==void 0){if(t.delete(D),t.size===0)Tt(s);else if(t.size===1){const[n,r]=t.entries().next().value;It(s,n,r)}}},Tt=a=>{if(a.length===0)return;const[e,t]=qe(a);if(e.delete(t),e.size===0)Tt(a.slice(0,-1));else if(e.size===1){const[s,n]=e.entries().next().value;s!==D&&It(a.slice(0,-1),s,n)}},It=(a,e,t)=>{if(a.length===0)return;const[s,n]=qe(a);s.set(n+e,t),s.delete(n)},qe=a=>a[a.length-1],Ge="or",kt="and",Bs="and_not";class ue{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?$e:e.autoVacuum;this._options={...Ve,...e,autoVacuum:t,searchOptions:{...ht,...e.searchOptions||{}},autoSuggestOptions:{...qs,...e.autoSuggestOptions||{}}},this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=Ue,this.addFields(this._options.fields)}add(e){const{extractField:t,stringifyField:s,tokenize:n,processTerm:r,fields:i,idField:o}=this._options,l=t(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);if(this._idToShortId.has(l))throw new Error(`MiniSearch: duplicate ID ${l}`);const c=this.addDocumentId(l);this.saveStoredFields(c,e);for(const h of i){const m=t(e,h);if(m==null)continue;const f=n(s(m,h),h),g=this._fieldIds[h],w=new Set(f).size;this.addFieldLength(c,g,this._documentCount-1,w);for(const S of f){const y=r(S,h);if(Array.isArray(y))for(const R of y)this.addTerm(g,c,R);else y&&this.addTerm(g,c,y)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:s=10}=t,n={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:l},c,h)=>(o.push(c),(h+1)%s===0?{chunk:[],promise:l.then(()=>new Promise(m=>setTimeout(m,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),n);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:s,extractField:n,stringifyField:r,fields:i,idField:o}=this._options,l=n(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);const c=this._idToShortId.get(l);if(c==null)throw new Error(`MiniSearch: cannot remove document with ID ${l}: it is not in the index`);for(const h of i){const m=n(e,h);if(m==null)continue;const f=t(r(m,h),h),g=this._fieldIds[h],w=new Set(f).size;this.removeFieldLength(c,g,this._documentCount,w);for(const S of f){const y=s(S,h);if(Array.isArray(y))for(const R of y)this.removeTerm(g,c,R);else y&&this.removeTerm(g,c,y)}}this._storedFields.delete(c),this._documentIds.delete(c),this._idToShortId.delete(l),this._fieldLength.delete(c),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((s,n)=>{this.removeFieldLength(t,n,this._documentCount,s)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:s,batchWait:n}=this._options.autoVacuum;this.conditionalVacuum({batchSize:s,batchWait:n},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const s of e)this.discard(s)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:s}=this._options,n=s(e,t);this.discard(n),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const s=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=Ue,this.performVacuuming(e,s)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const s=this._dirtCount;if(this.vacuumConditionsMet(t)){const n=e.batchSize||Je.batchSize,r=e.batchWait||Je.batchWait;let i=1;for(const[o,l]of this._index){for(const[c,h]of l)for(const[m]of h)this._documentIds.has(m)||(h.size<=1?l.delete(c):h.delete(m));this._index.get(o).size===0&&this._index.delete(o),i%n===0&&await new Promise(c=>setTimeout(c,r)),i+=1}this._dirtCount-=s}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:s}=e;return t=t||$e.minDirtCount,s=s||$e.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=s}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:s}=this._options,n={...s,...t},r=this.executeQuery(e,t),i=[];for(const[o,{score:l,terms:c,match:h}]of r){const m=c.length||1,f={id:this._documentIds.get(o),score:l*m,terms:Object.keys(h),queryTerms:c,match:h};Object.assign(f,this._storedFields.get(o)),(n.filter==null||n.filter(f))&&i.push(f)}return e===ue.wildcard&&n.boostDocument==null||i.sort(pt),i}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const s=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),l=s.get(o);l!=null?(l.score+=r,l.count+=1):s.set(o,{score:r,terms:i,count:1})}const n=[];for(const[r,{score:i,terms:o,count:l}]of s)n.push({suggestion:r,terms:o,score:i/l});return n.sort(pt),n}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(Ve.hasOwnProperty(e))return ze(Ve,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=Ie(n),l._fieldLength=Ie(r),l._storedFields=Ie(i);for(const[c,h]of l._documentIds)l._idToShortId.set(h,c);for(const[c,h]of s){const m=new Map;for(const f of Object.keys(h)){let g=h[f];o===1&&(g=g.ds),m.set(parseInt(f,10),Ie(g))}l._index.set(c,m)}return l}static async loadJSAsync(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=await ke(n),l._fieldLength=await ke(r),l._storedFields=await ke(i);for(const[h,m]of l._documentIds)l._idToShortId.set(m,h);let c=0;for(const[h,m]of s){const f=new Map;for(const g of Object.keys(m)){let w=m[g];o===1&&(w=w.ds),f.set(parseInt(g,10),await ke(w))}++c%1e3===0&&await Nt(0),l._index.set(h,f)}return l}static instantiateMiniSearch(e,t){const{documentCount:s,nextId:n,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new ue(t);return c._documentCount=s,c._nextId=n,c._idToShortId=new Map,c._fieldIds=r,c._avgFieldLength=i,c._dirtCount=o||0,c._index=new X,c}executeQuery(e,t={}){if(e===ue.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const f={...t,...e,queries:void 0},g=e.queries.map(w=>this.executeQuery(w,f));return this.combineResults(g,f.combineWith)}const{tokenize:s,processTerm:n,searchOptions:r}=this._options,i={tokenize:s,processTerm:n,...r,...t},{tokenize:o,processTerm:l}=i,m=o(e).flatMap(f=>l(f)).filter(f=>!!f).map(Us(i)).map(f=>this.executeQuerySpec(f,i));return this.combineResults(m,i.combineWith)}executeQuerySpec(e,t){const s={...this._options.searchOptions,...t},n=(s.fields||this._options.fields).reduce((S,y)=>({...S,[y]:ze(s.boost,y)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:l}=s,{fuzzy:c,prefix:h}={...ht.weights,...i},m=this._index.get(e.term),f=this.termResults(e.term,e.term,1,e.termBoost,m,n,r,l);let g,w;if(e.prefix&&(g=this._index.atPrefix(e.term)),e.fuzzy){const S=e.fuzzy===!0?.2:e.fuzzy,y=S<1?Math.min(o,Math.round(e.term.length*S)):S;y&&(w=this._index.fuzzyGet(e.term,y))}if(g)for(const[S,y]of g){const R=S.length-e.term.length;if(!R)continue;w==null||w.delete(S);const A=h*S.length/(S.length+.3*R);this.termResults(e.term,S,A,e.termBoost,y,n,r,l,f)}if(w)for(const S of w.keys()){const[y,R]=w.get(S);if(!R)continue;const A=c*S.length/(S.length+R);this.termResults(e.term,S,A,e.termBoost,y,n,r,l,f)}return f}executeWildcardQuery(e){const t=new Map,s={...this._options.searchOptions,...e};for(const[n,r]of this._documentIds){const i=s.boostDocument?s.boostDocument(r,"",this._storedFields.get(n)):1;t.set(n,{score:i,terms:[],match:{}})}return t}combineResults(e,t=Ge){if(e.length===0)return new Map;const s=t.toLowerCase(),n=Ws[s];if(!n)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(n)||new Map}toJSON(){const e=[];for(const[t,s]of this._index){const n={};for(const[r,i]of s)n[r]=Object.fromEntries(i);e.push([t,n])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,s,n,r,i,o,l,c=new Map){if(r==null)return c;for(const h of Object.keys(i)){const m=i[h],f=this._fieldIds[h],g=r.get(f);if(g==null)continue;let w=g.size;const S=this._avgFieldLength[f];for(const y of g.keys()){if(!this._documentIds.has(y)){this.removeTerm(f,y,t),w-=1;continue}const R=o?o(this._documentIds.get(y),t,this._storedFields.get(y)):1;if(!R)continue;const A=g.get(y),J=this._fieldLength.get(y)[f],Q=Js(A,w,this._documentCount,J,S,l),W=s*n*m*R*Q,$=c.get(y);if($){$.score+=W,Gs($.terms,e);const j=ze($.match,t);j?j.push(h):$.match[t]=[h]}else c.set(y,{score:W,terms:[e],match:{[t]:[h]}})}}return c}addTerm(e,t,s){const n=this._index.fetch(s,vt);let r=n.get(e);if(r==null)r=new Map,r.set(t,1),n.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,s){if(!this._index.has(s)){this.warnDocumentChanged(t,e,s);return}const n=this._index.fetch(s,vt),r=n.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,s):r.get(t)<=1?r.size<=1?n.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(s).size===0&&this._index.delete(s)}warnDocumentChanged(e,t,s){for(const n of Object.keys(this._fieldIds))if(this._fieldIds[n]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${s}" was not present in field "${n}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,Ws={[Ge]:(a,e)=>{for(const t of e.keys()){const s=a.get(t);if(s==null)a.set(t,e.get(t));else{const{score:n,terms:r,match:i}=e.get(t);s.score=s.score+n,s.match=Object.assign(s.match,i),ft(s.terms,r)}}return a},[kt]:(a,e)=>{const t=new Map;for(const s of e.keys()){const n=a.get(s);if(n==null)continue;const{score:r,terms:i,match:o}=e.get(s);ft(n.terms,i),t.set(s,{score:n.score+r,terms:n.terms,match:Object.assign(n.match,o)})}return t},[Bs]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},Ks={k:1.2,b:.7,d:.5},Js=(a,e,t,s,n,r)=>{const{k:i,b:o,d:l}=r;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(i+1)/(a+i*(1-o+o*s/n)))},Us=a=>(e,t,s)=>{const n=typeof a.fuzzy=="function"?a.fuzzy(e,t,s):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,s):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,s):1;return{term:e,fuzzy:n,prefix:r,termBoost:i}},Ve={idField:"id",extractField:(a,e)=>a[e],stringifyField:(a,e)=>a.toString(),tokenize:a=>a.split(Hs),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},ht={combineWith:Ge,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Ks},qs={combineWith:kt,prefix:(a,e,t)=>e===t.length-1},Je={batchSize:1e3,batchWait:10},Ue={minDirtFactor:.1,minDirtCount:20},$e={...Je,...Ue},Gs=(a,e)=>{a.includes(e)||a.push(e)},ft=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},pt=({score:a},{score:e})=>e-a,vt=()=>new Map,Ie=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},ke=async a=>{const e=new Map;let t=0;for(const s of Object.keys(a))e.set(parseInt(s,10),a[s]),++t%1e3===0&&await Nt(0);return e},Nt=a=>new Promise(e=>setTimeout(e,a)),Hs=/[\n\r\p{Z}\p{P}]+/u;class Qs{constructor(e=10){Ae(this,"max");Ae(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const Ys=["aria-owns"],Zs={class:"shell"},Xs=["title"],en={class:"search-actions before"},tn=["title"],sn=["aria-activedescendant","aria-controls","placeholder"],nn={class:"search-actions"},rn=["title"],an=["disabled","title"],on=["id","role","aria-labelledby"],ln=["id","aria-selected"],cn=["href","aria-label","onMouseenter","onFocusin","data-index"],un={class:"titles"},dn=["innerHTML"],hn={class:"title main"},fn=["innerHTML"],pn={key:0,class:"excerpt-wrapper"},vn={key:0,class:"excerpt",inert:""},mn=["innerHTML"],gn={key:0,class:"no-results"},bn={class:"search-keyboard-shortcuts"},yn=["aria-label"],wn=["aria-label"],xn=["aria-label"],_n=["aria-label"],Sn=Dt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var _,C;const t=e,s=le(),n=le(),r=le(rs),i=ns(),{activate:o}=Ds(s,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,h=st(async()=>{var v,p,I,O,P,z,V,k,K;return at(ue.loadJSON((I=await((p=(v=r.value)[l.value])==null?void 0:p.call(v)))==null?void 0:I.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((O=c.value.search)==null?void 0:O.provider)==="local"&&((z=(P=c.value.search.options)==null?void 0:P.miniSearch)==null?void 0:z.searchOptions)},...((V=c.value.search)==null?void 0:V.provider)==="local"&&((K=(k=c.value.search.options)==null?void 0:k.miniSearch)==null?void 0:K.options)}))}),f=ge(()=>{var v,p;return((v=c.value.search)==null?void 0:v.provider)==="local"&&((p=c.value.search.options)==null?void 0:p.disableQueryPersistence)===!0}).value?he(""):Pt("vitepress:local-search-filter",""),g=zt("vitepress:local-search-detailed-list",((_=c.value.search)==null?void 0:_.provider)==="local"&&((C=c.value.search.options)==null?void 0:C.detailedView)===!0),w=ge(()=>{var v,p,I;return((v=c.value.search)==null?void 0:v.provider)==="local"&&(((p=c.value.search.options)==null?void 0:p.disableDetailedView)===!0||((I=c.value.search.options)==null?void 0:I.detailedView)===!1)}),S=ge(()=>{var p,I,O,P,z,V,k;const v=((p=c.value.search)==null?void 0:p.options)??c.value.algolia;return((z=(P=(O=(I=v==null?void 0:v.locales)==null?void 0:I[l.value])==null?void 0:O.translations)==null?void 0:P.button)==null?void 0:z.buttonText)||((k=(V=v==null?void 0:v.translations)==null?void 0:V.button)==null?void 0:k.buttonText)||"Search"});Vt(()=>{w.value&&(g.value=!1)});const y=le([]),R=he(!1);je(f,()=>{R.value=!1});const A=st(async()=>{if(n.value)return at(new zs(n.value))},null),J=new Qs(16);$t(()=>[h.value,f.value,g.value],async([v,p,I],O,P)=>{var ee,xe,He,Qe;(O==null?void 0:O[0])!==v&&J.clear();let z=!1;if(P(()=>{z=!0}),!v)return;y.value=v.search(p).slice(0,16),R.value=!0;const V=I?await Promise.all(y.value.map(B=>Q(B.id))):[];if(z)return;for(const{id:B,mod:te}of V){const se=B.slice(0,B.indexOf("#"));let Y=J.get(se);if(Y)continue;Y=new Map,J.set(se,Y);const G=te.default??te;if(G!=null&&G.render||G!=null&&G.setup){const ne=Zt(G);ne.config.warnHandler=()=>{},ne.provide(Xt,i),Object.defineProperties(ne.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ye=document.createElement("div");ne.mount(Ye),Ye.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(de=>{var et;const _e=(et=de.querySelector("a"))==null?void 0:et.getAttribute("href"),Ze=(_e==null?void 0:_e.startsWith("#"))&&_e.slice(1);if(!Ze)return;let Xe="";for(;(de=de.nextElementSibling)&&!/^h[1-6]$/i.test(de.tagName);)Xe+=de.outerHTML;Y.set(Ze,Xe)}),ne.unmount()}if(z)return}const k=new Set;if(y.value=y.value.map(B=>{const[te,se]=B.id.split("#"),Y=J.get(te),G=(Y==null?void 0:Y.get(se))??"";for(const ne in B.match)k.add(ne);return{...B,text:G}}),await fe(),z)return;await new Promise(B=>{var te;(te=A.value)==null||te.unmark({done:()=>{var se;(se=A.value)==null||se.markRegExp(T(k),{done:B})}})});const K=((ee=s.value)==null?void 0:ee.querySelectorAll(".result .excerpt"))??[];for(const B of K)(xe=B.querySelector('mark[data-markjs="true"]'))==null||xe.scrollIntoView({block:"center"});(Qe=(He=n.value)==null?void 0:He.firstElementChild)==null||Qe.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function Q(v){const p=es(v.slice(0,v.indexOf("#")));try{if(!p)throw new Error(`Cannot find file for id: ${v}`);return{id:v,mod:await import(p)}}catch(I){return console.error(I),{id:v,mod:{}}}}const W=he(),$=ge(()=>{var v;return((v=f.value)==null?void 0:v.length)<=0});function j(v=!0){var p,I;(p=W.value)==null||p.focus(),v&&((I=W.value)==null||I.select())}Me(()=>{j()});function we(v){v.pointerType==="mouse"&&j()}const M=he(-1),U=he(!0);je(y,v=>{M.value=v.length?0:-1,q()});function q(){fe(()=>{const v=document.querySelector(".result.selected");v==null||v.scrollIntoView({block:"nearest"})})}Se("ArrowUp",v=>{v.preventDefault(),M.value--,M.value<0&&(M.value=y.value.length-1),U.value=!0,q()}),Se("ArrowDown",v=>{v.preventDefault(),M.value++,M.value>=y.value.length&&(M.value=0),U.value=!0,q()});const N=jt();Se("Enter",v=>{if(v.isComposing||v.target instanceof HTMLButtonElement&&v.target.type!=="submit")return;const p=y.value[M.value];if(v.target instanceof HTMLInputElement&&!p){v.preventDefault();return}p&&(N.go(p.id),t("close"))}),Se("Escape",()=>{t("close")});const d=is({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Me(()=>{window.history.pushState(null,"",null)}),Bt("popstate",v=>{v.preventDefault(),t("close")});const b=Wt(Kt?document.body:null);Me(()=>{fe(()=>{b.value=!0,fe().then(()=>o())})}),Jt(()=>{b.value=!1});function E(){f.value="",fe().then(()=>j(!1))}function T(v){return new RegExp([...v].sort((p,I)=>I.length-p.length).map(p=>`(${ts(p)})`).join("|"),"gi")}function F(v){var O;if(!U.value)return;const p=(O=v.target)==null?void 0:O.closest(".result"),I=Number.parseInt(p==null?void 0:p.dataset.index);I>=0&&I!==M.value&&(M.value=I),U.value=!1}return(v,p)=>{var I,O,P,z,V;return H(),Ut(Yt,{to:"body"},[x("div",{ref_key:"el",ref:s,role:"button","aria-owns":(I=y.value)!=null&&I.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[x("div",{class:"backdrop",onClick:p[0]||(p[0]=k=>v.$emit("close"))}),x("div",Zs,[x("form",{class:"search-bar",onPointerup:p[4]||(p[4]=k=>we(k)),onSubmit:p[5]||(p[5]=qt(()=>{},["prevent"]))},[x("label",{title:S.value,id:"localsearch-label",for:"localsearch-input"},p[7]||(p[7]=[x("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)]),8,Xs),x("div",en,[x("button",{class:"back-button",title:L(d)("modal.backButtonTitle"),onClick:p[1]||(p[1]=k=>v.$emit("close"))},p[8]||(p[8]=[x("span",{class:"vpi-arrow-left local-search-icon"},null,-1)]),8,tn)]),Gt(x("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":p[2]||(p[2]=k=>Qt(f)?f.value=k:null),"aria-activedescendant":M.value>-1?"localsearch-item-"+M.value:void 0,"aria-autocomplete":"both","aria-controls":(O=y.value)!=null&&O.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:S.value,spellcheck:"false",type:"search"},null,8,sn),[[Ht,L(f)]]),x("div",nn,[w.value?Ee("",!0):(H(),Z("button",{key:0,class:nt(["toggle-layout-button",{"detailed-list":L(g)}]),type:"button",title:L(d)("modal.displayDetails"),onClick:p[3]||(p[3]=k=>M.value>-1&&(g.value=!L(g)))},p[9]||(p[9]=[x("span",{class:"vpi-layout-list local-search-icon"},null,-1)]),10,rn)),x("button",{class:"clear-button",type:"reset",disabled:$.value,title:L(d)("modal.resetButtonTitle"),onClick:E},p[10]||(p[10]=[x("span",{class:"vpi-delete local-search-icon"},null,-1)]),8,an)])],32),x("ul",{ref_key:"resultsEl",ref:n,id:(P=y.value)!=null&&P.length?"localsearch-list":void 0,role:(z=y.value)!=null&&z.length?"listbox":void 0,"aria-labelledby":(V=y.value)!=null&&V.length?"localsearch-label":void 0,class:"results",onMousemove:F},[(H(!0),Z(rt,null,it(y.value,(k,K)=>(H(),Z("li",{key:k.id,id:"localsearch-item-"+K,"aria-selected":M.value===K?"true":"false",role:"option"},[x("a",{href:k.id,class:nt(["result",{selected:M.value===K}]),"aria-label":[...k.titles,k.title].join(" > "),onMouseenter:ee=>!U.value&&(M.value=K),onFocusin:ee=>M.value=K,onClick:p[6]||(p[6]=ee=>v.$emit("close")),"data-index":K},[x("div",null,[x("div",un,[p[12]||(p[12]=x("span",{class:"title-icon"},"#",-1)),(H(!0),Z(rt,null,it(k.titles,(ee,xe)=>(H(),Z("span",{key:xe,class:"title"},[x("span",{class:"text",innerHTML:ee},null,8,dn),p[11]||(p[11]=x("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),x("span",hn,[x("span",{class:"text",innerHTML:k.title},null,8,fn)])]),L(g)?(H(),Z("div",pn,[k.text?(H(),Z("div",vn,[x("div",{class:"vp-doc",innerHTML:k.text},null,8,mn)])):Ee("",!0),p[13]||(p[13]=x("div",{class:"excerpt-gradient-bottom"},null,-1)),p[14]||(p[14]=x("div",{class:"excerpt-gradient-top"},null,-1))])):Ee("",!0)])],42,cn)],8,ln))),128)),L(f)&&!y.value.length&&R.value?(H(),Z("li",gn,[pe(ve(L(d)("modal.noResultsText"))+' "',1),x("strong",null,ve(L(f)),1),p[15]||(p[15]=pe('" '))])):Ee("",!0)],40,on),x("div",bn,[x("span",null,[x("kbd",{"aria-label":L(d)("modal.footer.navigateUpKeyAriaLabel")},p[16]||(p[16]=[x("span",{class:"vpi-arrow-up navigate-icon"},null,-1)]),8,yn),x("kbd",{"aria-label":L(d)("modal.footer.navigateDownKeyAriaLabel")},p[17]||(p[17]=[x("span",{class:"vpi-arrow-down navigate-icon"},null,-1)]),8,wn),pe(" "+ve(L(d)("modal.footer.navigateText")),1)]),x("span",null,[x("kbd",{"aria-label":L(d)("modal.footer.selectKeyAriaLabel")},p[18]||(p[18]=[x("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)]),8,xn),pe(" "+ve(L(d)("modal.footer.selectText")),1)]),x("span",null,[x("kbd",{"aria-label":L(d)("modal.footer.closeKeyAriaLabel")},"esc",8,_n),pe(" "+ve(L(d)("modal.footer.closeText")),1)])])])],8,Ys)])}}}),Fn=ss(Sn,[["__scopeId","data-v-ce626c7c"]]);export{Fn as default}; diff --git a/assets/chunks/framework.CrOSaJJH.js b/assets/chunks/framework.CrOSaJJH.js deleted file mode 100644 index 58842a6..0000000 --- a/assets/chunks/framework.CrOSaJJH.js +++ /dev/null @@ -1,26 +0,0 @@ -/** -* @vue/shared v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function bl(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const _l={},wl=()=>{},Sl=Object.assign,Tl=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},El=Object.prototype.hasOwnProperty,$n=(e,t)=>El.call(e,t),Je=Array.isArray,Kt=e=>Bn(e)==="[object Map]",xl=e=>Bn(e)==="[object Set]",Zt=e=>typeof e=="function",Cl=e=>typeof e=="string",cn=e=>typeof e=="symbol",Ft=e=>e!==null&&typeof e=="object",Al=Object.prototype.toString,Bn=e=>Al.call(e),Rl=e=>Bn(e).slice(8,-1),Ol=e=>Bn(e)==="[object Object]",Gs=e=>Cl(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,rt=(e,t)=>!Object.is(e,t),Ml=(e,t,n,s=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})};/** -* @vue/reactivity v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let we;class Ti{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=we,!t&&we&&(this.index=(we.scopes||(we.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;if(Gt){let t=Gt;for(Gt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;qt;){let t=qt;for(qt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ri(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Oi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Xs(s),Ll(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ls(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Mi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Mi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===en))return;e.globalVersion=en;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Ls(e)){e.flags&=-3;return}const n=ee,s=Ne;ee=e,Ne=!0;try{Ri(e);const r=e.fn(e._value);(t.version===0||rt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ee=n,Ne=s,Oi(e),e.flags&=-3}}function Xs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Xs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ll(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ne=!0;const Pi=[];function lt(){Pi.push(Ne),Ne=!1}function ct(){const e=Pi.pop();Ne=e===void 0?!0:e}function Cr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ee;ee=void 0;try{t()}finally{ee=n}}}let en=0;class Il{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Kn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!ee||!Ne||ee===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ee)n=this.activeLink=new Il(ee,this),ee.deps?(n.prevDep=ee.depsTail,ee.depsTail.nextDep=n,ee.depsTail=n):ee.deps=ee.depsTail=n,Li(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=ee.depsTail,n.nextDep=void 0,ee.depsTail.nextDep=n,ee.depsTail=n,ee.deps===n&&(ee.deps=s)}return n}trigger(t){this.version++,en++,this.notify(t)}notify(t){Ys();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Js()}}}function Li(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Li(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Nn=new WeakMap,pt=Symbol(""),Is=Symbol(""),tn=Symbol("");function pe(e,t,n){if(Ne&&ee){let s=Nn.get(e);s||Nn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Kn),r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=Nn.get(e);if(!o){en++;return}const l=c=>{c&&c.trigger()};if(Ys(),t==="clear")o.forEach(l);else{const c=Je(e),f=c&&Gs(n);if(c&&n==="length"){const a=Number(s);o.forEach((d,g)=>{(g==="length"||g===tn||!cn(g)&&g>=a)&&l(d)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),f&&l(o.get(tn)),t){case"add":c?f&&l(o.get("length")):(l(o.get(pt)),Kt(e)&&l(o.get(Is)));break;case"delete":c||(l(o.get(pt)),Kt(e)&&l(o.get(Is)));break;case"set":Kt(e)&&l(o.get(pt));break}}Js()}function $l(e,t){const n=Nn.get(e);return n&&n.get(t)}function Et(e){const t=z(e);return t===e?t:(pe(t,"iterate",tn),Le(e)?t:t.map(ge))}function qn(e){return pe(e=z(e),"iterate",tn),e}const Nl={__proto__:null,[Symbol.iterator](){return as(this,Symbol.iterator,ge)},concat(...e){return Et(this).concat(...e.map(t=>Je(t)?Et(t):t))},entries(){return as(this,"entries",e=>(e[1]=ge(e[1]),e))},every(e,t){return Ke(this,"every",e,t,void 0,arguments)},filter(e,t){return Ke(this,"filter",e,t,n=>n.map(ge),arguments)},find(e,t){return Ke(this,"find",e,t,ge,arguments)},findIndex(e,t){return Ke(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ke(this,"findLast",e,t,ge,arguments)},findLastIndex(e,t){return Ke(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ke(this,"forEach",e,t,void 0,arguments)},includes(...e){return fs(this,"includes",e)},indexOf(...e){return fs(this,"indexOf",e)},join(e){return Et(this).join(e)},lastIndexOf(...e){return fs(this,"lastIndexOf",e)},map(e,t){return Ke(this,"map",e,t,void 0,arguments)},pop(){return kt(this,"pop")},push(...e){return kt(this,"push",e)},reduce(e,...t){return Ar(this,"reduce",e,t)},reduceRight(e,...t){return Ar(this,"reduceRight",e,t)},shift(){return kt(this,"shift")},some(e,t){return Ke(this,"some",e,t,void 0,arguments)},splice(...e){return kt(this,"splice",e)},toReversed(){return Et(this).toReversed()},toSorted(e){return Et(this).toSorted(e)},toSpliced(...e){return Et(this).toSpliced(...e)},unshift(...e){return kt(this,"unshift",e)},values(){return as(this,"values",ge)}};function as(e,t,n){const s=qn(e),r=s[t]();return s!==e&&!Le(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const Fl=Array.prototype;function Ke(e,t,n,s,r,i){const o=qn(e),l=o!==e&&!Le(e),c=o[t];if(c!==Fl[t]){const d=c.apply(e,i);return l?ge(d):d}let f=n;o!==e&&(l?f=function(d,g){return n.call(this,ge(d),g,e)}:n.length>2&&(f=function(d,g){return n.call(this,d,g,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function Ar(e,t,n,s){const r=qn(e);let i=n;return r!==e&&(Le(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,ge(l),c,e)}),r[t](i,...s)}function fs(e,t,n){const s=z(e);pe(s,"iterate",tn);const r=s[t](...n);return(r===-1||r===!1)&&Zs(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function kt(e,t,n=[]){lt(),Ys();const s=z(e)[t].apply(e,n);return Js(),ct(),s}const Dl=bl("__proto__,__v_isRef,__isVue"),Ii=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(cn));function Hl(e){cn(e)||(e=String(e));const t=z(this);return pe(t,"has",e),t.hasOwnProperty(e)}class $i{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Yl:Hi:i?Di:Fi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=Je(t);if(!r){let c;if(o&&(c=Nl[n]))return c;if(n==="hasOwnProperty")return Hl}const l=Reflect.get(t,n,ce(t)?t:s);return(cn(n)?Ii.has(n):Dl(n))||(r||pe(t,"get",n),i)?l:ce(l)?o&&Gs(n)?l:l.value:Ft(l)?r?Gn(l):Lt(l):l}}class Ni extends $i{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=wt(i);if(!Le(s)&&!wt(s)&&(i=z(i),s=z(s)),!Je(t)&&ce(i)&&!ce(s))return c?!1:(i.value=s,!0)}const o=Je(t)&&Gs(n)?Number(n)e,yn=e=>Reflect.getPrototypeOf(e);function Wl(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=Kt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?$s:t?Ns:ge;return!t&&pe(i,"iterate",c?Is:pt),{next(){const{value:d,done:g}=f.next();return g?{value:d,done:g}:{value:l?[a(d[0]),a(d[1])]:a(d),done:g}},[Symbol.iterator](){return this}}}}function vn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Bl(e,t){const n={get(r){const i=this.__v_raw,o=z(i),l=z(r);e||(rt(r,l)&&pe(o,"get",r),pe(o,"get",l));const{has:c}=yn(o),f=t?$s:e?Ns:ge;if(c.call(o,r))return f(i.get(r));if(c.call(o,l))return f(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&pe(z(r),"iterate",pt),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=z(i),l=z(r);return e||(rt(r,l)&&pe(o,"has",r),pe(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=z(l),f=t?$s:e?Ns:ge;return!e&&pe(c,"iterate",pt),l.forEach((a,d)=>r.call(i,f(a),f(d),o))}};return Sl(n,e?{add:vn("add"),set:vn("set"),delete:vn("delete"),clear:vn("clear")}:{add(r){!t&&!Le(r)&&!wt(r)&&(r=z(r));const i=z(this);return yn(i).has.call(i,r)||(i.add(r),Ge(i,"add",r,r)),this},set(r,i){!t&&!Le(i)&&!wt(i)&&(i=z(i));const o=z(this),{has:l,get:c}=yn(o);let f=l.call(o,r);f||(r=z(r),f=l.call(o,r));const a=c.call(o,r);return o.set(r,i),f?rt(i,a)&&Ge(o,"set",r,i):Ge(o,"add",r,i),this},delete(r){const i=z(this),{has:o,get:l}=yn(i);let c=o.call(i,r);c||(r=z(r),c=o.call(i,r)),l&&l.call(i,r);const f=i.delete(r);return c&&Ge(i,"delete",r,void 0),f},clear(){const r=z(this),i=r.size!==0,o=r.clear();return i&&Ge(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Wl(r,e,t)}),n}function zs(e,t){const n=Bl(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get($n(n,r)&&r in s?n:s,r,i)}const Kl={get:zs(!1,!1)},ql={get:zs(!1,!0)},Gl={get:zs(!0,!1)};const Fi=new WeakMap,Di=new WeakMap,Hi=new WeakMap,Yl=new WeakMap;function Jl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Xl(e){return e.__v_skip||!Object.isExtensible(e)?0:Jl(Rl(e))}function Lt(e){return wt(e)?e:Qs(e,!1,Vl,Kl,Fi)}function zl(e){return Qs(e,!1,Ul,ql,Di)}function Gn(e){return Qs(e,!0,kl,Gl,Hi)}function Qs(e,t,n,s,r){if(!Ft(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Xl(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function gt(e){return wt(e)?gt(e.__v_raw):!!(e&&e.__v_isReactive)}function wt(e){return!!(e&&e.__v_isReadonly)}function Le(e){return!!(e&&e.__v_isShallow)}function Zs(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function Rn(e){return!$n(e,"__v_skip")&&Object.isExtensible(e)&&Ml(e,"__v_skip",!0),e}const ge=e=>Ft(e)?Lt(e):e,Ns=e=>Ft(e)?Gn(e):e;function ce(e){return e?e.__v_isRef===!0:!1}function Fe(e){return ji(e,!1)}function Te(e){return ji(e,!0)}function ji(e,t){return ce(e)?e:new Ql(e,t)}class Ql{constructor(t,n){this.dep=new Kn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:ge(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Le(t)||wt(t);t=s?t:z(t),rt(t,n)&&(this._rawValue=t,this._value=s?t:ge(t),this.dep.trigger())}}function er(e){return ce(e)?e.value:e}function oe(e){return Zt(e)?e():er(e)}const Zl={get:(e,t,n)=>t==="__v_raw"?e:er(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ce(r)&&!ce(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Vi(e){return gt(e)?e:new Proxy(e,Zl)}class ec{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Kn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function tc(e){return new ec(e)}function xu(e){const t=Je(e)?new Array(e.length):{};for(const n in e)t[n]=ki(e,n);return t}class nc{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 $l(z(this._object),this._key)}}class sc{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function rc(e,t,n){return ce(e)?e:Zt(e)?new sc(e):Ft(e)&&arguments.length>1?ki(e,t,n):Fe(e)}function ki(e,t,n){const s=e[t];return ce(s)?s:new nc(e,t,n)}class ic{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Kn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=en-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ee!==this)return Ai(this,!0),!0}get value(){const t=this.dep.track();return Mi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function oc(e,t,n=!1){let s,r;return Zt(e)?s=e:(s=e.get,r=e.set),new ic(s,r,n)}const bn={},Fn=new WeakMap;let dt;function lc(e,t=!1,n=dt){if(n){let s=Fn.get(n);s||Fn.set(n,s=[]),s.push(e)}}function cc(e,t,n=_l){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=m=>r?m:Le(m)||r===!1||r===0?Ye(m,1):Ye(m);let a,d,g,y,_=!1,b=!1;if(ce(e)?(d=()=>e.value,_=Le(e)):gt(e)?(d=()=>f(e),_=!0):Je(e)?(b=!0,_=e.some(m=>gt(m)||Le(m)),d=()=>e.map(m=>{if(ce(m))return m.value;if(gt(m))return f(m);if(Zt(m))return c?c(m,2):m()})):Zt(e)?t?d=c?()=>c(e,2):e:d=()=>{if(g){lt();try{g()}finally{ct()}}const m=dt;dt=a;try{return c?c(e,3,[y]):e(y)}finally{dt=m}}:d=wl,t&&r){const m=d,M=r===!0?1/0:r;d=()=>Ye(m(),M)}const k=Ei(),P=()=>{a.stop(),k&&k.active&&Tl(k.effects,a)};if(i&&t){const m=t;t=(...M)=>{m(...M),P()}}let D=b?new Array(e.length).fill(bn):bn;const p=m=>{if(!(!(a.flags&1)||!a.dirty&&!m))if(t){const M=a.run();if(r||_||(b?M.some((H,R)=>rt(H,D[R])):rt(M,D))){g&&g();const H=dt;dt=a;try{const R=[M,D===bn?void 0:b&&D[0]===bn?[]:D,y];c?c(t,3,R):t(...R),D=M}finally{dt=H}}}else a.run()};return l&&l(p),a=new xi(d),a.scheduler=o?()=>o(p,!1):p,y=m=>lc(m,!1,a),g=a.onStop=()=>{const m=Fn.get(a);if(m){if(c)c(m,4);else for(const M of m)M();Fn.delete(a)}},t?s?p(!0):D=a.run():o?o(p.bind(null,!0),!0):a.run(),P.pause=a.pause.bind(a),P.resume=a.resume.bind(a),P.stop=P,P}function Ye(e,t=1/0,n){if(t<=0||!Ft(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ce(e))Ye(e.value,t,n);else if(Je(e))for(let s=0;s{Ye(s,t,n)});else if(Ol(e)){for(const s in e)Ye(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ye(e[s],t,n)}return e}/** -* @vue/shared v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function ac(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ne={},Ot=[],Xe=()=>{},fc=()=>!1,Yn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ui=e=>e.startsWith("onUpdate:"),Ee=Object.assign,Wi=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},uc=Object.prototype.hasOwnProperty,te=(e,t)=>uc.call(e,t),Y=Array.isArray,dc=e=>nr(e)==="[object Map]",hc=e=>nr(e)==="[object Set]",G=e=>typeof e=="function",ve=e=>typeof e=="string",tr=e=>typeof e=="symbol",ue=e=>e!==null&&typeof e=="object",Bi=e=>(ue(e)||G(e))&&G(e.then)&&G(e.catch),Ki=Object.prototype.toString,nr=e=>Ki.call(e),pc=e=>nr(e)==="[object Object]",Mt=ac(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Jn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},gc=/-(\w)/g,De=Jn(e=>e.replace(gc,(t,n)=>n?n.toUpperCase():"")),mc=/\B([A-Z])/g,an=Jn(e=>e.replace(mc,"-$1").toLowerCase()),sr=Jn(e=>e.charAt(0).toUpperCase()+e.slice(1)),On=Jn(e=>e?`on${sr(e)}`:""),us=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},vc=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Rr;const Xn=()=>Rr||(Rr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function rr(e){if(Y(e)){const t={};for(let n=0;n{if(n){const s=n.split(_c);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ir(e){let t="";if(ve(e))t=e;else if(Y(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Tc=e=>ve(e)?e:e==null?"":Y(e)||ue(e)&&(e.toString===Ki||!G(e.toString))?qi(e)?Tc(e.value):JSON.stringify(e,Gi,2):String(e),Gi=(e,t)=>qi(t)?Gi(e,t.value):dc(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[ds(s,i)+" =>"]=r,n),{})}:hc(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ds(n))}:tr(t)?ds(t):ue(t)&&!Y(t)&&!pc(t)?String(t):t,ds=(e,t="")=>{var n;return tr(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/runtime-core v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function fn(e,t,n,s){try{return s?e(...s):e()}catch(r){un(r,t,n)}}function He(e,t,n,s){if(G(e)){const r=fn(e,t,n,s);return r&&Bi(r)&&r.catch(i=>{un(i,t,n)}),r}if(Y(e)){const r=[];for(let i=0;i>>1,r=Se[s],i=nn(r);i=nn(n)?Se.push(e):Se.splice(xc(t),0,e),e.flags|=1,Ji()}}function Ji(){Dn||(Dn=Yi.then(Xi))}function Cc(e){Y(e)?Pt.push(...e):tt&&e.id===-1?tt.splice(Ct+1,0,e):e.flags&1||(Pt.push(e),e.flags|=1),Ji()}function Or(e,t,n=We+1){for(;nnn(n)-nn(s));if(Pt.length=0,tt){tt.push(...t);return}for(tt=t,Ct=0;Cte.id==null?e.flags&2?-1:1/0:e.id;function Xi(e){try{for(We=0;We{s._d&&Br(-1);const i=jn(t);let o;try{o=e(...r)}finally{jn(i),s._d&&Br(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Cu(e,t){if(fe===null)return e;const n=ns(fe),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,Yt=e=>e&&(e.disabled||e.disabled===""),Mr=e=>e&&(e.defer||e.defer===""),Pr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Lr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Fs=(e,t)=>{const n=e&&e.to;return ve(n)?t?t(n):null:n},eo={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:d,pbc:g,o:{insert:y,querySelector:_,createText:b,createComment:k}}=f,P=Yt(t.props);let{shapeFlag:D,children:p,dynamicChildren:m}=t;if(e==null){const M=t.el=b(""),H=t.anchor=b("");y(M,n,s),y(H,n,s);const R=(T,O)=>{D&16&&(r&&r.isCE&&(r.ce._teleportTarget=T),a(p,T,O,r,i,o,l,c))},j=()=>{const T=t.target=Fs(t.props,_),O=to(T,t,b,y);T&&(o!=="svg"&&Pr(T)?o="svg":o!=="mathml"&&Lr(T)&&(o="mathml"),P||(R(T,O),Mn(t,!1)))};P&&(R(n,H),Mn(t,!0)),Mr(t.props)?_e(()=>{j(),t.el.__isMounted=!0},i):j()}else{if(Mr(t.props)&&!e.el.__isMounted){_e(()=>{eo.process(e,t,n,s,r,i,o,l,c,f),delete e.el.__isMounted},i);return}t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,H=t.target=e.target,R=t.targetAnchor=e.targetAnchor,j=Yt(e.props),T=j?n:H,O=j?M:R;if(o==="svg"||Pr(H)?o="svg":(o==="mathml"||Lr(H))&&(o="mathml"),m?(g(e.dynamicChildren,m,T,r,i,o,l),hr(e,t,!0)):c||d(e,t,T,O,r,i,o,l,!1),P)j?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):_n(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const A=t.target=Fs(t.props,_);A&&_n(t,A,null,f,0)}else j&&_n(t,H,R,f,1);Mn(t,P)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:d,props:g}=e;if(d&&(r(f),r(a)),i&&r(c),o&16){const y=i||!Yt(g);for(let _=0;_{e.isMounted=!0}),ao(()=>{e.isUnmounting=!0}),e}const Oe=[Function,Array],so={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Oe,onEnter:Oe,onAfterEnter:Oe,onEnterCancelled:Oe,onBeforeLeave:Oe,onLeave:Oe,onAfterLeave:Oe,onLeaveCancelled:Oe,onBeforeAppear:Oe,onAppear:Oe,onAfterAppear:Oe,onAppearCancelled:Oe},ro=e=>{const t=e.subTree;return t.component?ro(t.component):t},Oc={name:"BaseTransition",props:so,setup(e,{slots:t}){const n=Ht(),s=no();return()=>{const r=t.default&&lr(t.default(),!0);if(!r||!r.length)return;const i=io(r),o=z(e),{mode:l}=o;if(s.isLeaving)return hs(i);const c=Ir(i);if(!c)return hs(i);let f=sn(c,o,s,n,d=>f=d);c.type!==ye&&St(c,f);let a=n.subTree&&Ir(n.subTree);if(a&&a.type!==ye&&!ht(c,a)&&ro(n).type!==ye){let d=sn(a,o,s,n);if(St(a,d),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,a=void 0},hs(i);l==="in-out"&&c.type!==ye?d.delayLeave=(g,y,_)=>{const b=oo(s,a);b[String(a.key)]=a,g[nt]=()=>{y(),g[nt]=void 0,delete f.delayedLeave,a=void 0},f.delayedLeave=()=>{_(),delete f.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function io(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const Mc=Oc;function oo(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 sn(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:d,onBeforeLeave:g,onLeave:y,onAfterLeave:_,onLeaveCancelled:b,onBeforeAppear:k,onAppear:P,onAfterAppear:D,onAppearCancelled:p}=t,m=String(e.key),M=oo(n,e),H=(T,O)=>{T&&He(T,s,9,O)},R=(T,O)=>{const A=O[1];H(T,O),Y(T)?T.every(w=>w.length<=1)&&A():T.length<=1&&A()},j={mode:o,persisted:l,beforeEnter(T){let O=c;if(!n.isMounted)if(i)O=k||c;else return;T[nt]&&T[nt](!0);const A=M[m];A&&ht(e,A)&&A.el[nt]&&A.el[nt](),H(O,[T])},enter(T){let O=f,A=a,w=d;if(!n.isMounted)if(i)O=P||f,A=D||a,w=p||d;else return;let N=!1;const J=T[wn]=re=>{N||(N=!0,re?H(w,[T]):H(A,[T]),j.delayedLeave&&j.delayedLeave(),T[wn]=void 0)};O?R(O,[T,J]):J()},leave(T,O){const A=String(e.key);if(T[wn]&&T[wn](!0),n.isUnmounting)return O();H(g,[T]);let w=!1;const N=T[nt]=J=>{w||(w=!0,O(),J?H(b,[T]):H(_,[T]),T[nt]=void 0,M[A]===e&&delete M[A])};M[A]=e,y?R(y,[T,N]):N()},clone(T){const O=sn(T,t,n,s,r);return r&&r(O),O}};return j}function hs(e){if(dn(e))return e=it(e),e.children=null,e}function Ir(e){if(!dn(e))return Zi(e.type)&&e.children?io(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&G(n.default))return n.default()}}function St(e,t){e.shapeFlag&6&&e.component?(e.transition=t,St(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 lr(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;irn(_,t&&(Y(t)?t[b]:t),n,s,r));return}if(mt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&rn(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ns(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===ne?l.refs={}:l.refs,d=l.setupState,g=z(d),y=d===ne?()=>!1:_=>te(g,_);if(f!=null&&f!==c&&(ve(f)?(a[f]=null,y(f)&&(d[f]=null)):ce(f)&&(f.value=null)),G(c))fn(c,l,12,[o,a]);else{const _=ve(c),b=ce(c);if(_||b){const k=()=>{if(e.f){const P=_?y(c)?d[c]:a[c]:c.value;r?Y(P)&&Wi(P,i):Y(P)?P.includes(i)||P.push(i):_?(a[c]=[i],y(c)&&(d[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else _?(a[c]=o,y(c)&&(d[c]=o)):b&&(c.value=o,e.k&&(a[e.k]=o))};o?(k.id=-1,_e(k,n)):k()}}}let $r=!1;const xt=()=>{$r||(console.error("Hydration completed but contains mismatches."),$r=!0)},Pc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Lc=e=>e.namespaceURI.includes("MathML"),Sn=e=>{if(e.nodeType===1){if(Pc(e))return"svg";if(Lc(e))return"mathml"}},Rt=e=>e.nodeType===8;function Ic(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),Hn(),m._vnode=p;return}d(m.firstChild,p,null,null,null),Hn(),m._vnode=p},d=(p,m,M,H,R,j=!1)=>{j=j||!!m.dynamicChildren;const T=Rt(p)&&p.data==="[",O=()=>b(p,m,M,H,R,T),{type:A,ref:w,shapeFlag:N,patchFlag:J}=m;let re=p.nodeType;m.el=p,J===-2&&(j=!1,m.dynamicChildren=null);let U=null;switch(A){case bt:re!==3?m.children===""?(c(m.el=r(""),o(p),p),U=p):U=O():(p.data!==m.children&&(xt(),p.data=m.children),U=i(p));break;case ye:D(p)?(U=i(p),P(m.el=p.content.firstChild,p,M)):re!==8||T?U=O():U=i(p);break;case Xt:if(T&&(p=i(p),re=p.nodeType),re===1||re===3){U=p;const q=!m.children.length;for(let V=0;V{j=j||!!m.dynamicChildren;const{type:T,props:O,patchFlag:A,shapeFlag:w,dirs:N,transition:J}=m,re=T==="input"||T==="option";if(re||A!==-1){N&&Be(m,null,M,"created");let U=!1;if(D(p)){U=Ao(null,J)&&M&&M.vnode.props&&M.vnode.props.appear;const V=p.content.firstChild;U&&J.beforeEnter(V),P(V,p,M),m.el=p=V}if(w&16&&!(O&&(O.innerHTML||O.textContent))){let V=y(p.firstChild,m,p,M,H,R,j);for(;V;){Tn(p,1)||xt();const le=V;V=V.nextSibling,l(le)}}else if(w&8){let V=m.children;V[0]===` -`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(V=V.slice(1)),p.textContent!==V&&(Tn(p,0)||xt(),p.textContent=m.children)}if(O){if(re||!j||A&48){const V=p.tagName.includes("-");for(const le in O)(re&&(le.endsWith("value")||le==="indeterminate")||Yn(le)&&!Mt(le)||le[0]==="."||V)&&s(p,le,null,O[le],void 0,M)}else if(O.onClick)s(p,"onClick",null,O.onClick,void 0,M);else if(A&4&>(O.style))for(const V in O.style)O.style[V]}let q;(q=O&&O.onVnodeBeforeMount)&&Me(q,M,m),N&&Be(m,null,M,"beforeMount"),((q=O&&O.onVnodeMounted)||N||U)&&Io(()=>{q&&Me(q,M,m),U&&J.enter(p),N&&Be(m,null,M,"mounted")},H)}return p.nextSibling},y=(p,m,M,H,R,j,T)=>{T=T||!!m.dynamicChildren;const O=m.children,A=O.length;for(let w=0;w{const{slotScopeIds:T}=m;T&&(R=R?R.concat(T):T);const O=o(p),A=y(i(p),m,O,M,H,R,j);return A&&Rt(A)&&A.data==="]"?i(m.anchor=A):(xt(),c(m.anchor=f("]"),O,A),A)},b=(p,m,M,H,R,j)=>{if(Tn(p.parentElement,1)||xt(),m.el=null,j){const A=k(p);for(;;){const w=i(p);if(w&&w!==A)l(w);else break}}const T=i(p),O=o(p);return l(p),n(null,m,O,T,M,H,Sn(O),R),M&&(M.vnode.el=m.el,Po(M,m.el)),T},k=(p,m="[",M="]")=>{let H=0;for(;p;)if(p=i(p),p&&Rt(p)&&(p.data===m&&H++,p.data===M)){if(H===0)return i(p);H--}return p},P=(p,m,M)=>{const H=m.parentNode;H&&H.replaceChild(p,m);let R=M;for(;R;)R.vnode.el===m&&(R.vnode.el=R.subTree.el=p),R=R.parent},D=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,d]}const Nr="data-allow-mismatch",$c={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function Tn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Nr);)e=e.parentElement;const n=e&&e.getAttribute(Nr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes($c[t])}}Xn().requestIdleCallback;Xn().cancelIdleCallback;function Nc(e,t){if(Rt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Rt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const mt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Ru(e){G(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,d=0;const g=()=>(d++,f=null,y()),y=()=>{let _;return f||(_=f=t().catch(b=>{if(b=b instanceof Error?b:new Error(String(b)),c)return new Promise((k,P)=>{c(b,()=>k(g()),()=>P(b),d+1)});throw b}).then(b=>_!==f&&f?f:(b&&(b.__esModule||b[Symbol.toStringTag]==="Module")&&(b=b.default),a=b,b)))};return cr({name:"AsyncComponentWrapper",__asyncLoader:y,__asyncHydrate(_,b,k){const P=i?()=>{const D=i(k,p=>Nc(_,p));D&&(b.bum||(b.bum=[])).push(D)}:k;a?P():y().then(()=>!b.isUnmounted&&P())},get __asyncResolved(){return a},setup(){const _=ae;if(ar(_),a)return()=>ps(a,_);const b=p=>{f=null,un(p,_,13,!s)};if(l&&_.suspense||It)return y().then(p=>()=>ps(p,_)).catch(p=>(b(p),()=>s?ie(s,{error:p}):null));const k=Fe(!1),P=Fe(),D=Fe(!!r);return r&&setTimeout(()=>{D.value=!1},r),o!=null&&setTimeout(()=>{if(!k.value&&!P.value){const p=new Error(`Async component timed out after ${o}ms.`);b(p),P.value=p}},o),y().then(()=>{k.value=!0,_.parent&&dn(_.parent.vnode)&&_.parent.update()}).catch(p=>{b(p),P.value=p}),()=>{if(k.value&&a)return ps(a,_);if(P.value&&s)return ie(s,{error:P.value});if(n&&!D.value)return ie(n)}}})}function ps(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ie(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const dn=e=>e.type.__isKeepAlive;function Fc(e,t){lo(e,"a",t)}function Dc(e,t){lo(e,"da",t)}function lo(e,t,n=ae){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Qn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)dn(r.parent.vnode)&&Hc(s,t,n,r),r=r.parent}}function Hc(e,t,n,s){const r=Qn(t,e,s,!0);Zn(()=>{Wi(s[t],r)},n)}function Qn(e,t,n=ae,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{lt();const l=hn(n),c=He(t,n,e,o);return l(),ct(),c});return s?r.unshift(i):r.push(i),i}}const Qe=e=>(t,n=ae)=>{(!It||e==="sp")&&Qn(e,(...s)=>t(...s),n)},jc=Qe("bm"),Dt=Qe("m"),Vc=Qe("bu"),co=Qe("u"),ao=Qe("bum"),Zn=Qe("um"),kc=Qe("sp"),Uc=Qe("rtg"),Wc=Qe("rtc");function Bc(e,t=ae){Qn("ec",e,t)}const fr="components",Kc="directives";function Ou(e,t){return ur(fr,e,!0,t)||e}const fo=Symbol.for("v-ndc");function Mu(e){return ve(e)?ur(fr,e,!1)||e:e||fo}function Pu(e){return ur(Kc,e)}function ur(e,t,n=!0,s=!1){const r=fe||ae;if(r){const i=r.type;if(e===fr){const l=Oa(i,!1);if(l&&(l===t||l===De(t)||l===sr(De(t))))return i}const o=Fr(r[e]||i[e],t)||Fr(r.appContext[e],t);return!o&&s?i:o}}function Fr(e,t){return e&&(e[t]||e[De(t)]||e[sr(De(t))])}function Lu(e,t,n,s){let r;const i=n,o=Y(e);if(o||ve(e)){const l=o&>(e);let c=!1;l&&(c=!Le(e),e=qn(e)),r=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;c{const i=s.fn(...r);return i&&(i.key=s.key),i}:s.fn)}return e}function $u(e,t,n={},s,r){if(fe.ce||fe.parent&&mt(fe.parent)&&fe.parent.ce)return t!=="default"&&(n.name=t),ks(),Us(me,null,[ie("slot",n,s&&s())],64);let i=e[t];i&&i._c&&(i._d=!1),ks();const o=i&&uo(i(n)),l=n.key||o&&o.key,c=Us(me,{key:(l&&!tr(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function uo(e){return e.some(t=>ln(t)?!(t.type===ye||t.type===me&&!uo(t.children)):!0)?e:null}function Nu(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:On(s)]=e[s];return n}const Ds=e=>e?Ho(e)?ns(e):Ds(e.parent):null,Jt=Ee(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=>Ds(e.parent),$root:e=>Ds(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>po(e),$forceUpdate:e=>e.f||(e.f=()=>{or(e.update)}),$nextTick:e=>e.n||(e.n=zn.bind(e.proxy)),$watch:e=>ha.bind(e)}),gs=(e,t)=>e!==ne&&!e.__isScriptSetup&&te(e,t),qc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const y=o[t];if(y!==void 0)switch(y){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(gs(s,t))return o[t]=1,s[t];if(r!==ne&&te(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&te(f,t))return o[t]=3,i[t];if(n!==ne&&te(n,t))return o[t]=4,n[t];Hs&&(o[t]=0)}}const a=Jt[t];let d,g;if(a)return t==="$attrs"&&pe(e.attrs,"get",""),a(e);if((d=l.__cssModules)&&(d=d[t]))return d;if(n!==ne&&te(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,te(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return gs(r,t)?(r[t]=n,!0):s!==ne&&te(s,t)?(s[t]=n,!0):te(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==ne&&te(e,o)||gs(t,o)||(l=i[0])&&te(l,o)||te(s,o)||te(Jt,o)||te(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:te(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Fu(){return Gc().slots}function Gc(){const e=Ht();return e.setupContext||(e.setupContext=Vo(e))}function Dr(e){return Y(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Hs=!0;function Yc(e){const t=po(e),n=e.proxy,s=e.ctx;Hs=!1,t.beforeCreate&&Hr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:d,mounted:g,beforeUpdate:y,updated:_,activated:b,deactivated:k,beforeDestroy:P,beforeUnmount:D,destroyed:p,unmounted:m,render:M,renderTracked:H,renderTriggered:R,errorCaptured:j,serverPrefetch:T,expose:O,inheritAttrs:A,components:w,directives:N,filters:J}=t;if(f&&Jc(f,s,null),o)for(const q in o){const V=o[q];G(V)&&(s[q]=V.bind(n))}if(r){const q=r.call(n,n);ue(q)&&(e.data=Lt(q))}if(Hs=!0,i)for(const q in i){const V=i[q],le=G(V)?V.bind(n,n):G(V.get)?V.get.bind(n,n):Xe,gn=!G(V)&&G(V.set)?V.set.bind(n):Xe,at=se({get:le,set:gn});Object.defineProperty(s,q,{enumerable:!0,configurable:!0,get:()=>at.value,set:Ve=>at.value=Ve})}if(l)for(const q in l)ho(l[q],s,n,q);if(c){const q=G(c)?c.call(n):c;Reflect.ownKeys(q).forEach(V=>{ta(V,q[V])})}a&&Hr(a,e,"c");function U(q,V){Y(V)?V.forEach(le=>q(le.bind(n))):V&&q(V.bind(n))}if(U(jc,d),U(Dt,g),U(Vc,y),U(co,_),U(Fc,b),U(Dc,k),U(Bc,j),U(Wc,H),U(Uc,R),U(ao,D),U(Zn,m),U(kc,T),Y(O))if(O.length){const q=e.exposed||(e.exposed={});O.forEach(V=>{Object.defineProperty(q,V,{get:()=>n[V],set:le=>n[V]=le})})}else e.exposed||(e.exposed={});M&&e.render===Xe&&(e.render=M),A!=null&&(e.inheritAttrs=A),w&&(e.components=w),N&&(e.directives=N),T&&ar(e)}function Jc(e,t,n=Xe){Y(e)&&(e=js(e));for(const s in e){const r=e[s];let i;ue(r)?"default"in r?i=vt(r.from||s,r.default,!0):i=vt(r.from||s):i=vt(r),ce(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Hr(e,t,n){He(Y(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function ho(e,t,n,s){let r=s.includes(".")?Oo(n,s):()=>n[s];if(ve(e)){const i=t[e];G(i)&&Ie(r,i)}else if(G(e))Ie(r,e.bind(n));else if(ue(e))if(Y(e))e.forEach(i=>ho(i,t,n,s));else{const i=G(e.handler)?e.handler.bind(n):t[e.handler];G(i)&&Ie(r,i,e)}}function po(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Vn(c,f,o,!0)),Vn(c,t,o)),ue(t)&&i.set(t,c),c}function Vn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Vn(e,i,n,!0),r&&r.forEach(o=>Vn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Xc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Xc={data:jr,props:Vr,emits:Vr,methods:Bt,computed:Bt,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:Bt,directives:Bt,watch:Qc,provide:jr,inject:zc};function jr(e,t){return t?e?function(){return Ee(G(e)?e.call(this,this):e,G(t)?t.call(this,this):t)}:t:e}function zc(e,t){return Bt(js(e),js(t))}function js(e){if(Y(e)){const t={};for(let n=0;n1)return n&&G(t)?t.call(s&&s.proxy):t}}function mo(){return!!(ae||fe||yt)}const yo={},vo=()=>Object.create(yo),bo=e=>Object.getPrototypeOf(e)===yo;function na(e,t,n,s=!1){const r={},i=vo();e.propsDefaults=Object.create(null),_o(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:zl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function sa(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[g,y]=wo(d,t,!0);Ee(o,g),y&&l.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ue(e)&&s.set(e,Ot),Ot;if(Y(i))for(let a=0;ae[0]==="_"||e==="$stable",dr=e=>Y(e)?e.map(Pe):[Pe(e)],ia=(e,t,n)=>{if(t._n)return t;const s=Ac((...r)=>dr(t(...r)),n);return s._c=!1,s},To=(e,t,n)=>{const s=e._ctx;for(const r in e){if(So(r))continue;const i=e[r];if(G(i))t[r]=ia(r,i,s);else if(i!=null){const o=dr(i);t[r]=()=>o}}},Eo=(e,t)=>{const n=dr(t);e.slots.default=()=>n},xo=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},oa=(e,t,n)=>{const s=e.slots=vo();if(e.vnode.shapeFlag&32){const r=t._;r?(xo(s,t,n),n&&yc(s,"_",r,!0)):To(t,s)}else t&&Eo(e,t)},la=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=ne;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:xo(r,t,n):(i=!t.$stable,To(t,r)),o=t}else t&&(Eo(e,t),o={default:1});if(i)for(const l in r)!So(l)&&o[l]==null&&delete r[l]},_e=Io;function ca(e){return Co(e)}function aa(e){return Co(e,Ic)}function Co(e,t){const n=Xn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:d,nextSibling:g,setScopeId:y=Xe,insertStaticContent:_}=e,b=(u,h,v,x=null,S=null,E=null,$=void 0,I=null,L=!!h.dynamicChildren)=>{if(u===h)return;u&&!ht(u,h)&&(x=mn(u),Ve(u,S,E,!0),u=null),h.patchFlag===-2&&(L=!1,h.dynamicChildren=null);const{type:C,ref:B,shapeFlag:F}=h;switch(C){case bt:k(u,h,v,x);break;case ye:P(u,h,v,x);break;case Xt:u==null&&D(h,v,x,$);break;case me:w(u,h,v,x,S,E,$,I,L);break;default:F&1?M(u,h,v,x,S,E,$,I,L):F&6?N(u,h,v,x,S,E,$,I,L):(F&64||F&128)&&C.process(u,h,v,x,S,E,$,I,L,Tt)}B!=null&&S&&rn(B,u&&u.ref,E,h||u,!h)},k=(u,h,v,x)=>{if(u==null)s(h.el=l(h.children),v,x);else{const S=h.el=u.el;h.children!==u.children&&f(S,h.children)}},P=(u,h,v,x)=>{u==null?s(h.el=c(h.children||""),v,x):h.el=u.el},D=(u,h,v,x)=>{[u.el,u.anchor]=_(u.children,h,v,x,u.el,u.anchor)},p=({el:u,anchor:h},v,x)=>{let S;for(;u&&u!==h;)S=g(u),s(u,v,x),u=S;s(h,v,x)},m=({el:u,anchor:h})=>{let v;for(;u&&u!==h;)v=g(u),r(u),u=v;r(h)},M=(u,h,v,x,S,E,$,I,L)=>{h.type==="svg"?$="svg":h.type==="math"&&($="mathml"),u==null?H(h,v,x,S,E,$,I,L):T(u,h,S,E,$,I,L)},H=(u,h,v,x,S,E,$,I)=>{let L,C;const{props:B,shapeFlag:F,transition:W,dirs:K}=u;if(L=u.el=o(u.type,E,B&&B.is,B),F&8?a(L,u.children):F&16&&j(u.children,L,null,x,S,ms(u,E),$,I),K&&Be(u,null,x,"created"),R(L,u,u.scopeId,$,x),B){for(const Z in B)Z!=="value"&&!Mt(Z)&&i(L,Z,null,B[Z],E,x);"value"in B&&i(L,"value",null,B.value,E),(C=B.onVnodeBeforeMount)&&Me(C,x,u)}K&&Be(u,null,x,"beforeMount");const X=Ao(S,W);X&&W.beforeEnter(L),s(L,h,v),((C=B&&B.onVnodeMounted)||X||K)&&_e(()=>{C&&Me(C,x,u),X&&W.enter(L),K&&Be(u,null,x,"mounted")},S)},R=(u,h,v,x,S)=>{if(v&&y(u,v),x)for(let E=0;E{for(let C=L;C{const I=h.el=u.el;let{patchFlag:L,dynamicChildren:C,dirs:B}=h;L|=u.patchFlag&16;const F=u.props||ne,W=h.props||ne;let K;if(v&&ft(v,!1),(K=W.onVnodeBeforeUpdate)&&Me(K,v,h,u),B&&Be(h,u,v,"beforeUpdate"),v&&ft(v,!0),(F.innerHTML&&W.innerHTML==null||F.textContent&&W.textContent==null)&&a(I,""),C?O(u.dynamicChildren,C,I,v,x,ms(h,S),E):$||V(u,h,I,null,v,x,ms(h,S),E,!1),L>0){if(L&16)A(I,F,W,v,S);else if(L&2&&F.class!==W.class&&i(I,"class",null,W.class,S),L&4&&i(I,"style",F.style,W.style,S),L&8){const X=h.dynamicProps;for(let Z=0;Z{K&&Me(K,v,h,u),B&&Be(h,u,v,"updated")},x)},O=(u,h,v,x,S,E,$)=>{for(let I=0;I{if(h!==v){if(h!==ne)for(const E in h)!Mt(E)&&!(E in v)&&i(u,E,h[E],null,S,x);for(const E in v){if(Mt(E))continue;const $=v[E],I=h[E];$!==I&&E!=="value"&&i(u,E,I,$,S,x)}"value"in v&&i(u,"value",h.value,v.value,S)}},w=(u,h,v,x,S,E,$,I,L)=>{const C=h.el=u?u.el:l(""),B=h.anchor=u?u.anchor:l("");let{patchFlag:F,dynamicChildren:W,slotScopeIds:K}=h;K&&(I=I?I.concat(K):K),u==null?(s(C,v,x),s(B,v,x),j(h.children||[],v,B,S,E,$,I,L)):F>0&&F&64&&W&&u.dynamicChildren?(O(u.dynamicChildren,W,v,S,E,$,I),(h.key!=null||S&&h===S.subTree)&&hr(u,h,!0)):V(u,h,v,B,S,E,$,I,L)},N=(u,h,v,x,S,E,$,I,L)=>{h.slotScopeIds=I,u==null?h.shapeFlag&512?S.ctx.activate(h,v,x,$,L):J(h,v,x,S,E,$,L):re(u,h,L)},J=(u,h,v,x,S,E,$)=>{const I=u.component=xa(u,x,S);if(dn(u)&&(I.ctx.renderer=Tt),Ca(I,!1,$),I.asyncDep){if(S&&S.registerDep(I,U,$),!u.el){const L=I.subTree=ie(ye);P(null,L,h,v)}}else U(I,u,h,v,S,E,$)},re=(u,h,v)=>{const x=h.component=u.component;if(va(u,h,v))if(x.asyncDep&&!x.asyncResolved){q(x,h,v);return}else x.next=h,x.update();else h.el=u.el,x.vnode=h},U=(u,h,v,x,S,E,$)=>{const I=()=>{if(u.isMounted){let{next:F,bu:W,u:K,parent:X,vnode:Z}=u;{const Ce=Ro(u);if(Ce){F&&(F.el=Z.el,q(u,F,$)),Ce.asyncDep.then(()=>{u.isUnmounted||I()});return}}let Q=F,xe;ft(u,!1),F?(F.el=Z.el,q(u,F,$)):F=Z,W&&us(W),(xe=F.props&&F.props.onVnodeBeforeUpdate)&&Me(xe,X,F,Z),ft(u,!0);const de=ys(u),$e=u.subTree;u.subTree=de,b($e,de,d($e.el),mn($e),u,S,E),F.el=de.el,Q===null&&Po(u,de.el),K&&_e(K,S),(xe=F.props&&F.props.onVnodeUpdated)&&_e(()=>Me(xe,X,F,Z),S)}else{let F;const{el:W,props:K}=h,{bm:X,m:Z,parent:Q,root:xe,type:de}=u,$e=mt(h);if(ft(u,!1),X&&us(X),!$e&&(F=K&&K.onVnodeBeforeMount)&&Me(F,Q,h),ft(u,!0),W&&ls){const Ce=()=>{u.subTree=ys(u),ls(W,u.subTree,u,S,null)};$e&&de.__asyncHydrate?de.__asyncHydrate(W,u,Ce):Ce()}else{xe.ce&&xe.ce._injectChildStyle(de);const Ce=u.subTree=ys(u);b(null,Ce,v,x,u,S,E),h.el=Ce.el}if(Z&&_e(Z,S),!$e&&(F=K&&K.onVnodeMounted)){const Ce=h;_e(()=>Me(F,Q,Ce),S)}(h.shapeFlag&256||Q&&mt(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&_e(u.a,S),u.isMounted=!0,h=v=x=null}};u.scope.on();const L=u.effect=new xi(I);u.scope.off();const C=u.update=L.run.bind(L),B=u.job=L.runIfDirty.bind(L);B.i=u,B.id=u.uid,L.scheduler=()=>or(B),ft(u,!0),C()},q=(u,h,v)=>{h.component=u;const x=u.vnode.props;u.vnode=h,u.next=null,sa(u,h.props,x,v),la(u,h.children,v),lt(),Or(u),ct()},V=(u,h,v,x,S,E,$,I,L=!1)=>{const C=u&&u.children,B=u?u.shapeFlag:0,F=h.children,{patchFlag:W,shapeFlag:K}=h;if(W>0){if(W&128){gn(C,F,v,x,S,E,$,I,L);return}else if(W&256){le(C,F,v,x,S,E,$,I,L);return}}K&8?(B&16&&jt(C,S,E),F!==C&&a(v,F)):B&16?K&16?gn(C,F,v,x,S,E,$,I,L):jt(C,S,E,!0):(B&8&&a(v,""),K&16&&j(F,v,x,S,E,$,I,L))},le=(u,h,v,x,S,E,$,I,L)=>{u=u||Ot,h=h||Ot;const C=u.length,B=h.length,F=Math.min(C,B);let W;for(W=0;WB?jt(u,S,E,!0,!1,F):j(h,v,x,S,E,$,I,L,F)},gn=(u,h,v,x,S,E,$,I,L)=>{let C=0;const B=h.length;let F=u.length-1,W=B-1;for(;C<=F&&C<=W;){const K=u[C],X=h[C]=L?st(h[C]):Pe(h[C]);if(ht(K,X))b(K,X,v,null,S,E,$,I,L);else break;C++}for(;C<=F&&C<=W;){const K=u[F],X=h[W]=L?st(h[W]):Pe(h[W]);if(ht(K,X))b(K,X,v,null,S,E,$,I,L);else break;F--,W--}if(C>F){if(C<=W){const K=W+1,X=KW)for(;C<=F;)Ve(u[C],S,E,!0),C++;else{const K=C,X=C,Z=new Map;for(C=X;C<=W;C++){const Ae=h[C]=L?st(h[C]):Pe(h[C]);Ae.key!=null&&Z.set(Ae.key,C)}let Q,xe=0;const de=W-X+1;let $e=!1,Ce=0;const Vt=new Array(de);for(C=0;C=de){Ve(Ae,S,E,!0);continue}let ke;if(Ae.key!=null)ke=Z.get(Ae.key);else for(Q=X;Q<=W;Q++)if(Vt[Q-X]===0&&ht(Ae,h[Q])){ke=Q;break}ke===void 0?Ve(Ae,S,E,!0):(Vt[ke-X]=C+1,ke>=Ce?Ce=ke:$e=!0,b(Ae,h[ke],v,null,S,E,$,I,L),xe++)}const Er=$e?fa(Vt):Ot;for(Q=Er.length-1,C=de-1;C>=0;C--){const Ae=X+C,ke=h[Ae],xr=Ae+1{const{el:E,type:$,transition:I,children:L,shapeFlag:C}=u;if(C&6){at(u.component.subTree,h,v,x);return}if(C&128){u.suspense.move(h,v,x);return}if(C&64){$.move(u,h,v,Tt);return}if($===me){s(E,h,v);for(let F=0;FI.enter(E),S);else{const{leave:F,delayLeave:W,afterLeave:K}=I,X=()=>s(E,h,v),Z=()=>{F(E,()=>{X(),K&&K()})};W?W(E,X,Z):Z()}else s(E,h,v)},Ve=(u,h,v,x=!1,S=!1)=>{const{type:E,props:$,ref:I,children:L,dynamicChildren:C,shapeFlag:B,patchFlag:F,dirs:W,cacheIndex:K}=u;if(F===-2&&(S=!1),I!=null&&rn(I,null,v,u,!0),K!=null&&(h.renderCache[K]=void 0),B&256){h.ctx.deactivate(u);return}const X=B&1&&W,Z=!mt(u);let Q;if(Z&&(Q=$&&$.onVnodeBeforeUnmount)&&Me(Q,h,u),B&6)vl(u.component,v,x);else{if(B&128){u.suspense.unmount(v,x);return}X&&Be(u,null,h,"beforeUnmount"),B&64?u.type.remove(u,h,v,Tt,x):C&&!C.hasOnce&&(E!==me||F>0&&F&64)?jt(C,h,v,!1,!0):(E===me&&F&384||!S&&B&16)&&jt(L,h,v),x&&Sr(u)}(Z&&(Q=$&&$.onVnodeUnmounted)||X)&&_e(()=>{Q&&Me(Q,h,u),X&&Be(u,null,h,"unmounted")},v)},Sr=u=>{const{type:h,el:v,anchor:x,transition:S}=u;if(h===me){yl(v,x);return}if(h===Xt){m(u);return}const E=()=>{r(v),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(u.shapeFlag&1&&S&&!S.persisted){const{leave:$,delayLeave:I}=S,L=()=>$(v,E);I?I(u.el,E,L):L()}else E()},yl=(u,h)=>{let v;for(;u!==h;)v=g(u),r(u),u=v;r(h)},vl=(u,h,v)=>{const{bum:x,scope:S,job:E,subTree:$,um:I,m:L,a:C}=u;Ur(L),Ur(C),x&&us(x),S.stop(),E&&(E.flags|=8,Ve($,u,h,v)),I&&_e(I,h),_e(()=>{u.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},jt=(u,h,v,x=!1,S=!1,E=0)=>{for(let $=E;${if(u.shapeFlag&6)return mn(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const h=g(u.anchor||u.el),v=h&&h[Qi];return v?g(v):h};let is=!1;const Tr=(u,h,v)=>{u==null?h._vnode&&Ve(h._vnode,null,null,!0):b(h._vnode||null,u,h,null,null,null,v),h._vnode=u,is||(is=!0,Or(),Hn(),is=!1)},Tt={p:b,um:Ve,m:at,r:Sr,mt:J,mc:j,pc:V,pbc:O,n:mn,o:e};let os,ls;return t&&([os,ls]=t(Tt)),{render:Tr,hydrate:os,createApp:ea(Tr,os)}}function ms({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 ft({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ao(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function hr(e,t,n=!1){const s=e.children,r=t.children;if(Y(s)&&Y(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Ro(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ro(t)}function Ur(e){if(e)for(let t=0;tvt(ua);function pr(e,t){return es(e,null,t)}function Du(e,t){return es(e,null,{flush:"post"})}function Ie(e,t,n){return es(e,t,n)}function es(e,t,n=ne){const{immediate:s,deep:r,flush:i,once:o}=n,l=Ee({},n),c=t&&s||!t&&i!=="post";let f;if(It){if(i==="sync"){const y=da();f=y.__watcherHandles||(y.__watcherHandles=[])}else if(!c){const y=()=>{};return y.stop=Xe,y.resume=Xe,y.pause=Xe,y}}const a=ae;l.call=(y,_,b)=>He(y,a,_,b);let d=!1;i==="post"?l.scheduler=y=>{_e(y,a&&a.suspense)}:i!=="sync"&&(d=!0,l.scheduler=(y,_)=>{_?y():or(y)}),l.augmentJob=y=>{t&&(y.flags|=4),d&&(y.flags|=2,a&&(y.id=a.uid,y.i=a))};const g=cc(e,t,l);return It&&(f?f.push(g):c&&g()),g}function ha(e,t,n){const s=this.proxy,r=ve(e)?e.includes(".")?Oo(s,e):()=>s[e]:e.bind(s,s);let i;G(t)?i=t:(i=t.handler,n=t);const o=hn(this),l=es(r,i.bind(s),n);return o(),l}function Oo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${De(t)}Modifiers`]||e[`${an(t)}Modifiers`];function ga(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ne;let r=n;const i=t.startsWith("update:"),o=i&&pa(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>ve(a)?a.trim():a)),o.number&&(r=n.map(vc)));let l,c=s[l=On(t)]||s[l=On(De(t))];!c&&i&&(c=s[l=On(an(t))]),c&&He(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,He(f,e,6,r)}}function Mo(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!G(e)){const c=f=>{const a=Mo(f,t,!0);a&&(l=!0,Ee(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ue(e)&&s.set(e,null),null):(Y(i)?i.forEach(c=>o[c]=null):Ee(o,i),ue(e)&&s.set(e,o),o)}function ts(e,t){return!e||!Yn(t)?!1:(t=t.slice(2).replace(/Once$/,""),te(e,t[0].toLowerCase()+t.slice(1))||te(e,an(t))||te(e,t))}function ys(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:d,data:g,setupState:y,ctx:_,inheritAttrs:b}=e,k=jn(e);let P,D;try{if(n.shapeFlag&4){const m=r||s,M=m;P=Pe(f.call(M,m,a,d,y,g,_)),D=l}else{const m=t;P=Pe(m.length>1?m(d,{attrs:l,slots:o,emit:c}):m(d,null)),D=t.props?l:ma(l)}}catch(m){zt.length=0,un(m,e,1),P=ie(ye)}let p=P;if(D&&b!==!1){const m=Object.keys(D),{shapeFlag:M}=p;m.length&&M&7&&(i&&m.some(Ui)&&(D=ya(D,i)),p=it(p,D,!1,!0))}return n.dirs&&(p=it(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&St(p,n.transition),P=p,jn(k),P}const ma=e=>{let t;for(const n in e)(n==="class"||n==="style"||Yn(n))&&((t||(t={}))[n]=e[n]);return t},ya=(e,t)=>{const n={};for(const s in e)(!Ui(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function va(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Wr(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let d=0;de.__isSuspense;function Io(e,t){t&&t.pendingBranch?Y(e)?t.effects.push(...e):t.effects.push(e):Cc(e)}const me=Symbol.for("v-fgt"),bt=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Xt=Symbol.for("v-stc"),zt=[];let Re=null;function ks(e=!1){zt.push(Re=e?null:[])}function ba(){zt.pop(),Re=zt[zt.length-1]||null}let on=1;function Br(e,t=!1){on+=e,e<0&&Re&&t&&(Re.hasOnce=!0)}function $o(e){return e.dynamicChildren=on>0?Re||Ot:null,ba(),on>0&&Re&&Re.push(e),e}function Hu(e,t,n,s,r,i){return $o(Fo(e,t,n,s,r,i,!0))}function Us(e,t,n,s,r){return $o(ie(e,t,n,s,r,!0))}function ln(e){return e?e.__v_isVNode===!0:!1}function ht(e,t){return e.type===t.type&&e.key===t.key}const No=({key:e})=>e??null,Pn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ve(e)||ce(e)||G(e)?{i:fe,r:e,k:t,f:!!n}:e:null);function Fo(e,t=null,n=null,s=0,r=null,i=e===me?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&No(t),ref:t&&Pn(t),scopeId:zi,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:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:fe};return l?(gr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ve(n)?8:16),on>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const ie=_a;function _a(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===fo)&&(e=ye),ln(e)){const l=it(e,t,!0);return n&&gr(l,n),on>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag=-2,l}if(Ma(e)&&(e=e.__vccOpts),t){t=wa(t);let{class:l,style:c}=t;l&&!ve(l)&&(t.class=ir(l)),ue(c)&&(Zs(c)&&!Y(c)&&(c=Ee({},c)),t.style=rr(c))}const o=ve(e)?1:Lo(e)?128:Zi(e)?64:ue(e)?4:G(e)?2:0;return Fo(e,t,n,s,r,o,i,!0)}function wa(e){return e?Zs(e)||bo(e)?Ee({},e):e:null}function it(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Sa(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&No(f),ref:t&&t.ref?n&&i?Y(i)?i.concat(Pn(t)):[i,Pn(t)]:Pn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&it(e.ssContent),ssFallback:e.ssFallback&&it(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&St(a,c.clone(a)),a}function Do(e=" ",t=0){return ie(bt,null,e,t)}function ju(e,t){const n=ie(Xt,null,e);return n.staticCount=t,n}function Vu(e="",t=!1){return t?(ks(),Us(ye,null,e)):ie(ye,null,e)}function Pe(e){return e==null||typeof e=="boolean"?ie(ye):Y(e)?ie(me,null,e.slice()):ln(e)?st(e):ie(bt,null,String(e))}function st(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:it(e)}function gr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(Y(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),gr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!bo(t)?t._ctx=fe:r===3&&fe&&(fe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else G(t)?(t={default:t,_ctx:fe},n=32):(t=String(t),s&64?(n=16,t=[Do(t)]):n=8);e.children=t,e.shapeFlag|=n}function Sa(...e){const t={};for(let n=0;nae||fe;let kn,Ws;{const e=Xn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};kn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),Ws=t("__VUE_SSR_SETTERS__",n=>It=n)}const hn=e=>{const t=ae;return kn(e),e.scope.on(),()=>{e.scope.off(),kn(t)}},Kr=()=>{ae&&ae.scope.off(),kn(null)};function Ho(e){return e.vnode.shapeFlag&4}let It=!1;function Ca(e,t=!1,n=!1){t&&Ws(t);const{props:s,children:r}=e.vnode,i=Ho(e);na(e,s,i,t),oa(e,r,n);const o=i?Aa(e,t):void 0;return t&&Ws(!1),o}function Aa(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,qc);const{setup:s}=n;if(s){lt();const r=e.setupContext=s.length>1?Vo(e):null,i=hn(e),o=fn(s,e,0,[e.props,r]),l=Bi(o);if(ct(),i(),(l||e.sp)&&!mt(e)&&ar(e),l){if(o.then(Kr,Kr),t)return o.then(c=>{qr(e,c)}).catch(c=>{un(c,e,0)});e.asyncDep=o}else qr(e,o)}else jo(e)}function qr(e,t,n){G(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ue(t)&&(e.setupState=Vi(t)),jo(e)}function jo(e,t,n){const s=e.type;e.render||(e.render=s.render||Xe);{const r=hn(e);lt();try{Yc(e)}finally{ct(),r()}}}const Ra={get(e,t){return pe(e,"get",""),e[t]}};function Vo(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Ra),slots:e.slots,emit:e.emit,expose:t}}function ns(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Vi(Rn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Jt)return Jt[n](e)},has(t,n){return n in t||n in Jt}})):e.proxy}function Oa(e,t=!0){return G(e)?e.displayName||e.name:e.name||t&&e.__name}function Ma(e){return G(e)&&"__vccOpts"in e}const se=(e,t)=>oc(e,t,It);function Bs(e,t,n){const s=arguments.length;return s===2?ue(t)&&!Y(t)?ln(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&ln(n)&&(n=[n]),ie(e,t,n))}const Pa="3.5.13";/** -* @vue/shared v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function La(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ia=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$a=e=>e.startsWith("onUpdate:"),ss=Object.assign,pn=Array.isArray,ko=e=>typeof e=="function",$t=e=>typeof e=="string",Na=e=>typeof e=="symbol",Fa=e=>e!==null&&typeof e=="object",mr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Da=/-(\w)/g,Ha=mr(e=>e.replace(Da,(t,n)=>n?n.toUpperCase():"")),ja=/\B([A-Z])/g,yr=mr(e=>e.replace(ja,"-$1").toLowerCase()),Va=mr(e=>e.charAt(0).toUpperCase()+e.slice(1)),ka=(e,...t)=>{for(let n=0;n{const t=parseFloat(e);return isNaN(t)?e:t},Ua=e=>{const t=$t(e)?Number(e):NaN;return isNaN(t)?e:t},Wa="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Ba=La(Wa);function Uo(e){return!!e||e===""}/** -* @vue/runtime-dom v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Ks;const Yr=typeof window<"u"&&window.trustedTypes;if(Yr)try{Ks=Yr.createPolicy("vue",{createHTML:e=>e})}catch{}const Wo=Ks?e=>Ks.createHTML(e):e=>e,Ka="http://www.w3.org/2000/svg",qa="http://www.w3.org/1998/Math/MathML",qe=typeof document<"u"?document:null,Jr=qe&&qe.createElement("template"),Ga={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 r=t==="svg"?qe.createElementNS(Ka,e):t==="mathml"?qe.createElementNS(qa,e):n?qe.createElement(e,{is:n}):qe.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>qe.createTextNode(e),createComment:e=>qe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>qe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Jr.innerHTML=Wo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Jr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ze="transition",Ut="animation",Nt=Symbol("_vtc"),Bo={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},Ko=ss({},so,Bo),Ya=e=>(e.displayName="Transition",e.props=Ko,e),ku=Ya((e,{slots:t})=>Bs(Mc,qo(e),t)),ut=(e,t=[])=>{pn(e)?e.forEach(n=>n(...t)):e&&e(...t)},Xr=e=>e?pn(e)?e.some(t=>t.length>1):e.length>1:!1;function qo(e){const t={};for(const w in e)w in Bo||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,_=Ja(r),b=_&&_[0],k=_&&_[1],{onBeforeEnter:P,onEnter:D,onEnterCancelled:p,onLeave:m,onLeaveCancelled:M,onBeforeAppear:H=P,onAppear:R=D,onAppearCancelled:j=p}=t,T=(w,N,J,re)=>{w._enterCancelled=re,et(w,N?a:l),et(w,N?f:o),J&&J()},O=(w,N)=>{w._isLeaving=!1,et(w,d),et(w,y),et(w,g),N&&N()},A=w=>(N,J)=>{const re=w?R:D,U=()=>T(N,w,J);ut(re,[N,U]),zr(()=>{et(N,w?c:i),Ue(N,w?a:l),Xr(re)||Qr(N,s,b,U)})};return ss(t,{onBeforeEnter(w){ut(P,[w]),Ue(w,i),Ue(w,o)},onBeforeAppear(w){ut(H,[w]),Ue(w,c),Ue(w,f)},onEnter:A(!1),onAppear:A(!0),onLeave(w,N){w._isLeaving=!0;const J=()=>O(w,N);Ue(w,d),w._enterCancelled?(Ue(w,g),qs()):(qs(),Ue(w,g)),zr(()=>{w._isLeaving&&(et(w,d),Ue(w,y),Xr(m)||Qr(w,s,k,J))}),ut(m,[w,J])},onEnterCancelled(w){T(w,!1,void 0,!0),ut(p,[w])},onAppearCancelled(w){T(w,!0,void 0,!0),ut(j,[w])},onLeaveCancelled(w){O(w),ut(M,[w])}})}function Ja(e){if(e==null)return null;if(Fa(e))return[vs(e.enter),vs(e.leave)];{const t=vs(e);return[t,t]}}function vs(e){return Ua(e)}function Ue(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Nt]||(e[Nt]=new Set)).add(t)}function et(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Nt];n&&(n.delete(t),n.size||(e[Nt]=void 0))}function zr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Xa=0;function Qr(e,t,n,s){const r=e._endId=++Xa,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=Go(e,t);if(!o)return s();const f=o+"end";let a=0;const d=()=>{e.removeEventListener(f,g),i()},g=y=>{y.target===e&&++a>=c&&d()};setTimeout(()=>{a(n[_]||"").split(", "),r=s(`${Ze}Delay`),i=s(`${Ze}Duration`),o=Zr(r,i),l=s(`${Ut}Delay`),c=s(`${Ut}Duration`),f=Zr(l,c);let a=null,d=0,g=0;t===Ze?o>0&&(a=Ze,d=o,g=i.length):t===Ut?f>0&&(a=Ut,d=f,g=c.length):(d=Math.max(o,f),a=d>0?o>f?Ze:Ut:null,g=a?a===Ze?i.length:c.length:0);const y=a===Ze&&/\b(transform|all)(,|$)/.test(s(`${Ze}Property`).toString());return{type:a,timeout:d,propCount:g,hasTransform:y}}function Zr(e,t){for(;e.lengthei(n)+ei(e[s])))}function ei(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function qs(){return document.body.offsetHeight}function za(e,t,n){const s=e[Nt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Un=Symbol("_vod"),Yo=Symbol("_vsh"),Uu={beforeMount(e,{value:t},{transition:n}){e[Un]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Wt(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),Wt(e,!0),s.enter(e)):s.leave(e,()=>{Wt(e,!1)}):Wt(e,t))},beforeUnmount(e,{value:t}){Wt(e,t)}};function Wt(e,t){e.style.display=t?e[Un]:"none",e[Yo]=!t}const Qa=Symbol(""),Za=/(^|;)\s*display\s*:/;function ef(e,t,n){const s=e.style,r=$t(n);let i=!1;if(n&&!r){if(t)if($t(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Ln(s,l,"")}else for(const o in t)n[o]==null&&Ln(s,o,"");for(const o in n)o==="display"&&(i=!0),Ln(s,o,n[o])}else if(r){if(t!==n){const o=s[Qa];o&&(n+=";"+o),s.cssText=n,i=Za.test(n)}}else t&&e.removeAttribute("style");Un in e&&(e[Un]=i?s.display:"",e[Yo]&&(s.display="none"))}const ti=/\s*!important$/;function Ln(e,t,n){if(pn(n))n.forEach(s=>Ln(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=tf(e,t);ti.test(n)?e.setProperty(yr(s),n.replace(ti,""),"important"):e[s]=n}}const ni=["Webkit","Moz","ms"],bs={};function tf(e,t){const n=bs[t];if(n)return n;let s=De(t);if(s!=="filter"&&s in e)return bs[t]=s;s=Va(s);for(let r=0;r_s||(of.then(()=>_s=0),_s=Date.now());function cf(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;He(af(s,n.value),t,5,[s])};return n.value=e,n.attached=lf(),n}function af(e,t){if(pn(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ci=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ff=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?za(e,s,o):t==="style"?ef(e,n,s):Ia(t)?$a(t)||sf(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):uf(e,t,s,o))?(ii(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ri(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!$t(s))?ii(e,Ha(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ri(e,t,s,o))};function uf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ci(t)&&ko(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 r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ci(t)&&$t(n)?!1:t in e}const Jo=new WeakMap,Xo=new WeakMap,Wn=Symbol("_moveCb"),ai=Symbol("_enterCb"),df=e=>(delete e.props.mode,e),hf=df({name:"TransitionGroup",props:ss({},Ko,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Ht(),s=no();let r,i;return co(()=>{if(!r.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!yf(r[0].el,n.vnode.el,o))return;r.forEach(pf),r.forEach(gf);const l=r.filter(mf);qs(),l.forEach(c=>{const f=c.el,a=f.style;Ue(f,o),a.transform=a.webkitTransform=a.transitionDuration="";const d=f[Wn]=g=>{g&&g.target!==f||(!g||/transform$/.test(g.propertyName))&&(f.removeEventListener("transitionend",d),f[Wn]=null,et(f,o))};f.addEventListener("transitionend",d)})}),()=>{const o=z(e),l=qo(o);let c=o.tag||me;if(r=[],i)for(let f=0;f{l.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(s);const{hasTransform:o}=Go(s);return i.removeChild(s),o}const fi=e=>{const t=e.props["onUpdate:modelValue"]||!1;return pn(t)?n=>ka(t,n):t};function vf(e){e.target.composing=!0}function ui(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ws=Symbol("_assign"),Bu={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[ws]=fi(r);const i=s||r.props&&r.props.type==="number";At(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=Gr(l)),e[ws](l)}),n&&At(e,"change",()=>{e.value=e.value.trim()}),t||(At(e,"compositionstart",vf),At(e,"compositionend",ui),At(e,"change",ui))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[ws]=fi(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Gr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},bf=["ctrl","shift","alt","meta"],_f={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)=>bf.some(n=>e[`${n}Key`]&&!t.includes(n))},Ku=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=yr(r.key);if(t.some(o=>o===i||wf[o]===i))return e(r)})},zo=ss({patchProp:ff},Ga);let Qt,di=!1;function Qo(){return Qt||(Qt=ca(zo))}function Sf(){return Qt=di?Qt:aa(zo),di=!0,Qt}const Gu=(...e)=>{Qo().render(...e)},Yu=(...e)=>{const t=Qo().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=el(s);if(!r)return;const i=t._component;!ko(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Zo(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},Ju=(...e)=>{const t=Sf().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=el(s);if(r)return n(r,!0,Zo(r))},t};function Zo(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function el(e){return $t(e)?document.querySelector(e):e}const Tf=window.__VP_SITE_DATA__;function tl(e){return Ei()?(Pl(e),!0):!1}const Ss=new WeakMap,Ef=(...e)=>{var t;const n=e[0],s=(t=Ht())==null?void 0:t.proxy;if(s==null&&!mo())throw new Error("injectLocal must be called in setup");return s&&Ss.has(s)&&n in Ss.get(s)?Ss.get(s)[n]:vt(...e)},nl=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Xu=e=>e!=null,xf=Object.prototype.toString,Cf=e=>xf.call(e)==="[object Object]",ot=()=>{},hi=Af();function Af(){var e,t;return nl&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function vr(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const sl=e=>e();function rl(e,t={}){let n,s,r=ot;const i=c=>{clearTimeout(c),r(),r=ot};let o;return c=>{const f=oe(e),a=oe(t.maxWait);return n&&i(n),f<=0||a!==void 0&&a<=0?(s&&(i(s),s=null),Promise.resolve(c())):new Promise((d,g)=>{r=t.rejectOnCancel?g:d,o=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,d(o())},a)),n=setTimeout(()=>{s&&i(s),s=null,d(c())},f)})}}function Rf(...e){let t=0,n,s=!0,r=ot,i,o,l,c,f;!ce(e[0])&&typeof e[0]=="object"?{delay:o,trailing:l=!0,leading:c=!0,rejectOnCancel:f=!1}=e[0]:[o,l=!0,c=!0,f=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=ot)};return g=>{const y=oe(o),_=Date.now()-t,b=()=>i=g();return a(),y<=0?(t=Date.now(),b()):(_>y&&(c||!s)?(t=Date.now(),b()):l&&(i=new Promise((k,P)=>{r=f?P:k,n=setTimeout(()=>{t=Date.now(),s=!0,k(b()),a()},Math.max(0,y-_))})),!c&&!n&&(n=setTimeout(()=>s=!0,y)),s=!1,i)}}function Of(e=sl,t={}){const{initialState:n="active"}=t,s=br(n==="active");function r(){s.value=!1}function i(){s.value=!0}const o=(...l)=>{s.value&&e(...l)};return{isActive:Gn(s),pause:r,resume:i,eventFilter:o}}function pi(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function Mf(e){return Ht()}function Ts(e){return Array.isArray(e)?e:[e]}function br(...e){if(e.length!==1)return rc(...e);const t=e[0];return typeof t=="function"?Gn(tc(()=>({get:t,set:ot}))):Fe(t)}function Pf(e,t=200,n={}){return vr(rl(t,n),e)}function Lf(e,t=200,n=!1,s=!0,r=!1){return vr(Rf(t,n,s,r),e)}function il(e,t,n={}){const{eventFilter:s=sl,...r}=n;return Ie(e,vr(s,t),r)}function If(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:o,pause:l,resume:c,isActive:f}=Of(s,{initialState:r});return{stop:il(e,t,{...i,eventFilter:o}),pause:l,resume:c,isActive:f}}function rs(e,t=!0,n){Mf()?Dt(e,n):t?e():zn(e)}function zu(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return il(e,t,{...i,eventFilter:rl(s,{maxWait:r})})}function $f(e,t,n){return Ie(e,t,{...n,immediate:!0})}function Qu(e,t,n){let s;ce(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=ot}=s,c=Te(!r),f=o?Te(t):Fe(t);let a=0;return pr(async d=>{if(!c.value)return;a++;const g=a;let y=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const _=await e(b=>{d(()=>{i&&(i.value=!1),y||b()})});g===a&&(f.value=_)}catch(_){l(_)}finally{i&&g===a&&(i.value=!1),y=!0}}),r?se(()=>(c.value=!0,f.value)):f}const je=nl?window:void 0;function _r(e){var t;const n=oe(e);return(t=n==null?void 0:n.$el)!=null?t:n}function ze(...e){const t=[],n=()=>{t.forEach(l=>l()),t.length=0},s=(l,c,f,a)=>(l.addEventListener(c,f,a),()=>l.removeEventListener(c,f,a)),r=se(()=>{const l=Ts(oe(e[0])).filter(c=>c!=null);return l.every(c=>typeof c!="string")?l:void 0}),i=$f(()=>{var l,c;return[(c=(l=r.value)==null?void 0:l.map(f=>_r(f)))!=null?c:[je].filter(f=>f!=null),Ts(oe(r.value?e[1]:e[0])),Ts(er(r.value?e[2]:e[1])),oe(r.value?e[3]:e[2])]},([l,c,f,a])=>{if(n(),!(l!=null&&l.length)||!(c!=null&&c.length)||!(f!=null&&f.length))return;const d=Cf(a)?{...a}:a;t.push(...l.flatMap(g=>c.flatMap(y=>f.map(_=>s(g,y,_,d)))))},{flush:"post"}),o=()=>{i(),n()};return tl(n),o}function Nf(){const e=Te(!1),t=Ht();return t&&Dt(()=>{e.value=!0},t),e}function Ff(e){const t=Nf();return se(()=>(t.value,!!e()))}function Df(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Zu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=je,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Df(t);return ze(r,i,a=>{a.repeat&&oe(l)||c(a)&&n(a)},o)}const Hf=Symbol("vueuse-ssr-width");function jf(){const e=mo()?Ef(Hf,null):null;return typeof e=="number"?e:void 0}function ol(e,t={}){const{window:n=je,ssrWidth:s=jf()}=t,r=Ff(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=Te(typeof s=="number"),o=Te(),l=Te(!1),c=f=>{l.value=f.matches};return pr(()=>{if(i.value){i.value=!r.value;const f=oe(e).split(",");l.value=f.some(a=>{const d=a.includes("not all"),g=a.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),y=a.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let _=!!(g||y);return g&&_&&(_=s>=pi(g[1])),y&&_&&(_=s<=pi(y[1])),d?!_:_});return}r.value&&(o.value=n.matchMedia(oe(e)),l.value=o.value.matches)}),ze(o,"change",c,{passive:!0}),se(()=>l.value)}const En=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},xn="__vueuse_ssr_handlers__",Vf=kf();function kf(){return xn in En||(En[xn]=En[xn]||{}),En[xn]}function ll(e,t){return Vf[e]||t}function cl(e){return ol("(prefers-color-scheme: dark)",e)}function Uf(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Wf={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},gi="vueuse-storage";function wr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:d=je,eventFilter:g,onError:y=A=>{console.error(A)},initOnMounted:_}=s,b=(a?Te:Fe)(typeof t=="function"?t():t),k=se(()=>oe(e));if(!n)try{n=ll("getDefaultStorage",()=>{var A;return(A=je)==null?void 0:A.localStorage})()}catch(A){y(A)}if(!n)return b;const P=oe(t),D=Uf(P),p=(r=s.serializer)!=null?r:Wf[D],{pause:m,resume:M}=If(b,()=>R(b.value),{flush:i,deep:o,eventFilter:g});Ie(k,()=>T(),{flush:i}),d&&l&&rs(()=>{n instanceof Storage?ze(d,"storage",T,{passive:!0}):ze(d,gi,O),_&&T()}),_||T();function H(A,w){if(d){const N={key:k.value,oldValue:A,newValue:w,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",N):new CustomEvent(gi,{detail:N}))}}function R(A){try{const w=n.getItem(k.value);if(A==null)H(w,null),n.removeItem(k.value);else{const N=p.write(A);w!==N&&(n.setItem(k.value,N),H(w,N))}}catch(w){y(w)}}function j(A){const w=A?A.newValue:n.getItem(k.value);if(w==null)return c&&P!=null&&n.setItem(k.value,p.write(P)),P;if(!A&&f){const N=p.read(w);return typeof f=="function"?f(N,P):D==="object"&&!Array.isArray(N)?{...P,...N}:N}else return typeof w!="string"?w:p.read(w)}function T(A){if(!(A&&A.storageArea!==n)){if(A&&A.key==null){b.value=P;return}if(!(A&&A.key!==k.value)){m();try{(A==null?void 0:A.newValue)!==p.write(b.value)&&(b.value=j(A))}catch(w){y(w)}finally{A?zn(M):M()}}}}function O(A){T(A.detail)}return b}const Bf="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Kf(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=je,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},g=cl({window:r}),y=se(()=>g.value?"dark":"light"),_=c||(o==null?br(s):wr(o,s,i,{window:r,listenToStorageChanges:l})),b=se(()=>_.value==="auto"?y.value:_.value),k=ll("updateHTMLAttrs",(m,M,H)=>{const R=typeof m=="string"?r==null?void 0:r.document.querySelector(m):_r(m);if(!R)return;const j=new Set,T=new Set;let O=null;if(M==="class"){const w=H.split(/\s/g);Object.values(d).flatMap(N=>(N||"").split(/\s/g)).filter(Boolean).forEach(N=>{w.includes(N)?j.add(N):T.add(N)})}else O={key:M,value:H};if(j.size===0&&T.size===0&&O===null)return;let A;a&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode(Bf)),r.document.head.appendChild(A));for(const w of j)R.classList.add(w);for(const w of T)R.classList.remove(w);O&&R.setAttribute(O.key,O.value),a&&(r.getComputedStyle(A).opacity,document.head.removeChild(A))});function P(m){var M;k(t,n,(M=d[m])!=null?M:m)}function D(m){e.onChanged?e.onChanged(m,P):P(m)}Ie(b,D,{flush:"post",immediate:!0}),rs(()=>D(b.value));const p=se({get(){return f?_.value:b.value},set(m){_.value=m}});return Object.assign(p,{store:_,system:y,state:b})}function qf(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=Kf({...e,onChanged:(o,l)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,o==="dark",l,o):l(o)},modes:{dark:t,light:n}}),r=se(()=>s.system.value);return se({get(){return s.value==="dark"},set(o){const l=o?"dark":"light";r.value===l?s.value="auto":s.value=l}})}function Es(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const mi=1;function Gf(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=ot,onScroll:i=ot,offset:o={left:0,right:0,top:0,bottom:0},eventListenerOptions:l={capture:!1,passive:!0},behavior:c="auto",window:f=je,onError:a=R=>{console.error(R)}}=t,d=Te(0),g=Te(0),y=se({get(){return d.value},set(R){b(R,void 0)}}),_=se({get(){return g.value},set(R){b(void 0,R)}});function b(R,j){var T,O,A,w;if(!f)return;const N=oe(e);if(!N)return;(A=N instanceof Document?f.document.body:N)==null||A.scrollTo({top:(T=oe(j))!=null?T:_.value,left:(O=oe(R))!=null?O:y.value,behavior:oe(c)});const J=((w=N==null?void 0:N.document)==null?void 0:w.documentElement)||(N==null?void 0:N.documentElement)||N;y!=null&&(d.value=J.scrollLeft),_!=null&&(g.value=J.scrollTop)}const k=Te(!1),P=Lt({left:!0,right:!1,top:!0,bottom:!1}),D=Lt({left:!1,right:!1,top:!1,bottom:!1}),p=R=>{k.value&&(k.value=!1,D.left=!1,D.right=!1,D.top=!1,D.bottom=!1,r(R))},m=Pf(p,n+s),M=R=>{var j;if(!f)return;const T=((j=R==null?void 0:R.document)==null?void 0:j.documentElement)||(R==null?void 0:R.documentElement)||_r(R),{display:O,flexDirection:A,direction:w}=getComputedStyle(T),N=w==="rtl"?-1:1,J=T.scrollLeft;D.left=Jd.value;const re=Math.abs(J*N)<=(o.left||0),U=Math.abs(J*N)+T.clientWidth>=T.scrollWidth-(o.right||0)-mi;O==="flex"&&A==="row-reverse"?(P.left=U,P.right=re):(P.left=re,P.right=U),d.value=J;let q=T.scrollTop;R===f.document&&!q&&(q=f.document.body.scrollTop),D.top=qg.value;const V=Math.abs(q)<=(o.top||0),le=Math.abs(q)+T.clientHeight>=T.scrollHeight-(o.bottom||0)-mi;O==="flex"&&A==="column-reverse"?(P.top=le,P.bottom=V):(P.top=V,P.bottom=le),g.value=q},H=R=>{var j;if(!f)return;const T=(j=R.target.documentElement)!=null?j:R.target;M(T),k.value=!0,m(R),i(R)};return ze(e,"scroll",n?Lf(H,n,!0,!1):H,l),rs(()=>{try{const R=oe(e);if(!R)return;M(R)}catch(R){a(R)}}),ze(e,"scrollend",p,l),{x:y,y:_,isScrolling:k,arrivedState:P,directions:D,measure(){const R=oe(e);f&&R&&M(R)}}}function ed(e,t,n={}){const{window:s=je}=n;return wr(e,t,s==null?void 0:s.localStorage,n)}function al(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const xs=new WeakMap;function td(e,t=!1){const n=Te(t);let s=null,r="";Ie(br(e),l=>{const c=Es(oe(l));if(c){const f=c;if(xs.get(f)||xs.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=Es(oe(e));!l||n.value||(hi&&(s=ze(l,"touchmove",c=>{Yf(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=Es(oe(e));!l||!n.value||(hi&&(s==null||s()),l.style.overflow=r,xs.delete(l),n.value=!1)};return tl(o),se({get(){return n.value},set(l){l?i():o()}})}function nd(e,t,n={}){const{window:s=je}=n;return wr(e,t,s==null?void 0:s.sessionStorage,n)}function sd(e={}){const{window:t=je,...n}=e;return Gf(t,n)}function rd(e={}){const{window:t=je,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=Te(n),c=Te(s),f=()=>{if(t)if(o==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:d,height:g,scale:y}=t.visualViewport;l.value=Math.round(d*y),c.value=Math.round(g*y)}else i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};f(),rs(f);const a={passive:!0};if(ze("resize",f,a),t&&o==="visual"&&t.visualViewport&&ze(t.visualViewport,"resize",f,a),r){const d=ol("(orientation: portrait)");Ie(d,()=>f())}return{width:l,height:c}}const Cs={};var As={};const fl=/^(?:[a-z]+:|\/\/)/i,Jf="vitepress-theme-appearance",Xf=/#.*$/,zf=/[?#].*$/,Qf=/(?:(^|\/)index)?\.(?:md|html)$/,he=typeof document<"u",ul={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Zf(e,t,n=!1){if(t===void 0)return!1;if(e=yi(`/${e}`),n)return new RegExp(t).test(e);if(yi(t)!==e)return!1;const s=t.match(Xf);return s?(he?location.hash:"")===s[0]:!0}function yi(e){return decodeURI(e).replace(zf,"").replace(Qf,"$1")}function eu(e){return fl.test(e)}function tu(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!eu(n)&&Zf(t,`/${n}/`,!0))||"root"}function nu(e,t){var s,r,i,o,l,c,f;const n=tu(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:hl(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function dl(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=su(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function su(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ru(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function hl(e,t){return[...e.filter(n=>!ru(t,n)),...t]}const iu=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,ou=/^[a-z]:/i;function vi(e){const t=ou.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(iu,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Rs=new Set;function lu(e){if(Rs.size===0){const n=typeof process=="object"&&(As==null?void 0:As.VITE_EXTRA_EXTENSIONS)||(Cs==null?void 0:Cs.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Rs.add(s))}const t=e.split(".").pop();return t==null||!Rs.has(t.toLowerCase())}function id(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const cu=Symbol(),_t=Te(Tf);function od(e){const t=se(()=>nu(_t.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?Fe(!0):n==="force-auto"?cl():n?qf({storageKey:Jf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):Fe(!1),r=Fe(he?location.hash:"");return he&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Ie(()=>e.data,()=>{r.value=he?location.hash:""}),{site:t,theme:se(()=>t.value.themeConfig),page:se(()=>e.data),frontmatter:se(()=>e.data.frontmatter),params:se(()=>e.data.params),lang:se(()=>t.value.lang),dir:se(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:se(()=>t.value.localeIndex||"root"),title:se(()=>dl(t.value,e.data)),description:se(()=>e.data.description||t.value.description),isDark:s,hash:se(()=>r.value)}}function au(){const e=vt(cu);if(!e)throw new Error("vitepress data not properly injected in app");return e}function fu(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function bi(e){return fl.test(e)||!e.startsWith("/")?e:fu(_t.value.base,e)}function uu(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),he){const n="/";t=vi(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${vi(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let In=[];function ld(e){In.push(e),Zn(()=>{In=In.filter(t=>t!==e)})}function du(){let e=_t.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=_i(e,n);else if(Array.isArray(e))for(const s of e){const r=_i(s,n);if(r){t=r;break}}return t}function _i(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const hu=Symbol(),pl="http://a.com",pu=()=>({path:"/",component:null,data:ul});function cd(e,t){const n=Lt(pu()),s={route:n,go:r};async function r(l=he?location.href:"/"){var c,f;l=Os(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(he&&l!==Os(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(l)))}let i=null;async function o(l,c=0,f=!1){var g,y;if(await((g=s.onBeforePageLoad)==null?void 0:g.call(s,l))===!1)return;const a=new URL(l,pl),d=i=a.pathname;try{let _=await e(d);if(!_)throw new Error(`Page not found: ${d}`);if(i===d){i=null;const{default:b,__pageData:k}=_;if(!b)throw new Error(`Invalid route component: ${b}`);await((y=s.onAfterPageLoad)==null?void 0:y.call(s,l)),n.path=he?d:bi(d),n.component=Rn(b),n.data=Rn(k),he&&zn(()=>{let P=_t.value.base+k.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!_t.value.cleanUrls&&!P.endsWith("/")&&(P+=".html"),P!==a.pathname&&(a.pathname=P,l=P+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let D=null;try{D=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if(D){wi(D,a.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!f)try{const b=await fetch(_t.value.base+"hashmap.json");window.__VP_HASH_MAP__=await b.json(),await o(l,c,!0);return}catch{}if(i===d){i=null,n.path=he?d:bi(d),n.component=t?Rn(t):null;const b=he?d.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...ul,relativePath:b}}}}return he&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:d,pathname:g,hash:y,search:_}=new URL(f,c.baseURI),b=new URL(location.href);d===b.origin&&lu(g)&&(l.preventDefault(),g===b.pathname&&_===b.search?(y!==b.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:b.href,newURL:a}))),y?wi(c,y,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var f;if(l.state===null)return;const c=Os(location.href);await o(c,l.state&&l.state.scrollPosition||0),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(c))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function gu(){const e=vt(hu);if(!e)throw new Error("useRouter() is called without provider.");return e}function gl(){return gu().route}function wi(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-du()+i;requestAnimationFrame(r)}}function Os(e){const t=new URL(e,pl);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),_t.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const Cn=()=>In.forEach(e=>e()),ad=cr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=gl(),{frontmatter:n,site:s}=au();return Ie(n,Cn,{deep:!0,flush:"post"}),()=>Bs(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Bs(t.component,{onVnodeMounted:Cn,onVnodeUpdated:Cn,onVnodeUnmounted:Cn}):"404 Page Not Found"])}}),fd=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},mu="modulepreload",yu=function(e){return"/"+e},Si={},ud=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=yu(c),c in Si)return;Si[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const d=document.createElement("link");if(d.rel=f?"stylesheet":mu,f||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),f)return new Promise((g,y)=>{d.addEventListener("load",g),d.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},dd=cr({setup(e,{slots:t}){const n=Fe(!1);return Dt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function hd(){he&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function pd(){if(he){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),vu(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function vu(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function gd(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=Ms(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(Ms);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};pr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=dl(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let d=document.querySelector("meta[name=description]");d?d.getAttribute("content")!==a&&d.setAttribute("content",a):Ms(["meta",{name:"description",content:a}]),r(hl(o.head,_u(c)))})}function Ms([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function bu(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function _u(e){return e.filter(t=>!bu(t))}const Ps=new Set,ml=()=>document.createElement("link"),wu=e=>{const t=ml();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Su=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let An;const Tu=he&&(An=ml())&&An.relList&&An.relList.supports&&An.relList.supports("prefetch")?wu:Su;function md(){if(!he||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!Ps.has(c)){Ps.add(c);const f=uu(c);f&&Tu(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):Ps.add(l))})})};Dt(s);const r=gl();Ie(()=>r.path,s),Zn(()=>{n&&n.disconnect()})}export{ao as $,du as A,Lu as B,Ou as C,Te as D,ld as E,me as F,ie as G,Mu as H,fl as I,gl as J,Sa as K,vt as L,rd as M,rr as N,Zu as O,zn as P,sd as Q,he as R,Gn as S,ku as T,Ru as U,ud as V,td as W,ta as X,Nu as Y,qu as Z,fd as _,Do as a,Ku as a0,Fu as a1,Pl as a2,Eu as a3,Lt as a4,xu as a5,sr as a6,ln as a7,ye as a8,Ht as a9,cd as aA,uu as aB,Ju as aC,md as aD,pd as aE,hd as aF,ju as aG,Iu as aH,oe as aI,Ts as aJ,_r as aK,Xu as aL,tl as aM,Qu as aN,nd as aO,ed as aP,zu as aQ,gu as aR,ze as aS,Yu as aT,id as aU,Bs as aa,De as ab,z as ac,Dc as ad,Fc as ae,Wu as af,ce as ag,rc as ah,jc as ai,Cu as aj,Pu as ak,Uu as al,bt as am,Rn as an,Au as ao,it as ap,Vc as aq,Bu as ar,Gu as as,gd as at,hu as au,od as av,cu as aw,ad as ax,dd as ay,_t as az,Us as b,Hu as c,cr as d,Vu as e,lu as f,bi as g,se as h,eu as i,Fo as j,er as k,Zf as l,ol as m,ir as n,ks as o,Fe as p,Ie as q,$u as r,pr as s,Tc as t,au as u,Dt as v,Ac as w,Zn as x,Du as y,co as z}; diff --git a/assets/chunks/framework.DytOxJW6.js b/assets/chunks/framework.DytOxJW6.js new file mode 100644 index 0000000..9c7fe00 --- /dev/null +++ b/assets/chunks/framework.DytOxJW6.js @@ -0,0 +1,26 @@ +/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Sl(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Tl={},El=()=>{},xl=Object.assign,Cl=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Al=Object.prototype.hasOwnProperty,jn=(e,t)=>Al.call(e,t),Xe=Array.isArray,Gt=e=>Gn(e)==="[object Map]",Rl=e=>Gn(e)==="[object Set]",tn=e=>typeof e=="function",Ol=e=>typeof e=="string",un=e=>typeof e=="symbol",Dt=e=>e!==null&&typeof e=="object",Ml=Object.prototype.toString,Gn=e=>Ml.call(e),Pl=e=>Gn(e).slice(8,-1),Ll=e=>Gn(e)==="[object Object]",Xs=e=>Ol(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,rt=(e,t)=>!Object.is(e,t),$l=(e,t,n,s=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})};/** +* @vue/reactivity v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let we;class Ei{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=we,!t&&we&&(this.index=(we.scopes||(we.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;if(Xt){let t=Xt;for(Xt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Yt;){let t=Yt;for(Yt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Oi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Mi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Qs(s),Nl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Is(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Pi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Pi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===nn))return;e.globalVersion=nn;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Is(e)){e.flags&=-3;return}const n=te,s=Fe;te=e,Fe=!0;try{Oi(e);const r=e.fn(e._value);(t.version===0||rt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{te=n,Fe=s,Mi(e),e.flags&=-3}}function Qs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Qs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Nl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Fe=!0;const Li=[];function lt(){Li.push(Fe),Fe=!1}function ct(){const e=Li.pop();Fe=e===void 0?!0:e}function Rr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=te;te=void 0;try{t()}finally{te=n}}}let nn=0;class Fl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Yn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!te||!Fe||te===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==te)n=this.activeLink=new Fl(te,this),te.deps?(n.prevDep=te.depsTail,te.depsTail.nextDep=n,te.depsTail=n):te.deps=te.depsTail=n,$i(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=te.depsTail,n.nextDep=void 0,te.depsTail.nextDep=n,te.depsTail=n,te.deps===n&&(te.deps=s)}return n}trigger(t){this.version++,nn++,this.notify(t)}notify(t){zs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Js()}}}function $i(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)$i(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Dn=new WeakMap,gt=Symbol(""),Ns=Symbol(""),sn=Symbol("");function pe(e,t,n){if(Fe&&te){let s=Dn.get(e);s||Dn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Yn),r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=Dn.get(e);if(!o){nn++;return}const l=c=>{c&&c.trigger()};if(zs(),t==="clear")o.forEach(l);else{const c=Xe(e),f=c&&Xs(n);if(c&&n==="length"){const a=Number(s);o.forEach((d,g)=>{(g==="length"||g===sn||!un(g)&&g>=a)&&l(d)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),f&&l(o.get(sn)),t){case"add":c?f&&l(o.get("length")):(l(o.get(gt)),Gt(e)&&l(o.get(Ns)));break;case"delete":c||(l(o.get(gt)),Gt(e)&&l(o.get(Ns)));break;case"set":Gt(e)&&l(o.get(gt));break}}Js()}function jl(e,t){const n=Dn.get(e);return n&&n.get(t)}function xt(e){const t=J(e);return t===e?t:(pe(t,"iterate",sn),Le(e)?t:t.map(ge))}function Xn(e){return pe(e=J(e),"iterate",sn),e}const Dl={__proto__:null,[Symbol.iterator](){return us(this,Symbol.iterator,ge)},concat(...e){return xt(this).concat(...e.map(t=>Xe(t)?xt(t):t))},entries(){return us(this,"entries",e=>(e[1]=ge(e[1]),e))},every(e,t){return Ke(this,"every",e,t,void 0,arguments)},filter(e,t){return Ke(this,"filter",e,t,n=>n.map(ge),arguments)},find(e,t){return Ke(this,"find",e,t,ge,arguments)},findIndex(e,t){return Ke(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ke(this,"findLast",e,t,ge,arguments)},findLastIndex(e,t){return Ke(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ke(this,"forEach",e,t,void 0,arguments)},includes(...e){return ds(this,"includes",e)},indexOf(...e){return ds(this,"indexOf",e)},join(e){return xt(this).join(e)},lastIndexOf(...e){return ds(this,"lastIndexOf",e)},map(e,t){return Ke(this,"map",e,t,void 0,arguments)},pop(){return Wt(this,"pop")},push(...e){return Wt(this,"push",e)},reduce(e,...t){return Or(this,"reduce",e,t)},reduceRight(e,...t){return Or(this,"reduceRight",e,t)},shift(){return Wt(this,"shift")},some(e,t){return Ke(this,"some",e,t,void 0,arguments)},splice(...e){return Wt(this,"splice",e)},toReversed(){return xt(this).toReversed()},toSorted(e){return xt(this).toSorted(e)},toSpliced(...e){return xt(this).toSpliced(...e)},unshift(...e){return Wt(this,"unshift",e)},values(){return us(this,"values",ge)}};function us(e,t,n){const s=Xn(e),r=s[t]();return s!==e&&!Le(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const Hl=Array.prototype;function Ke(e,t,n,s,r,i){const o=Xn(e),l=o!==e&&!Le(e),c=o[t];if(c!==Hl[t]){const d=c.apply(e,i);return l?ge(d):d}let f=n;o!==e&&(l?f=function(d,g){return n.call(this,ge(d),g,e)}:n.length>2&&(f=function(d,g){return n.call(this,d,g,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function Or(e,t,n,s){const r=Xn(e);let i=n;return r!==e&&(Le(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,ge(l),c,e)}),r[t](i,...s)}function ds(e,t,n){const s=J(e);pe(s,"iterate",sn);const r=s[t](...n);return(r===-1||r===!1)&&tr(n[0])?(n[0]=J(n[0]),s[t](...n)):r}function Wt(e,t,n=[]){lt(),zs();const s=J(e)[t].apply(e,n);return Js(),ct(),s}const Vl=Sl("__proto__,__v_isRef,__isVue"),Ii=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(un));function kl(e){un(e)||(e=String(e));const t=J(this);return pe(t,"has",e),t.hasOwnProperty(e)}class Ni{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Jl:Hi:i?Di:ji).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=Xe(t);if(!r){let c;if(o&&(c=Dl[n]))return c;if(n==="hasOwnProperty")return kl}const l=Reflect.get(t,n,ce(t)?t:s);return(un(n)?Ii.has(n):Vl(n))||(r||pe(t,"get",n),i)?l:ce(l)?o&&Xs(n)?l:l.value:Dt(l)?r?zn(l):It(l):l}}class Fi extends Ni{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=St(i);if(!Le(s)&&!St(s)&&(i=J(i),s=J(s)),!Xe(t)&&ce(i)&&!ce(s))return c?!1:(i.value=s,!0)}const o=Xe(t)&&Xs(n)?Number(n)e,_n=e=>Reflect.getPrototypeOf(e);function ql(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),o=Gt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?Fs:t?js:ge;return!t&&pe(i,"iterate",c?Ns:gt),{next(){const{value:d,done:g}=f.next();return g?{value:d,done:g}:{value:l?[a(d[0]),a(d[1])]:a(d),done:g}},[Symbol.iterator](){return this}}}}function wn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Gl(e,t){const n={get(r){const i=this.__v_raw,o=J(i),l=J(r);e||(rt(r,l)&&pe(o,"get",r),pe(o,"get",l));const{has:c}=_n(o),f=t?Fs:e?js:ge;if(c.call(o,r))return f(i.get(r));if(c.call(o,l))return f(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&pe(J(r),"iterate",gt),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=J(i),l=J(r);return e||(rt(r,l)&&pe(o,"has",r),pe(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=J(l),f=t?Fs:e?js:ge;return!e&&pe(c,"iterate",gt),l.forEach((a,d)=>r.call(i,f(a),f(d),o))}};return xl(n,e?{add:wn("add"),set:wn("set"),delete:wn("delete"),clear:wn("clear")}:{add(r){!t&&!Le(r)&&!St(r)&&(r=J(r));const i=J(this);return _n(i).has.call(i,r)||(i.add(r),Ge(i,"add",r,r)),this},set(r,i){!t&&!Le(i)&&!St(i)&&(i=J(i));const o=J(this),{has:l,get:c}=_n(o);let f=l.call(o,r);f||(r=J(r),f=l.call(o,r));const a=c.call(o,r);return o.set(r,i),f?rt(i,a)&&Ge(o,"set",r,i):Ge(o,"add",r,i),this},delete(r){const i=J(this),{has:o,get:l}=_n(i);let c=o.call(i,r);c||(r=J(r),c=o.call(i,r)),l&&l.call(i,r);const f=i.delete(r);return c&&Ge(i,"delete",r,void 0),f},clear(){const r=J(this),i=r.size!==0,o=r.clear();return i&&Ge(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=ql(r,e,t)}),n}function Zs(e,t){const n=Gl(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(jn(n,r)&&r in s?n:s,r,i)}const Yl={get:Zs(!1,!1)},Xl={get:Zs(!1,!0)},zl={get:Zs(!0,!1)};const ji=new WeakMap,Di=new WeakMap,Hi=new WeakMap,Jl=new WeakMap;function Ql(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Zl(e){return e.__v_skip||!Object.isExtensible(e)?0:Ql(Pl(e))}function It(e){return St(e)?e:er(e,!1,Wl,Yl,ji)}function ec(e){return er(e,!1,Kl,Xl,Di)}function zn(e){return er(e,!0,Bl,zl,Hi)}function er(e,t,n,s,r){if(!Dt(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Zl(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function mt(e){return St(e)?mt(e.__v_raw):!!(e&&e.__v_isReactive)}function St(e){return!!(e&&e.__v_isReadonly)}function Le(e){return!!(e&&e.__v_isShallow)}function tr(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function Pn(e){return!jn(e,"__v_skip")&&Object.isExtensible(e)&&$l(e,"__v_skip",!0),e}const ge=e=>Dt(e)?It(e):e,js=e=>Dt(e)?zn(e):e;function ce(e){return e?e.__v_isRef===!0:!1}function je(e){return Vi(e,!1)}function Te(e){return Vi(e,!0)}function Vi(e,t){return ce(e)?e:new tc(e,t)}class tc{constructor(t,n){this.dep=new Yn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:J(t),this._value=n?t:ge(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Le(t)||St(t);t=s?t:J(t),rt(t,n)&&(this._rawValue=t,this._value=s?t:ge(t),this.dep.trigger())}}function nr(e){return ce(e)?e.value:e}function oe(e){return tn(e)?e():nr(e)}const nc={get:(e,t,n)=>t==="__v_raw"?e:nr(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ce(r)&&!ce(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ki(e){return mt(e)?e:new Proxy(e,nc)}class sc{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Yn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Ui(e){return new sc(e)}function Au(e){const t=Xe(e)?new Array(e.length):{};for(const n in e)t[n]=Wi(e,n);return t}class rc{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 jl(J(this._object),this._key)}}class ic{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function oc(e,t,n){return ce(e)?e:tn(e)?new ic(e):Dt(e)&&arguments.length>1?Wi(e,t,n):je(e)}function Wi(e,t,n){const s=e[t];return ce(s)?s:new rc(e,t,n)}class lc{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Yn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=nn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&te!==this)return Ri(this,!0),!0}get value(){const t=this.dep.track();return Pi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function cc(e,t,n=!1){let s,r;return tn(e)?s=e:(s=e.get,r=e.set),new lc(s,r,n)}const Sn={},Hn=new WeakMap;let ht;function ac(e,t=!1,n=ht){if(n){let s=Hn.get(n);s||Hn.set(n,s=[]),s.push(e)}}function fc(e,t,n=Tl){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=y=>r?y:Le(y)||r===!1||r===0?Ye(y,1):Ye(y);let a,d,g,m,_=!1,v=!1;if(ce(e)?(d=()=>e.value,_=Le(e)):mt(e)?(d=()=>f(e),_=!0):Xe(e)?(v=!0,_=e.some(y=>mt(y)||Le(y)),d=()=>e.map(y=>{if(ce(y))return y.value;if(mt(y))return f(y);if(tn(y))return c?c(y,2):y()})):tn(e)?t?d=c?()=>c(e,2):e:d=()=>{if(g){lt();try{g()}finally{ct()}}const y=ht;ht=a;try{return c?c(e,3,[m]):e(m)}finally{ht=y}}:d=El,t&&r){const y=d,M=r===!0?1/0:r;d=()=>Ye(y(),M)}const k=xi(),P=()=>{a.stop(),k&&k.active&&Cl(k.effects,a)};if(i&&t){const y=t;t=(...M)=>{y(...M),P()}}let j=v?new Array(e.length).fill(Sn):Sn;const p=y=>{if(!(!(a.flags&1)||!a.dirty&&!y))if(t){const M=a.run();if(r||_||(v?M.some((D,R)=>rt(D,j[R])):rt(M,j))){g&&g();const D=ht;ht=a;try{const R=[M,j===Sn?void 0:v&&j[0]===Sn?[]:j,m];c?c(t,3,R):t(...R),j=M}finally{ht=D}}}else a.run()};return l&&l(p),a=new Ci(d),a.scheduler=o?()=>o(p,!1):p,m=y=>ac(y,!1,a),g=a.onStop=()=>{const y=Hn.get(a);if(y){if(c)c(y,4);else for(const M of y)M();Hn.delete(a)}},t?s?p(!0):j=a.run():o?o(p.bind(null,!0),!0):a.run(),P.pause=a.pause.bind(a),P.resume=a.resume.bind(a),P.stop=P,P}function Ye(e,t=1/0,n){if(t<=0||!Dt(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ce(e))Ye(e.value,t,n);else if(Xe(e))for(let s=0;s{Ye(s,t,n)});else if(Ll(e)){for(const s in e)Ye(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ye(e[s],t,n)}return e}/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function uc(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Q={},Pt=[],ze=()=>{},dc=()=>!1,Jn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Bi=e=>e.startsWith("onUpdate:"),Ee=Object.assign,Ki=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},hc=Object.prototype.hasOwnProperty,ne=(e,t)=>hc.call(e,t),Y=Array.isArray,pc=e=>rr(e)==="[object Map]",gc=e=>rr(e)==="[object Set]",G=e=>typeof e=="function",ve=e=>typeof e=="string",sr=e=>typeof e=="symbol",ue=e=>e!==null&&typeof e=="object",qi=e=>(ue(e)||G(e))&&G(e.then)&&G(e.catch),Gi=Object.prototype.toString,rr=e=>Gi.call(e),mc=e=>rr(e)==="[object Object]",Lt=uc(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Qn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},yc=/-(\w)/g,Ie=Qn(e=>e.replace(yc,(t,n)=>n?n.toUpperCase():"")),vc=/\B([A-Z])/g,Ht=Qn(e=>e.replace(vc,"-$1").toLowerCase()),ir=Qn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ln=Qn(e=>e?`on${ir(e)}`:""),Ct=(e,t)=>!Object.is(e,t),hs=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},_c=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Mr;const Zn=()=>Mr||(Mr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function or(e){if(Y(e)){const t={};for(let n=0;n{if(n){const s=n.split(Sc);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function lr(e){let t="";if(ve(e))t=e;else if(Y(e))for(let n=0;n!!(e&&e.__v_isRef===!0),xc=e=>ve(e)?e:e==null?"":Y(e)||ue(e)&&(e.toString===Gi||!G(e.toString))?Yi(e)?xc(e.value):JSON.stringify(e,Xi,2):String(e),Xi=(e,t)=>Yi(t)?Xi(e,t.value):pc(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[ps(s,i)+" =>"]=r,n),{})}:gc(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ps(n))}:sr(t)?ps(t):ue(t)&&!Y(t)&&!mc(t)?String(t):t,ps=(e,t="")=>{var n;return sr(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function dn(e,t,n,s){try{return s?e(...s):e()}catch(r){hn(r,t,n)}}function De(e,t,n,s){if(G(e)){const r=dn(e,t,n,s);return r&&qi(r)&&r.catch(i=>{hn(i,t,n)}),r}if(Y(e)){const r=[];for(let i=0;i>>1,r=Se[s],i=rn(r);i=rn(n)?Se.push(e):Se.splice(Ac(t),0,e),e.flags|=1,Ji()}}function Ji(){Vn||(Vn=zi.then(Qi))}function Rc(e){Y(e)?$t.push(...e):tt&&e.id===-1?tt.splice(Rt+1,0,e):e.flags&1||($t.push(e),e.flags|=1),Ji()}function Pr(e,t,n=We+1){for(;nrn(n)-rn(s));if($t.length=0,tt){tt.push(...t);return}for(tt=t,Rt=0;Rte.id==null?e.flags&2?-1:1/0:e.id;function Qi(e){try{for(We=0;We{s._d&&Kr(-1);const i=Un(t);let o;try{o=e(...r)}finally{Un(i),s._d&&Kr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Ru(e,t){if(fe===null)return e;const n=rs(fe),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,zt=e=>e&&(e.disabled||e.disabled===""),Lr=e=>e&&(e.defer||e.defer===""),$r=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Ir=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ds=(e,t)=>{const n=e&&e.to;return ve(n)?t?t(n):null:n},no={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:d,pbc:g,o:{insert:m,querySelector:_,createText:v,createComment:k}}=f,P=zt(t.props);let{shapeFlag:j,children:p,dynamicChildren:y}=t;if(e==null){const M=t.el=v(""),D=t.anchor=v("");m(M,n,s),m(D,n,s);const R=(T,O)=>{j&16&&(r&&r.isCE&&(r.ce._teleportTarget=T),a(p,T,O,r,i,o,l,c))},H=()=>{const T=t.target=Ds(t.props,_),O=so(T,t,v,m);T&&(o!=="svg"&&$r(T)?o="svg":o!=="mathml"&&Ir(T)&&(o="mathml"),P||(R(T,O),$n(t,!1)))};P&&(R(n,D),$n(t,!0)),Lr(t.props)?_e(()=>{H(),t.el.__isMounted=!0},i):H()}else{if(Lr(t.props)&&!e.el.__isMounted){_e(()=>{no.process(e,t,n,s,r,i,o,l,c,f),delete e.el.__isMounted},i);return}t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,D=t.target=e.target,R=t.targetAnchor=e.targetAnchor,H=zt(e.props),T=H?n:D,O=H?M:R;if(o==="svg"||$r(D)?o="svg":(o==="mathml"||Ir(D))&&(o="mathml"),y?(g(e.dynamicChildren,y,T,r,i,o,l),gr(e,t,!0)):c||d(e,t,T,O,r,i,o,l,!1),P)H?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Tn(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const A=t.target=Ds(t.props,_);A&&Tn(t,A,null,f,0)}else H&&Tn(t,D,R,f,1);$n(t,P)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:d,props:g}=e;if(d&&(r(f),r(a)),i&&r(c),o&16){const m=i||!zt(g);for(let _=0;_{e.isMounted=!0}),uo(()=>{e.isUnmounting=!0}),e}const Oe=[Function,Array],io={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Oe,onEnter:Oe,onAfterEnter:Oe,onEnterCancelled:Oe,onBeforeLeave:Oe,onLeave:Oe,onAfterLeave:Oe,onLeaveCancelled:Oe,onBeforeAppear:Oe,onAppear:Oe,onAfterAppear:Oe,onAppearCancelled:Oe},oo=e=>{const t=e.subTree;return t.component?oo(t.component):t},Pc={name:"BaseTransition",props:io,setup(e,{slots:t}){const n=at(),s=ro();return()=>{const r=t.default&&ar(t.default(),!0);if(!r||!r.length)return;const i=lo(r),o=J(e),{mode:l}=o;if(s.isLeaving)return gs(i);const c=Nr(i);if(!c)return gs(i);let f=on(c,o,s,n,d=>f=d);c.type!==ye&&Tt(c,f);let a=n.subTree&&Nr(n.subTree);if(a&&a.type!==ye&&!pt(c,a)&&oo(n).type!==ye){let d=on(a,o,s,n);if(Tt(a,d),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,a=void 0},gs(i);l==="in-out"&&c.type!==ye?d.delayLeave=(g,m,_)=>{const v=co(s,a);v[String(a.key)]=a,g[nt]=()=>{m(),g[nt]=void 0,delete f.delayedLeave,a=void 0},f.delayedLeave=()=>{_(),delete f.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function lo(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const Lc=Pc;function co(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 on(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:d,onBeforeLeave:g,onLeave:m,onAfterLeave:_,onLeaveCancelled:v,onBeforeAppear:k,onAppear:P,onAfterAppear:j,onAppearCancelled:p}=t,y=String(e.key),M=co(n,e),D=(T,O)=>{T&&De(T,s,9,O)},R=(T,O)=>{const A=O[1];D(T,O),Y(T)?T.every(w=>w.length<=1)&&A():T.length<=1&&A()},H={mode:o,persisted:l,beforeEnter(T){let O=c;if(!n.isMounted)if(i)O=k||c;else return;T[nt]&&T[nt](!0);const A=M[y];A&&pt(e,A)&&A.el[nt]&&A.el[nt](),D(O,[T])},enter(T){let O=f,A=a,w=d;if(!n.isMounted)if(i)O=P||f,A=j||a,w=p||d;else return;let N=!1;const X=T[En]=re=>{N||(N=!0,re?D(w,[T]):D(A,[T]),H.delayedLeave&&H.delayedLeave(),T[En]=void 0)};O?R(O,[T,X]):X()},leave(T,O){const A=String(e.key);if(T[En]&&T[En](!0),n.isUnmounting)return O();D(g,[T]);let w=!1;const N=T[nt]=X=>{w||(w=!0,O(),X?D(v,[T]):D(_,[T]),T[nt]=void 0,M[A]===e&&delete M[A])};M[A]=e,m?R(m,[T,N]):N()},clone(T){const O=on(T,t,n,s,r);return r&&r(O),O}};return H}function gs(e){if(pn(e))return e=it(e),e.children=null,e}function Nr(e){if(!pn(e))return to(e.type)&&e.children?lo(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&G(n.default))return n.default()}}function Tt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Tt(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 ar(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;in.value,set:i=>n.value=i})}return n}function ln(e,t,n,s,r=!1){if(Y(e)){e.forEach((_,v)=>ln(_,t&&(Y(t)?t[v]:t),n,s,r));return}if(yt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&ln(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?rs(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===Q?l.refs={}:l.refs,d=l.setupState,g=J(d),m=d===Q?()=>!1:_=>ne(g,_);if(f!=null&&f!==c&&(ve(f)?(a[f]=null,m(f)&&(d[f]=null)):ce(f)&&(f.value=null)),G(c))dn(c,l,12,[o,a]);else{const _=ve(c),v=ce(c);if(_||v){const k=()=>{if(e.f){const P=_?m(c)?d[c]:a[c]:c.value;r?Y(P)&&Ki(P,i):Y(P)?P.includes(i)||P.push(i):_?(a[c]=[i],m(c)&&(d[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else _?(a[c]=o,m(c)&&(d[c]=o)):v&&(c.value=o,e.k&&(a[e.k]=o))};o?(k.id=-1,_e(k,n)):k()}}}let Fr=!1;const At=()=>{Fr||(console.error("Hydration completed but contains mismatches."),Fr=!0)},$c=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Ic=e=>e.namespaceURI.includes("MathML"),xn=e=>{if(e.nodeType===1){if($c(e))return"svg";if(Ic(e))return"mathml"}},Mt=e=>e.nodeType===8;function Nc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,y)=>{if(!y.hasChildNodes()){n(null,p,y),kn(),y._vnode=p;return}d(y.firstChild,p,null,null,null),kn(),y._vnode=p},d=(p,y,M,D,R,H=!1)=>{H=H||!!y.dynamicChildren;const T=Mt(p)&&p.data==="[",O=()=>v(p,y,M,D,R,T),{type:A,ref:w,shapeFlag:N,patchFlag:X}=y;let re=p.nodeType;y.el=p,X===-2&&(H=!1,y.dynamicChildren=null);let U=null;switch(A){case _t:re!==3?y.children===""?(c(y.el=r(""),o(p),p),U=p):U=O():(p.data!==y.children&&(At(),p.data=y.children),U=i(p));break;case ye:j(p)?(U=i(p),P(y.el=p.content.firstChild,p,M)):re!==8||T?U=O():U=i(p);break;case Qt:if(T&&(p=i(p),re=p.nodeType),re===1||re===3){U=p;const q=!y.children.length;for(let V=0;V{H=H||!!y.dynamicChildren;const{type:T,props:O,patchFlag:A,shapeFlag:w,dirs:N,transition:X}=y,re=T==="input"||T==="option";if(re||A!==-1){N&&Be(y,null,M,"created");let U=!1;if(j(p)){U=Oo(null,X)&&M&&M.vnode.props&&M.vnode.props.appear;const V=p.content.firstChild;U&&X.beforeEnter(V),P(V,p,M),y.el=p=V}if(w&16&&!(O&&(O.innerHTML||O.textContent))){let V=m(p.firstChild,y,p,M,D,R,H);for(;V;){Cn(p,1)||At();const le=V;V=V.nextSibling,l(le)}}else if(w&8){let V=y.children;V[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(V=V.slice(1)),p.textContent!==V&&(Cn(p,0)||At(),p.textContent=y.children)}if(O){if(re||!H||A&48){const V=p.tagName.includes("-");for(const le in O)(re&&(le.endsWith("value")||le==="indeterminate")||Jn(le)&&!Lt(le)||le[0]==="."||V)&&s(p,le,null,O[le],void 0,M)}else if(O.onClick)s(p,"onClick",null,O.onClick,void 0,M);else if(A&4&&mt(O.style))for(const V in O.style)O.style[V]}let q;(q=O&&O.onVnodeBeforeMount)&&Me(q,M,y),N&&Be(y,null,M,"beforeMount"),((q=O&&O.onVnodeMounted)||N||U)&&Fo(()=>{q&&Me(q,M,y),U&&X.enter(p),N&&Be(y,null,M,"mounted")},D)}return p.nextSibling},m=(p,y,M,D,R,H,T)=>{T=T||!!y.dynamicChildren;const O=y.children,A=O.length;for(let w=0;w{const{slotScopeIds:T}=y;T&&(R=R?R.concat(T):T);const O=o(p),A=m(i(p),y,O,M,D,R,H);return A&&Mt(A)&&A.data==="]"?i(y.anchor=A):(At(),c(y.anchor=f("]"),O,A),A)},v=(p,y,M,D,R,H)=>{if(Cn(p.parentElement,1)||At(),y.el=null,H){const A=k(p);for(;;){const w=i(p);if(w&&w!==A)l(w);else break}}const T=i(p),O=o(p);return l(p),n(null,y,O,T,M,D,xn(O),R),M&&(M.vnode.el=y.el,Io(M,y.el)),T},k=(p,y="[",M="]")=>{let D=0;for(;p;)if(p=i(p),p&&Mt(p)&&(p.data===y&&D++,p.data===M)){if(D===0)return i(p);D--}return p},P=(p,y,M)=>{const D=y.parentNode;D&&D.replaceChild(p,y);let R=M;for(;R;)R.vnode.el===y&&(R.vnode.el=R.subTree.el=p),R=R.parent},j=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,d]}const jr="data-allow-mismatch",Fc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function Cn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(jr);)e=e.parentElement;const n=e&&e.getAttribute(jr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(Fc[t])}}Zn().requestIdleCallback;Zn().cancelIdleCallback;function jc(e,t){if(Mt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Mt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const yt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Pu(e){G(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,d=0;const g=()=>(d++,f=null,m()),m=()=>{let _;return f||(_=f=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),c)return new Promise((k,P)=>{c(v,()=>k(g()),()=>P(v),d+1)});throw v}).then(v=>_!==f&&f?f:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),a=v,v)))};return fr({name:"AsyncComponentWrapper",__asyncLoader:m,__asyncHydrate(_,v,k){const P=i?()=>{const j=i(k,p=>jc(_,p));j&&(v.bum||(v.bum=[])).push(j)}:k;a?P():m().then(()=>!v.isUnmounted&&P())},get __asyncResolved(){return a},setup(){const _=ae;if(ur(_),a)return()=>ms(a,_);const v=p=>{f=null,hn(p,_,13,!s)};if(l&&_.suspense||Nt)return m().then(p=>()=>ms(p,_)).catch(p=>(v(p),()=>s?ie(s,{error:p}):null));const k=je(!1),P=je(),j=je(!!r);return r&&setTimeout(()=>{j.value=!1},r),o!=null&&setTimeout(()=>{if(!k.value&&!P.value){const p=new Error(`Async component timed out after ${o}ms.`);v(p),P.value=p}},o),m().then(()=>{k.value=!0,_.parent&&pn(_.parent.vnode)&&_.parent.update()}).catch(p=>{v(p),P.value=p}),()=>{if(k.value&&a)return ms(a,_);if(P.value&&s)return ie(s,{error:P.value});if(n&&!j.value)return ie(n)}}})}function ms(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ie(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const pn=e=>e.type.__isKeepAlive;function Dc(e,t){ao(e,"a",t)}function Hc(e,t){ao(e,"da",t)}function ao(e,t,n=ae){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(ts(t,s,n),n){let r=n.parent;for(;r&&r.parent;)pn(r.parent.vnode)&&Vc(s,t,n,r),r=r.parent}}function Vc(e,t,n,s){const r=ts(t,e,s,!0);ns(()=>{Ki(s[t],r)},n)}function ts(e,t,n=ae,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{lt();const l=mn(n),c=De(t,n,e,o);return l(),ct(),c});return s?r.unshift(i):r.push(i),i}}const Qe=e=>(t,n=ae)=>{(!Nt||e==="sp")&&ts(e,(...s)=>t(...s),n)},kc=Qe("bm"),Vt=Qe("m"),Uc=Qe("bu"),fo=Qe("u"),uo=Qe("bum"),ns=Qe("um"),Wc=Qe("sp"),Bc=Qe("rtg"),Kc=Qe("rtc");function qc(e,t=ae){ts("ec",e,t)}const dr="components",Gc="directives";function Lu(e,t){return hr(dr,e,!0,t)||e}const ho=Symbol.for("v-ndc");function $u(e){return ve(e)?hr(dr,e,!1)||e:e||ho}function Iu(e){return hr(Gc,e)}function hr(e,t,n=!0,s=!1){const r=fe||ae;if(r){const i=r.type;if(e===dr){const l=Pa(i,!1);if(l&&(l===t||l===Ie(t)||l===ir(Ie(t))))return i}const o=Dr(r[e]||i[e],t)||Dr(r.appContext[e],t);return!o&&s?i:o}}function Dr(e,t){return e&&(e[t]||e[Ie(t)]||e[ir(Ie(t))])}function Nu(e,t,n,s){let r;const i=n,o=Y(e);if(o||ve(e)){const l=o&&mt(e);let c=!1;l&&(c=!Le(e),e=Xn(e)),r=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;c{const i=s.fn(...r);return i&&(i.key=s.key),i}:s.fn)}return e}function ju(e,t,n={},s,r){if(fe.ce||fe.parent&&yt(fe.parent)&&fe.parent.ce)return t!=="default"&&(n.name=t),Ws(),Bs(me,null,[ie("slot",n,s&&s())],64);let i=e[t];i&&i._c&&(i._d=!1),Ws();const o=i&&po(i(n)),l=n.key||o&&o.key,c=Bs(me,{key:(l&&!sr(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function po(e){return e.some(t=>fn(t)?!(t.type===ye||t.type===me&&!po(t.children)):!0)?e:null}function Du(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:Ln(s)]=e[s];return n}const Hs=e=>e?ko(e)?rs(e):Hs(e.parent):null,Jt=Ee(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=>Hs(e.parent),$root:e=>Hs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>mo(e),$forceUpdate:e=>e.f||(e.f=()=>{cr(e.update)}),$nextTick:e=>e.n||(e.n=es.bind(e.proxy)),$watch:e=>ma.bind(e)}),ys=(e,t)=>e!==Q&&!e.__isScriptSetup&&ne(e,t),Yc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const m=o[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ys(s,t))return o[t]=1,s[t];if(r!==Q&&ne(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&ne(f,t))return o[t]=3,i[t];if(n!==Q&&ne(n,t))return o[t]=4,n[t];Vs&&(o[t]=0)}}const a=Jt[t];let d,g;if(a)return t==="$attrs"&&pe(e.attrs,"get",""),a(e);if((d=l.__cssModules)&&(d=d[t]))return d;if(n!==Q&&ne(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,ne(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ys(r,t)?(r[t]=n,!0):s!==Q&&ne(s,t)?(s[t]=n,!0):ne(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==Q&&ne(e,o)||ys(t,o)||(l=i[0])&&ne(l,o)||ne(s,o)||ne(Jt,o)||ne(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ne(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Hu(){return Xc().slots}function Xc(){const e=at();return e.setupContext||(e.setupContext=Wo(e))}function cn(e){return Y(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function Vu(e,t){const n=cn(e);for(const s in t){if(s.startsWith("__skip"))continue;let r=n[s];r?Y(r)||G(r)?r=n[s]={type:r,default:t[s]}:r.default=t[s]:r===null&&(r=n[s]={default:t[s]}),r&&t[`__skip_${s}`]&&(r.skipFactory=!0)}return n}function ku(e,t){return!e||!t?e||t:Y(e)&&Y(t)?e.concat(t):Ee({},cn(e),cn(t))}let Vs=!0;function zc(e){const t=mo(e),n=e.proxy,s=e.ctx;Vs=!1,t.beforeCreate&&Hr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:d,mounted:g,beforeUpdate:m,updated:_,activated:v,deactivated:k,beforeDestroy:P,beforeUnmount:j,destroyed:p,unmounted:y,render:M,renderTracked:D,renderTriggered:R,errorCaptured:H,serverPrefetch:T,expose:O,inheritAttrs:A,components:w,directives:N,filters:X}=t;if(f&&Jc(f,s,null),o)for(const q in o){const V=o[q];G(V)&&(s[q]=V.bind(n))}if(r){const q=r.call(n,n);ue(q)&&(e.data=It(q))}if(Vs=!0,i)for(const q in i){const V=i[q],le=G(V)?V.bind(n,n):G(V.get)?V.get.bind(n,n):ze,vn=!G(V)&&G(V.set)?V.set.bind(n):ze,ft=se({get:le,set:vn});Object.defineProperty(s,q,{enumerable:!0,configurable:!0,get:()=>ft.value,set:Ve=>ft.value=Ve})}if(l)for(const q in l)go(l[q],s,n,q);if(c){const q=G(c)?c.call(n):c;Reflect.ownKeys(q).forEach(V=>{sa(V,q[V])})}a&&Hr(a,e,"c");function U(q,V){Y(V)?V.forEach(le=>q(le.bind(n))):V&&q(V.bind(n))}if(U(kc,d),U(Vt,g),U(Uc,m),U(fo,_),U(Dc,v),U(Hc,k),U(qc,H),U(Kc,D),U(Bc,R),U(uo,j),U(ns,y),U(Wc,T),Y(O))if(O.length){const q=e.exposed||(e.exposed={});O.forEach(V=>{Object.defineProperty(q,V,{get:()=>n[V],set:le=>n[V]=le})})}else e.exposed||(e.exposed={});M&&e.render===ze&&(e.render=M),A!=null&&(e.inheritAttrs=A),w&&(e.components=w),N&&(e.directives=N),T&&ur(e)}function Jc(e,t,n=ze){Y(e)&&(e=ks(e));for(const s in e){const r=e[s];let i;ue(r)?"default"in r?i=bt(r.from||s,r.default,!0):i=bt(r.from||s):i=bt(r),ce(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Hr(e,t,n){De(Y(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function go(e,t,n,s){let r=s.includes(".")?Po(n,s):()=>n[s];if(ve(e)){const i=t[e];G(i)&&$e(r,i)}else if(G(e))$e(r,e.bind(n));else if(ue(e))if(Y(e))e.forEach(i=>go(i,t,n,s));else{const i=G(e.handler)?e.handler.bind(n):t[e.handler];G(i)&&$e(r,i,e)}}function mo(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Wn(c,f,o,!0)),Wn(c,t,o)),ue(t)&&i.set(t,c),c}function Wn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Wn(e,i,n,!0),r&&r.forEach(o=>Wn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Qc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Qc={data:Vr,props:kr,emits:kr,methods:qt,computed:qt,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:qt,directives:qt,watch:ea,provide:Vr,inject:Zc};function Vr(e,t){return t?e?function(){return Ee(G(e)?e.call(this,this):e,G(t)?t.call(this,this):t)}:t:e}function Zc(e,t){return qt(ks(e),ks(t))}function ks(e){if(Y(e)){const t={};for(let n=0;n1)return n&&G(t)?t.call(s&&s.proxy):t}}function vo(){return!!(ae||fe||vt)}const bo={},_o=()=>Object.create(bo),wo=e=>Object.getPrototypeOf(e)===bo;function ra(e,t,n,s=!1){const r={},i=_o();e.propsDefaults=Object.create(null),So(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:ec(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function ia(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=J(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[g,m]=To(d,t,!0);Ee(o,g),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ue(e)&&s.set(e,Pt),Pt;if(Y(i))for(let a=0;ae[0]==="_"||e==="$stable",pr=e=>Y(e)?e.map(Pe):[Pe(e)],la=(e,t,n)=>{if(t._n)return t;const s=Oc((...r)=>pr(t(...r)),n);return s._c=!1,s},xo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Eo(r))continue;const i=e[r];if(G(i))t[r]=la(r,i,s);else if(i!=null){const o=pr(i);t[r]=()=>o}}},Co=(e,t)=>{const n=pr(t);e.slots.default=()=>n},Ao=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},ca=(e,t,n)=>{const s=e.slots=_o();if(e.vnode.shapeFlag&32){const r=t._;r?(Ao(s,t,n),n&&bc(s,"_",r,!0)):xo(t,s)}else t&&Co(e,t)},aa=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=Q;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:Ao(r,t,n):(i=!t.$stable,xo(t,r)),o=t}else t&&(Co(e,t),o={default:1});if(i)for(const l in r)!Eo(l)&&o[l]==null&&delete r[l]},_e=Fo;function fa(e){return Ro(e)}function ua(e){return Ro(e,Nc)}function Ro(e,t){const n=Zn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:d,nextSibling:g,setScopeId:m=ze,insertStaticContent:_}=e,v=(u,h,b,x=null,S=null,E=null,I=void 0,$=null,L=!!h.dynamicChildren)=>{if(u===h)return;u&&!pt(u,h)&&(x=bn(u),Ve(u,S,E,!0),u=null),h.patchFlag===-2&&(L=!1,h.dynamicChildren=null);const{type:C,ref:B,shapeFlag:F}=h;switch(C){case _t:k(u,h,b,x);break;case ye:P(u,h,b,x);break;case Qt:u==null&&j(h,b,x,I);break;case me:w(u,h,b,x,S,E,I,$,L);break;default:F&1?M(u,h,b,x,S,E,I,$,L):F&6?N(u,h,b,x,S,E,I,$,L):(F&64||F&128)&&C.process(u,h,b,x,S,E,I,$,L,Et)}B!=null&&S&&ln(B,u&&u.ref,E,h||u,!h)},k=(u,h,b,x)=>{if(u==null)s(h.el=l(h.children),b,x);else{const S=h.el=u.el;h.children!==u.children&&f(S,h.children)}},P=(u,h,b,x)=>{u==null?s(h.el=c(h.children||""),b,x):h.el=u.el},j=(u,h,b,x)=>{[u.el,u.anchor]=_(u.children,h,b,x,u.el,u.anchor)},p=({el:u,anchor:h},b,x)=>{let S;for(;u&&u!==h;)S=g(u),s(u,b,x),u=S;s(h,b,x)},y=({el:u,anchor:h})=>{let b;for(;u&&u!==h;)b=g(u),r(u),u=b;r(h)},M=(u,h,b,x,S,E,I,$,L)=>{h.type==="svg"?I="svg":h.type==="math"&&(I="mathml"),u==null?D(h,b,x,S,E,I,$,L):T(u,h,S,E,I,$,L)},D=(u,h,b,x,S,E,I,$)=>{let L,C;const{props:B,shapeFlag:F,transition:W,dirs:K}=u;if(L=u.el=o(u.type,E,B&&B.is,B),F&8?a(L,u.children):F&16&&H(u.children,L,null,x,S,vs(u,E),I,$),K&&Be(u,null,x,"created"),R(L,u,u.scopeId,I,x),B){for(const ee in B)ee!=="value"&&!Lt(ee)&&i(L,ee,null,B[ee],E,x);"value"in B&&i(L,"value",null,B.value,E),(C=B.onVnodeBeforeMount)&&Me(C,x,u)}K&&Be(u,null,x,"beforeMount");const z=Oo(S,W);z&&W.beforeEnter(L),s(L,h,b),((C=B&&B.onVnodeMounted)||z||K)&&_e(()=>{C&&Me(C,x,u),z&&W.enter(L),K&&Be(u,null,x,"mounted")},S)},R=(u,h,b,x,S)=>{if(b&&m(u,b),x)for(let E=0;E{for(let C=L;C{const $=h.el=u.el;let{patchFlag:L,dynamicChildren:C,dirs:B}=h;L|=u.patchFlag&16;const F=u.props||Q,W=h.props||Q;let K;if(b&&ut(b,!1),(K=W.onVnodeBeforeUpdate)&&Me(K,b,h,u),B&&Be(h,u,b,"beforeUpdate"),b&&ut(b,!0),(F.innerHTML&&W.innerHTML==null||F.textContent&&W.textContent==null)&&a($,""),C?O(u.dynamicChildren,C,$,b,x,vs(h,S),E):I||V(u,h,$,null,b,x,vs(h,S),E,!1),L>0){if(L&16)A($,F,W,b,S);else if(L&2&&F.class!==W.class&&i($,"class",null,W.class,S),L&4&&i($,"style",F.style,W.style,S),L&8){const z=h.dynamicProps;for(let ee=0;ee{K&&Me(K,b,h,u),B&&Be(h,u,b,"updated")},x)},O=(u,h,b,x,S,E,I)=>{for(let $=0;${if(h!==b){if(h!==Q)for(const E in h)!Lt(E)&&!(E in b)&&i(u,E,h[E],null,S,x);for(const E in b){if(Lt(E))continue;const I=b[E],$=h[E];I!==$&&E!=="value"&&i(u,E,$,I,S,x)}"value"in b&&i(u,"value",h.value,b.value,S)}},w=(u,h,b,x,S,E,I,$,L)=>{const C=h.el=u?u.el:l(""),B=h.anchor=u?u.anchor:l("");let{patchFlag:F,dynamicChildren:W,slotScopeIds:K}=h;K&&($=$?$.concat(K):K),u==null?(s(C,b,x),s(B,b,x),H(h.children||[],b,B,S,E,I,$,L)):F>0&&F&64&&W&&u.dynamicChildren?(O(u.dynamicChildren,W,b,S,E,I,$),(h.key!=null||S&&h===S.subTree)&&gr(u,h,!0)):V(u,h,b,B,S,E,I,$,L)},N=(u,h,b,x,S,E,I,$,L)=>{h.slotScopeIds=$,u==null?h.shapeFlag&512?S.ctx.activate(h,b,x,I,L):X(h,b,x,S,E,I,L):re(u,h,L)},X=(u,h,b,x,S,E,I)=>{const $=u.component=Aa(u,x,S);if(pn(u)&&($.ctx.renderer=Et),Ra($,!1,I),$.asyncDep){if(S&&S.registerDep($,U,I),!u.el){const L=$.subTree=ie(ye);P(null,L,h,b)}}else U($,u,h,b,S,E,I)},re=(u,h,b)=>{const x=h.component=u.component;if(_a(u,h,b))if(x.asyncDep&&!x.asyncResolved){q(x,h,b);return}else x.next=h,x.update();else h.el=u.el,x.vnode=h},U=(u,h,b,x,S,E,I)=>{const $=()=>{if(u.isMounted){let{next:F,bu:W,u:K,parent:z,vnode:ee}=u;{const Ce=Mo(u);if(Ce){F&&(F.el=ee.el,q(u,F,I)),Ce.asyncDep.then(()=>{u.isUnmounted||$()});return}}let Z=F,xe;ut(u,!1),F?(F.el=ee.el,q(u,F,I)):F=ee,W&&hs(W),(xe=F.props&&F.props.onVnodeBeforeUpdate)&&Me(xe,z,F,ee),ut(u,!0);const de=bs(u),Ne=u.subTree;u.subTree=de,v(Ne,de,d(Ne.el),bn(Ne),u,S,E),F.el=de.el,Z===null&&Io(u,de.el),K&&_e(K,S),(xe=F.props&&F.props.onVnodeUpdated)&&_e(()=>Me(xe,z,F,ee),S)}else{let F;const{el:W,props:K}=h,{bm:z,m:ee,parent:Z,root:xe,type:de}=u,Ne=yt(h);if(ut(u,!1),z&&hs(z),!Ne&&(F=K&&K.onVnodeBeforeMount)&&Me(F,Z,h),ut(u,!0),W&&as){const Ce=()=>{u.subTree=bs(u),as(W,u.subTree,u,S,null)};Ne&&de.__asyncHydrate?de.__asyncHydrate(W,u,Ce):Ce()}else{xe.ce&&xe.ce._injectChildStyle(de);const Ce=u.subTree=bs(u);v(null,Ce,b,x,u,S,E),h.el=Ce.el}if(ee&&_e(ee,S),!Ne&&(F=K&&K.onVnodeMounted)){const Ce=h;_e(()=>Me(F,Z,Ce),S)}(h.shapeFlag&256||Z&&yt(Z.vnode)&&Z.vnode.shapeFlag&256)&&u.a&&_e(u.a,S),u.isMounted=!0,h=b=x=null}};u.scope.on();const L=u.effect=new Ci($);u.scope.off();const C=u.update=L.run.bind(L),B=u.job=L.runIfDirty.bind(L);B.i=u,B.id=u.uid,L.scheduler=()=>cr(B),ut(u,!0),C()},q=(u,h,b)=>{h.component=u;const x=u.vnode.props;u.vnode=h,u.next=null,ia(u,h.props,x,b),aa(u,h.children,b),lt(),Pr(u),ct()},V=(u,h,b,x,S,E,I,$,L=!1)=>{const C=u&&u.children,B=u?u.shapeFlag:0,F=h.children,{patchFlag:W,shapeFlag:K}=h;if(W>0){if(W&128){vn(C,F,b,x,S,E,I,$,L);return}else if(W&256){le(C,F,b,x,S,E,I,$,L);return}}K&8?(B&16&&kt(C,S,E),F!==C&&a(b,F)):B&16?K&16?vn(C,F,b,x,S,E,I,$,L):kt(C,S,E,!0):(B&8&&a(b,""),K&16&&H(F,b,x,S,E,I,$,L))},le=(u,h,b,x,S,E,I,$,L)=>{u=u||Pt,h=h||Pt;const C=u.length,B=h.length,F=Math.min(C,B);let W;for(W=0;WB?kt(u,S,E,!0,!1,F):H(h,b,x,S,E,I,$,L,F)},vn=(u,h,b,x,S,E,I,$,L)=>{let C=0;const B=h.length;let F=u.length-1,W=B-1;for(;C<=F&&C<=W;){const K=u[C],z=h[C]=L?st(h[C]):Pe(h[C]);if(pt(K,z))v(K,z,b,null,S,E,I,$,L);else break;C++}for(;C<=F&&C<=W;){const K=u[F],z=h[W]=L?st(h[W]):Pe(h[W]);if(pt(K,z))v(K,z,b,null,S,E,I,$,L);else break;F--,W--}if(C>F){if(C<=W){const K=W+1,z=KW)for(;C<=F;)Ve(u[C],S,E,!0),C++;else{const K=C,z=C,ee=new Map;for(C=z;C<=W;C++){const Ae=h[C]=L?st(h[C]):Pe(h[C]);Ae.key!=null&&ee.set(Ae.key,C)}let Z,xe=0;const de=W-z+1;let Ne=!1,Ce=0;const Ut=new Array(de);for(C=0;C=de){Ve(Ae,S,E,!0);continue}let ke;if(Ae.key!=null)ke=ee.get(Ae.key);else for(Z=z;Z<=W;Z++)if(Ut[Z-z]===0&&pt(Ae,h[Z])){ke=Z;break}ke===void 0?Ve(Ae,S,E,!0):(Ut[ke-z]=C+1,ke>=Ce?Ce=ke:Ne=!0,v(Ae,h[ke],b,null,S,E,I,$,L),xe++)}const Cr=Ne?da(Ut):Pt;for(Z=Cr.length-1,C=de-1;C>=0;C--){const Ae=z+C,ke=h[Ae],Ar=Ae+1{const{el:E,type:I,transition:$,children:L,shapeFlag:C}=u;if(C&6){ft(u.component.subTree,h,b,x);return}if(C&128){u.suspense.move(h,b,x);return}if(C&64){I.move(u,h,b,Et);return}if(I===me){s(E,h,b);for(let F=0;F$.enter(E),S);else{const{leave:F,delayLeave:W,afterLeave:K}=$,z=()=>s(E,h,b),ee=()=>{F(E,()=>{z(),K&&K()})};W?W(E,z,ee):ee()}else s(E,h,b)},Ve=(u,h,b,x=!1,S=!1)=>{const{type:E,props:I,ref:$,children:L,dynamicChildren:C,shapeFlag:B,patchFlag:F,dirs:W,cacheIndex:K}=u;if(F===-2&&(S=!1),$!=null&&ln($,null,b,u,!0),K!=null&&(h.renderCache[K]=void 0),B&256){h.ctx.deactivate(u);return}const z=B&1&&W,ee=!yt(u);let Z;if(ee&&(Z=I&&I.onVnodeBeforeUnmount)&&Me(Z,h,u),B&6)wl(u.component,b,x);else{if(B&128){u.suspense.unmount(b,x);return}z&&Be(u,null,h,"beforeUnmount"),B&64?u.type.remove(u,h,b,Et,x):C&&!C.hasOnce&&(E!==me||F>0&&F&64)?kt(C,h,b,!1,!0):(E===me&&F&384||!S&&B&16)&&kt(L,h,b),x&&Er(u)}(ee&&(Z=I&&I.onVnodeUnmounted)||z)&&_e(()=>{Z&&Me(Z,h,u),z&&Be(u,null,h,"unmounted")},b)},Er=u=>{const{type:h,el:b,anchor:x,transition:S}=u;if(h===me){_l(b,x);return}if(h===Qt){y(u);return}const E=()=>{r(b),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(u.shapeFlag&1&&S&&!S.persisted){const{leave:I,delayLeave:$}=S,L=()=>I(b,E);$?$(u.el,E,L):L()}else E()},_l=(u,h)=>{let b;for(;u!==h;)b=g(u),r(u),u=b;r(h)},wl=(u,h,b)=>{const{bum:x,scope:S,job:E,subTree:I,um:$,m:L,a:C}=u;Wr(L),Wr(C),x&&hs(x),S.stop(),E&&(E.flags|=8,Ve(I,u,h,b)),$&&_e($,h),_e(()=>{u.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},kt=(u,h,b,x=!1,S=!1,E=0)=>{for(let I=E;I{if(u.shapeFlag&6)return bn(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const h=g(u.anchor||u.el),b=h&&h[eo];return b?g(b):h};let ls=!1;const xr=(u,h,b)=>{u==null?h._vnode&&Ve(h._vnode,null,null,!0):v(h._vnode||null,u,h,null,null,null,b),h._vnode=u,ls||(ls=!0,Pr(),kn(),ls=!1)},Et={p:v,um:Ve,m:ft,r:Er,mt:X,mc:H,pc:V,pbc:O,n:bn,o:e};let cs,as;return t&&([cs,as]=t(Et)),{render:xr,hydrate:cs,createApp:na(xr,cs)}}function vs({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 ut({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Oo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function gr(e,t,n=!1){const s=e.children,r=t.children;if(Y(s)&&Y(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Mo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Mo(t)}function Wr(e){if(e)for(let t=0;tbt(ha);function mr(e,t){return gn(e,null,t)}function Uu(e,t){return gn(e,null,{flush:"post"})}function ga(e,t){return gn(e,null,{flush:"sync"})}function $e(e,t,n){return gn(e,t,n)}function gn(e,t,n=Q){const{immediate:s,deep:r,flush:i,once:o}=n,l=Ee({},n),c=t&&s||!t&&i!=="post";let f;if(Nt){if(i==="sync"){const m=pa();f=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=ze,m.resume=ze,m.pause=ze,m}}const a=ae;l.call=(m,_,v)=>De(m,a,_,v);let d=!1;i==="post"?l.scheduler=m=>{_e(m,a&&a.suspense)}:i!=="sync"&&(d=!0,l.scheduler=(m,_)=>{_?m():cr(m)}),l.augmentJob=m=>{t&&(m.flags|=4),d&&(m.flags|=2,a&&(m.id=a.uid,m.i=a))};const g=fc(e,t,l);return Nt&&(f?f.push(g):c&&g()),g}function ma(e,t,n){const s=this.proxy,r=ve(e)?e.includes(".")?Po(s,e):()=>s[e]:e.bind(s,s);let i;G(t)?i=t:(i=t.handler,n=t);const o=mn(this),l=gn(r,i.bind(s),n);return o(),l}function Po(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r{let a,d=Q,g;return ga(()=>{const m=e[r];Ct(a,m)&&(a=m,f())}),{get(){return c(),n.get?n.get(a):a},set(m){const _=n.set?n.set(m):m;if(!Ct(_,a)&&!(d!==Q&&Ct(m,d)))return;const v=s.vnode.props;v&&(t in v||r in v||i in v)&&(`onUpdate:${t}`in v||`onUpdate:${r}`in v||`onUpdate:${i}`in v)||(a=m,f()),s.emit(`update:${t}`,_),Ct(m,_)&&Ct(m,d)&&!Ct(_,g)&&f(),d=m,g=_}}});return l[Symbol.iterator]=()=>{let c=0;return{next(){return c<2?{value:c++?o||Q:l,done:!1}:{done:!0}}}},l}const Lo=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${Ht(t)}Modifiers`];function ya(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Q;let r=n;const i=t.startsWith("update:"),o=i&&Lo(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>ve(a)?a.trim():a)),o.number&&(r=n.map(_c)));let l,c=s[l=Ln(t)]||s[l=Ln(Ie(t))];!c&&i&&(c=s[l=Ln(Ht(t))]),c&&De(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,De(f,e,6,r)}}function $o(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!G(e)){const c=f=>{const a=$o(f,t,!0);a&&(l=!0,Ee(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ue(e)&&s.set(e,null),null):(Y(i)?i.forEach(c=>o[c]=null):Ee(o,i),ue(e)&&s.set(e,o),o)}function ss(e,t){return!e||!Jn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ne(e,t[0].toLowerCase()+t.slice(1))||ne(e,Ht(t))||ne(e,t))}function bs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:d,data:g,setupState:m,ctx:_,inheritAttrs:v}=e,k=Un(e);let P,j;try{if(n.shapeFlag&4){const y=r||s,M=y;P=Pe(f.call(M,y,a,d,m,g,_)),j=l}else{const y=t;P=Pe(y.length>1?y(d,{attrs:l,slots:o,emit:c}):y(d,null)),j=t.props?l:va(l)}}catch(y){Zt.length=0,hn(y,e,1),P=ie(ye)}let p=P;if(j&&v!==!1){const y=Object.keys(j),{shapeFlag:M}=p;y.length&&M&7&&(i&&y.some(Bi)&&(j=ba(j,i)),p=it(p,j,!1,!0))}return n.dirs&&(p=it(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Tt(p,n.transition),P=p,Un(k),P}const va=e=>{let t;for(const n in e)(n==="class"||n==="style"||Jn(n))&&((t||(t={}))[n]=e[n]);return t},ba=(e,t)=>{const n={};for(const s in e)(!Bi(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function _a(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Br(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let d=0;de.__isSuspense;function Fo(e,t){t&&t.pendingBranch?Y(e)?t.effects.push(...e):t.effects.push(e):Rc(e)}const me=Symbol.for("v-fgt"),_t=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Qt=Symbol.for("v-stc"),Zt=[];let Re=null;function Ws(e=!1){Zt.push(Re=e?null:[])}function wa(){Zt.pop(),Re=Zt[Zt.length-1]||null}let an=1;function Kr(e,t=!1){an+=e,e<0&&Re&&t&&(Re.hasOnce=!0)}function jo(e){return e.dynamicChildren=an>0?Re||Pt:null,wa(),an>0&&Re&&Re.push(e),e}function Bu(e,t,n,s,r,i){return jo(Ho(e,t,n,s,r,i,!0))}function Bs(e,t,n,s,r){return jo(ie(e,t,n,s,r,!0))}function fn(e){return e?e.__v_isVNode===!0:!1}function pt(e,t){return e.type===t.type&&e.key===t.key}const Do=({key:e})=>e??null,In=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ve(e)||ce(e)||G(e)?{i:fe,r:e,k:t,f:!!n}:e:null);function Ho(e,t=null,n=null,s=0,r=null,i=e===me?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Do(t),ref:t&&In(t),scopeId:Zi,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:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:fe};return l?(yr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ve(n)?8:16),an>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const ie=Sa;function Sa(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===ho)&&(e=ye),fn(e)){const l=it(e,t,!0);return n&&yr(l,n),an>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag=-2,l}if(La(e)&&(e=e.__vccOpts),t){t=Ta(t);let{class:l,style:c}=t;l&&!ve(l)&&(t.class=lr(l)),ue(c)&&(tr(c)&&!Y(c)&&(c=Ee({},c)),t.style=or(c))}const o=ve(e)?1:No(e)?128:to(e)?64:ue(e)?4:G(e)?2:0;return Ho(e,t,n,s,r,o,i,!0)}function Ta(e){return e?tr(e)||wo(e)?Ee({},e):e:null}function it(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Ea(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&Do(f),ref:t&&t.ref?n&&i?Y(i)?i.concat(In(t)):[i,In(t)]:In(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&it(e.ssContent),ssFallback:e.ssFallback&&it(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Tt(a,c.clone(a)),a}function Vo(e=" ",t=0){return ie(_t,null,e,t)}function Ku(e,t){const n=ie(Qt,null,e);return n.staticCount=t,n}function qu(e="",t=!1){return t?(Ws(),Bs(ye,null,e)):ie(ye,null,e)}function Pe(e){return e==null||typeof e=="boolean"?ie(ye):Y(e)?ie(me,null,e.slice()):fn(e)?st(e):ie(_t,null,String(e))}function st(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:it(e)}function yr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(Y(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),yr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!wo(t)?t._ctx=fe:r===3&&fe&&(fe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else G(t)?(t={default:t,_ctx:fe},n=32):(t=String(t),s&64?(n=16,t=[Vo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ea(...e){const t={};for(let n=0;nae||fe;let Bn,Ks;{const e=Zn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Bn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),Ks=t("__VUE_SSR_SETTERS__",n=>Nt=n)}const mn=e=>{const t=ae;return Bn(e),e.scope.on(),()=>{e.scope.off(),Bn(t)}},qr=()=>{ae&&ae.scope.off(),Bn(null)};function ko(e){return e.vnode.shapeFlag&4}let Nt=!1;function Ra(e,t=!1,n=!1){t&&Ks(t);const{props:s,children:r}=e.vnode,i=ko(e);ra(e,s,i,t),ca(e,r,n);const o=i?Oa(e,t):void 0;return t&&Ks(!1),o}function Oa(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Yc);const{setup:s}=n;if(s){lt();const r=e.setupContext=s.length>1?Wo(e):null,i=mn(e),o=dn(s,e,0,[e.props,r]),l=qi(o);if(ct(),i(),(l||e.sp)&&!yt(e)&&ur(e),l){if(o.then(qr,qr),t)return o.then(c=>{Gr(e,c)}).catch(c=>{hn(c,e,0)});e.asyncDep=o}else Gr(e,o)}else Uo(e)}function Gr(e,t,n){G(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ue(t)&&(e.setupState=ki(t)),Uo(e)}function Uo(e,t,n){const s=e.type;e.render||(e.render=s.render||ze);{const r=mn(e);lt();try{zc(e)}finally{ct(),r()}}}const Ma={get(e,t){return pe(e,"get",""),e[t]}};function Wo(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Ma),slots:e.slots,emit:e.emit,expose:t}}function rs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(ki(Pn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Jt)return Jt[n](e)},has(t,n){return n in t||n in Jt}})):e.proxy}function Pa(e,t=!0){return G(e)?e.displayName||e.name:e.name||t&&e.__name}function La(e){return G(e)&&"__vccOpts"in e}const se=(e,t)=>cc(e,t,Nt);function qs(e,t,n){const s=arguments.length;return s===2?ue(t)&&!Y(t)?fn(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&fn(n)&&(n=[n]),ie(e,t,n))}const $a="3.5.13";/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ia(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Na=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Fa=e=>e.startsWith("onUpdate:"),is=Object.assign,yn=Array.isArray,Bo=e=>typeof e=="function",Ft=e=>typeof e=="string",ja=e=>typeof e=="symbol",Da=e=>e!==null&&typeof e=="object",vr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ha=/-(\w)/g,Va=vr(e=>e.replace(Ha,(t,n)=>n?n.toUpperCase():"")),ka=/\B([A-Z])/g,br=vr(e=>e.replace(ka,"-$1").toLowerCase()),Ua=vr(e=>e.charAt(0).toUpperCase()+e.slice(1)),Wa=(e,...t)=>{for(let n=0;n{const t=parseFloat(e);return isNaN(t)?e:t},Ba=e=>{const t=Ft(e)?Number(e):NaN;return isNaN(t)?e:t},Ka="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",qa=Ia(Ka);function Ko(e){return!!e||e===""}/** +* @vue/runtime-dom v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Gs;const Xr=typeof window<"u"&&window.trustedTypes;if(Xr)try{Gs=Xr.createPolicy("vue",{createHTML:e=>e})}catch{}const qo=Gs?e=>Gs.createHTML(e):e=>e,Ga="http://www.w3.org/2000/svg",Ya="http://www.w3.org/1998/Math/MathML",qe=typeof document<"u"?document:null,zr=qe&&qe.createElement("template"),Xa={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 r=t==="svg"?qe.createElementNS(Ga,e):t==="mathml"?qe.createElementNS(Ya,e):n?qe.createElement(e,{is:n}):qe.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>qe.createTextNode(e),createComment:e=>qe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>qe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{zr.innerHTML=qo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=zr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ze="transition",Bt="animation",jt=Symbol("_vtc"),Go={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},Yo=is({},io,Go),za=e=>(e.displayName="Transition",e.props=Yo,e),Gu=za((e,{slots:t})=>qs(Lc,Xo(e),t)),dt=(e,t=[])=>{yn(e)?e.forEach(n=>n(...t)):e&&e(...t)},Jr=e=>e?yn(e)?e.some(t=>t.length>1):e.length>1:!1;function Xo(e){const t={};for(const w in e)w in Go||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,_=Ja(r),v=_&&_[0],k=_&&_[1],{onBeforeEnter:P,onEnter:j,onEnterCancelled:p,onLeave:y,onLeaveCancelled:M,onBeforeAppear:D=P,onAppear:R=j,onAppearCancelled:H=p}=t,T=(w,N,X,re)=>{w._enterCancelled=re,et(w,N?a:l),et(w,N?f:o),X&&X()},O=(w,N)=>{w._isLeaving=!1,et(w,d),et(w,m),et(w,g),N&&N()},A=w=>(N,X)=>{const re=w?R:j,U=()=>T(N,w,X);dt(re,[N,U]),Qr(()=>{et(N,w?c:i),Ue(N,w?a:l),Jr(re)||Zr(N,s,v,U)})};return is(t,{onBeforeEnter(w){dt(P,[w]),Ue(w,i),Ue(w,o)},onBeforeAppear(w){dt(D,[w]),Ue(w,c),Ue(w,f)},onEnter:A(!1),onAppear:A(!0),onLeave(w,N){w._isLeaving=!0;const X=()=>O(w,N);Ue(w,d),w._enterCancelled?(Ue(w,g),Ys()):(Ys(),Ue(w,g)),Qr(()=>{w._isLeaving&&(et(w,d),Ue(w,m),Jr(y)||Zr(w,s,k,X))}),dt(y,[w,X])},onEnterCancelled(w){T(w,!1,void 0,!0),dt(p,[w])},onAppearCancelled(w){T(w,!0,void 0,!0),dt(H,[w])},onLeaveCancelled(w){O(w),dt(M,[w])}})}function Ja(e){if(e==null)return null;if(Da(e))return[_s(e.enter),_s(e.leave)];{const t=_s(e);return[t,t]}}function _s(e){return Ba(e)}function Ue(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[jt]||(e[jt]=new Set)).add(t)}function et(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[jt];n&&(n.delete(t),n.size||(e[jt]=void 0))}function Qr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Qa=0;function Zr(e,t,n,s){const r=e._endId=++Qa,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=zo(e,t);if(!o)return s();const f=o+"end";let a=0;const d=()=>{e.removeEventListener(f,g),i()},g=m=>{m.target===e&&++a>=c&&d()};setTimeout(()=>{a(n[_]||"").split(", "),r=s(`${Ze}Delay`),i=s(`${Ze}Duration`),o=ei(r,i),l=s(`${Bt}Delay`),c=s(`${Bt}Duration`),f=ei(l,c);let a=null,d=0,g=0;t===Ze?o>0&&(a=Ze,d=o,g=i.length):t===Bt?f>0&&(a=Bt,d=f,g=c.length):(d=Math.max(o,f),a=d>0?o>f?Ze:Bt:null,g=a?a===Ze?i.length:c.length:0);const m=a===Ze&&/\b(transform|all)(,|$)/.test(s(`${Ze}Property`).toString());return{type:a,timeout:d,propCount:g,hasTransform:m}}function ei(e,t){for(;e.lengthti(n)+ti(e[s])))}function ti(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Ys(){return document.body.offsetHeight}function Za(e,t,n){const s=e[jt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Kn=Symbol("_vod"),Jo=Symbol("_vsh"),Yu={beforeMount(e,{value:t},{transition:n}){e[Kn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Kt(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),Kt(e,!0),s.enter(e)):s.leave(e,()=>{Kt(e,!1)}):Kt(e,t))},beforeUnmount(e,{value:t}){Kt(e,t)}};function Kt(e,t){e.style.display=t?e[Kn]:"none",e[Jo]=!t}const ef=Symbol(""),tf=/(^|;)\s*display\s*:/;function nf(e,t,n){const s=e.style,r=Ft(n);let i=!1;if(n&&!r){if(t)if(Ft(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Nn(s,l,"")}else for(const o in t)n[o]==null&&Nn(s,o,"");for(const o in n)o==="display"&&(i=!0),Nn(s,o,n[o])}else if(r){if(t!==n){const o=s[ef];o&&(n+=";"+o),s.cssText=n,i=tf.test(n)}}else t&&e.removeAttribute("style");Kn in e&&(e[Kn]=i?s.display:"",e[Jo]&&(s.display="none"))}const ni=/\s*!important$/;function Nn(e,t,n){if(yn(n))n.forEach(s=>Nn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=sf(e,t);ni.test(n)?e.setProperty(br(s),n.replace(ni,""),"important"):e[s]=n}}const si=["Webkit","Moz","ms"],ws={};function sf(e,t){const n=ws[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return ws[t]=s;s=Ua(s);for(let r=0;rSs||(cf.then(()=>Ss=0),Ss=Date.now());function ff(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;De(uf(s,n.value),t,5,[s])};return n.value=e,n.attached=af(),n}function uf(e,t){if(yn(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ai=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,df=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Za(e,s,o):t==="style"?nf(e,n,s):Na(t)?Fa(t)||of(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):hf(e,t,s,o))?(oi(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ii(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Ft(s))?oi(e,Va(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ii(e,t,s,o))};function hf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ai(t)&&Bo(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 r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ai(t)&&Ft(n)?!1:t in e}const Qo=new WeakMap,Zo=new WeakMap,qn=Symbol("_moveCb"),fi=Symbol("_enterCb"),pf=e=>(delete e.props.mode,e),gf=pf({name:"TransitionGroup",props:is({},Yo,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=at(),s=ro();let r,i;return fo(()=>{if(!r.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!bf(r[0].el,n.vnode.el,o))return;r.forEach(mf),r.forEach(yf);const l=r.filter(vf);Ys(),l.forEach(c=>{const f=c.el,a=f.style;Ue(f,o),a.transform=a.webkitTransform=a.transitionDuration="";const d=f[qn]=g=>{g&&g.target!==f||(!g||/transform$/.test(g.propertyName))&&(f.removeEventListener("transitionend",d),f[qn]=null,et(f,o))};f.addEventListener("transitionend",d)})}),()=>{const o=J(e),l=Xo(o);let c=o.tag||me;if(r=[],i)for(let f=0;f{l.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(s);const{hasTransform:o}=zo(s);return i.removeChild(s),o}const ui=e=>{const t=e.props["onUpdate:modelValue"]||!1;return yn(t)?n=>Wa(t,n):t};function _f(e){e.target.composing=!0}function di(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Ts=Symbol("_assign"),zu={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[Ts]=ui(r);const i=s||r.props&&r.props.type==="number";Ot(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=Yr(l)),e[Ts](l)}),n&&Ot(e,"change",()=>{e.value=e.value.trim()}),t||(Ot(e,"compositionstart",_f),Ot(e,"compositionend",di),Ot(e,"change",di))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[Ts]=ui(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Yr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},wf=["ctrl","shift","alt","meta"],Sf={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)=>wf.some(n=>e[`${n}Key`]&&!t.includes(n))},Ju=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=br(r.key);if(t.some(o=>o===i||Tf[o]===i))return e(r)})},el=is({patchProp:df},Xa);let en,hi=!1;function tl(){return en||(en=fa(el))}function Ef(){return en=hi?en:ua(el),hi=!0,en}const Zu=(...e)=>{tl().render(...e)},ed=(...e)=>{const t=tl().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=sl(s);if(!r)return;const i=t._component;!Bo(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,nl(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},td=(...e)=>{const t=Ef().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=sl(s);if(r)return n(r,!0,nl(r))},t};function nl(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function sl(e){return Ft(e)?document.querySelector(e):e}const xf=window.__VP_SITE_DATA__;function rl(e){return xi()?(Il(e),!0):!1}const Es=new WeakMap,Cf=(...e)=>{var t;const n=e[0],s=(t=at())==null?void 0:t.proxy;if(s==null&&!vo())throw new Error("injectLocal must be called in setup");return s&&Es.has(s)&&n in Es.get(s)?Es.get(s)[n]:bt(...e)},il=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const nd=e=>e!=null,Af=Object.prototype.toString,Rf=e=>Af.call(e)==="[object Object]",ot=()=>{},pi=Of();function Of(){var e,t;return il&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function _r(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const ol=e=>e();function ll(e,t={}){let n,s,r=ot;const i=c=>{clearTimeout(c),r(),r=ot};let o;return c=>{const f=oe(e),a=oe(t.maxWait);return n&&i(n),f<=0||a!==void 0&&a<=0?(s&&(i(s),s=null),Promise.resolve(c())):new Promise((d,g)=>{r=t.rejectOnCancel?g:d,o=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,d(o())},a)),n=setTimeout(()=>{s&&i(s),s=null,d(c())},f)})}}function Mf(...e){let t=0,n,s=!0,r=ot,i,o,l,c,f;!ce(e[0])&&typeof e[0]=="object"?{delay:o,trailing:l=!0,leading:c=!0,rejectOnCancel:f=!1}=e[0]:[o,l=!0,c=!0,f=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=ot)};return g=>{const m=oe(o),_=Date.now()-t,v=()=>i=g();return a(),m<=0?(t=Date.now(),v()):(_>m&&(c||!s)?(t=Date.now(),v()):l&&(i=new Promise((k,P)=>{r=f?P:k,n=setTimeout(()=>{t=Date.now(),s=!0,k(v()),a()},Math.max(0,m-_))})),!c&&!n&&(n=setTimeout(()=>s=!0,m)),s=!1,i)}}function Pf(e=ol,t={}){const{initialState:n="active"}=t,s=wr(n==="active");function r(){s.value=!1}function i(){s.value=!0}const o=(...l)=>{s.value&&e(...l)};return{isActive:zn(s),pause:r,resume:i,eventFilter:o}}function gi(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function Lf(e){return at()}function xs(e){return Array.isArray(e)?e:[e]}function wr(...e){if(e.length!==1)return oc(...e);const t=e[0];return typeof t=="function"?zn(Ui(()=>({get:t,set:ot}))):je(t)}function $f(e,t=200,n={}){return _r(ll(t,n),e)}function If(e,t=200,n=!1,s=!0,r=!1){return _r(Mf(t,n,s,r),e)}function cl(e,t,n={}){const{eventFilter:s=ol,...r}=n;return $e(e,_r(s,t),r)}function Nf(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:o,pause:l,resume:c,isActive:f}=Pf(s,{initialState:r});return{stop:cl(e,t,{...i,eventFilter:o}),pause:l,resume:c,isActive:f}}function os(e,t=!0,n){Lf()?Vt(e,n):t?e():es(e)}function sd(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return cl(e,t,{...i,eventFilter:ll(s,{maxWait:r})})}function Ff(e,t,n){return $e(e,t,{...n,immediate:!0})}function rd(e,t,n){let s;ce(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=ot}=s,c=Te(!r),f=o?Te(t):je(t);let a=0;return mr(async d=>{if(!c.value)return;a++;const g=a;let m=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const _=await e(v=>{d(()=>{i&&(i.value=!1),m||v()})});g===a&&(f.value=_)}catch(_){l(_)}finally{i&&g===a&&(i.value=!1),m=!0}}),r?se(()=>(c.value=!0,f.value)):f}const He=il?window:void 0;function Sr(e){var t;const n=oe(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Je(...e){const t=[],n=()=>{t.forEach(l=>l()),t.length=0},s=(l,c,f,a)=>(l.addEventListener(c,f,a),()=>l.removeEventListener(c,f,a)),r=se(()=>{const l=xs(oe(e[0])).filter(c=>c!=null);return l.every(c=>typeof c!="string")?l:void 0}),i=Ff(()=>{var l,c;return[(c=(l=r.value)==null?void 0:l.map(f=>Sr(f)))!=null?c:[He].filter(f=>f!=null),xs(oe(r.value?e[1]:e[0])),xs(nr(r.value?e[2]:e[1])),oe(r.value?e[3]:e[2])]},([l,c,f,a])=>{if(n(),!(l!=null&&l.length)||!(c!=null&&c.length)||!(f!=null&&f.length))return;const d=Rf(a)?{...a}:a;t.push(...l.flatMap(g=>c.flatMap(m=>f.map(_=>s(g,m,_,d)))))},{flush:"post"}),o=()=>{i(),n()};return rl(n),o}function jf(){const e=Te(!1),t=at();return t&&Vt(()=>{e.value=!0},t),e}function Df(e){const t=jf();return se(()=>(t.value,!!e()))}function Hf(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function id(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Hf(t);return Je(r,i,a=>{a.repeat&&oe(l)||c(a)&&n(a)},o)}const Vf=Symbol("vueuse-ssr-width");function kf(){const e=vo()?Cf(Vf,null):null;return typeof e=="number"?e:void 0}function al(e,t={}){const{window:n=He,ssrWidth:s=kf()}=t,r=Df(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=Te(typeof s=="number"),o=Te(),l=Te(!1),c=f=>{l.value=f.matches};return mr(()=>{if(i.value){i.value=!r.value;const f=oe(e).split(",");l.value=f.some(a=>{const d=a.includes("not all"),g=a.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),m=a.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let _=!!(g||m);return g&&_&&(_=s>=gi(g[1])),m&&_&&(_=s<=gi(m[1])),d?!_:_});return}r.value&&(o.value=n.matchMedia(oe(e)),l.value=o.value.matches)}),Je(o,"change",c,{passive:!0}),se(()=>l.value)}const An=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Rn="__vueuse_ssr_handlers__",Uf=Wf();function Wf(){return Rn in An||(An[Rn]=An[Rn]||{}),An[Rn]}function fl(e,t){return Uf[e]||t}function ul(e){return al("(prefers-color-scheme: dark)",e)}function Bf(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Kf={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},mi="vueuse-storage";function Tr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:d=He,eventFilter:g,onError:m=A=>{console.error(A)},initOnMounted:_}=s,v=(a?Te:je)(typeof t=="function"?t():t),k=se(()=>oe(e));if(!n)try{n=fl("getDefaultStorage",()=>{var A;return(A=He)==null?void 0:A.localStorage})()}catch(A){m(A)}if(!n)return v;const P=oe(t),j=Bf(P),p=(r=s.serializer)!=null?r:Kf[j],{pause:y,resume:M}=Nf(v,()=>R(v.value),{flush:i,deep:o,eventFilter:g});$e(k,()=>T(),{flush:i}),d&&l&&os(()=>{n instanceof Storage?Je(d,"storage",T,{passive:!0}):Je(d,mi,O),_&&T()}),_||T();function D(A,w){if(d){const N={key:k.value,oldValue:A,newValue:w,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",N):new CustomEvent(mi,{detail:N}))}}function R(A){try{const w=n.getItem(k.value);if(A==null)D(w,null),n.removeItem(k.value);else{const N=p.write(A);w!==N&&(n.setItem(k.value,N),D(w,N))}}catch(w){m(w)}}function H(A){const w=A?A.newValue:n.getItem(k.value);if(w==null)return c&&P!=null&&n.setItem(k.value,p.write(P)),P;if(!A&&f){const N=p.read(w);return typeof f=="function"?f(N,P):j==="object"&&!Array.isArray(N)?{...P,...N}:N}else return typeof w!="string"?w:p.read(w)}function T(A){if(!(A&&A.storageArea!==n)){if(A&&A.key==null){v.value=P;return}if(!(A&&A.key!==k.value)){y();try{(A==null?void 0:A.newValue)!==p.write(v.value)&&(v.value=H(A))}catch(w){m(w)}finally{A?es(M):M()}}}}function O(A){T(A.detail)}return v}const qf="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Gf(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},g=ul({window:r}),m=se(()=>g.value?"dark":"light"),_=c||(o==null?wr(s):Tr(o,s,i,{window:r,listenToStorageChanges:l})),v=se(()=>_.value==="auto"?m.value:_.value),k=fl("updateHTMLAttrs",(y,M,D)=>{const R=typeof y=="string"?r==null?void 0:r.document.querySelector(y):Sr(y);if(!R)return;const H=new Set,T=new Set;let O=null;if(M==="class"){const w=D.split(/\s/g);Object.values(d).flatMap(N=>(N||"").split(/\s/g)).filter(Boolean).forEach(N=>{w.includes(N)?H.add(N):T.add(N)})}else O={key:M,value:D};if(H.size===0&&T.size===0&&O===null)return;let A;a&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode(qf)),r.document.head.appendChild(A));for(const w of H)R.classList.add(w);for(const w of T)R.classList.remove(w);O&&R.setAttribute(O.key,O.value),a&&(r.getComputedStyle(A).opacity,document.head.removeChild(A))});function P(y){var M;k(t,n,(M=d[y])!=null?M:y)}function j(y){e.onChanged?e.onChanged(y,P):P(y)}$e(v,j,{flush:"post",immediate:!0}),os(()=>j(v.value));const p=se({get(){return f?_.value:v.value},set(y){_.value=y}});return Object.assign(p,{store:_,system:m,state:v})}function Yf(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=Gf({...e,onChanged:(o,l)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,o==="dark",l,o):l(o)},modes:{dark:t,light:n}}),r=se(()=>s.system.value);return se({get(){return s.value==="dark"},set(o){const l=o?"dark":"light";r.value===l?s.value="auto":s.value=l}})}function Cs(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const yi=1;function Xf(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=ot,onScroll:i=ot,offset:o={left:0,right:0,top:0,bottom:0},eventListenerOptions:l={capture:!1,passive:!0},behavior:c="auto",window:f=He,onError:a=R=>{console.error(R)}}=t,d=Te(0),g=Te(0),m=se({get(){return d.value},set(R){v(R,void 0)}}),_=se({get(){return g.value},set(R){v(void 0,R)}});function v(R,H){var T,O,A,w;if(!f)return;const N=oe(e);if(!N)return;(A=N instanceof Document?f.document.body:N)==null||A.scrollTo({top:(T=oe(H))!=null?T:_.value,left:(O=oe(R))!=null?O:m.value,behavior:oe(c)});const X=((w=N==null?void 0:N.document)==null?void 0:w.documentElement)||(N==null?void 0:N.documentElement)||N;m!=null&&(d.value=X.scrollLeft),_!=null&&(g.value=X.scrollTop)}const k=Te(!1),P=It({left:!0,right:!1,top:!0,bottom:!1}),j=It({left:!1,right:!1,top:!1,bottom:!1}),p=R=>{k.value&&(k.value=!1,j.left=!1,j.right=!1,j.top=!1,j.bottom=!1,r(R))},y=$f(p,n+s),M=R=>{var H;if(!f)return;const T=((H=R==null?void 0:R.document)==null?void 0:H.documentElement)||(R==null?void 0:R.documentElement)||Sr(R),{display:O,flexDirection:A,direction:w}=getComputedStyle(T),N=w==="rtl"?-1:1,X=T.scrollLeft;j.left=Xd.value;const re=Math.abs(X*N)<=(o.left||0),U=Math.abs(X*N)+T.clientWidth>=T.scrollWidth-(o.right||0)-yi;O==="flex"&&A==="row-reverse"?(P.left=U,P.right=re):(P.left=re,P.right=U),d.value=X;let q=T.scrollTop;R===f.document&&!q&&(q=f.document.body.scrollTop),j.top=qg.value;const V=Math.abs(q)<=(o.top||0),le=Math.abs(q)+T.clientHeight>=T.scrollHeight-(o.bottom||0)-yi;O==="flex"&&A==="column-reverse"?(P.top=le,P.bottom=V):(P.top=V,P.bottom=le),g.value=q},D=R=>{var H;if(!f)return;const T=(H=R.target.documentElement)!=null?H:R.target;M(T),k.value=!0,y(R),i(R)};return Je(e,"scroll",n?If(D,n,!0,!1):D,l),os(()=>{try{const R=oe(e);if(!R)return;M(R)}catch(R){a(R)}}),Je(e,"scrollend",p,l),{x:m,y:_,isScrolling:k,arrivedState:P,directions:j,measure(){const R=oe(e);f&&R&&M(R)}}}function od(e,t,n={}){const{window:s=He}=n;return Tr(e,t,s==null?void 0:s.localStorage,n)}function dl(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const As=new WeakMap;function ld(e,t=!1){const n=Te(t);let s=null,r="";$e(wr(e),l=>{const c=Cs(oe(l));if(c){const f=c;if(As.get(f)||As.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=Cs(oe(e));!l||n.value||(pi&&(s=Je(l,"touchmove",c=>{zf(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=Cs(oe(e));!l||!n.value||(pi&&(s==null||s()),l.style.overflow=r,As.delete(l),n.value=!1)};return rl(o),se({get(){return n.value},set(l){l?i():o()}})}function cd(e,t,n={}){const{window:s=He}=n;return Tr(e,t,s==null?void 0:s.sessionStorage,n)}function ad(e={}){const{window:t=He,...n}=e;return Xf(t,n)}function fd(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=Te(n),c=Te(s),f=()=>{if(t)if(o==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:d,height:g,scale:m}=t.visualViewport;l.value=Math.round(d*m),c.value=Math.round(g*m)}else i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};f(),os(f);const a={passive:!0};if(Je("resize",f,a),t&&o==="visual"&&t.visualViewport&&Je(t.visualViewport,"resize",f,a),r){const d=al("(orientation: portrait)");$e(d,()=>f())}return{width:l,height:c}}const Rs={};var Os={};const hl=/^(?:[a-z]+:|\/\/)/i,Jf="vitepress-theme-appearance",Qf=/#.*$/,Zf=/[?#].*$/,eu=/(?:(^|\/)index)?\.(?:md|html)$/,he=typeof document<"u",pl={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function tu(e,t,n=!1){if(t===void 0)return!1;if(e=vi(`/${e}`),n)return new RegExp(t).test(e);if(vi(t)!==e)return!1;const s=t.match(Qf);return s?(he?location.hash:"")===s[0]:!0}function vi(e){return decodeURI(e).replace(Zf,"").replace(eu,"$1")}function nu(e){return hl.test(e)}function su(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!nu(n)&&tu(t,`/${n}/`,!0))||"root"}function ru(e,t){var s,r,i,o,l,c,f;const n=su(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:ml(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function gl(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=iu(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function iu(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ou(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function ml(e,t){return[...e.filter(n=>!ou(t,n)),...t]}const lu=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,cu=/^[a-z]:/i;function bi(e){const t=cu.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(lu,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Ms=new Set;function au(e){if(Ms.size===0){const n=typeof process=="object"&&(Os==null?void 0:Os.VITE_EXTRA_EXTENSIONS)||(Rs==null?void 0:Rs.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Ms.add(s))}const t=e.split(".").pop();return t==null||!Ms.has(t.toLowerCase())}function ud(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const fu=Symbol(),wt=Te(xf);function dd(e){const t=se(()=>ru(wt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?je(!0):n==="force-auto"?ul():n?Yf({storageKey:Jf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):je(!1),r=je(he?location.hash:"");return he&&window.addEventListener("hashchange",()=>{r.value=location.hash}),$e(()=>e.data,()=>{r.value=he?location.hash:""}),{site:t,theme:se(()=>t.value.themeConfig),page:se(()=>e.data),frontmatter:se(()=>e.data.frontmatter),params:se(()=>e.data.params),lang:se(()=>t.value.lang),dir:se(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:se(()=>t.value.localeIndex||"root"),title:se(()=>gl(t.value,e.data)),description:se(()=>e.data.description||t.value.description),isDark:s,hash:se(()=>r.value)}}function uu(){const e=bt(fu);if(!e)throw new Error("vitepress data not properly injected in app");return e}function du(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function _i(e){return hl.test(e)||!e.startsWith("/")?e:du(wt.value.base,e)}function hu(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),he){const n="/docs/";t=bi(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${bi(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Fn=[];function hd(e){Fn.push(e),ns(()=>{Fn=Fn.filter(t=>t!==e)})}function pu(){let e=wt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=wi(e,n);else if(Array.isArray(e))for(const s of e){const r=wi(s,n);if(r){t=r;break}}return t}function wi(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const gu=Symbol(),yl="http://a.com",mu=()=>({path:"/",component:null,data:pl});function pd(e,t){const n=It(mu()),s={route:n,go:r};async function r(l=he?location.href:"/"){var c,f;l=Ps(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(he&&l!==Ps(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(l)))}let i=null;async function o(l,c=0,f=!1){var g,m;if(await((g=s.onBeforePageLoad)==null?void 0:g.call(s,l))===!1)return;const a=new URL(l,yl),d=i=a.pathname;try{let _=await e(d);if(!_)throw new Error(`Page not found: ${d}`);if(i===d){i=null;const{default:v,__pageData:k}=_;if(!v)throw new Error(`Invalid route component: ${v}`);await((m=s.onAfterPageLoad)==null?void 0:m.call(s,l)),n.path=he?d:_i(d),n.component=Pn(v),n.data=Pn(k),he&&es(()=>{let P=wt.value.base+k.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!wt.value.cleanUrls&&!P.endsWith("/")&&(P+=".html"),P!==a.pathname&&(a.pathname=P,l=P+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let j=null;try{j=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if(j){Si(j,a.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!f)try{const v=await fetch(wt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await v.json(),await o(l,c,!0);return}catch{}if(i===d){i=null,n.path=he?d:_i(d),n.component=t?Pn(t):null;const v=he?d.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...pl,relativePath:v}}}}return he&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:d,pathname:g,hash:m,search:_}=new URL(f,c.baseURI),v=new URL(location.href);d===v.origin&&au(g)&&(l.preventDefault(),g===v.pathname&&_===v.search?(m!==v.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:v.href,newURL:a}))),m?Si(c,m,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var f;if(l.state===null)return;const c=Ps(location.href);await o(c,l.state&&l.state.scrollPosition||0),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(c))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function yu(){const e=bt(gu);if(!e)throw new Error("useRouter() is called without provider.");return e}function vl(){return yu().route}function Si(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-pu()+i;requestAnimationFrame(r)}}function Ps(e){const t=new URL(e,yl);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),wt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const On=()=>Fn.forEach(e=>e()),gd=fr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=vl(),{frontmatter:n,site:s}=uu();return $e(n,On,{deep:!0,flush:"post"}),()=>qs(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?qs(t.component,{onVnodeMounted:On,onVnodeUpdated:On,onVnodeUnmounted:On}):"404 Page Not Found"])}}),md=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},vu="modulepreload",bu=function(e){return"/docs/"+e},Ti={},yd=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=bu(c),c in Ti)return;Ti[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const d=document.createElement("link");if(d.rel=f?"stylesheet":vu,f||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),f)return new Promise((g,m)=>{d.addEventListener("load",g),d.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},vd=fr({setup(e,{slots:t}){const n=je(!1);return Vt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function bd(){he&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function _d(){if(he){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),_u(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function _u(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function wd(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=Ls(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(Ls);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};mr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=gl(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let d=document.querySelector("meta[name=description]");d?d.getAttribute("content")!==a&&d.setAttribute("content",a):Ls(["meta",{name:"description",content:a}]),r(ml(o.head,Su(c)))})}function Ls([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function wu(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Su(e){return e.filter(t=>!wu(t))}const $s=new Set,bl=()=>document.createElement("link"),Tu=e=>{const t=bl();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Eu=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let Mn;const xu=he&&(Mn=bl())&&Mn.relList&&Mn.relList.supports&&Mn.relList.supports("prefetch")?Tu:Eu;function Sd(){if(!he||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!$s.has(c)){$s.add(c);const f=hu(c);f&&xu(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):$s.add(l))})})};Vt(s);const r=vl();$e(()=>r.path,s),ns(()=>{n&&n.disconnect()})}export{uo as $,pu as A,Nu as B,Lu as C,Te as D,hd as E,me as F,ie as G,$u as H,hl as I,vl as J,Ea as K,bt as L,fd as M,or as N,id as O,es as P,ad as Q,he as R,zn as S,Gu as T,Pu as U,yd as V,ld as W,sa as X,Du as Y,Qu as Z,md as _,Vo as a,Ju as a0,Hu as a1,Il as a2,Cu as a3,It as a4,Au as a5,ir as a6,fn as a7,ye as a8,at as a9,pd as aA,hu as aB,td as aC,Sd as aD,_d as aE,bd as aF,Ku as aG,Fu as aH,ku as aI,Mu as aJ,Wu as aK,mt as aL,tr as aM,Vu as aN,oe as aO,xs as aP,Sr as aQ,nd as aR,rl as aS,rd as aT,cd as aU,od as aV,sd as aW,yu as aX,Je as aY,ed as aZ,ud as a_,qs as aa,Ie as ab,J as ac,Hc as ad,Dc as ae,Xu as af,ce as ag,oc as ah,kc as ai,Ru as aj,Iu as ak,Yu as al,_t as am,Pn as an,Ou as ao,it as ap,Uc as aq,zu as ar,Zu as as,wd as at,gu as au,dd as av,fu as aw,gd as ax,vd as ay,wt as az,Bs as b,Bu as c,fr as d,qu as e,au as f,_i as g,se as h,nu as i,Ho as j,nr as k,tu as l,al as m,lr as n,Ws as o,je as p,$e as q,ju as r,mr as s,xc as t,uu as u,Vt as v,Oc as w,ns as x,Uu as y,fo as z}; diff --git a/assets/chunks/theme.2RYyxkAj.js b/assets/chunks/theme.2RYyxkAj.js new file mode 100644 index 0000000..8b56efe --- /dev/null +++ b/assets/chunks/theme.2RYyxkAj.js @@ -0,0 +1,6 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.B9umghyX.js","assets/chunks/framework.DytOxJW6.js"])))=>i.map(i=>d[i]); +import{d as ge,c as K,r as U,n as Ne,o as D,a as bt,t as Oe,b as be,w as J,T as Dt,e as fe,_ as Se,u as wd,i as Vd,f as Cd,g as Mo,h as y,j as X,k as L,l as bn,m as Ul,p as H,q as Q,s as He,v as Ke,x as Ja,y as Eo,z as Zr,A as pd,F as ae,B as kt,C as nn,D as ee,E as Qa,G as s,H as Bt,I as Jr,J as el,K as z,L as xe,M as xd,N as Qr,O as Kl,P as Te,Q as es,R as tl,S as nl,U as _d,V as Pd,W as ts,X as Re,Y as Id,Z as $d,$ as it,a0 as ql,a1 as Td,a2 as mt,a3 as Fo,a4 as St,a5 as Pn,a6 as Xn,a7 as Ad,a8 as Bd,a9 as Dd,aa as an,ab as ns,ac as Ze,ad as as,ae as Ld,af as Oo,ag as jn,ah as F,ai as No,aj as je,ak as Ct,al as Mt,am as Md,an as Ed,ao as Fd,ap as Od,aq as Nd,ar as Rd,as as ls}from"./framework.DytOxJW6.js";const Hd=ge({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(n,t)=>(D(),K("span",{class:Ne(["VPBadge",n.type])},[U(n.$slots,"default",{},()=>[bt(Oe(n.text),1)])],2))}}),zd={key:0,class:"VPBackdrop"},Wd=ge({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(n,t)=>(D(),be(Dt,{name:"fade"},{default:J(()=>[n.show?(D(),K("div",zd)):fe("",!0)]),_:1}))}}),jd=Se(Wd,[["__scopeId","data-v-c79a1216"]]),_e=wd;function Gd(e,n){let t,a=!1;return()=>{t&&clearTimeout(t),a?t=setTimeout(e,n):(e(),(a=!0)&&setTimeout(()=>a=!1,n))}}function Xl(e){return e.startsWith("/")?e:`/${e}`}function Ro(e){const{pathname:n,search:t,hash:a,protocol:l}=new URL(e,"http://a.com");if(Vd(e)||e.startsWith("#")||!l.startsWith("http")||!Cd(n))return e;const{site:o}=_e(),i=n.endsWith("/")||n.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${n.replace(/(\.md)?$/,o.value.cleanUrls?"":".html")}${t}${a}`);return Mo(i)}function ya({correspondingLink:e=!1}={}){const{site:n,localeIndex:t,page:a,theme:l,hash:o}=_e(),i=y(()=>{var u,c;return{label:(u=n.value.locales[t.value])==null?void 0:u.label,link:((c=n.value.locales[t.value])==null?void 0:c.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(n.value.locales).flatMap(([u,c])=>i.value.label===c.label?[]:{text:c.label,link:Yd(c.link||(u==="root"?"/":`/${u}/`),l.value.i18nRouting!==!1&&e,a.value.relativePath.slice(i.value.link.length-1),!n.value.cleanUrls)+o.value})),currentLang:i}}function Yd(e,n,t,a){return n?e.replace(/\/$/,"")+Xl(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const Ud={class:"NotFound"},Kd={class:"code"},qd={class:"title"},Xd={class:"quote"},Zd={class:"action"},Jd=["href","aria-label"],Qd=ge({__name:"NotFound",setup(e){const{theme:n}=_e(),{currentLang:t}=ya();return(a,l)=>{var o,i,r,u,c;return D(),K("div",Ud,[X("p",Kd,Oe(((o=L(n).notFound)==null?void 0:o.code)??"404"),1),X("h1",qd,Oe(((i=L(n).notFound)==null?void 0:i.title)??"PAGE NOT FOUND"),1),l[0]||(l[0]=X("div",{class:"divider"},null,-1)),X("blockquote",Xd,Oe(((r=L(n).notFound)==null?void 0:r.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),X("div",Zd,[X("a",{class:"link",href:L(Mo)(L(t).link),"aria-label":((u=L(n).notFound)==null?void 0:u.linkLabel)??"go to home"},Oe(((c=L(n).notFound)==null?void 0:c.linkText)??"Take me home"),9,Jd)])])}}}),ev=Se(Qd,[["__scopeId","data-v-d6be1790"]]);function os(e,n){if(Array.isArray(e))return Oa(e);if(e==null)return[];n=Xl(n);const t=Object.keys(e).sort((l,o)=>o.split("/").length-l.split("/").length).find(l=>n.startsWith(Xl(l))),a=t?e[t]:[];return Array.isArray(a)?Oa(a):Oa(a.items,a.base)}function tv(e){const n=[];let t=0;for(const a in e){const l=e[a];if(l.items){t=n.push(l);continue}n[t]||n.push({items:[]}),n[t].items.push(l)}return n}function nv(e){const n=[];function t(a){for(const l of a)l.text&&l.link&&n.push({text:l.text,link:l.link,docFooterText:l.docFooterText}),l.items&&t(l.items)}return t(e),n}function Zl(e,n){return Array.isArray(n)?n.some(t=>Zl(e,t)):bn(e,n.link)?!0:n.items?Zl(e,n.items):!1}function Oa(e,n){return[...e].map(t=>{const a={...t},l=a.base||n;return l&&a.link&&(a.link=l+a.link),a.items&&(a.items=Oa(a.items,l)),a})}function qt(){const{frontmatter:e,page:n,theme:t}=_e(),a=Ul("(min-width: 960px)"),l=H(!1),o=y(()=>{const h=t.value.sidebar,g=n.value.relativePath;return h?os(h,g):[]}),i=H(o.value);Q(o,(h,g)=>{JSON.stringify(h)!==JSON.stringify(g)&&(i.value=o.value)});const r=y(()=>e.value.sidebar!==!1&&i.value.length>0&&e.value.layout!=="home"),u=y(()=>c?e.value.aside==null?t.value.aside==="left":e.value.aside==="left":!1),c=y(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:t.value.aside!==!1),d=y(()=>r.value&&a.value),v=y(()=>r.value?tv(i.value):[]);function f(){l.value=!0}function m(){l.value=!1}function b(){l.value?m():f()}return{isOpen:l,sidebar:i,sidebarGroups:v,hasSidebar:r,hasAside:c,leftAside:u,isSidebarEnabled:d,open:f,close:m,toggle:b}}function av(e,n){let t;He(()=>{t=e.value?document.activeElement:void 0}),Ke(()=>{window.addEventListener("keyup",a)}),Ja(()=>{window.removeEventListener("keyup",a)});function a(l){l.key==="Escape"&&e.value&&(n(),t==null||t.focus())}}function lv(e){const{page:n,hash:t}=_e(),a=H(!1),l=y(()=>e.value.collapsed!=null),o=y(()=>!!e.value.link),i=H(!1),r=()=>{i.value=bn(n.value.relativePath,e.value.link)};Q([n,e,t],r),Ke(r);const u=y(()=>i.value?!0:e.value.items?Zl(n.value.relativePath,e.value.items):!1),c=y(()=>!!(e.value.items&&e.value.items.length));He(()=>{a.value=!!(l.value&&e.value.collapsed)}),Eo(()=>{(i.value||u.value)&&(a.value=!1)});function d(){l.value&&(a.value=!a.value)}return{collapsed:a,collapsible:l,isLink:o,isActiveLink:i,hasActiveLink:u,hasChildren:c,toggle:d}}function ov(){const{hasSidebar:e}=qt(),n=Ul("(min-width: 960px)"),t=Ul("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!n.value?!1:e.value?t.value:n.value)}}const iv=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Jl=[];function is(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function Ho(e){const n=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const a=Number(t.tagName[1]);return{element:t,title:rv(t),link:"#"+t.id,level:a}});return sv(n,e)}function rv(e){let n="";for(const t of e.childNodes)if(t.nodeType===1){if(iv.test(t.className))continue;n+=t.textContent}else t.nodeType===3&&(n+=t.textContent);return n.trim()}function sv(e,n){if(n===!1)return[];const t=(typeof n=="object"&&!Array.isArray(n)?n.level:n)||2,[a,l]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return dv(e,a,l)}function uv(e,n){const{isAsideEnabled:t}=ov(),a=Gd(o,100);let l=null;Ke(()=>{requestAnimationFrame(o),window.addEventListener("scroll",a)}),Zr(()=>{i(location.hash)}),Ja(()=>{window.removeEventListener("scroll",a)});function o(){if(!t.value)return;const r=window.scrollY,u=window.innerHeight,c=document.body.offsetHeight,d=Math.abs(r+u-c)<1,v=Jl.map(({element:m,link:b})=>({link:b,top:cv(m)})).filter(({top:m})=>!Number.isNaN(m)).sort((m,b)=>m.top-b.top);if(!v.length){i(null);return}if(r<1){i(null);return}if(d){i(v[v.length-1].link);return}let f=null;for(const{link:m,top:b}of v){if(b>r+pd()+4)break;f=m}i(f)}function i(r){l&&l.classList.remove("active"),r==null?l=null:l=e.value.querySelector(`a[href="${decodeURIComponent(r)}"]`);const u=l;u?(u.classList.add("active"),n.value.style.top=u.offsetTop+39+"px",n.value.style.opacity="1"):(n.value.style.top="33px",n.value.style.opacity="0")}}function cv(e){let n=0;for(;e!==document.body;){if(e===null)return NaN;n+=e.offsetTop,e=e.offsetParent}return n}function dv(e,n,t){Jl.length=0;const a=[],l=[];return e.forEach(o=>{const i={...o,children:[]};let r=l[l.length-1];for(;r&&r.level>=i.level;)l.pop(),r=l[l.length-1];if(i.element.classList.contains("ignore-header")||r&&"shouldIgnore"in r){l.push({level:i.level,shouldIgnore:!0});return}i.level>t||i.level{const l=nn("VPDocOutlineItem",!0);return D(),K("ul",{class:Ne(["VPDocOutlineItem",t.root?"root":"nested"])},[(D(!0),K(ae,null,kt(t.headers,({children:o,link:i,title:r})=>(D(),K("li",null,[X("a",{class:"outline-link",href:i,onClick:n,title:r},Oe(r),9,vv),o!=null&&o.length?(D(),be(l,{key:0,headers:o},null,8,["headers"])):fe("",!0)]))),256))],2)}}}),rs=Se(fv,[["__scopeId","data-v-b933a997"]]),mv={class:"content"},gv={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},hv=ge({__name:"VPDocAsideOutline",setup(e){const{frontmatter:n,theme:t}=_e(),a=ee([]);Qa(()=>{a.value=Ho(n.value.outline??t.value.outline)});const l=H(),o=H();return uv(l,o),(i,r)=>(D(),K("nav",{"aria-labelledby":"doc-outline-aria-label",class:Ne(["VPDocAsideOutline",{"has-outline":a.value.length>0}]),ref_key:"container",ref:l},[X("div",mv,[X("div",{class:"outline-marker",ref_key:"marker",ref:o},null,512),X("div",gv,Oe(L(is)(L(t))),1),s(rs,{headers:a.value,root:!0},null,8,["headers"])])],2))}}),yv=Se(hv,[["__scopeId","data-v-a5bbad30"]]),bv={class:"VPDocAsideCarbonAds"},kv=ge({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const n=()=>null;return(t,a)=>(D(),K("div",bv,[s(L(n),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Sv={class:"VPDocAside"},wv=ge({__name:"VPDocAside",setup(e){const{theme:n}=_e();return(t,a)=>(D(),K("div",Sv,[U(t.$slots,"aside-top",{},void 0,!0),U(t.$slots,"aside-outline-before",{},void 0,!0),s(yv),U(t.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=X("div",{class:"spacer"},null,-1)),U(t.$slots,"aside-ads-before",{},void 0,!0),L(n).carbonAds?(D(),be(kv,{key:0,"carbon-ads":L(n).carbonAds},null,8,["carbon-ads"])):fe("",!0),U(t.$slots,"aside-ads-after",{},void 0,!0),U(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Vv=Se(wv,[["__scopeId","data-v-3f215769"]]);function Cv(){const{theme:e,page:n}=_e();return y(()=>{const{text:t="Edit this page",pattern:a=""}=e.value.editLink||{};let l;return typeof a=="function"?l=a(n.value):l=a.replace(/:path/g,n.value.filePath),{url:l,text:t}})}function pv(){const{page:e,theme:n,frontmatter:t}=_e();return y(()=>{var c,d,v,f,m,b,h,g;const a=os(n.value.sidebar,e.value.relativePath),l=nv(a),o=xv(l,k=>k.link.replace(/[?#].*$/,"")),i=o.findIndex(k=>bn(e.value.relativePath,k.link)),r=((c=n.value.docFooter)==null?void 0:c.prev)===!1&&!t.value.prev||t.value.prev===!1,u=((d=n.value.docFooter)==null?void 0:d.next)===!1&&!t.value.next||t.value.next===!1;return{prev:r?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((v=o[i-1])==null?void 0:v.docFooterText)??((f=o[i-1])==null?void 0:f.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((m=o[i-1])==null?void 0:m.link)},next:u?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((b=o[i+1])==null?void 0:b.docFooterText)??((h=o[i+1])==null?void 0:h.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((g=o[i+1])==null?void 0:g.link)}}})}function xv(e,n){const t=new Set;return e.filter(a=>{const l=n(a);return t.has(l)?!1:t.add(l)})}const Nt=ge({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const n=e,t=y(()=>n.tag??(n.href?"a":"span")),a=y(()=>n.href&&Jr.test(n.href)||n.target==="_blank");return(l,o)=>(D(),be(Bt(t.value),{class:Ne(["VPLink",{link:l.href,"vp-external-link-icon":a.value,"no-icon":l.noIcon}]),href:l.href?L(Ro)(l.href):void 0,target:l.target??(a.value?"_blank":void 0),rel:l.rel??(a.value?"noreferrer":void 0)},{default:J(()=>[U(l.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),_v={class:"VPLastUpdated"},Pv=["datetime"],Iv=ge({__name:"VPDocFooterLastUpdated",setup(e){const{theme:n,page:t,lang:a}=_e(),l=y(()=>new Date(t.value.lastUpdated)),o=y(()=>l.value.toISOString()),i=H("");return Ke(()=>{He(()=>{var r,u,c;i.value=new Intl.DateTimeFormat((u=(r=n.value.lastUpdated)==null?void 0:r.formatOptions)!=null&&u.forceLocale?a.value:void 0,((c=n.value.lastUpdated)==null?void 0:c.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(l.value)})}),(r,u)=>{var c;return D(),K("p",_v,[bt(Oe(((c=L(n).lastUpdated)==null?void 0:c.text)||L(n).lastUpdatedText||"Last updated")+": ",1),X("time",{datetime:o.value},Oe(i.value),9,Pv)])}}}),$v=Se(Iv,[["__scopeId","data-v-e98dd255"]]),Tv={key:0,class:"VPDocFooter"},Av={key:0,class:"edit-info"},Bv={key:0,class:"edit-link"},Dv={key:1,class:"last-updated"},Lv={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Mv={class:"pager"},Ev=["innerHTML"],Fv=["innerHTML"],Ov={class:"pager"},Nv=["innerHTML"],Rv=["innerHTML"],Hv=ge({__name:"VPDocFooter",setup(e){const{theme:n,page:t,frontmatter:a}=_e(),l=Cv(),o=pv(),i=y(()=>n.value.editLink&&a.value.editLink!==!1),r=y(()=>t.value.lastUpdated),u=y(()=>i.value||r.value||o.value.prev||o.value.next);return(c,d)=>{var v,f,m,b;return u.value?(D(),K("footer",Tv,[U(c.$slots,"doc-footer-before",{},void 0,!0),i.value||r.value?(D(),K("div",Av,[i.value?(D(),K("div",Bv,[s(Nt,{class:"edit-link-button",href:L(l).url,"no-icon":!0},{default:J(()=>[d[0]||(d[0]=X("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),bt(" "+Oe(L(l).text),1)]),_:1},8,["href"])])):fe("",!0),r.value?(D(),K("div",Dv,[s($v)])):fe("",!0)])):fe("",!0),(v=L(o).prev)!=null&&v.link||(f=L(o).next)!=null&&f.link?(D(),K("nav",Lv,[d[1]||(d[1]=X("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),X("div",Mv,[(m=L(o).prev)!=null&&m.link?(D(),be(Nt,{key:0,class:"pager-link prev",href:L(o).prev.link},{default:J(()=>{var h;return[X("span",{class:"desc",innerHTML:((h=L(n).docFooter)==null?void 0:h.prev)||"Previous page"},null,8,Ev),X("span",{class:"title",innerHTML:L(o).prev.text},null,8,Fv)]}),_:1},8,["href"])):fe("",!0)]),X("div",Ov,[(b=L(o).next)!=null&&b.link?(D(),be(Nt,{key:0,class:"pager-link next",href:L(o).next.link},{default:J(()=>{var h;return[X("span",{class:"desc",innerHTML:((h=L(n).docFooter)==null?void 0:h.next)||"Next page"},null,8,Nv),X("span",{class:"title",innerHTML:L(o).next.text},null,8,Rv)]}),_:1},8,["href"])):fe("",!0)])])):fe("",!0)])):fe("",!0)}}}),zv=Se(Hv,[["__scopeId","data-v-e257564d"]]),Wv={class:"container"},jv={class:"aside-container"},Gv={class:"aside-content"},Yv={class:"content"},Uv={class:"content-container"},Kv={class:"main"},qv=ge({__name:"VPDoc",setup(e){const{theme:n}=_e(),t=el(),{hasSidebar:a,hasAside:l,leftAside:o}=qt(),i=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(r,u)=>{const c=nn("Content");return D(),K("div",{class:Ne(["VPDoc",{"has-sidebar":L(a),"has-aside":L(l)}])},[U(r.$slots,"doc-top",{},void 0,!0),X("div",Wv,[L(l)?(D(),K("div",{key:0,class:Ne(["aside",{"left-aside":L(o)}])},[u[0]||(u[0]=X("div",{class:"aside-curtain"},null,-1)),X("div",jv,[X("div",Gv,[s(Vv,null,{"aside-top":J(()=>[U(r.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":J(()=>[U(r.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":J(()=>[U(r.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":J(()=>[U(r.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":J(()=>[U(r.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":J(()=>[U(r.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):fe("",!0),X("div",Yv,[X("div",Uv,[U(r.$slots,"doc-before",{},void 0,!0),X("main",Kv,[s(c,{class:Ne(["vp-doc",[i.value,L(n).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),s(zv,null,{"doc-footer-before":J(()=>[U(r.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),U(r.$slots,"doc-after",{},void 0,!0)])])]),U(r.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Xv=Se(qv,[["__scopeId","data-v-39a288b8"]]),Zv=ge({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const n=e,t=y(()=>n.href&&Jr.test(n.href)),a=y(()=>n.tag||(n.href?"a":"button"));return(l,o)=>(D(),be(Bt(a.value),{class:Ne(["VPButton",[l.size,l.theme]]),href:l.href?L(Ro)(l.href):void 0,target:n.target??(t.value?"_blank":void 0),rel:n.rel??(t.value?"noreferrer":void 0)},{default:J(()=>[bt(Oe(l.text),1)]),_:1},8,["class","href","target","rel"]))}}),Jv=Se(Zv,[["__scopeId","data-v-fa7799d5"]]),Qv=["src","alt"],ef=ge({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(n,t)=>{const a=nn("VPImage",!0);return n.image?(D(),K(ae,{key:0},[typeof n.image=="string"||"src"in n.image?(D(),K("img",z({key:0,class:"VPImage"},typeof n.image=="string"?n.$attrs:{...n.image,...n.$attrs},{src:L(Mo)(typeof n.image=="string"?n.image:n.image.src),alt:n.alt??(typeof n.image=="string"?"":n.image.alt||"")}),null,16,Qv)):(D(),K(ae,{key:1},[s(a,z({class:"dark",image:n.image.dark,alt:n.image.alt},n.$attrs),null,16,["image","alt"]),s(a,z({class:"light",image:n.image.light,alt:n.image.alt},n.$attrs),null,16,["image","alt"])],64))],64)):fe("",!0)}}}),za=Se(ef,[["__scopeId","data-v-8426fc1a"]]),tf={class:"container"},nf={class:"main"},af={class:"heading"},lf=["innerHTML"],of=["innerHTML"],rf=["innerHTML"],sf={key:0,class:"actions"},uf={key:0,class:"image"},cf={class:"image-container"},df=ge({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const n=xe("hero-image-slot-exists");return(t,a)=>(D(),K("div",{class:Ne(["VPHero",{"has-image":t.image||L(n)}])},[X("div",tf,[X("div",nf,[U(t.$slots,"home-hero-info-before",{},void 0,!0),U(t.$slots,"home-hero-info",{},()=>[X("h1",af,[t.name?(D(),K("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,lf)):fe("",!0),t.text?(D(),K("span",{key:1,innerHTML:t.text,class:"text"},null,8,of)):fe("",!0)]),t.tagline?(D(),K("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,rf)):fe("",!0)],!0),U(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(D(),K("div",sf,[(D(!0),K(ae,null,kt(t.actions,l=>(D(),K("div",{key:l.link,class:"action"},[s(Jv,{tag:"a",size:"medium",theme:l.theme,text:l.text,href:l.link,target:l.target,rel:l.rel},null,8,["theme","text","href","target","rel"])]))),128))])):fe("",!0),U(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||L(n)?(D(),K("div",uf,[X("div",cf,[a[0]||(a[0]=X("div",{class:"image-bg"},null,-1)),U(t.$slots,"home-hero-image",{},()=>[t.image?(D(),be(za,{key:0,class:"image-src",image:t.image},null,8,["image"])):fe("",!0)],!0)])])):fe("",!0)])],2))}}),vf=Se(df,[["__scopeId","data-v-4f9c455b"]]),ff=ge({__name:"VPHomeHero",setup(e){const{frontmatter:n}=_e();return(t,a)=>L(n).hero?(D(),be(vf,{key:0,class:"VPHomeHero",name:L(n).hero.name,text:L(n).hero.text,tagline:L(n).hero.tagline,image:L(n).hero.image,actions:L(n).hero.actions},{"home-hero-info-before":J(()=>[U(t.$slots,"home-hero-info-before")]),"home-hero-info":J(()=>[U(t.$slots,"home-hero-info")]),"home-hero-info-after":J(()=>[U(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":J(()=>[U(t.$slots,"home-hero-actions-after")]),"home-hero-image":J(()=>[U(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):fe("",!0)}}),mf={class:"box"},gf={key:0,class:"icon"},hf=["innerHTML"],yf=["innerHTML"],bf=["innerHTML"],kf={key:4,class:"link-text"},Sf={class:"link-text-value"},wf=ge({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(n,t)=>(D(),be(Nt,{class:"VPFeature",href:n.link,rel:n.rel,target:n.target,"no-icon":!0,tag:n.link?"a":"div"},{default:J(()=>[X("article",mf,[typeof n.icon=="object"&&n.icon.wrap?(D(),K("div",gf,[s(za,{image:n.icon,alt:n.icon.alt,height:n.icon.height||48,width:n.icon.width||48},null,8,["image","alt","height","width"])])):typeof n.icon=="object"?(D(),be(za,{key:1,image:n.icon,alt:n.icon.alt,height:n.icon.height||48,width:n.icon.width||48},null,8,["image","alt","height","width"])):n.icon?(D(),K("div",{key:2,class:"icon",innerHTML:n.icon},null,8,hf)):fe("",!0),X("h2",{class:"title",innerHTML:n.title},null,8,yf),n.details?(D(),K("p",{key:3,class:"details",innerHTML:n.details},null,8,bf)):fe("",!0),n.linkText?(D(),K("div",kf,[X("p",Sf,[bt(Oe(n.linkText)+" ",1),t[0]||(t[0]=X("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):fe("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Vf=Se(wf,[["__scopeId","data-v-a3976bdc"]]),Cf={key:0,class:"VPFeatures"},pf={class:"container"},xf={class:"items"},_f=ge({__name:"VPFeatures",props:{features:{}},setup(e){const n=e,t=y(()=>{const a=n.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,l)=>a.features?(D(),K("div",Cf,[X("div",pf,[X("div",xf,[(D(!0),K(ae,null,kt(a.features,o=>(D(),K("div",{key:o.title,class:Ne(["item",[t.value]])},[s(Vf,{icon:o.icon,title:o.title,details:o.details,link:o.link,"link-text":o.linkText,rel:o.rel,target:o.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):fe("",!0)}}),Pf=Se(_f,[["__scopeId","data-v-a6181336"]]),If=ge({__name:"VPHomeFeatures",setup(e){const{frontmatter:n}=_e();return(t,a)=>L(n).features?(D(),be(Pf,{key:0,class:"VPHomeFeatures",features:L(n).features},null,8,["features"])):fe("",!0)}}),$f=ge({__name:"VPHomeContent",setup(e){const{width:n}=xd({initialWidth:0,includeScrollbar:!1});return(t,a)=>(D(),K("div",{class:"vp-doc container",style:Qr(L(n)?{"--vp-offset":`calc(50% - ${L(n)/2}px)`}:{})},[U(t.$slots,"default",{},void 0,!0)],4))}}),Tf=Se($f,[["__scopeId","data-v-8e2d4988"]]),Af=ge({__name:"VPHome",setup(e){const{frontmatter:n,theme:t}=_e();return(a,l)=>{const o=nn("Content");return D(),K("div",{class:Ne(["VPHome",{"external-link-icon-enabled":L(t).externalLinkIcon}])},[U(a.$slots,"home-hero-before",{},void 0,!0),s(ff,null,{"home-hero-info-before":J(()=>[U(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":J(()=>[U(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":J(()=>[U(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":J(()=>[U(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":J(()=>[U(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),U(a.$slots,"home-hero-after",{},void 0,!0),U(a.$slots,"home-features-before",{},void 0,!0),s(If),U(a.$slots,"home-features-after",{},void 0,!0),L(n).markdownStyles!==!1?(D(),be(Tf,{key:0},{default:J(()=>[s(o)]),_:1})):(D(),be(o,{key:1}))],2)}}}),Bf=Se(Af,[["__scopeId","data-v-8b561e3d"]]),Df={},Lf={class:"VPPage"};function Mf(e,n){const t=nn("Content");return D(),K("div",Lf,[U(e.$slots,"page-top"),s(t),U(e.$slots,"page-bottom")])}const Ef=Se(Df,[["render",Mf]]),Ff=ge({__name:"VPContent",setup(e){const{page:n,frontmatter:t}=_e(),{hasSidebar:a}=qt();return(l,o)=>(D(),K("div",{class:Ne(["VPContent",{"has-sidebar":L(a),"is-home":L(t).layout==="home"}]),id:"VPContent"},[L(n).isNotFound?U(l.$slots,"not-found",{key:0},()=>[s(ev)],!0):L(t).layout==="page"?(D(),be(Ef,{key:1},{"page-top":J(()=>[U(l.$slots,"page-top",{},void 0,!0)]),"page-bottom":J(()=>[U(l.$slots,"page-bottom",{},void 0,!0)]),_:3})):L(t).layout==="home"?(D(),be(Bf,{key:2},{"home-hero-before":J(()=>[U(l.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":J(()=>[U(l.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":J(()=>[U(l.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":J(()=>[U(l.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":J(()=>[U(l.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":J(()=>[U(l.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":J(()=>[U(l.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":J(()=>[U(l.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":J(()=>[U(l.$slots,"home-features-after",{},void 0,!0)]),_:3})):L(t).layout&&L(t).layout!=="doc"?(D(),be(Bt(L(t).layout),{key:3})):(D(),be(Xv,{key:4},{"doc-top":J(()=>[U(l.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":J(()=>[U(l.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":J(()=>[U(l.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":J(()=>[U(l.$slots,"doc-before",{},void 0,!0)]),"doc-after":J(()=>[U(l.$slots,"doc-after",{},void 0,!0)]),"aside-top":J(()=>[U(l.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":J(()=>[U(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":J(()=>[U(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":J(()=>[U(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":J(()=>[U(l.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":J(()=>[U(l.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Of=Se(Ff,[["__scopeId","data-v-1428d186"]]),Nf={class:"container"},Rf=["innerHTML"],Hf=["innerHTML"],zf=ge({__name:"VPFooter",setup(e){const{theme:n,frontmatter:t}=_e(),{hasSidebar:a}=qt();return(l,o)=>L(n).footer&&L(t).footer!==!1?(D(),K("footer",{key:0,class:Ne(["VPFooter",{"has-sidebar":L(a)}])},[X("div",Nf,[L(n).footer.message?(D(),K("p",{key:0,class:"message",innerHTML:L(n).footer.message},null,8,Rf)):fe("",!0),L(n).footer.copyright?(D(),K("p",{key:1,class:"copyright",innerHTML:L(n).footer.copyright},null,8,Hf)):fe("",!0)])],2)):fe("",!0)}}),Wf=Se(zf,[["__scopeId","data-v-e315a0ad"]]);function jf(){const{theme:e,frontmatter:n}=_e(),t=ee([]),a=y(()=>t.value.length>0);return Qa(()=>{t.value=Ho(n.value.outline??e.value.outline)}),{headers:t,hasLocalNav:a}}const Gf={class:"menu-text"},Yf={class:"header"},Uf={class:"outline"},Kf=ge({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const n=e,{theme:t}=_e(),a=H(!1),l=H(0),o=H(),i=H();function r(v){var f;(f=o.value)!=null&&f.contains(v.target)||(a.value=!1)}Q(a,v=>{if(v){document.addEventListener("click",r);return}document.removeEventListener("click",r)}),Kl("Escape",()=>{a.value=!1}),Qa(()=>{a.value=!1});function u(){a.value=!a.value,l.value=window.innerHeight+Math.min(window.scrollY-n.navHeight,0)}function c(v){v.target.classList.contains("outline-link")&&(i.value&&(i.value.style.transition="none"),Te(()=>{a.value=!1}))}function d(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(v,f)=>(D(),K("div",{class:"VPLocalNavOutlineDropdown",style:Qr({"--vp-vh":l.value+"px"}),ref_key:"main",ref:o},[v.headers.length>0?(D(),K("button",{key:0,onClick:u,class:Ne({open:a.value})},[X("span",Gf,Oe(L(is)(L(t))),1),f[0]||(f[0]=X("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(D(),K("button",{key:1,onClick:d},Oe(L(t).returnToTopLabel||"Return to top"),1)),s(Dt,{name:"flyout"},{default:J(()=>[a.value?(D(),K("div",{key:0,ref_key:"items",ref:i,class:"items",onClick:c},[X("div",Yf,[X("a",{class:"top-link",href:"#",onClick:d},Oe(L(t).returnToTopLabel||"Return to top"),1)]),X("div",Uf,[s(rs,{headers:v.headers},null,8,["headers"])])],512)):fe("",!0)]),_:1})],4))}}),qf=Se(Kf,[["__scopeId","data-v-8a42e2b4"]]),Xf={class:"container"},Zf=["aria-expanded"],Jf={class:"menu-text"},Qf=ge({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:n,frontmatter:t}=_e(),{hasSidebar:a}=qt(),{headers:l}=jf(),{y:o}=es(),i=H(0);Ke(()=>{i.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Qa(()=>{l.value=Ho(t.value.outline??n.value.outline)});const r=y(()=>l.value.length===0),u=y(()=>r.value&&!a.value),c=y(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:r.value,fixed:u.value}));return(d,v)=>L(t).layout!=="home"&&(!u.value||L(o)>=i.value)?(D(),K("div",{key:0,class:Ne(c.value)},[X("div",Xf,[L(a)?(D(),K("button",{key:0,class:"menu","aria-expanded":d.open,"aria-controls":"VPSidebarNav",onClick:v[0]||(v[0]=f=>d.$emit("open-menu"))},[v[1]||(v[1]=X("span",{class:"vpi-align-left menu-icon"},null,-1)),X("span",Jf,Oe(L(n).sidebarMenuLabel||"Menu"),1)],8,Zf)):fe("",!0),s(qf,{headers:L(l),navHeight:i.value},null,8,["headers","navHeight"])])],2)):fe("",!0)}}),em=Se(Qf,[["__scopeId","data-v-a6f0e41e"]]);function tm(){const e=H(!1);function n(){e.value=!0,window.addEventListener("resize",l)}function t(){e.value=!1,window.removeEventListener("resize",l)}function a(){e.value?t():n()}function l(){window.outerWidth>=768&&t()}const o=el();return Q(()=>o.path,t),{isScreenOpen:e,openScreen:n,closeScreen:t,toggleScreen:a}}const nm={},am={class:"VPSwitch",type:"button",role:"switch"},lm={class:"check"},om={key:0,class:"icon"};function im(e,n){return D(),K("button",am,[X("span",lm,[e.$slots.default?(D(),K("span",om,[U(e.$slots,"default",{},void 0,!0)])):fe("",!0)])])}const rm=Se(nm,[["render",im],["__scopeId","data-v-1d5665e3"]]),sm=ge({__name:"VPSwitchAppearance",setup(e){const{isDark:n,theme:t}=_e(),a=xe("toggle-appearance",()=>{n.value=!n.value}),l=H("");return Eo(()=>{l.value=n.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(o,i)=>(D(),be(rm,{title:l.value,class:"VPSwitchAppearance","aria-checked":L(n),onClick:L(a)},{default:J(()=>i[0]||(i[0]=[X("span",{class:"vpi-sun sun"},null,-1),X("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),zo=Se(sm,[["__scopeId","data-v-5337faa4"]]),um={key:0,class:"VPNavBarAppearance"},cm=ge({__name:"VPNavBarAppearance",setup(e){const{site:n}=_e();return(t,a)=>L(n).appearance&&L(n).appearance!=="force-dark"&&L(n).appearance!=="force-auto"?(D(),K("div",um,[s(zo)])):fe("",!0)}}),dm=Se(cm,[["__scopeId","data-v-6c893767"]]),Wo=H();let ss=!1,El=0;function vm(e){const n=H(!1);if(tl){!ss&&fm(),El++;const t=Q(Wo,a=>{var l,o,i;a===e.el.value||(l=e.el.value)!=null&&l.contains(a)?(n.value=!0,(o=e.onFocus)==null||o.call(e)):(n.value=!1,(i=e.onBlur)==null||i.call(e))});Ja(()=>{t(),El--,El||mm()})}return nl(n)}function fm(){document.addEventListener("focusin",us),ss=!0,Wo.value=document.activeElement}function mm(){document.removeEventListener("focusin",us)}function us(){Wo.value=document.activeElement}const gm={class:"VPMenuLink"},hm=["innerHTML"],ym=ge({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:n}=_e();return(t,a)=>(D(),K("div",gm,[s(Nt,{class:Ne({active:L(bn)(L(n).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:J(()=>[X("span",{innerHTML:t.item.text},null,8,hm)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),al=Se(ym,[["__scopeId","data-v-35975db6"]]),bm={class:"VPMenuGroup"},km={key:0,class:"title"},Sm=ge({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(n,t)=>(D(),K("div",bm,[n.text?(D(),K("p",km,Oe(n.text),1)):fe("",!0),(D(!0),K(ae,null,kt(n.items,a=>(D(),K(ae,null,["link"in a?(D(),be(al,{key:0,item:a},null,8,["item"])):fe("",!0)],64))),256))]))}}),wm=Se(Sm,[["__scopeId","data-v-69e747b5"]]),Vm={class:"VPMenu"},Cm={key:0,class:"items"},pm=ge({__name:"VPMenu",props:{items:{}},setup(e){return(n,t)=>(D(),K("div",Vm,[n.items?(D(),K("div",Cm,[(D(!0),K(ae,null,kt(n.items,a=>(D(),K(ae,{key:JSON.stringify(a)},["link"in a?(D(),be(al,{key:0,item:a},null,8,["item"])):"component"in a?(D(),be(Bt(a.component),z({key:1,ref_for:!0},a.props),null,16)):(D(),be(wm,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):fe("",!0),U(n.$slots,"default",{},void 0,!0)]))}}),xm=Se(pm,[["__scopeId","data-v-b98bc113"]]),_m=["aria-expanded","aria-label"],Pm={key:0,class:"text"},Im=["innerHTML"],$m={key:1,class:"vpi-more-horizontal icon"},Tm={class:"menu"},Am=ge({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const n=H(!1),t=H();vm({el:t,onBlur:a});function a(){n.value=!1}return(l,o)=>(D(),K("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:o[1]||(o[1]=i=>n.value=!0),onMouseleave:o[2]||(o[2]=i=>n.value=!1)},[X("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":n.value,"aria-label":l.label,onClick:o[0]||(o[0]=i=>n.value=!n.value)},[l.button||l.icon?(D(),K("span",Pm,[l.icon?(D(),K("span",{key:0,class:Ne([l.icon,"option-icon"])},null,2)):fe("",!0),l.button?(D(),K("span",{key:1,innerHTML:l.button},null,8,Im)):fe("",!0),o[3]||(o[3]=X("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(D(),K("span",$m))],8,_m),X("div",Tm,[s(xm,{items:l.items},{default:J(()=>[U(l.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),jo=Se(Am,[["__scopeId","data-v-cf11d7a2"]]),Bm=["href","aria-label","innerHTML"],Dm=ge({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const n=e,t=H();Ke(async()=>{var o;await Te();const l=(o=t.value)==null?void 0:o.children[0];l instanceof HTMLElement&&l.className.startsWith("vpi-social-")&&(getComputedStyle(l).maskImage||getComputedStyle(l).webkitMaskImage)==="none"&&l.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${n.icon}.svg')`)});const a=y(()=>typeof n.icon=="object"?n.icon.svg:``);return(l,o)=>(D(),K("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:l.link,"aria-label":l.ariaLabel??(typeof l.icon=="string"?l.icon:""),target:"_blank",rel:"noopener",innerHTML:a.value},null,8,Bm))}}),Lm=Se(Dm,[["__scopeId","data-v-bd121fe5"]]),Mm={class:"VPSocialLinks"},Em=ge({__name:"VPSocialLinks",props:{links:{}},setup(e){return(n,t)=>(D(),K("div",Mm,[(D(!0),K(ae,null,kt(n.links,({link:a,icon:l,ariaLabel:o})=>(D(),be(Lm,{key:a,icon:l,link:a,ariaLabel:o},null,8,["icon","link","ariaLabel"]))),128))]))}}),Go=Se(Em,[["__scopeId","data-v-7bc22406"]]),Fm={key:0,class:"group translations"},Om={class:"trans-title"},Nm={key:1,class:"group"},Rm={class:"item appearance"},Hm={class:"label"},zm={class:"appearance-action"},Wm={key:2,class:"group"},jm={class:"item social-links"},Gm=ge({__name:"VPNavBarExtra",setup(e){const{site:n,theme:t}=_e(),{localeLinks:a,currentLang:l}=ya({correspondingLink:!0}),o=y(()=>a.value.length&&l.value.label||n.value.appearance||t.value.socialLinks);return(i,r)=>o.value?(D(),be(jo,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:J(()=>[L(a).length&&L(l).label?(D(),K("div",Fm,[X("p",Om,Oe(L(l).label),1),(D(!0),K(ae,null,kt(L(a),u=>(D(),be(al,{key:u.link,item:u},null,8,["item"]))),128))])):fe("",!0),L(n).appearance&&L(n).appearance!=="force-dark"&&L(n).appearance!=="force-auto"?(D(),K("div",Nm,[X("div",Rm,[X("p",Hm,Oe(L(t).darkModeSwitchLabel||"Appearance"),1),X("div",zm,[s(zo)])])])):fe("",!0),L(t).socialLinks?(D(),K("div",Wm,[X("div",jm,[s(Go,{class:"social-links-list",links:L(t).socialLinks},null,8,["links"])])])):fe("",!0)]),_:1})):fe("",!0)}}),Ym=Se(Gm,[["__scopeId","data-v-bb2aa2f0"]]),Um=["aria-expanded"],Km=ge({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(n,t)=>(D(),K("button",{type:"button",class:Ne(["VPNavBarHamburger",{active:n.active}]),"aria-label":"mobile navigation","aria-expanded":n.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=a=>n.$emit("click"))},t[1]||(t[1]=[X("span",{class:"container"},[X("span",{class:"top"}),X("span",{class:"middle"}),X("span",{class:"bottom"})],-1)]),10,Um))}}),qm=Se(Km,[["__scopeId","data-v-e5dd9c1c"]]),Xm=["innerHTML"],Zm=ge({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:n}=_e();return(t,a)=>(D(),be(Nt,{class:Ne({VPNavBarMenuLink:!0,active:L(bn)(L(n).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:J(()=>[X("span",{innerHTML:t.item.text},null,8,Xm)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Jm=Se(Zm,[["__scopeId","data-v-e56f3d57"]]),Qm=ge({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const n=e,{page:t}=_e(),a=o=>"component"in o?!1:"link"in o?bn(t.value.relativePath,o.link,!!n.item.activeMatch):o.items.some(a),l=y(()=>a(n.item));return(o,i)=>(D(),be(jo,{class:Ne({VPNavBarMenuGroup:!0,active:L(bn)(L(t).relativePath,o.item.activeMatch,!!o.item.activeMatch)||l.value}),button:o.item.text,items:o.item.items},null,8,["class","button","items"]))}}),eg={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},tg=ge({__name:"VPNavBarMenu",setup(e){const{theme:n}=_e();return(t,a)=>L(n).nav?(D(),K("nav",eg,[a[0]||(a[0]=X("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(D(!0),K(ae,null,kt(L(n).nav,l=>(D(),K(ae,{key:JSON.stringify(l)},["link"in l?(D(),be(Jm,{key:0,item:l},null,8,["item"])):"component"in l?(D(),be(Bt(l.component),z({key:1,ref_for:!0},l.props),null,16)):(D(),be(Qm,{key:2,item:l},null,8,["item"]))],64))),128))])):fe("",!0)}}),ng=Se(tg,[["__scopeId","data-v-dc692963"]]);function ag(e){const{localeIndex:n,theme:t}=_e();function a(l){var b,h,g;const o=l.split("."),i=(b=t.value.search)==null?void 0:b.options,r=i&&typeof i=="object",u=r&&((g=(h=i.locales)==null?void 0:h[n.value])==null?void 0:g.translations)||null,c=r&&i.translations||null;let d=u,v=c,f=e;const m=o.pop();for(const k of o){let S=null;const C=f==null?void 0:f[k];C&&(S=f=C);const P=v==null?void 0:v[k];P&&(S=v=P);const x=d==null?void 0:d[k];x&&(S=d=x),C||(f=S),P||(v=S),x||(d=S)}return(d==null?void 0:d[m])??(v==null?void 0:v[m])??(f==null?void 0:f[m])??""}return a}const lg=["aria-label"],og={class:"DocSearch-Button-Container"},ig={class:"DocSearch-Button-Placeholder"},ji=ge({__name:"VPNavBarSearchButton",setup(e){const t=ag({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(a,l)=>(D(),K("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":L(t)("button.buttonAriaLabel")},[X("span",og,[l[0]||(l[0]=X("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),X("span",ig,Oe(L(t)("button.buttonText")),1)]),l[1]||(l[1]=X("span",{class:"DocSearch-Button-Keys"},[X("kbd",{class:"DocSearch-Button-Key"}),X("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,lg))}}),rg={class:"VPNavBarSearch"},sg={id:"local-search"},ug={key:1,id:"docsearch"},cg=ge({__name:"VPNavBarSearch",setup(e){const n=_d(()=>Pd(()=>import("./VPLocalSearchBox.B9umghyX.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:a}=_e(),l=H(!1),o=H(!1);Ke(()=>{});function i(){l.value||(l.value=!0,setTimeout(r,16))}function r(){const v=new Event("keydown");v.key="k",v.metaKey=!0,window.dispatchEvent(v),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||r()},16)}function u(v){const f=v.target,m=f.tagName;return f.isContentEditable||m==="INPUT"||m==="SELECT"||m==="TEXTAREA"}const c=H(!1);Kl("k",v=>{(v.ctrlKey||v.metaKey)&&(v.preventDefault(),c.value=!0)}),Kl("/",v=>{u(v)||(v.preventDefault(),c.value=!0)});const d="local";return(v,f)=>{var m;return D(),K("div",rg,[L(d)==="local"?(D(),K(ae,{key:0},[c.value?(D(),be(L(n),{key:0,onClose:f[0]||(f[0]=b=>c.value=!1)})):fe("",!0),X("div",sg,[s(ji,{onClick:f[1]||(f[1]=b=>c.value=!0)})])],64)):L(d)==="algolia"?(D(),K(ae,{key:1},[l.value?(D(),be(L(t),{key:0,algolia:((m=L(a).search)==null?void 0:m.options)??L(a).algolia,onVnodeBeforeMount:f[2]||(f[2]=b=>o.value=!0)},null,8,["algolia"])):fe("",!0),o.value?fe("",!0):(D(),K("div",ug,[s(ji,{onClick:i})]))],64)):fe("",!0)])}}}),dg=ge({__name:"VPNavBarSocialLinks",setup(e){const{theme:n}=_e();return(t,a)=>L(n).socialLinks?(D(),be(Go,{key:0,class:"VPNavBarSocialLinks",links:L(n).socialLinks},null,8,["links"])):fe("",!0)}}),vg=Se(dg,[["__scopeId","data-v-0394ad82"]]),fg=["href","rel","target"],mg=["innerHTML"],gg={key:2},hg=ge({__name:"VPNavBarTitle",setup(e){const{site:n,theme:t}=_e(),{hasSidebar:a}=qt(),{currentLang:l}=ya(),o=y(()=>{var u;return typeof t.value.logoLink=="string"?t.value.logoLink:(u=t.value.logoLink)==null?void 0:u.link}),i=y(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.rel}),r=y(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.target});return(u,c)=>(D(),K("div",{class:Ne(["VPNavBarTitle",{"has-sidebar":L(a)}])},[X("a",{class:"title",href:o.value??L(Ro)(L(l).link),rel:i.value,target:r.value},[U(u.$slots,"nav-bar-title-before",{},void 0,!0),L(t).logo?(D(),be(za,{key:0,class:"logo",image:L(t).logo},null,8,["image"])):fe("",!0),L(t).siteTitle?(D(),K("span",{key:1,innerHTML:L(t).siteTitle},null,8,mg)):L(t).siteTitle===void 0?(D(),K("span",gg,Oe(L(n).title),1)):fe("",!0),U(u.$slots,"nav-bar-title-after",{},void 0,!0)],8,fg)],2))}}),yg=Se(hg,[["__scopeId","data-v-1168a8e4"]]),bg={class:"items"},kg={class:"title"},Sg=ge({__name:"VPNavBarTranslations",setup(e){const{theme:n}=_e(),{localeLinks:t,currentLang:a}=ya({correspondingLink:!0});return(l,o)=>L(t).length&&L(a).label?(D(),be(jo,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:L(n).langMenuLabel||"Change language"},{default:J(()=>[X("div",bg,[X("p",kg,Oe(L(a).label),1),(D(!0),K(ae,null,kt(L(t),i=>(D(),be(al,{key:i.link,item:i},null,8,["item"]))),128))])]),_:1},8,["label"])):fe("",!0)}}),wg=Se(Sg,[["__scopeId","data-v-88af2de4"]]),Vg={class:"wrapper"},Cg={class:"container"},pg={class:"title"},xg={class:"content"},_g={class:"content-body"},Pg=ge({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const n=e,{y:t}=es(),{hasSidebar:a}=qt(),{frontmatter:l}=_e(),o=H({});return Eo(()=>{o.value={"has-sidebar":a.value,home:l.value.layout==="home",top:t.value===0,"screen-open":n.isScreenOpen}}),(i,r)=>(D(),K("div",{class:Ne(["VPNavBar",o.value])},[X("div",Vg,[X("div",Cg,[X("div",pg,[s(yg,null,{"nav-bar-title-before":J(()=>[U(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":J(()=>[U(i.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),X("div",xg,[X("div",_g,[U(i.$slots,"nav-bar-content-before",{},void 0,!0),s(cg,{class:"search"}),s(ng,{class:"menu"}),s(wg,{class:"translations"}),s(dm,{class:"appearance"}),s(vg,{class:"social-links"}),s(Ym,{class:"extra"}),U(i.$slots,"nav-bar-content-after",{},void 0,!0),s(qm,{class:"hamburger",active:i.isScreenOpen,onClick:r[0]||(r[0]=u=>i.$emit("toggle-screen"))},null,8,["active"])])])])]),r[1]||(r[1]=X("div",{class:"divider"},[X("div",{class:"divider-line"})],-1))],2))}}),Ig=Se(Pg,[["__scopeId","data-v-6aa21345"]]),$g={key:0,class:"VPNavScreenAppearance"},Tg={class:"text"},Ag=ge({__name:"VPNavScreenAppearance",setup(e){const{site:n,theme:t}=_e();return(a,l)=>L(n).appearance&&L(n).appearance!=="force-dark"&&L(n).appearance!=="force-auto"?(D(),K("div",$g,[X("p",Tg,Oe(L(t).darkModeSwitchLabel||"Appearance"),1),s(zo)])):fe("",!0)}}),Bg=Se(Ag,[["__scopeId","data-v-b44890b2"]]),Dg=["innerHTML"],Lg=ge({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const n=xe("close-screen");return(t,a)=>(D(),be(Nt,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:L(n)},{default:J(()=>[X("span",{innerHTML:t.item.text},null,8,Dg)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Mg=Se(Lg,[["__scopeId","data-v-df37e6dd"]]),Eg=["innerHTML"],Fg=ge({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const n=xe("close-screen");return(t,a)=>(D(),be(Nt,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:L(n)},{default:J(()=>[X("span",{innerHTML:t.item.text},null,8,Eg)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),cs=Se(Fg,[["__scopeId","data-v-3e9c20e4"]]),Og={class:"VPNavScreenMenuGroupSection"},Ng={key:0,class:"title"},Rg=ge({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(n,t)=>(D(),K("div",Og,[n.text?(D(),K("p",Ng,Oe(n.text),1)):fe("",!0),(D(!0),K(ae,null,kt(n.items,a=>(D(),be(cs,{key:a.text,item:a},null,8,["item"]))),128))]))}}),Hg=Se(Rg,[["__scopeId","data-v-8133b170"]]),zg=["aria-controls","aria-expanded"],Wg=["innerHTML"],jg=["id"],Gg={key:0,class:"item"},Yg={key:1,class:"item"},Ug={key:2,class:"group"},Kg=ge({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const n=e,t=H(!1),a=y(()=>`NavScreenGroup-${n.text.replace(" ","-").toLowerCase()}`);function l(){t.value=!t.value}return(o,i)=>(D(),K("div",{class:Ne(["VPNavScreenMenuGroup",{open:t.value}])},[X("button",{class:"button","aria-controls":a.value,"aria-expanded":t.value,onClick:l},[X("span",{class:"button-text",innerHTML:o.text},null,8,Wg),i[0]||(i[0]=X("span",{class:"vpi-plus button-icon"},null,-1))],8,zg),X("div",{id:a.value,class:"items"},[(D(!0),K(ae,null,kt(o.items,r=>(D(),K(ae,{key:JSON.stringify(r)},["link"in r?(D(),K("div",Gg,[s(cs,{item:r},null,8,["item"])])):"component"in r?(D(),K("div",Yg,[(D(),be(Bt(r.component),z({ref_for:!0},r.props,{"screen-menu":""}),null,16))])):(D(),K("div",Ug,[s(Hg,{text:r.text,items:r.items},null,8,["text","items"])]))],64))),128))],8,jg)],2))}}),qg=Se(Kg,[["__scopeId","data-v-b9ab8c58"]]),Xg={key:0,class:"VPNavScreenMenu"},Zg=ge({__name:"VPNavScreenMenu",setup(e){const{theme:n}=_e();return(t,a)=>L(n).nav?(D(),K("nav",Xg,[(D(!0),K(ae,null,kt(L(n).nav,l=>(D(),K(ae,{key:JSON.stringify(l)},["link"in l?(D(),be(Mg,{key:0,item:l},null,8,["item"])):"component"in l?(D(),be(Bt(l.component),z({key:1,ref_for:!0},l.props,{"screen-menu":""}),null,16)):(D(),be(qg,{key:2,text:l.text||"",items:l.items},null,8,["text","items"]))],64))),128))])):fe("",!0)}}),Jg=ge({__name:"VPNavScreenSocialLinks",setup(e){const{theme:n}=_e();return(t,a)=>L(n).socialLinks?(D(),be(Go,{key:0,class:"VPNavScreenSocialLinks",links:L(n).socialLinks},null,8,["links"])):fe("",!0)}}),Qg={class:"list"},eh=ge({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:n,currentLang:t}=ya({correspondingLink:!0}),a=H(!1);function l(){a.value=!a.value}return(o,i)=>L(n).length&&L(t).label?(D(),K("div",{key:0,class:Ne(["VPNavScreenTranslations",{open:a.value}])},[X("button",{class:"title",onClick:l},[i[0]||(i[0]=X("span",{class:"vpi-languages icon lang"},null,-1)),bt(" "+Oe(L(t).label)+" ",1),i[1]||(i[1]=X("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),X("ul",Qg,[(D(!0),K(ae,null,kt(L(n),r=>(D(),K("li",{key:r.link,class:"item"},[s(Nt,{class:"link",href:r.link},{default:J(()=>[bt(Oe(r.text),1)]),_:2},1032,["href"])]))),128))])],2)):fe("",!0)}}),th=Se(eh,[["__scopeId","data-v-858fe1a4"]]),nh={class:"container"},ah=ge({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const n=H(null),t=ts(tl?document.body:null);return(a,l)=>(D(),be(Dt,{name:"fade",onEnter:l[0]||(l[0]=o=>t.value=!0),onAfterLeave:l[1]||(l[1]=o=>t.value=!1)},{default:J(()=>[a.open?(D(),K("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:n,id:"VPNavScreen"},[X("div",nh,[U(a.$slots,"nav-screen-content-before",{},void 0,!0),s(Zg,{class:"menu"}),s(th,{class:"translations"}),s(Bg,{class:"appearance"}),s(Jg,{class:"social-links"}),U(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):fe("",!0)]),_:3}))}}),lh=Se(ah,[["__scopeId","data-v-f2779853"]]),oh={key:0,class:"VPNav"},ih=ge({__name:"VPNav",setup(e){const{isScreenOpen:n,closeScreen:t,toggleScreen:a}=tm(),{frontmatter:l}=_e(),o=y(()=>l.value.navbar!==!1);return Re("close-screen",t),He(()=>{tl&&document.documentElement.classList.toggle("hide-nav",!o.value)}),(i,r)=>o.value?(D(),K("header",oh,[s(Ig,{"is-screen-open":L(n),onToggleScreen:L(a)},{"nav-bar-title-before":J(()=>[U(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":J(()=>[U(i.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":J(()=>[U(i.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":J(()=>[U(i.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),s(lh,{open:L(n)},{"nav-screen-content-before":J(()=>[U(i.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":J(()=>[U(i.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):fe("",!0)}}),rh=Se(ih,[["__scopeId","data-v-ae24b3ad"]]),sh=["role","tabindex"],uh={key:1,class:"items"},ch=ge({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const n=e,{collapsed:t,collapsible:a,isLink:l,isActiveLink:o,hasActiveLink:i,hasChildren:r,toggle:u}=lv(y(()=>n.item)),c=y(()=>r.value?"section":"div"),d=y(()=>l.value?"a":"div"),v=y(()=>r.value?n.depth+2===7?"p":`h${n.depth+2}`:"p"),f=y(()=>l.value?void 0:"button"),m=y(()=>[[`level-${n.depth}`],{collapsible:a.value},{collapsed:t.value},{"is-link":l.value},{"is-active":o.value},{"has-active":i.value}]);function b(g){"key"in g&&g.key!=="Enter"||!n.item.link&&u()}function h(){n.item.link&&u()}return(g,k)=>{const S=nn("VPSidebarItem",!0);return D(),be(Bt(c.value),{class:Ne(["VPSidebarItem",m.value])},{default:J(()=>[g.item.text?(D(),K("div",z({key:0,class:"item",role:f.value},Id(g.item.items?{click:b,keydown:b}:{},!0),{tabindex:g.item.items&&0}),[k[1]||(k[1]=X("div",{class:"indicator"},null,-1)),g.item.link?(D(),be(Nt,{key:0,tag:d.value,class:"link",href:g.item.link,rel:g.item.rel,target:g.item.target},{default:J(()=>[(D(),be(Bt(v.value),{class:"text",innerHTML:g.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(D(),be(Bt(v.value),{key:1,class:"text",innerHTML:g.item.text},null,8,["innerHTML"])),g.item.collapsed!=null&&g.item.items&&g.item.items.length?(D(),K("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:h,onKeydown:$d(h,["enter"]),tabindex:"0"},k[0]||(k[0]=[X("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):fe("",!0)],16,sh)):fe("",!0),g.item.items&&g.item.items.length?(D(),K("div",uh,[g.depth<5?(D(!0),K(ae,{key:0},kt(g.item.items,C=>(D(),be(S,{key:C.text,item:C,depth:g.depth+1},null,8,["item","depth"]))),128)):fe("",!0)])):fe("",!0)]),_:1},8,["class"])}}}),dh=Se(ch,[["__scopeId","data-v-b3fd67f8"]]),vh=ge({__name:"VPSidebarGroup",props:{items:{}},setup(e){const n=H(!0);let t=null;return Ke(()=>{t=setTimeout(()=>{t=null,n.value=!1},300)}),it(()=>{t!=null&&(clearTimeout(t),t=null)}),(a,l)=>(D(!0),K(ae,null,kt(a.items,o=>(D(),K("div",{key:o.text,class:Ne(["group",{"no-transition":n.value}])},[s(dh,{item:o,depth:0},null,8,["item"])],2))),128))}}),fh=Se(vh,[["__scopeId","data-v-c40bc020"]]),mh={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},gh=ge({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:n,hasSidebar:t}=qt(),a=e,l=H(null),o=ts(tl?document.body:null);Q([a,l],()=>{var r;a.open?(o.value=!0,(r=l.value)==null||r.focus()):o.value=!1},{immediate:!0,flush:"post"});const i=H(0);return Q(n,()=>{i.value+=1},{deep:!0}),(r,u)=>L(t)?(D(),K("aside",{key:0,class:Ne(["VPSidebar",{open:r.open}]),ref_key:"navEl",ref:l,onClick:u[0]||(u[0]=ql(()=>{},["stop"]))},[u[2]||(u[2]=X("div",{class:"curtain"},null,-1)),X("nav",mh,[u[1]||(u[1]=X("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),U(r.$slots,"sidebar-nav-before",{},void 0,!0),(D(),be(fh,{items:L(n),key:i.value},null,8,["items"])),U(r.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):fe("",!0)}}),hh=Se(gh,[["__scopeId","data-v-319d5ca6"]]),yh=ge({__name:"VPSkipLink",setup(e){const{theme:n}=_e(),t=el(),a=H();Q(()=>t.path,()=>a.value.focus());function l({target:o}){const i=document.getElementById(decodeURIComponent(o.hash).slice(1));if(i){const r=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",r)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",r),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(D(),K(ae,null,[X("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),X("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:l},Oe(L(n).skipToContentLabel||"Skip to content"),1)],64))}}),bh=Se(yh,[["__scopeId","data-v-0b0ada53"]]),kh=ge({__name:"Layout",setup(e){const{isOpen:n,open:t,close:a}=qt(),l=el();Q(()=>l.path,a),av(n,a);const{frontmatter:o}=_e(),i=Td(),r=y(()=>!!i["home-hero-image"]);return Re("hero-image-slot-exists",r),(u,c)=>{const d=nn("Content");return L(o).layout!==!1?(D(),K("div",{key:0,class:Ne(["Layout",L(o).pageClass])},[U(u.$slots,"layout-top",{},void 0,!0),s(bh),s(jd,{class:"backdrop",show:L(n),onClick:L(a)},null,8,["show","onClick"]),s(rh,null,{"nav-bar-title-before":J(()=>[U(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":J(()=>[U(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":J(()=>[U(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":J(()=>[U(u.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":J(()=>[U(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":J(()=>[U(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),s(em,{open:L(n),onOpenMenu:L(t)},null,8,["open","onOpenMenu"]),s(hh,{open:L(n)},{"sidebar-nav-before":J(()=>[U(u.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":J(()=>[U(u.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),s(Of,null,{"page-top":J(()=>[U(u.$slots,"page-top",{},void 0,!0)]),"page-bottom":J(()=>[U(u.$slots,"page-bottom",{},void 0,!0)]),"not-found":J(()=>[U(u.$slots,"not-found",{},void 0,!0)]),"home-hero-before":J(()=>[U(u.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":J(()=>[U(u.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":J(()=>[U(u.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":J(()=>[U(u.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":J(()=>[U(u.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":J(()=>[U(u.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":J(()=>[U(u.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":J(()=>[U(u.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":J(()=>[U(u.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":J(()=>[U(u.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":J(()=>[U(u.$slots,"doc-before",{},void 0,!0)]),"doc-after":J(()=>[U(u.$slots,"doc-after",{},void 0,!0)]),"doc-top":J(()=>[U(u.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":J(()=>[U(u.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":J(()=>[U(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":J(()=>[U(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":J(()=>[U(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":J(()=>[U(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":J(()=>[U(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":J(()=>[U(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),s(Wf),U(u.$slots,"layout-bottom",{},void 0,!0)],2)):(D(),be(d,{key:1}))}}}),Sh=Se(kh,[["__scopeId","data-v-5d98c3a5"]]),wh={Layout:Sh,enhanceApp:({app:e})=>{e.component("Badge",Hd)}};function yt(e,n){let t;function a(){t=Fo(),t.run(()=>n.length?n(()=>{t==null||t.stop(),a()}):n())}Q(e,l=>{l&&!t?a():l||(t==null||t.stop(),t=void 0)},{immediate:!0}),mt(()=>{t==null||t.stop()})}const $e=typeof window<"u",Yo=$e&&"IntersectionObserver"in window,Vh=$e&&("ontouchstart"in window||window.navigator.maxTouchPoints>0),Gi=$e&&"EyeDropper"in window;function Yi(e,n,t){Ch(e,n),n.set(e,t)}function Ch(e,n){if(n.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function ph(e,n,t){return e.set(ds(e,n),t),t}function cn(e,n){return e.get(ds(e,n))}function ds(e,n,t){if(typeof e=="function"?e===n:e.has(n))return arguments.length<3?n:t;throw new TypeError("Private element is not present on this object")}function vs(e,n,t){const a=n.length-1;if(a<0)return e===void 0?t:e;for(let l=0;lHt(e[a],n[a]))}function kn(e,n,t){return e==null||!n||typeof n!="string"?t:e[n]!==void 0?e[n]:(n=n.replace(/\[(\w+)\]/g,".$1"),n=n.replace(/^\./,""),vs(e,n.split("."),t))}function tt(e,n,t){if(n===!0)return e===void 0?t:e;if(n==null||typeof n=="boolean")return t;if(e!==Object(e)){if(typeof n!="function")return t;const l=n(e,t);return typeof l>"u"?t:l}if(typeof n=="string")return kn(e,n,t);if(Array.isArray(n))return vs(e,n,t);if(typeof n!="function")return t;const a=n(e,t);return typeof a>"u"?t:a}function Ot(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return Array.from({length:e},(t,a)=>n+a)}function ne(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"px";if(!(e==null||e===""))return isNaN(+e)?String(e):isFinite(+e)?`${Number(e)}${n}`:void 0}function Uo(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ui(e){let n;return e!==null&&typeof e=="object"&&((n=Object.getPrototypeOf(e))===Object.prototype||n===null)}function Ko(e){if(e&&"$el"in e){const n=e.$el;return(n==null?void 0:n.nodeType)===Node.TEXT_NODE?n.nextElementSibling:n}return e}const Ki=Object.freeze({enter:13,tab:9,delete:46,esc:27,space:32,up:38,down:40,left:37,right:39,end:35,home:36,del:46,backspace:8,insert:45,pageup:33,pagedown:34,shift:16}),Ql=Object.freeze({enter:"Enter",tab:"Tab",delete:"Delete",esc:"Escape",space:"Space",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",end:"End",home:"Home",del:"Delete",backspace:"Backspace",insert:"Insert",pageup:"PageUp",pagedown:"PageDown",shift:"Shift"});function fs(e){return Object.keys(e)}function vn(e,n){return n.every(t=>e.hasOwnProperty(t))}function qo(e,n){const t={},a=new Set(Object.keys(e));for(const l of n)a.has(l)&&(t[l]=e[l]);return t}function eo(e,n,t){const a=Object.create(null),l=Object.create(null);for(const o in e)n.some(i=>i instanceof RegExp?i.test(o):i===o)?a[o]=e[o]:l[o]=e[o];return[a,l]}function Je(e,n){const t={...e};return n.forEach(a=>delete t[a]),t}function ll(e,n){const t={};return n.forEach(a=>t[a]=e[a]),t}const ms=/^on[^a-z]/,ol=e=>ms.test(e),xh=["onAfterscriptexecute","onAnimationcancel","onAnimationend","onAnimationiteration","onAnimationstart","onAuxclick","onBeforeinput","onBeforescriptexecute","onChange","onClick","onCompositionend","onCompositionstart","onCompositionupdate","onContextmenu","onCopy","onCut","onDblclick","onFocusin","onFocusout","onFullscreenchange","onFullscreenerror","onGesturechange","onGestureend","onGesturestart","onGotpointercapture","onInput","onKeydown","onKeypress","onKeyup","onLostpointercapture","onMousedown","onMousemove","onMouseout","onMouseover","onMouseup","onMousewheel","onPaste","onPointercancel","onPointerdown","onPointerenter","onPointerleave","onPointermove","onPointerout","onPointerover","onPointerup","onReset","onSelect","onSubmit","onTouchcancel","onTouchend","onTouchmove","onTouchstart","onTransitioncancel","onTransitionend","onTransitionrun","onTransitionstart","onWheel"],_h=["ArrowUp","ArrowDown","ArrowRight","ArrowLeft","Enter","Escape","Tab"," "];function Ph(e){return e.isComposing&&_h.includes(e.key)}function ln(e){const[n,t]=eo(e,[ms]),a=Je(n,xh),[l,o]=eo(t,["class","style","id",/^data-/]);return Object.assign(l,n),Object.assign(o,a),[l,o]}function We(e){return e==null?[]:Array.isArray(e)?e:[e]}function Ih(e,n){let t=0;const a=function(){for(var l=arguments.length,o=new Array(l),i=0;ie(...o),L(n))};return a.clear=()=>{clearTimeout(t)},a.immediate=e,a}function Xe(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;return Math.max(n,Math.min(t,e))}function qi(e){const n=e.toString().trim();return n.includes(".")?n.length-n.indexOf(".")-1:0}function Xi(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"0";return e+t.repeat(Math.max(0,n-e.length))}function Zi(e,n){return(arguments.length>2&&arguments[2]!==void 0?arguments[2]:"0").repeat(Math.max(0,n-e.length))+e}function $h(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;const t=[];let a=0;for(;a1&&arguments[1]!==void 0?arguments[1]:1e3;if(e=n&&a0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2?arguments[2]:void 0;const a={};for(const l in e)a[l]=e[l];for(const l in n){const o=e[l],i=n[l];if(Ui(o)&&Ui(i)){a[l]=vt(o,i,t);continue}if(t&&Array.isArray(o)&&Array.isArray(i)){a[l]=t(o,i);continue}a[l]=i}return a}function gs(e){return e.map(n=>n.type===ae?gs(n.children):n).flat()}function mn(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";if(mn.cache.has(e))return mn.cache.get(e);const n=e.replace(/[^a-z]/gi,"-").replace(/\B([A-Z])/g,"-$1").toLowerCase();return mn.cache.set(e,n),n}mn.cache=new Map;function zn(e,n){if(!n||typeof n!="object")return[];if(Array.isArray(n))return n.map(t=>zn(e,t)).flat(1);if(n.suspense)return zn(e,n.ssContent);if(Array.isArray(n.children))return n.children.map(t=>zn(e,t)).flat(1);if(n.component){if(Object.getOwnPropertySymbols(n.component.provides).includes(e))return[n.component];if(n.component.subTree)return zn(e,n.component.subTree).flat(1)}return[]}var Ba=new WeakMap,On=new WeakMap;class Th{constructor(n){Yi(this,Ba,[]),Yi(this,On,0),this.size=n}push(n){cn(Ba,this)[cn(On,this)]=n,ph(On,this,(cn(On,this)+1)%this.size)}values(){return cn(Ba,this).slice(cn(On,this)).concat(cn(Ba,this).slice(0,cn(On,this)))}}function Ah(e){return"touches"in e?{clientX:e.touches[0].clientX,clientY:e.touches[0].clientY}:{clientX:e.clientX,clientY:e.clientY}}function Xo(e){const n=St({}),t=y(e);return He(()=>{for(const a in t.value)n[a]=t.value[a]},{flush:"sync"}),Pn(n)}function Wa(e,n){return e.includes(n)}function hs(e){return e[2].toLowerCase()+e.slice(3)}const ot=()=>[Function,Array];function Qi(e,n){return n="on"+Xn(n),!!(e[n]||e[`${n}Once`]||e[`${n}Capture`]||e[`${n}OnceCapture`]||e[`${n}CaptureOnce`])}function Zo(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a1&&arguments[1]!==void 0?arguments[1]:!0;const t=["button","[href]",'input:not([type="hidden"])',"select","textarea","[tabindex]"].map(a=>`${a}${n?':not([tabindex="-1"])':""}:not([disabled])`).join(", ");return[...e.querySelectorAll(t)]}function ys(e,n,t){let a,l=e.indexOf(document.activeElement);const o=n==="next"?1:-1;do l+=o,a=e[l];while((!a||a.offsetParent==null||!((t==null?void 0:t(a))??!0))&&l=0);return a}function gn(e,n){var a,l,o,i;const t=oa(e);if(!n)(e===document.activeElement||!e.contains(document.activeElement))&&((a=t[0])==null||a.focus());else if(n==="first")(l=t[0])==null||l.focus();else if(n==="last")(o=t.at(-1))==null||o.focus();else if(typeof n=="number")(i=t[n])==null||i.focus();else{const r=ys(t,n);r?r.focus():gn(e,n==="next"?"first":"last")}}function Da(e){return e==null||typeof e=="string"&&e.trim()===""}function bs(){}function Gn(e,n){if(!($e&&typeof CSS<"u"&&typeof CSS.supports<"u"&&CSS.supports(`selector(${n})`)))return null;try{return!!e&&e.matches(n)}catch{return null}}function il(e){return e.some(n=>Ad(n)?n.type===Bd?!1:n.type!==ae||il(n.children):!0)?e:null}function Bh(e,n){if(!$e||e===0)return n(),()=>{};const t=window.setTimeout(n,e);return()=>window.clearTimeout(t)}function Dh(e,n){const t=e.clientX,a=e.clientY,l=n.getBoundingClientRect(),o=l.left,i=l.top,r=l.right,u=l.bottom;return t>=o&&t<=r&&a>=i&&a<=u}function ja(){const e=ee(),n=t=>{e.value=t};return Object.defineProperty(n,"value",{enumerable:!0,get:()=>e.value,set:t=>e.value=t}),Object.defineProperty(n,"el",{enumerable:!0,get:()=>Ko(e.value)}),n}function Ga(e){const n=e.key.length===1,t=!e.ctrlKey&&!e.metaKey&&!e.altKey;return n&&t}const ks=["top","bottom"],Lh=["start","end","left","right"];function to(e,n){let[t,a]=e.split(" ");return a||(a=Wa(ks,t)?"start":Wa(Lh,t)?"top":"center"),{side:no(t,n),align:no(a,n)}}function no(e,n){return e==="start"?n?"right":"left":e==="end"?n?"left":"right":e}function Fl(e){return{side:{center:"center",top:"bottom",bottom:"top",left:"right",right:"left"}[e.side],align:e.align}}function Ol(e){return{side:e.side,align:{center:"center",top:"bottom",bottom:"top",left:"right",right:"left"}[e.align]}}function er(e){return{side:e.align,align:e.side}}function tr(e){return Wa(ks,e.side)?"y":"x"}class hn{constructor(n){let{x:t,y:a,width:l,height:o}=n;this.x=t,this.y=a,this.width=l,this.height=o}get top(){return this.y}get bottom(){return this.y+this.height}get left(){return this.x}get right(){return this.x+this.width}}function nr(e,n){return{x:{before:Math.max(0,n.left-e.left),after:Math.max(0,e.right-n.right)},y:{before:Math.max(0,n.top-e.top),after:Math.max(0,e.bottom-n.bottom)}}}function Ss(e){return Array.isArray(e)?new hn({x:e[0],y:e[1],width:0,height:0}):e.getBoundingClientRect()}function Jo(e){const n=e.getBoundingClientRect(),t=getComputedStyle(e),a=t.transform;if(a){let l,o,i,r,u;if(a.startsWith("matrix3d("))l=a.slice(9,-1).split(/, /),o=+l[0],i=+l[5],r=+l[12],u=+l[13];else if(a.startsWith("matrix("))l=a.slice(7,-1).split(/, /),o=+l[0],i=+l[3],r=+l[4],u=+l[5];else return new hn(n);const c=t.transformOrigin,d=n.x-r-(1-o)*parseFloat(c),v=n.y-u-(1-i)*parseFloat(c.slice(c.indexOf(" ")+1)),f=o?n.width/o:e.offsetWidth+1,m=i?n.height/i:e.offsetHeight+1;return new hn({x:d,y:v,width:f,height:m})}else return new hn(n)}function fn(e,n,t){if(typeof e.animate>"u")return{finished:Promise.resolve()};let a;try{a=e.animate(n,t)}catch{return{finished:Promise.resolve()}}return typeof a.finished>"u"&&(a.finished=new Promise(l=>{a.onfinish=()=>{l(a)}})),a}const Na=new WeakMap;function Mh(e,n){Object.keys(n).forEach(t=>{if(ol(t)){const a=hs(t),l=Na.get(e);if(n[t]==null)l==null||l.forEach(o=>{const[i,r]=o;i===a&&(e.removeEventListener(a,r),l.delete(o))});else if(!l||![...l].some(o=>o[0]===a&&o[1]===n[t])){e.addEventListener(a,n[t]);const o=l||new Set;o.add([a,n[t]]),Na.has(e)||Na.set(e,o)}}else n[t]==null?e.removeAttribute(t):e.setAttribute(t,n[t])})}function Eh(e,n){Object.keys(n).forEach(t=>{if(ol(t)){const a=hs(t),l=Na.get(e);l==null||l.forEach(o=>{const[i,r]=o;i===a&&(e.removeEventListener(a,r),l.delete(o))})}else e.removeAttribute(t)})}const Nn=2.4,ar=.2126729,lr=.7151522,or=.072175,Fh=.55,Oh=.58,Nh=.57,Rh=.62,La=.03,ir=1.45,Hh=5e-4,zh=1.25,Wh=1.25,rr=.078,sr=12.82051282051282,Ma=.06,ur=.001;function cr(e,n){const t=(e.r/255)**Nn,a=(e.g/255)**Nn,l=(e.b/255)**Nn,o=(n.r/255)**Nn,i=(n.g/255)**Nn,r=(n.b/255)**Nn;let u=t*ar+a*lr+l*or,c=o*ar+i*lr+r*or;if(u<=La&&(u+=(La-u)**ir),c<=La&&(c+=(La-c)**ir),Math.abs(c-u)u){const v=(c**Fh-u**Oh)*zh;d=v-ur?0:v>-rr?v-v*sr*Ma:v+Ma}return d*100}function jh(e,n){n=Array.isArray(n)?n.slice(0,-1).map(t=>`'${t}'`).join(", ")+` or '${n.at(-1)}'`:`'${n}'`}const Ya=.20689655172413793,Gh=e=>e>Ya**3?Math.cbrt(e):e/(3*Ya**2)+4/29,Yh=e=>e>Ya?e**3:3*Ya**2*(e-4/29);function ws(e){const n=Gh,t=n(e[1]);return[116*t-16,500*(n(e[0]/.95047)-t),200*(t-n(e[2]/1.08883))]}function Vs(e){const n=Yh,t=(e[0]+16)/116;return[n(t+e[1]/500)*.95047,n(t),n(t-e[2]/200)*1.08883]}const Uh=[[3.2406,-1.5372,-.4986],[-.9689,1.8758,.0415],[.0557,-.204,1.057]],Kh=e=>e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055,qh=[[.4124,.3576,.1805],[.2126,.7152,.0722],[.0193,.1192,.9505]],Xh=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4;function Cs(e){const n=Array(3),t=Kh,a=Uh;for(let l=0;l<3;++l)n[l]=Math.round(Xe(t(a[l][0]*e[0]+a[l][1]*e[1]+a[l][2]*e[2]))*255);return{r:n[0],g:n[1],b:n[2]}}function Qo(e){let{r:n,g:t,b:a}=e;const l=[0,0,0],o=Xh,i=qh;n=o(n/255),t=o(t/255),a=o(a/255);for(let r=0;r<3;++r)l[r]=i[r][0]*n+i[r][1]*t+i[r][2]*a;return l}function ao(e){return!!e&&/^(#|var\(--|(rgb|hsl)a?\()/.test(e)}function Zh(e){return ao(e)&&!/^((rgb|hsl)a?\()?var\(--/.test(e)}const dr=/^(?(?:rgb|hsl)a?)\((?.+)\)/,Jh={rgb:(e,n,t,a)=>({r:e,g:n,b:t,a}),rgba:(e,n,t,a)=>({r:e,g:n,b:t,a}),hsl:(e,n,t,a)=>vr({h:e,s:n,l:t,a}),hsla:(e,n,t,a)=>vr({h:e,s:n,l:t,a}),hsv:(e,n,t,a)=>Gt({h:e,s:n,v:t,a}),hsva:(e,n,t,a)=>Gt({h:e,s:n,v:t,a})};function Pt(e){if(typeof e=="number")return{r:(e&16711680)>>16,g:(e&65280)>>8,b:e&255};if(typeof e=="string"&&dr.test(e)){const{groups:n}=e.match(dr),{fn:t,values:a}=n,l=a.split(/,\s*/).map(o=>o.endsWith("%")&&["hsl","hsla","hsv","hsva"].includes(t)?parseFloat(o)/100:parseFloat(o));return Jh[t](...l)}else if(typeof e=="string"){let n=e.startsWith("#")?e.slice(1):e;return[3,4].includes(n.length)?n=n.split("").map(t=>t+t).join(""):[6,8].includes(n.length),Is(n)}else if(typeof e=="object"){if(vn(e,["r","g","b"]))return e;if(vn(e,["h","s","l"]))return Gt(ei(e));if(vn(e,["h","s","v"]))return Gt(e)}throw new TypeError(`Invalid color: ${e==null?e:String(e)||e.constructor.name} +Expected #hex, #hexa, rgb(), rgba(), hsl(), hsla(), object or number`)}function Gt(e){const{h:n,s:t,v:a,a:l}=e,o=r=>{const u=(r+n/60)%6;return a-a*t*Math.max(Math.min(u,4-u,1),0)},i=[o(5),o(3),o(1)].map(r=>Math.round(r*255));return{r:i[0],g:i[1],b:i[2],a:l}}function vr(e){return Gt(ei(e))}function rl(e){if(!e)return{h:0,s:1,v:1,a:1};const n=e.r/255,t=e.g/255,a=e.b/255,l=Math.max(n,t,a),o=Math.min(n,t,a);let i=0;l!==o&&(l===n?i=60*(0+(t-a)/(l-o)):l===t?i=60*(2+(a-n)/(l-o)):l===a&&(i=60*(4+(n-t)/(l-o)))),i<0&&(i=i+360);const r=l===0?0:(l-o)/l,u=[i,r,l];return{h:u[0],s:u[1],v:u[2],a:e.a}}function ps(e){const{h:n,s:t,v:a,a:l}=e,o=a-a*t/2,i=o===1||o===0?0:(a-o)/Math.min(o,1-o);return{h:n,s:i,l:o,a:l}}function ei(e){const{h:n,s:t,l:a,a:l}=e,o=a+t*Math.min(a,1-a),i=o===0?0:2-2*a/o;return{h:n,s:i,v:o,a:l}}function xs(e){let{r:n,g:t,b:a,a:l}=e;return l===void 0?`rgb(${n}, ${t}, ${a})`:`rgba(${n}, ${t}, ${a}, ${l})`}function _s(e){return xs(Gt(e))}function Ea(e){const n=Math.round(e).toString(16);return("00".substr(0,2-n.length)+n).toUpperCase()}function Ps(e){let{r:n,g:t,b:a,a:l}=e;return`#${[Ea(n),Ea(t),Ea(a),l!==void 0?Ea(Math.round(l*255)):""].join("")}`}function Is(e){e=Qh(e);let[n,t,a,l]=$h(e,2).map(o=>parseInt(o,16));return l=l===void 0?l:l/255,{r:n,g:t,b:a,a:l}}function $s(e){const n=Is(e);return rl(n)}function Ts(e){return Ps(Gt(e))}function Qh(e){return e.startsWith("#")&&(e=e.slice(1)),e=e.replace(/([^0-9a-f])/gi,"F"),(e.length===3||e.length===4)&&(e=e.split("").map(n=>n+n).join("")),e.length!==6&&(e=Xi(Xi(e,6),8,"F")),e}function ey(e,n){const t=ws(Qo(e));return t[0]=t[0]+n*10,Cs(Vs(t))}function ty(e,n){const t=ws(Qo(e));return t[0]=t[0]-n*10,Cs(Vs(t))}function lo(e){const n=Pt(e);return Qo(n)[1]}function ny(e,n){const t=lo(e),a=lo(n),l=Math.max(t,a),o=Math.min(t,a);return(l+.05)/(o+.05)}function As(e){const n=Math.abs(cr(Pt(0),Pt(e)));return Math.abs(cr(Pt(16777215),Pt(e)))>Math.min(n,50)?"#fff":"#000"}function B(e,n){return t=>Object.keys(e).reduce((a,l)=>{const i=typeof e[l]=="object"&&e[l]!=null&&!Array.isArray(e[l])?e[l]:{type:e[l]};return t&&l in t?a[l]={...i,default:t[l]}:a[l]=i,n&&!a[l].source&&(a[l].source=n),a},{})}const ie=B({class:[String,Array,Object],style:{type:[String,Array,Object],default:null}},"component");function Ye(e,n){const t=Dd();if(!t)throw new Error(`[Vuetify] ${e} must be called from inside a setup function`);return t}function zt(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"composables";const n=Ye(e).type;return mn((n==null?void 0:n.aliasName)||(n==null?void 0:n.name))}let Bs=0,Ra=new WeakMap;function rt(){const e=Ye("getUid");if(Ra.has(e))return Ra.get(e);{const n=Bs++;return Ra.set(e,n),n}}rt.reset=()=>{Bs=0,Ra=new WeakMap};function ay(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ye("injectSelf");const{provides:t}=n;if(t&&e in t)return t[e]}const Yn=Symbol.for("vuetify:defaults");function ly(e){return H(e)}function ti(){const e=xe(Yn);if(!e)throw new Error("[Vuetify] Could not find defaults instance");return e}function Ge(e,n){const t=ti(),a=H(e),l=y(()=>{if(L(n==null?void 0:n.disabled))return t.value;const i=L(n==null?void 0:n.scoped),r=L(n==null?void 0:n.reset),u=L(n==null?void 0:n.root);if(a.value==null&&!(i||r||u))return t.value;let c=vt(a.value,{prev:t.value});if(i)return c;if(r||u){const d=Number(r||1/0);for(let v=0;v<=d&&!(!c||!("prev"in c));v++)c=c.prev;return c&&typeof u=="string"&&u in c&&(c=vt(vt(c,{prev:c}),c[u])),c}return c.prev?vt(c.prev,c):c});return Re(Yn,l),l}function oy(e,n){var t,a;return typeof((t=e.props)==null?void 0:t[n])<"u"||typeof((a=e.props)==null?void 0:a[mn(n)])<"u"}function iy(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ti();const a=Ye("useDefaults");if(n=n??a.type.name??a.type.__name,!n)throw new Error("[Vuetify] Could not determine component name");const l=y(()=>{var u;return(u=t.value)==null?void 0:u[e._as??n]}),o=new Proxy(e,{get(u,c){var v,f,m,b,h,g,k;const d=Reflect.get(u,c);return c==="class"||c==="style"?[(v=l.value)==null?void 0:v[c],d].filter(S=>S!=null):typeof c=="string"&&!oy(a.vnode,c)?((f=l.value)==null?void 0:f[c])!==void 0?(m=l.value)==null?void 0:m[c]:((h=(b=t.value)==null?void 0:b.global)==null?void 0:h[c])!==void 0?(k=(g=t.value)==null?void 0:g.global)==null?void 0:k[c]:d:d}}),i=ee();He(()=>{if(l.value){const u=Object.entries(l.value).filter(c=>{let[d]=c;return d.startsWith(d[0].toUpperCase())});i.value=u.length?Object.fromEntries(u):void 0}else i.value=void 0});function r(){const u=ay(Yn,a);Re(Yn,y(()=>i.value?vt((u==null?void 0:u.value)??{},i.value):u==null?void 0:u.value))}return{props:o,provideSubDefaults:r}}function pt(e){if(e._setup=e._setup??e.setup,!e.name)return e;if(e._setup){e.props=B(e.props??{},e.name)();const n=Object.keys(e.props).filter(t=>t!=="class"&&t!=="style");e.filterProps=function(a){return qo(a,n)},e.props._as=String,e.setup=function(a,l){const o=ti();if(!o.value)return e._setup(a,l);const{props:i,provideSubDefaults:r}=iy(a,a._as??e.name,o),u=e._setup(i,l);return r(),u}}return e}function R(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return n=>(e?pt:ge)(n)}function ry(e,n){return n.props=e,n}function Wt(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"div",t=arguments.length>2?arguments[2]:void 0;return R()({name:t??Xn(ns(e.replace(/__/g,"-"))),props:{tag:{type:String,default:n},...ie()},setup(a,l){let{slots:o}=l;return()=>{var i;return an(a.tag,{class:[e,a.class],style:a.style},(i=o.default)==null?void 0:i.call(o))}}})}function Ds(e){if(typeof e.getRootNode!="function"){for(;e.parentNode;)e=e.parentNode;return e!==document?null:document}const n=e.getRootNode();return n!==document&&n.getRootNode({composed:!0})!==document?null:n}const ia="cubic-bezier(0.4, 0, 0.2, 1)",sy="cubic-bezier(0.0, 0, 0.2, 1)",uy="cubic-bezier(0.4, 0, 1, 1)";function fr(e,n,t){return Object.keys(e).filter(a=>ol(a)&&a.endsWith(n)).reduce((a,l)=>(a[l.slice(0,-n.length)]=o=>e[l](o,t(o)),a),{})}function ni(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;for(;e;){if(n?cy(e):ai(e))return e;e=e.parentElement}return document.scrollingElement}function Ua(e,n){const t=[];if(n&&e&&!n.contains(e))return t;for(;e&&(ai(e)&&t.push(e),e!==n);)e=e.parentElement;return t}function ai(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;const n=window.getComputedStyle(e);return n.overflowY==="scroll"||n.overflowY==="auto"&&e.scrollHeight>e.clientHeight}function cy(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;const n=window.getComputedStyle(e);return["scroll","auto"].includes(n.overflowY)}function dy(e){for(;e;){if(window.getComputedStyle(e).position==="fixed")return!0;e=e.offsetParent}return!1}function W(e){const n=Ye("useRender");n.render=e}function de(e,n,t){let a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:v=>v,l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:v=>v;const o=Ye("useProxiedModel"),i=H(e[n]!==void 0?e[n]:t),r=mn(n),c=r!==n?y(()=>{var v,f,m,b;return e[n],!!(((v=o.vnode.props)!=null&&v.hasOwnProperty(n)||(f=o.vnode.props)!=null&&f.hasOwnProperty(r))&&((m=o.vnode.props)!=null&&m.hasOwnProperty(`onUpdate:${n}`)||(b=o.vnode.props)!=null&&b.hasOwnProperty(`onUpdate:${r}`)))}):y(()=>{var v,f;return e[n],!!((v=o.vnode.props)!=null&&v.hasOwnProperty(n)&&((f=o.vnode.props)!=null&&f.hasOwnProperty(`onUpdate:${n}`)))});yt(()=>!c.value,()=>{Q(()=>e[n],v=>{i.value=v})});const d=y({get(){const v=e[n];return a(c.value?v:i.value)},set(v){const f=l(v),m=Ze(c.value?e[n]:i.value);m===f||a(m)===v||(i.value=f,o==null||o.emit(`update:${n}`,f))}});return Object.defineProperty(d,"externalValue",{get:()=>c.value?e[n]:i.value}),d}const vy={badge:"Badge",open:"Open",close:"Close",dismiss:"Dismiss",confirmEdit:{ok:"OK",cancel:"Cancel"},dataIterator:{noResultsText:"No matching records found",loadingText:"Loading items..."},dataTable:{itemsPerPageText:"Rows per page:",ariaLabel:{sortDescending:"Sorted descending.",sortAscending:"Sorted ascending.",sortNone:"Not sorted.",activateNone:"Activate to remove sorting.",activateDescending:"Activate to sort descending.",activateAscending:"Activate to sort ascending."},sortBy:"Sort by"},dataFooter:{itemsPerPageText:"Items per page:",itemsPerPageAll:"All",nextPage:"Next page",prevPage:"Previous page",firstPage:"First page",lastPage:"Last page",pageText:"{0}-{1} of {2}"},dateRangeInput:{divider:"to"},datePicker:{itemsSelected:"{0} selected",range:{title:"Select dates",header:"Enter dates"},title:"Select date",header:"Enter date",input:{placeholder:"Enter date"}},noDataText:"No data available",carousel:{prev:"Previous visual",next:"Next visual",ariaLabel:{delimiter:"Carousel slide {0} of {1}"}},calendar:{moreEvents:"{0} more",today:"Today"},input:{clear:"Clear {0}",prependAction:"{0} prepended action",appendAction:"{0} appended action",otp:"Please enter OTP character {0}"},fileInput:{counter:"{0} files",counterSize:"{0} files ({1} in total)"},timePicker:{am:"AM",pm:"PM",title:"Select Time"},pagination:{ariaLabel:{root:"Pagination Navigation",next:"Next page",previous:"Previous page",page:"Go to page {0}",currentPage:"Page {0}, Current page",first:"First page",last:"Last page"}},stepper:{next:"Next",prev:"Previous"},rating:{ariaLabel:{item:"Rating {0} of {1}"}},loading:"Loading...",infiniteScroll:{loadMore:"Load more",empty:"No more"}},mr="$vuetify.",gr=(e,n)=>e.replace(/\{(\d+)\}/g,(t,a)=>String(n[+a])),Ls=(e,n,t)=>function(a){for(var l=arguments.length,o=new Array(l>1?l-1:0),i=1;inew Intl.NumberFormat([e.value,n.value],a).format(t)}function Nl(e,n,t){const a=de(e,n,e[n]??t.value);return a.value=e[n]??t.value,Q(t,l=>{e[n]==null&&(a.value=t.value)}),a}function Es(e){return n=>{const t=Nl(n,"locale",e.current),a=Nl(n,"fallback",e.fallback),l=Nl(n,"messages",e.messages);return{name:"vuetify",current:t,fallback:a,messages:l,t:Ls(t,a,l),n:Ms(t,a),provide:Es({current:t,fallback:a,messages:l})}}}function fy(e){const n=ee((e==null?void 0:e.locale)??"en"),t=ee((e==null?void 0:e.fallback)??"en"),a=H({en:vy,...e==null?void 0:e.messages});return{name:"vuetify",current:n,fallback:t,messages:a,t:Ls(n,t,a),n:Ms(n,t),provide:Es({current:n,fallback:t,messages:a})}}const Un=Symbol.for("vuetify:locale");function my(e){return e.name!=null}function gy(e){const n=e!=null&&e.adapter&&my(e==null?void 0:e.adapter)?e==null?void 0:e.adapter:fy(e),t=by(n,e);return{...n,...t}}function qe(){const e=xe(Un);if(!e)throw new Error("[Vuetify] Could not find injected locale instance");return e}function hy(e){const n=xe(Un);if(!n)throw new Error("[Vuetify] Could not find injected locale instance");const t=n.provide(e),a=ky(t,n.rtl,e),l={...t,...a};return Re(Un,l),l}function yy(){return{af:!1,ar:!0,bg:!1,ca:!1,ckb:!1,cs:!1,de:!1,el:!1,en:!1,es:!1,et:!1,fa:!0,fi:!1,fr:!1,hr:!1,hu:!1,he:!0,id:!1,it:!1,ja:!1,km:!1,ko:!1,lv:!1,lt:!1,nl:!1,no:!1,pl:!1,pt:!1,ro:!1,ru:!1,sk:!1,sl:!1,srCyrl:!1,srLatn:!1,sv:!1,th:!1,tr:!1,az:!1,uk:!1,vi:!1,zhHans:!1,zhHant:!1}}function by(e,n){const t=H((n==null?void 0:n.rtl)??yy()),a=y(()=>t.value[e.current.value]??!1);return{isRtl:a,rtl:t,rtlClasses:y(()=>`v-locale--is-${a.value?"rtl":"ltr"}`)}}function ky(e,n,t){const a=y(()=>t.rtl??n.value[e.current.value]??!1);return{isRtl:a,rtl:n,rtlClasses:y(()=>`v-locale--is-${a.value?"rtl":"ltr"}`)}}function nt(){const e=xe(Un);if(!e)throw new Error("[Vuetify] Could not find injected rtl instance");return{isRtl:e.isRtl,rtlClasses:e.rtlClasses}}const sl={"001":1,AD:1,AE:6,AF:6,AG:0,AI:1,AL:1,AM:1,AN:1,AR:1,AS:0,AT:1,AU:1,AX:1,AZ:1,BA:1,BD:0,BE:1,BG:1,BH:6,BM:1,BN:1,BR:0,BS:0,BT:0,BW:0,BY:1,BZ:0,CA:0,CH:1,CL:1,CM:1,CN:1,CO:0,CR:1,CY:1,CZ:1,DE:1,DJ:6,DK:1,DM:0,DO:0,DZ:6,EC:1,EE:1,EG:6,ES:1,ET:0,FI:1,FJ:1,FO:1,FR:1,GB:1,"GB-alt-variant":0,GE:1,GF:1,GP:1,GR:1,GT:0,GU:0,HK:0,HN:0,HR:1,HU:1,ID:0,IE:1,IL:0,IN:0,IQ:6,IR:6,IS:1,IT:1,JM:0,JO:6,JP:0,KE:0,KG:1,KH:0,KR:0,KW:6,KZ:1,LA:0,LB:1,LI:1,LK:1,LT:1,LU:1,LV:1,LY:6,MC:1,MD:1,ME:1,MH:0,MK:1,MM:0,MN:1,MO:0,MQ:1,MT:0,MV:5,MX:0,MY:1,MZ:0,NI:0,NL:1,NO:1,NP:0,NZ:1,OM:6,PA:0,PE:0,PH:0,PK:0,PL:1,PR:0,PT:0,PY:0,QA:6,RE:1,RO:1,RS:1,RU:1,SA:0,SD:6,SE:1,SG:0,SI:1,SK:1,SM:1,SV:0,SY:6,TH:0,TJ:1,TM:1,TR:1,TT:0,TW:0,UA:1,UM:0,US:0,UY:1,UZ:1,VA:1,VE:0,VI:0,VN:1,WS:0,XK:1,YE:0,ZA:0,ZW:0};function Sy(e,n,t){const a=[];let l=[];const o=Fs(e),i=Os(e),r=t??sl[n.slice(-2).toUpperCase()]??0,u=(o.getDay()-r+7)%7,c=(i.getDay()-r+7)%7;for(let d=0;d0&&a.push(l),a}function wy(e,n,t){const a=t??sl[n.slice(-2).toUpperCase()]??0,l=new Date(e);for(;l.getDay()!==a;)l.setDate(l.getDate()-1);return l}function Vy(e,n){const t=new Date(e),a=((sl[n.slice(-2).toUpperCase()]??0)+6)%7;for(;t.getDay()!==a;)t.setDate(t.getDate()+1);return t}function Fs(e){return new Date(e.getFullYear(),e.getMonth(),1)}function Os(e){return new Date(e.getFullYear(),e.getMonth()+1,0)}function Cy(e){const n=e.split("-").map(Number);return new Date(n[0],n[1]-1,n[2])}const py=/^([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))$/;function Ns(e){if(e==null)return new Date;if(e instanceof Date)return e;if(typeof e=="string"){let n;if(py.test(e))return Cy(e);if(n=Date.parse(e),!isNaN(n))return new Date(n)}return null}const hr=new Date(2e3,0,2);function xy(e,n){const t=n??sl[e.slice(-2).toUpperCase()]??0;return Ot(7).map(a=>{const l=new Date(hr);return l.setDate(hr.getDate()+t+a),new Intl.DateTimeFormat(e,{weekday:"narrow"}).format(l)})}function _y(e,n,t,a){const l=Ns(e)??new Date,o=a==null?void 0:a[n];if(typeof o=="function")return o(l,n,t);let i={};switch(n){case"fullDate":i={year:"numeric",month:"long",day:"numeric"};break;case"fullDateWithWeekday":i={weekday:"long",year:"numeric",month:"long",day:"numeric"};break;case"normalDate":const r=l.getDate(),u=new Intl.DateTimeFormat(t,{month:"long"}).format(l);return`${r} ${u}`;case"normalDateWithWeekday":i={weekday:"short",day:"numeric",month:"short"};break;case"shortDate":i={month:"short",day:"numeric"};break;case"year":i={year:"numeric"};break;case"month":i={month:"long"};break;case"monthShort":i={month:"short"};break;case"monthAndYear":i={month:"long",year:"numeric"};break;case"monthAndDate":i={month:"long",day:"numeric"};break;case"weekday":i={weekday:"long"};break;case"weekdayShort":i={weekday:"short"};break;case"dayOfMonth":return new Intl.NumberFormat(t).format(l.getDate());case"hours12h":i={hour:"numeric",hour12:!0};break;case"hours24h":i={hour:"numeric",hour12:!1};break;case"minutes":i={minute:"numeric"};break;case"seconds":i={second:"numeric"};break;case"fullTime":i={hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"fullTime12h":i={hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"fullTime24h":i={hour:"numeric",minute:"numeric",second:"numeric",hour12:!1};break;case"fullDateTime":i={year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"fullDateTime12h":i={year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"fullDateTime24h":i={year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1};break;case"keyboardDate":i={year:"numeric",month:"2-digit",day:"2-digit"};break;case"keyboardDateTime":i={year:"numeric",month:"2-digit",day:"2-digit",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1};break;case"keyboardDateTime12h":i={year:"numeric",month:"2-digit",day:"2-digit",hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"keyboardDateTime24h":i={year:"numeric",month:"2-digit",day:"2-digit",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1};break;default:i=o??{timeZone:"UTC",timeZoneName:"short"}}return new Intl.DateTimeFormat(t,i).format(l)}function Py(e,n){const t=e.toJsDate(n),a=t.getFullYear(),l=Zi(String(t.getMonth()+1),2,"0"),o=Zi(String(t.getDate()),2,"0");return`${a}-${l}-${o}`}function Iy(e){const[n,t,a]=e.split("-").map(Number);return new Date(n,t-1,a)}function $y(e,n){const t=new Date(e);return t.setMinutes(t.getMinutes()+n),t}function Ty(e,n){const t=new Date(e);return t.setHours(t.getHours()+n),t}function Ay(e,n){const t=new Date(e);return t.setDate(t.getDate()+n),t}function By(e,n){const t=new Date(e);return t.setDate(t.getDate()+n*7),t}function Dy(e,n){const t=new Date(e);return t.setDate(1),t.setMonth(t.getMonth()+n),t}function Ly(e){return e.getFullYear()}function My(e){return e.getMonth()}function Ey(e){return e.getDate()}function Fy(e){return new Date(e.getFullYear(),e.getMonth()+1,1)}function Oy(e){return new Date(e.getFullYear(),e.getMonth()-1,1)}function Ny(e){return e.getHours()}function Ry(e){return e.getMinutes()}function Hy(e){return new Date(e.getFullYear(),0,1)}function zy(e){return new Date(e.getFullYear(),11,31)}function Wy(e,n){return Ka(e,n[0])&&Yy(e,n[1])}function jy(e){const n=new Date(e);return n instanceof Date&&!isNaN(n.getTime())}function Ka(e,n){return e.getTime()>n.getTime()}function Gy(e,n){return Ka(oo(e),oo(n))}function Yy(e,n){return e.getTime(){t.locale=e.locale[a]??a??t.locale}),t}function ba(){const e=xe(Rs);if(!e)throw new Error("[Vuetify] Could not find injected date options");const n=qe();return Hs(e,n)}function ob(e,n){const t=e.toJsDate(n);let a=t.getFullYear(),l=new Date(a,0,1);if(t=r&&(a=a+1,l=r)}const o=Math.abs(t.getTime()-l.getTime()),i=Math.ceil(o/(1e3*60*60*24));return Math.floor(i/7)+1}const ul=["sm","md","lg","xl","xxl"],io=Symbol.for("vuetify:display"),kr={mobileBreakpoint:"lg",thresholds:{xs:0,sm:600,md:960,lg:1280,xl:1920,xxl:2560}},ib=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:kr;return vt(kr,e)};function Sr(e){return $e&&!e?window.innerWidth:typeof e=="object"&&e.clientWidth||0}function wr(e){return $e&&!e?window.innerHeight:typeof e=="object"&&e.clientHeight||0}function Vr(e){const n=$e&&!e?window.navigator.userAgent:"ssr";function t(b){return!!n.match(b)}const a=t(/android/i),l=t(/iphone|ipad|ipod/i),o=t(/cordova/i),i=t(/electron/i),r=t(/chrome/i),u=t(/edge/i),c=t(/firefox/i),d=t(/opera/i),v=t(/win/i),f=t(/mac/i),m=t(/linux/i);return{android:a,ios:l,cordova:o,electron:i,chrome:r,edge:u,firefox:c,opera:d,win:v,mac:f,linux:m,touch:Vh,ssr:n==="ssr"}}function rb(e,n){const{thresholds:t,mobileBreakpoint:a}=ib(e),l=ee(wr(n)),o=ee(Vr(n)),i=St({}),r=ee(Sr(n));function u(){l.value=wr(),r.value=Sr()}function c(){u(),o.value=Vr()}return He(()=>{const d=r.value=t.xxl,g=d?"xs":v?"sm":f?"md":m?"lg":b?"xl":"xxl",k=typeof a=="number"?a:t[a],S=r.value0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();const t=xe(io);if(!t)throw new Error("Could not find Vuetify display injection");const a=y(()=>{if(e.mobile!=null)return e.mobile;if(!e.mobileBreakpoint)return t.mobile.value;const o=typeof e.mobileBreakpoint=="number"?e.mobileBreakpoint:t.thresholds.value[e.mobileBreakpoint];return t.width.valuen?{[`${n}--mobile`]:a.value}:{});return{...t,displayClasses:l,mobile:a}}const zs=Symbol.for("vuetify:goto");function Ws(){return{container:void 0,duration:300,layout:!1,offset:0,easing:"easeInOutCubic",patterns:{linear:e=>e,easeInQuad:e=>e**2,easeOutQuad:e=>e*(2-e),easeInOutQuad:e=>e<.5?2*e**2:-1+(4-2*e)*e,easeInCubic:e=>e**3,easeOutCubic:e=>--e**3+1,easeInOutCubic:e=>e<.5?4*e**3:(e-1)*(2*e-2)*(2*e-2)+1,easeInQuart:e=>e**4,easeOutQuart:e=>1- --e**4,easeInOutQuart:e=>e<.5?8*e**4:1-8*--e**4,easeInQuint:e=>e**5,easeOutQuint:e=>1+--e**5,easeInOutQuint:e=>e<.5?16*e**5:1+16*--e**5}}}function sb(e){return li(e)??(document.scrollingElement||document.body)}function li(e){return typeof e=="string"?document.querySelector(e):Ko(e)}function Rl(e,n,t){if(typeof e=="number")return n&&t?-e:e;let a=li(e),l=0;for(;a;)l+=n?a.offsetLeft:a.offsetTop,a=a.offsetParent;return l}function ub(e,n){return{rtl:n.isRtl,options:vt(Ws(),e)}}async function Cr(e,n,t,a){const l=t?"scrollLeft":"scrollTop",o=vt((a==null?void 0:a.options)??Ws(),n),i=a==null?void 0:a.rtl.value,r=(typeof e=="number"?e:li(e))??0,u=o.container==="parent"&&r instanceof HTMLElement?r.parentElement:sb(o.container),c=typeof o.easing=="function"?o.easing:o.patterns[o.easing];if(!c)throw new TypeError(`Easing function "${o.easing}" not found.`);let d;if(typeof r=="number")d=Rl(r,t,i);else if(d=Rl(r,t,i)-Rl(u,t,i),o.layout){const b=window.getComputedStyle(r).getPropertyValue("--v-layout-top");b&&(d-=parseInt(b,10))}d+=o.offset,d=db(u,d,!!i,!!t);const v=u[l]??0;if(d===v)return Promise.resolve(d);const f=performance.now();return new Promise(m=>requestAnimationFrame(function b(h){const k=(h-f)/o.duration,S=Math.floor(v+(d-v)*c(Xe(k,0,1)));if(u[l]=S,k>=1&&Math.abs(S-u[l])<10)return m(d);if(k>2)return m(u[l]);requestAnimationFrame(b)}))}function cb(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const n=xe(zs),{isRtl:t}=nt();if(!n)throw new Error("[Vuetify] Could not find injected goto instance");const a={...n,rtl:y(()=>n.rtl.value||t.value)};async function l(o,i){return Cr(o,vt(e,i),!1,a)}return l.horizontal=async(o,i)=>Cr(o,vt(e,i),!0,a),l}function db(e,n,t,a){const{scrollWidth:l,scrollHeight:o}=e,[i,r]=e===document.scrollingElement?[window.innerWidth,window.innerHeight]:[e.offsetWidth,e.offsetHeight];let u,c;return a?t?(u=-(l-i),c=0):(u=0,c=l-i):(u=0,c=o+-r),Math.max(Math.min(n,c),u)}const vb={collapse:"mdi-chevron-up",complete:"mdi-check",cancel:"mdi-close-circle",close:"mdi-close",delete:"mdi-close-circle",clear:"mdi-close-circle",success:"mdi-check-circle",info:"mdi-information",warning:"mdi-alert-circle",error:"mdi-close-circle",prev:"mdi-chevron-left",next:"mdi-chevron-right",checkboxOn:"mdi-checkbox-marked",checkboxOff:"mdi-checkbox-blank-outline",checkboxIndeterminate:"mdi-minus-box",delimiter:"mdi-circle",sortAsc:"mdi-arrow-up",sortDesc:"mdi-arrow-down",expand:"mdi-chevron-down",menu:"mdi-menu",subgroup:"mdi-menu-down",dropdown:"mdi-menu-down",radioOn:"mdi-radiobox-marked",radioOff:"mdi-radiobox-blank",edit:"mdi-pencil",ratingEmpty:"mdi-star-outline",ratingFull:"mdi-star",ratingHalf:"mdi-star-half-full",loading:"mdi-cached",first:"mdi-page-first",last:"mdi-page-last",unfold:"mdi-unfold-more-horizontal",file:"mdi-paperclip",plus:"mdi-plus",minus:"mdi-minus",calendar:"mdi-calendar",treeviewCollapse:"mdi-menu-down",treeviewExpand:"mdi-menu-right",eyeDropper:"mdi-eyedropper"},fb={component:e=>an(ii,{...e,class:"mdi"})},ve=[String,Function,Object,Array],ro=Symbol.for("vuetify:icons"),cl=B({icon:{type:ve},tag:{type:String,required:!0}},"icon"),so=R()({name:"VComponentIcon",props:cl(),setup(e,n){let{slots:t}=n;return()=>{const a=e.icon;return s(e.tag,null,{default:()=>{var l;return[e.icon?s(a,null,null):(l=t.default)==null?void 0:l.call(t)]}})}}}),oi=pt({name:"VSvgIcon",inheritAttrs:!1,props:cl(),setup(e,n){let{attrs:t}=n;return()=>s(e.tag,z(t,{style:null}),{default:()=>[s("svg",{class:"v-icon__svg",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",role:"img","aria-hidden":"true"},[Array.isArray(e.icon)?e.icon.map(a=>Array.isArray(a)?s("path",{d:a[0],"fill-opacity":a[1]},null):s("path",{d:a},null)):s("path",{d:e.icon},null)])]})}}),mb=pt({name:"VLigatureIcon",props:cl(),setup(e){return()=>s(e.tag,null,{default:()=>[e.icon]})}}),ii=pt({name:"VClassIcon",props:cl(),setup(e){return()=>s(e.tag,{class:e.icon},null)}});function gb(){return{svg:{component:oi},class:{component:ii}}}function hb(e){const n=gb(),t=(e==null?void 0:e.defaultSet)??"mdi";return t==="mdi"&&!n.mdi&&(n.mdi=fb),vt({defaultSet:t,sets:n,aliases:{...vb,vuetify:["M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z",["M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z",.6]],"vuetify-outline":"svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z","vuetify-play":["m6.376 13.184-4.11-7.192C1.505 4.66 2.467 3 4.003 3h8.532l-.953 1.576-.006.01-.396.677c-.429.732-.214 1.507.194 2.015.404.503 1.092.878 1.869.806a3.72 3.72 0 0 1 1.005.022c.276.053.434.143.523.237.138.146.38.635-.25 2.09-.893 1.63-1.553 1.722-1.847 1.677-.213-.033-.468-.158-.756-.406a4.95 4.95 0 0 1-.8-.927c-.39-.564-1.04-.84-1.66-.846-.625-.006-1.316.27-1.693.921l-.478.826-.911 1.506Z",["M9.093 11.552c.046-.079.144-.15.32-.148a.53.53 0 0 1 .43.207c.285.414.636.847 1.046 1.2.405.35.914.662 1.516.754 1.334.205 2.502-.698 3.48-2.495l.014-.028.013-.03c.687-1.574.774-2.852-.005-3.675-.37-.391-.861-.586-1.333-.676a5.243 5.243 0 0 0-1.447-.044c-.173.016-.393-.073-.54-.257-.145-.18-.127-.316-.082-.392l.393-.672L14.287 3h5.71c1.536 0 2.499 1.659 1.737 2.992l-7.997 13.996c-.768 1.344-2.706 1.344-3.473 0l-3.037-5.314 1.377-2.278.004-.006.004-.007.481-.831Z",.6]]}},e)}const yb=e=>{const n=xe(ro);if(!n)throw new Error("Missing Vuetify Icons provide!");return{iconData:y(()=>{var u;const a=L(e);if(!a)return{component:so};let l=a;if(typeof l=="string"&&(l=l.trim(),l.startsWith("$")&&(l=(u=n.aliases)==null?void 0:u[l.slice(1)])),Array.isArray(l))return{component:oi,icon:l};if(typeof l!="string")return{component:so,icon:l};const o=Object.keys(n.sets).find(c=>typeof l=="string"&&l.startsWith(`${c}:`)),i=o?l.slice(o.length+1):l;return{component:n.sets[o??n.defaultSet].component,icon:i}})}},ra=Symbol.for("vuetify:theme"),Pe=B({theme:String},"theme");function pr(){return{defaultTheme:"light",variations:{colors:[],lighten:0,darken:0},themes:{light:{dark:!1,colors:{background:"#FFFFFF",surface:"#FFFFFF","surface-bright":"#FFFFFF","surface-light":"#EEEEEE","surface-variant":"#424242","on-surface-variant":"#EEEEEE",primary:"#1867C0","primary-darken-1":"#1F5592",secondary:"#48A9A6","secondary-darken-1":"#018786",error:"#B00020",info:"#2196F3",success:"#4CAF50",warning:"#FB8C00"},variables:{"border-color":"#000000","border-opacity":.12,"high-emphasis-opacity":.87,"medium-emphasis-opacity":.6,"disabled-opacity":.38,"idle-opacity":.04,"hover-opacity":.04,"focus-opacity":.12,"selected-opacity":.08,"activated-opacity":.12,"pressed-opacity":.12,"dragged-opacity":.08,"theme-kbd":"#212529","theme-on-kbd":"#FFFFFF","theme-code":"#F5F5F5","theme-on-code":"#000000"}},dark:{dark:!0,colors:{background:"#121212",surface:"#212121","surface-bright":"#ccbfd6","surface-light":"#424242","surface-variant":"#a3a3a3","on-surface-variant":"#424242",primary:"#2196F3","primary-darken-1":"#277CC1",secondary:"#54B6B2","secondary-darken-1":"#48A9A6",error:"#CF6679",info:"#2196F3",success:"#4CAF50",warning:"#FB8C00"},variables:{"border-color":"#FFFFFF","border-opacity":.12,"high-emphasis-opacity":1,"medium-emphasis-opacity":.7,"disabled-opacity":.5,"idle-opacity":.1,"hover-opacity":.04,"focus-opacity":.12,"selected-opacity":.08,"activated-opacity":.12,"pressed-opacity":.16,"dragged-opacity":.08,"theme-kbd":"#212529","theme-on-kbd":"#FFFFFF","theme-code":"#343434","theme-on-code":"#CCCCCC"}}}}}function bb(){var a,l;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:pr();const n=pr();if(!e)return{...n,isDisabled:!0};const t={};for(const[o,i]of Object.entries(e.themes??{})){const r=i.dark||o==="dark"?(a=n.themes)==null?void 0:a.dark:(l=n.themes)==null?void 0:l.light;t[o]=vt(r,i)}return vt(n,{...e,themes:t})}function kb(e){const n=bb(e),t=H(n.defaultTheme),a=H(n.themes),l=y(()=>{const d={};for(const[v,f]of Object.entries(a.value)){const m=d[v]={...f,colors:{...f.colors}};if(n.variations)for(const b of n.variations.colors){const h=m.colors[b];if(h)for(const g of["lighten","darken"]){const k=g==="lighten"?ey:ty;for(const S of Ot(n.variations[g],1))m.colors[`${b}-${g}-${S}`]=Ps(k(Pt(h),S))}}for(const b of Object.keys(m.colors)){if(/^on-[a-z]/.test(b)||m.colors[`on-${b}`])continue;const h=`on-${b}`,g=Pt(m.colors[b]);m.colors[h]=As(g)}}return d}),o=y(()=>l.value[t.value]),i=y(()=>{var b;const d=[];(b=o.value)!=null&&b.dark&&dn(d,":root",["color-scheme: dark"]),dn(d,":root",xr(o.value));for(const[h,g]of Object.entries(l.value))dn(d,`.v-theme--${h}`,[`color-scheme: ${g.dark?"dark":"normal"}`,...xr(g)]);const v=[],f=[],m=new Set(Object.values(l.value).flatMap(h=>Object.keys(h.colors)));for(const h of m)/^on-[a-z]/.test(h)?dn(f,`.${h}`,[`color: rgb(var(--v-theme-${h})) !important`]):(dn(v,`.bg-${h}`,[`--v-theme-overlay-multiplier: var(--v-theme-${h}-overlay-multiplier)`,`background-color: rgb(var(--v-theme-${h})) !important`,`color: rgb(var(--v-theme-on-${h})) !important`]),dn(f,`.text-${h}`,[`color: rgb(var(--v-theme-${h})) !important`]),dn(f,`.border-${h}`,[`--v-border-color: var(--v-theme-${h})`]));return d.push(...v,...f),d.map((h,g)=>g===0?h:` ${h}`).join("")});function r(){return{style:[{children:i.value,id:"vuetify-theme-stylesheet",nonce:n.cspNonce||!1}]}}function u(d){if(n.isDisabled)return;const v=d._context.provides.usehead;if(v)if(v.push){const f=v.push(r);$e&&Q(i,()=>{f.patch(r)})}else $e?(v.addHeadObjs(y(r)),He(()=>v.updateDOM())):v.addHeadObjs(r());else{let m=function(){if(typeof document<"u"&&!f){const b=document.createElement("style");b.type="text/css",b.id="vuetify-theme-stylesheet",n.cspNonce&&b.setAttribute("nonce",n.cspNonce),f=b,document.head.appendChild(f)}f&&(f.innerHTML=i.value)},f=$e?document.getElementById("vuetify-theme-stylesheet"):null;$e?Q(i,m,{immediate:!0}):m()}}const c=y(()=>n.isDisabled?void 0:`v-theme--${t.value}`);return{install:u,isDisabled:n.isDisabled,name:t,themes:a,current:o,computedThemes:l,themeClasses:c,styles:i,global:{name:t,current:o}}}function De(e){Ye("provideTheme");const n=xe(ra,null);if(!n)throw new Error("Could not find Vuetify theme injection");const t=y(()=>e.theme??n.name.value),a=y(()=>n.themes.value[t.value]),l=y(()=>n.isDisabled?void 0:`v-theme--${t.value}`),o={...n,name:t,current:a,themeClasses:l};return Re(ra,o),o}function js(){Ye("useTheme");const e=xe(ra,null);if(!e)throw new Error("Could not find Vuetify theme injection");return e}function dn(e,n,t){e.push(`${n} { +`,...t.map(a=>` ${a}; +`),`} +`)}function xr(e){const n=e.dark?2:1,t=e.dark?1:2,a=[];for(const[l,o]of Object.entries(e.colors)){const i=Pt(o);a.push(`--v-theme-${l}: ${i.r},${i.g},${i.b}`),l.startsWith("on-")||a.push(`--v-theme-${l}-overlay-multiplier: ${lo(o)>.18?n:t}`)}for(const[l,o]of Object.entries(e.variables)){const i=typeof o=="string"&&o.startsWith("#")?Pt(o):void 0,r=i?`${i.r}, ${i.g}, ${i.b}`:void 0;a.push(`--v-${l}: ${r??o}`)}return a}function Lt(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"content";const t=ja(),a=H();if($e){const l=new ResizeObserver(o=>{e==null||e(o,l),o.length&&(n==="content"?a.value=o[0].contentRect:a.value=o[0].target.getBoundingClientRect())});it(()=>{l.disconnect()}),Q(()=>t.el,(o,i)=>{i&&(l.unobserve(i),a.value=void 0),o&&l.observe(o)},{flush:"post"})}return{resizeRef:t,contentRect:nl(a)}}const sa=Symbol.for("vuetify:layout"),Gs=Symbol.for("vuetify:layout-item"),_r=1e3,Ys=B({overlaps:{type:Array,default:()=>[]},fullHeight:Boolean},"layout"),$n=B({name:{type:String},order:{type:[Number,String],default:0},absolute:Boolean},"layout-item");function Us(){const e=xe(sa);if(!e)throw new Error("[Vuetify] Could not find injected layout");return{getLayoutItem:e.getLayoutItem,mainRect:e.mainRect,mainStyles:e.mainStyles}}function Tn(e){const n=xe(sa);if(!n)throw new Error("[Vuetify] Could not find injected layout");const t=e.id??`layout-item-${rt()}`,a=Ye("useLayoutItem");Re(Gs,{id:t});const l=ee(!1);as(()=>l.value=!0),Ld(()=>l.value=!1);const{layoutItemStyles:o,layoutItemScrimStyles:i}=n.register(a,{...e,active:y(()=>l.value?!1:e.active.value),id:t});return it(()=>n.unregister(t)),{layoutItemStyles:o,layoutRect:n.layoutRect,layoutItemScrimStyles:i}}const Sb=(e,n,t,a)=>{let l={top:0,left:0,right:0,bottom:0};const o=[{id:"",layer:{...l}}];for(const i of e){const r=n.get(i),u=t.get(i),c=a.get(i);if(!r||!u||!c)continue;const d={...l,[r.value]:parseInt(l[r.value],10)+(c.value?parseInt(u.value,10):0)};o.push({id:i,layer:d}),l=d}return o};function Ks(e){const n=xe(sa,null),t=y(()=>n?n.rootZIndex.value-100:_r),a=H([]),l=St(new Map),o=St(new Map),i=St(new Map),r=St(new Map),u=St(new Map),{resizeRef:c,contentRect:d}=Lt(),v=y(()=>{const _=new Map,T=e.overlaps??[];for(const V of T.filter(w=>w.includes(":"))){const[w,$]=V.split(":");if(!a.value.includes(w)||!a.value.includes($))continue;const p=l.get(w),I=l.get($),A=o.get(w),M=o.get($);!p||!I||!A||!M||(_.set($,{position:p.value,amount:parseInt(A.value,10)}),_.set(w,{position:I.value,amount:-parseInt(M.value,10)}))}return _}),f=y(()=>{const _=[...new Set([...i.values()].map(V=>V.value))].sort((V,w)=>V-w),T=[];for(const V of _){const w=a.value.filter($=>{var p;return((p=i.get($))==null?void 0:p.value)===V});T.push(...w)}return Sb(T,l,o,r)}),m=y(()=>!Array.from(u.values()).some(_=>_.value)),b=y(()=>f.value[f.value.length-1].layer),h=y(()=>({"--v-layout-left":ne(b.value.left),"--v-layout-right":ne(b.value.right),"--v-layout-top":ne(b.value.top),"--v-layout-bottom":ne(b.value.bottom),...m.value?void 0:{transition:"none"}})),g=y(()=>f.value.slice(1).map((_,T)=>{let{id:V}=_;const{layer:w}=f.value[T],$=o.get(V),p=l.get(V);return{id:V,...w,size:Number($.value),position:p.value}})),k=_=>g.value.find(T=>T.id===_),S=Ye("createLayout"),C=ee(!1);Ke(()=>{C.value=!0}),Re(sa,{register:(_,T)=>{let{id:V,order:w,position:$,layoutSize:p,elementSize:I,active:A,disableTransitions:M,absolute:j}=T;i.set(V,w),l.set(V,$),o.set(V,p),r.set(V,A),M&&u.set(V,M);const le=zn(Gs,S==null?void 0:S.vnode).indexOf(_);le>-1?a.value.splice(le,0,V):a.value.push(V);const re=y(()=>g.value.findIndex(te=>te.id===V)),N=y(()=>t.value+f.value.length*2-re.value*2),E=y(()=>{const te=$.value==="left"||$.value==="right",se=$.value==="right",ue=$.value==="bottom",ye=I.value??p.value,G=ye===0?"%":"px",ce={[$.value]:0,zIndex:N.value,transform:`translate${te?"X":"Y"}(${(A.value?0:-(ye===0?100:ye))*(se||ue?-1:1)}${G})`,position:j.value||t.value!==_r?"absolute":"fixed",...m.value?void 0:{transition:"none"}};if(!C.value)return ce;const me=g.value[re.value];if(!me)throw new Error(`[Vuetify] Could not find layout item "${V}"`);const Me=v.value.get(V);return Me&&(me[Me.position]+=Me.amount),{...ce,height:te?`calc(100% - ${me.top}px - ${me.bottom}px)`:I.value?`${I.value}px`:void 0,left:se?void 0:`${me.left}px`,right:se?`${me.right}px`:void 0,top:$.value!=="bottom"?`${me.top}px`:void 0,bottom:$.value!=="top"?`${me.bottom}px`:void 0,width:te?I.value?`${I.value}px`:void 0:`calc(100% - ${me.left}px - ${me.right}px)`}}),O=y(()=>({zIndex:N.value-1}));return{layoutItemStyles:E,layoutItemScrimStyles:O,zIndex:N}},unregister:_=>{i.delete(_),l.delete(_),o.delete(_),r.delete(_),u.delete(_),a.value=a.value.filter(T=>T!==_)},mainRect:b,mainStyles:h,getLayoutItem:k,items:g,layoutRect:d,rootZIndex:t});const P=y(()=>["v-layout",{"v-layout--full-height":e.fullHeight}]),x=y(()=>({zIndex:n?t.value:void 0,position:n?"relative":void 0,overflow:n?"hidden":void 0}));return{layoutClasses:P,layoutStyles:x,getLayoutItem:k,items:g,layoutRect:d,layoutRef:c}}function qs(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{blueprint:n,...t}=e,a=vt(n,t),{aliases:l={},components:o={},directives:i={}}=a,r=ly(a.defaults),u=rb(a.display,a.ssr),c=kb(a.theme),d=hb(a.icons),v=gy(a.locale),f=lb(a.date,v),m=ub(a.goTo,v);return{install:h=>{for(const g in i)h.directive(g,i[g]);for(const g in o)h.component(g,o[g]);for(const g in l)h.component(g,pt({...l[g],name:g,aliasName:l[g].name}));if(c.install(h),h.provide(Yn,r),h.provide(io,u),h.provide(ra,c),h.provide(ro,d),h.provide(Un,v),h.provide(Rs,f.options),h.provide(br,f.instance),h.provide(zs,m),$e&&a.ssr)if(h.$nuxt)h.$nuxt.hook("app:suspense:resolve",()=>{u.update()});else{const{mount:g}=h;h.mount=function(){const k=g(...arguments);return Te(()=>u.update()),h.mount=g,k}}rt.reset(),h.mixin({computed:{$vuetify(){return St({defaults:Rn.call(this,Yn),display:Rn.call(this,io),theme:Rn.call(this,ra),icons:Rn.call(this,ro),locale:Rn.call(this,Un),date:Rn.call(this,br)})}}})},defaults:r,display:u,theme:c,icons:d,locale:v,date:f,goTo:m}}const wb="3.7.5";qs.version=wb;function Rn(e){var a,l;const n=this.$,t=((a=n.parent)==null?void 0:a.provides)??((l=n.vnode.appContext)==null?void 0:l.provides);if(t&&e in t)return t[e]}const Vb=B({...ie(),...Ys({fullHeight:!0}),...Pe()},"VApp"),Cb=R()({name:"VApp",props:Vb(),setup(e,n){let{slots:t}=n;const a=De(e),{layoutClasses:l,getLayoutItem:o,items:i,layoutRef:r}=Ks(e),{rtlClasses:u}=nt();return W(()=>{var c;return s("div",{ref:r,class:["v-application",a.themeClasses.value,l.value,u.value,e.class],style:[e.style]},[s("div",{class:"v-application__wrap"},[(c=t.default)==null?void 0:c.call(t)])])}),{getLayoutItem:o,items:i,theme:a}}}),Ve=B({tag:{type:String,default:"div"}},"tag"),Xs=B({text:String,...ie(),...Ve()},"VToolbarTitle"),ri=R()({name:"VToolbarTitle",props:Xs(),setup(e,n){let{slots:t}=n;return W(()=>{const a=!!(t.default||t.text||e.text);return s(e.tag,{class:["v-toolbar-title",e.class],style:e.style},{default:()=>{var l;return[a&&s("div",{class:"v-toolbar-title__placeholder"},[t.text?t.text():e.text,(l=t.default)==null?void 0:l.call(t)])]}})}),{}}}),pb=B({disabled:Boolean,group:Boolean,hideOnLeave:Boolean,leaveAbsolute:Boolean,mode:String,origin:String},"transition");function xt(e,n,t){return R()({name:e,props:pb({mode:t,origin:n}),setup(a,l){let{slots:o}=l;const i={onBeforeEnter(r){a.origin&&(r.style.transformOrigin=a.origin)},onLeave(r){if(a.leaveAbsolute){const{offsetTop:u,offsetLeft:c,offsetWidth:d,offsetHeight:v}=r;r._transitionInitialStyles={position:r.style.position,top:r.style.top,left:r.style.left,width:r.style.width,height:r.style.height},r.style.position="absolute",r.style.top=`${u}px`,r.style.left=`${c}px`,r.style.width=`${d}px`,r.style.height=`${v}px`}a.hideOnLeave&&r.style.setProperty("display","none","important")},onAfterLeave(r){if(a.leaveAbsolute&&(r!=null&&r._transitionInitialStyles)){const{position:u,top:c,left:d,width:v,height:f}=r._transitionInitialStyles;delete r._transitionInitialStyles,r.style.position=u||"",r.style.top=c||"",r.style.left=d||"",r.style.width=v||"",r.style.height=f||""}}};return()=>{const r=a.group?Oo:Dt;return an(r,{name:a.disabled?"":e,css:!a.disabled,...a.group?void 0:{mode:a.mode},...a.disabled?{}:i},o.default)}}})}function Zs(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"in-out";return R()({name:e,props:{mode:{type:String,default:t},disabled:Boolean,group:Boolean},setup(a,l){let{slots:o}=l;const i=a.group?Oo:Dt;return()=>an(i,{name:a.disabled?"":e,css:!a.disabled,...a.disabled?{}:n},o.default)}})}function Js(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";const t=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1)?"width":"height",a=ns(`offset-${t}`);return{onBeforeEnter(i){i._parent=i.parentNode,i._initialStyle={transition:i.style.transition,overflow:i.style.overflow,[t]:i.style[t]}},onEnter(i){const r=i._initialStyle;i.style.setProperty("transition","none","important"),i.style.overflow="hidden";const u=`${i[a]}px`;i.style[t]="0",i.offsetHeight,i.style.transition=r.transition,e&&i._parent&&i._parent.classList.add(e),requestAnimationFrame(()=>{i.style[t]=u})},onAfterEnter:o,onEnterCancelled:o,onLeave(i){i._initialStyle={transition:"",overflow:i.style.overflow,[t]:i.style[t]},i.style.overflow="hidden",i.style[t]=`${i[a]}px`,i.offsetHeight,requestAnimationFrame(()=>i.style[t]="0")},onAfterLeave:l,onLeaveCancelled:l};function l(i){e&&i._parent&&i._parent.classList.remove(e),o(i)}function o(i){const r=i._initialStyle[t];i.style.overflow=i._initialStyle.overflow,r!=null&&(i.style[t]=r),delete i._initialStyle}}const xb=B({target:[Object,Array]},"v-dialog-transition"),dl=R()({name:"VDialogTransition",props:xb(),setup(e,n){let{slots:t}=n;const a={onBeforeEnter(l){l.style.pointerEvents="none",l.style.visibility="hidden"},async onEnter(l,o){var f;await new Promise(m=>requestAnimationFrame(m)),await new Promise(m=>requestAnimationFrame(m)),l.style.visibility="";const{x:i,y:r,sx:u,sy:c,speed:d}=Ir(e.target,l),v=fn(l,[{transform:`translate(${i}px, ${r}px) scale(${u}, ${c})`,opacity:0},{}],{duration:225*d,easing:sy});(f=Pr(l))==null||f.forEach(m=>{fn(m,[{opacity:0},{opacity:0,offset:.33},{}],{duration:225*2*d,easing:ia})}),v.finished.then(()=>o())},onAfterEnter(l){l.style.removeProperty("pointer-events")},onBeforeLeave(l){l.style.pointerEvents="none"},async onLeave(l,o){var f;await new Promise(m=>requestAnimationFrame(m));const{x:i,y:r,sx:u,sy:c,speed:d}=Ir(e.target,l);fn(l,[{},{transform:`translate(${i}px, ${r}px) scale(${u}, ${c})`,opacity:0}],{duration:125*d,easing:uy}).finished.then(()=>o()),(f=Pr(l))==null||f.forEach(m=>{fn(m,[{},{opacity:0,offset:.2},{opacity:0}],{duration:125*2*d,easing:ia})})},onAfterLeave(l){l.style.removeProperty("pointer-events")}};return()=>e.target?s(Dt,z({name:"dialog-transition"},a,{css:!1}),t):s(Dt,{name:"dialog-transition"},t)}});function Pr(e){var t;const n=(t=e.querySelector(":scope > .v-card, :scope > .v-sheet, :scope > .v-list"))==null?void 0:t.children;return n&&[...n]}function Ir(e,n){const t=Ss(e),a=Jo(n),[l,o]=getComputedStyle(n).transformOrigin.split(" ").map(k=>parseFloat(k)),[i,r]=getComputedStyle(n).getPropertyValue("--v-overlay-anchor-origin").split(" ");let u=t.left+t.width/2;i==="left"||r==="left"?u-=t.width/2:(i==="right"||r==="right")&&(u+=t.width/2);let c=t.top+t.height/2;i==="top"||r==="top"?c-=t.height/2:(i==="bottom"||r==="bottom")&&(c+=t.height/2);const d=t.width/a.width,v=t.height/a.height,f=Math.max(1,d,v),m=d/f||0,b=v/f||0,h=a.width*a.height/(window.innerWidth*window.innerHeight),g=h>.12?Math.min(1.5,(h-.12)*10+1):1;return{x:u-(l+a.left),y:c-(o+a.top),sx:m,sy:b,speed:g}}const _b=xt("fab-transition","center center","out-in"),Pb=xt("dialog-bottom-transition"),Ib=xt("dialog-top-transition"),ua=xt("fade-transition"),si=xt("scale-transition"),$b=xt("scroll-x-transition"),Tb=xt("scroll-x-reverse-transition"),Ab=xt("scroll-y-transition"),Bb=xt("scroll-y-reverse-transition"),Db=xt("slide-x-transition"),Lb=xt("slide-x-reverse-transition"),ui=xt("slide-y-transition"),Mb=xt("slide-y-reverse-transition"),vl=Zs("expand-transition",Js()),ci=Zs("expand-x-transition",Js("",!0)),Eb=B({defaults:Object,disabled:Boolean,reset:[Number,String],root:[Boolean,String],scoped:Boolean},"VDefaultsProvider"),pe=R(!1)({name:"VDefaultsProvider",props:Eb(),setup(e,n){let{slots:t}=n;const{defaults:a,disabled:l,reset:o,root:i,scoped:r}=Pn(e);return Ge(a,{reset:o,root:i,scoped:r,disabled:l}),()=>{var u;return(u=t.default)==null?void 0:u.call(t)}}}),Qe=B({height:[Number,String],maxHeight:[Number,String],maxWidth:[Number,String],minHeight:[Number,String],minWidth:[Number,String],width:[Number,String]},"dimension");function et(e){return{dimensionStyles:y(()=>{const t={},a=ne(e.height),l=ne(e.maxHeight),o=ne(e.maxWidth),i=ne(e.minHeight),r=ne(e.minWidth),u=ne(e.width);return a!=null&&(t.height=a),l!=null&&(t.maxHeight=l),o!=null&&(t.maxWidth=o),i!=null&&(t.minHeight=i),r!=null&&(t.minWidth=r),u!=null&&(t.width=u),t})}}function Fb(e){return{aspectStyles:y(()=>{const n=Number(e.aspectRatio);return n?{paddingBottom:String(1/n*100)+"%"}:void 0})}}const Qs=B({aspectRatio:[String,Number],contentClass:null,inline:Boolean,...ie(),...Qe()},"VResponsive"),uo=R()({name:"VResponsive",props:Qs(),setup(e,n){let{slots:t}=n;const{aspectStyles:a}=Fb(e),{dimensionStyles:l}=et(e);return W(()=>{var o;return s("div",{class:["v-responsive",{"v-responsive--inline":e.inline},e.class],style:[l.value,e.style]},[s("div",{class:"v-responsive__sizer",style:a.value},null),(o=t.additional)==null?void 0:o.call(t),t.default&&s("div",{class:["v-responsive__content",e.contentClass]},[t.default()])])}),{}}});function di(e){return Xo(()=>{const n=[],t={};if(e.value.background)if(ao(e.value.background)){if(t.backgroundColor=e.value.background,!e.value.text&&Zh(e.value.background)){const a=Pt(e.value.background);if(a.a==null||a.a===1){const l=As(a);t.color=l,t.caretColor=l}}}else n.push(`bg-${e.value.background}`);return e.value.text&&(ao(e.value.text)?(t.color=e.value.text,t.caretColor=e.value.text):n.push(`text-${e.value.text}`)),{colorClasses:n,colorStyles:t}})}function ut(e,n){const t=y(()=>({text:jn(e)?e.value:n?e[n]:null})),{colorClasses:a,colorStyles:l}=di(t);return{textColorClasses:a,textColorStyles:l}}function Le(e,n){const t=y(()=>({background:jn(e)?e.value:n?e[n]:null})),{colorClasses:a,colorStyles:l}=di(t);return{backgroundColorClasses:a,backgroundColorStyles:l}}const ze=B({rounded:{type:[Boolean,Number,String],default:void 0},tile:Boolean},"rounded");function Ue(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{roundedClasses:y(()=>{const a=jn(e)?e.value:e.rounded,l=jn(e)?e.value:e.tile,o=[];if(a===!0||a==="")o.push(`${n}--rounded`);else if(typeof a=="string"||a===0)for(const i of String(a).split(" "))o.push(`rounded-${i}`);else(l||a===!1)&&o.push("rounded-0");return o})}}const Et=B({transition:{type:[Boolean,String,Object],default:"fade-transition",validator:e=>e!==!0}},"transition"),ft=(e,n)=>{let{slots:t}=n;const{transition:a,disabled:l,group:o,...i}=e,{component:r=o?Oo:Dt,...u}=typeof a=="object"?a:{};return an(r,z(typeof a=="string"?{name:l?"":a}:u,typeof a=="string"?{}:Object.fromEntries(Object.entries({disabled:l,group:o}).filter(c=>{let[d,v]=c;return v!==void 0})),i),t)};function Ob(e,n){if(!Yo)return;const t=n.modifiers||{},a=n.value,{handler:l,options:o}=typeof a=="object"?a:{handler:a,options:{}},i=new IntersectionObserver(function(){var v;let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],u=arguments.length>1?arguments[1]:void 0;const c=(v=e._observe)==null?void 0:v[n.instance.$.uid];if(!c)return;const d=r.some(f=>f.isIntersecting);l&&(!t.quiet||c.init)&&(!t.once||d||c.init)&&l(d,r,u),d&&t.once?eu(e,n):c.init=!0},o);e._observe=Object(e._observe),e._observe[n.instance.$.uid]={init:!1,observer:i},i.observe(e)}function eu(e,n){var a;const t=(a=e._observe)==null?void 0:a[n.instance.$.uid];t&&(t.observer.unobserve(e),delete e._observe[n.instance.$.uid])}const ka={mounted:Ob,unmounted:eu},tu=B({absolute:Boolean,alt:String,cover:Boolean,color:String,draggable:{type:[Boolean,String],default:void 0},eager:Boolean,gradient:String,lazySrc:String,options:{type:Object,default:()=>({root:void 0,rootMargin:void 0,threshold:void 0})},sizes:String,src:{type:[String,Object],default:""},crossorigin:String,referrerpolicy:String,srcset:String,position:String,...Qs(),...ie(),...ze(),...Et()},"VImg"),Yt=R()({name:"VImg",directives:{intersect:ka},props:tu(),emits:{loadstart:e=>!0,load:e=>!0,error:e=>!0},setup(e,n){let{emit:t,slots:a}=n;const{backgroundColorClasses:l,backgroundColorStyles:o}=Le(F(e,"color")),{roundedClasses:i}=Ue(e),r=Ye("VImg"),u=ee(""),c=H(),d=ee(e.eager?"loading":"idle"),v=ee(),f=ee(),m=y(()=>e.src&&typeof e.src=="object"?{src:e.src.src,srcset:e.srcset||e.src.srcset,lazySrc:e.lazySrc||e.src.lazySrc,aspect:Number(e.aspectRatio||e.src.aspect||0)}:{src:e.src,srcset:e.srcset,lazySrc:e.lazySrc,aspect:Number(e.aspectRatio||0)}),b=y(()=>m.value.aspect||v.value/f.value||0);Q(()=>e.src,()=>{h(d.value!=="idle")}),Q(b,(I,A)=>{!I&&A&&c.value&&P(c.value)}),No(()=>h());function h(I){if(!(e.eager&&I)&&!(Yo&&!I&&!e.eager)){if(d.value="loading",m.value.lazySrc){const A=new Image;A.src=m.value.lazySrc,P(A,null)}m.value.src&&Te(()=>{var A;t("loadstart",((A=c.value)==null?void 0:A.currentSrc)||m.value.src),setTimeout(()=>{var M;if(!r.isUnmounted)if((M=c.value)!=null&&M.complete){if(c.value.naturalWidth||k(),d.value==="error")return;b.value||P(c.value,null),d.value==="loading"&&g()}else b.value||P(c.value),S()})})}}function g(){var I;r.isUnmounted||(S(),P(c.value),d.value="loaded",t("load",((I=c.value)==null?void 0:I.currentSrc)||m.value.src))}function k(){var I;r.isUnmounted||(d.value="error",t("error",((I=c.value)==null?void 0:I.currentSrc)||m.value.src))}function S(){const I=c.value;I&&(u.value=I.currentSrc||I.src)}let C=-1;it(()=>{clearTimeout(C)});function P(I){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:100;const M=()=>{if(clearTimeout(C),r.isUnmounted)return;const{naturalHeight:j,naturalWidth:Y}=I;j||Y?(v.value=Y,f.value=j):!I.complete&&d.value==="loading"&&A!=null?C=window.setTimeout(M,A):(I.currentSrc.endsWith(".svg")||I.currentSrc.startsWith("data:image/svg+xml"))&&(v.value=1,f.value=1)};M()}const x=y(()=>({"v-img__img--cover":e.cover,"v-img__img--contain":!e.cover})),_=()=>{var M;if(!m.value.src||d.value==="idle")return null;const I=s("img",{class:["v-img__img",x.value],style:{objectPosition:e.position},src:m.value.src,srcset:m.value.srcset,alt:e.alt,crossorigin:e.crossorigin,referrerpolicy:e.referrerpolicy,draggable:e.draggable,sizes:e.sizes,ref:c,onLoad:g,onError:k},null),A=(M=a.sources)==null?void 0:M.call(a);return s(ft,{transition:e.transition,appear:!0},{default:()=>[je(A?s("picture",{class:"v-img__picture"},[A,I]):I,[[Mt,d.value==="loaded"]])]})},T=()=>s(ft,{transition:e.transition},{default:()=>[m.value.lazySrc&&d.value!=="loaded"&&s("img",{class:["v-img__img","v-img__img--preload",x.value],style:{objectPosition:e.position},src:m.value.lazySrc,alt:e.alt,crossorigin:e.crossorigin,referrerpolicy:e.referrerpolicy,draggable:e.draggable},null)]}),V=()=>a.placeholder?s(ft,{transition:e.transition,appear:!0},{default:()=>[(d.value==="loading"||d.value==="error"&&!a.error)&&s("div",{class:"v-img__placeholder"},[a.placeholder()])]}):null,w=()=>a.error?s(ft,{transition:e.transition,appear:!0},{default:()=>[d.value==="error"&&s("div",{class:"v-img__error"},[a.error()])]}):null,$=()=>e.gradient?s("div",{class:"v-img__gradient",style:{backgroundImage:`linear-gradient(${e.gradient})`}},null):null,p=ee(!1);{const I=Q(b,A=>{A&&(requestAnimationFrame(()=>{requestAnimationFrame(()=>{p.value=!0})}),I())})}return W(()=>{const I=uo.filterProps(e);return je(s(uo,z({class:["v-img",{"v-img--absolute":e.absolute,"v-img--booting":!p.value},l.value,i.value,e.class],style:[{width:ne(e.width==="auto"?v.value:e.width)},o.value,e.style]},I,{aspectRatio:b.value,"aria-label":e.alt,role:e.alt?"img":void 0}),{additional:()=>s(ae,null,[s(_,null,null),s(T,null,null),s($,null,null),s(V,null,null),s(w,null,null)]),default:a.default}),[[Ct("intersect"),{handler:h,options:e.options},null,{once:!0}]])}),{currentSrc:u,image:c,state:d,naturalWidth:v,naturalHeight:f}}}),wt=B({border:[Boolean,Number,String]},"border");function _t(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{borderClasses:y(()=>{const a=jn(e)?e.value:e.border,l=[];if(a===!0||a==="")l.push(`${n}--border`);else if(typeof a=="string"||a===0)for(const o of String(a).split(" "))l.push(`border-${o}`);return l})}}const at=B({elevation:{type:[Number,String],validator(e){const n=parseInt(e);return!isNaN(n)&&n>=0&&n<=24}}},"elevation");function st(e){return{elevationClasses:y(()=>{const t=jn(e)?e.value:e.elevation,a=[];return t==null||a.push(`elevation-${t}`),a})}}const Nb=[null,"prominent","default","comfortable","compact"],nu=B({absolute:Boolean,collapse:Boolean,color:String,density:{type:String,default:"default",validator:e=>Nb.includes(e)},extended:Boolean,extensionHeight:{type:[Number,String],default:48},flat:Boolean,floating:Boolean,height:{type:[Number,String],default:64},image:String,title:String,...wt(),...ie(),...at(),...ze(),...Ve({tag:"header"}),...Pe()},"VToolbar"),co=R()({name:"VToolbar",props:nu(),setup(e,n){var m;let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(F(e,"color")),{borderClasses:o}=_t(e),{elevationClasses:i}=st(e),{roundedClasses:r}=Ue(e),{themeClasses:u}=De(e),{rtlClasses:c}=nt(),d=ee(!!(e.extended||(m=t.extension)!=null&&m.call(t))),v=y(()=>parseInt(Number(e.height)+(e.density==="prominent"?Number(e.height):0)-(e.density==="comfortable"?8:0)-(e.density==="compact"?16:0),10)),f=y(()=>d.value?parseInt(Number(e.extensionHeight)+(e.density==="prominent"?Number(e.extensionHeight):0)-(e.density==="comfortable"?4:0)-(e.density==="compact"?8:0),10):0);return Ge({VBtn:{variant:"text"}}),W(()=>{var k;const b=!!(e.title||t.title),h=!!(t.image||e.image),g=(k=t.extension)==null?void 0:k.call(t);return d.value=!!(e.extended||g),s(e.tag,{class:["v-toolbar",{"v-toolbar--absolute":e.absolute,"v-toolbar--collapse":e.collapse,"v-toolbar--flat":e.flat,"v-toolbar--floating":e.floating,[`v-toolbar--density-${e.density}`]:!0},a.value,o.value,i.value,r.value,u.value,c.value,e.class],style:[l.value,e.style]},{default:()=>[h&&s("div",{key:"image",class:"v-toolbar__image"},[t.image?s(pe,{key:"image-defaults",disabled:!e.image,defaults:{VImg:{cover:!0,src:e.image}}},t.image):s(Yt,{key:"image-img",cover:!0,src:e.image},null)]),s(pe,{defaults:{VTabs:{height:ne(v.value)}}},{default:()=>{var S,C,P;return[s("div",{class:"v-toolbar__content",style:{height:ne(v.value)}},[t.prepend&&s("div",{class:"v-toolbar__prepend"},[(S=t.prepend)==null?void 0:S.call(t)]),b&&s(ri,{key:"title",text:e.title},{text:t.title}),(C=t.default)==null?void 0:C.call(t),t.append&&s("div",{class:"v-toolbar__append"},[(P=t.append)==null?void 0:P.call(t)])])]}}),s(pe,{defaults:{VTabs:{height:ne(f.value)}}},{default:()=>[s(vl,null,{default:()=>[d.value&&s("div",{class:"v-toolbar__extension",style:{height:ne(f.value)}},[g])]})]})]})}),{contentHeight:v,extensionHeight:f}}}),Rb=B({scrollTarget:{type:String},scrollThreshold:{type:[String,Number],default:300}},"scroll");function Hb(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{canScroll:t}=n;let a=0,l=0;const o=H(null),i=ee(0),r=ee(0),u=ee(0),c=ee(!1),d=ee(!1),v=y(()=>Number(e.scrollThreshold)),f=y(()=>Xe((v.value-i.value)/v.value||0)),m=()=>{const b=o.value;if(!b||t&&!t.value)return;a=i.value,i.value="window"in b?b.pageYOffset:b.scrollTop;const h=b instanceof Window?document.documentElement.scrollHeight:b.scrollHeight;if(l!==h){l=h;return}d.value=i.value{r.value=r.value||i.value}),Q(c,()=>{r.value=0}),Ke(()=>{Q(()=>e.scrollTarget,b=>{var g;const h=b?document.querySelector(b):window;h&&h!==o.value&&((g=o.value)==null||g.removeEventListener("scroll",m),o.value=h,o.value.addEventListener("scroll",m,{passive:!0}))},{immediate:!0})}),it(()=>{var b;(b=o.value)==null||b.removeEventListener("scroll",m)}),t&&Q(t,m,{immediate:!0}),{scrollThreshold:v,currentScroll:i,currentThreshold:u,isScrollActive:c,scrollRatio:f,isScrollingUp:d,savedScroll:r}}function An(){const e=ee(!1);return Ke(()=>{window.requestAnimationFrame(()=>{e.value=!0})}),{ssrBootStyles:y(()=>e.value?void 0:{transition:"none !important"}),isBooted:nl(e)}}const zb=B({scrollBehavior:String,modelValue:{type:Boolean,default:!0},location:{type:String,default:"top",validator:e=>["top","bottom"].includes(e)},...nu(),...$n(),...Rb(),height:{type:[Number,String],default:64}},"VAppBar"),Wb=R()({name:"VAppBar",props:zb(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=H(),l=de(e,"modelValue"),o=y(()=>{var C;const S=new Set(((C=e.scrollBehavior)==null?void 0:C.split(" "))??[]);return{hide:S.has("hide"),fullyHide:S.has("fully-hide"),inverted:S.has("inverted"),collapse:S.has("collapse"),elevate:S.has("elevate"),fadeImage:S.has("fade-image")}}),i=y(()=>{const S=o.value;return S.hide||S.fullyHide||S.inverted||S.collapse||S.elevate||S.fadeImage||!l.value}),{currentScroll:r,scrollThreshold:u,isScrollingUp:c,scrollRatio:d}=Hb(e,{canScroll:i}),v=y(()=>o.value.hide||o.value.fullyHide),f=y(()=>e.collapse||o.value.collapse&&(o.value.inverted?d.value>0:d.value===0)),m=y(()=>e.flat||o.value.fullyHide&&!l.value||o.value.elevate&&(o.value.inverted?r.value>0:r.value===0)),b=y(()=>o.value.fadeImage?o.value.inverted?1-d.value:d.value:void 0),h=y(()=>{var P,x;if(o.value.hide&&o.value.inverted)return 0;const S=((P=a.value)==null?void 0:P.contentHeight)??0,C=((x=a.value)==null?void 0:x.extensionHeight)??0;return v.value?r.value!!e.scrollBehavior),()=>{He(()=>{v.value?o.value.inverted?l.value=r.value>u.value:l.value=c.value||r.valueparseInt(e.order,10)),position:F(e,"location"),layoutSize:h,elementSize:ee(void 0),active:l,absolute:F(e,"absolute")});return W(()=>{const S=co.filterProps(e);return s(co,z({ref:a,class:["v-app-bar",{"v-app-bar--bottom":e.location==="bottom"},e.class],style:[{...k.value,"--v-toolbar-image-opacity":b.value,height:void 0,...g.value},e.style]},S,{collapse:f.value,flat:m.value}),t)}),{}}}),jb=[null,"default","comfortable","compact"],lt=B({density:{type:String,default:"default",validator:e=>jb.includes(e)}},"density");function gt(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{densityClasses:y(()=>`${n}--density-${e.density}`)}}const Gb=["elevated","flat","tonal","outlined","text","plain"];function on(e,n){return s(ae,null,[e&&s("span",{key:"overlay",class:`${n}__overlay`},null),s("span",{key:"underlay",class:`${n}__underlay`},null)])}const Tt=B({color:String,variant:{type:String,default:"elevated",validator:e=>Gb.includes(e)}},"variant");function Bn(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();const t=y(()=>{const{variant:o}=L(e);return`${n}--variant-${o}`}),{colorClasses:a,colorStyles:l}=di(y(()=>{const{variant:o,color:i}=L(e);return{[["elevated","flat"].includes(o)?"background":"text"]:i}}));return{colorClasses:a,colorStyles:l,variantClasses:t}}const au=B({baseColor:String,divided:Boolean,...wt(),...ie(),...lt(),...at(),...ze(),...Ve(),...Pe(),...Tt()},"VBtnGroup"),vo=R()({name:"VBtnGroup",props:au(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{densityClasses:l}=gt(e),{borderClasses:o}=_t(e),{elevationClasses:i}=st(e),{roundedClasses:r}=Ue(e);Ge({VBtn:{height:"auto",baseColor:F(e,"baseColor"),color:F(e,"color"),density:F(e,"density"),flat:!0,variant:F(e,"variant")}}),W(()=>s(e.tag,{class:["v-btn-group",{"v-btn-group--divided":e.divided},a.value,o.value,l.value,i.value,r.value,e.class],style:e.style},t))}}),Dn=B({modelValue:{type:null,default:void 0},multiple:Boolean,mandatory:[Boolean,String],max:Number,selectedClass:String,disabled:Boolean},"group"),Ln=B({value:null,disabled:Boolean,selectedClass:String},"group-item");function Mn(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;const a=Ye("useGroupItem");if(!a)throw new Error("[Vuetify] useGroupItem composable must be used inside a component setup function");const l=rt();Re(Symbol.for(`${n.description}:id`),l);const o=xe(n,null);if(!o){if(!t)return o;throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${n.description}`)}const i=F(e,"value"),r=y(()=>!!(o.disabled.value||e.disabled));o.register({id:l,value:i,disabled:r},a),it(()=>{o.unregister(l)});const u=y(()=>o.isSelected(l)),c=y(()=>o.items.value[0].id===l),d=y(()=>o.items.value[o.items.value.length-1].id===l),v=y(()=>u.value&&[o.selectedClass.value,e.selectedClass]);return Q(u,f=>{a.emit("group:selected",{value:f})},{flush:"sync"}),{id:l,isSelected:u,isFirst:c,isLast:d,toggle:()=>o.select(l,!u.value),select:f=>o.select(l,f),selectedClass:v,value:i,disabled:r,group:o}}function rn(e,n){let t=!1;const a=St([]),l=de(e,"modelValue",[],f=>f==null?[]:lu(a,We(f)),f=>{const m=Ub(a,f);return e.multiple?m:m[0]}),o=Ye("useGroup");function i(f,m){const b=f,h=Symbol.for(`${n.description}:id`),k=zn(h,o==null?void 0:o.vnode).indexOf(m);L(b.value)==null&&(b.value=k,b.useIndexAsValue=!0),k>-1?a.splice(k,0,b):a.push(b)}function r(f){if(t)return;u();const m=a.findIndex(b=>b.id===f);a.splice(m,1)}function u(){const f=a.find(m=>!m.disabled);f&&e.mandatory==="force"&&!l.value.length&&(l.value=[f.id])}Ke(()=>{u()}),it(()=>{t=!0}),Zr(()=>{for(let f=0;fh.id===f);if(!(m&&(b!=null&&b.disabled)))if(e.multiple){const h=l.value.slice(),g=h.findIndex(S=>S===f),k=~g;if(m=m??!k,k&&e.mandatory&&h.length<=1||!k&&e.max!=null&&h.length+1>e.max)return;g<0&&m?h.push(f):g>=0&&!m&&h.splice(g,1),l.value=h}else{const h=l.value.includes(f);if(e.mandatory&&h)return;l.value=m??!h?[f]:[]}}function d(f){if(e.multiple,l.value.length){const m=l.value[0],b=a.findIndex(k=>k.id===m);let h=(b+f)%a.length,g=a[h];for(;g.disabled&&h!==b;)h=(h+f)%a.length,g=a[h];if(g.disabled)return;l.value=[a[h].id]}else{const m=a.find(b=>!b.disabled);m&&(l.value=[m.id])}}const v={register:i,unregister:r,selected:l,select:c,disabled:F(e,"disabled"),prev:()=>d(a.length-1),next:()=>d(1),isSelected:f=>l.value.includes(f),selectedClass:y(()=>e.selectedClass),items:y(()=>a),getItemIndex:f=>Yb(a,f)};return Re(n,v),v}function Yb(e,n){const t=lu(e,[n]);return t.length?e.findIndex(a=>a.id===t[0]):-1}function lu(e,n){const t=[];return n.forEach(a=>{const l=e.find(i=>Ht(a,i.value)),o=e[a];(l==null?void 0:l.value)!=null?t.push(l.id):o!=null&&t.push(o.id)}),t}function Ub(e,n){const t=[];return n.forEach(a=>{const l=e.findIndex(o=>o.id===a);if(~l){const o=e[l];t.push(o.value!=null?o.value:l)}}),t}const vi=Symbol.for("vuetify:v-btn-toggle"),Kb=B({...au(),...Dn()},"VBtnToggle"),qb=R()({name:"VBtnToggle",props:Kb(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{isSelected:a,next:l,prev:o,select:i,selected:r}=rn(e,vi);return W(()=>{const u=vo.filterProps(e);return s(vo,z({class:["v-btn-toggle",e.class]},u,{style:e.style}),{default:()=>{var c;return[(c=t.default)==null?void 0:c.call(t,{isSelected:a,next:l,prev:o,select:i,selected:r})]}})}),{next:l,prev:o,select:i}}}),Xb=["x-small","small","default","large","x-large"],jt=B({size:{type:[String,Number],default:"default"}},"size");function Zn(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return Xo(()=>{let t,a;return Wa(Xb,e.size)?t=`${n}--size-${e.size}`:e.size&&(a={width:ne(e.size),height:ne(e.size)}),{sizeClasses:t,sizeStyles:a}})}const Zb=B({color:String,disabled:Boolean,start:Boolean,end:Boolean,icon:ve,...ie(),...jt(),...Ve({tag:"i"}),...Pe()},"VIcon"),Be=R()({name:"VIcon",props:Zb(),setup(e,n){let{attrs:t,slots:a}=n;const l=H(),{themeClasses:o}=De(e),{iconData:i}=yb(y(()=>l.value||e.icon)),{sizeClasses:r}=Zn(e),{textColorClasses:u,textColorStyles:c}=ut(F(e,"color"));return W(()=>{var f,m;const d=(f=a.default)==null?void 0:f.call(a);d&&(l.value=(m=gs(d).filter(b=>b.type===Md&&b.children&&typeof b.children=="string")[0])==null?void 0:m.children);const v=!!(t.onClick||t.onClickOnce);return s(i.value.component,{tag:e.tag,icon:i.value.icon,class:["v-icon","notranslate",o.value,r.value,u.value,{"v-icon--clickable":v,"v-icon--disabled":e.disabled,"v-icon--start":e.start,"v-icon--end":e.end},e.class],style:[r.value?void 0:{fontSize:ne(e.size),height:ne(e.size),width:ne(e.size)},c.value,e.style],role:v?"button":void 0,"aria-hidden":!v,tabindex:v?e.disabled?-1:0:void 0},{default:()=>[d]})}),{}}});function fl(e,n){const t=H(),a=ee(!1);if(Yo){const l=new IntersectionObserver(o=>{a.value=!!o.find(i=>i.isIntersecting)},n);it(()=>{l.disconnect()}),Q(t,(o,i)=>{i&&(l.unobserve(i),a.value=!1),o&&l.observe(o)},{flush:"post"})}return{intersectionRef:t,isIntersecting:a}}const Jb=B({bgColor:String,color:String,indeterminate:[Boolean,String],modelValue:{type:[Number,String],default:0},rotate:{type:[Number,String],default:0},width:{type:[Number,String],default:4},...ie(),...jt(),...Ve({tag:"div"}),...Pe()},"VProgressCircular"),Kn=R()({name:"VProgressCircular",props:Jb(),setup(e,n){let{slots:t}=n;const a=20,l=2*Math.PI*a,o=H(),{themeClasses:i}=De(e),{sizeClasses:r,sizeStyles:u}=Zn(e),{textColorClasses:c,textColorStyles:d}=ut(F(e,"color")),{textColorClasses:v,textColorStyles:f}=ut(F(e,"bgColor")),{intersectionRef:m,isIntersecting:b}=fl(),{resizeRef:h,contentRect:g}=Lt(),k=y(()=>Math.max(0,Math.min(100,parseFloat(e.modelValue)))),S=y(()=>Number(e.width)),C=y(()=>u.value?Number(e.size):g.value?g.value.width:Math.max(S.value,32)),P=y(()=>a/(1-S.value/C.value)*2),x=y(()=>S.value/C.value*P.value),_=y(()=>ne((100-k.value)/100*l));return He(()=>{m.value=o.value,h.value=o.value}),W(()=>s(e.tag,{ref:o,class:["v-progress-circular",{"v-progress-circular--indeterminate":!!e.indeterminate,"v-progress-circular--visible":b.value,"v-progress-circular--disable-shrink":e.indeterminate==="disable-shrink"},i.value,r.value,c.value,e.class],style:[u.value,d.value,e.style],role:"progressbar","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":e.indeterminate?void 0:k.value},{default:()=>[s("svg",{style:{transform:`rotate(calc(-90deg + ${Number(e.rotate)}deg))`},xmlns:"http://www.w3.org/2000/svg",viewBox:`0 0 ${P.value} ${P.value}`},[s("circle",{class:["v-progress-circular__underlay",v.value],style:f.value,fill:"transparent",cx:"50%",cy:"50%",r:a,"stroke-width":x.value,"stroke-dasharray":l,"stroke-dashoffset":0},null),s("circle",{class:"v-progress-circular__overlay",fill:"transparent",cx:"50%",cy:"50%",r:a,"stroke-width":x.value,"stroke-dasharray":l,"stroke-dashoffset":_.value},null)]),t.default&&s("div",{class:"v-progress-circular__content"},[t.default({value:k.value})])]})),{}}}),$r={center:"center",top:"bottom",bottom:"top",left:"right",right:"left"},Xt=B({location:String},"location");function En(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,t=arguments.length>2?arguments[2]:void 0;const{isRtl:a}=nt();return{locationStyles:y(()=>{if(!e.location)return{};const{side:o,align:i}=to(e.location.split(" ").length>1?e.location:`${e.location} center`,a.value);function r(c){return t?t(c):0}const u={};return o!=="center"&&(n?u[$r[o]]=`calc(100% - ${r(o)}px)`:u[o]=0),i!=="center"?n?u[$r[i]]=`calc(100% - ${r(i)}px)`:u[i]=0:(o==="center"?u.top=u.left="50%":u[{top:"left",bottom:"left",left:"top",right:"top"}[o]]="50%",u.transform={top:"translateX(-50%)",bottom:"translateX(-50%)",left:"translateY(-50%)",right:"translateY(-50%)",center:"translate(-50%, -50%)"}[o]),u})}}const Qb=B({absolute:Boolean,active:{type:Boolean,default:!0},bgColor:String,bgOpacity:[Number,String],bufferValue:{type:[Number,String],default:0},bufferColor:String,bufferOpacity:[Number,String],clickable:Boolean,color:String,height:{type:[Number,String],default:4},indeterminate:Boolean,max:{type:[Number,String],default:100},modelValue:{type:[Number,String],default:0},opacity:[Number,String],reverse:Boolean,stream:Boolean,striped:Boolean,roundedBar:Boolean,...ie(),...Xt({location:"top"}),...ze(),...Ve(),...Pe()},"VProgressLinear"),ml=R()({name:"VProgressLinear",props:Qb(),emits:{"update:modelValue":e=>!0},setup(e,n){var p;let{slots:t}=n;const a=de(e,"modelValue"),{isRtl:l,rtlClasses:o}=nt(),{themeClasses:i}=De(e),{locationStyles:r}=En(e),{textColorClasses:u,textColorStyles:c}=ut(e,"color"),{backgroundColorClasses:d,backgroundColorStyles:v}=Le(y(()=>e.bgColor||e.color)),{backgroundColorClasses:f,backgroundColorStyles:m}=Le(y(()=>e.bufferColor||e.bgColor||e.color)),{backgroundColorClasses:b,backgroundColorStyles:h}=Le(e,"color"),{roundedClasses:g}=Ue(e),{intersectionRef:k,isIntersecting:S}=fl(),C=y(()=>parseFloat(e.max)),P=y(()=>parseFloat(e.height)),x=y(()=>Xe(parseFloat(e.bufferValue)/C.value*100,0,100)),_=y(()=>Xe(parseFloat(a.value)/C.value*100,0,100)),T=y(()=>l.value!==e.reverse),V=y(()=>e.indeterminate?"fade-transition":"slide-x-transition"),w=$e&&((p=window.matchMedia)==null?void 0:p.call(window,"(forced-colors: active)").matches);function $(I){if(!k.value)return;const{left:A,right:M,width:j}=k.value.getBoundingClientRect(),Y=T.value?j-I.clientX+(M-j):I.clientX-A;a.value=Math.round(Y/j*C.value)}return W(()=>s(e.tag,{ref:k,class:["v-progress-linear",{"v-progress-linear--absolute":e.absolute,"v-progress-linear--active":e.active&&S.value,"v-progress-linear--reverse":T.value,"v-progress-linear--rounded":e.rounded,"v-progress-linear--rounded-bar":e.roundedBar,"v-progress-linear--striped":e.striped},g.value,i.value,o.value,e.class],style:[{bottom:e.location==="bottom"?0:void 0,top:e.location==="top"?0:void 0,height:e.active?ne(P.value):0,"--v-progress-linear-height":ne(P.value),...e.absolute?r.value:{}},e.style],role:"progressbar","aria-hidden":e.active?"false":"true","aria-valuemin":"0","aria-valuemax":e.max,"aria-valuenow":e.indeterminate?void 0:_.value,onClick:e.clickable&&$},{default:()=>[e.stream&&s("div",{key:"stream",class:["v-progress-linear__stream",u.value],style:{...c.value,[T.value?"left":"right"]:ne(-P.value),borderTop:`${ne(P.value/2)} dotted`,opacity:parseFloat(e.bufferOpacity),top:`calc(50% - ${ne(P.value/4)})`,width:ne(100-x.value,"%"),"--v-progress-linear-stream-to":ne(P.value*(T.value?1:-1))}},null),s("div",{class:["v-progress-linear__background",w?void 0:d.value],style:[v.value,{opacity:parseFloat(e.bgOpacity),width:e.stream?0:void 0}]},null),s("div",{class:["v-progress-linear__buffer",w?void 0:f.value],style:[m.value,{opacity:parseFloat(e.bufferOpacity),width:ne(x.value,"%")}]},null),s(Dt,{name:V.value},{default:()=>[e.indeterminate?s("div",{class:"v-progress-linear__indeterminate"},[["long","short"].map(I=>s("div",{key:I,class:["v-progress-linear__indeterminate",I,w?void 0:b.value],style:h.value},null))]):s("div",{class:["v-progress-linear__determinate",w?void 0:b.value],style:[h.value,{width:ne(_.value,"%")}]},null)]}),t.default&&s("div",{class:"v-progress-linear__content"},[t.default({value:_.value,buffer:x.value})])]})),{}}}),gl=B({loading:[Boolean,String]},"loader");function Sa(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{loaderClasses:y(()=>({[`${n}--loading`]:e.loading}))}}function wa(e,n){var a;let{slots:t}=n;return s("div",{class:`${e.name}__loader`},[((a=t.default)==null?void 0:a.call(t,{color:e.color,isActive:e.active}))||s(ml,{absolute:e.absolute,active:e.active,color:e.color,height:"2",indeterminate:!0},null)])}const ek=["static","relative","fixed","absolute","sticky"],Jn=B({position:{type:String,validator:e=>ek.includes(e)}},"position");function Qn(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{positionClasses:y(()=>e.position?`${n}--${e.position}`:void 0)}}function tk(){const e=Ye("useRoute");return y(()=>{var n;return(n=e==null?void 0:e.proxy)==null?void 0:n.$route})}function ou(){var e,n;return(n=(e=Ye("useRouter"))==null?void 0:e.proxy)==null?void 0:n.$router}function Va(e,n){var v,f;const t=Bt("RouterLink"),a=y(()=>!!(e.href||e.to)),l=y(()=>(a==null?void 0:a.value)||Qi(n,"click")||Qi(e,"click"));if(typeof t=="string"||!("useLink"in t)){const m=F(e,"href");return{isLink:a,isClickable:l,href:m,linkProps:St({href:m})}}const o=y(()=>({...e,to:F(()=>e.to||"")})),i=t.useLink(o.value),r=y(()=>e.to?i:void 0),u=tk(),c=y(()=>{var m,b,h;return r.value?e.exact?u.value?((h=r.value.isExactActive)==null?void 0:h.value)&&Ht(r.value.route.value.query,u.value.query):((b=r.value.isExactActive)==null?void 0:b.value)??!1:((m=r.value.isActive)==null?void 0:m.value)??!1:!1}),d=y(()=>{var m;return e.to?(m=r.value)==null?void 0:m.route.value.href:e.href});return{isLink:a,isClickable:l,isActive:c,route:(v=r.value)==null?void 0:v.route,navigate:(f=r.value)==null?void 0:f.navigate,href:d,linkProps:St({href:d,"aria-current":y(()=>c.value?"page":void 0)})}}const Ca=B({href:String,replace:Boolean,to:[String,Object],exact:Boolean},"router");let Hl=!1;function nk(e,n){let t=!1,a,l;$e&&(Te(()=>{window.addEventListener("popstate",o),a=e==null?void 0:e.beforeEach((i,r,u)=>{Hl?t?n(u):u():setTimeout(()=>t?n(u):u()),Hl=!0}),l=e==null?void 0:e.afterEach(()=>{Hl=!1})}),mt(()=>{window.removeEventListener("popstate",o),a==null||a(),l==null||l()}));function o(i){var r;(r=i.state)!=null&&r.replaced||(t=!0,setTimeout(()=>t=!1))}}function ak(e,n){Q(()=>{var t;return(t=e.isActive)==null?void 0:t.value},t=>{e.isLink.value&&t&&n&&Te(()=>{n(!0)})},{immediate:!0})}const fo=Symbol("rippleStop"),lk=80;function Tr(e,n){e.style.transform=n,e.style.webkitTransform=n}function mo(e){return e.constructor.name==="TouchEvent"}function iu(e){return e.constructor.name==="KeyboardEvent"}const ok=function(e,n){var v;let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=0,l=0;if(!iu(e)){const f=n.getBoundingClientRect(),m=mo(e)?e.touches[e.touches.length-1]:e;a=m.clientX-f.left,l=m.clientY-f.top}let o=0,i=.3;(v=n._ripple)!=null&&v.circle?(i=.15,o=n.clientWidth/2,o=t.center?o:o+Math.sqrt((a-o)**2+(l-o)**2)/4):o=Math.sqrt(n.clientWidth**2+n.clientHeight**2)/2;const r=`${(n.clientWidth-o*2)/2}px`,u=`${(n.clientHeight-o*2)/2}px`,c=t.center?r:`${a-o}px`,d=t.center?u:`${l-o}px`;return{radius:o,scale:i,x:c,y:d,centerX:r,centerY:u}},qa={show(e,n){var m;let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(!((m=n==null?void 0:n._ripple)!=null&&m.enabled))return;const a=document.createElement("span"),l=document.createElement("span");a.appendChild(l),a.className="v-ripple__container",t.class&&(a.className+=` ${t.class}`);const{radius:o,scale:i,x:r,y:u,centerX:c,centerY:d}=ok(e,n,t),v=`${o*2}px`;l.className="v-ripple__animation",l.style.width=v,l.style.height=v,n.appendChild(a);const f=window.getComputedStyle(n);f&&f.position==="static"&&(n.style.position="relative",n.dataset.previousPosition="static"),l.classList.add("v-ripple__animation--enter"),l.classList.add("v-ripple__animation--visible"),Tr(l,`translate(${r}, ${u}) scale3d(${i},${i},${i})`),l.dataset.activated=String(performance.now()),setTimeout(()=>{l.classList.remove("v-ripple__animation--enter"),l.classList.add("v-ripple__animation--in"),Tr(l,`translate(${c}, ${d}) scale3d(1,1,1)`)},0)},hide(e){var o;if(!((o=e==null?void 0:e._ripple)!=null&&o.enabled))return;const n=e.getElementsByClassName("v-ripple__animation");if(n.length===0)return;const t=n[n.length-1];if(t.dataset.isHiding)return;t.dataset.isHiding="true";const a=performance.now()-Number(t.dataset.activated),l=Math.max(250-a,0);setTimeout(()=>{t.classList.remove("v-ripple__animation--in"),t.classList.add("v-ripple__animation--out"),setTimeout(()=>{var r;e.getElementsByClassName("v-ripple__animation").length===1&&e.dataset.previousPosition&&(e.style.position=e.dataset.previousPosition,delete e.dataset.previousPosition),((r=t.parentNode)==null?void 0:r.parentNode)===e&&e.removeChild(t.parentNode)},300)},l)}};function ru(e){return typeof e>"u"||!!e}function ca(e){const n={},t=e.currentTarget;if(!(!(t!=null&&t._ripple)||t._ripple.touched||e[fo])){if(e[fo]=!0,mo(e))t._ripple.touched=!0,t._ripple.isTouch=!0;else if(t._ripple.isTouch)return;if(n.center=t._ripple.centered||iu(e),t._ripple.class&&(n.class=t._ripple.class),mo(e)){if(t._ripple.showTimerCommit)return;t._ripple.showTimerCommit=()=>{qa.show(e,t,n)},t._ripple.showTimer=window.setTimeout(()=>{var a;(a=t==null?void 0:t._ripple)!=null&&a.showTimerCommit&&(t._ripple.showTimerCommit(),t._ripple.showTimerCommit=null)},lk)}else qa.show(e,t,n)}}function Ar(e){e[fo]=!0}function Vt(e){const n=e.currentTarget;if(n!=null&&n._ripple){if(window.clearTimeout(n._ripple.showTimer),e.type==="touchend"&&n._ripple.showTimerCommit){n._ripple.showTimerCommit(),n._ripple.showTimerCommit=null,n._ripple.showTimer=window.setTimeout(()=>{Vt(e)});return}window.setTimeout(()=>{n._ripple&&(n._ripple.touched=!1)}),qa.hide(n)}}function su(e){const n=e.currentTarget;n!=null&&n._ripple&&(n._ripple.showTimerCommit&&(n._ripple.showTimerCommit=null),window.clearTimeout(n._ripple.showTimer))}let da=!1;function uu(e){!da&&(e.keyCode===Ki.enter||e.keyCode===Ki.space)&&(da=!0,ca(e))}function cu(e){da=!1,Vt(e)}function du(e){da&&(da=!1,Vt(e))}function vu(e,n,t){const{value:a,modifiers:l}=n,o=ru(a);if(o||qa.hide(e),e._ripple=e._ripple??{},e._ripple.enabled=o,e._ripple.centered=l.center,e._ripple.circle=l.circle,Uo(a)&&a.class&&(e._ripple.class=a.class),o&&!t){if(l.stop){e.addEventListener("touchstart",Ar,{passive:!0}),e.addEventListener("mousedown",Ar);return}e.addEventListener("touchstart",ca,{passive:!0}),e.addEventListener("touchend",Vt,{passive:!0}),e.addEventListener("touchmove",su,{passive:!0}),e.addEventListener("touchcancel",Vt),e.addEventListener("mousedown",ca),e.addEventListener("mouseup",Vt),e.addEventListener("mouseleave",Vt),e.addEventListener("keydown",uu),e.addEventListener("keyup",cu),e.addEventListener("blur",du),e.addEventListener("dragstart",Vt,{passive:!0})}else!o&&t&&fu(e)}function fu(e){e.removeEventListener("mousedown",ca),e.removeEventListener("touchstart",ca),e.removeEventListener("touchend",Vt),e.removeEventListener("touchmove",su),e.removeEventListener("touchcancel",Vt),e.removeEventListener("mouseup",Vt),e.removeEventListener("mouseleave",Vt),e.removeEventListener("keydown",uu),e.removeEventListener("keyup",cu),e.removeEventListener("dragstart",Vt),e.removeEventListener("blur",du)}function ik(e,n){vu(e,n,!1)}function rk(e){delete e._ripple,fu(e)}function sk(e,n){if(n.value===n.oldValue)return;const t=ru(n.oldValue);vu(e,n,t)}const Zt={mounted:ik,unmounted:rk,updated:sk},hl=B({active:{type:Boolean,default:void 0},activeColor:String,baseColor:String,symbol:{type:null,default:vi},flat:Boolean,icon:[Boolean,String,Function,Object],prependIcon:ve,appendIcon:ve,block:Boolean,readonly:Boolean,slim:Boolean,stacked:Boolean,ripple:{type:[Boolean,Object],default:!0},text:String,...wt(),...ie(),...lt(),...Qe(),...at(),...Ln(),...gl(),...Xt(),...Jn(),...ze(),...Ca(),...jt(),...Ve({tag:"button"}),...Pe(),...Tt({variant:"elevated"})},"VBtn"),Ae=R()({name:"VBtn",props:hl(),emits:{"group:selected":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{themeClasses:l}=De(e),{borderClasses:o}=_t(e),{densityClasses:i}=gt(e),{dimensionStyles:r}=et(e),{elevationClasses:u}=st(e),{loaderClasses:c}=Sa(e),{locationStyles:d}=En(e),{positionClasses:v}=Qn(e),{roundedClasses:f}=Ue(e),{sizeClasses:m,sizeStyles:b}=Zn(e),h=Mn(e,e.symbol,!1),g=Va(e,t),k=y(()=>{var p;return e.active!==void 0?e.active:g.isLink.value?(p=g.isActive)==null?void 0:p.value:h==null?void 0:h.isSelected.value}),S=y(()=>k.value?e.activeColor??e.color:e.color),C=y(()=>{var I,A;return{color:(h==null?void 0:h.isSelected.value)&&(!g.isLink.value||((I=g.isActive)==null?void 0:I.value))||!h||((A=g.isActive)==null?void 0:A.value)?S.value??e.baseColor:e.baseColor,variant:e.variant}}),{colorClasses:P,colorStyles:x,variantClasses:_}=Bn(C),T=y(()=>(h==null?void 0:h.disabled.value)||e.disabled),V=y(()=>e.variant==="elevated"&&!(e.disabled||e.flat||e.border)),w=y(()=>{if(!(e.value===void 0||typeof e.value=="symbol"))return Object(e.value)===e.value?JSON.stringify(e.value,null,0):e.value});function $(p){var I;T.value||g.isLink.value&&(p.metaKey||p.ctrlKey||p.shiftKey||p.button!==0||t.target==="_blank")||((I=g.navigate)==null||I.call(g,p),h==null||h.toggle())}return ak(g,h==null?void 0:h.select),W(()=>{const p=g.isLink.value?"a":e.tag,I=!!(e.prependIcon||a.prepend),A=!!(e.appendIcon||a.append),M=!!(e.icon&&e.icon!==!0);return je(s(p,z({type:p==="a"?void 0:"button",class:["v-btn",h==null?void 0:h.selectedClass.value,{"v-btn--active":k.value,"v-btn--block":e.block,"v-btn--disabled":T.value,"v-btn--elevated":V.value,"v-btn--flat":e.flat,"v-btn--icon":!!e.icon,"v-btn--loading":e.loading,"v-btn--readonly":e.readonly,"v-btn--slim":e.slim,"v-btn--stacked":e.stacked},l.value,o.value,P.value,i.value,u.value,c.value,v.value,f.value,m.value,_.value,e.class],style:[x.value,r.value,d.value,b.value,e.style],"aria-busy":e.loading?!0:void 0,disabled:T.value||void 0,tabindex:e.loading||e.readonly?-1:void 0,onClick:$,value:w.value},g.linkProps),{default:()=>{var j;return[on(!0,"v-btn"),!e.icon&&I&&s("span",{key:"prepend",class:"v-btn__prepend"},[a.prepend?s(pe,{key:"prepend-defaults",disabled:!e.prependIcon,defaults:{VIcon:{icon:e.prependIcon}}},a.prepend):s(Be,{key:"prepend-icon",icon:e.prependIcon},null)]),s("span",{class:"v-btn__content","data-no-activator":""},[!a.default&&M?s(Be,{key:"content-icon",icon:e.icon},null):s(pe,{key:"content-defaults",disabled:!M,defaults:{VIcon:{icon:e.icon}}},{default:()=>{var Y;return[((Y=a.default)==null?void 0:Y.call(a))??e.text]}})]),!e.icon&&A&&s("span",{key:"append",class:"v-btn__append"},[a.append?s(pe,{key:"append-defaults",disabled:!e.appendIcon,defaults:{VIcon:{icon:e.appendIcon}}},a.append):s(Be,{key:"append-icon",icon:e.appendIcon},null)]),!!e.loading&&s("span",{key:"loader",class:"v-btn__loader"},[((j=a.loader)==null?void 0:j.call(a))??s(Kn,{color:typeof e.loading=="boolean"?void 0:e.loading,indeterminate:!0,width:"2"},null)])]}}),[[Zt,!T.value&&e.ripple,"",{center:!!e.icon}]])}),{group:h}}}),uk=B({...hl({icon:"$menu",variant:"text"})},"VAppBarNavIcon"),ck=R()({name:"VAppBarNavIcon",props:uk(),setup(e,n){let{slots:t}=n;return W(()=>s(Ae,z(e,{class:["v-app-bar-nav-icon"]}),t)),{}}}),dk=R()({name:"VAppBarTitle",props:Xs(),setup(e,n){let{slots:t}=n;return W(()=>s(ri,z(e,{class:"v-app-bar-title"}),t)),{}}}),mu=Wt("v-alert-title"),vk=["success","info","warning","error"],fk=B({border:{type:[Boolean,String],validator:e=>typeof e=="boolean"||["top","end","bottom","start"].includes(e)},borderColor:String,closable:Boolean,closeIcon:{type:ve,default:"$close"},closeLabel:{type:String,default:"$vuetify.close"},icon:{type:[Boolean,String,Function,Object],default:null},modelValue:{type:Boolean,default:!0},prominent:Boolean,title:String,text:String,type:{type:String,validator:e=>vk.includes(e)},...ie(),...lt(),...Qe(),...at(),...Xt(),...Jn(),...ze(),...Ve(),...Pe(),...Tt({variant:"flat"})},"VAlert"),mk=R()({name:"VAlert",props:fk(),emits:{"click:close":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=de(e,"modelValue"),o=y(()=>{if(e.icon!==!1)return e.type?e.icon??`$${e.type}`:e.icon}),i=y(()=>({color:e.color??e.type,variant:e.variant})),{themeClasses:r}=De(e),{colorClasses:u,colorStyles:c,variantClasses:d}=Bn(i),{densityClasses:v}=gt(e),{dimensionStyles:f}=et(e),{elevationClasses:m}=st(e),{locationStyles:b}=En(e),{positionClasses:h}=Qn(e),{roundedClasses:g}=Ue(e),{textColorClasses:k,textColorStyles:S}=ut(F(e,"borderColor")),{t:C}=qe(),P=y(()=>({"aria-label":C(e.closeLabel),onClick(x){l.value=!1,t("click:close",x)}}));return()=>{const x=!!(a.prepend||o.value),_=!!(a.title||e.title),T=!!(a.close||e.closable);return l.value&&s(e.tag,{class:["v-alert",e.border&&{"v-alert--border":!!e.border,[`v-alert--border-${e.border===!0?"start":e.border}`]:!0},{"v-alert--prominent":e.prominent},r.value,u.value,v.value,m.value,h.value,g.value,d.value,e.class],style:[c.value,f.value,b.value,e.style],role:"alert"},{default:()=>{var V,w;return[on(!1,"v-alert"),e.border&&s("div",{key:"border",class:["v-alert__border",k.value],style:S.value},null),x&&s("div",{key:"prepend",class:"v-alert__prepend"},[a.prepend?s(pe,{key:"prepend-defaults",disabled:!o.value,defaults:{VIcon:{density:e.density,icon:o.value,size:e.prominent?44:28}}},a.prepend):s(Be,{key:"prepend-icon",density:e.density,icon:o.value,size:e.prominent?44:28},null)]),s("div",{class:"v-alert__content"},[_&&s(mu,{key:"title"},{default:()=>{var $;return[(($=a.title)==null?void 0:$.call(a))??e.title]}}),((V=a.text)==null?void 0:V.call(a))??e.text,(w=a.default)==null?void 0:w.call(a)]),a.append&&s("div",{key:"append",class:"v-alert__append"},[a.append()]),T&&s("div",{key:"close",class:"v-alert__close"},[a.close?s(pe,{key:"close-defaults",defaults:{VBtn:{icon:e.closeIcon,size:"x-small",variant:"text"}}},{default:()=>{var $;return[($=a.close)==null?void 0:$.call(a,{props:P.value})]}}):s(Ae,z({key:"close-btn",icon:e.closeIcon,size:"x-small",variant:"text"},P.value),null)])]}})}}}),gk=B({start:Boolean,end:Boolean,icon:ve,image:String,text:String,...wt(),...ie(),...lt(),...ze(),...jt(),...Ve(),...Pe(),...Tt({variant:"flat"})},"VAvatar"),It=R()({name:"VAvatar",props:gk(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{borderClasses:l}=_t(e),{colorClasses:o,colorStyles:i,variantClasses:r}=Bn(e),{densityClasses:u}=gt(e),{roundedClasses:c}=Ue(e),{sizeClasses:d,sizeStyles:v}=Zn(e);return W(()=>s(e.tag,{class:["v-avatar",{"v-avatar--start":e.start,"v-avatar--end":e.end},a.value,l.value,o.value,u.value,c.value,d.value,r.value,e.class],style:[i.value,v.value,e.style]},{default:()=>[t.default?s(pe,{key:"content-defaults",defaults:{VImg:{cover:!0,src:e.image},VIcon:{icon:e.icon}}},{default:()=>[t.default()]}):e.image?s(Yt,{key:"image",src:e.image,alt:"",cover:!0},null):e.icon?s(Be,{key:"icon",icon:e.icon},null):e.text,on(!1,"v-avatar")]})),{}}}),hk=B({text:String,onClick:ot(),...ie(),...Pe()},"VLabel"),ea=R()({name:"VLabel",props:hk(),setup(e,n){let{slots:t}=n;return W(()=>{var a;return s("label",{class:["v-label",{"v-label--clickable":!!e.onClick},e.class],style:e.style,onClick:e.onClick},[e.text,(a=t.default)==null?void 0:a.call(t)])}),{}}}),gu=Symbol.for("vuetify:selection-control-group"),fi=B({color:String,disabled:{type:Boolean,default:null},defaultsTarget:String,error:Boolean,id:String,inline:Boolean,falseIcon:ve,trueIcon:ve,ripple:{type:[Boolean,Object],default:!0},multiple:{type:Boolean,default:null},name:String,readonly:{type:Boolean,default:null},modelValue:null,type:String,valueComparator:{type:Function,default:Ht},...ie(),...lt(),...Pe()},"SelectionControlGroup"),yk=B({...fi({defaultsTarget:"VSelectionControl"})},"VSelectionControlGroup"),hu=R()({name:"VSelectionControlGroup",props:yk(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),l=rt(),o=y(()=>e.id||`v-selection-control-group-${l}`),i=y(()=>e.name||o.value),r=new Set;return Re(gu,{modelValue:a,forceUpdate:()=>{r.forEach(u=>u())},onForceUpdate:u=>{r.add(u),mt(()=>{r.delete(u)})}}),Ge({[e.defaultsTarget]:{color:F(e,"color"),disabled:F(e,"disabled"),density:F(e,"density"),error:F(e,"error"),inline:F(e,"inline"),modelValue:a,multiple:y(()=>!!e.multiple||e.multiple==null&&Array.isArray(a.value)),name:i,falseIcon:F(e,"falseIcon"),trueIcon:F(e,"trueIcon"),readonly:F(e,"readonly"),ripple:F(e,"ripple"),type:F(e,"type"),valueComparator:F(e,"valueComparator")}}),W(()=>{var u;return s("div",{class:["v-selection-control-group",{"v-selection-control-group--inline":e.inline},e.class],style:e.style,role:e.type==="radio"?"radiogroup":void 0},[(u=t.default)==null?void 0:u.call(t)])}),{}}}),yl=B({label:String,baseColor:String,trueValue:null,falseValue:null,value:null,...ie(),...fi()},"VSelectionControl");function bk(e){const n=xe(gu,void 0),{densityClasses:t}=gt(e),a=de(e,"modelValue"),l=y(()=>e.trueValue!==void 0?e.trueValue:e.value!==void 0?e.value:!0),o=y(()=>e.falseValue!==void 0?e.falseValue:!1),i=y(()=>!!e.multiple||e.multiple==null&&Array.isArray(a.value)),r=y({get(){const m=n?n.modelValue.value:a.value;return i.value?We(m).some(b=>e.valueComparator(b,l.value)):e.valueComparator(m,l.value)},set(m){if(e.readonly)return;const b=m?l.value:o.value;let h=b;i.value&&(h=m?[...We(a.value),b]:We(a.value).filter(g=>!e.valueComparator(g,l.value))),n?n.modelValue.value=h:a.value=h}}),{textColorClasses:u,textColorStyles:c}=ut(y(()=>{if(!(e.error||e.disabled))return r.value?e.color:e.baseColor})),{backgroundColorClasses:d,backgroundColorStyles:v}=Le(y(()=>r.value&&!e.error&&!e.disabled?e.color:e.baseColor)),f=y(()=>r.value?e.trueIcon:e.falseIcon);return{group:n,densityClasses:t,trueValue:l,falseValue:o,model:r,textColorClasses:u,textColorStyles:c,backgroundColorClasses:d,backgroundColorStyles:v,icon:f}}const tn=R()({name:"VSelectionControl",directives:{Ripple:Zt},inheritAttrs:!1,props:yl(),emits:{"update:modelValue":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{group:l,densityClasses:o,icon:i,model:r,textColorClasses:u,textColorStyles:c,backgroundColorClasses:d,backgroundColorStyles:v,trueValue:f}=bk(e),m=rt(),b=ee(!1),h=ee(!1),g=H(),k=y(()=>e.id||`input-${m}`),S=y(()=>!e.disabled&&!e.readonly);l==null||l.onForceUpdate(()=>{g.value&&(g.value.checked=r.value)});function C(T){S.value&&(b.value=!0,Gn(T.target,":focus-visible")!==!1&&(h.value=!0))}function P(){b.value=!1,h.value=!1}function x(T){T.stopPropagation()}function _(T){if(!S.value){g.value&&(g.value.checked=r.value);return}e.readonly&&l&&Te(()=>l.forceUpdate()),r.value=T.target.checked}return W(()=>{var p,I;const T=a.label?a.label({label:e.label,props:{for:k.value}}):e.label,[V,w]=ln(t),$=s("input",z({ref:g,checked:r.value,disabled:!!e.disabled,id:k.value,onBlur:P,onFocus:C,onInput:_,"aria-disabled":!!e.disabled,"aria-label":e.label,type:e.type,value:f.value,name:e.name,"aria-checked":e.type==="checkbox"?r.value:void 0},w),null);return s("div",z({class:["v-selection-control",{"v-selection-control--dirty":r.value,"v-selection-control--disabled":e.disabled,"v-selection-control--error":e.error,"v-selection-control--focused":b.value,"v-selection-control--focus-visible":h.value,"v-selection-control--inline":e.inline},o.value,e.class]},V,{style:e.style}),[s("div",{class:["v-selection-control__wrapper",u.value],style:c.value},[(p=a.default)==null?void 0:p.call(a,{backgroundColorClasses:d,backgroundColorStyles:v}),je(s("div",{class:["v-selection-control__input"]},[((I=a.input)==null?void 0:I.call(a,{model:r,textColorClasses:u,textColorStyles:c,backgroundColorClasses:d,backgroundColorStyles:v,inputNode:$,icon:i.value,props:{onFocus:C,onBlur:P,id:k.value}}))??s(ae,null,[i.value&&s(Be,{key:"icon",icon:i.value},null),$])]),[[Ct("ripple"),e.ripple&&[!e.disabled&&!e.readonly,null,["center","circle"]]]])]),T&&s(ea,{for:k.value,onClick:x},{default:()=>[T]})])}),{isFocused:b,input:g}}}),yu=B({indeterminate:Boolean,indeterminateIcon:{type:ve,default:"$checkboxIndeterminate"},...yl({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),Ut=R()({name:"VCheckboxBtn",props:yu(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"indeterminate"),l=de(e,"modelValue");function o(u){a.value&&(a.value=!1)}const i=y(()=>a.value?e.indeterminateIcon:e.falseIcon),r=y(()=>a.value?e.indeterminateIcon:e.trueIcon);return W(()=>{const u=Je(tn.filterProps(e),["modelValue"]);return s(tn,z(u,{modelValue:l.value,"onUpdate:modelValue":[c=>l.value=c,o],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:r.value,"aria-checked":a.value?"mixed":void 0}),t)}),{}}});function bu(e){const{t:n}=qe();function t(a){let{name:l}=a;const o={prepend:"prependAction",prependInner:"prependAction",append:"appendAction",appendInner:"appendAction",clear:"clear"}[l],i=e[`onClick:${l}`],r=i&&o?n(`$vuetify.input.${o}`,e.label??""):void 0;return s(Be,{icon:e[`${l}Icon`],"aria-label":r,onClick:i},null)}return{InputIcon:t}}const kk=B({active:Boolean,color:String,messages:{type:[Array,String],default:()=>[]},...ie(),...Et({transition:{component:ui,leaveAbsolute:!0,group:!0}})},"VMessages"),ku=R()({name:"VMessages",props:kk(),setup(e,n){let{slots:t}=n;const a=y(()=>We(e.messages)),{textColorClasses:l,textColorStyles:o}=ut(y(()=>e.color));return W(()=>s(ft,{transition:e.transition,tag:"div",class:["v-messages",l.value,e.class],style:[o.value,e.style],role:"alert","aria-live":"polite"},{default:()=>[e.active&&a.value.map((i,r)=>s("div",{class:"v-messages__message",key:`${r}-${a.value}`},[t.message?t.message({message:i}):i]))]})),{}}}),pa=B({focused:Boolean,"onUpdate:focused":ot()},"focus");function Jt(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();const t=de(e,"focused"),a=y(()=>({[`${n}--focused`]:t.value}));function l(){t.value=!0}function o(){t.value=!1}return{focusClasses:a,isFocused:t,focus:l,blur:o}}const Su=Symbol.for("vuetify:form"),Sk=B({disabled:Boolean,fastFail:Boolean,readonly:Boolean,modelValue:{type:Boolean,default:null},validateOn:{type:String,default:"input"}},"form");function wk(e){const n=de(e,"modelValue"),t=y(()=>e.disabled),a=y(()=>e.readonly),l=ee(!1),o=H([]),i=H([]);async function r(){const d=[];let v=!0;i.value=[],l.value=!0;for(const f of o.value){const m=await f.validate();if(m.length>0&&(v=!1,d.push({id:f.id,errorMessages:m})),!v&&e.fastFail)break}return i.value=d,l.value=!1,{valid:v,errors:i.value}}function u(){o.value.forEach(d=>d.reset())}function c(){o.value.forEach(d=>d.resetValidation())}return Q(o,()=>{let d=0,v=0;const f=[];for(const m of o.value)m.isValid===!1?(v++,f.push({id:m.id,errorMessages:m.errorMessages})):m.isValid===!0&&d++;i.value=f,n.value=v>0?!1:d===o.value.length?!0:null},{deep:!0,flush:"post"}),Re(Su,{register:d=>{let{id:v,vm:f,validate:m,reset:b,resetValidation:h}=d;o.value.some(g=>g.id===v),o.value.push({id:v,validate:m,reset:b,resetValidation:h,vm:Ed(f),isValid:null,errorMessages:[]})},unregister:d=>{o.value=o.value.filter(v=>v.id!==d)},update:(d,v,f)=>{const m=o.value.find(b=>b.id===d);m&&(m.isValid=v,m.errorMessages=f)},isDisabled:t,isReadonly:a,isValidating:l,isValid:n,items:o,validateOn:F(e,"validateOn")}),{errors:i,isDisabled:t,isReadonly:a,isValidating:l,isValid:n,items:o,validate:r,reset:u,resetValidation:c}}function bl(e){const n=xe(Su,null);return{...n,isReadonly:y(()=>!!((e==null?void 0:e.readonly)??(n==null?void 0:n.isReadonly.value))),isDisabled:y(()=>!!((e==null?void 0:e.disabled)??(n==null?void 0:n.isDisabled.value)))}}const wu=B({disabled:{type:Boolean,default:null},error:Boolean,errorMessages:{type:[Array,String],default:()=>[]},maxErrors:{type:[Number,String],default:1},name:String,label:String,readonly:{type:Boolean,default:null},rules:{type:Array,default:()=>[]},modelValue:null,validateOn:String,validationValue:null,...pa()},"validation");function Vu(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt(),t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:rt();const a=de(e,"modelValue"),l=y(()=>e.validationValue===void 0?a.value:e.validationValue),o=bl(e),i=H([]),r=ee(!0),u=y(()=>!!(We(a.value===""?null:a.value).length||We(l.value===""?null:l.value).length)),c=y(()=>{var C;return(C=e.errorMessages)!=null&&C.length?We(e.errorMessages).concat(i.value).slice(0,Math.max(0,+e.maxErrors)):i.value}),d=y(()=>{var x;let C=(e.validateOn??((x=o.validateOn)==null?void 0:x.value))||"input";C==="lazy"&&(C="input lazy"),C==="eager"&&(C="input eager");const P=new Set((C==null?void 0:C.split(" "))??[]);return{input:P.has("input"),blur:P.has("blur")||P.has("input")||P.has("invalid-input"),invalidInput:P.has("invalid-input"),lazy:P.has("lazy"),eager:P.has("eager")}}),v=y(()=>{var C;return e.error||(C=e.errorMessages)!=null&&C.length?!1:e.rules.length?r.value?i.value.length||d.value.lazy?null:!0:!i.value.length:!0}),f=ee(!1),m=y(()=>({[`${n}--error`]:v.value===!1,[`${n}--dirty`]:u.value,[`${n}--disabled`]:o.isDisabled.value,[`${n}--readonly`]:o.isReadonly.value})),b=Ye("validation"),h=y(()=>e.name??L(t));No(()=>{var C;(C=o.register)==null||C.call(o,{id:h.value,vm:b,validate:S,reset:g,resetValidation:k})}),it(()=>{var C;(C=o.unregister)==null||C.call(o,h.value)}),Ke(async()=>{var C;d.value.lazy||await S(!d.value.eager),(C=o.update)==null||C.call(o,h.value,v.value,c.value)}),yt(()=>d.value.input||d.value.invalidInput&&v.value===!1,()=>{Q(l,()=>{if(l.value!=null)S();else if(e.focused){const C=Q(()=>e.focused,P=>{P||S(),C()})}})}),yt(()=>d.value.blur,()=>{Q(()=>e.focused,C=>{C||S()})}),Q([v,c],()=>{var C;(C=o.update)==null||C.call(o,h.value,v.value,c.value)});async function g(){a.value=null,await Te(),await k()}async function k(){r.value=!0,d.value.lazy?i.value=[]:await S(!d.value.eager)}async function S(){let C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;const P=[];f.value=!0;for(const x of e.rules){if(P.length>=+(e.maxErrors??1))break;const T=await(typeof x=="function"?x:()=>x)(l.value);if(T!==!0){if(T!==!1&&typeof T!="string"){console.warn(`${T} is not a valid value. Rule functions must return boolean true or a string.`);continue}P.push(T||"")}}return i.value=P,f.value=!1,r.value=C,i.value}return{errorMessages:c,isDirty:u,isDisabled:o.isDisabled,isReadonly:o.isReadonly,isPristine:r,isValid:v,isValidating:f,reset:g,resetValidation:k,validate:S,validationClasses:m}}const Qt=B({id:String,appendIcon:ve,centerAffix:{type:Boolean,default:!0},prependIcon:ve,hideDetails:[Boolean,String],hideSpinButtons:Boolean,hint:String,persistentHint:Boolean,messages:{type:[Array,String],default:()=>[]},direction:{type:String,default:"horizontal",validator:e=>["horizontal","vertical"].includes(e)},"onClick:prepend":ot(),"onClick:append":ot(),...ie(),...lt(),...ll(Qe(),["maxWidth","minWidth","width"]),...Pe(),...wu()},"VInput"),ct=R()({name:"VInput",props:{...Qt()},emits:{"update:modelValue":e=>!0},setup(e,n){let{attrs:t,slots:a,emit:l}=n;const{densityClasses:o}=gt(e),{dimensionStyles:i}=et(e),{themeClasses:r}=De(e),{rtlClasses:u}=nt(),{InputIcon:c}=bu(e),d=rt(),v=y(()=>e.id||`input-${d}`),f=y(()=>`${v.value}-messages`),{errorMessages:m,isDirty:b,isDisabled:h,isReadonly:g,isPristine:k,isValid:S,isValidating:C,reset:P,resetValidation:x,validate:_,validationClasses:T}=Vu(e,"v-input",v),V=y(()=>({id:v,messagesId:f,isDirty:b,isDisabled:h,isReadonly:g,isPristine:k,isValid:S,isValidating:C,reset:P,resetValidation:x,validate:_})),w=y(()=>{var $;return($=e.errorMessages)!=null&&$.length||!k.value&&m.value.length?m.value:e.hint&&(e.persistentHint||e.focused)?e.hint:e.messages});return W(()=>{var M,j,Y,le;const $=!!(a.prepend||e.prependIcon),p=!!(a.append||e.appendIcon),I=w.value.length>0,A=!e.hideDetails||e.hideDetails==="auto"&&(I||!!a.details);return s("div",{class:["v-input",`v-input--${e.direction}`,{"v-input--center-affix":e.centerAffix,"v-input--hide-spin-buttons":e.hideSpinButtons},o.value,r.value,u.value,T.value,e.class],style:[i.value,e.style]},[$&&s("div",{key:"prepend",class:"v-input__prepend"},[(M=a.prepend)==null?void 0:M.call(a,V.value),e.prependIcon&&s(c,{key:"prepend-icon",name:"prepend"},null)]),a.default&&s("div",{class:"v-input__control"},[(j=a.default)==null?void 0:j.call(a,V.value)]),p&&s("div",{key:"append",class:"v-input__append"},[e.appendIcon&&s(c,{key:"append-icon",name:"append"},null),(Y=a.append)==null?void 0:Y.call(a,V.value)]),A&&s("div",{class:"v-input__details"},[s(ku,{id:f.value,active:I,messages:w.value},{message:a.message}),(le=a.details)==null?void 0:le.call(a,V.value)])])}),{reset:P,resetValidation:x,validate:_,isValid:S,errorMessages:m}}}),Vk=B({...Qt(),...Je(yu(),["inline"])},"VCheckbox"),Ck=R()({name:"VCheckbox",inheritAttrs:!1,props:Vk(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const l=de(e,"modelValue"),{isFocused:o,focus:i,blur:r}=Jt(e),u=rt(),c=y(()=>e.id||`checkbox-${u}`);return W(()=>{const[d,v]=ln(t),f=ct.filterProps(e),m=Ut.filterProps(e);return s(ct,z({class:["v-checkbox",e.class]},d,f,{modelValue:l.value,"onUpdate:modelValue":b=>l.value=b,id:c.value,focused:o.value,style:e.style}),{...a,default:b=>{let{id:h,messagesId:g,isDisabled:k,isReadonly:S,isValid:C}=b;return s(Ut,z(m,{id:h.value,"aria-describedby":g.value,disabled:k.value,readonly:S.value},v,{error:C.value===!1,modelValue:l.value,"onUpdate:modelValue":P=>l.value=P,onFocus:i,onBlur:r}),a)}})}),{}}});function pk(e){let{selectedElement:n,containerElement:t,isRtl:a,isHorizontal:l}=e;const o=va(l,t),i=Cu(l,a,t),r=va(l,n),u=pu(l,n),c=r*.4;return i>u?u-c:i+otypeof e=="boolean"||["always","desktop","mobile"].includes(e)},...ie(),...In({mobile:null}),...Ve(),...Dn({selectedClass:"v-slide-group-item--active"})},"VSlideGroup"),fa=R()({name:"VSlideGroup",props:mi(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{isRtl:a}=nt(),{displayClasses:l,mobile:o}=$t(e),i=rn(e,e.symbol),r=ee(!1),u=ee(0),c=ee(0),d=ee(0),v=y(()=>e.direction==="horizontal"),{resizeRef:f,contentRect:m}=Lt(),{resizeRef:b,contentRect:h}=Lt(),g=cb(),k=y(()=>({container:f.el,duration:200,easing:"easeOutQuart"})),S=y(()=>i.selected.value.length?i.items.value.findIndex(E=>E.id===i.selected.value[0]):-1),C=y(()=>i.selected.value.length?i.items.value.findIndex(E=>E.id===i.selected.value[i.selected.value.length-1]):-1);if($e){let E=-1;Q(()=>[i.selected.value,m.value,h.value,v.value],()=>{cancelAnimationFrame(E),E=requestAnimationFrame(()=>{if(m.value&&h.value){const O=v.value?"width":"height";c.value=m.value[O],d.value=h.value[O],r.value=c.value+1=0&&b.el){const O=b.el.children[C.value];x(O,e.centerActive)}})})}const P=ee(!1);function x(E,O){let te=0;O?te=xk({containerElement:f.el,isHorizontal:v.value,selectedElement:E}):te=pk({containerElement:f.el,isHorizontal:v.value,isRtl:a.value,selectedElement:E}),_(te)}function _(E){if(!$e||!f.el)return;const O=va(v.value,f.el),te=Cu(v.value,a.value,f.el);if(!(Br(v.value,f.el)<=O||Math.abs(E-te)<16)){if(v.value&&a.value&&f.el){const{scrollWidth:ue,offsetWidth:ye}=f.el;E=ue-ye-E}v.value?g.horizontal(E,k.value):g(E,k.value)}}function T(E){const{scrollTop:O,scrollLeft:te}=E.target;u.value=v.value?te:O}function V(E){if(P.value=!0,!(!r.value||!b.el)){for(const O of E.composedPath())for(const te of b.el.children)if(te===O){x(te);return}}}function w(E){P.value=!1}let $=!1;function p(E){var O;!$&&!P.value&&!(E.relatedTarget&&((O=b.el)!=null&&O.contains(E.relatedTarget)))&&M(),$=!1}function I(){$=!0}function A(E){if(!b.el)return;function O(te){E.preventDefault(),M(te)}v.value?E.key==="ArrowRight"?O(a.value?"prev":"next"):E.key==="ArrowLeft"&&O(a.value?"next":"prev"):E.key==="ArrowDown"?O("next"):E.key==="ArrowUp"&&O("prev"),E.key==="Home"?O("first"):E.key==="End"&&O("last")}function M(E){var te,se;if(!b.el)return;let O;if(!E)O=oa(b.el)[0];else if(E==="next"){if(O=(te=b.el.querySelector(":focus"))==null?void 0:te.nextElementSibling,!O)return M("first")}else if(E==="prev"){if(O=(se=b.el.querySelector(":focus"))==null?void 0:se.previousElementSibling,!O)return M("last")}else E==="first"?O=b.el.firstElementChild:E==="last"&&(O=b.el.lastElementChild);O&&O.focus({preventScroll:!0})}function j(E){const O=v.value&&a.value?-1:1,te=(E==="prev"?-O:O)*c.value;let se=u.value+te;if(v.value&&a.value&&f.el){const{scrollWidth:ue,offsetWidth:ye}=f.el;se+=ue-ye}_(se)}const Y=y(()=>({next:i.next,prev:i.prev,select:i.select,isSelected:i.isSelected})),le=y(()=>{switch(e.showArrows){case"always":return!0;case"desktop":return!o.value;case!0:return r.value||Math.abs(u.value)>0;case"mobile":return o.value||r.value||Math.abs(u.value)>0;default:return!o.value&&(r.value||Math.abs(u.value)>0)}}),re=y(()=>Math.abs(u.value)>1),N=y(()=>{if(!f.value)return!1;const E=Br(v.value,f.el),O=_k(v.value,f.el);return E-O-Math.abs(u.value)>1});return W(()=>s(e.tag,{class:["v-slide-group",{"v-slide-group--vertical":!v.value,"v-slide-group--has-affixes":le.value,"v-slide-group--is-overflowing":r.value},l.value,e.class],style:e.style,tabindex:P.value||i.selected.value.length?-1:0,onFocus:p},{default:()=>{var E,O,te;return[le.value&&s("div",{key:"prev",class:["v-slide-group__prev",{"v-slide-group__prev--disabled":!re.value}],onMousedown:I,onClick:()=>re.value&&j("prev")},[((E=t.prev)==null?void 0:E.call(t,Y.value))??s(ua,null,{default:()=>[s(Be,{icon:a.value?e.nextIcon:e.prevIcon},null)]})]),s("div",{key:"container",ref:f,class:"v-slide-group__container",onScroll:T},[s("div",{ref:b,class:"v-slide-group__content",onFocusin:V,onFocusout:w,onKeydown:A},[(O=t.default)==null?void 0:O.call(t,Y.value)])]),le.value&&s("div",{key:"next",class:["v-slide-group__next",{"v-slide-group__next--disabled":!N.value}],onMousedown:I,onClick:()=>N.value&&j("next")},[((te=t.next)==null?void 0:te.call(t,Y.value))??s(ua,null,{default:()=>[s(Be,{icon:a.value?e.prevIcon:e.nextIcon},null)]})])]}})),{selected:i.selected,scrollTo:j,scrollOffset:u,focus:M,hasPrev:re,hasNext:N}}}),_u=Symbol.for("vuetify:v-chip-group"),Pk=B({column:Boolean,filter:Boolean,valueComparator:{type:Function,default:Ht},...mi(),...ie(),...Dn({selectedClass:"v-chip--selected"}),...Ve(),...Pe(),...Tt({variant:"tonal"})},"VChipGroup"),Ik=R()({name:"VChipGroup",props:Pk(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{isSelected:l,select:o,next:i,prev:r,selected:u}=rn(e,_u);return Ge({VChip:{color:F(e,"color"),disabled:F(e,"disabled"),filter:F(e,"filter"),variant:F(e,"variant")}}),W(()=>{const c=fa.filterProps(e);return s(fa,z(c,{class:["v-chip-group",{"v-chip-group--column":e.column},a.value,e.class],style:e.style}),{default:()=>{var d;return[(d=t.default)==null?void 0:d.call(t,{isSelected:l,select:o,next:i,prev:r,selected:u.value})]}})}),{}}}),$k=B({activeClass:String,appendAvatar:String,appendIcon:ve,closable:Boolean,closeIcon:{type:ve,default:"$delete"},closeLabel:{type:String,default:"$vuetify.close"},draggable:Boolean,filter:Boolean,filterIcon:{type:ve,default:"$complete"},label:Boolean,link:{type:Boolean,default:void 0},pill:Boolean,prependAvatar:String,prependIcon:ve,ripple:{type:[Boolean,Object],default:!0},text:String,modelValue:{type:Boolean,default:!0},onClick:ot(),onClickOnce:ot(),...wt(),...ie(),...lt(),...at(),...Ln(),...ze(),...Ca(),...jt(),...Ve({tag:"span"}),...Pe(),...Tt({variant:"tonal"})},"VChip"),ta=R()({name:"VChip",directives:{Ripple:Zt},props:$k(),emits:{"click:close":e=>!0,"update:modelValue":e=>!0,"group:selected":e=>!0,click:e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{t:o}=qe(),{borderClasses:i}=_t(e),{colorClasses:r,colorStyles:u,variantClasses:c}=Bn(e),{densityClasses:d}=gt(e),{elevationClasses:v}=st(e),{roundedClasses:f}=Ue(e),{sizeClasses:m}=Zn(e),{themeClasses:b}=De(e),h=de(e,"modelValue"),g=Mn(e,_u,!1),k=Va(e,t),S=y(()=>e.link!==!1&&k.isLink.value),C=y(()=>!e.disabled&&e.link!==!1&&(!!g||e.link||k.isClickable.value)),P=y(()=>({"aria-label":o(e.closeLabel),onClick(T){T.preventDefault(),T.stopPropagation(),h.value=!1,a("click:close",T)}}));function x(T){var V;a("click",T),C.value&&((V=k.navigate)==null||V.call(k,T),g==null||g.toggle())}function _(T){(T.key==="Enter"||T.key===" ")&&(T.preventDefault(),x(T))}return()=>{var j;const T=k.isLink.value?"a":e.tag,V=!!(e.appendIcon||e.appendAvatar),w=!!(V||l.append),$=!!(l.close||e.closable),p=!!(l.filter||e.filter)&&g,I=!!(e.prependIcon||e.prependAvatar),A=!!(I||l.prepend),M=!g||g.isSelected.value;return h.value&&je(s(T,z({class:["v-chip",{"v-chip--disabled":e.disabled,"v-chip--label":e.label,"v-chip--link":C.value,"v-chip--filter":p,"v-chip--pill":e.pill,[`${e.activeClass}`]:e.activeClass&&((j=k.isActive)==null?void 0:j.value)},b.value,i.value,M?r.value:void 0,d.value,v.value,f.value,m.value,c.value,g==null?void 0:g.selectedClass.value,e.class],style:[M?u.value:void 0,e.style],disabled:e.disabled||void 0,draggable:e.draggable,tabindex:C.value?0:void 0,onClick:x,onKeydown:C.value&&!S.value&&_},k.linkProps),{default:()=>{var Y;return[on(C.value,"v-chip"),p&&s(ci,{key:"filter"},{default:()=>[je(s("div",{class:"v-chip__filter"},[l.filter?s(pe,{key:"filter-defaults",disabled:!e.filterIcon,defaults:{VIcon:{icon:e.filterIcon}}},l.filter):s(Be,{key:"filter-icon",icon:e.filterIcon},null)]),[[Mt,g.isSelected.value]])]}),A&&s("div",{key:"prepend",class:"v-chip__prepend"},[l.prepend?s(pe,{key:"prepend-defaults",disabled:!I,defaults:{VAvatar:{image:e.prependAvatar,start:!0},VIcon:{icon:e.prependIcon,start:!0}}},l.prepend):s(ae,null,[e.prependIcon&&s(Be,{key:"prepend-icon",icon:e.prependIcon,start:!0},null),e.prependAvatar&&s(It,{key:"prepend-avatar",image:e.prependAvatar,start:!0},null)])]),s("div",{class:"v-chip__content","data-no-activator":""},[((Y=l.default)==null?void 0:Y.call(l,{isSelected:g==null?void 0:g.isSelected.value,selectedClass:g==null?void 0:g.selectedClass.value,select:g==null?void 0:g.select,toggle:g==null?void 0:g.toggle,value:g==null?void 0:g.value.value,disabled:e.disabled}))??e.text]),w&&s("div",{key:"append",class:"v-chip__append"},[l.append?s(pe,{key:"append-defaults",disabled:!V,defaults:{VAvatar:{end:!0,image:e.appendAvatar},VIcon:{end:!0,icon:e.appendIcon}}},l.append):s(ae,null,[e.appendIcon&&s(Be,{key:"append-icon",end:!0,icon:e.appendIcon},null),e.appendAvatar&&s(It,{key:"append-avatar",end:!0,image:e.appendAvatar},null)])]),$&&s("button",z({key:"close",class:"v-chip__close",type:"button","data-testid":"close-chip"},P.value),[l.close?s(pe,{key:"close-defaults",defaults:{VIcon:{icon:e.closeIcon,size:"x-small"}}},l.close):s(Be,{key:"close-icon",icon:e.closeIcon,size:"x-small"},null)])]}}),[[Ct("ripple"),C.value&&e.ripple,null]])}}}),go=Symbol.for("vuetify:list");function Pu(){const e=xe(go,{hasPrepend:ee(!1),updateHasPrepend:()=>null}),n={hasPrepend:ee(!1),updateHasPrepend:t=>{t&&(n.hasPrepend.value=t)}};return Re(go,n),e}function Iu(){return xe(go,null)}const gi=e=>{const n={activate:t=>{let{id:a,value:l,activated:o}=t;return a=Ze(a),e&&!l&&o.size===1&&o.has(a)||(l?o.add(a):o.delete(a)),o},in:(t,a,l)=>{let o=new Set;if(t!=null)for(const i of We(t))o=n.activate({id:i,value:!0,activated:new Set(o),children:a,parents:l});return o},out:t=>Array.from(t)};return n},$u=e=>{const n=gi(e);return{activate:a=>{let{activated:l,id:o,...i}=a;o=Ze(o);const r=l.has(o)?new Set([o]):new Set;return n.activate({...i,id:o,activated:r})},in:(a,l,o)=>{let i=new Set;if(a!=null){const r=We(a);r.length&&(i=n.in(r.slice(0,1),l,o))}return i},out:(a,l,o)=>n.out(a,l,o)}},Tk=e=>{const n=gi(e);return{activate:a=>{let{id:l,activated:o,children:i,...r}=a;return l=Ze(l),i.has(l)?o:n.activate({id:l,activated:o,children:i,...r})},in:n.in,out:n.out}},Ak=e=>{const n=$u(e);return{activate:a=>{let{id:l,activated:o,children:i,...r}=a;return l=Ze(l),i.has(l)?o:n.activate({id:l,activated:o,children:i,...r})},in:n.in,out:n.out}},Bk={open:e=>{let{id:n,value:t,opened:a,parents:l}=e;if(t){const o=new Set;o.add(n);let i=l.get(n);for(;i!=null;)o.add(i),i=l.get(i);return o}else return a.delete(n),a},select:()=>null},Tu={open:e=>{let{id:n,value:t,opened:a,parents:l}=e;if(t){let o=l.get(n);for(a.add(n);o!=null&&o!==n;)a.add(o),o=l.get(o);return a}else a.delete(n);return a},select:()=>null},Dk={open:Tu.open,select:e=>{let{id:n,value:t,opened:a,parents:l}=e;if(!t)return a;const o=[];let i=l.get(n);for(;i!=null;)o.push(i),i=l.get(i);return new Set(o)}},hi=e=>{const n={select:t=>{let{id:a,value:l,selected:o}=t;if(a=Ze(a),e&&!l){const i=Array.from(o.entries()).reduce((r,u)=>{let[c,d]=u;return d==="on"&&r.push(c),r},[]);if(i.length===1&&i[0]===a)return o}return o.set(a,l?"on":"off"),o},in:(t,a,l)=>{let o=new Map;for(const i of t||[])o=n.select({id:i,value:!0,selected:new Map(o),children:a,parents:l});return o},out:t=>{const a=[];for(const[l,o]of t.entries())o==="on"&&a.push(l);return a}};return n},Au=e=>{const n=hi(e);return{select:a=>{let{selected:l,id:o,...i}=a;o=Ze(o);const r=l.has(o)?new Map([[o,l.get(o)]]):new Map;return n.select({...i,id:o,selected:r})},in:(a,l,o)=>{let i=new Map;return a!=null&&a.length&&(i=n.in(a.slice(0,1),l,o)),i},out:(a,l,o)=>n.out(a,l,o)}},Lk=e=>{const n=hi(e);return{select:a=>{let{id:l,selected:o,children:i,...r}=a;return l=Ze(l),i.has(l)?o:n.select({id:l,selected:o,children:i,...r})},in:n.in,out:n.out}},Mk=e=>{const n=Au(e);return{select:a=>{let{id:l,selected:o,children:i,...r}=a;return l=Ze(l),i.has(l)?o:n.select({id:l,selected:o,children:i,...r})},in:n.in,out:n.out}},Ek=e=>{const n={select:t=>{let{id:a,value:l,selected:o,children:i,parents:r}=t;a=Ze(a);const u=new Map(o),c=[a];for(;c.length;){const v=c.shift();o.set(Ze(v),l?"on":"off"),i.has(v)&&c.push(...i.get(v))}let d=Ze(r.get(a));for(;d;){const v=i.get(d),f=v.every(b=>o.get(Ze(b))==="on"),m=v.every(b=>!o.has(Ze(b))||o.get(Ze(b))==="off");o.set(d,f?"on":m?"off":"indeterminate"),d=Ze(r.get(d))}return e&&!l&&Array.from(o.entries()).reduce((f,m)=>{let[b,h]=m;return h==="on"&&f.push(b),f},[]).length===0?u:o},in:(t,a,l)=>{let o=new Map;for(const i of t||[])o=n.select({id:i,value:!0,selected:new Map(o),children:a,parents:l});return o},out:(t,a)=>{const l=[];for(const[o,i]of t.entries())i==="on"&&!a.has(o)&&l.push(o);return l}};return n},ma=Symbol.for("vuetify:nested"),Bu={id:ee(),root:{register:()=>null,unregister:()=>null,parents:H(new Map),children:H(new Map),open:()=>null,openOnSelect:()=>null,activate:()=>null,select:()=>null,activatable:H(!1),selectable:H(!1),opened:H(new Set),activated:H(new Set),selected:H(new Map),selectedValues:H([]),getPath:()=>[]}},Fk=B({activatable:Boolean,selectable:Boolean,activeStrategy:[String,Function,Object],selectStrategy:[String,Function,Object],openStrategy:[String,Object],opened:null,activated:null,selected:null,mandatory:Boolean},"nested"),Ok=e=>{let n=!1;const t=H(new Map),a=H(new Map),l=de(e,"opened",e.opened,b=>new Set(b),b=>[...b.values()]),o=y(()=>{if(typeof e.activeStrategy=="object")return e.activeStrategy;if(typeof e.activeStrategy=="function")return e.activeStrategy(e.mandatory);switch(e.activeStrategy){case"leaf":return Tk(e.mandatory);case"single-leaf":return Ak(e.mandatory);case"independent":return gi(e.mandatory);case"single-independent":default:return $u(e.mandatory)}}),i=y(()=>{if(typeof e.selectStrategy=="object")return e.selectStrategy;if(typeof e.selectStrategy=="function")return e.selectStrategy(e.mandatory);switch(e.selectStrategy){case"single-leaf":return Mk(e.mandatory);case"leaf":return Lk(e.mandatory);case"independent":return hi(e.mandatory);case"single-independent":return Au(e.mandatory);case"classic":default:return Ek(e.mandatory)}}),r=y(()=>{if(typeof e.openStrategy=="object")return e.openStrategy;switch(e.openStrategy){case"list":return Dk;case"single":return Bk;case"multiple":default:return Tu}}),u=de(e,"activated",e.activated,b=>o.value.in(b,t.value,a.value),b=>o.value.out(b,t.value,a.value)),c=de(e,"selected",e.selected,b=>i.value.in(b,t.value,a.value),b=>i.value.out(b,t.value,a.value));it(()=>{n=!0});function d(b){const h=[];let g=b;for(;g!=null;)h.unshift(g),g=a.value.get(g);return h}const v=Ye("nested"),f=new Set,m={id:ee(),root:{opened:l,activatable:F(e,"activatable"),selectable:F(e,"selectable"),activated:u,selected:c,selectedValues:y(()=>{const b=[];for(const[h,g]of c.value.entries())g==="on"&&b.push(h);return b}),register:(b,h,g)=>{if(f.has(b)){d(b).map(String).join(" -> "),d(h).concat(b).map(String).join(" -> ");return}else f.add(b);h&&b!==h&&a.value.set(b,h),g&&t.value.set(b,[]),h!=null&&t.value.set(h,[...t.value.get(h)||[],b])},unregister:b=>{if(n)return;f.delete(b),t.value.delete(b);const h=a.value.get(b);if(h){const g=t.value.get(h)??[];t.value.set(h,g.filter(k=>k!==b))}a.value.delete(b)},open:(b,h,g)=>{v.emit("click:open",{id:b,value:h,path:d(b),event:g});const k=r.value.open({id:b,value:h,opened:new Set(l.value),children:t.value,parents:a.value,event:g});k&&(l.value=k)},openOnSelect:(b,h,g)=>{const k=r.value.select({id:b,value:h,selected:new Map(c.value),opened:new Set(l.value),children:t.value,parents:a.value,event:g});k&&(l.value=k)},select:(b,h,g)=>{v.emit("click:select",{id:b,value:h,path:d(b),event:g});const k=i.value.select({id:b,value:h,selected:new Map(c.value),children:t.value,parents:a.value,event:g});k&&(c.value=k),m.root.openOnSelect(b,h,g)},activate:(b,h,g)=>{if(!e.activatable)return m.root.select(b,!0,g);v.emit("click:activate",{id:b,value:h,path:d(b),event:g});const k=o.value.activate({id:b,value:h,activated:new Set(u.value),children:t.value,parents:a.value,event:g});k&&(u.value=k)},children:t,parents:a,getPath:d}};return Re(ma,m),m.root},Du=(e,n)=>{const t=xe(ma,Bu),a=Symbol(rt()),l=y(()=>e.value!==void 0?e.value:a),o={...t,id:l,open:(i,r)=>t.root.open(l.value,i,r),openOnSelect:(i,r)=>t.root.openOnSelect(l.value,i,r),isOpen:y(()=>t.root.opened.value.has(l.value)),parent:y(()=>t.root.parents.value.get(l.value)),activate:(i,r)=>t.root.activate(l.value,i,r),isActivated:y(()=>t.root.activated.value.has(Ze(l.value))),select:(i,r)=>t.root.select(l.value,i,r),isSelected:y(()=>t.root.selected.value.get(Ze(l.value))==="on"),isIndeterminate:y(()=>t.root.selected.value.get(l.value)==="indeterminate"),isLeaf:y(()=>!t.root.children.value.get(l.value)),isGroupActivator:t.isGroupActivator};return!t.isGroupActivator&&t.root.register(l.value,t.id.value,n),it(()=>{!t.isGroupActivator&&t.root.unregister(l.value)}),n&&Re(ma,o),o},Nk=()=>{const e=xe(ma,Bu);Re(ma,{...e,isGroupActivator:!0})},Rk=pt({name:"VListGroupActivator",setup(e,n){let{slots:t}=n;return Nk(),()=>{var a;return(a=t.default)==null?void 0:a.call(t)}}}),Hk=B({activeColor:String,baseColor:String,color:String,collapseIcon:{type:ve,default:"$collapse"},expandIcon:{type:ve,default:"$expand"},prependIcon:ve,appendIcon:ve,fluid:Boolean,subgroup:Boolean,title:String,value:null,...ie(),...Ve()},"VListGroup"),ho=R()({name:"VListGroup",props:Hk(),setup(e,n){let{slots:t}=n;const{isOpen:a,open:l,id:o}=Du(F(e,"value"),!0),i=y(()=>`v-list-group--id-${String(o.value)}`),r=Iu(),{isBooted:u}=An();function c(m){m.stopPropagation(),l(!a.value,m)}const d=y(()=>({onClick:c,class:"v-list-group__header",id:i.value})),v=y(()=>a.value?e.collapseIcon:e.expandIcon),f=y(()=>({VListItem:{active:a.value,activeColor:e.activeColor,baseColor:e.baseColor,color:e.color,prependIcon:e.prependIcon||e.subgroup&&v.value,appendIcon:e.appendIcon||!e.subgroup&&v.value,title:e.title,value:e.value}}));return W(()=>s(e.tag,{class:["v-list-group",{"v-list-group--prepend":r==null?void 0:r.hasPrepend.value,"v-list-group--fluid":e.fluid,"v-list-group--subgroup":e.subgroup,"v-list-group--open":a.value},e.class],style:e.style},{default:()=>[t.activator&&s(pe,{defaults:f.value},{default:()=>[s(Rk,null,{default:()=>[t.activator({props:d.value,isOpen:a.value})]})]}),s(ft,{transition:{component:vl},disabled:!u.value},{default:()=>{var m;return[je(s("div",{class:"v-list-group__items",role:"group","aria-labelledby":i.value},[(m=t.default)==null?void 0:m.call(t)]),[[Mt,a.value]])]}})]})),{isOpen:a}}}),zk=B({opacity:[Number,String],...ie(),...Ve()},"VListItemSubtitle"),Lu=R()({name:"VListItemSubtitle",props:zk(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-list-item-subtitle",e.class],style:[{"--v-list-item-subtitle-opacity":e.opacity},e.style]},t)),{}}}),Mu=Wt("v-list-item-title"),Wk=B({active:{type:Boolean,default:void 0},activeClass:String,activeColor:String,appendAvatar:String,appendIcon:ve,baseColor:String,disabled:Boolean,lines:[Boolean,String],link:{type:Boolean,default:void 0},nav:Boolean,prependAvatar:String,prependIcon:ve,ripple:{type:[Boolean,Object],default:!0},slim:Boolean,subtitle:[String,Number],title:[String,Number],value:null,onClick:ot(),onClickOnce:ot(),...wt(),...ie(),...lt(),...Qe(),...at(),...ze(),...Ca(),...Ve(),...Pe(),...Tt({variant:"text"})},"VListItem"),Kt=R()({name:"VListItem",directives:{Ripple:Zt},props:Wk(),emits:{click:e=>!0},setup(e,n){let{attrs:t,slots:a,emit:l}=n;const o=Va(e,t),i=y(()=>e.value===void 0?o.href.value:e.value),{activate:r,isActivated:u,select:c,isOpen:d,isSelected:v,isIndeterminate:f,isGroupActivator:m,root:b,parent:h,openOnSelect:g,id:k}=Du(i,!1),S=Iu(),C=y(()=>{var se;return e.active!==!1&&(e.active||((se=o.isActive)==null?void 0:se.value)||(b.activatable.value?u.value:v.value))}),P=y(()=>e.link!==!1&&o.isLink.value),x=y(()=>!!S&&(b.selectable.value||b.activatable.value||e.value!=null)),_=y(()=>!e.disabled&&e.link!==!1&&(e.link||o.isClickable.value||x.value)),T=y(()=>e.rounded||e.nav),V=y(()=>e.color??e.activeColor),w=y(()=>({color:C.value?V.value??e.baseColor:e.baseColor,variant:e.variant}));Q(()=>{var se;return(se=o.isActive)==null?void 0:se.value},se=>{se&&h.value!=null&&b.open(h.value,!0),se&&g(se)},{immediate:!0});const{themeClasses:$}=De(e),{borderClasses:p}=_t(e),{colorClasses:I,colorStyles:A,variantClasses:M}=Bn(w),{densityClasses:j}=gt(e),{dimensionStyles:Y}=et(e),{elevationClasses:le}=st(e),{roundedClasses:re}=Ue(T),N=y(()=>e.lines?`v-list-item--${e.lines}-line`:void 0),E=y(()=>({isActive:C.value,select:c,isOpen:d.value,isSelected:v.value,isIndeterminate:f.value}));function O(se){var ue;l("click",se),_.value&&((ue=o.navigate)==null||ue.call(o,se),!m&&(b.activatable.value?r(!u.value,se):(b.selectable.value||e.value!=null)&&c(!v.value,se)))}function te(se){(se.key==="Enter"||se.key===" ")&&(se.preventDefault(),se.target.dispatchEvent(new MouseEvent("click",se)))}return W(()=>{const se=P.value?"a":e.tag,ue=a.title||e.title!=null,ye=a.subtitle||e.subtitle!=null,G=!!(e.appendAvatar||e.appendIcon),ce=!!(G||a.append),me=!!(e.prependAvatar||e.prependIcon),Me=!!(me||a.prepend);return S==null||S.updateHasPrepend(Me),e.activeColor&&jh("active-color",["color","base-color"]),je(s(se,z({class:["v-list-item",{"v-list-item--active":C.value,"v-list-item--disabled":e.disabled,"v-list-item--link":_.value,"v-list-item--nav":e.nav,"v-list-item--prepend":!Me&&(S==null?void 0:S.hasPrepend.value),"v-list-item--slim":e.slim,[`${e.activeClass}`]:e.activeClass&&C.value},$.value,p.value,I.value,j.value,le.value,N.value,re.value,M.value,e.class],style:[A.value,Y.value,e.style],tabindex:_.value?S?-2:0:void 0,"aria-selected":x.value?b.activatable.value?u.value:b.selectable.value?v.value:C.value:void 0,onClick:O,onKeydown:_.value&&!P.value&&te},o.linkProps),{default:()=>{var Ie;return[on(_.value||C.value,"v-list-item"),Me&&s("div",{key:"prepend",class:"v-list-item__prepend"},[a.prepend?s(pe,{key:"prepend-defaults",disabled:!me,defaults:{VAvatar:{density:e.density,image:e.prependAvatar},VIcon:{density:e.density,icon:e.prependIcon},VListItemAction:{start:!0}}},{default:()=>{var Z;return[(Z=a.prepend)==null?void 0:Z.call(a,E.value)]}}):s(ae,null,[e.prependAvatar&&s(It,{key:"prepend-avatar",density:e.density,image:e.prependAvatar},null),e.prependIcon&&s(Be,{key:"prepend-icon",density:e.density,icon:e.prependIcon},null)]),s("div",{class:"v-list-item__spacer"},null)]),s("div",{class:"v-list-item__content","data-no-activator":""},[ue&&s(Mu,{key:"title"},{default:()=>{var Z;return[((Z=a.title)==null?void 0:Z.call(a,{title:e.title}))??e.title]}}),ye&&s(Lu,{key:"subtitle"},{default:()=>{var Z;return[((Z=a.subtitle)==null?void 0:Z.call(a,{subtitle:e.subtitle}))??e.subtitle]}}),(Ie=a.default)==null?void 0:Ie.call(a,E.value)]),ce&&s("div",{key:"append",class:"v-list-item__append"},[a.append?s(pe,{key:"append-defaults",disabled:!G,defaults:{VAvatar:{density:e.density,image:e.appendAvatar},VIcon:{density:e.density,icon:e.appendIcon},VListItemAction:{end:!0}}},{default:()=>{var Z;return[(Z=a.append)==null?void 0:Z.call(a,E.value)]}}):s(ae,null,[e.appendIcon&&s(Be,{key:"append-icon",density:e.density,icon:e.appendIcon},null),e.appendAvatar&&s(It,{key:"append-avatar",density:e.density,image:e.appendAvatar},null)]),s("div",{class:"v-list-item__spacer"},null)])]}}),[[Ct("ripple"),_.value&&e.ripple]])}),{activate:r,isActivated:u,isGroupActivator:m,isSelected:v,list:S,select:c,root:b,id:k}}}),jk=B({color:String,inset:Boolean,sticky:Boolean,title:String,...ie(),...Ve()},"VListSubheader"),Eu=R()({name:"VListSubheader",props:jk(),setup(e,n){let{slots:t}=n;const{textColorClasses:a,textColorStyles:l}=ut(F(e,"color"));return W(()=>{const o=!!(t.default||e.title);return s(e.tag,{class:["v-list-subheader",{"v-list-subheader--inset":e.inset,"v-list-subheader--sticky":e.sticky},a.value,e.class],style:[{textColorStyles:l},e.style]},{default:()=>{var i;return[o&&s("div",{class:"v-list-subheader__text"},[((i=t.default)==null?void 0:i.call(t))??e.title])]}})}),{}}}),Gk=B({color:String,inset:Boolean,length:[Number,String],opacity:[Number,String],thickness:[Number,String],vertical:Boolean,...ie(),...Pe()},"VDivider"),xa=R()({name:"VDivider",props:Gk(),setup(e,n){let{attrs:t,slots:a}=n;const{themeClasses:l}=De(e),{textColorClasses:o,textColorStyles:i}=ut(F(e,"color")),r=y(()=>{const u={};return e.length&&(u[e.vertical?"height":"width"]=ne(e.length)),e.thickness&&(u[e.vertical?"borderRightWidth":"borderTopWidth"]=ne(e.thickness)),u});return W(()=>{const u=s("hr",{class:[{"v-divider":!0,"v-divider--inset":e.inset,"v-divider--vertical":e.vertical},l.value,o.value,e.class],style:[r.value,i.value,{"--v-border-opacity":e.opacity},e.style],"aria-orientation":!t.role||t.role==="separator"?e.vertical?"vertical":"horizontal":void 0,role:`${t.role||"separator"}`},null);return a.default?s("div",{class:["v-divider__wrapper",{"v-divider__wrapper--vertical":e.vertical,"v-divider__wrapper--inset":e.inset}]},[u,s("div",{class:"v-divider__content"},[a.default()]),u]):u}),{}}}),Yk=B({items:Array,returnObject:Boolean},"VListChildren"),Fu=R()({name:"VListChildren",props:Yk(),setup(e,n){let{slots:t}=n;return Pu(),()=>{var a,l;return((a=t.default)==null?void 0:a.call(t))??((l=e.items)==null?void 0:l.map(o=>{var f,m;let{children:i,props:r,type:u,raw:c}=o;if(u==="divider")return((f=t.divider)==null?void 0:f.call(t,{props:r}))??s(xa,r,null);if(u==="subheader")return((m=t.subheader)==null?void 0:m.call(t,{props:r}))??s(Eu,r,null);const d={subtitle:t.subtitle?b=>{var h;return(h=t.subtitle)==null?void 0:h.call(t,{...b,item:c})}:void 0,prepend:t.prepend?b=>{var h;return(h=t.prepend)==null?void 0:h.call(t,{...b,item:c})}:void 0,append:t.append?b=>{var h;return(h=t.append)==null?void 0:h.call(t,{...b,item:c})}:void 0,title:t.title?b=>{var h;return(h=t.title)==null?void 0:h.call(t,{...b,item:c})}:void 0},v=ho.filterProps(r);return i?s(ho,z({value:r==null?void 0:r.value},v),{activator:b=>{let{props:h}=b;const g={...r,...h,value:e.returnObject?c:r.value};return t.header?t.header({props:g}):s(Kt,g,d)},default:()=>s(Fu,{items:i,returnObject:e.returnObject},t)}):t.item?t.item({props:r}):s(Kt,z(r,{value:e.returnObject?c:r.value}),d)}))}}}),Ou=B({items:{type:Array,default:()=>[]},itemTitle:{type:[String,Array,Function],default:"title"},itemValue:{type:[String,Array,Function],default:"value"},itemChildren:{type:[Boolean,String,Array,Function],default:"children"},itemProps:{type:[Boolean,String,Array,Function],default:"props"},returnObject:Boolean,valueComparator:{type:Function,default:Ht}},"list-items");function en(e,n){const t=tt(n,e.itemTitle,n),a=tt(n,e.itemValue,t),l=tt(n,e.itemChildren),o=e.itemProps===!0?typeof n=="object"&&n!=null&&!Array.isArray(n)?"children"in n?Je(n,["children"]):n:void 0:tt(n,e.itemProps),i={title:t,value:a,...o};return{title:String(i.title??""),value:i.value,props:i,children:Array.isArray(l)?Nu(e,l):void 0,raw:n}}function Nu(e,n){const t=[];for(const a of n)t.push(en(e,a));return t}function yi(e){const n=y(()=>Nu(e,e.items)),t=y(()=>n.value.some(o=>o.value===null));function a(o){return t.value||(o=o.filter(i=>i!==null)),o.map(i=>e.returnObject&&typeof i=="string"?en(e,i):n.value.find(r=>e.valueComparator(i,r.value))||en(e,i))}function l(o){return e.returnObject?o.map(i=>{let{raw:r}=i;return r}):o.map(i=>{let{value:r}=i;return r})}return{items:n,transformIn:a,transformOut:l}}function Uk(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"}function Kk(e,n){const t=tt(n,e.itemType,"item"),a=Uk(n)?n:tt(n,e.itemTitle),l=tt(n,e.itemValue,void 0),o=tt(n,e.itemChildren),i=e.itemProps===!0?Je(n,["children"]):tt(n,e.itemProps),r={title:a,value:l,...i};return{type:t,title:r.title,value:r.value,props:r,children:t==="item"&&o?Ru(e,o):void 0,raw:n}}function Ru(e,n){const t=[];for(const a of n)t.push(Kk(e,a));return t}function qk(e){return{items:y(()=>Ru(e,e.items))}}const Xk=B({baseColor:String,activeColor:String,activeClass:String,bgColor:String,disabled:Boolean,expandIcon:ve,collapseIcon:ve,lines:{type:[Boolean,String],default:"one"},slim:Boolean,nav:Boolean,"onClick:open":ot(),"onClick:select":ot(),"onUpdate:opened":ot(),...Fk({selectStrategy:"single-leaf",openStrategy:"list"}),...wt(),...ie(),...lt(),...Qe(),...at(),itemType:{type:String,default:"type"},...Ou(),...ze(),...Ve(),...Pe(),...Tt({variant:"text"})},"VList"),kl=R()({name:"VList",props:Xk(),emits:{"update:selected":e=>!0,"update:activated":e=>!0,"update:opened":e=>!0,"click:open":e=>!0,"click:activate":e=>!0,"click:select":e=>!0},setup(e,n){let{slots:t}=n;const{items:a}=qk(e),{themeClasses:l}=De(e),{backgroundColorClasses:o,backgroundColorStyles:i}=Le(F(e,"bgColor")),{borderClasses:r}=_t(e),{densityClasses:u}=gt(e),{dimensionStyles:c}=et(e),{elevationClasses:d}=st(e),{roundedClasses:v}=Ue(e),{children:f,open:m,parents:b,select:h,getPath:g}=Ok(e),k=y(()=>e.lines?`v-list--${e.lines}-line`:void 0),S=F(e,"activeColor"),C=F(e,"baseColor"),P=F(e,"color");Pu(),Ge({VListGroup:{activeColor:S,baseColor:C,color:P,expandIcon:F(e,"expandIcon"),collapseIcon:F(e,"collapseIcon")},VListItem:{activeClass:F(e,"activeClass"),activeColor:S,baseColor:C,color:P,density:F(e,"density"),disabled:F(e,"disabled"),lines:F(e,"lines"),nav:F(e,"nav"),slim:F(e,"slim"),variant:F(e,"variant")}});const x=ee(!1),_=H();function T(A){x.value=!0}function V(A){x.value=!1}function w(A){var M;!x.value&&!(A.relatedTarget&&((M=_.value)!=null&&M.contains(A.relatedTarget)))&&I()}function $(A){const M=A.target;if(!(!_.value||["INPUT","TEXTAREA"].includes(M.tagName))){if(A.key==="ArrowDown")I("next");else if(A.key==="ArrowUp")I("prev");else if(A.key==="Home")I("first");else if(A.key==="End")I("last");else return;A.preventDefault()}}function p(A){x.value=!0}function I(A){if(_.value)return gn(_.value,A)}return W(()=>s(e.tag,{ref:_,class:["v-list",{"v-list--disabled":e.disabled,"v-list--nav":e.nav,"v-list--slim":e.slim},l.value,o.value,r.value,u.value,d.value,k.value,v.value,e.class],style:[i.value,c.value,e.style],tabindex:e.disabled||x.value?-1:0,role:"listbox","aria-activedescendant":void 0,onFocusin:T,onFocusout:V,onFocus:w,onKeydown:$,onMousedown:p},{default:()=>[s(Fu,{items:a.value,returnObject:e.returnObject},t)]})),{open:m,select:h,focus:I,children:f,parents:b,getPath:g}}}),Zk=Wt("v-list-img"),Jk=B({start:Boolean,end:Boolean,...ie(),...Ve()},"VListItemAction"),Qk=R()({name:"VListItemAction",props:Jk(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-list-item-action",{"v-list-item-action--start":e.start,"v-list-item-action--end":e.end},e.class],style:e.style},t)),{}}}),eS=B({start:Boolean,end:Boolean,...ie(),...Ve()},"VListItemMedia"),tS=R()({name:"VListItemMedia",props:eS(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-list-item-media",{"v-list-item-media--start":e.start,"v-list-item-media--end":e.end},e.class],style:e.style},t)),{}}});function zl(e,n){return{x:e.x+n.x,y:e.y+n.y}}function nS(e,n){return{x:e.x-n.x,y:e.y-n.y}}function Dr(e,n){if(e.side==="top"||e.side==="bottom"){const{side:t,align:a}=e,l=a==="left"?0:a==="center"?n.width/2:a==="right"?n.width:a,o=t==="top"?0:t==="bottom"?n.height:t;return zl({x:l,y:o},n)}else if(e.side==="left"||e.side==="right"){const{side:t,align:a}=e,l=t==="left"?0:t==="right"?n.width:t,o=a==="top"?0:a==="center"?n.height/2:a==="bottom"?n.height:a;return zl({x:l,y:o},n)}return zl({x:n.width/2,y:n.height/2},n)}const Hu={static:oS,connected:rS},aS=B({locationStrategy:{type:[String,Function],default:"static",validator:e=>typeof e=="function"||e in Hu},location:{type:String,default:"bottom"},origin:{type:String,default:"auto"},offset:[Number,String,Array]},"VOverlay-location-strategies");function lS(e,n){const t=H({}),a=H();$e&&yt(()=>!!(n.isActive.value&&e.locationStrategy),o=>{var i,r;Q(()=>e.locationStrategy,o),mt(()=>{window.removeEventListener("resize",l),a.value=void 0}),window.addEventListener("resize",l,{passive:!0}),typeof e.locationStrategy=="function"?a.value=(i=e.locationStrategy(n,e,t))==null?void 0:i.updateLocation:a.value=(r=Hu[e.locationStrategy](n,e,t))==null?void 0:r.updateLocation});function l(o){var i;(i=a.value)==null||i.call(a,o)}return{contentStyles:t,updateLocation:a}}function oS(){}function iS(e,n){const t=Jo(e);return n?t.x+=parseFloat(e.style.right||0):t.x-=parseFloat(e.style.left||0),t.y-=parseFloat(e.style.top||0),t}function rS(e,n,t){(Array.isArray(e.target.value)||dy(e.target.value))&&Object.assign(t.value,{position:"fixed",top:0,[e.isRtl.value?"right":"left"]:0});const{preferredAnchor:l,preferredOrigin:o}=Xo(()=>{const b=to(n.location,e.isRtl.value),h=n.origin==="overlap"?b:n.origin==="auto"?Fl(b):to(n.origin,e.isRtl.value);return b.side===h.side&&b.align===Ol(h).align?{preferredAnchor:er(b),preferredOrigin:er(h)}:{preferredAnchor:b,preferredOrigin:h}}),[i,r,u,c]=["minWidth","minHeight","maxWidth","maxHeight"].map(b=>y(()=>{const h=parseFloat(n[b]);return isNaN(h)?1/0:h})),d=y(()=>{if(Array.isArray(n.offset))return n.offset;if(typeof n.offset=="string"){const b=n.offset.split(" ").map(parseFloat);return b.length<2&&b.push(0),b}return typeof n.offset=="number"?[n.offset,0]:[0,0]});let v=!1;const f=new ResizeObserver(()=>{v&&m()});Q([e.target,e.contentEl],(b,h)=>{let[g,k]=b,[S,C]=h;S&&!Array.isArray(S)&&f.unobserve(S),g&&!Array.isArray(g)&&f.observe(g),C&&f.unobserve(C),k&&f.observe(k)},{immediate:!0}),mt(()=>{f.disconnect()});function m(){if(v=!1,requestAnimationFrame(()=>v=!0),!e.target.value||!e.contentEl.value)return;const b=Ss(e.target.value),h=iS(e.contentEl.value,e.isRtl.value),g=Ua(e.contentEl.value),k=12;g.length||(g.push(document.documentElement),e.contentEl.value.style.top&&e.contentEl.value.style.left||(h.x-=parseFloat(document.documentElement.style.getPropertyValue("--v-body-scroll-x")||0),h.y-=parseFloat(document.documentElement.style.getPropertyValue("--v-body-scroll-y")||0)));const S=g.reduce((p,I)=>{const A=I.getBoundingClientRect(),M=new hn({x:I===document.documentElement?0:A.x,y:I===document.documentElement?0:A.y,width:I.clientWidth,height:I.clientHeight});return p?new hn({x:Math.max(p.left,M.left),y:Math.max(p.top,M.top),width:Math.min(p.right,M.right)-Math.max(p.left,M.left),height:Math.min(p.bottom,M.bottom)-Math.max(p.top,M.top)}):M},void 0);S.x+=k,S.y+=k,S.width-=k*2,S.height-=k*2;let C={anchor:l.value,origin:o.value};function P(p){const I=new hn(h),A=Dr(p.anchor,b),M=Dr(p.origin,I);let{x:j,y:Y}=nS(A,M);switch(p.anchor.side){case"top":Y-=d.value[0];break;case"bottom":Y+=d.value[0];break;case"left":j-=d.value[0];break;case"right":j+=d.value[0];break}switch(p.anchor.align){case"top":Y-=d.value[1];break;case"bottom":Y+=d.value[1];break;case"left":j-=d.value[1];break;case"right":j+=d.value[1];break}return I.x+=j,I.y+=Y,I.width=Math.min(I.width,u.value),I.height=Math.min(I.height,c.value),{overflows:nr(I,S),x:j,y:Y}}let x=0,_=0;const T={x:0,y:0},V={x:!1,y:!1};let w=-1;for(;!(w++>10);){const{x:p,y:I,overflows:A}=P(C);x+=p,_+=I,h.x+=p,h.y+=I;{const M=tr(C.anchor),j=A.x.before||A.x.after,Y=A.y.before||A.y.after;let le=!1;if(["x","y"].forEach(re=>{if(re==="x"&&j&&!V.x||re==="y"&&Y&&!V.y){const N={anchor:{...C.anchor},origin:{...C.origin}},E=re==="x"?M==="y"?Ol:Fl:M==="y"?Fl:Ol;N.anchor=E(N.anchor),N.origin=E(N.origin);const{overflows:O}=P(N);(O[re].before<=A[re].before&&O[re].after<=A[re].after||O[re].before+O[re].after<(A[re].before+A[re].after)/2)&&(C=N,le=V[re]=!0)}}),le)continue}A.x.before&&(x+=A.x.before,h.x+=A.x.before),A.x.after&&(x-=A.x.after,h.x-=A.x.after),A.y.before&&(_+=A.y.before,h.y+=A.y.before),A.y.after&&(_-=A.y.after,h.y-=A.y.after);{const M=nr(h,S);T.x=S.width-M.x.before-M.x.after,T.y=S.height-M.y.before-M.y.after,x+=M.x.before,h.x+=M.x.before,_+=M.y.before,h.y+=M.y.before}break}const $=tr(C.anchor);return Object.assign(t.value,{"--v-overlay-anchor-origin":`${C.anchor.side} ${C.anchor.align}`,transformOrigin:`${C.origin.side} ${C.origin.align}`,top:ne(Wl(_)),left:e.isRtl.value?void 0:ne(Wl(x)),right:e.isRtl.value?ne(Wl(-x)):void 0,minWidth:ne($==="y"?Math.min(i.value,b.width):i.value),maxWidth:ne(Lr(Xe(T.x,i.value===1/0?0:i.value,u.value))),maxHeight:ne(Lr(Xe(T.y,r.value===1/0?0:r.value,c.value)))}),{available:T,contentBox:h}}return Q(()=>[l.value,o.value,n.offset,n.minWidth,n.minHeight,n.maxWidth,n.maxHeight],()=>m()),Te(()=>{const b=m();if(!b)return;const{available:h,contentBox:g}=b;g.height>h.y&&requestAnimationFrame(()=>{m(),requestAnimationFrame(()=>{m()})})}),{updateLocation:m}}function Wl(e){return Math.round(e*devicePixelRatio)/devicePixelRatio}function Lr(e){return Math.ceil(e*devicePixelRatio)/devicePixelRatio}let yo=!0;const Xa=[];function sS(e){!yo||Xa.length?(Xa.push(e),bo()):(yo=!1,e(),bo())}let Mr=-1;function bo(){cancelAnimationFrame(Mr),Mr=requestAnimationFrame(()=>{const e=Xa.shift();e&&e(),Xa.length?bo():yo=!0})}const Ha={none:null,close:dS,block:vS,reposition:fS},uS=B({scrollStrategy:{type:[String,Function],default:"block",validator:e=>typeof e=="function"||e in Ha}},"VOverlay-scroll-strategies");function cS(e,n){if(!$e)return;let t;He(async()=>{t==null||t.stop(),n.isActive.value&&e.scrollStrategy&&(t=Fo(),await new Promise(a=>setTimeout(a)),t.active&&t.run(()=>{var a;typeof e.scrollStrategy=="function"?e.scrollStrategy(n,e,t):(a=Ha[e.scrollStrategy])==null||a.call(Ha,n,e,t)}))}),mt(()=>{t==null||t.stop()})}function dS(e){function n(t){e.isActive.value=!1}zu(e.targetEl.value??e.contentEl.value,n)}function vS(e,n){var i;const t=(i=e.root.value)==null?void 0:i.offsetParent,a=[...new Set([...Ua(e.targetEl.value,n.contained?t:void 0),...Ua(e.contentEl.value,n.contained?t:void 0)])].filter(r=>!r.classList.contains("v-overlay-scroll-blocked")),l=window.innerWidth-document.documentElement.offsetWidth,o=(r=>ai(r)&&r)(t||document.documentElement);o&&e.root.value.classList.add("v-overlay--scroll-blocked"),a.forEach((r,u)=>{r.style.setProperty("--v-body-scroll-x",ne(-r.scrollLeft)),r.style.setProperty("--v-body-scroll-y",ne(-r.scrollTop)),r!==document.documentElement&&r.style.setProperty("--v-scrollbar-offset",ne(l)),r.classList.add("v-overlay-scroll-blocked")}),mt(()=>{a.forEach((r,u)=>{const c=parseFloat(r.style.getPropertyValue("--v-body-scroll-x")),d=parseFloat(r.style.getPropertyValue("--v-body-scroll-y")),v=r.style.scrollBehavior;r.style.scrollBehavior="auto",r.style.removeProperty("--v-body-scroll-x"),r.style.removeProperty("--v-body-scroll-y"),r.style.removeProperty("--v-scrollbar-offset"),r.classList.remove("v-overlay-scroll-blocked"),r.scrollLeft=-c,r.scrollTop=-d,r.style.scrollBehavior=v}),o&&e.root.value.classList.remove("v-overlay--scroll-blocked")})}function fS(e,n,t){let a=!1,l=-1,o=-1;function i(r){sS(()=>{var d,v;const u=performance.now();(v=(d=e.updateLocation).value)==null||v.call(d,r),a=(performance.now()-u)/(1e3/60)>2})}o=(typeof requestIdleCallback>"u"?r=>r():requestIdleCallback)(()=>{t.run(()=>{zu(e.targetEl.value??e.contentEl.value,r=>{a?(cancelAnimationFrame(l),l=requestAnimationFrame(()=>{l=requestAnimationFrame(()=>{i(r)})})):i(r)})})}),mt(()=>{typeof cancelIdleCallback<"u"&&cancelIdleCallback(o),cancelAnimationFrame(l)})}function zu(e,n){const t=[document,...Ua(e)];t.forEach(a=>{a.addEventListener("scroll",n,{passive:!0})}),mt(()=>{t.forEach(a=>{a.removeEventListener("scroll",n)})})}const ko=Symbol.for("vuetify:v-menu"),bi=B({closeDelay:[Number,String],openDelay:[Number,String]},"delay");function ki(e,n){let t=()=>{};function a(i){t==null||t();const r=Number(i?e.openDelay:e.closeDelay);return new Promise(u=>{t=Bh(r,()=>{n==null||n(i),u(i)})})}function l(){return a(!0)}function o(){return a(!1)}return{clearDelay:t,runOpenDelay:l,runCloseDelay:o}}const mS=B({target:[String,Object],activator:[String,Object],activatorProps:{type:Object,default:()=>({})},openOnClick:{type:Boolean,default:void 0},openOnHover:Boolean,openOnFocus:{type:Boolean,default:void 0},closeOnContentClick:Boolean,...bi()},"VOverlay-activator");function gS(e,n){let{isActive:t,isTop:a,contentEl:l}=n;const o=Ye("useActivator"),i=H();let r=!1,u=!1,c=!0;const d=y(()=>e.openOnFocus||e.openOnFocus==null&&e.openOnHover),v=y(()=>e.openOnClick||e.openOnClick==null&&!e.openOnHover&&!d.value),{runOpenDelay:f,runCloseDelay:m}=ki(e,V=>{V===(e.openOnHover&&r||d.value&&u)&&!(e.openOnHover&&t.value&&!a.value)&&(t.value!==V&&(c=!0),t.value=V)}),b=H(),h={onClick:V=>{V.stopPropagation(),i.value=V.currentTarget||V.target,t.value||(b.value=[V.clientX,V.clientY]),t.value=!t.value},onMouseenter:V=>{var w;(w=V.sourceCapabilities)!=null&&w.firesTouchEvents||(r=!0,i.value=V.currentTarget||V.target,f())},onMouseleave:V=>{r=!1,m()},onFocus:V=>{Gn(V.target,":focus-visible")!==!1&&(u=!0,V.stopPropagation(),i.value=V.currentTarget||V.target,f())},onBlur:V=>{u=!1,V.stopPropagation(),m()}},g=y(()=>{const V={};return v.value&&(V.onClick=h.onClick),e.openOnHover&&(V.onMouseenter=h.onMouseenter,V.onMouseleave=h.onMouseleave),d.value&&(V.onFocus=h.onFocus,V.onBlur=h.onBlur),V}),k=y(()=>{const V={};if(e.openOnHover&&(V.onMouseenter=()=>{r=!0,f()},V.onMouseleave=()=>{r=!1,m()}),d.value&&(V.onFocusin=()=>{u=!0,f()},V.onFocusout=()=>{u=!1,m()}),e.closeOnContentClick){const w=xe(ko,null);V.onClick=()=>{t.value=!1,w==null||w.closeParents()}}return V}),S=y(()=>{const V={};return e.openOnHover&&(V.onMouseenter=()=>{c&&(r=!0,c=!1,f())},V.onMouseleave=()=>{r=!1,m()}),V});Q(a,V=>{var w;V&&(e.openOnHover&&!r&&(!d.value||!u)||d.value&&!u&&(!e.openOnHover||!r))&&!((w=l.value)!=null&&w.contains(document.activeElement))&&(t.value=!1)}),Q(t,V=>{V||setTimeout(()=>{b.value=void 0})},{flush:"post"});const C=ja();He(()=>{C.value&&Te(()=>{i.value=C.el})});const P=ja(),x=y(()=>e.target==="cursor"&&b.value?b.value:P.value?P.el:Wu(e.target,o)||i.value),_=y(()=>Array.isArray(x.value)?void 0:x.value);let T;return Q(()=>!!e.activator,V=>{V&&$e?(T=Fo(),T.run(()=>{hS(e,o,{activatorEl:i,activatorEvents:g})})):T&&T.stop()},{flush:"post",immediate:!0}),mt(()=>{T==null||T.stop()}),{activatorEl:i,activatorRef:C,target:x,targetEl:_,targetRef:P,activatorEvents:g,contentEvents:k,scrimEvents:S}}function hS(e,n,t){let{activatorEl:a,activatorEvents:l}=t;Q(()=>e.activator,(u,c)=>{if(c&&u!==c){const d=r(c);d&&i(d)}u&&Te(()=>o())},{immediate:!0}),Q(()=>e.activatorProps,()=>{o()}),mt(()=>{i()});function o(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:r(),c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e.activatorProps;u&&Mh(u,z(l.value,c))}function i(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:r(),c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e.activatorProps;u&&Eh(u,z(l.value,c))}function r(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:e.activator;const c=Wu(u,n);return a.value=(c==null?void 0:c.nodeType)===Node.ELEMENT_NODE?c:void 0,a.value}}function Wu(e,n){var a,l;if(!e)return;let t;if(e==="parent"){let o=(l=(a=n==null?void 0:n.proxy)==null?void 0:a.$el)==null?void 0:l.parentNode;for(;o!=null&&o.hasAttribute("data-no-activator");)o=o.parentNode;t=o}else typeof e=="string"?t=document.querySelector(e):"$el"in e?t=e.$el:t=e;return t}function ju(){if(!$e)return ee(!1);const{ssr:e}=$t();if(e){const n=ee(!1);return Ke(()=>{n.value=!0}),n}else return ee(!0)}const Si=B({eager:Boolean},"lazy");function wi(e,n){const t=ee(!1),a=y(()=>t.value||e.eager||n.value);Q(n,()=>t.value=!0);function l(){e.eager||(t.value=!1)}return{isBooted:t,hasContent:a,onAfterLeave:l}}function Fn(){const n=Ye("useScopeId").vnode.scopeId;return{scopeId:n?{[n]:""}:void 0}}const Er=Symbol.for("vuetify:stack"),aa=St([]);function yS(e,n,t){const a=Ye("useStack"),l=!t,o=xe(Er,void 0),i=St({activeChildren:new Set});Re(Er,i);const r=ee(+n.value);yt(e,()=>{var v;const d=(v=aa.at(-1))==null?void 0:v[1];r.value=d?d+10:+n.value,l&&aa.push([a.uid,r.value]),o==null||o.activeChildren.add(a.uid),mt(()=>{if(l){const f=Ze(aa).findIndex(m=>m[0]===a.uid);aa.splice(f,1)}o==null||o.activeChildren.delete(a.uid)})});const u=ee(!0);l&&He(()=>{var v;const d=((v=aa.at(-1))==null?void 0:v[0])===a.uid;setTimeout(()=>u.value=d)});const c=y(()=>!i.activeChildren.size);return{globalTop:nl(u),localTop:c,stackStyles:y(()=>({zIndex:r.value}))}}function bS(e){return{teleportTarget:y(()=>{const t=e();if(t===!0||!$e)return;const a=t===!1?document.body:typeof t=="string"?document.querySelector(t):t;if(a==null)return;let l=[...a.children].find(o=>o.matches(".v-overlay-container"));return l||(l=document.createElement("div"),l.className="v-overlay-container",a.appendChild(l)),l})}}function kS(){return!0}function Gu(e,n,t){if(!e||Yu(e,t)===!1)return!1;const a=Ds(n);if(typeof ShadowRoot<"u"&&a instanceof ShadowRoot&&a.host===e.target)return!1;const l=(typeof t.value=="object"&&t.value.include||(()=>[]))();return l.push(n),!l.some(o=>o==null?void 0:o.contains(e.target))}function Yu(e,n){return(typeof n.value=="object"&&n.value.closeConditional||kS)(e)}function SS(e,n,t){const a=typeof t.value=="function"?t.value:t.value.handler;e.shadowTarget=e.target,n._clickOutside.lastMousedownWasOutside&&Gu(e,n,t)&&setTimeout(()=>{Yu(e,t)&&a&&a(e)},0)}function Fr(e,n){const t=Ds(e);n(document),typeof ShadowRoot<"u"&&t instanceof ShadowRoot&&n(t)}const Uu={mounted(e,n){const t=l=>SS(l,e,n),a=l=>{e._clickOutside.lastMousedownWasOutside=Gu(l,e,n)};Fr(e,l=>{l.addEventListener("click",t,!0),l.addEventListener("mousedown",a,!0)}),e._clickOutside||(e._clickOutside={lastMousedownWasOutside:!1}),e._clickOutside[n.instance.$.uid]={onClick:t,onMousedown:a}},beforeUnmount(e,n){e._clickOutside&&(Fr(e,t=>{var o;if(!t||!((o=e._clickOutside)!=null&&o[n.instance.$.uid]))return;const{onClick:a,onMousedown:l}=e._clickOutside[n.instance.$.uid];t.removeEventListener("click",a,!0),t.removeEventListener("mousedown",l,!0)}),delete e._clickOutside[n.instance.$.uid])}};function wS(e){const{modelValue:n,color:t,...a}=e;return s(Dt,{name:"fade-transition",appear:!0},{default:()=>[e.modelValue&&s("div",z({class:["v-overlay__scrim",e.color.backgroundColorClasses.value],style:e.color.backgroundColorStyles.value},a),null)]})}const _a=B({absolute:Boolean,attach:[Boolean,String,Object],closeOnBack:{type:Boolean,default:!0},contained:Boolean,contentClass:null,contentProps:null,disabled:Boolean,opacity:[Number,String],noClickAnimation:Boolean,modelValue:Boolean,persistent:Boolean,scrim:{type:[Boolean,String],default:!0},zIndex:{type:[Number,String],default:2e3},...mS(),...ie(),...Qe(),...Si(),...aS(),...uS(),...Pe(),...Et()},"VOverlay"),Rt=R()({name:"VOverlay",directives:{ClickOutside:Uu},inheritAttrs:!1,props:{_disableGlobalStack:Boolean,..._a()},emits:{"click:outside":e=>!0,"update:modelValue":e=>!0,afterEnter:()=>!0,afterLeave:()=>!0},setup(e,n){let{slots:t,attrs:a,emit:l}=n;const o=Ye("VOverlay"),i=H(),r=H(),u=H(),c=de(e,"modelValue"),d=y({get:()=>c.value,set:G=>{G&&e.disabled||(c.value=G)}}),{themeClasses:v}=De(e),{rtlClasses:f,isRtl:m}=nt(),{hasContent:b,onAfterLeave:h}=wi(e,d),g=Le(y(()=>typeof e.scrim=="string"?e.scrim:null)),{globalTop:k,localTop:S,stackStyles:C}=yS(d,F(e,"zIndex"),e._disableGlobalStack),{activatorEl:P,activatorRef:x,target:_,targetEl:T,targetRef:V,activatorEvents:w,contentEvents:$,scrimEvents:p}=gS(e,{isActive:d,isTop:S,contentEl:u}),{teleportTarget:I}=bS(()=>{var me,Me,Ie;const G=e.attach||e.contained;if(G)return G;const ce=((me=P==null?void 0:P.value)==null?void 0:me.getRootNode())||((Ie=(Me=o.proxy)==null?void 0:Me.$el)==null?void 0:Ie.getRootNode());return ce instanceof ShadowRoot?ce:!1}),{dimensionStyles:A}=et(e),M=ju(),{scopeId:j}=Fn();Q(()=>e.disabled,G=>{G&&(d.value=!1)});const{contentStyles:Y,updateLocation:le}=lS(e,{isRtl:m,contentEl:u,target:_,isActive:d});cS(e,{root:i,contentEl:u,targetEl:T,isActive:d,updateLocation:le});function re(G){l("click:outside",G),e.persistent?se():d.value=!1}function N(G){return d.value&&k.value&&(!e.scrim||G.target===r.value||G instanceof MouseEvent&&G.shadowTarget===r.value)}$e&&Q(d,G=>{G?window.addEventListener("keydown",E):window.removeEventListener("keydown",E)},{immediate:!0}),it(()=>{$e&&window.removeEventListener("keydown",E)});function E(G){var ce,me;G.key==="Escape"&&k.value&&(e.persistent?se():(d.value=!1,(ce=u.value)!=null&&ce.contains(document.activeElement)&&((me=P.value)==null||me.focus())))}const O=ou();yt(()=>e.closeOnBack,()=>{nk(O,G=>{k.value&&d.value?(G(!1),e.persistent?se():d.value=!1):G()})});const te=H();Q(()=>d.value&&(e.absolute||e.contained)&&I.value==null,G=>{if(G){const ce=ni(i.value);ce&&ce!==document.scrollingElement&&(te.value=ce.scrollTop)}});function se(){e.noClickAnimation||u.value&&fn(u.value,[{transformOrigin:"center"},{transform:"scale(1.03)"},{transformOrigin:"center"}],{duration:150,easing:ia})}function ue(){l("afterEnter")}function ye(){h(),l("afterLeave")}return W(()=>{var G;return s(ae,null,[(G=t.activator)==null?void 0:G.call(t,{isActive:d.value,targetRef:V,props:z({ref:x},w.value,e.activatorProps)}),M.value&&b.value&&s(Fd,{disabled:!I.value,to:I.value},{default:()=>[s("div",z({class:["v-overlay",{"v-overlay--absolute":e.absolute||e.contained,"v-overlay--active":d.value,"v-overlay--contained":e.contained},v.value,f.value,e.class],style:[C.value,{"--v-overlay-opacity":e.opacity,top:ne(te.value)},e.style],ref:i},j,a),[s(wS,z({color:g,modelValue:d.value&&!!e.scrim,ref:r},p.value),null),s(ft,{appear:!0,persisted:!0,transition:e.transition,target:_.value,onAfterEnter:ue,onAfterLeave:ye},{default:()=>{var ce;return[je(s("div",z({ref:u,class:["v-overlay__content",e.contentClass],style:[A.value,Y.value]},$.value,e.contentProps),[(ce=t.default)==null?void 0:ce.call(t,{isActive:d})]),[[Mt,d.value],[Ct("click-outside"),{handler:re,closeConditional:N,include:()=>[P.value]}]])]}})])]})])}),{activatorEl:P,scrimEl:r,target:_,animateClick:se,contentEl:u,globalTop:k,localTop:S,updateLocation:le}}}),jl=Symbol("Forwarded refs");function Gl(e,n){let t=e;for(;t;){const a=Reflect.getOwnPropertyDescriptor(t,n);if(a)return a;t=Object.getPrototypeOf(t)}}function At(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{scopeId:l}=Fn(),{isRtl:o}=nt(),i=rt(),r=y(()=>e.id||`v-menu-${i}`),u=H(),c=xe(ko,null),d=ee(new Set);Re(ko,{register(){d.value.add(i)},unregister(){d.value.delete(i)},closeParents(g){setTimeout(()=>{var k;!d.value.size&&!e.persistent&&(g==null||(k=u.value)!=null&&k.contentEl&&!Dh(g,u.value.contentEl))&&(a.value=!1,c==null||c.closeParents())},40)}}),it(()=>{c==null||c.unregister(),document.removeEventListener("focusin",v)}),as(()=>a.value=!1);async function v(g){var C,P,x;const k=g.relatedTarget,S=g.target;await Te(),a.value&&k!==S&&((C=u.value)!=null&&C.contentEl)&&((P=u.value)!=null&&P.globalTop)&&![document,u.value.contentEl].includes(S)&&!u.value.contentEl.contains(S)&&((x=oa(u.value.contentEl)[0])==null||x.focus())}Q(a,g=>{g?(c==null||c.register(),$e&&document.addEventListener("focusin",v,{once:!0})):(c==null||c.unregister(),$e&&document.removeEventListener("focusin",v))},{immediate:!0});function f(g){c==null||c.closeParents(g)}function m(g){var k,S,C,P,x;if(!e.disabled)if(g.key==="Tab"||g.key==="Enter"&&!e.closeOnContentClick){if(g.key==="Enter"&&(g.target instanceof HTMLTextAreaElement||g.target instanceof HTMLInputElement&&g.target.closest("form")))return;g.key==="Enter"&&g.preventDefault(),ys(oa((k=u.value)==null?void 0:k.contentEl,!1),g.shiftKey?"prev":"next",T=>T.tabIndex>=0)||(a.value=!1,(C=(S=u.value)==null?void 0:S.activatorEl)==null||C.focus())}else e.submenu&&g.key===(o.value?"ArrowRight":"ArrowLeft")&&(a.value=!1,(x=(P=u.value)==null?void 0:P.activatorEl)==null||x.focus())}function b(g){var S;if(e.disabled)return;const k=(S=u.value)==null?void 0:S.contentEl;k&&a.value?g.key==="ArrowDown"?(g.preventDefault(),g.stopImmediatePropagation(),gn(k,"next")):g.key==="ArrowUp"?(g.preventDefault(),g.stopImmediatePropagation(),gn(k,"prev")):e.submenu&&(g.key===(o.value?"ArrowRight":"ArrowLeft")?a.value=!1:g.key===(o.value?"ArrowLeft":"ArrowRight")&&(g.preventDefault(),gn(k,"first"))):(e.submenu?g.key===(o.value?"ArrowLeft":"ArrowRight"):["ArrowDown","ArrowUp"].includes(g.key))&&(a.value=!0,g.preventDefault(),setTimeout(()=>setTimeout(()=>b(g))))}const h=y(()=>z({"aria-haspopup":"menu","aria-expanded":String(a.value),"aria-owns":r.value,onKeydown:b},e.activatorProps));return W(()=>{const g=Rt.filterProps(e);return s(Rt,z({ref:u,id:r.value,class:["v-menu",e.class],style:e.style},g,{modelValue:a.value,"onUpdate:modelValue":k=>a.value=k,absolute:!0,activatorProps:h.value,location:e.location??(e.submenu?"end":"bottom"),"onClick:outside":f,onKeydown:m},l),{activator:t.activator,default:function(){for(var k=arguments.length,S=new Array(k),C=0;C{var P;return[(P=t.default)==null?void 0:P.call(t,...S)]}})}})}),At({id:r,ΨopenChildren:d},u)}}),VS=B({active:Boolean,disabled:Boolean,max:[Number,String],value:{type:[Number,String],default:0},...ie(),...Et({transition:{component:ui}})},"VCounter"),Sl=R()({name:"VCounter",functional:!0,props:VS(),setup(e,n){let{slots:t}=n;const a=y(()=>e.max?`${e.value} / ${e.max}`:String(e.value));return W(()=>s(ft,{transition:e.transition},{default:()=>[je(s("div",{class:["v-counter",{"text-error":e.max&&!e.disabled&&parseFloat(e.value)>parseFloat(e.max)},e.class],style:e.style},[t.default?t.default({counter:a.value,max:e.max,value:e.value}):a.value]),[[Mt,e.active]])]})),{}}}),CS=B({floating:Boolean,...ie()},"VFieldLabel"),la=R()({name:"VFieldLabel",props:CS(),setup(e,n){let{slots:t}=n;return W(()=>s(ea,{class:["v-field-label",{"v-field-label--floating":e.floating},e.class],style:e.style,"aria-hidden":e.floating||void 0},t)),{}}}),pS=["underlined","outlined","filled","solo","solo-inverted","solo-filled","plain"],Pa=B({appendInnerIcon:ve,bgColor:String,clearable:Boolean,clearIcon:{type:ve,default:"$clear"},active:Boolean,centerAffix:{type:Boolean,default:void 0},color:String,baseColor:String,dirty:Boolean,disabled:{type:Boolean,default:null},error:Boolean,flat:Boolean,label:String,persistentClear:Boolean,prependInnerIcon:ve,reverse:Boolean,singleLine:Boolean,variant:{type:String,default:"filled",validator:e=>pS.includes(e)},"onClick:clear":ot(),"onClick:appendInner":ot(),"onClick:prependInner":ot(),...ie(),...gl(),...ze(),...Pe()},"VField"),na=R()({name:"VField",inheritAttrs:!1,props:{id:String,...pa(),...Pa()},emits:{"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{themeClasses:o}=De(e),{loaderClasses:i}=Sa(e),{focusClasses:r,isFocused:u,focus:c,blur:d}=Jt(e),{InputIcon:v}=bu(e),{roundedClasses:f}=Ue(e),{rtlClasses:m}=nt(),b=y(()=>e.dirty||e.active),h=y(()=>!e.singleLine&&!!(e.label||l.label)),g=rt(),k=y(()=>e.id||`input-${g}`),S=y(()=>`${k.value}-messages`),C=H(),P=H(),x=H(),_=y(()=>["plain","underlined"].includes(e.variant)),{backgroundColorClasses:T,backgroundColorStyles:V}=Le(F(e,"bgColor")),{textColorClasses:w,textColorStyles:$}=ut(y(()=>e.error||e.disabled?void 0:b.value&&u.value?e.color:e.baseColor));Q(b,M=>{if(h.value){const j=C.value.$el,Y=P.value.$el;requestAnimationFrame(()=>{const le=Jo(j),re=Y.getBoundingClientRect(),N=re.x-le.x,E=re.y-le.y-(le.height/2-re.height/2),O=re.width/.75,te=Math.abs(O-le.width)>1?{maxWidth:ne(O)}:void 0,se=getComputedStyle(j),ue=getComputedStyle(Y),ye=parseFloat(se.transitionDuration)*1e3||150,G=parseFloat(ue.getPropertyValue("--v-field-label-scale")),ce=ue.getPropertyValue("color");j.style.visibility="visible",Y.style.visibility="hidden",fn(j,{transform:`translate(${N}px, ${E}px) scale(${G})`,color:ce,...te},{duration:ye,easing:ia,direction:M?"normal":"reverse"}).finished.then(()=>{j.style.removeProperty("visibility"),Y.style.removeProperty("visibility")})})}},{flush:"post"});const p=y(()=>({isActive:b,isFocused:u,controlRef:x,blur:d,focus:c}));function I(M){M.target!==document.activeElement&&M.preventDefault()}function A(M){var j;M.key!=="Enter"&&M.key!==" "||(M.preventDefault(),M.stopPropagation(),(j=e["onClick:clear"])==null||j.call(e,new MouseEvent("click")))}return W(()=>{var N,E,O;const M=e.variant==="outlined",j=!!(l["prepend-inner"]||e.prependInnerIcon),Y=!!(e.clearable||l.clear),le=!!(l["append-inner"]||e.appendInnerIcon||Y),re=()=>l.label?l.label({...p.value,label:e.label,props:{for:k.value}}):e.label;return s("div",z({class:["v-field",{"v-field--active":b.value,"v-field--appended":le,"v-field--center-affix":e.centerAffix??!_.value,"v-field--disabled":e.disabled,"v-field--dirty":e.dirty,"v-field--error":e.error,"v-field--flat":e.flat,"v-field--has-background":!!e.bgColor,"v-field--persistent-clear":e.persistentClear,"v-field--prepended":j,"v-field--reverse":e.reverse,"v-field--single-line":e.singleLine,"v-field--no-label":!re(),[`v-field--variant-${e.variant}`]:!0},o.value,T.value,r.value,i.value,f.value,m.value,e.class],style:[V.value,e.style],onClick:I},t),[s("div",{class:"v-field__overlay"},null),s(wa,{name:"v-field",active:!!e.loading,color:e.error?"error":typeof e.loading=="string"?e.loading:e.color},{default:l.loader}),j&&s("div",{key:"prepend",class:"v-field__prepend-inner"},[e.prependInnerIcon&&s(v,{key:"prepend-icon",name:"prependInner"},null),(N=l["prepend-inner"])==null?void 0:N.call(l,p.value)]),s("div",{class:"v-field__field","data-no-activator":""},[["filled","solo","solo-inverted","solo-filled"].includes(e.variant)&&h.value&&s(la,{key:"floating-label",ref:P,class:[w.value],floating:!0,for:k.value,style:$.value},{default:()=>[re()]}),h.value&&s(la,{key:"label",ref:C,for:k.value},{default:()=>[re()]}),(E=l.default)==null?void 0:E.call(l,{...p.value,props:{id:k.value,class:"v-field__input","aria-describedby":S.value},focus:c,blur:d})]),Y&&s(ci,{key:"clear"},{default:()=>[je(s("div",{class:"v-field__clearable",onMousedown:te=>{te.preventDefault(),te.stopPropagation()}},[s(pe,{defaults:{VIcon:{icon:e.clearIcon}}},{default:()=>[l.clear?l.clear({...p.value,props:{onKeydown:A,onFocus:c,onBlur:d,onClick:e["onClick:clear"]}}):s(v,{name:"clear",onKeydown:A,onFocus:c,onBlur:d},null)]})]),[[Mt,e.dirty]])]}),le&&s("div",{key:"append",class:"v-field__append-inner"},[(O=l["append-inner"])==null?void 0:O.call(l,p.value),e.appendInnerIcon&&s(v,{key:"append-icon",name:"appendInner"},null)]),s("div",{class:["v-field__outline",w.value],style:$.value},[M&&s(ae,null,[s("div",{class:"v-field__outline__start"},null),h.value&&s("div",{class:"v-field__outline__notch"},[s(la,{ref:P,floating:!0,for:k.value},{default:()=>[re()]})]),s("div",{class:"v-field__outline__end"},null)]),_.value&&h.value&&s(la,{ref:P,floating:!0,for:k.value},{default:()=>[re()]})])])}),{controlRef:x}}});function Vi(e){const n=Object.keys(na.props).filter(t=>!ol(t)&&t!=="class"&&t!=="style");return qo(e,n)}const xS=["color","file","time","date","datetime-local","week","month"],wl=B({autofocus:Boolean,counter:[Boolean,Number,String],counterValue:[Number,Function],prefix:String,placeholder:String,persistentPlaceholder:Boolean,persistentCounter:Boolean,suffix:String,role:String,type:{type:String,default:"text"},modelModifiers:Object,...Qt(),...Pa()},"VTextField"),Sn=R()({name:"VTextField",directives:{Intersect:ka},inheritAttrs:!1,props:wl(),emits:{"click:control":e=>!0,"mousedown:control":e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const o=de(e,"modelValue"),{isFocused:i,focus:r,blur:u}=Jt(e),c=y(()=>typeof e.counterValue=="function"?e.counterValue(o.value):typeof e.counterValue=="number"?e.counterValue:(o.value??"").toString().length),d=y(()=>{if(t.maxlength)return t.maxlength;if(!(!e.counter||typeof e.counter!="number"&&typeof e.counter!="string"))return e.counter}),v=y(()=>["plain","underlined"].includes(e.variant));function f(_,T){var V,w;!e.autofocus||!_||(w=(V=T[0].target)==null?void 0:V.focus)==null||w.call(V)}const m=H(),b=H(),h=H(),g=y(()=>xS.includes(e.type)||e.persistentPlaceholder||i.value||e.active);function k(){var _;h.value!==document.activeElement&&((_=h.value)==null||_.focus()),i.value||r()}function S(_){a("mousedown:control",_),_.target!==h.value&&(k(),_.preventDefault())}function C(_){k(),a("click:control",_)}function P(_){_.stopPropagation(),k(),Te(()=>{o.value=null,Zo(e["onClick:clear"],_)})}function x(_){var V;const T=_.target;if(o.value=T.value,(V=e.modelModifiers)!=null&&V.trim&&["text","search","password","tel","url"].includes(e.type)){const w=[T.selectionStart,T.selectionEnd];Te(()=>{T.selectionStart=w[0],T.selectionEnd=w[1]})}}return W(()=>{const _=!!(l.counter||e.counter!==!1&&e.counter!=null),T=!!(_||l.details),[V,w]=ln(t),{modelValue:$,...p}=ct.filterProps(e),I=Vi(e);return s(ct,z({ref:m,modelValue:o.value,"onUpdate:modelValue":A=>o.value=A,class:["v-text-field",{"v-text-field--prefixed":e.prefix,"v-text-field--suffixed":e.suffix,"v-input--plain-underlined":v.value},e.class],style:e.style},V,p,{centerAffix:!v.value,focused:i.value}),{...l,default:A=>{let{id:M,isDisabled:j,isDirty:Y,isReadonly:le,isValid:re}=A;return s(na,z({ref:b,onMousedown:S,onClick:C,"onClick:clear":P,"onClick:prependInner":e["onClick:prependInner"],"onClick:appendInner":e["onClick:appendInner"],role:e.role},I,{id:M.value,active:g.value||Y.value,dirty:Y.value||e.dirty,disabled:j.value,focused:i.value,error:re.value===!1}),{...l,default:N=>{let{props:{class:E,...O}}=N;const te=je(s("input",z({ref:h,value:o.value,onInput:x,autofocus:e.autofocus,readonly:le.value,disabled:j.value,name:e.name,placeholder:e.placeholder,size:1,type:e.type,onFocus:k,onBlur:u},O,w),null),[[Ct("intersect"),{handler:f},null,{once:!0}]]);return s(ae,null,[e.prefix&&s("span",{class:"v-text-field__prefix"},[s("span",{class:"v-text-field__prefix__text"},[e.prefix])]),l.default?s("div",{class:E,"data-no-activator":""},[l.default(),te]):Od(te,{class:E}),e.suffix&&s("span",{class:"v-text-field__suffix"},[s("span",{class:"v-text-field__suffix__text"},[e.suffix])])])}})},details:T?A=>{var M;return s(ae,null,[(M=l.details)==null?void 0:M.call(l,A),_&&s(ae,null,[s("span",null,null),s(Sl,{active:e.persistentCounter||i.value,value:c.value,max:d.value,disabled:e.disabled},l.counter)])])}:void 0})}),At({},m,b,h)}}),_S=B({renderless:Boolean,...ie()},"VVirtualScrollItem"),qu=R()({name:"VVirtualScrollItem",inheritAttrs:!1,props:_S(),emits:{"update:height":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{resizeRef:o,contentRect:i}=Lt(void 0,"border");Q(()=>{var r;return(r=i.value)==null?void 0:r.height},r=>{r!=null&&a("update:height",r)}),W(()=>{var r,u;return e.renderless?s(ae,null,[(r=l.default)==null?void 0:r.call(l,{itemRef:o})]):s("div",z({ref:o,class:["v-virtual-scroll__item",e.class],style:e.style},t),[(u=l.default)==null?void 0:u.call(l)])})}}),PS=-1,IS=1,Yl=100,Xu=B({itemHeight:{type:[Number,String],default:null},height:[Number,String]},"virtual");function Zu(e,n){const t=$t(),a=ee(0);He(()=>{a.value=parseFloat(e.itemHeight||0)});const l=ee(0),o=ee(Math.ceil((parseInt(e.height)||t.height.value)/(a.value||16))||1),i=ee(0),r=ee(0),u=H(),c=H();let d=0;const{resizeRef:v,contentRect:f}=Lt();He(()=>{v.value=u.value});const m=y(()=>{var N;return u.value===document.documentElement?t.height.value:((N=f.value)==null?void 0:N.height)||parseInt(e.height)||0}),b=y(()=>!!(u.value&&c.value&&m.value&&a.value));let h=Array.from({length:n.value.length}),g=Array.from({length:n.value.length});const k=ee(0);let S=-1;function C(N){return h[N]||a.value}const P=Ih(()=>{const N=performance.now();g[0]=0;const E=n.value.length;for(let O=1;O<=E-1;O++)g[O]=(g[O-1]||0)+C(O-1);k.value=Math.max(k.value,performance.now()-N)},k),x=Q(b,N=>{N&&(x(),d=c.value.offsetTop,P.immediate(),j(),~S&&Te(()=>{$e&&window.requestAnimationFrame(()=>{le(S),S=-1})}))});mt(()=>{P.clear()});function _(N,E){const O=h[N],te=a.value;a.value=te?Math.min(a.value,E):E,(O!==E||te!==a.value)&&(h[N]=E,P())}function T(N){return N=Xe(N,0,n.value.length-1),g[N]||0}function V(N){return $S(g,N)}let w=0,$=0,p=0;Q(m,(N,E)=>{E&&(j(),N{$=0,j()}))});function I(){if(!u.value||!c.value)return;const N=u.value.scrollTop,E=performance.now();E-p>500?($=Math.sign(N-w),d=c.value.offsetTop):$=N-w,w=N,p=E,j()}function A(){!u.value||!c.value||($=0,p=0,j())}let M=-1;function j(){cancelAnimationFrame(M),M=requestAnimationFrame(Y)}function Y(){if(!u.value||!m.value)return;const N=w-d,E=Math.sign($),O=Math.max(0,N-Yl),te=Xe(V(O),0,n.value.length),se=N+m.value+Yl,ue=Xe(V(se)+1,te+1,n.value.length);if((E!==PS||teo.value)){const ye=T(l.value)-T(te),G=T(ue)-T(o.value);Math.max(ye,G)>Yl?(l.value=te,o.value=ue):(te<=0&&(l.value=te),ue>=n.value.length&&(o.value=ue))}i.value=T(l.value),r.value=T(n.value.length)-T(o.value)}function le(N){const E=T(N);!u.value||N&&!E?S=N:u.value.scrollTop=E}const re=y(()=>n.value.slice(l.value,o.value).map((N,E)=>({raw:N,index:E+l.value})));return Q(n,()=>{h=Array.from({length:n.value.length}),g=Array.from({length:n.value.length}),P.immediate(),j()},{deep:!0}),{calculateVisibleItems:j,containerRef:u,markerRef:c,computedItems:re,paddingTop:i,paddingBottom:r,scrollToIndex:le,handleScroll:I,handleScrollend:A,handleItemResize:_}}function $S(e,n){let t=e.length-1,a=0,l=0,o=null,i=-1;if(e[t]>1,o=e[l],o>n)t=l-1;else if(o[]},renderless:Boolean,...Xu(),...ie(),...Qe()},"VVirtualScroll"),Vl=R()({name:"VVirtualScroll",props:TS(),setup(e,n){let{slots:t}=n;const a=Ye("VVirtualScroll"),{dimensionStyles:l}=et(e),{calculateVisibleItems:o,containerRef:i,markerRef:r,handleScroll:u,handleScrollend:c,handleItemResize:d,scrollToIndex:v,paddingTop:f,paddingBottom:m,computedItems:b}=Zu(e,F(e,"items"));return yt(()=>e.renderless,()=>{function h(){var S,C;const k=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1)?"addEventListener":"removeEventListener";i.value===document.documentElement?(document[k]("scroll",u,{passive:!0}),document[k]("scrollend",c)):((S=i.value)==null||S[k]("scroll",u,{passive:!0}),(C=i.value)==null||C[k]("scrollend",c))}Ke(()=>{i.value=ni(a.vnode.el,!0),h(!0)}),mt(h)}),W(()=>{const h=b.value.map(g=>s(qu,{key:g.index,renderless:e.renderless,"onUpdate:height":k=>d(g.index,k)},{default:k=>{var S;return(S=t.default)==null?void 0:S.call(t,{item:g.raw,index:g.index,...k})}}));return e.renderless?s(ae,null,[s("div",{ref:r,class:"v-virtual-scroll__spacer",style:{paddingTop:ne(f.value)}},null),h,s("div",{class:"v-virtual-scroll__spacer",style:{paddingBottom:ne(m.value)}},null)]):s("div",{ref:i,class:["v-virtual-scroll",e.class],onScrollPassive:u,onScrollend:c,style:[l.value,e.style]},[s("div",{ref:r,class:"v-virtual-scroll__container",style:{paddingTop:ne(f.value),paddingBottom:ne(m.value)}},[h])])}),{calculateVisibleItems:o,scrollToIndex:v}}});function Ci(e,n){const t=ee(!1);let a;function l(r){cancelAnimationFrame(a),t.value=!0,a=requestAnimationFrame(()=>{a=requestAnimationFrame(()=>{t.value=!1})})}async function o(){await new Promise(r=>requestAnimationFrame(r)),await new Promise(r=>requestAnimationFrame(r)),await new Promise(r=>requestAnimationFrame(r)),await new Promise(r=>{if(t.value){const u=Q(t,()=>{u(),r()})}else r()})}async function i(r){var d,v;if(r.key==="Tab"&&((d=n.value)==null||d.focus()),!["PageDown","PageUp","Home","End"].includes(r.key))return;const u=(v=e.value)==null?void 0:v.$el;if(!u)return;(r.key==="Home"||r.key==="End")&&u.scrollTo({top:r.key==="Home"?0:u.scrollHeight,behavior:"smooth"}),await o();const c=u.querySelectorAll(":scope > :not(.v-virtual-scroll__spacer)");if(r.key==="PageDown"||r.key==="Home"){const f=u.getBoundingClientRect().top;for(const m of c)if(m.getBoundingClientRect().top>=f){m.focus();break}}else{const f=u.getBoundingClientRect().bottom;for(const m of[...c].reverse())if(m.getBoundingClientRect().bottom<=f){m.focus();break}}}return{onScrollPassive:l,onKeydown:i}}const pi=B({chips:Boolean,closableChips:Boolean,closeText:{type:String,default:"$vuetify.close"},openText:{type:String,default:"$vuetify.open"},eager:Boolean,hideNoData:Boolean,hideSelected:Boolean,listProps:{type:Object},menu:Boolean,menuIcon:{type:ve,default:"$dropdown"},menuProps:{type:Object},multiple:Boolean,noDataText:{type:String,default:"$vuetify.noDataText"},openOnClear:Boolean,itemColor:String,...Ou({itemChildren:!1})},"Select"),AS=B({...pi(),...Je(wl({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Et({transition:{component:dl}})},"VSelect"),xi=R()({name:"VSelect",props:AS(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:menu":e=>!0},setup(e,n){let{slots:t}=n;const{t:a}=qe(),l=H(),o=H(),i=H(),r=de(e,"menu"),u=y({get:()=>r.value,set:N=>{var E;r.value&&!N&&((E=o.value)!=null&&E.ΨopenChildren.size)||(r.value=N)}}),{items:c,transformIn:d,transformOut:v}=yi(e),f=de(e,"modelValue",[],N=>d(N===null?[null]:We(N)),N=>{const E=v(N);return e.multiple?E:E[0]??null}),m=y(()=>typeof e.counterValue=="function"?e.counterValue(f.value):typeof e.counterValue=="number"?e.counterValue:f.value.length),b=bl(e),h=y(()=>f.value.map(N=>N.value)),g=ee(!1),k=y(()=>u.value?e.closeText:e.openText);let S="",C;const P=y(()=>e.hideSelected?c.value.filter(N=>!f.value.some(E=>e.valueComparator(E,N))):c.value),x=y(()=>e.hideNoData&&!P.value.length||b.isReadonly.value||b.isDisabled.value),_=y(()=>{var N;return{...e.menuProps,activatorProps:{...((N=e.menuProps)==null?void 0:N.activatorProps)||{},"aria-haspopup":"listbox"}}}),T=H(),V=Ci(T,l);function w(N){e.openOnClear&&(u.value=!0)}function $(){x.value||(u.value=!u.value)}function p(N){Ga(N)&&I(N)}function I(N){var se,ue;if(!N.key||b.isReadonly.value)return;["Enter"," ","ArrowDown","ArrowUp","Home","End"].includes(N.key)&&N.preventDefault(),["Enter","ArrowDown"," "].includes(N.key)&&(u.value=!0),["Escape","Tab"].includes(N.key)&&(u.value=!1),N.key==="Home"?(se=T.value)==null||se.focus("first"):N.key==="End"&&((ue=T.value)==null||ue.focus("last"));const E=1e3;if(e.multiple||!Ga(N))return;const O=performance.now();O-C>E&&(S=""),S+=N.key.toLowerCase(),C=O;const te=c.value.find(ye=>ye.title.toLowerCase().startsWith(S));if(te!==void 0){f.value=[te];const ye=P.value.indexOf(te);$e&&window.requestAnimationFrame(()=>{var G;ye>=0&&((G=i.value)==null||G.scrollToIndex(ye))})}}function A(N){let E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!N.props.disabled)if(e.multiple){const O=f.value.findIndex(se=>e.valueComparator(se.value,N.value)),te=E??!~O;if(~O){const se=te?[...f.value,N]:[...f.value];se.splice(O,1),f.value=se}else te&&(f.value=[...f.value,N])}else{const O=E!==!1;f.value=O?[N]:[],Te(()=>{u.value=!1})}}function M(N){var E;(E=T.value)!=null&&E.$el.contains(N.relatedTarget)||(u.value=!1)}function j(){var N;e.eager&&((N=i.value)==null||N.calculateVisibleItems())}function Y(){var N;g.value&&((N=l.value)==null||N.focus())}function le(N){g.value=!0}function re(N){if(N==null)f.value=[];else if(Gn(l.value,":autofill")||Gn(l.value,":-webkit-autofill")){const E=c.value.find(O=>O.title===N);E&&A(E)}else l.value&&(l.value.value="")}return Q(u,()=>{if(!e.hideSelected&&u.value&&f.value.length){const N=P.value.findIndex(E=>f.value.some(O=>e.valueComparator(O.value,E.value)));$e&&window.requestAnimationFrame(()=>{var E;N>=0&&((E=i.value)==null||E.scrollToIndex(N))})}}),Q(()=>e.items,(N,E)=>{u.value||g.value&&!E.length&&N.length&&(u.value=!0)}),W(()=>{const N=!!(e.chips||t.chip),E=!!(!e.hideNoData||P.value.length||t["prepend-item"]||t["append-item"]||t["no-data"]),O=f.value.length>0,te=Sn.filterProps(e),se=O||!g.value&&e.label&&!e.persistentPlaceholder?void 0:e.placeholder;return s(Sn,z({ref:l},te,{modelValue:f.value.map(ue=>ue.props.value).join(", "),"onUpdate:modelValue":re,focused:g.value,"onUpdate:focused":ue=>g.value=ue,validationValue:f.externalValue,counterValue:m.value,dirty:O,class:["v-select",{"v-select--active-menu":u.value,"v-select--chips":!!e.chips,[`v-select--${e.multiple?"multiple":"single"}`]:!0,"v-select--selected":f.value.length,"v-select--selection-slot":!!t.selection},e.class],style:e.style,inputmode:"none",placeholder:se,"onClick:clear":w,"onMousedown:control":$,onBlur:M,onKeydown:I,"aria-label":a(k.value),title:a(k.value)}),{...t,default:()=>s(ae,null,[s(qn,z({ref:o,modelValue:u.value,"onUpdate:modelValue":ue=>u.value=ue,activator:"parent",contentClass:"v-select__content",disabled:x.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:j,onAfterLeave:Y},_.value),{default:()=>[E&&s(kl,z({ref:T,selected:h.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:ue=>ue.preventDefault(),onKeydown:p,onFocusin:le,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},V,e.listProps),{default:()=>{var ue,ye,G;return[(ue=t["prepend-item"])==null?void 0:ue.call(t),!P.value.length&&!e.hideNoData&&(((ye=t["no-data"])==null?void 0:ye.call(t))??s(Kt,{title:a(e.noDataText)},null)),s(Vl,{ref:i,renderless:!0,items:P.value},{default:ce=>{var Ce;let{item:me,index:Me,itemRef:Ie}=ce;const Z=z(me.props,{ref:Ie,key:Me,onClick:()=>A(me,null)});return((Ce=t.item)==null?void 0:Ce.call(t,{item:me,index:Me,props:Z}))??s(Kt,z(Z,{role:"option"}),{prepend:q=>{let{isSelected:oe}=q;return s(ae,null,[e.multiple&&!e.hideSelected?s(Ut,{key:me.value,modelValue:oe,ripple:!1,tabindex:"-1"},null):void 0,me.props.prependAvatar&&s(It,{image:me.props.prependAvatar},null),me.props.prependIcon&&s(Be,{icon:me.props.prependIcon},null)])}})}}),(G=t["append-item"])==null?void 0:G.call(t)]}})]}),f.value.map((ue,ye)=>{function G(Ie){Ie.stopPropagation(),Ie.preventDefault(),A(ue,!1)}const ce={"onClick:close":G,onKeydown(Ie){Ie.key!=="Enter"&&Ie.key!==" "||(Ie.preventDefault(),Ie.stopPropagation(),G(Ie))},onMousedown(Ie){Ie.preventDefault(),Ie.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},me=N?!!t.chip:!!t.selection,Me=me?il(N?t.chip({item:ue,index:ye,props:ce}):t.selection({item:ue,index:ye})):void 0;if(!(me&&!Me))return s("div",{key:ue.value,class:"v-select__selection"},[N?t.chip?s(pe,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:ue.title}}},{default:()=>[Me]}):s(ta,z({key:"chip",closable:e.closableChips,size:"small",text:ue.title,disabled:ue.props.disabled},ce),null):Me??s("span",{class:"v-select__selection-text"},[ue.title,e.multiple&&yee==null||n==null?-1:e.toString().toLocaleLowerCase().indexOf(n.toString().toLocaleLowerCase()),Ia=B({customFilter:Function,customKeyFilter:Object,filterKeys:[Array,String],filterMode:{type:String,default:"intersection"},noFilter:Boolean},"filter");function DS(e,n,t){var r;const a=[],l=(t==null?void 0:t.default)??BS,o=t!=null&&t.filterKeys?We(t.filterKeys):!1,i=Object.keys((t==null?void 0:t.customKeyFilter)??{}).length;if(!(e!=null&&e.length))return a;e:for(let u=0;u0)&&!(t!=null&&t.noFilter)){if(typeof c=="object"){const g=o||Object.keys(d);for(const k of g){const S=tt(d,k),C=(r=t==null?void 0:t.customKeyFilter)==null?void 0:r[k];if(m=C?C(S,n,c):l(S,n,c),m!==-1&&m!==!1)C?v[k]=m:f[k]=m;else if((t==null?void 0:t.filterMode)==="every")continue e}}else m=l(c,n,c),m!==-1&&m!==!1&&(f.title=m);const b=Object.keys(f).length,h=Object.keys(v).length;if(!b&&!h||(t==null?void 0:t.filterMode)==="union"&&h!==i&&!b||(t==null?void 0:t.filterMode)==="intersection"&&(h!==i||!b))continue}a.push({index:u,matches:{...f,...v}})}return a}function $a(e,n,t,a){const l=H([]),o=H(new Map),i=y(()=>a!=null&&a.transform?L(n).map(u=>[u,a.transform(u)]):L(n));He(()=>{const u=typeof t=="function"?t():L(t),c=typeof u!="string"&&typeof u!="number"?"":String(u),d=DS(i.value,c,{customKeyFilter:{...e.customKeyFilter,...L(a==null?void 0:a.customKeyFilter)},default:e.customFilter,filterKeys:e.filterKeys,filterMode:e.filterMode,noFilter:e.noFilter}),v=L(n),f=[],m=new Map;d.forEach(b=>{let{index:h,matches:g}=b;const k=v[h];f.push(k),m.set(k.value,g)}),l.value=f,o.value=m});function r(u){return o.value.get(u.value)}return{filteredItems:l,filteredMatches:o,getMatches:r}}function LS(e,n,t){if(n==null)return e;if(Array.isArray(n))throw new Error("Multiple matches is not implemented");return typeof n=="number"&&~n?s(ae,null,[s("span",{class:"v-autocomplete__unmask"},[e.substr(0,n)]),s("span",{class:"v-autocomplete__mask"},[e.substr(n,t)]),s("span",{class:"v-autocomplete__unmask"},[e.substr(n+t)])]):e}const MS=B({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:Boolean,search:String,...Ia({filterKeys:["title"]}),...pi(),...Je(wl({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Et({transition:!1})},"VAutocomplete"),ES=R()({name:"VAutocomplete",props:MS(),emits:{"update:focused":e=>!0,"update:search":e=>!0,"update:modelValue":e=>!0,"update:menu":e=>!0},setup(e,n){let{slots:t}=n;const{t:a}=qe(),l=H(),o=ee(!1),i=ee(!0),r=ee(!1),u=H(),c=H(),d=de(e,"menu"),v=y({get:()=>d.value,set:Z=>{var Ce;d.value&&!Z&&((Ce=u.value)!=null&&Ce.ΨopenChildren.size)||(d.value=Z)}}),f=ee(-1),m=y(()=>{var Z;return(Z=l.value)==null?void 0:Z.color}),b=y(()=>v.value?e.closeText:e.openText),{items:h,transformIn:g,transformOut:k}=yi(e),{textColorClasses:S,textColorStyles:C}=ut(m),P=de(e,"search",""),x=de(e,"modelValue",[],Z=>g(Z===null?[null]:We(Z)),Z=>{const Ce=k(Z);return e.multiple?Ce:Ce[0]??null}),_=y(()=>typeof e.counterValue=="function"?e.counterValue(x.value):typeof e.counterValue=="number"?e.counterValue:x.value.length),T=bl(e),{filteredItems:V,getMatches:w}=$a(e,h,()=>i.value?"":P.value),$=y(()=>e.hideSelected?V.value.filter(Z=>!x.value.some(Ce=>Ce.value===Z.value)):V.value),p=y(()=>!!(e.chips||t.chip)),I=y(()=>p.value||!!t.selection),A=y(()=>x.value.map(Z=>Z.props.value)),M=y(()=>{var Ce;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&P.value===((Ce=$.value[0])==null?void 0:Ce.title))&&$.value.length>0&&!i.value&&!r.value}),j=y(()=>e.hideNoData&&!$.value.length||T.isReadonly.value||T.isDisabled.value),Y=H(),le=Ci(Y,l);function re(Z){e.openOnClear&&(v.value=!0),P.value=""}function N(){j.value||(v.value=!0)}function E(Z){j.value||(o.value&&(Z.preventDefault(),Z.stopPropagation()),v.value=!v.value)}function O(Z){var Ce;Ga(Z)&&((Ce=l.value)==null||Ce.focus())}function te(Z){var oe,ke,he;if(T.isReadonly.value)return;const Ce=l.value.selectionStart,q=x.value.length;if((f.value>-1||["Enter","ArrowDown","ArrowUp"].includes(Z.key))&&Z.preventDefault(),["Enter","ArrowDown"].includes(Z.key)&&(v.value=!0),["Escape"].includes(Z.key)&&(v.value=!1),M.value&&["Enter","Tab"].includes(Z.key)&&!x.value.some(we=>{let{value:Ee}=we;return Ee===$.value[0].value})&&Ie($.value[0]),Z.key==="ArrowDown"&&M.value&&((oe=Y.value)==null||oe.focus("next")),["Backspace","Delete"].includes(Z.key)){if(!e.multiple&&I.value&&x.value.length>0&&!P.value)return Ie(x.value[0],!1);if(~f.value){const we=f.value;Ie(x.value[f.value],!1),f.value=we>=q-1?q-2:we}else Z.key==="Backspace"&&!P.value&&(f.value=q-1)}if(e.multiple){if(Z.key==="ArrowLeft"){if(f.value<0&&Ce>0)return;const we=f.value>-1?f.value-1:q-1;x.value[we]?f.value=we:(f.value=-1,l.value.setSelectionRange((ke=P.value)==null?void 0:ke.length,(he=P.value)==null?void 0:he.length))}if(Z.key==="ArrowRight"){if(f.value<0)return;const we=f.value+1;x.value[we]?f.value=we:(f.value=-1,l.value.setSelectionRange(0,0))}}}function se(Z){if(Gn(l.value,":autofill")||Gn(l.value,":-webkit-autofill")){const Ce=h.value.find(q=>q.title===Z.target.value);Ce&&Ie(Ce)}}function ue(){var Z;e.eager&&((Z=c.value)==null||Z.calculateVisibleItems())}function ye(){var Z;o.value&&(i.value=!0,(Z=l.value)==null||Z.focus())}function G(Z){o.value=!0,setTimeout(()=>{r.value=!0})}function ce(Z){r.value=!1}function me(Z){(Z==null||Z===""&&!e.multiple&&!I.value)&&(x.value=[])}const Me=ee(!1);function Ie(Z){let Ce=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!Z||Z.props.disabled))if(e.multiple){const q=x.value.findIndex(ke=>e.valueComparator(ke.value,Z.value)),oe=Ce??!~q;if(~q){const ke=oe?[...x.value,Z]:[...x.value];ke.splice(q,1),x.value=ke}else oe&&(x.value=[...x.value,Z]);e.clearOnSelect&&(P.value="")}else{const q=Ce!==!1;x.value=q?[Z]:[],P.value=q&&!I.value?Z.title:"",Te(()=>{v.value=!1,i.value=!0})}}return Q(o,(Z,Ce)=>{var q;Z!==Ce&&(Z?(Me.value=!0,P.value=e.multiple||I.value?"":String(((q=x.value.at(-1))==null?void 0:q.props.title)??""),i.value=!0,Te(()=>Me.value=!1)):(!e.multiple&&P.value==null&&(x.value=[]),v.value=!1,x.value.some(oe=>{let{title:ke}=oe;return ke===P.value})||(P.value=""),f.value=-1))}),Q(P,Z=>{!o.value||Me.value||(Z&&(v.value=!0),i.value=!Z)}),Q(v,()=>{if(!e.hideSelected&&v.value&&x.value.length){const Z=$.value.findIndex(Ce=>x.value.some(q=>Ce.value===q.value));$e&&window.requestAnimationFrame(()=>{var Ce;Z>=0&&((Ce=c.value)==null||Ce.scrollToIndex(Z))})}}),Q(()=>e.items,(Z,Ce)=>{v.value||o.value&&!Ce.length&&Z.length&&(v.value=!0)}),W(()=>{const Z=!!(!e.hideNoData||$.value.length||t["prepend-item"]||t["append-item"]||t["no-data"]),Ce=x.value.length>0,q=Sn.filterProps(e);return s(Sn,z({ref:l},q,{modelValue:P.value,"onUpdate:modelValue":[oe=>P.value=oe,me],focused:o.value,"onUpdate:focused":oe=>o.value=oe,validationValue:x.externalValue,counterValue:_.value,dirty:Ce,onChange:se,class:["v-autocomplete",`v-autocomplete--${e.multiple?"multiple":"single"}`,{"v-autocomplete--active-menu":v.value,"v-autocomplete--chips":!!e.chips,"v-autocomplete--selection-slot":!!I.value,"v-autocomplete--selecting-index":f.value>-1},e.class],style:e.style,readonly:T.isReadonly.value,placeholder:Ce?void 0:e.placeholder,"onClick:clear":re,"onMousedown:control":N,onKeydown:te}),{...t,default:()=>s(ae,null,[s(qn,z({ref:u,modelValue:v.value,"onUpdate:modelValue":oe=>v.value=oe,activator:"parent",contentClass:"v-autocomplete__content",disabled:j.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:ue,onAfterLeave:ye},e.menuProps),{default:()=>[Z&&s(kl,z({ref:Y,selected:A.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:oe=>oe.preventDefault(),onKeydown:O,onFocusin:G,onFocusout:ce,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},le,e.listProps),{default:()=>{var oe,ke,he;return[(oe=t["prepend-item"])==null?void 0:oe.call(t),!$.value.length&&!e.hideNoData&&(((ke=t["no-data"])==null?void 0:ke.call(t))??s(Kt,{title:a(e.noDataText)},null)),s(Vl,{ref:c,renderless:!0,items:$.value},{default:we=>{var dt;let{item:Ee,index:ht,itemRef:Fe}=we;const Ft=z(Ee.props,{ref:Fe,key:ht,active:M.value&&ht===0?!0:void 0,onClick:()=>Ie(Ee,null)});return((dt=t.item)==null?void 0:dt.call(t,{item:Ee,index:ht,props:Ft}))??s(Kt,z(Ft,{role:"option"}),{prepend:sn=>{let{isSelected:un}=sn;return s(ae,null,[e.multiple&&!e.hideSelected?s(Ut,{key:Ee.value,modelValue:un,ripple:!1,tabindex:"-1"},null):void 0,Ee.props.prependAvatar&&s(It,{image:Ee.props.prependAvatar},null),Ee.props.prependIcon&&s(Be,{icon:Ee.props.prependIcon},null)])},title:()=>{var sn,un;return i.value?Ee.title:LS(Ee.title,(sn=w(Ee))==null?void 0:sn.title,((un=P.value)==null?void 0:un.length)??0)}})}}),(he=t["append-item"])==null?void 0:he.call(t)]}})]}),x.value.map((oe,ke)=>{function he(Fe){Fe.stopPropagation(),Fe.preventDefault(),Ie(oe,!1)}const we={"onClick:close":he,onKeydown(Fe){Fe.key!=="Enter"&&Fe.key!==" "||(Fe.preventDefault(),Fe.stopPropagation(),he(Fe))},onMousedown(Fe){Fe.preventDefault(),Fe.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},Ee=p.value?!!t.chip:!!t.selection,ht=Ee?il(p.value?t.chip({item:oe,index:ke,props:we}):t.selection({item:oe,index:ke})):void 0;if(!(Ee&&!ht))return s("div",{key:oe.value,class:["v-autocomplete__selection",ke===f.value&&["v-autocomplete__selection--selected",S.value]],style:ke===f.value?C.value:{}},[p.value?t.chip?s(pe,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:oe.title}}},{default:()=>[ht]}):s(ta,z({key:"chip",closable:e.closableChips,size:"small",text:oe.title,disabled:oe.props.disabled},we),null):ht??s("span",{class:"v-autocomplete__selection-text"},[oe.title,e.multiple&&ke(e.floating?e.dot?2:4:e.dot?8:12)+(["top","bottom"].includes(d)?+(e.offsetY??0):["left","right"].includes(d)?+(e.offsetX??0):0));return W(()=>{const d=Number(e.content),v=!e.max||isNaN(d)?e.content:d<=+e.max?d:`${e.max}+`,[f,m]=eo(n.attrs,["aria-atomic","aria-label","aria-live","role","title"]);return s(e.tag,z({class:["v-badge",{"v-badge--bordered":e.bordered,"v-badge--dot":e.dot,"v-badge--floating":e.floating,"v-badge--inline":e.inline},e.class]},m,{style:e.style}),{default:()=>{var b,h;return[s("div",{class:"v-badge__wrapper"},[(h=(b=n.slots).default)==null?void 0:h.call(b),s(ft,{transition:e.transition},{default:()=>{var g,k;return[je(s("span",z({class:["v-badge__badge",u.value,t.value,l.value,i.value],style:[a.value,r.value,e.inline?{}:c.value],"aria-atomic":"true","aria-label":o(e.label,d),"aria-live":"polite",role:"status"},f),[e.dot?void 0:n.slots.badge?(k=(g=n.slots).badge)==null?void 0:k.call(g):e.icon?s(Be,{icon:e.icon},null):v]),[[Mt,e.modelValue]])]}})])]}})}),{}}}),NS=B({color:String,density:String,...ie()},"VBannerActions"),Ju=R()({name:"VBannerActions",props:NS(),setup(e,n){let{slots:t}=n;return Ge({VBtn:{color:e.color,density:e.density,slim:!0,variant:"text"}}),W(()=>{var a;return s("div",{class:["v-banner-actions",e.class],style:e.style},[(a=t.default)==null?void 0:a.call(t)])}),{}}}),Qu=Wt("v-banner-text"),RS=B({avatar:String,bgColor:String,color:String,icon:ve,lines:String,stacked:Boolean,sticky:Boolean,text:String,...wt(),...ie(),...lt(),...Qe(),...In({mobile:null}),...at(),...Xt(),...Jn(),...ze(),...Ve(),...Pe()},"VBanner"),HS=R()({name:"VBanner",props:RS(),setup(e,n){let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(e,"bgColor"),{borderClasses:o}=_t(e),{densityClasses:i}=gt(e),{displayClasses:r,mobile:u}=$t(e),{dimensionStyles:c}=et(e),{elevationClasses:d}=st(e),{locationStyles:v}=En(e),{positionClasses:f}=Qn(e),{roundedClasses:m}=Ue(e),{themeClasses:b}=De(e),h=F(e,"color"),g=F(e,"density");Ge({VBannerActions:{color:h,density:g}}),W(()=>{const k=!!(e.text||t.text),S=!!(e.avatar||e.icon),C=!!(S||t.prepend);return s(e.tag,{class:["v-banner",{"v-banner--stacked":e.stacked||u.value,"v-banner--sticky":e.sticky,[`v-banner--${e.lines}-line`]:!!e.lines},b.value,a.value,o.value,i.value,r.value,d.value,f.value,m.value,e.class],style:[l.value,c.value,v.value,e.style],role:"banner"},{default:()=>{var P;return[C&&s("div",{key:"prepend",class:"v-banner__prepend"},[t.prepend?s(pe,{key:"prepend-defaults",disabled:!S,defaults:{VAvatar:{color:h.value,density:g.value,icon:e.icon,image:e.avatar}}},t.prepend):s(It,{key:"prepend-avatar",color:h.value,density:g.value,icon:e.icon,image:e.avatar},null)]),s("div",{class:"v-banner__content"},[k&&s(Qu,{key:"text"},{default:()=>{var x;return[((x=t.text)==null?void 0:x.call(t))??e.text]}}),(P=t.default)==null?void 0:P.call(t)]),t.actions&&s(Ju,{key:"actions"},t.actions)]}})})}}),zS=B({baseColor:String,bgColor:String,color:String,grow:Boolean,mode:{type:String,validator:e=>!e||["horizontal","shift"].includes(e)},height:{type:[Number,String],default:56},active:{type:Boolean,default:!0},...wt(),...ie(),...lt(),...at(),...ze(),...$n({name:"bottom-navigation"}),...Ve({tag:"header"}),...Dn({selectedClass:"v-btn--selected"}),...Pe()},"VBottomNavigation"),WS=R()({name:"VBottomNavigation",props:zS(),emits:{"update:active":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{themeClasses:a}=js(),{borderClasses:l}=_t(e),{backgroundColorClasses:o,backgroundColorStyles:i}=Le(F(e,"bgColor")),{densityClasses:r}=gt(e),{elevationClasses:u}=st(e),{roundedClasses:c}=Ue(e),{ssrBootStyles:d}=An(),v=y(()=>Number(e.height)-(e.density==="comfortable"?8:0)-(e.density==="compact"?16:0)),f=de(e,"active",e.active),{layoutItemStyles:m}=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:y(()=>"bottom"),layoutSize:y(()=>f.value?v.value:0),elementSize:v,active:f,absolute:F(e,"absolute")});return rn(e,vi),Ge({VBtn:{baseColor:F(e,"baseColor"),color:F(e,"color"),density:F(e,"density"),stacked:y(()=>e.mode!=="horizontal"),variant:"text"}},{scoped:!0}),W(()=>s(e.tag,{class:["v-bottom-navigation",{"v-bottom-navigation--active":f.value,"v-bottom-navigation--grow":e.grow,"v-bottom-navigation--shift":e.mode==="shift"},a.value,o.value,l.value,r.value,u.value,c.value,e.class],style:[i.value,m.value,{height:ne(v.value)},d.value,e.style]},{default:()=>[t.default&&s("div",{class:"v-bottom-navigation__content"},[t.default()])]})),{}}}),ec=B({fullscreen:Boolean,retainFocus:{type:Boolean,default:!0},scrollable:Boolean,..._a({origin:"center center",scrollStrategy:"block",transition:{component:dl},zIndex:2400})},"VDialog"),So=R()({name:"VDialog",props:ec(),emits:{"update:modelValue":e=>!0,afterEnter:()=>!0,afterLeave:()=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=de(e,"modelValue"),{scopeId:o}=Fn(),i=H();function r(d){var m,b;const v=d.relatedTarget,f=d.target;if(v!==f&&((m=i.value)!=null&&m.contentEl)&&((b=i.value)!=null&&b.globalTop)&&![document,i.value.contentEl].includes(f)&&!i.value.contentEl.contains(f)){const h=oa(i.value.contentEl);if(!h.length)return;const g=h[0],k=h[h.length-1];v===g?k.focus():g.focus()}}it(()=>{document.removeEventListener("focusin",r)}),$e&&Q(()=>l.value&&e.retainFocus,d=>{d?document.addEventListener("focusin",r):document.removeEventListener("focusin",r)},{immediate:!0});function u(){var d;t("afterEnter"),(d=i.value)!=null&&d.contentEl&&!i.value.contentEl.contains(document.activeElement)&&i.value.contentEl.focus({preventScroll:!0})}function c(){t("afterLeave")}return Q(l,async d=>{var v;d||(await Te(),(v=i.value.activatorEl)==null||v.focus({preventScroll:!0}))}),W(()=>{const d=Rt.filterProps(e),v=z({"aria-haspopup":"dialog"},e.activatorProps),f=z({tabindex:-1},e.contentProps);return s(Rt,z({ref:i,class:["v-dialog",{"v-dialog--fullscreen":e.fullscreen,"v-dialog--scrollable":e.scrollable},e.class],style:e.style},d,{modelValue:l.value,"onUpdate:modelValue":m=>l.value=m,"aria-modal":"true",activatorProps:v,contentProps:f,height:e.fullscreen?void 0:e.height,width:e.fullscreen?void 0:e.width,maxHeight:e.fullscreen?void 0:e.maxHeight,maxWidth:e.fullscreen?void 0:e.maxWidth,role:"dialog",onAfterEnter:u,onAfterLeave:c},o),{activator:a.activator,default:function(){for(var m=arguments.length,b=new Array(m),h=0;h{var g;return[(g=a.default)==null?void 0:g.call(a,...b)]}})}})}),At({},i)}}),jS=B({inset:Boolean,...ec({transition:"bottom-sheet-transition"})},"VBottomSheet"),GS=R()({name:"VBottomSheet",props:jS(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue");return W(()=>{const l=So.filterProps(e);return s(So,z(l,{contentClass:["v-bottom-sheet__content",e.contentClass],modelValue:a.value,"onUpdate:modelValue":o=>a.value=o,class:["v-bottom-sheet",{"v-bottom-sheet--inset":e.inset},e.class],style:e.style}),t)}),{}}}),YS=B({divider:[Number,String],...ie()},"VBreadcrumbsDivider"),tc=R()({name:"VBreadcrumbsDivider",props:YS(),setup(e,n){let{slots:t}=n;return W(()=>{var a;return s("li",{class:["v-breadcrumbs-divider",e.class],style:e.style},[((a=t==null?void 0:t.default)==null?void 0:a.call(t))??e.divider])}),{}}}),US=B({active:Boolean,activeClass:String,activeColor:String,color:String,disabled:Boolean,title:String,...ie(),...Ca(),...Ve({tag:"li"})},"VBreadcrumbsItem"),nc=R()({name:"VBreadcrumbsItem",props:US(),setup(e,n){let{slots:t,attrs:a}=n;const l=Va(e,a),o=y(()=>{var c;return e.active||((c=l.isActive)==null?void 0:c.value)}),i=y(()=>o.value?e.activeColor:e.color),{textColorClasses:r,textColorStyles:u}=ut(i);return W(()=>s(e.tag,{class:["v-breadcrumbs-item",{"v-breadcrumbs-item--active":o.value,"v-breadcrumbs-item--disabled":e.disabled,[`${e.activeClass}`]:o.value&&e.activeClass},r.value,e.class],style:[u.value,e.style],"aria-current":o.value?"page":void 0},{default:()=>{var c,d;return[l.isLink.value?s("a",z({class:"v-breadcrumbs-item--link",onClick:l.navigate},l.linkProps),[((d=t.default)==null?void 0:d.call(t))??e.title]):((c=t.default)==null?void 0:c.call(t))??e.title]}})),{}}}),KS=B({activeClass:String,activeColor:String,bgColor:String,color:String,disabled:Boolean,divider:{type:String,default:"/"},icon:ve,items:{type:Array,default:()=>[]},...ie(),...lt(),...ze(),...Ve({tag:"ul"})},"VBreadcrumbs"),qS=R()({name:"VBreadcrumbs",props:KS(),setup(e,n){let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(F(e,"bgColor")),{densityClasses:o}=gt(e),{roundedClasses:i}=Ue(e);Ge({VBreadcrumbsDivider:{divider:F(e,"divider")},VBreadcrumbsItem:{activeClass:F(e,"activeClass"),activeColor:F(e,"activeColor"),color:F(e,"color"),disabled:F(e,"disabled")}});const r=y(()=>e.items.map(u=>typeof u=="string"?{item:{title:u},raw:u}:{item:u,raw:u}));return W(()=>{const u=!!(t.prepend||e.icon);return s(e.tag,{class:["v-breadcrumbs",a.value,o.value,i.value,e.class],style:[l.value,e.style]},{default:()=>{var c;return[u&&s("li",{key:"prepend",class:"v-breadcrumbs__prepend"},[t.prepend?s(pe,{key:"prepend-defaults",disabled:!e.icon,defaults:{VIcon:{icon:e.icon,start:!0}}},t.prepend):s(Be,{key:"prepend-icon",start:!0,icon:e.icon},null)]),r.value.map((d,v,f)=>{var h;let{item:m,raw:b}=d;return s(ae,null,[((h=t.item)==null?void 0:h.call(t,{item:m,index:v}))??s(nc,z({key:v,disabled:v>=f.length-1},typeof m=="string"?{title:m}:m),{default:t.title?()=>{var g;return(g=t.title)==null?void 0:g.call(t,{item:m,index:v})}:void 0}),v{var g;return(g=t.divider)==null?void 0:g.call(t,{item:b,index:v})}:void 0})])}),(c=t.default)==null?void 0:c.call(t)]}})}),{}}}),ac=R()({name:"VCardActions",props:ie(),setup(e,n){let{slots:t}=n;return Ge({VBtn:{slim:!0,variant:"text"}}),W(()=>{var a;return s("div",{class:["v-card-actions",e.class],style:e.style},[(a=t.default)==null?void 0:a.call(t)])}),{}}}),XS=B({opacity:[Number,String],...ie(),...Ve()},"VCardSubtitle"),lc=R()({name:"VCardSubtitle",props:XS(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-card-subtitle",e.class],style:[{"--v-card-subtitle-opacity":e.opacity},e.style]},t)),{}}}),oc=Wt("v-card-title"),ZS=B({appendAvatar:String,appendIcon:ve,prependAvatar:String,prependIcon:ve,subtitle:[String,Number],title:[String,Number],...ie(),...lt()},"VCardItem"),ic=R()({name:"VCardItem",props:ZS(),setup(e,n){let{slots:t}=n;return W(()=>{var c;const a=!!(e.prependAvatar||e.prependIcon),l=!!(a||t.prepend),o=!!(e.appendAvatar||e.appendIcon),i=!!(o||t.append),r=!!(e.title!=null||t.title),u=!!(e.subtitle!=null||t.subtitle);return s("div",{class:["v-card-item",e.class],style:e.style},[l&&s("div",{key:"prepend",class:"v-card-item__prepend"},[t.prepend?s(pe,{key:"prepend-defaults",disabled:!a,defaults:{VAvatar:{density:e.density,image:e.prependAvatar},VIcon:{density:e.density,icon:e.prependIcon}}},t.prepend):s(ae,null,[e.prependAvatar&&s(It,{key:"prepend-avatar",density:e.density,image:e.prependAvatar},null),e.prependIcon&&s(Be,{key:"prepend-icon",density:e.density,icon:e.prependIcon},null)])]),s("div",{class:"v-card-item__content"},[r&&s(oc,{key:"title"},{default:()=>{var d;return[((d=t.title)==null?void 0:d.call(t))??e.title]}}),u&&s(lc,{key:"subtitle"},{default:()=>{var d;return[((d=t.subtitle)==null?void 0:d.call(t))??e.subtitle]}}),(c=t.default)==null?void 0:c.call(t)]),i&&s("div",{key:"append",class:"v-card-item__append"},[t.append?s(pe,{key:"append-defaults",disabled:!o,defaults:{VAvatar:{density:e.density,image:e.appendAvatar},VIcon:{density:e.density,icon:e.appendIcon}}},t.append):s(ae,null,[e.appendIcon&&s(Be,{key:"append-icon",density:e.density,icon:e.appendIcon},null),e.appendAvatar&&s(It,{key:"append-avatar",density:e.density,image:e.appendAvatar},null)])])])}),{}}}),JS=B({opacity:[Number,String],...ie(),...Ve()},"VCardText"),rc=R()({name:"VCardText",props:JS(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-card-text",e.class],style:[{"--v-card-text-opacity":e.opacity},e.style]},t)),{}}}),QS=B({appendAvatar:String,appendIcon:ve,disabled:Boolean,flat:Boolean,hover:Boolean,image:String,link:{type:Boolean,default:void 0},prependAvatar:String,prependIcon:ve,ripple:{type:[Boolean,Object],default:!0},subtitle:[String,Number],text:[String,Number],title:[String,Number],...wt(),...ie(),...lt(),...Qe(),...at(),...gl(),...Xt(),...Jn(),...ze(),...Ca(),...Ve(),...Pe(),...Tt({variant:"elevated"})},"VCard"),e0=R()({name:"VCard",directives:{Ripple:Zt},props:QS(),setup(e,n){let{attrs:t,slots:a}=n;const{themeClasses:l}=De(e),{borderClasses:o}=_t(e),{colorClasses:i,colorStyles:r,variantClasses:u}=Bn(e),{densityClasses:c}=gt(e),{dimensionStyles:d}=et(e),{elevationClasses:v}=st(e),{loaderClasses:f}=Sa(e),{locationStyles:m}=En(e),{positionClasses:b}=Qn(e),{roundedClasses:h}=Ue(e),g=Va(e,t),k=y(()=>e.link!==!1&&g.isLink.value),S=y(()=>!e.disabled&&e.link!==!1&&(e.link||g.isClickable.value));return W(()=>{const C=k.value?"a":e.tag,P=!!(a.title||e.title!=null),x=!!(a.subtitle||e.subtitle!=null),_=P||x,T=!!(a.append||e.appendAvatar||e.appendIcon),V=!!(a.prepend||e.prependAvatar||e.prependIcon),w=!!(a.image||e.image),$=_||V||T,p=!!(a.text||e.text!=null);return je(s(C,z({class:["v-card",{"v-card--disabled":e.disabled,"v-card--flat":e.flat,"v-card--hover":e.hover&&!(e.disabled||e.flat),"v-card--link":S.value},l.value,o.value,i.value,c.value,v.value,f.value,b.value,h.value,u.value,e.class],style:[r.value,d.value,m.value,e.style],onClick:S.value&&g.navigate,tabindex:e.disabled?-1:void 0},g.linkProps),{default:()=>{var I;return[w&&s("div",{key:"image",class:"v-card__image"},[a.image?s(pe,{key:"image-defaults",disabled:!e.image,defaults:{VImg:{cover:!0,src:e.image}}},a.image):s(Yt,{key:"image-img",cover:!0,src:e.image},null)]),s(wa,{name:"v-card",active:!!e.loading,color:typeof e.loading=="boolean"?void 0:e.loading},{default:a.loader}),$&&s(ic,{key:"item",prependAvatar:e.prependAvatar,prependIcon:e.prependIcon,title:e.title,subtitle:e.subtitle,appendAvatar:e.appendAvatar,appendIcon:e.appendIcon},{default:a.item,prepend:a.prepend,title:a.title,subtitle:a.subtitle,append:a.append}),p&&s(rc,{key:"text"},{default:()=>{var A;return[((A=a.text)==null?void 0:A.call(a))??e.text]}}),(I=a.default)==null?void 0:I.call(a),a.actions&&s(ac,null,{default:a.actions}),on(S.value,"v-card")]}}),[[Ct("ripple"),S.value&&e.ripple]])}),{}}}),t0=e=>{const{touchstartX:n,touchendX:t,touchstartY:a,touchendY:l}=e,o=.5,i=16;e.offsetX=t-n,e.offsetY=l-a,Math.abs(e.offsetY)n+i&&e.right(e)),Math.abs(e.offsetX)a+i&&e.down(e))};function n0(e,n){var a;const t=e.changedTouches[0];n.touchstartX=t.clientX,n.touchstartY=t.clientY,(a=n.start)==null||a.call(n,{originalEvent:e,...n})}function a0(e,n){var a;const t=e.changedTouches[0];n.touchendX=t.clientX,n.touchendY=t.clientY,(a=n.end)==null||a.call(n,{originalEvent:e,...n}),t0(n)}function l0(e,n){var a;const t=e.changedTouches[0];n.touchmoveX=t.clientX,n.touchmoveY=t.clientY,(a=n.move)==null||a.call(n,{originalEvent:e,...n})}function o0(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const n={touchstartX:0,touchstartY:0,touchendX:0,touchendY:0,touchmoveX:0,touchmoveY:0,offsetX:0,offsetY:0,left:e.left,right:e.right,up:e.up,down:e.down,start:e.start,move:e.move,end:e.end};return{touchstart:t=>n0(t,n),touchend:t=>a0(t,n),touchmove:t=>l0(t,n)}}function i0(e,n){var r;const t=n.value,a=t!=null&&t.parent?e.parentElement:e,l=(t==null?void 0:t.options)??{passive:!0},o=(r=n.instance)==null?void 0:r.$.uid;if(!a||!o)return;const i=o0(n.value);a._touchHandlers=a._touchHandlers??Object.create(null),a._touchHandlers[o]=i,fs(i).forEach(u=>{a.addEventListener(u,i[u],l)})}function r0(e,n){var o,i;const t=(o=n.value)!=null&&o.parent?e.parentElement:e,a=(i=n.instance)==null?void 0:i.$.uid;if(!(t!=null&&t._touchHandlers)||!a)return;const l=t._touchHandlers[a];fs(l).forEach(r=>{t.removeEventListener(r,l[r])}),delete t._touchHandlers[a]}const _i={mounted:i0,unmounted:r0},sc=Symbol.for("vuetify:v-window"),uc=Symbol.for("vuetify:v-window-group"),Cl=B({continuous:Boolean,nextIcon:{type:[Boolean,String,Function,Object],default:"$next"},prevIcon:{type:[Boolean,String,Function,Object],default:"$prev"},reverse:Boolean,showArrows:{type:[Boolean,String],validator:e=>typeof e=="boolean"||e==="hover"},touch:{type:[Object,Boolean],default:void 0},direction:{type:String,default:"horizontal"},modelValue:null,disabled:Boolean,selectedClass:{type:String,default:"v-window-item--active"},mandatory:{type:[Boolean,String],default:"force"},...ie(),...Ve(),...Pe()},"VWindow"),wn=R()({name:"VWindow",directives:{Touch:_i},props:Cl(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{isRtl:l}=nt(),{t:o}=qe(),i=rn(e,uc),r=H(),u=y(()=>l.value?!e.reverse:e.reverse),c=ee(!1),d=y(()=>{const P=e.direction==="vertical"?"y":"x",_=(u.value?!c.value:c.value)?"-reverse":"";return`v-window-${P}${_}-transition`}),v=ee(0),f=H(void 0),m=y(()=>i.items.value.findIndex(P=>i.selected.value.includes(P.id)));Q(m,(P,x)=>{const _=i.items.value.length,T=_-1;_<=2?c.value=Pe.continuous||m.value!==0),h=y(()=>e.continuous||m.value!==i.items.value.length-1);function g(){b.value&&i.prev()}function k(){h.value&&i.next()}const S=y(()=>{const P=[],x={icon:l.value?e.nextIcon:e.prevIcon,class:`v-window__${u.value?"right":"left"}`,onClick:i.prev,"aria-label":o("$vuetify.carousel.prev")};P.push(b.value?t.prev?t.prev({props:x}):s(Ae,x,null):s("div",null,null));const _={icon:l.value?e.prevIcon:e.nextIcon,class:`v-window__${u.value?"left":"right"}`,onClick:i.next,"aria-label":o("$vuetify.carousel.next")};return P.push(h.value?t.next?t.next({props:_}):s(Ae,_,null):s("div",null,null)),P}),C=y(()=>e.touch===!1?e.touch:{...{left:()=>{u.value?g():k()},right:()=>{u.value?k():g()},start:x=>{let{originalEvent:_}=x;_.stopPropagation()}},...e.touch===!0?{}:e.touch});return W(()=>je(s(e.tag,{ref:r,class:["v-window",{"v-window--show-arrows-on-hover":e.showArrows==="hover"},a.value,e.class],style:e.style},{default:()=>{var P,x;return[s("div",{class:"v-window__container",style:{height:f.value}},[(P=t.default)==null?void 0:P.call(t,{group:i}),e.showArrows!==!1&&s("div",{class:"v-window__controls"},[S.value])]),(x=t.additional)==null?void 0:x.call(t,{group:i})]}}),[[Ct("touch"),C.value]])),{group:i}}}),s0=B({color:String,cycle:Boolean,delimiterIcon:{type:ve,default:"$delimiter"},height:{type:[Number,String],default:500},hideDelimiters:Boolean,hideDelimiterBackground:Boolean,interval:{type:[Number,String],default:6e3,validator:e=>Number(e)>0},progress:[Boolean,String],verticalDelimiters:[Boolean,String],...Cl({continuous:!0,mandatory:"force",showArrows:!0})},"VCarousel"),u0=R()({name:"VCarousel",props:s0(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{t:l}=qe(),o=H();let i=-1;Q(a,u),Q(()=>e.interval,u),Q(()=>e.cycle,c=>{c?u():window.clearTimeout(i)}),Ke(r);function r(){!e.cycle||!o.value||(i=window.setTimeout(o.value.group.next,+e.interval>0?+e.interval:6e3))}function u(){window.clearTimeout(i),window.requestAnimationFrame(r)}return W(()=>{const c=wn.filterProps(e);return s(wn,z({ref:o},c,{modelValue:a.value,"onUpdate:modelValue":d=>a.value=d,class:["v-carousel",{"v-carousel--hide-delimiter-background":e.hideDelimiterBackground,"v-carousel--vertical-delimiters":e.verticalDelimiters},e.class],style:[{height:ne(e.height)},e.style]}),{default:t.default,additional:d=>{let{group:v}=d;return s(ae,null,[!e.hideDelimiters&&s("div",{class:"v-carousel__controls",style:{left:e.verticalDelimiters==="left"&&e.verticalDelimiters?0:"auto",right:e.verticalDelimiters==="right"?0:"auto"}},[v.items.value.length>0&&s(pe,{defaults:{VBtn:{color:e.color,icon:e.delimiterIcon,size:"x-small",variant:"text"}},scoped:!0},{default:()=>[v.items.value.map((f,m)=>{const b={id:`carousel-item-${f.id}`,"aria-label":l("$vuetify.carousel.ariaLabel.delimiter",m+1,v.items.value.length),class:["v-carousel__controls__item",v.isSelected(f.id)&&"v-btn--active"],onClick:()=>v.select(f.id,!0)};return t.item?t.item({props:b,item:f}):s(Ae,z(f,b),null)})]})]),e.progress&&s(ml,{class:"v-carousel__progress",color:typeof e.progress=="string"?e.progress:void 0,modelValue:(v.getItemIndex(a.value)+1)/v.items.value.length*100},null)])},prev:t.prev,next:t.next})}),{}}}),pl=B({reverseTransition:{type:[Boolean,String],default:void 0},transition:{type:[Boolean,String],default:void 0},...ie(),...Ln(),...Si()},"VWindowItem"),Vn=R()({name:"VWindowItem",directives:{Touch:_i},props:pl(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const a=xe(sc),l=Mn(e,uc),{isBooted:o}=An();if(!a||!l)throw new Error("[Vuetify] VWindowItem must be used inside VWindow");const i=ee(!1),r=y(()=>o.value&&(a.isReversed.value?e.reverseTransition!==!1:e.transition!==!1));function u(){!i.value||!a||(i.value=!1,a.transitionCount.value>0&&(a.transitionCount.value-=1,a.transitionCount.value===0&&(a.transitionHeight.value=void 0)))}function c(){var b;i.value||!a||(i.value=!0,a.transitionCount.value===0&&(a.transitionHeight.value=ne((b=a.rootRef.value)==null?void 0:b.clientHeight)),a.transitionCount.value+=1)}function d(){u()}function v(b){i.value&&Te(()=>{!r.value||!i.value||!a||(a.transitionHeight.value=ne(b.clientHeight))})}const f=y(()=>{const b=a.isReversed.value?e.reverseTransition:e.transition;return r.value?{name:typeof b!="string"?a.transition.value:b,onBeforeEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:c,onAfterLeave:u,onLeaveCancelled:d,onEnter:v}:!1}),{hasContent:m}=wi(e,l.isSelected);return W(()=>s(ft,{transition:f.value,disabled:!o.value},{default:()=>{var b;return[je(s("div",{class:["v-window-item",l.selectedClass.value,e.class],style:e.style},[m.value&&((b=t.default)==null?void 0:b.call(t))]),[[Mt,l.isSelected.value]])]}})),{groupItem:l}}}),c0=B({...tu(),...pl()},"VCarouselItem"),d0=R()({name:"VCarouselItem",inheritAttrs:!1,props:c0(),setup(e,n){let{slots:t,attrs:a}=n;W(()=>{const l=Yt.filterProps(e),o=Vn.filterProps(e);return s(Vn,z({class:["v-carousel-item",e.class]},o),{default:()=>[s(Yt,z(a,l),t)]})})}}),v0=Wt("v-code","code"),f0=B({color:{type:Object},disabled:Boolean,dotSize:{type:[Number,String],default:10},height:{type:[Number,String],default:150},width:{type:[Number,String],default:300},...ie()},"VColorPickerCanvas"),m0=pt({name:"VColorPickerCanvas",props:f0(),emits:{"update:color":e=>!0,"update:position":e=>!0},setup(e,n){let{emit:t}=n;const a=ee(!1),l=H(),o=ee(parseFloat(e.width)),i=ee(parseFloat(e.height)),r=H({x:0,y:0}),u=y({get:()=>r.value,set(g){var C,P;if(!l.value)return;const{x:k,y:S}=g;r.value=g,t("update:color",{h:((C=e.color)==null?void 0:C.h)??0,s:Xe(k,0,o.value)/o.value,v:1-Xe(S,0,i.value)/i.value,a:((P=e.color)==null?void 0:P.a)??1})}}),c=y(()=>{const{x:g,y:k}=u.value,S=parseInt(e.dotSize,10)/2;return{width:ne(e.dotSize),height:ne(e.dotSize),transform:`translate(${ne(g-S)}, ${ne(k-S)})`}}),{resizeRef:d}=Lt(g=>{var C;if(!((C=d.el)!=null&&C.offsetParent))return;const{width:k,height:S}=g[0].contentRect;o.value=k,i.value=S});function v(g,k,S){const{left:C,top:P,width:x,height:_}=S;u.value={x:Xe(g-C,0,x),y:Xe(k-P,0,_)}}function f(g){g.type==="mousedown"&&g.preventDefault(),!e.disabled&&(m(g),window.addEventListener("mousemove",m),window.addEventListener("mouseup",b),window.addEventListener("touchmove",m),window.addEventListener("touchend",b))}function m(g){if(e.disabled||!l.value)return;a.value=!0;const k=Ah(g);v(k.clientX,k.clientY,l.value.getBoundingClientRect())}function b(){window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",b),window.removeEventListener("touchmove",m),window.removeEventListener("touchend",b)}function h(){var P;if(!l.value)return;const g=l.value,k=g.getContext("2d");if(!k)return;const S=k.createLinearGradient(0,0,g.width,0);S.addColorStop(0,"hsla(0, 0%, 100%, 1)"),S.addColorStop(1,`hsla(${((P=e.color)==null?void 0:P.h)??0}, 100%, 50%, 1)`),k.fillStyle=S,k.fillRect(0,0,g.width,g.height);const C=k.createLinearGradient(0,0,0,g.height);C.addColorStop(0,"hsla(0, 0%, 0%, 0)"),C.addColorStop(1,"hsla(0, 0%, 0%, 1)"),k.fillStyle=C,k.fillRect(0,0,g.width,g.height)}return Q(()=>{var g;return(g=e.color)==null?void 0:g.h},h,{immediate:!0}),Q(()=>[o.value,i.value],(g,k)=>{h(),r.value={x:u.value.x*g[0]/k[0],y:u.value.y*g[1]/k[1]}},{flush:"post"}),Q(()=>e.color,()=>{if(a.value){a.value=!1;return}r.value=e.color?{x:e.color.s*o.value,y:(1-e.color.v)*i.value}:{x:0,y:0}},{deep:!0,immediate:!0}),Ke(()=>h()),W(()=>s("div",{ref:d,class:["v-color-picker-canvas",e.class],style:e.style,onMousedown:f,onTouchstartPassive:f},[s("canvas",{ref:l,width:o.value,height:i.value},null),e.color&&s("div",{class:["v-color-picker-canvas__dot",{"v-color-picker-canvas__dot--disabled":e.disabled}],style:c.value},null)])),{}}});function g0(e,n){if(n){const{a:t,...a}=e;return a}return e}function h0(e,n){if(n==null||typeof n=="string"){const t=Ts(e);return e.a===1?t.slice(0,7):t}if(typeof n=="object"){let t;return vn(n,["r","g","b"])?t=Gt(e):vn(n,["h","s","l"])?t=ps(e):vn(n,["h","s","v"])&&(t=e),g0(t,!vn(n,["a"])&&e.a===1)}return e}const Wn={h:0,s:0,v:0,a:1},wo={inputProps:{type:"number",min:0},inputs:[{label:"R",max:255,step:1,getValue:e=>Math.round(e.r),getColor:(e,n)=>({...e,r:Number(n)})},{label:"G",max:255,step:1,getValue:e=>Math.round(e.g),getColor:(e,n)=>({...e,g:Number(n)})},{label:"B",max:255,step:1,getValue:e=>Math.round(e.b),getColor:(e,n)=>({...e,b:Number(n)})},{label:"A",max:1,step:.01,getValue:e=>{let{a:n}=e;return n!=null?Math.round(n*100)/100:1},getColor:(e,n)=>({...e,a:Number(n)})}],to:Gt,from:rl};var Xr;const y0={...wo,inputs:(Xr=wo.inputs)==null?void 0:Xr.slice(0,3)},Vo={inputProps:{type:"number",min:0},inputs:[{label:"H",max:360,step:1,getValue:e=>Math.round(e.h),getColor:(e,n)=>({...e,h:Number(n)})},{label:"S",max:1,step:.01,getValue:e=>Math.round(e.s*100)/100,getColor:(e,n)=>({...e,s:Number(n)})},{label:"L",max:1,step:.01,getValue:e=>Math.round(e.l*100)/100,getColor:(e,n)=>({...e,l:Number(n)})},{label:"A",max:1,step:.01,getValue:e=>{let{a:n}=e;return n!=null?Math.round(n*100)/100:1},getColor:(e,n)=>({...e,a:Number(n)})}],to:ps,from:ei},b0={...Vo,inputs:Vo.inputs.slice(0,3)},cc={inputProps:{type:"text"},inputs:[{label:"HEXA",getValue:e=>e,getColor:(e,n)=>n}],to:Ts,from:$s},k0={...cc,inputs:[{label:"HEX",getValue:e=>e.slice(0,7),getColor:(e,n)=>n}]},yn={rgb:y0,rgba:wo,hsl:b0,hsla:Vo,hex:k0,hexa:cc},S0=e=>{let{label:n,...t}=e;return s("div",{class:"v-color-picker-edit__input"},[s("input",t,null),s("span",null,[n])])},w0=B({color:Object,disabled:Boolean,mode:{type:String,default:"rgba",validator:e=>Object.keys(yn).includes(e)},modes:{type:Array,default:()=>Object.keys(yn),validator:e=>Array.isArray(e)&&e.every(n=>Object.keys(yn).includes(n))},...ie()},"VColorPickerEdit"),V0=pt({name:"VColorPickerEdit",props:w0(),emits:{"update:color":e=>!0,"update:mode":e=>!0},setup(e,n){let{emit:t}=n;const a=y(()=>e.modes.map(o=>({...yn[o],name:o}))),l=y(()=>{var r;const o=a.value.find(u=>u.name===e.mode);if(!o)return[];const i=e.color?o.to(e.color):null;return(r=o.inputs)==null?void 0:r.map(u=>{let{getValue:c,getColor:d,...v}=u;return{...o.inputProps,...v,disabled:e.disabled,value:i&&c(i),onChange:f=>{const m=f.target;m&&t("update:color",o.from(d(i??o.to(Wn),m.value)))}}})});return W(()=>{var o;return s("div",{class:["v-color-picker-edit",e.class],style:e.style},[(o=l.value)==null?void 0:o.map(i=>s(S0,i,null)),a.value.length>1&&s(Ae,{icon:"$unfold",size:"x-small",variant:"plain",onClick:()=>{const i=a.value.findIndex(r=>r.name===e.mode);t("update:mode",a.value[(i+1)%a.value.length].name)}},null)])}),{}}}),Pi=Symbol.for("vuetify:v-slider");function Co(e,n,t){const a=t==="vertical",l=n.getBoundingClientRect(),o="touches"in e?e.touches[0]:e;return a?o.clientY-(l.top+l.height/2):o.clientX-(l.left+l.width/2)}function C0(e,n){return"touches"in e&&e.touches.length?e.touches[0][n]:"changedTouches"in e&&e.changedTouches.length?e.changedTouches[0][n]:e[n]}const dc=B({disabled:{type:Boolean,default:null},error:Boolean,readonly:{type:Boolean,default:null},max:{type:[Number,String],default:100},min:{type:[Number,String],default:0},step:{type:[Number,String],default:0},thumbColor:String,thumbLabel:{type:[Boolean,String],default:void 0,validator:e=>typeof e=="boolean"||e==="always"},thumbSize:{type:[Number,String],default:20},showTicks:{type:[Boolean,String],default:!1,validator:e=>typeof e=="boolean"||e==="always"},ticks:{type:[Array,Object]},tickSize:{type:[Number,String],default:2},color:String,trackColor:String,trackFillColor:String,trackSize:{type:[Number,String],default:4},direction:{type:String,default:"horizontal",validator:e=>["vertical","horizontal"].includes(e)},reverse:Boolean,...ze(),...at({elevation:2}),ripple:{type:Boolean,default:!0}},"Slider"),vc=e=>{const n=y(()=>parseFloat(e.min)),t=y(()=>parseFloat(e.max)),a=y(()=>+e.step>0?parseFloat(e.step):0),l=y(()=>Math.max(qi(a.value),qi(n.value)));function o(i){if(i=parseFloat(i),a.value<=0)return i;const r=Xe(i,n.value,t.value),u=n.value%a.value,c=Math.round((r-u)/a.value)*a.value+u;return parseFloat(Math.min(c,t.value).toFixed(l.value))}return{min:n,max:t,step:a,decimals:l,roundValue:o}},fc=e=>{let{props:n,steps:t,onSliderStart:a,onSliderMove:l,onSliderEnd:o,getActiveThumb:i}=e;const{isRtl:r}=nt(),u=F(n,"reverse"),c=y(()=>n.direction==="vertical"),d=y(()=>c.value!==u.value),{min:v,max:f,step:m,decimals:b,roundValue:h}=t,g=y(()=>parseInt(n.thumbSize,10)),k=y(()=>parseInt(n.tickSize,10)),S=y(()=>parseInt(n.trackSize,10)),C=y(()=>(f.value-v.value)/m.value),P=F(n,"disabled"),x=y(()=>n.error||n.disabled?void 0:n.thumbColor??n.color),_=y(()=>n.error||n.disabled?void 0:n.trackColor??n.color),T=y(()=>n.error||n.disabled?void 0:n.trackFillColor??n.color),V=ee(!1),w=ee(0),$=H(),p=H();function I(G){var ke;const ce=n.direction==="vertical",me=ce?"top":"left",Me=ce?"height":"width",Ie=ce?"clientY":"clientX",{[me]:Z,[Me]:Ce}=(ke=$.value)==null?void 0:ke.$el.getBoundingClientRect(),q=C0(G,Ie);let oe=Math.min(Math.max((q-Z-w.value)/Ce,0),1)||0;return(ce?d.value:d.value!==r.value)&&(oe=1-oe),h(v.value+oe*(f.value-v.value))}const A=G=>{o({value:I(G)}),V.value=!1,w.value=0},M=G=>{p.value=i(G),p.value&&(p.value.focus(),V.value=!0,p.value.contains(G.target)?w.value=Co(G,p.value,n.direction):(w.value=0,l({value:I(G)})),a({value:I(G)}))},j={passive:!0,capture:!0};function Y(G){l({value:I(G)})}function le(G){G.stopPropagation(),G.preventDefault(),A(G),window.removeEventListener("mousemove",Y,j),window.removeEventListener("mouseup",le)}function re(G){var ce;A(G),window.removeEventListener("touchmove",Y,j),(ce=G.target)==null||ce.removeEventListener("touchend",re)}function N(G){var ce;M(G),window.addEventListener("touchmove",Y,j),(ce=G.target)==null||ce.addEventListener("touchend",re,{passive:!1})}function E(G){G.preventDefault(),M(G),window.addEventListener("mousemove",Y,j),window.addEventListener("mouseup",le,{passive:!1})}const O=G=>{const ce=(G-v.value)/(f.value-v.value)*100;return Xe(isNaN(ce)?0:ce,0,100)},te=F(n,"showTicks"),se=y(()=>te.value?n.ticks?Array.isArray(n.ticks)?n.ticks.map(G=>({value:G,position:O(G),label:G.toString()})):Object.keys(n.ticks).map(G=>({value:parseFloat(G),position:O(parseFloat(G)),label:n.ticks[G]})):C.value!==1/0?Ot(C.value+1).map(G=>{const ce=v.value+G*m.value;return{value:ce,position:O(ce)}}):[]:[]),ue=y(()=>se.value.some(G=>{let{label:ce}=G;return!!ce})),ye={activeThumbRef:p,color:F(n,"color"),decimals:b,disabled:P,direction:F(n,"direction"),elevation:F(n,"elevation"),hasLabels:ue,isReversed:u,indexFromEnd:d,min:v,max:f,mousePressed:V,numTicks:C,onSliderMousedown:E,onSliderTouchstart:N,parsedTicks:se,parseMouseMove:I,position:O,readonly:F(n,"readonly"),rounded:F(n,"rounded"),roundValue:h,showTicks:te,startOffset:w,step:m,thumbSize:g,thumbColor:x,thumbLabel:F(n,"thumbLabel"),ticks:F(n,"ticks"),tickSize:k,trackColor:_,trackContainerRef:$,trackFillColor:T,trackSize:S,vertical:c};return Re(Pi,ye),ye},p0=B({focused:Boolean,max:{type:Number,required:!0},min:{type:Number,required:!0},modelValue:{type:Number,required:!0},position:{type:Number,required:!0},ripple:{type:[Boolean,Object],default:!0},name:String,...ie()},"VSliderThumb"),po=R()({name:"VSliderThumb",directives:{Ripple:Zt},props:p0(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=xe(Pi),{isRtl:o,rtlClasses:i}=nt();if(!l)throw new Error("[Vuetify] v-slider-thumb must be used inside v-slider or v-range-slider");const{thumbColor:r,step:u,disabled:c,thumbSize:d,thumbLabel:v,direction:f,isReversed:m,vertical:b,readonly:h,elevation:g,mousePressed:k,decimals:S,indexFromEnd:C}=l,P=y(()=>c.value?void 0:g.value),{elevationClasses:x}=st(P),{textColorClasses:_,textColorStyles:T}=ut(r),{pageup:V,pagedown:w,end:$,home:p,left:I,right:A,down:M,up:j}=Ql,Y=[V,w,$,p,I,A,M,j],le=y(()=>u.value?[1,2,3]:[1,5,10]);function re(E,O){if(!Y.includes(E.key))return;E.preventDefault();const te=u.value||.1,se=(e.max-e.min)/te;if([I,A,M,j].includes(E.key)){const ye=(b.value?[o.value?I:A,m.value?M:j]:C.value!==o.value?[I,j]:[A,j]).includes(E.key)?1:-1,G=E.shiftKey?2:E.ctrlKey?1:0;O=O+ye*te*le.value[G]}else if(E.key===p)O=e.min;else if(E.key===$)O=e.max;else{const ue=E.key===w?1:-1;O=O-ue*te*(se>100?se/10:10)}return Math.max(e.min,Math.min(e.max,O))}function N(E){const O=re(E,e.modelValue);O!=null&&a("update:modelValue",O)}return W(()=>{const E=ne(C.value?100-e.position:e.position,"%");return s("div",{class:["v-slider-thumb",{"v-slider-thumb--focused":e.focused,"v-slider-thumb--pressed":e.focused&&k.value},e.class,i.value],style:[{"--v-slider-thumb-position":E,"--v-slider-thumb-size":ne(d.value)},e.style],role:"slider",tabindex:c.value?-1:0,"aria-label":e.name,"aria-valuemin":e.min,"aria-valuemax":e.max,"aria-valuenow":e.modelValue,"aria-readonly":!!h.value,"aria-orientation":f.value,onKeydown:h.value?void 0:N},[s("div",{class:["v-slider-thumb__surface",_.value,x.value],style:{...T.value}},null),je(s("div",{class:["v-slider-thumb__ripple",_.value],style:T.value},null),[[Ct("ripple"),e.ripple,null,{circle:!0,center:!0}]]),s(si,{origin:"bottom center"},{default:()=>{var O;return[je(s("div",{class:"v-slider-thumb__label-container"},[s("div",{class:["v-slider-thumb__label"]},[s("div",null,[((O=t["thumb-label"])==null?void 0:O.call(t,{modelValue:e.modelValue}))??e.modelValue.toFixed(u.value?S.value:1)])])]),[[Mt,v.value&&e.focused||v.value==="always"]])]}})])}),{}}}),x0=B({start:{type:Number,required:!0},stop:{type:Number,required:!0},...ie()},"VSliderTrack"),mc=R()({name:"VSliderTrack",props:x0(),emits:{},setup(e,n){let{slots:t}=n;const a=xe(Pi);if(!a)throw new Error("[Vuetify] v-slider-track must be inside v-slider or v-range-slider");const{color:l,parsedTicks:o,rounded:i,showTicks:r,tickSize:u,trackColor:c,trackFillColor:d,trackSize:v,vertical:f,min:m,max:b,indexFromEnd:h}=a,{roundedClasses:g}=Ue(i),{backgroundColorClasses:k,backgroundColorStyles:S}=Le(d),{backgroundColorClasses:C,backgroundColorStyles:P}=Le(c),x=y(()=>`inset-${f.value?"block":"inline"}-${h.value?"end":"start"}`),_=y(()=>f.value?"height":"width"),T=y(()=>({[x.value]:"0%",[_.value]:"100%"})),V=y(()=>e.stop-e.start),w=y(()=>({[x.value]:ne(e.start,"%"),[_.value]:ne(V.value,"%")})),$=y(()=>r.value?(f.value?o.value.slice().reverse():o.value).map((I,A)=>{var j;const M=I.value!==m.value&&I.value!==b.value?ne(I.position,"%"):void 0;return s("div",{key:I.value,class:["v-slider-track__tick",{"v-slider-track__tick--filled":I.position>=e.start&&I.position<=e.stop,"v-slider-track__tick--first":I.value===m.value,"v-slider-track__tick--last":I.value===b.value}],style:{[x.value]:M}},[(I.label||t["tick-label"])&&s("div",{class:"v-slider-track__tick-label"},[((j=t["tick-label"])==null?void 0:j.call(t,{tick:I,index:A}))??I.label])])}):[]);return W(()=>s("div",{class:["v-slider-track",g.value,e.class],style:[{"--v-slider-track-size":ne(v.value),"--v-slider-tick-size":ne(u.value)},e.style]},[s("div",{class:["v-slider-track__background",C.value,{"v-slider-track__background--opacity":!!l.value||!d.value}],style:{...T.value,...P.value}},null),s("div",{class:["v-slider-track__fill",k.value],style:{...w.value,...S.value}},null),r.value&&s("div",{class:["v-slider-track__ticks",{"v-slider-track__ticks--always-show":r.value==="always"}]},[$.value])])),{}}}),_0=B({...pa(),...dc(),...Qt(),modelValue:{type:[Number,String],default:0}},"VSlider"),xo=R()({name:"VSlider",props:_0(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,start:e=>!0,end:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=H(),{rtlClasses:o}=nt(),i=vc(e),r=de(e,"modelValue",void 0,_=>i.roundValue(_??i.min.value)),{min:u,max:c,mousePressed:d,roundValue:v,onSliderMousedown:f,onSliderTouchstart:m,trackContainerRef:b,position:h,hasLabels:g,readonly:k}=fc({props:e,steps:i,onSliderStart:()=>{a("start",r.value)},onSliderEnd:_=>{let{value:T}=_;const V=v(T);r.value=V,a("end",V)},onSliderMove:_=>{let{value:T}=_;return r.value=v(T)},getActiveThumb:()=>{var _;return(_=l.value)==null?void 0:_.$el}}),{isFocused:S,focus:C,blur:P}=Jt(e),x=y(()=>h(r.value));return W(()=>{const _=ct.filterProps(e),T=!!(e.label||t.label||t.prepend);return s(ct,z({class:["v-slider",{"v-slider--has-labels":!!t["tick-label"]||g.value,"v-slider--focused":S.value,"v-slider--pressed":d.value,"v-slider--disabled":e.disabled},o.value,e.class],style:e.style},_,{focused:S.value}),{...t,prepend:T?V=>{var w,$;return s(ae,null,[((w=t.label)==null?void 0:w.call(t,V))??(e.label?s(ea,{id:V.id.value,class:"v-slider__label",text:e.label},null):void 0),($=t.prepend)==null?void 0:$.call(t,V)])}:void 0,default:V=>{let{id:w,messagesId:$}=V;return s("div",{class:"v-slider__container",onMousedown:k.value?void 0:f,onTouchstartPassive:k.value?void 0:m},[s("input",{id:w.value,name:e.name||w.value,disabled:!!e.disabled,readonly:!!e.readonly,tabindex:"-1",value:r.value},null),s(mc,{ref:b,start:0,stop:x.value},{"tick-label":t["tick-label"]}),s(po,{ref:l,"aria-describedby":$.value,focused:S.value,min:u.value,max:c.value,modelValue:r.value,"onUpdate:modelValue":p=>r.value=p,position:x.value,elevation:e.elevation,onFocus:C,onBlur:P,ripple:e.ripple,name:e.name},{"thumb-label":t["thumb-label"]})])}})}),{}}}),P0=B({color:{type:Object},disabled:Boolean,hideAlpha:Boolean,...ie()},"VColorPickerPreview"),I0=pt({name:"VColorPickerPreview",props:P0(),emits:{"update:color":e=>!0},setup(e,n){let{emit:t}=n;const a=new AbortController;Ja(()=>a.abort());async function l(){if(!Gi)return;const o=new window.EyeDropper;try{const i=await o.open({signal:a.signal}),r=$s(i.sRGBHex);t("update:color",{...e.color??Wn,...r})}catch{}}return W(()=>{var o,i;return s("div",{class:["v-color-picker-preview",{"v-color-picker-preview--hide-alpha":e.hideAlpha},e.class],style:e.style},[Gi&&s("div",{class:"v-color-picker-preview__eye-dropper",key:"eyeDropper"},[s(Ae,{onClick:l,icon:"$eyeDropper",variant:"plain",density:"comfortable"},null)]),s("div",{class:"v-color-picker-preview__dot"},[s("div",{style:{background:_s(e.color??Wn)}},null)]),s("div",{class:"v-color-picker-preview__sliders"},[s(xo,{class:"v-color-picker-preview__track v-color-picker-preview__hue",modelValue:(o=e.color)==null?void 0:o.h,"onUpdate:modelValue":r=>t("update:color",{...e.color??Wn,h:r}),step:0,min:0,max:360,disabled:e.disabled,thumbSize:14,trackSize:8,trackFillColor:"white",hideDetails:!0},null),!e.hideAlpha&&s(xo,{class:"v-color-picker-preview__track v-color-picker-preview__alpha",modelValue:((i=e.color)==null?void 0:i.a)??1,"onUpdate:modelValue":r=>t("update:color",{...e.color??Wn,a:r}),step:1/256,min:0,max:1,disabled:e.disabled,thumbSize:14,trackSize:8,trackFillColor:"white",hideDetails:!0},null)])])}),{}}}),$0={base:"#f44336",lighten5:"#ffebee",lighten4:"#ffcdd2",lighten3:"#ef9a9a",lighten2:"#e57373",lighten1:"#ef5350",darken1:"#e53935",darken2:"#d32f2f",darken3:"#c62828",darken4:"#b71c1c",accent1:"#ff8a80",accent2:"#ff5252",accent3:"#ff1744",accent4:"#d50000"},T0={base:"#e91e63",lighten5:"#fce4ec",lighten4:"#f8bbd0",lighten3:"#f48fb1",lighten2:"#f06292",lighten1:"#ec407a",darken1:"#d81b60",darken2:"#c2185b",darken3:"#ad1457",darken4:"#880e4f",accent1:"#ff80ab",accent2:"#ff4081",accent3:"#f50057",accent4:"#c51162"},A0={base:"#9c27b0",lighten5:"#f3e5f5",lighten4:"#e1bee7",lighten3:"#ce93d8",lighten2:"#ba68c8",lighten1:"#ab47bc",darken1:"#8e24aa",darken2:"#7b1fa2",darken3:"#6a1b9a",darken4:"#4a148c",accent1:"#ea80fc",accent2:"#e040fb",accent3:"#d500f9",accent4:"#aa00ff"},B0={base:"#673ab7",lighten5:"#ede7f6",lighten4:"#d1c4e9",lighten3:"#b39ddb",lighten2:"#9575cd",lighten1:"#7e57c2",darken1:"#5e35b1",darken2:"#512da8",darken3:"#4527a0",darken4:"#311b92",accent1:"#b388ff",accent2:"#7c4dff",accent3:"#651fff",accent4:"#6200ea"},D0={base:"#3f51b5",lighten5:"#e8eaf6",lighten4:"#c5cae9",lighten3:"#9fa8da",lighten2:"#7986cb",lighten1:"#5c6bc0",darken1:"#3949ab",darken2:"#303f9f",darken3:"#283593",darken4:"#1a237e",accent1:"#8c9eff",accent2:"#536dfe",accent3:"#3d5afe",accent4:"#304ffe"},L0={base:"#2196f3",lighten5:"#e3f2fd",lighten4:"#bbdefb",lighten3:"#90caf9",lighten2:"#64b5f6",lighten1:"#42a5f5",darken1:"#1e88e5",darken2:"#1976d2",darken3:"#1565c0",darken4:"#0d47a1",accent1:"#82b1ff",accent2:"#448aff",accent3:"#2979ff",accent4:"#2962ff"},M0={base:"#03a9f4",lighten5:"#e1f5fe",lighten4:"#b3e5fc",lighten3:"#81d4fa",lighten2:"#4fc3f7",lighten1:"#29b6f6",darken1:"#039be5",darken2:"#0288d1",darken3:"#0277bd",darken4:"#01579b",accent1:"#80d8ff",accent2:"#40c4ff",accent3:"#00b0ff",accent4:"#0091ea"},E0={base:"#00bcd4",lighten5:"#e0f7fa",lighten4:"#b2ebf2",lighten3:"#80deea",lighten2:"#4dd0e1",lighten1:"#26c6da",darken1:"#00acc1",darken2:"#0097a7",darken3:"#00838f",darken4:"#006064",accent1:"#84ffff",accent2:"#18ffff",accent3:"#00e5ff",accent4:"#00b8d4"},F0={base:"#009688",lighten5:"#e0f2f1",lighten4:"#b2dfdb",lighten3:"#80cbc4",lighten2:"#4db6ac",lighten1:"#26a69a",darken1:"#00897b",darken2:"#00796b",darken3:"#00695c",darken4:"#004d40",accent1:"#a7ffeb",accent2:"#64ffda",accent3:"#1de9b6",accent4:"#00bfa5"},O0={base:"#4caf50",lighten5:"#e8f5e9",lighten4:"#c8e6c9",lighten3:"#a5d6a7",lighten2:"#81c784",lighten1:"#66bb6a",darken1:"#43a047",darken2:"#388e3c",darken3:"#2e7d32",darken4:"#1b5e20",accent1:"#b9f6ca",accent2:"#69f0ae",accent3:"#00e676",accent4:"#00c853"},N0={base:"#8bc34a",lighten5:"#f1f8e9",lighten4:"#dcedc8",lighten3:"#c5e1a5",lighten2:"#aed581",lighten1:"#9ccc65",darken1:"#7cb342",darken2:"#689f38",darken3:"#558b2f",darken4:"#33691e",accent1:"#ccff90",accent2:"#b2ff59",accent3:"#76ff03",accent4:"#64dd17"},R0={base:"#cddc39",lighten5:"#f9fbe7",lighten4:"#f0f4c3",lighten3:"#e6ee9c",lighten2:"#dce775",lighten1:"#d4e157",darken1:"#c0ca33",darken2:"#afb42b",darken3:"#9e9d24",darken4:"#827717",accent1:"#f4ff81",accent2:"#eeff41",accent3:"#c6ff00",accent4:"#aeea00"},H0={base:"#ffeb3b",lighten5:"#fffde7",lighten4:"#fff9c4",lighten3:"#fff59d",lighten2:"#fff176",lighten1:"#ffee58",darken1:"#fdd835",darken2:"#fbc02d",darken3:"#f9a825",darken4:"#f57f17",accent1:"#ffff8d",accent2:"#ffff00",accent3:"#ffea00",accent4:"#ffd600"},z0={base:"#ffc107",lighten5:"#fff8e1",lighten4:"#ffecb3",lighten3:"#ffe082",lighten2:"#ffd54f",lighten1:"#ffca28",darken1:"#ffb300",darken2:"#ffa000",darken3:"#ff8f00",darken4:"#ff6f00",accent1:"#ffe57f",accent2:"#ffd740",accent3:"#ffc400",accent4:"#ffab00"},W0={base:"#ff9800",lighten5:"#fff3e0",lighten4:"#ffe0b2",lighten3:"#ffcc80",lighten2:"#ffb74d",lighten1:"#ffa726",darken1:"#fb8c00",darken2:"#f57c00",darken3:"#ef6c00",darken4:"#e65100",accent1:"#ffd180",accent2:"#ffab40",accent3:"#ff9100",accent4:"#ff6d00"},j0={base:"#ff5722",lighten5:"#fbe9e7",lighten4:"#ffccbc",lighten3:"#ffab91",lighten2:"#ff8a65",lighten1:"#ff7043",darken1:"#f4511e",darken2:"#e64a19",darken3:"#d84315",darken4:"#bf360c",accent1:"#ff9e80",accent2:"#ff6e40",accent3:"#ff3d00",accent4:"#dd2c00"},G0={base:"#795548",lighten5:"#efebe9",lighten4:"#d7ccc8",lighten3:"#bcaaa4",lighten2:"#a1887f",lighten1:"#8d6e63",darken1:"#6d4c41",darken2:"#5d4037",darken3:"#4e342e",darken4:"#3e2723"},Y0={base:"#607d8b",lighten5:"#eceff1",lighten4:"#cfd8dc",lighten3:"#b0bec5",lighten2:"#90a4ae",lighten1:"#78909c",darken1:"#546e7a",darken2:"#455a64",darken3:"#37474f",darken4:"#263238"},U0={base:"#9e9e9e",lighten5:"#fafafa",lighten4:"#f5f5f5",lighten3:"#eeeeee",lighten2:"#e0e0e0",lighten1:"#bdbdbd",darken1:"#757575",darken2:"#616161",darken3:"#424242",darken4:"#212121"},K0={black:"#000000",white:"#ffffff",transparent:"#ffffff00"},q0={red:$0,pink:T0,purple:A0,deepPurple:B0,indigo:D0,blue:L0,lightBlue:M0,cyan:E0,teal:F0,green:O0,lightGreen:N0,lime:R0,yellow:H0,amber:z0,orange:W0,deepOrange:j0,brown:G0,blueGrey:Y0,grey:U0,shades:K0},X0=B({swatches:{type:Array,default:()=>Z0(q0)},disabled:Boolean,color:Object,maxHeight:[Number,String],...ie()},"VColorPickerSwatches");function Z0(e){return Object.keys(e).map(n=>{const t=e[n];return t.base?[t.base,t.darken4,t.darken3,t.darken2,t.darken1,t.lighten1,t.lighten2,t.lighten3,t.lighten4,t.lighten5]:[t.black,t.white,t.transparent]})}const J0=pt({name:"VColorPickerSwatches",props:X0(),emits:{"update:color":e=>!0},setup(e,n){let{emit:t}=n;return W(()=>s("div",{class:["v-color-picker-swatches",e.class],style:[{maxHeight:ne(e.maxHeight)},e.style]},[s("div",null,[e.swatches.map(a=>s("div",{class:"v-color-picker-swatches__swatch"},[a.map(l=>{const o=Pt(l),i=rl(o),r=xs(o);return s("div",{class:"v-color-picker-swatches__color",onClick:()=>i&&t("update:color",i)},[s("div",{style:{background:r}},[e.color&&Ht(e.color,i)?s(Be,{size:"x-small",icon:"$success",color:ny(l,"#FFFFFF")>2?"white":"black"},null):void 0])])})]))])])),{}}}),xl=B({color:String,...wt(),...ie(),...Qe(),...at(),...Xt(),...Jn(),...ze(),...Ve(),...Pe()},"VSheet"),Cn=R()({name:"VSheet",props:xl(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{backgroundColorClasses:l,backgroundColorStyles:o}=Le(F(e,"color")),{borderClasses:i}=_t(e),{dimensionStyles:r}=et(e),{elevationClasses:u}=st(e),{locationStyles:c}=En(e),{positionClasses:d}=Qn(e),{roundedClasses:v}=Ue(e);return W(()=>s(e.tag,{class:["v-sheet",a.value,l.value,i.value,u.value,d.value,v.value,e.class],style:[o.value,r.value,c.value,e.style]},t)),{}}}),Q0=B({canvasHeight:{type:[String,Number],default:150},disabled:Boolean,dotSize:{type:[Number,String],default:10},hideCanvas:Boolean,hideSliders:Boolean,hideInputs:Boolean,mode:{type:String,default:"rgba",validator:e=>Object.keys(yn).includes(e)},modes:{type:Array,default:()=>Object.keys(yn),validator:e=>Array.isArray(e)&&e.every(n=>Object.keys(yn).includes(n))},showSwatches:Boolean,swatches:Array,swatchesMaxHeight:{type:[Number,String],default:150},modelValue:{type:[Object,String]},...Je(xl({width:300}),["height","location","minHeight","maxHeight","minWidth","maxWidth"])},"VColorPicker"),ew=pt({name:"VColorPicker",props:Q0(),emits:{"update:modelValue":e=>!0,"update:mode":e=>!0},setup(e){const n=de(e,"mode"),t=H(null),a=de(e,"modelValue",void 0,u=>{if(u==null||u==="")return null;let c;try{c=rl(Pt(u))}catch{return null}return c},u=>u?h0(u,e.modelValue):null),l=y(()=>a.value?{...a.value,h:t.value??a.value.h}:null),{rtlClasses:o}=nt();let i=!0;Q(a,u=>{if(!i){i=!0;return}u&&(t.value=u.h)},{immediate:!0});const r=u=>{i=!1,t.value=u.h,a.value=u};return No(()=>{e.modes.includes(n.value)||(n.value=e.modes[0])}),Ge({VSlider:{color:void 0,trackColor:void 0,trackFillColor:void 0}}),W(()=>{const u=Cn.filterProps(e);return s(Cn,z({rounded:e.rounded,elevation:e.elevation,theme:e.theme,class:["v-color-picker",o.value,e.class],style:[{"--v-color-picker-color-hsv":_s({...l.value??Wn,a:1})},e.style]},u,{maxWidth:e.width}),{default:()=>[!e.hideCanvas&&s(m0,{key:"canvas",color:l.value,"onUpdate:color":r,disabled:e.disabled,dotSize:e.dotSize,width:e.width,height:e.canvasHeight},null),(!e.hideSliders||!e.hideInputs)&&s("div",{key:"controls",class:"v-color-picker__controls"},[!e.hideSliders&&s(I0,{key:"preview",color:l.value,"onUpdate:color":r,hideAlpha:!n.value.endsWith("a"),disabled:e.disabled},null),!e.hideInputs&&s(V0,{key:"edit",modes:e.modes,mode:n.value,"onUpdate:mode":c=>n.value=c,color:l.value,"onUpdate:color":r,disabled:e.disabled},null)]),e.showSwatches&&s(J0,{key:"swatches",color:l.value,"onUpdate:color":r,maxHeight:e.swatchesMaxHeight,swatches:e.swatches,disabled:e.disabled},null)]})}),{}}});function tw(e,n,t){if(n==null)return e;if(Array.isArray(n))throw new Error("Multiple matches is not implemented");return typeof n=="number"&&~n?s(ae,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,n)]),s("span",{class:"v-combobox__mask"},[e.substr(n,t)]),s("span",{class:"v-combobox__unmask"},[e.substr(n+t)])]):e}const nw=B({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Ia({filterKeys:["title"]}),...pi({hideNoData:!0,returnObject:!0}),...Je(wl({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Et({transition:!1})},"VCombobox"),aw=R()({name:"VCombobox",props:nw(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,n){var Ce;let{emit:t,slots:a}=n;const{t:l}=qe(),o=H(),i=ee(!1),r=ee(!0),u=ee(!1),c=H(),d=H(),v=de(e,"menu"),f=y({get:()=>v.value,set:q=>{var oe;v.value&&!q&&((oe=c.value)!=null&&oe.ΨopenChildren.size)||(v.value=q)}}),m=ee(-1);let b=!1;const h=y(()=>{var q;return(q=o.value)==null?void 0:q.color}),g=y(()=>f.value?e.closeText:e.openText),{items:k,transformIn:S,transformOut:C}=yi(e),{textColorClasses:P,textColorStyles:x}=ut(h),_=de(e,"modelValue",[],q=>S(We(q)),q=>{const oe=C(q);return e.multiple?oe:oe[0]??null}),T=bl(e),V=y(()=>!!(e.chips||a.chip)),w=y(()=>V.value||!!a.selection),$=ee(!e.multiple&&!w.value?((Ce=_.value[0])==null?void 0:Ce.title)??"":""),p=y({get:()=>$.value,set:q=>{var oe;if($.value=q??"",!e.multiple&&!w.value&&(_.value=[en(e,q)]),q&&e.multiple&&((oe=e.delimiters)!=null&&oe.length)){const ke=q.split(new RegExp(`(?:${e.delimiters.join("|")})+`));ke.length>1&&(ke.forEach(he=>{he=he.trim(),he&&me(en(e,he))}),$.value="")}q||(m.value=-1),r.value=!q}}),I=y(()=>typeof e.counterValue=="function"?e.counterValue(_.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?_.value.length:p.value.length);Q($,q=>{b?Te(()=>b=!1):i.value&&!f.value&&(f.value=!0),t("update:search",q)}),Q(_,q=>{var oe;!e.multiple&&!w.value&&($.value=((oe=q[0])==null?void 0:oe.title)??"")});const{filteredItems:A,getMatches:M}=$a(e,k,()=>r.value?"":p.value),j=y(()=>e.hideSelected?A.value.filter(q=>!_.value.some(oe=>oe.value===q.value)):A.value),Y=y(()=>_.value.map(q=>q.value)),le=y(()=>{var oe;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&p.value===((oe=j.value[0])==null?void 0:oe.title))&&j.value.length>0&&!r.value&&!u.value}),re=y(()=>e.hideNoData&&!j.value.length||T.isReadonly.value||T.isDisabled.value),N=H(),E=Ci(N,o);function O(q){b=!0,e.openOnClear&&(f.value=!0)}function te(){re.value||(f.value=!0)}function se(q){re.value||(i.value&&(q.preventDefault(),q.stopPropagation()),f.value=!f.value)}function ue(q){var oe;Ga(q)&&((oe=o.value)==null||oe.focus())}function ye(q){var he;if(Ph(q)||T.isReadonly.value)return;const oe=o.value.selectionStart,ke=_.value.length;if((m.value>-1||["Enter","ArrowDown","ArrowUp"].includes(q.key))&&q.preventDefault(),["Enter","ArrowDown"].includes(q.key)&&(f.value=!0),["Escape"].includes(q.key)&&(f.value=!1),["Enter","Escape","Tab"].includes(q.key)&&(le.value&&["Enter","Tab"].includes(q.key)&&!_.value.some(we=>{let{value:Ee}=we;return Ee===j.value[0].value})&&me(A.value[0]),r.value=!0),q.key==="ArrowDown"&&le.value&&((he=N.value)==null||he.focus("next")),q.key==="Enter"&&p.value&&(me(en(e,p.value)),w.value&&($.value="")),["Backspace","Delete"].includes(q.key)){if(!e.multiple&&w.value&&_.value.length>0&&!p.value)return me(_.value[0],!1);if(~m.value){const we=m.value;me(_.value[m.value],!1),m.value=we>=ke-1?ke-2:we}else q.key==="Backspace"&&!p.value&&(m.value=ke-1)}if(e.multiple){if(q.key==="ArrowLeft"){if(m.value<0&&oe>0)return;const we=m.value>-1?m.value-1:ke-1;_.value[we]?m.value=we:(m.value=-1,o.value.setSelectionRange(p.value.length,p.value.length))}if(q.key==="ArrowRight"){if(m.value<0)return;const we=m.value+1;_.value[we]?m.value=we:(m.value=-1,o.value.setSelectionRange(0,0))}}}function G(){var q;e.eager&&((q=d.value)==null||q.calculateVisibleItems())}function ce(){var q;i.value&&(r.value=!0,(q=o.value)==null||q.focus())}function me(q){let oe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!q||q.props.disabled))if(e.multiple){const ke=_.value.findIndex(we=>e.valueComparator(we.value,q.value)),he=oe??!~ke;if(~ke){const we=he?[..._.value,q]:[..._.value];we.splice(ke,1),_.value=we}else he&&(_.value=[..._.value,q]);e.clearOnSelect&&(p.value="")}else{const ke=oe!==!1;_.value=ke?[q]:[],$.value=ke&&!w.value?q.title:"",Te(()=>{f.value=!1,r.value=!0})}}function Me(q){i.value=!0,setTimeout(()=>{u.value=!0})}function Ie(q){u.value=!1}function Z(q){(q==null||q===""&&!e.multiple&&!w.value)&&(_.value=[])}return Q(i,(q,oe)=>{if(!(q||q===oe)&&(m.value=-1,f.value=!1,p.value)){if(e.multiple){me(en(e,p.value));return}if(!w.value)return;_.value.some(ke=>{let{title:he}=ke;return he===p.value})?$.value="":me(en(e,p.value))}}),Q(f,()=>{if(!e.hideSelected&&f.value&&_.value.length){const q=j.value.findIndex(oe=>_.value.some(ke=>e.valueComparator(ke.value,oe.value)));$e&&window.requestAnimationFrame(()=>{var oe;q>=0&&((oe=d.value)==null||oe.scrollToIndex(q))})}}),Q(()=>e.items,(q,oe)=>{f.value||i.value&&!oe.length&&q.length&&(f.value=!0)}),W(()=>{const q=!!(!e.hideNoData||j.value.length||a["prepend-item"]||a["append-item"]||a["no-data"]),oe=_.value.length>0,ke=Sn.filterProps(e);return s(Sn,z({ref:o},ke,{modelValue:p.value,"onUpdate:modelValue":[he=>p.value=he,Z],focused:i.value,"onUpdate:focused":he=>i.value=he,validationValue:_.externalValue,counterValue:I.value,dirty:oe,class:["v-combobox",{"v-combobox--active-menu":f.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!w.value,"v-combobox--selecting-index":m.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:T.isReadonly.value,placeholder:oe?void 0:e.placeholder,"onClick:clear":O,"onMousedown:control":te,onKeydown:ye}),{...a,default:()=>s(ae,null,[s(qn,z({ref:c,modelValue:f.value,"onUpdate:modelValue":he=>f.value=he,activator:"parent",contentClass:"v-combobox__content",disabled:re.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:G,onAfterLeave:ce},e.menuProps),{default:()=>[q&&s(kl,z({ref:N,selected:Y.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:he=>he.preventDefault(),onKeydown:ue,onFocusin:Me,onFocusout:Ie,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},E,e.listProps),{default:()=>{var he,we,Ee;return[(he=a["prepend-item"])==null?void 0:he.call(a),!j.value.length&&!e.hideNoData&&(((we=a["no-data"])==null?void 0:we.call(a))??s(Kt,{title:l(e.noDataText)},null)),s(Vl,{ref:d,renderless:!0,items:j.value},{default:ht=>{var un;let{item:Fe,index:Ft,itemRef:dt}=ht;const sn=z(Fe.props,{ref:dt,key:Ft,active:le.value&&Ft===0?!0:void 0,onClick:()=>me(Fe,null)});return((un=a.item)==null?void 0:un.call(a,{item:Fe,index:Ft,props:sn}))??s(Kt,z(sn,{role:"option"}),{prepend:Ta=>{let{isSelected:Aa}=Ta;return s(ae,null,[e.multiple&&!e.hideSelected?s(Ut,{key:Fe.value,modelValue:Aa,ripple:!1,tabindex:"-1"},null):void 0,Fe.props.prependAvatar&&s(It,{image:Fe.props.prependAvatar},null),Fe.props.prependIcon&&s(Be,{icon:Fe.props.prependIcon},null)])},title:()=>{var Ta,Aa;return r.value?Fe.title:tw(Fe.title,(Ta=M(Fe))==null?void 0:Ta.title,((Aa=p.value)==null?void 0:Aa.length)??0)}})}}),(Ee=a["append-item"])==null?void 0:Ee.call(a)]}})]}),_.value.map((he,we)=>{function Ee(dt){dt.stopPropagation(),dt.preventDefault(),me(he,!1)}const ht={"onClick:close":Ee,onKeydown(dt){dt.key!=="Enter"&&dt.key!==" "||(dt.preventDefault(),dt.stopPropagation(),Ee(dt))},onMousedown(dt){dt.preventDefault(),dt.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},Fe=V.value?!!a.chip:!!a.selection,Ft=Fe?il(V.value?a.chip({item:he,index:we,props:ht}):a.selection({item:he,index:we})):void 0;if(!(Fe&&!Ft))return s("div",{key:he.value,class:["v-combobox__selection",we===m.value&&["v-combobox__selection--selected",P.value]],style:we===m.value?x.value:{}},[V.value?a.chip?s(pe,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:he.title}}},{default:()=>[Ft]}):s(ta,z({key:"chip",closable:e.closableChips,size:"small",text:he.title,disabled:he.props.disabled},ht),null):Ft??s("span",{class:"v-combobox__selection-text"},[he.title,e.multiple&&we<_.value.length-1&&s("span",{class:"v-combobox__selection-comma"},[bt(",")])])])})]),"append-inner":function(){var ht;for(var he=arguments.length,we=new Array(he),Ee=0;Ee!0,save:e=>!0,"update:modelValue":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=de(e,"modelValue"),o=H();He(()=>{o.value=structuredClone(Ze(l.value))});const{t:i}=qe(),r=y(()=>Ht(l.value,o.value));function u(){l.value=o.value,t("save",o.value)}function c(){o.value=structuredClone(Ze(l.value)),t("cancel")}function d(f){return s(ae,null,[s(Ae,z({disabled:r.value,variant:"text",color:e.color,onClick:c,text:i(e.cancelText)},f),null),s(Ae,z({disabled:r.value,variant:"text",color:e.color,onClick:u,text:i(e.okText)},f),null)])}let v=!1;return W(()=>{var f;return s(ae,null,[(f=a.default)==null?void 0:f.call(a,{model:o,save:u,cancel:c,isPristine:r.value,get actions(){return v=!0,d}}),!v&&d()])}),{save:u,cancel:c,isPristine:r}}}),gc=B({expandOnClick:Boolean,showExpand:Boolean,expanded:{type:Array,default:()=>[]}},"DataTable-expand"),hc=Symbol.for("vuetify:datatable:expanded");function _l(e){const n=F(e,"expandOnClick"),t=de(e,"expanded",e.expanded,r=>new Set(r),r=>[...r.values()]);function a(r,u){const c=new Set(t.value);u?c.add(r.value):c.delete(r.value),t.value=c}function l(r){return t.value.has(r.value)}function o(r){a(r,!l(r))}const i={expand:a,expanded:t,expandOnClick:n,isExpanded:l,toggleExpand:o};return Re(hc,i),i}function yc(){const e=xe(hc);if(!e)throw new Error("foo");return e}const Ii=B({groupBy:{type:Array,default:()=>[]}},"DataTable-group"),bc=Symbol.for("vuetify:data-table-group");function $i(e){return{groupBy:de(e,"groupBy")}}function Pl(e){const{disableSort:n,groupBy:t,sortBy:a}=e,l=H(new Set),o=y(()=>t.value.map(d=>({...d,order:d.order??!1})).concat(n!=null&&n.value?[]:a.value));function i(d){return l.value.has(d.id)}function r(d){const v=new Set(l.value);i(d)?v.delete(d.id):v.add(d.id),l.value=v}function u(d){function v(f){const m=[];for(const b of f.items)"type"in b&&b.type==="group"?m.push(...v(b)):m.push(b);return m}return v({items:d})}const c={sortByWithGroups:o,toggleGroup:r,opened:l,groupBy:t,extractRows:u,isGroupOpen:i};return Re(bc,c),c}function kc(){const e=xe(bc);if(!e)throw new Error("Missing group!");return e}function iw(e,n){if(!e.length)return[];const t=new Map;for(const a of e){const l=kn(a.raw,n);t.has(l)||t.set(l,[]),t.get(l).push(a)}return t}function Sc(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"root";if(!n.length)return[];const l=iw(e,n[0]),o=[],i=n.slice(1);return l.forEach((r,u)=>{const c=n[0],d=`${a}_${c}_${u}`;o.push({depth:t,id:d,key:c,value:u,items:i.length?Sc(r,i,t+1,d):r,type:"group"})}),o}function wc(e,n){const t=[];for(const a of e)"type"in a&&a.type==="group"?(a.value!=null&&t.push(a),(n.has(a.id)||a.value==null)&&t.push(...wc(a.items,n))):t.push(a);return t}function Il(e,n,t){return{flatItems:y(()=>{if(!n.value.length)return e.value;const l=Sc(e.value,n.value.map(o=>o.key));return wc(l,t.value)})}}function $l(e){let{page:n,itemsPerPage:t,sortBy:a,groupBy:l,search:o}=e;const i=Ye("VDataTable"),r=y(()=>({page:n.value,itemsPerPage:t.value,sortBy:a.value,groupBy:l.value,search:o.value}));let u=null;Q(r,()=>{Ht(u,r.value)||(u&&u.search!==r.value.search&&(n.value=1),i.emit("update:options",r.value),u=r.value)},{deep:!0,immediate:!0})}const Ti=B({page:{type:[Number,String],default:1},itemsPerPage:{type:[Number,String],default:10}},"DataTable-paginate"),Vc=Symbol.for("vuetify:data-table-pagination");function Ai(e){const n=de(e,"page",void 0,a=>+(a??1)),t=de(e,"itemsPerPage",void 0,a=>+(a??10));return{page:n,itemsPerPage:t}}function Bi(e){const{page:n,itemsPerPage:t,itemsLength:a}=e,l=y(()=>t.value===-1?0:t.value*(n.value-1)),o=y(()=>t.value===-1?a.value:Math.min(a.value,l.value+t.value)),i=y(()=>t.value===-1||a.value===0?1:Math.ceil(a.value/t.value));Q([n,i],()=>{n.value>i.value&&(n.value=i.value)});function r(f){t.value=f,n.value=1}function u(){n.value=Xe(n.value+1,1,i.value)}function c(){n.value=Xe(n.value-1,1,i.value)}function d(f){n.value=Xe(f,1,i.value)}const v={page:n,itemsPerPage:t,startIndex:l,stopIndex:o,pageCount:i,itemsLength:a,nextPage:u,prevPage:c,setPage:d,setItemsPerPage:r};return Re(Vc,v),v}function rw(){const e=xe(Vc);if(!e)throw new Error("Missing pagination!");return e}function Cc(e){const n=Ye("usePaginatedItems"),{items:t,startIndex:a,stopIndex:l,itemsPerPage:o}=e,i=y(()=>o.value<=0?t.value:t.value.slice(a.value,l.value));return Q(i,r=>{n.emit("update:currentItems",r)}),{paginatedItems:i}}const sw={showSelectAll:!1,allSelected:()=>[],select:e=>{var a;let{items:n,value:t}=e;return new Set(t?[(a=n[0])==null?void 0:a.value]:[])},selectAll:e=>{let{selected:n}=e;return n}},pc={showSelectAll:!0,allSelected:e=>{let{currentPage:n}=e;return n},select:e=>{let{items:n,value:t,selected:a}=e;for(const l of n)t?a.add(l.value):a.delete(l.value);return a},selectAll:e=>{let{value:n,currentPage:t,selected:a}=e;return pc.select({items:t,value:n,selected:a})}},xc={showSelectAll:!0,allSelected:e=>{let{allItems:n}=e;return n},select:e=>{let{items:n,value:t,selected:a}=e;for(const l of n)t?a.add(l.value):a.delete(l.value);return a},selectAll:e=>{let{value:n,allItems:t,selected:a}=e;return xc.select({items:t,value:n,selected:a})}},_c=B({showSelect:Boolean,selectStrategy:{type:[String,Object],default:"page"},modelValue:{type:Array,default:()=>[]},valueComparator:{type:Function,default:Ht}},"DataTable-select"),Pc=Symbol.for("vuetify:data-table-selection");function Tl(e,n){let{allItems:t,currentPage:a}=n;const l=de(e,"modelValue",e.modelValue,k=>new Set(We(k).map(S=>{var C;return((C=t.value.find(P=>e.valueComparator(S,P.value)))==null?void 0:C.value)??S})),k=>[...k.values()]),o=y(()=>t.value.filter(k=>k.selectable)),i=y(()=>a.value.filter(k=>k.selectable)),r=y(()=>{if(typeof e.selectStrategy=="object")return e.selectStrategy;switch(e.selectStrategy){case"single":return sw;case"all":return xc;case"page":default:return pc}});function u(k){return We(k).every(S=>l.value.has(S.value))}function c(k){return We(k).some(S=>l.value.has(S.value))}function d(k,S){const C=r.value.select({items:k,value:S,selected:new Set(l.value)});l.value=C}function v(k){d([k],!u([k]))}function f(k){const S=r.value.selectAll({value:k,allItems:o.value,currentPage:i.value,selected:new Set(l.value)});l.value=S}const m=y(()=>l.value.size>0),b=y(()=>{const k=r.value.allSelected({allItems:o.value,currentPage:i.value});return!!k.length&&u(k)}),h=y(()=>r.value.showSelectAll),g={toggleSelect:v,select:d,selectAll:f,isSelected:u,isSomeSelected:c,someSelected:m,allSelected:b,showSelectAll:h};return Re(Pc,g),g}function Al(){const e=xe(Pc);if(!e)throw new Error("Missing selection!");return e}const Ic=B({sortBy:{type:Array,default:()=>[]},customKeySort:Object,multiSort:Boolean,mustSort:Boolean},"DataTable-sort"),$c=Symbol.for("vuetify:data-table-sort");function Bl(e){const n=de(e,"sortBy"),t=F(e,"mustSort"),a=F(e,"multiSort");return{sortBy:n,mustSort:t,multiSort:a}}function Dl(e){const{sortBy:n,mustSort:t,multiSort:a,page:l}=e,o=u=>{if(u.key==null)return;let c=n.value.map(v=>({...v}))??[];const d=c.find(v=>v.key===u.key);d?d.order==="desc"?t.value?d.order="asc":c=c.filter(v=>v.key!==u.key):d.order="desc":a.value?c=[...c,{key:u.key,order:"asc"}]:c=[{key:u.key,order:"asc"}],n.value=c,l&&(l.value=1)};function i(u){return!!n.value.find(c=>c.key===u.key)}const r={sortBy:n,toggleSort:o,isSorted:i};return Re($c,r),r}function Tc(){const e=xe($c);if(!e)throw new Error("Missing sort!");return e}function Di(e,n,t,a){const l=qe();return{sortedItems:y(()=>{var i,r;return t.value.length?uw(n.value,t.value,l.current.value,{transform:a==null?void 0:a.transform,sortFunctions:{...e.customKeySort,...(i=a==null?void 0:a.sortFunctions)==null?void 0:i.value},sortRawFunctions:(r=a==null?void 0:a.sortRawFunctions)==null?void 0:r.value}):n.value})}}function uw(e,n,t,a){const l=new Intl.Collator(t,{sensitivity:"accent",usage:"sort"});return e.map(i=>[i,a!=null&&a.transform?a.transform(i):i]).sort((i,r)=>{var u,c;for(let d=0;dS!=null?S.toString().toLocaleLowerCase():S),b!==h)return Da(b)&&Da(h)?0:Da(b)?-1:Da(h)?1:!isNaN(b)&&!isNaN(h)?Number(b)-Number(h):l.compare(b,h)}}return 0}).map(i=>{let[r]=i;return r})}const cw=B({items:{type:Array,default:()=>[]},itemValue:{type:[String,Array,Function],default:"id"},itemSelectable:{type:[String,Array,Function],default:null},returnObject:Boolean},"DataIterator-items");function dw(e,n){const t=e.returnObject?n:tt(n,e.itemValue),a=tt(n,e.itemSelectable,!0);return{type:"item",value:t,selectable:a,raw:n}}function vw(e,n){const t=[];for(const a of n)t.push(dw(e,a));return t}function fw(e){return{items:y(()=>vw(e,e.items))}}const mw=B({search:String,loading:Boolean,...ie(),...cw(),..._c(),...Ic(),...Ti({itemsPerPage:5}),...gc(),...Ii(),...Ia(),...Ve(),...Et({transition:{component:ua,hideOnLeave:!0}})},"VDataIterator"),gw=R()({name:"VDataIterator",props:mw(),emits:{"update:modelValue":e=>!0,"update:groupBy":e=>!0,"update:page":e=>!0,"update:itemsPerPage":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:expanded":e=>!0,"update:currentItems":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"groupBy"),l=F(e,"search"),{items:o}=fw(e),{filteredItems:i}=$a(e,o,l,{transform:O=>O.raw}),{sortBy:r,multiSort:u,mustSort:c}=Bl(e),{page:d,itemsPerPage:v}=Ai(e),{toggleSort:f}=Dl({sortBy:r,multiSort:u,mustSort:c,page:d}),{sortByWithGroups:m,opened:b,extractRows:h,isGroupOpen:g,toggleGroup:k}=Pl({groupBy:a,sortBy:r}),{sortedItems:S}=Di(e,i,m,{transform:O=>O.raw}),{flatItems:C}=Il(S,a,b),P=y(()=>C.value.length),{startIndex:x,stopIndex:_,pageCount:T,prevPage:V,nextPage:w,setItemsPerPage:$,setPage:p}=Bi({page:d,itemsPerPage:v,itemsLength:P}),{paginatedItems:I}=Cc({items:C,startIndex:x,stopIndex:_,itemsPerPage:v}),A=y(()=>h(I.value)),{isSelected:M,select:j,selectAll:Y,toggleSelect:le}=Tl(e,{allItems:o,currentPage:A}),{isExpanded:re,toggleExpand:N}=_l(e);$l({page:d,itemsPerPage:v,sortBy:r,groupBy:a,search:l});const E=y(()=>({page:d.value,itemsPerPage:v.value,sortBy:r.value,pageCount:T.value,toggleSort:f,prevPage:V,nextPage:w,setPage:p,setItemsPerPage:$,isSelected:M,select:j,selectAll:Y,toggleSelect:le,isExpanded:re,toggleExpand:N,isGroupOpen:g,toggleGroup:k,items:A.value,groupedItems:I.value}));return W(()=>s(e.tag,{class:["v-data-iterator",{"v-data-iterator--loading":e.loading},e.class],style:e.style},{default:()=>{var O,te;return[(O=t.header)==null?void 0:O.call(t,E.value),s(ft,{transition:e.transition},{default:()=>{var se,ue;return[e.loading?s(wa,{key:"loader",name:"v-data-iterator",active:!0},{default:ye=>{var G;return(G=t.loader)==null?void 0:G.call(t,ye)}}):s("div",{key:"items"},[I.value.length?(ue=t.default)==null?void 0:ue.call(t,E.value):(se=t["no-data"])==null?void 0:se.call(t)])]}}),(te=t.footer)==null?void 0:te.call(t,E.value)]}})),{}}});function hw(){const e=H([]);Nd(()=>e.value=[]);function n(t,a){e.value[a]=t}return{refs:e,updateRef:n}}const yw=B({activeColor:String,start:{type:[Number,String],default:1},modelValue:{type:Number,default:e=>e.start},disabled:Boolean,length:{type:[Number,String],default:1,validator:e=>e%1===0},totalVisible:[Number,String],firstIcon:{type:ve,default:"$first"},prevIcon:{type:ve,default:"$prev"},nextIcon:{type:ve,default:"$next"},lastIcon:{type:ve,default:"$last"},ariaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.root"},pageAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.page"},currentPageAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.currentPage"},firstAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.first"},previousAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.previous"},nextAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.next"},lastAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.last"},ellipsis:{type:String,default:"..."},showFirstLastPage:Boolean,...wt(),...ie(),...lt(),...at(),...ze(),...jt(),...Ve({tag:"nav"}),...Pe(),...Tt({variant:"text"})},"VPagination"),_o=R()({name:"VPagination",props:yw(),emits:{"update:modelValue":e=>!0,first:e=>!0,prev:e=>!0,next:e=>!0,last:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=de(e,"modelValue"),{t:o,n:i}=qe(),{isRtl:r}=nt(),{themeClasses:u}=De(e),{width:c}=$t(),d=ee(-1);Ge(void 0,{scoped:!0});const{resizeRef:v}=Lt(V=>{if(!V.length)return;const{target:w,contentRect:$}=V[0],p=w.querySelector(".v-pagination__list > *");if(!p)return;const I=$.width,A=p.offsetWidth+parseFloat(getComputedStyle(p).marginRight)*2;d.value=h(I,A)}),f=y(()=>parseInt(e.length,10)),m=y(()=>parseInt(e.start,10)),b=y(()=>e.totalVisible!=null?parseInt(e.totalVisible,10):d.value>=0?d.value:h(c.value,58));function h(V,w){const $=e.showFirstLastPage?5:3;return Math.max(0,Math.floor(+((V-w*$)/w).toFixed(2)))}const g=y(()=>{if(f.value<=0||isNaN(f.value)||f.value>Number.MAX_SAFE_INTEGER)return[];if(b.value<=0)return[];if(b.value===1)return[l.value];if(f.value<=b.value)return Ot(f.value,m.value);const V=b.value%2===0,w=V?b.value/2:Math.floor(b.value/2),$=V?w:w+1,p=f.value-w;if($-l.value>=0)return[...Ot(Math.max(1,b.value-1),m.value),e.ellipsis,f.value];if(l.value-p>=(V?1:0)){const I=b.value-1,A=f.value-I+m.value;return[m.value,e.ellipsis,...Ot(I,A)]}else{const I=Math.max(1,b.value-3),A=I===1?l.value:l.value-Math.ceil(I/2)+m.value;return[m.value,e.ellipsis,...Ot(I,A),e.ellipsis,f.value]}});function k(V,w,$){V.preventDefault(),l.value=w,$&&a($,w)}const{refs:S,updateRef:C}=hw();Ge({VPaginationBtn:{color:F(e,"color"),border:F(e,"border"),density:F(e,"density"),size:F(e,"size"),variant:F(e,"variant"),rounded:F(e,"rounded"),elevation:F(e,"elevation")}});const P=y(()=>g.value.map((V,w)=>{const $=p=>C(p,w);if(typeof V=="string")return{isActive:!1,key:`ellipsis-${w}`,page:V,props:{ref:$,ellipsis:!0,icon:!0,disabled:!0}};{const p=V===l.value;return{isActive:p,key:V,page:i(V),props:{ref:$,ellipsis:!1,icon:!0,disabled:!!e.disabled||+e.length<2,color:p?e.activeColor:e.color,"aria-current":p,"aria-label":o(p?e.currentPageAriaLabel:e.pageAriaLabel,V),onClick:I=>k(I,V)}}}})),x=y(()=>{const V=!!e.disabled||l.value<=m.value,w=!!e.disabled||l.value>=m.value+f.value-1;return{first:e.showFirstLastPage?{icon:r.value?e.lastIcon:e.firstIcon,onClick:$=>k($,m.value,"first"),disabled:V,"aria-label":o(e.firstAriaLabel),"aria-disabled":V}:void 0,prev:{icon:r.value?e.nextIcon:e.prevIcon,onClick:$=>k($,l.value-1,"prev"),disabled:V,"aria-label":o(e.previousAriaLabel),"aria-disabled":V},next:{icon:r.value?e.prevIcon:e.nextIcon,onClick:$=>k($,l.value+1,"next"),disabled:w,"aria-label":o(e.nextAriaLabel),"aria-disabled":w},last:e.showFirstLastPage?{icon:r.value?e.firstIcon:e.lastIcon,onClick:$=>k($,m.value+f.value-1,"last"),disabled:w,"aria-label":o(e.lastAriaLabel),"aria-disabled":w}:void 0}});function _(){var w;const V=l.value-m.value;(w=S.value[V])==null||w.$el.focus()}function T(V){V.key===Ql.left&&!e.disabled&&l.value>+e.start?(l.value=l.value-1,Te(_)):V.key===Ql.right&&!e.disabled&&l.values(e.tag,{ref:v,class:["v-pagination",u.value,e.class],style:e.style,role:"navigation","aria-label":o(e.ariaLabel),onKeydown:T,"data-test":"v-pagination-root"},{default:()=>[s("ul",{class:"v-pagination__list"},[e.showFirstLastPage&&s("li",{key:"first",class:"v-pagination__first","data-test":"v-pagination-first"},[t.first?t.first(x.value.first):s(Ae,z({_as:"VPaginationBtn"},x.value.first),null)]),s("li",{key:"prev",class:"v-pagination__prev","data-test":"v-pagination-prev"},[t.prev?t.prev(x.value.prev):s(Ae,z({_as:"VPaginationBtn"},x.value.prev),null)]),P.value.map((V,w)=>s("li",{key:V.key,class:["v-pagination__item",{"v-pagination__item--is-active":V.isActive}],"data-test":"v-pagination-item"},[t.item?t.item(V):s(Ae,z({_as:"VPaginationBtn"},V.props),{default:()=>[V.page]})])),s("li",{key:"next",class:"v-pagination__next","data-test":"v-pagination-next"},[t.next?t.next(x.value.next):s(Ae,z({_as:"VPaginationBtn"},x.value.next),null)]),e.showFirstLastPage&&s("li",{key:"last",class:"v-pagination__last","data-test":"v-pagination-last"},[t.last?t.last(x.value.last):s(Ae,z({_as:"VPaginationBtn"},x.value.last),null)])])]})),{}}}),Li=B({prevIcon:{type:ve,default:"$prev"},nextIcon:{type:ve,default:"$next"},firstIcon:{type:ve,default:"$first"},lastIcon:{type:ve,default:"$last"},itemsPerPageText:{type:String,default:"$vuetify.dataFooter.itemsPerPageText"},pageText:{type:String,default:"$vuetify.dataFooter.pageText"},firstPageLabel:{type:String,default:"$vuetify.dataFooter.firstPage"},prevPageLabel:{type:String,default:"$vuetify.dataFooter.prevPage"},nextPageLabel:{type:String,default:"$vuetify.dataFooter.nextPage"},lastPageLabel:{type:String,default:"$vuetify.dataFooter.lastPage"},itemsPerPageOptions:{type:Array,default:()=>[{value:10,title:"10"},{value:25,title:"25"},{value:50,title:"50"},{value:100,title:"100"},{value:-1,title:"$vuetify.dataFooter.itemsPerPageAll"}]},showCurrentPage:Boolean},"VDataTableFooter"),ga=R()({name:"VDataTableFooter",props:Li(),setup(e,n){let{slots:t}=n;const{t:a}=qe(),{page:l,pageCount:o,startIndex:i,stopIndex:r,itemsLength:u,itemsPerPage:c,setItemsPerPage:d}=rw(),v=y(()=>e.itemsPerPageOptions.map(f=>typeof f=="number"?{value:f,title:f===-1?a("$vuetify.dataFooter.itemsPerPageAll"):String(f)}:{...f,title:isNaN(Number(f.title))?a(f.title):f.title}));return W(()=>{var m;const f=_o.filterProps(e);return s("div",{class:"v-data-table-footer"},[(m=t.prepend)==null?void 0:m.call(t),s("div",{class:"v-data-table-footer__items-per-page"},[s("span",null,[a(e.itemsPerPageText)]),s(xi,{items:v.value,modelValue:c.value,"onUpdate:modelValue":b=>d(Number(b)),density:"compact",variant:"outlined","hide-details":!0},null)]),s("div",{class:"v-data-table-footer__info"},[s("div",null,[a(e.pageText,u.value?i.value+1:0,r.value,u.value)])]),s("div",{class:"v-data-table-footer__pagination"},[s(_o,z({modelValue:l.value,"onUpdate:modelValue":b=>l.value=b,density:"comfortable","first-aria-label":e.firstPageLabel,"last-aria-label":e.lastPageLabel,length:o.value,"next-aria-label":e.nextPageLabel,"previous-aria-label":e.prevPageLabel,rounded:!0,"show-first-last-page":!0,"total-visible":e.showCurrentPage?1:0,variant:"plain"},f),null)])])}),{}}}),Za=ry({align:{type:String,default:"start"},fixed:Boolean,fixedOffset:[Number,String],height:[Number,String],lastFixed:Boolean,noPadding:Boolean,tag:String,width:[Number,String],maxWidth:[Number,String],nowrap:Boolean},(e,n)=>{let{slots:t}=n;const a=e.tag??"td";return s(a,{class:["v-data-table__td",{"v-data-table-column--fixed":e.fixed,"v-data-table-column--last-fixed":e.lastFixed,"v-data-table-column--no-padding":e.noPadding,"v-data-table-column--nowrap":e.nowrap},`v-data-table-column--align-${e.align}`],style:{height:ne(e.height),width:ne(e.width),maxWidth:ne(e.maxWidth),left:ne(e.fixedOffset||null)}},{default:()=>{var l;return[(l=t.default)==null?void 0:l.call(t)]}})}),bw=B({headers:Array},"DataTable-header"),Ac=Symbol.for("vuetify:data-table-headers"),Bc={title:"",sortable:!1},kw={...Bc,width:48};function Sw(){const n=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]).map(t=>({element:t,priority:0}));return{enqueue:(t,a)=>{let l=!1;for(let o=0;oa){n.splice(o,0,{element:t,priority:a}),l=!0;break}l||n.push({element:t,priority:a})},size:()=>n.length,count:()=>{let t=0;if(!n.length)return 0;const a=Math.floor(n[0].priority);for(let l=0;ln.shift()}}function Po(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];if(!e.children)n.push(e);else for(const t of e.children)Po(t,n);return n}function Dc(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:new Set;for(const t of e)t.key&&n.add(t.key),t.children&&Dc(t.children,n);return n}function ww(e){if(e.key){if(e.key==="data-table-group")return Bc;if(["data-table-expand","data-table-select"].includes(e.key))return kw}}function Mi(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.children?Math.max(n,...e.children.map(t=>Mi(t,n+1))):n}function Vw(e){let n=!1;function t(o){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(o)if(i&&(o.fixed=!0),o.fixed)if(o.children)for(let r=o.children.length-1;r>=0;r--)t(o.children[r],!0);else n?isNaN(+o.width)&&(`${o.key}`,void 0):o.lastFixed=!0,n=!0;else if(o.children)for(let r=o.children.length-1;r>=0;r--)t(o.children[r]);else n=!1}for(let o=e.length-1;o>=0;o--)t(e[o]);function a(o){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!o)return i;if(o.children){o.fixedOffset=i;for(const r of o.children)i=a(r,i)}else o.fixed&&(o.fixedOffset=i,i+=parseFloat(o.width||"0")||0);return i}let l=0;for(const o of e)l=a(o,l)}function Cw(e,n){const t=[];let a=0;const l=Sw(e);for(;l.size()>0;){let i=l.count();const r=[];let u=1;for(;i>0;){const{element:c,priority:d}=l.dequeue(),v=n-a-Mi(c);if(r.push({...c,rowspan:v??1,colspan:c.children?Po(c).length:1}),c.children)for(const f of c.children){const m=d%1+u/Math.pow(10,a+2);l.enqueue(f,a+v+m)}u+=1,i-=1}a+=1,t.push(r)}return{columns:e.map(i=>Po(i)).flat(),headers:t}}function Lc(e){const n=[];for(const t of e){const a={...ww(t),...t},l=a.key??(typeof a.value=="string"?a.value:null),o=a.value??l??null,i={...a,key:l,value:o,sortable:a.sortable??(a.key!=null||!!a.sort),children:a.children?Lc(a.children):void 0};n.push(i)}return n}function Ei(e,n){const t=H([]),a=H([]),l=H({}),o=H({}),i=H({});He(()=>{var h,g,k;const c=(e.headers||Object.keys(e.items[0]??{}).map(S=>({key:S,title:Xn(S)}))).slice(),d=Dc(c);(h=n==null?void 0:n.groupBy)!=null&&h.value.length&&!d.has("data-table-group")&&c.unshift({key:"data-table-group",title:"Group"}),(g=n==null?void 0:n.showSelect)!=null&&g.value&&!d.has("data-table-select")&&c.unshift({key:"data-table-select"}),(k=n==null?void 0:n.showExpand)!=null&&k.value&&!d.has("data-table-expand")&&c.push({key:"data-table-expand"});const v=Lc(c);Vw(v);const f=Math.max(...v.map(S=>Mi(S)))+1,m=Cw(v,f);t.value=m.headers,a.value=m.columns;const b=m.headers.flat(1);for(const S of b)S.key&&(S.sortable&&(S.sort&&(l.value[S.key]=S.sort),S.sortRaw&&(o.value[S.key]=S.sortRaw)),S.filter&&(i.value[S.key]=S.filter))});const r={headers:t,columns:a,sortFunctions:l,sortRawFunctions:o,filterFunctions:i};return Re(Ac,r),r}function Ll(){const e=xe(Ac);if(!e)throw new Error("Missing headers!");return e}const Mc=B({color:String,sticky:Boolean,disableSort:Boolean,multiSort:Boolean,sortAscIcon:{type:ve,default:"$sortAsc"},sortDescIcon:{type:ve,default:"$sortDesc"},headerProps:{type:Object},...In(),...gl()},"VDataTableHeaders"),pn=R()({name:"VDataTableHeaders",props:Mc(),setup(e,n){let{slots:t}=n;const{t:a}=qe(),{toggleSort:l,sortBy:o,isSorted:i}=Tc(),{someSelected:r,allSelected:u,selectAll:c,showSelectAll:d}=Al(),{columns:v,headers:f}=Ll(),{loaderClasses:m}=Sa(e);function b(V,w){if(!(!e.sticky&&!V.fixed))return{position:"sticky",left:V.fixed?ne(V.fixedOffset):void 0,top:e.sticky?`calc(var(--v-table-header-height) * ${w})`:void 0}}function h(V){const w=o.value.find($=>$.key===V.key);return w?w.order==="asc"?e.sortAscIcon:e.sortDescIcon:e.sortAscIcon}const{backgroundColorClasses:g,backgroundColorStyles:k}=Le(e,"color"),{displayClasses:S,mobile:C}=$t(e),P=y(()=>({headers:f.value,columns:v.value,toggleSort:l,isSorted:i,sortBy:o.value,someSelected:r.value,allSelected:u.value,selectAll:c,getSortIcon:h})),x=y(()=>["v-data-table__th",{"v-data-table__th--sticky":e.sticky},S.value,m.value]),_=V=>{let{column:w,x:$,y:p}=V;const I=w.key==="data-table-select"||w.key==="data-table-expand",A=z(e.headerProps??{},w.headerProps??{});return s(Za,z({tag:"th",align:w.align,class:[{"v-data-table__th--sortable":w.sortable&&!e.disableSort,"v-data-table__th--sorted":i(w),"v-data-table__th--fixed":w.fixed},...x.value],style:{width:ne(w.width),minWidth:ne(w.minWidth),maxWidth:ne(w.maxWidth),...b(w,p)},colspan:w.colspan,rowspan:w.rowspan,onClick:w.sortable?()=>l(w):void 0,fixed:w.fixed,nowrap:w.nowrap,lastFixed:w.lastFixed,noPadding:I},A),{default:()=>{var Y;const M=`header.${w.key}`,j={column:w,selectAll:c,isSorted:i,toggleSort:l,sortBy:o.value,someSelected:r.value,allSelected:u.value,getSortIcon:h};return t[M]?t[M](j):w.key==="data-table-select"?((Y=t["header.data-table-select"])==null?void 0:Y.call(t,j))??(d.value&&s(Ut,{modelValue:u.value,indeterminate:r.value&&!u.value,"onUpdate:modelValue":c},null)):s("div",{class:"v-data-table-header__content"},[s("span",null,[w.title]),w.sortable&&!e.disableSort&&s(Be,{key:"icon",class:"v-data-table-header__sort-icon",icon:h(w)},null),e.multiSort&&i(w)&&s("div",{key:"badge",class:["v-data-table-header__sort-badge",...g.value],style:k.value},[o.value.findIndex(le=>le.key===w.key)+1])])}})},T=()=>{const V=z(e.headerProps??{}??{}),w=y(()=>v.value.filter(p=>(p==null?void 0:p.sortable)&&!e.disableSort)),$=y(()=>{if(v.value.find(I=>I.key==="data-table-select")!=null)return u.value?"$checkboxOn":r.value?"$checkboxIndeterminate":"$checkboxOff"});return s(Za,z({tag:"th",class:[...x.value],colspan:f.value.length+1},V),{default:()=>[s("div",{class:"v-data-table-header__content"},[s(xi,{chips:!0,class:"v-data-table__td-sort-select",clearable:!0,density:"default",items:w.value,label:a("$vuetify.dataTable.sortBy"),multiple:e.multiSort,variant:"underlined","onClick:clear":()=>o.value=[],appendIcon:$.value,"onClick:append":()=>c(!u.value)},{...t,chip:p=>{var I;return s(ta,{onClick:(I=p.item.raw)!=null&&I.sortable?()=>l(p.item.raw):void 0,onMousedown:A=>{A.preventDefault(),A.stopPropagation()}},{default:()=>[p.item.title,s(Be,{class:["v-data-table__td-sort-icon",i(p.item.raw)&&"v-data-table__td-sort-icon-active"],icon:h(p.item.raw),size:"small"},null)]})}})])]})};W(()=>C.value?s("tr",null,[s(T,null,null)]):s(ae,null,[t.headers?t.headers(P.value):f.value.map((V,w)=>s("tr",null,[V.map(($,p)=>s(_,{column:$,x:p,y:w},null))])),e.loading&&s("tr",{class:"v-data-table-progress"},[s("th",{colspan:v.value.length},[s(wa,{name:"v-data-table-progress",absolute:!0,active:!0,color:typeof e.loading=="boolean"?void 0:e.loading,indeterminate:!0},{default:t.loader})])])]))}}),pw=B({item:{type:Object,required:!0}},"VDataTableGroupHeaderRow"),xw=R()({name:"VDataTableGroupHeaderRow",props:pw(),setup(e,n){let{slots:t}=n;const{isGroupOpen:a,toggleGroup:l,extractRows:o}=kc(),{isSelected:i,isSomeSelected:r,select:u}=Al(),{columns:c}=Ll(),d=y(()=>o([e.item]));return()=>s("tr",{class:"v-data-table-group-header-row",style:{"--v-data-table-group-header-row-depth":e.item.depth}},[c.value.map(v=>{var f,m;if(v.key==="data-table-group"){const b=a(e.item)?"$expand":"$next",h=()=>l(e.item);return((f=t["data-table-group"])==null?void 0:f.call(t,{item:e.item,count:d.value.length,props:{icon:b,onClick:h}}))??s(Za,{class:"v-data-table-group-header-row__column"},{default:()=>[s(Ae,{size:"small",variant:"text",icon:b,onClick:h},null),s("span",null,[e.item.value]),s("span",null,[bt("("),d.value.length,bt(")")])]})}if(v.key==="data-table-select"){const b=i(d.value),h=r(d.value)&&!b,g=k=>u(d.value,k);return((m=t["data-table-select"])==null?void 0:m.call(t,{props:{modelValue:b,indeterminate:h,"onUpdate:modelValue":g}}))??s("td",null,[s(Ut,{modelValue:b,indeterminate:h,"onUpdate:modelValue":g},null)])}return s("td",null,null)})])}}),_w=B({index:Number,item:Object,cellProps:[Object,Function],onClick:ot(),onContextmenu:ot(),onDblclick:ot(),...In()},"VDataTableRow"),Fi=R()({name:"VDataTableRow",props:_w(),setup(e,n){let{slots:t}=n;const{displayClasses:a,mobile:l}=$t(e,"v-data-table__tr"),{isSelected:o,toggleSelect:i,someSelected:r,allSelected:u,selectAll:c}=Al(),{isExpanded:d,toggleExpand:v}=yc(),{toggleSort:f,sortBy:m,isSorted:b}=Tc(),{columns:h}=Ll();W(()=>s("tr",{class:["v-data-table__tr",{"v-data-table__tr--clickable":!!(e.onClick||e.onContextmenu||e.onDblclick)},a.value],onClick:e.onClick,onContextmenu:e.onContextmenu,onDblclick:e.onDblclick},[e.item&&h.value.map((g,k)=>{const S=e.item,C=`item.${g.key}`,P=`header.${g.key}`,x={index:e.index,item:S.raw,internalItem:S,value:kn(S.columns,g.key),column:g,isSelected:o,toggleSelect:i,isExpanded:d,toggleExpand:v},_={column:g,selectAll:c,isSorted:b,toggleSort:f,sortBy:m.value,someSelected:r.value,allSelected:u.value,getSortIcon:()=>""},T=typeof e.cellProps=="function"?e.cellProps({index:x.index,item:x.item,internalItem:x.internalItem,value:x.value,column:g}):e.cellProps,V=typeof g.cellProps=="function"?g.cellProps({index:x.index,item:x.item,internalItem:x.internalItem,value:x.value}):g.cellProps;return s(Za,z({align:g.align,class:{"v-data-table__td--expanded-row":g.key==="data-table-expand","v-data-table__td--select-row":g.key==="data-table-select"},fixed:g.fixed,fixedOffset:g.fixedOffset,lastFixed:g.lastFixed,maxWidth:l.value?void 0:g.maxWidth,noPadding:g.key==="data-table-select"||g.key==="data-table-expand",nowrap:g.nowrap,width:l.value?void 0:g.width},T,V),{default:()=>{var $,p,I,A,M;if(t[C]&&!l.value)return($=t[C])==null?void 0:$.call(t,x);if(g.key==="data-table-select")return((p=t["item.data-table-select"])==null?void 0:p.call(t,x))??s(Ut,{disabled:!S.selectable,modelValue:o([S]),onClick:ql(()=>i(S),["stop"])},null);if(g.key==="data-table-expand")return((I=t["item.data-table-expand"])==null?void 0:I.call(t,x))??s(Ae,{icon:d(S)?"$collapse":"$expand",size:"small",variant:"text",onClick:ql(()=>v(S),["stop"])},null);const w=Oe(x.value);return l.value?s(ae,null,[s("div",{class:"v-data-table__td-title"},[((A=t[P])==null?void 0:A.call(t,_))??g.title]),s("div",{class:"v-data-table__td-value"},[((M=t[C])==null?void 0:M.call(t,x))??w])]):w}})})]))}}),Ec=B({loading:[Boolean,String],loadingText:{type:String,default:"$vuetify.dataIterator.loadingText"},hideNoData:Boolean,items:{type:Array,default:()=>[]},noDataText:{type:String,default:"$vuetify.noDataText"},rowProps:[Object,Function],cellProps:[Object,Function],...In()},"VDataTableRows"),xn=R()({name:"VDataTableRows",inheritAttrs:!1,props:Ec(),setup(e,n){let{attrs:t,slots:a}=n;const{columns:l}=Ll(),{expandOnClick:o,toggleExpand:i,isExpanded:r}=yc(),{isSelected:u,toggleSelect:c}=Al(),{toggleGroup:d,isGroupOpen:v}=kc(),{t:f}=qe(),{mobile:m}=$t(e);return W(()=>{var b,h;return e.loading&&(!e.items.length||a.loading)?s("tr",{class:"v-data-table-rows-loading",key:"loading"},[s("td",{colspan:l.value.length},[((b=a.loading)==null?void 0:b.call(a))??f(e.loadingText)])]):!e.loading&&!e.items.length&&!e.hideNoData?s("tr",{class:"v-data-table-rows-no-data",key:"no-data"},[s("td",{colspan:l.value.length},[((h=a["no-data"])==null?void 0:h.call(a))??f(e.noDataText)])]):s(ae,null,[e.items.map((g,k)=>{var P;if(g.type==="group"){const x={index:k,item:g,columns:l.value,isExpanded:r,toggleExpand:i,isSelected:u,toggleSelect:c,toggleGroup:d,isGroupOpen:v};return a["group-header"]?a["group-header"](x):s(xw,z({key:`group-header_${g.id}`,item:g},fr(t,":group-header",()=>x)),a)}const S={index:k,item:g.raw,internalItem:g,columns:l.value,isExpanded:r,toggleExpand:i,isSelected:u,toggleSelect:c},C={...S,props:z({key:`item_${g.key??g.index}`,onClick:o.value?()=>{i(g)}:void 0,index:k,item:g,cellProps:e.cellProps,mobile:m.value},fr(t,":row",()=>S),typeof e.rowProps=="function"?e.rowProps({item:S.item,index:S.index,internalItem:S.internalItem}):e.rowProps)};return s(ae,{key:C.props.key},[a.item?a.item(C):s(Fi,C.props,a),r(g)&&((P=a["expanded-row"])==null?void 0:P.call(a,S))])})])}),{}}}),Fc=B({fixedHeader:Boolean,fixedFooter:Boolean,height:[Number,String],hover:Boolean,...ie(),...lt(),...Ve(),...Pe()},"VTable"),_n=R()({name:"VTable",props:Fc(),setup(e,n){let{slots:t,emit:a}=n;const{themeClasses:l}=De(e),{densityClasses:o}=gt(e);return W(()=>s(e.tag,{class:["v-table",{"v-table--fixed-height":!!e.height,"v-table--fixed-header":e.fixedHeader,"v-table--fixed-footer":e.fixedFooter,"v-table--has-top":!!t.top,"v-table--has-bottom":!!t.bottom,"v-table--hover":e.hover},l.value,o.value,e.class],style:e.style},{default:()=>{var i,r,u;return[(i=t.top)==null?void 0:i.call(t),t.default?s("div",{class:"v-table__wrapper",style:{height:ne(e.height)}},[s("table",null,[t.default()])]):(r=t.wrapper)==null?void 0:r.call(t),(u=t.bottom)==null?void 0:u.call(t)]}})),{}}}),Pw=B({items:{type:Array,default:()=>[]},itemValue:{type:[String,Array,Function],default:"id"},itemSelectable:{type:[String,Array,Function],default:null},rowProps:[Object,Function],cellProps:[Object,Function],returnObject:Boolean},"DataTable-items");function Iw(e,n,t,a){const l=e.returnObject?n:tt(n,e.itemValue),o=tt(n,e.itemSelectable,!0),i=a.reduce((r,u)=>(u.key!=null&&(r[u.key]=tt(n,u.value)),r),{});return{type:"item",key:e.returnObject?tt(n,e.itemValue):l,index:t,value:l,selectable:o,columns:i,raw:n}}function $w(e,n,t){return n.map((a,l)=>Iw(e,a,l,t))}function Oi(e,n){return{items:y(()=>$w(e,e.items,n.value))}}const Ni=B({...Ec(),hideDefaultBody:Boolean,hideDefaultFooter:Boolean,hideDefaultHeader:Boolean,width:[String,Number],search:String,...gc(),...Ii(),...bw(),...Pw(),..._c(),...Ic(),...Mc(),...Fc()},"DataTable"),Tw=B({...Ti(),...Ni(),...Ia(),...Li()},"VDataTable"),Aw=R()({name:"VDataTable",props:Tw(),emits:{"update:modelValue":e=>!0,"update:page":e=>!0,"update:itemsPerPage":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:groupBy":e=>!0,"update:expanded":e=>!0,"update:currentItems":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{groupBy:l}=$i(e),{sortBy:o,multiSort:i,mustSort:r}=Bl(e),{page:u,itemsPerPage:c}=Ai(e),{disableSort:d}=Pn(e),{columns:v,headers:f,sortFunctions:m,sortRawFunctions:b,filterFunctions:h}=Ei(e,{groupBy:l,showSelect:F(e,"showSelect"),showExpand:F(e,"showExpand")}),{items:g}=Oi(e,v),k=F(e,"search"),{filteredItems:S}=$a(e,g,k,{transform:ce=>ce.columns,customKeyFilter:h}),{toggleSort:C}=Dl({sortBy:o,multiSort:i,mustSort:r,page:u}),{sortByWithGroups:P,opened:x,extractRows:_,isGroupOpen:T,toggleGroup:V}=Pl({groupBy:l,sortBy:o,disableSort:d}),{sortedItems:w}=Di(e,S,P,{transform:ce=>({...ce.raw,...ce.columns}),sortFunctions:m,sortRawFunctions:b}),{flatItems:$}=Il(w,l,x),p=y(()=>$.value.length),{startIndex:I,stopIndex:A,pageCount:M,setItemsPerPage:j}=Bi({page:u,itemsPerPage:c,itemsLength:p}),{paginatedItems:Y}=Cc({items:$,startIndex:I,stopIndex:A,itemsPerPage:c}),le=y(()=>_(Y.value)),{isSelected:re,select:N,selectAll:E,toggleSelect:O,someSelected:te,allSelected:se}=Tl(e,{allItems:g,currentPage:le}),{isExpanded:ue,toggleExpand:ye}=_l(e);$l({page:u,itemsPerPage:c,sortBy:o,groupBy:l,search:k}),Ge({VDataTableRows:{hideNoData:F(e,"hideNoData"),noDataText:F(e,"noDataText"),loading:F(e,"loading"),loadingText:F(e,"loadingText")}});const G=y(()=>({page:u.value,itemsPerPage:c.value,sortBy:o.value,pageCount:M.value,toggleSort:C,setItemsPerPage:j,someSelected:te.value,allSelected:se.value,isSelected:re,select:N,selectAll:E,toggleSelect:O,isExpanded:ue,toggleExpand:ye,isGroupOpen:T,toggleGroup:V,items:le.value.map(ce=>ce.raw),internalItems:le.value,groupedItems:Y.value,columns:v.value,headers:f.value}));return W(()=>{const ce=ga.filterProps(e),me=pn.filterProps(e),Me=xn.filterProps(e),Ie=_n.filterProps(e);return s(_n,z({class:["v-data-table",{"v-data-table--show-select":e.showSelect,"v-data-table--loading":e.loading},e.class],style:e.style},Ie),{top:()=>{var Z;return(Z=a.top)==null?void 0:Z.call(a,G.value)},default:()=>{var Z,Ce,q,oe,ke,he;return a.default?a.default(G.value):s(ae,null,[(Z=a.colgroup)==null?void 0:Z.call(a,G.value),!e.hideDefaultHeader&&s("thead",{key:"thead"},[s(pn,me,a)]),(Ce=a.thead)==null?void 0:Ce.call(a,G.value),!e.hideDefaultBody&&s("tbody",null,[(q=a["body.prepend"])==null?void 0:q.call(a,G.value),a.body?a.body(G.value):s(xn,z(t,Me,{items:Y.value}),a),(oe=a["body.append"])==null?void 0:oe.call(a,G.value)]),(ke=a.tbody)==null?void 0:ke.call(a,G.value),(he=a.tfoot)==null?void 0:he.call(a,G.value)])},bottom:()=>a.bottom?a.bottom(G.value):!e.hideDefaultFooter&&s(ae,null,[s(xa,null,null),s(ga,ce,{prepend:a["footer.prepend"]})])})}),{}}}),Bw=B({...Ni(),...Ii(),...Xu(),...Ia()},"VDataTableVirtual"),Dw=R()({name:"VDataTableVirtual",props:Bw(),emits:{"update:modelValue":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:groupBy":e=>!0,"update:expanded":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{groupBy:l}=$i(e),{sortBy:o,multiSort:i,mustSort:r}=Bl(e),{disableSort:u}=Pn(e),{columns:c,headers:d,filterFunctions:v,sortFunctions:f,sortRawFunctions:m}=Ei(e,{groupBy:l,showSelect:F(e,"showSelect"),showExpand:F(e,"showExpand")}),{items:b}=Oi(e,c),h=F(e,"search"),{filteredItems:g}=$a(e,b,h,{transform:me=>me.columns,customKeyFilter:v}),{toggleSort:k}=Dl({sortBy:o,multiSort:i,mustSort:r}),{sortByWithGroups:S,opened:C,extractRows:P,isGroupOpen:x,toggleGroup:_}=Pl({groupBy:l,sortBy:o,disableSort:u}),{sortedItems:T}=Di(e,g,S,{transform:me=>({...me.raw,...me.columns}),sortFunctions:f,sortRawFunctions:m}),{flatItems:V}=Il(T,l,C),w=y(()=>P(V.value)),{isSelected:$,select:p,selectAll:I,toggleSelect:A,someSelected:M,allSelected:j}=Tl(e,{allItems:w,currentPage:w}),{isExpanded:Y,toggleExpand:le}=_l(e),{containerRef:re,markerRef:N,paddingTop:E,paddingBottom:O,computedItems:te,handleItemResize:se,handleScroll:ue,handleScrollend:ye}=Zu(e,V),G=y(()=>te.value.map(me=>me.raw));$l({sortBy:o,page:ee(1),itemsPerPage:ee(-1),groupBy:l,search:h}),Ge({VDataTableRows:{hideNoData:F(e,"hideNoData"),noDataText:F(e,"noDataText"),loading:F(e,"loading"),loadingText:F(e,"loadingText")}});const ce=y(()=>({sortBy:o.value,toggleSort:k,someSelected:M.value,allSelected:j.value,isSelected:$,select:p,selectAll:I,toggleSelect:A,isExpanded:Y,toggleExpand:le,isGroupOpen:x,toggleGroup:_,items:w.value.map(me=>me.raw),internalItems:w.value,groupedItems:V.value,columns:c.value,headers:d.value}));W(()=>{const me=pn.filterProps(e),Me=xn.filterProps(e),Ie=_n.filterProps(e);return s(_n,z({class:["v-data-table",{"v-data-table--loading":e.loading},e.class],style:e.style},Ie),{top:()=>{var Z;return(Z=a.top)==null?void 0:Z.call(a,ce.value)},wrapper:()=>{var Z,Ce,q;return s("div",{ref:re,onScrollPassive:ue,onScrollend:ye,class:"v-table__wrapper",style:{height:ne(e.height)}},[s("table",null,[(Z=a.colgroup)==null?void 0:Z.call(a,ce.value),!e.hideDefaultHeader&&s("thead",{key:"thead"},[s(pn,z(me,{sticky:e.fixedHeader}),a)]),!e.hideDefaultBody&&s("tbody",null,[s("tr",{ref:N,style:{height:ne(E.value),border:0}},[s("td",{colspan:c.value.length,style:{height:0,border:0}},null)]),(Ce=a["body.prepend"])==null?void 0:Ce.call(a,ce.value),s(xn,z(t,Me,{items:G.value}),{...a,item:oe=>s(qu,{key:oe.internalItem.index,renderless:!0,"onUpdate:height":ke=>se(oe.internalItem.index,ke)},{default:ke=>{var we;let{itemRef:he}=ke;return((we=a.item)==null?void 0:we.call(a,{...oe,itemRef:he}))??s(Fi,z(oe.props,{ref:he,key:oe.internalItem.index,index:oe.internalItem.index}),a)}})}),(q=a["body.append"])==null?void 0:q.call(a,ce.value),s("tr",{style:{height:ne(O.value),border:0}},[s("td",{colspan:c.value.length,style:{height:0,border:0}},null)])])])])},bottom:()=>{var Z;return(Z=a.bottom)==null?void 0:Z.call(a,ce.value)}})})}}),Lw=B({itemsLength:{type:[Number,String],required:!0},...Ti(),...Ni(),...Li()},"VDataTableServer"),Mw=R()({name:"VDataTableServer",props:Lw(),emits:{"update:modelValue":e=>!0,"update:page":e=>!0,"update:itemsPerPage":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:expanded":e=>!0,"update:groupBy":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{groupBy:l}=$i(e),{sortBy:o,multiSort:i,mustSort:r}=Bl(e),{page:u,itemsPerPage:c}=Ai(e),{disableSort:d}=Pn(e),v=y(()=>parseInt(e.itemsLength,10)),{columns:f,headers:m}=Ei(e,{groupBy:l,showSelect:F(e,"showSelect"),showExpand:F(e,"showExpand")}),{items:b}=Oi(e,f),{toggleSort:h}=Dl({sortBy:o,multiSort:i,mustSort:r,page:u}),{opened:g,isGroupOpen:k,toggleGroup:S,extractRows:C}=Pl({groupBy:l,sortBy:o,disableSort:d}),{pageCount:P,setItemsPerPage:x}=Bi({page:u,itemsPerPage:c,itemsLength:v}),{flatItems:_}=Il(b,l,g),{isSelected:T,select:V,selectAll:w,toggleSelect:$,someSelected:p,allSelected:I}=Tl(e,{allItems:b,currentPage:b}),{isExpanded:A,toggleExpand:M}=_l(e),j=y(()=>C(b.value));$l({page:u,itemsPerPage:c,sortBy:o,groupBy:l,search:F(e,"search")}),Re("v-data-table",{toggleSort:h,sortBy:o}),Ge({VDataTableRows:{hideNoData:F(e,"hideNoData"),noDataText:F(e,"noDataText"),loading:F(e,"loading"),loadingText:F(e,"loadingText")}});const Y=y(()=>({page:u.value,itemsPerPage:c.value,sortBy:o.value,pageCount:P.value,toggleSort:h,setItemsPerPage:x,someSelected:p.value,allSelected:I.value,isSelected:T,select:V,selectAll:w,toggleSelect:$,isExpanded:A,toggleExpand:M,isGroupOpen:k,toggleGroup:S,items:j.value.map(le=>le.raw),internalItems:j.value,groupedItems:_.value,columns:f.value,headers:m.value}));W(()=>{const le=ga.filterProps(e),re=pn.filterProps(e),N=xn.filterProps(e),E=_n.filterProps(e);return s(_n,z({class:["v-data-table",{"v-data-table--loading":e.loading},e.class],style:e.style},E),{top:()=>{var O;return(O=a.top)==null?void 0:O.call(a,Y.value)},default:()=>{var O,te,se,ue,ye,G;return a.default?a.default(Y.value):s(ae,null,[(O=a.colgroup)==null?void 0:O.call(a,Y.value),!e.hideDefaultHeader&&s("thead",{key:"thead",class:"v-data-table__thead",role:"rowgroup"},[s(pn,z(re,{sticky:e.fixedHeader}),a)]),(te=a.thead)==null?void 0:te.call(a,Y.value),!e.hideDefaultBody&&s("tbody",{class:"v-data-table__tbody",role:"rowgroup"},[(se=a["body.prepend"])==null?void 0:se.call(a,Y.value),a.body?a.body(Y.value):s(xn,z(t,N,{items:_.value}),a),(ue=a["body.append"])==null?void 0:ue.call(a,Y.value)]),(ye=a.tbody)==null?void 0:ye.call(a,Y.value),(G=a.tfoot)==null?void 0:G.call(a,Y.value)])},bottom:()=>a.bottom?a.bottom(Y.value):!e.hideDefaultFooter&&s(ae,null,[s(xa,null,null),s(ga,le,{prepend:a["footer.prepend"]})])})})}}),Ew=B({fluid:{type:Boolean,default:!1},...ie(),...Qe(),...Ve()},"VContainer"),Fw=R()({name:"VContainer",props:Ew(),setup(e,n){let{slots:t}=n;const{rtlClasses:a}=nt(),{dimensionStyles:l}=et(e);return W(()=>s(e.tag,{class:["v-container",{"v-container--fluid":e.fluid},a.value,e.class],style:[l.value,e.style]},t)),{}}}),Oc=ul.reduce((e,n)=>(e[n]={type:[Boolean,String,Number],default:!1},e),{}),Nc=ul.reduce((e,n)=>{const t="offset"+Xn(n);return e[t]={type:[String,Number],default:null},e},{}),Rc=ul.reduce((e,n)=>{const t="order"+Xn(n);return e[t]={type:[String,Number],default:null},e},{}),Or={col:Object.keys(Oc),offset:Object.keys(Nc),order:Object.keys(Rc)};function Ow(e,n,t){let a=e;if(!(t==null||t===!1)){if(n){const l=n.replace(e,"");a+=`-${l}`}return e==="col"&&(a="v-"+a),e==="col"&&(t===""||t===!0)||(a+=`-${t}`),a.toLowerCase()}}const Nw=["auto","start","end","center","baseline","stretch"],Rw=B({cols:{type:[Boolean,String,Number],default:!1},...Oc,offset:{type:[String,Number],default:null},...Nc,order:{type:[String,Number],default:null},...Rc,alignSelf:{type:String,default:null,validator:e=>Nw.includes(e)},...ie(),...Ve()},"VCol"),Hw=R()({name:"VCol",props:Rw(),setup(e,n){let{slots:t}=n;const a=y(()=>{const l=[];let o;for(o in Or)Or[o].forEach(r=>{const u=e[r],c=Ow(o,r,u);c&&l.push(c)});const i=l.some(r=>r.startsWith("v-col-"));return l.push({"v-col":!i||!e.cols,[`v-col-${e.cols}`]:e.cols,[`offset-${e.offset}`]:e.offset,[`order-${e.order}`]:e.order,[`align-self-${e.alignSelf}`]:e.alignSelf}),l});return()=>{var l;return an(e.tag,{class:[a.value,e.class],style:e.style},(l=t.default)==null?void 0:l.call(t))}}}),Ri=["start","end","center"],Hc=["space-between","space-around","space-evenly"];function Hi(e,n){return ul.reduce((t,a)=>{const l=e+Xn(a);return t[l]=n(),t},{})}const zw=[...Ri,"baseline","stretch"],zc=e=>zw.includes(e),Wc=Hi("align",()=>({type:String,default:null,validator:zc})),Ww=[...Ri,...Hc],jc=e=>Ww.includes(e),Gc=Hi("justify",()=>({type:String,default:null,validator:jc})),jw=[...Ri,...Hc,"stretch"],Yc=e=>jw.includes(e),Uc=Hi("alignContent",()=>({type:String,default:null,validator:Yc})),Nr={align:Object.keys(Wc),justify:Object.keys(Gc),alignContent:Object.keys(Uc)},Gw={align:"align",justify:"justify",alignContent:"align-content"};function Yw(e,n,t){let a=Gw[e];if(t!=null){if(n){const l=n.replace(e,"");a+=`-${l}`}return a+=`-${t}`,a.toLowerCase()}}const Uw=B({dense:Boolean,noGutters:Boolean,align:{type:String,default:null,validator:zc},...Wc,justify:{type:String,default:null,validator:jc},...Gc,alignContent:{type:String,default:null,validator:Yc},...Uc,...ie(),...Ve()},"VRow"),Kw=R()({name:"VRow",props:Uw(),setup(e,n){let{slots:t}=n;const a=y(()=>{const l=[];let o;for(o in Nr)Nr[o].forEach(i=>{const r=e[i],u=Yw(o,i,r);u&&l.push(u)});return l.push({"v-row--no-gutters":e.noGutters,"v-row--dense":e.dense,[`align-${e.align}`]:e.align,[`justify-${e.justify}`]:e.justify,[`align-content-${e.alignContent}`]:e.alignContent}),l});return()=>{var l;return an(e.tag,{class:["v-row",a.value,e.class],style:e.style},(l=t.default)==null?void 0:l.call(t))}}}),Kc=Wt("v-spacer","div","VSpacer"),qc=B({active:{type:[String,Array],default:void 0},disabled:{type:[Boolean,String,Array],default:!1},nextIcon:{type:ve,default:"$next"},prevIcon:{type:ve,default:"$prev"},modeIcon:{type:ve,default:"$subgroup"},text:String,viewMode:{type:String,default:"month"}},"VDatePickerControls"),Io=R()({name:"VDatePickerControls",props:qc(),emits:{"click:year":()=>!0,"click:month":()=>!0,"click:prev":()=>!0,"click:next":()=>!0,"click:text":()=>!0},setup(e,n){let{emit:t}=n;const a=y(()=>Array.isArray(e.disabled)?e.disabled.includes("text"):!!e.disabled),l=y(()=>Array.isArray(e.disabled)?e.disabled.includes("mode"):!!e.disabled),o=y(()=>Array.isArray(e.disabled)?e.disabled.includes("prev"):!!e.disabled),i=y(()=>Array.isArray(e.disabled)?e.disabled.includes("next"):!!e.disabled);function r(){t("click:prev")}function u(){t("click:next")}function c(){t("click:year")}function d(){t("click:month")}return W(()=>s("div",{class:["v-date-picker-controls"]},[s(Ae,{class:"v-date-picker-controls__month-btn",disabled:a.value,text:e.text,variant:"text",rounded:!0,onClick:d},null),s(Ae,{key:"mode-btn",class:"v-date-picker-controls__mode-btn",disabled:l.value,density:"comfortable",icon:e.modeIcon,variant:"text",onClick:c},null),s(Kc,{key:"mode-spacer"},null),s("div",{key:"month-buttons",class:"v-date-picker-controls__month"},[s(Ae,{disabled:o.value,icon:e.prevIcon,variant:"text",onClick:r},null),s(Ae,{disabled:i.value,icon:e.nextIcon,variant:"text",onClick:u},null)])])),{}}}),qw=B({appendIcon:ve,color:String,header:String,transition:String,onClick:ot()},"VDatePickerHeader"),$o=R()({name:"VDatePickerHeader",props:qw(),emits:{click:()=>!0,"click:append":()=>!0},setup(e,n){let{emit:t,slots:a}=n;const{backgroundColorClasses:l,backgroundColorStyles:o}=Le(e,"color");function i(){t("click")}function r(){t("click:append")}return W(()=>{const u=!!(a.default||e.header),c=!!(a.append||e.appendIcon);return s("div",{class:["v-date-picker-header",{"v-date-picker-header--clickable":!!e.onClick},l.value],style:o.value,onClick:i},[a.prepend&&s("div",{key:"prepend",class:"v-date-picker-header__prepend"},[a.prepend()]),u&&s(ft,{key:"content",name:e.transition},{default:()=>{var d;return[s("div",{key:e.header,class:"v-date-picker-header__content"},[((d=a.default)==null?void 0:d.call(a))??e.header])]}}),c&&s("div",{class:"v-date-picker-header__append"},[a.append?s(pe,{key:"append-defaults",disabled:!e.appendIcon,defaults:{VBtn:{icon:e.appendIcon,variant:"text"}}},{default:()=>{var d;return[(d=a.append)==null?void 0:d.call(a)]}}):s(Ae,{key:"append-btn",icon:e.appendIcon,variant:"text",onClick:r},null)])])}),{}}}),Xw=B({allowedDates:[Array,Function],disabled:Boolean,displayValue:null,modelValue:Array,month:[Number,String],max:null,min:null,showAdjacentMonths:Boolean,year:[Number,String],weekdays:{type:Array,default:()=>[0,1,2,3,4,5,6]},weeksInMonth:{type:String,default:"dynamic"},firstDayOfWeek:[Number,String]},"calendar");function Zw(e){const n=ba(),t=de(e,"modelValue",[],m=>We(m)),a=y(()=>e.displayValue?n.date(e.displayValue):t.value.length>0?n.date(t.value[0]):e.min?n.date(e.min):Array.isArray(e.allowedDates)?n.date(e.allowedDates[0]):n.date()),l=de(e,"year",void 0,m=>{const b=m!=null?Number(m):n.getYear(a.value);return n.startOfYear(n.setYear(n.date(),b))},m=>n.getYear(m)),o=de(e,"month",void 0,m=>{const b=m!=null?Number(m):n.getMonth(a.value),h=n.setYear(n.startOfMonth(n.date()),n.getYear(l.value));return n.setMonth(h,b)},m=>n.getMonth(m)),i=y(()=>{const m=Number(e.firstDayOfWeek??0);return e.weekdays.map(b=>(b+m)%7)}),r=y(()=>{const m=n.getWeekArray(o.value,e.firstDayOfWeek),b=m.flat(),h=6*7;if(e.weeksInMonth==="static"&&b.lengthi.value.includes(n.toJsDate(h).getDay())).map((h,g)=>{const k=n.toISO(h),S=!n.isSameMonth(h,o.value),C=n.isSameDay(h,n.startOfMonth(o.value)),P=n.isSameDay(h,n.endOfMonth(o.value)),x=n.isSameDay(h,o.value);return{date:h,isoDate:k,formatted:n.format(h,"keyboardDate"),year:n.getYear(h),month:n.getMonth(h),isDisabled:f(h),isWeekStart:g%7===0,isWeekEnd:g%7===6,isToday:n.isSameDay(h,b),isAdjacent:S,isHidden:S&&!e.showAdjacentMonths,isStart:C,isSelected:t.value.some(_=>n.isSameDay(h,_)),isEnd:P,isSame:x,localized:n.format(h,"dayOfMonth")}})}const c=y(()=>{const m=n.startOfWeek(a.value,e.firstDayOfWeek),b=[];for(let g=0;g<=6;g++)b.push(n.addDays(m,g));const h=n.date();return u(b,h)}),d=y(()=>{const m=r.value.flat(),b=n.date();return u(m,b)}),v=y(()=>r.value.map(m=>m.length?ob(n,m[0]):null));function f(m){if(e.disabled)return!0;const b=n.date(m);return e.min&&n.isAfter(n.date(e.min),b)||e.max&&n.isAfter(b,n.date(e.max))?!0:Array.isArray(e.allowedDates)&&e.allowedDates.length>0?!e.allowedDates.some(h=>n.isSameDay(n.date(h),b)):typeof e.allowedDates=="function"?!e.allowedDates(b):!1}return{displayValue:a,daysInMonth:d,daysInWeek:c,genDays:u,model:t,weeksInMonth:r,weekDays:i,weekNumbers:v}}const Xc=B({color:String,hideWeekdays:Boolean,multiple:[Boolean,Number,String],showWeek:Boolean,transition:{type:String,default:"picker-transition"},reverseTransition:{type:String,default:"picker-reverse-transition"},...Xw()},"VDatePickerMonth"),To=R()({name:"VDatePickerMonth",props:Xc(),emits:{"update:modelValue":e=>!0,"update:month":e=>!0,"update:year":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=H(),{daysInMonth:o,model:i,weekNumbers:r}=Zw(e),u=ba(),c=ee(),d=ee(),v=ee(!1),f=y(()=>v.value?e.reverseTransition:e.transition);e.multiple==="range"&&i.value.length>0&&(c.value=i.value[0],i.value.length>1&&(d.value=i.value[i.value.length-1]));const m=y(()=>{const k=["number","string"].includes(typeof e.multiple)?Number(e.multiple):1/0;return i.value.length>=k});Q(o,(k,S)=>{S&&(v.value=u.isBefore(k[0].date,S[0].date))});function b(k){const S=u.startOfDay(k);if(i.value.length===0?c.value=void 0:i.value.length===1&&(c.value=i.value[0],d.value=void 0),!c.value)c.value=S,i.value=[c.value];else if(d.value)c.value=k,d.value=void 0,i.value=[c.value];else{if(u.isSameDay(S,c.value)){c.value=void 0,i.value=[];return}else u.isBefore(S,c.value)?(d.value=u.endOfDay(c.value),c.value=S):d.value=u.endOfDay(S);const C=u.getDiff(d.value,c.value,"days"),P=[c.value];for(let x=1;xu.isSameDay(C,k));if(S===-1)i.value=[...i.value,k];else{const C=[...i.value];C.splice(S,1),i.value=C}}function g(k){e.multiple==="range"?b(k):e.multiple?h(k):i.value=[k]}return()=>s("div",{class:"v-date-picker-month"},[e.showWeek&&s("div",{key:"weeks",class:"v-date-picker-month__weeks"},[!e.hideWeekdays&&s("div",{key:"hide-week-days",class:"v-date-picker-month__day"},[bt(" ")]),r.value.map(k=>s("div",{class:["v-date-picker-month__day","v-date-picker-month__day--adjacent"]},[k]))]),s(ft,{name:f.value},{default:()=>{var k;return[s("div",{ref:l,key:(k=o.value[0].date)==null?void 0:k.toString(),class:"v-date-picker-month__days"},[!e.hideWeekdays&&u.getWeekdays(e.firstDayOfWeek).map(S=>s("div",{class:["v-date-picker-month__day","v-date-picker-month__weekday"]},[S])),o.value.map((S,C)=>{const P={props:{onClick:()=>g(S.date)},item:S,i:C};return m.value&&!S.isSelected&&(S.isDisabled=!0),s("div",{class:["v-date-picker-month__day",{"v-date-picker-month__day--adjacent":S.isAdjacent,"v-date-picker-month__day--hide-adjacent":S.isHidden,"v-date-picker-month__day--selected":S.isSelected,"v-date-picker-month__day--week-end":S.isWeekEnd,"v-date-picker-month__day--week-start":S.isWeekStart}],"data-v-date":S.isDisabled?void 0:S.isoDate},[(e.showAdjacentMonths||!S.isAdjacent)&&s(pe,{defaults:{VBtn:{class:"v-date-picker-month__day-btn",color:(S.isSelected||S.isToday)&&!S.isDisabled?e.color:void 0,disabled:S.isDisabled,icon:!0,ripple:!1,text:S.localized,variant:S.isDisabled?S.isToday?"outlined":"text":S.isToday&&!S.isSelected?"outlined":"flat",onClick:()=>g(S.date)}}},{default:()=>{var x;return[((x=a.day)==null?void 0:x.call(a,P))??s(Ae,P.props,null)]}})])})])]}})])}}),Zc=B({color:String,height:[String,Number],min:null,max:null,modelValue:Number,year:Number},"VDatePickerMonths"),Ao=R()({name:"VDatePickerMonths",props:Zc(),emits:{"update:modelValue":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=ba(),o=de(e,"modelValue"),i=y(()=>{let r=l.startOfYear(l.date());return e.year&&(r=l.setYear(r,e.year)),Ot(12).map(u=>{const c=l.format(r,"monthShort"),d=!!(e.min&&l.isAfter(l.startOfMonth(l.date(e.min)),r)||e.max&&l.isAfter(r,l.startOfMonth(l.date(e.max))));return r=l.getNextMonth(r),{isDisabled:d,text:c,value:u}})});return He(()=>{o.value=o.value??l.getMonth(l.date())}),W(()=>s("div",{class:"v-date-picker-months",style:{height:ne(e.height)}},[s("div",{class:"v-date-picker-months__content"},[i.value.map((r,u)=>{var v;const c={active:o.value===u,color:o.value===u?e.color:void 0,disabled:r.isDisabled,rounded:!0,text:r.text,variant:o.value===r.value?"flat":"text",onClick:()=>d(u)};function d(f){if(o.value===f){t("update:modelValue",o.value);return}o.value=f}return((v=a.month)==null?void 0:v.call(a,{month:r,i:u,props:c}))??s(Ae,z({key:"month"},c),null)})])])),{}}}),Jc=B({color:String,height:[String,Number],min:null,max:null,modelValue:Number},"VDatePickerYears"),Bo=R()({name:"VDatePickerYears",props:Jc(),emits:{"update:modelValue":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=ba(),o=de(e,"modelValue"),i=y(()=>{const u=l.getYear(l.date());let c=u-100,d=u+52;e.min&&(c=l.getYear(l.date(e.min))),e.max&&(d=l.getYear(l.date(e.max)));let v=l.startOfYear(l.date());return v=l.setYear(v,c),Ot(d-c+1,c).map(f=>{const m=l.format(v,"year");return v=l.setYear(v,l.getYear(v)+1),{text:m,value:f}})});He(()=>{o.value=o.value??l.getYear(l.date())});const r=ja();return Ke(async()=>{var u;await Te(),(u=r.el)==null||u.scrollIntoView({block:"center"})}),W(()=>s("div",{class:"v-date-picker-years",style:{height:ne(e.height)}},[s("div",{class:"v-date-picker-years__content"},[i.value.map((u,c)=>{var v;const d={ref:o.value===u.value?r:void 0,active:o.value===u.value,color:o.value===u.value?e.color:void 0,rounded:!0,text:u.text,variant:o.value===u.value?"flat":"text",onClick:()=>{if(o.value===u.value){t("update:modelValue",o.value);return}o.value=u.value}};return((v=a.year)==null?void 0:v.call(a,{year:u,i:c,props:d}))??s(Ae,z({key:"month"},d),null)})])])),{}}}),Jw=Wt("v-picker-title"),Qc=B({bgColor:String,landscape:Boolean,title:String,hideHeader:Boolean,...xl()},"VPicker"),Rr=R()({name:"VPicker",props:Qc(),setup(e,n){let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(F(e,"color"));return W(()=>{const o=Cn.filterProps(e),i=!!(e.title||t.title);return s(Cn,z(o,{color:e.bgColor,class:["v-picker",{"v-picker--landscape":e.landscape,"v-picker--with-actions":!!t.actions},e.class],style:e.style}),{default:()=>{var r;return[!e.hideHeader&&s("div",{key:"header",class:[a.value],style:[l.value]},[i&&s(Jw,{key:"picker-title"},{default:()=>{var u;return[((u=t.title)==null?void 0:u.call(t))??e.title]}}),t.header&&s("div",{class:"v-picker__header"},[t.header()])]),s("div",{class:"v-picker__body"},[(r=t.default)==null?void 0:r.call(t)]),t.actions&&s(pe,{defaults:{VBtn:{slim:!0,variant:"text"}}},{default:()=>[s("div",{class:"v-picker__actions"},[t.actions()])]})]}})}),{}}}),Qw=B({header:{type:String,default:"$vuetify.datePicker.header"},...qc(),...Xc({weeksInMonth:"static"}),...Je(Zc(),["modelValue"]),...Je(Jc(),["modelValue"]),...Qc({title:"$vuetify.datePicker.title"}),modelValue:null},"VDatePicker"),eV=R()({name:"VDatePicker",props:Qw(),emits:{"update:modelValue":e=>!0,"update:month":e=>!0,"update:year":e=>!0,"update:viewMode":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=ba(),{t:o}=qe(),i=de(e,"modelValue",void 0,w=>We(w),w=>e.multiple?w:w[0]),r=de(e,"viewMode"),u=y(()=>{var $;const w=l.date(($=i.value)==null?void 0:$[0]);return w&&l.isValid(w)?w:l.date()}),c=H(Number(e.month??l.getMonth(l.startOfMonth(u.value)))),d=H(Number(e.year??l.getYear(l.startOfYear(l.setMonth(u.value,c.value))))),v=ee(!1),f=y(()=>e.multiple&&i.value.length>1?o("$vuetify.datePicker.itemsSelected",i.value.length):i.value[0]&&l.isValid(i.value[0])?l.format(l.date(i.value[0]),"normalDateWithWeekday"):o(e.header)),m=y(()=>{let w=l.date();return w=l.setDate(w,1),w=l.setMonth(w,c.value),w=l.setYear(w,d.value),l.format(w,"monthAndYear")}),b=y(()=>`date-picker-header${v.value?"-reverse":""}-transition`),h=y(()=>{const w=l.date(e.min);return e.min&&l.isValid(w)?w:null}),g=y(()=>{const w=l.date(e.max);return e.max&&l.isValid(w)?w:null}),k=y(()=>{if(e.disabled)return!0;const w=[];if(r.value!=="month")w.push("prev","next");else{let $=l.date();if($=l.setYear($,d.value),$=l.setMonth($,c.value),h.value){const p=l.addDays(l.startOfMonth($),-1);l.isAfter(h.value,p)&&w.push("prev")}if(g.value){const p=l.addDays(l.endOfMonth($),1);l.isAfter(p,g.value)&&w.push("next")}}return w});function S(){c.value<11?c.value++:(d.value++,c.value=0,V(d.value)),T(c.value)}function C(){c.value>0?c.value--:(d.value--,c.value=11,V(d.value)),T(c.value)}function P(){r.value="month"}function x(){r.value=r.value==="months"?"month":"months"}function _(){r.value=r.value==="year"?"month":"year"}function T(w){r.value==="months"&&x(),t("update:month",w)}function V(w){r.value==="year"&&_(),t("update:year",w)}return Q(i,(w,$)=>{const p=We($),I=We(w);if(!I.length)return;const A=l.date(p[p.length-1]),M=l.date(I[I.length-1]),j=l.getMonth(M),Y=l.getYear(M);j!==c.value&&(c.value=j,T(c.value)),Y!==d.value&&(d.value=Y,V(d.value)),v.value=l.isBefore(A,M)}),W(()=>{const w=Rr.filterProps(e),$=Io.filterProps(e),p=$o.filterProps(e),I=To.filterProps(e),A=Je(Ao.filterProps(e),["modelValue"]),M=Je(Bo.filterProps(e),["modelValue"]),j={header:f.value,transition:b.value};return s(Rr,z(w,{class:["v-date-picker",`v-date-picker--${r.value}`,{"v-date-picker--show-week":e.showWeek},e.class],style:e.style}),{title:()=>{var Y;return((Y=a.title)==null?void 0:Y.call(a))??s("div",{class:"v-date-picker__title"},[o(e.title)])},header:()=>a.header?s(pe,{defaults:{VDatePickerHeader:{...j}}},{default:()=>{var Y;return[(Y=a.header)==null?void 0:Y.call(a,j)]}}):s($o,z({key:"header"},p,j,{onClick:r.value!=="month"?P:void 0}),{...a,default:void 0}),default:()=>s(ae,null,[s(Io,z($,{disabled:k.value,text:m.value,"onClick:next":S,"onClick:prev":C,"onClick:month":x,"onClick:year":_}),null),s(ua,{hideOnLeave:!0},{default:()=>[r.value==="months"?s(Ao,z({key:"date-picker-months"},A,{modelValue:c.value,"onUpdate:modelValue":[Y=>c.value=Y,T],min:h.value,max:g.value,year:d.value}),null):r.value==="year"?s(Bo,z({key:"date-picker-years"},M,{modelValue:d.value,"onUpdate:modelValue":[Y=>d.value=Y,V],min:h.value,max:g.value}),null):s(To,z({key:"date-picker-month"},I,{modelValue:i.value,"onUpdate:modelValue":Y=>i.value=Y,month:c.value,"onUpdate:month":[Y=>c.value=Y,T],year:d.value,"onUpdate:year":[Y=>d.value=Y,V],min:h.value,max:g.value}),null)]})]),actions:a.actions})}),{}}}),tV=B({actionText:String,bgColor:String,color:String,icon:ve,image:String,justify:{type:String,default:"center"},headline:String,title:String,text:String,textWidth:{type:[Number,String],default:500},href:String,to:String,...ie(),...Qe(),...jt({size:void 0}),...Pe()},"VEmptyState"),nV=R()({name:"VEmptyState",props:tV(),emits:{"click:action":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const{themeClasses:l}=De(e),{backgroundColorClasses:o,backgroundColorStyles:i}=Le(F(e,"bgColor")),{dimensionStyles:r}=et(e),{displayClasses:u}=$t();function c(d){t("click:action",d)}return W(()=>{var g,k,S;const d=!!(a.actions||e.actionText),v=!!(a.headline||e.headline),f=!!(a.title||e.title),m=!!(a.text||e.text),b=!!(a.media||e.image||e.icon),h=e.size||(e.image?200:96);return s("div",{class:["v-empty-state",{[`v-empty-state--${e.justify}`]:!0},l.value,o.value,u.value,e.class],style:[i.value,r.value,e.style]},[b&&s("div",{key:"media",class:"v-empty-state__media"},[a.media?s(pe,{key:"media-defaults",defaults:{VImg:{src:e.image,height:h},VIcon:{size:h,icon:e.icon}}},{default:()=>[a.media()]}):s(ae,null,[e.image?s(Yt,{key:"image",src:e.image,height:h},null):e.icon?s(Be,{key:"icon",color:e.color,size:h,icon:e.icon},null):void 0])]),v&&s("div",{key:"headline",class:"v-empty-state__headline"},[((g=a.headline)==null?void 0:g.call(a))??e.headline]),f&&s("div",{key:"title",class:"v-empty-state__title"},[((k=a.title)==null?void 0:k.call(a))??e.title]),m&&s("div",{key:"text",class:"v-empty-state__text",style:{maxWidth:ne(e.textWidth)}},[((S=a.text)==null?void 0:S.call(a))??e.text]),a.default&&s("div",{key:"content",class:"v-empty-state__content"},[a.default()]),d&&s("div",{key:"actions",class:"v-empty-state__actions"},[s(pe,{defaults:{VBtn:{class:"v-empty-state__action-btn",color:e.color??"surface-variant",text:e.actionText}}},{default:()=>{var C;return[((C=a.actions)==null?void 0:C.call(a,{props:{onClick:c}}))??s(Ae,{onClick:c},null)]}})])])}),{}}}),ha=Symbol.for("vuetify:v-expansion-panel"),ed=B({...ie(),...Si()},"VExpansionPanelText"),Do=R()({name:"VExpansionPanelText",props:ed(),setup(e,n){let{slots:t}=n;const a=xe(ha);if(!a)throw new Error("[Vuetify] v-expansion-panel-text needs to be placed inside v-expansion-panel");const{hasContent:l,onAfterLeave:o}=wi(e,a.isSelected);return W(()=>s(vl,{onAfterLeave:o},{default:()=>{var i;return[je(s("div",{class:["v-expansion-panel-text",e.class],style:e.style},[t.default&&l.value&&s("div",{class:"v-expansion-panel-text__wrapper"},[(i=t.default)==null?void 0:i.call(t)])]),[[Mt,a.isSelected.value]])]}})),{}}}),td=B({color:String,expandIcon:{type:ve,default:"$expand"},collapseIcon:{type:ve,default:"$collapse"},hideActions:Boolean,focusable:Boolean,static:Boolean,ripple:{type:[Boolean,Object],default:!1},readonly:Boolean,...ie(),...Qe()},"VExpansionPanelTitle"),Lo=R()({name:"VExpansionPanelTitle",directives:{Ripple:Zt},props:td(),setup(e,n){let{slots:t}=n;const a=xe(ha);if(!a)throw new Error("[Vuetify] v-expansion-panel-title needs to be placed inside v-expansion-panel");const{backgroundColorClasses:l,backgroundColorStyles:o}=Le(e,"color"),{dimensionStyles:i}=et(e),r=y(()=>({collapseIcon:e.collapseIcon,disabled:a.disabled.value,expanded:a.isSelected.value,expandIcon:e.expandIcon,readonly:e.readonly})),u=y(()=>a.isSelected.value?e.collapseIcon:e.expandIcon);return W(()=>{var c;return je(s("button",{class:["v-expansion-panel-title",{"v-expansion-panel-title--active":a.isSelected.value,"v-expansion-panel-title--focusable":e.focusable,"v-expansion-panel-title--static":e.static},l.value,e.class],style:[o.value,i.value,e.style],type:"button",tabindex:a.disabled.value?-1:void 0,disabled:a.disabled.value,"aria-expanded":a.isSelected.value,onClick:e.readonly?void 0:a.toggle},[s("span",{class:"v-expansion-panel-title__overlay"},null),(c=t.default)==null?void 0:c.call(t,r.value),!e.hideActions&&s(pe,{defaults:{VIcon:{icon:u.value}}},{default:()=>{var d;return[s("span",{class:"v-expansion-panel-title__icon"},[((d=t.actions)==null?void 0:d.call(t,r.value))??s(Be,null,null)])]}})]),[[Ct("ripple"),e.ripple]])}),{}}}),nd=B({title:String,text:String,bgColor:String,...at(),...Ln(),...ze(),...Ve(),...td(),...ed()},"VExpansionPanel"),aV=R()({name:"VExpansionPanel",props:nd(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const a=Mn(e,ha),{backgroundColorClasses:l,backgroundColorStyles:o}=Le(e,"bgColor"),{elevationClasses:i}=st(e),{roundedClasses:r}=Ue(e),u=y(()=>(a==null?void 0:a.disabled.value)||e.disabled),c=y(()=>a.group.items.value.reduce((f,m,b)=>(a.group.selected.value.includes(m.id)&&f.push(b),f),[])),d=y(()=>{const f=a.group.items.value.findIndex(m=>m.id===a.id);return!a.isSelected.value&&c.value.some(m=>m-f===1)}),v=y(()=>{const f=a.group.items.value.findIndex(m=>m.id===a.id);return!a.isSelected.value&&c.value.some(m=>m-f===-1)});return Re(ha,a),W(()=>{const f=!!(t.text||e.text),m=!!(t.title||e.title),b=Lo.filterProps(e),h=Do.filterProps(e);return s(e.tag,{class:["v-expansion-panel",{"v-expansion-panel--active":a.isSelected.value,"v-expansion-panel--before-active":d.value,"v-expansion-panel--after-active":v.value,"v-expansion-panel--disabled":u.value},r.value,l.value,e.class],style:[o.value,e.style]},{default:()=>[s("div",{class:["v-expansion-panel__shadow",...i.value]},null),s(pe,{defaults:{VExpansionPanelTitle:{...b},VExpansionPanelText:{...h}}},{default:()=>{var g;return[m&&s(Lo,{key:"title"},{default:()=>[t.title?t.title():e.title]}),f&&s(Do,{key:"text"},{default:()=>[t.text?t.text():e.text]}),(g=t.default)==null?void 0:g.call(t)]}})]})}),{groupItem:a}}}),lV=["default","accordion","inset","popout"],oV=B({flat:Boolean,...Dn(),...qo(nd(),["bgColor","collapseIcon","color","eager","elevation","expandIcon","focusable","hideActions","readonly","ripple","rounded","tile","static"]),...Pe(),...ie(),...Ve(),variant:{type:String,default:"default",validator:e=>lV.includes(e)}},"VExpansionPanels"),iV=R()({name:"VExpansionPanels",props:oV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{next:a,prev:l}=rn(e,ha),{themeClasses:o}=De(e),i=y(()=>e.variant&&`v-expansion-panels--variant-${e.variant}`);return Ge({VExpansionPanel:{bgColor:F(e,"bgColor"),collapseIcon:F(e,"collapseIcon"),color:F(e,"color"),eager:F(e,"eager"),elevation:F(e,"elevation"),expandIcon:F(e,"expandIcon"),focusable:F(e,"focusable"),hideActions:F(e,"hideActions"),readonly:F(e,"readonly"),ripple:F(e,"ripple"),rounded:F(e,"rounded"),static:F(e,"static")}}),W(()=>s(e.tag,{class:["v-expansion-panels",{"v-expansion-panels--flat":e.flat,"v-expansion-panels--tile":e.tile},o.value,i.value,e.class],style:e.style},{default:()=>{var r;return[(r=t.default)==null?void 0:r.call(t,{prev:l,next:a})]}})),{next:a,prev:l}}}),rV=B({app:Boolean,appear:Boolean,extended:Boolean,layout:Boolean,offset:Boolean,modelValue:{type:Boolean,default:!0},...Je(hl({active:!0}),["location"]),...$n(),...Xt(),...Et({transition:"fab-transition"})},"VFab"),sV=R()({name:"VFab",props:rV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),l=ee(56),o=H(),{resizeRef:i}=Lt(v=>{v.length&&(l.value=v[0].target.clientHeight)}),r=y(()=>e.app||e.absolute),u=y(()=>{var v;return r.value?((v=e.location)==null?void 0:v.split(" ").shift())??"bottom":!1}),c=y(()=>{var v;return r.value?((v=e.location)==null?void 0:v.split(" ")[1])??"end":!1});yt(()=>e.app,()=>{const v=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:u,layoutSize:y(()=>e.layout?l.value+24:0),elementSize:y(()=>l.value+24),active:y(()=>e.app&&a.value),absolute:F(e,"absolute")});He(()=>{o.value=v.layoutItemStyles.value})});const d=H();return W(()=>{const v=Ae.filterProps(e);return s("div",{ref:d,class:["v-fab",{"v-fab--absolute":e.absolute,"v-fab--app":!!e.app,"v-fab--extended":e.extended,"v-fab--offset":e.offset,[`v-fab--${u.value}`]:r.value,[`v-fab--${c.value}`]:r.value},e.class],style:[e.app?{...o.value}:{height:"inherit",width:void 0},e.style]},[s("div",{class:"v-fab__container"},[s(ft,{appear:e.appear,transition:e.transition},{default:()=>[je(s(Ae,z({ref:i},v,{active:void 0,location:void 0}),t),[[Mt,e.active]])]})])])}),{}}}),uV=B({chips:Boolean,counter:Boolean,counterSizeString:{type:String,default:"$vuetify.fileInput.counterSize"},counterString:{type:String,default:"$vuetify.fileInput.counter"},hideInput:Boolean,multiple:Boolean,showSize:{type:[Boolean,Number,String],default:!1,validator:e=>typeof e=="boolean"||[1e3,1024].includes(Number(e))},...Qt({prependIcon:"$file"}),modelValue:{type:[Array,Object],default:e=>e.multiple?[]:null,validator:e=>We(e).every(n=>n!=null&&typeof n=="object")},...Pa({clearable:!0})},"VFileInput"),cV=R()({name:"VFileInput",inheritAttrs:!1,props:uV(),emits:{"click:control":e=>!0,"mousedown:control":e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{t:o}=qe(),i=de(e,"modelValue",e.modelValue,w=>We(w),w=>!e.multiple&&Array.isArray(w)?w[0]:w),{isFocused:r,focus:u,blur:c}=Jt(e),d=y(()=>typeof e.showSize!="boolean"?e.showSize:void 0),v=y(()=>(i.value??[]).reduce((w,$)=>{let{size:p=0}=$;return w+p},0)),f=y(()=>Ji(v.value,d.value)),m=y(()=>(i.value??[]).map(w=>{const{name:$="",size:p=0}=w;return e.showSize?`${$} (${Ji(p,d.value)})`:$})),b=y(()=>{var $;const w=(($=i.value)==null?void 0:$.length)??0;return e.showSize?o(e.counterSizeString,w,f.value):o(e.counterString,w)}),h=H(),g=H(),k=H(),S=y(()=>r.value||e.active),C=y(()=>["plain","underlined"].includes(e.variant));function P(){var w;k.value!==document.activeElement&&((w=k.value)==null||w.focus()),r.value||u()}function x(w){var $;($=k.value)==null||$.click()}function _(w){a("mousedown:control",w)}function T(w){var $;($=k.value)==null||$.click(),a("click:control",w)}function V(w){w.stopPropagation(),P(),Te(()=>{i.value=[],Zo(e["onClick:clear"],w)})}return Q(i,w=>{(!Array.isArray(w)||!w.length)&&k.value&&(k.value.value="")}),W(()=>{const w=!!(l.counter||e.counter),$=!!(w||l.details),[p,I]=ln(t),{modelValue:A,...M}=ct.filterProps(e),j=Vi(e);return s(ct,z({ref:h,modelValue:i.value,"onUpdate:modelValue":Y=>i.value=Y,class:["v-file-input",{"v-file-input--chips":!!e.chips,"v-file-input--hide":e.hideInput,"v-input--plain-underlined":C.value},e.class],style:e.style,"onClick:prepend":x},p,M,{centerAffix:!C.value,focused:r.value}),{...l,default:Y=>{let{id:le,isDisabled:re,isDirty:N,isReadonly:E,isValid:O}=Y;return s(na,z({ref:g,"prepend-icon":e.prependIcon,onMousedown:_,onClick:T,"onClick:clear":V,"onClick:prependInner":e["onClick:prependInner"],"onClick:appendInner":e["onClick:appendInner"]},j,{id:le.value,active:S.value||N.value,dirty:N.value||e.dirty,disabled:re.value,focused:r.value,error:O.value===!1}),{...l,default:te=>{var ye;let{props:{class:se,...ue}}=te;return s(ae,null,[s("input",z({ref:k,type:"file",readonly:E.value,disabled:re.value,multiple:e.multiple,name:e.name,onClick:G=>{G.stopPropagation(),E.value&&G.preventDefault(),P()},onChange:G=>{if(!G.target)return;const ce=G.target;i.value=[...ce.files??[]]},onFocus:P,onBlur:c},ue,I),null),s("div",{class:se},[!!((ye=i.value)!=null&&ye.length)&&!e.hideInput&&(l.selection?l.selection({fileNames:m.value,totalBytes:v.value,totalBytesReadable:f.value}):e.chips?m.value.map(G=>s(ta,{key:G,size:"small",text:G},null)):m.value.join(", "))])])}})},details:$?Y=>{var le,re;return s(ae,null,[(le=l.details)==null?void 0:le.call(l,Y),w&&s(ae,null,[s("span",null,null),s(Sl,{active:!!((re=i.value)!=null&&re.length),value:b.value,disabled:e.disabled},l.counter)])])}:void 0})}),At({},h,g,k)}}),dV=B({app:Boolean,color:String,height:{type:[Number,String],default:"auto"},...wt(),...ie(),...at(),...$n(),...ze(),...Ve({tag:"footer"}),...Pe()},"VFooter"),vV=R()({name:"VFooter",props:dV(),setup(e,n){let{slots:t}=n;const a=H(),{themeClasses:l}=De(e),{backgroundColorClasses:o,backgroundColorStyles:i}=Le(F(e,"color")),{borderClasses:r}=_t(e),{elevationClasses:u}=st(e),{roundedClasses:c}=Ue(e),d=ee(32),{resizeRef:v}=Lt(m=>{m.length&&(d.value=m[0].target.clientHeight)}),f=y(()=>e.height==="auto"?d.value:parseInt(e.height,10));return yt(()=>e.app,()=>{const m=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:y(()=>"bottom"),layoutSize:f,elementSize:y(()=>e.height==="auto"?void 0:f.value),active:y(()=>e.app),absolute:F(e,"absolute")});He(()=>{a.value=m.layoutItemStyles.value})}),W(()=>s(e.tag,{ref:v,class:["v-footer",l.value,o.value,r.value,u.value,c.value,e.class],style:[i.value,e.app?a.value:{height:ne(e.height)},e.style]},t)),{}}}),fV=B({...ie(),...Sk()},"VForm"),mV=R()({name:"VForm",props:fV(),emits:{"update:modelValue":e=>!0,submit:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=wk(e),o=H();function i(u){u.preventDefault(),l.reset()}function r(u){const c=u,d=l.validate();c.then=d.then.bind(d),c.catch=d.catch.bind(d),c.finally=d.finally.bind(d),a("submit",c),c.defaultPrevented||d.then(v=>{var m;let{valid:f}=v;f&&((m=o.value)==null||m.submit())}),c.preventDefault()}return W(()=>{var u;return s("form",{ref:o,class:["v-form",e.class],style:e.style,novalidate:!0,onReset:i,onSubmit:r},[(u=t.default)==null?void 0:u.call(t,l)])}),At(l,o)}}),gV=B({disabled:Boolean,modelValue:{type:Boolean,default:null},...bi()},"VHover"),hV=R()({name:"VHover",props:gV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{runOpenDelay:l,runCloseDelay:o}=ki(e,i=>!e.disabled&&(a.value=i));return()=>{var i;return(i=t.default)==null?void 0:i.call(t,{isHovering:a.value,props:{onMouseenter:l,onMouseleave:o}})}}}),yV=B({color:String,direction:{type:String,default:"vertical",validator:e=>["vertical","horizontal"].includes(e)},side:{type:String,default:"end",validator:e=>["start","end","both"].includes(e)},mode:{type:String,default:"intersect",validator:e=>["intersect","manual"].includes(e)},margin:[Number,String],loadMoreText:{type:String,default:"$vuetify.infiniteScroll.loadMore"},emptyText:{type:String,default:"$vuetify.infiniteScroll.empty"},...Qe(),...Ve()},"VInfiniteScroll"),Hr=pt({name:"VInfiniteScrollIntersect",props:{side:{type:String,required:!0},rootMargin:String},emits:{intersect:(e,n)=>!0},setup(e,n){let{emit:t}=n;const{intersectionRef:a,isIntersecting:l}=fl();return Q(l,async o=>{t("intersect",e.side,o)}),W(()=>s("div",{class:"v-infinite-scroll-intersect",style:{"--v-infinite-margin-size":e.rootMargin},ref:a},[bt(" ")])),{}}}),bV=R()({name:"VInfiniteScroll",props:yV(),emits:{load:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=H(),o=ee("ok"),i=ee("ok"),r=y(()=>ne(e.margin)),u=ee(!1);function c(x){if(!l.value)return;const _=e.direction==="vertical"?"scrollTop":"scrollLeft";l.value[_]=x}function d(){if(!l.value)return 0;const x=e.direction==="vertical"?"scrollTop":"scrollLeft";return l.value[x]}function v(){if(!l.value)return 0;const x=e.direction==="vertical"?"scrollHeight":"scrollWidth";return l.value[x]}function f(){if(!l.value)return 0;const x=e.direction==="vertical"?"clientHeight":"clientWidth";return l.value[x]}Ke(()=>{l.value&&(e.side==="start"?c(v()):e.side==="both"&&c(v()/2-f()/2))});function m(x,_){x==="start"?o.value=_:x==="end"&&(i.value=_)}function b(x){return x==="start"?o.value:i.value}let h=0;function g(x,_){u.value=_,u.value&&k(x)}function k(x){if(e.mode!=="manual"&&!u.value)return;const _=b(x);if(!l.value||["empty","loading"].includes(_))return;h=v(),m(x,"loading");function T(V){m(x,V),Te(()=>{V==="empty"||V==="error"||(V==="ok"&&x==="start"&&c(v()-h+d()),e.mode!=="manual"&&Te(()=>{window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{k(x)})})})}))})}a("load",{side:x,done:T})}const{t:S}=qe();function C(x,_){var w,$,p,I,A;if(e.side!==x&&e.side!=="both")return;const T=()=>k(x),V={side:x,props:{onClick:T,color:e.color}};return _==="error"?(w=t.error)==null?void 0:w.call(t,V):_==="empty"?(($=t.empty)==null?void 0:$.call(t,V))??s("div",null,[S(e.emptyText)]):e.mode==="manual"?_==="loading"?((p=t.loading)==null?void 0:p.call(t,V))??s(Kn,{indeterminate:!0,color:e.color},null):((I=t["load-more"])==null?void 0:I.call(t,V))??s(Ae,{variant:"outlined",color:e.color,onClick:T},{default:()=>[S(e.loadMoreText)]}):((A=t.loading)==null?void 0:A.call(t,V))??s(Kn,{indeterminate:!0,color:e.color},null)}const{dimensionStyles:P}=et(e);W(()=>{const x=e.tag,_=e.side==="start"||e.side==="both",T=e.side==="end"||e.side==="both",V=e.mode==="intersect";return s(x,{ref:l,class:["v-infinite-scroll",`v-infinite-scroll--${e.direction}`,{"v-infinite-scroll--start":_,"v-infinite-scroll--end":T}],style:P.value},{default:()=>{var w;return[s("div",{class:"v-infinite-scroll__side"},[C("start",o.value)]),_&&V&&s(Hr,{key:"start",side:"start",onIntersect:g,rootMargin:r.value},null),(w=t.default)==null?void 0:w.call(t),T&&V&&s(Hr,{key:"end",side:"end",onIntersect:g,rootMargin:r.value},null),s("div",{class:"v-infinite-scroll__side"},[C("end",i.value)])]}})})}}),ad=Symbol.for("vuetify:v-item-group"),kV=B({...ie(),...Dn({selectedClass:"v-item--selected"}),...Ve(),...Pe()},"VItemGroup"),SV=R()({name:"VItemGroup",props:kV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{isSelected:l,select:o,next:i,prev:r,selected:u}=rn(e,ad);return()=>s(e.tag,{class:["v-item-group",a.value,e.class],style:e.style},{default:()=>{var c;return[(c=t.default)==null?void 0:c.call(t,{isSelected:l,select:o,next:i,prev:r,selected:u.value})]}})}}),wV=R()({name:"VItem",props:Ln(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const{isSelected:a,select:l,toggle:o,selectedClass:i,value:r,disabled:u}=Mn(e,ad);return()=>{var c;return(c=t.default)==null?void 0:c.call(t,{isSelected:a.value,selectedClass:i.value,select:l,toggle:o,value:r.value,disabled:u.value})}}}),VV=Wt("v-kbd","kbd"),CV=B({...ie(),...Qe(),...Ys()},"VLayout"),pV=R()({name:"VLayout",props:CV(),setup(e,n){let{slots:t}=n;const{layoutClasses:a,layoutStyles:l,getLayoutItem:o,items:i,layoutRef:r}=Ks(e),{dimensionStyles:u}=et(e);return W(()=>{var c;return s("div",{ref:r,class:[a.value,e.class],style:[u.value,l.value,e.style]},[(c=t.default)==null?void 0:c.call(t)])}),{getLayoutItem:o,items:i}}}),xV=B({position:{type:String,required:!0},size:{type:[Number,String],default:300},modelValue:Boolean,...ie(),...$n()},"VLayoutItem"),_V=R()({name:"VLayoutItem",props:xV(),setup(e,n){let{slots:t}=n;const{layoutItemStyles:a}=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:F(e,"position"),elementSize:F(e,"size"),layoutSize:F(e,"size"),active:F(e,"modelValue"),absolute:F(e,"absolute")});return()=>{var l;return s("div",{class:["v-layout-item",e.class],style:[a.value,e.style]},[(l=t.default)==null?void 0:l.call(t)])}}}),PV=B({modelValue:Boolean,options:{type:Object,default:()=>({root:void 0,rootMargin:void 0,threshold:void 0})},...ie(),...Qe(),...Ve(),...Et({transition:"fade-transition"})},"VLazy"),IV=R()({name:"VLazy",directives:{intersect:ka},props:PV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{dimensionStyles:a}=et(e),l=de(e,"modelValue");function o(i){l.value||(l.value=i)}return W(()=>je(s(e.tag,{class:["v-lazy",e.class],style:[a.value,e.style]},{default:()=>[l.value&&s(ft,{transition:e.transition,appear:!0},{default:()=>{var i;return[(i=t.default)==null?void 0:i.call(t)]}})]}),[[Ct("intersect"),{handler:o,options:e.options},null]])),{}}}),$V=B({locale:String,fallbackLocale:String,messages:Object,rtl:{type:Boolean,default:void 0},...ie()},"VLocaleProvider"),TV=R()({name:"VLocaleProvider",props:$V(),setup(e,n){let{slots:t}=n;const{rtlClasses:a}=hy(e);return W(()=>{var l;return s("div",{class:["v-locale-provider",a.value,e.class],style:e.style},[(l=t.default)==null?void 0:l.call(t)])}),{}}}),AV=B({scrollable:Boolean,...ie(),...Qe(),...Ve({tag:"main"})},"VMain"),BV=R()({name:"VMain",props:AV(),setup(e,n){let{slots:t}=n;const{dimensionStyles:a}=et(e),{mainStyles:l}=Us(),{ssrBootStyles:o}=An();return W(()=>s(e.tag,{class:["v-main",{"v-main--scrollable":e.scrollable},e.class],style:[l.value,o.value,a.value,e.style]},{default:()=>{var i,r;return[e.scrollable?s("div",{class:"v-main__scroller"},[(i=t.default)==null?void 0:i.call(t)]):(r=t.default)==null?void 0:r.call(t)]}})),{}}});function DV(e){let{rootEl:n,isSticky:t,layoutItemStyles:a}=e;const l=ee(!1),o=ee(0),i=y(()=>{const c=typeof l.value=="boolean"?"top":l.value;return[t.value?{top:"auto",bottom:"auto",height:void 0}:void 0,l.value?{[c]:ne(o.value)}:{top:a.value.top}]});Ke(()=>{Q(t,c=>{c?window.addEventListener("scroll",u,{passive:!0}):window.removeEventListener("scroll",u)},{immediate:!0})}),it(()=>{window.removeEventListener("scroll",u)});let r=0;function u(){const c=r>window.scrollY?"up":"down",d=n.value.getBoundingClientRect(),v=parseFloat(a.value.top??0),f=window.scrollY-Math.max(0,o.value-v),m=d.height+Math.max(o.value,v)-window.scrollY-window.innerHeight,b=parseFloat(getComputedStyle(n.value).getPropertyValue("--v-body-scroll-y"))||0;d.height0;t--){if(e[t].t===e[t-1].t)continue;const a=zr(n),l=(e[t].d-e[t-1].d)/(e[t].t-e[t-1].t);n+=(l-a)*Math.abs(l),t===e.length-1&&(n*=.5)}return zr(n)*1e3}function EV(){const e={};function n(l){Array.from(l.changedTouches).forEach(o=>{(e[o.identifier]??(e[o.identifier]=new Th(MV))).push([l.timeStamp,o])})}function t(l){Array.from(l.changedTouches).forEach(o=>{delete e[o.identifier]})}function a(l){var c;const o=(c=e[l])==null?void 0:c.values().reverse();if(!o)throw new Error(`No samples for touch id ${l}`);const i=o[0],r=[],u=[];for(const d of o){if(i[0]-d[0]>LV)break;r.push({t:d[0],d:d[1].clientX}),u.push({t:d[0],d:d[1].clientY})}return{x:Wr(r),y:Wr(u),get direction(){const{x:d,y:v}=this,[f,m]=[Math.abs(d),Math.abs(v)];return f>m&&d>=0?"right":f>m&&d<=0?"left":m>f&&v>=0?"down":m>f&&v<=0?"up":FV()}}}return{addMovement:n,endTouch:t,getVelocity:a}}function FV(){throw new Error}function OV(e){let{el:n,isActive:t,isTemporary:a,width:l,touchless:o,position:i}=e;Ke(()=>{window.addEventListener("touchstart",S,{passive:!0}),window.addEventListener("touchmove",C,{passive:!1}),window.addEventListener("touchend",P,{passive:!0})}),it(()=>{window.removeEventListener("touchstart",S),window.removeEventListener("touchmove",C),window.removeEventListener("touchend",P)});const r=y(()=>["left","right"].includes(i.value)),{addMovement:u,endTouch:c,getVelocity:d}=EV();let v=!1;const f=ee(!1),m=ee(0),b=ee(0);let h;function g(_,T){return(i.value==="left"?_:i.value==="right"?document.documentElement.clientWidth-_:i.value==="top"?_:i.value==="bottom"?document.documentElement.clientHeight-_:Hn())-(T?l.value:0)}function k(_){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;const V=i.value==="left"?(_-b.value)/l.value:i.value==="right"?(document.documentElement.clientWidth-_-b.value)/l.value:i.value==="top"?(_-b.value)/l.value:i.value==="bottom"?(document.documentElement.clientHeight-_-b.value)/l.value:Hn();return T?Math.max(0,Math.min(1,V)):V}function S(_){if(o.value)return;const T=_.changedTouches[0].clientX,V=_.changedTouches[0].clientY,w=25,$=i.value==="left"?Tdocument.documentElement.clientWidth-w:i.value==="top"?Vdocument.documentElement.clientHeight-w:Hn(),p=t.value&&(i.value==="left"?Tdocument.documentElement.clientWidth-l.value:i.value==="top"?Vdocument.documentElement.clientHeight-l.value:Hn());($||p||t.value&&a.value)&&(h=[T,V],b.value=g(r.value?T:V,t.value),m.value=k(r.value?T:V),v=b.value>-20&&b.value<80,c(_),u(_))}function C(_){const T=_.changedTouches[0].clientX,V=_.changedTouches[0].clientY;if(v){if(!_.cancelable){v=!1;return}const $=Math.abs(T-h[0]),p=Math.abs(V-h[1]);(r.value?$>p&&$>3:p>$&&p>3)?(f.value=!0,v=!1):(r.value?p:$)>3&&(v=!1)}if(!f.value)return;_.preventDefault(),u(_);const w=k(r.value?T:V,!1);m.value=Math.max(0,Math.min(1,w)),w>1?b.value=g(r.value?T:V,!0):w<0&&(b.value=g(r.value?T:V,!1))}function P(_){if(v=!1,!f.value)return;u(_),f.value=!1;const T=d(_.changedTouches[0].identifier),V=Math.abs(T.x),w=Math.abs(T.y);(r.value?V>w&&V>400:w>V&&w>3)?t.value=T.direction===({left:"right",right:"left",top:"down",bottom:"up"}[i.value]||Hn()):t.value=m.value>.5}const x=y(()=>f.value?{transform:i.value==="left"?`translateX(calc(-100% + ${m.value*l.value}px))`:i.value==="right"?`translateX(calc(100% - ${m.value*l.value}px))`:i.value==="top"?`translateY(calc(-100% + ${m.value*l.value}px))`:i.value==="bottom"?`translateY(calc(100% - ${m.value*l.value}px))`:Hn(),transition:"none"}:void 0);return yt(f,()=>{var V,w;const _=((V=n.value)==null?void 0:V.style.transform)??null,T=((w=n.value)==null?void 0:w.style.transition)??null;He(()=>{var $,p,I,A;(p=n.value)==null||p.style.setProperty("transform",(($=x.value)==null?void 0:$.transform)||"none"),(A=n.value)==null||A.style.setProperty("transition",((I=x.value)==null?void 0:I.transition)||null)}),mt(()=>{var $,p;($=n.value)==null||$.style.setProperty("transform",_),(p=n.value)==null||p.style.setProperty("transition",T)})}),{isDragging:f,dragProgress:m,dragStyles:x}}function Hn(){throw new Error}const NV=["start","end","left","right","top","bottom"],RV=B({color:String,disableResizeWatcher:Boolean,disableRouteWatcher:Boolean,expandOnHover:Boolean,floating:Boolean,modelValue:{type:Boolean,default:null},permanent:Boolean,rail:{type:Boolean,default:null},railWidth:{type:[Number,String],default:56},scrim:{type:[Boolean,String],default:!0},image:String,temporary:Boolean,persistent:Boolean,touchless:Boolean,width:{type:[Number,String],default:256},location:{type:String,default:"start",validator:e=>NV.includes(e)},sticky:Boolean,...wt(),...ie(),...bi(),...In({mobile:null}),...at(),...$n(),...ze(),...Ve({tag:"nav"}),...Pe()},"VNavigationDrawer"),HV=R()({name:"VNavigationDrawer",props:RV(),emits:{"update:modelValue":e=>!0,"update:rail":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{isRtl:o}=nt(),{themeClasses:i}=De(e),{borderClasses:r}=_t(e),{backgroundColorClasses:u,backgroundColorStyles:c}=Le(F(e,"color")),{elevationClasses:d}=st(e),{displayClasses:v,mobile:f}=$t(e),{roundedClasses:m}=Ue(e),b=ou(),h=de(e,"modelValue",null,O=>!!O),{ssrBootStyles:g}=An(),{scopeId:k}=Fn(),S=H(),C=ee(!1),{runOpenDelay:P,runCloseDelay:x}=ki(e,O=>{C.value=O}),_=y(()=>e.rail&&e.expandOnHover&&C.value?Number(e.width):Number(e.rail?e.railWidth:e.width)),T=y(()=>no(e.location,o.value)),V=y(()=>e.persistent),w=y(()=>!e.permanent&&(f.value||e.temporary)),$=y(()=>e.sticky&&!w.value&&T.value!=="bottom");yt(()=>e.expandOnHover&&e.rail!=null,()=>{Q(C,O=>a("update:rail",!O))}),yt(()=>!e.disableResizeWatcher,()=>{Q(w,O=>!e.permanent&&Te(()=>h.value=!O))}),yt(()=>!e.disableRouteWatcher&&!!b,()=>{Q(b.currentRoute,()=>w.value&&(h.value=!1))}),Q(()=>e.permanent,O=>{O&&(h.value=!0)}),e.modelValue==null&&!w.value&&(h.value=e.permanent||!f.value);const{isDragging:p,dragProgress:I}=OV({el:S,isActive:h,isTemporary:w,width:_,touchless:F(e,"touchless"),position:T}),A=y(()=>{const O=w.value?0:e.rail&&e.expandOnHover?Number(e.railWidth):_.value;return p.value?O*I.value:O}),M=y(()=>["top","bottom"].includes(e.location)?0:_.value),{layoutItemStyles:j,layoutItemScrimStyles:Y}=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:T,layoutSize:A,elementSize:M,active:y(()=>h.value||p.value),disableTransitions:y(()=>p.value),absolute:y(()=>e.absolute||$.value&&typeof le.value!="string")}),{isStuck:le,stickyStyles:re}=DV({rootEl:S,isSticky:$,layoutItemStyles:j}),N=Le(y(()=>typeof e.scrim=="string"?e.scrim:null)),E=y(()=>({...p.value?{opacity:I.value*.2,transition:"none"}:void 0,...Y.value}));return Ge({VList:{bgColor:"transparent"}}),W(()=>{const O=l.image||e.image;return s(ae,null,[s(e.tag,z({ref:S,onMouseenter:P,onMouseleave:x,class:["v-navigation-drawer",`v-navigation-drawer--${T.value}`,{"v-navigation-drawer--expand-on-hover":e.expandOnHover,"v-navigation-drawer--floating":e.floating,"v-navigation-drawer--is-hovering":C.value,"v-navigation-drawer--rail":e.rail,"v-navigation-drawer--temporary":w.value,"v-navigation-drawer--persistent":V.value,"v-navigation-drawer--active":h.value,"v-navigation-drawer--sticky":$.value},i.value,u.value,r.value,v.value,d.value,m.value,e.class],style:[c.value,j.value,g.value,re.value,e.style,["top","bottom"].includes(T.value)?{height:"auto"}:{}]},k,t),{default:()=>{var te,se,ue;return[O&&s("div",{key:"image",class:"v-navigation-drawer__img"},[l.image?s(pe,{key:"image-defaults",disabled:!e.image,defaults:{VImg:{alt:"",cover:!0,height:"inherit",src:e.image}}},l.image):s(Yt,{key:"image-img",alt:"",cover:!0,height:"inherit",src:e.image},null)]),l.prepend&&s("div",{class:"v-navigation-drawer__prepend"},[(te=l.prepend)==null?void 0:te.call(l)]),s("div",{class:"v-navigation-drawer__content"},[(se=l.default)==null?void 0:se.call(l)]),l.append&&s("div",{class:"v-navigation-drawer__append"},[(ue=l.append)==null?void 0:ue.call(l)])]}}),s(Dt,{name:"fade-transition"},{default:()=>[w.value&&(p.value||h.value)&&!!e.scrim&&s("div",z({class:["v-navigation-drawer__scrim",N.backgroundColorClasses.value],style:[E.value,N.backgroundColorStyles.value],onClick:()=>{V.value||(h.value=!1)}},k),null)]})])}),{isStuck:le}}}),zV=pt({name:"VNoSsr",setup(e,n){let{slots:t}=n;const a=ju();return()=>{var l;return a.value&&((l=t.default)==null?void 0:l.call(t))}}}),WV=B({autofocus:Boolean,divider:String,focusAll:Boolean,label:{type:String,default:"$vuetify.input.otp"},length:{type:[Number,String],default:6},modelValue:{type:[Number,String],default:void 0},placeholder:String,type:{type:String,default:"number"},...Qe(),...pa(),...ll(Pa({variant:"outlined"}),["baseColor","bgColor","class","color","disabled","error","loading","rounded","style","theme","variant"])},"VOtpInput"),jV=R()({name:"VOtpInput",props:WV(),emits:{finish:e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{dimensionStyles:o}=et(e),{isFocused:i,focus:r,blur:u}=Jt(e),c=de(e,"modelValue","",V=>V==null?[]:String(V).split(""),V=>V.join("")),{t:d}=qe(),v=y(()=>Number(e.length)),f=y(()=>Array(v.value).fill(0)),m=H(-1),b=H(),h=H([]),g=y(()=>h.value[m.value]);function k(){if(T(g.value.value)){g.value.value="";return}const V=c.value.slice(),w=g.value.value;V[m.value]=w;let $=null;m.value>c.value.length?$=c.value.length+1:m.value+1!==v.value&&($="next"),c.value=V,$&&gn(b.value,$)}function S(V){const w=c.value.slice(),$=m.value;let p=null;["ArrowLeft","ArrowRight","Backspace","Delete"].includes(V.key)&&(V.preventDefault(),V.key==="ArrowLeft"?p="prev":V.key==="ArrowRight"?p="next":["Backspace","Delete"].includes(V.key)&&(w[m.value]="",c.value=w,m.value>0&&V.key==="Backspace"?p="prev":requestAnimationFrame(()=>{var I;(I=h.value[$])==null||I.select()})),requestAnimationFrame(()=>{p!=null&&gn(b.value,p)}))}function C(V,w){var p,I;w.preventDefault(),w.stopPropagation();const $=((p=w==null?void 0:w.clipboardData)==null?void 0:p.getData("Text").slice(0,v.value))??"";T($)||(c.value=$.split(""),(I=h.value)==null||I[V].blur())}function P(){c.value=[]}function x(V,w){r(),m.value=w}function _(){u(),m.value=-1}function T(V){return e.type==="number"&&/[^0-9]/g.test(V)}return Ge({VField:{color:y(()=>e.color),bgColor:y(()=>e.color),baseColor:y(()=>e.baseColor),disabled:y(()=>e.disabled),error:y(()=>e.error),variant:y(()=>e.variant)}},{scoped:!0}),Q(c,V=>{V.length===v.value&&a("finish",V.join(""))},{deep:!0}),Q(m,V=>{V<0||Te(()=>{var w;(w=h.value[V])==null||w.select()})}),W(()=>{var $;const[V,w]=ln(t);return s("div",z({class:["v-otp-input",{"v-otp-input--divided":!!e.divider},e.class],style:[e.style]},V),[s("div",{ref:b,class:"v-otp-input__content",style:[o.value]},[f.value.map((p,I)=>s(ae,null,[e.divider&&I!==0&&s("span",{class:"v-otp-input__divider"},[e.divider]),s(na,{focused:i.value&&e.focusAll||m.value===I,key:I},{...l,loader:void 0,default:()=>s("input",{ref:A=>h.value[I]=A,"aria-label":d(e.label,I+1),autofocus:I===0&&e.autofocus,autocomplete:"one-time-code",class:["v-otp-input__field"],disabled:e.disabled,inputmode:e.type==="number"?"numeric":"text",min:e.type==="number"?0:void 0,maxlength:"1",placeholder:e.placeholder,type:e.type==="number"?"text":e.type,value:c.value[I],onInput:k,onFocus:A=>x(A,I),onBlur:_,onKeydown:S,onPaste:A=>C(I,A)},null)})])),s("input",z({class:"v-otp-input-input",type:"hidden"},w,{value:c.value.join("")}),null),s(Rt,{contained:!0,"content-class":"v-otp-input__loader","model-value":!!e.loading,persistent:!0},{default:()=>{var p;return[((p=l.loader)==null?void 0:p.call(l))??s(Kn,{color:typeof e.loading=="boolean"?void 0:e.loading,indeterminate:!0,size:"24",width:"2"},null)]}}),($=l.default)==null?void 0:$.call(l)])])}),{blur:()=>{var V;(V=h.value)==null||V.some(w=>w.blur())},focus:()=>{var V;(V=h.value)==null||V[0].focus()},reset:P,isFocused:i}}});function GV(e){return Math.floor(Math.abs(e))*Math.sign(e)}const YV=B({scale:{type:[Number,String],default:.5},...ie()},"VParallax"),UV=R()({name:"VParallax",props:YV(),setup(e,n){let{slots:t}=n;const{intersectionRef:a,isIntersecting:l}=fl(),{resizeRef:o,contentRect:i}=Lt(),{height:r}=$t(),u=H();He(()=>{var m;a.value=o.value=(m=u.value)==null?void 0:m.$el});let c;Q(l,m=>{m?(c=ni(a.value),c=c===document.scrollingElement?document:c,c.addEventListener("scroll",f,{passive:!0}),f()):c.removeEventListener("scroll",f)}),it(()=>{c==null||c.removeEventListener("scroll",f)}),Q(r,f),Q(()=>{var m;return(m=i.value)==null?void 0:m.height},f);const d=y(()=>1-Xe(+e.scale));let v=-1;function f(){l.value&&(cancelAnimationFrame(v),v=requestAnimationFrame(()=>{var x;const m=((x=u.value)==null?void 0:x.$el).querySelector(".v-img__img");if(!m)return;const b=c instanceof Document?document.documentElement.clientHeight:c.clientHeight,h=c instanceof Document?window.scrollY:c.scrollTop,g=a.value.getBoundingClientRect().top+h,k=i.value.height,S=g+(k-b)/2,C=GV((h-S)*d.value),P=Math.max(1,(d.value*(b-k)+k)/k);m.style.setProperty("transform",`translateY(${C}px) scale(${P})`)}))}return W(()=>s(Yt,{class:["v-parallax",{"v-parallax--active":l.value},e.class],style:e.style,ref:u,cover:!0,onLoadstart:f,onLoad:f},t)),{}}}),KV=B({...yl({falseIcon:"$radioOff",trueIcon:"$radioOn"})},"VRadio"),qV=R()({name:"VRadio",props:KV(),setup(e,n){let{slots:t}=n;return W(()=>{const a=tn.filterProps(e);return s(tn,z(a,{class:["v-radio",e.class],style:e.style,type:"radio"}),t)}),{}}}),XV=B({height:{type:[Number,String],default:"auto"},...Qt(),...Je(fi(),["multiple"]),trueIcon:{type:ve,default:"$radioOn"},falseIcon:{type:ve,default:"$radioOff"},type:{type:String,default:"radio"}},"VRadioGroup"),ZV=R()({name:"VRadioGroup",inheritAttrs:!1,props:XV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const l=rt(),o=y(()=>e.id||`radio-group-${l}`),i=de(e,"modelValue");return W(()=>{const[r,u]=ln(t),c=ct.filterProps(e),d=tn.filterProps(e),v=a.label?a.label({label:e.label,props:{for:o.value}}):e.label;return s(ct,z({class:["v-radio-group",e.class],style:e.style},r,c,{modelValue:i.value,"onUpdate:modelValue":f=>i.value=f,id:o.value}),{...a,default:f=>{let{id:m,messagesId:b,isDisabled:h,isReadonly:g}=f;return s(ae,null,[v&&s(ea,{id:m.value},{default:()=>[v]}),s(hu,z(d,{id:m.value,"aria-describedby":b.value,defaultsTarget:"VRadio",trueIcon:e.trueIcon,falseIcon:e.falseIcon,type:e.type,disabled:h.value,readonly:g.value,"aria-labelledby":v?m.value:void 0,multiple:!1},u,{modelValue:i.value,"onUpdate:modelValue":k=>i.value=k}),a)])}})}),{}}}),JV=B({...pa(),...Qt(),...dc(),strict:Boolean,modelValue:{type:Array,default:()=>[0,0]}},"VRangeSlider"),QV=R()({name:"VRangeSlider",props:JV(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,end:e=>!0,start:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=H(),o=H(),i=H(),{rtlClasses:r}=nt();function u($){if(!l.value||!o.value)return;const p=Co($,l.value.$el,e.direction),I=Co($,o.value.$el,e.direction),A=Math.abs(p),M=Math.abs(I);return A$!=null&&$.length?$.map(p=>c.roundValue(p)):[0,0]),{activeThumbRef:v,hasLabels:f,max:m,min:b,mousePressed:h,onSliderMousedown:g,onSliderTouchstart:k,position:S,trackContainerRef:C,readonly:P}=fc({props:e,steps:c,onSliderStart:()=>{a("start",d.value)},onSliderEnd:$=>{var A;let{value:p}=$;const I=v.value===((A=l.value)==null?void 0:A.$el)?[p,d.value[1]]:[d.value[0],p];!e.strict&&I[0]{var M,j,Y,le;let{value:p}=$;const[I,A]=d.value;!e.strict&&I===A&&I!==b.value&&(v.value=p>I?(M=o.value)==null?void 0:M.$el:(j=l.value)==null?void 0:j.$el,(Y=v.value)==null||Y.focus()),v.value===((le=l.value)==null?void 0:le.$el)?d.value=[Math.min(p,A),A]:d.value=[I,Math.max(I,p)]},getActiveThumb:u}),{isFocused:x,focus:_,blur:T}=Jt(e),V=y(()=>S(d.value[0])),w=y(()=>S(d.value[1]));return W(()=>{const $=ct.filterProps(e),p=!!(e.label||t.label||t.prepend);return s(ct,z({class:["v-slider","v-range-slider",{"v-slider--has-labels":!!t["tick-label"]||f.value,"v-slider--focused":x.value,"v-slider--pressed":h.value,"v-slider--disabled":e.disabled},r.value,e.class],style:e.style,ref:i},$,{focused:x.value}),{...t,prepend:p?I=>{var A,M;return s(ae,null,[((A=t.label)==null?void 0:A.call(t,I))??(e.label?s(ea,{class:"v-slider__label",text:e.label},null):void 0),(M=t.prepend)==null?void 0:M.call(t,I)])}:void 0,default:I=>{var j,Y;let{id:A,messagesId:M}=I;return s("div",{class:"v-slider__container",onMousedown:P.value?void 0:g,onTouchstartPassive:P.value?void 0:k},[s("input",{id:`${A.value}_start`,name:e.name||A.value,disabled:!!e.disabled,readonly:!!e.readonly,tabindex:"-1",value:d.value[0]},null),s("input",{id:`${A.value}_stop`,name:e.name||A.value,disabled:!!e.disabled,readonly:!!e.readonly,tabindex:"-1",value:d.value[1]},null),s(mc,{ref:C,start:V.value,stop:w.value},{"tick-label":t["tick-label"]}),s(po,{ref:l,"aria-describedby":M.value,focused:x&&v.value===((j=l.value)==null?void 0:j.$el),modelValue:d.value[0],"onUpdate:modelValue":le=>d.value=[le,d.value[1]],onFocus:le=>{var re,N,E,O;_(),v.value=(re=l.value)==null?void 0:re.$el,d.value[0]===d.value[1]&&d.value[1]===b.value&&le.relatedTarget!==((N=o.value)==null?void 0:N.$el)&&((E=l.value)==null||E.$el.blur(),(O=o.value)==null||O.$el.focus())},onBlur:()=>{T(),v.value=void 0},min:b.value,max:d.value[1],position:V.value,ripple:e.ripple},{"thumb-label":t["thumb-label"]}),s(po,{ref:o,"aria-describedby":M.value,focused:x&&v.value===((Y=o.value)==null?void 0:Y.$el),modelValue:d.value[1],"onUpdate:modelValue":le=>d.value=[d.value[0],le],onFocus:le=>{var re,N,E,O;_(),v.value=(re=o.value)==null?void 0:re.$el,d.value[0]===d.value[1]&&d.value[0]===m.value&&le.relatedTarget!==((N=l.value)==null?void 0:N.$el)&&((E=o.value)==null||E.$el.blur(),(O=l.value)==null||O.$el.focus())},onBlur:()=>{T(),v.value=void 0},min:d.value[0],max:m.value,position:w.value,ripple:e.ripple},{"thumb-label":t["thumb-label"]})])}})}),{}}}),e1=B({name:String,itemAriaLabel:{type:String,default:"$vuetify.rating.ariaLabel.item"},activeColor:String,color:String,clearable:Boolean,disabled:Boolean,emptyIcon:{type:ve,default:"$ratingEmpty"},fullIcon:{type:ve,default:"$ratingFull"},halfIncrements:Boolean,hover:Boolean,length:{type:[Number,String],default:5},readonly:Boolean,modelValue:{type:[Number,String],default:0},itemLabels:Array,itemLabelPosition:{type:String,default:"top",validator:e=>["top","bottom"].includes(e)},ripple:Boolean,...ie(),...lt(),...jt(),...Ve(),...Pe()},"VRating"),t1=R()({name:"VRating",props:e1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{t:a}=qe(),{themeClasses:l}=De(e),o=de(e,"modelValue"),i=y(()=>Xe(parseFloat(o.value),0,+e.length)),r=y(()=>Ot(Number(e.length),1)),u=y(()=>r.value.flatMap(h=>e.halfIncrements?[h-.5,h]:[h])),c=ee(-1),d=y(()=>u.value.map(h=>{const g=e.hover&&c.value>-1,k=i.value>=h,S=c.value>=h,P=(g?S:k)?e.fullIcon:e.emptyIcon,x=e.activeColor??e.color,_=k||S?x:e.color;return{isFilled:k,isHovered:S,icon:P,color:_}})),v=y(()=>[0,...u.value].map(h=>{function g(){c.value=h}function k(){c.value=-1}function S(){e.disabled||e.readonly||(o.value=i.value===h&&e.clearable?0:h)}return{onMouseenter:e.hover?g:void 0,onMouseleave:e.hover?k:void 0,onClick:S}})),f=y(()=>e.name??`v-rating-${rt()}`);function m(h){var V,w;let{value:g,index:k,showStar:S=!0}=h;const{onMouseenter:C,onMouseleave:P,onClick:x}=v.value[k+1],_=`${f.value}-${String(g).replace(".","-")}`,T={color:(V=d.value[k])==null?void 0:V.color,density:e.density,disabled:e.disabled,icon:(w=d.value[k])==null?void 0:w.icon,ripple:e.ripple,size:e.size,variant:"plain"};return s(ae,null,[s("label",{for:_,class:{"v-rating__item--half":e.halfIncrements&&g%1>0,"v-rating__item--full":e.halfIncrements&&g%1===0},onMouseenter:C,onMouseleave:P,onClick:x},[s("span",{class:"v-rating__hidden"},[a(e.itemAriaLabel,g,e.length)]),S?t.item?t.item({...d.value[k],props:T,value:g,index:k,rating:i.value}):s(Ae,z({"aria-label":a(e.itemAriaLabel,g,e.length)},T),null):void 0]),s("input",{class:"v-rating__hidden",name:f.value,id:_,type:"radio",value:g,checked:i.value===g,tabindex:-1,readonly:e.readonly,disabled:e.disabled},null)])}function b(h){return t["item-label"]?t["item-label"](h):h.label?s("span",null,[h.label]):s("span",null,[bt(" ")])}return W(()=>{var g;const h=!!((g=e.itemLabels)!=null&&g.length)||t["item-label"];return s(e.tag,{class:["v-rating",{"v-rating--hover":e.hover,"v-rating--readonly":e.readonly},l.value,e.class],style:e.style},{default:()=>[s(m,{value:0,index:-1,showStar:!1},null),r.value.map((k,S)=>{var C,P;return s("div",{class:"v-rating__wrapper"},[h&&e.itemLabelPosition==="top"?b({value:k,index:S,label:(C=e.itemLabels)==null?void 0:C[S]}):void 0,s("div",{class:"v-rating__item"},[e.halfIncrements?s(ae,null,[s(m,{value:k-.5,index:S*2},null),s(m,{value:k,index:S*2+1},null)]):s(m,{value:k,index:S},null)]),h&&e.itemLabelPosition==="bottom"?b({value:k,index:S,label:(P=e.itemLabels)==null?void 0:P[S]}):void 0])})]})}),{}}}),n1={actions:"button@2",article:"heading, paragraph",avatar:"avatar",button:"button",card:"image, heading","card-avatar":"image, list-item-avatar",chip:"chip","date-picker":"list-item, heading, divider, date-picker-options, date-picker-days, actions","date-picker-options":"text, avatar@2","date-picker-days":"avatar@28",divider:"divider",heading:"heading",image:"image","list-item":"text","list-item-avatar":"avatar, text","list-item-two-line":"sentences","list-item-avatar-two-line":"avatar, sentences","list-item-three-line":"paragraph","list-item-avatar-three-line":"avatar, paragraph",ossein:"ossein",paragraph:"text@3",sentences:"text@2",subtitle:"text",table:"table-heading, table-thead, table-tbody, table-tfoot","table-heading":"chip, text","table-thead":"heading@6","table-tbody":"table-row-divider@6","table-row-divider":"table-row, divider","table-row":"text@6","table-tfoot":"text@2, avatar@2",text:"text"};function a1(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return s("div",{class:["v-skeleton-loader__bone",`v-skeleton-loader__${e}`]},[n])}function jr(e){const[n,t]=e.split("@");return Array.from({length:t}).map(()=>Ml(n))}function Ml(e){let n=[];if(!e)return n;const t=n1[e];if(e!==t){if(e.includes(","))return Gr(e);if(e.includes("@"))return jr(e);t.includes(",")?n=Gr(t):t.includes("@")?n=jr(t):t&&n.push(Ml(t))}return[a1(e,n)]}function Gr(e){return e.replace(/\s/g,"").split(",").map(Ml)}const l1=B({boilerplate:Boolean,color:String,loading:Boolean,loadingText:{type:String,default:"$vuetify.loading"},type:{type:[String,Array],default:"ossein"},...Qe(),...at(),...Pe()},"VSkeletonLoader"),o1=R()({name:"VSkeletonLoader",props:l1(),setup(e,n){let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(F(e,"color")),{dimensionStyles:o}=et(e),{elevationClasses:i}=st(e),{themeClasses:r}=De(e),{t:u}=qe(),c=y(()=>Ml(We(e.type).join(",")));return W(()=>{var f;const d=!t.default||e.loading,v=e.boilerplate||!d?{}:{ariaLive:"polite",ariaLabel:u(e.loadingText),role:"alert"};return s("div",z({class:["v-skeleton-loader",{"v-skeleton-loader--boilerplate":e.boilerplate},r.value,a.value,i.value],style:[l.value,d?o.value:{}]},v),[d?c.value:(f=t.default)==null?void 0:f.call(t)])}),{}}}),i1=R()({name:"VSlideGroupItem",props:Ln(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const a=Mn(e,xu);return()=>{var l;return(l=t.default)==null?void 0:l.call(t,{isSelected:a.isSelected.value,select:a.select,toggle:a.toggle,selectedClass:a.selectedClass.value})}}});function r1(e){const n=ee(e());let t=-1;function a(){clearInterval(t)}function l(){a(),Te(()=>n.value=e())}function o(i){const r=i?getComputedStyle(i):{transitionDuration:.2},u=parseFloat(r.transitionDuration)*1e3||200;if(a(),n.value<=0)return;const c=performance.now();t=window.setInterval(()=>{const d=performance.now()-c+u;n.value=Math.max(e()-d,0),n.value<=0&&a()},u)}return mt(a),{clear:a,time:n,start:o,reset:l}}const s1=B({multiLine:Boolean,text:String,timer:[Boolean,String],timeout:{type:[Number,String],default:5e3},vertical:Boolean,...Xt({location:"bottom"}),...Jn(),...ze(),...Tt(),...Pe(),...Je(_a({transition:"v-snackbar-transition"}),["persistent","noClickAnimation","scrim","scrollStrategy"])},"VSnackbar"),u1=R()({name:"VSnackbar",props:s1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{positionClasses:l}=Qn(e),{scopeId:o}=Fn(),{themeClasses:i}=De(e),{colorClasses:r,colorStyles:u,variantClasses:c}=Bn(e),{roundedClasses:d}=Ue(e),v=r1(()=>Number(e.timeout)),f=H(),m=H(),b=ee(!1),h=ee(0),g=H(),k=xe(sa,void 0);yt(()=>!!k,()=>{const p=Us();He(()=>{g.value=p.mainStyles.value})}),Q(a,C),Q(()=>e.timeout,C),Ke(()=>{a.value&&C()});let S=-1;function C(){v.reset(),window.clearTimeout(S);const p=Number(e.timeout);if(!a.value||p===-1)return;const I=Ko(m.value);v.start(I),S=window.setTimeout(()=>{a.value=!1},p)}function P(){v.reset(),window.clearTimeout(S)}function x(){b.value=!0,P()}function _(){b.value=!1,C()}function T(p){h.value=p.touches[0].clientY}function V(p){Math.abs(h.value-p.changedTouches[0].clientY)>50&&(a.value=!1)}function w(){b.value&&_()}const $=y(()=>e.location.split(" ").reduce((p,I)=>(p[`v-snackbar--${I}`]=!0,p),{}));return W(()=>{const p=Rt.filterProps(e),I=!!(t.default||t.text||e.text);return s(Rt,z({ref:f,class:["v-snackbar",{"v-snackbar--active":a.value,"v-snackbar--multi-line":e.multiLine&&!e.vertical,"v-snackbar--timer":!!e.timer,"v-snackbar--vertical":e.vertical},$.value,l.value,e.class],style:[g.value,e.style]},p,{modelValue:a.value,"onUpdate:modelValue":A=>a.value=A,contentProps:z({class:["v-snackbar__wrapper",i.value,r.value,d.value,c.value],style:[u.value],onPointerenter:x,onPointerleave:_},p.contentProps),persistent:!0,noClickAnimation:!0,scrim:!1,scrollStrategy:"none",_disableGlobalStack:!0,onTouchstartPassive:T,onTouchend:V,onAfterLeave:w},o),{default:()=>{var A,M;return[on(!1,"v-snackbar"),e.timer&&!b.value&&s("div",{key:"timer",class:"v-snackbar__timer"},[s(ml,{ref:m,color:typeof e.timer=="string"?e.timer:"info",max:e.timeout,"model-value":v.time.value},null)]),I&&s("div",{key:"content",class:"v-snackbar__content",role:"status","aria-live":"polite"},[((A=t.text)==null?void 0:A.call(t))??e.text,(M=t.default)==null?void 0:M.call(t)]),t.actions&&s(pe,{defaults:{VBtn:{variant:"text",ripple:!1,slim:!0}}},{default:()=>[s("div",{class:"v-snackbar__actions"},[t.actions({isActive:a})])]})]},activator:t.activator})}),At({},f)}}),ld=B({autoDraw:Boolean,autoDrawDuration:[Number,String],autoDrawEasing:{type:String,default:"ease"},color:String,gradient:{type:Array,default:()=>[]},gradientDirection:{type:String,validator:e=>["top","bottom","left","right"].includes(e),default:"top"},height:{type:[String,Number],default:75},labels:{type:Array,default:()=>[]},labelSize:{type:[Number,String],default:7},lineWidth:{type:[String,Number],default:4},id:String,itemValue:{type:String,default:"value"},modelValue:{type:Array,default:()=>[]},min:[String,Number],max:[String,Number],padding:{type:[String,Number],default:8},showLabels:Boolean,smooth:Boolean,width:{type:[Number,String],default:300}},"Line"),od=B({autoLineWidth:Boolean,...ld()},"VBarline"),Yr=R()({name:"VBarline",props:od(),setup(e,n){let{slots:t}=n;const a=rt(),l=y(()=>e.id||`barline-${a}`),o=y(()=>Number(e.autoDrawDuration)||500),i=y(()=>!!(e.showLabels||e.labels.length>0||t!=null&&t.label)),r=y(()=>parseFloat(e.lineWidth)||4),u=y(()=>Math.max(e.modelValue.length*r.value,Number(e.width))),c=y(()=>({minX:0,maxX:u.value,minY:0,maxY:parseInt(e.height,10)})),d=y(()=>e.modelValue.map(h=>tt(h,e.itemValue,h)));function v(h,g){const{minX:k,maxX:S,minY:C,maxY:P}=g,x=h.length;let _=e.max!=null?Number(e.max):Math.max(...h),T=e.min!=null?Number(e.min):Math.min(...h);T>0&&e.min==null&&(T=0),_<0&&e.max==null&&(_=0);const V=S/x,w=(P-C)/(_-T||1),$=P-Math.abs(T*w);return h.map((p,I)=>{const A=Math.abs(w*p);return{x:k+I*V,y:$-A+ +(p<0)*A,height:A,value:p}})}const f=y(()=>{const h=[],g=v(d.value,c.value),k=g.length;for(let S=0;h.lengthv(d.value,c.value)),b=y(()=>(Math.abs(m.value[0].x-m.value[1].x)-r.value)/2);W(()=>{const h=e.gradient.slice().length?e.gradient.slice().reverse():[""];return s("svg",{display:"block"},[s("defs",null,[s("linearGradient",{id:l.value,gradientUnits:"userSpaceOnUse",x1:e.gradientDirection==="left"?"100%":"0",y1:e.gradientDirection==="top"?"100%":"0",x2:e.gradientDirection==="right"?"100%":"0",y2:e.gradientDirection==="bottom"?"100%":"0"},[h.map((g,k)=>s("stop",{offset:k/Math.max(h.length-1,1),"stop-color":g||"currentColor"},null))])]),s("clipPath",{id:`${l.value}-clip`},[m.value.map(g=>s("rect",{x:g.x+b.value,y:g.y,width:r.value,height:g.height,rx:typeof e.smooth=="number"?e.smooth:e.smooth?2:0,ry:typeof e.smooth=="number"?e.smooth:e.smooth?2:0},[e.autoDraw&&s(ae,null,[s("animate",{attributeName:"y",from:g.y+g.height,to:g.y,dur:`${o.value}ms`,fill:"freeze"},null),s("animate",{attributeName:"height",from:"0",to:g.height,dur:`${o.value}ms`,fill:"freeze"},null)])]))]),i.value&&s("g",{key:"labels",style:{textAnchor:"middle",dominantBaseline:"mathematical",fill:"currentColor"}},[f.value.map((g,k)=>{var S;return s("text",{x:g.x+b.value+r.value/2,y:parseInt(e.height,10)-2+(parseInt(e.labelSize,10)||7*.75),"font-size":Number(e.labelSize)||7},[((S=t.label)==null?void 0:S.call(t,{index:k,value:g.value}))??g.value])})]),s("g",{"clip-path":`url(#${l.value}-clip)`,fill:`url(#${l.value})`},[s("rect",{x:0,y:0,width:Math.max(e.modelValue.length*r.value,Number(e.width)),height:e.height},null)])])})}});function c1(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:75;if(e.length===0)return"";const l=e.shift(),o=e[e.length-1];return(t?`M${l.x} ${a-l.x+2} L${l.x} ${l.y}`:`M${l.x} ${l.y}`)+e.map((i,r)=>{const u=e[r+1],c=e[r-1]||l,d=u&&d1(u,i,c);if(!u||d)return`L${i.x} ${i.y}`;const v=Math.min(Ur(c,i),Ur(u,i)),m=v/2e.id||`trendline-${a}`),o=y(()=>Number(e.autoDrawDuration)||(e.fill?500:2e3)),i=H(0),r=H(null);function u(g,k){const{minX:S,maxX:C,minY:P,maxY:x}=k,_=g.length,T=e.max!=null?Number(e.max):Math.max(...g),V=e.min!=null?Number(e.min):Math.min(...g),w=(C-S)/(_-1),$=(x-P)/(T-V||1);return g.map((p,I)=>({x:S+I*w,y:x-(p-V)*$,value:p}))}const c=y(()=>!!(e.showLabels||e.labels.length>0||t!=null&&t.label)),d=y(()=>parseFloat(e.lineWidth)||4),v=y(()=>Number(e.width)),f=y(()=>{const g=Number(e.padding);return{minX:g,maxX:v.value-g,minY:g,maxY:parseInt(e.height,10)-g}}),m=y(()=>e.modelValue.map(g=>tt(g,e.itemValue,g))),b=y(()=>{const g=[],k=u(m.value,f.value),S=k.length;for(let C=0;g.lengthe.modelValue,async()=>{if(await Te(),!e.autoDraw||!r.value)return;const g=r.value,k=g.getTotalLength();e.fill?(g.style.transformOrigin="bottom center",g.style.transition="none",g.style.transform="scaleY(0)",g.getBoundingClientRect(),g.style.transition=`transform ${o.value}ms ${e.autoDrawEasing}`,g.style.transform="scaleY(1)"):(g.style.strokeDasharray=`${k}`,g.style.strokeDashoffset=`${k}`,g.getBoundingClientRect(),g.style.transition=`stroke-dashoffset ${o.value}ms ${e.autoDrawEasing}`,g.style.strokeDashoffset="0"),i.value=k},{immediate:!0});function h(g){return c1(u(m.value,f.value),e.smooth?8:Number(e.smooth),g,parseInt(e.height,10))}W(()=>{var k;const g=e.gradient.slice().length?e.gradient.slice().reverse():[""];return s("svg",{display:"block","stroke-width":parseFloat(e.lineWidth)??4},[s("defs",null,[s("linearGradient",{id:l.value,gradientUnits:"userSpaceOnUse",x1:e.gradientDirection==="left"?"100%":"0",y1:e.gradientDirection==="top"?"100%":"0",x2:e.gradientDirection==="right"?"100%":"0",y2:e.gradientDirection==="bottom"?"100%":"0"},[g.map((S,C)=>s("stop",{offset:C/Math.max(g.length-1,1),"stop-color":S||"currentColor"},null))])]),c.value&&s("g",{key:"labels",style:{textAnchor:"middle",dominantBaseline:"mathematical",fill:"currentColor"}},[b.value.map((S,C)=>{var P;return s("text",{x:S.x+d.value/2+d.value/2,y:parseInt(e.height,10)-4+(parseInt(e.labelSize,10)||7*.75),"font-size":Number(e.labelSize)||7},[((P=t.label)==null?void 0:P.call(t,{index:C,value:S.value}))??S.value])})]),s("path",{ref:r,d:h(e.fill),fill:e.fill?`url(#${l.value})`:"none",stroke:e.fill?"none":`url(#${l.value})`},null),e.fill&&s("path",{d:h(!1),fill:"none",stroke:e.color??((k=e.gradient)==null?void 0:k[0])},null)])})}}),v1=B({type:{type:String,default:"trend"},...od(),...id()},"VSparkline"),f1=R()({name:"VSparkline",props:v1(),setup(e,n){let{slots:t}=n;const{textColorClasses:a,textColorStyles:l}=ut(F(e,"color")),o=y(()=>!!(e.showLabels||e.labels.length>0||t!=null&&t.label)),i=y(()=>{let r=parseInt(e.height,10);return o.value&&(r+=parseInt(e.labelSize,10)*1.5),r});W(()=>{const r=e.type==="trend"?qr:Yr,u=e.type==="trend"?qr.filterProps(e):Yr.filterProps(e);return s(r,z({key:e.type,class:a.value,style:l.value,viewBox:`0 0 ${e.width} ${parseInt(i.value,10)}`},u),t)})}}),m1=B({...ie(),...Ku({offset:8,minWidth:0,openDelay:0,closeDelay:100,location:"top center",transition:"scale-transition"})},"VSpeedDial"),g1=R()({name:"VSpeedDial",props:m1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),l=H(),o=y(()=>{var c;const[r,u="center"]=((c=e.location)==null?void 0:c.split(" "))??[];return`${r} ${u}`}),i=y(()=>({[`v-speed-dial__content--${o.value.replace(" ","-")}`]:!0}));return W(()=>{const r=qn.filterProps(e);return s(qn,z(r,{modelValue:a.value,"onUpdate:modelValue":u=>a.value=u,class:e.class,style:e.style,contentClass:["v-speed-dial__content",i.value,e.contentClass],location:o.value,ref:l,transition:"fade-transition"}),{...t,default:u=>s(pe,{defaults:{VBtn:{size:"small"}}},{default:()=>[s(ft,{appear:!0,group:!0,transition:e.transition},{default:()=>{var c;return[(c=t.default)==null?void 0:c.call(t,u)]}})]})})}),{}}}),zi=Symbol.for("vuetify:v-stepper"),rd=B({color:String,disabled:{type:[Boolean,String],default:!1},prevText:{type:String,default:"$vuetify.stepper.prev"},nextText:{type:String,default:"$vuetify.stepper.next"}},"VStepperActions"),sd=R()({name:"VStepperActions",props:rd(),emits:{"click:prev":()=>!0,"click:next":()=>!0},setup(e,n){let{emit:t,slots:a}=n;const{t:l}=qe();function o(){t("click:prev")}function i(){t("click:next")}return W(()=>{const r={onClick:o},u={onClick:i};return s("div",{class:"v-stepper-actions"},[s(pe,{defaults:{VBtn:{disabled:["prev",!0].includes(e.disabled),text:l(e.prevText),variant:"text"}}},{default:()=>{var c;return[((c=a.prev)==null?void 0:c.call(a,{props:r}))??s(Ae,r,null)]}}),s(pe,{defaults:{VBtn:{color:e.color,disabled:["next",!0].includes(e.disabled),text:l(e.nextText),variant:"tonal"}}},{default:()=>{var c;return[((c=a.next)==null?void 0:c.call(a,{props:u}))??s(Ae,u,null)]}})])}),{}}}),ud=Wt("v-stepper-header"),h1=B({color:String,title:String,subtitle:String,complete:Boolean,completeIcon:{type:ve,default:"$complete"},editable:Boolean,editIcon:{type:ve,default:"$edit"},error:Boolean,errorIcon:{type:ve,default:"$error"},icon:ve,ripple:{type:[Boolean,Object],default:!0},rules:{type:Array,default:()=>[]}},"StepperItem"),y1=B({...h1(),...Ln()},"VStepperItem"),cd=R()({name:"VStepperItem",directives:{Ripple:Zt},props:y1(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const a=Mn(e,zi,!0),l=y(()=>(a==null?void 0:a.value.value)??e.value),o=y(()=>e.rules.every(f=>f()===!0)),i=y(()=>!e.disabled&&e.editable),r=y(()=>!e.disabled&&e.editable),u=y(()=>e.error||!o.value),c=y(()=>e.complete||e.rules.length>0&&o.value),d=y(()=>u.value?e.errorIcon:c.value?e.completeIcon:a.isSelected.value&&e.editable?e.editIcon:e.icon),v=y(()=>({canEdit:r.value,hasError:u.value,hasCompleted:c.value,title:e.title,subtitle:e.subtitle,step:l.value,value:e.value}));return W(()=>{var g,k,S;const f=(!a||a.isSelected.value||c.value||r.value)&&!u.value&&!e.disabled,m=!!(e.title!=null||t.title),b=!!(e.subtitle!=null||t.subtitle);function h(){a==null||a.toggle()}return je(s("button",{class:["v-stepper-item",{"v-stepper-item--complete":c.value,"v-stepper-item--disabled":e.disabled,"v-stepper-item--error":u.value},a==null?void 0:a.selectedClass.value],disabled:!e.editable,onClick:h},[i.value&&on(!0,"v-stepper-item"),s(It,{key:"stepper-avatar",class:"v-stepper-item__avatar",color:f?e.color:void 0,size:24},{default:()=>{var C;return[((C=t.icon)==null?void 0:C.call(t,v.value))??(d.value?s(Be,{icon:d.value},null):l.value)]}}),s("div",{class:"v-stepper-item__content"},[m&&s("div",{key:"title",class:"v-stepper-item__title"},[((g=t.title)==null?void 0:g.call(t,v.value))??e.title]),b&&s("div",{key:"subtitle",class:"v-stepper-item__subtitle"},[((k=t.subtitle)==null?void 0:k.call(t,v.value))??e.subtitle]),(S=t.default)==null?void 0:S.call(t,v.value)])]),[[Ct("ripple"),e.ripple&&e.editable,null]])}),{}}}),b1=B({...Je(Cl(),["continuous","nextIcon","prevIcon","showArrows","touch","mandatory"])},"VStepperWindow"),dd=R()({name:"VStepperWindow",props:b1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=xe(zi,null),l=de(e,"modelValue"),o=y({get(){var i;return l.value!=null||!a?l.value:(i=a.items.value.find(r=>a.selected.value.includes(r.id)))==null?void 0:i.value},set(i){l.value=i}});return W(()=>{const i=wn.filterProps(e);return s(wn,z({_as:"VStepperWindow"},i,{modelValue:o.value,"onUpdate:modelValue":r=>o.value=r,class:["v-stepper-window",e.class],style:e.style,mandatory:!1,touch:!1}),t)}),{}}}),k1=B({...pl()},"VStepperWindowItem"),vd=R()({name:"VStepperWindowItem",props:k1(),setup(e,n){let{slots:t}=n;return W(()=>{const a=Vn.filterProps(e);return s(Vn,z({_as:"VStepperWindowItem"},a,{class:["v-stepper-window-item",e.class],style:e.style}),t)}),{}}}),S1=B({altLabels:Boolean,bgColor:String,completeIcon:ve,editIcon:ve,editable:Boolean,errorIcon:ve,hideActions:Boolean,items:{type:Array,default:()=>[]},itemTitle:{type:String,default:"title"},itemValue:{type:String,default:"value"},nonLinear:Boolean,flat:Boolean,...In()},"Stepper"),w1=B({...S1(),...Dn({mandatory:"force",selectedClass:"v-stepper-item--selected"}),...xl(),...ll(rd(),["prevText","nextText"])},"VStepper"),V1=R()({name:"VStepper",props:w1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{items:a,next:l,prev:o,selected:i}=rn(e,zi),{displayClasses:r,mobile:u}=$t(e),{completeIcon:c,editIcon:d,errorIcon:v,color:f,editable:m,prevText:b,nextText:h}=Pn(e),g=y(()=>e.items.map((C,P)=>{const x=tt(C,e.itemTitle,C),_=tt(C,e.itemValue,P+1);return{title:x,value:_,raw:C}})),k=y(()=>a.value.findIndex(C=>i.value.includes(C.id))),S=y(()=>e.disabled?e.disabled:k.value===0?"prev":k.value===a.value.length-1?"next":!1);return Ge({VStepperItem:{editable:m,errorIcon:v,completeIcon:c,editIcon:d,prevText:b,nextText:h},VStepperActions:{color:f,disabled:S,prevText:b,nextText:h}}),W(()=>{const C=Cn.filterProps(e),P=!!(t.header||e.items.length),x=e.items.length>0,_=!e.hideActions&&!!(x||t.actions);return s(Cn,z(C,{color:e.bgColor,class:["v-stepper",{"v-stepper--alt-labels":e.altLabels,"v-stepper--flat":e.flat,"v-stepper--non-linear":e.nonLinear,"v-stepper--mobile":u.value},r.value,e.class],style:e.style}),{default:()=>{var T,V;return[P&&s(ud,{key:"stepper-header"},{default:()=>[g.value.map((w,$)=>{let{raw:p,...I}=w;return s(ae,null,[!!$&&s(xa,null,null),s(cd,I,{default:t[`header-item.${I.value}`]??t.header,icon:t.icon,title:t.title,subtitle:t.subtitle})])})]}),x&&s(dd,{key:"stepper-window"},{default:()=>[g.value.map(w=>s(vd,{value:w.value},{default:()=>{var $,p;return(($=t[`item.${w.value}`])==null?void 0:$.call(t,w))??((p=t.item)==null?void 0:p.call(t,w))}}))]}),(T=t.default)==null?void 0:T.call(t,{prev:o,next:l}),_&&(((V=t.actions)==null?void 0:V.call(t,{next:l,prev:o}))??s(sd,{key:"stepper-actions","onClick:prev":o,"onClick:next":l},t))]}})}),{prev:o,next:l}}}),C1=B({indeterminate:Boolean,inset:Boolean,flat:Boolean,loading:{type:[Boolean,String],default:!1},...Qt(),...yl()},"VSwitch"),p1=R()({name:"VSwitch",inheritAttrs:!1,props:C1(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const l=de(e,"indeterminate"),o=de(e,"modelValue"),{loaderClasses:i}=Sa(e),{isFocused:r,focus:u,blur:c}=Jt(e),d=H(),v=$e&&window.matchMedia("(forced-colors: active)").matches,f=y(()=>typeof e.loading=="string"&&e.loading!==""?e.loading:e.color),m=rt(),b=y(()=>e.id||`switch-${m}`);function h(){l.value&&(l.value=!1)}function g(k){var S,C;k.stopPropagation(),k.preventDefault(),(C=(S=d.value)==null?void 0:S.input)==null||C.click()}return W(()=>{const[k,S]=ln(t),C=ct.filterProps(e),P=tn.filterProps(e);return s(ct,z({class:["v-switch",{"v-switch--flat":e.flat},{"v-switch--inset":e.inset},{"v-switch--indeterminate":l.value},i.value,e.class]},k,C,{modelValue:o.value,"onUpdate:modelValue":x=>o.value=x,id:b.value,focused:r.value,style:e.style}),{...a,default:x=>{let{id:_,messagesId:T,isDisabled:V,isReadonly:w,isValid:$}=x;const p={model:o,isValid:$};return s(tn,z({ref:d},P,{modelValue:o.value,"onUpdate:modelValue":[I=>o.value=I,h],id:_.value,"aria-describedby":T.value,type:"checkbox","aria-checked":l.value?"mixed":void 0,disabled:V.value,readonly:w.value,onFocus:u,onBlur:c},S),{...a,default:I=>{let{backgroundColorClasses:A,backgroundColorStyles:M}=I;return s("div",{class:["v-switch__track",v?void 0:A.value],style:M.value,onClick:g},[a["track-true"]&&s("div",{key:"prepend",class:"v-switch__track-true"},[a["track-true"](p)]),a["track-false"]&&s("div",{key:"append",class:"v-switch__track-false"},[a["track-false"](p)])])},input:I=>{let{inputNode:A,icon:M,backgroundColorClasses:j,backgroundColorStyles:Y}=I;return s(ae,null,[A,s("div",{class:["v-switch__thumb",{"v-switch__thumb--filled":M||e.loading},e.inset||v?void 0:j.value],style:e.inset?void 0:Y.value},[a.thumb?s(pe,{defaults:{VIcon:{icon:M,size:"x-small"}}},{default:()=>[a.thumb({...p,icon:M})]}):s(si,null,{default:()=>[e.loading?s(wa,{name:"v-switch",active:!0,color:$.value===!1?void 0:f.value},{default:le=>a.loader?a.loader(le):s(Kn,{active:le.isActive,color:le.color,indeterminate:!0,size:"16",width:"2"},null)}):M&&s(Be,{key:String(M),icon:M,size:"x-small"},null)]})])])}})}})}),{}}}),x1=B({color:String,height:[Number,String],window:Boolean,...ie(),...at(),...$n(),...ze(),...Ve(),...Pe()},"VSystemBar"),_1=R()({name:"VSystemBar",props:x1(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{backgroundColorClasses:l,backgroundColorStyles:o}=Le(F(e,"color")),{elevationClasses:i}=st(e),{roundedClasses:r}=Ue(e),{ssrBootStyles:u}=An(),c=y(()=>e.height??(e.window?32:24)),{layoutItemStyles:d}=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:ee("top"),layoutSize:c,elementSize:c,active:y(()=>!0),absolute:F(e,"absolute")});return W(()=>s(e.tag,{class:["v-system-bar",{"v-system-bar--window":e.window},a.value,l.value,i.value,r.value,e.class],style:[o.value,d.value,u.value,e.style]},t)),{}}}),Wi=Symbol.for("vuetify:v-tabs"),P1=B({fixed:Boolean,sliderColor:String,hideSlider:Boolean,direction:{type:String,default:"horizontal"},...Je(hl({selectedClass:"v-tab--selected",variant:"text"}),["active","block","flat","location","position","symbol"])},"VTab"),fd=R()({name:"VTab",props:P1(),setup(e,n){let{slots:t,attrs:a}=n;const{textColorClasses:l,textColorStyles:o}=ut(e,"sliderColor"),i=H(),r=H(),u=y(()=>e.direction==="horizontal"),c=y(()=>{var v,f;return((f=(v=i.value)==null?void 0:v.group)==null?void 0:f.isSelected.value)??!1});function d(v){var m,b;let{value:f}=v;if(f){const h=(b=(m=i.value)==null?void 0:m.$el.parentElement)==null?void 0:b.querySelector(".v-tab--selected .v-tab__slider"),g=r.value;if(!h||!g)return;const k=getComputedStyle(h).color,S=h.getBoundingClientRect(),C=g.getBoundingClientRect(),P=u.value?"x":"y",x=u.value?"X":"Y",_=u.value?"right":"bottom",T=u.value?"width":"height",V=S[P],w=C[P],$=V>w?S[_]-C[_]:S[P]-C[P],p=Math.sign($)>0?u.value?"right":"bottom":Math.sign($)<0?u.value?"left":"top":"center",A=(Math.abs($)+(Math.sign($)<0?S[T]:C[T]))/Math.max(S[T],C[T])||0,M=S[T]/C[T]||0,j=1.5;fn(g,{backgroundColor:[k,"currentcolor"],transform:[`translate${x}(${$}px) scale${x}(${M})`,`translate${x}(${$/j}px) scale${x}(${(A-1)/j+1})`,"none"],transformOrigin:Array(3).fill(p)},{duration:225,easing:ia})}}return W(()=>{const v=Ae.filterProps(e);return s(Ae,z({symbol:Wi,ref:i,class:["v-tab",e.class],style:e.style,tabindex:c.value?0:-1,role:"tab","aria-selected":String(c.value),active:!1},v,a,{block:e.fixed,maxWidth:e.fixed?300:void 0,"onGroup:selected":d}),{...t,default:()=>{var f;return s(ae,null,[((f=t.default)==null?void 0:f.call(t))??e.text,!e.hideSlider&&s("div",{ref:r,class:["v-tab__slider",l.value],style:o.value},null)])}})}),At({},i)}}),I1=B({...Je(Cl(),["continuous","nextIcon","prevIcon","showArrows","touch","mandatory"])},"VTabsWindow"),md=R()({name:"VTabsWindow",props:I1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=xe(Wi,null),l=de(e,"modelValue"),o=y({get(){var i;return l.value!=null||!a?l.value:(i=a.items.value.find(r=>a.selected.value.includes(r.id)))==null?void 0:i.value},set(i){l.value=i}});return W(()=>{const i=wn.filterProps(e);return s(wn,z({_as:"VTabsWindow"},i,{modelValue:o.value,"onUpdate:modelValue":r=>o.value=r,class:["v-tabs-window",e.class],style:e.style,mandatory:!1,touch:!1}),t)}),{}}}),$1=B({...pl()},"VTabsWindowItem"),gd=R()({name:"VTabsWindowItem",props:$1(),setup(e,n){let{slots:t}=n;return W(()=>{const a=Vn.filterProps(e);return s(Vn,z({_as:"VTabsWindowItem"},a,{class:["v-tabs-window-item",e.class],style:e.style}),t)}),{}}});function T1(e){return e?e.map(n=>Uo(n)?n:{text:n,value:n}):[]}const A1=B({alignTabs:{type:String,default:"start"},color:String,fixedTabs:Boolean,items:{type:Array,default:()=>[]},stacked:Boolean,bgColor:String,grow:Boolean,height:{type:[Number,String],default:void 0},hideSlider:Boolean,sliderColor:String,...mi({mandatory:"force",selectedClass:"v-tab-item--selected"}),...lt(),...Ve()},"VTabs"),B1=R()({name:"VTabs",props:A1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const l=de(e,"modelValue"),o=y(()=>T1(e.items)),{densityClasses:i}=gt(e),{backgroundColorClasses:r,backgroundColorStyles:u}=Le(F(e,"bgColor")),{scopeId:c}=Fn();return Ge({VTab:{color:F(e,"color"),direction:F(e,"direction"),stacked:F(e,"stacked"),fixed:F(e,"fixedTabs"),sliderColor:F(e,"sliderColor"),hideSlider:F(e,"hideSlider")}}),W(()=>{const d=fa.filterProps(e),v=!!(a.window||e.items.length>0);return s(ae,null,[s(fa,z(d,{modelValue:l.value,"onUpdate:modelValue":f=>l.value=f,class:["v-tabs",`v-tabs--${e.direction}`,`v-tabs--align-tabs-${e.alignTabs}`,{"v-tabs--fixed-tabs":e.fixedTabs,"v-tabs--grow":e.grow,"v-tabs--stacked":e.stacked},i.value,r.value,e.class],style:[{"--v-tabs-height":ne(e.height)},u.value,e.style],role:"tablist",symbol:Wi},c,t),{default:()=>{var f;return[((f=a.default)==null?void 0:f.call(a))??o.value.map(m=>{var b;return((b=a.tab)==null?void 0:b.call(a,{item:m}))??s(fd,z(m,{key:m.text,value:m.value}),{default:a[`tab.${m.value}`]?()=>{var h;return(h=a[`tab.${m.value}`])==null?void 0:h.call(a,{item:m})}:void 0})})]}}),v&&s(md,z({modelValue:l.value,"onUpdate:modelValue":f=>l.value=f,key:"tabs-window"},c),{default:()=>{var f;return[o.value.map(m=>{var b;return((b=a.item)==null?void 0:b.call(a,{item:m}))??s(gd,{value:m.value},{default:()=>{var h;return(h=a[`item.${m.value}`])==null?void 0:h.call(a,{item:m})}})}),(f=a.window)==null?void 0:f.call(a)]}})])}),{}}}),D1=B({autoGrow:Boolean,autofocus:Boolean,counter:[Boolean,Number,String],counterValue:Function,prefix:String,placeholder:String,persistentPlaceholder:Boolean,persistentCounter:Boolean,noResize:Boolean,rows:{type:[Number,String],default:5,validator:e=>!isNaN(parseFloat(e))},maxRows:{type:[Number,String],validator:e=>!isNaN(parseFloat(e))},suffix:String,modelModifiers:Object,...Qt(),...Pa()},"VTextarea"),L1=R()({name:"VTextarea",directives:{Intersect:ka},inheritAttrs:!1,props:D1(),emits:{"click:control":e=>!0,"mousedown:control":e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const o=de(e,"modelValue"),{isFocused:i,focus:r,blur:u}=Jt(e),c=y(()=>typeof e.counterValue=="function"?e.counterValue(o.value):(o.value||"").toString().length),d=y(()=>{if(t.maxlength)return t.maxlength;if(!(!e.counter||typeof e.counter!="number"&&typeof e.counter!="string"))return e.counter});function v(p,I){var A,M;!e.autofocus||!p||(M=(A=I[0].target)==null?void 0:A.focus)==null||M.call(A)}const f=H(),m=H(),b=ee(""),h=H(),g=y(()=>e.persistentPlaceholder||i.value||e.active);function k(){var p;h.value!==document.activeElement&&((p=h.value)==null||p.focus()),i.value||r()}function S(p){k(),a("click:control",p)}function C(p){a("mousedown:control",p)}function P(p){p.stopPropagation(),k(),Te(()=>{o.value="",Zo(e["onClick:clear"],p)})}function x(p){var A;const I=p.target;if(o.value=I.value,(A=e.modelModifiers)!=null&&A.trim){const M=[I.selectionStart,I.selectionEnd];Te(()=>{I.selectionStart=M[0],I.selectionEnd=M[1]})}}const _=H(),T=H(+e.rows),V=y(()=>["plain","underlined"].includes(e.variant));He(()=>{e.autoGrow||(T.value=+e.rows)});function w(){e.autoGrow&&Te(()=>{if(!_.value||!m.value)return;const p=getComputedStyle(_.value),I=getComputedStyle(m.value.$el),A=parseFloat(p.getPropertyValue("--v-field-padding-top"))+parseFloat(p.getPropertyValue("--v-input-padding-top"))+parseFloat(p.getPropertyValue("--v-field-padding-bottom")),M=_.value.scrollHeight,j=parseFloat(p.lineHeight),Y=Math.max(parseFloat(e.rows)*j+A,parseFloat(I.getPropertyValue("--v-input-control-height"))),le=parseFloat(e.maxRows)*j+A||1/0,re=Xe(M??0,Y,le);T.value=Math.floor((re-A)/j),b.value=ne(re)})}Ke(w),Q(o,w),Q(()=>e.rows,w),Q(()=>e.maxRows,w),Q(()=>e.density,w);let $;return Q(_,p=>{p?($=new ResizeObserver(w),$.observe(_.value)):$==null||$.disconnect()}),it(()=>{$==null||$.disconnect()}),W(()=>{const p=!!(l.counter||e.counter||e.counterValue),I=!!(p||l.details),[A,M]=ln(t),{modelValue:j,...Y}=ct.filterProps(e),le=Vi(e);return s(ct,z({ref:f,modelValue:o.value,"onUpdate:modelValue":re=>o.value=re,class:["v-textarea v-text-field",{"v-textarea--prefixed":e.prefix,"v-textarea--suffixed":e.suffix,"v-text-field--prefixed":e.prefix,"v-text-field--suffixed":e.suffix,"v-textarea--auto-grow":e.autoGrow,"v-textarea--no-resize":e.noResize||e.autoGrow,"v-input--plain-underlined":V.value},e.class],style:e.style},A,Y,{centerAffix:T.value===1&&!V.value,focused:i.value}),{...l,default:re=>{let{id:N,isDisabled:E,isDirty:O,isReadonly:te,isValid:se}=re;return s(na,z({ref:m,style:{"--v-textarea-control-height":b.value},onClick:S,onMousedown:C,"onClick:clear":P,"onClick:prependInner":e["onClick:prependInner"],"onClick:appendInner":e["onClick:appendInner"]},le,{id:N.value,active:g.value||O.value,centerAffix:T.value===1&&!V.value,dirty:O.value||e.dirty,disabled:E.value,focused:i.value,error:se.value===!1}),{...l,default:ue=>{let{props:{class:ye,...G}}=ue;return s(ae,null,[e.prefix&&s("span",{class:"v-text-field__prefix"},[e.prefix]),je(s("textarea",z({ref:h,class:ye,value:o.value,onInput:x,autofocus:e.autofocus,readonly:te.value,disabled:E.value,placeholder:e.placeholder,rows:e.rows,name:e.name,onFocus:k,onBlur:u},G,M),null),[[Ct("intersect"),{handler:v},null,{once:!0}]]),e.autoGrow&&je(s("textarea",{class:[ye,"v-textarea__sizer"],id:`${G.id}-sizer`,"onUpdate:modelValue":ce=>o.value=ce,ref:_,readonly:!0,"aria-hidden":"true"},null),[[Rd,o.value]]),e.suffix&&s("span",{class:"v-text-field__suffix"},[e.suffix])])}})},details:I?re=>{var N;return s(ae,null,[(N=l.details)==null?void 0:N.call(l,re),p&&s(ae,null,[s("span",null,null),s(Sl,{active:e.persistentCounter||i.value,value:c.value,max:d.value,disabled:e.disabled},l.counter)])])}:void 0})}),At({},f,m,h)}}),M1=B({withBackground:Boolean,...ie(),...Pe(),...Ve()},"VThemeProvider"),E1=R()({name:"VThemeProvider",props:M1(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e);return()=>{var l;return e.withBackground?s(e.tag,{class:["v-theme-provider",a.value,e.class],style:e.style},{default:()=>{var o;return[(o=t.default)==null?void 0:o.call(t)]}}):(l=t.default)==null?void 0:l.call(t)}}}),F1=B({dotColor:String,fillDot:Boolean,hideDot:Boolean,icon:ve,iconColor:String,lineColor:String,...ie(),...ze(),...jt(),...at()},"VTimelineDivider"),O1=R()({name:"VTimelineDivider",props:F1(),setup(e,n){let{slots:t}=n;const{sizeClasses:a,sizeStyles:l}=Zn(e,"v-timeline-divider__dot"),{backgroundColorStyles:o,backgroundColorClasses:i}=Le(F(e,"dotColor")),{roundedClasses:r}=Ue(e,"v-timeline-divider__dot"),{elevationClasses:u}=st(e),{backgroundColorClasses:c,backgroundColorStyles:d}=Le(F(e,"lineColor"));return W(()=>s("div",{class:["v-timeline-divider",{"v-timeline-divider--fill-dot":e.fillDot},e.class],style:e.style},[s("div",{class:["v-timeline-divider__before",c.value],style:d.value},null),!e.hideDot&&s("div",{key:"dot",class:["v-timeline-divider__dot",u.value,r.value,a.value],style:l.value},[s("div",{class:["v-timeline-divider__inner-dot",i.value,r.value],style:o.value},[t.default?s(pe,{key:"icon-defaults",disabled:!e.icon,defaults:{VIcon:{color:e.iconColor,icon:e.icon,size:e.size}}},t.default):s(Be,{key:"icon",color:e.iconColor,icon:e.icon,size:e.size},null)])]),s("div",{class:["v-timeline-divider__after",c.value],style:d.value},null)])),{}}}),hd=B({density:String,dotColor:String,fillDot:Boolean,hideDot:Boolean,hideOpposite:{type:Boolean,default:void 0},icon:ve,iconColor:String,lineInset:[Number,String],...ie(),...Qe(),...at(),...ze(),...jt(),...Ve()},"VTimelineItem"),N1=R()({name:"VTimelineItem",props:hd(),setup(e,n){let{slots:t}=n;const{dimensionStyles:a}=et(e),l=ee(0),o=H();return Q(o,i=>{var r;i&&(l.value=((r=i.$el.querySelector(".v-timeline-divider__dot"))==null?void 0:r.getBoundingClientRect().width)??0)},{flush:"post"}),W(()=>{var i,r;return s("div",{class:["v-timeline-item",{"v-timeline-item--fill-dot":e.fillDot},e.class],style:[{"--v-timeline-dot-size":ne(l.value),"--v-timeline-line-inset":e.lineInset?`calc(var(--v-timeline-dot-size) / 2 + ${ne(e.lineInset)})`:ne(0)},e.style]},[s("div",{class:"v-timeline-item__body",style:a.value},[(i=t.default)==null?void 0:i.call(t)]),s(O1,{ref:o,hideDot:e.hideDot,icon:e.icon,iconColor:e.iconColor,size:e.size,elevation:e.elevation,dotColor:e.dotColor,fillDot:e.fillDot,rounded:e.rounded},{default:t.icon}),e.density!=="compact"&&s("div",{class:"v-timeline-item__opposite"},[!e.hideOpposite&&((r=t.opposite)==null?void 0:r.call(t))])])}),{}}}),R1=B({align:{type:String,default:"center",validator:e=>["center","start"].includes(e)},direction:{type:String,default:"vertical",validator:e=>["vertical","horizontal"].includes(e)},justify:{type:String,default:"auto",validator:e=>["auto","center"].includes(e)},side:{type:String,validator:e=>e==null||["start","end"].includes(e)},lineThickness:{type:[String,Number],default:2},lineColor:String,truncateLine:{type:String,validator:e=>["start","end","both"].includes(e)},...ll(hd({lineInset:0}),["dotColor","fillDot","hideOpposite","iconColor","lineInset","size"]),...ie(),...lt(),...Ve(),...Pe()},"VTimeline"),H1=R()({name:"VTimeline",props:R1(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{densityClasses:l}=gt(e),{rtlClasses:o}=nt();Ge({VTimelineDivider:{lineColor:F(e,"lineColor")},VTimelineItem:{density:F(e,"density"),dotColor:F(e,"dotColor"),fillDot:F(e,"fillDot"),hideOpposite:F(e,"hideOpposite"),iconColor:F(e,"iconColor"),lineColor:F(e,"lineColor"),lineInset:F(e,"lineInset"),size:F(e,"size")}});const i=y(()=>{const u=e.side?e.side:e.density!=="default"?"end":null;return u&&`v-timeline--side-${u}`}),r=y(()=>{const u=["v-timeline--truncate-line-start","v-timeline--truncate-line-end"];switch(e.truncateLine){case"both":return u;case"start":return u[0];case"end":return u[1];default:return null}});return W(()=>s(e.tag,{class:["v-timeline",`v-timeline--${e.direction}`,`v-timeline--align-${e.align}`,`v-timeline--justify-${e.justify}`,r.value,{"v-timeline--inset-line":!!e.lineInset},a.value,l.value,i.value,o.value,e.class],style:[{"--v-timeline-line-thickness":ne(e.lineThickness)},e.style]},t)),{}}}),z1=B({...ie(),...Tt({variant:"text"})},"VToolbarItems"),W1=R()({name:"VToolbarItems",props:z1(),setup(e,n){let{slots:t}=n;return Ge({VBtn:{color:F(e,"color"),height:"inherit",variant:F(e,"variant")}}),W(()=>{var a;return s("div",{class:["v-toolbar-items",e.class],style:e.style},[(a=t.default)==null?void 0:a.call(t)])}),{}}}),j1=B({id:String,text:String,...Je(_a({closeOnBack:!1,location:"end",locationStrategy:"connected",eager:!0,minWidth:0,offset:10,openOnClick:!1,openOnHover:!0,origin:"auto",scrim:!1,scrollStrategy:"reposition",transition:!1}),["absolute","persistent"])},"VTooltip"),yd=R()({name:"VTooltip",props:j1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{scopeId:l}=Fn(),o=rt(),i=y(()=>e.id||`v-tooltip-${o}`),r=H(),u=y(()=>e.location.split(" ").length>1?e.location:e.location+" center"),c=y(()=>e.origin==="auto"||e.origin==="overlap"||e.origin.split(" ").length>1||e.location.split(" ").length>1?e.origin:e.origin+" center"),d=y(()=>e.transition?e.transition:a.value?"scale-transition":"fade-transition"),v=y(()=>z({"aria-describedby":i.value},e.activatorProps));return W(()=>{const f=Rt.filterProps(e);return s(Rt,z({ref:r,class:["v-tooltip",e.class],style:e.style,id:i.value},f,{modelValue:a.value,"onUpdate:modelValue":m=>a.value=m,transition:d.value,absolute:!0,location:u.value,origin:c.value,persistent:!0,role:"tooltip",activatorProps:v.value,_disableGlobalStack:!0},l),{activator:t.activator,default:function(){var g;for(var m=arguments.length,b=new Array(m),h=0;h!0},setup(e,n){let{slots:t}=n;const a=Vu(e,"validation");return()=>{var l;return(l=t.default)==null?void 0:l.call(t,a)}}}),Y1=Object.freeze(Object.defineProperty({__proto__:null,VAlert:mk,VAlertTitle:mu,VApp:Cb,VAppBar:Wb,VAppBarNavIcon:ck,VAppBarTitle:dk,VAutocomplete:ES,VAvatar:It,VBadge:OS,VBanner:HS,VBannerActions:Ju,VBannerText:Qu,VBottomNavigation:WS,VBottomSheet:GS,VBreadcrumbs:qS,VBreadcrumbsDivider:tc,VBreadcrumbsItem:nc,VBtn:Ae,VBtnGroup:vo,VBtnToggle:qb,VCard:e0,VCardActions:ac,VCardItem:ic,VCardSubtitle:lc,VCardText:rc,VCardTitle:oc,VCarousel:u0,VCarouselItem:d0,VCheckbox:Ck,VCheckboxBtn:Ut,VChip:ta,VChipGroup:Ik,VClassIcon:ii,VCode:v0,VCol:Hw,VColorPicker:ew,VCombobox:aw,VComponentIcon:so,VConfirmEdit:ow,VContainer:Fw,VCounter:Sl,VDataIterator:gw,VDataTable:Aw,VDataTableFooter:ga,VDataTableHeaders:pn,VDataTableRow:Fi,VDataTableRows:xn,VDataTableServer:Mw,VDataTableVirtual:Dw,VDatePicker:eV,VDatePickerControls:Io,VDatePickerHeader:$o,VDatePickerMonth:To,VDatePickerMonths:Ao,VDatePickerYears:Bo,VDefaultsProvider:pe,VDialog:So,VDialogBottomTransition:Pb,VDialogTopTransition:Ib,VDialogTransition:dl,VDivider:xa,VEmptyState:nV,VExpandTransition:vl,VExpandXTransition:ci,VExpansionPanel:aV,VExpansionPanelText:Do,VExpansionPanelTitle:Lo,VExpansionPanels:iV,VFab:sV,VFabTransition:_b,VFadeTransition:ua,VField:na,VFieldLabel:la,VFileInput:cV,VFooter:vV,VForm:mV,VHover:hV,VIcon:Be,VImg:Yt,VInfiniteScroll:bV,VInput:ct,VItem:wV,VItemGroup:SV,VKbd:VV,VLabel:ea,VLayout:pV,VLayoutItem:_V,VLazy:IV,VLigatureIcon:mb,VList:kl,VListGroup:ho,VListImg:Zk,VListItem:Kt,VListItemAction:Qk,VListItemMedia:tS,VListItemSubtitle:Lu,VListItemTitle:Mu,VListSubheader:Eu,VLocaleProvider:TV,VMain:BV,VMenu:qn,VMessages:ku,VNavigationDrawer:HV,VNoSsr:zV,VOtpInput:jV,VOverlay:Rt,VPagination:_o,VParallax:UV,VProgressCircular:Kn,VProgressLinear:ml,VRadio:qV,VRadioGroup:ZV,VRangeSlider:QV,VRating:t1,VResponsive:uo,VRow:Kw,VScaleTransition:si,VScrollXReverseTransition:Tb,VScrollXTransition:$b,VScrollYReverseTransition:Bb,VScrollYTransition:Ab,VSelect:xi,VSelectionControl:tn,VSelectionControlGroup:hu,VSheet:Cn,VSkeletonLoader:o1,VSlideGroup:fa,VSlideGroupItem:i1,VSlideXReverseTransition:Lb,VSlideXTransition:Db,VSlideYReverseTransition:Mb,VSlideYTransition:ui,VSlider:xo,VSnackbar:u1,VSpacer:Kc,VSparkline:f1,VSpeedDial:g1,VStepper:V1,VStepperActions:sd,VStepperHeader:ud,VStepperItem:cd,VStepperWindow:dd,VStepperWindowItem:vd,VSvgIcon:oi,VSwitch:p1,VSystemBar:_1,VTab:fd,VTable:_n,VTabs:B1,VTabsWindow:md,VTabsWindowItem:gd,VTextField:Sn,VTextarea:L1,VThemeProvider:E1,VTimeline:H1,VTimelineItem:N1,VToolbar:co,VToolbarItems:W1,VToolbarTitle:ri,VTooltip:yd,VValidation:G1,VVirtualScroll:Vl,VWindow:wn,VWindowItem:Vn},Symbol.toStringTag,{value:"Module"}));function U1(e,n){const t=n.modifiers||{},a=n.value,{once:l,immediate:o,...i}=t,r=!Object.keys(i).length,{handler:u,options:c}=typeof a=="object"?a:{handler:a,options:{attributes:(i==null?void 0:i.attr)??r,characterData:(i==null?void 0:i.char)??r,childList:(i==null?void 0:i.child)??r,subtree:(i==null?void 0:i.sub)??r}},d=new MutationObserver(function(){let v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],f=arguments.length>1?arguments[1]:void 0;u==null||u(v,f),l&&bd(e,n)});o&&(u==null||u([],d)),e._mutate=Object(e._mutate),e._mutate[n.instance.$.uid]={observer:d},d.observe(e,c)}function bd(e,n){var t;(t=e._mutate)!=null&&t[n.instance.$.uid]&&(e._mutate[n.instance.$.uid].observer.disconnect(),delete e._mutate[n.instance.$.uid])}const K1={mounted:U1,unmounted:bd};function q1(e,n){var l,o;const t=n.value,a={passive:!((l=n.modifiers)!=null&&l.active)};window.addEventListener("resize",t,a),e._onResize=Object(e._onResize),e._onResize[n.instance.$.uid]={handler:t,options:a},(o=n.modifiers)!=null&&o.quiet||t()}function X1(e,n){var l;if(!((l=e._onResize)!=null&&l[n.instance.$.uid]))return;const{handler:t,options:a}=e._onResize[n.instance.$.uid];window.removeEventListener("resize",t,a),delete e._onResize[n.instance.$.uid]}const Z1={mounted:q1,unmounted:X1};function kd(e,n){const{self:t=!1}=n.modifiers??{},a=n.value,l=typeof a=="object"&&a.options||{passive:!0},o=typeof a=="function"||"handleEvent"in a?a:a.handler,i=t?e:n.arg?document.querySelector(n.arg):window;i&&(i.addEventListener("scroll",o,l),e._onScroll=Object(e._onScroll),e._onScroll[n.instance.$.uid]={handler:o,options:l,target:t?void 0:i})}function Sd(e,n){var o;if(!((o=e._onScroll)!=null&&o[n.instance.$.uid]))return;const{handler:t,options:a,target:l=e}=e._onScroll[n.instance.$.uid];l.removeEventListener("scroll",t,a),delete e._onScroll[n.instance.$.uid]}function J1(e,n){n.value!==n.oldValue&&(Sd(e,n),kd(e,n))}const Q1={mounted:kd,unmounted:Sd,updated:J1};function eC(e,n){const t=typeof e=="string"?nn(e):e,a=tC(t,n);return{mounted:a,updated:a,unmounted(l){ls(null,l)}}}function tC(e,n){return function(t,a,l){var v,f,m;const o=typeof n=="function"?n(a):n,i=((v=a.value)==null?void 0:v.text)??a.value??(o==null?void 0:o.text),r=Uo(a.value)?a.value:{},u=()=>i??t.textContent,c=(l.ctx===a.instance.$?(f=nC(l,a.instance.$))==null?void 0:f.provides:(m=l.ctx)==null?void 0:m.provides)??a.instance.$.provides,d=an(e,z(o,r),u);d.appContext=Object.assign(Object.create(null),a.instance.$.appContext,{provides:c}),ls(d,t)}}function nC(e,n){const t=new Set,a=o=>{var i,r;for(const u of o){if(!u)continue;if(u===e||u.el&&e.el&&u.el===e.el)return!0;t.add(u);let c;if(u.suspense?c=a([u.ssContent]):Array.isArray(u.children)?c=a(u.children):(i=u.component)!=null&&i.vnode&&(c=a([(r=u.component)==null?void 0:r.subTree])),c)return c;t.delete(u)}return!1};if(!a([n.subTree]))return n;const l=Array.from(t).reverse();for(const o of l)if(o.component)return o.component;return n}const aC=eC(yd,e=>{var n;return{activator:"parent",location:(n=e.arg)==null?void 0:n.replace("-"," "),text:typeof e.value=="boolean"?void 0:e.value}}),lC=Object.freeze(Object.defineProperty({__proto__:null,ClickOutside:Uu,Intersect:ka,Mutate:K1,Resize:Z1,Ripple:Zt,Scroll:Q1,Tooltip:aC,Touch:_i},Symbol.toStringTag,{value:"Module"})),iC={extends:wh,enhanceApp({app:e}){const n=qs({components:Y1,directives:lC});e.use(n)}};export{iC as R,ag as c,_e as u}; diff --git a/assets/chunks/theme.DID5n9gm.js b/assets/chunks/theme.DID5n9gm.js deleted file mode 100644 index 5275fd5..0000000 --- a/assets/chunks/theme.DID5n9gm.js +++ /dev/null @@ -1,6 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.ZsI9nk2w.js","assets/chunks/framework.CrOSaJJH.js"])))=>i.map(i=>d[i]); -import{d as ge,c as K,r as U,n as Ne,o as D,a as bt,t as Oe,b as be,w as J,T as Dt,e as fe,_ as Se,u as wd,i as Vd,f as Cd,g as Mo,h as y,j as X,k as L,l as bn,m as Ul,p as H,q as Q,s as He,v as Ke,x as Ja,y as Eo,z as Zr,A as pd,F as ae,B as kt,C as nn,D as ee,E as Qa,G as s,H as Bt,I as Jr,J as el,K as z,L as xe,M as xd,N as Qr,O as Kl,P as Te,Q as es,R as tl,S as nl,U as _d,V as Pd,W as ts,X as Re,Y as Id,Z as $d,$ as it,a0 as ql,a1 as Td,a2 as mt,a3 as Fo,a4 as St,a5 as Pn,a6 as Xn,a7 as Ad,a8 as Bd,a9 as Dd,aa as an,ab as ns,ac as Ze,ad as as,ae as Ld,af as Oo,ag as jn,ah as F,ai as No,aj as je,ak as Ct,al as Mt,am as Md,an as Ed,ao as Fd,ap as Od,aq as Nd,ar as Rd,as as ls}from"./framework.CrOSaJJH.js";const Hd=ge({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(n,t)=>(D(),K("span",{class:Ne(["VPBadge",n.type])},[U(n.$slots,"default",{},()=>[bt(Oe(n.text),1)])],2))}}),zd={key:0,class:"VPBackdrop"},Wd=ge({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(n,t)=>(D(),be(Dt,{name:"fade"},{default:J(()=>[n.show?(D(),K("div",zd)):fe("",!0)]),_:1}))}}),jd=Se(Wd,[["__scopeId","data-v-c79a1216"]]),_e=wd;function Gd(e,n){let t,a=!1;return()=>{t&&clearTimeout(t),a?t=setTimeout(e,n):(e(),(a=!0)&&setTimeout(()=>a=!1,n))}}function Xl(e){return e.startsWith("/")?e:`/${e}`}function Ro(e){const{pathname:n,search:t,hash:a,protocol:l}=new URL(e,"http://a.com");if(Vd(e)||e.startsWith("#")||!l.startsWith("http")||!Cd(n))return e;const{site:o}=_e(),i=n.endsWith("/")||n.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${n.replace(/(\.md)?$/,o.value.cleanUrls?"":".html")}${t}${a}`);return Mo(i)}function ya({correspondingLink:e=!1}={}){const{site:n,localeIndex:t,page:a,theme:l,hash:o}=_e(),i=y(()=>{var u,c;return{label:(u=n.value.locales[t.value])==null?void 0:u.label,link:((c=n.value.locales[t.value])==null?void 0:c.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(n.value.locales).flatMap(([u,c])=>i.value.label===c.label?[]:{text:c.label,link:Yd(c.link||(u==="root"?"/":`/${u}/`),l.value.i18nRouting!==!1&&e,a.value.relativePath.slice(i.value.link.length-1),!n.value.cleanUrls)+o.value})),currentLang:i}}function Yd(e,n,t,a){return n?e.replace(/\/$/,"")+Xl(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const Ud={class:"NotFound"},Kd={class:"code"},qd={class:"title"},Xd={class:"quote"},Zd={class:"action"},Jd=["href","aria-label"],Qd=ge({__name:"NotFound",setup(e){const{theme:n}=_e(),{currentLang:t}=ya();return(a,l)=>{var o,i,r,u,c;return D(),K("div",Ud,[X("p",Kd,Oe(((o=L(n).notFound)==null?void 0:o.code)??"404"),1),X("h1",qd,Oe(((i=L(n).notFound)==null?void 0:i.title)??"PAGE NOT FOUND"),1),l[0]||(l[0]=X("div",{class:"divider"},null,-1)),X("blockquote",Xd,Oe(((r=L(n).notFound)==null?void 0:r.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),X("div",Zd,[X("a",{class:"link",href:L(Mo)(L(t).link),"aria-label":((u=L(n).notFound)==null?void 0:u.linkLabel)??"go to home"},Oe(((c=L(n).notFound)==null?void 0:c.linkText)??"Take me home"),9,Jd)])])}}}),ev=Se(Qd,[["__scopeId","data-v-d6be1790"]]);function os(e,n){if(Array.isArray(e))return Oa(e);if(e==null)return[];n=Xl(n);const t=Object.keys(e).sort((l,o)=>o.split("/").length-l.split("/").length).find(l=>n.startsWith(Xl(l))),a=t?e[t]:[];return Array.isArray(a)?Oa(a):Oa(a.items,a.base)}function tv(e){const n=[];let t=0;for(const a in e){const l=e[a];if(l.items){t=n.push(l);continue}n[t]||n.push({items:[]}),n[t].items.push(l)}return n}function nv(e){const n=[];function t(a){for(const l of a)l.text&&l.link&&n.push({text:l.text,link:l.link,docFooterText:l.docFooterText}),l.items&&t(l.items)}return t(e),n}function Zl(e,n){return Array.isArray(n)?n.some(t=>Zl(e,t)):bn(e,n.link)?!0:n.items?Zl(e,n.items):!1}function Oa(e,n){return[...e].map(t=>{const a={...t},l=a.base||n;return l&&a.link&&(a.link=l+a.link),a.items&&(a.items=Oa(a.items,l)),a})}function qt(){const{frontmatter:e,page:n,theme:t}=_e(),a=Ul("(min-width: 960px)"),l=H(!1),o=y(()=>{const h=t.value.sidebar,g=n.value.relativePath;return h?os(h,g):[]}),i=H(o.value);Q(o,(h,g)=>{JSON.stringify(h)!==JSON.stringify(g)&&(i.value=o.value)});const r=y(()=>e.value.sidebar!==!1&&i.value.length>0&&e.value.layout!=="home"),u=y(()=>c?e.value.aside==null?t.value.aside==="left":e.value.aside==="left":!1),c=y(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:t.value.aside!==!1),d=y(()=>r.value&&a.value),v=y(()=>r.value?tv(i.value):[]);function f(){l.value=!0}function m(){l.value=!1}function b(){l.value?m():f()}return{isOpen:l,sidebar:i,sidebarGroups:v,hasSidebar:r,hasAside:c,leftAside:u,isSidebarEnabled:d,open:f,close:m,toggle:b}}function av(e,n){let t;He(()=>{t=e.value?document.activeElement:void 0}),Ke(()=>{window.addEventListener("keyup",a)}),Ja(()=>{window.removeEventListener("keyup",a)});function a(l){l.key==="Escape"&&e.value&&(n(),t==null||t.focus())}}function lv(e){const{page:n,hash:t}=_e(),a=H(!1),l=y(()=>e.value.collapsed!=null),o=y(()=>!!e.value.link),i=H(!1),r=()=>{i.value=bn(n.value.relativePath,e.value.link)};Q([n,e,t],r),Ke(r);const u=y(()=>i.value?!0:e.value.items?Zl(n.value.relativePath,e.value.items):!1),c=y(()=>!!(e.value.items&&e.value.items.length));He(()=>{a.value=!!(l.value&&e.value.collapsed)}),Eo(()=>{(i.value||u.value)&&(a.value=!1)});function d(){l.value&&(a.value=!a.value)}return{collapsed:a,collapsible:l,isLink:o,isActiveLink:i,hasActiveLink:u,hasChildren:c,toggle:d}}function ov(){const{hasSidebar:e}=qt(),n=Ul("(min-width: 960px)"),t=Ul("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!n.value?!1:e.value?t.value:n.value)}}const iv=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Jl=[];function is(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function Ho(e){const n=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const a=Number(t.tagName[1]);return{element:t,title:rv(t),link:"#"+t.id,level:a}});return sv(n,e)}function rv(e){let n="";for(const t of e.childNodes)if(t.nodeType===1){if(iv.test(t.className))continue;n+=t.textContent}else t.nodeType===3&&(n+=t.textContent);return n.trim()}function sv(e,n){if(n===!1)return[];const t=(typeof n=="object"&&!Array.isArray(n)?n.level:n)||2,[a,l]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return dv(e,a,l)}function uv(e,n){const{isAsideEnabled:t}=ov(),a=Gd(o,100);let l=null;Ke(()=>{requestAnimationFrame(o),window.addEventListener("scroll",a)}),Zr(()=>{i(location.hash)}),Ja(()=>{window.removeEventListener("scroll",a)});function o(){if(!t.value)return;const r=window.scrollY,u=window.innerHeight,c=document.body.offsetHeight,d=Math.abs(r+u-c)<1,v=Jl.map(({element:m,link:b})=>({link:b,top:cv(m)})).filter(({top:m})=>!Number.isNaN(m)).sort((m,b)=>m.top-b.top);if(!v.length){i(null);return}if(r<1){i(null);return}if(d){i(v[v.length-1].link);return}let f=null;for(const{link:m,top:b}of v){if(b>r+pd()+4)break;f=m}i(f)}function i(r){l&&l.classList.remove("active"),r==null?l=null:l=e.value.querySelector(`a[href="${decodeURIComponent(r)}"]`);const u=l;u?(u.classList.add("active"),n.value.style.top=u.offsetTop+39+"px",n.value.style.opacity="1"):(n.value.style.top="33px",n.value.style.opacity="0")}}function cv(e){let n=0;for(;e!==document.body;){if(e===null)return NaN;n+=e.offsetTop,e=e.offsetParent}return n}function dv(e,n,t){Jl.length=0;const a=[],l=[];return e.forEach(o=>{const i={...o,children:[]};let r=l[l.length-1];for(;r&&r.level>=i.level;)l.pop(),r=l[l.length-1];if(i.element.classList.contains("ignore-header")||r&&"shouldIgnore"in r){l.push({level:i.level,shouldIgnore:!0});return}i.level>t||i.level{const l=nn("VPDocOutlineItem",!0);return D(),K("ul",{class:Ne(["VPDocOutlineItem",t.root?"root":"nested"])},[(D(!0),K(ae,null,kt(t.headers,({children:o,link:i,title:r})=>(D(),K("li",null,[X("a",{class:"outline-link",href:i,onClick:n,title:r},Oe(r),9,vv),o!=null&&o.length?(D(),be(l,{key:0,headers:o},null,8,["headers"])):fe("",!0)]))),256))],2)}}}),rs=Se(fv,[["__scopeId","data-v-b933a997"]]),mv={class:"content"},gv={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},hv=ge({__name:"VPDocAsideOutline",setup(e){const{frontmatter:n,theme:t}=_e(),a=ee([]);Qa(()=>{a.value=Ho(n.value.outline??t.value.outline)});const l=H(),o=H();return uv(l,o),(i,r)=>(D(),K("nav",{"aria-labelledby":"doc-outline-aria-label",class:Ne(["VPDocAsideOutline",{"has-outline":a.value.length>0}]),ref_key:"container",ref:l},[X("div",mv,[X("div",{class:"outline-marker",ref_key:"marker",ref:o},null,512),X("div",gv,Oe(L(is)(L(t))),1),s(rs,{headers:a.value,root:!0},null,8,["headers"])])],2))}}),yv=Se(hv,[["__scopeId","data-v-a5bbad30"]]),bv={class:"VPDocAsideCarbonAds"},kv=ge({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const n=()=>null;return(t,a)=>(D(),K("div",bv,[s(L(n),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Sv={class:"VPDocAside"},wv=ge({__name:"VPDocAside",setup(e){const{theme:n}=_e();return(t,a)=>(D(),K("div",Sv,[U(t.$slots,"aside-top",{},void 0,!0),U(t.$slots,"aside-outline-before",{},void 0,!0),s(yv),U(t.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=X("div",{class:"spacer"},null,-1)),U(t.$slots,"aside-ads-before",{},void 0,!0),L(n).carbonAds?(D(),be(kv,{key:0,"carbon-ads":L(n).carbonAds},null,8,["carbon-ads"])):fe("",!0),U(t.$slots,"aside-ads-after",{},void 0,!0),U(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Vv=Se(wv,[["__scopeId","data-v-3f215769"]]);function Cv(){const{theme:e,page:n}=_e();return y(()=>{const{text:t="Edit this page",pattern:a=""}=e.value.editLink||{};let l;return typeof a=="function"?l=a(n.value):l=a.replace(/:path/g,n.value.filePath),{url:l,text:t}})}function pv(){const{page:e,theme:n,frontmatter:t}=_e();return y(()=>{var c,d,v,f,m,b,h,g;const a=os(n.value.sidebar,e.value.relativePath),l=nv(a),o=xv(l,k=>k.link.replace(/[?#].*$/,"")),i=o.findIndex(k=>bn(e.value.relativePath,k.link)),r=((c=n.value.docFooter)==null?void 0:c.prev)===!1&&!t.value.prev||t.value.prev===!1,u=((d=n.value.docFooter)==null?void 0:d.next)===!1&&!t.value.next||t.value.next===!1;return{prev:r?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((v=o[i-1])==null?void 0:v.docFooterText)??((f=o[i-1])==null?void 0:f.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((m=o[i-1])==null?void 0:m.link)},next:u?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((b=o[i+1])==null?void 0:b.docFooterText)??((h=o[i+1])==null?void 0:h.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((g=o[i+1])==null?void 0:g.link)}}})}function xv(e,n){const t=new Set;return e.filter(a=>{const l=n(a);return t.has(l)?!1:t.add(l)})}const Nt=ge({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const n=e,t=y(()=>n.tag??(n.href?"a":"span")),a=y(()=>n.href&&Jr.test(n.href)||n.target==="_blank");return(l,o)=>(D(),be(Bt(t.value),{class:Ne(["VPLink",{link:l.href,"vp-external-link-icon":a.value,"no-icon":l.noIcon}]),href:l.href?L(Ro)(l.href):void 0,target:l.target??(a.value?"_blank":void 0),rel:l.rel??(a.value?"noreferrer":void 0)},{default:J(()=>[U(l.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),_v={class:"VPLastUpdated"},Pv=["datetime"],Iv=ge({__name:"VPDocFooterLastUpdated",setup(e){const{theme:n,page:t,lang:a}=_e(),l=y(()=>new Date(t.value.lastUpdated)),o=y(()=>l.value.toISOString()),i=H("");return Ke(()=>{He(()=>{var r,u,c;i.value=new Intl.DateTimeFormat((u=(r=n.value.lastUpdated)==null?void 0:r.formatOptions)!=null&&u.forceLocale?a.value:void 0,((c=n.value.lastUpdated)==null?void 0:c.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(l.value)})}),(r,u)=>{var c;return D(),K("p",_v,[bt(Oe(((c=L(n).lastUpdated)==null?void 0:c.text)||L(n).lastUpdatedText||"Last updated")+": ",1),X("time",{datetime:o.value},Oe(i.value),9,Pv)])}}}),$v=Se(Iv,[["__scopeId","data-v-e98dd255"]]),Tv={key:0,class:"VPDocFooter"},Av={key:0,class:"edit-info"},Bv={key:0,class:"edit-link"},Dv={key:1,class:"last-updated"},Lv={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Mv={class:"pager"},Ev=["innerHTML"],Fv=["innerHTML"],Ov={class:"pager"},Nv=["innerHTML"],Rv=["innerHTML"],Hv=ge({__name:"VPDocFooter",setup(e){const{theme:n,page:t,frontmatter:a}=_e(),l=Cv(),o=pv(),i=y(()=>n.value.editLink&&a.value.editLink!==!1),r=y(()=>t.value.lastUpdated),u=y(()=>i.value||r.value||o.value.prev||o.value.next);return(c,d)=>{var v,f,m,b;return u.value?(D(),K("footer",Tv,[U(c.$slots,"doc-footer-before",{},void 0,!0),i.value||r.value?(D(),K("div",Av,[i.value?(D(),K("div",Bv,[s(Nt,{class:"edit-link-button",href:L(l).url,"no-icon":!0},{default:J(()=>[d[0]||(d[0]=X("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),bt(" "+Oe(L(l).text),1)]),_:1},8,["href"])])):fe("",!0),r.value?(D(),K("div",Dv,[s($v)])):fe("",!0)])):fe("",!0),(v=L(o).prev)!=null&&v.link||(f=L(o).next)!=null&&f.link?(D(),K("nav",Lv,[d[1]||(d[1]=X("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),X("div",Mv,[(m=L(o).prev)!=null&&m.link?(D(),be(Nt,{key:0,class:"pager-link prev",href:L(o).prev.link},{default:J(()=>{var h;return[X("span",{class:"desc",innerHTML:((h=L(n).docFooter)==null?void 0:h.prev)||"Previous page"},null,8,Ev),X("span",{class:"title",innerHTML:L(o).prev.text},null,8,Fv)]}),_:1},8,["href"])):fe("",!0)]),X("div",Ov,[(b=L(o).next)!=null&&b.link?(D(),be(Nt,{key:0,class:"pager-link next",href:L(o).next.link},{default:J(()=>{var h;return[X("span",{class:"desc",innerHTML:((h=L(n).docFooter)==null?void 0:h.next)||"Next page"},null,8,Nv),X("span",{class:"title",innerHTML:L(o).next.text},null,8,Rv)]}),_:1},8,["href"])):fe("",!0)])])):fe("",!0)])):fe("",!0)}}}),zv=Se(Hv,[["__scopeId","data-v-e257564d"]]),Wv={class:"container"},jv={class:"aside-container"},Gv={class:"aside-content"},Yv={class:"content"},Uv={class:"content-container"},Kv={class:"main"},qv=ge({__name:"VPDoc",setup(e){const{theme:n}=_e(),t=el(),{hasSidebar:a,hasAside:l,leftAside:o}=qt(),i=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(r,u)=>{const c=nn("Content");return D(),K("div",{class:Ne(["VPDoc",{"has-sidebar":L(a),"has-aside":L(l)}])},[U(r.$slots,"doc-top",{},void 0,!0),X("div",Wv,[L(l)?(D(),K("div",{key:0,class:Ne(["aside",{"left-aside":L(o)}])},[u[0]||(u[0]=X("div",{class:"aside-curtain"},null,-1)),X("div",jv,[X("div",Gv,[s(Vv,null,{"aside-top":J(()=>[U(r.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":J(()=>[U(r.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":J(()=>[U(r.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":J(()=>[U(r.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":J(()=>[U(r.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":J(()=>[U(r.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):fe("",!0),X("div",Yv,[X("div",Uv,[U(r.$slots,"doc-before",{},void 0,!0),X("main",Kv,[s(c,{class:Ne(["vp-doc",[i.value,L(n).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),s(zv,null,{"doc-footer-before":J(()=>[U(r.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),U(r.$slots,"doc-after",{},void 0,!0)])])]),U(r.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Xv=Se(qv,[["__scopeId","data-v-39a288b8"]]),Zv=ge({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const n=e,t=y(()=>n.href&&Jr.test(n.href)),a=y(()=>n.tag||(n.href?"a":"button"));return(l,o)=>(D(),be(Bt(a.value),{class:Ne(["VPButton",[l.size,l.theme]]),href:l.href?L(Ro)(l.href):void 0,target:n.target??(t.value?"_blank":void 0),rel:n.rel??(t.value?"noreferrer":void 0)},{default:J(()=>[bt(Oe(l.text),1)]),_:1},8,["class","href","target","rel"]))}}),Jv=Se(Zv,[["__scopeId","data-v-fa7799d5"]]),Qv=["src","alt"],ef=ge({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(n,t)=>{const a=nn("VPImage",!0);return n.image?(D(),K(ae,{key:0},[typeof n.image=="string"||"src"in n.image?(D(),K("img",z({key:0,class:"VPImage"},typeof n.image=="string"?n.$attrs:{...n.image,...n.$attrs},{src:L(Mo)(typeof n.image=="string"?n.image:n.image.src),alt:n.alt??(typeof n.image=="string"?"":n.image.alt||"")}),null,16,Qv)):(D(),K(ae,{key:1},[s(a,z({class:"dark",image:n.image.dark,alt:n.image.alt},n.$attrs),null,16,["image","alt"]),s(a,z({class:"light",image:n.image.light,alt:n.image.alt},n.$attrs),null,16,["image","alt"])],64))],64)):fe("",!0)}}}),za=Se(ef,[["__scopeId","data-v-8426fc1a"]]),tf={class:"container"},nf={class:"main"},af={class:"heading"},lf=["innerHTML"],of=["innerHTML"],rf=["innerHTML"],sf={key:0,class:"actions"},uf={key:0,class:"image"},cf={class:"image-container"},df=ge({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const n=xe("hero-image-slot-exists");return(t,a)=>(D(),K("div",{class:Ne(["VPHero",{"has-image":t.image||L(n)}])},[X("div",tf,[X("div",nf,[U(t.$slots,"home-hero-info-before",{},void 0,!0),U(t.$slots,"home-hero-info",{},()=>[X("h1",af,[t.name?(D(),K("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,lf)):fe("",!0),t.text?(D(),K("span",{key:1,innerHTML:t.text,class:"text"},null,8,of)):fe("",!0)]),t.tagline?(D(),K("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,rf)):fe("",!0)],!0),U(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(D(),K("div",sf,[(D(!0),K(ae,null,kt(t.actions,l=>(D(),K("div",{key:l.link,class:"action"},[s(Jv,{tag:"a",size:"medium",theme:l.theme,text:l.text,href:l.link,target:l.target,rel:l.rel},null,8,["theme","text","href","target","rel"])]))),128))])):fe("",!0),U(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||L(n)?(D(),K("div",uf,[X("div",cf,[a[0]||(a[0]=X("div",{class:"image-bg"},null,-1)),U(t.$slots,"home-hero-image",{},()=>[t.image?(D(),be(za,{key:0,class:"image-src",image:t.image},null,8,["image"])):fe("",!0)],!0)])])):fe("",!0)])],2))}}),vf=Se(df,[["__scopeId","data-v-4f9c455b"]]),ff=ge({__name:"VPHomeHero",setup(e){const{frontmatter:n}=_e();return(t,a)=>L(n).hero?(D(),be(vf,{key:0,class:"VPHomeHero",name:L(n).hero.name,text:L(n).hero.text,tagline:L(n).hero.tagline,image:L(n).hero.image,actions:L(n).hero.actions},{"home-hero-info-before":J(()=>[U(t.$slots,"home-hero-info-before")]),"home-hero-info":J(()=>[U(t.$slots,"home-hero-info")]),"home-hero-info-after":J(()=>[U(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":J(()=>[U(t.$slots,"home-hero-actions-after")]),"home-hero-image":J(()=>[U(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):fe("",!0)}}),mf={class:"box"},gf={key:0,class:"icon"},hf=["innerHTML"],yf=["innerHTML"],bf=["innerHTML"],kf={key:4,class:"link-text"},Sf={class:"link-text-value"},wf=ge({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(n,t)=>(D(),be(Nt,{class:"VPFeature",href:n.link,rel:n.rel,target:n.target,"no-icon":!0,tag:n.link?"a":"div"},{default:J(()=>[X("article",mf,[typeof n.icon=="object"&&n.icon.wrap?(D(),K("div",gf,[s(za,{image:n.icon,alt:n.icon.alt,height:n.icon.height||48,width:n.icon.width||48},null,8,["image","alt","height","width"])])):typeof n.icon=="object"?(D(),be(za,{key:1,image:n.icon,alt:n.icon.alt,height:n.icon.height||48,width:n.icon.width||48},null,8,["image","alt","height","width"])):n.icon?(D(),K("div",{key:2,class:"icon",innerHTML:n.icon},null,8,hf)):fe("",!0),X("h2",{class:"title",innerHTML:n.title},null,8,yf),n.details?(D(),K("p",{key:3,class:"details",innerHTML:n.details},null,8,bf)):fe("",!0),n.linkText?(D(),K("div",kf,[X("p",Sf,[bt(Oe(n.linkText)+" ",1),t[0]||(t[0]=X("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):fe("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Vf=Se(wf,[["__scopeId","data-v-a3976bdc"]]),Cf={key:0,class:"VPFeatures"},pf={class:"container"},xf={class:"items"},_f=ge({__name:"VPFeatures",props:{features:{}},setup(e){const n=e,t=y(()=>{const a=n.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,l)=>a.features?(D(),K("div",Cf,[X("div",pf,[X("div",xf,[(D(!0),K(ae,null,kt(a.features,o=>(D(),K("div",{key:o.title,class:Ne(["item",[t.value]])},[s(Vf,{icon:o.icon,title:o.title,details:o.details,link:o.link,"link-text":o.linkText,rel:o.rel,target:o.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):fe("",!0)}}),Pf=Se(_f,[["__scopeId","data-v-a6181336"]]),If=ge({__name:"VPHomeFeatures",setup(e){const{frontmatter:n}=_e();return(t,a)=>L(n).features?(D(),be(Pf,{key:0,class:"VPHomeFeatures",features:L(n).features},null,8,["features"])):fe("",!0)}}),$f=ge({__name:"VPHomeContent",setup(e){const{width:n}=xd({initialWidth:0,includeScrollbar:!1});return(t,a)=>(D(),K("div",{class:"vp-doc container",style:Qr(L(n)?{"--vp-offset":`calc(50% - ${L(n)/2}px)`}:{})},[U(t.$slots,"default",{},void 0,!0)],4))}}),Tf=Se($f,[["__scopeId","data-v-8e2d4988"]]),Af=ge({__name:"VPHome",setup(e){const{frontmatter:n,theme:t}=_e();return(a,l)=>{const o=nn("Content");return D(),K("div",{class:Ne(["VPHome",{"external-link-icon-enabled":L(t).externalLinkIcon}])},[U(a.$slots,"home-hero-before",{},void 0,!0),s(ff,null,{"home-hero-info-before":J(()=>[U(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":J(()=>[U(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":J(()=>[U(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":J(()=>[U(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":J(()=>[U(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),U(a.$slots,"home-hero-after",{},void 0,!0),U(a.$slots,"home-features-before",{},void 0,!0),s(If),U(a.$slots,"home-features-after",{},void 0,!0),L(n).markdownStyles!==!1?(D(),be(Tf,{key:0},{default:J(()=>[s(o)]),_:1})):(D(),be(o,{key:1}))],2)}}}),Bf=Se(Af,[["__scopeId","data-v-8b561e3d"]]),Df={},Lf={class:"VPPage"};function Mf(e,n){const t=nn("Content");return D(),K("div",Lf,[U(e.$slots,"page-top"),s(t),U(e.$slots,"page-bottom")])}const Ef=Se(Df,[["render",Mf]]),Ff=ge({__name:"VPContent",setup(e){const{page:n,frontmatter:t}=_e(),{hasSidebar:a}=qt();return(l,o)=>(D(),K("div",{class:Ne(["VPContent",{"has-sidebar":L(a),"is-home":L(t).layout==="home"}]),id:"VPContent"},[L(n).isNotFound?U(l.$slots,"not-found",{key:0},()=>[s(ev)],!0):L(t).layout==="page"?(D(),be(Ef,{key:1},{"page-top":J(()=>[U(l.$slots,"page-top",{},void 0,!0)]),"page-bottom":J(()=>[U(l.$slots,"page-bottom",{},void 0,!0)]),_:3})):L(t).layout==="home"?(D(),be(Bf,{key:2},{"home-hero-before":J(()=>[U(l.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":J(()=>[U(l.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":J(()=>[U(l.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":J(()=>[U(l.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":J(()=>[U(l.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":J(()=>[U(l.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":J(()=>[U(l.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":J(()=>[U(l.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":J(()=>[U(l.$slots,"home-features-after",{},void 0,!0)]),_:3})):L(t).layout&&L(t).layout!=="doc"?(D(),be(Bt(L(t).layout),{key:3})):(D(),be(Xv,{key:4},{"doc-top":J(()=>[U(l.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":J(()=>[U(l.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":J(()=>[U(l.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":J(()=>[U(l.$slots,"doc-before",{},void 0,!0)]),"doc-after":J(()=>[U(l.$slots,"doc-after",{},void 0,!0)]),"aside-top":J(()=>[U(l.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":J(()=>[U(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":J(()=>[U(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":J(()=>[U(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":J(()=>[U(l.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":J(()=>[U(l.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Of=Se(Ff,[["__scopeId","data-v-1428d186"]]),Nf={class:"container"},Rf=["innerHTML"],Hf=["innerHTML"],zf=ge({__name:"VPFooter",setup(e){const{theme:n,frontmatter:t}=_e(),{hasSidebar:a}=qt();return(l,o)=>L(n).footer&&L(t).footer!==!1?(D(),K("footer",{key:0,class:Ne(["VPFooter",{"has-sidebar":L(a)}])},[X("div",Nf,[L(n).footer.message?(D(),K("p",{key:0,class:"message",innerHTML:L(n).footer.message},null,8,Rf)):fe("",!0),L(n).footer.copyright?(D(),K("p",{key:1,class:"copyright",innerHTML:L(n).footer.copyright},null,8,Hf)):fe("",!0)])],2)):fe("",!0)}}),Wf=Se(zf,[["__scopeId","data-v-e315a0ad"]]);function jf(){const{theme:e,frontmatter:n}=_e(),t=ee([]),a=y(()=>t.value.length>0);return Qa(()=>{t.value=Ho(n.value.outline??e.value.outline)}),{headers:t,hasLocalNav:a}}const Gf={class:"menu-text"},Yf={class:"header"},Uf={class:"outline"},Kf=ge({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const n=e,{theme:t}=_e(),a=H(!1),l=H(0),o=H(),i=H();function r(v){var f;(f=o.value)!=null&&f.contains(v.target)||(a.value=!1)}Q(a,v=>{if(v){document.addEventListener("click",r);return}document.removeEventListener("click",r)}),Kl("Escape",()=>{a.value=!1}),Qa(()=>{a.value=!1});function u(){a.value=!a.value,l.value=window.innerHeight+Math.min(window.scrollY-n.navHeight,0)}function c(v){v.target.classList.contains("outline-link")&&(i.value&&(i.value.style.transition="none"),Te(()=>{a.value=!1}))}function d(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(v,f)=>(D(),K("div",{class:"VPLocalNavOutlineDropdown",style:Qr({"--vp-vh":l.value+"px"}),ref_key:"main",ref:o},[v.headers.length>0?(D(),K("button",{key:0,onClick:u,class:Ne({open:a.value})},[X("span",Gf,Oe(L(is)(L(t))),1),f[0]||(f[0]=X("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(D(),K("button",{key:1,onClick:d},Oe(L(t).returnToTopLabel||"Return to top"),1)),s(Dt,{name:"flyout"},{default:J(()=>[a.value?(D(),K("div",{key:0,ref_key:"items",ref:i,class:"items",onClick:c},[X("div",Yf,[X("a",{class:"top-link",href:"#",onClick:d},Oe(L(t).returnToTopLabel||"Return to top"),1)]),X("div",Uf,[s(rs,{headers:v.headers},null,8,["headers"])])],512)):fe("",!0)]),_:1})],4))}}),qf=Se(Kf,[["__scopeId","data-v-8a42e2b4"]]),Xf={class:"container"},Zf=["aria-expanded"],Jf={class:"menu-text"},Qf=ge({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:n,frontmatter:t}=_e(),{hasSidebar:a}=qt(),{headers:l}=jf(),{y:o}=es(),i=H(0);Ke(()=>{i.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Qa(()=>{l.value=Ho(t.value.outline??n.value.outline)});const r=y(()=>l.value.length===0),u=y(()=>r.value&&!a.value),c=y(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:r.value,fixed:u.value}));return(d,v)=>L(t).layout!=="home"&&(!u.value||L(o)>=i.value)?(D(),K("div",{key:0,class:Ne(c.value)},[X("div",Xf,[L(a)?(D(),K("button",{key:0,class:"menu","aria-expanded":d.open,"aria-controls":"VPSidebarNav",onClick:v[0]||(v[0]=f=>d.$emit("open-menu"))},[v[1]||(v[1]=X("span",{class:"vpi-align-left menu-icon"},null,-1)),X("span",Jf,Oe(L(n).sidebarMenuLabel||"Menu"),1)],8,Zf)):fe("",!0),s(qf,{headers:L(l),navHeight:i.value},null,8,["headers","navHeight"])])],2)):fe("",!0)}}),em=Se(Qf,[["__scopeId","data-v-a6f0e41e"]]);function tm(){const e=H(!1);function n(){e.value=!0,window.addEventListener("resize",l)}function t(){e.value=!1,window.removeEventListener("resize",l)}function a(){e.value?t():n()}function l(){window.outerWidth>=768&&t()}const o=el();return Q(()=>o.path,t),{isScreenOpen:e,openScreen:n,closeScreen:t,toggleScreen:a}}const nm={},am={class:"VPSwitch",type:"button",role:"switch"},lm={class:"check"},om={key:0,class:"icon"};function im(e,n){return D(),K("button",am,[X("span",lm,[e.$slots.default?(D(),K("span",om,[U(e.$slots,"default",{},void 0,!0)])):fe("",!0)])])}const rm=Se(nm,[["render",im],["__scopeId","data-v-1d5665e3"]]),sm=ge({__name:"VPSwitchAppearance",setup(e){const{isDark:n,theme:t}=_e(),a=xe("toggle-appearance",()=>{n.value=!n.value}),l=H("");return Eo(()=>{l.value=n.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(o,i)=>(D(),be(rm,{title:l.value,class:"VPSwitchAppearance","aria-checked":L(n),onClick:L(a)},{default:J(()=>i[0]||(i[0]=[X("span",{class:"vpi-sun sun"},null,-1),X("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),zo=Se(sm,[["__scopeId","data-v-5337faa4"]]),um={key:0,class:"VPNavBarAppearance"},cm=ge({__name:"VPNavBarAppearance",setup(e){const{site:n}=_e();return(t,a)=>L(n).appearance&&L(n).appearance!=="force-dark"&&L(n).appearance!=="force-auto"?(D(),K("div",um,[s(zo)])):fe("",!0)}}),dm=Se(cm,[["__scopeId","data-v-6c893767"]]),Wo=H();let ss=!1,El=0;function vm(e){const n=H(!1);if(tl){!ss&&fm(),El++;const t=Q(Wo,a=>{var l,o,i;a===e.el.value||(l=e.el.value)!=null&&l.contains(a)?(n.value=!0,(o=e.onFocus)==null||o.call(e)):(n.value=!1,(i=e.onBlur)==null||i.call(e))});Ja(()=>{t(),El--,El||mm()})}return nl(n)}function fm(){document.addEventListener("focusin",us),ss=!0,Wo.value=document.activeElement}function mm(){document.removeEventListener("focusin",us)}function us(){Wo.value=document.activeElement}const gm={class:"VPMenuLink"},hm=["innerHTML"],ym=ge({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:n}=_e();return(t,a)=>(D(),K("div",gm,[s(Nt,{class:Ne({active:L(bn)(L(n).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:J(()=>[X("span",{innerHTML:t.item.text},null,8,hm)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),al=Se(ym,[["__scopeId","data-v-35975db6"]]),bm={class:"VPMenuGroup"},km={key:0,class:"title"},Sm=ge({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(n,t)=>(D(),K("div",bm,[n.text?(D(),K("p",km,Oe(n.text),1)):fe("",!0),(D(!0),K(ae,null,kt(n.items,a=>(D(),K(ae,null,["link"in a?(D(),be(al,{key:0,item:a},null,8,["item"])):fe("",!0)],64))),256))]))}}),wm=Se(Sm,[["__scopeId","data-v-69e747b5"]]),Vm={class:"VPMenu"},Cm={key:0,class:"items"},pm=ge({__name:"VPMenu",props:{items:{}},setup(e){return(n,t)=>(D(),K("div",Vm,[n.items?(D(),K("div",Cm,[(D(!0),K(ae,null,kt(n.items,a=>(D(),K(ae,{key:JSON.stringify(a)},["link"in a?(D(),be(al,{key:0,item:a},null,8,["item"])):"component"in a?(D(),be(Bt(a.component),z({key:1,ref_for:!0},a.props),null,16)):(D(),be(wm,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):fe("",!0),U(n.$slots,"default",{},void 0,!0)]))}}),xm=Se(pm,[["__scopeId","data-v-b98bc113"]]),_m=["aria-expanded","aria-label"],Pm={key:0,class:"text"},Im=["innerHTML"],$m={key:1,class:"vpi-more-horizontal icon"},Tm={class:"menu"},Am=ge({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const n=H(!1),t=H();vm({el:t,onBlur:a});function a(){n.value=!1}return(l,o)=>(D(),K("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:o[1]||(o[1]=i=>n.value=!0),onMouseleave:o[2]||(o[2]=i=>n.value=!1)},[X("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":n.value,"aria-label":l.label,onClick:o[0]||(o[0]=i=>n.value=!n.value)},[l.button||l.icon?(D(),K("span",Pm,[l.icon?(D(),K("span",{key:0,class:Ne([l.icon,"option-icon"])},null,2)):fe("",!0),l.button?(D(),K("span",{key:1,innerHTML:l.button},null,8,Im)):fe("",!0),o[3]||(o[3]=X("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(D(),K("span",$m))],8,_m),X("div",Tm,[s(xm,{items:l.items},{default:J(()=>[U(l.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),jo=Se(Am,[["__scopeId","data-v-cf11d7a2"]]),Bm=["href","aria-label","innerHTML"],Dm=ge({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const n=e,t=H();Ke(async()=>{var o;await Te();const l=(o=t.value)==null?void 0:o.children[0];l instanceof HTMLElement&&l.className.startsWith("vpi-social-")&&(getComputedStyle(l).maskImage||getComputedStyle(l).webkitMaskImage)==="none"&&l.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${n.icon}.svg')`)});const a=y(()=>typeof n.icon=="object"?n.icon.svg:``);return(l,o)=>(D(),K("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:l.link,"aria-label":l.ariaLabel??(typeof l.icon=="string"?l.icon:""),target:"_blank",rel:"noopener",innerHTML:a.value},null,8,Bm))}}),Lm=Se(Dm,[["__scopeId","data-v-bd121fe5"]]),Mm={class:"VPSocialLinks"},Em=ge({__name:"VPSocialLinks",props:{links:{}},setup(e){return(n,t)=>(D(),K("div",Mm,[(D(!0),K(ae,null,kt(n.links,({link:a,icon:l,ariaLabel:o})=>(D(),be(Lm,{key:a,icon:l,link:a,ariaLabel:o},null,8,["icon","link","ariaLabel"]))),128))]))}}),Go=Se(Em,[["__scopeId","data-v-7bc22406"]]),Fm={key:0,class:"group translations"},Om={class:"trans-title"},Nm={key:1,class:"group"},Rm={class:"item appearance"},Hm={class:"label"},zm={class:"appearance-action"},Wm={key:2,class:"group"},jm={class:"item social-links"},Gm=ge({__name:"VPNavBarExtra",setup(e){const{site:n,theme:t}=_e(),{localeLinks:a,currentLang:l}=ya({correspondingLink:!0}),o=y(()=>a.value.length&&l.value.label||n.value.appearance||t.value.socialLinks);return(i,r)=>o.value?(D(),be(jo,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:J(()=>[L(a).length&&L(l).label?(D(),K("div",Fm,[X("p",Om,Oe(L(l).label),1),(D(!0),K(ae,null,kt(L(a),u=>(D(),be(al,{key:u.link,item:u},null,8,["item"]))),128))])):fe("",!0),L(n).appearance&&L(n).appearance!=="force-dark"&&L(n).appearance!=="force-auto"?(D(),K("div",Nm,[X("div",Rm,[X("p",Hm,Oe(L(t).darkModeSwitchLabel||"Appearance"),1),X("div",zm,[s(zo)])])])):fe("",!0),L(t).socialLinks?(D(),K("div",Wm,[X("div",jm,[s(Go,{class:"social-links-list",links:L(t).socialLinks},null,8,["links"])])])):fe("",!0)]),_:1})):fe("",!0)}}),Ym=Se(Gm,[["__scopeId","data-v-bb2aa2f0"]]),Um=["aria-expanded"],Km=ge({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(n,t)=>(D(),K("button",{type:"button",class:Ne(["VPNavBarHamburger",{active:n.active}]),"aria-label":"mobile navigation","aria-expanded":n.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=a=>n.$emit("click"))},t[1]||(t[1]=[X("span",{class:"container"},[X("span",{class:"top"}),X("span",{class:"middle"}),X("span",{class:"bottom"})],-1)]),10,Um))}}),qm=Se(Km,[["__scopeId","data-v-e5dd9c1c"]]),Xm=["innerHTML"],Zm=ge({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:n}=_e();return(t,a)=>(D(),be(Nt,{class:Ne({VPNavBarMenuLink:!0,active:L(bn)(L(n).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:J(()=>[X("span",{innerHTML:t.item.text},null,8,Xm)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Jm=Se(Zm,[["__scopeId","data-v-e56f3d57"]]),Qm=ge({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const n=e,{page:t}=_e(),a=o=>"component"in o?!1:"link"in o?bn(t.value.relativePath,o.link,!!n.item.activeMatch):o.items.some(a),l=y(()=>a(n.item));return(o,i)=>(D(),be(jo,{class:Ne({VPNavBarMenuGroup:!0,active:L(bn)(L(t).relativePath,o.item.activeMatch,!!o.item.activeMatch)||l.value}),button:o.item.text,items:o.item.items},null,8,["class","button","items"]))}}),eg={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},tg=ge({__name:"VPNavBarMenu",setup(e){const{theme:n}=_e();return(t,a)=>L(n).nav?(D(),K("nav",eg,[a[0]||(a[0]=X("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(D(!0),K(ae,null,kt(L(n).nav,l=>(D(),K(ae,{key:JSON.stringify(l)},["link"in l?(D(),be(Jm,{key:0,item:l},null,8,["item"])):"component"in l?(D(),be(Bt(l.component),z({key:1,ref_for:!0},l.props),null,16)):(D(),be(Qm,{key:2,item:l},null,8,["item"]))],64))),128))])):fe("",!0)}}),ng=Se(tg,[["__scopeId","data-v-dc692963"]]);function ag(e){const{localeIndex:n,theme:t}=_e();function a(l){var b,h,g;const o=l.split("."),i=(b=t.value.search)==null?void 0:b.options,r=i&&typeof i=="object",u=r&&((g=(h=i.locales)==null?void 0:h[n.value])==null?void 0:g.translations)||null,c=r&&i.translations||null;let d=u,v=c,f=e;const m=o.pop();for(const k of o){let S=null;const C=f==null?void 0:f[k];C&&(S=f=C);const P=v==null?void 0:v[k];P&&(S=v=P);const x=d==null?void 0:d[k];x&&(S=d=x),C||(f=S),P||(v=S),x||(d=S)}return(d==null?void 0:d[m])??(v==null?void 0:v[m])??(f==null?void 0:f[m])??""}return a}const lg=["aria-label"],og={class:"DocSearch-Button-Container"},ig={class:"DocSearch-Button-Placeholder"},ji=ge({__name:"VPNavBarSearchButton",setup(e){const t=ag({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(a,l)=>(D(),K("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":L(t)("button.buttonAriaLabel")},[X("span",og,[l[0]||(l[0]=X("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),X("span",ig,Oe(L(t)("button.buttonText")),1)]),l[1]||(l[1]=X("span",{class:"DocSearch-Button-Keys"},[X("kbd",{class:"DocSearch-Button-Key"}),X("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,lg))}}),rg={class:"VPNavBarSearch"},sg={id:"local-search"},ug={key:1,id:"docsearch"},cg=ge({__name:"VPNavBarSearch",setup(e){const n=_d(()=>Pd(()=>import("./VPLocalSearchBox.ZsI9nk2w.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:a}=_e(),l=H(!1),o=H(!1);Ke(()=>{});function i(){l.value||(l.value=!0,setTimeout(r,16))}function r(){const v=new Event("keydown");v.key="k",v.metaKey=!0,window.dispatchEvent(v),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||r()},16)}function u(v){const f=v.target,m=f.tagName;return f.isContentEditable||m==="INPUT"||m==="SELECT"||m==="TEXTAREA"}const c=H(!1);Kl("k",v=>{(v.ctrlKey||v.metaKey)&&(v.preventDefault(),c.value=!0)}),Kl("/",v=>{u(v)||(v.preventDefault(),c.value=!0)});const d="local";return(v,f)=>{var m;return D(),K("div",rg,[L(d)==="local"?(D(),K(ae,{key:0},[c.value?(D(),be(L(n),{key:0,onClose:f[0]||(f[0]=b=>c.value=!1)})):fe("",!0),X("div",sg,[s(ji,{onClick:f[1]||(f[1]=b=>c.value=!0)})])],64)):L(d)==="algolia"?(D(),K(ae,{key:1},[l.value?(D(),be(L(t),{key:0,algolia:((m=L(a).search)==null?void 0:m.options)??L(a).algolia,onVnodeBeforeMount:f[2]||(f[2]=b=>o.value=!0)},null,8,["algolia"])):fe("",!0),o.value?fe("",!0):(D(),K("div",ug,[s(ji,{onClick:i})]))],64)):fe("",!0)])}}}),dg=ge({__name:"VPNavBarSocialLinks",setup(e){const{theme:n}=_e();return(t,a)=>L(n).socialLinks?(D(),be(Go,{key:0,class:"VPNavBarSocialLinks",links:L(n).socialLinks},null,8,["links"])):fe("",!0)}}),vg=Se(dg,[["__scopeId","data-v-0394ad82"]]),fg=["href","rel","target"],mg=["innerHTML"],gg={key:2},hg=ge({__name:"VPNavBarTitle",setup(e){const{site:n,theme:t}=_e(),{hasSidebar:a}=qt(),{currentLang:l}=ya(),o=y(()=>{var u;return typeof t.value.logoLink=="string"?t.value.logoLink:(u=t.value.logoLink)==null?void 0:u.link}),i=y(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.rel}),r=y(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.target});return(u,c)=>(D(),K("div",{class:Ne(["VPNavBarTitle",{"has-sidebar":L(a)}])},[X("a",{class:"title",href:o.value??L(Ro)(L(l).link),rel:i.value,target:r.value},[U(u.$slots,"nav-bar-title-before",{},void 0,!0),L(t).logo?(D(),be(za,{key:0,class:"logo",image:L(t).logo},null,8,["image"])):fe("",!0),L(t).siteTitle?(D(),K("span",{key:1,innerHTML:L(t).siteTitle},null,8,mg)):L(t).siteTitle===void 0?(D(),K("span",gg,Oe(L(n).title),1)):fe("",!0),U(u.$slots,"nav-bar-title-after",{},void 0,!0)],8,fg)],2))}}),yg=Se(hg,[["__scopeId","data-v-1168a8e4"]]),bg={class:"items"},kg={class:"title"},Sg=ge({__name:"VPNavBarTranslations",setup(e){const{theme:n}=_e(),{localeLinks:t,currentLang:a}=ya({correspondingLink:!0});return(l,o)=>L(t).length&&L(a).label?(D(),be(jo,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:L(n).langMenuLabel||"Change language"},{default:J(()=>[X("div",bg,[X("p",kg,Oe(L(a).label),1),(D(!0),K(ae,null,kt(L(t),i=>(D(),be(al,{key:i.link,item:i},null,8,["item"]))),128))])]),_:1},8,["label"])):fe("",!0)}}),wg=Se(Sg,[["__scopeId","data-v-88af2de4"]]),Vg={class:"wrapper"},Cg={class:"container"},pg={class:"title"},xg={class:"content"},_g={class:"content-body"},Pg=ge({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const n=e,{y:t}=es(),{hasSidebar:a}=qt(),{frontmatter:l}=_e(),o=H({});return Eo(()=>{o.value={"has-sidebar":a.value,home:l.value.layout==="home",top:t.value===0,"screen-open":n.isScreenOpen}}),(i,r)=>(D(),K("div",{class:Ne(["VPNavBar",o.value])},[X("div",Vg,[X("div",Cg,[X("div",pg,[s(yg,null,{"nav-bar-title-before":J(()=>[U(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":J(()=>[U(i.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),X("div",xg,[X("div",_g,[U(i.$slots,"nav-bar-content-before",{},void 0,!0),s(cg,{class:"search"}),s(ng,{class:"menu"}),s(wg,{class:"translations"}),s(dm,{class:"appearance"}),s(vg,{class:"social-links"}),s(Ym,{class:"extra"}),U(i.$slots,"nav-bar-content-after",{},void 0,!0),s(qm,{class:"hamburger",active:i.isScreenOpen,onClick:r[0]||(r[0]=u=>i.$emit("toggle-screen"))},null,8,["active"])])])])]),r[1]||(r[1]=X("div",{class:"divider"},[X("div",{class:"divider-line"})],-1))],2))}}),Ig=Se(Pg,[["__scopeId","data-v-6aa21345"]]),$g={key:0,class:"VPNavScreenAppearance"},Tg={class:"text"},Ag=ge({__name:"VPNavScreenAppearance",setup(e){const{site:n,theme:t}=_e();return(a,l)=>L(n).appearance&&L(n).appearance!=="force-dark"&&L(n).appearance!=="force-auto"?(D(),K("div",$g,[X("p",Tg,Oe(L(t).darkModeSwitchLabel||"Appearance"),1),s(zo)])):fe("",!0)}}),Bg=Se(Ag,[["__scopeId","data-v-b44890b2"]]),Dg=["innerHTML"],Lg=ge({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const n=xe("close-screen");return(t,a)=>(D(),be(Nt,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:L(n)},{default:J(()=>[X("span",{innerHTML:t.item.text},null,8,Dg)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Mg=Se(Lg,[["__scopeId","data-v-df37e6dd"]]),Eg=["innerHTML"],Fg=ge({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const n=xe("close-screen");return(t,a)=>(D(),be(Nt,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:L(n)},{default:J(()=>[X("span",{innerHTML:t.item.text},null,8,Eg)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),cs=Se(Fg,[["__scopeId","data-v-3e9c20e4"]]),Og={class:"VPNavScreenMenuGroupSection"},Ng={key:0,class:"title"},Rg=ge({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(n,t)=>(D(),K("div",Og,[n.text?(D(),K("p",Ng,Oe(n.text),1)):fe("",!0),(D(!0),K(ae,null,kt(n.items,a=>(D(),be(cs,{key:a.text,item:a},null,8,["item"]))),128))]))}}),Hg=Se(Rg,[["__scopeId","data-v-8133b170"]]),zg=["aria-controls","aria-expanded"],Wg=["innerHTML"],jg=["id"],Gg={key:0,class:"item"},Yg={key:1,class:"item"},Ug={key:2,class:"group"},Kg=ge({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const n=e,t=H(!1),a=y(()=>`NavScreenGroup-${n.text.replace(" ","-").toLowerCase()}`);function l(){t.value=!t.value}return(o,i)=>(D(),K("div",{class:Ne(["VPNavScreenMenuGroup",{open:t.value}])},[X("button",{class:"button","aria-controls":a.value,"aria-expanded":t.value,onClick:l},[X("span",{class:"button-text",innerHTML:o.text},null,8,Wg),i[0]||(i[0]=X("span",{class:"vpi-plus button-icon"},null,-1))],8,zg),X("div",{id:a.value,class:"items"},[(D(!0),K(ae,null,kt(o.items,r=>(D(),K(ae,{key:JSON.stringify(r)},["link"in r?(D(),K("div",Gg,[s(cs,{item:r},null,8,["item"])])):"component"in r?(D(),K("div",Yg,[(D(),be(Bt(r.component),z({ref_for:!0},r.props,{"screen-menu":""}),null,16))])):(D(),K("div",Ug,[s(Hg,{text:r.text,items:r.items},null,8,["text","items"])]))],64))),128))],8,jg)],2))}}),qg=Se(Kg,[["__scopeId","data-v-b9ab8c58"]]),Xg={key:0,class:"VPNavScreenMenu"},Zg=ge({__name:"VPNavScreenMenu",setup(e){const{theme:n}=_e();return(t,a)=>L(n).nav?(D(),K("nav",Xg,[(D(!0),K(ae,null,kt(L(n).nav,l=>(D(),K(ae,{key:JSON.stringify(l)},["link"in l?(D(),be(Mg,{key:0,item:l},null,8,["item"])):"component"in l?(D(),be(Bt(l.component),z({key:1,ref_for:!0},l.props,{"screen-menu":""}),null,16)):(D(),be(qg,{key:2,text:l.text||"",items:l.items},null,8,["text","items"]))],64))),128))])):fe("",!0)}}),Jg=ge({__name:"VPNavScreenSocialLinks",setup(e){const{theme:n}=_e();return(t,a)=>L(n).socialLinks?(D(),be(Go,{key:0,class:"VPNavScreenSocialLinks",links:L(n).socialLinks},null,8,["links"])):fe("",!0)}}),Qg={class:"list"},eh=ge({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:n,currentLang:t}=ya({correspondingLink:!0}),a=H(!1);function l(){a.value=!a.value}return(o,i)=>L(n).length&&L(t).label?(D(),K("div",{key:0,class:Ne(["VPNavScreenTranslations",{open:a.value}])},[X("button",{class:"title",onClick:l},[i[0]||(i[0]=X("span",{class:"vpi-languages icon lang"},null,-1)),bt(" "+Oe(L(t).label)+" ",1),i[1]||(i[1]=X("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),X("ul",Qg,[(D(!0),K(ae,null,kt(L(n),r=>(D(),K("li",{key:r.link,class:"item"},[s(Nt,{class:"link",href:r.link},{default:J(()=>[bt(Oe(r.text),1)]),_:2},1032,["href"])]))),128))])],2)):fe("",!0)}}),th=Se(eh,[["__scopeId","data-v-858fe1a4"]]),nh={class:"container"},ah=ge({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const n=H(null),t=ts(tl?document.body:null);return(a,l)=>(D(),be(Dt,{name:"fade",onEnter:l[0]||(l[0]=o=>t.value=!0),onAfterLeave:l[1]||(l[1]=o=>t.value=!1)},{default:J(()=>[a.open?(D(),K("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:n,id:"VPNavScreen"},[X("div",nh,[U(a.$slots,"nav-screen-content-before",{},void 0,!0),s(Zg,{class:"menu"}),s(th,{class:"translations"}),s(Bg,{class:"appearance"}),s(Jg,{class:"social-links"}),U(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):fe("",!0)]),_:3}))}}),lh=Se(ah,[["__scopeId","data-v-f2779853"]]),oh={key:0,class:"VPNav"},ih=ge({__name:"VPNav",setup(e){const{isScreenOpen:n,closeScreen:t,toggleScreen:a}=tm(),{frontmatter:l}=_e(),o=y(()=>l.value.navbar!==!1);return Re("close-screen",t),He(()=>{tl&&document.documentElement.classList.toggle("hide-nav",!o.value)}),(i,r)=>o.value?(D(),K("header",oh,[s(Ig,{"is-screen-open":L(n),onToggleScreen:L(a)},{"nav-bar-title-before":J(()=>[U(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":J(()=>[U(i.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":J(()=>[U(i.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":J(()=>[U(i.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),s(lh,{open:L(n)},{"nav-screen-content-before":J(()=>[U(i.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":J(()=>[U(i.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):fe("",!0)}}),rh=Se(ih,[["__scopeId","data-v-ae24b3ad"]]),sh=["role","tabindex"],uh={key:1,class:"items"},ch=ge({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const n=e,{collapsed:t,collapsible:a,isLink:l,isActiveLink:o,hasActiveLink:i,hasChildren:r,toggle:u}=lv(y(()=>n.item)),c=y(()=>r.value?"section":"div"),d=y(()=>l.value?"a":"div"),v=y(()=>r.value?n.depth+2===7?"p":`h${n.depth+2}`:"p"),f=y(()=>l.value?void 0:"button"),m=y(()=>[[`level-${n.depth}`],{collapsible:a.value},{collapsed:t.value},{"is-link":l.value},{"is-active":o.value},{"has-active":i.value}]);function b(g){"key"in g&&g.key!=="Enter"||!n.item.link&&u()}function h(){n.item.link&&u()}return(g,k)=>{const S=nn("VPSidebarItem",!0);return D(),be(Bt(c.value),{class:Ne(["VPSidebarItem",m.value])},{default:J(()=>[g.item.text?(D(),K("div",z({key:0,class:"item",role:f.value},Id(g.item.items?{click:b,keydown:b}:{},!0),{tabindex:g.item.items&&0}),[k[1]||(k[1]=X("div",{class:"indicator"},null,-1)),g.item.link?(D(),be(Nt,{key:0,tag:d.value,class:"link",href:g.item.link,rel:g.item.rel,target:g.item.target},{default:J(()=>[(D(),be(Bt(v.value),{class:"text",innerHTML:g.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(D(),be(Bt(v.value),{key:1,class:"text",innerHTML:g.item.text},null,8,["innerHTML"])),g.item.collapsed!=null&&g.item.items&&g.item.items.length?(D(),K("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:h,onKeydown:$d(h,["enter"]),tabindex:"0"},k[0]||(k[0]=[X("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):fe("",!0)],16,sh)):fe("",!0),g.item.items&&g.item.items.length?(D(),K("div",uh,[g.depth<5?(D(!0),K(ae,{key:0},kt(g.item.items,C=>(D(),be(S,{key:C.text,item:C,depth:g.depth+1},null,8,["item","depth"]))),128)):fe("",!0)])):fe("",!0)]),_:1},8,["class"])}}}),dh=Se(ch,[["__scopeId","data-v-b3fd67f8"]]),vh=ge({__name:"VPSidebarGroup",props:{items:{}},setup(e){const n=H(!0);let t=null;return Ke(()=>{t=setTimeout(()=>{t=null,n.value=!1},300)}),it(()=>{t!=null&&(clearTimeout(t),t=null)}),(a,l)=>(D(!0),K(ae,null,kt(a.items,o=>(D(),K("div",{key:o.text,class:Ne(["group",{"no-transition":n.value}])},[s(dh,{item:o,depth:0},null,8,["item"])],2))),128))}}),fh=Se(vh,[["__scopeId","data-v-c40bc020"]]),mh={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},gh=ge({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:n,hasSidebar:t}=qt(),a=e,l=H(null),o=ts(tl?document.body:null);Q([a,l],()=>{var r;a.open?(o.value=!0,(r=l.value)==null||r.focus()):o.value=!1},{immediate:!0,flush:"post"});const i=H(0);return Q(n,()=>{i.value+=1},{deep:!0}),(r,u)=>L(t)?(D(),K("aside",{key:0,class:Ne(["VPSidebar",{open:r.open}]),ref_key:"navEl",ref:l,onClick:u[0]||(u[0]=ql(()=>{},["stop"]))},[u[2]||(u[2]=X("div",{class:"curtain"},null,-1)),X("nav",mh,[u[1]||(u[1]=X("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),U(r.$slots,"sidebar-nav-before",{},void 0,!0),(D(),be(fh,{items:L(n),key:i.value},null,8,["items"])),U(r.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):fe("",!0)}}),hh=Se(gh,[["__scopeId","data-v-319d5ca6"]]),yh=ge({__name:"VPSkipLink",setup(e){const{theme:n}=_e(),t=el(),a=H();Q(()=>t.path,()=>a.value.focus());function l({target:o}){const i=document.getElementById(decodeURIComponent(o.hash).slice(1));if(i){const r=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",r)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",r),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(D(),K(ae,null,[X("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),X("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:l},Oe(L(n).skipToContentLabel||"Skip to content"),1)],64))}}),bh=Se(yh,[["__scopeId","data-v-0b0ada53"]]),kh=ge({__name:"Layout",setup(e){const{isOpen:n,open:t,close:a}=qt(),l=el();Q(()=>l.path,a),av(n,a);const{frontmatter:o}=_e(),i=Td(),r=y(()=>!!i["home-hero-image"]);return Re("hero-image-slot-exists",r),(u,c)=>{const d=nn("Content");return L(o).layout!==!1?(D(),K("div",{key:0,class:Ne(["Layout",L(o).pageClass])},[U(u.$slots,"layout-top",{},void 0,!0),s(bh),s(jd,{class:"backdrop",show:L(n),onClick:L(a)},null,8,["show","onClick"]),s(rh,null,{"nav-bar-title-before":J(()=>[U(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":J(()=>[U(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":J(()=>[U(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":J(()=>[U(u.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":J(()=>[U(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":J(()=>[U(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),s(em,{open:L(n),onOpenMenu:L(t)},null,8,["open","onOpenMenu"]),s(hh,{open:L(n)},{"sidebar-nav-before":J(()=>[U(u.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":J(()=>[U(u.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),s(Of,null,{"page-top":J(()=>[U(u.$slots,"page-top",{},void 0,!0)]),"page-bottom":J(()=>[U(u.$slots,"page-bottom",{},void 0,!0)]),"not-found":J(()=>[U(u.$slots,"not-found",{},void 0,!0)]),"home-hero-before":J(()=>[U(u.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":J(()=>[U(u.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":J(()=>[U(u.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":J(()=>[U(u.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":J(()=>[U(u.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":J(()=>[U(u.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":J(()=>[U(u.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":J(()=>[U(u.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":J(()=>[U(u.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":J(()=>[U(u.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":J(()=>[U(u.$slots,"doc-before",{},void 0,!0)]),"doc-after":J(()=>[U(u.$slots,"doc-after",{},void 0,!0)]),"doc-top":J(()=>[U(u.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":J(()=>[U(u.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":J(()=>[U(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":J(()=>[U(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":J(()=>[U(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":J(()=>[U(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":J(()=>[U(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":J(()=>[U(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),s(Wf),U(u.$slots,"layout-bottom",{},void 0,!0)],2)):(D(),be(d,{key:1}))}}}),Sh=Se(kh,[["__scopeId","data-v-5d98c3a5"]]),wh={Layout:Sh,enhanceApp:({app:e})=>{e.component("Badge",Hd)}};function yt(e,n){let t;function a(){t=Fo(),t.run(()=>n.length?n(()=>{t==null||t.stop(),a()}):n())}Q(e,l=>{l&&!t?a():l||(t==null||t.stop(),t=void 0)},{immediate:!0}),mt(()=>{t==null||t.stop()})}const $e=typeof window<"u",Yo=$e&&"IntersectionObserver"in window,Vh=$e&&("ontouchstart"in window||window.navigator.maxTouchPoints>0),Gi=$e&&"EyeDropper"in window;function Yi(e,n,t){Ch(e,n),n.set(e,t)}function Ch(e,n){if(n.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function ph(e,n,t){return e.set(ds(e,n),t),t}function cn(e,n){return e.get(ds(e,n))}function ds(e,n,t){if(typeof e=="function"?e===n:e.has(n))return arguments.length<3?n:t;throw new TypeError("Private element is not present on this object")}function vs(e,n,t){const a=n.length-1;if(a<0)return e===void 0?t:e;for(let l=0;lHt(e[a],n[a]))}function kn(e,n,t){return e==null||!n||typeof n!="string"?t:e[n]!==void 0?e[n]:(n=n.replace(/\[(\w+)\]/g,".$1"),n=n.replace(/^\./,""),vs(e,n.split("."),t))}function tt(e,n,t){if(n===!0)return e===void 0?t:e;if(n==null||typeof n=="boolean")return t;if(e!==Object(e)){if(typeof n!="function")return t;const l=n(e,t);return typeof l>"u"?t:l}if(typeof n=="string")return kn(e,n,t);if(Array.isArray(n))return vs(e,n,t);if(typeof n!="function")return t;const a=n(e,t);return typeof a>"u"?t:a}function Ot(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return Array.from({length:e},(t,a)=>n+a)}function ne(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"px";if(!(e==null||e===""))return isNaN(+e)?String(e):isFinite(+e)?`${Number(e)}${n}`:void 0}function Uo(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ui(e){let n;return e!==null&&typeof e=="object"&&((n=Object.getPrototypeOf(e))===Object.prototype||n===null)}function Ko(e){if(e&&"$el"in e){const n=e.$el;return(n==null?void 0:n.nodeType)===Node.TEXT_NODE?n.nextElementSibling:n}return e}const Ki=Object.freeze({enter:13,tab:9,delete:46,esc:27,space:32,up:38,down:40,left:37,right:39,end:35,home:36,del:46,backspace:8,insert:45,pageup:33,pagedown:34,shift:16}),Ql=Object.freeze({enter:"Enter",tab:"Tab",delete:"Delete",esc:"Escape",space:"Space",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",end:"End",home:"Home",del:"Delete",backspace:"Backspace",insert:"Insert",pageup:"PageUp",pagedown:"PageDown",shift:"Shift"});function fs(e){return Object.keys(e)}function vn(e,n){return n.every(t=>e.hasOwnProperty(t))}function qo(e,n){const t={},a=new Set(Object.keys(e));for(const l of n)a.has(l)&&(t[l]=e[l]);return t}function eo(e,n,t){const a=Object.create(null),l=Object.create(null);for(const o in e)n.some(i=>i instanceof RegExp?i.test(o):i===o)?a[o]=e[o]:l[o]=e[o];return[a,l]}function Je(e,n){const t={...e};return n.forEach(a=>delete t[a]),t}function ll(e,n){const t={};return n.forEach(a=>t[a]=e[a]),t}const ms=/^on[^a-z]/,ol=e=>ms.test(e),xh=["onAfterscriptexecute","onAnimationcancel","onAnimationend","onAnimationiteration","onAnimationstart","onAuxclick","onBeforeinput","onBeforescriptexecute","onChange","onClick","onCompositionend","onCompositionstart","onCompositionupdate","onContextmenu","onCopy","onCut","onDblclick","onFocusin","onFocusout","onFullscreenchange","onFullscreenerror","onGesturechange","onGestureend","onGesturestart","onGotpointercapture","onInput","onKeydown","onKeypress","onKeyup","onLostpointercapture","onMousedown","onMousemove","onMouseout","onMouseover","onMouseup","onMousewheel","onPaste","onPointercancel","onPointerdown","onPointerenter","onPointerleave","onPointermove","onPointerout","onPointerover","onPointerup","onReset","onSelect","onSubmit","onTouchcancel","onTouchend","onTouchmove","onTouchstart","onTransitioncancel","onTransitionend","onTransitionrun","onTransitionstart","onWheel"],_h=["ArrowUp","ArrowDown","ArrowRight","ArrowLeft","Enter","Escape","Tab"," "];function Ph(e){return e.isComposing&&_h.includes(e.key)}function ln(e){const[n,t]=eo(e,[ms]),a=Je(n,xh),[l,o]=eo(t,["class","style","id",/^data-/]);return Object.assign(l,n),Object.assign(o,a),[l,o]}function We(e){return e==null?[]:Array.isArray(e)?e:[e]}function Ih(e,n){let t=0;const a=function(){for(var l=arguments.length,o=new Array(l),i=0;ie(...o),L(n))};return a.clear=()=>{clearTimeout(t)},a.immediate=e,a}function Xe(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;return Math.max(n,Math.min(t,e))}function qi(e){const n=e.toString().trim();return n.includes(".")?n.length-n.indexOf(".")-1:0}function Xi(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"0";return e+t.repeat(Math.max(0,n-e.length))}function Zi(e,n){return(arguments.length>2&&arguments[2]!==void 0?arguments[2]:"0").repeat(Math.max(0,n-e.length))+e}function $h(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;const t=[];let a=0;for(;a1&&arguments[1]!==void 0?arguments[1]:1e3;if(e=n&&a0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2?arguments[2]:void 0;const a={};for(const l in e)a[l]=e[l];for(const l in n){const o=e[l],i=n[l];if(Ui(o)&&Ui(i)){a[l]=vt(o,i,t);continue}if(t&&Array.isArray(o)&&Array.isArray(i)){a[l]=t(o,i);continue}a[l]=i}return a}function gs(e){return e.map(n=>n.type===ae?gs(n.children):n).flat()}function mn(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";if(mn.cache.has(e))return mn.cache.get(e);const n=e.replace(/[^a-z]/gi,"-").replace(/\B([A-Z])/g,"-$1").toLowerCase();return mn.cache.set(e,n),n}mn.cache=new Map;function zn(e,n){if(!n||typeof n!="object")return[];if(Array.isArray(n))return n.map(t=>zn(e,t)).flat(1);if(n.suspense)return zn(e,n.ssContent);if(Array.isArray(n.children))return n.children.map(t=>zn(e,t)).flat(1);if(n.component){if(Object.getOwnPropertySymbols(n.component.provides).includes(e))return[n.component];if(n.component.subTree)return zn(e,n.component.subTree).flat(1)}return[]}var Ba=new WeakMap,On=new WeakMap;class Th{constructor(n){Yi(this,Ba,[]),Yi(this,On,0),this.size=n}push(n){cn(Ba,this)[cn(On,this)]=n,ph(On,this,(cn(On,this)+1)%this.size)}values(){return cn(Ba,this).slice(cn(On,this)).concat(cn(Ba,this).slice(0,cn(On,this)))}}function Ah(e){return"touches"in e?{clientX:e.touches[0].clientX,clientY:e.touches[0].clientY}:{clientX:e.clientX,clientY:e.clientY}}function Xo(e){const n=St({}),t=y(e);return He(()=>{for(const a in t.value)n[a]=t.value[a]},{flush:"sync"}),Pn(n)}function Wa(e,n){return e.includes(n)}function hs(e){return e[2].toLowerCase()+e.slice(3)}const ot=()=>[Function,Array];function Qi(e,n){return n="on"+Xn(n),!!(e[n]||e[`${n}Once`]||e[`${n}Capture`]||e[`${n}OnceCapture`]||e[`${n}CaptureOnce`])}function Zo(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a1&&arguments[1]!==void 0?arguments[1]:!0;const t=["button","[href]",'input:not([type="hidden"])',"select","textarea","[tabindex]"].map(a=>`${a}${n?':not([tabindex="-1"])':""}:not([disabled])`).join(", ");return[...e.querySelectorAll(t)]}function ys(e,n,t){let a,l=e.indexOf(document.activeElement);const o=n==="next"?1:-1;do l+=o,a=e[l];while((!a||a.offsetParent==null||!((t==null?void 0:t(a))??!0))&&l=0);return a}function gn(e,n){var a,l,o,i;const t=oa(e);if(!n)(e===document.activeElement||!e.contains(document.activeElement))&&((a=t[0])==null||a.focus());else if(n==="first")(l=t[0])==null||l.focus();else if(n==="last")(o=t.at(-1))==null||o.focus();else if(typeof n=="number")(i=t[n])==null||i.focus();else{const r=ys(t,n);r?r.focus():gn(e,n==="next"?"first":"last")}}function Da(e){return e==null||typeof e=="string"&&e.trim()===""}function bs(){}function Gn(e,n){if(!($e&&typeof CSS<"u"&&typeof CSS.supports<"u"&&CSS.supports(`selector(${n})`)))return null;try{return!!e&&e.matches(n)}catch{return null}}function il(e){return e.some(n=>Ad(n)?n.type===Bd?!1:n.type!==ae||il(n.children):!0)?e:null}function Bh(e,n){if(!$e||e===0)return n(),()=>{};const t=window.setTimeout(n,e);return()=>window.clearTimeout(t)}function Dh(e,n){const t=e.clientX,a=e.clientY,l=n.getBoundingClientRect(),o=l.left,i=l.top,r=l.right,u=l.bottom;return t>=o&&t<=r&&a>=i&&a<=u}function ja(){const e=ee(),n=t=>{e.value=t};return Object.defineProperty(n,"value",{enumerable:!0,get:()=>e.value,set:t=>e.value=t}),Object.defineProperty(n,"el",{enumerable:!0,get:()=>Ko(e.value)}),n}function Ga(e){const n=e.key.length===1,t=!e.ctrlKey&&!e.metaKey&&!e.altKey;return n&&t}const ks=["top","bottom"],Lh=["start","end","left","right"];function to(e,n){let[t,a]=e.split(" ");return a||(a=Wa(ks,t)?"start":Wa(Lh,t)?"top":"center"),{side:no(t,n),align:no(a,n)}}function no(e,n){return e==="start"?n?"right":"left":e==="end"?n?"left":"right":e}function Fl(e){return{side:{center:"center",top:"bottom",bottom:"top",left:"right",right:"left"}[e.side],align:e.align}}function Ol(e){return{side:e.side,align:{center:"center",top:"bottom",bottom:"top",left:"right",right:"left"}[e.align]}}function er(e){return{side:e.align,align:e.side}}function tr(e){return Wa(ks,e.side)?"y":"x"}class hn{constructor(n){let{x:t,y:a,width:l,height:o}=n;this.x=t,this.y=a,this.width=l,this.height=o}get top(){return this.y}get bottom(){return this.y+this.height}get left(){return this.x}get right(){return this.x+this.width}}function nr(e,n){return{x:{before:Math.max(0,n.left-e.left),after:Math.max(0,e.right-n.right)},y:{before:Math.max(0,n.top-e.top),after:Math.max(0,e.bottom-n.bottom)}}}function Ss(e){return Array.isArray(e)?new hn({x:e[0],y:e[1],width:0,height:0}):e.getBoundingClientRect()}function Jo(e){const n=e.getBoundingClientRect(),t=getComputedStyle(e),a=t.transform;if(a){let l,o,i,r,u;if(a.startsWith("matrix3d("))l=a.slice(9,-1).split(/, /),o=+l[0],i=+l[5],r=+l[12],u=+l[13];else if(a.startsWith("matrix("))l=a.slice(7,-1).split(/, /),o=+l[0],i=+l[3],r=+l[4],u=+l[5];else return new hn(n);const c=t.transformOrigin,d=n.x-r-(1-o)*parseFloat(c),v=n.y-u-(1-i)*parseFloat(c.slice(c.indexOf(" ")+1)),f=o?n.width/o:e.offsetWidth+1,m=i?n.height/i:e.offsetHeight+1;return new hn({x:d,y:v,width:f,height:m})}else return new hn(n)}function fn(e,n,t){if(typeof e.animate>"u")return{finished:Promise.resolve()};let a;try{a=e.animate(n,t)}catch{return{finished:Promise.resolve()}}return typeof a.finished>"u"&&(a.finished=new Promise(l=>{a.onfinish=()=>{l(a)}})),a}const Na=new WeakMap;function Mh(e,n){Object.keys(n).forEach(t=>{if(ol(t)){const a=hs(t),l=Na.get(e);if(n[t]==null)l==null||l.forEach(o=>{const[i,r]=o;i===a&&(e.removeEventListener(a,r),l.delete(o))});else if(!l||![...l].some(o=>o[0]===a&&o[1]===n[t])){e.addEventListener(a,n[t]);const o=l||new Set;o.add([a,n[t]]),Na.has(e)||Na.set(e,o)}}else n[t]==null?e.removeAttribute(t):e.setAttribute(t,n[t])})}function Eh(e,n){Object.keys(n).forEach(t=>{if(ol(t)){const a=hs(t),l=Na.get(e);l==null||l.forEach(o=>{const[i,r]=o;i===a&&(e.removeEventListener(a,r),l.delete(o))})}else e.removeAttribute(t)})}const Nn=2.4,ar=.2126729,lr=.7151522,or=.072175,Fh=.55,Oh=.58,Nh=.57,Rh=.62,La=.03,ir=1.45,Hh=5e-4,zh=1.25,Wh=1.25,rr=.078,sr=12.82051282051282,Ma=.06,ur=.001;function cr(e,n){const t=(e.r/255)**Nn,a=(e.g/255)**Nn,l=(e.b/255)**Nn,o=(n.r/255)**Nn,i=(n.g/255)**Nn,r=(n.b/255)**Nn;let u=t*ar+a*lr+l*or,c=o*ar+i*lr+r*or;if(u<=La&&(u+=(La-u)**ir),c<=La&&(c+=(La-c)**ir),Math.abs(c-u)u){const v=(c**Fh-u**Oh)*zh;d=v-ur?0:v>-rr?v-v*sr*Ma:v+Ma}return d*100}function jh(e,n){n=Array.isArray(n)?n.slice(0,-1).map(t=>`'${t}'`).join(", ")+` or '${n.at(-1)}'`:`'${n}'`}const Ya=.20689655172413793,Gh=e=>e>Ya**3?Math.cbrt(e):e/(3*Ya**2)+4/29,Yh=e=>e>Ya?e**3:3*Ya**2*(e-4/29);function ws(e){const n=Gh,t=n(e[1]);return[116*t-16,500*(n(e[0]/.95047)-t),200*(t-n(e[2]/1.08883))]}function Vs(e){const n=Yh,t=(e[0]+16)/116;return[n(t+e[1]/500)*.95047,n(t),n(t-e[2]/200)*1.08883]}const Uh=[[3.2406,-1.5372,-.4986],[-.9689,1.8758,.0415],[.0557,-.204,1.057]],Kh=e=>e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055,qh=[[.4124,.3576,.1805],[.2126,.7152,.0722],[.0193,.1192,.9505]],Xh=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4;function Cs(e){const n=Array(3),t=Kh,a=Uh;for(let l=0;l<3;++l)n[l]=Math.round(Xe(t(a[l][0]*e[0]+a[l][1]*e[1]+a[l][2]*e[2]))*255);return{r:n[0],g:n[1],b:n[2]}}function Qo(e){let{r:n,g:t,b:a}=e;const l=[0,0,0],o=Xh,i=qh;n=o(n/255),t=o(t/255),a=o(a/255);for(let r=0;r<3;++r)l[r]=i[r][0]*n+i[r][1]*t+i[r][2]*a;return l}function ao(e){return!!e&&/^(#|var\(--|(rgb|hsl)a?\()/.test(e)}function Zh(e){return ao(e)&&!/^((rgb|hsl)a?\()?var\(--/.test(e)}const dr=/^(?(?:rgb|hsl)a?)\((?.+)\)/,Jh={rgb:(e,n,t,a)=>({r:e,g:n,b:t,a}),rgba:(e,n,t,a)=>({r:e,g:n,b:t,a}),hsl:(e,n,t,a)=>vr({h:e,s:n,l:t,a}),hsla:(e,n,t,a)=>vr({h:e,s:n,l:t,a}),hsv:(e,n,t,a)=>Gt({h:e,s:n,v:t,a}),hsva:(e,n,t,a)=>Gt({h:e,s:n,v:t,a})};function Pt(e){if(typeof e=="number")return{r:(e&16711680)>>16,g:(e&65280)>>8,b:e&255};if(typeof e=="string"&&dr.test(e)){const{groups:n}=e.match(dr),{fn:t,values:a}=n,l=a.split(/,\s*/).map(o=>o.endsWith("%")&&["hsl","hsla","hsv","hsva"].includes(t)?parseFloat(o)/100:parseFloat(o));return Jh[t](...l)}else if(typeof e=="string"){let n=e.startsWith("#")?e.slice(1):e;return[3,4].includes(n.length)?n=n.split("").map(t=>t+t).join(""):[6,8].includes(n.length),Is(n)}else if(typeof e=="object"){if(vn(e,["r","g","b"]))return e;if(vn(e,["h","s","l"]))return Gt(ei(e));if(vn(e,["h","s","v"]))return Gt(e)}throw new TypeError(`Invalid color: ${e==null?e:String(e)||e.constructor.name} -Expected #hex, #hexa, rgb(), rgba(), hsl(), hsla(), object or number`)}function Gt(e){const{h:n,s:t,v:a,a:l}=e,o=r=>{const u=(r+n/60)%6;return a-a*t*Math.max(Math.min(u,4-u,1),0)},i=[o(5),o(3),o(1)].map(r=>Math.round(r*255));return{r:i[0],g:i[1],b:i[2],a:l}}function vr(e){return Gt(ei(e))}function rl(e){if(!e)return{h:0,s:1,v:1,a:1};const n=e.r/255,t=e.g/255,a=e.b/255,l=Math.max(n,t,a),o=Math.min(n,t,a);let i=0;l!==o&&(l===n?i=60*(0+(t-a)/(l-o)):l===t?i=60*(2+(a-n)/(l-o)):l===a&&(i=60*(4+(n-t)/(l-o)))),i<0&&(i=i+360);const r=l===0?0:(l-o)/l,u=[i,r,l];return{h:u[0],s:u[1],v:u[2],a:e.a}}function ps(e){const{h:n,s:t,v:a,a:l}=e,o=a-a*t/2,i=o===1||o===0?0:(a-o)/Math.min(o,1-o);return{h:n,s:i,l:o,a:l}}function ei(e){const{h:n,s:t,l:a,a:l}=e,o=a+t*Math.min(a,1-a),i=o===0?0:2-2*a/o;return{h:n,s:i,v:o,a:l}}function xs(e){let{r:n,g:t,b:a,a:l}=e;return l===void 0?`rgb(${n}, ${t}, ${a})`:`rgba(${n}, ${t}, ${a}, ${l})`}function _s(e){return xs(Gt(e))}function Ea(e){const n=Math.round(e).toString(16);return("00".substr(0,2-n.length)+n).toUpperCase()}function Ps(e){let{r:n,g:t,b:a,a:l}=e;return`#${[Ea(n),Ea(t),Ea(a),l!==void 0?Ea(Math.round(l*255)):""].join("")}`}function Is(e){e=Qh(e);let[n,t,a,l]=$h(e,2).map(o=>parseInt(o,16));return l=l===void 0?l:l/255,{r:n,g:t,b:a,a:l}}function $s(e){const n=Is(e);return rl(n)}function Ts(e){return Ps(Gt(e))}function Qh(e){return e.startsWith("#")&&(e=e.slice(1)),e=e.replace(/([^0-9a-f])/gi,"F"),(e.length===3||e.length===4)&&(e=e.split("").map(n=>n+n).join("")),e.length!==6&&(e=Xi(Xi(e,6),8,"F")),e}function ey(e,n){const t=ws(Qo(e));return t[0]=t[0]+n*10,Cs(Vs(t))}function ty(e,n){const t=ws(Qo(e));return t[0]=t[0]-n*10,Cs(Vs(t))}function lo(e){const n=Pt(e);return Qo(n)[1]}function ny(e,n){const t=lo(e),a=lo(n),l=Math.max(t,a),o=Math.min(t,a);return(l+.05)/(o+.05)}function As(e){const n=Math.abs(cr(Pt(0),Pt(e)));return Math.abs(cr(Pt(16777215),Pt(e)))>Math.min(n,50)?"#fff":"#000"}function B(e,n){return t=>Object.keys(e).reduce((a,l)=>{const i=typeof e[l]=="object"&&e[l]!=null&&!Array.isArray(e[l])?e[l]:{type:e[l]};return t&&l in t?a[l]={...i,default:t[l]}:a[l]=i,n&&!a[l].source&&(a[l].source=n),a},{})}const ie=B({class:[String,Array,Object],style:{type:[String,Array,Object],default:null}},"component");function Ye(e,n){const t=Dd();if(!t)throw new Error(`[Vuetify] ${e} must be called from inside a setup function`);return t}function zt(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"composables";const n=Ye(e).type;return mn((n==null?void 0:n.aliasName)||(n==null?void 0:n.name))}let Bs=0,Ra=new WeakMap;function rt(){const e=Ye("getUid");if(Ra.has(e))return Ra.get(e);{const n=Bs++;return Ra.set(e,n),n}}rt.reset=()=>{Bs=0,Ra=new WeakMap};function ay(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ye("injectSelf");const{provides:t}=n;if(t&&e in t)return t[e]}const Yn=Symbol.for("vuetify:defaults");function ly(e){return H(e)}function ti(){const e=xe(Yn);if(!e)throw new Error("[Vuetify] Could not find defaults instance");return e}function Ge(e,n){const t=ti(),a=H(e),l=y(()=>{if(L(n==null?void 0:n.disabled))return t.value;const i=L(n==null?void 0:n.scoped),r=L(n==null?void 0:n.reset),u=L(n==null?void 0:n.root);if(a.value==null&&!(i||r||u))return t.value;let c=vt(a.value,{prev:t.value});if(i)return c;if(r||u){const d=Number(r||1/0);for(let v=0;v<=d&&!(!c||!("prev"in c));v++)c=c.prev;return c&&typeof u=="string"&&u in c&&(c=vt(vt(c,{prev:c}),c[u])),c}return c.prev?vt(c.prev,c):c});return Re(Yn,l),l}function oy(e,n){var t,a;return typeof((t=e.props)==null?void 0:t[n])<"u"||typeof((a=e.props)==null?void 0:a[mn(n)])<"u"}function iy(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ti();const a=Ye("useDefaults");if(n=n??a.type.name??a.type.__name,!n)throw new Error("[Vuetify] Could not determine component name");const l=y(()=>{var u;return(u=t.value)==null?void 0:u[e._as??n]}),o=new Proxy(e,{get(u,c){var v,f,m,b,h,g,k;const d=Reflect.get(u,c);return c==="class"||c==="style"?[(v=l.value)==null?void 0:v[c],d].filter(S=>S!=null):typeof c=="string"&&!oy(a.vnode,c)?((f=l.value)==null?void 0:f[c])!==void 0?(m=l.value)==null?void 0:m[c]:((h=(b=t.value)==null?void 0:b.global)==null?void 0:h[c])!==void 0?(k=(g=t.value)==null?void 0:g.global)==null?void 0:k[c]:d:d}}),i=ee();He(()=>{if(l.value){const u=Object.entries(l.value).filter(c=>{let[d]=c;return d.startsWith(d[0].toUpperCase())});i.value=u.length?Object.fromEntries(u):void 0}else i.value=void 0});function r(){const u=ay(Yn,a);Re(Yn,y(()=>i.value?vt((u==null?void 0:u.value)??{},i.value):u==null?void 0:u.value))}return{props:o,provideSubDefaults:r}}function pt(e){if(e._setup=e._setup??e.setup,!e.name)return e;if(e._setup){e.props=B(e.props??{},e.name)();const n=Object.keys(e.props).filter(t=>t!=="class"&&t!=="style");e.filterProps=function(a){return qo(a,n)},e.props._as=String,e.setup=function(a,l){const o=ti();if(!o.value)return e._setup(a,l);const{props:i,provideSubDefaults:r}=iy(a,a._as??e.name,o),u=e._setup(i,l);return r(),u}}return e}function R(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return n=>(e?pt:ge)(n)}function ry(e,n){return n.props=e,n}function Wt(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"div",t=arguments.length>2?arguments[2]:void 0;return R()({name:t??Xn(ns(e.replace(/__/g,"-"))),props:{tag:{type:String,default:n},...ie()},setup(a,l){let{slots:o}=l;return()=>{var i;return an(a.tag,{class:[e,a.class],style:a.style},(i=o.default)==null?void 0:i.call(o))}}})}function Ds(e){if(typeof e.getRootNode!="function"){for(;e.parentNode;)e=e.parentNode;return e!==document?null:document}const n=e.getRootNode();return n!==document&&n.getRootNode({composed:!0})!==document?null:n}const ia="cubic-bezier(0.4, 0, 0.2, 1)",sy="cubic-bezier(0.0, 0, 0.2, 1)",uy="cubic-bezier(0.4, 0, 1, 1)";function fr(e,n,t){return Object.keys(e).filter(a=>ol(a)&&a.endsWith(n)).reduce((a,l)=>(a[l.slice(0,-n.length)]=o=>e[l](o,t(o)),a),{})}function ni(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;for(;e;){if(n?cy(e):ai(e))return e;e=e.parentElement}return document.scrollingElement}function Ua(e,n){const t=[];if(n&&e&&!n.contains(e))return t;for(;e&&(ai(e)&&t.push(e),e!==n);)e=e.parentElement;return t}function ai(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;const n=window.getComputedStyle(e);return n.overflowY==="scroll"||n.overflowY==="auto"&&e.scrollHeight>e.clientHeight}function cy(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;const n=window.getComputedStyle(e);return["scroll","auto"].includes(n.overflowY)}function dy(e){for(;e;){if(window.getComputedStyle(e).position==="fixed")return!0;e=e.offsetParent}return!1}function W(e){const n=Ye("useRender");n.render=e}function de(e,n,t){let a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:v=>v,l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:v=>v;const o=Ye("useProxiedModel"),i=H(e[n]!==void 0?e[n]:t),r=mn(n),c=r!==n?y(()=>{var v,f,m,b;return e[n],!!(((v=o.vnode.props)!=null&&v.hasOwnProperty(n)||(f=o.vnode.props)!=null&&f.hasOwnProperty(r))&&((m=o.vnode.props)!=null&&m.hasOwnProperty(`onUpdate:${n}`)||(b=o.vnode.props)!=null&&b.hasOwnProperty(`onUpdate:${r}`)))}):y(()=>{var v,f;return e[n],!!((v=o.vnode.props)!=null&&v.hasOwnProperty(n)&&((f=o.vnode.props)!=null&&f.hasOwnProperty(`onUpdate:${n}`)))});yt(()=>!c.value,()=>{Q(()=>e[n],v=>{i.value=v})});const d=y({get(){const v=e[n];return a(c.value?v:i.value)},set(v){const f=l(v),m=Ze(c.value?e[n]:i.value);m===f||a(m)===v||(i.value=f,o==null||o.emit(`update:${n}`,f))}});return Object.defineProperty(d,"externalValue",{get:()=>c.value?e[n]:i.value}),d}const vy={badge:"Badge",open:"Open",close:"Close",dismiss:"Dismiss",confirmEdit:{ok:"OK",cancel:"Cancel"},dataIterator:{noResultsText:"No matching records found",loadingText:"Loading items..."},dataTable:{itemsPerPageText:"Rows per page:",ariaLabel:{sortDescending:"Sorted descending.",sortAscending:"Sorted ascending.",sortNone:"Not sorted.",activateNone:"Activate to remove sorting.",activateDescending:"Activate to sort descending.",activateAscending:"Activate to sort ascending."},sortBy:"Sort by"},dataFooter:{itemsPerPageText:"Items per page:",itemsPerPageAll:"All",nextPage:"Next page",prevPage:"Previous page",firstPage:"First page",lastPage:"Last page",pageText:"{0}-{1} of {2}"},dateRangeInput:{divider:"to"},datePicker:{itemsSelected:"{0} selected",range:{title:"Select dates",header:"Enter dates"},title:"Select date",header:"Enter date",input:{placeholder:"Enter date"}},noDataText:"No data available",carousel:{prev:"Previous visual",next:"Next visual",ariaLabel:{delimiter:"Carousel slide {0} of {1}"}},calendar:{moreEvents:"{0} more",today:"Today"},input:{clear:"Clear {0}",prependAction:"{0} prepended action",appendAction:"{0} appended action",otp:"Please enter OTP character {0}"},fileInput:{counter:"{0} files",counterSize:"{0} files ({1} in total)"},timePicker:{am:"AM",pm:"PM",title:"Select Time"},pagination:{ariaLabel:{root:"Pagination Navigation",next:"Next page",previous:"Previous page",page:"Go to page {0}",currentPage:"Page {0}, Current page",first:"First page",last:"Last page"}},stepper:{next:"Next",prev:"Previous"},rating:{ariaLabel:{item:"Rating {0} of {1}"}},loading:"Loading...",infiniteScroll:{loadMore:"Load more",empty:"No more"}},mr="$vuetify.",gr=(e,n)=>e.replace(/\{(\d+)\}/g,(t,a)=>String(n[+a])),Ls=(e,n,t)=>function(a){for(var l=arguments.length,o=new Array(l>1?l-1:0),i=1;inew Intl.NumberFormat([e.value,n.value],a).format(t)}function Nl(e,n,t){const a=de(e,n,e[n]??t.value);return a.value=e[n]??t.value,Q(t,l=>{e[n]==null&&(a.value=t.value)}),a}function Es(e){return n=>{const t=Nl(n,"locale",e.current),a=Nl(n,"fallback",e.fallback),l=Nl(n,"messages",e.messages);return{name:"vuetify",current:t,fallback:a,messages:l,t:Ls(t,a,l),n:Ms(t,a),provide:Es({current:t,fallback:a,messages:l})}}}function fy(e){const n=ee((e==null?void 0:e.locale)??"en"),t=ee((e==null?void 0:e.fallback)??"en"),a=H({en:vy,...e==null?void 0:e.messages});return{name:"vuetify",current:n,fallback:t,messages:a,t:Ls(n,t,a),n:Ms(n,t),provide:Es({current:n,fallback:t,messages:a})}}const Un=Symbol.for("vuetify:locale");function my(e){return e.name!=null}function gy(e){const n=e!=null&&e.adapter&&my(e==null?void 0:e.adapter)?e==null?void 0:e.adapter:fy(e),t=by(n,e);return{...n,...t}}function qe(){const e=xe(Un);if(!e)throw new Error("[Vuetify] Could not find injected locale instance");return e}function hy(e){const n=xe(Un);if(!n)throw new Error("[Vuetify] Could not find injected locale instance");const t=n.provide(e),a=ky(t,n.rtl,e),l={...t,...a};return Re(Un,l),l}function yy(){return{af:!1,ar:!0,bg:!1,ca:!1,ckb:!1,cs:!1,de:!1,el:!1,en:!1,es:!1,et:!1,fa:!0,fi:!1,fr:!1,hr:!1,hu:!1,he:!0,id:!1,it:!1,ja:!1,km:!1,ko:!1,lv:!1,lt:!1,nl:!1,no:!1,pl:!1,pt:!1,ro:!1,ru:!1,sk:!1,sl:!1,srCyrl:!1,srLatn:!1,sv:!1,th:!1,tr:!1,az:!1,uk:!1,vi:!1,zhHans:!1,zhHant:!1}}function by(e,n){const t=H((n==null?void 0:n.rtl)??yy()),a=y(()=>t.value[e.current.value]??!1);return{isRtl:a,rtl:t,rtlClasses:y(()=>`v-locale--is-${a.value?"rtl":"ltr"}`)}}function ky(e,n,t){const a=y(()=>t.rtl??n.value[e.current.value]??!1);return{isRtl:a,rtl:n,rtlClasses:y(()=>`v-locale--is-${a.value?"rtl":"ltr"}`)}}function nt(){const e=xe(Un);if(!e)throw new Error("[Vuetify] Could not find injected rtl instance");return{isRtl:e.isRtl,rtlClasses:e.rtlClasses}}const sl={"001":1,AD:1,AE:6,AF:6,AG:0,AI:1,AL:1,AM:1,AN:1,AR:1,AS:0,AT:1,AU:1,AX:1,AZ:1,BA:1,BD:0,BE:1,BG:1,BH:6,BM:1,BN:1,BR:0,BS:0,BT:0,BW:0,BY:1,BZ:0,CA:0,CH:1,CL:1,CM:1,CN:1,CO:0,CR:1,CY:1,CZ:1,DE:1,DJ:6,DK:1,DM:0,DO:0,DZ:6,EC:1,EE:1,EG:6,ES:1,ET:0,FI:1,FJ:1,FO:1,FR:1,GB:1,"GB-alt-variant":0,GE:1,GF:1,GP:1,GR:1,GT:0,GU:0,HK:0,HN:0,HR:1,HU:1,ID:0,IE:1,IL:0,IN:0,IQ:6,IR:6,IS:1,IT:1,JM:0,JO:6,JP:0,KE:0,KG:1,KH:0,KR:0,KW:6,KZ:1,LA:0,LB:1,LI:1,LK:1,LT:1,LU:1,LV:1,LY:6,MC:1,MD:1,ME:1,MH:0,MK:1,MM:0,MN:1,MO:0,MQ:1,MT:0,MV:5,MX:0,MY:1,MZ:0,NI:0,NL:1,NO:1,NP:0,NZ:1,OM:6,PA:0,PE:0,PH:0,PK:0,PL:1,PR:0,PT:0,PY:0,QA:6,RE:1,RO:1,RS:1,RU:1,SA:0,SD:6,SE:1,SG:0,SI:1,SK:1,SM:1,SV:0,SY:6,TH:0,TJ:1,TM:1,TR:1,TT:0,TW:0,UA:1,UM:0,US:0,UY:1,UZ:1,VA:1,VE:0,VI:0,VN:1,WS:0,XK:1,YE:0,ZA:0,ZW:0};function Sy(e,n,t){const a=[];let l=[];const o=Fs(e),i=Os(e),r=t??sl[n.slice(-2).toUpperCase()]??0,u=(o.getDay()-r+7)%7,c=(i.getDay()-r+7)%7;for(let d=0;d0&&a.push(l),a}function wy(e,n,t){const a=t??sl[n.slice(-2).toUpperCase()]??0,l=new Date(e);for(;l.getDay()!==a;)l.setDate(l.getDate()-1);return l}function Vy(e,n){const t=new Date(e),a=((sl[n.slice(-2).toUpperCase()]??0)+6)%7;for(;t.getDay()!==a;)t.setDate(t.getDate()+1);return t}function Fs(e){return new Date(e.getFullYear(),e.getMonth(),1)}function Os(e){return new Date(e.getFullYear(),e.getMonth()+1,0)}function Cy(e){const n=e.split("-").map(Number);return new Date(n[0],n[1]-1,n[2])}const py=/^([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))$/;function Ns(e){if(e==null)return new Date;if(e instanceof Date)return e;if(typeof e=="string"){let n;if(py.test(e))return Cy(e);if(n=Date.parse(e),!isNaN(n))return new Date(n)}return null}const hr=new Date(2e3,0,2);function xy(e,n){const t=n??sl[e.slice(-2).toUpperCase()]??0;return Ot(7).map(a=>{const l=new Date(hr);return l.setDate(hr.getDate()+t+a),new Intl.DateTimeFormat(e,{weekday:"narrow"}).format(l)})}function _y(e,n,t,a){const l=Ns(e)??new Date,o=a==null?void 0:a[n];if(typeof o=="function")return o(l,n,t);let i={};switch(n){case"fullDate":i={year:"numeric",month:"long",day:"numeric"};break;case"fullDateWithWeekday":i={weekday:"long",year:"numeric",month:"long",day:"numeric"};break;case"normalDate":const r=l.getDate(),u=new Intl.DateTimeFormat(t,{month:"long"}).format(l);return`${r} ${u}`;case"normalDateWithWeekday":i={weekday:"short",day:"numeric",month:"short"};break;case"shortDate":i={month:"short",day:"numeric"};break;case"year":i={year:"numeric"};break;case"month":i={month:"long"};break;case"monthShort":i={month:"short"};break;case"monthAndYear":i={month:"long",year:"numeric"};break;case"monthAndDate":i={month:"long",day:"numeric"};break;case"weekday":i={weekday:"long"};break;case"weekdayShort":i={weekday:"short"};break;case"dayOfMonth":return new Intl.NumberFormat(t).format(l.getDate());case"hours12h":i={hour:"numeric",hour12:!0};break;case"hours24h":i={hour:"numeric",hour12:!1};break;case"minutes":i={minute:"numeric"};break;case"seconds":i={second:"numeric"};break;case"fullTime":i={hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"fullTime12h":i={hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"fullTime24h":i={hour:"numeric",minute:"numeric",second:"numeric",hour12:!1};break;case"fullDateTime":i={year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"fullDateTime12h":i={year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"fullDateTime24h":i={year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1};break;case"keyboardDate":i={year:"numeric",month:"2-digit",day:"2-digit"};break;case"keyboardDateTime":i={year:"numeric",month:"2-digit",day:"2-digit",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1};break;case"keyboardDateTime12h":i={year:"numeric",month:"2-digit",day:"2-digit",hour:"numeric",minute:"numeric",second:"numeric",hour12:!0};break;case"keyboardDateTime24h":i={year:"numeric",month:"2-digit",day:"2-digit",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1};break;default:i=o??{timeZone:"UTC",timeZoneName:"short"}}return new Intl.DateTimeFormat(t,i).format(l)}function Py(e,n){const t=e.toJsDate(n),a=t.getFullYear(),l=Zi(String(t.getMonth()+1),2,"0"),o=Zi(String(t.getDate()),2,"0");return`${a}-${l}-${o}`}function Iy(e){const[n,t,a]=e.split("-").map(Number);return new Date(n,t-1,a)}function $y(e,n){const t=new Date(e);return t.setMinutes(t.getMinutes()+n),t}function Ty(e,n){const t=new Date(e);return t.setHours(t.getHours()+n),t}function Ay(e,n){const t=new Date(e);return t.setDate(t.getDate()+n),t}function By(e,n){const t=new Date(e);return t.setDate(t.getDate()+n*7),t}function Dy(e,n){const t=new Date(e);return t.setDate(1),t.setMonth(t.getMonth()+n),t}function Ly(e){return e.getFullYear()}function My(e){return e.getMonth()}function Ey(e){return e.getDate()}function Fy(e){return new Date(e.getFullYear(),e.getMonth()+1,1)}function Oy(e){return new Date(e.getFullYear(),e.getMonth()-1,1)}function Ny(e){return e.getHours()}function Ry(e){return e.getMinutes()}function Hy(e){return new Date(e.getFullYear(),0,1)}function zy(e){return new Date(e.getFullYear(),11,31)}function Wy(e,n){return Ka(e,n[0])&&Yy(e,n[1])}function jy(e){const n=new Date(e);return n instanceof Date&&!isNaN(n.getTime())}function Ka(e,n){return e.getTime()>n.getTime()}function Gy(e,n){return Ka(oo(e),oo(n))}function Yy(e,n){return e.getTime(){t.locale=e.locale[a]??a??t.locale}),t}function ba(){const e=xe(Rs);if(!e)throw new Error("[Vuetify] Could not find injected date options");const n=qe();return Hs(e,n)}function ob(e,n){const t=e.toJsDate(n);let a=t.getFullYear(),l=new Date(a,0,1);if(t=r&&(a=a+1,l=r)}const o=Math.abs(t.getTime()-l.getTime()),i=Math.ceil(o/(1e3*60*60*24));return Math.floor(i/7)+1}const ul=["sm","md","lg","xl","xxl"],io=Symbol.for("vuetify:display"),kr={mobileBreakpoint:"lg",thresholds:{xs:0,sm:600,md:960,lg:1280,xl:1920,xxl:2560}},ib=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:kr;return vt(kr,e)};function Sr(e){return $e&&!e?window.innerWidth:typeof e=="object"&&e.clientWidth||0}function wr(e){return $e&&!e?window.innerHeight:typeof e=="object"&&e.clientHeight||0}function Vr(e){const n=$e&&!e?window.navigator.userAgent:"ssr";function t(b){return!!n.match(b)}const a=t(/android/i),l=t(/iphone|ipad|ipod/i),o=t(/cordova/i),i=t(/electron/i),r=t(/chrome/i),u=t(/edge/i),c=t(/firefox/i),d=t(/opera/i),v=t(/win/i),f=t(/mac/i),m=t(/linux/i);return{android:a,ios:l,cordova:o,electron:i,chrome:r,edge:u,firefox:c,opera:d,win:v,mac:f,linux:m,touch:Vh,ssr:n==="ssr"}}function rb(e,n){const{thresholds:t,mobileBreakpoint:a}=ib(e),l=ee(wr(n)),o=ee(Vr(n)),i=St({}),r=ee(Sr(n));function u(){l.value=wr(),r.value=Sr()}function c(){u(),o.value=Vr()}return He(()=>{const d=r.value=t.xxl,g=d?"xs":v?"sm":f?"md":m?"lg":b?"xl":"xxl",k=typeof a=="number"?a:t[a],S=r.value0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();const t=xe(io);if(!t)throw new Error("Could not find Vuetify display injection");const a=y(()=>{if(e.mobile!=null)return e.mobile;if(!e.mobileBreakpoint)return t.mobile.value;const o=typeof e.mobileBreakpoint=="number"?e.mobileBreakpoint:t.thresholds.value[e.mobileBreakpoint];return t.width.valuen?{[`${n}--mobile`]:a.value}:{});return{...t,displayClasses:l,mobile:a}}const zs=Symbol.for("vuetify:goto");function Ws(){return{container:void 0,duration:300,layout:!1,offset:0,easing:"easeInOutCubic",patterns:{linear:e=>e,easeInQuad:e=>e**2,easeOutQuad:e=>e*(2-e),easeInOutQuad:e=>e<.5?2*e**2:-1+(4-2*e)*e,easeInCubic:e=>e**3,easeOutCubic:e=>--e**3+1,easeInOutCubic:e=>e<.5?4*e**3:(e-1)*(2*e-2)*(2*e-2)+1,easeInQuart:e=>e**4,easeOutQuart:e=>1- --e**4,easeInOutQuart:e=>e<.5?8*e**4:1-8*--e**4,easeInQuint:e=>e**5,easeOutQuint:e=>1+--e**5,easeInOutQuint:e=>e<.5?16*e**5:1+16*--e**5}}}function sb(e){return li(e)??(document.scrollingElement||document.body)}function li(e){return typeof e=="string"?document.querySelector(e):Ko(e)}function Rl(e,n,t){if(typeof e=="number")return n&&t?-e:e;let a=li(e),l=0;for(;a;)l+=n?a.offsetLeft:a.offsetTop,a=a.offsetParent;return l}function ub(e,n){return{rtl:n.isRtl,options:vt(Ws(),e)}}async function Cr(e,n,t,a){const l=t?"scrollLeft":"scrollTop",o=vt((a==null?void 0:a.options)??Ws(),n),i=a==null?void 0:a.rtl.value,r=(typeof e=="number"?e:li(e))??0,u=o.container==="parent"&&r instanceof HTMLElement?r.parentElement:sb(o.container),c=typeof o.easing=="function"?o.easing:o.patterns[o.easing];if(!c)throw new TypeError(`Easing function "${o.easing}" not found.`);let d;if(typeof r=="number")d=Rl(r,t,i);else if(d=Rl(r,t,i)-Rl(u,t,i),o.layout){const b=window.getComputedStyle(r).getPropertyValue("--v-layout-top");b&&(d-=parseInt(b,10))}d+=o.offset,d=db(u,d,!!i,!!t);const v=u[l]??0;if(d===v)return Promise.resolve(d);const f=performance.now();return new Promise(m=>requestAnimationFrame(function b(h){const k=(h-f)/o.duration,S=Math.floor(v+(d-v)*c(Xe(k,0,1)));if(u[l]=S,k>=1&&Math.abs(S-u[l])<10)return m(d);if(k>2)return m(u[l]);requestAnimationFrame(b)}))}function cb(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const n=xe(zs),{isRtl:t}=nt();if(!n)throw new Error("[Vuetify] Could not find injected goto instance");const a={...n,rtl:y(()=>n.rtl.value||t.value)};async function l(o,i){return Cr(o,vt(e,i),!1,a)}return l.horizontal=async(o,i)=>Cr(o,vt(e,i),!0,a),l}function db(e,n,t,a){const{scrollWidth:l,scrollHeight:o}=e,[i,r]=e===document.scrollingElement?[window.innerWidth,window.innerHeight]:[e.offsetWidth,e.offsetHeight];let u,c;return a?t?(u=-(l-i),c=0):(u=0,c=l-i):(u=0,c=o+-r),Math.max(Math.min(n,c),u)}const vb={collapse:"mdi-chevron-up",complete:"mdi-check",cancel:"mdi-close-circle",close:"mdi-close",delete:"mdi-close-circle",clear:"mdi-close-circle",success:"mdi-check-circle",info:"mdi-information",warning:"mdi-alert-circle",error:"mdi-close-circle",prev:"mdi-chevron-left",next:"mdi-chevron-right",checkboxOn:"mdi-checkbox-marked",checkboxOff:"mdi-checkbox-blank-outline",checkboxIndeterminate:"mdi-minus-box",delimiter:"mdi-circle",sortAsc:"mdi-arrow-up",sortDesc:"mdi-arrow-down",expand:"mdi-chevron-down",menu:"mdi-menu",subgroup:"mdi-menu-down",dropdown:"mdi-menu-down",radioOn:"mdi-radiobox-marked",radioOff:"mdi-radiobox-blank",edit:"mdi-pencil",ratingEmpty:"mdi-star-outline",ratingFull:"mdi-star",ratingHalf:"mdi-star-half-full",loading:"mdi-cached",first:"mdi-page-first",last:"mdi-page-last",unfold:"mdi-unfold-more-horizontal",file:"mdi-paperclip",plus:"mdi-plus",minus:"mdi-minus",calendar:"mdi-calendar",treeviewCollapse:"mdi-menu-down",treeviewExpand:"mdi-menu-right",eyeDropper:"mdi-eyedropper"},fb={component:e=>an(ii,{...e,class:"mdi"})},ve=[String,Function,Object,Array],ro=Symbol.for("vuetify:icons"),cl=B({icon:{type:ve},tag:{type:String,required:!0}},"icon"),so=R()({name:"VComponentIcon",props:cl(),setup(e,n){let{slots:t}=n;return()=>{const a=e.icon;return s(e.tag,null,{default:()=>{var l;return[e.icon?s(a,null,null):(l=t.default)==null?void 0:l.call(t)]}})}}}),oi=pt({name:"VSvgIcon",inheritAttrs:!1,props:cl(),setup(e,n){let{attrs:t}=n;return()=>s(e.tag,z(t,{style:null}),{default:()=>[s("svg",{class:"v-icon__svg",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",role:"img","aria-hidden":"true"},[Array.isArray(e.icon)?e.icon.map(a=>Array.isArray(a)?s("path",{d:a[0],"fill-opacity":a[1]},null):s("path",{d:a},null)):s("path",{d:e.icon},null)])]})}}),mb=pt({name:"VLigatureIcon",props:cl(),setup(e){return()=>s(e.tag,null,{default:()=>[e.icon]})}}),ii=pt({name:"VClassIcon",props:cl(),setup(e){return()=>s(e.tag,{class:e.icon},null)}});function gb(){return{svg:{component:oi},class:{component:ii}}}function hb(e){const n=gb(),t=(e==null?void 0:e.defaultSet)??"mdi";return t==="mdi"&&!n.mdi&&(n.mdi=fb),vt({defaultSet:t,sets:n,aliases:{...vb,vuetify:["M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z",["M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z",.6]],"vuetify-outline":"svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z","vuetify-play":["m6.376 13.184-4.11-7.192C1.505 4.66 2.467 3 4.003 3h8.532l-.953 1.576-.006.01-.396.677c-.429.732-.214 1.507.194 2.015.404.503 1.092.878 1.869.806a3.72 3.72 0 0 1 1.005.022c.276.053.434.143.523.237.138.146.38.635-.25 2.09-.893 1.63-1.553 1.722-1.847 1.677-.213-.033-.468-.158-.756-.406a4.95 4.95 0 0 1-.8-.927c-.39-.564-1.04-.84-1.66-.846-.625-.006-1.316.27-1.693.921l-.478.826-.911 1.506Z",["M9.093 11.552c.046-.079.144-.15.32-.148a.53.53 0 0 1 .43.207c.285.414.636.847 1.046 1.2.405.35.914.662 1.516.754 1.334.205 2.502-.698 3.48-2.495l.014-.028.013-.03c.687-1.574.774-2.852-.005-3.675-.37-.391-.861-.586-1.333-.676a5.243 5.243 0 0 0-1.447-.044c-.173.016-.393-.073-.54-.257-.145-.18-.127-.316-.082-.392l.393-.672L14.287 3h5.71c1.536 0 2.499 1.659 1.737 2.992l-7.997 13.996c-.768 1.344-2.706 1.344-3.473 0l-3.037-5.314 1.377-2.278.004-.006.004-.007.481-.831Z",.6]]}},e)}const yb=e=>{const n=xe(ro);if(!n)throw new Error("Missing Vuetify Icons provide!");return{iconData:y(()=>{var u;const a=L(e);if(!a)return{component:so};let l=a;if(typeof l=="string"&&(l=l.trim(),l.startsWith("$")&&(l=(u=n.aliases)==null?void 0:u[l.slice(1)])),Array.isArray(l))return{component:oi,icon:l};if(typeof l!="string")return{component:so,icon:l};const o=Object.keys(n.sets).find(c=>typeof l=="string"&&l.startsWith(`${c}:`)),i=o?l.slice(o.length+1):l;return{component:n.sets[o??n.defaultSet].component,icon:i}})}},ra=Symbol.for("vuetify:theme"),Pe=B({theme:String},"theme");function pr(){return{defaultTheme:"light",variations:{colors:[],lighten:0,darken:0},themes:{light:{dark:!1,colors:{background:"#FFFFFF",surface:"#FFFFFF","surface-bright":"#FFFFFF","surface-light":"#EEEEEE","surface-variant":"#424242","on-surface-variant":"#EEEEEE",primary:"#1867C0","primary-darken-1":"#1F5592",secondary:"#48A9A6","secondary-darken-1":"#018786",error:"#B00020",info:"#2196F3",success:"#4CAF50",warning:"#FB8C00"},variables:{"border-color":"#000000","border-opacity":.12,"high-emphasis-opacity":.87,"medium-emphasis-opacity":.6,"disabled-opacity":.38,"idle-opacity":.04,"hover-opacity":.04,"focus-opacity":.12,"selected-opacity":.08,"activated-opacity":.12,"pressed-opacity":.12,"dragged-opacity":.08,"theme-kbd":"#212529","theme-on-kbd":"#FFFFFF","theme-code":"#F5F5F5","theme-on-code":"#000000"}},dark:{dark:!0,colors:{background:"#121212",surface:"#212121","surface-bright":"#ccbfd6","surface-light":"#424242","surface-variant":"#a3a3a3","on-surface-variant":"#424242",primary:"#2196F3","primary-darken-1":"#277CC1",secondary:"#54B6B2","secondary-darken-1":"#48A9A6",error:"#CF6679",info:"#2196F3",success:"#4CAF50",warning:"#FB8C00"},variables:{"border-color":"#FFFFFF","border-opacity":.12,"high-emphasis-opacity":1,"medium-emphasis-opacity":.7,"disabled-opacity":.5,"idle-opacity":.1,"hover-opacity":.04,"focus-opacity":.12,"selected-opacity":.08,"activated-opacity":.12,"pressed-opacity":.16,"dragged-opacity":.08,"theme-kbd":"#212529","theme-on-kbd":"#FFFFFF","theme-code":"#343434","theme-on-code":"#CCCCCC"}}}}}function bb(){var a,l;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:pr();const n=pr();if(!e)return{...n,isDisabled:!0};const t={};for(const[o,i]of Object.entries(e.themes??{})){const r=i.dark||o==="dark"?(a=n.themes)==null?void 0:a.dark:(l=n.themes)==null?void 0:l.light;t[o]=vt(r,i)}return vt(n,{...e,themes:t})}function kb(e){const n=bb(e),t=H(n.defaultTheme),a=H(n.themes),l=y(()=>{const d={};for(const[v,f]of Object.entries(a.value)){const m=d[v]={...f,colors:{...f.colors}};if(n.variations)for(const b of n.variations.colors){const h=m.colors[b];if(h)for(const g of["lighten","darken"]){const k=g==="lighten"?ey:ty;for(const S of Ot(n.variations[g],1))m.colors[`${b}-${g}-${S}`]=Ps(k(Pt(h),S))}}for(const b of Object.keys(m.colors)){if(/^on-[a-z]/.test(b)||m.colors[`on-${b}`])continue;const h=`on-${b}`,g=Pt(m.colors[b]);m.colors[h]=As(g)}}return d}),o=y(()=>l.value[t.value]),i=y(()=>{var b;const d=[];(b=o.value)!=null&&b.dark&&dn(d,":root",["color-scheme: dark"]),dn(d,":root",xr(o.value));for(const[h,g]of Object.entries(l.value))dn(d,`.v-theme--${h}`,[`color-scheme: ${g.dark?"dark":"normal"}`,...xr(g)]);const v=[],f=[],m=new Set(Object.values(l.value).flatMap(h=>Object.keys(h.colors)));for(const h of m)/^on-[a-z]/.test(h)?dn(f,`.${h}`,[`color: rgb(var(--v-theme-${h})) !important`]):(dn(v,`.bg-${h}`,[`--v-theme-overlay-multiplier: var(--v-theme-${h}-overlay-multiplier)`,`background-color: rgb(var(--v-theme-${h})) !important`,`color: rgb(var(--v-theme-on-${h})) !important`]),dn(f,`.text-${h}`,[`color: rgb(var(--v-theme-${h})) !important`]),dn(f,`.border-${h}`,[`--v-border-color: var(--v-theme-${h})`]));return d.push(...v,...f),d.map((h,g)=>g===0?h:` ${h}`).join("")});function r(){return{style:[{children:i.value,id:"vuetify-theme-stylesheet",nonce:n.cspNonce||!1}]}}function u(d){if(n.isDisabled)return;const v=d._context.provides.usehead;if(v)if(v.push){const f=v.push(r);$e&&Q(i,()=>{f.patch(r)})}else $e?(v.addHeadObjs(y(r)),He(()=>v.updateDOM())):v.addHeadObjs(r());else{let m=function(){if(typeof document<"u"&&!f){const b=document.createElement("style");b.type="text/css",b.id="vuetify-theme-stylesheet",n.cspNonce&&b.setAttribute("nonce",n.cspNonce),f=b,document.head.appendChild(f)}f&&(f.innerHTML=i.value)},f=$e?document.getElementById("vuetify-theme-stylesheet"):null;$e?Q(i,m,{immediate:!0}):m()}}const c=y(()=>n.isDisabled?void 0:`v-theme--${t.value}`);return{install:u,isDisabled:n.isDisabled,name:t,themes:a,current:o,computedThemes:l,themeClasses:c,styles:i,global:{name:t,current:o}}}function De(e){Ye("provideTheme");const n=xe(ra,null);if(!n)throw new Error("Could not find Vuetify theme injection");const t=y(()=>e.theme??n.name.value),a=y(()=>n.themes.value[t.value]),l=y(()=>n.isDisabled?void 0:`v-theme--${t.value}`),o={...n,name:t,current:a,themeClasses:l};return Re(ra,o),o}function js(){Ye("useTheme");const e=xe(ra,null);if(!e)throw new Error("Could not find Vuetify theme injection");return e}function dn(e,n,t){e.push(`${n} { -`,...t.map(a=>` ${a}; -`),`} -`)}function xr(e){const n=e.dark?2:1,t=e.dark?1:2,a=[];for(const[l,o]of Object.entries(e.colors)){const i=Pt(o);a.push(`--v-theme-${l}: ${i.r},${i.g},${i.b}`),l.startsWith("on-")||a.push(`--v-theme-${l}-overlay-multiplier: ${lo(o)>.18?n:t}`)}for(const[l,o]of Object.entries(e.variables)){const i=typeof o=="string"&&o.startsWith("#")?Pt(o):void 0,r=i?`${i.r}, ${i.g}, ${i.b}`:void 0;a.push(`--v-${l}: ${r??o}`)}return a}function Lt(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"content";const t=ja(),a=H();if($e){const l=new ResizeObserver(o=>{e==null||e(o,l),o.length&&(n==="content"?a.value=o[0].contentRect:a.value=o[0].target.getBoundingClientRect())});it(()=>{l.disconnect()}),Q(()=>t.el,(o,i)=>{i&&(l.unobserve(i),a.value=void 0),o&&l.observe(o)},{flush:"post"})}return{resizeRef:t,contentRect:nl(a)}}const sa=Symbol.for("vuetify:layout"),Gs=Symbol.for("vuetify:layout-item"),_r=1e3,Ys=B({overlaps:{type:Array,default:()=>[]},fullHeight:Boolean},"layout"),$n=B({name:{type:String},order:{type:[Number,String],default:0},absolute:Boolean},"layout-item");function Us(){const e=xe(sa);if(!e)throw new Error("[Vuetify] Could not find injected layout");return{getLayoutItem:e.getLayoutItem,mainRect:e.mainRect,mainStyles:e.mainStyles}}function Tn(e){const n=xe(sa);if(!n)throw new Error("[Vuetify] Could not find injected layout");const t=e.id??`layout-item-${rt()}`,a=Ye("useLayoutItem");Re(Gs,{id:t});const l=ee(!1);as(()=>l.value=!0),Ld(()=>l.value=!1);const{layoutItemStyles:o,layoutItemScrimStyles:i}=n.register(a,{...e,active:y(()=>l.value?!1:e.active.value),id:t});return it(()=>n.unregister(t)),{layoutItemStyles:o,layoutRect:n.layoutRect,layoutItemScrimStyles:i}}const Sb=(e,n,t,a)=>{let l={top:0,left:0,right:0,bottom:0};const o=[{id:"",layer:{...l}}];for(const i of e){const r=n.get(i),u=t.get(i),c=a.get(i);if(!r||!u||!c)continue;const d={...l,[r.value]:parseInt(l[r.value],10)+(c.value?parseInt(u.value,10):0)};o.push({id:i,layer:d}),l=d}return o};function Ks(e){const n=xe(sa,null),t=y(()=>n?n.rootZIndex.value-100:_r),a=H([]),l=St(new Map),o=St(new Map),i=St(new Map),r=St(new Map),u=St(new Map),{resizeRef:c,contentRect:d}=Lt(),v=y(()=>{const _=new Map,T=e.overlaps??[];for(const V of T.filter(w=>w.includes(":"))){const[w,$]=V.split(":");if(!a.value.includes(w)||!a.value.includes($))continue;const p=l.get(w),I=l.get($),A=o.get(w),M=o.get($);!p||!I||!A||!M||(_.set($,{position:p.value,amount:parseInt(A.value,10)}),_.set(w,{position:I.value,amount:-parseInt(M.value,10)}))}return _}),f=y(()=>{const _=[...new Set([...i.values()].map(V=>V.value))].sort((V,w)=>V-w),T=[];for(const V of _){const w=a.value.filter($=>{var p;return((p=i.get($))==null?void 0:p.value)===V});T.push(...w)}return Sb(T,l,o,r)}),m=y(()=>!Array.from(u.values()).some(_=>_.value)),b=y(()=>f.value[f.value.length-1].layer),h=y(()=>({"--v-layout-left":ne(b.value.left),"--v-layout-right":ne(b.value.right),"--v-layout-top":ne(b.value.top),"--v-layout-bottom":ne(b.value.bottom),...m.value?void 0:{transition:"none"}})),g=y(()=>f.value.slice(1).map((_,T)=>{let{id:V}=_;const{layer:w}=f.value[T],$=o.get(V),p=l.get(V);return{id:V,...w,size:Number($.value),position:p.value}})),k=_=>g.value.find(T=>T.id===_),S=Ye("createLayout"),C=ee(!1);Ke(()=>{C.value=!0}),Re(sa,{register:(_,T)=>{let{id:V,order:w,position:$,layoutSize:p,elementSize:I,active:A,disableTransitions:M,absolute:j}=T;i.set(V,w),l.set(V,$),o.set(V,p),r.set(V,A),M&&u.set(V,M);const le=zn(Gs,S==null?void 0:S.vnode).indexOf(_);le>-1?a.value.splice(le,0,V):a.value.push(V);const re=y(()=>g.value.findIndex(te=>te.id===V)),N=y(()=>t.value+f.value.length*2-re.value*2),E=y(()=>{const te=$.value==="left"||$.value==="right",se=$.value==="right",ue=$.value==="bottom",ye=I.value??p.value,G=ye===0?"%":"px",ce={[$.value]:0,zIndex:N.value,transform:`translate${te?"X":"Y"}(${(A.value?0:-(ye===0?100:ye))*(se||ue?-1:1)}${G})`,position:j.value||t.value!==_r?"absolute":"fixed",...m.value?void 0:{transition:"none"}};if(!C.value)return ce;const me=g.value[re.value];if(!me)throw new Error(`[Vuetify] Could not find layout item "${V}"`);const Me=v.value.get(V);return Me&&(me[Me.position]+=Me.amount),{...ce,height:te?`calc(100% - ${me.top}px - ${me.bottom}px)`:I.value?`${I.value}px`:void 0,left:se?void 0:`${me.left}px`,right:se?`${me.right}px`:void 0,top:$.value!=="bottom"?`${me.top}px`:void 0,bottom:$.value!=="top"?`${me.bottom}px`:void 0,width:te?I.value?`${I.value}px`:void 0:`calc(100% - ${me.left}px - ${me.right}px)`}}),O=y(()=>({zIndex:N.value-1}));return{layoutItemStyles:E,layoutItemScrimStyles:O,zIndex:N}},unregister:_=>{i.delete(_),l.delete(_),o.delete(_),r.delete(_),u.delete(_),a.value=a.value.filter(T=>T!==_)},mainRect:b,mainStyles:h,getLayoutItem:k,items:g,layoutRect:d,rootZIndex:t});const P=y(()=>["v-layout",{"v-layout--full-height":e.fullHeight}]),x=y(()=>({zIndex:n?t.value:void 0,position:n?"relative":void 0,overflow:n?"hidden":void 0}));return{layoutClasses:P,layoutStyles:x,getLayoutItem:k,items:g,layoutRect:d,layoutRef:c}}function qs(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{blueprint:n,...t}=e,a=vt(n,t),{aliases:l={},components:o={},directives:i={}}=a,r=ly(a.defaults),u=rb(a.display,a.ssr),c=kb(a.theme),d=hb(a.icons),v=gy(a.locale),f=lb(a.date,v),m=ub(a.goTo,v);return{install:h=>{for(const g in i)h.directive(g,i[g]);for(const g in o)h.component(g,o[g]);for(const g in l)h.component(g,pt({...l[g],name:g,aliasName:l[g].name}));if(c.install(h),h.provide(Yn,r),h.provide(io,u),h.provide(ra,c),h.provide(ro,d),h.provide(Un,v),h.provide(Rs,f.options),h.provide(br,f.instance),h.provide(zs,m),$e&&a.ssr)if(h.$nuxt)h.$nuxt.hook("app:suspense:resolve",()=>{u.update()});else{const{mount:g}=h;h.mount=function(){const k=g(...arguments);return Te(()=>u.update()),h.mount=g,k}}rt.reset(),h.mixin({computed:{$vuetify(){return St({defaults:Rn.call(this,Yn),display:Rn.call(this,io),theme:Rn.call(this,ra),icons:Rn.call(this,ro),locale:Rn.call(this,Un),date:Rn.call(this,br)})}}})},defaults:r,display:u,theme:c,icons:d,locale:v,date:f,goTo:m}}const wb="3.7.5";qs.version=wb;function Rn(e){var a,l;const n=this.$,t=((a=n.parent)==null?void 0:a.provides)??((l=n.vnode.appContext)==null?void 0:l.provides);if(t&&e in t)return t[e]}const Vb=B({...ie(),...Ys({fullHeight:!0}),...Pe()},"VApp"),Cb=R()({name:"VApp",props:Vb(),setup(e,n){let{slots:t}=n;const a=De(e),{layoutClasses:l,getLayoutItem:o,items:i,layoutRef:r}=Ks(e),{rtlClasses:u}=nt();return W(()=>{var c;return s("div",{ref:r,class:["v-application",a.themeClasses.value,l.value,u.value,e.class],style:[e.style]},[s("div",{class:"v-application__wrap"},[(c=t.default)==null?void 0:c.call(t)])])}),{getLayoutItem:o,items:i,theme:a}}}),Ve=B({tag:{type:String,default:"div"}},"tag"),Xs=B({text:String,...ie(),...Ve()},"VToolbarTitle"),ri=R()({name:"VToolbarTitle",props:Xs(),setup(e,n){let{slots:t}=n;return W(()=>{const a=!!(t.default||t.text||e.text);return s(e.tag,{class:["v-toolbar-title",e.class],style:e.style},{default:()=>{var l;return[a&&s("div",{class:"v-toolbar-title__placeholder"},[t.text?t.text():e.text,(l=t.default)==null?void 0:l.call(t)])]}})}),{}}}),pb=B({disabled:Boolean,group:Boolean,hideOnLeave:Boolean,leaveAbsolute:Boolean,mode:String,origin:String},"transition");function xt(e,n,t){return R()({name:e,props:pb({mode:t,origin:n}),setup(a,l){let{slots:o}=l;const i={onBeforeEnter(r){a.origin&&(r.style.transformOrigin=a.origin)},onLeave(r){if(a.leaveAbsolute){const{offsetTop:u,offsetLeft:c,offsetWidth:d,offsetHeight:v}=r;r._transitionInitialStyles={position:r.style.position,top:r.style.top,left:r.style.left,width:r.style.width,height:r.style.height},r.style.position="absolute",r.style.top=`${u}px`,r.style.left=`${c}px`,r.style.width=`${d}px`,r.style.height=`${v}px`}a.hideOnLeave&&r.style.setProperty("display","none","important")},onAfterLeave(r){if(a.leaveAbsolute&&(r!=null&&r._transitionInitialStyles)){const{position:u,top:c,left:d,width:v,height:f}=r._transitionInitialStyles;delete r._transitionInitialStyles,r.style.position=u||"",r.style.top=c||"",r.style.left=d||"",r.style.width=v||"",r.style.height=f||""}}};return()=>{const r=a.group?Oo:Dt;return an(r,{name:a.disabled?"":e,css:!a.disabled,...a.group?void 0:{mode:a.mode},...a.disabled?{}:i},o.default)}}})}function Zs(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"in-out";return R()({name:e,props:{mode:{type:String,default:t},disabled:Boolean,group:Boolean},setup(a,l){let{slots:o}=l;const i=a.group?Oo:Dt;return()=>an(i,{name:a.disabled?"":e,css:!a.disabled,...a.disabled?{}:n},o.default)}})}function Js(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";const t=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1)?"width":"height",a=ns(`offset-${t}`);return{onBeforeEnter(i){i._parent=i.parentNode,i._initialStyle={transition:i.style.transition,overflow:i.style.overflow,[t]:i.style[t]}},onEnter(i){const r=i._initialStyle;i.style.setProperty("transition","none","important"),i.style.overflow="hidden";const u=`${i[a]}px`;i.style[t]="0",i.offsetHeight,i.style.transition=r.transition,e&&i._parent&&i._parent.classList.add(e),requestAnimationFrame(()=>{i.style[t]=u})},onAfterEnter:o,onEnterCancelled:o,onLeave(i){i._initialStyle={transition:"",overflow:i.style.overflow,[t]:i.style[t]},i.style.overflow="hidden",i.style[t]=`${i[a]}px`,i.offsetHeight,requestAnimationFrame(()=>i.style[t]="0")},onAfterLeave:l,onLeaveCancelled:l};function l(i){e&&i._parent&&i._parent.classList.remove(e),o(i)}function o(i){const r=i._initialStyle[t];i.style.overflow=i._initialStyle.overflow,r!=null&&(i.style[t]=r),delete i._initialStyle}}const xb=B({target:[Object,Array]},"v-dialog-transition"),dl=R()({name:"VDialogTransition",props:xb(),setup(e,n){let{slots:t}=n;const a={onBeforeEnter(l){l.style.pointerEvents="none",l.style.visibility="hidden"},async onEnter(l,o){var f;await new Promise(m=>requestAnimationFrame(m)),await new Promise(m=>requestAnimationFrame(m)),l.style.visibility="";const{x:i,y:r,sx:u,sy:c,speed:d}=Ir(e.target,l),v=fn(l,[{transform:`translate(${i}px, ${r}px) scale(${u}, ${c})`,opacity:0},{}],{duration:225*d,easing:sy});(f=Pr(l))==null||f.forEach(m=>{fn(m,[{opacity:0},{opacity:0,offset:.33},{}],{duration:225*2*d,easing:ia})}),v.finished.then(()=>o())},onAfterEnter(l){l.style.removeProperty("pointer-events")},onBeforeLeave(l){l.style.pointerEvents="none"},async onLeave(l,o){var f;await new Promise(m=>requestAnimationFrame(m));const{x:i,y:r,sx:u,sy:c,speed:d}=Ir(e.target,l);fn(l,[{},{transform:`translate(${i}px, ${r}px) scale(${u}, ${c})`,opacity:0}],{duration:125*d,easing:uy}).finished.then(()=>o()),(f=Pr(l))==null||f.forEach(m=>{fn(m,[{},{opacity:0,offset:.2},{opacity:0}],{duration:125*2*d,easing:ia})})},onAfterLeave(l){l.style.removeProperty("pointer-events")}};return()=>e.target?s(Dt,z({name:"dialog-transition"},a,{css:!1}),t):s(Dt,{name:"dialog-transition"},t)}});function Pr(e){var t;const n=(t=e.querySelector(":scope > .v-card, :scope > .v-sheet, :scope > .v-list"))==null?void 0:t.children;return n&&[...n]}function Ir(e,n){const t=Ss(e),a=Jo(n),[l,o]=getComputedStyle(n).transformOrigin.split(" ").map(k=>parseFloat(k)),[i,r]=getComputedStyle(n).getPropertyValue("--v-overlay-anchor-origin").split(" ");let u=t.left+t.width/2;i==="left"||r==="left"?u-=t.width/2:(i==="right"||r==="right")&&(u+=t.width/2);let c=t.top+t.height/2;i==="top"||r==="top"?c-=t.height/2:(i==="bottom"||r==="bottom")&&(c+=t.height/2);const d=t.width/a.width,v=t.height/a.height,f=Math.max(1,d,v),m=d/f||0,b=v/f||0,h=a.width*a.height/(window.innerWidth*window.innerHeight),g=h>.12?Math.min(1.5,(h-.12)*10+1):1;return{x:u-(l+a.left),y:c-(o+a.top),sx:m,sy:b,speed:g}}const _b=xt("fab-transition","center center","out-in"),Pb=xt("dialog-bottom-transition"),Ib=xt("dialog-top-transition"),ua=xt("fade-transition"),si=xt("scale-transition"),$b=xt("scroll-x-transition"),Tb=xt("scroll-x-reverse-transition"),Ab=xt("scroll-y-transition"),Bb=xt("scroll-y-reverse-transition"),Db=xt("slide-x-transition"),Lb=xt("slide-x-reverse-transition"),ui=xt("slide-y-transition"),Mb=xt("slide-y-reverse-transition"),vl=Zs("expand-transition",Js()),ci=Zs("expand-x-transition",Js("",!0)),Eb=B({defaults:Object,disabled:Boolean,reset:[Number,String],root:[Boolean,String],scoped:Boolean},"VDefaultsProvider"),pe=R(!1)({name:"VDefaultsProvider",props:Eb(),setup(e,n){let{slots:t}=n;const{defaults:a,disabled:l,reset:o,root:i,scoped:r}=Pn(e);return Ge(a,{reset:o,root:i,scoped:r,disabled:l}),()=>{var u;return(u=t.default)==null?void 0:u.call(t)}}}),Qe=B({height:[Number,String],maxHeight:[Number,String],maxWidth:[Number,String],minHeight:[Number,String],minWidth:[Number,String],width:[Number,String]},"dimension");function et(e){return{dimensionStyles:y(()=>{const t={},a=ne(e.height),l=ne(e.maxHeight),o=ne(e.maxWidth),i=ne(e.minHeight),r=ne(e.minWidth),u=ne(e.width);return a!=null&&(t.height=a),l!=null&&(t.maxHeight=l),o!=null&&(t.maxWidth=o),i!=null&&(t.minHeight=i),r!=null&&(t.minWidth=r),u!=null&&(t.width=u),t})}}function Fb(e){return{aspectStyles:y(()=>{const n=Number(e.aspectRatio);return n?{paddingBottom:String(1/n*100)+"%"}:void 0})}}const Qs=B({aspectRatio:[String,Number],contentClass:null,inline:Boolean,...ie(),...Qe()},"VResponsive"),uo=R()({name:"VResponsive",props:Qs(),setup(e,n){let{slots:t}=n;const{aspectStyles:a}=Fb(e),{dimensionStyles:l}=et(e);return W(()=>{var o;return s("div",{class:["v-responsive",{"v-responsive--inline":e.inline},e.class],style:[l.value,e.style]},[s("div",{class:"v-responsive__sizer",style:a.value},null),(o=t.additional)==null?void 0:o.call(t),t.default&&s("div",{class:["v-responsive__content",e.contentClass]},[t.default()])])}),{}}});function di(e){return Xo(()=>{const n=[],t={};if(e.value.background)if(ao(e.value.background)){if(t.backgroundColor=e.value.background,!e.value.text&&Zh(e.value.background)){const a=Pt(e.value.background);if(a.a==null||a.a===1){const l=As(a);t.color=l,t.caretColor=l}}}else n.push(`bg-${e.value.background}`);return e.value.text&&(ao(e.value.text)?(t.color=e.value.text,t.caretColor=e.value.text):n.push(`text-${e.value.text}`)),{colorClasses:n,colorStyles:t}})}function ut(e,n){const t=y(()=>({text:jn(e)?e.value:n?e[n]:null})),{colorClasses:a,colorStyles:l}=di(t);return{textColorClasses:a,textColorStyles:l}}function Le(e,n){const t=y(()=>({background:jn(e)?e.value:n?e[n]:null})),{colorClasses:a,colorStyles:l}=di(t);return{backgroundColorClasses:a,backgroundColorStyles:l}}const ze=B({rounded:{type:[Boolean,Number,String],default:void 0},tile:Boolean},"rounded");function Ue(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{roundedClasses:y(()=>{const a=jn(e)?e.value:e.rounded,l=jn(e)?e.value:e.tile,o=[];if(a===!0||a==="")o.push(`${n}--rounded`);else if(typeof a=="string"||a===0)for(const i of String(a).split(" "))o.push(`rounded-${i}`);else(l||a===!1)&&o.push("rounded-0");return o})}}const Et=B({transition:{type:[Boolean,String,Object],default:"fade-transition",validator:e=>e!==!0}},"transition"),ft=(e,n)=>{let{slots:t}=n;const{transition:a,disabled:l,group:o,...i}=e,{component:r=o?Oo:Dt,...u}=typeof a=="object"?a:{};return an(r,z(typeof a=="string"?{name:l?"":a}:u,typeof a=="string"?{}:Object.fromEntries(Object.entries({disabled:l,group:o}).filter(c=>{let[d,v]=c;return v!==void 0})),i),t)};function Ob(e,n){if(!Yo)return;const t=n.modifiers||{},a=n.value,{handler:l,options:o}=typeof a=="object"?a:{handler:a,options:{}},i=new IntersectionObserver(function(){var v;let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],u=arguments.length>1?arguments[1]:void 0;const c=(v=e._observe)==null?void 0:v[n.instance.$.uid];if(!c)return;const d=r.some(f=>f.isIntersecting);l&&(!t.quiet||c.init)&&(!t.once||d||c.init)&&l(d,r,u),d&&t.once?eu(e,n):c.init=!0},o);e._observe=Object(e._observe),e._observe[n.instance.$.uid]={init:!1,observer:i},i.observe(e)}function eu(e,n){var a;const t=(a=e._observe)==null?void 0:a[n.instance.$.uid];t&&(t.observer.unobserve(e),delete e._observe[n.instance.$.uid])}const ka={mounted:Ob,unmounted:eu},tu=B({absolute:Boolean,alt:String,cover:Boolean,color:String,draggable:{type:[Boolean,String],default:void 0},eager:Boolean,gradient:String,lazySrc:String,options:{type:Object,default:()=>({root:void 0,rootMargin:void 0,threshold:void 0})},sizes:String,src:{type:[String,Object],default:""},crossorigin:String,referrerpolicy:String,srcset:String,position:String,...Qs(),...ie(),...ze(),...Et()},"VImg"),Yt=R()({name:"VImg",directives:{intersect:ka},props:tu(),emits:{loadstart:e=>!0,load:e=>!0,error:e=>!0},setup(e,n){let{emit:t,slots:a}=n;const{backgroundColorClasses:l,backgroundColorStyles:o}=Le(F(e,"color")),{roundedClasses:i}=Ue(e),r=Ye("VImg"),u=ee(""),c=H(),d=ee(e.eager?"loading":"idle"),v=ee(),f=ee(),m=y(()=>e.src&&typeof e.src=="object"?{src:e.src.src,srcset:e.srcset||e.src.srcset,lazySrc:e.lazySrc||e.src.lazySrc,aspect:Number(e.aspectRatio||e.src.aspect||0)}:{src:e.src,srcset:e.srcset,lazySrc:e.lazySrc,aspect:Number(e.aspectRatio||0)}),b=y(()=>m.value.aspect||v.value/f.value||0);Q(()=>e.src,()=>{h(d.value!=="idle")}),Q(b,(I,A)=>{!I&&A&&c.value&&P(c.value)}),No(()=>h());function h(I){if(!(e.eager&&I)&&!(Yo&&!I&&!e.eager)){if(d.value="loading",m.value.lazySrc){const A=new Image;A.src=m.value.lazySrc,P(A,null)}m.value.src&&Te(()=>{var A;t("loadstart",((A=c.value)==null?void 0:A.currentSrc)||m.value.src),setTimeout(()=>{var M;if(!r.isUnmounted)if((M=c.value)!=null&&M.complete){if(c.value.naturalWidth||k(),d.value==="error")return;b.value||P(c.value,null),d.value==="loading"&&g()}else b.value||P(c.value),S()})})}}function g(){var I;r.isUnmounted||(S(),P(c.value),d.value="loaded",t("load",((I=c.value)==null?void 0:I.currentSrc)||m.value.src))}function k(){var I;r.isUnmounted||(d.value="error",t("error",((I=c.value)==null?void 0:I.currentSrc)||m.value.src))}function S(){const I=c.value;I&&(u.value=I.currentSrc||I.src)}let C=-1;it(()=>{clearTimeout(C)});function P(I){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:100;const M=()=>{if(clearTimeout(C),r.isUnmounted)return;const{naturalHeight:j,naturalWidth:Y}=I;j||Y?(v.value=Y,f.value=j):!I.complete&&d.value==="loading"&&A!=null?C=window.setTimeout(M,A):(I.currentSrc.endsWith(".svg")||I.currentSrc.startsWith("data:image/svg+xml"))&&(v.value=1,f.value=1)};M()}const x=y(()=>({"v-img__img--cover":e.cover,"v-img__img--contain":!e.cover})),_=()=>{var M;if(!m.value.src||d.value==="idle")return null;const I=s("img",{class:["v-img__img",x.value],style:{objectPosition:e.position},src:m.value.src,srcset:m.value.srcset,alt:e.alt,crossorigin:e.crossorigin,referrerpolicy:e.referrerpolicy,draggable:e.draggable,sizes:e.sizes,ref:c,onLoad:g,onError:k},null),A=(M=a.sources)==null?void 0:M.call(a);return s(ft,{transition:e.transition,appear:!0},{default:()=>[je(A?s("picture",{class:"v-img__picture"},[A,I]):I,[[Mt,d.value==="loaded"]])]})},T=()=>s(ft,{transition:e.transition},{default:()=>[m.value.lazySrc&&d.value!=="loaded"&&s("img",{class:["v-img__img","v-img__img--preload",x.value],style:{objectPosition:e.position},src:m.value.lazySrc,alt:e.alt,crossorigin:e.crossorigin,referrerpolicy:e.referrerpolicy,draggable:e.draggable},null)]}),V=()=>a.placeholder?s(ft,{transition:e.transition,appear:!0},{default:()=>[(d.value==="loading"||d.value==="error"&&!a.error)&&s("div",{class:"v-img__placeholder"},[a.placeholder()])]}):null,w=()=>a.error?s(ft,{transition:e.transition,appear:!0},{default:()=>[d.value==="error"&&s("div",{class:"v-img__error"},[a.error()])]}):null,$=()=>e.gradient?s("div",{class:"v-img__gradient",style:{backgroundImage:`linear-gradient(${e.gradient})`}},null):null,p=ee(!1);{const I=Q(b,A=>{A&&(requestAnimationFrame(()=>{requestAnimationFrame(()=>{p.value=!0})}),I())})}return W(()=>{const I=uo.filterProps(e);return je(s(uo,z({class:["v-img",{"v-img--absolute":e.absolute,"v-img--booting":!p.value},l.value,i.value,e.class],style:[{width:ne(e.width==="auto"?v.value:e.width)},o.value,e.style]},I,{aspectRatio:b.value,"aria-label":e.alt,role:e.alt?"img":void 0}),{additional:()=>s(ae,null,[s(_,null,null),s(T,null,null),s($,null,null),s(V,null,null),s(w,null,null)]),default:a.default}),[[Ct("intersect"),{handler:h,options:e.options},null,{once:!0}]])}),{currentSrc:u,image:c,state:d,naturalWidth:v,naturalHeight:f}}}),wt=B({border:[Boolean,Number,String]},"border");function _t(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{borderClasses:y(()=>{const a=jn(e)?e.value:e.border,l=[];if(a===!0||a==="")l.push(`${n}--border`);else if(typeof a=="string"||a===0)for(const o of String(a).split(" "))l.push(`border-${o}`);return l})}}const at=B({elevation:{type:[Number,String],validator(e){const n=parseInt(e);return!isNaN(n)&&n>=0&&n<=24}}},"elevation");function st(e){return{elevationClasses:y(()=>{const t=jn(e)?e.value:e.elevation,a=[];return t==null||a.push(`elevation-${t}`),a})}}const Nb=[null,"prominent","default","comfortable","compact"],nu=B({absolute:Boolean,collapse:Boolean,color:String,density:{type:String,default:"default",validator:e=>Nb.includes(e)},extended:Boolean,extensionHeight:{type:[Number,String],default:48},flat:Boolean,floating:Boolean,height:{type:[Number,String],default:64},image:String,title:String,...wt(),...ie(),...at(),...ze(),...Ve({tag:"header"}),...Pe()},"VToolbar"),co=R()({name:"VToolbar",props:nu(),setup(e,n){var m;let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(F(e,"color")),{borderClasses:o}=_t(e),{elevationClasses:i}=st(e),{roundedClasses:r}=Ue(e),{themeClasses:u}=De(e),{rtlClasses:c}=nt(),d=ee(!!(e.extended||(m=t.extension)!=null&&m.call(t))),v=y(()=>parseInt(Number(e.height)+(e.density==="prominent"?Number(e.height):0)-(e.density==="comfortable"?8:0)-(e.density==="compact"?16:0),10)),f=y(()=>d.value?parseInt(Number(e.extensionHeight)+(e.density==="prominent"?Number(e.extensionHeight):0)-(e.density==="comfortable"?4:0)-(e.density==="compact"?8:0),10):0);return Ge({VBtn:{variant:"text"}}),W(()=>{var k;const b=!!(e.title||t.title),h=!!(t.image||e.image),g=(k=t.extension)==null?void 0:k.call(t);return d.value=!!(e.extended||g),s(e.tag,{class:["v-toolbar",{"v-toolbar--absolute":e.absolute,"v-toolbar--collapse":e.collapse,"v-toolbar--flat":e.flat,"v-toolbar--floating":e.floating,[`v-toolbar--density-${e.density}`]:!0},a.value,o.value,i.value,r.value,u.value,c.value,e.class],style:[l.value,e.style]},{default:()=>[h&&s("div",{key:"image",class:"v-toolbar__image"},[t.image?s(pe,{key:"image-defaults",disabled:!e.image,defaults:{VImg:{cover:!0,src:e.image}}},t.image):s(Yt,{key:"image-img",cover:!0,src:e.image},null)]),s(pe,{defaults:{VTabs:{height:ne(v.value)}}},{default:()=>{var S,C,P;return[s("div",{class:"v-toolbar__content",style:{height:ne(v.value)}},[t.prepend&&s("div",{class:"v-toolbar__prepend"},[(S=t.prepend)==null?void 0:S.call(t)]),b&&s(ri,{key:"title",text:e.title},{text:t.title}),(C=t.default)==null?void 0:C.call(t),t.append&&s("div",{class:"v-toolbar__append"},[(P=t.append)==null?void 0:P.call(t)])])]}}),s(pe,{defaults:{VTabs:{height:ne(f.value)}}},{default:()=>[s(vl,null,{default:()=>[d.value&&s("div",{class:"v-toolbar__extension",style:{height:ne(f.value)}},[g])]})]})]})}),{contentHeight:v,extensionHeight:f}}}),Rb=B({scrollTarget:{type:String},scrollThreshold:{type:[String,Number],default:300}},"scroll");function Hb(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{canScroll:t}=n;let a=0,l=0;const o=H(null),i=ee(0),r=ee(0),u=ee(0),c=ee(!1),d=ee(!1),v=y(()=>Number(e.scrollThreshold)),f=y(()=>Xe((v.value-i.value)/v.value||0)),m=()=>{const b=o.value;if(!b||t&&!t.value)return;a=i.value,i.value="window"in b?b.pageYOffset:b.scrollTop;const h=b instanceof Window?document.documentElement.scrollHeight:b.scrollHeight;if(l!==h){l=h;return}d.value=i.value{r.value=r.value||i.value}),Q(c,()=>{r.value=0}),Ke(()=>{Q(()=>e.scrollTarget,b=>{var g;const h=b?document.querySelector(b):window;h&&h!==o.value&&((g=o.value)==null||g.removeEventListener("scroll",m),o.value=h,o.value.addEventListener("scroll",m,{passive:!0}))},{immediate:!0})}),it(()=>{var b;(b=o.value)==null||b.removeEventListener("scroll",m)}),t&&Q(t,m,{immediate:!0}),{scrollThreshold:v,currentScroll:i,currentThreshold:u,isScrollActive:c,scrollRatio:f,isScrollingUp:d,savedScroll:r}}function An(){const e=ee(!1);return Ke(()=>{window.requestAnimationFrame(()=>{e.value=!0})}),{ssrBootStyles:y(()=>e.value?void 0:{transition:"none !important"}),isBooted:nl(e)}}const zb=B({scrollBehavior:String,modelValue:{type:Boolean,default:!0},location:{type:String,default:"top",validator:e=>["top","bottom"].includes(e)},...nu(),...$n(),...Rb(),height:{type:[Number,String],default:64}},"VAppBar"),Wb=R()({name:"VAppBar",props:zb(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=H(),l=de(e,"modelValue"),o=y(()=>{var C;const S=new Set(((C=e.scrollBehavior)==null?void 0:C.split(" "))??[]);return{hide:S.has("hide"),fullyHide:S.has("fully-hide"),inverted:S.has("inverted"),collapse:S.has("collapse"),elevate:S.has("elevate"),fadeImage:S.has("fade-image")}}),i=y(()=>{const S=o.value;return S.hide||S.fullyHide||S.inverted||S.collapse||S.elevate||S.fadeImage||!l.value}),{currentScroll:r,scrollThreshold:u,isScrollingUp:c,scrollRatio:d}=Hb(e,{canScroll:i}),v=y(()=>o.value.hide||o.value.fullyHide),f=y(()=>e.collapse||o.value.collapse&&(o.value.inverted?d.value>0:d.value===0)),m=y(()=>e.flat||o.value.fullyHide&&!l.value||o.value.elevate&&(o.value.inverted?r.value>0:r.value===0)),b=y(()=>o.value.fadeImage?o.value.inverted?1-d.value:d.value:void 0),h=y(()=>{var P,x;if(o.value.hide&&o.value.inverted)return 0;const S=((P=a.value)==null?void 0:P.contentHeight)??0,C=((x=a.value)==null?void 0:x.extensionHeight)??0;return v.value?r.value!!e.scrollBehavior),()=>{He(()=>{v.value?o.value.inverted?l.value=r.value>u.value:l.value=c.value||r.valueparseInt(e.order,10)),position:F(e,"location"),layoutSize:h,elementSize:ee(void 0),active:l,absolute:F(e,"absolute")});return W(()=>{const S=co.filterProps(e);return s(co,z({ref:a,class:["v-app-bar",{"v-app-bar--bottom":e.location==="bottom"},e.class],style:[{...k.value,"--v-toolbar-image-opacity":b.value,height:void 0,...g.value},e.style]},S,{collapse:f.value,flat:m.value}),t)}),{}}}),jb=[null,"default","comfortable","compact"],lt=B({density:{type:String,default:"default",validator:e=>jb.includes(e)}},"density");function gt(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{densityClasses:y(()=>`${n}--density-${e.density}`)}}const Gb=["elevated","flat","tonal","outlined","text","plain"];function on(e,n){return s(ae,null,[e&&s("span",{key:"overlay",class:`${n}__overlay`},null),s("span",{key:"underlay",class:`${n}__underlay`},null)])}const Tt=B({color:String,variant:{type:String,default:"elevated",validator:e=>Gb.includes(e)}},"variant");function Bn(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();const t=y(()=>{const{variant:o}=L(e);return`${n}--variant-${o}`}),{colorClasses:a,colorStyles:l}=di(y(()=>{const{variant:o,color:i}=L(e);return{[["elevated","flat"].includes(o)?"background":"text"]:i}}));return{colorClasses:a,colorStyles:l,variantClasses:t}}const au=B({baseColor:String,divided:Boolean,...wt(),...ie(),...lt(),...at(),...ze(),...Ve(),...Pe(),...Tt()},"VBtnGroup"),vo=R()({name:"VBtnGroup",props:au(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{densityClasses:l}=gt(e),{borderClasses:o}=_t(e),{elevationClasses:i}=st(e),{roundedClasses:r}=Ue(e);Ge({VBtn:{height:"auto",baseColor:F(e,"baseColor"),color:F(e,"color"),density:F(e,"density"),flat:!0,variant:F(e,"variant")}}),W(()=>s(e.tag,{class:["v-btn-group",{"v-btn-group--divided":e.divided},a.value,o.value,l.value,i.value,r.value,e.class],style:e.style},t))}}),Dn=B({modelValue:{type:null,default:void 0},multiple:Boolean,mandatory:[Boolean,String],max:Number,selectedClass:String,disabled:Boolean},"group"),Ln=B({value:null,disabled:Boolean,selectedClass:String},"group-item");function Mn(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;const a=Ye("useGroupItem");if(!a)throw new Error("[Vuetify] useGroupItem composable must be used inside a component setup function");const l=rt();Re(Symbol.for(`${n.description}:id`),l);const o=xe(n,null);if(!o){if(!t)return o;throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${n.description}`)}const i=F(e,"value"),r=y(()=>!!(o.disabled.value||e.disabled));o.register({id:l,value:i,disabled:r},a),it(()=>{o.unregister(l)});const u=y(()=>o.isSelected(l)),c=y(()=>o.items.value[0].id===l),d=y(()=>o.items.value[o.items.value.length-1].id===l),v=y(()=>u.value&&[o.selectedClass.value,e.selectedClass]);return Q(u,f=>{a.emit("group:selected",{value:f})},{flush:"sync"}),{id:l,isSelected:u,isFirst:c,isLast:d,toggle:()=>o.select(l,!u.value),select:f=>o.select(l,f),selectedClass:v,value:i,disabled:r,group:o}}function rn(e,n){let t=!1;const a=St([]),l=de(e,"modelValue",[],f=>f==null?[]:lu(a,We(f)),f=>{const m=Ub(a,f);return e.multiple?m:m[0]}),o=Ye("useGroup");function i(f,m){const b=f,h=Symbol.for(`${n.description}:id`),k=zn(h,o==null?void 0:o.vnode).indexOf(m);L(b.value)==null&&(b.value=k,b.useIndexAsValue=!0),k>-1?a.splice(k,0,b):a.push(b)}function r(f){if(t)return;u();const m=a.findIndex(b=>b.id===f);a.splice(m,1)}function u(){const f=a.find(m=>!m.disabled);f&&e.mandatory==="force"&&!l.value.length&&(l.value=[f.id])}Ke(()=>{u()}),it(()=>{t=!0}),Zr(()=>{for(let f=0;fh.id===f);if(!(m&&(b!=null&&b.disabled)))if(e.multiple){const h=l.value.slice(),g=h.findIndex(S=>S===f),k=~g;if(m=m??!k,k&&e.mandatory&&h.length<=1||!k&&e.max!=null&&h.length+1>e.max)return;g<0&&m?h.push(f):g>=0&&!m&&h.splice(g,1),l.value=h}else{const h=l.value.includes(f);if(e.mandatory&&h)return;l.value=m??!h?[f]:[]}}function d(f){if(e.multiple,l.value.length){const m=l.value[0],b=a.findIndex(k=>k.id===m);let h=(b+f)%a.length,g=a[h];for(;g.disabled&&h!==b;)h=(h+f)%a.length,g=a[h];if(g.disabled)return;l.value=[a[h].id]}else{const m=a.find(b=>!b.disabled);m&&(l.value=[m.id])}}const v={register:i,unregister:r,selected:l,select:c,disabled:F(e,"disabled"),prev:()=>d(a.length-1),next:()=>d(1),isSelected:f=>l.value.includes(f),selectedClass:y(()=>e.selectedClass),items:y(()=>a),getItemIndex:f=>Yb(a,f)};return Re(n,v),v}function Yb(e,n){const t=lu(e,[n]);return t.length?e.findIndex(a=>a.id===t[0]):-1}function lu(e,n){const t=[];return n.forEach(a=>{const l=e.find(i=>Ht(a,i.value)),o=e[a];(l==null?void 0:l.value)!=null?t.push(l.id):o!=null&&t.push(o.id)}),t}function Ub(e,n){const t=[];return n.forEach(a=>{const l=e.findIndex(o=>o.id===a);if(~l){const o=e[l];t.push(o.value!=null?o.value:l)}}),t}const vi=Symbol.for("vuetify:v-btn-toggle"),Kb=B({...au(),...Dn()},"VBtnToggle"),qb=R()({name:"VBtnToggle",props:Kb(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{isSelected:a,next:l,prev:o,select:i,selected:r}=rn(e,vi);return W(()=>{const u=vo.filterProps(e);return s(vo,z({class:["v-btn-toggle",e.class]},u,{style:e.style}),{default:()=>{var c;return[(c=t.default)==null?void 0:c.call(t,{isSelected:a,next:l,prev:o,select:i,selected:r})]}})}),{next:l,prev:o,select:i}}}),Xb=["x-small","small","default","large","x-large"],jt=B({size:{type:[String,Number],default:"default"}},"size");function Zn(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return Xo(()=>{let t,a;return Wa(Xb,e.size)?t=`${n}--size-${e.size}`:e.size&&(a={width:ne(e.size),height:ne(e.size)}),{sizeClasses:t,sizeStyles:a}})}const Zb=B({color:String,disabled:Boolean,start:Boolean,end:Boolean,icon:ve,...ie(),...jt(),...Ve({tag:"i"}),...Pe()},"VIcon"),Be=R()({name:"VIcon",props:Zb(),setup(e,n){let{attrs:t,slots:a}=n;const l=H(),{themeClasses:o}=De(e),{iconData:i}=yb(y(()=>l.value||e.icon)),{sizeClasses:r}=Zn(e),{textColorClasses:u,textColorStyles:c}=ut(F(e,"color"));return W(()=>{var f,m;const d=(f=a.default)==null?void 0:f.call(a);d&&(l.value=(m=gs(d).filter(b=>b.type===Md&&b.children&&typeof b.children=="string")[0])==null?void 0:m.children);const v=!!(t.onClick||t.onClickOnce);return s(i.value.component,{tag:e.tag,icon:i.value.icon,class:["v-icon","notranslate",o.value,r.value,u.value,{"v-icon--clickable":v,"v-icon--disabled":e.disabled,"v-icon--start":e.start,"v-icon--end":e.end},e.class],style:[r.value?void 0:{fontSize:ne(e.size),height:ne(e.size),width:ne(e.size)},c.value,e.style],role:v?"button":void 0,"aria-hidden":!v,tabindex:v?e.disabled?-1:0:void 0},{default:()=>[d]})}),{}}});function fl(e,n){const t=H(),a=ee(!1);if(Yo){const l=new IntersectionObserver(o=>{a.value=!!o.find(i=>i.isIntersecting)},n);it(()=>{l.disconnect()}),Q(t,(o,i)=>{i&&(l.unobserve(i),a.value=!1),o&&l.observe(o)},{flush:"post"})}return{intersectionRef:t,isIntersecting:a}}const Jb=B({bgColor:String,color:String,indeterminate:[Boolean,String],modelValue:{type:[Number,String],default:0},rotate:{type:[Number,String],default:0},width:{type:[Number,String],default:4},...ie(),...jt(),...Ve({tag:"div"}),...Pe()},"VProgressCircular"),Kn=R()({name:"VProgressCircular",props:Jb(),setup(e,n){let{slots:t}=n;const a=20,l=2*Math.PI*a,o=H(),{themeClasses:i}=De(e),{sizeClasses:r,sizeStyles:u}=Zn(e),{textColorClasses:c,textColorStyles:d}=ut(F(e,"color")),{textColorClasses:v,textColorStyles:f}=ut(F(e,"bgColor")),{intersectionRef:m,isIntersecting:b}=fl(),{resizeRef:h,contentRect:g}=Lt(),k=y(()=>Math.max(0,Math.min(100,parseFloat(e.modelValue)))),S=y(()=>Number(e.width)),C=y(()=>u.value?Number(e.size):g.value?g.value.width:Math.max(S.value,32)),P=y(()=>a/(1-S.value/C.value)*2),x=y(()=>S.value/C.value*P.value),_=y(()=>ne((100-k.value)/100*l));return He(()=>{m.value=o.value,h.value=o.value}),W(()=>s(e.tag,{ref:o,class:["v-progress-circular",{"v-progress-circular--indeterminate":!!e.indeterminate,"v-progress-circular--visible":b.value,"v-progress-circular--disable-shrink":e.indeterminate==="disable-shrink"},i.value,r.value,c.value,e.class],style:[u.value,d.value,e.style],role:"progressbar","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":e.indeterminate?void 0:k.value},{default:()=>[s("svg",{style:{transform:`rotate(calc(-90deg + ${Number(e.rotate)}deg))`},xmlns:"http://www.w3.org/2000/svg",viewBox:`0 0 ${P.value} ${P.value}`},[s("circle",{class:["v-progress-circular__underlay",v.value],style:f.value,fill:"transparent",cx:"50%",cy:"50%",r:a,"stroke-width":x.value,"stroke-dasharray":l,"stroke-dashoffset":0},null),s("circle",{class:"v-progress-circular__overlay",fill:"transparent",cx:"50%",cy:"50%",r:a,"stroke-width":x.value,"stroke-dasharray":l,"stroke-dashoffset":_.value},null)]),t.default&&s("div",{class:"v-progress-circular__content"},[t.default({value:k.value})])]})),{}}}),$r={center:"center",top:"bottom",bottom:"top",left:"right",right:"left"},Xt=B({location:String},"location");function En(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,t=arguments.length>2?arguments[2]:void 0;const{isRtl:a}=nt();return{locationStyles:y(()=>{if(!e.location)return{};const{side:o,align:i}=to(e.location.split(" ").length>1?e.location:`${e.location} center`,a.value);function r(c){return t?t(c):0}const u={};return o!=="center"&&(n?u[$r[o]]=`calc(100% - ${r(o)}px)`:u[o]=0),i!=="center"?n?u[$r[i]]=`calc(100% - ${r(i)}px)`:u[i]=0:(o==="center"?u.top=u.left="50%":u[{top:"left",bottom:"left",left:"top",right:"top"}[o]]="50%",u.transform={top:"translateX(-50%)",bottom:"translateX(-50%)",left:"translateY(-50%)",right:"translateY(-50%)",center:"translate(-50%, -50%)"}[o]),u})}}const Qb=B({absolute:Boolean,active:{type:Boolean,default:!0},bgColor:String,bgOpacity:[Number,String],bufferValue:{type:[Number,String],default:0},bufferColor:String,bufferOpacity:[Number,String],clickable:Boolean,color:String,height:{type:[Number,String],default:4},indeterminate:Boolean,max:{type:[Number,String],default:100},modelValue:{type:[Number,String],default:0},opacity:[Number,String],reverse:Boolean,stream:Boolean,striped:Boolean,roundedBar:Boolean,...ie(),...Xt({location:"top"}),...ze(),...Ve(),...Pe()},"VProgressLinear"),ml=R()({name:"VProgressLinear",props:Qb(),emits:{"update:modelValue":e=>!0},setup(e,n){var p;let{slots:t}=n;const a=de(e,"modelValue"),{isRtl:l,rtlClasses:o}=nt(),{themeClasses:i}=De(e),{locationStyles:r}=En(e),{textColorClasses:u,textColorStyles:c}=ut(e,"color"),{backgroundColorClasses:d,backgroundColorStyles:v}=Le(y(()=>e.bgColor||e.color)),{backgroundColorClasses:f,backgroundColorStyles:m}=Le(y(()=>e.bufferColor||e.bgColor||e.color)),{backgroundColorClasses:b,backgroundColorStyles:h}=Le(e,"color"),{roundedClasses:g}=Ue(e),{intersectionRef:k,isIntersecting:S}=fl(),C=y(()=>parseFloat(e.max)),P=y(()=>parseFloat(e.height)),x=y(()=>Xe(parseFloat(e.bufferValue)/C.value*100,0,100)),_=y(()=>Xe(parseFloat(a.value)/C.value*100,0,100)),T=y(()=>l.value!==e.reverse),V=y(()=>e.indeterminate?"fade-transition":"slide-x-transition"),w=$e&&((p=window.matchMedia)==null?void 0:p.call(window,"(forced-colors: active)").matches);function $(I){if(!k.value)return;const{left:A,right:M,width:j}=k.value.getBoundingClientRect(),Y=T.value?j-I.clientX+(M-j):I.clientX-A;a.value=Math.round(Y/j*C.value)}return W(()=>s(e.tag,{ref:k,class:["v-progress-linear",{"v-progress-linear--absolute":e.absolute,"v-progress-linear--active":e.active&&S.value,"v-progress-linear--reverse":T.value,"v-progress-linear--rounded":e.rounded,"v-progress-linear--rounded-bar":e.roundedBar,"v-progress-linear--striped":e.striped},g.value,i.value,o.value,e.class],style:[{bottom:e.location==="bottom"?0:void 0,top:e.location==="top"?0:void 0,height:e.active?ne(P.value):0,"--v-progress-linear-height":ne(P.value),...e.absolute?r.value:{}},e.style],role:"progressbar","aria-hidden":e.active?"false":"true","aria-valuemin":"0","aria-valuemax":e.max,"aria-valuenow":e.indeterminate?void 0:_.value,onClick:e.clickable&&$},{default:()=>[e.stream&&s("div",{key:"stream",class:["v-progress-linear__stream",u.value],style:{...c.value,[T.value?"left":"right"]:ne(-P.value),borderTop:`${ne(P.value/2)} dotted`,opacity:parseFloat(e.bufferOpacity),top:`calc(50% - ${ne(P.value/4)})`,width:ne(100-x.value,"%"),"--v-progress-linear-stream-to":ne(P.value*(T.value?1:-1))}},null),s("div",{class:["v-progress-linear__background",w?void 0:d.value],style:[v.value,{opacity:parseFloat(e.bgOpacity),width:e.stream?0:void 0}]},null),s("div",{class:["v-progress-linear__buffer",w?void 0:f.value],style:[m.value,{opacity:parseFloat(e.bufferOpacity),width:ne(x.value,"%")}]},null),s(Dt,{name:V.value},{default:()=>[e.indeterminate?s("div",{class:"v-progress-linear__indeterminate"},[["long","short"].map(I=>s("div",{key:I,class:["v-progress-linear__indeterminate",I,w?void 0:b.value],style:h.value},null))]):s("div",{class:["v-progress-linear__determinate",w?void 0:b.value],style:[h.value,{width:ne(_.value,"%")}]},null)]}),t.default&&s("div",{class:"v-progress-linear__content"},[t.default({value:_.value,buffer:x.value})])]})),{}}}),gl=B({loading:[Boolean,String]},"loader");function Sa(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{loaderClasses:y(()=>({[`${n}--loading`]:e.loading}))}}function wa(e,n){var a;let{slots:t}=n;return s("div",{class:`${e.name}__loader`},[((a=t.default)==null?void 0:a.call(t,{color:e.color,isActive:e.active}))||s(ml,{absolute:e.absolute,active:e.active,color:e.color,height:"2",indeterminate:!0},null)])}const ek=["static","relative","fixed","absolute","sticky"],Jn=B({position:{type:String,validator:e=>ek.includes(e)}},"position");function Qn(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();return{positionClasses:y(()=>e.position?`${n}--${e.position}`:void 0)}}function tk(){const e=Ye("useRoute");return y(()=>{var n;return(n=e==null?void 0:e.proxy)==null?void 0:n.$route})}function ou(){var e,n;return(n=(e=Ye("useRouter"))==null?void 0:e.proxy)==null?void 0:n.$router}function Va(e,n){var v,f;const t=Bt("RouterLink"),a=y(()=>!!(e.href||e.to)),l=y(()=>(a==null?void 0:a.value)||Qi(n,"click")||Qi(e,"click"));if(typeof t=="string"||!("useLink"in t)){const m=F(e,"href");return{isLink:a,isClickable:l,href:m,linkProps:St({href:m})}}const o=y(()=>({...e,to:F(()=>e.to||"")})),i=t.useLink(o.value),r=y(()=>e.to?i:void 0),u=tk(),c=y(()=>{var m,b,h;return r.value?e.exact?u.value?((h=r.value.isExactActive)==null?void 0:h.value)&&Ht(r.value.route.value.query,u.value.query):((b=r.value.isExactActive)==null?void 0:b.value)??!1:((m=r.value.isActive)==null?void 0:m.value)??!1:!1}),d=y(()=>{var m;return e.to?(m=r.value)==null?void 0:m.route.value.href:e.href});return{isLink:a,isClickable:l,isActive:c,route:(v=r.value)==null?void 0:v.route,navigate:(f=r.value)==null?void 0:f.navigate,href:d,linkProps:St({href:d,"aria-current":y(()=>c.value?"page":void 0)})}}const Ca=B({href:String,replace:Boolean,to:[String,Object],exact:Boolean},"router");let Hl=!1;function nk(e,n){let t=!1,a,l;$e&&(Te(()=>{window.addEventListener("popstate",o),a=e==null?void 0:e.beforeEach((i,r,u)=>{Hl?t?n(u):u():setTimeout(()=>t?n(u):u()),Hl=!0}),l=e==null?void 0:e.afterEach(()=>{Hl=!1})}),mt(()=>{window.removeEventListener("popstate",o),a==null||a(),l==null||l()}));function o(i){var r;(r=i.state)!=null&&r.replaced||(t=!0,setTimeout(()=>t=!1))}}function ak(e,n){Q(()=>{var t;return(t=e.isActive)==null?void 0:t.value},t=>{e.isLink.value&&t&&n&&Te(()=>{n(!0)})},{immediate:!0})}const fo=Symbol("rippleStop"),lk=80;function Tr(e,n){e.style.transform=n,e.style.webkitTransform=n}function mo(e){return e.constructor.name==="TouchEvent"}function iu(e){return e.constructor.name==="KeyboardEvent"}const ok=function(e,n){var v;let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=0,l=0;if(!iu(e)){const f=n.getBoundingClientRect(),m=mo(e)?e.touches[e.touches.length-1]:e;a=m.clientX-f.left,l=m.clientY-f.top}let o=0,i=.3;(v=n._ripple)!=null&&v.circle?(i=.15,o=n.clientWidth/2,o=t.center?o:o+Math.sqrt((a-o)**2+(l-o)**2)/4):o=Math.sqrt(n.clientWidth**2+n.clientHeight**2)/2;const r=`${(n.clientWidth-o*2)/2}px`,u=`${(n.clientHeight-o*2)/2}px`,c=t.center?r:`${a-o}px`,d=t.center?u:`${l-o}px`;return{radius:o,scale:i,x:c,y:d,centerX:r,centerY:u}},qa={show(e,n){var m;let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(!((m=n==null?void 0:n._ripple)!=null&&m.enabled))return;const a=document.createElement("span"),l=document.createElement("span");a.appendChild(l),a.className="v-ripple__container",t.class&&(a.className+=` ${t.class}`);const{radius:o,scale:i,x:r,y:u,centerX:c,centerY:d}=ok(e,n,t),v=`${o*2}px`;l.className="v-ripple__animation",l.style.width=v,l.style.height=v,n.appendChild(a);const f=window.getComputedStyle(n);f&&f.position==="static"&&(n.style.position="relative",n.dataset.previousPosition="static"),l.classList.add("v-ripple__animation--enter"),l.classList.add("v-ripple__animation--visible"),Tr(l,`translate(${r}, ${u}) scale3d(${i},${i},${i})`),l.dataset.activated=String(performance.now()),setTimeout(()=>{l.classList.remove("v-ripple__animation--enter"),l.classList.add("v-ripple__animation--in"),Tr(l,`translate(${c}, ${d}) scale3d(1,1,1)`)},0)},hide(e){var o;if(!((o=e==null?void 0:e._ripple)!=null&&o.enabled))return;const n=e.getElementsByClassName("v-ripple__animation");if(n.length===0)return;const t=n[n.length-1];if(t.dataset.isHiding)return;t.dataset.isHiding="true";const a=performance.now()-Number(t.dataset.activated),l=Math.max(250-a,0);setTimeout(()=>{t.classList.remove("v-ripple__animation--in"),t.classList.add("v-ripple__animation--out"),setTimeout(()=>{var r;e.getElementsByClassName("v-ripple__animation").length===1&&e.dataset.previousPosition&&(e.style.position=e.dataset.previousPosition,delete e.dataset.previousPosition),((r=t.parentNode)==null?void 0:r.parentNode)===e&&e.removeChild(t.parentNode)},300)},l)}};function ru(e){return typeof e>"u"||!!e}function ca(e){const n={},t=e.currentTarget;if(!(!(t!=null&&t._ripple)||t._ripple.touched||e[fo])){if(e[fo]=!0,mo(e))t._ripple.touched=!0,t._ripple.isTouch=!0;else if(t._ripple.isTouch)return;if(n.center=t._ripple.centered||iu(e),t._ripple.class&&(n.class=t._ripple.class),mo(e)){if(t._ripple.showTimerCommit)return;t._ripple.showTimerCommit=()=>{qa.show(e,t,n)},t._ripple.showTimer=window.setTimeout(()=>{var a;(a=t==null?void 0:t._ripple)!=null&&a.showTimerCommit&&(t._ripple.showTimerCommit(),t._ripple.showTimerCommit=null)},lk)}else qa.show(e,t,n)}}function Ar(e){e[fo]=!0}function Vt(e){const n=e.currentTarget;if(n!=null&&n._ripple){if(window.clearTimeout(n._ripple.showTimer),e.type==="touchend"&&n._ripple.showTimerCommit){n._ripple.showTimerCommit(),n._ripple.showTimerCommit=null,n._ripple.showTimer=window.setTimeout(()=>{Vt(e)});return}window.setTimeout(()=>{n._ripple&&(n._ripple.touched=!1)}),qa.hide(n)}}function su(e){const n=e.currentTarget;n!=null&&n._ripple&&(n._ripple.showTimerCommit&&(n._ripple.showTimerCommit=null),window.clearTimeout(n._ripple.showTimer))}let da=!1;function uu(e){!da&&(e.keyCode===Ki.enter||e.keyCode===Ki.space)&&(da=!0,ca(e))}function cu(e){da=!1,Vt(e)}function du(e){da&&(da=!1,Vt(e))}function vu(e,n,t){const{value:a,modifiers:l}=n,o=ru(a);if(o||qa.hide(e),e._ripple=e._ripple??{},e._ripple.enabled=o,e._ripple.centered=l.center,e._ripple.circle=l.circle,Uo(a)&&a.class&&(e._ripple.class=a.class),o&&!t){if(l.stop){e.addEventListener("touchstart",Ar,{passive:!0}),e.addEventListener("mousedown",Ar);return}e.addEventListener("touchstart",ca,{passive:!0}),e.addEventListener("touchend",Vt,{passive:!0}),e.addEventListener("touchmove",su,{passive:!0}),e.addEventListener("touchcancel",Vt),e.addEventListener("mousedown",ca),e.addEventListener("mouseup",Vt),e.addEventListener("mouseleave",Vt),e.addEventListener("keydown",uu),e.addEventListener("keyup",cu),e.addEventListener("blur",du),e.addEventListener("dragstart",Vt,{passive:!0})}else!o&&t&&fu(e)}function fu(e){e.removeEventListener("mousedown",ca),e.removeEventListener("touchstart",ca),e.removeEventListener("touchend",Vt),e.removeEventListener("touchmove",su),e.removeEventListener("touchcancel",Vt),e.removeEventListener("mouseup",Vt),e.removeEventListener("mouseleave",Vt),e.removeEventListener("keydown",uu),e.removeEventListener("keyup",cu),e.removeEventListener("dragstart",Vt),e.removeEventListener("blur",du)}function ik(e,n){vu(e,n,!1)}function rk(e){delete e._ripple,fu(e)}function sk(e,n){if(n.value===n.oldValue)return;const t=ru(n.oldValue);vu(e,n,t)}const Zt={mounted:ik,unmounted:rk,updated:sk},hl=B({active:{type:Boolean,default:void 0},activeColor:String,baseColor:String,symbol:{type:null,default:vi},flat:Boolean,icon:[Boolean,String,Function,Object],prependIcon:ve,appendIcon:ve,block:Boolean,readonly:Boolean,slim:Boolean,stacked:Boolean,ripple:{type:[Boolean,Object],default:!0},text:String,...wt(),...ie(),...lt(),...Qe(),...at(),...Ln(),...gl(),...Xt(),...Jn(),...ze(),...Ca(),...jt(),...Ve({tag:"button"}),...Pe(),...Tt({variant:"elevated"})},"VBtn"),Ae=R()({name:"VBtn",props:hl(),emits:{"group:selected":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{themeClasses:l}=De(e),{borderClasses:o}=_t(e),{densityClasses:i}=gt(e),{dimensionStyles:r}=et(e),{elevationClasses:u}=st(e),{loaderClasses:c}=Sa(e),{locationStyles:d}=En(e),{positionClasses:v}=Qn(e),{roundedClasses:f}=Ue(e),{sizeClasses:m,sizeStyles:b}=Zn(e),h=Mn(e,e.symbol,!1),g=Va(e,t),k=y(()=>{var p;return e.active!==void 0?e.active:g.isLink.value?(p=g.isActive)==null?void 0:p.value:h==null?void 0:h.isSelected.value}),S=y(()=>k.value?e.activeColor??e.color:e.color),C=y(()=>{var I,A;return{color:(h==null?void 0:h.isSelected.value)&&(!g.isLink.value||((I=g.isActive)==null?void 0:I.value))||!h||((A=g.isActive)==null?void 0:A.value)?S.value??e.baseColor:e.baseColor,variant:e.variant}}),{colorClasses:P,colorStyles:x,variantClasses:_}=Bn(C),T=y(()=>(h==null?void 0:h.disabled.value)||e.disabled),V=y(()=>e.variant==="elevated"&&!(e.disabled||e.flat||e.border)),w=y(()=>{if(!(e.value===void 0||typeof e.value=="symbol"))return Object(e.value)===e.value?JSON.stringify(e.value,null,0):e.value});function $(p){var I;T.value||g.isLink.value&&(p.metaKey||p.ctrlKey||p.shiftKey||p.button!==0||t.target==="_blank")||((I=g.navigate)==null||I.call(g,p),h==null||h.toggle())}return ak(g,h==null?void 0:h.select),W(()=>{const p=g.isLink.value?"a":e.tag,I=!!(e.prependIcon||a.prepend),A=!!(e.appendIcon||a.append),M=!!(e.icon&&e.icon!==!0);return je(s(p,z({type:p==="a"?void 0:"button",class:["v-btn",h==null?void 0:h.selectedClass.value,{"v-btn--active":k.value,"v-btn--block":e.block,"v-btn--disabled":T.value,"v-btn--elevated":V.value,"v-btn--flat":e.flat,"v-btn--icon":!!e.icon,"v-btn--loading":e.loading,"v-btn--readonly":e.readonly,"v-btn--slim":e.slim,"v-btn--stacked":e.stacked},l.value,o.value,P.value,i.value,u.value,c.value,v.value,f.value,m.value,_.value,e.class],style:[x.value,r.value,d.value,b.value,e.style],"aria-busy":e.loading?!0:void 0,disabled:T.value||void 0,tabindex:e.loading||e.readonly?-1:void 0,onClick:$,value:w.value},g.linkProps),{default:()=>{var j;return[on(!0,"v-btn"),!e.icon&&I&&s("span",{key:"prepend",class:"v-btn__prepend"},[a.prepend?s(pe,{key:"prepend-defaults",disabled:!e.prependIcon,defaults:{VIcon:{icon:e.prependIcon}}},a.prepend):s(Be,{key:"prepend-icon",icon:e.prependIcon},null)]),s("span",{class:"v-btn__content","data-no-activator":""},[!a.default&&M?s(Be,{key:"content-icon",icon:e.icon},null):s(pe,{key:"content-defaults",disabled:!M,defaults:{VIcon:{icon:e.icon}}},{default:()=>{var Y;return[((Y=a.default)==null?void 0:Y.call(a))??e.text]}})]),!e.icon&&A&&s("span",{key:"append",class:"v-btn__append"},[a.append?s(pe,{key:"append-defaults",disabled:!e.appendIcon,defaults:{VIcon:{icon:e.appendIcon}}},a.append):s(Be,{key:"append-icon",icon:e.appendIcon},null)]),!!e.loading&&s("span",{key:"loader",class:"v-btn__loader"},[((j=a.loader)==null?void 0:j.call(a))??s(Kn,{color:typeof e.loading=="boolean"?void 0:e.loading,indeterminate:!0,width:"2"},null)])]}}),[[Zt,!T.value&&e.ripple,"",{center:!!e.icon}]])}),{group:h}}}),uk=B({...hl({icon:"$menu",variant:"text"})},"VAppBarNavIcon"),ck=R()({name:"VAppBarNavIcon",props:uk(),setup(e,n){let{slots:t}=n;return W(()=>s(Ae,z(e,{class:["v-app-bar-nav-icon"]}),t)),{}}}),dk=R()({name:"VAppBarTitle",props:Xs(),setup(e,n){let{slots:t}=n;return W(()=>s(ri,z(e,{class:"v-app-bar-title"}),t)),{}}}),mu=Wt("v-alert-title"),vk=["success","info","warning","error"],fk=B({border:{type:[Boolean,String],validator:e=>typeof e=="boolean"||["top","end","bottom","start"].includes(e)},borderColor:String,closable:Boolean,closeIcon:{type:ve,default:"$close"},closeLabel:{type:String,default:"$vuetify.close"},icon:{type:[Boolean,String,Function,Object],default:null},modelValue:{type:Boolean,default:!0},prominent:Boolean,title:String,text:String,type:{type:String,validator:e=>vk.includes(e)},...ie(),...lt(),...Qe(),...at(),...Xt(),...Jn(),...ze(),...Ve(),...Pe(),...Tt({variant:"flat"})},"VAlert"),mk=R()({name:"VAlert",props:fk(),emits:{"click:close":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=de(e,"modelValue"),o=y(()=>{if(e.icon!==!1)return e.type?e.icon??`$${e.type}`:e.icon}),i=y(()=>({color:e.color??e.type,variant:e.variant})),{themeClasses:r}=De(e),{colorClasses:u,colorStyles:c,variantClasses:d}=Bn(i),{densityClasses:v}=gt(e),{dimensionStyles:f}=et(e),{elevationClasses:m}=st(e),{locationStyles:b}=En(e),{positionClasses:h}=Qn(e),{roundedClasses:g}=Ue(e),{textColorClasses:k,textColorStyles:S}=ut(F(e,"borderColor")),{t:C}=qe(),P=y(()=>({"aria-label":C(e.closeLabel),onClick(x){l.value=!1,t("click:close",x)}}));return()=>{const x=!!(a.prepend||o.value),_=!!(a.title||e.title),T=!!(a.close||e.closable);return l.value&&s(e.tag,{class:["v-alert",e.border&&{"v-alert--border":!!e.border,[`v-alert--border-${e.border===!0?"start":e.border}`]:!0},{"v-alert--prominent":e.prominent},r.value,u.value,v.value,m.value,h.value,g.value,d.value,e.class],style:[c.value,f.value,b.value,e.style],role:"alert"},{default:()=>{var V,w;return[on(!1,"v-alert"),e.border&&s("div",{key:"border",class:["v-alert__border",k.value],style:S.value},null),x&&s("div",{key:"prepend",class:"v-alert__prepend"},[a.prepend?s(pe,{key:"prepend-defaults",disabled:!o.value,defaults:{VIcon:{density:e.density,icon:o.value,size:e.prominent?44:28}}},a.prepend):s(Be,{key:"prepend-icon",density:e.density,icon:o.value,size:e.prominent?44:28},null)]),s("div",{class:"v-alert__content"},[_&&s(mu,{key:"title"},{default:()=>{var $;return[(($=a.title)==null?void 0:$.call(a))??e.title]}}),((V=a.text)==null?void 0:V.call(a))??e.text,(w=a.default)==null?void 0:w.call(a)]),a.append&&s("div",{key:"append",class:"v-alert__append"},[a.append()]),T&&s("div",{key:"close",class:"v-alert__close"},[a.close?s(pe,{key:"close-defaults",defaults:{VBtn:{icon:e.closeIcon,size:"x-small",variant:"text"}}},{default:()=>{var $;return[($=a.close)==null?void 0:$.call(a,{props:P.value})]}}):s(Ae,z({key:"close-btn",icon:e.closeIcon,size:"x-small",variant:"text"},P.value),null)])]}})}}}),gk=B({start:Boolean,end:Boolean,icon:ve,image:String,text:String,...wt(),...ie(),...lt(),...ze(),...jt(),...Ve(),...Pe(),...Tt({variant:"flat"})},"VAvatar"),It=R()({name:"VAvatar",props:gk(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{borderClasses:l}=_t(e),{colorClasses:o,colorStyles:i,variantClasses:r}=Bn(e),{densityClasses:u}=gt(e),{roundedClasses:c}=Ue(e),{sizeClasses:d,sizeStyles:v}=Zn(e);return W(()=>s(e.tag,{class:["v-avatar",{"v-avatar--start":e.start,"v-avatar--end":e.end},a.value,l.value,o.value,u.value,c.value,d.value,r.value,e.class],style:[i.value,v.value,e.style]},{default:()=>[t.default?s(pe,{key:"content-defaults",defaults:{VImg:{cover:!0,src:e.image},VIcon:{icon:e.icon}}},{default:()=>[t.default()]}):e.image?s(Yt,{key:"image",src:e.image,alt:"",cover:!0},null):e.icon?s(Be,{key:"icon",icon:e.icon},null):e.text,on(!1,"v-avatar")]})),{}}}),hk=B({text:String,onClick:ot(),...ie(),...Pe()},"VLabel"),ea=R()({name:"VLabel",props:hk(),setup(e,n){let{slots:t}=n;return W(()=>{var a;return s("label",{class:["v-label",{"v-label--clickable":!!e.onClick},e.class],style:e.style,onClick:e.onClick},[e.text,(a=t.default)==null?void 0:a.call(t)])}),{}}}),gu=Symbol.for("vuetify:selection-control-group"),fi=B({color:String,disabled:{type:Boolean,default:null},defaultsTarget:String,error:Boolean,id:String,inline:Boolean,falseIcon:ve,trueIcon:ve,ripple:{type:[Boolean,Object],default:!0},multiple:{type:Boolean,default:null},name:String,readonly:{type:Boolean,default:null},modelValue:null,type:String,valueComparator:{type:Function,default:Ht},...ie(),...lt(),...Pe()},"SelectionControlGroup"),yk=B({...fi({defaultsTarget:"VSelectionControl"})},"VSelectionControlGroup"),hu=R()({name:"VSelectionControlGroup",props:yk(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),l=rt(),o=y(()=>e.id||`v-selection-control-group-${l}`),i=y(()=>e.name||o.value),r=new Set;return Re(gu,{modelValue:a,forceUpdate:()=>{r.forEach(u=>u())},onForceUpdate:u=>{r.add(u),mt(()=>{r.delete(u)})}}),Ge({[e.defaultsTarget]:{color:F(e,"color"),disabled:F(e,"disabled"),density:F(e,"density"),error:F(e,"error"),inline:F(e,"inline"),modelValue:a,multiple:y(()=>!!e.multiple||e.multiple==null&&Array.isArray(a.value)),name:i,falseIcon:F(e,"falseIcon"),trueIcon:F(e,"trueIcon"),readonly:F(e,"readonly"),ripple:F(e,"ripple"),type:F(e,"type"),valueComparator:F(e,"valueComparator")}}),W(()=>{var u;return s("div",{class:["v-selection-control-group",{"v-selection-control-group--inline":e.inline},e.class],style:e.style,role:e.type==="radio"?"radiogroup":void 0},[(u=t.default)==null?void 0:u.call(t)])}),{}}}),yl=B({label:String,baseColor:String,trueValue:null,falseValue:null,value:null,...ie(),...fi()},"VSelectionControl");function bk(e){const n=xe(gu,void 0),{densityClasses:t}=gt(e),a=de(e,"modelValue"),l=y(()=>e.trueValue!==void 0?e.trueValue:e.value!==void 0?e.value:!0),o=y(()=>e.falseValue!==void 0?e.falseValue:!1),i=y(()=>!!e.multiple||e.multiple==null&&Array.isArray(a.value)),r=y({get(){const m=n?n.modelValue.value:a.value;return i.value?We(m).some(b=>e.valueComparator(b,l.value)):e.valueComparator(m,l.value)},set(m){if(e.readonly)return;const b=m?l.value:o.value;let h=b;i.value&&(h=m?[...We(a.value),b]:We(a.value).filter(g=>!e.valueComparator(g,l.value))),n?n.modelValue.value=h:a.value=h}}),{textColorClasses:u,textColorStyles:c}=ut(y(()=>{if(!(e.error||e.disabled))return r.value?e.color:e.baseColor})),{backgroundColorClasses:d,backgroundColorStyles:v}=Le(y(()=>r.value&&!e.error&&!e.disabled?e.color:e.baseColor)),f=y(()=>r.value?e.trueIcon:e.falseIcon);return{group:n,densityClasses:t,trueValue:l,falseValue:o,model:r,textColorClasses:u,textColorStyles:c,backgroundColorClasses:d,backgroundColorStyles:v,icon:f}}const tn=R()({name:"VSelectionControl",directives:{Ripple:Zt},inheritAttrs:!1,props:yl(),emits:{"update:modelValue":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{group:l,densityClasses:o,icon:i,model:r,textColorClasses:u,textColorStyles:c,backgroundColorClasses:d,backgroundColorStyles:v,trueValue:f}=bk(e),m=rt(),b=ee(!1),h=ee(!1),g=H(),k=y(()=>e.id||`input-${m}`),S=y(()=>!e.disabled&&!e.readonly);l==null||l.onForceUpdate(()=>{g.value&&(g.value.checked=r.value)});function C(T){S.value&&(b.value=!0,Gn(T.target,":focus-visible")!==!1&&(h.value=!0))}function P(){b.value=!1,h.value=!1}function x(T){T.stopPropagation()}function _(T){if(!S.value){g.value&&(g.value.checked=r.value);return}e.readonly&&l&&Te(()=>l.forceUpdate()),r.value=T.target.checked}return W(()=>{var p,I;const T=a.label?a.label({label:e.label,props:{for:k.value}}):e.label,[V,w]=ln(t),$=s("input",z({ref:g,checked:r.value,disabled:!!e.disabled,id:k.value,onBlur:P,onFocus:C,onInput:_,"aria-disabled":!!e.disabled,"aria-label":e.label,type:e.type,value:f.value,name:e.name,"aria-checked":e.type==="checkbox"?r.value:void 0},w),null);return s("div",z({class:["v-selection-control",{"v-selection-control--dirty":r.value,"v-selection-control--disabled":e.disabled,"v-selection-control--error":e.error,"v-selection-control--focused":b.value,"v-selection-control--focus-visible":h.value,"v-selection-control--inline":e.inline},o.value,e.class]},V,{style:e.style}),[s("div",{class:["v-selection-control__wrapper",u.value],style:c.value},[(p=a.default)==null?void 0:p.call(a,{backgroundColorClasses:d,backgroundColorStyles:v}),je(s("div",{class:["v-selection-control__input"]},[((I=a.input)==null?void 0:I.call(a,{model:r,textColorClasses:u,textColorStyles:c,backgroundColorClasses:d,backgroundColorStyles:v,inputNode:$,icon:i.value,props:{onFocus:C,onBlur:P,id:k.value}}))??s(ae,null,[i.value&&s(Be,{key:"icon",icon:i.value},null),$])]),[[Ct("ripple"),e.ripple&&[!e.disabled&&!e.readonly,null,["center","circle"]]]])]),T&&s(ea,{for:k.value,onClick:x},{default:()=>[T]})])}),{isFocused:b,input:g}}}),yu=B({indeterminate:Boolean,indeterminateIcon:{type:ve,default:"$checkboxIndeterminate"},...yl({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),Ut=R()({name:"VCheckboxBtn",props:yu(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"indeterminate"),l=de(e,"modelValue");function o(u){a.value&&(a.value=!1)}const i=y(()=>a.value?e.indeterminateIcon:e.falseIcon),r=y(()=>a.value?e.indeterminateIcon:e.trueIcon);return W(()=>{const u=Je(tn.filterProps(e),["modelValue"]);return s(tn,z(u,{modelValue:l.value,"onUpdate:modelValue":[c=>l.value=c,o],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:r.value,"aria-checked":a.value?"mixed":void 0}),t)}),{}}});function bu(e){const{t:n}=qe();function t(a){let{name:l}=a;const o={prepend:"prependAction",prependInner:"prependAction",append:"appendAction",appendInner:"appendAction",clear:"clear"}[l],i=e[`onClick:${l}`],r=i&&o?n(`$vuetify.input.${o}`,e.label??""):void 0;return s(Be,{icon:e[`${l}Icon`],"aria-label":r,onClick:i},null)}return{InputIcon:t}}const kk=B({active:Boolean,color:String,messages:{type:[Array,String],default:()=>[]},...ie(),...Et({transition:{component:ui,leaveAbsolute:!0,group:!0}})},"VMessages"),ku=R()({name:"VMessages",props:kk(),setup(e,n){let{slots:t}=n;const a=y(()=>We(e.messages)),{textColorClasses:l,textColorStyles:o}=ut(y(()=>e.color));return W(()=>s(ft,{transition:e.transition,tag:"div",class:["v-messages",l.value,e.class],style:[o.value,e.style],role:"alert","aria-live":"polite"},{default:()=>[e.active&&a.value.map((i,r)=>s("div",{class:"v-messages__message",key:`${r}-${a.value}`},[t.message?t.message({message:i}):i]))]})),{}}}),pa=B({focused:Boolean,"onUpdate:focused":ot()},"focus");function Jt(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt();const t=de(e,"focused"),a=y(()=>({[`${n}--focused`]:t.value}));function l(){t.value=!0}function o(){t.value=!1}return{focusClasses:a,isFocused:t,focus:l,blur:o}}const Su=Symbol.for("vuetify:form"),Sk=B({disabled:Boolean,fastFail:Boolean,readonly:Boolean,modelValue:{type:Boolean,default:null},validateOn:{type:String,default:"input"}},"form");function wk(e){const n=de(e,"modelValue"),t=y(()=>e.disabled),a=y(()=>e.readonly),l=ee(!1),o=H([]),i=H([]);async function r(){const d=[];let v=!0;i.value=[],l.value=!0;for(const f of o.value){const m=await f.validate();if(m.length>0&&(v=!1,d.push({id:f.id,errorMessages:m})),!v&&e.fastFail)break}return i.value=d,l.value=!1,{valid:v,errors:i.value}}function u(){o.value.forEach(d=>d.reset())}function c(){o.value.forEach(d=>d.resetValidation())}return Q(o,()=>{let d=0,v=0;const f=[];for(const m of o.value)m.isValid===!1?(v++,f.push({id:m.id,errorMessages:m.errorMessages})):m.isValid===!0&&d++;i.value=f,n.value=v>0?!1:d===o.value.length?!0:null},{deep:!0,flush:"post"}),Re(Su,{register:d=>{let{id:v,vm:f,validate:m,reset:b,resetValidation:h}=d;o.value.some(g=>g.id===v),o.value.push({id:v,validate:m,reset:b,resetValidation:h,vm:Ed(f),isValid:null,errorMessages:[]})},unregister:d=>{o.value=o.value.filter(v=>v.id!==d)},update:(d,v,f)=>{const m=o.value.find(b=>b.id===d);m&&(m.isValid=v,m.errorMessages=f)},isDisabled:t,isReadonly:a,isValidating:l,isValid:n,items:o,validateOn:F(e,"validateOn")}),{errors:i,isDisabled:t,isReadonly:a,isValidating:l,isValid:n,items:o,validate:r,reset:u,resetValidation:c}}function bl(e){const n=xe(Su,null);return{...n,isReadonly:y(()=>!!((e==null?void 0:e.readonly)??(n==null?void 0:n.isReadonly.value))),isDisabled:y(()=>!!((e==null?void 0:e.disabled)??(n==null?void 0:n.isDisabled.value)))}}const wu=B({disabled:{type:Boolean,default:null},error:Boolean,errorMessages:{type:[Array,String],default:()=>[]},maxErrors:{type:[Number,String],default:1},name:String,label:String,readonly:{type:Boolean,default:null},rules:{type:Array,default:()=>[]},modelValue:null,validateOn:String,validationValue:null,...pa()},"validation");function Vu(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:zt(),t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:rt();const a=de(e,"modelValue"),l=y(()=>e.validationValue===void 0?a.value:e.validationValue),o=bl(e),i=H([]),r=ee(!0),u=y(()=>!!(We(a.value===""?null:a.value).length||We(l.value===""?null:l.value).length)),c=y(()=>{var C;return(C=e.errorMessages)!=null&&C.length?We(e.errorMessages).concat(i.value).slice(0,Math.max(0,+e.maxErrors)):i.value}),d=y(()=>{var x;let C=(e.validateOn??((x=o.validateOn)==null?void 0:x.value))||"input";C==="lazy"&&(C="input lazy"),C==="eager"&&(C="input eager");const P=new Set((C==null?void 0:C.split(" "))??[]);return{input:P.has("input"),blur:P.has("blur")||P.has("input")||P.has("invalid-input"),invalidInput:P.has("invalid-input"),lazy:P.has("lazy"),eager:P.has("eager")}}),v=y(()=>{var C;return e.error||(C=e.errorMessages)!=null&&C.length?!1:e.rules.length?r.value?i.value.length||d.value.lazy?null:!0:!i.value.length:!0}),f=ee(!1),m=y(()=>({[`${n}--error`]:v.value===!1,[`${n}--dirty`]:u.value,[`${n}--disabled`]:o.isDisabled.value,[`${n}--readonly`]:o.isReadonly.value})),b=Ye("validation"),h=y(()=>e.name??L(t));No(()=>{var C;(C=o.register)==null||C.call(o,{id:h.value,vm:b,validate:S,reset:g,resetValidation:k})}),it(()=>{var C;(C=o.unregister)==null||C.call(o,h.value)}),Ke(async()=>{var C;d.value.lazy||await S(!d.value.eager),(C=o.update)==null||C.call(o,h.value,v.value,c.value)}),yt(()=>d.value.input||d.value.invalidInput&&v.value===!1,()=>{Q(l,()=>{if(l.value!=null)S();else if(e.focused){const C=Q(()=>e.focused,P=>{P||S(),C()})}})}),yt(()=>d.value.blur,()=>{Q(()=>e.focused,C=>{C||S()})}),Q([v,c],()=>{var C;(C=o.update)==null||C.call(o,h.value,v.value,c.value)});async function g(){a.value=null,await Te(),await k()}async function k(){r.value=!0,d.value.lazy?i.value=[]:await S(!d.value.eager)}async function S(){let C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;const P=[];f.value=!0;for(const x of e.rules){if(P.length>=+(e.maxErrors??1))break;const T=await(typeof x=="function"?x:()=>x)(l.value);if(T!==!0){if(T!==!1&&typeof T!="string"){console.warn(`${T} is not a valid value. Rule functions must return boolean true or a string.`);continue}P.push(T||"")}}return i.value=P,f.value=!1,r.value=C,i.value}return{errorMessages:c,isDirty:u,isDisabled:o.isDisabled,isReadonly:o.isReadonly,isPristine:r,isValid:v,isValidating:f,reset:g,resetValidation:k,validate:S,validationClasses:m}}const Qt=B({id:String,appendIcon:ve,centerAffix:{type:Boolean,default:!0},prependIcon:ve,hideDetails:[Boolean,String],hideSpinButtons:Boolean,hint:String,persistentHint:Boolean,messages:{type:[Array,String],default:()=>[]},direction:{type:String,default:"horizontal",validator:e=>["horizontal","vertical"].includes(e)},"onClick:prepend":ot(),"onClick:append":ot(),...ie(),...lt(),...ll(Qe(),["maxWidth","minWidth","width"]),...Pe(),...wu()},"VInput"),ct=R()({name:"VInput",props:{...Qt()},emits:{"update:modelValue":e=>!0},setup(e,n){let{attrs:t,slots:a,emit:l}=n;const{densityClasses:o}=gt(e),{dimensionStyles:i}=et(e),{themeClasses:r}=De(e),{rtlClasses:u}=nt(),{InputIcon:c}=bu(e),d=rt(),v=y(()=>e.id||`input-${d}`),f=y(()=>`${v.value}-messages`),{errorMessages:m,isDirty:b,isDisabled:h,isReadonly:g,isPristine:k,isValid:S,isValidating:C,reset:P,resetValidation:x,validate:_,validationClasses:T}=Vu(e,"v-input",v),V=y(()=>({id:v,messagesId:f,isDirty:b,isDisabled:h,isReadonly:g,isPristine:k,isValid:S,isValidating:C,reset:P,resetValidation:x,validate:_})),w=y(()=>{var $;return($=e.errorMessages)!=null&&$.length||!k.value&&m.value.length?m.value:e.hint&&(e.persistentHint||e.focused)?e.hint:e.messages});return W(()=>{var M,j,Y,le;const $=!!(a.prepend||e.prependIcon),p=!!(a.append||e.appendIcon),I=w.value.length>0,A=!e.hideDetails||e.hideDetails==="auto"&&(I||!!a.details);return s("div",{class:["v-input",`v-input--${e.direction}`,{"v-input--center-affix":e.centerAffix,"v-input--hide-spin-buttons":e.hideSpinButtons},o.value,r.value,u.value,T.value,e.class],style:[i.value,e.style]},[$&&s("div",{key:"prepend",class:"v-input__prepend"},[(M=a.prepend)==null?void 0:M.call(a,V.value),e.prependIcon&&s(c,{key:"prepend-icon",name:"prepend"},null)]),a.default&&s("div",{class:"v-input__control"},[(j=a.default)==null?void 0:j.call(a,V.value)]),p&&s("div",{key:"append",class:"v-input__append"},[e.appendIcon&&s(c,{key:"append-icon",name:"append"},null),(Y=a.append)==null?void 0:Y.call(a,V.value)]),A&&s("div",{class:"v-input__details"},[s(ku,{id:f.value,active:I,messages:w.value},{message:a.message}),(le=a.details)==null?void 0:le.call(a,V.value)])])}),{reset:P,resetValidation:x,validate:_,isValid:S,errorMessages:m}}}),Vk=B({...Qt(),...Je(yu(),["inline"])},"VCheckbox"),Ck=R()({name:"VCheckbox",inheritAttrs:!1,props:Vk(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const l=de(e,"modelValue"),{isFocused:o,focus:i,blur:r}=Jt(e),u=rt(),c=y(()=>e.id||`checkbox-${u}`);return W(()=>{const[d,v]=ln(t),f=ct.filterProps(e),m=Ut.filterProps(e);return s(ct,z({class:["v-checkbox",e.class]},d,f,{modelValue:l.value,"onUpdate:modelValue":b=>l.value=b,id:c.value,focused:o.value,style:e.style}),{...a,default:b=>{let{id:h,messagesId:g,isDisabled:k,isReadonly:S,isValid:C}=b;return s(Ut,z(m,{id:h.value,"aria-describedby":g.value,disabled:k.value,readonly:S.value},v,{error:C.value===!1,modelValue:l.value,"onUpdate:modelValue":P=>l.value=P,onFocus:i,onBlur:r}),a)}})}),{}}});function pk(e){let{selectedElement:n,containerElement:t,isRtl:a,isHorizontal:l}=e;const o=va(l,t),i=Cu(l,a,t),r=va(l,n),u=pu(l,n),c=r*.4;return i>u?u-c:i+otypeof e=="boolean"||["always","desktop","mobile"].includes(e)},...ie(),...In({mobile:null}),...Ve(),...Dn({selectedClass:"v-slide-group-item--active"})},"VSlideGroup"),fa=R()({name:"VSlideGroup",props:mi(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{isRtl:a}=nt(),{displayClasses:l,mobile:o}=$t(e),i=rn(e,e.symbol),r=ee(!1),u=ee(0),c=ee(0),d=ee(0),v=y(()=>e.direction==="horizontal"),{resizeRef:f,contentRect:m}=Lt(),{resizeRef:b,contentRect:h}=Lt(),g=cb(),k=y(()=>({container:f.el,duration:200,easing:"easeOutQuart"})),S=y(()=>i.selected.value.length?i.items.value.findIndex(E=>E.id===i.selected.value[0]):-1),C=y(()=>i.selected.value.length?i.items.value.findIndex(E=>E.id===i.selected.value[i.selected.value.length-1]):-1);if($e){let E=-1;Q(()=>[i.selected.value,m.value,h.value,v.value],()=>{cancelAnimationFrame(E),E=requestAnimationFrame(()=>{if(m.value&&h.value){const O=v.value?"width":"height";c.value=m.value[O],d.value=h.value[O],r.value=c.value+1=0&&b.el){const O=b.el.children[C.value];x(O,e.centerActive)}})})}const P=ee(!1);function x(E,O){let te=0;O?te=xk({containerElement:f.el,isHorizontal:v.value,selectedElement:E}):te=pk({containerElement:f.el,isHorizontal:v.value,isRtl:a.value,selectedElement:E}),_(te)}function _(E){if(!$e||!f.el)return;const O=va(v.value,f.el),te=Cu(v.value,a.value,f.el);if(!(Br(v.value,f.el)<=O||Math.abs(E-te)<16)){if(v.value&&a.value&&f.el){const{scrollWidth:ue,offsetWidth:ye}=f.el;E=ue-ye-E}v.value?g.horizontal(E,k.value):g(E,k.value)}}function T(E){const{scrollTop:O,scrollLeft:te}=E.target;u.value=v.value?te:O}function V(E){if(P.value=!0,!(!r.value||!b.el)){for(const O of E.composedPath())for(const te of b.el.children)if(te===O){x(te);return}}}function w(E){P.value=!1}let $=!1;function p(E){var O;!$&&!P.value&&!(E.relatedTarget&&((O=b.el)!=null&&O.contains(E.relatedTarget)))&&M(),$=!1}function I(){$=!0}function A(E){if(!b.el)return;function O(te){E.preventDefault(),M(te)}v.value?E.key==="ArrowRight"?O(a.value?"prev":"next"):E.key==="ArrowLeft"&&O(a.value?"next":"prev"):E.key==="ArrowDown"?O("next"):E.key==="ArrowUp"&&O("prev"),E.key==="Home"?O("first"):E.key==="End"&&O("last")}function M(E){var te,se;if(!b.el)return;let O;if(!E)O=oa(b.el)[0];else if(E==="next"){if(O=(te=b.el.querySelector(":focus"))==null?void 0:te.nextElementSibling,!O)return M("first")}else if(E==="prev"){if(O=(se=b.el.querySelector(":focus"))==null?void 0:se.previousElementSibling,!O)return M("last")}else E==="first"?O=b.el.firstElementChild:E==="last"&&(O=b.el.lastElementChild);O&&O.focus({preventScroll:!0})}function j(E){const O=v.value&&a.value?-1:1,te=(E==="prev"?-O:O)*c.value;let se=u.value+te;if(v.value&&a.value&&f.el){const{scrollWidth:ue,offsetWidth:ye}=f.el;se+=ue-ye}_(se)}const Y=y(()=>({next:i.next,prev:i.prev,select:i.select,isSelected:i.isSelected})),le=y(()=>{switch(e.showArrows){case"always":return!0;case"desktop":return!o.value;case!0:return r.value||Math.abs(u.value)>0;case"mobile":return o.value||r.value||Math.abs(u.value)>0;default:return!o.value&&(r.value||Math.abs(u.value)>0)}}),re=y(()=>Math.abs(u.value)>1),N=y(()=>{if(!f.value)return!1;const E=Br(v.value,f.el),O=_k(v.value,f.el);return E-O-Math.abs(u.value)>1});return W(()=>s(e.tag,{class:["v-slide-group",{"v-slide-group--vertical":!v.value,"v-slide-group--has-affixes":le.value,"v-slide-group--is-overflowing":r.value},l.value,e.class],style:e.style,tabindex:P.value||i.selected.value.length?-1:0,onFocus:p},{default:()=>{var E,O,te;return[le.value&&s("div",{key:"prev",class:["v-slide-group__prev",{"v-slide-group__prev--disabled":!re.value}],onMousedown:I,onClick:()=>re.value&&j("prev")},[((E=t.prev)==null?void 0:E.call(t,Y.value))??s(ua,null,{default:()=>[s(Be,{icon:a.value?e.nextIcon:e.prevIcon},null)]})]),s("div",{key:"container",ref:f,class:"v-slide-group__container",onScroll:T},[s("div",{ref:b,class:"v-slide-group__content",onFocusin:V,onFocusout:w,onKeydown:A},[(O=t.default)==null?void 0:O.call(t,Y.value)])]),le.value&&s("div",{key:"next",class:["v-slide-group__next",{"v-slide-group__next--disabled":!N.value}],onMousedown:I,onClick:()=>N.value&&j("next")},[((te=t.next)==null?void 0:te.call(t,Y.value))??s(ua,null,{default:()=>[s(Be,{icon:a.value?e.prevIcon:e.nextIcon},null)]})])]}})),{selected:i.selected,scrollTo:j,scrollOffset:u,focus:M,hasPrev:re,hasNext:N}}}),_u=Symbol.for("vuetify:v-chip-group"),Pk=B({column:Boolean,filter:Boolean,valueComparator:{type:Function,default:Ht},...mi(),...ie(),...Dn({selectedClass:"v-chip--selected"}),...Ve(),...Pe(),...Tt({variant:"tonal"})},"VChipGroup"),Ik=R()({name:"VChipGroup",props:Pk(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{isSelected:l,select:o,next:i,prev:r,selected:u}=rn(e,_u);return Ge({VChip:{color:F(e,"color"),disabled:F(e,"disabled"),filter:F(e,"filter"),variant:F(e,"variant")}}),W(()=>{const c=fa.filterProps(e);return s(fa,z(c,{class:["v-chip-group",{"v-chip-group--column":e.column},a.value,e.class],style:e.style}),{default:()=>{var d;return[(d=t.default)==null?void 0:d.call(t,{isSelected:l,select:o,next:i,prev:r,selected:u.value})]}})}),{}}}),$k=B({activeClass:String,appendAvatar:String,appendIcon:ve,closable:Boolean,closeIcon:{type:ve,default:"$delete"},closeLabel:{type:String,default:"$vuetify.close"},draggable:Boolean,filter:Boolean,filterIcon:{type:ve,default:"$complete"},label:Boolean,link:{type:Boolean,default:void 0},pill:Boolean,prependAvatar:String,prependIcon:ve,ripple:{type:[Boolean,Object],default:!0},text:String,modelValue:{type:Boolean,default:!0},onClick:ot(),onClickOnce:ot(),...wt(),...ie(),...lt(),...at(),...Ln(),...ze(),...Ca(),...jt(),...Ve({tag:"span"}),...Pe(),...Tt({variant:"tonal"})},"VChip"),ta=R()({name:"VChip",directives:{Ripple:Zt},props:$k(),emits:{"click:close":e=>!0,"update:modelValue":e=>!0,"group:selected":e=>!0,click:e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{t:o}=qe(),{borderClasses:i}=_t(e),{colorClasses:r,colorStyles:u,variantClasses:c}=Bn(e),{densityClasses:d}=gt(e),{elevationClasses:v}=st(e),{roundedClasses:f}=Ue(e),{sizeClasses:m}=Zn(e),{themeClasses:b}=De(e),h=de(e,"modelValue"),g=Mn(e,_u,!1),k=Va(e,t),S=y(()=>e.link!==!1&&k.isLink.value),C=y(()=>!e.disabled&&e.link!==!1&&(!!g||e.link||k.isClickable.value)),P=y(()=>({"aria-label":o(e.closeLabel),onClick(T){T.preventDefault(),T.stopPropagation(),h.value=!1,a("click:close",T)}}));function x(T){var V;a("click",T),C.value&&((V=k.navigate)==null||V.call(k,T),g==null||g.toggle())}function _(T){(T.key==="Enter"||T.key===" ")&&(T.preventDefault(),x(T))}return()=>{var j;const T=k.isLink.value?"a":e.tag,V=!!(e.appendIcon||e.appendAvatar),w=!!(V||l.append),$=!!(l.close||e.closable),p=!!(l.filter||e.filter)&&g,I=!!(e.prependIcon||e.prependAvatar),A=!!(I||l.prepend),M=!g||g.isSelected.value;return h.value&&je(s(T,z({class:["v-chip",{"v-chip--disabled":e.disabled,"v-chip--label":e.label,"v-chip--link":C.value,"v-chip--filter":p,"v-chip--pill":e.pill,[`${e.activeClass}`]:e.activeClass&&((j=k.isActive)==null?void 0:j.value)},b.value,i.value,M?r.value:void 0,d.value,v.value,f.value,m.value,c.value,g==null?void 0:g.selectedClass.value,e.class],style:[M?u.value:void 0,e.style],disabled:e.disabled||void 0,draggable:e.draggable,tabindex:C.value?0:void 0,onClick:x,onKeydown:C.value&&!S.value&&_},k.linkProps),{default:()=>{var Y;return[on(C.value,"v-chip"),p&&s(ci,{key:"filter"},{default:()=>[je(s("div",{class:"v-chip__filter"},[l.filter?s(pe,{key:"filter-defaults",disabled:!e.filterIcon,defaults:{VIcon:{icon:e.filterIcon}}},l.filter):s(Be,{key:"filter-icon",icon:e.filterIcon},null)]),[[Mt,g.isSelected.value]])]}),A&&s("div",{key:"prepend",class:"v-chip__prepend"},[l.prepend?s(pe,{key:"prepend-defaults",disabled:!I,defaults:{VAvatar:{image:e.prependAvatar,start:!0},VIcon:{icon:e.prependIcon,start:!0}}},l.prepend):s(ae,null,[e.prependIcon&&s(Be,{key:"prepend-icon",icon:e.prependIcon,start:!0},null),e.prependAvatar&&s(It,{key:"prepend-avatar",image:e.prependAvatar,start:!0},null)])]),s("div",{class:"v-chip__content","data-no-activator":""},[((Y=l.default)==null?void 0:Y.call(l,{isSelected:g==null?void 0:g.isSelected.value,selectedClass:g==null?void 0:g.selectedClass.value,select:g==null?void 0:g.select,toggle:g==null?void 0:g.toggle,value:g==null?void 0:g.value.value,disabled:e.disabled}))??e.text]),w&&s("div",{key:"append",class:"v-chip__append"},[l.append?s(pe,{key:"append-defaults",disabled:!V,defaults:{VAvatar:{end:!0,image:e.appendAvatar},VIcon:{end:!0,icon:e.appendIcon}}},l.append):s(ae,null,[e.appendIcon&&s(Be,{key:"append-icon",end:!0,icon:e.appendIcon},null),e.appendAvatar&&s(It,{key:"append-avatar",end:!0,image:e.appendAvatar},null)])]),$&&s("button",z({key:"close",class:"v-chip__close",type:"button","data-testid":"close-chip"},P.value),[l.close?s(pe,{key:"close-defaults",defaults:{VIcon:{icon:e.closeIcon,size:"x-small"}}},l.close):s(Be,{key:"close-icon",icon:e.closeIcon,size:"x-small"},null)])]}}),[[Ct("ripple"),C.value&&e.ripple,null]])}}}),go=Symbol.for("vuetify:list");function Pu(){const e=xe(go,{hasPrepend:ee(!1),updateHasPrepend:()=>null}),n={hasPrepend:ee(!1),updateHasPrepend:t=>{t&&(n.hasPrepend.value=t)}};return Re(go,n),e}function Iu(){return xe(go,null)}const gi=e=>{const n={activate:t=>{let{id:a,value:l,activated:o}=t;return a=Ze(a),e&&!l&&o.size===1&&o.has(a)||(l?o.add(a):o.delete(a)),o},in:(t,a,l)=>{let o=new Set;if(t!=null)for(const i of We(t))o=n.activate({id:i,value:!0,activated:new Set(o),children:a,parents:l});return o},out:t=>Array.from(t)};return n},$u=e=>{const n=gi(e);return{activate:a=>{let{activated:l,id:o,...i}=a;o=Ze(o);const r=l.has(o)?new Set([o]):new Set;return n.activate({...i,id:o,activated:r})},in:(a,l,o)=>{let i=new Set;if(a!=null){const r=We(a);r.length&&(i=n.in(r.slice(0,1),l,o))}return i},out:(a,l,o)=>n.out(a,l,o)}},Tk=e=>{const n=gi(e);return{activate:a=>{let{id:l,activated:o,children:i,...r}=a;return l=Ze(l),i.has(l)?o:n.activate({id:l,activated:o,children:i,...r})},in:n.in,out:n.out}},Ak=e=>{const n=$u(e);return{activate:a=>{let{id:l,activated:o,children:i,...r}=a;return l=Ze(l),i.has(l)?o:n.activate({id:l,activated:o,children:i,...r})},in:n.in,out:n.out}},Bk={open:e=>{let{id:n,value:t,opened:a,parents:l}=e;if(t){const o=new Set;o.add(n);let i=l.get(n);for(;i!=null;)o.add(i),i=l.get(i);return o}else return a.delete(n),a},select:()=>null},Tu={open:e=>{let{id:n,value:t,opened:a,parents:l}=e;if(t){let o=l.get(n);for(a.add(n);o!=null&&o!==n;)a.add(o),o=l.get(o);return a}else a.delete(n);return a},select:()=>null},Dk={open:Tu.open,select:e=>{let{id:n,value:t,opened:a,parents:l}=e;if(!t)return a;const o=[];let i=l.get(n);for(;i!=null;)o.push(i),i=l.get(i);return new Set(o)}},hi=e=>{const n={select:t=>{let{id:a,value:l,selected:o}=t;if(a=Ze(a),e&&!l){const i=Array.from(o.entries()).reduce((r,u)=>{let[c,d]=u;return d==="on"&&r.push(c),r},[]);if(i.length===1&&i[0]===a)return o}return o.set(a,l?"on":"off"),o},in:(t,a,l)=>{let o=new Map;for(const i of t||[])o=n.select({id:i,value:!0,selected:new Map(o),children:a,parents:l});return o},out:t=>{const a=[];for(const[l,o]of t.entries())o==="on"&&a.push(l);return a}};return n},Au=e=>{const n=hi(e);return{select:a=>{let{selected:l,id:o,...i}=a;o=Ze(o);const r=l.has(o)?new Map([[o,l.get(o)]]):new Map;return n.select({...i,id:o,selected:r})},in:(a,l,o)=>{let i=new Map;return a!=null&&a.length&&(i=n.in(a.slice(0,1),l,o)),i},out:(a,l,o)=>n.out(a,l,o)}},Lk=e=>{const n=hi(e);return{select:a=>{let{id:l,selected:o,children:i,...r}=a;return l=Ze(l),i.has(l)?o:n.select({id:l,selected:o,children:i,...r})},in:n.in,out:n.out}},Mk=e=>{const n=Au(e);return{select:a=>{let{id:l,selected:o,children:i,...r}=a;return l=Ze(l),i.has(l)?o:n.select({id:l,selected:o,children:i,...r})},in:n.in,out:n.out}},Ek=e=>{const n={select:t=>{let{id:a,value:l,selected:o,children:i,parents:r}=t;a=Ze(a);const u=new Map(o),c=[a];for(;c.length;){const v=c.shift();o.set(Ze(v),l?"on":"off"),i.has(v)&&c.push(...i.get(v))}let d=Ze(r.get(a));for(;d;){const v=i.get(d),f=v.every(b=>o.get(Ze(b))==="on"),m=v.every(b=>!o.has(Ze(b))||o.get(Ze(b))==="off");o.set(d,f?"on":m?"off":"indeterminate"),d=Ze(r.get(d))}return e&&!l&&Array.from(o.entries()).reduce((f,m)=>{let[b,h]=m;return h==="on"&&f.push(b),f},[]).length===0?u:o},in:(t,a,l)=>{let o=new Map;for(const i of t||[])o=n.select({id:i,value:!0,selected:new Map(o),children:a,parents:l});return o},out:(t,a)=>{const l=[];for(const[o,i]of t.entries())i==="on"&&!a.has(o)&&l.push(o);return l}};return n},ma=Symbol.for("vuetify:nested"),Bu={id:ee(),root:{register:()=>null,unregister:()=>null,parents:H(new Map),children:H(new Map),open:()=>null,openOnSelect:()=>null,activate:()=>null,select:()=>null,activatable:H(!1),selectable:H(!1),opened:H(new Set),activated:H(new Set),selected:H(new Map),selectedValues:H([]),getPath:()=>[]}},Fk=B({activatable:Boolean,selectable:Boolean,activeStrategy:[String,Function,Object],selectStrategy:[String,Function,Object],openStrategy:[String,Object],opened:null,activated:null,selected:null,mandatory:Boolean},"nested"),Ok=e=>{let n=!1;const t=H(new Map),a=H(new Map),l=de(e,"opened",e.opened,b=>new Set(b),b=>[...b.values()]),o=y(()=>{if(typeof e.activeStrategy=="object")return e.activeStrategy;if(typeof e.activeStrategy=="function")return e.activeStrategy(e.mandatory);switch(e.activeStrategy){case"leaf":return Tk(e.mandatory);case"single-leaf":return Ak(e.mandatory);case"independent":return gi(e.mandatory);case"single-independent":default:return $u(e.mandatory)}}),i=y(()=>{if(typeof e.selectStrategy=="object")return e.selectStrategy;if(typeof e.selectStrategy=="function")return e.selectStrategy(e.mandatory);switch(e.selectStrategy){case"single-leaf":return Mk(e.mandatory);case"leaf":return Lk(e.mandatory);case"independent":return hi(e.mandatory);case"single-independent":return Au(e.mandatory);case"classic":default:return Ek(e.mandatory)}}),r=y(()=>{if(typeof e.openStrategy=="object")return e.openStrategy;switch(e.openStrategy){case"list":return Dk;case"single":return Bk;case"multiple":default:return Tu}}),u=de(e,"activated",e.activated,b=>o.value.in(b,t.value,a.value),b=>o.value.out(b,t.value,a.value)),c=de(e,"selected",e.selected,b=>i.value.in(b,t.value,a.value),b=>i.value.out(b,t.value,a.value));it(()=>{n=!0});function d(b){const h=[];let g=b;for(;g!=null;)h.unshift(g),g=a.value.get(g);return h}const v=Ye("nested"),f=new Set,m={id:ee(),root:{opened:l,activatable:F(e,"activatable"),selectable:F(e,"selectable"),activated:u,selected:c,selectedValues:y(()=>{const b=[];for(const[h,g]of c.value.entries())g==="on"&&b.push(h);return b}),register:(b,h,g)=>{if(f.has(b)){d(b).map(String).join(" -> "),d(h).concat(b).map(String).join(" -> ");return}else f.add(b);h&&b!==h&&a.value.set(b,h),g&&t.value.set(b,[]),h!=null&&t.value.set(h,[...t.value.get(h)||[],b])},unregister:b=>{if(n)return;f.delete(b),t.value.delete(b);const h=a.value.get(b);if(h){const g=t.value.get(h)??[];t.value.set(h,g.filter(k=>k!==b))}a.value.delete(b)},open:(b,h,g)=>{v.emit("click:open",{id:b,value:h,path:d(b),event:g});const k=r.value.open({id:b,value:h,opened:new Set(l.value),children:t.value,parents:a.value,event:g});k&&(l.value=k)},openOnSelect:(b,h,g)=>{const k=r.value.select({id:b,value:h,selected:new Map(c.value),opened:new Set(l.value),children:t.value,parents:a.value,event:g});k&&(l.value=k)},select:(b,h,g)=>{v.emit("click:select",{id:b,value:h,path:d(b),event:g});const k=i.value.select({id:b,value:h,selected:new Map(c.value),children:t.value,parents:a.value,event:g});k&&(c.value=k),m.root.openOnSelect(b,h,g)},activate:(b,h,g)=>{if(!e.activatable)return m.root.select(b,!0,g);v.emit("click:activate",{id:b,value:h,path:d(b),event:g});const k=o.value.activate({id:b,value:h,activated:new Set(u.value),children:t.value,parents:a.value,event:g});k&&(u.value=k)},children:t,parents:a,getPath:d}};return Re(ma,m),m.root},Du=(e,n)=>{const t=xe(ma,Bu),a=Symbol(rt()),l=y(()=>e.value!==void 0?e.value:a),o={...t,id:l,open:(i,r)=>t.root.open(l.value,i,r),openOnSelect:(i,r)=>t.root.openOnSelect(l.value,i,r),isOpen:y(()=>t.root.opened.value.has(l.value)),parent:y(()=>t.root.parents.value.get(l.value)),activate:(i,r)=>t.root.activate(l.value,i,r),isActivated:y(()=>t.root.activated.value.has(Ze(l.value))),select:(i,r)=>t.root.select(l.value,i,r),isSelected:y(()=>t.root.selected.value.get(Ze(l.value))==="on"),isIndeterminate:y(()=>t.root.selected.value.get(l.value)==="indeterminate"),isLeaf:y(()=>!t.root.children.value.get(l.value)),isGroupActivator:t.isGroupActivator};return!t.isGroupActivator&&t.root.register(l.value,t.id.value,n),it(()=>{!t.isGroupActivator&&t.root.unregister(l.value)}),n&&Re(ma,o),o},Nk=()=>{const e=xe(ma,Bu);Re(ma,{...e,isGroupActivator:!0})},Rk=pt({name:"VListGroupActivator",setup(e,n){let{slots:t}=n;return Nk(),()=>{var a;return(a=t.default)==null?void 0:a.call(t)}}}),Hk=B({activeColor:String,baseColor:String,color:String,collapseIcon:{type:ve,default:"$collapse"},expandIcon:{type:ve,default:"$expand"},prependIcon:ve,appendIcon:ve,fluid:Boolean,subgroup:Boolean,title:String,value:null,...ie(),...Ve()},"VListGroup"),ho=R()({name:"VListGroup",props:Hk(),setup(e,n){let{slots:t}=n;const{isOpen:a,open:l,id:o}=Du(F(e,"value"),!0),i=y(()=>`v-list-group--id-${String(o.value)}`),r=Iu(),{isBooted:u}=An();function c(m){m.stopPropagation(),l(!a.value,m)}const d=y(()=>({onClick:c,class:"v-list-group__header",id:i.value})),v=y(()=>a.value?e.collapseIcon:e.expandIcon),f=y(()=>({VListItem:{active:a.value,activeColor:e.activeColor,baseColor:e.baseColor,color:e.color,prependIcon:e.prependIcon||e.subgroup&&v.value,appendIcon:e.appendIcon||!e.subgroup&&v.value,title:e.title,value:e.value}}));return W(()=>s(e.tag,{class:["v-list-group",{"v-list-group--prepend":r==null?void 0:r.hasPrepend.value,"v-list-group--fluid":e.fluid,"v-list-group--subgroup":e.subgroup,"v-list-group--open":a.value},e.class],style:e.style},{default:()=>[t.activator&&s(pe,{defaults:f.value},{default:()=>[s(Rk,null,{default:()=>[t.activator({props:d.value,isOpen:a.value})]})]}),s(ft,{transition:{component:vl},disabled:!u.value},{default:()=>{var m;return[je(s("div",{class:"v-list-group__items",role:"group","aria-labelledby":i.value},[(m=t.default)==null?void 0:m.call(t)]),[[Mt,a.value]])]}})]})),{isOpen:a}}}),zk=B({opacity:[Number,String],...ie(),...Ve()},"VListItemSubtitle"),Lu=R()({name:"VListItemSubtitle",props:zk(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-list-item-subtitle",e.class],style:[{"--v-list-item-subtitle-opacity":e.opacity},e.style]},t)),{}}}),Mu=Wt("v-list-item-title"),Wk=B({active:{type:Boolean,default:void 0},activeClass:String,activeColor:String,appendAvatar:String,appendIcon:ve,baseColor:String,disabled:Boolean,lines:[Boolean,String],link:{type:Boolean,default:void 0},nav:Boolean,prependAvatar:String,prependIcon:ve,ripple:{type:[Boolean,Object],default:!0},slim:Boolean,subtitle:[String,Number],title:[String,Number],value:null,onClick:ot(),onClickOnce:ot(),...wt(),...ie(),...lt(),...Qe(),...at(),...ze(),...Ca(),...Ve(),...Pe(),...Tt({variant:"text"})},"VListItem"),Kt=R()({name:"VListItem",directives:{Ripple:Zt},props:Wk(),emits:{click:e=>!0},setup(e,n){let{attrs:t,slots:a,emit:l}=n;const o=Va(e,t),i=y(()=>e.value===void 0?o.href.value:e.value),{activate:r,isActivated:u,select:c,isOpen:d,isSelected:v,isIndeterminate:f,isGroupActivator:m,root:b,parent:h,openOnSelect:g,id:k}=Du(i,!1),S=Iu(),C=y(()=>{var se;return e.active!==!1&&(e.active||((se=o.isActive)==null?void 0:se.value)||(b.activatable.value?u.value:v.value))}),P=y(()=>e.link!==!1&&o.isLink.value),x=y(()=>!!S&&(b.selectable.value||b.activatable.value||e.value!=null)),_=y(()=>!e.disabled&&e.link!==!1&&(e.link||o.isClickable.value||x.value)),T=y(()=>e.rounded||e.nav),V=y(()=>e.color??e.activeColor),w=y(()=>({color:C.value?V.value??e.baseColor:e.baseColor,variant:e.variant}));Q(()=>{var se;return(se=o.isActive)==null?void 0:se.value},se=>{se&&h.value!=null&&b.open(h.value,!0),se&&g(se)},{immediate:!0});const{themeClasses:$}=De(e),{borderClasses:p}=_t(e),{colorClasses:I,colorStyles:A,variantClasses:M}=Bn(w),{densityClasses:j}=gt(e),{dimensionStyles:Y}=et(e),{elevationClasses:le}=st(e),{roundedClasses:re}=Ue(T),N=y(()=>e.lines?`v-list-item--${e.lines}-line`:void 0),E=y(()=>({isActive:C.value,select:c,isOpen:d.value,isSelected:v.value,isIndeterminate:f.value}));function O(se){var ue;l("click",se),_.value&&((ue=o.navigate)==null||ue.call(o,se),!m&&(b.activatable.value?r(!u.value,se):(b.selectable.value||e.value!=null)&&c(!v.value,se)))}function te(se){(se.key==="Enter"||se.key===" ")&&(se.preventDefault(),se.target.dispatchEvent(new MouseEvent("click",se)))}return W(()=>{const se=P.value?"a":e.tag,ue=a.title||e.title!=null,ye=a.subtitle||e.subtitle!=null,G=!!(e.appendAvatar||e.appendIcon),ce=!!(G||a.append),me=!!(e.prependAvatar||e.prependIcon),Me=!!(me||a.prepend);return S==null||S.updateHasPrepend(Me),e.activeColor&&jh("active-color",["color","base-color"]),je(s(se,z({class:["v-list-item",{"v-list-item--active":C.value,"v-list-item--disabled":e.disabled,"v-list-item--link":_.value,"v-list-item--nav":e.nav,"v-list-item--prepend":!Me&&(S==null?void 0:S.hasPrepend.value),"v-list-item--slim":e.slim,[`${e.activeClass}`]:e.activeClass&&C.value},$.value,p.value,I.value,j.value,le.value,N.value,re.value,M.value,e.class],style:[A.value,Y.value,e.style],tabindex:_.value?S?-2:0:void 0,"aria-selected":x.value?b.activatable.value?u.value:b.selectable.value?v.value:C.value:void 0,onClick:O,onKeydown:_.value&&!P.value&&te},o.linkProps),{default:()=>{var Ie;return[on(_.value||C.value,"v-list-item"),Me&&s("div",{key:"prepend",class:"v-list-item__prepend"},[a.prepend?s(pe,{key:"prepend-defaults",disabled:!me,defaults:{VAvatar:{density:e.density,image:e.prependAvatar},VIcon:{density:e.density,icon:e.prependIcon},VListItemAction:{start:!0}}},{default:()=>{var Z;return[(Z=a.prepend)==null?void 0:Z.call(a,E.value)]}}):s(ae,null,[e.prependAvatar&&s(It,{key:"prepend-avatar",density:e.density,image:e.prependAvatar},null),e.prependIcon&&s(Be,{key:"prepend-icon",density:e.density,icon:e.prependIcon},null)]),s("div",{class:"v-list-item__spacer"},null)]),s("div",{class:"v-list-item__content","data-no-activator":""},[ue&&s(Mu,{key:"title"},{default:()=>{var Z;return[((Z=a.title)==null?void 0:Z.call(a,{title:e.title}))??e.title]}}),ye&&s(Lu,{key:"subtitle"},{default:()=>{var Z;return[((Z=a.subtitle)==null?void 0:Z.call(a,{subtitle:e.subtitle}))??e.subtitle]}}),(Ie=a.default)==null?void 0:Ie.call(a,E.value)]),ce&&s("div",{key:"append",class:"v-list-item__append"},[a.append?s(pe,{key:"append-defaults",disabled:!G,defaults:{VAvatar:{density:e.density,image:e.appendAvatar},VIcon:{density:e.density,icon:e.appendIcon},VListItemAction:{end:!0}}},{default:()=>{var Z;return[(Z=a.append)==null?void 0:Z.call(a,E.value)]}}):s(ae,null,[e.appendIcon&&s(Be,{key:"append-icon",density:e.density,icon:e.appendIcon},null),e.appendAvatar&&s(It,{key:"append-avatar",density:e.density,image:e.appendAvatar},null)]),s("div",{class:"v-list-item__spacer"},null)])]}}),[[Ct("ripple"),_.value&&e.ripple]])}),{activate:r,isActivated:u,isGroupActivator:m,isSelected:v,list:S,select:c,root:b,id:k}}}),jk=B({color:String,inset:Boolean,sticky:Boolean,title:String,...ie(),...Ve()},"VListSubheader"),Eu=R()({name:"VListSubheader",props:jk(),setup(e,n){let{slots:t}=n;const{textColorClasses:a,textColorStyles:l}=ut(F(e,"color"));return W(()=>{const o=!!(t.default||e.title);return s(e.tag,{class:["v-list-subheader",{"v-list-subheader--inset":e.inset,"v-list-subheader--sticky":e.sticky},a.value,e.class],style:[{textColorStyles:l},e.style]},{default:()=>{var i;return[o&&s("div",{class:"v-list-subheader__text"},[((i=t.default)==null?void 0:i.call(t))??e.title])]}})}),{}}}),Gk=B({color:String,inset:Boolean,length:[Number,String],opacity:[Number,String],thickness:[Number,String],vertical:Boolean,...ie(),...Pe()},"VDivider"),xa=R()({name:"VDivider",props:Gk(),setup(e,n){let{attrs:t,slots:a}=n;const{themeClasses:l}=De(e),{textColorClasses:o,textColorStyles:i}=ut(F(e,"color")),r=y(()=>{const u={};return e.length&&(u[e.vertical?"height":"width"]=ne(e.length)),e.thickness&&(u[e.vertical?"borderRightWidth":"borderTopWidth"]=ne(e.thickness)),u});return W(()=>{const u=s("hr",{class:[{"v-divider":!0,"v-divider--inset":e.inset,"v-divider--vertical":e.vertical},l.value,o.value,e.class],style:[r.value,i.value,{"--v-border-opacity":e.opacity},e.style],"aria-orientation":!t.role||t.role==="separator"?e.vertical?"vertical":"horizontal":void 0,role:`${t.role||"separator"}`},null);return a.default?s("div",{class:["v-divider__wrapper",{"v-divider__wrapper--vertical":e.vertical,"v-divider__wrapper--inset":e.inset}]},[u,s("div",{class:"v-divider__content"},[a.default()]),u]):u}),{}}}),Yk=B({items:Array,returnObject:Boolean},"VListChildren"),Fu=R()({name:"VListChildren",props:Yk(),setup(e,n){let{slots:t}=n;return Pu(),()=>{var a,l;return((a=t.default)==null?void 0:a.call(t))??((l=e.items)==null?void 0:l.map(o=>{var f,m;let{children:i,props:r,type:u,raw:c}=o;if(u==="divider")return((f=t.divider)==null?void 0:f.call(t,{props:r}))??s(xa,r,null);if(u==="subheader")return((m=t.subheader)==null?void 0:m.call(t,{props:r}))??s(Eu,r,null);const d={subtitle:t.subtitle?b=>{var h;return(h=t.subtitle)==null?void 0:h.call(t,{...b,item:c})}:void 0,prepend:t.prepend?b=>{var h;return(h=t.prepend)==null?void 0:h.call(t,{...b,item:c})}:void 0,append:t.append?b=>{var h;return(h=t.append)==null?void 0:h.call(t,{...b,item:c})}:void 0,title:t.title?b=>{var h;return(h=t.title)==null?void 0:h.call(t,{...b,item:c})}:void 0},v=ho.filterProps(r);return i?s(ho,z({value:r==null?void 0:r.value},v),{activator:b=>{let{props:h}=b;const g={...r,...h,value:e.returnObject?c:r.value};return t.header?t.header({props:g}):s(Kt,g,d)},default:()=>s(Fu,{items:i,returnObject:e.returnObject},t)}):t.item?t.item({props:r}):s(Kt,z(r,{value:e.returnObject?c:r.value}),d)}))}}}),Ou=B({items:{type:Array,default:()=>[]},itemTitle:{type:[String,Array,Function],default:"title"},itemValue:{type:[String,Array,Function],default:"value"},itemChildren:{type:[Boolean,String,Array,Function],default:"children"},itemProps:{type:[Boolean,String,Array,Function],default:"props"},returnObject:Boolean,valueComparator:{type:Function,default:Ht}},"list-items");function en(e,n){const t=tt(n,e.itemTitle,n),a=tt(n,e.itemValue,t),l=tt(n,e.itemChildren),o=e.itemProps===!0?typeof n=="object"&&n!=null&&!Array.isArray(n)?"children"in n?Je(n,["children"]):n:void 0:tt(n,e.itemProps),i={title:t,value:a,...o};return{title:String(i.title??""),value:i.value,props:i,children:Array.isArray(l)?Nu(e,l):void 0,raw:n}}function Nu(e,n){const t=[];for(const a of n)t.push(en(e,a));return t}function yi(e){const n=y(()=>Nu(e,e.items)),t=y(()=>n.value.some(o=>o.value===null));function a(o){return t.value||(o=o.filter(i=>i!==null)),o.map(i=>e.returnObject&&typeof i=="string"?en(e,i):n.value.find(r=>e.valueComparator(i,r.value))||en(e,i))}function l(o){return e.returnObject?o.map(i=>{let{raw:r}=i;return r}):o.map(i=>{let{value:r}=i;return r})}return{items:n,transformIn:a,transformOut:l}}function Uk(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"}function Kk(e,n){const t=tt(n,e.itemType,"item"),a=Uk(n)?n:tt(n,e.itemTitle),l=tt(n,e.itemValue,void 0),o=tt(n,e.itemChildren),i=e.itemProps===!0?Je(n,["children"]):tt(n,e.itemProps),r={title:a,value:l,...i};return{type:t,title:r.title,value:r.value,props:r,children:t==="item"&&o?Ru(e,o):void 0,raw:n}}function Ru(e,n){const t=[];for(const a of n)t.push(Kk(e,a));return t}function qk(e){return{items:y(()=>Ru(e,e.items))}}const Xk=B({baseColor:String,activeColor:String,activeClass:String,bgColor:String,disabled:Boolean,expandIcon:ve,collapseIcon:ve,lines:{type:[Boolean,String],default:"one"},slim:Boolean,nav:Boolean,"onClick:open":ot(),"onClick:select":ot(),"onUpdate:opened":ot(),...Fk({selectStrategy:"single-leaf",openStrategy:"list"}),...wt(),...ie(),...lt(),...Qe(),...at(),itemType:{type:String,default:"type"},...Ou(),...ze(),...Ve(),...Pe(),...Tt({variant:"text"})},"VList"),kl=R()({name:"VList",props:Xk(),emits:{"update:selected":e=>!0,"update:activated":e=>!0,"update:opened":e=>!0,"click:open":e=>!0,"click:activate":e=>!0,"click:select":e=>!0},setup(e,n){let{slots:t}=n;const{items:a}=qk(e),{themeClasses:l}=De(e),{backgroundColorClasses:o,backgroundColorStyles:i}=Le(F(e,"bgColor")),{borderClasses:r}=_t(e),{densityClasses:u}=gt(e),{dimensionStyles:c}=et(e),{elevationClasses:d}=st(e),{roundedClasses:v}=Ue(e),{children:f,open:m,parents:b,select:h,getPath:g}=Ok(e),k=y(()=>e.lines?`v-list--${e.lines}-line`:void 0),S=F(e,"activeColor"),C=F(e,"baseColor"),P=F(e,"color");Pu(),Ge({VListGroup:{activeColor:S,baseColor:C,color:P,expandIcon:F(e,"expandIcon"),collapseIcon:F(e,"collapseIcon")},VListItem:{activeClass:F(e,"activeClass"),activeColor:S,baseColor:C,color:P,density:F(e,"density"),disabled:F(e,"disabled"),lines:F(e,"lines"),nav:F(e,"nav"),slim:F(e,"slim"),variant:F(e,"variant")}});const x=ee(!1),_=H();function T(A){x.value=!0}function V(A){x.value=!1}function w(A){var M;!x.value&&!(A.relatedTarget&&((M=_.value)!=null&&M.contains(A.relatedTarget)))&&I()}function $(A){const M=A.target;if(!(!_.value||["INPUT","TEXTAREA"].includes(M.tagName))){if(A.key==="ArrowDown")I("next");else if(A.key==="ArrowUp")I("prev");else if(A.key==="Home")I("first");else if(A.key==="End")I("last");else return;A.preventDefault()}}function p(A){x.value=!0}function I(A){if(_.value)return gn(_.value,A)}return W(()=>s(e.tag,{ref:_,class:["v-list",{"v-list--disabled":e.disabled,"v-list--nav":e.nav,"v-list--slim":e.slim},l.value,o.value,r.value,u.value,d.value,k.value,v.value,e.class],style:[i.value,c.value,e.style],tabindex:e.disabled||x.value?-1:0,role:"listbox","aria-activedescendant":void 0,onFocusin:T,onFocusout:V,onFocus:w,onKeydown:$,onMousedown:p},{default:()=>[s(Fu,{items:a.value,returnObject:e.returnObject},t)]})),{open:m,select:h,focus:I,children:f,parents:b,getPath:g}}}),Zk=Wt("v-list-img"),Jk=B({start:Boolean,end:Boolean,...ie(),...Ve()},"VListItemAction"),Qk=R()({name:"VListItemAction",props:Jk(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-list-item-action",{"v-list-item-action--start":e.start,"v-list-item-action--end":e.end},e.class],style:e.style},t)),{}}}),eS=B({start:Boolean,end:Boolean,...ie(),...Ve()},"VListItemMedia"),tS=R()({name:"VListItemMedia",props:eS(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-list-item-media",{"v-list-item-media--start":e.start,"v-list-item-media--end":e.end},e.class],style:e.style},t)),{}}});function zl(e,n){return{x:e.x+n.x,y:e.y+n.y}}function nS(e,n){return{x:e.x-n.x,y:e.y-n.y}}function Dr(e,n){if(e.side==="top"||e.side==="bottom"){const{side:t,align:a}=e,l=a==="left"?0:a==="center"?n.width/2:a==="right"?n.width:a,o=t==="top"?0:t==="bottom"?n.height:t;return zl({x:l,y:o},n)}else if(e.side==="left"||e.side==="right"){const{side:t,align:a}=e,l=t==="left"?0:t==="right"?n.width:t,o=a==="top"?0:a==="center"?n.height/2:a==="bottom"?n.height:a;return zl({x:l,y:o},n)}return zl({x:n.width/2,y:n.height/2},n)}const Hu={static:oS,connected:rS},aS=B({locationStrategy:{type:[String,Function],default:"static",validator:e=>typeof e=="function"||e in Hu},location:{type:String,default:"bottom"},origin:{type:String,default:"auto"},offset:[Number,String,Array]},"VOverlay-location-strategies");function lS(e,n){const t=H({}),a=H();$e&&yt(()=>!!(n.isActive.value&&e.locationStrategy),o=>{var i,r;Q(()=>e.locationStrategy,o),mt(()=>{window.removeEventListener("resize",l),a.value=void 0}),window.addEventListener("resize",l,{passive:!0}),typeof e.locationStrategy=="function"?a.value=(i=e.locationStrategy(n,e,t))==null?void 0:i.updateLocation:a.value=(r=Hu[e.locationStrategy](n,e,t))==null?void 0:r.updateLocation});function l(o){var i;(i=a.value)==null||i.call(a,o)}return{contentStyles:t,updateLocation:a}}function oS(){}function iS(e,n){const t=Jo(e);return n?t.x+=parseFloat(e.style.right||0):t.x-=parseFloat(e.style.left||0),t.y-=parseFloat(e.style.top||0),t}function rS(e,n,t){(Array.isArray(e.target.value)||dy(e.target.value))&&Object.assign(t.value,{position:"fixed",top:0,[e.isRtl.value?"right":"left"]:0});const{preferredAnchor:l,preferredOrigin:o}=Xo(()=>{const b=to(n.location,e.isRtl.value),h=n.origin==="overlap"?b:n.origin==="auto"?Fl(b):to(n.origin,e.isRtl.value);return b.side===h.side&&b.align===Ol(h).align?{preferredAnchor:er(b),preferredOrigin:er(h)}:{preferredAnchor:b,preferredOrigin:h}}),[i,r,u,c]=["minWidth","minHeight","maxWidth","maxHeight"].map(b=>y(()=>{const h=parseFloat(n[b]);return isNaN(h)?1/0:h})),d=y(()=>{if(Array.isArray(n.offset))return n.offset;if(typeof n.offset=="string"){const b=n.offset.split(" ").map(parseFloat);return b.length<2&&b.push(0),b}return typeof n.offset=="number"?[n.offset,0]:[0,0]});let v=!1;const f=new ResizeObserver(()=>{v&&m()});Q([e.target,e.contentEl],(b,h)=>{let[g,k]=b,[S,C]=h;S&&!Array.isArray(S)&&f.unobserve(S),g&&!Array.isArray(g)&&f.observe(g),C&&f.unobserve(C),k&&f.observe(k)},{immediate:!0}),mt(()=>{f.disconnect()});function m(){if(v=!1,requestAnimationFrame(()=>v=!0),!e.target.value||!e.contentEl.value)return;const b=Ss(e.target.value),h=iS(e.contentEl.value,e.isRtl.value),g=Ua(e.contentEl.value),k=12;g.length||(g.push(document.documentElement),e.contentEl.value.style.top&&e.contentEl.value.style.left||(h.x-=parseFloat(document.documentElement.style.getPropertyValue("--v-body-scroll-x")||0),h.y-=parseFloat(document.documentElement.style.getPropertyValue("--v-body-scroll-y")||0)));const S=g.reduce((p,I)=>{const A=I.getBoundingClientRect(),M=new hn({x:I===document.documentElement?0:A.x,y:I===document.documentElement?0:A.y,width:I.clientWidth,height:I.clientHeight});return p?new hn({x:Math.max(p.left,M.left),y:Math.max(p.top,M.top),width:Math.min(p.right,M.right)-Math.max(p.left,M.left),height:Math.min(p.bottom,M.bottom)-Math.max(p.top,M.top)}):M},void 0);S.x+=k,S.y+=k,S.width-=k*2,S.height-=k*2;let C={anchor:l.value,origin:o.value};function P(p){const I=new hn(h),A=Dr(p.anchor,b),M=Dr(p.origin,I);let{x:j,y:Y}=nS(A,M);switch(p.anchor.side){case"top":Y-=d.value[0];break;case"bottom":Y+=d.value[0];break;case"left":j-=d.value[0];break;case"right":j+=d.value[0];break}switch(p.anchor.align){case"top":Y-=d.value[1];break;case"bottom":Y+=d.value[1];break;case"left":j-=d.value[1];break;case"right":j+=d.value[1];break}return I.x+=j,I.y+=Y,I.width=Math.min(I.width,u.value),I.height=Math.min(I.height,c.value),{overflows:nr(I,S),x:j,y:Y}}let x=0,_=0;const T={x:0,y:0},V={x:!1,y:!1};let w=-1;for(;!(w++>10);){const{x:p,y:I,overflows:A}=P(C);x+=p,_+=I,h.x+=p,h.y+=I;{const M=tr(C.anchor),j=A.x.before||A.x.after,Y=A.y.before||A.y.after;let le=!1;if(["x","y"].forEach(re=>{if(re==="x"&&j&&!V.x||re==="y"&&Y&&!V.y){const N={anchor:{...C.anchor},origin:{...C.origin}},E=re==="x"?M==="y"?Ol:Fl:M==="y"?Fl:Ol;N.anchor=E(N.anchor),N.origin=E(N.origin);const{overflows:O}=P(N);(O[re].before<=A[re].before&&O[re].after<=A[re].after||O[re].before+O[re].after<(A[re].before+A[re].after)/2)&&(C=N,le=V[re]=!0)}}),le)continue}A.x.before&&(x+=A.x.before,h.x+=A.x.before),A.x.after&&(x-=A.x.after,h.x-=A.x.after),A.y.before&&(_+=A.y.before,h.y+=A.y.before),A.y.after&&(_-=A.y.after,h.y-=A.y.after);{const M=nr(h,S);T.x=S.width-M.x.before-M.x.after,T.y=S.height-M.y.before-M.y.after,x+=M.x.before,h.x+=M.x.before,_+=M.y.before,h.y+=M.y.before}break}const $=tr(C.anchor);return Object.assign(t.value,{"--v-overlay-anchor-origin":`${C.anchor.side} ${C.anchor.align}`,transformOrigin:`${C.origin.side} ${C.origin.align}`,top:ne(Wl(_)),left:e.isRtl.value?void 0:ne(Wl(x)),right:e.isRtl.value?ne(Wl(-x)):void 0,minWidth:ne($==="y"?Math.min(i.value,b.width):i.value),maxWidth:ne(Lr(Xe(T.x,i.value===1/0?0:i.value,u.value))),maxHeight:ne(Lr(Xe(T.y,r.value===1/0?0:r.value,c.value)))}),{available:T,contentBox:h}}return Q(()=>[l.value,o.value,n.offset,n.minWidth,n.minHeight,n.maxWidth,n.maxHeight],()=>m()),Te(()=>{const b=m();if(!b)return;const{available:h,contentBox:g}=b;g.height>h.y&&requestAnimationFrame(()=>{m(),requestAnimationFrame(()=>{m()})})}),{updateLocation:m}}function Wl(e){return Math.round(e*devicePixelRatio)/devicePixelRatio}function Lr(e){return Math.ceil(e*devicePixelRatio)/devicePixelRatio}let yo=!0;const Xa=[];function sS(e){!yo||Xa.length?(Xa.push(e),bo()):(yo=!1,e(),bo())}let Mr=-1;function bo(){cancelAnimationFrame(Mr),Mr=requestAnimationFrame(()=>{const e=Xa.shift();e&&e(),Xa.length?bo():yo=!0})}const Ha={none:null,close:dS,block:vS,reposition:fS},uS=B({scrollStrategy:{type:[String,Function],default:"block",validator:e=>typeof e=="function"||e in Ha}},"VOverlay-scroll-strategies");function cS(e,n){if(!$e)return;let t;He(async()=>{t==null||t.stop(),n.isActive.value&&e.scrollStrategy&&(t=Fo(),await new Promise(a=>setTimeout(a)),t.active&&t.run(()=>{var a;typeof e.scrollStrategy=="function"?e.scrollStrategy(n,e,t):(a=Ha[e.scrollStrategy])==null||a.call(Ha,n,e,t)}))}),mt(()=>{t==null||t.stop()})}function dS(e){function n(t){e.isActive.value=!1}zu(e.targetEl.value??e.contentEl.value,n)}function vS(e,n){var i;const t=(i=e.root.value)==null?void 0:i.offsetParent,a=[...new Set([...Ua(e.targetEl.value,n.contained?t:void 0),...Ua(e.contentEl.value,n.contained?t:void 0)])].filter(r=>!r.classList.contains("v-overlay-scroll-blocked")),l=window.innerWidth-document.documentElement.offsetWidth,o=(r=>ai(r)&&r)(t||document.documentElement);o&&e.root.value.classList.add("v-overlay--scroll-blocked"),a.forEach((r,u)=>{r.style.setProperty("--v-body-scroll-x",ne(-r.scrollLeft)),r.style.setProperty("--v-body-scroll-y",ne(-r.scrollTop)),r!==document.documentElement&&r.style.setProperty("--v-scrollbar-offset",ne(l)),r.classList.add("v-overlay-scroll-blocked")}),mt(()=>{a.forEach((r,u)=>{const c=parseFloat(r.style.getPropertyValue("--v-body-scroll-x")),d=parseFloat(r.style.getPropertyValue("--v-body-scroll-y")),v=r.style.scrollBehavior;r.style.scrollBehavior="auto",r.style.removeProperty("--v-body-scroll-x"),r.style.removeProperty("--v-body-scroll-y"),r.style.removeProperty("--v-scrollbar-offset"),r.classList.remove("v-overlay-scroll-blocked"),r.scrollLeft=-c,r.scrollTop=-d,r.style.scrollBehavior=v}),o&&e.root.value.classList.remove("v-overlay--scroll-blocked")})}function fS(e,n,t){let a=!1,l=-1,o=-1;function i(r){sS(()=>{var d,v;const u=performance.now();(v=(d=e.updateLocation).value)==null||v.call(d,r),a=(performance.now()-u)/(1e3/60)>2})}o=(typeof requestIdleCallback>"u"?r=>r():requestIdleCallback)(()=>{t.run(()=>{zu(e.targetEl.value??e.contentEl.value,r=>{a?(cancelAnimationFrame(l),l=requestAnimationFrame(()=>{l=requestAnimationFrame(()=>{i(r)})})):i(r)})})}),mt(()=>{typeof cancelIdleCallback<"u"&&cancelIdleCallback(o),cancelAnimationFrame(l)})}function zu(e,n){const t=[document,...Ua(e)];t.forEach(a=>{a.addEventListener("scroll",n,{passive:!0})}),mt(()=>{t.forEach(a=>{a.removeEventListener("scroll",n)})})}const ko=Symbol.for("vuetify:v-menu"),bi=B({closeDelay:[Number,String],openDelay:[Number,String]},"delay");function ki(e,n){let t=()=>{};function a(i){t==null||t();const r=Number(i?e.openDelay:e.closeDelay);return new Promise(u=>{t=Bh(r,()=>{n==null||n(i),u(i)})})}function l(){return a(!0)}function o(){return a(!1)}return{clearDelay:t,runOpenDelay:l,runCloseDelay:o}}const mS=B({target:[String,Object],activator:[String,Object],activatorProps:{type:Object,default:()=>({})},openOnClick:{type:Boolean,default:void 0},openOnHover:Boolean,openOnFocus:{type:Boolean,default:void 0},closeOnContentClick:Boolean,...bi()},"VOverlay-activator");function gS(e,n){let{isActive:t,isTop:a,contentEl:l}=n;const o=Ye("useActivator"),i=H();let r=!1,u=!1,c=!0;const d=y(()=>e.openOnFocus||e.openOnFocus==null&&e.openOnHover),v=y(()=>e.openOnClick||e.openOnClick==null&&!e.openOnHover&&!d.value),{runOpenDelay:f,runCloseDelay:m}=ki(e,V=>{V===(e.openOnHover&&r||d.value&&u)&&!(e.openOnHover&&t.value&&!a.value)&&(t.value!==V&&(c=!0),t.value=V)}),b=H(),h={onClick:V=>{V.stopPropagation(),i.value=V.currentTarget||V.target,t.value||(b.value=[V.clientX,V.clientY]),t.value=!t.value},onMouseenter:V=>{var w;(w=V.sourceCapabilities)!=null&&w.firesTouchEvents||(r=!0,i.value=V.currentTarget||V.target,f())},onMouseleave:V=>{r=!1,m()},onFocus:V=>{Gn(V.target,":focus-visible")!==!1&&(u=!0,V.stopPropagation(),i.value=V.currentTarget||V.target,f())},onBlur:V=>{u=!1,V.stopPropagation(),m()}},g=y(()=>{const V={};return v.value&&(V.onClick=h.onClick),e.openOnHover&&(V.onMouseenter=h.onMouseenter,V.onMouseleave=h.onMouseleave),d.value&&(V.onFocus=h.onFocus,V.onBlur=h.onBlur),V}),k=y(()=>{const V={};if(e.openOnHover&&(V.onMouseenter=()=>{r=!0,f()},V.onMouseleave=()=>{r=!1,m()}),d.value&&(V.onFocusin=()=>{u=!0,f()},V.onFocusout=()=>{u=!1,m()}),e.closeOnContentClick){const w=xe(ko,null);V.onClick=()=>{t.value=!1,w==null||w.closeParents()}}return V}),S=y(()=>{const V={};return e.openOnHover&&(V.onMouseenter=()=>{c&&(r=!0,c=!1,f())},V.onMouseleave=()=>{r=!1,m()}),V});Q(a,V=>{var w;V&&(e.openOnHover&&!r&&(!d.value||!u)||d.value&&!u&&(!e.openOnHover||!r))&&!((w=l.value)!=null&&w.contains(document.activeElement))&&(t.value=!1)}),Q(t,V=>{V||setTimeout(()=>{b.value=void 0})},{flush:"post"});const C=ja();He(()=>{C.value&&Te(()=>{i.value=C.el})});const P=ja(),x=y(()=>e.target==="cursor"&&b.value?b.value:P.value?P.el:Wu(e.target,o)||i.value),_=y(()=>Array.isArray(x.value)?void 0:x.value);let T;return Q(()=>!!e.activator,V=>{V&&$e?(T=Fo(),T.run(()=>{hS(e,o,{activatorEl:i,activatorEvents:g})})):T&&T.stop()},{flush:"post",immediate:!0}),mt(()=>{T==null||T.stop()}),{activatorEl:i,activatorRef:C,target:x,targetEl:_,targetRef:P,activatorEvents:g,contentEvents:k,scrimEvents:S}}function hS(e,n,t){let{activatorEl:a,activatorEvents:l}=t;Q(()=>e.activator,(u,c)=>{if(c&&u!==c){const d=r(c);d&&i(d)}u&&Te(()=>o())},{immediate:!0}),Q(()=>e.activatorProps,()=>{o()}),mt(()=>{i()});function o(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:r(),c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e.activatorProps;u&&Mh(u,z(l.value,c))}function i(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:r(),c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e.activatorProps;u&&Eh(u,z(l.value,c))}function r(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:e.activator;const c=Wu(u,n);return a.value=(c==null?void 0:c.nodeType)===Node.ELEMENT_NODE?c:void 0,a.value}}function Wu(e,n){var a,l;if(!e)return;let t;if(e==="parent"){let o=(l=(a=n==null?void 0:n.proxy)==null?void 0:a.$el)==null?void 0:l.parentNode;for(;o!=null&&o.hasAttribute("data-no-activator");)o=o.parentNode;t=o}else typeof e=="string"?t=document.querySelector(e):"$el"in e?t=e.$el:t=e;return t}function ju(){if(!$e)return ee(!1);const{ssr:e}=$t();if(e){const n=ee(!1);return Ke(()=>{n.value=!0}),n}else return ee(!0)}const Si=B({eager:Boolean},"lazy");function wi(e,n){const t=ee(!1),a=y(()=>t.value||e.eager||n.value);Q(n,()=>t.value=!0);function l(){e.eager||(t.value=!1)}return{isBooted:t,hasContent:a,onAfterLeave:l}}function Fn(){const n=Ye("useScopeId").vnode.scopeId;return{scopeId:n?{[n]:""}:void 0}}const Er=Symbol.for("vuetify:stack"),aa=St([]);function yS(e,n,t){const a=Ye("useStack"),l=!t,o=xe(Er,void 0),i=St({activeChildren:new Set});Re(Er,i);const r=ee(+n.value);yt(e,()=>{var v;const d=(v=aa.at(-1))==null?void 0:v[1];r.value=d?d+10:+n.value,l&&aa.push([a.uid,r.value]),o==null||o.activeChildren.add(a.uid),mt(()=>{if(l){const f=Ze(aa).findIndex(m=>m[0]===a.uid);aa.splice(f,1)}o==null||o.activeChildren.delete(a.uid)})});const u=ee(!0);l&&He(()=>{var v;const d=((v=aa.at(-1))==null?void 0:v[0])===a.uid;setTimeout(()=>u.value=d)});const c=y(()=>!i.activeChildren.size);return{globalTop:nl(u),localTop:c,stackStyles:y(()=>({zIndex:r.value}))}}function bS(e){return{teleportTarget:y(()=>{const t=e();if(t===!0||!$e)return;const a=t===!1?document.body:typeof t=="string"?document.querySelector(t):t;if(a==null)return;let l=[...a.children].find(o=>o.matches(".v-overlay-container"));return l||(l=document.createElement("div"),l.className="v-overlay-container",a.appendChild(l)),l})}}function kS(){return!0}function Gu(e,n,t){if(!e||Yu(e,t)===!1)return!1;const a=Ds(n);if(typeof ShadowRoot<"u"&&a instanceof ShadowRoot&&a.host===e.target)return!1;const l=(typeof t.value=="object"&&t.value.include||(()=>[]))();return l.push(n),!l.some(o=>o==null?void 0:o.contains(e.target))}function Yu(e,n){return(typeof n.value=="object"&&n.value.closeConditional||kS)(e)}function SS(e,n,t){const a=typeof t.value=="function"?t.value:t.value.handler;e.shadowTarget=e.target,n._clickOutside.lastMousedownWasOutside&&Gu(e,n,t)&&setTimeout(()=>{Yu(e,t)&&a&&a(e)},0)}function Fr(e,n){const t=Ds(e);n(document),typeof ShadowRoot<"u"&&t instanceof ShadowRoot&&n(t)}const Uu={mounted(e,n){const t=l=>SS(l,e,n),a=l=>{e._clickOutside.lastMousedownWasOutside=Gu(l,e,n)};Fr(e,l=>{l.addEventListener("click",t,!0),l.addEventListener("mousedown",a,!0)}),e._clickOutside||(e._clickOutside={lastMousedownWasOutside:!1}),e._clickOutside[n.instance.$.uid]={onClick:t,onMousedown:a}},beforeUnmount(e,n){e._clickOutside&&(Fr(e,t=>{var o;if(!t||!((o=e._clickOutside)!=null&&o[n.instance.$.uid]))return;const{onClick:a,onMousedown:l}=e._clickOutside[n.instance.$.uid];t.removeEventListener("click",a,!0),t.removeEventListener("mousedown",l,!0)}),delete e._clickOutside[n.instance.$.uid])}};function wS(e){const{modelValue:n,color:t,...a}=e;return s(Dt,{name:"fade-transition",appear:!0},{default:()=>[e.modelValue&&s("div",z({class:["v-overlay__scrim",e.color.backgroundColorClasses.value],style:e.color.backgroundColorStyles.value},a),null)]})}const _a=B({absolute:Boolean,attach:[Boolean,String,Object],closeOnBack:{type:Boolean,default:!0},contained:Boolean,contentClass:null,contentProps:null,disabled:Boolean,opacity:[Number,String],noClickAnimation:Boolean,modelValue:Boolean,persistent:Boolean,scrim:{type:[Boolean,String],default:!0},zIndex:{type:[Number,String],default:2e3},...mS(),...ie(),...Qe(),...Si(),...aS(),...uS(),...Pe(),...Et()},"VOverlay"),Rt=R()({name:"VOverlay",directives:{ClickOutside:Uu},inheritAttrs:!1,props:{_disableGlobalStack:Boolean,..._a()},emits:{"click:outside":e=>!0,"update:modelValue":e=>!0,afterEnter:()=>!0,afterLeave:()=>!0},setup(e,n){let{slots:t,attrs:a,emit:l}=n;const o=Ye("VOverlay"),i=H(),r=H(),u=H(),c=de(e,"modelValue"),d=y({get:()=>c.value,set:G=>{G&&e.disabled||(c.value=G)}}),{themeClasses:v}=De(e),{rtlClasses:f,isRtl:m}=nt(),{hasContent:b,onAfterLeave:h}=wi(e,d),g=Le(y(()=>typeof e.scrim=="string"?e.scrim:null)),{globalTop:k,localTop:S,stackStyles:C}=yS(d,F(e,"zIndex"),e._disableGlobalStack),{activatorEl:P,activatorRef:x,target:_,targetEl:T,targetRef:V,activatorEvents:w,contentEvents:$,scrimEvents:p}=gS(e,{isActive:d,isTop:S,contentEl:u}),{teleportTarget:I}=bS(()=>{var me,Me,Ie;const G=e.attach||e.contained;if(G)return G;const ce=((me=P==null?void 0:P.value)==null?void 0:me.getRootNode())||((Ie=(Me=o.proxy)==null?void 0:Me.$el)==null?void 0:Ie.getRootNode());return ce instanceof ShadowRoot?ce:!1}),{dimensionStyles:A}=et(e),M=ju(),{scopeId:j}=Fn();Q(()=>e.disabled,G=>{G&&(d.value=!1)});const{contentStyles:Y,updateLocation:le}=lS(e,{isRtl:m,contentEl:u,target:_,isActive:d});cS(e,{root:i,contentEl:u,targetEl:T,isActive:d,updateLocation:le});function re(G){l("click:outside",G),e.persistent?se():d.value=!1}function N(G){return d.value&&k.value&&(!e.scrim||G.target===r.value||G instanceof MouseEvent&&G.shadowTarget===r.value)}$e&&Q(d,G=>{G?window.addEventListener("keydown",E):window.removeEventListener("keydown",E)},{immediate:!0}),it(()=>{$e&&window.removeEventListener("keydown",E)});function E(G){var ce,me;G.key==="Escape"&&k.value&&(e.persistent?se():(d.value=!1,(ce=u.value)!=null&&ce.contains(document.activeElement)&&((me=P.value)==null||me.focus())))}const O=ou();yt(()=>e.closeOnBack,()=>{nk(O,G=>{k.value&&d.value?(G(!1),e.persistent?se():d.value=!1):G()})});const te=H();Q(()=>d.value&&(e.absolute||e.contained)&&I.value==null,G=>{if(G){const ce=ni(i.value);ce&&ce!==document.scrollingElement&&(te.value=ce.scrollTop)}});function se(){e.noClickAnimation||u.value&&fn(u.value,[{transformOrigin:"center"},{transform:"scale(1.03)"},{transformOrigin:"center"}],{duration:150,easing:ia})}function ue(){l("afterEnter")}function ye(){h(),l("afterLeave")}return W(()=>{var G;return s(ae,null,[(G=t.activator)==null?void 0:G.call(t,{isActive:d.value,targetRef:V,props:z({ref:x},w.value,e.activatorProps)}),M.value&&b.value&&s(Fd,{disabled:!I.value,to:I.value},{default:()=>[s("div",z({class:["v-overlay",{"v-overlay--absolute":e.absolute||e.contained,"v-overlay--active":d.value,"v-overlay--contained":e.contained},v.value,f.value,e.class],style:[C.value,{"--v-overlay-opacity":e.opacity,top:ne(te.value)},e.style],ref:i},j,a),[s(wS,z({color:g,modelValue:d.value&&!!e.scrim,ref:r},p.value),null),s(ft,{appear:!0,persisted:!0,transition:e.transition,target:_.value,onAfterEnter:ue,onAfterLeave:ye},{default:()=>{var ce;return[je(s("div",z({ref:u,class:["v-overlay__content",e.contentClass],style:[A.value,Y.value]},$.value,e.contentProps),[(ce=t.default)==null?void 0:ce.call(t,{isActive:d})]),[[Mt,d.value],[Ct("click-outside"),{handler:re,closeConditional:N,include:()=>[P.value]}]])]}})])]})])}),{activatorEl:P,scrimEl:r,target:_,animateClick:se,contentEl:u,globalTop:k,localTop:S,updateLocation:le}}}),jl=Symbol("Forwarded refs");function Gl(e,n){let t=e;for(;t;){const a=Reflect.getOwnPropertyDescriptor(t,n);if(a)return a;t=Object.getPrototypeOf(t)}}function At(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{scopeId:l}=Fn(),{isRtl:o}=nt(),i=rt(),r=y(()=>e.id||`v-menu-${i}`),u=H(),c=xe(ko,null),d=ee(new Set);Re(ko,{register(){d.value.add(i)},unregister(){d.value.delete(i)},closeParents(g){setTimeout(()=>{var k;!d.value.size&&!e.persistent&&(g==null||(k=u.value)!=null&&k.contentEl&&!Dh(g,u.value.contentEl))&&(a.value=!1,c==null||c.closeParents())},40)}}),it(()=>{c==null||c.unregister(),document.removeEventListener("focusin",v)}),as(()=>a.value=!1);async function v(g){var C,P,x;const k=g.relatedTarget,S=g.target;await Te(),a.value&&k!==S&&((C=u.value)!=null&&C.contentEl)&&((P=u.value)!=null&&P.globalTop)&&![document,u.value.contentEl].includes(S)&&!u.value.contentEl.contains(S)&&((x=oa(u.value.contentEl)[0])==null||x.focus())}Q(a,g=>{g?(c==null||c.register(),$e&&document.addEventListener("focusin",v,{once:!0})):(c==null||c.unregister(),$e&&document.removeEventListener("focusin",v))},{immediate:!0});function f(g){c==null||c.closeParents(g)}function m(g){var k,S,C,P,x;if(!e.disabled)if(g.key==="Tab"||g.key==="Enter"&&!e.closeOnContentClick){if(g.key==="Enter"&&(g.target instanceof HTMLTextAreaElement||g.target instanceof HTMLInputElement&&g.target.closest("form")))return;g.key==="Enter"&&g.preventDefault(),ys(oa((k=u.value)==null?void 0:k.contentEl,!1),g.shiftKey?"prev":"next",T=>T.tabIndex>=0)||(a.value=!1,(C=(S=u.value)==null?void 0:S.activatorEl)==null||C.focus())}else e.submenu&&g.key===(o.value?"ArrowRight":"ArrowLeft")&&(a.value=!1,(x=(P=u.value)==null?void 0:P.activatorEl)==null||x.focus())}function b(g){var S;if(e.disabled)return;const k=(S=u.value)==null?void 0:S.contentEl;k&&a.value?g.key==="ArrowDown"?(g.preventDefault(),g.stopImmediatePropagation(),gn(k,"next")):g.key==="ArrowUp"?(g.preventDefault(),g.stopImmediatePropagation(),gn(k,"prev")):e.submenu&&(g.key===(o.value?"ArrowRight":"ArrowLeft")?a.value=!1:g.key===(o.value?"ArrowLeft":"ArrowRight")&&(g.preventDefault(),gn(k,"first"))):(e.submenu?g.key===(o.value?"ArrowLeft":"ArrowRight"):["ArrowDown","ArrowUp"].includes(g.key))&&(a.value=!0,g.preventDefault(),setTimeout(()=>setTimeout(()=>b(g))))}const h=y(()=>z({"aria-haspopup":"menu","aria-expanded":String(a.value),"aria-owns":r.value,onKeydown:b},e.activatorProps));return W(()=>{const g=Rt.filterProps(e);return s(Rt,z({ref:u,id:r.value,class:["v-menu",e.class],style:e.style},g,{modelValue:a.value,"onUpdate:modelValue":k=>a.value=k,absolute:!0,activatorProps:h.value,location:e.location??(e.submenu?"end":"bottom"),"onClick:outside":f,onKeydown:m},l),{activator:t.activator,default:function(){for(var k=arguments.length,S=new Array(k),C=0;C{var P;return[(P=t.default)==null?void 0:P.call(t,...S)]}})}})}),At({id:r,ΨopenChildren:d},u)}}),VS=B({active:Boolean,disabled:Boolean,max:[Number,String],value:{type:[Number,String],default:0},...ie(),...Et({transition:{component:ui}})},"VCounter"),Sl=R()({name:"VCounter",functional:!0,props:VS(),setup(e,n){let{slots:t}=n;const a=y(()=>e.max?`${e.value} / ${e.max}`:String(e.value));return W(()=>s(ft,{transition:e.transition},{default:()=>[je(s("div",{class:["v-counter",{"text-error":e.max&&!e.disabled&&parseFloat(e.value)>parseFloat(e.max)},e.class],style:e.style},[t.default?t.default({counter:a.value,max:e.max,value:e.value}):a.value]),[[Mt,e.active]])]})),{}}}),CS=B({floating:Boolean,...ie()},"VFieldLabel"),la=R()({name:"VFieldLabel",props:CS(),setup(e,n){let{slots:t}=n;return W(()=>s(ea,{class:["v-field-label",{"v-field-label--floating":e.floating},e.class],style:e.style,"aria-hidden":e.floating||void 0},t)),{}}}),pS=["underlined","outlined","filled","solo","solo-inverted","solo-filled","plain"],Pa=B({appendInnerIcon:ve,bgColor:String,clearable:Boolean,clearIcon:{type:ve,default:"$clear"},active:Boolean,centerAffix:{type:Boolean,default:void 0},color:String,baseColor:String,dirty:Boolean,disabled:{type:Boolean,default:null},error:Boolean,flat:Boolean,label:String,persistentClear:Boolean,prependInnerIcon:ve,reverse:Boolean,singleLine:Boolean,variant:{type:String,default:"filled",validator:e=>pS.includes(e)},"onClick:clear":ot(),"onClick:appendInner":ot(),"onClick:prependInner":ot(),...ie(),...gl(),...ze(),...Pe()},"VField"),na=R()({name:"VField",inheritAttrs:!1,props:{id:String,...pa(),...Pa()},emits:{"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{themeClasses:o}=De(e),{loaderClasses:i}=Sa(e),{focusClasses:r,isFocused:u,focus:c,blur:d}=Jt(e),{InputIcon:v}=bu(e),{roundedClasses:f}=Ue(e),{rtlClasses:m}=nt(),b=y(()=>e.dirty||e.active),h=y(()=>!e.singleLine&&!!(e.label||l.label)),g=rt(),k=y(()=>e.id||`input-${g}`),S=y(()=>`${k.value}-messages`),C=H(),P=H(),x=H(),_=y(()=>["plain","underlined"].includes(e.variant)),{backgroundColorClasses:T,backgroundColorStyles:V}=Le(F(e,"bgColor")),{textColorClasses:w,textColorStyles:$}=ut(y(()=>e.error||e.disabled?void 0:b.value&&u.value?e.color:e.baseColor));Q(b,M=>{if(h.value){const j=C.value.$el,Y=P.value.$el;requestAnimationFrame(()=>{const le=Jo(j),re=Y.getBoundingClientRect(),N=re.x-le.x,E=re.y-le.y-(le.height/2-re.height/2),O=re.width/.75,te=Math.abs(O-le.width)>1?{maxWidth:ne(O)}:void 0,se=getComputedStyle(j),ue=getComputedStyle(Y),ye=parseFloat(se.transitionDuration)*1e3||150,G=parseFloat(ue.getPropertyValue("--v-field-label-scale")),ce=ue.getPropertyValue("color");j.style.visibility="visible",Y.style.visibility="hidden",fn(j,{transform:`translate(${N}px, ${E}px) scale(${G})`,color:ce,...te},{duration:ye,easing:ia,direction:M?"normal":"reverse"}).finished.then(()=>{j.style.removeProperty("visibility"),Y.style.removeProperty("visibility")})})}},{flush:"post"});const p=y(()=>({isActive:b,isFocused:u,controlRef:x,blur:d,focus:c}));function I(M){M.target!==document.activeElement&&M.preventDefault()}function A(M){var j;M.key!=="Enter"&&M.key!==" "||(M.preventDefault(),M.stopPropagation(),(j=e["onClick:clear"])==null||j.call(e,new MouseEvent("click")))}return W(()=>{var N,E,O;const M=e.variant==="outlined",j=!!(l["prepend-inner"]||e.prependInnerIcon),Y=!!(e.clearable||l.clear),le=!!(l["append-inner"]||e.appendInnerIcon||Y),re=()=>l.label?l.label({...p.value,label:e.label,props:{for:k.value}}):e.label;return s("div",z({class:["v-field",{"v-field--active":b.value,"v-field--appended":le,"v-field--center-affix":e.centerAffix??!_.value,"v-field--disabled":e.disabled,"v-field--dirty":e.dirty,"v-field--error":e.error,"v-field--flat":e.flat,"v-field--has-background":!!e.bgColor,"v-field--persistent-clear":e.persistentClear,"v-field--prepended":j,"v-field--reverse":e.reverse,"v-field--single-line":e.singleLine,"v-field--no-label":!re(),[`v-field--variant-${e.variant}`]:!0},o.value,T.value,r.value,i.value,f.value,m.value,e.class],style:[V.value,e.style],onClick:I},t),[s("div",{class:"v-field__overlay"},null),s(wa,{name:"v-field",active:!!e.loading,color:e.error?"error":typeof e.loading=="string"?e.loading:e.color},{default:l.loader}),j&&s("div",{key:"prepend",class:"v-field__prepend-inner"},[e.prependInnerIcon&&s(v,{key:"prepend-icon",name:"prependInner"},null),(N=l["prepend-inner"])==null?void 0:N.call(l,p.value)]),s("div",{class:"v-field__field","data-no-activator":""},[["filled","solo","solo-inverted","solo-filled"].includes(e.variant)&&h.value&&s(la,{key:"floating-label",ref:P,class:[w.value],floating:!0,for:k.value,style:$.value},{default:()=>[re()]}),h.value&&s(la,{key:"label",ref:C,for:k.value},{default:()=>[re()]}),(E=l.default)==null?void 0:E.call(l,{...p.value,props:{id:k.value,class:"v-field__input","aria-describedby":S.value},focus:c,blur:d})]),Y&&s(ci,{key:"clear"},{default:()=>[je(s("div",{class:"v-field__clearable",onMousedown:te=>{te.preventDefault(),te.stopPropagation()}},[s(pe,{defaults:{VIcon:{icon:e.clearIcon}}},{default:()=>[l.clear?l.clear({...p.value,props:{onKeydown:A,onFocus:c,onBlur:d,onClick:e["onClick:clear"]}}):s(v,{name:"clear",onKeydown:A,onFocus:c,onBlur:d},null)]})]),[[Mt,e.dirty]])]}),le&&s("div",{key:"append",class:"v-field__append-inner"},[(O=l["append-inner"])==null?void 0:O.call(l,p.value),e.appendInnerIcon&&s(v,{key:"append-icon",name:"appendInner"},null)]),s("div",{class:["v-field__outline",w.value],style:$.value},[M&&s(ae,null,[s("div",{class:"v-field__outline__start"},null),h.value&&s("div",{class:"v-field__outline__notch"},[s(la,{ref:P,floating:!0,for:k.value},{default:()=>[re()]})]),s("div",{class:"v-field__outline__end"},null)]),_.value&&h.value&&s(la,{ref:P,floating:!0,for:k.value},{default:()=>[re()]})])])}),{controlRef:x}}});function Vi(e){const n=Object.keys(na.props).filter(t=>!ol(t)&&t!=="class"&&t!=="style");return qo(e,n)}const xS=["color","file","time","date","datetime-local","week","month"],wl=B({autofocus:Boolean,counter:[Boolean,Number,String],counterValue:[Number,Function],prefix:String,placeholder:String,persistentPlaceholder:Boolean,persistentCounter:Boolean,suffix:String,role:String,type:{type:String,default:"text"},modelModifiers:Object,...Qt(),...Pa()},"VTextField"),Sn=R()({name:"VTextField",directives:{Intersect:ka},inheritAttrs:!1,props:wl(),emits:{"click:control":e=>!0,"mousedown:control":e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const o=de(e,"modelValue"),{isFocused:i,focus:r,blur:u}=Jt(e),c=y(()=>typeof e.counterValue=="function"?e.counterValue(o.value):typeof e.counterValue=="number"?e.counterValue:(o.value??"").toString().length),d=y(()=>{if(t.maxlength)return t.maxlength;if(!(!e.counter||typeof e.counter!="number"&&typeof e.counter!="string"))return e.counter}),v=y(()=>["plain","underlined"].includes(e.variant));function f(_,T){var V,w;!e.autofocus||!_||(w=(V=T[0].target)==null?void 0:V.focus)==null||w.call(V)}const m=H(),b=H(),h=H(),g=y(()=>xS.includes(e.type)||e.persistentPlaceholder||i.value||e.active);function k(){var _;h.value!==document.activeElement&&((_=h.value)==null||_.focus()),i.value||r()}function S(_){a("mousedown:control",_),_.target!==h.value&&(k(),_.preventDefault())}function C(_){k(),a("click:control",_)}function P(_){_.stopPropagation(),k(),Te(()=>{o.value=null,Zo(e["onClick:clear"],_)})}function x(_){var V;const T=_.target;if(o.value=T.value,(V=e.modelModifiers)!=null&&V.trim&&["text","search","password","tel","url"].includes(e.type)){const w=[T.selectionStart,T.selectionEnd];Te(()=>{T.selectionStart=w[0],T.selectionEnd=w[1]})}}return W(()=>{const _=!!(l.counter||e.counter!==!1&&e.counter!=null),T=!!(_||l.details),[V,w]=ln(t),{modelValue:$,...p}=ct.filterProps(e),I=Vi(e);return s(ct,z({ref:m,modelValue:o.value,"onUpdate:modelValue":A=>o.value=A,class:["v-text-field",{"v-text-field--prefixed":e.prefix,"v-text-field--suffixed":e.suffix,"v-input--plain-underlined":v.value},e.class],style:e.style},V,p,{centerAffix:!v.value,focused:i.value}),{...l,default:A=>{let{id:M,isDisabled:j,isDirty:Y,isReadonly:le,isValid:re}=A;return s(na,z({ref:b,onMousedown:S,onClick:C,"onClick:clear":P,"onClick:prependInner":e["onClick:prependInner"],"onClick:appendInner":e["onClick:appendInner"],role:e.role},I,{id:M.value,active:g.value||Y.value,dirty:Y.value||e.dirty,disabled:j.value,focused:i.value,error:re.value===!1}),{...l,default:N=>{let{props:{class:E,...O}}=N;const te=je(s("input",z({ref:h,value:o.value,onInput:x,autofocus:e.autofocus,readonly:le.value,disabled:j.value,name:e.name,placeholder:e.placeholder,size:1,type:e.type,onFocus:k,onBlur:u},O,w),null),[[Ct("intersect"),{handler:f},null,{once:!0}]]);return s(ae,null,[e.prefix&&s("span",{class:"v-text-field__prefix"},[s("span",{class:"v-text-field__prefix__text"},[e.prefix])]),l.default?s("div",{class:E,"data-no-activator":""},[l.default(),te]):Od(te,{class:E}),e.suffix&&s("span",{class:"v-text-field__suffix"},[s("span",{class:"v-text-field__suffix__text"},[e.suffix])])])}})},details:T?A=>{var M;return s(ae,null,[(M=l.details)==null?void 0:M.call(l,A),_&&s(ae,null,[s("span",null,null),s(Sl,{active:e.persistentCounter||i.value,value:c.value,max:d.value,disabled:e.disabled},l.counter)])])}:void 0})}),At({},m,b,h)}}),_S=B({renderless:Boolean,...ie()},"VVirtualScrollItem"),qu=R()({name:"VVirtualScrollItem",inheritAttrs:!1,props:_S(),emits:{"update:height":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{resizeRef:o,contentRect:i}=Lt(void 0,"border");Q(()=>{var r;return(r=i.value)==null?void 0:r.height},r=>{r!=null&&a("update:height",r)}),W(()=>{var r,u;return e.renderless?s(ae,null,[(r=l.default)==null?void 0:r.call(l,{itemRef:o})]):s("div",z({ref:o,class:["v-virtual-scroll__item",e.class],style:e.style},t),[(u=l.default)==null?void 0:u.call(l)])})}}),PS=-1,IS=1,Yl=100,Xu=B({itemHeight:{type:[Number,String],default:null},height:[Number,String]},"virtual");function Zu(e,n){const t=$t(),a=ee(0);He(()=>{a.value=parseFloat(e.itemHeight||0)});const l=ee(0),o=ee(Math.ceil((parseInt(e.height)||t.height.value)/(a.value||16))||1),i=ee(0),r=ee(0),u=H(),c=H();let d=0;const{resizeRef:v,contentRect:f}=Lt();He(()=>{v.value=u.value});const m=y(()=>{var N;return u.value===document.documentElement?t.height.value:((N=f.value)==null?void 0:N.height)||parseInt(e.height)||0}),b=y(()=>!!(u.value&&c.value&&m.value&&a.value));let h=Array.from({length:n.value.length}),g=Array.from({length:n.value.length});const k=ee(0);let S=-1;function C(N){return h[N]||a.value}const P=Ih(()=>{const N=performance.now();g[0]=0;const E=n.value.length;for(let O=1;O<=E-1;O++)g[O]=(g[O-1]||0)+C(O-1);k.value=Math.max(k.value,performance.now()-N)},k),x=Q(b,N=>{N&&(x(),d=c.value.offsetTop,P.immediate(),j(),~S&&Te(()=>{$e&&window.requestAnimationFrame(()=>{le(S),S=-1})}))});mt(()=>{P.clear()});function _(N,E){const O=h[N],te=a.value;a.value=te?Math.min(a.value,E):E,(O!==E||te!==a.value)&&(h[N]=E,P())}function T(N){return N=Xe(N,0,n.value.length-1),g[N]||0}function V(N){return $S(g,N)}let w=0,$=0,p=0;Q(m,(N,E)=>{E&&(j(),N{$=0,j()}))});function I(){if(!u.value||!c.value)return;const N=u.value.scrollTop,E=performance.now();E-p>500?($=Math.sign(N-w),d=c.value.offsetTop):$=N-w,w=N,p=E,j()}function A(){!u.value||!c.value||($=0,p=0,j())}let M=-1;function j(){cancelAnimationFrame(M),M=requestAnimationFrame(Y)}function Y(){if(!u.value||!m.value)return;const N=w-d,E=Math.sign($),O=Math.max(0,N-Yl),te=Xe(V(O),0,n.value.length),se=N+m.value+Yl,ue=Xe(V(se)+1,te+1,n.value.length);if((E!==PS||teo.value)){const ye=T(l.value)-T(te),G=T(ue)-T(o.value);Math.max(ye,G)>Yl?(l.value=te,o.value=ue):(te<=0&&(l.value=te),ue>=n.value.length&&(o.value=ue))}i.value=T(l.value),r.value=T(n.value.length)-T(o.value)}function le(N){const E=T(N);!u.value||N&&!E?S=N:u.value.scrollTop=E}const re=y(()=>n.value.slice(l.value,o.value).map((N,E)=>({raw:N,index:E+l.value})));return Q(n,()=>{h=Array.from({length:n.value.length}),g=Array.from({length:n.value.length}),P.immediate(),j()},{deep:!0}),{calculateVisibleItems:j,containerRef:u,markerRef:c,computedItems:re,paddingTop:i,paddingBottom:r,scrollToIndex:le,handleScroll:I,handleScrollend:A,handleItemResize:_}}function $S(e,n){let t=e.length-1,a=0,l=0,o=null,i=-1;if(e[t]>1,o=e[l],o>n)t=l-1;else if(o[]},renderless:Boolean,...Xu(),...ie(),...Qe()},"VVirtualScroll"),Vl=R()({name:"VVirtualScroll",props:TS(),setup(e,n){let{slots:t}=n;const a=Ye("VVirtualScroll"),{dimensionStyles:l}=et(e),{calculateVisibleItems:o,containerRef:i,markerRef:r,handleScroll:u,handleScrollend:c,handleItemResize:d,scrollToIndex:v,paddingTop:f,paddingBottom:m,computedItems:b}=Zu(e,F(e,"items"));return yt(()=>e.renderless,()=>{function h(){var S,C;const k=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1)?"addEventListener":"removeEventListener";i.value===document.documentElement?(document[k]("scroll",u,{passive:!0}),document[k]("scrollend",c)):((S=i.value)==null||S[k]("scroll",u,{passive:!0}),(C=i.value)==null||C[k]("scrollend",c))}Ke(()=>{i.value=ni(a.vnode.el,!0),h(!0)}),mt(h)}),W(()=>{const h=b.value.map(g=>s(qu,{key:g.index,renderless:e.renderless,"onUpdate:height":k=>d(g.index,k)},{default:k=>{var S;return(S=t.default)==null?void 0:S.call(t,{item:g.raw,index:g.index,...k})}}));return e.renderless?s(ae,null,[s("div",{ref:r,class:"v-virtual-scroll__spacer",style:{paddingTop:ne(f.value)}},null),h,s("div",{class:"v-virtual-scroll__spacer",style:{paddingBottom:ne(m.value)}},null)]):s("div",{ref:i,class:["v-virtual-scroll",e.class],onScrollPassive:u,onScrollend:c,style:[l.value,e.style]},[s("div",{ref:r,class:"v-virtual-scroll__container",style:{paddingTop:ne(f.value),paddingBottom:ne(m.value)}},[h])])}),{calculateVisibleItems:o,scrollToIndex:v}}});function Ci(e,n){const t=ee(!1);let a;function l(r){cancelAnimationFrame(a),t.value=!0,a=requestAnimationFrame(()=>{a=requestAnimationFrame(()=>{t.value=!1})})}async function o(){await new Promise(r=>requestAnimationFrame(r)),await new Promise(r=>requestAnimationFrame(r)),await new Promise(r=>requestAnimationFrame(r)),await new Promise(r=>{if(t.value){const u=Q(t,()=>{u(),r()})}else r()})}async function i(r){var d,v;if(r.key==="Tab"&&((d=n.value)==null||d.focus()),!["PageDown","PageUp","Home","End"].includes(r.key))return;const u=(v=e.value)==null?void 0:v.$el;if(!u)return;(r.key==="Home"||r.key==="End")&&u.scrollTo({top:r.key==="Home"?0:u.scrollHeight,behavior:"smooth"}),await o();const c=u.querySelectorAll(":scope > :not(.v-virtual-scroll__spacer)");if(r.key==="PageDown"||r.key==="Home"){const f=u.getBoundingClientRect().top;for(const m of c)if(m.getBoundingClientRect().top>=f){m.focus();break}}else{const f=u.getBoundingClientRect().bottom;for(const m of[...c].reverse())if(m.getBoundingClientRect().bottom<=f){m.focus();break}}}return{onScrollPassive:l,onKeydown:i}}const pi=B({chips:Boolean,closableChips:Boolean,closeText:{type:String,default:"$vuetify.close"},openText:{type:String,default:"$vuetify.open"},eager:Boolean,hideNoData:Boolean,hideSelected:Boolean,listProps:{type:Object},menu:Boolean,menuIcon:{type:ve,default:"$dropdown"},menuProps:{type:Object},multiple:Boolean,noDataText:{type:String,default:"$vuetify.noDataText"},openOnClear:Boolean,itemColor:String,...Ou({itemChildren:!1})},"Select"),AS=B({...pi(),...Je(wl({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Et({transition:{component:dl}})},"VSelect"),xi=R()({name:"VSelect",props:AS(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:menu":e=>!0},setup(e,n){let{slots:t}=n;const{t:a}=qe(),l=H(),o=H(),i=H(),r=de(e,"menu"),u=y({get:()=>r.value,set:N=>{var E;r.value&&!N&&((E=o.value)!=null&&E.ΨopenChildren.size)||(r.value=N)}}),{items:c,transformIn:d,transformOut:v}=yi(e),f=de(e,"modelValue",[],N=>d(N===null?[null]:We(N)),N=>{const E=v(N);return e.multiple?E:E[0]??null}),m=y(()=>typeof e.counterValue=="function"?e.counterValue(f.value):typeof e.counterValue=="number"?e.counterValue:f.value.length),b=bl(e),h=y(()=>f.value.map(N=>N.value)),g=ee(!1),k=y(()=>u.value?e.closeText:e.openText);let S="",C;const P=y(()=>e.hideSelected?c.value.filter(N=>!f.value.some(E=>e.valueComparator(E,N))):c.value),x=y(()=>e.hideNoData&&!P.value.length||b.isReadonly.value||b.isDisabled.value),_=y(()=>{var N;return{...e.menuProps,activatorProps:{...((N=e.menuProps)==null?void 0:N.activatorProps)||{},"aria-haspopup":"listbox"}}}),T=H(),V=Ci(T,l);function w(N){e.openOnClear&&(u.value=!0)}function $(){x.value||(u.value=!u.value)}function p(N){Ga(N)&&I(N)}function I(N){var se,ue;if(!N.key||b.isReadonly.value)return;["Enter"," ","ArrowDown","ArrowUp","Home","End"].includes(N.key)&&N.preventDefault(),["Enter","ArrowDown"," "].includes(N.key)&&(u.value=!0),["Escape","Tab"].includes(N.key)&&(u.value=!1),N.key==="Home"?(se=T.value)==null||se.focus("first"):N.key==="End"&&((ue=T.value)==null||ue.focus("last"));const E=1e3;if(e.multiple||!Ga(N))return;const O=performance.now();O-C>E&&(S=""),S+=N.key.toLowerCase(),C=O;const te=c.value.find(ye=>ye.title.toLowerCase().startsWith(S));if(te!==void 0){f.value=[te];const ye=P.value.indexOf(te);$e&&window.requestAnimationFrame(()=>{var G;ye>=0&&((G=i.value)==null||G.scrollToIndex(ye))})}}function A(N){let E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!N.props.disabled)if(e.multiple){const O=f.value.findIndex(se=>e.valueComparator(se.value,N.value)),te=E??!~O;if(~O){const se=te?[...f.value,N]:[...f.value];se.splice(O,1),f.value=se}else te&&(f.value=[...f.value,N])}else{const O=E!==!1;f.value=O?[N]:[],Te(()=>{u.value=!1})}}function M(N){var E;(E=T.value)!=null&&E.$el.contains(N.relatedTarget)||(u.value=!1)}function j(){var N;e.eager&&((N=i.value)==null||N.calculateVisibleItems())}function Y(){var N;g.value&&((N=l.value)==null||N.focus())}function le(N){g.value=!0}function re(N){if(N==null)f.value=[];else if(Gn(l.value,":autofill")||Gn(l.value,":-webkit-autofill")){const E=c.value.find(O=>O.title===N);E&&A(E)}else l.value&&(l.value.value="")}return Q(u,()=>{if(!e.hideSelected&&u.value&&f.value.length){const N=P.value.findIndex(E=>f.value.some(O=>e.valueComparator(O.value,E.value)));$e&&window.requestAnimationFrame(()=>{var E;N>=0&&((E=i.value)==null||E.scrollToIndex(N))})}}),Q(()=>e.items,(N,E)=>{u.value||g.value&&!E.length&&N.length&&(u.value=!0)}),W(()=>{const N=!!(e.chips||t.chip),E=!!(!e.hideNoData||P.value.length||t["prepend-item"]||t["append-item"]||t["no-data"]),O=f.value.length>0,te=Sn.filterProps(e),se=O||!g.value&&e.label&&!e.persistentPlaceholder?void 0:e.placeholder;return s(Sn,z({ref:l},te,{modelValue:f.value.map(ue=>ue.props.value).join(", "),"onUpdate:modelValue":re,focused:g.value,"onUpdate:focused":ue=>g.value=ue,validationValue:f.externalValue,counterValue:m.value,dirty:O,class:["v-select",{"v-select--active-menu":u.value,"v-select--chips":!!e.chips,[`v-select--${e.multiple?"multiple":"single"}`]:!0,"v-select--selected":f.value.length,"v-select--selection-slot":!!t.selection},e.class],style:e.style,inputmode:"none",placeholder:se,"onClick:clear":w,"onMousedown:control":$,onBlur:M,onKeydown:I,"aria-label":a(k.value),title:a(k.value)}),{...t,default:()=>s(ae,null,[s(qn,z({ref:o,modelValue:u.value,"onUpdate:modelValue":ue=>u.value=ue,activator:"parent",contentClass:"v-select__content",disabled:x.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:j,onAfterLeave:Y},_.value),{default:()=>[E&&s(kl,z({ref:T,selected:h.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:ue=>ue.preventDefault(),onKeydown:p,onFocusin:le,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},V,e.listProps),{default:()=>{var ue,ye,G;return[(ue=t["prepend-item"])==null?void 0:ue.call(t),!P.value.length&&!e.hideNoData&&(((ye=t["no-data"])==null?void 0:ye.call(t))??s(Kt,{title:a(e.noDataText)},null)),s(Vl,{ref:i,renderless:!0,items:P.value},{default:ce=>{var Ce;let{item:me,index:Me,itemRef:Ie}=ce;const Z=z(me.props,{ref:Ie,key:Me,onClick:()=>A(me,null)});return((Ce=t.item)==null?void 0:Ce.call(t,{item:me,index:Me,props:Z}))??s(Kt,z(Z,{role:"option"}),{prepend:q=>{let{isSelected:oe}=q;return s(ae,null,[e.multiple&&!e.hideSelected?s(Ut,{key:me.value,modelValue:oe,ripple:!1,tabindex:"-1"},null):void 0,me.props.prependAvatar&&s(It,{image:me.props.prependAvatar},null),me.props.prependIcon&&s(Be,{icon:me.props.prependIcon},null)])}})}}),(G=t["append-item"])==null?void 0:G.call(t)]}})]}),f.value.map((ue,ye)=>{function G(Ie){Ie.stopPropagation(),Ie.preventDefault(),A(ue,!1)}const ce={"onClick:close":G,onKeydown(Ie){Ie.key!=="Enter"&&Ie.key!==" "||(Ie.preventDefault(),Ie.stopPropagation(),G(Ie))},onMousedown(Ie){Ie.preventDefault(),Ie.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},me=N?!!t.chip:!!t.selection,Me=me?il(N?t.chip({item:ue,index:ye,props:ce}):t.selection({item:ue,index:ye})):void 0;if(!(me&&!Me))return s("div",{key:ue.value,class:"v-select__selection"},[N?t.chip?s(pe,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:ue.title}}},{default:()=>[Me]}):s(ta,z({key:"chip",closable:e.closableChips,size:"small",text:ue.title,disabled:ue.props.disabled},ce),null):Me??s("span",{class:"v-select__selection-text"},[ue.title,e.multiple&&yee==null||n==null?-1:e.toString().toLocaleLowerCase().indexOf(n.toString().toLocaleLowerCase()),Ia=B({customFilter:Function,customKeyFilter:Object,filterKeys:[Array,String],filterMode:{type:String,default:"intersection"},noFilter:Boolean},"filter");function DS(e,n,t){var r;const a=[],l=(t==null?void 0:t.default)??BS,o=t!=null&&t.filterKeys?We(t.filterKeys):!1,i=Object.keys((t==null?void 0:t.customKeyFilter)??{}).length;if(!(e!=null&&e.length))return a;e:for(let u=0;u0)&&!(t!=null&&t.noFilter)){if(typeof c=="object"){const g=o||Object.keys(d);for(const k of g){const S=tt(d,k),C=(r=t==null?void 0:t.customKeyFilter)==null?void 0:r[k];if(m=C?C(S,n,c):l(S,n,c),m!==-1&&m!==!1)C?v[k]=m:f[k]=m;else if((t==null?void 0:t.filterMode)==="every")continue e}}else m=l(c,n,c),m!==-1&&m!==!1&&(f.title=m);const b=Object.keys(f).length,h=Object.keys(v).length;if(!b&&!h||(t==null?void 0:t.filterMode)==="union"&&h!==i&&!b||(t==null?void 0:t.filterMode)==="intersection"&&(h!==i||!b))continue}a.push({index:u,matches:{...f,...v}})}return a}function $a(e,n,t,a){const l=H([]),o=H(new Map),i=y(()=>a!=null&&a.transform?L(n).map(u=>[u,a.transform(u)]):L(n));He(()=>{const u=typeof t=="function"?t():L(t),c=typeof u!="string"&&typeof u!="number"?"":String(u),d=DS(i.value,c,{customKeyFilter:{...e.customKeyFilter,...L(a==null?void 0:a.customKeyFilter)},default:e.customFilter,filterKeys:e.filterKeys,filterMode:e.filterMode,noFilter:e.noFilter}),v=L(n),f=[],m=new Map;d.forEach(b=>{let{index:h,matches:g}=b;const k=v[h];f.push(k),m.set(k.value,g)}),l.value=f,o.value=m});function r(u){return o.value.get(u.value)}return{filteredItems:l,filteredMatches:o,getMatches:r}}function LS(e,n,t){if(n==null)return e;if(Array.isArray(n))throw new Error("Multiple matches is not implemented");return typeof n=="number"&&~n?s(ae,null,[s("span",{class:"v-autocomplete__unmask"},[e.substr(0,n)]),s("span",{class:"v-autocomplete__mask"},[e.substr(n,t)]),s("span",{class:"v-autocomplete__unmask"},[e.substr(n+t)])]):e}const MS=B({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:Boolean,search:String,...Ia({filterKeys:["title"]}),...pi(),...Je(wl({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Et({transition:!1})},"VAutocomplete"),ES=R()({name:"VAutocomplete",props:MS(),emits:{"update:focused":e=>!0,"update:search":e=>!0,"update:modelValue":e=>!0,"update:menu":e=>!0},setup(e,n){let{slots:t}=n;const{t:a}=qe(),l=H(),o=ee(!1),i=ee(!0),r=ee(!1),u=H(),c=H(),d=de(e,"menu"),v=y({get:()=>d.value,set:Z=>{var Ce;d.value&&!Z&&((Ce=u.value)!=null&&Ce.ΨopenChildren.size)||(d.value=Z)}}),f=ee(-1),m=y(()=>{var Z;return(Z=l.value)==null?void 0:Z.color}),b=y(()=>v.value?e.closeText:e.openText),{items:h,transformIn:g,transformOut:k}=yi(e),{textColorClasses:S,textColorStyles:C}=ut(m),P=de(e,"search",""),x=de(e,"modelValue",[],Z=>g(Z===null?[null]:We(Z)),Z=>{const Ce=k(Z);return e.multiple?Ce:Ce[0]??null}),_=y(()=>typeof e.counterValue=="function"?e.counterValue(x.value):typeof e.counterValue=="number"?e.counterValue:x.value.length),T=bl(e),{filteredItems:V,getMatches:w}=$a(e,h,()=>i.value?"":P.value),$=y(()=>e.hideSelected?V.value.filter(Z=>!x.value.some(Ce=>Ce.value===Z.value)):V.value),p=y(()=>!!(e.chips||t.chip)),I=y(()=>p.value||!!t.selection),A=y(()=>x.value.map(Z=>Z.props.value)),M=y(()=>{var Ce;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&P.value===((Ce=$.value[0])==null?void 0:Ce.title))&&$.value.length>0&&!i.value&&!r.value}),j=y(()=>e.hideNoData&&!$.value.length||T.isReadonly.value||T.isDisabled.value),Y=H(),le=Ci(Y,l);function re(Z){e.openOnClear&&(v.value=!0),P.value=""}function N(){j.value||(v.value=!0)}function E(Z){j.value||(o.value&&(Z.preventDefault(),Z.stopPropagation()),v.value=!v.value)}function O(Z){var Ce;Ga(Z)&&((Ce=l.value)==null||Ce.focus())}function te(Z){var oe,ke,he;if(T.isReadonly.value)return;const Ce=l.value.selectionStart,q=x.value.length;if((f.value>-1||["Enter","ArrowDown","ArrowUp"].includes(Z.key))&&Z.preventDefault(),["Enter","ArrowDown"].includes(Z.key)&&(v.value=!0),["Escape"].includes(Z.key)&&(v.value=!1),M.value&&["Enter","Tab"].includes(Z.key)&&!x.value.some(we=>{let{value:Ee}=we;return Ee===$.value[0].value})&&Ie($.value[0]),Z.key==="ArrowDown"&&M.value&&((oe=Y.value)==null||oe.focus("next")),["Backspace","Delete"].includes(Z.key)){if(!e.multiple&&I.value&&x.value.length>0&&!P.value)return Ie(x.value[0],!1);if(~f.value){const we=f.value;Ie(x.value[f.value],!1),f.value=we>=q-1?q-2:we}else Z.key==="Backspace"&&!P.value&&(f.value=q-1)}if(e.multiple){if(Z.key==="ArrowLeft"){if(f.value<0&&Ce>0)return;const we=f.value>-1?f.value-1:q-1;x.value[we]?f.value=we:(f.value=-1,l.value.setSelectionRange((ke=P.value)==null?void 0:ke.length,(he=P.value)==null?void 0:he.length))}if(Z.key==="ArrowRight"){if(f.value<0)return;const we=f.value+1;x.value[we]?f.value=we:(f.value=-1,l.value.setSelectionRange(0,0))}}}function se(Z){if(Gn(l.value,":autofill")||Gn(l.value,":-webkit-autofill")){const Ce=h.value.find(q=>q.title===Z.target.value);Ce&&Ie(Ce)}}function ue(){var Z;e.eager&&((Z=c.value)==null||Z.calculateVisibleItems())}function ye(){var Z;o.value&&(i.value=!0,(Z=l.value)==null||Z.focus())}function G(Z){o.value=!0,setTimeout(()=>{r.value=!0})}function ce(Z){r.value=!1}function me(Z){(Z==null||Z===""&&!e.multiple&&!I.value)&&(x.value=[])}const Me=ee(!1);function Ie(Z){let Ce=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!Z||Z.props.disabled))if(e.multiple){const q=x.value.findIndex(ke=>e.valueComparator(ke.value,Z.value)),oe=Ce??!~q;if(~q){const ke=oe?[...x.value,Z]:[...x.value];ke.splice(q,1),x.value=ke}else oe&&(x.value=[...x.value,Z]);e.clearOnSelect&&(P.value="")}else{const q=Ce!==!1;x.value=q?[Z]:[],P.value=q&&!I.value?Z.title:"",Te(()=>{v.value=!1,i.value=!0})}}return Q(o,(Z,Ce)=>{var q;Z!==Ce&&(Z?(Me.value=!0,P.value=e.multiple||I.value?"":String(((q=x.value.at(-1))==null?void 0:q.props.title)??""),i.value=!0,Te(()=>Me.value=!1)):(!e.multiple&&P.value==null&&(x.value=[]),v.value=!1,x.value.some(oe=>{let{title:ke}=oe;return ke===P.value})||(P.value=""),f.value=-1))}),Q(P,Z=>{!o.value||Me.value||(Z&&(v.value=!0),i.value=!Z)}),Q(v,()=>{if(!e.hideSelected&&v.value&&x.value.length){const Z=$.value.findIndex(Ce=>x.value.some(q=>Ce.value===q.value));$e&&window.requestAnimationFrame(()=>{var Ce;Z>=0&&((Ce=c.value)==null||Ce.scrollToIndex(Z))})}}),Q(()=>e.items,(Z,Ce)=>{v.value||o.value&&!Ce.length&&Z.length&&(v.value=!0)}),W(()=>{const Z=!!(!e.hideNoData||$.value.length||t["prepend-item"]||t["append-item"]||t["no-data"]),Ce=x.value.length>0,q=Sn.filterProps(e);return s(Sn,z({ref:l},q,{modelValue:P.value,"onUpdate:modelValue":[oe=>P.value=oe,me],focused:o.value,"onUpdate:focused":oe=>o.value=oe,validationValue:x.externalValue,counterValue:_.value,dirty:Ce,onChange:se,class:["v-autocomplete",`v-autocomplete--${e.multiple?"multiple":"single"}`,{"v-autocomplete--active-menu":v.value,"v-autocomplete--chips":!!e.chips,"v-autocomplete--selection-slot":!!I.value,"v-autocomplete--selecting-index":f.value>-1},e.class],style:e.style,readonly:T.isReadonly.value,placeholder:Ce?void 0:e.placeholder,"onClick:clear":re,"onMousedown:control":N,onKeydown:te}),{...t,default:()=>s(ae,null,[s(qn,z({ref:u,modelValue:v.value,"onUpdate:modelValue":oe=>v.value=oe,activator:"parent",contentClass:"v-autocomplete__content",disabled:j.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:ue,onAfterLeave:ye},e.menuProps),{default:()=>[Z&&s(kl,z({ref:Y,selected:A.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:oe=>oe.preventDefault(),onKeydown:O,onFocusin:G,onFocusout:ce,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},le,e.listProps),{default:()=>{var oe,ke,he;return[(oe=t["prepend-item"])==null?void 0:oe.call(t),!$.value.length&&!e.hideNoData&&(((ke=t["no-data"])==null?void 0:ke.call(t))??s(Kt,{title:a(e.noDataText)},null)),s(Vl,{ref:c,renderless:!0,items:$.value},{default:we=>{var dt;let{item:Ee,index:ht,itemRef:Fe}=we;const Ft=z(Ee.props,{ref:Fe,key:ht,active:M.value&&ht===0?!0:void 0,onClick:()=>Ie(Ee,null)});return((dt=t.item)==null?void 0:dt.call(t,{item:Ee,index:ht,props:Ft}))??s(Kt,z(Ft,{role:"option"}),{prepend:sn=>{let{isSelected:un}=sn;return s(ae,null,[e.multiple&&!e.hideSelected?s(Ut,{key:Ee.value,modelValue:un,ripple:!1,tabindex:"-1"},null):void 0,Ee.props.prependAvatar&&s(It,{image:Ee.props.prependAvatar},null),Ee.props.prependIcon&&s(Be,{icon:Ee.props.prependIcon},null)])},title:()=>{var sn,un;return i.value?Ee.title:LS(Ee.title,(sn=w(Ee))==null?void 0:sn.title,((un=P.value)==null?void 0:un.length)??0)}})}}),(he=t["append-item"])==null?void 0:he.call(t)]}})]}),x.value.map((oe,ke)=>{function he(Fe){Fe.stopPropagation(),Fe.preventDefault(),Ie(oe,!1)}const we={"onClick:close":he,onKeydown(Fe){Fe.key!=="Enter"&&Fe.key!==" "||(Fe.preventDefault(),Fe.stopPropagation(),he(Fe))},onMousedown(Fe){Fe.preventDefault(),Fe.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},Ee=p.value?!!t.chip:!!t.selection,ht=Ee?il(p.value?t.chip({item:oe,index:ke,props:we}):t.selection({item:oe,index:ke})):void 0;if(!(Ee&&!ht))return s("div",{key:oe.value,class:["v-autocomplete__selection",ke===f.value&&["v-autocomplete__selection--selected",S.value]],style:ke===f.value?C.value:{}},[p.value?t.chip?s(pe,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:oe.title}}},{default:()=>[ht]}):s(ta,z({key:"chip",closable:e.closableChips,size:"small",text:oe.title,disabled:oe.props.disabled},we),null):ht??s("span",{class:"v-autocomplete__selection-text"},[oe.title,e.multiple&&ke(e.floating?e.dot?2:4:e.dot?8:12)+(["top","bottom"].includes(d)?+(e.offsetY??0):["left","right"].includes(d)?+(e.offsetX??0):0));return W(()=>{const d=Number(e.content),v=!e.max||isNaN(d)?e.content:d<=+e.max?d:`${e.max}+`,[f,m]=eo(n.attrs,["aria-atomic","aria-label","aria-live","role","title"]);return s(e.tag,z({class:["v-badge",{"v-badge--bordered":e.bordered,"v-badge--dot":e.dot,"v-badge--floating":e.floating,"v-badge--inline":e.inline},e.class]},m,{style:e.style}),{default:()=>{var b,h;return[s("div",{class:"v-badge__wrapper"},[(h=(b=n.slots).default)==null?void 0:h.call(b),s(ft,{transition:e.transition},{default:()=>{var g,k;return[je(s("span",z({class:["v-badge__badge",u.value,t.value,l.value,i.value],style:[a.value,r.value,e.inline?{}:c.value],"aria-atomic":"true","aria-label":o(e.label,d),"aria-live":"polite",role:"status"},f),[e.dot?void 0:n.slots.badge?(k=(g=n.slots).badge)==null?void 0:k.call(g):e.icon?s(Be,{icon:e.icon},null):v]),[[Mt,e.modelValue]])]}})])]}})}),{}}}),NS=B({color:String,density:String,...ie()},"VBannerActions"),Ju=R()({name:"VBannerActions",props:NS(),setup(e,n){let{slots:t}=n;return Ge({VBtn:{color:e.color,density:e.density,slim:!0,variant:"text"}}),W(()=>{var a;return s("div",{class:["v-banner-actions",e.class],style:e.style},[(a=t.default)==null?void 0:a.call(t)])}),{}}}),Qu=Wt("v-banner-text"),RS=B({avatar:String,bgColor:String,color:String,icon:ve,lines:String,stacked:Boolean,sticky:Boolean,text:String,...wt(),...ie(),...lt(),...Qe(),...In({mobile:null}),...at(),...Xt(),...Jn(),...ze(),...Ve(),...Pe()},"VBanner"),HS=R()({name:"VBanner",props:RS(),setup(e,n){let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(e,"bgColor"),{borderClasses:o}=_t(e),{densityClasses:i}=gt(e),{displayClasses:r,mobile:u}=$t(e),{dimensionStyles:c}=et(e),{elevationClasses:d}=st(e),{locationStyles:v}=En(e),{positionClasses:f}=Qn(e),{roundedClasses:m}=Ue(e),{themeClasses:b}=De(e),h=F(e,"color"),g=F(e,"density");Ge({VBannerActions:{color:h,density:g}}),W(()=>{const k=!!(e.text||t.text),S=!!(e.avatar||e.icon),C=!!(S||t.prepend);return s(e.tag,{class:["v-banner",{"v-banner--stacked":e.stacked||u.value,"v-banner--sticky":e.sticky,[`v-banner--${e.lines}-line`]:!!e.lines},b.value,a.value,o.value,i.value,r.value,d.value,f.value,m.value,e.class],style:[l.value,c.value,v.value,e.style],role:"banner"},{default:()=>{var P;return[C&&s("div",{key:"prepend",class:"v-banner__prepend"},[t.prepend?s(pe,{key:"prepend-defaults",disabled:!S,defaults:{VAvatar:{color:h.value,density:g.value,icon:e.icon,image:e.avatar}}},t.prepend):s(It,{key:"prepend-avatar",color:h.value,density:g.value,icon:e.icon,image:e.avatar},null)]),s("div",{class:"v-banner__content"},[k&&s(Qu,{key:"text"},{default:()=>{var x;return[((x=t.text)==null?void 0:x.call(t))??e.text]}}),(P=t.default)==null?void 0:P.call(t)]),t.actions&&s(Ju,{key:"actions"},t.actions)]}})})}}),zS=B({baseColor:String,bgColor:String,color:String,grow:Boolean,mode:{type:String,validator:e=>!e||["horizontal","shift"].includes(e)},height:{type:[Number,String],default:56},active:{type:Boolean,default:!0},...wt(),...ie(),...lt(),...at(),...ze(),...$n({name:"bottom-navigation"}),...Ve({tag:"header"}),...Dn({selectedClass:"v-btn--selected"}),...Pe()},"VBottomNavigation"),WS=R()({name:"VBottomNavigation",props:zS(),emits:{"update:active":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{themeClasses:a}=js(),{borderClasses:l}=_t(e),{backgroundColorClasses:o,backgroundColorStyles:i}=Le(F(e,"bgColor")),{densityClasses:r}=gt(e),{elevationClasses:u}=st(e),{roundedClasses:c}=Ue(e),{ssrBootStyles:d}=An(),v=y(()=>Number(e.height)-(e.density==="comfortable"?8:0)-(e.density==="compact"?16:0)),f=de(e,"active",e.active),{layoutItemStyles:m}=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:y(()=>"bottom"),layoutSize:y(()=>f.value?v.value:0),elementSize:v,active:f,absolute:F(e,"absolute")});return rn(e,vi),Ge({VBtn:{baseColor:F(e,"baseColor"),color:F(e,"color"),density:F(e,"density"),stacked:y(()=>e.mode!=="horizontal"),variant:"text"}},{scoped:!0}),W(()=>s(e.tag,{class:["v-bottom-navigation",{"v-bottom-navigation--active":f.value,"v-bottom-navigation--grow":e.grow,"v-bottom-navigation--shift":e.mode==="shift"},a.value,o.value,l.value,r.value,u.value,c.value,e.class],style:[i.value,m.value,{height:ne(v.value)},d.value,e.style]},{default:()=>[t.default&&s("div",{class:"v-bottom-navigation__content"},[t.default()])]})),{}}}),ec=B({fullscreen:Boolean,retainFocus:{type:Boolean,default:!0},scrollable:Boolean,..._a({origin:"center center",scrollStrategy:"block",transition:{component:dl},zIndex:2400})},"VDialog"),So=R()({name:"VDialog",props:ec(),emits:{"update:modelValue":e=>!0,afterEnter:()=>!0,afterLeave:()=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=de(e,"modelValue"),{scopeId:o}=Fn(),i=H();function r(d){var m,b;const v=d.relatedTarget,f=d.target;if(v!==f&&((m=i.value)!=null&&m.contentEl)&&((b=i.value)!=null&&b.globalTop)&&![document,i.value.contentEl].includes(f)&&!i.value.contentEl.contains(f)){const h=oa(i.value.contentEl);if(!h.length)return;const g=h[0],k=h[h.length-1];v===g?k.focus():g.focus()}}it(()=>{document.removeEventListener("focusin",r)}),$e&&Q(()=>l.value&&e.retainFocus,d=>{d?document.addEventListener("focusin",r):document.removeEventListener("focusin",r)},{immediate:!0});function u(){var d;t("afterEnter"),(d=i.value)!=null&&d.contentEl&&!i.value.contentEl.contains(document.activeElement)&&i.value.contentEl.focus({preventScroll:!0})}function c(){t("afterLeave")}return Q(l,async d=>{var v;d||(await Te(),(v=i.value.activatorEl)==null||v.focus({preventScroll:!0}))}),W(()=>{const d=Rt.filterProps(e),v=z({"aria-haspopup":"dialog"},e.activatorProps),f=z({tabindex:-1},e.contentProps);return s(Rt,z({ref:i,class:["v-dialog",{"v-dialog--fullscreen":e.fullscreen,"v-dialog--scrollable":e.scrollable},e.class],style:e.style},d,{modelValue:l.value,"onUpdate:modelValue":m=>l.value=m,"aria-modal":"true",activatorProps:v,contentProps:f,height:e.fullscreen?void 0:e.height,width:e.fullscreen?void 0:e.width,maxHeight:e.fullscreen?void 0:e.maxHeight,maxWidth:e.fullscreen?void 0:e.maxWidth,role:"dialog",onAfterEnter:u,onAfterLeave:c},o),{activator:a.activator,default:function(){for(var m=arguments.length,b=new Array(m),h=0;h{var g;return[(g=a.default)==null?void 0:g.call(a,...b)]}})}})}),At({},i)}}),jS=B({inset:Boolean,...ec({transition:"bottom-sheet-transition"})},"VBottomSheet"),GS=R()({name:"VBottomSheet",props:jS(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue");return W(()=>{const l=So.filterProps(e);return s(So,z(l,{contentClass:["v-bottom-sheet__content",e.contentClass],modelValue:a.value,"onUpdate:modelValue":o=>a.value=o,class:["v-bottom-sheet",{"v-bottom-sheet--inset":e.inset},e.class],style:e.style}),t)}),{}}}),YS=B({divider:[Number,String],...ie()},"VBreadcrumbsDivider"),tc=R()({name:"VBreadcrumbsDivider",props:YS(),setup(e,n){let{slots:t}=n;return W(()=>{var a;return s("li",{class:["v-breadcrumbs-divider",e.class],style:e.style},[((a=t==null?void 0:t.default)==null?void 0:a.call(t))??e.divider])}),{}}}),US=B({active:Boolean,activeClass:String,activeColor:String,color:String,disabled:Boolean,title:String,...ie(),...Ca(),...Ve({tag:"li"})},"VBreadcrumbsItem"),nc=R()({name:"VBreadcrumbsItem",props:US(),setup(e,n){let{slots:t,attrs:a}=n;const l=Va(e,a),o=y(()=>{var c;return e.active||((c=l.isActive)==null?void 0:c.value)}),i=y(()=>o.value?e.activeColor:e.color),{textColorClasses:r,textColorStyles:u}=ut(i);return W(()=>s(e.tag,{class:["v-breadcrumbs-item",{"v-breadcrumbs-item--active":o.value,"v-breadcrumbs-item--disabled":e.disabled,[`${e.activeClass}`]:o.value&&e.activeClass},r.value,e.class],style:[u.value,e.style],"aria-current":o.value?"page":void 0},{default:()=>{var c,d;return[l.isLink.value?s("a",z({class:"v-breadcrumbs-item--link",onClick:l.navigate},l.linkProps),[((d=t.default)==null?void 0:d.call(t))??e.title]):((c=t.default)==null?void 0:c.call(t))??e.title]}})),{}}}),KS=B({activeClass:String,activeColor:String,bgColor:String,color:String,disabled:Boolean,divider:{type:String,default:"/"},icon:ve,items:{type:Array,default:()=>[]},...ie(),...lt(),...ze(),...Ve({tag:"ul"})},"VBreadcrumbs"),qS=R()({name:"VBreadcrumbs",props:KS(),setup(e,n){let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(F(e,"bgColor")),{densityClasses:o}=gt(e),{roundedClasses:i}=Ue(e);Ge({VBreadcrumbsDivider:{divider:F(e,"divider")},VBreadcrumbsItem:{activeClass:F(e,"activeClass"),activeColor:F(e,"activeColor"),color:F(e,"color"),disabled:F(e,"disabled")}});const r=y(()=>e.items.map(u=>typeof u=="string"?{item:{title:u},raw:u}:{item:u,raw:u}));return W(()=>{const u=!!(t.prepend||e.icon);return s(e.tag,{class:["v-breadcrumbs",a.value,o.value,i.value,e.class],style:[l.value,e.style]},{default:()=>{var c;return[u&&s("li",{key:"prepend",class:"v-breadcrumbs__prepend"},[t.prepend?s(pe,{key:"prepend-defaults",disabled:!e.icon,defaults:{VIcon:{icon:e.icon,start:!0}}},t.prepend):s(Be,{key:"prepend-icon",start:!0,icon:e.icon},null)]),r.value.map((d,v,f)=>{var h;let{item:m,raw:b}=d;return s(ae,null,[((h=t.item)==null?void 0:h.call(t,{item:m,index:v}))??s(nc,z({key:v,disabled:v>=f.length-1},typeof m=="string"?{title:m}:m),{default:t.title?()=>{var g;return(g=t.title)==null?void 0:g.call(t,{item:m,index:v})}:void 0}),v{var g;return(g=t.divider)==null?void 0:g.call(t,{item:b,index:v})}:void 0})])}),(c=t.default)==null?void 0:c.call(t)]}})}),{}}}),ac=R()({name:"VCardActions",props:ie(),setup(e,n){let{slots:t}=n;return Ge({VBtn:{slim:!0,variant:"text"}}),W(()=>{var a;return s("div",{class:["v-card-actions",e.class],style:e.style},[(a=t.default)==null?void 0:a.call(t)])}),{}}}),XS=B({opacity:[Number,String],...ie(),...Ve()},"VCardSubtitle"),lc=R()({name:"VCardSubtitle",props:XS(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-card-subtitle",e.class],style:[{"--v-card-subtitle-opacity":e.opacity},e.style]},t)),{}}}),oc=Wt("v-card-title"),ZS=B({appendAvatar:String,appendIcon:ve,prependAvatar:String,prependIcon:ve,subtitle:[String,Number],title:[String,Number],...ie(),...lt()},"VCardItem"),ic=R()({name:"VCardItem",props:ZS(),setup(e,n){let{slots:t}=n;return W(()=>{var c;const a=!!(e.prependAvatar||e.prependIcon),l=!!(a||t.prepend),o=!!(e.appendAvatar||e.appendIcon),i=!!(o||t.append),r=!!(e.title!=null||t.title),u=!!(e.subtitle!=null||t.subtitle);return s("div",{class:["v-card-item",e.class],style:e.style},[l&&s("div",{key:"prepend",class:"v-card-item__prepend"},[t.prepend?s(pe,{key:"prepend-defaults",disabled:!a,defaults:{VAvatar:{density:e.density,image:e.prependAvatar},VIcon:{density:e.density,icon:e.prependIcon}}},t.prepend):s(ae,null,[e.prependAvatar&&s(It,{key:"prepend-avatar",density:e.density,image:e.prependAvatar},null),e.prependIcon&&s(Be,{key:"prepend-icon",density:e.density,icon:e.prependIcon},null)])]),s("div",{class:"v-card-item__content"},[r&&s(oc,{key:"title"},{default:()=>{var d;return[((d=t.title)==null?void 0:d.call(t))??e.title]}}),u&&s(lc,{key:"subtitle"},{default:()=>{var d;return[((d=t.subtitle)==null?void 0:d.call(t))??e.subtitle]}}),(c=t.default)==null?void 0:c.call(t)]),i&&s("div",{key:"append",class:"v-card-item__append"},[t.append?s(pe,{key:"append-defaults",disabled:!o,defaults:{VAvatar:{density:e.density,image:e.appendAvatar},VIcon:{density:e.density,icon:e.appendIcon}}},t.append):s(ae,null,[e.appendIcon&&s(Be,{key:"append-icon",density:e.density,icon:e.appendIcon},null),e.appendAvatar&&s(It,{key:"append-avatar",density:e.density,image:e.appendAvatar},null)])])])}),{}}}),JS=B({opacity:[Number,String],...ie(),...Ve()},"VCardText"),rc=R()({name:"VCardText",props:JS(),setup(e,n){let{slots:t}=n;return W(()=>s(e.tag,{class:["v-card-text",e.class],style:[{"--v-card-text-opacity":e.opacity},e.style]},t)),{}}}),QS=B({appendAvatar:String,appendIcon:ve,disabled:Boolean,flat:Boolean,hover:Boolean,image:String,link:{type:Boolean,default:void 0},prependAvatar:String,prependIcon:ve,ripple:{type:[Boolean,Object],default:!0},subtitle:[String,Number],text:[String,Number],title:[String,Number],...wt(),...ie(),...lt(),...Qe(),...at(),...gl(),...Xt(),...Jn(),...ze(),...Ca(),...Ve(),...Pe(),...Tt({variant:"elevated"})},"VCard"),e0=R()({name:"VCard",directives:{Ripple:Zt},props:QS(),setup(e,n){let{attrs:t,slots:a}=n;const{themeClasses:l}=De(e),{borderClasses:o}=_t(e),{colorClasses:i,colorStyles:r,variantClasses:u}=Bn(e),{densityClasses:c}=gt(e),{dimensionStyles:d}=et(e),{elevationClasses:v}=st(e),{loaderClasses:f}=Sa(e),{locationStyles:m}=En(e),{positionClasses:b}=Qn(e),{roundedClasses:h}=Ue(e),g=Va(e,t),k=y(()=>e.link!==!1&&g.isLink.value),S=y(()=>!e.disabled&&e.link!==!1&&(e.link||g.isClickable.value));return W(()=>{const C=k.value?"a":e.tag,P=!!(a.title||e.title!=null),x=!!(a.subtitle||e.subtitle!=null),_=P||x,T=!!(a.append||e.appendAvatar||e.appendIcon),V=!!(a.prepend||e.prependAvatar||e.prependIcon),w=!!(a.image||e.image),$=_||V||T,p=!!(a.text||e.text!=null);return je(s(C,z({class:["v-card",{"v-card--disabled":e.disabled,"v-card--flat":e.flat,"v-card--hover":e.hover&&!(e.disabled||e.flat),"v-card--link":S.value},l.value,o.value,i.value,c.value,v.value,f.value,b.value,h.value,u.value,e.class],style:[r.value,d.value,m.value,e.style],onClick:S.value&&g.navigate,tabindex:e.disabled?-1:void 0},g.linkProps),{default:()=>{var I;return[w&&s("div",{key:"image",class:"v-card__image"},[a.image?s(pe,{key:"image-defaults",disabled:!e.image,defaults:{VImg:{cover:!0,src:e.image}}},a.image):s(Yt,{key:"image-img",cover:!0,src:e.image},null)]),s(wa,{name:"v-card",active:!!e.loading,color:typeof e.loading=="boolean"?void 0:e.loading},{default:a.loader}),$&&s(ic,{key:"item",prependAvatar:e.prependAvatar,prependIcon:e.prependIcon,title:e.title,subtitle:e.subtitle,appendAvatar:e.appendAvatar,appendIcon:e.appendIcon},{default:a.item,prepend:a.prepend,title:a.title,subtitle:a.subtitle,append:a.append}),p&&s(rc,{key:"text"},{default:()=>{var A;return[((A=a.text)==null?void 0:A.call(a))??e.text]}}),(I=a.default)==null?void 0:I.call(a),a.actions&&s(ac,null,{default:a.actions}),on(S.value,"v-card")]}}),[[Ct("ripple"),S.value&&e.ripple]])}),{}}}),t0=e=>{const{touchstartX:n,touchendX:t,touchstartY:a,touchendY:l}=e,o=.5,i=16;e.offsetX=t-n,e.offsetY=l-a,Math.abs(e.offsetY)n+i&&e.right(e)),Math.abs(e.offsetX)a+i&&e.down(e))};function n0(e,n){var a;const t=e.changedTouches[0];n.touchstartX=t.clientX,n.touchstartY=t.clientY,(a=n.start)==null||a.call(n,{originalEvent:e,...n})}function a0(e,n){var a;const t=e.changedTouches[0];n.touchendX=t.clientX,n.touchendY=t.clientY,(a=n.end)==null||a.call(n,{originalEvent:e,...n}),t0(n)}function l0(e,n){var a;const t=e.changedTouches[0];n.touchmoveX=t.clientX,n.touchmoveY=t.clientY,(a=n.move)==null||a.call(n,{originalEvent:e,...n})}function o0(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const n={touchstartX:0,touchstartY:0,touchendX:0,touchendY:0,touchmoveX:0,touchmoveY:0,offsetX:0,offsetY:0,left:e.left,right:e.right,up:e.up,down:e.down,start:e.start,move:e.move,end:e.end};return{touchstart:t=>n0(t,n),touchend:t=>a0(t,n),touchmove:t=>l0(t,n)}}function i0(e,n){var r;const t=n.value,a=t!=null&&t.parent?e.parentElement:e,l=(t==null?void 0:t.options)??{passive:!0},o=(r=n.instance)==null?void 0:r.$.uid;if(!a||!o)return;const i=o0(n.value);a._touchHandlers=a._touchHandlers??Object.create(null),a._touchHandlers[o]=i,fs(i).forEach(u=>{a.addEventListener(u,i[u],l)})}function r0(e,n){var o,i;const t=(o=n.value)!=null&&o.parent?e.parentElement:e,a=(i=n.instance)==null?void 0:i.$.uid;if(!(t!=null&&t._touchHandlers)||!a)return;const l=t._touchHandlers[a];fs(l).forEach(r=>{t.removeEventListener(r,l[r])}),delete t._touchHandlers[a]}const _i={mounted:i0,unmounted:r0},sc=Symbol.for("vuetify:v-window"),uc=Symbol.for("vuetify:v-window-group"),Cl=B({continuous:Boolean,nextIcon:{type:[Boolean,String,Function,Object],default:"$next"},prevIcon:{type:[Boolean,String,Function,Object],default:"$prev"},reverse:Boolean,showArrows:{type:[Boolean,String],validator:e=>typeof e=="boolean"||e==="hover"},touch:{type:[Object,Boolean],default:void 0},direction:{type:String,default:"horizontal"},modelValue:null,disabled:Boolean,selectedClass:{type:String,default:"v-window-item--active"},mandatory:{type:[Boolean,String],default:"force"},...ie(),...Ve(),...Pe()},"VWindow"),wn=R()({name:"VWindow",directives:{Touch:_i},props:Cl(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{isRtl:l}=nt(),{t:o}=qe(),i=rn(e,uc),r=H(),u=y(()=>l.value?!e.reverse:e.reverse),c=ee(!1),d=y(()=>{const P=e.direction==="vertical"?"y":"x",_=(u.value?!c.value:c.value)?"-reverse":"";return`v-window-${P}${_}-transition`}),v=ee(0),f=H(void 0),m=y(()=>i.items.value.findIndex(P=>i.selected.value.includes(P.id)));Q(m,(P,x)=>{const _=i.items.value.length,T=_-1;_<=2?c.value=Pe.continuous||m.value!==0),h=y(()=>e.continuous||m.value!==i.items.value.length-1);function g(){b.value&&i.prev()}function k(){h.value&&i.next()}const S=y(()=>{const P=[],x={icon:l.value?e.nextIcon:e.prevIcon,class:`v-window__${u.value?"right":"left"}`,onClick:i.prev,"aria-label":o("$vuetify.carousel.prev")};P.push(b.value?t.prev?t.prev({props:x}):s(Ae,x,null):s("div",null,null));const _={icon:l.value?e.prevIcon:e.nextIcon,class:`v-window__${u.value?"left":"right"}`,onClick:i.next,"aria-label":o("$vuetify.carousel.next")};return P.push(h.value?t.next?t.next({props:_}):s(Ae,_,null):s("div",null,null)),P}),C=y(()=>e.touch===!1?e.touch:{...{left:()=>{u.value?g():k()},right:()=>{u.value?k():g()},start:x=>{let{originalEvent:_}=x;_.stopPropagation()}},...e.touch===!0?{}:e.touch});return W(()=>je(s(e.tag,{ref:r,class:["v-window",{"v-window--show-arrows-on-hover":e.showArrows==="hover"},a.value,e.class],style:e.style},{default:()=>{var P,x;return[s("div",{class:"v-window__container",style:{height:f.value}},[(P=t.default)==null?void 0:P.call(t,{group:i}),e.showArrows!==!1&&s("div",{class:"v-window__controls"},[S.value])]),(x=t.additional)==null?void 0:x.call(t,{group:i})]}}),[[Ct("touch"),C.value]])),{group:i}}}),s0=B({color:String,cycle:Boolean,delimiterIcon:{type:ve,default:"$delimiter"},height:{type:[Number,String],default:500},hideDelimiters:Boolean,hideDelimiterBackground:Boolean,interval:{type:[Number,String],default:6e3,validator:e=>Number(e)>0},progress:[Boolean,String],verticalDelimiters:[Boolean,String],...Cl({continuous:!0,mandatory:"force",showArrows:!0})},"VCarousel"),u0=R()({name:"VCarousel",props:s0(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{t:l}=qe(),o=H();let i=-1;Q(a,u),Q(()=>e.interval,u),Q(()=>e.cycle,c=>{c?u():window.clearTimeout(i)}),Ke(r);function r(){!e.cycle||!o.value||(i=window.setTimeout(o.value.group.next,+e.interval>0?+e.interval:6e3))}function u(){window.clearTimeout(i),window.requestAnimationFrame(r)}return W(()=>{const c=wn.filterProps(e);return s(wn,z({ref:o},c,{modelValue:a.value,"onUpdate:modelValue":d=>a.value=d,class:["v-carousel",{"v-carousel--hide-delimiter-background":e.hideDelimiterBackground,"v-carousel--vertical-delimiters":e.verticalDelimiters},e.class],style:[{height:ne(e.height)},e.style]}),{default:t.default,additional:d=>{let{group:v}=d;return s(ae,null,[!e.hideDelimiters&&s("div",{class:"v-carousel__controls",style:{left:e.verticalDelimiters==="left"&&e.verticalDelimiters?0:"auto",right:e.verticalDelimiters==="right"?0:"auto"}},[v.items.value.length>0&&s(pe,{defaults:{VBtn:{color:e.color,icon:e.delimiterIcon,size:"x-small",variant:"text"}},scoped:!0},{default:()=>[v.items.value.map((f,m)=>{const b={id:`carousel-item-${f.id}`,"aria-label":l("$vuetify.carousel.ariaLabel.delimiter",m+1,v.items.value.length),class:["v-carousel__controls__item",v.isSelected(f.id)&&"v-btn--active"],onClick:()=>v.select(f.id,!0)};return t.item?t.item({props:b,item:f}):s(Ae,z(f,b),null)})]})]),e.progress&&s(ml,{class:"v-carousel__progress",color:typeof e.progress=="string"?e.progress:void 0,modelValue:(v.getItemIndex(a.value)+1)/v.items.value.length*100},null)])},prev:t.prev,next:t.next})}),{}}}),pl=B({reverseTransition:{type:[Boolean,String],default:void 0},transition:{type:[Boolean,String],default:void 0},...ie(),...Ln(),...Si()},"VWindowItem"),Vn=R()({name:"VWindowItem",directives:{Touch:_i},props:pl(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const a=xe(sc),l=Mn(e,uc),{isBooted:o}=An();if(!a||!l)throw new Error("[Vuetify] VWindowItem must be used inside VWindow");const i=ee(!1),r=y(()=>o.value&&(a.isReversed.value?e.reverseTransition!==!1:e.transition!==!1));function u(){!i.value||!a||(i.value=!1,a.transitionCount.value>0&&(a.transitionCount.value-=1,a.transitionCount.value===0&&(a.transitionHeight.value=void 0)))}function c(){var b;i.value||!a||(i.value=!0,a.transitionCount.value===0&&(a.transitionHeight.value=ne((b=a.rootRef.value)==null?void 0:b.clientHeight)),a.transitionCount.value+=1)}function d(){u()}function v(b){i.value&&Te(()=>{!r.value||!i.value||!a||(a.transitionHeight.value=ne(b.clientHeight))})}const f=y(()=>{const b=a.isReversed.value?e.reverseTransition:e.transition;return r.value?{name:typeof b!="string"?a.transition.value:b,onBeforeEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:c,onAfterLeave:u,onLeaveCancelled:d,onEnter:v}:!1}),{hasContent:m}=wi(e,l.isSelected);return W(()=>s(ft,{transition:f.value,disabled:!o.value},{default:()=>{var b;return[je(s("div",{class:["v-window-item",l.selectedClass.value,e.class],style:e.style},[m.value&&((b=t.default)==null?void 0:b.call(t))]),[[Mt,l.isSelected.value]])]}})),{groupItem:l}}}),c0=B({...tu(),...pl()},"VCarouselItem"),d0=R()({name:"VCarouselItem",inheritAttrs:!1,props:c0(),setup(e,n){let{slots:t,attrs:a}=n;W(()=>{const l=Yt.filterProps(e),o=Vn.filterProps(e);return s(Vn,z({class:["v-carousel-item",e.class]},o),{default:()=>[s(Yt,z(a,l),t)]})})}}),v0=Wt("v-code","code"),f0=B({color:{type:Object},disabled:Boolean,dotSize:{type:[Number,String],default:10},height:{type:[Number,String],default:150},width:{type:[Number,String],default:300},...ie()},"VColorPickerCanvas"),m0=pt({name:"VColorPickerCanvas",props:f0(),emits:{"update:color":e=>!0,"update:position":e=>!0},setup(e,n){let{emit:t}=n;const a=ee(!1),l=H(),o=ee(parseFloat(e.width)),i=ee(parseFloat(e.height)),r=H({x:0,y:0}),u=y({get:()=>r.value,set(g){var C,P;if(!l.value)return;const{x:k,y:S}=g;r.value=g,t("update:color",{h:((C=e.color)==null?void 0:C.h)??0,s:Xe(k,0,o.value)/o.value,v:1-Xe(S,0,i.value)/i.value,a:((P=e.color)==null?void 0:P.a)??1})}}),c=y(()=>{const{x:g,y:k}=u.value,S=parseInt(e.dotSize,10)/2;return{width:ne(e.dotSize),height:ne(e.dotSize),transform:`translate(${ne(g-S)}, ${ne(k-S)})`}}),{resizeRef:d}=Lt(g=>{var C;if(!((C=d.el)!=null&&C.offsetParent))return;const{width:k,height:S}=g[0].contentRect;o.value=k,i.value=S});function v(g,k,S){const{left:C,top:P,width:x,height:_}=S;u.value={x:Xe(g-C,0,x),y:Xe(k-P,0,_)}}function f(g){g.type==="mousedown"&&g.preventDefault(),!e.disabled&&(m(g),window.addEventListener("mousemove",m),window.addEventListener("mouseup",b),window.addEventListener("touchmove",m),window.addEventListener("touchend",b))}function m(g){if(e.disabled||!l.value)return;a.value=!0;const k=Ah(g);v(k.clientX,k.clientY,l.value.getBoundingClientRect())}function b(){window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",b),window.removeEventListener("touchmove",m),window.removeEventListener("touchend",b)}function h(){var P;if(!l.value)return;const g=l.value,k=g.getContext("2d");if(!k)return;const S=k.createLinearGradient(0,0,g.width,0);S.addColorStop(0,"hsla(0, 0%, 100%, 1)"),S.addColorStop(1,`hsla(${((P=e.color)==null?void 0:P.h)??0}, 100%, 50%, 1)`),k.fillStyle=S,k.fillRect(0,0,g.width,g.height);const C=k.createLinearGradient(0,0,0,g.height);C.addColorStop(0,"hsla(0, 0%, 0%, 0)"),C.addColorStop(1,"hsla(0, 0%, 0%, 1)"),k.fillStyle=C,k.fillRect(0,0,g.width,g.height)}return Q(()=>{var g;return(g=e.color)==null?void 0:g.h},h,{immediate:!0}),Q(()=>[o.value,i.value],(g,k)=>{h(),r.value={x:u.value.x*g[0]/k[0],y:u.value.y*g[1]/k[1]}},{flush:"post"}),Q(()=>e.color,()=>{if(a.value){a.value=!1;return}r.value=e.color?{x:e.color.s*o.value,y:(1-e.color.v)*i.value}:{x:0,y:0}},{deep:!0,immediate:!0}),Ke(()=>h()),W(()=>s("div",{ref:d,class:["v-color-picker-canvas",e.class],style:e.style,onMousedown:f,onTouchstartPassive:f},[s("canvas",{ref:l,width:o.value,height:i.value},null),e.color&&s("div",{class:["v-color-picker-canvas__dot",{"v-color-picker-canvas__dot--disabled":e.disabled}],style:c.value},null)])),{}}});function g0(e,n){if(n){const{a:t,...a}=e;return a}return e}function h0(e,n){if(n==null||typeof n=="string"){const t=Ts(e);return e.a===1?t.slice(0,7):t}if(typeof n=="object"){let t;return vn(n,["r","g","b"])?t=Gt(e):vn(n,["h","s","l"])?t=ps(e):vn(n,["h","s","v"])&&(t=e),g0(t,!vn(n,["a"])&&e.a===1)}return e}const Wn={h:0,s:0,v:0,a:1},wo={inputProps:{type:"number",min:0},inputs:[{label:"R",max:255,step:1,getValue:e=>Math.round(e.r),getColor:(e,n)=>({...e,r:Number(n)})},{label:"G",max:255,step:1,getValue:e=>Math.round(e.g),getColor:(e,n)=>({...e,g:Number(n)})},{label:"B",max:255,step:1,getValue:e=>Math.round(e.b),getColor:(e,n)=>({...e,b:Number(n)})},{label:"A",max:1,step:.01,getValue:e=>{let{a:n}=e;return n!=null?Math.round(n*100)/100:1},getColor:(e,n)=>({...e,a:Number(n)})}],to:Gt,from:rl};var Xr;const y0={...wo,inputs:(Xr=wo.inputs)==null?void 0:Xr.slice(0,3)},Vo={inputProps:{type:"number",min:0},inputs:[{label:"H",max:360,step:1,getValue:e=>Math.round(e.h),getColor:(e,n)=>({...e,h:Number(n)})},{label:"S",max:1,step:.01,getValue:e=>Math.round(e.s*100)/100,getColor:(e,n)=>({...e,s:Number(n)})},{label:"L",max:1,step:.01,getValue:e=>Math.round(e.l*100)/100,getColor:(e,n)=>({...e,l:Number(n)})},{label:"A",max:1,step:.01,getValue:e=>{let{a:n}=e;return n!=null?Math.round(n*100)/100:1},getColor:(e,n)=>({...e,a:Number(n)})}],to:ps,from:ei},b0={...Vo,inputs:Vo.inputs.slice(0,3)},cc={inputProps:{type:"text"},inputs:[{label:"HEXA",getValue:e=>e,getColor:(e,n)=>n}],to:Ts,from:$s},k0={...cc,inputs:[{label:"HEX",getValue:e=>e.slice(0,7),getColor:(e,n)=>n}]},yn={rgb:y0,rgba:wo,hsl:b0,hsla:Vo,hex:k0,hexa:cc},S0=e=>{let{label:n,...t}=e;return s("div",{class:"v-color-picker-edit__input"},[s("input",t,null),s("span",null,[n])])},w0=B({color:Object,disabled:Boolean,mode:{type:String,default:"rgba",validator:e=>Object.keys(yn).includes(e)},modes:{type:Array,default:()=>Object.keys(yn),validator:e=>Array.isArray(e)&&e.every(n=>Object.keys(yn).includes(n))},...ie()},"VColorPickerEdit"),V0=pt({name:"VColorPickerEdit",props:w0(),emits:{"update:color":e=>!0,"update:mode":e=>!0},setup(e,n){let{emit:t}=n;const a=y(()=>e.modes.map(o=>({...yn[o],name:o}))),l=y(()=>{var r;const o=a.value.find(u=>u.name===e.mode);if(!o)return[];const i=e.color?o.to(e.color):null;return(r=o.inputs)==null?void 0:r.map(u=>{let{getValue:c,getColor:d,...v}=u;return{...o.inputProps,...v,disabled:e.disabled,value:i&&c(i),onChange:f=>{const m=f.target;m&&t("update:color",o.from(d(i??o.to(Wn),m.value)))}}})});return W(()=>{var o;return s("div",{class:["v-color-picker-edit",e.class],style:e.style},[(o=l.value)==null?void 0:o.map(i=>s(S0,i,null)),a.value.length>1&&s(Ae,{icon:"$unfold",size:"x-small",variant:"plain",onClick:()=>{const i=a.value.findIndex(r=>r.name===e.mode);t("update:mode",a.value[(i+1)%a.value.length].name)}},null)])}),{}}}),Pi=Symbol.for("vuetify:v-slider");function Co(e,n,t){const a=t==="vertical",l=n.getBoundingClientRect(),o="touches"in e?e.touches[0]:e;return a?o.clientY-(l.top+l.height/2):o.clientX-(l.left+l.width/2)}function C0(e,n){return"touches"in e&&e.touches.length?e.touches[0][n]:"changedTouches"in e&&e.changedTouches.length?e.changedTouches[0][n]:e[n]}const dc=B({disabled:{type:Boolean,default:null},error:Boolean,readonly:{type:Boolean,default:null},max:{type:[Number,String],default:100},min:{type:[Number,String],default:0},step:{type:[Number,String],default:0},thumbColor:String,thumbLabel:{type:[Boolean,String],default:void 0,validator:e=>typeof e=="boolean"||e==="always"},thumbSize:{type:[Number,String],default:20},showTicks:{type:[Boolean,String],default:!1,validator:e=>typeof e=="boolean"||e==="always"},ticks:{type:[Array,Object]},tickSize:{type:[Number,String],default:2},color:String,trackColor:String,trackFillColor:String,trackSize:{type:[Number,String],default:4},direction:{type:String,default:"horizontal",validator:e=>["vertical","horizontal"].includes(e)},reverse:Boolean,...ze(),...at({elevation:2}),ripple:{type:Boolean,default:!0}},"Slider"),vc=e=>{const n=y(()=>parseFloat(e.min)),t=y(()=>parseFloat(e.max)),a=y(()=>+e.step>0?parseFloat(e.step):0),l=y(()=>Math.max(qi(a.value),qi(n.value)));function o(i){if(i=parseFloat(i),a.value<=0)return i;const r=Xe(i,n.value,t.value),u=n.value%a.value,c=Math.round((r-u)/a.value)*a.value+u;return parseFloat(Math.min(c,t.value).toFixed(l.value))}return{min:n,max:t,step:a,decimals:l,roundValue:o}},fc=e=>{let{props:n,steps:t,onSliderStart:a,onSliderMove:l,onSliderEnd:o,getActiveThumb:i}=e;const{isRtl:r}=nt(),u=F(n,"reverse"),c=y(()=>n.direction==="vertical"),d=y(()=>c.value!==u.value),{min:v,max:f,step:m,decimals:b,roundValue:h}=t,g=y(()=>parseInt(n.thumbSize,10)),k=y(()=>parseInt(n.tickSize,10)),S=y(()=>parseInt(n.trackSize,10)),C=y(()=>(f.value-v.value)/m.value),P=F(n,"disabled"),x=y(()=>n.error||n.disabled?void 0:n.thumbColor??n.color),_=y(()=>n.error||n.disabled?void 0:n.trackColor??n.color),T=y(()=>n.error||n.disabled?void 0:n.trackFillColor??n.color),V=ee(!1),w=ee(0),$=H(),p=H();function I(G){var ke;const ce=n.direction==="vertical",me=ce?"top":"left",Me=ce?"height":"width",Ie=ce?"clientY":"clientX",{[me]:Z,[Me]:Ce}=(ke=$.value)==null?void 0:ke.$el.getBoundingClientRect(),q=C0(G,Ie);let oe=Math.min(Math.max((q-Z-w.value)/Ce,0),1)||0;return(ce?d.value:d.value!==r.value)&&(oe=1-oe),h(v.value+oe*(f.value-v.value))}const A=G=>{o({value:I(G)}),V.value=!1,w.value=0},M=G=>{p.value=i(G),p.value&&(p.value.focus(),V.value=!0,p.value.contains(G.target)?w.value=Co(G,p.value,n.direction):(w.value=0,l({value:I(G)})),a({value:I(G)}))},j={passive:!0,capture:!0};function Y(G){l({value:I(G)})}function le(G){G.stopPropagation(),G.preventDefault(),A(G),window.removeEventListener("mousemove",Y,j),window.removeEventListener("mouseup",le)}function re(G){var ce;A(G),window.removeEventListener("touchmove",Y,j),(ce=G.target)==null||ce.removeEventListener("touchend",re)}function N(G){var ce;M(G),window.addEventListener("touchmove",Y,j),(ce=G.target)==null||ce.addEventListener("touchend",re,{passive:!1})}function E(G){G.preventDefault(),M(G),window.addEventListener("mousemove",Y,j),window.addEventListener("mouseup",le,{passive:!1})}const O=G=>{const ce=(G-v.value)/(f.value-v.value)*100;return Xe(isNaN(ce)?0:ce,0,100)},te=F(n,"showTicks"),se=y(()=>te.value?n.ticks?Array.isArray(n.ticks)?n.ticks.map(G=>({value:G,position:O(G),label:G.toString()})):Object.keys(n.ticks).map(G=>({value:parseFloat(G),position:O(parseFloat(G)),label:n.ticks[G]})):C.value!==1/0?Ot(C.value+1).map(G=>{const ce=v.value+G*m.value;return{value:ce,position:O(ce)}}):[]:[]),ue=y(()=>se.value.some(G=>{let{label:ce}=G;return!!ce})),ye={activeThumbRef:p,color:F(n,"color"),decimals:b,disabled:P,direction:F(n,"direction"),elevation:F(n,"elevation"),hasLabels:ue,isReversed:u,indexFromEnd:d,min:v,max:f,mousePressed:V,numTicks:C,onSliderMousedown:E,onSliderTouchstart:N,parsedTicks:se,parseMouseMove:I,position:O,readonly:F(n,"readonly"),rounded:F(n,"rounded"),roundValue:h,showTicks:te,startOffset:w,step:m,thumbSize:g,thumbColor:x,thumbLabel:F(n,"thumbLabel"),ticks:F(n,"ticks"),tickSize:k,trackColor:_,trackContainerRef:$,trackFillColor:T,trackSize:S,vertical:c};return Re(Pi,ye),ye},p0=B({focused:Boolean,max:{type:Number,required:!0},min:{type:Number,required:!0},modelValue:{type:Number,required:!0},position:{type:Number,required:!0},ripple:{type:[Boolean,Object],default:!0},name:String,...ie()},"VSliderThumb"),po=R()({name:"VSliderThumb",directives:{Ripple:Zt},props:p0(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=xe(Pi),{isRtl:o,rtlClasses:i}=nt();if(!l)throw new Error("[Vuetify] v-slider-thumb must be used inside v-slider or v-range-slider");const{thumbColor:r,step:u,disabled:c,thumbSize:d,thumbLabel:v,direction:f,isReversed:m,vertical:b,readonly:h,elevation:g,mousePressed:k,decimals:S,indexFromEnd:C}=l,P=y(()=>c.value?void 0:g.value),{elevationClasses:x}=st(P),{textColorClasses:_,textColorStyles:T}=ut(r),{pageup:V,pagedown:w,end:$,home:p,left:I,right:A,down:M,up:j}=Ql,Y=[V,w,$,p,I,A,M,j],le=y(()=>u.value?[1,2,3]:[1,5,10]);function re(E,O){if(!Y.includes(E.key))return;E.preventDefault();const te=u.value||.1,se=(e.max-e.min)/te;if([I,A,M,j].includes(E.key)){const ye=(b.value?[o.value?I:A,m.value?M:j]:C.value!==o.value?[I,j]:[A,j]).includes(E.key)?1:-1,G=E.shiftKey?2:E.ctrlKey?1:0;O=O+ye*te*le.value[G]}else if(E.key===p)O=e.min;else if(E.key===$)O=e.max;else{const ue=E.key===w?1:-1;O=O-ue*te*(se>100?se/10:10)}return Math.max(e.min,Math.min(e.max,O))}function N(E){const O=re(E,e.modelValue);O!=null&&a("update:modelValue",O)}return W(()=>{const E=ne(C.value?100-e.position:e.position,"%");return s("div",{class:["v-slider-thumb",{"v-slider-thumb--focused":e.focused,"v-slider-thumb--pressed":e.focused&&k.value},e.class,i.value],style:[{"--v-slider-thumb-position":E,"--v-slider-thumb-size":ne(d.value)},e.style],role:"slider",tabindex:c.value?-1:0,"aria-label":e.name,"aria-valuemin":e.min,"aria-valuemax":e.max,"aria-valuenow":e.modelValue,"aria-readonly":!!h.value,"aria-orientation":f.value,onKeydown:h.value?void 0:N},[s("div",{class:["v-slider-thumb__surface",_.value,x.value],style:{...T.value}},null),je(s("div",{class:["v-slider-thumb__ripple",_.value],style:T.value},null),[[Ct("ripple"),e.ripple,null,{circle:!0,center:!0}]]),s(si,{origin:"bottom center"},{default:()=>{var O;return[je(s("div",{class:"v-slider-thumb__label-container"},[s("div",{class:["v-slider-thumb__label"]},[s("div",null,[((O=t["thumb-label"])==null?void 0:O.call(t,{modelValue:e.modelValue}))??e.modelValue.toFixed(u.value?S.value:1)])])]),[[Mt,v.value&&e.focused||v.value==="always"]])]}})])}),{}}}),x0=B({start:{type:Number,required:!0},stop:{type:Number,required:!0},...ie()},"VSliderTrack"),mc=R()({name:"VSliderTrack",props:x0(),emits:{},setup(e,n){let{slots:t}=n;const a=xe(Pi);if(!a)throw new Error("[Vuetify] v-slider-track must be inside v-slider or v-range-slider");const{color:l,parsedTicks:o,rounded:i,showTicks:r,tickSize:u,trackColor:c,trackFillColor:d,trackSize:v,vertical:f,min:m,max:b,indexFromEnd:h}=a,{roundedClasses:g}=Ue(i),{backgroundColorClasses:k,backgroundColorStyles:S}=Le(d),{backgroundColorClasses:C,backgroundColorStyles:P}=Le(c),x=y(()=>`inset-${f.value?"block":"inline"}-${h.value?"end":"start"}`),_=y(()=>f.value?"height":"width"),T=y(()=>({[x.value]:"0%",[_.value]:"100%"})),V=y(()=>e.stop-e.start),w=y(()=>({[x.value]:ne(e.start,"%"),[_.value]:ne(V.value,"%")})),$=y(()=>r.value?(f.value?o.value.slice().reverse():o.value).map((I,A)=>{var j;const M=I.value!==m.value&&I.value!==b.value?ne(I.position,"%"):void 0;return s("div",{key:I.value,class:["v-slider-track__tick",{"v-slider-track__tick--filled":I.position>=e.start&&I.position<=e.stop,"v-slider-track__tick--first":I.value===m.value,"v-slider-track__tick--last":I.value===b.value}],style:{[x.value]:M}},[(I.label||t["tick-label"])&&s("div",{class:"v-slider-track__tick-label"},[((j=t["tick-label"])==null?void 0:j.call(t,{tick:I,index:A}))??I.label])])}):[]);return W(()=>s("div",{class:["v-slider-track",g.value,e.class],style:[{"--v-slider-track-size":ne(v.value),"--v-slider-tick-size":ne(u.value)},e.style]},[s("div",{class:["v-slider-track__background",C.value,{"v-slider-track__background--opacity":!!l.value||!d.value}],style:{...T.value,...P.value}},null),s("div",{class:["v-slider-track__fill",k.value],style:{...w.value,...S.value}},null),r.value&&s("div",{class:["v-slider-track__ticks",{"v-slider-track__ticks--always-show":r.value==="always"}]},[$.value])])),{}}}),_0=B({...pa(),...dc(),...Qt(),modelValue:{type:[Number,String],default:0}},"VSlider"),xo=R()({name:"VSlider",props:_0(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,start:e=>!0,end:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=H(),{rtlClasses:o}=nt(),i=vc(e),r=de(e,"modelValue",void 0,_=>i.roundValue(_??i.min.value)),{min:u,max:c,mousePressed:d,roundValue:v,onSliderMousedown:f,onSliderTouchstart:m,trackContainerRef:b,position:h,hasLabels:g,readonly:k}=fc({props:e,steps:i,onSliderStart:()=>{a("start",r.value)},onSliderEnd:_=>{let{value:T}=_;const V=v(T);r.value=V,a("end",V)},onSliderMove:_=>{let{value:T}=_;return r.value=v(T)},getActiveThumb:()=>{var _;return(_=l.value)==null?void 0:_.$el}}),{isFocused:S,focus:C,blur:P}=Jt(e),x=y(()=>h(r.value));return W(()=>{const _=ct.filterProps(e),T=!!(e.label||t.label||t.prepend);return s(ct,z({class:["v-slider",{"v-slider--has-labels":!!t["tick-label"]||g.value,"v-slider--focused":S.value,"v-slider--pressed":d.value,"v-slider--disabled":e.disabled},o.value,e.class],style:e.style},_,{focused:S.value}),{...t,prepend:T?V=>{var w,$;return s(ae,null,[((w=t.label)==null?void 0:w.call(t,V))??(e.label?s(ea,{id:V.id.value,class:"v-slider__label",text:e.label},null):void 0),($=t.prepend)==null?void 0:$.call(t,V)])}:void 0,default:V=>{let{id:w,messagesId:$}=V;return s("div",{class:"v-slider__container",onMousedown:k.value?void 0:f,onTouchstartPassive:k.value?void 0:m},[s("input",{id:w.value,name:e.name||w.value,disabled:!!e.disabled,readonly:!!e.readonly,tabindex:"-1",value:r.value},null),s(mc,{ref:b,start:0,stop:x.value},{"tick-label":t["tick-label"]}),s(po,{ref:l,"aria-describedby":$.value,focused:S.value,min:u.value,max:c.value,modelValue:r.value,"onUpdate:modelValue":p=>r.value=p,position:x.value,elevation:e.elevation,onFocus:C,onBlur:P,ripple:e.ripple,name:e.name},{"thumb-label":t["thumb-label"]})])}})}),{}}}),P0=B({color:{type:Object},disabled:Boolean,hideAlpha:Boolean,...ie()},"VColorPickerPreview"),I0=pt({name:"VColorPickerPreview",props:P0(),emits:{"update:color":e=>!0},setup(e,n){let{emit:t}=n;const a=new AbortController;Ja(()=>a.abort());async function l(){if(!Gi)return;const o=new window.EyeDropper;try{const i=await o.open({signal:a.signal}),r=$s(i.sRGBHex);t("update:color",{...e.color??Wn,...r})}catch{}}return W(()=>{var o,i;return s("div",{class:["v-color-picker-preview",{"v-color-picker-preview--hide-alpha":e.hideAlpha},e.class],style:e.style},[Gi&&s("div",{class:"v-color-picker-preview__eye-dropper",key:"eyeDropper"},[s(Ae,{onClick:l,icon:"$eyeDropper",variant:"plain",density:"comfortable"},null)]),s("div",{class:"v-color-picker-preview__dot"},[s("div",{style:{background:_s(e.color??Wn)}},null)]),s("div",{class:"v-color-picker-preview__sliders"},[s(xo,{class:"v-color-picker-preview__track v-color-picker-preview__hue",modelValue:(o=e.color)==null?void 0:o.h,"onUpdate:modelValue":r=>t("update:color",{...e.color??Wn,h:r}),step:0,min:0,max:360,disabled:e.disabled,thumbSize:14,trackSize:8,trackFillColor:"white",hideDetails:!0},null),!e.hideAlpha&&s(xo,{class:"v-color-picker-preview__track v-color-picker-preview__alpha",modelValue:((i=e.color)==null?void 0:i.a)??1,"onUpdate:modelValue":r=>t("update:color",{...e.color??Wn,a:r}),step:1/256,min:0,max:1,disabled:e.disabled,thumbSize:14,trackSize:8,trackFillColor:"white",hideDetails:!0},null)])])}),{}}}),$0={base:"#f44336",lighten5:"#ffebee",lighten4:"#ffcdd2",lighten3:"#ef9a9a",lighten2:"#e57373",lighten1:"#ef5350",darken1:"#e53935",darken2:"#d32f2f",darken3:"#c62828",darken4:"#b71c1c",accent1:"#ff8a80",accent2:"#ff5252",accent3:"#ff1744",accent4:"#d50000"},T0={base:"#e91e63",lighten5:"#fce4ec",lighten4:"#f8bbd0",lighten3:"#f48fb1",lighten2:"#f06292",lighten1:"#ec407a",darken1:"#d81b60",darken2:"#c2185b",darken3:"#ad1457",darken4:"#880e4f",accent1:"#ff80ab",accent2:"#ff4081",accent3:"#f50057",accent4:"#c51162"},A0={base:"#9c27b0",lighten5:"#f3e5f5",lighten4:"#e1bee7",lighten3:"#ce93d8",lighten2:"#ba68c8",lighten1:"#ab47bc",darken1:"#8e24aa",darken2:"#7b1fa2",darken3:"#6a1b9a",darken4:"#4a148c",accent1:"#ea80fc",accent2:"#e040fb",accent3:"#d500f9",accent4:"#aa00ff"},B0={base:"#673ab7",lighten5:"#ede7f6",lighten4:"#d1c4e9",lighten3:"#b39ddb",lighten2:"#9575cd",lighten1:"#7e57c2",darken1:"#5e35b1",darken2:"#512da8",darken3:"#4527a0",darken4:"#311b92",accent1:"#b388ff",accent2:"#7c4dff",accent3:"#651fff",accent4:"#6200ea"},D0={base:"#3f51b5",lighten5:"#e8eaf6",lighten4:"#c5cae9",lighten3:"#9fa8da",lighten2:"#7986cb",lighten1:"#5c6bc0",darken1:"#3949ab",darken2:"#303f9f",darken3:"#283593",darken4:"#1a237e",accent1:"#8c9eff",accent2:"#536dfe",accent3:"#3d5afe",accent4:"#304ffe"},L0={base:"#2196f3",lighten5:"#e3f2fd",lighten4:"#bbdefb",lighten3:"#90caf9",lighten2:"#64b5f6",lighten1:"#42a5f5",darken1:"#1e88e5",darken2:"#1976d2",darken3:"#1565c0",darken4:"#0d47a1",accent1:"#82b1ff",accent2:"#448aff",accent3:"#2979ff",accent4:"#2962ff"},M0={base:"#03a9f4",lighten5:"#e1f5fe",lighten4:"#b3e5fc",lighten3:"#81d4fa",lighten2:"#4fc3f7",lighten1:"#29b6f6",darken1:"#039be5",darken2:"#0288d1",darken3:"#0277bd",darken4:"#01579b",accent1:"#80d8ff",accent2:"#40c4ff",accent3:"#00b0ff",accent4:"#0091ea"},E0={base:"#00bcd4",lighten5:"#e0f7fa",lighten4:"#b2ebf2",lighten3:"#80deea",lighten2:"#4dd0e1",lighten1:"#26c6da",darken1:"#00acc1",darken2:"#0097a7",darken3:"#00838f",darken4:"#006064",accent1:"#84ffff",accent2:"#18ffff",accent3:"#00e5ff",accent4:"#00b8d4"},F0={base:"#009688",lighten5:"#e0f2f1",lighten4:"#b2dfdb",lighten3:"#80cbc4",lighten2:"#4db6ac",lighten1:"#26a69a",darken1:"#00897b",darken2:"#00796b",darken3:"#00695c",darken4:"#004d40",accent1:"#a7ffeb",accent2:"#64ffda",accent3:"#1de9b6",accent4:"#00bfa5"},O0={base:"#4caf50",lighten5:"#e8f5e9",lighten4:"#c8e6c9",lighten3:"#a5d6a7",lighten2:"#81c784",lighten1:"#66bb6a",darken1:"#43a047",darken2:"#388e3c",darken3:"#2e7d32",darken4:"#1b5e20",accent1:"#b9f6ca",accent2:"#69f0ae",accent3:"#00e676",accent4:"#00c853"},N0={base:"#8bc34a",lighten5:"#f1f8e9",lighten4:"#dcedc8",lighten3:"#c5e1a5",lighten2:"#aed581",lighten1:"#9ccc65",darken1:"#7cb342",darken2:"#689f38",darken3:"#558b2f",darken4:"#33691e",accent1:"#ccff90",accent2:"#b2ff59",accent3:"#76ff03",accent4:"#64dd17"},R0={base:"#cddc39",lighten5:"#f9fbe7",lighten4:"#f0f4c3",lighten3:"#e6ee9c",lighten2:"#dce775",lighten1:"#d4e157",darken1:"#c0ca33",darken2:"#afb42b",darken3:"#9e9d24",darken4:"#827717",accent1:"#f4ff81",accent2:"#eeff41",accent3:"#c6ff00",accent4:"#aeea00"},H0={base:"#ffeb3b",lighten5:"#fffde7",lighten4:"#fff9c4",lighten3:"#fff59d",lighten2:"#fff176",lighten1:"#ffee58",darken1:"#fdd835",darken2:"#fbc02d",darken3:"#f9a825",darken4:"#f57f17",accent1:"#ffff8d",accent2:"#ffff00",accent3:"#ffea00",accent4:"#ffd600"},z0={base:"#ffc107",lighten5:"#fff8e1",lighten4:"#ffecb3",lighten3:"#ffe082",lighten2:"#ffd54f",lighten1:"#ffca28",darken1:"#ffb300",darken2:"#ffa000",darken3:"#ff8f00",darken4:"#ff6f00",accent1:"#ffe57f",accent2:"#ffd740",accent3:"#ffc400",accent4:"#ffab00"},W0={base:"#ff9800",lighten5:"#fff3e0",lighten4:"#ffe0b2",lighten3:"#ffcc80",lighten2:"#ffb74d",lighten1:"#ffa726",darken1:"#fb8c00",darken2:"#f57c00",darken3:"#ef6c00",darken4:"#e65100",accent1:"#ffd180",accent2:"#ffab40",accent3:"#ff9100",accent4:"#ff6d00"},j0={base:"#ff5722",lighten5:"#fbe9e7",lighten4:"#ffccbc",lighten3:"#ffab91",lighten2:"#ff8a65",lighten1:"#ff7043",darken1:"#f4511e",darken2:"#e64a19",darken3:"#d84315",darken4:"#bf360c",accent1:"#ff9e80",accent2:"#ff6e40",accent3:"#ff3d00",accent4:"#dd2c00"},G0={base:"#795548",lighten5:"#efebe9",lighten4:"#d7ccc8",lighten3:"#bcaaa4",lighten2:"#a1887f",lighten1:"#8d6e63",darken1:"#6d4c41",darken2:"#5d4037",darken3:"#4e342e",darken4:"#3e2723"},Y0={base:"#607d8b",lighten5:"#eceff1",lighten4:"#cfd8dc",lighten3:"#b0bec5",lighten2:"#90a4ae",lighten1:"#78909c",darken1:"#546e7a",darken2:"#455a64",darken3:"#37474f",darken4:"#263238"},U0={base:"#9e9e9e",lighten5:"#fafafa",lighten4:"#f5f5f5",lighten3:"#eeeeee",lighten2:"#e0e0e0",lighten1:"#bdbdbd",darken1:"#757575",darken2:"#616161",darken3:"#424242",darken4:"#212121"},K0={black:"#000000",white:"#ffffff",transparent:"#ffffff00"},q0={red:$0,pink:T0,purple:A0,deepPurple:B0,indigo:D0,blue:L0,lightBlue:M0,cyan:E0,teal:F0,green:O0,lightGreen:N0,lime:R0,yellow:H0,amber:z0,orange:W0,deepOrange:j0,brown:G0,blueGrey:Y0,grey:U0,shades:K0},X0=B({swatches:{type:Array,default:()=>Z0(q0)},disabled:Boolean,color:Object,maxHeight:[Number,String],...ie()},"VColorPickerSwatches");function Z0(e){return Object.keys(e).map(n=>{const t=e[n];return t.base?[t.base,t.darken4,t.darken3,t.darken2,t.darken1,t.lighten1,t.lighten2,t.lighten3,t.lighten4,t.lighten5]:[t.black,t.white,t.transparent]})}const J0=pt({name:"VColorPickerSwatches",props:X0(),emits:{"update:color":e=>!0},setup(e,n){let{emit:t}=n;return W(()=>s("div",{class:["v-color-picker-swatches",e.class],style:[{maxHeight:ne(e.maxHeight)},e.style]},[s("div",null,[e.swatches.map(a=>s("div",{class:"v-color-picker-swatches__swatch"},[a.map(l=>{const o=Pt(l),i=rl(o),r=xs(o);return s("div",{class:"v-color-picker-swatches__color",onClick:()=>i&&t("update:color",i)},[s("div",{style:{background:r}},[e.color&&Ht(e.color,i)?s(Be,{size:"x-small",icon:"$success",color:ny(l,"#FFFFFF")>2?"white":"black"},null):void 0])])})]))])])),{}}}),xl=B({color:String,...wt(),...ie(),...Qe(),...at(),...Xt(),...Jn(),...ze(),...Ve(),...Pe()},"VSheet"),Cn=R()({name:"VSheet",props:xl(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{backgroundColorClasses:l,backgroundColorStyles:o}=Le(F(e,"color")),{borderClasses:i}=_t(e),{dimensionStyles:r}=et(e),{elevationClasses:u}=st(e),{locationStyles:c}=En(e),{positionClasses:d}=Qn(e),{roundedClasses:v}=Ue(e);return W(()=>s(e.tag,{class:["v-sheet",a.value,l.value,i.value,u.value,d.value,v.value,e.class],style:[o.value,r.value,c.value,e.style]},t)),{}}}),Q0=B({canvasHeight:{type:[String,Number],default:150},disabled:Boolean,dotSize:{type:[Number,String],default:10},hideCanvas:Boolean,hideSliders:Boolean,hideInputs:Boolean,mode:{type:String,default:"rgba",validator:e=>Object.keys(yn).includes(e)},modes:{type:Array,default:()=>Object.keys(yn),validator:e=>Array.isArray(e)&&e.every(n=>Object.keys(yn).includes(n))},showSwatches:Boolean,swatches:Array,swatchesMaxHeight:{type:[Number,String],default:150},modelValue:{type:[Object,String]},...Je(xl({width:300}),["height","location","minHeight","maxHeight","minWidth","maxWidth"])},"VColorPicker"),ew=pt({name:"VColorPicker",props:Q0(),emits:{"update:modelValue":e=>!0,"update:mode":e=>!0},setup(e){const n=de(e,"mode"),t=H(null),a=de(e,"modelValue",void 0,u=>{if(u==null||u==="")return null;let c;try{c=rl(Pt(u))}catch{return null}return c},u=>u?h0(u,e.modelValue):null),l=y(()=>a.value?{...a.value,h:t.value??a.value.h}:null),{rtlClasses:o}=nt();let i=!0;Q(a,u=>{if(!i){i=!0;return}u&&(t.value=u.h)},{immediate:!0});const r=u=>{i=!1,t.value=u.h,a.value=u};return No(()=>{e.modes.includes(n.value)||(n.value=e.modes[0])}),Ge({VSlider:{color:void 0,trackColor:void 0,trackFillColor:void 0}}),W(()=>{const u=Cn.filterProps(e);return s(Cn,z({rounded:e.rounded,elevation:e.elevation,theme:e.theme,class:["v-color-picker",o.value,e.class],style:[{"--v-color-picker-color-hsv":_s({...l.value??Wn,a:1})},e.style]},u,{maxWidth:e.width}),{default:()=>[!e.hideCanvas&&s(m0,{key:"canvas",color:l.value,"onUpdate:color":r,disabled:e.disabled,dotSize:e.dotSize,width:e.width,height:e.canvasHeight},null),(!e.hideSliders||!e.hideInputs)&&s("div",{key:"controls",class:"v-color-picker__controls"},[!e.hideSliders&&s(I0,{key:"preview",color:l.value,"onUpdate:color":r,hideAlpha:!n.value.endsWith("a"),disabled:e.disabled},null),!e.hideInputs&&s(V0,{key:"edit",modes:e.modes,mode:n.value,"onUpdate:mode":c=>n.value=c,color:l.value,"onUpdate:color":r,disabled:e.disabled},null)]),e.showSwatches&&s(J0,{key:"swatches",color:l.value,"onUpdate:color":r,maxHeight:e.swatchesMaxHeight,swatches:e.swatches,disabled:e.disabled},null)]})}),{}}});function tw(e,n,t){if(n==null)return e;if(Array.isArray(n))throw new Error("Multiple matches is not implemented");return typeof n=="number"&&~n?s(ae,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,n)]),s("span",{class:"v-combobox__mask"},[e.substr(n,t)]),s("span",{class:"v-combobox__unmask"},[e.substr(n+t)])]):e}const nw=B({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Ia({filterKeys:["title"]}),...pi({hideNoData:!0,returnObject:!0}),...Je(wl({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Et({transition:!1})},"VCombobox"),aw=R()({name:"VCombobox",props:nw(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,n){var Ce;let{emit:t,slots:a}=n;const{t:l}=qe(),o=H(),i=ee(!1),r=ee(!0),u=ee(!1),c=H(),d=H(),v=de(e,"menu"),f=y({get:()=>v.value,set:q=>{var oe;v.value&&!q&&((oe=c.value)!=null&&oe.ΨopenChildren.size)||(v.value=q)}}),m=ee(-1);let b=!1;const h=y(()=>{var q;return(q=o.value)==null?void 0:q.color}),g=y(()=>f.value?e.closeText:e.openText),{items:k,transformIn:S,transformOut:C}=yi(e),{textColorClasses:P,textColorStyles:x}=ut(h),_=de(e,"modelValue",[],q=>S(We(q)),q=>{const oe=C(q);return e.multiple?oe:oe[0]??null}),T=bl(e),V=y(()=>!!(e.chips||a.chip)),w=y(()=>V.value||!!a.selection),$=ee(!e.multiple&&!w.value?((Ce=_.value[0])==null?void 0:Ce.title)??"":""),p=y({get:()=>$.value,set:q=>{var oe;if($.value=q??"",!e.multiple&&!w.value&&(_.value=[en(e,q)]),q&&e.multiple&&((oe=e.delimiters)!=null&&oe.length)){const ke=q.split(new RegExp(`(?:${e.delimiters.join("|")})+`));ke.length>1&&(ke.forEach(he=>{he=he.trim(),he&&me(en(e,he))}),$.value="")}q||(m.value=-1),r.value=!q}}),I=y(()=>typeof e.counterValue=="function"?e.counterValue(_.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?_.value.length:p.value.length);Q($,q=>{b?Te(()=>b=!1):i.value&&!f.value&&(f.value=!0),t("update:search",q)}),Q(_,q=>{var oe;!e.multiple&&!w.value&&($.value=((oe=q[0])==null?void 0:oe.title)??"")});const{filteredItems:A,getMatches:M}=$a(e,k,()=>r.value?"":p.value),j=y(()=>e.hideSelected?A.value.filter(q=>!_.value.some(oe=>oe.value===q.value)):A.value),Y=y(()=>_.value.map(q=>q.value)),le=y(()=>{var oe;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&p.value===((oe=j.value[0])==null?void 0:oe.title))&&j.value.length>0&&!r.value&&!u.value}),re=y(()=>e.hideNoData&&!j.value.length||T.isReadonly.value||T.isDisabled.value),N=H(),E=Ci(N,o);function O(q){b=!0,e.openOnClear&&(f.value=!0)}function te(){re.value||(f.value=!0)}function se(q){re.value||(i.value&&(q.preventDefault(),q.stopPropagation()),f.value=!f.value)}function ue(q){var oe;Ga(q)&&((oe=o.value)==null||oe.focus())}function ye(q){var he;if(Ph(q)||T.isReadonly.value)return;const oe=o.value.selectionStart,ke=_.value.length;if((m.value>-1||["Enter","ArrowDown","ArrowUp"].includes(q.key))&&q.preventDefault(),["Enter","ArrowDown"].includes(q.key)&&(f.value=!0),["Escape"].includes(q.key)&&(f.value=!1),["Enter","Escape","Tab"].includes(q.key)&&(le.value&&["Enter","Tab"].includes(q.key)&&!_.value.some(we=>{let{value:Ee}=we;return Ee===j.value[0].value})&&me(A.value[0]),r.value=!0),q.key==="ArrowDown"&&le.value&&((he=N.value)==null||he.focus("next")),q.key==="Enter"&&p.value&&(me(en(e,p.value)),w.value&&($.value="")),["Backspace","Delete"].includes(q.key)){if(!e.multiple&&w.value&&_.value.length>0&&!p.value)return me(_.value[0],!1);if(~m.value){const we=m.value;me(_.value[m.value],!1),m.value=we>=ke-1?ke-2:we}else q.key==="Backspace"&&!p.value&&(m.value=ke-1)}if(e.multiple){if(q.key==="ArrowLeft"){if(m.value<0&&oe>0)return;const we=m.value>-1?m.value-1:ke-1;_.value[we]?m.value=we:(m.value=-1,o.value.setSelectionRange(p.value.length,p.value.length))}if(q.key==="ArrowRight"){if(m.value<0)return;const we=m.value+1;_.value[we]?m.value=we:(m.value=-1,o.value.setSelectionRange(0,0))}}}function G(){var q;e.eager&&((q=d.value)==null||q.calculateVisibleItems())}function ce(){var q;i.value&&(r.value=!0,(q=o.value)==null||q.focus())}function me(q){let oe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!q||q.props.disabled))if(e.multiple){const ke=_.value.findIndex(we=>e.valueComparator(we.value,q.value)),he=oe??!~ke;if(~ke){const we=he?[..._.value,q]:[..._.value];we.splice(ke,1),_.value=we}else he&&(_.value=[..._.value,q]);e.clearOnSelect&&(p.value="")}else{const ke=oe!==!1;_.value=ke?[q]:[],$.value=ke&&!w.value?q.title:"",Te(()=>{f.value=!1,r.value=!0})}}function Me(q){i.value=!0,setTimeout(()=>{u.value=!0})}function Ie(q){u.value=!1}function Z(q){(q==null||q===""&&!e.multiple&&!w.value)&&(_.value=[])}return Q(i,(q,oe)=>{if(!(q||q===oe)&&(m.value=-1,f.value=!1,p.value)){if(e.multiple){me(en(e,p.value));return}if(!w.value)return;_.value.some(ke=>{let{title:he}=ke;return he===p.value})?$.value="":me(en(e,p.value))}}),Q(f,()=>{if(!e.hideSelected&&f.value&&_.value.length){const q=j.value.findIndex(oe=>_.value.some(ke=>e.valueComparator(ke.value,oe.value)));$e&&window.requestAnimationFrame(()=>{var oe;q>=0&&((oe=d.value)==null||oe.scrollToIndex(q))})}}),Q(()=>e.items,(q,oe)=>{f.value||i.value&&!oe.length&&q.length&&(f.value=!0)}),W(()=>{const q=!!(!e.hideNoData||j.value.length||a["prepend-item"]||a["append-item"]||a["no-data"]),oe=_.value.length>0,ke=Sn.filterProps(e);return s(Sn,z({ref:o},ke,{modelValue:p.value,"onUpdate:modelValue":[he=>p.value=he,Z],focused:i.value,"onUpdate:focused":he=>i.value=he,validationValue:_.externalValue,counterValue:I.value,dirty:oe,class:["v-combobox",{"v-combobox--active-menu":f.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!w.value,"v-combobox--selecting-index":m.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:T.isReadonly.value,placeholder:oe?void 0:e.placeholder,"onClick:clear":O,"onMousedown:control":te,onKeydown:ye}),{...a,default:()=>s(ae,null,[s(qn,z({ref:c,modelValue:f.value,"onUpdate:modelValue":he=>f.value=he,activator:"parent",contentClass:"v-combobox__content",disabled:re.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:G,onAfterLeave:ce},e.menuProps),{default:()=>[q&&s(kl,z({ref:N,selected:Y.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:he=>he.preventDefault(),onKeydown:ue,onFocusin:Me,onFocusout:Ie,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},E,e.listProps),{default:()=>{var he,we,Ee;return[(he=a["prepend-item"])==null?void 0:he.call(a),!j.value.length&&!e.hideNoData&&(((we=a["no-data"])==null?void 0:we.call(a))??s(Kt,{title:l(e.noDataText)},null)),s(Vl,{ref:d,renderless:!0,items:j.value},{default:ht=>{var un;let{item:Fe,index:Ft,itemRef:dt}=ht;const sn=z(Fe.props,{ref:dt,key:Ft,active:le.value&&Ft===0?!0:void 0,onClick:()=>me(Fe,null)});return((un=a.item)==null?void 0:un.call(a,{item:Fe,index:Ft,props:sn}))??s(Kt,z(sn,{role:"option"}),{prepend:Ta=>{let{isSelected:Aa}=Ta;return s(ae,null,[e.multiple&&!e.hideSelected?s(Ut,{key:Fe.value,modelValue:Aa,ripple:!1,tabindex:"-1"},null):void 0,Fe.props.prependAvatar&&s(It,{image:Fe.props.prependAvatar},null),Fe.props.prependIcon&&s(Be,{icon:Fe.props.prependIcon},null)])},title:()=>{var Ta,Aa;return r.value?Fe.title:tw(Fe.title,(Ta=M(Fe))==null?void 0:Ta.title,((Aa=p.value)==null?void 0:Aa.length)??0)}})}}),(Ee=a["append-item"])==null?void 0:Ee.call(a)]}})]}),_.value.map((he,we)=>{function Ee(dt){dt.stopPropagation(),dt.preventDefault(),me(he,!1)}const ht={"onClick:close":Ee,onKeydown(dt){dt.key!=="Enter"&&dt.key!==" "||(dt.preventDefault(),dt.stopPropagation(),Ee(dt))},onMousedown(dt){dt.preventDefault(),dt.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},Fe=V.value?!!a.chip:!!a.selection,Ft=Fe?il(V.value?a.chip({item:he,index:we,props:ht}):a.selection({item:he,index:we})):void 0;if(!(Fe&&!Ft))return s("div",{key:he.value,class:["v-combobox__selection",we===m.value&&["v-combobox__selection--selected",P.value]],style:we===m.value?x.value:{}},[V.value?a.chip?s(pe,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:he.title}}},{default:()=>[Ft]}):s(ta,z({key:"chip",closable:e.closableChips,size:"small",text:he.title,disabled:he.props.disabled},ht),null):Ft??s("span",{class:"v-combobox__selection-text"},[he.title,e.multiple&&we<_.value.length-1&&s("span",{class:"v-combobox__selection-comma"},[bt(",")])])])})]),"append-inner":function(){var ht;for(var he=arguments.length,we=new Array(he),Ee=0;Ee!0,save:e=>!0,"update:modelValue":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=de(e,"modelValue"),o=H();He(()=>{o.value=structuredClone(Ze(l.value))});const{t:i}=qe(),r=y(()=>Ht(l.value,o.value));function u(){l.value=o.value,t("save",o.value)}function c(){o.value=structuredClone(Ze(l.value)),t("cancel")}function d(f){return s(ae,null,[s(Ae,z({disabled:r.value,variant:"text",color:e.color,onClick:c,text:i(e.cancelText)},f),null),s(Ae,z({disabled:r.value,variant:"text",color:e.color,onClick:u,text:i(e.okText)},f),null)])}let v=!1;return W(()=>{var f;return s(ae,null,[(f=a.default)==null?void 0:f.call(a,{model:o,save:u,cancel:c,isPristine:r.value,get actions(){return v=!0,d}}),!v&&d()])}),{save:u,cancel:c,isPristine:r}}}),gc=B({expandOnClick:Boolean,showExpand:Boolean,expanded:{type:Array,default:()=>[]}},"DataTable-expand"),hc=Symbol.for("vuetify:datatable:expanded");function _l(e){const n=F(e,"expandOnClick"),t=de(e,"expanded",e.expanded,r=>new Set(r),r=>[...r.values()]);function a(r,u){const c=new Set(t.value);u?c.add(r.value):c.delete(r.value),t.value=c}function l(r){return t.value.has(r.value)}function o(r){a(r,!l(r))}const i={expand:a,expanded:t,expandOnClick:n,isExpanded:l,toggleExpand:o};return Re(hc,i),i}function yc(){const e=xe(hc);if(!e)throw new Error("foo");return e}const Ii=B({groupBy:{type:Array,default:()=>[]}},"DataTable-group"),bc=Symbol.for("vuetify:data-table-group");function $i(e){return{groupBy:de(e,"groupBy")}}function Pl(e){const{disableSort:n,groupBy:t,sortBy:a}=e,l=H(new Set),o=y(()=>t.value.map(d=>({...d,order:d.order??!1})).concat(n!=null&&n.value?[]:a.value));function i(d){return l.value.has(d.id)}function r(d){const v=new Set(l.value);i(d)?v.delete(d.id):v.add(d.id),l.value=v}function u(d){function v(f){const m=[];for(const b of f.items)"type"in b&&b.type==="group"?m.push(...v(b)):m.push(b);return m}return v({items:d})}const c={sortByWithGroups:o,toggleGroup:r,opened:l,groupBy:t,extractRows:u,isGroupOpen:i};return Re(bc,c),c}function kc(){const e=xe(bc);if(!e)throw new Error("Missing group!");return e}function iw(e,n){if(!e.length)return[];const t=new Map;for(const a of e){const l=kn(a.raw,n);t.has(l)||t.set(l,[]),t.get(l).push(a)}return t}function Sc(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"root";if(!n.length)return[];const l=iw(e,n[0]),o=[],i=n.slice(1);return l.forEach((r,u)=>{const c=n[0],d=`${a}_${c}_${u}`;o.push({depth:t,id:d,key:c,value:u,items:i.length?Sc(r,i,t+1,d):r,type:"group"})}),o}function wc(e,n){const t=[];for(const a of e)"type"in a&&a.type==="group"?(a.value!=null&&t.push(a),(n.has(a.id)||a.value==null)&&t.push(...wc(a.items,n))):t.push(a);return t}function Il(e,n,t){return{flatItems:y(()=>{if(!n.value.length)return e.value;const l=Sc(e.value,n.value.map(o=>o.key));return wc(l,t.value)})}}function $l(e){let{page:n,itemsPerPage:t,sortBy:a,groupBy:l,search:o}=e;const i=Ye("VDataTable"),r=y(()=>({page:n.value,itemsPerPage:t.value,sortBy:a.value,groupBy:l.value,search:o.value}));let u=null;Q(r,()=>{Ht(u,r.value)||(u&&u.search!==r.value.search&&(n.value=1),i.emit("update:options",r.value),u=r.value)},{deep:!0,immediate:!0})}const Ti=B({page:{type:[Number,String],default:1},itemsPerPage:{type:[Number,String],default:10}},"DataTable-paginate"),Vc=Symbol.for("vuetify:data-table-pagination");function Ai(e){const n=de(e,"page",void 0,a=>+(a??1)),t=de(e,"itemsPerPage",void 0,a=>+(a??10));return{page:n,itemsPerPage:t}}function Bi(e){const{page:n,itemsPerPage:t,itemsLength:a}=e,l=y(()=>t.value===-1?0:t.value*(n.value-1)),o=y(()=>t.value===-1?a.value:Math.min(a.value,l.value+t.value)),i=y(()=>t.value===-1||a.value===0?1:Math.ceil(a.value/t.value));Q([n,i],()=>{n.value>i.value&&(n.value=i.value)});function r(f){t.value=f,n.value=1}function u(){n.value=Xe(n.value+1,1,i.value)}function c(){n.value=Xe(n.value-1,1,i.value)}function d(f){n.value=Xe(f,1,i.value)}const v={page:n,itemsPerPage:t,startIndex:l,stopIndex:o,pageCount:i,itemsLength:a,nextPage:u,prevPage:c,setPage:d,setItemsPerPage:r};return Re(Vc,v),v}function rw(){const e=xe(Vc);if(!e)throw new Error("Missing pagination!");return e}function Cc(e){const n=Ye("usePaginatedItems"),{items:t,startIndex:a,stopIndex:l,itemsPerPage:o}=e,i=y(()=>o.value<=0?t.value:t.value.slice(a.value,l.value));return Q(i,r=>{n.emit("update:currentItems",r)}),{paginatedItems:i}}const sw={showSelectAll:!1,allSelected:()=>[],select:e=>{var a;let{items:n,value:t}=e;return new Set(t?[(a=n[0])==null?void 0:a.value]:[])},selectAll:e=>{let{selected:n}=e;return n}},pc={showSelectAll:!0,allSelected:e=>{let{currentPage:n}=e;return n},select:e=>{let{items:n,value:t,selected:a}=e;for(const l of n)t?a.add(l.value):a.delete(l.value);return a},selectAll:e=>{let{value:n,currentPage:t,selected:a}=e;return pc.select({items:t,value:n,selected:a})}},xc={showSelectAll:!0,allSelected:e=>{let{allItems:n}=e;return n},select:e=>{let{items:n,value:t,selected:a}=e;for(const l of n)t?a.add(l.value):a.delete(l.value);return a},selectAll:e=>{let{value:n,allItems:t,selected:a}=e;return xc.select({items:t,value:n,selected:a})}},_c=B({showSelect:Boolean,selectStrategy:{type:[String,Object],default:"page"},modelValue:{type:Array,default:()=>[]},valueComparator:{type:Function,default:Ht}},"DataTable-select"),Pc=Symbol.for("vuetify:data-table-selection");function Tl(e,n){let{allItems:t,currentPage:a}=n;const l=de(e,"modelValue",e.modelValue,k=>new Set(We(k).map(S=>{var C;return((C=t.value.find(P=>e.valueComparator(S,P.value)))==null?void 0:C.value)??S})),k=>[...k.values()]),o=y(()=>t.value.filter(k=>k.selectable)),i=y(()=>a.value.filter(k=>k.selectable)),r=y(()=>{if(typeof e.selectStrategy=="object")return e.selectStrategy;switch(e.selectStrategy){case"single":return sw;case"all":return xc;case"page":default:return pc}});function u(k){return We(k).every(S=>l.value.has(S.value))}function c(k){return We(k).some(S=>l.value.has(S.value))}function d(k,S){const C=r.value.select({items:k,value:S,selected:new Set(l.value)});l.value=C}function v(k){d([k],!u([k]))}function f(k){const S=r.value.selectAll({value:k,allItems:o.value,currentPage:i.value,selected:new Set(l.value)});l.value=S}const m=y(()=>l.value.size>0),b=y(()=>{const k=r.value.allSelected({allItems:o.value,currentPage:i.value});return!!k.length&&u(k)}),h=y(()=>r.value.showSelectAll),g={toggleSelect:v,select:d,selectAll:f,isSelected:u,isSomeSelected:c,someSelected:m,allSelected:b,showSelectAll:h};return Re(Pc,g),g}function Al(){const e=xe(Pc);if(!e)throw new Error("Missing selection!");return e}const Ic=B({sortBy:{type:Array,default:()=>[]},customKeySort:Object,multiSort:Boolean,mustSort:Boolean},"DataTable-sort"),$c=Symbol.for("vuetify:data-table-sort");function Bl(e){const n=de(e,"sortBy"),t=F(e,"mustSort"),a=F(e,"multiSort");return{sortBy:n,mustSort:t,multiSort:a}}function Dl(e){const{sortBy:n,mustSort:t,multiSort:a,page:l}=e,o=u=>{if(u.key==null)return;let c=n.value.map(v=>({...v}))??[];const d=c.find(v=>v.key===u.key);d?d.order==="desc"?t.value?d.order="asc":c=c.filter(v=>v.key!==u.key):d.order="desc":a.value?c=[...c,{key:u.key,order:"asc"}]:c=[{key:u.key,order:"asc"}],n.value=c,l&&(l.value=1)};function i(u){return!!n.value.find(c=>c.key===u.key)}const r={sortBy:n,toggleSort:o,isSorted:i};return Re($c,r),r}function Tc(){const e=xe($c);if(!e)throw new Error("Missing sort!");return e}function Di(e,n,t,a){const l=qe();return{sortedItems:y(()=>{var i,r;return t.value.length?uw(n.value,t.value,l.current.value,{transform:a==null?void 0:a.transform,sortFunctions:{...e.customKeySort,...(i=a==null?void 0:a.sortFunctions)==null?void 0:i.value},sortRawFunctions:(r=a==null?void 0:a.sortRawFunctions)==null?void 0:r.value}):n.value})}}function uw(e,n,t,a){const l=new Intl.Collator(t,{sensitivity:"accent",usage:"sort"});return e.map(i=>[i,a!=null&&a.transform?a.transform(i):i]).sort((i,r)=>{var u,c;for(let d=0;dS!=null?S.toString().toLocaleLowerCase():S),b!==h)return Da(b)&&Da(h)?0:Da(b)?-1:Da(h)?1:!isNaN(b)&&!isNaN(h)?Number(b)-Number(h):l.compare(b,h)}}return 0}).map(i=>{let[r]=i;return r})}const cw=B({items:{type:Array,default:()=>[]},itemValue:{type:[String,Array,Function],default:"id"},itemSelectable:{type:[String,Array,Function],default:null},returnObject:Boolean},"DataIterator-items");function dw(e,n){const t=e.returnObject?n:tt(n,e.itemValue),a=tt(n,e.itemSelectable,!0);return{type:"item",value:t,selectable:a,raw:n}}function vw(e,n){const t=[];for(const a of n)t.push(dw(e,a));return t}function fw(e){return{items:y(()=>vw(e,e.items))}}const mw=B({search:String,loading:Boolean,...ie(),...cw(),..._c(),...Ic(),...Ti({itemsPerPage:5}),...gc(),...Ii(),...Ia(),...Ve(),...Et({transition:{component:ua,hideOnLeave:!0}})},"VDataIterator"),gw=R()({name:"VDataIterator",props:mw(),emits:{"update:modelValue":e=>!0,"update:groupBy":e=>!0,"update:page":e=>!0,"update:itemsPerPage":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:expanded":e=>!0,"update:currentItems":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"groupBy"),l=F(e,"search"),{items:o}=fw(e),{filteredItems:i}=$a(e,o,l,{transform:O=>O.raw}),{sortBy:r,multiSort:u,mustSort:c}=Bl(e),{page:d,itemsPerPage:v}=Ai(e),{toggleSort:f}=Dl({sortBy:r,multiSort:u,mustSort:c,page:d}),{sortByWithGroups:m,opened:b,extractRows:h,isGroupOpen:g,toggleGroup:k}=Pl({groupBy:a,sortBy:r}),{sortedItems:S}=Di(e,i,m,{transform:O=>O.raw}),{flatItems:C}=Il(S,a,b),P=y(()=>C.value.length),{startIndex:x,stopIndex:_,pageCount:T,prevPage:V,nextPage:w,setItemsPerPage:$,setPage:p}=Bi({page:d,itemsPerPage:v,itemsLength:P}),{paginatedItems:I}=Cc({items:C,startIndex:x,stopIndex:_,itemsPerPage:v}),A=y(()=>h(I.value)),{isSelected:M,select:j,selectAll:Y,toggleSelect:le}=Tl(e,{allItems:o,currentPage:A}),{isExpanded:re,toggleExpand:N}=_l(e);$l({page:d,itemsPerPage:v,sortBy:r,groupBy:a,search:l});const E=y(()=>({page:d.value,itemsPerPage:v.value,sortBy:r.value,pageCount:T.value,toggleSort:f,prevPage:V,nextPage:w,setPage:p,setItemsPerPage:$,isSelected:M,select:j,selectAll:Y,toggleSelect:le,isExpanded:re,toggleExpand:N,isGroupOpen:g,toggleGroup:k,items:A.value,groupedItems:I.value}));return W(()=>s(e.tag,{class:["v-data-iterator",{"v-data-iterator--loading":e.loading},e.class],style:e.style},{default:()=>{var O,te;return[(O=t.header)==null?void 0:O.call(t,E.value),s(ft,{transition:e.transition},{default:()=>{var se,ue;return[e.loading?s(wa,{key:"loader",name:"v-data-iterator",active:!0},{default:ye=>{var G;return(G=t.loader)==null?void 0:G.call(t,ye)}}):s("div",{key:"items"},[I.value.length?(ue=t.default)==null?void 0:ue.call(t,E.value):(se=t["no-data"])==null?void 0:se.call(t)])]}}),(te=t.footer)==null?void 0:te.call(t,E.value)]}})),{}}});function hw(){const e=H([]);Nd(()=>e.value=[]);function n(t,a){e.value[a]=t}return{refs:e,updateRef:n}}const yw=B({activeColor:String,start:{type:[Number,String],default:1},modelValue:{type:Number,default:e=>e.start},disabled:Boolean,length:{type:[Number,String],default:1,validator:e=>e%1===0},totalVisible:[Number,String],firstIcon:{type:ve,default:"$first"},prevIcon:{type:ve,default:"$prev"},nextIcon:{type:ve,default:"$next"},lastIcon:{type:ve,default:"$last"},ariaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.root"},pageAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.page"},currentPageAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.currentPage"},firstAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.first"},previousAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.previous"},nextAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.next"},lastAriaLabel:{type:String,default:"$vuetify.pagination.ariaLabel.last"},ellipsis:{type:String,default:"..."},showFirstLastPage:Boolean,...wt(),...ie(),...lt(),...at(),...ze(),...jt(),...Ve({tag:"nav"}),...Pe(),...Tt({variant:"text"})},"VPagination"),_o=R()({name:"VPagination",props:yw(),emits:{"update:modelValue":e=>!0,first:e=>!0,prev:e=>!0,next:e=>!0,last:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=de(e,"modelValue"),{t:o,n:i}=qe(),{isRtl:r}=nt(),{themeClasses:u}=De(e),{width:c}=$t(),d=ee(-1);Ge(void 0,{scoped:!0});const{resizeRef:v}=Lt(V=>{if(!V.length)return;const{target:w,contentRect:$}=V[0],p=w.querySelector(".v-pagination__list > *");if(!p)return;const I=$.width,A=p.offsetWidth+parseFloat(getComputedStyle(p).marginRight)*2;d.value=h(I,A)}),f=y(()=>parseInt(e.length,10)),m=y(()=>parseInt(e.start,10)),b=y(()=>e.totalVisible!=null?parseInt(e.totalVisible,10):d.value>=0?d.value:h(c.value,58));function h(V,w){const $=e.showFirstLastPage?5:3;return Math.max(0,Math.floor(+((V-w*$)/w).toFixed(2)))}const g=y(()=>{if(f.value<=0||isNaN(f.value)||f.value>Number.MAX_SAFE_INTEGER)return[];if(b.value<=0)return[];if(b.value===1)return[l.value];if(f.value<=b.value)return Ot(f.value,m.value);const V=b.value%2===0,w=V?b.value/2:Math.floor(b.value/2),$=V?w:w+1,p=f.value-w;if($-l.value>=0)return[...Ot(Math.max(1,b.value-1),m.value),e.ellipsis,f.value];if(l.value-p>=(V?1:0)){const I=b.value-1,A=f.value-I+m.value;return[m.value,e.ellipsis,...Ot(I,A)]}else{const I=Math.max(1,b.value-3),A=I===1?l.value:l.value-Math.ceil(I/2)+m.value;return[m.value,e.ellipsis,...Ot(I,A),e.ellipsis,f.value]}});function k(V,w,$){V.preventDefault(),l.value=w,$&&a($,w)}const{refs:S,updateRef:C}=hw();Ge({VPaginationBtn:{color:F(e,"color"),border:F(e,"border"),density:F(e,"density"),size:F(e,"size"),variant:F(e,"variant"),rounded:F(e,"rounded"),elevation:F(e,"elevation")}});const P=y(()=>g.value.map((V,w)=>{const $=p=>C(p,w);if(typeof V=="string")return{isActive:!1,key:`ellipsis-${w}`,page:V,props:{ref:$,ellipsis:!0,icon:!0,disabled:!0}};{const p=V===l.value;return{isActive:p,key:V,page:i(V),props:{ref:$,ellipsis:!1,icon:!0,disabled:!!e.disabled||+e.length<2,color:p?e.activeColor:e.color,"aria-current":p,"aria-label":o(p?e.currentPageAriaLabel:e.pageAriaLabel,V),onClick:I=>k(I,V)}}}})),x=y(()=>{const V=!!e.disabled||l.value<=m.value,w=!!e.disabled||l.value>=m.value+f.value-1;return{first:e.showFirstLastPage?{icon:r.value?e.lastIcon:e.firstIcon,onClick:$=>k($,m.value,"first"),disabled:V,"aria-label":o(e.firstAriaLabel),"aria-disabled":V}:void 0,prev:{icon:r.value?e.nextIcon:e.prevIcon,onClick:$=>k($,l.value-1,"prev"),disabled:V,"aria-label":o(e.previousAriaLabel),"aria-disabled":V},next:{icon:r.value?e.prevIcon:e.nextIcon,onClick:$=>k($,l.value+1,"next"),disabled:w,"aria-label":o(e.nextAriaLabel),"aria-disabled":w},last:e.showFirstLastPage?{icon:r.value?e.firstIcon:e.lastIcon,onClick:$=>k($,m.value+f.value-1,"last"),disabled:w,"aria-label":o(e.lastAriaLabel),"aria-disabled":w}:void 0}});function _(){var w;const V=l.value-m.value;(w=S.value[V])==null||w.$el.focus()}function T(V){V.key===Ql.left&&!e.disabled&&l.value>+e.start?(l.value=l.value-1,Te(_)):V.key===Ql.right&&!e.disabled&&l.values(e.tag,{ref:v,class:["v-pagination",u.value,e.class],style:e.style,role:"navigation","aria-label":o(e.ariaLabel),onKeydown:T,"data-test":"v-pagination-root"},{default:()=>[s("ul",{class:"v-pagination__list"},[e.showFirstLastPage&&s("li",{key:"first",class:"v-pagination__first","data-test":"v-pagination-first"},[t.first?t.first(x.value.first):s(Ae,z({_as:"VPaginationBtn"},x.value.first),null)]),s("li",{key:"prev",class:"v-pagination__prev","data-test":"v-pagination-prev"},[t.prev?t.prev(x.value.prev):s(Ae,z({_as:"VPaginationBtn"},x.value.prev),null)]),P.value.map((V,w)=>s("li",{key:V.key,class:["v-pagination__item",{"v-pagination__item--is-active":V.isActive}],"data-test":"v-pagination-item"},[t.item?t.item(V):s(Ae,z({_as:"VPaginationBtn"},V.props),{default:()=>[V.page]})])),s("li",{key:"next",class:"v-pagination__next","data-test":"v-pagination-next"},[t.next?t.next(x.value.next):s(Ae,z({_as:"VPaginationBtn"},x.value.next),null)]),e.showFirstLastPage&&s("li",{key:"last",class:"v-pagination__last","data-test":"v-pagination-last"},[t.last?t.last(x.value.last):s(Ae,z({_as:"VPaginationBtn"},x.value.last),null)])])]})),{}}}),Li=B({prevIcon:{type:ve,default:"$prev"},nextIcon:{type:ve,default:"$next"},firstIcon:{type:ve,default:"$first"},lastIcon:{type:ve,default:"$last"},itemsPerPageText:{type:String,default:"$vuetify.dataFooter.itemsPerPageText"},pageText:{type:String,default:"$vuetify.dataFooter.pageText"},firstPageLabel:{type:String,default:"$vuetify.dataFooter.firstPage"},prevPageLabel:{type:String,default:"$vuetify.dataFooter.prevPage"},nextPageLabel:{type:String,default:"$vuetify.dataFooter.nextPage"},lastPageLabel:{type:String,default:"$vuetify.dataFooter.lastPage"},itemsPerPageOptions:{type:Array,default:()=>[{value:10,title:"10"},{value:25,title:"25"},{value:50,title:"50"},{value:100,title:"100"},{value:-1,title:"$vuetify.dataFooter.itemsPerPageAll"}]},showCurrentPage:Boolean},"VDataTableFooter"),ga=R()({name:"VDataTableFooter",props:Li(),setup(e,n){let{slots:t}=n;const{t:a}=qe(),{page:l,pageCount:o,startIndex:i,stopIndex:r,itemsLength:u,itemsPerPage:c,setItemsPerPage:d}=rw(),v=y(()=>e.itemsPerPageOptions.map(f=>typeof f=="number"?{value:f,title:f===-1?a("$vuetify.dataFooter.itemsPerPageAll"):String(f)}:{...f,title:isNaN(Number(f.title))?a(f.title):f.title}));return W(()=>{var m;const f=_o.filterProps(e);return s("div",{class:"v-data-table-footer"},[(m=t.prepend)==null?void 0:m.call(t),s("div",{class:"v-data-table-footer__items-per-page"},[s("span",null,[a(e.itemsPerPageText)]),s(xi,{items:v.value,modelValue:c.value,"onUpdate:modelValue":b=>d(Number(b)),density:"compact",variant:"outlined","hide-details":!0},null)]),s("div",{class:"v-data-table-footer__info"},[s("div",null,[a(e.pageText,u.value?i.value+1:0,r.value,u.value)])]),s("div",{class:"v-data-table-footer__pagination"},[s(_o,z({modelValue:l.value,"onUpdate:modelValue":b=>l.value=b,density:"comfortable","first-aria-label":e.firstPageLabel,"last-aria-label":e.lastPageLabel,length:o.value,"next-aria-label":e.nextPageLabel,"previous-aria-label":e.prevPageLabel,rounded:!0,"show-first-last-page":!0,"total-visible":e.showCurrentPage?1:0,variant:"plain"},f),null)])])}),{}}}),Za=ry({align:{type:String,default:"start"},fixed:Boolean,fixedOffset:[Number,String],height:[Number,String],lastFixed:Boolean,noPadding:Boolean,tag:String,width:[Number,String],maxWidth:[Number,String],nowrap:Boolean},(e,n)=>{let{slots:t}=n;const a=e.tag??"td";return s(a,{class:["v-data-table__td",{"v-data-table-column--fixed":e.fixed,"v-data-table-column--last-fixed":e.lastFixed,"v-data-table-column--no-padding":e.noPadding,"v-data-table-column--nowrap":e.nowrap},`v-data-table-column--align-${e.align}`],style:{height:ne(e.height),width:ne(e.width),maxWidth:ne(e.maxWidth),left:ne(e.fixedOffset||null)}},{default:()=>{var l;return[(l=t.default)==null?void 0:l.call(t)]}})}),bw=B({headers:Array},"DataTable-header"),Ac=Symbol.for("vuetify:data-table-headers"),Bc={title:"",sortable:!1},kw={...Bc,width:48};function Sw(){const n=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]).map(t=>({element:t,priority:0}));return{enqueue:(t,a)=>{let l=!1;for(let o=0;oa){n.splice(o,0,{element:t,priority:a}),l=!0;break}l||n.push({element:t,priority:a})},size:()=>n.length,count:()=>{let t=0;if(!n.length)return 0;const a=Math.floor(n[0].priority);for(let l=0;ln.shift()}}function Po(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];if(!e.children)n.push(e);else for(const t of e.children)Po(t,n);return n}function Dc(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:new Set;for(const t of e)t.key&&n.add(t.key),t.children&&Dc(t.children,n);return n}function ww(e){if(e.key){if(e.key==="data-table-group")return Bc;if(["data-table-expand","data-table-select"].includes(e.key))return kw}}function Mi(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.children?Math.max(n,...e.children.map(t=>Mi(t,n+1))):n}function Vw(e){let n=!1;function t(o){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(o)if(i&&(o.fixed=!0),o.fixed)if(o.children)for(let r=o.children.length-1;r>=0;r--)t(o.children[r],!0);else n?isNaN(+o.width)&&(`${o.key}`,void 0):o.lastFixed=!0,n=!0;else if(o.children)for(let r=o.children.length-1;r>=0;r--)t(o.children[r]);else n=!1}for(let o=e.length-1;o>=0;o--)t(e[o]);function a(o){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!o)return i;if(o.children){o.fixedOffset=i;for(const r of o.children)i=a(r,i)}else o.fixed&&(o.fixedOffset=i,i+=parseFloat(o.width||"0")||0);return i}let l=0;for(const o of e)l=a(o,l)}function Cw(e,n){const t=[];let a=0;const l=Sw(e);for(;l.size()>0;){let i=l.count();const r=[];let u=1;for(;i>0;){const{element:c,priority:d}=l.dequeue(),v=n-a-Mi(c);if(r.push({...c,rowspan:v??1,colspan:c.children?Po(c).length:1}),c.children)for(const f of c.children){const m=d%1+u/Math.pow(10,a+2);l.enqueue(f,a+v+m)}u+=1,i-=1}a+=1,t.push(r)}return{columns:e.map(i=>Po(i)).flat(),headers:t}}function Lc(e){const n=[];for(const t of e){const a={...ww(t),...t},l=a.key??(typeof a.value=="string"?a.value:null),o=a.value??l??null,i={...a,key:l,value:o,sortable:a.sortable??(a.key!=null||!!a.sort),children:a.children?Lc(a.children):void 0};n.push(i)}return n}function Ei(e,n){const t=H([]),a=H([]),l=H({}),o=H({}),i=H({});He(()=>{var h,g,k;const c=(e.headers||Object.keys(e.items[0]??{}).map(S=>({key:S,title:Xn(S)}))).slice(),d=Dc(c);(h=n==null?void 0:n.groupBy)!=null&&h.value.length&&!d.has("data-table-group")&&c.unshift({key:"data-table-group",title:"Group"}),(g=n==null?void 0:n.showSelect)!=null&&g.value&&!d.has("data-table-select")&&c.unshift({key:"data-table-select"}),(k=n==null?void 0:n.showExpand)!=null&&k.value&&!d.has("data-table-expand")&&c.push({key:"data-table-expand"});const v=Lc(c);Vw(v);const f=Math.max(...v.map(S=>Mi(S)))+1,m=Cw(v,f);t.value=m.headers,a.value=m.columns;const b=m.headers.flat(1);for(const S of b)S.key&&(S.sortable&&(S.sort&&(l.value[S.key]=S.sort),S.sortRaw&&(o.value[S.key]=S.sortRaw)),S.filter&&(i.value[S.key]=S.filter))});const r={headers:t,columns:a,sortFunctions:l,sortRawFunctions:o,filterFunctions:i};return Re(Ac,r),r}function Ll(){const e=xe(Ac);if(!e)throw new Error("Missing headers!");return e}const Mc=B({color:String,sticky:Boolean,disableSort:Boolean,multiSort:Boolean,sortAscIcon:{type:ve,default:"$sortAsc"},sortDescIcon:{type:ve,default:"$sortDesc"},headerProps:{type:Object},...In(),...gl()},"VDataTableHeaders"),pn=R()({name:"VDataTableHeaders",props:Mc(),setup(e,n){let{slots:t}=n;const{t:a}=qe(),{toggleSort:l,sortBy:o,isSorted:i}=Tc(),{someSelected:r,allSelected:u,selectAll:c,showSelectAll:d}=Al(),{columns:v,headers:f}=Ll(),{loaderClasses:m}=Sa(e);function b(V,w){if(!(!e.sticky&&!V.fixed))return{position:"sticky",left:V.fixed?ne(V.fixedOffset):void 0,top:e.sticky?`calc(var(--v-table-header-height) * ${w})`:void 0}}function h(V){const w=o.value.find($=>$.key===V.key);return w?w.order==="asc"?e.sortAscIcon:e.sortDescIcon:e.sortAscIcon}const{backgroundColorClasses:g,backgroundColorStyles:k}=Le(e,"color"),{displayClasses:S,mobile:C}=$t(e),P=y(()=>({headers:f.value,columns:v.value,toggleSort:l,isSorted:i,sortBy:o.value,someSelected:r.value,allSelected:u.value,selectAll:c,getSortIcon:h})),x=y(()=>["v-data-table__th",{"v-data-table__th--sticky":e.sticky},S.value,m.value]),_=V=>{let{column:w,x:$,y:p}=V;const I=w.key==="data-table-select"||w.key==="data-table-expand",A=z(e.headerProps??{},w.headerProps??{});return s(Za,z({tag:"th",align:w.align,class:[{"v-data-table__th--sortable":w.sortable&&!e.disableSort,"v-data-table__th--sorted":i(w),"v-data-table__th--fixed":w.fixed},...x.value],style:{width:ne(w.width),minWidth:ne(w.minWidth),maxWidth:ne(w.maxWidth),...b(w,p)},colspan:w.colspan,rowspan:w.rowspan,onClick:w.sortable?()=>l(w):void 0,fixed:w.fixed,nowrap:w.nowrap,lastFixed:w.lastFixed,noPadding:I},A),{default:()=>{var Y;const M=`header.${w.key}`,j={column:w,selectAll:c,isSorted:i,toggleSort:l,sortBy:o.value,someSelected:r.value,allSelected:u.value,getSortIcon:h};return t[M]?t[M](j):w.key==="data-table-select"?((Y=t["header.data-table-select"])==null?void 0:Y.call(t,j))??(d.value&&s(Ut,{modelValue:u.value,indeterminate:r.value&&!u.value,"onUpdate:modelValue":c},null)):s("div",{class:"v-data-table-header__content"},[s("span",null,[w.title]),w.sortable&&!e.disableSort&&s(Be,{key:"icon",class:"v-data-table-header__sort-icon",icon:h(w)},null),e.multiSort&&i(w)&&s("div",{key:"badge",class:["v-data-table-header__sort-badge",...g.value],style:k.value},[o.value.findIndex(le=>le.key===w.key)+1])])}})},T=()=>{const V=z(e.headerProps??{}??{}),w=y(()=>v.value.filter(p=>(p==null?void 0:p.sortable)&&!e.disableSort)),$=y(()=>{if(v.value.find(I=>I.key==="data-table-select")!=null)return u.value?"$checkboxOn":r.value?"$checkboxIndeterminate":"$checkboxOff"});return s(Za,z({tag:"th",class:[...x.value],colspan:f.value.length+1},V),{default:()=>[s("div",{class:"v-data-table-header__content"},[s(xi,{chips:!0,class:"v-data-table__td-sort-select",clearable:!0,density:"default",items:w.value,label:a("$vuetify.dataTable.sortBy"),multiple:e.multiSort,variant:"underlined","onClick:clear":()=>o.value=[],appendIcon:$.value,"onClick:append":()=>c(!u.value)},{...t,chip:p=>{var I;return s(ta,{onClick:(I=p.item.raw)!=null&&I.sortable?()=>l(p.item.raw):void 0,onMousedown:A=>{A.preventDefault(),A.stopPropagation()}},{default:()=>[p.item.title,s(Be,{class:["v-data-table__td-sort-icon",i(p.item.raw)&&"v-data-table__td-sort-icon-active"],icon:h(p.item.raw),size:"small"},null)]})}})])]})};W(()=>C.value?s("tr",null,[s(T,null,null)]):s(ae,null,[t.headers?t.headers(P.value):f.value.map((V,w)=>s("tr",null,[V.map(($,p)=>s(_,{column:$,x:p,y:w},null))])),e.loading&&s("tr",{class:"v-data-table-progress"},[s("th",{colspan:v.value.length},[s(wa,{name:"v-data-table-progress",absolute:!0,active:!0,color:typeof e.loading=="boolean"?void 0:e.loading,indeterminate:!0},{default:t.loader})])])]))}}),pw=B({item:{type:Object,required:!0}},"VDataTableGroupHeaderRow"),xw=R()({name:"VDataTableGroupHeaderRow",props:pw(),setup(e,n){let{slots:t}=n;const{isGroupOpen:a,toggleGroup:l,extractRows:o}=kc(),{isSelected:i,isSomeSelected:r,select:u}=Al(),{columns:c}=Ll(),d=y(()=>o([e.item]));return()=>s("tr",{class:"v-data-table-group-header-row",style:{"--v-data-table-group-header-row-depth":e.item.depth}},[c.value.map(v=>{var f,m;if(v.key==="data-table-group"){const b=a(e.item)?"$expand":"$next",h=()=>l(e.item);return((f=t["data-table-group"])==null?void 0:f.call(t,{item:e.item,count:d.value.length,props:{icon:b,onClick:h}}))??s(Za,{class:"v-data-table-group-header-row__column"},{default:()=>[s(Ae,{size:"small",variant:"text",icon:b,onClick:h},null),s("span",null,[e.item.value]),s("span",null,[bt("("),d.value.length,bt(")")])]})}if(v.key==="data-table-select"){const b=i(d.value),h=r(d.value)&&!b,g=k=>u(d.value,k);return((m=t["data-table-select"])==null?void 0:m.call(t,{props:{modelValue:b,indeterminate:h,"onUpdate:modelValue":g}}))??s("td",null,[s(Ut,{modelValue:b,indeterminate:h,"onUpdate:modelValue":g},null)])}return s("td",null,null)})])}}),_w=B({index:Number,item:Object,cellProps:[Object,Function],onClick:ot(),onContextmenu:ot(),onDblclick:ot(),...In()},"VDataTableRow"),Fi=R()({name:"VDataTableRow",props:_w(),setup(e,n){let{slots:t}=n;const{displayClasses:a,mobile:l}=$t(e,"v-data-table__tr"),{isSelected:o,toggleSelect:i,someSelected:r,allSelected:u,selectAll:c}=Al(),{isExpanded:d,toggleExpand:v}=yc(),{toggleSort:f,sortBy:m,isSorted:b}=Tc(),{columns:h}=Ll();W(()=>s("tr",{class:["v-data-table__tr",{"v-data-table__tr--clickable":!!(e.onClick||e.onContextmenu||e.onDblclick)},a.value],onClick:e.onClick,onContextmenu:e.onContextmenu,onDblclick:e.onDblclick},[e.item&&h.value.map((g,k)=>{const S=e.item,C=`item.${g.key}`,P=`header.${g.key}`,x={index:e.index,item:S.raw,internalItem:S,value:kn(S.columns,g.key),column:g,isSelected:o,toggleSelect:i,isExpanded:d,toggleExpand:v},_={column:g,selectAll:c,isSorted:b,toggleSort:f,sortBy:m.value,someSelected:r.value,allSelected:u.value,getSortIcon:()=>""},T=typeof e.cellProps=="function"?e.cellProps({index:x.index,item:x.item,internalItem:x.internalItem,value:x.value,column:g}):e.cellProps,V=typeof g.cellProps=="function"?g.cellProps({index:x.index,item:x.item,internalItem:x.internalItem,value:x.value}):g.cellProps;return s(Za,z({align:g.align,class:{"v-data-table__td--expanded-row":g.key==="data-table-expand","v-data-table__td--select-row":g.key==="data-table-select"},fixed:g.fixed,fixedOffset:g.fixedOffset,lastFixed:g.lastFixed,maxWidth:l.value?void 0:g.maxWidth,noPadding:g.key==="data-table-select"||g.key==="data-table-expand",nowrap:g.nowrap,width:l.value?void 0:g.width},T,V),{default:()=>{var $,p,I,A,M;if(t[C]&&!l.value)return($=t[C])==null?void 0:$.call(t,x);if(g.key==="data-table-select")return((p=t["item.data-table-select"])==null?void 0:p.call(t,x))??s(Ut,{disabled:!S.selectable,modelValue:o([S]),onClick:ql(()=>i(S),["stop"])},null);if(g.key==="data-table-expand")return((I=t["item.data-table-expand"])==null?void 0:I.call(t,x))??s(Ae,{icon:d(S)?"$collapse":"$expand",size:"small",variant:"text",onClick:ql(()=>v(S),["stop"])},null);const w=Oe(x.value);return l.value?s(ae,null,[s("div",{class:"v-data-table__td-title"},[((A=t[P])==null?void 0:A.call(t,_))??g.title]),s("div",{class:"v-data-table__td-value"},[((M=t[C])==null?void 0:M.call(t,x))??w])]):w}})})]))}}),Ec=B({loading:[Boolean,String],loadingText:{type:String,default:"$vuetify.dataIterator.loadingText"},hideNoData:Boolean,items:{type:Array,default:()=>[]},noDataText:{type:String,default:"$vuetify.noDataText"},rowProps:[Object,Function],cellProps:[Object,Function],...In()},"VDataTableRows"),xn=R()({name:"VDataTableRows",inheritAttrs:!1,props:Ec(),setup(e,n){let{attrs:t,slots:a}=n;const{columns:l}=Ll(),{expandOnClick:o,toggleExpand:i,isExpanded:r}=yc(),{isSelected:u,toggleSelect:c}=Al(),{toggleGroup:d,isGroupOpen:v}=kc(),{t:f}=qe(),{mobile:m}=$t(e);return W(()=>{var b,h;return e.loading&&(!e.items.length||a.loading)?s("tr",{class:"v-data-table-rows-loading",key:"loading"},[s("td",{colspan:l.value.length},[((b=a.loading)==null?void 0:b.call(a))??f(e.loadingText)])]):!e.loading&&!e.items.length&&!e.hideNoData?s("tr",{class:"v-data-table-rows-no-data",key:"no-data"},[s("td",{colspan:l.value.length},[((h=a["no-data"])==null?void 0:h.call(a))??f(e.noDataText)])]):s(ae,null,[e.items.map((g,k)=>{var P;if(g.type==="group"){const x={index:k,item:g,columns:l.value,isExpanded:r,toggleExpand:i,isSelected:u,toggleSelect:c,toggleGroup:d,isGroupOpen:v};return a["group-header"]?a["group-header"](x):s(xw,z({key:`group-header_${g.id}`,item:g},fr(t,":group-header",()=>x)),a)}const S={index:k,item:g.raw,internalItem:g,columns:l.value,isExpanded:r,toggleExpand:i,isSelected:u,toggleSelect:c},C={...S,props:z({key:`item_${g.key??g.index}`,onClick:o.value?()=>{i(g)}:void 0,index:k,item:g,cellProps:e.cellProps,mobile:m.value},fr(t,":row",()=>S),typeof e.rowProps=="function"?e.rowProps({item:S.item,index:S.index,internalItem:S.internalItem}):e.rowProps)};return s(ae,{key:C.props.key},[a.item?a.item(C):s(Fi,C.props,a),r(g)&&((P=a["expanded-row"])==null?void 0:P.call(a,S))])})])}),{}}}),Fc=B({fixedHeader:Boolean,fixedFooter:Boolean,height:[Number,String],hover:Boolean,...ie(),...lt(),...Ve(),...Pe()},"VTable"),_n=R()({name:"VTable",props:Fc(),setup(e,n){let{slots:t,emit:a}=n;const{themeClasses:l}=De(e),{densityClasses:o}=gt(e);return W(()=>s(e.tag,{class:["v-table",{"v-table--fixed-height":!!e.height,"v-table--fixed-header":e.fixedHeader,"v-table--fixed-footer":e.fixedFooter,"v-table--has-top":!!t.top,"v-table--has-bottom":!!t.bottom,"v-table--hover":e.hover},l.value,o.value,e.class],style:e.style},{default:()=>{var i,r,u;return[(i=t.top)==null?void 0:i.call(t),t.default?s("div",{class:"v-table__wrapper",style:{height:ne(e.height)}},[s("table",null,[t.default()])]):(r=t.wrapper)==null?void 0:r.call(t),(u=t.bottom)==null?void 0:u.call(t)]}})),{}}}),Pw=B({items:{type:Array,default:()=>[]},itemValue:{type:[String,Array,Function],default:"id"},itemSelectable:{type:[String,Array,Function],default:null},rowProps:[Object,Function],cellProps:[Object,Function],returnObject:Boolean},"DataTable-items");function Iw(e,n,t,a){const l=e.returnObject?n:tt(n,e.itemValue),o=tt(n,e.itemSelectable,!0),i=a.reduce((r,u)=>(u.key!=null&&(r[u.key]=tt(n,u.value)),r),{});return{type:"item",key:e.returnObject?tt(n,e.itemValue):l,index:t,value:l,selectable:o,columns:i,raw:n}}function $w(e,n,t){return n.map((a,l)=>Iw(e,a,l,t))}function Oi(e,n){return{items:y(()=>$w(e,e.items,n.value))}}const Ni=B({...Ec(),hideDefaultBody:Boolean,hideDefaultFooter:Boolean,hideDefaultHeader:Boolean,width:[String,Number],search:String,...gc(),...Ii(),...bw(),...Pw(),..._c(),...Ic(),...Mc(),...Fc()},"DataTable"),Tw=B({...Ti(),...Ni(),...Ia(),...Li()},"VDataTable"),Aw=R()({name:"VDataTable",props:Tw(),emits:{"update:modelValue":e=>!0,"update:page":e=>!0,"update:itemsPerPage":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:groupBy":e=>!0,"update:expanded":e=>!0,"update:currentItems":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{groupBy:l}=$i(e),{sortBy:o,multiSort:i,mustSort:r}=Bl(e),{page:u,itemsPerPage:c}=Ai(e),{disableSort:d}=Pn(e),{columns:v,headers:f,sortFunctions:m,sortRawFunctions:b,filterFunctions:h}=Ei(e,{groupBy:l,showSelect:F(e,"showSelect"),showExpand:F(e,"showExpand")}),{items:g}=Oi(e,v),k=F(e,"search"),{filteredItems:S}=$a(e,g,k,{transform:ce=>ce.columns,customKeyFilter:h}),{toggleSort:C}=Dl({sortBy:o,multiSort:i,mustSort:r,page:u}),{sortByWithGroups:P,opened:x,extractRows:_,isGroupOpen:T,toggleGroup:V}=Pl({groupBy:l,sortBy:o,disableSort:d}),{sortedItems:w}=Di(e,S,P,{transform:ce=>({...ce.raw,...ce.columns}),sortFunctions:m,sortRawFunctions:b}),{flatItems:$}=Il(w,l,x),p=y(()=>$.value.length),{startIndex:I,stopIndex:A,pageCount:M,setItemsPerPage:j}=Bi({page:u,itemsPerPage:c,itemsLength:p}),{paginatedItems:Y}=Cc({items:$,startIndex:I,stopIndex:A,itemsPerPage:c}),le=y(()=>_(Y.value)),{isSelected:re,select:N,selectAll:E,toggleSelect:O,someSelected:te,allSelected:se}=Tl(e,{allItems:g,currentPage:le}),{isExpanded:ue,toggleExpand:ye}=_l(e);$l({page:u,itemsPerPage:c,sortBy:o,groupBy:l,search:k}),Ge({VDataTableRows:{hideNoData:F(e,"hideNoData"),noDataText:F(e,"noDataText"),loading:F(e,"loading"),loadingText:F(e,"loadingText")}});const G=y(()=>({page:u.value,itemsPerPage:c.value,sortBy:o.value,pageCount:M.value,toggleSort:C,setItemsPerPage:j,someSelected:te.value,allSelected:se.value,isSelected:re,select:N,selectAll:E,toggleSelect:O,isExpanded:ue,toggleExpand:ye,isGroupOpen:T,toggleGroup:V,items:le.value.map(ce=>ce.raw),internalItems:le.value,groupedItems:Y.value,columns:v.value,headers:f.value}));return W(()=>{const ce=ga.filterProps(e),me=pn.filterProps(e),Me=xn.filterProps(e),Ie=_n.filterProps(e);return s(_n,z({class:["v-data-table",{"v-data-table--show-select":e.showSelect,"v-data-table--loading":e.loading},e.class],style:e.style},Ie),{top:()=>{var Z;return(Z=a.top)==null?void 0:Z.call(a,G.value)},default:()=>{var Z,Ce,q,oe,ke,he;return a.default?a.default(G.value):s(ae,null,[(Z=a.colgroup)==null?void 0:Z.call(a,G.value),!e.hideDefaultHeader&&s("thead",{key:"thead"},[s(pn,me,a)]),(Ce=a.thead)==null?void 0:Ce.call(a,G.value),!e.hideDefaultBody&&s("tbody",null,[(q=a["body.prepend"])==null?void 0:q.call(a,G.value),a.body?a.body(G.value):s(xn,z(t,Me,{items:Y.value}),a),(oe=a["body.append"])==null?void 0:oe.call(a,G.value)]),(ke=a.tbody)==null?void 0:ke.call(a,G.value),(he=a.tfoot)==null?void 0:he.call(a,G.value)])},bottom:()=>a.bottom?a.bottom(G.value):!e.hideDefaultFooter&&s(ae,null,[s(xa,null,null),s(ga,ce,{prepend:a["footer.prepend"]})])})}),{}}}),Bw=B({...Ni(),...Ii(),...Xu(),...Ia()},"VDataTableVirtual"),Dw=R()({name:"VDataTableVirtual",props:Bw(),emits:{"update:modelValue":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:groupBy":e=>!0,"update:expanded":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{groupBy:l}=$i(e),{sortBy:o,multiSort:i,mustSort:r}=Bl(e),{disableSort:u}=Pn(e),{columns:c,headers:d,filterFunctions:v,sortFunctions:f,sortRawFunctions:m}=Ei(e,{groupBy:l,showSelect:F(e,"showSelect"),showExpand:F(e,"showExpand")}),{items:b}=Oi(e,c),h=F(e,"search"),{filteredItems:g}=$a(e,b,h,{transform:me=>me.columns,customKeyFilter:v}),{toggleSort:k}=Dl({sortBy:o,multiSort:i,mustSort:r}),{sortByWithGroups:S,opened:C,extractRows:P,isGroupOpen:x,toggleGroup:_}=Pl({groupBy:l,sortBy:o,disableSort:u}),{sortedItems:T}=Di(e,g,S,{transform:me=>({...me.raw,...me.columns}),sortFunctions:f,sortRawFunctions:m}),{flatItems:V}=Il(T,l,C),w=y(()=>P(V.value)),{isSelected:$,select:p,selectAll:I,toggleSelect:A,someSelected:M,allSelected:j}=Tl(e,{allItems:w,currentPage:w}),{isExpanded:Y,toggleExpand:le}=_l(e),{containerRef:re,markerRef:N,paddingTop:E,paddingBottom:O,computedItems:te,handleItemResize:se,handleScroll:ue,handleScrollend:ye}=Zu(e,V),G=y(()=>te.value.map(me=>me.raw));$l({sortBy:o,page:ee(1),itemsPerPage:ee(-1),groupBy:l,search:h}),Ge({VDataTableRows:{hideNoData:F(e,"hideNoData"),noDataText:F(e,"noDataText"),loading:F(e,"loading"),loadingText:F(e,"loadingText")}});const ce=y(()=>({sortBy:o.value,toggleSort:k,someSelected:M.value,allSelected:j.value,isSelected:$,select:p,selectAll:I,toggleSelect:A,isExpanded:Y,toggleExpand:le,isGroupOpen:x,toggleGroup:_,items:w.value.map(me=>me.raw),internalItems:w.value,groupedItems:V.value,columns:c.value,headers:d.value}));W(()=>{const me=pn.filterProps(e),Me=xn.filterProps(e),Ie=_n.filterProps(e);return s(_n,z({class:["v-data-table",{"v-data-table--loading":e.loading},e.class],style:e.style},Ie),{top:()=>{var Z;return(Z=a.top)==null?void 0:Z.call(a,ce.value)},wrapper:()=>{var Z,Ce,q;return s("div",{ref:re,onScrollPassive:ue,onScrollend:ye,class:"v-table__wrapper",style:{height:ne(e.height)}},[s("table",null,[(Z=a.colgroup)==null?void 0:Z.call(a,ce.value),!e.hideDefaultHeader&&s("thead",{key:"thead"},[s(pn,z(me,{sticky:e.fixedHeader}),a)]),!e.hideDefaultBody&&s("tbody",null,[s("tr",{ref:N,style:{height:ne(E.value),border:0}},[s("td",{colspan:c.value.length,style:{height:0,border:0}},null)]),(Ce=a["body.prepend"])==null?void 0:Ce.call(a,ce.value),s(xn,z(t,Me,{items:G.value}),{...a,item:oe=>s(qu,{key:oe.internalItem.index,renderless:!0,"onUpdate:height":ke=>se(oe.internalItem.index,ke)},{default:ke=>{var we;let{itemRef:he}=ke;return((we=a.item)==null?void 0:we.call(a,{...oe,itemRef:he}))??s(Fi,z(oe.props,{ref:he,key:oe.internalItem.index,index:oe.internalItem.index}),a)}})}),(q=a["body.append"])==null?void 0:q.call(a,ce.value),s("tr",{style:{height:ne(O.value),border:0}},[s("td",{colspan:c.value.length,style:{height:0,border:0}},null)])])])])},bottom:()=>{var Z;return(Z=a.bottom)==null?void 0:Z.call(a,ce.value)}})})}}),Lw=B({itemsLength:{type:[Number,String],required:!0},...Ti(),...Ni(),...Li()},"VDataTableServer"),Mw=R()({name:"VDataTableServer",props:Lw(),emits:{"update:modelValue":e=>!0,"update:page":e=>!0,"update:itemsPerPage":e=>!0,"update:sortBy":e=>!0,"update:options":e=>!0,"update:expanded":e=>!0,"update:groupBy":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const{groupBy:l}=$i(e),{sortBy:o,multiSort:i,mustSort:r}=Bl(e),{page:u,itemsPerPage:c}=Ai(e),{disableSort:d}=Pn(e),v=y(()=>parseInt(e.itemsLength,10)),{columns:f,headers:m}=Ei(e,{groupBy:l,showSelect:F(e,"showSelect"),showExpand:F(e,"showExpand")}),{items:b}=Oi(e,f),{toggleSort:h}=Dl({sortBy:o,multiSort:i,mustSort:r,page:u}),{opened:g,isGroupOpen:k,toggleGroup:S,extractRows:C}=Pl({groupBy:l,sortBy:o,disableSort:d}),{pageCount:P,setItemsPerPage:x}=Bi({page:u,itemsPerPage:c,itemsLength:v}),{flatItems:_}=Il(b,l,g),{isSelected:T,select:V,selectAll:w,toggleSelect:$,someSelected:p,allSelected:I}=Tl(e,{allItems:b,currentPage:b}),{isExpanded:A,toggleExpand:M}=_l(e),j=y(()=>C(b.value));$l({page:u,itemsPerPage:c,sortBy:o,groupBy:l,search:F(e,"search")}),Re("v-data-table",{toggleSort:h,sortBy:o}),Ge({VDataTableRows:{hideNoData:F(e,"hideNoData"),noDataText:F(e,"noDataText"),loading:F(e,"loading"),loadingText:F(e,"loadingText")}});const Y=y(()=>({page:u.value,itemsPerPage:c.value,sortBy:o.value,pageCount:P.value,toggleSort:h,setItemsPerPage:x,someSelected:p.value,allSelected:I.value,isSelected:T,select:V,selectAll:w,toggleSelect:$,isExpanded:A,toggleExpand:M,isGroupOpen:k,toggleGroup:S,items:j.value.map(le=>le.raw),internalItems:j.value,groupedItems:_.value,columns:f.value,headers:m.value}));W(()=>{const le=ga.filterProps(e),re=pn.filterProps(e),N=xn.filterProps(e),E=_n.filterProps(e);return s(_n,z({class:["v-data-table",{"v-data-table--loading":e.loading},e.class],style:e.style},E),{top:()=>{var O;return(O=a.top)==null?void 0:O.call(a,Y.value)},default:()=>{var O,te,se,ue,ye,G;return a.default?a.default(Y.value):s(ae,null,[(O=a.colgroup)==null?void 0:O.call(a,Y.value),!e.hideDefaultHeader&&s("thead",{key:"thead",class:"v-data-table__thead",role:"rowgroup"},[s(pn,z(re,{sticky:e.fixedHeader}),a)]),(te=a.thead)==null?void 0:te.call(a,Y.value),!e.hideDefaultBody&&s("tbody",{class:"v-data-table__tbody",role:"rowgroup"},[(se=a["body.prepend"])==null?void 0:se.call(a,Y.value),a.body?a.body(Y.value):s(xn,z(t,N,{items:_.value}),a),(ue=a["body.append"])==null?void 0:ue.call(a,Y.value)]),(ye=a.tbody)==null?void 0:ye.call(a,Y.value),(G=a.tfoot)==null?void 0:G.call(a,Y.value)])},bottom:()=>a.bottom?a.bottom(Y.value):!e.hideDefaultFooter&&s(ae,null,[s(xa,null,null),s(ga,le,{prepend:a["footer.prepend"]})])})})}}),Ew=B({fluid:{type:Boolean,default:!1},...ie(),...Qe(),...Ve()},"VContainer"),Fw=R()({name:"VContainer",props:Ew(),setup(e,n){let{slots:t}=n;const{rtlClasses:a}=nt(),{dimensionStyles:l}=et(e);return W(()=>s(e.tag,{class:["v-container",{"v-container--fluid":e.fluid},a.value,e.class],style:[l.value,e.style]},t)),{}}}),Oc=ul.reduce((e,n)=>(e[n]={type:[Boolean,String,Number],default:!1},e),{}),Nc=ul.reduce((e,n)=>{const t="offset"+Xn(n);return e[t]={type:[String,Number],default:null},e},{}),Rc=ul.reduce((e,n)=>{const t="order"+Xn(n);return e[t]={type:[String,Number],default:null},e},{}),Or={col:Object.keys(Oc),offset:Object.keys(Nc),order:Object.keys(Rc)};function Ow(e,n,t){let a=e;if(!(t==null||t===!1)){if(n){const l=n.replace(e,"");a+=`-${l}`}return e==="col"&&(a="v-"+a),e==="col"&&(t===""||t===!0)||(a+=`-${t}`),a.toLowerCase()}}const Nw=["auto","start","end","center","baseline","stretch"],Rw=B({cols:{type:[Boolean,String,Number],default:!1},...Oc,offset:{type:[String,Number],default:null},...Nc,order:{type:[String,Number],default:null},...Rc,alignSelf:{type:String,default:null,validator:e=>Nw.includes(e)},...ie(),...Ve()},"VCol"),Hw=R()({name:"VCol",props:Rw(),setup(e,n){let{slots:t}=n;const a=y(()=>{const l=[];let o;for(o in Or)Or[o].forEach(r=>{const u=e[r],c=Ow(o,r,u);c&&l.push(c)});const i=l.some(r=>r.startsWith("v-col-"));return l.push({"v-col":!i||!e.cols,[`v-col-${e.cols}`]:e.cols,[`offset-${e.offset}`]:e.offset,[`order-${e.order}`]:e.order,[`align-self-${e.alignSelf}`]:e.alignSelf}),l});return()=>{var l;return an(e.tag,{class:[a.value,e.class],style:e.style},(l=t.default)==null?void 0:l.call(t))}}}),Ri=["start","end","center"],Hc=["space-between","space-around","space-evenly"];function Hi(e,n){return ul.reduce((t,a)=>{const l=e+Xn(a);return t[l]=n(),t},{})}const zw=[...Ri,"baseline","stretch"],zc=e=>zw.includes(e),Wc=Hi("align",()=>({type:String,default:null,validator:zc})),Ww=[...Ri,...Hc],jc=e=>Ww.includes(e),Gc=Hi("justify",()=>({type:String,default:null,validator:jc})),jw=[...Ri,...Hc,"stretch"],Yc=e=>jw.includes(e),Uc=Hi("alignContent",()=>({type:String,default:null,validator:Yc})),Nr={align:Object.keys(Wc),justify:Object.keys(Gc),alignContent:Object.keys(Uc)},Gw={align:"align",justify:"justify",alignContent:"align-content"};function Yw(e,n,t){let a=Gw[e];if(t!=null){if(n){const l=n.replace(e,"");a+=`-${l}`}return a+=`-${t}`,a.toLowerCase()}}const Uw=B({dense:Boolean,noGutters:Boolean,align:{type:String,default:null,validator:zc},...Wc,justify:{type:String,default:null,validator:jc},...Gc,alignContent:{type:String,default:null,validator:Yc},...Uc,...ie(),...Ve()},"VRow"),Kw=R()({name:"VRow",props:Uw(),setup(e,n){let{slots:t}=n;const a=y(()=>{const l=[];let o;for(o in Nr)Nr[o].forEach(i=>{const r=e[i],u=Yw(o,i,r);u&&l.push(u)});return l.push({"v-row--no-gutters":e.noGutters,"v-row--dense":e.dense,[`align-${e.align}`]:e.align,[`justify-${e.justify}`]:e.justify,[`align-content-${e.alignContent}`]:e.alignContent}),l});return()=>{var l;return an(e.tag,{class:["v-row",a.value,e.class],style:e.style},(l=t.default)==null?void 0:l.call(t))}}}),Kc=Wt("v-spacer","div","VSpacer"),qc=B({active:{type:[String,Array],default:void 0},disabled:{type:[Boolean,String,Array],default:!1},nextIcon:{type:ve,default:"$next"},prevIcon:{type:ve,default:"$prev"},modeIcon:{type:ve,default:"$subgroup"},text:String,viewMode:{type:String,default:"month"}},"VDatePickerControls"),Io=R()({name:"VDatePickerControls",props:qc(),emits:{"click:year":()=>!0,"click:month":()=>!0,"click:prev":()=>!0,"click:next":()=>!0,"click:text":()=>!0},setup(e,n){let{emit:t}=n;const a=y(()=>Array.isArray(e.disabled)?e.disabled.includes("text"):!!e.disabled),l=y(()=>Array.isArray(e.disabled)?e.disabled.includes("mode"):!!e.disabled),o=y(()=>Array.isArray(e.disabled)?e.disabled.includes("prev"):!!e.disabled),i=y(()=>Array.isArray(e.disabled)?e.disabled.includes("next"):!!e.disabled);function r(){t("click:prev")}function u(){t("click:next")}function c(){t("click:year")}function d(){t("click:month")}return W(()=>s("div",{class:["v-date-picker-controls"]},[s(Ae,{class:"v-date-picker-controls__month-btn",disabled:a.value,text:e.text,variant:"text",rounded:!0,onClick:d},null),s(Ae,{key:"mode-btn",class:"v-date-picker-controls__mode-btn",disabled:l.value,density:"comfortable",icon:e.modeIcon,variant:"text",onClick:c},null),s(Kc,{key:"mode-spacer"},null),s("div",{key:"month-buttons",class:"v-date-picker-controls__month"},[s(Ae,{disabled:o.value,icon:e.prevIcon,variant:"text",onClick:r},null),s(Ae,{disabled:i.value,icon:e.nextIcon,variant:"text",onClick:u},null)])])),{}}}),qw=B({appendIcon:ve,color:String,header:String,transition:String,onClick:ot()},"VDatePickerHeader"),$o=R()({name:"VDatePickerHeader",props:qw(),emits:{click:()=>!0,"click:append":()=>!0},setup(e,n){let{emit:t,slots:a}=n;const{backgroundColorClasses:l,backgroundColorStyles:o}=Le(e,"color");function i(){t("click")}function r(){t("click:append")}return W(()=>{const u=!!(a.default||e.header),c=!!(a.append||e.appendIcon);return s("div",{class:["v-date-picker-header",{"v-date-picker-header--clickable":!!e.onClick},l.value],style:o.value,onClick:i},[a.prepend&&s("div",{key:"prepend",class:"v-date-picker-header__prepend"},[a.prepend()]),u&&s(ft,{key:"content",name:e.transition},{default:()=>{var d;return[s("div",{key:e.header,class:"v-date-picker-header__content"},[((d=a.default)==null?void 0:d.call(a))??e.header])]}}),c&&s("div",{class:"v-date-picker-header__append"},[a.append?s(pe,{key:"append-defaults",disabled:!e.appendIcon,defaults:{VBtn:{icon:e.appendIcon,variant:"text"}}},{default:()=>{var d;return[(d=a.append)==null?void 0:d.call(a)]}}):s(Ae,{key:"append-btn",icon:e.appendIcon,variant:"text",onClick:r},null)])])}),{}}}),Xw=B({allowedDates:[Array,Function],disabled:Boolean,displayValue:null,modelValue:Array,month:[Number,String],max:null,min:null,showAdjacentMonths:Boolean,year:[Number,String],weekdays:{type:Array,default:()=>[0,1,2,3,4,5,6]},weeksInMonth:{type:String,default:"dynamic"},firstDayOfWeek:[Number,String]},"calendar");function Zw(e){const n=ba(),t=de(e,"modelValue",[],m=>We(m)),a=y(()=>e.displayValue?n.date(e.displayValue):t.value.length>0?n.date(t.value[0]):e.min?n.date(e.min):Array.isArray(e.allowedDates)?n.date(e.allowedDates[0]):n.date()),l=de(e,"year",void 0,m=>{const b=m!=null?Number(m):n.getYear(a.value);return n.startOfYear(n.setYear(n.date(),b))},m=>n.getYear(m)),o=de(e,"month",void 0,m=>{const b=m!=null?Number(m):n.getMonth(a.value),h=n.setYear(n.startOfMonth(n.date()),n.getYear(l.value));return n.setMonth(h,b)},m=>n.getMonth(m)),i=y(()=>{const m=Number(e.firstDayOfWeek??0);return e.weekdays.map(b=>(b+m)%7)}),r=y(()=>{const m=n.getWeekArray(o.value,e.firstDayOfWeek),b=m.flat(),h=6*7;if(e.weeksInMonth==="static"&&b.lengthi.value.includes(n.toJsDate(h).getDay())).map((h,g)=>{const k=n.toISO(h),S=!n.isSameMonth(h,o.value),C=n.isSameDay(h,n.startOfMonth(o.value)),P=n.isSameDay(h,n.endOfMonth(o.value)),x=n.isSameDay(h,o.value);return{date:h,isoDate:k,formatted:n.format(h,"keyboardDate"),year:n.getYear(h),month:n.getMonth(h),isDisabled:f(h),isWeekStart:g%7===0,isWeekEnd:g%7===6,isToday:n.isSameDay(h,b),isAdjacent:S,isHidden:S&&!e.showAdjacentMonths,isStart:C,isSelected:t.value.some(_=>n.isSameDay(h,_)),isEnd:P,isSame:x,localized:n.format(h,"dayOfMonth")}})}const c=y(()=>{const m=n.startOfWeek(a.value,e.firstDayOfWeek),b=[];for(let g=0;g<=6;g++)b.push(n.addDays(m,g));const h=n.date();return u(b,h)}),d=y(()=>{const m=r.value.flat(),b=n.date();return u(m,b)}),v=y(()=>r.value.map(m=>m.length?ob(n,m[0]):null));function f(m){if(e.disabled)return!0;const b=n.date(m);return e.min&&n.isAfter(n.date(e.min),b)||e.max&&n.isAfter(b,n.date(e.max))?!0:Array.isArray(e.allowedDates)&&e.allowedDates.length>0?!e.allowedDates.some(h=>n.isSameDay(n.date(h),b)):typeof e.allowedDates=="function"?!e.allowedDates(b):!1}return{displayValue:a,daysInMonth:d,daysInWeek:c,genDays:u,model:t,weeksInMonth:r,weekDays:i,weekNumbers:v}}const Xc=B({color:String,hideWeekdays:Boolean,multiple:[Boolean,Number,String],showWeek:Boolean,transition:{type:String,default:"picker-transition"},reverseTransition:{type:String,default:"picker-reverse-transition"},...Xw()},"VDatePickerMonth"),To=R()({name:"VDatePickerMonth",props:Xc(),emits:{"update:modelValue":e=>!0,"update:month":e=>!0,"update:year":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=H(),{daysInMonth:o,model:i,weekNumbers:r}=Zw(e),u=ba(),c=ee(),d=ee(),v=ee(!1),f=y(()=>v.value?e.reverseTransition:e.transition);e.multiple==="range"&&i.value.length>0&&(c.value=i.value[0],i.value.length>1&&(d.value=i.value[i.value.length-1]));const m=y(()=>{const k=["number","string"].includes(typeof e.multiple)?Number(e.multiple):1/0;return i.value.length>=k});Q(o,(k,S)=>{S&&(v.value=u.isBefore(k[0].date,S[0].date))});function b(k){const S=u.startOfDay(k);if(i.value.length===0?c.value=void 0:i.value.length===1&&(c.value=i.value[0],d.value=void 0),!c.value)c.value=S,i.value=[c.value];else if(d.value)c.value=k,d.value=void 0,i.value=[c.value];else{if(u.isSameDay(S,c.value)){c.value=void 0,i.value=[];return}else u.isBefore(S,c.value)?(d.value=u.endOfDay(c.value),c.value=S):d.value=u.endOfDay(S);const C=u.getDiff(d.value,c.value,"days"),P=[c.value];for(let x=1;xu.isSameDay(C,k));if(S===-1)i.value=[...i.value,k];else{const C=[...i.value];C.splice(S,1),i.value=C}}function g(k){e.multiple==="range"?b(k):e.multiple?h(k):i.value=[k]}return()=>s("div",{class:"v-date-picker-month"},[e.showWeek&&s("div",{key:"weeks",class:"v-date-picker-month__weeks"},[!e.hideWeekdays&&s("div",{key:"hide-week-days",class:"v-date-picker-month__day"},[bt(" ")]),r.value.map(k=>s("div",{class:["v-date-picker-month__day","v-date-picker-month__day--adjacent"]},[k]))]),s(ft,{name:f.value},{default:()=>{var k;return[s("div",{ref:l,key:(k=o.value[0].date)==null?void 0:k.toString(),class:"v-date-picker-month__days"},[!e.hideWeekdays&&u.getWeekdays(e.firstDayOfWeek).map(S=>s("div",{class:["v-date-picker-month__day","v-date-picker-month__weekday"]},[S])),o.value.map((S,C)=>{const P={props:{onClick:()=>g(S.date)},item:S,i:C};return m.value&&!S.isSelected&&(S.isDisabled=!0),s("div",{class:["v-date-picker-month__day",{"v-date-picker-month__day--adjacent":S.isAdjacent,"v-date-picker-month__day--hide-adjacent":S.isHidden,"v-date-picker-month__day--selected":S.isSelected,"v-date-picker-month__day--week-end":S.isWeekEnd,"v-date-picker-month__day--week-start":S.isWeekStart}],"data-v-date":S.isDisabled?void 0:S.isoDate},[(e.showAdjacentMonths||!S.isAdjacent)&&s(pe,{defaults:{VBtn:{class:"v-date-picker-month__day-btn",color:(S.isSelected||S.isToday)&&!S.isDisabled?e.color:void 0,disabled:S.isDisabled,icon:!0,ripple:!1,text:S.localized,variant:S.isDisabled?S.isToday?"outlined":"text":S.isToday&&!S.isSelected?"outlined":"flat",onClick:()=>g(S.date)}}},{default:()=>{var x;return[((x=a.day)==null?void 0:x.call(a,P))??s(Ae,P.props,null)]}})])})])]}})])}}),Zc=B({color:String,height:[String,Number],min:null,max:null,modelValue:Number,year:Number},"VDatePickerMonths"),Ao=R()({name:"VDatePickerMonths",props:Zc(),emits:{"update:modelValue":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=ba(),o=de(e,"modelValue"),i=y(()=>{let r=l.startOfYear(l.date());return e.year&&(r=l.setYear(r,e.year)),Ot(12).map(u=>{const c=l.format(r,"monthShort"),d=!!(e.min&&l.isAfter(l.startOfMonth(l.date(e.min)),r)||e.max&&l.isAfter(r,l.startOfMonth(l.date(e.max))));return r=l.getNextMonth(r),{isDisabled:d,text:c,value:u}})});return He(()=>{o.value=o.value??l.getMonth(l.date())}),W(()=>s("div",{class:"v-date-picker-months",style:{height:ne(e.height)}},[s("div",{class:"v-date-picker-months__content"},[i.value.map((r,u)=>{var v;const c={active:o.value===u,color:o.value===u?e.color:void 0,disabled:r.isDisabled,rounded:!0,text:r.text,variant:o.value===r.value?"flat":"text",onClick:()=>d(u)};function d(f){if(o.value===f){t("update:modelValue",o.value);return}o.value=f}return((v=a.month)==null?void 0:v.call(a,{month:r,i:u,props:c}))??s(Ae,z({key:"month"},c),null)})])])),{}}}),Jc=B({color:String,height:[String,Number],min:null,max:null,modelValue:Number},"VDatePickerYears"),Bo=R()({name:"VDatePickerYears",props:Jc(),emits:{"update:modelValue":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=ba(),o=de(e,"modelValue"),i=y(()=>{const u=l.getYear(l.date());let c=u-100,d=u+52;e.min&&(c=l.getYear(l.date(e.min))),e.max&&(d=l.getYear(l.date(e.max)));let v=l.startOfYear(l.date());return v=l.setYear(v,c),Ot(d-c+1,c).map(f=>{const m=l.format(v,"year");return v=l.setYear(v,l.getYear(v)+1),{text:m,value:f}})});He(()=>{o.value=o.value??l.getYear(l.date())});const r=ja();return Ke(async()=>{var u;await Te(),(u=r.el)==null||u.scrollIntoView({block:"center"})}),W(()=>s("div",{class:"v-date-picker-years",style:{height:ne(e.height)}},[s("div",{class:"v-date-picker-years__content"},[i.value.map((u,c)=>{var v;const d={ref:o.value===u.value?r:void 0,active:o.value===u.value,color:o.value===u.value?e.color:void 0,rounded:!0,text:u.text,variant:o.value===u.value?"flat":"text",onClick:()=>{if(o.value===u.value){t("update:modelValue",o.value);return}o.value=u.value}};return((v=a.year)==null?void 0:v.call(a,{year:u,i:c,props:d}))??s(Ae,z({key:"month"},d),null)})])])),{}}}),Jw=Wt("v-picker-title"),Qc=B({bgColor:String,landscape:Boolean,title:String,hideHeader:Boolean,...xl()},"VPicker"),Rr=R()({name:"VPicker",props:Qc(),setup(e,n){let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(F(e,"color"));return W(()=>{const o=Cn.filterProps(e),i=!!(e.title||t.title);return s(Cn,z(o,{color:e.bgColor,class:["v-picker",{"v-picker--landscape":e.landscape,"v-picker--with-actions":!!t.actions},e.class],style:e.style}),{default:()=>{var r;return[!e.hideHeader&&s("div",{key:"header",class:[a.value],style:[l.value]},[i&&s(Jw,{key:"picker-title"},{default:()=>{var u;return[((u=t.title)==null?void 0:u.call(t))??e.title]}}),t.header&&s("div",{class:"v-picker__header"},[t.header()])]),s("div",{class:"v-picker__body"},[(r=t.default)==null?void 0:r.call(t)]),t.actions&&s(pe,{defaults:{VBtn:{slim:!0,variant:"text"}}},{default:()=>[s("div",{class:"v-picker__actions"},[t.actions()])]})]}})}),{}}}),Qw=B({header:{type:String,default:"$vuetify.datePicker.header"},...qc(),...Xc({weeksInMonth:"static"}),...Je(Zc(),["modelValue"]),...Je(Jc(),["modelValue"]),...Qc({title:"$vuetify.datePicker.title"}),modelValue:null},"VDatePicker"),eV=R()({name:"VDatePicker",props:Qw(),emits:{"update:modelValue":e=>!0,"update:month":e=>!0,"update:year":e=>!0,"update:viewMode":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const l=ba(),{t:o}=qe(),i=de(e,"modelValue",void 0,w=>We(w),w=>e.multiple?w:w[0]),r=de(e,"viewMode"),u=y(()=>{var $;const w=l.date(($=i.value)==null?void 0:$[0]);return w&&l.isValid(w)?w:l.date()}),c=H(Number(e.month??l.getMonth(l.startOfMonth(u.value)))),d=H(Number(e.year??l.getYear(l.startOfYear(l.setMonth(u.value,c.value))))),v=ee(!1),f=y(()=>e.multiple&&i.value.length>1?o("$vuetify.datePicker.itemsSelected",i.value.length):i.value[0]&&l.isValid(i.value[0])?l.format(l.date(i.value[0]),"normalDateWithWeekday"):o(e.header)),m=y(()=>{let w=l.date();return w=l.setDate(w,1),w=l.setMonth(w,c.value),w=l.setYear(w,d.value),l.format(w,"monthAndYear")}),b=y(()=>`date-picker-header${v.value?"-reverse":""}-transition`),h=y(()=>{const w=l.date(e.min);return e.min&&l.isValid(w)?w:null}),g=y(()=>{const w=l.date(e.max);return e.max&&l.isValid(w)?w:null}),k=y(()=>{if(e.disabled)return!0;const w=[];if(r.value!=="month")w.push("prev","next");else{let $=l.date();if($=l.setYear($,d.value),$=l.setMonth($,c.value),h.value){const p=l.addDays(l.startOfMonth($),-1);l.isAfter(h.value,p)&&w.push("prev")}if(g.value){const p=l.addDays(l.endOfMonth($),1);l.isAfter(p,g.value)&&w.push("next")}}return w});function S(){c.value<11?c.value++:(d.value++,c.value=0,V(d.value)),T(c.value)}function C(){c.value>0?c.value--:(d.value--,c.value=11,V(d.value)),T(c.value)}function P(){r.value="month"}function x(){r.value=r.value==="months"?"month":"months"}function _(){r.value=r.value==="year"?"month":"year"}function T(w){r.value==="months"&&x(),t("update:month",w)}function V(w){r.value==="year"&&_(),t("update:year",w)}return Q(i,(w,$)=>{const p=We($),I=We(w);if(!I.length)return;const A=l.date(p[p.length-1]),M=l.date(I[I.length-1]),j=l.getMonth(M),Y=l.getYear(M);j!==c.value&&(c.value=j,T(c.value)),Y!==d.value&&(d.value=Y,V(d.value)),v.value=l.isBefore(A,M)}),W(()=>{const w=Rr.filterProps(e),$=Io.filterProps(e),p=$o.filterProps(e),I=To.filterProps(e),A=Je(Ao.filterProps(e),["modelValue"]),M=Je(Bo.filterProps(e),["modelValue"]),j={header:f.value,transition:b.value};return s(Rr,z(w,{class:["v-date-picker",`v-date-picker--${r.value}`,{"v-date-picker--show-week":e.showWeek},e.class],style:e.style}),{title:()=>{var Y;return((Y=a.title)==null?void 0:Y.call(a))??s("div",{class:"v-date-picker__title"},[o(e.title)])},header:()=>a.header?s(pe,{defaults:{VDatePickerHeader:{...j}}},{default:()=>{var Y;return[(Y=a.header)==null?void 0:Y.call(a,j)]}}):s($o,z({key:"header"},p,j,{onClick:r.value!=="month"?P:void 0}),{...a,default:void 0}),default:()=>s(ae,null,[s(Io,z($,{disabled:k.value,text:m.value,"onClick:next":S,"onClick:prev":C,"onClick:month":x,"onClick:year":_}),null),s(ua,{hideOnLeave:!0},{default:()=>[r.value==="months"?s(Ao,z({key:"date-picker-months"},A,{modelValue:c.value,"onUpdate:modelValue":[Y=>c.value=Y,T],min:h.value,max:g.value,year:d.value}),null):r.value==="year"?s(Bo,z({key:"date-picker-years"},M,{modelValue:d.value,"onUpdate:modelValue":[Y=>d.value=Y,V],min:h.value,max:g.value}),null):s(To,z({key:"date-picker-month"},I,{modelValue:i.value,"onUpdate:modelValue":Y=>i.value=Y,month:c.value,"onUpdate:month":[Y=>c.value=Y,T],year:d.value,"onUpdate:year":[Y=>d.value=Y,V],min:h.value,max:g.value}),null)]})]),actions:a.actions})}),{}}}),tV=B({actionText:String,bgColor:String,color:String,icon:ve,image:String,justify:{type:String,default:"center"},headline:String,title:String,text:String,textWidth:{type:[Number,String],default:500},href:String,to:String,...ie(),...Qe(),...jt({size:void 0}),...Pe()},"VEmptyState"),nV=R()({name:"VEmptyState",props:tV(),emits:{"click:action":e=>!0},setup(e,n){let{emit:t,slots:a}=n;const{themeClasses:l}=De(e),{backgroundColorClasses:o,backgroundColorStyles:i}=Le(F(e,"bgColor")),{dimensionStyles:r}=et(e),{displayClasses:u}=$t();function c(d){t("click:action",d)}return W(()=>{var g,k,S;const d=!!(a.actions||e.actionText),v=!!(a.headline||e.headline),f=!!(a.title||e.title),m=!!(a.text||e.text),b=!!(a.media||e.image||e.icon),h=e.size||(e.image?200:96);return s("div",{class:["v-empty-state",{[`v-empty-state--${e.justify}`]:!0},l.value,o.value,u.value,e.class],style:[i.value,r.value,e.style]},[b&&s("div",{key:"media",class:"v-empty-state__media"},[a.media?s(pe,{key:"media-defaults",defaults:{VImg:{src:e.image,height:h},VIcon:{size:h,icon:e.icon}}},{default:()=>[a.media()]}):s(ae,null,[e.image?s(Yt,{key:"image",src:e.image,height:h},null):e.icon?s(Be,{key:"icon",color:e.color,size:h,icon:e.icon},null):void 0])]),v&&s("div",{key:"headline",class:"v-empty-state__headline"},[((g=a.headline)==null?void 0:g.call(a))??e.headline]),f&&s("div",{key:"title",class:"v-empty-state__title"},[((k=a.title)==null?void 0:k.call(a))??e.title]),m&&s("div",{key:"text",class:"v-empty-state__text",style:{maxWidth:ne(e.textWidth)}},[((S=a.text)==null?void 0:S.call(a))??e.text]),a.default&&s("div",{key:"content",class:"v-empty-state__content"},[a.default()]),d&&s("div",{key:"actions",class:"v-empty-state__actions"},[s(pe,{defaults:{VBtn:{class:"v-empty-state__action-btn",color:e.color??"surface-variant",text:e.actionText}}},{default:()=>{var C;return[((C=a.actions)==null?void 0:C.call(a,{props:{onClick:c}}))??s(Ae,{onClick:c},null)]}})])])}),{}}}),ha=Symbol.for("vuetify:v-expansion-panel"),ed=B({...ie(),...Si()},"VExpansionPanelText"),Do=R()({name:"VExpansionPanelText",props:ed(),setup(e,n){let{slots:t}=n;const a=xe(ha);if(!a)throw new Error("[Vuetify] v-expansion-panel-text needs to be placed inside v-expansion-panel");const{hasContent:l,onAfterLeave:o}=wi(e,a.isSelected);return W(()=>s(vl,{onAfterLeave:o},{default:()=>{var i;return[je(s("div",{class:["v-expansion-panel-text",e.class],style:e.style},[t.default&&l.value&&s("div",{class:"v-expansion-panel-text__wrapper"},[(i=t.default)==null?void 0:i.call(t)])]),[[Mt,a.isSelected.value]])]}})),{}}}),td=B({color:String,expandIcon:{type:ve,default:"$expand"},collapseIcon:{type:ve,default:"$collapse"},hideActions:Boolean,focusable:Boolean,static:Boolean,ripple:{type:[Boolean,Object],default:!1},readonly:Boolean,...ie(),...Qe()},"VExpansionPanelTitle"),Lo=R()({name:"VExpansionPanelTitle",directives:{Ripple:Zt},props:td(),setup(e,n){let{slots:t}=n;const a=xe(ha);if(!a)throw new Error("[Vuetify] v-expansion-panel-title needs to be placed inside v-expansion-panel");const{backgroundColorClasses:l,backgroundColorStyles:o}=Le(e,"color"),{dimensionStyles:i}=et(e),r=y(()=>({collapseIcon:e.collapseIcon,disabled:a.disabled.value,expanded:a.isSelected.value,expandIcon:e.expandIcon,readonly:e.readonly})),u=y(()=>a.isSelected.value?e.collapseIcon:e.expandIcon);return W(()=>{var c;return je(s("button",{class:["v-expansion-panel-title",{"v-expansion-panel-title--active":a.isSelected.value,"v-expansion-panel-title--focusable":e.focusable,"v-expansion-panel-title--static":e.static},l.value,e.class],style:[o.value,i.value,e.style],type:"button",tabindex:a.disabled.value?-1:void 0,disabled:a.disabled.value,"aria-expanded":a.isSelected.value,onClick:e.readonly?void 0:a.toggle},[s("span",{class:"v-expansion-panel-title__overlay"},null),(c=t.default)==null?void 0:c.call(t,r.value),!e.hideActions&&s(pe,{defaults:{VIcon:{icon:u.value}}},{default:()=>{var d;return[s("span",{class:"v-expansion-panel-title__icon"},[((d=t.actions)==null?void 0:d.call(t,r.value))??s(Be,null,null)])]}})]),[[Ct("ripple"),e.ripple]])}),{}}}),nd=B({title:String,text:String,bgColor:String,...at(),...Ln(),...ze(),...Ve(),...td(),...ed()},"VExpansionPanel"),aV=R()({name:"VExpansionPanel",props:nd(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const a=Mn(e,ha),{backgroundColorClasses:l,backgroundColorStyles:o}=Le(e,"bgColor"),{elevationClasses:i}=st(e),{roundedClasses:r}=Ue(e),u=y(()=>(a==null?void 0:a.disabled.value)||e.disabled),c=y(()=>a.group.items.value.reduce((f,m,b)=>(a.group.selected.value.includes(m.id)&&f.push(b),f),[])),d=y(()=>{const f=a.group.items.value.findIndex(m=>m.id===a.id);return!a.isSelected.value&&c.value.some(m=>m-f===1)}),v=y(()=>{const f=a.group.items.value.findIndex(m=>m.id===a.id);return!a.isSelected.value&&c.value.some(m=>m-f===-1)});return Re(ha,a),W(()=>{const f=!!(t.text||e.text),m=!!(t.title||e.title),b=Lo.filterProps(e),h=Do.filterProps(e);return s(e.tag,{class:["v-expansion-panel",{"v-expansion-panel--active":a.isSelected.value,"v-expansion-panel--before-active":d.value,"v-expansion-panel--after-active":v.value,"v-expansion-panel--disabled":u.value},r.value,l.value,e.class],style:[o.value,e.style]},{default:()=>[s("div",{class:["v-expansion-panel__shadow",...i.value]},null),s(pe,{defaults:{VExpansionPanelTitle:{...b},VExpansionPanelText:{...h}}},{default:()=>{var g;return[m&&s(Lo,{key:"title"},{default:()=>[t.title?t.title():e.title]}),f&&s(Do,{key:"text"},{default:()=>[t.text?t.text():e.text]}),(g=t.default)==null?void 0:g.call(t)]}})]})}),{groupItem:a}}}),lV=["default","accordion","inset","popout"],oV=B({flat:Boolean,...Dn(),...qo(nd(),["bgColor","collapseIcon","color","eager","elevation","expandIcon","focusable","hideActions","readonly","ripple","rounded","tile","static"]),...Pe(),...ie(),...Ve(),variant:{type:String,default:"default",validator:e=>lV.includes(e)}},"VExpansionPanels"),iV=R()({name:"VExpansionPanels",props:oV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{next:a,prev:l}=rn(e,ha),{themeClasses:o}=De(e),i=y(()=>e.variant&&`v-expansion-panels--variant-${e.variant}`);return Ge({VExpansionPanel:{bgColor:F(e,"bgColor"),collapseIcon:F(e,"collapseIcon"),color:F(e,"color"),eager:F(e,"eager"),elevation:F(e,"elevation"),expandIcon:F(e,"expandIcon"),focusable:F(e,"focusable"),hideActions:F(e,"hideActions"),readonly:F(e,"readonly"),ripple:F(e,"ripple"),rounded:F(e,"rounded"),static:F(e,"static")}}),W(()=>s(e.tag,{class:["v-expansion-panels",{"v-expansion-panels--flat":e.flat,"v-expansion-panels--tile":e.tile},o.value,i.value,e.class],style:e.style},{default:()=>{var r;return[(r=t.default)==null?void 0:r.call(t,{prev:l,next:a})]}})),{next:a,prev:l}}}),rV=B({app:Boolean,appear:Boolean,extended:Boolean,layout:Boolean,offset:Boolean,modelValue:{type:Boolean,default:!0},...Je(hl({active:!0}),["location"]),...$n(),...Xt(),...Et({transition:"fab-transition"})},"VFab"),sV=R()({name:"VFab",props:rV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),l=ee(56),o=H(),{resizeRef:i}=Lt(v=>{v.length&&(l.value=v[0].target.clientHeight)}),r=y(()=>e.app||e.absolute),u=y(()=>{var v;return r.value?((v=e.location)==null?void 0:v.split(" ").shift())??"bottom":!1}),c=y(()=>{var v;return r.value?((v=e.location)==null?void 0:v.split(" ")[1])??"end":!1});yt(()=>e.app,()=>{const v=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:u,layoutSize:y(()=>e.layout?l.value+24:0),elementSize:y(()=>l.value+24),active:y(()=>e.app&&a.value),absolute:F(e,"absolute")});He(()=>{o.value=v.layoutItemStyles.value})});const d=H();return W(()=>{const v=Ae.filterProps(e);return s("div",{ref:d,class:["v-fab",{"v-fab--absolute":e.absolute,"v-fab--app":!!e.app,"v-fab--extended":e.extended,"v-fab--offset":e.offset,[`v-fab--${u.value}`]:r.value,[`v-fab--${c.value}`]:r.value},e.class],style:[e.app?{...o.value}:{height:"inherit",width:void 0},e.style]},[s("div",{class:"v-fab__container"},[s(ft,{appear:e.appear,transition:e.transition},{default:()=>[je(s(Ae,z({ref:i},v,{active:void 0,location:void 0}),t),[[Mt,e.active]])]})])])}),{}}}),uV=B({chips:Boolean,counter:Boolean,counterSizeString:{type:String,default:"$vuetify.fileInput.counterSize"},counterString:{type:String,default:"$vuetify.fileInput.counter"},hideInput:Boolean,multiple:Boolean,showSize:{type:[Boolean,Number,String],default:!1,validator:e=>typeof e=="boolean"||[1e3,1024].includes(Number(e))},...Qt({prependIcon:"$file"}),modelValue:{type:[Array,Object],default:e=>e.multiple?[]:null,validator:e=>We(e).every(n=>n!=null&&typeof n=="object")},...Pa({clearable:!0})},"VFileInput"),cV=R()({name:"VFileInput",inheritAttrs:!1,props:uV(),emits:{"click:control":e=>!0,"mousedown:control":e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{t:o}=qe(),i=de(e,"modelValue",e.modelValue,w=>We(w),w=>!e.multiple&&Array.isArray(w)?w[0]:w),{isFocused:r,focus:u,blur:c}=Jt(e),d=y(()=>typeof e.showSize!="boolean"?e.showSize:void 0),v=y(()=>(i.value??[]).reduce((w,$)=>{let{size:p=0}=$;return w+p},0)),f=y(()=>Ji(v.value,d.value)),m=y(()=>(i.value??[]).map(w=>{const{name:$="",size:p=0}=w;return e.showSize?`${$} (${Ji(p,d.value)})`:$})),b=y(()=>{var $;const w=(($=i.value)==null?void 0:$.length)??0;return e.showSize?o(e.counterSizeString,w,f.value):o(e.counterString,w)}),h=H(),g=H(),k=H(),S=y(()=>r.value||e.active),C=y(()=>["plain","underlined"].includes(e.variant));function P(){var w;k.value!==document.activeElement&&((w=k.value)==null||w.focus()),r.value||u()}function x(w){var $;($=k.value)==null||$.click()}function _(w){a("mousedown:control",w)}function T(w){var $;($=k.value)==null||$.click(),a("click:control",w)}function V(w){w.stopPropagation(),P(),Te(()=>{i.value=[],Zo(e["onClick:clear"],w)})}return Q(i,w=>{(!Array.isArray(w)||!w.length)&&k.value&&(k.value.value="")}),W(()=>{const w=!!(l.counter||e.counter),$=!!(w||l.details),[p,I]=ln(t),{modelValue:A,...M}=ct.filterProps(e),j=Vi(e);return s(ct,z({ref:h,modelValue:i.value,"onUpdate:modelValue":Y=>i.value=Y,class:["v-file-input",{"v-file-input--chips":!!e.chips,"v-file-input--hide":e.hideInput,"v-input--plain-underlined":C.value},e.class],style:e.style,"onClick:prepend":x},p,M,{centerAffix:!C.value,focused:r.value}),{...l,default:Y=>{let{id:le,isDisabled:re,isDirty:N,isReadonly:E,isValid:O}=Y;return s(na,z({ref:g,"prepend-icon":e.prependIcon,onMousedown:_,onClick:T,"onClick:clear":V,"onClick:prependInner":e["onClick:prependInner"],"onClick:appendInner":e["onClick:appendInner"]},j,{id:le.value,active:S.value||N.value,dirty:N.value||e.dirty,disabled:re.value,focused:r.value,error:O.value===!1}),{...l,default:te=>{var ye;let{props:{class:se,...ue}}=te;return s(ae,null,[s("input",z({ref:k,type:"file",readonly:E.value,disabled:re.value,multiple:e.multiple,name:e.name,onClick:G=>{G.stopPropagation(),E.value&&G.preventDefault(),P()},onChange:G=>{if(!G.target)return;const ce=G.target;i.value=[...ce.files??[]]},onFocus:P,onBlur:c},ue,I),null),s("div",{class:se},[!!((ye=i.value)!=null&&ye.length)&&!e.hideInput&&(l.selection?l.selection({fileNames:m.value,totalBytes:v.value,totalBytesReadable:f.value}):e.chips?m.value.map(G=>s(ta,{key:G,size:"small",text:G},null)):m.value.join(", "))])])}})},details:$?Y=>{var le,re;return s(ae,null,[(le=l.details)==null?void 0:le.call(l,Y),w&&s(ae,null,[s("span",null,null),s(Sl,{active:!!((re=i.value)!=null&&re.length),value:b.value,disabled:e.disabled},l.counter)])])}:void 0})}),At({},h,g,k)}}),dV=B({app:Boolean,color:String,height:{type:[Number,String],default:"auto"},...wt(),...ie(),...at(),...$n(),...ze(),...Ve({tag:"footer"}),...Pe()},"VFooter"),vV=R()({name:"VFooter",props:dV(),setup(e,n){let{slots:t}=n;const a=H(),{themeClasses:l}=De(e),{backgroundColorClasses:o,backgroundColorStyles:i}=Le(F(e,"color")),{borderClasses:r}=_t(e),{elevationClasses:u}=st(e),{roundedClasses:c}=Ue(e),d=ee(32),{resizeRef:v}=Lt(m=>{m.length&&(d.value=m[0].target.clientHeight)}),f=y(()=>e.height==="auto"?d.value:parseInt(e.height,10));return yt(()=>e.app,()=>{const m=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:y(()=>"bottom"),layoutSize:f,elementSize:y(()=>e.height==="auto"?void 0:f.value),active:y(()=>e.app),absolute:F(e,"absolute")});He(()=>{a.value=m.layoutItemStyles.value})}),W(()=>s(e.tag,{ref:v,class:["v-footer",l.value,o.value,r.value,u.value,c.value,e.class],style:[i.value,e.app?a.value:{height:ne(e.height)},e.style]},t)),{}}}),fV=B({...ie(),...Sk()},"VForm"),mV=R()({name:"VForm",props:fV(),emits:{"update:modelValue":e=>!0,submit:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=wk(e),o=H();function i(u){u.preventDefault(),l.reset()}function r(u){const c=u,d=l.validate();c.then=d.then.bind(d),c.catch=d.catch.bind(d),c.finally=d.finally.bind(d),a("submit",c),c.defaultPrevented||d.then(v=>{var m;let{valid:f}=v;f&&((m=o.value)==null||m.submit())}),c.preventDefault()}return W(()=>{var u;return s("form",{ref:o,class:["v-form",e.class],style:e.style,novalidate:!0,onReset:i,onSubmit:r},[(u=t.default)==null?void 0:u.call(t,l)])}),At(l,o)}}),gV=B({disabled:Boolean,modelValue:{type:Boolean,default:null},...bi()},"VHover"),hV=R()({name:"VHover",props:gV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{runOpenDelay:l,runCloseDelay:o}=ki(e,i=>!e.disabled&&(a.value=i));return()=>{var i;return(i=t.default)==null?void 0:i.call(t,{isHovering:a.value,props:{onMouseenter:l,onMouseleave:o}})}}}),yV=B({color:String,direction:{type:String,default:"vertical",validator:e=>["vertical","horizontal"].includes(e)},side:{type:String,default:"end",validator:e=>["start","end","both"].includes(e)},mode:{type:String,default:"intersect",validator:e=>["intersect","manual"].includes(e)},margin:[Number,String],loadMoreText:{type:String,default:"$vuetify.infiniteScroll.loadMore"},emptyText:{type:String,default:"$vuetify.infiniteScroll.empty"},...Qe(),...Ve()},"VInfiniteScroll"),Hr=pt({name:"VInfiniteScrollIntersect",props:{side:{type:String,required:!0},rootMargin:String},emits:{intersect:(e,n)=>!0},setup(e,n){let{emit:t}=n;const{intersectionRef:a,isIntersecting:l}=fl();return Q(l,async o=>{t("intersect",e.side,o)}),W(()=>s("div",{class:"v-infinite-scroll-intersect",style:{"--v-infinite-margin-size":e.rootMargin},ref:a},[bt(" ")])),{}}}),bV=R()({name:"VInfiniteScroll",props:yV(),emits:{load:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=H(),o=ee("ok"),i=ee("ok"),r=y(()=>ne(e.margin)),u=ee(!1);function c(x){if(!l.value)return;const _=e.direction==="vertical"?"scrollTop":"scrollLeft";l.value[_]=x}function d(){if(!l.value)return 0;const x=e.direction==="vertical"?"scrollTop":"scrollLeft";return l.value[x]}function v(){if(!l.value)return 0;const x=e.direction==="vertical"?"scrollHeight":"scrollWidth";return l.value[x]}function f(){if(!l.value)return 0;const x=e.direction==="vertical"?"clientHeight":"clientWidth";return l.value[x]}Ke(()=>{l.value&&(e.side==="start"?c(v()):e.side==="both"&&c(v()/2-f()/2))});function m(x,_){x==="start"?o.value=_:x==="end"&&(i.value=_)}function b(x){return x==="start"?o.value:i.value}let h=0;function g(x,_){u.value=_,u.value&&k(x)}function k(x){if(e.mode!=="manual"&&!u.value)return;const _=b(x);if(!l.value||["empty","loading"].includes(_))return;h=v(),m(x,"loading");function T(V){m(x,V),Te(()=>{V==="empty"||V==="error"||(V==="ok"&&x==="start"&&c(v()-h+d()),e.mode!=="manual"&&Te(()=>{window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{k(x)})})})}))})}a("load",{side:x,done:T})}const{t:S}=qe();function C(x,_){var w,$,p,I,A;if(e.side!==x&&e.side!=="both")return;const T=()=>k(x),V={side:x,props:{onClick:T,color:e.color}};return _==="error"?(w=t.error)==null?void 0:w.call(t,V):_==="empty"?(($=t.empty)==null?void 0:$.call(t,V))??s("div",null,[S(e.emptyText)]):e.mode==="manual"?_==="loading"?((p=t.loading)==null?void 0:p.call(t,V))??s(Kn,{indeterminate:!0,color:e.color},null):((I=t["load-more"])==null?void 0:I.call(t,V))??s(Ae,{variant:"outlined",color:e.color,onClick:T},{default:()=>[S(e.loadMoreText)]}):((A=t.loading)==null?void 0:A.call(t,V))??s(Kn,{indeterminate:!0,color:e.color},null)}const{dimensionStyles:P}=et(e);W(()=>{const x=e.tag,_=e.side==="start"||e.side==="both",T=e.side==="end"||e.side==="both",V=e.mode==="intersect";return s(x,{ref:l,class:["v-infinite-scroll",`v-infinite-scroll--${e.direction}`,{"v-infinite-scroll--start":_,"v-infinite-scroll--end":T}],style:P.value},{default:()=>{var w;return[s("div",{class:"v-infinite-scroll__side"},[C("start",o.value)]),_&&V&&s(Hr,{key:"start",side:"start",onIntersect:g,rootMargin:r.value},null),(w=t.default)==null?void 0:w.call(t),T&&V&&s(Hr,{key:"end",side:"end",onIntersect:g,rootMargin:r.value},null),s("div",{class:"v-infinite-scroll__side"},[C("end",i.value)])]}})})}}),ad=Symbol.for("vuetify:v-item-group"),kV=B({...ie(),...Dn({selectedClass:"v-item--selected"}),...Ve(),...Pe()},"VItemGroup"),SV=R()({name:"VItemGroup",props:kV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{isSelected:l,select:o,next:i,prev:r,selected:u}=rn(e,ad);return()=>s(e.tag,{class:["v-item-group",a.value,e.class],style:e.style},{default:()=>{var c;return[(c=t.default)==null?void 0:c.call(t,{isSelected:l,select:o,next:i,prev:r,selected:u.value})]}})}}),wV=R()({name:"VItem",props:Ln(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const{isSelected:a,select:l,toggle:o,selectedClass:i,value:r,disabled:u}=Mn(e,ad);return()=>{var c;return(c=t.default)==null?void 0:c.call(t,{isSelected:a.value,selectedClass:i.value,select:l,toggle:o,value:r.value,disabled:u.value})}}}),VV=Wt("v-kbd","kbd"),CV=B({...ie(),...Qe(),...Ys()},"VLayout"),pV=R()({name:"VLayout",props:CV(),setup(e,n){let{slots:t}=n;const{layoutClasses:a,layoutStyles:l,getLayoutItem:o,items:i,layoutRef:r}=Ks(e),{dimensionStyles:u}=et(e);return W(()=>{var c;return s("div",{ref:r,class:[a.value,e.class],style:[u.value,l.value,e.style]},[(c=t.default)==null?void 0:c.call(t)])}),{getLayoutItem:o,items:i}}}),xV=B({position:{type:String,required:!0},size:{type:[Number,String],default:300},modelValue:Boolean,...ie(),...$n()},"VLayoutItem"),_V=R()({name:"VLayoutItem",props:xV(),setup(e,n){let{slots:t}=n;const{layoutItemStyles:a}=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:F(e,"position"),elementSize:F(e,"size"),layoutSize:F(e,"size"),active:F(e,"modelValue"),absolute:F(e,"absolute")});return()=>{var l;return s("div",{class:["v-layout-item",e.class],style:[a.value,e.style]},[(l=t.default)==null?void 0:l.call(t)])}}}),PV=B({modelValue:Boolean,options:{type:Object,default:()=>({root:void 0,rootMargin:void 0,threshold:void 0})},...ie(),...Qe(),...Ve(),...Et({transition:"fade-transition"})},"VLazy"),IV=R()({name:"VLazy",directives:{intersect:ka},props:PV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{dimensionStyles:a}=et(e),l=de(e,"modelValue");function o(i){l.value||(l.value=i)}return W(()=>je(s(e.tag,{class:["v-lazy",e.class],style:[a.value,e.style]},{default:()=>[l.value&&s(ft,{transition:e.transition,appear:!0},{default:()=>{var i;return[(i=t.default)==null?void 0:i.call(t)]}})]}),[[Ct("intersect"),{handler:o,options:e.options},null]])),{}}}),$V=B({locale:String,fallbackLocale:String,messages:Object,rtl:{type:Boolean,default:void 0},...ie()},"VLocaleProvider"),TV=R()({name:"VLocaleProvider",props:$V(),setup(e,n){let{slots:t}=n;const{rtlClasses:a}=hy(e);return W(()=>{var l;return s("div",{class:["v-locale-provider",a.value,e.class],style:e.style},[(l=t.default)==null?void 0:l.call(t)])}),{}}}),AV=B({scrollable:Boolean,...ie(),...Qe(),...Ve({tag:"main"})},"VMain"),BV=R()({name:"VMain",props:AV(),setup(e,n){let{slots:t}=n;const{dimensionStyles:a}=et(e),{mainStyles:l}=Us(),{ssrBootStyles:o}=An();return W(()=>s(e.tag,{class:["v-main",{"v-main--scrollable":e.scrollable},e.class],style:[l.value,o.value,a.value,e.style]},{default:()=>{var i,r;return[e.scrollable?s("div",{class:"v-main__scroller"},[(i=t.default)==null?void 0:i.call(t)]):(r=t.default)==null?void 0:r.call(t)]}})),{}}});function DV(e){let{rootEl:n,isSticky:t,layoutItemStyles:a}=e;const l=ee(!1),o=ee(0),i=y(()=>{const c=typeof l.value=="boolean"?"top":l.value;return[t.value?{top:"auto",bottom:"auto",height:void 0}:void 0,l.value?{[c]:ne(o.value)}:{top:a.value.top}]});Ke(()=>{Q(t,c=>{c?window.addEventListener("scroll",u,{passive:!0}):window.removeEventListener("scroll",u)},{immediate:!0})}),it(()=>{window.removeEventListener("scroll",u)});let r=0;function u(){const c=r>window.scrollY?"up":"down",d=n.value.getBoundingClientRect(),v=parseFloat(a.value.top??0),f=window.scrollY-Math.max(0,o.value-v),m=d.height+Math.max(o.value,v)-window.scrollY-window.innerHeight,b=parseFloat(getComputedStyle(n.value).getPropertyValue("--v-body-scroll-y"))||0;d.height0;t--){if(e[t].t===e[t-1].t)continue;const a=zr(n),l=(e[t].d-e[t-1].d)/(e[t].t-e[t-1].t);n+=(l-a)*Math.abs(l),t===e.length-1&&(n*=.5)}return zr(n)*1e3}function EV(){const e={};function n(l){Array.from(l.changedTouches).forEach(o=>{(e[o.identifier]??(e[o.identifier]=new Th(MV))).push([l.timeStamp,o])})}function t(l){Array.from(l.changedTouches).forEach(o=>{delete e[o.identifier]})}function a(l){var c;const o=(c=e[l])==null?void 0:c.values().reverse();if(!o)throw new Error(`No samples for touch id ${l}`);const i=o[0],r=[],u=[];for(const d of o){if(i[0]-d[0]>LV)break;r.push({t:d[0],d:d[1].clientX}),u.push({t:d[0],d:d[1].clientY})}return{x:Wr(r),y:Wr(u),get direction(){const{x:d,y:v}=this,[f,m]=[Math.abs(d),Math.abs(v)];return f>m&&d>=0?"right":f>m&&d<=0?"left":m>f&&v>=0?"down":m>f&&v<=0?"up":FV()}}}return{addMovement:n,endTouch:t,getVelocity:a}}function FV(){throw new Error}function OV(e){let{el:n,isActive:t,isTemporary:a,width:l,touchless:o,position:i}=e;Ke(()=>{window.addEventListener("touchstart",S,{passive:!0}),window.addEventListener("touchmove",C,{passive:!1}),window.addEventListener("touchend",P,{passive:!0})}),it(()=>{window.removeEventListener("touchstart",S),window.removeEventListener("touchmove",C),window.removeEventListener("touchend",P)});const r=y(()=>["left","right"].includes(i.value)),{addMovement:u,endTouch:c,getVelocity:d}=EV();let v=!1;const f=ee(!1),m=ee(0),b=ee(0);let h;function g(_,T){return(i.value==="left"?_:i.value==="right"?document.documentElement.clientWidth-_:i.value==="top"?_:i.value==="bottom"?document.documentElement.clientHeight-_:Hn())-(T?l.value:0)}function k(_){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;const V=i.value==="left"?(_-b.value)/l.value:i.value==="right"?(document.documentElement.clientWidth-_-b.value)/l.value:i.value==="top"?(_-b.value)/l.value:i.value==="bottom"?(document.documentElement.clientHeight-_-b.value)/l.value:Hn();return T?Math.max(0,Math.min(1,V)):V}function S(_){if(o.value)return;const T=_.changedTouches[0].clientX,V=_.changedTouches[0].clientY,w=25,$=i.value==="left"?Tdocument.documentElement.clientWidth-w:i.value==="top"?Vdocument.documentElement.clientHeight-w:Hn(),p=t.value&&(i.value==="left"?Tdocument.documentElement.clientWidth-l.value:i.value==="top"?Vdocument.documentElement.clientHeight-l.value:Hn());($||p||t.value&&a.value)&&(h=[T,V],b.value=g(r.value?T:V,t.value),m.value=k(r.value?T:V),v=b.value>-20&&b.value<80,c(_),u(_))}function C(_){const T=_.changedTouches[0].clientX,V=_.changedTouches[0].clientY;if(v){if(!_.cancelable){v=!1;return}const $=Math.abs(T-h[0]),p=Math.abs(V-h[1]);(r.value?$>p&&$>3:p>$&&p>3)?(f.value=!0,v=!1):(r.value?p:$)>3&&(v=!1)}if(!f.value)return;_.preventDefault(),u(_);const w=k(r.value?T:V,!1);m.value=Math.max(0,Math.min(1,w)),w>1?b.value=g(r.value?T:V,!0):w<0&&(b.value=g(r.value?T:V,!1))}function P(_){if(v=!1,!f.value)return;u(_),f.value=!1;const T=d(_.changedTouches[0].identifier),V=Math.abs(T.x),w=Math.abs(T.y);(r.value?V>w&&V>400:w>V&&w>3)?t.value=T.direction===({left:"right",right:"left",top:"down",bottom:"up"}[i.value]||Hn()):t.value=m.value>.5}const x=y(()=>f.value?{transform:i.value==="left"?`translateX(calc(-100% + ${m.value*l.value}px))`:i.value==="right"?`translateX(calc(100% - ${m.value*l.value}px))`:i.value==="top"?`translateY(calc(-100% + ${m.value*l.value}px))`:i.value==="bottom"?`translateY(calc(100% - ${m.value*l.value}px))`:Hn(),transition:"none"}:void 0);return yt(f,()=>{var V,w;const _=((V=n.value)==null?void 0:V.style.transform)??null,T=((w=n.value)==null?void 0:w.style.transition)??null;He(()=>{var $,p,I,A;(p=n.value)==null||p.style.setProperty("transform",(($=x.value)==null?void 0:$.transform)||"none"),(A=n.value)==null||A.style.setProperty("transition",((I=x.value)==null?void 0:I.transition)||null)}),mt(()=>{var $,p;($=n.value)==null||$.style.setProperty("transform",_),(p=n.value)==null||p.style.setProperty("transition",T)})}),{isDragging:f,dragProgress:m,dragStyles:x}}function Hn(){throw new Error}const NV=["start","end","left","right","top","bottom"],RV=B({color:String,disableResizeWatcher:Boolean,disableRouteWatcher:Boolean,expandOnHover:Boolean,floating:Boolean,modelValue:{type:Boolean,default:null},permanent:Boolean,rail:{type:Boolean,default:null},railWidth:{type:[Number,String],default:56},scrim:{type:[Boolean,String],default:!0},image:String,temporary:Boolean,persistent:Boolean,touchless:Boolean,width:{type:[Number,String],default:256},location:{type:String,default:"start",validator:e=>NV.includes(e)},sticky:Boolean,...wt(),...ie(),...bi(),...In({mobile:null}),...at(),...$n(),...ze(),...Ve({tag:"nav"}),...Pe()},"VNavigationDrawer"),HV=R()({name:"VNavigationDrawer",props:RV(),emits:{"update:modelValue":e=>!0,"update:rail":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{isRtl:o}=nt(),{themeClasses:i}=De(e),{borderClasses:r}=_t(e),{backgroundColorClasses:u,backgroundColorStyles:c}=Le(F(e,"color")),{elevationClasses:d}=st(e),{displayClasses:v,mobile:f}=$t(e),{roundedClasses:m}=Ue(e),b=ou(),h=de(e,"modelValue",null,O=>!!O),{ssrBootStyles:g}=An(),{scopeId:k}=Fn(),S=H(),C=ee(!1),{runOpenDelay:P,runCloseDelay:x}=ki(e,O=>{C.value=O}),_=y(()=>e.rail&&e.expandOnHover&&C.value?Number(e.width):Number(e.rail?e.railWidth:e.width)),T=y(()=>no(e.location,o.value)),V=y(()=>e.persistent),w=y(()=>!e.permanent&&(f.value||e.temporary)),$=y(()=>e.sticky&&!w.value&&T.value!=="bottom");yt(()=>e.expandOnHover&&e.rail!=null,()=>{Q(C,O=>a("update:rail",!O))}),yt(()=>!e.disableResizeWatcher,()=>{Q(w,O=>!e.permanent&&Te(()=>h.value=!O))}),yt(()=>!e.disableRouteWatcher&&!!b,()=>{Q(b.currentRoute,()=>w.value&&(h.value=!1))}),Q(()=>e.permanent,O=>{O&&(h.value=!0)}),e.modelValue==null&&!w.value&&(h.value=e.permanent||!f.value);const{isDragging:p,dragProgress:I}=OV({el:S,isActive:h,isTemporary:w,width:_,touchless:F(e,"touchless"),position:T}),A=y(()=>{const O=w.value?0:e.rail&&e.expandOnHover?Number(e.railWidth):_.value;return p.value?O*I.value:O}),M=y(()=>["top","bottom"].includes(e.location)?0:_.value),{layoutItemStyles:j,layoutItemScrimStyles:Y}=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:T,layoutSize:A,elementSize:M,active:y(()=>h.value||p.value),disableTransitions:y(()=>p.value),absolute:y(()=>e.absolute||$.value&&typeof le.value!="string")}),{isStuck:le,stickyStyles:re}=DV({rootEl:S,isSticky:$,layoutItemStyles:j}),N=Le(y(()=>typeof e.scrim=="string"?e.scrim:null)),E=y(()=>({...p.value?{opacity:I.value*.2,transition:"none"}:void 0,...Y.value}));return Ge({VList:{bgColor:"transparent"}}),W(()=>{const O=l.image||e.image;return s(ae,null,[s(e.tag,z({ref:S,onMouseenter:P,onMouseleave:x,class:["v-navigation-drawer",`v-navigation-drawer--${T.value}`,{"v-navigation-drawer--expand-on-hover":e.expandOnHover,"v-navigation-drawer--floating":e.floating,"v-navigation-drawer--is-hovering":C.value,"v-navigation-drawer--rail":e.rail,"v-navigation-drawer--temporary":w.value,"v-navigation-drawer--persistent":V.value,"v-navigation-drawer--active":h.value,"v-navigation-drawer--sticky":$.value},i.value,u.value,r.value,v.value,d.value,m.value,e.class],style:[c.value,j.value,g.value,re.value,e.style,["top","bottom"].includes(T.value)?{height:"auto"}:{}]},k,t),{default:()=>{var te,se,ue;return[O&&s("div",{key:"image",class:"v-navigation-drawer__img"},[l.image?s(pe,{key:"image-defaults",disabled:!e.image,defaults:{VImg:{alt:"",cover:!0,height:"inherit",src:e.image}}},l.image):s(Yt,{key:"image-img",alt:"",cover:!0,height:"inherit",src:e.image},null)]),l.prepend&&s("div",{class:"v-navigation-drawer__prepend"},[(te=l.prepend)==null?void 0:te.call(l)]),s("div",{class:"v-navigation-drawer__content"},[(se=l.default)==null?void 0:se.call(l)]),l.append&&s("div",{class:"v-navigation-drawer__append"},[(ue=l.append)==null?void 0:ue.call(l)])]}}),s(Dt,{name:"fade-transition"},{default:()=>[w.value&&(p.value||h.value)&&!!e.scrim&&s("div",z({class:["v-navigation-drawer__scrim",N.backgroundColorClasses.value],style:[E.value,N.backgroundColorStyles.value],onClick:()=>{V.value||(h.value=!1)}},k),null)]})])}),{isStuck:le}}}),zV=pt({name:"VNoSsr",setup(e,n){let{slots:t}=n;const a=ju();return()=>{var l;return a.value&&((l=t.default)==null?void 0:l.call(t))}}}),WV=B({autofocus:Boolean,divider:String,focusAll:Boolean,label:{type:String,default:"$vuetify.input.otp"},length:{type:[Number,String],default:6},modelValue:{type:[Number,String],default:void 0},placeholder:String,type:{type:String,default:"number"},...Qe(),...pa(),...ll(Pa({variant:"outlined"}),["baseColor","bgColor","class","color","disabled","error","loading","rounded","style","theme","variant"])},"VOtpInput"),jV=R()({name:"VOtpInput",props:WV(),emits:{finish:e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const{dimensionStyles:o}=et(e),{isFocused:i,focus:r,blur:u}=Jt(e),c=de(e,"modelValue","",V=>V==null?[]:String(V).split(""),V=>V.join("")),{t:d}=qe(),v=y(()=>Number(e.length)),f=y(()=>Array(v.value).fill(0)),m=H(-1),b=H(),h=H([]),g=y(()=>h.value[m.value]);function k(){if(T(g.value.value)){g.value.value="";return}const V=c.value.slice(),w=g.value.value;V[m.value]=w;let $=null;m.value>c.value.length?$=c.value.length+1:m.value+1!==v.value&&($="next"),c.value=V,$&&gn(b.value,$)}function S(V){const w=c.value.slice(),$=m.value;let p=null;["ArrowLeft","ArrowRight","Backspace","Delete"].includes(V.key)&&(V.preventDefault(),V.key==="ArrowLeft"?p="prev":V.key==="ArrowRight"?p="next":["Backspace","Delete"].includes(V.key)&&(w[m.value]="",c.value=w,m.value>0&&V.key==="Backspace"?p="prev":requestAnimationFrame(()=>{var I;(I=h.value[$])==null||I.select()})),requestAnimationFrame(()=>{p!=null&&gn(b.value,p)}))}function C(V,w){var p,I;w.preventDefault(),w.stopPropagation();const $=((p=w==null?void 0:w.clipboardData)==null?void 0:p.getData("Text").slice(0,v.value))??"";T($)||(c.value=$.split(""),(I=h.value)==null||I[V].blur())}function P(){c.value=[]}function x(V,w){r(),m.value=w}function _(){u(),m.value=-1}function T(V){return e.type==="number"&&/[^0-9]/g.test(V)}return Ge({VField:{color:y(()=>e.color),bgColor:y(()=>e.color),baseColor:y(()=>e.baseColor),disabled:y(()=>e.disabled),error:y(()=>e.error),variant:y(()=>e.variant)}},{scoped:!0}),Q(c,V=>{V.length===v.value&&a("finish",V.join(""))},{deep:!0}),Q(m,V=>{V<0||Te(()=>{var w;(w=h.value[V])==null||w.select()})}),W(()=>{var $;const[V,w]=ln(t);return s("div",z({class:["v-otp-input",{"v-otp-input--divided":!!e.divider},e.class],style:[e.style]},V),[s("div",{ref:b,class:"v-otp-input__content",style:[o.value]},[f.value.map((p,I)=>s(ae,null,[e.divider&&I!==0&&s("span",{class:"v-otp-input__divider"},[e.divider]),s(na,{focused:i.value&&e.focusAll||m.value===I,key:I},{...l,loader:void 0,default:()=>s("input",{ref:A=>h.value[I]=A,"aria-label":d(e.label,I+1),autofocus:I===0&&e.autofocus,autocomplete:"one-time-code",class:["v-otp-input__field"],disabled:e.disabled,inputmode:e.type==="number"?"numeric":"text",min:e.type==="number"?0:void 0,maxlength:"1",placeholder:e.placeholder,type:e.type==="number"?"text":e.type,value:c.value[I],onInput:k,onFocus:A=>x(A,I),onBlur:_,onKeydown:S,onPaste:A=>C(I,A)},null)})])),s("input",z({class:"v-otp-input-input",type:"hidden"},w,{value:c.value.join("")}),null),s(Rt,{contained:!0,"content-class":"v-otp-input__loader","model-value":!!e.loading,persistent:!0},{default:()=>{var p;return[((p=l.loader)==null?void 0:p.call(l))??s(Kn,{color:typeof e.loading=="boolean"?void 0:e.loading,indeterminate:!0,size:"24",width:"2"},null)]}}),($=l.default)==null?void 0:$.call(l)])])}),{blur:()=>{var V;(V=h.value)==null||V.some(w=>w.blur())},focus:()=>{var V;(V=h.value)==null||V[0].focus()},reset:P,isFocused:i}}});function GV(e){return Math.floor(Math.abs(e))*Math.sign(e)}const YV=B({scale:{type:[Number,String],default:.5},...ie()},"VParallax"),UV=R()({name:"VParallax",props:YV(),setup(e,n){let{slots:t}=n;const{intersectionRef:a,isIntersecting:l}=fl(),{resizeRef:o,contentRect:i}=Lt(),{height:r}=$t(),u=H();He(()=>{var m;a.value=o.value=(m=u.value)==null?void 0:m.$el});let c;Q(l,m=>{m?(c=ni(a.value),c=c===document.scrollingElement?document:c,c.addEventListener("scroll",f,{passive:!0}),f()):c.removeEventListener("scroll",f)}),it(()=>{c==null||c.removeEventListener("scroll",f)}),Q(r,f),Q(()=>{var m;return(m=i.value)==null?void 0:m.height},f);const d=y(()=>1-Xe(+e.scale));let v=-1;function f(){l.value&&(cancelAnimationFrame(v),v=requestAnimationFrame(()=>{var x;const m=((x=u.value)==null?void 0:x.$el).querySelector(".v-img__img");if(!m)return;const b=c instanceof Document?document.documentElement.clientHeight:c.clientHeight,h=c instanceof Document?window.scrollY:c.scrollTop,g=a.value.getBoundingClientRect().top+h,k=i.value.height,S=g+(k-b)/2,C=GV((h-S)*d.value),P=Math.max(1,(d.value*(b-k)+k)/k);m.style.setProperty("transform",`translateY(${C}px) scale(${P})`)}))}return W(()=>s(Yt,{class:["v-parallax",{"v-parallax--active":l.value},e.class],style:e.style,ref:u,cover:!0,onLoadstart:f,onLoad:f},t)),{}}}),KV=B({...yl({falseIcon:"$radioOff",trueIcon:"$radioOn"})},"VRadio"),qV=R()({name:"VRadio",props:KV(),setup(e,n){let{slots:t}=n;return W(()=>{const a=tn.filterProps(e);return s(tn,z(a,{class:["v-radio",e.class],style:e.style,type:"radio"}),t)}),{}}}),XV=B({height:{type:[Number,String],default:"auto"},...Qt(),...Je(fi(),["multiple"]),trueIcon:{type:ve,default:"$radioOn"},falseIcon:{type:ve,default:"$radioOff"},type:{type:String,default:"radio"}},"VRadioGroup"),ZV=R()({name:"VRadioGroup",inheritAttrs:!1,props:XV(),emits:{"update:modelValue":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const l=rt(),o=y(()=>e.id||`radio-group-${l}`),i=de(e,"modelValue");return W(()=>{const[r,u]=ln(t),c=ct.filterProps(e),d=tn.filterProps(e),v=a.label?a.label({label:e.label,props:{for:o.value}}):e.label;return s(ct,z({class:["v-radio-group",e.class],style:e.style},r,c,{modelValue:i.value,"onUpdate:modelValue":f=>i.value=f,id:o.value}),{...a,default:f=>{let{id:m,messagesId:b,isDisabled:h,isReadonly:g}=f;return s(ae,null,[v&&s(ea,{id:m.value},{default:()=>[v]}),s(hu,z(d,{id:m.value,"aria-describedby":b.value,defaultsTarget:"VRadio",trueIcon:e.trueIcon,falseIcon:e.falseIcon,type:e.type,disabled:h.value,readonly:g.value,"aria-labelledby":v?m.value:void 0,multiple:!1},u,{modelValue:i.value,"onUpdate:modelValue":k=>i.value=k}),a)])}})}),{}}}),JV=B({...pa(),...Qt(),...dc(),strict:Boolean,modelValue:{type:Array,default:()=>[0,0]}},"VRangeSlider"),QV=R()({name:"VRangeSlider",props:JV(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,end:e=>!0,start:e=>!0},setup(e,n){let{slots:t,emit:a}=n;const l=H(),o=H(),i=H(),{rtlClasses:r}=nt();function u($){if(!l.value||!o.value)return;const p=Co($,l.value.$el,e.direction),I=Co($,o.value.$el,e.direction),A=Math.abs(p),M=Math.abs(I);return A$!=null&&$.length?$.map(p=>c.roundValue(p)):[0,0]),{activeThumbRef:v,hasLabels:f,max:m,min:b,mousePressed:h,onSliderMousedown:g,onSliderTouchstart:k,position:S,trackContainerRef:C,readonly:P}=fc({props:e,steps:c,onSliderStart:()=>{a("start",d.value)},onSliderEnd:$=>{var A;let{value:p}=$;const I=v.value===((A=l.value)==null?void 0:A.$el)?[p,d.value[1]]:[d.value[0],p];!e.strict&&I[0]{var M,j,Y,le;let{value:p}=$;const[I,A]=d.value;!e.strict&&I===A&&I!==b.value&&(v.value=p>I?(M=o.value)==null?void 0:M.$el:(j=l.value)==null?void 0:j.$el,(Y=v.value)==null||Y.focus()),v.value===((le=l.value)==null?void 0:le.$el)?d.value=[Math.min(p,A),A]:d.value=[I,Math.max(I,p)]},getActiveThumb:u}),{isFocused:x,focus:_,blur:T}=Jt(e),V=y(()=>S(d.value[0])),w=y(()=>S(d.value[1]));return W(()=>{const $=ct.filterProps(e),p=!!(e.label||t.label||t.prepend);return s(ct,z({class:["v-slider","v-range-slider",{"v-slider--has-labels":!!t["tick-label"]||f.value,"v-slider--focused":x.value,"v-slider--pressed":h.value,"v-slider--disabled":e.disabled},r.value,e.class],style:e.style,ref:i},$,{focused:x.value}),{...t,prepend:p?I=>{var A,M;return s(ae,null,[((A=t.label)==null?void 0:A.call(t,I))??(e.label?s(ea,{class:"v-slider__label",text:e.label},null):void 0),(M=t.prepend)==null?void 0:M.call(t,I)])}:void 0,default:I=>{var j,Y;let{id:A,messagesId:M}=I;return s("div",{class:"v-slider__container",onMousedown:P.value?void 0:g,onTouchstartPassive:P.value?void 0:k},[s("input",{id:`${A.value}_start`,name:e.name||A.value,disabled:!!e.disabled,readonly:!!e.readonly,tabindex:"-1",value:d.value[0]},null),s("input",{id:`${A.value}_stop`,name:e.name||A.value,disabled:!!e.disabled,readonly:!!e.readonly,tabindex:"-1",value:d.value[1]},null),s(mc,{ref:C,start:V.value,stop:w.value},{"tick-label":t["tick-label"]}),s(po,{ref:l,"aria-describedby":M.value,focused:x&&v.value===((j=l.value)==null?void 0:j.$el),modelValue:d.value[0],"onUpdate:modelValue":le=>d.value=[le,d.value[1]],onFocus:le=>{var re,N,E,O;_(),v.value=(re=l.value)==null?void 0:re.$el,d.value[0]===d.value[1]&&d.value[1]===b.value&&le.relatedTarget!==((N=o.value)==null?void 0:N.$el)&&((E=l.value)==null||E.$el.blur(),(O=o.value)==null||O.$el.focus())},onBlur:()=>{T(),v.value=void 0},min:b.value,max:d.value[1],position:V.value,ripple:e.ripple},{"thumb-label":t["thumb-label"]}),s(po,{ref:o,"aria-describedby":M.value,focused:x&&v.value===((Y=o.value)==null?void 0:Y.$el),modelValue:d.value[1],"onUpdate:modelValue":le=>d.value=[d.value[0],le],onFocus:le=>{var re,N,E,O;_(),v.value=(re=o.value)==null?void 0:re.$el,d.value[0]===d.value[1]&&d.value[0]===m.value&&le.relatedTarget!==((N=l.value)==null?void 0:N.$el)&&((E=o.value)==null||E.$el.blur(),(O=l.value)==null||O.$el.focus())},onBlur:()=>{T(),v.value=void 0},min:d.value[0],max:m.value,position:w.value,ripple:e.ripple},{"thumb-label":t["thumb-label"]})])}})}),{}}}),e1=B({name:String,itemAriaLabel:{type:String,default:"$vuetify.rating.ariaLabel.item"},activeColor:String,color:String,clearable:Boolean,disabled:Boolean,emptyIcon:{type:ve,default:"$ratingEmpty"},fullIcon:{type:ve,default:"$ratingFull"},halfIncrements:Boolean,hover:Boolean,length:{type:[Number,String],default:5},readonly:Boolean,modelValue:{type:[Number,String],default:0},itemLabels:Array,itemLabelPosition:{type:String,default:"top",validator:e=>["top","bottom"].includes(e)},ripple:Boolean,...ie(),...lt(),...jt(),...Ve(),...Pe()},"VRating"),t1=R()({name:"VRating",props:e1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{t:a}=qe(),{themeClasses:l}=De(e),o=de(e,"modelValue"),i=y(()=>Xe(parseFloat(o.value),0,+e.length)),r=y(()=>Ot(Number(e.length),1)),u=y(()=>r.value.flatMap(h=>e.halfIncrements?[h-.5,h]:[h])),c=ee(-1),d=y(()=>u.value.map(h=>{const g=e.hover&&c.value>-1,k=i.value>=h,S=c.value>=h,P=(g?S:k)?e.fullIcon:e.emptyIcon,x=e.activeColor??e.color,_=k||S?x:e.color;return{isFilled:k,isHovered:S,icon:P,color:_}})),v=y(()=>[0,...u.value].map(h=>{function g(){c.value=h}function k(){c.value=-1}function S(){e.disabled||e.readonly||(o.value=i.value===h&&e.clearable?0:h)}return{onMouseenter:e.hover?g:void 0,onMouseleave:e.hover?k:void 0,onClick:S}})),f=y(()=>e.name??`v-rating-${rt()}`);function m(h){var V,w;let{value:g,index:k,showStar:S=!0}=h;const{onMouseenter:C,onMouseleave:P,onClick:x}=v.value[k+1],_=`${f.value}-${String(g).replace(".","-")}`,T={color:(V=d.value[k])==null?void 0:V.color,density:e.density,disabled:e.disabled,icon:(w=d.value[k])==null?void 0:w.icon,ripple:e.ripple,size:e.size,variant:"plain"};return s(ae,null,[s("label",{for:_,class:{"v-rating__item--half":e.halfIncrements&&g%1>0,"v-rating__item--full":e.halfIncrements&&g%1===0},onMouseenter:C,onMouseleave:P,onClick:x},[s("span",{class:"v-rating__hidden"},[a(e.itemAriaLabel,g,e.length)]),S?t.item?t.item({...d.value[k],props:T,value:g,index:k,rating:i.value}):s(Ae,z({"aria-label":a(e.itemAriaLabel,g,e.length)},T),null):void 0]),s("input",{class:"v-rating__hidden",name:f.value,id:_,type:"radio",value:g,checked:i.value===g,tabindex:-1,readonly:e.readonly,disabled:e.disabled},null)])}function b(h){return t["item-label"]?t["item-label"](h):h.label?s("span",null,[h.label]):s("span",null,[bt(" ")])}return W(()=>{var g;const h=!!((g=e.itemLabels)!=null&&g.length)||t["item-label"];return s(e.tag,{class:["v-rating",{"v-rating--hover":e.hover,"v-rating--readonly":e.readonly},l.value,e.class],style:e.style},{default:()=>[s(m,{value:0,index:-1,showStar:!1},null),r.value.map((k,S)=>{var C,P;return s("div",{class:"v-rating__wrapper"},[h&&e.itemLabelPosition==="top"?b({value:k,index:S,label:(C=e.itemLabels)==null?void 0:C[S]}):void 0,s("div",{class:"v-rating__item"},[e.halfIncrements?s(ae,null,[s(m,{value:k-.5,index:S*2},null),s(m,{value:k,index:S*2+1},null)]):s(m,{value:k,index:S},null)]),h&&e.itemLabelPosition==="bottom"?b({value:k,index:S,label:(P=e.itemLabels)==null?void 0:P[S]}):void 0])})]})}),{}}}),n1={actions:"button@2",article:"heading, paragraph",avatar:"avatar",button:"button",card:"image, heading","card-avatar":"image, list-item-avatar",chip:"chip","date-picker":"list-item, heading, divider, date-picker-options, date-picker-days, actions","date-picker-options":"text, avatar@2","date-picker-days":"avatar@28",divider:"divider",heading:"heading",image:"image","list-item":"text","list-item-avatar":"avatar, text","list-item-two-line":"sentences","list-item-avatar-two-line":"avatar, sentences","list-item-three-line":"paragraph","list-item-avatar-three-line":"avatar, paragraph",ossein:"ossein",paragraph:"text@3",sentences:"text@2",subtitle:"text",table:"table-heading, table-thead, table-tbody, table-tfoot","table-heading":"chip, text","table-thead":"heading@6","table-tbody":"table-row-divider@6","table-row-divider":"table-row, divider","table-row":"text@6","table-tfoot":"text@2, avatar@2",text:"text"};function a1(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return s("div",{class:["v-skeleton-loader__bone",`v-skeleton-loader__${e}`]},[n])}function jr(e){const[n,t]=e.split("@");return Array.from({length:t}).map(()=>Ml(n))}function Ml(e){let n=[];if(!e)return n;const t=n1[e];if(e!==t){if(e.includes(","))return Gr(e);if(e.includes("@"))return jr(e);t.includes(",")?n=Gr(t):t.includes("@")?n=jr(t):t&&n.push(Ml(t))}return[a1(e,n)]}function Gr(e){return e.replace(/\s/g,"").split(",").map(Ml)}const l1=B({boilerplate:Boolean,color:String,loading:Boolean,loadingText:{type:String,default:"$vuetify.loading"},type:{type:[String,Array],default:"ossein"},...Qe(),...at(),...Pe()},"VSkeletonLoader"),o1=R()({name:"VSkeletonLoader",props:l1(),setup(e,n){let{slots:t}=n;const{backgroundColorClasses:a,backgroundColorStyles:l}=Le(F(e,"color")),{dimensionStyles:o}=et(e),{elevationClasses:i}=st(e),{themeClasses:r}=De(e),{t:u}=qe(),c=y(()=>Ml(We(e.type).join(",")));return W(()=>{var f;const d=!t.default||e.loading,v=e.boilerplate||!d?{}:{ariaLive:"polite",ariaLabel:u(e.loadingText),role:"alert"};return s("div",z({class:["v-skeleton-loader",{"v-skeleton-loader--boilerplate":e.boilerplate},r.value,a.value,i.value],style:[l.value,d?o.value:{}]},v),[d?c.value:(f=t.default)==null?void 0:f.call(t)])}),{}}}),i1=R()({name:"VSlideGroupItem",props:Ln(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const a=Mn(e,xu);return()=>{var l;return(l=t.default)==null?void 0:l.call(t,{isSelected:a.isSelected.value,select:a.select,toggle:a.toggle,selectedClass:a.selectedClass.value})}}});function r1(e){const n=ee(e());let t=-1;function a(){clearInterval(t)}function l(){a(),Te(()=>n.value=e())}function o(i){const r=i?getComputedStyle(i):{transitionDuration:.2},u=parseFloat(r.transitionDuration)*1e3||200;if(a(),n.value<=0)return;const c=performance.now();t=window.setInterval(()=>{const d=performance.now()-c+u;n.value=Math.max(e()-d,0),n.value<=0&&a()},u)}return mt(a),{clear:a,time:n,start:o,reset:l}}const s1=B({multiLine:Boolean,text:String,timer:[Boolean,String],timeout:{type:[Number,String],default:5e3},vertical:Boolean,...Xt({location:"bottom"}),...Jn(),...ze(),...Tt(),...Pe(),...Je(_a({transition:"v-snackbar-transition"}),["persistent","noClickAnimation","scrim","scrollStrategy"])},"VSnackbar"),u1=R()({name:"VSnackbar",props:s1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{positionClasses:l}=Qn(e),{scopeId:o}=Fn(),{themeClasses:i}=De(e),{colorClasses:r,colorStyles:u,variantClasses:c}=Bn(e),{roundedClasses:d}=Ue(e),v=r1(()=>Number(e.timeout)),f=H(),m=H(),b=ee(!1),h=ee(0),g=H(),k=xe(sa,void 0);yt(()=>!!k,()=>{const p=Us();He(()=>{g.value=p.mainStyles.value})}),Q(a,C),Q(()=>e.timeout,C),Ke(()=>{a.value&&C()});let S=-1;function C(){v.reset(),window.clearTimeout(S);const p=Number(e.timeout);if(!a.value||p===-1)return;const I=Ko(m.value);v.start(I),S=window.setTimeout(()=>{a.value=!1},p)}function P(){v.reset(),window.clearTimeout(S)}function x(){b.value=!0,P()}function _(){b.value=!1,C()}function T(p){h.value=p.touches[0].clientY}function V(p){Math.abs(h.value-p.changedTouches[0].clientY)>50&&(a.value=!1)}function w(){b.value&&_()}const $=y(()=>e.location.split(" ").reduce((p,I)=>(p[`v-snackbar--${I}`]=!0,p),{}));return W(()=>{const p=Rt.filterProps(e),I=!!(t.default||t.text||e.text);return s(Rt,z({ref:f,class:["v-snackbar",{"v-snackbar--active":a.value,"v-snackbar--multi-line":e.multiLine&&!e.vertical,"v-snackbar--timer":!!e.timer,"v-snackbar--vertical":e.vertical},$.value,l.value,e.class],style:[g.value,e.style]},p,{modelValue:a.value,"onUpdate:modelValue":A=>a.value=A,contentProps:z({class:["v-snackbar__wrapper",i.value,r.value,d.value,c.value],style:[u.value],onPointerenter:x,onPointerleave:_},p.contentProps),persistent:!0,noClickAnimation:!0,scrim:!1,scrollStrategy:"none",_disableGlobalStack:!0,onTouchstartPassive:T,onTouchend:V,onAfterLeave:w},o),{default:()=>{var A,M;return[on(!1,"v-snackbar"),e.timer&&!b.value&&s("div",{key:"timer",class:"v-snackbar__timer"},[s(ml,{ref:m,color:typeof e.timer=="string"?e.timer:"info",max:e.timeout,"model-value":v.time.value},null)]),I&&s("div",{key:"content",class:"v-snackbar__content",role:"status","aria-live":"polite"},[((A=t.text)==null?void 0:A.call(t))??e.text,(M=t.default)==null?void 0:M.call(t)]),t.actions&&s(pe,{defaults:{VBtn:{variant:"text",ripple:!1,slim:!0}}},{default:()=>[s("div",{class:"v-snackbar__actions"},[t.actions({isActive:a})])]})]},activator:t.activator})}),At({},f)}}),ld=B({autoDraw:Boolean,autoDrawDuration:[Number,String],autoDrawEasing:{type:String,default:"ease"},color:String,gradient:{type:Array,default:()=>[]},gradientDirection:{type:String,validator:e=>["top","bottom","left","right"].includes(e),default:"top"},height:{type:[String,Number],default:75},labels:{type:Array,default:()=>[]},labelSize:{type:[Number,String],default:7},lineWidth:{type:[String,Number],default:4},id:String,itemValue:{type:String,default:"value"},modelValue:{type:Array,default:()=>[]},min:[String,Number],max:[String,Number],padding:{type:[String,Number],default:8},showLabels:Boolean,smooth:Boolean,width:{type:[Number,String],default:300}},"Line"),od=B({autoLineWidth:Boolean,...ld()},"VBarline"),Yr=R()({name:"VBarline",props:od(),setup(e,n){let{slots:t}=n;const a=rt(),l=y(()=>e.id||`barline-${a}`),o=y(()=>Number(e.autoDrawDuration)||500),i=y(()=>!!(e.showLabels||e.labels.length>0||t!=null&&t.label)),r=y(()=>parseFloat(e.lineWidth)||4),u=y(()=>Math.max(e.modelValue.length*r.value,Number(e.width))),c=y(()=>({minX:0,maxX:u.value,minY:0,maxY:parseInt(e.height,10)})),d=y(()=>e.modelValue.map(h=>tt(h,e.itemValue,h)));function v(h,g){const{minX:k,maxX:S,minY:C,maxY:P}=g,x=h.length;let _=e.max!=null?Number(e.max):Math.max(...h),T=e.min!=null?Number(e.min):Math.min(...h);T>0&&e.min==null&&(T=0),_<0&&e.max==null&&(_=0);const V=S/x,w=(P-C)/(_-T||1),$=P-Math.abs(T*w);return h.map((p,I)=>{const A=Math.abs(w*p);return{x:k+I*V,y:$-A+ +(p<0)*A,height:A,value:p}})}const f=y(()=>{const h=[],g=v(d.value,c.value),k=g.length;for(let S=0;h.lengthv(d.value,c.value)),b=y(()=>(Math.abs(m.value[0].x-m.value[1].x)-r.value)/2);W(()=>{const h=e.gradient.slice().length?e.gradient.slice().reverse():[""];return s("svg",{display:"block"},[s("defs",null,[s("linearGradient",{id:l.value,gradientUnits:"userSpaceOnUse",x1:e.gradientDirection==="left"?"100%":"0",y1:e.gradientDirection==="top"?"100%":"0",x2:e.gradientDirection==="right"?"100%":"0",y2:e.gradientDirection==="bottom"?"100%":"0"},[h.map((g,k)=>s("stop",{offset:k/Math.max(h.length-1,1),"stop-color":g||"currentColor"},null))])]),s("clipPath",{id:`${l.value}-clip`},[m.value.map(g=>s("rect",{x:g.x+b.value,y:g.y,width:r.value,height:g.height,rx:typeof e.smooth=="number"?e.smooth:e.smooth?2:0,ry:typeof e.smooth=="number"?e.smooth:e.smooth?2:0},[e.autoDraw&&s(ae,null,[s("animate",{attributeName:"y",from:g.y+g.height,to:g.y,dur:`${o.value}ms`,fill:"freeze"},null),s("animate",{attributeName:"height",from:"0",to:g.height,dur:`${o.value}ms`,fill:"freeze"},null)])]))]),i.value&&s("g",{key:"labels",style:{textAnchor:"middle",dominantBaseline:"mathematical",fill:"currentColor"}},[f.value.map((g,k)=>{var S;return s("text",{x:g.x+b.value+r.value/2,y:parseInt(e.height,10)-2+(parseInt(e.labelSize,10)||7*.75),"font-size":Number(e.labelSize)||7},[((S=t.label)==null?void 0:S.call(t,{index:k,value:g.value}))??g.value])})]),s("g",{"clip-path":`url(#${l.value}-clip)`,fill:`url(#${l.value})`},[s("rect",{x:0,y:0,width:Math.max(e.modelValue.length*r.value,Number(e.width)),height:e.height},null)])])})}});function c1(e,n){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:75;if(e.length===0)return"";const l=e.shift(),o=e[e.length-1];return(t?`M${l.x} ${a-l.x+2} L${l.x} ${l.y}`:`M${l.x} ${l.y}`)+e.map((i,r)=>{const u=e[r+1],c=e[r-1]||l,d=u&&d1(u,i,c);if(!u||d)return`L${i.x} ${i.y}`;const v=Math.min(Ur(c,i),Ur(u,i)),m=v/2e.id||`trendline-${a}`),o=y(()=>Number(e.autoDrawDuration)||(e.fill?500:2e3)),i=H(0),r=H(null);function u(g,k){const{minX:S,maxX:C,minY:P,maxY:x}=k,_=g.length,T=e.max!=null?Number(e.max):Math.max(...g),V=e.min!=null?Number(e.min):Math.min(...g),w=(C-S)/(_-1),$=(x-P)/(T-V||1);return g.map((p,I)=>({x:S+I*w,y:x-(p-V)*$,value:p}))}const c=y(()=>!!(e.showLabels||e.labels.length>0||t!=null&&t.label)),d=y(()=>parseFloat(e.lineWidth)||4),v=y(()=>Number(e.width)),f=y(()=>{const g=Number(e.padding);return{minX:g,maxX:v.value-g,minY:g,maxY:parseInt(e.height,10)-g}}),m=y(()=>e.modelValue.map(g=>tt(g,e.itemValue,g))),b=y(()=>{const g=[],k=u(m.value,f.value),S=k.length;for(let C=0;g.lengthe.modelValue,async()=>{if(await Te(),!e.autoDraw||!r.value)return;const g=r.value,k=g.getTotalLength();e.fill?(g.style.transformOrigin="bottom center",g.style.transition="none",g.style.transform="scaleY(0)",g.getBoundingClientRect(),g.style.transition=`transform ${o.value}ms ${e.autoDrawEasing}`,g.style.transform="scaleY(1)"):(g.style.strokeDasharray=`${k}`,g.style.strokeDashoffset=`${k}`,g.getBoundingClientRect(),g.style.transition=`stroke-dashoffset ${o.value}ms ${e.autoDrawEasing}`,g.style.strokeDashoffset="0"),i.value=k},{immediate:!0});function h(g){return c1(u(m.value,f.value),e.smooth?8:Number(e.smooth),g,parseInt(e.height,10))}W(()=>{var k;const g=e.gradient.slice().length?e.gradient.slice().reverse():[""];return s("svg",{display:"block","stroke-width":parseFloat(e.lineWidth)??4},[s("defs",null,[s("linearGradient",{id:l.value,gradientUnits:"userSpaceOnUse",x1:e.gradientDirection==="left"?"100%":"0",y1:e.gradientDirection==="top"?"100%":"0",x2:e.gradientDirection==="right"?"100%":"0",y2:e.gradientDirection==="bottom"?"100%":"0"},[g.map((S,C)=>s("stop",{offset:C/Math.max(g.length-1,1),"stop-color":S||"currentColor"},null))])]),c.value&&s("g",{key:"labels",style:{textAnchor:"middle",dominantBaseline:"mathematical",fill:"currentColor"}},[b.value.map((S,C)=>{var P;return s("text",{x:S.x+d.value/2+d.value/2,y:parseInt(e.height,10)-4+(parseInt(e.labelSize,10)||7*.75),"font-size":Number(e.labelSize)||7},[((P=t.label)==null?void 0:P.call(t,{index:C,value:S.value}))??S.value])})]),s("path",{ref:r,d:h(e.fill),fill:e.fill?`url(#${l.value})`:"none",stroke:e.fill?"none":`url(#${l.value})`},null),e.fill&&s("path",{d:h(!1),fill:"none",stroke:e.color??((k=e.gradient)==null?void 0:k[0])},null)])})}}),v1=B({type:{type:String,default:"trend"},...od(),...id()},"VSparkline"),f1=R()({name:"VSparkline",props:v1(),setup(e,n){let{slots:t}=n;const{textColorClasses:a,textColorStyles:l}=ut(F(e,"color")),o=y(()=>!!(e.showLabels||e.labels.length>0||t!=null&&t.label)),i=y(()=>{let r=parseInt(e.height,10);return o.value&&(r+=parseInt(e.labelSize,10)*1.5),r});W(()=>{const r=e.type==="trend"?qr:Yr,u=e.type==="trend"?qr.filterProps(e):Yr.filterProps(e);return s(r,z({key:e.type,class:a.value,style:l.value,viewBox:`0 0 ${e.width} ${parseInt(i.value,10)}`},u),t)})}}),m1=B({...ie(),...Ku({offset:8,minWidth:0,openDelay:0,closeDelay:100,location:"top center",transition:"scale-transition"})},"VSpeedDial"),g1=R()({name:"VSpeedDial",props:m1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),l=H(),o=y(()=>{var c;const[r,u="center"]=((c=e.location)==null?void 0:c.split(" "))??[];return`${r} ${u}`}),i=y(()=>({[`v-speed-dial__content--${o.value.replace(" ","-")}`]:!0}));return W(()=>{const r=qn.filterProps(e);return s(qn,z(r,{modelValue:a.value,"onUpdate:modelValue":u=>a.value=u,class:e.class,style:e.style,contentClass:["v-speed-dial__content",i.value,e.contentClass],location:o.value,ref:l,transition:"fade-transition"}),{...t,default:u=>s(pe,{defaults:{VBtn:{size:"small"}}},{default:()=>[s(ft,{appear:!0,group:!0,transition:e.transition},{default:()=>{var c;return[(c=t.default)==null?void 0:c.call(t,u)]}})]})})}),{}}}),zi=Symbol.for("vuetify:v-stepper"),rd=B({color:String,disabled:{type:[Boolean,String],default:!1},prevText:{type:String,default:"$vuetify.stepper.prev"},nextText:{type:String,default:"$vuetify.stepper.next"}},"VStepperActions"),sd=R()({name:"VStepperActions",props:rd(),emits:{"click:prev":()=>!0,"click:next":()=>!0},setup(e,n){let{emit:t,slots:a}=n;const{t:l}=qe();function o(){t("click:prev")}function i(){t("click:next")}return W(()=>{const r={onClick:o},u={onClick:i};return s("div",{class:"v-stepper-actions"},[s(pe,{defaults:{VBtn:{disabled:["prev",!0].includes(e.disabled),text:l(e.prevText),variant:"text"}}},{default:()=>{var c;return[((c=a.prev)==null?void 0:c.call(a,{props:r}))??s(Ae,r,null)]}}),s(pe,{defaults:{VBtn:{color:e.color,disabled:["next",!0].includes(e.disabled),text:l(e.nextText),variant:"tonal"}}},{default:()=>{var c;return[((c=a.next)==null?void 0:c.call(a,{props:u}))??s(Ae,u,null)]}})])}),{}}}),ud=Wt("v-stepper-header"),h1=B({color:String,title:String,subtitle:String,complete:Boolean,completeIcon:{type:ve,default:"$complete"},editable:Boolean,editIcon:{type:ve,default:"$edit"},error:Boolean,errorIcon:{type:ve,default:"$error"},icon:ve,ripple:{type:[Boolean,Object],default:!0},rules:{type:Array,default:()=>[]}},"StepperItem"),y1=B({...h1(),...Ln()},"VStepperItem"),cd=R()({name:"VStepperItem",directives:{Ripple:Zt},props:y1(),emits:{"group:selected":e=>!0},setup(e,n){let{slots:t}=n;const a=Mn(e,zi,!0),l=y(()=>(a==null?void 0:a.value.value)??e.value),o=y(()=>e.rules.every(f=>f()===!0)),i=y(()=>!e.disabled&&e.editable),r=y(()=>!e.disabled&&e.editable),u=y(()=>e.error||!o.value),c=y(()=>e.complete||e.rules.length>0&&o.value),d=y(()=>u.value?e.errorIcon:c.value?e.completeIcon:a.isSelected.value&&e.editable?e.editIcon:e.icon),v=y(()=>({canEdit:r.value,hasError:u.value,hasCompleted:c.value,title:e.title,subtitle:e.subtitle,step:l.value,value:e.value}));return W(()=>{var g,k,S;const f=(!a||a.isSelected.value||c.value||r.value)&&!u.value&&!e.disabled,m=!!(e.title!=null||t.title),b=!!(e.subtitle!=null||t.subtitle);function h(){a==null||a.toggle()}return je(s("button",{class:["v-stepper-item",{"v-stepper-item--complete":c.value,"v-stepper-item--disabled":e.disabled,"v-stepper-item--error":u.value},a==null?void 0:a.selectedClass.value],disabled:!e.editable,onClick:h},[i.value&&on(!0,"v-stepper-item"),s(It,{key:"stepper-avatar",class:"v-stepper-item__avatar",color:f?e.color:void 0,size:24},{default:()=>{var C;return[((C=t.icon)==null?void 0:C.call(t,v.value))??(d.value?s(Be,{icon:d.value},null):l.value)]}}),s("div",{class:"v-stepper-item__content"},[m&&s("div",{key:"title",class:"v-stepper-item__title"},[((g=t.title)==null?void 0:g.call(t,v.value))??e.title]),b&&s("div",{key:"subtitle",class:"v-stepper-item__subtitle"},[((k=t.subtitle)==null?void 0:k.call(t,v.value))??e.subtitle]),(S=t.default)==null?void 0:S.call(t,v.value)])]),[[Ct("ripple"),e.ripple&&e.editable,null]])}),{}}}),b1=B({...Je(Cl(),["continuous","nextIcon","prevIcon","showArrows","touch","mandatory"])},"VStepperWindow"),dd=R()({name:"VStepperWindow",props:b1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=xe(zi,null),l=de(e,"modelValue"),o=y({get(){var i;return l.value!=null||!a?l.value:(i=a.items.value.find(r=>a.selected.value.includes(r.id)))==null?void 0:i.value},set(i){l.value=i}});return W(()=>{const i=wn.filterProps(e);return s(wn,z({_as:"VStepperWindow"},i,{modelValue:o.value,"onUpdate:modelValue":r=>o.value=r,class:["v-stepper-window",e.class],style:e.style,mandatory:!1,touch:!1}),t)}),{}}}),k1=B({...pl()},"VStepperWindowItem"),vd=R()({name:"VStepperWindowItem",props:k1(),setup(e,n){let{slots:t}=n;return W(()=>{const a=Vn.filterProps(e);return s(Vn,z({_as:"VStepperWindowItem"},a,{class:["v-stepper-window-item",e.class],style:e.style}),t)}),{}}}),S1=B({altLabels:Boolean,bgColor:String,completeIcon:ve,editIcon:ve,editable:Boolean,errorIcon:ve,hideActions:Boolean,items:{type:Array,default:()=>[]},itemTitle:{type:String,default:"title"},itemValue:{type:String,default:"value"},nonLinear:Boolean,flat:Boolean,...In()},"Stepper"),w1=B({...S1(),...Dn({mandatory:"force",selectedClass:"v-stepper-item--selected"}),...xl(),...ll(rd(),["prevText","nextText"])},"VStepper"),V1=R()({name:"VStepper",props:w1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const{items:a,next:l,prev:o,selected:i}=rn(e,zi),{displayClasses:r,mobile:u}=$t(e),{completeIcon:c,editIcon:d,errorIcon:v,color:f,editable:m,prevText:b,nextText:h}=Pn(e),g=y(()=>e.items.map((C,P)=>{const x=tt(C,e.itemTitle,C),_=tt(C,e.itemValue,P+1);return{title:x,value:_,raw:C}})),k=y(()=>a.value.findIndex(C=>i.value.includes(C.id))),S=y(()=>e.disabled?e.disabled:k.value===0?"prev":k.value===a.value.length-1?"next":!1);return Ge({VStepperItem:{editable:m,errorIcon:v,completeIcon:c,editIcon:d,prevText:b,nextText:h},VStepperActions:{color:f,disabled:S,prevText:b,nextText:h}}),W(()=>{const C=Cn.filterProps(e),P=!!(t.header||e.items.length),x=e.items.length>0,_=!e.hideActions&&!!(x||t.actions);return s(Cn,z(C,{color:e.bgColor,class:["v-stepper",{"v-stepper--alt-labels":e.altLabels,"v-stepper--flat":e.flat,"v-stepper--non-linear":e.nonLinear,"v-stepper--mobile":u.value},r.value,e.class],style:e.style}),{default:()=>{var T,V;return[P&&s(ud,{key:"stepper-header"},{default:()=>[g.value.map((w,$)=>{let{raw:p,...I}=w;return s(ae,null,[!!$&&s(xa,null,null),s(cd,I,{default:t[`header-item.${I.value}`]??t.header,icon:t.icon,title:t.title,subtitle:t.subtitle})])})]}),x&&s(dd,{key:"stepper-window"},{default:()=>[g.value.map(w=>s(vd,{value:w.value},{default:()=>{var $,p;return(($=t[`item.${w.value}`])==null?void 0:$.call(t,w))??((p=t.item)==null?void 0:p.call(t,w))}}))]}),(T=t.default)==null?void 0:T.call(t,{prev:o,next:l}),_&&(((V=t.actions)==null?void 0:V.call(t,{next:l,prev:o}))??s(sd,{key:"stepper-actions","onClick:prev":o,"onClick:next":l},t))]}})}),{prev:o,next:l}}}),C1=B({indeterminate:Boolean,inset:Boolean,flat:Boolean,loading:{type:[Boolean,String],default:!1},...Qt(),...yl()},"VSwitch"),p1=R()({name:"VSwitch",inheritAttrs:!1,props:C1(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const l=de(e,"indeterminate"),o=de(e,"modelValue"),{loaderClasses:i}=Sa(e),{isFocused:r,focus:u,blur:c}=Jt(e),d=H(),v=$e&&window.matchMedia("(forced-colors: active)").matches,f=y(()=>typeof e.loading=="string"&&e.loading!==""?e.loading:e.color),m=rt(),b=y(()=>e.id||`switch-${m}`);function h(){l.value&&(l.value=!1)}function g(k){var S,C;k.stopPropagation(),k.preventDefault(),(C=(S=d.value)==null?void 0:S.input)==null||C.click()}return W(()=>{const[k,S]=ln(t),C=ct.filterProps(e),P=tn.filterProps(e);return s(ct,z({class:["v-switch",{"v-switch--flat":e.flat},{"v-switch--inset":e.inset},{"v-switch--indeterminate":l.value},i.value,e.class]},k,C,{modelValue:o.value,"onUpdate:modelValue":x=>o.value=x,id:b.value,focused:r.value,style:e.style}),{...a,default:x=>{let{id:_,messagesId:T,isDisabled:V,isReadonly:w,isValid:$}=x;const p={model:o,isValid:$};return s(tn,z({ref:d},P,{modelValue:o.value,"onUpdate:modelValue":[I=>o.value=I,h],id:_.value,"aria-describedby":T.value,type:"checkbox","aria-checked":l.value?"mixed":void 0,disabled:V.value,readonly:w.value,onFocus:u,onBlur:c},S),{...a,default:I=>{let{backgroundColorClasses:A,backgroundColorStyles:M}=I;return s("div",{class:["v-switch__track",v?void 0:A.value],style:M.value,onClick:g},[a["track-true"]&&s("div",{key:"prepend",class:"v-switch__track-true"},[a["track-true"](p)]),a["track-false"]&&s("div",{key:"append",class:"v-switch__track-false"},[a["track-false"](p)])])},input:I=>{let{inputNode:A,icon:M,backgroundColorClasses:j,backgroundColorStyles:Y}=I;return s(ae,null,[A,s("div",{class:["v-switch__thumb",{"v-switch__thumb--filled":M||e.loading},e.inset||v?void 0:j.value],style:e.inset?void 0:Y.value},[a.thumb?s(pe,{defaults:{VIcon:{icon:M,size:"x-small"}}},{default:()=>[a.thumb({...p,icon:M})]}):s(si,null,{default:()=>[e.loading?s(wa,{name:"v-switch",active:!0,color:$.value===!1?void 0:f.value},{default:le=>a.loader?a.loader(le):s(Kn,{active:le.isActive,color:le.color,indeterminate:!0,size:"16",width:"2"},null)}):M&&s(Be,{key:String(M),icon:M,size:"x-small"},null)]})])])}})}})}),{}}}),x1=B({color:String,height:[Number,String],window:Boolean,...ie(),...at(),...$n(),...ze(),...Ve(),...Pe()},"VSystemBar"),_1=R()({name:"VSystemBar",props:x1(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{backgroundColorClasses:l,backgroundColorStyles:o}=Le(F(e,"color")),{elevationClasses:i}=st(e),{roundedClasses:r}=Ue(e),{ssrBootStyles:u}=An(),c=y(()=>e.height??(e.window?32:24)),{layoutItemStyles:d}=Tn({id:e.name,order:y(()=>parseInt(e.order,10)),position:ee("top"),layoutSize:c,elementSize:c,active:y(()=>!0),absolute:F(e,"absolute")});return W(()=>s(e.tag,{class:["v-system-bar",{"v-system-bar--window":e.window},a.value,l.value,i.value,r.value,e.class],style:[o.value,d.value,u.value,e.style]},t)),{}}}),Wi=Symbol.for("vuetify:v-tabs"),P1=B({fixed:Boolean,sliderColor:String,hideSlider:Boolean,direction:{type:String,default:"horizontal"},...Je(hl({selectedClass:"v-tab--selected",variant:"text"}),["active","block","flat","location","position","symbol"])},"VTab"),fd=R()({name:"VTab",props:P1(),setup(e,n){let{slots:t,attrs:a}=n;const{textColorClasses:l,textColorStyles:o}=ut(e,"sliderColor"),i=H(),r=H(),u=y(()=>e.direction==="horizontal"),c=y(()=>{var v,f;return((f=(v=i.value)==null?void 0:v.group)==null?void 0:f.isSelected.value)??!1});function d(v){var m,b;let{value:f}=v;if(f){const h=(b=(m=i.value)==null?void 0:m.$el.parentElement)==null?void 0:b.querySelector(".v-tab--selected .v-tab__slider"),g=r.value;if(!h||!g)return;const k=getComputedStyle(h).color,S=h.getBoundingClientRect(),C=g.getBoundingClientRect(),P=u.value?"x":"y",x=u.value?"X":"Y",_=u.value?"right":"bottom",T=u.value?"width":"height",V=S[P],w=C[P],$=V>w?S[_]-C[_]:S[P]-C[P],p=Math.sign($)>0?u.value?"right":"bottom":Math.sign($)<0?u.value?"left":"top":"center",A=(Math.abs($)+(Math.sign($)<0?S[T]:C[T]))/Math.max(S[T],C[T])||0,M=S[T]/C[T]||0,j=1.5;fn(g,{backgroundColor:[k,"currentcolor"],transform:[`translate${x}(${$}px) scale${x}(${M})`,`translate${x}(${$/j}px) scale${x}(${(A-1)/j+1})`,"none"],transformOrigin:Array(3).fill(p)},{duration:225,easing:ia})}}return W(()=>{const v=Ae.filterProps(e);return s(Ae,z({symbol:Wi,ref:i,class:["v-tab",e.class],style:e.style,tabindex:c.value?0:-1,role:"tab","aria-selected":String(c.value),active:!1},v,a,{block:e.fixed,maxWidth:e.fixed?300:void 0,"onGroup:selected":d}),{...t,default:()=>{var f;return s(ae,null,[((f=t.default)==null?void 0:f.call(t))??e.text,!e.hideSlider&&s("div",{ref:r,class:["v-tab__slider",l.value],style:o.value},null)])}})}),At({},i)}}),I1=B({...Je(Cl(),["continuous","nextIcon","prevIcon","showArrows","touch","mandatory"])},"VTabsWindow"),md=R()({name:"VTabsWindow",props:I1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=xe(Wi,null),l=de(e,"modelValue"),o=y({get(){var i;return l.value!=null||!a?l.value:(i=a.items.value.find(r=>a.selected.value.includes(r.id)))==null?void 0:i.value},set(i){l.value=i}});return W(()=>{const i=wn.filterProps(e);return s(wn,z({_as:"VTabsWindow"},i,{modelValue:o.value,"onUpdate:modelValue":r=>o.value=r,class:["v-tabs-window",e.class],style:e.style,mandatory:!1,touch:!1}),t)}),{}}}),$1=B({...pl()},"VTabsWindowItem"),gd=R()({name:"VTabsWindowItem",props:$1(),setup(e,n){let{slots:t}=n;return W(()=>{const a=Vn.filterProps(e);return s(Vn,z({_as:"VTabsWindowItem"},a,{class:["v-tabs-window-item",e.class],style:e.style}),t)}),{}}});function T1(e){return e?e.map(n=>Uo(n)?n:{text:n,value:n}):[]}const A1=B({alignTabs:{type:String,default:"start"},color:String,fixedTabs:Boolean,items:{type:Array,default:()=>[]},stacked:Boolean,bgColor:String,grow:Boolean,height:{type:[Number,String],default:void 0},hideSlider:Boolean,sliderColor:String,...mi({mandatory:"force",selectedClass:"v-tab-item--selected"}),...lt(),...Ve()},"VTabs"),B1=R()({name:"VTabs",props:A1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{attrs:t,slots:a}=n;const l=de(e,"modelValue"),o=y(()=>T1(e.items)),{densityClasses:i}=gt(e),{backgroundColorClasses:r,backgroundColorStyles:u}=Le(F(e,"bgColor")),{scopeId:c}=Fn();return Ge({VTab:{color:F(e,"color"),direction:F(e,"direction"),stacked:F(e,"stacked"),fixed:F(e,"fixedTabs"),sliderColor:F(e,"sliderColor"),hideSlider:F(e,"hideSlider")}}),W(()=>{const d=fa.filterProps(e),v=!!(a.window||e.items.length>0);return s(ae,null,[s(fa,z(d,{modelValue:l.value,"onUpdate:modelValue":f=>l.value=f,class:["v-tabs",`v-tabs--${e.direction}`,`v-tabs--align-tabs-${e.alignTabs}`,{"v-tabs--fixed-tabs":e.fixedTabs,"v-tabs--grow":e.grow,"v-tabs--stacked":e.stacked},i.value,r.value,e.class],style:[{"--v-tabs-height":ne(e.height)},u.value,e.style],role:"tablist",symbol:Wi},c,t),{default:()=>{var f;return[((f=a.default)==null?void 0:f.call(a))??o.value.map(m=>{var b;return((b=a.tab)==null?void 0:b.call(a,{item:m}))??s(fd,z(m,{key:m.text,value:m.value}),{default:a[`tab.${m.value}`]?()=>{var h;return(h=a[`tab.${m.value}`])==null?void 0:h.call(a,{item:m})}:void 0})})]}}),v&&s(md,z({modelValue:l.value,"onUpdate:modelValue":f=>l.value=f,key:"tabs-window"},c),{default:()=>{var f;return[o.value.map(m=>{var b;return((b=a.item)==null?void 0:b.call(a,{item:m}))??s(gd,{value:m.value},{default:()=>{var h;return(h=a[`item.${m.value}`])==null?void 0:h.call(a,{item:m})}})}),(f=a.window)==null?void 0:f.call(a)]}})])}),{}}}),D1=B({autoGrow:Boolean,autofocus:Boolean,counter:[Boolean,Number,String],counterValue:Function,prefix:String,placeholder:String,persistentPlaceholder:Boolean,persistentCounter:Boolean,noResize:Boolean,rows:{type:[Number,String],default:5,validator:e=>!isNaN(parseFloat(e))},maxRows:{type:[Number,String],validator:e=>!isNaN(parseFloat(e))},suffix:String,modelModifiers:Object,...Qt(),...Pa()},"VTextarea"),L1=R()({name:"VTextarea",directives:{Intersect:ka},inheritAttrs:!1,props:D1(),emits:{"click:control":e=>!0,"mousedown:control":e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0},setup(e,n){let{attrs:t,emit:a,slots:l}=n;const o=de(e,"modelValue"),{isFocused:i,focus:r,blur:u}=Jt(e),c=y(()=>typeof e.counterValue=="function"?e.counterValue(o.value):(o.value||"").toString().length),d=y(()=>{if(t.maxlength)return t.maxlength;if(!(!e.counter||typeof e.counter!="number"&&typeof e.counter!="string"))return e.counter});function v(p,I){var A,M;!e.autofocus||!p||(M=(A=I[0].target)==null?void 0:A.focus)==null||M.call(A)}const f=H(),m=H(),b=ee(""),h=H(),g=y(()=>e.persistentPlaceholder||i.value||e.active);function k(){var p;h.value!==document.activeElement&&((p=h.value)==null||p.focus()),i.value||r()}function S(p){k(),a("click:control",p)}function C(p){a("mousedown:control",p)}function P(p){p.stopPropagation(),k(),Te(()=>{o.value="",Zo(e["onClick:clear"],p)})}function x(p){var A;const I=p.target;if(o.value=I.value,(A=e.modelModifiers)!=null&&A.trim){const M=[I.selectionStart,I.selectionEnd];Te(()=>{I.selectionStart=M[0],I.selectionEnd=M[1]})}}const _=H(),T=H(+e.rows),V=y(()=>["plain","underlined"].includes(e.variant));He(()=>{e.autoGrow||(T.value=+e.rows)});function w(){e.autoGrow&&Te(()=>{if(!_.value||!m.value)return;const p=getComputedStyle(_.value),I=getComputedStyle(m.value.$el),A=parseFloat(p.getPropertyValue("--v-field-padding-top"))+parseFloat(p.getPropertyValue("--v-input-padding-top"))+parseFloat(p.getPropertyValue("--v-field-padding-bottom")),M=_.value.scrollHeight,j=parseFloat(p.lineHeight),Y=Math.max(parseFloat(e.rows)*j+A,parseFloat(I.getPropertyValue("--v-input-control-height"))),le=parseFloat(e.maxRows)*j+A||1/0,re=Xe(M??0,Y,le);T.value=Math.floor((re-A)/j),b.value=ne(re)})}Ke(w),Q(o,w),Q(()=>e.rows,w),Q(()=>e.maxRows,w),Q(()=>e.density,w);let $;return Q(_,p=>{p?($=new ResizeObserver(w),$.observe(_.value)):$==null||$.disconnect()}),it(()=>{$==null||$.disconnect()}),W(()=>{const p=!!(l.counter||e.counter||e.counterValue),I=!!(p||l.details),[A,M]=ln(t),{modelValue:j,...Y}=ct.filterProps(e),le=Vi(e);return s(ct,z({ref:f,modelValue:o.value,"onUpdate:modelValue":re=>o.value=re,class:["v-textarea v-text-field",{"v-textarea--prefixed":e.prefix,"v-textarea--suffixed":e.suffix,"v-text-field--prefixed":e.prefix,"v-text-field--suffixed":e.suffix,"v-textarea--auto-grow":e.autoGrow,"v-textarea--no-resize":e.noResize||e.autoGrow,"v-input--plain-underlined":V.value},e.class],style:e.style},A,Y,{centerAffix:T.value===1&&!V.value,focused:i.value}),{...l,default:re=>{let{id:N,isDisabled:E,isDirty:O,isReadonly:te,isValid:se}=re;return s(na,z({ref:m,style:{"--v-textarea-control-height":b.value},onClick:S,onMousedown:C,"onClick:clear":P,"onClick:prependInner":e["onClick:prependInner"],"onClick:appendInner":e["onClick:appendInner"]},le,{id:N.value,active:g.value||O.value,centerAffix:T.value===1&&!V.value,dirty:O.value||e.dirty,disabled:E.value,focused:i.value,error:se.value===!1}),{...l,default:ue=>{let{props:{class:ye,...G}}=ue;return s(ae,null,[e.prefix&&s("span",{class:"v-text-field__prefix"},[e.prefix]),je(s("textarea",z({ref:h,class:ye,value:o.value,onInput:x,autofocus:e.autofocus,readonly:te.value,disabled:E.value,placeholder:e.placeholder,rows:e.rows,name:e.name,onFocus:k,onBlur:u},G,M),null),[[Ct("intersect"),{handler:v},null,{once:!0}]]),e.autoGrow&&je(s("textarea",{class:[ye,"v-textarea__sizer"],id:`${G.id}-sizer`,"onUpdate:modelValue":ce=>o.value=ce,ref:_,readonly:!0,"aria-hidden":"true"},null),[[Rd,o.value]]),e.suffix&&s("span",{class:"v-text-field__suffix"},[e.suffix])])}})},details:I?re=>{var N;return s(ae,null,[(N=l.details)==null?void 0:N.call(l,re),p&&s(ae,null,[s("span",null,null),s(Sl,{active:e.persistentCounter||i.value,value:c.value,max:d.value,disabled:e.disabled},l.counter)])])}:void 0})}),At({},f,m,h)}}),M1=B({withBackground:Boolean,...ie(),...Pe(),...Ve()},"VThemeProvider"),E1=R()({name:"VThemeProvider",props:M1(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e);return()=>{var l;return e.withBackground?s(e.tag,{class:["v-theme-provider",a.value,e.class],style:e.style},{default:()=>{var o;return[(o=t.default)==null?void 0:o.call(t)]}}):(l=t.default)==null?void 0:l.call(t)}}}),F1=B({dotColor:String,fillDot:Boolean,hideDot:Boolean,icon:ve,iconColor:String,lineColor:String,...ie(),...ze(),...jt(),...at()},"VTimelineDivider"),O1=R()({name:"VTimelineDivider",props:F1(),setup(e,n){let{slots:t}=n;const{sizeClasses:a,sizeStyles:l}=Zn(e,"v-timeline-divider__dot"),{backgroundColorStyles:o,backgroundColorClasses:i}=Le(F(e,"dotColor")),{roundedClasses:r}=Ue(e,"v-timeline-divider__dot"),{elevationClasses:u}=st(e),{backgroundColorClasses:c,backgroundColorStyles:d}=Le(F(e,"lineColor"));return W(()=>s("div",{class:["v-timeline-divider",{"v-timeline-divider--fill-dot":e.fillDot},e.class],style:e.style},[s("div",{class:["v-timeline-divider__before",c.value],style:d.value},null),!e.hideDot&&s("div",{key:"dot",class:["v-timeline-divider__dot",u.value,r.value,a.value],style:l.value},[s("div",{class:["v-timeline-divider__inner-dot",i.value,r.value],style:o.value},[t.default?s(pe,{key:"icon-defaults",disabled:!e.icon,defaults:{VIcon:{color:e.iconColor,icon:e.icon,size:e.size}}},t.default):s(Be,{key:"icon",color:e.iconColor,icon:e.icon,size:e.size},null)])]),s("div",{class:["v-timeline-divider__after",c.value],style:d.value},null)])),{}}}),hd=B({density:String,dotColor:String,fillDot:Boolean,hideDot:Boolean,hideOpposite:{type:Boolean,default:void 0},icon:ve,iconColor:String,lineInset:[Number,String],...ie(),...Qe(),...at(),...ze(),...jt(),...Ve()},"VTimelineItem"),N1=R()({name:"VTimelineItem",props:hd(),setup(e,n){let{slots:t}=n;const{dimensionStyles:a}=et(e),l=ee(0),o=H();return Q(o,i=>{var r;i&&(l.value=((r=i.$el.querySelector(".v-timeline-divider__dot"))==null?void 0:r.getBoundingClientRect().width)??0)},{flush:"post"}),W(()=>{var i,r;return s("div",{class:["v-timeline-item",{"v-timeline-item--fill-dot":e.fillDot},e.class],style:[{"--v-timeline-dot-size":ne(l.value),"--v-timeline-line-inset":e.lineInset?`calc(var(--v-timeline-dot-size) / 2 + ${ne(e.lineInset)})`:ne(0)},e.style]},[s("div",{class:"v-timeline-item__body",style:a.value},[(i=t.default)==null?void 0:i.call(t)]),s(O1,{ref:o,hideDot:e.hideDot,icon:e.icon,iconColor:e.iconColor,size:e.size,elevation:e.elevation,dotColor:e.dotColor,fillDot:e.fillDot,rounded:e.rounded},{default:t.icon}),e.density!=="compact"&&s("div",{class:"v-timeline-item__opposite"},[!e.hideOpposite&&((r=t.opposite)==null?void 0:r.call(t))])])}),{}}}),R1=B({align:{type:String,default:"center",validator:e=>["center","start"].includes(e)},direction:{type:String,default:"vertical",validator:e=>["vertical","horizontal"].includes(e)},justify:{type:String,default:"auto",validator:e=>["auto","center"].includes(e)},side:{type:String,validator:e=>e==null||["start","end"].includes(e)},lineThickness:{type:[String,Number],default:2},lineColor:String,truncateLine:{type:String,validator:e=>["start","end","both"].includes(e)},...ll(hd({lineInset:0}),["dotColor","fillDot","hideOpposite","iconColor","lineInset","size"]),...ie(),...lt(),...Ve(),...Pe()},"VTimeline"),H1=R()({name:"VTimeline",props:R1(),setup(e,n){let{slots:t}=n;const{themeClasses:a}=De(e),{densityClasses:l}=gt(e),{rtlClasses:o}=nt();Ge({VTimelineDivider:{lineColor:F(e,"lineColor")},VTimelineItem:{density:F(e,"density"),dotColor:F(e,"dotColor"),fillDot:F(e,"fillDot"),hideOpposite:F(e,"hideOpposite"),iconColor:F(e,"iconColor"),lineColor:F(e,"lineColor"),lineInset:F(e,"lineInset"),size:F(e,"size")}});const i=y(()=>{const u=e.side?e.side:e.density!=="default"?"end":null;return u&&`v-timeline--side-${u}`}),r=y(()=>{const u=["v-timeline--truncate-line-start","v-timeline--truncate-line-end"];switch(e.truncateLine){case"both":return u;case"start":return u[0];case"end":return u[1];default:return null}});return W(()=>s(e.tag,{class:["v-timeline",`v-timeline--${e.direction}`,`v-timeline--align-${e.align}`,`v-timeline--justify-${e.justify}`,r.value,{"v-timeline--inset-line":!!e.lineInset},a.value,l.value,i.value,o.value,e.class],style:[{"--v-timeline-line-thickness":ne(e.lineThickness)},e.style]},t)),{}}}),z1=B({...ie(),...Tt({variant:"text"})},"VToolbarItems"),W1=R()({name:"VToolbarItems",props:z1(),setup(e,n){let{slots:t}=n;return Ge({VBtn:{color:F(e,"color"),height:"inherit",variant:F(e,"variant")}}),W(()=>{var a;return s("div",{class:["v-toolbar-items",e.class],style:e.style},[(a=t.default)==null?void 0:a.call(t)])}),{}}}),j1=B({id:String,text:String,...Je(_a({closeOnBack:!1,location:"end",locationStrategy:"connected",eager:!0,minWidth:0,offset:10,openOnClick:!1,openOnHover:!0,origin:"auto",scrim:!1,scrollStrategy:"reposition",transition:!1}),["absolute","persistent"])},"VTooltip"),yd=R()({name:"VTooltip",props:j1(),emits:{"update:modelValue":e=>!0},setup(e,n){let{slots:t}=n;const a=de(e,"modelValue"),{scopeId:l}=Fn(),o=rt(),i=y(()=>e.id||`v-tooltip-${o}`),r=H(),u=y(()=>e.location.split(" ").length>1?e.location:e.location+" center"),c=y(()=>e.origin==="auto"||e.origin==="overlap"||e.origin.split(" ").length>1||e.location.split(" ").length>1?e.origin:e.origin+" center"),d=y(()=>e.transition?e.transition:a.value?"scale-transition":"fade-transition"),v=y(()=>z({"aria-describedby":i.value},e.activatorProps));return W(()=>{const f=Rt.filterProps(e);return s(Rt,z({ref:r,class:["v-tooltip",e.class],style:e.style,id:i.value},f,{modelValue:a.value,"onUpdate:modelValue":m=>a.value=m,transition:d.value,absolute:!0,location:u.value,origin:c.value,persistent:!0,role:"tooltip",activatorProps:v.value,_disableGlobalStack:!0},l),{activator:t.activator,default:function(){var g;for(var m=arguments.length,b=new Array(m),h=0;h!0},setup(e,n){let{slots:t}=n;const a=Vu(e,"validation");return()=>{var l;return(l=t.default)==null?void 0:l.call(t,a)}}}),Y1=Object.freeze(Object.defineProperty({__proto__:null,VAlert:mk,VAlertTitle:mu,VApp:Cb,VAppBar:Wb,VAppBarNavIcon:ck,VAppBarTitle:dk,VAutocomplete:ES,VAvatar:It,VBadge:OS,VBanner:HS,VBannerActions:Ju,VBannerText:Qu,VBottomNavigation:WS,VBottomSheet:GS,VBreadcrumbs:qS,VBreadcrumbsDivider:tc,VBreadcrumbsItem:nc,VBtn:Ae,VBtnGroup:vo,VBtnToggle:qb,VCard:e0,VCardActions:ac,VCardItem:ic,VCardSubtitle:lc,VCardText:rc,VCardTitle:oc,VCarousel:u0,VCarouselItem:d0,VCheckbox:Ck,VCheckboxBtn:Ut,VChip:ta,VChipGroup:Ik,VClassIcon:ii,VCode:v0,VCol:Hw,VColorPicker:ew,VCombobox:aw,VComponentIcon:so,VConfirmEdit:ow,VContainer:Fw,VCounter:Sl,VDataIterator:gw,VDataTable:Aw,VDataTableFooter:ga,VDataTableHeaders:pn,VDataTableRow:Fi,VDataTableRows:xn,VDataTableServer:Mw,VDataTableVirtual:Dw,VDatePicker:eV,VDatePickerControls:Io,VDatePickerHeader:$o,VDatePickerMonth:To,VDatePickerMonths:Ao,VDatePickerYears:Bo,VDefaultsProvider:pe,VDialog:So,VDialogBottomTransition:Pb,VDialogTopTransition:Ib,VDialogTransition:dl,VDivider:xa,VEmptyState:nV,VExpandTransition:vl,VExpandXTransition:ci,VExpansionPanel:aV,VExpansionPanelText:Do,VExpansionPanelTitle:Lo,VExpansionPanels:iV,VFab:sV,VFabTransition:_b,VFadeTransition:ua,VField:na,VFieldLabel:la,VFileInput:cV,VFooter:vV,VForm:mV,VHover:hV,VIcon:Be,VImg:Yt,VInfiniteScroll:bV,VInput:ct,VItem:wV,VItemGroup:SV,VKbd:VV,VLabel:ea,VLayout:pV,VLayoutItem:_V,VLazy:IV,VLigatureIcon:mb,VList:kl,VListGroup:ho,VListImg:Zk,VListItem:Kt,VListItemAction:Qk,VListItemMedia:tS,VListItemSubtitle:Lu,VListItemTitle:Mu,VListSubheader:Eu,VLocaleProvider:TV,VMain:BV,VMenu:qn,VMessages:ku,VNavigationDrawer:HV,VNoSsr:zV,VOtpInput:jV,VOverlay:Rt,VPagination:_o,VParallax:UV,VProgressCircular:Kn,VProgressLinear:ml,VRadio:qV,VRadioGroup:ZV,VRangeSlider:QV,VRating:t1,VResponsive:uo,VRow:Kw,VScaleTransition:si,VScrollXReverseTransition:Tb,VScrollXTransition:$b,VScrollYReverseTransition:Bb,VScrollYTransition:Ab,VSelect:xi,VSelectionControl:tn,VSelectionControlGroup:hu,VSheet:Cn,VSkeletonLoader:o1,VSlideGroup:fa,VSlideGroupItem:i1,VSlideXReverseTransition:Lb,VSlideXTransition:Db,VSlideYReverseTransition:Mb,VSlideYTransition:ui,VSlider:xo,VSnackbar:u1,VSpacer:Kc,VSparkline:f1,VSpeedDial:g1,VStepper:V1,VStepperActions:sd,VStepperHeader:ud,VStepperItem:cd,VStepperWindow:dd,VStepperWindowItem:vd,VSvgIcon:oi,VSwitch:p1,VSystemBar:_1,VTab:fd,VTable:_n,VTabs:B1,VTabsWindow:md,VTabsWindowItem:gd,VTextField:Sn,VTextarea:L1,VThemeProvider:E1,VTimeline:H1,VTimelineItem:N1,VToolbar:co,VToolbarItems:W1,VToolbarTitle:ri,VTooltip:yd,VValidation:G1,VVirtualScroll:Vl,VWindow:wn,VWindowItem:Vn},Symbol.toStringTag,{value:"Module"}));function U1(e,n){const t=n.modifiers||{},a=n.value,{once:l,immediate:o,...i}=t,r=!Object.keys(i).length,{handler:u,options:c}=typeof a=="object"?a:{handler:a,options:{attributes:(i==null?void 0:i.attr)??r,characterData:(i==null?void 0:i.char)??r,childList:(i==null?void 0:i.child)??r,subtree:(i==null?void 0:i.sub)??r}},d=new MutationObserver(function(){let v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],f=arguments.length>1?arguments[1]:void 0;u==null||u(v,f),l&&bd(e,n)});o&&(u==null||u([],d)),e._mutate=Object(e._mutate),e._mutate[n.instance.$.uid]={observer:d},d.observe(e,c)}function bd(e,n){var t;(t=e._mutate)!=null&&t[n.instance.$.uid]&&(e._mutate[n.instance.$.uid].observer.disconnect(),delete e._mutate[n.instance.$.uid])}const K1={mounted:U1,unmounted:bd};function q1(e,n){var l,o;const t=n.value,a={passive:!((l=n.modifiers)!=null&&l.active)};window.addEventListener("resize",t,a),e._onResize=Object(e._onResize),e._onResize[n.instance.$.uid]={handler:t,options:a},(o=n.modifiers)!=null&&o.quiet||t()}function X1(e,n){var l;if(!((l=e._onResize)!=null&&l[n.instance.$.uid]))return;const{handler:t,options:a}=e._onResize[n.instance.$.uid];window.removeEventListener("resize",t,a),delete e._onResize[n.instance.$.uid]}const Z1={mounted:q1,unmounted:X1};function kd(e,n){const{self:t=!1}=n.modifiers??{},a=n.value,l=typeof a=="object"&&a.options||{passive:!0},o=typeof a=="function"||"handleEvent"in a?a:a.handler,i=t?e:n.arg?document.querySelector(n.arg):window;i&&(i.addEventListener("scroll",o,l),e._onScroll=Object(e._onScroll),e._onScroll[n.instance.$.uid]={handler:o,options:l,target:t?void 0:i})}function Sd(e,n){var o;if(!((o=e._onScroll)!=null&&o[n.instance.$.uid]))return;const{handler:t,options:a,target:l=e}=e._onScroll[n.instance.$.uid];l.removeEventListener("scroll",t,a),delete e._onScroll[n.instance.$.uid]}function J1(e,n){n.value!==n.oldValue&&(Sd(e,n),kd(e,n))}const Q1={mounted:kd,unmounted:Sd,updated:J1};function eC(e,n){const t=typeof e=="string"?nn(e):e,a=tC(t,n);return{mounted:a,updated:a,unmounted(l){ls(null,l)}}}function tC(e,n){return function(t,a,l){var v,f,m;const o=typeof n=="function"?n(a):n,i=((v=a.value)==null?void 0:v.text)??a.value??(o==null?void 0:o.text),r=Uo(a.value)?a.value:{},u=()=>i??t.textContent,c=(l.ctx===a.instance.$?(f=nC(l,a.instance.$))==null?void 0:f.provides:(m=l.ctx)==null?void 0:m.provides)??a.instance.$.provides,d=an(e,z(o,r),u);d.appContext=Object.assign(Object.create(null),a.instance.$.appContext,{provides:c}),ls(d,t)}}function nC(e,n){const t=new Set,a=o=>{var i,r;for(const u of o){if(!u)continue;if(u===e||u.el&&e.el&&u.el===e.el)return!0;t.add(u);let c;if(u.suspense?c=a([u.ssContent]):Array.isArray(u.children)?c=a(u.children):(i=u.component)!=null&&i.vnode&&(c=a([(r=u.component)==null?void 0:r.subTree])),c)return c;t.delete(u)}return!1};if(!a([n.subTree]))return n;const l=Array.from(t).reverse();for(const o of l)if(o.component)return o.component;return n}const aC=eC(yd,e=>{var n;return{activator:"parent",location:(n=e.arg)==null?void 0:n.replace("-"," "),text:typeof e.value=="boolean"?void 0:e.value}}),lC=Object.freeze(Object.defineProperty({__proto__:null,ClickOutside:Uu,Intersect:ka,Mutate:K1,Resize:Z1,Ripple:Zt,Scroll:Q1,Tooltip:aC,Touch:_i},Symbol.toStringTag,{value:"Module"})),iC={extends:wh,enhanceApp({app:e}){const n=qs({components:Y1,directives:lC});e.use(n)}};export{iC as R,ag as c,_e as u}; diff --git a/assets/components_common_button.md.BWGrmsmy.js b/assets/components_common_button.md.BWGrmsmy.js deleted file mode 100644 index d9e3a3f..0000000 --- a/assets/components_common_button.md.BWGrmsmy.js +++ /dev/null @@ -1,10 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"버튼 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/button.md","filePath":"components/common/button.md"}'),e={name:"components/common/button.md"};function l(h,s,p,k,o,E){return t(),a("div",null,s[0]||(s[0]=[n(`

버튼 컴포넌트

ButtonBox

파일 위치

src/views/ui/components/common/button/ButtonBox.vue

사용 예제

vue
<template>
-  <ButtonBox
-    text="저장"
-    @click="handleSave"
-  />
-</template>

Vuetify 버튼

Vuetify의 v-btn 컴포넌트를 직접 사용할 수도 있습니다.

vue
<template>
-  <v-btn color="primary" @click="handleClick">
-    클릭
-  </v-btn>
-</template>
`,9)]))}const c=i(e,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/components_common_button.md.BWGrmsmy.lean.js b/assets/components_common_button.md.BWGrmsmy.lean.js deleted file mode 100644 index 3a48338..0000000 --- a/assets/components_common_button.md.BWGrmsmy.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"버튼 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/button.md","filePath":"components/common/button.md"}'),e={name:"components/common/button.md"};function l(h,s,p,k,o,E){return t(),a("div",null,s[0]||(s[0]=[n("",9)]))}const c=i(e,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/components_common_button.md.CyOMOjD3.js b/assets/components_common_button.md.CyOMOjD3.js new file mode 100644 index 0000000..59136d5 --- /dev/null +++ b/assets/components_common_button.md.CyOMOjD3.js @@ -0,0 +1,10 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"버튼 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/button.md","filePath":"components/common/button.md"}'),e={name:"components/common/button.md"};function l(h,s,p,k,o,E){return t(),a("div",null,s[0]||(s[0]=[n(`

버튼 컴포넌트

ButtonBox

파일 위치

src/views/ui/components/common/button/ButtonBox.vue

사용 예제

vue
<template>
+  <ButtonBox
+    text="저장"
+    @click="handleSave"
+  />
+</template>

Vuetify 버튼

Vuetify의 v-btn 컴포넌트를 직접 사용할 수도 있습니다.

vue
<template>
+  <v-btn color="primary" @click="handleClick">
+    클릭
+  </v-btn>
+</template>
`,9)]))}const c=i(e,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/components_common_button.md.CyOMOjD3.lean.js b/assets/components_common_button.md.CyOMOjD3.lean.js new file mode 100644 index 0000000..d1d279d --- /dev/null +++ b/assets/components_common_button.md.CyOMOjD3.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"버튼 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/button.md","filePath":"components/common/button.md"}'),e={name:"components/common/button.md"};function l(h,s,p,k,o,E){return t(),a("div",null,s[0]||(s[0]=[n("",9)]))}const c=i(e,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/components_common_input.md.BX7gGsI0.js b/assets/components_common_input.md.BX7gGsI0.js new file mode 100644 index 0000000..81f4096 --- /dev/null +++ b/assets/components_common_input.md.BX7gGsI0.js @@ -0,0 +1,11 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"입력 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/input.md","filePath":"components/common/input.md"}'),e={name:"components/common/input.md"};function l(p,s,h,k,o,d){return t(),a("div",null,s[0]||(s[0]=[n(`

입력 컴포넌트

InputPhone

파일 위치

src/views/ui/components/common/input/InputPhone.vue

사용 예제

vue
<template>
+  <InputPhone
+    v-model="phoneNumber"
+    label="전화번호"
+  />
+</template>

Vuetify 입력

Vuetify의 v-text-field 컴포넌트를 직접 사용할 수도 있습니다.

vue
<template>
+  <v-text-field
+    v-model="value"
+    label="입력"
+  />
+</template>
`,9)]))}const c=i(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_common_input.md.BX7gGsI0.lean.js b/assets/components_common_input.md.BX7gGsI0.lean.js new file mode 100644 index 0000000..6113b97 --- /dev/null +++ b/assets/components_common_input.md.BX7gGsI0.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"입력 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/input.md","filePath":"components/common/input.md"}'),e={name:"components/common/input.md"};function l(p,s,h,k,o,d){return t(),a("div",null,s[0]||(s[0]=[n("",9)]))}const c=i(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_common_input.md.BZOrWVFI.js b/assets/components_common_input.md.BZOrWVFI.js deleted file mode 100644 index 2cf9d44..0000000 --- a/assets/components_common_input.md.BZOrWVFI.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"입력 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/input.md","filePath":"components/common/input.md"}'),e={name:"components/common/input.md"};function l(p,s,h,k,o,d){return t(),a("div",null,s[0]||(s[0]=[n(`

입력 컴포넌트

InputPhone

파일 위치

src/views/ui/components/common/input/InputPhone.vue

사용 예제

vue
<template>
-  <InputPhone
-    v-model="phoneNumber"
-    label="전화번호"
-  />
-</template>

Vuetify 입력

Vuetify의 v-text-field 컴포넌트를 직접 사용할 수도 있습니다.

vue
<template>
-  <v-text-field
-    v-model="value"
-    label="입력"
-  />
-</template>
`,9)]))}const c=i(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_common_input.md.BZOrWVFI.lean.js b/assets/components_common_input.md.BZOrWVFI.lean.js deleted file mode 100644 index 074ee05..0000000 --- a/assets/components_common_input.md.BZOrWVFI.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"입력 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/input.md","filePath":"components/common/input.md"}'),e={name:"components/common/input.md"};function l(p,s,h,k,o,d){return t(),a("div",null,s[0]||(s[0]=[n("",9)]))}const c=i(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_common_loading.md.BjmdaABH.js b/assets/components_common_loading.md.BjmdaABH.js new file mode 100644 index 0000000..4539945 --- /dev/null +++ b/assets/components_common_loading.md.BjmdaABH.js @@ -0,0 +1,9 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"로딩 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/loading.md","filePath":"components/common/loading.md"}'),e={name:"components/common/loading.md"};function l(h,s,p,k,o,r){return n(),a("div",null,s[0]||(s[0]=[t(`

로딩 컴포넌트

Loading

파일 위치

src/views/ui/components/common/Loading.vue

사용 예제

vue
<template>
+  <Loading :isLoading="loadingStore.isLoading" />
+</template>
+
+<script setup>
+import { useLoadingStore } from '@/utils/stores/loadingStore.js'
+
+const loadingStore = useLoadingStore()
+</script>
`,6)]))}const g=i(e,[["render",l]]);export{E as __pageData,g as default}; diff --git a/assets/components_common_loading.md.BjmdaABH.lean.js b/assets/components_common_loading.md.BjmdaABH.lean.js new file mode 100644 index 0000000..404fcf0 --- /dev/null +++ b/assets/components_common_loading.md.BjmdaABH.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"로딩 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/loading.md","filePath":"components/common/loading.md"}'),e={name:"components/common/loading.md"};function l(h,s,p,k,o,r){return n(),a("div",null,s[0]||(s[0]=[t("",6)]))}const g=i(e,[["render",l]]);export{E as __pageData,g as default}; diff --git a/assets/components_common_loading.md.xYhJ_7FD.js b/assets/components_common_loading.md.xYhJ_7FD.js deleted file mode 100644 index d481335..0000000 --- a/assets/components_common_loading.md.xYhJ_7FD.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"로딩 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/loading.md","filePath":"components/common/loading.md"}'),e={name:"components/common/loading.md"};function l(h,s,p,k,o,r){return n(),a("div",null,s[0]||(s[0]=[t(`

로딩 컴포넌트

Loading

파일 위치

src/views/ui/components/common/Loading.vue

사용 예제

vue
<template>
-  <Loading :isLoading="loadingStore.isLoading" />
-</template>
-
-<script setup>
-import { useLoadingStore } from '@/utils/stores/loadingStore.js'
-
-const loadingStore = useLoadingStore()
-</script>
`,6)]))}const g=i(e,[["render",l]]);export{E as __pageData,g as default}; diff --git a/assets/components_common_loading.md.xYhJ_7FD.lean.js b/assets/components_common_loading.md.xYhJ_7FD.lean.js deleted file mode 100644 index 9a1c766..0000000 --- a/assets/components_common_loading.md.xYhJ_7FD.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"로딩 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/loading.md","filePath":"components/common/loading.md"}'),e={name:"components/common/loading.md"};function l(h,s,p,k,o,r){return n(),a("div",null,s[0]||(s[0]=[t("",6)]))}const g=i(e,[["render",l]]);export{E as __pageData,g as default}; diff --git a/assets/components_common_lookup.md.BWqFzC69.js b/assets/components_common_lookup.md.BWqFzC69.js new file mode 100644 index 0000000..dcac879 --- /dev/null +++ b/assets/components_common_lookup.md.BWqFzC69.js @@ -0,0 +1,12 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"조회 컴포넌트 (LookUp)","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/lookup.md","filePath":"components/common/lookup.md"}'),l={name:"components/common/lookup.md"};function p(e,s,h,o,k,r){return n(),i("div",null,s[0]||(s[0]=[t(`

조회 컴포넌트 (LookUp)

LookUpBox

파일 위치

src/views/ui/components/common/lookup/LookUpBox.vue

사용 예제

vue
<template>
+  <LookUpBox
+    v-model="selectedValue"
+    :lookup-config="lookupConfig"
+  />
+</template>
+
+<script setup>
+const lookupConfig = {
+  // 조회 설정
+}
+</script>
`,6)]))}const c=a(l,[["render",p]]);export{d as __pageData,c as default}; diff --git a/assets/components_common_lookup.md.BWqFzC69.lean.js b/assets/components_common_lookup.md.BWqFzC69.lean.js new file mode 100644 index 0000000..7230fd9 --- /dev/null +++ b/assets/components_common_lookup.md.BWqFzC69.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"조회 컴포넌트 (LookUp)","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/lookup.md","filePath":"components/common/lookup.md"}'),l={name:"components/common/lookup.md"};function p(e,s,h,o,k,r){return n(),i("div",null,s[0]||(s[0]=[t("",6)]))}const c=a(l,[["render",p]]);export{d as __pageData,c as default}; diff --git a/assets/components_common_lookup.md.YgFAeO8Z.js b/assets/components_common_lookup.md.YgFAeO8Z.js deleted file mode 100644 index 78311dc..0000000 --- a/assets/components_common_lookup.md.YgFAeO8Z.js +++ /dev/null @@ -1,12 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"조회 컴포넌트 (LookUp)","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/lookup.md","filePath":"components/common/lookup.md"}'),l={name:"components/common/lookup.md"};function p(e,s,h,o,k,r){return n(),i("div",null,s[0]||(s[0]=[t(`

조회 컴포넌트 (LookUp)

LookUpBox

파일 위치

src/views/ui/components/common/lookup/LookUpBox.vue

사용 예제

vue
<template>
-  <LookUpBox
-    v-model="selectedValue"
-    :lookup-config="lookupConfig"
-  />
-</template>
-
-<script setup>
-const lookupConfig = {
-  // 조회 설정
-}
-</script>
`,6)]))}const c=a(l,[["render",p]]);export{d as __pageData,c as default}; diff --git a/assets/components_common_lookup.md.YgFAeO8Z.lean.js b/assets/components_common_lookup.md.YgFAeO8Z.lean.js deleted file mode 100644 index 5154663..0000000 --- a/assets/components_common_lookup.md.YgFAeO8Z.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"조회 컴포넌트 (LookUp)","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/lookup.md","filePath":"components/common/lookup.md"}'),l={name:"components/common/lookup.md"};function p(e,s,h,o,k,r){return n(),i("div",null,s[0]||(s[0]=[t("",6)]))}const c=a(l,[["render",p]]);export{d as __pageData,c as default}; diff --git a/assets/components_common_select.md.B-SZvcoi.js b/assets/components_common_select.md.B-SZvcoi.js new file mode 100644 index 0000000..73d2670 --- /dev/null +++ b/assets/components_common_select.md.B-SZvcoi.js @@ -0,0 +1,143 @@ +import{h as u,C as c,b as L,o as t,aH as T,w as k,n as D,_ as G,c as p,G as n,j as a,F as C,B as b,N as v,t as m,K as S,a4 as O,p as A,aG as f}from"./chunks/framework.DytOxJW6.js";const I={__name:"SelectBoxSQL",props:{modelValue:String,optionLabel:String,optionValue:String,defaultOption:Boolean,readOnly:Boolean,label:String,hidden:Boolean,data:{type:Array,default:[]}},emits:["update:modelValue"],setup(E,{emit:g}){const s=E,d=u(()=>s.defaultOption?[{[s.optionLabel]:"선택",[s.optionValue]:""},...s.data]:s.data),F=g,l=u({get:()=>d.value.find(i=>i[s.optionValue]===s.modelValue),set:i=>F("update:modelValue",i?i[s.optionValue]:"")});return(i,r)=>{const y=c("v-combobox");return t(),L(y,{modelValue:l.value,"onUpdate:modelValue":r[0]||(r[0]=o=>l.value=o),items:d.value,"item-title":s.optionLabel,"item-value":s.optionValue,readonly:s.readOnly,class:D(["custom-combobox text-body-2",s.readOnly?"custom-combobox-readonly":""]),variant:s.readOnly?"plain":"outlined","hide-details":"","menu-props":{contentClass:"custom-combobox-menu text-body-2"}},T({_:2},[s.hidden?{name:"selection",fn:k(({item:o})=>[]),key:"0"}:void 0]),1032,["modelValue","items","item-title","item-value","readonly","class","variant"])}}},M={class:"text-center",style:{width:"100%"}},Q={class:"custom-mtSelect-span"},N={style:{width:"100%",height:"250px"}},j={class:"table table-sm",style:{width:"100%","margin-bottom":"0"}},R=["colspan"],z=["onClick"],U={__name:"MultiSelectBoxSQL",props:{modelValue:String,optionValue:String,optionLabel:String,defaultOption:Boolean,columns:{type:Array,default:()=>[]},disabled:Boolean,dropType:{type:String,default:"bottom",validator:E=>["bottom","top","center","start","end"].includes(E)||E===void 0||E===null},hidden:Boolean,callback:Function,data:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(E,{emit:g}){const s=E,d=u(()=>s.data),F=g,l=u({get:()=>s.modelValue,set:e=>F("update:modelValue",e)}),i=u(()=>{const e=d.value.find(x=>x[s.optionValue]===s.modelValue);return e?e[s.optionLabel]:null}),r=e=>l.value===e,y=e=>{l.value===e[s.optionValue]?l.value="":l.value=e[s.optionValue],s.callback&&typeof s.callback=="function"&&s.callback(l.value)},o=()=>{l.value=""};return(e,x)=>{const q=c("v-btn"),V=c("v-icon"),P=c("v-card"),w=c("v-menu");return t(),p("div",M,[n(w,{"offset-y":"",location:s.dropType},{activator:k(({props:h})=>[a("div",S({class:"custom-mtSelect-div",style:{display:"flex",width:"100%","background-color":"white",border:"1px solid #CCCAD0"}},h),[n(q,{size:"x-small",class:"custom-mtSelect-btn",disabled:s.disabled,variant:"text"},{default:k(()=>[a("span",Q,m(i.value||"선택"),1)]),_:1},8,["disabled"]),n(q,{size:"x-small",class:"custom-mtSelect-toggleBtn",disabled:s.disabled,color:"#CCCAD0",variant:"text"},{default:k(()=>[n(V,{icon:"ri-arrow-down-s-line",color:"black"})]),_:1},8,["disabled"])],16)]),default:k(()=>[n(P,{elevation:"1",border:""},{default:k(()=>[a("div",N,[a("table",j,[a("colgroup",null,[(t(!0),p(C,null,b(s.columns,(h,_)=>(t(),p("col",{style:v({width:h.width})},null,4))),256))]),a("thead",null,[a("tr",null,[(t(!0),p(C,null,b(s.columns,(h,_)=>(t(),p("th",{class:"sticky-top",style:v([{background:"#E5F0FE"},h.style])},m(h.caption),5))),256))])]),a("tbody",null,[a("tr",null,[a("td",{colspan:s.columns.length,onClick:o,class:D(["custom-row",{"active-row":r("")}]),style:{textAlign:"center"}},"선택 ",10,R)]),(t(!0),p(C,null,b(d.value,(h,_)=>(t(),p("tr",{onClick:B=>y(h),class:D(["custom-row",{"active-row":r(h[s.optionValue])}])},[(t(!0),p(C,null,b(s.columns,B=>(t(),p("td",{style:v(B.style)},m(h[B.ref]),5))),256))],10,z))),256))])])])]),_:1})]),_:1},8,["location"])])}}},W=G(U,[["__scopeId","data-v-be01a021"]]),J=JSON.parse('{"title":"선택 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/select.md","filePath":"components/common/select.md"}'),$={name:"components/common/select.md"},K=Object.assign($,{setup(E){const g=O({bizCompId:"l_SYS005",optionValue:"code",optionLabel:"name",defaultOption:!0,disabled:!1,dropType:"bottom",label:"메뉴 카테고리",columns:[{caption:"code",ref:"code",width:"100px",style:"text-align:left"},{caption:"name",ref:"name",width:"100px",style:"text-align:left"}],data:[{code:"D001",name:"개발팀"},{code:"D002",name:"기획팀"},{code:"D003",name:"디자인팀"}]}),s=A(""),d=A(""),F=A([{code:"D001",name:"개발팀"},{code:"D002",name:"기획팀"},{code:"D003",name:"디자인팀"}]);return(l,i)=>{const r=c("v-col"),y=c("v-row");return t(),p("div",null,[i[2]||(i[2]=f(`

선택 컴포넌트

개요

프로젝트에서 사용하는 선택(Select) 관련 컴포넌트들입니다. 다양한 형태의 선택 컴포넌트를 제공합니다.

SelectBoxSQL

개요

SQL 쿼리 결과를 기반으로 하는 단일 선택 컴포넌트입니다. Vuetify의 v-combobox를 기반으로 구현되었습니다.

파일 위치

src/views/ui/components/common/select/SelectBoxSQL.vue

Props

속성타입기본값설명
modelValueString-선택된 값 (v-model)
optionLabelString-표시할 라벨 필드명
optionValueString-값으로 사용할 필드명
defaultOptionBooleanfalse'선택' 옵션 추가 여부
readOnlyBooleanfalse읽기 전용 모드
labelString-라벨 텍스트
hiddenBooleanfalse선택된 값 숨김 여부
dataArray[]선택 옵션 데이터

사용 예제

vue

+<script setup>
+    import {ref} from 'vue'
+
+    const selectedValue = ref('')
+    const options = ref([
+        {code: 'D001', name: '개발팀'},
+        {code: 'D002', name: '기획팀'},
+        {code: 'D003', name: '디자인팀'},
+    ])
+</script>
+
+<template>
+    <p> selectedValue : {{ selectedValue }}</p>
+    <v-row>
+        <v-col cols="6">
+            <SelectBoxSQL
+                v-model="selectedValue"
+                :data="options"
+                option-label="name"
+                option-value="code"
+                default-option
+                label="부서 선택"
+            />
+        </v-col>
+    </v-row>
+</template>

실제 컴포넌트

`,13)),a("p",null," selectedValue : "+m(s.value),1),n(y,null,{default:k(()=>[n(r,{cols:"6"},{default:k(()=>[n(I,{modelValue:s.value,"onUpdate:modelValue":i[0]||(i[0]=o=>s.value=o),data:F.value,"option-label":"name","option-value":"code","default-option":"",label:"부서 선택"},null,8,["modelValue","data"])]),_:1})]),_:1}),i[3]||(i[3]=f(`

API 연동 예제

vue
<script setup>
+import { ref, onMounted } from 'vue'
+import axiosInstance from '@/CustomAxios.js'
+
+const selectedValue = ref('')
+const options = ref([])
+
+const loadOptions = async () => {
+  try {
+    const response = await axiosInstance.post('/api/codes/departments')
+    if (response.status === 'S') {
+      options.value = response.data
+    }
+  } catch (error) {
+    console.error('옵션 로드 실패:', error)
+  }
+}
+
+onMounted(() => {
+  loadOptions()
+})
+</script>

MultiSelectBoxSQL

개요

다중 컬럼을 표시하는 선택 컴포넌트입니다. 테이블 형태로 옵션을 표시하며, 여러 컬럼 정보를 한 번에 볼 수 있습니다.

파일 위치

src/views/ui/components/common/select/MultiSelectBoxSQL.vue

Props

속성타입기본값설명
modelValueString-선택된 값 (v-model)
optionLabelString-표시할 라벨 필드명
optionValueString-값으로 사용할 필드명
defaultOptionBooleanfalse'선택' 옵션 추가 여부
disabledBooleanfalse비활성화 여부
dropTypeString'bottom'드롭다운 위치 (bottom, top, center, start, end)
hiddenBooleanfalse선택된 값 숨김 여부
callbackFunction-선택 시 호출할 콜백 함수
columnsArray[]컬럼 정의 배열
dataArray[]선택 옵션 데이터

Columns 정의

javascript
const columns = [
+  { 
+    caption: '코드',      // 컬럼 헤더 텍스트
+    ref: 'code',          // 데이터 필드명
+    width: '150px',       // 컬럼 너비
+    style: 'text-align:left'  // 스타일
+  },
+  { 
+    caption: '명칭', 
+    ref: 'name', 
+    width: '200px',
+    style: 'text-align:left'
+  },
+]

사용 예제

vue
<template>
+  <MultiSelectBoxSQL
+    v-model="selectedValue"
+    :data="options"
+    option-label="name"
+    option-value="code"
+    :columns="columns"
+    default-option
+    @update:modelValue="handleChange"
+  />
+</template>
+
+<script setup>
+import { ref } from 'vue'
+
+const selectedValue = ref('')
+const options = ref([
+  { code: 'C001', name: '코드1', description: '설명1' },
+  { code: 'C002', name: '코드2', description: '설명2' },
+])
+
+const columns = [
+  { caption: '코드', ref: 'code', width: '150px', style: 'text-align:left' },
+  { caption: '명칭', ref: 'name', width: '200px', style: 'text-align:left' },
+  { caption: '설명', ref: 'description', width: '300px', style: 'text-align:left' },
+]
+
+const handleChange = (value) => {
+  console.log('선택된 값:', value)
+}
+</script>

`,14)),n(y,null,{default:k(()=>[n(r,{cols:"6"},{default:k(()=>[n(W,S({modelValue:d.value,"onUpdate:modelValue":i[1]||(i[1]=o=>d.value=o)},g),null,16,["modelValue"])]),_:1})]),_:1}),a("p",null,"선택된 값: "+m(d.value),1),i[4]||(i[4]=f(`

콜백 함수 사용

vue
<template>
+  <MultiSelectBoxSQL
+    v-model="selectedValue"
+    :data="options"
+    option-label="name"
+    option-value="code"
+    :columns="columns"
+    :callback="handleSelect"
+  />
+</template>
+
+<script setup>
+const handleSelect = (value) => {
+  console.log('선택됨:', value)
+  // 추가 로직 처리
+  if (value) {
+    loadRelatedData(value)
+  }
+}
+</script>

SelectBoxDate

개요

날짜 선택 컴포넌트입니다. 날짜 범위 선택을 지원합니다.

파일 위치

src/views/ui/components/common/select/SelectBoxDate.vue

사용 예제

vue
<template>
+  <SelectBoxDate
+    v-model="selectedDate"
+    label="날짜 선택"
+  />
+</template>
+
+<script setup>
+import { ref } from 'vue'
+
+const selectedDate = ref('')
+</script>

AG Grid에서 사용하기

AG Grid의 셀 에디터로 사용할 수 있습니다.

GridMultiSelectWrapper

AG Grid에서 MultiSelectBoxSQL을 사용하기 위한 래퍼 컴포넌트입니다.

파일 위치: src/views/ui/components/grid/GridMultiSelectWrapper.vue

사용 예제

vue
<script setup>
+const columnDefs = ref([
+  {
+    field: 'department',
+    headerName: '부서',
+    editable: true,
+    cellEditor: 'GridMultiSelectWrapper',
+    cellEditorParams: {
+      options: departmentOptions,
+      columns: [
+        { caption: '코드', ref: 'code', width: '100px' },
+        { caption: '명칭', ref: 'name', width: '200px' },
+      ],
+      optionValue: 'code',
+      optionLabel: 'name',
+    },
+  },
+])
+</script>

스타일 커스터마이징

컴포넌트는 커스텀 CSS 클래스를 사용하므로 필요에 따라 스타일을 수정할 수 있습니다.

vue
<style scoped>
+.custom-combobox {
+  /* 커스텀 스타일 */
+}
+</style>

주의사항

  1. 데이터 형식: data 배열의 각 객체는 optionLabeloptionValue에 해당하는 필드를 포함해야 합니다.

  2. 반응성: data 배열이 변경되면 자동으로 옵션이 업데이트됩니다.

  3. 성능: 대량의 데이터를 사용하는 경우 가상 스크롤링을 고려하세요.

관련 문서

`,23))])}}});export{J as __pageData,K as default}; diff --git a/assets/components_common_select.md.B-SZvcoi.lean.js b/assets/components_common_select.md.B-SZvcoi.lean.js new file mode 100644 index 0000000..2b98a6c --- /dev/null +++ b/assets/components_common_select.md.B-SZvcoi.lean.js @@ -0,0 +1 @@ +import{h as u,C as c,b as L,o as t,aH as T,w as k,n as D,_ as G,c as p,G as n,j as a,F as C,B as b,N as v,t as m,K as S,a4 as O,p as A,aG as f}from"./chunks/framework.DytOxJW6.js";const I={__name:"SelectBoxSQL",props:{modelValue:String,optionLabel:String,optionValue:String,defaultOption:Boolean,readOnly:Boolean,label:String,hidden:Boolean,data:{type:Array,default:[]}},emits:["update:modelValue"],setup(E,{emit:g}){const s=E,d=u(()=>s.defaultOption?[{[s.optionLabel]:"선택",[s.optionValue]:""},...s.data]:s.data),F=g,l=u({get:()=>d.value.find(i=>i[s.optionValue]===s.modelValue),set:i=>F("update:modelValue",i?i[s.optionValue]:"")});return(i,r)=>{const y=c("v-combobox");return t(),L(y,{modelValue:l.value,"onUpdate:modelValue":r[0]||(r[0]=o=>l.value=o),items:d.value,"item-title":s.optionLabel,"item-value":s.optionValue,readonly:s.readOnly,class:D(["custom-combobox text-body-2",s.readOnly?"custom-combobox-readonly":""]),variant:s.readOnly?"plain":"outlined","hide-details":"","menu-props":{contentClass:"custom-combobox-menu text-body-2"}},T({_:2},[s.hidden?{name:"selection",fn:k(({item:o})=>[]),key:"0"}:void 0]),1032,["modelValue","items","item-title","item-value","readonly","class","variant"])}}},M={class:"text-center",style:{width:"100%"}},Q={class:"custom-mtSelect-span"},N={style:{width:"100%",height:"250px"}},j={class:"table table-sm",style:{width:"100%","margin-bottom":"0"}},R=["colspan"],z=["onClick"],U={__name:"MultiSelectBoxSQL",props:{modelValue:String,optionValue:String,optionLabel:String,defaultOption:Boolean,columns:{type:Array,default:()=>[]},disabled:Boolean,dropType:{type:String,default:"bottom",validator:E=>["bottom","top","center","start","end"].includes(E)||E===void 0||E===null},hidden:Boolean,callback:Function,data:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(E,{emit:g}){const s=E,d=u(()=>s.data),F=g,l=u({get:()=>s.modelValue,set:e=>F("update:modelValue",e)}),i=u(()=>{const e=d.value.find(x=>x[s.optionValue]===s.modelValue);return e?e[s.optionLabel]:null}),r=e=>l.value===e,y=e=>{l.value===e[s.optionValue]?l.value="":l.value=e[s.optionValue],s.callback&&typeof s.callback=="function"&&s.callback(l.value)},o=()=>{l.value=""};return(e,x)=>{const q=c("v-btn"),V=c("v-icon"),P=c("v-card"),w=c("v-menu");return t(),p("div",M,[n(w,{"offset-y":"",location:s.dropType},{activator:k(({props:h})=>[a("div",S({class:"custom-mtSelect-div",style:{display:"flex",width:"100%","background-color":"white",border:"1px solid #CCCAD0"}},h),[n(q,{size:"x-small",class:"custom-mtSelect-btn",disabled:s.disabled,variant:"text"},{default:k(()=>[a("span",Q,m(i.value||"선택"),1)]),_:1},8,["disabled"]),n(q,{size:"x-small",class:"custom-mtSelect-toggleBtn",disabled:s.disabled,color:"#CCCAD0",variant:"text"},{default:k(()=>[n(V,{icon:"ri-arrow-down-s-line",color:"black"})]),_:1},8,["disabled"])],16)]),default:k(()=>[n(P,{elevation:"1",border:""},{default:k(()=>[a("div",N,[a("table",j,[a("colgroup",null,[(t(!0),p(C,null,b(s.columns,(h,_)=>(t(),p("col",{style:v({width:h.width})},null,4))),256))]),a("thead",null,[a("tr",null,[(t(!0),p(C,null,b(s.columns,(h,_)=>(t(),p("th",{class:"sticky-top",style:v([{background:"#E5F0FE"},h.style])},m(h.caption),5))),256))])]),a("tbody",null,[a("tr",null,[a("td",{colspan:s.columns.length,onClick:o,class:D(["custom-row",{"active-row":r("")}]),style:{textAlign:"center"}},"선택 ",10,R)]),(t(!0),p(C,null,b(d.value,(h,_)=>(t(),p("tr",{onClick:B=>y(h),class:D(["custom-row",{"active-row":r(h[s.optionValue])}])},[(t(!0),p(C,null,b(s.columns,B=>(t(),p("td",{style:v(B.style)},m(h[B.ref]),5))),256))],10,z))),256))])])])]),_:1})]),_:1},8,["location"])])}}},W=G(U,[["__scopeId","data-v-be01a021"]]),J=JSON.parse('{"title":"선택 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/select.md","filePath":"components/common/select.md"}'),$={name:"components/common/select.md"},K=Object.assign($,{setup(E){const g=O({bizCompId:"l_SYS005",optionValue:"code",optionLabel:"name",defaultOption:!0,disabled:!1,dropType:"bottom",label:"메뉴 카테고리",columns:[{caption:"code",ref:"code",width:"100px",style:"text-align:left"},{caption:"name",ref:"name",width:"100px",style:"text-align:left"}],data:[{code:"D001",name:"개발팀"},{code:"D002",name:"기획팀"},{code:"D003",name:"디자인팀"}]}),s=A(""),d=A(""),F=A([{code:"D001",name:"개발팀"},{code:"D002",name:"기획팀"},{code:"D003",name:"디자인팀"}]);return(l,i)=>{const r=c("v-col"),y=c("v-row");return t(),p("div",null,[i[2]||(i[2]=f("",13)),a("p",null," selectedValue : "+m(s.value),1),n(y,null,{default:k(()=>[n(r,{cols:"6"},{default:k(()=>[n(I,{modelValue:s.value,"onUpdate:modelValue":i[0]||(i[0]=o=>s.value=o),data:F.value,"option-label":"name","option-value":"code","default-option":"",label:"부서 선택"},null,8,["modelValue","data"])]),_:1})]),_:1}),i[3]||(i[3]=f("",14)),n(y,null,{default:k(()=>[n(r,{cols:"6"},{default:k(()=>[n(W,S({modelValue:d.value,"onUpdate:modelValue":i[1]||(i[1]=o=>d.value=o)},g),null,16,["modelValue"])]),_:1})]),_:1}),a("p",null,"선택된 값: "+m(d.value),1),i[4]||(i[4]=f("",23))])}}});export{J as __pageData,K as default}; diff --git a/assets/components_common_select.md.QTs8rMvG.js b/assets/components_common_select.md.QTs8rMvG.js deleted file mode 100644 index 499a795..0000000 --- a/assets/components_common_select.md.QTs8rMvG.js +++ /dev/null @@ -1,143 +0,0 @@ -import{h as r,C as e,b as F,o as c,aH as u,w as k,n as m,p as o,c as C,aG as g,j as B,G as p,t as b}from"./chunks/framework.CrOSaJJH.js";const A={__name:"SelectBoxSQL",props:{modelValue:String,optionLabel:String,optionValue:String,defaultOption:Boolean,readOnly:Boolean,label:String,hidden:Boolean,data:{type:Array,default:[]}},emits:["update:modelValue"],setup(E,{emit:n}){const s=E,h=r(()=>s.defaultOption?[{[s.optionLabel]:"선택",[s.optionValue]:""},...s.data]:s.data),i=n,t=r({get:()=>h.value.find(a=>a[s.optionValue]===s.modelValue),set:a=>i("update:modelValue",a?a[s.optionValue]:"")});return(a,l)=>{const y=e("v-combobox");return c(),F(y,{modelValue:t.value,"onUpdate:modelValue":l[0]||(l[0]=d=>t.value=d),items:h.value,"item-title":s.optionLabel,"item-value":s.optionValue,readonly:s.readOnly,class:m(["custom-combobox text-body-2",s.readOnly?"custom-combobox-readonly":""]),variant:s.readOnly?"plain":"outlined","hide-details":"","menu-props":{contentClass:"custom-combobox-menu text-body-2"}},u({_:2},[s.hidden?{name:"selection",fn:k(({item:d})=>[]),key:"0"}:void 0]),1032,["modelValue","items","item-title","item-value","readonly","class","variant"])}}},q=JSON.parse('{"title":"선택 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/select.md","filePath":"components/common/select.md"}'),D={name:"components/common/select.md"},f=Object.assign(D,{setup(E){const n=o(""),s=o([{code:"D001",name:"개발팀"},{code:"D002",name:"기획팀"},{code:"D003",name:"디자인팀"}]);return(h,i)=>{const t=e("v-col"),a=e("v-row");return c(),C("div",null,[i[1]||(i[1]=g(`

선택 컴포넌트

개요

프로젝트에서 사용하는 선택(Select) 관련 컴포넌트들입니다. 다양한 형태의 선택 컴포넌트를 제공합니다.

SelectBoxSQL

개요

SQL 쿼리 결과를 기반으로 하는 단일 선택 컴포넌트입니다. Vuetify의 v-combobox를 기반으로 구현되었습니다.

파일 위치

src/views/ui/components/common/select/SelectBoxSQL.vue

Props

속성타입기본값설명
modelValueString-선택된 값 (v-model)
optionLabelString-표시할 라벨 필드명
optionValueString-값으로 사용할 필드명
defaultOptionBooleanfalse'선택' 옵션 추가 여부
readOnlyBooleanfalse읽기 전용 모드
labelString-라벨 텍스트
hiddenBooleanfalse선택된 값 숨김 여부
dataArray[]선택 옵션 데이터

사용 예제

vue

-<script setup>
-    import {ref} from 'vue'
-
-    const selectedValue = ref('')
-    const options = ref([
-        {code: 'D001', name: '개발팀'},
-        {code: 'D002', name: '기획팀'},
-        {code: 'D003', name: '디자인팀'},
-    ])
-</script>
-
-<template>
-    <p> selectedValue : {{ selectedValue }}</p>
-    <v-row>
-        <v-col cols="6">
-            <SelectBoxSQL
-                v-model="selectedValue"
-                :data="options"
-                option-label="name"
-                option-value="code"
-                default-option
-                label="부서 선택"
-            />
-        </v-col>
-    </v-row>
-</template>

실제 컴포넌트

`,13)),B("p",null," selectedValue : "+b(n.value),1),p(a,null,{default:k(()=>[p(t,{cols:"6"},{default:k(()=>[p(A,{modelValue:n.value,"onUpdate:modelValue":i[0]||(i[0]=l=>n.value=l),data:s.value,"option-label":"name","option-value":"code","default-option":"",label:"부서 선택"},null,8,["modelValue","data"])]),_:1})]),_:1}),i[2]||(i[2]=g(`

API 연동 예제

vue
<script setup>
-import { ref, onMounted } from 'vue'
-import axiosInstance from '@/CustomAxios.js'
-
-const selectedValue = ref('')
-const options = ref([])
-
-const loadOptions = async () => {
-  try {
-    const response = await axiosInstance.post('/api/codes/departments')
-    if (response.status === 'S') {
-      options.value = response.data
-    }
-  } catch (error) {
-    console.error('옵션 로드 실패:', error)
-  }
-}
-
-onMounted(() => {
-  loadOptions()
-})
-</script>

MultiSelectBoxSQL

개요

다중 컬럼을 표시하는 선택 컴포넌트입니다. 테이블 형태로 옵션을 표시하며, 여러 컬럼 정보를 한 번에 볼 수 있습니다.

파일 위치

src/views/ui/components/common/select/MultiSelectBoxSQL.vue

Props

속성타입기본값설명
modelValueString-선택된 값 (v-model)
optionLabelString-표시할 라벨 필드명
optionValueString-값으로 사용할 필드명
defaultOptionBooleanfalse'선택' 옵션 추가 여부
disabledBooleanfalse비활성화 여부
dropTypeString'bottom'드롭다운 위치 (bottom, top, center, start, end)
hiddenBooleanfalse선택된 값 숨김 여부
callbackFunction-선택 시 호출할 콜백 함수
columnsArray[]컬럼 정의 배열
dataArray[]선택 옵션 데이터

Columns 정의

javascript
const columns = [
-  { 
-    caption: '코드',      // 컬럼 헤더 텍스트
-    ref: 'code',          // 데이터 필드명
-    width: '150px',       // 컬럼 너비
-    style: 'text-align:left'  // 스타일
-  },
-  { 
-    caption: '명칭', 
-    ref: 'name', 
-    width: '200px',
-    style: 'text-align:left'
-  },
-]

사용 예제

vue
<template>
-  <MultiSelectBoxSQL
-    v-model="selectedValue"
-    :data="options"
-    option-label="name"
-    option-value="code"
-    :columns="columns"
-    default-option
-    @update:modelValue="handleChange"
-  />
-</template>
-
-<script setup>
-import { ref } from 'vue'
-
-const selectedValue = ref('')
-const options = ref([
-  { code: 'C001', name: '코드1', description: '설명1' },
-  { code: 'C002', name: '코드2', description: '설명2' },
-])
-
-const columns = [
-  { caption: '코드', ref: 'code', width: '150px', style: 'text-align:left' },
-  { caption: '명칭', ref: 'name', width: '200px', style: 'text-align:left' },
-  { caption: '설명', ref: 'description', width: '300px', style: 'text-align:left' },
-]
-
-const handleChange = (value) => {
-  console.log('선택된 값:', value)
-}
-</script>

콜백 함수 사용

vue
<template>
-  <MultiSelectBoxSQL
-    v-model="selectedValue"
-    :data="options"
-    option-label="name"
-    option-value="code"
-    :columns="columns"
-    :callback="handleSelect"
-  />
-</template>
-
-<script setup>
-const handleSelect = (value) => {
-  console.log('선택됨:', value)
-  // 추가 로직 처리
-  if (value) {
-    loadRelatedData(value)
-  }
-}
-</script>

SelectBoxDate

개요

날짜 선택 컴포넌트입니다. 날짜 범위 선택을 지원합니다.

파일 위치

src/views/ui/components/common/select/SelectBoxDate.vue

사용 예제

vue
<template>
-  <SelectBoxDate
-    v-model="selectedDate"
-    label="날짜 선택"
-  />
-</template>
-
-<script setup>
-import { ref } from 'vue'
-
-const selectedDate = ref('')
-</script>

AG Grid에서 사용하기

AG Grid의 셀 에디터로 사용할 수 있습니다.

GridMultiSelectWrapper

AG Grid에서 MultiSelectBoxSQL을 사용하기 위한 래퍼 컴포넌트입니다.

파일 위치: src/views/ui/components/grid/GridMultiSelectWrapper.vue

사용 예제

vue
<script setup>
-const columnDefs = ref([
-  {
-    field: 'department',
-    headerName: '부서',
-    editable: true,
-    cellEditor: 'GridMultiSelectWrapper',
-    cellEditorParams: {
-      options: departmentOptions,
-      columns: [
-        { caption: '코드', ref: 'code', width: '100px' },
-        { caption: '명칭', ref: 'name', width: '200px' },
-      ],
-      optionValue: 'code',
-      optionLabel: 'name',
-    },
-  },
-])
-</script>

스타일 커스터마이징

컴포넌트는 커스텀 CSS 클래스를 사용하므로 필요에 따라 스타일을 수정할 수 있습니다.

vue
<style scoped>
-.custom-combobox {
-  /* 커스텀 스타일 */
-}
-</style>

주의사항

  1. 데이터 형식: data 배열의 각 객체는 optionLabeloptionValue에 해당하는 필드를 포함해야 합니다.

  2. 반응성: data 배열이 변경되면 자동으로 옵션이 업데이트됩니다.

  3. 성능: 대량의 데이터를 사용하는 경우 가상 스크롤링을 고려하세요.

관련 문서

`,36))])}}});export{q as __pageData,f as default}; diff --git a/assets/components_common_select.md.QTs8rMvG.lean.js b/assets/components_common_select.md.QTs8rMvG.lean.js deleted file mode 100644 index c1655be..0000000 --- a/assets/components_common_select.md.QTs8rMvG.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{h as r,C as e,b as F,o as c,aH as u,w as k,n as m,p as o,c as C,aG as g,j as B,G as p,t as b}from"./chunks/framework.CrOSaJJH.js";const A={__name:"SelectBoxSQL",props:{modelValue:String,optionLabel:String,optionValue:String,defaultOption:Boolean,readOnly:Boolean,label:String,hidden:Boolean,data:{type:Array,default:[]}},emits:["update:modelValue"],setup(E,{emit:n}){const s=E,h=r(()=>s.defaultOption?[{[s.optionLabel]:"선택",[s.optionValue]:""},...s.data]:s.data),i=n,t=r({get:()=>h.value.find(a=>a[s.optionValue]===s.modelValue),set:a=>i("update:modelValue",a?a[s.optionValue]:"")});return(a,l)=>{const y=e("v-combobox");return c(),F(y,{modelValue:t.value,"onUpdate:modelValue":l[0]||(l[0]=d=>t.value=d),items:h.value,"item-title":s.optionLabel,"item-value":s.optionValue,readonly:s.readOnly,class:m(["custom-combobox text-body-2",s.readOnly?"custom-combobox-readonly":""]),variant:s.readOnly?"plain":"outlined","hide-details":"","menu-props":{contentClass:"custom-combobox-menu text-body-2"}},u({_:2},[s.hidden?{name:"selection",fn:k(({item:d})=>[]),key:"0"}:void 0]),1032,["modelValue","items","item-title","item-value","readonly","class","variant"])}}},q=JSON.parse('{"title":"선택 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/select.md","filePath":"components/common/select.md"}'),D={name:"components/common/select.md"},f=Object.assign(D,{setup(E){const n=o(""),s=o([{code:"D001",name:"개발팀"},{code:"D002",name:"기획팀"},{code:"D003",name:"디자인팀"}]);return(h,i)=>{const t=e("v-col"),a=e("v-row");return c(),C("div",null,[i[1]||(i[1]=g("",13)),B("p",null," selectedValue : "+b(n.value),1),p(a,null,{default:k(()=>[p(t,{cols:"6"},{default:k(()=>[p(A,{modelValue:n.value,"onUpdate:modelValue":i[0]||(i[0]=l=>n.value=l),data:s.value,"option-label":"name","option-value":"code","default-option":"",label:"부서 선택"},null,8,["modelValue","data"])]),_:1})]),_:1}),i[2]||(i[2]=g("",36))])}}});export{q as __pageData,f as default}; diff --git a/assets/components_common_tree.md.8NrcZDvr.js b/assets/components_common_tree.md.8NrcZDvr.js new file mode 100644 index 0000000..7d16e14 --- /dev/null +++ b/assets/components_common_tree.md.8NrcZDvr.js @@ -0,0 +1 @@ +import{_ as o,c as r,o as a,aG as t}from"./chunks/framework.DytOxJW6.js";const l=JSON.parse('{"title":"트리 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/tree.md","filePath":"components/common/tree.md"}'),n={name:"components/common/tree.md"};function d(p,e,c,i,s,m){return a(),r("div",null,e[0]||(e[0]=[t('

트리 컴포넌트

TreeDeptDropdown

부서 트리 드롭다운 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeDeptDropdown.vue

TreeEmpDropdown

직원 트리 드롭다운 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeEmpDropdown.vue

TreeOrgNode

조직 트리 노드 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeOrgNode.vue

',13)]))}const u=o(n,[["render",d]]);export{l as __pageData,u as default}; diff --git a/assets/components_common_tree.md.8NrcZDvr.lean.js b/assets/components_common_tree.md.8NrcZDvr.lean.js new file mode 100644 index 0000000..e91c6bf --- /dev/null +++ b/assets/components_common_tree.md.8NrcZDvr.lean.js @@ -0,0 +1 @@ +import{_ as o,c as r,o as a,aG as t}from"./chunks/framework.DytOxJW6.js";const l=JSON.parse('{"title":"트리 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/tree.md","filePath":"components/common/tree.md"}'),n={name:"components/common/tree.md"};function d(p,e,c,i,s,m){return a(),r("div",null,e[0]||(e[0]=[t("",13)]))}const u=o(n,[["render",d]]);export{l as __pageData,u as default}; diff --git a/assets/components_common_tree.md.BexI7Dii.js b/assets/components_common_tree.md.BexI7Dii.js deleted file mode 100644 index 5f2d17f..0000000 --- a/assets/components_common_tree.md.BexI7Dii.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o,c as r,o as a,aG as t}from"./chunks/framework.CrOSaJJH.js";const l=JSON.parse('{"title":"트리 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/tree.md","filePath":"components/common/tree.md"}'),n={name:"components/common/tree.md"};function d(p,e,c,i,s,m){return a(),r("div",null,e[0]||(e[0]=[t('

트리 컴포넌트

TreeDeptDropdown

부서 트리 드롭다운 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeDeptDropdown.vue

TreeEmpDropdown

직원 트리 드롭다운 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeEmpDropdown.vue

TreeOrgNode

조직 트리 노드 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeOrgNode.vue

',13)]))}const u=o(n,[["render",d]]);export{l as __pageData,u as default}; diff --git a/assets/components_common_tree.md.BexI7Dii.lean.js b/assets/components_common_tree.md.BexI7Dii.lean.js deleted file mode 100644 index e23609c..0000000 --- a/assets/components_common_tree.md.BexI7Dii.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o,c as r,o as a,aG as t}from"./chunks/framework.CrOSaJJH.js";const l=JSON.parse('{"title":"트리 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"components/common/tree.md","filePath":"components/common/tree.md"}'),n={name:"components/common/tree.md"};function d(p,e,c,i,s,m){return a(),r("div",null,e[0]||(e[0]=[t("",13)]))}const u=o(n,[["render",d]]);export{l as __pageData,u as default}; diff --git a/assets/components_grid_ag-grid.md.B5SS5q6u.js b/assets/components_grid_ag-grid.md.B5SS5q6u.js new file mode 100644 index 0000000..6d62328 --- /dev/null +++ b/assets/components_grid_ag-grid.md.B5SS5q6u.js @@ -0,0 +1,48 @@ +import{d as oi,aI as ns,aJ as sr,p as J,a5 as ir,q as rs,aK as nr,c as si,v as rr,a9 as at,an as lr,x as ar,o as ii,ac as ls,G as ni,as,ag as dr,aL as cr,aM as hr,aN as ur,aG as ds,j as cs,k as gr}from"./chunks/framework.DytOxJW6.js";var st=class{constructor(){this.allSyncListeners=new Map,this.allAsyncListeners=new Map,this.globalSyncListeners=new Set,this.globalAsyncListeners=new Set,this.asyncFunctionsQueue=[],this.scheduled=!1,this.firedEvents={}}setFrameworkOverrides(e){this.frameworkOverrides=e}getListeners(e,t,o){const s=t?this.allAsyncListeners:this.allSyncListeners;let i=s.get(e);return!i&&o&&(i=new Set,s.set(e,i)),i}noRegisteredListenersExist(){return this.allSyncListeners.size===0&&this.allAsyncListeners.size===0&&this.globalSyncListeners.size===0&&this.globalAsyncListeners.size===0}addEventListener(e,t,o=!1){this.getListeners(e,o,!0).add(t)}removeEventListener(e,t,o=!1){const s=this.getListeners(e,o,!1);s&&(s.delete(t),s.size===0&&(o?this.allAsyncListeners:this.allSyncListeners).delete(e))}addGlobalListener(e,t=!1){this.getGlobalListeners(t).add(e)}removeGlobalListener(e,t=!1){this.getGlobalListeners(t).delete(e)}dispatchEvent(e){const t=e;this.dispatchToListeners(t,!0),this.dispatchToListeners(t,!1),this.firedEvents[t.type]=!0}dispatchEventOnce(e){this.firedEvents[e.type]||this.dispatchEvent(e)}dispatchToListeners(e,t){const o=e.type;if(t&&"event"in e){const l=e.event;l instanceof Event&&(e.eventPath=l.composedPath())}const{frameworkOverrides:s}=this,i=l=>{const a=s?()=>s.wrapIncoming(l):l;t?this.dispatchAsync(a):a()},n=this.getListeners(o,t,!1);if(((n==null?void 0:n.size)??0)>0){const l=new Set(n);for(const a of l)n!=null&&n.has(a)&&i(()=>a(e))}const r=this.getGlobalListeners(t);if(r.size>0){const l=new Set(r);for(const a of l)i(()=>a(o,e))}}getGlobalListeners(e){return e?this.globalAsyncListeners:this.globalSyncListeners}dispatchAsync(e){if(this.asyncFunctionsQueue.push(e),!this.scheduled){const t=()=>{window.setTimeout(this.flushAsyncQueue.bind(this),0)};this.frameworkOverrides?this.frameworkOverrides.wrapIncoming(t):t(),this.scheduled=!0}}flushAsyncQueue(){this.scheduled=!1;const e=this.asyncFunctionsQueue.slice();this.asyncFunctionsQueue=[],e.forEach(t=>t())}};function pr(e,t){return t}function ri(e){return(e==null?void 0:e.getLocaleTextFunc())??pr}function Ve(e,t,o){o==null||typeof o=="string"&&o==""?li(e,t):ue(e,t,o)}function ue(e,t,o){e.setAttribute(ai(t),o.toString())}function li(e,t){e.removeAttribute(ai(t))}function ai(e){return`aria-${e}`}function Ft(e,t){t?e.setAttribute("role",t):e.removeAttribute("role")}function fr(e){let t;return e==="asc"?t="ascending":e==="desc"?t="descending":e==="mixed"?t="other":t="none",t}function Cr(e){return e.getAttribute("aria-label")}function di(e,t){Ve(e,"label",t)}function hs(e,t){Ve(e,"labelledby",t)}function ci(e,t){Ve(e,"live",t)}function mr(e,t){Ve(e,"atomic",t)}function vr(e,t){Ve(e,"relevant",t)}function hi(e,t){Ve(e,"hidden",t)}function wr(e,t){ue(e,"expanded",t)}function yr(e,t){ue(e,"multiselectable",t)}function br(e,t){ue(e,"rowcount",t)}function ui(e,t){ue(e,"rowindex",t)}function Sr(e,t){ue(e,"colcount",t)}function gi(e,t){ue(e,"colindex",t)}function Rr(e,t){ue(e,"colspan",t)}function Fr(e,t){ue(e,"sort",t)}function xr(e){li(e,"sort")}function Dr(e,t){return t===void 0?e("ariaIndeterminate","indeterminate"):t===!0?e("ariaChecked","checked"):e("ariaUnchecked","unchecked")}var Xt,Jt,eo,to,So,Ro,oo;function Ho(){return Xt===void 0&&(Xt=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)),Xt}function pi(){return Jt===void 0&&(Jt=/(firefox)/i.test(navigator.userAgent)),Jt}function fi(){return eo===void 0&&(eo=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)),eo}function Ze(){return to===void 0&&(to=/iPad|iPhone|iPod/.test(navigator.platform)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1),to}function us(e){if(!e)return null;const t=e.tabIndex,o=e.getAttribute("tabIndex");return t===-1&&(o===null||o===""&&!pi())?null:t.toString()}function Pr(){if(oo!==void 0)return oo;if(!document.body)return-1;let e=1e6;const t=pi()?6e6:1e9,o=document.createElement("div");for(document.body.appendChild(o);;){const s=e*2;if(o.style.height=s+"px",s>t||o.clientHeight!==s)break;e=s}return document.body.removeChild(o),oo=e,e}function Er(){return Ro==null&&Ci(),Ro}function Ci(){const e=document.body,t=document.createElement("div");t.style.width=t.style.height="100px",t.style.opacity="0",t.style.overflow="scroll",t.style.msOverflowStyle="scrollbar",t.style.position="absolute",e.appendChild(t);let o=t.offsetWidth-t.clientWidth;o===0&&t.clientWidth===0&&(o=null),t.parentNode&&t.parentNode.removeChild(t),o!=null&&(Ro=o,So=o===0)}function mi(){return So==null&&Ci(),So}var Tr="[tabindex], input, select, button, textarea, [href]",vi="[disabled], .ag-disabled:not(.ag-button), .ag-disabled *";function Go(e){const t=Element.prototype.matches||Element.prototype.msMatchesSelector,s=t.call(e,"input, select, button, textarea"),i=t.call(e,vi),n=De(e);return s&&!i&&n}function W(e,t,o={}){const{skipAriaHidden:s}=o;e.classList.toggle("ag-hidden",!t),s||hi(e,!t)}function kr(e,t,o={}){const{skipAriaHidden:s}=o;e.classList.toggle("ag-invisible",!t),s||hi(e,!t)}function wi(e,t){const o="disabled",s=t?n=>n.setAttribute(o,""):n=>n.removeAttribute(o);s(e);const i=e.querySelectorAll("input")??[];for(const n of i)s(n)}function Ie(e,t,o){let s=0;for(;e;){if(e.classList.contains(t))return!0;if(e=e.parentElement,typeof o=="number"){if(++s>o)break}else if(e===o)break}return!1}function Nt(e){const{height:t,width:o,borderTopWidth:s,borderRightWidth:i,borderBottomWidth:n,borderLeftWidth:r,paddingTop:l,paddingRight:a,paddingBottom:d,paddingLeft:c,marginTop:h,marginRight:u,marginBottom:g,marginLeft:p,boxSizing:f}=window.getComputedStyle(e);return{height:parseFloat(t||"0"),width:parseFloat(o||"0"),borderTopWidth:parseFloat(s||"0"),borderRightWidth:parseFloat(i||"0"),borderBottomWidth:parseFloat(n||"0"),borderLeftWidth:parseFloat(r||"0"),paddingTop:parseFloat(l||"0"),paddingRight:parseFloat(a||"0"),paddingBottom:parseFloat(d||"0"),paddingLeft:parseFloat(c||"0"),marginTop:parseFloat(h||"0"),marginRight:parseFloat(u||"0"),marginBottom:parseFloat(g||"0"),marginLeft:parseFloat(p||"0"),boxSizing:f}}function yi(e){const t=Nt(e);return t.boxSizing==="border-box"?t.height-t.paddingTop-t.paddingBottom:t.height}function xt(e){const t=Nt(e);return t.boxSizing==="border-box"?t.width-t.paddingLeft-t.paddingRight:t.width}function Ir(e){const t=e.getBoundingClientRect(),{borderTopWidth:o,borderLeftWidth:s,borderRightWidth:i,borderBottomWidth:n}=Nt(e);return{top:t.top+(o||0),left:t.left+(s||0),right:t.right+(i||0),bottom:t.bottom+(n||0)}}function Dt(e,t){let o=e.scrollLeft;return t&&(o=Math.abs(o)),o}function Pt(e,t,o){o&&(t*=-1),e.scrollLeft=t}function de(e){for(;e&&e.firstChild;)e.removeChild(e.firstChild)}function Ce(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function bi(e){return!!e.offsetParent}function De(e){const t=e;return t.checkVisibility?t.checkVisibility({checkVisibilityCSS:!0}):!(!bi(e)||window.getComputedStyle(e).visibility!=="visible")}function Bo(e){const t=document.createElement("div");return t.innerHTML=(e||"").trim(),t.firstChild}function Si(e,t,o){o&&o.nextSibling===t||(e.firstChild?o?o.nextSibling?e.insertBefore(t,o.nextSibling):e.appendChild(t):e.firstChild&&e.firstChild!==t&&e.insertAdjacentElement("afterbegin",t):e.appendChild(t))}function Ri(e,t){for(let o=0;o`-${t.toLocaleLowerCase()}`)}function it(e,t){if(t)for(const o of Object.keys(t)){const s=t[o];if(!o||!o.length||s==null)continue;const i=Lr(o),n=s.toString(),r=n.replace(/\s*!important/g,""),l=r.length!=n.length?"important":void 0;e.style.setProperty(i,r,l)}}function Mr(e){return e.clientWidthn==null?void 0:n.disconnect()}function be(e,t){const o=Wi(e);o.requestAnimationFrame?o.requestAnimationFrame(t):o.webkitRequestAnimationFrame?o.webkitRequestAnimationFrame(t):o.setTimeout(t,0)}var Di="data-ref",io;function gs(){return io??(io=document.createTextNode(" ")),io.cloneNode()}function q(e){const{attrs:t,children:o,cls:s,ref:i,role:n,tag:r}=e,l=document.createElement(r);if(s&&(l.className=s),i&&l.setAttribute(Di,i),n&&l.setAttribute("role",n),t)for(const a of Object.keys(t))l.setAttribute(a,t[a]);if(o)if(typeof o=="string")l.textContent=o;else{let a=!0;for(const d of o)d&&(typeof d=="string"?(l.appendChild(document.createTextNode(d)),a=!1):(a&&(l.appendChild(gs()),a=!1),l.append(q(d)),l.appendChild(gs())))}return l}var ps={};function Pi(e,t){ps[t]||(e(),ps[t]=!0)}function Xe(e,t,...o){e.get("debug")&&console.log("AG Grid: "+t,...o)}function Hr(e,...t){Pi(()=>console.warn("AG Grid: "+e,...t),e+(t==null?void 0:t.join("")))}function Ye(e,...t){Pi(()=>console.error("AG Grid: "+e,...t),e+(t==null?void 0:t.join("")))}var Gr={pending:!1,funcs:[]},Br={pending:!1,funcs:[]};function Fo(e,t="setTimeout",o){const s=t==="raf"?Br:Gr;if(s.funcs.push(e),s.pending)return;s.pending=!0;const i=()=>{const n=s.funcs.slice();s.funcs.length=0,s.pending=!1,n.forEach(r=>r())};t==="raf"?be(o,i):window.setTimeout(i,0)}function je(e,t,o){let s;return function(...i){const n=this;window.clearTimeout(s),s=window.setTimeout(function(){e.isAlive()&&t.apply(n,i)},o)}}function fs(e,t){let o=0;return function(...s){const i=this,n=Date.now();n-o{const a=Date.now()-i>o;(e()||a)&&(t(),r=!0,n!=null&&(window.clearInterval(n),n=null))};l(),r||(n=window.setInterval(l,10))}function Re(e){return e==null||e===""?null:e}function k(e){return e!=null&&e!==""}function V(e){return!k(e)}function xo(e){return e!=null&&typeof e.toString=="function"?e.toString():null}function Wr(e,t,o=!1){const s=e==null,i=t==null;if(e&&e.toNumber&&(e=e.toNumber()),t&&t.toNumber&&(t=t.toNumber()),s&&i)return 0;if(s)return-1;if(i)return 1;function n(r,l){return r>l?1:rr[1].length-n[1].length);let i=Do(e,t);for(const[n,r]of s){if(n===Ti)continue;const l=i.length-o;if(l<=0)break;const a="...",d=l+a.length,c=r.length-d>ms?r.slice(0,r.length-d)+a:r.slice(0,ms)+a;t.set(n,c),i=Do(e,t)}return i}function Ur(e,t){const o=new URLSearchParams;if(o.append(Ti,G),t)for(const n of Object.keys(t))o.append(n,zr(t[n]));const s=`${ki}/errors/${e}`,i=Do(s,o);return i.length<=Cs?i:_r(s,o,Cs)}var Kr=(e,t,o)=>{const s=Ur(e,t);return`${o?o+` +`:""}Visit ${s}${o?"":` + Alternatively register the ValidationModule to see the full message in the console.`}`};function I(...e){Wo(Hr,e[0],e[1])}function K(...e){Wo(Ye,e[0],e[1])}function $e(e,t,o){Wo(Ye,e,t,o)}function jr(e,t){const o=t[0];return`error #${o} `+Ii(o,t[1],e).join(" ")}function Li(...e){return jr(void 0,e)}function Mi(e,t){return e.get("rowModelType")===t}function Vo(e,t){return Mi(e,"clientSide")}function Ai(e,t){return Mi(e,"serverSide")}function $(e,t){return e.get("domLayout")===t}function Hi(e){return zi(e)!==void 0}function Gi(e){return typeof e.get("getRowHeight")=="function"}function $r(e,t){return t?!e.get("enableStrictPivotColumnOrder"):e.get("maintainColumnOrder")}function qr(e,t,o=!1,s){const{gos:i,environment:n}=e;if(s==null&&(s=n.getDefaultRowHeight()),Gi(i)){if(o)return{height:s,estimated:!0};const a={node:t,data:t.data},d=i.getCallback("getRowHeight")(a);if(Po(d))return d===0&&I(23),{height:Math.max(1,d),estimated:!1}}if(t.detail&&i.get("masterDetail"))return Zr(i);const r=i.get("rowHeight");return{height:r&&Po(r)?r:s,estimated:!1}}function Zr(e){if(e.get("detailRowAutoHeight"))return{height:1,estimated:!1};const t=e.get("detailRowHeight");return Po(t)?{height:t,estimated:!1}:{height:300,estimated:!1}}function Bi(e){const{environment:t,gos:o}=e,s=o.get("rowHeight");if(!s||V(s))return t.getDefaultRowHeight();const i=t.refreshRowHeightVariable();return i!==-1?i:(I(24),t.getDefaultRowHeight())}function Po(e){return!isNaN(e)&&typeof e=="number"&&isFinite(e)}function Oi(e,t,o){const s=t[e.getDomDataKey()];return s?s[o]:void 0}function Be(e,t,o,s){const i=e.getDomDataKey();let n=t[i];V(n)&&(n={},t[i]=n),n[o]=s}function oe(e){const{gos:t,eGridDiv:o}=e;let s=null;const i=t.get("getDocument");return i&&k(i)?s=i():o&&(s=o.ownerDocument),s&&k(s)?s:document}function Wi(e){return oe(e).defaultView||window}function Je(e){return e.eGridDiv.getRootNode()}function z(e){return Je(e).activeElement}function No(e){let t=null,o=null;try{t=oe(e).fullscreenElement}catch{}finally{t||(t=Je(e));const s=t.querySelector("body");s?o=s:t instanceof ShadowRoot?o=t:t instanceof Document?o=t==null?void 0:t.documentElement:o=t}return o}function Yr(e){const t=No(e);return(t==null?void 0:t.clientWidth)??(window.innerHeight||-1)}function Qr(e){const t=No(e);return(t==null?void 0:t.clientHeight)??(window.innerHeight||-1)}function Xr(e,t,o){const i=e.getBoundingClientRect().height,n=Yr(o)-2,r=Qr(o)-2;if(!e.offsetParent)return;const a=Ir(e.offsetParent),{clientY:d,clientX:c}=t;let h=d-a.top-i/2,u=c-a.left-10;const g=oe(o),p=g.defaultView||window,f=p.pageYOffset||g.documentElement.scrollTop,C=p.pageXOffset||g.documentElement.scrollLeft;n>0&&u+e.clientWidth>n+C&&(u=n+C-e.clientWidth),u<0&&(u=0),r>0&&h+e.clientHeight>r+f&&(h=r+f-e.clientHeight),h<0&&(h=0),e.style.left=`${u}px`,e.style.top=`${h}px`}function Jr(e){const t=z(e);return t===null||t===oe(e).body}function zo(e){return e.get("ensureDomOrder")?!1:e.get("animateRows")}function Vi(e){return!(e.get("paginateChildRows")||e.get("groupHideOpenParents")||$(e,"print"))}function ae(e){const t=e.get("autoGroupColumnDef");return!(t!=null&&t.comparator)&&!e.get("treeData")}function Ni(e,t){return t?!1:e.get("groupDisplayType")==="groupRows"}function el(e,t,o){return!!t.group&&!t.footer&&Ni(e,o)}function tl(e){return(e==null?void 0:e.checkboxes)??!0}function ol(e){if(typeof e=="object")return e.checkboxLocation??"selectionColumn"}function Oe(e){const t=e.get("cellSelection");return t!==void 0?!!t:e.get("enableRangeSelection")}function zi(e){const t="beanName"in e&&e.beanName==="gos"?e.get("rowSelection"):e.rowSelection;if(typeof t=="string")switch(t){case"multiple":return"multiRow";case"single":return"singleRow";default:return}switch(t==null?void 0:t.mode){case"multiRow":case"singleRow":return t.mode;default:return}}function sl(e){return zi(e)==="multiRow"}function il(e,t=!0){const o=e.get("rowSelection");return typeof o!="object"?t?"all":void 0:o.mode==="multiRow"?o.selectAll:"all"}function Et(e){return e.get("columnMenu")==="legacy"}function _i(e){return!e||e.length<2?e:"on"+e[0].toUpperCase()+e.substring(1)}function nl(e,t,o){typeof e!="object"&&(e={});const s={...e};return o.forEach(i=>{const n=t[i];typeof n<"u"&&(s[i]=n)}),s}function rl(e,t){if(!e)return;const o={};let s=!1;if(Object.keys(e).forEach(r=>{o[r]=e[r],s=!0}),!s)return;const i={type:"gridOptionsChanged",options:o};t.dispatchEvent(i);const n={type:"componentStateChanged",...o};t.dispatchEvent(n)}function A(e,t){return e.addGridCommonParams(t)}var Ui="__ag_Grid_Stop_Propagation",ll=["touchstart","touchend","touchmove","touchcancel","scroll"],al=["wheel"],no={};function Tt(e){e[Ui]=!0}function ve(e){return e[Ui]===!0}var Ki=(()=>{const e={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return o=>{if(typeof no[o]=="boolean")return no[o];const s=document.createElement(e[o]||"div");return o="on"+o,no[o]=o in s}})();function ji(e,t,o){let s=t;for(;s;){const i=Oi(e,s,o);if(i)return i;s=s.parentElement}return null}function dl(e,t,o,s){const i=$i(o);let n;i!=null&&(n={passive:i}),e&&e.addEventListener&&e.addEventListener(t,o,s,n)}var $i=e=>{const t=ll.includes(e),o=al.includes(e);if(t)return!0;if(o)return!1},v=class{constructor(){this.destroyFunctions=[],this.destroyed=!1,this.__v_skip=!0,this.propertyListenerId=0,this.lastChangeSetIdLookup={},this.isAlive=()=>!this.destroyed}preWireBeans(e){this.beans=e,this.stubContext=e.context,this.eventSvc=e.eventSvc,this.gos=e.gos}destroy(){const{destroyFunctions:e}=this;for(let t=0;tnull;let s;return cl(e)?(e.__addEventListener(t,o),s=()=>(e.__removeEventListener(t,o),null)):(e instanceof HTMLElement?dl(this.beans.frameworkOverrides,e,t,o):e.addEventListener(t,o),s=()=>(e.removeEventListener(t,o),null)),this.destroyFunctions.push(s),()=>(s(),this.destroyFunctions=this.destroyFunctions.filter(i=>i!==s),null)}setupGridOptionListener(e,t){const{gos:o}=this;o.addPropertyEventListener(e,t);const s=()=>(o.removePropertyEventListener(e,t),null);return this.destroyFunctions.push(s),()=>(s(),this.destroyFunctions=this.destroyFunctions.filter(i=>i!==s),null)}addManagedPropertyListener(e,t){return this.destroyed?()=>null:this.setupGridOptionListener(e,t)}addManagedPropertyListeners(e,t){if(this.destroyed)return;const o=e.join("-")+this.propertyListenerId++,s=i=>{if(i.changeSet){if(i.changeSet&&i.changeSet.id===this.lastChangeSetIdLookup[o])return;this.lastChangeSetIdLookup[o]=i.changeSet.id}const n={type:"gridPropertyChanged",changeSet:i.changeSet,source:i.source};t(n)};e.forEach(i=>this.setupGridOptionListener(i,s))}getLocaleTextFunc(){return ri(this.beans.localeSvc)}addDestroyFunc(e){this.isAlive()?this.destroyFunctions.push(e):e()}createOptionalManagedBean(e,t){return e?this.createManagedBean(e,t):void 0}createManagedBean(e,t){const o=this.createBean(e,t);return this.addDestroyFunc(this.destroyBean.bind(this,e,t)),o}createBean(e,t,o){return(t||this.stubContext).createBean(e,o)}destroyBean(e,t){return(t||this.stubContext).destroyBean(e)}destroyBeans(e,t){return(t||this.stubContext).destroyBeans(e)}};function cl(e){return e.__addEventListener!==void 0}var hl=new Set(["__proto__","constructor","prototype"]);function ul(e,t){if(e!=null){if(Array.isArray(e)){for(let o=0;o{if(hl.has(i))return;let r=e[i];r!==n&&(s&&r==null&&n!=null&&typeof n=="object"&&n.constructor===Object&&(r={},e[i]=r),vs(n)&&vs(r)&&!Array.isArray(r)?Y(r,n,o,s):(o||n!==void 0)&&(e[i]=n))})}function mt(e,t,o){if(!t||!e)return;if(!o)return e[t];const s=t.split(".");let i=e;for(let n=0;n"']/g,pl={"&":"&","<":"<",">":">",'"':""","'":"'"};function zt(e){return(e==null?void 0:e.toString().toString())??null}function vt(e){var t;return((t=zt(e))==null?void 0:t.replace(gl,o=>pl[o]))??null}var fl={resizable:!0,sortable:!0},Cl=0;function qi(){return Cl++}function we(e){return e instanceof _o}var _o=class extends v{constructor(e,t,o,s){super(),this.colDef=e,this.userProvidedColDef=t,this.colId=o,this.primary=s,this.isColumn=!0,this.instanceId=qi(),this.autoHeaderHeight=null,this.moving=!1,this.menuVisible=!1,this.lastLeftPinned=!1,this.firstRightPinned=!1,this.filterActive=!1,this.colEventSvc=new st,this.tooltipEnabled=!1,this.rowGroupActive=!1,this.pivotActive=!1,this.aggregationActive=!1,this.flex=null,this.colIdSanitised=vt(o)}destroy(){var e;super.destroy(),(e=this.beans.rowSpanSvc)==null||e.deregister(this)}getInstanceId(){return this.instanceId}setState(){const{colDef:e,beans:{sortSvc:t,pinnedCols:o,colFlex:s}}=this;t==null||t.initCol(this);const i=e.hide;i!==void 0?this.visible=!i:this.visible=!e.initialHide,o==null||o.initCol(this),s==null||s.initCol(this)}setColDef(e,t,o){var i;const s=e.spanRows!==this.colDef.spanRows;this.colDef=e,this.userProvidedColDef=t,this.initMinAndMaxWidths(),this.initDotNotation(),this.initTooltip(),s&&((i=this.beans.rowSpanSvc)==null||i.deregister(this),this.initRowSpan()),this.dispatchColEvent("colDefChanged",o)}getUserProvidedColDef(){return this.userProvidedColDef}getParent(){return this.parent}getOriginalParent(){return this.originalParent}postConstruct(){this.setState(),this.initMinAndMaxWidths(),this.resetActualWidth("gridInitializing"),this.initDotNotation(),this.initTooltip(),this.initRowSpan()}initDotNotation(){const{gos:e,colDef:{field:t,tooltipField:o}}=this,s=e.get("suppressFieldDotNotation");this.fieldContainsDots=k(t)&&t.indexOf(".")>=0&&!s,this.tooltipFieldContainsDots=k(o)&&o.indexOf(".")>=0&&!s}initMinAndMaxWidths(){const e=this.colDef;this.minWidth=e.minWidth??this.beans.environment.getDefaultColumnMinWidth(),this.maxWidth=e.maxWidth??Number.MAX_SAFE_INTEGER}initTooltip(){var e;(e=this.beans.tooltipSvc)==null||e.initCol(this)}initRowSpan(){var e;this.colDef.spanRows&&((e=this.beans.rowSpanSvc)==null||e.register(this))}resetActualWidth(e){const t=this.calculateColInitialWidth(this.colDef);this.setActualWidth(t,e,!0)}calculateColInitialWidth(e){let t;const o=e.width,s=e.initialWidth;return o!=null?t=o:s!=null?t=s:t=200,Math.max(Math.min(t,this.maxWidth),this.minWidth)}isEmptyGroup(){return!1}isRowGroupDisplayed(e){var t;return((t=this.beans.showRowGroupCols)==null?void 0:t.isRowGroupDisplayed(this,e))??!1}isPrimary(){return this.primary}isFilterAllowed(){return!!this.colDef.filter}isFieldContainsDots(){return this.fieldContainsDots}isTooltipEnabled(){return this.tooltipEnabled}isTooltipFieldContainsDots(){return this.tooltipFieldContainsDots}getHighlighted(){return this.highlighted}__addEventListener(e,t){this.colEventSvc.addEventListener(e,t)}__removeEventListener(e,t){this.colEventSvc.removeEventListener(e,t)}addEventListener(e,t){var s,i,n;this.frameworkEventListenerService=(i=(s=this.beans.frameworkOverrides).createLocalEventListenerWrapper)==null?void 0:i.call(s,this.frameworkEventListenerService,this.colEventSvc);const o=((n=this.frameworkEventListenerService)==null?void 0:n.wrap(e,t))??t;this.colEventSvc.addEventListener(e,o)}removeEventListener(e,t){var s;const o=((s=this.frameworkEventListenerService)==null?void 0:s.unwrap(e,t))??t;this.colEventSvc.removeEventListener(e,o)}createColumnFunctionCallbackParams(e){return A(this.gos,{node:e,data:e.data,column:this,colDef:this.colDef})}isSuppressNavigable(e){var t;return((t=this.beans.cellNavigation)==null?void 0:t.isSuppressNavigable(this,e))??!1}isCellEditable(e){var t;return((t=this.beans.editSvc)==null?void 0:t.isCellEditable(this,e))??!1}isSuppressFillHandle(){return!!this.colDef.suppressFillHandle}isAutoHeight(){return!!this.colDef.autoHeight}isAutoHeaderHeight(){return!!this.colDef.autoHeaderHeight}isRowDrag(e){return this.isColumnFunc(e,this.colDef.rowDrag)}isDndSource(e){return this.isColumnFunc(e,this.colDef.dndSource)}isCellCheckboxSelection(e){var t;return((t=this.beans.selectionSvc)==null?void 0:t.isCellCheckboxSelection(this,e))??!1}isSuppressPaste(e){var t;return this.isColumnFunc(e,((t=this.colDef)==null?void 0:t.suppressPaste)??null)}isResizable(){return!!this.getColDefValue("resizable")}getColDefValue(e){return this.colDef[e]??fl[e]}isColumnFunc(e,t){if(typeof t=="boolean")return t;if(typeof t=="function"){const o=this.createColumnFunctionCallbackParams(e);return t(o)}return!1}createColumnEvent(e,t){return A(this.gos,{type:e,column:this,columns:[this],source:t})}isMoving(){return this.moving}getSort(){return this.sort}isSortable(){return!!this.getColDefValue("sortable")}isSortAscending(){return this.sort==="asc"}isSortDescending(){return this.sort==="desc"}isSortNone(){return V(this.sort)}isSorting(){return k(this.sort)}getSortIndex(){return this.sortIndex}isMenuVisible(){return this.menuVisible}getAggFunc(){return this.aggFunc}getLeft(){return this.left}getOldLeft(){return this.oldLeft}getRight(){return this.left+this.actualWidth}setLeft(e,t){this.oldLeft=this.left,this.left!==e&&(this.left=e,this.dispatchColEvent("leftChanged",t))}isFilterActive(){return this.filterActive}isHovered(){var e;return I(261),!!((e=this.beans.colHover)!=null&&e.isHovered(this))}setFirstRightPinned(e,t){this.firstRightPinned!==e&&(this.firstRightPinned=e,this.dispatchColEvent("firstRightPinnedChanged",t))}setLastLeftPinned(e,t){this.lastLeftPinned!==e&&(this.lastLeftPinned=e,this.dispatchColEvent("lastLeftPinnedChanged",t))}isFirstRightPinned(){return this.firstRightPinned}isLastLeftPinned(){return this.lastLeftPinned}isPinned(){return this.pinned==="left"||this.pinned==="right"}isPinnedLeft(){return this.pinned==="left"}isPinnedRight(){return this.pinned==="right"}getPinned(){return this.pinned}setVisible(e,t){const o=e===!0;this.visible!==o&&(this.visible=o,this.dispatchColEvent("visibleChanged",t)),this.dispatchStateUpdatedEvent("hide")}isVisible(){return this.visible}isSpanHeaderHeight(){return!this.getColDef().suppressSpanHeaderHeight}getColumnGroupPaddingInfo(){let e=this.getParent();if(!e||!e.isPadding())return{numberOfParents:0,isSpanningTotal:!1};const t=e.getPaddingLevel()+1;let o=!0;for(;e;){if(!e.isPadding()){o=!1;break}e=e.getParent()}return{numberOfParents:t,isSpanningTotal:o}}getColDef(){return this.colDef}getDefinition(){return this.colDef}getColumnGroupShow(){return this.colDef.columnGroupShow}getColId(){return this.colId}getId(){return this.colId}getUniqueId(){return this.colId}getActualWidth(){return this.actualWidth}getAutoHeaderHeight(){return this.autoHeaderHeight}setAutoHeaderHeight(e){const t=e!==this.autoHeaderHeight;return this.autoHeaderHeight=e,t}createBaseColDefParams(e){return A(this.gos,{node:e,data:e.data,colDef:this.colDef,column:this})}getColSpan(e){if(V(this.colDef.colSpan))return 1;const t=this.createBaseColDefParams(e),o=this.colDef.colSpan(t);return Math.max(o,1)}getRowSpan(e){if(V(this.colDef.rowSpan))return 1;const t=this.createBaseColDefParams(e),o=this.colDef.rowSpan(t);return Math.max(o,1)}setActualWidth(e,t,o=!1){e=Math.max(e,this.minWidth),e=Math.min(e,this.maxWidth),this.actualWidth!==e&&(this.actualWidth=e,this.flex!=null&&t!=="flex"&&t!=="gridInitializing"&&(this.flex=null),o||this.fireColumnWidthChangedEvent(t)),this.dispatchStateUpdatedEvent("width")}fireColumnWidthChangedEvent(e){this.dispatchColEvent("widthChanged",e)}isGreaterThanMax(e){return e>this.maxWidth}getMinWidth(){return this.minWidth}getMaxWidth(){return this.maxWidth}getFlex(){return this.flex}isRowGroupActive(){return this.rowGroupActive}isPivotActive(){return this.pivotActive}isAnyFunctionActive(){return this.isPivotActive()||this.isRowGroupActive()||this.isValueActive()}isAnyFunctionAllowed(){return this.isAllowPivot()||this.isAllowRowGroup()||this.isAllowValue()}isValueActive(){return this.aggregationActive}isAllowPivot(){return this.colDef.enablePivot===!0}isAllowValue(){return this.colDef.enableValue===!0}isAllowRowGroup(){return this.colDef.enableRowGroup===!0}dispatchColEvent(e,t,o){const s=this.createColumnEvent(e,t);o&&Y(s,o),this.colEventSvc.dispatchEvent(s)}dispatchStateUpdatedEvent(e){this.colEventSvc.dispatchEvent({type:"columnStateUpdated",key:e})}};function U(e){return e instanceof wt}var wt=class extends v{constructor(e,t,o,s){super(),this.colGroupDef=e,this.groupId=t,this.padding=o,this.level=s,this.isColumn=!1,this.expandable=!1,this.instanceId=qi(),this.expandableListenerRemoveCallback=null,this.expanded=!!(e!=null&&e.openByDefault)}destroy(){this.expandableListenerRemoveCallback&&this.reset(null,void 0),super.destroy()}reset(e,t){this.colGroupDef=e,this.level=t,this.originalParent=null,this.expandableListenerRemoveCallback&&this.expandableListenerRemoveCallback(),this.children=void 0,this.expandable=void 0}getInstanceId(){return this.instanceId}getOriginalParent(){return this.originalParent}getLevel(){return this.level}isVisible(){return this.children?this.children.some(e=>e.isVisible()):!1}isPadding(){return this.padding}setExpanded(e){this.expanded=e===void 0?!1:e,this.dispatchLocalEvent({type:"expandedChanged"})}isExpandable(){return this.expandable}isExpanded(){return this.expanded}getGroupId(){return this.groupId}getId(){return this.getGroupId()}setChildren(e){this.children=e}getChildren(){return this.children}getColGroupDef(){return this.colGroupDef}getLeafColumns(){const e=[];return this.addLeafColumns(e),e}forEachLeafColumn(e){if(this.children)for(const t of this.children)we(t)?e(t):U(t)&&t.forEachLeafColumn(e)}addLeafColumns(e){this.children&&this.children.forEach(t=>{we(t)?e.push(t):U(t)&&t.addLeafColumns(e)})}getColumnGroupShow(){const e=this.colGroupDef;if(e)return e.columnGroupShow}setupExpandable(){this.setExpandable(),this.expandableListenerRemoveCallback&&this.expandableListenerRemoveCallback();const e=this.onColumnVisibilityChanged.bind(this);this.getLeafColumns().forEach(t=>t.__addEventListener("visibleChanged",e)),this.expandableListenerRemoveCallback=()=>{this.getLeafColumns().forEach(t=>t.__removeEventListener("visibleChanged",e)),this.expandableListenerRemoveCallback=null}}setExpandable(){if(this.isPadding())return;let e=!1,t=!1,o=!1;const s=this.findChildrenRemovingPadding();for(let n=0,r=s.length;n{o.forEach(s=>{U(s)&&s.isPadding()?t(s.children):e.push(s)})};return t(this.children),e}onColumnVisibilityChanged(){this.setExpandable()}},ml={numericColumn:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"},rightAligned:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"}};function ws(e,t,o){const s={},i=e.gos;return Object.assign(s,i.get("defaultColGroupDef")),Object.assign(s,t),i.validateColDef(s,o),s}var vl=class{constructor(){this.existingKeys={}}addExistingKeys(e){for(let t=0;t0&&I(273,{providedId:e,usedId:i}),this.existingKeys[i]=!0,i}o++}}};function H(e){if(e!=null&&e.length)return e[e.length-1]}function _t(e,t,o){return e==null&&t==null?!0:e!=null&&t!=null&&e.length===t.length&&e.every((s,i)=>t[i]===s)}function dt(e,t){if(e)for(const o of e)t(o)}function ye(e,t){const o=e.indexOf(t);o>=0&&e.splice(o,1)}function ys(e,t,o){for(let s=0;s=0;s--)e.splice(o,0,t[s])}var Ut="ag-Grid-AutoColumn",wl="ag-Grid-SelectionColumn",yl="ag-Grid-RowNumbersColumn";function bl(e){const t=[],o=s=>{for(let i=0;it+o.getActualWidth(),0)}function bs(e,t,o){const s={};if(!t)return;ce(null,t,n=>{s[n.getInstanceId()]=n}),o&&ce(null,o,n=>{s[n.getInstanceId()]=null});const i=Object.values(s).filter(n=>n!=null);e.context.destroyBeans(i)}function Sl(e){return e.getId().startsWith(Ut)}function Zi(e){const t=typeof e=="string"?e:"getColId"in e?e.getColId():e.colId;return(t==null?void 0:t.startsWith(wl))??!1}function Qe(e){const t=typeof e=="string"?e:"getColId"in e?e.getColId():e.colId;return(t==null?void 0:t.startsWith(yl))??!1}function kt(e){let t=[];return e instanceof Array?t=e:typeof e=="string"&&(t=e.split(",")),t}function yt(e){return e==="gridOptionsUpdated"?"gridOptionsChanged":e}function Rl(e,t){const o=e===t,s=e.getColDef()===t,i=e.getColId()==t;return o||s||i}var Fl=(e,t)=>(o,s)=>{const i={value1:void 0,value2:void 0};let n=!1;return e&&(e[o]!==void 0&&(i.value1=e[o],n=!0),k(s)&&e[s]!==void 0&&(i.value2=e[s],n=!0)),!n&&t&&(t[o]!==void 0&&(i.value1=t[o]),k(s)&&t[s]!==void 0&&(i.value2=t[s])),i};function xl(e,t=null,o,s,i){const n=new vl,{existingCols:r,existingGroups:l,existingColKeys:a}=Dl(s);n.addExistingKeys(a);const d=Yi(e,t,0,o,r,n,l,i),{colGroupSvc:c}=e,h=(c==null?void 0:c.findMaxDepth(d,0))??0,u=c?c.balanceColumnTree(d,0,h,n):d;return ce(null,u,(p,f)=>{U(p)&&p.setupExpandable(),p.originalParent=f}),{columnTree:u,treeDepth:h}}function Dl(e){const t=[],o=[],s=[];return e&&ce(null,e,i=>{if(U(i)){const n=i;o.push(n)}else{const n=i;s.push(n.getId()),t.push(n)}}),{existingCols:t,existingGroups:o,existingColKeys:s}}function Yi(e,t,o,s,i,n,r,l){if(!t)return[];const{colGroupSvc:a}=e,d=new Array(t.length);for(let c=0;c0))if(o.width!=null)t.setActualWidth(o.width,s);else{const n=t.getActualWidth();t.setActualWidth(n,s)}}function Tl(e,t){if(t)for(let o=0;o{const r=s[n.trim()];r?Y(o,r,!1,!0):I(36,{t:n})})}function Ll(e){return e.children!==void 0}function ce(e,t,o){if(t)for(let s=0;s{const l=r.getColDef().lockPosition;l==="right"?i.push(r):l==="left"||l===!0?o.push(r):s.push(r)}),t.get("enableRtl")?[...i,...s,...o]:[...o,...s,...i]}function Ji(e,t){let o=!0;return ce(null,t,s=>{if(!U(s))return;const i=s,n=i.getColGroupDef();if(!(n&&n.marryChildren))return;const l=[];i.getLeafColumns().forEach(u=>{const g=e.indexOf(u);l.push(g)});const a=Math.max.apply(Math,l),d=Math.min.apply(Math,l),c=a-d,h=i.getLeafColumns().length-1;c>h&&(o=!1)}),o}function en(e,t){if(!e||e.length==0)return;const o=t(e[0]);for(let s=1;sn.getPinned());e.dispatchEvent({type:"columnPinned",pinned:i??null,columns:t,column:s,source:o})}function Ml(e,t,o){if(!t.length)return;const s=t.length===1?t[0]:null,i=en(t,n=>n.isVisible());e.dispatchEvent({type:"columnVisible",visible:i,columns:t,column:s,source:o})}function Al(e,t,o,s){e.dispatchEvent({type:t,columns:o,column:o&&o.length==1?o[0]:null,source:s})}function It(e,t,o,s,i=null){t!=null&&t.length&&e.dispatchEvent({type:"columnResized",columns:t,column:t.length===1?t[0]:null,flexColumns:i,finished:o,source:s})}function on(e,t,o){var D;const{colModel:s,rowGroupColsSvc:i,pivotColsSvc:n,autoColSvc:r,selectionColSvc:l,colAnimation:a,visibleCols:d,pivotResultCols:c,environment:h,valueColsSvc:u,eventSvc:g,gos:p}=e,f=s.getColDefCols()??[],C=l==null?void 0:l.getColumns();if(!(f!=null&&f.length)&&!(C!=null&&C.length))return!1;if(t!=null&&t.state&&!t.state.forEach)return I(32),!1;const y=(b,P,L,F,T)=>{if(!b)return;const M=Fl(P,t.defaultState),B=M("flex").value1;if(Qi(e,b,M("hide").value1,M("sort").value1,M("sortIndex").value1,M("pinned").value1,B,o),B==null){const _=M("width").value1;if(_!=null){const X=b.getColDef().minWidth??h.getDefaultColumnMinWidth();X!=null&&_>=X&&b.setActualWidth(_,o)}}T||!b.isPrimary()||(u==null||u.syncColumnWithState(b,o,M),i==null||i.syncColumnWithState(b,o,M,L),n==null||n.syncColumnWithState(b,o,M,F))},S=(b,P,L)=>{var os,ss;const F=sn(e,o),T=P.slice(),M={},B={},_=[],X=[],re=[];let lt=0;const le=(i==null?void 0:i.columns.slice())??[],or=(n==null?void 0:n.columns.slice())??[];b.forEach(j=>{const Ne=j.colId;if(Ne.startsWith(Ut)){_.push(j),re.push(j);return}if(Zi(Ne)){X.push(j),re.push(j);return}const Pe=L(Ne);Pe?(y(Pe,j,M,B,!1),ye(T,Pe)):(re.push(j),lt+=1)});const es=j=>y(j,null,M,B,!1);T.forEach(es),i==null||i.sortColumns(Rs.bind(i,M,le)),n==null||n.sortColumns(Rs.bind(n,B,or)),s.refreshCols(!1);const ts=(j,Ne,Qt=[])=>{Ne.forEach(Pe=>{const is=j(Pe.colId);ye(Qt,is),y(is,Pe,null,null,!0)}),Qt.forEach(es)};return ts(j=>(r==null?void 0:r.getColumn(j))??null,_,(os=r==null?void 0:r.getColumns())==null?void 0:os.slice()),ts(j=>(l==null?void 0:l.getColumn(j))??null,X,(ss=l==null?void 0:l.getColumns())==null?void 0:ss.slice()),Gl(t,s,p),d.refresh(o),g.dispatchEvent({type:"columnEverythingChanged",source:o}),F(),{unmatchedAndAutoStates:re,unmatchedCount:lt}};a==null||a.start();let{unmatchedAndAutoStates:w,unmatchedCount:R}=S(t.state||[],f,b=>s.getColDefCol(b));if(w.length>0||k(t.defaultState)){const b=((D=c==null?void 0:c.getPivotResultCols())==null?void 0:D.list)??[];R=S(w,b,P=>(c==null?void 0:c.getPivotResultCol(P))??null).unmatchedCount}return a==null||a.finish(),R===0}function sn(e,t){const{rowGroupColsSvc:o,pivotColsSvc:s,valueColsSvc:i,colModel:n,sortSvc:r,eventSvc:l}=e,a={rowGroupColumns:(o==null?void 0:o.columns.slice())??[],pivotColumns:(s==null?void 0:s.columns.slice())??[],valueColumns:(i==null?void 0:i.columns.slice())??[]},d=Ss(e),c={};return d.forEach(h=>{c[h.colId]=h}),()=>{const h=(b,P,L,F)=>{const T=P.map(F),M=L.map(F);if(_t(T,M))return;const _=new Set(P);L.forEach(re=>{_.delete(re)||_.add(re)});const X=[..._];l.dispatchEvent({type:b,columns:X,column:X.length===1?X[0]:null,source:t})},u=b=>{const P=[];return n.forAllCols(L=>{const F=c[L.getColId()];F&&b(F,L)&&P.push(L)}),P},g=b=>b.getColId();h("columnRowGroupChanged",a.rowGroupColumns,(o==null?void 0:o.columns)??[],g),h("columnPivotChanged",a.pivotColumns,(s==null?void 0:s.columns)??[],g);const f=u((b,P)=>{const L=b.aggFunc!=null,F=L!=P.isValueActive(),T=L&&b.aggFunc!=P.getAggFunc();return F||T});f.length>0&&Al(l,"columnValueChanged",f,t),It(l,u((b,P)=>b.width!=P.getActualWidth()),!0,t),tn(l,u((b,P)=>b.pinned!=P.getPinned()),t),Ml(l,u((b,P)=>b.hide==P.isVisible()),t);const R=u((b,P)=>b.sort!=P.getSort()||b.sortIndex!=P.getSortIndex());R.length>0&&(r==null||r.dispatchSortChangedEvents(t,R));const D=Ss(e);Ol(d,D,t,n,l)}}function Ss(e){const{colModel:t,rowGroupColsSvc:o,pivotColsSvc:s}=e,i=t.getColDefCols();if(V(i)||!t.isAlive())return[];const n=o==null?void 0:o.columns,r=s==null?void 0:s.columns,l=[],a=c=>{const h=c.isRowGroupActive()&&n?n.indexOf(c):null,u=c.isPivotActive()&&r?r.indexOf(c):null,g=c.isValueActive()?c.getAggFunc():null,p=c.getSort()!=null?c.getSort():null,f=c.getSortIndex()!=null?c.getSortIndex():null;l.push({colId:c.getColId(),width:c.getActualWidth(),hide:!c.isVisible(),pinned:c.getPinned(),sort:p,sortIndex:f,aggFunc:g,rowGroup:c.isRowGroupActive(),rowGroupIndex:h,pivot:c.isPivotActive(),pivotIndex:u,flex:c.getFlex()??null})};t.forAllCols(c=>a(c));const d=new Map(t.getCols().map((c,h)=>[c.getColId(),h]));return l.sort((c,h)=>{const u=d.has(c.colId)?d.get(c.colId):-1,g=d.has(h.colId)?d.get(h.colId):-1;return u-g}),l}function Hl(e){const t=(p,f)=>p??f??null,o=e.getColDef(),s=t(o.sort,o.initialSort),i=t(o.sortIndex,o.initialSortIndex),n=t(o.hide,o.initialHide),r=t(o.pinned,o.initialPinned),l=t(o.width,o.initialWidth),a=t(o.flex,o.initialFlex);let d=t(o.rowGroupIndex,o.initialRowGroupIndex),c=t(o.rowGroup,o.initialRowGroup);d==null&&(c==null||c==!1)&&(d=null,c=null);let h=t(o.pivotIndex,o.initialPivotIndex),u=t(o.pivot,o.initialPivot);h==null&&(u==null||u==!1)&&(h=null,u=null);const g=t(o.aggFunc,o.initialAggFunc);return{colId:e.getColId(),sort:s,sortIndex:i,hide:n,pinned:r,width:l,flex:a,rowGroup:c,rowGroupIndex:d,pivot:u,pivotIndex:h,aggFunc:g}}function Gl(e,t,o){if(!e.applyOrder||!e.state)return;const s=[];e.state.forEach(i=>{i.colId!=null&&s.push(i.colId)}),Bl(t.cols,s,t,o)}function Bl(e,t,o,s){if(e==null)return;let i=[];const n={};t.forEach(l=>{if(n[l])return;const a=e.map[l];a&&(i.push(a),n[l]=!0)});let r=0;if(e.list.forEach(l=>{const a=l.getColId();if(n[a]!=null)return;a.startsWith(Ut)?i.splice(r++,0,l):i.push(l)}),i=Xi(i,s),!Ji(i,o.getColTree())){I(39);return}e.list=i}function Ol(e,t,o,s,i){const n={};t.forEach(c=>n[c.colId]=c);const r={};e.forEach(c=>{n[c.colId]&&(r[c.colId]=!0)});const l=e.filter(c=>r[c.colId]),a=t.filter(c=>r[c.colId]),d=[];a.forEach((c,h)=>{const u=l&&l[h];if(u&&u.colId!==c.colId){const g=s.getCol(u.colId);g&&d.push(g)}}),d.length&&i.dispatchEvent({type:"columnMoved",columns:d,column:d.length===1?d[0]:null,finished:!0,source:o})}var Rs=(e,t,o,s)=>{const i=e[o.getId()],n=e[s.getId()],r=i!=null,l=n!=null;if(r&&l)return i-n;if(r)return-1;if(l)return 1;const a=t.indexOf(o),d=t.indexOf(s),c=a>=0,h=d>=0;return c&&h?a-d:c?-1:1},Wl=class extends v{constructor(){super(...arguments),this.beanName="colModel",this.pivotMode=!1,this.ready=!1,this.changeEventsDispatching=!1}postConstruct(){this.pivotMode=this.gos.get("pivotMode"),this.addManagedPropertyListeners(["groupDisplayType","treeData","treeDataDisplayType","groupHideOpenParents"],e=>this.refreshAll(yt(e.source))),this.addManagedPropertyListeners(["defaultColDef","defaultColGroupDef","columnTypes","suppressFieldDotNotation"],this.recreateColumnDefs.bind(this)),this.addManagedPropertyListener("pivotMode",e=>this.setPivotMode(this.gos.get("pivotMode"),yt(e.source)))}createColsFromColDefs(e){var S,w,R;const{beans:t}=this,{valueCache:o,colAutosize:s,rowGroupColsSvc:i,pivotColsSvc:n,valueColsSvc:r,visibleCols:l,colViewport:a,eventSvc:d}=t,c=this.colDefs?sn(t,e):void 0;o==null||o.expire();const h=(S=this.colDefCols)==null?void 0:S.list,u=(w=this.colDefCols)==null?void 0:w.tree,g=xl(t,this.colDefs,!0,u,e);bs(t,(R=this.colDefCols)==null?void 0:R.tree,g.columnTree);const p=g.columnTree,f=g.treeDepth,C=bl(p),y={};C.forEach(D=>y[D.getId()]=D),this.colDefCols={tree:p,treeDepth:f,list:C,map:y},i==null||i.extractCols(e,h),n==null||n.extractCols(e,h),r==null||r.extractCols(e,h),this.ready=!0,this.refreshCols(!0),l.refresh(e),a.checkViewportColumns(),d.dispatchEvent({type:"columnEverythingChanged",source:e}),c&&(this.changeEventsDispatching=!0,c(),this.changeEventsDispatching=!1),d.dispatchEvent({type:"newColumnsLoaded",source:e}),e==="gridInitializing"&&(s==null||s.applyAutosizeStrategy())}refreshCols(e){var f;if(!this.colDefCols)return;const t=(f=this.cols)==null?void 0:f.tree;this.saveColOrder();const{autoColSvc:o,selectionColSvc:s,rowNumbersSvc:i,quickFilter:n,pivotResultCols:r,showRowGroupCols:l,rowAutoHeight:a,visibleCols:d,colViewport:c,eventSvc:h}=this.beans,u=this.selectCols(r,this.colDefCols);this.createColumnsForService([o,s,i],u);const g=$r(this.gos,this.showingPivotResult);(!e||g)&&this.restoreColOrder(u),this.positionLockedCols(u),l==null||l.refresh(),n==null||n.refreshCols(),this.setColSpanActive(),a==null||a.setAutoHeightActive(u),d.clear(),c.clear(),!_t(t,this.cols.tree)&&h.dispatchEvent({type:"gridColumnsChanged"})}createColumnsForService(e,t){for(const o of e)o&&(o.createColumns(t,s=>{this.lastOrder=s(this.lastOrder),this.lastPivotOrder=s(this.lastPivotOrder)}),o.addColumns(t))}selectCols(e,t){const o=(e==null?void 0:e.getPivotResultCols())??null;this.showingPivotResult=o!=null;const{map:s,list:i,tree:n,treeDepth:r}=o??t;return this.cols={list:i.slice(),map:{...s},tree:n.slice(),treeDepth:r},o&&(o.list.some(a=>{var d;return((d=this.cols)==null?void 0:d.map[a.getColId()])!==void 0})||(this.lastPivotOrder=null)),this.cols}getColsToShow(){var s;if(!this.cols)return[];const e=this.isPivotMode()&&!this.showingPivotResult,t=(s=this.beans.valueColsSvc)==null?void 0:s.columns;return this.cols.list.filter(i=>{const n=Sl(i);if(e){const r=t==null?void 0:t.includes(i);return n||r}else return n||i.isVisible()})}refreshAll(e){this.ready&&(this.refreshCols(!1),this.beans.visibleCols.refresh(e))}setColsVisible(e,t=!1,o){on(this.beans,{state:e.map(s=>({colId:typeof s=="string"?s:s.getColId(),hide:!t}))},o)}restoreColOrder(e){const t=this.showingPivotResult?this.lastPivotOrder:this.lastOrder;if(!t)return;const o=t.filter(h=>e.map[h.getId()]!=null);if(o.length===0)return;if(o.length===e.list.length){e.list=o;return}const s=h=>{const u=h.getOriginalParent();return u?u.getChildren().length>1?!0:s(u):!1};if(!o.some(h=>s(h))){const h=new Set(o);for(const u of e.list)h.has(u)||o.push(u);e.list=o;return}const i=new Map;for(let h=0;h!i.has(h));if(n.length===0){e.list=o;return}const r=(h,u)=>{const g=u?u.getOriginalParent():h.getOriginalParent();if(!g)return null;let p=null,f=null;for(const C of g.getChildren())if(!(C===u||C===h)){if(C instanceof _o){const y=i.get(C);if(y==null)continue;(p==null||p{const S=i.get(y);S!=null&&(p==null||p=0;h--)d[c--]=l[h];for(let h=o.length-1;h>=0;h--){const u=o[h],g=a.get(u);if(g)if(Array.isArray(g))for(let p=g.length-1;p>=0;p--){const f=g[p];d[c--]=f}else d[c--]=g;d[c--]=u}e.list=d}positionLockedCols(e){e.list=Xi(e.list,this.gos)}saveColOrder(){var e,t;this.showingPivotResult?this.lastPivotOrder=((e=this.cols)==null?void 0:e.list)??null:this.lastOrder=((t=this.cols)==null?void 0:t.list)??null}getColumnDefs(){var e,t;return this.colDefCols?(t=this.beans.colDefFactory)==null?void 0:t.getColumnDefs(this.colDefCols.list,this.showingPivotResult,this.lastOrder,((e=this.cols)==null?void 0:e.list)??[]):void 0}setColSpanActive(){var e;this.colSpanActive=!!((e=this.cols)!=null&&e.list.some(t=>t.getColDef().colSpan!=null))}isPivotMode(){return this.pivotMode}setPivotMode(e,t){if(e===this.pivotMode||(this.pivotMode=e,!this.ready))return;this.refreshCols(!1);const{visibleCols:o,eventSvc:s}=this.beans;o.refresh(t),s.dispatchEvent({type:"columnPivotModeChanged"})}isPivotActive(){var t;const e=(t=this.beans.pivotColsSvc)==null?void 0:t.columns;return this.pivotMode&&!!(e!=null&&e.length)}recreateColumnDefs(e){var o;if(!this.cols)return;(o=this.beans.autoColSvc)==null||o.updateColumns(e);const t=yt(e.source);this.createColsFromColDefs(t)}setColumnDefs(e,t){this.colDefs=e,this.createColsFromColDefs(t)}destroy(){var e;bs(this.beans,(e=this.colDefCols)==null?void 0:e.tree),super.destroy()}getColTree(){var e;return((e=this.cols)==null?void 0:e.tree)??[]}getColDefColTree(){var e;return((e=this.colDefCols)==null?void 0:e.tree)??[]}getColDefCols(){var e;return((e=this.colDefCols)==null?void 0:e.list)??null}getCols(){var e;return((e=this.cols)==null?void 0:e.list)??[]}forAllCols(e){var i,n,r,l;const{pivotResultCols:t,autoColSvc:o,selectionColSvc:s}=this.beans;dt((i=this.colDefCols)==null?void 0:i.list,e),dt((n=o==null?void 0:o.columns)==null?void 0:n.list,e),dt((r=s==null?void 0:s.columns)==null?void 0:r.list,e),dt((l=t==null?void 0:t.getPivotResultCols())==null?void 0:l.list,e)}getColsForKeys(e){return e?e.map(t=>this.getCol(t)).filter(t=>t!=null):[]}getColDefCol(e){var t;return(t=this.colDefCols)!=null&&t.list?this.getColFromCollection(e,this.colDefCols):null}getCol(e){return e==null?null:this.getColFromCollection(e,this.cols)}getColById(e){var t;return((t=this.cols)==null?void 0:t.map[e])??null}getColFromCollection(e,t){var i,n;if(t==null)return null;const{map:o,list:s}=t;if(typeof e=="string"&&o[e])return o[e];for(let r=0;rt.destroyBean(o)),o??e}var nn=class{constructor(e){this.cssClassStates={},this.getGui=e}toggleCss(e,t){var s;if(!e)return;if(e.indexOf(" ")>=0){const i=(e||"").split(" ");if(i.length>1){i.forEach(n=>this.toggleCss(n,t));return}}this.cssClassStates[e]!==t&&e.length&&((s=this.getGui())==null||s.classList.toggle(e,t),this.cssClassStates[e]=t)}},Nl=0,x=null,N=class extends v{constructor(e,t){super(),this.suppressDataRefValidation=!1,this.displayed=!0,this.visible=!0,this.compId=Nl++,this.cssManager=new nn(()=>this.eGui),this.componentSelectors=new Map((t??[]).map(o=>[o.selector,o])),e&&this.setTemplate(e)}preConstruct(){var t,o,s;this.wireTemplate(this.getGui());const e="component-"+((o=(t=Object.getPrototypeOf(this))==null?void 0:t.constructor)==null?void 0:o.name);(s=this.css)==null||s.forEach(i=>this.beans.environment.addGlobalCSS(i,e))}wireTemplate(e,t){e&&this.gos&&(this.applyElementsToComponent(e),this.createChildComponentsFromTags(e,t))}getCompId(){return this.compId}getDataRefAttribute(e){return e.getAttribute?e.getAttribute(Di):null}applyElementsToComponent(e,t,o,s=null){if(t===void 0&&(t=this.getDataRefAttribute(e)),t){const i=this[t];if(i===x)this[t]=s??e;else{const n=o&&o[t];if(!this.suppressDataRefValidation&&!n)throw new Error(`data-ref: ${t} on ${this.constructor.name} with ${i}`)}}}createChildComponentsFromTags(e,t){const o=[];for(const s of e.childNodes??[])o.push(s);o.forEach(s=>{if(!(s instanceof HTMLElement))return;const i=this.createComponentFromElement(s,n=>{const r=n.getGui();if(r)for(const l of s.attributes??[])r.setAttribute(l.name,l.value)},t);if(i){if(i.addItems&&s.children.length){this.createChildComponentsFromTags(s,t);const n=Array.prototype.slice.call(s.children);i.addItems(n)}this.swapComponentForNode(i,e,s)}else s.childNodes&&this.createChildComponentsFromTags(s,t)})}createComponentFromElement(e,t,o){const s=e.nodeName,i=this.getDataRefAttribute(e),n=s.indexOf("AG-")===0,r=n?this.componentSelectors.get(s):null;let l=null;if(r){const a=o&&i?o[i]:void 0;l=new r.component(a),l.setParentComponent(this),this.createBean(l,null,t)}else if(n)throw new Error(`selector: ${s}`);return this.applyElementsToComponent(e,i,o,l),l}swapComponentForNode(e,t,o){const s=e.getGui();t.replaceChild(s,o),t.insertBefore(document.createComment(o.nodeName),s),this.addDestroyFunc(this.destroyBean.bind(this,e))}activateTabIndex(e){const t=this.gos.get("tabIndex");e||(e=[]),e.length||e.push(this.getGui()),e.forEach(o=>o.setAttribute("tabindex",t.toString()))}setTemplate(e,t,o){let s;typeof e=="string"||e==null?s=Bo(e):s=q(e),this.setTemplateFromElement(s,t,o)}setTemplateFromElement(e,t,o,s=!1){if(this.eGui=e,this.suppressDataRefValidation=s,t)for(let i=0;ithis.eGui.removeEventListener(e,t))}addCss(e){this.cssManager.toggleCss(e,!0)}removeCss(e){this.cssManager.toggleCss(e,!1)}toggleCss(e,t){this.cssManager.toggleCss(e,t)}registerCSS(e){this.css||(this.css=[]),this.css.push(e)}},rn=class qe{constructor(t){this.status=0,this.resolution=null,this.waiters=[],t(o=>this.onDone(o),o=>this.onReject(o))}static all(t){return t.length?new qe(o=>{let s=t.length;const i=new Array(s);t.forEach((n,r)=>{n.then(l=>{i[r]=l,s--,s===0&&o(i)})})}):qe.resolve()}static resolve(t=null){return new qe(o=>o(t))}then(t){return new qe(o=>{this.status===1?o(t(this.resolution)):this.waiters.push(s=>o(t(s)))})}onDone(t){this.status=1,this.resolution=t,this.waiters.forEach(o=>o(t))}onReject(t){}};function zl(e){return e?e.prototype&&"getGui"in e.prototype:!1}function _l(e,t,o,s){const{name:i}=o;let n,r,l,a,d,c;if(t){const h=t,u=h[i+"Selector"],g=u?u(s):null,p=f=>{typeof f=="string"?n=f:f!=null&&f!==!0&&(e.isFrameworkComponent(f)?l=f:r=f)};g?(p(g.component),a=g.params,d=g.popup,c=g.popupPosition):p(h[i])}return{compName:n,jsComp:r,fwComp:l,paramsFromSelector:a,popupFromSelector:d,popupPositionFromSelector:c}}var Ul=class extends v{constructor(){super(...arguments),this.beanName="userCompFactory"}wireBeans(e){this.agCompUtils=e.agCompUtils,this.registry=e.registry,this.frameworkCompWrapper=e.frameworkCompWrapper,this.gridOptions=e.gridOptions}getCompDetailsFromGridOptions(e,t,o,s=!1){return this.getCompDetails(this.gridOptions,e,t,o,s)}getCompDetails(e,t,o,s,i=!1){var S;const{name:n,cellRenderer:r}=t;let{compName:l,jsComp:a,fwComp:d,paramsFromSelector:c,popupFromSelector:h,popupPositionFromSelector:u}=_l(this.beans.frameworkOverrides,e,t,s),g;const p=w=>{const R=this.registry.getUserComponent(n,w);R&&(a=R.componentFromFramework?void 0:R.component,d=R.componentFromFramework?R.component:void 0,g=R.params)};if(l!=null&&p(l),a==null&&d==null&&o!=null&&p(o),a&&r&&!zl(a)&&(a=(S=this.agCompUtils)==null?void 0:S.adaptFunction(t,a)),!a&&!d){const{validation:w}=this.beans;i&&(l!==o||!o)?l?w!=null&&w.isProvidedUserComp(l)||K(50,{compName:l}):o?w||K(260,{...this.gos.getModuleErrorParams(),propName:n,compName:o}):K(216,{name:n}):o&&!w&&K(146,{comp:o});return}const f=this.mergeParams(e,t,s,c,g),C=a==null,y=a??d;return{componentFromFramework:C,componentClass:y,params:f,type:t,popupFromSelector:h,popupPositionFromSelector:u,newAgStackInstance:()=>this.newAgStackInstance(y,C,f,t)}}newAgStackInstance(e,t,o,s){var l;const i=!t;let n;i?n=new e:n=this.frameworkCompWrapper.wrap(e,s.mandatoryMethods,s.optionalMethods,s),this.createBean(n);const r=(l=n.init)==null?void 0:l.call(n,o);return r==null?rn.resolve(n):r.then(()=>n)}mergeParams(e,t,o,s=null,i){const n={...o,...i},r=e,l=r&&r[t.name+"Params"];if(typeof l=="function"){const a=l(o);Y(n,a)}else typeof l=="object"&&Y(n,l);return Y(n,s),n}},Kl={name:"dragAndDropImageComponent",mandatoryMethods:["setIcon","setLabel"]},jl={name:"headerComponent",optionalMethods:["refresh"]},$l={name:"innerHeaderComponent"},ql={name:"innerHeaderGroupComponent"},Zl={name:"headerGroupComponent"},Yl={name:"cellRenderer",optionalMethods:["refresh","afterGuiAttached"],cellRenderer:!0},Ql={name:"loadingCellRenderer",cellRenderer:!0},Xl={name:"loadingOverlayComponent",optionalMethods:["refresh"]},Jl={name:"noRowsOverlayComponent",optionalMethods:["refresh"]},ea={name:"fullWidthCellRenderer",optionalMethods:["refresh","afterGuiAttached"],cellRenderer:!0},ta={name:"loadingCellRenderer",cellRenderer:!0},oa={name:"groupRowRenderer",optionalMethods:["afterGuiAttached"],cellRenderer:!0},sa={name:"detailCellRenderer",optionalMethods:["refresh"],cellRenderer:!0};function ia(e,t){return e.getCompDetailsFromGridOptions(Kl,"agDragAndDropImage",t,!0)}function na(e,t,o){return e.getCompDetails(t,jl,"agColumnHeader",o)}function ra(e,t,o){return e.getCompDetails(t,$l,void 0,o)}function la(e,t){const o=t.columnGroup.getColGroupDef();return e.getCompDetails(o,Zl,"agColumnGroupHeader",t)}function aa(e,t,o){return e.getCompDetails(t,ql,void 0,o)}function da(e,t){return e.getCompDetailsFromGridOptions(ea,void 0,t,!0)}function ca(e,t){return e.getCompDetailsFromGridOptions(ta,"agLoadingCellRenderer",t,!0)}function ha(e,t){return e.getCompDetailsFromGridOptions(oa,"agGroupRowRenderer",t,!0)}function ua(e,t){return e.getCompDetailsFromGridOptions(sa,"agDetailCellRenderer",t,!0)}function Fs(e,t,o){return e.getCompDetails(t,Yl,void 0,o)}function ga(e,t,o){return e.getCompDetails(t,Ql,"agSkeletonCellRenderer",o,!0)}function pa(e,t){return e.getCompDetailsFromGridOptions(Xl,"agLoadingOverlay",t,!0)}function fa(e,t){return e.getCompDetailsFromGridOptions(Jl,"agNoRowsOverlay",t,!0)}var ln=new Set,Lt={},Me={},bt,an=!1,dn=!1,Ca=!1;function ma(e){const[t,o]=e.version.split(".")||[],[s,i]=bt.split(".")||[];return t===s&&o===i}function va(e){bt||(bt=e.version);const t=o=>`You are using incompatible versions of AG Grid modules. Major and minor versions should always match across modules. ${o} Please update all modules to the same version.`;if(e.version?ma(e)||Ye(t(`'${e.moduleName}' is version ${e.version} but the other modules are version ${bt}.`)):Ye(t(`'${e.moduleName}' is incompatible.`)),e.validate){const o=e.validate();o.isValid||Ye(`${o.message}`)}}function Mt(e,t,o=!1){o||(an=!0),va(e);const s=e.rowModels??["all"];ln.add(e);let i;t!==void 0?(dn=!0,Me[t]===void 0&&(Me[t]={}),i=Me[t]):i=Lt,s.forEach(n=>{i[n]===void 0&&(i[n]={}),i[n][e.moduleName]=e}),e.dependsOn&&e.dependsOn.forEach(n=>Mt(n,t,o))}function wa(e){delete Me[e]}function To(e,t,o){const s=i=>{var n,r,l;return!!((n=Lt[i])!=null&&n[e])||!!((l=(r=Me[t])==null?void 0:r[i])!=null&&l[e])};return s(o)||s("all")}function cn(){return dn}function ya(e,t){const o=Me[e]??{};return[...Object.values(Lt.all??{}),...Object.values(o.all??{}),...Object.values(Lt[t]??{}),...Object.values(o[t]??{})]}function ba(){return new Set(ln)}function Sa(){return an}function Ra(){return Ca}var Fa=class{constructor(e){this.beans={},this.createdBeans=[],this.destroyed=!1,!(!e||!e.beanClasses)&&(this.beanDestroyComparator=e.beanDestroyComparator,this.init(e))}init(e){var t;for(const o of Object.keys(e.providedBeanInstances))this.beans[o]=e.providedBeanInstances[o];e.beanClasses.forEach(o=>{const s=new o;s.beanName?this.beans[s.beanName]=s:console.error(`Bean ${o.name} is missing beanName`),this.createdBeans.push(s)}),(t=e.derivedBeans)==null||t.forEach(o=>{const{beanName:s,bean:i}=o(this);this.beans[s]=i,this.createdBeans.push(i)}),e.beanInitComparator&&this.createdBeans.sort(e.beanInitComparator),this.initBeans(this.createdBeans)}getBeanInstances(){return Object.values(this.beans)}createBean(e,t){if(!e)throw Error("null bean");return this.initBeans([e],t),e}initBeans(e,t){e.forEach(o=>{var s,i;(s=o.preWireBeans)==null||s.call(o,this.beans),(i=o.wireBeans)==null||i.call(o,this.beans)}),e.forEach(o=>{var s;return(s=o.preConstruct)==null?void 0:s.call(o)}),t&&e.forEach(t),e.forEach(o=>{var s;return(s=o.postConstruct)==null?void 0:s.call(o)})}getBeans(){return this.beans}getBean(e){return this.beans[e]}destroy(){if(this.destroyed)return;this.destroyed=!0;const e=this.getBeanInstances();this.beanDestroyComparator&&e.sort(this.beanDestroyComparator),this.destroyBeans(e),this.beans={},this.createdBeans=[]}destroyBean(e){var t;(t=e==null?void 0:e.destroy)==null||t.call(e)}destroyBeans(e){if(e)for(let t=0;t0||(e.addEventListener("keydown",Ht),e.addEventListener("mousedown",Ht))}function La(e){At>0||(e.removeEventListener("keydown",Ht),e.removeEventListener("mousedown",Ht))}function Ht(e){const t=ko,o=e.type==="keydown";o&&(e.ctrlKey||e.metaKey||e.altKey)||t!==o&&(ko=o)}function Ma(e){const t=oe(e);return Ia(t),At++,()=>{At--,La(t)}}function Aa(){return ko}function Ae(e,t,o=!1){const s=Tr;let i=vi;t&&(i+=", "+t),o&&(i+=', [tabindex="-1"]');const n=Array.prototype.slice.apply(e.querySelectorAll(s)).filter(a=>De(a)),r=Array.prototype.slice.apply(e.querySelectorAll(i));return r.length?((a,d)=>a.filter(c=>d.indexOf(c)===-1))(n,r):n}function Gt(e,t=!1,o=!1,s=!1){const i=Ae(e,s?".ag-tab-guard":null,o),n=t?H(i):i[0];return n?(n.focus({preventScroll:!0}),!0):!1}function jt(e,t,o,s){const i=Ae(t,null),n=z(e);let r;r=i.indexOf(n);const l=r+(s?-1:1);return l<0||l>=i.length?null:i[l]}function Ha(e,t=5){let o=0;for(;e&&us(e)===null&&++o<=t;)e=e.parentElement;return us(e)===null?null:e}function Fe(e){var t;return e.gos.get("suppressHeaderFocus")||!!((t=e.overlays)!=null&&t.isExclusive())}function Uo(e){var t;return e.gos.get("suppressCellFocus")||!!((t=e.overlays)!=null&&t.isExclusive())}function et(e,t,o=!1){const s=e.ctrlsSvc.get("gridCtrl");return!o&&s.focusNextInnerContainer(t)?!0:((o||!t&&!s.isDetailGrid())&&s.forceFocusOutOfContainer(t),!1)}function Ga(e,t=!1){return e===m.DELETE?!0:!t&&e===m.BACKSPACE?fi():!1}var Ba=class extends v{constructor(e,t,o,s){super(),this.cellCtrl=e,this.rowNode=o,this.rowCtrl=s,this.beans=t}init(){this.eGui=this.cellCtrl.eGui}onKeyDown(e){const t=e.key;switch(t){case m.ENTER:this.onEnterKeyDown(e);break;case m.F2:this.onF2KeyDown(e);break;case m.ESCAPE:this.onEscapeKeyDown(e);break;case m.TAB:this.onTabKeyDown(e);break;case m.BACKSPACE:case m.DELETE:this.onBackspaceOrDeleteKeyDown(t,e);break;case m.DOWN:case m.UP:case m.RIGHT:case m.LEFT:this.onNavigationKeyDown(e,t);break}}onNavigationKeyDown(e,t){var o;if(!this.cellCtrl.editing){if(e.shiftKey&&this.cellCtrl.isRangeSelectionEnabled())this.onShiftRangeSelect(e);else{const s=this.cellCtrl.getFocusedCellPosition();(o=this.beans.navigation)==null||o.navigateToNextCell(e,t,s,!0)}e.preventDefault()}}onShiftRangeSelect(e){const{rangeSvc:t,navigation:o}=this.beans;if(!t)return;const s=t.extendLatestRangeInDirection(e);s&&(o==null||o.ensureCellVisible(s))}onTabKeyDown(e){var t;(t=this.beans.navigation)==null||t.onTabKeyDown(this.cellCtrl,e)}onBackspaceOrDeleteKeyDown(e,t){var a;const{cellCtrl:o,beans:s,rowNode:i}=this,{gos:n,rangeSvc:r,eventSvc:l}=s;if(!o.editing){if(l.dispatchEvent({type:"keyShortcutChangedCellStart"}),Ga(e,n.get("enableCellEditingOnBackspace"))){if(r&&Oe(n))r.clearCellRangeCellValues({dispatchWrapperEvents:!0,wrapperEventSource:"deleteKey"});else if(o.isCellEditable()){const{column:d}=o,c=this.beans.valueSvc.getDeleteValue(d,i);i.setDataValue(d,c,"cellClear")}}else(a=s.editSvc)==null||a.startRowOrCellEdit(o,e,t);l.dispatchEvent({type:"keyShortcutChangedCellEnd"})}}onEnterKeyDown(e){var s,i,n;const{cellCtrl:t,beans:o}=this;if(t.editing||this.rowCtrl.editing)(s=this.beans.editSvc)==null||s.stopRowOrCellEdit(t,!1,!1,e.shiftKey);else if(o.gos.get("enterNavigatesVertically")){const r=e.shiftKey?m.UP:m.DOWN;(i=o.navigation)==null||i.navigateToNextCell(null,r,t.cellPosition,!1)}else(n=o.editSvc)==null||n.startRowOrCellEdit(t,m.ENTER,e),t.editing&&e.preventDefault()}onF2KeyDown(e){var s;const{cellCtrl:t,beans:o}=this;t.editing||(s=o.editSvc)==null||s.startRowOrCellEdit(t,m.F2,e)}onEscapeKeyDown(e){var s;const{cellCtrl:t,beans:o}=this;t.editing&&((s=o.editSvc)==null||s.stopRowOrCellEdit(t,!0))}processCharacter(e){var i;if(e.target!==this.eGui||this.cellCtrl.editing)return;const s=e.key;s===m.SPACE?this.onSpaceKeyDown(e):(i=this.beans.editSvc)!=null&&i.startRowOrCellEdit(this.cellCtrl,s,e)&&e.preventDefault()}onSpaceKeyDown(e){var o;const{gos:t}=this.beans;!this.cellCtrl.editing&&Hi(t)&&((o=this.beans.selectionSvc)==null||o.handleSelectionEvent(e,this.rowNode,"spaceKey")),e.preventDefault()}destroy(){super.destroy()}},Oa=class extends v{constructor(e,t,o){super(),this.cellCtrl=e,this.column=o,this.beans=t}onMouseEvent(e,t){if(!ve(t))switch(e){case"click":this.onCellClicked(t);break;case"mousedown":case"touchstart":this.onMouseDown(t);break;case"dblclick":this.onCellDoubleClicked(t);break;case"mouseout":this.onMouseOut(t);break;case"mouseover":this.onMouseOver(t);break}}onCellClicked(e){var d;if((d=this.beans.touchSvc)!=null&&d.handleCellDoubleClick(this,e))return;const{eventSvc:t,rangeSvc:o,gos:s,editSvc:i}=this.beans,n=e.ctrlKey||e.metaKey;o&&n&&o.getCellRangeCount(this.cellCtrl.cellPosition)>1&&o.intersectLastRange(!0);const r=this.cellCtrl.createEvent(e,"cellClicked");t.dispatchEvent(r);const l=this.column.getColDef();l.onCellClicked&&window.setTimeout(()=>{this.beans.frameworkOverrides.wrapOutgoing(()=>{l.onCellClicked(r)})},0),(s.get("singleClickEdit")||l.singleClickEdit)&&!s.get("suppressClickEdit")&&!(e.shiftKey&&(o==null?void 0:o.getCellRanges().length)!=0)&&(i==null||i.startRowOrCellEdit(this.cellCtrl,void 0,e))}onCellDoubleClicked(e){const{column:t,beans:o,cellCtrl:s}=this,{eventSvc:i,frameworkOverrides:n,gos:r,editSvc:l}=o,a=t.getColDef(),d=s.createEvent(e,"cellDoubleClicked");i.dispatchEvent(d),typeof a.onCellDoubleClicked=="function"&&window.setTimeout(()=>{n.wrapOutgoing(()=>{a.onCellDoubleClicked(d)})},0),!r.get("singleClickEdit")&&!r.get("suppressClickEdit")&&(l==null||l.startRowOrCellEdit(s,null,e))}onMouseDown(e){const{ctrlKey:t,metaKey:o,shiftKey:s}=e,i=e.target,{cellCtrl:n,beans:r}=this,{eventSvc:l,rangeSvc:a,rowNumbersSvc:d,focusSvc:c,gos:h}=r;if(this.isRightClickInExistingRange(e))return;const u=a&&!a.isEmpty(),g=this.containsWidget(i),{cellPosition:p}=n,f=Qe(p.column);if(d&&f&&!d.handleMouseDownOnCell(p,e)){a&&e.preventDefault(),e.stopImmediatePropagation();return}if(!s||!u){const y=h.get("enableCellTextSelection")&&e.defaultPrevented,S=(Ho()||y)&&!n.editing&&!Go(i)&&!g;n.focusCell(S)}if(s&&u&&!c.isCellFocused(p)){e.preventDefault();const C=c.getFocusedCell();if(C){const{column:y,rowIndex:S,rowPinned:w}=C,R=r.rowRenderer.getRowByPosition({rowIndex:S,rowPinned:w}),D=R==null?void 0:R.getCellCtrl(y);D!=null&&D.editing&&D.stopEditing(),c.setFocusedCell({column:y,rowIndex:S,rowPinned:w,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0})}}if(!g){if(a)if(f&&e.preventDefault(),s)a.extendLatestRangeToCell(p);else{const C=t||o;a.setRangeToCell(p,C)}l.dispatchEvent(this.cellCtrl.createEvent(e,"cellMouseDown"))}}isRightClickInExistingRange(e){const{rangeSvc:t}=this.beans;if(t){const o=t.isCellInAnyRange(this.cellCtrl.cellPosition),s=e.button===2||e.ctrlKey&&this.beans.gos.get("allowContextMenuWithControlKey");if(o&&s)return!0}return!1}containsWidget(e){return Ie(e,"ag-selection-checkbox",3)||Ie(e,"ag-drag-handle",3)}onMouseOut(e){if(this.mouseStayingInsideCell(e))return;const{eventSvc:t,colHover:o}=this.beans;t.dispatchEvent(this.cellCtrl.createEvent(e,"cellMouseOut")),o==null||o.clearMouseOver()}onMouseOver(e){if(this.mouseStayingInsideCell(e))return;const{eventSvc:t,colHover:o}=this.beans;t.dispatchEvent(this.cellCtrl.createEvent(e,"cellMouseOver")),o==null||o.setMouseOver([this.column])}mouseStayingInsideCell(e){if(!e.target||!e.relatedTarget)return!1;const t=this.cellCtrl.eGui,o=t.contains(e.target),s=t.contains(e.relatedTarget);return o&&s}destroy(){super.destroy()}},Wa=class extends v{constructor(e,t){super(),this.cellCtrl=e,this.beans=t,this.column=e.column,this.rowNode=e.rowNode}setupRowSpan(){this.rowSpan=this.column.getRowSpan(this.rowNode),this.addManagedListeners(this.beans.eventSvc,{newColumnsLoaded:()=>this.onNewColumnsLoaded()})}init(){this.eSetLeft=this.cellCtrl.getRootElement(),this.eContent=this.cellCtrl.eGui;const e=this.cellCtrl.getCellSpan();if(e||(this.setupColSpan(),this.setupRowSpan()),this.onLeftChanged(),this.onWidthChanged(),e||this._legacyApplyRowSpan(),e){const t=this.refreshSpanHeight.bind(this,e);t(),this.addManagedListeners(this.beans.eventSvc,{paginationChanged:t,recalculateRowBounds:t,pinnedHeightChanged:t})}}refreshSpanHeight(e){const t=e.getCellHeight();t!=null&&(this.eContent.style.height=`${t}px`)}onNewColumnsLoaded(){const e=this.column.getRowSpan(this.rowNode);this.rowSpan!==e&&(this.rowSpan=e,this._legacyApplyRowSpan(!0))}onDisplayColumnsChanged(){const e=this.getColSpanningList();_t(this.colsSpanning,e)||(this.colsSpanning=e,this.onWidthChanged(),this.onLeftChanged())}setupColSpan(){this.column.getColDef().colSpan!=null&&(this.colsSpanning=this.getColSpanningList(),this.addManagedListeners(this.beans.eventSvc,{displayedColumnsChanged:this.onDisplayColumnsChanged.bind(this),displayedColumnsWidthChanged:this.onWidthChanged.bind(this)}))}onWidthChanged(){if(!this.eContent)return;const e=this.getCellWidth();this.eContent.style.width=`${e}px`}getCellWidth(){return this.colsSpanning?this.colsSpanning.reduce((e,t)=>e+t.getActualWidth(),0):this.column.getActualWidth()}getColSpanningList(){const{column:e,rowNode:t}=this,o=e.getColSpan(t),s=[];if(o===1)s.push(e);else{let i=e;const n=e.getPinned();for(let r=0;i&&rthis.removeFeatures()),this.onSuppressCellFocusChanged(this.beans.gos.get("suppressCellFocus")),this.setupFocus(),this.applyStaticCssClasses(),this.setWrapText(),this.onFirstRightPinnedChanged(),this.onLastLeftPinnedChanged(),this.onColumnHover(),this.setupControlComps(),this.setupAutoHeight(s,r),this.refreshFirstAndLastStyles(),this.refreshAriaColIndex(),(l=this.positionFeature)==null||l.init(),(a=this.customStyleFeature)==null||a.setComp(e),(d=this.tooltipFeature)==null||d.refreshTooltip(),(c=this.keyboardListener)==null||c.init(),(h=this.rangeFeature)==null||h.setComp(e),(u=this.rowResizeFeature)==null||u.refreshRowResizer(),n&&this.isCellEditable()?(g=this.beans.editSvc)==null||g.startEditing(this):this.showValue(!1,!0),this.onCompAttachedFuncs.length&&(this.onCompAttachedFuncs.forEach(p=>p()),this.onCompAttachedFuncs=[])}setupAutoHeight(e,t){var o;this.isAutoHeight=((o=this.beans.rowAutoHeight)==null?void 0:o.setupCellAutoHeight(this,e,t))??!1}getCellAriaRole(){return this.column.getColDef().cellAriaRole??"gridcell"}isCellRenderer(){const e=this.column.getColDef();return e.cellRenderer!=null||e.cellRendererSelector!=null}getValueToDisplay(){return this.valueFormatted??this.value}showValue(e,t){var h,u,g;const{beans:o,column:s,rowNode:i,rangeFeature:n}=this,{userCompFactory:r}=o,l=this.getValueToDisplay();let a;const d=i.stub&&((h=i.groupData)==null?void 0:h[s.getId()])==null,c=s.getColDef();if(d||this.isCellRenderer()){const p=this.createCellRendererParams();!d||Qe(s)?a=Fs(r,c,p):a=ga(r,c,p)}if(!a&&!d&&((u=o.findSvc)!=null&&u.isMatch(i,s))){const p=this.createCellRendererParams();a=Fs(r,{...s.getColDef(),cellRenderer:"agFindCellRenderer"},p)}this.comp.setRenderDetails(a,l,e),!t&&n&&be(o,()=>n==null?void 0:n.refreshHandle()),(g=this.rowResizeFeature)==null||g.refreshRowResizer()}setupControlComps(){const e=this.column.getColDef();this.includeSelection=this.isIncludeControl(this.isCheckboxSelection(e),!0),this.includeRowDrag=this.isIncludeControl(e.rowDrag),this.includeDndSource=this.isIncludeControl(e.dndSource),this.comp.setIncludeSelection(this.includeSelection),this.comp.setIncludeDndSource(this.includeDndSource),this.comp.setIncludeRowDrag(this.includeRowDrag)}isForceWrapper(){return this.beans.gos.get("enableCellTextSelection")||this.column.isAutoHeight()}isIncludeControl(e,t=!1){return(this.rowNode.rowPinned==null||t&&ka(this.rowNode))&&!!e}isCheckboxSelection(e){const{rowSelection:t,groupDisplayType:o}=this.beans.gridOptions,s=ol(t),i=Zi(this.column);return o==="custom"&&s!=="selectionColumn"&&i?!1:e.checkboxSelection||i&&typeof t=="object"&&tl(t)}refreshShouldDestroy(){const e=this.column.getColDef(),t=this.includeSelection!=this.isIncludeControl(this.isCheckboxSelection(e),!0),o=this.includeRowDrag!=this.isIncludeControl(e.rowDrag),s=this.includeDndSource!=this.isIncludeControl(e.dndSource),i=this.isAutoHeight!=this.column.isAutoHeight();return t||o||s||i}onPopupEditorClosed(){var e;this.editing&&((e=this.beans.editSvc)==null||e.stopRowOrCellEdit(this))}stopEditing(e=!1){var t;return((t=this.beans.editSvc)==null?void 0:t.stopEditing(this,e))??!1}createCellRendererParams(){const{value:e,valueFormatted:t,column:o,rowNode:s,comp:i,eGui:n,beans:{valueSvc:r,gos:l}}=this;return A(l,{value:e,valueFormatted:t,getValue:()=>r.getValueForDisplay(o,s).value,setValue:d=>r.setValue(s,o,d),formatValue:this.formatValue.bind(this),data:s.data,node:s,pinned:o.getPinned(),colDef:o.getColDef(),column:o,refreshCell:this.refreshCell.bind(this),eGridCell:n,eParentOfValue:i.getParentOfValue(),registerRowDragger:(d,c,h,u)=>this.registerRowDragger(d,c,u),setTooltip:(d,c)=>{var h;l.assertModuleRegistered("Tooltip",3),this.tooltipFeature&&this.disableTooltipFeature(),this.enableTooltipFeature(d,c),(h=this.tooltipFeature)==null||h.refreshTooltip()}})}onCellChanged(e){e.column===this.column&&this.refreshCell({})}refreshOrDestroyCell(e){var t;this.refreshShouldDestroy()?(t=this.rowCtrl)==null||t.recreateCell(this):this.refreshCell(e)}refreshCell(e){var d,c,h,u,g,p;if(this.suppressRefreshCell||this.editing)return;const t=this.column.getColDef(),o=e!=null&&!!e.newData,s=e!=null&&!!e.suppressFlash,i=t.field==null&&t.valueGetter==null&&t.showRowGroup==null,n=e&&e.forceRefresh||i||o,r=!!this.comp,l=this.updateAndFormatValue(r),a=n||l;if(r){if(a){this.showValue(o,!1);const f=(d=this.beans.filterManager)==null?void 0:d.isSuppressFlashingCellsBecauseFiltering();!s&&!f&&t.enableCellChangeFlash&&((c=this.beans.cellFlashSvc)==null||c.flashCell(this)),(h=this.customStyleFeature)==null||h.applyUserStyles(),(u=this.customStyleFeature)==null||u.applyClassesFromColDef()}(g=this.tooltipFeature)==null||g.refreshTooltip(),(p=this.customStyleFeature)==null||p.applyCellClassRules()}}isCellEditable(){return this.column.isCellEditable(this.rowNode)}formatValue(e){return this.callValueFormatter(e)??e}callValueFormatter(e){return this.beans.valueSvc.formatValue(this.column,this.rowNode,e)}updateAndFormatValue(e){const t=this.value,o=this.valueFormatted,{value:s,valueFormatted:i}=this.beans.valueSvc.getValueForDisplay(this.column,this.rowNode,!0);return this.value=s,this.valueFormatted=i,e?!this.valuesAreEqual(t,this.value)||this.valueFormatted!=o:!0}valuesAreEqual(e,t){const o=this.column.getColDef();return o.equals?o.equals(e,t):e===t}addDomData(e){const t=this.eGui;Be(this.beans.gos,t,Bt,this),e.addDestroyFunc(()=>Be(this.beans.gos,t,Bt,null))}createEvent(e,t){const{rowNode:o,column:s,value:i,beans:n}=this;return A(n.gos,{type:t,node:o,data:o.data,value:i,column:s,colDef:s.getColDef(),rowPinned:o.rowPinned,event:e,rowIndex:o.rowIndex})}processCharacter(e){var t;(t=this.keyboardListener)==null||t.processCharacter(e)}onKeyDown(e){var t;(t=this.keyboardListener)==null||t.onKeyDown(e)}onMouseEvent(e,t){var o;(o=this.mouseListener)==null||o.onMouseEvent(e,t)}getColSpanningList(){return this.positionFeature.getColSpanningList()}onLeftChanged(){var e;this.comp&&((e=this.positionFeature)==null||e.onLeftChanged())}onDisplayedColumnsChanged(){this.eGui&&(this.refreshAriaColIndex(),this.refreshFirstAndLastStyles())}refreshFirstAndLastStyles(){const{comp:e,column:t,beans:o}=this;un(e,t,o.visibleCols)}refreshAriaColIndex(){const e=this.beans.visibleCols.getAriaColIndex(this.column);gi(this.eGui,e)}onWidthChanged(){var e;return(e=this.positionFeature)==null?void 0:e.onWidthChanged()}getRowPosition(){const{rowIndex:e,rowPinned:t}=this.cellPosition;return{rowIndex:e,rowPinned:t}}updateRangeBordersIfRangeCount(){var e;this.comp&&((e=this.rangeFeature)==null||e.updateRangeBordersIfRangeCount())}onCellSelectionChanged(){var e;this.comp&&((e=this.rangeFeature)==null||e.onCellSelectionChanged())}isRangeSelectionEnabled(){return this.rangeFeature!=null}focusCell(e=!1){this.beans.focusSvc.setFocusedCell({...this.getFocusedCellPosition(),forceBrowserFocus:e})}restoreFocus(e=!1){if(!this.comp||this.editing||!this.isCellFocused()||!this.beans.focusSvc.shouldTakeFocus())return;const t=()=>{if(!this.isAlive())return;const o=this.comp.getFocusableElement();this.isCellFocused()&&o.focus({preventScroll:!0})};if(e){setTimeout(t,0);return}t()}onRowIndexChanged(){var e,t;this.createCellPosition(),this.onCellFocused(),this.restoreFocus(),(e=this.rangeFeature)==null||e.onCellSelectionChanged(),(t=this.rowResizeFeature)==null||t.refreshRowResizer()}onSuppressCellFocusChanged(e){const t=this.eGui;t&&(Qe(this.column)&&(e=!0),Le(t,"tabindex",e?void 0:-1))}onFirstRightPinnedChanged(){if(!this.comp)return;const e=this.column.isFirstRightPinned();this.comp.toggleCss(Ua,e)}onLastLeftPinnedChanged(){if(!this.comp)return;const e=this.column.isLastLeftPinned();this.comp.toggleCss(Ka,e)}checkCellFocused(){return this.beans.focusSvc.isCellFocused(this.cellPosition)}isCellFocused(){const e=this.checkCellFocused();return this.hasBeenFocused||(this.hasBeenFocused=e),e}setupFocus(){this.restoreFocus(!0),this.onCellFocused(this.focusEventWhileNotReady??void 0)}onCellFocused(e){var i;const{beans:t}=this;if(Uo(t))return;if(!this.comp){e&&(this.focusEventWhileNotReady=e);return}const o=this.isCellFocused();if(this.comp.toggleCss(_a,o),o&&e&&e.forceBrowserFocus){let n=this.comp.getFocusableElement();if(this.editing){const r=Ae(n,null,!0);r.length&&(n=r[0])}n.focus({preventScroll:!!e.preventScrollOnBrowserFocus})}const s=t.gos.get("editType")==="fullRow";!o&&!s&&this.editing&&((i=t.editSvc)==null||i.stopRowOrCellEdit(this)),o&&this.rowCtrl.announceDescription()}createCellPosition(){const{rowIndex:e,rowPinned:t}=this.rowNode;this.cellPosition={rowIndex:e,rowPinned:Re(t),column:this.column}}setInlineEditingCss(){var e;(e=this.beans.editSvc)==null||e.setInlineEditingCss(this.rowCtrl)}applyStaticCssClasses(){const{comp:e}=this;e.toggleCss(Va,!0),e.toggleCss(ja,!0);const t=this.column.isAutoHeight()==!0;e.toggleCss(Na,t),e.toggleCss(za,!t)}onColumnHover(){var e;(e=this.beans.colHover)==null||e.onCellColumnHover(this.column,this.comp)}onColDefChanged(){var e;this.comp&&(this.column.isTooltipEnabled()?(this.disableTooltipFeature(),this.enableTooltipFeature()):this.disableTooltipFeature(),this.setWrapText(),this.editing?(e=this.beans.editSvc)==null||e.handleColDefChanged(this):this.refreshOrDestroyCell({forceRefresh:!0,suppressFlash:!0}))}setWrapText(){const e=this.column.getColDef().wrapText==!0;this.comp.toggleCss($a,e)}dispatchCellContextMenuEvent(e){const t=this.column.getColDef(),o=this.createEvent(e,"cellContextMenu"),{beans:s}=this;s.eventSvc.dispatchEvent(o),t.onCellContextMenu&&window.setTimeout(()=>{s.frameworkOverrides.wrapOutgoing(()=>{t.onCellContextMenu(o)})},0)}getCellRenderer(){var e;return((e=this.comp)==null?void 0:e.getCellRenderer())??null}destroy(){this.onCompAttachedFuncs=[],this.onEditorAttachedFuncs=[],this.isCellFocused()&&this.hasBrowserFocus()&&this.beans.focusSvc.attemptToRecoverFocus(),super.destroy()}hasBrowserFocus(){var e;return((e=this.eGui)==null?void 0:e.contains(z(this.beans)))??!1}createSelectionCheckbox(){var t;const e=(t=this.beans.selectionSvc)==null?void 0:t.createCheckboxSelectionComponent();if(e)return this.beans.context.createBean(e),e.init({rowNode:this.rowNode,column:this.column}),e}createDndSource(){const e=this.beans.registry.createDynamicBean("dndSourceComp",!1,this.rowNode,this.column,this.eGui);return e&&this.beans.context.createBean(e),e}registerRowDragger(e,t,o){if(this.customRowDragComp){this.customRowDragComp.setDragElement(e,t);return}const s=this.createRowDragComp(e,t,o);s&&(this.customRowDragComp=s,this.addDestroyFunc(()=>{this.beans.context.destroyBean(s),this.customRowDragComp=null}))}createRowDragComp(e,t,o){var i;const s=(i=this.beans.rowDragSvc)==null?void 0:i.createRowDragCompForCell(this.rowNode,this.column,()=>this.value,e,t,o);if(s)return this.beans.context.createBean(s),s}cellEditorAttached(){this.onEditorAttachedFuncs.forEach(e=>e()),this.onEditorAttachedFuncs=[]}setFocusedCellPosition(e){}getFocusedCellPosition(){return this.cellPosition}refreshAriaRowIndex(){}getRootElement(){return this.eGui}},pn="__ag_grid_instance";function fn(e,t){t[pn]=e.gridInstanceId}function tt(e,t){return Za(e,t.target)}function Za(e,t){let o=t;for(;o;){const s=o[pn];if(k(s))return s===e.gridInstanceId;o=o.parentElement}return!1}function Ya(e,t){var o;return((o=gn(e,t.target))==null?void 0:o.getFocusedCellPosition())??null}var Qa=class extends v{constructor(){super(...arguments),this.beanName="dragAndDrop",this.dragSourceAndParamsList=[],this.dropTargets=[]}wireBeans(e){this.ctrlsSvc=e.ctrlsSvc,this.dragSvc=e.dragSvc,this.environment=e.environment,this.userCompFactory=e.userCompFactory}addDragSource(e,t=!1){const o={eElement:e.eElement,dragStartPixels:e.dragStartPixels,onDragStart:this.onDragStart.bind(this,e),onDragStop:this.onDragStop.bind(this),onDragging:this.onDragging.bind(this),onDragCancel:this.onDragCancel.bind(this),includeTouch:t};this.dragSourceAndParamsList.push({params:o,dragSource:e}),this.dragSvc.addDragSource(o)}getDragAndDropImageComponent(){const{dragAndDropImageComp:e}=this;return!e||!e.comp?null:e.comp}removeDragSource(e){const{dragSourceAndParamsList:t,dragSvc:o}=this,s=t.find(i=>i.dragSource===e);s&&(o.removeDragSource(s.params),ye(t,s))}destroy(){const{dragSourceAndParamsList:e,dragSvc:t,dropTargets:o}=this;e.forEach(s=>t.removeDragSource(s.params)),e.length=0,o.length=0,this.clearDragAndDropProperties(),super.destroy()}nudge(){this.dragging&&this.onDragging(this.eventLastTime,!0)}onDragStart(e,t){var o;this.dragging=!0,this.dragSource=e,this.eventLastTime=t,this.dragItem=e.getDragItem(),(o=e.onDragStarted)==null||o.call(e),this.createDragAndDropImageComponent()}onDragStop(e){var o,s;(s=(o=this.dragSource)==null?void 0:o.onDragStopped)==null||s.call(o);const{lastDropTarget:t}=this;if(t!=null&&t.onDragStop){const i=this.createDropTargetEvent(t,e,null,null,!1);t.onDragStop(i)}this.clearDragAndDropProperties()}onDragCancel(){var o;const{dragSource:e,lastDropTarget:t}=this;(o=e==null?void 0:e.onDragCancelled)==null||o.call(e),t!=null&&t.onDragCancel&&t.onDragCancel(this.createDropTargetEvent(t,this.eventLastTime,null,null,!1)),this.clearDragAndDropProperties()}clearDragAndDropProperties(){this.eventLastTime=null,this.dragging=!1,this.lastDropTarget=void 0,this.dragItem=null,this.dragSource=null,this.removeDragAndDropImageComponent()}onDragging(e,t=!1){var c,h;const o=this.getHorizontalDirection(e),s=this.getVerticalDirection(e);this.eventLastTime=e,this.positionDragAndDropImageComp(e);const i=this.dropTargets.filter(u=>this.isMouseOnDropTarget(e,u)),n=this.findCurrentDropTarget(e,i),{lastDropTarget:r,dragSource:l,dragAndDropImageComp:a,dragItem:d}=this;if(n!==r){if(this.leaveLastTargetIfExists(e,o,s,t),r!==null&&n===null&&((c=l==null?void 0:l.onGridExit)==null||c.call(l,d)),r===null&&n!==null&&((h=l==null?void 0:l.onGridEnter)==null||h.call(l,d)),this.enterDragTargetIfExists(n,e,o,s,t),n&&a){const{comp:u,promise:g}=a;u?u.setIcon(n.getIconName?n.getIconName():null,!1):g.then(p=>{p&&p.setIcon(n.getIconName?n.getIconName():null,!1)})}this.lastDropTarget=n}else if(n&&n.onDragging){const u=this.createDropTargetEvent(n,e,o,s,t);n.onDragging(u)}}getAllContainersFromDropTarget(e){const t=e.getSecondaryContainers?e.getSecondaryContainers():null,o=[[e.getContainer()]];return t?o.concat(t):o}isMouseOnDropTarget(e,t){const o=this.getAllContainersFromDropTarget(t);let s=!1;const i=(l,a)=>{for(const d of a){const{width:c,height:h,left:u,right:g,top:p,bottom:f}=d.getBoundingClientRect();if(c===0||h===0)return!1;const C=l.clientX>=u&&l.clientX=p&&l.clientYa).indexOf(n)!==-1)return r;return null}enterDragTargetIfExists(e,t,o,s,i){if(e&&e.onDragEnter){const n=this.createDropTargetEvent(e,t,o,s,i);e.onDragEnter(n)}}leaveLastTargetIfExists(e,t,o,s){const{lastDropTarget:i}=this;if(!i)return;if(i.onDragLeave){const r=this.createDropTargetEvent(i,e,t,o,s);i.onDragLeave(r)}const n=this.getDragAndDropImageComponent();n&&n.setIcon(null,!1)}addDropTarget(e){this.dropTargets.push(e)}removeDropTarget(e){this.dropTargets=this.dropTargets.filter(t=>t.getContainer()!==e.getContainer())}hasExternalDropZones(){return this.dropTargets.some(e=>e.external)}findExternalZone(e){return this.dropTargets.filter(o=>o.external).find(o=>o.getContainer()===e.getContainer())||null}isDropZoneWithinThisGrid(e){const o=this.ctrlsSvc.getGridBodyCtrl().eGridBody,{dropZoneTarget:s}=e;return o.contains(s)}getHorizontalDirection(e){var s;const t=(s=this.eventLastTime)==null?void 0:s.clientX,o=e.clientX;return t===o?null:t>o?"left":"right"}getVerticalDirection(e){var s;const t=(s=this.eventLastTime)==null?void 0:s.clientY,o=e.clientY;return t===o?null:t>o?"up":"down"}createDropTargetEvent(e,t,o,s,i){const n=e.getContainer(),r=n.getBoundingClientRect(),{dragItem:l,dragSource:a,gos:d}=this,c=t.clientX-r.left,h=t.clientY-r.top;return A(d,{event:t,x:c,y:h,vDirection:s,hDirection:o,dragSource:a,fromNudge:i,dragItem:l,dropZoneTarget:n})}positionDragAndDropImageComp(e){const t=this.getDragAndDropImageComponent();t&&Xr(t.getGui(),e,this.beans)}removeDragAndDropImageComponent(){var t;const{dragAndDropImageComp:e}=this;if(e){const{comp:o}=e;if(o){const s=o.getGui();(t=this.dragAndDropImageParent)==null||t.removeChild(s),this.destroyBean(o)}}this.dragAndDropImageComp=null}createDragAndDropImageComponent(){const{dragSource:e,gos:t,userCompFactory:o}=this;if(!e)return;const s=ia(o,A(t,{dragSource:e}));if(!s)return;const i=s.newAgStackInstance();this.dragAndDropImageComp={promise:i},i.then(n=>{!n||!this.isAlive()||(this.processDragAndDropImageComponent(n),this.dragAndDropImageComp.comp=n)})}processDragAndDropImageComponent(e){const{dragSource:t,environment:o}=this;if(!t)return;const s=e.getGui();s.style.setProperty("position","absolute"),s.style.setProperty("z-index","9999"),fn(this.gos,s),o.applyThemeClasses(s),e.setIcon(null,!1);let{dragItemName:i}=t;typeof i=="function"&&(i=i()),e.setLabel(i||""),s.style.top="20px",s.style.left="20px";const n=No(this.beans);this.dragAndDropImageParent=n,n?n.appendChild(s):I(54)}registerGridDropTarget(e,t){const o={getContainer:e,isInterestedIn:s=>s===1||s===0,getIconName:()=>"notAllowed"};this.addDropTarget(o),t.addDestroyFunc(()=>this.removeDropTarget(o))}};function Xa(e,t){const o=e.column===t.column,s=e.rowPinned===t.rowPinned,i=e.rowIndex===t.rowIndex;return o&&s&&i}function Ja(e,t){switch(e.rowPinned){case"top":if(t.rowPinned!=="top")return!0;break;case"bottom":if(t.rowPinned!=="bottom")return!1;break;default:if(k(t.rowPinned))return t.rowPinned!=="top";break}return e.rowIndexthis.nodeIdsToColumns[o.id][s.getId()]=!0),o=o.parent}linkPathItems(e,t){let o=e;for(let s=0;so[i.getId()])}getNotValueColumnsForNode(e,t){if(!this.keepingColumns)return null;const o=this.nodeIdsToColumns[e.id];return t.filter(i=>!o[i.getId()])}};function vn(e,t,o){if(o===0)return!1;const s=Math.abs(e.clientX-t.clientX),i=Math.abs(e.clientY-t.clientY);return Math.max(s,i)<=o}var id=class extends v{constructor(){super(...arguments),this.beanName="dragSvc",this.dragEndFunctions=[],this.dragSources=[]}destroy(){const{dragSources:e}=this;e.forEach(this.removeListener.bind(this)),e.length=0,super.destroy()}removeListener(e){const t=e.dragSource.eElement,o=e.mouseDownListener;if(t.removeEventListener("mousedown",o),e.touchEnabled){const s=e.touchStartListener;t.removeEventListener("touchstart",s,{passive:!0})}}removeDragSource(e){const{dragSources:t}=this,o=t.find(s=>s.dragSource===e);o&&(this.removeListener(o),ye(t,o))}addDragSource(e){const t=this.onMouseDown.bind(this,e),{eElement:o,includeTouch:s,stopPropagationForTouch:i}=e;o.addEventListener("mousedown",t);let n=null;const r=this.gos.get("suppressTouch");s&&!r&&(n=l=>{Go(l.target)||(i&&l.stopPropagation(),this.onTouchStart(e,l))},o.addEventListener("touchstart",n,{passive:!1})),this.dragSources.push({dragSource:e,mouseDownListener:t,touchStartListener:n,touchEnabled:!!s})}onTouchStart(e,t){this.currentDragParams=e,this.dragging=!1;const o=t.touches[0];this.touchLastTime=o,this.touchStart=o;const s=a=>this.onTouchMove(a,e.eElement),i=a=>this.onTouchUp(a,e.eElement),n=a=>{a.cancelable&&a.preventDefault()},r=t.target,l=[{target:Je(this.beans),type:"touchmove",listener:n,options:{passive:!1}},{target:r,type:"touchmove",listener:s,options:{passive:!0}},{target:r,type:"touchend",listener:i,options:{passive:!0}},{target:r,type:"touchcancel",listener:i,options:{passive:!0}}];this.addTemporaryEvents(l),e.dragStartPixels===0&&this.onCommonMove(o,this.touchStart,e.eElement)}onMouseDown(e,t){const o=t;if(e.skipMouseEvent&&e.skipMouseEvent(t)||o._alreadyProcessedByDragService||(o._alreadyProcessedByDragService=!0,t.button!==0))return;this.shouldPreventMouseEvent(t)&&t.preventDefault(),this.currentDragParams=e,this.dragging=!1,this.mouseStartEvent=t,this.startTarget=t.target;const s=d=>this.onMouseMove(d,e.eElement),i=d=>this.onMouseUp(d,e.eElement),n=d=>d.preventDefault(),r=d=>{d.key===m.ESCAPE&&this.cancelDrag(e.eElement)},l=Je(this.beans),a=[{target:l,type:"mousemove",listener:s},{target:l,type:"mouseup",listener:i},{target:l,type:"contextmenu",listener:n},{target:l,type:"keydown",listener:r}];this.addTemporaryEvents(a),e.dragStartPixels===0&&this.onMouseMove(t,e.eElement)}addTemporaryEvents(e){e.forEach(t=>{const{target:o,type:s,listener:i,options:n}=t;o.addEventListener(s,i,n)}),this.dragEndFunctions.push(()=>{e.forEach(t=>{const{target:o,type:s,listener:i,options:n}=t;o.removeEventListener(s,i,n)})})}isEventNearStartEvent(e,t){const{dragStartPixels:o}=this.currentDragParams,s=k(o)?o:4;return vn(e,t,s)}getFirstActiveTouch(e){for(let t=0;t{const r=n.target,l=r==null?void 0:r.tagName.toLocaleLowerCase();return!!(l!=null&&l.match("^a$|textarea|input|select|button"))};return o&&s&&e.cancelable&&tt(t,e)&&!i(e)}onTouchUp(e,t){let o=this.getFirstActiveTouch(e.changedTouches);o||(o=this.touchLastTime),this.onUpCommon(o,t)}onMouseUp(e,t){this.onUpCommon(e,t)}onUpCommon(e,t){this.dragging&&(this.dragging=!1,this.currentDragParams.onDragStop(e),this.eventSvc.dispatchEvent({type:"dragStopped",target:t})),this.resetDragProperties()}cancelDrag(e){var t,o;this.eventSvc.dispatchEvent({type:"dragCancelled",target:e}),(o=(t=this.currentDragParams)==null?void 0:t.onDragCancel)==null||o.call(t),this.resetDragProperties()}resetDragProperties(){this.mouseStartEvent=null,this.startTarget=null,this.touchStart=null,this.touchLastTime=null,this.currentDragParams=null;const{dragEndFunctions:e}=this;e.forEach(t=>t()),e.length=0}};function wn(e,t){return e+"_"+t}function O(e){return e instanceof yn}var yn=class extends v{constructor(e,t,o,s){super(),this.providedColumnGroup=e,this.groupId=t,this.partId=o,this.pinned=s,this.isColumn=!1,this.displayedChildren=[],this.autoHeaderHeight=null,this.parent=null}reset(){this.parent=null,this.children=null,this.displayedChildren=null}getParent(){return this.parent}getUniqueId(){return wn(this.groupId,this.partId)}isEmptyGroup(){return this.displayedChildren.length===0}isMoving(){const e=this.getProvidedColumnGroup().getLeafColumns();return!e||e.length===0?!1:e.every(t=>t.isMoving())}checkLeft(){if(this.displayedChildren.forEach(e=>{O(e)&&e.checkLeft()}),this.displayedChildren.length>0)if(this.gos.get("enableRtl")){const t=H(this.displayedChildren).getLeft();this.setLeft(t)}else{const e=this.displayedChildren[0].getLeft();this.setLeft(e)}else this.setLeft(null)}getLeft(){return this.left}getOldLeft(){return this.oldLeft}setLeft(e){this.oldLeft=this.left,this.left!==e&&(this.left=e,this.dispatchLocalEvent({type:"leftChanged"}))}getPinned(){return this.pinned}getGroupId(){return this.groupId}getPartId(){return this.partId}getActualWidth(){var t;let e=0;return(t=this.displayedChildren)==null||t.forEach(o=>{e+=o.getActualWidth()}),e}isResizable(){if(!this.displayedChildren)return!1;let e=!1;return this.displayedChildren.forEach(t=>{t.isResizable()&&(e=!0)}),e}getMinWidth(){let e=0;return this.displayedChildren.forEach(t=>{e+=t.getMinWidth()}),e}addChild(e){this.children||(this.children=[]),this.children.push(e)}getDisplayedChildren(){return this.displayedChildren}getLeafColumns(){const e=[];return this.addLeafColumns(e),e}getDisplayedLeafColumns(){const e=[];return this.addDisplayedLeafColumns(e),e}getDefinition(){return this.providedColumnGroup.getColGroupDef()}getColGroupDef(){return this.providedColumnGroup.getColGroupDef()}isPadding(){return this.providedColumnGroup.isPadding()}isExpandable(){return this.providedColumnGroup.isExpandable()}isExpanded(){return this.providedColumnGroup.isExpanded()}setExpanded(e){this.providedColumnGroup.setExpanded(e)}isAutoHeaderHeight(){var e;return!!((e=this.getColGroupDef())!=null&&e.autoHeaderHeight)}getAutoHeaderHeight(){return this.autoHeaderHeight}setAutoHeaderHeight(e){const t=e!==this.autoHeaderHeight;return this.autoHeaderHeight=e,t}addDisplayedLeafColumns(e){this.displayedChildren.forEach(t=>{we(t)?e.push(t):O(t)&&t.addDisplayedLeafColumns(e)})}addLeafColumns(e){this.children.forEach(t=>{we(t)?e.push(t):O(t)&&t.addLeafColumns(e)})}getChildren(){return this.children}getColumnGroupShow(){return this.providedColumnGroup.getColumnGroupShow()}getProvidedColumnGroup(){return this.providedColumnGroup}getPaddingLevel(){const e=this.getParent();return!this.isPadding()||!e||!e.isPadding()?0:1+e.getPaddingLevel()}calculateDisplayedColumns(){this.displayedChildren=[];let e=this;for(;e!=null&&e.isPadding();)e=e.getParent();if(!(e?e.getProvidedColumnGroup().isExpandable():!1)){this.displayedChildren=this.children,this.dispatchLocalEvent({type:"displayedChildrenChanged"});return}this.children.forEach(o=>{if(O(o)&&(!o.displayedChildren||!o.displayedChildren.length))return;switch(o.getColumnGroupShow()){case"open":e.getProvidedColumnGroup().isExpanded()&&this.displayedChildren.push(o);break;case"closed":e.getProvidedColumnGroup().isExpanded()||this.displayedChildren.push(o);break;default:this.displayedChildren.push(o);break}}),this.dispatchLocalEvent({type:"displayedChildrenChanged"})}},nd="ag-focus-managed",$t=class extends v{constructor(e,t={}){super(),this.eFocusable=e,this.callbacks=t,this.callbacks={shouldStopEventPropagation:()=>!1,onTabKeyDown:o=>{if(o.defaultPrevented)return;const s=jt(this.beans,this.eFocusable,!1,o.shiftKey);s&&(s.focus(),o.preventDefault())},...t}}postConstruct(){const{eFocusable:e,callbacks:{onFocusIn:t,onFocusOut:o}}=this;e.classList.add(nd),this.addKeyDownListeners(e),t&&this.addManagedElementListeners(e,{focusin:t}),o&&this.addManagedElementListeners(e,{focusout:o})}addKeyDownListeners(e){this.addManagedElementListeners(e,{keydown:t=>{if(t.defaultPrevented||ve(t))return;const{callbacks:o}=this;if(o.shouldStopEventPropagation(t)){Tt(t);return}t.key===m.TAB?o.onTabKeyDown(t):o.handleKeyDown&&o.handleKeyDown(t)}})}},ee={AUTO_HEIGHT:"ag-layout-auto-height",NORMAL:"ag-layout-normal",PRINT:"ag-layout-print"},Ko=class extends v{constructor(e){super(),this.view=e}postConstruct(){this.addManagedPropertyListener("domLayout",this.updateLayoutClasses.bind(this)),this.updateLayoutClasses()}updateLayoutClasses(){const e=this.gos.get("domLayout"),t={autoHeight:e==="autoHeight",normal:e==="normal",print:e==="print"},o=t.autoHeight?ee.AUTO_HEIGHT:t.print?ee.PRINT:ee.NORMAL;this.view.updateLayoutClasses(o,t)}},ge="Viewport",Ds="fakeVScrollComp",Ps=["fakeHScrollComp","centerHeader","topCenter","bottomCenter","stickyTopCenter","stickyBottomCenter"],Es=100,ro=150,rd=class extends v{constructor(e){super(),this.clearRetryListenerFncs=[],this.lastScrollSource=[null,null],this.scrollLeft=-1,this.nextScrollTop=-1,this.scrollTop=-1,this.lastOffsetHeight=-1,this.lastScrollTop=-1,this.lastIsHorizontalScrollShowing=!1,this.scrollTimer=0,this.isVerticalPositionInvalidated=!0,this.isHorizontalPositionInvalidated=!0,this.eBodyViewport=e,this.resetLastHScrollDebounced=je(this,()=>this.lastScrollSource[1]=null,ro),this.resetLastVScrollDebounced=je(this,()=>this.lastScrollSource[0]=null,ro)}wireBeans(e){this.ctrlsSvc=e.ctrlsSvc,this.animationFrameSvc=e.animationFrameSvc,this.visibleCols=e.visibleCols}destroy(){super.destroy(),this.clearRetryListenerFncs=[],window.clearTimeout(this.scrollTimer)}postConstruct(){this.enableRtl=this.gos.get("enableRtl");const e=this.invalidateVerticalScroll.bind(this),t=this.invalidateHorizontalScroll.bind(this);this.addManagedEventListeners({displayedColumnsWidthChanged:this.onDisplayedColumnsWidthChanged.bind(this),gridSizeChanged:e,scrollGapChanged:t}),this.addManagedElementListeners(this.eBodyViewport,{scroll:e}),this.ctrlsSvc.whenReady(this,o=>{this.centerRowsCtrl=o.center,this.onDisplayedColumnsWidthChanged(),this.addScrollListener()})}invalidateHorizontalScroll(){this.isHorizontalPositionInvalidated=!0}invalidateVerticalScroll(){this.isVerticalPositionInvalidated=!0}addScrollListener(){this.addHorizontalScrollListeners(),this.addVerticalScrollListeners()}addHorizontalScrollListeners(){this.addManagedElementListeners(this.centerRowsCtrl.eViewport,{scroll:this.onHScroll.bind(this,ge)});for(const e of Ps){const t=this.ctrlsSvc.get(e);this.registerScrollPartner(t,this.onHScroll.bind(this,e))}}addVerticalScrollListeners(){const e=this.ctrlsSvc.get("fakeVScrollComp"),t=this.gos.get("debounceVerticalScrollbar"),o=t?je(this,this.onVScroll.bind(this,ge),Es):this.onVScroll.bind(this,ge),s=t?je(this,this.onVScroll.bind(this,Ds),Es):this.onVScroll.bind(this,Ds);this.addManagedElementListeners(this.eBodyViewport,{scroll:o}),this.registerScrollPartner(e,s)}registerScrollPartner(e,t){e.onScrollCallback(t)}onDisplayedColumnsWidthChanged(){this.enableRtl&&this.horizontallyScrollHeaderCenterAndFloatingCenter()}horizontallyScrollHeaderCenterAndFloatingCenter(e){this.centerRowsCtrl!=null&&(e===void 0&&(e=this.centerRowsCtrl.getCenterViewportScrollLeft()),this.setScrollLeftForAllContainersExceptCurrent(Math.abs(e)))}setScrollLeftForAllContainersExceptCurrent(e){for(const t of[...Ps,ge]){if(this.lastScrollSource[1]===t)continue;const o=this.getViewportForSource(t);Pt(o,e,this.enableRtl)}}getViewportForSource(e){return e===ge?this.centerRowsCtrl.eViewport:this.ctrlsSvc.get(e).eViewport}isControllingScroll(e,t){return this.lastScrollSource[t]==null?(t===0?this.lastScrollSource[0]=e:this.lastScrollSource[1]=e,!0):this.lastScrollSource[t]===e}onHScroll(e){if(!this.isControllingScroll(e,1))return;const t=this.centerRowsCtrl.eViewport,{scrollLeft:o}=t;if(this.shouldBlockScrollUpdate(1,o,!0))return;const s=Dt(this.getViewportForSource(e),this.enableRtl);this.doHorizontalScroll(s),this.resetLastHScrollDebounced()}onVScroll(e){if(!this.isControllingScroll(e,0))return;let t;if(e===ge?t=this.eBodyViewport.scrollTop:t=this.ctrlsSvc.get("fakeVScrollComp").getScrollPosition(),this.shouldBlockScrollUpdate(0,t,!0))return;const{animationFrameSvc:o}=this;o==null||o.setScrollTop(t),this.nextScrollTop=t,e===ge?this.ctrlsSvc.get("fakeVScrollComp").setScrollPosition(t):this.eBodyViewport.scrollTop=t,o!=null&&o.active?o.schedule():this.scrollGridIfNeeded(!0),this.resetLastVScrollDebounced()}doHorizontalScroll(e){const t=this.ctrlsSvc.get("fakeHScrollComp").getScrollPosition();this.scrollLeft===e&&e===t||(this.scrollLeft=e,this.fireScrollEvent(1),this.horizontallyScrollHeaderCenterAndFloatingCenter(e),this.centerRowsCtrl.onHorizontalViewportChanged(!0))}fireScrollEvent(e){const t={type:"bodyScroll",direction:e===1?"horizontal":"vertical",left:this.scrollLeft,top:this.scrollTop};this.eventSvc.dispatchEvent(t),window.clearTimeout(this.scrollTimer),this.scrollTimer=window.setTimeout(()=>{this.scrollTimer=0,this.eventSvc.dispatchEvent({...t,type:"bodyScrollEnd"})},ro)}shouldBlockScrollUpdate(e,t,o=!1){return o&&!Ze()?!1:e===0?this.shouldBlockVerticalScroll(t):this.shouldBlockHorizontalScroll(t)}shouldBlockVerticalScroll(e){const t=yi(this.eBodyViewport),{scrollHeight:o}=this.eBodyViewport;return e<0||e+t>o}shouldBlockHorizontalScroll(e){const t=this.centerRowsCtrl.getCenterWidth(),{scrollWidth:o}=this.centerRowsCtrl.eViewport;if(this.enableRtl){if(e>0)return!0}else if(e<0)return!0;return Math.abs(e)+t>o}redrawRowsAfterScroll(){this.fireScrollEvent(0)}checkScrollLeft(){this.scrollLeft!==this.centerRowsCtrl.getCenterViewportScrollLeft()&&this.onHScroll(ge)}scrollGridIfNeeded(e=!1){const t=this.scrollTop!=this.nextScrollTop;return t&&(this.scrollTop=this.nextScrollTop,e&&this.invalidateVerticalScroll(),this.redrawRowsAfterScroll()),t}setHorizontalScrollPosition(e,t=!1){const s=this.centerRowsCtrl.eViewport.scrollWidth-this.centerRowsCtrl.getCenterWidth();!t&&this.shouldBlockScrollUpdate(1,e)&&(this.enableRtl?e=e>0?0:s:e=Math.min(Math.max(e,0),s)),Pt(this.centerRowsCtrl.eViewport,Math.abs(e),this.enableRtl),this.doHorizontalScroll(e)}setVerticalScrollPosition(e){this.invalidateVerticalScroll(),this.eBodyViewport.scrollTop=e}getVScrollPosition(){if(!this.isVerticalPositionInvalidated){const{lastOffsetHeight:o,lastScrollTop:s}=this;return{top:s,bottom:s+o}}this.isVerticalPositionInvalidated=!1;const{scrollTop:e,offsetHeight:t}=this.eBodyViewport;return this.lastScrollTop=e,this.lastOffsetHeight=t,{top:e,bottom:e+t}}getApproximateVScollPosition(){return this.lastScrollTop>=0&&this.lastOffsetHeight>=0?{top:this.scrollTop,bottom:this.scrollTop+this.lastOffsetHeight}:this.getVScrollPosition()}getHScrollPosition(){return this.centerRowsCtrl.getHScrollPosition()}isHorizontalScrollShowing(){return this.isHorizontalPositionInvalidated&&(this.lastIsHorizontalScrollShowing=this.centerRowsCtrl.isHorizontalScrollShowing(),this.isHorizontalPositionInvalidated=!1),this.lastIsHorizontalScrollShowing}scrollHorizontally(e){const t=this.centerRowsCtrl.eViewport.scrollLeft;return this.setHorizontalScrollPosition(t+e),this.centerRowsCtrl.eViewport.scrollLeft-t}scrollToTop(){this.eBodyViewport.scrollTop=0}ensureNodeVisible(e,t=null){const{rowModel:o}=this.beans,s=o.getRowCount();let i=-1;for(let n=0;n=0&&this.ensureIndexVisible(i,t)}ensureIndexVisible(e,t,o=0){if($(this.gos,"print"))return;const{rowModel:s}=this.beans,i=s.getRowCount();if(typeof e!="number"||e<0||e>=i){I(88,{index:e});return}this.clearRetryListeners();const{frameworkOverrides:n,pageBounds:r,rowContainerHeight:l,rowRenderer:a}=this.beans;n.wrapIncoming(()=>{var p,f;const d=this.ctrlsSvc.getGridBodyCtrl(),c=s.getRow(e);let h,u,g=0;this.invalidateVerticalScroll();do{const{stickyTopHeight:C,stickyBottomHeight:y}=d,S=c.rowTop,w=c.rowHeight,R=r.getPixelOffset(),D=c.rowTop-R,b=D+c.rowHeight,P=this.getVScrollPosition(),L=l.divStretchOffset,F=P.top+L,T=P.bottom+L,M=T-F,B=l.getScrollPositionForPixel(D),_=l.getScrollPositionForPixel(b-M),X=Math.min((B+_)/2,D),re=F+C>D,lt=T-y{const y=this.getVScrollPosition().top;C!==y&&this.clearRetryListeners()},modelUpdated:()=>{this.clearRetryListeners(),!(e>=s.getRowCount())&&this.ensureIndexVisible(e,t,o+1)}})}})}clearRetryListeners(){this.clearRetryListenerFncs.forEach(e=>e()),this.clearRetryListenerFncs=[]}ensureColumnVisible(e,t="auto"){const{colModel:o,frameworkOverrides:s}=this.beans,i=o.getCol(e);if(!i||i.isPinned()||!this.visibleCols.isColDisplayed(i))return;const n=this.getPositionedHorizontalScroll(i,t);s.wrapIncoming(()=>{var r;n!==null&&this.centerRowsCtrl.setCenterViewportScrollLeft(n),this.centerRowsCtrl.onHorizontalViewportChanged(),(r=this.animationFrameSvc)==null||r.flushAllFrames()})}getPositionedHorizontalScroll(e,t){const{columnBeforeStart:o,columnAfterEnd:s}=this.isColumnOutsideViewport(e),i=this.centerRowsCtrl.getCenterWidth()i:os;return{columnBeforeStart:r,columnAfterEnd:l}}getColumnBounds(e){const t=this.enableRtl,o=this.visibleCols.bodyWidth,s=e.getActualWidth(),i=e.getLeft(),n=t?-1:1,r=t?o-i:i,l=r+s*n,a=r+s/2*n;return{colLeft:r,colMiddle:a,colRight:l}}getViewportBounds(){const e=this.centerRowsCtrl.getCenterWidth(),t=this.centerRowsCtrl.getCenterViewportScrollLeft(),o=t,s=e+t;return{start:o,end:s,width:e}}},jo=class extends v{constructor(e,t=!1){super(),this.callback=e,this.addSpacer=t}postConstruct(){const e=this.setWidth.bind(this);this.addManagedPropertyListener("domLayout",e),this.addManagedEventListeners({columnContainerWidthChanged:e,displayedColumnsChanged:e,leftPinnedWidthChanged:e}),this.addSpacer&&this.addManagedEventListeners({rightPinnedWidthChanged:e,scrollVisibilityChanged:e,scrollbarWidthChanged:e}),this.setWidth()}setWidth(){const e=$(this.gos,"print"),{visibleCols:t,scrollVisibleSvc:o}=this.beans,s=t.bodyWidth,i=t.getColsLeftWidth(),n=t.getDisplayedColumnsRightWidth();let r;e?r=s+i+n:(r=s,this.addSpacer&&(this.gos.get("enableRtl")?i:n)===0&&o.verticalScrollShowing&&(r+=o.getScrollbarWidth())),this.callback(r)}},ld=class extends v{constructor(e){super(),this.centerContainerCtrl=e}wireBeans(e){this.scrollVisibleSvc=e.scrollVisibleSvc}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>{this.gridBodyCtrl=e.gridBodyCtrl,this.listenForResize()}),this.addManagedEventListeners({scrollbarWidthChanged:this.onScrollbarWidthChanged.bind(this)}),this.addManagedPropertyListeners(["alwaysShowHorizontalScroll","alwaysShowVerticalScroll"],()=>{this.checkViewportAndScrolls()})}listenForResize(){const{beans:e,centerContainerCtrl:t,gridBodyCtrl:o}=this,s=()=>{be(e,()=>{this.onCenterViewportResized()})};t.registerViewportResizeListener(s),o.registerBodyViewportResizeListener(s)}onScrollbarWidthChanged(){this.checkViewportAndScrolls()}onCenterViewportResized(){if(this.scrollVisibleSvc.updateScrollGap(),this.centerContainerCtrl.isViewportInTheDOMTree()){const{pinnedCols:e,colFlex:t}=this.beans;e==null||e.keepPinnedColumnsNarrowerThanViewport(),this.checkViewportAndScrolls();const o=this.centerContainerCtrl.getCenterWidth();o!==this.centerWidth&&(this.centerWidth=o,t==null||t.refreshFlexedColumns({viewportWidth:this.centerWidth,updateBodyWidths:!0,fireResizedEvent:!0}))}else this.bodyHeight=0}checkViewportAndScrolls(){this.updateScrollVisibleService(),this.checkBodyHeight(),this.onHorizontalViewportChanged(),this.gridBodyCtrl.scrollFeature.checkScrollLeft()}getBodyHeight(){return this.bodyHeight}checkBodyHeight(){const e=this.gridBodyCtrl.eBodyViewport,t=yi(e);this.bodyHeight!==t&&(this.bodyHeight=t,this.eventSvc.dispatchEvent({type:"bodyHeightChanged"}))}updateScrollVisibleService(){this.updateScrollVisibleServiceImpl(),setTimeout(this.updateScrollVisibleServiceImpl.bind(this),500)}updateScrollVisibleServiceImpl(){const e={horizontalScrollShowing:this.centerContainerCtrl.isHorizontalScrollShowing(),verticalScrollShowing:this.gridBodyCtrl.isVerticalScrollShowing()};this.scrollVisibleSvc.setScrollsVisible(e)}onHorizontalViewportChanged(){const e=this.centerContainerCtrl.getCenterWidth(),t=this.centerContainerCtrl.getViewportScrollLeft();this.beans.colViewport.setScrollPosition(e,t)}};function Ts(e){if(e.group)return e.level;const t=e.parent;return t?t.level+1:0}var ad=0,Wt="renderedRow",Io=class extends v{constructor(e,t,o,s,i){var n;super(),this.rowNode=e,this.useAnimationFrameForCreate=s,this.printLayout=i,this.allRowGuis=[],this.active=!0,this.centerCellCtrls={list:[],map:{}},this.leftCellCtrls={list:[],map:{}},this.rightCellCtrls={list:[],map:{}},this.slideInAnimation={left:!1,center:!1,right:!1,fullWidth:!1},this.fadeInAnimation={left:!1,center:!1,right:!1,fullWidth:!1},this.rowDragComps=[],this.lastMouseDownOnDragger=!1,this.emptyStyle={},this.updateColumnListsPending=!1,this.rowId=null,this.businessKey=null,this.beans=t,this.gos=t.gos,this.paginationPage=((n=t.pagination)==null?void 0:n.getCurrentPage())??0,this.suppressRowTransform=this.gos.get("suppressRowTransform"),this.instanceId=e.id+"-"+ad++,this.rowId=vt(e.id),this.initRowBusinessKey(),this.rowFocused=t.focusSvc.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned),this.rowLevel=Ts(this.rowNode),this.setRowType(),this.setAnimateFlags(o),this.rowStyles=this.processStylesFromGridOptions(),this.addListeners()}initRowBusinessKey(){this.businessKeyForNodeFunc=this.gos.get("getBusinessKeyForNode"),this.updateRowBusinessKey()}updateRowBusinessKey(){if(typeof this.businessKeyForNodeFunc!="function")return;const e=this.businessKeyForNodeFunc(this.rowNode);this.businessKey=vt(e)}updateGui(e,t){e==="left"?this.leftGui=t:e==="right"?this.rightGui=t:e==="fullWidth"?this.fullWidthGui=t:this.centerGui=t}setComp(e,t,o,s){var h;const{context:i,focusSvc:n}=this.beans;s=Kt(this,i,s);const r={rowComp:e,element:t,containerType:o,compBean:s};this.allRowGuis.push(r),this.updateGui(o,r),this.initialiseRowComp(r);const l=this.rowNode,a=this.rowType==="FullWidthLoading"||l.stub,d=!l.data&&this.beans.rowModel.getType()==="infinite";!a&&!d&&!l.rowPinned&&this.beans.rowRenderer.dispatchFirstDataRenderedEvent();const c=(h=this.fullWidthGui)==null?void 0:h.element;c&&!this.editing&&n.isRowFocused(l.rowIndex,l.rowPinned)&&n.shouldTakeFocus()&&setTimeout(()=>c.focus({preventScroll:!0}),0)}unsetComp(e){this.allRowGuis=this.allRowGuis.filter(t=>t.containerType!==e),this.updateGui(e,void 0)}isCacheable(){return this.rowType==="FullWidthDetail"&&this.gos.get("keepDetailRows")}setCached(e){const t=e?"none":"";this.allRowGuis.forEach(o=>o.element.style.display=t)}initialiseRowComp(e){const t=this.gos;this.onSuppressCellFocusChanged(this.beans.gos.get("suppressCellFocus")),this.listenOnDomOrder(e),this.onRowHeightChanged(e),this.updateRowIndexes(e),this.setFocusedClasses(e),this.setStylesFromGridOptions(!1,e),Hi(t)&&this.rowNode.selectable&&this.onRowSelected(e),this.updateColumnLists(!this.useAnimationFrameForCreate);const o=e.rowComp;this.getInitialRowClasses(e.containerType).forEach(i=>o.toggleCss(i,!0)),this.executeSlideAndFadeAnimations(e),this.rowNode.group&&wr(e.element,this.rowNode.expanded==!0),this.setRowCompRowId(o),this.setRowCompRowBusinessKey(o),Be(t,e.element,Wt,this),e.compBean.addDestroyFunc(()=>Be(t,e.element,Wt,null)),this.useAnimationFrameForCreate?this.beans.animationFrameSvc.createTask(this.addHoverFunctionality.bind(this,e),this.rowNode.rowIndex,"p2",!1):this.addHoverFunctionality(e),this.isFullWidth()&&this.setupFullWidth(e),t.get("rowDragEntireRow")&&this.addRowDraggerToRow(e),this.useAnimationFrameForCreate&&this.beans.animationFrameSvc.addDestroyTask(()=>{this.isAlive()&&e.rowComp.toggleCss("ag-after-created",!0)}),this.executeProcessRowPostCreateFunc()}setRowCompRowBusinessKey(e){this.businessKey!=null&&e.setRowBusinessKey(this.businessKey)}setRowCompRowId(e){const t=vt(this.rowNode.id);this.rowId=t,t!=null&&e.setRowId(t)}executeSlideAndFadeAnimations(e){const{containerType:t}=e;this.slideInAnimation[t]&&(Fo(()=>{this.onTopChanged()}),this.slideInAnimation[t]=!1),this.fadeInAnimation[t]&&(Fo(()=>{e.rowComp.toggleCss("ag-opacity-zero",!1)}),this.fadeInAnimation[t]=!1)}addRowDraggerToRow(e){var s;const t=(s=this.beans.rowDragSvc)==null?void 0:s.createRowDragCompForRow(this.rowNode,e.element);if(!t)return;const o=this.createBean(t,this.beans.context);this.rowDragComps.push(o),e.compBean.addDestroyFunc(()=>{this.rowDragComps=this.rowDragComps.filter(i=>i!==o),this.destroyBean(o,this.beans.context)})}setupFullWidth(e){const t=this.getPinnedForContainer(e.containerType),o=this.createFullWidthCompDetails(e.element,t);e.rowComp.showFullWidth(o)}getFullWidthCellRenderers(){var e,t;return this.gos.get("embedFullWidthRows")?this.allRowGuis.map(o=>{var s;return(s=o==null?void 0:o.rowComp)==null?void 0:s.getFullWidthCellRenderer()}):[(t=(e=this.fullWidthGui)==null?void 0:e.rowComp)==null?void 0:t.getFullWidthCellRenderer()]}executeProcessRowPostCreateFunc(){const e=this.gos.getCallback("processRowPostCreate");if(!e||!this.areAllContainersReady())return;const t={eRow:this.centerGui.element,ePinnedLeftRow:this.leftGui?this.leftGui.element:void 0,ePinnedRightRow:this.rightGui?this.rightGui.element:void 0,node:this.rowNode,rowIndex:this.rowNode.rowIndex,addRenderedRowListener:this.addEventListener.bind(this)};e(t)}areAllContainersReady(){const{leftGui:e,centerGui:t,rightGui:o,beans:{visibleCols:s}}=this,i=!!e||!s.isPinningLeft(),n=!!t,r=!!o||!s.isPinningRight();return i&&n&&r}isNodeFullWidthCell(){if(this.rowNode.detail)return!0;const e=this.beans.gos.getCallback("isFullWidthRow");return e?e({rowNode:this.rowNode}):!1}setRowType(){const e=this.rowNode.stub&&!this.gos.get("suppressServerSideFullWidthLoadingRow")&&!this.gos.get("groupHideOpenParents"),t=this.isNodeFullWidthCell(),o=this.gos.get("masterDetail")&&this.rowNode.detail,s=this.beans.colModel.isPivotMode(),i=el(this.gos,this.rowNode,s);e?this.rowType="FullWidthLoading":o?this.rowType="FullWidthDetail":t?this.rowType="FullWidth":i?this.rowType="FullWidthGroup":this.rowType="Normal"}updateColumnLists(e=!1,t=!1){if(this.isFullWidth())return;const{animationFrameSvc:o}=this.beans;if(!(o!=null&&o.active)||e||this.printLayout){this.updateColumnListsImpl(t);return}this.updateColumnListsPending||(o.createTask(()=>{this.active&&this.updateColumnListsImpl(!0)},this.rowNode.rowIndex,"p1",!1),this.updateColumnListsPending=!0)}getNewCellCtrl(e){var o;if(!((o=this.beans.rowSpanSvc)!=null&&o.isCellSpanning(e,this.rowNode)))return new St(e,this.rowNode,this.beans,this)}isCorrectCtrlForSpan(e){var t;return!((t=this.beans.rowSpanSvc)!=null&&t.isCellSpanning(e.column,this.rowNode))}createCellCtrls(e,t,o=null){const s={list:[],map:{}},i=(d,c,h)=>{h!=null?s.list.splice(h,0,c):s.list.push(c),s.map[d]=c},n=[];for(const d of t){const c=d.getInstanceId();let h=e.map[c];h&&!this.isCorrectCtrlForSpan(h)&&(h.destroy(),h=void 0),h||(h=this.getNewCellCtrl(d)),h&&i(c,h)}for(const d of e.list){const c=d.column.getInstanceId();if(s.map[c]!=null)continue;!this.isCellEligibleToBeRemoved(d,o)?n.push([c,d]):d.destroy()}if(n.length)for(const[d,c]of n){const h=s.list.findIndex(g=>g.column.getLeft()>c.column.getLeft()),u=h===-1?void 0:Math.max(h-1,0);i(d,c,u)}const{focusSvc:r,visibleCols:l}=this.beans,a=r.getFocusedCell();if(a&&a.column.getPinned()==o){const d=a.column.getInstanceId();if(!s.map[d]&&l.allCols.includes(a.column)){const h=this.createFocusedCellCtrl();if(h){const u=s.list.findIndex(p=>p.column.getLeft()>h.column.getLeft()),g=u===-1?void 0:Math.max(u-1,0);i(d,h,g)}}}return s}createFocusedCellCtrl(){const{focusSvc:e,rowSpanSvc:t}=this.beans,o=e.getFocusedCell();if(!o)return;const s=t==null?void 0:t.getCellSpan(o.column,this.rowNode);if(s){if(s.firstNode!==this.rowNode||!s.doesSpanContain(o))return}else if(!e.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned))return;return this.getNewCellCtrl(o.column)}updateColumnListsImpl(e){this.updateColumnListsPending=!1,this.createAllCellCtrls(),this.setCellCtrls(e)}setCellCtrls(e){this.allRowGuis.forEach(t=>{const o=this.getCellCtrlsForContainer(t.containerType);t.rowComp.setCellCtrls(o,e)})}getCellCtrlsForContainer(e){switch(e){case"left":return this.leftCellCtrls.list;case"right":return this.rightCellCtrls.list;case"fullWidth":return[];case"center":return this.centerCellCtrls.list}}createAllCellCtrls(){const e=this.beans.colViewport,t=this.beans.visibleCols;if(this.printLayout)this.centerCellCtrls=this.createCellCtrls(this.centerCellCtrls,t.allCols),this.leftCellCtrls={list:[],map:{}},this.rightCellCtrls={list:[],map:{}};else{const o=e.getColsWithinViewport(this.rowNode);this.centerCellCtrls=this.createCellCtrls(this.centerCellCtrls,o);const s=t.getLeftColsForRow(this.rowNode);this.leftCellCtrls=this.createCellCtrls(this.leftCellCtrls,s,"left");const i=t.getRightColsForRow(this.rowNode);this.rightCellCtrls=this.createCellCtrls(this.rightCellCtrls,i,"right")}}isCellEligibleToBeRemoved(e,t){const{column:i}=e;if(i.getPinned()!=t||!this.isCorrectCtrlForSpan(e))return!0;const{editing:n}=e,{visibleCols:r}=this.beans,l=e.isCellFocused();return n||l?!(r.allCols.indexOf(i)>=0):!0}getDomOrder(){return this.gos.get("ensureDomOrder")||$(this.gos,"print")}listenOnDomOrder(e){const t=()=>{e.rowComp.setDomOrder(this.getDomOrder())};e.compBean.addManagedPropertyListeners(["domLayout","ensureDomOrder"],t)}setAnimateFlags(e){if(this.rowNode.sticky||!e)return;const t=k(this.rowNode.oldRowTop),{visibleCols:o}=this.beans,s=o.isPinningLeft(),i=o.isPinningRight();if(t){const{slideInAnimation:n}=this;if(this.isFullWidth()&&!this.gos.get("embedFullWidthRows")){n.fullWidth=!0;return}n.center=!0,n.left=s,n.right=i}else{const{fadeInAnimation:n}=this;if(this.isFullWidth()&&!this.gos.get("embedFullWidthRows")){n.fullWidth=!0;return}n.center=!0,n.left=s,n.right=i}}isFullWidth(){return this.rowType!=="Normal"}refreshFullWidth(){const e=(r,l)=>r?r.rowComp.refreshFullWidth(()=>this.createFullWidthCompDetails(r.element,l).params):!0,t=e(this.fullWidthGui,null),o=e(this.centerGui,null),s=e(this.leftGui,"left"),i=e(this.rightGui,"right");return t&&o&&s&&i}addListeners(){var e;this.addManagedListeners(this.rowNode,{heightChanged:()=>this.onRowHeightChanged(),rowSelected:()=>this.onRowSelected(),rowIndexChanged:this.onRowIndexChanged.bind(this),topChanged:this.onTopChanged.bind(this),...((e=this.beans.expansionSvc)==null?void 0:e.getRowExpandedListeners(this))??{}}),this.rowNode.detail&&this.addManagedListeners(this.rowNode.parent,{dataChanged:this.onRowNodeDataChanged.bind(this)}),this.addManagedListeners(this.rowNode,{dataChanged:this.onRowNodeDataChanged.bind(this),cellChanged:this.postProcessCss.bind(this),rowHighlightChanged:this.onRowNodeHighlightChanged.bind(this),draggingChanged:this.postProcessRowDragging.bind(this),uiLevelChanged:this.onUiLevelChanged.bind(this),rowPinned:this.onRowPinned.bind(this)}),this.addManagedListeners(this.beans.eventSvc,{paginationPixelOffsetChanged:this.onPaginationPixelOffsetChanged.bind(this),heightScaleChanged:this.onTopChanged.bind(this),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),virtualColumnsChanged:this.onVirtualColumnsChanged.bind(this),cellFocused:this.onCellFocusChanged.bind(this),cellFocusCleared:this.onCellFocusChanged.bind(this),paginationChanged:this.onPaginationChanged.bind(this),modelUpdated:this.refreshFirstAndLastRowStyles.bind(this),columnMoved:()=>this.updateColumnLists()}),this.beans.rowSpanSvc&&this.addManagedListeners(this.beans.rowSpanSvc,{spannedCellsUpdated:({pinned:t})=>{t&&!this.rowNode.rowPinned||this.updateColumnLists()}}),this.addDestroyFunc(()=>{this.rowDragComps=this.destroyBeans(this.rowDragComps,this.beans.context),this.tooltipFeature=this.destroyBean(this.tooltipFeature,this.beans.context)}),this.addManagedPropertyListeners(["rowStyle","getRowStyle","rowClass","getRowClass","rowClassRules"],this.postProcessCss.bind(this)),this.addManagedPropertyListener("rowDragEntireRow",()=>{if(this.gos.get("rowDragEntireRow")){this.allRowGuis.forEach(o=>{this.addRowDraggerToRow(o)});return}this.rowDragComps=this.destroyBeans(this.rowDragComps,this.beans.context)}),this.addListenersForCellComps()}addListenersForCellComps(){this.addManagedListeners(this.rowNode,{rowIndexChanged:()=>{this.getAllCellCtrls().forEach(e=>e.onRowIndexChanged())},cellChanged:e=>{this.getAllCellCtrls().forEach(t=>t.onCellChanged(e))}})}onRowPinned(){for(const e of this.allRowGuis)e.rowComp.toggleCss("ag-row-pinned-source",!!this.rowNode.pinnedSibling)}onRowNodeDataChanged(e){if(this.isFullWidth()!==!!this.isNodeFullWidthCell()){this.beans.rowRenderer.redrawRow(this.rowNode);return}if(this.isFullWidth()){this.refreshFullWidth()||this.beans.rowRenderer.redrawRow(this.rowNode);return}this.getAllCellCtrls().forEach(o=>o.refreshCell({suppressFlash:!e.update,newData:!e.update})),this.allRowGuis.forEach(o=>{this.setRowCompRowId(o.rowComp),this.updateRowBusinessKey(),this.setRowCompRowBusinessKey(o.rowComp)}),this.onRowSelected(),this.postProcessCss()}postProcessCss(){this.setStylesFromGridOptions(!0),this.postProcessClassesFromGridOptions(),this.postProcessRowClassRules(),this.postProcessRowDragging()}onRowNodeHighlightChanged(){const e=this.rowNode.highlighted;this.allRowGuis.forEach(t=>{const o=e==="Above",s=e==="Below";t.rowComp.toggleCss("ag-row-highlight-above",o),t.rowComp.toggleCss("ag-row-highlight-below",s)})}postProcessRowDragging(){const e=this.rowNode.dragging;this.allRowGuis.forEach(t=>t.rowComp.toggleCss("ag-row-dragging",e))}onDisplayedColumnsChanged(){var e;this.updateColumnLists(!0),(e=this.beans.rowAutoHeight)==null||e.requestCheckAutoHeight()}onVirtualColumnsChanged(){this.updateColumnLists(!1,!0)}getRowPosition(){return{rowPinned:Re(this.rowNode.rowPinned),rowIndex:this.rowNode.rowIndex}}onKeyboardNavigate(e){const t=this.findFullWidthInfoForEvent(e);if(!t)return;const{rowGui:o,column:s}=t;if(!(o.element===e.target))return;const r=this.rowNode,{focusSvc:l,navigation:a}=this.beans,d=l.getFocusedCell(),c={rowIndex:r.rowIndex,rowPinned:r.rowPinned,column:(d==null?void 0:d.column)??s};a==null||a.navigateToNextCell(e,e.key,c,!0),e.preventDefault()}onTabKeyDown(e){var l;if(e.defaultPrevented||ve(e))return;const t=this.allRowGuis.find(a=>a.element.contains(e.target)),o=t?t.element:null,s=o===e.target,i=z(this.beans);let n=!1;o&&i&&(n=o.contains(i)&&i.classList.contains("ag-cell"));let r=null;!s&&!n&&(r=jt(this.beans,o,!1,e.shiftKey)),(this.isFullWidth()&&s||!r)&&((l=this.beans.navigation)==null||l.onTabKeyDown(this,e))}getFullWidthElement(){return this.fullWidthGui?this.fullWidthGui.element:null}getRowYPosition(){var t;const e=(t=this.allRowGuis.find(o=>De(o.element)))==null?void 0:t.element;return e?e.getBoundingClientRect().top:0}onSuppressCellFocusChanged(e){const t=this.isFullWidth()&&e?void 0:-1;this.allRowGuis.forEach(o=>{Le(o.element,"tabindex",t)})}onFullWidthRowFocused(e){var i,n,r;const t=this.rowNode,o=e?this.isFullWidth()&&e.rowIndex===t.rowIndex&&e.rowPinned==t.rowPinned:!1;let s;if(this.fullWidthGui)s=this.fullWidthGui.element;else{const l=this.beans.colModel.getCol(e==null?void 0:e.column),a=l==null?void 0:l.pinned;a?s=a==="right"?(i=this.rightGui)==null?void 0:i.element:(n=this.leftGui)==null?void 0:n.element:s=(r=this.centerGui)==null?void 0:r.element}s&&(s.classList.toggle("ag-full-width-focus",o),o&&(e!=null&&e.forceBrowserFocus)&&s.focus({preventScroll:!0}))}recreateCell(e){this.centerCellCtrls=this.removeCellCtrl(this.centerCellCtrls,e),this.leftCellCtrls=this.removeCellCtrl(this.leftCellCtrls,e),this.rightCellCtrls=this.removeCellCtrl(this.rightCellCtrls,e),e.destroy(),this.updateColumnLists()}removeCellCtrl(e,t){const o={list:[],map:{}};return e.list.forEach(s=>{s!==t&&(o.list.push(s),o.map[s.column.getInstanceId()]=s)}),o}onMouseEvent(e,t){switch(e){case"dblclick":this.onRowDblClick(t);break;case"click":this.onRowClick(t);break;case"touchstart":case"mousedown":this.onRowMouseDown(t);break}}createRowEvent(e,t){const{rowNode:o}=this;return A(this.gos,{type:e,node:o,data:o.data,rowIndex:o.rowIndex,rowPinned:o.rowPinned,event:t})}createRowEventWithSource(e,t){const o=this.createRowEvent(e,t);return o.source=this,o}onRowDblClick(e){ve(e)||this.beans.eventSvc.dispatchEvent(this.createRowEventWithSource("rowDoubleClicked",e))}findFullWidthInfoForEvent(e){if(!e)return;const t=this.findFullWidthRowGui(e.target),o=this.getColumnForFullWidth(t);if(!(!t||!o))return{rowGui:t,column:o}}findFullWidthRowGui(e){return this.allRowGuis.find(t=>t.element.contains(e))}getColumnForFullWidth(e){const{visibleCols:t}=this.beans;switch(e==null?void 0:e.containerType){case"center":return t.centerCols[0];case"left":return t.leftCols[0];case"right":return t.rightCols[0];default:return t.allCols[0]}}onRowMouseDown(e){if(this.lastMouseDownOnDragger=Ie(e.target,"ag-row-drag",3),!this.isFullWidth())return;const t=this.rowNode,{rangeSvc:o,focusSvc:s}=this.beans;o==null||o.removeAllCellRanges();const i=this.findFullWidthInfoForEvent(e);if(!i)return;const{rowGui:n,column:r}=i,l=n.element,a=e.target;let d=e.defaultPrevented||Ho();l&&l.contains(a)&&Go(a)&&(d=!1),s.setFocusedCell({rowIndex:t.rowIndex,column:r,rowPinned:t.rowPinned,forceBrowserFocus:d})}onRowClick(e){if(ve(e)||this.lastMouseDownOnDragger)return;const{eventSvc:o,selectionSvc:s}=this.beans;o.dispatchEvent(this.createRowEventWithSource("rowClicked",e)),s==null||s.handleSelectionEvent(e,this.rowNode,"rowClicked")}setupDetailRowAutoHeight(e){var t;this.rowType==="FullWidthDetail"&&((t=this.beans.masterDetailSvc)==null||t.setupDetailRowAutoHeight(this,e))}createFullWidthCompDetails(e,t){const{gos:o,rowNode:s}=this,i=A(o,{fullWidth:!0,data:s.data,node:s,value:s.key,valueFormatted:s.key,eGridCell:e,eParentOfValue:e,pinned:t,addRenderedRowListener:this.addEventListener.bind(this),registerRowDragger:(r,l,a,d)=>this.addFullWidthRowDragging(r,l,a,d),setTooltip:(r,l)=>{o.assertModuleRegistered("Tooltip",3),this.refreshRowTooltip(r,l)}}),n=this.beans.userCompFactory;switch(this.rowType){case"FullWidthDetail":return ua(n,i);case"FullWidthGroup":{const{value:r,valueFormatted:l}=this.beans.valueSvc.getValueForDisplay(void 0,this.rowNode,!0);return i.value=r,i.valueFormatted=l,ha(n,i)}case"FullWidthLoading":return ca(n,i);default:return da(n,i)}}refreshRowTooltip(e,t){var o;this.fullWidthGui&&(this.tooltipFeature=(o=this.beans.tooltipSvc)==null?void 0:o.refreshRowTooltip(this.tooltipFeature,this,e,t))}addFullWidthRowDragging(e,t,o="",s){const{rowDragSvc:i,context:n}=this.beans;if(!i||!this.isFullWidth())return;const r=i.createRowDragComp(()=>o,this.rowNode,void 0,e,t,s);this.createBean(r,n),this.addDestroyFunc(()=>{this.destroyBean(r,n)})}onUiLevelChanged(){const e=Ts(this.rowNode);if(this.rowLevel!=e){const t="ag-row-level-"+e,o="ag-row-level-"+this.rowLevel;this.allRowGuis.forEach(s=>{s.rowComp.toggleCss(t,!0),s.rowComp.toggleCss(o,!1)})}this.rowLevel=e}isFirstRowOnPage(){return this.rowNode.rowIndex===this.beans.pageBounds.getFirstRow()}isLastRowOnPage(){return this.rowNode.rowIndex===this.beans.pageBounds.getLastRow()}refreshFirstAndLastRowStyles(){const e=this.isFirstRowOnPage(),t=this.isLastRowOnPage();this.firstRowOnPage!==e&&(this.firstRowOnPage=e,this.allRowGuis.forEach(o=>o.rowComp.toggleCss("ag-row-first",e))),this.lastRowOnPage!==t&&(this.lastRowOnPage=t,this.allRowGuis.forEach(o=>o.rowComp.toggleCss("ag-row-last",t)))}getAllCellCtrls(){return this.leftCellCtrls.list.length===0&&this.rightCellCtrls.list.length===0?this.centerCellCtrls.list:[...this.centerCellCtrls.list,...this.leftCellCtrls.list,...this.rightCellCtrls.list]}postProcessClassesFromGridOptions(){var t;const e=[];(t=this.beans.rowStyleSvc)==null||t.processClassesFromGridOptions(e,this.rowNode),e.length&&e.forEach(o=>{this.allRowGuis.forEach(s=>s.rowComp.toggleCss(o,!0))})}postProcessRowClassRules(){var e;(e=this.beans.rowStyleSvc)==null||e.processRowClassRules(this.rowNode,t=>{this.allRowGuis.forEach(o=>o.rowComp.toggleCss(t,!0))},t=>{this.allRowGuis.forEach(o=>o.rowComp.toggleCss(t,!1))})}setStylesFromGridOptions(e,t){e&&(this.rowStyles=this.processStylesFromGridOptions()),this.forEachGui(t,o=>o.rowComp.setUserStyles(this.rowStyles))}getPinnedForContainer(e){return e==="left"||e==="right"?e:null}getInitialRowClasses(e){var l,a;const t=this.getPinnedForContainer(e),o=this.isFullWidth(),{rowNode:s,beans:i}=this,n=[];n.push("ag-row"),n.push(this.rowFocused?"ag-row-focus":"ag-row-no-focus"),this.fadeInAnimation[e]&&n.push("ag-opacity-zero"),n.push(s.rowIndex%2===0?"ag-row-even":"ag-row-odd"),s.isRowPinned()&&(n.push("ag-row-pinned"),(l=i.pinnedRowModel)!=null&&l.isManual()&&n.push("ag-row-pinned-manual")),!s.isRowPinned()&&s.pinnedSibling&&n.push("ag-row-pinned-source"),s.isSelected()&&n.push("ag-row-selected"),s.footer&&n.push("ag-row-footer"),n.push("ag-row-level-"+this.rowLevel),s.stub&&n.push("ag-row-loading"),o&&n.push("ag-full-width-row"),(a=i.expansionSvc)==null||a.addExpandedCss(n,s),s.dragging&&n.push("ag-row-dragging");const{rowStyleSvc:r}=i;return r&&(r.processClassesFromGridOptions(n,s),r.preProcessRowClassRules(n,s)),n.push(this.printLayout?"ag-row-position-relative":"ag-row-position-absolute"),this.isFirstRowOnPage()&&n.push("ag-row-first"),this.isLastRowOnPage()&&n.push("ag-row-last"),o&&(t==="left"&&n.push("ag-cell-last-left-pinned"),t==="right"&&n.push("ag-cell-first-right-pinned")),n}processStylesFromGridOptions(){var e;return((e=this.beans.rowStyleSvc)==null?void 0:e.processStylesFromGridOptions(this.rowNode))??this.emptyStyle}onRowSelected(e){var t;(t=this.beans.selectionSvc)==null||t.onRowCtrlSelected(this,o=>{(o===this.centerGui||o===this.fullWidthGui)&&this.announceDescription()},e)}announceDescription(){var e;(e=this.beans.selectionSvc)==null||e.announceAriaRowSelection(this.rowNode)}addHoverFunctionality(e){if(!this.active)return;const{element:t,compBean:o}=e,{rowNode:s,beans:i,gos:n}=this;o.addManagedListeners(t,{mouseenter:()=>s.dispatchRowEvent("mouseEnter"),mouseleave:()=>s.dispatchRowEvent("mouseLeave")}),o.addManagedListeners(s,{mouseEnter:()=>{var r;!((r=i.dragSvc)!=null&&r.dragging)&&!n.get("suppressRowHoverHighlight")&&(t.classList.add("ag-row-hover"),s.setHovered(!0))},mouseLeave:()=>{this.resetHoveredStatus(t)}})}resetHoveredStatus(e){const t=e?[e]:this.allRowGuis.map(o=>o.element);for(const o of t)o.classList.remove("ag-row-hover");this.rowNode.setHovered(!1)}roundRowTopToBounds(e){const t=this.beans.ctrlsSvc.getScrollFeature().getApproximateVScollPosition(),o=this.applyPaginationOffset(t.top,!0)-100,s=this.applyPaginationOffset(t.bottom,!0)+100;return Math.min(Math.max(o,e),s)}forEachGui(e,t){e?t(e):this.allRowGuis.forEach(t)}isRowRendered(){return this.allRowGuis.length>0}onRowHeightChanged(e){if(this.rowNode.rowHeight==null)return;const t=this.rowNode.rowHeight,o=this.beans.environment.getDefaultRowHeight(),i=Gi(this.gos)?qr(this.beans,this.rowNode).height:void 0,n=i?`${Math.min(o,i)-2}px`:void 0;this.forEachGui(e,r=>{r.element.style.height=`${t}px`,n&&r.element.style.setProperty("--ag-line-height",n)})}destroyFirstPass(e=!1){var s;this.active=!1;const{rowNode:t}=this;if(!e&&zo(this.gos)&&!t.sticky)if(t.rowTop!=null){const n=this.roundRowTopToBounds(t.rowTop);this.setRowTop(n)}else this.allRowGuis.forEach(n=>n.rowComp.toggleCss("ag-opacity-zero",!0));(s=this.fullWidthGui)!=null&&s.element.contains(z(this.beans))&&this.beans.focusSvc.attemptToRecoverFocus(),t.setHovered(!1);const o=this.createRowEvent("virtualRowRemoved");this.dispatchLocalEvent(o),this.beans.eventSvc.dispatchEvent(o),super.destroy()}destroySecondPass(){var t;this.allRowGuis.length=0,(t=this.beans.editSvc)==null||t.stopRowEditing(this);const e=o=>(o.list.forEach(s=>s.destroy()),{list:[],map:{}});this.centerCellCtrls=e(this.centerCellCtrls),this.leftCellCtrls=e(this.leftCellCtrls),this.rightCellCtrls=e(this.rightCellCtrls)}setFocusedClasses(e){this.forEachGui(e,t=>{t.rowComp.toggleCss("ag-row-focus",this.rowFocused),t.rowComp.toggleCss("ag-row-no-focus",!this.rowFocused)})}onCellFocusChanged(){const{focusSvc:e,editSvc:t}=this.beans,o=e.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned);o!==this.rowFocused&&(this.rowFocused=o,this.setFocusedClasses()),!o&&this.editing&&(t==null||t.stopRowEditing(this,!1))}onPaginationChanged(){var t;const e=((t=this.beans.pagination)==null?void 0:t.getCurrentPage())??0;this.paginationPage!==e&&(this.paginationPage=e,this.onTopChanged()),this.refreshFirstAndLastRowStyles()}onTopChanged(){this.setRowTop(this.rowNode.rowTop)}onPaginationPixelOffsetChanged(){this.onTopChanged()}applyPaginationOffset(e,t=!1){if(this.rowNode.isRowPinned()||this.rowNode.sticky)return e;const o=this.beans.pageBounds.getPixelOffset();return e+o*(t?1:-1)}setRowTop(e){if(!this.printLayout&&k(e)){const t=this.applyPaginationOffset(e),i=`${this.rowNode.isRowPinned()||this.rowNode.sticky?t:this.beans.rowContainerHeight.getRealPixelPosition(t)}px`;this.setRowTopStyle(i)}}getInitialRowTop(e){return this.suppressRowTransform?this.getInitialRowTopShared(e):void 0}getInitialTransform(e){return this.suppressRowTransform?void 0:`translateY(${this.getInitialRowTopShared(e)})`}getInitialRowTopShared(e){if(this.printLayout)return"";const t=this.rowNode;let o;if(t.sticky)o=t.stickyRowTop;else{const s=this.slideInAnimation[e]?this.roundRowTopToBounds(t.oldRowTop):t.rowTop,i=this.applyPaginationOffset(s);o=t.isRowPinned()?i:this.beans.rowContainerHeight.getRealPixelPosition(i)}return o+"px"}setRowTopStyle(e){this.allRowGuis.forEach(t=>this.suppressRowTransform?t.rowComp.setTop(e):t.rowComp.setTransform(`translateY(${e})`))}getCellCtrl(e,t=!1){let o=null;return this.getAllCellCtrls().forEach(s=>{s.column==e&&(o=s)}),o!=null||t||this.getAllCellCtrls().forEach(s=>{s.getColSpanningList().indexOf(e)>=0&&(o=s)}),o}onRowIndexChanged(){this.rowNode.rowIndex!=null&&(this.onCellFocusChanged(),this.updateRowIndexes(),this.postProcessCss())}updateRowIndexes(e){var n,r;const t=this.rowNode.getRowIndexString();if(t===null)return;const o=(((n=this.beans.ctrlsSvc.getHeaderRowContainerCtrl())==null?void 0:n.getRowCount())??0)+(((r=this.beans.filterManager)==null?void 0:r.getHeaderRowCount())??0),s=this.rowNode.rowIndex%2===0,i=o+this.rowNode.rowIndex+1;this.forEachGui(e,l=>{l.rowComp.setRowIndex(t),l.rowComp.toggleCss("ag-row-even",s),l.rowComp.toggleCss("ag-row-odd",!s),ui(l.element,i)})}};function dd(e){var o;return e.altKey||e.ctrlKey||e.metaKey?!1:((o=e.key)==null?void 0:o.length)===1}function ks(e,t,o,s,i){const n=s?s.getColDef().suppressKeyboardEvent:void 0;if(!n)return!1;const r=A(e,{event:t,editing:i,column:s,node:o,data:o.data,colDef:s.getColDef()});return!!(n&&n(r))}function cd(e){const{pinnedRowModel:t,rowModel:o}=e,[s,i]=[(t==null?void 0:t.isEmpty("top"))??!0,(t==null?void 0:t.isEmpty("bottom"))??!0],n=s?null:"top";let r,l;i?(r=null,l=o.getRowCount()-1):(r="bottom",l=(t==null?void 0:t.getPinnedBottomRowCount())??-1);const{visibleCols:a,rangeSvc:d}=e,c=a.allCols;!d||!(c!=null&&c.length)||d.setCellRange({rowStartIndex:0,rowStartPinned:n,rowEndIndex:l,rowEndPinned:r})}var hd=65,ud=67,gd=86,pd=68,fd=90,Cd=89;function md(e){const{keyCode:t}=e;let o;switch(t){case hd:o=m.A;break;case ud:o=m.C;break;case gd:o=m.V;break;case pd:o=m.D;break;case fd:o=m.Z;break;case Cd:o=m.Y;break;default:o=e.code}return o}var vd=class extends v{constructor(e){super(),this.element=e}postConstruct(){var e;this.addKeyboardListeners(),this.addMouseListeners(),(e=this.beans.touchSvc)==null||e.mockRowContextMenu(this)}addKeyboardListeners(){const e="keydown",t=this.processKeyboardEvent.bind(this,e);this.addManagedElementListeners(this.element,{[e]:t})}addMouseListeners(){["dblclick","contextmenu","mouseover","mouseout","click",Ki("touchstart")?"touchstart":"mousedown"].forEach(o=>{const s=this.processMouseEvent.bind(this,o);this.addManagedElementListeners(this.element,{[o]:s})})}processMouseEvent(e,t){var i;if(!tt(this.gos,t)||ve(t))return;const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);e==="contextmenu"?(o!=null&&o.column&&o.dispatchCellContextMenuEvent(t),(i=this.beans.contextMenuSvc)==null||i.handleContextMenuMouseEvent(t,void 0,s,o)):(o&&o.onMouseEvent(e,t),s&&s.onMouseEvent(e,t))}getControlsForEventTarget(e){const{gos:t}=this;return{cellCtrl:gn(t,e),rowCtrl:ji(t,e,Wt)}}processKeyboardEvent(e,t){const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);t.defaultPrevented||(o?this.processCellKeyboardEvent(o,e,t):s&&s.isFullWidth()&&this.processFullWidthRowKeyboardEvent(s,e,t))}processCellKeyboardEvent(e,t,o){var l;const{rowNode:s,column:i,editing:n}=e;!ks(this.gos,o,s,i,n)&&t==="keydown"&&(!n&&((l=this.beans.navigation)!=null&&l.handlePageScrollingKey(o))||e.onKeyDown(o),this.doGridOperations(o,e.editing),dd(o)&&e.processCharacter(o)),t==="keydown"&&this.eventSvc.dispatchEvent(e.createEvent(o,"cellKeyDown"))}processFullWidthRowKeyboardEvent(e,t,o){const{rowNode:s}=e,{focusSvc:i,navigation:n}=this.beans,r=i.getFocusedCell(),l=r&&r.column;if(!ks(this.gos,o,s,l,!1)){const d=o.key;if(t==="keydown")switch(d){case m.PAGE_HOME:case m.PAGE_END:case m.PAGE_UP:case m.PAGE_DOWN:n==null||n.handlePageScrollingKey(o,!0);break;case m.LEFT:case m.RIGHT:if(!this.gos.get("embedFullWidthRows"))break;case m.UP:case m.DOWN:e.onKeyboardNavigate(o);break;case m.TAB:e.onTabKeyDown(o);break}}t==="keydown"&&this.eventSvc.dispatchEvent(e.createRowEvent("cellKeyDown",o))}doGridOperations(e,t){if(!e.ctrlKey&&!e.metaKey||t||!tt(this.gos,e))return;const o=md(e),{clipboardSvc:s,undoRedo:i}=this.beans;if(o===m.A)return this.onCtrlAndA(e);if(o===m.C)return this.onCtrlAndC(s,e);if(o===m.D)return this.onCtrlAndD(s,e);if(o===m.V)return this.onCtrlAndV(s,e);if(o===m.X)return this.onCtrlAndX(s,e);if(o===m.Y)return this.onCtrlAndY(i);if(o===m.Z)return this.onCtrlAndZ(i,e)}onCtrlAndA(e){const{beans:{rowModel:t,rangeSvc:o,selectionSvc:s},gos:i}=this;o&&Oe(i)&&t.isRowsToRender()?cd(this.beans):s&&(s==null||s.selectAllRowNodes({source:"keyboardSelectAll",selectAll:il(i)})),e.preventDefault()}onCtrlAndC(e,t){if(!e||this.gos.get("enableCellTextSelection"))return;const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);o!=null&&o.editing||s!=null&&s.editing||(t.preventDefault(),e.copyToClipboard())}onCtrlAndX(e,t){if(!e||this.gos.get("enableCellTextSelection")||this.gos.get("suppressCutToClipboard"))return;const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);o!=null&&o.editing||s!=null&&s.editing||(t.preventDefault(),e.cutToClipboard(void 0,"ui"))}onCtrlAndV(e,t){const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);o!=null&&o.editing||s!=null&&s.editing||e&&!this.gos.get("suppressClipboardPaste")&&e.pasteFromClipboard()}onCtrlAndD(e,t){e&&!this.gos.get("suppressClipboardPaste")&&e.copyRangeDown(),t.preventDefault()}onCtrlAndZ(e,t){!this.gos.get("undoRedoCellEditing")||!e||(t.preventDefault(),t.shiftKey?e.redo("ui"):e.undo("ui"))}onCtrlAndY(e){e==null||e.redo("ui")}},bn=class extends v{constructor(e,t){super(),this.eContainer=e,this.eViewport=t}postConstruct(){this.addManagedEventListeners({rowContainerHeightChanged:this.onHeightChanged.bind(this,this.beans.rowContainerHeight)})}onHeightChanged(e){const t=e.uiContainerHeight,o=t!=null?`${t}px`:"";this.eContainer.style.height=o,this.eViewport&&(this.eViewport.style.height=o)}},ht=e=>e.topRowCtrls,ut=e=>e.getStickyTopRowCtrls(),gt=e=>e.getStickyBottomRowCtrls(),pt=e=>e.bottomRowCtrls,ft=e=>e.allRowCtrls,lo=e=>e.getCtrls("top"),ao=e=>e.getCtrls("center"),co=e=>e.getCtrls("bottom"),wd={center:{type:"center",name:"center-cols",getRowCtrls:ft,getSpannedRowCtrls:ao},left:{type:"left",name:"pinned-left-cols",pinnedType:"left",getRowCtrls:ft,getSpannedRowCtrls:ao},right:{type:"right",name:"pinned-right-cols",pinnedType:"right",getRowCtrls:ft,getSpannedRowCtrls:ao},fullWidth:{type:"fullWidth",name:"full-width",fullWidth:!0,getRowCtrls:ft},topCenter:{type:"center",name:"floating-top",getRowCtrls:ht,getSpannedRowCtrls:lo},topLeft:{type:"left",name:"pinned-left-floating",container:"ag-pinned-left-floating-top",pinnedType:"left",getRowCtrls:ht,getSpannedRowCtrls:lo},topRight:{type:"right",name:"pinned-right-floating",container:"ag-pinned-right-floating-top",pinnedType:"right",getRowCtrls:ht,getSpannedRowCtrls:lo},topFullWidth:{type:"fullWidth",name:"floating-top-full-width",fullWidth:!0,getRowCtrls:ht},stickyTopCenter:{type:"center",name:"sticky-top",getRowCtrls:ut},stickyTopLeft:{type:"left",name:"pinned-left-sticky-top",container:"ag-pinned-left-sticky-top",pinnedType:"left",getRowCtrls:ut},stickyTopRight:{type:"right",name:"pinned-right-sticky-top",container:"ag-pinned-right-sticky-top",pinnedType:"right",getRowCtrls:ut},stickyTopFullWidth:{type:"fullWidth",name:"sticky-top-full-width",fullWidth:!0,getRowCtrls:ut},stickyBottomCenter:{type:"center",name:"sticky-bottom",getRowCtrls:gt},stickyBottomLeft:{type:"left",name:"pinned-left-sticky-bottom",container:"ag-pinned-left-sticky-bottom",pinnedType:"left",getRowCtrls:gt},stickyBottomRight:{type:"right",name:"pinned-right-sticky-bottom",container:"ag-pinned-right-sticky-bottom",pinnedType:"right",getRowCtrls:gt},stickyBottomFullWidth:{type:"fullWidth",name:"sticky-bottom-full-width",fullWidth:!0,getRowCtrls:gt},bottomCenter:{type:"center",name:"floating-bottom",getRowCtrls:pt,getSpannedRowCtrls:co},bottomLeft:{type:"left",name:"pinned-left-floating-bottom",container:"ag-pinned-left-floating-bottom",pinnedType:"left",getRowCtrls:pt,getSpannedRowCtrls:co},bottomRight:{type:"right",name:"pinned-right-floating-bottom",container:"ag-pinned-right-floating-bottom",pinnedType:"right",getRowCtrls:pt,getSpannedRowCtrls:co},bottomFullWidth:{type:"fullWidth",name:"floating-bottom-full-width",fullWidth:!0,getRowCtrls:pt}};function Sn(e){return`ag-${rt(e).name}-viewport`}function Rt(e){const t=rt(e);return t.container??`ag-${t.name}-container`}function yd(e){return`ag-${rt(e).name}-spanned-cells-container`}function rt(e){return wd[e]}var bd=["topCenter","topLeft","topRight"],Sd=["bottomCenter","bottomLeft","bottomRight"],Rd=["center","left","right"],Fd=["center","left","right","fullWidth"],xd=["stickyTopCenter","stickyBottomCenter","center","topCenter","bottomCenter"],Dd=["left","bottomLeft","topLeft","stickyTopLeft","stickyBottomLeft"],Pd=["right","bottomRight","topRight","stickyTopRight","stickyBottomRight"],Rn=["stickyTopCenter","stickyTopLeft","stickyTopRight"],Fn=["stickyBottomCenter","stickyBottomLeft","stickyBottomRight"],Ed=[...Rn,"stickyTopFullWidth",...Fn,"stickyBottomFullWidth"],Td=[...bd,...Sd,...Rd,...Rn,...Fn],kd=class extends v{constructor(e){super(),this.name=e,this.visible=!0,this.EMPTY_CTRLS=[],this.options=rt(e)}postConstruct(){this.enableRtl=this.gos.get("enableRtl"),this.forContainers(["center"],()=>{this.viewportSizeFeature=this.createManagedBean(new ld(this)),this.addManagedEventListeners({stickyTopOffsetChanged:this.onStickyTopOffsetChanged.bind(this)})})}onStickyTopOffsetChanged(e){this.comp.setOffsetTop(`${e.offset}px`)}registerWithCtrlsService(){this.options.fullWidth||this.beans.ctrlsSvc.register(this.name,this)}forContainers(e,t){e.indexOf(this.name)>=0&&t()}setComp(e,t,o,s){this.comp=e,this.eContainer=t,this.eSpannedContainer=o,this.eViewport=s,this.createManagedBean(new vd(this.eViewport??this.eContainer)),this.addPreventScrollWhileDragging(),this.listenOnDomOrder();const{pinnedCols:i,rangeSvc:n}=this.beans,r=()=>this.onPinnedWidthChanged();this.forContainers(Dd,()=>{this.pinnedWidthFeature=this.createOptionalManagedBean(i==null?void 0:i.createPinnedWidthFeature(!0,this.eContainer,this.eSpannedContainer)),this.addManagedEventListeners({leftPinnedWidthChanged:r})}),this.forContainers(Pd,()=>{this.pinnedWidthFeature=this.createOptionalManagedBean(i==null?void 0:i.createPinnedWidthFeature(!1,this.eContainer,this.eSpannedContainer)),this.addManagedEventListeners({rightPinnedWidthChanged:r})}),this.forContainers(Fd,()=>this.createManagedBean(new bn(this.eContainer,this.name==="center"?s:void 0))),n&&this.forContainers(Td,()=>this.createManagedBean(n.createDragListenerFeature(this.eContainer))),this.forContainers(xd,()=>this.createManagedBean(new jo(l=>this.comp.setContainerWidth(`${l}px`)))),this.visible=this.isContainerVisible(),this.addListeners(),this.registerWithCtrlsService()}onScrollCallback(e){this.addManagedElementListeners(this.eViewport,{scroll:e})}addListeners(){const{spannedRowRenderer:e,gos:t}=this.beans,o=this.onDisplayedColumnsChanged.bind(this);this.addManagedEventListeners({displayedColumnsChanged:o,displayedColumnsWidthChanged:o,displayedRowsChanged:s=>this.onDisplayedRowsChanged(s.afterScroll)}),o(),this.onDisplayedRowsChanged(),e&&this.options.getSpannedRowCtrls&&t.get("enableCellSpan")&&this.addManagedListeners(e,{spannedRowsUpdated:()=>{const s=this.options.getSpannedRowCtrls(e);s&&this.comp.setSpannedRowCtrls(s,!1)}})}listenOnDomOrder(){if(Ed.indexOf(this.name)>=0){this.comp.setDomOrder(!0);return}const t=()=>{const o=this.gos.get("ensureDomOrder"),s=$(this.gos,"print");this.comp.setDomOrder(o||s)};this.addManagedPropertyListener("domLayout",t),t()}onDisplayedColumnsChanged(){this.forContainers(["center"],()=>this.onHorizontalViewportChanged())}addPreventScrollWhileDragging(){const{dragSvc:e}=this.beans;if(!e)return;const t=o=>{e.dragging&&o.cancelable&&o.preventDefault()};this.eContainer.addEventListener("touchmove",t,{passive:!1}),this.addDestroyFunc(()=>this.eContainer.removeEventListener("touchmove",t))}onHorizontalViewportChanged(e=!1){const t=this.getCenterWidth(),o=this.getCenterViewportScrollLeft();this.beans.colViewport.setScrollPosition(t,o,e)}hasHorizontalScrollGap(){return this.eContainer.clientWidth-this.eViewport.clientWidth<0}hasVerticalScrollGap(){return this.eContainer.clientHeight-this.eViewport.clientHeight<0}getCenterWidth(){return xt(this.eViewport)}getCenterViewportScrollLeft(){return Dt(this.eViewport,this.enableRtl)}registerViewportResizeListener(e){const t=nt(this.beans,this.eViewport,e);this.addDestroyFunc(()=>t())}isViewportInTheDOMTree(){return bi(this.eViewport)}getViewportScrollLeft(){return Dt(this.eViewport,this.enableRtl)}isHorizontalScrollShowing(){return this.gos.get("alwaysShowHorizontalScroll")||Mr(this.eViewport)}setHorizontalScroll(e){this.comp.setHorizontalScroll(e)}getHScrollPosition(){return{left:this.eViewport.scrollLeft,right:this.eViewport.scrollLeft+this.eViewport.offsetWidth}}setCenterViewportScrollLeft(e){Pt(this.eViewport,e,this.enableRtl)}isContainerVisible(){return!(this.options.pinnedType!=null)||!!this.pinnedWidthFeature&&this.pinnedWidthFeature.getWidth()>0}onPinnedWidthChanged(){const e=this.isContainerVisible();this.visible!=e&&(this.visible=e,this.onDisplayedRowsChanged())}onDisplayedRowsChanged(e=!1){const t=this.options.getRowCtrls(this.beans.rowRenderer);if(!this.visible||t.length===0){this.comp.setRowCtrls({rowCtrls:this.EMPTY_CTRLS});return}const o=$(this.gos,"print"),i=this.gos.get("embedFullWidthRows")||o,n=t.filter(r=>{const l=r.isFullWidth();return this.options.fullWidth?!i&&l:i||!l});this.comp.setRowCtrls({rowCtrls:n,useFlushSync:e})}},xn="ag-force-vertical-scroll",Id="ag-selectable",Ld="ag-column-moving",Md=class extends v{constructor(){super(...arguments),this.stickyTopHeight=0,this.stickyBottomHeight=0}wireBeans(e){this.ctrlsSvc=e.ctrlsSvc,this.colModel=e.colModel,this.scrollVisibleSvc=e.scrollVisibleSvc,this.pinnedRowModel=e.pinnedRowModel,this.filterManager=e.filterManager,this.rowGroupColsSvc=e.rowGroupColsSvc}setComp(e,t,o,s,i,n,r){var l,a;this.comp=e,this.eGridBody=t,this.eBodyViewport=o,this.eTop=s,this.eBottom=i,this.eStickyTop=n,this.eStickyBottom=r,this.eCenterColsViewport=o.querySelector(`.${Sn("center")}`),this.eFullWidthContainer=o.querySelector(`.${Rt("fullWidth")}`),this.eStickyTopFullWidthContainer=n.querySelector(`.${Rt("stickyTopFullWidth")}`),this.eStickyBottomFullWidthContainer=r.querySelector(`.${Rt("stickyBottomFullWidth")}`),this.setCellTextSelection(this.gos.get("enableCellTextSelection")),this.addManagedPropertyListener("enableCellTextSelection",d=>this.setCellTextSelection(d.currentValue)),this.createManagedBean(new Ko(this.comp)),this.scrollFeature=this.createManagedBean(new rd(o)),(l=this.beans.rowDragSvc)==null||l.setupRowDrag(o,this),this.setupRowAnimationCssClass(),this.addEventListeners(),this.addFocusListeners([s,o,i,n,r]),this.setGridRootRole(),this.onGridColumnsChanged(),this.addBodyViewportListener(),this.setFloatingHeights(),this.disableBrowserDragging(),this.addStopEditingWhenGridLosesFocus(),this.updateScrollingClasses(),(a=this.filterManager)==null||a.setupAdvFilterHeaderComp(s),this.ctrlsSvc.register("gridBodyCtrl",this)}addEventListeners(){const e=this.setFloatingHeights.bind(this),t=this.setGridRootRole.bind(this),o=this.toggleRowResizeStyles.bind(this);this.addManagedEventListeners({gridColumnsChanged:this.onGridColumnsChanged.bind(this),scrollVisibilityChanged:this.onScrollVisibilityChanged.bind(this),scrollGapChanged:this.updateScrollingClasses.bind(this),pinnedRowDataChanged:e,pinnedHeightChanged:e,pinnedRowsChanged:e,headerHeightChanged:this.setStickyTopOffsetTop.bind(this),columnRowGroupChanged:t,columnPivotChanged:t,rowResizeStarted:o,rowResizeEnded:o}),this.addManagedPropertyListener("treeData",t)}toggleRowResizeStyles(e){const t=e.type==="rowResizeStarted";this.eBodyViewport.classList.toggle("ag-prevent-animation",t)}onGridColumnsChanged(){const e=this.beans.colModel.getCols();this.comp.setColumnCount(e.length)}onScrollVisibilityChanged(){const{scrollVisibleSvc:e}=this,t=e.verticalScrollShowing;this.setVerticalScrollPaddingVisible(t),this.setStickyWidth(t),this.setStickyBottomOffsetBottom();const o=t&&e.getScrollbarWidth()||0,s=mi()?16:0,i=`calc(100% + ${o+s}px)`;be(this.beans,()=>this.comp.setBodyViewportWidth(i)),this.updateScrollingClasses()}setGridRootRole(){const{rowGroupColsSvc:e,colModel:t}=this;let o=this.gos.get("treeData");if(!o){const s=t.isPivotMode();o=(e?e.columns.length:0)>=(s?2:1)}this.comp.setGridRootRole(o?"treegrid":"grid")}addFocusListeners(e){e.forEach(t=>{this.addManagedElementListeners(t,{focusin:o=>{const{target:s}=o,i=Ie(s,"ag-root",t);t.classList.toggle("ag-has-focus",!i)},focusout:o=>{const{target:s,relatedTarget:i}=o,n=t.contains(i),r=Ie(i,"ag-root",t);Ie(s,"ag-root",t)||(!n||r)&&t.classList.remove("ag-has-focus")}})})}setColumnMovingCss(e){this.comp.setColumnMovingCss(Ld,e)}setCellTextSelection(e=!1){this.comp.setCellSelectableCss(Id,e)}updateScrollingClasses(){const{eGridBody:{classList:e},scrollVisibleSvc:t}=this;e.toggle("ag-body-vertical-content-no-gap",!t.verticalScrollGap),e.toggle("ag-body-horizontal-content-no-gap",!t.horizontalScrollGap)}disableBrowserDragging(){this.addManagedElementListeners(this.eGridBody,{dragstart:e=>{if(e.target instanceof HTMLImageElement)return e.preventDefault(),!1}})}addStopEditingWhenGridLosesFocus(){var e;(e=this.beans.editSvc)==null||e.addStopEditingWhenGridLosesFocus([this.eBodyViewport,this.eBottom,this.eTop,this.eStickyTop,this.eStickyBottom])}updateRowCount(){var i,n;const e=(((i=this.ctrlsSvc.getHeaderRowContainerCtrl())==null?void 0:i.getRowCount())??0)+(((n=this.filterManager)==null?void 0:n.getHeaderRowCount())??0),{rowModel:t}=this.beans,o=t.isLastRowIndexKnown()?t.getRowCount():-1,s=o===-1?-1:e+o;this.comp.setRowCount(s)}registerBodyViewportResizeListener(e){this.comp.registerBodyViewportResizeListener(e)}setVerticalScrollPaddingVisible(e){const t=e?"scroll":"hidden";this.comp.setPinnedTopBottomOverflowY(t)}isVerticalScrollShowing(){const e=this.gos.get("alwaysShowVerticalScroll"),t=e?xn:null,o=$(this.gos,"normal");return this.comp.setAlwaysVerticalScrollClass(t,e),e||o&&Ar(this.eBodyViewport)}setupRowAnimationCssClass(){const{rowContainerHeight:e,environment:t}=this.beans;let o=t.sizesMeasured;const s=()=>{const i=o&&zo(this.gos)&&!e.stretching,n=i?"ag-row-animation":"ag-row-no-animation";this.comp.setRowAnimationCssOnBodyViewport(n,i)};s(),this.addManagedEventListeners({heightScaleChanged:s}),this.addManagedPropertyListener("animateRows",s),this.addManagedEventListeners({gridStylesChanged:()=>{!o&&t.sizesMeasured&&(o=!0,s())}})}addBodyViewportListener(){const{eBodyViewport:e,eStickyTop:t,eStickyBottom:o,eTop:s,eBottom:i,beans:{popupSvc:n,touchSvc:r}}=this,l=this.onBodyViewportContextMenu.bind(this);this.addManagedElementListeners(e,{contextmenu:l}),r==null||r.mockBodyContextMenu(this,l),this.addManagedElementListeners(e,{wheel:this.onBodyViewportWheel.bind(this,n)});const a=this.onStickyWheel.bind(this);for(const c of[t,o,s,i])this.addManagedElementListeners(c,{wheel:a});const d=this.onHorizontalWheel.bind(this);for(const c of["left","right","topLeft","topRight","bottomLeft","bottomRight"])this.addManagedElementListeners(this.ctrlsSvc.get(c).eContainer,{wheel:d});this.addFullWidthContainerWheelListener()}addFullWidthContainerWheelListener(){this.addManagedElementListeners(this.eFullWidthContainer,{wheel:e=>this.onFullWidthContainerWheel(e)})}onFullWidthContainerWheel(e){const{deltaX:t,deltaY:o,shiftKey:s}=e;(s||Math.abs(t)>Math.abs(o))&&tt(this.gos,e)&&this.scrollGridBodyToMatchEvent(e)}onStickyWheel(e){const{deltaY:t}=e;e.preventDefault(),this.scrollVertically(t)}onHorizontalWheel(e){const{deltaX:t,deltaY:o,shiftKey:s}=e;(s||Math.abs(t)>Math.abs(o))&&this.scrollGridBodyToMatchEvent(e)}scrollGridBodyToMatchEvent(e){const{deltaX:t,deltaY:o}=e;e.preventDefault(),this.eCenterColsViewport.scrollBy({left:t||o})}onBodyViewportContextMenu(e,t,o){var i;if(!e&&!o)return;this.gos.get("preventDefaultOnContextMenu")&&(e||o).preventDefault();const{target:s}=e||t;(s===this.eBodyViewport||s===this.ctrlsSvc.get("center").eViewport)&&((i=this.beans.contextMenuSvc)==null||i.showContextMenu({mouseEvent:e,touchEvent:o,value:null,anchorToElement:this.eGridBody,source:"ui"}))}onBodyViewportWheel(e,t){this.gos.get("suppressScrollWhenPopupsAreOpen")&&e!=null&&e.hasAnchoredPopup()&&t.preventDefault()}scrollVertically(e){const t=this.eBodyViewport.scrollTop;return this.scrollFeature.setVerticalScrollPosition(t+e),this.eBodyViewport.scrollTop-t}setFloatingHeights(){const{pinnedRowModel:e,beans:{environment:t}}=this,o=e==null?void 0:e.getPinnedTopTotalHeight(),s=e==null?void 0:e.getPinnedBottomTotalHeight(),i=t.getPinnedRowBorderWidth(),n=t.getRowBorderWidth(),r=i-n,l=o?r+o:0,a=s?r+s:0;this.comp.setTopHeight(l),this.comp.setBottomHeight(a),this.comp.setTopInvisible(l<=0),this.comp.setBottomInvisible(a<=0),this.setStickyTopOffsetTop(),this.setStickyBottomOffsetBottom()}setStickyTopHeight(e=0){this.comp.setStickyTopHeight(`${e}px`),this.stickyTopHeight=e}setStickyBottomHeight(e=0){this.comp.setStickyBottomHeight(`${e}px`),this.stickyBottomHeight=e}setStickyWidth(e){if(!e)this.comp.setStickyTopWidth("100%"),this.comp.setStickyBottomWidth("100%");else{const t=this.scrollVisibleSvc.getScrollbarWidth();this.comp.setStickyTopWidth(`calc(100% - ${t}px)`),this.comp.setStickyBottomWidth(`calc(100% - ${t}px)`)}}setStickyTopOffsetTop(){var i,n;const t=this.ctrlsSvc.get("gridHeaderCtrl").headerHeight+(((i=this.filterManager)==null?void 0:i.getHeaderHeight())??0),o=((n=this.pinnedRowModel)==null?void 0:n.getPinnedTopTotalHeight())??0;let s=0;t>0&&(s+=t),o>0&&(s+=o),s>0&&(s+=1),this.comp.setStickyTopTop(`${s}px`)}setStickyBottomOffsetBottom(){const{pinnedRowModel:e,scrollVisibleSvc:t,comp:o}=this,s=(e==null?void 0:e.getPinnedBottomTotalHeight())??0,n=t.horizontalScrollShowing&&t.getScrollbarWidth()||0,r=s+n;o.setStickyBottomBottom(`${r}px`)}},Dn=class extends N{constructor(e,t){super(),this.direction=t,this.eViewport=x,this.eContainer=x,this.hideTimeout=0,this.setTemplate(e)}postConstruct(){this.addManagedEventListeners({scrollVisibilityChanged:this.onScrollVisibilityChanged.bind(this)}),this.onScrollVisibilityChanged(),this.toggleCss("ag-apple-scrollbar",fi()||Ze())}destroy(){super.destroy(),window.clearTimeout(this.hideTimeout)}initialiseInvisibleScrollbar(){this.invisibleScrollbar===void 0&&(this.invisibleScrollbar=mi(),this.invisibleScrollbar&&(this.hideAndShowInvisibleScrollAsNeeded(),this.addActiveListenerToggles()))}addActiveListenerToggles(){const e=this.getGui(),t=()=>this.toggleCss("ag-scrollbar-active",!0),o=()=>this.toggleCss("ag-scrollbar-active",!1);this.addManagedListeners(e,{mouseenter:t,mousedown:t,touchstart:t,mouseleave:o,touchend:o})}onScrollVisibilityChanged(){this.invisibleScrollbar===void 0&&this.initialiseInvisibleScrollbar(),be(this.beans,()=>this.setScrollVisible())}hideAndShowInvisibleScrollAsNeeded(){this.addManagedEventListeners({bodyScroll:e=>{e.direction===this.direction&&(this.hideTimeout&&(window.clearTimeout(this.hideTimeout),this.hideTimeout=0),this.toggleCss("ag-scrollbar-scrolling",!0))},bodyScrollEnd:()=>{this.hideTimeout=window.setTimeout(()=>{this.toggleCss("ag-scrollbar-scrolling",!1),this.hideTimeout=0},400)}})}attemptSettingScrollPosition(e){const t=this.eViewport;Or(()=>De(t),()=>this.setScrollPosition(e),100)}onScrollCallback(e){this.addManagedElementListeners(this.eViewport,{scroll:e})}},Ad={tag:"div",cls:"ag-body-horizontal-scroll",attrs:{"aria-hidden":"true"},children:[{tag:"div",ref:"eLeftSpacer",cls:"ag-horizontal-left-spacer"},{tag:"div",ref:"eViewport",cls:"ag-body-horizontal-scroll-viewport",children:[{tag:"div",ref:"eContainer",cls:"ag-body-horizontal-scroll-container"}]},{tag:"div",ref:"eRightSpacer",cls:"ag-horizontal-right-spacer"}]},Hd=class extends Dn{constructor(){super(Ad,"horizontal"),this.eLeftSpacer=x,this.eRightSpacer=x,this.setScrollVisibleDebounce=0}wireBeans(e){this.visibleCols=e.visibleCols,this.scrollVisibleSvc=e.scrollVisibleSvc}postConstruct(){super.postConstruct();const e=this.setFakeHScrollSpacerWidths.bind(this);this.addManagedEventListeners({displayedColumnsChanged:e,displayedColumnsWidthChanged:e,pinnedRowDataChanged:this.refreshCompBottom.bind(this)}),this.addManagedPropertyListener("domLayout",e),this.beans.ctrlsSvc.register("fakeHScrollComp",this),this.createManagedBean(new jo(t=>this.eContainer.style.width=`${t}px`)),this.addManagedPropertyListeners(["suppressHorizontalScroll"],this.onScrollVisibilityChanged.bind(this))}destroy(){window.clearTimeout(this.setScrollVisibleDebounce),super.destroy()}initialiseInvisibleScrollbar(){this.invisibleScrollbar===void 0&&(this.enableRtl=this.gos.get("enableRtl"),super.initialiseInvisibleScrollbar(),this.invisibleScrollbar&&this.refreshCompBottom())}refreshCompBottom(){var t;if(!this.invisibleScrollbar)return;const e=((t=this.beans.pinnedRowModel)==null?void 0:t.getPinnedBottomTotalHeight())??0;this.getGui().style.bottom=`${e}px`}onScrollVisibilityChanged(){super.onScrollVisibilityChanged(),this.setFakeHScrollSpacerWidths()}setFakeHScrollSpacerWidths(){const e=this.scrollVisibleSvc.verticalScrollShowing;let t=this.visibleCols.getDisplayedColumnsRightWidth();const o=!this.enableRtl&&e,s=this.scrollVisibleSvc.getScrollbarWidth();o&&(t+=s),me(this.eRightSpacer,t),this.eRightSpacer.classList.toggle("ag-scroller-corner",t<=s);let i=this.visibleCols.getColsLeftWidth();this.enableRtl&&e&&(i+=s),me(this.eLeftSpacer,i),this.eLeftSpacer.classList.toggle("ag-scroller-corner",i<=s)}setScrollVisible(){const e=this.scrollVisibleSvc.horizontalScrollShowing,t=this.invisibleScrollbar,o=this.gos.get("suppressHorizontalScroll"),s=e&&this.scrollVisibleSvc.getScrollbarWidth()||0,n=o?0:s===0&&t?16:s,r=()=>{this.setScrollVisibleDebounce=0,this.toggleCss("ag-scrollbar-invisible",t),so(this.getGui(),n),so(this.eViewport,n),so(this.eContainer,n),n||this.eContainer.style.setProperty("min-height","1px"),this.setVisible(e,{skipAriaHidden:!0})};window.clearTimeout(this.setScrollVisibleDebounce),e?this.setScrollVisibleDebounce=window.setTimeout(r,100):r()}getScrollPosition(){return Dt(this.eViewport,this.enableRtl)}setScrollPosition(e){De(this.eViewport)||this.attemptSettingScrollPosition(e),Pt(this.eViewport,e,this.enableRtl)}},Gd={selector:"AG-FAKE-HORIZONTAL-SCROLL",component:Hd},Bd={tag:"div",cls:"ag-body-vertical-scroll",attrs:{"aria-hidden":"true"},children:[{tag:"div",ref:"eViewport",cls:"ag-body-vertical-scroll-viewport",children:[{tag:"div",ref:"eContainer",cls:"ag-body-vertical-scroll-container"}]}]},Od=class extends Dn{constructor(){super(Bd,"vertical")}postConstruct(){super.postConstruct(),this.createManagedBean(new bn(this.eContainer));const{ctrlsSvc:e}=this.beans;e.register("fakeVScrollComp",this),this.addManagedEventListeners({rowContainerHeightChanged:this.onRowContainerHeightChanged.bind(this,e)})}setScrollVisible(){const{scrollVisibleSvc:e}=this.beans,t=e.verticalScrollShowing,o=this.invisibleScrollbar,s=t&&e.getScrollbarWidth()||0,i=s===0&&o?16:s;this.toggleCss("ag-scrollbar-invisible",o),me(this.getGui(),i),me(this.eViewport,i),me(this.eContainer,i),this.setDisplayed(t,{skipAriaHidden:!0})}onRowContainerHeightChanged(e){const o=e.getGridBodyCtrl().eBodyViewport,s=this.getScrollPosition(),i=o.scrollTop;s!=i&&this.setScrollPosition(i,!0)}getScrollPosition(){return this.eViewport.scrollTop}setScrollPosition(e,t){!t&&!De(this.eViewport)&&this.attemptSettingScrollPosition(e),this.eViewport.scrollTop=e}},Wd={selector:"AG-FAKE-VERTICAL-SCROLL",component:Od};function Vd(e){return e.cols?e.cols.treeDepth+1:-1}function ie(e){var t;return((t=e.ctrlsSvc.getHeaderRowContainerCtrl())==null?void 0:t.getRowCount())??0}function $o(e){const t=[],o=e.ctrlsSvc.getHeaderRowContainerCtrls();for(const s of o){if(!s)continue;const i=s.getGroupRowCount()||0;for(let n=0;nl)&&(t[n]=a)}}}return t}function Nd(e,t){let s=e.colModel.isPivotMode()?_d(e):En(e);const i=t.getHeaderCellCtrls();for(const n of i){const{column:r}=n,l=r.getAutoHeaderHeight();l!=null&&l>s&&r.isAutoHeaderHeight()&&(s=l)}return s}function qo(e){let o=e.colModel.isPivotMode()?zd(e):qt(e);return e.colModel.forAllCols(s=>{const i=s.getAutoHeaderHeight();i!=null&&i>o&&s.isAutoHeaderHeight()&&(o=i)}),o}function qt(e){return e.gos.get("headerHeight")??e.environment.getDefaultHeaderHeight()}function Pn(e){return e.gos.get("floatingFiltersHeight")??qt(e)}function En(e){return e.gos.get("groupHeaderHeight")??qt(e)}function zd(e){return e.gos.get("pivotHeaderHeight")??qt(e)}function _d(e){return e.gos.get("pivotGroupHeaderHeight")??En(e)}var Ud=class extends v{setComp(e,t,o){this.comp=e,this.eGui=t;const{beans:s}=this,{headerNavigation:i,touchSvc:n,ctrlsSvc:r}=s;i&&this.createManagedBean(new $t(o,{onTabKeyDown:this.onTabKeyDown.bind(this),handleKeyDown:this.handleKeyDown.bind(this),onFocusOut:this.onFocusOut.bind(this)})),this.addManagedEventListeners({columnPivotModeChanged:this.onPivotModeChanged.bind(this,s),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this,s)}),this.onPivotModeChanged(s),this.setupHeaderHeight();const l=this.onHeaderContextMenu.bind(this);this.addManagedElementListeners(this.eGui,{contextmenu:l}),n==null||n.mockHeaderContextMenu(this,l),r.register("gridHeaderCtrl",this)}setupHeaderHeight(){const e=this.setHeaderHeight.bind(this);e(),this.addManagedPropertyListeners(["headerHeight","pivotHeaderHeight","groupHeaderHeight","pivotGroupHeaderHeight","floatingFiltersHeight"],e),this.addManagedEventListeners({displayedColumnsChanged:e,columnHeaderHeightChanged:e,columnGroupHeaderHeightChanged:()=>be(this.beans,()=>e()),gridStylesChanged:e,advancedFilterEnabledChanged:e})}setHeaderHeight(){var n;const{beans:e}=this;let t=0;const o=$o(e).reduce((r,l)=>r+l,0),s=qo(e);if((n=e.filterManager)!=null&&n.hasFloatingFilters()&&(t+=Pn(e)),t+=o,t+=s,this.headerHeight===t)return;this.headerHeight=t;const i=`${t+1}px`;this.comp.setHeightAndMinHeight(i),this.eventSvc.dispatchEvent({type:"headerHeightChanged"})}onPivotModeChanged(e){const t=e.colModel.isPivotMode();this.comp.toggleCss("ag-pivot-on",t),this.comp.toggleCss("ag-pivot-off",!t)}onDisplayedColumnsChanged(e){const o=e.visibleCols.allCols.some(s=>s.isSpanHeaderHeight());this.comp.toggleCss("ag-header-allow-overflow",o)}onTabKeyDown(e){const t=this.gos.get("enableRtl"),o=e.shiftKey,s=o!==t?"LEFT":"RIGHT",{beans:i}=this,{headerNavigation:n,focusSvc:r}=i;(n.navigateHorizontally(s,!0,e)||!o&&r.focusOverlay(!1)||et(i,o,!0))&&e.preventDefault()}handleKeyDown(e){let t=null;const{headerNavigation:o}=this.beans;switch(e.key){case m.LEFT:t="LEFT";case m.RIGHT:{k(t)||(t="RIGHT"),o.navigateHorizontally(t,!1,e)&&e.preventDefault();break}case m.UP:t="UP";case m.DOWN:{k(t)||(t="DOWN"),o.navigateVertically(t,null,e)&&e.preventDefault();break}default:return}}onFocusOut(e){const{relatedTarget:t}=e,{eGui:o,beans:s}=this;!t&&o.contains(z(s))||o.contains(t)||(s.focusSvc.focusedHeader=null)}onHeaderContextMenu(e,t,o){var r;const{menuSvc:s,ctrlsSvc:i}=this.beans;if(!e&&!o||!(s!=null&&s.isHeaderContextMenuEnabled()))return;const{target:n}=e??t;(n===this.eGui||n===((r=i.getHeaderRowContainerCtrl())==null?void 0:r.eViewport))&&s.showHeaderContextMenu(void 0,e,o)}},Zo=class extends N{constructor(e,t){super(e),this.ctrl=t}getCtrl(){return this.ctrl}},Kd={tag:"div",cls:"ag-header-cell",role:"columnheader",children:[{tag:"div",ref:"eResize",cls:"ag-header-cell-resize",role:"presentation"},{tag:"div",ref:"eHeaderCompWrapper",cls:"ag-header-cell-comp-wrapper",role:"presentation"}]},jd=class extends Zo{constructor(e){super(Kd,e),this.eResize=x,this.eHeaderCompWrapper=x,this.headerCompVersion=0}postConstruct(){const e=this.getGui();((i,n)=>{n!=null&&n!=""?e.setAttribute(i,n):e.removeAttribute(i)})("col-id",this.ctrl.column.getColId());const o={setWidth:i=>e.style.width=i,toggleCss:(i,n)=>this.toggleCss(i,n),setUserStyles:i=>it(e,i),setAriaSort:i=>i?Fr(e,i):xr(e),setUserCompDetails:i=>this.setUserCompDetails(i),getUserCompInstance:()=>this.headerComp};this.ctrl.setComp(o,this.getGui(),this.eResize,this.eHeaderCompWrapper,void 0);const s=this.ctrl.getSelectAllGui();s&&this.eResize.insertAdjacentElement("afterend",s)}destroy(){this.destroyHeaderComp(),super.destroy()}destroyHeaderComp(){this.headerComp&&(this.eHeaderCompWrapper.removeChild(this.headerCompGui),this.headerComp=this.destroyBean(this.headerComp),this.headerCompGui=void 0)}setUserCompDetails(e){this.headerCompVersion++;const t=this.headerCompVersion;e.newAgStackInstance().then(o=>this.afterCompCreated(t,o))}afterCompCreated(e,t){if(e!=this.headerCompVersion||!this.isAlive()){this.destroyBean(t);return}this.destroyHeaderComp(),this.headerComp=t,this.headerCompGui=t.getGui(),this.eHeaderCompWrapper.appendChild(this.headerCompGui),this.ctrl.setDragSource(this.getGui())}},$d={tag:"div",cls:"ag-header-group-cell",role:"columnheader",children:[{tag:"div",ref:"eHeaderCompWrapper",cls:"ag-header-cell-comp-wrapper",role:"presentation"},{tag:"div",ref:"eResize",cls:"ag-header-cell-resize",role:"presentation"}]},qd=class extends Zo{constructor(e){super($d,e),this.eResize=x,this.eHeaderCompWrapper=x}postConstruct(){const e=this.getGui(),t=(s,i)=>i!=null?e.setAttribute(s,i):e.removeAttribute(s);e.setAttribute("col-id",this.ctrl.column.getUniqueId());const o={toggleCss:(s,i)=>this.toggleCss(s,i),setUserStyles:s=>it(e,s),setHeaderWrapperHidden:s=>{s?this.eHeaderCompWrapper.style.setProperty("display","none"):this.eHeaderCompWrapper.style.removeProperty("display")},setHeaderWrapperMaxHeight:s=>{s!=null?this.eHeaderCompWrapper.style.setProperty("max-height",`${s}px`):this.eHeaderCompWrapper.style.removeProperty("max-height"),this.eHeaderCompWrapper.classList.toggle("ag-header-cell-comp-wrapper-limited-height",s!=null)},setResizableDisplayed:s=>W(this.eResize,s),setWidth:s=>e.style.width=s,setAriaExpanded:s=>t("aria-expanded",s),setUserCompDetails:s=>this.setUserCompDetails(s),getUserCompInstance:()=>this.headerGroupComp};this.ctrl.setComp(o,e,this.eResize,this.eHeaderCompWrapper,void 0)}setUserCompDetails(e){e.newAgStackInstance().then(t=>this.afterHeaderCompCreated(t))}afterHeaderCompCreated(e){const t=()=>this.destroyBean(e);if(!this.isAlive()){t();return}const o=this.getGui(),s=e.getGui();this.eHeaderCompWrapper.appendChild(s),this.addDestroyFunc(t),this.headerGroupComp=e,this.ctrl.setDragSource(o)}addOrRemoveHeaderWrapperStyle(e,t){const{eHeaderCompWrapper:o}=this;t?o.style.setProperty(e,t):o.style.removeProperty(e)}},Zd={tag:"div",cls:"ag-header-cell ag-floating-filter",role:"gridcell",children:[{tag:"div",ref:"eFloatingFilterBody",role:"presentation"},{tag:"div",ref:"eButtonWrapper",cls:"ag-floating-filter-button ag-hidden",role:"presentation",children:[{tag:"button",ref:"eButtonShowMainFilter",cls:"ag-button ag-floating-filter-button-button",attrs:{type:"button",tabindex:"-1"}}]}]},Yd=class extends Zo{constructor(e){super(Zd,e),this.eFloatingFilterBody=x,this.eButtonWrapper=x,this.eButtonShowMainFilter=x}postConstruct(){const e=this.getGui(),t={toggleCss:(o,s)=>this.toggleCss(o,s),setUserStyles:o=>it(e,o),addOrRemoveBodyCssClass:(o,s)=>this.eFloatingFilterBody.classList.toggle(o,s),setButtonWrapperDisplayed:o=>W(this.eButtonWrapper,o),setCompDetails:o=>this.setCompDetails(o),getFloatingFilterComp:()=>this.compPromise,setWidth:o=>e.style.width=o,setMenuIcon:o=>this.eButtonShowMainFilter.appendChild(o)};this.ctrl.setComp(t,e,this.eButtonShowMainFilter,this.eFloatingFilterBody,void 0)}setCompDetails(e){if(!e){this.destroyFloatingFilterComp(),this.compPromise=null;return}this.compPromise=e.newAgStackInstance(),this.compPromise.then(t=>this.afterCompCreated(t))}destroy(){this.destroyFloatingFilterComp(),super.destroy()}destroyFloatingFilterComp(){this.floatingFilterComp&&(this.eFloatingFilterBody.removeChild(this.floatingFilterComp.getGui()),this.floatingFilterComp=this.destroyBean(this.floatingFilterComp))}afterCompCreated(e){if(e){if(!this.isAlive()){this.destroyBean(e);return}this.destroyFloatingFilterComp(),this.floatingFilterComp=e,this.eFloatingFilterBody.appendChild(e.getGui()),e.afterGuiAttached&&e.afterGuiAttached()}}},Qd=class extends N{constructor(e){super({tag:"div",cls:e.headerRowClass,role:"row"}),this.ctrl=e,this.headerComps={}}postConstruct(){ui(this.getGui(),this.ctrl.getAriaRowIndex());const e={setHeight:t=>this.getGui().style.height=t,setTop:t=>this.getGui().style.top=t,setHeaderCtrls:(t,o)=>this.setHeaderCtrls(t,o),setWidth:t=>this.getGui().style.width=t};this.ctrl.setComp(e,void 0)}destroy(){this.setHeaderCtrls([],!1),super.destroy()}setHeaderCtrls(e,t){if(!this.isAlive())return;const o=this.headerComps;if(this.headerComps={},e.forEach(s=>{const i=s.instanceId;let n=o[i];delete o[i],n==null&&(n=this.createHeaderComp(s),this.getGui().appendChild(n.getGui())),this.headerComps[i]=n}),Object.values(o).forEach(s=>{this.getGui().removeChild(s.getGui()),this.destroyBean(s)}),t){const s=Object.values(this.headerComps);s.sort((n,r)=>{const l=n.getCtrl().column.getLeft(),a=r.getCtrl().column.getLeft();return l-a});const i=s.map(n=>n.getGui());Ri(this.getGui(),i)}}createHeaderComp(e){let t;switch(this.ctrl.type){case"group":t=new qd(e);break;case"filter":t=new Yd(e);break;default:t=new jd(e);break}return this.createBean(t),t.setParentComponent(this),t}},Tn=class extends v{constructor(e,t,o,s){super(),this.columnOrGroup=e,this.eCell=t,this.colsSpanning=s,this.columnOrGroup=e,this.ariaEl=t.querySelector("[role=columnheader]")||t,this.beans=o}setColsSpanning(e){this.colsSpanning=e,this.onLeftChanged()}getColumnOrGroup(){const{beans:e,colsSpanning:t}=this;return e.gos.get("enableRtl")&&t?H(t):this.columnOrGroup}postConstruct(){const e=this.onLeftChanged.bind(this);this.addManagedListeners(this.columnOrGroup,{leftChanged:e}),this.setLeftFirstTime(),this.addManagedEventListeners({displayedColumnsWidthChanged:e}),this.addManagedPropertyListener("domLayout",e)}setLeftFirstTime(){const{gos:e,colAnimation:t}=this.beans,o=e.get("suppressColumnMoveAnimation"),s=k(this.columnOrGroup.getOldLeft());(t==null?void 0:t.isActive())&&s&&!o?this.animateInLeft():this.onLeftChanged()}animateInLeft(){const e=this.getColumnOrGroup(),t=this.modifyLeftForPrintLayout(e,e.getOldLeft()),o=this.modifyLeftForPrintLayout(e,e.getLeft());this.setLeft(t),this.actualLeft=o,this.beans.colAnimation.executeNextVMTurn(()=>{this.actualLeft===o&&this.setLeft(o)})}onLeftChanged(){const e=this.getColumnOrGroup(),t=e.getLeft();this.actualLeft=this.modifyLeftForPrintLayout(e,t),this.setLeft(this.actualLeft)}modifyLeftForPrintLayout(e,t){const{gos:o,visibleCols:s}=this.beans;if(!$(o,"print")||e.getPinned()==="left")return t;const n=s.getColsLeftWidth();if(e.getPinned()==="right"){const r=s.bodyWidth;return n+r+t}return n+t}setLeft(e){if(k(e)&&(this.eCell.style.left=`${e}px`),O(this.columnOrGroup)){const t=this.columnOrGroup.getLeafColumns();if(!t.length)return;t.length>1&&Rr(this.ariaEl,t.length)}}},Xd=0,kn="headerCtrl",In=class extends v{constructor(e,t){super(),this.column=e,this.rowCtrl=t,this.resizeToggleTimeout=0,this.resizeMultiplier=1,this.resizeFeature=null,this.lastFocusEvent=null,this.dragSource=null,this.instanceId=e.getUniqueId()+"-"+Xd++}postConstruct(){const e=this.refreshTabIndex.bind(this);this.addManagedPropertyListeners(["suppressHeaderFocus"],e),this.addManagedEventListeners({overlayExclusiveChanged:e})}shouldStopEventPropagation(e){const{headerRowIndex:t,column:o}=this.beans.focusSvc.focusedHeader,s=o.getDefinition(),i=s&&s.suppressHeaderKeyboardEvent;if(!k(i))return!1;const n=A(this.gos,{colDef:s,column:o,headerRowIndex:t,event:e});return!!i(n)}getWrapperHasFocus(){return z(this.beans)===this.eGui}setGui(e,t){this.eGui=e,this.addDomData(t),t.addManagedListeners(this.beans.eventSvc,{displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this)}),t.addManagedElementListeners(this.eGui,{focus:this.onGuiFocus.bind(this)}),this.onDisplayedColumnsChanged(),this.refreshTabIndex()}refreshHeaderStyles(){const e=this.column.getDefinition();if(!e)return;const{headerStyle:t}=e;let o;if(typeof t=="function"){const s=this.getHeaderClassParams();o=t(s)}else o=t;o&&this.comp.setUserStyles(o)}onGuiFocus(){this.eventSvc.dispatchEvent({type:"headerFocused",column:this.column})}setupAutoHeight(e){const{wrapperElement:t,checkMeasuringCallback:o,compBean:s}=e,{beans:i}=this,n=h=>{if(!this.isAlive()||!s.isAlive())return;const{paddingTop:u,paddingBottom:g,borderBottomWidth:p,borderTopWidth:f}=Nt(this.eGui),C=u+g+p+f,S=t.offsetHeight+C;if(h<5){const w=oe(i),R=!w||!w.contains(t),D=S==0;if(R||D){Fo(()=>n(h+1),"raf",i);return}}this.setColHeaderHeight(this.column,S)};let r=!1,l;const a=()=>{const h=this.column.isAutoHeaderHeight();h&&!r&&d(),!h&&r&&c()},d=()=>{r=!0,n(0),this.comp.toggleCss("ag-header-cell-auto-height",!0),l=nt(this.beans,t,()=>n(0))},c=()=>{r=!1,l&&l(),this.comp.toggleCss("ag-header-cell-auto-height",!1),l=void 0};a(),s.addDestroyFunc(()=>c()),s.addManagedListeners(this.column,{widthChanged:()=>r&&n(0)}),s.addManagedEventListeners({sortChanged:()=>{r&&window.setTimeout(()=>n(0))}}),o&&o(a)}onDisplayedColumnsChanged(){const{comp:e,column:t,beans:o,eGui:s}=this;!e||!t||!s||(un(e,t,o.visibleCols),gi(s,o.visibleCols.getAriaColIndex(t)))}addResizeAndMoveKeyboardListeners(e){e.addManagedListeners(this.eGui,{keydown:this.onGuiKeyDown.bind(this),keyup:this.onGuiKeyUp.bind(this)})}refreshTabIndex(){const e=Fe(this.beans);this.eGui&&Le(this.eGui,"tabindex",e?null:"-1")}onGuiKeyDown(e){var n;const t=z(this.beans),o=e.key===m.LEFT||e.key===m.RIGHT;if(this.isResizing&&(e.preventDefault(),e.stopImmediatePropagation()),t!==this.eGui||!e.shiftKey&&!e.altKey||((this.isResizing||o)&&(e.preventDefault(),e.stopImmediatePropagation()),!o))return;const i=e.key===m.LEFT!==this.gos.get("enableRtl")?"left":"right";if(e.altKey){this.isResizing=!0,this.resizeMultiplier+=1;const r=this.getViewportAdjustedResizeDiff(e);this.resizeHeader(r,e.shiftKey),(n=this.resizeFeature)==null||n.toggleColumnResizing(!0)}else this.moveHeader(i)}moveHeader(e){var t;(t=this.beans.colMoves)==null||t.moveHeader(e,this.eGui,this.column,this.rowCtrl.pinned,this)}getViewportAdjustedResizeDiff(e){const t=this.getResizeDiff(e),{pinnedCols:o}=this.beans;return o?o.getHeaderResizeDiff(t,this.column):t}getResizeDiff(e){const{gos:t,column:o}=this;let s=e.key===m.LEFT!==t.get("enableRtl");const i=o.getPinned(),n=t.get("enableRtl");return i&&n!==(i==="right")&&(s=!s),(s?-1:1)*this.resizeMultiplier}onGuiKeyUp(){this.isResizing&&(this.resizeToggleTimeout&&(window.clearTimeout(this.resizeToggleTimeout),this.resizeToggleTimeout=0),this.isResizing=!1,this.resizeMultiplier=1,this.resizeToggleTimeout=window.setTimeout(()=>{var e;(e=this.resizeFeature)==null||e.toggleColumnResizing(!1)},150))}handleKeyDown(e){const t=this.getWrapperHasFocus();switch(e.key){case m.PAGE_DOWN:case m.PAGE_UP:case m.PAGE_HOME:case m.PAGE_END:t&&e.preventDefault()}}addDomData(e){const t=kn,{eGui:o,gos:s}=this;Be(s,o,t,this),e.addDestroyFunc(()=>Be(s,o,t,null))}focus(e){const{eGui:t}=this;return t?(this.lastFocusEvent=e||null,t.focus(),!0):!1}focusThis(){this.beans.focusSvc.focusedHeader={headerRowIndex:this.rowCtrl.rowIndex,column:this.column}}removeDragSource(){var e;this.dragSource&&((e=this.beans.dragAndDrop)==null||e.removeDragSource(this.dragSource),this.dragSource=null)}handleContextMenuMouseEvent(e,t,o){const s=e??t,{menuSvc:i,gos:n}=this.beans;n.get("preventDefaultOnContextMenu")&&s.preventDefault(),i!=null&&i.isHeaderContextMenuEnabled(o)&&i.showHeaderContextMenu(o,e,t),this.dispatchColumnMouseEvent("columnHeaderContextMenu",o)}dispatchColumnMouseEvent(e,t){this.eventSvc.dispatchEvent({type:e,column:t})}setColHeaderHeight(e,t){if(!e.setAutoHeaderHeight(t))return;const{eventSvc:o}=this;e.isColumn?o.dispatchEvent({type:"columnHeaderHeightChanged",column:e,columns:[e],source:"autosizeColumnHeaderHeight"}):o.dispatchEvent({type:"columnGroupHeaderHeightChanged",columnGroup:e,source:"autosizeColumnGroupHeaderHeight"})}clearComponent(){this.removeDragSource(),this.resizeFeature=null,this.comp=null,this.eGui=null}destroy(){super.destroy(),this.column=null,this.lastFocusEvent=null,this.rowCtrl=null}},Jd=class extends In{constructor(){super(...arguments),this.refreshFunctions={},this.userHeaderClasses=new Set,this.ariaDescriptionProperties=new Map}setComp(e,t,o,s,i){this.comp=e;const{rowCtrl:n,column:r,beans:l}=this,{colResize:a,context:d,colHover:c,rangeSvc:h}=l,u=Kt(this,d,i);this.setGui(t,u),this.updateState(),this.setupWidth(u),this.setupMovingCss(u),this.setupMenuClass(u),this.setupSortableClass(u),this.setupWrapTextClass(),this.refreshSpanHeaderHeight(),this.setupAutoHeight({wrapperElement:s,checkMeasuringCallback:p=>this.setRefreshFunction("measuring",p),compBean:u}),this.addColumnHoverListener(u),this.setupFilterClass(u),this.setupStylesFromColDef(),this.setupClassesFromColDef(),this.setupTooltip(),this.addActiveHeaderMouseListeners(u),this.setupSelectAll(u),this.setupUserComp(),this.refreshAria(),a?this.resizeFeature=u.createManagedBean(a.createResizeFeature(n.pinned,r,o,e,this)):W(o,!1),c==null||c.createHoverFeature(u,[r],t),h==null||h.createRangeHighlightFeature(u,r,e),u.createManagedBean(new Tn(r,t,l)),u.createManagedBean(new $t(t,{shouldStopEventPropagation:p=>this.shouldStopEventPropagation(p),onTabKeyDown:()=>null,handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this),onFocusOut:this.onFocusOut.bind(this)})),this.addResizeAndMoveKeyboardListeners(u),u.addManagedPropertyListeners(["suppressMovableColumns","suppressMenuHide","suppressAggFuncInHeader","enableAdvancedFilter"],()=>this.refresh()),u.addManagedListeners(r,{colDefChanged:()=>this.refresh()}),u.addManagedListeners(r,{headerHighlightChanged:this.onHeaderHighlightChanged.bind(this)});const g=()=>this.checkDisplayName();u.addManagedEventListeners({columnValueChanged:g,columnRowGroupChanged:g,columnPivotChanged:g,headerHeightChanged:this.onHeaderHeightChanged.bind(this)}),u.addDestroyFunc(()=>{this.refreshFunctions={},this.selectAllFeature=null,this.dragSourceElement=void 0,this.userCompDetails=null,this.userHeaderClasses.clear(),this.ariaDescriptionProperties.clear(),this.clearComponent()})}resizeHeader(e,t){var o;(o=this.beans.colResize)==null||o.resizeHeader(this.column,e,t)}getHeaderClassParams(){const{column:e,beans:t}=this,o=e.colDef;return A(t.gos,{colDef:o,column:e,floatingFilter:!1})}setupUserComp(){const e=this.lookupUserCompDetails();e&&this.setCompDetails(e)}setCompDetails(e){this.userCompDetails=e,this.comp.setUserCompDetails(e)}lookupUserCompDetails(){const e=this.createParams(),t=this.column.getColDef();return na(this.beans.userCompFactory,t,e)}createParams(){const{menuSvc:e,sortSvc:t,colFilter:o,gos:s}=this.beans;return A(s,{column:this.column,displayName:this.displayName,enableSorting:this.column.isSortable(),enableMenu:this.menuEnabled,enableFilterButton:this.openFilterEnabled&&!!(e!=null&&e.isHeaderFilterButtonEnabled(this.column)),enableFilterIcon:!!o&&(!this.openFilterEnabled||Et(this.gos)),showColumnMenu:(n,r)=>{e==null||e.showColumnMenu({column:this.column,buttonElement:n,positionBy:"button",onClosedCallback:r})},showColumnMenuAfterMouseClick:(n,r)=>{e==null||e.showColumnMenu({column:this.column,mouseEvent:n,positionBy:"mouse",onClosedCallback:r})},showFilter:n=>{e==null||e.showFilterMenu({column:this.column,buttonElement:n,containerType:"columnFilter",positionBy:"button"})},progressSort:n=>{t==null||t.progressSort(this.column,!!n,"uiColumnSorted")},setSort:(n,r)=>{t==null||t.setSortForColumn(this.column,n,!!r,"uiColumnSorted")},eGridHeader:this.eGui,setTooltip:(n,r)=>{s.assertModuleRegistered("Tooltip",3),this.setupTooltip(n,r)}})}setupSelectAll(e){const{selectionSvc:t}=this.beans;t&&(this.selectAllFeature=e.createManagedBean(t.createSelectAllFeature(this.column)),this.selectAllFeature.setComp(this))}getSelectAllGui(){var e;return(e=this.selectAllFeature)==null?void 0:e.getCheckboxGui()}handleKeyDown(e){var t;super.handleKeyDown(e),e.key===m.SPACE&&((t=this.selectAllFeature)==null||t.onSpaceKeyDown(e)),e.key===m.ENTER&&this.onEnterKeyDown(e),e.key===m.DOWN&&e.altKey&&this.showMenuOnKeyPress(e,!1)}onEnterKeyDown(e){var t;e.ctrlKey||e.metaKey?this.showMenuOnKeyPress(e,!0):this.sortable&&((t=this.beans.sortSvc)==null||t.progressSort(this.column,e.shiftKey,"uiColumnSorted"))}showMenuOnKeyPress(e,t){const o=this.comp.getUserCompInstance();Is(o)&&o.onMenuKeyboardShortcut(t)&&e.preventDefault()}onFocusIn(e){this.eGui.contains(e.relatedTarget)||(this.focusThis(),this.announceAriaDescription()),Aa()&&this.setActiveHeader(!0)}onFocusOut(e){this.eGui.contains(e.relatedTarget)||this.setActiveHeader(!1)}setupTooltip(e,t){var o;this.tooltipFeature=(o=this.beans.tooltipSvc)==null?void 0:o.setupHeaderTooltip(this.tooltipFeature,this,e,t)}setupStylesFromColDef(){this.setRefreshFunction("headerStyles",this.refreshHeaderStyles.bind(this)),this.refreshHeaderStyles()}setupClassesFromColDef(){const e=()=>{const t=this.column.getColDef(),o=hn(t,this.gos,this.column,null),s=this.userHeaderClasses;this.userHeaderClasses=new Set(o),o.forEach(i=>{s.has(i)?s.delete(i):this.comp.toggleCss(i,!0)}),s.forEach(i=>this.comp.toggleCss(i,!1))};this.setRefreshFunction("headerClasses",e),e()}setDragSource(e){var t;this.dragSourceElement=e,this.removeDragSource(),!(!e||!this.draggable)&&(this.dragSource=((t=this.beans.colMoves)==null?void 0:t.setDragSourceForHeader(e,this.column,this.displayName))??null)}updateState(){const{menuSvc:e}=this.beans;this.menuEnabled=!!(e!=null&&e.isColumnMenuInHeaderEnabled(this.column)),this.openFilterEnabled=!!(e!=null&&e.isFilterMenuInHeaderEnabled(this.column)),this.sortable=this.column.isSortable(),this.displayName=this.calculateDisplayName(),this.draggable=this.workOutDraggable()}setRefreshFunction(e,t){this.refreshFunctions[e]=t}refresh(){this.updateState(),this.refreshHeaderComp(),this.refreshAria(),Object.values(this.refreshFunctions).forEach(e=>e())}refreshHeaderComp(){const e=this.lookupUserCompDetails();if(!e)return;(this.comp.getUserCompInstance()!=null&&this.userCompDetails.componentClass==e.componentClass?this.attemptHeaderCompRefresh(e.params):!1)?this.setDragSource(this.dragSourceElement):this.setCompDetails(e)}attemptHeaderCompRefresh(e){const t=this.comp.getUserCompInstance();return!t||!t.refresh?!1:t.refresh(e)}calculateDisplayName(){return this.beans.colNames.getDisplayNameForColumn(this.column,"header",!0)}checkDisplayName(){this.displayName!==this.calculateDisplayName()&&this.refresh()}workOutDraggable(){const e=this.column.getColDef();return!!(!this.gos.get("suppressMovableColumns")&&!e.suppressMovable&&!e.lockPosition)||!!e.enableRowGroup||!!e.enablePivot}setupWidth(e){const t=()=>{const o=this.column.getActualWidth();this.comp.setWidth(`${o}px`)};e.addManagedListeners(this.column,{widthChanged:t}),t()}setupMovingCss(e){const t=()=>{this.comp.toggleCss("ag-header-cell-moving",this.column.isMoving())};e.addManagedListeners(this.column,{movingChanged:t}),t()}setupMenuClass(e){const t=()=>{var o;(o=this.comp)==null||o.toggleCss("ag-column-menu-visible",this.column.isMenuVisible())};e.addManagedListeners(this.column,{menuVisibleChanged:t}),t()}setupSortableClass(e){const t=()=>{this.comp.toggleCss("ag-header-cell-sortable",!!this.sortable)};t(),this.setRefreshFunction("updateSortable",t),e.addManagedEventListeners({sortChanged:this.refreshAriaSort.bind(this)})}setupFilterClass(e){const t=()=>{const o=this.column.isFilterActive();this.comp.toggleCss("ag-header-cell-filtered",o),this.refreshAria()};e.addManagedListeners(this.column,{filterActiveChanged:t}),t()}setupWrapTextClass(){const e=()=>{const t=!!this.column.getColDef().wrapHeaderText;this.comp.toggleCss("ag-header-cell-wrap-text",t)};e(),this.setRefreshFunction("wrapText",e)}onHeaderHighlightChanged(){const e=this.column.getHighlighted(),t=e===0,o=e===1;this.comp.toggleCss("ag-header-highlight-before",t),this.comp.toggleCss("ag-header-highlight-after",o)}onDisplayedColumnsChanged(){super.onDisplayedColumnsChanged(),this.isAlive()&&this.onHeaderHeightChanged()}onHeaderHeightChanged(){this.refreshSpanHeaderHeight()}refreshSpanHeaderHeight(){const{eGui:e,column:t,comp:o,beans:s}=this,i=$o(this.beans),n=i.reduce((c,h)=>c+=h,0)===0;if(o.toggleCss("ag-header-parent-hidden",n),!t.isSpanHeaderHeight()){e.style.removeProperty("top"),e.style.removeProperty("height"),o.toggleCss("ag-header-span-height",!1),o.toggleCss("ag-header-span-total",!1);return}const{numberOfParents:r,isSpanningTotal:l}=this.column.getColumnGroupPaddingInfo();o.toggleCss("ag-header-span-height",r>0);const a=qo(s);if(r===0){o.toggleCss("ag-header-span-total",!1),e.style.setProperty("top","0px"),e.style.setProperty("height",`${a}px`);return}o.toggleCss("ag-header-span-total",l);let d=0;for(let c=0;co==="filter"?-1:s.charCodeAt(0)-o.charCodeAt(0)).map(o=>this.ariaDescriptionProperties.get(o)).join(". ");(t=this.beans.ariaAnnounce)==null||t.announceValue(e,"columnHeader")}refreshAria(){this.refreshAriaSort(),this.refreshAriaMenu(),this.refreshAriaFilterButton(),this.refreshAriaFiltered()}addColumnHoverListener(e){var t;(t=this.beans.colHover)==null||t.addHeaderColumnHoverListener(e,this.comp,this.column)}addActiveHeaderMouseListeners(e){const t=i=>this.handleMouseOverChange(i.type==="mouseenter"),o=()=>{this.setActiveHeader(!0),this.dispatchColumnMouseEvent("columnHeaderClicked",this.column)},s=i=>this.handleContextMenuMouseEvent(i,void 0,this.column);e.addManagedListeners(this.eGui,{mouseenter:t,mouseleave:t,click:o,contextmenu:s})}handleMouseOverChange(e){this.setActiveHeader(e),this.eventSvc.dispatchEvent({type:e?"columnHeaderMouseOver":"columnHeaderMouseLeave",column:this.column})}setActiveHeader(e){this.comp.toggleCss("ag-header-active",e)}getAnchorElementForMenu(e){const t=this.comp.getUserCompInstance();return Is(t)?t.getAnchorElementForMenu(e):this.eGui}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),super.destroy()}};function Is(e){return typeof(e==null?void 0:e.getAnchorElementForMenu)=="function"&&typeof e.onMenuKeyboardShortcut=="function"}var ec=0,ho=class extends v{constructor(e,t,o){super(),this.rowIndex=e,this.pinned=t,this.type=o,this.instanceId=ec++,this.allCtrls=[];const s=o=="group"?"ag-header-row-column-group":o=="filter"?"ag-header-row-column-filter":"ag-header-row-column";this.headerRowClass=`ag-header-row ${s}`}postConstruct(){this.isPrintLayout=$(this.gos,"print"),this.isEnsureDomOrder=this.gos.get("ensureDomOrder")}areCellsRendered(){return this.comp?this.allCtrls.every(e=>e.eGui!=null):!1}setComp(e,t,o=!0){this.comp=e,t=Kt(this,this.beans.context,t),o&&(this.onRowHeightChanged(),this.onVirtualColumnsChanged()),this.setWidth(),this.addEventListeners(t)}getAriaRowIndex(){return this.rowIndex+1}addEventListeners(e){const t=this.onRowHeightChanged.bind(this),o=this.onDisplayedColumnsChanged.bind(this);e.addManagedEventListeners({columnResized:this.setWidth.bind(this),displayedColumnsChanged:o,virtualColumnsChanged:s=>this.onVirtualColumnsChanged(s.afterScroll),columnGroupHeaderHeightChanged:t,columnHeaderHeightChanged:t,gridStylesChanged:t,advancedFilterEnabledChanged:t}),e.addManagedPropertyListener("domLayout",o),e.addManagedPropertyListener("ensureDomOrder",s=>this.isEnsureDomOrder=s.currentValue),e.addManagedPropertyListeners(["headerHeight","pivotHeaderHeight","groupHeaderHeight","pivotGroupHeaderHeight","floatingFiltersHeight"],t)}onDisplayedColumnsChanged(){this.isPrintLayout=$(this.gos,"print"),this.onVirtualColumnsChanged(),this.setWidth(),this.onRowHeightChanged()}setWidth(){const e=this.getWidthForRow();this.comp.setWidth(`${e}px`)}getWidthForRow(){const{visibleCols:e}=this.beans;return this.isPrintLayout?this.pinned!=null?0:e.getContainerWidth("right")+e.getContainerWidth("left")+e.getContainerWidth(null):e.getContainerWidth(this.pinned)}onRowHeightChanged(){const{topOffset:e,rowHeight:t}=this.getTopAndHeight();this.comp.setTop(e+"px"),this.comp.setHeight(t+"px")}getTopAndHeight(){const{filterManager:e}=this.beans,t=[],o=$o(this.beans),s=qo(this.beans);t.push(...o),t.push(s),e!=null&&e.hasFloatingFilters()&&t.push(Pn(this.beans));let i=0;for(let r=0;r{const{focusSvc:i,visibleCols:n}=this.beans;return i.isHeaderWrapperFocused(s)?n.isVisible(s.column):!1};if(e)for(const[s,i]of e)o(i)?this.ctrlsById.set(s,i):this.destroyBean(i);return this.allCtrls=Array.from(this.ctrlsById.values()),this.allCtrls}getHeaderCellCtrls(){return this.allCtrls}recycleAndCreateHeaderCtrls(e,t,o){if(e.isEmptyGroup())return;const s=e.getUniqueId();let i;if(o&&(i=o.get(s),o.delete(s)),i&&i.column!=e&&(this.destroyBean(i),i=void 0),i==null)switch(this.type){case"filter":{i=this.createBean(this.beans.registry.createDynamicBean("headerFilterCellCtrl",!0,e,this));break}case"group":i=this.createBean(this.beans.registry.createDynamicBean("headerGroupCellCtrl",!0,e,this));break;default:i=this.createBean(new Jd(e,this));break}t.set(s,i)}getColumnsInViewport(){return this.isPrintLayout?this.getColumnsInViewportPrintLayout():this.getColumnsInViewportNormalLayout()}getColumnsInViewportPrintLayout(){if(this.pinned!=null)return[];let e=[];const t=this.getActualDepth(),{colViewport:o}=this.beans;return["left",null,"right"].forEach(s=>{const i=o.getHeadersToRender(s,t);e=e.concat(i)}),e}getActualDepth(){return this.type=="filter"?this.rowIndex-1:this.rowIndex}getColumnsInViewportNormalLayout(){return this.beans.colViewport.getHeadersToRender(this.pinned,this.getActualDepth())}focusHeader(e,t){const o=this.allCtrls.find(i=>i.column==e);return o?o.focus(t):!1}destroy(){this.allCtrls=this.destroyBeans(this.allCtrls),this.ctrlsById=void 0,super.destroy()}},tc=class extends v{constructor(e){super(),this.pinned=e,this.hidden=!1,this.includeFloatingFilter=!1,this.groupsRowCtrls=[]}setComp(e,t){this.comp=e,this.eViewport=t;const{pinnedCols:o,ctrlsSvc:s,colModel:i,colMoves:n,filterManager:r}=this.beans;this.setupCenterWidth(),o==null||o.setupHeaderPinnedWidth(this),this.setupDragAndDrop(n,this.eViewport);const l=this.onDisplayedColumnsChanged.bind(this,r);this.addManagedEventListeners({gridColumnsChanged:this.onGridColumnsChanged.bind(this),displayedColumnsChanged:l,advancedFilterEnabledChanged:l});const a=`${typeof this.pinned=="string"?this.pinned:"center"}Header`;s.register(a,this),i.ready&&this.refresh()}getAllCtrls(){const e=[...this.groupsRowCtrls];return this.columnsRowCtrl&&e.push(this.columnsRowCtrl),this.filtersRowCtrl&&e.push(this.filtersRowCtrl),e}refresh(e=!1){const{focusSvc:t,colModel:o,filterManager:s}=this.beans;let i=0;const n=t.getFocusHeaderToUseAfterRefresh(),r=()=>{const c=Vd(o)-1;this.groupsRowCtrls=this.destroyBeans(this.groupsRowCtrls);for(let h=0;h{const c=i++,h=!this.hidden&&(this.columnsRowCtrl==null||!e||this.columnsRowCtrl.rowIndex!==c);(h||this.hidden)&&(this.columnsRowCtrl=this.destroyBean(this.columnsRowCtrl)),h&&(this.columnsRowCtrl=this.createBean(new ho(c,this.pinned,"column")))},a=()=>{this.includeFloatingFilter=!!(s!=null&&s.hasFloatingFilters())&&!this.hidden;const c=()=>{this.filtersRowCtrl=this.destroyBean(this.filtersRowCtrl)};if(!this.includeFloatingFilter){c();return}const h=i++;if(this.filtersRowCtrl){const u=this.filtersRowCtrl.rowIndex!==h;(!e||u)&&c()}this.filtersRowCtrl||(this.filtersRowCtrl=this.createBean(new ho(h,this.pinned,"filter")))};r(),l(),a();const d=this.getAllCtrls();this.comp.setCtrls(d),this.restoreFocusOnHeader(t,n)}getHeaderCtrlForColumn(e){const t=o=>o==null?void 0:o.getHeaderCellCtrls().find(s=>s.column===e);if(we(e))return t(this.columnsRowCtrl);if(this.groupsRowCtrls.length!==0)for(let o=0;othis.comp.setCenterWidth(`${e}px`),!0))}},Ln=class extends N{constructor(){super()}},oc={tag:"span",cls:"ag-overlay-loading-center",attrs:{"aria-live":"polite","aria-atomic":"true"}},sc=class extends Ln{init(){var t;const e=Re((t=this.gos.get("overlayLoadingTemplate"))==null?void 0:t.trim());if(this.setTemplate(e??oc),!e){const o=this.getLocaleTextFunc();setTimeout(()=>{this.getGui().textContent=o("loadingOoo","Loading...")})}}},ic={tag:"span",cls:"ag-overlay-no-rows-center"},nc=class extends Ln{init(){var t;const e=Re((t=this.gos.get("overlayNoRowsTemplate"))==null?void 0:t.trim());if(this.setTemplate(e??ic),!e){const o=this.getLocaleTextFunc();setTimeout(()=>{this.getGui().textContent=o("noRowsToShow","No Rows To Show")})}}};function rc(e,t,o){const s=Zt(e,t,o);if(s){const{className:n}=s;if(typeof n=="string"&&n.indexOf("ag-icon")>-1||typeof n=="object"&&n["ag-icon"])return s}const i=q({tag:"span"});return i.appendChild(s),i}function Zt(e,t,o){var n;let s=null;e==="smallDown"?I(262):e==="smallLeft"?I(263):e==="smallRight"&&I(264);const i=o&&o.getColDef().icons;if(i&&(s=i[e]),t.gos&&!s){const r=t.gos.get("icons");r&&(s=r[e])}if(s){let r;if(typeof s=="function")r=s();else if(typeof s=="string")r=s;else{I(38,{iconName:e});return}if(typeof r=="string")return Bo(r);if(Oo(r))return r;I(133,{iconName:e});return}else{const r=t.registry.getIcon(e);return r||(n=t.validation)==null||n.validateIcon(e),q({tag:"span",cls:`ag-icon ag-icon-${r??e}`,role:"presentation",attrs:{unselectable:"on"}})}}var lc=".ag-dnd-ghost{align-items:center;background-color:var(--ag-drag-and-drop-image-background-color);border:var(--ag-drag-and-drop-image-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-drag-and-drop-image-shadow);color:var(--ag-text-color);cursor:move;display:flex;font-weight:500;gap:var(--ag-cell-widget-spacing);height:var(--ag-header-height);overflow:hidden;padding-left:var(--ag-cell-horizontal-padding);padding-right:var(--ag-cell-horizontal-padding);text-overflow:ellipsis;transform:translateY(calc(var(--ag-spacing)*2));white-space:nowrap}",ac={tag:"div",children:[{tag:"div",ref:"eGhost",cls:"ag-dnd-ghost ag-unselectable",children:[{tag:"span",ref:"eIcon",cls:"ag-dnd-ghost-icon ag-shake-left-to-right"},{tag:"div",ref:"eLabel",cls:"ag-dnd-ghost-label"}]}]},dc=class extends N{constructor(){super(),this.dragSource=null,this.eIcon=x,this.eLabel=x,this.eGhost=x,this.registerCSS(lc)}postConstruct(){const e=t=>rc(t,this.beans,null);this.dropIconMap={pinned:e("columnMovePin"),hide:e("columnMoveHide"),move:e("columnMoveMove"),left:e("columnMoveLeft"),right:e("columnMoveRight"),group:e("columnMoveGroup"),aggregate:e("columnMoveValue"),pivot:e("columnMovePivot"),notAllowed:e("dropNotAllowed")}}init(e){this.dragSource=e.dragSource,this.setTemplate(ac),this.beans.environment.applyThemeClasses(this.eGhost)}destroy(){this.dragSource=null,super.destroy()}setIcon(e,t){const{eIcon:o,dragSource:s,dropIconMap:i,gos:n}=this;de(o);let r=null;e||(e=s!=null&&s.getDefaultIconName?s.getDefaultIconName():"notAllowed"),r=i[e],o.classList.toggle("ag-shake-left-to-right",t),!(r===i.hide&&n.get("suppressDragLeaveHidesColumns"))&&r&&o.appendChild(r)}setLabel(e){this.eLabel.textContent=e}},cc=".ag-label{white-space:nowrap}:where(.ag-ltr) .ag-label{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-label{margin-left:var(--ag-spacing)}:where(.ag-label-align-right) .ag-label{order:1}:where(.ag-ltr) :where(.ag-label-align-right) .ag-label{margin-left:var(--ag-spacing)}:where(.ag-rtl) :where(.ag-label-align-right) .ag-label{margin-right:var(--ag-spacing)}.ag-label-align-right>*{flex:none}.ag-label-align-top{align-items:flex-start;flex-direction:column;>*{align-self:stretch}}.ag-label-ellipsis{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.ag-label-align-top) .ag-label{margin-bottom:calc(var(--ag-spacing)*.5)}",hc=class extends N{constructor(e,t,o){super(t,o),this.labelSeparator="",this.labelAlignment="left",this.disabled=!1,this.label="",this.config=e||{},this.registerCSS(cc)}postConstruct(){this.addCss("ag-labeled"),this.eLabel.classList.add("ag-label");const{labelSeparator:e,label:t,labelWidth:o,labelAlignment:s,disabled:i}=this.config;i!=null&&this.setDisabled(i),e!=null&&this.setLabelSeparator(e),t!=null&&this.setLabel(t),o!=null&&this.setLabelWidth(o),this.setLabelAlignment(s||this.labelAlignment),this.refreshLabel()}refreshLabel(){const{label:e,eLabel:t}=this;de(t),typeof e=="string"?t.innerText=e+this.labelSeparator:e&&t.appendChild(e),e===""?(W(t,!1),Ft(t,"presentation")):(W(t,!0),Ft(t,null))}setLabelSeparator(e){return this.labelSeparator===e?this:(this.labelSeparator=e,this.label!=null&&this.refreshLabel(),this)}getLabelId(){const e=this.eLabel;return e.id=e.id||`ag-${this.getCompId()}-label`,e.id}getLabel(){return this.label}setLabel(e){return this.label===e?this:(this.label=e,this.refreshLabel(),this)}setLabelAlignment(e){const o=this.getGui().classList;return o.toggle("ag-label-align-left",e==="left"),o.toggle("ag-label-align-right",e==="right"),o.toggle("ag-label-align-top",e==="top"),this}setLabelEllipsis(e){return this.eLabel.classList.toggle("ag-label-ellipsis",e),this}setLabelWidth(e){return this.label==null?this:(Fi(this.eLabel,e),this)}setDisabled(e){e=!!e;const t=this.getGui();return wi(t,e),t.classList.toggle("ag-disabled",e),this.disabled=e,this}isDisabled(){return!!this.disabled}},uc=class extends hc{constructor(e,t,o,s){super(e,t,o),this.className=s}postConstruct(){super.postConstruct();const{width:e,value:t,onValueChange:o}=this.config;e!=null&&this.setWidth(e),t!=null&&this.setValue(t),o!=null&&this.onValueChange(o),this.className&&this.addCss(this.className),this.refreshAriaLabelledBy()}setLabel(e){return super.setLabel(e),this.refreshAriaLabelledBy(),this}refreshAriaLabelledBy(){const e=this.getAriaElement(),t=this.getLabelId(),o=this.getLabel();o==null||o==""||Cr(e)!==null?hs(e,""):hs(e,t??"")}setAriaLabel(e){return di(this.getAriaElement(),e),this.refreshAriaLabelledBy(),this}onValueChange(e){return this.addManagedListeners(this,{fieldValueChanged:()=>e(this.getValue())}),this}getWidth(){return this.getGui().clientWidth}setWidth(e){return me(this.getGui(),e),this}getPreviousValue(){return this.previousValue}getValue(){return this.value}setValue(e,t){return this.value===e?this:(this.previousValue=this.value,this.value=e,t||this.dispatchLocalEvent({type:"fieldValueChanged"}),this)}};function gc(e){return{tag:"div",role:"presentation",children:[{tag:"div",ref:"eLabel",cls:"ag-input-field-label"},{tag:"div",ref:"eWrapper",cls:"ag-wrapper ag-input-wrapper",role:"presentation",children:[{tag:e,ref:"eInput",cls:"ag-input-field-input"}]}]}}var pc=class extends uc{constructor(e,t,o="text",s="input"){super(e,(e==null?void 0:e.template)??gc(s),[],t),this.inputType=o,this.displayFieldTag=s,this.eLabel=x,this.eWrapper=x,this.eInput=x}postConstruct(){super.postConstruct(),this.setInputType();const{eLabel:e,eWrapper:t,eInput:o,className:s}=this;e.classList.add(`${s}-label`),t.classList.add(`${s}-input-wrapper`),o.classList.add(`${s}-input`),this.addCss("ag-input-field"),o.id=o.id||`ag-${this.getCompId()}-input`;const{inputName:i,inputWidth:n}=this.config;i!=null&&this.setInputName(i),n!=null&&this.setInputWidth(n),this.addInputListeners(),this.activateTabIndex([o])}addInputListeners(){this.addManagedElementListeners(this.eInput,{input:e=>this.setValue(e.target.value)})}setInputType(){this.displayFieldTag==="input"&&this.eInput.setAttribute("type",this.inputType)}getInputElement(){return this.eInput}setInputWidth(e){return Fi(this.eWrapper,e),this}setInputName(e){return this.getInputElement().setAttribute("name",e),this}getFocusableElement(){return this.eInput}setMaxLength(e){const t=this.eInput;return t.maxLength=e,this}setInputPlaceholder(e){return Le(this.eInput,"placeholder",e),this}setInputAriaLabel(e){return di(this.eInput,e),this.refreshAriaLabelledBy(),this}setDisabled(e){return wi(this.eInput,e),super.setDisabled(e)}setAutoComplete(e){if(e===!0)Le(this.eInput,"autocomplete",null);else{const t=typeof e=="string"?e:"off";Le(this.eInput,"autocomplete",t)}return this}},fc=class extends pc{constructor(e,t="ag-checkbox",o="checkbox"){super(e,t,o),this.labelAlignment="right",this.selected=!1,this.readOnly=!1,this.passive=!1}postConstruct(){super.postConstruct();const{readOnly:e,passive:t}=this.config;typeof e=="boolean"&&this.setReadOnly(e),typeof t=="boolean"&&this.setPassive(t)}addInputListeners(){this.addManagedElementListeners(this.eInput,{click:this.onCheckboxClick.bind(this)}),this.addManagedElementListeners(this.eLabel,{click:this.toggle.bind(this)})}getNextValue(){return this.selected===void 0?!0:!this.selected}setPassive(e){this.passive=e}isReadOnly(){return this.readOnly}setReadOnly(e){this.eWrapper.classList.toggle("ag-disabled",e),this.eInput.disabled=e,this.readOnly=e}setDisabled(e){return this.eWrapper.classList.toggle("ag-disabled",e),super.setDisabled(e)}toggle(){if(this.eInput.disabled)return;const e=this.isSelected(),t=this.getNextValue();this.passive?this.dispatchChange(t,e):this.setValue(t)}getValue(){return this.isSelected()}setValue(e,t){return this.refreshSelectedClass(e),this.setSelected(e,t),this}setName(e){const t=this.getInputElement();return t.name=e,this}isSelected(){return this.selected}setSelected(e,t){if(this.isSelected()===e)return;this.previousValue=this.isSelected(),e=this.selected=typeof e=="boolean"?e:void 0;const o=this.eInput;o.checked=e,o.indeterminate=e===void 0,t||this.dispatchChange(this.selected,this.previousValue)}dispatchChange(e,t,o){this.dispatchLocalEvent({type:"fieldValueChanged",selected:e,previousValue:t,event:o});const s=this.getInputElement();this.eventSvc.dispatchEvent({type:"checkboxChanged",id:s.id,name:s.name,selected:e,previousValue:t})}onCheckboxClick(e){if(this.passive||this.eInput.disabled)return;const t=this.isSelected(),o=this.selected=e.target.checked;this.refreshSelectedClass(o),this.dispatchChange(o,t,e)}refreshSelectedClass(e){const t=this.eWrapper.classList;t.toggle("ag-checked",e===!0),t.toggle("ag-indeterminate",e==null)}},Cc={selector:"AG-CHECKBOX",component:fc},mc=".ag-checkbox-cell{height:100%}",vc={tag:"div",cls:"ag-cell-wrapper ag-checkbox-cell",role:"presentation",children:[{tag:"ag-checkbox",ref:"eCheckbox",role:"presentation"}]},wc=class extends N{constructor(){super(vc,[Cc]),this.eCheckbox=x,this.registerCSS(mc)}init(e){this.refresh(e);const{eCheckbox:t,beans:o}=this,s=t.getInputElement();s.setAttribute("tabindex","-1"),ci(s,"polite"),this.addManagedListeners(s,{click:i=>{if(Tt(i),t.isDisabled())return;const n=t.getValue();this.onCheckboxChanged(n)},dblclick:i=>{Tt(i)}}),this.addManagedElementListeners(e.eGridCell,{keydown:i=>{if(i.key===m.SPACE&&!t.isDisabled()){e.eGridCell===z(o)&&t.toggle();const n=t.getValue();this.onCheckboxChanged(n),i.preventDefault()}}})}refresh(e){return this.params=e,this.updateCheckbox(e),!0}updateCheckbox(e){let t,o=!0;const{value:s,column:i,node:n}=e;if(n.group&&i)if(typeof s=="boolean")t=s;else{const h=i.getColId();h.startsWith(Ut)?t=s==null||s===""?void 0:s==="true":n.aggData&&n.aggData[h]!==void 0?t=s??void 0:o=!1}else t=s??void 0;const{eCheckbox:r}=this;if(!o){r.setDisplayed(!1);return}r.setValue(t);const l=e.disabled??!(i!=null&&i.isCellEditable(n));r.setDisabled(l);const a=this.getLocaleTextFunc(),d=Dr(a,t),c=l?d:`${a("ariaToggleCellValue","Press SPACE to toggle cell value")} (${d})`;r.setInputAriaLabel(c)}onCheckboxChanged(e){const{eventSvc:t,params:o}=this,{column:s,node:i,value:n}=o,r={column:s,colDef:s.getColDef(),data:i.data,node:i,rowIndex:i.rowIndex,rowPinned:i.rowPinned,value:n};t.dispatchEvent({type:"cellEditingStarted",...r});const l=i.setDataValue(s,e,"edit");t.dispatchEvent({type:"cellEditingStopped",...r,oldValue:n,newValue:e,valueChanged:l}),l||this.updateCheckbox(o)}};function Ls(e,t){return e.toString().padStart(t,"0")}function Ms(e,t=!0,o="-"){if(!e)return null;let s=[e.getFullYear(),e.getMonth()+1,e.getDate()].map(i=>Ls(i,2)).join(o);return t&&(s+=" "+[e.getHours(),e.getMinutes(),e.getSeconds()].map(i=>Ls(i,2)).join(":")),s}function As(e){if(!e)return null;const[t,o]=e.split(" ");if(!t)return null;const s=t.split("-").map(h=>parseInt(h,10));if(s.filter(h=>!isNaN(h)).length!==3)return null;const[i,n,r]=s,l=new Date(i,n-1,r);if(l.getFullYear()!==i||l.getMonth()!==n-1||l.getDate()!==r)return null;if(!o||o==="00:00:00")return l;const[a,d,c]=o.split(":").map(h=>parseInt(h,10));return a>=0&&a<24&&l.setHours(a),d>=0&&d<60&&l.setMinutes(d),c>=0&&c<60&&l.setSeconds(c),l}var uo={TAB_GUARD:"ag-tab-guard",TAB_GUARD_TOP:"ag-tab-guard-top",TAB_GUARD_BOTTOM:"ag-tab-guard-bottom"},yc=class extends v{constructor(e){super(),this.skipTabGuardFocus=!1,this.forcingFocusOut=!1,this.allowFocus=!1;const{comp:t,eTopGuard:o,eBottomGuard:s,focusTrapActive:i,forceFocusOutWhenTabGuardsAreEmpty:n,isFocusableContainer:r,focusInnerElement:l,onFocusIn:a,onFocusOut:d,shouldStopEventPropagation:c,onTabKeyDown:h,handleKeyDown:u,isEmpty:g,eFocusableElement:p}=e;this.comp=t,this.eTopGuard=o,this.eBottomGuard=s,this.providedFocusInnerElement=l,this.eFocusableElement=p,this.focusTrapActive=!!i,this.forceFocusOutWhenTabGuardsAreEmpty=!!n,this.isFocusableContainer=!!r,this.providedFocusIn=a,this.providedFocusOut=d,this.providedShouldStopEventPropagation=c,this.providedOnTabKeyDown=h,this.providedHandleKeyDown=u,this.providedIsEmpty=g}postConstruct(){this.createManagedBean(new $t(this.eFocusableElement,{shouldStopEventPropagation:()=>this.shouldStopEventPropagation(),onTabKeyDown:e=>this.onTabKeyDown(e),handleKeyDown:e=>this.handleKeyDown(e),onFocusIn:e=>this.onFocusIn(e),onFocusOut:e=>this.onFocusOut(e)})),this.activateTabGuards(),[this.eTopGuard,this.eBottomGuard].forEach(e=>this.addManagedElementListeners(e,{focus:this.onFocus.bind(this)}))}handleKeyDown(e){this.providedHandleKeyDown&&this.providedHandleKeyDown(e)}tabGuardsAreActive(){return!!this.eTopGuard&&this.eTopGuard.hasAttribute("tabIndex")}shouldStopEventPropagation(){return this.providedShouldStopEventPropagation?this.providedShouldStopEventPropagation():!1}activateTabGuards(){if(this.forcingFocusOut)return;const e=this.gos.get("tabIndex");this.comp.setTabIndex(e.toString())}deactivateTabGuards(){this.comp.setTabIndex()}onFocus(e){if(this.isFocusableContainer&&!this.eFocusableElement.contains(e.relatedTarget)&&!this.allowFocus){this.findNextElementOutsideAndFocus(e.target===this.eBottomGuard);return}if(this.skipTabGuardFocus){this.skipTabGuardFocus=!1;return}if(this.forceFocusOutWhenTabGuardsAreEmpty&&(this.providedIsEmpty?this.providedIsEmpty():Ae(this.eFocusableElement,".ag-tab-guard").length===0)){this.findNextElementOutsideAndFocus(e.target===this.eBottomGuard);return}if(this.isFocusableContainer&&this.eFocusableElement.contains(e.relatedTarget))return;const t=e.target===this.eBottomGuard;!(this.providedFocusInnerElement?this.providedFocusInnerElement(t):this.focusInnerElement(t))&&this.forceFocusOutWhenTabGuardsAreEmpty&&this.findNextElementOutsideAndFocus(e.target===this.eBottomGuard)}findNextElementOutsideAndFocus(e){var a;const t=oe(this.beans),o=Ae(t.body,null,!0),s=o.indexOf(e?this.eTopGuard:this.eBottomGuard);if(s===-1)return;let i,n;e?(i=0,n=s):(i=s+1,n=o.length);const r=o.slice(i,n),l=this.gos.get("tabIndex");r.sort((d,c)=>{const h=parseInt(d.getAttribute("tabindex")||"0"),u=parseInt(c.getAttribute("tabindex")||"0");return u===l?1:h===l?-1:h===0?1:u===0?-1:h-u}),(a=r[e?r.length-1:0])==null||a.focus()}onFocusIn(e){this.focusTrapActive||this.forcingFocusOut||(this.providedFocusIn&&this.providedFocusIn(e),this.isFocusableContainer||this.deactivateTabGuards())}onFocusOut(e){this.focusTrapActive||(this.providedFocusOut&&this.providedFocusOut(e),this.eFocusableElement.contains(e.relatedTarget)||this.activateTabGuards())}onTabKeyDown(e){if(this.providedOnTabKeyDown){this.providedOnTabKeyDown(e);return}if(this.focusTrapActive||e.defaultPrevented)return;const t=this.tabGuardsAreActive();t&&this.deactivateTabGuards();const o=this.getNextFocusableElement(e.shiftKey);t&&setTimeout(()=>this.activateTabGuards(),0),o&&(o.focus(),e.preventDefault())}focusInnerElement(e=!1){const t=Ae(this.eFocusableElement);return this.tabGuardsAreActive()&&(t.splice(0,1),t.splice(t.length-1,1)),t.length?(t[e?t.length-1:0].focus({preventScroll:!0}),!0):!1}getNextFocusableElement(e){return jt(this.beans,this.eFocusableElement,!1,e)}forceFocusOutOfContainer(e=!1){if(this.forcingFocusOut)return;const t=e?this.eTopGuard:this.eBottomGuard;this.activateTabGuards(),this.skipTabGuardFocus=!0,this.forcingFocusOut=!0,t.focus(),window.setTimeout(()=>{this.forcingFocusOut=!1,this.activateTabGuards()})}isTabGuard(e,t){return e===this.eTopGuard&&!t||e===this.eBottomGuard&&(t??!0)}setAllowFocus(e){this.allowFocus=e}},bc=class extends v{constructor(e){super(),this.comp=e}initialiseTabGuard(e){this.eTopGuard=this.createTabGuard("top"),this.eBottomGuard=this.createTabGuard("bottom"),this.eFocusableElement=this.comp.getFocusableElement();const{eTopGuard:t,eBottomGuard:o,eFocusableElement:s}=this,i=[t,o],n={setTabIndex:C=>{i.forEach(y=>C!=null?y.setAttribute("tabindex",C):y.removeAttribute("tabindex"))}};this.addTabGuards(t,o);const{focusTrapActive:r=!1,onFocusIn:l,onFocusOut:a,focusInnerElement:d,handleKeyDown:c,onTabKeyDown:h,shouldStopEventPropagation:u,isEmpty:g,forceFocusOutWhenTabGuardsAreEmpty:p,isFocusableContainer:f}=e;this.tabGuardCtrl=this.createManagedBean(new yc({comp:n,focusTrapActive:r,eTopGuard:t,eBottomGuard:o,eFocusableElement:s,onFocusIn:l,onFocusOut:a,focusInnerElement:d,handleKeyDown:c,onTabKeyDown:h,shouldStopEventPropagation:u,isEmpty:g,forceFocusOutWhenTabGuardsAreEmpty:p,isFocusableContainer:f}))}getTabGuardCtrl(){return this.tabGuardCtrl}createTabGuard(e){const t=oe(this.beans).createElement("div"),o=e==="top"?uo.TAB_GUARD_TOP:uo.TAB_GUARD_BOTTOM;return t.classList.add(uo.TAB_GUARD,o),Ft(t,"presentation"),t}addTabGuards(e,t){const o=this.eFocusableElement;o.insertAdjacentElement("afterbegin",e),o.insertAdjacentElement("beforeend",t)}removeAllChildrenExceptTabGuards(){const e=[this.eTopGuard,this.eBottomGuard];de(this.comp.getFocusableElement()),this.addTabGuards(...e)}forceFocusOutOfContainer(e=!1){this.tabGuardCtrl.forceFocusOutOfContainer(e)}appendChild(e,t,o){Oo(t)||(t=t.getGui());const{eBottomGuard:s}=this;s?s.insertAdjacentElement("beforebegin",t):e(t,o)}destroy(){const{eTopGuard:e,eBottomGuard:t}=this;Ce(e),Ce(t),super.destroy()}},Sc=class extends N{initialiseTabGuard(e){this.tabGuardFeature=this.createManagedBean(new bc(this)),this.tabGuardFeature.initialiseTabGuard(e)}forceFocusOutOfContainer(e=!1){this.tabGuardFeature.forceFocusOutOfContainer(e)}appendChild(e,t){this.tabGuardFeature.appendChild(super.appendChild.bind(this),e,t)}},Te=class{constructor(e,t=!1){this.DOUBLE_TAP_MILLIS=500,this.destroyFuncs=[],this.touching=!1,this.localEventService=new st,this.preventMouseClick=t;const o=this.onTouchStart.bind(this),s=this.onTouchMove.bind(this),i=this.onTouchEnd.bind(this);e.addEventListener("touchstart",o,{passive:!0}),e.addEventListener("touchmove",s,{passive:!0}),e.addEventListener("touchend",i,{passive:!1}),this.destroyFuncs.push(()=>{e.removeEventListener("touchstart",o,{passive:!0}),e.removeEventListener("touchmove",s,{passive:!0}),e.removeEventListener("touchend",i,{passive:!1})})}getActiveTouch(e){for(let t=0;t{const o=this.touchStart===t;if(this.touching&&o&&!this.moved){this.moved=!0;const s={type:"longTap",touchStart:this.touchStart,touchEvent:e};this.localEventService.dispatchEvent(s)}},500)}onTouchMove(e){if(!this.touching)return;const t=this.getActiveTouch(e.touches);if(!t)return;!vn(t,this.touchStart,4)&&(this.moved=!0)}onTouchEnd(e){if(this.touching){if(!this.moved){const t={type:"tap",touchStart:this.touchStart};this.localEventService.dispatchEvent(t),this.checkForDoubleTap()}this.preventMouseClick&&e.cancelable&&e.preventDefault(),this.touching=!1}}checkForDoubleTap(){const e=Date.now();if(this.lastTapTime&&this.lastTapTime>0)if(e-this.lastTapTime>this.DOUBLE_TAP_MILLIS){const o={type:"doubleTap",touchStart:this.touchStart};this.localEventService.dispatchEvent(o),this.lastTapTime=null}else this.lastTapTime=e;else this.lastTapTime=e}destroy(){this.destroyFuncs.forEach(e=>e())}},Mn=class{constructor(e="javascript"){this.frameworkName=e,this.renderingEngine="vanilla",this.batchFrameworkComps=!1,this.wrapIncoming=t=>t(),this.wrapOutgoing=t=>t(),this.baseDocLink=`${Ei}/${this.frameworkName}-data-grid`,Vr(this.baseDocLink)}setInterval(e,t){return new rn(o=>{o(window.setInterval(e,t))})}addEventListener(e,t,o,s){let i={};if(typeof s=="object"?i=s:typeof s=="boolean"&&(i={capture:s}),i.passive==null){const n=$i(t);n!=null&&(i.passive=n)}e.addEventListener(t,o,i)}frameworkComponent(e){return null}isFrameworkComponent(e){return!1}getDocLink(e){return`${this.baseDocLink}${e?`/${e}`:""}`}};function Rc(e){return{beanName:"gridApi",bean:e.getBean("apiFunctionSvc").api}}var Fc=["licenseManager","environment","eventSvc","gos","paginationAutoPageSizeSvc","apiFunctionSvc","gridApi","registry","agCompUtils","userCompFactory","rowContainerHeight","horizontalResizeSvc","localeSvc","pinnedRowModel","dragSvc","colGroupSvc","visibleCols","popupSvc","selectionSvc","colFilter","quickFilter","filterManager","colModel","headerNavigation","pageBounds","pagination","pageBoundsListener","rowSpanSvc","stickyRowSvc","rowRenderer","expressionSvc","alignedGridsSvc","navigation","valueCache","valueSvc","autoWidthCalc","filterMenuFactory","dragAndDrop","focusSvc","cellNavigation","cellStyles","scrollVisibleSvc","sortSvc","colHover","colAnimation","autoColSvc","selectionColSvc","changeDetectionSvc","animationFrameSvc","undoRedo","colDefFactory","rowStyleSvc","rowNodeBlockLoader","rowNodeSorter","ctrlsSvc","pinnedCols","dataTypeSvc","syncSvc","overlays","stateSvc","expansionSvc","apiEventSvc","ariaAnnounce","menuSvc","colMoves","colAutosize","colFlex","colResize","pivotColsSvc","valueColsSvc","rowGroupColsSvc","funcColsSvc","colNames","colViewport","pivotResultCols","showRowGroupCols","validation"],Hs=Object.fromEntries(Fc.map((e,t)=>[e,t]));function xc(e,t){const o=(e.beanName?Hs[e.beanName]:void 0)??Number.MAX_SAFE_INTEGER,s=(t.beanName?Hs[t.beanName]:void 0)??Number.MAX_SAFE_INTEGER;return o-s}function Dc(e,t){return(e==null?void 0:e.beanName)==="gridDestroySvc"?-1:(t==null?void 0:t.beanName)==="gridDestroySvc"?1:0}var Pc={tag:"div",cls:"ag-pinned-left-header",role:"rowgroup"},Ec={tag:"div",cls:"ag-pinned-right-header",role:"rowgroup"},Tc={tag:"div",cls:"ag-header-viewport",role:"presentation",attrs:{tabindex:"-1"},children:[{tag:"div",ref:"eCenterContainer",cls:"ag-header-container",role:"rowgroup"}]},go=class extends N{constructor(e){super(),this.eCenterContainer=x,this.headerRowComps={},this.rowCompsList=[],this.pinned=e}postConstruct(){this.selectAndSetTemplate();const e={setDisplayed:o=>this.setDisplayed(o),setCtrls:o=>this.setCtrls(o),setCenterWidth:o=>this.eCenterContainer.style.width=o,setViewportScrollLeft:o=>this.getGui().scrollLeft=o,setPinnedContainerWidth:o=>{const s=this.getGui();s.style.width=o,s.style.maxWidth=o,s.style.minWidth=o}};this.createManagedBean(new tc(this.pinned)).setComp(e,this.getGui())}selectAndSetTemplate(){const e=this.pinned=="left",t=this.pinned=="right",o=e?Pc:t?Ec:Tc;this.setTemplate(o),this.eRowContainer=this.eCenterContainer!==x?this.eCenterContainer:this.getGui()}destroy(){this.setCtrls([]),super.destroy()}destroyRowComp(e){this.destroyBean(e),this.eRowContainer.removeChild(e.getGui())}setCtrls(e){const t=this.headerRowComps;this.headerRowComps={},this.rowCompsList=[];let o;const s=i=>{const n=i.getGui();n.parentElement!=this.eRowContainer&&this.eRowContainer.appendChild(n),o&&Si(this.eRowContainer,n,o),o=n};e.forEach(i=>{const n=i.instanceId,r=t[n];delete t[n];const l=r||this.createBean(new Qd(i));this.headerRowComps[n]=l,this.rowCompsList.push(l),s(l)}),Object.values(t).forEach(i=>this.destroyRowComp(i))}},kc={tag:"div",cls:"ag-header",role:"presentation"},Ic=class extends N{constructor(){super(kc)}postConstruct(){const e={toggleCss:(s,i)=>this.toggleCss(s,i),setHeightAndMinHeight:s=>{this.getGui().style.height=s,this.getGui().style.minHeight=s}};this.createManagedBean(new Ud).setComp(e,this.getGui(),this.getFocusableElement());const o=s=>{this.createManagedBean(s),this.appendChild(s)};o(new go("left")),o(new go(null)),o(new go("right"))}},Lc={selector:"AG-HEADER-ROOT",component:Ic},Mc=class extends N{constructor(e,t,o,s,i){super(),this.cellCtrl=t,this.rendererVersion=0,this.editorVersion=0,this.beans=e,this.column=t.column,this.rowNode=t.rowNode,this.eRow=s;const n=q({tag:"div",role:t.getCellAriaRole(),attrs:{"comp-id":`${this.getCompId()}`,"col-id":t.column.colIdSanitised}});this.eCell=n;let r;t.isCellSpanning()?(r=q({tag:"div",cls:"ag-spanned-cell-wrapper",role:"presentation"}),r.appendChild(n),this.setTemplateFromElement(r)):this.setTemplateFromElement(n),this.cellCssManager=new nn(()=>n),this.forceWrapper=t.isForceWrapper(),this.refreshWrapper(!1);const l={toggleCss:(a,d)=>this.cellCssManager.toggleCss(a,d),setUserStyles:a=>it(n,a),getFocusableElement:()=>n,setIncludeSelection:a=>this.includeSelection=a,setIncludeRowDrag:a=>this.includeRowDrag=a,setIncludeDndSource:a=>this.includeDndSource=a,setRenderDetails:(a,d,c)=>this.setRenderDetails(a,d,c),setEditDetails:(a,d,c)=>this.setEditDetails(a,d,c),getCellEditor:()=>this.cellEditor||null,getCellRenderer:()=>this.cellRenderer||null,getParentOfValue:()=>this.getParentOfValue()};t.setComp(l,n,r,this.eCellWrapper,o,i,void 0)}getParentOfValue(){return this.eCellValue??this.eCellWrapper??this.eCell}setRenderDetails(e,t,o){if(this.cellEditor&&!this.cellEditorPopupWrapper)return;this.firstRender=this.firstRender==null;const i=this.refreshWrapper(!1);this.refreshEditStyles(!1),e?!(o||i)&&this.refreshCellRenderer(e)||(this.destroyRenderer(),this.createCellRendererInstance(e)):(this.destroyRenderer(),this.insertValueWithoutCellRenderer(t))}setEditDetails(e,t,o){e?this.createCellEditorInstance(e,t,o):this.destroyEditor()}removeControls(){const e=this.beans.context;this.checkboxSelectionComp=e.destroyBean(this.checkboxSelectionComp),this.dndSourceComp=e.destroyBean(this.dndSourceComp),this.rowDraggingComp=e.destroyBean(this.rowDraggingComp)}refreshWrapper(e){const t=this.includeRowDrag||this.includeDndSource||this.includeSelection,o=t||this.forceWrapper,s=o&&this.eCellWrapper==null;s&&(this.eCellWrapper=q({tag:"div",cls:"ag-cell-wrapper",role:"presentation"}),this.eCell.appendChild(this.eCellWrapper));const i=!o&&this.eCellWrapper!=null;i&&(Ce(this.eCellWrapper),this.eCellWrapper=void 0),this.cellCssManager.toggleCss("ag-cell-value",!o);const n=!e&&o,r=n&&this.eCellValue==null;r&&(this.eCellValue=q({tag:"span",cls:"ag-cell-value",role:"presentation"}),this.eCellWrapper.appendChild(this.eCellValue));const l=!n&&this.eCellValue!=null;l&&(Ce(this.eCellValue),this.eCellValue=void 0);const a=s||i||r||l;return a&&this.removeControls(),!e&&t&&this.addControls(),a}addControls(){const{cellCtrl:e,eCellWrapper:t,eCellValue:o,includeRowDrag:s,includeDndSource:i,includeSelection:n}=this,r=l=>{l&&t.insertBefore(l.getGui(),o)};s&&this.rowDraggingComp==null&&(this.rowDraggingComp=e.createRowDragComp(),r(this.rowDraggingComp)),i&&this.dndSourceComp==null&&(this.dndSourceComp=e.createDndSource(),r(this.dndSourceComp)),n&&this.checkboxSelectionComp==null&&(this.checkboxSelectionComp=e.createSelectionCheckbox(),r(this.checkboxSelectionComp))}createCellEditorInstance(e,t,o){const s=this.editorVersion,i=e.newAgStackInstance(),{params:n}=e;i.then(l=>this.afterCellEditorCreated(s,l,n,t,o)),V(this.cellEditor)&&n.cellStartedEdit&&this.cellCtrl.focusCell(!0)}insertValueWithoutCellRenderer(e){const t=this.getParentOfValue();de(t);const o=zt(e);o!=null&&(t.textContent=o)}destroyRenderer(){const{context:e}=this.beans;this.cellRenderer=e.destroyBean(this.cellRenderer),Ce(this.cellRendererGui),this.cellRendererGui=null,this.rendererVersion++}destroyEditor(){var o,s;const{context:e}=this.beans;(((o=this.cellEditorPopupWrapper)==null?void 0:o.getGui().contains(z(this.beans)))||this.cellCtrl.hasBrowserFocus())&&this.eCell.focus({preventScroll:!0}),(s=this.hideEditorPopup)==null||s.call(this),this.hideEditorPopup=void 0,this.cellEditor=e.destroyBean(this.cellEditor),this.cellEditorPopupWrapper=e.destroyBean(this.cellEditorPopupWrapper),Ce(this.cellEditorGui),this.cellEditorGui=null,this.editorVersion++}refreshCellRenderer(e){var o;if(((o=this.cellRenderer)==null?void 0:o.refresh)==null||this.cellRendererClass!==e.componentClass)return!1;const t=this.cellRenderer.refresh(e.params);return t===!0||t===void 0}createCellRendererInstance(e){const t=this.rendererVersion,{componentClass:o}=e,s=()=>{if(this.rendererVersion!==t||!this.isAlive())return;const r=e.newAgStackInstance(),l=this.afterCellRendererCreated.bind(this,t,o);r==null||r.then(l)},{animationFrameSvc:i}=this.beans;i!=null&&i.active&&this.firstRender?i.createTask(s,this.rowNode.rowIndex,"p2",e.componentFromFramework):s()}afterCellRendererCreated(e,t,o){if(!this.isAlive()||e!==this.rendererVersion){this.beans.context.destroyBean(o);return}this.cellRenderer=o,this.cellRendererClass=t;const i=o.getGui();if(this.cellRendererGui=i,i!=null){const n=this.getParentOfValue();de(n),n.appendChild(i)}}afterCellEditorCreated(e,t,o,s,i){var d;const n=e!==this.editorVersion,{context:r}=this.beans;if(n){r.destroyBean(t);return}if(t.isCancelBeforeStart&&t.isCancelBeforeStart()){r.destroyBean(t),this.cellCtrl.stopEditing(!0);return}if(!t.getGui){I(97,{colId:this.column.getId()}),r.destroyBean(t);return}this.cellEditor=t,this.cellEditorGui=t.getGui();const a=s||t.isPopup!==void 0&&t.isPopup();a?this.addPopupCellEditor(o,i):this.addInCellEditor(),this.refreshEditStyles(!0,a),(d=t.afterGuiAttached)==null||d.call(t),this.cellCtrl.cellEditorAttached()}refreshEditStyles(e,t){const{cellCssManager:o}=this;o.toggleCss("ag-cell-inline-editing",e&&!t),o.toggleCss("ag-cell-popup-editing",e&&!!t),o.toggleCss("ag-cell-not-inline-editing",!e||!!t),this.cellCtrl.setInlineEditingCss()}addInCellEditor(){const{eCell:e}=this;e.contains(z(this.beans))&&e.focus(),this.destroyRenderer(),this.refreshWrapper(!0),de(this.getParentOfValue()),this.cellEditorGui&&this.getParentOfValue().appendChild(this.cellEditorGui)}addPopupCellEditor(e,t){var C;const{gos:o,context:s,editSvc:i,popupSvc:n,localeSvc:r}=this.beans;o.get("editType")==="fullRow"&&I(98);const l=this.cellEditor;this.cellEditorPopupWrapper=s.createBean(i.createPopupEditorWrapper(e));const a=this.cellEditorPopupWrapper.getGui();this.cellEditorGui&&a.appendChild(this.cellEditorGui);const d=o.get("stopEditingWhenCellsLoseFocus"),c=t??((C=l.getPopupPosition)==null?void 0:C.call(l))??"over",h=o.get("enableRtl"),u={ePopup:a,column:this.column,rowNode:this.rowNode,type:"popupCellEditor",eventSource:this.eCell,position:c,alignSide:h?"right":"left",keepWithinBounds:!0},g=n.positionPopupByComponent.bind(n,u),p=ri(r),f=n.addPopup({modal:d,eChild:a,closeOnEsc:!0,closedCallback:()=>{this.cellCtrl.onPopupEditorClosed()},anchorToElement:this.eCell,positionCallback:g,ariaLabel:p("ariaLabelCellEditor","Cell Editor")});f&&(this.hideEditorPopup=f.hideFunc)}detach(){this.eRow.removeChild(this.getGui())}destroy(){this.cellCtrl.stopEditing(),this.destroyRenderer(),this.destroyEditor(),this.removeControls(),super.destroy()}},Ac=class extends N{constructor(e,t,o){super(),this.cellComps=new Map,this.beans=t,this.rowCtrl=e;const s=q({tag:"div",role:"row",attrs:{"comp-id":`${this.getCompId()}`}});this.setInitialStyle(s,o),this.setTemplateFromElement(s);const i=s.style;this.domOrder=this.rowCtrl.getDomOrder();const n={setDomOrder:r=>this.domOrder=r,setCellCtrls:r=>this.setCellCtrls(r),showFullWidth:r=>this.showFullWidth(r),getFullWidthCellRenderer:()=>this.fullWidthCellRenderer,toggleCss:(r,l)=>this.toggleCss(r,l),setUserStyles:r=>it(s,r),setTop:r=>i.top=r,setTransform:r=>i.transform=r,setRowIndex:r=>s.setAttribute("row-index",r),setRowId:r=>s.setAttribute("row-id",r),setRowBusinessKey:r=>s.setAttribute("row-business-key",r),refreshFullWidth:r=>{var l,a;return((a=(l=this.fullWidthCellRenderer)==null?void 0:l.refresh)==null?void 0:a.call(l,r()))??!1}};e.setComp(n,this.getGui(),o,void 0),this.addDestroyFunc(()=>{e.unsetComp(o)})}setInitialStyle(e,t){const o=this.rowCtrl.getInitialTransform(t);if(o)e.style.setProperty("transform",o);else{const s=this.rowCtrl.getInitialRowTop(t);s&&e.style.setProperty("top",s)}}showFullWidth(e){const t=s=>{if(this.isAlive()){const i=s.getGui();this.getGui().appendChild(i),this.rowCtrl.setupDetailRowAutoHeight(i),this.setFullWidthRowComp(s)}else this.beans.context.destroyBean(s)};e.newAgStackInstance().then(t)}setCellCtrls(e){const t=new Map(this.cellComps);for(const o of e){const s=o.instanceId;this.cellComps.has(s)?t.delete(s):this.newCellComp(o)}this.destroyCells(t),this.ensureDomOrder(e)}ensureDomOrder(e){if(!this.domOrder)return;const t=[];for(const o of e){const s=this.cellComps.get(o.instanceId);s&&t.push(s.getGui())}Ri(this.getGui(),t)}newCellComp(e){const t=new Mc(this.beans,e,this.rowCtrl.printLayout,this.getGui(),this.rowCtrl.editing);this.cellComps.set(e.instanceId,t),this.getGui().appendChild(t.getGui())}destroy(){super.destroy(),this.destroyCells(this.cellComps)}setFullWidthRowComp(e){this.fullWidthCellRenderer=e,this.addDestroyFunc(()=>{this.fullWidthCellRenderer=this.beans.context.destroyBean(this.fullWidthCellRenderer)})}destroyCells(e){for(const t of e.values()){if(!t)return;const o=t.cellCtrl.instanceId;if(this.cellComps.get(o)!==t)return;t.detach(),t.destroy(),this.cellComps.delete(o)}}};function Hc(e,t,o){const s=!!o.gos.get("enableCellSpan")&&!!t.getSpannedRowCtrls,i={tag:"div",ref:"eContainer",cls:Rt(e),role:"rowgroup"};if(t.type==="center"||s){const n={tag:"div",ref:"eSpannedContainer",cls:`ag-spanning-container ${yd(e)}`,role:"rowgroup"};return{tag:"div",ref:"eViewport",cls:`ag-viewport ${Sn(e)}`,role:"presentation",children:[i,s?n:null]}}return i}var Gc=class extends N{constructor(e){super(),this.eViewport=x,this.eContainer=x,this.eSpannedContainer=x,this.rowCompsNoSpan={},this.rowCompsWithSpan={},this.name=e==null?void 0:e.name,this.options=rt(this.name)}postConstruct(){this.setTemplate(Hc(this.name,this.options,this.beans));const e={setHorizontalScroll:o=>this.eViewport.scrollLeft=o,setViewportHeight:o=>this.eViewport.style.height=o,setRowCtrls:({rowCtrls:o})=>this.setRowCtrls(o),setSpannedRowCtrls:o=>this.setRowCtrls(o,!0),setDomOrder:o=>{this.domOrder=o},setContainerWidth:o=>{this.eContainer.style.width=o,this.eSpannedContainer&&(this.eSpannedContainer.style.width=o)},setOffsetTop:o=>{const s=`translateY(${o})`;this.eContainer.style.transform=s,this.eSpannedContainer&&(this.eSpannedContainer.style.transform=s)}};this.createManagedBean(new kd(this.name)).setComp(e,this.eContainer,this.eSpannedContainer,this.eViewport)}destroy(){this.setRowCtrls([]),this.setRowCtrls([],!0),super.destroy(),this.lastPlacedElement=null}setRowCtrls(e,t){const{beans:o,options:s}=this,i=t?this.eSpannedContainer:this.eContainer,n=t?{...this.rowCompsWithSpan}:{...this.rowCompsNoSpan},r={};t?this.rowCompsWithSpan=r:this.rowCompsNoSpan=r,this.lastPlacedElement=null;const l=[];for(const a of e){const d=a.instanceId,c=n[d];let h;if(c)h=c,delete n[d];else{if(!a.rowNode.displayed)continue;h=new Ac(a,o,s.type)}r[d]=h,l.push([h,!c])}this.removeOldRows(Object.values(n),i),this.addRowNodes(l,i)}addRowNodes(e,t){const{domOrder:o}=this;for(const[s,i]of e){const n=s.getGui();o?this.ensureDomOrder(n,t):i&&t.appendChild(n)}}removeOldRows(e,t){for(const o of e)t.removeChild(o.getGui()),o.destroy()}ensureDomOrder(e,t){Si(t,e,this.lastPlacedElement),this.lastPlacedElement=e}},Bc={selector:"AG-ROW-CONTAINER",component:Gc};function ze(e,t){return t.map(o=>{const s=`e${o[0].toUpperCase()+o.substring(1)}RowContainer`;return e[s]={name:o},{tag:"ag-row-container",ref:s,attrs:{name:o}}})}function Oc(e){const t={},o={tag:"div",ref:"eGridRoot",cls:"ag-root ag-unselectable",children:[{tag:"ag-header-root"},{tag:"div",ref:"eTop",cls:"ag-floating-top",role:"presentation",children:ze(t,["topLeft","topCenter","topRight","topFullWidth"])},{tag:"div",ref:"eBody",cls:"ag-body",role:"presentation",children:[{tag:"div",ref:"eBodyViewport",cls:"ag-body-viewport",role:"presentation",children:ze(t,["left","center","right","fullWidth"])},{tag:"ag-fake-vertical-scroll"}]},{tag:"div",ref:"eStickyTop",cls:"ag-sticky-top",role:"presentation",children:ze(t,["stickyTopLeft","stickyTopCenter","stickyTopRight","stickyTopFullWidth"])},{tag:"div",ref:"eStickyBottom",cls:"ag-sticky-bottom",role:"presentation",children:ze(t,["stickyBottomLeft","stickyBottomCenter","stickyBottomRight","stickyBottomFullWidth"])},{tag:"div",ref:"eBottom",cls:"ag-floating-bottom",role:"presentation",children:ze(t,["bottomLeft","bottomCenter","bottomRight","bottomFullWidth"])},{tag:"ag-fake-horizontal-scroll"},e?{tag:"ag-overlay-wrapper"}:null]};return{paramsMap:t,elementParams:o}}var Wc=class extends N{constructor(){super(...arguments),this.eGridRoot=x,this.eBodyViewport=x,this.eStickyTop=x,this.eStickyBottom=x,this.eTop=x,this.eBottom=x,this.eBody=x}postConstruct(){const{overlays:e,rangeSvc:t}=this.beans,o=e==null?void 0:e.getOverlayWrapperSelector(),{paramsMap:s,elementParams:i}=Oc(!!o);this.setTemplate(i,[...o?[o]:[],Gd,Wd,Lc,Bc],s);const n=(l,a)=>{const d=`${l}px`;a.style.minHeight=d,a.style.height=d},r={setRowAnimationCssOnBodyViewport:(l,a)=>this.setRowAnimationCssOnBodyViewport(l,a),setColumnCount:l=>Sr(this.getGui(),l),setRowCount:l=>br(this.getGui(),l),setTopHeight:l=>n(l,this.eTop),setBottomHeight:l=>n(l,this.eBottom),setTopInvisible:l=>this.eTop.classList.toggle("ag-invisible",l),setBottomInvisible:l=>this.eBottom.classList.toggle("ag-invisible",l),setStickyTopHeight:l=>this.eStickyTop.style.height=l,setStickyTopTop:l=>this.eStickyTop.style.top=l,setStickyTopWidth:l=>this.eStickyTop.style.width=l,setStickyBottomHeight:l=>{this.eStickyBottom.style.height=l,this.eStickyBottom.classList.toggle("ag-invisible",l==="0px")},setStickyBottomBottom:l=>this.eStickyBottom.style.bottom=l,setStickyBottomWidth:l=>this.eStickyBottom.style.width=l,setColumnMovingCss:(l,a)=>this.toggleCss(l,a),updateLayoutClasses:(l,a)=>{const d=[this.eBodyViewport.classList,this.eBody.classList];for(const c of d)c.toggle(ee.AUTO_HEIGHT,a.autoHeight),c.toggle(ee.NORMAL,a.normal),c.toggle(ee.PRINT,a.print);this.toggleCss(ee.AUTO_HEIGHT,a.autoHeight),this.toggleCss(ee.NORMAL,a.normal),this.toggleCss(ee.PRINT,a.print)},setAlwaysVerticalScrollClass:(l,a)=>this.eBodyViewport.classList.toggle(xn,a),registerBodyViewportResizeListener:l=>{const a=nt(this.beans,this.eBodyViewport,l);this.addDestroyFunc(()=>a())},setPinnedTopBottomOverflowY:l=>this.eTop.style.overflowY=this.eBottom.style.overflowY=l,setCellSelectableCss:(l,a)=>{[this.eTop,this.eBodyViewport,this.eBottom].forEach(d=>d.classList.toggle(l,a))},setBodyViewportWidth:l=>this.eBodyViewport.style.width=l,setGridRootRole:l=>Ft(this.eGridRoot,l)};this.ctrl=this.createManagedBean(new Md),this.ctrl.setComp(r,this.getGui(),this.eBodyViewport,this.eTop,this.eBottom,this.eStickyTop,this.eStickyBottom),(t&&Oe(this.gos)||sl(this.gos))&&yr(this.getGui(),!0)}setRowAnimationCssOnBodyViewport(e,t){const o=this.eBodyViewport.classList;o.toggle("ag-row-animation",t),o.toggle("ag-row-no-animation",!t)}},Vc={selector:"AG-GRID-BODY",component:Wc},Nc=class extends v{constructor(){super(...arguments),this.additionalFocusableContainers=new Set}setComp(e,t,o){this.view=e,this.eGridHostDiv=t,this.eGui=o,this.eGui.setAttribute("grid-id",this.beans.context.getGridId());const{dragAndDrop:s,ctrlsSvc:i}=this.beans;s==null||s.registerGridDropTarget(()=>this.eGui,this),fn(this.gos,t),this.createManagedBean(new Ko(this.view)),this.view.setRtlClass(this.gos.get("enableRtl")?"ag-rtl":"ag-ltr");const n=nt(this.beans,this.eGridHostDiv,this.onGridSizeChanged.bind(this));this.addDestroyFunc(()=>n()),i.register("gridCtrl",this)}isDetailGrid(){var t;const e=Ha(this.getGui());return((t=e==null?void 0:e.getAttribute("row-id"))==null?void 0:t.startsWith("detail"))||!1}getOptionalSelectors(){var t,o,s,i;const e=this.beans;return{paginationSelector:(t=e.pagination)==null?void 0:t.getPaginationSelector(),gridHeaderDropZonesSelector:e.registry.getSelector("AG-GRID-HEADER-DROP-ZONES"),sideBarSelector:(o=e.sideBar)==null?void 0:o.getSelector(),statusBarSelector:(s=e.registry)==null?void 0:s.getSelector("AG-STATUS-BAR"),watermarkSelector:(i=e.licenseManager)==null?void 0:i.getWatermarkSelector()}}onGridSizeChanged(){this.eventSvc.dispatchEvent({type:"gridSizeChanged",clientWidth:this.eGridHostDiv.clientWidth,clientHeight:this.eGridHostDiv.clientHeight})}destroyGridUi(){this.view.destroyGridUi()}getGui(){return this.eGui}setResizeCursor(e){this.view.setCursor(e?"ew-resize":null)}disableUserSelect(e){this.view.setUserSelect(e?"none":null)}focusNextInnerContainer(e){const t=this.getFocusableContainers(),{indexWithFocus:o,nextIndex:s}=this.getNextFocusableIndex(t,e);if(s<0||s>=t.length)return!1;if(s===0){if(o>0){const{visibleCols:i,focusSvc:n}=this.beans,r=i.allCols,l=H(r);if(n.focusGridView({column:l,backwards:!0}))return!0}return!1}return this.focusContainer(t[s],e)}focusInnerElement(e){const t=this.gos.getCallback("focusGridInnerElement");if(t&&t({fromBottom:!!e}))return!0;const o=this.getFocusableContainers(),{focusSvc:s,visibleCols:i}=this.beans,n=i.allCols;if(e){if(o.length>1)return this.focusContainer(H(o),e);const r=H(n);if(s.focusGridView({column:r,backwards:e}))return!0}if(this.gos.get("headerHeight")===0||Fe(this.beans)){if(s.focusGridView({column:n[0],backwards:e}))return!0;for(let r=1;r=t.length)return;const i=t[o];(n=i.setAllowFocus)==null||n.call(i,!0),setTimeout(()=>{var r;(r=i.setAllowFocus)==null||r.call(i,!1)})}isFocusable(){var t,o;const e=this.beans;return!Uo(e)||!Fe(e)||!!((o=(t=e.sideBar)==null?void 0:t.comp)!=null&&o.isDisplayed())}getNextFocusableIndex(e,t){const o=z(this.beans),s=e.findIndex(n=>n.getGui().contains(o)),i=s+(t?-1:1);return{indexWithFocus:s,nextIndex:i}}focusContainer(e,t){var s,i;(s=e.setAllowFocus)==null||s.call(e,!0);const o=Gt(e.getGui(),t,!1,!0);return(i=e.setAllowFocus)==null||i.call(e,!1),o}getFocusableContainers(){return[...this.view.getFocusableContainers(),...this.additionalFocusableContainers]}destroy(){this.additionalFocusableContainers.clear(),super.destroy()}},zc=class extends Sc{constructor(e){super(),this.gridBody=x,this.sideBar=x,this.pagination=x,this.rootWrapperBody=x,this.eGridDiv=e}postConstruct(){const e={destroyGridUi:()=>this.destroyBean(this),setRtlClass:n=>this.addCss(n),forceFocusOutOfContainer:this.forceFocusOutOfContainer.bind(this),updateLayoutClasses:this.updateLayoutClasses.bind(this),getFocusableContainers:this.getFocusableContainers.bind(this),setUserSelect:n=>{this.getGui().style.userSelect=n??"",this.getGui().style.webkitUserSelect=n??""},setCursor:n=>{this.getGui().style.cursor=n??""}},t=this.createManagedBean(new Nc),o=t.getOptionalSelectors(),s=this.createTemplate(o),i=[Vc,...Object.values(o).filter(n=>!!n)];this.setTemplate(s,i),t.setComp(e,this.eGridDiv,this.getGui()),this.insertGridIntoDom(),this.initialiseTabGuard({onTabKeyDown:()=>{},focusInnerElement:n=>t.focusInnerElement(n),forceFocusOutWhenTabGuardsAreEmpty:!0,isEmpty:()=>!t.isFocusable()})}insertGridIntoDom(){const e=this.getGui();this.eGridDiv.appendChild(e),this.addDestroyFunc(()=>{this.eGridDiv.removeChild(e),Xe(this.gos,"Grid removed from DOM")})}updateLayoutClasses(e,t){const o=this.rootWrapperBody.classList,{AUTO_HEIGHT:s,NORMAL:i,PRINT:n}=ee,{autoHeight:r,normal:l,print:a}=t;o.toggle(s,r),o.toggle(i,l),o.toggle(n,a),this.toggleCss(s,r),this.toggleCss(i,l),this.toggleCss(n,a)}createTemplate(e){const t=e.gridHeaderDropZonesSelector?{tag:"ag-grid-header-drop-zones"}:null,o=e.sideBarSelector?{tag:"ag-side-bar",ref:"sideBar"}:null,s=e.statusBarSelector?{tag:"ag-status-bar"}:null,i=e.watermarkSelector?{tag:"ag-watermark"}:null,n=e.paginationSelector?{tag:"ag-pagination",ref:"pagination"}:null;return{tag:"div",cls:"ag-root-wrapper",role:"presentation",children:[t,{tag:"div",ref:"rootWrapperBody",cls:"ag-root-wrapper-body",role:"presentation",children:[{tag:"ag-grid-body",ref:"gridBody"},o]},s,n,i]}}getFocusableElement(){return this.rootWrapperBody}forceFocusOutOfContainer(e=!1){var t;if(!e&&((t=this.pagination)!=null&&t.isDisplayed())){this.pagination.forceFocusOutOfContainer(e);return}super.forceFocusOutOfContainer(e)}getFocusableContainers(){const e=[this.gridBody];return[this.sideBar,this.pagination].forEach(t=>{t&&e.push(t)}),e.filter(t=>De(t.getGui()))}},E=(e,t)=>{for(const o of Object.keys(t))t[o]=e;return t},Gs={dispatchEvent:"CommunityCore",...E("CommunityCore",{destroy:0,getGridId:0,getGridOption:0,isDestroyed:0,setGridOption:0,updateGridOptions:0,isModuleRegistered:0}),...E("GridState",{getState:0}),...E("SharedRowSelection",{setNodesSelected:0,selectAll:0,deselectAll:0,selectAllFiltered:0,deselectAllFiltered:0,selectAllOnCurrentPage:0,deselectAllOnCurrentPage:0,getSelectedNodes:0,getSelectedRows:0}),...E("RowApi",{redrawRows:0,setRowNodeExpanded:0,getRowNode:0,addRenderedRowListener:0,getRenderedNodes:0,forEachNode:0,getFirstDisplayedRowIndex:0,getLastDisplayedRowIndex:0,getDisplayedRowAtIndex:0,getDisplayedRowCount:0}),...E("ScrollApi",{getVerticalPixelRange:0,getHorizontalPixelRange:0,ensureColumnVisible:0,ensureIndexVisible:0,ensureNodeVisible:0}),...E("KeyboardNavigation",{getFocusedCell:0,clearFocusedCell:0,setFocusedCell:0,tabToNextCell:0,tabToPreviousCell:0,setFocusedHeader:0}),...E("EventApi",{addEventListener:0,addGlobalListener:0,removeEventListener:0,removeGlobalListener:0}),...E("ValueCache",{expireValueCache:0}),...E("CellApi",{getCellValue:0}),...E("SharedMenu",{showColumnMenu:0,hidePopupMenu:0}),...E("Sort",{onSortChanged:0}),...E("PinnedRow",{getPinnedTopRowCount:0,getPinnedBottomRowCount:0,getPinnedTopRow:0,getPinnedBottomRow:0,forEachPinnedRow:0}),...E("Overlay",{showLoadingOverlay:0,showNoRowsOverlay:0,hideOverlay:0}),...E("RenderApi",{setGridAriaProperty:0,refreshCells:0,refreshHeader:0,isAnimationFrameQueueEmpty:0,flushAllAnimationFrames:0,getSizesForCurrentTheme:0,getCellRendererInstances:0}),...E("HighlightChanges",{flashCells:0}),...E("RowDrag",{addRowDropZone:0,removeRowDropZone:0,getRowDropZoneParams:0}),...E("ColumnApi",{getColumnDefs:0,getColumnDef:0,getDisplayNameForColumn:0,getColumn:0,getColumns:0,applyColumnState:0,getColumnState:0,resetColumnState:0,isPinning:0,isPinningLeft:0,isPinningRight:0,getDisplayedColAfter:0,getDisplayedColBefore:0,setColumnsVisible:0,setColumnsPinned:0,getAllGridColumns:0,getDisplayedLeftColumns:0,getDisplayedCenterColumns:0,getDisplayedRightColumns:0,getAllDisplayedColumns:0,getAllDisplayedVirtualColumns:0}),...E("ColumnAutoSize",{sizeColumnsToFit:0,autoSizeColumns:0,autoSizeAllColumns:0}),...E("ColumnGroup",{setColumnGroupOpened:0,getColumnGroup:0,getProvidedColumnGroup:0,getDisplayNameForColumnGroup:0,getColumnGroupState:0,setColumnGroupState:0,resetColumnGroupState:0,getLeftDisplayedColumnGroups:0,getCenterDisplayedColumnGroups:0,getRightDisplayedColumnGroups:0,getAllDisplayedColumnGroups:0}),...E("ColumnMove",{moveColumnByIndex:0,moveColumns:0}),...E("ColumnResize",{setColumnWidths:0}),...E("ColumnHover",{isColumnHovered:0}),...E("EditCore",{getCellEditorInstances:0,getEditingCells:0,stopEditing:0,startEditingCell:0}),...E("UndoRedoEdit",{undoCellEditing:0,redoCellEditing:0,getCurrentUndoSize:0,getCurrentRedoSize:0}),...E("FilterCore",{isAnyFilterPresent:0,onFilterChanged:0}),...E("ColumnFilter",{isColumnFilterPresent:0,getColumnFilterInstance:0,destroyFilter:0,setFilterModel:0,getFilterModel:0,getColumnFilterModel:0,setColumnFilterModel:0,showColumnFilter:0}),...E("QuickFilter",{isQuickFilterPresent:0,getQuickFilter:0,resetQuickFilter:0}),...E("Find",{findGetActiveMatch:0,findGetTotalMatches:0,findGoTo:0,findNext:0,findPrevious:0,findGetNumMatches:0,findGetParts:0,findClearActive:0,findRefresh:0}),...E("Pagination",{paginationIsLastPageFound:0,paginationGetPageSize:0,paginationGetCurrentPage:0,paginationGetTotalPages:0,paginationGetRowCount:0,paginationGoToNextPage:0,paginationGoToPreviousPage:0,paginationGoToFirstPage:0,paginationGoToLastPage:0,paginationGoToPage:0}),...E("CsrmSsrmSharedApi",{expandAll:0,collapseAll:0,onRowHeightChanged:0}),...E("SsrmInfiniteSharedApi",{setRowCount:0,getCacheBlockState:0,isLastRowIndexKnown:0}),...E("ClientSideRowModelApi",{onGroupExpandedOrCollapsed:0,refreshClientSideRowModel:0,isRowDataEmpty:0,forEachLeafNode:0,forEachNodeAfterFilter:0,forEachNodeAfterFilterAndSort:0,resetRowHeights:0,applyTransaction:0,applyTransactionAsync:0,flushAsyncTransactions:0,getBestCostNodeSelection:0}),...E("CsvExport",{getDataAsCsv:0,exportDataAsCsv:0}),...E("InfiniteRowModel",{refreshInfiniteCache:0,purgeInfiniteCache:0,getInfiniteRowCount:0}),...E("AdvancedFilter",{getAdvancedFilterModel:0,setAdvancedFilterModel:0,showAdvancedFilterBuilder:0,hideAdvancedFilterBuilder:0}),...E("IntegratedCharts",{getChartModels:0,getChartRef:0,getChartImageDataURL:0,downloadChart:0,openChartToolPanel:0,closeChartToolPanel:0,createRangeChart:0,createPivotChart:0,createCrossFilterChart:0,updateChart:0,restoreChart:0}),...E("Clipboard",{copyToClipboard:0,cutToClipboard:0,copySelectedRowsToClipboard:0,copySelectedRangeToClipboard:0,copySelectedRangeDown:0,pasteFromClipboard:0}),...E("ExcelExport",{getDataAsExcel:0,exportDataAsExcel:0,getSheetDataForExcel:0,getMultipleSheetsAsExcel:0,exportMultipleSheetsAsExcel:0}),...E("SharedMasterDetail",{addDetailGridInfo:0,removeDetailGridInfo:0,getDetailGridInfo:0,forEachDetailGridInfo:0}),...E("ContextMenu",{showContextMenu:0}),...E("ColumnMenu",{showColumnChooser:0,hideColumnChooser:0}),...E("CellSelection",{getCellRanges:0,addCellRange:0,clearRangeSelection:0,clearCellSelection:0}),...E("SharedRowGrouping",{setRowGroupColumns:0,removeRowGroupColumns:0,addRowGroupColumns:0,getRowGroupColumns:0,moveRowGroupColumn:0}),...E("SharedAggregation",{addAggFuncs:0,clearAggFuncs:0,setColumnAggFunc:0}),...E("SharedPivot",{isPivotMode:0,getPivotResultColumn:0,setValueColumns:0,getValueColumns:0,removeValueColumns:0,addValueColumns:0,setPivotColumns:0,removePivotColumns:0,addPivotColumns:0,getPivotColumns:0,setPivotResultColumns:0,getPivotResultColumns:0}),...E("ServerSideRowModelApi",{getServerSideSelectionState:0,setServerSideSelectionState:0,applyServerSideTransaction:0,applyServerSideTransactionAsync:0,applyServerSideRowData:0,retryServerSideLoads:0,flushServerSideAsyncTransactions:0,refreshServerSide:0,getServerSideGroupLevelState:0}),...E("SideBar",{isSideBarVisible:0,setSideBarVisible:0,setSideBarPosition:0,openToolPanel:0,closeToolPanel:0,getOpenedToolPanel:0,refreshToolPanel:0,isToolPanelShowing:0,getToolPanelInstance:0,getSideBar:0}),...E("StatusBar",{getStatusPanel:0})},po={isDestroyed:()=>!0,destroy(){},preConstruct(){},postConstruct(){},preWireBeans(){},wireBeans(){}},_c=(e,t)=>e.eventSvc.dispatchEvent(t),An=class{};Reflect.defineProperty(An,"name",{value:"GridApi"});var Uc=class extends v{constructor(){super(),this.beanName="apiFunctionSvc",this.api=new An,this.fns={...po,dispatchEvent:_c},this.preDestroyLink="";const{api:e}=this;for(const t of Object.keys(Gs))e[t]=this.makeApi(t)[t]}postConstruct(){this.preDestroyLink=this.beans.frameworkOverrides.getDocLink("grid-lifecycle/#grid-pre-destroyed")}addFunction(e,t){var i;const{fns:o,beans:s}=this;o!==po&&(o[e]=((i=s==null?void 0:s.validation)==null?void 0:i.validateApiFunction(e,t))??t)}makeApi(e){return{[e]:(...t)=>{const{beans:o,fns:{[e]:s}}=this;return s?s(o,...t):this.apiNotFound(e)}}}apiNotFound(e){const{beans:t,gos:o,preDestroyLink:s}=this;if(!t)I(26,{fnName:e,preDestroyLink:s});else{const i=Gs[e];o.assertModuleRegistered(i,`api.${e}`)&&I(27,{fnName:e,module:i})}}destroy(){super.destroy(),this.fns=po,this.beans=null}};function Kc(e){return e.context.getGridId()}function jc(e){e.gridDestroySvc.destroy()}function $c(e){return e.gridDestroySvc.destroyCalled}function qc(e,t){return e.gos.get(t)}function Zc(e,t,o){Hn(e,{[t]:o})}function Hn(e,t){e.gos.updateGridOptions({options:t})}function Yc(e,t){const o=t.replace(/Module$/,"");return e.gos.isModuleRegistered(o)}var Qc=class extends v{constructor(){super(...arguments),this.beanName="horizontalResizeSvc"}addResizeBar(e){const t={dragStartPixels:e.dragStartPixels||0,eElement:e.eResizeBar,onDragStart:this.onDragStart.bind(this,e),onDragStop:this.onDragStop.bind(this,e),onDragging:this.onDragging.bind(this,e),onDragCancel:this.onDragStop.bind(this,e),includeTouch:!0,stopPropagationForTouch:!0},{dragSvc:o}=this.beans;return o.addDragSource(t),()=>o.removeDragSource(t)}onDragStart(e,t){this.dragStartX=t.clientX,this.setResizeIcons();const o=t instanceof MouseEvent&&t.shiftKey===!0;e.onResizeStart(o)}setResizeIcons(){const e=this.beans.ctrlsSvc.get("gridCtrl");e.setResizeCursor(!0),e.disableUserSelect(!0)}onDragStop(e){e.onResizeEnd(this.resizeAmount),this.resetIcons()}resetIcons(){const e=this.beans.ctrlsSvc.get("gridCtrl");e.setResizeCursor(!1),e.disableUserSelect(!1)}onDragging(e,t){this.resizeAmount=t.clientX-this.dragStartX,e.onResizing(this.resizeAmount)}},Gn={moduleName:"Drag",version:G,beans:[id]},Xc={moduleName:"SharedDragAndDrop",version:G,beans:[Qa],dependsOn:[Gn],userComponents:{agDragAndDropImage:dc},icons:{columnMovePin:"pin",columnMoveHide:"eye-slash",columnMoveMove:"arrows",columnMoveLeft:"left",columnMoveRight:"right",columnMoveGroup:"group",columnMoveValue:"aggregation",columnMovePivot:"pivot",dropNotAllowed:"not-allowed",rowDrag:"grip"}},Jc={moduleName:"HorizontalResize",version:G,beans:[Qc],dependsOn:[Gn]},eh=":where(.ag-ltr) :where(.ag-column-moving){.ag-cell,.ag-header-cell,.ag-spanned-cell-wrapper{transition:left .2s}.ag-header-group-cell{transition:left .2s,width .2s}}:where(.ag-rtl) :where(.ag-column-moving){.ag-cell,.ag-header-cell,.ag-spanned-cell-wrapper{transition:right .2s}.ag-header-group-cell{transition:right .2s,width .2s}}",th=class extends v{constructor(){super(...arguments),this.beanName="colAnimation",this.executeNextFuncs=[],this.executeLaterFuncs=[],this.active=!1,this.activeNext=!1,this.suppressAnimation=!1,this.animationThreadCount=0}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>this.gridBodyCtrl=e.gridBodyCtrl)}isActive(){return this.active&&!this.suppressAnimation}setSuppressAnimation(e){this.suppressAnimation=e}start(){if(this.active)return;const{gos:e}=this;e.get("suppressColumnMoveAnimation")||e.get("enableRtl")||(this.ensureAnimationCssClassPresent(),this.active=!0,this.activeNext=!0)}finish(){this.active&&this.flush(()=>this.activeNext=!1,()=>this.active=!1)}executeNextVMTurn(e){this.activeNext?this.executeNextFuncs.push(e):e()}executeLaterVMTurn(e){this.active?this.executeLaterFuncs.push(e):e()}ensureAnimationCssClassPresent(){this.animationThreadCount++;const e=this.animationThreadCount,{gridBodyCtrl:t}=this;t.setColumnMovingCss(!0),this.executeLaterFuncs.push(()=>{this.animationThreadCount===e&&t.setColumnMovingCss(!1)})}flush(e,t){const{executeNextFuncs:o,executeLaterFuncs:s}=this;if(o.length===0&&s.length===0){e(),t();return}const i=n=>{for(;n.length;){const r=n.pop();r&&r()}};this.beans.frameworkOverrides.wrapIncoming(()=>{window.setTimeout(()=>{e(),i(o)},0),window.setTimeout(()=>{t(),i(s)},200)})}};function oh(e,t,o){var s;(s=e.colMoves)==null||s.moveColumnByIndex(t,o,"api")}function sh(e,t,o){var s;(s=e.colMoves)==null||s.moveColumns(t,o,"api")}var ih=class extends v{constructor(e){super(),this.pinned=e,this.columnsToAggregate=[],this.columnsToGroup=[],this.columnsToPivot=[]}onDragEnter(e){if(this.clearColumnsList(),this.gos.get("functionsReadOnly"))return;const t=e.dragItem.columns;t&&t.forEach(o=>{o.isPrimary()&&(o.isAnyFunctionActive()||(o.isAllowValue()?this.columnsToAggregate.push(o):o.isAllowRowGroup()?this.columnsToGroup.push(o):o.isAllowPivot()&&this.columnsToPivot.push(o)))})}getIconName(){return this.columnsToAggregate.length+this.columnsToGroup.length+this.columnsToPivot.length>0?this.pinned?"pinned":"move":null}onDragLeave(e){this.clearColumnsList()}clearColumnsList(){this.columnsToAggregate.length=0,this.columnsToGroup.length=0,this.columnsToPivot.length=0}onDragging(e){}onDragStop(e){const{valueColsSvc:t,rowGroupColsSvc:o,pivotColsSvc:s}=this.beans;this.columnsToAggregate.length>0&&(t==null||t.addColumns(this.columnsToAggregate,"toolPanelDragAndDrop")),this.columnsToGroup.length>0&&(o==null||o.addColumns(this.columnsToGroup,"toolPanelDragAndDrop")),this.columnsToPivot.length>0&&(s==null||s.addColumns(this.columnsToPivot,"toolPanelDragAndDrop"))}onDragCancel(){this.clearColumnsList()}};function nh(e,t){!t||t.length<=1||t.filter(s=>e.indexOf(s)<0).length>0||t.sort((s,i)=>{const n=e.indexOf(s),r=e.indexOf(i);return n-r})}function Bn(e){const{isFromHeader:t,fromLeft:o,xPosition:s,fromEnter:i,fakeEvent:n,pinned:r,gos:l,colModel:a,colMoves:d,visibleCols:c}=e;let{allMovingColumns:h}=e;if(t){const D=[];h.forEach(b=>{var F;let P=null,L=b.getParent();for(;L!=null&&L.getDisplayedLeafColumns().length===1;)P=L,L=L.getParent();P!=null?(!!((F=P.getColGroupDef())!=null&&F.marryChildren)?P.getProvidedColumnGroup().getLeafColumns():P.getLeafColumns()).forEach(B=>{D.includes(B)||D.push(B)}):D.includes(b)||D.push(b)}),h=D}const u=h.slice();nh(a.getCols(),u);const g=dh({movingCols:u,draggingRight:o,xPosition:s,pinned:r,gos:l,colModel:a,visibleCols:c}),p=rh(u,a);if(g.length===0)return;const f=g[0];let C=p!==null&&!i;if(t&&(C=p!==null),C&&!n&&(!o&&f>=p||o&&f<=p))return;const y=c.allCols,S=[];let w=null;for(let D=0;Dy.includes(T));if(w===null)w=L;else if(!_t(L,w))break;const F=lh(P);S.push({move:b,fragCount:F})}if(S.length===0)return;S.sort((D,b)=>D.fragCount-b.fragCount);const R=S[0].move;if(!(R>a.getCols().length-h.length))return{columns:h,toIndex:R}}function On(e){const{columns:t,toIndex:o}=Bn(e)||{},{finished:s,colMoves:i}=e;return!t||o==null?null:(i.moveColumns(t,o,"uiColumnMoved",s),s?null:{columns:t,toIndex:o})}function rh(e,t){const o=t.getCols(),s=e.map(a=>o.indexOf(a)).sort((a,d)=>a-d),i=s[0];return H(s)-i!==s.length-1?null:i}function lh(e){function t(s){const i=[];let n=s.getOriginalParent();for(;n!=null;)i.push(n),n=n.getOriginalParent();return i}let o=0;for(let s=0;sn.length?[i,n]:[n,i],i.forEach(r=>{n.indexOf(r)===-1&&o++})}return o}function ah(e,t){switch(t){case"left":return e.leftCols;case"right":return e.rightCols;default:return e.centerCols}}function dh(e){const{movingCols:t,draggingRight:o,xPosition:s,pinned:i,gos:n,colModel:r,visibleCols:l}=e;if(n.get("suppressMovableColumns")||t.some(w=>w.getColDef().suppressMovable))return[];const d=ah(l,i),c=r.getCols(),h=d.filter(w=>t.includes(w)),u=d.filter(w=>!t.includes(w)),g=c.filter(w=>!t.includes(w));let p=0,f=s;if(o){let w=0;h.forEach(R=>w+=R.getActualWidth()),f-=w}if(f>0){for(let w=0;w0){const w=u[p-1];C=g.indexOf(w)+1}else C=g.indexOf(u[0]),C===-1&&(C=0);const y=[C],S=(w,R)=>w-R;if(o){let w=C+1;const R=c.length-1;for(;w<=R;)y.push(w),w++;y.sort(S)}else{let w=C;const R=c.length-1;let D=c[w];for(;w<=R&&d.indexOf(D)<0;)w++,y.push(w),D=c[w];w=C-1;const b=0;for(;w>=b;)y.push(w),w--;y.sort(S).reverse()}return y}function Lo(e){var d;const{pinned:t,fromKeyboard:o,gos:s,ctrlsSvc:i,useHeaderRow:n,skipScrollPadding:r}=e;let l=(d=i.getHeaderRowContainerCtrl(t))==null?void 0:d.eViewport,{x:a}=e;return l?(o&&(a-=l.getBoundingClientRect().left),s.get("enableRtl")&&(n&&(l=l.querySelector(".ag-header-row")),a=l.clientWidth-a),t==null&&!r&&(a+=i.get("center").getCenterViewportScrollLeft()),a):0}function fo(e,t){for(const o of e)o.moving=t,o.dispatchColEvent("movingChanged","uiColumnMoved")}var Bs=7,Mo=100,Ct=Mo/2,ch=5,hh=100,uh=class extends v{constructor(e){super(),this.pinned=e,this.needToMoveLeft=!1,this.needToMoveRight=!1,this.lastMovedInfo=null,this.isCenterContainer=!k(e)}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>{this.gridBodyCon=e.gridBodyCtrl})}getIconName(){const{pinned:e,lastDraggingEvent:t}=this,{dragItem:o}=t||{},s=(o==null?void 0:o.columns)??[];for(const i of s){const n=i.getPinned();if(i.getColDef().lockPinned){if(n==e)return"move";continue}const r=o==null?void 0:o.containerType;if(r===e||!e)return"move";if(e&&(!n||r!==e))return"pinned"}return"notAllowed"}onDragEnter(e){const t=e.dragItem,o=t.columns;if(e.dragSource.type===0)this.setColumnsVisible(o,!0,"uiColumnDragged");else{const i=t.visibleState,n=(o||[]).filter(r=>i[r.getId()]);this.setColumnsVisible(n,!0,"uiColumnDragged")}this.gos.get("suppressMoveWhenColumnDragging")||this.attemptToPinColumns(o,this.pinned),this.onDragging(e,!0,!0)}onDragging(e=this.lastDraggingEvent,t=!1,o=!1,s=!1){const{gos:i,ctrlsSvc:n}=this.beans,r=i.get("suppressMoveWhenColumnDragging");if(s&&!r){this.finishColumnMoving();return}if(this.lastDraggingEvent=e,!e||!s&&V(e.hDirection))return;const l=Lo({x:e.x,pinned:this.pinned,gos:i,ctrlsSvc:n});t||this.checkCenterForScrolling(l),r?this.handleColumnDragWhileSuppressingMovement(e,t,o,l,s):this.handleColumnDragWhileAllowingMovement(e,t,o,l,s)}onDragLeave(){this.ensureIntervalCleared(),this.clearHighlighted(),this.updateDragItemContainerType(),this.lastMovedInfo=null}onDragStop(){this.onDragging(this.lastDraggingEvent,!1,!0,!0),this.ensureIntervalCleared(),this.lastMovedInfo=null}onDragCancel(){this.clearHighlighted(),this.ensureIntervalCleared(),this.lastMovedInfo=null}setColumnsVisible(e,t,o){if(!e)return;const s=e.filter(i=>!i.getColDef().lockVisible);this.beans.colModel.setColsVisible(s,t,o)}finishColumnMoving(){this.clearHighlighted();const e=this.lastMovedInfo;if(!e)return;const{columns:t,toIndex:o}=e;this.beans.colMoves.moveColumns(t,o,"uiColumnMoved",!0)}updateDragItemContainerType(){const{lastDraggingEvent:e}=this;if(this.gos.get("suppressMoveWhenColumnDragging")||!e)return;const t=e.dragItem;t&&(t.containerType=this.pinned)}handleColumnDragWhileSuppressingMovement(e,t,o,s,i){const n=this.getAllMovingColumns(e,!0);if(i){const r=this.isAttemptingToPin(n);r&&this.attemptToPinColumns(n,void 0,!0);const{fromLeft:l,xPosition:a}=this.getNormalisedXPositionInfo(n,r)||{};if(l==null||a==null){this.finishColumnMoving();return}this.moveColumnsAfterHighlight({allMovingColumns:n,xPosition:a,fromEnter:t,fakeEvent:o,fromLeft:l})}else{if(!this.beans.dragAndDrop.isDropZoneWithinThisGrid(e))return;this.highlightHoveredColumn(n,s)}}handleColumnDragWhileAllowingMovement(e,t,o,s,i){const n=this.getAllMovingColumns(e),r=this.normaliseDirection(e.hDirection)==="right",l=e.dragSource.type===1,a=this.getMoveColumnParams({allMovingColumns:n,isFromHeader:l,xPosition:s,fromLeft:r,fromEnter:t,fakeEvent:o}),d=On({...a,finished:i});d&&(this.lastMovedInfo=d)}getAllMovingColumns(e,t=!1){const o=e.dragSource.getDragItem();let s=null;t?(s=o.columnsInSplit,s||(s=o.columns)):s=o.columns;const i=n=>n.getColDef().lockPinned?n.getPinned()==this.pinned:!0;return s?s.filter(i):[]}getMoveColumnParams(e){const{allMovingColumns:t,isFromHeader:o,xPosition:s,fromLeft:i,fromEnter:n,fakeEvent:r}=e,{gos:l,colModel:a,colMoves:d,visibleCols:c}=this.beans;return{allMovingColumns:t,isFromHeader:o,fromLeft:i,xPosition:s,pinned:this.pinned,fromEnter:n,fakeEvent:r,gos:l,colModel:a,colMoves:d,visibleCols:c}}highlightHoveredColumn(e,t){var c;const{gos:o,colModel:s}=this.beans,i=o.get("enableRtl"),n=s.getCols().filter(h=>h.isVisible()&&h.getPinned()===this.pinned);let r=null,l=null,a=null;for(const h of n){if(l=h.getActualWidth(),r=this.getNormalisedColumnLeft(h,0,i),r!=null){const u=r+l;if(r<=t&&u>=t){a=h;break}}r=null,l=null}if(a)e.indexOf(a)!==-1&&(a=null);else{for(let h=n.length-1;h>=0;h--){const u=n[h],g=n[h].getParent();if(!g){a=u;break}const p=g==null?void 0:g.getDisplayedLeafColumns();if(p.length){a=H(p);break}}if(!a)return;r=this.getNormalisedColumnLeft(a,0,i),l=a.getActualWidth()}if(((c=this.lastHighlightedColumn)==null?void 0:c.column)!==a&&this.clearHighlighted(),a==null||r==null||l==null)return;let d;t-rBs;return t&&o||e.some(s=>s.getPinned()!==this.pinned)}moveColumnsAfterHighlight(e){const{allMovingColumns:t,xPosition:o,fromEnter:s,fakeEvent:i,fromLeft:n}=e,r=this.getMoveColumnParams({allMovingColumns:t,isFromHeader:!0,xPosition:o,fromLeft:n,fromEnter:s,fakeEvent:i}),{columns:l,toIndex:a}=Bn(r)||{};l&&a!=null&&(this.lastMovedInfo={columns:l,toIndex:a}),this.finishColumnMoving()}clearHighlighted(){const{lastHighlightedColumn:e}=this;e&&(Os(e.column,null),this.lastHighlightedColumn=null)}checkCenterForScrolling(e){if(!this.isCenterContainer)return;const t=this.beans.ctrlsSvc.get("center"),o=t.getCenterViewportScrollLeft(),s=o+t.getCenterWidth();let i,n;this.gos.get("enableRtl")?(i=es-Ct):(n=es-Ct),this.needToMoveRight=i,this.needToMoveLeft=n,n||i?this.ensureIntervalStarted():this.ensureIntervalCleared()}ensureIntervalStarted(){var e;this.movingIntervalId||(this.intervalCount=0,this.failedMoveAttempts=0,this.movingIntervalId=window.setInterval(this.moveInterval.bind(this),hh),(e=this.beans.dragAndDrop.getDragAndDropImageComponent())==null||e.setIcon(this.needToMoveLeft?"left":"right",!0))}ensureIntervalCleared(){var e;this.movingIntervalId&&(window.clearInterval(this.movingIntervalId),this.movingIntervalId=null,this.failedMoveAttempts=0,(e=this.beans.dragAndDrop.getDragAndDropImageComponent())==null||e.setIcon(this.getIconName(),!1))}moveInterval(){var s,i;let e;this.intervalCount++,e=10+this.intervalCount*ch,e>Mo&&(e=Mo);let t=null;const o=this.gridBodyCon.scrollFeature;if(this.needToMoveLeft?t=o.scrollHorizontally(-e):this.needToMoveRight&&(t=o.scrollHorizontally(e)),t!==0)this.onDragging(this.lastDraggingEvent),this.failedMoveAttempts=0;else{this.failedMoveAttempts++;const{pinnedCols:n,dragAndDrop:r,gos:l}=this.beans;if(this.failedMoveAttempts<=Bs+1||!n)return;if((s=r.getDragAndDropImageComponent())==null||s.setIcon("pinned",!1),!l.get("suppressMoveWhenColumnDragging")){const a=(i=this.lastDraggingEvent)==null?void 0:i.dragItem.columns;this.attemptToPinColumns(a,void 0,!0)}}}getPinDirection(){if(this.needToMoveLeft||this.pinned==="left")return"left";if(this.needToMoveRight||this.pinned==="right")return"right"}attemptToPinColumns(e,t,o=!1){const s=(e||[]).filter(r=>!r.getColDef().lockPinned);if(!s.length)return 0;o&&(t=this.getPinDirection());const{pinnedCols:i,dragAndDrop:n}=this.beans;return i==null||i.setColsPinned(s,t,"uiColumnDragged"),o&&n.nudge(),s.length}destroy(){super.destroy(),this.lastDraggingEvent=null,this.clearHighlighted(),this.lastMovedInfo=null}};function Os(e,t){e.highlighted!==t&&(e.highlighted=t,e.dispatchColEvent("headerHighlightChanged","uiColumnMoved"))}function gh(e){const t=e.length;let o,s;for(let i=0;i{let i;const n=s.gridBodyCtrl.eBodyViewport;switch(o){case"left":i=[[n,s.left.eContainer],[s.bottomLeft.eContainer],[s.topLeft.eContainer]];break;case"right":i=[[n,s.right.eContainer],[s.bottomRight.eContainer],[s.topRight.eContainer]];break;default:i=[[n,s.center.eViewport],[s.bottomCenter.eViewport],[s.topCenter.eViewport]];break}this.eSecondaryContainers=i}),this.moveColumnFeature=this.createManagedBean(new uh(o)),this.bodyDropPivotTarget=this.createManagedBean(new ih(o)),t.addDropTarget(this),this.addDestroyFunc(()=>t.removeDropTarget(this))}isInterestedIn(e){return e===1||e===0&&this.gos.get("allowDragFromColumnsToolPanel")}getSecondaryContainers(){return this.eSecondaryContainers}getContainer(){return this.eContainer}getIconName(){return this.currentDropListener.getIconName()}isDropColumnInPivotMode(e){return this.beans.colModel.isPivotMode()&&e.dragSource.type===0}onDragEnter(e){this.currentDropListener=this.isDropColumnInPivotMode(e)?this.bodyDropPivotTarget:this.moveColumnFeature,this.currentDropListener.onDragEnter(e)}onDragLeave(e){this.currentDropListener.onDragLeave(e)}onDragging(e){this.currentDropListener.onDragging(e)}onDragStop(e){this.currentDropListener.onDragStop(e)}onDragCancel(){this.currentDropListener.onDragCancel()}},fh=class extends v{constructor(){super(...arguments),this.beanName="colMoves"}moveColumnByIndex(e,t,o){const s=this.beans.colModel.getCols();if(!s)return;const i=s[e];this.moveColumns([i],t,o)}moveColumns(e,t,o,s=!0){const{colModel:i,colAnimation:n,visibleCols:r,eventSvc:l}=this.beans,a=i.getCols();if(!a)return;if(t>a.length-e.length){I(30,{toIndex:t});return}n==null||n.start();const d=i.getColsForKeys(e);this.doesMovePassRules(d,t)&&(ys(i.getCols(),d,t),r.refresh(o),l.dispatchEvent({type:"columnMoved",columns:d,column:d.length===1?d[0]:null,toIndex:t,finished:s,source:o})),n==null||n.finish()}doesMovePassRules(e,t){const o=this.getProposedColumnOrder(e,t);return this.doesOrderPassRules(o)}doesOrderPassRules(e){const{colModel:t,gos:o}=this.beans;return!(!Ji(e,t.getColTree())||!(i=>{const n=d=>d?d==="left"||d===!0?-1:1:0,r=o.get("enableRtl");let l=r?1:-1,a=!0;return i.forEach(d=>{const c=n(d.getColDef().lockPosition);r?c>l&&(a=!1):cl?"hide":"notAllowed",getDragItem:a?()=>vh(t,r.allCols):()=>mh(t),dragItemName:o,onDragStarted:()=>{l=!s.get("suppressDragLeaveHidesColumns"),fo(d,!0)},onDragStopped:()=>fo(d,!1),onDragCancelled:()=>fo(d,!1),onGridEnter:u=>{if(l){const{columns:g=[],visibleState:p}=u??{},f=a?y=>!p||p[y.getColId()]:()=>!0,C=g.filter(y=>!y.getColDef().lockVisible&&f(y));i.setColsVisible(C,!0,"uiColumnMoved")}},onGridExit:u=>{var g;if(l){const p=((g=u==null?void 0:u.columns)==null?void 0:g.filter(f=>!f.getColDef().lockVisible))||[];i.setColsVisible(p,!1,"uiColumnMoved")}}};return n.addDragSource(h,!0),h}};function Ch(e,t){for(;e;){if(e.getGroupId()===t)return e;e=e.getParent()}}function mh(e){const t={};return t[e.getId()]=e.isVisible(),{columns:[e],visibleState:t,containerType:e.pinned}}function vh(e,t){var l;const o=e.getProvidedColumnGroup().getLeafColumns(),s={};o.forEach(a=>s[a.getId()]=a.isVisible());const i=[];t.forEach(a=>{o.indexOf(a)>=0&&(i.push(a),ye(o,a))}),o.forEach(a=>i.push(a));const n=[],r=e.getLeafColumns();for(const a of i)r.indexOf(a)!==-1&&n.push(a);return{columns:i,columnsInSplit:n,visibleState:s,containerType:(l=n[0])==null?void 0:l.pinned}}var wh={moduleName:"ColumnMove",version:G,beans:[fh,th],apiFunctions:{moveColumnByIndex:oh,moveColumns:sh},dependsOn:[Xc],css:[eh]},yh=class extends v{constructor(){super(...arguments),this.beanName="autoWidthCalc"}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>{this.centerRowContainerCtrl=e.center})}getPreferredWidthForColumn(e,t){const o=this.getHeaderCellForColumn(e);if(!o)return-1;const s=this.beans.rowRenderer.getAllCellsNotSpanningForColumn(e);return t||s.push(o),this.getPreferredWidthForElements(s)}getPreferredWidthForColumnGroup(e){const t=this.getHeaderCellForColumn(e);return t?this.getPreferredWidthForElements([t]):-1}getPreferredWidthForElements(e,t){const o=document.createElement("form");o.style.position="fixed";const s=this.centerRowContainerCtrl.eContainer;e.forEach(n=>this.cloneItemIntoDummy(n,o)),s.appendChild(o);const i=o.offsetWidth;return s.removeChild(o),t=t??this.gos.get("autoSizePadding"),i+t}getHeaderCellForColumn(e){let t=null;return this.beans.ctrlsSvc.getHeaderRowContainerCtrls().forEach(o=>{const s=o.getHtmlElementForColumnHeader(e);s!=null&&(t=s)}),t}cloneItemIntoDummy(e,t){const o=e.cloneNode(!0);o.style.width="",o.style.position="static",o.style.left="";const s=document.createElement("div"),i=s.classList;["ag-header-cell","ag-header-group-cell"].some(l=>o.classList.contains(l))?(i.add("ag-header","ag-header-row"),s.style.position="static"):i.add("ag-row");let r=e.parentElement;for(;r;){if(["ag-header-row","ag-row"].some(a=>r.classList.contains(a))){for(let a=0;athis.resizeLeafColumnsToFit("uiColumnResized")))}onResizeStart(e){const{columnsToResize:t,resizeStartWidth:o,resizeRatios:s,groupAfterColumns:i,groupAfterStartWidth:n,groupAfterRatios:r}=this.getInitialValues(e);this.resizeCols=t,this.resizeStartWidth=o,this.resizeRatios=s,this.resizeTakeFromCols=i,this.resizeTakeFromStartWidth=n,this.resizeTakeFromRatios=r,this.toggleColumnResizing(!0)}onResizing(e,t,o="uiColumnResized"){const s=this.normaliseDragChange(t),i=this.resizeStartWidth+s;this.resizeColumnsFromLocalValues(i,o,e)}getInitialValues(e){var a;const t=d=>d.reduce((c,h)=>c+h.getActualWidth(),0),o=(d,c)=>d.map(h=>h.getActualWidth()/c),s=this.getColumnsToResize(),i=t(s),n=o(s,i),r={columnsToResize:s,resizeStartWidth:i,resizeRatios:n};let l=null;if(e&&(l=((a=this.beans.colGroupSvc)==null?void 0:a.getGroupAtDirection(this.columnGroup,"After"))??null),l){const d=l.getDisplayedLeafColumns(),c=r.groupAfterColumns=d.filter(u=>u.isResizable()),h=r.groupAfterStartWidth=t(c);r.groupAfterRatios=o(c,h)}else r.groupAfterColumns=void 0,r.groupAfterStartWidth=void 0,r.groupAfterRatios=void 0;return r}resizeLeafColumnsToFit(e){const t=this.beans.autoWidthCalc.getPreferredWidthForColumnGroup(this.columnGroup),o=this.getInitialValues();t>o.resizeStartWidth&&this.resizeColumns(o,t,e,!0)}resizeColumnsFromLocalValues(e,t,o=!0){if(!this.resizeCols||!this.resizeRatios)return;const s={columnsToResize:this.resizeCols,resizeStartWidth:this.resizeStartWidth,resizeRatios:this.resizeRatios,groupAfterColumns:this.resizeTakeFromCols,groupAfterStartWidth:this.resizeTakeFromStartWidth,groupAfterRatios:this.resizeTakeFromRatios};this.resizeColumns(s,e,t,o)}resizeColumns(e,t,o,s=!0){var h;const{columnsToResize:i,resizeStartWidth:n,resizeRatios:r,groupAfterColumns:l,groupAfterStartWidth:a,groupAfterRatios:d}=e,c=[];if(c.push({columns:i,ratios:r,width:t}),l){const u=t-n;c.push({columns:l,ratios:d,width:a-u})}(h=this.beans.colResize)==null||h.resizeColumnSets({resizeSets:c,finished:s,source:o}),s&&this.toggleColumnResizing(!1)}toggleColumnResizing(e){this.comp.toggleCss("ag-column-resizing",e)}getColumnsToResize(){return this.columnGroup.getDisplayedLeafColumns().filter(t=>t.isResizable())}normaliseDragChange(e){let t=e;return this.gos.get("enableRtl")?this.pinned!=="left"&&(t*=-1):this.pinned==="right"&&(t*=-1),t}destroy(){super.destroy(),this.resizeCols=void 0,this.resizeRatios=void 0,this.resizeTakeFromCols=void 0,this.resizeTakeFromRatios=void 0}},Fh=class extends v{constructor(e,t,o,s,i){super(),this.pinned=e,this.column=t,this.eResize=o,this.comp=s,this.ctrl=i}postConstruct(){const e=[];let t,o;const s=()=>{if(W(this.eResize,t),!t)return;const{horizontalResizeSvc:r,colAutosize:l}=this.beans,a=r.addResizeBar({eResizeBar:this.eResize,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this,!1),onResizeEnd:this.onResizing.bind(this,!0)});e.push(a),o&&l&&e.push(l.addColumnAutosize(this.eResize,this.column))},i=()=>{e.forEach(r=>r()),e.length=0},n=()=>{const r=this.column.isResizable(),l=!this.gos.get("suppressAutoSize")&&!this.column.getColDef().suppressAutoSize;(r!==t||l!==o)&&(t=r,o=l,i(),s())};n(),this.addDestroyFunc(i),this.ctrl.setRefreshFunction("resize",n)}onResizing(e,t){const{column:o,lastResizeAmount:s,resizeStartWidth:i,beans:n}=this,r=this.normaliseResizeAmount(t),l=i+r,a=[{key:o,newWidth:l}],{pinnedCols:d,ctrlsSvc:c,colResize:h}=n;if(this.column.getPinned()){const u=(d==null?void 0:d.leftWidth)??0,g=(d==null?void 0:d.rightWidth)??0,p=xt(c.getGridBodyCtrl().eBodyViewport)-50;if(u+g+(r-s)>p)return}this.lastResizeAmount=r,h==null||h.setColumnWidths(a,this.resizeWithShiftKey,e,"uiColumnResized"),e&&this.toggleColumnResizing(!1)}onResizeStart(e){this.resizeStartWidth=this.column.getActualWidth(),this.lastResizeAmount=0,this.resizeWithShiftKey=e,this.toggleColumnResizing(!0)}toggleColumnResizing(e){this.comp.toggleCss("ag-column-resizing",e)}normaliseResizeAmount(e){let t=e;const o=this.pinned!=="left",s=this.pinned==="right";return this.gos.get("enableRtl")?o&&(t*=-1):s&&(t*=-1),t}},xh=class extends v{constructor(){super(...arguments),this.beanName="colResize"}setColumnWidths(e,t,o,s){const i=[],{colModel:n,gos:r,visibleCols:l}=this.beans;e.forEach(a=>{const d=n.getColDefCol(a.key)||n.getCol(a.key);if(!d)return;if(i.push({width:a.newWidth,ratios:[1],columns:[d]}),r.get("colResizeDefault")==="shift"&&(t=!t),t){const h=l.getColAfter(d);if(!h)return;const u=d.getActualWidth()-a.newWidth,g=h.getActualWidth()+u;i.push({width:g,ratios:[1],columns:[h]})}}),i.length!==0&&this.resizeColumnSets({resizeSets:i,finished:o,source:s})}resizeColumnSets(e){const{resizeSets:t,finished:o,source:s}=e;if(!(!t||t.every(c=>Dh(c)))){if(o){const c=t&&t.length>0?t[0].columns:null;It(this.eventSvc,c,o,s)}return}const n=[],r=[];t.forEach(c=>{const{width:h,columns:u,ratios:g}=c,p={},f={};u.forEach(S=>r.push(S));let C=!0,y=0;for(;C;){if(y++,y>1e3){K(31);break}C=!1;const S=[];let w=0,R=h;u.forEach((b,P)=>{if(f[b.getId()])R-=p[b.getId()];else{S.push(b);const F=g[P];w+=F}});const D=1/w;S.forEach((b,P)=>{const L=P===S.length-1;let F;L?F=R:(F=Math.round(g[P]*h*D),R-=F);const T=b.getMinWidth(),M=b.getMaxWidth();F0&&F>M&&(F=M,f[b.getId()]=!0,C=!0),p[b.getId()]=F})}u.forEach(S=>{const w=p[S.getId()];S.getActualWidth()!==w&&(S.setActualWidth(w,s),n.push(S))})});const l=n.length>0;let a=[];if(l){const{colFlex:c,visibleCols:h,colViewport:u}=this.beans;a=(c==null?void 0:c.refreshFlexedColumns({resizingCols:r,skipSetLeft:!0}))??[],h.setLeftValues(s),h.updateBodyWidths(),u.checkViewportColumns()}const d=r.concat(a);(l||o)&&It(this.eventSvc,d,o,s,a)}resizeHeader(e,t,o){if(!e.isResizable())return;const s=e.getActualWidth(),i=e.getMinWidth(),n=e.getMaxWidth(),r=Math.min(Math.max(s+t,i),n);this.setColumnWidths([{key:e,newWidth:r}],o,!0,"uiColumnResized")}createResizeFeature(e,t,o,s,i){return new Fh(e,t,o,s,i)}createGroupResizeFeature(e,t,o,s){return new Rh(e,t,o,s)}};function Dh(e){const{columns:t,width:o}=e;let s=0,i=0,n=!0;t.forEach(a=>{const d=a.getMinWidth();s+=d||0;const c=a.getMaxWidth();c>0?i+=c:n=!1});const r=o>=s,l=!n||o<=i;return r&&l}var Ph={moduleName:"ColumnResize",version:G,beans:[xh],apiFunctions:{setColumnWidths:Sh},dependsOn:[Jc,bh]},Eh=class extends v{constructor(e,t){super(),this.removeChildListenersFuncs=[],this.columnGroup=t,this.comp=e}postConstruct(){this.addListenersToChildrenColumns(),this.addManagedListeners(this.columnGroup,{displayedChildrenChanged:this.onDisplayedChildrenChanged.bind(this)}),this.onWidthChanged(),this.addDestroyFunc(this.removeListenersOnChildrenColumns.bind(this))}addListenersToChildrenColumns(){this.removeListenersOnChildrenColumns();const e=this.onWidthChanged.bind(this);this.columnGroup.getLeafColumns().forEach(t=>{t.__addEventListener("widthChanged",e),t.__addEventListener("visibleChanged",e),this.removeChildListenersFuncs.push(()=>{t.__removeEventListener("widthChanged",e),t.__removeEventListener("visibleChanged",e)})})}removeListenersOnChildrenColumns(){this.removeChildListenersFuncs.forEach(e=>e()),this.removeChildListenersFuncs=[]}onDisplayedChildrenChanged(){this.addListenersToChildrenColumns(),this.onWidthChanged()}onWidthChanged(){const e=this.columnGroup.getActualWidth();this.comp.setWidth(`${e}px`),this.comp.toggleCss("ag-hidden",e===0)}},Th=class extends In{constructor(){super(...arguments),this.onSuppressColMoveChange=()=>{!this.isAlive()||this.isSuppressMoving()?this.removeDragSource():this.dragSource||this.setDragSource(this.eGui)}}setComp(e,t,o,s,i){const{column:n,beans:r}=this,{context:l,colNames:a,colHover:d,rangeSvc:c,colResize:h}=r;this.comp=e,i=Kt(this,l,i),this.setGui(t,i),this.displayName=a.getDisplayNameForColumnGroup(n,"header"),this.refreshHeaderStyles(),this.addClasses(),this.setupMovingCss(i),this.setupExpandable(i),this.setupTooltip(),this.setupAutoHeight({wrapperElement:s,compBean:i}),this.setupUserComp(),this.addHeaderMouseListeners(i),this.addManagedPropertyListener("groupHeaderHeight",this.refreshMaxHeaderHeight.bind(this)),this.refreshMaxHeaderHeight();const u=this.rowCtrl.pinned,g=n.getProvidedColumnGroup().getLeafColumns();d==null||d.createHoverFeature(i,g,t),c==null||c.createRangeHighlightFeature(i,n,e),i.createManagedBean(new Tn(n,t,r)),i.createManagedBean(new Eh(e,n)),h?this.resizeFeature=i.createManagedBean(h.createGroupResizeFeature(e,o,u,n)):e.setResizableDisplayed(!1),i.createManagedBean(new $t(t,{shouldStopEventPropagation:this.shouldStopEventPropagation.bind(this),onTabKeyDown:()=>{},handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this)})),this.addHighlightListeners(i,g),i.addManagedPropertyListener("suppressMovableColumns",this.onSuppressColMoveChange),this.addResizeAndMoveKeyboardListeners(i),i.addDestroyFunc(()=>this.clearComponent())}getHeaderClassParams(){const{column:e,beans:t}=this,o=e.getDefinition();return A(t.gos,{colDef:o,columnGroup:e,floatingFilter:!1})}refreshMaxHeaderHeight(){const{gos:e,comp:t}=this,o=e.get("groupHeaderHeight");o!=null?o===0?t.setHeaderWrapperHidden(!0):t.setHeaderWrapperMaxHeight(o):(t.setHeaderWrapperHidden(!1),t.setHeaderWrapperMaxHeight(null))}addHighlightListeners(e,t){if(this.beans.gos.get("suppressMoveWhenColumnDragging"))for(const o of t)e.addManagedListeners(o,{headerHighlightChanged:this.onLeafColumnHighlightChanged.bind(this,o)})}onLeafColumnHighlightChanged(e){const t=this.column.getDisplayedLeafColumns(),o=t[0]===e,s=H(t)===e;if(!o&&!s)return;const i=e.getHighlighted(),n=!!this.rowCtrl.getHeaderCellCtrls().find(a=>a.column.isMoving());let r=!1,l=!1;if(n){const a=this.beans.gos.get("enableRtl"),d=i===1,c=i===0;o&&(a?l=d:r=c),s&&(a?r=c:l=d)}this.comp.toggleCss("ag-header-highlight-before",r),this.comp.toggleCss("ag-header-highlight-after",l)}resizeHeader(e,t){const{resizeFeature:o}=this;if(!o)return;const s=o.getInitialValues(t);o.resizeColumns(s,s.resizeStartWidth+e,"uiColumnResized",!0)}resizeLeafColumnsToFit(e){var t;(t=this.resizeFeature)==null||t.resizeLeafColumnsToFit(e)}setupUserComp(){const{colGroupSvc:e,userCompFactory:t,gos:o,enterpriseMenuFactory:s}=this.beans,i=this.column,n=i.getProvidedColumnGroup(),r=A(o,{displayName:this.displayName,columnGroup:i,setExpanded:a=>{e.setColumnGroupOpened(n,a,"gridInitializing")},setTooltip:(a,d)=>{o.assertModuleRegistered("Tooltip",3),this.setupTooltip(a,d)},showColumnMenu:(a,d)=>s==null?void 0:s.showMenuAfterButtonClick(n,a,"columnMenu",d),showColumnMenuAfterMouseClick:(a,d)=>s==null?void 0:s.showMenuAfterMouseEvent(n,a,"columnMenu",d),eGridHeader:this.eGui}),l=la(t,r);l&&this.comp.setUserCompDetails(l)}addHeaderMouseListeners(e){const t=i=>this.handleMouseOverChange(i.type==="mouseenter"),o=()=>this.dispatchColumnMouseEvent("columnHeaderClicked",this.column.getProvidedColumnGroup()),s=i=>this.handleContextMenuMouseEvent(i,void 0,this.column.getProvidedColumnGroup());e.addManagedListeners(this.eGui,{mouseenter:t,mouseleave:t,click:o,contextmenu:s})}handleMouseOverChange(e){this.eventSvc.dispatchEvent({type:e?"columnHeaderMouseOver":"columnHeaderMouseLeave",column:this.column.getProvidedColumnGroup()})}setupTooltip(e,t){var o;this.tooltipFeature=(o=this.beans.tooltipSvc)==null?void 0:o.setupHeaderGroupTooltip(this.tooltipFeature,this,e,t)}setupExpandable(e){const t=this.column.getProvidedColumnGroup();this.refreshExpanded();const o=this.refreshExpanded.bind(this);e.addManagedListeners(t,{expandedChanged:o,expandableChanged:o})}refreshExpanded(){const{column:e}=this;this.expandable=e.isExpandable();const t=e.isExpanded();this.expandable?this.comp.setAriaExpanded(t?"true":"false"):this.comp.setAriaExpanded(void 0),this.refreshHeaderStyles()}addClasses(){const{column:e}=this,t=e.getColGroupDef(),o=hn(t,this.gos,null,e);e.isPadding()?(o.push("ag-header-group-cell-no-group"),e.getLeafColumns().every(i=>i.isSpanHeaderHeight())&&o.push("ag-header-span-height")):(o.push("ag-header-group-cell-with-group"),t!=null&&t.wrapHeaderText&&o.push("ag-header-cell-wrap-text")),o.forEach(s=>this.comp.toggleCss(s,!0))}setupMovingCss(e){const{column:t}=this,s=t.getProvidedColumnGroup().getLeafColumns(),i=()=>this.comp.toggleCss("ag-header-cell-moving",t.isMoving());s.forEach(n=>{e.addManagedListeners(n,{movingChanged:i})}),i()}onFocusIn(e){this.eGui.contains(e.relatedTarget)||this.focusThis()}handleKeyDown(e){super.handleKeyDown(e);const t=this.getWrapperHasFocus();if(!(!this.expandable||!t)&&e.key===m.ENTER){const o=this.column,s=!o.isExpanded();this.beans.colGroupSvc.setColumnGroupOpened(o.getProvidedColumnGroup(),s,"uiColumnExpanded")}}setDragSource(e){var t;!this.isAlive()||this.isSuppressMoving()||(this.removeDragSource(),e&&(this.dragSource=((t=this.beans.colMoves)==null?void 0:t.setDragSourceForHeader(e,this.column,this.displayName))??null))}isSuppressMoving(){return this.gos.get("suppressMovableColumns")||this.column.getLeafColumns().some(e=>e.getColDef().suppressMovable||e.getColDef().lockPosition)}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),super.destroy()}};function kh(e,t,o){var s;(s=e.colGroupSvc)==null||s.setColumnGroupOpened(t,o,"api")}function Ih(e,t,o){var s;return((s=e.colGroupSvc)==null?void 0:s.getColumnGroup(t,o))??null}function Lh(e,t){var o;return((o=e.colGroupSvc)==null?void 0:o.getProvidedColGroup(t))??null}function Mh(e,t,o){return e.colNames.getDisplayNameForColumnGroup(t,o)||""}function Ah(e){var t;return((t=e.colGroupSvc)==null?void 0:t.getColumnGroupState())??[]}function Hh(e,t){var o;(o=e.colGroupSvc)==null||o.setColumnGroupState(t,"api")}function Gh(e){var t;(t=e.colGroupSvc)==null||t.resetColumnGroupState("api")}function Bh(e){return e.visibleCols.treeLeft}function Oh(e){return e.visibleCols.treeCenter}function Wh(e){return e.visibleCols.treeRight}function Vh(e){return e.visibleCols.getAllTrees()}function Nh(e,t){for(let o=0;o=0&&(e[s]=e[e.length-1],e.pop())}}var zh=class extends v{constructor(){super(...arguments),this.beanName="visibleCols",this.colsAndGroupsMap={},this.leftCols=[],this.rightCols=[],this.centerCols=[],this.allCols=[],this.bodyWidth=0,this.leftWidth=0,this.rightWidth=0,this.isBodyWidthDirty=!0}refresh(e,t=!1){const{colFlex:o,colModel:s,colGroupSvc:i,colViewport:n,selectionColSvc:r}=this.beans;t||this.buildTrees(s,i),i==null||i.updateOpenClosedVisibility(),this.leftCols=Co(this.treeLeft),this.centerCols=Co(this.treeCenter),this.rightCols=Co(this.treeRight),r==null||r.refreshVisibility(this.leftCols,this.centerCols,this.rightCols),this.joinColsAriaOrder(s),this.joinCols(),this.setLeftValues(e),this.autoHeightCols=this.allCols.filter(l=>l.isAutoHeight()),o==null||o.refreshFlexedColumns(),this.updateBodyWidths(),n.checkViewportColumns(!1),this.setFirstRightAndLastLeftPinned(s,this.leftCols,this.rightCols,e),this.eventSvc.dispatchEvent({type:"displayedColumnsChanged",source:e})}updateBodyWidths(){const e=Ee(this.centerCols),t=Ee(this.leftCols),o=Ee(this.rightCols);this.isBodyWidthDirty=this.bodyWidth!==e,(this.bodyWidth!==e||this.leftWidth!==t||this.rightWidth!==o)&&(this.bodyWidth=e,this.leftWidth=t,this.rightWidth=o,this.eventSvc.dispatchEvent({type:"columnContainerWidthChanged"}),this.eventSvc.dispatchEvent({type:"displayedColumnsWidthChanged"}))}setLeftValues(e){this.setLeftValuesOfCols(e),this.setLeftValuesOfGroups()}setFirstRightAndLastLeftPinned(e,t,o,s){let i,n;this.gos.get("enableRtl")?(i=t?t[0]:null,n=o?H(o):null):(i=t?H(t):null,n=o?o[0]:null),e.getCols().forEach(r=>{r.setLastLeftPinned(r===i,s),r.setFirstRightPinned(r===n,s)})}buildTrees(e,t){const o=e.getColsToShow(),s=o.filter(a=>a.getPinned()=="left"),i=o.filter(a=>a.getPinned()=="right"),n=o.filter(a=>a.getPinned()!="left"&&a.getPinned()!="right"),r=new Vl,l=a=>t?t.createColumnGroups(a):a.columns;this.treeLeft=l({columns:s,idCreator:r,pinned:"left",oldDisplayedGroups:this.treeLeft}),this.treeRight=l({columns:i,idCreator:r,pinned:"right",oldDisplayedGroups:this.treeRight}),this.treeCenter=l({columns:n,idCreator:r,pinned:null,oldDisplayedGroups:this.treeCenter}),this.updateColsAndGroupsMap()}clear(){this.leftCols=[],this.rightCols=[],this.centerCols=[],this.allCols=[],this.ariaOrderColumns=[]}joinColsAriaOrder(e){const t=e.getCols(),o=[],s=[],i=[];for(const n of t){const r=n.getPinned();r?r===!0||r==="left"?o.push(n):i.push(n):s.push(n)}this.ariaOrderColumns=o.concat(s).concat(i)}getAriaColIndex(e){let t;return O(e)?t=e.getLeafColumns()[0]:t=e,this.ariaOrderColumns.indexOf(t)+1}setLeftValuesOfGroups(){[this.treeLeft,this.treeRight,this.treeCenter].forEach(e=>{e.forEach(t=>{O(t)&&t.checkLeft()})})}setLeftValuesOfCols(e){const{colModel:t}=this.beans;if(!t.getColDefCols())return;const s=t.getCols().slice(0),i=this.gos.get("enableRtl");[this.leftCols,this.rightCols,this.centerCols].forEach(n=>{if(i){let r=Ee(n);n.forEach(l=>{r-=l.getActualWidth(),l.setLeft(r,e)})}else{let r=0;n.forEach(l=>{l.setLeft(r,e),r+=l.getActualWidth()})}Nh(s,n)}),s.forEach(n=>{n.setLeft(null,e)})}joinCols(){this.gos.get("enableRtl")?this.allCols=this.rightCols.concat(this.centerCols).concat(this.leftCols):this.allCols=this.leftCols.concat(this.centerCols).concat(this.rightCols)}getAllTrees(){return this.treeLeft&&this.treeRight&&this.treeCenter?this.treeLeft.concat(this.treeCenter).concat(this.treeRight):null}isColDisplayed(e){return this.allCols.indexOf(e)>=0}getLeftColsForRow(e){const{leftCols:t,beans:{colModel:o}}=this;return o.colSpanActive?this.getColsForRow(e,t):t}getRightColsForRow(e){const{rightCols:t,beans:{colModel:o}}=this;return o.colSpanActive?this.getColsForRow(e,t):t}getColsForRow(e,t,o,s){const i=[];let n=null;for(let r=0;r1){const u=d-1;for(let g=1;g<=u;g++)c.push(t[r+g]);r+=u}let h;o?(h=!1,c.forEach(u=>{o(u)&&(h=!0)})):h=!0,h&&(i.length===0&&n&&(s&&s(l))&&i.push(n),i.push(l)),n=l}return i}getContainerWidth(e){switch(e){case"left":return this.leftWidth;case"right":return this.rightWidth;default:return this.bodyWidth}}getColBefore(e){const t=this.allCols,o=t.indexOf(e);return o>0?t[o-1]:null}isPinningLeft(){return this.leftCols.length>0}isPinningRight(){return this.rightCols.length>0}updateColsAndGroupsMap(){this.colsAndGroupsMap={};const e=t=>{this.colsAndGroupsMap[t.getUniqueId()]=t};xe(this.treeCenter,!1,e),xe(this.treeLeft,!1,e),xe(this.treeRight,!1,e)}isVisible(e){return this.colsAndGroupsMap[e.getUniqueId()]===e}getFirstColumn(){const e=this.gos.get("enableRtl"),t=["leftCols","centerCols","rightCols"];e&&t.reverse();for(let o=0;o{we(o)&&t.push(o)}),t}var _h=class extends v{constructor(){super(...arguments),this.beanName="colGroupSvc"}getColumnGroupState(){const e=[],t=this.beans.colModel.getColTree();return ce(null,t,o=>{U(o)&&e.push({groupId:o.getGroupId(),open:o.isExpanded()})}),e}resetColumnGroupState(e){const t=this.beans.colModel.getColDefColTree();if(!t)return;const o=[];ce(null,t,s=>{if(U(s)){const i=s.getColGroupDef(),n={groupId:s.getGroupId(),open:i?i.openByDefault:void 0};o.push(n)}}),this.setColumnGroupState(o,e)}setColumnGroupState(e,t){const{colModel:o,colAnimation:s,visibleCols:i,eventSvc:n}=this.beans;if(!o.getColTree().length)return;s==null||s.start();const l=[];e.forEach(a=>{const d=a.groupId,c=a.open,h=this.getProvidedColGroup(d);h&&h.isExpanded()!==c&&(h.setExpanded(c),l.push(h))}),i.refresh(t,!0),l.length&&n.dispatchEvent({type:"columnGroupOpened",columnGroup:l.length===1?l[0]:void 0,columnGroups:l}),s==null||s.finish()}setColumnGroupOpened(e,t,o){let s;U(e)?s=e.getId():s=e||"",this.setColumnGroupState([{groupId:s,open:t}],o)}getProvidedColGroup(e){let t=null;return ce(null,this.beans.colModel.getColTree(),o=>{U(o)&&o.getId()===e&&(t=o)}),t}getGroupAtDirection(e,t){const o=e.getProvidedColumnGroup().getLevel()+e.getPaddingLevel(),s=e.getDisplayedLeafColumns(),i=t==="After"?H(s):s[0],n=`getCol${t}`;for(;;){const r=this.beans.visibleCols[n](i);if(!r)return null;const l=this.getColGroupAtLevel(r,o);if(l!==e)return l}}getColGroupAtLevel(e,t){let o=e.getParent(),s,i;for(;s=o.getProvidedColumnGroup().getLevel(),i=o.getPaddingLevel(),!(s+i<=t);)o=o.getParent();return o}updateOpenClosedVisibility(){const e=this.beans.visibleCols.getAllTrees();xe(e,!1,t=>{O(t)&&t.calculateDisplayedColumns()})}getColumnGroup(e,t){if(!e)return null;if(O(e))return e;const o=this.beans.visibleCols.getAllTrees(),s=typeof t=="number";let i=null;return xe(o,!1,n=>{if(O(n)){const r=n;let l;s?l=e===r.getGroupId()&&t===r.getPartId():l=e===r.getGroupId(),l&&(i=r)}}),i}createColumnGroups(e){const{columns:t,idCreator:o,pinned:s,oldDisplayedGroups:i,isStandaloneStructure:n}=e,r=this.mapOldGroupsById(i),l=[];let a=t;for(;a.length;){const d=a;a=[];let c=0;const h=u=>{const g=c;c=u;const p=d[g],C=(O(p)?p.getProvidedColumnGroup():p).getOriginalParent();if(C==null){for(let S=g;S=t;d--){const c=s.getUniqueKey(null,null),h=ws(this.beans,null,c),u=new wt(h,c,!0,t);this.createBean(u),a&&a.setChildren([u]),a=u,l||(l=a)}if(l&&a)if(i.push(l),e.some(c=>U(c))){a.setChildren([r]);continue}else{a.setChildren(e);break}i.push(r)}}return i}findDepth(e){let t=0,o=e;for(;o&&o[0]&&U(o[0]);)t++,o=o[0].getChildren();return t}findMaxDepth(e,t){let o=t;for(let s=0;s{let i=s;for(let n=t-1;n>=0;n--){const r=new wt(null,`FAKE_PATH_${s.getId()}}_${n}`,!0,n);this.createBean(r),r.setChildren([i]),i.originalParent=r,i=r}t===0&&(s.originalParent=null),o.push(i)}),o}findExistingGroup(e,t){if(e.groupId!=null)for(let s=0;s{s.forEach(i=>{if(O(i)){const n=i;t[i.getUniqueId()]=n,o(n.getChildren())}})};return e&&o(e),t}setupParentsIntoCols(e,t){e.forEach(o=>{if(o.parent=t,O(o)){const s=o;this.setupParentsIntoCols(s.getChildren(),s)}})}},Uh={moduleName:"ColumnGroup",version:G,dynamicBeans:{headerGroupCellCtrl:Th},beans:[_h],apiFunctions:{getAllDisplayedColumnGroups:Vh,getCenterDisplayedColumnGroups:Oh,getColumnGroup:Ih,getColumnGroupState:Ah,getDisplayNameForColumnGroup:Mh,getLeftDisplayedColumnGroups:Bh,getProvidedColumnGroup:Lh,getRightDisplayedColumnGroups:Wh,resetColumnGroupState:Gh,setColumnGroupOpened:kh,setColumnGroupState:Hh}},Kh={moduleName:"CheckboxCellRenderer",version:G,userComponents:{agCheckboxCellRenderer:wc}},jh=class extends v{constructor(){super(...arguments),this.beanName="colFlex"}refreshFlexedColumns(e={}){const t=e.source??"flex";e.viewportWidth!=null&&(this.flexViewportWidth=e.viewportWidth);const o=this.flexViewportWidth;if(!o)return[];const{visibleCols:s}=this.beans,i=s.centerCols;let n=-1;if(e.resizingCols){const p=new Set(e.resizingCols);for(let f=i.length-1;f>=0;f--)if(p.has(i[f])){n=f;break}}let r=!1;const l=i.map((p,f)=>{const C=p.getFlex(),y=C!=null&&C>0&&f>n;return r||(r=y),{col:p,isFlex:y,flex:Math.max(0,C??0),initialSize:p.getActualWidth(),min:p.getMinWidth(),max:p.getMaxWidth(),targetSize:0}});if(!r)return[];let a=l.length,d=l.reduce((p,f)=>p+f.flex,0),c=o;const h=(p,f)=>{p.frozenSize=f,p.col.setActualWidth(f,t),c-=f,d-=p.flex,a-=1},u=p=>p.frozenSize!=null;for(const p of l)p.isFlex||h(p,p.initialSize);for(;a>0;){const p=Math.round(d<1?c*d:c);let f,C=0,y=0;for(const R of l){if(u(R))continue;f=R,y+=p*(R.flex/d);const D=y-C,b=Math.round(D);R.targetSize=b,C+=b}f&&(f.targetSize+=p-C);let S=0;for(const R of l){if(u(R))continue;const D=R.targetSize,b=Math.min(Math.max(D,R.min),R.max);S+=b-D,R.violationType=b===D?void 0:b0?"min":"max";for(const R of l)u(R)||(w==="all"||R.violationType===w)&&h(R,R.targetSize)}e.skipSetLeft||s.setLeftValues(t),e.updateBodyWidths&&s.updateBodyWidths();const g=l.filter(p=>p.isFlex&&!p.violationType).map(p=>p.col);if(e.fireResizedEvent){const p=l.filter(C=>C.initialSize!==C.frozenSize).map(C=>C.col),f=l.filter(C=>C.flex).map(C=>C.col);It(this.eventSvc,p,!0,t,f)}return g}initCol(e){const{flex:t,initialFlex:o}=e.colDef;t!==void 0?e.flex=t:o!==void 0&&(e.flex=o)}setColFlex(e,t){e.flex=t??null,e.dispatchStateUpdatedEvent("flex")}},$h=class extends v{constructor(){super(...arguments),this.beanName="dataTypeSvc",this.dataTypeDefinitions={},this.isPendingInference=!1,this.isColumnTypeOverrideInDataTypeDefinitions=!1,this.columnStateUpdatesPendingInference={},this.columnStateUpdateListenerDestroyFuncs=[]}wireBeans(e){this.colModel=e.colModel}postConstruct(){this.processDataTypeDefinitions(),this.addManagedPropertyListener("dataTypeDefinitions",e=>{this.processDataTypeDefinitions(),this.colModel.recreateColumnDefs(e)})}processDataTypeDefinitions(){const e=this.getDefaultDataTypes(),t={};this.dataTypeDefinitions=t;const o={};this.formatValueFuncs=o;const s=r=>l=>{const{column:a,node:d,value:c}=l;let h=a.getColDef().valueFormatter;return h===r.groupSafeValueFormatter&&(h=r.valueFormatter),this.beans.valueSvc.formatValue(a,d,c,h)};for(const r of Object.keys(e)){const l=e[r],a={...l,groupSafeValueFormatter:Ns(l,this.gos)};t[r]=a,o[r]=s(a)}const i=this.gos.get("dataTypeDefinitions")??{},n={};this.dataTypeMatchers=n;for(const r of Object.keys(i)){const l=i[r],a=this.processDataTypeDefinition(l,i,[r],e);a&&(t[r]=a,l.dataTypeMatcher&&(n[r]=l.dataTypeMatcher),o[r]=s(a))}this.checkObjectValueHandlers(e),["dateString","text","number","boolean","date"].forEach(r=>{const l=n[r];l&&delete n[r],n[r]=l??e[r].dataTypeMatcher})}processDataTypeDefinition(e,t,o,s){let i;const n=e.extendsDataType;if(e.columnTypes&&(this.isColumnTypeOverrideInDataTypeDefinitions=!0),e.extendsDataType===e.baseDataType){let r=s[n];const l=t[n];if(r&&l&&(r=l),!Vs(e,r,n))return;i=Ws(r,e)}else{if(o.includes(n)){I(44);return}const r=t[n];if(!Vs(e,r,n))return;const l=this.processDataTypeDefinition(r,t,[...o,n],s);if(!l)return;i=Ws(l,e)}return{...i,groupSafeValueFormatter:Ns(i,this.gos)}}updateColDefAndGetColumnType(e,t,o){let{cellDataType:s}=t;const{field:i}=t;if(s===void 0&&(s=e.cellDataType),(s==null||s===!0)&&(s=this.canInferCellDataType(e,t)?this.inferCellDataType(i,o):!1),!s){e.cellDataType=!1;return}const n=this.dataTypeDefinitions[s];if(!n){I(47,{cellDataType:s});return}return e.cellDataType=s,n.groupSafeValueFormatter&&(e.valueFormatter=n.groupSafeValueFormatter),n.valueParser&&(e.valueParser=n.valueParser),n.suppressDefaultProperties||this.setColDefPropertiesForBaseDataType(e,s,n,o),n.columnTypes}addColumnListeners(e){if(!this.isPendingInference)return;const t=this.columnStateUpdatesPendingInference[e.getColId()];if(!t)return;const o=s=>{t.add(s.key)};e.__addEventListener("columnStateUpdated",o),this.columnStateUpdateListenerDestroyFuncs.push(()=>e.__removeEventListener("columnStateUpdated",o))}canInferCellDataType(e,t){const{gos:o}=this;if(!Vo(o))return!1;const s={cellRenderer:!0,valueGetter:!0,valueParser:!0,refData:!0};if(mo(t,s))return!1;const i=t.type===null?e.type:t.type;if(i){const n=o.get("columnTypes")??{};if(kt(i).some(l=>{const a=n[l.trim()];return a&&mo(a,s)}))return!1}return!mo(e,s)}inferCellDataType(e,t){if(!e)return;let o;const s=this.getInitialData();if(s){const i=e.indexOf(".")>=0&&!this.gos.get("suppressFieldDotNotation");o=mt(s,e,i)}else this.initWaitForRowData(t);if(o!=null)return Object.keys(this.dataTypeMatchers).find(i=>this.dataTypeMatchers[i](o))??"object"}getInitialData(){var t;const e=this.gos.get("rowData");if(e!=null&&e.length)return e[0];if(this.initialData)return this.initialData;{const o=(t=this.beans.rowModel.rootNode)==null?void 0:t.allLeafChildren;if(o!=null&&o.length)return o[0].data}return null}initWaitForRowData(e){if(this.columnStateUpdatesPendingInference[e]=new Set,this.isPendingInference)return;this.isPendingInference=!0;const t=this.isColumnTypeOverrideInDataTypeDefinitions,{colAutosize:o,eventSvc:s}=this.beans;t&&o&&(o.shouldQueueResizeOperations=!0);const[i]=this.addManagedEventListeners({rowDataUpdateStarted:n=>{const{firstRowData:r}=n;r&&(i==null||i(),this.isPendingInference=!1,this.processColumnsPendingInference(r,t),this.columnStateUpdatesPendingInference={},t&&(o==null||o.processResizeOperations()),s.dispatchEvent({type:"dataTypesInferred"}))}})}processColumnsPendingInference(e,t){this.initialData=e;const o=[];this.destroyColumnStateUpdateListeners();const s={},i={};for(const n of Object.keys(this.columnStateUpdatesPendingInference)){const r=this.columnStateUpdatesPendingInference[n],l=this.colModel.getCol(n);if(!l)return;const a=l.getColDef();if(!this.resetColDefIntoCol(l,"cellDataTypeInferred"))return;const d=l.getColDef();if(t&&d.type&&d.type!==a.type){const c=Zh(l,r);c.rowGroup&&c.rowGroupIndex==null&&(s[n]=c),c.pivot&&c.pivotIndex==null&&(i[n]=c),o.push(c)}}t&&o.push(...this.generateColumnStateForRowGroupAndPivotIndexes(s,i)),o.length&&on(this.beans,{state:o},"cellDataTypeInferred"),this.initialData=null}generateColumnStateForRowGroupAndPivotIndexes(e,t){const o={},{rowGroupColsSvc:s,pivotColsSvc:i}=this.beans;return s==null||s.restoreColumnOrder(o,e),i==null||i.restoreColumnOrder(o,t),Object.values(o)}resetColDefIntoCol(e,t){const o=e.getUserProvidedColDef();if(!o)return!1;const s=Eo(this.beans,o,e.getColId());return e.setColDef(s,o,t),!0}checkObjectValueHandlers(e){const t=this.dataTypeDefinitions.object,o=e.object;this.hasObjectValueParser=t.valueParser!==o.valueParser,this.hasObjectValueFormatter=t.valueFormatter!==o.valueFormatter}getDateStringTypeDefinition(e){const{dateString:t}=this.dataTypeDefinitions;return e?this.getDataTypeDefinition(e)??t:t}getDateParserFunction(e){return this.getDateStringTypeDefinition(e).dateParser}getDateFormatterFunction(e){return this.getDateStringTypeDefinition(e).dateFormatter}getDataTypeDefinition(e){const t=e.getColDef();if(t.cellDataType)return this.dataTypeDefinitions[t.cellDataType]}getBaseDataType(e){var t;return(t=this.getDataTypeDefinition(e))==null?void 0:t.baseDataType}checkType(e,t){var s;if(t==null)return!0;const o=(s=this.getDataTypeDefinition(e))==null?void 0:s.dataTypeMatcher;return o?o(t):!0}validateColDef(e){const t=o=>I(48,{property:o});if(e.cellDataType==="object"){const{object:o}=this.dataTypeDefinitions;e.valueFormatter===o.groupSafeValueFormatter&&!this.hasObjectValueFormatter&&t("Formatter"),e.editable&&e.valueParser===o.valueParser&&!this.hasObjectValueParser&&t("Parser")}}getFormatValue(e){return this.formatValueFuncs[e]}isColPendingInference(e){return this.isPendingInference&&!!this.columnStateUpdatesPendingInference[e]}setColDefPropertiesForBaseDataType(e,t,o,s){var n;const i=this.formatValueFuncs[t];switch(o.baseDataType){case"number":{e.cellEditor="agNumberCellEditor";break}case"boolean":{e.cellEditor="agCheckboxCellEditor",e.cellRenderer="agCheckboxCellRenderer",e.getFindText=()=>null,e.suppressKeyboardEvent=r=>!!r.colDef.editable&&r.event.key===m.SPACE;break}case"date":{e.cellEditor="agDateCellEditor",e.keyCreator=i;break}case"dateString":{e.cellEditor="agDateStringCellEditor",e.keyCreator=i;break}case"object":{e.cellEditorParams={useFormatter:!0},e.comparator=(r,l)=>{const a=this.colModel.getColDefCol(s),d=a==null?void 0:a.getColDef();if(!a||!d)return 0;const c=r==null?"":i({column:a,node:null,value:r}),h=l==null?"":i({column:a,node:null,value:l});return c===h?0:c>h?1:-1},e.keyCreator=i;break}}(n=this.beans.filterManager)==null||n.setColDefPropertiesForDataType(e,o,i)}getDefaultDataTypes(){const e=o=>!!o.match("^\\d{4}-\\d{2}-\\d{2}$"),t=this.getLocaleTextFunc();return{number:{baseDataType:"number",valueParser:o=>{var s,i;return((i=(s=o.newValue)==null?void 0:s.trim)==null?void 0:i.call(s))===""?null:Number(o.newValue)},valueFormatter:o=>o.value==null?"":typeof o.value!="number"||isNaN(o.value)?t("invalidNumber","Invalid Number"):String(o.value),dataTypeMatcher:o=>typeof o=="number"},text:{baseDataType:"text",valueParser:o=>o.newValue===""?null:xo(o.newValue),dataTypeMatcher:o=>typeof o=="string"},boolean:{baseDataType:"boolean",valueParser:o=>{var s,i;return o.newValue==null?o.newValue:((i=(s=o.newValue)==null?void 0:s.trim)==null?void 0:i.call(s))===""?null:String(o.newValue).toLowerCase()==="true"},valueFormatter:o=>o.value==null?"":String(o.value),dataTypeMatcher:o=>typeof o=="boolean"},date:{baseDataType:"date",valueParser:o=>As(o.newValue==null?null:String(o.newValue)),valueFormatter:o=>o.value==null?"":!(o.value instanceof Date)||isNaN(o.value.getTime())?t("invalidDate","Invalid Date"):Ms(o.value,!1)??"",dataTypeMatcher:o=>o instanceof Date},dateString:{baseDataType:"dateString",dateParser:o=>As(o)??void 0,dateFormatter:o=>Ms(o??null,!1)??void 0,valueParser:o=>e(String(o.newValue))?o.newValue:null,valueFormatter:o=>e(String(o.value))?o.value:"",dataTypeMatcher:o=>typeof o=="string"&&e(o)},object:{baseDataType:"object",valueParser:()=>null,valueFormatter:o=>xo(o.value)??""}}}destroyColumnStateUpdateListeners(){this.columnStateUpdateListenerDestroyFuncs.forEach(e=>e()),this.columnStateUpdateListenerDestroyFuncs=[]}destroy(){this.dataTypeDefinitions={},this.dataTypeMatchers={},this.formatValueFuncs={},this.columnStateUpdatesPendingInference={},this.destroyColumnStateUpdateListeners(),super.destroy()}};function Ws(e,t){const o={...e,...t};return e.columnTypes&&t.columnTypes&&t.appendColumnTypes&&(o.columnTypes=[...kt(e.columnTypes),...kt(t.columnTypes)]),o}function Vs(e,t,o){return t?t.baseDataType!==e.baseDataType?(I(46),!1):!0:(I(45,{parentCellDataType:o}),!1)}function Ns(e,t){if(e.valueFormatter)return o=>{var s,i;if((s=o.node)!=null&&s.group){const n=(o.colDef.pivotValueColumn??o.column).getAggFunc();if(n){if(n==="first"||n==="last")return e.valueFormatter(o);if(e.baseDataType==="number"&&n!=="count"){if(typeof o.value=="number")return e.valueFormatter(o);if(typeof o.value=="object"){if(!o.value)return;if("toNumber"in o.value)return e.valueFormatter({...o,value:o.value.toNumber()});if("value"in o.value)return e.valueFormatter({...o,value:o.value.value})}}return}if(t.get("groupDisplayType")==="groupRows"&&!t.get("treeData"))return}else if(t.get("groupHideOpenParents")&&o.column.isRowGroupActive()&&typeof o.value=="string"&&!((i=e.dataTypeMatcher)!=null&&i.call(e,o.value)))return;return e.valueFormatter(o)}}function qh(e,t,o,s){if(!t[o])return!1;const i=e[o];return i===null?(t[o]=!1,!1):s===void 0?!!i:i===s}function mo(e,t){return[["cellRenderer","agSparklineCellRenderer"],["valueGetter",void 0],["valueParser",void 0],["refData",void 0]].some(([o,s])=>qh(e,t,o,s))}function Zh(e,t){const o=Hl(e);return t.forEach(s=>{delete o[s],s==="rowGroup"?delete o.rowGroupIndex:s==="pivot"&&delete o.pivotIndex}),o}var Yh={moduleName:"DataType",version:G,beans:[$h],dependsOn:[Kh]},Qh={moduleName:"ColumnFlex",version:G,beans:[jh]};function Xh(e){if(!e||e==null)return null;const t=/([a-z])([A-Z])/g,o=/([A-Z]+)([A-Z])([a-z])/g;return e.replace(t,"$1 $2").replace(o,"$1 $2$3").replace(/\./g," ").split(" ").map(i=>i.substring(0,1).toUpperCase()+(i.length>1?i.substring(1,i.length):"")).join(" ")}var Jh=class extends v{constructor(){super(...arguments),this.beanName="colNames"}getDisplayNameForColumn(e,t,o=!1){if(!e)return null;const s=this.getHeaderName(e.getColDef(),e,null,null,t),{aggColNameSvc:i}=this.beans;return o&&i?i.getHeaderName(e,s):s}getDisplayNameForProvidedColumnGroup(e,t,o){const s=t==null?void 0:t.getColGroupDef();return s?this.getHeaderName(s,null,e,t,o):null}getDisplayNameForColumnGroup(e,t){return this.getDisplayNameForProvidedColumnGroup(e,e.getProvidedColumnGroup(),t)}getHeaderName(e,t,o,s,i){var r;const n=e.headerValueGetter;if(n){const l=A(this.gos,{colDef:e,column:t,columnGroup:o,providedColumnGroup:s,location:i});return typeof n=="function"?n(l):typeof n=="string"?((r=this.beans.expressionSvc)==null?void 0:r.evaluate(n,l))??null:""}else{if(e.headerName!=null)return e.headerName;if(e.field)return Xh(e.field)}return""}},eu=class extends v{constructor(){super(...arguments),this.beanName="colViewport",this.colsWithinViewport=[],this.headerColsWithinViewport=[],this.colsWithinViewportHash="",this.rowsOfHeadersToRenderLeft={},this.rowsOfHeadersToRenderRight={},this.rowsOfHeadersToRenderCenter={}}wireBeans(e){this.visibleCols=e.visibleCols,this.colModel=e.colModel}postConstruct(){this.suppressColumnVirtualisation=this.gos.get("suppressColumnVirtualisation")}setScrollPosition(e,t,o=!1){const{visibleCols:s}=this,i=s.isBodyWidthDirty;if(!(e===this.scrollWidth&&t===this.scrollPosition&&!i)){if(this.scrollWidth=e,this.scrollPosition=t,s.isBodyWidthDirty=!0,this.gos.get("enableRtl")){const r=s.bodyWidth;this.viewportLeft=r-t-e,this.viewportRight=r-t}else this.viewportLeft=t,this.viewportRight=e+t;this.colModel.ready&&this.checkViewportColumns(o)}}getHeadersToRender(e,t){let o;switch(e){case"left":o=this.rowsOfHeadersToRenderLeft[t];break;case"right":o=this.rowsOfHeadersToRenderRight[t];break;default:o=this.rowsOfHeadersToRenderCenter[t];break}return o||[]}extractViewportColumns(){const e=this.visibleCols.centerCols;this.isColumnVirtualisationSuppressed()?(this.colsWithinViewport=e,this.headerColsWithinViewport=e):(this.colsWithinViewport=e.filter(this.isColumnInRowViewport.bind(this)),this.headerColsWithinViewport=e.filter(this.isColumnInHeaderViewport.bind(this)))}isColumnVirtualisationSuppressed(){return this.suppressColumnVirtualisation||this.viewportRight===0}clear(e){this.rowsOfHeadersToRenderLeft={},this.rowsOfHeadersToRenderRight={},this.rowsOfHeadersToRenderCenter={},e||(this.colsWithinViewportHash="")}isColumnInHeaderViewport(e){return e.isAutoHeaderHeight()||tu(e)?!0:this.isColumnInRowViewport(e)}isColumnInRowViewport(e){if(e.isAutoHeight())return!0;const t=e.getLeft()||0,o=t+e.getActualWidth(),s=this.viewportLeft-200,i=this.viewportRight+200,n=ti&&o>i;return!n&&!r}getViewportColumns(){const{leftCols:e,rightCols:t}=this.visibleCols;return this.colsWithinViewport.concat(e).concat(t)}getColsWithinViewport(e){if(!this.colModel.colSpanActive)return this.colsWithinViewport;const t=n=>{const r=n.getLeft();return k(r)&&r>this.viewportLeft},o=this.isColumnVirtualisationSuppressed()?void 0:this.isColumnInRowViewport.bind(this),{visibleCols:s}=this,i=s.centerCols;return s.getColsForRow(e,i,o,t)}checkViewportColumns(e=!1){this.extractViewport()&&this.eventSvc.dispatchEvent({type:"virtualColumnsChanged",afterScroll:e})}calculateHeaderRows(){this.clear(!0);const e={},{leftCols:t,rightCols:o,treeLeft:s,treeRight:i,treeCenter:n}=this.visibleCols;this.headerColsWithinViewport.concat(t).concat(o).forEach(a=>e[a.getId()]=!0);const l=(a,d,c)=>{let h=!1;for(let u=0;u`${s.getId()}-${s.getPinned()||"normal"}`;this.extractViewportColumns();const t=this.getViewportColumns().map(e).join("#"),o=this.colsWithinViewportHash!==t;return o&&(this.colsWithinViewportHash=t,this.calculateHeaderRows()),o}};function tu(e){for(;e;){if(e.isAutoHeaderHeight())return!0;e=e.getParent()}return!1}var ou=class extends v{constructor(){super(...arguments),this.beanName="agCompUtils"}adaptFunction(e,t){if(!e.cellRenderer)return null;class o{refresh(){return!1}getGui(){return this.eGui}init(i){const n=t(i),r=typeof n;if(r==="string"||r==="number"||r==="boolean"){this.eGui=Bo(""+n+"");return}if(n==null){this.eGui=q({tag:"span"});return}this.eGui=n}}return o}},su={moduleName:"CellRendererFunction",version:G,beans:[ou]},iu=class extends v{constructor(){super(...arguments),this.beanName="registry",this.agGridDefaults={},this.agGridDefaultParams={},this.jsComps={},this.dynamicBeans={},this.selectors={},this.icons={}}postConstruct(){const e=this.gos.get("components");if(e!=null)for(const t of Object.keys(e))this.jsComps[t]=e[t]}registerModule(e){const{icons:t,userComponents:o,dynamicBeans:s,selectors:i}=e;if(o){const n=(r,l,a)=>{this.agGridDefaults[r]=l,a&&(this.agGridDefaultParams[r]=a)};for(const r of Object.keys(o)){const l=o[r];typeof l=="object"?n(r,l.classImp,l.params):n(r,l)}}if(s)for(const n of Object.keys(s))this.dynamicBeans[n]=s[n];if(i==null||i.forEach(n=>{this.selectors[n.selector]=n}),t)for(const n of Object.keys(t))this.icons[n]=t[n]}getUserComponent(e,t){var l;const o=(a,d,c)=>({componentFromFramework:d,component:a,params:c}),{frameworkOverrides:s}=this.beans,i=s.frameworkComponent(t,this.gos.get("components"));if(i!=null)return o(i,!0);const n=this.jsComps[t];if(n){const a=s.isFrameworkComponent(n);return o(n,a)}const r=this.agGridDefaults[t];return r?o(r,!1,this.agGridDefaultParams[t]):((l=this.beans.validation)==null||l.missingUserComponent(e,t,this.agGridDefaults,this.jsComps),null)}createDynamicBean(e,t,...o){const s=this.dynamicBeans[e];if(s==null){if(t)throw new Error(Li(256));return}return new s(...o)}getSelector(e){return this.selectors[e]}getIcon(e){return this.icons[e]}},nu=23,ru=class extends v{constructor(){super(...arguments),this.beanName="ctrlsSvc",this.params={},this.ready=!1,this.readyCallbacks=[]}postConstruct(){var e,t;this.addEventListener("ready",()=>{this.updateReady(),this.ready&&(this.readyCallbacks.forEach(o=>o(this.params)),this.readyCallbacks.length=0)},((t=(e=this.beans.frameworkOverrides).runWhenReadyAsync)==null?void 0:t.call(e))??!1)}updateReady(){const e=Object.values(this.params);this.ready=e.length===nu&&e.every(t=>(t==null?void 0:t.isAlive())??!1)}whenReady(e,t){this.ready?t(this.params):this.readyCallbacks.push(t),e.addDestroyFunc(()=>{const o=this.readyCallbacks.indexOf(t);o>=0&&this.readyCallbacks.splice(o,1)})}register(e,t){this.params[e]=t,this.updateReady(),this.ready&&this.dispatchLocalEvent({type:"ready"}),t.addDestroyFunc(()=>{this.updateReady()})}get(e){return this.params[e]}getGridBodyCtrl(){return this.params.gridBodyCtrl}getHeaderRowContainerCtrls(){const{leftHeader:e,centerHeader:t,rightHeader:o}=this.params;return[e,o,t]}getHeaderRowContainerCtrl(e){const t=this.params;switch(e){case"left":return t.leftHeader;case"right":return t.rightHeader;default:return t.centerHeader}}getScrollFeature(){return this.getGridBodyCtrl().scrollFeature}},lu=':where(.ag-root-wrapper,.ag-popup,.ag-dnd-ghost,.ag-chart),:where(.ag-root-wrapper,.ag-popup,.ag-dnd-ghost,.ag-chart) :where([class^=ag-]){box-sizing:border-box;&:after,&:before{box-sizing:border-box}&:where(div,span,label):focus-visible{box-shadow:inset var(--ag-focus-shadow);outline:none}}:where(.ag-root-wrapper,.ag-popup,.ag-dnd-ghost,.ag-chart) :where([class^=ag-]) ::-ms-clear{display:none}.ag-aria-description-container{border:0;z-index:9999;clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.ag-hidden{display:none!important}.ag-invisible{visibility:hidden!important}.ag-unselectable{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-selectable{-webkit-user-select:text;-moz-user-select:text;user-select:text}.ag-tab-guard{display:block;height:0;position:absolute;width:0}:where(.ag-virtual-list-viewport) .ag-tab-guard{position:sticky}.ag-tab-guard-top{top:1px}.ag-tab-guard-bottom{bottom:1px}.ag-shake-left-to-right{animation-direction:alternate;animation-duration:.2s;animation-iteration-count:infinite;animation-name:ag-shake-left-to-right}@keyframes ag-shake-left-to-right{0%{padding-left:6px;padding-right:2px}to{padding-left:2px;padding-right:6px}}.ag-body-horizontal-scroll-viewport,.ag-body-vertical-scroll-viewport,.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport,.ag-virtual-list-viewport{flex:1 1 auto;height:100%;min-width:0;overflow:hidden;position:relative}.ag-viewport{position:relative}.ag-spanning-container{position:absolute;top:0;z-index:1}.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport{overflow-x:auto;-ms-overflow-style:none!important;scrollbar-width:none!important;&::-webkit-scrollbar{display:none!important}}.ag-body-viewport{display:flex;overflow-x:hidden;&:where(.ag-layout-normal){overflow-y:auto;-webkit-overflow-scrolling:touch}}.ag-floating-bottom-container,.ag-floating-top-container,.ag-sticky-bottom-container,.ag-sticky-top-container{min-height:1px}.ag-center-cols-viewport{min-height:100%;width:100%}.ag-body-horizontal-scroll-viewport{overflow-x:scroll}.ag-body-vertical-scroll-viewport{overflow-y:scroll}.ag-virtual-list-viewport{overflow:auto;width:100%}.ag-body-container,.ag-body-horizontal-scroll-container,.ag-body-vertical-scroll-container,.ag-center-cols-container,.ag-floating-bottom-container,.ag-floating-bottom-full-width-container,.ag-floating-top-container,.ag-full-width-container,.ag-header-container,.ag-pinned-left-cols-container,.ag-pinned-right-cols-container,.ag-sticky-bottom-container,.ag-sticky-top-container,.ag-virtual-list-container{position:relative}.ag-floating-bottom-container,.ag-floating-top-container,.ag-header-container,.ag-pinned-left-floating-bottom,.ag-pinned-left-floating-top,.ag-pinned-right-floating-bottom,.ag-pinned-right-floating-top,.ag-sticky-bottom-container,.ag-sticky-top-container{height:100%;white-space:nowrap}.ag-center-cols-container,.ag-pinned-right-cols-container{display:block}.ag-body-horizontal-scroll-container{height:100%}.ag-body-vertical-scroll-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container,.ag-full-width-container,.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{pointer-events:none;position:absolute;top:0}:where(.ag-ltr) .ag-floating-bottom-full-width-container,:where(.ag-ltr) .ag-floating-top-full-width-container,:where(.ag-ltr) .ag-full-width-container,:where(.ag-ltr) .ag-sticky-bottom-full-width-container,:where(.ag-ltr) .ag-sticky-top-full-width-container{left:0}:where(.ag-rtl) .ag-floating-bottom-full-width-container,:where(.ag-rtl) .ag-floating-top-full-width-container,:where(.ag-rtl) .ag-full-width-container,:where(.ag-rtl) .ag-sticky-bottom-full-width-container,:where(.ag-rtl) .ag-sticky-top-full-width-container{right:0}.ag-full-width-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container{display:inline-block;height:100%;overflow:hidden;width:100%}.ag-virtual-list-container{overflow:hidden}.ag-body{display:flex;flex:1 1 auto;flex-direction:row!important;min-height:0;position:relative}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:flex;min-height:0;min-width:0;position:relative;&:where(.ag-scrollbar-invisible){bottom:0;position:absolute;&:where(.ag-apple-scrollbar){opacity:0;transition:opacity .4s;visibility:hidden;&:where(.ag-scrollbar-scrolling,.ag-scrollbar-active){opacity:1;visibility:visible}}}}.ag-body-horizontal-scroll{width:100%;&:where(.ag-scrollbar-invisible){left:0;right:0}}.ag-body-vertical-scroll{height:100%;&:where(.ag-scrollbar-invisible){top:0;z-index:10}}:where(.ag-ltr) .ag-body-vertical-scroll{&:where(.ag-scrollbar-invisible){right:0}}:where(.ag-rtl) .ag-body-vertical-scroll{&:where(.ag-scrollbar-invisible){left:0}}.ag-force-vertical-scroll{overflow-y:scroll!important}.ag-horizontal-left-spacer,.ag-horizontal-right-spacer{height:100%;min-width:0;overflow-x:scroll;&:where(.ag-scroller-corner){overflow-x:hidden}}:where(.ag-row-animation) .ag-row{transition:transform .4s,top .4s,opacity .2s;&:where(.ag-after-created){transition:transform .4s,top .4s,height .4s,opacity .2s}}:where(.ag-row-animation.ag-prevent-animation) .ag-row{transition:none!important;&:where(.ag-row.ag-after-created){transition:none!important}}:where(.ag-row-no-animation) .ag-row{transition:none}.ag-row-loading{align-items:center;display:flex}.ag-row-position-absolute{position:absolute}.ag-row-position-relative{position:relative}.ag-full-width-row{overflow:hidden;pointer-events:all}.ag-row-inline-editing{z-index:1}.ag-row-dragging{z-index:2}.ag-stub-cell{align-items:center;display:flex}.ag-cell{display:inline-block;height:100%;position:absolute;white-space:nowrap;&:focus-visible{box-shadow:none}}.ag-cell-value{flex:1 1 auto}.ag-cell-value,.ag-group-value{overflow:hidden;text-overflow:ellipsis}.ag-cell-wrap-text{white-space:normal;word-break:break-word}:where(.ag-cell) .ag-icon{display:inline-block;vertical-align:middle}.ag-floating-top{display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}:where(.ag-floating-top:not(.ag-invisible)){border-bottom:var(--ag-pinned-row-border)}.ag-floating-bottom{display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}:where(.ag-floating-bottom:not(.ag-invisible)){border-top:var(--ag-pinned-row-border)}.ag-sticky-bottom,.ag-sticky-top{background-color:var(--ag-background-color);display:flex;height:0;overflow:hidden;position:absolute;width:100%;z-index:1}.ag-opacity-zero{opacity:0!important}.ag-cell-label-container{align-items:center;display:flex;flex-direction:row-reverse;height:100%;justify-content:space-between;width:100%}:where(.ag-right-aligned-header){.ag-cell-label-container{flex-direction:row}.ag-header-cell-text{text-align:end}}.ag-column-group-icons{display:block;>*{cursor:pointer}}:where(.ag-ltr){direction:ltr;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row}}:where(.ag-rtl){direction:rtl;text-align:right;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row-reverse}.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{display:block}}:where(.ag-rtl){.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(180deg)}}:where(.ag-rtl){.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(-180deg)}}.ag-measurement-container{height:0;overflow:hidden;visibility:hidden;width:0}.ag-measurement-element-border{display:inline-block;&:before{border-left:var(--ag-internal-measurement-border);content:"";display:block}}.ag-group{position:relative;width:100%}.ag-group-title-bar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-title{display:inline;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.ag-group-title-bar) .ag-group-title{cursor:default}.ag-group-toolbar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-container{display:flex}.ag-disabled .ag-group-container{pointer-events:none}.ag-disabled-group-container,.ag-disabled-group-title-bar{opacity:.5}.ag-group-container-horizontal{flex-flow:row wrap}.ag-group-container-vertical{flex-direction:column}.ag-group-title-bar-icon{cursor:pointer;flex:none}:where(.ag-ltr) .ag-group-title-bar-icon{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-group-title-bar-icon{margin-left:var(--ag-spacing)}:where(.ag-group-item-alignment-stretch) .ag-group-item{align-items:stretch}:where(.ag-group-item-alignment-start) .ag-group-item{align-items:flex-start}:where(.ag-group-item-alignment-end) .ag-group-item{align-items:flex-end}.ag-popup-child{top:0;z-index:5;&:where(:not(.ag-tooltip-custom)){box-shadow:var(--ag-popup-shadow)}}.ag-popup-editor{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-large-text-input{display:block}:where(.ag-ltr) .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-left:var(--ag-row-group-indent-size)}:where(.ag-rtl) .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-right:var(--ag-row-group-indent-size)}:where(.ag-ltr) .ag-row-group-leaf-indent{margin-left:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}:where(.ag-rtl) .ag-row-group-leaf-indent{margin-right:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}.ag-value-change-delta{padding:0 2px}.ag-value-change-delta-up{color:var(--ag-value-change-delta-up-color)}.ag-value-change-delta-down{color:var(--ag-value-change-delta-down-color)}.ag-value-change-value{background-color:transparent;border-radius:1px;padding-left:1px;padding-right:1px;transition:background-color 1s}.ag-value-change-value-highlight{background-color:var(--ag-value-change-value-highlight-background-color);transition:background-color .1s}.ag-cell-data-changed{background-color:var(--ag-value-change-value-highlight-background-color)!important}.ag-cell-data-changed-animation{background-color:transparent}.ag-cell-highlight{background-color:var(--ag-range-selection-highlight-color)!important}.ag-row,.ag-spanned-row{color:var(--ag-cell-text-color);font-family:var(--ag-cell-font-family);font-size:var(--ag-data-font-size);white-space:nowrap;--ag-internal-content-line-height:calc(min(var(--ag-row-height), var(--ag-line-height, 1000px)) - var(--ag-internal-row-border-width, 1px) - 2px)}.ag-row{background-color:var(--ag-background-color);border-bottom:var(--ag-row-border);height:var(--ag-row-height);width:100%}:where(.ag-body-vertical-content-no-gap>div>div>div,.ag-body-vertical-content-no-gap>div>div>div>div)>.ag-row-last{border-bottom-color:transparent}.ag-sticky-bottom{border-top:var(--ag-row-border);box-sizing:content-box!important}.ag-group-contracted,.ag-group-expanded{cursor:pointer}.ag-cell,.ag-full-width-row .ag-cell-wrapper.ag-row-group{border:1px solid transparent;line-height:var(--ag-internal-content-line-height);-webkit-font-smoothing:subpixel-antialiased}:where(.ag-ltr) .ag-cell{border-right:var(--ag-column-border)}:where(.ag-rtl) .ag-cell{border-left:var(--ag-column-border)}.ag-spanned-cell-wrapper{background-color:var(--ag-background-color);position:absolute}.ag-spanned-cell-wrapper>.ag-spanned-cell{display:block;position:relative}:where(.ag-ltr) :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-right-color:transparent}:where(.ag-rtl) :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-left-color:transparent}.ag-cell-wrapper{align-items:center;display:flex;>:where(:not(.ag-cell-value,.ag-group-value)){align-items:center;display:flex;height:var(--ag-internal-content-line-height)}&:where(.ag-row-group){align-items:flex-start}:where(.ag-full-width-row) &:where(.ag-row-group){align-items:center;height:100%}}:where(.ag-ltr) .ag-cell-wrapper{padding-left:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}:where(.ag-rtl) .ag-cell-wrapper{padding-right:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}:where(.ag-cell-wrap-text:not(.ag-cell-auto-height)) .ag-cell-wrapper{align-items:normal;height:100%;:where(.ag-cell-value){height:100%}}:where(.ag-ltr) .ag-row>.ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}:where(.ag-rtl) .ag-row>.ag-cell-wrapper.ag-row-group{padding-right:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-cell-focus:not(.ag-cell-range-selected):focus-within,.ag-cell-range-single-cell,.ag-cell-range-single-cell.ag-cell-range-handle,.ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),.ag-context-menu-open .ag-full-width-row.ag-row-focus .ag-cell-wrapper.ag-row-group,.ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group{border:1px solid;border-color:var(--ag-range-selection-border-color);border-style:var(--ag-range-selection-border-style);outline:initial}.ag-full-width-row.ag-row-focus:focus{box-shadow:none}:where(.ag-ltr) .ag-group-contracted,:where(.ag-ltr) .ag-group-expanded,:where(.ag-ltr) .ag-row-drag,:where(.ag-ltr) .ag-selection-checkbox{margin-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-group-contracted,:where(.ag-rtl) .ag-group-expanded,:where(.ag-rtl) .ag-row-drag,:where(.ag-rtl) .ag-selection-checkbox{margin-left:var(--ag-cell-widget-spacing)}:where(.ag-ltr) .ag-group-child-count{margin-left:3px}:where(.ag-rtl) .ag-group-child-count{margin-right:3px}.ag-row-highlight-above:after,.ag-row-highlight-below:after{background-color:var(--ag-range-selection-border-color);content:"";height:1px;position:absolute;width:calc(100% - 1px)}:where(.ag-ltr) .ag-row-highlight-above:after,:where(.ag-ltr) .ag-row-highlight-below:after{left:1px}:where(.ag-rtl) .ag-row-highlight-above:after,:where(.ag-rtl) .ag-row-highlight-below:after{right:1px}.ag-row-highlight-above:after{top:0}.ag-row-highlight-below:after{bottom:0}.ag-row-odd{background-color:var(--ag-odd-row-background-color)}.ag-row-selected:before{background-color:var(--ag-selected-row-background-color);content:"";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-full-width-row.ag-row-group:before,.ag-row-hover:not(.ag-full-width-row):before{background-color:var(--ag-row-hover-color);content:"";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-row-selected:before{background-color:var(--ag-row-hover-color);background-image:linear-gradient(var(--ag-selected-row-background-color),var(--ag-selected-row-background-color))}.ag-row.ag-full-width-row.ag-row-group>*{position:relative}.ag-column-hover{background-color:var(--ag-column-hover-color)}.ag-header-range-highlight{background-color:var(--ag-range-header-highlight-color)}.ag-right-aligned-cell{font-variant-numeric:tabular-nums}:where(.ag-ltr) .ag-right-aligned-cell{text-align:right}:where(.ag-rtl) .ag-right-aligned-cell{text-align:left}.ag-right-aligned-cell .ag-cell-value,.ag-right-aligned-cell .ag-group-value{margin-left:auto}:where(.ag-ltr) .ag-cell:not(.ag-cell-inline-editing),:where(.ag-ltr) .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level));padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}:where(.ag-rtl) .ag-cell:not(.ag-cell-inline-editing),:where(.ag-rtl) .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-row>.ag-cell-wrapper{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}.ag-row-dragging{cursor:move;opacity:.5}.ag-details-row{background-color:var(--ag-background-color);padding:calc(var(--ag-spacing)*3.75)}.ag-layout-auto-height,.ag-layout-print{.ag-center-cols-container,.ag-center-cols-viewport{min-height:150px}}.ag-overlay-loading-wrapper{background-color:var(--ag-modal-overlay-background-color)}.ag-skeleton-container{align-content:center;height:100%;width:100%}.ag-skeleton-effect{animation:ag-skeleton-loading 1.5s ease-in-out .5s infinite;background-color:var(--ag-row-loading-skeleton-effect-color);border-radius:.25rem;height:1em;width:100%}:where(.ag-ltr) .ag-right-aligned-cell .ag-skeleton-effect{margin-left:auto}:where(.ag-rtl) .ag-right-aligned-cell .ag-skeleton-effect{margin-right:auto}@keyframes ag-skeleton-loading{0%{opacity:1}50%{opacity:.4}to{opacity:1}}.ag-loading{align-items:center;display:flex;height:100%}:where(.ag-ltr) .ag-loading{padding-left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-loading{padding-right:var(--ag-cell-horizontal-padding)}:where(.ag-ltr) .ag-loading-icon{padding-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-loading-icon{padding-left:var(--ag-cell-widget-spacing)}.ag-icon-loading{animation-duration:1s;animation-iteration-count:infinite;animation-name:spin;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ag-input-wrapper,.ag-picker-field-wrapper{align-items:center;display:flex;flex:1 1 auto;line-height:normal;position:relative}.ag-input-field{align-items:center;display:flex;flex-direction:row}.ag-input-field-input:where(:not([type=checkbox],[type=radio])){flex:1 1 auto;min-width:0;width:100%}.ag-header{background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border);color:var(--ag-header-text-color);display:flex;font-family:var(--ag-header-font-family);font-size:var(--ag-header-font-size);font-weight:var(--ag-header-font-weight);overflow:hidden;white-space:nowrap;width:100%}.ag-header-row{height:var(--ag-header-height);position:absolute}.ag-floating-filter-button-button,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-expand-icon,.ag-panel-title-bar-button,:where(.ag-header-cell-sortable) .ag-header-cell-label{cursor:pointer}:where(.ag-ltr) .ag-header-expand-icon{margin-left:4px}:where(.ag-rtl) .ag-header-expand-icon{margin-right:4px}.ag-header-row:where(:not(:first-child)){:where(.ag-header-cell:not(.ag-header-span-height.ag-header-span-total,.ag-header-parent-hidden),.ag-header-group-cell.ag-header-group-cell-with-group){border-top:var(--ag-header-row-border)}}.ag-header-row:where(:not(.ag-header-row-column-group)){overflow:hidden}:where(.ag-header.ag-header-allow-overflow) .ag-header-row{overflow:visible}.ag-header-cell{display:inline-flex;overflow:hidden}.ag-header-group-cell{contain:paint;display:flex}.ag-header-cell,.ag-header-group-cell{align-items:center;gap:var(--ag-cell-widget-spacing);height:100%;padding:0 var(--ag-cell-horizontal-padding);position:absolute}@property --ag-internal-moving-color{syntax:"";inherits:false;initial-value:transparent}@property --ag-internal-hover-color{syntax:"";inherits:false;initial-value:transparent}.ag-header-cell:where(:not(.ag-floating-filter)),.ag-header-group-cell{&:before{background-image:linear-gradient(var(--ag-internal-hover-color),var(--ag-internal-hover-color)),linear-gradient(var(--ag-internal-moving-color),var(--ag-internal-moving-color));content:"";inset:0;position:absolute;--ag-internal-moving-color:transparent;--ag-internal-hover-color:transparent;transition:--ag-internal-moving-color var(--ag-header-cell-background-transition-duration),--ag-internal-hover-color var(--ag-header-cell-background-transition-duration)}&:where(:hover):before{--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}&:where(.ag-header-cell-moving):before{--ag-internal-moving-color:var(--ag-header-cell-moving-background-color);--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}}:where(.ag-header-cell:not(.ag-floating-filter) *,.ag-header-group-cell *){position:relative;z-index:1}.ag-header-cell-menu-button:where(:not(.ag-header-menu-always-show)){opacity:0;transition:opacity .2s}.ag-header-cell-filter-button,:where(.ag-header-cell.ag-header-active) .ag-header-cell-menu-button{opacity:1}.ag-header-cell-label,.ag-header-group-cell-label{align-items:center;align-self:stretch;display:flex;flex:1 1 auto;overflow:hidden;padding:5px 0}:where(.ag-ltr) .ag-sort-indicator-icon{padding-left:var(--ag-spacing)}:where(.ag-rtl) .ag-sort-indicator-icon{padding-right:var(--ag-spacing)}.ag-header-cell-label{text-overflow:ellipsis}.ag-header-group-cell-label.ag-sticky-label{flex:none;max-width:100%;overflow:visible;position:sticky}:where(.ag-ltr) .ag-header-group-cell-label.ag-sticky-label{left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-header-group-cell-label.ag-sticky-label{right:var(--ag-cell-horizontal-padding)}.ag-header-cell-text,.ag-header-group-text{overflow:hidden;text-overflow:ellipsis}.ag-header-cell-text{word-break:break-word}.ag-header-cell-comp-wrapper{width:100%}:where(.ag-header-group-cell) .ag-header-cell-comp-wrapper{display:flex}:where(.ag-header-cell:not(.ag-header-cell-auto-height)) .ag-header-cell-comp-wrapper{align-items:center;display:flex;height:100%}.ag-header-cell-wrap-text .ag-header-cell-comp-wrapper{white-space:normal}.ag-header-cell-comp-wrapper-limited-height>*{overflow:hidden}:where(.ag-right-aligned-header) .ag-header-cell-label{flex-direction:row-reverse}:where(.ag-ltr) :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}:where(.ag-ltr) :where(.ag-header-cell.ag-right-aligned-header){.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-header-cell.ag-right-aligned-header){.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}.ag-header-cell:after,.ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{content:"";height:var(--ag-header-column-border-height);position:absolute;top:calc(50% - var(--ag-header-column-border-height)*.5);z-index:1}:where(.ag-ltr) .ag-header-cell:after,:where(.ag-ltr) .ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{border-right:var(--ag-header-column-border);right:0}:where(.ag-rtl) .ag-header-cell:after,:where(.ag-rtl) .ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{border-left:var(--ag-header-column-border);left:0}.ag-header-highlight-after:after,.ag-header-highlight-before:after{background-color:var(--ag-accent-color);content:"";height:100%;position:absolute;width:1px}:where(.ag-ltr) .ag-header-highlight-before:after{left:0}:where(.ag-rtl) .ag-header-highlight-before:after{right:0}:where(.ag-ltr) .ag-header-highlight-after:after{right:0;:where(.ag-pinned-left-header) &{right:1px}}:where(.ag-rtl) .ag-header-highlight-after:after{left:0;:where(.ag-pinned-left-header) &{left:1px}}.ag-header-cell-resize{align-items:center;cursor:ew-resize;display:flex;height:100%;position:absolute;top:0;width:8px;z-index:2;&:after{background-color:var(--ag-header-column-resize-handle-color);content:"";height:var(--ag-header-column-resize-handle-height);position:absolute;top:calc(50% - var(--ag-header-column-resize-handle-height)*.5);width:var(--ag-header-column-resize-handle-width);z-index:1}}:where(.ag-ltr) .ag-header-cell-resize{right:-3px;&:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}}:where(.ag-rtl) .ag-header-cell-resize{left:-3px;&:after{right:calc(50% - var(--ag-header-column-resize-handle-width))}}:where(.ag-header-cell.ag-header-span-height) .ag-header-cell-resize:after{height:calc(100% - var(--ag-spacing)*4);top:calc(var(--ag-spacing)*2)}.ag-header-group-cell-no-group:where(.ag-header-span-height){display:none}.ag-sort-indicator-container{display:flex;gap:var(--ag-spacing)}.ag-layout-print{&.ag-body{display:block;height:unset}&.ag-root-wrapper{display:inline-block}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:none}&.ag-force-vertical-scroll{overflow-y:visible!important}}@media print{.ag-root-wrapper.ag-layout-print{display:table;.ag-body-horizontal-scroll-viewport,.ag-body-viewport,.ag-center-cols-container,.ag-center-cols-viewport,.ag-root,.ag-root-wrapper-body,.ag-virtual-list-viewport{display:block!important;height:auto!important;overflow:hidden!important}.ag-cell,.ag-row{-moz-column-break-inside:avoid;break-inside:avoid}}}ag-grid,ag-grid-angular{display:block}.ag-chart,.ag-dnd-ghost,.ag-popup,.ag-root-wrapper{cursor:default;line-height:normal;white-space:normal;-webkit-font-smoothing:antialiased;background-color:var(--ag-background-color);color:var(--ag-text-color);color-scheme:var(--ag-browser-color-scheme);font-family:var(--ag-font-family);font-size:var(--ag-font-size);--ag-indentation-level:0}.ag-root-wrapper{border:var(--ag-wrapper-border);border-radius:var(--ag-wrapper-border-radius);display:flex;flex-direction:column;overflow:hidden;position:relative;&.ag-layout-normal{height:100%}}.ag-root-wrapper-body{display:flex;flex-direction:row;&.ag-layout-normal{flex:1 1 auto;height:0;min-height:0}}.ag-root{display:flex;flex-direction:column;position:relative;&.ag-layout-auto-height,&.ag-layout-normal{flex:1 1 auto;overflow:hidden;width:0}&.ag-layout-normal{height:100%}}.ag-drag-handle{color:var(--ag-drag-handle-color);cursor:grab}.ag-list-item,.ag-virtual-list-item{height:var(--ag-list-item-height)}.ag-virtual-list-item{position:absolute;width:100%}.ag-select-list{background-color:var(--ag-picker-list-background-color);border:var(--ag-picker-list-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);overflow:hidden auto}.ag-list-item{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;&.ag-active-item{background-color:var(--ag-row-hover-color)}}.ag-select-list-item{cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none;:where(span){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}:where(.ag-ltr) .ag-select-list-item{padding-left:calc(var(--ag-cell-horizontal-padding)/2)}:where(.ag-rtl) .ag-select-list-item{padding-right:calc(var(--ag-cell-horizontal-padding)/2)}.ag-list-item-hovered:after{background-color:var(--ag-accent-color);content:"";height:1px;left:0;position:absolute;right:0}.ag-item-highlight-top:after{top:0}.ag-item-highlight-bottom:after{bottom:0}:where(.ag-icon):before{align-items:center;background-color:currentcolor;color:inherit;content:"";display:flex;font-family:inherit;font-size:var(--ag-icon-size);font-style:normal;font-variant:normal;height:var(--ag-icon-size);justify-content:center;line-height:var(--ag-icon-size);-webkit-mask-size:contain;mask-size:contain;text-transform:none;width:var(--ag-icon-size)}.ag-icon{background-position:50%;background-repeat:no-repeat;background-size:contain;color:var(--ag-icon-color);display:block;height:var(--ag-icon-size);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--ag-icon-size)}.ag-column-select-column-group-readonly,.ag-column-select-column-readonly,.ag-disabled,[disabled]{.ag-icon{opacity:.5}&.ag-icon-grip{opacity:.35}}.ag-column-select-column-readonly{&.ag-icon-grip,.ag-icon-grip{opacity:.35}}.ag-chart-menu-icon,.ag-chart-settings-next,.ag-chart-settings-prev,.ag-column-group-icons,.ag-column-select-header-icon,.ag-filter-toolpanel-expand,.ag-floating-filter-button-button,.ag-group-title-bar-icon,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-expand-icon,.ag-panel-title-bar-button,.ag-panel-title-bar-button-icon,.ag-set-filter-group-icons,:where(.ag-group-contracted) .ag-icon,:where(.ag-group-expanded) .ag-icon{background-color:var(--ag-icon-button-background-color);border-radius:var(--ag-icon-button-border-radius);box-shadow:0 0 0 var(--ag-icon-button-background-spread) var(--ag-icon-button-background-color);color:var(--ag-icon-button-color);&:hover{background-color:var(--ag-icon-button-hover-background-color);box-shadow:0 0 0 var(--ag-icon-button-background-spread) var(--ag-icon-button-hover-background-color);color:var(--ag-icon-button-hover-color)}}.ag-filter-active{background-image:linear-gradient(var(--ag-icon-button-active-background-color),var(--ag-icon-button-active-background-color));border-radius:1px;outline:solid var(--ag-icon-button-background-spread) var(--ag-icon-button-active-background-color);position:relative;&:after{background-color:var(--ag-accent-color);border-radius:50%;content:"";height:6px;position:absolute;top:-1px;width:6px}:where(.ag-icon-filter){clip-path:path("M8,0C8,4.415 11.585,8 16,8L16,16L0,16L0,0L8,0Z");color:var(--ag-icon-button-active-color)}}:where(.ag-ltr) .ag-filter-active{&:after{right:-1px}}:where(.ag-rtl) .ag-filter-active{&:after{left:-1px}}.ag-menu{background-color:var(--ag-menu-background-color);border:var(--ag-menu-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-menu-shadow);color:var(--ag-menu-text-color);max-height:100%;overflow-y:auto}.ag-menu,.ag-resizer{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-resizer{pointer-events:none;z-index:1}:where(.ag-resizer){&.ag-resizer-topLeft{cursor:nwse-resize;height:5px;left:0;top:0;width:5px}&.ag-resizer-top{cursor:ns-resize;height:5px;left:5px;right:5px;top:0}&.ag-resizer-topRight{cursor:nesw-resize;height:5px;right:0;top:0;width:5px}&.ag-resizer-right{bottom:5px;cursor:ew-resize;right:0;top:5px;width:5px}&.ag-resizer-bottomRight{bottom:0;cursor:nwse-resize;height:5px;right:0;width:5px}&.ag-resizer-bottom{bottom:0;cursor:ns-resize;height:5px;left:5px;right:5px}&.ag-resizer-bottomLeft{bottom:0;cursor:nesw-resize;height:5px;left:0;width:5px}&.ag-resizer-left{bottom:5px;cursor:ew-resize;left:0;top:5px;width:5px}}',ei,ti,Yo=typeof window!="object"||!((ti=(ei=window==null?void 0:window.document)==null?void 0:ei.fonts)!=null&&ti.forEach),We=(e,t,o,s,i,n)=>{if(Yo)return;s&&(e=`@layer ${CSS.escape(s)} { ${e} }`);let r=He.map.get(t);if(r||(r=[],He.map.set(t,r)),r.find(c=>c.css===e))return;const l=document.createElement("style");n&&l.setAttribute("nonce",n),l.dataset.agGlobalCss=o,l.textContent=e;const a={css:e,el:l,priority:i};let d;for(const c of r){if(c.priority>i)break;d=c}if(d){d.el.insertAdjacentElement("afterend",l);const c=r.indexOf(d);r.splice(c+1,0,a)}else t.insertBefore(l,t.querySelector(":not(title, meta)")),r.push(a)},Wn=(e,t,o)=>{We(lu,e,"core",t,0,o),Array.from(ba()).sort((s,i)=>s.moduleName.localeCompare(i.moduleName)).forEach(s=>{var i;return(i=s.css)==null?void 0:i.forEach(n=>We(n,e,`module-${s.moduleName}`,t,0,o))})},au=e=>{He.grids.add(e)},du=e=>{if(He.grids.delete(e),He.grids.size===0){He.map=new WeakMap;for(const t of document.head.querySelectorAll("style[data-ag-global-css]"))t.remove()}},zs,He=(zs=typeof window=="object"?window:{}).agStyleInjectionState??(zs.agStyleInjectionState={map:new WeakMap,grids:new Set}),he=e=>new Vn(e),pe="$default",cu=0,Vn=class{constructor({feature:e,params:t,modeParams:o={},css:s,cssImports:i}){this.feature=e,this.css=s,this.cssImports=i,this.modeParams={[pe]:{...o[pe]??{},...t??{}},...o}}use(e,t,o){let s=this._inject;if(s==null){let{css:i}=this;if(i){const n=`ag-theme-${this.feature??"part"}-${++cu}`;typeof i=="function"&&(i=i()),i=`:where(.${n}) { +${i} +} +`;for(const r of this.cssImports??[])i=`@import url(${JSON.stringify(r)}); +${i}`;s={css:i,class:n}}else s=!1;this._inject=s}return s&&e&&We(s.css,e,s.class,t,1,o),s?s.class:!1}},hu=e=>e.replace(/[A-Z]/g,t=>`-${t}`).toLowerCase(),Nn=e=>`--ag-${hu(e)}`,ne=e=>`var(${Nn(e)})`,uu=(e,t,o)=>Math.max(t,Math.min(o,e)),gu=e=>{const t=new Map;return o=>{const s=o;return t.has(s)||t.set(s,e(o)),t.get(s)}},se=e=>({ref:"accentColor",mix:e}),Q=e=>({ref:"foregroundColor",mix:e}),te=e=>({ref:"foregroundColor",mix:e,onto:"backgroundColor"}),pu=e=>({ref:"foregroundColor",mix:e,onto:"headerBackgroundColor"}),Z={ref:"backgroundColor"},_e={ref:"foregroundColor"},fe={ref:"accentColor"},Vt={backgroundColor:"#fff",foregroundColor:"#181d1f",borderColor:Q(.15),chromeBackgroundColor:te(.02),browserColorScheme:"light"},fu={...Vt,textColor:_e,accentColor:"#2196f3",invalidColor:"#e02525",wrapperBorder:!0,rowBorder:!0,headerRowBorder:!0,footerRowBorder:{ref:"rowBorder"},columnBorder:{style:"solid",width:1,color:"transparent"},headerColumnBorder:!1,headerColumnBorderHeight:"100%",pinnedColumnBorder:!0,pinnedRowBorder:!0,sidePanelBorder:!0,sideBarPanelWidth:250,sideBarBackgroundColor:{ref:"chromeBackgroundColor"},sideButtonBarBackgroundColor:{ref:"sideBarBackgroundColor"},sideButtonBarTopPadding:0,sideButtonSelectedUnderlineWidth:2,sideButtonSelectedUnderlineColor:"transparent",sideButtonSelectedUnderlineTransitionDuration:0,sideButtonBackgroundColor:"transparent",sideButtonTextColor:{ref:"textColor"},sideButtonHoverBackgroundColor:{ref:"sideButtonBackgroundColor"},sideButtonHoverTextColor:{ref:"sideButtonTextColor"},sideButtonSelectedBackgroundColor:Z,sideButtonSelectedTextColor:{ref:"sideButtonTextColor"},sideButtonBorder:"solid 1px transparent",sideButtonSelectedBorder:!0,sideButtonLeftPadding:{ref:"spacing"},sideButtonRightPadding:{ref:"spacing"},sideButtonVerticalPadding:{calc:"spacing * 3"},fontFamily:["-apple-system","BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif"],headerBackgroundColor:{ref:"chromeBackgroundColor"},headerFontFamily:{ref:"fontFamily"},cellFontFamily:{ref:"fontFamily"},headerFontWeight:500,headerFontSize:{ref:"fontSize"},dataFontSize:{ref:"fontSize"},headerTextColor:{ref:"textColor"},headerCellHoverBackgroundColor:"transparent",headerCellMovingBackgroundColor:{ref:"headerCellHoverBackgroundColor"},headerCellBackgroundTransitionDuration:"0.2s",cellTextColor:{ref:"textColor"},subtleTextColor:{ref:"textColor",mix:.5},rangeSelectionBorderStyle:"solid",rangeSelectionBorderColor:fe,rangeSelectionBackgroundColor:se(.2),rangeSelectionChartBackgroundColor:"#0058FF1A",rangeSelectionChartCategoryBackgroundColor:"#00FF841A",rangeSelectionHighlightColor:se(.5),rangeHeaderHighlightColor:pu(.08),rowNumbersSelectedColor:se(.5),rowHoverColor:se(.08),columnHoverColor:se(.05),selectedRowBackgroundColor:se(.12),modalOverlayBackgroundColor:{ref:"backgroundColor",mix:.66},oddRowBackgroundColor:Z,borderRadius:4,wrapperBorderRadius:8,cellHorizontalPadding:{calc:"spacing * 2 * cellHorizontalPaddingScale"},cellWidgetSpacing:{calc:"spacing * 1.5"},cellHorizontalPaddingScale:1,rowGroupIndentSize:{calc:"cellWidgetSpacing + iconSize"},valueChangeDeltaUpColor:"#43a047",valueChangeDeltaDownColor:"#e53935",valueChangeValueHighlightBackgroundColor:"#16a08580",spacing:8,fontSize:14,rowHeight:{calc:"max(iconSize, dataFontSize) + spacing * 3.25 * rowVerticalPaddingScale"},rowVerticalPaddingScale:1,headerHeight:{calc:"max(iconSize, dataFontSize) + spacing * 4 * headerVerticalPaddingScale"},headerVerticalPaddingScale:1,popupShadow:"0 0 16px #00000026",cardShadow:"0 1px 4px 1px #00000018",dropdownShadow:{ref:"cardShadow"},dragAndDropImageBackgroundColor:Z,dragAndDropImageBorder:!0,dragAndDropImageShadow:{ref:"popupShadow"},dragHandleColor:Q(.7),focusShadow:{spread:3,color:se(.5)},headerColumnResizeHandleHeight:"30%",headerColumnResizeHandleWidth:2,headerColumnResizeHandleColor:{ref:"borderColor"},widgetContainerHorizontalPadding:{calc:"spacing * 1.5"},widgetContainerVerticalPadding:{calc:"spacing * 1.5"},widgetHorizontalSpacing:{calc:"spacing * 1.5"},widgetVerticalSpacing:{ref:"spacing"},listItemHeight:{calc:"max(iconSize, dataFontSize) + widgetVerticalSpacing"},iconSize:16,iconColor:"inherit",iconButtonColor:{ref:"iconColor"},iconButtonBackgroundColor:"transparent",iconButtonBackgroundSpread:4,iconButtonBorderRadius:1,iconButtonHoverColor:{ref:"iconButtonColor"},iconButtonHoverBackgroundColor:Q(.1),iconButtonActiveColor:fe,iconButtonActiveBackgroundColor:se(.28),iconButtonActiveIndicatorColor:fe,toggleButtonWidth:28,toggleButtonHeight:18,toggleButtonOnBackgroundColor:fe,toggleButtonOffBackgroundColor:te(.3),toggleButtonSwitchBackgroundColor:Z,toggleButtonSwitchInset:2,menuBorder:{color:Q(.2)},menuBackgroundColor:te(.03),menuTextColor:te(.95),menuShadow:{ref:"popupShadow"},menuSeparatorColor:{ref:"borderColor"},setFilterIndentSize:{ref:"iconSize"},chartMenuPanelWidth:260,chartMenuLabelColor:Q(.8),dialogShadow:{ref:"popupShadow"},cellEditingBorder:{color:fe},cellEditingShadow:{ref:"cardShadow"},dialogBorder:{color:Q(.2)},panelBackgroundColor:Z,panelTitleBarBackgroundColor:{ref:"headerBackgroundColor"},panelTitleBarIconColor:{ref:"headerTextColor"},panelTitleBarTextColor:{ref:"headerTextColor"},panelTitleBarFontWeight:{ref:"headerFontWeight"},panelTitleBarBorder:!0,columnSelectIndentSize:{ref:"iconSize"},toolPanelSeparatorBorder:!0,tooltipBackgroundColor:{ref:"chromeBackgroundColor"},tooltipTextColor:{ref:"textColor"},tooltipBorder:!0,columnDropCellBackgroundColor:Q(.07),columnDropCellTextColor:{ref:"textColor"},columnDropCellDragHandleColor:{ref:"textColor"},columnDropCellBorder:{color:Q(.13)},selectCellBackgroundColor:Q(.07),selectCellBorder:{color:Q(.13)},advancedFilterBuilderButtonBarBorder:!0,advancedFilterBuilderIndentSize:{calc:"spacing * 2 + iconSize"},advancedFilterBuilderJoinPillColor:"#f08e8d",advancedFilterBuilderColumnPillColor:"#a6e194",advancedFilterBuilderOptionPillColor:"#f3c08b",advancedFilterBuilderValuePillColor:"#85c0e4",findMatchColor:_e,findMatchBackgroundColor:"#ffff00",findActiveMatchColor:_e,findActiveMatchBackgroundColor:"#ffa500",filterToolPanelGroupIndent:{ref:"spacing"},rowLoadingSkeletonEffectColor:Q(.15),statusBarLabelColor:_e,statusBarLabelFontWeight:500,statusBarValueColor:_e,statusBarValueFontWeight:500,pinnedSourceRowTextColor:{ref:"textColor"},pinnedSourceRowBackgroundColor:{ref:"backgroundColor"},pinnedSourceRowFontWeight:600,pinnedRowFontWeight:600,pinnedRowBackgroundColor:{ref:"backgroundColor"},pinnedRowTextColor:{ref:"textColor"}},Cu=":where(.ag-button){background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0;text-indent:inherit;text-shadow:inherit;text-transform:inherit;word-spacing:inherit;&:disabled{cursor:default}&:focus-visible{box-shadow:var(--ag-focus-shadow);outline:none}}.ag-standard-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--ag-button-background-color);border:var(--ag-button-border);border-radius:var(--ag-button-border-radius);color:var(--ag-button-text-color);cursor:pointer;font-weight:var(--ag-button-font-weight);padding:var(--ag-button-vertical-padding) var(--ag-button-horizontal-padding);&:hover{background-color:var(--ag-button-hover-background-color);border:var(--ag-button-hover-border);color:var(--ag-button-hover-text-color)}&:active{background-color:var(--ag-button-active-background-color);border:var(--ag-button-active-border);color:var(--ag-button-active-text-color)}&:disabled{background-color:var(--ag-button-disabled-background-color);border:var(--ag-button-disabled-border);color:var(--ag-button-disabled-text-color)}}",mu={buttonTextColor:"inherit",buttonFontWeight:"normal",buttonBackgroundColor:"transparent",buttonBorder:!1,buttonBorderRadius:{ref:"borderRadius"},buttonHorizontalPadding:{calc:"spacing * 2"},buttonVerticalPadding:{ref:"spacing"},buttonHoverTextColor:{ref:"buttonTextColor"},buttonHoverBackgroundColor:{ref:"buttonBackgroundColor"},buttonHoverBorder:{ref:"buttonBorder"},buttonActiveTextColor:{ref:"buttonHoverTextColor"},buttonActiveBackgroundColor:{ref:"buttonHoverBackgroundColor"},buttonActiveBorder:{ref:"buttonHoverBorder"},buttonDisabledTextColor:{ref:"inputDisabledTextColor"},buttonDisabledBackgroundColor:{ref:"inputDisabledBackgroundColor"},buttonDisabledBorder:{ref:"inputDisabledBorder"}},vu=()=>he({feature:"buttonStyle",params:{...mu,buttonBackgroundColor:Z,buttonBorder:!0,buttonHoverBackgroundColor:{ref:"rowHoverColor"},buttonActiveBorder:{color:fe}},css:Cu}),wu=vu(),yu=".ag-column-drop-vertical-empty-message{align-items:center;border:1px dashed;border-color:var(--ag-border-color);display:flex;inset:0;justify-content:center;margin:calc(var(--ag-spacing)*1.5) calc(var(--ag-spacing)*2);overflow:hidden;padding:calc(var(--ag-spacing)*2);position:absolute}",bu=()=>he({feature:"columnDropStyle",css:yu}),zn=bu(),Su=["colorScheme","color","length","scale","borderStyle","border","shadow","image","fontFamily","fontWeight","duration"],Ru=gu(e=>(e=e.toLowerCase(),Su.find(t=>e.endsWith(t.toLowerCase()))??"length")),Yt=e=>typeof e=="object"&&(e!=null&&e.ref)?ne(e.ref):typeof e=="string"?e:typeof e=="number"?String(e):!1,Qo=e=>{if(typeof e=="string")return e;if(e&&"ref"in e){const t=ne(e.ref);return e.mix==null?t:`color-mix(in srgb, ${e.onto?ne(e.onto):"transparent"}, ${t} ${uu(e.mix*100,0,100)}%)`}return!1},Fu=Yt,ke=e=>typeof e=="string"?e:typeof e=="number"?`${e}px`:e&&"calc"in e?`calc(${e.calc.replace(/ ?[*/+] ?/g," $& ").replace(/-?\b[a-z][a-z0-9]*\b(?![-(])/gi,o=>o[0]==="-"?o:` ${ne(o)} `)})`:e&&"ref"in e?ne(e.ref):!1,xu=Yt,Du=(e,t)=>typeof e=="string"?e:e===!0?"solid 1px var(--ag-border-color)":e===!1?t==="columnBorder"?"solid 1px transparent":"none":e&&"ref"in e?ne(e.ref):_n(e.style??"solid")+" "+ke(e.width??1)+" "+Qo(e.color??{ref:"borderColor"}),Pu=e=>typeof e=="string"?e:e===!1?"none":e&&"ref"in e?ne(e.ref):[ke(e.offsetX??0),ke(e.offsetY??0),ke(e.radius??0),ke(e.spread??0),Qo(e.color??{ref:"foregroundColor"})].join(" "),_n=Yt,Un=e=>typeof e=="string"?e.includes(",")?e:_s(e):e&&"googleFont"in e?Un(e.googleFont):e&&"ref"in e?ne(e.ref):Array.isArray(e)?e.map(t=>(typeof t=="object"&&"googleFont"in t&&(t=t.googleFont),_s(t))).join(", "):!1,_s=e=>/^[\w-]+$|\w\(/.test(e)?e:JSON.stringify(e),Eu=Yt,Kn=e=>typeof e=="string"?e:e&&"url"in e?`url(${JSON.stringify(e.url)})`:e&&"svg"in e?Kn({url:`data:image/svg+xml,${encodeURIComponent(e.svg)}`}):e&&"ref"in e?ne(e.ref):!1,Tu=(e,t)=>typeof e=="string"?e:typeof e=="number"?(e>=10&&K(104,{value:e,param:t}),`${e}s`):e&&"ref"in e?ne(e.ref):!1,ku={color:Qo,colorScheme:Fu,length:ke,scale:xu,border:Du,borderStyle:_n,shadow:Pu,image:Kn,fontFamily:Un,fontWeight:Eu,duration:Tu},Iu=(e,t)=>{const o=Ru(e);return ku[o](t,e)},Lu=()=>new jn().withPart(wu).withPart(zn),jn=class $n{constructor(t=[]){this.parts=t}withPart(t){return typeof t=="function"&&(t=t()),t instanceof Vn?new $n([...this.parts,t]):($e(259,{part:t},"Invalid part"),this)}withoutPart(t){return this.withPart(he({feature:t}))}withParams(t,o=pe){return this.withPart(he({modeParams:{[o]:t}}))}_startUse({styleContainer:t,cssLayer:o,nonce:s,loadThemeGoogleFonts:i}){if(Yo)return;Au(),Wn(t,o,s);const n=Mu(this);if(n.length>0)for(const r of n)i&&Gu(r,s);for(const r of this.parts)r.use(t,o,s)}_getCssClass(){return this._cssClassCache??(this._cssClassCache=Us(this.parts).map(t=>t.use(void 0,void 0,void 0)).filter(Boolean).join(" "))}_getModeParams(){let t=this._paramsCache;if(!t){const o={[pe]:{...fu}};for(const s of Us(this.parts))for(const i of Object.keys(s.modeParams)){const n=s.modeParams[i];if(n){const r=o[i]??(o[i]={}),l=new Set;for(const a of Object.keys(n)){const d=n[a];d!==void 0&&(r[a]=d,l.add(a))}if(i===pe)for(const a of Object.keys(o)){const d=o[a];if(a!==pe)for(const c of l)delete d[c]}}}this._paramsCache=t=o}return t}_getPerGridCss(t){const o="##SELECTOR##";let s=this._paramsCssCache;if(!s){let i="",n="";const r=this._getModeParams();for(const a of Object.keys(r)){const d=r[a];if(a!==pe){const h=`:where([data-ag-theme-mode="${typeof CSS=="object"?CSS.escape(a):a}"]) & { +`;i+=h,n+=h}for(const c of Object.keys(d).sort()){const h=d[c],u=Iu(c,h);if(u===!1)K(107,{key:c,value:h});else{const g=Nn(c),p=g.replace("--ag-","--ag-inherited-");i+=` ${g}: var(${p}, ${u}); +`,n+=` ${p}: var(${g}); +`}}a!==pe&&(i+=`} +`,n+=`} +`)}let l=`${o} { +${i}} +`;l+=`:has(> ${o}):not(${o}) { +${n}} +`,this._paramsCssCache=s=l}return s.replaceAll(o,`:where(.${t})`)}},Us=e=>{const t=new Map;for(const s of e)t.set(s.feature,s);const o=[];for(const s of e)(!s.feature||t.get(s.feature)===s)&&o.push(s);return o},Mu=e=>{const t=new Set,o=n=>{if(Array.isArray(n))n.forEach(o);else{const r=n==null?void 0:n.googleFont;typeof r=="string"&&t.add(r)}};return Object.values(e._getModeParams()).flatMap(n=>Object.values(n)).forEach(o),Array.from(t).sort()},Ks=!1,Au=()=>{if(!Ks){Ks=!0;for(const e of Array.from(document.head.querySelectorAll('style[data-ag-scope="legacy"]')))e.remove()}},Hu=new Set,Gu=async(e,t)=>{Hu.add(e);const o=`@import url('https://${Bu}/css2?family=${encodeURIComponent(e)}:wght@100;200;300;400;500;600;700;800;900&display=swap'); +`;We(o,document.head,`googleFont:${e}`,void 0,0,t)},Bu="fonts.googleapis.com",Ou='.ag-checkbox-input-wrapper,.ag-radio-button-input-wrapper{background-color:var(--ag-checkbox-unchecked-background-color);border:solid var(--ag-checkbox-border-width) var(--ag-checkbox-unchecked-border-color);flex:none;height:var(--ag-icon-size);position:relative;width:var(--ag-icon-size);:where(input){-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:block;height:var(--ag-icon-size);margin:0;opacity:0;width:var(--ag-icon-size)}&:after{content:"";display:block;inset:0;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;pointer-events:none;position:absolute}&:where(.ag-checked){background-color:var(--ag-checkbox-checked-background-color);border-color:var(--ag-checkbox-checked-border-color);&:after{background-color:var(--ag-checkbox-checked-shape-color)}}&:where(:focus-within,:active){box-shadow:var(--ag-focus-shadow)}&:where(.ag-disabled){filter:grayscale();opacity:.5}}.ag-checkbox-input-wrapper{border-radius:var(--ag-checkbox-border-radius);&:where(.ag-checked):after{-webkit-mask-image:var(--ag-checkbox-checked-shape-image);mask-image:var(--ag-checkbox-checked-shape-image)}&:where(.ag-indeterminate){background-color:var(--ag-checkbox-indeterminate-background-color);border-color:var(--ag-checkbox-indeterminate-border-color);&:after{background-color:var(--ag-checkbox-indeterminate-shape-color);-webkit-mask-image:var(--ag-checkbox-indeterminate-shape-image);mask-image:var(--ag-checkbox-indeterminate-shape-image)}}}.ag-radio-button-input-wrapper{border-radius:100%;&:where(.ag-checked):after{-webkit-mask-image:var(--ag-radio-checked-shape-image);mask-image:var(--ag-radio-checked-shape-image)}}',Wu=()=>he({feature:"checkboxStyle",params:{checkboxBorderWidth:1,checkboxBorderRadius:{ref:"borderRadius"},checkboxUncheckedBackgroundColor:Z,checkboxUncheckedBorderColor:te(.3),checkboxCheckedBackgroundColor:fe,checkboxCheckedBorderColor:{ref:"checkboxCheckedBackgroundColor"},checkboxCheckedShapeImage:{svg:''},checkboxCheckedShapeColor:Z,checkboxIndeterminateBackgroundColor:te(.3),checkboxIndeterminateBorderColor:{ref:"checkboxIndeterminateBackgroundColor"},checkboxIndeterminateShapeImage:{svg:''},checkboxIndeterminateShapeColor:Z,radioCheckedShapeImage:{svg:''}},css:Ou}),Vu=Wu(),qn=()=>({...Vt,backgroundColor:"hsl(217, 0%, 17%)",foregroundColor:"#FFF",chromeBackgroundColor:te(.05),rowHoverColor:se(.15),selectedRowBackgroundColor:se(.2),menuBackgroundColor:te(.1),browserColorScheme:"dark",popupShadow:"0 0px 20px #000A",cardShadow:"0 1px 4px 1px #000A",advancedFilterBuilderJoinPillColor:"#7a3a37",advancedFilterBuilderColumnPillColor:"#355f2d",advancedFilterBuilderOptionPillColor:"#5a3168",advancedFilterBuilderValuePillColor:"#374c86",findMatchColor:Z,findActiveMatchColor:Z,checkboxUncheckedBorderColor:te(.4),toggleButtonOffBackgroundColor:te(.4)}),Nu=()=>({...qn(),backgroundColor:"#1f2836"}),zu=()=>he({feature:"colorScheme",params:Vt,modeParams:{light:Vt,dark:qn(),"dark-blue":Nu()}}),_u=zu(),Zn={aggregation:'',arrows:'',asc:'',cancel:'',chart:'',"color-picker":'',columns:'',contracted:'',copy:'',cross:'',csv:'',cut:'',desc:'',down:'',excel:'',expanded:'',"eye-slash":'',eye:'',filter:'',first:'',group:'',last:'',left:'',linked:'',loading:'',maximize:'',menu:'',"menu-alt":'',minimize:'',minus:'',next:'',none:'',"not-allowed":'',paste:'',pin:'',pivot:'',plus:'',previous:'',right:'',save:'',"small-left":'',"small-right":'',tick:'',"tree-closed":'',"tree-indeterminate":'',"tree-open":'',unlinked:'',up:'',grip:'',settings:''},Yn={"column-arrow":'',"small-down":'',"small-up":'',"pinned-top":'',"pinned-bottom":'',"un-pin":''},Uu=(e={})=>{let t="";for(const o of[...Object.keys(Zn),...Object.keys(Yn)]){const s=Ku(o,e.strokeWidth);t+=`.ag-icon-${o}::before { mask-image: url('data:image/svg+xml,${encodeURIComponent(s)}'); } +`}return t},Ku=(e,t=1.5)=>{const o=Yn[e];if(o)return o;const s=Zn[e];if(!s)throw new Error(`Missing icon data for ${e}`);return``+s+""},ju=(e={})=>he({feature:"iconSet",css:()=>Uu(e)}),$u=ju(),qu=':where(.ag-input-field-input[type=number]:not(.ag-number-field-input-stepper)){-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;&::-webkit-inner-spin-button,&::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}}.ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){background-color:var(--ag-input-background-color);border:var(--ag-input-border);border-radius:var(--ag-input-border-radius);color:var(--ag-input-text-color);font-family:inherit;font-size:inherit;line-height:inherit;margin:0;min-height:var(--ag-input-height);padding:0;&:where(:disabled){background-color:var(--ag-input-disabled-background-color);border:var(--ag-input-disabled-border);color:var(--ag-input-disabled-text-color)}&:where(:focus){background-color:var(--ag-input-focus-background-color);border:var(--ag-input-focus-border);box-shadow:var(--ag-input-focus-shadow);color:var(--ag-input-focus-text-color);outline:none}&:where(:invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}&:where(.invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}&::-moz-placeholder{color:var(--ag-input-placeholder-text-color)}&::placeholder{color:var(--ag-input-placeholder-text-color)}}:where(.ag-ltr) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding-left:var(--ag-input-padding-start)}:where(.ag-rtl) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding-right:var(--ag-input-padding-start)}:where(.ag-column-select-header-filter-wrapper,.ag-filter-toolpanel-search,.ag-mini-filter,.ag-filter-filter){.ag-input-wrapper:before{background-color:currentcolor;color:var(--ag-input-icon-color);content:"";display:block;height:12px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==");mask-image:url("data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;opacity:.5;position:absolute;width:12px}}:where(.ag-ltr) :where(.ag-column-select-header-filter-wrapper,.ag-filter-toolpanel-search,.ag-mini-filter,.ag-filter-filter){.ag-input-wrapper:before{margin-left:var(--ag-spacing)}.ag-number-field-input,.ag-text-field-input{padding-left:calc(var(--ag-spacing)*1.5 + 12px)}}:where(.ag-rtl) :where(.ag-column-select-header-filter-wrapper,.ag-filter-toolpanel-search,.ag-mini-filter,.ag-filter-filter){.ag-input-wrapper:before{margin-right:var(--ag-spacing)}.ag-number-field-input,.ag-text-field-input{padding-right:calc(var(--ag-spacing)*1.5 + 12px)}}',Zu=".ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){&:focus{box-shadow:var(--ag-focus-shadow)}}",Yu={inputBackgroundColor:"transparent",inputBorder:!1,inputBorderRadius:0,inputTextColor:{ref:"textColor"},inputPlaceholderTextColor:{ref:"inputTextColor",mix:.5},inputPaddingStart:0,inputHeight:{calc:"max(iconSize, fontSize) + spacing * 2"},inputFocusBackgroundColor:{ref:"inputBackgroundColor"},inputFocusBorder:{ref:"inputBorder"},inputFocusShadow:"none",inputFocusTextColor:{ref:"inputTextColor"},inputDisabledBackgroundColor:{ref:"inputBackgroundColor"},inputDisabledBorder:{ref:"inputBorder"},inputDisabledTextColor:{ref:"inputTextColor"},inputInvalidBackgroundColor:{ref:"inputBackgroundColor"},inputInvalidBorder:{ref:"inputBorder"},inputInvalidTextColor:{ref:"inputTextColor"},inputIconColor:{ref:"inputTextColor"},pickerButtonBorder:!1,pickerButtonFocusBorder:{ref:"inputFocusBorder"},pickerButtonBackgroundColor:{ref:"backgroundColor"},pickerButtonFocusBackgroundColor:{ref:"backgroundColor"},pickerListBorder:!1,pickerListBackgroundColor:{ref:"backgroundColor"}},Qu=()=>he({feature:"inputStyle",params:{...Yu,inputBackgroundColor:Z,inputBorder:!0,inputBorderRadius:{ref:"borderRadius"},inputPaddingStart:{ref:"spacing"},inputFocusBorder:{color:fe},inputFocusShadow:{ref:"focusShadow"},inputDisabledBackgroundColor:te(.06),inputDisabledTextColor:{ref:"textColor",mix:.5},inputInvalidBorder:{color:{ref:"invalidColor"}},pickerButtonBorder:!0,pickerListBorder:!0},css:()=>qu+Zu}),Xu=Qu(),Ju='.ag-tabs-header{background-color:var(--ag-tab-bar-background-color);border-bottom:var(--ag-tab-bar-border);display:flex;flex:1;gap:var(--ag-tab-spacing);padding:var(--ag-tab-bar-top-padding) var(--ag-tab-bar-horizontal-padding) 0}.ag-tabs-header-wrapper{display:flex}.ag-tabs-close-button-wrapper{align-items:center;border:0;display:flex;padding:var(--ag-spacing)}:where(.ag-ltr) .ag-tabs-close-button-wrapper{border-right:1px solid var(--ag-border-color)}:where(.ag-rtl) .ag-tabs-close-button-wrapper{border-left:1px solid var(--ag-border-color)}.ag-tabs-close-button{background-color:unset;border:0;cursor:pointer;padding:0}.ag-tab{align-items:center;background-color:var(--ag-tab-background-color);border-left:var(--ag-tab-selected-border-width) solid transparent;border-right:var(--ag-tab-selected-border-width) solid transparent;color:var(--ag-tab-text-color);cursor:pointer;display:flex;flex:1;justify-content:center;padding:var(--ag-tab-top-padding) var(--ag-tab-horizontal-padding) var(--ag-tab-bottom-padding);position:relative;&:hover{background-color:var(--ag-tab-hover-background-color);color:var(--ag-tab-hover-text-color)}&.ag-tab-selected{background-color:var(--ag-tab-selected-background-color);color:var(--ag-tab-selected-text-color)}&:after{background-color:var(--ag-tab-selected-underline-color);bottom:0;content:"";display:block;height:var(--ag-tab-selected-underline-width);left:0;opacity:0;position:absolute;right:0;transition:opacity var(--ag-tab-selected-underline-transition-duration)}&.ag-tab-selected:after{opacity:1}}:where(.ag-ltr) .ag-tab{&.ag-tab-selected{&:where(:not(:first-of-type)){border-left-color:var(--ag-tab-selected-border-color)}&:where(:not(:last-of-type)){border-right-color:var(--ag-tab-selected-border-color)}}}:where(.ag-rtl) .ag-tab{&.ag-tab-selected{&:where(:not(:first-of-type)){border-right-color:var(--ag-tab-selected-border-color)}&:where(:not(:last-of-type)){border-left-color:var(--ag-tab-selected-border-color)}}}',eg={tabBarBackgroundColor:"transparent",tabBarHorizontalPadding:0,tabBarTopPadding:0,tabBackgroundColor:"transparent",tabTextColor:{ref:"textColor"},tabHorizontalPadding:{ref:"spacing"},tabTopPadding:{ref:"spacing"},tabBottomPadding:{ref:"spacing"},tabSpacing:"0",tabHoverBackgroundColor:{ref:"tabBackgroundColor"},tabHoverTextColor:{ref:"tabTextColor"},tabSelectedBackgroundColor:{ref:"tabBackgroundColor"},tabSelectedTextColor:{ref:"tabTextColor"},tabSelectedBorderWidth:1,tabSelectedBorderColor:"transparent",tabSelectedUnderlineColor:"transparent",tabSelectedUnderlineWidth:0,tabSelectedUnderlineTransitionDuration:0,tabBarBorder:!1},tg=()=>he({feature:"tabStyle",params:{...eg,tabBarBorder:!0,tabBarBackgroundColor:Q(.05),tabTextColor:{ref:"textColor",mix:.7},tabSelectedTextColor:{ref:"textColor"},tabHoverTextColor:{ref:"textColor"},tabSelectedBorderColor:{ref:"borderColor"},tabSelectedBackgroundColor:Z},css:Ju}),og=tg(),sg=()=>Lu().withPart(Vu).withPart(_u).withPart($u).withPart(og).withPart(Xu).withPart(zn).withParams({fontFamily:[{googleFont:"IBM Plex Sans"},"-apple-system","BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu"]}),ig=sg(),ng={cssName:"--ag-cell-horizontal-padding",changeKey:"cellHorizontalPaddingChanged",defaultValue:16},rg={cssName:"--ag-indentation-level",changeKey:"indentationLevelChanged",defaultValue:0,noWarn:!0,cacheDefault:!0},lg={cssName:"--ag-row-group-indent-size",changeKey:"rowGroupIndentSizeChanged",defaultValue:0},js={cssName:"--ag-row-height",changeKey:"rowHeightChanged",defaultValue:42},$s={cssName:"--ag-header-height",changeKey:"headerHeightChanged",defaultValue:48},qs={cssName:"--ag-list-item-height",changeKey:"listItemHeightChanged",defaultValue:24},vo={cssName:"--ag-row-border",changeKey:"rowBorderWidthChanged",defaultValue:1,border:!0},Zs={cssName:"--ag-pinned-row-border",changeKey:"pinnedRowBorderWidthChanged",defaultValue:1,border:!0},ag=0,dg=class extends v{constructor(){super(...arguments),this.beanName="environment",this.sizeEls=new Map,this.lastKnownValues=new Map,this.sizesMeasured=!1,this.paramsClass=`ag-theme-params-${++ag}`,this.globalCSS=[]}wireBeans(e){const{eGridDiv:t,gridOptions:o}=e;this.eGridDiv=t,this.eStyleContainer=o.themeStyleContainer??(t.getRootNode()===document?document.head:t),this.cssLayer=o.themeCssLayer,this.styleNonce=o.styleNonce}postConstruct(){this.addManagedPropertyListener("theme",()=>this.handleThemeGridOptionChange()),this.handleThemeGridOptionChange(),this.addManagedPropertyListener("rowHeight",()=>this.refreshRowHeightVariable()),this.getSizeEl(js),this.getSizeEl($s),this.getSizeEl(qs),this.getSizeEl(vo),this.getSizeEl(Zs),this.refreshRowBorderWidthVariable(),this.addDestroyFunc(()=>du(this)),this.mutationObserver=new MutationObserver(()=>{this.fireGridStylesChangedEvent("themeChanged")}),this.addDestroyFunc(()=>this.mutationObserver.disconnect())}getPinnedRowBorderWidth(){return this.getCSSVariablePixelValue(Zs)}getRowBorderWidth(){return this.getCSSVariablePixelValue(vo)}getDefaultRowHeight(){return this.getCSSVariablePixelValue(js)}getDefaultHeaderHeight(){return this.getCSSVariablePixelValue($s)}getDefaultCellHorizontalPadding(){return this.getCSSVariablePixelValue(ng)}getCellPaddingLeft(){const e=this.getDefaultCellHorizontalPadding(),t=this.getCSSVariablePixelValue(rg),o=this.getCSSVariablePixelValue(lg);return e-1+o*t}getCellPadding(){const e=this.getDefaultCellHorizontalPadding()-1;return this.getCellPaddingLeft()+e}getDefaultColumnMinWidth(){return Math.min(36,this.getDefaultRowHeight())}getDefaultListItemHeight(){return this.getCSSVariablePixelValue(qs)}applyThemeClasses(e){const{gridTheme:t}=this;let o="";if(t)o=`${this.paramsClass} ${t._getCssClass()}`;else{this.mutationObserver.disconnect();let s=this.eGridDiv;for(;s;){let i=!1;for(const n of Array.from(s.classList))n.startsWith("ag-theme-")&&(i=!0,o=o?`${o} ${n}`:n);i&&this.mutationObserver.observe(s,{attributes:!0,attributeFilter:["class"]}),s=s.parentElement}}for(const s of Array.from(e.classList))s.startsWith("ag-theme-")&&e.classList.remove(s);if(o){const s=e.className;e.className=s+(s?" ":"")+o}}refreshRowHeightVariable(){const{eGridDiv:e}=this,t=e.style.getPropertyValue("--ag-line-height").trim(),o=this.gos.get("rowHeight");if(o==null||isNaN(o)||!isFinite(o))return t!==null&&e.style.setProperty("--ag-line-height",null),-1;const s=`${o}px`;return t!=s?(e.style.setProperty("--ag-line-height",s),o):t!=""?parseFloat(t):-1}addGlobalCSS(e,t){this.gridTheme?We(e,this.eStyleContainer,t,this.cssLayer,0,this.styleNonce):this.globalCSS.push([e,t])}getCSSVariablePixelValue(e){const t=this.lastKnownValues.get(e);if(t!=null)return t;const o=this.measureSizeEl(e);return o==="detached"||o==="no-styles"?(e.cacheDefault&&this.lastKnownValues.set(e,e.defaultValue),e.defaultValue):(this.lastKnownValues.set(e,o),o)}measureSizeEl(e){const t=this.getSizeEl(e);if(t.offsetParent==null)return"detached";const o=t.offsetWidth;return o===wo?"no-styles":(this.sizesMeasured=!0,o)}getMeasurementContainer(){let e=this.eMeasurementContainer;return e||(e=this.eMeasurementContainer=q({tag:"div",cls:"ag-measurement-container"}),this.eGridDiv.appendChild(e)),e}getSizeEl(e){let t=this.sizeEls.get(e);if(t)return t;const o=this.getMeasurementContainer();t=q({tag:"div"});const{border:s,noWarn:i}=e;s?(t.className="ag-measurement-element-border",t.style.setProperty("--ag-internal-measurement-border",`var(${e.cssName}, solid ${wo}px)`)):t.style.width=`var(${e.cssName}, ${wo}px)`,o.appendChild(t),this.sizeEls.set(e,t);let n=this.measureSizeEl(e);n==="no-styles"&&!i&&I(9,{variable:e});const r=nt(this.beans,t,()=>{const l=this.measureSizeEl(e);l==="detached"||l==="no-styles"||(this.lastKnownValues.set(e,l),l!==n&&(n=l,this.fireGridStylesChangedEvent(e.changeKey)))});return this.addDestroyFunc(()=>r()),t}fireGridStylesChangedEvent(e){e==="rowBorderWidthChanged"&&this.refreshRowBorderWidthVariable(),this.eventSvc.dispatchEvent({type:"gridStylesChanged",[e]:!0})}refreshRowBorderWidthVariable(){const e=this.getCSSVariablePixelValue(vo);this.eGridDiv.style.setProperty("--ag-internal-row-border-width",`${e}px`)}handleThemeGridOptionChange(){const{gos:e,eGridDiv:t,globalCSS:o,gridTheme:s}=this,i=e.get("theme");let n;if(i==="legacy")n=void 0;else{const r=i??ig;r instanceof jn?n=r:K(240,{theme:r})}if(n!==s){if(n){au(this),Wn(this.eStyleContainer,this.cssLayer,this.styleNonce);for(const[l,a]of o)We(l,this.eStyleContainer,a,this.cssLayer,0,this.styleNonce);o.length=0}this.gridTheme=n,n==null||n._startUse({loadThemeGoogleFonts:e.get("loadThemeGoogleFonts"),styleContainer:this.eStyleContainer,cssLayer:this.cssLayer,nonce:this.styleNonce});let r=this.eParamsStyle;if(!r){r=this.eParamsStyle=q({tag:"style"});const l=this.gos.get("styleNonce");l&&r.setAttribute("nonce",l),t.appendChild(r)}Yo||(r.textContent=(n==null?void 0:n._getPerGridCss(this.paramsClass))||""),this.applyThemeClasses(t),this.fireGridStylesChangedEvent("themeChanged")}n&&getComputedStyle(this.getMeasurementContainer()).getPropertyValue("--ag-legacy-styles-loaded")&&K(i?106:239)}},wo=15538,cg=class extends v{constructor(){super(...arguments),this.beanName="eventSvc",this.globalSvc=new st}postConstruct(){const{globalListener:e,globalSyncListener:t}=this.beans;e&&this.addGlobalListener(e,!0),t&&this.addGlobalListener(t,!1)}addEventListener(e,t,o){this.globalSvc.addEventListener(e,t,o)}removeEventListener(e,t,o){this.globalSvc.removeEventListener(e,t,o)}addGlobalListener(e,t=!1){this.globalSvc.addGlobalListener(e,t)}removeGlobalListener(e,t=!1){this.globalSvc.removeGlobalListener(e,t)}dispatchLocalEvent(){}dispatchEvent(e){this.globalSvc.dispatchEvent(A(this.gos,e))}dispatchEventOnce(e){this.globalSvc.dispatchEventOnce(A(this.gos,e))}};function Qn(e){return e?e.getLeafColumns().some(t=>t.isSpanHeaderHeight()):!1}function Ao(e,t){let o;if(O(e)&&Qn(e)&&e.isPadding()){const s=e;o=s.getLeafColumns()[0];let i=o;for(;i!==s;)t++,i=i.getParent()}return{column:o||e,headerRowIndex:t}}var hg=class extends v{constructor(){super(...arguments),this.beanName="headerNavigation",this.currentHeaderRowWithoutSpan=-1}postConstruct(){const e=this.beans;e.ctrlsSvc.whenReady(this,o=>{this.gridBodyCon=o.gridBodyCtrl});const t=oe(e);this.addManagedElementListeners(t,{mousedown:()=>{this.currentHeaderRowWithoutSpan=-1}})}getHeaderPositionForColumn(e,t){let o;const{colModel:s,colGroupSvc:i,ctrlsSvc:n}=this.beans;if(typeof e=="string"?(o=s.getCol(e),o||(o=(i==null?void 0:i.getColumnGroup(e))??null)):o=e,!o)return null;const r=n.getHeaderRowContainerCtrl(),l=r==null?void 0:r.getAllCtrls(),a=H(l||[]).type==="filter",d=ie(this.beans)-1;let c=-1,h=o;for(;h;)c++,h=h.getParent();let u=c;return t&&a&&u===d-1&&u++,u===-1?null:{headerRowIndex:u,column:o}}navigateVertically(e,t,o){const s=this.beans.focusSvc;if(t||(t=s.focusedHeader),!t)return!1;const{headerRowIndex:i}=t,n=t.column,r=ie(this.beans),l=e==="UP",a=this.getHeaderRowType(i);let{headerRowIndex:d,column:c,headerRowIndexWithoutSpan:h}=l?ug(a,n,i):gg(a,n,i),u=!1;return d<0&&(d=0,c=n,u=!0),d>=r?(d=-1,this.currentHeaderRowWithoutSpan=-1):h!==void 0&&(this.currentHeaderRowWithoutSpan=h),!u&&!c?!1:s.focusHeaderPosition({headerPosition:{headerRowIndex:d,column:c},allowUserOverride:!0,event:o})}navigateHorizontally(e,t=!1,o){const{focusSvc:s,gos:i}=this.beans,n=s.focusedHeader;let r,l;this.currentHeaderRowWithoutSpan!==-1?n.headerRowIndex=this.currentHeaderRowWithoutSpan:this.currentHeaderRowWithoutSpan=n.headerRowIndex,e==="LEFT"!==i.get("enableRtl")?(l="Before",r=this.findHeader(n,l)):(l="After",r=this.findHeader(n,l));const a=i.getCallback("tabToNextHeader");if(t&&a){const d=s.focusHeaderPositionFromUserFunc({userFunc:a,headerPosition:r,direction:l});if(d){const{headerRowIndex:c}=s.focusedHeader||{};c!=null&&c!=n.headerRowIndex&&(this.currentHeaderRowWithoutSpan=c)}return d}return r||!t?s.focusHeaderPosition({headerPosition:r,direction:l,fromTab:t,allowUserOverride:!0,event:o}):this.focusNextHeaderRow(n,l,o)}focusNextHeaderRow(e,t,o){const s=e.headerRowIndex;let i=null,n;const r=this.beans;if(t==="Before"?s>0&&(n=s-1,this.currentHeaderRowWithoutSpan-=1,i=this.findColAtEdgeForHeaderRow(n,"end")):(n=s+1,this.currentHeaderRowWithoutSpan=0;h--){const u=d[h];if(!u.isPadding()){i=u;break}n++}else i=H(d),i||(i=a)}return{column:i,headerRowIndex:n,headerRowIndexWithoutSpan:r}}var pg=class extends v{constructor(){super(...arguments),this.beanName="focusSvc",this.focusFallbackTimeout=null,this.needsFocusRestored=!1}wireBeans(e){this.colModel=e.colModel,this.visibleCols=e.visibleCols,this.rowRenderer=e.rowRenderer,this.navigation=e.navigation,this.filterManager=e.filterManager,this.overlays=e.overlays}postConstruct(){const e=this.clearFocusedCell.bind(this);this.addManagedEventListeners({columnPivotModeChanged:e,newColumnsLoaded:this.onColumnEverythingChanged.bind(this),columnGroupOpened:e,columnRowGroupChanged:e}),this.addDestroyFunc(Ma(this.beans))}attemptToRecoverFocus(){this.needsFocusRestored=!0,this.focusFallbackTimeout!=null&&clearTimeout(this.focusFallbackTimeout),this.focusFallbackTimeout=window.setTimeout(this.setFocusRecovered.bind(this),100)}setFocusRecovered(){this.needsFocusRestored=!1,this.focusFallbackTimeout!=null&&(clearTimeout(this.focusFallbackTimeout),this.focusFallbackTimeout=null)}shouldTakeFocus(){return this.gos.get("suppressFocusAfterRefresh")?(this.setFocusRecovered(),!1):this.needsFocusRestored?(this.setFocusRecovered(),!0):this.doesRowOrCellHaveBrowserFocus()}onColumnEverythingChanged(){if(!this.focusedCell)return;const e=this.focusedCell.column,t=this.colModel.getCol(e.getId());e!==t&&this.clearFocusedCell()}getFocusCellToUseAfterRefresh(){const{gos:e,focusedCell:t}=this;return e.get("suppressFocusAfterRefresh")||e.get("suppressCellFocus")||!t||!this.doesRowOrCellHaveBrowserFocus()?null:t}getFocusHeaderToUseAfterRefresh(){return this.gos.get("suppressFocusAfterRefresh")||!this.focusedHeader||!this.isDomDataPresentInHierarchy(z(this.beans),kn)?null:this.focusedHeader}doesRowOrCellHaveBrowserFocus(){const e=z(this.beans);return this.isDomDataPresentInHierarchy(e,Bt)?!0:this.isDomDataPresentInHierarchy(e,Wt)}isDomDataPresentInHierarchy(e,t){let o=e;for(;o;){if(Oi(this.gos,o,t))return!0;o=o.parentNode}return!1}getFocusedCell(){return this.focusedCell}getFocusEventParams(e){const{rowIndex:t,rowPinned:o,column:s}=e,i={rowIndex:t,rowPinned:o,column:s,isFullWidthCell:!1},n=this.rowRenderer.getRowByPosition({rowIndex:t,rowPinned:o});return n&&(i.isFullWidthCell=n.isFullWidth()),i}clearFocusedCell(){if(this.focusedCell==null)return;const e=this.getFocusEventParams(this.focusedCell);this.focusedCell=null,this.eventSvc.dispatchEvent({type:"cellFocusCleared",...e})}setFocusedCell(e){this.setFocusRecovered();const{column:t,rowIndex:o,rowPinned:s,forceBrowserFocus:i=!1,preventScrollOnBrowserFocus:n=!1}=e,r=this.colModel.getCol(t);if(!r){this.focusedCell=null;return}this.focusedCell={rowIndex:o,rowPinned:Re(s),column:r},this.eventSvc.dispatchEvent({type:"cellFocused",...this.getFocusEventParams(this.focusedCell),forceBrowserFocus:i,preventScrollOnBrowserFocus:n})}isCellFocused(e){return this.focusedCell==null?!1:Xa(e,this.focusedCell)}isHeaderWrapperFocused(e){if(this.focusedHeader==null)return!1;const{column:t,rowCtrl:{rowIndex:o,pinned:s}}=e,{column:i,headerRowIndex:n}=this.focusedHeader;return t===i&&o===n&&s==i.getPinned()}focusHeaderPosition(e){var a;if(this.setFocusRecovered(),Fe(this.beans))return!1;const{direction:t,fromTab:o,allowUserOverride:s,event:i,fromCell:n,rowWithoutSpanValue:r}=e;let{headerPosition:l}=e;if(n&&((a=this.filterManager)!=null&&a.isAdvFilterHeaderActive()))return this.focusAdvancedFilter(l);if(s){const d=this.focusedHeader,c=ie(this.beans);if(o){const h=this.gos.getCallback("tabToNextHeader");h&&(l=this.getHeaderPositionFromUserFunc({userFunc:h,direction:t,currentPosition:d,headerPosition:l,headerRowCount:c}))}else{const h=this.gos.getCallback("navigateToNextHeader");if(h&&i){const u={key:i.key,previousHeaderPosition:d,nextHeaderPosition:l,headerRowCount:c,event:i};l=h(u)}}}return l?this.focusProvidedHeaderPosition({headerPosition:l,direction:t,event:i,fromCell:n,rowWithoutSpanValue:r}):!1}focusHeaderPositionFromUserFunc(e){if(Fe(this.beans))return!1;const{userFunc:t,headerPosition:o,direction:s,event:i}=e,n=this.focusedHeader,r=ie(this.beans),l=this.getHeaderPositionFromUserFunc({userFunc:t,direction:s,currentPosition:n,headerPosition:o,headerRowCount:r});return!!l&&this.focusProvidedHeaderPosition({headerPosition:l,direction:s,event:i})}getHeaderPositionFromUserFunc(e){const{userFunc:t,direction:o,currentPosition:s,headerPosition:i,headerRowCount:n}=e,l=t({backwards:o==="Before",previousHeaderPosition:s,nextHeaderPosition:i,headerRowCount:n});return l===!0?s:l===!1?null:l}focusProvidedHeaderPosition(e){const{headerPosition:t,direction:o,fromCell:s,rowWithoutSpanValue:i,event:n}=e,{column:r,headerRowIndex:l}=t,{filterManager:a,ctrlsSvc:d,headerNavigation:c}=this.beans;if(l===-1)return a!=null&&a.isAdvFilterHeaderActive()?this.focusAdvancedFilter(t):this.focusGridView({column:r,event:n});c==null||c.scrollToColumn(r,o);const h=d.getHeaderRowContainerCtrl(r.getPinned()),u=(h==null?void 0:h.focusHeader(t.headerRowIndex,r,n))||!1;return c&&u&&(i!=null||s)&&(c.currentHeaderRowWithoutSpan=i??-1),u}focusFirstHeader(){var s;if((s=this.overlays)!=null&&s.isExclusive()&&this.focusOverlay())return!0;let e=this.visibleCols.allCols[0];if(!e)return!1;const{colGroupSvc:t}=this.beans;t&&e.getParent()&&(e=t.getColGroupAtLevel(e,0));const o=Ao(e,0);return this.focusHeaderPosition({headerPosition:o,rowWithoutSpanValue:0})}focusLastHeader(e){var s;if((s=this.overlays)!=null&&s.isExclusive()&&this.focusOverlay(!0))return!0;const t=ie(this.beans)-1,o=H(this.visibleCols.allCols);return this.focusHeaderPosition({headerPosition:{headerRowIndex:t,column:o},rowWithoutSpanValue:-1,event:e})}focusPreviousFromFirstCell(e){var t;return(t=this.filterManager)!=null&&t.isAdvFilterHeaderActive()?this.focusAdvancedFilter(null):this.focusLastHeader(e)}isAnyCellFocused(){return!!this.focusedCell}isRowFocused(e,t){return this.focusedCell==null?!1:this.focusedCell.rowIndex===e&&this.focusedCell.rowPinned===Re(t)}focusOverlay(e){var o,s;const t=((o=this.overlays)==null?void 0:o.isVisible())&&((s=this.overlays.eWrapper)==null?void 0:s.getGui());return!!t&&Gt(t,e)}focusGridView(e){var n,r,l,a,d,c;const{backwards:t=!1,canFocusOverlay:o=!0,event:s}=e;if((n=this.overlays)!=null&&n.isExclusive())return o&&this.focusOverlay(t);if(Uo(this.beans))return t&&!Fe(this.beans)?this.focusLastHeader():o&&this.focusOverlay(t)?!0:t?!1:et(this.beans,t);const i=t?td(this.beans):ed(this.beans);if(i){const h=e.column??((r=this.focusedHeader)==null?void 0:r.column),{rowIndex:u,rowPinned:g}=i,p=Cn(this.beans,i);if(!h||!p||u==null)return!1;if(h.isSuppressNavigable(p)){const f=this.gos.get("enableRtl");let C;return!s||s.key===m.TAB?C=f?m.LEFT:m.RIGHT:C=s.key,(l=this.beans.navigation)==null||l.navigateToNextCell(null,C,{rowIndex:u,column:h,rowPinned:g||null},!0),!0}if((a=this.navigation)==null||a.ensureCellVisible({rowIndex:u,column:h,rowPinned:g}),t){const f=this.rowRenderer.getRowByPosition(i);if(f!=null&&f.isFullWidth()&&((d=this.navigation)!=null&&d.tryToFocusFullWidthRow(i,t)))return!0}return this.setFocusedCell({rowIndex:u,column:h,rowPinned:Re(g),forceBrowserFocus:!0}),(c=this.beans.rangeSvc)==null||c.setRangeToCell({rowIndex:u,rowPinned:g,column:h}),!0}return!!(o&&this.focusOverlay(t)||t&&this.focusLastHeader())}focusAdvancedFilter(e){var t;return this.advFilterFocusColumn=e==null?void 0:e.column,((t=this.beans.advancedFilter)==null?void 0:t.getCtrl().focusHeaderComp())??!1}focusNextFromAdvancedFilter(e,t){var s;const o=(t?void 0:this.advFilterFocusColumn)??((s=this.visibleCols.allCols)==null?void 0:s[0]);return e?this.focusHeaderPosition({headerPosition:{column:o,headerRowIndex:ie(this.beans)-1}}):this.focusGridView({column:o})}clearAdvancedFilterColumn(){this.advFilterFocusColumn=void 0}},fg=class extends v{constructor(){super(...arguments),this.beanName="scrollVisibleSvc"}wireBeans(e){this.ctrlsSvc=e.ctrlsSvc,this.colAnimation=e.colAnimation}postConstruct(){this.getScrollbarWidth(),this.addManagedEventListeners({displayedColumnsChanged:this.updateScrollVisible.bind(this),displayedColumnsWidthChanged:this.updateScrollVisible.bind(this)})}updateScrollVisible(){const{colAnimation:e}=this;e!=null&&e.isActive()?e.executeLaterVMTurn(()=>{e.executeLaterVMTurn(()=>this.updateScrollVisibleImpl())}):this.updateScrollVisibleImpl()}updateScrollVisibleImpl(){var o;const e=this.ctrlsSvc.get("center");if(!e||(o=this.colAnimation)!=null&&o.isActive())return;const t={horizontalScrollShowing:e.isHorizontalScrollShowing(),verticalScrollShowing:this.verticalScrollShowing};this.setScrollsVisible(t),this.updateScrollGap()}updateScrollGap(){const e=this.ctrlsSvc.get("center"),t=e.hasHorizontalScrollGap(),o=e.hasVerticalScrollGap();(this.horizontalScrollGap!==t||this.verticalScrollGap!==o)&&(this.horizontalScrollGap=t,this.verticalScrollGap=o,this.eventSvc.dispatchEvent({type:"scrollGapChanged"}))}setScrollsVisible(e){(this.horizontalScrollShowing!==e.horizontalScrollShowing||this.verticalScrollShowing!==e.verticalScrollShowing)&&(this.horizontalScrollShowing=e.horizontalScrollShowing,this.verticalScrollShowing=e.verticalScrollShowing,this.eventSvc.dispatchEvent({type:"scrollVisibilityChanged"}))}getScrollbarWidth(){if(this.scrollbarWidth==null){const e=this.gos.get("scrollbarWidth"),o=typeof e=="number"&&e>=0?e:Er();o!=null&&(this.scrollbarWidth=o,this.eventSvc.dispatchEvent({type:"scrollbarWidthChanged"}))}return this.scrollbarWidth}},Cg=class extends v{constructor(){super(...arguments),this.beanName="gridDestroySvc",this.destroyCalled=!1}destroy(){var s;if(this.destroyCalled)return;const{stateSvc:e,ctrlsSvc:t,context:o}=this.beans;this.eventSvc.dispatchEvent({type:"gridPreDestroyed",state:(e==null?void 0:e.getState())??{}}),this.destroyCalled=!0,(s=t.get("gridCtrl"))==null||s.destroyGridUi(),o.destroy(),super.destroy()}},Xn=new Set(["gridPreDestroyed","fillStart","pasteStart"]),mg={suppressContextMenu:!1,preventDefaultOnContextMenu:!1,allowContextMenuWithControlKey:!1,suppressMenuHide:!0,enableBrowserTooltips:!1,tooltipTrigger:"hover",tooltipShowDelay:2e3,tooltipHideDelay:1e4,tooltipMouseTrack:!1,tooltipShowMode:"standard",tooltipInteraction:!1,copyHeadersToClipboard:!1,copyGroupHeadersToClipboard:!1,clipboardDelimiter:" ",suppressCopyRowsToClipboard:!1,suppressCopySingleCellRanges:!1,suppressLastEmptyLineOnPaste:!1,suppressClipboardPaste:!1,suppressClipboardApi:!1,suppressCutToClipboard:!1,maintainColumnOrder:!1,enableStrictPivotColumnOrder:!1,suppressFieldDotNotation:!1,allowDragFromColumnsToolPanel:!1,suppressMovableColumns:!1,suppressColumnMoveAnimation:!1,suppressMoveWhenColumnDragging:!1,suppressDragLeaveHidesColumns:!1,suppressRowGroupHidesColumns:!1,suppressAutoSize:!1,autoSizePadding:20,skipHeaderOnAutoSize:!1,singleClickEdit:!1,suppressClickEdit:!1,readOnlyEdit:!1,stopEditingWhenCellsLoseFocus:!1,enterNavigatesVertically:!1,enterNavigatesVerticallyAfterEdit:!1,enableCellEditingOnBackspace:!1,undoRedoCellEditing:!1,undoRedoCellEditingLimit:10,suppressCsvExport:!1,suppressExcelExport:!1,cacheQuickFilter:!1,includeHiddenColumnsInQuickFilter:!1,excludeChildrenWhenTreeDataFiltering:!1,enableAdvancedFilter:!1,includeHiddenColumnsInAdvancedFilter:!1,enableCharts:!1,masterDetail:!1,keepDetailRows:!1,keepDetailRowsCount:10,detailRowAutoHeight:!1,tabIndex:0,rowBuffer:10,valueCache:!1,valueCacheNeverExpires:!1,enableCellExpressions:!1,suppressTouch:!1,suppressFocusAfterRefresh:!1,suppressBrowserResizeObserver:!1,suppressPropertyNamesCheck:!1,suppressChangeDetection:!1,debug:!1,suppressLoadingOverlay:!1,suppressNoRowsOverlay:!1,pagination:!1,paginationPageSize:100,paginationPageSizeSelector:!0,paginationAutoPageSize:!1,paginateChildRows:!1,suppressPaginationPanel:!1,pivotMode:!1,pivotPanelShow:"never",pivotDefaultExpanded:0,pivotSuppressAutoColumn:!1,suppressExpandablePivotGroups:!1,functionsReadOnly:!1,suppressAggFuncInHeader:!1,alwaysAggregateAtRootLevel:!1,aggregateOnlyChangedColumns:!1,suppressAggFilteredOnly:!1,removePivotHeaderRowWhenSingleValueColumn:!1,animateRows:!0,cellFlashDuration:500,cellFadeDuration:1e3,allowShowChangeAfterFilter:!1,domLayout:"normal",ensureDomOrder:!1,enableRtl:!1,suppressColumnVirtualisation:!1,suppressMaxRenderedRowRestriction:!1,suppressRowVirtualisation:!1,rowDragManaged:!1,suppressRowDrag:!1,suppressMoveWhenRowDragging:!1,rowDragEntireRow:!1,rowDragMultiRow:!1,embedFullWidthRows:!1,groupDisplayType:"singleColumn",groupDefaultExpanded:0,groupMaintainOrder:!1,groupSelectsChildren:!1,groupSuppressBlankHeader:!1,groupSelectsFiltered:!1,showOpenedGroup:!1,groupRemoveSingleChildren:!1,groupRemoveLowestSingleChildren:!1,groupHideOpenParents:!1,groupAllowUnbalanced:!1,rowGroupPanelShow:"never",suppressMakeColumnVisibleAfterUnGroup:!1,treeData:!1,rowGroupPanelSuppressSort:!1,suppressGroupRowsSticky:!1,rowModelType:"clientSide",asyncTransactionWaitMillis:50,suppressModelUpdateAfterUpdateTransaction:!1,cacheOverflowSize:1,infiniteInitialRowCount:1,serverSideInitialRowCount:1,cacheBlockSize:100,maxBlocksInCache:-1,maxConcurrentDatasourceRequests:2,blockLoadDebounceMillis:0,purgeClosedRowNodes:!1,serverSideSortAllLevels:!1,serverSideOnlyRefreshFilteredGroups:!1,serverSidePivotResultFieldSeparator:"_",viewportRowModelPageSize:5,viewportRowModelBufferSize:5,alwaysShowHorizontalScroll:!1,alwaysShowVerticalScroll:!1,debounceVerticalScrollbar:!1,suppressHorizontalScroll:!1,suppressScrollOnNewData:!1,suppressScrollWhenPopupsAreOpen:!1,suppressAnimationFrame:!1,suppressMiddleClickScrolls:!1,suppressPreventDefaultOnMouseWheel:!1,rowMultiSelectWithClick:!1,suppressRowDeselection:!1,suppressRowClickSelection:!1,suppressCellFocus:!1,suppressHeaderFocus:!1,suppressMultiRangeSelection:!1,enableCellTextSelection:!1,enableRangeSelection:!1,enableRangeHandle:!1,enableFillHandle:!1,fillHandleDirection:"xy",suppressClearOnFillReduction:!1,accentedSort:!1,unSortIcon:!1,suppressMultiSort:!1,alwaysMultiSort:!1,suppressMaintainUnsortedOrder:!1,suppressRowHoverHighlight:!1,suppressRowTransform:!1,columnHoverHighlight:!1,deltaSort:!1,enableGroupEdit:!1,groupLockGroupColumns:0,serverSideEnableClientSideSort:!1,suppressServerSideFullWidthLoadingRow:!1,pivotMaxGeneratedColumns:-1,columnMenu:"new",reactiveCustomComponents:!0,suppressSetFilterByDefault:!1,rowNumbers:!1},Ue=(e,t)=>({tag:"span",ref:`eSort${e}`,cls:`ag-sort-indicator-icon ag-sort-${t} ag-hidden`,attrs:{"aria-hidden":"true"}}),vg={tag:"span",cls:"ag-sort-indicator-container",children:[Ue("Order","order"),Ue("Asc","ascending-icon"),Ue("Desc","descending-icon"),Ue("Mixed","mixed-icon"),Ue("None","none-icon")]},Xo=class extends N{constructor(e){super(),this.eSortOrder=x,this.eSortAsc=x,this.eSortDesc=x,this.eSortMixed=x,this.eSortNone=x,e||this.setTemplate(vg)}attachCustomElements(e,t,o,s,i){this.eSortOrder=e,this.eSortAsc=t,this.eSortDesc=o,this.eSortMixed=s,this.eSortNone=i}setupSort(e,t=!1){if(this.column=e,this.suppressOrder=t,this.setupMultiSortIndicator(),!e.isSortable()&&!e.getColDef().showRowGroup)return;this.addInIcon("sortAscending",this.eSortAsc,e),this.addInIcon("sortDescending",this.eSortDesc,e),this.addInIcon("sortUnSort",this.eSortNone,e);const o=this.updateIcons.bind(this),s=this.onSortChanged.bind(this);this.addManagedPropertyListener("unSortIcon",o),this.addManagedEventListeners({newColumnsLoaded:o,sortChanged:s,columnRowGroupChanged:s}),this.onSortChanged()}addInIcon(e,t,o){if(t==null)return;const s=Zt(e,this.beans,o);s&&t.appendChild(s)}onSortChanged(){this.updateIcons(),this.suppressOrder||this.updateSortOrder()}updateIcons(){const{eSortAsc:e,eSortDesc:t,eSortNone:o,column:s,gos:i,beans:n}=this,r=n.sortSvc.getDisplaySortForColumn(s);if(e&&W(e,r==="asc",{skipAriaHidden:!0}),t&&W(t,r==="desc",{skipAriaHidden:!0}),o){const l=!s.getColDef().unSortIcon&&!i.get("unSortIcon"),a=r==null;W(o,!l&&a,{skipAriaHidden:!0})}}setupMultiSortIndicator(){const{eSortMixed:e,column:t,gos:o}=this;this.addInIcon("sortUnSort",e,t);const s=t.getColDef().showRowGroup;ae(o)&&s&&(this.addManagedEventListeners({sortChanged:this.updateMultiSortIndicator.bind(this),columnRowGroupChanged:this.updateMultiSortIndicator.bind(this)}),this.updateMultiSortIndicator())}updateMultiSortIndicator(){const{eSortMixed:e,beans:t,column:o}=this;if(e){const s=t.sortSvc.getDisplaySortForColumn(o)==="mixed";W(e,s,{skipAriaHidden:!0})}}updateSortOrder(){const{eSortOrder:e,column:t,beans:{sortSvc:o}}=this;if(!e)return;const s=o.getColumnsWithSortingOrdered(),i=o.getDisplaySortIndexForColumn(t)??-1,n=s.some(l=>o.getDisplaySortIndexForColumn(l)??!1),r=i>=0&&n;W(e,r,{skipAriaHidden:!0}),i>=0?e.textContent=(i+1).toString():de(e)}},wg={selector:"AG-SORT-INDICATOR",component:Xo},yg=["asc","desc",null],bg=class extends v{constructor(){super(...arguments),this.beanName="sortSvc"}progressSort(e,t,o){const s=this.getNextSortDirection(e);this.setSortForColumn(e,s,t,o)}progressSortFromEvent(e,t){const s=this.gos.get("multiSortKey")==="ctrl"?t.ctrlKey||t.metaKey:t.shiftKey;this.progressSort(e,s,"uiColumnSorted")}setSortForColumn(e,t,o,s){var c;t!=="asc"&&t!=="desc"&&(t=null);const{gos:i,showRowGroupCols:n}=this.beans,r=ae(i);let l=[e];if(r&&e.getColDef().showRowGroup){const h=(c=n==null?void 0:n.getSourceColumnsForGroupColumn)==null?void 0:c.call(n,e),u=h==null?void 0:h.filter(g=>g.isSortable());u&&(l=[e,...u])}l.forEach(h=>this.setColSort(h,t,s));const a=(o||i.get("alwaysMultiSort"))&&!i.get("suppressMultiSort"),d=[];if(!a){const h=this.clearSortBarTheseColumns(l,s);d.push(...h)}this.updateSortIndex(e),d.push(...l),this.dispatchSortChangedEvents(s,d)}updateSortIndex(e){const{gos:t,colModel:o,showRowGroupCols:s}=this.beans,i=ae(t),n=s==null?void 0:s.getShowRowGroupCol(e.getId()),r=i&&n||e,l=this.getColumnsWithSortingOrdered();o.forAllCols(c=>this.setColSortIndex(c,null));const a=l.filter(c=>i&&c.getColDef().showRowGroup?!1:c!==r);(r.getSort()?[...a,r]:a).forEach((c,h)=>this.setColSortIndex(c,h))}onSortChanged(e,t){this.dispatchSortChangedEvents(e,t)}isSortActive(){let e=!1;return this.beans.colModel.forAllCols(t=>{t.getSort()&&(e=!0)}),e}dispatchSortChangedEvents(e,t){const o={type:"sortChanged",source:e};t&&(o.columns=t),this.eventSvc.dispatchEvent(o)}clearSortBarTheseColumns(e,t){const o=[];return this.beans.colModel.forAllCols(s=>{e.includes(s)||(s.getSort()&&o.push(s),this.setColSort(s,void 0,t))}),o}getNextSortDirection(e){const t=e.getColDef().sortingOrder??this.gos.get("sortingOrder")??yg,o=t.indexOf(e.getSort()),s=o<0,i=o==t.length-1;return s||i?t[0]:t[o+1]}getIndexedSortMap(){const{gos:e,colModel:t,showRowGroupCols:o,rowGroupColsSvc:s}=this.beans;let i=[];if(t.forAllCols(d=>{d.getSort()&&i.push(d)}),t.isPivotMode()){const d=ae(e);i=i.filter(c=>{const h=!!c.getAggFunc(),u=!c.isPrimary(),g=d?o==null?void 0:o.getShowRowGroupCol(c.getId()):c.getColDef().showRowGroup;return h||u||g})}const n=(s==null?void 0:s.columns.filter(d=>!!d.getSort()))??[],r={};i.forEach((d,c)=>r[d.getId()]=c),i.sort((d,c)=>{const h=d.getSortIndex(),u=c.getSortIndex();if(h!=null&&u!=null)return h-u;if(h==null&&u==null){const g=r[d.getId()],p=r[c.getId()];return g>p?1:-1}else return u==null?-1:1});const l=ae(e)&&!!n.length;l&&(i=[...new Set(i.map(d=>(o==null?void 0:o.getShowRowGroupCol(d.getId()))??d))]);const a=new Map;return i.forEach((d,c)=>a.set(d,c)),l&&n.forEach(d=>{const c=o.getShowRowGroupCol(d.getId());a.set(d,a.get(c))}),a}getColumnsWithSortingOrdered(){return[...this.getIndexedSortMap().entries()].sort(([,e],[,t])=>e-t).map(([e])=>e)}getSortModel(){return this.getColumnsWithSortingOrdered().filter(e=>e.getSort()).map(e=>({sort:e.getSort(),colId:e.getId()}))}getSortOptions(){return this.getColumnsWithSortingOrdered().filter(e=>e.getSort()).map(e=>({sort:e.getSort(),column:e}))}canColumnDisplayMixedSort(e){const t=ae(this.gos),o=!!e.getColDef().showRowGroup;return t&&o}getDisplaySortForColumn(e){var r;const t=(r=this.beans.showRowGroupCols)==null?void 0:r.getSourceColumnsForGroupColumn(e);if(!this.canColumnDisplayMixedSort(e)||!(t!=null&&t.length))return e.getSort();const s=e.getColDef().field!=null||!!e.getColDef().valueGetter?[e,...t]:t,i=s[0].getSort();return s.every(l=>l.getSort()==i)?i:"mixed"}getDisplaySortIndexForColumn(e){return this.getIndexedSortMap().get(e)}setupHeader(e,t,o){let s=0;e.addManagedListeners(t,{movingChanged:()=>{s=Date.now()}}),o&&e.addManagedElementListeners(o,{click:n=>{const r=t.isMoving(),a=Date.now()-s<50;r||a||this.progressSortFromEvent(t,n)}});const i=()=>{var r;const n=t.getSort();if(e.toggleCss("ag-header-cell-sorted-asc",n==="asc"),e.toggleCss("ag-header-cell-sorted-desc",n==="desc"),e.toggleCss("ag-header-cell-sorted-none",!n),t.getColDef().showRowGroup){const l=(r=this.beans.showRowGroupCols)==null?void 0:r.getSourceColumnsForGroupColumn(t),d=!(l==null?void 0:l.every(c=>t.getSort()==c.getSort()));e.toggleCss("ag-header-cell-sorted-mixed",d)}};e.addManagedEventListeners({sortChanged:i,columnRowGroupChanged:i})}initCol(e){const{sort:t,initialSort:o,sortIndex:s,initialSortIndex:i}=e.colDef;t!==void 0?(t==="asc"||t==="desc")&&(e.sort=t):(o==="asc"||o==="desc")&&(e.sort=o),s!==void 0?s!==null&&(e.sortIndex=s):i!==null&&(e.sortIndex=i)}updateColSort(e,t,o){t!==void 0&&(t==="desc"||t==="asc"?this.setColSort(e,t,o):this.setColSort(e,void 0,o))}setColSort(e,t,o){e.sort!==t&&(e.sort=t,e.dispatchColEvent("sortChanged",o)),e.dispatchStateUpdatedEvent("sort")}setColSortIndex(e,t){e.sortIndex=t,e.dispatchStateUpdatedEvent("sortIndex")}createSortIndicator(e){return new Xo(e)}getSortIndicatorSelector(){return wg}},yo={agSetColumnFilter:"SetFilter",agSetColumnFloatingFilter:"SetFilter",agMultiColumnFilter:"MultiFilter",agMultiColumnFloatingFilter:"MultiFilter",agGroupColumnFilter:"GroupFilter",agGroupColumnFloatingFilter:"GroupFilter",agGroupCellRenderer:"GroupCellRenderer",agGroupRowRenderer:"GroupCellRenderer",agRichSelect:"RichSelect",agRichSelectCellEditor:"RichSelect",agDetailCellRenderer:"SharedMasterDetail",agSparklineCellRenderer:"Sparklines",agDragAndDropImage:"SharedDragAndDrop",agColumnHeader:"ColumnHeaderComp",agColumnGroupHeader:"ColumnGroupHeaderComp",agSortIndicator:"Sort",agAnimateShowChangeCellRenderer:"HighlightChanges",agAnimateSlideCellRenderer:"HighlightChanges",agLoadingCellRenderer:"LoadingCellRenderer",agSkeletonCellRenderer:"SkeletonCellRenderer",agCheckboxCellRenderer:"CheckboxCellRenderer",agLoadingOverlay:"Overlay",agNoRowsOverlay:"Overlay",agTooltipComponent:"Tooltip",agReadOnlyFloatingFilter:"CustomFilter",agTextColumnFilter:"TextFilter",agNumberColumnFilter:"NumberFilter",agDateColumnFilter:"DateFilter",agDateInput:"DateFilter",agTextColumnFloatingFilter:"TextFilter",agNumberColumnFloatingFilter:"NumberFilter",agDateColumnFloatingFilter:"DateFilter",agCellEditor:"TextEditor",agSelectCellEditor:"SelectEditor",agTextCellEditor:"TextEditor",agNumberCellEditor:"NumberEditor",agDateCellEditor:"DateEditor",agDateStringCellEditor:"DateEditor",agCheckboxCellEditor:"CheckboxEditor",agLargeTextCellEditor:"LargeTextEditor",agMenuItem:"MenuItem",agColumnsToolPanel:"ColumnsToolPanel",agFiltersToolPanel:"FiltersToolPanel",agAggregationComponent:"StatusBar",agSelectedRowCountComponent:"StatusBar",agTotalRowCountComponent:"StatusBar",agFilteredRowCountComponent:"StatusBar",agTotalAndFilteredRowCountComponent:"StatusBar",agFindCellRenderer:"Find"},Sg={aggFunc:"SharedAggregation",autoHeight:"RowAutoHeight",cellClass:"CellStyle",cellClassRules:"CellStyle",cellEditor:({cellEditor:e,editable:t})=>t?typeof e=="string"?yo[e]??"CustomEditor":"CustomEditor":null,cellRenderer:({cellRenderer:e})=>typeof e!="string"?null:yo[e],cellStyle:"CellStyle",columnChooserParams:"ColumnMenu",contextMenuItems:"ContextMenu",dndSource:"DragAndDrop",dndSourceOnRowDrag:"DragAndDrop",editable:({editable:e,cellEditor:t})=>e&&!t?"TextEditor":null,enableCellChangeFlash:"HighlightChanges",enablePivot:"SharedPivot",enableRowGroup:"SharedRowGrouping",enableValue:"SharedAggregation",filter:({filter:e})=>e&&typeof e!="string"&&typeof e!="boolean"?"CustomFilter":typeof e=="string"?yo[e]??"ColumnFilter":"ColumnFilter",floatingFilter:"ColumnFilter",getQuickFilterText:"QuickFilter",headerTooltip:"Tooltip",mainMenuItems:"ColumnMenu",menuTabs:e=>{var o;const t=["columnsMenuTab","generalMenuTab"];return(o=e.menuTabs)!=null&&o.some(s=>t.includes(s))?"ColumnMenu":null},pivot:"SharedPivot",pivotIndex:"SharedPivot",rowDrag:"RowDrag",rowGroup:"SharedRowGrouping",rowGroupIndex:"SharedRowGrouping",tooltipField:"Tooltip",tooltipValueGetter:"Tooltip",spanRows:"CellSpan"},Rg=["columnEverythingChanged","newColumnsLoaded","columnPivotModeChanged","pivotMaxColumnsExceeded","columnRowGroupChanged","expandOrCollapseAll","columnPivotChanged","gridColumnsChanged","columnValueChanged","columnMoved","columnVisible","columnPinned","columnGroupOpened","columnResized","displayedColumnsChanged","virtualColumnsChanged","columnHeaderMouseOver","columnHeaderMouseLeave","columnHeaderClicked","columnHeaderContextMenu","asyncTransactionsFlushed","rowGroupOpened","rowDataUpdated","pinnedRowDataChanged","pinnedRowsChanged","rangeSelectionChanged","cellSelectionChanged","chartCreated","chartRangeSelectionChanged","chartOptionsChanged","chartDestroyed","toolPanelVisibleChanged","toolPanelSizeChanged","modelUpdated","cutStart","cutEnd","pasteStart","pasteEnd","fillStart","fillEnd","cellSelectionDeleteStart","cellSelectionDeleteEnd","rangeDeleteStart","rangeDeleteEnd","undoStarted","undoEnded","redoStarted","redoEnded","cellClicked","cellDoubleClicked","cellMouseDown","cellContextMenu","cellValueChanged","cellEditRequest","rowValueChanged","headerFocused","cellFocused","rowSelected","selectionChanged","tooltipShow","tooltipHide","cellKeyDown","cellMouseOver","cellMouseOut","filterChanged","filterModified","filterOpened","advancedFilterBuilderVisibleChanged","sortChanged","virtualRowRemoved","rowClicked","rowDoubleClicked","gridReady","gridPreDestroyed","gridSizeChanged","viewportChanged","firstDataRendered","dragStarted","dragStopped","dragCancelled","rowEditingStarted","rowEditingStopped","cellEditingStarted","cellEditingStopped","bodyScroll","bodyScrollEnd","paginationChanged","componentStateChanged","storeRefreshed","stateUpdated","columnMenuVisibleChanged","contextMenuVisibleChanged","rowDragEnter","rowDragMove","rowDragLeave","rowDragEnd","rowDragCancel","findChanged","rowResizeStarted","rowResizeEnded"],Fg=["scrollbarWidthChanged","keyShortcutChangedCellStart","keyShortcutChangedCellEnd","pinnedHeightChanged","cellFocusCleared","fullWidthRowFocused","checkboxChanged","heightScaleChanged","suppressMovableColumns","suppressMenuHide","suppressFieldDotNotation","columnPanelItemDragStart","columnPanelItemDragEnd","bodyHeightChanged","columnContainerWidthChanged","displayedColumnsWidthChanged","scrollVisibilityChanged","scrollGapChanged","columnHoverChanged","flashCells","paginationPixelOffsetChanged","displayedRowsChanged","leftPinnedWidthChanged","rightPinnedWidthChanged","rowContainerHeightChanged","headerHeightChanged","columnGroupHeaderHeightChanged","columnHeaderHeightChanged","gridStylesChanged","storeUpdated","filterDestroyed","rowDataUpdateStarted","rowCountReady","advancedFilterEnabledChanged","dataTypesInferred","fieldValueChanged","fieldPickerValueSelected","richSelectListRowSelected","sideBarUpdated","alignedGridScroll","alignedGridColumn","gridOptionsChanged","chartTitleEdit","recalculateRowBounds","stickyTopOffsetChanged","overlayExclusiveChanged","beforeRefreshModel","rowNodeDataChanged"],xg=()=>[...Rg,...Fg],Dg=["overlayLoadingTemplate","overlayNoRowsTemplate","gridId","quickFilterText","rowModelType","editType","domLayout","clipboardDelimiter","rowGroupPanelShow","multiSortKey","pivotColumnGroupTotals","pivotRowTotals","pivotPanelShow","fillHandleDirection","groupDisplayType","treeDataDisplayType","treeDataChildrenField","treeDataParentIdField","colResizeDefault","tooltipTrigger","serverSidePivotResultFieldSeparator","columnMenu","tooltipShowMode","grandTotalRow","themeCssLayer","findSearchValue","styleNonce"],Pg=["components","rowStyle","context","autoGroupColumnDef","localeText","icons","datasource","dragAndDropImageComponentParams","serverSideDatasource","viewportDatasource","groupRowRendererParams","aggFuncs","fullWidthCellRendererParams","defaultColGroupDef","defaultColDef","defaultCsvExportParams","defaultExcelExportParams","columnTypes","rowClassRules","detailCellRendererParams","loadingCellRendererParams","loadingOverlayComponentParams","noRowsOverlayComponentParams","popupParent","themeStyleContainer","statusBar","chartThemeOverrides","customChartThemes","chartToolPanelsDef","dataTypeDefinitions","advancedFilterParent","advancedFilterBuilderParams","initialState","autoSizeStrategy","selectionColumnDef","findOptions"],Eg=["sortingOrder","alignedGrids","rowData","columnDefs","excelStyles","pinnedTopRowData","pinnedBottomRowData","chartThemes","rowClass","paginationPageSizeSelector"],Tg=["rowHeight","detailRowHeight","rowBuffer","headerHeight","groupHeaderHeight","groupLockGroupColumns","floatingFiltersHeight","pivotHeaderHeight","pivotGroupHeaderHeight","groupDefaultExpanded","pivotDefaultExpanded","viewportRowModelPageSize","viewportRowModelBufferSize","autoSizePadding","maxBlocksInCache","maxConcurrentDatasourceRequests","tooltipShowDelay","tooltipHideDelay","cacheOverflowSize","paginationPageSize","cacheBlockSize","infiniteInitialRowCount","serverSideInitialRowCount","scrollbarWidth","asyncTransactionWaitMillis","blockLoadDebounceMillis","keepDetailRowsCount","undoRedoCellEditingLimit","cellFlashDuration","cellFadeDuration","tabIndex","pivotMaxGeneratedColumns"],kg=["theme","rowSelection"],Ig=["cellSelection","sideBar","rowNumbers","suppressGroupChangesColumnVisibility","groupAggFiltering","suppressStickyTotalRow","groupHideParentOfSingleChild","enableRowPinning"],Lg=["loadThemeGoogleFonts","suppressMakeColumnVisibleAfterUnGroup","suppressRowClickSelection","suppressCellFocus","suppressHeaderFocus","suppressHorizontalScroll","groupSelectsChildren","alwaysShowHorizontalScroll","alwaysShowVerticalScroll","debug","enableBrowserTooltips","enableCellExpressions","groupSuppressBlankHeader","suppressMenuHide","suppressRowDeselection","unSortIcon","suppressMultiSort","alwaysMultiSort","singleClickEdit","suppressLoadingOverlay","suppressNoRowsOverlay","suppressAutoSize","skipHeaderOnAutoSize","suppressColumnMoveAnimation","suppressMoveWhenColumnDragging","suppressMovableColumns","suppressFieldDotNotation","enableRangeSelection","enableRangeHandle","enableFillHandle","suppressClearOnFillReduction","deltaSort","suppressTouch","allowContextMenuWithControlKey","suppressContextMenu","suppressDragLeaveHidesColumns","suppressRowGroupHidesColumns","suppressMiddleClickScrolls","suppressPreventDefaultOnMouseWheel","suppressCopyRowsToClipboard","copyHeadersToClipboard","copyGroupHeadersToClipboard","pivotMode","suppressAggFuncInHeader","suppressColumnVirtualisation","alwaysAggregateAtRootLevel","suppressFocusAfterRefresh","functionsReadOnly","animateRows","groupSelectsFiltered","groupRemoveSingleChildren","groupRemoveLowestSingleChildren","enableRtl","enableCellSpan","suppressClickEdit","rowDragEntireRow","rowDragManaged","suppressRowDrag","suppressMoveWhenRowDragging","rowDragMultiRow","enableGroupEdit","embedFullWidthRows","suppressPaginationPanel","groupHideOpenParents","groupAllowUnbalanced","pagination","paginationAutoPageSize","suppressScrollOnNewData","suppressScrollWhenPopupsAreOpen","purgeClosedRowNodes","cacheQuickFilter","includeHiddenColumnsInQuickFilter","ensureDomOrder","accentedSort","suppressChangeDetection","valueCache","valueCacheNeverExpires","aggregateOnlyChangedColumns","suppressAnimationFrame","suppressExcelExport","suppressCsvExport","includeHiddenColumnsInAdvancedFilter","suppressMultiRangeSelection","enterNavigatesVerticallyAfterEdit","enterNavigatesVertically","suppressPropertyNamesCheck","rowMultiSelectWithClick","suppressRowHoverHighlight","suppressRowTransform","suppressClipboardPaste","suppressLastEmptyLineOnPaste","enableCharts","suppressMaintainUnsortedOrder","enableCellTextSelection","suppressBrowserResizeObserver","suppressMaxRenderedRowRestriction","excludeChildrenWhenTreeDataFiltering","tooltipMouseTrack","tooltipInteraction","keepDetailRows","paginateChildRows","preventDefaultOnContextMenu","undoRedoCellEditing","allowDragFromColumnsToolPanel","pivotSuppressAutoColumn","suppressExpandablePivotGroups","debounceVerticalScrollbar","detailRowAutoHeight","serverSideSortAllLevels","serverSideEnableClientSideSort","serverSideOnlyRefreshFilteredGroups","suppressAggFilteredOnly","showOpenedGroup","suppressClipboardApi","suppressModelUpdateAfterUpdateTransaction","stopEditingWhenCellsLoseFocus","groupMaintainOrder","columnHoverHighlight","readOnlyEdit","suppressRowVirtualisation","enableCellEditingOnBackspace","resetRowDataOnUpdate","removePivotHeaderRowWhenSingleValueColumn","suppressCopySingleCellRanges","suppressGroupRowsSticky","suppressCutToClipboard","rowGroupPanelSuppressSort","allowShowChangeAfterFilter","enableAdvancedFilter","masterDetail","treeData","reactiveCustomComponents","applyQuickFilterBeforePivotOrAgg","suppressServerSideFullWidthLoadingRow","suppressAdvancedFilterEval","loading","maintainColumnOrder","enableStrictPivotColumnOrder","suppressSetFilterByDefault"],Mg=["doesExternalFilterPass","processPivotResultColDef","processPivotResultColGroupDef","getBusinessKeyForNode","isRowSelectable","rowDragText","groupRowRenderer","dragAndDropImageComponent","fullWidthCellRenderer","loadingCellRenderer","loadingOverlayComponent","noRowsOverlayComponent","detailCellRenderer","quickFilterParser","quickFilterMatcher","getLocaleText","isExternalFilterPresent","getRowHeight","getRowClass","getRowStyle","getContextMenuItems","getMainMenuItems","processRowPostCreate","processCellForClipboard","getGroupRowAgg","isFullWidthRow","sendToClipboard","focusGridInnerElement","navigateToNextHeader","tabToNextHeader","navigateToNextCell","tabToNextCell","processCellFromClipboard","getDocument","postProcessPopup","getChildCount","getDataPath","isRowMaster","postSortRows","processHeaderForClipboard","processUnpinnedColumns","processGroupHeaderForClipboard","paginationNumberFormatter","processDataFromClipboard","getServerSideGroupKey","isServerSideGroup","createChartContainer","getChartToolbarItems","fillOperation","isApplyServerSideTransaction","getServerSideGroupLevelParams","isServerSideGroupOpenByDefault","isGroupOpenByDefault","initialGroupOrderComparator","loadingCellRendererSelector","getRowId","chartMenuItems","groupTotalRow","alwaysPassFilter","isRowPinnable","isRowPinned"],Ys=()=>[...Eg,...Pg,...Dg,...Tg,...Mg,...Lg,...Ig,...kg],Ag={alignedGrids:"AlignedGrids",allowContextMenuWithControlKey:"ContextMenu",autoSizeStrategy:"ColumnAutoSize",cellSelection:"CellSelection",columnHoverHighlight:"ColumnHover",datasource:"InfiniteRowModel",doesExternalFilterPass:"ExternalFilter",editType:"EditCore",enableAdvancedFilter:"AdvancedFilter",enableCellSpan:"CellSpan",enableCharts:"IntegratedCharts",enableRangeSelection:"CellSelection",enableRowPinning:"PinnedRow",findSearchValue:"Find",getContextMenuItems:"ContextMenu",getLocaleText:"Locale",getMainMenuItems:"ColumnMenu",getRowClass:"RowStyle",getRowStyle:"RowStyle",groupTotalRow:"SharedRowGrouping",grandTotalRow:"SharedRowGrouping",initialState:"GridState",isExternalFilterPresent:"ExternalFilter",isRowPinnable:"PinnedRow",localeText:"Locale",masterDetail:"SharedMasterDetail",pagination:"Pagination",pinnedBottomRowData:"PinnedRow",pinnedTopRowData:"PinnedRow",pivotMode:"SharedPivot",pivotPanelShow:"RowGroupingPanel",quickFilterText:"QuickFilter",rowClass:"RowStyle",rowClassRules:"RowStyle",rowData:"ClientSideRowModel",rowDragManaged:"RowDrag",rowGroupPanelShow:"RowGroupingPanel",rowNumbers:"RowNumbers",rowSelection:"SharedRowSelection",rowStyle:"RowStyle",serverSideDatasource:"ServerSideRowModel",sideBar:"SideBar",statusBar:"StatusBar",treeData:"SharedTreeData",undoRedoCellEditing:"UndoRedoEdit",valueCache:"ValueCache",viewportDatasource:"ViewportRowModel"},Hg=0,Gg=0,Bg=class extends v{constructor(){super(...arguments),this.beanName="gos",this.domDataKey="__AG_"+Math.random().toString(),this.gridInstanceId=Gg++,this.gridReadyFired=!1,this.queueEvents=[],this.propEventSvc=new st,this.globalEventHandlerFactory=e=>(t,o)=>{if(!this.isAlive())return;const s=Xn.has(t);if(s&&!e||!s&&e)return;const i=(n,r)=>{const l=this.gridOptions[_i(n)];typeof l=="function"&&this.beans.frameworkOverrides.wrapOutgoing(()=>l(r))};if(this.gridReadyFired)i(t,o);else if(t==="gridReady"){i(t,o),this.gridReadyFired=!0;for(const n of this.queueEvents)i(n.eventName,n.event);this.queueEvents=[]}else this.queueEvents.push({eventName:t,event:o})}}wireBeans(e){this.gridOptions=e.gridOptions,this.validation=e.validation,this.api=e.gridApi,this.gridId=e.context.getGridId()}get gridOptionsContext(){return this.gridOptions.context}postConstruct(){this.validateGridOptions(this.gridOptions),this.eventSvc.addGlobalListener(this.globalEventHandlerFactory().bind(this),!0),this.eventSvc.addGlobalListener(this.globalEventHandlerFactory(!0).bind(this),!1),this.propEventSvc.setFrameworkOverrides(this.beans.frameworkOverrides),this.addManagedEventListeners({gridOptionsChanged:({options:e})=>{this.updateGridOptions({options:e,force:!0,source:"gridOptionsUpdated"})}})}destroy(){super.destroy(),this.queueEvents=[]}get(e){return this.gridOptions[e]??mg[e]}getCallback(e){return this.mergeGridCommonParams(this.gridOptions[e])}exists(e){return k(this.gridOptions[e])}mergeGridCommonParams(e){return e&&(o=>e(this.addGridCommonParams(o)))}updateGridOptions({options:e,force:t,source:o="api"}){const s={id:Hg++,properties:[]},i=[],{gridOptions:n,validation:r}=this;for(const l of Object.keys(e)){const a=e[l];r==null||r.warnOnInitialPropertyUpdate(o,l);const d=t||typeof a=="object"&&o==="api",c=n[l];if(d||c!==a){n[l]=a;const h={type:l,currentValue:a,previousValue:c,changeSet:s,source:o};i.push(h)}}this.validateGridOptions(this.gridOptions),s.properties=i.map(l=>l.type),i.forEach(l=>{Xe(this,`Updated property ${l.type} from`,l.previousValue," to ",l.currentValue),this.propEventSvc.dispatchEvent(l)})}addPropertyEventListener(e,t){this.propEventSvc.addEventListener(e,t)}removePropertyEventListener(e,t){this.propEventSvc.removeEventListener(e,t)}getDomDataKey(){return this.domDataKey}addGridCommonParams(e){return e.api=this.api,e.context=this.gridOptionsContext,e}validateOptions(e,t){for(const o of Object.keys(e)){const s=e[o];if(s==null||s===!1)continue;let i=t[o];typeof i=="function"&&(i=i(e,this.gridOptions,this.beans)),i&&this.assertModuleRegistered(i,o)}}validateGridOptions(e){var t;this.validateOptions(e,Ag),(t=this.validation)==null||t.processGridOptions(e)}validateColDef(e,t,o){var s,i;(o||!((s=this.beans.dataTypeSvc)!=null&&s.isColPendingInference(t)))&&(this.validateOptions(e,Sg),(i=this.validation)==null||i.validateColDef(e))}assertModuleRegistered(e,t){const o=Array.isArray(e)?e.some(s=>this.isModuleRegistered(s)):this.isModuleRegistered(e);return o||K(200,{...this.getModuleErrorParams(),moduleName:e,reasonOrId:t}),o}getModuleErrorParams(){return{gridId:this.gridId,gridScoped:cn(),rowModelType:this.get("rowModelType"),isUmd:Ra()}}isModuleRegistered(e){return To(e,this.gridId,this.get("rowModelType"))}};function Jn(e){const t={"aria-hidden":"true"};return{tag:"div",cls:"ag-cell-label-container",role:"presentation",children:[{tag:"span",ref:"eMenu",cls:"ag-header-icon ag-header-cell-menu-button",attrs:t},{tag:"span",ref:"eFilterButton",cls:"ag-header-icon ag-header-cell-filter-button",attrs:t},{tag:"div",ref:"eLabel",cls:"ag-header-cell-label",role:"presentation",children:[{tag:"span",ref:"eText",cls:"ag-header-cell-text"},{tag:"span",ref:"eFilter",cls:"ag-header-icon ag-header-label-icon ag-filter-icon",attrs:t},e?{tag:"ag-sort-indicator",ref:"eSortIndicator"}:null]}]}}var Og=Jn(!0),Wg=Jn(!1),Vg=class extends N{constructor(){super(...arguments),this.eFilter=x,this.eFilterButton=x,this.eSortIndicator=x,this.eMenu=x,this.eLabel=x,this.eText=x,this.eSortOrder=x,this.eSortAsc=x,this.eSortDesc=x,this.eSortMixed=x,this.eSortNone=x,this.isLoadingInnerComponent=!1}refresh(e){var o,s,i;const t=this.params;if(this.params=e,this.workOutTemplate(e,!!((o=this.beans)!=null&&o.sortSvc))!=this.currentTemplate||this.workOutShowMenu()!=this.currentShowMenu||e.enableSorting!=this.currentSort||this.currentSuppressMenuHide!=null&&this.shouldSuppressMenuHide()!=this.currentSuppressMenuHide||t.enableFilterButton!=e.enableFilterButton||t.enableFilterIcon!=e.enableFilterIcon)return!1;if(this.innerHeaderComponent){const n={...e};Y(n,e.innerHeaderComponentParams),(i=(s=this.innerHeaderComponent).refresh)==null||i.call(s,n)}else this.setDisplayName(e);return!0}workOutTemplate(e,t){const o=e.template;return o?o!=null&&o.trim?o.trim():o:t?Og:Wg}init(e){this.params=e;const{sortSvc:t,touchSvc:o,rowNumbersSvc:s,userCompFactory:i}=this.beans,n=t==null?void 0:t.getSortIndicatorSelector();this.currentTemplate=this.workOutTemplate(e,!!n),this.setTemplate(this.currentTemplate,n?[n]:void 0),o==null||o.setupForHeader(this),this.setMenu(),this.setupSort(),s==null||s.setupForHeader(this),this.setupFilterIcon(),this.setupFilterButton(),this.workOutInnerHeaderComponent(i,e),this.setDisplayName(e)}workOutInnerHeaderComponent(e,t){const o=ra(e,t,t);o&&(this.isLoadingInnerComponent=!0,o.newAgStackInstance().then(s=>{this.isLoadingInnerComponent=!1,s&&(this.isAlive()?(this.innerHeaderComponent=s,this.eText&&this.eText.appendChild(s.getGui())):this.destroyBean(s))}))}setDisplayName(e){const{displayName:t}=e,o=this.currentDisplayName;this.currentDisplayName=t,!(!this.eText||o===t||this.innerHeaderComponent||this.isLoadingInnerComponent)&&(this.eText.textContent=zt(t))}addInIcon(e,t,o){const s=Zt(e,this.beans,o);s&&t.appendChild(s)}workOutShowMenu(){var e;return this.params.enableMenu&&!!((e=this.beans.menuSvc)!=null&&e.isHeaderMenuButtonEnabled())}shouldSuppressMenuHide(){var e;return!!((e=this.beans.menuSvc)!=null&&e.isHeaderMenuButtonAlwaysShowEnabled())}setMenu(){if(!this.eMenu)return;if(this.currentShowMenu=this.workOutShowMenu(),!this.currentShowMenu){Ce(this.eMenu),this.eMenu=void 0;return}const{gos:e,eMenu:t,params:o}=this,s=Et(e);this.addInIcon(s?"menu":"menuAlt",t,o.column),t.classList.toggle("ag-header-menu-icon",!s);const i=this.shouldSuppressMenuHide();this.currentSuppressMenuHide=i,this.addManagedElementListeners(t,{click:()=>this.showColumnMenu(this.eMenu)}),this.toggleMenuAlwaysShow(i)}toggleMenuAlwaysShow(e){var t;(t=this.eMenu)==null||t.classList.toggle("ag-header-menu-always-show",e)}showColumnMenu(e){const{currentSuppressMenuHide:t,params:o}=this;t||this.toggleMenuAlwaysShow(!0),o.showColumnMenu(e,()=>{t||this.toggleMenuAlwaysShow(!1)})}onMenuKeyboardShortcut(e){var a;const{params:t,gos:o,beans:s,eMenu:i,eFilterButton:n}=this,r=t.column,l=Et(o);if(e&&!l){if((a=s.menuSvc)!=null&&a.isFilterMenuInHeaderEnabled(r))return t.showFilter(n??i??this.getGui()),!0}else if(t.enableMenu)return this.showColumnMenu(i??n??this.getGui()),!0;return!1}setupSort(){const{sortSvc:e}=this.beans;if(!e)return;const{enableSorting:t,column:o}=this.params;if(this.currentSort=t,!this.eSortIndicator){this.eSortIndicator=this.createBean(e.createSortIndicator(!0));const{eSortIndicator:s,eSortOrder:i,eSortAsc:n,eSortDesc:r,eSortMixed:l,eSortNone:a}=this;s.attachCustomElements(i,n,r,l,a)}this.eSortIndicator.setupSort(o),this.currentSort&&e.setupHeader(this,o,this.eLabel)}setupFilterIcon(){const{eFilter:e,params:t}=this;if(!e)return;const o=()=>{const s=t.column.isFilterActive();W(e,s,{skipAriaHidden:!0})};this.configureFilter(t.enableFilterIcon,e,o,"filterActive")}setupFilterButton(){const{eFilterButton:e,params:t}=this;if(!e)return;this.configureFilter(t.enableFilterButton,e,this.onFilterChangedButton.bind(this),"filter")?this.addManagedElementListeners(e,{click:()=>t.showFilter(e)}):this.eFilterButton=void 0}configureFilter(e,t,o,s){if(!e)return Ce(t),!1;const i=this.params.column;return this.addInIcon(s,t,i),this.addManagedListeners(i,{filterChanged:o}),o(),!0}onFilterChangedButton(){const e=this.params.column.isFilterActive();this.eFilterButton.classList.toggle("ag-filter-active",e)}getAnchorElementForMenu(e){const{eFilterButton:t,eMenu:o}=this;return e?t??o??this.getGui():o??t??this.getGui()}destroy(){super.destroy(),this.innerHeaderComponent&&(this.destroyBean(this.innerHeaderComponent),this.innerHeaderComponent=void 0)}},Ng={tag:"div",cls:"ag-header-group-cell-label",role:"presentation",children:[{tag:"span",ref:"agLabel",cls:"ag-header-group-text",role:"presentation"},{tag:"span",ref:"agOpened",cls:"ag-header-icon ag-header-expand-icon ag-header-expand-icon-expanded"},{tag:"span",ref:"agClosed",cls:"ag-header-icon ag-header-expand-icon ag-header-expand-icon-collapsed"}]},zg=class extends N{constructor(){super(Ng),this.agOpened=x,this.agClosed=x,this.agLabel=x,this.isLoadingInnerComponent=!1}init(e){const{userCompFactory:t,touchSvc:o}=this.beans;this.params=e,this.checkWarnings(),this.workOutInnerHeaderGroupComponent(t,e),this.setupLabel(e),this.addGroupExpandIcon(e),this.setupExpandIcons(),o==null||o.setupForHeaderGroup(this)}checkWarnings(){this.params.template&&I(89)}workOutInnerHeaderGroupComponent(e,t){const o=aa(e,t,t);o&&(this.isLoadingInnerComponent=!0,o.newAgStackInstance().then(s=>{this.isLoadingInnerComponent=!1,s&&(this.isAlive()?(this.innerHeaderGroupComponent=s,this.agLabel.appendChild(s.getGui())):this.destroyBean(s))}))}setupExpandIcons(){const{agOpened:e,agClosed:t,params:{columnGroup:o},beans:s}=this;this.addInIcon("columnGroupOpened",e),this.addInIcon("columnGroupClosed",t);const i=a=>{if(ve(a))return;const d=!o.isExpanded();s.colGroupSvc.setColumnGroupOpened(o.getProvidedColumnGroup(),d,"uiColumnExpanded")};this.addTouchAndClickListeners(s,t,i),this.addTouchAndClickListeners(s,e,i);const n=a=>{Tt(a)};this.addManagedElementListeners(t,{dblclick:n}),this.addManagedElementListeners(e,{dblclick:n}),this.addManagedElementListeners(this.getGui(),{dblclick:i}),this.updateIconVisibility();const r=o.getProvidedColumnGroup(),l=this.updateIconVisibility.bind(this);this.addManagedListeners(r,{expandedChanged:l,expandableChanged:l})}addTouchAndClickListeners(e,t,o){var s;(s=e.touchSvc)==null||s.setupForHeaderGroupElement(this,t,o),this.addManagedElementListeners(t,{click:o})}updateIconVisibility(){const{agOpened:e,agClosed:t,params:{columnGroup:o}}=this;if(o.isExpandable()){const s=o.isExpanded();W(e,s),W(t,!s)}else W(e,!1),W(t,!1)}addInIcon(e,t){const o=Zt(e,this.beans,null);o&&t.appendChild(o)}addGroupExpandIcon(e){if(!e.columnGroup.isExpandable()){const{agOpened:t,agClosed:o}=this;W(t,!1),W(o,!1);return}}setupLabel(e){var i;const{displayName:t,columnGroup:o}=e,s=this.innerHeaderGroupComponent||this.isLoadingInnerComponent;k(t)&&!s&&(this.agLabel.textContent=zt(t)),this.toggleCss("ag-sticky-label",!((i=o.getColGroupDef())!=null&&i.suppressStickyLabel))}destroy(){super.destroy(),this.innerHeaderGroupComponent&&(this.destroyBean(this.innerHeaderGroupComponent),this.innerHeaderGroupComponent=void 0)}},_g={moduleName:"ColumnHeaderComp",version:G,userComponents:{agColumnHeader:Vg},icons:{menu:"menu",menuAlt:"menu-alt"}},Ug={moduleName:"ColumnGroupHeaderComp",version:G,userComponents:{agColumnGroupHeader:zg},icons:{columnGroupOpened:"expanded",columnGroupClosed:"contracted"}},Kg=class extends v{constructor(){super(...arguments),this.beanName="animationFrameSvc",this.p1={list:[],sorted:!1},this.p2={list:[],sorted:!1},this.f1={list:[],sorted:!1},this.destroyTasks=[],this.ticking=!1,this.scrollGoingDown=!0,this.lastScrollTop=0,this.taskCount=0}setScrollTop(e){this.scrollGoingDown=e>=this.lastScrollTop,e===0&&(this.scrollGoingDown=!0),this.lastScrollTop=e}postConstruct(){this.active=!this.gos.get("suppressAnimationFrame"),this.batchFrameworkComps=this.beans.frameworkOverrides.batchFrameworkComps}verify(){this.active===!1&&I(92)}createTask(e,t,o,s){this.verify();let i=o;s&&this.batchFrameworkComps&&(i="f1");const n={task:e,index:t,createOrder:++this.taskCount};this.addTaskToList(this[i],n),this.schedule()}addTaskToList(e,t){e.list.push(t),e.sorted=!1}sortTaskList(e){if(e.sorted)return;const t=this.scrollGoingDown?1:-1;e.list.sort((o,s)=>o.index!==s.index?t*(s.index-o.index):s.createOrder-o.createOrder),e.sorted=!0}addDestroyTask(e){this.verify(),this.destroyTasks.push(e),this.schedule()}executeFrame(e){const{p1:t,p2:o,f1:s,destroyTasks:i,beans:n}=this,{ctrlsSvc:r,frameworkOverrides:l}=n,a=t.list,d=o.list,c=s.list,h=Date.now();let u=0;const g=e<=0,p=r.getScrollFeature();for(;g||u{for(;(g||u{};else if(i.length)C=i.pop();else break;C()}u=Date.now()-h}a.length||d.length||c.length||i.length?this.requestFrame():this.ticking=!1}flushAllFrames(){this.active&&this.executeFrame(-1)}schedule(){this.active&&(this.ticking||(this.ticking=!0,this.requestFrame()))}requestFrame(){const e=this.executeFrame.bind(this,60);be(this.beans,e)}isQueueEmpty(){return!this.ticking}},jg={moduleName:"AnimationFrame",version:G,beans:[Kg]},$g=class extends v{constructor(){super(...arguments),this.beanName="touchSvc"}mockBodyContextMenu(e,t){this.mockContextMenu(e,e.eBodyViewport,t)}mockHeaderContextMenu(e,t){this.mockContextMenu(e,e.eGui,t)}mockRowContextMenu(e){if(!Ze())return;const t=(o,s,i)=>{var l;const{rowCtrl:n,cellCtrl:r}=e.getControlsForEventTarget((i==null?void 0:i.target)??null);r!=null&&r.column&&r.dispatchCellContextMenuEvent(i??null),(l=this.beans.contextMenuSvc)==null||l.handleContextMenuMouseEvent(void 0,i,n,r)};this.mockContextMenu(e,e.element,t)}handleCellDoubleClick(e,t){return(()=>{if(!Ze()||Ki("dblclick"))return!1;const s=Date.now(),i=s-e.lastIPadMouseClickEvent<200;return e.lastIPadMouseClickEvent=s,i})()?(e.onCellDoubleClicked(t),t.preventDefault(),!0):!1}setupForHeader(e){const{gos:t,sortSvc:o,menuSvc:s}=this.beans;if(t.get("suppressTouch"))return;const{params:i,eMenu:n,eFilterButton:r}=e,l=new Te(e.getGui(),!0),a=e.shouldSuppressMenuHide(),d=a&&k(n)&&i.enableMenu,c=d?new Te(n,!0):l;if(i.enableMenu||s!=null&&s.isHeaderContextMenuEnabled(i.column)){const h=d?"tap":"longTap",u=g=>i.showColumnMenuAfterMouseClick(g.touchStart);e.addManagedListeners(c,{[h]:u})}if(i.enableSorting){const h=u=>{const g=u.touchStart.target;a&&(n!=null&&n.contains(g)||r!=null&&r.contains(g))||o==null||o.progressSort(i.column,!1,"uiColumnSorted")};e.addManagedListeners(l,{tap:h})}if(i.enableFilterButton&&r){const h=new Te(r,!0);e.addManagedListeners(h,{tap:()=>i.showFilter(r)}),e.addDestroyFunc(()=>h.destroy())}e.addDestroyFunc(()=>l.destroy()),d&&e.addDestroyFunc(()=>c.destroy())}setupForHeaderGroup(e){var o;const t=e.params;if((o=this.beans.menuSvc)!=null&&o.isHeaderContextMenuEnabled(t.columnGroup.getProvidedColumnGroup())){const s=new Te(t.eGridHeader,!0),i=n=>t.showColumnMenuAfterMouseClick(n.touchStart);e.addManagedListeners(s,{longTap:i}),e.addDestroyFunc(()=>s.destroy())}}setupForHeaderGroupElement(e,t,o){const s=new Te(t,!0);e.addManagedListeners(s,{tap:o}),e.addDestroyFunc(()=>s.destroy())}mockContextMenu(e,t,o){if(!Ze())return;const s=new Te(t),i=n=>{tt(this.gos,n.touchEvent)&&o(void 0,n.touchStart,n.touchEvent)};e.addManagedListeners(s,{longTap:i}),e.addDestroyFunc(()=>s.destroy())}},qg={moduleName:"Touch",version:G,beans:[$g]},Zg=class extends v{constructor(){super(...arguments),this.beanName="cellNavigation"}wireBeans(e){this.rowSpanSvc=e.rowSpanSvc}getNextCellToFocus(e,t,o=!1){return o?this.getNextCellToFocusWithCtrlPressed(e,t):this.getNextCellToFocusWithoutCtrlPressed(e,t)}getNextCellToFocusWithCtrlPressed(e,t){const o=e===m.UP,s=e===m.DOWN,i=e===m.LEFT;let n,r;const{pageBounds:l,gos:a,visibleCols:d}=this.beans;if(o||s)r=o?l.getFirstRow():l.getLastRow(),n=t.column;else{const c=a.get("enableRtl");r=t.rowIndex,n=(i!==c?d.allCols:[...d.allCols].reverse()).find(u=>this.isCellGoodToFocusOn({rowIndex:r,rowPinned:null,column:u}))}return n?{rowIndex:r,rowPinned:null,column:n}:null}getNextCellToFocusWithoutCtrlPressed(e,t){let o=t,s=!1;for(;!s;){switch(e){case m.UP:o=this.getCellAbove(o);break;case m.DOWN:o=this.getCellBelow(o);break;case m.RIGHT:o=this.gos.get("enableRtl")?this.getCellToLeft(o):this.getCellToRight(o);break;case m.LEFT:o=this.gos.get("enableRtl")?this.getCellToRight(o):this.getCellToLeft(o);break;default:o=null,I(8,{key:e});break}o?s=this.isCellGoodToFocusOn(o):s=!0}return o}isCellGoodToFocusOn(e){const t=e.column;let o;const{pinnedRowModel:s,rowModel:i}=this.beans;switch(e.rowPinned){case"top":o=s==null?void 0:s.getPinnedTopRow(e.rowIndex);break;case"bottom":o=s==null?void 0:s.getPinnedBottomRow(e.rowIndex);break;default:o=i.getRow(e.rowIndex);break}return o?!this.isSuppressNavigable(t,o):!1}getCellToLeft(e){if(!e)return null;const t=this.beans.visibleCols.getColBefore(e.column);return t?{rowIndex:e.rowIndex,column:t,rowPinned:e.rowPinned}:null}getCellToRight(e){if(!e)return null;const t=this.beans.visibleCols.getColAfter(e.column);return t?{rowIndex:e.rowIndex,column:t,rowPinned:e.rowPinned}:null}getCellBelow(e){var s;if(!e)return null;const t=((s=this.rowSpanSvc)==null?void 0:s.getCellEnd(e))??e,o=xs(this.beans,t);return o?{rowIndex:o.rowIndex,column:e.column,rowPinned:o.rowPinned}:null}getCellAbove(e){var s;if(!e)return null;const t=((s=this.rowSpanSvc)==null?void 0:s.getCellStart(e))??e,o=Ot(this.beans,{rowIndex:t.rowIndex,rowPinned:t.rowPinned});return o?{rowIndex:o.rowIndex,column:e.column,rowPinned:o.rowPinned}:null}getNextTabbedCell(e,t){return t?this.getNextTabbedCellBackwards(e):this.getNextTabbedCellForwards(e)}getNextTabbedCellForwards(e){const{visibleCols:t,pagination:o}=this.beans,s=t.allCols;let i=e.rowIndex,n=e.rowPinned,r=t.getColAfter(e.column);if(!r){r=s[0];const l=xs(this.beans,e);if(V(l)||!l.rowPinned&&!((o==null?void 0:o.isRowInPage(l.rowIndex))??!0))return null;i=l?l.rowIndex:null,n=l?l.rowPinned:null}return{rowIndex:i,column:r,rowPinned:n}}getNextTabbedCellBackwards(e){const{beans:t}=this,{visibleCols:o,pagination:s}=t,i=o.allCols;let n=e.rowIndex,r=e.rowPinned,l=o.getColBefore(e.column);if(!l){l=H(i);const a=Ot(t,{rowIndex:e.rowIndex,rowPinned:e.rowPinned});if(V(a)||!a.rowPinned&&!((s==null?void 0:s.isRowInPage(a.rowIndex))??!0))return null;n=a?a.rowIndex:null,r=a?a.rowPinned:null}return{rowIndex:n,column:l,rowPinned:r}}isSuppressNavigable(e,t){const{suppressNavigable:o}=e.colDef;if(typeof o=="boolean")return o;if(typeof o=="function"){const s=e.createColumnFunctionCallbackParams(t);return o(s)}return!1}};function Yg(e){return e.focusSvc.getFocusedCell()}function Qg(e){return e.focusSvc.clearFocusedCell()}function Xg(e,t,o,s){e.focusSvc.setFocusedCell({rowIndex:t,column:o,rowPinned:s,forceBrowserFocus:!0})}function Jg(e,t){var o;return((o=e.navigation)==null?void 0:o.tabToNextCell(!1,t))??!1}function ep(e,t){var o;return((o=e.navigation)==null?void 0:o.tabToNextCell(!0,t))??!1}function tp(e,t,o=!1){var i;const s=(i=e.headerNavigation)==null?void 0:i.getHeaderPositionForColumn(t,o);s&&e.focusSvc.focusHeaderPosition({headerPosition:s})}var op=class extends v{constructor(){super(),this.beanName="navigation",this.onPageDown=fs(this.onPageDown,100),this.onPageUp=fs(this.onPageUp,100)}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>{this.gridBodyCon=e.gridBodyCtrl})}handlePageScrollingKey(e,t=!1){const o=e.key,s=e.altKey,i=e.ctrlKey||e.metaKey,n=!!this.beans.rangeSvc&&e.shiftKey,r=Ya(this.gos,e);let l=!1;switch(o){case m.PAGE_HOME:case m.PAGE_END:!i&&!s&&(this.onHomeOrEndKey(o),l=!0);break;case m.LEFT:case m.RIGHT:case m.UP:case m.DOWN:if(!r)return!1;i&&!s&&!n&&(this.onCtrlUpDownLeftRight(o,r),l=!0);break;case m.PAGE_DOWN:case m.PAGE_UP:!i&&!s&&(l=this.handlePageUpDown(o,r,t));break}return l&&e.preventDefault(),l}handlePageUpDown(e,t,o){return o&&(t=this.beans.focusSvc.getFocusedCell()),t?(e===m.PAGE_UP?this.onPageUp(t):this.onPageDown(t),!0):!1}navigateTo(e){const{scrollIndex:t,scrollType:o,scrollColumn:s,focusIndex:i,focusColumn:n}=e,{scrollFeature:r}=this.gridBodyCon;k(s)&&!s.isPinned()&&r.ensureColumnVisible(s),k(t)&&r.ensureIndexVisible(t,o),e.isAsync||r.ensureIndexVisible(i);const{focusSvc:l,rangeSvc:a}=this.beans;l.setFocusedCell({rowIndex:i,column:n,rowPinned:null,forceBrowserFocus:!0}),a==null||a.setRangeToCell({rowIndex:i,rowPinned:null,column:n})}onPageDown(e){const t=this.beans,o=bo(t),s=this.getViewportHeight(),{pageBounds:i,rowModel:n,rowAutoHeight:r}=t,l=i.getPixelOffset(),a=o.top+s,d=n.getRowIndexAtPixel(a+l);r!=null&&r.active?this.navigateToNextPageWithAutoHeight(e,d):this.navigateToNextPage(e,d)}onPageUp(e){const t=this.beans,o=bo(t),{pageBounds:s,rowModel:i,rowAutoHeight:n}=t,r=s.getPixelOffset(),l=o.top,a=i.getRowIndexAtPixel(l+r);n!=null&&n.active?this.navigateToNextPageWithAutoHeight(e,a,!0):this.navigateToNextPage(e,a,!0)}navigateToNextPage(e,t,o=!1){const{pageBounds:s,rowModel:i}=this.beans,n=this.getViewportHeight(),r=s.getFirstRow(),l=s.getLastRow(),a=s.getPixelOffset(),d=i.getRow(e.rowIndex),c=o?(d==null?void 0:d.rowHeight)-n-a:n-a,h=(d==null?void 0:d.rowTop)+c;let u=i.getRowIndexAtPixel(h+a);if(u===e.rowIndex){const p=o?-1:1;t=u=e.rowIndex+p}let g;o?(g="bottom",ul&&(u=l),t>l&&(t=l)),this.isRowTallerThanView(i.getRow(u))&&(t=u,g="top"),this.navigateTo({scrollIndex:t,scrollType:g,scrollColumn:null,focusIndex:u,focusColumn:e.column})}navigateToNextPageWithAutoHeight(e,t,o=!1){this.navigateTo({scrollIndex:t,scrollType:o?"bottom":"top",scrollColumn:null,focusIndex:t,focusColumn:e.column}),setTimeout(()=>{const s=this.getNextFocusIndexForAutoHeight(e,o);this.navigateTo({scrollIndex:t,scrollType:o?"bottom":"top",scrollColumn:null,focusIndex:s,focusColumn:e.column,isAsync:!0})},50)}getNextFocusIndexForAutoHeight(e,t=!1){const o=t?-1:1,s=this.getViewportHeight(),{pageBounds:i,rowModel:n}=this.beans,r=i.getLastRow();let l=0,a=e.rowIndex;for(;a>=0&&a<=r;){const d=n.getRow(a);if(d){const c=d.rowHeight??0;if(l+c>s)break;l+=c}a+=o}return Math.max(0,Math.min(a,r))}getViewportHeight(){const e=this.beans,t=bo(e),o=this.beans.scrollVisibleSvc.getScrollbarWidth();let s=t.bottom-t.top;return e.ctrlsSvc.get("center").isHorizontalScrollShowing()&&(s-=o),s}isRowTallerThanView(e){if(!e)return!1;const t=e.rowHeight;return typeof t!="number"?!1:t>this.getViewportHeight()}onCtrlUpDownLeftRight(e,t){const o=this.beans.cellNavigation.getNextCellToFocus(e,t,!0),{rowIndex:s}=o,i=o.column;this.navigateTo({scrollIndex:s,scrollType:null,scrollColumn:i,focusIndex:s,focusColumn:i})}onHomeOrEndKey(e){const t=e===m.PAGE_HOME,{visibleCols:o,pageBounds:s,rowModel:i}=this.beans,n=o.allCols,r=t?s.getFirstRow():s.getLastRow(),l=i.getRow(r);if(!l)return;const a=(t?n:[...n].reverse()).find(d=>!d.isSuppressNavigable(l));a&&this.navigateTo({scrollIndex:r,scrollType:null,scrollColumn:a,focusIndex:r,focusColumn:a})}onTabKeyDown(e,t){const o=t.shiftKey,s=this.tabToNextCellCommon(e,o,t),i=this.beans,{ctrlsSvc:n,pageBounds:r,focusSvc:l,gos:a}=i;if(s!==!1){s?t.preventDefault():s===null&&n.get("gridCtrl").allowFocusForNextCoreContainer(o);return}if(o){const{rowIndex:d,rowPinned:c}=e.getRowPosition();(c?d===0:d===r.getFirstRow())&&(a.get("headerHeight")===0||Fe(i)?et(i,!0,!0):(t.preventDefault(),l.focusPreviousFromFirstCell(t)))}else e instanceof St&&e.focusCell(!0),(!o&&l.focusOverlay(!1)||et(i,o))&&t.preventDefault()}tabToNextCell(e,t){const o=this.beans,{focusSvc:s,rowRenderer:i}=o,n=s.getFocusedCell();if(!n)return!1;let r=ct(o,n);return!r&&(r=i.getRowByPosition(n),!r||!r.isFullWidth())?!1:!!this.tabToNextCellCommon(r,e,t)}tabToNextCellCommon(e,t,o){let s=e.editing;if(!s&&e instanceof St){const r=e.rowCtrl;r&&(s=r.editing)}let i;return s?this.gos.get("editType")==="fullRow"?i=this.moveToNextEditingRow(e,t,o):i=this.moveToNextEditingCell(e,t,o):i=this.moveToNextCellNotEditing(e,t,o),i===null?i:i||!!this.beans.focusSvc.focusedHeader}moveToNextEditingCell(e,t,o=null){var n;const s=e.cellPosition;e.eGui.focus(),e.stopEditing();const i=this.findNextCellToFocusOn(s,t,!0);return i===!1?null:i==null?!1:((n=this.beans.editSvc)==null||n.startEditing(i,null,!0,o),i.focusCell(!1),!0)}moveToNextEditingRow(e,t,o=null){const s=e.cellPosition,i=this.findNextCellToFocusOn(s,t,!0);if(i===!1)return null;if(i==null)return!1;const n=i.cellPosition,r=this.isCellEditable(s),l=this.isCellEditable(n),a=n&&s.rowIndex===n.rowIndex&&s.rowPinned===n.rowPinned,{editSvc:d,rowEditSvc:c}=this.beans;if(r&&(d==null||d.setFocusOutOnEditor(e)),!a){const h=e.rowCtrl;d==null||d.stopRowEditing(h);const u=i.rowCtrl;c==null||c.startEditing(u,void 0,void 0,o)}return l?(d==null||d.setFocusInOnEditor(i),i.focusCell()):i.focusCell(!0),!0}moveToNextCellNotEditing(e,t,o){const s=this.beans.visibleCols.allCols;let i;if(e instanceof Io){if(i={...e.getRowPosition(),column:t?s[0]:H(s)},this.gos.get("embedFullWidthRows")&&o){const r=e.findFullWidthInfoForEvent(o);r&&(i.column=r.column)}}else i=e.getFocusedCellPosition();const n=this.findNextCellToFocusOn(i,t,!1);if(n===!1)return null;if(n instanceof St)n.focusCell(!0);else if(n)return this.tryToFocusFullWidthRow(n,t);return k(n)}findNextCellToFocusOn(e,t,o){let s=e;const i=this.beans,{cellNavigation:n,gos:r,focusSvc:l,rowRenderer:a,rangeSvc:d}=i;for(;;){e!==s&&(e=s),t||(s=this.getLastCellOfColSpan(s)),s=n.getNextTabbedCell(s,t);const c=r.getCallback("tabToNextCell");if(k(c)){const p=c({backwards:t,editing:o,previousCellPosition:e,nextCellPosition:s||null});if(p===!0)s=e;else{if(p===!1)return!1;s={rowIndex:p.rowIndex,column:p.column,rowPinned:p.rowPinned}}}if(!s)return null;if(s.rowIndex<0){const g=ie(i);return l.focusHeaderPosition({headerPosition:{headerRowIndex:g+s.rowIndex,column:s.column},fromCell:!0}),null}const h=r.get("editType")==="fullRow";if(o&&!h&&!this.isCellEditable(s))continue;this.ensureCellVisible(s);const u=ct(i,s);if(!u){const g=a.getRowByPosition(s);if(!g||!g.isFullWidth()||o)continue;return{...g.getRowPosition(),column:s==null?void 0:s.column}}if(!n.isSuppressNavigable(u.column,u.rowNode))return u.setFocusedCellPosition(s),d==null||d.setRangeToCell(s),u}}isCellEditable(e){const t=this.lookupRowNodeForCell(e);return t?e.column.isCellEditable(t):!1}lookupRowNodeForCell({rowIndex:e,rowPinned:t}){const{pinnedRowModel:o,rowModel:s}=this.beans;return t==="top"?o==null?void 0:o.getPinnedTopRow(e):t==="bottom"?o==null?void 0:o.getPinnedBottomRow(e):s.getRow(e)}navigateToNextCell(e,t,o,s){let i=o,n=!1;const r=this.beans,{cellNavigation:l,focusSvc:a,gos:d}=r;for(;i&&(i===o||!this.isValidNavigateCell(i));)d.get("enableRtl")?t===m.LEFT&&(i=this.getLastCellOfColSpan(i)):t===m.RIGHT&&(i=this.getLastCellOfColSpan(i)),i=l.getNextCellToFocus(t,i),n=V(i);if(n&&e&&e.key===m.UP&&(i={rowIndex:-1,rowPinned:null,column:o.column}),s){const h=d.getCallback("navigateToNextCell");if(k(h)){const g=h({key:t,previousCellPosition:o,nextCellPosition:i||null,event:e});k(g)?i={rowPinned:g.rowPinned,rowIndex:g.rowIndex,column:g.column}:i=null}}if(!i)return;if(i.rowIndex<0){const h=ie(r);a.focusHeaderPosition({headerPosition:{headerRowIndex:h+i.rowIndex,column:o.column},event:e||void 0,fromCell:!0});return}const c=this.getNormalisedPosition(i);c?this.focusPosition(c):this.tryToFocusFullWidthRow(i)}getNormalisedPosition(e){var s;if(!!((s=this.beans.spannedRowRenderer)!=null&&s.getCellByPosition(e)))return e;this.ensureCellVisible(e);const o=ct(this.beans,e);return o?(e=o.getFocusedCellPosition(),this.ensureCellVisible(e),e):null}tryToFocusFullWidthRow(e,t){const{visibleCols:o,rowRenderer:s,focusSvc:i,eventSvc:n}=this.beans,r=o.allCols,l=s.getRowByPosition(e);if(!l||!l.isFullWidth())return!1;const a=i.getFocusedCell(),d={rowIndex:e.rowIndex,rowPinned:e.rowPinned,column:e.column||(t?H(r):r[0])};this.focusPosition(d);const c=t??(a!=null&&Ja(d,a));return n.dispatchEvent({type:"fullWidthRowFocused",rowIndex:d.rowIndex,rowPinned:d.rowPinned,column:d.column,isFullWidthCell:!0,fromBelow:c}),!0}focusPosition(e){const{focusSvc:t,rangeSvc:o}=this.beans;t.setFocusedCell({rowIndex:e.rowIndex,column:e.column,rowPinned:e.rowPinned,forceBrowserFocus:!0}),o==null||o.setRangeToCell(e)}isValidNavigateCell(e){return!!Cn(this.beans,e)}getLastCellOfColSpan(e){const t=ct(this.beans,e);if(!t)return e;const o=t.getColSpanningList();return o.length===1?e:{rowIndex:e.rowIndex,column:H(o),rowPinned:e.rowPinned}}ensureCellVisible(e){const t=Vi(this.gos),o=this.beans.rowModel.getRow(e.rowIndex),s=t&&(o==null?void 0:o.sticky),{scrollFeature:i}=this.gridBodyCon;!s&&V(e.rowPinned)&&i.ensureIndexVisible(e.rowIndex),e.column.isPinned()||i.ensureColumnVisible(e.column)}};function bo(e){return e.ctrlsSvc.getScrollFeature().getVScrollPosition()}var sp={moduleName:"KeyboardNavigation",version:G,beans:[op,Zg,hg],apiFunctions:{getFocusedCell:Yg,clearFocusedCell:Qg,setFocusedCell:Xg,setFocusedHeader:tp,tabToNextCell:Jg,tabToPreviousCell:ep}},ip=class extends v{constructor(){super(...arguments),this.beanName="pageBoundsListener"}postConstruct(){this.addManagedEventListeners({modelUpdated:this.onModelUpdated.bind(this),recalculateRowBounds:this.calculatePages.bind(this)}),this.onModelUpdated()}onModelUpdated(e){this.calculatePages(),this.eventSvc.dispatchEvent({type:"paginationChanged",animate:(e==null?void 0:e.animate)??!1,newData:(e==null?void 0:e.newData)??!1,newPage:(e==null?void 0:e.newPage)??!1,newPageSize:(e==null?void 0:e.newPageSize)??!1,keepRenderedRows:(e==null?void 0:e.keepRenderedRows)??!1})}calculatePages(){const{pageBounds:e,pagination:t,rowModel:o}=this.beans;t?t.calculatePages():e.calculateBounds(0,o.getRowCount()-1)}},np=class extends v{constructor(){super(...arguments),this.beanName="pageBounds",this.pixelOffset=0}getFirstRow(){var e;return((e=this.topRowBounds)==null?void 0:e.rowIndex)??-1}getLastRow(){var e;return((e=this.bottomRowBounds)==null?void 0:e.rowIndex)??-1}getCurrentPageHeight(){const{topRowBounds:e,bottomRowBounds:t}=this;return!e||!t?0:Math.max(t.rowTop+t.rowHeight-e.rowTop,0)}getCurrentPagePixelRange(){const{topRowBounds:e,bottomRowBounds:t}=this,o=(e==null?void 0:e.rowTop)??0,s=t?t.rowTop+t.rowHeight:0;return{pageFirstPixel:o,pageLastPixel:s}}calculateBounds(e,t){const{rowModel:o}=this.beans,s=o.getRowBounds(e);s&&(s.rowIndex=e),this.topRowBounds=s;const i=o.getRowBounds(t);i&&(i.rowIndex=t),this.bottomRowBounds=i,this.calculatePixelOffset()}getPixelOffset(){return this.pixelOffset}calculatePixelOffset(){var t;const e=((t=this.topRowBounds)==null?void 0:t.rowTop)??0;this.pixelOffset!==e&&(this.pixelOffset=e,this.eventSvc.dispatchEvent({type:"paginationPixelOffsetChanged"}))}},rp=".ag-pinned-left-floating-bottom,.ag-pinned-left-floating-top,.ag-pinned-right-floating-bottom,.ag-pinned-right-floating-top{min-width:0;overflow:hidden;position:relative}.ag-pinned-left-sticky-top,.ag-pinned-right-sticky-top{height:100%;overflow:hidden;position:relative}.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{height:100%;overflow:hidden;width:100%}.ag-pinned-left-header,.ag-pinned-right-header{display:inline-block;height:100%;overflow:hidden;position:relative}.ag-body-horizontal-scroll:not(.ag-scrollbar-invisible){.ag-horizontal-left-spacer:not(.ag-scroller-corner){border-right:var(--ag-pinned-column-border)}.ag-horizontal-right-spacer:not(.ag-scroller-corner){border-left:var(--ag-pinned-column-border)}}.ag-pinned-right-header{border-left:var(--ag-pinned-column-border)}.ag-pinned-left-header{border-right:var(--ag-pinned-column-border)}.ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left,.ag-cell-range-single-cell,.ag-cell-focus:not(.ag-cell-range-selected):focus-within){border-left:var(--ag-pinned-column-border)}.ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right,.ag-cell-range-single-cell,.ag-cell-focus:not(.ag-cell-range-selected):focus-within){border-right:var(--ag-pinned-column-border)}.ag-pinned-left-header .ag-header-cell-resize:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}.ag-pinned-right-header .ag-header-cell-resize:after{left:50%}.ag-pinned-left-header .ag-header-cell-resize{right:-3px}.ag-pinned-right-header .ag-header-cell-resize{left:-3px}",lp=class extends v{constructor(e,t){super(),this.isLeft=e,this.elements=t,this.getWidth=e?()=>this.beans.pinnedCols.leftWidth:()=>this.beans.pinnedCols.rightWidth}postConstruct(){this.addManagedEventListeners({[`${this.isLeft?"left":"right"}PinnedWidthChanged`]:this.onPinnedWidthChanged.bind(this)})}onPinnedWidthChanged(){const e=this.getWidth(),t=e>0;for(const o of this.elements)o&&(W(o,t),me(o,e))}},ap=class extends v{constructor(){super(...arguments),this.beanName="pinnedCols"}postConstruct(){this.beans.ctrlsSvc.whenReady(this,t=>{this.gridBodyCtrl=t.gridBodyCtrl});const e=this.checkContainerWidths.bind(this);this.addManagedEventListeners({displayedColumnsChanged:e,displayedColumnsWidthChanged:e}),this.addManagedPropertyListener("domLayout",e)}checkContainerWidths(){const{gos:e,visibleCols:t,eventSvc:o}=this.beans,s=$(e,"print"),i=s?0:t.getColsLeftWidth(),n=s?0:t.getDisplayedColumnsRightWidth();i!=this.leftWidth&&(this.leftWidth=i,o.dispatchEvent({type:"leftPinnedWidthChanged"})),n!=this.rightWidth&&(this.rightWidth=n,o.dispatchEvent({type:"rightPinnedWidthChanged"}))}keepPinnedColumnsNarrowerThanViewport(){const e=this.gridBodyCtrl.eBodyViewport,t=xt(e);if(t<=50)return;const o=this.getPinnedColumnsOverflowingViewport(t-50),s=this.gos.getCallback("processUnpinnedColumns"),{columns:i,hasLockedPinned:n}=o;let r=i;!r.length&&!n||(s&&(r=s({columns:r,viewportWidth:t})),!(!r||!r.length)&&(r=r.filter(l=>!Qe(l)),this.setColsPinned(r,null,"viewportSizeFeature")))}createPinnedWidthFeature(e,...t){return new lp(e,t)}setColsPinned(e,t,o){const{colModel:s,colAnimation:i,visibleCols:n,gos:r}=this.beans;if(!s.cols||!(e!=null&&e.length))return;if($(r,"print")){I(37);return}i==null||i.start();let l;t===!0||t==="left"?l="left":t==="right"?l="right":l=null;const a=[];e.forEach(d=>{if(!d)return;const c=s.getCol(d);c&&c.getPinned()!==l&&(this.setColPinned(c,l),a.push(c))}),a.length&&(n.refresh(o),tn(this.eventSvc,a,o)),i==null||i.finish()}initCol(e){const{pinned:t,initialPinned:o}=e.colDef;t!==void 0?this.setColPinned(e,t):this.setColPinned(e,o)}setColPinned(e,t){t===!0||t==="left"?e.pinned="left":t==="right"?e.pinned="right":e.pinned=null,e.dispatchStateUpdatedEvent("pinned")}setupHeaderPinnedWidth(e){const{scrollVisibleSvc:t}=this.beans;if(e.pinned==null)return;const o=e.pinned==="left",s=e.pinned==="right";e.hidden=!0;const i=()=>{const n=o?this.leftWidth:this.rightWidth;if(n==null)return;const r=n==0,l=e.hidden!==r,a=this.gos.get("enableRtl"),d=t.getScrollbarWidth(),h=t.verticalScrollShowing&&(a&&o||!a&&s)?n+d:n;e.comp.setPinnedContainerWidth(`${h}px`),e.comp.setDisplayed(!r),l&&(e.hidden=r,e.refresh())};e.addManagedEventListeners({leftPinnedWidthChanged:i,rightPinnedWidthChanged:i,scrollVisibilityChanged:i,scrollbarWidthChanged:i})}getHeaderResizeDiff(e,t){if(t.getPinned()){const{leftWidth:s,rightWidth:i}=this,n=xt(this.beans.ctrlsSvc.getGridBodyCtrl().eBodyViewport)-50;if(s+i+e>n)if(n>s+i)e=n-s-i;else return 0}return e}getPinnedColumnsOverflowingViewport(e){const t=this.rightWidth??0,o=this.leftWidth??0,s=t+o;let i=!1;if(s0;){if(a0){const g=r[d++];if(g.colDef.lockPinned){i=!0;continue}u-=g.getActualWidth(),h.push(g)}}return{columns:h,hasLockedPinned:i}}},dp={moduleName:"PinnedColumn",version:G,beans:[ap],css:[rp]},cp=class extends v{constructor(){super(),this.beanName="ariaAnnounce",this.descriptionContainer=null,this.pendingAnnouncements=new Map,this.lastAnnouncement="",this.updateAnnouncement=je(this,this.updateAnnouncement.bind(this),200)}postConstruct(){const e=this.beans,t=oe(e),o=this.descriptionContainer=t.createElement("div");o.classList.add("ag-aria-description-container"),ci(o,"polite"),vr(o,"additions text"),mr(o,!0),e.eGridDiv.appendChild(o)}announceValue(e,t){this.pendingAnnouncements.set(t,e),this.updateAnnouncement()}updateAnnouncement(){if(!this.descriptionContainer)return;const e=Array.from(this.pendingAnnouncements.values()).join(". ");this.pendingAnnouncements.clear(),this.descriptionContainer.textContent="",setTimeout(()=>{if(this.isAlive()&&this.descriptionContainer){let t=e;this.lastAnnouncement===t&&(t=`${t}.`),this.lastAnnouncement=t,this.descriptionContainer.textContent=t}},50)}destroy(){var t;super.destroy();const{descriptionContainer:e}=this;e&&(de(e),(t=e.parentElement)==null||t.removeChild(e)),this.descriptionContainer=null,this.pendingAnnouncements.clear()}},hp={moduleName:"Aria",version:G,beans:[cp]};function up(e){var t;(t=e.overlays)==null||t.showLoadingOverlay()}function gp(e){var t;(t=e.overlays)==null||t.showNoRowsOverlay()}function pp(e){var t;(t=e.overlays)==null||t.hideOverlay()}var fp=".ag-overlay{inset:0;pointer-events:none;position:absolute;z-index:2}.ag-overlay-panel,.ag-overlay-wrapper{display:flex;height:100%;width:100%}.ag-overlay-wrapper{align-items:center;flex:none;justify-content:center;text-align:center}.ag-overlay-loading-wrapper{pointer-events:all}.ag-overlay-loading-center{background:var(--ag-background-color);border:1px solid var(--ag-border-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-popup-shadow);padding:var(--ag-spacing)}",Cp={tag:"div",cls:"ag-overlay",role:"presentation",children:[{tag:"div",cls:"ag-overlay-panel",role:"presentation",children:[{tag:"div",ref:"eOverlayWrapper",cls:"ag-overlay-wrapper",role:"presentation"}]}]},er=class extends N{constructor(){super(Cp),this.eOverlayWrapper=x,this.activePromise=null,this.activeOverlay=null,this.updateListenerDestroyFunc=null,this.activeCssClass=null,this.elToFocusAfter=null,this.registerCSS(fp)}handleKeyDown(e){if(e.key!==m.TAB||e.defaultPrevented||ve(e))return;const t=this.beans;if(jt(t,this.eOverlayWrapper,!1,e.shiftKey))return;let s=!1;e.shiftKey?s=t.focusSvc.focusGridView({column:H(t.visibleCols.allCols),backwards:!0,canFocusOverlay:!1}):s=et(t,!1),s&&e.preventDefault()}updateLayoutClasses(e,t){const o=this.eOverlayWrapper.classList,{AUTO_HEIGHT:s,NORMAL:i,PRINT:n}=ee;o.toggle(s,t.autoHeight),o.toggle(i,t.normal),o.toggle(n,t.print)}postConstruct(){this.createManagedBean(new Ko(this)),this.setDisplayed(!1,{skipAriaHidden:!0}),this.beans.overlays.setOverlayWrapperComp(this),this.addManagedElementListeners(this.getFocusableElement(),{keydown:this.handleKeyDown.bind(this)})}setWrapperTypeClass(e){const t=this.eOverlayWrapper.classList;this.activeCssClass&&t.toggle(this.activeCssClass,!1),this.activeCssClass=e,t.toggle(e,!0)}showOverlay(e,t,o,s){if(this.setWrapperTypeClass(t),this.destroyActiveOverlay(),this.elToFocusAfter=null,this.activePromise=e,!!e){if(this.setDisplayed(!0,{skipAriaHidden:!0}),o&&this.isGridFocused()){const i=z(this.beans);i&&!Jr(this.beans)&&(this.elToFocusAfter=i)}e.then(i=>{if(this.activePromise!==e){this.activeOverlay!==i&&(this.destroyBean(i),i=null);return}if(this.activePromise=null,!!i){if(this.activeOverlay!==i&&(this.eOverlayWrapper.appendChild(i.getGui()),this.activeOverlay=i,s)){const n=i;this.updateListenerDestroyFunc=this.addManagedPropertyListener(s,({currentValue:r})=>{var l;(l=n.refresh)==null||l.call(n,A(this.gos,{...r??{}}))})}o&&this.isGridFocused()&&Gt(this.eOverlayWrapper)}})}}updateOverlayWrapperPaddingTop(e){this.eOverlayWrapper.style.setProperty("padding-top",`${e}px`)}destroyActiveOverlay(){var s;this.activePromise=null;const e=this.activeOverlay;if(!e)return;let t=this.elToFocusAfter;this.activeOverlay=null,this.elToFocusAfter=null,t&&!this.isGridFocused()&&(t=null);const o=this.updateListenerDestroyFunc;o&&(o(),this.updateListenerDestroyFunc=null),this.destroyBean(e),de(this.eOverlayWrapper),(s=t==null?void 0:t.focus)==null||s.call(t,{preventScroll:!0})}hideOverlay(){this.destroyActiveOverlay(),this.setDisplayed(!1,{skipAriaHidden:!0})}isGridFocused(){const e=z(this.beans);return!!e&&this.beans.eGridDiv.contains(e)}destroy(){this.elToFocusAfter=null,this.destroyActiveOverlay(),this.beans.overlays.setOverlayWrapperComp(void 0),super.destroy()}},mp={selector:"AG-OVERLAY-WRAPPER",component:er},vp=class extends v{constructor(){super(...arguments),this.beanName="overlays",this.state=0,this.showInitialOverlay=!0,this.wrapperPadding=0}postConstruct(){this.isClientSide=Vo(this.gos),this.isServerSide=!this.isClientSide&&Ai(this.gos);const e=()=>this.updateOverlayVisibility();this.addManagedEventListeners({newColumnsLoaded:e,rowDataUpdated:e,gridSizeChanged:this.refreshWrapperPadding.bind(this),rowCountReady:()=>{this.showInitialOverlay=!1,this.updateOverlayVisibility()}}),this.addManagedPropertyListener("loading",e)}setOverlayWrapperComp(e){this.eWrapper=e,this.updateOverlayVisibility()}isVisible(){return this.state!==0&&!!this.eWrapper}isExclusive(){return this.state===1&&!!this.eWrapper}showLoadingOverlay(){this.showInitialOverlay=!1;const e=this.gos,t=e.get("loading");!t&&(t!==void 0||e.get("suppressLoadingOverlay"))||this.doShowLoadingOverlay()}showNoRowsOverlay(){this.showInitialOverlay=!1;const e=this.gos;e.get("loading")||e.get("suppressNoRowsOverlay")||this.doShowNoRowsOverlay()}hideOverlay(){if(this.showInitialOverlay=!1,this.gos.get("loading")){I(99);return}this.doHideOverlay()}getOverlayWrapperSelector(){return mp}getOverlayWrapperCompClass(){return er}updateOverlayVisibility(){if(!this.eWrapper){this.state=0;return}const{state:e,isClientSide:t,isServerSide:o,beans:{gos:s,colModel:i,rowModel:n}}=this;let r=this.gos.get("loading");r!==void 0&&(this.showInitialOverlay=!1),this.showInitialOverlay&&r===void 0&&!s.get("suppressLoadingOverlay")&&(r=!s.get("columnDefs")||!i.ready||!s.get("rowData")&&t),r?e!==1&&this.doShowLoadingOverlay():(this.showInitialOverlay=!1,t&&n.isEmpty()&&!s.get("suppressNoRowsOverlay")?e!==2&&this.doShowNoRowsOverlay():(e===1||!o&&e!==0)&&this.doHideOverlay())}doShowLoadingOverlay(){this.eWrapper&&(this.state=1,this.showOverlay(pa(this.beans.userCompFactory,A(this.gos,{})),"ag-overlay-loading-wrapper","loadingOverlayComponentParams"),this.updateExclusive())}doShowNoRowsOverlay(){this.eWrapper&&(this.state=2,this.showOverlay(fa(this.beans.userCompFactory,A(this.gos,{})),"ag-overlay-no-rows-wrapper","noRowsOverlayComponentParams"),this.updateExclusive())}doHideOverlay(){this.eWrapper&&(this.state=0,this.eWrapper.hideOverlay(),this.updateExclusive())}showOverlay(e,t,o){var i;const s=(e==null?void 0:e.newAgStackInstance())??null;(i=this.eWrapper)==null||i.showOverlay(s,t,this.isExclusive(),o),this.refreshWrapperPadding()}updateExclusive(){const e=this.exclusive;this.exclusive=this.isExclusive(),this.exclusive!==e&&this.eventSvc.dispatchEvent({type:"overlayExclusiveChanged"})}refreshWrapperPadding(){const e=this.eWrapper;if(!e)return;let t=0;if(this.state===2){const o=this.beans.ctrlsSvc.get("gridHeaderCtrl");t=(o==null?void 0:o.headerHeight)||0}else this.wrapperPadding!==0&&(t=0);this.wrapperPadding!==t&&(this.wrapperPadding=t,e.updateOverlayWrapperPaddingTop(t))}},wp={moduleName:"Overlay",version:G,userComponents:{agLoadingOverlay:sc,agNoRowsOverlay:nc},apiFunctions:{showLoadingOverlay:up,showNoRowsOverlay:gp,hideOverlay:pp},beans:[vp]},yp=class extends v{constructor(){super(...arguments),this.beanName="rowContainerHeight",this.scrollY=0,this.uiBodyHeight=0}postConstruct(){this.addManagedEventListeners({bodyHeightChanged:this.updateOffset.bind(this)}),this.maxDivHeight=Pr(),Xe(this.gos,"RowContainerHeightService - maxDivHeight = "+this.maxDivHeight)}updateOffset(){if(!this.stretching)return;const e=this.beans.ctrlsSvc.getScrollFeature().getVScrollPosition().top,t=this.getUiBodyHeight();(e!==this.scrollY||t!==this.uiBodyHeight)&&(this.scrollY=e,this.uiBodyHeight=t,this.calculateOffset())}calculateOffset(){this.setUiContainerHeight(this.maxDivHeight),this.pixelsToShave=this.modelHeight-this.uiContainerHeight,this.maxScrollY=this.uiContainerHeight-this.uiBodyHeight;const e=this.scrollY/this.maxScrollY,t=e*this.pixelsToShave;Xe(this.gos,`RowContainerHeightService - Div Stretch Offset = ${t} (${this.pixelsToShave} * ${e})`),this.setDivStretchOffset(t)}setUiContainerHeight(e){e!==this.uiContainerHeight&&(this.uiContainerHeight=e,this.eventSvc.dispatchEvent({type:"rowContainerHeightChanged"}))}clearOffset(){this.setUiContainerHeight(this.modelHeight),this.pixelsToShave=0,this.setDivStretchOffset(0)}setDivStretchOffset(e){const t=typeof e=="number"?Math.floor(e):null;this.divStretchOffset!==t&&(this.divStretchOffset=t,this.eventSvc.dispatchEvent({type:"heightScaleChanged"}))}setModelHeight(e){this.modelHeight=e,this.stretching=e!=null&&this.maxDivHeight>0&&e>this.maxDivHeight,this.stretching?this.calculateOffset():this.clearOffset()}getRealPixelPosition(e){return e-this.divStretchOffset}getUiBodyHeight(){const e=this.beans.ctrlsSvc.getScrollFeature().getVScrollPosition();return e.bottom-e.top}getScrollPositionForPixel(e){if(this.pixelsToShave<=0)return e;const t=this.modelHeight-this.getUiBodyHeight(),o=e/t;return this.maxScrollY*o}},bp=400,Sp=class extends v{constructor(){super(...arguments),this.beanName="rowRenderer",this.destroyFuncsForColumnListeners=[],this.rowCtrlsByRowIndex={},this.zombieRowCtrls={},this.allRowCtrls=[],this.topRowCtrls=[],this.bottomRowCtrls=[],this.refreshInProgress=!1,this.dataFirstRenderedFired=!1,this.setupRangeSelectionListeners=()=>{const e=()=>{this.getAllCellCtrls().forEach(n=>n.onCellSelectionChanged())},t=()=>{this.getAllCellCtrls().forEach(n=>n.updateRangeBordersIfRangeCount())},o=()=>{this.eventSvc.addEventListener("cellSelectionChanged",e),this.eventSvc.addEventListener("columnMoved",t),this.eventSvc.addEventListener("columnPinned",t),this.eventSvc.addEventListener("columnVisible",t)},s=()=>{this.eventSvc.removeEventListener("cellSelectionChanged",e),this.eventSvc.removeEventListener("columnMoved",t),this.eventSvc.removeEventListener("columnPinned",t),this.eventSvc.removeEventListener("columnVisible",t)};this.addDestroyFunc(()=>s()),this.addManagedPropertyListeners(["enableRangeSelection","cellSelection"],()=>{Oe(this.gos)?o():s()}),Oe(this.gos)&&o()}}wireBeans(e){this.pageBounds=e.pageBounds,this.colModel=e.colModel,this.pinnedRowModel=e.pinnedRowModel,this.rowModel=e.rowModel,this.focusSvc=e.focusSvc,this.rowContainerHeight=e.rowContainerHeight,this.ctrlsSvc=e.ctrlsSvc}postConstruct(){this.ctrlsSvc.whenReady(this,e=>{this.gridBodyCtrl=e.gridBodyCtrl,this.initialise()})}initialise(){this.addManagedEventListeners({paginationChanged:this.onPageLoaded.bind(this),pinnedRowDataChanged:this.onPinnedRowDataChanged.bind(this),pinnedRowsChanged:this.onPinnedRowsChanged.bind(this),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),bodyScroll:this.onBodyScroll.bind(this),bodyHeightChanged:this.redraw.bind(this,{})}),this.addManagedPropertyListeners(["domLayout","embedFullWidthRows"],()=>this.onDomLayoutChanged()),this.addManagedPropertyListeners(["suppressMaxRenderedRowRestriction","rowBuffer"],()=>this.redraw()),this.addManagedPropertyListener("suppressCellFocus",s=>this.onSuppressCellFocusChanged(s.currentValue)),this.addManagedPropertyListeners(["groupSuppressBlankHeader","getBusinessKeyForNode","fullWidthCellRenderer","fullWidthCellRendererParams","suppressStickyTotalRow","groupRowRenderer","groupRowRendererParams","loadingCellRenderer","loadingCellRendererParams","detailCellRenderer","detailCellRendererParams","enableRangeSelection","enableCellTextSelection"],()=>this.redrawRows()),this.addManagedPropertyListener("cellSelection",({currentValue:s,previousValue:i})=>{(!i&&s||i&&!s)&&this.redrawRows()});const{stickyRowSvc:e,gos:t,showRowGroupCols:o}=this.beans;if(o&&this.addManagedPropertyListener("showOpenedGroup",()=>{const s=o.getShowRowGroupCols();s.length&&this.refreshCells({columns:s,force:!0})}),e)this.stickyRowFeature=e.createStickyRowFeature(this,this.createRowCon.bind(this),this.destroyRowCtrls.bind(this));else{const s=this.gridBodyCtrl;s.setStickyTopHeight(0),s.setStickyBottomHeight(0)}this.registerCellEventListeners(),this.initialiseCache(),this.printLayout=$(t,"print"),this.embedFullWidthRows=this.printLayout||t.get("embedFullWidthRows"),this.redrawAfterModelUpdate()}initialiseCache(){if(this.gos.get("keepDetailRows")){const e=this.getKeepDetailRowsCount(),t=e??3;this.cachedRowCtrls=new Rp(t)}}getKeepDetailRowsCount(){return this.gos.get("keepDetailRowsCount")}getStickyTopRowCtrls(){var e;return((e=this.stickyRowFeature)==null?void 0:e.stickyTopRowCtrls)??[]}getStickyBottomRowCtrls(){var e;return((e=this.stickyRowFeature)==null?void 0:e.stickyBottomRowCtrls)??[]}updateAllRowCtrls(){var s;const e=Object.values(this.rowCtrlsByRowIndex),t=Object.values(this.zombieRowCtrls),o=((s=this.cachedRowCtrls)==null?void 0:s.getEntries())??[];t.length>0||o.length>0?this.allRowCtrls=[...e,...t,...o]:this.allRowCtrls=e}isCellBeingRendered(e,t){var i;const o=this.rowCtrlsByRowIndex[e];return!t||!o?!!o:o.isFullWidth()?!0:!!((i=this.beans.spannedRowRenderer)==null?void 0:i.getCellByPosition({rowIndex:e,column:t,rowPinned:null}))||!!o.getCellCtrl(t)||!o.isRowRendered()}updateCellFocus(e){this.getAllCellCtrls().forEach(t=>t.onCellFocused(e)),this.getFullWidthRowCtrls().forEach(t=>t.onFullWidthRowFocused(e))}onCellFocusChanged(e){if(e&&e.rowIndex!=null&&!e.rowPinned){const t=this.beans.colModel.getCol(e.column)??void 0;this.isCellBeingRendered(e.rowIndex,t)||this.redraw()}this.updateCellFocus(e)}onSuppressCellFocusChanged(e){this.getAllCellCtrls().forEach(t=>t.onSuppressCellFocusChanged(e)),this.getFullWidthRowCtrls().forEach(t=>t.onSuppressCellFocusChanged(e))}registerCellEventListeners(){this.addManagedEventListeners({cellFocused:e=>this.onCellFocusChanged(e),cellFocusCleared:()=>this.updateCellFocus(),flashCells:e=>{const{cellFlashSvc:t}=this.beans;t&&this.getAllCellCtrls().forEach(o=>t.onFlashCells(o,e))},columnHoverChanged:()=>{this.getAllCellCtrls().forEach(e=>e.onColumnHover())},displayedColumnsChanged:()=>{this.getAllCellCtrls().forEach(e=>e.onDisplayedColumnsChanged())},displayedColumnsWidthChanged:()=>{this.printLayout&&this.getAllCellCtrls().forEach(e=>e.onLeftChanged())}}),this.setupRangeSelectionListeners(),this.refreshListenersToColumnsForCellComps(),this.addManagedEventListeners({gridColumnsChanged:this.refreshListenersToColumnsForCellComps.bind(this)}),this.addDestroyFunc(this.removeGridColumnListeners.bind(this))}removeGridColumnListeners(){this.destroyFuncsForColumnListeners.forEach(e=>e()),this.destroyFuncsForColumnListeners.length=0}refreshListenersToColumnsForCellComps(){this.removeGridColumnListeners(),this.colModel.getCols().forEach(t=>{const o=a=>{this.getAllCellCtrls().forEach(d=>{d.column===t&&a(d)})},s=()=>{o(a=>a.onLeftChanged())},i=()=>{o(a=>a.onWidthChanged())},n=()=>{o(a=>a.onFirstRightPinnedChanged())},r=()=>{o(a=>a.onLastLeftPinnedChanged())},l=()=>{o(a=>a.onColDefChanged())};t.__addEventListener("leftChanged",s),t.__addEventListener("widthChanged",i),t.__addEventListener("firstRightPinnedChanged",n),t.__addEventListener("lastLeftPinnedChanged",r),t.__addEventListener("colDefChanged",l),this.destroyFuncsForColumnListeners.push(()=>{t.__removeEventListener("leftChanged",s),t.__removeEventListener("widthChanged",i),t.__removeEventListener("firstRightPinnedChanged",n),t.__removeEventListener("lastLeftPinnedChanged",r),t.__removeEventListener("colDefChanged",l)})})}onDomLayoutChanged(){const e=$(this.gos,"print"),t=e||this.gos.get("embedFullWidthRows"),o=t!==this.embedFullWidthRows||this.printLayout!==e;this.printLayout=e,this.embedFullWidthRows=t,o&&this.redrawAfterModelUpdate({domLayoutChanged:!0})}datasourceChanged(){this.firstRenderedRow=0,this.lastRenderedRow=-1;const e=Object.keys(this.rowCtrlsByRowIndex);this.removeRowCtrls(e)}onPageLoaded(e){const t={recycleRows:e.keepRenderedRows,animate:e.animate,newData:e.newData,newPage:e.newPage,onlyBody:!0};this.redrawAfterModelUpdate(t)}getAllCellsNotSpanningForColumn(e){const t=[];return this.getAllRowCtrls().forEach(o=>{var i;const s=(i=o.getCellCtrl(e,!0))==null?void 0:i.eGui;s&&t.push(s)}),t}refreshFloatingRowComps(e=!0){this.refreshFloatingRows(this.topRowCtrls,"top",e),this.refreshFloatingRows(this.bottomRowCtrls,"bottom",e)}refreshFloatingRows(e,t,o){const{pinnedRowModel:s,beans:i,printLayout:n}=this,r=Object.fromEntries(e.map(a=>[a.rowNode.id,a]));s==null||s.forEachPinnedRow(t,(a,d)=>{const c=e[d];c&&s.getPinnedRowById(c.rowNode.id,t)===void 0&&(c.destroyFirstPass(),c.destroySecondPass()),a.id in r&&o?(e[d]=r[a.id],delete r[a.id]):e[d]=new Io(a,i,!1,!1,n)});const l=(t==="top"?s==null?void 0:s.getPinnedTopRowCount():s==null?void 0:s.getPinnedBottomRowCount())??0;e.length=l}onPinnedRowDataChanged(){const e={recycleRows:!0};this.redrawAfterModelUpdate(e)}onPinnedRowsChanged(){this.redrawAfterModelUpdate({recycleRows:!0})}redrawRow(e,t=!1){var o,s;if(e.sticky)(o=this.stickyRowFeature)==null||o.refreshStickyNode(e);else if((s=this.cachedRowCtrls)!=null&&s.has(e)){this.cachedRowCtrls.removeRow(e);return}else{const i=n=>{const r=n[e.rowIndex];r&&r.rowNode===e&&(r.destroyFirstPass(),r.destroySecondPass(),n[e.rowIndex]=this.createRowCon(e,!1,!1))};switch(e.rowPinned){case"top":i(this.topRowCtrls);break;case"bottom":i(this.bottomRowCtrls);break;default:i(this.rowCtrlsByRowIndex),this.updateAllRowCtrls()}}t||this.dispatchDisplayedRowsChanged(!1)}redrawRows(e){if(e!=null){e==null||e.forEach(o=>this.redrawRow(o,!0)),this.dispatchDisplayedRowsChanged(!1);return}this.redrawAfterModelUpdate()}redrawAfterModelUpdate(e={}){var l;this.getLockOnRefresh();const t=(l=this.beans.focusSvc)==null?void 0:l.getFocusCellToUseAfterRefresh();this.updateContainerHeights(),this.scrollToTopIfNewData(e);const o=!e.domLayoutChanged&&!!e.recycleRows,s=e.animate&&zo(this.gos),i=o?this.getRowsToRecycle():null;o||this.removeAllRowComps(),this.workOutFirstAndLastRowsToRender();const{stickyRowFeature:n,gos:r}=this;if(n){n.checkStickyRows();const a=n.extraTopHeight+n.extraBottomHeight;a&&this.updateContainerHeights(a)}this.recycleRows(i,s),this.gridBodyCtrl.updateRowCount(),e.onlyBody||this.refreshFloatingRowComps(r.get("enableRowPinning")?o:void 0),this.dispatchDisplayedRowsChanged(),t!=null&&this.restoreFocusedCell(t),this.releaseLockOnRefresh()}scrollToTopIfNewData(e){var s;const t=e.newData||e.newPage,o=this.gos.get("suppressScrollOnNewData");t&&!o&&(this.gridBodyCtrl.scrollFeature.scrollToTop(),(s=this.stickyRowFeature)==null||s.resetOffsets())}updateContainerHeights(e=0){const{rowContainerHeight:t}=this;if(this.printLayout){t.setModelHeight(null);return}let o=this.pageBounds.getCurrentPageHeight();o===0&&(o=1),t.setModelHeight(o+e)}getLockOnRefresh(){var e,t;if(this.refreshInProgress)throw new Error(Li(252));this.refreshInProgress=!0,(t=(e=this.beans.frameworkOverrides).getLockOnRefresh)==null||t.call(e)}releaseLockOnRefresh(){var e,t;this.refreshInProgress=!1,(t=(e=this.beans.frameworkOverrides).releaseLockOnRefresh)==null||t.call(e)}isRefreshInProgress(){return this.refreshInProgress}restoreFocusedCell(e){if(!e)return;const t=this.beans.focusSvc,o=this.findPositionToFocus(e);if(!o){t.focusHeaderPosition({headerPosition:{headerRowIndex:ie(this.beans)-1,column:e.column}});return}if(e.rowIndex!==o.rowIndex||e.rowPinned!=o.rowPinned){t.setFocusedCell({...o,preventScrollOnBrowserFocus:!0,forceBrowserFocus:!0});return}t.doesRowOrCellHaveBrowserFocus()||this.updateCellFocus(A(this.gos,{...o,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0,type:"cellFocused"}))}findPositionToFocus(e){const{pagination:t,pageBounds:o}=this.beans;let s=e;for(s.rowPinned==null&&t&&o&&!t.isRowInPage(s.rowIndex)&&(s={rowPinned:null,rowIndex:o.getFirstRow()});s;){if(s.rowPinned==null&&o)if(s.rowIndexo.getLastRow()&&(s={rowPinned:null,rowIndex:o.getLastRow()});const i=this.getRowByPosition(s);if(i!=null&&i.isAlive())return{...i.getRowPosition(),column:e.column};s=Ot(this.beans,s)}return null}getAllCellCtrls(){const e=[],t=this.getAllRowCtrls(),o=t.length;for(let s=0;s{const i=s.rowNode;return Xs(i,t)})}getCellCtrls(e,t){let o;k(t)&&(o={},t.forEach(i=>{const n=this.colModel.getCol(i);k(n)&&(o[n.getId()]=!0)}));const s=[];return this.getRowCtrls(e).forEach(i=>{i.getAllCellCtrls().forEach(n=>{const r=n.column.getId();o&&!o[r]||s.push(n)})}),s}destroy(){this.removeAllRowComps(!0),super.destroy()}removeAllRowComps(e=!1){var o;const t=Object.keys(this.rowCtrlsByRowIndex);this.removeRowCtrls(t,e),(o=this.stickyRowFeature)==null||o.destroyStickyCtrls()}getRowsToRecycle(){const e=[];for(const o of Object.keys(this.rowCtrlsByRowIndex))this.rowCtrlsByRowIndex[o].rowNode.id==null&&e.push(o);this.removeRowCtrls(e);const t={};for(const o of Object.values(this.rowCtrlsByRowIndex)){const s=o.rowNode;t[s.id]=o}return this.rowCtrlsByRowIndex={},t}removeRowCtrls(e,t=!1){e.forEach(o=>{const s=this.rowCtrlsByRowIndex[o];s&&(s.destroyFirstPass(t),s.destroySecondPass()),delete this.rowCtrlsByRowIndex[o]})}onBodyScroll(e){e.direction==="vertical"&&this.redraw({afterScroll:!0})}redraw(e={}){const{focusSvc:t,animationFrameSvc:o}=this.beans,{afterScroll:s}=e;let i;const n=this.stickyRowFeature;n&&(i=(t==null?void 0:t.getFocusCellToUseAfterRefresh())||void 0);const r=this.firstRenderedRow,l=this.lastRenderedRow;this.workOutFirstAndLastRowsToRender();let a=!1;if(n){a=n.checkStickyRows();const c=n.extraTopHeight+n.extraBottomHeight;c&&this.updateContainerHeights(c)}const d=this.firstRenderedRow!==r||this.lastRenderedRow!==l;if(!(s&&!a&&!d)&&(this.getLockOnRefresh(),this.recycleRows(null,!1,s),this.releaseLockOnRefresh(),this.dispatchDisplayedRowsChanged(s&&!a),i!=null)){const c=t==null?void 0:t.getFocusCellToUseAfterRefresh();i!=null&&c==null&&(o==null||o.flushAllFrames(),this.restoreFocusedCell(i))}}removeRowCompsNotToDraw(e,t){const o={};e.forEach(n=>o[n]=!0);const i=Object.keys(this.rowCtrlsByRowIndex).filter(n=>!o[n]);this.removeRowCtrls(i,t)}calculateIndexesToDraw(e){var r,l;const t=[];for(let a=this.firstRenderedRow;a<=this.lastRenderedRow;a++)t.push(a);const o=this.beans.pagination,s=(l=(r=this.beans.focusSvc)==null?void 0:r.getFocusedCell())==null?void 0:l.rowIndex;s!=null&&(sthis.lastRenderedRow)&&(!o||o.isRowInPage(s))&&s{const d=a.rowNode.rowIndex;d==null||d===s||(dthis.lastRenderedRow)&&this.doNotUnVirtualiseRow(a)&&t.push(d)};for(const a of Object.values(this.rowCtrlsByRowIndex))i(a);if(e)for(const a of Object.values(e))i(a);t.sort((a,d)=>a-d);const n=[];for(let a=0;a{this.createOrUpdateRowCtrl(i,e,t,o)}),e){const{animationFrameSvc:i}=this.beans;(i==null?void 0:i.active)&&o&&!this.printLayout?i.addDestroyTask(()=>{this.destroyRowCtrls(e,t),this.updateAllRowCtrls(),this.dispatchDisplayedRowsChanged()}):this.destroyRowCtrls(e,t)}this.updateAllRowCtrls()}dispatchDisplayedRowsChanged(e=!1){this.eventSvc.dispatchEvent({type:"displayedRowsChanged",afterScroll:e})}onDisplayedColumnsChanged(){const{visibleCols:e}=this.beans,t=e.isPinningLeft(),o=e.isPinningRight();(this.pinningLeft!==t||o!==this.pinningRight)&&(this.pinningLeft=t,this.pinningRight=o,this.embedFullWidthRows&&this.redrawFullWidthEmbeddedRows())}redrawFullWidthEmbeddedRows(){const e=[];this.getFullWidthRowCtrls().forEach(t=>{const o=t.rowNode.rowIndex;e.push(o.toString())}),this.refreshFloatingRowComps(),this.removeRowCtrls(e),this.redraw({afterScroll:!0})}getFullWidthRowCtrls(e){const t=Qs(e);return this.getAllRowCtrls().filter(o=>{if(!o.isFullWidth())return!1;const s=o.rowNode;return!(t!=null&&!Xs(s,t))})}createOrUpdateRowCtrl(e,t,o,s){let i,n=this.rowCtrlsByRowIndex[e];if(n||(i=this.rowModel.getRow(e),k(i)&&k(t)&&t[i.id]&&i.alreadyRendered&&(n=t[i.id],t[i.id]=null)),!n)if(i||(i=this.rowModel.getRow(e)),k(i))n=this.createRowCon(i,o,s);else return;return i&&(i.alreadyRendered=!0),this.rowCtrlsByRowIndex[e]=n,n}destroyRowCtrls(e,t){const o=[];if(e){for(const s of Object.values(e))if(s){if(this.cachedRowCtrls&&s.isCacheable()){this.cachedRowCtrls.addRow(s);continue}if(s.destroyFirstPass(!t),t){const i=s.instanceId;this.zombieRowCtrls[i]=s,o.push(()=>{s.destroySecondPass(),delete this.zombieRowCtrls[i]})}else s.destroySecondPass()}}t&&(o.push(()=>{this.updateAllRowCtrls(),this.dispatchDisplayedRowsChanged()}),window.setTimeout(()=>o.forEach(s=>s()),bp))}getRowBuffer(){return this.gos.get("rowBuffer")}getRowBufferInPixels(){const e=this.getRowBuffer(),t=Bi(this.beans);return e*t}workOutFirstAndLastRowsToRender(){const{rowContainerHeight:e,pageBounds:t,rowModel:o}=this;e.updateOffset();let s,i;if(!o.isRowsToRender())s=0,i=-1;else if(this.printLayout)this.beans.environment.refreshRowHeightVariable(),s=t.getFirstRow(),i=t.getLastRow();else{const c=this.getRowBufferInPixels(),h=this.ctrlsSvc.getScrollFeature(),u=this.gos.get("suppressRowVirtualisation");let g=!1,p,f;do{const R=t.getPixelOffset(),{pageFirstPixel:D,pageLastPixel:b}=t.getCurrentPagePixelRange(),P=e.divStretchOffset,L=h.getVScrollPosition(),F=L.top,T=L.bottom;u?(p=D+P,f=b+P):(p=Math.max(F+R-c,D)+P,f=Math.min(T+R+c,b)+P),this.firstVisibleVPixel=Math.max(F+R,D)+P,this.lastVisibleVPixel=Math.min(T+R,b)+P,g=this.ensureAllRowsInRangeHaveHeightsCalculated(p,f)}while(g);let C=o.getRowIndexAtPixel(p),y=o.getRowIndexAtPixel(f);const S=t.getFirstRow(),w=t.getLastRow();Cw&&(y=w),s=C,i=y}const n=$(this.gos,"normal"),r=this.gos.get("suppressMaxRenderedRowRestriction"),l=Math.max(this.getRowBuffer(),500);n&&!r&&i-s>l&&(i=s+l);const a=s!==this.firstRenderedRow,d=i!==this.lastRenderedRow;(a||d)&&(this.firstRenderedRow=s,this.lastRenderedRow=i,this.eventSvc.dispatchEvent({type:"viewportChanged",firstRow:s,lastRow:i}))}dispatchFirstDataRenderedEvent(){this.dataFirstRenderedFired||(this.dataFirstRenderedFired=!0,be(this.beans,()=>{this.beans.eventSvc.dispatchEvent({type:"firstDataRendered",firstRow:this.firstRenderedRow,lastRow:this.lastRenderedRow})}))}ensureAllRowsInRangeHaveHeightsCalculated(e,t){var l,a;const o=(l=this.pinnedRowModel)==null?void 0:l.ensureRowHeightsValid(),s=(a=this.stickyRowFeature)==null?void 0:a.ensureRowHeightsValid(),{pageBounds:i,rowModel:n}=this,r=n.ensureRowHeightsValid(e,t,i.getFirstRow(),i.getLastRow());return(r||s)&&this.eventSvc.dispatchEvent({type:"recalculateRowBounds"}),s||r||o?(this.updateContainerHeights(),!0):!1}doNotUnVirtualiseRow(e){const s=e.rowNode,i=this.focusSvc.isRowFocused(s.rowIndex,s.rowPinned),n=e.editing,r=s.detail;return i||n||r?!!this.isRowPresent(s):!1}isRowPresent(e){var t;return this.rowModel.isRowPresent(e)?((t=this.beans.pagination)==null?void 0:t.isRowInPage(e.rowIndex))??!0:!1}createRowCon(e,t,o){var r,l;const s=((r=this.cachedRowCtrls)==null?void 0:r.getRow(e))??null;if(s)return s;const i=o&&!this.printLayout&&!!((l=this.beans.animationFrameSvc)!=null&&l.active);return new Io(e,this.beans,t,i,this.printLayout)}getRenderedNodes(){const e=Object.values(this.rowCtrlsByRowIndex).map(s=>s.rowNode),t=this.getStickyTopRowCtrls().map(s=>s.rowNode),o=this.getStickyBottomRowCtrls().map(s=>s.rowNode);return[...t,...e,...o]}getRowByPosition(e){let t;const{rowIndex:o}=e;switch(e.rowPinned){case"top":t=this.topRowCtrls[o];break;case"bottom":t=this.bottomRowCtrls[o];break;default:t=this.rowCtrlsByRowIndex[o],t||(t=this.getStickyTopRowCtrls().find(s=>s.rowNode.rowIndex===o)||null,t||(t=this.getStickyBottomRowCtrls().find(s=>s.rowNode.rowIndex===o)||null));break}return t}isRangeInRenderedViewport(e,t){if(e==null||t==null)return!1;const s=e>this.lastRenderedRow;return!(tthis.maxCount){const t=this.entriesList[0];t.destroyFirstPass(),t.destroySecondPass(),this.removeFromCache(t)}}getRow(e){if(e==null||e.id==null)return null;const t=this.entriesMap[e.id];return t?(this.removeFromCache(t),t.setCached(!1),t.rowNode!=e?null:t):null}has(e){return this.entriesMap[e.id]!=null}removeRow(e){const t=e.id,o=this.entriesMap[t];delete this.entriesMap[t],ye(this.entriesList,o)}removeFromCache(e){const t=e.rowNode.id;delete this.entriesMap[t],ye(this.entriesList,e)}getEntries(){return this.entriesList}};function Qs(e){if(!e)return;const t={top:{},bottom:{},normal:{}};return e.forEach(o=>{const s=o.id;switch(o.rowPinned){case"top":t.top[s]=o;break;case"bottom":t.bottom[s]=o;break;default:t.normal[s]=o;break}}),t}function Xs(e,t){const o=e.id;switch(e.rowPinned){case"top":return t.top[o]!=null;case"bottom":return t.bottom[o]!=null;default:return t.normal[o]!=null}}var Fp=class extends v{constructor(){super(...arguments),this.beanName="rowNodeSorter"}postConstruct(){const{gos:e}=this;this.isAccentedSort=e.get("accentedSort"),this.primaryColumnsSortGroups=ae(e),this.addManagedPropertyListener("accentedSort",t=>this.isAccentedSort=t.currentValue),this.addManagedPropertyListener("autoGroupColumnDef",()=>this.primaryColumnsSortGroups=ae(e))}doFullSort(e,t){const o=e.map((s,i)=>({currentPos:i,rowNode:s}));return o.sort(this.compareRowNodes.bind(this,t)),o.map(s=>s.rowNode)}compareRowNodes(e,t,o){const s=t.rowNode,i=o.rowNode;for(let n=0,r=e.length;nthis.setColumnDefs(e))}start(){this.beans.ctrlsSvc.whenReady(this,()=>{const e=this.gos.get("columnDefs");e?this.setColumnsAndData(e):this.waitingForColumns=!0,this.gridReady()})}setColumnsAndData(e){const{colModel:t,rowModel:o}=this.beans;t.setColumnDefs(e??[],"gridInitializing"),o.start()}gridReady(){const{eventSvc:e,gos:t}=this;e.dispatchEvent({type:"gridReady"}),Xe(t,`initialised successfully, enterprise = ${t.isModuleRegistered("EnterpriseCore")}`)}setColumnDefs(e){const t=this.gos.get("columnDefs");if(t){if(this.waitingForColumns){this.waitingForColumns=!1,this.setColumnsAndData(t);return}this.beans.colModel.setColumnDefs(t,yt(e.source))}}},Ep="paste",Tp=class extends v{constructor(){super(...arguments),this.beanName="changeDetectionSvc",this.clientSideRowModel=null}postConstruct(){const{gos:e,rowModel:t}=this.beans;Vo(e)&&(this.clientSideRowModel=t),this.addManagedEventListeners({cellValueChanged:this.onCellValueChanged.bind(this)})}onCellValueChanged(e){const{gos:t,rowRenderer:o}=this.beans;if(e.source===Ep||t.get("suppressChangeDetection"))return;const s=e.node,i=[s],n=this.clientSideRowModel,r=n==null?void 0:n.rootNode;if(r&&!s.isRowPinned()){const l=t.get("aggregateOnlyChangedColumns"),a=new sd(l,r);a.addParentNode(s.parent,[e.column]),n.doAggregate(a),a.forEachChangedNodeDepthFirst(d=>{i.push(d),d.sibling&&i.push(d.sibling)})}o.refreshCells({rowNodes:i})}},kp=class extends v{constructor(){super(...arguments),this.beanName="expressionSvc",this.cache={}}evaluate(e,t){if(typeof e=="string")return this.evaluateExpression(e,t);K(15,{expression:e})}evaluateExpression(e,t){try{return this.createExpressionFunction(e)(t.value,t.context,t.oldValue,t.newValue,t.value,t.node,t.data,t.colDef,t.rowIndex,t.api,t.getValue,t.column,t.columnGroup)}catch(o){return K(16,{expression:e,params:t,e:o}),null}}createExpressionFunction(e){const t=this.cache;if(t[e])return t[e];const o=this.createFunctionBody(e),s=new Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, getValue, column, columnGroup",o);return t[e]=s,s}createFunctionBody(e){return e.indexOf("return")>=0?e:"return "+e+";"}},Ip={moduleName:"Expression",version:G,beans:[kp]},Lp={moduleName:"ChangeDetection",version:G,beans:[Tp]},Mp=class extends v{constructor(){super(...arguments),this.beanName="valueSvc",this.initialised=!1,this.isSsrm=!1}wireBeans(e){this.expressionSvc=e.expressionSvc,this.colModel=e.colModel,this.valueCache=e.valueCache,this.dataTypeSvc=e.dataTypeSvc}postConstruct(){this.initialised||this.init()}init(){this.executeValueGetter=this.valueCache?this.executeValueGetterWithValueCache.bind(this):this.executeValueGetterWithoutValueCache.bind(this),this.isSsrm=Ai(this.gos),this.cellExpressions=this.gos.get("enableCellExpressions"),this.isTreeData=this.gos.get("treeData"),this.initialised=!0;const e=t=>this.callColumnCellValueChangedHandler(t);this.eventSvc.addEventListener("cellValueChanged",e,!0),this.addDestroyFunc(()=>this.eventSvc.removeEventListener("cellValueChanged",e,!0)),this.addManagedPropertyListener("treeData",t=>this.isTreeData=t.currentValue)}getValueForDisplay(e,t,o=!1,s=!1){const{showRowGroupColValueSvc:i}=this.beans,n=!e&&t.group,r=e==null?void 0:e.colDef.showRowGroup,l=!this.isTreeData||t.footer;if(i&&l&&(n||r)){const p=i.getGroupValue(t,e);if(p==null)return{value:null,valueFormatted:null};if(!o)return{value:p.value,valueFormatted:null};const f=i.formatAndPrefixGroupColValue(p,e,s);return{value:p.value,valueFormatted:f}}if(!e)return{value:t.key,valueFormatted:null};const a=t.leafGroup&&this.colModel.isPivotMode(),d=t.group&&t.expanded&&!t.footer&&!a,c=this.gos.get("groupSuppressBlankHeader")||!t.sibling,h=d&&!c,u=this.getValue(e,t,h),g=o&&!(s&&e.colDef.useValueFormatterForExport===!1);return{value:u,valueFormatted:g?this.formatValue(e,t,u):null}}getValue(e,t,o=!1){var p;if(this.initialised||this.init(),!t)return;const s=e.getColDef(),i=s.field,n=e.getColId(),r=t.data;let l;const a=s.showRowGroup;if(typeof a=="string"&&(((p=this.beans.rowGroupColsSvc)==null?void 0:p.getColumnIndex(a))??-1)>t.level)return null;const d=typeof a!="string"||!t.group,c=t.groupData&&n in t.groupData,h=!o&&t.aggData&&t.aggData[n]!==void 0,u=this.isSsrm&&o&&!!e.getColDef().aggFunc,g=this.isSsrm&&t.footer&&t.field&&(e.getColDef().showRowGroup===!0||e.getColDef().showRowGroup===t.field);if(this.isTreeData&&h)l=t.aggData[n];else if(this.isTreeData&&s.valueGetter)l=this.executeValueGetter(s.valueGetter,r,e,t);else if(this.isTreeData&&i&&r)l=mt(r,i,e.isFieldContainsDots());else if(c)l=t.groupData[n];else if(h)l=t.aggData[n];else if(s.valueGetter){if(!d)return l;l=this.executeValueGetter(s.valueGetter,r,e,t)}else if(g)l=mt(r,t.field,e.isFieldContainsDots());else if(i&&r&&!u){if(!d)return l;l=mt(r,i,e.isFieldContainsDots())}if(this.cellExpressions&&typeof l=="string"&&l.indexOf("=")===0){const f=l.substring(1);l=this.executeValueGetter(f,r,e,t)}return l}parseValue(e,t,o,s){var r;const i=e.getColDef(),n=i.valueParser;if(k(n)){const l=A(this.gos,{node:t,data:t==null?void 0:t.data,oldValue:s,newValue:o,colDef:i,column:e});return typeof n=="function"?n(l):(r=this.expressionSvc)==null?void 0:r.evaluate(n,l)}return o}getDeleteValue(e,t){return k(e.getColDef().valueParser)?this.parseValue(e,t,"",this.getValueForDisplay(e,t).value)??null:null}formatValue(e,t,o,s,i=!0){let n=null,r;const l=e.getColDef();if(s?r=s:i&&(r=l.valueFormatter),r){const a=A(this.gos,{value:o,node:t,data:t?t.data:null,colDef:l,column:e});typeof r=="function"?n=r(a):n=this.expressionSvc?this.expressionSvc.evaluate(r,a):null}else if(l.refData)return l.refData[o]||"";return n==null&&Array.isArray(o)&&(n=o.join(", ")),n}setValue(e,t,o,s){var c,h;const i=this.colModel.getColDefCol(t);if(!e||!i)return!1;V(e.data)&&(e.data={});const{field:n,valueSetter:r}=i.getColDef();if(V(n)&&V(r))return I(17),!1;if(this.dataTypeSvc&&!this.dataTypeSvc.checkType(i,o))return I(135),!1;const l=A(this.gos,{node:e,data:e.data,oldValue:this.getValue(i,e),newValue:o,colDef:i.getColDef(),column:i});l.newValue=o;let a;if(k(r)?typeof r=="function"?a=r(l):a=(c=this.expressionSvc)==null?void 0:c.evaluate(r,l):a=this.setValueUsingField(e.data,n,o,i.isFieldContainsDots()),a===void 0&&(a=!0),!a)return!1;e.resetQuickFilterAggregateText(),(h=this.valueCache)==null||h.onDataChanged();const d=this.getValue(i,e);return this.eventSvc.dispatchEvent({type:"cellValueChanged",event:null,rowIndex:e.rowIndex,rowPinned:e.rowPinned,column:l.column,colDef:l.colDef,data:e.data,node:e,oldValue:l.oldValue,newValue:d,value:d,source:s}),!0}callColumnCellValueChangedHandler(e){const t=e.colDef.onCellValueChanged;typeof t=="function"&&this.beans.frameworkOverrides.wrapOutgoing(()=>{t({node:e.node,data:e.data,oldValue:e.oldValue,newValue:e.newValue,colDef:e.colDef,column:e.column,api:e.api,context:e.context})})}setValueUsingField(e,t,o,s){if(!t)return!1;let i=!1;if(!s)i=e[t]===o,i||(e[t]=o);else{const n=t.split(".");let r=e;for(;n.length>0&&r;){const l=n.shift();n.length===0?(i=r[l]===o,i||(r[l]=o)):r=r[l]}}return!i}executeValueGetterWithValueCache(e,t,o,s){const i=o.getColId(),n=this.valueCache.getValue(s,i);if(n!==void 0)return n;const r=this.executeValueGetterWithoutValueCache(e,t,o,s);return this.valueCache.setValue(s,i,r),r}executeValueGetterWithoutValueCache(e,t,o,s){var r;const i=A(this.gos,{data:t,node:s,column:o,colDef:o.getColDef(),getValue:this.getValueCallback.bind(this,s)});let n;return typeof e=="function"?n=e(i):n=(r=this.expressionSvc)==null?void 0:r.evaluate(e,i),n}getValueCallback(e,t){const o=this.colModel.getColDefCol(t);return o?this.getValue(o,e):null}getKeyForNode(e,t){const o=this.getValue(e,t),s=e.getColDef().keyCreator;let i=o;if(s){const n=A(this.gos,{value:o,colDef:e.getColDef(),column:e,node:t,data:t.data});i=s(n)}return typeof i=="string"||i==null||(i=String(i),i==="[object Object]"&&I(121)),i}},Ap={moduleName:"CommunityCore",version:G,beans:[Cg,Uc,iu,Ul,yp,zh,cg,Bg,Wl,np,ip,Sp,Mp,pg,dg,fg,ru,Pp,Jh,eu],icons:{selectOpen:"small-down",smallDown:"small-down",colorPicker:"color-picker",smallUp:"small-up",checkboxChecked:"small-up",checkboxIndeterminate:"checkbox-indeterminate",checkboxUnchecked:"checkbox-unchecked",radioButtonOn:"radio-button-on",radioButtonOff:"radio-button-off",smallLeft:"small-left",smallRight:"small-right"},apiFunctions:{getGridId:Kc,destroy:jc,isDestroyed:$c,getGridOption:qc,setGridOption:Zc,updateGridOptions:Hn,isModuleRegistered:Yc},dependsOn:[Yh,wh,Ph,Dp,_g,Uh,Ug,wp,Lp,jg,sp,dp,hp,qg,su,Qh,Ip]},Hp=()=>`No AG Grid modules are registered! It is recommended to start with all Community features via the AllCommunityModule: + + import { ModuleRegistry, AllCommunityModule } from 'ag-grid-community'; + + ModuleRegistry.registerModules([ AllCommunityModule ]); + `;function Gp({moduleName:e,rowModelType:t}){return`To use the ${e}Module you must set the gridOption "rowModelType='${t}'"`}var Jo=class Se{static applyGlobalGridOptions(t){if(!Se.gridOptions)return{...t};let o={};return Y(o,Se.gridOptions,!0,!0),Se.mergeStrategy==="deep"?Y(o,t,!0,!0):o={...o,...t},Se.gridOptions.context&&(o.context=Se.gridOptions.context),t.context&&(Se.mergeStrategy==="deep"&&o.context&&Y(t.context,o.context,!0,!0),o.context=t.context),o}};Jo.gridOptions=void 0;Jo.mergeStrategy="shallow";var Bp=Jo;function Op(e,t,o){if(!t)return K(11),{};const s=o;let i;if(!(s!=null&&s.setThemeOnGridDiv)){const r=q({tag:"div"});r.style.height="100%",e.appendChild(r),e=r,i=()=>e.remove()}return new Vp().create(e,t,r=>{const l=new zc(e);r.createBean(l)},void 0,o,i)}var Wp=1,Vp=class{create(e,t,o,s,i,n){const r=Bp.applyGlobalGridOptions(t),l=r.gridId??String(Wp++),a=this.getRegisteredModules(i,l,r.rowModelType),d=this.createBeansList(r.rowModelType,a,l),c=this.createProvidedBeans(e,r,i);if(!d)return;const h={providedBeanInstances:c,beanClasses:d,gridId:l,beanInitComparator:xc,beanDestroyComparator:Dc,derivedBeans:[Rc],destroyCallback:n},u=new xa(h);return this.registerModuleFeatures(u,a),o(u),u.getBean("syncSvc").start(),s&&s(u),u.getBean("gridApi")}getRegisteredModules(e,t,o){var s;return Mt(Ap,void 0,!0),(s=e==null?void 0:e.modules)==null||s.forEach(i=>Mt(i,t)),ya(t,Js(o))}registerModuleFeatures(e,t){const o=e.getBean("registry"),s=e.getBean("apiFunctionSvc");t.forEach(i=>{o.registerModule(i);const n=i.apiFunctions;n&&Object.keys(n).forEach(l=>{s==null||s.addFunction(l,n[l])})})}createProvidedBeans(e,t,o){let s=o?o.frameworkOverrides:null;V(s)&&(s=new Mn);const i={gridOptions:t,eGridDiv:e,globalListener:o?o.globalListener:null,globalSyncListener:o?o.globalSyncListener:null,frameworkOverrides:s};return o&&o.providedBeanInstances&&Object.assign(i,o.providedBeanInstances),i}createBeansList(e,t,o){const s={clientSide:"ClientSideRowModel",infinite:"InfiniteRowModel",serverSide:"ServerSideRowModel",viewport:"ViewportRowModel"},i=Js(e),n=s[i];if(!n){$e(201,{rowModelType:i},`Unknown rowModelType ${i}.`);return}if(!Sa()){$e(272,void 0,Hp());return}if(!e){const l=Object.entries(s).filter(([a,d])=>To(d,o,a));if(l.length==1){const[a,d]=l[0];if(a!==i){const c={moduleName:d,rowModelType:a};$e(275,c,Gp(c));return}}}if(!To(n,o,i)){$e(200,{reasonOrId:`rowModelType = '${i}'`,moduleName:n,gridScoped:cn(),gridId:o,rowModelType:i},`Missing module ${n}Module for rowModelType ${i}.`);return}const r=new Set;return t.forEach(l=>{var a;return(a=l.beans)==null?void 0:a.forEach(d=>r.add(d))}),Array.from(r)}};function Js(e){return e??"clientSide"}var Np=class{wrap(e,t,o,s){const i=this.createWrapper(e,s);return t==null||t.forEach(n=>{this.createMethod(i,n,!0)}),o==null||o.forEach(n=>{this.createMethod(i,n,!1)}),i}createMethod(e,t,o){e.addMethod(t,this.createMethodProxy(e,t,o))}createMethodProxy(e,t,o){return function(){return e.hasMethod(t)?e.callMethod(t,arguments):(o&&I(49,{methodName:t}),null)}}};function zp(e,t={}){const o=t?t.rowNodes:void 0;e.frameworkOverrides.wrapIncoming(()=>e.rowRenderer.redrawRows(o))}function tr(e,t,o,s,i){t&&(s&&t.parent&&t.parent.level!==-1&&tr(e,t.parent,o,s,i),t.setExpanded(o,void 0,i))}function _p(e,t){return e.rowModel.getRowNode(t)}function Up(e,t,o,s){e.rowRenderer.addRenderedRowListener(t,o,s)}function Kp(e){return e.rowRenderer.getRenderedNodes()}function jp(e,t,o){e.rowModel.forEachNode(t,o)}function $p(e){return e.rowRenderer.firstRenderedRow}function qp(e){return e.rowRenderer.lastRenderedRow}function Zp(e,t){return e.rowModel.getRow(t)}function Yp(e){return e.rowModel.getRowCount()}var Qp={moduleName:"RowApi",version:G,apiFunctions:{redrawRows:zp,setRowNodeExpanded:tr,getRowNode:_p,addRenderedRowListener:Up,getRenderedNodes:Kp,forEachNode:jp,getFirstDisplayedRowIndex:$p,getLastDisplayedRowIndex:qp,getDisplayedRowAtIndex:Zp,getDisplayedRowCount:Yp}},Xp=Object.defineProperty,Jp=(e,t,o)=>t in e?Xp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,Ge=(e,t,o)=>Jp(e,typeof t!="symbol"?t+"":t,o);class ot{static getComponentDefinition(t,o){let s;return typeof t=="string"?s=this.searchForComponentInstance(o,t):s={extends:oi({...t})},s||K(114,{component:t}),s.extends?(s.extends.setup&&(s.setup=s.extends.setup),s.extends.props=this.addParamsToProps(s.extends.props)):s.props=this.addParamsToProps(s.props),s}static addParamsToProps(t){return!t||Array.isArray(t)&&t.indexOf("params")===-1?t=["params",...t||[]]:typeof t=="object"&&!t.params&&(t.params={type:Object}),t}static createAndMountComponent(t,o,s,i){const n=ot.getComponentDefinition(t,s);if(!n)return;const{vNode:r,destroy:l,el:a}=this.mount(n,{params:Object.freeze(o)},s,i||{});return{componentInstance:r.component.proxy,element:a,destroy:l}}static mount(t,o,s,i){let n=ni(t,o);n.appContext={...s.appContext,provides:i};let r=document.createElement("div");return as(n,r),{vNode:n,destroy:()=>{r&&as(null,r),r=null,n=null},el:r}}static searchForComponentInstance(t,o,s=10,i=!1){let n=null,r=0,l=t.parent;for(;!n&&l&&l.components&&++r{let o;return()=>{const s=function(){e()};window.clearTimeout(o),o=window.setTimeout(s,t)}};function rf(e){return e&&e.constructor&&e.constructor.toString().substring(0,5)==="class"}function Ke(e){const t=o=>rf(o)?ls(o):Array.isArray(o)?o.map(s=>t(s)):dr(o)||cr(o)||hr(o)?t(ls(o)):o;return t(e)}const lf={ref:"root"},af=oi({__name:"AgGridVue",props:ns(ur({gridOptions:{},modules:{},statusBar:{},sideBar:{type:[Object,String,Array,Boolean,null]},suppressContextMenu:{type:Boolean},preventDefaultOnContextMenu:{type:Boolean},allowContextMenuWithControlKey:{type:Boolean},columnMenu:{},suppressMenuHide:{type:Boolean},enableBrowserTooltips:{type:Boolean},tooltipTrigger:{},tooltipShowDelay:{},tooltipHideDelay:{},tooltipMouseTrack:{type:Boolean},tooltipShowMode:{},tooltipInteraction:{type:Boolean},popupParent:{},copyHeadersToClipboard:{type:Boolean},copyGroupHeadersToClipboard:{type:Boolean},clipboardDelimiter:{},suppressCopyRowsToClipboard:{type:Boolean},suppressCopySingleCellRanges:{type:Boolean},suppressLastEmptyLineOnPaste:{type:Boolean},suppressClipboardPaste:{type:Boolean},suppressClipboardApi:{type:Boolean},suppressCutToClipboard:{type:Boolean},columnDefs:{},defaultColDef:{},defaultColGroupDef:{},columnTypes:{},dataTypeDefinitions:{},maintainColumnOrder:{type:Boolean},enableStrictPivotColumnOrder:{type:Boolean},suppressFieldDotNotation:{type:Boolean},headerHeight:{},groupHeaderHeight:{},floatingFiltersHeight:{},pivotHeaderHeight:{},pivotGroupHeaderHeight:{},allowDragFromColumnsToolPanel:{type:Boolean},suppressMovableColumns:{type:Boolean},suppressColumnMoveAnimation:{type:Boolean},suppressMoveWhenColumnDragging:{type:Boolean},suppressDragLeaveHidesColumns:{type:Boolean},suppressGroupChangesColumnVisibility:{type:[Boolean,String]},suppressMakeColumnVisibleAfterUnGroup:{type:Boolean},suppressRowGroupHidesColumns:{type:Boolean},colResizeDefault:{},suppressAutoSize:{type:Boolean},autoSizePadding:{},skipHeaderOnAutoSize:{type:Boolean},autoSizeStrategy:{},components:{},editType:{},singleClickEdit:{type:Boolean},suppressClickEdit:{type:Boolean},readOnlyEdit:{type:Boolean},stopEditingWhenCellsLoseFocus:{type:Boolean},enterNavigatesVertically:{type:Boolean},enterNavigatesVerticallyAfterEdit:{type:Boolean},enableCellEditingOnBackspace:{type:Boolean},undoRedoCellEditing:{type:Boolean},undoRedoCellEditingLimit:{},defaultCsvExportParams:{},suppressCsvExport:{type:Boolean},defaultExcelExportParams:{},suppressExcelExport:{type:Boolean},excelStyles:{},findSearchValue:{},findOptions:{},quickFilterText:{},cacheQuickFilter:{type:Boolean},includeHiddenColumnsInQuickFilter:{type:Boolean},quickFilterParser:{type:Function},quickFilterMatcher:{type:Function},applyQuickFilterBeforePivotOrAgg:{type:Boolean},excludeChildrenWhenTreeDataFiltering:{type:Boolean},enableAdvancedFilter:{type:Boolean},alwaysPassFilter:{type:Function},includeHiddenColumnsInAdvancedFilter:{type:Boolean},advancedFilterParent:{},advancedFilterBuilderParams:{},suppressAdvancedFilterEval:{type:Boolean},suppressSetFilterByDefault:{type:Boolean},enableCharts:{type:Boolean},chartThemes:{},customChartThemes:{},chartThemeOverrides:{},chartToolPanelsDef:{},chartMenuItems:{type:[Array,Function]},loadingCellRenderer:{},loadingCellRendererParams:{},loadingCellRendererSelector:{type:Function},localeText:{},masterDetail:{type:Boolean},keepDetailRows:{type:Boolean},keepDetailRowsCount:{},detailCellRenderer:{},detailCellRendererParams:{},detailRowHeight:{},detailRowAutoHeight:{type:Boolean},context:{},alignedGrids:{type:[Array,Function]},tabIndex:{},rowBuffer:{},valueCache:{type:Boolean},valueCacheNeverExpires:{type:Boolean},enableCellExpressions:{type:Boolean},suppressTouch:{type:Boolean},suppressFocusAfterRefresh:{type:Boolean},suppressBrowserResizeObserver:{type:Boolean},suppressPropertyNamesCheck:{type:Boolean},suppressChangeDetection:{type:Boolean},debug:{type:Boolean},loading:{type:Boolean},overlayLoadingTemplate:{},loadingOverlayComponent:{},loadingOverlayComponentParams:{},suppressLoadingOverlay:{type:Boolean},overlayNoRowsTemplate:{},noRowsOverlayComponent:{},noRowsOverlayComponentParams:{},suppressNoRowsOverlay:{type:Boolean},pagination:{type:Boolean},paginationPageSize:{},paginationPageSizeSelector:{type:[Array,Boolean]},paginationAutoPageSize:{type:Boolean},paginateChildRows:{type:Boolean},suppressPaginationPanel:{type:Boolean},pivotMode:{type:Boolean},pivotPanelShow:{},pivotMaxGeneratedColumns:{},pivotDefaultExpanded:{},pivotColumnGroupTotals:{},pivotRowTotals:{},pivotSuppressAutoColumn:{type:Boolean},suppressExpandablePivotGroups:{type:Boolean},functionsReadOnly:{type:Boolean},aggFuncs:{},suppressAggFuncInHeader:{type:Boolean},alwaysAggregateAtRootLevel:{type:Boolean},aggregateOnlyChangedColumns:{type:Boolean},suppressAggFilteredOnly:{type:Boolean},removePivotHeaderRowWhenSingleValueColumn:{type:Boolean},animateRows:{type:Boolean},cellFlashDuration:{},cellFadeDuration:{},allowShowChangeAfterFilter:{type:Boolean},domLayout:{},ensureDomOrder:{type:Boolean},enableCellSpan:{type:Boolean},enableRtl:{type:Boolean},suppressColumnVirtualisation:{type:Boolean},suppressMaxRenderedRowRestriction:{type:Boolean},suppressRowVirtualisation:{type:Boolean},rowDragManaged:{type:Boolean},suppressRowDrag:{type:Boolean},suppressMoveWhenRowDragging:{type:Boolean},rowDragEntireRow:{type:Boolean},rowDragMultiRow:{type:Boolean},rowDragText:{type:Function},dragAndDropImageComponent:{},dragAndDropImageComponentParams:{},fullWidthCellRenderer:{},fullWidthCellRendererParams:{},embedFullWidthRows:{type:Boolean},groupDisplayType:{},groupDefaultExpanded:{},autoGroupColumnDef:{},groupMaintainOrder:{type:Boolean},groupSelectsChildren:{type:Boolean},groupLockGroupColumns:{},groupAggFiltering:{type:[Boolean,Function]},groupTotalRow:{type:[String,Function]},grandTotalRow:{},suppressStickyTotalRow:{type:[Boolean,String]},groupSuppressBlankHeader:{type:Boolean},groupSelectsFiltered:{type:Boolean},showOpenedGroup:{type:Boolean},groupHideParentOfSingleChild:{type:[Boolean,String]},groupRemoveSingleChildren:{type:Boolean},groupRemoveLowestSingleChildren:{type:Boolean},groupHideOpenParents:{type:Boolean},groupAllowUnbalanced:{type:Boolean},rowGroupPanelShow:{},groupRowRenderer:{},groupRowRendererParams:{},treeData:{type:Boolean},treeDataChildrenField:{},treeDataParentIdField:{},rowGroupPanelSuppressSort:{type:Boolean},suppressGroupRowsSticky:{type:Boolean},pinnedTopRowData:{},pinnedBottomRowData:{},enableRowPinning:{type:[Boolean,String]},isRowPinnable:{type:Function},isRowPinned:{type:Function},rowModelType:{},rowData:{},asyncTransactionWaitMillis:{},suppressModelUpdateAfterUpdateTransaction:{type:Boolean},datasource:{},cacheOverflowSize:{},infiniteInitialRowCount:{},serverSideInitialRowCount:{},suppressServerSideFullWidthLoadingRow:{type:Boolean},cacheBlockSize:{},maxBlocksInCache:{},maxConcurrentDatasourceRequests:{},blockLoadDebounceMillis:{},purgeClosedRowNodes:{type:Boolean},serverSideDatasource:{},serverSideSortAllLevels:{type:Boolean},serverSideEnableClientSideSort:{type:Boolean},serverSideOnlyRefreshFilteredGroups:{type:Boolean},serverSidePivotResultFieldSeparator:{},viewportDatasource:{},viewportRowModelPageSize:{},viewportRowModelBufferSize:{},alwaysShowHorizontalScroll:{type:Boolean},alwaysShowVerticalScroll:{type:Boolean},debounceVerticalScrollbar:{type:Boolean},suppressHorizontalScroll:{type:Boolean},suppressScrollOnNewData:{type:Boolean},suppressScrollWhenPopupsAreOpen:{type:Boolean},suppressAnimationFrame:{type:Boolean},suppressMiddleClickScrolls:{type:Boolean},suppressPreventDefaultOnMouseWheel:{type:Boolean},scrollbarWidth:{},rowSelection:{},cellSelection:{type:[Boolean,Object]},rowMultiSelectWithClick:{type:Boolean},suppressRowDeselection:{type:Boolean},suppressRowClickSelection:{type:Boolean},suppressCellFocus:{type:Boolean},suppressHeaderFocus:{type:Boolean},selectionColumnDef:{},rowNumbers:{type:[Boolean,Object]},suppressMultiRangeSelection:{type:Boolean},enableCellTextSelection:{type:Boolean},enableRangeSelection:{type:Boolean},enableRangeHandle:{type:Boolean},enableFillHandle:{type:Boolean},fillHandleDirection:{},suppressClearOnFillReduction:{type:Boolean},sortingOrder:{},accentedSort:{type:Boolean},unSortIcon:{type:Boolean},suppressMultiSort:{type:Boolean},alwaysMultiSort:{type:Boolean},multiSortKey:{},suppressMaintainUnsortedOrder:{type:Boolean},icons:{},rowHeight:{},rowStyle:{},rowClass:{},rowClassRules:{},suppressRowHoverHighlight:{type:Boolean},suppressRowTransform:{type:Boolean},columnHoverHighlight:{type:Boolean},gridId:{},deltaSort:{type:Boolean},treeDataDisplayType:{},enableGroupEdit:{type:Boolean},initialState:{},theme:{},loadThemeGoogleFonts:{type:Boolean},themeCssLayer:{},styleNonce:{},themeStyleContainer:{},getContextMenuItems:{type:Function},getMainMenuItems:{type:Function},postProcessPopup:{type:Function},processUnpinnedColumns:{type:Function},processCellForClipboard:{type:Function},processHeaderForClipboard:{type:Function},processGroupHeaderForClipboard:{type:Function},processCellFromClipboard:{type:Function},sendToClipboard:{type:Function},processDataFromClipboard:{type:Function},isExternalFilterPresent:{type:Function},doesExternalFilterPass:{type:Function},getChartToolbarItems:{type:Function},createChartContainer:{type:Function},focusGridInnerElement:{type:Function},navigateToNextHeader:{type:Function},tabToNextHeader:{type:Function},navigateToNextCell:{type:Function},tabToNextCell:{type:Function},getLocaleText:{type:Function},getDocument:{type:Function},paginationNumberFormatter:{type:Function},getGroupRowAgg:{type:Function},isGroupOpenByDefault:{type:Function},initialGroupOrderComparator:{type:Function},processPivotResultColDef:{type:Function},processPivotResultColGroupDef:{type:Function},getDataPath:{type:Function},getChildCount:{type:Function},getServerSideGroupLevelParams:{type:Function},isServerSideGroupOpenByDefault:{type:Function},isApplyServerSideTransaction:{type:Function},isServerSideGroup:{type:Function},getServerSideGroupKey:{type:Function},getBusinessKeyForNode:{type:Function},getRowId:{type:Function},resetRowDataOnUpdate:{type:Boolean},processRowPostCreate:{type:Function},isRowSelectable:{type:Function},isRowMaster:{type:Function},fillOperation:{type:Function},postSortRows:{type:Function},getRowStyle:{type:Function},getRowClass:{type:Function},getRowHeight:{type:Function},isFullWidthRow:{type:Function},"onTool-panel-visible-changed":{},"onTool-panel-size-changed":{},"onColumn-menu-visible-changed":{},"onContext-menu-visible-changed":{},"onCut-start":{},"onCut-end":{},"onPaste-start":{},"onPaste-end":{},"onColumn-visible":{},"onColumn-pinned":{},"onColumn-resized":{},"onColumn-moved":{},"onColumn-value-changed":{},"onColumn-pivot-mode-changed":{},"onColumn-pivot-changed":{},"onColumn-group-opened":{},"onNew-columns-loaded":{},"onGrid-columns-changed":{},"onDisplayed-columns-changed":{},"onVirtual-columns-changed":{},"onColumn-everything-changed":{},"onColumn-header-mouse-over":{},"onColumn-header-mouse-leave":{},"onColumn-header-clicked":{},"onColumn-header-context-menu":{},"onComponent-state-changed":{},"onCell-value-changed":{},"onCell-edit-request":{},"onRow-value-changed":{},"onCell-editing-started":{},"onCell-editing-stopped":{},"onRow-editing-started":{},"onRow-editing-stopped":{},"onUndo-started":{},"onUndo-ended":{},"onRedo-started":{},"onRedo-ended":{},"onCell-selection-delete-start":{},"onCell-selection-delete-end":{},"onRange-delete-start":{},"onRange-delete-end":{},"onFill-start":{},"onFill-end":{},"onFilter-opened":{},"onFilter-changed":{},"onFilter-modified":{},"onAdvanced-filter-builder-visible-changed":{},"onFind-changed":{},"onChart-created":{},"onChart-range-selection-changed":{},"onChart-options-changed":{},"onChart-destroyed":{},"onCell-key-down":{},"onGrid-ready":{},"onGrid-pre-destroyed":{},"onFirst-data-rendered":{},"onGrid-size-changed":{},"onModel-updated":{},"onVirtual-row-removed":{},"onViewport-changed":{},"onBody-scroll":{},"onBody-scroll-end":{},"onDrag-started":{},"onDrag-stopped":{},"onDrag-cancelled":{},"onState-updated":{},"onPagination-changed":{},"onRow-drag-enter":{},"onRow-drag-move":{},"onRow-drag-leave":{},"onRow-drag-end":{},"onRow-drag-cancel":{},"onRow-resize-started":{},"onRow-resize-ended":{},"onColumn-row-group-changed":{},"onRow-group-opened":{},"onExpand-or-collapse-all":{},"onPivot-max-columns-exceeded":{},"onPinned-row-data-changed":{},"onPinned-rows-changed":{},"onRow-data-updated":{},"onAsync-transactions-flushed":{},"onStore-refreshed":{},"onHeader-focused":{},"onCell-clicked":{},"onCell-double-clicked":{},"onCell-focused":{},"onCell-mouse-over":{},"onCell-mouse-out":{},"onCell-mouse-down":{},"onRow-clicked":{},"onRow-double-clicked":{},"onRow-selected":{},"onSelection-changed":{},"onCell-context-menu":{},"onRange-selection-changed":{},"onCell-selection-changed":{},"onTooltip-show":{},"onTooltip-hide":{},"onSort-changed":{}},sf()),{modelValue:{},modelModifiers:{}}),emits:ns(["update:modelValue"],["update:modelValue"]),setup(e,{expose:t,emit:o}){const s=e,i=sr("root"),n=J(void 0),r=J(!1),l=J(!1),a=J(!1),d=J({}),c=J(null),h=ir(s);Ys().filter(F=>F!="gridOptions").forEach(F=>{rs(()=>h[F],(T,M)=>{(F==="rowData"&&!f.value||F!=="rowData")&&P(F,T),f.value=!1},{deep:!0})});const u=new Set(["rowDataUpdated","cellValueChanged","rowValueChanged"]),g=nr(e,"modelValue"),p=J(!1),f=J(!1),C=o;rs(g,(F,T)=>{r.value&&(f.value||(p.value=!0,P("rowData",Ke(F),Ke(T))),f.value=!1)},{deep:!0});const y=nf(()=>{f.value=!0,C("update:modelValue",D())},10),S=at(),w=F=>{var T,M;a.value&&u.has(F)&&(M=(T=S==null?void 0:S.vnode)==null?void 0:T.props)!=null&&M["onUpdate:modelValue"]&&y()},R=()=>g.value||s.rowData||s.gridOptions.rowData,D=()=>{const F=[];return n==null||n.value.forEachLeafNode(T=>{F.push(T.data)}),F},b=F=>T=>{if(l.value)return;T==="gridReady"&&(a.value=!0);const M=Xn.has(T);M&&!F||!M&&F||u.has(T)&&(p.value||w(T),p.value=!1)},P=(F,T,M)=>{if(r.value){let B=T.value||T;F==="rowData"&&B!=null&&(B=Ke(B)),d.value[F]=B,c.value==null&&(c.value=window.setTimeout(()=>{c.value=null,rl(d.value,n.value),d.value={}},0))}},L=()=>Object.create(at().provides);return rr(()=>{Mt(Qp,void 0,!0);const F=new ef(at(),L()),T={globalListener:b(),globalSyncListener:b(!0),frameworkOverrides:new of(at()),providedBeanInstances:{frameworkCompWrapper:F},modules:s.modules},M=lr(nl(Ke(s.gridOptions),s,[...Ys(),...xg().map(_=>_i(_))])),B=R();B!==void 0&&(M.rowData=Ke(B)),n.value=Op(i.value,M,T),r.value=!0}),ar(()=>{var F;r.value&&((F=n==null?void 0:n.value)==null||F.destroy(),l.value=!0)}),t({api:n}),(F,T)=>(ii(),si("div",lf,null,512))}}),df={style:{width:"100%"}},uf=JSON.parse('{"title":"AG Grid 래퍼","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/ag-grid.md","filePath":"components/grid/ag-grid.md"}'),cf={name:"components/grid/ag-grid.md"},gf=Object.assign(cf,{setup(e){const t=J([{field:"name",headerName:"이름",sortable:!0,filter:!0},{field:"age",headerName:"나이",sortable:!0,filter:!0},{field:"email",headerName:"이메일",sortable:!0,filter:!0}]),o=J([{name:"홍길동",age:30,email:"hong@example.com"},{name:"김철수",age:25,email:"kim@example.com"},{name:"이영희",age:28,email:"lee@example.com"}]),s=J({theme:"legacy",defaultColDef:{resizable:!0,sortable:!0,filter:!0}});return(i,n)=>(ii(),si("div",null,[n[0]||(n[0]=ds(`

AG Grid 래퍼

개요

AG Grid를 Vue 컴포넌트로 사용하기 위한 래퍼입니다.

기본 사용

vue
<template>
+  <AgGridVue
+    :columnDefs="columnDefs"
+    :rowData="rowData"
+    class="ag-theme-balham"
+    style="height: 500px;"
+  />
+</template>
+
+<script setup>
+import { AgGridVue } from 'ag-grid-vue3'
+
+const columnDefs = ref([
+  { field: 'id', headerName: 'ID' },
+  { field: 'name', headerName: '이름' },
+])
+
+const rowData = ref([])
+</script>
`,5)),cs("template",null,[cs("div",df,[ni(gr(af),{class:"ag-theme-balham",columnDefs:t.value,rowData:o.value,gridOptions:s.value,style:{height:"400px"}},null,8,["columnDefs","rowData","gridOptions"])])]),n[1]||(n[1]=ds(`

셀 에디터

커스텀 셀 에디터를 사용할 수 있습니다:

javascript
{
+  field: 'department',
+  editable : true,
+  cellEditor : 'GridMultiSelectWrapper',
+  cellEditorParams : {
+    // 파라미터
+  }
+}
`,3))]))}});export{uf as __pageData,gf as default}; diff --git a/assets/components_grid_ag-grid.md.B5SS5q6u.lean.js b/assets/components_grid_ag-grid.md.B5SS5q6u.lean.js new file mode 100644 index 0000000..66f1405 --- /dev/null +++ b/assets/components_grid_ag-grid.md.B5SS5q6u.lean.js @@ -0,0 +1,23 @@ +import{d as oi,aI as ns,aJ as sr,p as J,a5 as ir,q as rs,aK as nr,c as si,v as rr,a9 as at,an as lr,x as ar,o as ii,ac as ls,G as ni,as,ag as dr,aL as cr,aM as hr,aN as ur,aG as ds,j as cs,k as gr}from"./chunks/framework.DytOxJW6.js";var st=class{constructor(){this.allSyncListeners=new Map,this.allAsyncListeners=new Map,this.globalSyncListeners=new Set,this.globalAsyncListeners=new Set,this.asyncFunctionsQueue=[],this.scheduled=!1,this.firedEvents={}}setFrameworkOverrides(e){this.frameworkOverrides=e}getListeners(e,t,o){const s=t?this.allAsyncListeners:this.allSyncListeners;let i=s.get(e);return!i&&o&&(i=new Set,s.set(e,i)),i}noRegisteredListenersExist(){return this.allSyncListeners.size===0&&this.allAsyncListeners.size===0&&this.globalSyncListeners.size===0&&this.globalAsyncListeners.size===0}addEventListener(e,t,o=!1){this.getListeners(e,o,!0).add(t)}removeEventListener(e,t,o=!1){const s=this.getListeners(e,o,!1);s&&(s.delete(t),s.size===0&&(o?this.allAsyncListeners:this.allSyncListeners).delete(e))}addGlobalListener(e,t=!1){this.getGlobalListeners(t).add(e)}removeGlobalListener(e,t=!1){this.getGlobalListeners(t).delete(e)}dispatchEvent(e){const t=e;this.dispatchToListeners(t,!0),this.dispatchToListeners(t,!1),this.firedEvents[t.type]=!0}dispatchEventOnce(e){this.firedEvents[e.type]||this.dispatchEvent(e)}dispatchToListeners(e,t){const o=e.type;if(t&&"event"in e){const l=e.event;l instanceof Event&&(e.eventPath=l.composedPath())}const{frameworkOverrides:s}=this,i=l=>{const a=s?()=>s.wrapIncoming(l):l;t?this.dispatchAsync(a):a()},n=this.getListeners(o,t,!1);if(((n==null?void 0:n.size)??0)>0){const l=new Set(n);for(const a of l)n!=null&&n.has(a)&&i(()=>a(e))}const r=this.getGlobalListeners(t);if(r.size>0){const l=new Set(r);for(const a of l)i(()=>a(o,e))}}getGlobalListeners(e){return e?this.globalAsyncListeners:this.globalSyncListeners}dispatchAsync(e){if(this.asyncFunctionsQueue.push(e),!this.scheduled){const t=()=>{window.setTimeout(this.flushAsyncQueue.bind(this),0)};this.frameworkOverrides?this.frameworkOverrides.wrapIncoming(t):t(),this.scheduled=!0}}flushAsyncQueue(){this.scheduled=!1;const e=this.asyncFunctionsQueue.slice();this.asyncFunctionsQueue=[],e.forEach(t=>t())}};function pr(e,t){return t}function ri(e){return(e==null?void 0:e.getLocaleTextFunc())??pr}function Ve(e,t,o){o==null||typeof o=="string"&&o==""?li(e,t):ue(e,t,o)}function ue(e,t,o){e.setAttribute(ai(t),o.toString())}function li(e,t){e.removeAttribute(ai(t))}function ai(e){return`aria-${e}`}function Ft(e,t){t?e.setAttribute("role",t):e.removeAttribute("role")}function fr(e){let t;return e==="asc"?t="ascending":e==="desc"?t="descending":e==="mixed"?t="other":t="none",t}function Cr(e){return e.getAttribute("aria-label")}function di(e,t){Ve(e,"label",t)}function hs(e,t){Ve(e,"labelledby",t)}function ci(e,t){Ve(e,"live",t)}function mr(e,t){Ve(e,"atomic",t)}function vr(e,t){Ve(e,"relevant",t)}function hi(e,t){Ve(e,"hidden",t)}function wr(e,t){ue(e,"expanded",t)}function yr(e,t){ue(e,"multiselectable",t)}function br(e,t){ue(e,"rowcount",t)}function ui(e,t){ue(e,"rowindex",t)}function Sr(e,t){ue(e,"colcount",t)}function gi(e,t){ue(e,"colindex",t)}function Rr(e,t){ue(e,"colspan",t)}function Fr(e,t){ue(e,"sort",t)}function xr(e){li(e,"sort")}function Dr(e,t){return t===void 0?e("ariaIndeterminate","indeterminate"):t===!0?e("ariaChecked","checked"):e("ariaUnchecked","unchecked")}var Xt,Jt,eo,to,So,Ro,oo;function Ho(){return Xt===void 0&&(Xt=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)),Xt}function pi(){return Jt===void 0&&(Jt=/(firefox)/i.test(navigator.userAgent)),Jt}function fi(){return eo===void 0&&(eo=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)),eo}function Ze(){return to===void 0&&(to=/iPad|iPhone|iPod/.test(navigator.platform)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1),to}function us(e){if(!e)return null;const t=e.tabIndex,o=e.getAttribute("tabIndex");return t===-1&&(o===null||o===""&&!pi())?null:t.toString()}function Pr(){if(oo!==void 0)return oo;if(!document.body)return-1;let e=1e6;const t=pi()?6e6:1e9,o=document.createElement("div");for(document.body.appendChild(o);;){const s=e*2;if(o.style.height=s+"px",s>t||o.clientHeight!==s)break;e=s}return document.body.removeChild(o),oo=e,e}function Er(){return Ro==null&&Ci(),Ro}function Ci(){const e=document.body,t=document.createElement("div");t.style.width=t.style.height="100px",t.style.opacity="0",t.style.overflow="scroll",t.style.msOverflowStyle="scrollbar",t.style.position="absolute",e.appendChild(t);let o=t.offsetWidth-t.clientWidth;o===0&&t.clientWidth===0&&(o=null),t.parentNode&&t.parentNode.removeChild(t),o!=null&&(Ro=o,So=o===0)}function mi(){return So==null&&Ci(),So}var Tr="[tabindex], input, select, button, textarea, [href]",vi="[disabled], .ag-disabled:not(.ag-button), .ag-disabled *";function Go(e){const t=Element.prototype.matches||Element.prototype.msMatchesSelector,s=t.call(e,"input, select, button, textarea"),i=t.call(e,vi),n=De(e);return s&&!i&&n}function W(e,t,o={}){const{skipAriaHidden:s}=o;e.classList.toggle("ag-hidden",!t),s||hi(e,!t)}function kr(e,t,o={}){const{skipAriaHidden:s}=o;e.classList.toggle("ag-invisible",!t),s||hi(e,!t)}function wi(e,t){const o="disabled",s=t?n=>n.setAttribute(o,""):n=>n.removeAttribute(o);s(e);const i=e.querySelectorAll("input")??[];for(const n of i)s(n)}function Ie(e,t,o){let s=0;for(;e;){if(e.classList.contains(t))return!0;if(e=e.parentElement,typeof o=="number"){if(++s>o)break}else if(e===o)break}return!1}function Nt(e){const{height:t,width:o,borderTopWidth:s,borderRightWidth:i,borderBottomWidth:n,borderLeftWidth:r,paddingTop:l,paddingRight:a,paddingBottom:d,paddingLeft:c,marginTop:h,marginRight:u,marginBottom:g,marginLeft:p,boxSizing:f}=window.getComputedStyle(e);return{height:parseFloat(t||"0"),width:parseFloat(o||"0"),borderTopWidth:parseFloat(s||"0"),borderRightWidth:parseFloat(i||"0"),borderBottomWidth:parseFloat(n||"0"),borderLeftWidth:parseFloat(r||"0"),paddingTop:parseFloat(l||"0"),paddingRight:parseFloat(a||"0"),paddingBottom:parseFloat(d||"0"),paddingLeft:parseFloat(c||"0"),marginTop:parseFloat(h||"0"),marginRight:parseFloat(u||"0"),marginBottom:parseFloat(g||"0"),marginLeft:parseFloat(p||"0"),boxSizing:f}}function yi(e){const t=Nt(e);return t.boxSizing==="border-box"?t.height-t.paddingTop-t.paddingBottom:t.height}function xt(e){const t=Nt(e);return t.boxSizing==="border-box"?t.width-t.paddingLeft-t.paddingRight:t.width}function Ir(e){const t=e.getBoundingClientRect(),{borderTopWidth:o,borderLeftWidth:s,borderRightWidth:i,borderBottomWidth:n}=Nt(e);return{top:t.top+(o||0),left:t.left+(s||0),right:t.right+(i||0),bottom:t.bottom+(n||0)}}function Dt(e,t){let o=e.scrollLeft;return t&&(o=Math.abs(o)),o}function Pt(e,t,o){o&&(t*=-1),e.scrollLeft=t}function de(e){for(;e&&e.firstChild;)e.removeChild(e.firstChild)}function Ce(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function bi(e){return!!e.offsetParent}function De(e){const t=e;return t.checkVisibility?t.checkVisibility({checkVisibilityCSS:!0}):!(!bi(e)||window.getComputedStyle(e).visibility!=="visible")}function Bo(e){const t=document.createElement("div");return t.innerHTML=(e||"").trim(),t.firstChild}function Si(e,t,o){o&&o.nextSibling===t||(e.firstChild?o?o.nextSibling?e.insertBefore(t,o.nextSibling):e.appendChild(t):e.firstChild&&e.firstChild!==t&&e.insertAdjacentElement("afterbegin",t):e.appendChild(t))}function Ri(e,t){for(let o=0;o`-${t.toLocaleLowerCase()}`)}function it(e,t){if(t)for(const o of Object.keys(t)){const s=t[o];if(!o||!o.length||s==null)continue;const i=Lr(o),n=s.toString(),r=n.replace(/\s*!important/g,""),l=r.length!=n.length?"important":void 0;e.style.setProperty(i,r,l)}}function Mr(e){return e.clientWidthn==null?void 0:n.disconnect()}function be(e,t){const o=Wi(e);o.requestAnimationFrame?o.requestAnimationFrame(t):o.webkitRequestAnimationFrame?o.webkitRequestAnimationFrame(t):o.setTimeout(t,0)}var Di="data-ref",io;function gs(){return io??(io=document.createTextNode(" ")),io.cloneNode()}function q(e){const{attrs:t,children:o,cls:s,ref:i,role:n,tag:r}=e,l=document.createElement(r);if(s&&(l.className=s),i&&l.setAttribute(Di,i),n&&l.setAttribute("role",n),t)for(const a of Object.keys(t))l.setAttribute(a,t[a]);if(o)if(typeof o=="string")l.textContent=o;else{let a=!0;for(const d of o)d&&(typeof d=="string"?(l.appendChild(document.createTextNode(d)),a=!1):(a&&(l.appendChild(gs()),a=!1),l.append(q(d)),l.appendChild(gs())))}return l}var ps={};function Pi(e,t){ps[t]||(e(),ps[t]=!0)}function Xe(e,t,...o){e.get("debug")&&console.log("AG Grid: "+t,...o)}function Hr(e,...t){Pi(()=>console.warn("AG Grid: "+e,...t),e+(t==null?void 0:t.join("")))}function Ye(e,...t){Pi(()=>console.error("AG Grid: "+e,...t),e+(t==null?void 0:t.join("")))}var Gr={pending:!1,funcs:[]},Br={pending:!1,funcs:[]};function Fo(e,t="setTimeout",o){const s=t==="raf"?Br:Gr;if(s.funcs.push(e),s.pending)return;s.pending=!0;const i=()=>{const n=s.funcs.slice();s.funcs.length=0,s.pending=!1,n.forEach(r=>r())};t==="raf"?be(o,i):window.setTimeout(i,0)}function je(e,t,o){let s;return function(...i){const n=this;window.clearTimeout(s),s=window.setTimeout(function(){e.isAlive()&&t.apply(n,i)},o)}}function fs(e,t){let o=0;return function(...s){const i=this,n=Date.now();n-o{const a=Date.now()-i>o;(e()||a)&&(t(),r=!0,n!=null&&(window.clearInterval(n),n=null))};l(),r||(n=window.setInterval(l,10))}function Re(e){return e==null||e===""?null:e}function k(e){return e!=null&&e!==""}function V(e){return!k(e)}function xo(e){return e!=null&&typeof e.toString=="function"?e.toString():null}function Wr(e,t,o=!1){const s=e==null,i=t==null;if(e&&e.toNumber&&(e=e.toNumber()),t&&t.toNumber&&(t=t.toNumber()),s&&i)return 0;if(s)return-1;if(i)return 1;function n(r,l){return r>l?1:rr[1].length-n[1].length);let i=Do(e,t);for(const[n,r]of s){if(n===Ti)continue;const l=i.length-o;if(l<=0)break;const a="...",d=l+a.length,c=r.length-d>ms?r.slice(0,r.length-d)+a:r.slice(0,ms)+a;t.set(n,c),i=Do(e,t)}return i}function Ur(e,t){const o=new URLSearchParams;if(o.append(Ti,G),t)for(const n of Object.keys(t))o.append(n,zr(t[n]));const s=`${ki}/errors/${e}`,i=Do(s,o);return i.length<=Cs?i:_r(s,o,Cs)}var Kr=(e,t,o)=>{const s=Ur(e,t);return`${o?o+` +`:""}Visit ${s}${o?"":` + Alternatively register the ValidationModule to see the full message in the console.`}`};function I(...e){Wo(Hr,e[0],e[1])}function K(...e){Wo(Ye,e[0],e[1])}function $e(e,t,o){Wo(Ye,e,t,o)}function jr(e,t){const o=t[0];return`error #${o} `+Ii(o,t[1],e).join(" ")}function Li(...e){return jr(void 0,e)}function Mi(e,t){return e.get("rowModelType")===t}function Vo(e,t){return Mi(e,"clientSide")}function Ai(e,t){return Mi(e,"serverSide")}function $(e,t){return e.get("domLayout")===t}function Hi(e){return zi(e)!==void 0}function Gi(e){return typeof e.get("getRowHeight")=="function"}function $r(e,t){return t?!e.get("enableStrictPivotColumnOrder"):e.get("maintainColumnOrder")}function qr(e,t,o=!1,s){const{gos:i,environment:n}=e;if(s==null&&(s=n.getDefaultRowHeight()),Gi(i)){if(o)return{height:s,estimated:!0};const a={node:t,data:t.data},d=i.getCallback("getRowHeight")(a);if(Po(d))return d===0&&I(23),{height:Math.max(1,d),estimated:!1}}if(t.detail&&i.get("masterDetail"))return Zr(i);const r=i.get("rowHeight");return{height:r&&Po(r)?r:s,estimated:!1}}function Zr(e){if(e.get("detailRowAutoHeight"))return{height:1,estimated:!1};const t=e.get("detailRowHeight");return Po(t)?{height:t,estimated:!1}:{height:300,estimated:!1}}function Bi(e){const{environment:t,gos:o}=e,s=o.get("rowHeight");if(!s||V(s))return t.getDefaultRowHeight();const i=t.refreshRowHeightVariable();return i!==-1?i:(I(24),t.getDefaultRowHeight())}function Po(e){return!isNaN(e)&&typeof e=="number"&&isFinite(e)}function Oi(e,t,o){const s=t[e.getDomDataKey()];return s?s[o]:void 0}function Be(e,t,o,s){const i=e.getDomDataKey();let n=t[i];V(n)&&(n={},t[i]=n),n[o]=s}function oe(e){const{gos:t,eGridDiv:o}=e;let s=null;const i=t.get("getDocument");return i&&k(i)?s=i():o&&(s=o.ownerDocument),s&&k(s)?s:document}function Wi(e){return oe(e).defaultView||window}function Je(e){return e.eGridDiv.getRootNode()}function z(e){return Je(e).activeElement}function No(e){let t=null,o=null;try{t=oe(e).fullscreenElement}catch{}finally{t||(t=Je(e));const s=t.querySelector("body");s?o=s:t instanceof ShadowRoot?o=t:t instanceof Document?o=t==null?void 0:t.documentElement:o=t}return o}function Yr(e){const t=No(e);return(t==null?void 0:t.clientWidth)??(window.innerHeight||-1)}function Qr(e){const t=No(e);return(t==null?void 0:t.clientHeight)??(window.innerHeight||-1)}function Xr(e,t,o){const i=e.getBoundingClientRect().height,n=Yr(o)-2,r=Qr(o)-2;if(!e.offsetParent)return;const a=Ir(e.offsetParent),{clientY:d,clientX:c}=t;let h=d-a.top-i/2,u=c-a.left-10;const g=oe(o),p=g.defaultView||window,f=p.pageYOffset||g.documentElement.scrollTop,C=p.pageXOffset||g.documentElement.scrollLeft;n>0&&u+e.clientWidth>n+C&&(u=n+C-e.clientWidth),u<0&&(u=0),r>0&&h+e.clientHeight>r+f&&(h=r+f-e.clientHeight),h<0&&(h=0),e.style.left=`${u}px`,e.style.top=`${h}px`}function Jr(e){const t=z(e);return t===null||t===oe(e).body}function zo(e){return e.get("ensureDomOrder")?!1:e.get("animateRows")}function Vi(e){return!(e.get("paginateChildRows")||e.get("groupHideOpenParents")||$(e,"print"))}function ae(e){const t=e.get("autoGroupColumnDef");return!(t!=null&&t.comparator)&&!e.get("treeData")}function Ni(e,t){return t?!1:e.get("groupDisplayType")==="groupRows"}function el(e,t,o){return!!t.group&&!t.footer&&Ni(e,o)}function tl(e){return(e==null?void 0:e.checkboxes)??!0}function ol(e){if(typeof e=="object")return e.checkboxLocation??"selectionColumn"}function Oe(e){const t=e.get("cellSelection");return t!==void 0?!!t:e.get("enableRangeSelection")}function zi(e){const t="beanName"in e&&e.beanName==="gos"?e.get("rowSelection"):e.rowSelection;if(typeof t=="string")switch(t){case"multiple":return"multiRow";case"single":return"singleRow";default:return}switch(t==null?void 0:t.mode){case"multiRow":case"singleRow":return t.mode;default:return}}function sl(e){return zi(e)==="multiRow"}function il(e,t=!0){const o=e.get("rowSelection");return typeof o!="object"?t?"all":void 0:o.mode==="multiRow"?o.selectAll:"all"}function Et(e){return e.get("columnMenu")==="legacy"}function _i(e){return!e||e.length<2?e:"on"+e[0].toUpperCase()+e.substring(1)}function nl(e,t,o){typeof e!="object"&&(e={});const s={...e};return o.forEach(i=>{const n=t[i];typeof n<"u"&&(s[i]=n)}),s}function rl(e,t){if(!e)return;const o={};let s=!1;if(Object.keys(e).forEach(r=>{o[r]=e[r],s=!0}),!s)return;const i={type:"gridOptionsChanged",options:o};t.dispatchEvent(i);const n={type:"componentStateChanged",...o};t.dispatchEvent(n)}function A(e,t){return e.addGridCommonParams(t)}var Ui="__ag_Grid_Stop_Propagation",ll=["touchstart","touchend","touchmove","touchcancel","scroll"],al=["wheel"],no={};function Tt(e){e[Ui]=!0}function ve(e){return e[Ui]===!0}var Ki=(()=>{const e={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return o=>{if(typeof no[o]=="boolean")return no[o];const s=document.createElement(e[o]||"div");return o="on"+o,no[o]=o in s}})();function ji(e,t,o){let s=t;for(;s;){const i=Oi(e,s,o);if(i)return i;s=s.parentElement}return null}function dl(e,t,o,s){const i=$i(o);let n;i!=null&&(n={passive:i}),e&&e.addEventListener&&e.addEventListener(t,o,s,n)}var $i=e=>{const t=ll.includes(e),o=al.includes(e);if(t)return!0;if(o)return!1},v=class{constructor(){this.destroyFunctions=[],this.destroyed=!1,this.__v_skip=!0,this.propertyListenerId=0,this.lastChangeSetIdLookup={},this.isAlive=()=>!this.destroyed}preWireBeans(e){this.beans=e,this.stubContext=e.context,this.eventSvc=e.eventSvc,this.gos=e.gos}destroy(){const{destroyFunctions:e}=this;for(let t=0;tnull;let s;return cl(e)?(e.__addEventListener(t,o),s=()=>(e.__removeEventListener(t,o),null)):(e instanceof HTMLElement?dl(this.beans.frameworkOverrides,e,t,o):e.addEventListener(t,o),s=()=>(e.removeEventListener(t,o),null)),this.destroyFunctions.push(s),()=>(s(),this.destroyFunctions=this.destroyFunctions.filter(i=>i!==s),null)}setupGridOptionListener(e,t){const{gos:o}=this;o.addPropertyEventListener(e,t);const s=()=>(o.removePropertyEventListener(e,t),null);return this.destroyFunctions.push(s),()=>(s(),this.destroyFunctions=this.destroyFunctions.filter(i=>i!==s),null)}addManagedPropertyListener(e,t){return this.destroyed?()=>null:this.setupGridOptionListener(e,t)}addManagedPropertyListeners(e,t){if(this.destroyed)return;const o=e.join("-")+this.propertyListenerId++,s=i=>{if(i.changeSet){if(i.changeSet&&i.changeSet.id===this.lastChangeSetIdLookup[o])return;this.lastChangeSetIdLookup[o]=i.changeSet.id}const n={type:"gridPropertyChanged",changeSet:i.changeSet,source:i.source};t(n)};e.forEach(i=>this.setupGridOptionListener(i,s))}getLocaleTextFunc(){return ri(this.beans.localeSvc)}addDestroyFunc(e){this.isAlive()?this.destroyFunctions.push(e):e()}createOptionalManagedBean(e,t){return e?this.createManagedBean(e,t):void 0}createManagedBean(e,t){const o=this.createBean(e,t);return this.addDestroyFunc(this.destroyBean.bind(this,e,t)),o}createBean(e,t,o){return(t||this.stubContext).createBean(e,o)}destroyBean(e,t){return(t||this.stubContext).destroyBean(e)}destroyBeans(e,t){return(t||this.stubContext).destroyBeans(e)}};function cl(e){return e.__addEventListener!==void 0}var hl=new Set(["__proto__","constructor","prototype"]);function ul(e,t){if(e!=null){if(Array.isArray(e)){for(let o=0;o{if(hl.has(i))return;let r=e[i];r!==n&&(s&&r==null&&n!=null&&typeof n=="object"&&n.constructor===Object&&(r={},e[i]=r),vs(n)&&vs(r)&&!Array.isArray(r)?Y(r,n,o,s):(o||n!==void 0)&&(e[i]=n))})}function mt(e,t,o){if(!t||!e)return;if(!o)return e[t];const s=t.split(".");let i=e;for(let n=0;n"']/g,pl={"&":"&","<":"<",">":">",'"':""","'":"'"};function zt(e){return(e==null?void 0:e.toString().toString())??null}function vt(e){var t;return((t=zt(e))==null?void 0:t.replace(gl,o=>pl[o]))??null}var fl={resizable:!0,sortable:!0},Cl=0;function qi(){return Cl++}function we(e){return e instanceof _o}var _o=class extends v{constructor(e,t,o,s){super(),this.colDef=e,this.userProvidedColDef=t,this.colId=o,this.primary=s,this.isColumn=!0,this.instanceId=qi(),this.autoHeaderHeight=null,this.moving=!1,this.menuVisible=!1,this.lastLeftPinned=!1,this.firstRightPinned=!1,this.filterActive=!1,this.colEventSvc=new st,this.tooltipEnabled=!1,this.rowGroupActive=!1,this.pivotActive=!1,this.aggregationActive=!1,this.flex=null,this.colIdSanitised=vt(o)}destroy(){var e;super.destroy(),(e=this.beans.rowSpanSvc)==null||e.deregister(this)}getInstanceId(){return this.instanceId}setState(){const{colDef:e,beans:{sortSvc:t,pinnedCols:o,colFlex:s}}=this;t==null||t.initCol(this);const i=e.hide;i!==void 0?this.visible=!i:this.visible=!e.initialHide,o==null||o.initCol(this),s==null||s.initCol(this)}setColDef(e,t,o){var i;const s=e.spanRows!==this.colDef.spanRows;this.colDef=e,this.userProvidedColDef=t,this.initMinAndMaxWidths(),this.initDotNotation(),this.initTooltip(),s&&((i=this.beans.rowSpanSvc)==null||i.deregister(this),this.initRowSpan()),this.dispatchColEvent("colDefChanged",o)}getUserProvidedColDef(){return this.userProvidedColDef}getParent(){return this.parent}getOriginalParent(){return this.originalParent}postConstruct(){this.setState(),this.initMinAndMaxWidths(),this.resetActualWidth("gridInitializing"),this.initDotNotation(),this.initTooltip(),this.initRowSpan()}initDotNotation(){const{gos:e,colDef:{field:t,tooltipField:o}}=this,s=e.get("suppressFieldDotNotation");this.fieldContainsDots=k(t)&&t.indexOf(".")>=0&&!s,this.tooltipFieldContainsDots=k(o)&&o.indexOf(".")>=0&&!s}initMinAndMaxWidths(){const e=this.colDef;this.minWidth=e.minWidth??this.beans.environment.getDefaultColumnMinWidth(),this.maxWidth=e.maxWidth??Number.MAX_SAFE_INTEGER}initTooltip(){var e;(e=this.beans.tooltipSvc)==null||e.initCol(this)}initRowSpan(){var e;this.colDef.spanRows&&((e=this.beans.rowSpanSvc)==null||e.register(this))}resetActualWidth(e){const t=this.calculateColInitialWidth(this.colDef);this.setActualWidth(t,e,!0)}calculateColInitialWidth(e){let t;const o=e.width,s=e.initialWidth;return o!=null?t=o:s!=null?t=s:t=200,Math.max(Math.min(t,this.maxWidth),this.minWidth)}isEmptyGroup(){return!1}isRowGroupDisplayed(e){var t;return((t=this.beans.showRowGroupCols)==null?void 0:t.isRowGroupDisplayed(this,e))??!1}isPrimary(){return this.primary}isFilterAllowed(){return!!this.colDef.filter}isFieldContainsDots(){return this.fieldContainsDots}isTooltipEnabled(){return this.tooltipEnabled}isTooltipFieldContainsDots(){return this.tooltipFieldContainsDots}getHighlighted(){return this.highlighted}__addEventListener(e,t){this.colEventSvc.addEventListener(e,t)}__removeEventListener(e,t){this.colEventSvc.removeEventListener(e,t)}addEventListener(e,t){var s,i,n;this.frameworkEventListenerService=(i=(s=this.beans.frameworkOverrides).createLocalEventListenerWrapper)==null?void 0:i.call(s,this.frameworkEventListenerService,this.colEventSvc);const o=((n=this.frameworkEventListenerService)==null?void 0:n.wrap(e,t))??t;this.colEventSvc.addEventListener(e,o)}removeEventListener(e,t){var s;const o=((s=this.frameworkEventListenerService)==null?void 0:s.unwrap(e,t))??t;this.colEventSvc.removeEventListener(e,o)}createColumnFunctionCallbackParams(e){return A(this.gos,{node:e,data:e.data,column:this,colDef:this.colDef})}isSuppressNavigable(e){var t;return((t=this.beans.cellNavigation)==null?void 0:t.isSuppressNavigable(this,e))??!1}isCellEditable(e){var t;return((t=this.beans.editSvc)==null?void 0:t.isCellEditable(this,e))??!1}isSuppressFillHandle(){return!!this.colDef.suppressFillHandle}isAutoHeight(){return!!this.colDef.autoHeight}isAutoHeaderHeight(){return!!this.colDef.autoHeaderHeight}isRowDrag(e){return this.isColumnFunc(e,this.colDef.rowDrag)}isDndSource(e){return this.isColumnFunc(e,this.colDef.dndSource)}isCellCheckboxSelection(e){var t;return((t=this.beans.selectionSvc)==null?void 0:t.isCellCheckboxSelection(this,e))??!1}isSuppressPaste(e){var t;return this.isColumnFunc(e,((t=this.colDef)==null?void 0:t.suppressPaste)??null)}isResizable(){return!!this.getColDefValue("resizable")}getColDefValue(e){return this.colDef[e]??fl[e]}isColumnFunc(e,t){if(typeof t=="boolean")return t;if(typeof t=="function"){const o=this.createColumnFunctionCallbackParams(e);return t(o)}return!1}createColumnEvent(e,t){return A(this.gos,{type:e,column:this,columns:[this],source:t})}isMoving(){return this.moving}getSort(){return this.sort}isSortable(){return!!this.getColDefValue("sortable")}isSortAscending(){return this.sort==="asc"}isSortDescending(){return this.sort==="desc"}isSortNone(){return V(this.sort)}isSorting(){return k(this.sort)}getSortIndex(){return this.sortIndex}isMenuVisible(){return this.menuVisible}getAggFunc(){return this.aggFunc}getLeft(){return this.left}getOldLeft(){return this.oldLeft}getRight(){return this.left+this.actualWidth}setLeft(e,t){this.oldLeft=this.left,this.left!==e&&(this.left=e,this.dispatchColEvent("leftChanged",t))}isFilterActive(){return this.filterActive}isHovered(){var e;return I(261),!!((e=this.beans.colHover)!=null&&e.isHovered(this))}setFirstRightPinned(e,t){this.firstRightPinned!==e&&(this.firstRightPinned=e,this.dispatchColEvent("firstRightPinnedChanged",t))}setLastLeftPinned(e,t){this.lastLeftPinned!==e&&(this.lastLeftPinned=e,this.dispatchColEvent("lastLeftPinnedChanged",t))}isFirstRightPinned(){return this.firstRightPinned}isLastLeftPinned(){return this.lastLeftPinned}isPinned(){return this.pinned==="left"||this.pinned==="right"}isPinnedLeft(){return this.pinned==="left"}isPinnedRight(){return this.pinned==="right"}getPinned(){return this.pinned}setVisible(e,t){const o=e===!0;this.visible!==o&&(this.visible=o,this.dispatchColEvent("visibleChanged",t)),this.dispatchStateUpdatedEvent("hide")}isVisible(){return this.visible}isSpanHeaderHeight(){return!this.getColDef().suppressSpanHeaderHeight}getColumnGroupPaddingInfo(){let e=this.getParent();if(!e||!e.isPadding())return{numberOfParents:0,isSpanningTotal:!1};const t=e.getPaddingLevel()+1;let o=!0;for(;e;){if(!e.isPadding()){o=!1;break}e=e.getParent()}return{numberOfParents:t,isSpanningTotal:o}}getColDef(){return this.colDef}getDefinition(){return this.colDef}getColumnGroupShow(){return this.colDef.columnGroupShow}getColId(){return this.colId}getId(){return this.colId}getUniqueId(){return this.colId}getActualWidth(){return this.actualWidth}getAutoHeaderHeight(){return this.autoHeaderHeight}setAutoHeaderHeight(e){const t=e!==this.autoHeaderHeight;return this.autoHeaderHeight=e,t}createBaseColDefParams(e){return A(this.gos,{node:e,data:e.data,colDef:this.colDef,column:this})}getColSpan(e){if(V(this.colDef.colSpan))return 1;const t=this.createBaseColDefParams(e),o=this.colDef.colSpan(t);return Math.max(o,1)}getRowSpan(e){if(V(this.colDef.rowSpan))return 1;const t=this.createBaseColDefParams(e),o=this.colDef.rowSpan(t);return Math.max(o,1)}setActualWidth(e,t,o=!1){e=Math.max(e,this.minWidth),e=Math.min(e,this.maxWidth),this.actualWidth!==e&&(this.actualWidth=e,this.flex!=null&&t!=="flex"&&t!=="gridInitializing"&&(this.flex=null),o||this.fireColumnWidthChangedEvent(t)),this.dispatchStateUpdatedEvent("width")}fireColumnWidthChangedEvent(e){this.dispatchColEvent("widthChanged",e)}isGreaterThanMax(e){return e>this.maxWidth}getMinWidth(){return this.minWidth}getMaxWidth(){return this.maxWidth}getFlex(){return this.flex}isRowGroupActive(){return this.rowGroupActive}isPivotActive(){return this.pivotActive}isAnyFunctionActive(){return this.isPivotActive()||this.isRowGroupActive()||this.isValueActive()}isAnyFunctionAllowed(){return this.isAllowPivot()||this.isAllowRowGroup()||this.isAllowValue()}isValueActive(){return this.aggregationActive}isAllowPivot(){return this.colDef.enablePivot===!0}isAllowValue(){return this.colDef.enableValue===!0}isAllowRowGroup(){return this.colDef.enableRowGroup===!0}dispatchColEvent(e,t,o){const s=this.createColumnEvent(e,t);o&&Y(s,o),this.colEventSvc.dispatchEvent(s)}dispatchStateUpdatedEvent(e){this.colEventSvc.dispatchEvent({type:"columnStateUpdated",key:e})}};function U(e){return e instanceof wt}var wt=class extends v{constructor(e,t,o,s){super(),this.colGroupDef=e,this.groupId=t,this.padding=o,this.level=s,this.isColumn=!1,this.expandable=!1,this.instanceId=qi(),this.expandableListenerRemoveCallback=null,this.expanded=!!(e!=null&&e.openByDefault)}destroy(){this.expandableListenerRemoveCallback&&this.reset(null,void 0),super.destroy()}reset(e,t){this.colGroupDef=e,this.level=t,this.originalParent=null,this.expandableListenerRemoveCallback&&this.expandableListenerRemoveCallback(),this.children=void 0,this.expandable=void 0}getInstanceId(){return this.instanceId}getOriginalParent(){return this.originalParent}getLevel(){return this.level}isVisible(){return this.children?this.children.some(e=>e.isVisible()):!1}isPadding(){return this.padding}setExpanded(e){this.expanded=e===void 0?!1:e,this.dispatchLocalEvent({type:"expandedChanged"})}isExpandable(){return this.expandable}isExpanded(){return this.expanded}getGroupId(){return this.groupId}getId(){return this.getGroupId()}setChildren(e){this.children=e}getChildren(){return this.children}getColGroupDef(){return this.colGroupDef}getLeafColumns(){const e=[];return this.addLeafColumns(e),e}forEachLeafColumn(e){if(this.children)for(const t of this.children)we(t)?e(t):U(t)&&t.forEachLeafColumn(e)}addLeafColumns(e){this.children&&this.children.forEach(t=>{we(t)?e.push(t):U(t)&&t.addLeafColumns(e)})}getColumnGroupShow(){const e=this.colGroupDef;if(e)return e.columnGroupShow}setupExpandable(){this.setExpandable(),this.expandableListenerRemoveCallback&&this.expandableListenerRemoveCallback();const e=this.onColumnVisibilityChanged.bind(this);this.getLeafColumns().forEach(t=>t.__addEventListener("visibleChanged",e)),this.expandableListenerRemoveCallback=()=>{this.getLeafColumns().forEach(t=>t.__removeEventListener("visibleChanged",e)),this.expandableListenerRemoveCallback=null}}setExpandable(){if(this.isPadding())return;let e=!1,t=!1,o=!1;const s=this.findChildrenRemovingPadding();for(let n=0,r=s.length;n{o.forEach(s=>{U(s)&&s.isPadding()?t(s.children):e.push(s)})};return t(this.children),e}onColumnVisibilityChanged(){this.setExpandable()}},ml={numericColumn:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"},rightAligned:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"}};function ws(e,t,o){const s={},i=e.gos;return Object.assign(s,i.get("defaultColGroupDef")),Object.assign(s,t),i.validateColDef(s,o),s}var vl=class{constructor(){this.existingKeys={}}addExistingKeys(e){for(let t=0;t0&&I(273,{providedId:e,usedId:i}),this.existingKeys[i]=!0,i}o++}}};function H(e){if(e!=null&&e.length)return e[e.length-1]}function _t(e,t,o){return e==null&&t==null?!0:e!=null&&t!=null&&e.length===t.length&&e.every((s,i)=>t[i]===s)}function dt(e,t){if(e)for(const o of e)t(o)}function ye(e,t){const o=e.indexOf(t);o>=0&&e.splice(o,1)}function ys(e,t,o){for(let s=0;s=0;s--)e.splice(o,0,t[s])}var Ut="ag-Grid-AutoColumn",wl="ag-Grid-SelectionColumn",yl="ag-Grid-RowNumbersColumn";function bl(e){const t=[],o=s=>{for(let i=0;it+o.getActualWidth(),0)}function bs(e,t,o){const s={};if(!t)return;ce(null,t,n=>{s[n.getInstanceId()]=n}),o&&ce(null,o,n=>{s[n.getInstanceId()]=null});const i=Object.values(s).filter(n=>n!=null);e.context.destroyBeans(i)}function Sl(e){return e.getId().startsWith(Ut)}function Zi(e){const t=typeof e=="string"?e:"getColId"in e?e.getColId():e.colId;return(t==null?void 0:t.startsWith(wl))??!1}function Qe(e){const t=typeof e=="string"?e:"getColId"in e?e.getColId():e.colId;return(t==null?void 0:t.startsWith(yl))??!1}function kt(e){let t=[];return e instanceof Array?t=e:typeof e=="string"&&(t=e.split(",")),t}function yt(e){return e==="gridOptionsUpdated"?"gridOptionsChanged":e}function Rl(e,t){const o=e===t,s=e.getColDef()===t,i=e.getColId()==t;return o||s||i}var Fl=(e,t)=>(o,s)=>{const i={value1:void 0,value2:void 0};let n=!1;return e&&(e[o]!==void 0&&(i.value1=e[o],n=!0),k(s)&&e[s]!==void 0&&(i.value2=e[s],n=!0)),!n&&t&&(t[o]!==void 0&&(i.value1=t[o]),k(s)&&t[s]!==void 0&&(i.value2=t[s])),i};function xl(e,t=null,o,s,i){const n=new vl,{existingCols:r,existingGroups:l,existingColKeys:a}=Dl(s);n.addExistingKeys(a);const d=Yi(e,t,0,o,r,n,l,i),{colGroupSvc:c}=e,h=(c==null?void 0:c.findMaxDepth(d,0))??0,u=c?c.balanceColumnTree(d,0,h,n):d;return ce(null,u,(p,f)=>{U(p)&&p.setupExpandable(),p.originalParent=f}),{columnTree:u,treeDepth:h}}function Dl(e){const t=[],o=[],s=[];return e&&ce(null,e,i=>{if(U(i)){const n=i;o.push(n)}else{const n=i;s.push(n.getId()),t.push(n)}}),{existingCols:t,existingGroups:o,existingColKeys:s}}function Yi(e,t,o,s,i,n,r,l){if(!t)return[];const{colGroupSvc:a}=e,d=new Array(t.length);for(let c=0;c0))if(o.width!=null)t.setActualWidth(o.width,s);else{const n=t.getActualWidth();t.setActualWidth(n,s)}}function Tl(e,t){if(t)for(let o=0;o{const r=s[n.trim()];r?Y(o,r,!1,!0):I(36,{t:n})})}function Ll(e){return e.children!==void 0}function ce(e,t,o){if(t)for(let s=0;s{const l=r.getColDef().lockPosition;l==="right"?i.push(r):l==="left"||l===!0?o.push(r):s.push(r)}),t.get("enableRtl")?[...i,...s,...o]:[...o,...s,...i]}function Ji(e,t){let o=!0;return ce(null,t,s=>{if(!U(s))return;const i=s,n=i.getColGroupDef();if(!(n&&n.marryChildren))return;const l=[];i.getLeafColumns().forEach(u=>{const g=e.indexOf(u);l.push(g)});const a=Math.max.apply(Math,l),d=Math.min.apply(Math,l),c=a-d,h=i.getLeafColumns().length-1;c>h&&(o=!1)}),o}function en(e,t){if(!e||e.length==0)return;const o=t(e[0]);for(let s=1;sn.getPinned());e.dispatchEvent({type:"columnPinned",pinned:i??null,columns:t,column:s,source:o})}function Ml(e,t,o){if(!t.length)return;const s=t.length===1?t[0]:null,i=en(t,n=>n.isVisible());e.dispatchEvent({type:"columnVisible",visible:i,columns:t,column:s,source:o})}function Al(e,t,o,s){e.dispatchEvent({type:t,columns:o,column:o&&o.length==1?o[0]:null,source:s})}function It(e,t,o,s,i=null){t!=null&&t.length&&e.dispatchEvent({type:"columnResized",columns:t,column:t.length===1?t[0]:null,flexColumns:i,finished:o,source:s})}function on(e,t,o){var D;const{colModel:s,rowGroupColsSvc:i,pivotColsSvc:n,autoColSvc:r,selectionColSvc:l,colAnimation:a,visibleCols:d,pivotResultCols:c,environment:h,valueColsSvc:u,eventSvc:g,gos:p}=e,f=s.getColDefCols()??[],C=l==null?void 0:l.getColumns();if(!(f!=null&&f.length)&&!(C!=null&&C.length))return!1;if(t!=null&&t.state&&!t.state.forEach)return I(32),!1;const y=(b,P,L,F,T)=>{if(!b)return;const M=Fl(P,t.defaultState),B=M("flex").value1;if(Qi(e,b,M("hide").value1,M("sort").value1,M("sortIndex").value1,M("pinned").value1,B,o),B==null){const _=M("width").value1;if(_!=null){const X=b.getColDef().minWidth??h.getDefaultColumnMinWidth();X!=null&&_>=X&&b.setActualWidth(_,o)}}T||!b.isPrimary()||(u==null||u.syncColumnWithState(b,o,M),i==null||i.syncColumnWithState(b,o,M,L),n==null||n.syncColumnWithState(b,o,M,F))},S=(b,P,L)=>{var os,ss;const F=sn(e,o),T=P.slice(),M={},B={},_=[],X=[],re=[];let lt=0;const le=(i==null?void 0:i.columns.slice())??[],or=(n==null?void 0:n.columns.slice())??[];b.forEach(j=>{const Ne=j.colId;if(Ne.startsWith(Ut)){_.push(j),re.push(j);return}if(Zi(Ne)){X.push(j),re.push(j);return}const Pe=L(Ne);Pe?(y(Pe,j,M,B,!1),ye(T,Pe)):(re.push(j),lt+=1)});const es=j=>y(j,null,M,B,!1);T.forEach(es),i==null||i.sortColumns(Rs.bind(i,M,le)),n==null||n.sortColumns(Rs.bind(n,B,or)),s.refreshCols(!1);const ts=(j,Ne,Qt=[])=>{Ne.forEach(Pe=>{const is=j(Pe.colId);ye(Qt,is),y(is,Pe,null,null,!0)}),Qt.forEach(es)};return ts(j=>(r==null?void 0:r.getColumn(j))??null,_,(os=r==null?void 0:r.getColumns())==null?void 0:os.slice()),ts(j=>(l==null?void 0:l.getColumn(j))??null,X,(ss=l==null?void 0:l.getColumns())==null?void 0:ss.slice()),Gl(t,s,p),d.refresh(o),g.dispatchEvent({type:"columnEverythingChanged",source:o}),F(),{unmatchedAndAutoStates:re,unmatchedCount:lt}};a==null||a.start();let{unmatchedAndAutoStates:w,unmatchedCount:R}=S(t.state||[],f,b=>s.getColDefCol(b));if(w.length>0||k(t.defaultState)){const b=((D=c==null?void 0:c.getPivotResultCols())==null?void 0:D.list)??[];R=S(w,b,P=>(c==null?void 0:c.getPivotResultCol(P))??null).unmatchedCount}return a==null||a.finish(),R===0}function sn(e,t){const{rowGroupColsSvc:o,pivotColsSvc:s,valueColsSvc:i,colModel:n,sortSvc:r,eventSvc:l}=e,a={rowGroupColumns:(o==null?void 0:o.columns.slice())??[],pivotColumns:(s==null?void 0:s.columns.slice())??[],valueColumns:(i==null?void 0:i.columns.slice())??[]},d=Ss(e),c={};return d.forEach(h=>{c[h.colId]=h}),()=>{const h=(b,P,L,F)=>{const T=P.map(F),M=L.map(F);if(_t(T,M))return;const _=new Set(P);L.forEach(re=>{_.delete(re)||_.add(re)});const X=[..._];l.dispatchEvent({type:b,columns:X,column:X.length===1?X[0]:null,source:t})},u=b=>{const P=[];return n.forAllCols(L=>{const F=c[L.getColId()];F&&b(F,L)&&P.push(L)}),P},g=b=>b.getColId();h("columnRowGroupChanged",a.rowGroupColumns,(o==null?void 0:o.columns)??[],g),h("columnPivotChanged",a.pivotColumns,(s==null?void 0:s.columns)??[],g);const f=u((b,P)=>{const L=b.aggFunc!=null,F=L!=P.isValueActive(),T=L&&b.aggFunc!=P.getAggFunc();return F||T});f.length>0&&Al(l,"columnValueChanged",f,t),It(l,u((b,P)=>b.width!=P.getActualWidth()),!0,t),tn(l,u((b,P)=>b.pinned!=P.getPinned()),t),Ml(l,u((b,P)=>b.hide==P.isVisible()),t);const R=u((b,P)=>b.sort!=P.getSort()||b.sortIndex!=P.getSortIndex());R.length>0&&(r==null||r.dispatchSortChangedEvents(t,R));const D=Ss(e);Ol(d,D,t,n,l)}}function Ss(e){const{colModel:t,rowGroupColsSvc:o,pivotColsSvc:s}=e,i=t.getColDefCols();if(V(i)||!t.isAlive())return[];const n=o==null?void 0:o.columns,r=s==null?void 0:s.columns,l=[],a=c=>{const h=c.isRowGroupActive()&&n?n.indexOf(c):null,u=c.isPivotActive()&&r?r.indexOf(c):null,g=c.isValueActive()?c.getAggFunc():null,p=c.getSort()!=null?c.getSort():null,f=c.getSortIndex()!=null?c.getSortIndex():null;l.push({colId:c.getColId(),width:c.getActualWidth(),hide:!c.isVisible(),pinned:c.getPinned(),sort:p,sortIndex:f,aggFunc:g,rowGroup:c.isRowGroupActive(),rowGroupIndex:h,pivot:c.isPivotActive(),pivotIndex:u,flex:c.getFlex()??null})};t.forAllCols(c=>a(c));const d=new Map(t.getCols().map((c,h)=>[c.getColId(),h]));return l.sort((c,h)=>{const u=d.has(c.colId)?d.get(c.colId):-1,g=d.has(h.colId)?d.get(h.colId):-1;return u-g}),l}function Hl(e){const t=(p,f)=>p??f??null,o=e.getColDef(),s=t(o.sort,o.initialSort),i=t(o.sortIndex,o.initialSortIndex),n=t(o.hide,o.initialHide),r=t(o.pinned,o.initialPinned),l=t(o.width,o.initialWidth),a=t(o.flex,o.initialFlex);let d=t(o.rowGroupIndex,o.initialRowGroupIndex),c=t(o.rowGroup,o.initialRowGroup);d==null&&(c==null||c==!1)&&(d=null,c=null);let h=t(o.pivotIndex,o.initialPivotIndex),u=t(o.pivot,o.initialPivot);h==null&&(u==null||u==!1)&&(h=null,u=null);const g=t(o.aggFunc,o.initialAggFunc);return{colId:e.getColId(),sort:s,sortIndex:i,hide:n,pinned:r,width:l,flex:a,rowGroup:c,rowGroupIndex:d,pivot:u,pivotIndex:h,aggFunc:g}}function Gl(e,t,o){if(!e.applyOrder||!e.state)return;const s=[];e.state.forEach(i=>{i.colId!=null&&s.push(i.colId)}),Bl(t.cols,s,t,o)}function Bl(e,t,o,s){if(e==null)return;let i=[];const n={};t.forEach(l=>{if(n[l])return;const a=e.map[l];a&&(i.push(a),n[l]=!0)});let r=0;if(e.list.forEach(l=>{const a=l.getColId();if(n[a]!=null)return;a.startsWith(Ut)?i.splice(r++,0,l):i.push(l)}),i=Xi(i,s),!Ji(i,o.getColTree())){I(39);return}e.list=i}function Ol(e,t,o,s,i){const n={};t.forEach(c=>n[c.colId]=c);const r={};e.forEach(c=>{n[c.colId]&&(r[c.colId]=!0)});const l=e.filter(c=>r[c.colId]),a=t.filter(c=>r[c.colId]),d=[];a.forEach((c,h)=>{const u=l&&l[h];if(u&&u.colId!==c.colId){const g=s.getCol(u.colId);g&&d.push(g)}}),d.length&&i.dispatchEvent({type:"columnMoved",columns:d,column:d.length===1?d[0]:null,finished:!0,source:o})}var Rs=(e,t,o,s)=>{const i=e[o.getId()],n=e[s.getId()],r=i!=null,l=n!=null;if(r&&l)return i-n;if(r)return-1;if(l)return 1;const a=t.indexOf(o),d=t.indexOf(s),c=a>=0,h=d>=0;return c&&h?a-d:c?-1:1},Wl=class extends v{constructor(){super(...arguments),this.beanName="colModel",this.pivotMode=!1,this.ready=!1,this.changeEventsDispatching=!1}postConstruct(){this.pivotMode=this.gos.get("pivotMode"),this.addManagedPropertyListeners(["groupDisplayType","treeData","treeDataDisplayType","groupHideOpenParents"],e=>this.refreshAll(yt(e.source))),this.addManagedPropertyListeners(["defaultColDef","defaultColGroupDef","columnTypes","suppressFieldDotNotation"],this.recreateColumnDefs.bind(this)),this.addManagedPropertyListener("pivotMode",e=>this.setPivotMode(this.gos.get("pivotMode"),yt(e.source)))}createColsFromColDefs(e){var S,w,R;const{beans:t}=this,{valueCache:o,colAutosize:s,rowGroupColsSvc:i,pivotColsSvc:n,valueColsSvc:r,visibleCols:l,colViewport:a,eventSvc:d}=t,c=this.colDefs?sn(t,e):void 0;o==null||o.expire();const h=(S=this.colDefCols)==null?void 0:S.list,u=(w=this.colDefCols)==null?void 0:w.tree,g=xl(t,this.colDefs,!0,u,e);bs(t,(R=this.colDefCols)==null?void 0:R.tree,g.columnTree);const p=g.columnTree,f=g.treeDepth,C=bl(p),y={};C.forEach(D=>y[D.getId()]=D),this.colDefCols={tree:p,treeDepth:f,list:C,map:y},i==null||i.extractCols(e,h),n==null||n.extractCols(e,h),r==null||r.extractCols(e,h),this.ready=!0,this.refreshCols(!0),l.refresh(e),a.checkViewportColumns(),d.dispatchEvent({type:"columnEverythingChanged",source:e}),c&&(this.changeEventsDispatching=!0,c(),this.changeEventsDispatching=!1),d.dispatchEvent({type:"newColumnsLoaded",source:e}),e==="gridInitializing"&&(s==null||s.applyAutosizeStrategy())}refreshCols(e){var f;if(!this.colDefCols)return;const t=(f=this.cols)==null?void 0:f.tree;this.saveColOrder();const{autoColSvc:o,selectionColSvc:s,rowNumbersSvc:i,quickFilter:n,pivotResultCols:r,showRowGroupCols:l,rowAutoHeight:a,visibleCols:d,colViewport:c,eventSvc:h}=this.beans,u=this.selectCols(r,this.colDefCols);this.createColumnsForService([o,s,i],u);const g=$r(this.gos,this.showingPivotResult);(!e||g)&&this.restoreColOrder(u),this.positionLockedCols(u),l==null||l.refresh(),n==null||n.refreshCols(),this.setColSpanActive(),a==null||a.setAutoHeightActive(u),d.clear(),c.clear(),!_t(t,this.cols.tree)&&h.dispatchEvent({type:"gridColumnsChanged"})}createColumnsForService(e,t){for(const o of e)o&&(o.createColumns(t,s=>{this.lastOrder=s(this.lastOrder),this.lastPivotOrder=s(this.lastPivotOrder)}),o.addColumns(t))}selectCols(e,t){const o=(e==null?void 0:e.getPivotResultCols())??null;this.showingPivotResult=o!=null;const{map:s,list:i,tree:n,treeDepth:r}=o??t;return this.cols={list:i.slice(),map:{...s},tree:n.slice(),treeDepth:r},o&&(o.list.some(a=>{var d;return((d=this.cols)==null?void 0:d.map[a.getColId()])!==void 0})||(this.lastPivotOrder=null)),this.cols}getColsToShow(){var s;if(!this.cols)return[];const e=this.isPivotMode()&&!this.showingPivotResult,t=(s=this.beans.valueColsSvc)==null?void 0:s.columns;return this.cols.list.filter(i=>{const n=Sl(i);if(e){const r=t==null?void 0:t.includes(i);return n||r}else return n||i.isVisible()})}refreshAll(e){this.ready&&(this.refreshCols(!1),this.beans.visibleCols.refresh(e))}setColsVisible(e,t=!1,o){on(this.beans,{state:e.map(s=>({colId:typeof s=="string"?s:s.getColId(),hide:!t}))},o)}restoreColOrder(e){const t=this.showingPivotResult?this.lastPivotOrder:this.lastOrder;if(!t)return;const o=t.filter(h=>e.map[h.getId()]!=null);if(o.length===0)return;if(o.length===e.list.length){e.list=o;return}const s=h=>{const u=h.getOriginalParent();return u?u.getChildren().length>1?!0:s(u):!1};if(!o.some(h=>s(h))){const h=new Set(o);for(const u of e.list)h.has(u)||o.push(u);e.list=o;return}const i=new Map;for(let h=0;h!i.has(h));if(n.length===0){e.list=o;return}const r=(h,u)=>{const g=u?u.getOriginalParent():h.getOriginalParent();if(!g)return null;let p=null,f=null;for(const C of g.getChildren())if(!(C===u||C===h)){if(C instanceof _o){const y=i.get(C);if(y==null)continue;(p==null||p{const S=i.get(y);S!=null&&(p==null||p=0;h--)d[c--]=l[h];for(let h=o.length-1;h>=0;h--){const u=o[h],g=a.get(u);if(g)if(Array.isArray(g))for(let p=g.length-1;p>=0;p--){const f=g[p];d[c--]=f}else d[c--]=g;d[c--]=u}e.list=d}positionLockedCols(e){e.list=Xi(e.list,this.gos)}saveColOrder(){var e,t;this.showingPivotResult?this.lastPivotOrder=((e=this.cols)==null?void 0:e.list)??null:this.lastOrder=((t=this.cols)==null?void 0:t.list)??null}getColumnDefs(){var e,t;return this.colDefCols?(t=this.beans.colDefFactory)==null?void 0:t.getColumnDefs(this.colDefCols.list,this.showingPivotResult,this.lastOrder,((e=this.cols)==null?void 0:e.list)??[]):void 0}setColSpanActive(){var e;this.colSpanActive=!!((e=this.cols)!=null&&e.list.some(t=>t.getColDef().colSpan!=null))}isPivotMode(){return this.pivotMode}setPivotMode(e,t){if(e===this.pivotMode||(this.pivotMode=e,!this.ready))return;this.refreshCols(!1);const{visibleCols:o,eventSvc:s}=this.beans;o.refresh(t),s.dispatchEvent({type:"columnPivotModeChanged"})}isPivotActive(){var t;const e=(t=this.beans.pivotColsSvc)==null?void 0:t.columns;return this.pivotMode&&!!(e!=null&&e.length)}recreateColumnDefs(e){var o;if(!this.cols)return;(o=this.beans.autoColSvc)==null||o.updateColumns(e);const t=yt(e.source);this.createColsFromColDefs(t)}setColumnDefs(e,t){this.colDefs=e,this.createColsFromColDefs(t)}destroy(){var e;bs(this.beans,(e=this.colDefCols)==null?void 0:e.tree),super.destroy()}getColTree(){var e;return((e=this.cols)==null?void 0:e.tree)??[]}getColDefColTree(){var e;return((e=this.colDefCols)==null?void 0:e.tree)??[]}getColDefCols(){var e;return((e=this.colDefCols)==null?void 0:e.list)??null}getCols(){var e;return((e=this.cols)==null?void 0:e.list)??[]}forAllCols(e){var i,n,r,l;const{pivotResultCols:t,autoColSvc:o,selectionColSvc:s}=this.beans;dt((i=this.colDefCols)==null?void 0:i.list,e),dt((n=o==null?void 0:o.columns)==null?void 0:n.list,e),dt((r=s==null?void 0:s.columns)==null?void 0:r.list,e),dt((l=t==null?void 0:t.getPivotResultCols())==null?void 0:l.list,e)}getColsForKeys(e){return e?e.map(t=>this.getCol(t)).filter(t=>t!=null):[]}getColDefCol(e){var t;return(t=this.colDefCols)!=null&&t.list?this.getColFromCollection(e,this.colDefCols):null}getCol(e){return e==null?null:this.getColFromCollection(e,this.cols)}getColById(e){var t;return((t=this.cols)==null?void 0:t.map[e])??null}getColFromCollection(e,t){var i,n;if(t==null)return null;const{map:o,list:s}=t;if(typeof e=="string"&&o[e])return o[e];for(let r=0;rt.destroyBean(o)),o??e}var nn=class{constructor(e){this.cssClassStates={},this.getGui=e}toggleCss(e,t){var s;if(!e)return;if(e.indexOf(" ")>=0){const i=(e||"").split(" ");if(i.length>1){i.forEach(n=>this.toggleCss(n,t));return}}this.cssClassStates[e]!==t&&e.length&&((s=this.getGui())==null||s.classList.toggle(e,t),this.cssClassStates[e]=t)}},Nl=0,x=null,N=class extends v{constructor(e,t){super(),this.suppressDataRefValidation=!1,this.displayed=!0,this.visible=!0,this.compId=Nl++,this.cssManager=new nn(()=>this.eGui),this.componentSelectors=new Map((t??[]).map(o=>[o.selector,o])),e&&this.setTemplate(e)}preConstruct(){var t,o,s;this.wireTemplate(this.getGui());const e="component-"+((o=(t=Object.getPrototypeOf(this))==null?void 0:t.constructor)==null?void 0:o.name);(s=this.css)==null||s.forEach(i=>this.beans.environment.addGlobalCSS(i,e))}wireTemplate(e,t){e&&this.gos&&(this.applyElementsToComponent(e),this.createChildComponentsFromTags(e,t))}getCompId(){return this.compId}getDataRefAttribute(e){return e.getAttribute?e.getAttribute(Di):null}applyElementsToComponent(e,t,o,s=null){if(t===void 0&&(t=this.getDataRefAttribute(e)),t){const i=this[t];if(i===x)this[t]=s??e;else{const n=o&&o[t];if(!this.suppressDataRefValidation&&!n)throw new Error(`data-ref: ${t} on ${this.constructor.name} with ${i}`)}}}createChildComponentsFromTags(e,t){const o=[];for(const s of e.childNodes??[])o.push(s);o.forEach(s=>{if(!(s instanceof HTMLElement))return;const i=this.createComponentFromElement(s,n=>{const r=n.getGui();if(r)for(const l of s.attributes??[])r.setAttribute(l.name,l.value)},t);if(i){if(i.addItems&&s.children.length){this.createChildComponentsFromTags(s,t);const n=Array.prototype.slice.call(s.children);i.addItems(n)}this.swapComponentForNode(i,e,s)}else s.childNodes&&this.createChildComponentsFromTags(s,t)})}createComponentFromElement(e,t,o){const s=e.nodeName,i=this.getDataRefAttribute(e),n=s.indexOf("AG-")===0,r=n?this.componentSelectors.get(s):null;let l=null;if(r){const a=o&&i?o[i]:void 0;l=new r.component(a),l.setParentComponent(this),this.createBean(l,null,t)}else if(n)throw new Error(`selector: ${s}`);return this.applyElementsToComponent(e,i,o,l),l}swapComponentForNode(e,t,o){const s=e.getGui();t.replaceChild(s,o),t.insertBefore(document.createComment(o.nodeName),s),this.addDestroyFunc(this.destroyBean.bind(this,e))}activateTabIndex(e){const t=this.gos.get("tabIndex");e||(e=[]),e.length||e.push(this.getGui()),e.forEach(o=>o.setAttribute("tabindex",t.toString()))}setTemplate(e,t,o){let s;typeof e=="string"||e==null?s=Bo(e):s=q(e),this.setTemplateFromElement(s,t,o)}setTemplateFromElement(e,t,o,s=!1){if(this.eGui=e,this.suppressDataRefValidation=s,t)for(let i=0;ithis.eGui.removeEventListener(e,t))}addCss(e){this.cssManager.toggleCss(e,!0)}removeCss(e){this.cssManager.toggleCss(e,!1)}toggleCss(e,t){this.cssManager.toggleCss(e,t)}registerCSS(e){this.css||(this.css=[]),this.css.push(e)}},rn=class qe{constructor(t){this.status=0,this.resolution=null,this.waiters=[],t(o=>this.onDone(o),o=>this.onReject(o))}static all(t){return t.length?new qe(o=>{let s=t.length;const i=new Array(s);t.forEach((n,r)=>{n.then(l=>{i[r]=l,s--,s===0&&o(i)})})}):qe.resolve()}static resolve(t=null){return new qe(o=>o(t))}then(t){return new qe(o=>{this.status===1?o(t(this.resolution)):this.waiters.push(s=>o(t(s)))})}onDone(t){this.status=1,this.resolution=t,this.waiters.forEach(o=>o(t))}onReject(t){}};function zl(e){return e?e.prototype&&"getGui"in e.prototype:!1}function _l(e,t,o,s){const{name:i}=o;let n,r,l,a,d,c;if(t){const h=t,u=h[i+"Selector"],g=u?u(s):null,p=f=>{typeof f=="string"?n=f:f!=null&&f!==!0&&(e.isFrameworkComponent(f)?l=f:r=f)};g?(p(g.component),a=g.params,d=g.popup,c=g.popupPosition):p(h[i])}return{compName:n,jsComp:r,fwComp:l,paramsFromSelector:a,popupFromSelector:d,popupPositionFromSelector:c}}var Ul=class extends v{constructor(){super(...arguments),this.beanName="userCompFactory"}wireBeans(e){this.agCompUtils=e.agCompUtils,this.registry=e.registry,this.frameworkCompWrapper=e.frameworkCompWrapper,this.gridOptions=e.gridOptions}getCompDetailsFromGridOptions(e,t,o,s=!1){return this.getCompDetails(this.gridOptions,e,t,o,s)}getCompDetails(e,t,o,s,i=!1){var S;const{name:n,cellRenderer:r}=t;let{compName:l,jsComp:a,fwComp:d,paramsFromSelector:c,popupFromSelector:h,popupPositionFromSelector:u}=_l(this.beans.frameworkOverrides,e,t,s),g;const p=w=>{const R=this.registry.getUserComponent(n,w);R&&(a=R.componentFromFramework?void 0:R.component,d=R.componentFromFramework?R.component:void 0,g=R.params)};if(l!=null&&p(l),a==null&&d==null&&o!=null&&p(o),a&&r&&!zl(a)&&(a=(S=this.agCompUtils)==null?void 0:S.adaptFunction(t,a)),!a&&!d){const{validation:w}=this.beans;i&&(l!==o||!o)?l?w!=null&&w.isProvidedUserComp(l)||K(50,{compName:l}):o?w||K(260,{...this.gos.getModuleErrorParams(),propName:n,compName:o}):K(216,{name:n}):o&&!w&&K(146,{comp:o});return}const f=this.mergeParams(e,t,s,c,g),C=a==null,y=a??d;return{componentFromFramework:C,componentClass:y,params:f,type:t,popupFromSelector:h,popupPositionFromSelector:u,newAgStackInstance:()=>this.newAgStackInstance(y,C,f,t)}}newAgStackInstance(e,t,o,s){var l;const i=!t;let n;i?n=new e:n=this.frameworkCompWrapper.wrap(e,s.mandatoryMethods,s.optionalMethods,s),this.createBean(n);const r=(l=n.init)==null?void 0:l.call(n,o);return r==null?rn.resolve(n):r.then(()=>n)}mergeParams(e,t,o,s=null,i){const n={...o,...i},r=e,l=r&&r[t.name+"Params"];if(typeof l=="function"){const a=l(o);Y(n,a)}else typeof l=="object"&&Y(n,l);return Y(n,s),n}},Kl={name:"dragAndDropImageComponent",mandatoryMethods:["setIcon","setLabel"]},jl={name:"headerComponent",optionalMethods:["refresh"]},$l={name:"innerHeaderComponent"},ql={name:"innerHeaderGroupComponent"},Zl={name:"headerGroupComponent"},Yl={name:"cellRenderer",optionalMethods:["refresh","afterGuiAttached"],cellRenderer:!0},Ql={name:"loadingCellRenderer",cellRenderer:!0},Xl={name:"loadingOverlayComponent",optionalMethods:["refresh"]},Jl={name:"noRowsOverlayComponent",optionalMethods:["refresh"]},ea={name:"fullWidthCellRenderer",optionalMethods:["refresh","afterGuiAttached"],cellRenderer:!0},ta={name:"loadingCellRenderer",cellRenderer:!0},oa={name:"groupRowRenderer",optionalMethods:["afterGuiAttached"],cellRenderer:!0},sa={name:"detailCellRenderer",optionalMethods:["refresh"],cellRenderer:!0};function ia(e,t){return e.getCompDetailsFromGridOptions(Kl,"agDragAndDropImage",t,!0)}function na(e,t,o){return e.getCompDetails(t,jl,"agColumnHeader",o)}function ra(e,t,o){return e.getCompDetails(t,$l,void 0,o)}function la(e,t){const o=t.columnGroup.getColGroupDef();return e.getCompDetails(o,Zl,"agColumnGroupHeader",t)}function aa(e,t,o){return e.getCompDetails(t,ql,void 0,o)}function da(e,t){return e.getCompDetailsFromGridOptions(ea,void 0,t,!0)}function ca(e,t){return e.getCompDetailsFromGridOptions(ta,"agLoadingCellRenderer",t,!0)}function ha(e,t){return e.getCompDetailsFromGridOptions(oa,"agGroupRowRenderer",t,!0)}function ua(e,t){return e.getCompDetailsFromGridOptions(sa,"agDetailCellRenderer",t,!0)}function Fs(e,t,o){return e.getCompDetails(t,Yl,void 0,o)}function ga(e,t,o){return e.getCompDetails(t,Ql,"agSkeletonCellRenderer",o,!0)}function pa(e,t){return e.getCompDetailsFromGridOptions(Xl,"agLoadingOverlay",t,!0)}function fa(e,t){return e.getCompDetailsFromGridOptions(Jl,"agNoRowsOverlay",t,!0)}var ln=new Set,Lt={},Me={},bt,an=!1,dn=!1,Ca=!1;function ma(e){const[t,o]=e.version.split(".")||[],[s,i]=bt.split(".")||[];return t===s&&o===i}function va(e){bt||(bt=e.version);const t=o=>`You are using incompatible versions of AG Grid modules. Major and minor versions should always match across modules. ${o} Please update all modules to the same version.`;if(e.version?ma(e)||Ye(t(`'${e.moduleName}' is version ${e.version} but the other modules are version ${bt}.`)):Ye(t(`'${e.moduleName}' is incompatible.`)),e.validate){const o=e.validate();o.isValid||Ye(`${o.message}`)}}function Mt(e,t,o=!1){o||(an=!0),va(e);const s=e.rowModels??["all"];ln.add(e);let i;t!==void 0?(dn=!0,Me[t]===void 0&&(Me[t]={}),i=Me[t]):i=Lt,s.forEach(n=>{i[n]===void 0&&(i[n]={}),i[n][e.moduleName]=e}),e.dependsOn&&e.dependsOn.forEach(n=>Mt(n,t,o))}function wa(e){delete Me[e]}function To(e,t,o){const s=i=>{var n,r,l;return!!((n=Lt[i])!=null&&n[e])||!!((l=(r=Me[t])==null?void 0:r[i])!=null&&l[e])};return s(o)||s("all")}function cn(){return dn}function ya(e,t){const o=Me[e]??{};return[...Object.values(Lt.all??{}),...Object.values(o.all??{}),...Object.values(Lt[t]??{}),...Object.values(o[t]??{})]}function ba(){return new Set(ln)}function Sa(){return an}function Ra(){return Ca}var Fa=class{constructor(e){this.beans={},this.createdBeans=[],this.destroyed=!1,!(!e||!e.beanClasses)&&(this.beanDestroyComparator=e.beanDestroyComparator,this.init(e))}init(e){var t;for(const o of Object.keys(e.providedBeanInstances))this.beans[o]=e.providedBeanInstances[o];e.beanClasses.forEach(o=>{const s=new o;s.beanName?this.beans[s.beanName]=s:console.error(`Bean ${o.name} is missing beanName`),this.createdBeans.push(s)}),(t=e.derivedBeans)==null||t.forEach(o=>{const{beanName:s,bean:i}=o(this);this.beans[s]=i,this.createdBeans.push(i)}),e.beanInitComparator&&this.createdBeans.sort(e.beanInitComparator),this.initBeans(this.createdBeans)}getBeanInstances(){return Object.values(this.beans)}createBean(e,t){if(!e)throw Error("null bean");return this.initBeans([e],t),e}initBeans(e,t){e.forEach(o=>{var s,i;(s=o.preWireBeans)==null||s.call(o,this.beans),(i=o.wireBeans)==null||i.call(o,this.beans)}),e.forEach(o=>{var s;return(s=o.preConstruct)==null?void 0:s.call(o)}),t&&e.forEach(t),e.forEach(o=>{var s;return(s=o.postConstruct)==null?void 0:s.call(o)})}getBeans(){return this.beans}getBean(e){return this.beans[e]}destroy(){if(this.destroyed)return;this.destroyed=!0;const e=this.getBeanInstances();this.beanDestroyComparator&&e.sort(this.beanDestroyComparator),this.destroyBeans(e),this.beans={},this.createdBeans=[]}destroyBean(e){var t;(t=e==null?void 0:e.destroy)==null||t.call(e)}destroyBeans(e){if(e)for(let t=0;t0||(e.addEventListener("keydown",Ht),e.addEventListener("mousedown",Ht))}function La(e){At>0||(e.removeEventListener("keydown",Ht),e.removeEventListener("mousedown",Ht))}function Ht(e){const t=ko,o=e.type==="keydown";o&&(e.ctrlKey||e.metaKey||e.altKey)||t!==o&&(ko=o)}function Ma(e){const t=oe(e);return Ia(t),At++,()=>{At--,La(t)}}function Aa(){return ko}function Ae(e,t,o=!1){const s=Tr;let i=vi;t&&(i+=", "+t),o&&(i+=', [tabindex="-1"]');const n=Array.prototype.slice.apply(e.querySelectorAll(s)).filter(a=>De(a)),r=Array.prototype.slice.apply(e.querySelectorAll(i));return r.length?((a,d)=>a.filter(c=>d.indexOf(c)===-1))(n,r):n}function Gt(e,t=!1,o=!1,s=!1){const i=Ae(e,s?".ag-tab-guard":null,o),n=t?H(i):i[0];return n?(n.focus({preventScroll:!0}),!0):!1}function jt(e,t,o,s){const i=Ae(t,null),n=z(e);let r;r=i.indexOf(n);const l=r+(s?-1:1);return l<0||l>=i.length?null:i[l]}function Ha(e,t=5){let o=0;for(;e&&us(e)===null&&++o<=t;)e=e.parentElement;return us(e)===null?null:e}function Fe(e){var t;return e.gos.get("suppressHeaderFocus")||!!((t=e.overlays)!=null&&t.isExclusive())}function Uo(e){var t;return e.gos.get("suppressCellFocus")||!!((t=e.overlays)!=null&&t.isExclusive())}function et(e,t,o=!1){const s=e.ctrlsSvc.get("gridCtrl");return!o&&s.focusNextInnerContainer(t)?!0:((o||!t&&!s.isDetailGrid())&&s.forceFocusOutOfContainer(t),!1)}function Ga(e,t=!1){return e===m.DELETE?!0:!t&&e===m.BACKSPACE?fi():!1}var Ba=class extends v{constructor(e,t,o,s){super(),this.cellCtrl=e,this.rowNode=o,this.rowCtrl=s,this.beans=t}init(){this.eGui=this.cellCtrl.eGui}onKeyDown(e){const t=e.key;switch(t){case m.ENTER:this.onEnterKeyDown(e);break;case m.F2:this.onF2KeyDown(e);break;case m.ESCAPE:this.onEscapeKeyDown(e);break;case m.TAB:this.onTabKeyDown(e);break;case m.BACKSPACE:case m.DELETE:this.onBackspaceOrDeleteKeyDown(t,e);break;case m.DOWN:case m.UP:case m.RIGHT:case m.LEFT:this.onNavigationKeyDown(e,t);break}}onNavigationKeyDown(e,t){var o;if(!this.cellCtrl.editing){if(e.shiftKey&&this.cellCtrl.isRangeSelectionEnabled())this.onShiftRangeSelect(e);else{const s=this.cellCtrl.getFocusedCellPosition();(o=this.beans.navigation)==null||o.navigateToNextCell(e,t,s,!0)}e.preventDefault()}}onShiftRangeSelect(e){const{rangeSvc:t,navigation:o}=this.beans;if(!t)return;const s=t.extendLatestRangeInDirection(e);s&&(o==null||o.ensureCellVisible(s))}onTabKeyDown(e){var t;(t=this.beans.navigation)==null||t.onTabKeyDown(this.cellCtrl,e)}onBackspaceOrDeleteKeyDown(e,t){var a;const{cellCtrl:o,beans:s,rowNode:i}=this,{gos:n,rangeSvc:r,eventSvc:l}=s;if(!o.editing){if(l.dispatchEvent({type:"keyShortcutChangedCellStart"}),Ga(e,n.get("enableCellEditingOnBackspace"))){if(r&&Oe(n))r.clearCellRangeCellValues({dispatchWrapperEvents:!0,wrapperEventSource:"deleteKey"});else if(o.isCellEditable()){const{column:d}=o,c=this.beans.valueSvc.getDeleteValue(d,i);i.setDataValue(d,c,"cellClear")}}else(a=s.editSvc)==null||a.startRowOrCellEdit(o,e,t);l.dispatchEvent({type:"keyShortcutChangedCellEnd"})}}onEnterKeyDown(e){var s,i,n;const{cellCtrl:t,beans:o}=this;if(t.editing||this.rowCtrl.editing)(s=this.beans.editSvc)==null||s.stopRowOrCellEdit(t,!1,!1,e.shiftKey);else if(o.gos.get("enterNavigatesVertically")){const r=e.shiftKey?m.UP:m.DOWN;(i=o.navigation)==null||i.navigateToNextCell(null,r,t.cellPosition,!1)}else(n=o.editSvc)==null||n.startRowOrCellEdit(t,m.ENTER,e),t.editing&&e.preventDefault()}onF2KeyDown(e){var s;const{cellCtrl:t,beans:o}=this;t.editing||(s=o.editSvc)==null||s.startRowOrCellEdit(t,m.F2,e)}onEscapeKeyDown(e){var s;const{cellCtrl:t,beans:o}=this;t.editing&&((s=o.editSvc)==null||s.stopRowOrCellEdit(t,!0))}processCharacter(e){var i;if(e.target!==this.eGui||this.cellCtrl.editing)return;const s=e.key;s===m.SPACE?this.onSpaceKeyDown(e):(i=this.beans.editSvc)!=null&&i.startRowOrCellEdit(this.cellCtrl,s,e)&&e.preventDefault()}onSpaceKeyDown(e){var o;const{gos:t}=this.beans;!this.cellCtrl.editing&&Hi(t)&&((o=this.beans.selectionSvc)==null||o.handleSelectionEvent(e,this.rowNode,"spaceKey")),e.preventDefault()}destroy(){super.destroy()}},Oa=class extends v{constructor(e,t,o){super(),this.cellCtrl=e,this.column=o,this.beans=t}onMouseEvent(e,t){if(!ve(t))switch(e){case"click":this.onCellClicked(t);break;case"mousedown":case"touchstart":this.onMouseDown(t);break;case"dblclick":this.onCellDoubleClicked(t);break;case"mouseout":this.onMouseOut(t);break;case"mouseover":this.onMouseOver(t);break}}onCellClicked(e){var d;if((d=this.beans.touchSvc)!=null&&d.handleCellDoubleClick(this,e))return;const{eventSvc:t,rangeSvc:o,gos:s,editSvc:i}=this.beans,n=e.ctrlKey||e.metaKey;o&&n&&o.getCellRangeCount(this.cellCtrl.cellPosition)>1&&o.intersectLastRange(!0);const r=this.cellCtrl.createEvent(e,"cellClicked");t.dispatchEvent(r);const l=this.column.getColDef();l.onCellClicked&&window.setTimeout(()=>{this.beans.frameworkOverrides.wrapOutgoing(()=>{l.onCellClicked(r)})},0),(s.get("singleClickEdit")||l.singleClickEdit)&&!s.get("suppressClickEdit")&&!(e.shiftKey&&(o==null?void 0:o.getCellRanges().length)!=0)&&(i==null||i.startRowOrCellEdit(this.cellCtrl,void 0,e))}onCellDoubleClicked(e){const{column:t,beans:o,cellCtrl:s}=this,{eventSvc:i,frameworkOverrides:n,gos:r,editSvc:l}=o,a=t.getColDef(),d=s.createEvent(e,"cellDoubleClicked");i.dispatchEvent(d),typeof a.onCellDoubleClicked=="function"&&window.setTimeout(()=>{n.wrapOutgoing(()=>{a.onCellDoubleClicked(d)})},0),!r.get("singleClickEdit")&&!r.get("suppressClickEdit")&&(l==null||l.startRowOrCellEdit(s,null,e))}onMouseDown(e){const{ctrlKey:t,metaKey:o,shiftKey:s}=e,i=e.target,{cellCtrl:n,beans:r}=this,{eventSvc:l,rangeSvc:a,rowNumbersSvc:d,focusSvc:c,gos:h}=r;if(this.isRightClickInExistingRange(e))return;const u=a&&!a.isEmpty(),g=this.containsWidget(i),{cellPosition:p}=n,f=Qe(p.column);if(d&&f&&!d.handleMouseDownOnCell(p,e)){a&&e.preventDefault(),e.stopImmediatePropagation();return}if(!s||!u){const y=h.get("enableCellTextSelection")&&e.defaultPrevented,S=(Ho()||y)&&!n.editing&&!Go(i)&&!g;n.focusCell(S)}if(s&&u&&!c.isCellFocused(p)){e.preventDefault();const C=c.getFocusedCell();if(C){const{column:y,rowIndex:S,rowPinned:w}=C,R=r.rowRenderer.getRowByPosition({rowIndex:S,rowPinned:w}),D=R==null?void 0:R.getCellCtrl(y);D!=null&&D.editing&&D.stopEditing(),c.setFocusedCell({column:y,rowIndex:S,rowPinned:w,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0})}}if(!g){if(a)if(f&&e.preventDefault(),s)a.extendLatestRangeToCell(p);else{const C=t||o;a.setRangeToCell(p,C)}l.dispatchEvent(this.cellCtrl.createEvent(e,"cellMouseDown"))}}isRightClickInExistingRange(e){const{rangeSvc:t}=this.beans;if(t){const o=t.isCellInAnyRange(this.cellCtrl.cellPosition),s=e.button===2||e.ctrlKey&&this.beans.gos.get("allowContextMenuWithControlKey");if(o&&s)return!0}return!1}containsWidget(e){return Ie(e,"ag-selection-checkbox",3)||Ie(e,"ag-drag-handle",3)}onMouseOut(e){if(this.mouseStayingInsideCell(e))return;const{eventSvc:t,colHover:o}=this.beans;t.dispatchEvent(this.cellCtrl.createEvent(e,"cellMouseOut")),o==null||o.clearMouseOver()}onMouseOver(e){if(this.mouseStayingInsideCell(e))return;const{eventSvc:t,colHover:o}=this.beans;t.dispatchEvent(this.cellCtrl.createEvent(e,"cellMouseOver")),o==null||o.setMouseOver([this.column])}mouseStayingInsideCell(e){if(!e.target||!e.relatedTarget)return!1;const t=this.cellCtrl.eGui,o=t.contains(e.target),s=t.contains(e.relatedTarget);return o&&s}destroy(){super.destroy()}},Wa=class extends v{constructor(e,t){super(),this.cellCtrl=e,this.beans=t,this.column=e.column,this.rowNode=e.rowNode}setupRowSpan(){this.rowSpan=this.column.getRowSpan(this.rowNode),this.addManagedListeners(this.beans.eventSvc,{newColumnsLoaded:()=>this.onNewColumnsLoaded()})}init(){this.eSetLeft=this.cellCtrl.getRootElement(),this.eContent=this.cellCtrl.eGui;const e=this.cellCtrl.getCellSpan();if(e||(this.setupColSpan(),this.setupRowSpan()),this.onLeftChanged(),this.onWidthChanged(),e||this._legacyApplyRowSpan(),e){const t=this.refreshSpanHeight.bind(this,e);t(),this.addManagedListeners(this.beans.eventSvc,{paginationChanged:t,recalculateRowBounds:t,pinnedHeightChanged:t})}}refreshSpanHeight(e){const t=e.getCellHeight();t!=null&&(this.eContent.style.height=`${t}px`)}onNewColumnsLoaded(){const e=this.column.getRowSpan(this.rowNode);this.rowSpan!==e&&(this.rowSpan=e,this._legacyApplyRowSpan(!0))}onDisplayColumnsChanged(){const e=this.getColSpanningList();_t(this.colsSpanning,e)||(this.colsSpanning=e,this.onWidthChanged(),this.onLeftChanged())}setupColSpan(){this.column.getColDef().colSpan!=null&&(this.colsSpanning=this.getColSpanningList(),this.addManagedListeners(this.beans.eventSvc,{displayedColumnsChanged:this.onDisplayColumnsChanged.bind(this),displayedColumnsWidthChanged:this.onWidthChanged.bind(this)}))}onWidthChanged(){if(!this.eContent)return;const e=this.getCellWidth();this.eContent.style.width=`${e}px`}getCellWidth(){return this.colsSpanning?this.colsSpanning.reduce((e,t)=>e+t.getActualWidth(),0):this.column.getActualWidth()}getColSpanningList(){const{column:e,rowNode:t}=this,o=e.getColSpan(t),s=[];if(o===1)s.push(e);else{let i=e;const n=e.getPinned();for(let r=0;i&&rthis.removeFeatures()),this.onSuppressCellFocusChanged(this.beans.gos.get("suppressCellFocus")),this.setupFocus(),this.applyStaticCssClasses(),this.setWrapText(),this.onFirstRightPinnedChanged(),this.onLastLeftPinnedChanged(),this.onColumnHover(),this.setupControlComps(),this.setupAutoHeight(s,r),this.refreshFirstAndLastStyles(),this.refreshAriaColIndex(),(l=this.positionFeature)==null||l.init(),(a=this.customStyleFeature)==null||a.setComp(e),(d=this.tooltipFeature)==null||d.refreshTooltip(),(c=this.keyboardListener)==null||c.init(),(h=this.rangeFeature)==null||h.setComp(e),(u=this.rowResizeFeature)==null||u.refreshRowResizer(),n&&this.isCellEditable()?(g=this.beans.editSvc)==null||g.startEditing(this):this.showValue(!1,!0),this.onCompAttachedFuncs.length&&(this.onCompAttachedFuncs.forEach(p=>p()),this.onCompAttachedFuncs=[])}setupAutoHeight(e,t){var o;this.isAutoHeight=((o=this.beans.rowAutoHeight)==null?void 0:o.setupCellAutoHeight(this,e,t))??!1}getCellAriaRole(){return this.column.getColDef().cellAriaRole??"gridcell"}isCellRenderer(){const e=this.column.getColDef();return e.cellRenderer!=null||e.cellRendererSelector!=null}getValueToDisplay(){return this.valueFormatted??this.value}showValue(e,t){var h,u,g;const{beans:o,column:s,rowNode:i,rangeFeature:n}=this,{userCompFactory:r}=o,l=this.getValueToDisplay();let a;const d=i.stub&&((h=i.groupData)==null?void 0:h[s.getId()])==null,c=s.getColDef();if(d||this.isCellRenderer()){const p=this.createCellRendererParams();!d||Qe(s)?a=Fs(r,c,p):a=ga(r,c,p)}if(!a&&!d&&((u=o.findSvc)!=null&&u.isMatch(i,s))){const p=this.createCellRendererParams();a=Fs(r,{...s.getColDef(),cellRenderer:"agFindCellRenderer"},p)}this.comp.setRenderDetails(a,l,e),!t&&n&&be(o,()=>n==null?void 0:n.refreshHandle()),(g=this.rowResizeFeature)==null||g.refreshRowResizer()}setupControlComps(){const e=this.column.getColDef();this.includeSelection=this.isIncludeControl(this.isCheckboxSelection(e),!0),this.includeRowDrag=this.isIncludeControl(e.rowDrag),this.includeDndSource=this.isIncludeControl(e.dndSource),this.comp.setIncludeSelection(this.includeSelection),this.comp.setIncludeDndSource(this.includeDndSource),this.comp.setIncludeRowDrag(this.includeRowDrag)}isForceWrapper(){return this.beans.gos.get("enableCellTextSelection")||this.column.isAutoHeight()}isIncludeControl(e,t=!1){return(this.rowNode.rowPinned==null||t&&ka(this.rowNode))&&!!e}isCheckboxSelection(e){const{rowSelection:t,groupDisplayType:o}=this.beans.gridOptions,s=ol(t),i=Zi(this.column);return o==="custom"&&s!=="selectionColumn"&&i?!1:e.checkboxSelection||i&&typeof t=="object"&&tl(t)}refreshShouldDestroy(){const e=this.column.getColDef(),t=this.includeSelection!=this.isIncludeControl(this.isCheckboxSelection(e),!0),o=this.includeRowDrag!=this.isIncludeControl(e.rowDrag),s=this.includeDndSource!=this.isIncludeControl(e.dndSource),i=this.isAutoHeight!=this.column.isAutoHeight();return t||o||s||i}onPopupEditorClosed(){var e;this.editing&&((e=this.beans.editSvc)==null||e.stopRowOrCellEdit(this))}stopEditing(e=!1){var t;return((t=this.beans.editSvc)==null?void 0:t.stopEditing(this,e))??!1}createCellRendererParams(){const{value:e,valueFormatted:t,column:o,rowNode:s,comp:i,eGui:n,beans:{valueSvc:r,gos:l}}=this;return A(l,{value:e,valueFormatted:t,getValue:()=>r.getValueForDisplay(o,s).value,setValue:d=>r.setValue(s,o,d),formatValue:this.formatValue.bind(this),data:s.data,node:s,pinned:o.getPinned(),colDef:o.getColDef(),column:o,refreshCell:this.refreshCell.bind(this),eGridCell:n,eParentOfValue:i.getParentOfValue(),registerRowDragger:(d,c,h,u)=>this.registerRowDragger(d,c,u),setTooltip:(d,c)=>{var h;l.assertModuleRegistered("Tooltip",3),this.tooltipFeature&&this.disableTooltipFeature(),this.enableTooltipFeature(d,c),(h=this.tooltipFeature)==null||h.refreshTooltip()}})}onCellChanged(e){e.column===this.column&&this.refreshCell({})}refreshOrDestroyCell(e){var t;this.refreshShouldDestroy()?(t=this.rowCtrl)==null||t.recreateCell(this):this.refreshCell(e)}refreshCell(e){var d,c,h,u,g,p;if(this.suppressRefreshCell||this.editing)return;const t=this.column.getColDef(),o=e!=null&&!!e.newData,s=e!=null&&!!e.suppressFlash,i=t.field==null&&t.valueGetter==null&&t.showRowGroup==null,n=e&&e.forceRefresh||i||o,r=!!this.comp,l=this.updateAndFormatValue(r),a=n||l;if(r){if(a){this.showValue(o,!1);const f=(d=this.beans.filterManager)==null?void 0:d.isSuppressFlashingCellsBecauseFiltering();!s&&!f&&t.enableCellChangeFlash&&((c=this.beans.cellFlashSvc)==null||c.flashCell(this)),(h=this.customStyleFeature)==null||h.applyUserStyles(),(u=this.customStyleFeature)==null||u.applyClassesFromColDef()}(g=this.tooltipFeature)==null||g.refreshTooltip(),(p=this.customStyleFeature)==null||p.applyCellClassRules()}}isCellEditable(){return this.column.isCellEditable(this.rowNode)}formatValue(e){return this.callValueFormatter(e)??e}callValueFormatter(e){return this.beans.valueSvc.formatValue(this.column,this.rowNode,e)}updateAndFormatValue(e){const t=this.value,o=this.valueFormatted,{value:s,valueFormatted:i}=this.beans.valueSvc.getValueForDisplay(this.column,this.rowNode,!0);return this.value=s,this.valueFormatted=i,e?!this.valuesAreEqual(t,this.value)||this.valueFormatted!=o:!0}valuesAreEqual(e,t){const o=this.column.getColDef();return o.equals?o.equals(e,t):e===t}addDomData(e){const t=this.eGui;Be(this.beans.gos,t,Bt,this),e.addDestroyFunc(()=>Be(this.beans.gos,t,Bt,null))}createEvent(e,t){const{rowNode:o,column:s,value:i,beans:n}=this;return A(n.gos,{type:t,node:o,data:o.data,value:i,column:s,colDef:s.getColDef(),rowPinned:o.rowPinned,event:e,rowIndex:o.rowIndex})}processCharacter(e){var t;(t=this.keyboardListener)==null||t.processCharacter(e)}onKeyDown(e){var t;(t=this.keyboardListener)==null||t.onKeyDown(e)}onMouseEvent(e,t){var o;(o=this.mouseListener)==null||o.onMouseEvent(e,t)}getColSpanningList(){return this.positionFeature.getColSpanningList()}onLeftChanged(){var e;this.comp&&((e=this.positionFeature)==null||e.onLeftChanged())}onDisplayedColumnsChanged(){this.eGui&&(this.refreshAriaColIndex(),this.refreshFirstAndLastStyles())}refreshFirstAndLastStyles(){const{comp:e,column:t,beans:o}=this;un(e,t,o.visibleCols)}refreshAriaColIndex(){const e=this.beans.visibleCols.getAriaColIndex(this.column);gi(this.eGui,e)}onWidthChanged(){var e;return(e=this.positionFeature)==null?void 0:e.onWidthChanged()}getRowPosition(){const{rowIndex:e,rowPinned:t}=this.cellPosition;return{rowIndex:e,rowPinned:t}}updateRangeBordersIfRangeCount(){var e;this.comp&&((e=this.rangeFeature)==null||e.updateRangeBordersIfRangeCount())}onCellSelectionChanged(){var e;this.comp&&((e=this.rangeFeature)==null||e.onCellSelectionChanged())}isRangeSelectionEnabled(){return this.rangeFeature!=null}focusCell(e=!1){this.beans.focusSvc.setFocusedCell({...this.getFocusedCellPosition(),forceBrowserFocus:e})}restoreFocus(e=!1){if(!this.comp||this.editing||!this.isCellFocused()||!this.beans.focusSvc.shouldTakeFocus())return;const t=()=>{if(!this.isAlive())return;const o=this.comp.getFocusableElement();this.isCellFocused()&&o.focus({preventScroll:!0})};if(e){setTimeout(t,0);return}t()}onRowIndexChanged(){var e,t;this.createCellPosition(),this.onCellFocused(),this.restoreFocus(),(e=this.rangeFeature)==null||e.onCellSelectionChanged(),(t=this.rowResizeFeature)==null||t.refreshRowResizer()}onSuppressCellFocusChanged(e){const t=this.eGui;t&&(Qe(this.column)&&(e=!0),Le(t,"tabindex",e?void 0:-1))}onFirstRightPinnedChanged(){if(!this.comp)return;const e=this.column.isFirstRightPinned();this.comp.toggleCss(Ua,e)}onLastLeftPinnedChanged(){if(!this.comp)return;const e=this.column.isLastLeftPinned();this.comp.toggleCss(Ka,e)}checkCellFocused(){return this.beans.focusSvc.isCellFocused(this.cellPosition)}isCellFocused(){const e=this.checkCellFocused();return this.hasBeenFocused||(this.hasBeenFocused=e),e}setupFocus(){this.restoreFocus(!0),this.onCellFocused(this.focusEventWhileNotReady??void 0)}onCellFocused(e){var i;const{beans:t}=this;if(Uo(t))return;if(!this.comp){e&&(this.focusEventWhileNotReady=e);return}const o=this.isCellFocused();if(this.comp.toggleCss(_a,o),o&&e&&e.forceBrowserFocus){let n=this.comp.getFocusableElement();if(this.editing){const r=Ae(n,null,!0);r.length&&(n=r[0])}n.focus({preventScroll:!!e.preventScrollOnBrowserFocus})}const s=t.gos.get("editType")==="fullRow";!o&&!s&&this.editing&&((i=t.editSvc)==null||i.stopRowOrCellEdit(this)),o&&this.rowCtrl.announceDescription()}createCellPosition(){const{rowIndex:e,rowPinned:t}=this.rowNode;this.cellPosition={rowIndex:e,rowPinned:Re(t),column:this.column}}setInlineEditingCss(){var e;(e=this.beans.editSvc)==null||e.setInlineEditingCss(this.rowCtrl)}applyStaticCssClasses(){const{comp:e}=this;e.toggleCss(Va,!0),e.toggleCss(ja,!0);const t=this.column.isAutoHeight()==!0;e.toggleCss(Na,t),e.toggleCss(za,!t)}onColumnHover(){var e;(e=this.beans.colHover)==null||e.onCellColumnHover(this.column,this.comp)}onColDefChanged(){var e;this.comp&&(this.column.isTooltipEnabled()?(this.disableTooltipFeature(),this.enableTooltipFeature()):this.disableTooltipFeature(),this.setWrapText(),this.editing?(e=this.beans.editSvc)==null||e.handleColDefChanged(this):this.refreshOrDestroyCell({forceRefresh:!0,suppressFlash:!0}))}setWrapText(){const e=this.column.getColDef().wrapText==!0;this.comp.toggleCss($a,e)}dispatchCellContextMenuEvent(e){const t=this.column.getColDef(),o=this.createEvent(e,"cellContextMenu"),{beans:s}=this;s.eventSvc.dispatchEvent(o),t.onCellContextMenu&&window.setTimeout(()=>{s.frameworkOverrides.wrapOutgoing(()=>{t.onCellContextMenu(o)})},0)}getCellRenderer(){var e;return((e=this.comp)==null?void 0:e.getCellRenderer())??null}destroy(){this.onCompAttachedFuncs=[],this.onEditorAttachedFuncs=[],this.isCellFocused()&&this.hasBrowserFocus()&&this.beans.focusSvc.attemptToRecoverFocus(),super.destroy()}hasBrowserFocus(){var e;return((e=this.eGui)==null?void 0:e.contains(z(this.beans)))??!1}createSelectionCheckbox(){var t;const e=(t=this.beans.selectionSvc)==null?void 0:t.createCheckboxSelectionComponent();if(e)return this.beans.context.createBean(e),e.init({rowNode:this.rowNode,column:this.column}),e}createDndSource(){const e=this.beans.registry.createDynamicBean("dndSourceComp",!1,this.rowNode,this.column,this.eGui);return e&&this.beans.context.createBean(e),e}registerRowDragger(e,t,o){if(this.customRowDragComp){this.customRowDragComp.setDragElement(e,t);return}const s=this.createRowDragComp(e,t,o);s&&(this.customRowDragComp=s,this.addDestroyFunc(()=>{this.beans.context.destroyBean(s),this.customRowDragComp=null}))}createRowDragComp(e,t,o){var i;const s=(i=this.beans.rowDragSvc)==null?void 0:i.createRowDragCompForCell(this.rowNode,this.column,()=>this.value,e,t,o);if(s)return this.beans.context.createBean(s),s}cellEditorAttached(){this.onEditorAttachedFuncs.forEach(e=>e()),this.onEditorAttachedFuncs=[]}setFocusedCellPosition(e){}getFocusedCellPosition(){return this.cellPosition}refreshAriaRowIndex(){}getRootElement(){return this.eGui}},pn="__ag_grid_instance";function fn(e,t){t[pn]=e.gridInstanceId}function tt(e,t){return Za(e,t.target)}function Za(e,t){let o=t;for(;o;){const s=o[pn];if(k(s))return s===e.gridInstanceId;o=o.parentElement}return!1}function Ya(e,t){var o;return((o=gn(e,t.target))==null?void 0:o.getFocusedCellPosition())??null}var Qa=class extends v{constructor(){super(...arguments),this.beanName="dragAndDrop",this.dragSourceAndParamsList=[],this.dropTargets=[]}wireBeans(e){this.ctrlsSvc=e.ctrlsSvc,this.dragSvc=e.dragSvc,this.environment=e.environment,this.userCompFactory=e.userCompFactory}addDragSource(e,t=!1){const o={eElement:e.eElement,dragStartPixels:e.dragStartPixels,onDragStart:this.onDragStart.bind(this,e),onDragStop:this.onDragStop.bind(this),onDragging:this.onDragging.bind(this),onDragCancel:this.onDragCancel.bind(this),includeTouch:t};this.dragSourceAndParamsList.push({params:o,dragSource:e}),this.dragSvc.addDragSource(o)}getDragAndDropImageComponent(){const{dragAndDropImageComp:e}=this;return!e||!e.comp?null:e.comp}removeDragSource(e){const{dragSourceAndParamsList:t,dragSvc:o}=this,s=t.find(i=>i.dragSource===e);s&&(o.removeDragSource(s.params),ye(t,s))}destroy(){const{dragSourceAndParamsList:e,dragSvc:t,dropTargets:o}=this;e.forEach(s=>t.removeDragSource(s.params)),e.length=0,o.length=0,this.clearDragAndDropProperties(),super.destroy()}nudge(){this.dragging&&this.onDragging(this.eventLastTime,!0)}onDragStart(e,t){var o;this.dragging=!0,this.dragSource=e,this.eventLastTime=t,this.dragItem=e.getDragItem(),(o=e.onDragStarted)==null||o.call(e),this.createDragAndDropImageComponent()}onDragStop(e){var o,s;(s=(o=this.dragSource)==null?void 0:o.onDragStopped)==null||s.call(o);const{lastDropTarget:t}=this;if(t!=null&&t.onDragStop){const i=this.createDropTargetEvent(t,e,null,null,!1);t.onDragStop(i)}this.clearDragAndDropProperties()}onDragCancel(){var o;const{dragSource:e,lastDropTarget:t}=this;(o=e==null?void 0:e.onDragCancelled)==null||o.call(e),t!=null&&t.onDragCancel&&t.onDragCancel(this.createDropTargetEvent(t,this.eventLastTime,null,null,!1)),this.clearDragAndDropProperties()}clearDragAndDropProperties(){this.eventLastTime=null,this.dragging=!1,this.lastDropTarget=void 0,this.dragItem=null,this.dragSource=null,this.removeDragAndDropImageComponent()}onDragging(e,t=!1){var c,h;const o=this.getHorizontalDirection(e),s=this.getVerticalDirection(e);this.eventLastTime=e,this.positionDragAndDropImageComp(e);const i=this.dropTargets.filter(u=>this.isMouseOnDropTarget(e,u)),n=this.findCurrentDropTarget(e,i),{lastDropTarget:r,dragSource:l,dragAndDropImageComp:a,dragItem:d}=this;if(n!==r){if(this.leaveLastTargetIfExists(e,o,s,t),r!==null&&n===null&&((c=l==null?void 0:l.onGridExit)==null||c.call(l,d)),r===null&&n!==null&&((h=l==null?void 0:l.onGridEnter)==null||h.call(l,d)),this.enterDragTargetIfExists(n,e,o,s,t),n&&a){const{comp:u,promise:g}=a;u?u.setIcon(n.getIconName?n.getIconName():null,!1):g.then(p=>{p&&p.setIcon(n.getIconName?n.getIconName():null,!1)})}this.lastDropTarget=n}else if(n&&n.onDragging){const u=this.createDropTargetEvent(n,e,o,s,t);n.onDragging(u)}}getAllContainersFromDropTarget(e){const t=e.getSecondaryContainers?e.getSecondaryContainers():null,o=[[e.getContainer()]];return t?o.concat(t):o}isMouseOnDropTarget(e,t){const o=this.getAllContainersFromDropTarget(t);let s=!1;const i=(l,a)=>{for(const d of a){const{width:c,height:h,left:u,right:g,top:p,bottom:f}=d.getBoundingClientRect();if(c===0||h===0)return!1;const C=l.clientX>=u&&l.clientX=p&&l.clientYa).indexOf(n)!==-1)return r;return null}enterDragTargetIfExists(e,t,o,s,i){if(e&&e.onDragEnter){const n=this.createDropTargetEvent(e,t,o,s,i);e.onDragEnter(n)}}leaveLastTargetIfExists(e,t,o,s){const{lastDropTarget:i}=this;if(!i)return;if(i.onDragLeave){const r=this.createDropTargetEvent(i,e,t,o,s);i.onDragLeave(r)}const n=this.getDragAndDropImageComponent();n&&n.setIcon(null,!1)}addDropTarget(e){this.dropTargets.push(e)}removeDropTarget(e){this.dropTargets=this.dropTargets.filter(t=>t.getContainer()!==e.getContainer())}hasExternalDropZones(){return this.dropTargets.some(e=>e.external)}findExternalZone(e){return this.dropTargets.filter(o=>o.external).find(o=>o.getContainer()===e.getContainer())||null}isDropZoneWithinThisGrid(e){const o=this.ctrlsSvc.getGridBodyCtrl().eGridBody,{dropZoneTarget:s}=e;return o.contains(s)}getHorizontalDirection(e){var s;const t=(s=this.eventLastTime)==null?void 0:s.clientX,o=e.clientX;return t===o?null:t>o?"left":"right"}getVerticalDirection(e){var s;const t=(s=this.eventLastTime)==null?void 0:s.clientY,o=e.clientY;return t===o?null:t>o?"up":"down"}createDropTargetEvent(e,t,o,s,i){const n=e.getContainer(),r=n.getBoundingClientRect(),{dragItem:l,dragSource:a,gos:d}=this,c=t.clientX-r.left,h=t.clientY-r.top;return A(d,{event:t,x:c,y:h,vDirection:s,hDirection:o,dragSource:a,fromNudge:i,dragItem:l,dropZoneTarget:n})}positionDragAndDropImageComp(e){const t=this.getDragAndDropImageComponent();t&&Xr(t.getGui(),e,this.beans)}removeDragAndDropImageComponent(){var t;const{dragAndDropImageComp:e}=this;if(e){const{comp:o}=e;if(o){const s=o.getGui();(t=this.dragAndDropImageParent)==null||t.removeChild(s),this.destroyBean(o)}}this.dragAndDropImageComp=null}createDragAndDropImageComponent(){const{dragSource:e,gos:t,userCompFactory:o}=this;if(!e)return;const s=ia(o,A(t,{dragSource:e}));if(!s)return;const i=s.newAgStackInstance();this.dragAndDropImageComp={promise:i},i.then(n=>{!n||!this.isAlive()||(this.processDragAndDropImageComponent(n),this.dragAndDropImageComp.comp=n)})}processDragAndDropImageComponent(e){const{dragSource:t,environment:o}=this;if(!t)return;const s=e.getGui();s.style.setProperty("position","absolute"),s.style.setProperty("z-index","9999"),fn(this.gos,s),o.applyThemeClasses(s),e.setIcon(null,!1);let{dragItemName:i}=t;typeof i=="function"&&(i=i()),e.setLabel(i||""),s.style.top="20px",s.style.left="20px";const n=No(this.beans);this.dragAndDropImageParent=n,n?n.appendChild(s):I(54)}registerGridDropTarget(e,t){const o={getContainer:e,isInterestedIn:s=>s===1||s===0,getIconName:()=>"notAllowed"};this.addDropTarget(o),t.addDestroyFunc(()=>this.removeDropTarget(o))}};function Xa(e,t){const o=e.column===t.column,s=e.rowPinned===t.rowPinned,i=e.rowIndex===t.rowIndex;return o&&s&&i}function Ja(e,t){switch(e.rowPinned){case"top":if(t.rowPinned!=="top")return!0;break;case"bottom":if(t.rowPinned!=="bottom")return!1;break;default:if(k(t.rowPinned))return t.rowPinned!=="top";break}return e.rowIndexthis.nodeIdsToColumns[o.id][s.getId()]=!0),o=o.parent}linkPathItems(e,t){let o=e;for(let s=0;so[i.getId()])}getNotValueColumnsForNode(e,t){if(!this.keepingColumns)return null;const o=this.nodeIdsToColumns[e.id];return t.filter(i=>!o[i.getId()])}};function vn(e,t,o){if(o===0)return!1;const s=Math.abs(e.clientX-t.clientX),i=Math.abs(e.clientY-t.clientY);return Math.max(s,i)<=o}var id=class extends v{constructor(){super(...arguments),this.beanName="dragSvc",this.dragEndFunctions=[],this.dragSources=[]}destroy(){const{dragSources:e}=this;e.forEach(this.removeListener.bind(this)),e.length=0,super.destroy()}removeListener(e){const t=e.dragSource.eElement,o=e.mouseDownListener;if(t.removeEventListener("mousedown",o),e.touchEnabled){const s=e.touchStartListener;t.removeEventListener("touchstart",s,{passive:!0})}}removeDragSource(e){const{dragSources:t}=this,o=t.find(s=>s.dragSource===e);o&&(this.removeListener(o),ye(t,o))}addDragSource(e){const t=this.onMouseDown.bind(this,e),{eElement:o,includeTouch:s,stopPropagationForTouch:i}=e;o.addEventListener("mousedown",t);let n=null;const r=this.gos.get("suppressTouch");s&&!r&&(n=l=>{Go(l.target)||(i&&l.stopPropagation(),this.onTouchStart(e,l))},o.addEventListener("touchstart",n,{passive:!1})),this.dragSources.push({dragSource:e,mouseDownListener:t,touchStartListener:n,touchEnabled:!!s})}onTouchStart(e,t){this.currentDragParams=e,this.dragging=!1;const o=t.touches[0];this.touchLastTime=o,this.touchStart=o;const s=a=>this.onTouchMove(a,e.eElement),i=a=>this.onTouchUp(a,e.eElement),n=a=>{a.cancelable&&a.preventDefault()},r=t.target,l=[{target:Je(this.beans),type:"touchmove",listener:n,options:{passive:!1}},{target:r,type:"touchmove",listener:s,options:{passive:!0}},{target:r,type:"touchend",listener:i,options:{passive:!0}},{target:r,type:"touchcancel",listener:i,options:{passive:!0}}];this.addTemporaryEvents(l),e.dragStartPixels===0&&this.onCommonMove(o,this.touchStart,e.eElement)}onMouseDown(e,t){const o=t;if(e.skipMouseEvent&&e.skipMouseEvent(t)||o._alreadyProcessedByDragService||(o._alreadyProcessedByDragService=!0,t.button!==0))return;this.shouldPreventMouseEvent(t)&&t.preventDefault(),this.currentDragParams=e,this.dragging=!1,this.mouseStartEvent=t,this.startTarget=t.target;const s=d=>this.onMouseMove(d,e.eElement),i=d=>this.onMouseUp(d,e.eElement),n=d=>d.preventDefault(),r=d=>{d.key===m.ESCAPE&&this.cancelDrag(e.eElement)},l=Je(this.beans),a=[{target:l,type:"mousemove",listener:s},{target:l,type:"mouseup",listener:i},{target:l,type:"contextmenu",listener:n},{target:l,type:"keydown",listener:r}];this.addTemporaryEvents(a),e.dragStartPixels===0&&this.onMouseMove(t,e.eElement)}addTemporaryEvents(e){e.forEach(t=>{const{target:o,type:s,listener:i,options:n}=t;o.addEventListener(s,i,n)}),this.dragEndFunctions.push(()=>{e.forEach(t=>{const{target:o,type:s,listener:i,options:n}=t;o.removeEventListener(s,i,n)})})}isEventNearStartEvent(e,t){const{dragStartPixels:o}=this.currentDragParams,s=k(o)?o:4;return vn(e,t,s)}getFirstActiveTouch(e){for(let t=0;t{const r=n.target,l=r==null?void 0:r.tagName.toLocaleLowerCase();return!!(l!=null&&l.match("^a$|textarea|input|select|button"))};return o&&s&&e.cancelable&&tt(t,e)&&!i(e)}onTouchUp(e,t){let o=this.getFirstActiveTouch(e.changedTouches);o||(o=this.touchLastTime),this.onUpCommon(o,t)}onMouseUp(e,t){this.onUpCommon(e,t)}onUpCommon(e,t){this.dragging&&(this.dragging=!1,this.currentDragParams.onDragStop(e),this.eventSvc.dispatchEvent({type:"dragStopped",target:t})),this.resetDragProperties()}cancelDrag(e){var t,o;this.eventSvc.dispatchEvent({type:"dragCancelled",target:e}),(o=(t=this.currentDragParams)==null?void 0:t.onDragCancel)==null||o.call(t),this.resetDragProperties()}resetDragProperties(){this.mouseStartEvent=null,this.startTarget=null,this.touchStart=null,this.touchLastTime=null,this.currentDragParams=null;const{dragEndFunctions:e}=this;e.forEach(t=>t()),e.length=0}};function wn(e,t){return e+"_"+t}function O(e){return e instanceof yn}var yn=class extends v{constructor(e,t,o,s){super(),this.providedColumnGroup=e,this.groupId=t,this.partId=o,this.pinned=s,this.isColumn=!1,this.displayedChildren=[],this.autoHeaderHeight=null,this.parent=null}reset(){this.parent=null,this.children=null,this.displayedChildren=null}getParent(){return this.parent}getUniqueId(){return wn(this.groupId,this.partId)}isEmptyGroup(){return this.displayedChildren.length===0}isMoving(){const e=this.getProvidedColumnGroup().getLeafColumns();return!e||e.length===0?!1:e.every(t=>t.isMoving())}checkLeft(){if(this.displayedChildren.forEach(e=>{O(e)&&e.checkLeft()}),this.displayedChildren.length>0)if(this.gos.get("enableRtl")){const t=H(this.displayedChildren).getLeft();this.setLeft(t)}else{const e=this.displayedChildren[0].getLeft();this.setLeft(e)}else this.setLeft(null)}getLeft(){return this.left}getOldLeft(){return this.oldLeft}setLeft(e){this.oldLeft=this.left,this.left!==e&&(this.left=e,this.dispatchLocalEvent({type:"leftChanged"}))}getPinned(){return this.pinned}getGroupId(){return this.groupId}getPartId(){return this.partId}getActualWidth(){var t;let e=0;return(t=this.displayedChildren)==null||t.forEach(o=>{e+=o.getActualWidth()}),e}isResizable(){if(!this.displayedChildren)return!1;let e=!1;return this.displayedChildren.forEach(t=>{t.isResizable()&&(e=!0)}),e}getMinWidth(){let e=0;return this.displayedChildren.forEach(t=>{e+=t.getMinWidth()}),e}addChild(e){this.children||(this.children=[]),this.children.push(e)}getDisplayedChildren(){return this.displayedChildren}getLeafColumns(){const e=[];return this.addLeafColumns(e),e}getDisplayedLeafColumns(){const e=[];return this.addDisplayedLeafColumns(e),e}getDefinition(){return this.providedColumnGroup.getColGroupDef()}getColGroupDef(){return this.providedColumnGroup.getColGroupDef()}isPadding(){return this.providedColumnGroup.isPadding()}isExpandable(){return this.providedColumnGroup.isExpandable()}isExpanded(){return this.providedColumnGroup.isExpanded()}setExpanded(e){this.providedColumnGroup.setExpanded(e)}isAutoHeaderHeight(){var e;return!!((e=this.getColGroupDef())!=null&&e.autoHeaderHeight)}getAutoHeaderHeight(){return this.autoHeaderHeight}setAutoHeaderHeight(e){const t=e!==this.autoHeaderHeight;return this.autoHeaderHeight=e,t}addDisplayedLeafColumns(e){this.displayedChildren.forEach(t=>{we(t)?e.push(t):O(t)&&t.addDisplayedLeafColumns(e)})}addLeafColumns(e){this.children.forEach(t=>{we(t)?e.push(t):O(t)&&t.addLeafColumns(e)})}getChildren(){return this.children}getColumnGroupShow(){return this.providedColumnGroup.getColumnGroupShow()}getProvidedColumnGroup(){return this.providedColumnGroup}getPaddingLevel(){const e=this.getParent();return!this.isPadding()||!e||!e.isPadding()?0:1+e.getPaddingLevel()}calculateDisplayedColumns(){this.displayedChildren=[];let e=this;for(;e!=null&&e.isPadding();)e=e.getParent();if(!(e?e.getProvidedColumnGroup().isExpandable():!1)){this.displayedChildren=this.children,this.dispatchLocalEvent({type:"displayedChildrenChanged"});return}this.children.forEach(o=>{if(O(o)&&(!o.displayedChildren||!o.displayedChildren.length))return;switch(o.getColumnGroupShow()){case"open":e.getProvidedColumnGroup().isExpanded()&&this.displayedChildren.push(o);break;case"closed":e.getProvidedColumnGroup().isExpanded()||this.displayedChildren.push(o);break;default:this.displayedChildren.push(o);break}}),this.dispatchLocalEvent({type:"displayedChildrenChanged"})}},nd="ag-focus-managed",$t=class extends v{constructor(e,t={}){super(),this.eFocusable=e,this.callbacks=t,this.callbacks={shouldStopEventPropagation:()=>!1,onTabKeyDown:o=>{if(o.defaultPrevented)return;const s=jt(this.beans,this.eFocusable,!1,o.shiftKey);s&&(s.focus(),o.preventDefault())},...t}}postConstruct(){const{eFocusable:e,callbacks:{onFocusIn:t,onFocusOut:o}}=this;e.classList.add(nd),this.addKeyDownListeners(e),t&&this.addManagedElementListeners(e,{focusin:t}),o&&this.addManagedElementListeners(e,{focusout:o})}addKeyDownListeners(e){this.addManagedElementListeners(e,{keydown:t=>{if(t.defaultPrevented||ve(t))return;const{callbacks:o}=this;if(o.shouldStopEventPropagation(t)){Tt(t);return}t.key===m.TAB?o.onTabKeyDown(t):o.handleKeyDown&&o.handleKeyDown(t)}})}},ee={AUTO_HEIGHT:"ag-layout-auto-height",NORMAL:"ag-layout-normal",PRINT:"ag-layout-print"},Ko=class extends v{constructor(e){super(),this.view=e}postConstruct(){this.addManagedPropertyListener("domLayout",this.updateLayoutClasses.bind(this)),this.updateLayoutClasses()}updateLayoutClasses(){const e=this.gos.get("domLayout"),t={autoHeight:e==="autoHeight",normal:e==="normal",print:e==="print"},o=t.autoHeight?ee.AUTO_HEIGHT:t.print?ee.PRINT:ee.NORMAL;this.view.updateLayoutClasses(o,t)}},ge="Viewport",Ds="fakeVScrollComp",Ps=["fakeHScrollComp","centerHeader","topCenter","bottomCenter","stickyTopCenter","stickyBottomCenter"],Es=100,ro=150,rd=class extends v{constructor(e){super(),this.clearRetryListenerFncs=[],this.lastScrollSource=[null,null],this.scrollLeft=-1,this.nextScrollTop=-1,this.scrollTop=-1,this.lastOffsetHeight=-1,this.lastScrollTop=-1,this.lastIsHorizontalScrollShowing=!1,this.scrollTimer=0,this.isVerticalPositionInvalidated=!0,this.isHorizontalPositionInvalidated=!0,this.eBodyViewport=e,this.resetLastHScrollDebounced=je(this,()=>this.lastScrollSource[1]=null,ro),this.resetLastVScrollDebounced=je(this,()=>this.lastScrollSource[0]=null,ro)}wireBeans(e){this.ctrlsSvc=e.ctrlsSvc,this.animationFrameSvc=e.animationFrameSvc,this.visibleCols=e.visibleCols}destroy(){super.destroy(),this.clearRetryListenerFncs=[],window.clearTimeout(this.scrollTimer)}postConstruct(){this.enableRtl=this.gos.get("enableRtl");const e=this.invalidateVerticalScroll.bind(this),t=this.invalidateHorizontalScroll.bind(this);this.addManagedEventListeners({displayedColumnsWidthChanged:this.onDisplayedColumnsWidthChanged.bind(this),gridSizeChanged:e,scrollGapChanged:t}),this.addManagedElementListeners(this.eBodyViewport,{scroll:e}),this.ctrlsSvc.whenReady(this,o=>{this.centerRowsCtrl=o.center,this.onDisplayedColumnsWidthChanged(),this.addScrollListener()})}invalidateHorizontalScroll(){this.isHorizontalPositionInvalidated=!0}invalidateVerticalScroll(){this.isVerticalPositionInvalidated=!0}addScrollListener(){this.addHorizontalScrollListeners(),this.addVerticalScrollListeners()}addHorizontalScrollListeners(){this.addManagedElementListeners(this.centerRowsCtrl.eViewport,{scroll:this.onHScroll.bind(this,ge)});for(const e of Ps){const t=this.ctrlsSvc.get(e);this.registerScrollPartner(t,this.onHScroll.bind(this,e))}}addVerticalScrollListeners(){const e=this.ctrlsSvc.get("fakeVScrollComp"),t=this.gos.get("debounceVerticalScrollbar"),o=t?je(this,this.onVScroll.bind(this,ge),Es):this.onVScroll.bind(this,ge),s=t?je(this,this.onVScroll.bind(this,Ds),Es):this.onVScroll.bind(this,Ds);this.addManagedElementListeners(this.eBodyViewport,{scroll:o}),this.registerScrollPartner(e,s)}registerScrollPartner(e,t){e.onScrollCallback(t)}onDisplayedColumnsWidthChanged(){this.enableRtl&&this.horizontallyScrollHeaderCenterAndFloatingCenter()}horizontallyScrollHeaderCenterAndFloatingCenter(e){this.centerRowsCtrl!=null&&(e===void 0&&(e=this.centerRowsCtrl.getCenterViewportScrollLeft()),this.setScrollLeftForAllContainersExceptCurrent(Math.abs(e)))}setScrollLeftForAllContainersExceptCurrent(e){for(const t of[...Ps,ge]){if(this.lastScrollSource[1]===t)continue;const o=this.getViewportForSource(t);Pt(o,e,this.enableRtl)}}getViewportForSource(e){return e===ge?this.centerRowsCtrl.eViewport:this.ctrlsSvc.get(e).eViewport}isControllingScroll(e,t){return this.lastScrollSource[t]==null?(t===0?this.lastScrollSource[0]=e:this.lastScrollSource[1]=e,!0):this.lastScrollSource[t]===e}onHScroll(e){if(!this.isControllingScroll(e,1))return;const t=this.centerRowsCtrl.eViewport,{scrollLeft:o}=t;if(this.shouldBlockScrollUpdate(1,o,!0))return;const s=Dt(this.getViewportForSource(e),this.enableRtl);this.doHorizontalScroll(s),this.resetLastHScrollDebounced()}onVScroll(e){if(!this.isControllingScroll(e,0))return;let t;if(e===ge?t=this.eBodyViewport.scrollTop:t=this.ctrlsSvc.get("fakeVScrollComp").getScrollPosition(),this.shouldBlockScrollUpdate(0,t,!0))return;const{animationFrameSvc:o}=this;o==null||o.setScrollTop(t),this.nextScrollTop=t,e===ge?this.ctrlsSvc.get("fakeVScrollComp").setScrollPosition(t):this.eBodyViewport.scrollTop=t,o!=null&&o.active?o.schedule():this.scrollGridIfNeeded(!0),this.resetLastVScrollDebounced()}doHorizontalScroll(e){const t=this.ctrlsSvc.get("fakeHScrollComp").getScrollPosition();this.scrollLeft===e&&e===t||(this.scrollLeft=e,this.fireScrollEvent(1),this.horizontallyScrollHeaderCenterAndFloatingCenter(e),this.centerRowsCtrl.onHorizontalViewportChanged(!0))}fireScrollEvent(e){const t={type:"bodyScroll",direction:e===1?"horizontal":"vertical",left:this.scrollLeft,top:this.scrollTop};this.eventSvc.dispatchEvent(t),window.clearTimeout(this.scrollTimer),this.scrollTimer=window.setTimeout(()=>{this.scrollTimer=0,this.eventSvc.dispatchEvent({...t,type:"bodyScrollEnd"})},ro)}shouldBlockScrollUpdate(e,t,o=!1){return o&&!Ze()?!1:e===0?this.shouldBlockVerticalScroll(t):this.shouldBlockHorizontalScroll(t)}shouldBlockVerticalScroll(e){const t=yi(this.eBodyViewport),{scrollHeight:o}=this.eBodyViewport;return e<0||e+t>o}shouldBlockHorizontalScroll(e){const t=this.centerRowsCtrl.getCenterWidth(),{scrollWidth:o}=this.centerRowsCtrl.eViewport;if(this.enableRtl){if(e>0)return!0}else if(e<0)return!0;return Math.abs(e)+t>o}redrawRowsAfterScroll(){this.fireScrollEvent(0)}checkScrollLeft(){this.scrollLeft!==this.centerRowsCtrl.getCenterViewportScrollLeft()&&this.onHScroll(ge)}scrollGridIfNeeded(e=!1){const t=this.scrollTop!=this.nextScrollTop;return t&&(this.scrollTop=this.nextScrollTop,e&&this.invalidateVerticalScroll(),this.redrawRowsAfterScroll()),t}setHorizontalScrollPosition(e,t=!1){const s=this.centerRowsCtrl.eViewport.scrollWidth-this.centerRowsCtrl.getCenterWidth();!t&&this.shouldBlockScrollUpdate(1,e)&&(this.enableRtl?e=e>0?0:s:e=Math.min(Math.max(e,0),s)),Pt(this.centerRowsCtrl.eViewport,Math.abs(e),this.enableRtl),this.doHorizontalScroll(e)}setVerticalScrollPosition(e){this.invalidateVerticalScroll(),this.eBodyViewport.scrollTop=e}getVScrollPosition(){if(!this.isVerticalPositionInvalidated){const{lastOffsetHeight:o,lastScrollTop:s}=this;return{top:s,bottom:s+o}}this.isVerticalPositionInvalidated=!1;const{scrollTop:e,offsetHeight:t}=this.eBodyViewport;return this.lastScrollTop=e,this.lastOffsetHeight=t,{top:e,bottom:e+t}}getApproximateVScollPosition(){return this.lastScrollTop>=0&&this.lastOffsetHeight>=0?{top:this.scrollTop,bottom:this.scrollTop+this.lastOffsetHeight}:this.getVScrollPosition()}getHScrollPosition(){return this.centerRowsCtrl.getHScrollPosition()}isHorizontalScrollShowing(){return this.isHorizontalPositionInvalidated&&(this.lastIsHorizontalScrollShowing=this.centerRowsCtrl.isHorizontalScrollShowing(),this.isHorizontalPositionInvalidated=!1),this.lastIsHorizontalScrollShowing}scrollHorizontally(e){const t=this.centerRowsCtrl.eViewport.scrollLeft;return this.setHorizontalScrollPosition(t+e),this.centerRowsCtrl.eViewport.scrollLeft-t}scrollToTop(){this.eBodyViewport.scrollTop=0}ensureNodeVisible(e,t=null){const{rowModel:o}=this.beans,s=o.getRowCount();let i=-1;for(let n=0;n=0&&this.ensureIndexVisible(i,t)}ensureIndexVisible(e,t,o=0){if($(this.gos,"print"))return;const{rowModel:s}=this.beans,i=s.getRowCount();if(typeof e!="number"||e<0||e>=i){I(88,{index:e});return}this.clearRetryListeners();const{frameworkOverrides:n,pageBounds:r,rowContainerHeight:l,rowRenderer:a}=this.beans;n.wrapIncoming(()=>{var p,f;const d=this.ctrlsSvc.getGridBodyCtrl(),c=s.getRow(e);let h,u,g=0;this.invalidateVerticalScroll();do{const{stickyTopHeight:C,stickyBottomHeight:y}=d,S=c.rowTop,w=c.rowHeight,R=r.getPixelOffset(),D=c.rowTop-R,b=D+c.rowHeight,P=this.getVScrollPosition(),L=l.divStretchOffset,F=P.top+L,T=P.bottom+L,M=T-F,B=l.getScrollPositionForPixel(D),_=l.getScrollPositionForPixel(b-M),X=Math.min((B+_)/2,D),re=F+C>D,lt=T-y{const y=this.getVScrollPosition().top;C!==y&&this.clearRetryListeners()},modelUpdated:()=>{this.clearRetryListeners(),!(e>=s.getRowCount())&&this.ensureIndexVisible(e,t,o+1)}})}})}clearRetryListeners(){this.clearRetryListenerFncs.forEach(e=>e()),this.clearRetryListenerFncs=[]}ensureColumnVisible(e,t="auto"){const{colModel:o,frameworkOverrides:s}=this.beans,i=o.getCol(e);if(!i||i.isPinned()||!this.visibleCols.isColDisplayed(i))return;const n=this.getPositionedHorizontalScroll(i,t);s.wrapIncoming(()=>{var r;n!==null&&this.centerRowsCtrl.setCenterViewportScrollLeft(n),this.centerRowsCtrl.onHorizontalViewportChanged(),(r=this.animationFrameSvc)==null||r.flushAllFrames()})}getPositionedHorizontalScroll(e,t){const{columnBeforeStart:o,columnAfterEnd:s}=this.isColumnOutsideViewport(e),i=this.centerRowsCtrl.getCenterWidth()i:os;return{columnBeforeStart:r,columnAfterEnd:l}}getColumnBounds(e){const t=this.enableRtl,o=this.visibleCols.bodyWidth,s=e.getActualWidth(),i=e.getLeft(),n=t?-1:1,r=t?o-i:i,l=r+s*n,a=r+s/2*n;return{colLeft:r,colMiddle:a,colRight:l}}getViewportBounds(){const e=this.centerRowsCtrl.getCenterWidth(),t=this.centerRowsCtrl.getCenterViewportScrollLeft(),o=t,s=e+t;return{start:o,end:s,width:e}}},jo=class extends v{constructor(e,t=!1){super(),this.callback=e,this.addSpacer=t}postConstruct(){const e=this.setWidth.bind(this);this.addManagedPropertyListener("domLayout",e),this.addManagedEventListeners({columnContainerWidthChanged:e,displayedColumnsChanged:e,leftPinnedWidthChanged:e}),this.addSpacer&&this.addManagedEventListeners({rightPinnedWidthChanged:e,scrollVisibilityChanged:e,scrollbarWidthChanged:e}),this.setWidth()}setWidth(){const e=$(this.gos,"print"),{visibleCols:t,scrollVisibleSvc:o}=this.beans,s=t.bodyWidth,i=t.getColsLeftWidth(),n=t.getDisplayedColumnsRightWidth();let r;e?r=s+i+n:(r=s,this.addSpacer&&(this.gos.get("enableRtl")?i:n)===0&&o.verticalScrollShowing&&(r+=o.getScrollbarWidth())),this.callback(r)}},ld=class extends v{constructor(e){super(),this.centerContainerCtrl=e}wireBeans(e){this.scrollVisibleSvc=e.scrollVisibleSvc}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>{this.gridBodyCtrl=e.gridBodyCtrl,this.listenForResize()}),this.addManagedEventListeners({scrollbarWidthChanged:this.onScrollbarWidthChanged.bind(this)}),this.addManagedPropertyListeners(["alwaysShowHorizontalScroll","alwaysShowVerticalScroll"],()=>{this.checkViewportAndScrolls()})}listenForResize(){const{beans:e,centerContainerCtrl:t,gridBodyCtrl:o}=this,s=()=>{be(e,()=>{this.onCenterViewportResized()})};t.registerViewportResizeListener(s),o.registerBodyViewportResizeListener(s)}onScrollbarWidthChanged(){this.checkViewportAndScrolls()}onCenterViewportResized(){if(this.scrollVisibleSvc.updateScrollGap(),this.centerContainerCtrl.isViewportInTheDOMTree()){const{pinnedCols:e,colFlex:t}=this.beans;e==null||e.keepPinnedColumnsNarrowerThanViewport(),this.checkViewportAndScrolls();const o=this.centerContainerCtrl.getCenterWidth();o!==this.centerWidth&&(this.centerWidth=o,t==null||t.refreshFlexedColumns({viewportWidth:this.centerWidth,updateBodyWidths:!0,fireResizedEvent:!0}))}else this.bodyHeight=0}checkViewportAndScrolls(){this.updateScrollVisibleService(),this.checkBodyHeight(),this.onHorizontalViewportChanged(),this.gridBodyCtrl.scrollFeature.checkScrollLeft()}getBodyHeight(){return this.bodyHeight}checkBodyHeight(){const e=this.gridBodyCtrl.eBodyViewport,t=yi(e);this.bodyHeight!==t&&(this.bodyHeight=t,this.eventSvc.dispatchEvent({type:"bodyHeightChanged"}))}updateScrollVisibleService(){this.updateScrollVisibleServiceImpl(),setTimeout(this.updateScrollVisibleServiceImpl.bind(this),500)}updateScrollVisibleServiceImpl(){const e={horizontalScrollShowing:this.centerContainerCtrl.isHorizontalScrollShowing(),verticalScrollShowing:this.gridBodyCtrl.isVerticalScrollShowing()};this.scrollVisibleSvc.setScrollsVisible(e)}onHorizontalViewportChanged(){const e=this.centerContainerCtrl.getCenterWidth(),t=this.centerContainerCtrl.getViewportScrollLeft();this.beans.colViewport.setScrollPosition(e,t)}};function Ts(e){if(e.group)return e.level;const t=e.parent;return t?t.level+1:0}var ad=0,Wt="renderedRow",Io=class extends v{constructor(e,t,o,s,i){var n;super(),this.rowNode=e,this.useAnimationFrameForCreate=s,this.printLayout=i,this.allRowGuis=[],this.active=!0,this.centerCellCtrls={list:[],map:{}},this.leftCellCtrls={list:[],map:{}},this.rightCellCtrls={list:[],map:{}},this.slideInAnimation={left:!1,center:!1,right:!1,fullWidth:!1},this.fadeInAnimation={left:!1,center:!1,right:!1,fullWidth:!1},this.rowDragComps=[],this.lastMouseDownOnDragger=!1,this.emptyStyle={},this.updateColumnListsPending=!1,this.rowId=null,this.businessKey=null,this.beans=t,this.gos=t.gos,this.paginationPage=((n=t.pagination)==null?void 0:n.getCurrentPage())??0,this.suppressRowTransform=this.gos.get("suppressRowTransform"),this.instanceId=e.id+"-"+ad++,this.rowId=vt(e.id),this.initRowBusinessKey(),this.rowFocused=t.focusSvc.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned),this.rowLevel=Ts(this.rowNode),this.setRowType(),this.setAnimateFlags(o),this.rowStyles=this.processStylesFromGridOptions(),this.addListeners()}initRowBusinessKey(){this.businessKeyForNodeFunc=this.gos.get("getBusinessKeyForNode"),this.updateRowBusinessKey()}updateRowBusinessKey(){if(typeof this.businessKeyForNodeFunc!="function")return;const e=this.businessKeyForNodeFunc(this.rowNode);this.businessKey=vt(e)}updateGui(e,t){e==="left"?this.leftGui=t:e==="right"?this.rightGui=t:e==="fullWidth"?this.fullWidthGui=t:this.centerGui=t}setComp(e,t,o,s){var h;const{context:i,focusSvc:n}=this.beans;s=Kt(this,i,s);const r={rowComp:e,element:t,containerType:o,compBean:s};this.allRowGuis.push(r),this.updateGui(o,r),this.initialiseRowComp(r);const l=this.rowNode,a=this.rowType==="FullWidthLoading"||l.stub,d=!l.data&&this.beans.rowModel.getType()==="infinite";!a&&!d&&!l.rowPinned&&this.beans.rowRenderer.dispatchFirstDataRenderedEvent();const c=(h=this.fullWidthGui)==null?void 0:h.element;c&&!this.editing&&n.isRowFocused(l.rowIndex,l.rowPinned)&&n.shouldTakeFocus()&&setTimeout(()=>c.focus({preventScroll:!0}),0)}unsetComp(e){this.allRowGuis=this.allRowGuis.filter(t=>t.containerType!==e),this.updateGui(e,void 0)}isCacheable(){return this.rowType==="FullWidthDetail"&&this.gos.get("keepDetailRows")}setCached(e){const t=e?"none":"";this.allRowGuis.forEach(o=>o.element.style.display=t)}initialiseRowComp(e){const t=this.gos;this.onSuppressCellFocusChanged(this.beans.gos.get("suppressCellFocus")),this.listenOnDomOrder(e),this.onRowHeightChanged(e),this.updateRowIndexes(e),this.setFocusedClasses(e),this.setStylesFromGridOptions(!1,e),Hi(t)&&this.rowNode.selectable&&this.onRowSelected(e),this.updateColumnLists(!this.useAnimationFrameForCreate);const o=e.rowComp;this.getInitialRowClasses(e.containerType).forEach(i=>o.toggleCss(i,!0)),this.executeSlideAndFadeAnimations(e),this.rowNode.group&&wr(e.element,this.rowNode.expanded==!0),this.setRowCompRowId(o),this.setRowCompRowBusinessKey(o),Be(t,e.element,Wt,this),e.compBean.addDestroyFunc(()=>Be(t,e.element,Wt,null)),this.useAnimationFrameForCreate?this.beans.animationFrameSvc.createTask(this.addHoverFunctionality.bind(this,e),this.rowNode.rowIndex,"p2",!1):this.addHoverFunctionality(e),this.isFullWidth()&&this.setupFullWidth(e),t.get("rowDragEntireRow")&&this.addRowDraggerToRow(e),this.useAnimationFrameForCreate&&this.beans.animationFrameSvc.addDestroyTask(()=>{this.isAlive()&&e.rowComp.toggleCss("ag-after-created",!0)}),this.executeProcessRowPostCreateFunc()}setRowCompRowBusinessKey(e){this.businessKey!=null&&e.setRowBusinessKey(this.businessKey)}setRowCompRowId(e){const t=vt(this.rowNode.id);this.rowId=t,t!=null&&e.setRowId(t)}executeSlideAndFadeAnimations(e){const{containerType:t}=e;this.slideInAnimation[t]&&(Fo(()=>{this.onTopChanged()}),this.slideInAnimation[t]=!1),this.fadeInAnimation[t]&&(Fo(()=>{e.rowComp.toggleCss("ag-opacity-zero",!1)}),this.fadeInAnimation[t]=!1)}addRowDraggerToRow(e){var s;const t=(s=this.beans.rowDragSvc)==null?void 0:s.createRowDragCompForRow(this.rowNode,e.element);if(!t)return;const o=this.createBean(t,this.beans.context);this.rowDragComps.push(o),e.compBean.addDestroyFunc(()=>{this.rowDragComps=this.rowDragComps.filter(i=>i!==o),this.destroyBean(o,this.beans.context)})}setupFullWidth(e){const t=this.getPinnedForContainer(e.containerType),o=this.createFullWidthCompDetails(e.element,t);e.rowComp.showFullWidth(o)}getFullWidthCellRenderers(){var e,t;return this.gos.get("embedFullWidthRows")?this.allRowGuis.map(o=>{var s;return(s=o==null?void 0:o.rowComp)==null?void 0:s.getFullWidthCellRenderer()}):[(t=(e=this.fullWidthGui)==null?void 0:e.rowComp)==null?void 0:t.getFullWidthCellRenderer()]}executeProcessRowPostCreateFunc(){const e=this.gos.getCallback("processRowPostCreate");if(!e||!this.areAllContainersReady())return;const t={eRow:this.centerGui.element,ePinnedLeftRow:this.leftGui?this.leftGui.element:void 0,ePinnedRightRow:this.rightGui?this.rightGui.element:void 0,node:this.rowNode,rowIndex:this.rowNode.rowIndex,addRenderedRowListener:this.addEventListener.bind(this)};e(t)}areAllContainersReady(){const{leftGui:e,centerGui:t,rightGui:o,beans:{visibleCols:s}}=this,i=!!e||!s.isPinningLeft(),n=!!t,r=!!o||!s.isPinningRight();return i&&n&&r}isNodeFullWidthCell(){if(this.rowNode.detail)return!0;const e=this.beans.gos.getCallback("isFullWidthRow");return e?e({rowNode:this.rowNode}):!1}setRowType(){const e=this.rowNode.stub&&!this.gos.get("suppressServerSideFullWidthLoadingRow")&&!this.gos.get("groupHideOpenParents"),t=this.isNodeFullWidthCell(),o=this.gos.get("masterDetail")&&this.rowNode.detail,s=this.beans.colModel.isPivotMode(),i=el(this.gos,this.rowNode,s);e?this.rowType="FullWidthLoading":o?this.rowType="FullWidthDetail":t?this.rowType="FullWidth":i?this.rowType="FullWidthGroup":this.rowType="Normal"}updateColumnLists(e=!1,t=!1){if(this.isFullWidth())return;const{animationFrameSvc:o}=this.beans;if(!(o!=null&&o.active)||e||this.printLayout){this.updateColumnListsImpl(t);return}this.updateColumnListsPending||(o.createTask(()=>{this.active&&this.updateColumnListsImpl(!0)},this.rowNode.rowIndex,"p1",!1),this.updateColumnListsPending=!0)}getNewCellCtrl(e){var o;if(!((o=this.beans.rowSpanSvc)!=null&&o.isCellSpanning(e,this.rowNode)))return new St(e,this.rowNode,this.beans,this)}isCorrectCtrlForSpan(e){var t;return!((t=this.beans.rowSpanSvc)!=null&&t.isCellSpanning(e.column,this.rowNode))}createCellCtrls(e,t,o=null){const s={list:[],map:{}},i=(d,c,h)=>{h!=null?s.list.splice(h,0,c):s.list.push(c),s.map[d]=c},n=[];for(const d of t){const c=d.getInstanceId();let h=e.map[c];h&&!this.isCorrectCtrlForSpan(h)&&(h.destroy(),h=void 0),h||(h=this.getNewCellCtrl(d)),h&&i(c,h)}for(const d of e.list){const c=d.column.getInstanceId();if(s.map[c]!=null)continue;!this.isCellEligibleToBeRemoved(d,o)?n.push([c,d]):d.destroy()}if(n.length)for(const[d,c]of n){const h=s.list.findIndex(g=>g.column.getLeft()>c.column.getLeft()),u=h===-1?void 0:Math.max(h-1,0);i(d,c,u)}const{focusSvc:r,visibleCols:l}=this.beans,a=r.getFocusedCell();if(a&&a.column.getPinned()==o){const d=a.column.getInstanceId();if(!s.map[d]&&l.allCols.includes(a.column)){const h=this.createFocusedCellCtrl();if(h){const u=s.list.findIndex(p=>p.column.getLeft()>h.column.getLeft()),g=u===-1?void 0:Math.max(u-1,0);i(d,h,g)}}}return s}createFocusedCellCtrl(){const{focusSvc:e,rowSpanSvc:t}=this.beans,o=e.getFocusedCell();if(!o)return;const s=t==null?void 0:t.getCellSpan(o.column,this.rowNode);if(s){if(s.firstNode!==this.rowNode||!s.doesSpanContain(o))return}else if(!e.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned))return;return this.getNewCellCtrl(o.column)}updateColumnListsImpl(e){this.updateColumnListsPending=!1,this.createAllCellCtrls(),this.setCellCtrls(e)}setCellCtrls(e){this.allRowGuis.forEach(t=>{const o=this.getCellCtrlsForContainer(t.containerType);t.rowComp.setCellCtrls(o,e)})}getCellCtrlsForContainer(e){switch(e){case"left":return this.leftCellCtrls.list;case"right":return this.rightCellCtrls.list;case"fullWidth":return[];case"center":return this.centerCellCtrls.list}}createAllCellCtrls(){const e=this.beans.colViewport,t=this.beans.visibleCols;if(this.printLayout)this.centerCellCtrls=this.createCellCtrls(this.centerCellCtrls,t.allCols),this.leftCellCtrls={list:[],map:{}},this.rightCellCtrls={list:[],map:{}};else{const o=e.getColsWithinViewport(this.rowNode);this.centerCellCtrls=this.createCellCtrls(this.centerCellCtrls,o);const s=t.getLeftColsForRow(this.rowNode);this.leftCellCtrls=this.createCellCtrls(this.leftCellCtrls,s,"left");const i=t.getRightColsForRow(this.rowNode);this.rightCellCtrls=this.createCellCtrls(this.rightCellCtrls,i,"right")}}isCellEligibleToBeRemoved(e,t){const{column:i}=e;if(i.getPinned()!=t||!this.isCorrectCtrlForSpan(e))return!0;const{editing:n}=e,{visibleCols:r}=this.beans,l=e.isCellFocused();return n||l?!(r.allCols.indexOf(i)>=0):!0}getDomOrder(){return this.gos.get("ensureDomOrder")||$(this.gos,"print")}listenOnDomOrder(e){const t=()=>{e.rowComp.setDomOrder(this.getDomOrder())};e.compBean.addManagedPropertyListeners(["domLayout","ensureDomOrder"],t)}setAnimateFlags(e){if(this.rowNode.sticky||!e)return;const t=k(this.rowNode.oldRowTop),{visibleCols:o}=this.beans,s=o.isPinningLeft(),i=o.isPinningRight();if(t){const{slideInAnimation:n}=this;if(this.isFullWidth()&&!this.gos.get("embedFullWidthRows")){n.fullWidth=!0;return}n.center=!0,n.left=s,n.right=i}else{const{fadeInAnimation:n}=this;if(this.isFullWidth()&&!this.gos.get("embedFullWidthRows")){n.fullWidth=!0;return}n.center=!0,n.left=s,n.right=i}}isFullWidth(){return this.rowType!=="Normal"}refreshFullWidth(){const e=(r,l)=>r?r.rowComp.refreshFullWidth(()=>this.createFullWidthCompDetails(r.element,l).params):!0,t=e(this.fullWidthGui,null),o=e(this.centerGui,null),s=e(this.leftGui,"left"),i=e(this.rightGui,"right");return t&&o&&s&&i}addListeners(){var e;this.addManagedListeners(this.rowNode,{heightChanged:()=>this.onRowHeightChanged(),rowSelected:()=>this.onRowSelected(),rowIndexChanged:this.onRowIndexChanged.bind(this),topChanged:this.onTopChanged.bind(this),...((e=this.beans.expansionSvc)==null?void 0:e.getRowExpandedListeners(this))??{}}),this.rowNode.detail&&this.addManagedListeners(this.rowNode.parent,{dataChanged:this.onRowNodeDataChanged.bind(this)}),this.addManagedListeners(this.rowNode,{dataChanged:this.onRowNodeDataChanged.bind(this),cellChanged:this.postProcessCss.bind(this),rowHighlightChanged:this.onRowNodeHighlightChanged.bind(this),draggingChanged:this.postProcessRowDragging.bind(this),uiLevelChanged:this.onUiLevelChanged.bind(this),rowPinned:this.onRowPinned.bind(this)}),this.addManagedListeners(this.beans.eventSvc,{paginationPixelOffsetChanged:this.onPaginationPixelOffsetChanged.bind(this),heightScaleChanged:this.onTopChanged.bind(this),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),virtualColumnsChanged:this.onVirtualColumnsChanged.bind(this),cellFocused:this.onCellFocusChanged.bind(this),cellFocusCleared:this.onCellFocusChanged.bind(this),paginationChanged:this.onPaginationChanged.bind(this),modelUpdated:this.refreshFirstAndLastRowStyles.bind(this),columnMoved:()=>this.updateColumnLists()}),this.beans.rowSpanSvc&&this.addManagedListeners(this.beans.rowSpanSvc,{spannedCellsUpdated:({pinned:t})=>{t&&!this.rowNode.rowPinned||this.updateColumnLists()}}),this.addDestroyFunc(()=>{this.rowDragComps=this.destroyBeans(this.rowDragComps,this.beans.context),this.tooltipFeature=this.destroyBean(this.tooltipFeature,this.beans.context)}),this.addManagedPropertyListeners(["rowStyle","getRowStyle","rowClass","getRowClass","rowClassRules"],this.postProcessCss.bind(this)),this.addManagedPropertyListener("rowDragEntireRow",()=>{if(this.gos.get("rowDragEntireRow")){this.allRowGuis.forEach(o=>{this.addRowDraggerToRow(o)});return}this.rowDragComps=this.destroyBeans(this.rowDragComps,this.beans.context)}),this.addListenersForCellComps()}addListenersForCellComps(){this.addManagedListeners(this.rowNode,{rowIndexChanged:()=>{this.getAllCellCtrls().forEach(e=>e.onRowIndexChanged())},cellChanged:e=>{this.getAllCellCtrls().forEach(t=>t.onCellChanged(e))}})}onRowPinned(){for(const e of this.allRowGuis)e.rowComp.toggleCss("ag-row-pinned-source",!!this.rowNode.pinnedSibling)}onRowNodeDataChanged(e){if(this.isFullWidth()!==!!this.isNodeFullWidthCell()){this.beans.rowRenderer.redrawRow(this.rowNode);return}if(this.isFullWidth()){this.refreshFullWidth()||this.beans.rowRenderer.redrawRow(this.rowNode);return}this.getAllCellCtrls().forEach(o=>o.refreshCell({suppressFlash:!e.update,newData:!e.update})),this.allRowGuis.forEach(o=>{this.setRowCompRowId(o.rowComp),this.updateRowBusinessKey(),this.setRowCompRowBusinessKey(o.rowComp)}),this.onRowSelected(),this.postProcessCss()}postProcessCss(){this.setStylesFromGridOptions(!0),this.postProcessClassesFromGridOptions(),this.postProcessRowClassRules(),this.postProcessRowDragging()}onRowNodeHighlightChanged(){const e=this.rowNode.highlighted;this.allRowGuis.forEach(t=>{const o=e==="Above",s=e==="Below";t.rowComp.toggleCss("ag-row-highlight-above",o),t.rowComp.toggleCss("ag-row-highlight-below",s)})}postProcessRowDragging(){const e=this.rowNode.dragging;this.allRowGuis.forEach(t=>t.rowComp.toggleCss("ag-row-dragging",e))}onDisplayedColumnsChanged(){var e;this.updateColumnLists(!0),(e=this.beans.rowAutoHeight)==null||e.requestCheckAutoHeight()}onVirtualColumnsChanged(){this.updateColumnLists(!1,!0)}getRowPosition(){return{rowPinned:Re(this.rowNode.rowPinned),rowIndex:this.rowNode.rowIndex}}onKeyboardNavigate(e){const t=this.findFullWidthInfoForEvent(e);if(!t)return;const{rowGui:o,column:s}=t;if(!(o.element===e.target))return;const r=this.rowNode,{focusSvc:l,navigation:a}=this.beans,d=l.getFocusedCell(),c={rowIndex:r.rowIndex,rowPinned:r.rowPinned,column:(d==null?void 0:d.column)??s};a==null||a.navigateToNextCell(e,e.key,c,!0),e.preventDefault()}onTabKeyDown(e){var l;if(e.defaultPrevented||ve(e))return;const t=this.allRowGuis.find(a=>a.element.contains(e.target)),o=t?t.element:null,s=o===e.target,i=z(this.beans);let n=!1;o&&i&&(n=o.contains(i)&&i.classList.contains("ag-cell"));let r=null;!s&&!n&&(r=jt(this.beans,o,!1,e.shiftKey)),(this.isFullWidth()&&s||!r)&&((l=this.beans.navigation)==null||l.onTabKeyDown(this,e))}getFullWidthElement(){return this.fullWidthGui?this.fullWidthGui.element:null}getRowYPosition(){var t;const e=(t=this.allRowGuis.find(o=>De(o.element)))==null?void 0:t.element;return e?e.getBoundingClientRect().top:0}onSuppressCellFocusChanged(e){const t=this.isFullWidth()&&e?void 0:-1;this.allRowGuis.forEach(o=>{Le(o.element,"tabindex",t)})}onFullWidthRowFocused(e){var i,n,r;const t=this.rowNode,o=e?this.isFullWidth()&&e.rowIndex===t.rowIndex&&e.rowPinned==t.rowPinned:!1;let s;if(this.fullWidthGui)s=this.fullWidthGui.element;else{const l=this.beans.colModel.getCol(e==null?void 0:e.column),a=l==null?void 0:l.pinned;a?s=a==="right"?(i=this.rightGui)==null?void 0:i.element:(n=this.leftGui)==null?void 0:n.element:s=(r=this.centerGui)==null?void 0:r.element}s&&(s.classList.toggle("ag-full-width-focus",o),o&&(e!=null&&e.forceBrowserFocus)&&s.focus({preventScroll:!0}))}recreateCell(e){this.centerCellCtrls=this.removeCellCtrl(this.centerCellCtrls,e),this.leftCellCtrls=this.removeCellCtrl(this.leftCellCtrls,e),this.rightCellCtrls=this.removeCellCtrl(this.rightCellCtrls,e),e.destroy(),this.updateColumnLists()}removeCellCtrl(e,t){const o={list:[],map:{}};return e.list.forEach(s=>{s!==t&&(o.list.push(s),o.map[s.column.getInstanceId()]=s)}),o}onMouseEvent(e,t){switch(e){case"dblclick":this.onRowDblClick(t);break;case"click":this.onRowClick(t);break;case"touchstart":case"mousedown":this.onRowMouseDown(t);break}}createRowEvent(e,t){const{rowNode:o}=this;return A(this.gos,{type:e,node:o,data:o.data,rowIndex:o.rowIndex,rowPinned:o.rowPinned,event:t})}createRowEventWithSource(e,t){const o=this.createRowEvent(e,t);return o.source=this,o}onRowDblClick(e){ve(e)||this.beans.eventSvc.dispatchEvent(this.createRowEventWithSource("rowDoubleClicked",e))}findFullWidthInfoForEvent(e){if(!e)return;const t=this.findFullWidthRowGui(e.target),o=this.getColumnForFullWidth(t);if(!(!t||!o))return{rowGui:t,column:o}}findFullWidthRowGui(e){return this.allRowGuis.find(t=>t.element.contains(e))}getColumnForFullWidth(e){const{visibleCols:t}=this.beans;switch(e==null?void 0:e.containerType){case"center":return t.centerCols[0];case"left":return t.leftCols[0];case"right":return t.rightCols[0];default:return t.allCols[0]}}onRowMouseDown(e){if(this.lastMouseDownOnDragger=Ie(e.target,"ag-row-drag",3),!this.isFullWidth())return;const t=this.rowNode,{rangeSvc:o,focusSvc:s}=this.beans;o==null||o.removeAllCellRanges();const i=this.findFullWidthInfoForEvent(e);if(!i)return;const{rowGui:n,column:r}=i,l=n.element,a=e.target;let d=e.defaultPrevented||Ho();l&&l.contains(a)&&Go(a)&&(d=!1),s.setFocusedCell({rowIndex:t.rowIndex,column:r,rowPinned:t.rowPinned,forceBrowserFocus:d})}onRowClick(e){if(ve(e)||this.lastMouseDownOnDragger)return;const{eventSvc:o,selectionSvc:s}=this.beans;o.dispatchEvent(this.createRowEventWithSource("rowClicked",e)),s==null||s.handleSelectionEvent(e,this.rowNode,"rowClicked")}setupDetailRowAutoHeight(e){var t;this.rowType==="FullWidthDetail"&&((t=this.beans.masterDetailSvc)==null||t.setupDetailRowAutoHeight(this,e))}createFullWidthCompDetails(e,t){const{gos:o,rowNode:s}=this,i=A(o,{fullWidth:!0,data:s.data,node:s,value:s.key,valueFormatted:s.key,eGridCell:e,eParentOfValue:e,pinned:t,addRenderedRowListener:this.addEventListener.bind(this),registerRowDragger:(r,l,a,d)=>this.addFullWidthRowDragging(r,l,a,d),setTooltip:(r,l)=>{o.assertModuleRegistered("Tooltip",3),this.refreshRowTooltip(r,l)}}),n=this.beans.userCompFactory;switch(this.rowType){case"FullWidthDetail":return ua(n,i);case"FullWidthGroup":{const{value:r,valueFormatted:l}=this.beans.valueSvc.getValueForDisplay(void 0,this.rowNode,!0);return i.value=r,i.valueFormatted=l,ha(n,i)}case"FullWidthLoading":return ca(n,i);default:return da(n,i)}}refreshRowTooltip(e,t){var o;this.fullWidthGui&&(this.tooltipFeature=(o=this.beans.tooltipSvc)==null?void 0:o.refreshRowTooltip(this.tooltipFeature,this,e,t))}addFullWidthRowDragging(e,t,o="",s){const{rowDragSvc:i,context:n}=this.beans;if(!i||!this.isFullWidth())return;const r=i.createRowDragComp(()=>o,this.rowNode,void 0,e,t,s);this.createBean(r,n),this.addDestroyFunc(()=>{this.destroyBean(r,n)})}onUiLevelChanged(){const e=Ts(this.rowNode);if(this.rowLevel!=e){const t="ag-row-level-"+e,o="ag-row-level-"+this.rowLevel;this.allRowGuis.forEach(s=>{s.rowComp.toggleCss(t,!0),s.rowComp.toggleCss(o,!1)})}this.rowLevel=e}isFirstRowOnPage(){return this.rowNode.rowIndex===this.beans.pageBounds.getFirstRow()}isLastRowOnPage(){return this.rowNode.rowIndex===this.beans.pageBounds.getLastRow()}refreshFirstAndLastRowStyles(){const e=this.isFirstRowOnPage(),t=this.isLastRowOnPage();this.firstRowOnPage!==e&&(this.firstRowOnPage=e,this.allRowGuis.forEach(o=>o.rowComp.toggleCss("ag-row-first",e))),this.lastRowOnPage!==t&&(this.lastRowOnPage=t,this.allRowGuis.forEach(o=>o.rowComp.toggleCss("ag-row-last",t)))}getAllCellCtrls(){return this.leftCellCtrls.list.length===0&&this.rightCellCtrls.list.length===0?this.centerCellCtrls.list:[...this.centerCellCtrls.list,...this.leftCellCtrls.list,...this.rightCellCtrls.list]}postProcessClassesFromGridOptions(){var t;const e=[];(t=this.beans.rowStyleSvc)==null||t.processClassesFromGridOptions(e,this.rowNode),e.length&&e.forEach(o=>{this.allRowGuis.forEach(s=>s.rowComp.toggleCss(o,!0))})}postProcessRowClassRules(){var e;(e=this.beans.rowStyleSvc)==null||e.processRowClassRules(this.rowNode,t=>{this.allRowGuis.forEach(o=>o.rowComp.toggleCss(t,!0))},t=>{this.allRowGuis.forEach(o=>o.rowComp.toggleCss(t,!1))})}setStylesFromGridOptions(e,t){e&&(this.rowStyles=this.processStylesFromGridOptions()),this.forEachGui(t,o=>o.rowComp.setUserStyles(this.rowStyles))}getPinnedForContainer(e){return e==="left"||e==="right"?e:null}getInitialRowClasses(e){var l,a;const t=this.getPinnedForContainer(e),o=this.isFullWidth(),{rowNode:s,beans:i}=this,n=[];n.push("ag-row"),n.push(this.rowFocused?"ag-row-focus":"ag-row-no-focus"),this.fadeInAnimation[e]&&n.push("ag-opacity-zero"),n.push(s.rowIndex%2===0?"ag-row-even":"ag-row-odd"),s.isRowPinned()&&(n.push("ag-row-pinned"),(l=i.pinnedRowModel)!=null&&l.isManual()&&n.push("ag-row-pinned-manual")),!s.isRowPinned()&&s.pinnedSibling&&n.push("ag-row-pinned-source"),s.isSelected()&&n.push("ag-row-selected"),s.footer&&n.push("ag-row-footer"),n.push("ag-row-level-"+this.rowLevel),s.stub&&n.push("ag-row-loading"),o&&n.push("ag-full-width-row"),(a=i.expansionSvc)==null||a.addExpandedCss(n,s),s.dragging&&n.push("ag-row-dragging");const{rowStyleSvc:r}=i;return r&&(r.processClassesFromGridOptions(n,s),r.preProcessRowClassRules(n,s)),n.push(this.printLayout?"ag-row-position-relative":"ag-row-position-absolute"),this.isFirstRowOnPage()&&n.push("ag-row-first"),this.isLastRowOnPage()&&n.push("ag-row-last"),o&&(t==="left"&&n.push("ag-cell-last-left-pinned"),t==="right"&&n.push("ag-cell-first-right-pinned")),n}processStylesFromGridOptions(){var e;return((e=this.beans.rowStyleSvc)==null?void 0:e.processStylesFromGridOptions(this.rowNode))??this.emptyStyle}onRowSelected(e){var t;(t=this.beans.selectionSvc)==null||t.onRowCtrlSelected(this,o=>{(o===this.centerGui||o===this.fullWidthGui)&&this.announceDescription()},e)}announceDescription(){var e;(e=this.beans.selectionSvc)==null||e.announceAriaRowSelection(this.rowNode)}addHoverFunctionality(e){if(!this.active)return;const{element:t,compBean:o}=e,{rowNode:s,beans:i,gos:n}=this;o.addManagedListeners(t,{mouseenter:()=>s.dispatchRowEvent("mouseEnter"),mouseleave:()=>s.dispatchRowEvent("mouseLeave")}),o.addManagedListeners(s,{mouseEnter:()=>{var r;!((r=i.dragSvc)!=null&&r.dragging)&&!n.get("suppressRowHoverHighlight")&&(t.classList.add("ag-row-hover"),s.setHovered(!0))},mouseLeave:()=>{this.resetHoveredStatus(t)}})}resetHoveredStatus(e){const t=e?[e]:this.allRowGuis.map(o=>o.element);for(const o of t)o.classList.remove("ag-row-hover");this.rowNode.setHovered(!1)}roundRowTopToBounds(e){const t=this.beans.ctrlsSvc.getScrollFeature().getApproximateVScollPosition(),o=this.applyPaginationOffset(t.top,!0)-100,s=this.applyPaginationOffset(t.bottom,!0)+100;return Math.min(Math.max(o,e),s)}forEachGui(e,t){e?t(e):this.allRowGuis.forEach(t)}isRowRendered(){return this.allRowGuis.length>0}onRowHeightChanged(e){if(this.rowNode.rowHeight==null)return;const t=this.rowNode.rowHeight,o=this.beans.environment.getDefaultRowHeight(),i=Gi(this.gos)?qr(this.beans,this.rowNode).height:void 0,n=i?`${Math.min(o,i)-2}px`:void 0;this.forEachGui(e,r=>{r.element.style.height=`${t}px`,n&&r.element.style.setProperty("--ag-line-height",n)})}destroyFirstPass(e=!1){var s;this.active=!1;const{rowNode:t}=this;if(!e&&zo(this.gos)&&!t.sticky)if(t.rowTop!=null){const n=this.roundRowTopToBounds(t.rowTop);this.setRowTop(n)}else this.allRowGuis.forEach(n=>n.rowComp.toggleCss("ag-opacity-zero",!0));(s=this.fullWidthGui)!=null&&s.element.contains(z(this.beans))&&this.beans.focusSvc.attemptToRecoverFocus(),t.setHovered(!1);const o=this.createRowEvent("virtualRowRemoved");this.dispatchLocalEvent(o),this.beans.eventSvc.dispatchEvent(o),super.destroy()}destroySecondPass(){var t;this.allRowGuis.length=0,(t=this.beans.editSvc)==null||t.stopRowEditing(this);const e=o=>(o.list.forEach(s=>s.destroy()),{list:[],map:{}});this.centerCellCtrls=e(this.centerCellCtrls),this.leftCellCtrls=e(this.leftCellCtrls),this.rightCellCtrls=e(this.rightCellCtrls)}setFocusedClasses(e){this.forEachGui(e,t=>{t.rowComp.toggleCss("ag-row-focus",this.rowFocused),t.rowComp.toggleCss("ag-row-no-focus",!this.rowFocused)})}onCellFocusChanged(){const{focusSvc:e,editSvc:t}=this.beans,o=e.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned);o!==this.rowFocused&&(this.rowFocused=o,this.setFocusedClasses()),!o&&this.editing&&(t==null||t.stopRowEditing(this,!1))}onPaginationChanged(){var t;const e=((t=this.beans.pagination)==null?void 0:t.getCurrentPage())??0;this.paginationPage!==e&&(this.paginationPage=e,this.onTopChanged()),this.refreshFirstAndLastRowStyles()}onTopChanged(){this.setRowTop(this.rowNode.rowTop)}onPaginationPixelOffsetChanged(){this.onTopChanged()}applyPaginationOffset(e,t=!1){if(this.rowNode.isRowPinned()||this.rowNode.sticky)return e;const o=this.beans.pageBounds.getPixelOffset();return e+o*(t?1:-1)}setRowTop(e){if(!this.printLayout&&k(e)){const t=this.applyPaginationOffset(e),i=`${this.rowNode.isRowPinned()||this.rowNode.sticky?t:this.beans.rowContainerHeight.getRealPixelPosition(t)}px`;this.setRowTopStyle(i)}}getInitialRowTop(e){return this.suppressRowTransform?this.getInitialRowTopShared(e):void 0}getInitialTransform(e){return this.suppressRowTransform?void 0:`translateY(${this.getInitialRowTopShared(e)})`}getInitialRowTopShared(e){if(this.printLayout)return"";const t=this.rowNode;let o;if(t.sticky)o=t.stickyRowTop;else{const s=this.slideInAnimation[e]?this.roundRowTopToBounds(t.oldRowTop):t.rowTop,i=this.applyPaginationOffset(s);o=t.isRowPinned()?i:this.beans.rowContainerHeight.getRealPixelPosition(i)}return o+"px"}setRowTopStyle(e){this.allRowGuis.forEach(t=>this.suppressRowTransform?t.rowComp.setTop(e):t.rowComp.setTransform(`translateY(${e})`))}getCellCtrl(e,t=!1){let o=null;return this.getAllCellCtrls().forEach(s=>{s.column==e&&(o=s)}),o!=null||t||this.getAllCellCtrls().forEach(s=>{s.getColSpanningList().indexOf(e)>=0&&(o=s)}),o}onRowIndexChanged(){this.rowNode.rowIndex!=null&&(this.onCellFocusChanged(),this.updateRowIndexes(),this.postProcessCss())}updateRowIndexes(e){var n,r;const t=this.rowNode.getRowIndexString();if(t===null)return;const o=(((n=this.beans.ctrlsSvc.getHeaderRowContainerCtrl())==null?void 0:n.getRowCount())??0)+(((r=this.beans.filterManager)==null?void 0:r.getHeaderRowCount())??0),s=this.rowNode.rowIndex%2===0,i=o+this.rowNode.rowIndex+1;this.forEachGui(e,l=>{l.rowComp.setRowIndex(t),l.rowComp.toggleCss("ag-row-even",s),l.rowComp.toggleCss("ag-row-odd",!s),ui(l.element,i)})}};function dd(e){var o;return e.altKey||e.ctrlKey||e.metaKey?!1:((o=e.key)==null?void 0:o.length)===1}function ks(e,t,o,s,i){const n=s?s.getColDef().suppressKeyboardEvent:void 0;if(!n)return!1;const r=A(e,{event:t,editing:i,column:s,node:o,data:o.data,colDef:s.getColDef()});return!!(n&&n(r))}function cd(e){const{pinnedRowModel:t,rowModel:o}=e,[s,i]=[(t==null?void 0:t.isEmpty("top"))??!0,(t==null?void 0:t.isEmpty("bottom"))??!0],n=s?null:"top";let r,l;i?(r=null,l=o.getRowCount()-1):(r="bottom",l=(t==null?void 0:t.getPinnedBottomRowCount())??-1);const{visibleCols:a,rangeSvc:d}=e,c=a.allCols;!d||!(c!=null&&c.length)||d.setCellRange({rowStartIndex:0,rowStartPinned:n,rowEndIndex:l,rowEndPinned:r})}var hd=65,ud=67,gd=86,pd=68,fd=90,Cd=89;function md(e){const{keyCode:t}=e;let o;switch(t){case hd:o=m.A;break;case ud:o=m.C;break;case gd:o=m.V;break;case pd:o=m.D;break;case fd:o=m.Z;break;case Cd:o=m.Y;break;default:o=e.code}return o}var vd=class extends v{constructor(e){super(),this.element=e}postConstruct(){var e;this.addKeyboardListeners(),this.addMouseListeners(),(e=this.beans.touchSvc)==null||e.mockRowContextMenu(this)}addKeyboardListeners(){const e="keydown",t=this.processKeyboardEvent.bind(this,e);this.addManagedElementListeners(this.element,{[e]:t})}addMouseListeners(){["dblclick","contextmenu","mouseover","mouseout","click",Ki("touchstart")?"touchstart":"mousedown"].forEach(o=>{const s=this.processMouseEvent.bind(this,o);this.addManagedElementListeners(this.element,{[o]:s})})}processMouseEvent(e,t){var i;if(!tt(this.gos,t)||ve(t))return;const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);e==="contextmenu"?(o!=null&&o.column&&o.dispatchCellContextMenuEvent(t),(i=this.beans.contextMenuSvc)==null||i.handleContextMenuMouseEvent(t,void 0,s,o)):(o&&o.onMouseEvent(e,t),s&&s.onMouseEvent(e,t))}getControlsForEventTarget(e){const{gos:t}=this;return{cellCtrl:gn(t,e),rowCtrl:ji(t,e,Wt)}}processKeyboardEvent(e,t){const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);t.defaultPrevented||(o?this.processCellKeyboardEvent(o,e,t):s&&s.isFullWidth()&&this.processFullWidthRowKeyboardEvent(s,e,t))}processCellKeyboardEvent(e,t,o){var l;const{rowNode:s,column:i,editing:n}=e;!ks(this.gos,o,s,i,n)&&t==="keydown"&&(!n&&((l=this.beans.navigation)!=null&&l.handlePageScrollingKey(o))||e.onKeyDown(o),this.doGridOperations(o,e.editing),dd(o)&&e.processCharacter(o)),t==="keydown"&&this.eventSvc.dispatchEvent(e.createEvent(o,"cellKeyDown"))}processFullWidthRowKeyboardEvent(e,t,o){const{rowNode:s}=e,{focusSvc:i,navigation:n}=this.beans,r=i.getFocusedCell(),l=r&&r.column;if(!ks(this.gos,o,s,l,!1)){const d=o.key;if(t==="keydown")switch(d){case m.PAGE_HOME:case m.PAGE_END:case m.PAGE_UP:case m.PAGE_DOWN:n==null||n.handlePageScrollingKey(o,!0);break;case m.LEFT:case m.RIGHT:if(!this.gos.get("embedFullWidthRows"))break;case m.UP:case m.DOWN:e.onKeyboardNavigate(o);break;case m.TAB:e.onTabKeyDown(o);break}}t==="keydown"&&this.eventSvc.dispatchEvent(e.createRowEvent("cellKeyDown",o))}doGridOperations(e,t){if(!e.ctrlKey&&!e.metaKey||t||!tt(this.gos,e))return;const o=md(e),{clipboardSvc:s,undoRedo:i}=this.beans;if(o===m.A)return this.onCtrlAndA(e);if(o===m.C)return this.onCtrlAndC(s,e);if(o===m.D)return this.onCtrlAndD(s,e);if(o===m.V)return this.onCtrlAndV(s,e);if(o===m.X)return this.onCtrlAndX(s,e);if(o===m.Y)return this.onCtrlAndY(i);if(o===m.Z)return this.onCtrlAndZ(i,e)}onCtrlAndA(e){const{beans:{rowModel:t,rangeSvc:o,selectionSvc:s},gos:i}=this;o&&Oe(i)&&t.isRowsToRender()?cd(this.beans):s&&(s==null||s.selectAllRowNodes({source:"keyboardSelectAll",selectAll:il(i)})),e.preventDefault()}onCtrlAndC(e,t){if(!e||this.gos.get("enableCellTextSelection"))return;const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);o!=null&&o.editing||s!=null&&s.editing||(t.preventDefault(),e.copyToClipboard())}onCtrlAndX(e,t){if(!e||this.gos.get("enableCellTextSelection")||this.gos.get("suppressCutToClipboard"))return;const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);o!=null&&o.editing||s!=null&&s.editing||(t.preventDefault(),e.cutToClipboard(void 0,"ui"))}onCtrlAndV(e,t){const{cellCtrl:o,rowCtrl:s}=this.getControlsForEventTarget(t.target);o!=null&&o.editing||s!=null&&s.editing||e&&!this.gos.get("suppressClipboardPaste")&&e.pasteFromClipboard()}onCtrlAndD(e,t){e&&!this.gos.get("suppressClipboardPaste")&&e.copyRangeDown(),t.preventDefault()}onCtrlAndZ(e,t){!this.gos.get("undoRedoCellEditing")||!e||(t.preventDefault(),t.shiftKey?e.redo("ui"):e.undo("ui"))}onCtrlAndY(e){e==null||e.redo("ui")}},bn=class extends v{constructor(e,t){super(),this.eContainer=e,this.eViewport=t}postConstruct(){this.addManagedEventListeners({rowContainerHeightChanged:this.onHeightChanged.bind(this,this.beans.rowContainerHeight)})}onHeightChanged(e){const t=e.uiContainerHeight,o=t!=null?`${t}px`:"";this.eContainer.style.height=o,this.eViewport&&(this.eViewport.style.height=o)}},ht=e=>e.topRowCtrls,ut=e=>e.getStickyTopRowCtrls(),gt=e=>e.getStickyBottomRowCtrls(),pt=e=>e.bottomRowCtrls,ft=e=>e.allRowCtrls,lo=e=>e.getCtrls("top"),ao=e=>e.getCtrls("center"),co=e=>e.getCtrls("bottom"),wd={center:{type:"center",name:"center-cols",getRowCtrls:ft,getSpannedRowCtrls:ao},left:{type:"left",name:"pinned-left-cols",pinnedType:"left",getRowCtrls:ft,getSpannedRowCtrls:ao},right:{type:"right",name:"pinned-right-cols",pinnedType:"right",getRowCtrls:ft,getSpannedRowCtrls:ao},fullWidth:{type:"fullWidth",name:"full-width",fullWidth:!0,getRowCtrls:ft},topCenter:{type:"center",name:"floating-top",getRowCtrls:ht,getSpannedRowCtrls:lo},topLeft:{type:"left",name:"pinned-left-floating",container:"ag-pinned-left-floating-top",pinnedType:"left",getRowCtrls:ht,getSpannedRowCtrls:lo},topRight:{type:"right",name:"pinned-right-floating",container:"ag-pinned-right-floating-top",pinnedType:"right",getRowCtrls:ht,getSpannedRowCtrls:lo},topFullWidth:{type:"fullWidth",name:"floating-top-full-width",fullWidth:!0,getRowCtrls:ht},stickyTopCenter:{type:"center",name:"sticky-top",getRowCtrls:ut},stickyTopLeft:{type:"left",name:"pinned-left-sticky-top",container:"ag-pinned-left-sticky-top",pinnedType:"left",getRowCtrls:ut},stickyTopRight:{type:"right",name:"pinned-right-sticky-top",container:"ag-pinned-right-sticky-top",pinnedType:"right",getRowCtrls:ut},stickyTopFullWidth:{type:"fullWidth",name:"sticky-top-full-width",fullWidth:!0,getRowCtrls:ut},stickyBottomCenter:{type:"center",name:"sticky-bottom",getRowCtrls:gt},stickyBottomLeft:{type:"left",name:"pinned-left-sticky-bottom",container:"ag-pinned-left-sticky-bottom",pinnedType:"left",getRowCtrls:gt},stickyBottomRight:{type:"right",name:"pinned-right-sticky-bottom",container:"ag-pinned-right-sticky-bottom",pinnedType:"right",getRowCtrls:gt},stickyBottomFullWidth:{type:"fullWidth",name:"sticky-bottom-full-width",fullWidth:!0,getRowCtrls:gt},bottomCenter:{type:"center",name:"floating-bottom",getRowCtrls:pt,getSpannedRowCtrls:co},bottomLeft:{type:"left",name:"pinned-left-floating-bottom",container:"ag-pinned-left-floating-bottom",pinnedType:"left",getRowCtrls:pt,getSpannedRowCtrls:co},bottomRight:{type:"right",name:"pinned-right-floating-bottom",container:"ag-pinned-right-floating-bottom",pinnedType:"right",getRowCtrls:pt,getSpannedRowCtrls:co},bottomFullWidth:{type:"fullWidth",name:"floating-bottom-full-width",fullWidth:!0,getRowCtrls:pt}};function Sn(e){return`ag-${rt(e).name}-viewport`}function Rt(e){const t=rt(e);return t.container??`ag-${t.name}-container`}function yd(e){return`ag-${rt(e).name}-spanned-cells-container`}function rt(e){return wd[e]}var bd=["topCenter","topLeft","topRight"],Sd=["bottomCenter","bottomLeft","bottomRight"],Rd=["center","left","right"],Fd=["center","left","right","fullWidth"],xd=["stickyTopCenter","stickyBottomCenter","center","topCenter","bottomCenter"],Dd=["left","bottomLeft","topLeft","stickyTopLeft","stickyBottomLeft"],Pd=["right","bottomRight","topRight","stickyTopRight","stickyBottomRight"],Rn=["stickyTopCenter","stickyTopLeft","stickyTopRight"],Fn=["stickyBottomCenter","stickyBottomLeft","stickyBottomRight"],Ed=[...Rn,"stickyTopFullWidth",...Fn,"stickyBottomFullWidth"],Td=[...bd,...Sd,...Rd,...Rn,...Fn],kd=class extends v{constructor(e){super(),this.name=e,this.visible=!0,this.EMPTY_CTRLS=[],this.options=rt(e)}postConstruct(){this.enableRtl=this.gos.get("enableRtl"),this.forContainers(["center"],()=>{this.viewportSizeFeature=this.createManagedBean(new ld(this)),this.addManagedEventListeners({stickyTopOffsetChanged:this.onStickyTopOffsetChanged.bind(this)})})}onStickyTopOffsetChanged(e){this.comp.setOffsetTop(`${e.offset}px`)}registerWithCtrlsService(){this.options.fullWidth||this.beans.ctrlsSvc.register(this.name,this)}forContainers(e,t){e.indexOf(this.name)>=0&&t()}setComp(e,t,o,s){this.comp=e,this.eContainer=t,this.eSpannedContainer=o,this.eViewport=s,this.createManagedBean(new vd(this.eViewport??this.eContainer)),this.addPreventScrollWhileDragging(),this.listenOnDomOrder();const{pinnedCols:i,rangeSvc:n}=this.beans,r=()=>this.onPinnedWidthChanged();this.forContainers(Dd,()=>{this.pinnedWidthFeature=this.createOptionalManagedBean(i==null?void 0:i.createPinnedWidthFeature(!0,this.eContainer,this.eSpannedContainer)),this.addManagedEventListeners({leftPinnedWidthChanged:r})}),this.forContainers(Pd,()=>{this.pinnedWidthFeature=this.createOptionalManagedBean(i==null?void 0:i.createPinnedWidthFeature(!1,this.eContainer,this.eSpannedContainer)),this.addManagedEventListeners({rightPinnedWidthChanged:r})}),this.forContainers(Fd,()=>this.createManagedBean(new bn(this.eContainer,this.name==="center"?s:void 0))),n&&this.forContainers(Td,()=>this.createManagedBean(n.createDragListenerFeature(this.eContainer))),this.forContainers(xd,()=>this.createManagedBean(new jo(l=>this.comp.setContainerWidth(`${l}px`)))),this.visible=this.isContainerVisible(),this.addListeners(),this.registerWithCtrlsService()}onScrollCallback(e){this.addManagedElementListeners(this.eViewport,{scroll:e})}addListeners(){const{spannedRowRenderer:e,gos:t}=this.beans,o=this.onDisplayedColumnsChanged.bind(this);this.addManagedEventListeners({displayedColumnsChanged:o,displayedColumnsWidthChanged:o,displayedRowsChanged:s=>this.onDisplayedRowsChanged(s.afterScroll)}),o(),this.onDisplayedRowsChanged(),e&&this.options.getSpannedRowCtrls&&t.get("enableCellSpan")&&this.addManagedListeners(e,{spannedRowsUpdated:()=>{const s=this.options.getSpannedRowCtrls(e);s&&this.comp.setSpannedRowCtrls(s,!1)}})}listenOnDomOrder(){if(Ed.indexOf(this.name)>=0){this.comp.setDomOrder(!0);return}const t=()=>{const o=this.gos.get("ensureDomOrder"),s=$(this.gos,"print");this.comp.setDomOrder(o||s)};this.addManagedPropertyListener("domLayout",t),t()}onDisplayedColumnsChanged(){this.forContainers(["center"],()=>this.onHorizontalViewportChanged())}addPreventScrollWhileDragging(){const{dragSvc:e}=this.beans;if(!e)return;const t=o=>{e.dragging&&o.cancelable&&o.preventDefault()};this.eContainer.addEventListener("touchmove",t,{passive:!1}),this.addDestroyFunc(()=>this.eContainer.removeEventListener("touchmove",t))}onHorizontalViewportChanged(e=!1){const t=this.getCenterWidth(),o=this.getCenterViewportScrollLeft();this.beans.colViewport.setScrollPosition(t,o,e)}hasHorizontalScrollGap(){return this.eContainer.clientWidth-this.eViewport.clientWidth<0}hasVerticalScrollGap(){return this.eContainer.clientHeight-this.eViewport.clientHeight<0}getCenterWidth(){return xt(this.eViewport)}getCenterViewportScrollLeft(){return Dt(this.eViewport,this.enableRtl)}registerViewportResizeListener(e){const t=nt(this.beans,this.eViewport,e);this.addDestroyFunc(()=>t())}isViewportInTheDOMTree(){return bi(this.eViewport)}getViewportScrollLeft(){return Dt(this.eViewport,this.enableRtl)}isHorizontalScrollShowing(){return this.gos.get("alwaysShowHorizontalScroll")||Mr(this.eViewport)}setHorizontalScroll(e){this.comp.setHorizontalScroll(e)}getHScrollPosition(){return{left:this.eViewport.scrollLeft,right:this.eViewport.scrollLeft+this.eViewport.offsetWidth}}setCenterViewportScrollLeft(e){Pt(this.eViewport,e,this.enableRtl)}isContainerVisible(){return!(this.options.pinnedType!=null)||!!this.pinnedWidthFeature&&this.pinnedWidthFeature.getWidth()>0}onPinnedWidthChanged(){const e=this.isContainerVisible();this.visible!=e&&(this.visible=e,this.onDisplayedRowsChanged())}onDisplayedRowsChanged(e=!1){const t=this.options.getRowCtrls(this.beans.rowRenderer);if(!this.visible||t.length===0){this.comp.setRowCtrls({rowCtrls:this.EMPTY_CTRLS});return}const o=$(this.gos,"print"),i=this.gos.get("embedFullWidthRows")||o,n=t.filter(r=>{const l=r.isFullWidth();return this.options.fullWidth?!i&&l:i||!l});this.comp.setRowCtrls({rowCtrls:n,useFlushSync:e})}},xn="ag-force-vertical-scroll",Id="ag-selectable",Ld="ag-column-moving",Md=class extends v{constructor(){super(...arguments),this.stickyTopHeight=0,this.stickyBottomHeight=0}wireBeans(e){this.ctrlsSvc=e.ctrlsSvc,this.colModel=e.colModel,this.scrollVisibleSvc=e.scrollVisibleSvc,this.pinnedRowModel=e.pinnedRowModel,this.filterManager=e.filterManager,this.rowGroupColsSvc=e.rowGroupColsSvc}setComp(e,t,o,s,i,n,r){var l,a;this.comp=e,this.eGridBody=t,this.eBodyViewport=o,this.eTop=s,this.eBottom=i,this.eStickyTop=n,this.eStickyBottom=r,this.eCenterColsViewport=o.querySelector(`.${Sn("center")}`),this.eFullWidthContainer=o.querySelector(`.${Rt("fullWidth")}`),this.eStickyTopFullWidthContainer=n.querySelector(`.${Rt("stickyTopFullWidth")}`),this.eStickyBottomFullWidthContainer=r.querySelector(`.${Rt("stickyBottomFullWidth")}`),this.setCellTextSelection(this.gos.get("enableCellTextSelection")),this.addManagedPropertyListener("enableCellTextSelection",d=>this.setCellTextSelection(d.currentValue)),this.createManagedBean(new Ko(this.comp)),this.scrollFeature=this.createManagedBean(new rd(o)),(l=this.beans.rowDragSvc)==null||l.setupRowDrag(o,this),this.setupRowAnimationCssClass(),this.addEventListeners(),this.addFocusListeners([s,o,i,n,r]),this.setGridRootRole(),this.onGridColumnsChanged(),this.addBodyViewportListener(),this.setFloatingHeights(),this.disableBrowserDragging(),this.addStopEditingWhenGridLosesFocus(),this.updateScrollingClasses(),(a=this.filterManager)==null||a.setupAdvFilterHeaderComp(s),this.ctrlsSvc.register("gridBodyCtrl",this)}addEventListeners(){const e=this.setFloatingHeights.bind(this),t=this.setGridRootRole.bind(this),o=this.toggleRowResizeStyles.bind(this);this.addManagedEventListeners({gridColumnsChanged:this.onGridColumnsChanged.bind(this),scrollVisibilityChanged:this.onScrollVisibilityChanged.bind(this),scrollGapChanged:this.updateScrollingClasses.bind(this),pinnedRowDataChanged:e,pinnedHeightChanged:e,pinnedRowsChanged:e,headerHeightChanged:this.setStickyTopOffsetTop.bind(this),columnRowGroupChanged:t,columnPivotChanged:t,rowResizeStarted:o,rowResizeEnded:o}),this.addManagedPropertyListener("treeData",t)}toggleRowResizeStyles(e){const t=e.type==="rowResizeStarted";this.eBodyViewport.classList.toggle("ag-prevent-animation",t)}onGridColumnsChanged(){const e=this.beans.colModel.getCols();this.comp.setColumnCount(e.length)}onScrollVisibilityChanged(){const{scrollVisibleSvc:e}=this,t=e.verticalScrollShowing;this.setVerticalScrollPaddingVisible(t),this.setStickyWidth(t),this.setStickyBottomOffsetBottom();const o=t&&e.getScrollbarWidth()||0,s=mi()?16:0,i=`calc(100% + ${o+s}px)`;be(this.beans,()=>this.comp.setBodyViewportWidth(i)),this.updateScrollingClasses()}setGridRootRole(){const{rowGroupColsSvc:e,colModel:t}=this;let o=this.gos.get("treeData");if(!o){const s=t.isPivotMode();o=(e?e.columns.length:0)>=(s?2:1)}this.comp.setGridRootRole(o?"treegrid":"grid")}addFocusListeners(e){e.forEach(t=>{this.addManagedElementListeners(t,{focusin:o=>{const{target:s}=o,i=Ie(s,"ag-root",t);t.classList.toggle("ag-has-focus",!i)},focusout:o=>{const{target:s,relatedTarget:i}=o,n=t.contains(i),r=Ie(i,"ag-root",t);Ie(s,"ag-root",t)||(!n||r)&&t.classList.remove("ag-has-focus")}})})}setColumnMovingCss(e){this.comp.setColumnMovingCss(Ld,e)}setCellTextSelection(e=!1){this.comp.setCellSelectableCss(Id,e)}updateScrollingClasses(){const{eGridBody:{classList:e},scrollVisibleSvc:t}=this;e.toggle("ag-body-vertical-content-no-gap",!t.verticalScrollGap),e.toggle("ag-body-horizontal-content-no-gap",!t.horizontalScrollGap)}disableBrowserDragging(){this.addManagedElementListeners(this.eGridBody,{dragstart:e=>{if(e.target instanceof HTMLImageElement)return e.preventDefault(),!1}})}addStopEditingWhenGridLosesFocus(){var e;(e=this.beans.editSvc)==null||e.addStopEditingWhenGridLosesFocus([this.eBodyViewport,this.eBottom,this.eTop,this.eStickyTop,this.eStickyBottom])}updateRowCount(){var i,n;const e=(((i=this.ctrlsSvc.getHeaderRowContainerCtrl())==null?void 0:i.getRowCount())??0)+(((n=this.filterManager)==null?void 0:n.getHeaderRowCount())??0),{rowModel:t}=this.beans,o=t.isLastRowIndexKnown()?t.getRowCount():-1,s=o===-1?-1:e+o;this.comp.setRowCount(s)}registerBodyViewportResizeListener(e){this.comp.registerBodyViewportResizeListener(e)}setVerticalScrollPaddingVisible(e){const t=e?"scroll":"hidden";this.comp.setPinnedTopBottomOverflowY(t)}isVerticalScrollShowing(){const e=this.gos.get("alwaysShowVerticalScroll"),t=e?xn:null,o=$(this.gos,"normal");return this.comp.setAlwaysVerticalScrollClass(t,e),e||o&&Ar(this.eBodyViewport)}setupRowAnimationCssClass(){const{rowContainerHeight:e,environment:t}=this.beans;let o=t.sizesMeasured;const s=()=>{const i=o&&zo(this.gos)&&!e.stretching,n=i?"ag-row-animation":"ag-row-no-animation";this.comp.setRowAnimationCssOnBodyViewport(n,i)};s(),this.addManagedEventListeners({heightScaleChanged:s}),this.addManagedPropertyListener("animateRows",s),this.addManagedEventListeners({gridStylesChanged:()=>{!o&&t.sizesMeasured&&(o=!0,s())}})}addBodyViewportListener(){const{eBodyViewport:e,eStickyTop:t,eStickyBottom:o,eTop:s,eBottom:i,beans:{popupSvc:n,touchSvc:r}}=this,l=this.onBodyViewportContextMenu.bind(this);this.addManagedElementListeners(e,{contextmenu:l}),r==null||r.mockBodyContextMenu(this,l),this.addManagedElementListeners(e,{wheel:this.onBodyViewportWheel.bind(this,n)});const a=this.onStickyWheel.bind(this);for(const c of[t,o,s,i])this.addManagedElementListeners(c,{wheel:a});const d=this.onHorizontalWheel.bind(this);for(const c of["left","right","topLeft","topRight","bottomLeft","bottomRight"])this.addManagedElementListeners(this.ctrlsSvc.get(c).eContainer,{wheel:d});this.addFullWidthContainerWheelListener()}addFullWidthContainerWheelListener(){this.addManagedElementListeners(this.eFullWidthContainer,{wheel:e=>this.onFullWidthContainerWheel(e)})}onFullWidthContainerWheel(e){const{deltaX:t,deltaY:o,shiftKey:s}=e;(s||Math.abs(t)>Math.abs(o))&&tt(this.gos,e)&&this.scrollGridBodyToMatchEvent(e)}onStickyWheel(e){const{deltaY:t}=e;e.preventDefault(),this.scrollVertically(t)}onHorizontalWheel(e){const{deltaX:t,deltaY:o,shiftKey:s}=e;(s||Math.abs(t)>Math.abs(o))&&this.scrollGridBodyToMatchEvent(e)}scrollGridBodyToMatchEvent(e){const{deltaX:t,deltaY:o}=e;e.preventDefault(),this.eCenterColsViewport.scrollBy({left:t||o})}onBodyViewportContextMenu(e,t,o){var i;if(!e&&!o)return;this.gos.get("preventDefaultOnContextMenu")&&(e||o).preventDefault();const{target:s}=e||t;(s===this.eBodyViewport||s===this.ctrlsSvc.get("center").eViewport)&&((i=this.beans.contextMenuSvc)==null||i.showContextMenu({mouseEvent:e,touchEvent:o,value:null,anchorToElement:this.eGridBody,source:"ui"}))}onBodyViewportWheel(e,t){this.gos.get("suppressScrollWhenPopupsAreOpen")&&e!=null&&e.hasAnchoredPopup()&&t.preventDefault()}scrollVertically(e){const t=this.eBodyViewport.scrollTop;return this.scrollFeature.setVerticalScrollPosition(t+e),this.eBodyViewport.scrollTop-t}setFloatingHeights(){const{pinnedRowModel:e,beans:{environment:t}}=this,o=e==null?void 0:e.getPinnedTopTotalHeight(),s=e==null?void 0:e.getPinnedBottomTotalHeight(),i=t.getPinnedRowBorderWidth(),n=t.getRowBorderWidth(),r=i-n,l=o?r+o:0,a=s?r+s:0;this.comp.setTopHeight(l),this.comp.setBottomHeight(a),this.comp.setTopInvisible(l<=0),this.comp.setBottomInvisible(a<=0),this.setStickyTopOffsetTop(),this.setStickyBottomOffsetBottom()}setStickyTopHeight(e=0){this.comp.setStickyTopHeight(`${e}px`),this.stickyTopHeight=e}setStickyBottomHeight(e=0){this.comp.setStickyBottomHeight(`${e}px`),this.stickyBottomHeight=e}setStickyWidth(e){if(!e)this.comp.setStickyTopWidth("100%"),this.comp.setStickyBottomWidth("100%");else{const t=this.scrollVisibleSvc.getScrollbarWidth();this.comp.setStickyTopWidth(`calc(100% - ${t}px)`),this.comp.setStickyBottomWidth(`calc(100% - ${t}px)`)}}setStickyTopOffsetTop(){var i,n;const t=this.ctrlsSvc.get("gridHeaderCtrl").headerHeight+(((i=this.filterManager)==null?void 0:i.getHeaderHeight())??0),o=((n=this.pinnedRowModel)==null?void 0:n.getPinnedTopTotalHeight())??0;let s=0;t>0&&(s+=t),o>0&&(s+=o),s>0&&(s+=1),this.comp.setStickyTopTop(`${s}px`)}setStickyBottomOffsetBottom(){const{pinnedRowModel:e,scrollVisibleSvc:t,comp:o}=this,s=(e==null?void 0:e.getPinnedBottomTotalHeight())??0,n=t.horizontalScrollShowing&&t.getScrollbarWidth()||0,r=s+n;o.setStickyBottomBottom(`${r}px`)}},Dn=class extends N{constructor(e,t){super(),this.direction=t,this.eViewport=x,this.eContainer=x,this.hideTimeout=0,this.setTemplate(e)}postConstruct(){this.addManagedEventListeners({scrollVisibilityChanged:this.onScrollVisibilityChanged.bind(this)}),this.onScrollVisibilityChanged(),this.toggleCss("ag-apple-scrollbar",fi()||Ze())}destroy(){super.destroy(),window.clearTimeout(this.hideTimeout)}initialiseInvisibleScrollbar(){this.invisibleScrollbar===void 0&&(this.invisibleScrollbar=mi(),this.invisibleScrollbar&&(this.hideAndShowInvisibleScrollAsNeeded(),this.addActiveListenerToggles()))}addActiveListenerToggles(){const e=this.getGui(),t=()=>this.toggleCss("ag-scrollbar-active",!0),o=()=>this.toggleCss("ag-scrollbar-active",!1);this.addManagedListeners(e,{mouseenter:t,mousedown:t,touchstart:t,mouseleave:o,touchend:o})}onScrollVisibilityChanged(){this.invisibleScrollbar===void 0&&this.initialiseInvisibleScrollbar(),be(this.beans,()=>this.setScrollVisible())}hideAndShowInvisibleScrollAsNeeded(){this.addManagedEventListeners({bodyScroll:e=>{e.direction===this.direction&&(this.hideTimeout&&(window.clearTimeout(this.hideTimeout),this.hideTimeout=0),this.toggleCss("ag-scrollbar-scrolling",!0))},bodyScrollEnd:()=>{this.hideTimeout=window.setTimeout(()=>{this.toggleCss("ag-scrollbar-scrolling",!1),this.hideTimeout=0},400)}})}attemptSettingScrollPosition(e){const t=this.eViewport;Or(()=>De(t),()=>this.setScrollPosition(e),100)}onScrollCallback(e){this.addManagedElementListeners(this.eViewport,{scroll:e})}},Ad={tag:"div",cls:"ag-body-horizontal-scroll",attrs:{"aria-hidden":"true"},children:[{tag:"div",ref:"eLeftSpacer",cls:"ag-horizontal-left-spacer"},{tag:"div",ref:"eViewport",cls:"ag-body-horizontal-scroll-viewport",children:[{tag:"div",ref:"eContainer",cls:"ag-body-horizontal-scroll-container"}]},{tag:"div",ref:"eRightSpacer",cls:"ag-horizontal-right-spacer"}]},Hd=class extends Dn{constructor(){super(Ad,"horizontal"),this.eLeftSpacer=x,this.eRightSpacer=x,this.setScrollVisibleDebounce=0}wireBeans(e){this.visibleCols=e.visibleCols,this.scrollVisibleSvc=e.scrollVisibleSvc}postConstruct(){super.postConstruct();const e=this.setFakeHScrollSpacerWidths.bind(this);this.addManagedEventListeners({displayedColumnsChanged:e,displayedColumnsWidthChanged:e,pinnedRowDataChanged:this.refreshCompBottom.bind(this)}),this.addManagedPropertyListener("domLayout",e),this.beans.ctrlsSvc.register("fakeHScrollComp",this),this.createManagedBean(new jo(t=>this.eContainer.style.width=`${t}px`)),this.addManagedPropertyListeners(["suppressHorizontalScroll"],this.onScrollVisibilityChanged.bind(this))}destroy(){window.clearTimeout(this.setScrollVisibleDebounce),super.destroy()}initialiseInvisibleScrollbar(){this.invisibleScrollbar===void 0&&(this.enableRtl=this.gos.get("enableRtl"),super.initialiseInvisibleScrollbar(),this.invisibleScrollbar&&this.refreshCompBottom())}refreshCompBottom(){var t;if(!this.invisibleScrollbar)return;const e=((t=this.beans.pinnedRowModel)==null?void 0:t.getPinnedBottomTotalHeight())??0;this.getGui().style.bottom=`${e}px`}onScrollVisibilityChanged(){super.onScrollVisibilityChanged(),this.setFakeHScrollSpacerWidths()}setFakeHScrollSpacerWidths(){const e=this.scrollVisibleSvc.verticalScrollShowing;let t=this.visibleCols.getDisplayedColumnsRightWidth();const o=!this.enableRtl&&e,s=this.scrollVisibleSvc.getScrollbarWidth();o&&(t+=s),me(this.eRightSpacer,t),this.eRightSpacer.classList.toggle("ag-scroller-corner",t<=s);let i=this.visibleCols.getColsLeftWidth();this.enableRtl&&e&&(i+=s),me(this.eLeftSpacer,i),this.eLeftSpacer.classList.toggle("ag-scroller-corner",i<=s)}setScrollVisible(){const e=this.scrollVisibleSvc.horizontalScrollShowing,t=this.invisibleScrollbar,o=this.gos.get("suppressHorizontalScroll"),s=e&&this.scrollVisibleSvc.getScrollbarWidth()||0,n=o?0:s===0&&t?16:s,r=()=>{this.setScrollVisibleDebounce=0,this.toggleCss("ag-scrollbar-invisible",t),so(this.getGui(),n),so(this.eViewport,n),so(this.eContainer,n),n||this.eContainer.style.setProperty("min-height","1px"),this.setVisible(e,{skipAriaHidden:!0})};window.clearTimeout(this.setScrollVisibleDebounce),e?this.setScrollVisibleDebounce=window.setTimeout(r,100):r()}getScrollPosition(){return Dt(this.eViewport,this.enableRtl)}setScrollPosition(e){De(this.eViewport)||this.attemptSettingScrollPosition(e),Pt(this.eViewport,e,this.enableRtl)}},Gd={selector:"AG-FAKE-HORIZONTAL-SCROLL",component:Hd},Bd={tag:"div",cls:"ag-body-vertical-scroll",attrs:{"aria-hidden":"true"},children:[{tag:"div",ref:"eViewport",cls:"ag-body-vertical-scroll-viewport",children:[{tag:"div",ref:"eContainer",cls:"ag-body-vertical-scroll-container"}]}]},Od=class extends Dn{constructor(){super(Bd,"vertical")}postConstruct(){super.postConstruct(),this.createManagedBean(new bn(this.eContainer));const{ctrlsSvc:e}=this.beans;e.register("fakeVScrollComp",this),this.addManagedEventListeners({rowContainerHeightChanged:this.onRowContainerHeightChanged.bind(this,e)})}setScrollVisible(){const{scrollVisibleSvc:e}=this.beans,t=e.verticalScrollShowing,o=this.invisibleScrollbar,s=t&&e.getScrollbarWidth()||0,i=s===0&&o?16:s;this.toggleCss("ag-scrollbar-invisible",o),me(this.getGui(),i),me(this.eViewport,i),me(this.eContainer,i),this.setDisplayed(t,{skipAriaHidden:!0})}onRowContainerHeightChanged(e){const o=e.getGridBodyCtrl().eBodyViewport,s=this.getScrollPosition(),i=o.scrollTop;s!=i&&this.setScrollPosition(i,!0)}getScrollPosition(){return this.eViewport.scrollTop}setScrollPosition(e,t){!t&&!De(this.eViewport)&&this.attemptSettingScrollPosition(e),this.eViewport.scrollTop=e}},Wd={selector:"AG-FAKE-VERTICAL-SCROLL",component:Od};function Vd(e){return e.cols?e.cols.treeDepth+1:-1}function ie(e){var t;return((t=e.ctrlsSvc.getHeaderRowContainerCtrl())==null?void 0:t.getRowCount())??0}function $o(e){const t=[],o=e.ctrlsSvc.getHeaderRowContainerCtrls();for(const s of o){if(!s)continue;const i=s.getGroupRowCount()||0;for(let n=0;nl)&&(t[n]=a)}}}return t}function Nd(e,t){let s=e.colModel.isPivotMode()?_d(e):En(e);const i=t.getHeaderCellCtrls();for(const n of i){const{column:r}=n,l=r.getAutoHeaderHeight();l!=null&&l>s&&r.isAutoHeaderHeight()&&(s=l)}return s}function qo(e){let o=e.colModel.isPivotMode()?zd(e):qt(e);return e.colModel.forAllCols(s=>{const i=s.getAutoHeaderHeight();i!=null&&i>o&&s.isAutoHeaderHeight()&&(o=i)}),o}function qt(e){return e.gos.get("headerHeight")??e.environment.getDefaultHeaderHeight()}function Pn(e){return e.gos.get("floatingFiltersHeight")??qt(e)}function En(e){return e.gos.get("groupHeaderHeight")??qt(e)}function zd(e){return e.gos.get("pivotHeaderHeight")??qt(e)}function _d(e){return e.gos.get("pivotGroupHeaderHeight")??En(e)}var Ud=class extends v{setComp(e,t,o){this.comp=e,this.eGui=t;const{beans:s}=this,{headerNavigation:i,touchSvc:n,ctrlsSvc:r}=s;i&&this.createManagedBean(new $t(o,{onTabKeyDown:this.onTabKeyDown.bind(this),handleKeyDown:this.handleKeyDown.bind(this),onFocusOut:this.onFocusOut.bind(this)})),this.addManagedEventListeners({columnPivotModeChanged:this.onPivotModeChanged.bind(this,s),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this,s)}),this.onPivotModeChanged(s),this.setupHeaderHeight();const l=this.onHeaderContextMenu.bind(this);this.addManagedElementListeners(this.eGui,{contextmenu:l}),n==null||n.mockHeaderContextMenu(this,l),r.register("gridHeaderCtrl",this)}setupHeaderHeight(){const e=this.setHeaderHeight.bind(this);e(),this.addManagedPropertyListeners(["headerHeight","pivotHeaderHeight","groupHeaderHeight","pivotGroupHeaderHeight","floatingFiltersHeight"],e),this.addManagedEventListeners({displayedColumnsChanged:e,columnHeaderHeightChanged:e,columnGroupHeaderHeightChanged:()=>be(this.beans,()=>e()),gridStylesChanged:e,advancedFilterEnabledChanged:e})}setHeaderHeight(){var n;const{beans:e}=this;let t=0;const o=$o(e).reduce((r,l)=>r+l,0),s=qo(e);if((n=e.filterManager)!=null&&n.hasFloatingFilters()&&(t+=Pn(e)),t+=o,t+=s,this.headerHeight===t)return;this.headerHeight=t;const i=`${t+1}px`;this.comp.setHeightAndMinHeight(i),this.eventSvc.dispatchEvent({type:"headerHeightChanged"})}onPivotModeChanged(e){const t=e.colModel.isPivotMode();this.comp.toggleCss("ag-pivot-on",t),this.comp.toggleCss("ag-pivot-off",!t)}onDisplayedColumnsChanged(e){const o=e.visibleCols.allCols.some(s=>s.isSpanHeaderHeight());this.comp.toggleCss("ag-header-allow-overflow",o)}onTabKeyDown(e){const t=this.gos.get("enableRtl"),o=e.shiftKey,s=o!==t?"LEFT":"RIGHT",{beans:i}=this,{headerNavigation:n,focusSvc:r}=i;(n.navigateHorizontally(s,!0,e)||!o&&r.focusOverlay(!1)||et(i,o,!0))&&e.preventDefault()}handleKeyDown(e){let t=null;const{headerNavigation:o}=this.beans;switch(e.key){case m.LEFT:t="LEFT";case m.RIGHT:{k(t)||(t="RIGHT"),o.navigateHorizontally(t,!1,e)&&e.preventDefault();break}case m.UP:t="UP";case m.DOWN:{k(t)||(t="DOWN"),o.navigateVertically(t,null,e)&&e.preventDefault();break}default:return}}onFocusOut(e){const{relatedTarget:t}=e,{eGui:o,beans:s}=this;!t&&o.contains(z(s))||o.contains(t)||(s.focusSvc.focusedHeader=null)}onHeaderContextMenu(e,t,o){var r;const{menuSvc:s,ctrlsSvc:i}=this.beans;if(!e&&!o||!(s!=null&&s.isHeaderContextMenuEnabled()))return;const{target:n}=e??t;(n===this.eGui||n===((r=i.getHeaderRowContainerCtrl())==null?void 0:r.eViewport))&&s.showHeaderContextMenu(void 0,e,o)}},Zo=class extends N{constructor(e,t){super(e),this.ctrl=t}getCtrl(){return this.ctrl}},Kd={tag:"div",cls:"ag-header-cell",role:"columnheader",children:[{tag:"div",ref:"eResize",cls:"ag-header-cell-resize",role:"presentation"},{tag:"div",ref:"eHeaderCompWrapper",cls:"ag-header-cell-comp-wrapper",role:"presentation"}]},jd=class extends Zo{constructor(e){super(Kd,e),this.eResize=x,this.eHeaderCompWrapper=x,this.headerCompVersion=0}postConstruct(){const e=this.getGui();((i,n)=>{n!=null&&n!=""?e.setAttribute(i,n):e.removeAttribute(i)})("col-id",this.ctrl.column.getColId());const o={setWidth:i=>e.style.width=i,toggleCss:(i,n)=>this.toggleCss(i,n),setUserStyles:i=>it(e,i),setAriaSort:i=>i?Fr(e,i):xr(e),setUserCompDetails:i=>this.setUserCompDetails(i),getUserCompInstance:()=>this.headerComp};this.ctrl.setComp(o,this.getGui(),this.eResize,this.eHeaderCompWrapper,void 0);const s=this.ctrl.getSelectAllGui();s&&this.eResize.insertAdjacentElement("afterend",s)}destroy(){this.destroyHeaderComp(),super.destroy()}destroyHeaderComp(){this.headerComp&&(this.eHeaderCompWrapper.removeChild(this.headerCompGui),this.headerComp=this.destroyBean(this.headerComp),this.headerCompGui=void 0)}setUserCompDetails(e){this.headerCompVersion++;const t=this.headerCompVersion;e.newAgStackInstance().then(o=>this.afterCompCreated(t,o))}afterCompCreated(e,t){if(e!=this.headerCompVersion||!this.isAlive()){this.destroyBean(t);return}this.destroyHeaderComp(),this.headerComp=t,this.headerCompGui=t.getGui(),this.eHeaderCompWrapper.appendChild(this.headerCompGui),this.ctrl.setDragSource(this.getGui())}},$d={tag:"div",cls:"ag-header-group-cell",role:"columnheader",children:[{tag:"div",ref:"eHeaderCompWrapper",cls:"ag-header-cell-comp-wrapper",role:"presentation"},{tag:"div",ref:"eResize",cls:"ag-header-cell-resize",role:"presentation"}]},qd=class extends Zo{constructor(e){super($d,e),this.eResize=x,this.eHeaderCompWrapper=x}postConstruct(){const e=this.getGui(),t=(s,i)=>i!=null?e.setAttribute(s,i):e.removeAttribute(s);e.setAttribute("col-id",this.ctrl.column.getUniqueId());const o={toggleCss:(s,i)=>this.toggleCss(s,i),setUserStyles:s=>it(e,s),setHeaderWrapperHidden:s=>{s?this.eHeaderCompWrapper.style.setProperty("display","none"):this.eHeaderCompWrapper.style.removeProperty("display")},setHeaderWrapperMaxHeight:s=>{s!=null?this.eHeaderCompWrapper.style.setProperty("max-height",`${s}px`):this.eHeaderCompWrapper.style.removeProperty("max-height"),this.eHeaderCompWrapper.classList.toggle("ag-header-cell-comp-wrapper-limited-height",s!=null)},setResizableDisplayed:s=>W(this.eResize,s),setWidth:s=>e.style.width=s,setAriaExpanded:s=>t("aria-expanded",s),setUserCompDetails:s=>this.setUserCompDetails(s),getUserCompInstance:()=>this.headerGroupComp};this.ctrl.setComp(o,e,this.eResize,this.eHeaderCompWrapper,void 0)}setUserCompDetails(e){e.newAgStackInstance().then(t=>this.afterHeaderCompCreated(t))}afterHeaderCompCreated(e){const t=()=>this.destroyBean(e);if(!this.isAlive()){t();return}const o=this.getGui(),s=e.getGui();this.eHeaderCompWrapper.appendChild(s),this.addDestroyFunc(t),this.headerGroupComp=e,this.ctrl.setDragSource(o)}addOrRemoveHeaderWrapperStyle(e,t){const{eHeaderCompWrapper:o}=this;t?o.style.setProperty(e,t):o.style.removeProperty(e)}},Zd={tag:"div",cls:"ag-header-cell ag-floating-filter",role:"gridcell",children:[{tag:"div",ref:"eFloatingFilterBody",role:"presentation"},{tag:"div",ref:"eButtonWrapper",cls:"ag-floating-filter-button ag-hidden",role:"presentation",children:[{tag:"button",ref:"eButtonShowMainFilter",cls:"ag-button ag-floating-filter-button-button",attrs:{type:"button",tabindex:"-1"}}]}]},Yd=class extends Zo{constructor(e){super(Zd,e),this.eFloatingFilterBody=x,this.eButtonWrapper=x,this.eButtonShowMainFilter=x}postConstruct(){const e=this.getGui(),t={toggleCss:(o,s)=>this.toggleCss(o,s),setUserStyles:o=>it(e,o),addOrRemoveBodyCssClass:(o,s)=>this.eFloatingFilterBody.classList.toggle(o,s),setButtonWrapperDisplayed:o=>W(this.eButtonWrapper,o),setCompDetails:o=>this.setCompDetails(o),getFloatingFilterComp:()=>this.compPromise,setWidth:o=>e.style.width=o,setMenuIcon:o=>this.eButtonShowMainFilter.appendChild(o)};this.ctrl.setComp(t,e,this.eButtonShowMainFilter,this.eFloatingFilterBody,void 0)}setCompDetails(e){if(!e){this.destroyFloatingFilterComp(),this.compPromise=null;return}this.compPromise=e.newAgStackInstance(),this.compPromise.then(t=>this.afterCompCreated(t))}destroy(){this.destroyFloatingFilterComp(),super.destroy()}destroyFloatingFilterComp(){this.floatingFilterComp&&(this.eFloatingFilterBody.removeChild(this.floatingFilterComp.getGui()),this.floatingFilterComp=this.destroyBean(this.floatingFilterComp))}afterCompCreated(e){if(e){if(!this.isAlive()){this.destroyBean(e);return}this.destroyFloatingFilterComp(),this.floatingFilterComp=e,this.eFloatingFilterBody.appendChild(e.getGui()),e.afterGuiAttached&&e.afterGuiAttached()}}},Qd=class extends N{constructor(e){super({tag:"div",cls:e.headerRowClass,role:"row"}),this.ctrl=e,this.headerComps={}}postConstruct(){ui(this.getGui(),this.ctrl.getAriaRowIndex());const e={setHeight:t=>this.getGui().style.height=t,setTop:t=>this.getGui().style.top=t,setHeaderCtrls:(t,o)=>this.setHeaderCtrls(t,o),setWidth:t=>this.getGui().style.width=t};this.ctrl.setComp(e,void 0)}destroy(){this.setHeaderCtrls([],!1),super.destroy()}setHeaderCtrls(e,t){if(!this.isAlive())return;const o=this.headerComps;if(this.headerComps={},e.forEach(s=>{const i=s.instanceId;let n=o[i];delete o[i],n==null&&(n=this.createHeaderComp(s),this.getGui().appendChild(n.getGui())),this.headerComps[i]=n}),Object.values(o).forEach(s=>{this.getGui().removeChild(s.getGui()),this.destroyBean(s)}),t){const s=Object.values(this.headerComps);s.sort((n,r)=>{const l=n.getCtrl().column.getLeft(),a=r.getCtrl().column.getLeft();return l-a});const i=s.map(n=>n.getGui());Ri(this.getGui(),i)}}createHeaderComp(e){let t;switch(this.ctrl.type){case"group":t=new qd(e);break;case"filter":t=new Yd(e);break;default:t=new jd(e);break}return this.createBean(t),t.setParentComponent(this),t}},Tn=class extends v{constructor(e,t,o,s){super(),this.columnOrGroup=e,this.eCell=t,this.colsSpanning=s,this.columnOrGroup=e,this.ariaEl=t.querySelector("[role=columnheader]")||t,this.beans=o}setColsSpanning(e){this.colsSpanning=e,this.onLeftChanged()}getColumnOrGroup(){const{beans:e,colsSpanning:t}=this;return e.gos.get("enableRtl")&&t?H(t):this.columnOrGroup}postConstruct(){const e=this.onLeftChanged.bind(this);this.addManagedListeners(this.columnOrGroup,{leftChanged:e}),this.setLeftFirstTime(),this.addManagedEventListeners({displayedColumnsWidthChanged:e}),this.addManagedPropertyListener("domLayout",e)}setLeftFirstTime(){const{gos:e,colAnimation:t}=this.beans,o=e.get("suppressColumnMoveAnimation"),s=k(this.columnOrGroup.getOldLeft());(t==null?void 0:t.isActive())&&s&&!o?this.animateInLeft():this.onLeftChanged()}animateInLeft(){const e=this.getColumnOrGroup(),t=this.modifyLeftForPrintLayout(e,e.getOldLeft()),o=this.modifyLeftForPrintLayout(e,e.getLeft());this.setLeft(t),this.actualLeft=o,this.beans.colAnimation.executeNextVMTurn(()=>{this.actualLeft===o&&this.setLeft(o)})}onLeftChanged(){const e=this.getColumnOrGroup(),t=e.getLeft();this.actualLeft=this.modifyLeftForPrintLayout(e,t),this.setLeft(this.actualLeft)}modifyLeftForPrintLayout(e,t){const{gos:o,visibleCols:s}=this.beans;if(!$(o,"print")||e.getPinned()==="left")return t;const n=s.getColsLeftWidth();if(e.getPinned()==="right"){const r=s.bodyWidth;return n+r+t}return n+t}setLeft(e){if(k(e)&&(this.eCell.style.left=`${e}px`),O(this.columnOrGroup)){const t=this.columnOrGroup.getLeafColumns();if(!t.length)return;t.length>1&&Rr(this.ariaEl,t.length)}}},Xd=0,kn="headerCtrl",In=class extends v{constructor(e,t){super(),this.column=e,this.rowCtrl=t,this.resizeToggleTimeout=0,this.resizeMultiplier=1,this.resizeFeature=null,this.lastFocusEvent=null,this.dragSource=null,this.instanceId=e.getUniqueId()+"-"+Xd++}postConstruct(){const e=this.refreshTabIndex.bind(this);this.addManagedPropertyListeners(["suppressHeaderFocus"],e),this.addManagedEventListeners({overlayExclusiveChanged:e})}shouldStopEventPropagation(e){const{headerRowIndex:t,column:o}=this.beans.focusSvc.focusedHeader,s=o.getDefinition(),i=s&&s.suppressHeaderKeyboardEvent;if(!k(i))return!1;const n=A(this.gos,{colDef:s,column:o,headerRowIndex:t,event:e});return!!i(n)}getWrapperHasFocus(){return z(this.beans)===this.eGui}setGui(e,t){this.eGui=e,this.addDomData(t),t.addManagedListeners(this.beans.eventSvc,{displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this)}),t.addManagedElementListeners(this.eGui,{focus:this.onGuiFocus.bind(this)}),this.onDisplayedColumnsChanged(),this.refreshTabIndex()}refreshHeaderStyles(){const e=this.column.getDefinition();if(!e)return;const{headerStyle:t}=e;let o;if(typeof t=="function"){const s=this.getHeaderClassParams();o=t(s)}else o=t;o&&this.comp.setUserStyles(o)}onGuiFocus(){this.eventSvc.dispatchEvent({type:"headerFocused",column:this.column})}setupAutoHeight(e){const{wrapperElement:t,checkMeasuringCallback:o,compBean:s}=e,{beans:i}=this,n=h=>{if(!this.isAlive()||!s.isAlive())return;const{paddingTop:u,paddingBottom:g,borderBottomWidth:p,borderTopWidth:f}=Nt(this.eGui),C=u+g+p+f,S=t.offsetHeight+C;if(h<5){const w=oe(i),R=!w||!w.contains(t),D=S==0;if(R||D){Fo(()=>n(h+1),"raf",i);return}}this.setColHeaderHeight(this.column,S)};let r=!1,l;const a=()=>{const h=this.column.isAutoHeaderHeight();h&&!r&&d(),!h&&r&&c()},d=()=>{r=!0,n(0),this.comp.toggleCss("ag-header-cell-auto-height",!0),l=nt(this.beans,t,()=>n(0))},c=()=>{r=!1,l&&l(),this.comp.toggleCss("ag-header-cell-auto-height",!1),l=void 0};a(),s.addDestroyFunc(()=>c()),s.addManagedListeners(this.column,{widthChanged:()=>r&&n(0)}),s.addManagedEventListeners({sortChanged:()=>{r&&window.setTimeout(()=>n(0))}}),o&&o(a)}onDisplayedColumnsChanged(){const{comp:e,column:t,beans:o,eGui:s}=this;!e||!t||!s||(un(e,t,o.visibleCols),gi(s,o.visibleCols.getAriaColIndex(t)))}addResizeAndMoveKeyboardListeners(e){e.addManagedListeners(this.eGui,{keydown:this.onGuiKeyDown.bind(this),keyup:this.onGuiKeyUp.bind(this)})}refreshTabIndex(){const e=Fe(this.beans);this.eGui&&Le(this.eGui,"tabindex",e?null:"-1")}onGuiKeyDown(e){var n;const t=z(this.beans),o=e.key===m.LEFT||e.key===m.RIGHT;if(this.isResizing&&(e.preventDefault(),e.stopImmediatePropagation()),t!==this.eGui||!e.shiftKey&&!e.altKey||((this.isResizing||o)&&(e.preventDefault(),e.stopImmediatePropagation()),!o))return;const i=e.key===m.LEFT!==this.gos.get("enableRtl")?"left":"right";if(e.altKey){this.isResizing=!0,this.resizeMultiplier+=1;const r=this.getViewportAdjustedResizeDiff(e);this.resizeHeader(r,e.shiftKey),(n=this.resizeFeature)==null||n.toggleColumnResizing(!0)}else this.moveHeader(i)}moveHeader(e){var t;(t=this.beans.colMoves)==null||t.moveHeader(e,this.eGui,this.column,this.rowCtrl.pinned,this)}getViewportAdjustedResizeDiff(e){const t=this.getResizeDiff(e),{pinnedCols:o}=this.beans;return o?o.getHeaderResizeDiff(t,this.column):t}getResizeDiff(e){const{gos:t,column:o}=this;let s=e.key===m.LEFT!==t.get("enableRtl");const i=o.getPinned(),n=t.get("enableRtl");return i&&n!==(i==="right")&&(s=!s),(s?-1:1)*this.resizeMultiplier}onGuiKeyUp(){this.isResizing&&(this.resizeToggleTimeout&&(window.clearTimeout(this.resizeToggleTimeout),this.resizeToggleTimeout=0),this.isResizing=!1,this.resizeMultiplier=1,this.resizeToggleTimeout=window.setTimeout(()=>{var e;(e=this.resizeFeature)==null||e.toggleColumnResizing(!1)},150))}handleKeyDown(e){const t=this.getWrapperHasFocus();switch(e.key){case m.PAGE_DOWN:case m.PAGE_UP:case m.PAGE_HOME:case m.PAGE_END:t&&e.preventDefault()}}addDomData(e){const t=kn,{eGui:o,gos:s}=this;Be(s,o,t,this),e.addDestroyFunc(()=>Be(s,o,t,null))}focus(e){const{eGui:t}=this;return t?(this.lastFocusEvent=e||null,t.focus(),!0):!1}focusThis(){this.beans.focusSvc.focusedHeader={headerRowIndex:this.rowCtrl.rowIndex,column:this.column}}removeDragSource(){var e;this.dragSource&&((e=this.beans.dragAndDrop)==null||e.removeDragSource(this.dragSource),this.dragSource=null)}handleContextMenuMouseEvent(e,t,o){const s=e??t,{menuSvc:i,gos:n}=this.beans;n.get("preventDefaultOnContextMenu")&&s.preventDefault(),i!=null&&i.isHeaderContextMenuEnabled(o)&&i.showHeaderContextMenu(o,e,t),this.dispatchColumnMouseEvent("columnHeaderContextMenu",o)}dispatchColumnMouseEvent(e,t){this.eventSvc.dispatchEvent({type:e,column:t})}setColHeaderHeight(e,t){if(!e.setAutoHeaderHeight(t))return;const{eventSvc:o}=this;e.isColumn?o.dispatchEvent({type:"columnHeaderHeightChanged",column:e,columns:[e],source:"autosizeColumnHeaderHeight"}):o.dispatchEvent({type:"columnGroupHeaderHeightChanged",columnGroup:e,source:"autosizeColumnGroupHeaderHeight"})}clearComponent(){this.removeDragSource(),this.resizeFeature=null,this.comp=null,this.eGui=null}destroy(){super.destroy(),this.column=null,this.lastFocusEvent=null,this.rowCtrl=null}},Jd=class extends In{constructor(){super(...arguments),this.refreshFunctions={},this.userHeaderClasses=new Set,this.ariaDescriptionProperties=new Map}setComp(e,t,o,s,i){this.comp=e;const{rowCtrl:n,column:r,beans:l}=this,{colResize:a,context:d,colHover:c,rangeSvc:h}=l,u=Kt(this,d,i);this.setGui(t,u),this.updateState(),this.setupWidth(u),this.setupMovingCss(u),this.setupMenuClass(u),this.setupSortableClass(u),this.setupWrapTextClass(),this.refreshSpanHeaderHeight(),this.setupAutoHeight({wrapperElement:s,checkMeasuringCallback:p=>this.setRefreshFunction("measuring",p),compBean:u}),this.addColumnHoverListener(u),this.setupFilterClass(u),this.setupStylesFromColDef(),this.setupClassesFromColDef(),this.setupTooltip(),this.addActiveHeaderMouseListeners(u),this.setupSelectAll(u),this.setupUserComp(),this.refreshAria(),a?this.resizeFeature=u.createManagedBean(a.createResizeFeature(n.pinned,r,o,e,this)):W(o,!1),c==null||c.createHoverFeature(u,[r],t),h==null||h.createRangeHighlightFeature(u,r,e),u.createManagedBean(new Tn(r,t,l)),u.createManagedBean(new $t(t,{shouldStopEventPropagation:p=>this.shouldStopEventPropagation(p),onTabKeyDown:()=>null,handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this),onFocusOut:this.onFocusOut.bind(this)})),this.addResizeAndMoveKeyboardListeners(u),u.addManagedPropertyListeners(["suppressMovableColumns","suppressMenuHide","suppressAggFuncInHeader","enableAdvancedFilter"],()=>this.refresh()),u.addManagedListeners(r,{colDefChanged:()=>this.refresh()}),u.addManagedListeners(r,{headerHighlightChanged:this.onHeaderHighlightChanged.bind(this)});const g=()=>this.checkDisplayName();u.addManagedEventListeners({columnValueChanged:g,columnRowGroupChanged:g,columnPivotChanged:g,headerHeightChanged:this.onHeaderHeightChanged.bind(this)}),u.addDestroyFunc(()=>{this.refreshFunctions={},this.selectAllFeature=null,this.dragSourceElement=void 0,this.userCompDetails=null,this.userHeaderClasses.clear(),this.ariaDescriptionProperties.clear(),this.clearComponent()})}resizeHeader(e,t){var o;(o=this.beans.colResize)==null||o.resizeHeader(this.column,e,t)}getHeaderClassParams(){const{column:e,beans:t}=this,o=e.colDef;return A(t.gos,{colDef:o,column:e,floatingFilter:!1})}setupUserComp(){const e=this.lookupUserCompDetails();e&&this.setCompDetails(e)}setCompDetails(e){this.userCompDetails=e,this.comp.setUserCompDetails(e)}lookupUserCompDetails(){const e=this.createParams(),t=this.column.getColDef();return na(this.beans.userCompFactory,t,e)}createParams(){const{menuSvc:e,sortSvc:t,colFilter:o,gos:s}=this.beans;return A(s,{column:this.column,displayName:this.displayName,enableSorting:this.column.isSortable(),enableMenu:this.menuEnabled,enableFilterButton:this.openFilterEnabled&&!!(e!=null&&e.isHeaderFilterButtonEnabled(this.column)),enableFilterIcon:!!o&&(!this.openFilterEnabled||Et(this.gos)),showColumnMenu:(n,r)=>{e==null||e.showColumnMenu({column:this.column,buttonElement:n,positionBy:"button",onClosedCallback:r})},showColumnMenuAfterMouseClick:(n,r)=>{e==null||e.showColumnMenu({column:this.column,mouseEvent:n,positionBy:"mouse",onClosedCallback:r})},showFilter:n=>{e==null||e.showFilterMenu({column:this.column,buttonElement:n,containerType:"columnFilter",positionBy:"button"})},progressSort:n=>{t==null||t.progressSort(this.column,!!n,"uiColumnSorted")},setSort:(n,r)=>{t==null||t.setSortForColumn(this.column,n,!!r,"uiColumnSorted")},eGridHeader:this.eGui,setTooltip:(n,r)=>{s.assertModuleRegistered("Tooltip",3),this.setupTooltip(n,r)}})}setupSelectAll(e){const{selectionSvc:t}=this.beans;t&&(this.selectAllFeature=e.createManagedBean(t.createSelectAllFeature(this.column)),this.selectAllFeature.setComp(this))}getSelectAllGui(){var e;return(e=this.selectAllFeature)==null?void 0:e.getCheckboxGui()}handleKeyDown(e){var t;super.handleKeyDown(e),e.key===m.SPACE&&((t=this.selectAllFeature)==null||t.onSpaceKeyDown(e)),e.key===m.ENTER&&this.onEnterKeyDown(e),e.key===m.DOWN&&e.altKey&&this.showMenuOnKeyPress(e,!1)}onEnterKeyDown(e){var t;e.ctrlKey||e.metaKey?this.showMenuOnKeyPress(e,!0):this.sortable&&((t=this.beans.sortSvc)==null||t.progressSort(this.column,e.shiftKey,"uiColumnSorted"))}showMenuOnKeyPress(e,t){const o=this.comp.getUserCompInstance();Is(o)&&o.onMenuKeyboardShortcut(t)&&e.preventDefault()}onFocusIn(e){this.eGui.contains(e.relatedTarget)||(this.focusThis(),this.announceAriaDescription()),Aa()&&this.setActiveHeader(!0)}onFocusOut(e){this.eGui.contains(e.relatedTarget)||this.setActiveHeader(!1)}setupTooltip(e,t){var o;this.tooltipFeature=(o=this.beans.tooltipSvc)==null?void 0:o.setupHeaderTooltip(this.tooltipFeature,this,e,t)}setupStylesFromColDef(){this.setRefreshFunction("headerStyles",this.refreshHeaderStyles.bind(this)),this.refreshHeaderStyles()}setupClassesFromColDef(){const e=()=>{const t=this.column.getColDef(),o=hn(t,this.gos,this.column,null),s=this.userHeaderClasses;this.userHeaderClasses=new Set(o),o.forEach(i=>{s.has(i)?s.delete(i):this.comp.toggleCss(i,!0)}),s.forEach(i=>this.comp.toggleCss(i,!1))};this.setRefreshFunction("headerClasses",e),e()}setDragSource(e){var t;this.dragSourceElement=e,this.removeDragSource(),!(!e||!this.draggable)&&(this.dragSource=((t=this.beans.colMoves)==null?void 0:t.setDragSourceForHeader(e,this.column,this.displayName))??null)}updateState(){const{menuSvc:e}=this.beans;this.menuEnabled=!!(e!=null&&e.isColumnMenuInHeaderEnabled(this.column)),this.openFilterEnabled=!!(e!=null&&e.isFilterMenuInHeaderEnabled(this.column)),this.sortable=this.column.isSortable(),this.displayName=this.calculateDisplayName(),this.draggable=this.workOutDraggable()}setRefreshFunction(e,t){this.refreshFunctions[e]=t}refresh(){this.updateState(),this.refreshHeaderComp(),this.refreshAria(),Object.values(this.refreshFunctions).forEach(e=>e())}refreshHeaderComp(){const e=this.lookupUserCompDetails();if(!e)return;(this.comp.getUserCompInstance()!=null&&this.userCompDetails.componentClass==e.componentClass?this.attemptHeaderCompRefresh(e.params):!1)?this.setDragSource(this.dragSourceElement):this.setCompDetails(e)}attemptHeaderCompRefresh(e){const t=this.comp.getUserCompInstance();return!t||!t.refresh?!1:t.refresh(e)}calculateDisplayName(){return this.beans.colNames.getDisplayNameForColumn(this.column,"header",!0)}checkDisplayName(){this.displayName!==this.calculateDisplayName()&&this.refresh()}workOutDraggable(){const e=this.column.getColDef();return!!(!this.gos.get("suppressMovableColumns")&&!e.suppressMovable&&!e.lockPosition)||!!e.enableRowGroup||!!e.enablePivot}setupWidth(e){const t=()=>{const o=this.column.getActualWidth();this.comp.setWidth(`${o}px`)};e.addManagedListeners(this.column,{widthChanged:t}),t()}setupMovingCss(e){const t=()=>{this.comp.toggleCss("ag-header-cell-moving",this.column.isMoving())};e.addManagedListeners(this.column,{movingChanged:t}),t()}setupMenuClass(e){const t=()=>{var o;(o=this.comp)==null||o.toggleCss("ag-column-menu-visible",this.column.isMenuVisible())};e.addManagedListeners(this.column,{menuVisibleChanged:t}),t()}setupSortableClass(e){const t=()=>{this.comp.toggleCss("ag-header-cell-sortable",!!this.sortable)};t(),this.setRefreshFunction("updateSortable",t),e.addManagedEventListeners({sortChanged:this.refreshAriaSort.bind(this)})}setupFilterClass(e){const t=()=>{const o=this.column.isFilterActive();this.comp.toggleCss("ag-header-cell-filtered",o),this.refreshAria()};e.addManagedListeners(this.column,{filterActiveChanged:t}),t()}setupWrapTextClass(){const e=()=>{const t=!!this.column.getColDef().wrapHeaderText;this.comp.toggleCss("ag-header-cell-wrap-text",t)};e(),this.setRefreshFunction("wrapText",e)}onHeaderHighlightChanged(){const e=this.column.getHighlighted(),t=e===0,o=e===1;this.comp.toggleCss("ag-header-highlight-before",t),this.comp.toggleCss("ag-header-highlight-after",o)}onDisplayedColumnsChanged(){super.onDisplayedColumnsChanged(),this.isAlive()&&this.onHeaderHeightChanged()}onHeaderHeightChanged(){this.refreshSpanHeaderHeight()}refreshSpanHeaderHeight(){const{eGui:e,column:t,comp:o,beans:s}=this,i=$o(this.beans),n=i.reduce((c,h)=>c+=h,0)===0;if(o.toggleCss("ag-header-parent-hidden",n),!t.isSpanHeaderHeight()){e.style.removeProperty("top"),e.style.removeProperty("height"),o.toggleCss("ag-header-span-height",!1),o.toggleCss("ag-header-span-total",!1);return}const{numberOfParents:r,isSpanningTotal:l}=this.column.getColumnGroupPaddingInfo();o.toggleCss("ag-header-span-height",r>0);const a=qo(s);if(r===0){o.toggleCss("ag-header-span-total",!1),e.style.setProperty("top","0px"),e.style.setProperty("height",`${a}px`);return}o.toggleCss("ag-header-span-total",l);let d=0;for(let c=0;co==="filter"?-1:s.charCodeAt(0)-o.charCodeAt(0)).map(o=>this.ariaDescriptionProperties.get(o)).join(". ");(t=this.beans.ariaAnnounce)==null||t.announceValue(e,"columnHeader")}refreshAria(){this.refreshAriaSort(),this.refreshAriaMenu(),this.refreshAriaFilterButton(),this.refreshAriaFiltered()}addColumnHoverListener(e){var t;(t=this.beans.colHover)==null||t.addHeaderColumnHoverListener(e,this.comp,this.column)}addActiveHeaderMouseListeners(e){const t=i=>this.handleMouseOverChange(i.type==="mouseenter"),o=()=>{this.setActiveHeader(!0),this.dispatchColumnMouseEvent("columnHeaderClicked",this.column)},s=i=>this.handleContextMenuMouseEvent(i,void 0,this.column);e.addManagedListeners(this.eGui,{mouseenter:t,mouseleave:t,click:o,contextmenu:s})}handleMouseOverChange(e){this.setActiveHeader(e),this.eventSvc.dispatchEvent({type:e?"columnHeaderMouseOver":"columnHeaderMouseLeave",column:this.column})}setActiveHeader(e){this.comp.toggleCss("ag-header-active",e)}getAnchorElementForMenu(e){const t=this.comp.getUserCompInstance();return Is(t)?t.getAnchorElementForMenu(e):this.eGui}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),super.destroy()}};function Is(e){return typeof(e==null?void 0:e.getAnchorElementForMenu)=="function"&&typeof e.onMenuKeyboardShortcut=="function"}var ec=0,ho=class extends v{constructor(e,t,o){super(),this.rowIndex=e,this.pinned=t,this.type=o,this.instanceId=ec++,this.allCtrls=[];const s=o=="group"?"ag-header-row-column-group":o=="filter"?"ag-header-row-column-filter":"ag-header-row-column";this.headerRowClass=`ag-header-row ${s}`}postConstruct(){this.isPrintLayout=$(this.gos,"print"),this.isEnsureDomOrder=this.gos.get("ensureDomOrder")}areCellsRendered(){return this.comp?this.allCtrls.every(e=>e.eGui!=null):!1}setComp(e,t,o=!0){this.comp=e,t=Kt(this,this.beans.context,t),o&&(this.onRowHeightChanged(),this.onVirtualColumnsChanged()),this.setWidth(),this.addEventListeners(t)}getAriaRowIndex(){return this.rowIndex+1}addEventListeners(e){const t=this.onRowHeightChanged.bind(this),o=this.onDisplayedColumnsChanged.bind(this);e.addManagedEventListeners({columnResized:this.setWidth.bind(this),displayedColumnsChanged:o,virtualColumnsChanged:s=>this.onVirtualColumnsChanged(s.afterScroll),columnGroupHeaderHeightChanged:t,columnHeaderHeightChanged:t,gridStylesChanged:t,advancedFilterEnabledChanged:t}),e.addManagedPropertyListener("domLayout",o),e.addManagedPropertyListener("ensureDomOrder",s=>this.isEnsureDomOrder=s.currentValue),e.addManagedPropertyListeners(["headerHeight","pivotHeaderHeight","groupHeaderHeight","pivotGroupHeaderHeight","floatingFiltersHeight"],t)}onDisplayedColumnsChanged(){this.isPrintLayout=$(this.gos,"print"),this.onVirtualColumnsChanged(),this.setWidth(),this.onRowHeightChanged()}setWidth(){const e=this.getWidthForRow();this.comp.setWidth(`${e}px`)}getWidthForRow(){const{visibleCols:e}=this.beans;return this.isPrintLayout?this.pinned!=null?0:e.getContainerWidth("right")+e.getContainerWidth("left")+e.getContainerWidth(null):e.getContainerWidth(this.pinned)}onRowHeightChanged(){const{topOffset:e,rowHeight:t}=this.getTopAndHeight();this.comp.setTop(e+"px"),this.comp.setHeight(t+"px")}getTopAndHeight(){const{filterManager:e}=this.beans,t=[],o=$o(this.beans),s=qo(this.beans);t.push(...o),t.push(s),e!=null&&e.hasFloatingFilters()&&t.push(Pn(this.beans));let i=0;for(let r=0;r{const{focusSvc:i,visibleCols:n}=this.beans;return i.isHeaderWrapperFocused(s)?n.isVisible(s.column):!1};if(e)for(const[s,i]of e)o(i)?this.ctrlsById.set(s,i):this.destroyBean(i);return this.allCtrls=Array.from(this.ctrlsById.values()),this.allCtrls}getHeaderCellCtrls(){return this.allCtrls}recycleAndCreateHeaderCtrls(e,t,o){if(e.isEmptyGroup())return;const s=e.getUniqueId();let i;if(o&&(i=o.get(s),o.delete(s)),i&&i.column!=e&&(this.destroyBean(i),i=void 0),i==null)switch(this.type){case"filter":{i=this.createBean(this.beans.registry.createDynamicBean("headerFilterCellCtrl",!0,e,this));break}case"group":i=this.createBean(this.beans.registry.createDynamicBean("headerGroupCellCtrl",!0,e,this));break;default:i=this.createBean(new Jd(e,this));break}t.set(s,i)}getColumnsInViewport(){return this.isPrintLayout?this.getColumnsInViewportPrintLayout():this.getColumnsInViewportNormalLayout()}getColumnsInViewportPrintLayout(){if(this.pinned!=null)return[];let e=[];const t=this.getActualDepth(),{colViewport:o}=this.beans;return["left",null,"right"].forEach(s=>{const i=o.getHeadersToRender(s,t);e=e.concat(i)}),e}getActualDepth(){return this.type=="filter"?this.rowIndex-1:this.rowIndex}getColumnsInViewportNormalLayout(){return this.beans.colViewport.getHeadersToRender(this.pinned,this.getActualDepth())}focusHeader(e,t){const o=this.allCtrls.find(i=>i.column==e);return o?o.focus(t):!1}destroy(){this.allCtrls=this.destroyBeans(this.allCtrls),this.ctrlsById=void 0,super.destroy()}},tc=class extends v{constructor(e){super(),this.pinned=e,this.hidden=!1,this.includeFloatingFilter=!1,this.groupsRowCtrls=[]}setComp(e,t){this.comp=e,this.eViewport=t;const{pinnedCols:o,ctrlsSvc:s,colModel:i,colMoves:n,filterManager:r}=this.beans;this.setupCenterWidth(),o==null||o.setupHeaderPinnedWidth(this),this.setupDragAndDrop(n,this.eViewport);const l=this.onDisplayedColumnsChanged.bind(this,r);this.addManagedEventListeners({gridColumnsChanged:this.onGridColumnsChanged.bind(this),displayedColumnsChanged:l,advancedFilterEnabledChanged:l});const a=`${typeof this.pinned=="string"?this.pinned:"center"}Header`;s.register(a,this),i.ready&&this.refresh()}getAllCtrls(){const e=[...this.groupsRowCtrls];return this.columnsRowCtrl&&e.push(this.columnsRowCtrl),this.filtersRowCtrl&&e.push(this.filtersRowCtrl),e}refresh(e=!1){const{focusSvc:t,colModel:o,filterManager:s}=this.beans;let i=0;const n=t.getFocusHeaderToUseAfterRefresh(),r=()=>{const c=Vd(o)-1;this.groupsRowCtrls=this.destroyBeans(this.groupsRowCtrls);for(let h=0;h{const c=i++,h=!this.hidden&&(this.columnsRowCtrl==null||!e||this.columnsRowCtrl.rowIndex!==c);(h||this.hidden)&&(this.columnsRowCtrl=this.destroyBean(this.columnsRowCtrl)),h&&(this.columnsRowCtrl=this.createBean(new ho(c,this.pinned,"column")))},a=()=>{this.includeFloatingFilter=!!(s!=null&&s.hasFloatingFilters())&&!this.hidden;const c=()=>{this.filtersRowCtrl=this.destroyBean(this.filtersRowCtrl)};if(!this.includeFloatingFilter){c();return}const h=i++;if(this.filtersRowCtrl){const u=this.filtersRowCtrl.rowIndex!==h;(!e||u)&&c()}this.filtersRowCtrl||(this.filtersRowCtrl=this.createBean(new ho(h,this.pinned,"filter")))};r(),l(),a();const d=this.getAllCtrls();this.comp.setCtrls(d),this.restoreFocusOnHeader(t,n)}getHeaderCtrlForColumn(e){const t=o=>o==null?void 0:o.getHeaderCellCtrls().find(s=>s.column===e);if(we(e))return t(this.columnsRowCtrl);if(this.groupsRowCtrls.length!==0)for(let o=0;othis.comp.setCenterWidth(`${e}px`),!0))}},Ln=class extends N{constructor(){super()}},oc={tag:"span",cls:"ag-overlay-loading-center",attrs:{"aria-live":"polite","aria-atomic":"true"}},sc=class extends Ln{init(){var t;const e=Re((t=this.gos.get("overlayLoadingTemplate"))==null?void 0:t.trim());if(this.setTemplate(e??oc),!e){const o=this.getLocaleTextFunc();setTimeout(()=>{this.getGui().textContent=o("loadingOoo","Loading...")})}}},ic={tag:"span",cls:"ag-overlay-no-rows-center"},nc=class extends Ln{init(){var t;const e=Re((t=this.gos.get("overlayNoRowsTemplate"))==null?void 0:t.trim());if(this.setTemplate(e??ic),!e){const o=this.getLocaleTextFunc();setTimeout(()=>{this.getGui().textContent=o("noRowsToShow","No Rows To Show")})}}};function rc(e,t,o){const s=Zt(e,t,o);if(s){const{className:n}=s;if(typeof n=="string"&&n.indexOf("ag-icon")>-1||typeof n=="object"&&n["ag-icon"])return s}const i=q({tag:"span"});return i.appendChild(s),i}function Zt(e,t,o){var n;let s=null;e==="smallDown"?I(262):e==="smallLeft"?I(263):e==="smallRight"&&I(264);const i=o&&o.getColDef().icons;if(i&&(s=i[e]),t.gos&&!s){const r=t.gos.get("icons");r&&(s=r[e])}if(s){let r;if(typeof s=="function")r=s();else if(typeof s=="string")r=s;else{I(38,{iconName:e});return}if(typeof r=="string")return Bo(r);if(Oo(r))return r;I(133,{iconName:e});return}else{const r=t.registry.getIcon(e);return r||(n=t.validation)==null||n.validateIcon(e),q({tag:"span",cls:`ag-icon ag-icon-${r??e}`,role:"presentation",attrs:{unselectable:"on"}})}}var lc=".ag-dnd-ghost{align-items:center;background-color:var(--ag-drag-and-drop-image-background-color);border:var(--ag-drag-and-drop-image-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-drag-and-drop-image-shadow);color:var(--ag-text-color);cursor:move;display:flex;font-weight:500;gap:var(--ag-cell-widget-spacing);height:var(--ag-header-height);overflow:hidden;padding-left:var(--ag-cell-horizontal-padding);padding-right:var(--ag-cell-horizontal-padding);text-overflow:ellipsis;transform:translateY(calc(var(--ag-spacing)*2));white-space:nowrap}",ac={tag:"div",children:[{tag:"div",ref:"eGhost",cls:"ag-dnd-ghost ag-unselectable",children:[{tag:"span",ref:"eIcon",cls:"ag-dnd-ghost-icon ag-shake-left-to-right"},{tag:"div",ref:"eLabel",cls:"ag-dnd-ghost-label"}]}]},dc=class extends N{constructor(){super(),this.dragSource=null,this.eIcon=x,this.eLabel=x,this.eGhost=x,this.registerCSS(lc)}postConstruct(){const e=t=>rc(t,this.beans,null);this.dropIconMap={pinned:e("columnMovePin"),hide:e("columnMoveHide"),move:e("columnMoveMove"),left:e("columnMoveLeft"),right:e("columnMoveRight"),group:e("columnMoveGroup"),aggregate:e("columnMoveValue"),pivot:e("columnMovePivot"),notAllowed:e("dropNotAllowed")}}init(e){this.dragSource=e.dragSource,this.setTemplate(ac),this.beans.environment.applyThemeClasses(this.eGhost)}destroy(){this.dragSource=null,super.destroy()}setIcon(e,t){const{eIcon:o,dragSource:s,dropIconMap:i,gos:n}=this;de(o);let r=null;e||(e=s!=null&&s.getDefaultIconName?s.getDefaultIconName():"notAllowed"),r=i[e],o.classList.toggle("ag-shake-left-to-right",t),!(r===i.hide&&n.get("suppressDragLeaveHidesColumns"))&&r&&o.appendChild(r)}setLabel(e){this.eLabel.textContent=e}},cc=".ag-label{white-space:nowrap}:where(.ag-ltr) .ag-label{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-label{margin-left:var(--ag-spacing)}:where(.ag-label-align-right) .ag-label{order:1}:where(.ag-ltr) :where(.ag-label-align-right) .ag-label{margin-left:var(--ag-spacing)}:where(.ag-rtl) :where(.ag-label-align-right) .ag-label{margin-right:var(--ag-spacing)}.ag-label-align-right>*{flex:none}.ag-label-align-top{align-items:flex-start;flex-direction:column;>*{align-self:stretch}}.ag-label-ellipsis{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.ag-label-align-top) .ag-label{margin-bottom:calc(var(--ag-spacing)*.5)}",hc=class extends N{constructor(e,t,o){super(t,o),this.labelSeparator="",this.labelAlignment="left",this.disabled=!1,this.label="",this.config=e||{},this.registerCSS(cc)}postConstruct(){this.addCss("ag-labeled"),this.eLabel.classList.add("ag-label");const{labelSeparator:e,label:t,labelWidth:o,labelAlignment:s,disabled:i}=this.config;i!=null&&this.setDisabled(i),e!=null&&this.setLabelSeparator(e),t!=null&&this.setLabel(t),o!=null&&this.setLabelWidth(o),this.setLabelAlignment(s||this.labelAlignment),this.refreshLabel()}refreshLabel(){const{label:e,eLabel:t}=this;de(t),typeof e=="string"?t.innerText=e+this.labelSeparator:e&&t.appendChild(e),e===""?(W(t,!1),Ft(t,"presentation")):(W(t,!0),Ft(t,null))}setLabelSeparator(e){return this.labelSeparator===e?this:(this.labelSeparator=e,this.label!=null&&this.refreshLabel(),this)}getLabelId(){const e=this.eLabel;return e.id=e.id||`ag-${this.getCompId()}-label`,e.id}getLabel(){return this.label}setLabel(e){return this.label===e?this:(this.label=e,this.refreshLabel(),this)}setLabelAlignment(e){const o=this.getGui().classList;return o.toggle("ag-label-align-left",e==="left"),o.toggle("ag-label-align-right",e==="right"),o.toggle("ag-label-align-top",e==="top"),this}setLabelEllipsis(e){return this.eLabel.classList.toggle("ag-label-ellipsis",e),this}setLabelWidth(e){return this.label==null?this:(Fi(this.eLabel,e),this)}setDisabled(e){e=!!e;const t=this.getGui();return wi(t,e),t.classList.toggle("ag-disabled",e),this.disabled=e,this}isDisabled(){return!!this.disabled}},uc=class extends hc{constructor(e,t,o,s){super(e,t,o),this.className=s}postConstruct(){super.postConstruct();const{width:e,value:t,onValueChange:o}=this.config;e!=null&&this.setWidth(e),t!=null&&this.setValue(t),o!=null&&this.onValueChange(o),this.className&&this.addCss(this.className),this.refreshAriaLabelledBy()}setLabel(e){return super.setLabel(e),this.refreshAriaLabelledBy(),this}refreshAriaLabelledBy(){const e=this.getAriaElement(),t=this.getLabelId(),o=this.getLabel();o==null||o==""||Cr(e)!==null?hs(e,""):hs(e,t??"")}setAriaLabel(e){return di(this.getAriaElement(),e),this.refreshAriaLabelledBy(),this}onValueChange(e){return this.addManagedListeners(this,{fieldValueChanged:()=>e(this.getValue())}),this}getWidth(){return this.getGui().clientWidth}setWidth(e){return me(this.getGui(),e),this}getPreviousValue(){return this.previousValue}getValue(){return this.value}setValue(e,t){return this.value===e?this:(this.previousValue=this.value,this.value=e,t||this.dispatchLocalEvent({type:"fieldValueChanged"}),this)}};function gc(e){return{tag:"div",role:"presentation",children:[{tag:"div",ref:"eLabel",cls:"ag-input-field-label"},{tag:"div",ref:"eWrapper",cls:"ag-wrapper ag-input-wrapper",role:"presentation",children:[{tag:e,ref:"eInput",cls:"ag-input-field-input"}]}]}}var pc=class extends uc{constructor(e,t,o="text",s="input"){super(e,(e==null?void 0:e.template)??gc(s),[],t),this.inputType=o,this.displayFieldTag=s,this.eLabel=x,this.eWrapper=x,this.eInput=x}postConstruct(){super.postConstruct(),this.setInputType();const{eLabel:e,eWrapper:t,eInput:o,className:s}=this;e.classList.add(`${s}-label`),t.classList.add(`${s}-input-wrapper`),o.classList.add(`${s}-input`),this.addCss("ag-input-field"),o.id=o.id||`ag-${this.getCompId()}-input`;const{inputName:i,inputWidth:n}=this.config;i!=null&&this.setInputName(i),n!=null&&this.setInputWidth(n),this.addInputListeners(),this.activateTabIndex([o])}addInputListeners(){this.addManagedElementListeners(this.eInput,{input:e=>this.setValue(e.target.value)})}setInputType(){this.displayFieldTag==="input"&&this.eInput.setAttribute("type",this.inputType)}getInputElement(){return this.eInput}setInputWidth(e){return Fi(this.eWrapper,e),this}setInputName(e){return this.getInputElement().setAttribute("name",e),this}getFocusableElement(){return this.eInput}setMaxLength(e){const t=this.eInput;return t.maxLength=e,this}setInputPlaceholder(e){return Le(this.eInput,"placeholder",e),this}setInputAriaLabel(e){return di(this.eInput,e),this.refreshAriaLabelledBy(),this}setDisabled(e){return wi(this.eInput,e),super.setDisabled(e)}setAutoComplete(e){if(e===!0)Le(this.eInput,"autocomplete",null);else{const t=typeof e=="string"?e:"off";Le(this.eInput,"autocomplete",t)}return this}},fc=class extends pc{constructor(e,t="ag-checkbox",o="checkbox"){super(e,t,o),this.labelAlignment="right",this.selected=!1,this.readOnly=!1,this.passive=!1}postConstruct(){super.postConstruct();const{readOnly:e,passive:t}=this.config;typeof e=="boolean"&&this.setReadOnly(e),typeof t=="boolean"&&this.setPassive(t)}addInputListeners(){this.addManagedElementListeners(this.eInput,{click:this.onCheckboxClick.bind(this)}),this.addManagedElementListeners(this.eLabel,{click:this.toggle.bind(this)})}getNextValue(){return this.selected===void 0?!0:!this.selected}setPassive(e){this.passive=e}isReadOnly(){return this.readOnly}setReadOnly(e){this.eWrapper.classList.toggle("ag-disabled",e),this.eInput.disabled=e,this.readOnly=e}setDisabled(e){return this.eWrapper.classList.toggle("ag-disabled",e),super.setDisabled(e)}toggle(){if(this.eInput.disabled)return;const e=this.isSelected(),t=this.getNextValue();this.passive?this.dispatchChange(t,e):this.setValue(t)}getValue(){return this.isSelected()}setValue(e,t){return this.refreshSelectedClass(e),this.setSelected(e,t),this}setName(e){const t=this.getInputElement();return t.name=e,this}isSelected(){return this.selected}setSelected(e,t){if(this.isSelected()===e)return;this.previousValue=this.isSelected(),e=this.selected=typeof e=="boolean"?e:void 0;const o=this.eInput;o.checked=e,o.indeterminate=e===void 0,t||this.dispatchChange(this.selected,this.previousValue)}dispatchChange(e,t,o){this.dispatchLocalEvent({type:"fieldValueChanged",selected:e,previousValue:t,event:o});const s=this.getInputElement();this.eventSvc.dispatchEvent({type:"checkboxChanged",id:s.id,name:s.name,selected:e,previousValue:t})}onCheckboxClick(e){if(this.passive||this.eInput.disabled)return;const t=this.isSelected(),o=this.selected=e.target.checked;this.refreshSelectedClass(o),this.dispatchChange(o,t,e)}refreshSelectedClass(e){const t=this.eWrapper.classList;t.toggle("ag-checked",e===!0),t.toggle("ag-indeterminate",e==null)}},Cc={selector:"AG-CHECKBOX",component:fc},mc=".ag-checkbox-cell{height:100%}",vc={tag:"div",cls:"ag-cell-wrapper ag-checkbox-cell",role:"presentation",children:[{tag:"ag-checkbox",ref:"eCheckbox",role:"presentation"}]},wc=class extends N{constructor(){super(vc,[Cc]),this.eCheckbox=x,this.registerCSS(mc)}init(e){this.refresh(e);const{eCheckbox:t,beans:o}=this,s=t.getInputElement();s.setAttribute("tabindex","-1"),ci(s,"polite"),this.addManagedListeners(s,{click:i=>{if(Tt(i),t.isDisabled())return;const n=t.getValue();this.onCheckboxChanged(n)},dblclick:i=>{Tt(i)}}),this.addManagedElementListeners(e.eGridCell,{keydown:i=>{if(i.key===m.SPACE&&!t.isDisabled()){e.eGridCell===z(o)&&t.toggle();const n=t.getValue();this.onCheckboxChanged(n),i.preventDefault()}}})}refresh(e){return this.params=e,this.updateCheckbox(e),!0}updateCheckbox(e){let t,o=!0;const{value:s,column:i,node:n}=e;if(n.group&&i)if(typeof s=="boolean")t=s;else{const h=i.getColId();h.startsWith(Ut)?t=s==null||s===""?void 0:s==="true":n.aggData&&n.aggData[h]!==void 0?t=s??void 0:o=!1}else t=s??void 0;const{eCheckbox:r}=this;if(!o){r.setDisplayed(!1);return}r.setValue(t);const l=e.disabled??!(i!=null&&i.isCellEditable(n));r.setDisabled(l);const a=this.getLocaleTextFunc(),d=Dr(a,t),c=l?d:`${a("ariaToggleCellValue","Press SPACE to toggle cell value")} (${d})`;r.setInputAriaLabel(c)}onCheckboxChanged(e){const{eventSvc:t,params:o}=this,{column:s,node:i,value:n}=o,r={column:s,colDef:s.getColDef(),data:i.data,node:i,rowIndex:i.rowIndex,rowPinned:i.rowPinned,value:n};t.dispatchEvent({type:"cellEditingStarted",...r});const l=i.setDataValue(s,e,"edit");t.dispatchEvent({type:"cellEditingStopped",...r,oldValue:n,newValue:e,valueChanged:l}),l||this.updateCheckbox(o)}};function Ls(e,t){return e.toString().padStart(t,"0")}function Ms(e,t=!0,o="-"){if(!e)return null;let s=[e.getFullYear(),e.getMonth()+1,e.getDate()].map(i=>Ls(i,2)).join(o);return t&&(s+=" "+[e.getHours(),e.getMinutes(),e.getSeconds()].map(i=>Ls(i,2)).join(":")),s}function As(e){if(!e)return null;const[t,o]=e.split(" ");if(!t)return null;const s=t.split("-").map(h=>parseInt(h,10));if(s.filter(h=>!isNaN(h)).length!==3)return null;const[i,n,r]=s,l=new Date(i,n-1,r);if(l.getFullYear()!==i||l.getMonth()!==n-1||l.getDate()!==r)return null;if(!o||o==="00:00:00")return l;const[a,d,c]=o.split(":").map(h=>parseInt(h,10));return a>=0&&a<24&&l.setHours(a),d>=0&&d<60&&l.setMinutes(d),c>=0&&c<60&&l.setSeconds(c),l}var uo={TAB_GUARD:"ag-tab-guard",TAB_GUARD_TOP:"ag-tab-guard-top",TAB_GUARD_BOTTOM:"ag-tab-guard-bottom"},yc=class extends v{constructor(e){super(),this.skipTabGuardFocus=!1,this.forcingFocusOut=!1,this.allowFocus=!1;const{comp:t,eTopGuard:o,eBottomGuard:s,focusTrapActive:i,forceFocusOutWhenTabGuardsAreEmpty:n,isFocusableContainer:r,focusInnerElement:l,onFocusIn:a,onFocusOut:d,shouldStopEventPropagation:c,onTabKeyDown:h,handleKeyDown:u,isEmpty:g,eFocusableElement:p}=e;this.comp=t,this.eTopGuard=o,this.eBottomGuard=s,this.providedFocusInnerElement=l,this.eFocusableElement=p,this.focusTrapActive=!!i,this.forceFocusOutWhenTabGuardsAreEmpty=!!n,this.isFocusableContainer=!!r,this.providedFocusIn=a,this.providedFocusOut=d,this.providedShouldStopEventPropagation=c,this.providedOnTabKeyDown=h,this.providedHandleKeyDown=u,this.providedIsEmpty=g}postConstruct(){this.createManagedBean(new $t(this.eFocusableElement,{shouldStopEventPropagation:()=>this.shouldStopEventPropagation(),onTabKeyDown:e=>this.onTabKeyDown(e),handleKeyDown:e=>this.handleKeyDown(e),onFocusIn:e=>this.onFocusIn(e),onFocusOut:e=>this.onFocusOut(e)})),this.activateTabGuards(),[this.eTopGuard,this.eBottomGuard].forEach(e=>this.addManagedElementListeners(e,{focus:this.onFocus.bind(this)}))}handleKeyDown(e){this.providedHandleKeyDown&&this.providedHandleKeyDown(e)}tabGuardsAreActive(){return!!this.eTopGuard&&this.eTopGuard.hasAttribute("tabIndex")}shouldStopEventPropagation(){return this.providedShouldStopEventPropagation?this.providedShouldStopEventPropagation():!1}activateTabGuards(){if(this.forcingFocusOut)return;const e=this.gos.get("tabIndex");this.comp.setTabIndex(e.toString())}deactivateTabGuards(){this.comp.setTabIndex()}onFocus(e){if(this.isFocusableContainer&&!this.eFocusableElement.contains(e.relatedTarget)&&!this.allowFocus){this.findNextElementOutsideAndFocus(e.target===this.eBottomGuard);return}if(this.skipTabGuardFocus){this.skipTabGuardFocus=!1;return}if(this.forceFocusOutWhenTabGuardsAreEmpty&&(this.providedIsEmpty?this.providedIsEmpty():Ae(this.eFocusableElement,".ag-tab-guard").length===0)){this.findNextElementOutsideAndFocus(e.target===this.eBottomGuard);return}if(this.isFocusableContainer&&this.eFocusableElement.contains(e.relatedTarget))return;const t=e.target===this.eBottomGuard;!(this.providedFocusInnerElement?this.providedFocusInnerElement(t):this.focusInnerElement(t))&&this.forceFocusOutWhenTabGuardsAreEmpty&&this.findNextElementOutsideAndFocus(e.target===this.eBottomGuard)}findNextElementOutsideAndFocus(e){var a;const t=oe(this.beans),o=Ae(t.body,null,!0),s=o.indexOf(e?this.eTopGuard:this.eBottomGuard);if(s===-1)return;let i,n;e?(i=0,n=s):(i=s+1,n=o.length);const r=o.slice(i,n),l=this.gos.get("tabIndex");r.sort((d,c)=>{const h=parseInt(d.getAttribute("tabindex")||"0"),u=parseInt(c.getAttribute("tabindex")||"0");return u===l?1:h===l?-1:h===0?1:u===0?-1:h-u}),(a=r[e?r.length-1:0])==null||a.focus()}onFocusIn(e){this.focusTrapActive||this.forcingFocusOut||(this.providedFocusIn&&this.providedFocusIn(e),this.isFocusableContainer||this.deactivateTabGuards())}onFocusOut(e){this.focusTrapActive||(this.providedFocusOut&&this.providedFocusOut(e),this.eFocusableElement.contains(e.relatedTarget)||this.activateTabGuards())}onTabKeyDown(e){if(this.providedOnTabKeyDown){this.providedOnTabKeyDown(e);return}if(this.focusTrapActive||e.defaultPrevented)return;const t=this.tabGuardsAreActive();t&&this.deactivateTabGuards();const o=this.getNextFocusableElement(e.shiftKey);t&&setTimeout(()=>this.activateTabGuards(),0),o&&(o.focus(),e.preventDefault())}focusInnerElement(e=!1){const t=Ae(this.eFocusableElement);return this.tabGuardsAreActive()&&(t.splice(0,1),t.splice(t.length-1,1)),t.length?(t[e?t.length-1:0].focus({preventScroll:!0}),!0):!1}getNextFocusableElement(e){return jt(this.beans,this.eFocusableElement,!1,e)}forceFocusOutOfContainer(e=!1){if(this.forcingFocusOut)return;const t=e?this.eTopGuard:this.eBottomGuard;this.activateTabGuards(),this.skipTabGuardFocus=!0,this.forcingFocusOut=!0,t.focus(),window.setTimeout(()=>{this.forcingFocusOut=!1,this.activateTabGuards()})}isTabGuard(e,t){return e===this.eTopGuard&&!t||e===this.eBottomGuard&&(t??!0)}setAllowFocus(e){this.allowFocus=e}},bc=class extends v{constructor(e){super(),this.comp=e}initialiseTabGuard(e){this.eTopGuard=this.createTabGuard("top"),this.eBottomGuard=this.createTabGuard("bottom"),this.eFocusableElement=this.comp.getFocusableElement();const{eTopGuard:t,eBottomGuard:o,eFocusableElement:s}=this,i=[t,o],n={setTabIndex:C=>{i.forEach(y=>C!=null?y.setAttribute("tabindex",C):y.removeAttribute("tabindex"))}};this.addTabGuards(t,o);const{focusTrapActive:r=!1,onFocusIn:l,onFocusOut:a,focusInnerElement:d,handleKeyDown:c,onTabKeyDown:h,shouldStopEventPropagation:u,isEmpty:g,forceFocusOutWhenTabGuardsAreEmpty:p,isFocusableContainer:f}=e;this.tabGuardCtrl=this.createManagedBean(new yc({comp:n,focusTrapActive:r,eTopGuard:t,eBottomGuard:o,eFocusableElement:s,onFocusIn:l,onFocusOut:a,focusInnerElement:d,handleKeyDown:c,onTabKeyDown:h,shouldStopEventPropagation:u,isEmpty:g,forceFocusOutWhenTabGuardsAreEmpty:p,isFocusableContainer:f}))}getTabGuardCtrl(){return this.tabGuardCtrl}createTabGuard(e){const t=oe(this.beans).createElement("div"),o=e==="top"?uo.TAB_GUARD_TOP:uo.TAB_GUARD_BOTTOM;return t.classList.add(uo.TAB_GUARD,o),Ft(t,"presentation"),t}addTabGuards(e,t){const o=this.eFocusableElement;o.insertAdjacentElement("afterbegin",e),o.insertAdjacentElement("beforeend",t)}removeAllChildrenExceptTabGuards(){const e=[this.eTopGuard,this.eBottomGuard];de(this.comp.getFocusableElement()),this.addTabGuards(...e)}forceFocusOutOfContainer(e=!1){this.tabGuardCtrl.forceFocusOutOfContainer(e)}appendChild(e,t,o){Oo(t)||(t=t.getGui());const{eBottomGuard:s}=this;s?s.insertAdjacentElement("beforebegin",t):e(t,o)}destroy(){const{eTopGuard:e,eBottomGuard:t}=this;Ce(e),Ce(t),super.destroy()}},Sc=class extends N{initialiseTabGuard(e){this.tabGuardFeature=this.createManagedBean(new bc(this)),this.tabGuardFeature.initialiseTabGuard(e)}forceFocusOutOfContainer(e=!1){this.tabGuardFeature.forceFocusOutOfContainer(e)}appendChild(e,t){this.tabGuardFeature.appendChild(super.appendChild.bind(this),e,t)}},Te=class{constructor(e,t=!1){this.DOUBLE_TAP_MILLIS=500,this.destroyFuncs=[],this.touching=!1,this.localEventService=new st,this.preventMouseClick=t;const o=this.onTouchStart.bind(this),s=this.onTouchMove.bind(this),i=this.onTouchEnd.bind(this);e.addEventListener("touchstart",o,{passive:!0}),e.addEventListener("touchmove",s,{passive:!0}),e.addEventListener("touchend",i,{passive:!1}),this.destroyFuncs.push(()=>{e.removeEventListener("touchstart",o,{passive:!0}),e.removeEventListener("touchmove",s,{passive:!0}),e.removeEventListener("touchend",i,{passive:!1})})}getActiveTouch(e){for(let t=0;t{const o=this.touchStart===t;if(this.touching&&o&&!this.moved){this.moved=!0;const s={type:"longTap",touchStart:this.touchStart,touchEvent:e};this.localEventService.dispatchEvent(s)}},500)}onTouchMove(e){if(!this.touching)return;const t=this.getActiveTouch(e.touches);if(!t)return;!vn(t,this.touchStart,4)&&(this.moved=!0)}onTouchEnd(e){if(this.touching){if(!this.moved){const t={type:"tap",touchStart:this.touchStart};this.localEventService.dispatchEvent(t),this.checkForDoubleTap()}this.preventMouseClick&&e.cancelable&&e.preventDefault(),this.touching=!1}}checkForDoubleTap(){const e=Date.now();if(this.lastTapTime&&this.lastTapTime>0)if(e-this.lastTapTime>this.DOUBLE_TAP_MILLIS){const o={type:"doubleTap",touchStart:this.touchStart};this.localEventService.dispatchEvent(o),this.lastTapTime=null}else this.lastTapTime=e;else this.lastTapTime=e}destroy(){this.destroyFuncs.forEach(e=>e())}},Mn=class{constructor(e="javascript"){this.frameworkName=e,this.renderingEngine="vanilla",this.batchFrameworkComps=!1,this.wrapIncoming=t=>t(),this.wrapOutgoing=t=>t(),this.baseDocLink=`${Ei}/${this.frameworkName}-data-grid`,Vr(this.baseDocLink)}setInterval(e,t){return new rn(o=>{o(window.setInterval(e,t))})}addEventListener(e,t,o,s){let i={};if(typeof s=="object"?i=s:typeof s=="boolean"&&(i={capture:s}),i.passive==null){const n=$i(t);n!=null&&(i.passive=n)}e.addEventListener(t,o,i)}frameworkComponent(e){return null}isFrameworkComponent(e){return!1}getDocLink(e){return`${this.baseDocLink}${e?`/${e}`:""}`}};function Rc(e){return{beanName:"gridApi",bean:e.getBean("apiFunctionSvc").api}}var Fc=["licenseManager","environment","eventSvc","gos","paginationAutoPageSizeSvc","apiFunctionSvc","gridApi","registry","agCompUtils","userCompFactory","rowContainerHeight","horizontalResizeSvc","localeSvc","pinnedRowModel","dragSvc","colGroupSvc","visibleCols","popupSvc","selectionSvc","colFilter","quickFilter","filterManager","colModel","headerNavigation","pageBounds","pagination","pageBoundsListener","rowSpanSvc","stickyRowSvc","rowRenderer","expressionSvc","alignedGridsSvc","navigation","valueCache","valueSvc","autoWidthCalc","filterMenuFactory","dragAndDrop","focusSvc","cellNavigation","cellStyles","scrollVisibleSvc","sortSvc","colHover","colAnimation","autoColSvc","selectionColSvc","changeDetectionSvc","animationFrameSvc","undoRedo","colDefFactory","rowStyleSvc","rowNodeBlockLoader","rowNodeSorter","ctrlsSvc","pinnedCols","dataTypeSvc","syncSvc","overlays","stateSvc","expansionSvc","apiEventSvc","ariaAnnounce","menuSvc","colMoves","colAutosize","colFlex","colResize","pivotColsSvc","valueColsSvc","rowGroupColsSvc","funcColsSvc","colNames","colViewport","pivotResultCols","showRowGroupCols","validation"],Hs=Object.fromEntries(Fc.map((e,t)=>[e,t]));function xc(e,t){const o=(e.beanName?Hs[e.beanName]:void 0)??Number.MAX_SAFE_INTEGER,s=(t.beanName?Hs[t.beanName]:void 0)??Number.MAX_SAFE_INTEGER;return o-s}function Dc(e,t){return(e==null?void 0:e.beanName)==="gridDestroySvc"?-1:(t==null?void 0:t.beanName)==="gridDestroySvc"?1:0}var Pc={tag:"div",cls:"ag-pinned-left-header",role:"rowgroup"},Ec={tag:"div",cls:"ag-pinned-right-header",role:"rowgroup"},Tc={tag:"div",cls:"ag-header-viewport",role:"presentation",attrs:{tabindex:"-1"},children:[{tag:"div",ref:"eCenterContainer",cls:"ag-header-container",role:"rowgroup"}]},go=class extends N{constructor(e){super(),this.eCenterContainer=x,this.headerRowComps={},this.rowCompsList=[],this.pinned=e}postConstruct(){this.selectAndSetTemplate();const e={setDisplayed:o=>this.setDisplayed(o),setCtrls:o=>this.setCtrls(o),setCenterWidth:o=>this.eCenterContainer.style.width=o,setViewportScrollLeft:o=>this.getGui().scrollLeft=o,setPinnedContainerWidth:o=>{const s=this.getGui();s.style.width=o,s.style.maxWidth=o,s.style.minWidth=o}};this.createManagedBean(new tc(this.pinned)).setComp(e,this.getGui())}selectAndSetTemplate(){const e=this.pinned=="left",t=this.pinned=="right",o=e?Pc:t?Ec:Tc;this.setTemplate(o),this.eRowContainer=this.eCenterContainer!==x?this.eCenterContainer:this.getGui()}destroy(){this.setCtrls([]),super.destroy()}destroyRowComp(e){this.destroyBean(e),this.eRowContainer.removeChild(e.getGui())}setCtrls(e){const t=this.headerRowComps;this.headerRowComps={},this.rowCompsList=[];let o;const s=i=>{const n=i.getGui();n.parentElement!=this.eRowContainer&&this.eRowContainer.appendChild(n),o&&Si(this.eRowContainer,n,o),o=n};e.forEach(i=>{const n=i.instanceId,r=t[n];delete t[n];const l=r||this.createBean(new Qd(i));this.headerRowComps[n]=l,this.rowCompsList.push(l),s(l)}),Object.values(t).forEach(i=>this.destroyRowComp(i))}},kc={tag:"div",cls:"ag-header",role:"presentation"},Ic=class extends N{constructor(){super(kc)}postConstruct(){const e={toggleCss:(s,i)=>this.toggleCss(s,i),setHeightAndMinHeight:s=>{this.getGui().style.height=s,this.getGui().style.minHeight=s}};this.createManagedBean(new Ud).setComp(e,this.getGui(),this.getFocusableElement());const o=s=>{this.createManagedBean(s),this.appendChild(s)};o(new go("left")),o(new go(null)),o(new go("right"))}},Lc={selector:"AG-HEADER-ROOT",component:Ic},Mc=class extends N{constructor(e,t,o,s,i){super(),this.cellCtrl=t,this.rendererVersion=0,this.editorVersion=0,this.beans=e,this.column=t.column,this.rowNode=t.rowNode,this.eRow=s;const n=q({tag:"div",role:t.getCellAriaRole(),attrs:{"comp-id":`${this.getCompId()}`,"col-id":t.column.colIdSanitised}});this.eCell=n;let r;t.isCellSpanning()?(r=q({tag:"div",cls:"ag-spanned-cell-wrapper",role:"presentation"}),r.appendChild(n),this.setTemplateFromElement(r)):this.setTemplateFromElement(n),this.cellCssManager=new nn(()=>n),this.forceWrapper=t.isForceWrapper(),this.refreshWrapper(!1);const l={toggleCss:(a,d)=>this.cellCssManager.toggleCss(a,d),setUserStyles:a=>it(n,a),getFocusableElement:()=>n,setIncludeSelection:a=>this.includeSelection=a,setIncludeRowDrag:a=>this.includeRowDrag=a,setIncludeDndSource:a=>this.includeDndSource=a,setRenderDetails:(a,d,c)=>this.setRenderDetails(a,d,c),setEditDetails:(a,d,c)=>this.setEditDetails(a,d,c),getCellEditor:()=>this.cellEditor||null,getCellRenderer:()=>this.cellRenderer||null,getParentOfValue:()=>this.getParentOfValue()};t.setComp(l,n,r,this.eCellWrapper,o,i,void 0)}getParentOfValue(){return this.eCellValue??this.eCellWrapper??this.eCell}setRenderDetails(e,t,o){if(this.cellEditor&&!this.cellEditorPopupWrapper)return;this.firstRender=this.firstRender==null;const i=this.refreshWrapper(!1);this.refreshEditStyles(!1),e?!(o||i)&&this.refreshCellRenderer(e)||(this.destroyRenderer(),this.createCellRendererInstance(e)):(this.destroyRenderer(),this.insertValueWithoutCellRenderer(t))}setEditDetails(e,t,o){e?this.createCellEditorInstance(e,t,o):this.destroyEditor()}removeControls(){const e=this.beans.context;this.checkboxSelectionComp=e.destroyBean(this.checkboxSelectionComp),this.dndSourceComp=e.destroyBean(this.dndSourceComp),this.rowDraggingComp=e.destroyBean(this.rowDraggingComp)}refreshWrapper(e){const t=this.includeRowDrag||this.includeDndSource||this.includeSelection,o=t||this.forceWrapper,s=o&&this.eCellWrapper==null;s&&(this.eCellWrapper=q({tag:"div",cls:"ag-cell-wrapper",role:"presentation"}),this.eCell.appendChild(this.eCellWrapper));const i=!o&&this.eCellWrapper!=null;i&&(Ce(this.eCellWrapper),this.eCellWrapper=void 0),this.cellCssManager.toggleCss("ag-cell-value",!o);const n=!e&&o,r=n&&this.eCellValue==null;r&&(this.eCellValue=q({tag:"span",cls:"ag-cell-value",role:"presentation"}),this.eCellWrapper.appendChild(this.eCellValue));const l=!n&&this.eCellValue!=null;l&&(Ce(this.eCellValue),this.eCellValue=void 0);const a=s||i||r||l;return a&&this.removeControls(),!e&&t&&this.addControls(),a}addControls(){const{cellCtrl:e,eCellWrapper:t,eCellValue:o,includeRowDrag:s,includeDndSource:i,includeSelection:n}=this,r=l=>{l&&t.insertBefore(l.getGui(),o)};s&&this.rowDraggingComp==null&&(this.rowDraggingComp=e.createRowDragComp(),r(this.rowDraggingComp)),i&&this.dndSourceComp==null&&(this.dndSourceComp=e.createDndSource(),r(this.dndSourceComp)),n&&this.checkboxSelectionComp==null&&(this.checkboxSelectionComp=e.createSelectionCheckbox(),r(this.checkboxSelectionComp))}createCellEditorInstance(e,t,o){const s=this.editorVersion,i=e.newAgStackInstance(),{params:n}=e;i.then(l=>this.afterCellEditorCreated(s,l,n,t,o)),V(this.cellEditor)&&n.cellStartedEdit&&this.cellCtrl.focusCell(!0)}insertValueWithoutCellRenderer(e){const t=this.getParentOfValue();de(t);const o=zt(e);o!=null&&(t.textContent=o)}destroyRenderer(){const{context:e}=this.beans;this.cellRenderer=e.destroyBean(this.cellRenderer),Ce(this.cellRendererGui),this.cellRendererGui=null,this.rendererVersion++}destroyEditor(){var o,s;const{context:e}=this.beans;(((o=this.cellEditorPopupWrapper)==null?void 0:o.getGui().contains(z(this.beans)))||this.cellCtrl.hasBrowserFocus())&&this.eCell.focus({preventScroll:!0}),(s=this.hideEditorPopup)==null||s.call(this),this.hideEditorPopup=void 0,this.cellEditor=e.destroyBean(this.cellEditor),this.cellEditorPopupWrapper=e.destroyBean(this.cellEditorPopupWrapper),Ce(this.cellEditorGui),this.cellEditorGui=null,this.editorVersion++}refreshCellRenderer(e){var o;if(((o=this.cellRenderer)==null?void 0:o.refresh)==null||this.cellRendererClass!==e.componentClass)return!1;const t=this.cellRenderer.refresh(e.params);return t===!0||t===void 0}createCellRendererInstance(e){const t=this.rendererVersion,{componentClass:o}=e,s=()=>{if(this.rendererVersion!==t||!this.isAlive())return;const r=e.newAgStackInstance(),l=this.afterCellRendererCreated.bind(this,t,o);r==null||r.then(l)},{animationFrameSvc:i}=this.beans;i!=null&&i.active&&this.firstRender?i.createTask(s,this.rowNode.rowIndex,"p2",e.componentFromFramework):s()}afterCellRendererCreated(e,t,o){if(!this.isAlive()||e!==this.rendererVersion){this.beans.context.destroyBean(o);return}this.cellRenderer=o,this.cellRendererClass=t;const i=o.getGui();if(this.cellRendererGui=i,i!=null){const n=this.getParentOfValue();de(n),n.appendChild(i)}}afterCellEditorCreated(e,t,o,s,i){var d;const n=e!==this.editorVersion,{context:r}=this.beans;if(n){r.destroyBean(t);return}if(t.isCancelBeforeStart&&t.isCancelBeforeStart()){r.destroyBean(t),this.cellCtrl.stopEditing(!0);return}if(!t.getGui){I(97,{colId:this.column.getId()}),r.destroyBean(t);return}this.cellEditor=t,this.cellEditorGui=t.getGui();const a=s||t.isPopup!==void 0&&t.isPopup();a?this.addPopupCellEditor(o,i):this.addInCellEditor(),this.refreshEditStyles(!0,a),(d=t.afterGuiAttached)==null||d.call(t),this.cellCtrl.cellEditorAttached()}refreshEditStyles(e,t){const{cellCssManager:o}=this;o.toggleCss("ag-cell-inline-editing",e&&!t),o.toggleCss("ag-cell-popup-editing",e&&!!t),o.toggleCss("ag-cell-not-inline-editing",!e||!!t),this.cellCtrl.setInlineEditingCss()}addInCellEditor(){const{eCell:e}=this;e.contains(z(this.beans))&&e.focus(),this.destroyRenderer(),this.refreshWrapper(!0),de(this.getParentOfValue()),this.cellEditorGui&&this.getParentOfValue().appendChild(this.cellEditorGui)}addPopupCellEditor(e,t){var C;const{gos:o,context:s,editSvc:i,popupSvc:n,localeSvc:r}=this.beans;o.get("editType")==="fullRow"&&I(98);const l=this.cellEditor;this.cellEditorPopupWrapper=s.createBean(i.createPopupEditorWrapper(e));const a=this.cellEditorPopupWrapper.getGui();this.cellEditorGui&&a.appendChild(this.cellEditorGui);const d=o.get("stopEditingWhenCellsLoseFocus"),c=t??((C=l.getPopupPosition)==null?void 0:C.call(l))??"over",h=o.get("enableRtl"),u={ePopup:a,column:this.column,rowNode:this.rowNode,type:"popupCellEditor",eventSource:this.eCell,position:c,alignSide:h?"right":"left",keepWithinBounds:!0},g=n.positionPopupByComponent.bind(n,u),p=ri(r),f=n.addPopup({modal:d,eChild:a,closeOnEsc:!0,closedCallback:()=>{this.cellCtrl.onPopupEditorClosed()},anchorToElement:this.eCell,positionCallback:g,ariaLabel:p("ariaLabelCellEditor","Cell Editor")});f&&(this.hideEditorPopup=f.hideFunc)}detach(){this.eRow.removeChild(this.getGui())}destroy(){this.cellCtrl.stopEditing(),this.destroyRenderer(),this.destroyEditor(),this.removeControls(),super.destroy()}},Ac=class extends N{constructor(e,t,o){super(),this.cellComps=new Map,this.beans=t,this.rowCtrl=e;const s=q({tag:"div",role:"row",attrs:{"comp-id":`${this.getCompId()}`}});this.setInitialStyle(s,o),this.setTemplateFromElement(s);const i=s.style;this.domOrder=this.rowCtrl.getDomOrder();const n={setDomOrder:r=>this.domOrder=r,setCellCtrls:r=>this.setCellCtrls(r),showFullWidth:r=>this.showFullWidth(r),getFullWidthCellRenderer:()=>this.fullWidthCellRenderer,toggleCss:(r,l)=>this.toggleCss(r,l),setUserStyles:r=>it(s,r),setTop:r=>i.top=r,setTransform:r=>i.transform=r,setRowIndex:r=>s.setAttribute("row-index",r),setRowId:r=>s.setAttribute("row-id",r),setRowBusinessKey:r=>s.setAttribute("row-business-key",r),refreshFullWidth:r=>{var l,a;return((a=(l=this.fullWidthCellRenderer)==null?void 0:l.refresh)==null?void 0:a.call(l,r()))??!1}};e.setComp(n,this.getGui(),o,void 0),this.addDestroyFunc(()=>{e.unsetComp(o)})}setInitialStyle(e,t){const o=this.rowCtrl.getInitialTransform(t);if(o)e.style.setProperty("transform",o);else{const s=this.rowCtrl.getInitialRowTop(t);s&&e.style.setProperty("top",s)}}showFullWidth(e){const t=s=>{if(this.isAlive()){const i=s.getGui();this.getGui().appendChild(i),this.rowCtrl.setupDetailRowAutoHeight(i),this.setFullWidthRowComp(s)}else this.beans.context.destroyBean(s)};e.newAgStackInstance().then(t)}setCellCtrls(e){const t=new Map(this.cellComps);for(const o of e){const s=o.instanceId;this.cellComps.has(s)?t.delete(s):this.newCellComp(o)}this.destroyCells(t),this.ensureDomOrder(e)}ensureDomOrder(e){if(!this.domOrder)return;const t=[];for(const o of e){const s=this.cellComps.get(o.instanceId);s&&t.push(s.getGui())}Ri(this.getGui(),t)}newCellComp(e){const t=new Mc(this.beans,e,this.rowCtrl.printLayout,this.getGui(),this.rowCtrl.editing);this.cellComps.set(e.instanceId,t),this.getGui().appendChild(t.getGui())}destroy(){super.destroy(),this.destroyCells(this.cellComps)}setFullWidthRowComp(e){this.fullWidthCellRenderer=e,this.addDestroyFunc(()=>{this.fullWidthCellRenderer=this.beans.context.destroyBean(this.fullWidthCellRenderer)})}destroyCells(e){for(const t of e.values()){if(!t)return;const o=t.cellCtrl.instanceId;if(this.cellComps.get(o)!==t)return;t.detach(),t.destroy(),this.cellComps.delete(o)}}};function Hc(e,t,o){const s=!!o.gos.get("enableCellSpan")&&!!t.getSpannedRowCtrls,i={tag:"div",ref:"eContainer",cls:Rt(e),role:"rowgroup"};if(t.type==="center"||s){const n={tag:"div",ref:"eSpannedContainer",cls:`ag-spanning-container ${yd(e)}`,role:"rowgroup"};return{tag:"div",ref:"eViewport",cls:`ag-viewport ${Sn(e)}`,role:"presentation",children:[i,s?n:null]}}return i}var Gc=class extends N{constructor(e){super(),this.eViewport=x,this.eContainer=x,this.eSpannedContainer=x,this.rowCompsNoSpan={},this.rowCompsWithSpan={},this.name=e==null?void 0:e.name,this.options=rt(this.name)}postConstruct(){this.setTemplate(Hc(this.name,this.options,this.beans));const e={setHorizontalScroll:o=>this.eViewport.scrollLeft=o,setViewportHeight:o=>this.eViewport.style.height=o,setRowCtrls:({rowCtrls:o})=>this.setRowCtrls(o),setSpannedRowCtrls:o=>this.setRowCtrls(o,!0),setDomOrder:o=>{this.domOrder=o},setContainerWidth:o=>{this.eContainer.style.width=o,this.eSpannedContainer&&(this.eSpannedContainer.style.width=o)},setOffsetTop:o=>{const s=`translateY(${o})`;this.eContainer.style.transform=s,this.eSpannedContainer&&(this.eSpannedContainer.style.transform=s)}};this.createManagedBean(new kd(this.name)).setComp(e,this.eContainer,this.eSpannedContainer,this.eViewport)}destroy(){this.setRowCtrls([]),this.setRowCtrls([],!0),super.destroy(),this.lastPlacedElement=null}setRowCtrls(e,t){const{beans:o,options:s}=this,i=t?this.eSpannedContainer:this.eContainer,n=t?{...this.rowCompsWithSpan}:{...this.rowCompsNoSpan},r={};t?this.rowCompsWithSpan=r:this.rowCompsNoSpan=r,this.lastPlacedElement=null;const l=[];for(const a of e){const d=a.instanceId,c=n[d];let h;if(c)h=c,delete n[d];else{if(!a.rowNode.displayed)continue;h=new Ac(a,o,s.type)}r[d]=h,l.push([h,!c])}this.removeOldRows(Object.values(n),i),this.addRowNodes(l,i)}addRowNodes(e,t){const{domOrder:o}=this;for(const[s,i]of e){const n=s.getGui();o?this.ensureDomOrder(n,t):i&&t.appendChild(n)}}removeOldRows(e,t){for(const o of e)t.removeChild(o.getGui()),o.destroy()}ensureDomOrder(e,t){Si(t,e,this.lastPlacedElement),this.lastPlacedElement=e}},Bc={selector:"AG-ROW-CONTAINER",component:Gc};function ze(e,t){return t.map(o=>{const s=`e${o[0].toUpperCase()+o.substring(1)}RowContainer`;return e[s]={name:o},{tag:"ag-row-container",ref:s,attrs:{name:o}}})}function Oc(e){const t={},o={tag:"div",ref:"eGridRoot",cls:"ag-root ag-unselectable",children:[{tag:"ag-header-root"},{tag:"div",ref:"eTop",cls:"ag-floating-top",role:"presentation",children:ze(t,["topLeft","topCenter","topRight","topFullWidth"])},{tag:"div",ref:"eBody",cls:"ag-body",role:"presentation",children:[{tag:"div",ref:"eBodyViewport",cls:"ag-body-viewport",role:"presentation",children:ze(t,["left","center","right","fullWidth"])},{tag:"ag-fake-vertical-scroll"}]},{tag:"div",ref:"eStickyTop",cls:"ag-sticky-top",role:"presentation",children:ze(t,["stickyTopLeft","stickyTopCenter","stickyTopRight","stickyTopFullWidth"])},{tag:"div",ref:"eStickyBottom",cls:"ag-sticky-bottom",role:"presentation",children:ze(t,["stickyBottomLeft","stickyBottomCenter","stickyBottomRight","stickyBottomFullWidth"])},{tag:"div",ref:"eBottom",cls:"ag-floating-bottom",role:"presentation",children:ze(t,["bottomLeft","bottomCenter","bottomRight","bottomFullWidth"])},{tag:"ag-fake-horizontal-scroll"},e?{tag:"ag-overlay-wrapper"}:null]};return{paramsMap:t,elementParams:o}}var Wc=class extends N{constructor(){super(...arguments),this.eGridRoot=x,this.eBodyViewport=x,this.eStickyTop=x,this.eStickyBottom=x,this.eTop=x,this.eBottom=x,this.eBody=x}postConstruct(){const{overlays:e,rangeSvc:t}=this.beans,o=e==null?void 0:e.getOverlayWrapperSelector(),{paramsMap:s,elementParams:i}=Oc(!!o);this.setTemplate(i,[...o?[o]:[],Gd,Wd,Lc,Bc],s);const n=(l,a)=>{const d=`${l}px`;a.style.minHeight=d,a.style.height=d},r={setRowAnimationCssOnBodyViewport:(l,a)=>this.setRowAnimationCssOnBodyViewport(l,a),setColumnCount:l=>Sr(this.getGui(),l),setRowCount:l=>br(this.getGui(),l),setTopHeight:l=>n(l,this.eTop),setBottomHeight:l=>n(l,this.eBottom),setTopInvisible:l=>this.eTop.classList.toggle("ag-invisible",l),setBottomInvisible:l=>this.eBottom.classList.toggle("ag-invisible",l),setStickyTopHeight:l=>this.eStickyTop.style.height=l,setStickyTopTop:l=>this.eStickyTop.style.top=l,setStickyTopWidth:l=>this.eStickyTop.style.width=l,setStickyBottomHeight:l=>{this.eStickyBottom.style.height=l,this.eStickyBottom.classList.toggle("ag-invisible",l==="0px")},setStickyBottomBottom:l=>this.eStickyBottom.style.bottom=l,setStickyBottomWidth:l=>this.eStickyBottom.style.width=l,setColumnMovingCss:(l,a)=>this.toggleCss(l,a),updateLayoutClasses:(l,a)=>{const d=[this.eBodyViewport.classList,this.eBody.classList];for(const c of d)c.toggle(ee.AUTO_HEIGHT,a.autoHeight),c.toggle(ee.NORMAL,a.normal),c.toggle(ee.PRINT,a.print);this.toggleCss(ee.AUTO_HEIGHT,a.autoHeight),this.toggleCss(ee.NORMAL,a.normal),this.toggleCss(ee.PRINT,a.print)},setAlwaysVerticalScrollClass:(l,a)=>this.eBodyViewport.classList.toggle(xn,a),registerBodyViewportResizeListener:l=>{const a=nt(this.beans,this.eBodyViewport,l);this.addDestroyFunc(()=>a())},setPinnedTopBottomOverflowY:l=>this.eTop.style.overflowY=this.eBottom.style.overflowY=l,setCellSelectableCss:(l,a)=>{[this.eTop,this.eBodyViewport,this.eBottom].forEach(d=>d.classList.toggle(l,a))},setBodyViewportWidth:l=>this.eBodyViewport.style.width=l,setGridRootRole:l=>Ft(this.eGridRoot,l)};this.ctrl=this.createManagedBean(new Md),this.ctrl.setComp(r,this.getGui(),this.eBodyViewport,this.eTop,this.eBottom,this.eStickyTop,this.eStickyBottom),(t&&Oe(this.gos)||sl(this.gos))&&yr(this.getGui(),!0)}setRowAnimationCssOnBodyViewport(e,t){const o=this.eBodyViewport.classList;o.toggle("ag-row-animation",t),o.toggle("ag-row-no-animation",!t)}},Vc={selector:"AG-GRID-BODY",component:Wc},Nc=class extends v{constructor(){super(...arguments),this.additionalFocusableContainers=new Set}setComp(e,t,o){this.view=e,this.eGridHostDiv=t,this.eGui=o,this.eGui.setAttribute("grid-id",this.beans.context.getGridId());const{dragAndDrop:s,ctrlsSvc:i}=this.beans;s==null||s.registerGridDropTarget(()=>this.eGui,this),fn(this.gos,t),this.createManagedBean(new Ko(this.view)),this.view.setRtlClass(this.gos.get("enableRtl")?"ag-rtl":"ag-ltr");const n=nt(this.beans,this.eGridHostDiv,this.onGridSizeChanged.bind(this));this.addDestroyFunc(()=>n()),i.register("gridCtrl",this)}isDetailGrid(){var t;const e=Ha(this.getGui());return((t=e==null?void 0:e.getAttribute("row-id"))==null?void 0:t.startsWith("detail"))||!1}getOptionalSelectors(){var t,o,s,i;const e=this.beans;return{paginationSelector:(t=e.pagination)==null?void 0:t.getPaginationSelector(),gridHeaderDropZonesSelector:e.registry.getSelector("AG-GRID-HEADER-DROP-ZONES"),sideBarSelector:(o=e.sideBar)==null?void 0:o.getSelector(),statusBarSelector:(s=e.registry)==null?void 0:s.getSelector("AG-STATUS-BAR"),watermarkSelector:(i=e.licenseManager)==null?void 0:i.getWatermarkSelector()}}onGridSizeChanged(){this.eventSvc.dispatchEvent({type:"gridSizeChanged",clientWidth:this.eGridHostDiv.clientWidth,clientHeight:this.eGridHostDiv.clientHeight})}destroyGridUi(){this.view.destroyGridUi()}getGui(){return this.eGui}setResizeCursor(e){this.view.setCursor(e?"ew-resize":null)}disableUserSelect(e){this.view.setUserSelect(e?"none":null)}focusNextInnerContainer(e){const t=this.getFocusableContainers(),{indexWithFocus:o,nextIndex:s}=this.getNextFocusableIndex(t,e);if(s<0||s>=t.length)return!1;if(s===0){if(o>0){const{visibleCols:i,focusSvc:n}=this.beans,r=i.allCols,l=H(r);if(n.focusGridView({column:l,backwards:!0}))return!0}return!1}return this.focusContainer(t[s],e)}focusInnerElement(e){const t=this.gos.getCallback("focusGridInnerElement");if(t&&t({fromBottom:!!e}))return!0;const o=this.getFocusableContainers(),{focusSvc:s,visibleCols:i}=this.beans,n=i.allCols;if(e){if(o.length>1)return this.focusContainer(H(o),e);const r=H(n);if(s.focusGridView({column:r,backwards:e}))return!0}if(this.gos.get("headerHeight")===0||Fe(this.beans)){if(s.focusGridView({column:n[0],backwards:e}))return!0;for(let r=1;r=t.length)return;const i=t[o];(n=i.setAllowFocus)==null||n.call(i,!0),setTimeout(()=>{var r;(r=i.setAllowFocus)==null||r.call(i,!1)})}isFocusable(){var t,o;const e=this.beans;return!Uo(e)||!Fe(e)||!!((o=(t=e.sideBar)==null?void 0:t.comp)!=null&&o.isDisplayed())}getNextFocusableIndex(e,t){const o=z(this.beans),s=e.findIndex(n=>n.getGui().contains(o)),i=s+(t?-1:1);return{indexWithFocus:s,nextIndex:i}}focusContainer(e,t){var s,i;(s=e.setAllowFocus)==null||s.call(e,!0);const o=Gt(e.getGui(),t,!1,!0);return(i=e.setAllowFocus)==null||i.call(e,!1),o}getFocusableContainers(){return[...this.view.getFocusableContainers(),...this.additionalFocusableContainers]}destroy(){this.additionalFocusableContainers.clear(),super.destroy()}},zc=class extends Sc{constructor(e){super(),this.gridBody=x,this.sideBar=x,this.pagination=x,this.rootWrapperBody=x,this.eGridDiv=e}postConstruct(){const e={destroyGridUi:()=>this.destroyBean(this),setRtlClass:n=>this.addCss(n),forceFocusOutOfContainer:this.forceFocusOutOfContainer.bind(this),updateLayoutClasses:this.updateLayoutClasses.bind(this),getFocusableContainers:this.getFocusableContainers.bind(this),setUserSelect:n=>{this.getGui().style.userSelect=n??"",this.getGui().style.webkitUserSelect=n??""},setCursor:n=>{this.getGui().style.cursor=n??""}},t=this.createManagedBean(new Nc),o=t.getOptionalSelectors(),s=this.createTemplate(o),i=[Vc,...Object.values(o).filter(n=>!!n)];this.setTemplate(s,i),t.setComp(e,this.eGridDiv,this.getGui()),this.insertGridIntoDom(),this.initialiseTabGuard({onTabKeyDown:()=>{},focusInnerElement:n=>t.focusInnerElement(n),forceFocusOutWhenTabGuardsAreEmpty:!0,isEmpty:()=>!t.isFocusable()})}insertGridIntoDom(){const e=this.getGui();this.eGridDiv.appendChild(e),this.addDestroyFunc(()=>{this.eGridDiv.removeChild(e),Xe(this.gos,"Grid removed from DOM")})}updateLayoutClasses(e,t){const o=this.rootWrapperBody.classList,{AUTO_HEIGHT:s,NORMAL:i,PRINT:n}=ee,{autoHeight:r,normal:l,print:a}=t;o.toggle(s,r),o.toggle(i,l),o.toggle(n,a),this.toggleCss(s,r),this.toggleCss(i,l),this.toggleCss(n,a)}createTemplate(e){const t=e.gridHeaderDropZonesSelector?{tag:"ag-grid-header-drop-zones"}:null,o=e.sideBarSelector?{tag:"ag-side-bar",ref:"sideBar"}:null,s=e.statusBarSelector?{tag:"ag-status-bar"}:null,i=e.watermarkSelector?{tag:"ag-watermark"}:null,n=e.paginationSelector?{tag:"ag-pagination",ref:"pagination"}:null;return{tag:"div",cls:"ag-root-wrapper",role:"presentation",children:[t,{tag:"div",ref:"rootWrapperBody",cls:"ag-root-wrapper-body",role:"presentation",children:[{tag:"ag-grid-body",ref:"gridBody"},o]},s,n,i]}}getFocusableElement(){return this.rootWrapperBody}forceFocusOutOfContainer(e=!1){var t;if(!e&&((t=this.pagination)!=null&&t.isDisplayed())){this.pagination.forceFocusOutOfContainer(e);return}super.forceFocusOutOfContainer(e)}getFocusableContainers(){const e=[this.gridBody];return[this.sideBar,this.pagination].forEach(t=>{t&&e.push(t)}),e.filter(t=>De(t.getGui()))}},E=(e,t)=>{for(const o of Object.keys(t))t[o]=e;return t},Gs={dispatchEvent:"CommunityCore",...E("CommunityCore",{destroy:0,getGridId:0,getGridOption:0,isDestroyed:0,setGridOption:0,updateGridOptions:0,isModuleRegistered:0}),...E("GridState",{getState:0}),...E("SharedRowSelection",{setNodesSelected:0,selectAll:0,deselectAll:0,selectAllFiltered:0,deselectAllFiltered:0,selectAllOnCurrentPage:0,deselectAllOnCurrentPage:0,getSelectedNodes:0,getSelectedRows:0}),...E("RowApi",{redrawRows:0,setRowNodeExpanded:0,getRowNode:0,addRenderedRowListener:0,getRenderedNodes:0,forEachNode:0,getFirstDisplayedRowIndex:0,getLastDisplayedRowIndex:0,getDisplayedRowAtIndex:0,getDisplayedRowCount:0}),...E("ScrollApi",{getVerticalPixelRange:0,getHorizontalPixelRange:0,ensureColumnVisible:0,ensureIndexVisible:0,ensureNodeVisible:0}),...E("KeyboardNavigation",{getFocusedCell:0,clearFocusedCell:0,setFocusedCell:0,tabToNextCell:0,tabToPreviousCell:0,setFocusedHeader:0}),...E("EventApi",{addEventListener:0,addGlobalListener:0,removeEventListener:0,removeGlobalListener:0}),...E("ValueCache",{expireValueCache:0}),...E("CellApi",{getCellValue:0}),...E("SharedMenu",{showColumnMenu:0,hidePopupMenu:0}),...E("Sort",{onSortChanged:0}),...E("PinnedRow",{getPinnedTopRowCount:0,getPinnedBottomRowCount:0,getPinnedTopRow:0,getPinnedBottomRow:0,forEachPinnedRow:0}),...E("Overlay",{showLoadingOverlay:0,showNoRowsOverlay:0,hideOverlay:0}),...E("RenderApi",{setGridAriaProperty:0,refreshCells:0,refreshHeader:0,isAnimationFrameQueueEmpty:0,flushAllAnimationFrames:0,getSizesForCurrentTheme:0,getCellRendererInstances:0}),...E("HighlightChanges",{flashCells:0}),...E("RowDrag",{addRowDropZone:0,removeRowDropZone:0,getRowDropZoneParams:0}),...E("ColumnApi",{getColumnDefs:0,getColumnDef:0,getDisplayNameForColumn:0,getColumn:0,getColumns:0,applyColumnState:0,getColumnState:0,resetColumnState:0,isPinning:0,isPinningLeft:0,isPinningRight:0,getDisplayedColAfter:0,getDisplayedColBefore:0,setColumnsVisible:0,setColumnsPinned:0,getAllGridColumns:0,getDisplayedLeftColumns:0,getDisplayedCenterColumns:0,getDisplayedRightColumns:0,getAllDisplayedColumns:0,getAllDisplayedVirtualColumns:0}),...E("ColumnAutoSize",{sizeColumnsToFit:0,autoSizeColumns:0,autoSizeAllColumns:0}),...E("ColumnGroup",{setColumnGroupOpened:0,getColumnGroup:0,getProvidedColumnGroup:0,getDisplayNameForColumnGroup:0,getColumnGroupState:0,setColumnGroupState:0,resetColumnGroupState:0,getLeftDisplayedColumnGroups:0,getCenterDisplayedColumnGroups:0,getRightDisplayedColumnGroups:0,getAllDisplayedColumnGroups:0}),...E("ColumnMove",{moveColumnByIndex:0,moveColumns:0}),...E("ColumnResize",{setColumnWidths:0}),...E("ColumnHover",{isColumnHovered:0}),...E("EditCore",{getCellEditorInstances:0,getEditingCells:0,stopEditing:0,startEditingCell:0}),...E("UndoRedoEdit",{undoCellEditing:0,redoCellEditing:0,getCurrentUndoSize:0,getCurrentRedoSize:0}),...E("FilterCore",{isAnyFilterPresent:0,onFilterChanged:0}),...E("ColumnFilter",{isColumnFilterPresent:0,getColumnFilterInstance:0,destroyFilter:0,setFilterModel:0,getFilterModel:0,getColumnFilterModel:0,setColumnFilterModel:0,showColumnFilter:0}),...E("QuickFilter",{isQuickFilterPresent:0,getQuickFilter:0,resetQuickFilter:0}),...E("Find",{findGetActiveMatch:0,findGetTotalMatches:0,findGoTo:0,findNext:0,findPrevious:0,findGetNumMatches:0,findGetParts:0,findClearActive:0,findRefresh:0}),...E("Pagination",{paginationIsLastPageFound:0,paginationGetPageSize:0,paginationGetCurrentPage:0,paginationGetTotalPages:0,paginationGetRowCount:0,paginationGoToNextPage:0,paginationGoToPreviousPage:0,paginationGoToFirstPage:0,paginationGoToLastPage:0,paginationGoToPage:0}),...E("CsrmSsrmSharedApi",{expandAll:0,collapseAll:0,onRowHeightChanged:0}),...E("SsrmInfiniteSharedApi",{setRowCount:0,getCacheBlockState:0,isLastRowIndexKnown:0}),...E("ClientSideRowModelApi",{onGroupExpandedOrCollapsed:0,refreshClientSideRowModel:0,isRowDataEmpty:0,forEachLeafNode:0,forEachNodeAfterFilter:0,forEachNodeAfterFilterAndSort:0,resetRowHeights:0,applyTransaction:0,applyTransactionAsync:0,flushAsyncTransactions:0,getBestCostNodeSelection:0}),...E("CsvExport",{getDataAsCsv:0,exportDataAsCsv:0}),...E("InfiniteRowModel",{refreshInfiniteCache:0,purgeInfiniteCache:0,getInfiniteRowCount:0}),...E("AdvancedFilter",{getAdvancedFilterModel:0,setAdvancedFilterModel:0,showAdvancedFilterBuilder:0,hideAdvancedFilterBuilder:0}),...E("IntegratedCharts",{getChartModels:0,getChartRef:0,getChartImageDataURL:0,downloadChart:0,openChartToolPanel:0,closeChartToolPanel:0,createRangeChart:0,createPivotChart:0,createCrossFilterChart:0,updateChart:0,restoreChart:0}),...E("Clipboard",{copyToClipboard:0,cutToClipboard:0,copySelectedRowsToClipboard:0,copySelectedRangeToClipboard:0,copySelectedRangeDown:0,pasteFromClipboard:0}),...E("ExcelExport",{getDataAsExcel:0,exportDataAsExcel:0,getSheetDataForExcel:0,getMultipleSheetsAsExcel:0,exportMultipleSheetsAsExcel:0}),...E("SharedMasterDetail",{addDetailGridInfo:0,removeDetailGridInfo:0,getDetailGridInfo:0,forEachDetailGridInfo:0}),...E("ContextMenu",{showContextMenu:0}),...E("ColumnMenu",{showColumnChooser:0,hideColumnChooser:0}),...E("CellSelection",{getCellRanges:0,addCellRange:0,clearRangeSelection:0,clearCellSelection:0}),...E("SharedRowGrouping",{setRowGroupColumns:0,removeRowGroupColumns:0,addRowGroupColumns:0,getRowGroupColumns:0,moveRowGroupColumn:0}),...E("SharedAggregation",{addAggFuncs:0,clearAggFuncs:0,setColumnAggFunc:0}),...E("SharedPivot",{isPivotMode:0,getPivotResultColumn:0,setValueColumns:0,getValueColumns:0,removeValueColumns:0,addValueColumns:0,setPivotColumns:0,removePivotColumns:0,addPivotColumns:0,getPivotColumns:0,setPivotResultColumns:0,getPivotResultColumns:0}),...E("ServerSideRowModelApi",{getServerSideSelectionState:0,setServerSideSelectionState:0,applyServerSideTransaction:0,applyServerSideTransactionAsync:0,applyServerSideRowData:0,retryServerSideLoads:0,flushServerSideAsyncTransactions:0,refreshServerSide:0,getServerSideGroupLevelState:0}),...E("SideBar",{isSideBarVisible:0,setSideBarVisible:0,setSideBarPosition:0,openToolPanel:0,closeToolPanel:0,getOpenedToolPanel:0,refreshToolPanel:0,isToolPanelShowing:0,getToolPanelInstance:0,getSideBar:0}),...E("StatusBar",{getStatusPanel:0})},po={isDestroyed:()=>!0,destroy(){},preConstruct(){},postConstruct(){},preWireBeans(){},wireBeans(){}},_c=(e,t)=>e.eventSvc.dispatchEvent(t),An=class{};Reflect.defineProperty(An,"name",{value:"GridApi"});var Uc=class extends v{constructor(){super(),this.beanName="apiFunctionSvc",this.api=new An,this.fns={...po,dispatchEvent:_c},this.preDestroyLink="";const{api:e}=this;for(const t of Object.keys(Gs))e[t]=this.makeApi(t)[t]}postConstruct(){this.preDestroyLink=this.beans.frameworkOverrides.getDocLink("grid-lifecycle/#grid-pre-destroyed")}addFunction(e,t){var i;const{fns:o,beans:s}=this;o!==po&&(o[e]=((i=s==null?void 0:s.validation)==null?void 0:i.validateApiFunction(e,t))??t)}makeApi(e){return{[e]:(...t)=>{const{beans:o,fns:{[e]:s}}=this;return s?s(o,...t):this.apiNotFound(e)}}}apiNotFound(e){const{beans:t,gos:o,preDestroyLink:s}=this;if(!t)I(26,{fnName:e,preDestroyLink:s});else{const i=Gs[e];o.assertModuleRegistered(i,`api.${e}`)&&I(27,{fnName:e,module:i})}}destroy(){super.destroy(),this.fns=po,this.beans=null}};function Kc(e){return e.context.getGridId()}function jc(e){e.gridDestroySvc.destroy()}function $c(e){return e.gridDestroySvc.destroyCalled}function qc(e,t){return e.gos.get(t)}function Zc(e,t,o){Hn(e,{[t]:o})}function Hn(e,t){e.gos.updateGridOptions({options:t})}function Yc(e,t){const o=t.replace(/Module$/,"");return e.gos.isModuleRegistered(o)}var Qc=class extends v{constructor(){super(...arguments),this.beanName="horizontalResizeSvc"}addResizeBar(e){const t={dragStartPixels:e.dragStartPixels||0,eElement:e.eResizeBar,onDragStart:this.onDragStart.bind(this,e),onDragStop:this.onDragStop.bind(this,e),onDragging:this.onDragging.bind(this,e),onDragCancel:this.onDragStop.bind(this,e),includeTouch:!0,stopPropagationForTouch:!0},{dragSvc:o}=this.beans;return o.addDragSource(t),()=>o.removeDragSource(t)}onDragStart(e,t){this.dragStartX=t.clientX,this.setResizeIcons();const o=t instanceof MouseEvent&&t.shiftKey===!0;e.onResizeStart(o)}setResizeIcons(){const e=this.beans.ctrlsSvc.get("gridCtrl");e.setResizeCursor(!0),e.disableUserSelect(!0)}onDragStop(e){e.onResizeEnd(this.resizeAmount),this.resetIcons()}resetIcons(){const e=this.beans.ctrlsSvc.get("gridCtrl");e.setResizeCursor(!1),e.disableUserSelect(!1)}onDragging(e,t){this.resizeAmount=t.clientX-this.dragStartX,e.onResizing(this.resizeAmount)}},Gn={moduleName:"Drag",version:G,beans:[id]},Xc={moduleName:"SharedDragAndDrop",version:G,beans:[Qa],dependsOn:[Gn],userComponents:{agDragAndDropImage:dc},icons:{columnMovePin:"pin",columnMoveHide:"eye-slash",columnMoveMove:"arrows",columnMoveLeft:"left",columnMoveRight:"right",columnMoveGroup:"group",columnMoveValue:"aggregation",columnMovePivot:"pivot",dropNotAllowed:"not-allowed",rowDrag:"grip"}},Jc={moduleName:"HorizontalResize",version:G,beans:[Qc],dependsOn:[Gn]},eh=":where(.ag-ltr) :where(.ag-column-moving){.ag-cell,.ag-header-cell,.ag-spanned-cell-wrapper{transition:left .2s}.ag-header-group-cell{transition:left .2s,width .2s}}:where(.ag-rtl) :where(.ag-column-moving){.ag-cell,.ag-header-cell,.ag-spanned-cell-wrapper{transition:right .2s}.ag-header-group-cell{transition:right .2s,width .2s}}",th=class extends v{constructor(){super(...arguments),this.beanName="colAnimation",this.executeNextFuncs=[],this.executeLaterFuncs=[],this.active=!1,this.activeNext=!1,this.suppressAnimation=!1,this.animationThreadCount=0}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>this.gridBodyCtrl=e.gridBodyCtrl)}isActive(){return this.active&&!this.suppressAnimation}setSuppressAnimation(e){this.suppressAnimation=e}start(){if(this.active)return;const{gos:e}=this;e.get("suppressColumnMoveAnimation")||e.get("enableRtl")||(this.ensureAnimationCssClassPresent(),this.active=!0,this.activeNext=!0)}finish(){this.active&&this.flush(()=>this.activeNext=!1,()=>this.active=!1)}executeNextVMTurn(e){this.activeNext?this.executeNextFuncs.push(e):e()}executeLaterVMTurn(e){this.active?this.executeLaterFuncs.push(e):e()}ensureAnimationCssClassPresent(){this.animationThreadCount++;const e=this.animationThreadCount,{gridBodyCtrl:t}=this;t.setColumnMovingCss(!0),this.executeLaterFuncs.push(()=>{this.animationThreadCount===e&&t.setColumnMovingCss(!1)})}flush(e,t){const{executeNextFuncs:o,executeLaterFuncs:s}=this;if(o.length===0&&s.length===0){e(),t();return}const i=n=>{for(;n.length;){const r=n.pop();r&&r()}};this.beans.frameworkOverrides.wrapIncoming(()=>{window.setTimeout(()=>{e(),i(o)},0),window.setTimeout(()=>{t(),i(s)},200)})}};function oh(e,t,o){var s;(s=e.colMoves)==null||s.moveColumnByIndex(t,o,"api")}function sh(e,t,o){var s;(s=e.colMoves)==null||s.moveColumns(t,o,"api")}var ih=class extends v{constructor(e){super(),this.pinned=e,this.columnsToAggregate=[],this.columnsToGroup=[],this.columnsToPivot=[]}onDragEnter(e){if(this.clearColumnsList(),this.gos.get("functionsReadOnly"))return;const t=e.dragItem.columns;t&&t.forEach(o=>{o.isPrimary()&&(o.isAnyFunctionActive()||(o.isAllowValue()?this.columnsToAggregate.push(o):o.isAllowRowGroup()?this.columnsToGroup.push(o):o.isAllowPivot()&&this.columnsToPivot.push(o)))})}getIconName(){return this.columnsToAggregate.length+this.columnsToGroup.length+this.columnsToPivot.length>0?this.pinned?"pinned":"move":null}onDragLeave(e){this.clearColumnsList()}clearColumnsList(){this.columnsToAggregate.length=0,this.columnsToGroup.length=0,this.columnsToPivot.length=0}onDragging(e){}onDragStop(e){const{valueColsSvc:t,rowGroupColsSvc:o,pivotColsSvc:s}=this.beans;this.columnsToAggregate.length>0&&(t==null||t.addColumns(this.columnsToAggregate,"toolPanelDragAndDrop")),this.columnsToGroup.length>0&&(o==null||o.addColumns(this.columnsToGroup,"toolPanelDragAndDrop")),this.columnsToPivot.length>0&&(s==null||s.addColumns(this.columnsToPivot,"toolPanelDragAndDrop"))}onDragCancel(){this.clearColumnsList()}};function nh(e,t){!t||t.length<=1||t.filter(s=>e.indexOf(s)<0).length>0||t.sort((s,i)=>{const n=e.indexOf(s),r=e.indexOf(i);return n-r})}function Bn(e){const{isFromHeader:t,fromLeft:o,xPosition:s,fromEnter:i,fakeEvent:n,pinned:r,gos:l,colModel:a,colMoves:d,visibleCols:c}=e;let{allMovingColumns:h}=e;if(t){const D=[];h.forEach(b=>{var F;let P=null,L=b.getParent();for(;L!=null&&L.getDisplayedLeafColumns().length===1;)P=L,L=L.getParent();P!=null?(!!((F=P.getColGroupDef())!=null&&F.marryChildren)?P.getProvidedColumnGroup().getLeafColumns():P.getLeafColumns()).forEach(B=>{D.includes(B)||D.push(B)}):D.includes(b)||D.push(b)}),h=D}const u=h.slice();nh(a.getCols(),u);const g=dh({movingCols:u,draggingRight:o,xPosition:s,pinned:r,gos:l,colModel:a,visibleCols:c}),p=rh(u,a);if(g.length===0)return;const f=g[0];let C=p!==null&&!i;if(t&&(C=p!==null),C&&!n&&(!o&&f>=p||o&&f<=p))return;const y=c.allCols,S=[];let w=null;for(let D=0;Dy.includes(T));if(w===null)w=L;else if(!_t(L,w))break;const F=lh(P);S.push({move:b,fragCount:F})}if(S.length===0)return;S.sort((D,b)=>D.fragCount-b.fragCount);const R=S[0].move;if(!(R>a.getCols().length-h.length))return{columns:h,toIndex:R}}function On(e){const{columns:t,toIndex:o}=Bn(e)||{},{finished:s,colMoves:i}=e;return!t||o==null?null:(i.moveColumns(t,o,"uiColumnMoved",s),s?null:{columns:t,toIndex:o})}function rh(e,t){const o=t.getCols(),s=e.map(a=>o.indexOf(a)).sort((a,d)=>a-d),i=s[0];return H(s)-i!==s.length-1?null:i}function lh(e){function t(s){const i=[];let n=s.getOriginalParent();for(;n!=null;)i.push(n),n=n.getOriginalParent();return i}let o=0;for(let s=0;sn.length?[i,n]:[n,i],i.forEach(r=>{n.indexOf(r)===-1&&o++})}return o}function ah(e,t){switch(t){case"left":return e.leftCols;case"right":return e.rightCols;default:return e.centerCols}}function dh(e){const{movingCols:t,draggingRight:o,xPosition:s,pinned:i,gos:n,colModel:r,visibleCols:l}=e;if(n.get("suppressMovableColumns")||t.some(w=>w.getColDef().suppressMovable))return[];const d=ah(l,i),c=r.getCols(),h=d.filter(w=>t.includes(w)),u=d.filter(w=>!t.includes(w)),g=c.filter(w=>!t.includes(w));let p=0,f=s;if(o){let w=0;h.forEach(R=>w+=R.getActualWidth()),f-=w}if(f>0){for(let w=0;w0){const w=u[p-1];C=g.indexOf(w)+1}else C=g.indexOf(u[0]),C===-1&&(C=0);const y=[C],S=(w,R)=>w-R;if(o){let w=C+1;const R=c.length-1;for(;w<=R;)y.push(w),w++;y.sort(S)}else{let w=C;const R=c.length-1;let D=c[w];for(;w<=R&&d.indexOf(D)<0;)w++,y.push(w),D=c[w];w=C-1;const b=0;for(;w>=b;)y.push(w),w--;y.sort(S).reverse()}return y}function Lo(e){var d;const{pinned:t,fromKeyboard:o,gos:s,ctrlsSvc:i,useHeaderRow:n,skipScrollPadding:r}=e;let l=(d=i.getHeaderRowContainerCtrl(t))==null?void 0:d.eViewport,{x:a}=e;return l?(o&&(a-=l.getBoundingClientRect().left),s.get("enableRtl")&&(n&&(l=l.querySelector(".ag-header-row")),a=l.clientWidth-a),t==null&&!r&&(a+=i.get("center").getCenterViewportScrollLeft()),a):0}function fo(e,t){for(const o of e)o.moving=t,o.dispatchColEvent("movingChanged","uiColumnMoved")}var Bs=7,Mo=100,Ct=Mo/2,ch=5,hh=100,uh=class extends v{constructor(e){super(),this.pinned=e,this.needToMoveLeft=!1,this.needToMoveRight=!1,this.lastMovedInfo=null,this.isCenterContainer=!k(e)}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>{this.gridBodyCon=e.gridBodyCtrl})}getIconName(){const{pinned:e,lastDraggingEvent:t}=this,{dragItem:o}=t||{},s=(o==null?void 0:o.columns)??[];for(const i of s){const n=i.getPinned();if(i.getColDef().lockPinned){if(n==e)return"move";continue}const r=o==null?void 0:o.containerType;if(r===e||!e)return"move";if(e&&(!n||r!==e))return"pinned"}return"notAllowed"}onDragEnter(e){const t=e.dragItem,o=t.columns;if(e.dragSource.type===0)this.setColumnsVisible(o,!0,"uiColumnDragged");else{const i=t.visibleState,n=(o||[]).filter(r=>i[r.getId()]);this.setColumnsVisible(n,!0,"uiColumnDragged")}this.gos.get("suppressMoveWhenColumnDragging")||this.attemptToPinColumns(o,this.pinned),this.onDragging(e,!0,!0)}onDragging(e=this.lastDraggingEvent,t=!1,o=!1,s=!1){const{gos:i,ctrlsSvc:n}=this.beans,r=i.get("suppressMoveWhenColumnDragging");if(s&&!r){this.finishColumnMoving();return}if(this.lastDraggingEvent=e,!e||!s&&V(e.hDirection))return;const l=Lo({x:e.x,pinned:this.pinned,gos:i,ctrlsSvc:n});t||this.checkCenterForScrolling(l),r?this.handleColumnDragWhileSuppressingMovement(e,t,o,l,s):this.handleColumnDragWhileAllowingMovement(e,t,o,l,s)}onDragLeave(){this.ensureIntervalCleared(),this.clearHighlighted(),this.updateDragItemContainerType(),this.lastMovedInfo=null}onDragStop(){this.onDragging(this.lastDraggingEvent,!1,!0,!0),this.ensureIntervalCleared(),this.lastMovedInfo=null}onDragCancel(){this.clearHighlighted(),this.ensureIntervalCleared(),this.lastMovedInfo=null}setColumnsVisible(e,t,o){if(!e)return;const s=e.filter(i=>!i.getColDef().lockVisible);this.beans.colModel.setColsVisible(s,t,o)}finishColumnMoving(){this.clearHighlighted();const e=this.lastMovedInfo;if(!e)return;const{columns:t,toIndex:o}=e;this.beans.colMoves.moveColumns(t,o,"uiColumnMoved",!0)}updateDragItemContainerType(){const{lastDraggingEvent:e}=this;if(this.gos.get("suppressMoveWhenColumnDragging")||!e)return;const t=e.dragItem;t&&(t.containerType=this.pinned)}handleColumnDragWhileSuppressingMovement(e,t,o,s,i){const n=this.getAllMovingColumns(e,!0);if(i){const r=this.isAttemptingToPin(n);r&&this.attemptToPinColumns(n,void 0,!0);const{fromLeft:l,xPosition:a}=this.getNormalisedXPositionInfo(n,r)||{};if(l==null||a==null){this.finishColumnMoving();return}this.moveColumnsAfterHighlight({allMovingColumns:n,xPosition:a,fromEnter:t,fakeEvent:o,fromLeft:l})}else{if(!this.beans.dragAndDrop.isDropZoneWithinThisGrid(e))return;this.highlightHoveredColumn(n,s)}}handleColumnDragWhileAllowingMovement(e,t,o,s,i){const n=this.getAllMovingColumns(e),r=this.normaliseDirection(e.hDirection)==="right",l=e.dragSource.type===1,a=this.getMoveColumnParams({allMovingColumns:n,isFromHeader:l,xPosition:s,fromLeft:r,fromEnter:t,fakeEvent:o}),d=On({...a,finished:i});d&&(this.lastMovedInfo=d)}getAllMovingColumns(e,t=!1){const o=e.dragSource.getDragItem();let s=null;t?(s=o.columnsInSplit,s||(s=o.columns)):s=o.columns;const i=n=>n.getColDef().lockPinned?n.getPinned()==this.pinned:!0;return s?s.filter(i):[]}getMoveColumnParams(e){const{allMovingColumns:t,isFromHeader:o,xPosition:s,fromLeft:i,fromEnter:n,fakeEvent:r}=e,{gos:l,colModel:a,colMoves:d,visibleCols:c}=this.beans;return{allMovingColumns:t,isFromHeader:o,fromLeft:i,xPosition:s,pinned:this.pinned,fromEnter:n,fakeEvent:r,gos:l,colModel:a,colMoves:d,visibleCols:c}}highlightHoveredColumn(e,t){var c;const{gos:o,colModel:s}=this.beans,i=o.get("enableRtl"),n=s.getCols().filter(h=>h.isVisible()&&h.getPinned()===this.pinned);let r=null,l=null,a=null;for(const h of n){if(l=h.getActualWidth(),r=this.getNormalisedColumnLeft(h,0,i),r!=null){const u=r+l;if(r<=t&&u>=t){a=h;break}}r=null,l=null}if(a)e.indexOf(a)!==-1&&(a=null);else{for(let h=n.length-1;h>=0;h--){const u=n[h],g=n[h].getParent();if(!g){a=u;break}const p=g==null?void 0:g.getDisplayedLeafColumns();if(p.length){a=H(p);break}}if(!a)return;r=this.getNormalisedColumnLeft(a,0,i),l=a.getActualWidth()}if(((c=this.lastHighlightedColumn)==null?void 0:c.column)!==a&&this.clearHighlighted(),a==null||r==null||l==null)return;let d;t-rBs;return t&&o||e.some(s=>s.getPinned()!==this.pinned)}moveColumnsAfterHighlight(e){const{allMovingColumns:t,xPosition:o,fromEnter:s,fakeEvent:i,fromLeft:n}=e,r=this.getMoveColumnParams({allMovingColumns:t,isFromHeader:!0,xPosition:o,fromLeft:n,fromEnter:s,fakeEvent:i}),{columns:l,toIndex:a}=Bn(r)||{};l&&a!=null&&(this.lastMovedInfo={columns:l,toIndex:a}),this.finishColumnMoving()}clearHighlighted(){const{lastHighlightedColumn:e}=this;e&&(Os(e.column,null),this.lastHighlightedColumn=null)}checkCenterForScrolling(e){if(!this.isCenterContainer)return;const t=this.beans.ctrlsSvc.get("center"),o=t.getCenterViewportScrollLeft(),s=o+t.getCenterWidth();let i,n;this.gos.get("enableRtl")?(i=es-Ct):(n=es-Ct),this.needToMoveRight=i,this.needToMoveLeft=n,n||i?this.ensureIntervalStarted():this.ensureIntervalCleared()}ensureIntervalStarted(){var e;this.movingIntervalId||(this.intervalCount=0,this.failedMoveAttempts=0,this.movingIntervalId=window.setInterval(this.moveInterval.bind(this),hh),(e=this.beans.dragAndDrop.getDragAndDropImageComponent())==null||e.setIcon(this.needToMoveLeft?"left":"right",!0))}ensureIntervalCleared(){var e;this.movingIntervalId&&(window.clearInterval(this.movingIntervalId),this.movingIntervalId=null,this.failedMoveAttempts=0,(e=this.beans.dragAndDrop.getDragAndDropImageComponent())==null||e.setIcon(this.getIconName(),!1))}moveInterval(){var s,i;let e;this.intervalCount++,e=10+this.intervalCount*ch,e>Mo&&(e=Mo);let t=null;const o=this.gridBodyCon.scrollFeature;if(this.needToMoveLeft?t=o.scrollHorizontally(-e):this.needToMoveRight&&(t=o.scrollHorizontally(e)),t!==0)this.onDragging(this.lastDraggingEvent),this.failedMoveAttempts=0;else{this.failedMoveAttempts++;const{pinnedCols:n,dragAndDrop:r,gos:l}=this.beans;if(this.failedMoveAttempts<=Bs+1||!n)return;if((s=r.getDragAndDropImageComponent())==null||s.setIcon("pinned",!1),!l.get("suppressMoveWhenColumnDragging")){const a=(i=this.lastDraggingEvent)==null?void 0:i.dragItem.columns;this.attemptToPinColumns(a,void 0,!0)}}}getPinDirection(){if(this.needToMoveLeft||this.pinned==="left")return"left";if(this.needToMoveRight||this.pinned==="right")return"right"}attemptToPinColumns(e,t,o=!1){const s=(e||[]).filter(r=>!r.getColDef().lockPinned);if(!s.length)return 0;o&&(t=this.getPinDirection());const{pinnedCols:i,dragAndDrop:n}=this.beans;return i==null||i.setColsPinned(s,t,"uiColumnDragged"),o&&n.nudge(),s.length}destroy(){super.destroy(),this.lastDraggingEvent=null,this.clearHighlighted(),this.lastMovedInfo=null}};function Os(e,t){e.highlighted!==t&&(e.highlighted=t,e.dispatchColEvent("headerHighlightChanged","uiColumnMoved"))}function gh(e){const t=e.length;let o,s;for(let i=0;i{let i;const n=s.gridBodyCtrl.eBodyViewport;switch(o){case"left":i=[[n,s.left.eContainer],[s.bottomLeft.eContainer],[s.topLeft.eContainer]];break;case"right":i=[[n,s.right.eContainer],[s.bottomRight.eContainer],[s.topRight.eContainer]];break;default:i=[[n,s.center.eViewport],[s.bottomCenter.eViewport],[s.topCenter.eViewport]];break}this.eSecondaryContainers=i}),this.moveColumnFeature=this.createManagedBean(new uh(o)),this.bodyDropPivotTarget=this.createManagedBean(new ih(o)),t.addDropTarget(this),this.addDestroyFunc(()=>t.removeDropTarget(this))}isInterestedIn(e){return e===1||e===0&&this.gos.get("allowDragFromColumnsToolPanel")}getSecondaryContainers(){return this.eSecondaryContainers}getContainer(){return this.eContainer}getIconName(){return this.currentDropListener.getIconName()}isDropColumnInPivotMode(e){return this.beans.colModel.isPivotMode()&&e.dragSource.type===0}onDragEnter(e){this.currentDropListener=this.isDropColumnInPivotMode(e)?this.bodyDropPivotTarget:this.moveColumnFeature,this.currentDropListener.onDragEnter(e)}onDragLeave(e){this.currentDropListener.onDragLeave(e)}onDragging(e){this.currentDropListener.onDragging(e)}onDragStop(e){this.currentDropListener.onDragStop(e)}onDragCancel(){this.currentDropListener.onDragCancel()}},fh=class extends v{constructor(){super(...arguments),this.beanName="colMoves"}moveColumnByIndex(e,t,o){const s=this.beans.colModel.getCols();if(!s)return;const i=s[e];this.moveColumns([i],t,o)}moveColumns(e,t,o,s=!0){const{colModel:i,colAnimation:n,visibleCols:r,eventSvc:l}=this.beans,a=i.getCols();if(!a)return;if(t>a.length-e.length){I(30,{toIndex:t});return}n==null||n.start();const d=i.getColsForKeys(e);this.doesMovePassRules(d,t)&&(ys(i.getCols(),d,t),r.refresh(o),l.dispatchEvent({type:"columnMoved",columns:d,column:d.length===1?d[0]:null,toIndex:t,finished:s,source:o})),n==null||n.finish()}doesMovePassRules(e,t){const o=this.getProposedColumnOrder(e,t);return this.doesOrderPassRules(o)}doesOrderPassRules(e){const{colModel:t,gos:o}=this.beans;return!(!Ji(e,t.getColTree())||!(i=>{const n=d=>d?d==="left"||d===!0?-1:1:0,r=o.get("enableRtl");let l=r?1:-1,a=!0;return i.forEach(d=>{const c=n(d.getColDef().lockPosition);r?c>l&&(a=!1):cl?"hide":"notAllowed",getDragItem:a?()=>vh(t,r.allCols):()=>mh(t),dragItemName:o,onDragStarted:()=>{l=!s.get("suppressDragLeaveHidesColumns"),fo(d,!0)},onDragStopped:()=>fo(d,!1),onDragCancelled:()=>fo(d,!1),onGridEnter:u=>{if(l){const{columns:g=[],visibleState:p}=u??{},f=a?y=>!p||p[y.getColId()]:()=>!0,C=g.filter(y=>!y.getColDef().lockVisible&&f(y));i.setColsVisible(C,!0,"uiColumnMoved")}},onGridExit:u=>{var g;if(l){const p=((g=u==null?void 0:u.columns)==null?void 0:g.filter(f=>!f.getColDef().lockVisible))||[];i.setColsVisible(p,!1,"uiColumnMoved")}}};return n.addDragSource(h,!0),h}};function Ch(e,t){for(;e;){if(e.getGroupId()===t)return e;e=e.getParent()}}function mh(e){const t={};return t[e.getId()]=e.isVisible(),{columns:[e],visibleState:t,containerType:e.pinned}}function vh(e,t){var l;const o=e.getProvidedColumnGroup().getLeafColumns(),s={};o.forEach(a=>s[a.getId()]=a.isVisible());const i=[];t.forEach(a=>{o.indexOf(a)>=0&&(i.push(a),ye(o,a))}),o.forEach(a=>i.push(a));const n=[],r=e.getLeafColumns();for(const a of i)r.indexOf(a)!==-1&&n.push(a);return{columns:i,columnsInSplit:n,visibleState:s,containerType:(l=n[0])==null?void 0:l.pinned}}var wh={moduleName:"ColumnMove",version:G,beans:[fh,th],apiFunctions:{moveColumnByIndex:oh,moveColumns:sh},dependsOn:[Xc],css:[eh]},yh=class extends v{constructor(){super(...arguments),this.beanName="autoWidthCalc"}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>{this.centerRowContainerCtrl=e.center})}getPreferredWidthForColumn(e,t){const o=this.getHeaderCellForColumn(e);if(!o)return-1;const s=this.beans.rowRenderer.getAllCellsNotSpanningForColumn(e);return t||s.push(o),this.getPreferredWidthForElements(s)}getPreferredWidthForColumnGroup(e){const t=this.getHeaderCellForColumn(e);return t?this.getPreferredWidthForElements([t]):-1}getPreferredWidthForElements(e,t){const o=document.createElement("form");o.style.position="fixed";const s=this.centerRowContainerCtrl.eContainer;e.forEach(n=>this.cloneItemIntoDummy(n,o)),s.appendChild(o);const i=o.offsetWidth;return s.removeChild(o),t=t??this.gos.get("autoSizePadding"),i+t}getHeaderCellForColumn(e){let t=null;return this.beans.ctrlsSvc.getHeaderRowContainerCtrls().forEach(o=>{const s=o.getHtmlElementForColumnHeader(e);s!=null&&(t=s)}),t}cloneItemIntoDummy(e,t){const o=e.cloneNode(!0);o.style.width="",o.style.position="static",o.style.left="";const s=document.createElement("div"),i=s.classList;["ag-header-cell","ag-header-group-cell"].some(l=>o.classList.contains(l))?(i.add("ag-header","ag-header-row"),s.style.position="static"):i.add("ag-row");let r=e.parentElement;for(;r;){if(["ag-header-row","ag-row"].some(a=>r.classList.contains(a))){for(let a=0;athis.resizeLeafColumnsToFit("uiColumnResized")))}onResizeStart(e){const{columnsToResize:t,resizeStartWidth:o,resizeRatios:s,groupAfterColumns:i,groupAfterStartWidth:n,groupAfterRatios:r}=this.getInitialValues(e);this.resizeCols=t,this.resizeStartWidth=o,this.resizeRatios=s,this.resizeTakeFromCols=i,this.resizeTakeFromStartWidth=n,this.resizeTakeFromRatios=r,this.toggleColumnResizing(!0)}onResizing(e,t,o="uiColumnResized"){const s=this.normaliseDragChange(t),i=this.resizeStartWidth+s;this.resizeColumnsFromLocalValues(i,o,e)}getInitialValues(e){var a;const t=d=>d.reduce((c,h)=>c+h.getActualWidth(),0),o=(d,c)=>d.map(h=>h.getActualWidth()/c),s=this.getColumnsToResize(),i=t(s),n=o(s,i),r={columnsToResize:s,resizeStartWidth:i,resizeRatios:n};let l=null;if(e&&(l=((a=this.beans.colGroupSvc)==null?void 0:a.getGroupAtDirection(this.columnGroup,"After"))??null),l){const d=l.getDisplayedLeafColumns(),c=r.groupAfterColumns=d.filter(u=>u.isResizable()),h=r.groupAfterStartWidth=t(c);r.groupAfterRatios=o(c,h)}else r.groupAfterColumns=void 0,r.groupAfterStartWidth=void 0,r.groupAfterRatios=void 0;return r}resizeLeafColumnsToFit(e){const t=this.beans.autoWidthCalc.getPreferredWidthForColumnGroup(this.columnGroup),o=this.getInitialValues();t>o.resizeStartWidth&&this.resizeColumns(o,t,e,!0)}resizeColumnsFromLocalValues(e,t,o=!0){if(!this.resizeCols||!this.resizeRatios)return;const s={columnsToResize:this.resizeCols,resizeStartWidth:this.resizeStartWidth,resizeRatios:this.resizeRatios,groupAfterColumns:this.resizeTakeFromCols,groupAfterStartWidth:this.resizeTakeFromStartWidth,groupAfterRatios:this.resizeTakeFromRatios};this.resizeColumns(s,e,t,o)}resizeColumns(e,t,o,s=!0){var h;const{columnsToResize:i,resizeStartWidth:n,resizeRatios:r,groupAfterColumns:l,groupAfterStartWidth:a,groupAfterRatios:d}=e,c=[];if(c.push({columns:i,ratios:r,width:t}),l){const u=t-n;c.push({columns:l,ratios:d,width:a-u})}(h=this.beans.colResize)==null||h.resizeColumnSets({resizeSets:c,finished:s,source:o}),s&&this.toggleColumnResizing(!1)}toggleColumnResizing(e){this.comp.toggleCss("ag-column-resizing",e)}getColumnsToResize(){return this.columnGroup.getDisplayedLeafColumns().filter(t=>t.isResizable())}normaliseDragChange(e){let t=e;return this.gos.get("enableRtl")?this.pinned!=="left"&&(t*=-1):this.pinned==="right"&&(t*=-1),t}destroy(){super.destroy(),this.resizeCols=void 0,this.resizeRatios=void 0,this.resizeTakeFromCols=void 0,this.resizeTakeFromRatios=void 0}},Fh=class extends v{constructor(e,t,o,s,i){super(),this.pinned=e,this.column=t,this.eResize=o,this.comp=s,this.ctrl=i}postConstruct(){const e=[];let t,o;const s=()=>{if(W(this.eResize,t),!t)return;const{horizontalResizeSvc:r,colAutosize:l}=this.beans,a=r.addResizeBar({eResizeBar:this.eResize,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this,!1),onResizeEnd:this.onResizing.bind(this,!0)});e.push(a),o&&l&&e.push(l.addColumnAutosize(this.eResize,this.column))},i=()=>{e.forEach(r=>r()),e.length=0},n=()=>{const r=this.column.isResizable(),l=!this.gos.get("suppressAutoSize")&&!this.column.getColDef().suppressAutoSize;(r!==t||l!==o)&&(t=r,o=l,i(),s())};n(),this.addDestroyFunc(i),this.ctrl.setRefreshFunction("resize",n)}onResizing(e,t){const{column:o,lastResizeAmount:s,resizeStartWidth:i,beans:n}=this,r=this.normaliseResizeAmount(t),l=i+r,a=[{key:o,newWidth:l}],{pinnedCols:d,ctrlsSvc:c,colResize:h}=n;if(this.column.getPinned()){const u=(d==null?void 0:d.leftWidth)??0,g=(d==null?void 0:d.rightWidth)??0,p=xt(c.getGridBodyCtrl().eBodyViewport)-50;if(u+g+(r-s)>p)return}this.lastResizeAmount=r,h==null||h.setColumnWidths(a,this.resizeWithShiftKey,e,"uiColumnResized"),e&&this.toggleColumnResizing(!1)}onResizeStart(e){this.resizeStartWidth=this.column.getActualWidth(),this.lastResizeAmount=0,this.resizeWithShiftKey=e,this.toggleColumnResizing(!0)}toggleColumnResizing(e){this.comp.toggleCss("ag-column-resizing",e)}normaliseResizeAmount(e){let t=e;const o=this.pinned!=="left",s=this.pinned==="right";return this.gos.get("enableRtl")?o&&(t*=-1):s&&(t*=-1),t}},xh=class extends v{constructor(){super(...arguments),this.beanName="colResize"}setColumnWidths(e,t,o,s){const i=[],{colModel:n,gos:r,visibleCols:l}=this.beans;e.forEach(a=>{const d=n.getColDefCol(a.key)||n.getCol(a.key);if(!d)return;if(i.push({width:a.newWidth,ratios:[1],columns:[d]}),r.get("colResizeDefault")==="shift"&&(t=!t),t){const h=l.getColAfter(d);if(!h)return;const u=d.getActualWidth()-a.newWidth,g=h.getActualWidth()+u;i.push({width:g,ratios:[1],columns:[h]})}}),i.length!==0&&this.resizeColumnSets({resizeSets:i,finished:o,source:s})}resizeColumnSets(e){const{resizeSets:t,finished:o,source:s}=e;if(!(!t||t.every(c=>Dh(c)))){if(o){const c=t&&t.length>0?t[0].columns:null;It(this.eventSvc,c,o,s)}return}const n=[],r=[];t.forEach(c=>{const{width:h,columns:u,ratios:g}=c,p={},f={};u.forEach(S=>r.push(S));let C=!0,y=0;for(;C;){if(y++,y>1e3){K(31);break}C=!1;const S=[];let w=0,R=h;u.forEach((b,P)=>{if(f[b.getId()])R-=p[b.getId()];else{S.push(b);const F=g[P];w+=F}});const D=1/w;S.forEach((b,P)=>{const L=P===S.length-1;let F;L?F=R:(F=Math.round(g[P]*h*D),R-=F);const T=b.getMinWidth(),M=b.getMaxWidth();F0&&F>M&&(F=M,f[b.getId()]=!0,C=!0),p[b.getId()]=F})}u.forEach(S=>{const w=p[S.getId()];S.getActualWidth()!==w&&(S.setActualWidth(w,s),n.push(S))})});const l=n.length>0;let a=[];if(l){const{colFlex:c,visibleCols:h,colViewport:u}=this.beans;a=(c==null?void 0:c.refreshFlexedColumns({resizingCols:r,skipSetLeft:!0}))??[],h.setLeftValues(s),h.updateBodyWidths(),u.checkViewportColumns()}const d=r.concat(a);(l||o)&&It(this.eventSvc,d,o,s,a)}resizeHeader(e,t,o){if(!e.isResizable())return;const s=e.getActualWidth(),i=e.getMinWidth(),n=e.getMaxWidth(),r=Math.min(Math.max(s+t,i),n);this.setColumnWidths([{key:e,newWidth:r}],o,!0,"uiColumnResized")}createResizeFeature(e,t,o,s,i){return new Fh(e,t,o,s,i)}createGroupResizeFeature(e,t,o,s){return new Rh(e,t,o,s)}};function Dh(e){const{columns:t,width:o}=e;let s=0,i=0,n=!0;t.forEach(a=>{const d=a.getMinWidth();s+=d||0;const c=a.getMaxWidth();c>0?i+=c:n=!1});const r=o>=s,l=!n||o<=i;return r&&l}var Ph={moduleName:"ColumnResize",version:G,beans:[xh],apiFunctions:{setColumnWidths:Sh},dependsOn:[Jc,bh]},Eh=class extends v{constructor(e,t){super(),this.removeChildListenersFuncs=[],this.columnGroup=t,this.comp=e}postConstruct(){this.addListenersToChildrenColumns(),this.addManagedListeners(this.columnGroup,{displayedChildrenChanged:this.onDisplayedChildrenChanged.bind(this)}),this.onWidthChanged(),this.addDestroyFunc(this.removeListenersOnChildrenColumns.bind(this))}addListenersToChildrenColumns(){this.removeListenersOnChildrenColumns();const e=this.onWidthChanged.bind(this);this.columnGroup.getLeafColumns().forEach(t=>{t.__addEventListener("widthChanged",e),t.__addEventListener("visibleChanged",e),this.removeChildListenersFuncs.push(()=>{t.__removeEventListener("widthChanged",e),t.__removeEventListener("visibleChanged",e)})})}removeListenersOnChildrenColumns(){this.removeChildListenersFuncs.forEach(e=>e()),this.removeChildListenersFuncs=[]}onDisplayedChildrenChanged(){this.addListenersToChildrenColumns(),this.onWidthChanged()}onWidthChanged(){const e=this.columnGroup.getActualWidth();this.comp.setWidth(`${e}px`),this.comp.toggleCss("ag-hidden",e===0)}},Th=class extends In{constructor(){super(...arguments),this.onSuppressColMoveChange=()=>{!this.isAlive()||this.isSuppressMoving()?this.removeDragSource():this.dragSource||this.setDragSource(this.eGui)}}setComp(e,t,o,s,i){const{column:n,beans:r}=this,{context:l,colNames:a,colHover:d,rangeSvc:c,colResize:h}=r;this.comp=e,i=Kt(this,l,i),this.setGui(t,i),this.displayName=a.getDisplayNameForColumnGroup(n,"header"),this.refreshHeaderStyles(),this.addClasses(),this.setupMovingCss(i),this.setupExpandable(i),this.setupTooltip(),this.setupAutoHeight({wrapperElement:s,compBean:i}),this.setupUserComp(),this.addHeaderMouseListeners(i),this.addManagedPropertyListener("groupHeaderHeight",this.refreshMaxHeaderHeight.bind(this)),this.refreshMaxHeaderHeight();const u=this.rowCtrl.pinned,g=n.getProvidedColumnGroup().getLeafColumns();d==null||d.createHoverFeature(i,g,t),c==null||c.createRangeHighlightFeature(i,n,e),i.createManagedBean(new Tn(n,t,r)),i.createManagedBean(new Eh(e,n)),h?this.resizeFeature=i.createManagedBean(h.createGroupResizeFeature(e,o,u,n)):e.setResizableDisplayed(!1),i.createManagedBean(new $t(t,{shouldStopEventPropagation:this.shouldStopEventPropagation.bind(this),onTabKeyDown:()=>{},handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this)})),this.addHighlightListeners(i,g),i.addManagedPropertyListener("suppressMovableColumns",this.onSuppressColMoveChange),this.addResizeAndMoveKeyboardListeners(i),i.addDestroyFunc(()=>this.clearComponent())}getHeaderClassParams(){const{column:e,beans:t}=this,o=e.getDefinition();return A(t.gos,{colDef:o,columnGroup:e,floatingFilter:!1})}refreshMaxHeaderHeight(){const{gos:e,comp:t}=this,o=e.get("groupHeaderHeight");o!=null?o===0?t.setHeaderWrapperHidden(!0):t.setHeaderWrapperMaxHeight(o):(t.setHeaderWrapperHidden(!1),t.setHeaderWrapperMaxHeight(null))}addHighlightListeners(e,t){if(this.beans.gos.get("suppressMoveWhenColumnDragging"))for(const o of t)e.addManagedListeners(o,{headerHighlightChanged:this.onLeafColumnHighlightChanged.bind(this,o)})}onLeafColumnHighlightChanged(e){const t=this.column.getDisplayedLeafColumns(),o=t[0]===e,s=H(t)===e;if(!o&&!s)return;const i=e.getHighlighted(),n=!!this.rowCtrl.getHeaderCellCtrls().find(a=>a.column.isMoving());let r=!1,l=!1;if(n){const a=this.beans.gos.get("enableRtl"),d=i===1,c=i===0;o&&(a?l=d:r=c),s&&(a?r=c:l=d)}this.comp.toggleCss("ag-header-highlight-before",r),this.comp.toggleCss("ag-header-highlight-after",l)}resizeHeader(e,t){const{resizeFeature:o}=this;if(!o)return;const s=o.getInitialValues(t);o.resizeColumns(s,s.resizeStartWidth+e,"uiColumnResized",!0)}resizeLeafColumnsToFit(e){var t;(t=this.resizeFeature)==null||t.resizeLeafColumnsToFit(e)}setupUserComp(){const{colGroupSvc:e,userCompFactory:t,gos:o,enterpriseMenuFactory:s}=this.beans,i=this.column,n=i.getProvidedColumnGroup(),r=A(o,{displayName:this.displayName,columnGroup:i,setExpanded:a=>{e.setColumnGroupOpened(n,a,"gridInitializing")},setTooltip:(a,d)=>{o.assertModuleRegistered("Tooltip",3),this.setupTooltip(a,d)},showColumnMenu:(a,d)=>s==null?void 0:s.showMenuAfterButtonClick(n,a,"columnMenu",d),showColumnMenuAfterMouseClick:(a,d)=>s==null?void 0:s.showMenuAfterMouseEvent(n,a,"columnMenu",d),eGridHeader:this.eGui}),l=la(t,r);l&&this.comp.setUserCompDetails(l)}addHeaderMouseListeners(e){const t=i=>this.handleMouseOverChange(i.type==="mouseenter"),o=()=>this.dispatchColumnMouseEvent("columnHeaderClicked",this.column.getProvidedColumnGroup()),s=i=>this.handleContextMenuMouseEvent(i,void 0,this.column.getProvidedColumnGroup());e.addManagedListeners(this.eGui,{mouseenter:t,mouseleave:t,click:o,contextmenu:s})}handleMouseOverChange(e){this.eventSvc.dispatchEvent({type:e?"columnHeaderMouseOver":"columnHeaderMouseLeave",column:this.column.getProvidedColumnGroup()})}setupTooltip(e,t){var o;this.tooltipFeature=(o=this.beans.tooltipSvc)==null?void 0:o.setupHeaderGroupTooltip(this.tooltipFeature,this,e,t)}setupExpandable(e){const t=this.column.getProvidedColumnGroup();this.refreshExpanded();const o=this.refreshExpanded.bind(this);e.addManagedListeners(t,{expandedChanged:o,expandableChanged:o})}refreshExpanded(){const{column:e}=this;this.expandable=e.isExpandable();const t=e.isExpanded();this.expandable?this.comp.setAriaExpanded(t?"true":"false"):this.comp.setAriaExpanded(void 0),this.refreshHeaderStyles()}addClasses(){const{column:e}=this,t=e.getColGroupDef(),o=hn(t,this.gos,null,e);e.isPadding()?(o.push("ag-header-group-cell-no-group"),e.getLeafColumns().every(i=>i.isSpanHeaderHeight())&&o.push("ag-header-span-height")):(o.push("ag-header-group-cell-with-group"),t!=null&&t.wrapHeaderText&&o.push("ag-header-cell-wrap-text")),o.forEach(s=>this.comp.toggleCss(s,!0))}setupMovingCss(e){const{column:t}=this,s=t.getProvidedColumnGroup().getLeafColumns(),i=()=>this.comp.toggleCss("ag-header-cell-moving",t.isMoving());s.forEach(n=>{e.addManagedListeners(n,{movingChanged:i})}),i()}onFocusIn(e){this.eGui.contains(e.relatedTarget)||this.focusThis()}handleKeyDown(e){super.handleKeyDown(e);const t=this.getWrapperHasFocus();if(!(!this.expandable||!t)&&e.key===m.ENTER){const o=this.column,s=!o.isExpanded();this.beans.colGroupSvc.setColumnGroupOpened(o.getProvidedColumnGroup(),s,"uiColumnExpanded")}}setDragSource(e){var t;!this.isAlive()||this.isSuppressMoving()||(this.removeDragSource(),e&&(this.dragSource=((t=this.beans.colMoves)==null?void 0:t.setDragSourceForHeader(e,this.column,this.displayName))??null))}isSuppressMoving(){return this.gos.get("suppressMovableColumns")||this.column.getLeafColumns().some(e=>e.getColDef().suppressMovable||e.getColDef().lockPosition)}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),super.destroy()}};function kh(e,t,o){var s;(s=e.colGroupSvc)==null||s.setColumnGroupOpened(t,o,"api")}function Ih(e,t,o){var s;return((s=e.colGroupSvc)==null?void 0:s.getColumnGroup(t,o))??null}function Lh(e,t){var o;return((o=e.colGroupSvc)==null?void 0:o.getProvidedColGroup(t))??null}function Mh(e,t,o){return e.colNames.getDisplayNameForColumnGroup(t,o)||""}function Ah(e){var t;return((t=e.colGroupSvc)==null?void 0:t.getColumnGroupState())??[]}function Hh(e,t){var o;(o=e.colGroupSvc)==null||o.setColumnGroupState(t,"api")}function Gh(e){var t;(t=e.colGroupSvc)==null||t.resetColumnGroupState("api")}function Bh(e){return e.visibleCols.treeLeft}function Oh(e){return e.visibleCols.treeCenter}function Wh(e){return e.visibleCols.treeRight}function Vh(e){return e.visibleCols.getAllTrees()}function Nh(e,t){for(let o=0;o=0&&(e[s]=e[e.length-1],e.pop())}}var zh=class extends v{constructor(){super(...arguments),this.beanName="visibleCols",this.colsAndGroupsMap={},this.leftCols=[],this.rightCols=[],this.centerCols=[],this.allCols=[],this.bodyWidth=0,this.leftWidth=0,this.rightWidth=0,this.isBodyWidthDirty=!0}refresh(e,t=!1){const{colFlex:o,colModel:s,colGroupSvc:i,colViewport:n,selectionColSvc:r}=this.beans;t||this.buildTrees(s,i),i==null||i.updateOpenClosedVisibility(),this.leftCols=Co(this.treeLeft),this.centerCols=Co(this.treeCenter),this.rightCols=Co(this.treeRight),r==null||r.refreshVisibility(this.leftCols,this.centerCols,this.rightCols),this.joinColsAriaOrder(s),this.joinCols(),this.setLeftValues(e),this.autoHeightCols=this.allCols.filter(l=>l.isAutoHeight()),o==null||o.refreshFlexedColumns(),this.updateBodyWidths(),n.checkViewportColumns(!1),this.setFirstRightAndLastLeftPinned(s,this.leftCols,this.rightCols,e),this.eventSvc.dispatchEvent({type:"displayedColumnsChanged",source:e})}updateBodyWidths(){const e=Ee(this.centerCols),t=Ee(this.leftCols),o=Ee(this.rightCols);this.isBodyWidthDirty=this.bodyWidth!==e,(this.bodyWidth!==e||this.leftWidth!==t||this.rightWidth!==o)&&(this.bodyWidth=e,this.leftWidth=t,this.rightWidth=o,this.eventSvc.dispatchEvent({type:"columnContainerWidthChanged"}),this.eventSvc.dispatchEvent({type:"displayedColumnsWidthChanged"}))}setLeftValues(e){this.setLeftValuesOfCols(e),this.setLeftValuesOfGroups()}setFirstRightAndLastLeftPinned(e,t,o,s){let i,n;this.gos.get("enableRtl")?(i=t?t[0]:null,n=o?H(o):null):(i=t?H(t):null,n=o?o[0]:null),e.getCols().forEach(r=>{r.setLastLeftPinned(r===i,s),r.setFirstRightPinned(r===n,s)})}buildTrees(e,t){const o=e.getColsToShow(),s=o.filter(a=>a.getPinned()=="left"),i=o.filter(a=>a.getPinned()=="right"),n=o.filter(a=>a.getPinned()!="left"&&a.getPinned()!="right"),r=new Vl,l=a=>t?t.createColumnGroups(a):a.columns;this.treeLeft=l({columns:s,idCreator:r,pinned:"left",oldDisplayedGroups:this.treeLeft}),this.treeRight=l({columns:i,idCreator:r,pinned:"right",oldDisplayedGroups:this.treeRight}),this.treeCenter=l({columns:n,idCreator:r,pinned:null,oldDisplayedGroups:this.treeCenter}),this.updateColsAndGroupsMap()}clear(){this.leftCols=[],this.rightCols=[],this.centerCols=[],this.allCols=[],this.ariaOrderColumns=[]}joinColsAriaOrder(e){const t=e.getCols(),o=[],s=[],i=[];for(const n of t){const r=n.getPinned();r?r===!0||r==="left"?o.push(n):i.push(n):s.push(n)}this.ariaOrderColumns=o.concat(s).concat(i)}getAriaColIndex(e){let t;return O(e)?t=e.getLeafColumns()[0]:t=e,this.ariaOrderColumns.indexOf(t)+1}setLeftValuesOfGroups(){[this.treeLeft,this.treeRight,this.treeCenter].forEach(e=>{e.forEach(t=>{O(t)&&t.checkLeft()})})}setLeftValuesOfCols(e){const{colModel:t}=this.beans;if(!t.getColDefCols())return;const s=t.getCols().slice(0),i=this.gos.get("enableRtl");[this.leftCols,this.rightCols,this.centerCols].forEach(n=>{if(i){let r=Ee(n);n.forEach(l=>{r-=l.getActualWidth(),l.setLeft(r,e)})}else{let r=0;n.forEach(l=>{l.setLeft(r,e),r+=l.getActualWidth()})}Nh(s,n)}),s.forEach(n=>{n.setLeft(null,e)})}joinCols(){this.gos.get("enableRtl")?this.allCols=this.rightCols.concat(this.centerCols).concat(this.leftCols):this.allCols=this.leftCols.concat(this.centerCols).concat(this.rightCols)}getAllTrees(){return this.treeLeft&&this.treeRight&&this.treeCenter?this.treeLeft.concat(this.treeCenter).concat(this.treeRight):null}isColDisplayed(e){return this.allCols.indexOf(e)>=0}getLeftColsForRow(e){const{leftCols:t,beans:{colModel:o}}=this;return o.colSpanActive?this.getColsForRow(e,t):t}getRightColsForRow(e){const{rightCols:t,beans:{colModel:o}}=this;return o.colSpanActive?this.getColsForRow(e,t):t}getColsForRow(e,t,o,s){const i=[];let n=null;for(let r=0;r1){const u=d-1;for(let g=1;g<=u;g++)c.push(t[r+g]);r+=u}let h;o?(h=!1,c.forEach(u=>{o(u)&&(h=!0)})):h=!0,h&&(i.length===0&&n&&(s&&s(l))&&i.push(n),i.push(l)),n=l}return i}getContainerWidth(e){switch(e){case"left":return this.leftWidth;case"right":return this.rightWidth;default:return this.bodyWidth}}getColBefore(e){const t=this.allCols,o=t.indexOf(e);return o>0?t[o-1]:null}isPinningLeft(){return this.leftCols.length>0}isPinningRight(){return this.rightCols.length>0}updateColsAndGroupsMap(){this.colsAndGroupsMap={};const e=t=>{this.colsAndGroupsMap[t.getUniqueId()]=t};xe(this.treeCenter,!1,e),xe(this.treeLeft,!1,e),xe(this.treeRight,!1,e)}isVisible(e){return this.colsAndGroupsMap[e.getUniqueId()]===e}getFirstColumn(){const e=this.gos.get("enableRtl"),t=["leftCols","centerCols","rightCols"];e&&t.reverse();for(let o=0;o{we(o)&&t.push(o)}),t}var _h=class extends v{constructor(){super(...arguments),this.beanName="colGroupSvc"}getColumnGroupState(){const e=[],t=this.beans.colModel.getColTree();return ce(null,t,o=>{U(o)&&e.push({groupId:o.getGroupId(),open:o.isExpanded()})}),e}resetColumnGroupState(e){const t=this.beans.colModel.getColDefColTree();if(!t)return;const o=[];ce(null,t,s=>{if(U(s)){const i=s.getColGroupDef(),n={groupId:s.getGroupId(),open:i?i.openByDefault:void 0};o.push(n)}}),this.setColumnGroupState(o,e)}setColumnGroupState(e,t){const{colModel:o,colAnimation:s,visibleCols:i,eventSvc:n}=this.beans;if(!o.getColTree().length)return;s==null||s.start();const l=[];e.forEach(a=>{const d=a.groupId,c=a.open,h=this.getProvidedColGroup(d);h&&h.isExpanded()!==c&&(h.setExpanded(c),l.push(h))}),i.refresh(t,!0),l.length&&n.dispatchEvent({type:"columnGroupOpened",columnGroup:l.length===1?l[0]:void 0,columnGroups:l}),s==null||s.finish()}setColumnGroupOpened(e,t,o){let s;U(e)?s=e.getId():s=e||"",this.setColumnGroupState([{groupId:s,open:t}],o)}getProvidedColGroup(e){let t=null;return ce(null,this.beans.colModel.getColTree(),o=>{U(o)&&o.getId()===e&&(t=o)}),t}getGroupAtDirection(e,t){const o=e.getProvidedColumnGroup().getLevel()+e.getPaddingLevel(),s=e.getDisplayedLeafColumns(),i=t==="After"?H(s):s[0],n=`getCol${t}`;for(;;){const r=this.beans.visibleCols[n](i);if(!r)return null;const l=this.getColGroupAtLevel(r,o);if(l!==e)return l}}getColGroupAtLevel(e,t){let o=e.getParent(),s,i;for(;s=o.getProvidedColumnGroup().getLevel(),i=o.getPaddingLevel(),!(s+i<=t);)o=o.getParent();return o}updateOpenClosedVisibility(){const e=this.beans.visibleCols.getAllTrees();xe(e,!1,t=>{O(t)&&t.calculateDisplayedColumns()})}getColumnGroup(e,t){if(!e)return null;if(O(e))return e;const o=this.beans.visibleCols.getAllTrees(),s=typeof t=="number";let i=null;return xe(o,!1,n=>{if(O(n)){const r=n;let l;s?l=e===r.getGroupId()&&t===r.getPartId():l=e===r.getGroupId(),l&&(i=r)}}),i}createColumnGroups(e){const{columns:t,idCreator:o,pinned:s,oldDisplayedGroups:i,isStandaloneStructure:n}=e,r=this.mapOldGroupsById(i),l=[];let a=t;for(;a.length;){const d=a;a=[];let c=0;const h=u=>{const g=c;c=u;const p=d[g],C=(O(p)?p.getProvidedColumnGroup():p).getOriginalParent();if(C==null){for(let S=g;S=t;d--){const c=s.getUniqueKey(null,null),h=ws(this.beans,null,c),u=new wt(h,c,!0,t);this.createBean(u),a&&a.setChildren([u]),a=u,l||(l=a)}if(l&&a)if(i.push(l),e.some(c=>U(c))){a.setChildren([r]);continue}else{a.setChildren(e);break}i.push(r)}}return i}findDepth(e){let t=0,o=e;for(;o&&o[0]&&U(o[0]);)t++,o=o[0].getChildren();return t}findMaxDepth(e,t){let o=t;for(let s=0;s{let i=s;for(let n=t-1;n>=0;n--){const r=new wt(null,`FAKE_PATH_${s.getId()}}_${n}`,!0,n);this.createBean(r),r.setChildren([i]),i.originalParent=r,i=r}t===0&&(s.originalParent=null),o.push(i)}),o}findExistingGroup(e,t){if(e.groupId!=null)for(let s=0;s{s.forEach(i=>{if(O(i)){const n=i;t[i.getUniqueId()]=n,o(n.getChildren())}})};return e&&o(e),t}setupParentsIntoCols(e,t){e.forEach(o=>{if(o.parent=t,O(o)){const s=o;this.setupParentsIntoCols(s.getChildren(),s)}})}},Uh={moduleName:"ColumnGroup",version:G,dynamicBeans:{headerGroupCellCtrl:Th},beans:[_h],apiFunctions:{getAllDisplayedColumnGroups:Vh,getCenterDisplayedColumnGroups:Oh,getColumnGroup:Ih,getColumnGroupState:Ah,getDisplayNameForColumnGroup:Mh,getLeftDisplayedColumnGroups:Bh,getProvidedColumnGroup:Lh,getRightDisplayedColumnGroups:Wh,resetColumnGroupState:Gh,setColumnGroupOpened:kh,setColumnGroupState:Hh}},Kh={moduleName:"CheckboxCellRenderer",version:G,userComponents:{agCheckboxCellRenderer:wc}},jh=class extends v{constructor(){super(...arguments),this.beanName="colFlex"}refreshFlexedColumns(e={}){const t=e.source??"flex";e.viewportWidth!=null&&(this.flexViewportWidth=e.viewportWidth);const o=this.flexViewportWidth;if(!o)return[];const{visibleCols:s}=this.beans,i=s.centerCols;let n=-1;if(e.resizingCols){const p=new Set(e.resizingCols);for(let f=i.length-1;f>=0;f--)if(p.has(i[f])){n=f;break}}let r=!1;const l=i.map((p,f)=>{const C=p.getFlex(),y=C!=null&&C>0&&f>n;return r||(r=y),{col:p,isFlex:y,flex:Math.max(0,C??0),initialSize:p.getActualWidth(),min:p.getMinWidth(),max:p.getMaxWidth(),targetSize:0}});if(!r)return[];let a=l.length,d=l.reduce((p,f)=>p+f.flex,0),c=o;const h=(p,f)=>{p.frozenSize=f,p.col.setActualWidth(f,t),c-=f,d-=p.flex,a-=1},u=p=>p.frozenSize!=null;for(const p of l)p.isFlex||h(p,p.initialSize);for(;a>0;){const p=Math.round(d<1?c*d:c);let f,C=0,y=0;for(const R of l){if(u(R))continue;f=R,y+=p*(R.flex/d);const D=y-C,b=Math.round(D);R.targetSize=b,C+=b}f&&(f.targetSize+=p-C);let S=0;for(const R of l){if(u(R))continue;const D=R.targetSize,b=Math.min(Math.max(D,R.min),R.max);S+=b-D,R.violationType=b===D?void 0:b0?"min":"max";for(const R of l)u(R)||(w==="all"||R.violationType===w)&&h(R,R.targetSize)}e.skipSetLeft||s.setLeftValues(t),e.updateBodyWidths&&s.updateBodyWidths();const g=l.filter(p=>p.isFlex&&!p.violationType).map(p=>p.col);if(e.fireResizedEvent){const p=l.filter(C=>C.initialSize!==C.frozenSize).map(C=>C.col),f=l.filter(C=>C.flex).map(C=>C.col);It(this.eventSvc,p,!0,t,f)}return g}initCol(e){const{flex:t,initialFlex:o}=e.colDef;t!==void 0?e.flex=t:o!==void 0&&(e.flex=o)}setColFlex(e,t){e.flex=t??null,e.dispatchStateUpdatedEvent("flex")}},$h=class extends v{constructor(){super(...arguments),this.beanName="dataTypeSvc",this.dataTypeDefinitions={},this.isPendingInference=!1,this.isColumnTypeOverrideInDataTypeDefinitions=!1,this.columnStateUpdatesPendingInference={},this.columnStateUpdateListenerDestroyFuncs=[]}wireBeans(e){this.colModel=e.colModel}postConstruct(){this.processDataTypeDefinitions(),this.addManagedPropertyListener("dataTypeDefinitions",e=>{this.processDataTypeDefinitions(),this.colModel.recreateColumnDefs(e)})}processDataTypeDefinitions(){const e=this.getDefaultDataTypes(),t={};this.dataTypeDefinitions=t;const o={};this.formatValueFuncs=o;const s=r=>l=>{const{column:a,node:d,value:c}=l;let h=a.getColDef().valueFormatter;return h===r.groupSafeValueFormatter&&(h=r.valueFormatter),this.beans.valueSvc.formatValue(a,d,c,h)};for(const r of Object.keys(e)){const l=e[r],a={...l,groupSafeValueFormatter:Ns(l,this.gos)};t[r]=a,o[r]=s(a)}const i=this.gos.get("dataTypeDefinitions")??{},n={};this.dataTypeMatchers=n;for(const r of Object.keys(i)){const l=i[r],a=this.processDataTypeDefinition(l,i,[r],e);a&&(t[r]=a,l.dataTypeMatcher&&(n[r]=l.dataTypeMatcher),o[r]=s(a))}this.checkObjectValueHandlers(e),["dateString","text","number","boolean","date"].forEach(r=>{const l=n[r];l&&delete n[r],n[r]=l??e[r].dataTypeMatcher})}processDataTypeDefinition(e,t,o,s){let i;const n=e.extendsDataType;if(e.columnTypes&&(this.isColumnTypeOverrideInDataTypeDefinitions=!0),e.extendsDataType===e.baseDataType){let r=s[n];const l=t[n];if(r&&l&&(r=l),!Vs(e,r,n))return;i=Ws(r,e)}else{if(o.includes(n)){I(44);return}const r=t[n];if(!Vs(e,r,n))return;const l=this.processDataTypeDefinition(r,t,[...o,n],s);if(!l)return;i=Ws(l,e)}return{...i,groupSafeValueFormatter:Ns(i,this.gos)}}updateColDefAndGetColumnType(e,t,o){let{cellDataType:s}=t;const{field:i}=t;if(s===void 0&&(s=e.cellDataType),(s==null||s===!0)&&(s=this.canInferCellDataType(e,t)?this.inferCellDataType(i,o):!1),!s){e.cellDataType=!1;return}const n=this.dataTypeDefinitions[s];if(!n){I(47,{cellDataType:s});return}return e.cellDataType=s,n.groupSafeValueFormatter&&(e.valueFormatter=n.groupSafeValueFormatter),n.valueParser&&(e.valueParser=n.valueParser),n.suppressDefaultProperties||this.setColDefPropertiesForBaseDataType(e,s,n,o),n.columnTypes}addColumnListeners(e){if(!this.isPendingInference)return;const t=this.columnStateUpdatesPendingInference[e.getColId()];if(!t)return;const o=s=>{t.add(s.key)};e.__addEventListener("columnStateUpdated",o),this.columnStateUpdateListenerDestroyFuncs.push(()=>e.__removeEventListener("columnStateUpdated",o))}canInferCellDataType(e,t){const{gos:o}=this;if(!Vo(o))return!1;const s={cellRenderer:!0,valueGetter:!0,valueParser:!0,refData:!0};if(mo(t,s))return!1;const i=t.type===null?e.type:t.type;if(i){const n=o.get("columnTypes")??{};if(kt(i).some(l=>{const a=n[l.trim()];return a&&mo(a,s)}))return!1}return!mo(e,s)}inferCellDataType(e,t){if(!e)return;let o;const s=this.getInitialData();if(s){const i=e.indexOf(".")>=0&&!this.gos.get("suppressFieldDotNotation");o=mt(s,e,i)}else this.initWaitForRowData(t);if(o!=null)return Object.keys(this.dataTypeMatchers).find(i=>this.dataTypeMatchers[i](o))??"object"}getInitialData(){var t;const e=this.gos.get("rowData");if(e!=null&&e.length)return e[0];if(this.initialData)return this.initialData;{const o=(t=this.beans.rowModel.rootNode)==null?void 0:t.allLeafChildren;if(o!=null&&o.length)return o[0].data}return null}initWaitForRowData(e){if(this.columnStateUpdatesPendingInference[e]=new Set,this.isPendingInference)return;this.isPendingInference=!0;const t=this.isColumnTypeOverrideInDataTypeDefinitions,{colAutosize:o,eventSvc:s}=this.beans;t&&o&&(o.shouldQueueResizeOperations=!0);const[i]=this.addManagedEventListeners({rowDataUpdateStarted:n=>{const{firstRowData:r}=n;r&&(i==null||i(),this.isPendingInference=!1,this.processColumnsPendingInference(r,t),this.columnStateUpdatesPendingInference={},t&&(o==null||o.processResizeOperations()),s.dispatchEvent({type:"dataTypesInferred"}))}})}processColumnsPendingInference(e,t){this.initialData=e;const o=[];this.destroyColumnStateUpdateListeners();const s={},i={};for(const n of Object.keys(this.columnStateUpdatesPendingInference)){const r=this.columnStateUpdatesPendingInference[n],l=this.colModel.getCol(n);if(!l)return;const a=l.getColDef();if(!this.resetColDefIntoCol(l,"cellDataTypeInferred"))return;const d=l.getColDef();if(t&&d.type&&d.type!==a.type){const c=Zh(l,r);c.rowGroup&&c.rowGroupIndex==null&&(s[n]=c),c.pivot&&c.pivotIndex==null&&(i[n]=c),o.push(c)}}t&&o.push(...this.generateColumnStateForRowGroupAndPivotIndexes(s,i)),o.length&&on(this.beans,{state:o},"cellDataTypeInferred"),this.initialData=null}generateColumnStateForRowGroupAndPivotIndexes(e,t){const o={},{rowGroupColsSvc:s,pivotColsSvc:i}=this.beans;return s==null||s.restoreColumnOrder(o,e),i==null||i.restoreColumnOrder(o,t),Object.values(o)}resetColDefIntoCol(e,t){const o=e.getUserProvidedColDef();if(!o)return!1;const s=Eo(this.beans,o,e.getColId());return e.setColDef(s,o,t),!0}checkObjectValueHandlers(e){const t=this.dataTypeDefinitions.object,o=e.object;this.hasObjectValueParser=t.valueParser!==o.valueParser,this.hasObjectValueFormatter=t.valueFormatter!==o.valueFormatter}getDateStringTypeDefinition(e){const{dateString:t}=this.dataTypeDefinitions;return e?this.getDataTypeDefinition(e)??t:t}getDateParserFunction(e){return this.getDateStringTypeDefinition(e).dateParser}getDateFormatterFunction(e){return this.getDateStringTypeDefinition(e).dateFormatter}getDataTypeDefinition(e){const t=e.getColDef();if(t.cellDataType)return this.dataTypeDefinitions[t.cellDataType]}getBaseDataType(e){var t;return(t=this.getDataTypeDefinition(e))==null?void 0:t.baseDataType}checkType(e,t){var s;if(t==null)return!0;const o=(s=this.getDataTypeDefinition(e))==null?void 0:s.dataTypeMatcher;return o?o(t):!0}validateColDef(e){const t=o=>I(48,{property:o});if(e.cellDataType==="object"){const{object:o}=this.dataTypeDefinitions;e.valueFormatter===o.groupSafeValueFormatter&&!this.hasObjectValueFormatter&&t("Formatter"),e.editable&&e.valueParser===o.valueParser&&!this.hasObjectValueParser&&t("Parser")}}getFormatValue(e){return this.formatValueFuncs[e]}isColPendingInference(e){return this.isPendingInference&&!!this.columnStateUpdatesPendingInference[e]}setColDefPropertiesForBaseDataType(e,t,o,s){var n;const i=this.formatValueFuncs[t];switch(o.baseDataType){case"number":{e.cellEditor="agNumberCellEditor";break}case"boolean":{e.cellEditor="agCheckboxCellEditor",e.cellRenderer="agCheckboxCellRenderer",e.getFindText=()=>null,e.suppressKeyboardEvent=r=>!!r.colDef.editable&&r.event.key===m.SPACE;break}case"date":{e.cellEditor="agDateCellEditor",e.keyCreator=i;break}case"dateString":{e.cellEditor="agDateStringCellEditor",e.keyCreator=i;break}case"object":{e.cellEditorParams={useFormatter:!0},e.comparator=(r,l)=>{const a=this.colModel.getColDefCol(s),d=a==null?void 0:a.getColDef();if(!a||!d)return 0;const c=r==null?"":i({column:a,node:null,value:r}),h=l==null?"":i({column:a,node:null,value:l});return c===h?0:c>h?1:-1},e.keyCreator=i;break}}(n=this.beans.filterManager)==null||n.setColDefPropertiesForDataType(e,o,i)}getDefaultDataTypes(){const e=o=>!!o.match("^\\d{4}-\\d{2}-\\d{2}$"),t=this.getLocaleTextFunc();return{number:{baseDataType:"number",valueParser:o=>{var s,i;return((i=(s=o.newValue)==null?void 0:s.trim)==null?void 0:i.call(s))===""?null:Number(o.newValue)},valueFormatter:o=>o.value==null?"":typeof o.value!="number"||isNaN(o.value)?t("invalidNumber","Invalid Number"):String(o.value),dataTypeMatcher:o=>typeof o=="number"},text:{baseDataType:"text",valueParser:o=>o.newValue===""?null:xo(o.newValue),dataTypeMatcher:o=>typeof o=="string"},boolean:{baseDataType:"boolean",valueParser:o=>{var s,i;return o.newValue==null?o.newValue:((i=(s=o.newValue)==null?void 0:s.trim)==null?void 0:i.call(s))===""?null:String(o.newValue).toLowerCase()==="true"},valueFormatter:o=>o.value==null?"":String(o.value),dataTypeMatcher:o=>typeof o=="boolean"},date:{baseDataType:"date",valueParser:o=>As(o.newValue==null?null:String(o.newValue)),valueFormatter:o=>o.value==null?"":!(o.value instanceof Date)||isNaN(o.value.getTime())?t("invalidDate","Invalid Date"):Ms(o.value,!1)??"",dataTypeMatcher:o=>o instanceof Date},dateString:{baseDataType:"dateString",dateParser:o=>As(o)??void 0,dateFormatter:o=>Ms(o??null,!1)??void 0,valueParser:o=>e(String(o.newValue))?o.newValue:null,valueFormatter:o=>e(String(o.value))?o.value:"",dataTypeMatcher:o=>typeof o=="string"&&e(o)},object:{baseDataType:"object",valueParser:()=>null,valueFormatter:o=>xo(o.value)??""}}}destroyColumnStateUpdateListeners(){this.columnStateUpdateListenerDestroyFuncs.forEach(e=>e()),this.columnStateUpdateListenerDestroyFuncs=[]}destroy(){this.dataTypeDefinitions={},this.dataTypeMatchers={},this.formatValueFuncs={},this.columnStateUpdatesPendingInference={},this.destroyColumnStateUpdateListeners(),super.destroy()}};function Ws(e,t){const o={...e,...t};return e.columnTypes&&t.columnTypes&&t.appendColumnTypes&&(o.columnTypes=[...kt(e.columnTypes),...kt(t.columnTypes)]),o}function Vs(e,t,o){return t?t.baseDataType!==e.baseDataType?(I(46),!1):!0:(I(45,{parentCellDataType:o}),!1)}function Ns(e,t){if(e.valueFormatter)return o=>{var s,i;if((s=o.node)!=null&&s.group){const n=(o.colDef.pivotValueColumn??o.column).getAggFunc();if(n){if(n==="first"||n==="last")return e.valueFormatter(o);if(e.baseDataType==="number"&&n!=="count"){if(typeof o.value=="number")return e.valueFormatter(o);if(typeof o.value=="object"){if(!o.value)return;if("toNumber"in o.value)return e.valueFormatter({...o,value:o.value.toNumber()});if("value"in o.value)return e.valueFormatter({...o,value:o.value.value})}}return}if(t.get("groupDisplayType")==="groupRows"&&!t.get("treeData"))return}else if(t.get("groupHideOpenParents")&&o.column.isRowGroupActive()&&typeof o.value=="string"&&!((i=e.dataTypeMatcher)!=null&&i.call(e,o.value)))return;return e.valueFormatter(o)}}function qh(e,t,o,s){if(!t[o])return!1;const i=e[o];return i===null?(t[o]=!1,!1):s===void 0?!!i:i===s}function mo(e,t){return[["cellRenderer","agSparklineCellRenderer"],["valueGetter",void 0],["valueParser",void 0],["refData",void 0]].some(([o,s])=>qh(e,t,o,s))}function Zh(e,t){const o=Hl(e);return t.forEach(s=>{delete o[s],s==="rowGroup"?delete o.rowGroupIndex:s==="pivot"&&delete o.pivotIndex}),o}var Yh={moduleName:"DataType",version:G,beans:[$h],dependsOn:[Kh]},Qh={moduleName:"ColumnFlex",version:G,beans:[jh]};function Xh(e){if(!e||e==null)return null;const t=/([a-z])([A-Z])/g,o=/([A-Z]+)([A-Z])([a-z])/g;return e.replace(t,"$1 $2").replace(o,"$1 $2$3").replace(/\./g," ").split(" ").map(i=>i.substring(0,1).toUpperCase()+(i.length>1?i.substring(1,i.length):"")).join(" ")}var Jh=class extends v{constructor(){super(...arguments),this.beanName="colNames"}getDisplayNameForColumn(e,t,o=!1){if(!e)return null;const s=this.getHeaderName(e.getColDef(),e,null,null,t),{aggColNameSvc:i}=this.beans;return o&&i?i.getHeaderName(e,s):s}getDisplayNameForProvidedColumnGroup(e,t,o){const s=t==null?void 0:t.getColGroupDef();return s?this.getHeaderName(s,null,e,t,o):null}getDisplayNameForColumnGroup(e,t){return this.getDisplayNameForProvidedColumnGroup(e,e.getProvidedColumnGroup(),t)}getHeaderName(e,t,o,s,i){var r;const n=e.headerValueGetter;if(n){const l=A(this.gos,{colDef:e,column:t,columnGroup:o,providedColumnGroup:s,location:i});return typeof n=="function"?n(l):typeof n=="string"?((r=this.beans.expressionSvc)==null?void 0:r.evaluate(n,l))??null:""}else{if(e.headerName!=null)return e.headerName;if(e.field)return Xh(e.field)}return""}},eu=class extends v{constructor(){super(...arguments),this.beanName="colViewport",this.colsWithinViewport=[],this.headerColsWithinViewport=[],this.colsWithinViewportHash="",this.rowsOfHeadersToRenderLeft={},this.rowsOfHeadersToRenderRight={},this.rowsOfHeadersToRenderCenter={}}wireBeans(e){this.visibleCols=e.visibleCols,this.colModel=e.colModel}postConstruct(){this.suppressColumnVirtualisation=this.gos.get("suppressColumnVirtualisation")}setScrollPosition(e,t,o=!1){const{visibleCols:s}=this,i=s.isBodyWidthDirty;if(!(e===this.scrollWidth&&t===this.scrollPosition&&!i)){if(this.scrollWidth=e,this.scrollPosition=t,s.isBodyWidthDirty=!0,this.gos.get("enableRtl")){const r=s.bodyWidth;this.viewportLeft=r-t-e,this.viewportRight=r-t}else this.viewportLeft=t,this.viewportRight=e+t;this.colModel.ready&&this.checkViewportColumns(o)}}getHeadersToRender(e,t){let o;switch(e){case"left":o=this.rowsOfHeadersToRenderLeft[t];break;case"right":o=this.rowsOfHeadersToRenderRight[t];break;default:o=this.rowsOfHeadersToRenderCenter[t];break}return o||[]}extractViewportColumns(){const e=this.visibleCols.centerCols;this.isColumnVirtualisationSuppressed()?(this.colsWithinViewport=e,this.headerColsWithinViewport=e):(this.colsWithinViewport=e.filter(this.isColumnInRowViewport.bind(this)),this.headerColsWithinViewport=e.filter(this.isColumnInHeaderViewport.bind(this)))}isColumnVirtualisationSuppressed(){return this.suppressColumnVirtualisation||this.viewportRight===0}clear(e){this.rowsOfHeadersToRenderLeft={},this.rowsOfHeadersToRenderRight={},this.rowsOfHeadersToRenderCenter={},e||(this.colsWithinViewportHash="")}isColumnInHeaderViewport(e){return e.isAutoHeaderHeight()||tu(e)?!0:this.isColumnInRowViewport(e)}isColumnInRowViewport(e){if(e.isAutoHeight())return!0;const t=e.getLeft()||0,o=t+e.getActualWidth(),s=this.viewportLeft-200,i=this.viewportRight+200,n=ti&&o>i;return!n&&!r}getViewportColumns(){const{leftCols:e,rightCols:t}=this.visibleCols;return this.colsWithinViewport.concat(e).concat(t)}getColsWithinViewport(e){if(!this.colModel.colSpanActive)return this.colsWithinViewport;const t=n=>{const r=n.getLeft();return k(r)&&r>this.viewportLeft},o=this.isColumnVirtualisationSuppressed()?void 0:this.isColumnInRowViewport.bind(this),{visibleCols:s}=this,i=s.centerCols;return s.getColsForRow(e,i,o,t)}checkViewportColumns(e=!1){this.extractViewport()&&this.eventSvc.dispatchEvent({type:"virtualColumnsChanged",afterScroll:e})}calculateHeaderRows(){this.clear(!0);const e={},{leftCols:t,rightCols:o,treeLeft:s,treeRight:i,treeCenter:n}=this.visibleCols;this.headerColsWithinViewport.concat(t).concat(o).forEach(a=>e[a.getId()]=!0);const l=(a,d,c)=>{let h=!1;for(let u=0;u`${s.getId()}-${s.getPinned()||"normal"}`;this.extractViewportColumns();const t=this.getViewportColumns().map(e).join("#"),o=this.colsWithinViewportHash!==t;return o&&(this.colsWithinViewportHash=t,this.calculateHeaderRows()),o}};function tu(e){for(;e;){if(e.isAutoHeaderHeight())return!0;e=e.getParent()}return!1}var ou=class extends v{constructor(){super(...arguments),this.beanName="agCompUtils"}adaptFunction(e,t){if(!e.cellRenderer)return null;class o{refresh(){return!1}getGui(){return this.eGui}init(i){const n=t(i),r=typeof n;if(r==="string"||r==="number"||r==="boolean"){this.eGui=Bo(""+n+"");return}if(n==null){this.eGui=q({tag:"span"});return}this.eGui=n}}return o}},su={moduleName:"CellRendererFunction",version:G,beans:[ou]},iu=class extends v{constructor(){super(...arguments),this.beanName="registry",this.agGridDefaults={},this.agGridDefaultParams={},this.jsComps={},this.dynamicBeans={},this.selectors={},this.icons={}}postConstruct(){const e=this.gos.get("components");if(e!=null)for(const t of Object.keys(e))this.jsComps[t]=e[t]}registerModule(e){const{icons:t,userComponents:o,dynamicBeans:s,selectors:i}=e;if(o){const n=(r,l,a)=>{this.agGridDefaults[r]=l,a&&(this.agGridDefaultParams[r]=a)};for(const r of Object.keys(o)){const l=o[r];typeof l=="object"?n(r,l.classImp,l.params):n(r,l)}}if(s)for(const n of Object.keys(s))this.dynamicBeans[n]=s[n];if(i==null||i.forEach(n=>{this.selectors[n.selector]=n}),t)for(const n of Object.keys(t))this.icons[n]=t[n]}getUserComponent(e,t){var l;const o=(a,d,c)=>({componentFromFramework:d,component:a,params:c}),{frameworkOverrides:s}=this.beans,i=s.frameworkComponent(t,this.gos.get("components"));if(i!=null)return o(i,!0);const n=this.jsComps[t];if(n){const a=s.isFrameworkComponent(n);return o(n,a)}const r=this.agGridDefaults[t];return r?o(r,!1,this.agGridDefaultParams[t]):((l=this.beans.validation)==null||l.missingUserComponent(e,t,this.agGridDefaults,this.jsComps),null)}createDynamicBean(e,t,...o){const s=this.dynamicBeans[e];if(s==null){if(t)throw new Error(Li(256));return}return new s(...o)}getSelector(e){return this.selectors[e]}getIcon(e){return this.icons[e]}},nu=23,ru=class extends v{constructor(){super(...arguments),this.beanName="ctrlsSvc",this.params={},this.ready=!1,this.readyCallbacks=[]}postConstruct(){var e,t;this.addEventListener("ready",()=>{this.updateReady(),this.ready&&(this.readyCallbacks.forEach(o=>o(this.params)),this.readyCallbacks.length=0)},((t=(e=this.beans.frameworkOverrides).runWhenReadyAsync)==null?void 0:t.call(e))??!1)}updateReady(){const e=Object.values(this.params);this.ready=e.length===nu&&e.every(t=>(t==null?void 0:t.isAlive())??!1)}whenReady(e,t){this.ready?t(this.params):this.readyCallbacks.push(t),e.addDestroyFunc(()=>{const o=this.readyCallbacks.indexOf(t);o>=0&&this.readyCallbacks.splice(o,1)})}register(e,t){this.params[e]=t,this.updateReady(),this.ready&&this.dispatchLocalEvent({type:"ready"}),t.addDestroyFunc(()=>{this.updateReady()})}get(e){return this.params[e]}getGridBodyCtrl(){return this.params.gridBodyCtrl}getHeaderRowContainerCtrls(){const{leftHeader:e,centerHeader:t,rightHeader:o}=this.params;return[e,o,t]}getHeaderRowContainerCtrl(e){const t=this.params;switch(e){case"left":return t.leftHeader;case"right":return t.rightHeader;default:return t.centerHeader}}getScrollFeature(){return this.getGridBodyCtrl().scrollFeature}},lu=':where(.ag-root-wrapper,.ag-popup,.ag-dnd-ghost,.ag-chart),:where(.ag-root-wrapper,.ag-popup,.ag-dnd-ghost,.ag-chart) :where([class^=ag-]){box-sizing:border-box;&:after,&:before{box-sizing:border-box}&:where(div,span,label):focus-visible{box-shadow:inset var(--ag-focus-shadow);outline:none}}:where(.ag-root-wrapper,.ag-popup,.ag-dnd-ghost,.ag-chart) :where([class^=ag-]) ::-ms-clear{display:none}.ag-aria-description-container{border:0;z-index:9999;clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.ag-hidden{display:none!important}.ag-invisible{visibility:hidden!important}.ag-unselectable{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-selectable{-webkit-user-select:text;-moz-user-select:text;user-select:text}.ag-tab-guard{display:block;height:0;position:absolute;width:0}:where(.ag-virtual-list-viewport) .ag-tab-guard{position:sticky}.ag-tab-guard-top{top:1px}.ag-tab-guard-bottom{bottom:1px}.ag-shake-left-to-right{animation-direction:alternate;animation-duration:.2s;animation-iteration-count:infinite;animation-name:ag-shake-left-to-right}@keyframes ag-shake-left-to-right{0%{padding-left:6px;padding-right:2px}to{padding-left:2px;padding-right:6px}}.ag-body-horizontal-scroll-viewport,.ag-body-vertical-scroll-viewport,.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport,.ag-virtual-list-viewport{flex:1 1 auto;height:100%;min-width:0;overflow:hidden;position:relative}.ag-viewport{position:relative}.ag-spanning-container{position:absolute;top:0;z-index:1}.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport{overflow-x:auto;-ms-overflow-style:none!important;scrollbar-width:none!important;&::-webkit-scrollbar{display:none!important}}.ag-body-viewport{display:flex;overflow-x:hidden;&:where(.ag-layout-normal){overflow-y:auto;-webkit-overflow-scrolling:touch}}.ag-floating-bottom-container,.ag-floating-top-container,.ag-sticky-bottom-container,.ag-sticky-top-container{min-height:1px}.ag-center-cols-viewport{min-height:100%;width:100%}.ag-body-horizontal-scroll-viewport{overflow-x:scroll}.ag-body-vertical-scroll-viewport{overflow-y:scroll}.ag-virtual-list-viewport{overflow:auto;width:100%}.ag-body-container,.ag-body-horizontal-scroll-container,.ag-body-vertical-scroll-container,.ag-center-cols-container,.ag-floating-bottom-container,.ag-floating-bottom-full-width-container,.ag-floating-top-container,.ag-full-width-container,.ag-header-container,.ag-pinned-left-cols-container,.ag-pinned-right-cols-container,.ag-sticky-bottom-container,.ag-sticky-top-container,.ag-virtual-list-container{position:relative}.ag-floating-bottom-container,.ag-floating-top-container,.ag-header-container,.ag-pinned-left-floating-bottom,.ag-pinned-left-floating-top,.ag-pinned-right-floating-bottom,.ag-pinned-right-floating-top,.ag-sticky-bottom-container,.ag-sticky-top-container{height:100%;white-space:nowrap}.ag-center-cols-container,.ag-pinned-right-cols-container{display:block}.ag-body-horizontal-scroll-container{height:100%}.ag-body-vertical-scroll-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container,.ag-full-width-container,.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{pointer-events:none;position:absolute;top:0}:where(.ag-ltr) .ag-floating-bottom-full-width-container,:where(.ag-ltr) .ag-floating-top-full-width-container,:where(.ag-ltr) .ag-full-width-container,:where(.ag-ltr) .ag-sticky-bottom-full-width-container,:where(.ag-ltr) .ag-sticky-top-full-width-container{left:0}:where(.ag-rtl) .ag-floating-bottom-full-width-container,:where(.ag-rtl) .ag-floating-top-full-width-container,:where(.ag-rtl) .ag-full-width-container,:where(.ag-rtl) .ag-sticky-bottom-full-width-container,:where(.ag-rtl) .ag-sticky-top-full-width-container{right:0}.ag-full-width-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container{display:inline-block;height:100%;overflow:hidden;width:100%}.ag-virtual-list-container{overflow:hidden}.ag-body{display:flex;flex:1 1 auto;flex-direction:row!important;min-height:0;position:relative}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:flex;min-height:0;min-width:0;position:relative;&:where(.ag-scrollbar-invisible){bottom:0;position:absolute;&:where(.ag-apple-scrollbar){opacity:0;transition:opacity .4s;visibility:hidden;&:where(.ag-scrollbar-scrolling,.ag-scrollbar-active){opacity:1;visibility:visible}}}}.ag-body-horizontal-scroll{width:100%;&:where(.ag-scrollbar-invisible){left:0;right:0}}.ag-body-vertical-scroll{height:100%;&:where(.ag-scrollbar-invisible){top:0;z-index:10}}:where(.ag-ltr) .ag-body-vertical-scroll{&:where(.ag-scrollbar-invisible){right:0}}:where(.ag-rtl) .ag-body-vertical-scroll{&:where(.ag-scrollbar-invisible){left:0}}.ag-force-vertical-scroll{overflow-y:scroll!important}.ag-horizontal-left-spacer,.ag-horizontal-right-spacer{height:100%;min-width:0;overflow-x:scroll;&:where(.ag-scroller-corner){overflow-x:hidden}}:where(.ag-row-animation) .ag-row{transition:transform .4s,top .4s,opacity .2s;&:where(.ag-after-created){transition:transform .4s,top .4s,height .4s,opacity .2s}}:where(.ag-row-animation.ag-prevent-animation) .ag-row{transition:none!important;&:where(.ag-row.ag-after-created){transition:none!important}}:where(.ag-row-no-animation) .ag-row{transition:none}.ag-row-loading{align-items:center;display:flex}.ag-row-position-absolute{position:absolute}.ag-row-position-relative{position:relative}.ag-full-width-row{overflow:hidden;pointer-events:all}.ag-row-inline-editing{z-index:1}.ag-row-dragging{z-index:2}.ag-stub-cell{align-items:center;display:flex}.ag-cell{display:inline-block;height:100%;position:absolute;white-space:nowrap;&:focus-visible{box-shadow:none}}.ag-cell-value{flex:1 1 auto}.ag-cell-value,.ag-group-value{overflow:hidden;text-overflow:ellipsis}.ag-cell-wrap-text{white-space:normal;word-break:break-word}:where(.ag-cell) .ag-icon{display:inline-block;vertical-align:middle}.ag-floating-top{display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}:where(.ag-floating-top:not(.ag-invisible)){border-bottom:var(--ag-pinned-row-border)}.ag-floating-bottom{display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}:where(.ag-floating-bottom:not(.ag-invisible)){border-top:var(--ag-pinned-row-border)}.ag-sticky-bottom,.ag-sticky-top{background-color:var(--ag-background-color);display:flex;height:0;overflow:hidden;position:absolute;width:100%;z-index:1}.ag-opacity-zero{opacity:0!important}.ag-cell-label-container{align-items:center;display:flex;flex-direction:row-reverse;height:100%;justify-content:space-between;width:100%}:where(.ag-right-aligned-header){.ag-cell-label-container{flex-direction:row}.ag-header-cell-text{text-align:end}}.ag-column-group-icons{display:block;>*{cursor:pointer}}:where(.ag-ltr){direction:ltr;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row}}:where(.ag-rtl){direction:rtl;text-align:right;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row-reverse}.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{display:block}}:where(.ag-rtl){.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(180deg)}}:where(.ag-rtl){.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(-180deg)}}.ag-measurement-container{height:0;overflow:hidden;visibility:hidden;width:0}.ag-measurement-element-border{display:inline-block;&:before{border-left:var(--ag-internal-measurement-border);content:"";display:block}}.ag-group{position:relative;width:100%}.ag-group-title-bar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-title{display:inline;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.ag-group-title-bar) .ag-group-title{cursor:default}.ag-group-toolbar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-container{display:flex}.ag-disabled .ag-group-container{pointer-events:none}.ag-disabled-group-container,.ag-disabled-group-title-bar{opacity:.5}.ag-group-container-horizontal{flex-flow:row wrap}.ag-group-container-vertical{flex-direction:column}.ag-group-title-bar-icon{cursor:pointer;flex:none}:where(.ag-ltr) .ag-group-title-bar-icon{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-group-title-bar-icon{margin-left:var(--ag-spacing)}:where(.ag-group-item-alignment-stretch) .ag-group-item{align-items:stretch}:where(.ag-group-item-alignment-start) .ag-group-item{align-items:flex-start}:where(.ag-group-item-alignment-end) .ag-group-item{align-items:flex-end}.ag-popup-child{top:0;z-index:5;&:where(:not(.ag-tooltip-custom)){box-shadow:var(--ag-popup-shadow)}}.ag-popup-editor{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-large-text-input{display:block}:where(.ag-ltr) .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-left:var(--ag-row-group-indent-size)}:where(.ag-rtl) .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-right:var(--ag-row-group-indent-size)}:where(.ag-ltr) .ag-row-group-leaf-indent{margin-left:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}:where(.ag-rtl) .ag-row-group-leaf-indent{margin-right:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}.ag-value-change-delta{padding:0 2px}.ag-value-change-delta-up{color:var(--ag-value-change-delta-up-color)}.ag-value-change-delta-down{color:var(--ag-value-change-delta-down-color)}.ag-value-change-value{background-color:transparent;border-radius:1px;padding-left:1px;padding-right:1px;transition:background-color 1s}.ag-value-change-value-highlight{background-color:var(--ag-value-change-value-highlight-background-color);transition:background-color .1s}.ag-cell-data-changed{background-color:var(--ag-value-change-value-highlight-background-color)!important}.ag-cell-data-changed-animation{background-color:transparent}.ag-cell-highlight{background-color:var(--ag-range-selection-highlight-color)!important}.ag-row,.ag-spanned-row{color:var(--ag-cell-text-color);font-family:var(--ag-cell-font-family);font-size:var(--ag-data-font-size);white-space:nowrap;--ag-internal-content-line-height:calc(min(var(--ag-row-height), var(--ag-line-height, 1000px)) - var(--ag-internal-row-border-width, 1px) - 2px)}.ag-row{background-color:var(--ag-background-color);border-bottom:var(--ag-row-border);height:var(--ag-row-height);width:100%}:where(.ag-body-vertical-content-no-gap>div>div>div,.ag-body-vertical-content-no-gap>div>div>div>div)>.ag-row-last{border-bottom-color:transparent}.ag-sticky-bottom{border-top:var(--ag-row-border);box-sizing:content-box!important}.ag-group-contracted,.ag-group-expanded{cursor:pointer}.ag-cell,.ag-full-width-row .ag-cell-wrapper.ag-row-group{border:1px solid transparent;line-height:var(--ag-internal-content-line-height);-webkit-font-smoothing:subpixel-antialiased}:where(.ag-ltr) .ag-cell{border-right:var(--ag-column-border)}:where(.ag-rtl) .ag-cell{border-left:var(--ag-column-border)}.ag-spanned-cell-wrapper{background-color:var(--ag-background-color);position:absolute}.ag-spanned-cell-wrapper>.ag-spanned-cell{display:block;position:relative}:where(.ag-ltr) :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-right-color:transparent}:where(.ag-rtl) :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-left-color:transparent}.ag-cell-wrapper{align-items:center;display:flex;>:where(:not(.ag-cell-value,.ag-group-value)){align-items:center;display:flex;height:var(--ag-internal-content-line-height)}&:where(.ag-row-group){align-items:flex-start}:where(.ag-full-width-row) &:where(.ag-row-group){align-items:center;height:100%}}:where(.ag-ltr) .ag-cell-wrapper{padding-left:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}:where(.ag-rtl) .ag-cell-wrapper{padding-right:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}:where(.ag-cell-wrap-text:not(.ag-cell-auto-height)) .ag-cell-wrapper{align-items:normal;height:100%;:where(.ag-cell-value){height:100%}}:where(.ag-ltr) .ag-row>.ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}:where(.ag-rtl) .ag-row>.ag-cell-wrapper.ag-row-group{padding-right:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-cell-focus:not(.ag-cell-range-selected):focus-within,.ag-cell-range-single-cell,.ag-cell-range-single-cell.ag-cell-range-handle,.ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),.ag-context-menu-open .ag-full-width-row.ag-row-focus .ag-cell-wrapper.ag-row-group,.ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group{border:1px solid;border-color:var(--ag-range-selection-border-color);border-style:var(--ag-range-selection-border-style);outline:initial}.ag-full-width-row.ag-row-focus:focus{box-shadow:none}:where(.ag-ltr) .ag-group-contracted,:where(.ag-ltr) .ag-group-expanded,:where(.ag-ltr) .ag-row-drag,:where(.ag-ltr) .ag-selection-checkbox{margin-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-group-contracted,:where(.ag-rtl) .ag-group-expanded,:where(.ag-rtl) .ag-row-drag,:where(.ag-rtl) .ag-selection-checkbox{margin-left:var(--ag-cell-widget-spacing)}:where(.ag-ltr) .ag-group-child-count{margin-left:3px}:where(.ag-rtl) .ag-group-child-count{margin-right:3px}.ag-row-highlight-above:after,.ag-row-highlight-below:after{background-color:var(--ag-range-selection-border-color);content:"";height:1px;position:absolute;width:calc(100% - 1px)}:where(.ag-ltr) .ag-row-highlight-above:after,:where(.ag-ltr) .ag-row-highlight-below:after{left:1px}:where(.ag-rtl) .ag-row-highlight-above:after,:where(.ag-rtl) .ag-row-highlight-below:after{right:1px}.ag-row-highlight-above:after{top:0}.ag-row-highlight-below:after{bottom:0}.ag-row-odd{background-color:var(--ag-odd-row-background-color)}.ag-row-selected:before{background-color:var(--ag-selected-row-background-color);content:"";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-full-width-row.ag-row-group:before,.ag-row-hover:not(.ag-full-width-row):before{background-color:var(--ag-row-hover-color);content:"";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-row-selected:before{background-color:var(--ag-row-hover-color);background-image:linear-gradient(var(--ag-selected-row-background-color),var(--ag-selected-row-background-color))}.ag-row.ag-full-width-row.ag-row-group>*{position:relative}.ag-column-hover{background-color:var(--ag-column-hover-color)}.ag-header-range-highlight{background-color:var(--ag-range-header-highlight-color)}.ag-right-aligned-cell{font-variant-numeric:tabular-nums}:where(.ag-ltr) .ag-right-aligned-cell{text-align:right}:where(.ag-rtl) .ag-right-aligned-cell{text-align:left}.ag-right-aligned-cell .ag-cell-value,.ag-right-aligned-cell .ag-group-value{margin-left:auto}:where(.ag-ltr) .ag-cell:not(.ag-cell-inline-editing),:where(.ag-ltr) .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level));padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}:where(.ag-rtl) .ag-cell:not(.ag-cell-inline-editing),:where(.ag-rtl) .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-row>.ag-cell-wrapper{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}.ag-row-dragging{cursor:move;opacity:.5}.ag-details-row{background-color:var(--ag-background-color);padding:calc(var(--ag-spacing)*3.75)}.ag-layout-auto-height,.ag-layout-print{.ag-center-cols-container,.ag-center-cols-viewport{min-height:150px}}.ag-overlay-loading-wrapper{background-color:var(--ag-modal-overlay-background-color)}.ag-skeleton-container{align-content:center;height:100%;width:100%}.ag-skeleton-effect{animation:ag-skeleton-loading 1.5s ease-in-out .5s infinite;background-color:var(--ag-row-loading-skeleton-effect-color);border-radius:.25rem;height:1em;width:100%}:where(.ag-ltr) .ag-right-aligned-cell .ag-skeleton-effect{margin-left:auto}:where(.ag-rtl) .ag-right-aligned-cell .ag-skeleton-effect{margin-right:auto}@keyframes ag-skeleton-loading{0%{opacity:1}50%{opacity:.4}to{opacity:1}}.ag-loading{align-items:center;display:flex;height:100%}:where(.ag-ltr) .ag-loading{padding-left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-loading{padding-right:var(--ag-cell-horizontal-padding)}:where(.ag-ltr) .ag-loading-icon{padding-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-loading-icon{padding-left:var(--ag-cell-widget-spacing)}.ag-icon-loading{animation-duration:1s;animation-iteration-count:infinite;animation-name:spin;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ag-input-wrapper,.ag-picker-field-wrapper{align-items:center;display:flex;flex:1 1 auto;line-height:normal;position:relative}.ag-input-field{align-items:center;display:flex;flex-direction:row}.ag-input-field-input:where(:not([type=checkbox],[type=radio])){flex:1 1 auto;min-width:0;width:100%}.ag-header{background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border);color:var(--ag-header-text-color);display:flex;font-family:var(--ag-header-font-family);font-size:var(--ag-header-font-size);font-weight:var(--ag-header-font-weight);overflow:hidden;white-space:nowrap;width:100%}.ag-header-row{height:var(--ag-header-height);position:absolute}.ag-floating-filter-button-button,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-expand-icon,.ag-panel-title-bar-button,:where(.ag-header-cell-sortable) .ag-header-cell-label{cursor:pointer}:where(.ag-ltr) .ag-header-expand-icon{margin-left:4px}:where(.ag-rtl) .ag-header-expand-icon{margin-right:4px}.ag-header-row:where(:not(:first-child)){:where(.ag-header-cell:not(.ag-header-span-height.ag-header-span-total,.ag-header-parent-hidden),.ag-header-group-cell.ag-header-group-cell-with-group){border-top:var(--ag-header-row-border)}}.ag-header-row:where(:not(.ag-header-row-column-group)){overflow:hidden}:where(.ag-header.ag-header-allow-overflow) .ag-header-row{overflow:visible}.ag-header-cell{display:inline-flex;overflow:hidden}.ag-header-group-cell{contain:paint;display:flex}.ag-header-cell,.ag-header-group-cell{align-items:center;gap:var(--ag-cell-widget-spacing);height:100%;padding:0 var(--ag-cell-horizontal-padding);position:absolute}@property --ag-internal-moving-color{syntax:"";inherits:false;initial-value:transparent}@property --ag-internal-hover-color{syntax:"";inherits:false;initial-value:transparent}.ag-header-cell:where(:not(.ag-floating-filter)),.ag-header-group-cell{&:before{background-image:linear-gradient(var(--ag-internal-hover-color),var(--ag-internal-hover-color)),linear-gradient(var(--ag-internal-moving-color),var(--ag-internal-moving-color));content:"";inset:0;position:absolute;--ag-internal-moving-color:transparent;--ag-internal-hover-color:transparent;transition:--ag-internal-moving-color var(--ag-header-cell-background-transition-duration),--ag-internal-hover-color var(--ag-header-cell-background-transition-duration)}&:where(:hover):before{--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}&:where(.ag-header-cell-moving):before{--ag-internal-moving-color:var(--ag-header-cell-moving-background-color);--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}}:where(.ag-header-cell:not(.ag-floating-filter) *,.ag-header-group-cell *){position:relative;z-index:1}.ag-header-cell-menu-button:where(:not(.ag-header-menu-always-show)){opacity:0;transition:opacity .2s}.ag-header-cell-filter-button,:where(.ag-header-cell.ag-header-active) .ag-header-cell-menu-button{opacity:1}.ag-header-cell-label,.ag-header-group-cell-label{align-items:center;align-self:stretch;display:flex;flex:1 1 auto;overflow:hidden;padding:5px 0}:where(.ag-ltr) .ag-sort-indicator-icon{padding-left:var(--ag-spacing)}:where(.ag-rtl) .ag-sort-indicator-icon{padding-right:var(--ag-spacing)}.ag-header-cell-label{text-overflow:ellipsis}.ag-header-group-cell-label.ag-sticky-label{flex:none;max-width:100%;overflow:visible;position:sticky}:where(.ag-ltr) .ag-header-group-cell-label.ag-sticky-label{left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-header-group-cell-label.ag-sticky-label{right:var(--ag-cell-horizontal-padding)}.ag-header-cell-text,.ag-header-group-text{overflow:hidden;text-overflow:ellipsis}.ag-header-cell-text{word-break:break-word}.ag-header-cell-comp-wrapper{width:100%}:where(.ag-header-group-cell) .ag-header-cell-comp-wrapper{display:flex}:where(.ag-header-cell:not(.ag-header-cell-auto-height)) .ag-header-cell-comp-wrapper{align-items:center;display:flex;height:100%}.ag-header-cell-wrap-text .ag-header-cell-comp-wrapper{white-space:normal}.ag-header-cell-comp-wrapper-limited-height>*{overflow:hidden}:where(.ag-right-aligned-header) .ag-header-cell-label{flex-direction:row-reverse}:where(.ag-ltr) :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}:where(.ag-ltr) :where(.ag-header-cell.ag-right-aligned-header){.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-header-cell.ag-right-aligned-header){.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}.ag-header-cell:after,.ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{content:"";height:var(--ag-header-column-border-height);position:absolute;top:calc(50% - var(--ag-header-column-border-height)*.5);z-index:1}:where(.ag-ltr) .ag-header-cell:after,:where(.ag-ltr) .ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{border-right:var(--ag-header-column-border);right:0}:where(.ag-rtl) .ag-header-cell:after,:where(.ag-rtl) .ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{border-left:var(--ag-header-column-border);left:0}.ag-header-highlight-after:after,.ag-header-highlight-before:after{background-color:var(--ag-accent-color);content:"";height:100%;position:absolute;width:1px}:where(.ag-ltr) .ag-header-highlight-before:after{left:0}:where(.ag-rtl) .ag-header-highlight-before:after{right:0}:where(.ag-ltr) .ag-header-highlight-after:after{right:0;:where(.ag-pinned-left-header) &{right:1px}}:where(.ag-rtl) .ag-header-highlight-after:after{left:0;:where(.ag-pinned-left-header) &{left:1px}}.ag-header-cell-resize{align-items:center;cursor:ew-resize;display:flex;height:100%;position:absolute;top:0;width:8px;z-index:2;&:after{background-color:var(--ag-header-column-resize-handle-color);content:"";height:var(--ag-header-column-resize-handle-height);position:absolute;top:calc(50% - var(--ag-header-column-resize-handle-height)*.5);width:var(--ag-header-column-resize-handle-width);z-index:1}}:where(.ag-ltr) .ag-header-cell-resize{right:-3px;&:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}}:where(.ag-rtl) .ag-header-cell-resize{left:-3px;&:after{right:calc(50% - var(--ag-header-column-resize-handle-width))}}:where(.ag-header-cell.ag-header-span-height) .ag-header-cell-resize:after{height:calc(100% - var(--ag-spacing)*4);top:calc(var(--ag-spacing)*2)}.ag-header-group-cell-no-group:where(.ag-header-span-height){display:none}.ag-sort-indicator-container{display:flex;gap:var(--ag-spacing)}.ag-layout-print{&.ag-body{display:block;height:unset}&.ag-root-wrapper{display:inline-block}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:none}&.ag-force-vertical-scroll{overflow-y:visible!important}}@media print{.ag-root-wrapper.ag-layout-print{display:table;.ag-body-horizontal-scroll-viewport,.ag-body-viewport,.ag-center-cols-container,.ag-center-cols-viewport,.ag-root,.ag-root-wrapper-body,.ag-virtual-list-viewport{display:block!important;height:auto!important;overflow:hidden!important}.ag-cell,.ag-row{-moz-column-break-inside:avoid;break-inside:avoid}}}ag-grid,ag-grid-angular{display:block}.ag-chart,.ag-dnd-ghost,.ag-popup,.ag-root-wrapper{cursor:default;line-height:normal;white-space:normal;-webkit-font-smoothing:antialiased;background-color:var(--ag-background-color);color:var(--ag-text-color);color-scheme:var(--ag-browser-color-scheme);font-family:var(--ag-font-family);font-size:var(--ag-font-size);--ag-indentation-level:0}.ag-root-wrapper{border:var(--ag-wrapper-border);border-radius:var(--ag-wrapper-border-radius);display:flex;flex-direction:column;overflow:hidden;position:relative;&.ag-layout-normal{height:100%}}.ag-root-wrapper-body{display:flex;flex-direction:row;&.ag-layout-normal{flex:1 1 auto;height:0;min-height:0}}.ag-root{display:flex;flex-direction:column;position:relative;&.ag-layout-auto-height,&.ag-layout-normal{flex:1 1 auto;overflow:hidden;width:0}&.ag-layout-normal{height:100%}}.ag-drag-handle{color:var(--ag-drag-handle-color);cursor:grab}.ag-list-item,.ag-virtual-list-item{height:var(--ag-list-item-height)}.ag-virtual-list-item{position:absolute;width:100%}.ag-select-list{background-color:var(--ag-picker-list-background-color);border:var(--ag-picker-list-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);overflow:hidden auto}.ag-list-item{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;&.ag-active-item{background-color:var(--ag-row-hover-color)}}.ag-select-list-item{cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none;:where(span){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}:where(.ag-ltr) .ag-select-list-item{padding-left:calc(var(--ag-cell-horizontal-padding)/2)}:where(.ag-rtl) .ag-select-list-item{padding-right:calc(var(--ag-cell-horizontal-padding)/2)}.ag-list-item-hovered:after{background-color:var(--ag-accent-color);content:"";height:1px;left:0;position:absolute;right:0}.ag-item-highlight-top:after{top:0}.ag-item-highlight-bottom:after{bottom:0}:where(.ag-icon):before{align-items:center;background-color:currentcolor;color:inherit;content:"";display:flex;font-family:inherit;font-size:var(--ag-icon-size);font-style:normal;font-variant:normal;height:var(--ag-icon-size);justify-content:center;line-height:var(--ag-icon-size);-webkit-mask-size:contain;mask-size:contain;text-transform:none;width:var(--ag-icon-size)}.ag-icon{background-position:50%;background-repeat:no-repeat;background-size:contain;color:var(--ag-icon-color);display:block;height:var(--ag-icon-size);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--ag-icon-size)}.ag-column-select-column-group-readonly,.ag-column-select-column-readonly,.ag-disabled,[disabled]{.ag-icon{opacity:.5}&.ag-icon-grip{opacity:.35}}.ag-column-select-column-readonly{&.ag-icon-grip,.ag-icon-grip{opacity:.35}}.ag-chart-menu-icon,.ag-chart-settings-next,.ag-chart-settings-prev,.ag-column-group-icons,.ag-column-select-header-icon,.ag-filter-toolpanel-expand,.ag-floating-filter-button-button,.ag-group-title-bar-icon,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-expand-icon,.ag-panel-title-bar-button,.ag-panel-title-bar-button-icon,.ag-set-filter-group-icons,:where(.ag-group-contracted) .ag-icon,:where(.ag-group-expanded) .ag-icon{background-color:var(--ag-icon-button-background-color);border-radius:var(--ag-icon-button-border-radius);box-shadow:0 0 0 var(--ag-icon-button-background-spread) var(--ag-icon-button-background-color);color:var(--ag-icon-button-color);&:hover{background-color:var(--ag-icon-button-hover-background-color);box-shadow:0 0 0 var(--ag-icon-button-background-spread) var(--ag-icon-button-hover-background-color);color:var(--ag-icon-button-hover-color)}}.ag-filter-active{background-image:linear-gradient(var(--ag-icon-button-active-background-color),var(--ag-icon-button-active-background-color));border-radius:1px;outline:solid var(--ag-icon-button-background-spread) var(--ag-icon-button-active-background-color);position:relative;&:after{background-color:var(--ag-accent-color);border-radius:50%;content:"";height:6px;position:absolute;top:-1px;width:6px}:where(.ag-icon-filter){clip-path:path("M8,0C8,4.415 11.585,8 16,8L16,16L0,16L0,0L8,0Z");color:var(--ag-icon-button-active-color)}}:where(.ag-ltr) .ag-filter-active{&:after{right:-1px}}:where(.ag-rtl) .ag-filter-active{&:after{left:-1px}}.ag-menu{background-color:var(--ag-menu-background-color);border:var(--ag-menu-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-menu-shadow);color:var(--ag-menu-text-color);max-height:100%;overflow-y:auto}.ag-menu,.ag-resizer{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-resizer{pointer-events:none;z-index:1}:where(.ag-resizer){&.ag-resizer-topLeft{cursor:nwse-resize;height:5px;left:0;top:0;width:5px}&.ag-resizer-top{cursor:ns-resize;height:5px;left:5px;right:5px;top:0}&.ag-resizer-topRight{cursor:nesw-resize;height:5px;right:0;top:0;width:5px}&.ag-resizer-right{bottom:5px;cursor:ew-resize;right:0;top:5px;width:5px}&.ag-resizer-bottomRight{bottom:0;cursor:nwse-resize;height:5px;right:0;width:5px}&.ag-resizer-bottom{bottom:0;cursor:ns-resize;height:5px;left:5px;right:5px}&.ag-resizer-bottomLeft{bottom:0;cursor:nesw-resize;height:5px;left:0;width:5px}&.ag-resizer-left{bottom:5px;cursor:ew-resize;left:0;top:5px;width:5px}}',ei,ti,Yo=typeof window!="object"||!((ti=(ei=window==null?void 0:window.document)==null?void 0:ei.fonts)!=null&&ti.forEach),We=(e,t,o,s,i,n)=>{if(Yo)return;s&&(e=`@layer ${CSS.escape(s)} { ${e} }`);let r=He.map.get(t);if(r||(r=[],He.map.set(t,r)),r.find(c=>c.css===e))return;const l=document.createElement("style");n&&l.setAttribute("nonce",n),l.dataset.agGlobalCss=o,l.textContent=e;const a={css:e,el:l,priority:i};let d;for(const c of r){if(c.priority>i)break;d=c}if(d){d.el.insertAdjacentElement("afterend",l);const c=r.indexOf(d);r.splice(c+1,0,a)}else t.insertBefore(l,t.querySelector(":not(title, meta)")),r.push(a)},Wn=(e,t,o)=>{We(lu,e,"core",t,0,o),Array.from(ba()).sort((s,i)=>s.moduleName.localeCompare(i.moduleName)).forEach(s=>{var i;return(i=s.css)==null?void 0:i.forEach(n=>We(n,e,`module-${s.moduleName}`,t,0,o))})},au=e=>{He.grids.add(e)},du=e=>{if(He.grids.delete(e),He.grids.size===0){He.map=new WeakMap;for(const t of document.head.querySelectorAll("style[data-ag-global-css]"))t.remove()}},zs,He=(zs=typeof window=="object"?window:{}).agStyleInjectionState??(zs.agStyleInjectionState={map:new WeakMap,grids:new Set}),he=e=>new Vn(e),pe="$default",cu=0,Vn=class{constructor({feature:e,params:t,modeParams:o={},css:s,cssImports:i}){this.feature=e,this.css=s,this.cssImports=i,this.modeParams={[pe]:{...o[pe]??{},...t??{}},...o}}use(e,t,o){let s=this._inject;if(s==null){let{css:i}=this;if(i){const n=`ag-theme-${this.feature??"part"}-${++cu}`;typeof i=="function"&&(i=i()),i=`:where(.${n}) { +${i} +} +`;for(const r of this.cssImports??[])i=`@import url(${JSON.stringify(r)}); +${i}`;s={css:i,class:n}}else s=!1;this._inject=s}return s&&e&&We(s.css,e,s.class,t,1,o),s?s.class:!1}},hu=e=>e.replace(/[A-Z]/g,t=>`-${t}`).toLowerCase(),Nn=e=>`--ag-${hu(e)}`,ne=e=>`var(${Nn(e)})`,uu=(e,t,o)=>Math.max(t,Math.min(o,e)),gu=e=>{const t=new Map;return o=>{const s=o;return t.has(s)||t.set(s,e(o)),t.get(s)}},se=e=>({ref:"accentColor",mix:e}),Q=e=>({ref:"foregroundColor",mix:e}),te=e=>({ref:"foregroundColor",mix:e,onto:"backgroundColor"}),pu=e=>({ref:"foregroundColor",mix:e,onto:"headerBackgroundColor"}),Z={ref:"backgroundColor"},_e={ref:"foregroundColor"},fe={ref:"accentColor"},Vt={backgroundColor:"#fff",foregroundColor:"#181d1f",borderColor:Q(.15),chromeBackgroundColor:te(.02),browserColorScheme:"light"},fu={...Vt,textColor:_e,accentColor:"#2196f3",invalidColor:"#e02525",wrapperBorder:!0,rowBorder:!0,headerRowBorder:!0,footerRowBorder:{ref:"rowBorder"},columnBorder:{style:"solid",width:1,color:"transparent"},headerColumnBorder:!1,headerColumnBorderHeight:"100%",pinnedColumnBorder:!0,pinnedRowBorder:!0,sidePanelBorder:!0,sideBarPanelWidth:250,sideBarBackgroundColor:{ref:"chromeBackgroundColor"},sideButtonBarBackgroundColor:{ref:"sideBarBackgroundColor"},sideButtonBarTopPadding:0,sideButtonSelectedUnderlineWidth:2,sideButtonSelectedUnderlineColor:"transparent",sideButtonSelectedUnderlineTransitionDuration:0,sideButtonBackgroundColor:"transparent",sideButtonTextColor:{ref:"textColor"},sideButtonHoverBackgroundColor:{ref:"sideButtonBackgroundColor"},sideButtonHoverTextColor:{ref:"sideButtonTextColor"},sideButtonSelectedBackgroundColor:Z,sideButtonSelectedTextColor:{ref:"sideButtonTextColor"},sideButtonBorder:"solid 1px transparent",sideButtonSelectedBorder:!0,sideButtonLeftPadding:{ref:"spacing"},sideButtonRightPadding:{ref:"spacing"},sideButtonVerticalPadding:{calc:"spacing * 3"},fontFamily:["-apple-system","BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif"],headerBackgroundColor:{ref:"chromeBackgroundColor"},headerFontFamily:{ref:"fontFamily"},cellFontFamily:{ref:"fontFamily"},headerFontWeight:500,headerFontSize:{ref:"fontSize"},dataFontSize:{ref:"fontSize"},headerTextColor:{ref:"textColor"},headerCellHoverBackgroundColor:"transparent",headerCellMovingBackgroundColor:{ref:"headerCellHoverBackgroundColor"},headerCellBackgroundTransitionDuration:"0.2s",cellTextColor:{ref:"textColor"},subtleTextColor:{ref:"textColor",mix:.5},rangeSelectionBorderStyle:"solid",rangeSelectionBorderColor:fe,rangeSelectionBackgroundColor:se(.2),rangeSelectionChartBackgroundColor:"#0058FF1A",rangeSelectionChartCategoryBackgroundColor:"#00FF841A",rangeSelectionHighlightColor:se(.5),rangeHeaderHighlightColor:pu(.08),rowNumbersSelectedColor:se(.5),rowHoverColor:se(.08),columnHoverColor:se(.05),selectedRowBackgroundColor:se(.12),modalOverlayBackgroundColor:{ref:"backgroundColor",mix:.66},oddRowBackgroundColor:Z,borderRadius:4,wrapperBorderRadius:8,cellHorizontalPadding:{calc:"spacing * 2 * cellHorizontalPaddingScale"},cellWidgetSpacing:{calc:"spacing * 1.5"},cellHorizontalPaddingScale:1,rowGroupIndentSize:{calc:"cellWidgetSpacing + iconSize"},valueChangeDeltaUpColor:"#43a047",valueChangeDeltaDownColor:"#e53935",valueChangeValueHighlightBackgroundColor:"#16a08580",spacing:8,fontSize:14,rowHeight:{calc:"max(iconSize, dataFontSize) + spacing * 3.25 * rowVerticalPaddingScale"},rowVerticalPaddingScale:1,headerHeight:{calc:"max(iconSize, dataFontSize) + spacing * 4 * headerVerticalPaddingScale"},headerVerticalPaddingScale:1,popupShadow:"0 0 16px #00000026",cardShadow:"0 1px 4px 1px #00000018",dropdownShadow:{ref:"cardShadow"},dragAndDropImageBackgroundColor:Z,dragAndDropImageBorder:!0,dragAndDropImageShadow:{ref:"popupShadow"},dragHandleColor:Q(.7),focusShadow:{spread:3,color:se(.5)},headerColumnResizeHandleHeight:"30%",headerColumnResizeHandleWidth:2,headerColumnResizeHandleColor:{ref:"borderColor"},widgetContainerHorizontalPadding:{calc:"spacing * 1.5"},widgetContainerVerticalPadding:{calc:"spacing * 1.5"},widgetHorizontalSpacing:{calc:"spacing * 1.5"},widgetVerticalSpacing:{ref:"spacing"},listItemHeight:{calc:"max(iconSize, dataFontSize) + widgetVerticalSpacing"},iconSize:16,iconColor:"inherit",iconButtonColor:{ref:"iconColor"},iconButtonBackgroundColor:"transparent",iconButtonBackgroundSpread:4,iconButtonBorderRadius:1,iconButtonHoverColor:{ref:"iconButtonColor"},iconButtonHoverBackgroundColor:Q(.1),iconButtonActiveColor:fe,iconButtonActiveBackgroundColor:se(.28),iconButtonActiveIndicatorColor:fe,toggleButtonWidth:28,toggleButtonHeight:18,toggleButtonOnBackgroundColor:fe,toggleButtonOffBackgroundColor:te(.3),toggleButtonSwitchBackgroundColor:Z,toggleButtonSwitchInset:2,menuBorder:{color:Q(.2)},menuBackgroundColor:te(.03),menuTextColor:te(.95),menuShadow:{ref:"popupShadow"},menuSeparatorColor:{ref:"borderColor"},setFilterIndentSize:{ref:"iconSize"},chartMenuPanelWidth:260,chartMenuLabelColor:Q(.8),dialogShadow:{ref:"popupShadow"},cellEditingBorder:{color:fe},cellEditingShadow:{ref:"cardShadow"},dialogBorder:{color:Q(.2)},panelBackgroundColor:Z,panelTitleBarBackgroundColor:{ref:"headerBackgroundColor"},panelTitleBarIconColor:{ref:"headerTextColor"},panelTitleBarTextColor:{ref:"headerTextColor"},panelTitleBarFontWeight:{ref:"headerFontWeight"},panelTitleBarBorder:!0,columnSelectIndentSize:{ref:"iconSize"},toolPanelSeparatorBorder:!0,tooltipBackgroundColor:{ref:"chromeBackgroundColor"},tooltipTextColor:{ref:"textColor"},tooltipBorder:!0,columnDropCellBackgroundColor:Q(.07),columnDropCellTextColor:{ref:"textColor"},columnDropCellDragHandleColor:{ref:"textColor"},columnDropCellBorder:{color:Q(.13)},selectCellBackgroundColor:Q(.07),selectCellBorder:{color:Q(.13)},advancedFilterBuilderButtonBarBorder:!0,advancedFilterBuilderIndentSize:{calc:"spacing * 2 + iconSize"},advancedFilterBuilderJoinPillColor:"#f08e8d",advancedFilterBuilderColumnPillColor:"#a6e194",advancedFilterBuilderOptionPillColor:"#f3c08b",advancedFilterBuilderValuePillColor:"#85c0e4",findMatchColor:_e,findMatchBackgroundColor:"#ffff00",findActiveMatchColor:_e,findActiveMatchBackgroundColor:"#ffa500",filterToolPanelGroupIndent:{ref:"spacing"},rowLoadingSkeletonEffectColor:Q(.15),statusBarLabelColor:_e,statusBarLabelFontWeight:500,statusBarValueColor:_e,statusBarValueFontWeight:500,pinnedSourceRowTextColor:{ref:"textColor"},pinnedSourceRowBackgroundColor:{ref:"backgroundColor"},pinnedSourceRowFontWeight:600,pinnedRowFontWeight:600,pinnedRowBackgroundColor:{ref:"backgroundColor"},pinnedRowTextColor:{ref:"textColor"}},Cu=":where(.ag-button){background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0;text-indent:inherit;text-shadow:inherit;text-transform:inherit;word-spacing:inherit;&:disabled{cursor:default}&:focus-visible{box-shadow:var(--ag-focus-shadow);outline:none}}.ag-standard-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--ag-button-background-color);border:var(--ag-button-border);border-radius:var(--ag-button-border-radius);color:var(--ag-button-text-color);cursor:pointer;font-weight:var(--ag-button-font-weight);padding:var(--ag-button-vertical-padding) var(--ag-button-horizontal-padding);&:hover{background-color:var(--ag-button-hover-background-color);border:var(--ag-button-hover-border);color:var(--ag-button-hover-text-color)}&:active{background-color:var(--ag-button-active-background-color);border:var(--ag-button-active-border);color:var(--ag-button-active-text-color)}&:disabled{background-color:var(--ag-button-disabled-background-color);border:var(--ag-button-disabled-border);color:var(--ag-button-disabled-text-color)}}",mu={buttonTextColor:"inherit",buttonFontWeight:"normal",buttonBackgroundColor:"transparent",buttonBorder:!1,buttonBorderRadius:{ref:"borderRadius"},buttonHorizontalPadding:{calc:"spacing * 2"},buttonVerticalPadding:{ref:"spacing"},buttonHoverTextColor:{ref:"buttonTextColor"},buttonHoverBackgroundColor:{ref:"buttonBackgroundColor"},buttonHoverBorder:{ref:"buttonBorder"},buttonActiveTextColor:{ref:"buttonHoverTextColor"},buttonActiveBackgroundColor:{ref:"buttonHoverBackgroundColor"},buttonActiveBorder:{ref:"buttonHoverBorder"},buttonDisabledTextColor:{ref:"inputDisabledTextColor"},buttonDisabledBackgroundColor:{ref:"inputDisabledBackgroundColor"},buttonDisabledBorder:{ref:"inputDisabledBorder"}},vu=()=>he({feature:"buttonStyle",params:{...mu,buttonBackgroundColor:Z,buttonBorder:!0,buttonHoverBackgroundColor:{ref:"rowHoverColor"},buttonActiveBorder:{color:fe}},css:Cu}),wu=vu(),yu=".ag-column-drop-vertical-empty-message{align-items:center;border:1px dashed;border-color:var(--ag-border-color);display:flex;inset:0;justify-content:center;margin:calc(var(--ag-spacing)*1.5) calc(var(--ag-spacing)*2);overflow:hidden;padding:calc(var(--ag-spacing)*2);position:absolute}",bu=()=>he({feature:"columnDropStyle",css:yu}),zn=bu(),Su=["colorScheme","color","length","scale","borderStyle","border","shadow","image","fontFamily","fontWeight","duration"],Ru=gu(e=>(e=e.toLowerCase(),Su.find(t=>e.endsWith(t.toLowerCase()))??"length")),Yt=e=>typeof e=="object"&&(e!=null&&e.ref)?ne(e.ref):typeof e=="string"?e:typeof e=="number"?String(e):!1,Qo=e=>{if(typeof e=="string")return e;if(e&&"ref"in e){const t=ne(e.ref);return e.mix==null?t:`color-mix(in srgb, ${e.onto?ne(e.onto):"transparent"}, ${t} ${uu(e.mix*100,0,100)}%)`}return!1},Fu=Yt,ke=e=>typeof e=="string"?e:typeof e=="number"?`${e}px`:e&&"calc"in e?`calc(${e.calc.replace(/ ?[*/+] ?/g," $& ").replace(/-?\b[a-z][a-z0-9]*\b(?![-(])/gi,o=>o[0]==="-"?o:` ${ne(o)} `)})`:e&&"ref"in e?ne(e.ref):!1,xu=Yt,Du=(e,t)=>typeof e=="string"?e:e===!0?"solid 1px var(--ag-border-color)":e===!1?t==="columnBorder"?"solid 1px transparent":"none":e&&"ref"in e?ne(e.ref):_n(e.style??"solid")+" "+ke(e.width??1)+" "+Qo(e.color??{ref:"borderColor"}),Pu=e=>typeof e=="string"?e:e===!1?"none":e&&"ref"in e?ne(e.ref):[ke(e.offsetX??0),ke(e.offsetY??0),ke(e.radius??0),ke(e.spread??0),Qo(e.color??{ref:"foregroundColor"})].join(" "),_n=Yt,Un=e=>typeof e=="string"?e.includes(",")?e:_s(e):e&&"googleFont"in e?Un(e.googleFont):e&&"ref"in e?ne(e.ref):Array.isArray(e)?e.map(t=>(typeof t=="object"&&"googleFont"in t&&(t=t.googleFont),_s(t))).join(", "):!1,_s=e=>/^[\w-]+$|\w\(/.test(e)?e:JSON.stringify(e),Eu=Yt,Kn=e=>typeof e=="string"?e:e&&"url"in e?`url(${JSON.stringify(e.url)})`:e&&"svg"in e?Kn({url:`data:image/svg+xml,${encodeURIComponent(e.svg)}`}):e&&"ref"in e?ne(e.ref):!1,Tu=(e,t)=>typeof e=="string"?e:typeof e=="number"?(e>=10&&K(104,{value:e,param:t}),`${e}s`):e&&"ref"in e?ne(e.ref):!1,ku={color:Qo,colorScheme:Fu,length:ke,scale:xu,border:Du,borderStyle:_n,shadow:Pu,image:Kn,fontFamily:Un,fontWeight:Eu,duration:Tu},Iu=(e,t)=>{const o=Ru(e);return ku[o](t,e)},Lu=()=>new jn().withPart(wu).withPart(zn),jn=class $n{constructor(t=[]){this.parts=t}withPart(t){return typeof t=="function"&&(t=t()),t instanceof Vn?new $n([...this.parts,t]):($e(259,{part:t},"Invalid part"),this)}withoutPart(t){return this.withPart(he({feature:t}))}withParams(t,o=pe){return this.withPart(he({modeParams:{[o]:t}}))}_startUse({styleContainer:t,cssLayer:o,nonce:s,loadThemeGoogleFonts:i}){if(Yo)return;Au(),Wn(t,o,s);const n=Mu(this);if(n.length>0)for(const r of n)i&&Gu(r,s);for(const r of this.parts)r.use(t,o,s)}_getCssClass(){return this._cssClassCache??(this._cssClassCache=Us(this.parts).map(t=>t.use(void 0,void 0,void 0)).filter(Boolean).join(" "))}_getModeParams(){let t=this._paramsCache;if(!t){const o={[pe]:{...fu}};for(const s of Us(this.parts))for(const i of Object.keys(s.modeParams)){const n=s.modeParams[i];if(n){const r=o[i]??(o[i]={}),l=new Set;for(const a of Object.keys(n)){const d=n[a];d!==void 0&&(r[a]=d,l.add(a))}if(i===pe)for(const a of Object.keys(o)){const d=o[a];if(a!==pe)for(const c of l)delete d[c]}}}this._paramsCache=t=o}return t}_getPerGridCss(t){const o="##SELECTOR##";let s=this._paramsCssCache;if(!s){let i="",n="";const r=this._getModeParams();for(const a of Object.keys(r)){const d=r[a];if(a!==pe){const h=`:where([data-ag-theme-mode="${typeof CSS=="object"?CSS.escape(a):a}"]) & { +`;i+=h,n+=h}for(const c of Object.keys(d).sort()){const h=d[c],u=Iu(c,h);if(u===!1)K(107,{key:c,value:h});else{const g=Nn(c),p=g.replace("--ag-","--ag-inherited-");i+=` ${g}: var(${p}, ${u}); +`,n+=` ${p}: var(${g}); +`}}a!==pe&&(i+=`} +`,n+=`} +`)}let l=`${o} { +${i}} +`;l+=`:has(> ${o}):not(${o}) { +${n}} +`,this._paramsCssCache=s=l}return s.replaceAll(o,`:where(.${t})`)}},Us=e=>{const t=new Map;for(const s of e)t.set(s.feature,s);const o=[];for(const s of e)(!s.feature||t.get(s.feature)===s)&&o.push(s);return o},Mu=e=>{const t=new Set,o=n=>{if(Array.isArray(n))n.forEach(o);else{const r=n==null?void 0:n.googleFont;typeof r=="string"&&t.add(r)}};return Object.values(e._getModeParams()).flatMap(n=>Object.values(n)).forEach(o),Array.from(t).sort()},Ks=!1,Au=()=>{if(!Ks){Ks=!0;for(const e of Array.from(document.head.querySelectorAll('style[data-ag-scope="legacy"]')))e.remove()}},Hu=new Set,Gu=async(e,t)=>{Hu.add(e);const o=`@import url('https://${Bu}/css2?family=${encodeURIComponent(e)}:wght@100;200;300;400;500;600;700;800;900&display=swap'); +`;We(o,document.head,`googleFont:${e}`,void 0,0,t)},Bu="fonts.googleapis.com",Ou='.ag-checkbox-input-wrapper,.ag-radio-button-input-wrapper{background-color:var(--ag-checkbox-unchecked-background-color);border:solid var(--ag-checkbox-border-width) var(--ag-checkbox-unchecked-border-color);flex:none;height:var(--ag-icon-size);position:relative;width:var(--ag-icon-size);:where(input){-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:block;height:var(--ag-icon-size);margin:0;opacity:0;width:var(--ag-icon-size)}&:after{content:"";display:block;inset:0;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;pointer-events:none;position:absolute}&:where(.ag-checked){background-color:var(--ag-checkbox-checked-background-color);border-color:var(--ag-checkbox-checked-border-color);&:after{background-color:var(--ag-checkbox-checked-shape-color)}}&:where(:focus-within,:active){box-shadow:var(--ag-focus-shadow)}&:where(.ag-disabled){filter:grayscale();opacity:.5}}.ag-checkbox-input-wrapper{border-radius:var(--ag-checkbox-border-radius);&:where(.ag-checked):after{-webkit-mask-image:var(--ag-checkbox-checked-shape-image);mask-image:var(--ag-checkbox-checked-shape-image)}&:where(.ag-indeterminate){background-color:var(--ag-checkbox-indeterminate-background-color);border-color:var(--ag-checkbox-indeterminate-border-color);&:after{background-color:var(--ag-checkbox-indeterminate-shape-color);-webkit-mask-image:var(--ag-checkbox-indeterminate-shape-image);mask-image:var(--ag-checkbox-indeterminate-shape-image)}}}.ag-radio-button-input-wrapper{border-radius:100%;&:where(.ag-checked):after{-webkit-mask-image:var(--ag-radio-checked-shape-image);mask-image:var(--ag-radio-checked-shape-image)}}',Wu=()=>he({feature:"checkboxStyle",params:{checkboxBorderWidth:1,checkboxBorderRadius:{ref:"borderRadius"},checkboxUncheckedBackgroundColor:Z,checkboxUncheckedBorderColor:te(.3),checkboxCheckedBackgroundColor:fe,checkboxCheckedBorderColor:{ref:"checkboxCheckedBackgroundColor"},checkboxCheckedShapeImage:{svg:''},checkboxCheckedShapeColor:Z,checkboxIndeterminateBackgroundColor:te(.3),checkboxIndeterminateBorderColor:{ref:"checkboxIndeterminateBackgroundColor"},checkboxIndeterminateShapeImage:{svg:''},checkboxIndeterminateShapeColor:Z,radioCheckedShapeImage:{svg:''}},css:Ou}),Vu=Wu(),qn=()=>({...Vt,backgroundColor:"hsl(217, 0%, 17%)",foregroundColor:"#FFF",chromeBackgroundColor:te(.05),rowHoverColor:se(.15),selectedRowBackgroundColor:se(.2),menuBackgroundColor:te(.1),browserColorScheme:"dark",popupShadow:"0 0px 20px #000A",cardShadow:"0 1px 4px 1px #000A",advancedFilterBuilderJoinPillColor:"#7a3a37",advancedFilterBuilderColumnPillColor:"#355f2d",advancedFilterBuilderOptionPillColor:"#5a3168",advancedFilterBuilderValuePillColor:"#374c86",findMatchColor:Z,findActiveMatchColor:Z,checkboxUncheckedBorderColor:te(.4),toggleButtonOffBackgroundColor:te(.4)}),Nu=()=>({...qn(),backgroundColor:"#1f2836"}),zu=()=>he({feature:"colorScheme",params:Vt,modeParams:{light:Vt,dark:qn(),"dark-blue":Nu()}}),_u=zu(),Zn={aggregation:'',arrows:'',asc:'',cancel:'',chart:'',"color-picker":'',columns:'',contracted:'',copy:'',cross:'',csv:'',cut:'',desc:'',down:'',excel:'',expanded:'',"eye-slash":'',eye:'',filter:'',first:'',group:'',last:'',left:'',linked:'',loading:'',maximize:'',menu:'',"menu-alt":'',minimize:'',minus:'',next:'',none:'',"not-allowed":'',paste:'',pin:'',pivot:'',plus:'',previous:'',right:'',save:'',"small-left":'',"small-right":'',tick:'',"tree-closed":'',"tree-indeterminate":'',"tree-open":'',unlinked:'',up:'',grip:'',settings:''},Yn={"column-arrow":'',"small-down":'',"small-up":'',"pinned-top":'',"pinned-bottom":'',"un-pin":''},Uu=(e={})=>{let t="";for(const o of[...Object.keys(Zn),...Object.keys(Yn)]){const s=Ku(o,e.strokeWidth);t+=`.ag-icon-${o}::before { mask-image: url('data:image/svg+xml,${encodeURIComponent(s)}'); } +`}return t},Ku=(e,t=1.5)=>{const o=Yn[e];if(o)return o;const s=Zn[e];if(!s)throw new Error(`Missing icon data for ${e}`);return``+s+""},ju=(e={})=>he({feature:"iconSet",css:()=>Uu(e)}),$u=ju(),qu=':where(.ag-input-field-input[type=number]:not(.ag-number-field-input-stepper)){-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;&::-webkit-inner-spin-button,&::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}}.ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){background-color:var(--ag-input-background-color);border:var(--ag-input-border);border-radius:var(--ag-input-border-radius);color:var(--ag-input-text-color);font-family:inherit;font-size:inherit;line-height:inherit;margin:0;min-height:var(--ag-input-height);padding:0;&:where(:disabled){background-color:var(--ag-input-disabled-background-color);border:var(--ag-input-disabled-border);color:var(--ag-input-disabled-text-color)}&:where(:focus){background-color:var(--ag-input-focus-background-color);border:var(--ag-input-focus-border);box-shadow:var(--ag-input-focus-shadow);color:var(--ag-input-focus-text-color);outline:none}&:where(:invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}&:where(.invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}&::-moz-placeholder{color:var(--ag-input-placeholder-text-color)}&::placeholder{color:var(--ag-input-placeholder-text-color)}}:where(.ag-ltr) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding-left:var(--ag-input-padding-start)}:where(.ag-rtl) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding-right:var(--ag-input-padding-start)}:where(.ag-column-select-header-filter-wrapper,.ag-filter-toolpanel-search,.ag-mini-filter,.ag-filter-filter){.ag-input-wrapper:before{background-color:currentcolor;color:var(--ag-input-icon-color);content:"";display:block;height:12px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==");mask-image:url("data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;opacity:.5;position:absolute;width:12px}}:where(.ag-ltr) :where(.ag-column-select-header-filter-wrapper,.ag-filter-toolpanel-search,.ag-mini-filter,.ag-filter-filter){.ag-input-wrapper:before{margin-left:var(--ag-spacing)}.ag-number-field-input,.ag-text-field-input{padding-left:calc(var(--ag-spacing)*1.5 + 12px)}}:where(.ag-rtl) :where(.ag-column-select-header-filter-wrapper,.ag-filter-toolpanel-search,.ag-mini-filter,.ag-filter-filter){.ag-input-wrapper:before{margin-right:var(--ag-spacing)}.ag-number-field-input,.ag-text-field-input{padding-right:calc(var(--ag-spacing)*1.5 + 12px)}}',Zu=".ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){&:focus{box-shadow:var(--ag-focus-shadow)}}",Yu={inputBackgroundColor:"transparent",inputBorder:!1,inputBorderRadius:0,inputTextColor:{ref:"textColor"},inputPlaceholderTextColor:{ref:"inputTextColor",mix:.5},inputPaddingStart:0,inputHeight:{calc:"max(iconSize, fontSize) + spacing * 2"},inputFocusBackgroundColor:{ref:"inputBackgroundColor"},inputFocusBorder:{ref:"inputBorder"},inputFocusShadow:"none",inputFocusTextColor:{ref:"inputTextColor"},inputDisabledBackgroundColor:{ref:"inputBackgroundColor"},inputDisabledBorder:{ref:"inputBorder"},inputDisabledTextColor:{ref:"inputTextColor"},inputInvalidBackgroundColor:{ref:"inputBackgroundColor"},inputInvalidBorder:{ref:"inputBorder"},inputInvalidTextColor:{ref:"inputTextColor"},inputIconColor:{ref:"inputTextColor"},pickerButtonBorder:!1,pickerButtonFocusBorder:{ref:"inputFocusBorder"},pickerButtonBackgroundColor:{ref:"backgroundColor"},pickerButtonFocusBackgroundColor:{ref:"backgroundColor"},pickerListBorder:!1,pickerListBackgroundColor:{ref:"backgroundColor"}},Qu=()=>he({feature:"inputStyle",params:{...Yu,inputBackgroundColor:Z,inputBorder:!0,inputBorderRadius:{ref:"borderRadius"},inputPaddingStart:{ref:"spacing"},inputFocusBorder:{color:fe},inputFocusShadow:{ref:"focusShadow"},inputDisabledBackgroundColor:te(.06),inputDisabledTextColor:{ref:"textColor",mix:.5},inputInvalidBorder:{color:{ref:"invalidColor"}},pickerButtonBorder:!0,pickerListBorder:!0},css:()=>qu+Zu}),Xu=Qu(),Ju='.ag-tabs-header{background-color:var(--ag-tab-bar-background-color);border-bottom:var(--ag-tab-bar-border);display:flex;flex:1;gap:var(--ag-tab-spacing);padding:var(--ag-tab-bar-top-padding) var(--ag-tab-bar-horizontal-padding) 0}.ag-tabs-header-wrapper{display:flex}.ag-tabs-close-button-wrapper{align-items:center;border:0;display:flex;padding:var(--ag-spacing)}:where(.ag-ltr) .ag-tabs-close-button-wrapper{border-right:1px solid var(--ag-border-color)}:where(.ag-rtl) .ag-tabs-close-button-wrapper{border-left:1px solid var(--ag-border-color)}.ag-tabs-close-button{background-color:unset;border:0;cursor:pointer;padding:0}.ag-tab{align-items:center;background-color:var(--ag-tab-background-color);border-left:var(--ag-tab-selected-border-width) solid transparent;border-right:var(--ag-tab-selected-border-width) solid transparent;color:var(--ag-tab-text-color);cursor:pointer;display:flex;flex:1;justify-content:center;padding:var(--ag-tab-top-padding) var(--ag-tab-horizontal-padding) var(--ag-tab-bottom-padding);position:relative;&:hover{background-color:var(--ag-tab-hover-background-color);color:var(--ag-tab-hover-text-color)}&.ag-tab-selected{background-color:var(--ag-tab-selected-background-color);color:var(--ag-tab-selected-text-color)}&:after{background-color:var(--ag-tab-selected-underline-color);bottom:0;content:"";display:block;height:var(--ag-tab-selected-underline-width);left:0;opacity:0;position:absolute;right:0;transition:opacity var(--ag-tab-selected-underline-transition-duration)}&.ag-tab-selected:after{opacity:1}}:where(.ag-ltr) .ag-tab{&.ag-tab-selected{&:where(:not(:first-of-type)){border-left-color:var(--ag-tab-selected-border-color)}&:where(:not(:last-of-type)){border-right-color:var(--ag-tab-selected-border-color)}}}:where(.ag-rtl) .ag-tab{&.ag-tab-selected{&:where(:not(:first-of-type)){border-right-color:var(--ag-tab-selected-border-color)}&:where(:not(:last-of-type)){border-left-color:var(--ag-tab-selected-border-color)}}}',eg={tabBarBackgroundColor:"transparent",tabBarHorizontalPadding:0,tabBarTopPadding:0,tabBackgroundColor:"transparent",tabTextColor:{ref:"textColor"},tabHorizontalPadding:{ref:"spacing"},tabTopPadding:{ref:"spacing"},tabBottomPadding:{ref:"spacing"},tabSpacing:"0",tabHoverBackgroundColor:{ref:"tabBackgroundColor"},tabHoverTextColor:{ref:"tabTextColor"},tabSelectedBackgroundColor:{ref:"tabBackgroundColor"},tabSelectedTextColor:{ref:"tabTextColor"},tabSelectedBorderWidth:1,tabSelectedBorderColor:"transparent",tabSelectedUnderlineColor:"transparent",tabSelectedUnderlineWidth:0,tabSelectedUnderlineTransitionDuration:0,tabBarBorder:!1},tg=()=>he({feature:"tabStyle",params:{...eg,tabBarBorder:!0,tabBarBackgroundColor:Q(.05),tabTextColor:{ref:"textColor",mix:.7},tabSelectedTextColor:{ref:"textColor"},tabHoverTextColor:{ref:"textColor"},tabSelectedBorderColor:{ref:"borderColor"},tabSelectedBackgroundColor:Z},css:Ju}),og=tg(),sg=()=>Lu().withPart(Vu).withPart(_u).withPart($u).withPart(og).withPart(Xu).withPart(zn).withParams({fontFamily:[{googleFont:"IBM Plex Sans"},"-apple-system","BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu"]}),ig=sg(),ng={cssName:"--ag-cell-horizontal-padding",changeKey:"cellHorizontalPaddingChanged",defaultValue:16},rg={cssName:"--ag-indentation-level",changeKey:"indentationLevelChanged",defaultValue:0,noWarn:!0,cacheDefault:!0},lg={cssName:"--ag-row-group-indent-size",changeKey:"rowGroupIndentSizeChanged",defaultValue:0},js={cssName:"--ag-row-height",changeKey:"rowHeightChanged",defaultValue:42},$s={cssName:"--ag-header-height",changeKey:"headerHeightChanged",defaultValue:48},qs={cssName:"--ag-list-item-height",changeKey:"listItemHeightChanged",defaultValue:24},vo={cssName:"--ag-row-border",changeKey:"rowBorderWidthChanged",defaultValue:1,border:!0},Zs={cssName:"--ag-pinned-row-border",changeKey:"pinnedRowBorderWidthChanged",defaultValue:1,border:!0},ag=0,dg=class extends v{constructor(){super(...arguments),this.beanName="environment",this.sizeEls=new Map,this.lastKnownValues=new Map,this.sizesMeasured=!1,this.paramsClass=`ag-theme-params-${++ag}`,this.globalCSS=[]}wireBeans(e){const{eGridDiv:t,gridOptions:o}=e;this.eGridDiv=t,this.eStyleContainer=o.themeStyleContainer??(t.getRootNode()===document?document.head:t),this.cssLayer=o.themeCssLayer,this.styleNonce=o.styleNonce}postConstruct(){this.addManagedPropertyListener("theme",()=>this.handleThemeGridOptionChange()),this.handleThemeGridOptionChange(),this.addManagedPropertyListener("rowHeight",()=>this.refreshRowHeightVariable()),this.getSizeEl(js),this.getSizeEl($s),this.getSizeEl(qs),this.getSizeEl(vo),this.getSizeEl(Zs),this.refreshRowBorderWidthVariable(),this.addDestroyFunc(()=>du(this)),this.mutationObserver=new MutationObserver(()=>{this.fireGridStylesChangedEvent("themeChanged")}),this.addDestroyFunc(()=>this.mutationObserver.disconnect())}getPinnedRowBorderWidth(){return this.getCSSVariablePixelValue(Zs)}getRowBorderWidth(){return this.getCSSVariablePixelValue(vo)}getDefaultRowHeight(){return this.getCSSVariablePixelValue(js)}getDefaultHeaderHeight(){return this.getCSSVariablePixelValue($s)}getDefaultCellHorizontalPadding(){return this.getCSSVariablePixelValue(ng)}getCellPaddingLeft(){const e=this.getDefaultCellHorizontalPadding(),t=this.getCSSVariablePixelValue(rg),o=this.getCSSVariablePixelValue(lg);return e-1+o*t}getCellPadding(){const e=this.getDefaultCellHorizontalPadding()-1;return this.getCellPaddingLeft()+e}getDefaultColumnMinWidth(){return Math.min(36,this.getDefaultRowHeight())}getDefaultListItemHeight(){return this.getCSSVariablePixelValue(qs)}applyThemeClasses(e){const{gridTheme:t}=this;let o="";if(t)o=`${this.paramsClass} ${t._getCssClass()}`;else{this.mutationObserver.disconnect();let s=this.eGridDiv;for(;s;){let i=!1;for(const n of Array.from(s.classList))n.startsWith("ag-theme-")&&(i=!0,o=o?`${o} ${n}`:n);i&&this.mutationObserver.observe(s,{attributes:!0,attributeFilter:["class"]}),s=s.parentElement}}for(const s of Array.from(e.classList))s.startsWith("ag-theme-")&&e.classList.remove(s);if(o){const s=e.className;e.className=s+(s?" ":"")+o}}refreshRowHeightVariable(){const{eGridDiv:e}=this,t=e.style.getPropertyValue("--ag-line-height").trim(),o=this.gos.get("rowHeight");if(o==null||isNaN(o)||!isFinite(o))return t!==null&&e.style.setProperty("--ag-line-height",null),-1;const s=`${o}px`;return t!=s?(e.style.setProperty("--ag-line-height",s),o):t!=""?parseFloat(t):-1}addGlobalCSS(e,t){this.gridTheme?We(e,this.eStyleContainer,t,this.cssLayer,0,this.styleNonce):this.globalCSS.push([e,t])}getCSSVariablePixelValue(e){const t=this.lastKnownValues.get(e);if(t!=null)return t;const o=this.measureSizeEl(e);return o==="detached"||o==="no-styles"?(e.cacheDefault&&this.lastKnownValues.set(e,e.defaultValue),e.defaultValue):(this.lastKnownValues.set(e,o),o)}measureSizeEl(e){const t=this.getSizeEl(e);if(t.offsetParent==null)return"detached";const o=t.offsetWidth;return o===wo?"no-styles":(this.sizesMeasured=!0,o)}getMeasurementContainer(){let e=this.eMeasurementContainer;return e||(e=this.eMeasurementContainer=q({tag:"div",cls:"ag-measurement-container"}),this.eGridDiv.appendChild(e)),e}getSizeEl(e){let t=this.sizeEls.get(e);if(t)return t;const o=this.getMeasurementContainer();t=q({tag:"div"});const{border:s,noWarn:i}=e;s?(t.className="ag-measurement-element-border",t.style.setProperty("--ag-internal-measurement-border",`var(${e.cssName}, solid ${wo}px)`)):t.style.width=`var(${e.cssName}, ${wo}px)`,o.appendChild(t),this.sizeEls.set(e,t);let n=this.measureSizeEl(e);n==="no-styles"&&!i&&I(9,{variable:e});const r=nt(this.beans,t,()=>{const l=this.measureSizeEl(e);l==="detached"||l==="no-styles"||(this.lastKnownValues.set(e,l),l!==n&&(n=l,this.fireGridStylesChangedEvent(e.changeKey)))});return this.addDestroyFunc(()=>r()),t}fireGridStylesChangedEvent(e){e==="rowBorderWidthChanged"&&this.refreshRowBorderWidthVariable(),this.eventSvc.dispatchEvent({type:"gridStylesChanged",[e]:!0})}refreshRowBorderWidthVariable(){const e=this.getCSSVariablePixelValue(vo);this.eGridDiv.style.setProperty("--ag-internal-row-border-width",`${e}px`)}handleThemeGridOptionChange(){const{gos:e,eGridDiv:t,globalCSS:o,gridTheme:s}=this,i=e.get("theme");let n;if(i==="legacy")n=void 0;else{const r=i??ig;r instanceof jn?n=r:K(240,{theme:r})}if(n!==s){if(n){au(this),Wn(this.eStyleContainer,this.cssLayer,this.styleNonce);for(const[l,a]of o)We(l,this.eStyleContainer,a,this.cssLayer,0,this.styleNonce);o.length=0}this.gridTheme=n,n==null||n._startUse({loadThemeGoogleFonts:e.get("loadThemeGoogleFonts"),styleContainer:this.eStyleContainer,cssLayer:this.cssLayer,nonce:this.styleNonce});let r=this.eParamsStyle;if(!r){r=this.eParamsStyle=q({tag:"style"});const l=this.gos.get("styleNonce");l&&r.setAttribute("nonce",l),t.appendChild(r)}Yo||(r.textContent=(n==null?void 0:n._getPerGridCss(this.paramsClass))||""),this.applyThemeClasses(t),this.fireGridStylesChangedEvent("themeChanged")}n&&getComputedStyle(this.getMeasurementContainer()).getPropertyValue("--ag-legacy-styles-loaded")&&K(i?106:239)}},wo=15538,cg=class extends v{constructor(){super(...arguments),this.beanName="eventSvc",this.globalSvc=new st}postConstruct(){const{globalListener:e,globalSyncListener:t}=this.beans;e&&this.addGlobalListener(e,!0),t&&this.addGlobalListener(t,!1)}addEventListener(e,t,o){this.globalSvc.addEventListener(e,t,o)}removeEventListener(e,t,o){this.globalSvc.removeEventListener(e,t,o)}addGlobalListener(e,t=!1){this.globalSvc.addGlobalListener(e,t)}removeGlobalListener(e,t=!1){this.globalSvc.removeGlobalListener(e,t)}dispatchLocalEvent(){}dispatchEvent(e){this.globalSvc.dispatchEvent(A(this.gos,e))}dispatchEventOnce(e){this.globalSvc.dispatchEventOnce(A(this.gos,e))}};function Qn(e){return e?e.getLeafColumns().some(t=>t.isSpanHeaderHeight()):!1}function Ao(e,t){let o;if(O(e)&&Qn(e)&&e.isPadding()){const s=e;o=s.getLeafColumns()[0];let i=o;for(;i!==s;)t++,i=i.getParent()}return{column:o||e,headerRowIndex:t}}var hg=class extends v{constructor(){super(...arguments),this.beanName="headerNavigation",this.currentHeaderRowWithoutSpan=-1}postConstruct(){const e=this.beans;e.ctrlsSvc.whenReady(this,o=>{this.gridBodyCon=o.gridBodyCtrl});const t=oe(e);this.addManagedElementListeners(t,{mousedown:()=>{this.currentHeaderRowWithoutSpan=-1}})}getHeaderPositionForColumn(e,t){let o;const{colModel:s,colGroupSvc:i,ctrlsSvc:n}=this.beans;if(typeof e=="string"?(o=s.getCol(e),o||(o=(i==null?void 0:i.getColumnGroup(e))??null)):o=e,!o)return null;const r=n.getHeaderRowContainerCtrl(),l=r==null?void 0:r.getAllCtrls(),a=H(l||[]).type==="filter",d=ie(this.beans)-1;let c=-1,h=o;for(;h;)c++,h=h.getParent();let u=c;return t&&a&&u===d-1&&u++,u===-1?null:{headerRowIndex:u,column:o}}navigateVertically(e,t,o){const s=this.beans.focusSvc;if(t||(t=s.focusedHeader),!t)return!1;const{headerRowIndex:i}=t,n=t.column,r=ie(this.beans),l=e==="UP",a=this.getHeaderRowType(i);let{headerRowIndex:d,column:c,headerRowIndexWithoutSpan:h}=l?ug(a,n,i):gg(a,n,i),u=!1;return d<0&&(d=0,c=n,u=!0),d>=r?(d=-1,this.currentHeaderRowWithoutSpan=-1):h!==void 0&&(this.currentHeaderRowWithoutSpan=h),!u&&!c?!1:s.focusHeaderPosition({headerPosition:{headerRowIndex:d,column:c},allowUserOverride:!0,event:o})}navigateHorizontally(e,t=!1,o){const{focusSvc:s,gos:i}=this.beans,n=s.focusedHeader;let r,l;this.currentHeaderRowWithoutSpan!==-1?n.headerRowIndex=this.currentHeaderRowWithoutSpan:this.currentHeaderRowWithoutSpan=n.headerRowIndex,e==="LEFT"!==i.get("enableRtl")?(l="Before",r=this.findHeader(n,l)):(l="After",r=this.findHeader(n,l));const a=i.getCallback("tabToNextHeader");if(t&&a){const d=s.focusHeaderPositionFromUserFunc({userFunc:a,headerPosition:r,direction:l});if(d){const{headerRowIndex:c}=s.focusedHeader||{};c!=null&&c!=n.headerRowIndex&&(this.currentHeaderRowWithoutSpan=c)}return d}return r||!t?s.focusHeaderPosition({headerPosition:r,direction:l,fromTab:t,allowUserOverride:!0,event:o}):this.focusNextHeaderRow(n,l,o)}focusNextHeaderRow(e,t,o){const s=e.headerRowIndex;let i=null,n;const r=this.beans;if(t==="Before"?s>0&&(n=s-1,this.currentHeaderRowWithoutSpan-=1,i=this.findColAtEdgeForHeaderRow(n,"end")):(n=s+1,this.currentHeaderRowWithoutSpan=0;h--){const u=d[h];if(!u.isPadding()){i=u;break}n++}else i=H(d),i||(i=a)}return{column:i,headerRowIndex:n,headerRowIndexWithoutSpan:r}}var pg=class extends v{constructor(){super(...arguments),this.beanName="focusSvc",this.focusFallbackTimeout=null,this.needsFocusRestored=!1}wireBeans(e){this.colModel=e.colModel,this.visibleCols=e.visibleCols,this.rowRenderer=e.rowRenderer,this.navigation=e.navigation,this.filterManager=e.filterManager,this.overlays=e.overlays}postConstruct(){const e=this.clearFocusedCell.bind(this);this.addManagedEventListeners({columnPivotModeChanged:e,newColumnsLoaded:this.onColumnEverythingChanged.bind(this),columnGroupOpened:e,columnRowGroupChanged:e}),this.addDestroyFunc(Ma(this.beans))}attemptToRecoverFocus(){this.needsFocusRestored=!0,this.focusFallbackTimeout!=null&&clearTimeout(this.focusFallbackTimeout),this.focusFallbackTimeout=window.setTimeout(this.setFocusRecovered.bind(this),100)}setFocusRecovered(){this.needsFocusRestored=!1,this.focusFallbackTimeout!=null&&(clearTimeout(this.focusFallbackTimeout),this.focusFallbackTimeout=null)}shouldTakeFocus(){return this.gos.get("suppressFocusAfterRefresh")?(this.setFocusRecovered(),!1):this.needsFocusRestored?(this.setFocusRecovered(),!0):this.doesRowOrCellHaveBrowserFocus()}onColumnEverythingChanged(){if(!this.focusedCell)return;const e=this.focusedCell.column,t=this.colModel.getCol(e.getId());e!==t&&this.clearFocusedCell()}getFocusCellToUseAfterRefresh(){const{gos:e,focusedCell:t}=this;return e.get("suppressFocusAfterRefresh")||e.get("suppressCellFocus")||!t||!this.doesRowOrCellHaveBrowserFocus()?null:t}getFocusHeaderToUseAfterRefresh(){return this.gos.get("suppressFocusAfterRefresh")||!this.focusedHeader||!this.isDomDataPresentInHierarchy(z(this.beans),kn)?null:this.focusedHeader}doesRowOrCellHaveBrowserFocus(){const e=z(this.beans);return this.isDomDataPresentInHierarchy(e,Bt)?!0:this.isDomDataPresentInHierarchy(e,Wt)}isDomDataPresentInHierarchy(e,t){let o=e;for(;o;){if(Oi(this.gos,o,t))return!0;o=o.parentNode}return!1}getFocusedCell(){return this.focusedCell}getFocusEventParams(e){const{rowIndex:t,rowPinned:o,column:s}=e,i={rowIndex:t,rowPinned:o,column:s,isFullWidthCell:!1},n=this.rowRenderer.getRowByPosition({rowIndex:t,rowPinned:o});return n&&(i.isFullWidthCell=n.isFullWidth()),i}clearFocusedCell(){if(this.focusedCell==null)return;const e=this.getFocusEventParams(this.focusedCell);this.focusedCell=null,this.eventSvc.dispatchEvent({type:"cellFocusCleared",...e})}setFocusedCell(e){this.setFocusRecovered();const{column:t,rowIndex:o,rowPinned:s,forceBrowserFocus:i=!1,preventScrollOnBrowserFocus:n=!1}=e,r=this.colModel.getCol(t);if(!r){this.focusedCell=null;return}this.focusedCell={rowIndex:o,rowPinned:Re(s),column:r},this.eventSvc.dispatchEvent({type:"cellFocused",...this.getFocusEventParams(this.focusedCell),forceBrowserFocus:i,preventScrollOnBrowserFocus:n})}isCellFocused(e){return this.focusedCell==null?!1:Xa(e,this.focusedCell)}isHeaderWrapperFocused(e){if(this.focusedHeader==null)return!1;const{column:t,rowCtrl:{rowIndex:o,pinned:s}}=e,{column:i,headerRowIndex:n}=this.focusedHeader;return t===i&&o===n&&s==i.getPinned()}focusHeaderPosition(e){var a;if(this.setFocusRecovered(),Fe(this.beans))return!1;const{direction:t,fromTab:o,allowUserOverride:s,event:i,fromCell:n,rowWithoutSpanValue:r}=e;let{headerPosition:l}=e;if(n&&((a=this.filterManager)!=null&&a.isAdvFilterHeaderActive()))return this.focusAdvancedFilter(l);if(s){const d=this.focusedHeader,c=ie(this.beans);if(o){const h=this.gos.getCallback("tabToNextHeader");h&&(l=this.getHeaderPositionFromUserFunc({userFunc:h,direction:t,currentPosition:d,headerPosition:l,headerRowCount:c}))}else{const h=this.gos.getCallback("navigateToNextHeader");if(h&&i){const u={key:i.key,previousHeaderPosition:d,nextHeaderPosition:l,headerRowCount:c,event:i};l=h(u)}}}return l?this.focusProvidedHeaderPosition({headerPosition:l,direction:t,event:i,fromCell:n,rowWithoutSpanValue:r}):!1}focusHeaderPositionFromUserFunc(e){if(Fe(this.beans))return!1;const{userFunc:t,headerPosition:o,direction:s,event:i}=e,n=this.focusedHeader,r=ie(this.beans),l=this.getHeaderPositionFromUserFunc({userFunc:t,direction:s,currentPosition:n,headerPosition:o,headerRowCount:r});return!!l&&this.focusProvidedHeaderPosition({headerPosition:l,direction:s,event:i})}getHeaderPositionFromUserFunc(e){const{userFunc:t,direction:o,currentPosition:s,headerPosition:i,headerRowCount:n}=e,l=t({backwards:o==="Before",previousHeaderPosition:s,nextHeaderPosition:i,headerRowCount:n});return l===!0?s:l===!1?null:l}focusProvidedHeaderPosition(e){const{headerPosition:t,direction:o,fromCell:s,rowWithoutSpanValue:i,event:n}=e,{column:r,headerRowIndex:l}=t,{filterManager:a,ctrlsSvc:d,headerNavigation:c}=this.beans;if(l===-1)return a!=null&&a.isAdvFilterHeaderActive()?this.focusAdvancedFilter(t):this.focusGridView({column:r,event:n});c==null||c.scrollToColumn(r,o);const h=d.getHeaderRowContainerCtrl(r.getPinned()),u=(h==null?void 0:h.focusHeader(t.headerRowIndex,r,n))||!1;return c&&u&&(i!=null||s)&&(c.currentHeaderRowWithoutSpan=i??-1),u}focusFirstHeader(){var s;if((s=this.overlays)!=null&&s.isExclusive()&&this.focusOverlay())return!0;let e=this.visibleCols.allCols[0];if(!e)return!1;const{colGroupSvc:t}=this.beans;t&&e.getParent()&&(e=t.getColGroupAtLevel(e,0));const o=Ao(e,0);return this.focusHeaderPosition({headerPosition:o,rowWithoutSpanValue:0})}focusLastHeader(e){var s;if((s=this.overlays)!=null&&s.isExclusive()&&this.focusOverlay(!0))return!0;const t=ie(this.beans)-1,o=H(this.visibleCols.allCols);return this.focusHeaderPosition({headerPosition:{headerRowIndex:t,column:o},rowWithoutSpanValue:-1,event:e})}focusPreviousFromFirstCell(e){var t;return(t=this.filterManager)!=null&&t.isAdvFilterHeaderActive()?this.focusAdvancedFilter(null):this.focusLastHeader(e)}isAnyCellFocused(){return!!this.focusedCell}isRowFocused(e,t){return this.focusedCell==null?!1:this.focusedCell.rowIndex===e&&this.focusedCell.rowPinned===Re(t)}focusOverlay(e){var o,s;const t=((o=this.overlays)==null?void 0:o.isVisible())&&((s=this.overlays.eWrapper)==null?void 0:s.getGui());return!!t&&Gt(t,e)}focusGridView(e){var n,r,l,a,d,c;const{backwards:t=!1,canFocusOverlay:o=!0,event:s}=e;if((n=this.overlays)!=null&&n.isExclusive())return o&&this.focusOverlay(t);if(Uo(this.beans))return t&&!Fe(this.beans)?this.focusLastHeader():o&&this.focusOverlay(t)?!0:t?!1:et(this.beans,t);const i=t?td(this.beans):ed(this.beans);if(i){const h=e.column??((r=this.focusedHeader)==null?void 0:r.column),{rowIndex:u,rowPinned:g}=i,p=Cn(this.beans,i);if(!h||!p||u==null)return!1;if(h.isSuppressNavigable(p)){const f=this.gos.get("enableRtl");let C;return!s||s.key===m.TAB?C=f?m.LEFT:m.RIGHT:C=s.key,(l=this.beans.navigation)==null||l.navigateToNextCell(null,C,{rowIndex:u,column:h,rowPinned:g||null},!0),!0}if((a=this.navigation)==null||a.ensureCellVisible({rowIndex:u,column:h,rowPinned:g}),t){const f=this.rowRenderer.getRowByPosition(i);if(f!=null&&f.isFullWidth()&&((d=this.navigation)!=null&&d.tryToFocusFullWidthRow(i,t)))return!0}return this.setFocusedCell({rowIndex:u,column:h,rowPinned:Re(g),forceBrowserFocus:!0}),(c=this.beans.rangeSvc)==null||c.setRangeToCell({rowIndex:u,rowPinned:g,column:h}),!0}return!!(o&&this.focusOverlay(t)||t&&this.focusLastHeader())}focusAdvancedFilter(e){var t;return this.advFilterFocusColumn=e==null?void 0:e.column,((t=this.beans.advancedFilter)==null?void 0:t.getCtrl().focusHeaderComp())??!1}focusNextFromAdvancedFilter(e,t){var s;const o=(t?void 0:this.advFilterFocusColumn)??((s=this.visibleCols.allCols)==null?void 0:s[0]);return e?this.focusHeaderPosition({headerPosition:{column:o,headerRowIndex:ie(this.beans)-1}}):this.focusGridView({column:o})}clearAdvancedFilterColumn(){this.advFilterFocusColumn=void 0}},fg=class extends v{constructor(){super(...arguments),this.beanName="scrollVisibleSvc"}wireBeans(e){this.ctrlsSvc=e.ctrlsSvc,this.colAnimation=e.colAnimation}postConstruct(){this.getScrollbarWidth(),this.addManagedEventListeners({displayedColumnsChanged:this.updateScrollVisible.bind(this),displayedColumnsWidthChanged:this.updateScrollVisible.bind(this)})}updateScrollVisible(){const{colAnimation:e}=this;e!=null&&e.isActive()?e.executeLaterVMTurn(()=>{e.executeLaterVMTurn(()=>this.updateScrollVisibleImpl())}):this.updateScrollVisibleImpl()}updateScrollVisibleImpl(){var o;const e=this.ctrlsSvc.get("center");if(!e||(o=this.colAnimation)!=null&&o.isActive())return;const t={horizontalScrollShowing:e.isHorizontalScrollShowing(),verticalScrollShowing:this.verticalScrollShowing};this.setScrollsVisible(t),this.updateScrollGap()}updateScrollGap(){const e=this.ctrlsSvc.get("center"),t=e.hasHorizontalScrollGap(),o=e.hasVerticalScrollGap();(this.horizontalScrollGap!==t||this.verticalScrollGap!==o)&&(this.horizontalScrollGap=t,this.verticalScrollGap=o,this.eventSvc.dispatchEvent({type:"scrollGapChanged"}))}setScrollsVisible(e){(this.horizontalScrollShowing!==e.horizontalScrollShowing||this.verticalScrollShowing!==e.verticalScrollShowing)&&(this.horizontalScrollShowing=e.horizontalScrollShowing,this.verticalScrollShowing=e.verticalScrollShowing,this.eventSvc.dispatchEvent({type:"scrollVisibilityChanged"}))}getScrollbarWidth(){if(this.scrollbarWidth==null){const e=this.gos.get("scrollbarWidth"),o=typeof e=="number"&&e>=0?e:Er();o!=null&&(this.scrollbarWidth=o,this.eventSvc.dispatchEvent({type:"scrollbarWidthChanged"}))}return this.scrollbarWidth}},Cg=class extends v{constructor(){super(...arguments),this.beanName="gridDestroySvc",this.destroyCalled=!1}destroy(){var s;if(this.destroyCalled)return;const{stateSvc:e,ctrlsSvc:t,context:o}=this.beans;this.eventSvc.dispatchEvent({type:"gridPreDestroyed",state:(e==null?void 0:e.getState())??{}}),this.destroyCalled=!0,(s=t.get("gridCtrl"))==null||s.destroyGridUi(),o.destroy(),super.destroy()}},Xn=new Set(["gridPreDestroyed","fillStart","pasteStart"]),mg={suppressContextMenu:!1,preventDefaultOnContextMenu:!1,allowContextMenuWithControlKey:!1,suppressMenuHide:!0,enableBrowserTooltips:!1,tooltipTrigger:"hover",tooltipShowDelay:2e3,tooltipHideDelay:1e4,tooltipMouseTrack:!1,tooltipShowMode:"standard",tooltipInteraction:!1,copyHeadersToClipboard:!1,copyGroupHeadersToClipboard:!1,clipboardDelimiter:" ",suppressCopyRowsToClipboard:!1,suppressCopySingleCellRanges:!1,suppressLastEmptyLineOnPaste:!1,suppressClipboardPaste:!1,suppressClipboardApi:!1,suppressCutToClipboard:!1,maintainColumnOrder:!1,enableStrictPivotColumnOrder:!1,suppressFieldDotNotation:!1,allowDragFromColumnsToolPanel:!1,suppressMovableColumns:!1,suppressColumnMoveAnimation:!1,suppressMoveWhenColumnDragging:!1,suppressDragLeaveHidesColumns:!1,suppressRowGroupHidesColumns:!1,suppressAutoSize:!1,autoSizePadding:20,skipHeaderOnAutoSize:!1,singleClickEdit:!1,suppressClickEdit:!1,readOnlyEdit:!1,stopEditingWhenCellsLoseFocus:!1,enterNavigatesVertically:!1,enterNavigatesVerticallyAfterEdit:!1,enableCellEditingOnBackspace:!1,undoRedoCellEditing:!1,undoRedoCellEditingLimit:10,suppressCsvExport:!1,suppressExcelExport:!1,cacheQuickFilter:!1,includeHiddenColumnsInQuickFilter:!1,excludeChildrenWhenTreeDataFiltering:!1,enableAdvancedFilter:!1,includeHiddenColumnsInAdvancedFilter:!1,enableCharts:!1,masterDetail:!1,keepDetailRows:!1,keepDetailRowsCount:10,detailRowAutoHeight:!1,tabIndex:0,rowBuffer:10,valueCache:!1,valueCacheNeverExpires:!1,enableCellExpressions:!1,suppressTouch:!1,suppressFocusAfterRefresh:!1,suppressBrowserResizeObserver:!1,suppressPropertyNamesCheck:!1,suppressChangeDetection:!1,debug:!1,suppressLoadingOverlay:!1,suppressNoRowsOverlay:!1,pagination:!1,paginationPageSize:100,paginationPageSizeSelector:!0,paginationAutoPageSize:!1,paginateChildRows:!1,suppressPaginationPanel:!1,pivotMode:!1,pivotPanelShow:"never",pivotDefaultExpanded:0,pivotSuppressAutoColumn:!1,suppressExpandablePivotGroups:!1,functionsReadOnly:!1,suppressAggFuncInHeader:!1,alwaysAggregateAtRootLevel:!1,aggregateOnlyChangedColumns:!1,suppressAggFilteredOnly:!1,removePivotHeaderRowWhenSingleValueColumn:!1,animateRows:!0,cellFlashDuration:500,cellFadeDuration:1e3,allowShowChangeAfterFilter:!1,domLayout:"normal",ensureDomOrder:!1,enableRtl:!1,suppressColumnVirtualisation:!1,suppressMaxRenderedRowRestriction:!1,suppressRowVirtualisation:!1,rowDragManaged:!1,suppressRowDrag:!1,suppressMoveWhenRowDragging:!1,rowDragEntireRow:!1,rowDragMultiRow:!1,embedFullWidthRows:!1,groupDisplayType:"singleColumn",groupDefaultExpanded:0,groupMaintainOrder:!1,groupSelectsChildren:!1,groupSuppressBlankHeader:!1,groupSelectsFiltered:!1,showOpenedGroup:!1,groupRemoveSingleChildren:!1,groupRemoveLowestSingleChildren:!1,groupHideOpenParents:!1,groupAllowUnbalanced:!1,rowGroupPanelShow:"never",suppressMakeColumnVisibleAfterUnGroup:!1,treeData:!1,rowGroupPanelSuppressSort:!1,suppressGroupRowsSticky:!1,rowModelType:"clientSide",asyncTransactionWaitMillis:50,suppressModelUpdateAfterUpdateTransaction:!1,cacheOverflowSize:1,infiniteInitialRowCount:1,serverSideInitialRowCount:1,cacheBlockSize:100,maxBlocksInCache:-1,maxConcurrentDatasourceRequests:2,blockLoadDebounceMillis:0,purgeClosedRowNodes:!1,serverSideSortAllLevels:!1,serverSideOnlyRefreshFilteredGroups:!1,serverSidePivotResultFieldSeparator:"_",viewportRowModelPageSize:5,viewportRowModelBufferSize:5,alwaysShowHorizontalScroll:!1,alwaysShowVerticalScroll:!1,debounceVerticalScrollbar:!1,suppressHorizontalScroll:!1,suppressScrollOnNewData:!1,suppressScrollWhenPopupsAreOpen:!1,suppressAnimationFrame:!1,suppressMiddleClickScrolls:!1,suppressPreventDefaultOnMouseWheel:!1,rowMultiSelectWithClick:!1,suppressRowDeselection:!1,suppressRowClickSelection:!1,suppressCellFocus:!1,suppressHeaderFocus:!1,suppressMultiRangeSelection:!1,enableCellTextSelection:!1,enableRangeSelection:!1,enableRangeHandle:!1,enableFillHandle:!1,fillHandleDirection:"xy",suppressClearOnFillReduction:!1,accentedSort:!1,unSortIcon:!1,suppressMultiSort:!1,alwaysMultiSort:!1,suppressMaintainUnsortedOrder:!1,suppressRowHoverHighlight:!1,suppressRowTransform:!1,columnHoverHighlight:!1,deltaSort:!1,enableGroupEdit:!1,groupLockGroupColumns:0,serverSideEnableClientSideSort:!1,suppressServerSideFullWidthLoadingRow:!1,pivotMaxGeneratedColumns:-1,columnMenu:"new",reactiveCustomComponents:!0,suppressSetFilterByDefault:!1,rowNumbers:!1},Ue=(e,t)=>({tag:"span",ref:`eSort${e}`,cls:`ag-sort-indicator-icon ag-sort-${t} ag-hidden`,attrs:{"aria-hidden":"true"}}),vg={tag:"span",cls:"ag-sort-indicator-container",children:[Ue("Order","order"),Ue("Asc","ascending-icon"),Ue("Desc","descending-icon"),Ue("Mixed","mixed-icon"),Ue("None","none-icon")]},Xo=class extends N{constructor(e){super(),this.eSortOrder=x,this.eSortAsc=x,this.eSortDesc=x,this.eSortMixed=x,this.eSortNone=x,e||this.setTemplate(vg)}attachCustomElements(e,t,o,s,i){this.eSortOrder=e,this.eSortAsc=t,this.eSortDesc=o,this.eSortMixed=s,this.eSortNone=i}setupSort(e,t=!1){if(this.column=e,this.suppressOrder=t,this.setupMultiSortIndicator(),!e.isSortable()&&!e.getColDef().showRowGroup)return;this.addInIcon("sortAscending",this.eSortAsc,e),this.addInIcon("sortDescending",this.eSortDesc,e),this.addInIcon("sortUnSort",this.eSortNone,e);const o=this.updateIcons.bind(this),s=this.onSortChanged.bind(this);this.addManagedPropertyListener("unSortIcon",o),this.addManagedEventListeners({newColumnsLoaded:o,sortChanged:s,columnRowGroupChanged:s}),this.onSortChanged()}addInIcon(e,t,o){if(t==null)return;const s=Zt(e,this.beans,o);s&&t.appendChild(s)}onSortChanged(){this.updateIcons(),this.suppressOrder||this.updateSortOrder()}updateIcons(){const{eSortAsc:e,eSortDesc:t,eSortNone:o,column:s,gos:i,beans:n}=this,r=n.sortSvc.getDisplaySortForColumn(s);if(e&&W(e,r==="asc",{skipAriaHidden:!0}),t&&W(t,r==="desc",{skipAriaHidden:!0}),o){const l=!s.getColDef().unSortIcon&&!i.get("unSortIcon"),a=r==null;W(o,!l&&a,{skipAriaHidden:!0})}}setupMultiSortIndicator(){const{eSortMixed:e,column:t,gos:o}=this;this.addInIcon("sortUnSort",e,t);const s=t.getColDef().showRowGroup;ae(o)&&s&&(this.addManagedEventListeners({sortChanged:this.updateMultiSortIndicator.bind(this),columnRowGroupChanged:this.updateMultiSortIndicator.bind(this)}),this.updateMultiSortIndicator())}updateMultiSortIndicator(){const{eSortMixed:e,beans:t,column:o}=this;if(e){const s=t.sortSvc.getDisplaySortForColumn(o)==="mixed";W(e,s,{skipAriaHidden:!0})}}updateSortOrder(){const{eSortOrder:e,column:t,beans:{sortSvc:o}}=this;if(!e)return;const s=o.getColumnsWithSortingOrdered(),i=o.getDisplaySortIndexForColumn(t)??-1,n=s.some(l=>o.getDisplaySortIndexForColumn(l)??!1),r=i>=0&&n;W(e,r,{skipAriaHidden:!0}),i>=0?e.textContent=(i+1).toString():de(e)}},wg={selector:"AG-SORT-INDICATOR",component:Xo},yg=["asc","desc",null],bg=class extends v{constructor(){super(...arguments),this.beanName="sortSvc"}progressSort(e,t,o){const s=this.getNextSortDirection(e);this.setSortForColumn(e,s,t,o)}progressSortFromEvent(e,t){const s=this.gos.get("multiSortKey")==="ctrl"?t.ctrlKey||t.metaKey:t.shiftKey;this.progressSort(e,s,"uiColumnSorted")}setSortForColumn(e,t,o,s){var c;t!=="asc"&&t!=="desc"&&(t=null);const{gos:i,showRowGroupCols:n}=this.beans,r=ae(i);let l=[e];if(r&&e.getColDef().showRowGroup){const h=(c=n==null?void 0:n.getSourceColumnsForGroupColumn)==null?void 0:c.call(n,e),u=h==null?void 0:h.filter(g=>g.isSortable());u&&(l=[e,...u])}l.forEach(h=>this.setColSort(h,t,s));const a=(o||i.get("alwaysMultiSort"))&&!i.get("suppressMultiSort"),d=[];if(!a){const h=this.clearSortBarTheseColumns(l,s);d.push(...h)}this.updateSortIndex(e),d.push(...l),this.dispatchSortChangedEvents(s,d)}updateSortIndex(e){const{gos:t,colModel:o,showRowGroupCols:s}=this.beans,i=ae(t),n=s==null?void 0:s.getShowRowGroupCol(e.getId()),r=i&&n||e,l=this.getColumnsWithSortingOrdered();o.forAllCols(c=>this.setColSortIndex(c,null));const a=l.filter(c=>i&&c.getColDef().showRowGroup?!1:c!==r);(r.getSort()?[...a,r]:a).forEach((c,h)=>this.setColSortIndex(c,h))}onSortChanged(e,t){this.dispatchSortChangedEvents(e,t)}isSortActive(){let e=!1;return this.beans.colModel.forAllCols(t=>{t.getSort()&&(e=!0)}),e}dispatchSortChangedEvents(e,t){const o={type:"sortChanged",source:e};t&&(o.columns=t),this.eventSvc.dispatchEvent(o)}clearSortBarTheseColumns(e,t){const o=[];return this.beans.colModel.forAllCols(s=>{e.includes(s)||(s.getSort()&&o.push(s),this.setColSort(s,void 0,t))}),o}getNextSortDirection(e){const t=e.getColDef().sortingOrder??this.gos.get("sortingOrder")??yg,o=t.indexOf(e.getSort()),s=o<0,i=o==t.length-1;return s||i?t[0]:t[o+1]}getIndexedSortMap(){const{gos:e,colModel:t,showRowGroupCols:o,rowGroupColsSvc:s}=this.beans;let i=[];if(t.forAllCols(d=>{d.getSort()&&i.push(d)}),t.isPivotMode()){const d=ae(e);i=i.filter(c=>{const h=!!c.getAggFunc(),u=!c.isPrimary(),g=d?o==null?void 0:o.getShowRowGroupCol(c.getId()):c.getColDef().showRowGroup;return h||u||g})}const n=(s==null?void 0:s.columns.filter(d=>!!d.getSort()))??[],r={};i.forEach((d,c)=>r[d.getId()]=c),i.sort((d,c)=>{const h=d.getSortIndex(),u=c.getSortIndex();if(h!=null&&u!=null)return h-u;if(h==null&&u==null){const g=r[d.getId()],p=r[c.getId()];return g>p?1:-1}else return u==null?-1:1});const l=ae(e)&&!!n.length;l&&(i=[...new Set(i.map(d=>(o==null?void 0:o.getShowRowGroupCol(d.getId()))??d))]);const a=new Map;return i.forEach((d,c)=>a.set(d,c)),l&&n.forEach(d=>{const c=o.getShowRowGroupCol(d.getId());a.set(d,a.get(c))}),a}getColumnsWithSortingOrdered(){return[...this.getIndexedSortMap().entries()].sort(([,e],[,t])=>e-t).map(([e])=>e)}getSortModel(){return this.getColumnsWithSortingOrdered().filter(e=>e.getSort()).map(e=>({sort:e.getSort(),colId:e.getId()}))}getSortOptions(){return this.getColumnsWithSortingOrdered().filter(e=>e.getSort()).map(e=>({sort:e.getSort(),column:e}))}canColumnDisplayMixedSort(e){const t=ae(this.gos),o=!!e.getColDef().showRowGroup;return t&&o}getDisplaySortForColumn(e){var r;const t=(r=this.beans.showRowGroupCols)==null?void 0:r.getSourceColumnsForGroupColumn(e);if(!this.canColumnDisplayMixedSort(e)||!(t!=null&&t.length))return e.getSort();const s=e.getColDef().field!=null||!!e.getColDef().valueGetter?[e,...t]:t,i=s[0].getSort();return s.every(l=>l.getSort()==i)?i:"mixed"}getDisplaySortIndexForColumn(e){return this.getIndexedSortMap().get(e)}setupHeader(e,t,o){let s=0;e.addManagedListeners(t,{movingChanged:()=>{s=Date.now()}}),o&&e.addManagedElementListeners(o,{click:n=>{const r=t.isMoving(),a=Date.now()-s<50;r||a||this.progressSortFromEvent(t,n)}});const i=()=>{var r;const n=t.getSort();if(e.toggleCss("ag-header-cell-sorted-asc",n==="asc"),e.toggleCss("ag-header-cell-sorted-desc",n==="desc"),e.toggleCss("ag-header-cell-sorted-none",!n),t.getColDef().showRowGroup){const l=(r=this.beans.showRowGroupCols)==null?void 0:r.getSourceColumnsForGroupColumn(t),d=!(l==null?void 0:l.every(c=>t.getSort()==c.getSort()));e.toggleCss("ag-header-cell-sorted-mixed",d)}};e.addManagedEventListeners({sortChanged:i,columnRowGroupChanged:i})}initCol(e){const{sort:t,initialSort:o,sortIndex:s,initialSortIndex:i}=e.colDef;t!==void 0?(t==="asc"||t==="desc")&&(e.sort=t):(o==="asc"||o==="desc")&&(e.sort=o),s!==void 0?s!==null&&(e.sortIndex=s):i!==null&&(e.sortIndex=i)}updateColSort(e,t,o){t!==void 0&&(t==="desc"||t==="asc"?this.setColSort(e,t,o):this.setColSort(e,void 0,o))}setColSort(e,t,o){e.sort!==t&&(e.sort=t,e.dispatchColEvent("sortChanged",o)),e.dispatchStateUpdatedEvent("sort")}setColSortIndex(e,t){e.sortIndex=t,e.dispatchStateUpdatedEvent("sortIndex")}createSortIndicator(e){return new Xo(e)}getSortIndicatorSelector(){return wg}},yo={agSetColumnFilter:"SetFilter",agSetColumnFloatingFilter:"SetFilter",agMultiColumnFilter:"MultiFilter",agMultiColumnFloatingFilter:"MultiFilter",agGroupColumnFilter:"GroupFilter",agGroupColumnFloatingFilter:"GroupFilter",agGroupCellRenderer:"GroupCellRenderer",agGroupRowRenderer:"GroupCellRenderer",agRichSelect:"RichSelect",agRichSelectCellEditor:"RichSelect",agDetailCellRenderer:"SharedMasterDetail",agSparklineCellRenderer:"Sparklines",agDragAndDropImage:"SharedDragAndDrop",agColumnHeader:"ColumnHeaderComp",agColumnGroupHeader:"ColumnGroupHeaderComp",agSortIndicator:"Sort",agAnimateShowChangeCellRenderer:"HighlightChanges",agAnimateSlideCellRenderer:"HighlightChanges",agLoadingCellRenderer:"LoadingCellRenderer",agSkeletonCellRenderer:"SkeletonCellRenderer",agCheckboxCellRenderer:"CheckboxCellRenderer",agLoadingOverlay:"Overlay",agNoRowsOverlay:"Overlay",agTooltipComponent:"Tooltip",agReadOnlyFloatingFilter:"CustomFilter",agTextColumnFilter:"TextFilter",agNumberColumnFilter:"NumberFilter",agDateColumnFilter:"DateFilter",agDateInput:"DateFilter",agTextColumnFloatingFilter:"TextFilter",agNumberColumnFloatingFilter:"NumberFilter",agDateColumnFloatingFilter:"DateFilter",agCellEditor:"TextEditor",agSelectCellEditor:"SelectEditor",agTextCellEditor:"TextEditor",agNumberCellEditor:"NumberEditor",agDateCellEditor:"DateEditor",agDateStringCellEditor:"DateEditor",agCheckboxCellEditor:"CheckboxEditor",agLargeTextCellEditor:"LargeTextEditor",agMenuItem:"MenuItem",agColumnsToolPanel:"ColumnsToolPanel",agFiltersToolPanel:"FiltersToolPanel",agAggregationComponent:"StatusBar",agSelectedRowCountComponent:"StatusBar",agTotalRowCountComponent:"StatusBar",agFilteredRowCountComponent:"StatusBar",agTotalAndFilteredRowCountComponent:"StatusBar",agFindCellRenderer:"Find"},Sg={aggFunc:"SharedAggregation",autoHeight:"RowAutoHeight",cellClass:"CellStyle",cellClassRules:"CellStyle",cellEditor:({cellEditor:e,editable:t})=>t?typeof e=="string"?yo[e]??"CustomEditor":"CustomEditor":null,cellRenderer:({cellRenderer:e})=>typeof e!="string"?null:yo[e],cellStyle:"CellStyle",columnChooserParams:"ColumnMenu",contextMenuItems:"ContextMenu",dndSource:"DragAndDrop",dndSourceOnRowDrag:"DragAndDrop",editable:({editable:e,cellEditor:t})=>e&&!t?"TextEditor":null,enableCellChangeFlash:"HighlightChanges",enablePivot:"SharedPivot",enableRowGroup:"SharedRowGrouping",enableValue:"SharedAggregation",filter:({filter:e})=>e&&typeof e!="string"&&typeof e!="boolean"?"CustomFilter":typeof e=="string"?yo[e]??"ColumnFilter":"ColumnFilter",floatingFilter:"ColumnFilter",getQuickFilterText:"QuickFilter",headerTooltip:"Tooltip",mainMenuItems:"ColumnMenu",menuTabs:e=>{var o;const t=["columnsMenuTab","generalMenuTab"];return(o=e.menuTabs)!=null&&o.some(s=>t.includes(s))?"ColumnMenu":null},pivot:"SharedPivot",pivotIndex:"SharedPivot",rowDrag:"RowDrag",rowGroup:"SharedRowGrouping",rowGroupIndex:"SharedRowGrouping",tooltipField:"Tooltip",tooltipValueGetter:"Tooltip",spanRows:"CellSpan"},Rg=["columnEverythingChanged","newColumnsLoaded","columnPivotModeChanged","pivotMaxColumnsExceeded","columnRowGroupChanged","expandOrCollapseAll","columnPivotChanged","gridColumnsChanged","columnValueChanged","columnMoved","columnVisible","columnPinned","columnGroupOpened","columnResized","displayedColumnsChanged","virtualColumnsChanged","columnHeaderMouseOver","columnHeaderMouseLeave","columnHeaderClicked","columnHeaderContextMenu","asyncTransactionsFlushed","rowGroupOpened","rowDataUpdated","pinnedRowDataChanged","pinnedRowsChanged","rangeSelectionChanged","cellSelectionChanged","chartCreated","chartRangeSelectionChanged","chartOptionsChanged","chartDestroyed","toolPanelVisibleChanged","toolPanelSizeChanged","modelUpdated","cutStart","cutEnd","pasteStart","pasteEnd","fillStart","fillEnd","cellSelectionDeleteStart","cellSelectionDeleteEnd","rangeDeleteStart","rangeDeleteEnd","undoStarted","undoEnded","redoStarted","redoEnded","cellClicked","cellDoubleClicked","cellMouseDown","cellContextMenu","cellValueChanged","cellEditRequest","rowValueChanged","headerFocused","cellFocused","rowSelected","selectionChanged","tooltipShow","tooltipHide","cellKeyDown","cellMouseOver","cellMouseOut","filterChanged","filterModified","filterOpened","advancedFilterBuilderVisibleChanged","sortChanged","virtualRowRemoved","rowClicked","rowDoubleClicked","gridReady","gridPreDestroyed","gridSizeChanged","viewportChanged","firstDataRendered","dragStarted","dragStopped","dragCancelled","rowEditingStarted","rowEditingStopped","cellEditingStarted","cellEditingStopped","bodyScroll","bodyScrollEnd","paginationChanged","componentStateChanged","storeRefreshed","stateUpdated","columnMenuVisibleChanged","contextMenuVisibleChanged","rowDragEnter","rowDragMove","rowDragLeave","rowDragEnd","rowDragCancel","findChanged","rowResizeStarted","rowResizeEnded"],Fg=["scrollbarWidthChanged","keyShortcutChangedCellStart","keyShortcutChangedCellEnd","pinnedHeightChanged","cellFocusCleared","fullWidthRowFocused","checkboxChanged","heightScaleChanged","suppressMovableColumns","suppressMenuHide","suppressFieldDotNotation","columnPanelItemDragStart","columnPanelItemDragEnd","bodyHeightChanged","columnContainerWidthChanged","displayedColumnsWidthChanged","scrollVisibilityChanged","scrollGapChanged","columnHoverChanged","flashCells","paginationPixelOffsetChanged","displayedRowsChanged","leftPinnedWidthChanged","rightPinnedWidthChanged","rowContainerHeightChanged","headerHeightChanged","columnGroupHeaderHeightChanged","columnHeaderHeightChanged","gridStylesChanged","storeUpdated","filterDestroyed","rowDataUpdateStarted","rowCountReady","advancedFilterEnabledChanged","dataTypesInferred","fieldValueChanged","fieldPickerValueSelected","richSelectListRowSelected","sideBarUpdated","alignedGridScroll","alignedGridColumn","gridOptionsChanged","chartTitleEdit","recalculateRowBounds","stickyTopOffsetChanged","overlayExclusiveChanged","beforeRefreshModel","rowNodeDataChanged"],xg=()=>[...Rg,...Fg],Dg=["overlayLoadingTemplate","overlayNoRowsTemplate","gridId","quickFilterText","rowModelType","editType","domLayout","clipboardDelimiter","rowGroupPanelShow","multiSortKey","pivotColumnGroupTotals","pivotRowTotals","pivotPanelShow","fillHandleDirection","groupDisplayType","treeDataDisplayType","treeDataChildrenField","treeDataParentIdField","colResizeDefault","tooltipTrigger","serverSidePivotResultFieldSeparator","columnMenu","tooltipShowMode","grandTotalRow","themeCssLayer","findSearchValue","styleNonce"],Pg=["components","rowStyle","context","autoGroupColumnDef","localeText","icons","datasource","dragAndDropImageComponentParams","serverSideDatasource","viewportDatasource","groupRowRendererParams","aggFuncs","fullWidthCellRendererParams","defaultColGroupDef","defaultColDef","defaultCsvExportParams","defaultExcelExportParams","columnTypes","rowClassRules","detailCellRendererParams","loadingCellRendererParams","loadingOverlayComponentParams","noRowsOverlayComponentParams","popupParent","themeStyleContainer","statusBar","chartThemeOverrides","customChartThemes","chartToolPanelsDef","dataTypeDefinitions","advancedFilterParent","advancedFilterBuilderParams","initialState","autoSizeStrategy","selectionColumnDef","findOptions"],Eg=["sortingOrder","alignedGrids","rowData","columnDefs","excelStyles","pinnedTopRowData","pinnedBottomRowData","chartThemes","rowClass","paginationPageSizeSelector"],Tg=["rowHeight","detailRowHeight","rowBuffer","headerHeight","groupHeaderHeight","groupLockGroupColumns","floatingFiltersHeight","pivotHeaderHeight","pivotGroupHeaderHeight","groupDefaultExpanded","pivotDefaultExpanded","viewportRowModelPageSize","viewportRowModelBufferSize","autoSizePadding","maxBlocksInCache","maxConcurrentDatasourceRequests","tooltipShowDelay","tooltipHideDelay","cacheOverflowSize","paginationPageSize","cacheBlockSize","infiniteInitialRowCount","serverSideInitialRowCount","scrollbarWidth","asyncTransactionWaitMillis","blockLoadDebounceMillis","keepDetailRowsCount","undoRedoCellEditingLimit","cellFlashDuration","cellFadeDuration","tabIndex","pivotMaxGeneratedColumns"],kg=["theme","rowSelection"],Ig=["cellSelection","sideBar","rowNumbers","suppressGroupChangesColumnVisibility","groupAggFiltering","suppressStickyTotalRow","groupHideParentOfSingleChild","enableRowPinning"],Lg=["loadThemeGoogleFonts","suppressMakeColumnVisibleAfterUnGroup","suppressRowClickSelection","suppressCellFocus","suppressHeaderFocus","suppressHorizontalScroll","groupSelectsChildren","alwaysShowHorizontalScroll","alwaysShowVerticalScroll","debug","enableBrowserTooltips","enableCellExpressions","groupSuppressBlankHeader","suppressMenuHide","suppressRowDeselection","unSortIcon","suppressMultiSort","alwaysMultiSort","singleClickEdit","suppressLoadingOverlay","suppressNoRowsOverlay","suppressAutoSize","skipHeaderOnAutoSize","suppressColumnMoveAnimation","suppressMoveWhenColumnDragging","suppressMovableColumns","suppressFieldDotNotation","enableRangeSelection","enableRangeHandle","enableFillHandle","suppressClearOnFillReduction","deltaSort","suppressTouch","allowContextMenuWithControlKey","suppressContextMenu","suppressDragLeaveHidesColumns","suppressRowGroupHidesColumns","suppressMiddleClickScrolls","suppressPreventDefaultOnMouseWheel","suppressCopyRowsToClipboard","copyHeadersToClipboard","copyGroupHeadersToClipboard","pivotMode","suppressAggFuncInHeader","suppressColumnVirtualisation","alwaysAggregateAtRootLevel","suppressFocusAfterRefresh","functionsReadOnly","animateRows","groupSelectsFiltered","groupRemoveSingleChildren","groupRemoveLowestSingleChildren","enableRtl","enableCellSpan","suppressClickEdit","rowDragEntireRow","rowDragManaged","suppressRowDrag","suppressMoveWhenRowDragging","rowDragMultiRow","enableGroupEdit","embedFullWidthRows","suppressPaginationPanel","groupHideOpenParents","groupAllowUnbalanced","pagination","paginationAutoPageSize","suppressScrollOnNewData","suppressScrollWhenPopupsAreOpen","purgeClosedRowNodes","cacheQuickFilter","includeHiddenColumnsInQuickFilter","ensureDomOrder","accentedSort","suppressChangeDetection","valueCache","valueCacheNeverExpires","aggregateOnlyChangedColumns","suppressAnimationFrame","suppressExcelExport","suppressCsvExport","includeHiddenColumnsInAdvancedFilter","suppressMultiRangeSelection","enterNavigatesVerticallyAfterEdit","enterNavigatesVertically","suppressPropertyNamesCheck","rowMultiSelectWithClick","suppressRowHoverHighlight","suppressRowTransform","suppressClipboardPaste","suppressLastEmptyLineOnPaste","enableCharts","suppressMaintainUnsortedOrder","enableCellTextSelection","suppressBrowserResizeObserver","suppressMaxRenderedRowRestriction","excludeChildrenWhenTreeDataFiltering","tooltipMouseTrack","tooltipInteraction","keepDetailRows","paginateChildRows","preventDefaultOnContextMenu","undoRedoCellEditing","allowDragFromColumnsToolPanel","pivotSuppressAutoColumn","suppressExpandablePivotGroups","debounceVerticalScrollbar","detailRowAutoHeight","serverSideSortAllLevels","serverSideEnableClientSideSort","serverSideOnlyRefreshFilteredGroups","suppressAggFilteredOnly","showOpenedGroup","suppressClipboardApi","suppressModelUpdateAfterUpdateTransaction","stopEditingWhenCellsLoseFocus","groupMaintainOrder","columnHoverHighlight","readOnlyEdit","suppressRowVirtualisation","enableCellEditingOnBackspace","resetRowDataOnUpdate","removePivotHeaderRowWhenSingleValueColumn","suppressCopySingleCellRanges","suppressGroupRowsSticky","suppressCutToClipboard","rowGroupPanelSuppressSort","allowShowChangeAfterFilter","enableAdvancedFilter","masterDetail","treeData","reactiveCustomComponents","applyQuickFilterBeforePivotOrAgg","suppressServerSideFullWidthLoadingRow","suppressAdvancedFilterEval","loading","maintainColumnOrder","enableStrictPivotColumnOrder","suppressSetFilterByDefault"],Mg=["doesExternalFilterPass","processPivotResultColDef","processPivotResultColGroupDef","getBusinessKeyForNode","isRowSelectable","rowDragText","groupRowRenderer","dragAndDropImageComponent","fullWidthCellRenderer","loadingCellRenderer","loadingOverlayComponent","noRowsOverlayComponent","detailCellRenderer","quickFilterParser","quickFilterMatcher","getLocaleText","isExternalFilterPresent","getRowHeight","getRowClass","getRowStyle","getContextMenuItems","getMainMenuItems","processRowPostCreate","processCellForClipboard","getGroupRowAgg","isFullWidthRow","sendToClipboard","focusGridInnerElement","navigateToNextHeader","tabToNextHeader","navigateToNextCell","tabToNextCell","processCellFromClipboard","getDocument","postProcessPopup","getChildCount","getDataPath","isRowMaster","postSortRows","processHeaderForClipboard","processUnpinnedColumns","processGroupHeaderForClipboard","paginationNumberFormatter","processDataFromClipboard","getServerSideGroupKey","isServerSideGroup","createChartContainer","getChartToolbarItems","fillOperation","isApplyServerSideTransaction","getServerSideGroupLevelParams","isServerSideGroupOpenByDefault","isGroupOpenByDefault","initialGroupOrderComparator","loadingCellRendererSelector","getRowId","chartMenuItems","groupTotalRow","alwaysPassFilter","isRowPinnable","isRowPinned"],Ys=()=>[...Eg,...Pg,...Dg,...Tg,...Mg,...Lg,...Ig,...kg],Ag={alignedGrids:"AlignedGrids",allowContextMenuWithControlKey:"ContextMenu",autoSizeStrategy:"ColumnAutoSize",cellSelection:"CellSelection",columnHoverHighlight:"ColumnHover",datasource:"InfiniteRowModel",doesExternalFilterPass:"ExternalFilter",editType:"EditCore",enableAdvancedFilter:"AdvancedFilter",enableCellSpan:"CellSpan",enableCharts:"IntegratedCharts",enableRangeSelection:"CellSelection",enableRowPinning:"PinnedRow",findSearchValue:"Find",getContextMenuItems:"ContextMenu",getLocaleText:"Locale",getMainMenuItems:"ColumnMenu",getRowClass:"RowStyle",getRowStyle:"RowStyle",groupTotalRow:"SharedRowGrouping",grandTotalRow:"SharedRowGrouping",initialState:"GridState",isExternalFilterPresent:"ExternalFilter",isRowPinnable:"PinnedRow",localeText:"Locale",masterDetail:"SharedMasterDetail",pagination:"Pagination",pinnedBottomRowData:"PinnedRow",pinnedTopRowData:"PinnedRow",pivotMode:"SharedPivot",pivotPanelShow:"RowGroupingPanel",quickFilterText:"QuickFilter",rowClass:"RowStyle",rowClassRules:"RowStyle",rowData:"ClientSideRowModel",rowDragManaged:"RowDrag",rowGroupPanelShow:"RowGroupingPanel",rowNumbers:"RowNumbers",rowSelection:"SharedRowSelection",rowStyle:"RowStyle",serverSideDatasource:"ServerSideRowModel",sideBar:"SideBar",statusBar:"StatusBar",treeData:"SharedTreeData",undoRedoCellEditing:"UndoRedoEdit",valueCache:"ValueCache",viewportDatasource:"ViewportRowModel"},Hg=0,Gg=0,Bg=class extends v{constructor(){super(...arguments),this.beanName="gos",this.domDataKey="__AG_"+Math.random().toString(),this.gridInstanceId=Gg++,this.gridReadyFired=!1,this.queueEvents=[],this.propEventSvc=new st,this.globalEventHandlerFactory=e=>(t,o)=>{if(!this.isAlive())return;const s=Xn.has(t);if(s&&!e||!s&&e)return;const i=(n,r)=>{const l=this.gridOptions[_i(n)];typeof l=="function"&&this.beans.frameworkOverrides.wrapOutgoing(()=>l(r))};if(this.gridReadyFired)i(t,o);else if(t==="gridReady"){i(t,o),this.gridReadyFired=!0;for(const n of this.queueEvents)i(n.eventName,n.event);this.queueEvents=[]}else this.queueEvents.push({eventName:t,event:o})}}wireBeans(e){this.gridOptions=e.gridOptions,this.validation=e.validation,this.api=e.gridApi,this.gridId=e.context.getGridId()}get gridOptionsContext(){return this.gridOptions.context}postConstruct(){this.validateGridOptions(this.gridOptions),this.eventSvc.addGlobalListener(this.globalEventHandlerFactory().bind(this),!0),this.eventSvc.addGlobalListener(this.globalEventHandlerFactory(!0).bind(this),!1),this.propEventSvc.setFrameworkOverrides(this.beans.frameworkOverrides),this.addManagedEventListeners({gridOptionsChanged:({options:e})=>{this.updateGridOptions({options:e,force:!0,source:"gridOptionsUpdated"})}})}destroy(){super.destroy(),this.queueEvents=[]}get(e){return this.gridOptions[e]??mg[e]}getCallback(e){return this.mergeGridCommonParams(this.gridOptions[e])}exists(e){return k(this.gridOptions[e])}mergeGridCommonParams(e){return e&&(o=>e(this.addGridCommonParams(o)))}updateGridOptions({options:e,force:t,source:o="api"}){const s={id:Hg++,properties:[]},i=[],{gridOptions:n,validation:r}=this;for(const l of Object.keys(e)){const a=e[l];r==null||r.warnOnInitialPropertyUpdate(o,l);const d=t||typeof a=="object"&&o==="api",c=n[l];if(d||c!==a){n[l]=a;const h={type:l,currentValue:a,previousValue:c,changeSet:s,source:o};i.push(h)}}this.validateGridOptions(this.gridOptions),s.properties=i.map(l=>l.type),i.forEach(l=>{Xe(this,`Updated property ${l.type} from`,l.previousValue," to ",l.currentValue),this.propEventSvc.dispatchEvent(l)})}addPropertyEventListener(e,t){this.propEventSvc.addEventListener(e,t)}removePropertyEventListener(e,t){this.propEventSvc.removeEventListener(e,t)}getDomDataKey(){return this.domDataKey}addGridCommonParams(e){return e.api=this.api,e.context=this.gridOptionsContext,e}validateOptions(e,t){for(const o of Object.keys(e)){const s=e[o];if(s==null||s===!1)continue;let i=t[o];typeof i=="function"&&(i=i(e,this.gridOptions,this.beans)),i&&this.assertModuleRegistered(i,o)}}validateGridOptions(e){var t;this.validateOptions(e,Ag),(t=this.validation)==null||t.processGridOptions(e)}validateColDef(e,t,o){var s,i;(o||!((s=this.beans.dataTypeSvc)!=null&&s.isColPendingInference(t)))&&(this.validateOptions(e,Sg),(i=this.validation)==null||i.validateColDef(e))}assertModuleRegistered(e,t){const o=Array.isArray(e)?e.some(s=>this.isModuleRegistered(s)):this.isModuleRegistered(e);return o||K(200,{...this.getModuleErrorParams(),moduleName:e,reasonOrId:t}),o}getModuleErrorParams(){return{gridId:this.gridId,gridScoped:cn(),rowModelType:this.get("rowModelType"),isUmd:Ra()}}isModuleRegistered(e){return To(e,this.gridId,this.get("rowModelType"))}};function Jn(e){const t={"aria-hidden":"true"};return{tag:"div",cls:"ag-cell-label-container",role:"presentation",children:[{tag:"span",ref:"eMenu",cls:"ag-header-icon ag-header-cell-menu-button",attrs:t},{tag:"span",ref:"eFilterButton",cls:"ag-header-icon ag-header-cell-filter-button",attrs:t},{tag:"div",ref:"eLabel",cls:"ag-header-cell-label",role:"presentation",children:[{tag:"span",ref:"eText",cls:"ag-header-cell-text"},{tag:"span",ref:"eFilter",cls:"ag-header-icon ag-header-label-icon ag-filter-icon",attrs:t},e?{tag:"ag-sort-indicator",ref:"eSortIndicator"}:null]}]}}var Og=Jn(!0),Wg=Jn(!1),Vg=class extends N{constructor(){super(...arguments),this.eFilter=x,this.eFilterButton=x,this.eSortIndicator=x,this.eMenu=x,this.eLabel=x,this.eText=x,this.eSortOrder=x,this.eSortAsc=x,this.eSortDesc=x,this.eSortMixed=x,this.eSortNone=x,this.isLoadingInnerComponent=!1}refresh(e){var o,s,i;const t=this.params;if(this.params=e,this.workOutTemplate(e,!!((o=this.beans)!=null&&o.sortSvc))!=this.currentTemplate||this.workOutShowMenu()!=this.currentShowMenu||e.enableSorting!=this.currentSort||this.currentSuppressMenuHide!=null&&this.shouldSuppressMenuHide()!=this.currentSuppressMenuHide||t.enableFilterButton!=e.enableFilterButton||t.enableFilterIcon!=e.enableFilterIcon)return!1;if(this.innerHeaderComponent){const n={...e};Y(n,e.innerHeaderComponentParams),(i=(s=this.innerHeaderComponent).refresh)==null||i.call(s,n)}else this.setDisplayName(e);return!0}workOutTemplate(e,t){const o=e.template;return o?o!=null&&o.trim?o.trim():o:t?Og:Wg}init(e){this.params=e;const{sortSvc:t,touchSvc:o,rowNumbersSvc:s,userCompFactory:i}=this.beans,n=t==null?void 0:t.getSortIndicatorSelector();this.currentTemplate=this.workOutTemplate(e,!!n),this.setTemplate(this.currentTemplate,n?[n]:void 0),o==null||o.setupForHeader(this),this.setMenu(),this.setupSort(),s==null||s.setupForHeader(this),this.setupFilterIcon(),this.setupFilterButton(),this.workOutInnerHeaderComponent(i,e),this.setDisplayName(e)}workOutInnerHeaderComponent(e,t){const o=ra(e,t,t);o&&(this.isLoadingInnerComponent=!0,o.newAgStackInstance().then(s=>{this.isLoadingInnerComponent=!1,s&&(this.isAlive()?(this.innerHeaderComponent=s,this.eText&&this.eText.appendChild(s.getGui())):this.destroyBean(s))}))}setDisplayName(e){const{displayName:t}=e,o=this.currentDisplayName;this.currentDisplayName=t,!(!this.eText||o===t||this.innerHeaderComponent||this.isLoadingInnerComponent)&&(this.eText.textContent=zt(t))}addInIcon(e,t,o){const s=Zt(e,this.beans,o);s&&t.appendChild(s)}workOutShowMenu(){var e;return this.params.enableMenu&&!!((e=this.beans.menuSvc)!=null&&e.isHeaderMenuButtonEnabled())}shouldSuppressMenuHide(){var e;return!!((e=this.beans.menuSvc)!=null&&e.isHeaderMenuButtonAlwaysShowEnabled())}setMenu(){if(!this.eMenu)return;if(this.currentShowMenu=this.workOutShowMenu(),!this.currentShowMenu){Ce(this.eMenu),this.eMenu=void 0;return}const{gos:e,eMenu:t,params:o}=this,s=Et(e);this.addInIcon(s?"menu":"menuAlt",t,o.column),t.classList.toggle("ag-header-menu-icon",!s);const i=this.shouldSuppressMenuHide();this.currentSuppressMenuHide=i,this.addManagedElementListeners(t,{click:()=>this.showColumnMenu(this.eMenu)}),this.toggleMenuAlwaysShow(i)}toggleMenuAlwaysShow(e){var t;(t=this.eMenu)==null||t.classList.toggle("ag-header-menu-always-show",e)}showColumnMenu(e){const{currentSuppressMenuHide:t,params:o}=this;t||this.toggleMenuAlwaysShow(!0),o.showColumnMenu(e,()=>{t||this.toggleMenuAlwaysShow(!1)})}onMenuKeyboardShortcut(e){var a;const{params:t,gos:o,beans:s,eMenu:i,eFilterButton:n}=this,r=t.column,l=Et(o);if(e&&!l){if((a=s.menuSvc)!=null&&a.isFilterMenuInHeaderEnabled(r))return t.showFilter(n??i??this.getGui()),!0}else if(t.enableMenu)return this.showColumnMenu(i??n??this.getGui()),!0;return!1}setupSort(){const{sortSvc:e}=this.beans;if(!e)return;const{enableSorting:t,column:o}=this.params;if(this.currentSort=t,!this.eSortIndicator){this.eSortIndicator=this.createBean(e.createSortIndicator(!0));const{eSortIndicator:s,eSortOrder:i,eSortAsc:n,eSortDesc:r,eSortMixed:l,eSortNone:a}=this;s.attachCustomElements(i,n,r,l,a)}this.eSortIndicator.setupSort(o),this.currentSort&&e.setupHeader(this,o,this.eLabel)}setupFilterIcon(){const{eFilter:e,params:t}=this;if(!e)return;const o=()=>{const s=t.column.isFilterActive();W(e,s,{skipAriaHidden:!0})};this.configureFilter(t.enableFilterIcon,e,o,"filterActive")}setupFilterButton(){const{eFilterButton:e,params:t}=this;if(!e)return;this.configureFilter(t.enableFilterButton,e,this.onFilterChangedButton.bind(this),"filter")?this.addManagedElementListeners(e,{click:()=>t.showFilter(e)}):this.eFilterButton=void 0}configureFilter(e,t,o,s){if(!e)return Ce(t),!1;const i=this.params.column;return this.addInIcon(s,t,i),this.addManagedListeners(i,{filterChanged:o}),o(),!0}onFilterChangedButton(){const e=this.params.column.isFilterActive();this.eFilterButton.classList.toggle("ag-filter-active",e)}getAnchorElementForMenu(e){const{eFilterButton:t,eMenu:o}=this;return e?t??o??this.getGui():o??t??this.getGui()}destroy(){super.destroy(),this.innerHeaderComponent&&(this.destroyBean(this.innerHeaderComponent),this.innerHeaderComponent=void 0)}},Ng={tag:"div",cls:"ag-header-group-cell-label",role:"presentation",children:[{tag:"span",ref:"agLabel",cls:"ag-header-group-text",role:"presentation"},{tag:"span",ref:"agOpened",cls:"ag-header-icon ag-header-expand-icon ag-header-expand-icon-expanded"},{tag:"span",ref:"agClosed",cls:"ag-header-icon ag-header-expand-icon ag-header-expand-icon-collapsed"}]},zg=class extends N{constructor(){super(Ng),this.agOpened=x,this.agClosed=x,this.agLabel=x,this.isLoadingInnerComponent=!1}init(e){const{userCompFactory:t,touchSvc:o}=this.beans;this.params=e,this.checkWarnings(),this.workOutInnerHeaderGroupComponent(t,e),this.setupLabel(e),this.addGroupExpandIcon(e),this.setupExpandIcons(),o==null||o.setupForHeaderGroup(this)}checkWarnings(){this.params.template&&I(89)}workOutInnerHeaderGroupComponent(e,t){const o=aa(e,t,t);o&&(this.isLoadingInnerComponent=!0,o.newAgStackInstance().then(s=>{this.isLoadingInnerComponent=!1,s&&(this.isAlive()?(this.innerHeaderGroupComponent=s,this.agLabel.appendChild(s.getGui())):this.destroyBean(s))}))}setupExpandIcons(){const{agOpened:e,agClosed:t,params:{columnGroup:o},beans:s}=this;this.addInIcon("columnGroupOpened",e),this.addInIcon("columnGroupClosed",t);const i=a=>{if(ve(a))return;const d=!o.isExpanded();s.colGroupSvc.setColumnGroupOpened(o.getProvidedColumnGroup(),d,"uiColumnExpanded")};this.addTouchAndClickListeners(s,t,i),this.addTouchAndClickListeners(s,e,i);const n=a=>{Tt(a)};this.addManagedElementListeners(t,{dblclick:n}),this.addManagedElementListeners(e,{dblclick:n}),this.addManagedElementListeners(this.getGui(),{dblclick:i}),this.updateIconVisibility();const r=o.getProvidedColumnGroup(),l=this.updateIconVisibility.bind(this);this.addManagedListeners(r,{expandedChanged:l,expandableChanged:l})}addTouchAndClickListeners(e,t,o){var s;(s=e.touchSvc)==null||s.setupForHeaderGroupElement(this,t,o),this.addManagedElementListeners(t,{click:o})}updateIconVisibility(){const{agOpened:e,agClosed:t,params:{columnGroup:o}}=this;if(o.isExpandable()){const s=o.isExpanded();W(e,s),W(t,!s)}else W(e,!1),W(t,!1)}addInIcon(e,t){const o=Zt(e,this.beans,null);o&&t.appendChild(o)}addGroupExpandIcon(e){if(!e.columnGroup.isExpandable()){const{agOpened:t,agClosed:o}=this;W(t,!1),W(o,!1);return}}setupLabel(e){var i;const{displayName:t,columnGroup:o}=e,s=this.innerHeaderGroupComponent||this.isLoadingInnerComponent;k(t)&&!s&&(this.agLabel.textContent=zt(t)),this.toggleCss("ag-sticky-label",!((i=o.getColGroupDef())!=null&&i.suppressStickyLabel))}destroy(){super.destroy(),this.innerHeaderGroupComponent&&(this.destroyBean(this.innerHeaderGroupComponent),this.innerHeaderGroupComponent=void 0)}},_g={moduleName:"ColumnHeaderComp",version:G,userComponents:{agColumnHeader:Vg},icons:{menu:"menu",menuAlt:"menu-alt"}},Ug={moduleName:"ColumnGroupHeaderComp",version:G,userComponents:{agColumnGroupHeader:zg},icons:{columnGroupOpened:"expanded",columnGroupClosed:"contracted"}},Kg=class extends v{constructor(){super(...arguments),this.beanName="animationFrameSvc",this.p1={list:[],sorted:!1},this.p2={list:[],sorted:!1},this.f1={list:[],sorted:!1},this.destroyTasks=[],this.ticking=!1,this.scrollGoingDown=!0,this.lastScrollTop=0,this.taskCount=0}setScrollTop(e){this.scrollGoingDown=e>=this.lastScrollTop,e===0&&(this.scrollGoingDown=!0),this.lastScrollTop=e}postConstruct(){this.active=!this.gos.get("suppressAnimationFrame"),this.batchFrameworkComps=this.beans.frameworkOverrides.batchFrameworkComps}verify(){this.active===!1&&I(92)}createTask(e,t,o,s){this.verify();let i=o;s&&this.batchFrameworkComps&&(i="f1");const n={task:e,index:t,createOrder:++this.taskCount};this.addTaskToList(this[i],n),this.schedule()}addTaskToList(e,t){e.list.push(t),e.sorted=!1}sortTaskList(e){if(e.sorted)return;const t=this.scrollGoingDown?1:-1;e.list.sort((o,s)=>o.index!==s.index?t*(s.index-o.index):s.createOrder-o.createOrder),e.sorted=!0}addDestroyTask(e){this.verify(),this.destroyTasks.push(e),this.schedule()}executeFrame(e){const{p1:t,p2:o,f1:s,destroyTasks:i,beans:n}=this,{ctrlsSvc:r,frameworkOverrides:l}=n,a=t.list,d=o.list,c=s.list,h=Date.now();let u=0;const g=e<=0,p=r.getScrollFeature();for(;g||u{for(;(g||u{};else if(i.length)C=i.pop();else break;C()}u=Date.now()-h}a.length||d.length||c.length||i.length?this.requestFrame():this.ticking=!1}flushAllFrames(){this.active&&this.executeFrame(-1)}schedule(){this.active&&(this.ticking||(this.ticking=!0,this.requestFrame()))}requestFrame(){const e=this.executeFrame.bind(this,60);be(this.beans,e)}isQueueEmpty(){return!this.ticking}},jg={moduleName:"AnimationFrame",version:G,beans:[Kg]},$g=class extends v{constructor(){super(...arguments),this.beanName="touchSvc"}mockBodyContextMenu(e,t){this.mockContextMenu(e,e.eBodyViewport,t)}mockHeaderContextMenu(e,t){this.mockContextMenu(e,e.eGui,t)}mockRowContextMenu(e){if(!Ze())return;const t=(o,s,i)=>{var l;const{rowCtrl:n,cellCtrl:r}=e.getControlsForEventTarget((i==null?void 0:i.target)??null);r!=null&&r.column&&r.dispatchCellContextMenuEvent(i??null),(l=this.beans.contextMenuSvc)==null||l.handleContextMenuMouseEvent(void 0,i,n,r)};this.mockContextMenu(e,e.element,t)}handleCellDoubleClick(e,t){return(()=>{if(!Ze()||Ki("dblclick"))return!1;const s=Date.now(),i=s-e.lastIPadMouseClickEvent<200;return e.lastIPadMouseClickEvent=s,i})()?(e.onCellDoubleClicked(t),t.preventDefault(),!0):!1}setupForHeader(e){const{gos:t,sortSvc:o,menuSvc:s}=this.beans;if(t.get("suppressTouch"))return;const{params:i,eMenu:n,eFilterButton:r}=e,l=new Te(e.getGui(),!0),a=e.shouldSuppressMenuHide(),d=a&&k(n)&&i.enableMenu,c=d?new Te(n,!0):l;if(i.enableMenu||s!=null&&s.isHeaderContextMenuEnabled(i.column)){const h=d?"tap":"longTap",u=g=>i.showColumnMenuAfterMouseClick(g.touchStart);e.addManagedListeners(c,{[h]:u})}if(i.enableSorting){const h=u=>{const g=u.touchStart.target;a&&(n!=null&&n.contains(g)||r!=null&&r.contains(g))||o==null||o.progressSort(i.column,!1,"uiColumnSorted")};e.addManagedListeners(l,{tap:h})}if(i.enableFilterButton&&r){const h=new Te(r,!0);e.addManagedListeners(h,{tap:()=>i.showFilter(r)}),e.addDestroyFunc(()=>h.destroy())}e.addDestroyFunc(()=>l.destroy()),d&&e.addDestroyFunc(()=>c.destroy())}setupForHeaderGroup(e){var o;const t=e.params;if((o=this.beans.menuSvc)!=null&&o.isHeaderContextMenuEnabled(t.columnGroup.getProvidedColumnGroup())){const s=new Te(t.eGridHeader,!0),i=n=>t.showColumnMenuAfterMouseClick(n.touchStart);e.addManagedListeners(s,{longTap:i}),e.addDestroyFunc(()=>s.destroy())}}setupForHeaderGroupElement(e,t,o){const s=new Te(t,!0);e.addManagedListeners(s,{tap:o}),e.addDestroyFunc(()=>s.destroy())}mockContextMenu(e,t,o){if(!Ze())return;const s=new Te(t),i=n=>{tt(this.gos,n.touchEvent)&&o(void 0,n.touchStart,n.touchEvent)};e.addManagedListeners(s,{longTap:i}),e.addDestroyFunc(()=>s.destroy())}},qg={moduleName:"Touch",version:G,beans:[$g]},Zg=class extends v{constructor(){super(...arguments),this.beanName="cellNavigation"}wireBeans(e){this.rowSpanSvc=e.rowSpanSvc}getNextCellToFocus(e,t,o=!1){return o?this.getNextCellToFocusWithCtrlPressed(e,t):this.getNextCellToFocusWithoutCtrlPressed(e,t)}getNextCellToFocusWithCtrlPressed(e,t){const o=e===m.UP,s=e===m.DOWN,i=e===m.LEFT;let n,r;const{pageBounds:l,gos:a,visibleCols:d}=this.beans;if(o||s)r=o?l.getFirstRow():l.getLastRow(),n=t.column;else{const c=a.get("enableRtl");r=t.rowIndex,n=(i!==c?d.allCols:[...d.allCols].reverse()).find(u=>this.isCellGoodToFocusOn({rowIndex:r,rowPinned:null,column:u}))}return n?{rowIndex:r,rowPinned:null,column:n}:null}getNextCellToFocusWithoutCtrlPressed(e,t){let o=t,s=!1;for(;!s;){switch(e){case m.UP:o=this.getCellAbove(o);break;case m.DOWN:o=this.getCellBelow(o);break;case m.RIGHT:o=this.gos.get("enableRtl")?this.getCellToLeft(o):this.getCellToRight(o);break;case m.LEFT:o=this.gos.get("enableRtl")?this.getCellToRight(o):this.getCellToLeft(o);break;default:o=null,I(8,{key:e});break}o?s=this.isCellGoodToFocusOn(o):s=!0}return o}isCellGoodToFocusOn(e){const t=e.column;let o;const{pinnedRowModel:s,rowModel:i}=this.beans;switch(e.rowPinned){case"top":o=s==null?void 0:s.getPinnedTopRow(e.rowIndex);break;case"bottom":o=s==null?void 0:s.getPinnedBottomRow(e.rowIndex);break;default:o=i.getRow(e.rowIndex);break}return o?!this.isSuppressNavigable(t,o):!1}getCellToLeft(e){if(!e)return null;const t=this.beans.visibleCols.getColBefore(e.column);return t?{rowIndex:e.rowIndex,column:t,rowPinned:e.rowPinned}:null}getCellToRight(e){if(!e)return null;const t=this.beans.visibleCols.getColAfter(e.column);return t?{rowIndex:e.rowIndex,column:t,rowPinned:e.rowPinned}:null}getCellBelow(e){var s;if(!e)return null;const t=((s=this.rowSpanSvc)==null?void 0:s.getCellEnd(e))??e,o=xs(this.beans,t);return o?{rowIndex:o.rowIndex,column:e.column,rowPinned:o.rowPinned}:null}getCellAbove(e){var s;if(!e)return null;const t=((s=this.rowSpanSvc)==null?void 0:s.getCellStart(e))??e,o=Ot(this.beans,{rowIndex:t.rowIndex,rowPinned:t.rowPinned});return o?{rowIndex:o.rowIndex,column:e.column,rowPinned:o.rowPinned}:null}getNextTabbedCell(e,t){return t?this.getNextTabbedCellBackwards(e):this.getNextTabbedCellForwards(e)}getNextTabbedCellForwards(e){const{visibleCols:t,pagination:o}=this.beans,s=t.allCols;let i=e.rowIndex,n=e.rowPinned,r=t.getColAfter(e.column);if(!r){r=s[0];const l=xs(this.beans,e);if(V(l)||!l.rowPinned&&!((o==null?void 0:o.isRowInPage(l.rowIndex))??!0))return null;i=l?l.rowIndex:null,n=l?l.rowPinned:null}return{rowIndex:i,column:r,rowPinned:n}}getNextTabbedCellBackwards(e){const{beans:t}=this,{visibleCols:o,pagination:s}=t,i=o.allCols;let n=e.rowIndex,r=e.rowPinned,l=o.getColBefore(e.column);if(!l){l=H(i);const a=Ot(t,{rowIndex:e.rowIndex,rowPinned:e.rowPinned});if(V(a)||!a.rowPinned&&!((s==null?void 0:s.isRowInPage(a.rowIndex))??!0))return null;n=a?a.rowIndex:null,r=a?a.rowPinned:null}return{rowIndex:n,column:l,rowPinned:r}}isSuppressNavigable(e,t){const{suppressNavigable:o}=e.colDef;if(typeof o=="boolean")return o;if(typeof o=="function"){const s=e.createColumnFunctionCallbackParams(t);return o(s)}return!1}};function Yg(e){return e.focusSvc.getFocusedCell()}function Qg(e){return e.focusSvc.clearFocusedCell()}function Xg(e,t,o,s){e.focusSvc.setFocusedCell({rowIndex:t,column:o,rowPinned:s,forceBrowserFocus:!0})}function Jg(e,t){var o;return((o=e.navigation)==null?void 0:o.tabToNextCell(!1,t))??!1}function ep(e,t){var o;return((o=e.navigation)==null?void 0:o.tabToNextCell(!0,t))??!1}function tp(e,t,o=!1){var i;const s=(i=e.headerNavigation)==null?void 0:i.getHeaderPositionForColumn(t,o);s&&e.focusSvc.focusHeaderPosition({headerPosition:s})}var op=class extends v{constructor(){super(),this.beanName="navigation",this.onPageDown=fs(this.onPageDown,100),this.onPageUp=fs(this.onPageUp,100)}postConstruct(){this.beans.ctrlsSvc.whenReady(this,e=>{this.gridBodyCon=e.gridBodyCtrl})}handlePageScrollingKey(e,t=!1){const o=e.key,s=e.altKey,i=e.ctrlKey||e.metaKey,n=!!this.beans.rangeSvc&&e.shiftKey,r=Ya(this.gos,e);let l=!1;switch(o){case m.PAGE_HOME:case m.PAGE_END:!i&&!s&&(this.onHomeOrEndKey(o),l=!0);break;case m.LEFT:case m.RIGHT:case m.UP:case m.DOWN:if(!r)return!1;i&&!s&&!n&&(this.onCtrlUpDownLeftRight(o,r),l=!0);break;case m.PAGE_DOWN:case m.PAGE_UP:!i&&!s&&(l=this.handlePageUpDown(o,r,t));break}return l&&e.preventDefault(),l}handlePageUpDown(e,t,o){return o&&(t=this.beans.focusSvc.getFocusedCell()),t?(e===m.PAGE_UP?this.onPageUp(t):this.onPageDown(t),!0):!1}navigateTo(e){const{scrollIndex:t,scrollType:o,scrollColumn:s,focusIndex:i,focusColumn:n}=e,{scrollFeature:r}=this.gridBodyCon;k(s)&&!s.isPinned()&&r.ensureColumnVisible(s),k(t)&&r.ensureIndexVisible(t,o),e.isAsync||r.ensureIndexVisible(i);const{focusSvc:l,rangeSvc:a}=this.beans;l.setFocusedCell({rowIndex:i,column:n,rowPinned:null,forceBrowserFocus:!0}),a==null||a.setRangeToCell({rowIndex:i,rowPinned:null,column:n})}onPageDown(e){const t=this.beans,o=bo(t),s=this.getViewportHeight(),{pageBounds:i,rowModel:n,rowAutoHeight:r}=t,l=i.getPixelOffset(),a=o.top+s,d=n.getRowIndexAtPixel(a+l);r!=null&&r.active?this.navigateToNextPageWithAutoHeight(e,d):this.navigateToNextPage(e,d)}onPageUp(e){const t=this.beans,o=bo(t),{pageBounds:s,rowModel:i,rowAutoHeight:n}=t,r=s.getPixelOffset(),l=o.top,a=i.getRowIndexAtPixel(l+r);n!=null&&n.active?this.navigateToNextPageWithAutoHeight(e,a,!0):this.navigateToNextPage(e,a,!0)}navigateToNextPage(e,t,o=!1){const{pageBounds:s,rowModel:i}=this.beans,n=this.getViewportHeight(),r=s.getFirstRow(),l=s.getLastRow(),a=s.getPixelOffset(),d=i.getRow(e.rowIndex),c=o?(d==null?void 0:d.rowHeight)-n-a:n-a,h=(d==null?void 0:d.rowTop)+c;let u=i.getRowIndexAtPixel(h+a);if(u===e.rowIndex){const p=o?-1:1;t=u=e.rowIndex+p}let g;o?(g="bottom",ul&&(u=l),t>l&&(t=l)),this.isRowTallerThanView(i.getRow(u))&&(t=u,g="top"),this.navigateTo({scrollIndex:t,scrollType:g,scrollColumn:null,focusIndex:u,focusColumn:e.column})}navigateToNextPageWithAutoHeight(e,t,o=!1){this.navigateTo({scrollIndex:t,scrollType:o?"bottom":"top",scrollColumn:null,focusIndex:t,focusColumn:e.column}),setTimeout(()=>{const s=this.getNextFocusIndexForAutoHeight(e,o);this.navigateTo({scrollIndex:t,scrollType:o?"bottom":"top",scrollColumn:null,focusIndex:s,focusColumn:e.column,isAsync:!0})},50)}getNextFocusIndexForAutoHeight(e,t=!1){const o=t?-1:1,s=this.getViewportHeight(),{pageBounds:i,rowModel:n}=this.beans,r=i.getLastRow();let l=0,a=e.rowIndex;for(;a>=0&&a<=r;){const d=n.getRow(a);if(d){const c=d.rowHeight??0;if(l+c>s)break;l+=c}a+=o}return Math.max(0,Math.min(a,r))}getViewportHeight(){const e=this.beans,t=bo(e),o=this.beans.scrollVisibleSvc.getScrollbarWidth();let s=t.bottom-t.top;return e.ctrlsSvc.get("center").isHorizontalScrollShowing()&&(s-=o),s}isRowTallerThanView(e){if(!e)return!1;const t=e.rowHeight;return typeof t!="number"?!1:t>this.getViewportHeight()}onCtrlUpDownLeftRight(e,t){const o=this.beans.cellNavigation.getNextCellToFocus(e,t,!0),{rowIndex:s}=o,i=o.column;this.navigateTo({scrollIndex:s,scrollType:null,scrollColumn:i,focusIndex:s,focusColumn:i})}onHomeOrEndKey(e){const t=e===m.PAGE_HOME,{visibleCols:o,pageBounds:s,rowModel:i}=this.beans,n=o.allCols,r=t?s.getFirstRow():s.getLastRow(),l=i.getRow(r);if(!l)return;const a=(t?n:[...n].reverse()).find(d=>!d.isSuppressNavigable(l));a&&this.navigateTo({scrollIndex:r,scrollType:null,scrollColumn:a,focusIndex:r,focusColumn:a})}onTabKeyDown(e,t){const o=t.shiftKey,s=this.tabToNextCellCommon(e,o,t),i=this.beans,{ctrlsSvc:n,pageBounds:r,focusSvc:l,gos:a}=i;if(s!==!1){s?t.preventDefault():s===null&&n.get("gridCtrl").allowFocusForNextCoreContainer(o);return}if(o){const{rowIndex:d,rowPinned:c}=e.getRowPosition();(c?d===0:d===r.getFirstRow())&&(a.get("headerHeight")===0||Fe(i)?et(i,!0,!0):(t.preventDefault(),l.focusPreviousFromFirstCell(t)))}else e instanceof St&&e.focusCell(!0),(!o&&l.focusOverlay(!1)||et(i,o))&&t.preventDefault()}tabToNextCell(e,t){const o=this.beans,{focusSvc:s,rowRenderer:i}=o,n=s.getFocusedCell();if(!n)return!1;let r=ct(o,n);return!r&&(r=i.getRowByPosition(n),!r||!r.isFullWidth())?!1:!!this.tabToNextCellCommon(r,e,t)}tabToNextCellCommon(e,t,o){let s=e.editing;if(!s&&e instanceof St){const r=e.rowCtrl;r&&(s=r.editing)}let i;return s?this.gos.get("editType")==="fullRow"?i=this.moveToNextEditingRow(e,t,o):i=this.moveToNextEditingCell(e,t,o):i=this.moveToNextCellNotEditing(e,t,o),i===null?i:i||!!this.beans.focusSvc.focusedHeader}moveToNextEditingCell(e,t,o=null){var n;const s=e.cellPosition;e.eGui.focus(),e.stopEditing();const i=this.findNextCellToFocusOn(s,t,!0);return i===!1?null:i==null?!1:((n=this.beans.editSvc)==null||n.startEditing(i,null,!0,o),i.focusCell(!1),!0)}moveToNextEditingRow(e,t,o=null){const s=e.cellPosition,i=this.findNextCellToFocusOn(s,t,!0);if(i===!1)return null;if(i==null)return!1;const n=i.cellPosition,r=this.isCellEditable(s),l=this.isCellEditable(n),a=n&&s.rowIndex===n.rowIndex&&s.rowPinned===n.rowPinned,{editSvc:d,rowEditSvc:c}=this.beans;if(r&&(d==null||d.setFocusOutOnEditor(e)),!a){const h=e.rowCtrl;d==null||d.stopRowEditing(h);const u=i.rowCtrl;c==null||c.startEditing(u,void 0,void 0,o)}return l?(d==null||d.setFocusInOnEditor(i),i.focusCell()):i.focusCell(!0),!0}moveToNextCellNotEditing(e,t,o){const s=this.beans.visibleCols.allCols;let i;if(e instanceof Io){if(i={...e.getRowPosition(),column:t?s[0]:H(s)},this.gos.get("embedFullWidthRows")&&o){const r=e.findFullWidthInfoForEvent(o);r&&(i.column=r.column)}}else i=e.getFocusedCellPosition();const n=this.findNextCellToFocusOn(i,t,!1);if(n===!1)return null;if(n instanceof St)n.focusCell(!0);else if(n)return this.tryToFocusFullWidthRow(n,t);return k(n)}findNextCellToFocusOn(e,t,o){let s=e;const i=this.beans,{cellNavigation:n,gos:r,focusSvc:l,rowRenderer:a,rangeSvc:d}=i;for(;;){e!==s&&(e=s),t||(s=this.getLastCellOfColSpan(s)),s=n.getNextTabbedCell(s,t);const c=r.getCallback("tabToNextCell");if(k(c)){const p=c({backwards:t,editing:o,previousCellPosition:e,nextCellPosition:s||null});if(p===!0)s=e;else{if(p===!1)return!1;s={rowIndex:p.rowIndex,column:p.column,rowPinned:p.rowPinned}}}if(!s)return null;if(s.rowIndex<0){const g=ie(i);return l.focusHeaderPosition({headerPosition:{headerRowIndex:g+s.rowIndex,column:s.column},fromCell:!0}),null}const h=r.get("editType")==="fullRow";if(o&&!h&&!this.isCellEditable(s))continue;this.ensureCellVisible(s);const u=ct(i,s);if(!u){const g=a.getRowByPosition(s);if(!g||!g.isFullWidth()||o)continue;return{...g.getRowPosition(),column:s==null?void 0:s.column}}if(!n.isSuppressNavigable(u.column,u.rowNode))return u.setFocusedCellPosition(s),d==null||d.setRangeToCell(s),u}}isCellEditable(e){const t=this.lookupRowNodeForCell(e);return t?e.column.isCellEditable(t):!1}lookupRowNodeForCell({rowIndex:e,rowPinned:t}){const{pinnedRowModel:o,rowModel:s}=this.beans;return t==="top"?o==null?void 0:o.getPinnedTopRow(e):t==="bottom"?o==null?void 0:o.getPinnedBottomRow(e):s.getRow(e)}navigateToNextCell(e,t,o,s){let i=o,n=!1;const r=this.beans,{cellNavigation:l,focusSvc:a,gos:d}=r;for(;i&&(i===o||!this.isValidNavigateCell(i));)d.get("enableRtl")?t===m.LEFT&&(i=this.getLastCellOfColSpan(i)):t===m.RIGHT&&(i=this.getLastCellOfColSpan(i)),i=l.getNextCellToFocus(t,i),n=V(i);if(n&&e&&e.key===m.UP&&(i={rowIndex:-1,rowPinned:null,column:o.column}),s){const h=d.getCallback("navigateToNextCell");if(k(h)){const g=h({key:t,previousCellPosition:o,nextCellPosition:i||null,event:e});k(g)?i={rowPinned:g.rowPinned,rowIndex:g.rowIndex,column:g.column}:i=null}}if(!i)return;if(i.rowIndex<0){const h=ie(r);a.focusHeaderPosition({headerPosition:{headerRowIndex:h+i.rowIndex,column:o.column},event:e||void 0,fromCell:!0});return}const c=this.getNormalisedPosition(i);c?this.focusPosition(c):this.tryToFocusFullWidthRow(i)}getNormalisedPosition(e){var s;if(!!((s=this.beans.spannedRowRenderer)!=null&&s.getCellByPosition(e)))return e;this.ensureCellVisible(e);const o=ct(this.beans,e);return o?(e=o.getFocusedCellPosition(),this.ensureCellVisible(e),e):null}tryToFocusFullWidthRow(e,t){const{visibleCols:o,rowRenderer:s,focusSvc:i,eventSvc:n}=this.beans,r=o.allCols,l=s.getRowByPosition(e);if(!l||!l.isFullWidth())return!1;const a=i.getFocusedCell(),d={rowIndex:e.rowIndex,rowPinned:e.rowPinned,column:e.column||(t?H(r):r[0])};this.focusPosition(d);const c=t??(a!=null&&Ja(d,a));return n.dispatchEvent({type:"fullWidthRowFocused",rowIndex:d.rowIndex,rowPinned:d.rowPinned,column:d.column,isFullWidthCell:!0,fromBelow:c}),!0}focusPosition(e){const{focusSvc:t,rangeSvc:o}=this.beans;t.setFocusedCell({rowIndex:e.rowIndex,column:e.column,rowPinned:e.rowPinned,forceBrowserFocus:!0}),o==null||o.setRangeToCell(e)}isValidNavigateCell(e){return!!Cn(this.beans,e)}getLastCellOfColSpan(e){const t=ct(this.beans,e);if(!t)return e;const o=t.getColSpanningList();return o.length===1?e:{rowIndex:e.rowIndex,column:H(o),rowPinned:e.rowPinned}}ensureCellVisible(e){const t=Vi(this.gos),o=this.beans.rowModel.getRow(e.rowIndex),s=t&&(o==null?void 0:o.sticky),{scrollFeature:i}=this.gridBodyCon;!s&&V(e.rowPinned)&&i.ensureIndexVisible(e.rowIndex),e.column.isPinned()||i.ensureColumnVisible(e.column)}};function bo(e){return e.ctrlsSvc.getScrollFeature().getVScrollPosition()}var sp={moduleName:"KeyboardNavigation",version:G,beans:[op,Zg,hg],apiFunctions:{getFocusedCell:Yg,clearFocusedCell:Qg,setFocusedCell:Xg,setFocusedHeader:tp,tabToNextCell:Jg,tabToPreviousCell:ep}},ip=class extends v{constructor(){super(...arguments),this.beanName="pageBoundsListener"}postConstruct(){this.addManagedEventListeners({modelUpdated:this.onModelUpdated.bind(this),recalculateRowBounds:this.calculatePages.bind(this)}),this.onModelUpdated()}onModelUpdated(e){this.calculatePages(),this.eventSvc.dispatchEvent({type:"paginationChanged",animate:(e==null?void 0:e.animate)??!1,newData:(e==null?void 0:e.newData)??!1,newPage:(e==null?void 0:e.newPage)??!1,newPageSize:(e==null?void 0:e.newPageSize)??!1,keepRenderedRows:(e==null?void 0:e.keepRenderedRows)??!1})}calculatePages(){const{pageBounds:e,pagination:t,rowModel:o}=this.beans;t?t.calculatePages():e.calculateBounds(0,o.getRowCount()-1)}},np=class extends v{constructor(){super(...arguments),this.beanName="pageBounds",this.pixelOffset=0}getFirstRow(){var e;return((e=this.topRowBounds)==null?void 0:e.rowIndex)??-1}getLastRow(){var e;return((e=this.bottomRowBounds)==null?void 0:e.rowIndex)??-1}getCurrentPageHeight(){const{topRowBounds:e,bottomRowBounds:t}=this;return!e||!t?0:Math.max(t.rowTop+t.rowHeight-e.rowTop,0)}getCurrentPagePixelRange(){const{topRowBounds:e,bottomRowBounds:t}=this,o=(e==null?void 0:e.rowTop)??0,s=t?t.rowTop+t.rowHeight:0;return{pageFirstPixel:o,pageLastPixel:s}}calculateBounds(e,t){const{rowModel:o}=this.beans,s=o.getRowBounds(e);s&&(s.rowIndex=e),this.topRowBounds=s;const i=o.getRowBounds(t);i&&(i.rowIndex=t),this.bottomRowBounds=i,this.calculatePixelOffset()}getPixelOffset(){return this.pixelOffset}calculatePixelOffset(){var t;const e=((t=this.topRowBounds)==null?void 0:t.rowTop)??0;this.pixelOffset!==e&&(this.pixelOffset=e,this.eventSvc.dispatchEvent({type:"paginationPixelOffsetChanged"}))}},rp=".ag-pinned-left-floating-bottom,.ag-pinned-left-floating-top,.ag-pinned-right-floating-bottom,.ag-pinned-right-floating-top{min-width:0;overflow:hidden;position:relative}.ag-pinned-left-sticky-top,.ag-pinned-right-sticky-top{height:100%;overflow:hidden;position:relative}.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{height:100%;overflow:hidden;width:100%}.ag-pinned-left-header,.ag-pinned-right-header{display:inline-block;height:100%;overflow:hidden;position:relative}.ag-body-horizontal-scroll:not(.ag-scrollbar-invisible){.ag-horizontal-left-spacer:not(.ag-scroller-corner){border-right:var(--ag-pinned-column-border)}.ag-horizontal-right-spacer:not(.ag-scroller-corner){border-left:var(--ag-pinned-column-border)}}.ag-pinned-right-header{border-left:var(--ag-pinned-column-border)}.ag-pinned-left-header{border-right:var(--ag-pinned-column-border)}.ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left,.ag-cell-range-single-cell,.ag-cell-focus:not(.ag-cell-range-selected):focus-within){border-left:var(--ag-pinned-column-border)}.ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right,.ag-cell-range-single-cell,.ag-cell-focus:not(.ag-cell-range-selected):focus-within){border-right:var(--ag-pinned-column-border)}.ag-pinned-left-header .ag-header-cell-resize:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}.ag-pinned-right-header .ag-header-cell-resize:after{left:50%}.ag-pinned-left-header .ag-header-cell-resize{right:-3px}.ag-pinned-right-header .ag-header-cell-resize{left:-3px}",lp=class extends v{constructor(e,t){super(),this.isLeft=e,this.elements=t,this.getWidth=e?()=>this.beans.pinnedCols.leftWidth:()=>this.beans.pinnedCols.rightWidth}postConstruct(){this.addManagedEventListeners({[`${this.isLeft?"left":"right"}PinnedWidthChanged`]:this.onPinnedWidthChanged.bind(this)})}onPinnedWidthChanged(){const e=this.getWidth(),t=e>0;for(const o of this.elements)o&&(W(o,t),me(o,e))}},ap=class extends v{constructor(){super(...arguments),this.beanName="pinnedCols"}postConstruct(){this.beans.ctrlsSvc.whenReady(this,t=>{this.gridBodyCtrl=t.gridBodyCtrl});const e=this.checkContainerWidths.bind(this);this.addManagedEventListeners({displayedColumnsChanged:e,displayedColumnsWidthChanged:e}),this.addManagedPropertyListener("domLayout",e)}checkContainerWidths(){const{gos:e,visibleCols:t,eventSvc:o}=this.beans,s=$(e,"print"),i=s?0:t.getColsLeftWidth(),n=s?0:t.getDisplayedColumnsRightWidth();i!=this.leftWidth&&(this.leftWidth=i,o.dispatchEvent({type:"leftPinnedWidthChanged"})),n!=this.rightWidth&&(this.rightWidth=n,o.dispatchEvent({type:"rightPinnedWidthChanged"}))}keepPinnedColumnsNarrowerThanViewport(){const e=this.gridBodyCtrl.eBodyViewport,t=xt(e);if(t<=50)return;const o=this.getPinnedColumnsOverflowingViewport(t-50),s=this.gos.getCallback("processUnpinnedColumns"),{columns:i,hasLockedPinned:n}=o;let r=i;!r.length&&!n||(s&&(r=s({columns:r,viewportWidth:t})),!(!r||!r.length)&&(r=r.filter(l=>!Qe(l)),this.setColsPinned(r,null,"viewportSizeFeature")))}createPinnedWidthFeature(e,...t){return new lp(e,t)}setColsPinned(e,t,o){const{colModel:s,colAnimation:i,visibleCols:n,gos:r}=this.beans;if(!s.cols||!(e!=null&&e.length))return;if($(r,"print")){I(37);return}i==null||i.start();let l;t===!0||t==="left"?l="left":t==="right"?l="right":l=null;const a=[];e.forEach(d=>{if(!d)return;const c=s.getCol(d);c&&c.getPinned()!==l&&(this.setColPinned(c,l),a.push(c))}),a.length&&(n.refresh(o),tn(this.eventSvc,a,o)),i==null||i.finish()}initCol(e){const{pinned:t,initialPinned:o}=e.colDef;t!==void 0?this.setColPinned(e,t):this.setColPinned(e,o)}setColPinned(e,t){t===!0||t==="left"?e.pinned="left":t==="right"?e.pinned="right":e.pinned=null,e.dispatchStateUpdatedEvent("pinned")}setupHeaderPinnedWidth(e){const{scrollVisibleSvc:t}=this.beans;if(e.pinned==null)return;const o=e.pinned==="left",s=e.pinned==="right";e.hidden=!0;const i=()=>{const n=o?this.leftWidth:this.rightWidth;if(n==null)return;const r=n==0,l=e.hidden!==r,a=this.gos.get("enableRtl"),d=t.getScrollbarWidth(),h=t.verticalScrollShowing&&(a&&o||!a&&s)?n+d:n;e.comp.setPinnedContainerWidth(`${h}px`),e.comp.setDisplayed(!r),l&&(e.hidden=r,e.refresh())};e.addManagedEventListeners({leftPinnedWidthChanged:i,rightPinnedWidthChanged:i,scrollVisibilityChanged:i,scrollbarWidthChanged:i})}getHeaderResizeDiff(e,t){if(t.getPinned()){const{leftWidth:s,rightWidth:i}=this,n=xt(this.beans.ctrlsSvc.getGridBodyCtrl().eBodyViewport)-50;if(s+i+e>n)if(n>s+i)e=n-s-i;else return 0}return e}getPinnedColumnsOverflowingViewport(e){const t=this.rightWidth??0,o=this.leftWidth??0,s=t+o;let i=!1;if(s0;){if(a0){const g=r[d++];if(g.colDef.lockPinned){i=!0;continue}u-=g.getActualWidth(),h.push(g)}}return{columns:h,hasLockedPinned:i}}},dp={moduleName:"PinnedColumn",version:G,beans:[ap],css:[rp]},cp=class extends v{constructor(){super(),this.beanName="ariaAnnounce",this.descriptionContainer=null,this.pendingAnnouncements=new Map,this.lastAnnouncement="",this.updateAnnouncement=je(this,this.updateAnnouncement.bind(this),200)}postConstruct(){const e=this.beans,t=oe(e),o=this.descriptionContainer=t.createElement("div");o.classList.add("ag-aria-description-container"),ci(o,"polite"),vr(o,"additions text"),mr(o,!0),e.eGridDiv.appendChild(o)}announceValue(e,t){this.pendingAnnouncements.set(t,e),this.updateAnnouncement()}updateAnnouncement(){if(!this.descriptionContainer)return;const e=Array.from(this.pendingAnnouncements.values()).join(". ");this.pendingAnnouncements.clear(),this.descriptionContainer.textContent="",setTimeout(()=>{if(this.isAlive()&&this.descriptionContainer){let t=e;this.lastAnnouncement===t&&(t=`${t}.`),this.lastAnnouncement=t,this.descriptionContainer.textContent=t}},50)}destroy(){var t;super.destroy();const{descriptionContainer:e}=this;e&&(de(e),(t=e.parentElement)==null||t.removeChild(e)),this.descriptionContainer=null,this.pendingAnnouncements.clear()}},hp={moduleName:"Aria",version:G,beans:[cp]};function up(e){var t;(t=e.overlays)==null||t.showLoadingOverlay()}function gp(e){var t;(t=e.overlays)==null||t.showNoRowsOverlay()}function pp(e){var t;(t=e.overlays)==null||t.hideOverlay()}var fp=".ag-overlay{inset:0;pointer-events:none;position:absolute;z-index:2}.ag-overlay-panel,.ag-overlay-wrapper{display:flex;height:100%;width:100%}.ag-overlay-wrapper{align-items:center;flex:none;justify-content:center;text-align:center}.ag-overlay-loading-wrapper{pointer-events:all}.ag-overlay-loading-center{background:var(--ag-background-color);border:1px solid var(--ag-border-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-popup-shadow);padding:var(--ag-spacing)}",Cp={tag:"div",cls:"ag-overlay",role:"presentation",children:[{tag:"div",cls:"ag-overlay-panel",role:"presentation",children:[{tag:"div",ref:"eOverlayWrapper",cls:"ag-overlay-wrapper",role:"presentation"}]}]},er=class extends N{constructor(){super(Cp),this.eOverlayWrapper=x,this.activePromise=null,this.activeOverlay=null,this.updateListenerDestroyFunc=null,this.activeCssClass=null,this.elToFocusAfter=null,this.registerCSS(fp)}handleKeyDown(e){if(e.key!==m.TAB||e.defaultPrevented||ve(e))return;const t=this.beans;if(jt(t,this.eOverlayWrapper,!1,e.shiftKey))return;let s=!1;e.shiftKey?s=t.focusSvc.focusGridView({column:H(t.visibleCols.allCols),backwards:!0,canFocusOverlay:!1}):s=et(t,!1),s&&e.preventDefault()}updateLayoutClasses(e,t){const o=this.eOverlayWrapper.classList,{AUTO_HEIGHT:s,NORMAL:i,PRINT:n}=ee;o.toggle(s,t.autoHeight),o.toggle(i,t.normal),o.toggle(n,t.print)}postConstruct(){this.createManagedBean(new Ko(this)),this.setDisplayed(!1,{skipAriaHidden:!0}),this.beans.overlays.setOverlayWrapperComp(this),this.addManagedElementListeners(this.getFocusableElement(),{keydown:this.handleKeyDown.bind(this)})}setWrapperTypeClass(e){const t=this.eOverlayWrapper.classList;this.activeCssClass&&t.toggle(this.activeCssClass,!1),this.activeCssClass=e,t.toggle(e,!0)}showOverlay(e,t,o,s){if(this.setWrapperTypeClass(t),this.destroyActiveOverlay(),this.elToFocusAfter=null,this.activePromise=e,!!e){if(this.setDisplayed(!0,{skipAriaHidden:!0}),o&&this.isGridFocused()){const i=z(this.beans);i&&!Jr(this.beans)&&(this.elToFocusAfter=i)}e.then(i=>{if(this.activePromise!==e){this.activeOverlay!==i&&(this.destroyBean(i),i=null);return}if(this.activePromise=null,!!i){if(this.activeOverlay!==i&&(this.eOverlayWrapper.appendChild(i.getGui()),this.activeOverlay=i,s)){const n=i;this.updateListenerDestroyFunc=this.addManagedPropertyListener(s,({currentValue:r})=>{var l;(l=n.refresh)==null||l.call(n,A(this.gos,{...r??{}}))})}o&&this.isGridFocused()&&Gt(this.eOverlayWrapper)}})}}updateOverlayWrapperPaddingTop(e){this.eOverlayWrapper.style.setProperty("padding-top",`${e}px`)}destroyActiveOverlay(){var s;this.activePromise=null;const e=this.activeOverlay;if(!e)return;let t=this.elToFocusAfter;this.activeOverlay=null,this.elToFocusAfter=null,t&&!this.isGridFocused()&&(t=null);const o=this.updateListenerDestroyFunc;o&&(o(),this.updateListenerDestroyFunc=null),this.destroyBean(e),de(this.eOverlayWrapper),(s=t==null?void 0:t.focus)==null||s.call(t,{preventScroll:!0})}hideOverlay(){this.destroyActiveOverlay(),this.setDisplayed(!1,{skipAriaHidden:!0})}isGridFocused(){const e=z(this.beans);return!!e&&this.beans.eGridDiv.contains(e)}destroy(){this.elToFocusAfter=null,this.destroyActiveOverlay(),this.beans.overlays.setOverlayWrapperComp(void 0),super.destroy()}},mp={selector:"AG-OVERLAY-WRAPPER",component:er},vp=class extends v{constructor(){super(...arguments),this.beanName="overlays",this.state=0,this.showInitialOverlay=!0,this.wrapperPadding=0}postConstruct(){this.isClientSide=Vo(this.gos),this.isServerSide=!this.isClientSide&&Ai(this.gos);const e=()=>this.updateOverlayVisibility();this.addManagedEventListeners({newColumnsLoaded:e,rowDataUpdated:e,gridSizeChanged:this.refreshWrapperPadding.bind(this),rowCountReady:()=>{this.showInitialOverlay=!1,this.updateOverlayVisibility()}}),this.addManagedPropertyListener("loading",e)}setOverlayWrapperComp(e){this.eWrapper=e,this.updateOverlayVisibility()}isVisible(){return this.state!==0&&!!this.eWrapper}isExclusive(){return this.state===1&&!!this.eWrapper}showLoadingOverlay(){this.showInitialOverlay=!1;const e=this.gos,t=e.get("loading");!t&&(t!==void 0||e.get("suppressLoadingOverlay"))||this.doShowLoadingOverlay()}showNoRowsOverlay(){this.showInitialOverlay=!1;const e=this.gos;e.get("loading")||e.get("suppressNoRowsOverlay")||this.doShowNoRowsOverlay()}hideOverlay(){if(this.showInitialOverlay=!1,this.gos.get("loading")){I(99);return}this.doHideOverlay()}getOverlayWrapperSelector(){return mp}getOverlayWrapperCompClass(){return er}updateOverlayVisibility(){if(!this.eWrapper){this.state=0;return}const{state:e,isClientSide:t,isServerSide:o,beans:{gos:s,colModel:i,rowModel:n}}=this;let r=this.gos.get("loading");r!==void 0&&(this.showInitialOverlay=!1),this.showInitialOverlay&&r===void 0&&!s.get("suppressLoadingOverlay")&&(r=!s.get("columnDefs")||!i.ready||!s.get("rowData")&&t),r?e!==1&&this.doShowLoadingOverlay():(this.showInitialOverlay=!1,t&&n.isEmpty()&&!s.get("suppressNoRowsOverlay")?e!==2&&this.doShowNoRowsOverlay():(e===1||!o&&e!==0)&&this.doHideOverlay())}doShowLoadingOverlay(){this.eWrapper&&(this.state=1,this.showOverlay(pa(this.beans.userCompFactory,A(this.gos,{})),"ag-overlay-loading-wrapper","loadingOverlayComponentParams"),this.updateExclusive())}doShowNoRowsOverlay(){this.eWrapper&&(this.state=2,this.showOverlay(fa(this.beans.userCompFactory,A(this.gos,{})),"ag-overlay-no-rows-wrapper","noRowsOverlayComponentParams"),this.updateExclusive())}doHideOverlay(){this.eWrapper&&(this.state=0,this.eWrapper.hideOverlay(),this.updateExclusive())}showOverlay(e,t,o){var i;const s=(e==null?void 0:e.newAgStackInstance())??null;(i=this.eWrapper)==null||i.showOverlay(s,t,this.isExclusive(),o),this.refreshWrapperPadding()}updateExclusive(){const e=this.exclusive;this.exclusive=this.isExclusive(),this.exclusive!==e&&this.eventSvc.dispatchEvent({type:"overlayExclusiveChanged"})}refreshWrapperPadding(){const e=this.eWrapper;if(!e)return;let t=0;if(this.state===2){const o=this.beans.ctrlsSvc.get("gridHeaderCtrl");t=(o==null?void 0:o.headerHeight)||0}else this.wrapperPadding!==0&&(t=0);this.wrapperPadding!==t&&(this.wrapperPadding=t,e.updateOverlayWrapperPaddingTop(t))}},wp={moduleName:"Overlay",version:G,userComponents:{agLoadingOverlay:sc,agNoRowsOverlay:nc},apiFunctions:{showLoadingOverlay:up,showNoRowsOverlay:gp,hideOverlay:pp},beans:[vp]},yp=class extends v{constructor(){super(...arguments),this.beanName="rowContainerHeight",this.scrollY=0,this.uiBodyHeight=0}postConstruct(){this.addManagedEventListeners({bodyHeightChanged:this.updateOffset.bind(this)}),this.maxDivHeight=Pr(),Xe(this.gos,"RowContainerHeightService - maxDivHeight = "+this.maxDivHeight)}updateOffset(){if(!this.stretching)return;const e=this.beans.ctrlsSvc.getScrollFeature().getVScrollPosition().top,t=this.getUiBodyHeight();(e!==this.scrollY||t!==this.uiBodyHeight)&&(this.scrollY=e,this.uiBodyHeight=t,this.calculateOffset())}calculateOffset(){this.setUiContainerHeight(this.maxDivHeight),this.pixelsToShave=this.modelHeight-this.uiContainerHeight,this.maxScrollY=this.uiContainerHeight-this.uiBodyHeight;const e=this.scrollY/this.maxScrollY,t=e*this.pixelsToShave;Xe(this.gos,`RowContainerHeightService - Div Stretch Offset = ${t} (${this.pixelsToShave} * ${e})`),this.setDivStretchOffset(t)}setUiContainerHeight(e){e!==this.uiContainerHeight&&(this.uiContainerHeight=e,this.eventSvc.dispatchEvent({type:"rowContainerHeightChanged"}))}clearOffset(){this.setUiContainerHeight(this.modelHeight),this.pixelsToShave=0,this.setDivStretchOffset(0)}setDivStretchOffset(e){const t=typeof e=="number"?Math.floor(e):null;this.divStretchOffset!==t&&(this.divStretchOffset=t,this.eventSvc.dispatchEvent({type:"heightScaleChanged"}))}setModelHeight(e){this.modelHeight=e,this.stretching=e!=null&&this.maxDivHeight>0&&e>this.maxDivHeight,this.stretching?this.calculateOffset():this.clearOffset()}getRealPixelPosition(e){return e-this.divStretchOffset}getUiBodyHeight(){const e=this.beans.ctrlsSvc.getScrollFeature().getVScrollPosition();return e.bottom-e.top}getScrollPositionForPixel(e){if(this.pixelsToShave<=0)return e;const t=this.modelHeight-this.getUiBodyHeight(),o=e/t;return this.maxScrollY*o}},bp=400,Sp=class extends v{constructor(){super(...arguments),this.beanName="rowRenderer",this.destroyFuncsForColumnListeners=[],this.rowCtrlsByRowIndex={},this.zombieRowCtrls={},this.allRowCtrls=[],this.topRowCtrls=[],this.bottomRowCtrls=[],this.refreshInProgress=!1,this.dataFirstRenderedFired=!1,this.setupRangeSelectionListeners=()=>{const e=()=>{this.getAllCellCtrls().forEach(n=>n.onCellSelectionChanged())},t=()=>{this.getAllCellCtrls().forEach(n=>n.updateRangeBordersIfRangeCount())},o=()=>{this.eventSvc.addEventListener("cellSelectionChanged",e),this.eventSvc.addEventListener("columnMoved",t),this.eventSvc.addEventListener("columnPinned",t),this.eventSvc.addEventListener("columnVisible",t)},s=()=>{this.eventSvc.removeEventListener("cellSelectionChanged",e),this.eventSvc.removeEventListener("columnMoved",t),this.eventSvc.removeEventListener("columnPinned",t),this.eventSvc.removeEventListener("columnVisible",t)};this.addDestroyFunc(()=>s()),this.addManagedPropertyListeners(["enableRangeSelection","cellSelection"],()=>{Oe(this.gos)?o():s()}),Oe(this.gos)&&o()}}wireBeans(e){this.pageBounds=e.pageBounds,this.colModel=e.colModel,this.pinnedRowModel=e.pinnedRowModel,this.rowModel=e.rowModel,this.focusSvc=e.focusSvc,this.rowContainerHeight=e.rowContainerHeight,this.ctrlsSvc=e.ctrlsSvc}postConstruct(){this.ctrlsSvc.whenReady(this,e=>{this.gridBodyCtrl=e.gridBodyCtrl,this.initialise()})}initialise(){this.addManagedEventListeners({paginationChanged:this.onPageLoaded.bind(this),pinnedRowDataChanged:this.onPinnedRowDataChanged.bind(this),pinnedRowsChanged:this.onPinnedRowsChanged.bind(this),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),bodyScroll:this.onBodyScroll.bind(this),bodyHeightChanged:this.redraw.bind(this,{})}),this.addManagedPropertyListeners(["domLayout","embedFullWidthRows"],()=>this.onDomLayoutChanged()),this.addManagedPropertyListeners(["suppressMaxRenderedRowRestriction","rowBuffer"],()=>this.redraw()),this.addManagedPropertyListener("suppressCellFocus",s=>this.onSuppressCellFocusChanged(s.currentValue)),this.addManagedPropertyListeners(["groupSuppressBlankHeader","getBusinessKeyForNode","fullWidthCellRenderer","fullWidthCellRendererParams","suppressStickyTotalRow","groupRowRenderer","groupRowRendererParams","loadingCellRenderer","loadingCellRendererParams","detailCellRenderer","detailCellRendererParams","enableRangeSelection","enableCellTextSelection"],()=>this.redrawRows()),this.addManagedPropertyListener("cellSelection",({currentValue:s,previousValue:i})=>{(!i&&s||i&&!s)&&this.redrawRows()});const{stickyRowSvc:e,gos:t,showRowGroupCols:o}=this.beans;if(o&&this.addManagedPropertyListener("showOpenedGroup",()=>{const s=o.getShowRowGroupCols();s.length&&this.refreshCells({columns:s,force:!0})}),e)this.stickyRowFeature=e.createStickyRowFeature(this,this.createRowCon.bind(this),this.destroyRowCtrls.bind(this));else{const s=this.gridBodyCtrl;s.setStickyTopHeight(0),s.setStickyBottomHeight(0)}this.registerCellEventListeners(),this.initialiseCache(),this.printLayout=$(t,"print"),this.embedFullWidthRows=this.printLayout||t.get("embedFullWidthRows"),this.redrawAfterModelUpdate()}initialiseCache(){if(this.gos.get("keepDetailRows")){const e=this.getKeepDetailRowsCount(),t=e??3;this.cachedRowCtrls=new Rp(t)}}getKeepDetailRowsCount(){return this.gos.get("keepDetailRowsCount")}getStickyTopRowCtrls(){var e;return((e=this.stickyRowFeature)==null?void 0:e.stickyTopRowCtrls)??[]}getStickyBottomRowCtrls(){var e;return((e=this.stickyRowFeature)==null?void 0:e.stickyBottomRowCtrls)??[]}updateAllRowCtrls(){var s;const e=Object.values(this.rowCtrlsByRowIndex),t=Object.values(this.zombieRowCtrls),o=((s=this.cachedRowCtrls)==null?void 0:s.getEntries())??[];t.length>0||o.length>0?this.allRowCtrls=[...e,...t,...o]:this.allRowCtrls=e}isCellBeingRendered(e,t){var i;const o=this.rowCtrlsByRowIndex[e];return!t||!o?!!o:o.isFullWidth()?!0:!!((i=this.beans.spannedRowRenderer)==null?void 0:i.getCellByPosition({rowIndex:e,column:t,rowPinned:null}))||!!o.getCellCtrl(t)||!o.isRowRendered()}updateCellFocus(e){this.getAllCellCtrls().forEach(t=>t.onCellFocused(e)),this.getFullWidthRowCtrls().forEach(t=>t.onFullWidthRowFocused(e))}onCellFocusChanged(e){if(e&&e.rowIndex!=null&&!e.rowPinned){const t=this.beans.colModel.getCol(e.column)??void 0;this.isCellBeingRendered(e.rowIndex,t)||this.redraw()}this.updateCellFocus(e)}onSuppressCellFocusChanged(e){this.getAllCellCtrls().forEach(t=>t.onSuppressCellFocusChanged(e)),this.getFullWidthRowCtrls().forEach(t=>t.onSuppressCellFocusChanged(e))}registerCellEventListeners(){this.addManagedEventListeners({cellFocused:e=>this.onCellFocusChanged(e),cellFocusCleared:()=>this.updateCellFocus(),flashCells:e=>{const{cellFlashSvc:t}=this.beans;t&&this.getAllCellCtrls().forEach(o=>t.onFlashCells(o,e))},columnHoverChanged:()=>{this.getAllCellCtrls().forEach(e=>e.onColumnHover())},displayedColumnsChanged:()=>{this.getAllCellCtrls().forEach(e=>e.onDisplayedColumnsChanged())},displayedColumnsWidthChanged:()=>{this.printLayout&&this.getAllCellCtrls().forEach(e=>e.onLeftChanged())}}),this.setupRangeSelectionListeners(),this.refreshListenersToColumnsForCellComps(),this.addManagedEventListeners({gridColumnsChanged:this.refreshListenersToColumnsForCellComps.bind(this)}),this.addDestroyFunc(this.removeGridColumnListeners.bind(this))}removeGridColumnListeners(){this.destroyFuncsForColumnListeners.forEach(e=>e()),this.destroyFuncsForColumnListeners.length=0}refreshListenersToColumnsForCellComps(){this.removeGridColumnListeners(),this.colModel.getCols().forEach(t=>{const o=a=>{this.getAllCellCtrls().forEach(d=>{d.column===t&&a(d)})},s=()=>{o(a=>a.onLeftChanged())},i=()=>{o(a=>a.onWidthChanged())},n=()=>{o(a=>a.onFirstRightPinnedChanged())},r=()=>{o(a=>a.onLastLeftPinnedChanged())},l=()=>{o(a=>a.onColDefChanged())};t.__addEventListener("leftChanged",s),t.__addEventListener("widthChanged",i),t.__addEventListener("firstRightPinnedChanged",n),t.__addEventListener("lastLeftPinnedChanged",r),t.__addEventListener("colDefChanged",l),this.destroyFuncsForColumnListeners.push(()=>{t.__removeEventListener("leftChanged",s),t.__removeEventListener("widthChanged",i),t.__removeEventListener("firstRightPinnedChanged",n),t.__removeEventListener("lastLeftPinnedChanged",r),t.__removeEventListener("colDefChanged",l)})})}onDomLayoutChanged(){const e=$(this.gos,"print"),t=e||this.gos.get("embedFullWidthRows"),o=t!==this.embedFullWidthRows||this.printLayout!==e;this.printLayout=e,this.embedFullWidthRows=t,o&&this.redrawAfterModelUpdate({domLayoutChanged:!0})}datasourceChanged(){this.firstRenderedRow=0,this.lastRenderedRow=-1;const e=Object.keys(this.rowCtrlsByRowIndex);this.removeRowCtrls(e)}onPageLoaded(e){const t={recycleRows:e.keepRenderedRows,animate:e.animate,newData:e.newData,newPage:e.newPage,onlyBody:!0};this.redrawAfterModelUpdate(t)}getAllCellsNotSpanningForColumn(e){const t=[];return this.getAllRowCtrls().forEach(o=>{var i;const s=(i=o.getCellCtrl(e,!0))==null?void 0:i.eGui;s&&t.push(s)}),t}refreshFloatingRowComps(e=!0){this.refreshFloatingRows(this.topRowCtrls,"top",e),this.refreshFloatingRows(this.bottomRowCtrls,"bottom",e)}refreshFloatingRows(e,t,o){const{pinnedRowModel:s,beans:i,printLayout:n}=this,r=Object.fromEntries(e.map(a=>[a.rowNode.id,a]));s==null||s.forEachPinnedRow(t,(a,d)=>{const c=e[d];c&&s.getPinnedRowById(c.rowNode.id,t)===void 0&&(c.destroyFirstPass(),c.destroySecondPass()),a.id in r&&o?(e[d]=r[a.id],delete r[a.id]):e[d]=new Io(a,i,!1,!1,n)});const l=(t==="top"?s==null?void 0:s.getPinnedTopRowCount():s==null?void 0:s.getPinnedBottomRowCount())??0;e.length=l}onPinnedRowDataChanged(){const e={recycleRows:!0};this.redrawAfterModelUpdate(e)}onPinnedRowsChanged(){this.redrawAfterModelUpdate({recycleRows:!0})}redrawRow(e,t=!1){var o,s;if(e.sticky)(o=this.stickyRowFeature)==null||o.refreshStickyNode(e);else if((s=this.cachedRowCtrls)!=null&&s.has(e)){this.cachedRowCtrls.removeRow(e);return}else{const i=n=>{const r=n[e.rowIndex];r&&r.rowNode===e&&(r.destroyFirstPass(),r.destroySecondPass(),n[e.rowIndex]=this.createRowCon(e,!1,!1))};switch(e.rowPinned){case"top":i(this.topRowCtrls);break;case"bottom":i(this.bottomRowCtrls);break;default:i(this.rowCtrlsByRowIndex),this.updateAllRowCtrls()}}t||this.dispatchDisplayedRowsChanged(!1)}redrawRows(e){if(e!=null){e==null||e.forEach(o=>this.redrawRow(o,!0)),this.dispatchDisplayedRowsChanged(!1);return}this.redrawAfterModelUpdate()}redrawAfterModelUpdate(e={}){var l;this.getLockOnRefresh();const t=(l=this.beans.focusSvc)==null?void 0:l.getFocusCellToUseAfterRefresh();this.updateContainerHeights(),this.scrollToTopIfNewData(e);const o=!e.domLayoutChanged&&!!e.recycleRows,s=e.animate&&zo(this.gos),i=o?this.getRowsToRecycle():null;o||this.removeAllRowComps(),this.workOutFirstAndLastRowsToRender();const{stickyRowFeature:n,gos:r}=this;if(n){n.checkStickyRows();const a=n.extraTopHeight+n.extraBottomHeight;a&&this.updateContainerHeights(a)}this.recycleRows(i,s),this.gridBodyCtrl.updateRowCount(),e.onlyBody||this.refreshFloatingRowComps(r.get("enableRowPinning")?o:void 0),this.dispatchDisplayedRowsChanged(),t!=null&&this.restoreFocusedCell(t),this.releaseLockOnRefresh()}scrollToTopIfNewData(e){var s;const t=e.newData||e.newPage,o=this.gos.get("suppressScrollOnNewData");t&&!o&&(this.gridBodyCtrl.scrollFeature.scrollToTop(),(s=this.stickyRowFeature)==null||s.resetOffsets())}updateContainerHeights(e=0){const{rowContainerHeight:t}=this;if(this.printLayout){t.setModelHeight(null);return}let o=this.pageBounds.getCurrentPageHeight();o===0&&(o=1),t.setModelHeight(o+e)}getLockOnRefresh(){var e,t;if(this.refreshInProgress)throw new Error(Li(252));this.refreshInProgress=!0,(t=(e=this.beans.frameworkOverrides).getLockOnRefresh)==null||t.call(e)}releaseLockOnRefresh(){var e,t;this.refreshInProgress=!1,(t=(e=this.beans.frameworkOverrides).releaseLockOnRefresh)==null||t.call(e)}isRefreshInProgress(){return this.refreshInProgress}restoreFocusedCell(e){if(!e)return;const t=this.beans.focusSvc,o=this.findPositionToFocus(e);if(!o){t.focusHeaderPosition({headerPosition:{headerRowIndex:ie(this.beans)-1,column:e.column}});return}if(e.rowIndex!==o.rowIndex||e.rowPinned!=o.rowPinned){t.setFocusedCell({...o,preventScrollOnBrowserFocus:!0,forceBrowserFocus:!0});return}t.doesRowOrCellHaveBrowserFocus()||this.updateCellFocus(A(this.gos,{...o,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0,type:"cellFocused"}))}findPositionToFocus(e){const{pagination:t,pageBounds:o}=this.beans;let s=e;for(s.rowPinned==null&&t&&o&&!t.isRowInPage(s.rowIndex)&&(s={rowPinned:null,rowIndex:o.getFirstRow()});s;){if(s.rowPinned==null&&o)if(s.rowIndexo.getLastRow()&&(s={rowPinned:null,rowIndex:o.getLastRow()});const i=this.getRowByPosition(s);if(i!=null&&i.isAlive())return{...i.getRowPosition(),column:e.column};s=Ot(this.beans,s)}return null}getAllCellCtrls(){const e=[],t=this.getAllRowCtrls(),o=t.length;for(let s=0;s{const i=s.rowNode;return Xs(i,t)})}getCellCtrls(e,t){let o;k(t)&&(o={},t.forEach(i=>{const n=this.colModel.getCol(i);k(n)&&(o[n.getId()]=!0)}));const s=[];return this.getRowCtrls(e).forEach(i=>{i.getAllCellCtrls().forEach(n=>{const r=n.column.getId();o&&!o[r]||s.push(n)})}),s}destroy(){this.removeAllRowComps(!0),super.destroy()}removeAllRowComps(e=!1){var o;const t=Object.keys(this.rowCtrlsByRowIndex);this.removeRowCtrls(t,e),(o=this.stickyRowFeature)==null||o.destroyStickyCtrls()}getRowsToRecycle(){const e=[];for(const o of Object.keys(this.rowCtrlsByRowIndex))this.rowCtrlsByRowIndex[o].rowNode.id==null&&e.push(o);this.removeRowCtrls(e);const t={};for(const o of Object.values(this.rowCtrlsByRowIndex)){const s=o.rowNode;t[s.id]=o}return this.rowCtrlsByRowIndex={},t}removeRowCtrls(e,t=!1){e.forEach(o=>{const s=this.rowCtrlsByRowIndex[o];s&&(s.destroyFirstPass(t),s.destroySecondPass()),delete this.rowCtrlsByRowIndex[o]})}onBodyScroll(e){e.direction==="vertical"&&this.redraw({afterScroll:!0})}redraw(e={}){const{focusSvc:t,animationFrameSvc:o}=this.beans,{afterScroll:s}=e;let i;const n=this.stickyRowFeature;n&&(i=(t==null?void 0:t.getFocusCellToUseAfterRefresh())||void 0);const r=this.firstRenderedRow,l=this.lastRenderedRow;this.workOutFirstAndLastRowsToRender();let a=!1;if(n){a=n.checkStickyRows();const c=n.extraTopHeight+n.extraBottomHeight;c&&this.updateContainerHeights(c)}const d=this.firstRenderedRow!==r||this.lastRenderedRow!==l;if(!(s&&!a&&!d)&&(this.getLockOnRefresh(),this.recycleRows(null,!1,s),this.releaseLockOnRefresh(),this.dispatchDisplayedRowsChanged(s&&!a),i!=null)){const c=t==null?void 0:t.getFocusCellToUseAfterRefresh();i!=null&&c==null&&(o==null||o.flushAllFrames(),this.restoreFocusedCell(i))}}removeRowCompsNotToDraw(e,t){const o={};e.forEach(n=>o[n]=!0);const i=Object.keys(this.rowCtrlsByRowIndex).filter(n=>!o[n]);this.removeRowCtrls(i,t)}calculateIndexesToDraw(e){var r,l;const t=[];for(let a=this.firstRenderedRow;a<=this.lastRenderedRow;a++)t.push(a);const o=this.beans.pagination,s=(l=(r=this.beans.focusSvc)==null?void 0:r.getFocusedCell())==null?void 0:l.rowIndex;s!=null&&(sthis.lastRenderedRow)&&(!o||o.isRowInPage(s))&&s{const d=a.rowNode.rowIndex;d==null||d===s||(dthis.lastRenderedRow)&&this.doNotUnVirtualiseRow(a)&&t.push(d)};for(const a of Object.values(this.rowCtrlsByRowIndex))i(a);if(e)for(const a of Object.values(e))i(a);t.sort((a,d)=>a-d);const n=[];for(let a=0;a{this.createOrUpdateRowCtrl(i,e,t,o)}),e){const{animationFrameSvc:i}=this.beans;(i==null?void 0:i.active)&&o&&!this.printLayout?i.addDestroyTask(()=>{this.destroyRowCtrls(e,t),this.updateAllRowCtrls(),this.dispatchDisplayedRowsChanged()}):this.destroyRowCtrls(e,t)}this.updateAllRowCtrls()}dispatchDisplayedRowsChanged(e=!1){this.eventSvc.dispatchEvent({type:"displayedRowsChanged",afterScroll:e})}onDisplayedColumnsChanged(){const{visibleCols:e}=this.beans,t=e.isPinningLeft(),o=e.isPinningRight();(this.pinningLeft!==t||o!==this.pinningRight)&&(this.pinningLeft=t,this.pinningRight=o,this.embedFullWidthRows&&this.redrawFullWidthEmbeddedRows())}redrawFullWidthEmbeddedRows(){const e=[];this.getFullWidthRowCtrls().forEach(t=>{const o=t.rowNode.rowIndex;e.push(o.toString())}),this.refreshFloatingRowComps(),this.removeRowCtrls(e),this.redraw({afterScroll:!0})}getFullWidthRowCtrls(e){const t=Qs(e);return this.getAllRowCtrls().filter(o=>{if(!o.isFullWidth())return!1;const s=o.rowNode;return!(t!=null&&!Xs(s,t))})}createOrUpdateRowCtrl(e,t,o,s){let i,n=this.rowCtrlsByRowIndex[e];if(n||(i=this.rowModel.getRow(e),k(i)&&k(t)&&t[i.id]&&i.alreadyRendered&&(n=t[i.id],t[i.id]=null)),!n)if(i||(i=this.rowModel.getRow(e)),k(i))n=this.createRowCon(i,o,s);else return;return i&&(i.alreadyRendered=!0),this.rowCtrlsByRowIndex[e]=n,n}destroyRowCtrls(e,t){const o=[];if(e){for(const s of Object.values(e))if(s){if(this.cachedRowCtrls&&s.isCacheable()){this.cachedRowCtrls.addRow(s);continue}if(s.destroyFirstPass(!t),t){const i=s.instanceId;this.zombieRowCtrls[i]=s,o.push(()=>{s.destroySecondPass(),delete this.zombieRowCtrls[i]})}else s.destroySecondPass()}}t&&(o.push(()=>{this.updateAllRowCtrls(),this.dispatchDisplayedRowsChanged()}),window.setTimeout(()=>o.forEach(s=>s()),bp))}getRowBuffer(){return this.gos.get("rowBuffer")}getRowBufferInPixels(){const e=this.getRowBuffer(),t=Bi(this.beans);return e*t}workOutFirstAndLastRowsToRender(){const{rowContainerHeight:e,pageBounds:t,rowModel:o}=this;e.updateOffset();let s,i;if(!o.isRowsToRender())s=0,i=-1;else if(this.printLayout)this.beans.environment.refreshRowHeightVariable(),s=t.getFirstRow(),i=t.getLastRow();else{const c=this.getRowBufferInPixels(),h=this.ctrlsSvc.getScrollFeature(),u=this.gos.get("suppressRowVirtualisation");let g=!1,p,f;do{const R=t.getPixelOffset(),{pageFirstPixel:D,pageLastPixel:b}=t.getCurrentPagePixelRange(),P=e.divStretchOffset,L=h.getVScrollPosition(),F=L.top,T=L.bottom;u?(p=D+P,f=b+P):(p=Math.max(F+R-c,D)+P,f=Math.min(T+R+c,b)+P),this.firstVisibleVPixel=Math.max(F+R,D)+P,this.lastVisibleVPixel=Math.min(T+R,b)+P,g=this.ensureAllRowsInRangeHaveHeightsCalculated(p,f)}while(g);let C=o.getRowIndexAtPixel(p),y=o.getRowIndexAtPixel(f);const S=t.getFirstRow(),w=t.getLastRow();Cw&&(y=w),s=C,i=y}const n=$(this.gos,"normal"),r=this.gos.get("suppressMaxRenderedRowRestriction"),l=Math.max(this.getRowBuffer(),500);n&&!r&&i-s>l&&(i=s+l);const a=s!==this.firstRenderedRow,d=i!==this.lastRenderedRow;(a||d)&&(this.firstRenderedRow=s,this.lastRenderedRow=i,this.eventSvc.dispatchEvent({type:"viewportChanged",firstRow:s,lastRow:i}))}dispatchFirstDataRenderedEvent(){this.dataFirstRenderedFired||(this.dataFirstRenderedFired=!0,be(this.beans,()=>{this.beans.eventSvc.dispatchEvent({type:"firstDataRendered",firstRow:this.firstRenderedRow,lastRow:this.lastRenderedRow})}))}ensureAllRowsInRangeHaveHeightsCalculated(e,t){var l,a;const o=(l=this.pinnedRowModel)==null?void 0:l.ensureRowHeightsValid(),s=(a=this.stickyRowFeature)==null?void 0:a.ensureRowHeightsValid(),{pageBounds:i,rowModel:n}=this,r=n.ensureRowHeightsValid(e,t,i.getFirstRow(),i.getLastRow());return(r||s)&&this.eventSvc.dispatchEvent({type:"recalculateRowBounds"}),s||r||o?(this.updateContainerHeights(),!0):!1}doNotUnVirtualiseRow(e){const s=e.rowNode,i=this.focusSvc.isRowFocused(s.rowIndex,s.rowPinned),n=e.editing,r=s.detail;return i||n||r?!!this.isRowPresent(s):!1}isRowPresent(e){var t;return this.rowModel.isRowPresent(e)?((t=this.beans.pagination)==null?void 0:t.isRowInPage(e.rowIndex))??!0:!1}createRowCon(e,t,o){var r,l;const s=((r=this.cachedRowCtrls)==null?void 0:r.getRow(e))??null;if(s)return s;const i=o&&!this.printLayout&&!!((l=this.beans.animationFrameSvc)!=null&&l.active);return new Io(e,this.beans,t,i,this.printLayout)}getRenderedNodes(){const e=Object.values(this.rowCtrlsByRowIndex).map(s=>s.rowNode),t=this.getStickyTopRowCtrls().map(s=>s.rowNode),o=this.getStickyBottomRowCtrls().map(s=>s.rowNode);return[...t,...e,...o]}getRowByPosition(e){let t;const{rowIndex:o}=e;switch(e.rowPinned){case"top":t=this.topRowCtrls[o];break;case"bottom":t=this.bottomRowCtrls[o];break;default:t=this.rowCtrlsByRowIndex[o],t||(t=this.getStickyTopRowCtrls().find(s=>s.rowNode.rowIndex===o)||null,t||(t=this.getStickyBottomRowCtrls().find(s=>s.rowNode.rowIndex===o)||null));break}return t}isRangeInRenderedViewport(e,t){if(e==null||t==null)return!1;const s=e>this.lastRenderedRow;return!(tthis.maxCount){const t=this.entriesList[0];t.destroyFirstPass(),t.destroySecondPass(),this.removeFromCache(t)}}getRow(e){if(e==null||e.id==null)return null;const t=this.entriesMap[e.id];return t?(this.removeFromCache(t),t.setCached(!1),t.rowNode!=e?null:t):null}has(e){return this.entriesMap[e.id]!=null}removeRow(e){const t=e.id,o=this.entriesMap[t];delete this.entriesMap[t],ye(this.entriesList,o)}removeFromCache(e){const t=e.rowNode.id;delete this.entriesMap[t],ye(this.entriesList,e)}getEntries(){return this.entriesList}};function Qs(e){if(!e)return;const t={top:{},bottom:{},normal:{}};return e.forEach(o=>{const s=o.id;switch(o.rowPinned){case"top":t.top[s]=o;break;case"bottom":t.bottom[s]=o;break;default:t.normal[s]=o;break}}),t}function Xs(e,t){const o=e.id;switch(e.rowPinned){case"top":return t.top[o]!=null;case"bottom":return t.bottom[o]!=null;default:return t.normal[o]!=null}}var Fp=class extends v{constructor(){super(...arguments),this.beanName="rowNodeSorter"}postConstruct(){const{gos:e}=this;this.isAccentedSort=e.get("accentedSort"),this.primaryColumnsSortGroups=ae(e),this.addManagedPropertyListener("accentedSort",t=>this.isAccentedSort=t.currentValue),this.addManagedPropertyListener("autoGroupColumnDef",()=>this.primaryColumnsSortGroups=ae(e))}doFullSort(e,t){const o=e.map((s,i)=>({currentPos:i,rowNode:s}));return o.sort(this.compareRowNodes.bind(this,t)),o.map(s=>s.rowNode)}compareRowNodes(e,t,o){const s=t.rowNode,i=o.rowNode;for(let n=0,r=e.length;nthis.setColumnDefs(e))}start(){this.beans.ctrlsSvc.whenReady(this,()=>{const e=this.gos.get("columnDefs");e?this.setColumnsAndData(e):this.waitingForColumns=!0,this.gridReady()})}setColumnsAndData(e){const{colModel:t,rowModel:o}=this.beans;t.setColumnDefs(e??[],"gridInitializing"),o.start()}gridReady(){const{eventSvc:e,gos:t}=this;e.dispatchEvent({type:"gridReady"}),Xe(t,`initialised successfully, enterprise = ${t.isModuleRegistered("EnterpriseCore")}`)}setColumnDefs(e){const t=this.gos.get("columnDefs");if(t){if(this.waitingForColumns){this.waitingForColumns=!1,this.setColumnsAndData(t);return}this.beans.colModel.setColumnDefs(t,yt(e.source))}}},Ep="paste",Tp=class extends v{constructor(){super(...arguments),this.beanName="changeDetectionSvc",this.clientSideRowModel=null}postConstruct(){const{gos:e,rowModel:t}=this.beans;Vo(e)&&(this.clientSideRowModel=t),this.addManagedEventListeners({cellValueChanged:this.onCellValueChanged.bind(this)})}onCellValueChanged(e){const{gos:t,rowRenderer:o}=this.beans;if(e.source===Ep||t.get("suppressChangeDetection"))return;const s=e.node,i=[s],n=this.clientSideRowModel,r=n==null?void 0:n.rootNode;if(r&&!s.isRowPinned()){const l=t.get("aggregateOnlyChangedColumns"),a=new sd(l,r);a.addParentNode(s.parent,[e.column]),n.doAggregate(a),a.forEachChangedNodeDepthFirst(d=>{i.push(d),d.sibling&&i.push(d.sibling)})}o.refreshCells({rowNodes:i})}},kp=class extends v{constructor(){super(...arguments),this.beanName="expressionSvc",this.cache={}}evaluate(e,t){if(typeof e=="string")return this.evaluateExpression(e,t);K(15,{expression:e})}evaluateExpression(e,t){try{return this.createExpressionFunction(e)(t.value,t.context,t.oldValue,t.newValue,t.value,t.node,t.data,t.colDef,t.rowIndex,t.api,t.getValue,t.column,t.columnGroup)}catch(o){return K(16,{expression:e,params:t,e:o}),null}}createExpressionFunction(e){const t=this.cache;if(t[e])return t[e];const o=this.createFunctionBody(e),s=new Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, getValue, column, columnGroup",o);return t[e]=s,s}createFunctionBody(e){return e.indexOf("return")>=0?e:"return "+e+";"}},Ip={moduleName:"Expression",version:G,beans:[kp]},Lp={moduleName:"ChangeDetection",version:G,beans:[Tp]},Mp=class extends v{constructor(){super(...arguments),this.beanName="valueSvc",this.initialised=!1,this.isSsrm=!1}wireBeans(e){this.expressionSvc=e.expressionSvc,this.colModel=e.colModel,this.valueCache=e.valueCache,this.dataTypeSvc=e.dataTypeSvc}postConstruct(){this.initialised||this.init()}init(){this.executeValueGetter=this.valueCache?this.executeValueGetterWithValueCache.bind(this):this.executeValueGetterWithoutValueCache.bind(this),this.isSsrm=Ai(this.gos),this.cellExpressions=this.gos.get("enableCellExpressions"),this.isTreeData=this.gos.get("treeData"),this.initialised=!0;const e=t=>this.callColumnCellValueChangedHandler(t);this.eventSvc.addEventListener("cellValueChanged",e,!0),this.addDestroyFunc(()=>this.eventSvc.removeEventListener("cellValueChanged",e,!0)),this.addManagedPropertyListener("treeData",t=>this.isTreeData=t.currentValue)}getValueForDisplay(e,t,o=!1,s=!1){const{showRowGroupColValueSvc:i}=this.beans,n=!e&&t.group,r=e==null?void 0:e.colDef.showRowGroup,l=!this.isTreeData||t.footer;if(i&&l&&(n||r)){const p=i.getGroupValue(t,e);if(p==null)return{value:null,valueFormatted:null};if(!o)return{value:p.value,valueFormatted:null};const f=i.formatAndPrefixGroupColValue(p,e,s);return{value:p.value,valueFormatted:f}}if(!e)return{value:t.key,valueFormatted:null};const a=t.leafGroup&&this.colModel.isPivotMode(),d=t.group&&t.expanded&&!t.footer&&!a,c=this.gos.get("groupSuppressBlankHeader")||!t.sibling,h=d&&!c,u=this.getValue(e,t,h),g=o&&!(s&&e.colDef.useValueFormatterForExport===!1);return{value:u,valueFormatted:g?this.formatValue(e,t,u):null}}getValue(e,t,o=!1){var p;if(this.initialised||this.init(),!t)return;const s=e.getColDef(),i=s.field,n=e.getColId(),r=t.data;let l;const a=s.showRowGroup;if(typeof a=="string"&&(((p=this.beans.rowGroupColsSvc)==null?void 0:p.getColumnIndex(a))??-1)>t.level)return null;const d=typeof a!="string"||!t.group,c=t.groupData&&n in t.groupData,h=!o&&t.aggData&&t.aggData[n]!==void 0,u=this.isSsrm&&o&&!!e.getColDef().aggFunc,g=this.isSsrm&&t.footer&&t.field&&(e.getColDef().showRowGroup===!0||e.getColDef().showRowGroup===t.field);if(this.isTreeData&&h)l=t.aggData[n];else if(this.isTreeData&&s.valueGetter)l=this.executeValueGetter(s.valueGetter,r,e,t);else if(this.isTreeData&&i&&r)l=mt(r,i,e.isFieldContainsDots());else if(c)l=t.groupData[n];else if(h)l=t.aggData[n];else if(s.valueGetter){if(!d)return l;l=this.executeValueGetter(s.valueGetter,r,e,t)}else if(g)l=mt(r,t.field,e.isFieldContainsDots());else if(i&&r&&!u){if(!d)return l;l=mt(r,i,e.isFieldContainsDots())}if(this.cellExpressions&&typeof l=="string"&&l.indexOf("=")===0){const f=l.substring(1);l=this.executeValueGetter(f,r,e,t)}return l}parseValue(e,t,o,s){var r;const i=e.getColDef(),n=i.valueParser;if(k(n)){const l=A(this.gos,{node:t,data:t==null?void 0:t.data,oldValue:s,newValue:o,colDef:i,column:e});return typeof n=="function"?n(l):(r=this.expressionSvc)==null?void 0:r.evaluate(n,l)}return o}getDeleteValue(e,t){return k(e.getColDef().valueParser)?this.parseValue(e,t,"",this.getValueForDisplay(e,t).value)??null:null}formatValue(e,t,o,s,i=!0){let n=null,r;const l=e.getColDef();if(s?r=s:i&&(r=l.valueFormatter),r){const a=A(this.gos,{value:o,node:t,data:t?t.data:null,colDef:l,column:e});typeof r=="function"?n=r(a):n=this.expressionSvc?this.expressionSvc.evaluate(r,a):null}else if(l.refData)return l.refData[o]||"";return n==null&&Array.isArray(o)&&(n=o.join(", ")),n}setValue(e,t,o,s){var c,h;const i=this.colModel.getColDefCol(t);if(!e||!i)return!1;V(e.data)&&(e.data={});const{field:n,valueSetter:r}=i.getColDef();if(V(n)&&V(r))return I(17),!1;if(this.dataTypeSvc&&!this.dataTypeSvc.checkType(i,o))return I(135),!1;const l=A(this.gos,{node:e,data:e.data,oldValue:this.getValue(i,e),newValue:o,colDef:i.getColDef(),column:i});l.newValue=o;let a;if(k(r)?typeof r=="function"?a=r(l):a=(c=this.expressionSvc)==null?void 0:c.evaluate(r,l):a=this.setValueUsingField(e.data,n,o,i.isFieldContainsDots()),a===void 0&&(a=!0),!a)return!1;e.resetQuickFilterAggregateText(),(h=this.valueCache)==null||h.onDataChanged();const d=this.getValue(i,e);return this.eventSvc.dispatchEvent({type:"cellValueChanged",event:null,rowIndex:e.rowIndex,rowPinned:e.rowPinned,column:l.column,colDef:l.colDef,data:e.data,node:e,oldValue:l.oldValue,newValue:d,value:d,source:s}),!0}callColumnCellValueChangedHandler(e){const t=e.colDef.onCellValueChanged;typeof t=="function"&&this.beans.frameworkOverrides.wrapOutgoing(()=>{t({node:e.node,data:e.data,oldValue:e.oldValue,newValue:e.newValue,colDef:e.colDef,column:e.column,api:e.api,context:e.context})})}setValueUsingField(e,t,o,s){if(!t)return!1;let i=!1;if(!s)i=e[t]===o,i||(e[t]=o);else{const n=t.split(".");let r=e;for(;n.length>0&&r;){const l=n.shift();n.length===0?(i=r[l]===o,i||(r[l]=o)):r=r[l]}}return!i}executeValueGetterWithValueCache(e,t,o,s){const i=o.getColId(),n=this.valueCache.getValue(s,i);if(n!==void 0)return n;const r=this.executeValueGetterWithoutValueCache(e,t,o,s);return this.valueCache.setValue(s,i,r),r}executeValueGetterWithoutValueCache(e,t,o,s){var r;const i=A(this.gos,{data:t,node:s,column:o,colDef:o.getColDef(),getValue:this.getValueCallback.bind(this,s)});let n;return typeof e=="function"?n=e(i):n=(r=this.expressionSvc)==null?void 0:r.evaluate(e,i),n}getValueCallback(e,t){const o=this.colModel.getColDefCol(t);return o?this.getValue(o,e):null}getKeyForNode(e,t){const o=this.getValue(e,t),s=e.getColDef().keyCreator;let i=o;if(s){const n=A(this.gos,{value:o,colDef:e.getColDef(),column:e,node:t,data:t.data});i=s(n)}return typeof i=="string"||i==null||(i=String(i),i==="[object Object]"&&I(121)),i}},Ap={moduleName:"CommunityCore",version:G,beans:[Cg,Uc,iu,Ul,yp,zh,cg,Bg,Wl,np,ip,Sp,Mp,pg,dg,fg,ru,Pp,Jh,eu],icons:{selectOpen:"small-down",smallDown:"small-down",colorPicker:"color-picker",smallUp:"small-up",checkboxChecked:"small-up",checkboxIndeterminate:"checkbox-indeterminate",checkboxUnchecked:"checkbox-unchecked",radioButtonOn:"radio-button-on",radioButtonOff:"radio-button-off",smallLeft:"small-left",smallRight:"small-right"},apiFunctions:{getGridId:Kc,destroy:jc,isDestroyed:$c,getGridOption:qc,setGridOption:Zc,updateGridOptions:Hn,isModuleRegistered:Yc},dependsOn:[Yh,wh,Ph,Dp,_g,Uh,Ug,wp,Lp,jg,sp,dp,hp,qg,su,Qh,Ip]},Hp=()=>`No AG Grid modules are registered! It is recommended to start with all Community features via the AllCommunityModule: + + import { ModuleRegistry, AllCommunityModule } from 'ag-grid-community'; + + ModuleRegistry.registerModules([ AllCommunityModule ]); + `;function Gp({moduleName:e,rowModelType:t}){return`To use the ${e}Module you must set the gridOption "rowModelType='${t}'"`}var Jo=class Se{static applyGlobalGridOptions(t){if(!Se.gridOptions)return{...t};let o={};return Y(o,Se.gridOptions,!0,!0),Se.mergeStrategy==="deep"?Y(o,t,!0,!0):o={...o,...t},Se.gridOptions.context&&(o.context=Se.gridOptions.context),t.context&&(Se.mergeStrategy==="deep"&&o.context&&Y(t.context,o.context,!0,!0),o.context=t.context),o}};Jo.gridOptions=void 0;Jo.mergeStrategy="shallow";var Bp=Jo;function Op(e,t,o){if(!t)return K(11),{};const s=o;let i;if(!(s!=null&&s.setThemeOnGridDiv)){const r=q({tag:"div"});r.style.height="100%",e.appendChild(r),e=r,i=()=>e.remove()}return new Vp().create(e,t,r=>{const l=new zc(e);r.createBean(l)},void 0,o,i)}var Wp=1,Vp=class{create(e,t,o,s,i,n){const r=Bp.applyGlobalGridOptions(t),l=r.gridId??String(Wp++),a=this.getRegisteredModules(i,l,r.rowModelType),d=this.createBeansList(r.rowModelType,a,l),c=this.createProvidedBeans(e,r,i);if(!d)return;const h={providedBeanInstances:c,beanClasses:d,gridId:l,beanInitComparator:xc,beanDestroyComparator:Dc,derivedBeans:[Rc],destroyCallback:n},u=new xa(h);return this.registerModuleFeatures(u,a),o(u),u.getBean("syncSvc").start(),s&&s(u),u.getBean("gridApi")}getRegisteredModules(e,t,o){var s;return Mt(Ap,void 0,!0),(s=e==null?void 0:e.modules)==null||s.forEach(i=>Mt(i,t)),ya(t,Js(o))}registerModuleFeatures(e,t){const o=e.getBean("registry"),s=e.getBean("apiFunctionSvc");t.forEach(i=>{o.registerModule(i);const n=i.apiFunctions;n&&Object.keys(n).forEach(l=>{s==null||s.addFunction(l,n[l])})})}createProvidedBeans(e,t,o){let s=o?o.frameworkOverrides:null;V(s)&&(s=new Mn);const i={gridOptions:t,eGridDiv:e,globalListener:o?o.globalListener:null,globalSyncListener:o?o.globalSyncListener:null,frameworkOverrides:s};return o&&o.providedBeanInstances&&Object.assign(i,o.providedBeanInstances),i}createBeansList(e,t,o){const s={clientSide:"ClientSideRowModel",infinite:"InfiniteRowModel",serverSide:"ServerSideRowModel",viewport:"ViewportRowModel"},i=Js(e),n=s[i];if(!n){$e(201,{rowModelType:i},`Unknown rowModelType ${i}.`);return}if(!Sa()){$e(272,void 0,Hp());return}if(!e){const l=Object.entries(s).filter(([a,d])=>To(d,o,a));if(l.length==1){const[a,d]=l[0];if(a!==i){const c={moduleName:d,rowModelType:a};$e(275,c,Gp(c));return}}}if(!To(n,o,i)){$e(200,{reasonOrId:`rowModelType = '${i}'`,moduleName:n,gridScoped:cn(),gridId:o,rowModelType:i},`Missing module ${n}Module for rowModelType ${i}.`);return}const r=new Set;return t.forEach(l=>{var a;return(a=l.beans)==null?void 0:a.forEach(d=>r.add(d))}),Array.from(r)}};function Js(e){return e??"clientSide"}var Np=class{wrap(e,t,o,s){const i=this.createWrapper(e,s);return t==null||t.forEach(n=>{this.createMethod(i,n,!0)}),o==null||o.forEach(n=>{this.createMethod(i,n,!1)}),i}createMethod(e,t,o){e.addMethod(t,this.createMethodProxy(e,t,o))}createMethodProxy(e,t,o){return function(){return e.hasMethod(t)?e.callMethod(t,arguments):(o&&I(49,{methodName:t}),null)}}};function zp(e,t={}){const o=t?t.rowNodes:void 0;e.frameworkOverrides.wrapIncoming(()=>e.rowRenderer.redrawRows(o))}function tr(e,t,o,s,i){t&&(s&&t.parent&&t.parent.level!==-1&&tr(e,t.parent,o,s,i),t.setExpanded(o,void 0,i))}function _p(e,t){return e.rowModel.getRowNode(t)}function Up(e,t,o,s){e.rowRenderer.addRenderedRowListener(t,o,s)}function Kp(e){return e.rowRenderer.getRenderedNodes()}function jp(e,t,o){e.rowModel.forEachNode(t,o)}function $p(e){return e.rowRenderer.firstRenderedRow}function qp(e){return e.rowRenderer.lastRenderedRow}function Zp(e,t){return e.rowModel.getRow(t)}function Yp(e){return e.rowModel.getRowCount()}var Qp={moduleName:"RowApi",version:G,apiFunctions:{redrawRows:zp,setRowNodeExpanded:tr,getRowNode:_p,addRenderedRowListener:Up,getRenderedNodes:Kp,forEachNode:jp,getFirstDisplayedRowIndex:$p,getLastDisplayedRowIndex:qp,getDisplayedRowAtIndex:Zp,getDisplayedRowCount:Yp}},Xp=Object.defineProperty,Jp=(e,t,o)=>t in e?Xp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,Ge=(e,t,o)=>Jp(e,typeof t!="symbol"?t+"":t,o);class ot{static getComponentDefinition(t,o){let s;return typeof t=="string"?s=this.searchForComponentInstance(o,t):s={extends:oi({...t})},s||K(114,{component:t}),s.extends?(s.extends.setup&&(s.setup=s.extends.setup),s.extends.props=this.addParamsToProps(s.extends.props)):s.props=this.addParamsToProps(s.props),s}static addParamsToProps(t){return!t||Array.isArray(t)&&t.indexOf("params")===-1?t=["params",...t||[]]:typeof t=="object"&&!t.params&&(t.params={type:Object}),t}static createAndMountComponent(t,o,s,i){const n=ot.getComponentDefinition(t,s);if(!n)return;const{vNode:r,destroy:l,el:a}=this.mount(n,{params:Object.freeze(o)},s,i||{});return{componentInstance:r.component.proxy,element:a,destroy:l}}static mount(t,o,s,i){let n=ni(t,o);n.appContext={...s.appContext,provides:i};let r=document.createElement("div");return as(n,r),{vNode:n,destroy:()=>{r&&as(null,r),r=null,n=null},el:r}}static searchForComponentInstance(t,o,s=10,i=!1){let n=null,r=0,l=t.parent;for(;!n&&l&&l.components&&++r{let o;return()=>{const s=function(){e()};window.clearTimeout(o),o=window.setTimeout(s,t)}};function rf(e){return e&&e.constructor&&e.constructor.toString().substring(0,5)==="class"}function Ke(e){const t=o=>rf(o)?ls(o):Array.isArray(o)?o.map(s=>t(s)):dr(o)||cr(o)||hr(o)?t(ls(o)):o;return t(e)}const lf={ref:"root"},af=oi({__name:"AgGridVue",props:ns(ur({gridOptions:{},modules:{},statusBar:{},sideBar:{type:[Object,String,Array,Boolean,null]},suppressContextMenu:{type:Boolean},preventDefaultOnContextMenu:{type:Boolean},allowContextMenuWithControlKey:{type:Boolean},columnMenu:{},suppressMenuHide:{type:Boolean},enableBrowserTooltips:{type:Boolean},tooltipTrigger:{},tooltipShowDelay:{},tooltipHideDelay:{},tooltipMouseTrack:{type:Boolean},tooltipShowMode:{},tooltipInteraction:{type:Boolean},popupParent:{},copyHeadersToClipboard:{type:Boolean},copyGroupHeadersToClipboard:{type:Boolean},clipboardDelimiter:{},suppressCopyRowsToClipboard:{type:Boolean},suppressCopySingleCellRanges:{type:Boolean},suppressLastEmptyLineOnPaste:{type:Boolean},suppressClipboardPaste:{type:Boolean},suppressClipboardApi:{type:Boolean},suppressCutToClipboard:{type:Boolean},columnDefs:{},defaultColDef:{},defaultColGroupDef:{},columnTypes:{},dataTypeDefinitions:{},maintainColumnOrder:{type:Boolean},enableStrictPivotColumnOrder:{type:Boolean},suppressFieldDotNotation:{type:Boolean},headerHeight:{},groupHeaderHeight:{},floatingFiltersHeight:{},pivotHeaderHeight:{},pivotGroupHeaderHeight:{},allowDragFromColumnsToolPanel:{type:Boolean},suppressMovableColumns:{type:Boolean},suppressColumnMoveAnimation:{type:Boolean},suppressMoveWhenColumnDragging:{type:Boolean},suppressDragLeaveHidesColumns:{type:Boolean},suppressGroupChangesColumnVisibility:{type:[Boolean,String]},suppressMakeColumnVisibleAfterUnGroup:{type:Boolean},suppressRowGroupHidesColumns:{type:Boolean},colResizeDefault:{},suppressAutoSize:{type:Boolean},autoSizePadding:{},skipHeaderOnAutoSize:{type:Boolean},autoSizeStrategy:{},components:{},editType:{},singleClickEdit:{type:Boolean},suppressClickEdit:{type:Boolean},readOnlyEdit:{type:Boolean},stopEditingWhenCellsLoseFocus:{type:Boolean},enterNavigatesVertically:{type:Boolean},enterNavigatesVerticallyAfterEdit:{type:Boolean},enableCellEditingOnBackspace:{type:Boolean},undoRedoCellEditing:{type:Boolean},undoRedoCellEditingLimit:{},defaultCsvExportParams:{},suppressCsvExport:{type:Boolean},defaultExcelExportParams:{},suppressExcelExport:{type:Boolean},excelStyles:{},findSearchValue:{},findOptions:{},quickFilterText:{},cacheQuickFilter:{type:Boolean},includeHiddenColumnsInQuickFilter:{type:Boolean},quickFilterParser:{type:Function},quickFilterMatcher:{type:Function},applyQuickFilterBeforePivotOrAgg:{type:Boolean},excludeChildrenWhenTreeDataFiltering:{type:Boolean},enableAdvancedFilter:{type:Boolean},alwaysPassFilter:{type:Function},includeHiddenColumnsInAdvancedFilter:{type:Boolean},advancedFilterParent:{},advancedFilterBuilderParams:{},suppressAdvancedFilterEval:{type:Boolean},suppressSetFilterByDefault:{type:Boolean},enableCharts:{type:Boolean},chartThemes:{},customChartThemes:{},chartThemeOverrides:{},chartToolPanelsDef:{},chartMenuItems:{type:[Array,Function]},loadingCellRenderer:{},loadingCellRendererParams:{},loadingCellRendererSelector:{type:Function},localeText:{},masterDetail:{type:Boolean},keepDetailRows:{type:Boolean},keepDetailRowsCount:{},detailCellRenderer:{},detailCellRendererParams:{},detailRowHeight:{},detailRowAutoHeight:{type:Boolean},context:{},alignedGrids:{type:[Array,Function]},tabIndex:{},rowBuffer:{},valueCache:{type:Boolean},valueCacheNeverExpires:{type:Boolean},enableCellExpressions:{type:Boolean},suppressTouch:{type:Boolean},suppressFocusAfterRefresh:{type:Boolean},suppressBrowserResizeObserver:{type:Boolean},suppressPropertyNamesCheck:{type:Boolean},suppressChangeDetection:{type:Boolean},debug:{type:Boolean},loading:{type:Boolean},overlayLoadingTemplate:{},loadingOverlayComponent:{},loadingOverlayComponentParams:{},suppressLoadingOverlay:{type:Boolean},overlayNoRowsTemplate:{},noRowsOverlayComponent:{},noRowsOverlayComponentParams:{},suppressNoRowsOverlay:{type:Boolean},pagination:{type:Boolean},paginationPageSize:{},paginationPageSizeSelector:{type:[Array,Boolean]},paginationAutoPageSize:{type:Boolean},paginateChildRows:{type:Boolean},suppressPaginationPanel:{type:Boolean},pivotMode:{type:Boolean},pivotPanelShow:{},pivotMaxGeneratedColumns:{},pivotDefaultExpanded:{},pivotColumnGroupTotals:{},pivotRowTotals:{},pivotSuppressAutoColumn:{type:Boolean},suppressExpandablePivotGroups:{type:Boolean},functionsReadOnly:{type:Boolean},aggFuncs:{},suppressAggFuncInHeader:{type:Boolean},alwaysAggregateAtRootLevel:{type:Boolean},aggregateOnlyChangedColumns:{type:Boolean},suppressAggFilteredOnly:{type:Boolean},removePivotHeaderRowWhenSingleValueColumn:{type:Boolean},animateRows:{type:Boolean},cellFlashDuration:{},cellFadeDuration:{},allowShowChangeAfterFilter:{type:Boolean},domLayout:{},ensureDomOrder:{type:Boolean},enableCellSpan:{type:Boolean},enableRtl:{type:Boolean},suppressColumnVirtualisation:{type:Boolean},suppressMaxRenderedRowRestriction:{type:Boolean},suppressRowVirtualisation:{type:Boolean},rowDragManaged:{type:Boolean},suppressRowDrag:{type:Boolean},suppressMoveWhenRowDragging:{type:Boolean},rowDragEntireRow:{type:Boolean},rowDragMultiRow:{type:Boolean},rowDragText:{type:Function},dragAndDropImageComponent:{},dragAndDropImageComponentParams:{},fullWidthCellRenderer:{},fullWidthCellRendererParams:{},embedFullWidthRows:{type:Boolean},groupDisplayType:{},groupDefaultExpanded:{},autoGroupColumnDef:{},groupMaintainOrder:{type:Boolean},groupSelectsChildren:{type:Boolean},groupLockGroupColumns:{},groupAggFiltering:{type:[Boolean,Function]},groupTotalRow:{type:[String,Function]},grandTotalRow:{},suppressStickyTotalRow:{type:[Boolean,String]},groupSuppressBlankHeader:{type:Boolean},groupSelectsFiltered:{type:Boolean},showOpenedGroup:{type:Boolean},groupHideParentOfSingleChild:{type:[Boolean,String]},groupRemoveSingleChildren:{type:Boolean},groupRemoveLowestSingleChildren:{type:Boolean},groupHideOpenParents:{type:Boolean},groupAllowUnbalanced:{type:Boolean},rowGroupPanelShow:{},groupRowRenderer:{},groupRowRendererParams:{},treeData:{type:Boolean},treeDataChildrenField:{},treeDataParentIdField:{},rowGroupPanelSuppressSort:{type:Boolean},suppressGroupRowsSticky:{type:Boolean},pinnedTopRowData:{},pinnedBottomRowData:{},enableRowPinning:{type:[Boolean,String]},isRowPinnable:{type:Function},isRowPinned:{type:Function},rowModelType:{},rowData:{},asyncTransactionWaitMillis:{},suppressModelUpdateAfterUpdateTransaction:{type:Boolean},datasource:{},cacheOverflowSize:{},infiniteInitialRowCount:{},serverSideInitialRowCount:{},suppressServerSideFullWidthLoadingRow:{type:Boolean},cacheBlockSize:{},maxBlocksInCache:{},maxConcurrentDatasourceRequests:{},blockLoadDebounceMillis:{},purgeClosedRowNodes:{type:Boolean},serverSideDatasource:{},serverSideSortAllLevels:{type:Boolean},serverSideEnableClientSideSort:{type:Boolean},serverSideOnlyRefreshFilteredGroups:{type:Boolean},serverSidePivotResultFieldSeparator:{},viewportDatasource:{},viewportRowModelPageSize:{},viewportRowModelBufferSize:{},alwaysShowHorizontalScroll:{type:Boolean},alwaysShowVerticalScroll:{type:Boolean},debounceVerticalScrollbar:{type:Boolean},suppressHorizontalScroll:{type:Boolean},suppressScrollOnNewData:{type:Boolean},suppressScrollWhenPopupsAreOpen:{type:Boolean},suppressAnimationFrame:{type:Boolean},suppressMiddleClickScrolls:{type:Boolean},suppressPreventDefaultOnMouseWheel:{type:Boolean},scrollbarWidth:{},rowSelection:{},cellSelection:{type:[Boolean,Object]},rowMultiSelectWithClick:{type:Boolean},suppressRowDeselection:{type:Boolean},suppressRowClickSelection:{type:Boolean},suppressCellFocus:{type:Boolean},suppressHeaderFocus:{type:Boolean},selectionColumnDef:{},rowNumbers:{type:[Boolean,Object]},suppressMultiRangeSelection:{type:Boolean},enableCellTextSelection:{type:Boolean},enableRangeSelection:{type:Boolean},enableRangeHandle:{type:Boolean},enableFillHandle:{type:Boolean},fillHandleDirection:{},suppressClearOnFillReduction:{type:Boolean},sortingOrder:{},accentedSort:{type:Boolean},unSortIcon:{type:Boolean},suppressMultiSort:{type:Boolean},alwaysMultiSort:{type:Boolean},multiSortKey:{},suppressMaintainUnsortedOrder:{type:Boolean},icons:{},rowHeight:{},rowStyle:{},rowClass:{},rowClassRules:{},suppressRowHoverHighlight:{type:Boolean},suppressRowTransform:{type:Boolean},columnHoverHighlight:{type:Boolean},gridId:{},deltaSort:{type:Boolean},treeDataDisplayType:{},enableGroupEdit:{type:Boolean},initialState:{},theme:{},loadThemeGoogleFonts:{type:Boolean},themeCssLayer:{},styleNonce:{},themeStyleContainer:{},getContextMenuItems:{type:Function},getMainMenuItems:{type:Function},postProcessPopup:{type:Function},processUnpinnedColumns:{type:Function},processCellForClipboard:{type:Function},processHeaderForClipboard:{type:Function},processGroupHeaderForClipboard:{type:Function},processCellFromClipboard:{type:Function},sendToClipboard:{type:Function},processDataFromClipboard:{type:Function},isExternalFilterPresent:{type:Function},doesExternalFilterPass:{type:Function},getChartToolbarItems:{type:Function},createChartContainer:{type:Function},focusGridInnerElement:{type:Function},navigateToNextHeader:{type:Function},tabToNextHeader:{type:Function},navigateToNextCell:{type:Function},tabToNextCell:{type:Function},getLocaleText:{type:Function},getDocument:{type:Function},paginationNumberFormatter:{type:Function},getGroupRowAgg:{type:Function},isGroupOpenByDefault:{type:Function},initialGroupOrderComparator:{type:Function},processPivotResultColDef:{type:Function},processPivotResultColGroupDef:{type:Function},getDataPath:{type:Function},getChildCount:{type:Function},getServerSideGroupLevelParams:{type:Function},isServerSideGroupOpenByDefault:{type:Function},isApplyServerSideTransaction:{type:Function},isServerSideGroup:{type:Function},getServerSideGroupKey:{type:Function},getBusinessKeyForNode:{type:Function},getRowId:{type:Function},resetRowDataOnUpdate:{type:Boolean},processRowPostCreate:{type:Function},isRowSelectable:{type:Function},isRowMaster:{type:Function},fillOperation:{type:Function},postSortRows:{type:Function},getRowStyle:{type:Function},getRowClass:{type:Function},getRowHeight:{type:Function},isFullWidthRow:{type:Function},"onTool-panel-visible-changed":{},"onTool-panel-size-changed":{},"onColumn-menu-visible-changed":{},"onContext-menu-visible-changed":{},"onCut-start":{},"onCut-end":{},"onPaste-start":{},"onPaste-end":{},"onColumn-visible":{},"onColumn-pinned":{},"onColumn-resized":{},"onColumn-moved":{},"onColumn-value-changed":{},"onColumn-pivot-mode-changed":{},"onColumn-pivot-changed":{},"onColumn-group-opened":{},"onNew-columns-loaded":{},"onGrid-columns-changed":{},"onDisplayed-columns-changed":{},"onVirtual-columns-changed":{},"onColumn-everything-changed":{},"onColumn-header-mouse-over":{},"onColumn-header-mouse-leave":{},"onColumn-header-clicked":{},"onColumn-header-context-menu":{},"onComponent-state-changed":{},"onCell-value-changed":{},"onCell-edit-request":{},"onRow-value-changed":{},"onCell-editing-started":{},"onCell-editing-stopped":{},"onRow-editing-started":{},"onRow-editing-stopped":{},"onUndo-started":{},"onUndo-ended":{},"onRedo-started":{},"onRedo-ended":{},"onCell-selection-delete-start":{},"onCell-selection-delete-end":{},"onRange-delete-start":{},"onRange-delete-end":{},"onFill-start":{},"onFill-end":{},"onFilter-opened":{},"onFilter-changed":{},"onFilter-modified":{},"onAdvanced-filter-builder-visible-changed":{},"onFind-changed":{},"onChart-created":{},"onChart-range-selection-changed":{},"onChart-options-changed":{},"onChart-destroyed":{},"onCell-key-down":{},"onGrid-ready":{},"onGrid-pre-destroyed":{},"onFirst-data-rendered":{},"onGrid-size-changed":{},"onModel-updated":{},"onVirtual-row-removed":{},"onViewport-changed":{},"onBody-scroll":{},"onBody-scroll-end":{},"onDrag-started":{},"onDrag-stopped":{},"onDrag-cancelled":{},"onState-updated":{},"onPagination-changed":{},"onRow-drag-enter":{},"onRow-drag-move":{},"onRow-drag-leave":{},"onRow-drag-end":{},"onRow-drag-cancel":{},"onRow-resize-started":{},"onRow-resize-ended":{},"onColumn-row-group-changed":{},"onRow-group-opened":{},"onExpand-or-collapse-all":{},"onPivot-max-columns-exceeded":{},"onPinned-row-data-changed":{},"onPinned-rows-changed":{},"onRow-data-updated":{},"onAsync-transactions-flushed":{},"onStore-refreshed":{},"onHeader-focused":{},"onCell-clicked":{},"onCell-double-clicked":{},"onCell-focused":{},"onCell-mouse-over":{},"onCell-mouse-out":{},"onCell-mouse-down":{},"onRow-clicked":{},"onRow-double-clicked":{},"onRow-selected":{},"onSelection-changed":{},"onCell-context-menu":{},"onRange-selection-changed":{},"onCell-selection-changed":{},"onTooltip-show":{},"onTooltip-hide":{},"onSort-changed":{}},sf()),{modelValue:{},modelModifiers:{}}),emits:ns(["update:modelValue"],["update:modelValue"]),setup(e,{expose:t,emit:o}){const s=e,i=sr("root"),n=J(void 0),r=J(!1),l=J(!1),a=J(!1),d=J({}),c=J(null),h=ir(s);Ys().filter(F=>F!="gridOptions").forEach(F=>{rs(()=>h[F],(T,M)=>{(F==="rowData"&&!f.value||F!=="rowData")&&P(F,T),f.value=!1},{deep:!0})});const u=new Set(["rowDataUpdated","cellValueChanged","rowValueChanged"]),g=nr(e,"modelValue"),p=J(!1),f=J(!1),C=o;rs(g,(F,T)=>{r.value&&(f.value||(p.value=!0,P("rowData",Ke(F),Ke(T))),f.value=!1)},{deep:!0});const y=nf(()=>{f.value=!0,C("update:modelValue",D())},10),S=at(),w=F=>{var T,M;a.value&&u.has(F)&&(M=(T=S==null?void 0:S.vnode)==null?void 0:T.props)!=null&&M["onUpdate:modelValue"]&&y()},R=()=>g.value||s.rowData||s.gridOptions.rowData,D=()=>{const F=[];return n==null||n.value.forEachLeafNode(T=>{F.push(T.data)}),F},b=F=>T=>{if(l.value)return;T==="gridReady"&&(a.value=!0);const M=Xn.has(T);M&&!F||!M&&F||u.has(T)&&(p.value||w(T),p.value=!1)},P=(F,T,M)=>{if(r.value){let B=T.value||T;F==="rowData"&&B!=null&&(B=Ke(B)),d.value[F]=B,c.value==null&&(c.value=window.setTimeout(()=>{c.value=null,rl(d.value,n.value),d.value={}},0))}},L=()=>Object.create(at().provides);return rr(()=>{Mt(Qp,void 0,!0);const F=new ef(at(),L()),T={globalListener:b(),globalSyncListener:b(!0),frameworkOverrides:new of(at()),providedBeanInstances:{frameworkCompWrapper:F},modules:s.modules},M=lr(nl(Ke(s.gridOptions),s,[...Ys(),...xg().map(_=>_i(_))])),B=R();B!==void 0&&(M.rowData=Ke(B)),n.value=Op(i.value,M,T),r.value=!0}),ar(()=>{var F;r.value&&((F=n==null?void 0:n.value)==null||F.destroy(),l.value=!0)}),t({api:n}),(F,T)=>(ii(),si("div",lf,null,512))}}),df={style:{width:"100%"}},uf=JSON.parse('{"title":"AG Grid 래퍼","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/ag-grid.md","filePath":"components/grid/ag-grid.md"}'),cf={name:"components/grid/ag-grid.md"},gf=Object.assign(cf,{setup(e){const t=J([{field:"name",headerName:"이름",sortable:!0,filter:!0},{field:"age",headerName:"나이",sortable:!0,filter:!0},{field:"email",headerName:"이메일",sortable:!0,filter:!0}]),o=J([{name:"홍길동",age:30,email:"hong@example.com"},{name:"김철수",age:25,email:"kim@example.com"},{name:"이영희",age:28,email:"lee@example.com"}]),s=J({theme:"legacy",defaultColDef:{resizable:!0,sortable:!0,filter:!0}});return(i,n)=>(ii(),si("div",null,[n[0]||(n[0]=ds("",5)),cs("template",null,[cs("div",df,[ni(gr(af),{class:"ag-theme-balham",columnDefs:t.value,rowData:o.value,gridOptions:s.value,style:{height:"400px"}},null,8,["columnDefs","rowData","gridOptions"])])]),n[1]||(n[1]=ds("",3))]))}});export{uf as __pageData,gf as default}; diff --git a/assets/components_grid_ag-grid.md.CBL3DnKl.js b/assets/components_grid_ag-grid.md.CBL3DnKl.js deleted file mode 100644 index 7ccbf5c..0000000 --- a/assets/components_grid_ag-grid.md.CBL3DnKl.js +++ /dev/null @@ -1,26 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"AG Grid 래퍼","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/ag-grid.md","filePath":"components/grid/ag-grid.md"}'),t={name:"components/grid/ag-grid.md"};function h(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

AG Grid 래퍼

개요

AG Grid를 Vue 컴포넌트로 사용하기 위한 래퍼입니다.

기본 사용

vue
<template>
-  <AgGridVue
-    :columnDefs="columnDefs"
-    :rowData="rowData"
-    class="ag-theme-balham"
-    style="height: 500px;"
-  />
-</template>
-
-<script setup>
-import { AgGridVue } from 'ag-grid-vue3'
-
-const columnDefs = ref([
-  { field: 'id', headerName: 'ID' },
-  { field: 'name', headerName: '이름' },
-])
-
-const rowData = ref([])
-</script>

셀 에디터

커스텀 셀 에디터를 사용할 수 있습니다:

javascript
{
-  field: 'department',
-  editable: true,
-  cellEditor: 'GridMultiSelectWrapper',
-  cellEditorParams: {
-    // 파라미터
-  },
-}
`,8)]))}const c=i(t,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/components_grid_ag-grid.md.CBL3DnKl.lean.js b/assets/components_grid_ag-grid.md.CBL3DnKl.lean.js deleted file mode 100644 index edbf4f0..0000000 --- a/assets/components_grid_ag-grid.md.CBL3DnKl.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"AG Grid 래퍼","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/ag-grid.md","filePath":"components/grid/ag-grid.md"}'),t={name:"components/grid/ag-grid.md"};function h(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",8)]))}const c=i(t,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/components_grid_click-field.md.DTiKcHNo.js b/assets/components_grid_click-field.md.DTiKcHNo.js deleted file mode 100644 index e64c5e7..0000000 --- a/assets/components_grid_click-field.md.DTiKcHNo.js +++ /dev/null @@ -1,23 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"그리드 클릭 필드","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/click-field.md","filePath":"components/grid/click-field.md"}'),h={name:"components/grid/click-field.md"};function e(t,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

그리드 클릭 필드

GridClickField

개요

AG Grid의 셀을 클릭 가능한 필드로 렌더링하는 컴포넌트입니다.

파일 위치

src/views/ui/components/grid/GridClickField.vue

주요 기능

  • 셀 클릭 이벤트 처리
  • 버튼 형태 렌더링
  • 커스텀 액션 실행

사용 예제

javascript
const columnDefs = ref([
-  {
-    field: 'action',
-    headerName: '액션',
-    cellRenderer: 'GridClickField',
-    cellRendererParams: {
-      actionName: 'handleAction',
-      actionType: 'delete',
-      renderType: 'button', // 'button' 또는 'text'
-    },
-  },
-])
-
-// 그리드 컨텍스트에 핸들러 함수 정의
-const gridOptions = {
-  context: {
-    handleAction: ({ action, value, data, columnId, gridApi }) => {
-      if (action === 'delete') {
-        console.log('삭제:', data)
-      }
-    },
-  },
-}

Props

  • actionName: 실행할 함수 이름 (컨텍스트에서 찾음)
  • actionType: 액션 타입
  • renderType: 렌더링 타입 ('button' 또는 'text')
`,12)]))}const o=i(h,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/components_grid_click-field.md.DTiKcHNo.lean.js b/assets/components_grid_click-field.md.DTiKcHNo.lean.js deleted file mode 100644 index ee3bda3..0000000 --- a/assets/components_grid_click-field.md.DTiKcHNo.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"그리드 클릭 필드","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/click-field.md","filePath":"components/grid/click-field.md"}'),h={name:"components/grid/click-field.md"};function e(t,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",12)]))}const o=i(h,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/components_grid_click-field.md.DkrGJw5l.js b/assets/components_grid_click-field.md.DkrGJw5l.js new file mode 100644 index 0000000..92a91f3 --- /dev/null +++ b/assets/components_grid_click-field.md.DkrGJw5l.js @@ -0,0 +1,23 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"그리드 클릭 필드","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/click-field.md","filePath":"components/grid/click-field.md"}'),h={name:"components/grid/click-field.md"};function e(t,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

그리드 클릭 필드

GridClickField

개요

AG Grid의 셀을 클릭 가능한 필드로 렌더링하는 컴포넌트입니다.

파일 위치

src/views/ui/components/grid/GridClickField.vue

주요 기능

  • 셀 클릭 이벤트 처리
  • 버튼 형태 렌더링
  • 커스텀 액션 실행

사용 예제

javascript
const columnDefs = ref([
+  {
+    field: 'action',
+    headerName: '액션',
+    cellRenderer: 'GridClickField',
+    cellRendererParams: {
+      actionName: 'handleAction',
+      actionType: 'delete',
+      renderType: 'button', // 'button' 또는 'text'
+    },
+  },
+])
+
+// 그리드 컨텍스트에 핸들러 함수 정의
+const gridOptions = {
+  context: {
+    handleAction: ({ action, value, data, columnId, gridApi }) => {
+      if (action === 'delete') {
+        console.log('삭제:', data)
+      }
+    },
+  },
+}

Props

  • actionName: 실행할 함수 이름 (컨텍스트에서 찾음)
  • actionType: 액션 타입
  • renderType: 렌더링 타입 ('button' 또는 'text')
`,12)]))}const o=i(h,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/components_grid_click-field.md.DkrGJw5l.lean.js b/assets/components_grid_click-field.md.DkrGJw5l.lean.js new file mode 100644 index 0000000..0d80875 --- /dev/null +++ b/assets/components_grid_click-field.md.DkrGJw5l.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"그리드 클릭 필드","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/click-field.md","filePath":"components/grid/click-field.md"}'),h={name:"components/grid/click-field.md"};function e(t,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",12)]))}const o=i(h,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/components_grid_context-menu.md.75eUqxQY.js b/assets/components_grid_context-menu.md.75eUqxQY.js deleted file mode 100644 index d0c128c..0000000 --- a/assets/components_grid_context-menu.md.75eUqxQY.js +++ /dev/null @@ -1,24 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"그리드 컨텍스트 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/context-menu.md","filePath":"components/grid/context-menu.md"}'),e={name:"components/grid/context-menu.md"};function l(h,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

그리드 컨텍스트 메뉴

GridContextMenu

개요

AG Grid에서 우클릭 시 표시되는 컨텍스트 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/grid/GridContextMenu.vue

주요 기능

컬럼 헤더 컨텍스트 메뉴

  • 열 고정
  • 열 숨기기

셀 컨텍스트 메뉴

  • 엑셀 관련
    • 엑셀 다운로드
    • CSV 다운로드
    • 엑셀 업로드
  • 행 편집
    • 행 추가
    • 행 삭제

사용 예제

vue
<template>
-  <AgGridVue
-    @cellContextMenu="handleContextMenu"
-    @columnHeaderContextMenu="handleHeaderContextMenu"
-  />
-  <GridContextMenu />
-</template>
-
-<script setup>
-import { useContextMenuStore } from '@/utils/stores/contextMenuStore.js'
-
-const contextMenuStore = useContextMenuStore()
-
-const handleContextMenu = (event) => {
-  contextMenuStore.show('gridId', {
-    event: event.event,
-    data: event.data,
-    api: event.api,
-    rowIndex: event.rowIndex,
-    column: event.column,
-    type: 'cellContextMenu',
-  })
-}
-</script>

컨텍스트 메뉴 스토어

contextMenuStore를 사용하여 컨텍스트 메뉴의 상태를 관리합니다.

`,15)]))}const c=i(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/components_grid_context-menu.md.75eUqxQY.lean.js b/assets/components_grid_context-menu.md.75eUqxQY.lean.js deleted file mode 100644 index c9b48ca..0000000 --- a/assets/components_grid_context-menu.md.75eUqxQY.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"그리드 컨텍스트 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/context-menu.md","filePath":"components/grid/context-menu.md"}'),e={name:"components/grid/context-menu.md"};function l(h,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",15)]))}const c=i(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/components_grid_context-menu.md.CKa96uPl.js b/assets/components_grid_context-menu.md.CKa96uPl.js new file mode 100644 index 0000000..292e91a --- /dev/null +++ b/assets/components_grid_context-menu.md.CKa96uPl.js @@ -0,0 +1,24 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"그리드 컨텍스트 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/context-menu.md","filePath":"components/grid/context-menu.md"}'),e={name:"components/grid/context-menu.md"};function l(h,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

그리드 컨텍스트 메뉴

GridContextMenu

개요

AG Grid에서 우클릭 시 표시되는 컨텍스트 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/grid/GridContextMenu.vue

주요 기능

컬럼 헤더 컨텍스트 메뉴

  • 열 고정
  • 열 숨기기

셀 컨텍스트 메뉴

  • 엑셀 관련
    • 엑셀 다운로드
    • CSV 다운로드
    • 엑셀 업로드
  • 행 편집
    • 행 추가
    • 행 삭제

사용 예제

vue
<template>
+  <AgGridVue
+    @cellContextMenu="handleContextMenu"
+    @columnHeaderContextMenu="handleHeaderContextMenu"
+  />
+  <GridContextMenu />
+</template>
+
+<script setup>
+import { useContextMenuStore } from '@/utils/stores/contextMenuStore.js'
+
+const contextMenuStore = useContextMenuStore()
+
+const handleContextMenu = (event) => {
+  contextMenuStore.show('gridId', {
+    event: event.event,
+    data: event.data,
+    api: event.api,
+    rowIndex: event.rowIndex,
+    column: event.column,
+    type: 'cellContextMenu',
+  })
+}
+</script>

컨텍스트 메뉴 스토어

contextMenuStore를 사용하여 컨텍스트 메뉴의 상태를 관리합니다.

`,15)]))}const c=i(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/components_grid_context-menu.md.CKa96uPl.lean.js b/assets/components_grid_context-menu.md.CKa96uPl.lean.js new file mode 100644 index 0000000..830d681 --- /dev/null +++ b/assets/components_grid_context-menu.md.CKa96uPl.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"그리드 컨텍스트 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/context-menu.md","filePath":"components/grid/context-menu.md"}'),e={name:"components/grid/context-menu.md"};function l(h,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",15)]))}const c=i(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/components_grid_multi-select.md.BTRJod7F.js b/assets/components_grid_multi-select.md.BTRJod7F.js new file mode 100644 index 0000000..1339aa0 --- /dev/null +++ b/assets/components_grid_multi-select.md.BTRJod7F.js @@ -0,0 +1,17 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"멀티 선택 그리드","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/multi-select.md","filePath":"components/grid/multi-select.md"}'),l={name:"components/grid/multi-select.md"};function e(p,s,h,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

멀티 선택 그리드

GridMultiSelectWrapper

AG Grid에서 멀티 선택 컴포넌트를 사용하기 위한 래퍼입니다.

파일 위치

src/views/ui/components/grid/GridMultiSelectWrapper.vue

사용 예제

javascript
const columnDefs = ref([
+  {
+    field: 'department',
+    headerName: '부서',
+    editable: true,
+    cellEditor: 'GridMultiSelectWrapper',
+    cellEditorParams: {
+      options: departmentOptions,
+      columns: [
+        { caption: '코드', ref: 'code', width: '100px' },
+        { caption: '명칭', ref: 'name', width: '200px' },
+      ],
+      optionValue: 'code',
+      optionLabel: 'name',
+    },
+  },
+])
`,7)]))}const o=i(l,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/components_grid_multi-select.md.BTRJod7F.lean.js b/assets/components_grid_multi-select.md.BTRJod7F.lean.js new file mode 100644 index 0000000..926eefc --- /dev/null +++ b/assets/components_grid_multi-select.md.BTRJod7F.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"멀티 선택 그리드","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/multi-select.md","filePath":"components/grid/multi-select.md"}'),l={name:"components/grid/multi-select.md"};function e(p,s,h,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",7)]))}const o=i(l,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/components_grid_multi-select.md.CUYcOHR-.js b/assets/components_grid_multi-select.md.CUYcOHR-.js deleted file mode 100644 index be8d101..0000000 --- a/assets/components_grid_multi-select.md.CUYcOHR-.js +++ /dev/null @@ -1,17 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"멀티 선택 그리드","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/multi-select.md","filePath":"components/grid/multi-select.md"}'),l={name:"components/grid/multi-select.md"};function e(p,s,h,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

멀티 선택 그리드

GridMultiSelectWrapper

AG Grid에서 멀티 선택 컴포넌트를 사용하기 위한 래퍼입니다.

파일 위치

src/views/ui/components/grid/GridMultiSelectWrapper.vue

사용 예제

javascript
const columnDefs = ref([
-  {
-    field: 'department',
-    headerName: '부서',
-    editable: true,
-    cellEditor: 'GridMultiSelectWrapper',
-    cellEditorParams: {
-      options: departmentOptions,
-      columns: [
-        { caption: '코드', ref: 'code', width: '100px' },
-        { caption: '명칭', ref: 'name', width: '200px' },
-      ],
-      optionValue: 'code',
-      optionLabel: 'name',
-    },
-  },
-])
`,7)]))}const o=i(l,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/components_grid_multi-select.md.CUYcOHR-.lean.js b/assets/components_grid_multi-select.md.CUYcOHR-.lean.js deleted file mode 100644 index 1cdcc97..0000000 --- a/assets/components_grid_multi-select.md.CUYcOHR-.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"멀티 선택 그리드","description":"","frontmatter":{},"headers":[],"relativePath":"components/grid/multi-select.md","filePath":"components/grid/multi-select.md"}'),l={name:"components/grid/multi-select.md"};function e(p,s,h,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",7)]))}const o=i(l,[["render",e]]);export{c as __pageData,o as default}; diff --git a/assets/components_layouts_blank.md.CsB5kWRE.js b/assets/components_layouts_blank.md.CsB5kWRE.js new file mode 100644 index 0000000..dc4e92e --- /dev/null +++ b/assets/components_layouts_blank.md.CsB5kWRE.js @@ -0,0 +1,11 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"블랭크 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/blank.md","filePath":"components/layouts/blank.md"}'),t={name:"components/layouts/blank.md"};function e(h,s,p,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l(`

블랭크 레이아웃

blank.vue

개요

인증 페이지 등에 사용되는 간단한 레이아웃입니다.

파일 위치

src/views/ui/layouts/blank.vue

특징

  • 헤더/사이드바 없음
  • RouterView만 표시
  • 전체 화면 사용

사용 예제

javascript
{
+  path: '/',
+  component: () => import('@/views/ui/layouts/blank.vue'),
+  children: [
+    {
+      path: '/Login',
+      name: 'Login',
+      component: () => import('@/views/axpFramework/auth/Login.vue'),
+    },
+  ],
+}
`,10)]))}const c=a(t,[["render",e]]);export{d as __pageData,c as default}; diff --git a/assets/components_layouts_blank.md.CsB5kWRE.lean.js b/assets/components_layouts_blank.md.CsB5kWRE.lean.js new file mode 100644 index 0000000..1779e19 --- /dev/null +++ b/assets/components_layouts_blank.md.CsB5kWRE.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"블랭크 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/blank.md","filePath":"components/layouts/blank.md"}'),t={name:"components/layouts/blank.md"};function e(h,s,p,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l("",10)]))}const c=a(t,[["render",e]]);export{d as __pageData,c as default}; diff --git a/assets/components_layouts_blank.md.DqMYvMC1.js b/assets/components_layouts_blank.md.DqMYvMC1.js deleted file mode 100644 index d31d964..0000000 --- a/assets/components_layouts_blank.md.DqMYvMC1.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"블랭크 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/blank.md","filePath":"components/layouts/blank.md"}'),t={name:"components/layouts/blank.md"};function e(h,s,p,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l(`

블랭크 레이아웃

blank.vue

개요

인증 페이지 등에 사용되는 간단한 레이아웃입니다.

파일 위치

src/views/ui/layouts/blank.vue

특징

  • 헤더/사이드바 없음
  • RouterView만 표시
  • 전체 화면 사용

사용 예제

javascript
{
-  path: '/',
-  component: () => import('@/views/ui/layouts/blank.vue'),
-  children: [
-    {
-      path: '/Login',
-      name: 'Login',
-      component: () => import('@/views/axpFramework/auth/Login.vue'),
-    },
-  ],
-}
`,10)]))}const c=a(t,[["render",e]]);export{d as __pageData,c as default}; diff --git a/assets/components_layouts_blank.md.DqMYvMC1.lean.js b/assets/components_layouts_blank.md.DqMYvMC1.lean.js deleted file mode 100644 index c8e792b..0000000 --- a/assets/components_layouts_blank.md.DqMYvMC1.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"블랭크 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/blank.md","filePath":"components/layouts/blank.md"}'),t={name:"components/layouts/blank.md"};function e(h,s,p,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l("",10)]))}const c=a(t,[["render",e]]);export{d as __pageData,c as default}; diff --git a/assets/components_layouts_main.md.CJsZl2y9.js b/assets/components_layouts_main.md.CJsZl2y9.js new file mode 100644 index 0000000..5bd26da --- /dev/null +++ b/assets/components_layouts_main.md.CJsZl2y9.js @@ -0,0 +1,11 @@ +import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"메인 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/main.md","filePath":"components/layouts/main.md"}'),l={name:"components/layouts/main.md"};function t(p,a,h,r,o,d){return n(),i("div",null,a[0]||(a[0]=[e(`

메인 레이아웃

Main.vue

개요

메인 애플리케이션 레이아웃입니다.

파일 위치

src/views/axpFramework/main/Main.vue

주요 구성 요소

  • 헤더 (로고, 메뉴, 탭, 로그 버튼)
  • 사이드바 메뉴
  • 메인 콘텐츠 영역
  • 탭 관리

레이아웃 구조

┌─────────────────────────────────┐
+│ Header (로고, 메뉴, 탭, 로그)    │
+├──────────┬──────────────────────┤
+│ Sidebar  │ Main Content         │
+│ Menu     │ (RouterView)         │
+│          │                      │
+└──────────┴──────────────────────┘

탭 관리

  • 탭 목록 표시
  • 탭 전환
  • 탭 닫기
  • 전체 탭 닫기

사용 예제

라우트에서 자동으로 사용됩니다:

javascript
{
+  path: '/Main',
+  name: 'Main',
+  component: () => import('@/views/axpFramework/main/Main.vue'),
+}
`,15)]))}const u=s(l,[["render",t]]);export{c as __pageData,u as default}; diff --git a/assets/components_layouts_main.md.CJsZl2y9.lean.js b/assets/components_layouts_main.md.CJsZl2y9.lean.js new file mode 100644 index 0000000..75ac4a6 --- /dev/null +++ b/assets/components_layouts_main.md.CJsZl2y9.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"메인 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/main.md","filePath":"components/layouts/main.md"}'),l={name:"components/layouts/main.md"};function t(p,a,h,r,o,d){return n(),i("div",null,a[0]||(a[0]=[e("",15)]))}const u=s(l,[["render",t]]);export{c as __pageData,u as default}; diff --git a/assets/components_layouts_main.md.DZR-gHFD.js b/assets/components_layouts_main.md.DZR-gHFD.js deleted file mode 100644 index 58dced6..0000000 --- a/assets/components_layouts_main.md.DZR-gHFD.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"메인 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/main.md","filePath":"components/layouts/main.md"}'),l={name:"components/layouts/main.md"};function t(p,a,h,r,o,d){return n(),i("div",null,a[0]||(a[0]=[e(`

메인 레이아웃

Main.vue

개요

메인 애플리케이션 레이아웃입니다.

파일 위치

src/views/axpFramework/main/Main.vue

주요 구성 요소

  • 헤더 (로고, 메뉴, 탭, 로그 버튼)
  • 사이드바 메뉴
  • 메인 콘텐츠 영역
  • 탭 관리

레이아웃 구조

┌─────────────────────────────────┐
-│ Header (로고, 메뉴, 탭, 로그)    │
-├──────────┬──────────────────────┤
-│ Sidebar  │ Main Content         │
-│ Menu     │ (RouterView)         │
-│          │                      │
-└──────────┴──────────────────────┘

탭 관리

  • 탭 목록 표시
  • 탭 전환
  • 탭 닫기
  • 전체 탭 닫기

사용 예제

라우트에서 자동으로 사용됩니다:

javascript
{
-  path: '/Main',
-  name: 'Main',
-  component: () => import('@/views/axpFramework/main/Main.vue'),
-}
`,15)]))}const u=s(l,[["render",t]]);export{c as __pageData,u as default}; diff --git a/assets/components_layouts_main.md.DZR-gHFD.lean.js b/assets/components_layouts_main.md.DZR-gHFD.lean.js deleted file mode 100644 index f5d0b32..0000000 --- a/assets/components_layouts_main.md.DZR-gHFD.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"메인 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/main.md","filePath":"components/layouts/main.md"}'),l={name:"components/layouts/main.md"};function t(p,a,h,r,o,d){return n(),i("div",null,a[0]||(a[0]=[e("",15)]))}const u=s(l,[["render",t]]);export{c as __pageData,u as default}; diff --git a/assets/components_layouts_popup.md.D2A3zeJ2.js b/assets/components_layouts_popup.md.D2A3zeJ2.js new file mode 100644 index 0000000..82ef018 --- /dev/null +++ b/assets/components_layouts_popup.md.D2A3zeJ2.js @@ -0,0 +1,19 @@ +import{_ as i,c as a,o as n,aG as p}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"팝업 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/popup.md","filePath":"components/layouts/popup.md"}'),h={name:"components/layouts/popup.md"};function t(l,s,k,e,r,E){return n(),a("div",null,s[0]||(s[0]=[p(`

팝업 레이아웃

popBlank.vue

개요

팝업 창에 사용되는 레이아웃입니다.

파일 위치

src/views/ui/layouts/popBlank.vue

특징

  • 동적 컴포넌트 로드
  • 팝업 파라미터 전달
  • 새 창에서 실행

동적 컴포넌트 로드

javascript
const popName = window.name
+const param = window.opener.popParam[popName]
+const popupComponent = shallowRef(null)
+
+const loadComponent = async (componentPath) => {
+  const modules = import.meta.glob('/src/views/**/**/*.vue')
+  const componentModule = await modules[componentPath]()
+  popupComponent.value = componentModule.default
+}

사용 예제

javascript
{
+  path: '/Popup',
+  name: 'Popup',
+  component: () => import('@/views/ui/layouts/popBlank.vue'),
+}

팝업 열기

javascript
window.popParam = window.popParam || {}
+window.popParam['popupName'] = {
+  path: '/src/views/ess/persadm/MyPopup.vue',
+  // 기타 파라미터
+}
+
+window.open('/Popup', 'popupName', 'width=800,height=600')
`,14)]))}const g=i(h,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/components_layouts_popup.md.D2A3zeJ2.lean.js b/assets/components_layouts_popup.md.D2A3zeJ2.lean.js new file mode 100644 index 0000000..dec40ca --- /dev/null +++ b/assets/components_layouts_popup.md.D2A3zeJ2.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as p}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"팝업 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/popup.md","filePath":"components/layouts/popup.md"}'),h={name:"components/layouts/popup.md"};function t(l,s,k,e,r,E){return n(),a("div",null,s[0]||(s[0]=[p("",14)]))}const g=i(h,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/components_layouts_popup.md.DmuD20b2.js b/assets/components_layouts_popup.md.DmuD20b2.js deleted file mode 100644 index 1c97a35..0000000 --- a/assets/components_layouts_popup.md.DmuD20b2.js +++ /dev/null @@ -1,19 +0,0 @@ -import{_ as i,c as a,o as n,aG as p}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"팝업 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/popup.md","filePath":"components/layouts/popup.md"}'),h={name:"components/layouts/popup.md"};function t(l,s,k,e,r,E){return n(),a("div",null,s[0]||(s[0]=[p(`

팝업 레이아웃

popBlank.vue

개요

팝업 창에 사용되는 레이아웃입니다.

파일 위치

src/views/ui/layouts/popBlank.vue

특징

  • 동적 컴포넌트 로드
  • 팝업 파라미터 전달
  • 새 창에서 실행

동적 컴포넌트 로드

javascript
const popName = window.name
-const param = window.opener.popParam[popName]
-const popupComponent = shallowRef(null)
-
-const loadComponent = async (componentPath) => {
-  const modules = import.meta.glob('/src/views/**/**/*.vue')
-  const componentModule = await modules[componentPath]()
-  popupComponent.value = componentModule.default
-}

사용 예제

javascript
{
-  path: '/Popup',
-  name: 'Popup',
-  component: () => import('@/views/ui/layouts/popBlank.vue'),
-}

팝업 열기

javascript
window.popParam = window.popParam || {}
-window.popParam['popupName'] = {
-  path: '/src/views/ess/persadm/MyPopup.vue',
-  // 기타 파라미터
-}
-
-window.open('/Popup', 'popupName', 'width=800,height=600')
`,14)]))}const g=i(h,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/components_layouts_popup.md.DmuD20b2.lean.js b/assets/components_layouts_popup.md.DmuD20b2.lean.js deleted file mode 100644 index c003d21..0000000 --- a/assets/components_layouts_popup.md.DmuD20b2.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as p}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"팝업 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"components/layouts/popup.md","filePath":"components/layouts/popup.md"}'),h={name:"components/layouts/popup.md"};function t(l,s,k,e,r,E){return n(),a("div",null,s[0]||(s[0]=[p("",14)]))}const g=i(h,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/components_menu_bookmark.md.BlLI12RA.js b/assets/components_menu_bookmark.md.BlLI12RA.js new file mode 100644 index 0000000..22194df --- /dev/null +++ b/assets/components_menu_bookmark.md.BlLI12RA.js @@ -0,0 +1,7 @@ +import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"북마크 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/bookmark.md","filePath":"components/menu/bookmark.md"}'),n={name:"components/menu/bookmark.md"};function l(h,s,k,p,r,o){return e(),i("div",null,s[0]||(s[0]=[t(`

북마크 메뉴

개요

즐겨찾기 메뉴를 표시하는 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuBmk.vue

주요 기능

  • 즐겨찾기 메뉴 목록 표시
  • 즐겨찾기 메뉴 클릭
  • 즐겨찾기 순서 변경 (드래그 앤 드롭)

사용 예제

vue
<template>
+  <MenuBmk :modules="modules" />
+</template>
+
+<script setup>
+const modules = ref({}) // 동적 컴포넌트 모듈
+</script>

드래그 앤 드롭

vuedraggable을 사용하여 즐겨찾기 메뉴의 순서를 변경할 수 있습니다.

`,12)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_menu_bookmark.md.BlLI12RA.lean.js b/assets/components_menu_bookmark.md.BlLI12RA.lean.js new file mode 100644 index 0000000..bc07c86 --- /dev/null +++ b/assets/components_menu_bookmark.md.BlLI12RA.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"북마크 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/bookmark.md","filePath":"components/menu/bookmark.md"}'),n={name:"components/menu/bookmark.md"};function l(h,s,k,p,r,o){return e(),i("div",null,s[0]||(s[0]=[t("",12)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_menu_bookmark.md.BySYMprH.js b/assets/components_menu_bookmark.md.BySYMprH.js deleted file mode 100644 index ddce0c8..0000000 --- a/assets/components_menu_bookmark.md.BySYMprH.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"북마크 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/bookmark.md","filePath":"components/menu/bookmark.md"}'),n={name:"components/menu/bookmark.md"};function l(h,s,k,p,r,o){return e(),i("div",null,s[0]||(s[0]=[t(`

북마크 메뉴

개요

즐겨찾기 메뉴를 표시하는 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuBmk.vue

주요 기능

  • 즐겨찾기 메뉴 목록 표시
  • 즐겨찾기 메뉴 클릭
  • 즐겨찾기 순서 변경 (드래그 앤 드롭)

사용 예제

vue
<template>
-  <MenuBmk :modules="modules" />
-</template>
-
-<script setup>
-const modules = ref({}) // 동적 컴포넌트 모듈
-</script>

드래그 앤 드롭

vuedraggable을 사용하여 즐겨찾기 메뉴의 순서를 변경할 수 있습니다.

`,12)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_menu_bookmark.md.BySYMprH.lean.js b/assets/components_menu_bookmark.md.BySYMprH.lean.js deleted file mode 100644 index 4c10f12..0000000 --- a/assets/components_menu_bookmark.md.BySYMprH.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"북마크 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/bookmark.md","filePath":"components/menu/bookmark.md"}'),n={name:"components/menu/bookmark.md"};function l(h,s,k,p,r,o){return e(),i("div",null,s[0]||(s[0]=[t("",12)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_menu_header-bar.md.B3riSS0N.js b/assets/components_menu_header-bar.md.B3riSS0N.js deleted file mode 100644 index 958c590..0000000 --- a/assets/components_menu_header-bar.md.B3riSS0N.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as s,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"메뉴 헤더바","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/header-bar.md","filePath":"components/menu/header-bar.md"}'),t={name:"components/menu/header-bar.md"};function l(h,a,r,p,d,k){return e(),i("div",null,a[0]||(a[0]=[n(`

메뉴 헤더바

개요

헤더에 표시되는 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuHeaderBar.vue

주요 기능

  • 1단계 메뉴 표시
  • 2단계 메뉴 표시
  • 3단계 메뉴 표시
  • 마우스 오버 시 서브메뉴 표시
  • 즐겨찾기 기능

사용 예제

vue
<template>
-  <MenuHeaderBar :modules="modules" />
-</template>
-
-<script setup>
-const modules = ref({}) // 동적 컴포넌트 모듈
-</script>

메뉴 구조

  • menuLevel1: 1단계 메뉴
  • menuLevel2: 2단계 메뉴
  • menuLevel3: 3단계 메뉴
`,12)]))}const E=s(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/components_menu_header-bar.md.B3riSS0N.lean.js b/assets/components_menu_header-bar.md.B3riSS0N.lean.js deleted file mode 100644 index be67c2d..0000000 --- a/assets/components_menu_header-bar.md.B3riSS0N.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"메뉴 헤더바","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/header-bar.md","filePath":"components/menu/header-bar.md"}'),t={name:"components/menu/header-bar.md"};function l(h,a,r,p,d,k){return e(),i("div",null,a[0]||(a[0]=[n("",12)]))}const E=s(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/components_menu_header-bar.md.BMuVFIl-.js b/assets/components_menu_header-bar.md.BMuVFIl-.js new file mode 100644 index 0000000..d2ef091 --- /dev/null +++ b/assets/components_menu_header-bar.md.BMuVFIl-.js @@ -0,0 +1,7 @@ +import{_ as s,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"메뉴 헤더바","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/header-bar.md","filePath":"components/menu/header-bar.md"}'),t={name:"components/menu/header-bar.md"};function l(h,a,r,p,d,k){return e(),i("div",null,a[0]||(a[0]=[n(`

메뉴 헤더바

개요

헤더에 표시되는 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuHeaderBar.vue

주요 기능

  • 1단계 메뉴 표시
  • 2단계 메뉴 표시
  • 3단계 메뉴 표시
  • 마우스 오버 시 서브메뉴 표시
  • 즐겨찾기 기능

사용 예제

vue
<template>
+  <MenuHeaderBar :modules="modules" />
+</template>
+
+<script setup>
+const modules = ref({}) // 동적 컴포넌트 모듈
+</script>

메뉴 구조

  • menuLevel1: 1단계 메뉴
  • menuLevel2: 2단계 메뉴
  • menuLevel3: 3단계 메뉴
`,12)]))}const E=s(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/components_menu_header-bar.md.BMuVFIl-.lean.js b/assets/components_menu_header-bar.md.BMuVFIl-.lean.js new file mode 100644 index 0000000..516354c --- /dev/null +++ b/assets/components_menu_header-bar.md.BMuVFIl-.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"메뉴 헤더바","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/header-bar.md","filePath":"components/menu/header-bar.md"}'),t={name:"components/menu/header-bar.md"};function l(h,a,r,p,d,k){return e(),i("div",null,a[0]||(a[0]=[n("",12)]))}const E=s(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/components_menu_sidebar.md.C865jo6P.js b/assets/components_menu_sidebar.md.C865jo6P.js deleted file mode 100644 index 0da6951..0000000 --- a/assets/components_menu_sidebar.md.C865jo6P.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"사이드바 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/sidebar.md","filePath":"components/menu/sidebar.md"}'),n={name:"components/menu/sidebar.md"};function l(h,a,r,p,d,k){return e(),i("div",null,a[0]||(a[0]=[t(`

사이드바 메뉴

개요

사이드바에 표시되는 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuSideBar.vue

주요 기능

  • 2단계 메뉴 표시
  • 3단계 메뉴 표시
  • 즐겨찾기 기능
  • 메뉴 클릭 시 탭 열기

사용 예제

vue
<template>
-  <MenuSideBar :modules="modules" />
-</template>
-
-<script setup>
-const modules = ref({}) // 동적 컴포넌트 모듈
-</script>

메뉴 구조

  • menuLevel2: 2단계 메뉴
  • menuLevel3: 3단계 메뉴

즐겨찾기

메뉴 옆의 별 아이콘을 클릭하여 즐겨찾기에 추가/제거할 수 있습니다.

`,14)]))}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/components_menu_sidebar.md.C865jo6P.lean.js b/assets/components_menu_sidebar.md.C865jo6P.lean.js deleted file mode 100644 index 0ffd5cc..0000000 --- a/assets/components_menu_sidebar.md.C865jo6P.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"사이드바 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/sidebar.md","filePath":"components/menu/sidebar.md"}'),n={name:"components/menu/sidebar.md"};function l(h,a,r,p,d,k){return e(),i("div",null,a[0]||(a[0]=[t("",14)]))}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/components_menu_sidebar.md.wxCDlckz.js b/assets/components_menu_sidebar.md.wxCDlckz.js new file mode 100644 index 0000000..a61bd5c --- /dev/null +++ b/assets/components_menu_sidebar.md.wxCDlckz.js @@ -0,0 +1,7 @@ +import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"사이드바 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/sidebar.md","filePath":"components/menu/sidebar.md"}'),n={name:"components/menu/sidebar.md"};function l(h,a,r,p,d,k){return e(),i("div",null,a[0]||(a[0]=[t(`

사이드바 메뉴

개요

사이드바에 표시되는 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuSideBar.vue

주요 기능

  • 2단계 메뉴 표시
  • 3단계 메뉴 표시
  • 즐겨찾기 기능
  • 메뉴 클릭 시 탭 열기

사용 예제

vue
<template>
+  <MenuSideBar :modules="modules" />
+</template>
+
+<script setup>
+const modules = ref({}) // 동적 컴포넌트 모듈
+</script>

메뉴 구조

  • menuLevel2: 2단계 메뉴
  • menuLevel3: 3단계 메뉴

즐겨찾기

메뉴 옆의 별 아이콘을 클릭하여 즐겨찾기에 추가/제거할 수 있습니다.

`,14)]))}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/components_menu_sidebar.md.wxCDlckz.lean.js b/assets/components_menu_sidebar.md.wxCDlckz.lean.js new file mode 100644 index 0000000..dadde23 --- /dev/null +++ b/assets/components_menu_sidebar.md.wxCDlckz.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"사이드바 메뉴","description":"","frontmatter":{},"headers":[],"relativePath":"components/menu/sidebar.md","filePath":"components/menu/sidebar.md"}'),n={name:"components/menu/sidebar.md"};function l(h,a,r,p,d,k){return e(),i("div",null,a[0]||(a[0]=[t("",14)]))}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/components_popup_approval-list.md.BbuEAy1y.js b/assets/components_popup_approval-list.md.BbuEAy1y.js new file mode 100644 index 0000000..810f38b --- /dev/null +++ b/assets/components_popup_approval-list.md.BbuEAy1y.js @@ -0,0 +1,21 @@ +import{_ as i,c as a,o as p,aG as n}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"승인 목록 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/approval-list.md","filePath":"components/popup/approval-list.md"}'),t={name:"components/popup/approval-list.md"};function l(h,s,e,k,r,o){return p(),a("div",null,s[0]||(s[0]=[n(`

승인 목록 팝업

PopupApproveList

개요

승인 목록을 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproveList.vue

사용 예제

vue
<template>
+  <PopupApproveList
+    :title="'승인 목록'"
+    :approval-data="approvalData"
+  />
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { useModalStore } from '@/utils/stores/modalStore.js'
+
+const modalStore = useModalStore()
+const approvalData = ref([])
+
+const openApprovalList = () => {
+  modalStore.openModal('approvalList', {
+    title: '승인 목록',
+    data: approvalData.value,
+  })
+}
+</script>

Props

  • title: 팝업 제목
  • approval-data: 승인 목록 데이터
`,10)]))}const c=i(t,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/components_popup_approval-list.md.BbuEAy1y.lean.js b/assets/components_popup_approval-list.md.BbuEAy1y.lean.js new file mode 100644 index 0000000..9f8489f --- /dev/null +++ b/assets/components_popup_approval-list.md.BbuEAy1y.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as p,aG as n}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"승인 목록 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/approval-list.md","filePath":"components/popup/approval-list.md"}'),t={name:"components/popup/approval-list.md"};function l(h,s,e,k,r,o){return p(),a("div",null,s[0]||(s[0]=[n("",10)]))}const c=i(t,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/components_popup_approval-list.md.D_jmQnZJ.js b/assets/components_popup_approval-list.md.D_jmQnZJ.js deleted file mode 100644 index 4dee704..0000000 --- a/assets/components_popup_approval-list.md.D_jmQnZJ.js +++ /dev/null @@ -1,21 +0,0 @@ -import{_ as i,c as a,o as p,aG as n}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"승인 목록 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/approval-list.md","filePath":"components/popup/approval-list.md"}'),t={name:"components/popup/approval-list.md"};function l(h,s,e,k,r,o){return p(),a("div",null,s[0]||(s[0]=[n(`

승인 목록 팝업

PopupApproveList

개요

승인 목록을 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproveList.vue

사용 예제

vue
<template>
-  <PopupApproveList
-    :title="'승인 목록'"
-    :approval-data="approvalData"
-  />
-</template>
-
-<script setup>
-import { ref } from 'vue'
-import { useModalStore } from '@/utils/stores/modalStore.js'
-
-const modalStore = useModalStore()
-const approvalData = ref([])
-
-const openApprovalList = () => {
-  modalStore.openModal('approvalList', {
-    title: '승인 목록',
-    data: approvalData.value,
-  })
-}
-</script>

Props

  • title: 팝업 제목
  • approval-data: 승인 목록 데이터
`,10)]))}const c=i(t,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/components_popup_approval-list.md.D_jmQnZJ.lean.js b/assets/components_popup_approval-list.md.D_jmQnZJ.lean.js deleted file mode 100644 index a01fd21..0000000 --- a/assets/components_popup_approval-list.md.D_jmQnZJ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as p,aG as n}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"승인 목록 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/approval-list.md","filePath":"components/popup/approval-list.md"}'),t={name:"components/popup/approval-list.md"};function l(h,s,e,k,r,o){return p(),a("div",null,s[0]||(s[0]=[n("",10)]))}const c=i(t,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/components_popup_approval.md.BxSYsBcL.js b/assets/components_popup_approval.md.BxSYsBcL.js new file mode 100644 index 0000000..fad31dc --- /dev/null +++ b/assets/components_popup_approval.md.BxSYsBcL.js @@ -0,0 +1 @@ +import{_ as a,c as o,o as e,aG as r}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"승인 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/approval.md","filePath":"components/popup/approval.md"}'),t={name:"components/popup/approval.md"};function l(i,p,n,s,u,c){return e(),o("div",null,p[0]||(p[0]=[r('

승인 팝업

PopupApproval

승인 처리를 위한 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproval.vue

PopupApprovalBox

승인 박스 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApprovalBox.vue

PopupApproveList

승인 목록 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproveList.vue

',13)]))}const v=a(t,[["render",l]]);export{h as __pageData,v as default}; diff --git a/assets/components_popup_approval.md.BxSYsBcL.lean.js b/assets/components_popup_approval.md.BxSYsBcL.lean.js new file mode 100644 index 0000000..0e585be --- /dev/null +++ b/assets/components_popup_approval.md.BxSYsBcL.lean.js @@ -0,0 +1 @@ +import{_ as a,c as o,o as e,aG as r}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"승인 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/approval.md","filePath":"components/popup/approval.md"}'),t={name:"components/popup/approval.md"};function l(i,p,n,s,u,c){return e(),o("div",null,p[0]||(p[0]=[r("",13)]))}const v=a(t,[["render",l]]);export{h as __pageData,v as default}; diff --git a/assets/components_popup_approval.md.Dm6UstSl.js b/assets/components_popup_approval.md.Dm6UstSl.js deleted file mode 100644 index 7931eca..0000000 --- a/assets/components_popup_approval.md.Dm6UstSl.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as o,o as e,aG as r}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"승인 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/approval.md","filePath":"components/popup/approval.md"}'),t={name:"components/popup/approval.md"};function l(i,p,n,s,u,c){return e(),o("div",null,p[0]||(p[0]=[r('

승인 팝업

PopupApproval

승인 처리를 위한 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproval.vue

PopupApprovalBox

승인 박스 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApprovalBox.vue

PopupApproveList

승인 목록 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproveList.vue

',13)]))}const v=a(t,[["render",l]]);export{h as __pageData,v as default}; diff --git a/assets/components_popup_approval.md.Dm6UstSl.lean.js b/assets/components_popup_approval.md.Dm6UstSl.lean.js deleted file mode 100644 index 29bfb3d..0000000 --- a/assets/components_popup_approval.md.Dm6UstSl.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as o,o as e,aG as r}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"승인 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/approval.md","filePath":"components/popup/approval.md"}'),t={name:"components/popup/approval.md"};function l(i,p,n,s,u,c){return e(),o("div",null,p[0]||(p[0]=[r("",13)]))}const v=a(t,[["render",l]]);export{h as __pageData,v as default}; diff --git a/assets/components_popup_file-link.md.BlAJMGNt.js b/assets/components_popup_file-link.md.BlAJMGNt.js deleted file mode 100644 index c075f86..0000000 --- a/assets/components_popup_file-link.md.BlAJMGNt.js +++ /dev/null @@ -1,17 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"파일 링크 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/file-link.md","filePath":"components/popup/file-link.md"}'),t={name:"components/popup/file-link.md"};function p(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 링크 팝업

개요

파일과 링크를 관리하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupFileLink.vue

주요 기능

  • 파일 조회
  • 파일 추가
  • 링크 추가
  • 파일/링크 저장

사용 예제

vue
<template>
-  <PopupFileLink
-    :title="'파일 및 링크 관리'"
-  />
-</template>
-
-<script setup>
-import { useModalStore } from '@/utils/stores/modalStore.js'
-
-const modalStore = useModalStore()
-
-const openFileLink = () => {
-  modalStore.openModal('fileLink', {
-    title: '파일 및 링크 관리',
-  })
-}
-</script>
`,10)]))}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/assets/components_popup_file-link.md.BlAJMGNt.lean.js b/assets/components_popup_file-link.md.BlAJMGNt.lean.js deleted file mode 100644 index 55acf3d..0000000 --- a/assets/components_popup_file-link.md.BlAJMGNt.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"파일 링크 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/file-link.md","filePath":"components/popup/file-link.md"}'),t={name:"components/popup/file-link.md"};function p(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l("",10)]))}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/assets/components_popup_file-link.md.DRuWTYof.js b/assets/components_popup_file-link.md.DRuWTYof.js new file mode 100644 index 0000000..fcf04f7 --- /dev/null +++ b/assets/components_popup_file-link.md.DRuWTYof.js @@ -0,0 +1,17 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"파일 링크 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/file-link.md","filePath":"components/popup/file-link.md"}'),t={name:"components/popup/file-link.md"};function p(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 링크 팝업

개요

파일과 링크를 관리하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupFileLink.vue

주요 기능

  • 파일 조회
  • 파일 추가
  • 링크 추가
  • 파일/링크 저장

사용 예제

vue
<template>
+  <PopupFileLink
+    :title="'파일 및 링크 관리'"
+  />
+</template>
+
+<script setup>
+import { useModalStore } from '@/utils/stores/modalStore.js'
+
+const modalStore = useModalStore()
+
+const openFileLink = () => {
+  modalStore.openModal('fileLink', {
+    title: '파일 및 링크 관리',
+  })
+}
+</script>
`,10)]))}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/assets/components_popup_file-link.md.DRuWTYof.lean.js b/assets/components_popup_file-link.md.DRuWTYof.lean.js new file mode 100644 index 0000000..041596e --- /dev/null +++ b/assets/components_popup_file-link.md.DRuWTYof.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"파일 링크 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/file-link.md","filePath":"components/popup/file-link.md"}'),t={name:"components/popup/file-link.md"};function p(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l("",10)]))}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/assets/components_popup_log.md.BBY2a3Xm.js b/assets/components_popup_log.md.BBY2a3Xm.js new file mode 100644 index 0000000..9256cad --- /dev/null +++ b/assets/components_popup_log.md.BBY2a3Xm.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as p,aG as t}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"로그 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/log.md","filePath":"components/popup/log.md"}'),r={name:"components/popup/log.md"};function n(l,o,s,i,c,u){return p(),e("div",null,o[0]||(o[0]=[t('

로그 팝업

PopupLog

로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupLog.vue

PopupPageLog

페이지 로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupPageLog.vue

',9)]))}const _=a(r,[["render",n]]);export{h as __pageData,_ as default}; diff --git a/assets/components_popup_log.md.BBY2a3Xm.lean.js b/assets/components_popup_log.md.BBY2a3Xm.lean.js new file mode 100644 index 0000000..ee93da9 --- /dev/null +++ b/assets/components_popup_log.md.BBY2a3Xm.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as p,aG as t}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"로그 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/log.md","filePath":"components/popup/log.md"}'),r={name:"components/popup/log.md"};function n(l,o,s,i,c,u){return p(),e("div",null,o[0]||(o[0]=[t("",9)]))}const _=a(r,[["render",n]]);export{h as __pageData,_ as default}; diff --git a/assets/components_popup_log.md.GnHIBnT-.js b/assets/components_popup_log.md.GnHIBnT-.js deleted file mode 100644 index 455e883..0000000 --- a/assets/components_popup_log.md.GnHIBnT-.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as e,o as p,aG as t}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"로그 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/log.md","filePath":"components/popup/log.md"}'),r={name:"components/popup/log.md"};function n(l,o,s,i,c,u){return p(),e("div",null,o[0]||(o[0]=[t('

로그 팝업

PopupLog

로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupLog.vue

PopupPageLog

페이지 로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupPageLog.vue

',9)]))}const _=a(r,[["render",n]]);export{h as __pageData,_ as default}; diff --git a/assets/components_popup_log.md.GnHIBnT-.lean.js b/assets/components_popup_log.md.GnHIBnT-.lean.js deleted file mode 100644 index 9a2e61e..0000000 --- a/assets/components_popup_log.md.GnHIBnT-.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as e,o as p,aG as t}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"로그 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/log.md","filePath":"components/popup/log.md"}'),r={name:"components/popup/log.md"};function n(l,o,s,i,c,u){return p(),e("div",null,o[0]||(o[0]=[t("",9)]))}const _=a(r,[["render",n]]);export{h as __pageData,_ as default}; diff --git a/assets/components_popup_page-log.md.BCT8DIlm.js b/assets/components_popup_page-log.md.BCT8DIlm.js deleted file mode 100644 index 7642621..0000000 --- a/assets/components_popup_page-log.md.BCT8DIlm.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"페이지 로그 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/page-log.md","filePath":"components/popup/page-log.md"}'),t={name:"components/popup/page-log.md"};function p(l,s,h,k,o,r){return n(),i("div",null,s[0]||(s[0]=[e(`

페이지 로그 팝업

PopupPageLog

개요

페이지 로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupPageLog.vue

주요 기능

  • 페이지 로그 목록 표시
  • 로그 상세 정보 표시
  • 로그 필터링

사용 예제

vue
<script setup>
-import { useModalStore } from '@/utils/stores/modalStore.js'
-
-const modalStore = useModalStore()
-
-const openPageLog = () => {
-  modalStore.openModal('pageLog', {
-    title: '페이지 로그',
-  })
-}
-</script>
`,10)]))}const g=a(t,[["render",p]]);export{E as __pageData,g as default}; diff --git a/assets/components_popup_page-log.md.BCT8DIlm.lean.js b/assets/components_popup_page-log.md.BCT8DIlm.lean.js deleted file mode 100644 index 0c81a66..0000000 --- a/assets/components_popup_page-log.md.BCT8DIlm.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"페이지 로그 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/page-log.md","filePath":"components/popup/page-log.md"}'),t={name:"components/popup/page-log.md"};function p(l,s,h,k,o,r){return n(),i("div",null,s[0]||(s[0]=[e("",10)]))}const g=a(t,[["render",p]]);export{E as __pageData,g as default}; diff --git a/assets/components_popup_page-log.md.BxmU57MG.js b/assets/components_popup_page-log.md.BxmU57MG.js new file mode 100644 index 0000000..e72dce3 --- /dev/null +++ b/assets/components_popup_page-log.md.BxmU57MG.js @@ -0,0 +1,11 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"페이지 로그 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/page-log.md","filePath":"components/popup/page-log.md"}'),t={name:"components/popup/page-log.md"};function p(l,s,h,k,o,r){return n(),i("div",null,s[0]||(s[0]=[e(`

페이지 로그 팝업

PopupPageLog

개요

페이지 로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupPageLog.vue

주요 기능

  • 페이지 로그 목록 표시
  • 로그 상세 정보 표시
  • 로그 필터링

사용 예제

vue
<script setup>
+import { useModalStore } from '@/utils/stores/modalStore.js'
+
+const modalStore = useModalStore()
+
+const openPageLog = () => {
+  modalStore.openModal('pageLog', {
+    title: '페이지 로그',
+  })
+}
+</script>
`,10)]))}const g=a(t,[["render",p]]);export{E as __pageData,g as default}; diff --git a/assets/components_popup_page-log.md.BxmU57MG.lean.js b/assets/components_popup_page-log.md.BxmU57MG.lean.js new file mode 100644 index 0000000..807cd3e --- /dev/null +++ b/assets/components_popup_page-log.md.BxmU57MG.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"페이지 로그 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/page-log.md","filePath":"components/popup/page-log.md"}'),t={name:"components/popup/page-log.md"};function p(l,s,h,k,o,r){return n(),i("div",null,s[0]||(s[0]=[e("",10)]))}const g=a(t,[["render",p]]);export{E as __pageData,g as default}; diff --git a/assets/components_popup_sms-template.md.ChogkW63.js b/assets/components_popup_sms-template.md.ChogkW63.js new file mode 100644 index 0000000..a250ea8 --- /dev/null +++ b/assets/components_popup_sms-template.md.ChogkW63.js @@ -0,0 +1,11 @@ +import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"SMS 템플릿 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/sms-template.md","filePath":"components/popup/sms-template.md"}'),n={name:"components/popup/sms-template.md"};function l(p,s,h,k,r,o){return t(),i("div",null,s[0]||(s[0]=[e(`

SMS 템플릿 팝업

PopupSmsTemplateList

개요

SMS 템플릿 목록을 표시하고 선택할 수 있는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupSmsTemplateList.vue

주요 기능

  • SMS 템플릿 목록 조회
  • 템플릿 선택
  • 템플릿 미리보기

사용 예제

vue
<script setup>
+import { useModalStore } from '@/utils/stores/modalStore.js'
+
+const modalStore = useModalStore()
+
+const openSmsTemplate = () => {
+  modalStore.openModal('smsTemplate', {
+    title: 'SMS 템플릿 선택',
+  })
+}
+</script>
`,10)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_popup_sms-template.md.ChogkW63.lean.js b/assets/components_popup_sms-template.md.ChogkW63.lean.js new file mode 100644 index 0000000..617e75f --- /dev/null +++ b/assets/components_popup_sms-template.md.ChogkW63.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"SMS 템플릿 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/sms-template.md","filePath":"components/popup/sms-template.md"}'),n={name:"components/popup/sms-template.md"};function l(p,s,h,k,r,o){return t(),i("div",null,s[0]||(s[0]=[e("",10)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_popup_sms-template.md.tdeVZDjp.js b/assets/components_popup_sms-template.md.tdeVZDjp.js deleted file mode 100644 index bcaef73..0000000 --- a/assets/components_popup_sms-template.md.tdeVZDjp.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"SMS 템플릿 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/sms-template.md","filePath":"components/popup/sms-template.md"}'),n={name:"components/popup/sms-template.md"};function l(p,s,h,k,r,o){return t(),i("div",null,s[0]||(s[0]=[e(`

SMS 템플릿 팝업

PopupSmsTemplateList

개요

SMS 템플릿 목록을 표시하고 선택할 수 있는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupSmsTemplateList.vue

주요 기능

  • SMS 템플릿 목록 조회
  • 템플릿 선택
  • 템플릿 미리보기

사용 예제

vue
<script setup>
-import { useModalStore } from '@/utils/stores/modalStore.js'
-
-const modalStore = useModalStore()
-
-const openSmsTemplate = () => {
-  modalStore.openModal('smsTemplate', {
-    title: 'SMS 템플릿 선택',
-  })
-}
-</script>
`,10)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/components_popup_sms-template.md.tdeVZDjp.lean.js b/assets/components_popup_sms-template.md.tdeVZDjp.lean.js deleted file mode 100644 index 1711b31..0000000 --- a/assets/components_popup_sms-template.md.tdeVZDjp.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"SMS 템플릿 팝업","description":"","frontmatter":{},"headers":[],"relativePath":"components/popup/sms-template.md","filePath":"components/popup/sms-template.md"}'),n={name:"components/popup/sms-template.md"};function l(p,s,h,k,r,o){return t(),i("div",null,s[0]||(s[0]=[e("",10)]))}const c=a(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/configuration_alias.md.BIwbn7oL.js b/assets/configuration_alias.md.BIwbn7oL.js new file mode 100644 index 0000000..df7fd67 --- /dev/null +++ b/assets/configuration_alias.md.BIwbn7oL.js @@ -0,0 +1,20 @@ +import{_ as i,c as a,o as h,aG as n}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"경로 별칭 (Alias)","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/alias.md","filePath":"configuration/alias.md"}'),t={name:"configuration/alias.md"};function l(k,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

경로 별칭 (Alias)

개요

프로젝트는 경로 별칭을 사용하여 긴 경로를 짧게 표현할 수 있습니다.

설정 위치

vite.config.jsjsconfig.json

주요 별칭

javascript
resolve: {
+  alias: {
+    '@': fileURLToPath(new URL('./src', import.meta.url)),
+    '@core': fileURLToPath(new URL('./src/vendor/@core', import.meta.url)),
+    '@layouts': fileURLToPath(new URL('./src/vendor/@layouts', import.meta.url)),
+    '@dashboard': fileURLToPath(new URL('./src/vendor/@dashboard', import.meta.url)),
+    '@images': fileURLToPath(new URL('./src/vendor/assets/images/', import.meta.url)),
+    '@styles': fileURLToPath(new URL('./src/vendor/assets/styles/', import.meta.url)),
+  },
+}

사용 예제

javascript
// 절대 경로 대신 별칭 사용
+import axiosInstance from '@/CustomAxios.js'
+import { useAuthStore } from '@/utils/stores/authStore.js'
+import logo from '@images/logo.png'

jsconfig.json

TypeScript/JavaScript 프로젝트 설정:

json
{
+  "compilerOptions": {
+    "baseUrl": ".",
+    "paths": {
+      "@/*": ["src/*"]
+    }
+  }
+}

주의사항

  1. 별칭 사용: 가능한 한 별칭을 사용하여 코드 가독성을 높이세요.
  2. 일관성: 프로젝트 전체에서 동일한 별칭을 사용하세요.
`,14)]))}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/configuration_alias.md.BIwbn7oL.lean.js b/assets/configuration_alias.md.BIwbn7oL.lean.js new file mode 100644 index 0000000..e50f0c0 --- /dev/null +++ b/assets/configuration_alias.md.BIwbn7oL.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as h,aG as n}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"경로 별칭 (Alias)","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/alias.md","filePath":"configuration/alias.md"}'),t={name:"configuration/alias.md"};function l(k,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n("",14)]))}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/configuration_alias.md.D5LOQmkW.js b/assets/configuration_alias.md.D5LOQmkW.js deleted file mode 100644 index dccfd0b..0000000 --- a/assets/configuration_alias.md.D5LOQmkW.js +++ /dev/null @@ -1,20 +0,0 @@ -import{_ as i,c as a,o as h,aG as n}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"경로 별칭 (Alias)","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/alias.md","filePath":"configuration/alias.md"}'),t={name:"configuration/alias.md"};function l(k,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

경로 별칭 (Alias)

개요

프로젝트는 경로 별칭을 사용하여 긴 경로를 짧게 표현할 수 있습니다.

설정 위치

vite.config.jsjsconfig.json

주요 별칭

javascript
resolve: {
-  alias: {
-    '@': fileURLToPath(new URL('./src', import.meta.url)),
-    '@core': fileURLToPath(new URL('./src/vendor/@core', import.meta.url)),
-    '@layouts': fileURLToPath(new URL('./src/vendor/@layouts', import.meta.url)),
-    '@dashboard': fileURLToPath(new URL('./src/vendor/@dashboard', import.meta.url)),
-    '@images': fileURLToPath(new URL('./src/vendor/assets/images/', import.meta.url)),
-    '@styles': fileURLToPath(new URL('./src/vendor/assets/styles/', import.meta.url)),
-  },
-}

사용 예제

javascript
// 절대 경로 대신 별칭 사용
-import axiosInstance from '@/CustomAxios.js'
-import { useAuthStore } from '@/utils/stores/authStore.js'
-import logo from '@images/logo.png'

jsconfig.json

TypeScript/JavaScript 프로젝트 설정:

json
{
-  "compilerOptions": {
-    "baseUrl": ".",
-    "paths": {
-      "@/*": ["src/*"]
-    }
-  }
-}

주의사항

  1. 별칭 사용: 가능한 한 별칭을 사용하여 코드 가독성을 높이세요.
  2. 일관성: 프로젝트 전체에서 동일한 별칭을 사용하세요.
`,14)]))}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/configuration_alias.md.D5LOQmkW.lean.js b/assets/configuration_alias.md.D5LOQmkW.lean.js deleted file mode 100644 index 24aee87..0000000 --- a/assets/configuration_alias.md.D5LOQmkW.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as h,aG as n}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"경로 별칭 (Alias)","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/alias.md","filePath":"configuration/alias.md"}'),t={name:"configuration/alias.md"};function l(k,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n("",14)]))}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/configuration_build.md.Bkkitnyy.js b/assets/configuration_build.md.Bkkitnyy.js new file mode 100644 index 0000000..00675bb --- /dev/null +++ b/assets/configuration_build.md.Bkkitnyy.js @@ -0,0 +1,8 @@ +import{_ as i,c as s,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"빌드 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/build.md","filePath":"configuration/build.md"}'),t={name:"configuration/build.md"};function h(l,a,p,d,r,k){return n(),s("div",null,a[0]||(a[0]=[e(`

빌드 설정

개요

Vite 빌드 설정입니다.

설정 위치

vite.config.js

빌드 옵션

javascript
build: {
+  chunkSizeWarningLimit: 5000,
+}

chunkSizeWarningLimit

청크 크기 경고 제한 (KB). 기본값은 500입니다.

빌드 명령어

개발 빌드

bash
npm run build:dev

스테이징 빌드

bash
npm run build:staging

프로덕션 빌드

bash
npm run build:prod
+# 또는
+npm run build

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

빌드 최적화

  • 코드 분할 (Code Splitting)
  • 트리 쉐이킹 (Tree Shaking)
  • 압축 (Minification)
  • 소스맵 생성

환경별 빌드

환경 변수를 사용하여 환경별로 다른 설정을 적용할 수 있습니다:

javascript
export default defineConfig(({ mode }) => {
+  const env = loadEnv(mode, process.cwd())
+  // ...
+})
`,23)]))}const g=i(t,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/configuration_build.md.Bkkitnyy.lean.js b/assets/configuration_build.md.Bkkitnyy.lean.js new file mode 100644 index 0000000..ae061b5 --- /dev/null +++ b/assets/configuration_build.md.Bkkitnyy.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"빌드 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/build.md","filePath":"configuration/build.md"}'),t={name:"configuration/build.md"};function h(l,a,p,d,r,k){return n(),s("div",null,a[0]||(a[0]=[e("",23)]))}const g=i(t,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/configuration_build.md.Dm0YGx3y.js b/assets/configuration_build.md.Dm0YGx3y.js deleted file mode 100644 index 2fb84bd..0000000 --- a/assets/configuration_build.md.Dm0YGx3y.js +++ /dev/null @@ -1,8 +0,0 @@ -import{_ as i,c as s,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"빌드 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/build.md","filePath":"configuration/build.md"}'),t={name:"configuration/build.md"};function h(l,a,p,d,r,k){return n(),s("div",null,a[0]||(a[0]=[e(`

빌드 설정

개요

Vite 빌드 설정입니다.

설정 위치

vite.config.js

빌드 옵션

javascript
build: {
-  chunkSizeWarningLimit: 5000,
-}

chunkSizeWarningLimit

청크 크기 경고 제한 (KB). 기본값은 500입니다.

빌드 명령어

개발 빌드

bash
npm run build:dev

스테이징 빌드

bash
npm run build:staging

프로덕션 빌드

bash
npm run build:prod
-# 또는
-npm run build

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

빌드 최적화

  • 코드 분할 (Code Splitting)
  • 트리 쉐이킹 (Tree Shaking)
  • 압축 (Minification)
  • 소스맵 생성

환경별 빌드

환경 변수를 사용하여 환경별로 다른 설정을 적용할 수 있습니다:

javascript
export default defineConfig(({ mode }) => {
-  const env = loadEnv(mode, process.cwd())
-  // ...
-})
`,23)]))}const g=i(t,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/configuration_build.md.Dm0YGx3y.lean.js b/assets/configuration_build.md.Dm0YGx3y.lean.js deleted file mode 100644 index b0198eb..0000000 --- a/assets/configuration_build.md.Dm0YGx3y.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as s,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"빌드 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/build.md","filePath":"configuration/build.md"}'),t={name:"configuration/build.md"};function h(l,a,p,d,r,k){return n(),s("div",null,a[0]||(a[0]=[e("",23)]))}const g=i(t,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/configuration_env.md.BrgGI6Qm.js b/assets/configuration_env.md.BrgGI6Qm.js new file mode 100644 index 0000000..a34945a --- /dev/null +++ b/assets/configuration_env.md.BrgGI6Qm.js @@ -0,0 +1,10 @@ +import{_ as e,c as s,o as n,aG as i}from"./chunks/framework.DytOxJW6.js";const v=JSON.parse('{"title":"환경 변수 (.env)","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/env.md","filePath":"configuration/env.md"}'),t={name:"configuration/env.md"};function l(o,a,p,h,c,d){return n(),s("div",null,a[0]||(a[0]=[i(`

환경 변수 (.env)

개요

프로젝트는 환경별로 다른 설정을 사용하기 위해 .env 파일을 사용합니다.

환경 변수 파일

  • .env: 기본 환경 변수
  • .env.development: 개발 환경
  • .env.production: 프로덕션 환경
  • .env.staging: 스테이징 환경

필수 환경 변수

env
# API 서버 주소
+VITE_API_BASE_URL=http://localhost:8080
+
+# 인증 서버 주소
+VITE_AUTH_BASE_URL=http://localhost:8080
+
+# 파일 서버 주소
+VITE_FILE_SERVER_URL=http://localhost:8080

환경 변수 사용

Vite에서는 VITE_ 접두사가 붙은 변수만 클라이언트에서 접근 가능합니다:

javascript
const apiUrl = import.meta.env.VITE_API_BASE_URL

환경별 설정

개발 환경 (.env.development)

env
VITE_API_BASE_URL=http://localhost:8080
+VITE_AUTH_BASE_URL=http://localhost:8080

프로덕션 환경 (.env.production)

env
VITE_API_BASE_URL=https://api.example.com
+VITE_AUTH_BASE_URL=https://auth.example.com

주의사항

  1. 보안: 민감한 정보(비밀번호, API 키 등)는 환경 변수에 저장하지 마세요.
  2. 접두사: 클라이언트에서 사용할 변수는 VITE_로 시작해야 합니다.
  3. 재시작: 환경 변수 변경 후 개발 서버를 재시작해야 합니다.
`,17)]))}const u=e(t,[["render",l]]);export{v as __pageData,u as default}; diff --git a/assets/configuration_env.md.BrgGI6Qm.lean.js b/assets/configuration_env.md.BrgGI6Qm.lean.js new file mode 100644 index 0000000..1d4e150 --- /dev/null +++ b/assets/configuration_env.md.BrgGI6Qm.lean.js @@ -0,0 +1 @@ +import{_ as e,c as s,o as n,aG as i}from"./chunks/framework.DytOxJW6.js";const v=JSON.parse('{"title":"환경 변수 (.env)","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/env.md","filePath":"configuration/env.md"}'),t={name:"configuration/env.md"};function l(o,a,p,h,c,d){return n(),s("div",null,a[0]||(a[0]=[i("",17)]))}const u=e(t,[["render",l]]);export{v as __pageData,u as default}; diff --git a/assets/configuration_env.md.CyUfTadv.js b/assets/configuration_env.md.CyUfTadv.js deleted file mode 100644 index c02f22d..0000000 --- a/assets/configuration_env.md.CyUfTadv.js +++ /dev/null @@ -1,10 +0,0 @@ -import{_ as e,c as s,o as n,aG as i}from"./chunks/framework.CrOSaJJH.js";const v=JSON.parse('{"title":"환경 변수 (.env)","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/env.md","filePath":"configuration/env.md"}'),t={name:"configuration/env.md"};function l(o,a,p,h,c,d){return n(),s("div",null,a[0]||(a[0]=[i(`

환경 변수 (.env)

개요

프로젝트는 환경별로 다른 설정을 사용하기 위해 .env 파일을 사용합니다.

환경 변수 파일

  • .env: 기본 환경 변수
  • .env.development: 개발 환경
  • .env.production: 프로덕션 환경
  • .env.staging: 스테이징 환경

필수 환경 변수

env
# API 서버 주소
-VITE_API_BASE_URL=http://localhost:8080
-
-# 인증 서버 주소
-VITE_AUTH_BASE_URL=http://localhost:8080
-
-# 파일 서버 주소
-VITE_FILE_SERVER_URL=http://localhost:8080

환경 변수 사용

Vite에서는 VITE_ 접두사가 붙은 변수만 클라이언트에서 접근 가능합니다:

javascript
const apiUrl = import.meta.env.VITE_API_BASE_URL

환경별 설정

개발 환경 (.env.development)

env
VITE_API_BASE_URL=http://localhost:8080
-VITE_AUTH_BASE_URL=http://localhost:8080

프로덕션 환경 (.env.production)

env
VITE_API_BASE_URL=https://api.example.com
-VITE_AUTH_BASE_URL=https://auth.example.com

주의사항

  1. 보안: 민감한 정보(비밀번호, API 키 등)는 환경 변수에 저장하지 마세요.
  2. 접두사: 클라이언트에서 사용할 변수는 VITE_로 시작해야 합니다.
  3. 재시작: 환경 변수 변경 후 개발 서버를 재시작해야 합니다.
`,17)]))}const u=e(t,[["render",l]]);export{v as __pageData,u as default}; diff --git a/assets/configuration_env.md.CyUfTadv.lean.js b/assets/configuration_env.md.CyUfTadv.lean.js deleted file mode 100644 index f91ec64..0000000 --- a/assets/configuration_env.md.CyUfTadv.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as s,o as n,aG as i}from"./chunks/framework.CrOSaJJH.js";const v=JSON.parse('{"title":"환경 변수 (.env)","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/env.md","filePath":"configuration/env.md"}'),t={name:"configuration/env.md"};function l(o,a,p,h,c,d){return n(),s("div",null,a[0]||(a[0]=[i("",17)]))}const u=e(t,[["render",l]]);export{v as __pageData,u as default}; diff --git a/assets/configuration_proxy.md.CTi8hOVA.js b/assets/configuration_proxy.md.CTi8hOVA.js deleted file mode 100644 index 82762e6..0000000 --- a/assets/configuration_proxy.md.CTi8hOVA.js +++ /dev/null @@ -1,17 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"프록시 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/proxy.md","filePath":"configuration/proxy.md"}'),e={name:"configuration/proxy.md"};function h(l,s,p,k,r,E){return n(),i("div",null,s[0]||(s[0]=[t(`

프록시 설정

개요

Vite 개발 서버의 프록시 설정입니다.

설정 위치

vite.config.js

프록시 설정

javascript
server: {
-  proxy: {
-    '/api': {
-      target: env.VITE_API_BASE_URL,
-      changeOrigin: true,
-    },
-    '/auth': {
-      target: env.VITE_AUTH_BASE_URL,
-      changeOrigin: true,
-    },
-    '/files': {
-      target: env.VITE_FILE_SERVER_URL,
-      changeOrigin: true,
-    },
-  },
-}

프록시 경로

/api

백엔드 API 서버로 프록시됩니다.

/auth

인증 서버로 프록시됩니다.

/files

파일 서버로 프록시됩니다.

사용 예제

javascript
// /api/users → http://localhost:8080/api/users
-const response = await axiosInstance.get('/api/users')

주의사항

프록시는 개발 환경에서만 작동합니다. 프로덕션 빌드에서는 실제 서버 주소를 사용합니다.

`,18)]))}const c=a(e,[["render",h]]);export{o as __pageData,c as default}; diff --git a/assets/configuration_proxy.md.CTi8hOVA.lean.js b/assets/configuration_proxy.md.CTi8hOVA.lean.js deleted file mode 100644 index 5a2ec7d..0000000 --- a/assets/configuration_proxy.md.CTi8hOVA.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"프록시 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/proxy.md","filePath":"configuration/proxy.md"}'),e={name:"configuration/proxy.md"};function h(l,s,p,k,r,E){return n(),i("div",null,s[0]||(s[0]=[t("",18)]))}const c=a(e,[["render",h]]);export{o as __pageData,c as default}; diff --git a/assets/configuration_proxy.md.D0fh2mvQ.js b/assets/configuration_proxy.md.D0fh2mvQ.js new file mode 100644 index 0000000..0f864ca --- /dev/null +++ b/assets/configuration_proxy.md.D0fh2mvQ.js @@ -0,0 +1,17 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"프록시 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/proxy.md","filePath":"configuration/proxy.md"}'),e={name:"configuration/proxy.md"};function h(l,s,p,k,r,E){return n(),i("div",null,s[0]||(s[0]=[t(`

프록시 설정

개요

Vite 개발 서버의 프록시 설정입니다.

설정 위치

vite.config.js

프록시 설정

javascript
server: {
+  proxy: {
+    '/api': {
+      target: env.VITE_API_BASE_URL,
+      changeOrigin: true,
+    },
+    '/auth': {
+      target: env.VITE_AUTH_BASE_URL,
+      changeOrigin: true,
+    },
+    '/files': {
+      target: env.VITE_FILE_SERVER_URL,
+      changeOrigin: true,
+    },
+  },
+}

프록시 경로

/api

백엔드 API 서버로 프록시됩니다.

/auth

인증 서버로 프록시됩니다.

/files

파일 서버로 프록시됩니다.

사용 예제

javascript
// /api/users → http://localhost:8080/api/users
+const response = await axiosInstance.get('/api/users')

주의사항

프록시는 개발 환경에서만 작동합니다. 프로덕션 빌드에서는 실제 서버 주소를 사용합니다.

`,18)]))}const c=a(e,[["render",h]]);export{o as __pageData,c as default}; diff --git a/assets/configuration_proxy.md.D0fh2mvQ.lean.js b/assets/configuration_proxy.md.D0fh2mvQ.lean.js new file mode 100644 index 0000000..4c90d4c --- /dev/null +++ b/assets/configuration_proxy.md.D0fh2mvQ.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"프록시 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/proxy.md","filePath":"configuration/proxy.md"}'),e={name:"configuration/proxy.md"};function h(l,s,p,k,r,E){return n(),i("div",null,s[0]||(s[0]=[t("",18)]))}const c=a(e,[["render",h]]);export{o as __pageData,c as default}; diff --git a/assets/configuration_vite.md.CVZdAV63.js b/assets/configuration_vite.md.CVZdAV63.js new file mode 100644 index 0000000..5033bac --- /dev/null +++ b/assets/configuration_vite.md.CVZdAV63.js @@ -0,0 +1,52 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Vite 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/vite.md","filePath":"configuration/vite.md"}'),t={name:"configuration/vite.md"};function l(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

Vite 설정

개요

프로젝트는 Vite를 빌드 도구로 사용합니다. 설정 파일은 vite.config.js에 있습니다.

주요 설정

플러그인

javascript
plugins: [
+  vue(),                    // Vue 3 지원
+  vueJsx(),                 // JSX 지원
+  vueDevTools(),            // Vue DevTools
+  vuetify({...}),          // Vuetify 설정
+  Components({...}),        // 자동 컴포넌트 임포트
+  AutoImport({...}),        // 자동 함수 임포트
+  svgLoader(),             // SVG 로더
+]

서버 설정

javascript
server: {
+  host: true,
+  port: 5173,
+  proxy: {
+    '/api': {
+      target: env.VITE_API_BASE_URL,
+      changeOrigin: true,
+    },
+    '/auth': {
+      target: env.VITE_AUTH_BASE_URL,
+      changeOrigin: true,
+    },
+    '/files': {
+      target: env.VITE_FILE_SERVER_URL,
+      changeOrigin: true,
+    },
+  },
+}

경로 별칭

javascript
resolve: {
+  alias: {
+    '@': fileURLToPath(new URL('./src', import.meta.url)),
+    '@core': fileURLToPath(new URL('./src/vendor/@core', import.meta.url)),
+    // ...
+  },
+}

환경 변수

.env 파일에서 환경 변수를 설정합니다:

env
VITE_API_BASE_URL=http://localhost:8080
+VITE_AUTH_BASE_URL=http://localhost:8080
+VITE_FILE_SERVER_URL=http://localhost:8080

빌드 설정

javascript
build: {
+  chunkSizeWarningLimit: 5000,
+}

자동 임포트 설정

AutoImport

javascript
AutoImport({
+  imports: [
+    'vue',
+    'vue-router',
+    '@vueuse/core',
+    'pinia',
+    // ...
+  ],
+  dirs: ['./src/utils'],
+  dts: 'src/auto-imports.d.ts',
+})

Components

javascript
Components({
+  dirs: [
+    'src/vendor/@core/components',
+    'src/views/ui/components/**',
+  ],
+  dts: 'src/components.d.ts',
+})
`,20)]))}const c=i(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/configuration_vite.md.CVZdAV63.lean.js b/assets/configuration_vite.md.CVZdAV63.lean.js new file mode 100644 index 0000000..66ebddd --- /dev/null +++ b/assets/configuration_vite.md.CVZdAV63.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Vite 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/vite.md","filePath":"configuration/vite.md"}'),t={name:"configuration/vite.md"};function l(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",20)]))}const c=i(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/configuration_vite.md.D-KwBQgf.js b/assets/configuration_vite.md.D-KwBQgf.js deleted file mode 100644 index e1bf80c..0000000 --- a/assets/configuration_vite.md.D-KwBQgf.js +++ /dev/null @@ -1,52 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Vite 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/vite.md","filePath":"configuration/vite.md"}'),t={name:"configuration/vite.md"};function l(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

Vite 설정

개요

프로젝트는 Vite를 빌드 도구로 사용합니다. 설정 파일은 vite.config.js에 있습니다.

주요 설정

플러그인

javascript
plugins: [
-  vue(),                    // Vue 3 지원
-  vueJsx(),                 // JSX 지원
-  vueDevTools(),            // Vue DevTools
-  vuetify({...}),          // Vuetify 설정
-  Components({...}),        // 자동 컴포넌트 임포트
-  AutoImport({...}),        // 자동 함수 임포트
-  svgLoader(),             // SVG 로더
-]

서버 설정

javascript
server: {
-  host: true,
-  port: 5173,
-  proxy: {
-    '/api': {
-      target: env.VITE_API_BASE_URL,
-      changeOrigin: true,
-    },
-    '/auth': {
-      target: env.VITE_AUTH_BASE_URL,
-      changeOrigin: true,
-    },
-    '/files': {
-      target: env.VITE_FILE_SERVER_URL,
-      changeOrigin: true,
-    },
-  },
-}

경로 별칭

javascript
resolve: {
-  alias: {
-    '@': fileURLToPath(new URL('./src', import.meta.url)),
-    '@core': fileURLToPath(new URL('./src/vendor/@core', import.meta.url)),
-    // ...
-  },
-}

환경 변수

.env 파일에서 환경 변수를 설정합니다:

env
VITE_API_BASE_URL=http://localhost:8080
-VITE_AUTH_BASE_URL=http://localhost:8080
-VITE_FILE_SERVER_URL=http://localhost:8080

빌드 설정

javascript
build: {
-  chunkSizeWarningLimit: 5000,
-}

자동 임포트 설정

AutoImport

javascript
AutoImport({
-  imports: [
-    'vue',
-    'vue-router',
-    '@vueuse/core',
-    'pinia',
-    // ...
-  ],
-  dirs: ['./src/utils'],
-  dts: 'src/auto-imports.d.ts',
-})

Components

javascript
Components({
-  dirs: [
-    'src/vendor/@core/components',
-    'src/views/ui/components/**',
-  ],
-  dts: 'src/components.d.ts',
-})
`,20)]))}const c=i(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/configuration_vite.md.D-KwBQgf.lean.js b/assets/configuration_vite.md.D-KwBQgf.lean.js deleted file mode 100644 index f09a0fa..0000000 --- a/assets/configuration_vite.md.D-KwBQgf.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Vite 설정","description":"","frontmatter":{},"headers":[],"relativePath":"configuration/vite.md","filePath":"configuration/vite.md"}'),t={name:"configuration/vite.md"};function l(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",20)]))}const c=i(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/core-features_auth_encryption.md.CCPm4imW.js b/assets/core-features_auth_encryption.md.CCPm4imW.js deleted file mode 100644 index fb93e93..0000000 --- a/assets/core-features_auth_encryption.md.CCPm4imW.js +++ /dev/null @@ -1,44 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"암호화/복호화","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/encryption.md","filePath":"core-features/auth/encryption.md"}'),h={name:"core-features/auth/encryption.md"};function l(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

암호화/복호화

개요

프로젝트는 API 요청/응답 데이터의 암호화/복호화를 지원합니다. CryptoJS를 사용하여 AES 암호화를 수행합니다.

암호화 설정

세션 스토어에서 암호화 여부를 설정합니다:

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
-
-const sessionStore = useSessionStore()
-
-// 암호화 활성화
-sessionStore.setSessionKey('encrypt', 'Y')
-
-// 복호화 활성화
-sessionStore.setSessionKey('decrypt', 'Y')

요청 암호화

일반 요청 (JSON)

javascript
// CustomAxios.js의 요청 인터셉터에서 자동 처리
-if (sessionStore.getSessionValue('encrypt') === 'Y') {
-  config.data = encryptObject(config.data)
-}

파일 업로드 (FormData)

파일이 포함된 경우, 파일은 개별적으로 암호화하고 텍스트 필드는 함께 암호화합니다:

javascript
if (config.data instanceof FormData) {
-  // 텍스트 필드 암호화
-  const encryptedData = encryptObject(textFields)
-  
-  // 파일 개별 암호화
-  await Promise.all(
-    files.map(async ({ key, file }) => {
-      const arr = await file.arrayBuffer()
-      const bytes = new Uint8Array(arr)
-      const encryptedData = encryptBinary(bytes, file)
-      // ...
-    })
-  )
-}

응답 복호화

응답 인터셉터에서 자동으로 복호화됩니다:

javascript
if (sessionStore.getSessionValue('decrypt') === 'Y') {
-  response.data = decryptObject(response.data)
-}

암호화 함수

encryptObject(data)

객체를 암호화합니다.

파라미터:

  • data (object): 암호화할 데이터

반환값:

  • 암호화된 객체 ({ param, KEY, IV })

decryptObject(data)

객체를 복호화합니다.

파라미터:

  • data (object): 복호화할 데이터 ({ param, KEY, IV })

반환값:

  • 복호화된 객체

encryptBinary(bytes, file)

바이너리 데이터를 암호화합니다.

파라미터:

  • bytes (Uint8Array): 암호화할 바이트 배열
  • file (File): 파일 객체

반환값:

  • 암호화된 데이터 객체

사용 예제

암호화 활성화

vue
<script setup>
-import { onMounted } from 'vue'
-import { useSessionStore } from '@/utils/stores/sessionStore.js'
-
-const sessionStore = useSessionStore()
-
-onMounted(() => {
-  // 암호화 활성화
-  sessionStore.setSessionKey('encrypt', 'Y')
-  sessionStore.setSessionKey('decrypt', 'Y')
-})
-</script>

수동 암호화/복호화

javascript
import { encryptObject, decryptObject } from '@/utils/common/common.js'
-
-// 암호화
-const encrypted = encryptObject({ name: '홍길동', age: 30 })
-
-// 복호화
-const decrypted = decryptObject(encrypted)

주의사항

  1. 성능: 암호화/복호화는 CPU 집약적 작업이므로 필요한 경우에만 사용하세요.
  2. 파일 크기: 큰 파일의 경우 암호화 시간이 오래 걸릴 수 있습니다.
  3. 키 관리: 암호화 키는 안전하게 관리해야 합니다.

관련 문서

`,43)]))}const c=i(h,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_auth_encryption.md.CCPm4imW.lean.js b/assets/core-features_auth_encryption.md.CCPm4imW.lean.js deleted file mode 100644 index 6af9128..0000000 --- a/assets/core-features_auth_encryption.md.CCPm4imW.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"암호화/복호화","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/encryption.md","filePath":"core-features/auth/encryption.md"}'),h={name:"core-features/auth/encryption.md"};function l(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",43)]))}const c=i(h,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_auth_encryption.md.z2IPYcWX.js b/assets/core-features_auth_encryption.md.z2IPYcWX.js new file mode 100644 index 0000000..11cb5f7 --- /dev/null +++ b/assets/core-features_auth_encryption.md.z2IPYcWX.js @@ -0,0 +1,44 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"암호화/복호화","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/encryption.md","filePath":"core-features/auth/encryption.md"}'),h={name:"core-features/auth/encryption.md"};function l(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

암호화/복호화

개요

프로젝트는 API 요청/응답 데이터의 암호화/복호화를 지원합니다. CryptoJS를 사용하여 AES 암호화를 수행합니다.

암호화 설정

세션 스토어에서 암호화 여부를 설정합니다:

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
+
+const sessionStore = useSessionStore()
+
+// 암호화 활성화
+sessionStore.setSessionKey('encrypt', 'Y')
+
+// 복호화 활성화
+sessionStore.setSessionKey('decrypt', 'Y')

요청 암호화

일반 요청 (JSON)

javascript
// CustomAxios.js의 요청 인터셉터에서 자동 처리
+if (sessionStore.getSessionValue('encrypt') === 'Y') {
+  config.data = encryptObject(config.data)
+}

파일 업로드 (FormData)

파일이 포함된 경우, 파일은 개별적으로 암호화하고 텍스트 필드는 함께 암호화합니다:

javascript
if (config.data instanceof FormData) {
+  // 텍스트 필드 암호화
+  const encryptedData = encryptObject(textFields)
+  
+  // 파일 개별 암호화
+  await Promise.all(
+    files.map(async ({ key, file }) => {
+      const arr = await file.arrayBuffer()
+      const bytes = new Uint8Array(arr)
+      const encryptedData = encryptBinary(bytes, file)
+      // ...
+    })
+  )
+}

응답 복호화

응답 인터셉터에서 자동으로 복호화됩니다:

javascript
if (sessionStore.getSessionValue('decrypt') === 'Y') {
+  response.data = decryptObject(response.data)
+}

암호화 함수

encryptObject(data)

객체를 암호화합니다.

파라미터:

  • data (object): 암호화할 데이터

반환값:

  • 암호화된 객체 ({ param, KEY, IV })

decryptObject(data)

객체를 복호화합니다.

파라미터:

  • data (object): 복호화할 데이터 ({ param, KEY, IV })

반환값:

  • 복호화된 객체

encryptBinary(bytes, file)

바이너리 데이터를 암호화합니다.

파라미터:

  • bytes (Uint8Array): 암호화할 바이트 배열
  • file (File): 파일 객체

반환값:

  • 암호화된 데이터 객체

사용 예제

암호화 활성화

vue
<script setup>
+import { onMounted } from 'vue'
+import { useSessionStore } from '@/utils/stores/sessionStore.js'
+
+const sessionStore = useSessionStore()
+
+onMounted(() => {
+  // 암호화 활성화
+  sessionStore.setSessionKey('encrypt', 'Y')
+  sessionStore.setSessionKey('decrypt', 'Y')
+})
+</script>

수동 암호화/복호화

javascript
import { encryptObject, decryptObject } from '@/utils/common/common.js'
+
+// 암호화
+const encrypted = encryptObject({ name: '홍길동', age: 30 })
+
+// 복호화
+const decrypted = decryptObject(encrypted)

주의사항

  1. 성능: 암호화/복호화는 CPU 집약적 작업이므로 필요한 경우에만 사용하세요.
  2. 파일 크기: 큰 파일의 경우 암호화 시간이 오래 걸릴 수 있습니다.
  3. 키 관리: 암호화 키는 안전하게 관리해야 합니다.

관련 문서

`,43)]))}const c=i(h,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_auth_encryption.md.z2IPYcWX.lean.js b/assets/core-features_auth_encryption.md.z2IPYcWX.lean.js new file mode 100644 index 0000000..5db5965 --- /dev/null +++ b/assets/core-features_auth_encryption.md.z2IPYcWX.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"암호화/복호화","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/encryption.md","filePath":"core-features/auth/encryption.md"}'),h={name:"core-features/auth/encryption.md"};function l(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",43)]))}const c=i(h,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_auth_jwt.md.D3g4aW05.js b/assets/core-features_auth_jwt.md.D3g4aW05.js deleted file mode 100644 index 2d8bbc4..0000000 --- a/assets/core-features_auth_jwt.md.D3g4aW05.js +++ /dev/null @@ -1,17 +0,0 @@ -import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"JWT 인증","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/jwt.md","filePath":"core-features/auth/jwt.md"}'),n={name:"core-features/auth/jwt.md"};function h(l,s,k,r,p,o){return e(),i("div",null,s[0]||(s[0]=[t(`

JWT 인증

개요

프로젝트는 JWT(JSON Web Token) 기반 인증을 사용합니다. Access Token과 Refresh Token을 사용하여 인증을 관리합니다.

토큰 구조

Access Token

  • 저장 위치: authStore.accessToken (메모리)
  • 용도: API 요청 시 인증
  • 만료 시간: 짧음 (보통 15분~1시간)
  • 전송 방식: Authorization: Bearer <token> 헤더

Refresh Token

  • 저장 위치: HttpOnly Cookie
  • 용도: Access Token 갱신
  • 만료 시간: 길음 (보통 7일~30일)
  • 전송 방식: Cookie (자동 전송)

인증 흐름

1. 로그인

javascript
const response = await axiosInstance.post('/api/login', {
-  userId: 'user123',
-  password: 'password',
-})
-
-if (response.status === 'S') {
-  // Access Token 저장
-  authStore.setAccessToken(response.data.accessToken)
-  // Refresh Token은 쿠키에 자동 저장됨
-}

2. API 요청

javascript
// CustomAxios.js의 요청 인터셉터에서 자동으로 토큰 추가
-const token = authStore.accessToken
-if (token) {
-  config.headers['Authorization'] = \`Bearer \${token}\`
-}

3. 토큰 갱신

Access Token이 만료되면 자동으로 Refresh Token을 사용하여 갱신합니다.

토큰 관리

Access Token 설정

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
-
-const authStore = useAuthStore()
-authStore.setAccessToken('new-token')

Access Token 초기화

javascript
authStore.clearAccessToken()

인증 상태 확인

javascript
const isAuthenticated = computed(() => authStore.isAuthenticated)

보안 고려사항

  1. Access Token: 메모리에만 저장 (localStorage 사용 안 함)
  2. Refresh Token: HttpOnly Cookie 사용 (XSS 공격 방지)
  3. HTTPS 사용: 프로덕션 환경에서는 반드시 HTTPS 사용
  4. 토큰 만료: 적절한 만료 시간 설정

관련 문서

`,26)]))}const g=a(n,[["render",h]]);export{d as __pageData,g as default}; diff --git a/assets/core-features_auth_jwt.md.D3g4aW05.lean.js b/assets/core-features_auth_jwt.md.D3g4aW05.lean.js deleted file mode 100644 index 57c3196..0000000 --- a/assets/core-features_auth_jwt.md.D3g4aW05.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"JWT 인증","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/jwt.md","filePath":"core-features/auth/jwt.md"}'),n={name:"core-features/auth/jwt.md"};function h(l,s,k,r,p,o){return e(),i("div",null,s[0]||(s[0]=[t("",26)]))}const g=a(n,[["render",h]]);export{d as __pageData,g as default}; diff --git a/assets/core-features_auth_jwt.md.DR9TMJjM.js b/assets/core-features_auth_jwt.md.DR9TMJjM.js new file mode 100644 index 0000000..179c57a --- /dev/null +++ b/assets/core-features_auth_jwt.md.DR9TMJjM.js @@ -0,0 +1,17 @@ +import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"JWT 인증","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/jwt.md","filePath":"core-features/auth/jwt.md"}'),n={name:"core-features/auth/jwt.md"};function h(l,s,k,r,p,o){return e(),i("div",null,s[0]||(s[0]=[t(`

JWT 인증

개요

프로젝트는 JWT(JSON Web Token) 기반 인증을 사용합니다. Access Token과 Refresh Token을 사용하여 인증을 관리합니다.

토큰 구조

Access Token

  • 저장 위치: authStore.accessToken (메모리)
  • 용도: API 요청 시 인증
  • 만료 시간: 짧음 (보통 15분~1시간)
  • 전송 방식: Authorization: Bearer <token> 헤더

Refresh Token

  • 저장 위치: HttpOnly Cookie
  • 용도: Access Token 갱신
  • 만료 시간: 길음 (보통 7일~30일)
  • 전송 방식: Cookie (자동 전송)

인증 흐름

1. 로그인

javascript
const response = await axiosInstance.post('/api/login', {
+  userId: 'user123',
+  password: 'password',
+})
+
+if (response.status === 'S') {
+  // Access Token 저장
+  authStore.setAccessToken(response.data.accessToken)
+  // Refresh Token은 쿠키에 자동 저장됨
+}

2. API 요청

javascript
// CustomAxios.js의 요청 인터셉터에서 자동으로 토큰 추가
+const token = authStore.accessToken
+if (token) {
+  config.headers['Authorization'] = \`Bearer \${token}\`
+}

3. 토큰 갱신

Access Token이 만료되면 자동으로 Refresh Token을 사용하여 갱신합니다.

토큰 관리

Access Token 설정

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
+
+const authStore = useAuthStore()
+authStore.setAccessToken('new-token')

Access Token 초기화

javascript
authStore.clearAccessToken()

인증 상태 확인

javascript
const isAuthenticated = computed(() => authStore.isAuthenticated)

보안 고려사항

  1. Access Token: 메모리에만 저장 (localStorage 사용 안 함)
  2. Refresh Token: HttpOnly Cookie 사용 (XSS 공격 방지)
  3. HTTPS 사용: 프로덕션 환경에서는 반드시 HTTPS 사용
  4. 토큰 만료: 적절한 만료 시간 설정

관련 문서

`,26)]))}const g=a(n,[["render",h]]);export{d as __pageData,g as default}; diff --git a/assets/core-features_auth_jwt.md.DR9TMJjM.lean.js b/assets/core-features_auth_jwt.md.DR9TMJjM.lean.js new file mode 100644 index 0000000..71c841e --- /dev/null +++ b/assets/core-features_auth_jwt.md.DR9TMJjM.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"JWT 인증","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/jwt.md","filePath":"core-features/auth/jwt.md"}'),n={name:"core-features/auth/jwt.md"};function h(l,s,k,r,p,o){return e(),i("div",null,s[0]||(s[0]=[t("",26)]))}const g=a(n,[["render",h]]);export{d as __pageData,g as default}; diff --git a/assets/core-features_auth_session.md.DwRt4W6C.js b/assets/core-features_auth_session.md.DwRt4W6C.js new file mode 100644 index 0000000..a91ced5 --- /dev/null +++ b/assets/core-features_auth_session.md.DwRt4W6C.js @@ -0,0 +1,64 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"세션 관리","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/session.md","filePath":"core-features/auth/session.md"}'),h={name:"core-features/auth/session.md"};function e(l,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

세션 관리

개요

세션 스토어를 통해 사용자 세션 데이터를 관리합니다. 세션 데이터는 localStorage에 저장되어 브라우저를 닫아도 유지됩니다.

세션 데이터 구조

javascript
session: {
+  UserID: 'user123',
+  UserName: '홍길동',
+  ClientCode: '100',
+  CompCode: '1000',
+  encrypt: 'Y',
+  decrypt: 'Y',
+  // 기타 세션 데이터
+}

주요 메서드

setSessionData(data)

전체 세션 데이터를 설정합니다.

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
+
+const sessionStore = useSessionStore()
+
+sessionStore.setSessionData({
+  UserID: 'user123',
+  UserName: '홍길동',
+})

setSessionKey(key, value)

특정 키의 값을 설정합니다.

javascript
sessionStore.setSessionKey('UserID', 'user123')
+sessionStore.setSessionKey('encrypt', 'Y')

getSessionValue(key)

특정 키의 값을 가져옵니다.

javascript
const userId = sessionStore.getSessionValue('UserID')
+const isEncrypt = sessionStore.getSessionValue('encrypt')

getSessionValues(keys)

여러 키의 값을 한 번에 가져옵니다.

javascript
const values = sessionStore.getSessionValues(['UserID', 'UserName'])
+// { UserID: 'user123', UserName: '홍길동' }

removeSessionKey(key)

특정 키를 제거합니다.

javascript
sessionStore.removeSessionKey('encrypt')

clearSessionData()

전체 세션 데이터를 초기화합니다.

javascript
sessionStore.clearSessionData()

로그인 시 세션 설정

javascript
const login = async (userId, password) => {
+  const response = await axiosInstance.post('/api/login', {
+    userId,
+    password,
+  })
+  
+  if (response.status === 'S') {
+    // 세션 데이터 설정
+    sessionStore.setSessionData(response.data.sessionData)
+    
+    // Access Token 설정
+    authStore.setAccessToken(response.data.accessToken)
+  }
+}

로그아웃 시 세션 초기화

javascript
const logout = () => {
+  // 세션 초기화
+  sessionStore.clearSessionData()
+  
+  // 토큰 초기화
+  authStore.clearAccessToken()
+  
+  // 로그인 페이지로 이동
+  router.push({ name: 'Login' })
+}

세션 데이터 사용

vue
<script setup>
+import { useSessionStore } from '@/utils/stores/sessionStore.js'
+import { computed } from 'vue'
+
+const sessionStore = useSessionStore()
+
+// 세션 값 가져오기
+const userId = computed(() => sessionStore.getSessionValue('UserID'))
+const userName = computed(() => sessionStore.getSessionValue('UserName'))
+
+// 암호화 설정 확인
+const isEncrypt = computed(() => sessionStore.getSessionValue('encrypt') === 'Y')
+</script>
+
+<template>
+  <div>
+    <p>사용자: {{ userName }}</p>
+    <p>암호화: {{ isEncrypt ? '활성화' : '비활성화' }}</p>
+  </div>
+</template>

세션 영속화

세션 데이터는 pinia-plugin-persistedstate를 통해 localStorage에 자동으로 저장됩니다:

javascript
persist: {
+  key: 'session',
+  storage: localStorage,
+  paths: ['session'],
+}

주의사항

  1. 민감한 정보: 비밀번호나 토큰 같은 민감한 정보는 세션에 저장하지 마세요.
  2. 데이터 크기: localStorage는 용량 제한이 있으므로 큰 데이터는 저장하지 마세요.
  3. 보안: 프로덕션 환경에서는 중요한 데이터를 암호화하여 저장하세요.

관련 문서

`,37)]))}const o=i(h,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_auth_session.md.DwRt4W6C.lean.js b/assets/core-features_auth_session.md.DwRt4W6C.lean.js new file mode 100644 index 0000000..c41635b --- /dev/null +++ b/assets/core-features_auth_session.md.DwRt4W6C.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"세션 관리","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/session.md","filePath":"core-features/auth/session.md"}'),h={name:"core-features/auth/session.md"};function e(l,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",37)]))}const o=i(h,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_auth_session.md.ouzHpLP8.js b/assets/core-features_auth_session.md.ouzHpLP8.js deleted file mode 100644 index b7dd060..0000000 --- a/assets/core-features_auth_session.md.ouzHpLP8.js +++ /dev/null @@ -1,64 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"세션 관리","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/session.md","filePath":"core-features/auth/session.md"}'),h={name:"core-features/auth/session.md"};function e(l,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

세션 관리

개요

세션 스토어를 통해 사용자 세션 데이터를 관리합니다. 세션 데이터는 localStorage에 저장되어 브라우저를 닫아도 유지됩니다.

세션 데이터 구조

javascript
session: {
-  UserID: 'user123',
-  UserName: '홍길동',
-  ClientCode: '100',
-  CompCode: '1000',
-  encrypt: 'Y',
-  decrypt: 'Y',
-  // 기타 세션 데이터
-}

주요 메서드

setSessionData(data)

전체 세션 데이터를 설정합니다.

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
-
-const sessionStore = useSessionStore()
-
-sessionStore.setSessionData({
-  UserID: 'user123',
-  UserName: '홍길동',
-})

setSessionKey(key, value)

특정 키의 값을 설정합니다.

javascript
sessionStore.setSessionKey('UserID', 'user123')
-sessionStore.setSessionKey('encrypt', 'Y')

getSessionValue(key)

특정 키의 값을 가져옵니다.

javascript
const userId = sessionStore.getSessionValue('UserID')
-const isEncrypt = sessionStore.getSessionValue('encrypt')

getSessionValues(keys)

여러 키의 값을 한 번에 가져옵니다.

javascript
const values = sessionStore.getSessionValues(['UserID', 'UserName'])
-// { UserID: 'user123', UserName: '홍길동' }

removeSessionKey(key)

특정 키를 제거합니다.

javascript
sessionStore.removeSessionKey('encrypt')

clearSessionData()

전체 세션 데이터를 초기화합니다.

javascript
sessionStore.clearSessionData()

로그인 시 세션 설정

javascript
const login = async (userId, password) => {
-  const response = await axiosInstance.post('/api/login', {
-    userId,
-    password,
-  })
-  
-  if (response.status === 'S') {
-    // 세션 데이터 설정
-    sessionStore.setSessionData(response.data.sessionData)
-    
-    // Access Token 설정
-    authStore.setAccessToken(response.data.accessToken)
-  }
-}

로그아웃 시 세션 초기화

javascript
const logout = () => {
-  // 세션 초기화
-  sessionStore.clearSessionData()
-  
-  // 토큰 초기화
-  authStore.clearAccessToken()
-  
-  // 로그인 페이지로 이동
-  router.push({ name: 'Login' })
-}

세션 데이터 사용

vue
<script setup>
-import { useSessionStore } from '@/utils/stores/sessionStore.js'
-import { computed } from 'vue'
-
-const sessionStore = useSessionStore()
-
-// 세션 값 가져오기
-const userId = computed(() => sessionStore.getSessionValue('UserID'))
-const userName = computed(() => sessionStore.getSessionValue('UserName'))
-
-// 암호화 설정 확인
-const isEncrypt = computed(() => sessionStore.getSessionValue('encrypt') === 'Y')
-</script>
-
-<template>
-  <div>
-    <p>사용자: {{ userName }}</p>
-    <p>암호화: {{ isEncrypt ? '활성화' : '비활성화' }}</p>
-  </div>
-</template>

세션 영속화

세션 데이터는 pinia-plugin-persistedstate를 통해 localStorage에 자동으로 저장됩니다:

javascript
persist: {
-  key: 'session',
-  storage: localStorage,
-  paths: ['session'],
-}

주의사항

  1. 민감한 정보: 비밀번호나 토큰 같은 민감한 정보는 세션에 저장하지 마세요.
  2. 데이터 크기: localStorage는 용량 제한이 있으므로 큰 데이터는 저장하지 마세요.
  3. 보안: 프로덕션 환경에서는 중요한 데이터를 암호화하여 저장하세요.

관련 문서

`,37)]))}const o=i(h,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_auth_session.md.ouzHpLP8.lean.js b/assets/core-features_auth_session.md.ouzHpLP8.lean.js deleted file mode 100644 index 1a9d507..0000000 --- a/assets/core-features_auth_session.md.ouzHpLP8.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"세션 관리","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/session.md","filePath":"core-features/auth/session.md"}'),h={name:"core-features/auth/session.md"};function e(l,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",37)]))}const o=i(h,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_auth_token-refresh.md.C2NqE5yN.js b/assets/core-features_auth_token-refresh.md.C2NqE5yN.js deleted file mode 100644 index 032a885..0000000 --- a/assets/core-features_auth_token-refresh.md.C2NqE5yN.js +++ /dev/null @@ -1,31 +0,0 @@ -import{_ as i,c as a,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"토큰 갱신","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/token-refresh.md","filePath":"core-features/auth/token-refresh.md"}'),h={name:"core-features/auth/token-refresh.md"};function t(l,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[e(`

토큰 갱신

개요

Access Token이 만료되면 자동으로 Refresh Token을 사용하여 새로운 Access Token을 발급받습니다.

자동 갱신 메커니즘

CustomAxios.js의 응답 인터셉터에서 401/419 에러 발생 시 자동으로 토큰 갱신을 시도합니다.

갱신 프로세스

1. 401/419 에러 감지

javascript
if (
-  error.response &&
-  [401, 419].includes(error.response.status) &&
-  !originalRequest._retry
-) {
-  // 토큰 갱신 시작
-}

2. Refresh Token으로 새 토큰 요청

javascript
const res = await axios.post('/api/auth/getAccessToken', {}, {
-  withCredentials: true, // Refresh Token 쿠키 전송
-})
-
-const newAccessToken = res.data?.accessToken
-authStore.setAccessToken(newAccessToken)

3. 원래 요청 재시도

javascript
originalRequest.headers['Authorization'] = \`Bearer \${newAccessToken}\`
-return axiosInstance(originalRequest)

동시 요청 처리

여러 요청이 동시에 401 에러를 받는 경우, 첫 번째 요청만 갱신을 시도하고 나머지는 대기합니다.

javascript
if (isRefreshing) {
-  // 이미 갱신 중이면 대기
-  return new Promise((resolve) => {
-    subscribeTokenRefresh((newToken) => {
-      originalRequest.headers['Authorization'] = \`Bearer \${newToken}\`
-      resolve(axiosInstance(originalRequest))
-    })
-  })
-}

갱신 실패 처리

Refresh Token도 만료된 경우 로그인 페이지로 리다이렉트합니다.

javascript
catch (refreshError) {
-  authStore.clearAccessToken()
-  alert('세션이 만료되었습니다. 다시 로그인 해주세요.')
-  await router.replace({ name: 'Login' })
-}

수동 갱신

일반적으로 수동으로 토큰을 갱신할 필요는 없습니다. 하지만 필요한 경우:

javascript
const response = await axios.post('/api/auth/getAccessToken', {}, {
-  withCredentials: true,
-})
-
-if (response.data?.accessToken) {
-  authStore.setAccessToken(response.data.accessToken)
-}

주의사항

  1. 갱신 중 요청: 갱신이 진행 중일 때는 새로운 갱신 요청을 하지 않습니다.
  2. 재시도 횟수: 무한 재시도를 방지하기 위해 재시도 횟수를 제한합니다.
  3. 에러 처리: 갱신 실패 시 적절한 에러 메시지를 표시합니다.

관련 문서

`,25)]))}const c=i(h,[["render",t]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_auth_token-refresh.md.C2NqE5yN.lean.js b/assets/core-features_auth_token-refresh.md.C2NqE5yN.lean.js deleted file mode 100644 index c72bb35..0000000 --- a/assets/core-features_auth_token-refresh.md.C2NqE5yN.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"토큰 갱신","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/token-refresh.md","filePath":"core-features/auth/token-refresh.md"}'),h={name:"core-features/auth/token-refresh.md"};function t(l,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[e("",25)]))}const c=i(h,[["render",t]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_auth_token-refresh.md.coajgGHN.js b/assets/core-features_auth_token-refresh.md.coajgGHN.js new file mode 100644 index 0000000..ce972ed --- /dev/null +++ b/assets/core-features_auth_token-refresh.md.coajgGHN.js @@ -0,0 +1,31 @@ +import{_ as i,c as a,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"토큰 갱신","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/token-refresh.md","filePath":"core-features/auth/token-refresh.md"}'),h={name:"core-features/auth/token-refresh.md"};function t(l,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[e(`

토큰 갱신

개요

Access Token이 만료되면 자동으로 Refresh Token을 사용하여 새로운 Access Token을 발급받습니다.

자동 갱신 메커니즘

CustomAxios.js의 응답 인터셉터에서 401/419 에러 발생 시 자동으로 토큰 갱신을 시도합니다.

갱신 프로세스

1. 401/419 에러 감지

javascript
if (
+  error.response &&
+  [401, 419].includes(error.response.status) &&
+  !originalRequest._retry
+) {
+  // 토큰 갱신 시작
+}

2. Refresh Token으로 새 토큰 요청

javascript
const res = await axios.post('/api/auth/getAccessToken', {}, {
+  withCredentials: true, // Refresh Token 쿠키 전송
+})
+
+const newAccessToken = res.data?.accessToken
+authStore.setAccessToken(newAccessToken)

3. 원래 요청 재시도

javascript
originalRequest.headers['Authorization'] = \`Bearer \${newAccessToken}\`
+return axiosInstance(originalRequest)

동시 요청 처리

여러 요청이 동시에 401 에러를 받는 경우, 첫 번째 요청만 갱신을 시도하고 나머지는 대기합니다.

javascript
if (isRefreshing) {
+  // 이미 갱신 중이면 대기
+  return new Promise((resolve) => {
+    subscribeTokenRefresh((newToken) => {
+      originalRequest.headers['Authorization'] = \`Bearer \${newToken}\`
+      resolve(axiosInstance(originalRequest))
+    })
+  })
+}

갱신 실패 처리

Refresh Token도 만료된 경우 로그인 페이지로 리다이렉트합니다.

javascript
catch (refreshError) {
+  authStore.clearAccessToken()
+  alert('세션이 만료되었습니다. 다시 로그인 해주세요.')
+  await router.replace({ name: 'Login' })
+}

수동 갱신

일반적으로 수동으로 토큰을 갱신할 필요는 없습니다. 하지만 필요한 경우:

javascript
const response = await axios.post('/api/auth/getAccessToken', {}, {
+  withCredentials: true,
+})
+
+if (response.data?.accessToken) {
+  authStore.setAccessToken(response.data.accessToken)
+}

주의사항

  1. 갱신 중 요청: 갱신이 진행 중일 때는 새로운 갱신 요청을 하지 않습니다.
  2. 재시도 횟수: 무한 재시도를 방지하기 위해 재시도 횟수를 제한합니다.
  3. 에러 처리: 갱신 실패 시 적절한 에러 메시지를 표시합니다.

관련 문서

`,25)]))}const c=i(h,[["render",t]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_auth_token-refresh.md.coajgGHN.lean.js b/assets/core-features_auth_token-refresh.md.coajgGHN.lean.js new file mode 100644 index 0000000..1d56729 --- /dev/null +++ b/assets/core-features_auth_token-refresh.md.coajgGHN.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"토큰 갱신","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/auth/token-refresh.md","filePath":"core-features/auth/token-refresh.md"}'),h={name:"core-features/auth/token-refresh.md"};function t(l,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[e("",25)]))}const c=i(h,[["render",t]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_http_axios-instance.md.D2GgQPg3.js b/assets/core-features_http_axios-instance.md.D2GgQPg3.js new file mode 100644 index 0000000..2fe75cd --- /dev/null +++ b/assets/core-features_http_axios-instance.md.D2GgQPg3.js @@ -0,0 +1,119 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Axios 인스턴스 설정","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/axios-instance.md","filePath":"core-features/http/axios-instance.md"}'),l={name:"core-features/http/axios-instance.md"};function k(t,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

Axios 인스턴스 설정

개요

CustomAxios.js는 프로젝트에서 사용하는 Axios 인스턴스를 생성하고 설정하는 파일입니다. 요청/응답 인터셉터를 통해 JWT 토큰 관리, 암호화/복호화, 에러 처리 등을 자동으로 처리합니다.

파일 위치

src/CustomAxios.js

기본 설정

javascript
const axiosInstance = axios.create({
+  headers: { 'Content-Type': 'application/json' },
+  timeout: 300000,          // 300초
+  withCredentials: true,     // refreshToken을 쿠키로 전송
+})

주요 설정 항목

  • timeout: 요청 타임아웃 시간 (300초)
  • withCredentials: 쿠키를 포함한 요청 전송 (refreshToken 전송용)

요청 인터셉터

요청이 전송되기 전에 실행되는 인터셉터입니다.

주요 기능

  1. 로딩 표시: loadingStore.showLoading() 호출
  2. JWT 토큰 추가: authStore에서 토큰을 가져와 Authorization 헤더에 추가
  3. 암호화 처리: 세션 설정에 따라 요청 데이터 암호화
  4. 로그 저장: 요청 정보를 logStore에 저장

코드 예제

javascript
axiosInstance.interceptors.request.use(
+  async (config) => {
+    // 로딩 표시
+    const loadingStore = useLoadingStore()
+    loadingStore.showLoading()
+
+    // JWT 토큰 추가
+    const authStore = useAuthStore()
+    const token = authStore.accessToken
+    if (token) {
+      config.headers['Authorization'] = \`Bearer \${token}\`
+    }
+
+    // 암호화 처리 (세션 설정에 따라)
+    const sessionStore = useSessionStore()
+    if (sessionStore.getSessionValue('encrypt') === 'Y') {
+      // 암호화 로직
+    }
+
+    return config
+  },
+  (error) => {
+    useLoadingStore().hideLoading()
+    return Promise.reject(error)
+  },
+)

응답 인터셉터

응답을 받은 후 실행되는 인터셉터입니다.

주요 기능

  1. 로딩 숨김: loadingStore.hideLoading() 호출
  2. 파일 다운로드 처리: content-disposition 헤더 확인
  3. 토큰 갱신: 401/419 에러 시 자동으로 토큰 갱신 시도
  4. 에러 처리: 다양한 에러 상황에 대한 처리

토큰 갱신 로직

javascript
// 401 오류 및 재시도 처리
+if (
+  error.response &&
+  [401, 419].includes(error.response.status) &&
+  !originalRequest._retry &&
+  !originalRequest.url.includes('/auth/getAccessToken')
+) {
+  originalRequest._retry = true
+
+  if (isRefreshing) {
+    // 이미 갱신 중이면 대기
+    return new Promise((resolve) => {
+      subscribeTokenRefresh((newToken) => {
+        originalRequest.headers['Authorization'] = \`Bearer \${newToken}\`
+        resolve(axiosInstance(originalRequest))
+      })
+    })
+  }
+
+  isRefreshing = true
+
+  try {
+    // 토큰 갱신 요청
+    const res = await axios.post('/api/auth/getAccessToken', {}, {
+      withCredentials: true,
+    })
+
+    const newAccessToken = res.data?.accessToken
+    if (!newAccessToken) throw new Error('accessToken 없음')
+
+    authStore.setAccessToken(newAccessToken)
+    onRefreshed(newAccessToken)
+    isRefreshing = false
+
+    // 원래 요청 재시도
+    originalRequest.headers['Authorization'] = \`Bearer \${newAccessToken}\`
+    return axiosInstance(originalRequest)
+  } catch (refreshError) {
+    // 갱신 실패 시 로그인 페이지로 리다이렉트
+    resetSubscribers()
+    isRefreshing = false
+    authStore.clearAccessToken()
+    alert('세션이 만료되었습니다. 다시 로그인 해주세요.')
+    await router.replace({ name: 'Login' })
+    return Promise.reject(refreshError)
+  }
+}

사용 방법

기본 사용

javascript
import axiosInstance from '@/CustomAxios.js'
+
+// GET 요청
+const response = await axiosInstance.get('/api/users')
+
+// POST 요청
+const response = await axiosInstance.post('/api/users', {
+  name: '홍길동',
+  email: 'hong@example.com',
+})

응답 처리

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+  
+  // 성공 응답 처리
+  if (response.status === 'S') {
+    console.log('성공:', response.data)
+  } else {
+    console.error('실패:', response.message)
+  }
+} catch (error) {
+  console.error('에러 발생:', error)
+}

파일 업로드

javascript
const formData = new FormData()
+formData.append('file', file)
+formData.append('param', JSON.stringify({ name: 'test' }))
+
+const response = await axiosInstance.post('/api/upload', formData, {
+  headers: {
+    'Content-Type': 'multipart/form-data',
+  },
+})

파일 다운로드

javascript
const response = await axiosInstance.post('/api/download', params, {
+  responseType: 'blob',
+})
+
+// response.data.fileName에 파일명이 포함됨
+const url = window.URL.createObjectURL(new Blob([response.data]))
+const link = document.createElement('a')
+link.href = url
+link.setAttribute('download', response.data.fileName)
+document.body.appendChild(link)
+link.click()
+link.remove()

암호화/복호화

세션 설정에 따라 요청/응답 데이터가 자동으로 암호화/복호화됩니다.

암호화 설정

javascript
const sessionStore = useSessionStore()
+sessionStore.setSessionKey('encrypt', 'Y')  // 암호화 활성화
+sessionStore.setSessionKey('decrypt', 'Y')  // 복호화 활성화

FormData 암호화

FormData를 사용하는 경우, 파일은 개별적으로 암호화되고 텍스트 필드는 함께 암호화됩니다.

에러 처리

타임아웃 에러

javascript
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
+  alert('서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해주세요.')
+}

429 에러 (Too Many Requests)

429 에러가 발생하면 모든 요청이 취소되고 로그인 페이지로 리다이렉트됩니다.

기타 에러

에러 메시지는 서버에서 전달된 message 또는 error 필드를 사용하며, 없을 경우 기본 메시지가 표시됩니다.

주의사항

  1. 토큰 갱신: 토큰 갱신은 자동으로 처리되므로 직접 처리할 필요가 없습니다.

  2. 로딩 상태: 요청 시 자동으로 로딩이 표시되므로 별도로 로딩을 표시할 필요가 없습니다.

  3. 에러 처리: 대부분의 에러는 인터셉터에서 처리되지만, 특별한 처리가 필요한 경우 catch 블록에서 처리할 수 있습니다.

  4. 암호화: 암호화가 활성화된 경우, 모든 요청 데이터가 자동으로 암호화됩니다.

관련 문서

`,47)]))}const o=i(l,[["render",k]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_http_axios-instance.md.D2GgQPg3.lean.js b/assets/core-features_http_axios-instance.md.D2GgQPg3.lean.js new file mode 100644 index 0000000..4004190 --- /dev/null +++ b/assets/core-features_http_axios-instance.md.D2GgQPg3.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Axios 인스턴스 설정","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/axios-instance.md","filePath":"core-features/http/axios-instance.md"}'),l={name:"core-features/http/axios-instance.md"};function k(t,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",47)]))}const o=i(l,[["render",k]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_http_axios-instance.md.PCEq4sHP.js b/assets/core-features_http_axios-instance.md.PCEq4sHP.js deleted file mode 100644 index 6c5587b..0000000 --- a/assets/core-features_http_axios-instance.md.PCEq4sHP.js +++ /dev/null @@ -1,119 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Axios 인스턴스 설정","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/axios-instance.md","filePath":"core-features/http/axios-instance.md"}'),l={name:"core-features/http/axios-instance.md"};function k(t,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

Axios 인스턴스 설정

개요

CustomAxios.js는 프로젝트에서 사용하는 Axios 인스턴스를 생성하고 설정하는 파일입니다. 요청/응답 인터셉터를 통해 JWT 토큰 관리, 암호화/복호화, 에러 처리 등을 자동으로 처리합니다.

파일 위치

src/CustomAxios.js

기본 설정

javascript
const axiosInstance = axios.create({
-  headers: { 'Content-Type': 'application/json' },
-  timeout: 300000,          // 300초
-  withCredentials: true,     // refreshToken을 쿠키로 전송
-})

주요 설정 항목

  • timeout: 요청 타임아웃 시간 (300초)
  • withCredentials: 쿠키를 포함한 요청 전송 (refreshToken 전송용)

요청 인터셉터

요청이 전송되기 전에 실행되는 인터셉터입니다.

주요 기능

  1. 로딩 표시: loadingStore.showLoading() 호출
  2. JWT 토큰 추가: authStore에서 토큰을 가져와 Authorization 헤더에 추가
  3. 암호화 처리: 세션 설정에 따라 요청 데이터 암호화
  4. 로그 저장: 요청 정보를 logStore에 저장

코드 예제

javascript
axiosInstance.interceptors.request.use(
-  async (config) => {
-    // 로딩 표시
-    const loadingStore = useLoadingStore()
-    loadingStore.showLoading()
-
-    // JWT 토큰 추가
-    const authStore = useAuthStore()
-    const token = authStore.accessToken
-    if (token) {
-      config.headers['Authorization'] = \`Bearer \${token}\`
-    }
-
-    // 암호화 처리 (세션 설정에 따라)
-    const sessionStore = useSessionStore()
-    if (sessionStore.getSessionValue('encrypt') === 'Y') {
-      // 암호화 로직
-    }
-
-    return config
-  },
-  (error) => {
-    useLoadingStore().hideLoading()
-    return Promise.reject(error)
-  },
-)

응답 인터셉터

응답을 받은 후 실행되는 인터셉터입니다.

주요 기능

  1. 로딩 숨김: loadingStore.hideLoading() 호출
  2. 파일 다운로드 처리: content-disposition 헤더 확인
  3. 토큰 갱신: 401/419 에러 시 자동으로 토큰 갱신 시도
  4. 에러 처리: 다양한 에러 상황에 대한 처리

토큰 갱신 로직

javascript
// 401 오류 및 재시도 처리
-if (
-  error.response &&
-  [401, 419].includes(error.response.status) &&
-  !originalRequest._retry &&
-  !originalRequest.url.includes('/auth/getAccessToken')
-) {
-  originalRequest._retry = true
-
-  if (isRefreshing) {
-    // 이미 갱신 중이면 대기
-    return new Promise((resolve) => {
-      subscribeTokenRefresh((newToken) => {
-        originalRequest.headers['Authorization'] = \`Bearer \${newToken}\`
-        resolve(axiosInstance(originalRequest))
-      })
-    })
-  }
-
-  isRefreshing = true
-
-  try {
-    // 토큰 갱신 요청
-    const res = await axios.post('/api/auth/getAccessToken', {}, {
-      withCredentials: true,
-    })
-
-    const newAccessToken = res.data?.accessToken
-    if (!newAccessToken) throw new Error('accessToken 없음')
-
-    authStore.setAccessToken(newAccessToken)
-    onRefreshed(newAccessToken)
-    isRefreshing = false
-
-    // 원래 요청 재시도
-    originalRequest.headers['Authorization'] = \`Bearer \${newAccessToken}\`
-    return axiosInstance(originalRequest)
-  } catch (refreshError) {
-    // 갱신 실패 시 로그인 페이지로 리다이렉트
-    resetSubscribers()
-    isRefreshing = false
-    authStore.clearAccessToken()
-    alert('세션이 만료되었습니다. 다시 로그인 해주세요.')
-    await router.replace({ name: 'Login' })
-    return Promise.reject(refreshError)
-  }
-}

사용 방법

기본 사용

javascript
import axiosInstance from '@/CustomAxios.js'
-
-// GET 요청
-const response = await axiosInstance.get('/api/users')
-
-// POST 요청
-const response = await axiosInstance.post('/api/users', {
-  name: '홍길동',
-  email: 'hong@example.com',
-})

응답 처리

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-  
-  // 성공 응답 처리
-  if (response.status === 'S') {
-    console.log('성공:', response.data)
-  } else {
-    console.error('실패:', response.message)
-  }
-} catch (error) {
-  console.error('에러 발생:', error)
-}

파일 업로드

javascript
const formData = new FormData()
-formData.append('file', file)
-formData.append('param', JSON.stringify({ name: 'test' }))
-
-const response = await axiosInstance.post('/api/upload', formData, {
-  headers: {
-    'Content-Type': 'multipart/form-data',
-  },
-})

파일 다운로드

javascript
const response = await axiosInstance.post('/api/download', params, {
-  responseType: 'blob',
-})
-
-// response.data.fileName에 파일명이 포함됨
-const url = window.URL.createObjectURL(new Blob([response.data]))
-const link = document.createElement('a')
-link.href = url
-link.setAttribute('download', response.data.fileName)
-document.body.appendChild(link)
-link.click()
-link.remove()

암호화/복호화

세션 설정에 따라 요청/응답 데이터가 자동으로 암호화/복호화됩니다.

암호화 설정

javascript
const sessionStore = useSessionStore()
-sessionStore.setSessionKey('encrypt', 'Y')  // 암호화 활성화
-sessionStore.setSessionKey('decrypt', 'Y')  // 복호화 활성화

FormData 암호화

FormData를 사용하는 경우, 파일은 개별적으로 암호화되고 텍스트 필드는 함께 암호화됩니다.

에러 처리

타임아웃 에러

javascript
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
-  alert('서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해주세요.')
-}

429 에러 (Too Many Requests)

429 에러가 발생하면 모든 요청이 취소되고 로그인 페이지로 리다이렉트됩니다.

기타 에러

에러 메시지는 서버에서 전달된 message 또는 error 필드를 사용하며, 없을 경우 기본 메시지가 표시됩니다.

주의사항

  1. 토큰 갱신: 토큰 갱신은 자동으로 처리되므로 직접 처리할 필요가 없습니다.

  2. 로딩 상태: 요청 시 자동으로 로딩이 표시되므로 별도로 로딩을 표시할 필요가 없습니다.

  3. 에러 처리: 대부분의 에러는 인터셉터에서 처리되지만, 특별한 처리가 필요한 경우 catch 블록에서 처리할 수 있습니다.

  4. 암호화: 암호화가 활성화된 경우, 모든 요청 데이터가 자동으로 암호화됩니다.

관련 문서

`,47)]))}const o=i(l,[["render",k]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_http_axios-instance.md.PCEq4sHP.lean.js b/assets/core-features_http_axios-instance.md.PCEq4sHP.lean.js deleted file mode 100644 index 5c078c6..0000000 --- a/assets/core-features_http_axios-instance.md.PCEq4sHP.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Axios 인스턴스 설정","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/axios-instance.md","filePath":"core-features/http/axios-instance.md"}'),l={name:"core-features/http/axios-instance.md"};function k(t,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",47)]))}const o=i(l,[["render",k]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_http_error-handling.md.BvG1RHGz.js b/assets/core-features_http_error-handling.md.BvG1RHGz.js deleted file mode 100644 index c28c0a6..0000000 --- a/assets/core-features_http_error-handling.md.BvG1RHGz.js +++ /dev/null @@ -1,77 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"에러 처리","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/error-handling.md","filePath":"core-features/http/error-handling.md"}'),l={name:"core-features/http/error-handling.md"};function t(p,s,k,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

에러 처리

개요

CustomAxios.js의 응답 인터셉터에서 다양한 에러 상황을 처리합니다.

에러 타입별 처리

1. 401/419 에러 (인증 실패)

처리 방법:

  • 자동으로 토큰 갱신 시도
  • 갱신 실패 시 로그인 페이지로 리다이렉트

코드:

javascript
if (
-  error.response &&
-  [401, 419].includes(error.response.status) &&
-  !originalRequest._retry
-) {
-  // 토큰 갱신 로직
-}

2. 429 에러 (Too Many Requests)

처리 방법:

  • 모든 진행 중인 요청 취소
  • 알림 표시
  • 로그인 페이지로 리다이렉트

코드:

javascript
if (errStatus === 429) {
-  abortController.abort()
-  alert(error.response?.data?.error || '')
-  await router.replace({ name: 'Login' })
-}

3. 타임아웃 에러

처리 방법:

  • 사용자에게 알림 표시
  • 에러 반환

코드:

javascript
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
-  alert('서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해주세요.')
-  return Promise.reject(error)
-}

4. 404 에러 (Silent 처리)

처리 방법:

  • silentError 옵션이 있으면 alert 표시 안 함
  • 에러 반환

코드:

javascript
if (originalRequest.silentError) {
-  console.warn('Silent 404 error handled for:', originalRequest.url)
-  return Promise.reject(error)
-}

사용 예제:

javascript
const response = await axiosInstance.get('/api/endpoint', {
-  silentError: true, // 404 에러 시 alert 표시 안 함
-})

5. 기타 에러

처리 방법:

  • 서버에서 전달된 메시지 표시
  • 메시지가 없으면 기본 메시지 표시

코드:

javascript
const message = error.response?.data?.message || 
-                error.response?.data?.error || 
-                '서버 오류가 발생했습니다.'
-alert(message)
-return Promise.reject(error)

에러 로그 기록

모든 에러는 로그 스토어에 기록됩니다:

javascript
useLogStore().logList.forEach((log) => {
-  if (log.timeStamp == originalRequest.meta.timeStamp) {
-    log.error = 'Y'
-  }
-})

커스텀 에러 처리

컴포넌트에서 추가적인 에러 처리가 필요한 경우:

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-  // 성공 처리
-} catch (error) {
-  // 커스텀 에러 처리
-  if (error.response?.status === 400) {
-    // 400 에러 특별 처리
-    console.error('잘못된 요청:', error.response.data)
-  } else if (error.response?.status === 500) {
-    // 500 에러 특별 처리
-    console.error('서버 오류:', error.response.data)
-  } else {
-    // 기타 에러
-    console.error('에러 발생:', error)
-  }
-}

에러 메시지 표시

Alert 사용

기본적으로 alert()를 사용하여 에러 메시지를 표시합니다.

커스텀 알림 사용

Vuetify의 Snackbar 등을 사용하려면:

javascript
import { useSnackbar } from '@/utils/stores/snackbarStore.js'
-
-const snackbarStore = useSnackbar()
-
-try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  snackbarStore.show({
-    text: error.response?.data?.message || '에러가 발생했습니다.',
-    color: 'error',
-  })
-}

재시도 로직

일시적인 네트워크 오류의 경우 재시도할 수 있습니다:

javascript
const retryRequest = async (requestFn, maxRetries = 3) => {
-  for (let i = 0; i < maxRetries; i++) {
-    try {
-      return await requestFn()
-    } catch (error) {
-      if (i === maxRetries - 1) throw error
-      await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)))
-    }
-  }
-}
-
-// 사용
-const response = await retryRequest(() => 
-  axiosInstance.post('/api/endpoint', params)
-)

에러 타입 확인

javascript
catch (error) {
-  if (axios.isAxiosError(error)) {
-    // Axios 에러
-    console.error('Axios 에러:', error.message)
-    console.error('상태 코드:', error.response?.status)
-    console.error('응답 데이터:', error.response?.data)
-  } else {
-    // 기타 에러
-    console.error('에러:', error)
-  }
-}

베스트 프랙티스

  1. 에러 메시지: 사용자에게 명확한 에러 메시지를 표시하세요.
  2. 로깅: 중요한 에러는 로그에 기록하세요.
  3. 재시도: 일시적인 오류는 재시도 로직을 구현하세요.
  4. 에러 타입: 에러 타입에 따라 적절한 처리를 하세요.

관련 문서

`,52)]))}const o=i(l,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_http_error-handling.md.BvG1RHGz.lean.js b/assets/core-features_http_error-handling.md.BvG1RHGz.lean.js deleted file mode 100644 index c56f304..0000000 --- a/assets/core-features_http_error-handling.md.BvG1RHGz.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"에러 처리","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/error-handling.md","filePath":"core-features/http/error-handling.md"}'),l={name:"core-features/http/error-handling.md"};function t(p,s,k,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",52)]))}const o=i(l,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_http_error-handling.md.C1FrHVpc.js b/assets/core-features_http_error-handling.md.C1FrHVpc.js new file mode 100644 index 0000000..3d02030 --- /dev/null +++ b/assets/core-features_http_error-handling.md.C1FrHVpc.js @@ -0,0 +1,77 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"에러 처리","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/error-handling.md","filePath":"core-features/http/error-handling.md"}'),l={name:"core-features/http/error-handling.md"};function t(p,s,k,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

에러 처리

개요

CustomAxios.js의 응답 인터셉터에서 다양한 에러 상황을 처리합니다.

에러 타입별 처리

1. 401/419 에러 (인증 실패)

처리 방법:

  • 자동으로 토큰 갱신 시도
  • 갱신 실패 시 로그인 페이지로 리다이렉트

코드:

javascript
if (
+  error.response &&
+  [401, 419].includes(error.response.status) &&
+  !originalRequest._retry
+) {
+  // 토큰 갱신 로직
+}

2. 429 에러 (Too Many Requests)

처리 방법:

  • 모든 진행 중인 요청 취소
  • 알림 표시
  • 로그인 페이지로 리다이렉트

코드:

javascript
if (errStatus === 429) {
+  abortController.abort()
+  alert(error.response?.data?.error || '')
+  await router.replace({ name: 'Login' })
+}

3. 타임아웃 에러

처리 방법:

  • 사용자에게 알림 표시
  • 에러 반환

코드:

javascript
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
+  alert('서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해주세요.')
+  return Promise.reject(error)
+}

4. 404 에러 (Silent 처리)

처리 방법:

  • silentError 옵션이 있으면 alert 표시 안 함
  • 에러 반환

코드:

javascript
if (originalRequest.silentError) {
+  console.warn('Silent 404 error handled for:', originalRequest.url)
+  return Promise.reject(error)
+}

사용 예제:

javascript
const response = await axiosInstance.get('/api/endpoint', {
+  silentError: true, // 404 에러 시 alert 표시 안 함
+})

5. 기타 에러

처리 방법:

  • 서버에서 전달된 메시지 표시
  • 메시지가 없으면 기본 메시지 표시

코드:

javascript
const message = error.response?.data?.message || 
+                error.response?.data?.error || 
+                '서버 오류가 발생했습니다.'
+alert(message)
+return Promise.reject(error)

에러 로그 기록

모든 에러는 로그 스토어에 기록됩니다:

javascript
useLogStore().logList.forEach((log) => {
+  if (log.timeStamp == originalRequest.meta.timeStamp) {
+    log.error = 'Y'
+  }
+})

커스텀 에러 처리

컴포넌트에서 추가적인 에러 처리가 필요한 경우:

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+  // 성공 처리
+} catch (error) {
+  // 커스텀 에러 처리
+  if (error.response?.status === 400) {
+    // 400 에러 특별 처리
+    console.error('잘못된 요청:', error.response.data)
+  } else if (error.response?.status === 500) {
+    // 500 에러 특별 처리
+    console.error('서버 오류:', error.response.data)
+  } else {
+    // 기타 에러
+    console.error('에러 발생:', error)
+  }
+}

에러 메시지 표시

Alert 사용

기본적으로 alert()를 사용하여 에러 메시지를 표시합니다.

커스텀 알림 사용

Vuetify의 Snackbar 등을 사용하려면:

javascript
import { useSnackbar } from '@/utils/stores/snackbarStore.js'
+
+const snackbarStore = useSnackbar()
+
+try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  snackbarStore.show({
+    text: error.response?.data?.message || '에러가 발생했습니다.',
+    color: 'error',
+  })
+}

재시도 로직

일시적인 네트워크 오류의 경우 재시도할 수 있습니다:

javascript
const retryRequest = async (requestFn, maxRetries = 3) => {
+  for (let i = 0; i < maxRetries; i++) {
+    try {
+      return await requestFn()
+    } catch (error) {
+      if (i === maxRetries - 1) throw error
+      await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)))
+    }
+  }
+}
+
+// 사용
+const response = await retryRequest(() => 
+  axiosInstance.post('/api/endpoint', params)
+)

에러 타입 확인

javascript
catch (error) {
+  if (axios.isAxiosError(error)) {
+    // Axios 에러
+    console.error('Axios 에러:', error.message)
+    console.error('상태 코드:', error.response?.status)
+    console.error('응답 데이터:', error.response?.data)
+  } else {
+    // 기타 에러
+    console.error('에러:', error)
+  }
+}

베스트 프랙티스

  1. 에러 메시지: 사용자에게 명확한 에러 메시지를 표시하세요.
  2. 로깅: 중요한 에러는 로그에 기록하세요.
  3. 재시도: 일시적인 오류는 재시도 로직을 구현하세요.
  4. 에러 타입: 에러 타입에 따라 적절한 처리를 하세요.

관련 문서

`,52)]))}const o=i(l,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_http_error-handling.md.C1FrHVpc.lean.js b/assets/core-features_http_error-handling.md.C1FrHVpc.lean.js new file mode 100644 index 0000000..ac9eb18 --- /dev/null +++ b/assets/core-features_http_error-handling.md.C1FrHVpc.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"에러 처리","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/error-handling.md","filePath":"core-features/http/error-handling.md"}'),l={name:"core-features/http/error-handling.md"};function t(p,s,k,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",52)]))}const o=i(l,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_http_request-interceptor.md.Brkz2pTh.js b/assets/core-features_http_request-interceptor.md.Brkz2pTh.js new file mode 100644 index 0000000..7b41d20 --- /dev/null +++ b/assets/core-features_http_request-interceptor.md.Brkz2pTh.js @@ -0,0 +1,54 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"요청 인터셉터","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/request-interceptor.md","filePath":"core-features/http/request-interceptor.md"}'),t={name:"core-features/http/request-interceptor.md"};function l(k,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

요청 인터셉터

개요

CustomAxios.js의 요청 인터셉터는 모든 API 요청이 전송되기 전에 실행됩니다.

주요 기능

1. 로딩 표시

javascript
const loadingStore = useLoadingStore()
+loadingStore.showLoading()

2. JWT 토큰 추가

javascript
const authStore = useAuthStore()
+const token = authStore.accessToken
+if (token) {
+  config.headers['Authorization'] = \`Bearer \${token}\`
+}

3. 암호화 헤더 추가

javascript
const sessionStore = useSessionStore()
+config.headers['Decrypt'] = sessionStore.getSessionValue('decrypt')

4. 요청 로그 저장

javascript
const logStore = useLogStore()
+const menuStore = useMenuStore()
+logStore.addLogData(config, menuStore.nowMenu)

5. 데이터 암호화

javascript
if (sessionStore.getSessionValue('encrypt') === 'Y') {
+  if (config.data instanceof FormData) {
+    // FormData 처리
+  } else {
+    // 일반 객체 처리
+    config.data = encryptObject(config.data)
+  }
+}

FormData 처리

파일이 포함된 FormData의 경우:

  1. 텍스트 필드와 파일을 분리
  2. 텍스트 필드는 함께 암호화
  3. 파일은 개별적으로 암호화
javascript
if (config.data instanceof FormData) {
+  const textFields = {}
+  const files = []
+  
+  // 필드 분리
+  for (const [key, value] of config.data.entries()) {
+    if (value instanceof File || value instanceof Blob) {
+      files.push({ key, file: value })
+    } else {
+      textFields[key] = value
+    }
+  }
+  
+  // 텍스트 필드 암호화
+  const encryptedData = encryptObject(textFields)
+  
+  // 파일 개별 암호화
+  await Promise.all(
+    files.map(async ({ key, file }) => {
+      const arr = await file.arrayBuffer()
+      const bytes = new Uint8Array(arr)
+      const encryptedData = encryptBinary(bytes, file)
+      // ...
+    })
+  )
+}

타임스탬프 추가

요청 추적을 위해 타임스탬프를 추가합니다:

javascript
config.meta = config.meta || {}
+config.meta.timeStamp = new Date().getTime()

원본 데이터 저장

암호화 전 원본 데이터를 저장하여 재시도 시 사용:

javascript
if (!config.meta.rawData) {
+  config.meta.rawData = config.data
+}

에러 처리

요청 인터셉터에서 에러가 발생하면 로딩을 숨기고 에러를 반환합니다:

javascript
(error) => {
+  useLoadingStore().hideLoading()
+  return Promise.reject(error)
+}

사용 예제

일반적으로 요청 인터셉터는 자동으로 작동하므로 별도의 설정이 필요 없습니다. 하지만 특별한 처리가 필요한 경우:

javascript
// 요청 전 처리
+axiosInstance.interceptors.request.use(
+  (config) => {
+    // 커스텀 처리
+    config.headers['Custom-Header'] = 'value'
+    return config
+  }
+)

관련 문서

`,32)]))}const c=i(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/core-features_http_request-interceptor.md.Brkz2pTh.lean.js b/assets/core-features_http_request-interceptor.md.Brkz2pTh.lean.js new file mode 100644 index 0000000..20f9305 --- /dev/null +++ b/assets/core-features_http_request-interceptor.md.Brkz2pTh.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"요청 인터셉터","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/request-interceptor.md","filePath":"core-features/http/request-interceptor.md"}'),t={name:"core-features/http/request-interceptor.md"};function l(k,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",32)]))}const c=i(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/core-features_http_request-interceptor.md.CFAUTEpr.js b/assets/core-features_http_request-interceptor.md.CFAUTEpr.js deleted file mode 100644 index 93bf5ee..0000000 --- a/assets/core-features_http_request-interceptor.md.CFAUTEpr.js +++ /dev/null @@ -1,54 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"요청 인터셉터","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/request-interceptor.md","filePath":"core-features/http/request-interceptor.md"}'),t={name:"core-features/http/request-interceptor.md"};function l(k,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

요청 인터셉터

개요

CustomAxios.js의 요청 인터셉터는 모든 API 요청이 전송되기 전에 실행됩니다.

주요 기능

1. 로딩 표시

javascript
const loadingStore = useLoadingStore()
-loadingStore.showLoading()

2. JWT 토큰 추가

javascript
const authStore = useAuthStore()
-const token = authStore.accessToken
-if (token) {
-  config.headers['Authorization'] = \`Bearer \${token}\`
-}

3. 암호화 헤더 추가

javascript
const sessionStore = useSessionStore()
-config.headers['Decrypt'] = sessionStore.getSessionValue('decrypt')

4. 요청 로그 저장

javascript
const logStore = useLogStore()
-const menuStore = useMenuStore()
-logStore.addLogData(config, menuStore.nowMenu)

5. 데이터 암호화

javascript
if (sessionStore.getSessionValue('encrypt') === 'Y') {
-  if (config.data instanceof FormData) {
-    // FormData 처리
-  } else {
-    // 일반 객체 처리
-    config.data = encryptObject(config.data)
-  }
-}

FormData 처리

파일이 포함된 FormData의 경우:

  1. 텍스트 필드와 파일을 분리
  2. 텍스트 필드는 함께 암호화
  3. 파일은 개별적으로 암호화
javascript
if (config.data instanceof FormData) {
-  const textFields = {}
-  const files = []
-  
-  // 필드 분리
-  for (const [key, value] of config.data.entries()) {
-    if (value instanceof File || value instanceof Blob) {
-      files.push({ key, file: value })
-    } else {
-      textFields[key] = value
-    }
-  }
-  
-  // 텍스트 필드 암호화
-  const encryptedData = encryptObject(textFields)
-  
-  // 파일 개별 암호화
-  await Promise.all(
-    files.map(async ({ key, file }) => {
-      const arr = await file.arrayBuffer()
-      const bytes = new Uint8Array(arr)
-      const encryptedData = encryptBinary(bytes, file)
-      // ...
-    })
-  )
-}

타임스탬프 추가

요청 추적을 위해 타임스탬프를 추가합니다:

javascript
config.meta = config.meta || {}
-config.meta.timeStamp = new Date().getTime()

원본 데이터 저장

암호화 전 원본 데이터를 저장하여 재시도 시 사용:

javascript
if (!config.meta.rawData) {
-  config.meta.rawData = config.data
-}

에러 처리

요청 인터셉터에서 에러가 발생하면 로딩을 숨기고 에러를 반환합니다:

javascript
(error) => {
-  useLoadingStore().hideLoading()
-  return Promise.reject(error)
-}

사용 예제

일반적으로 요청 인터셉터는 자동으로 작동하므로 별도의 설정이 필요 없습니다. 하지만 특별한 처리가 필요한 경우:

javascript
// 요청 전 처리
-axiosInstance.interceptors.request.use(
-  (config) => {
-    // 커스텀 처리
-    config.headers['Custom-Header'] = 'value'
-    return config
-  }
-)

관련 문서

`,32)]))}const c=i(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/core-features_http_request-interceptor.md.CFAUTEpr.lean.js b/assets/core-features_http_request-interceptor.md.CFAUTEpr.lean.js deleted file mode 100644 index c7ca3df..0000000 --- a/assets/core-features_http_request-interceptor.md.CFAUTEpr.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"요청 인터셉터","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/request-interceptor.md","filePath":"core-features/http/request-interceptor.md"}'),t={name:"core-features/http/request-interceptor.md"};function l(k,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",32)]))}const c=i(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/core-features_http_response-interceptor.md.B1m0glPM.js b/assets/core-features_http_response-interceptor.md.B1m0glPM.js deleted file mode 100644 index 94a1428..0000000 --- a/assets/core-features_http_response-interceptor.md.B1m0glPM.js +++ /dev/null @@ -1,95 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"응답 인터셉터","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/response-interceptor.md","filePath":"core-features/http/response-interceptor.md"}'),t={name:"core-features/http/response-interceptor.md"};function l(k,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

응답 인터셉터

개요

CustomAxios.js의 응답 인터셉터는 모든 API 응답을 받은 후 실행됩니다.

성공 응답 처리

1. 로딩 숨김

javascript
useLoadingStore().hideLoading()

2. 파일 다운로드 처리

javascript
const disposition = response.headers?.['content-disposition']
-if (disposition) {
-  let fileName = ''
-  const filenameStarMatch = disposition.match(/filename\\*=UTF-8''([^;]+)/)
-  if (filenameStarMatch && filenameStarMatch[1]) {
-    fileName = decodeURIComponent(filenameStarMatch[1])
-  }
-  response.data.fileName = fileName
-}

3. 응답 데이터 반환

javascript
return response.data

에러 응답 처리

1. 로딩 숨김

javascript
useLoadingStore().hideLoading()

2. 로그 에러 표시

javascript
useLogStore().logList.forEach((log) => {
-  if (log.timeStamp == originalRequest.meta.timeStamp) {
-    log.error = 'Y'
-  }
-})

3. 429 에러 처리 (Too Many Requests)

javascript
if (errStatus === 429) {
-  abortController.abort()
-  alert(error.response?.data?.error || '')
-  await router.replace({ name: 'Login' })
-  return new Promise(() => {}) // 에러 전파 중단
-}

4. 401/419 에러 처리 (토큰 갱신)

javascript
if (
-  error.response &&
-  [401, 419].includes(error.response.status) &&
-  !originalRequest._retry
-) {
-  // 토큰 갱신 로직
-  // ...
-}

5. 타임아웃 에러 처리

javascript
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
-  alert('서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해주세요.')
-  return Promise.reject(error)
-}

6. 기타 에러 처리

javascript
const message = error.response?.data?.message || 
-                error.response?.data?.error || 
-                '서버 오류가 발생했습니다.'
-alert(message)
-return Promise.reject(error)

토큰 갱신 로직

동시 요청 처리

javascript
if (isRefreshing) {
-  // 이미 갱신 중이면 대기
-  return new Promise((resolve) => {
-    subscribeTokenRefresh((newToken) => {
-      originalRequest.headers['Authorization'] = \`Bearer \${newToken}\`
-      resolve(axiosInstance(originalRequest))
-    })
-  })
-}

토큰 갱신 요청

javascript
isRefreshing = true
-
-try {
-  const res = await axios.post('/api/auth/getAccessToken', {}, {
-    withCredentials: true,
-  })
-  
-  const newAccessToken = res.data?.accessToken
-  if (!newAccessToken) throw new Error('accessToken 없음')
-  
-  authStore.setAccessToken(newAccessToken)
-  onRefreshed(newAccessToken)
-  isRefreshing = false
-  
-  // 원래 요청 재시도
-  originalRequest.headers['Authorization'] = \`Bearer \${newAccessToken}\`
-  return axiosInstance(originalRequest)
-} catch (refreshError) {
-  // 갱신 실패 처리
-  resetSubscribers()
-  isRefreshing = false
-  authStore.clearAccessToken()
-  alert('세션이 만료되었습니다. 다시 로그인 해주세요.')
-  await router.replace({ name: 'Login' })
-  return Promise.reject(refreshError)
-}

Silent 에러 처리

404 에러를 조용히 처리하려면:

javascript
if (originalRequest.silentError) {
-  console.warn('Silent 404 error handled for:', originalRequest.url)
-  return Promise.reject(error)
-}

사용 예제:

javascript
const response = await axiosInstance.get('/api/endpoint', {
-  silentError: true, // 404 에러 시 alert 표시 안 함
-})

응답 데이터 구조

일반적인 응답 구조:

javascript
{
-  status: 'S',      // S: 성공, F: 실패
-  message: '메시지',
-  data: { /* 데이터 */ },
-}

사용 예제

성공 응답 처리

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-  
-  if (response.status === 'S') {
-    console.log('성공:', response.data)
-  } else {
-    console.error('실패:', response.message)
-  }
-} catch (error) {
-  console.error('에러:', error)
-}

파일 다운로드

javascript
const response = await axiosInstance.post('/api/download', params, {
-  responseType: 'blob',
-})
-
-// response.data.fileName에 파일명이 포함됨
-const url = window.URL.createObjectURL(new Blob([response.data]))
-const link = document.createElement('a')
-link.href = url
-link.setAttribute('download', response.data.fileName)
-document.body.appendChild(link)
-link.click()
-link.remove()

관련 문서

`,43)]))}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/core-features_http_response-interceptor.md.B1m0glPM.lean.js b/assets/core-features_http_response-interceptor.md.B1m0glPM.lean.js deleted file mode 100644 index 1b53de1..0000000 --- a/assets/core-features_http_response-interceptor.md.B1m0glPM.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"응답 인터셉터","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/response-interceptor.md","filePath":"core-features/http/response-interceptor.md"}'),t={name:"core-features/http/response-interceptor.md"};function l(k,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",43)]))}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/core-features_http_response-interceptor.md.Csu6AeAv.js b/assets/core-features_http_response-interceptor.md.Csu6AeAv.js new file mode 100644 index 0000000..055ca83 --- /dev/null +++ b/assets/core-features_http_response-interceptor.md.Csu6AeAv.js @@ -0,0 +1,95 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"응답 인터셉터","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/response-interceptor.md","filePath":"core-features/http/response-interceptor.md"}'),t={name:"core-features/http/response-interceptor.md"};function l(k,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

응답 인터셉터

개요

CustomAxios.js의 응답 인터셉터는 모든 API 응답을 받은 후 실행됩니다.

성공 응답 처리

1. 로딩 숨김

javascript
useLoadingStore().hideLoading()

2. 파일 다운로드 처리

javascript
const disposition = response.headers?.['content-disposition']
+if (disposition) {
+  let fileName = ''
+  const filenameStarMatch = disposition.match(/filename\\*=UTF-8''([^;]+)/)
+  if (filenameStarMatch && filenameStarMatch[1]) {
+    fileName = decodeURIComponent(filenameStarMatch[1])
+  }
+  response.data.fileName = fileName
+}

3. 응답 데이터 반환

javascript
return response.data

에러 응답 처리

1. 로딩 숨김

javascript
useLoadingStore().hideLoading()

2. 로그 에러 표시

javascript
useLogStore().logList.forEach((log) => {
+  if (log.timeStamp == originalRequest.meta.timeStamp) {
+    log.error = 'Y'
+  }
+})

3. 429 에러 처리 (Too Many Requests)

javascript
if (errStatus === 429) {
+  abortController.abort()
+  alert(error.response?.data?.error || '')
+  await router.replace({ name: 'Login' })
+  return new Promise(() => {}) // 에러 전파 중단
+}

4. 401/419 에러 처리 (토큰 갱신)

javascript
if (
+  error.response &&
+  [401, 419].includes(error.response.status) &&
+  !originalRequest._retry
+) {
+  // 토큰 갱신 로직
+  // ...
+}

5. 타임아웃 에러 처리

javascript
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
+  alert('서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해주세요.')
+  return Promise.reject(error)
+}

6. 기타 에러 처리

javascript
const message = error.response?.data?.message || 
+                error.response?.data?.error || 
+                '서버 오류가 발생했습니다.'
+alert(message)
+return Promise.reject(error)

토큰 갱신 로직

동시 요청 처리

javascript
if (isRefreshing) {
+  // 이미 갱신 중이면 대기
+  return new Promise((resolve) => {
+    subscribeTokenRefresh((newToken) => {
+      originalRequest.headers['Authorization'] = \`Bearer \${newToken}\`
+      resolve(axiosInstance(originalRequest))
+    })
+  })
+}

토큰 갱신 요청

javascript
isRefreshing = true
+
+try {
+  const res = await axios.post('/api/auth/getAccessToken', {}, {
+    withCredentials: true,
+  })
+  
+  const newAccessToken = res.data?.accessToken
+  if (!newAccessToken) throw new Error('accessToken 없음')
+  
+  authStore.setAccessToken(newAccessToken)
+  onRefreshed(newAccessToken)
+  isRefreshing = false
+  
+  // 원래 요청 재시도
+  originalRequest.headers['Authorization'] = \`Bearer \${newAccessToken}\`
+  return axiosInstance(originalRequest)
+} catch (refreshError) {
+  // 갱신 실패 처리
+  resetSubscribers()
+  isRefreshing = false
+  authStore.clearAccessToken()
+  alert('세션이 만료되었습니다. 다시 로그인 해주세요.')
+  await router.replace({ name: 'Login' })
+  return Promise.reject(refreshError)
+}

Silent 에러 처리

404 에러를 조용히 처리하려면:

javascript
if (originalRequest.silentError) {
+  console.warn('Silent 404 error handled for:', originalRequest.url)
+  return Promise.reject(error)
+}

사용 예제:

javascript
const response = await axiosInstance.get('/api/endpoint', {
+  silentError: true, // 404 에러 시 alert 표시 안 함
+})

응답 데이터 구조

일반적인 응답 구조:

javascript
{
+  status: 'S',      // S: 성공, F: 실패
+  message: '메시지',
+  data: { /* 데이터 */ },
+}

사용 예제

성공 응답 처리

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+  
+  if (response.status === 'S') {
+    console.log('성공:', response.data)
+  } else {
+    console.error('실패:', response.message)
+  }
+} catch (error) {
+  console.error('에러:', error)
+}

파일 다운로드

javascript
const response = await axiosInstance.post('/api/download', params, {
+  responseType: 'blob',
+})
+
+// response.data.fileName에 파일명이 포함됨
+const url = window.URL.createObjectURL(new Blob([response.data]))
+const link = document.createElement('a')
+link.href = url
+link.setAttribute('download', response.data.fileName)
+document.body.appendChild(link)
+link.click()
+link.remove()

관련 문서

`,43)]))}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/core-features_http_response-interceptor.md.Csu6AeAv.lean.js b/assets/core-features_http_response-interceptor.md.Csu6AeAv.lean.js new file mode 100644 index 0000000..b989a3f --- /dev/null +++ b/assets/core-features_http_response-interceptor.md.Csu6AeAv.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"응답 인터셉터","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/http/response-interceptor.md","filePath":"core-features/http/response-interceptor.md"}'),t={name:"core-features/http/response-interceptor.md"};function l(k,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",43)]))}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/core-features_routing_dynamic.md.CXrme9Ei.js b/assets/core-features_routing_dynamic.md.CXrme9Ei.js deleted file mode 100644 index 68b05d2..0000000 --- a/assets/core-features_routing_dynamic.md.CXrme9Ei.js +++ /dev/null @@ -1,40 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"동적 라우팅","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/dynamic.md","filePath":"core-features/routing/dynamic.md"}'),l={name:"core-features/routing/dynamic.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

동적 라우팅

개요

프로젝트는 메뉴 시스템을 통해 동적으로 라우트를 등록합니다.

동적 라우트 등록

메뉴 데이터 구조

javascript
{
-  MENUID: 'ESS000001',
-  MENUNAME: '직원 목록',
-  URLID: '/ess/persadm/EmployeeList.do',
-  ASSEMBLYFILE: 'EmployeeList.vue',
-  // ...
-}

라우트 변환

메뉴 데이터가 다음과 같이 변환됩니다:

javascript
{
-  id: 'ESS000001',
-  path: 'EmployeeList.vue',
-  name: 'EmployeeList.vue',
-  component: '/ess/persadm/EmployeeList.do'.replace('/ess/', '/src/views/ess/').replace('.do', '.vue'),
-  // ...
-}

동적 컴포넌트 로드

javascript
const modules = import.meta.glob('/src/views/**/**/*.vue')
-
-const loadComponent = async (componentPath) => {
-  const componentModule = await modules[componentPath]()
-  return componentModule.default
-}

메뉴 스토어 연동

메뉴 스토어에서 메뉴 데이터를 가져와 라우트를 생성합니다:

javascript
const menuStore = useMenuStore()
-const menuData = menuStore.getAllMenuData
-
-// 메뉴 데이터를 라우트로 변환
-menuData.menuLevel3.forEach(menu => {
-  router.addRoute({
-    path: menu.URLID,
-    name: menu.MENUID,
-    component: () => import(menu.component),
-  })
-})

사용 예제

동적 라우트 접근

vue
<script setup>
-import { useRouter } from 'vue-router'
-
-const router = useRouter()
-
-const goToMenu = (menu) => {
-  router.push({
-    name: menu.MENUID,
-    // 또는
-    path: menu.URLID,
-  })
-}
-</script>

주의사항

  1. 컴포넌트 경로: 컴포넌트 경로가 올바른지 확인하세요.
  2. 라우트 중복: 동일한 라우트가 중복 등록되지 않도록 주의하세요.
  3. 메뉴 로드: 메뉴 데이터가 로드된 후 라우트를 등록하세요.

관련 문서

`,21)]))}const o=i(l,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_routing_dynamic.md.CXrme9Ei.lean.js b/assets/core-features_routing_dynamic.md.CXrme9Ei.lean.js deleted file mode 100644 index e2ad817..0000000 --- a/assets/core-features_routing_dynamic.md.CXrme9Ei.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"동적 라우팅","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/dynamic.md","filePath":"core-features/routing/dynamic.md"}'),l={name:"core-features/routing/dynamic.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",21)]))}const o=i(l,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_routing_dynamic.md.DnOTBYSX.js b/assets/core-features_routing_dynamic.md.DnOTBYSX.js new file mode 100644 index 0000000..e39b9f8 --- /dev/null +++ b/assets/core-features_routing_dynamic.md.DnOTBYSX.js @@ -0,0 +1,40 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"동적 라우팅","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/dynamic.md","filePath":"core-features/routing/dynamic.md"}'),l={name:"core-features/routing/dynamic.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

동적 라우팅

개요

프로젝트는 메뉴 시스템을 통해 동적으로 라우트를 등록합니다.

동적 라우트 등록

메뉴 데이터 구조

javascript
{
+  MENUID: 'ESS000001',
+  MENUNAME: '직원 목록',
+  URLID: '/ess/persadm/EmployeeList.do',
+  ASSEMBLYFILE: 'EmployeeList.vue',
+  // ...
+}

라우트 변환

메뉴 데이터가 다음과 같이 변환됩니다:

javascript
{
+  id: 'ESS000001',
+  path: 'EmployeeList.vue',
+  name: 'EmployeeList.vue',
+  component: '/ess/persadm/EmployeeList.do'.replace('/ess/', '/src/views/ess/').replace('.do', '.vue'),
+  // ...
+}

동적 컴포넌트 로드

javascript
const modules = import.meta.glob('/src/views/**/**/*.vue')
+
+const loadComponent = async (componentPath) => {
+  const componentModule = await modules[componentPath]()
+  return componentModule.default
+}

메뉴 스토어 연동

메뉴 스토어에서 메뉴 데이터를 가져와 라우트를 생성합니다:

javascript
const menuStore = useMenuStore()
+const menuData = menuStore.getAllMenuData
+
+// 메뉴 데이터를 라우트로 변환
+menuData.menuLevel3.forEach(menu => {
+  router.addRoute({
+    path: menu.URLID,
+    name: menu.MENUID,
+    component: () => import(menu.component),
+  })
+})

사용 예제

동적 라우트 접근

vue
<script setup>
+import { useRouter } from 'vue-router'
+
+const router = useRouter()
+
+const goToMenu = (menu) => {
+  router.push({
+    name: menu.MENUID,
+    // 또는
+    path: menu.URLID,
+  })
+}
+</script>

주의사항

  1. 컴포넌트 경로: 컴포넌트 경로가 올바른지 확인하세요.
  2. 라우트 중복: 동일한 라우트가 중복 등록되지 않도록 주의하세요.
  3. 메뉴 로드: 메뉴 데이터가 로드된 후 라우트를 등록하세요.

관련 문서

`,21)]))}const o=i(l,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_routing_dynamic.md.DnOTBYSX.lean.js b/assets/core-features_routing_dynamic.md.DnOTBYSX.lean.js new file mode 100644 index 0000000..4a4bc1d --- /dev/null +++ b/assets/core-features_routing_dynamic.md.DnOTBYSX.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"동적 라우팅","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/dynamic.md","filePath":"core-features/routing/dynamic.md"}'),l={name:"core-features/routing/dynamic.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",21)]))}const o=i(l,[["render",t]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_routing_guards.md.B6mHRepH.js b/assets/core-features_routing_guards.md.B6mHRepH.js new file mode 100644 index 0000000..f3e4149 --- /dev/null +++ b/assets/core-features_routing_guards.md.B6mHRepH.js @@ -0,0 +1,31 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"라우트 가드","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/guards.md","filePath":"core-features/routing/guards.md"}'),t={name:"core-features/routing/guards.md"};function l(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

라우트 가드

개요

라우트 가드는 라우트 전환 전후에 실행되는 함수입니다.

beforeEach 가드

router.beforeEach는 라우트 전환 전에 실행됩니다.

현재 구현

javascript
router.beforeEach(async (to, from, next) => {
+  // 라우터에 일치하는 경로가 없거나 새로고침 시 경로를 찾지 못했을 때
+  const isRouteNotFound = !router.hasRoute(to.name) || to.matched.length === 0;
+
+  if (isRouteNotFound) {
+    await router.push({ name: 'Main' });
+  }
+
+  // 모든 조건에 해당하지 않으면 정상적으로 다음으로 진행
+  next();
+})

기능

  1. 라우트 존재 확인: 라우트가 존재하지 않으면 메인 페이지로 리다이렉트
  2. 인증 확인: 필요시 인증 상태를 확인할 수 있습니다

인증 가드 예제

javascript
router.beforeEach(async (to, from, next) => {
+  const authStore = useAuthStore()
+  
+  // 인증이 필요한 페이지
+  if (to.meta.requiresAuth && !authStore.isAuthenticated) {
+    next({ name: 'Login' })
+  } else {
+    next()
+  }
+})

afterEach 가드

router.afterEach는 라우트 전환 후에 실행됩니다.

javascript
router.afterEach((to, from) => {
+  // 라우트 전환 후 처리
+  console.log('라우트 전환:', from.path, '→', to.path)
+})

메타 필드

라우트에 메타 정보를 추가할 수 있습니다:

javascript
{
+  path: '/MyPage',
+  name: 'MyPage',
+  component: () => import('@/views/MyPage.vue'),
+  meta: {
+    requiresAuth: true,
+    title: '내 페이지',
+  },
+}

관련 문서

`,19)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_routing_guards.md.B6mHRepH.lean.js b/assets/core-features_routing_guards.md.B6mHRepH.lean.js new file mode 100644 index 0000000..b58e3c0 --- /dev/null +++ b/assets/core-features_routing_guards.md.B6mHRepH.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"라우트 가드","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/guards.md","filePath":"core-features/routing/guards.md"}'),t={name:"core-features/routing/guards.md"};function l(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",19)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_routing_guards.md.ByjLIwUX.js b/assets/core-features_routing_guards.md.ByjLIwUX.js deleted file mode 100644 index 5d8f97f..0000000 --- a/assets/core-features_routing_guards.md.ByjLIwUX.js +++ /dev/null @@ -1,31 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"라우트 가드","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/guards.md","filePath":"core-features/routing/guards.md"}'),t={name:"core-features/routing/guards.md"};function l(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

라우트 가드

개요

라우트 가드는 라우트 전환 전후에 실행되는 함수입니다.

beforeEach 가드

router.beforeEach는 라우트 전환 전에 실행됩니다.

현재 구현

javascript
router.beforeEach(async (to, from, next) => {
-  // 라우터에 일치하는 경로가 없거나 새로고침 시 경로를 찾지 못했을 때
-  const isRouteNotFound = !router.hasRoute(to.name) || to.matched.length === 0;
-
-  if (isRouteNotFound) {
-    await router.push({ name: 'Main' });
-  }
-
-  // 모든 조건에 해당하지 않으면 정상적으로 다음으로 진행
-  next();
-})

기능

  1. 라우트 존재 확인: 라우트가 존재하지 않으면 메인 페이지로 리다이렉트
  2. 인증 확인: 필요시 인증 상태를 확인할 수 있습니다

인증 가드 예제

javascript
router.beforeEach(async (to, from, next) => {
-  const authStore = useAuthStore()
-  
-  // 인증이 필요한 페이지
-  if (to.meta.requiresAuth && !authStore.isAuthenticated) {
-    next({ name: 'Login' })
-  } else {
-    next()
-  }
-})

afterEach 가드

router.afterEach는 라우트 전환 후에 실행됩니다.

javascript
router.afterEach((to, from) => {
-  // 라우트 전환 후 처리
-  console.log('라우트 전환:', from.path, '→', to.path)
-})

메타 필드

라우트에 메타 정보를 추가할 수 있습니다:

javascript
{
-  path: '/MyPage',
-  name: 'MyPage',
-  component: () => import('@/views/MyPage.vue'),
-  meta: {
-    requiresAuth: true,
-    title: '내 페이지',
-  },
-}

관련 문서

`,19)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_routing_guards.md.ByjLIwUX.lean.js b/assets/core-features_routing_guards.md.ByjLIwUX.lean.js deleted file mode 100644 index 0d91cbe..0000000 --- a/assets/core-features_routing_guards.md.ByjLIwUX.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"라우트 가드","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/guards.md","filePath":"core-features/routing/guards.md"}'),t={name:"core-features/routing/guards.md"};function l(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",19)]))}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_routing_routes.md.CUrqxSBZ.js b/assets/core-features_routing_routes.md.CUrqxSBZ.js deleted file mode 100644 index 23148a3..0000000 --- a/assets/core-features_routing_routes.md.CUrqxSBZ.js +++ /dev/null @@ -1,34 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"라우트 설정","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/routes.md","filePath":"core-features/routing/routes.md"}'),l={name:"core-features/routing/routes.md"};function p(t,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

라우트 설정

개요

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

기본 라우트 구조

javascript
export const routes = [
-  {
-    path: '/',
-    name: 'default',
-    redirect: '/Login',
-  },
-  {
-    path: '/Popup',
-    name: 'Popup',
-    component: () => import('@/views/ui/layouts/popBlank.vue'),
-  },
-  {
-    path: '/',
-    component: () => import('@/views/ui/layouts/blank.vue'),
-    children: [
-      {
-        path: '/Login',
-        name: 'Login',
-        component: () => import('@/views/axpFramework/auth/Login.vue'),
-      },
-      {
-        path: '/Main',
-        name: 'Main',
-        component: () => import('@/views/axpFramework/main/Main.vue'),
-        children: [],
-      },
-    ],
-  },
-]

라우트 추가

정적 라우트

javascript
{
-  path: '/MyPage',
-  name: 'MyPage',
-  component: () => import('@/views/ess/persadm/MyPage.vue'),
-}

동적 라우트

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다.

라우트 매핑 규칙

백엔드 메뉴의 URLID는 다음과 같이 매핑됩니다:

/ess/persadm/MyPage.do
-→ src/views/ess/persadm/MyPage.vue

레이아웃

Blank 레이아웃

인증 페이지 등에 사용됩니다.

Main 레이아웃

메인 애플리케이션에 사용됩니다.

팝업 창에 사용됩니다.

관련 문서

`,22)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_routing_routes.md.CUrqxSBZ.lean.js b/assets/core-features_routing_routes.md.CUrqxSBZ.lean.js deleted file mode 100644 index e0b8e58..0000000 --- a/assets/core-features_routing_routes.md.CUrqxSBZ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"라우트 설정","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/routes.md","filePath":"core-features/routing/routes.md"}'),l={name:"core-features/routing/routes.md"};function p(t,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",22)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_routing_routes.md.i8GS8F-7.js b/assets/core-features_routing_routes.md.i8GS8F-7.js new file mode 100644 index 0000000..7a1ac95 --- /dev/null +++ b/assets/core-features_routing_routes.md.i8GS8F-7.js @@ -0,0 +1,34 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"라우트 설정","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/routes.md","filePath":"core-features/routing/routes.md"}'),l={name:"core-features/routing/routes.md"};function p(t,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

라우트 설정

개요

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

기본 라우트 구조

javascript
export const routes = [
+  {
+    path: '/',
+    name: 'default',
+    redirect: '/Login',
+  },
+  {
+    path: '/Popup',
+    name: 'Popup',
+    component: () => import('@/views/ui/layouts/popBlank.vue'),
+  },
+  {
+    path: '/',
+    component: () => import('@/views/ui/layouts/blank.vue'),
+    children: [
+      {
+        path: '/Login',
+        name: 'Login',
+        component: () => import('@/views/axpFramework/auth/Login.vue'),
+      },
+      {
+        path: '/Main',
+        name: 'Main',
+        component: () => import('@/views/axpFramework/main/Main.vue'),
+        children: [],
+      },
+    ],
+  },
+]

라우트 추가

정적 라우트

javascript
{
+  path: '/MyPage',
+  name: 'MyPage',
+  component: () => import('@/views/ess/persadm/MyPage.vue'),
+}

동적 라우트

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다.

라우트 매핑 규칙

백엔드 메뉴의 URLID는 다음과 같이 매핑됩니다:

/ess/persadm/MyPage.do
+→ src/views/ess/persadm/MyPage.vue

레이아웃

Blank 레이아웃

인증 페이지 등에 사용됩니다.

Main 레이아웃

메인 애플리케이션에 사용됩니다.

팝업 창에 사용됩니다.

관련 문서

`,22)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_routing_routes.md.i8GS8F-7.lean.js b/assets/core-features_routing_routes.md.i8GS8F-7.lean.js new file mode 100644 index 0000000..597d2be --- /dev/null +++ b/assets/core-features_routing_routes.md.i8GS8F-7.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"라우트 설정","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/routing/routes.md","filePath":"core-features/routing/routes.md"}'),l={name:"core-features/routing/routes.md"};function p(t,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",22)]))}const g=i(l,[["render",p]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_stores_auth.md.BhYKa_iN.js b/assets/core-features_stores_auth.md.BhYKa_iN.js deleted file mode 100644 index 9f7acc1..0000000 --- a/assets/core-features_stores_auth.md.BhYKa_iN.js +++ /dev/null @@ -1,65 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"인증 스토어 (authStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/auth.md","filePath":"core-features/stores/auth.md"}'),h={name:"core-features/stores/auth.md"};function l(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

인증 스토어 (authStore)

개요

authStore는 애플리케이션의 인증 상태를 관리하는 Pinia 스토어입니다. JWT 액세스 토큰을 저장하고 관리합니다.

파일 위치

src/utils/stores/authStore.js

상태 (State)

javascript
state: () => ({
-  accessToken: null, // 액세스 토큰 저장
-})

accessToken

  • 타입: string | null
  • 설명: JWT 액세스 토큰을 저장합니다. 로그인 시 설정되고, 로그아웃 시 null로 초기화됩니다.

액션 (Actions)

setAccessToken(token)

액세스 토큰을 설정합니다.

파라미터:

  • token (string): 설정할 액세스 토큰

사용 예제:

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
-
-const authStore = useAuthStore()
-authStore.setAccessToken('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...')

clearAccessToken()

액세스 토큰을 초기화합니다. 로그아웃 시 호출됩니다.

사용 예제:

javascript
const authStore = useAuthStore()
-authStore.clearAccessToken()

게터 (Getters)

isAuthenticated

사용자가 인증되었는지 여부를 반환합니다.

반환값:

  • boolean: accessToken이 존재하면 true, 없으면 false

사용 예제:

vue
<script setup>
-import { useAuthStore } from '@/utils/stores/authStore.js'
-
-const authStore = useAuthStore()
-
-// computed로 사용
-const isAuthenticated = computed(() => authStore.isAuthenticated)
-
-// 직접 접근
-if (authStore.isAuthenticated) {
-  console.log('인증된 사용자입니다')
-}
-</script>

사용 예제

로그인 처리

vue
<script setup>
-import { useAuthStore } from '@/utils/stores/authStore.js'
-import axiosInstance from '@/CustomAxios.js'
-
-const authStore = useAuthStore()
-
-const login = async (userId, password) => {
-  try {
-    const response = await axiosInstance.post('/api/login', {
-      userId,
-      password,
-    })
-    
-    if (response.status === 'S') {
-      // 토큰 저장
-      authStore.setAccessToken(response.data.accessToken)
-    }
-  } catch (error) {
-    console.error('로그인 실패:', error)
-  }
-}
-</script>

로그아웃 처리

vue
<script setup>
-import { useAuthStore } from '@/utils/stores/authStore.js'
-import { useRouter } from 'vue-router'
-
-const authStore = useAuthStore()
-const router = useRouter()
-
-const logout = () => {
-  authStore.clearAccessToken()
-  router.push({ name: 'Login' })
-}
-</script>

인증 상태 확인

vue
<script setup>
-import { useAuthStore } from '@/utils/stores/authStore.js'
-import { onMounted } from 'vue'
-import { useRouter } from 'vue-router'
-
-const authStore = useAuthStore()
-const router = useRouter()
-
-onMounted(() => {
-  // 인증되지 않은 경우 로그인 페이지로 리다이렉트
-  if (!authStore.isAuthenticated) {
-    router.push({ name: 'Login' })
-  }
-})
-</script>

주의사항

  1. 토큰 갱신: CustomAxios.js의 인터셉터에서 토큰 갱신이 자동으로 처리됩니다. 직접 토큰을 갱신할 필요는 없습니다.

  2. 보안: 액세스 토큰은 메모리에만 저장됩니다. 영속화가 필요한 경우 persist 옵션을 추가할 수 있지만, 보안상 권장하지 않습니다.

  3. 토큰 만료: 토큰이 만료되면 CustomAxios.js의 응답 인터셉터에서 자동으로 갱신을 시도합니다. 갱신 실패 시 로그인 페이지로 리다이렉트됩니다.

관련 문서

`,38)]))}const g=i(h,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_stores_auth.md.BhYKa_iN.lean.js b/assets/core-features_stores_auth.md.BhYKa_iN.lean.js deleted file mode 100644 index e5c27e5..0000000 --- a/assets/core-features_stores_auth.md.BhYKa_iN.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"인증 스토어 (authStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/auth.md","filePath":"core-features/stores/auth.md"}'),h={name:"core-features/stores/auth.md"};function l(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",38)]))}const g=i(h,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_stores_auth.md.CIYsm40f.js b/assets/core-features_stores_auth.md.CIYsm40f.js new file mode 100644 index 0000000..b9fe7a1 --- /dev/null +++ b/assets/core-features_stores_auth.md.CIYsm40f.js @@ -0,0 +1,65 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"인증 스토어 (authStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/auth.md","filePath":"core-features/stores/auth.md"}'),h={name:"core-features/stores/auth.md"};function l(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

인증 스토어 (authStore)

개요

authStore는 애플리케이션의 인증 상태를 관리하는 Pinia 스토어입니다. JWT 액세스 토큰을 저장하고 관리합니다.

파일 위치

src/utils/stores/authStore.js

상태 (State)

javascript
state: () => ({
+  accessToken: null, // 액세스 토큰 저장
+})

accessToken

  • 타입: string | null
  • 설명: JWT 액세스 토큰을 저장합니다. 로그인 시 설정되고, 로그아웃 시 null로 초기화됩니다.

액션 (Actions)

setAccessToken(token)

액세스 토큰을 설정합니다.

파라미터:

  • token (string): 설정할 액세스 토큰

사용 예제:

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
+
+const authStore = useAuthStore()
+authStore.setAccessToken('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...')

clearAccessToken()

액세스 토큰을 초기화합니다. 로그아웃 시 호출됩니다.

사용 예제:

javascript
const authStore = useAuthStore()
+authStore.clearAccessToken()

게터 (Getters)

isAuthenticated

사용자가 인증되었는지 여부를 반환합니다.

반환값:

  • boolean: accessToken이 존재하면 true, 없으면 false

사용 예제:

vue
<script setup>
+import { useAuthStore } from '@/utils/stores/authStore.js'
+
+const authStore = useAuthStore()
+
+// computed로 사용
+const isAuthenticated = computed(() => authStore.isAuthenticated)
+
+// 직접 접근
+if (authStore.isAuthenticated) {
+  console.log('인증된 사용자입니다')
+}
+</script>

사용 예제

로그인 처리

vue
<script setup>
+import { useAuthStore } from '@/utils/stores/authStore.js'
+import axiosInstance from '@/CustomAxios.js'
+
+const authStore = useAuthStore()
+
+const login = async (userId, password) => {
+  try {
+    const response = await axiosInstance.post('/api/login', {
+      userId,
+      password,
+    })
+    
+    if (response.status === 'S') {
+      // 토큰 저장
+      authStore.setAccessToken(response.data.accessToken)
+    }
+  } catch (error) {
+    console.error('로그인 실패:', error)
+  }
+}
+</script>

로그아웃 처리

vue
<script setup>
+import { useAuthStore } from '@/utils/stores/authStore.js'
+import { useRouter } from 'vue-router'
+
+const authStore = useAuthStore()
+const router = useRouter()
+
+const logout = () => {
+  authStore.clearAccessToken()
+  router.push({ name: 'Login' })
+}
+</script>

인증 상태 확인

vue
<script setup>
+import { useAuthStore } from '@/utils/stores/authStore.js'
+import { onMounted } from 'vue'
+import { useRouter } from 'vue-router'
+
+const authStore = useAuthStore()
+const router = useRouter()
+
+onMounted(() => {
+  // 인증되지 않은 경우 로그인 페이지로 리다이렉트
+  if (!authStore.isAuthenticated) {
+    router.push({ name: 'Login' })
+  }
+})
+</script>

주의사항

  1. 토큰 갱신: CustomAxios.js의 인터셉터에서 토큰 갱신이 자동으로 처리됩니다. 직접 토큰을 갱신할 필요는 없습니다.

  2. 보안: 액세스 토큰은 메모리에만 저장됩니다. 영속화가 필요한 경우 persist 옵션을 추가할 수 있지만, 보안상 권장하지 않습니다.

  3. 토큰 만료: 토큰이 만료되면 CustomAxios.js의 응답 인터셉터에서 자동으로 갱신을 시도합니다. 갱신 실패 시 로그인 페이지로 리다이렉트됩니다.

관련 문서

`,38)]))}const g=i(h,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_stores_auth.md.CIYsm40f.lean.js b/assets/core-features_stores_auth.md.CIYsm40f.lean.js new file mode 100644 index 0000000..364199a --- /dev/null +++ b/assets/core-features_stores_auth.md.CIYsm40f.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"인증 스토어 (authStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/auth.md","filePath":"core-features/stores/auth.md"}'),h={name:"core-features/stores/auth.md"};function l(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",38)]))}const g=i(h,[["render",l]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_stores_loading.md.BKLSrxp_.js b/assets/core-features_stores_loading.md.BKLSrxp_.js new file mode 100644 index 0000000..a3e132f --- /dev/null +++ b/assets/core-features_stores_loading.md.BKLSrxp_.js @@ -0,0 +1,20 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"로딩 스토어 (loadingStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/loading.md","filePath":"core-features/stores/loading.md"}'),l={name:"core-features/stores/loading.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

로딩 스토어 (loadingStore)

개요

loadingStore는 애플리케이션의 로딩 상태를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/loadingStore.js

상태 (State)

javascript
state: () => ({
+  isLoading: false,
+})

액션 (Actions)

showLoading()

로딩 상태를 활성화합니다.

hideLoading()

로딩 상태를 비활성화합니다.

사용 예제

vue
<template>
+  <Loading :isLoading="loadingStore.isLoading" />
+</template>
+
+<script setup>
+import { useLoadingStore } from '@/utils/stores/loadingStore.js'
+
+const loadingStore = useLoadingStore()
+
+const fetchData = async () => {
+  loadingStore.showLoading()
+  try {
+    // API 호출
+  } finally {
+    loadingStore.hideLoading()
+  }
+}
+</script>

주의사항

CustomAxios.js의 인터셉터에서 자동으로 로딩 상태가 관리되므로, 대부분의 경우 수동으로 호출할 필요가 없습니다.

`,16)]))}const g=i(l,[["render",h]]);export{E as __pageData,g as default}; diff --git a/assets/core-features_stores_loading.md.BKLSrxp_.lean.js b/assets/core-features_stores_loading.md.BKLSrxp_.lean.js new file mode 100644 index 0000000..8266f60 --- /dev/null +++ b/assets/core-features_stores_loading.md.BKLSrxp_.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"로딩 스토어 (loadingStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/loading.md","filePath":"core-features/stores/loading.md"}'),l={name:"core-features/stores/loading.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",16)]))}const g=i(l,[["render",h]]);export{E as __pageData,g as default}; diff --git a/assets/core-features_stores_loading.md.DIG-aKsx.js b/assets/core-features_stores_loading.md.DIG-aKsx.js deleted file mode 100644 index a235d04..0000000 --- a/assets/core-features_stores_loading.md.DIG-aKsx.js +++ /dev/null @@ -1,20 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"로딩 스토어 (loadingStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/loading.md","filePath":"core-features/stores/loading.md"}'),l={name:"core-features/stores/loading.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

로딩 스토어 (loadingStore)

개요

loadingStore는 애플리케이션의 로딩 상태를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/loadingStore.js

상태 (State)

javascript
state: () => ({
-  isLoading: false,
-})

액션 (Actions)

showLoading()

로딩 상태를 활성화합니다.

hideLoading()

로딩 상태를 비활성화합니다.

사용 예제

vue
<template>
-  <Loading :isLoading="loadingStore.isLoading" />
-</template>
-
-<script setup>
-import { useLoadingStore } from '@/utils/stores/loadingStore.js'
-
-const loadingStore = useLoadingStore()
-
-const fetchData = async () => {
-  loadingStore.showLoading()
-  try {
-    // API 호출
-  } finally {
-    loadingStore.hideLoading()
-  }
-}
-</script>

주의사항

CustomAxios.js의 인터셉터에서 자동으로 로딩 상태가 관리되므로, 대부분의 경우 수동으로 호출할 필요가 없습니다.

`,16)]))}const g=i(l,[["render",h]]);export{E as __pageData,g as default}; diff --git a/assets/core-features_stores_loading.md.DIG-aKsx.lean.js b/assets/core-features_stores_loading.md.DIG-aKsx.lean.js deleted file mode 100644 index 05d24a9..0000000 --- a/assets/core-features_stores_loading.md.DIG-aKsx.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"로딩 스토어 (loadingStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/loading.md","filePath":"core-features/stores/loading.md"}'),l={name:"core-features/stores/loading.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",16)]))}const g=i(l,[["render",h]]);export{E as __pageData,g as default}; diff --git a/assets/core-features_stores_log.md.B5Obijzo.js b/assets/core-features_stores_log.md.B5Obijzo.js deleted file mode 100644 index 8e7d176..0000000 --- a/assets/core-features_stores_log.md.B5Obijzo.js +++ /dev/null @@ -1,29 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"로그 스토어 (logStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/log.md","filePath":"core-features/stores/log.md"}'),l={name:"core-features/stores/log.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

로그 스토어 (logStore)

개요

logStore는 API 호출 로그를 관리하는 Pinia 스토어입니다. 모든 API 요청이 자동으로 로그에 기록됩니다.

파일 위치

src/utils/stores/logStore.js

상태 (State)

javascript
state: () => ({
-  logYN: "N",      // 로그 표시 여부
-  logList: [],     // 로그 목록
-})

주요 액션

toggleLogYN()

로그 표시 여부를 전환합니다.

addLogData(config, menuData)

로그를 추가합니다. CustomAxios.js의 요청 인터셉터에서 자동으로 호출됩니다.

파라미터:

  • config: Axios 요청 설정
  • menuData: 현재 메뉴 정보

clearLogData()

로그 목록을 초기화합니다.

로그 구조

javascript
{
-  timeStamp: 1234567890,      // 타임스탬프
-  url: '/api/endpoint',       // 요청 URL
-  procedure: 'PROCEDURE_NAME', // 프로시저명
-  param: { /* 파라미터 */ },   // 요청 파라미터
-  menu: { /* 메뉴 정보 */ },    // 메뉴 정보
-  tokenYN: 'Y',               // 토큰 사용 여부
-  error: 'N',                 // 에러 여부
-}

사용 예제

vue
<script setup>
-import { useLogStore } from '@/utils/stores/logStore.js'
-
-const logStore = useLogStore()
-
-// 로그 표시 토글
-const toggleLog = () => {
-  logStore.toggleLogYN()
-}
-
-// 로그 목록 확인
-const logs = computed(() => logStore.logList)
-
-// 로그 초기화
-const clearLogs = () => {
-  logStore.clearLogData()
-}
-</script>

주의사항

로그는 localStorage에 저장되므로 브라우저를 닫아도 유지됩니다.

`,22)]))}const E=i(l,[["render",h]]);export{g as __pageData,E as default}; diff --git a/assets/core-features_stores_log.md.B5Obijzo.lean.js b/assets/core-features_stores_log.md.B5Obijzo.lean.js deleted file mode 100644 index c626320..0000000 --- a/assets/core-features_stores_log.md.B5Obijzo.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"로그 스토어 (logStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/log.md","filePath":"core-features/stores/log.md"}'),l={name:"core-features/stores/log.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",22)]))}const E=i(l,[["render",h]]);export{g as __pageData,E as default}; diff --git a/assets/core-features_stores_log.md.CIeJeCe4.js b/assets/core-features_stores_log.md.CIeJeCe4.js new file mode 100644 index 0000000..0cf86ae --- /dev/null +++ b/assets/core-features_stores_log.md.CIeJeCe4.js @@ -0,0 +1,29 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"로그 스토어 (logStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/log.md","filePath":"core-features/stores/log.md"}'),l={name:"core-features/stores/log.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

로그 스토어 (logStore)

개요

logStore는 API 호출 로그를 관리하는 Pinia 스토어입니다. 모든 API 요청이 자동으로 로그에 기록됩니다.

파일 위치

src/utils/stores/logStore.js

상태 (State)

javascript
state: () => ({
+  logYN: "N",      // 로그 표시 여부
+  logList: [],     // 로그 목록
+})

주요 액션

toggleLogYN()

로그 표시 여부를 전환합니다.

addLogData(config, menuData)

로그를 추가합니다. CustomAxios.js의 요청 인터셉터에서 자동으로 호출됩니다.

파라미터:

  • config: Axios 요청 설정
  • menuData: 현재 메뉴 정보

clearLogData()

로그 목록을 초기화합니다.

로그 구조

javascript
{
+  timeStamp: 1234567890,      // 타임스탬프
+  url: '/api/endpoint',       // 요청 URL
+  procedure: 'PROCEDURE_NAME', // 프로시저명
+  param: { /* 파라미터 */ },   // 요청 파라미터
+  menu: { /* 메뉴 정보 */ },    // 메뉴 정보
+  tokenYN: 'Y',               // 토큰 사용 여부
+  error: 'N',                 // 에러 여부
+}

사용 예제

vue
<script setup>
+import { useLogStore } from '@/utils/stores/logStore.js'
+
+const logStore = useLogStore()
+
+// 로그 표시 토글
+const toggleLog = () => {
+  logStore.toggleLogYN()
+}
+
+// 로그 목록 확인
+const logs = computed(() => logStore.logList)
+
+// 로그 초기화
+const clearLogs = () => {
+  logStore.clearLogData()
+}
+</script>

주의사항

로그는 localStorage에 저장되므로 브라우저를 닫아도 유지됩니다.

`,22)]))}const E=i(l,[["render",h]]);export{g as __pageData,E as default}; diff --git a/assets/core-features_stores_log.md.CIeJeCe4.lean.js b/assets/core-features_stores_log.md.CIeJeCe4.lean.js new file mode 100644 index 0000000..7fa11e9 --- /dev/null +++ b/assets/core-features_stores_log.md.CIeJeCe4.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"로그 스토어 (logStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/log.md","filePath":"core-features/stores/log.md"}'),l={name:"core-features/stores/log.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",22)]))}const E=i(l,[["render",h]]);export{g as __pageData,E as default}; diff --git a/assets/core-features_stores_menu.md.BsLR_2Z-.js b/assets/core-features_stores_menu.md.BsLR_2Z-.js new file mode 100644 index 0000000..d9020d2 --- /dev/null +++ b/assets/core-features_stores_menu.md.BsLR_2Z-.js @@ -0,0 +1,18 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"메뉴 스토어 (menuStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/menu.md","filePath":"core-features/stores/menu.md"}'),t={name:"core-features/stores/menu.md"};function h(l,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[e(`

메뉴 스토어 (menuStore)

개요

menuStore는 애플리케이션의 메뉴 정보를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/menuStore.js

상태 (State)

javascript
state: () => ({
+  menu: {},           // 메뉴 데이터
+  nowMenu: {},         // 현재 메뉴
+  bmkList: [],        // 즐겨찾기 목록
+  visitedMenu: [],    // 방문한 메뉴 목록
+})

주요 액션

setMenuData(data)

메뉴 데이터를 설정합니다.

setBmk(menu)

즐겨찾기에 메뉴를 추가하거나 제거합니다.

getBmk()

서버에서 즐겨찾기 목록을 가져옵니다.

사용 예제

vue
<script setup>
+import { useMenuStore } from '@/utils/stores/menuStore.js'
+
+const menuStore = useMenuStore()
+
+// 현재 메뉴 가져오기
+const currentMenu = computed(() => menuStore.nowMenu)
+
+// 즐겨찾기 확인
+const isBookmarked = (menu) => {
+  return menuStore.isBmk(menu)
+}
+</script>
`,16)]))}const c=a(t,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/core-features_stores_menu.md.BsLR_2Z-.lean.js b/assets/core-features_stores_menu.md.BsLR_2Z-.lean.js new file mode 100644 index 0000000..d5f95c0 --- /dev/null +++ b/assets/core-features_stores_menu.md.BsLR_2Z-.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"메뉴 스토어 (menuStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/menu.md","filePath":"core-features/stores/menu.md"}'),t={name:"core-features/stores/menu.md"};function h(l,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[e("",16)]))}const c=a(t,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/core-features_stores_menu.md.M_pVgBIp.js b/assets/core-features_stores_menu.md.M_pVgBIp.js deleted file mode 100644 index 8f8cd7a..0000000 --- a/assets/core-features_stores_menu.md.M_pVgBIp.js +++ /dev/null @@ -1,18 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"메뉴 스토어 (menuStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/menu.md","filePath":"core-features/stores/menu.md"}'),t={name:"core-features/stores/menu.md"};function h(l,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[e(`

메뉴 스토어 (menuStore)

개요

menuStore는 애플리케이션의 메뉴 정보를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/menuStore.js

상태 (State)

javascript
state: () => ({
-  menu: {},           // 메뉴 데이터
-  nowMenu: {},         // 현재 메뉴
-  bmkList: [],        // 즐겨찾기 목록
-  visitedMenu: [],    // 방문한 메뉴 목록
-})

주요 액션

setMenuData(data)

메뉴 데이터를 설정합니다.

setBmk(menu)

즐겨찾기에 메뉴를 추가하거나 제거합니다.

getBmk()

서버에서 즐겨찾기 목록을 가져옵니다.

사용 예제

vue
<script setup>
-import { useMenuStore } from '@/utils/stores/menuStore.js'
-
-const menuStore = useMenuStore()
-
-// 현재 메뉴 가져오기
-const currentMenu = computed(() => menuStore.nowMenu)
-
-// 즐겨찾기 확인
-const isBookmarked = (menu) => {
-  return menuStore.isBmk(menu)
-}
-</script>
`,16)]))}const c=a(t,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/core-features_stores_menu.md.M_pVgBIp.lean.js b/assets/core-features_stores_menu.md.M_pVgBIp.lean.js deleted file mode 100644 index 4fa9814..0000000 --- a/assets/core-features_stores_menu.md.M_pVgBIp.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"메뉴 스토어 (menuStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/menu.md","filePath":"core-features/stores/menu.md"}'),t={name:"core-features/stores/menu.md"};function h(l,s,p,k,r,d){return n(),i("div",null,s[0]||(s[0]=[e("",16)]))}const c=a(t,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/core-features_stores_modal.md.C6xpqMfa.js b/assets/core-features_stores_modal.md.C6xpqMfa.js new file mode 100644 index 0000000..346a21c --- /dev/null +++ b/assets/core-features_stores_modal.md.C6xpqMfa.js @@ -0,0 +1,30 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"모달 스토어 (modalStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/modal.md","filePath":"core-features/stores/modal.md"}'),l={name:"core-features/stores/modal.md"};function h(p,s,e,k,d,r){return t(),a("div",null,s[0]||(s[0]=[n(`

모달 스토어 (modalStore)

개요

modalStore는 애플리케이션의 모달 상태를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/modalStore.js

상태 (State)

javascript
state: () => ({
+  modalConfig: null,  // 모달 설정
+  modalId: null,      // 모달 ID
+})

액션 (Actions)

openModal(modalId, config)

모달을 엽니다.

파라미터:

  • modalId (string): 모달 ID
  • config (object): 모달 설정

사용 예제:

javascript
import { useModalStore } from '@/utils/stores/modalStore.js'
+
+const modalStore = useModalStore()
+
+modalStore.openModal('myModal', {
+  title: '제목',
+  data: { /* 데이터 */ },
+})

closeModal()

모달을 닫습니다.

사용 예제:

javascript
const modalStore = useModalStore()
+modalStore.closeModal()

사용 예제

vue
<template>
+  <v-dialog v-model="isModalOpen" max-width="800">
+    <v-card>
+      <v-card-title>{{ modalStore.modalConfig?.title }}</v-card-title>
+      <v-card-text>
+        <!-- 모달 내용 -->
+      </v-card-text>
+    </v-card>
+  </v-dialog>
+</template>
+
+<script setup>
+import { useModalStore } from '@/utils/stores/modalStore.js'
+import { computed } from 'vue'
+
+const modalStore = useModalStore()
+
+const isModalOpen = computed(() => modalStore.modalId === 'myModal')
+</script>
`,20)]))}const g=i(l,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_stores_modal.md.C6xpqMfa.lean.js b/assets/core-features_stores_modal.md.C6xpqMfa.lean.js new file mode 100644 index 0000000..969821b --- /dev/null +++ b/assets/core-features_stores_modal.md.C6xpqMfa.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"모달 스토어 (modalStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/modal.md","filePath":"core-features/stores/modal.md"}'),l={name:"core-features/stores/modal.md"};function h(p,s,e,k,d,r){return t(),a("div",null,s[0]||(s[0]=[n("",20)]))}const g=i(l,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_stores_modal.md.DDwVg1nP.js b/assets/core-features_stores_modal.md.DDwVg1nP.js deleted file mode 100644 index 8eb891d..0000000 --- a/assets/core-features_stores_modal.md.DDwVg1nP.js +++ /dev/null @@ -1,30 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"모달 스토어 (modalStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/modal.md","filePath":"core-features/stores/modal.md"}'),l={name:"core-features/stores/modal.md"};function h(p,s,e,k,d,r){return t(),a("div",null,s[0]||(s[0]=[n(`

모달 스토어 (modalStore)

개요

modalStore는 애플리케이션의 모달 상태를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/modalStore.js

상태 (State)

javascript
state: () => ({
-  modalConfig: null,  // 모달 설정
-  modalId: null,      // 모달 ID
-})

액션 (Actions)

openModal(modalId, config)

모달을 엽니다.

파라미터:

  • modalId (string): 모달 ID
  • config (object): 모달 설정

사용 예제:

javascript
import { useModalStore } from '@/utils/stores/modalStore.js'
-
-const modalStore = useModalStore()
-
-modalStore.openModal('myModal', {
-  title: '제목',
-  data: { /* 데이터 */ },
-})

closeModal()

모달을 닫습니다.

사용 예제:

javascript
const modalStore = useModalStore()
-modalStore.closeModal()

사용 예제

vue
<template>
-  <v-dialog v-model="isModalOpen" max-width="800">
-    <v-card>
-      <v-card-title>{{ modalStore.modalConfig?.title }}</v-card-title>
-      <v-card-text>
-        <!-- 모달 내용 -->
-      </v-card-text>
-    </v-card>
-  </v-dialog>
-</template>
-
-<script setup>
-import { useModalStore } from '@/utils/stores/modalStore.js'
-import { computed } from 'vue'
-
-const modalStore = useModalStore()
-
-const isModalOpen = computed(() => modalStore.modalId === 'myModal')
-</script>
`,20)]))}const g=i(l,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_stores_modal.md.DDwVg1nP.lean.js b/assets/core-features_stores_modal.md.DDwVg1nP.lean.js deleted file mode 100644 index 524a7c6..0000000 --- a/assets/core-features_stores_modal.md.DDwVg1nP.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"모달 스토어 (modalStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/modal.md","filePath":"core-features/stores/modal.md"}'),l={name:"core-features/stores/modal.md"};function h(p,s,e,k,d,r){return t(),a("div",null,s[0]||(s[0]=[n("",20)]))}const g=i(l,[["render",h]]);export{o as __pageData,g as default}; diff --git a/assets/core-features_stores_others.md.C-Sk3ViC.js b/assets/core-features_stores_others.md.C-Sk3ViC.js new file mode 100644 index 0000000..11d6994 --- /dev/null +++ b/assets/core-features_stores_others.md.C-Sk3ViC.js @@ -0,0 +1,43 @@ +import{_ as i,c as a,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"기타 스토어","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/others.md","filePath":"core-features/stores/others.md"}'),t={name:"core-features/stores/others.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

기타 스토어

버튼 스토어 (buttonStore)

개요

공통 버튼 박스의 버튼 상태를 관리하는 스토어입니다.

파일 위치

src/utils/stores/buttonStore.js

주요 기능

  • 버튼 표시/숨김 제어
  • 버튼 핸들러 설정
  • 버튼 초기화

사용 예제

javascript
import { useButtonStore } from '@/utils/stores/buttonStore.js'
+
+const buttonStore = useButtonStore()
+
+// 버튼 설정
+buttonStore.setButton('save', {
+  visible: true,
+  handler: () => {
+    console.log('저장 버튼 클릭')
+  },
+})
+
+// 버튼 초기화
+buttonStore.clear()

지원하는 버튼

  • init: 초기화
  • search: 검색
  • new: 신청
  • edit: 수정
  • save: 저장
  • delete: 삭제
  • approve: 승인
  • approveCancel: 승인취소
  • reject: 반려
  • close: 닫기
  • detail: 상세
  • print: 인쇄
  • excelDown: 엑셀 다운로드
  • file: 파일 처리
  • approval: 결재 처리

컨텍스트 메뉴 스토어 (contextMenuStore)

개요

그리드 컨텍스트 메뉴의 상태를 관리하는 스토어입니다.

파일 위치

src/utils/stores/contextMenuStore.js

주요 기능

  • 컨텍스트 메뉴 표시/숨김
  • 메뉴 위치 관리
  • 그리드 정보 저장

사용 예제

javascript
import { useContextMenuStore } from '@/utils/stores/contextMenuStore.js'
+
+const contextMenuStore = useContextMenuStore()
+
+// 컨텍스트 메뉴 표시
+contextMenuStore.show('gridId', {
+  event: mouseEvent,
+  data: rowData,
+  api: gridApi,
+  rowIndex: 0,
+  column: columnDef,
+  type: 'cellContextMenu',
+})
+
+// 컨텍스트 메뉴 숨김
+contextMenuStore.hide()

동적 스토어 (dynamicStore)

개요

동적 화면 데이터를 관리하는 스토어입니다.

파일 위치

src/utils/stores/dynamicStore.js

주요 기능

  • 화면별 데이터 저장
  • 화면 데이터 불러오기
  • 화면 데이터 삭제

사용 예제

javascript
import { useDynamicStore } from '@/utils/stores/dynamicStore.js'
+
+const dynamicStore = useDynamicStore()
+
+// 화면 데이터 저장
+dynamicStore.setScreenData('screen-uuid', {
+  formData: { /* 데이터 */ },
+  gridData: [ /* 데이터 */ ],
+})
+
+// 화면 데이터 불러오기
+const screenData = dynamicStore.getScreenData('screen-uuid')
+
+// 화면 데이터 삭제
+dynamicStore.removeScreenData('screen-uuid')
`,30)]))}const E=i(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/core-features_stores_others.md.C-Sk3ViC.lean.js b/assets/core-features_stores_others.md.C-Sk3ViC.lean.js new file mode 100644 index 0000000..88ebae8 --- /dev/null +++ b/assets/core-features_stores_others.md.C-Sk3ViC.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"기타 스토어","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/others.md","filePath":"core-features/stores/others.md"}'),t={name:"core-features/stores/others.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",30)]))}const E=i(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/core-features_stores_others.md.Nb9eYwXB.js b/assets/core-features_stores_others.md.Nb9eYwXB.js deleted file mode 100644 index 67ca574..0000000 --- a/assets/core-features_stores_others.md.Nb9eYwXB.js +++ /dev/null @@ -1,43 +0,0 @@ -import{_ as i,c as a,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"기타 스토어","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/others.md","filePath":"core-features/stores/others.md"}'),t={name:"core-features/stores/others.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

기타 스토어

버튼 스토어 (buttonStore)

개요

공통 버튼 박스의 버튼 상태를 관리하는 스토어입니다.

파일 위치

src/utils/stores/buttonStore.js

주요 기능

  • 버튼 표시/숨김 제어
  • 버튼 핸들러 설정
  • 버튼 초기화

사용 예제

javascript
import { useButtonStore } from '@/utils/stores/buttonStore.js'
-
-const buttonStore = useButtonStore()
-
-// 버튼 설정
-buttonStore.setButton('save', {
-  visible: true,
-  handler: () => {
-    console.log('저장 버튼 클릭')
-  },
-})
-
-// 버튼 초기화
-buttonStore.clear()

지원하는 버튼

  • init: 초기화
  • search: 검색
  • new: 신청
  • edit: 수정
  • save: 저장
  • delete: 삭제
  • approve: 승인
  • approveCancel: 승인취소
  • reject: 반려
  • close: 닫기
  • detail: 상세
  • print: 인쇄
  • excelDown: 엑셀 다운로드
  • file: 파일 처리
  • approval: 결재 처리

컨텍스트 메뉴 스토어 (contextMenuStore)

개요

그리드 컨텍스트 메뉴의 상태를 관리하는 스토어입니다.

파일 위치

src/utils/stores/contextMenuStore.js

주요 기능

  • 컨텍스트 메뉴 표시/숨김
  • 메뉴 위치 관리
  • 그리드 정보 저장

사용 예제

javascript
import { useContextMenuStore } from '@/utils/stores/contextMenuStore.js'
-
-const contextMenuStore = useContextMenuStore()
-
-// 컨텍스트 메뉴 표시
-contextMenuStore.show('gridId', {
-  event: mouseEvent,
-  data: rowData,
-  api: gridApi,
-  rowIndex: 0,
-  column: columnDef,
-  type: 'cellContextMenu',
-})
-
-// 컨텍스트 메뉴 숨김
-contextMenuStore.hide()

동적 스토어 (dynamicStore)

개요

동적 화면 데이터를 관리하는 스토어입니다.

파일 위치

src/utils/stores/dynamicStore.js

주요 기능

  • 화면별 데이터 저장
  • 화면 데이터 불러오기
  • 화면 데이터 삭제

사용 예제

javascript
import { useDynamicStore } from '@/utils/stores/dynamicStore.js'
-
-const dynamicStore = useDynamicStore()
-
-// 화면 데이터 저장
-dynamicStore.setScreenData('screen-uuid', {
-  formData: { /* 데이터 */ },
-  gridData: [ /* 데이터 */ ],
-})
-
-// 화면 데이터 불러오기
-const screenData = dynamicStore.getScreenData('screen-uuid')
-
-// 화면 데이터 삭제
-dynamicStore.removeScreenData('screen-uuid')
`,30)]))}const E=i(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/core-features_stores_others.md.Nb9eYwXB.lean.js b/assets/core-features_stores_others.md.Nb9eYwXB.lean.js deleted file mode 100644 index 590bf2d..0000000 --- a/assets/core-features_stores_others.md.Nb9eYwXB.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"기타 스토어","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/others.md","filePath":"core-features/stores/others.md"}'),t={name:"core-features/stores/others.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",30)]))}const E=i(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/core-features_stores_session.md.Bn7Rlf0Z.js b/assets/core-features_stores_session.md.Bn7Rlf0Z.js deleted file mode 100644 index 9876d3c..0000000 --- a/assets/core-features_stores_session.md.Bn7Rlf0Z.js +++ /dev/null @@ -1,13 +0,0 @@ -import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"세션 스토어 (sessionStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/session.md","filePath":"core-features/stores/session.md"}'),n={name:"core-features/stores/session.md"};function h(l,s,p,k,r,o){return e(),i("div",null,s[0]||(s[0]=[t(`

세션 스토어 (sessionStore)

개요

sessionStore는 사용자 세션 데이터를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/sessionStore.js

상태 (State)

javascript
state: () => ({
-  session: {},  // 세션 데이터
-})

주요 액션

setSessionData(data)

세션 데이터를 설정합니다.

setSessionKey(key, value)

특정 키의 값을 설정합니다.

getSessionValue(key)

특정 키의 값을 가져옵니다.

사용 예제

vue
<script setup>
-import { useSessionStore } from '@/utils/stores/sessionStore.js'
-
-const sessionStore = useSessionStore()
-
-// 세션 값 가져오기
-const userId = computed(() => sessionStore.getSessionValue('UserID'))
-
-// 세션 값 설정
-sessionStore.setSessionKey('encrypt', 'Y')
-</script>
`,16)]))}const c=a(n,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/core-features_stores_session.md.Bn7Rlf0Z.lean.js b/assets/core-features_stores_session.md.Bn7Rlf0Z.lean.js deleted file mode 100644 index d401440..0000000 --- a/assets/core-features_stores_session.md.Bn7Rlf0Z.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"세션 스토어 (sessionStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/session.md","filePath":"core-features/stores/session.md"}'),n={name:"core-features/stores/session.md"};function h(l,s,p,k,r,o){return e(),i("div",null,s[0]||(s[0]=[t("",16)]))}const c=a(n,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/core-features_stores_session.md.CpFVswX0.js b/assets/core-features_stores_session.md.CpFVswX0.js new file mode 100644 index 0000000..fc4d767 --- /dev/null +++ b/assets/core-features_stores_session.md.CpFVswX0.js @@ -0,0 +1,13 @@ +import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"세션 스토어 (sessionStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/session.md","filePath":"core-features/stores/session.md"}'),n={name:"core-features/stores/session.md"};function h(l,s,p,k,r,o){return e(),i("div",null,s[0]||(s[0]=[t(`

세션 스토어 (sessionStore)

개요

sessionStore는 사용자 세션 데이터를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/sessionStore.js

상태 (State)

javascript
state: () => ({
+  session: {},  // 세션 데이터
+})

주요 액션

setSessionData(data)

세션 데이터를 설정합니다.

setSessionKey(key, value)

특정 키의 값을 설정합니다.

getSessionValue(key)

특정 키의 값을 가져옵니다.

사용 예제

vue
<script setup>
+import { useSessionStore } from '@/utils/stores/sessionStore.js'
+
+const sessionStore = useSessionStore()
+
+// 세션 값 가져오기
+const userId = computed(() => sessionStore.getSessionValue('UserID'))
+
+// 세션 값 설정
+sessionStore.setSessionKey('encrypt', 'Y')
+</script>
`,16)]))}const c=a(n,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/core-features_stores_session.md.CpFVswX0.lean.js b/assets/core-features_stores_session.md.CpFVswX0.lean.js new file mode 100644 index 0000000..90e8678 --- /dev/null +++ b/assets/core-features_stores_session.md.CpFVswX0.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"세션 스토어 (sessionStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/session.md","filePath":"core-features/stores/session.md"}'),n={name:"core-features/stores/session.md"};function h(l,s,p,k,r,o){return e(),i("div",null,s[0]||(s[0]=[t("",16)]))}const c=a(n,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/core-features_stores_sidebar.md.BQumugrp.js b/assets/core-features_stores_sidebar.md.BQumugrp.js new file mode 100644 index 0000000..406150a --- /dev/null +++ b/assets/core-features_stores_sidebar.md.BQumugrp.js @@ -0,0 +1,68 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"사이드바 스토어 (sidebarStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/sidebar.md","filePath":"core-features/stores/sidebar.md"}'),t={name:"core-features/stores/sidebar.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l(`

사이드바 스토어 (sidebarStore)

개요

sidebarStore는 사이드바 메뉴의 표시 상태를 관리하는 Pinia 스토어입니다. 사이드바의 표시/숨김 및 접기/펼치기 상태를 제어합니다.

파일 위치

src/utils/stores/sidebarStore.js

상태 (State)

javascript
const visible = ref(undefined)      // 사이드바 표시 여부 (undefined: 자동, true: 표시, false: 숨김)
+const unfoldable = ref(false)       // 사이드바 접기/펼치기 가능 여부

주요 액션

toggleVisible(value)

사이드바 표시 여부를 토글합니다.

파라미터:

  • value (optional): true면 표시, false면 숨김, undefined면 토글

사용 예제:

javascript
import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
+
+const sidebarStore = useSidebarStore()
+
+// 토글
+sidebarStore.toggleVisible()
+
+// 표시
+sidebarStore.toggleVisible(true)
+
+// 숨김
+sidebarStore.toggleVisible(false)

toggleUnfoldable()

사이드바 접기/펼치기 가능 여부를 토글합니다.

사용 예제:

javascript
sidebarStore.toggleUnfoldable()

사용 예제

Composition API에서 사용

vue
<script setup>
+import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
+import { computed } from 'vue'
+
+const sidebarStore = useSidebarStore()
+
+// 반응형 상태
+const isVisible = computed(() => sidebarStore.visible)
+const isUnfoldable = computed(() => sidebarStore.unfoldable)
+
+// 사이드바 토글
+const handleToggleSidebar = () => {
+  sidebarStore.toggleVisible()
+}
+
+// 접기/펼치기 토글
+const handleToggleUnfoldable = () => {
+  sidebarStore.toggleUnfoldable()
+}
+</script>
+
+<template>
+  <div>
+    <button @click="handleToggleSidebar">
+      사이드바 {{ isVisible ? '숨기기' : '보이기' }}
+    </button>
+    <button @click="handleToggleUnfoldable">
+      {{ isUnfoldable ? '접기' : '펼치기' }}
+    </button>
+  </div>
+</template>

컴포넌트에서 직접 사용

vue
<template>
+  <v-navigation-drawer
+    :model-value="sidebarStore.visible"
+    @update:model-value="sidebarStore.toggleVisible"
+    :permanent="sidebarStore.unfoldable"
+  >
+    <!-- 사이드바 내용 -->
+  </v-navigation-drawer>
+</template>
+
+<script setup>
+import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
+
+const sidebarStore = useSidebarStore()
+</script>

상태 관리

visible 상태

  • undefined: 기본값, 자동으로 결정됨
  • true: 사이드바 표시
  • false: 사이드바 숨김

unfoldable 상태

  • false: 기본값, 사이드바가 접히거나 숨겨질 수 있음
  • true: 사이드바가 항상 펼쳐진 상태로 고정

다른 스토어와의 연동

사이드바 스토어는 메뉴 스토어와 함께 사용되는 경우가 많습니다:

javascript
import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
+import { useMenuStore } from '@/utils/stores/menuStore.js'
+
+const sidebarStore = useSidebarStore()
+const menuStore = useMenuStore()
+
+// 메뉴 선택 시 사이드바 자동 표시
+watch(() => menuStore.currentMenu, (newMenu) => {
+  if (newMenu) {
+    sidebarStore.toggleVisible(true)
+  }
+})

관련 문서

`,33)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_stores_sidebar.md.BQumugrp.lean.js b/assets/core-features_stores_sidebar.md.BQumugrp.lean.js new file mode 100644 index 0000000..eb6f587 --- /dev/null +++ b/assets/core-features_stores_sidebar.md.BQumugrp.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"사이드바 스토어 (sidebarStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/sidebar.md","filePath":"core-features/stores/sidebar.md"}'),t={name:"core-features/stores/sidebar.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l("",33)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_stores_sidebar.md.ScgR2GE4.js b/assets/core-features_stores_sidebar.md.ScgR2GE4.js deleted file mode 100644 index 1d67f06..0000000 --- a/assets/core-features_stores_sidebar.md.ScgR2GE4.js +++ /dev/null @@ -1,68 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"사이드바 스토어 (sidebarStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/sidebar.md","filePath":"core-features/stores/sidebar.md"}'),t={name:"core-features/stores/sidebar.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l(`

사이드바 스토어 (sidebarStore)

개요

sidebarStore는 사이드바 메뉴의 표시 상태를 관리하는 Pinia 스토어입니다. 사이드바의 표시/숨김 및 접기/펼치기 상태를 제어합니다.

파일 위치

src/utils/stores/sidebarStore.js

상태 (State)

javascript
const visible = ref(undefined)      // 사이드바 표시 여부 (undefined: 자동, true: 표시, false: 숨김)
-const unfoldable = ref(false)       // 사이드바 접기/펼치기 가능 여부

주요 액션

toggleVisible(value)

사이드바 표시 여부를 토글합니다.

파라미터:

  • value (optional): true면 표시, false면 숨김, undefined면 토글

사용 예제:

javascript
import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
-
-const sidebarStore = useSidebarStore()
-
-// 토글
-sidebarStore.toggleVisible()
-
-// 표시
-sidebarStore.toggleVisible(true)
-
-// 숨김
-sidebarStore.toggleVisible(false)

toggleUnfoldable()

사이드바 접기/펼치기 가능 여부를 토글합니다.

사용 예제:

javascript
sidebarStore.toggleUnfoldable()

사용 예제

Composition API에서 사용

vue
<script setup>
-import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
-import { computed } from 'vue'
-
-const sidebarStore = useSidebarStore()
-
-// 반응형 상태
-const isVisible = computed(() => sidebarStore.visible)
-const isUnfoldable = computed(() => sidebarStore.unfoldable)
-
-// 사이드바 토글
-const handleToggleSidebar = () => {
-  sidebarStore.toggleVisible()
-}
-
-// 접기/펼치기 토글
-const handleToggleUnfoldable = () => {
-  sidebarStore.toggleUnfoldable()
-}
-</script>
-
-<template>
-  <div>
-    <button @click="handleToggleSidebar">
-      사이드바 {{ isVisible ? '숨기기' : '보이기' }}
-    </button>
-    <button @click="handleToggleUnfoldable">
-      {{ isUnfoldable ? '접기' : '펼치기' }}
-    </button>
-  </div>
-</template>

컴포넌트에서 직접 사용

vue
<template>
-  <v-navigation-drawer
-    :model-value="sidebarStore.visible"
-    @update:model-value="sidebarStore.toggleVisible"
-    :permanent="sidebarStore.unfoldable"
-  >
-    <!-- 사이드바 내용 -->
-  </v-navigation-drawer>
-</template>
-
-<script setup>
-import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
-
-const sidebarStore = useSidebarStore()
-</script>

상태 관리

visible 상태

  • undefined: 기본값, 자동으로 결정됨
  • true: 사이드바 표시
  • false: 사이드바 숨김

unfoldable 상태

  • false: 기본값, 사이드바가 접히거나 숨겨질 수 있음
  • true: 사이드바가 항상 펼쳐진 상태로 고정

다른 스토어와의 연동

사이드바 스토어는 메뉴 스토어와 함께 사용되는 경우가 많습니다:

javascript
import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
-import { useMenuStore } from '@/utils/stores/menuStore.js'
-
-const sidebarStore = useSidebarStore()
-const menuStore = useMenuStore()
-
-// 메뉴 선택 시 사이드바 자동 표시
-watch(() => menuStore.currentMenu, (newMenu) => {
-  if (newMenu) {
-    sidebarStore.toggleVisible(true)
-  }
-})

관련 문서

`,33)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_stores_sidebar.md.ScgR2GE4.lean.js b/assets/core-features_stores_sidebar.md.ScgR2GE4.lean.js deleted file mode 100644 index eadb8d3..0000000 --- a/assets/core-features_stores_sidebar.md.ScgR2GE4.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"사이드바 스토어 (sidebarStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/sidebar.md","filePath":"core-features/stores/sidebar.md"}'),t={name:"core-features/stores/sidebar.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l("",33)]))}const o=i(t,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/core-features_stores_tab.md.BapC7rJA.js b/assets/core-features_stores_tab.md.BapC7rJA.js new file mode 100644 index 0000000..4790fca --- /dev/null +++ b/assets/core-features_stores_tab.md.BapC7rJA.js @@ -0,0 +1,27 @@ +import{_ as a,c as i,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"탭 스토어 (tabStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/tab.md","filePath":"core-features/stores/tab.md"}'),e={name:"core-features/stores/tab.md"};function l(h,s,p,k,r,d){return t(),i("div",null,s[0]||(s[0]=[n(`

탭 스토어 (tabStore)

개요

tabStore는 애플리케이션의 탭 상태를 관리하는 Pinia 스토어입니다. 여러 페이지를 탭으로 관리하고 IndexedDB에 저장합니다.

파일 위치

src/utils/stores/tabStore.js

상태 (State)

javascript
state: () => ({
+  tabList: [],      // 탭 목록
+  tabCntObj: {},    // 탭 개수 객체
+  nowTab: null,     // 현재 탭
+})

주요 액션

openTab(menu)

새로운 탭을 엽니다.

파라미터:

  • menu (object): 메뉴 정보

사용 예제:

javascript
import { useTabStore } from '@/utils/stores/tabStore.js'
+
+const tabStore = useTabStore()
+
+tabStore.openTab({
+  MENUID: 'ESS000001',
+  MENUNAME: '직원 목록',
+  URLID: '/ess/persadm/EmployeeList.vue',
+})

switchTab(idxDbKey)

탭을 전환합니다.

파라미터:

  • idxDbKey (string): 탭 키

closeTab(tab)

탭을 닫습니다.

파라미터:

  • tab (object): 탭 정보

closeAllTab()

모든 탭을 닫습니다 (대시보드 제외).

IndexedDB 연동

탭 데이터는 IndexedDB에 저장되어 새로고침 후에도 유지됩니다.

사용 예제

vue
<script setup>
+import { useTabStore } from '@/utils/stores/tabStore.js'
+
+const tabStore = useTabStore()
+
+// 현재 탭 확인
+const currentTab = computed(() => {
+  return tabStore.tabList.find(tab => tab.idxDbKey === tabStore.nowTab)
+})
+
+// 탭 전환
+const switchToTab = (tab) => {
+  tabStore.switchTab(tab.idxDbKey)
+}
+</script>
`,28)]))}const c=a(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_stores_tab.md.BapC7rJA.lean.js b/assets/core-features_stores_tab.md.BapC7rJA.lean.js new file mode 100644 index 0000000..cd9f389 --- /dev/null +++ b/assets/core-features_stores_tab.md.BapC7rJA.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"탭 스토어 (tabStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/tab.md","filePath":"core-features/stores/tab.md"}'),e={name:"core-features/stores/tab.md"};function l(h,s,p,k,r,d){return t(),i("div",null,s[0]||(s[0]=[n("",28)]))}const c=a(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_stores_tab.md.f0o1uOE5.js b/assets/core-features_stores_tab.md.f0o1uOE5.js deleted file mode 100644 index bcf1d71..0000000 --- a/assets/core-features_stores_tab.md.f0o1uOE5.js +++ /dev/null @@ -1,27 +0,0 @@ -import{_ as a,c as i,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"탭 스토어 (tabStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/tab.md","filePath":"core-features/stores/tab.md"}'),e={name:"core-features/stores/tab.md"};function l(h,s,p,k,r,d){return t(),i("div",null,s[0]||(s[0]=[n(`

탭 스토어 (tabStore)

개요

tabStore는 애플리케이션의 탭 상태를 관리하는 Pinia 스토어입니다. 여러 페이지를 탭으로 관리하고 IndexedDB에 저장합니다.

파일 위치

src/utils/stores/tabStore.js

상태 (State)

javascript
state: () => ({
-  tabList: [],      // 탭 목록
-  tabCntObj: {},    // 탭 개수 객체
-  nowTab: null,     // 현재 탭
-})

주요 액션

openTab(menu)

새로운 탭을 엽니다.

파라미터:

  • menu (object): 메뉴 정보

사용 예제:

javascript
import { useTabStore } from '@/utils/stores/tabStore.js'
-
-const tabStore = useTabStore()
-
-tabStore.openTab({
-  MENUID: 'ESS000001',
-  MENUNAME: '직원 목록',
-  URLID: '/ess/persadm/EmployeeList.vue',
-})

switchTab(idxDbKey)

탭을 전환합니다.

파라미터:

  • idxDbKey (string): 탭 키

closeTab(tab)

탭을 닫습니다.

파라미터:

  • tab (object): 탭 정보

closeAllTab()

모든 탭을 닫습니다 (대시보드 제외).

IndexedDB 연동

탭 데이터는 IndexedDB에 저장되어 새로고침 후에도 유지됩니다.

사용 예제

vue
<script setup>
-import { useTabStore } from '@/utils/stores/tabStore.js'
-
-const tabStore = useTabStore()
-
-// 현재 탭 확인
-const currentTab = computed(() => {
-  return tabStore.tabList.find(tab => tab.idxDbKey === tabStore.nowTab)
-})
-
-// 탭 전환
-const switchToTab = (tab) => {
-  tabStore.switchTab(tab.idxDbKey)
-}
-</script>
`,28)]))}const c=a(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/core-features_stores_tab.md.f0o1uOE5.lean.js b/assets/core-features_stores_tab.md.f0o1uOE5.lean.js deleted file mode 100644 index c9f5005..0000000 --- a/assets/core-features_stores_tab.md.f0o1uOE5.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"탭 스토어 (tabStore)","description":"","frontmatter":{},"headers":[],"relativePath":"core-features/stores/tab.md","filePath":"core-features/stores/tab.md"}'),e={name:"core-features/stores/tab.md"};function l(h,s,p,k,r,d){return t(),i("div",null,s[0]||(s[0]=[n("",28)]))}const c=a(e,[["render",l]]);export{o as __pageData,c as default}; diff --git a/assets/deployment_deploy.md.2K0TnCMr.js b/assets/deployment_deploy.md.2K0TnCMr.js deleted file mode 100644 index 1fcec07..0000000 --- a/assets/deployment_deploy.md.2K0TnCMr.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as i,aG as o}from"./chunks/framework.CrOSaJJH.js";const _=JSON.parse('{"title":"배포 절차","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/deploy.md","filePath":"deployment/deploy.md"}'),s={name:"deployment/deploy.md"};function l(r,a,n,d,h,p){return i(),t("div",null,a[0]||(a[0]=[o('

배포 절차

1. 빌드

bash
npm run build:prod

2. 빌드 결과물 확인

dist/ 디렉토리에 빌드 결과물이 생성되었는지 확인합니다.

3. 웹 서버 설정

빌드된 파일을 웹 서버에 업로드합니다.

4. 환경 변수 확인

프로덕션 환경 변수가 올바르게 설정되었는지 확인합니다.

5. 테스트

배포된 애플리케이션을 테스트합니다.

주의사항

  1. 환경 변수: 프로덕션 환경 변수를 확인하세요.
  2. API 주소: 프로덕션 API 주소가 올바른지 확인하세요.
  3. HTTPS: 프로덕션 환경에서는 HTTPS를 사용하세요.
',13)]))}const u=e(s,[["render",l]]);export{_ as __pageData,u as default}; diff --git a/assets/deployment_deploy.md.2K0TnCMr.lean.js b/assets/deployment_deploy.md.2K0TnCMr.lean.js deleted file mode 100644 index 5b9f08b..0000000 --- a/assets/deployment_deploy.md.2K0TnCMr.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as i,aG as o}from"./chunks/framework.CrOSaJJH.js";const _=JSON.parse('{"title":"배포 절차","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/deploy.md","filePath":"deployment/deploy.md"}'),s={name:"deployment/deploy.md"};function l(r,a,n,d,h,p){return i(),t("div",null,a[0]||(a[0]=[o("",13)]))}const u=e(s,[["render",l]]);export{_ as __pageData,u as default}; diff --git a/assets/deployment_deploy.md.Bfht-wq3.js b/assets/deployment_deploy.md.Bfht-wq3.js new file mode 100644 index 0000000..1b4eb3e --- /dev/null +++ b/assets/deployment_deploy.md.Bfht-wq3.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i,aG as o}from"./chunks/framework.DytOxJW6.js";const _=JSON.parse('{"title":"배포 절차","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/deploy.md","filePath":"deployment/deploy.md"}'),s={name:"deployment/deploy.md"};function l(r,a,n,d,h,p){return i(),t("div",null,a[0]||(a[0]=[o('

배포 절차

1. 빌드

bash
npm run build:prod

2. 빌드 결과물 확인

dist/ 디렉토리에 빌드 결과물이 생성되었는지 확인합니다.

3. 웹 서버 설정

빌드된 파일을 웹 서버에 업로드합니다.

4. 환경 변수 확인

프로덕션 환경 변수가 올바르게 설정되었는지 확인합니다.

5. 테스트

배포된 애플리케이션을 테스트합니다.

주의사항

  1. 환경 변수: 프로덕션 환경 변수를 확인하세요.
  2. API 주소: 프로덕션 API 주소가 올바른지 확인하세요.
  3. HTTPS: 프로덕션 환경에서는 HTTPS를 사용하세요.
',13)]))}const u=e(s,[["render",l]]);export{_ as __pageData,u as default}; diff --git a/assets/deployment_deploy.md.Bfht-wq3.lean.js b/assets/deployment_deploy.md.Bfht-wq3.lean.js new file mode 100644 index 0000000..124681d --- /dev/null +++ b/assets/deployment_deploy.md.Bfht-wq3.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i,aG as o}from"./chunks/framework.DytOxJW6.js";const _=JSON.parse('{"title":"배포 절차","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/deploy.md","filePath":"deployment/deploy.md"}'),s={name:"deployment/deploy.md"};function l(r,a,n,d,h,p){return i(),t("div",null,a[0]||(a[0]=[o("",13)]))}const u=e(s,[["render",l]]);export{_ as __pageData,u as default}; diff --git a/assets/deployment_dev-server.md.CHYZ-vPY.js b/assets/deployment_dev-server.md.CHYZ-vPY.js deleted file mode 100644 index 5689c95..0000000 --- a/assets/deployment_dev-server.md.CHYZ-vPY.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as r,aG as s}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"개발 서버 실행","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/dev-server.md","filePath":"deployment/dev-server.md"}'),i={name:"deployment/dev-server.md"};function o(l,a,n,h,d,c){return r(),t("div",null,a[0]||(a[0]=[s('

개발 서버 실행

개발 서버 시작

bash
npm run dev

기본 설정

  • 포트: 5173
  • 호스트: 모든 네트워크 인터페이스 (host: true)
  • HMR: 활성화됨

포트 변경

포트가 이미 사용 중인 경우 Vite가 자동으로 다른 포트를 사용합니다.

접속

브라우저에서 http://localhost:5173으로 접속합니다.

핫 모듈 교체 (HMR)

코드를 수정하면 자동으로 브라우저가 업데이트됩니다.

프록시

개발 서버는 /api, /auth, /files 경로를 프록시합니다.

',13)]))}const m=e(i,[["render",o]]);export{u as __pageData,m as default}; diff --git a/assets/deployment_dev-server.md.CHYZ-vPY.lean.js b/assets/deployment_dev-server.md.CHYZ-vPY.lean.js deleted file mode 100644 index 6bccbed..0000000 --- a/assets/deployment_dev-server.md.CHYZ-vPY.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as r,aG as s}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"개발 서버 실행","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/dev-server.md","filePath":"deployment/dev-server.md"}'),i={name:"deployment/dev-server.md"};function o(l,a,n,h,d,c){return r(),t("div",null,a[0]||(a[0]=[s("",13)]))}const m=e(i,[["render",o]]);export{u as __pageData,m as default}; diff --git a/assets/deployment_dev-server.md.DOjKBv7R.js b/assets/deployment_dev-server.md.DOjKBv7R.js new file mode 100644 index 0000000..db10551 --- /dev/null +++ b/assets/deployment_dev-server.md.DOjKBv7R.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,aG as s}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"개발 서버 실행","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/dev-server.md","filePath":"deployment/dev-server.md"}'),i={name:"deployment/dev-server.md"};function o(l,a,n,h,d,c){return r(),t("div",null,a[0]||(a[0]=[s('

개발 서버 실행

개발 서버 시작

bash
npm run dev

기본 설정

  • 포트: 5173
  • 호스트: 모든 네트워크 인터페이스 (host: true)
  • HMR: 활성화됨

포트 변경

포트가 이미 사용 중인 경우 Vite가 자동으로 다른 포트를 사용합니다.

접속

브라우저에서 http://localhost:5173으로 접속합니다.

핫 모듈 교체 (HMR)

코드를 수정하면 자동으로 브라우저가 업데이트됩니다.

프록시

개발 서버는 /api, /auth, /files 경로를 프록시합니다.

',13)]))}const m=e(i,[["render",o]]);export{u as __pageData,m as default}; diff --git a/assets/deployment_dev-server.md.DOjKBv7R.lean.js b/assets/deployment_dev-server.md.DOjKBv7R.lean.js new file mode 100644 index 0000000..232634c --- /dev/null +++ b/assets/deployment_dev-server.md.DOjKBv7R.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,aG as s}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"개발 서버 실행","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/dev-server.md","filePath":"deployment/dev-server.md"}'),i={name:"deployment/dev-server.md"};function o(l,a,n,h,d,c){return r(),t("div",null,a[0]||(a[0]=[s("",13)]))}const m=e(i,[["render",o]]);export{u as __pageData,m as default}; diff --git a/assets/deployment_optimization.md.Bb6ByP2i.js b/assets/deployment_optimization.md.Bb6ByP2i.js new file mode 100644 index 0000000..6958d8d --- /dev/null +++ b/assets/deployment_optimization.md.Bb6ByP2i.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i,aG as o}from"./chunks/framework.DytOxJW6.js";const m=JSON.parse('{"title":"빌드 최적화","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/optimization.md","filePath":"deployment/optimization.md"}'),r={name:"deployment/optimization.md"};function l(n,a,h,d,s,c){return i(),t("div",null,a[0]||(a[0]=[o('

빌드 최적화

코드 분할

Vite는 자동으로 코드를 청크로 분할합니다.

트리 쉐이킹

사용하지 않는 코드는 자동으로 제거됩니다.

압축

  • JavaScript: Terser로 압축
  • CSS: 압축
  • HTML: 압축

에셋 최적화

  • 이미지 최적화
  • 폰트 최적화
  • CSS 최적화

청크 크기 제한

chunkSizeWarningLimit로 청크 크기 경고를 설정할 수 있습니다.

성능 모니터링

빌드 후 청크 크기를 확인하여 최적화 여부를 판단합니다.

',13)]))}const u=e(r,[["render",l]]);export{m as __pageData,u as default}; diff --git a/assets/deployment_optimization.md.Bb6ByP2i.lean.js b/assets/deployment_optimization.md.Bb6ByP2i.lean.js new file mode 100644 index 0000000..ed33548 --- /dev/null +++ b/assets/deployment_optimization.md.Bb6ByP2i.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i,aG as o}from"./chunks/framework.DytOxJW6.js";const m=JSON.parse('{"title":"빌드 최적화","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/optimization.md","filePath":"deployment/optimization.md"}'),r={name:"deployment/optimization.md"};function l(n,a,h,d,s,c){return i(),t("div",null,a[0]||(a[0]=[o("",13)]))}const u=e(r,[["render",l]]);export{m as __pageData,u as default}; diff --git a/assets/deployment_optimization.md.DDwvDmu2.js b/assets/deployment_optimization.md.DDwvDmu2.js deleted file mode 100644 index d4e0578..0000000 --- a/assets/deployment_optimization.md.DDwvDmu2.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as i,aG as o}from"./chunks/framework.CrOSaJJH.js";const m=JSON.parse('{"title":"빌드 최적화","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/optimization.md","filePath":"deployment/optimization.md"}'),r={name:"deployment/optimization.md"};function l(n,a,h,d,s,c){return i(),t("div",null,a[0]||(a[0]=[o('

빌드 최적화

코드 분할

Vite는 자동으로 코드를 청크로 분할합니다.

트리 쉐이킹

사용하지 않는 코드는 자동으로 제거됩니다.

압축

  • JavaScript: Terser로 압축
  • CSS: 압축
  • HTML: 압축

에셋 최적화

  • 이미지 최적화
  • 폰트 최적화
  • CSS 최적화

청크 크기 제한

chunkSizeWarningLimit로 청크 크기 경고를 설정할 수 있습니다.

성능 모니터링

빌드 후 청크 크기를 확인하여 최적화 여부를 판단합니다.

',13)]))}const u=e(r,[["render",l]]);export{m as __pageData,u as default}; diff --git a/assets/deployment_optimization.md.DDwvDmu2.lean.js b/assets/deployment_optimization.md.DDwvDmu2.lean.js deleted file mode 100644 index 8273094..0000000 --- a/assets/deployment_optimization.md.DDwvDmu2.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as i,aG as o}from"./chunks/framework.CrOSaJJH.js";const m=JSON.parse('{"title":"빌드 최적화","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/optimization.md","filePath":"deployment/optimization.md"}'),r={name:"deployment/optimization.md"};function l(n,a,h,d,s,c){return i(),t("div",null,a[0]||(a[0]=[o("",13)]))}const u=e(r,[["render",l]]);export{m as __pageData,u as default}; diff --git a/assets/deployment_production-build.md.BB2S1Aka.js b/assets/deployment_production-build.md.BB2S1Aka.js deleted file mode 100644 index d716007..0000000 --- a/assets/deployment_production-build.md.BB2S1Aka.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as i,c as e,o as s,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"프로덕션 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/production-build.md","filePath":"deployment/production-build.md"}'),l={name:"deployment/production-build.md"};function n(o,a,d,r,h,p){return s(),e("div",null,a[0]||(a[0]=[t(`

프로덕션 빌드

빌드 명령어

bash
npm run build:prod
-# 또는
-npm run build

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

빌드 최적화

  • 코드 압축
  • 트리 쉐이킹
  • 코드 분할
  • 에셋 최적화

배포

빌드된 dist/ 디렉토리를 웹 서버에 배포합니다.

환경 변수

프로덕션 환경 변수는 .env.production 파일에서 설정합니다.

`,11)]))}const k=i(l,[["render",n]]);export{u as __pageData,k as default}; diff --git a/assets/deployment_production-build.md.BB2S1Aka.lean.js b/assets/deployment_production-build.md.BB2S1Aka.lean.js deleted file mode 100644 index 0ab3f7f..0000000 --- a/assets/deployment_production-build.md.BB2S1Aka.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as e,o as s,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"프로덕션 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/production-build.md","filePath":"deployment/production-build.md"}'),l={name:"deployment/production-build.md"};function n(o,a,d,r,h,p){return s(),e("div",null,a[0]||(a[0]=[t("",11)]))}const k=i(l,[["render",n]]);export{u as __pageData,k as default}; diff --git a/assets/deployment_production-build.md.DhK3kycA.js b/assets/deployment_production-build.md.DhK3kycA.js new file mode 100644 index 0000000..13b623e --- /dev/null +++ b/assets/deployment_production-build.md.DhK3kycA.js @@ -0,0 +1,3 @@ +import{_ as i,c as e,o as s,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"프로덕션 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/production-build.md","filePath":"deployment/production-build.md"}'),l={name:"deployment/production-build.md"};function n(o,a,d,r,h,p){return s(),e("div",null,a[0]||(a[0]=[t(`

프로덕션 빌드

빌드 명령어

bash
npm run build:prod
+# 또는
+npm run build

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

빌드 최적화

  • 코드 압축
  • 트리 쉐이킹
  • 코드 분할
  • 에셋 최적화

배포

빌드된 dist/ 디렉토리를 웹 서버에 배포합니다.

환경 변수

프로덕션 환경 변수는 .env.production 파일에서 설정합니다.

`,11)]))}const k=i(l,[["render",n]]);export{u as __pageData,k as default}; diff --git a/assets/deployment_production-build.md.DhK3kycA.lean.js b/assets/deployment_production-build.md.DhK3kycA.lean.js new file mode 100644 index 0000000..c27b99a --- /dev/null +++ b/assets/deployment_production-build.md.DhK3kycA.lean.js @@ -0,0 +1 @@ +import{_ as i,c as e,o as s,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"프로덕션 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/production-build.md","filePath":"deployment/production-build.md"}'),l={name:"deployment/production-build.md"};function n(o,a,d,r,h,p){return s(),e("div",null,a[0]||(a[0]=[t("",11)]))}const k=i(l,[["render",n]]);export{u as __pageData,k as default}; diff --git a/assets/deployment_staging-build.md.BfUgjSDY.js b/assets/deployment_staging-build.md.BfUgjSDY.js deleted file mode 100644 index 4fb5b21..0000000 --- a/assets/deployment_staging-build.md.BfUgjSDY.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as i,aG as s}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"스테이징 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/staging-build.md","filePath":"deployment/staging-build.md"}'),n={name:"deployment/staging-build.md"};function l(o,a,d,r,h,p){return i(),t("div",null,a[0]||(a[0]=[s('

스테이징 빌드

빌드 명령어

bash
npm run build:staging

환경 변수

스테이징 환경 변수는 .env.staging 파일에서 설정합니다.

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

스테이징 서버 배포

빌드된 결과물을 스테이징 서버에 배포합니다.

',9)]))}const g=e(n,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/deployment_staging-build.md.BfUgjSDY.lean.js b/assets/deployment_staging-build.md.BfUgjSDY.lean.js deleted file mode 100644 index 2e198f3..0000000 --- a/assets/deployment_staging-build.md.BfUgjSDY.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as i,aG as s}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"스테이징 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/staging-build.md","filePath":"deployment/staging-build.md"}'),n={name:"deployment/staging-build.md"};function l(o,a,d,r,h,p){return i(),t("div",null,a[0]||(a[0]=[s("",9)]))}const g=e(n,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/deployment_staging-build.md.BqMLFd0c.js b/assets/deployment_staging-build.md.BqMLFd0c.js new file mode 100644 index 0000000..2ce5ea4 --- /dev/null +++ b/assets/deployment_staging-build.md.BqMLFd0c.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i,aG as s}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"스테이징 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/staging-build.md","filePath":"deployment/staging-build.md"}'),n={name:"deployment/staging-build.md"};function l(o,a,d,r,h,p){return i(),t("div",null,a[0]||(a[0]=[s('

스테이징 빌드

빌드 명령어

bash
npm run build:staging

환경 변수

스테이징 환경 변수는 .env.staging 파일에서 설정합니다.

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

스테이징 서버 배포

빌드된 결과물을 스테이징 서버에 배포합니다.

',9)]))}const g=e(n,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/deployment_staging-build.md.BqMLFd0c.lean.js b/assets/deployment_staging-build.md.BqMLFd0c.lean.js new file mode 100644 index 0000000..e078179 --- /dev/null +++ b/assets/deployment_staging-build.md.BqMLFd0c.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i,aG as s}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"스테이징 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"deployment/staging-build.md","filePath":"deployment/staging-build.md"}'),n={name:"deployment/staging-build.md"};function l(o,a,d,r,h,p){return i(),t("div",null,a[0]||(a[0]=[s("",9)]))}const g=e(n,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/development-guide_api_calling.md.DBfyrd8k.js b/assets/development-guide_api_calling.md.DBfyrd8k.js new file mode 100644 index 0000000..c1f8af0 --- /dev/null +++ b/assets/development-guide_api_calling.md.DBfyrd8k.js @@ -0,0 +1,44 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"API 호출 방법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/calling.md","filePath":"development-guide/api/calling.md"}'),p={name:"development-guide/api/calling.md"};function l(k,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

API 호출 방법

개요

프로젝트에서는 CustomAxios.js를 통해 API를 호출합니다.

기본 사용법

javascript
import axiosInstance from '@/CustomAxios.js'
+
+// GET 요청
+const response = await axiosInstance.get('/api/endpoint')
+
+// POST 요청
+const response = await axiosInstance.post('/api/endpoint', {
+  param1: 'value1',
+  param2: 'value2',
+})

응답 처리

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+  
+  if (response.status === 'S') {
+    // 성공 처리
+    console.log(response.data)
+  } else {
+    // 실패 처리
+    alert(response.message)
+  }
+} catch (error) {
+  console.error('에러:', error)
+}

프로시저 호출

백엔드 프로시저를 호출하는 경우:

javascript
const param = {
+  procedure: 'PROCEDURE_NAME',
+  params: {
+    V_P_PARAM1: 'value1',
+    V_P_PARAM2: 'value2',
+  },
+}
+
+const response = await axiosInstance.post('/api/procedure', param)

파일 업로드

javascript
const formData = new FormData()
+formData.append('file', file)
+formData.append('param', JSON.stringify({ name: 'test' }))
+
+const response = await axiosInstance.post('/api/upload', formData)

파일 다운로드

javascript
const response = await axiosInstance.post('/api/download', params, {
+  responseType: 'blob',
+})
+
+const url = window.URL.createObjectURL(new Blob([response.data]))
+const link = document.createElement('a')
+link.href = url
+link.setAttribute('download', response.data.fileName)
+document.body.appendChild(link)
+link.click()
+link.remove()
`,14)]))}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_calling.md.DBfyrd8k.lean.js b/assets/development-guide_api_calling.md.DBfyrd8k.lean.js new file mode 100644 index 0000000..88894b4 --- /dev/null +++ b/assets/development-guide_api_calling.md.DBfyrd8k.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"API 호출 방법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/calling.md","filePath":"development-guide/api/calling.md"}'),p={name:"development-guide/api/calling.md"};function l(k,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",14)]))}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_calling.md.Gn942Yzp.js b/assets/development-guide_api_calling.md.Gn942Yzp.js deleted file mode 100644 index c68fd3a..0000000 --- a/assets/development-guide_api_calling.md.Gn942Yzp.js +++ /dev/null @@ -1,44 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"API 호출 방법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/calling.md","filePath":"development-guide/api/calling.md"}'),p={name:"development-guide/api/calling.md"};function l(k,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

API 호출 방법

개요

프로젝트에서는 CustomAxios.js를 통해 API를 호출합니다.

기본 사용법

javascript
import axiosInstance from '@/CustomAxios.js'
-
-// GET 요청
-const response = await axiosInstance.get('/api/endpoint')
-
-// POST 요청
-const response = await axiosInstance.post('/api/endpoint', {
-  param1: 'value1',
-  param2: 'value2',
-})

응답 처리

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-  
-  if (response.status === 'S') {
-    // 성공 처리
-    console.log(response.data)
-  } else {
-    // 실패 처리
-    alert(response.message)
-  }
-} catch (error) {
-  console.error('에러:', error)
-}

프로시저 호출

백엔드 프로시저를 호출하는 경우:

javascript
const param = {
-  procedure: 'PROCEDURE_NAME',
-  params: {
-    V_P_PARAM1: 'value1',
-    V_P_PARAM2: 'value2',
-  },
-}
-
-const response = await axiosInstance.post('/api/procedure', param)

파일 업로드

javascript
const formData = new FormData()
-formData.append('file', file)
-formData.append('param', JSON.stringify({ name: 'test' }))
-
-const response = await axiosInstance.post('/api/upload', formData)

파일 다운로드

javascript
const response = await axiosInstance.post('/api/download', params, {
-  responseType: 'blob',
-})
-
-const url = window.URL.createObjectURL(new Blob([response.data]))
-const link = document.createElement('a')
-link.href = url
-link.setAttribute('download', response.data.fileName)
-document.body.appendChild(link)
-link.click()
-link.remove()
`,14)]))}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_calling.md.Gn942Yzp.lean.js b/assets/development-guide_api_calling.md.Gn942Yzp.lean.js deleted file mode 100644 index b8fd457..0000000 --- a/assets/development-guide_api_calling.md.Gn942Yzp.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"API 호출 방법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/calling.md","filePath":"development-guide/api/calling.md"}'),p={name:"development-guide/api/calling.md"};function l(k,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",14)]))}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_error-handling.md.BaN-2VCx.js b/assets/development-guide_api_error-handling.md.BaN-2VCx.js deleted file mode 100644 index b4ca605..0000000 --- a/assets/development-guide_api_error-handling.md.BaN-2VCx.js +++ /dev/null @@ -1,202 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"API 에러 처리","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/error-handling.md","filePath":"development-guide/api/error-handling.md"}'),k={name:"development-guide/api/error-handling.md"};function l(p,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

API 에러 처리

개요

API 호출 시 발생하는 에러를 처리하는 방법을 설명합니다.

기본 에러 처리

대부분의 에러는 CustomAxios.js의 응답 인터셉터에서 자동으로 처리됩니다. 하지만 컴포넌트에서 추가적인 에러 처리가 필요한 경우가 있습니다.

Try-Catch 사용

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-  
-  if (response.status === 'S') {
-    // 성공 처리
-    console.log('성공:', response.data)
-  } else {
-    // 실패 처리
-    console.error('실패:', response.message)
-  }
-} catch (error) {
-  // 에러 처리
-  console.error('에러 발생:', error)
-}

에러 타입별 처리

401/419 에러 (인증 실패)

인증 실패 에러는 자동으로 토큰 갱신을 시도합니다. 갱신 실패 시 로그인 페이지로 리다이렉트됩니다.

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  // 401/419 에러는 자동으로 처리되므로
-  // 특별한 처리가 필요 없습니다
-  if (error.response?.status === 401) {
-    // 이미 로그인 페이지로 리다이렉트됨
-  }
-}

400 에러 (잘못된 요청)

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  if (error.response?.status === 400) {
-    // 잘못된 요청 처리
-    const message = error.response?.data?.message || '잘못된 요청입니다.'
-    alert(message)
-    // 폼 검증 오류 표시 등
-  }
-}

404 에러 (리소스 없음)

404 에러를 조용히 처리하려면 silentError 옵션을 사용합니다:

javascript
try {
-  const response = await axiosInstance.get('/api/endpoint', {
-    silentError: true, // 404 에러 시 alert 표시 안 함
-  })
-} catch (error) {
-  if (error.response?.status === 404) {
-    // 조용히 처리
-    console.warn('리소스를 찾을 수 없습니다.')
-  }
-}

500 에러 (서버 오류)

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  if (error.response?.status === 500) {
-    // 서버 오류 처리
-    console.error('서버 오류:', error.response.data)
-    alert('서버 오류가 발생했습니다. 관리자에게 문의하세요.')
-  }
-}

타임아웃 에러

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
-    // 타임아웃 처리
-    alert('서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해주세요.')
-  }
-}

네트워크 오류

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  if (!error.response) {
-    // 네트워크 오류 (서버에 도달하지 못함)
-    alert('네트워크 연결을 확인해주세요.')
-  }
-}

커스텀 에러 처리

에러 타입 확인

javascript
catch (error) {
-  if (axios.isAxiosError(error)) {
-    // Axios 에러
-    console.error('Axios 에러:', error.message)
-    console.error('상태 코드:', error.response?.status)
-    console.error('응답 데이터:', error.response?.data)
-  } else {
-    // 기타 에러
-    console.error('에러:', error)
-  }
-}

에러 메시지 추출

javascript
catch (error) {
-  const message = error.response?.data?.message || 
-                  error.response?.data?.error || 
-                  error.message || 
-                  '알 수 없는 오류가 발생했습니다.'
-  
-  console.error('에러 메시지:', message)
-  alert(message)
-}

재시도 로직

일시적인 네트워크 오류의 경우 재시도할 수 있습니다:

javascript
const retryRequest = async (requestFn, maxRetries = 3) => {
-  for (let i = 0; i < maxRetries; i++) {
-    try {
-      return await requestFn()
-    } catch (error) {
-      if (i === maxRetries - 1) throw error
-      
-      // 재시도 전 대기 (지수 백오프)
-      await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, i)))
-    }
-  }
-}
-
-// 사용
-const response = await retryRequest(() => 
-  axiosInstance.post('/api/endpoint', params)
-)

에러 로깅

중요한 에러는 로그 스토어에 기록할 수 있습니다:

javascript
import { useLogStore } from '@/utils/stores/logStore.js'
-
-const logStore = useLogStore()
-
-try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  // 에러 로깅
-  console.error('API 에러:', {
-    url: '/api/endpoint',
-    error: error.message,
-    status: error.response?.status,
-  })
-  
-  // 필요시 추가 로깅
-  // logStore.addErrorLog(error)
-}

사용자 친화적 에러 메시지

에러 메시지를 사용자에게 친화적으로 표시합니다:

javascript
const getErrorMessage = (error) => {
-  if (!error.response) {
-    return '네트워크 연결을 확인해주세요.'
-  }
-  
-  const status = error.response.status
-  const message = error.response.data?.message || error.response.data?.error
-  
-  switch (status) {
-    case 400:
-      return message || '잘못된 요청입니다.'
-    case 401:
-      return '인증이 필요합니다.'
-    case 403:
-      return '접근 권한이 없습니다.'
-    case 404:
-      return '요청한 리소스를 찾을 수 없습니다.'
-    case 500:
-      return '서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.'
-    default:
-      return message || '오류가 발생했습니다.'
-  }
-}
-
-try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  const message = getErrorMessage(error)
-  alert(message)
-}

Vuetify Snackbar 사용

Alert 대신 Vuetify의 Snackbar를 사용할 수 있습니다:

vue
<template>
-  <v-snackbar
-    v-model="snackbar.show"
-    :color="snackbar.color"
-    :timeout="3000"
-  >
-    {{ snackbar.text }}
-  </v-snackbar>
-</template>
-
-<script setup>
-const snackbar = ref({
-  show: false,
-  text: '',
-  color: 'error',
-})
-
-const showError = (message) => {
-  snackbar.value = {
-    show: true,
-    text: message,
-    color: 'error',
-  }
-}
-
-try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  showError(getErrorMessage(error))
-}
-</script>

에러 처리 유틸리티 함수

공통으로 사용할 수 있는 에러 처리 함수를 만들 수 있습니다:

javascript
// utils/errorHandler.js
-export const handleApiError = (error, options = {}) => {
-  const {
-    showAlert = true,
-    customMessage = null,
-    onError = null,
-  } = options
-  
-  const message = customMessage || getErrorMessage(error)
-  
-  if (showAlert) {
-    alert(message)
-  }
-  
-  if (onError && typeof onError === 'function') {
-    onError(error, message)
-  }
-  
-  return message
-}
-
-// 사용
-try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-} catch (error) {
-  handleApiError(error, {
-    showAlert: true,
-    onError: (err, msg) => {
-      console.error('에러 처리:', err, msg)
-    },
-  })
-}

베스트 프랙티스

  1. 항상 Try-Catch 사용: 모든 API 호출에 try-catch를 사용하세요.
  2. 명확한 에러 메시지: 사용자에게 명확한 에러 메시지를 표시하세요.
  3. 에러 로깅: 중요한 에러는 로그에 기록하세요.
  4. 재시도 로직: 일시적인 오류는 재시도 로직을 구현하세요.
  5. 에러 타입 확인: 에러 타입에 따라 적절한 처리를 하세요.

관련 문서

`,46)]))}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_error-handling.md.BaN-2VCx.lean.js b/assets/development-guide_api_error-handling.md.BaN-2VCx.lean.js deleted file mode 100644 index 1092b1f..0000000 --- a/assets/development-guide_api_error-handling.md.BaN-2VCx.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"API 에러 처리","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/error-handling.md","filePath":"development-guide/api/error-handling.md"}'),k={name:"development-guide/api/error-handling.md"};function l(p,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",46)]))}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_error-handling.md.CarmXak_.js b/assets/development-guide_api_error-handling.md.CarmXak_.js new file mode 100644 index 0000000..23e6f31 --- /dev/null +++ b/assets/development-guide_api_error-handling.md.CarmXak_.js @@ -0,0 +1,202 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"API 에러 처리","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/error-handling.md","filePath":"development-guide/api/error-handling.md"}'),k={name:"development-guide/api/error-handling.md"};function l(p,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

API 에러 처리

개요

API 호출 시 발생하는 에러를 처리하는 방법을 설명합니다.

기본 에러 처리

대부분의 에러는 CustomAxios.js의 응답 인터셉터에서 자동으로 처리됩니다. 하지만 컴포넌트에서 추가적인 에러 처리가 필요한 경우가 있습니다.

Try-Catch 사용

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+  
+  if (response.status === 'S') {
+    // 성공 처리
+    console.log('성공:', response.data)
+  } else {
+    // 실패 처리
+    console.error('실패:', response.message)
+  }
+} catch (error) {
+  // 에러 처리
+  console.error('에러 발생:', error)
+}

에러 타입별 처리

401/419 에러 (인증 실패)

인증 실패 에러는 자동으로 토큰 갱신을 시도합니다. 갱신 실패 시 로그인 페이지로 리다이렉트됩니다.

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  // 401/419 에러는 자동으로 처리되므로
+  // 특별한 처리가 필요 없습니다
+  if (error.response?.status === 401) {
+    // 이미 로그인 페이지로 리다이렉트됨
+  }
+}

400 에러 (잘못된 요청)

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  if (error.response?.status === 400) {
+    // 잘못된 요청 처리
+    const message = error.response?.data?.message || '잘못된 요청입니다.'
+    alert(message)
+    // 폼 검증 오류 표시 등
+  }
+}

404 에러 (리소스 없음)

404 에러를 조용히 처리하려면 silentError 옵션을 사용합니다:

javascript
try {
+  const response = await axiosInstance.get('/api/endpoint', {
+    silentError: true, // 404 에러 시 alert 표시 안 함
+  })
+} catch (error) {
+  if (error.response?.status === 404) {
+    // 조용히 처리
+    console.warn('리소스를 찾을 수 없습니다.')
+  }
+}

500 에러 (서버 오류)

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  if (error.response?.status === 500) {
+    // 서버 오류 처리
+    console.error('서버 오류:', error.response.data)
+    alert('서버 오류가 발생했습니다. 관리자에게 문의하세요.')
+  }
+}

타임아웃 에러

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
+    // 타임아웃 처리
+    alert('서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해주세요.')
+  }
+}

네트워크 오류

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  if (!error.response) {
+    // 네트워크 오류 (서버에 도달하지 못함)
+    alert('네트워크 연결을 확인해주세요.')
+  }
+}

커스텀 에러 처리

에러 타입 확인

javascript
catch (error) {
+  if (axios.isAxiosError(error)) {
+    // Axios 에러
+    console.error('Axios 에러:', error.message)
+    console.error('상태 코드:', error.response?.status)
+    console.error('응답 데이터:', error.response?.data)
+  } else {
+    // 기타 에러
+    console.error('에러:', error)
+  }
+}

에러 메시지 추출

javascript
catch (error) {
+  const message = error.response?.data?.message || 
+                  error.response?.data?.error || 
+                  error.message || 
+                  '알 수 없는 오류가 발생했습니다.'
+  
+  console.error('에러 메시지:', message)
+  alert(message)
+}

재시도 로직

일시적인 네트워크 오류의 경우 재시도할 수 있습니다:

javascript
const retryRequest = async (requestFn, maxRetries = 3) => {
+  for (let i = 0; i < maxRetries; i++) {
+    try {
+      return await requestFn()
+    } catch (error) {
+      if (i === maxRetries - 1) throw error
+      
+      // 재시도 전 대기 (지수 백오프)
+      await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, i)))
+    }
+  }
+}
+
+// 사용
+const response = await retryRequest(() => 
+  axiosInstance.post('/api/endpoint', params)
+)

에러 로깅

중요한 에러는 로그 스토어에 기록할 수 있습니다:

javascript
import { useLogStore } from '@/utils/stores/logStore.js'
+
+const logStore = useLogStore()
+
+try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  // 에러 로깅
+  console.error('API 에러:', {
+    url: '/api/endpoint',
+    error: error.message,
+    status: error.response?.status,
+  })
+  
+  // 필요시 추가 로깅
+  // logStore.addErrorLog(error)
+}

사용자 친화적 에러 메시지

에러 메시지를 사용자에게 친화적으로 표시합니다:

javascript
const getErrorMessage = (error) => {
+  if (!error.response) {
+    return '네트워크 연결을 확인해주세요.'
+  }
+  
+  const status = error.response.status
+  const message = error.response.data?.message || error.response.data?.error
+  
+  switch (status) {
+    case 400:
+      return message || '잘못된 요청입니다.'
+    case 401:
+      return '인증이 필요합니다.'
+    case 403:
+      return '접근 권한이 없습니다.'
+    case 404:
+      return '요청한 리소스를 찾을 수 없습니다.'
+    case 500:
+      return '서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.'
+    default:
+      return message || '오류가 발생했습니다.'
+  }
+}
+
+try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  const message = getErrorMessage(error)
+  alert(message)
+}

Vuetify Snackbar 사용

Alert 대신 Vuetify의 Snackbar를 사용할 수 있습니다:

vue
<template>
+  <v-snackbar
+    v-model="snackbar.show"
+    :color="snackbar.color"
+    :timeout="3000"
+  >
+    {{ snackbar.text }}
+  </v-snackbar>
+</template>
+
+<script setup>
+const snackbar = ref({
+  show: false,
+  text: '',
+  color: 'error',
+})
+
+const showError = (message) => {
+  snackbar.value = {
+    show: true,
+    text: message,
+    color: 'error',
+  }
+}
+
+try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  showError(getErrorMessage(error))
+}
+</script>

에러 처리 유틸리티 함수

공통으로 사용할 수 있는 에러 처리 함수를 만들 수 있습니다:

javascript
// utils/errorHandler.js
+export const handleApiError = (error, options = {}) => {
+  const {
+    showAlert = true,
+    customMessage = null,
+    onError = null,
+  } = options
+  
+  const message = customMessage || getErrorMessage(error)
+  
+  if (showAlert) {
+    alert(message)
+  }
+  
+  if (onError && typeof onError === 'function') {
+    onError(error, message)
+  }
+  
+  return message
+}
+
+// 사용
+try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+} catch (error) {
+  handleApiError(error, {
+    showAlert: true,
+    onError: (err, msg) => {
+      console.error('에러 처리:', err, msg)
+    },
+  })
+}

베스트 프랙티스

  1. 항상 Try-Catch 사용: 모든 API 호출에 try-catch를 사용하세요.
  2. 명확한 에러 메시지: 사용자에게 명확한 에러 메시지를 표시하세요.
  3. 에러 로깅: 중요한 에러는 로그에 기록하세요.
  4. 재시도 로직: 일시적인 오류는 재시도 로직을 구현하세요.
  5. 에러 타입 확인: 에러 타입에 따라 적절한 처리를 하세요.

관련 문서

`,46)]))}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_error-handling.md.CarmXak_.lean.js b/assets/development-guide_api_error-handling.md.CarmXak_.lean.js new file mode 100644 index 0000000..0e1c5bf --- /dev/null +++ b/assets/development-guide_api_error-handling.md.CarmXak_.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"API 에러 처리","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/error-handling.md","filePath":"development-guide/api/error-handling.md"}'),k={name:"development-guide/api/error-handling.md"};function l(p,s,t,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",46)]))}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_file.md.CyZhnp4J.js b/assets/development-guide_api_file.md.CyZhnp4J.js new file mode 100644 index 0000000..7aebd0d --- /dev/null +++ b/assets/development-guide_api_file.md.CyZhnp4J.js @@ -0,0 +1,36 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"파일 업로드/다운로드","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/file.md","filePath":"development-guide/api/file.md"}'),l={name:"development-guide/api/file.md"};function k(t,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

파일 업로드/다운로드

파일 업로드

FormData 사용

javascript
const formData = new FormData()
+formData.append('file', file)
+formData.append('param', JSON.stringify({ name: 'test' }))
+
+const response = await axiosInstance.post('/api/upload', formData)

암호화된 파일 업로드

암호화가 활성화된 경우 파일은 자동으로 암호화됩니다.

파일 다운로드

Blob 응답

javascript
const response = await axiosInstance.post('/api/download', params, {
+  responseType: 'blob',
+})
+
+// response.data.fileName에 파일명이 포함됨
+const url = window.URL.createObjectURL(new Blob([response.data]))
+const link = document.createElement('a')
+link.href = url
+link.setAttribute('download', response.data.fileName)
+document.body.appendChild(link)
+link.click()
+link.remove()

FileSaver 사용

javascript
import FileSaver from 'file-saver'
+
+const response = await axiosInstance.post('/api/download', params, {
+  responseType: 'blob',
+})
+
+const blob = new Blob([response.data])
+FileSaver.saveAs(blob, response.data.fileName)

Excel 다운로드

ExcelJS를 사용하여 Excel 파일을 생성할 수 있습니다:

javascript
import ExcelJS from 'exceljs'
+import FileSaver from 'file-saver'
+
+const workbook = new ExcelJS.Workbook()
+const worksheet = workbook.addWorksheet('Sheet1')
+
+// 데이터 추가
+worksheet.addRow(['이름', '나이'])
+worksheet.addRow(['홍길동', 30])
+
+// 파일 생성
+const buffer = await workbook.xlsx.writeBuffer()
+const blob = new Blob([buffer])
+FileSaver.saveAs(blob, 'data.xlsx')
`,14)]))}const y=i(l,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_file.md.CyZhnp4J.lean.js b/assets/development-guide_api_file.md.CyZhnp4J.lean.js new file mode 100644 index 0000000..36d161a --- /dev/null +++ b/assets/development-guide_api_file.md.CyZhnp4J.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"파일 업로드/다운로드","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/file.md","filePath":"development-guide/api/file.md"}'),l={name:"development-guide/api/file.md"};function k(t,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",14)]))}const y=i(l,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_file.md.DbuI059R.js b/assets/development-guide_api_file.md.DbuI059R.js deleted file mode 100644 index 881831b..0000000 --- a/assets/development-guide_api_file.md.DbuI059R.js +++ /dev/null @@ -1,36 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"파일 업로드/다운로드","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/file.md","filePath":"development-guide/api/file.md"}'),l={name:"development-guide/api/file.md"};function k(t,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

파일 업로드/다운로드

파일 업로드

FormData 사용

javascript
const formData = new FormData()
-formData.append('file', file)
-formData.append('param', JSON.stringify({ name: 'test' }))
-
-const response = await axiosInstance.post('/api/upload', formData)

암호화된 파일 업로드

암호화가 활성화된 경우 파일은 자동으로 암호화됩니다.

파일 다운로드

Blob 응답

javascript
const response = await axiosInstance.post('/api/download', params, {
-  responseType: 'blob',
-})
-
-// response.data.fileName에 파일명이 포함됨
-const url = window.URL.createObjectURL(new Blob([response.data]))
-const link = document.createElement('a')
-link.href = url
-link.setAttribute('download', response.data.fileName)
-document.body.appendChild(link)
-link.click()
-link.remove()

FileSaver 사용

javascript
import FileSaver from 'file-saver'
-
-const response = await axiosInstance.post('/api/download', params, {
-  responseType: 'blob',
-})
-
-const blob = new Blob([response.data])
-FileSaver.saveAs(blob, response.data.fileName)

Excel 다운로드

ExcelJS를 사용하여 Excel 파일을 생성할 수 있습니다:

javascript
import ExcelJS from 'exceljs'
-import FileSaver from 'file-saver'
-
-const workbook = new ExcelJS.Workbook()
-const worksheet = workbook.addWorksheet('Sheet1')
-
-// 데이터 추가
-worksheet.addRow(['이름', '나이'])
-worksheet.addRow(['홍길동', 30])
-
-// 파일 생성
-const buffer = await workbook.xlsx.writeBuffer()
-const blob = new Blob([buffer])
-FileSaver.saveAs(blob, 'data.xlsx')
`,14)]))}const y=i(l,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_file.md.DbuI059R.lean.js b/assets/development-guide_api_file.md.DbuI059R.lean.js deleted file mode 100644 index de5222e..0000000 --- a/assets/development-guide_api_file.md.DbuI059R.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"파일 업로드/다운로드","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/file.md","filePath":"development-guide/api/file.md"}'),l={name:"development-guide/api/file.md"};function k(t,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",14)]))}const y=i(l,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_api_request-response.md.C_9lfdyZ.js b/assets/development-guide_api_request-response.md.C_9lfdyZ.js new file mode 100644 index 0000000..afaf342 --- /dev/null +++ b/assets/development-guide_api_request-response.md.C_9lfdyZ.js @@ -0,0 +1,26 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"요청/응답 처리","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/request-response.md","filePath":"development-guide/api/request-response.md"}'),t={name:"development-guide/api/request-response.md"};function p(l,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

요청/응답 처리

요청 처리

기본 요청

javascript
const response = await axiosInstance.post('/api/endpoint', {
+  param1: 'value1',
+  param2: 'value2',
+})

프로시저 호출

javascript
const param = {
+  procedure: 'PROCEDURE_NAME',
+  params: {
+    V_P_PARAM1: 'value1',
+    V_P_PARAM2: 'value2',
+  },
+}
+
+const response = await axiosInstance.post('/api/procedure', param)

응답 처리

성공 응답

javascript
if (response.status === 'S') {
+  console.log('성공:', response.data)
+} else {
+  console.error('실패:', response.message)
+}

응답 구조

javascript
{
+  status: 'S',      // S: 성공, F: 실패
+  message: '메시지',
+  data: { /* 데이터 */ },
+}

에러 처리

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+  // 성공 처리
+} catch (error) {
+  // 에러 처리
+  console.error('에러:', error)
+}
`,13)]))}const o=i(t,[["render",p]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_api_request-response.md.C_9lfdyZ.lean.js b/assets/development-guide_api_request-response.md.C_9lfdyZ.lean.js new file mode 100644 index 0000000..b0d45a6 --- /dev/null +++ b/assets/development-guide_api_request-response.md.C_9lfdyZ.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"요청/응답 처리","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/request-response.md","filePath":"development-guide/api/request-response.md"}'),t={name:"development-guide/api/request-response.md"};function p(l,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",13)]))}const o=i(t,[["render",p]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_api_request-response.md.zjH70F9s.js b/assets/development-guide_api_request-response.md.zjH70F9s.js deleted file mode 100644 index 4265ee3..0000000 --- a/assets/development-guide_api_request-response.md.zjH70F9s.js +++ /dev/null @@ -1,26 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"요청/응답 처리","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/request-response.md","filePath":"development-guide/api/request-response.md"}'),t={name:"development-guide/api/request-response.md"};function p(l,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

요청/응답 처리

요청 처리

기본 요청

javascript
const response = await axiosInstance.post('/api/endpoint', {
-  param1: 'value1',
-  param2: 'value2',
-})

프로시저 호출

javascript
const param = {
-  procedure: 'PROCEDURE_NAME',
-  params: {
-    V_P_PARAM1: 'value1',
-    V_P_PARAM2: 'value2',
-  },
-}
-
-const response = await axiosInstance.post('/api/procedure', param)

응답 처리

성공 응답

javascript
if (response.status === 'S') {
-  console.log('성공:', response.data)
-} else {
-  console.error('실패:', response.message)
-}

응답 구조

javascript
{
-  status: 'S',      // S: 성공, F: 실패
-  message: '메시지',
-  data: { /* 데이터 */ },
-}

에러 처리

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-  // 성공 처리
-} catch (error) {
-  // 에러 처리
-  console.error('에러:', error)
-}
`,13)]))}const o=i(t,[["render",p]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_api_request-response.md.zjH70F9s.lean.js b/assets/development-guide_api_request-response.md.zjH70F9s.lean.js deleted file mode 100644 index 652c34f..0000000 --- a/assets/development-guide_api_request-response.md.zjH70F9s.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"요청/응답 처리","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/api/request-response.md","filePath":"development-guide/api/request-response.md"}'),t={name:"development-guide/api/request-response.md"};function p(l,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",13)]))}const o=i(t,[["render",p]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_conventions_file-structure.md.D8S9qoNZ.js b/assets/development-guide_conventions_file-structure.md.D8S9qoNZ.js deleted file mode 100644 index 409cb7c..0000000 --- a/assets/development-guide_conventions_file-structure.md.D8S9qoNZ.js +++ /dev/null @@ -1,10 +0,0 @@ -import{_ as s,c as e,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"파일 구조 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/file-structure.md","filePath":"development-guide/conventions/file-structure.md"}'),i={name:"development-guide/conventions/file-structure.md"};function l(p,a,o,r,c,d){return n(),e("div",null,a[0]||(a[0]=[t(`

파일 구조 규칙

컴포넌트 파일 구조

MyComponent.vue
-├── <template>      # 템플릿
-├── <script setup>  # 스크립트
-└── <style scoped>  # 스타일

디렉토리 구조

페이지 컴포넌트

src/views/
-├── ess/
-│   ├── persadm/
-│   │   └── MyPage.vue

공통 컴포넌트

src/views/ui/components/
-├── common/
-│   └── MyComponent.vue

스토어

src/utils/stores/
-└── myStore.js

파일 조직

  1. 관련 파일 그룹화: 관련된 파일들을 같은 디렉토리에 배치
  2. 명확한 이름: 파일명이 내용을 명확히 표현
  3. 일관성: 프로젝트 전체에서 일관된 구조 유지
`,12)]))}const g=s(i,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/development-guide_conventions_file-structure.md.D8S9qoNZ.lean.js b/assets/development-guide_conventions_file-structure.md.D8S9qoNZ.lean.js deleted file mode 100644 index 46dcd87..0000000 --- a/assets/development-guide_conventions_file-structure.md.D8S9qoNZ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as e,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"파일 구조 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/file-structure.md","filePath":"development-guide/conventions/file-structure.md"}'),i={name:"development-guide/conventions/file-structure.md"};function l(p,a,o,r,c,d){return n(),e("div",null,a[0]||(a[0]=[t("",12)]))}const g=s(i,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/development-guide_conventions_file-structure.md.JR2Dg672.js b/assets/development-guide_conventions_file-structure.md.JR2Dg672.js new file mode 100644 index 0000000..9544dac --- /dev/null +++ b/assets/development-guide_conventions_file-structure.md.JR2Dg672.js @@ -0,0 +1,10 @@ +import{_ as s,c as e,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"파일 구조 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/file-structure.md","filePath":"development-guide/conventions/file-structure.md"}'),i={name:"development-guide/conventions/file-structure.md"};function l(p,a,o,r,c,d){return n(),e("div",null,a[0]||(a[0]=[t(`

파일 구조 규칙

컴포넌트 파일 구조

MyComponent.vue
+├── <template>      # 템플릿
+├── <script setup>  # 스크립트
+└── <style scoped>  # 스타일

디렉토리 구조

페이지 컴포넌트

src/views/
+├── ess/
+│   ├── persadm/
+│   │   └── MyPage.vue

공통 컴포넌트

src/views/ui/components/
+├── common/
+│   └── MyComponent.vue

스토어

src/utils/stores/
+└── myStore.js

파일 조직

  1. 관련 파일 그룹화: 관련된 파일들을 같은 디렉토리에 배치
  2. 명확한 이름: 파일명이 내용을 명확히 표현
  3. 일관성: 프로젝트 전체에서 일관된 구조 유지
`,12)]))}const g=s(i,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/development-guide_conventions_file-structure.md.JR2Dg672.lean.js b/assets/development-guide_conventions_file-structure.md.JR2Dg672.lean.js new file mode 100644 index 0000000..12b8830 --- /dev/null +++ b/assets/development-guide_conventions_file-structure.md.JR2Dg672.lean.js @@ -0,0 +1 @@ +import{_ as s,c as e,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"파일 구조 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/file-structure.md","filePath":"development-guide/conventions/file-structure.md"}'),i={name:"development-guide/conventions/file-structure.md"};function l(p,a,o,r,c,d){return n(),e("div",null,a[0]||(a[0]=[t("",12)]))}const g=s(i,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/development-guide_conventions_js-ts.md.Bl6FqAZq.js b/assets/development-guide_conventions_js-ts.md.Bl6FqAZq.js deleted file mode 100644 index 65169ef..0000000 --- a/assets/development-guide_conventions_js-ts.md.Bl6FqAZq.js +++ /dev/null @@ -1,23 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"JavaScript/TypeScript 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/js-ts.md","filePath":"development-guide/conventions/js-ts.md"}'),h={name:"development-guide/conventions/js-ts.md"};function l(p,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

JavaScript/TypeScript 규칙

코딩 스타일

  • 들여쓰기: 2칸 스페이스
  • 세미콜론: 사용
  • 따옴표: 작은따옴표 사용

함수 작성

javascript
// 화살표 함수
-const handleClick = () => {
-  console.log('클릭')
-}
-
-// 일반 함수
-function handleSubmit() {
-  console.log('제출')
-}

비동기 처리

javascript
// async/await 사용
-const fetchData = async () => {
-  try {
-    const response = await axiosInstance.post('/api/endpoint', params)
-    return response.data
-  } catch (error) {
-    console.error('에러:', error)
-    throw error
-  }
-}

에러 처리

항상 try-catch를 사용하여 에러를 처리합니다:

javascript
try {
-  // 코드
-} catch (error) {
-  console.error('에러:', error)
-  // 에러 처리
-}
`,10)]))}const o=i(h,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/development-guide_conventions_js-ts.md.Bl6FqAZq.lean.js b/assets/development-guide_conventions_js-ts.md.Bl6FqAZq.lean.js deleted file mode 100644 index 10c8fda..0000000 --- a/assets/development-guide_conventions_js-ts.md.Bl6FqAZq.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"JavaScript/TypeScript 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/js-ts.md","filePath":"development-guide/conventions/js-ts.md"}'),h={name:"development-guide/conventions/js-ts.md"};function l(p,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",10)]))}const o=i(h,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/development-guide_conventions_js-ts.md.Cuu73fsu.js b/assets/development-guide_conventions_js-ts.md.Cuu73fsu.js new file mode 100644 index 0000000..f584d82 --- /dev/null +++ b/assets/development-guide_conventions_js-ts.md.Cuu73fsu.js @@ -0,0 +1,23 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"JavaScript/TypeScript 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/js-ts.md","filePath":"development-guide/conventions/js-ts.md"}'),h={name:"development-guide/conventions/js-ts.md"};function l(p,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

JavaScript/TypeScript 규칙

코딩 스타일

  • 들여쓰기: 2칸 스페이스
  • 세미콜론: 사용
  • 따옴표: 작은따옴표 사용

함수 작성

javascript
// 화살표 함수
+const handleClick = () => {
+  console.log('클릭')
+}
+
+// 일반 함수
+function handleSubmit() {
+  console.log('제출')
+}

비동기 처리

javascript
// async/await 사용
+const fetchData = async () => {
+  try {
+    const response = await axiosInstance.post('/api/endpoint', params)
+    return response.data
+  } catch (error) {
+    console.error('에러:', error)
+    throw error
+  }
+}

에러 처리

항상 try-catch를 사용하여 에러를 처리합니다:

javascript
try {
+  // 코드
+} catch (error) {
+  console.error('에러:', error)
+  // 에러 처리
+}
`,10)]))}const o=i(h,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/development-guide_conventions_js-ts.md.Cuu73fsu.lean.js b/assets/development-guide_conventions_js-ts.md.Cuu73fsu.lean.js new file mode 100644 index 0000000..62ad686 --- /dev/null +++ b/assets/development-guide_conventions_js-ts.md.Cuu73fsu.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"JavaScript/TypeScript 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/js-ts.md","filePath":"development-guide/conventions/js-ts.md"}'),h={name:"development-guide/conventions/js-ts.md"};function l(p,s,e,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",10)]))}const o=i(h,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/development-guide_conventions_naming.md.C1bIGx7k.js b/assets/development-guide_conventions_naming.md.C1bIGx7k.js deleted file mode 100644 index cca44e8..0000000 --- a/assets/development-guide_conventions_naming.md.C1bIGx7k.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"네이밍 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/naming.md","filePath":"development-guide/conventions/naming.md"}'),l={name:"development-guide/conventions/naming.md"};function c(r,e,d,i,s,m){return t(),a("div",null,e[0]||(e[0]=[n('

네이밍 규칙

파일명

  • 컴포넌트: PascalCase (예: MyComponent.vue)
  • 유틸리티: camelCase (예: common.js)
  • 스토어: camelCase + Store (예: authStore.js)

변수명

  • 일반 변수: camelCase (예: userName)
  • 상수: UPPER_SNAKE_CASE (예: MAX_COUNT)
  • 프라이빗 변수: _ 접두사 (예: _privateVar)

함수명

  • 일반 함수: camelCase (예: handleClick)
  • 이벤트 핸들러: handle 또는 on 접두사 (예: handleSubmit, onClick)
  • 유틸리티 함수: gf 접두사 (예: gfIsEmpty, gfFormatDate)

컴포넌트명

  • 컴포넌트: PascalCase (예: SelectBoxSQL)
  • Props: camelCase (예: modelValue, optionLabel)

CSS 클래스명

  • BEM 방식 권장: block__element--modifier
  • 또는 kebab-case: my-component
',11)]))}const u=o(l,[["render",c]]);export{h as __pageData,u as default}; diff --git a/assets/development-guide_conventions_naming.md.C1bIGx7k.lean.js b/assets/development-guide_conventions_naming.md.C1bIGx7k.lean.js deleted file mode 100644 index 80986c2..0000000 --- a/assets/development-guide_conventions_naming.md.C1bIGx7k.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"네이밍 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/naming.md","filePath":"development-guide/conventions/naming.md"}'),l={name:"development-guide/conventions/naming.md"};function c(r,e,d,i,s,m){return t(),a("div",null,e[0]||(e[0]=[n("",11)]))}const u=o(l,[["render",c]]);export{h as __pageData,u as default}; diff --git a/assets/development-guide_conventions_naming.md.CN4SDtk_.js b/assets/development-guide_conventions_naming.md.CN4SDtk_.js new file mode 100644 index 0000000..e9e3a51 --- /dev/null +++ b/assets/development-guide_conventions_naming.md.CN4SDtk_.js @@ -0,0 +1 @@ +import{_ as o,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"네이밍 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/naming.md","filePath":"development-guide/conventions/naming.md"}'),l={name:"development-guide/conventions/naming.md"};function c(r,e,d,i,s,m){return t(),a("div",null,e[0]||(e[0]=[n('

네이밍 규칙

파일명

  • 컴포넌트: PascalCase (예: MyComponent.vue)
  • 유틸리티: camelCase (예: common.js)
  • 스토어: camelCase + Store (예: authStore.js)

변수명

  • 일반 변수: camelCase (예: userName)
  • 상수: UPPER_SNAKE_CASE (예: MAX_COUNT)
  • 프라이빗 변수: _ 접두사 (예: _privateVar)

함수명

  • 일반 함수: camelCase (예: handleClick)
  • 이벤트 핸들러: handle 또는 on 접두사 (예: handleSubmit, onClick)
  • 유틸리티 함수: gf 접두사 (예: gfIsEmpty, gfFormatDate)

컴포넌트명

  • 컴포넌트: PascalCase (예: SelectBoxSQL)
  • Props: camelCase (예: modelValue, optionLabel)

CSS 클래스명

  • BEM 방식 권장: block__element--modifier
  • 또는 kebab-case: my-component
',11)]))}const u=o(l,[["render",c]]);export{h as __pageData,u as default}; diff --git a/assets/development-guide_conventions_naming.md.CN4SDtk_.lean.js b/assets/development-guide_conventions_naming.md.CN4SDtk_.lean.js new file mode 100644 index 0000000..e525243 --- /dev/null +++ b/assets/development-guide_conventions_naming.md.CN4SDtk_.lean.js @@ -0,0 +1 @@ +import{_ as o,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"네이밍 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/naming.md","filePath":"development-guide/conventions/naming.md"}'),l={name:"development-guide/conventions/naming.md"};function c(r,e,d,i,s,m){return t(),a("div",null,e[0]||(e[0]=[n("",11)]))}const u=o(l,[["render",c]]);export{h as __pageData,u as default}; diff --git a/assets/development-guide_conventions_vue.md.Ca7EUAYF.js b/assets/development-guide_conventions_vue.md.Ca7EUAYF.js deleted file mode 100644 index a41d84b..0000000 --- a/assets/development-guide_conventions_vue.md.Ca7EUAYF.js +++ /dev/null @@ -1,33 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Vue 컴포넌트 작성 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/vue.md","filePath":"development-guide/conventions/vue.md"}'),l={name:"development-guide/conventions/vue.md"};function h(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

Vue 컴포넌트 작성 규칙

컴포넌트 구조

vue
<template>
-  <!-- 템플릿 -->
-</template>
-
-<script setup>
-// 스크립트
-</script>
-
-<style scoped lang="scss">
-// 스타일
-</style>

네이밍

  • 컴포넌트 파일: PascalCase (예: MyComponent.vue)
  • 변수: camelCase (예: userName)
  • 상수: UPPER_SNAKE_CASE (예: MAX_COUNT)

Props 정의

vue
<script setup>
-const props = defineProps({
-  title: {
-    type: String,
-    required: true,
-  },
-  count: {
-    type: Number,
-    default: 0,
-  },
-})
-</script>

Emits 정의

vue
<script setup>
-const emit = defineEmits(['update:modelValue', 'change'])
-</script>

반응형 변수

vue
<script setup>
-import { ref, computed, watch } from 'vue'
-
-const count = ref(0)
-const doubled = computed(() => count.value * 2)
-
-watch(count, (newVal) => {
-  console.log('카운트 변경:', newVal)
-})
-</script>
`,11)]))}const c=i(l,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/development-guide_conventions_vue.md.Ca7EUAYF.lean.js b/assets/development-guide_conventions_vue.md.Ca7EUAYF.lean.js deleted file mode 100644 index c31762d..0000000 --- a/assets/development-guide_conventions_vue.md.Ca7EUAYF.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Vue 컴포넌트 작성 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/vue.md","filePath":"development-guide/conventions/vue.md"}'),l={name:"development-guide/conventions/vue.md"};function h(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",11)]))}const c=i(l,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/development-guide_conventions_vue.md.D5-SXw-6.js b/assets/development-guide_conventions_vue.md.D5-SXw-6.js new file mode 100644 index 0000000..5fd1cf9 --- /dev/null +++ b/assets/development-guide_conventions_vue.md.D5-SXw-6.js @@ -0,0 +1,33 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Vue 컴포넌트 작성 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/vue.md","filePath":"development-guide/conventions/vue.md"}'),l={name:"development-guide/conventions/vue.md"};function h(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

Vue 컴포넌트 작성 규칙

컴포넌트 구조

vue
<template>
+  <!-- 템플릿 -->
+</template>
+
+<script setup>
+// 스크립트
+</script>
+
+<style scoped lang="scss">
+// 스타일
+</style>

네이밍

  • 컴포넌트 파일: PascalCase (예: MyComponent.vue)
  • 변수: camelCase (예: userName)
  • 상수: UPPER_SNAKE_CASE (예: MAX_COUNT)

Props 정의

vue
<script setup>
+const props = defineProps({
+  title: {
+    type: String,
+    required: true,
+  },
+  count: {
+    type: Number,
+    default: 0,
+  },
+})
+</script>

Emits 정의

vue
<script setup>
+const emit = defineEmits(['update:modelValue', 'change'])
+</script>

반응형 변수

vue
<script setup>
+import { ref, computed, watch } from 'vue'
+
+const count = ref(0)
+const doubled = computed(() => count.value * 2)
+
+watch(count, (newVal) => {
+  console.log('카운트 변경:', newVal)
+})
+</script>
`,11)]))}const c=i(l,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/development-guide_conventions_vue.md.D5-SXw-6.lean.js b/assets/development-guide_conventions_vue.md.D5-SXw-6.lean.js new file mode 100644 index 0000000..eaa0cc2 --- /dev/null +++ b/assets/development-guide_conventions_vue.md.D5-SXw-6.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Vue 컴포넌트 작성 규칙","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/conventions/vue.md","filePath":"development-guide/conventions/vue.md"}'),l={name:"development-guide/conventions/vue.md"};function h(p,s,e,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",11)]))}const c=i(l,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/development-guide_new-component_creation.md.BzfD0GpW.js b/assets/development-guide_new-component_creation.md.BzfD0GpW.js deleted file mode 100644 index 676f715..0000000 --- a/assets/development-guide_new-component_creation.md.BzfD0GpW.js +++ /dev/null @@ -1,23 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"컴포넌트 생성","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/creation.md","filePath":"development-guide/new-component/creation.md"}'),t={name:"development-guide/new-component/creation.md"};function p(e,s,h,k,E,d){return n(),a("div",null,s[0]||(s[0]=[l(`

컴포넌트 생성

디렉토리 구조

컴포넌트는 src/views/ui/components/ 하위에 생성합니다:

  • common/: 공통 컴포넌트
  • grid/: 그리드 컴포넌트
  • popup/: 팝업 컴포넌트
  • menu/: 메뉴 컴포넌트

컴포넌트 템플릿

vue
<template>
-  <div class="my-component">
-    <!-- 컴포넌트 내용 -->
-  </div>
-</template>
-
-<script setup>
-// Props 정의
-const props = defineProps({
-  // props
-})
-
-// Emits 정의
-const emit = defineEmits(['update:modelValue'])
-
-// 컴포넌트 로직
-</script>
-
-<style scoped lang="scss">
-.my-component {
-  // 스타일
-}
-</style>

자동 임포트

컴포넌트는 unplugin-vue-components를 통해 자동으로 임포트됩니다.

`,8)]))}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/assets/development-guide_new-component_creation.md.BzfD0GpW.lean.js b/assets/development-guide_new-component_creation.md.BzfD0GpW.lean.js deleted file mode 100644 index 4408a74..0000000 --- a/assets/development-guide_new-component_creation.md.BzfD0GpW.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"컴포넌트 생성","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/creation.md","filePath":"development-guide/new-component/creation.md"}'),t={name:"development-guide/new-component/creation.md"};function p(e,s,h,k,E,d){return n(),a("div",null,s[0]||(s[0]=[l("",8)]))}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/assets/development-guide_new-component_creation.md.CnGLpXk-.js b/assets/development-guide_new-component_creation.md.CnGLpXk-.js new file mode 100644 index 0000000..c41ae03 --- /dev/null +++ b/assets/development-guide_new-component_creation.md.CnGLpXk-.js @@ -0,0 +1,23 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"컴포넌트 생성","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/creation.md","filePath":"development-guide/new-component/creation.md"}'),t={name:"development-guide/new-component/creation.md"};function p(e,s,h,k,E,d){return n(),a("div",null,s[0]||(s[0]=[l(`

컴포넌트 생성

디렉토리 구조

컴포넌트는 src/views/ui/components/ 하위에 생성합니다:

  • common/: 공통 컴포넌트
  • grid/: 그리드 컴포넌트
  • popup/: 팝업 컴포넌트
  • menu/: 메뉴 컴포넌트

컴포넌트 템플릿

vue
<template>
+  <div class="my-component">
+    <!-- 컴포넌트 내용 -->
+  </div>
+</template>
+
+<script setup>
+// Props 정의
+const props = defineProps({
+  // props
+})
+
+// Emits 정의
+const emit = defineEmits(['update:modelValue'])
+
+// 컴포넌트 로직
+</script>
+
+<style scoped lang="scss">
+.my-component {
+  // 스타일
+}
+</style>

자동 임포트

컴포넌트는 unplugin-vue-components를 통해 자동으로 임포트됩니다.

`,8)]))}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/assets/development-guide_new-component_creation.md.CnGLpXk-.lean.js b/assets/development-guide_new-component_creation.md.CnGLpXk-.lean.js new file mode 100644 index 0000000..c7c06a6 --- /dev/null +++ b/assets/development-guide_new-component_creation.md.CnGLpXk-.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"컴포넌트 생성","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/creation.md","filePath":"development-guide/new-component/creation.md"}'),t={name:"development-guide/new-component/creation.md"};function p(e,s,h,k,E,d){return n(),a("div",null,s[0]||(s[0]=[l("",8)]))}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/assets/development-guide_new-component_registration.md.CNSVjuYj.js b/assets/development-guide_new-component_registration.md.CNSVjuYj.js deleted file mode 100644 index 2540646..0000000 --- a/assets/development-guide_new-component_registration.md.CNSVjuYj.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as i,c as a,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"컴포넌트 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/registration.md","filePath":"development-guide/new-component/registration.md"}'),n={name:"development-guide/new-component/registration.md"};function l(p,s,h,o,r,d){return e(),a("div",null,s[0]||(s[0]=[t(`

컴포넌트 등록

자동 등록

프로젝트는 unplugin-vue-components를 사용하여 컴포넌트를 자동으로 등록합니다.

등록 디렉토리

다음 디렉토리의 컴포넌트는 자동으로 등록됩니다:

  • src/vendor/@core/components
  • src/views/ui/components/**
  • src/views/ui/components/**/**

수동 등록

필요한 경우 수동으로 등록할 수 있습니다:

vue
<script setup>
-import MyComponent from '@/components/MyComponent.vue'
-</script>
-
-<template>
-  <MyComponent />
-</template>

타입 정의

자동 등록된 컴포넌트는 src/components.d.ts에 타입 정의가 생성됩니다.

`,11)]))}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/development-guide_new-component_registration.md.CNSVjuYj.lean.js b/assets/development-guide_new-component_registration.md.CNSVjuYj.lean.js deleted file mode 100644 index 84b756f..0000000 --- a/assets/development-guide_new-component_registration.md.CNSVjuYj.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"컴포넌트 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/registration.md","filePath":"development-guide/new-component/registration.md"}'),n={name:"development-guide/new-component/registration.md"};function l(p,s,h,o,r,d){return e(),a("div",null,s[0]||(s[0]=[t("",11)]))}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/development-guide_new-component_registration.md.Dy3Xw8Ok.js b/assets/development-guide_new-component_registration.md.Dy3Xw8Ok.js new file mode 100644 index 0000000..756c76c --- /dev/null +++ b/assets/development-guide_new-component_registration.md.Dy3Xw8Ok.js @@ -0,0 +1,7 @@ +import{_ as i,c as a,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"컴포넌트 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/registration.md","filePath":"development-guide/new-component/registration.md"}'),n={name:"development-guide/new-component/registration.md"};function l(p,s,h,o,r,d){return e(),a("div",null,s[0]||(s[0]=[t(`

컴포넌트 등록

자동 등록

프로젝트는 unplugin-vue-components를 사용하여 컴포넌트를 자동으로 등록합니다.

등록 디렉토리

다음 디렉토리의 컴포넌트는 자동으로 등록됩니다:

  • src/vendor/@core/components
  • src/views/ui/components/**
  • src/views/ui/components/**/**

수동 등록

필요한 경우 수동으로 등록할 수 있습니다:

vue
<script setup>
+import MyComponent from '@/components/MyComponent.vue'
+</script>
+
+<template>
+  <MyComponent />
+</template>

타입 정의

자동 등록된 컴포넌트는 src/components.d.ts에 타입 정의가 생성됩니다.

`,11)]))}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/development-guide_new-component_registration.md.Dy3Xw8Ok.lean.js b/assets/development-guide_new-component_registration.md.Dy3Xw8Ok.lean.js new file mode 100644 index 0000000..0202a5d --- /dev/null +++ b/assets/development-guide_new-component_registration.md.Dy3Xw8Ok.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"컴포넌트 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/registration.md","filePath":"development-guide/new-component/registration.md"}'),n={name:"development-guide/new-component/registration.md"};function l(p,s,h,o,r,d){return e(),a("div",null,s[0]||(s[0]=[t("",11)]))}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/development-guide_new-component_usage.md.9iK5hBM-.js b/assets/development-guide_new-component_usage.md.9iK5hBM-.js deleted file mode 100644 index 8d364a4..0000000 --- a/assets/development-guide_new-component_usage.md.9iK5hBM-.js +++ /dev/null @@ -1,29 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"컴포넌트 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/usage.md","filePath":"development-guide/new-component/usage.md"}'),l={name:"development-guide/new-component/usage.md"};function h(p,s,e,k,E,d){return n(),a("div",null,s[0]||(s[0]=[t(`

컴포넌트 사용법

자동 등록된 컴포넌트

자동 등록된 컴포넌트는 import 없이 바로 사용할 수 있습니다:

vue
<template>
-  <SelectBoxSQL
-    v-model="value"
-    :data="options"
-  />
-</template>

Props 전달

vue
<template>
-  <MyComponent
-    :prop1="value1"
-    :prop2="value2"
-    @event="handleEvent"
-  />
-</template>

이벤트 처리

vue
<template>
-  <MyComponent @update:modelValue="handleUpdate" />
-</template>
-
-<script setup>
-const handleUpdate = (value) => {
-  console.log('값 변경:', value)
-}
-</script>

슬롯 사용

vue
<template>
-  <MyComponent>
-    <template #header>
-      <h1>제목</h1>
-    </template>
-    <template #default>
-      내용
-    </template>
-  </MyComponent>
-</template>
`,10)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_new-component_usage.md.9iK5hBM-.lean.js b/assets/development-guide_new-component_usage.md.9iK5hBM-.lean.js deleted file mode 100644 index 578ce5a..0000000 --- a/assets/development-guide_new-component_usage.md.9iK5hBM-.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"컴포넌트 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/usage.md","filePath":"development-guide/new-component/usage.md"}'),l={name:"development-guide/new-component/usage.md"};function h(p,s,e,k,E,d){return n(),a("div",null,s[0]||(s[0]=[t("",10)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_new-component_usage.md.DtCWn0eT.js b/assets/development-guide_new-component_usage.md.DtCWn0eT.js new file mode 100644 index 0000000..3b9ef69 --- /dev/null +++ b/assets/development-guide_new-component_usage.md.DtCWn0eT.js @@ -0,0 +1,29 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"컴포넌트 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/usage.md","filePath":"development-guide/new-component/usage.md"}'),l={name:"development-guide/new-component/usage.md"};function h(p,s,e,k,E,d){return n(),a("div",null,s[0]||(s[0]=[t(`

컴포넌트 사용법

자동 등록된 컴포넌트

자동 등록된 컴포넌트는 import 없이 바로 사용할 수 있습니다:

vue
<template>
+  <SelectBoxSQL
+    v-model="value"
+    :data="options"
+  />
+</template>

Props 전달

vue
<template>
+  <MyComponent
+    :prop1="value1"
+    :prop2="value2"
+    @event="handleEvent"
+  />
+</template>

이벤트 처리

vue
<template>
+  <MyComponent @update:modelValue="handleUpdate" />
+</template>
+
+<script setup>
+const handleUpdate = (value) => {
+  console.log('값 변경:', value)
+}
+</script>

슬롯 사용

vue
<template>
+  <MyComponent>
+    <template #header>
+      <h1>제목</h1>
+    </template>
+    <template #default>
+      내용
+    </template>
+  </MyComponent>
+</template>
`,10)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_new-component_usage.md.DtCWn0eT.lean.js b/assets/development-guide_new-component_usage.md.DtCWn0eT.lean.js new file mode 100644 index 0000000..01ab892 --- /dev/null +++ b/assets/development-guide_new-component_usage.md.DtCWn0eT.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"컴포넌트 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-component/usage.md","filePath":"development-guide/new-component/usage.md"}'),l={name:"development-guide/new-component/usage.md"};function h(p,s,e,k,E,d){return n(),a("div",null,s[0]||(s[0]=[t("",10)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_new-page_creation.md.Bja3AEsa.js b/assets/development-guide_new-page_creation.md.Bja3AEsa.js new file mode 100644 index 0000000..9cfc3e8 --- /dev/null +++ b/assets/development-guide_new-page_creation.md.Bja3AEsa.js @@ -0,0 +1,140 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"페이지 생성 절차","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/creation.md","filePath":"development-guide/new-page/creation.md"}'),h={name:"development-guide/new-page/creation.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

페이지 생성 절차

개요

새로운 페이지를 추가하는 전체 절차를 설명합니다.

1. 페이지 컴포넌트 생성

1.1 디렉토리 구조 확인

페이지는 모듈별로 src/views/ 하위에 생성합니다:

  • ESS 모듈: src/views/ess/
  • FCM 모듈: src/views/fcm/
  • geosan 모듈: src/views/geosan/
  • AXP Framework: src/views/axpFramework/

1.2 컴포넌트 파일 생성

적절한 디렉토리에 .vue 파일을 생성합니다.

예제: ESS 인사 관리 모듈에 새 페이지 추가

bash
# 파일 생성
+src/views/ess/persadm/MyNewPage.vue

1.3 기본 템플릿 작성

vue
<template>
+  <div class="my-new-page">
+    <v-card>
+      <v-card-title>페이지 제목</v-card-title>
+      <v-card-text>
+        <!-- 페이지 내용 -->
+      </v-card-text>
+    </v-card>
+  </div>
+</template>
+
+<script setup>
+// 컴포넌트 로직
+</script>
+
+<style scoped lang="scss">
+.my-new-page {
+  padding: 16px;
+}
+</style>

2. 라우트 등록

2.1 라우트 파일 확인

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

2.2 라우트 추가

javascript
{
+  path: '/MyNewPage',
+  name: 'MyNewPage',
+  component: () => import('@/views/ess/persadm/MyNewPage.vue'),
+}

2.3 동적 라우팅 (선택사항)

메뉴 시스템을 통해 동적으로 라우트가 등록되는 경우, 백엔드에서 메뉴를 등록하면 자동으로 라우트가 생성됩니다.

3. 메뉴 등록

3.1 백엔드 메뉴 등록

백엔드 데이터베이스에 메뉴 정보를 등록합니다:

  • MENUID: 메뉴 고유 ID
  • MENUNAME: 메뉴 이름
  • URLID: URL 경로 (예: /ess/persadm/MyNewPage.do)
  • ASSEMBLYFILE: 컴포넌트 파일 경로
  • PARENTMENUID: 부모 메뉴 ID
  • 기타 메뉴 정보

3.2 메뉴 매핑 규칙

백엔드의 URLID는 다음과 같이 매핑됩니다:

/ess/persadm/MyNewPage.do
+→ src/views/ess/persadm/MyNewPage.vue

4. 완성된 예제

4.1 전체 컴포넌트 예제

vue
<template>
+  <div class="employee-list-page">
+    <v-card>
+      <v-card-title>
+        <span>직원 목록</span>
+        <v-spacer></v-spacer>
+        <v-btn color="primary" @click="loadData">조회</v-btn>
+      </v-card-title>
+      <v-card-text>
+        <AgGridVue
+          :columnDefs="columnDefs"
+          :rowData="rowData"
+          class="ag-theme-balham"
+          style="height: 500px;"
+        />
+      </v-card-text>
+    </v-card>
+  </div>
+</template>
+
+<script setup>
+import { ref, onMounted } from 'vue'
+import { AgGridVue } from 'ag-grid-vue3'
+import axiosInstance from '@/CustomAxios.js'
+import { useLoadingStore } from '@/utils/stores/loadingStore.js'
+
+const loadingStore = useLoadingStore()
+
+const columnDefs = ref([
+  { field: 'empCode', headerName: '사원번호', width: 120 },
+  { field: 'empName', headerName: '이름', width: 150 },
+  { field: 'deptName', headerName: '부서', width: 200 },
+])
+
+const rowData = ref([])
+
+const loadData = async () => {
+  try {
+    loadingStore.showLoading()
+    
+    const response = await axiosInstance.post('/api/employee/list', {
+      // 파라미터
+    })
+    
+    if (response.status === 'S') {
+      rowData.value = response.data
+    } else {
+      alert(response.message || '데이터 조회에 실패했습니다.')
+    }
+  } catch (error) {
+    console.error('에러 발생:', error)
+    alert('데이터 조회 중 오류가 발생했습니다.')
+  } finally {
+    loadingStore.hideLoading()
+  }
+}
+
+onMounted(() => {
+  loadData()
+})
+</script>
+
+<style scoped lang="scss">
+.employee-list-page {
+  padding: 16px;
+}
+</style>

5. 베스트 프랙티스

5.1 컴포넌트 구조

  1. Template: UI 구조 정의
  2. Script Setup: 로직 및 상태 관리
  3. Style: 컴포넌트 스타일

5.2 네이밍 규칙

  • 파일명: PascalCase (예: MyNewPage.vue)
  • 컴포넌트명: 파일명과 동일
  • 변수명: camelCase
  • 상수명: UPPER_SNAKE_CASE

5.3 코드 조직

vue
<script setup>
+// 1. Import 문
+import { ref, onMounted } from 'vue'
+import axiosInstance from '@/CustomAxios.js'
+
+// 2. Store 사용
+const loadingStore = useLoadingStore()
+
+// 3. Props 정의
+const props = defineProps({
+  // props
+})
+
+// 4. Emits 정의
+const emit = defineEmits(['update:modelValue'])
+
+// 5. 반응형 변수
+const data = ref(null)
+
+// 6. Computed
+const computedValue = computed(() => {
+  // 계산 로직
+})
+
+// 7. 함수 정의
+const handleClick = () => {
+  // 로직
+}
+
+// 8. Lifecycle Hooks
+onMounted(() => {
+  // 초기화 로직
+})
+</script>

5.4 에러 처리

항상 try-catch를 사용하여 에러를 처리합니다:

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+  // 성공 처리
+} catch (error) {
+  console.error('에러 발생:', error)
+  alert('작업 중 오류가 발생했습니다.')
+}

5.5 로딩 상태 관리

API 호출 시 로딩 상태를 관리합니다:

javascript
const loadingStore = useLoadingStore()
+
+const fetchData = async () => {
+  try {
+    loadingStore.showLoading()
+    // API 호출
+  } finally {
+    loadingStore.hideLoading()
+  }
+}

6. 테스트

6.1 개발 서버에서 확인

bash
npm run dev

브라우저에서 해당 라우트로 접속하여 페이지가 정상적으로 표시되는지 확인합니다.

6.2 기능 테스트

  • 데이터 로드 기능
  • 사용자 인터랙션
  • 에러 처리
  • 로딩 상태

다음 단계

페이지 생성이 완료되었다면 다음 문서를 참고하세요:

`,52)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_new-page_creation.md.Bja3AEsa.lean.js b/assets/development-guide_new-page_creation.md.Bja3AEsa.lean.js new file mode 100644 index 0000000..a44e8e4 --- /dev/null +++ b/assets/development-guide_new-page_creation.md.Bja3AEsa.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"페이지 생성 절차","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/creation.md","filePath":"development-guide/new-page/creation.md"}'),h={name:"development-guide/new-page/creation.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",52)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_new-page_creation.md.D9wf2-dd.js b/assets/development-guide_new-page_creation.md.D9wf2-dd.js deleted file mode 100644 index 7babaf9..0000000 --- a/assets/development-guide_new-page_creation.md.D9wf2-dd.js +++ /dev/null @@ -1,140 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"페이지 생성 절차","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/creation.md","filePath":"development-guide/new-page/creation.md"}'),h={name:"development-guide/new-page/creation.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

페이지 생성 절차

개요

새로운 페이지를 추가하는 전체 절차를 설명합니다.

1. 페이지 컴포넌트 생성

1.1 디렉토리 구조 확인

페이지는 모듈별로 src/views/ 하위에 생성합니다:

  • ESS 모듈: src/views/ess/
  • FCM 모듈: src/views/fcm/
  • geosan 모듈: src/views/geosan/
  • AXP Framework: src/views/axpFramework/

1.2 컴포넌트 파일 생성

적절한 디렉토리에 .vue 파일을 생성합니다.

예제: ESS 인사 관리 모듈에 새 페이지 추가

bash
# 파일 생성
-src/views/ess/persadm/MyNewPage.vue

1.3 기본 템플릿 작성

vue
<template>
-  <div class="my-new-page">
-    <v-card>
-      <v-card-title>페이지 제목</v-card-title>
-      <v-card-text>
-        <!-- 페이지 내용 -->
-      </v-card-text>
-    </v-card>
-  </div>
-</template>
-
-<script setup>
-// 컴포넌트 로직
-</script>
-
-<style scoped lang="scss">
-.my-new-page {
-  padding: 16px;
-}
-</style>

2. 라우트 등록

2.1 라우트 파일 확인

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

2.2 라우트 추가

javascript
{
-  path: '/MyNewPage',
-  name: 'MyNewPage',
-  component: () => import('@/views/ess/persadm/MyNewPage.vue'),
-}

2.3 동적 라우팅 (선택사항)

메뉴 시스템을 통해 동적으로 라우트가 등록되는 경우, 백엔드에서 메뉴를 등록하면 자동으로 라우트가 생성됩니다.

3. 메뉴 등록

3.1 백엔드 메뉴 등록

백엔드 데이터베이스에 메뉴 정보를 등록합니다:

  • MENUID: 메뉴 고유 ID
  • MENUNAME: 메뉴 이름
  • URLID: URL 경로 (예: /ess/persadm/MyNewPage.do)
  • ASSEMBLYFILE: 컴포넌트 파일 경로
  • PARENTMENUID: 부모 메뉴 ID
  • 기타 메뉴 정보

3.2 메뉴 매핑 규칙

백엔드의 URLID는 다음과 같이 매핑됩니다:

/ess/persadm/MyNewPage.do
-→ src/views/ess/persadm/MyNewPage.vue

4. 완성된 예제

4.1 전체 컴포넌트 예제

vue
<template>
-  <div class="employee-list-page">
-    <v-card>
-      <v-card-title>
-        <span>직원 목록</span>
-        <v-spacer></v-spacer>
-        <v-btn color="primary" @click="loadData">조회</v-btn>
-      </v-card-title>
-      <v-card-text>
-        <AgGridVue
-          :columnDefs="columnDefs"
-          :rowData="rowData"
-          class="ag-theme-balham"
-          style="height: 500px;"
-        />
-      </v-card-text>
-    </v-card>
-  </div>
-</template>
-
-<script setup>
-import { ref, onMounted } from 'vue'
-import { AgGridVue } from 'ag-grid-vue3'
-import axiosInstance from '@/CustomAxios.js'
-import { useLoadingStore } from '@/utils/stores/loadingStore.js'
-
-const loadingStore = useLoadingStore()
-
-const columnDefs = ref([
-  { field: 'empCode', headerName: '사원번호', width: 120 },
-  { field: 'empName', headerName: '이름', width: 150 },
-  { field: 'deptName', headerName: '부서', width: 200 },
-])
-
-const rowData = ref([])
-
-const loadData = async () => {
-  try {
-    loadingStore.showLoading()
-    
-    const response = await axiosInstance.post('/api/employee/list', {
-      // 파라미터
-    })
-    
-    if (response.status === 'S') {
-      rowData.value = response.data
-    } else {
-      alert(response.message || '데이터 조회에 실패했습니다.')
-    }
-  } catch (error) {
-    console.error('에러 발생:', error)
-    alert('데이터 조회 중 오류가 발생했습니다.')
-  } finally {
-    loadingStore.hideLoading()
-  }
-}
-
-onMounted(() => {
-  loadData()
-})
-</script>
-
-<style scoped lang="scss">
-.employee-list-page {
-  padding: 16px;
-}
-</style>

5. 베스트 프랙티스

5.1 컴포넌트 구조

  1. Template: UI 구조 정의
  2. Script Setup: 로직 및 상태 관리
  3. Style: 컴포넌트 스타일

5.2 네이밍 규칙

  • 파일명: PascalCase (예: MyNewPage.vue)
  • 컴포넌트명: 파일명과 동일
  • 변수명: camelCase
  • 상수명: UPPER_SNAKE_CASE

5.3 코드 조직

vue
<script setup>
-// 1. Import 문
-import { ref, onMounted } from 'vue'
-import axiosInstance from '@/CustomAxios.js'
-
-// 2. Store 사용
-const loadingStore = useLoadingStore()
-
-// 3. Props 정의
-const props = defineProps({
-  // props
-})
-
-// 4. Emits 정의
-const emit = defineEmits(['update:modelValue'])
-
-// 5. 반응형 변수
-const data = ref(null)
-
-// 6. Computed
-const computedValue = computed(() => {
-  // 계산 로직
-})
-
-// 7. 함수 정의
-const handleClick = () => {
-  // 로직
-}
-
-// 8. Lifecycle Hooks
-onMounted(() => {
-  // 초기화 로직
-})
-</script>

5.4 에러 처리

항상 try-catch를 사용하여 에러를 처리합니다:

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-  // 성공 처리
-} catch (error) {
-  console.error('에러 발생:', error)
-  alert('작업 중 오류가 발생했습니다.')
-}

5.5 로딩 상태 관리

API 호출 시 로딩 상태를 관리합니다:

javascript
const loadingStore = useLoadingStore()
-
-const fetchData = async () => {
-  try {
-    loadingStore.showLoading()
-    // API 호출
-  } finally {
-    loadingStore.hideLoading()
-  }
-}

6. 테스트

6.1 개발 서버에서 확인

bash
npm run dev

브라우저에서 해당 라우트로 접속하여 페이지가 정상적으로 표시되는지 확인합니다.

6.2 기능 테스트

  • 데이터 로드 기능
  • 사용자 인터랙션
  • 에러 처리
  • 로딩 상태

다음 단계

페이지 생성이 완료되었다면 다음 문서를 참고하세요:

`,52)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_new-page_creation.md.D9wf2-dd.lean.js b/assets/development-guide_new-page_creation.md.D9wf2-dd.lean.js deleted file mode 100644 index 2ccf55b..0000000 --- a/assets/development-guide_new-page_creation.md.D9wf2-dd.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"페이지 생성 절차","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/creation.md","filePath":"development-guide/new-page/creation.md"}'),h={name:"development-guide/new-page/creation.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",52)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_new-page_menu.md.BbuUV6AW.js b/assets/development-guide_new-page_menu.md.BbuUV6AW.js new file mode 100644 index 0000000..60fca94 --- /dev/null +++ b/assets/development-guide_new-page_menu.md.BbuUV6AW.js @@ -0,0 +1,2 @@ +import{_ as a,c as s,o,aG as t}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"메뉴 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/menu.md","filePath":"development-guide/new-page/menu.md"}'),d={name:"development-guide/new-page/menu.md"};function n(i,e,l,c,p,r){return o(),s("div",null,e[0]||(e[0]=[t(`

메뉴 등록

백엔드 메뉴 등록

백엔드 데이터베이스에 메뉴 정보를 등록합니다:

  • MENUID: 메뉴 고유 ID
  • MENUNAME: 메뉴 이름
  • URLID: URL 경로 (예: /ess/persadm/MyNewPage.do)
  • ASSEMBLYFILE: 컴포넌트 파일 경로
  • PARENTMENUID: 부모 메뉴 ID

메뉴 매핑 규칙

백엔드의 URLID는 다음과 같이 매핑됩니다:

/ess/persadm/MyNewPage.do
+→ src/views/ess/persadm/MyNewPage.vue
`,7)]))}const m=a(d,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/development-guide_new-page_menu.md.BbuUV6AW.lean.js b/assets/development-guide_new-page_menu.md.BbuUV6AW.lean.js new file mode 100644 index 0000000..1876d37 --- /dev/null +++ b/assets/development-guide_new-page_menu.md.BbuUV6AW.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o,aG as t}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"메뉴 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/menu.md","filePath":"development-guide/new-page/menu.md"}'),d={name:"development-guide/new-page/menu.md"};function n(i,e,l,c,p,r){return o(),s("div",null,e[0]||(e[0]=[t("",7)]))}const m=a(d,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/development-guide_new-page_menu.md.C4vpy7Es.js b/assets/development-guide_new-page_menu.md.C4vpy7Es.js deleted file mode 100644 index 29ec25d..0000000 --- a/assets/development-guide_new-page_menu.md.C4vpy7Es.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as a,c as s,o,aG as t}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"메뉴 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/menu.md","filePath":"development-guide/new-page/menu.md"}'),d={name:"development-guide/new-page/menu.md"};function n(i,e,l,c,p,r){return o(),s("div",null,e[0]||(e[0]=[t(`

메뉴 등록

백엔드 메뉴 등록

백엔드 데이터베이스에 메뉴 정보를 등록합니다:

  • MENUID: 메뉴 고유 ID
  • MENUNAME: 메뉴 이름
  • URLID: URL 경로 (예: /ess/persadm/MyNewPage.do)
  • ASSEMBLYFILE: 컴포넌트 파일 경로
  • PARENTMENUID: 부모 메뉴 ID

메뉴 매핑 규칙

백엔드의 URLID는 다음과 같이 매핑됩니다:

/ess/persadm/MyNewPage.do
-→ src/views/ess/persadm/MyNewPage.vue
`,7)]))}const m=a(d,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/development-guide_new-page_menu.md.C4vpy7Es.lean.js b/assets/development-guide_new-page_menu.md.C4vpy7Es.lean.js deleted file mode 100644 index c47c259..0000000 --- a/assets/development-guide_new-page_menu.md.C4vpy7Es.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as s,o,aG as t}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"메뉴 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/menu.md","filePath":"development-guide/new-page/menu.md"}'),d={name:"development-guide/new-page/menu.md"};function n(i,e,l,c,p,r){return o(),s("div",null,e[0]||(e[0]=[t("",7)]))}const m=a(d,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/development-guide_new-page_route.md.BDH6MRi7.js b/assets/development-guide_new-page_route.md.BDH6MRi7.js new file mode 100644 index 0000000..9701efa --- /dev/null +++ b/assets/development-guide_new-page_route.md.BDH6MRi7.js @@ -0,0 +1,5 @@ +import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"라우트 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/route.md","filePath":"development-guide/new-page/route.md"}'),n={name:"development-guide/new-page/route.md"};function l(h,a,p,r,k,d){return e(),i("div",null,a[0]||(a[0]=[t(`

라우트 등록

라우트 파일

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

라우트 추가

javascript
{
+  path: '/MyNewPage',
+  name: 'MyNewPage',
+  component: () => import('@/views/ess/persadm/MyNewPage.vue'),
+}

동적 라우팅

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다. 백엔드에서 메뉴를 등록하면 자동으로 라우트가 생성됩니다.

`,7)]))}const c=s(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/development-guide_new-page_route.md.BDH6MRi7.lean.js b/assets/development-guide_new-page_route.md.BDH6MRi7.lean.js new file mode 100644 index 0000000..7f0337b --- /dev/null +++ b/assets/development-guide_new-page_route.md.BDH6MRi7.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"라우트 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/route.md","filePath":"development-guide/new-page/route.md"}'),n={name:"development-guide/new-page/route.md"};function l(h,a,p,r,k,d){return e(),i("div",null,a[0]||(a[0]=[t("",7)]))}const c=s(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/development-guide_new-page_route.md.BNsilGSA.js b/assets/development-guide_new-page_route.md.BNsilGSA.js deleted file mode 100644 index 12ce9d2..0000000 --- a/assets/development-guide_new-page_route.md.BNsilGSA.js +++ /dev/null @@ -1,5 +0,0 @@ -import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"라우트 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/route.md","filePath":"development-guide/new-page/route.md"}'),n={name:"development-guide/new-page/route.md"};function l(h,a,p,r,k,d){return e(),i("div",null,a[0]||(a[0]=[t(`

라우트 등록

라우트 파일

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

라우트 추가

javascript
{
-  path: '/MyNewPage',
-  name: 'MyNewPage',
-  component: () => import('@/views/ess/persadm/MyNewPage.vue'),
-}

동적 라우팅

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다. 백엔드에서 메뉴를 등록하면 자동으로 라우트가 생성됩니다.

`,7)]))}const c=s(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/development-guide_new-page_route.md.BNsilGSA.lean.js b/assets/development-guide_new-page_route.md.BNsilGSA.lean.js deleted file mode 100644 index 86045f6..0000000 --- a/assets/development-guide_new-page_route.md.BNsilGSA.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"라우트 등록","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-page/route.md","filePath":"development-guide/new-page/route.md"}'),n={name:"development-guide/new-page/route.md"};function l(h,a,p,r,k,d){return e(),i("div",null,a[0]||(a[0]=[t("",7)]))}const c=s(n,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/development-guide_new-store_creation.md.CvQUSGmo.js b/assets/development-guide_new-store_creation.md.CvQUSGmo.js new file mode 100644 index 0000000..d996a48 --- /dev/null +++ b/assets/development-guide_new-store_creation.md.CvQUSGmo.js @@ -0,0 +1,23 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"스토어 생성","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-store/creation.md","filePath":"development-guide/new-store/creation.md"}'),h={name:"development-guide/new-store/creation.md"};function e(l,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

스토어 생성

스토어 파일 위치

스토어는 src/utils/stores/ 디렉토리에 생성합니다.

스토어 템플릿

javascript
import { defineStore } from 'pinia'
+
+export const useMyStore = defineStore('myStore', {
+  state: () => ({
+    data: null,
+  }),
+  actions: {
+    setData(newData) {
+      this.data = newData
+    },
+  },
+  getters: {
+    getData: (state) => state.data,
+  },
+  persist: {
+    key: 'myStore',
+    storage: localStorage,
+    paths: ['data'],
+  },
+})

사용법

javascript
import { useMyStore } from '@/utils/stores/myStore.js'
+
+const myStore = useMyStore()
+myStore.setData('value')
`,7)]))}const o=i(h,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_new-store_creation.md.CvQUSGmo.lean.js b/assets/development-guide_new-store_creation.md.CvQUSGmo.lean.js new file mode 100644 index 0000000..6669e9a --- /dev/null +++ b/assets/development-guide_new-store_creation.md.CvQUSGmo.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"스토어 생성","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-store/creation.md","filePath":"development-guide/new-store/creation.md"}'),h={name:"development-guide/new-store/creation.md"};function e(l,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",7)]))}const o=i(h,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_new-store_creation.md.DH9l03ji.js b/assets/development-guide_new-store_creation.md.DH9l03ji.js deleted file mode 100644 index 23fc384..0000000 --- a/assets/development-guide_new-store_creation.md.DH9l03ji.js +++ /dev/null @@ -1,23 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"스토어 생성","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-store/creation.md","filePath":"development-guide/new-store/creation.md"}'),h={name:"development-guide/new-store/creation.md"};function e(l,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t(`

스토어 생성

스토어 파일 위치

스토어는 src/utils/stores/ 디렉토리에 생성합니다.

스토어 템플릿

javascript
import { defineStore } from 'pinia'
-
-export const useMyStore = defineStore('myStore', {
-  state: () => ({
-    data: null,
-  }),
-  actions: {
-    setData(newData) {
-      this.data = newData
-    },
-  },
-  getters: {
-    getData: (state) => state.data,
-  },
-  persist: {
-    key: 'myStore',
-    storage: localStorage,
-    paths: ['data'],
-  },
-})

사용법

javascript
import { useMyStore } from '@/utils/stores/myStore.js'
-
-const myStore = useMyStore()
-myStore.setData('value')
`,7)]))}const o=i(h,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_new-store_creation.md.DH9l03ji.lean.js b/assets/development-guide_new-store_creation.md.DH9l03ji.lean.js deleted file mode 100644 index a79d0a9..0000000 --- a/assets/development-guide_new-store_creation.md.DH9l03ji.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"스토어 생성","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-store/creation.md","filePath":"development-guide/new-store/creation.md"}'),h={name:"development-guide/new-store/creation.md"};function e(l,s,p,k,E,r){return n(),a("div",null,s[0]||(s[0]=[t("",7)]))}const o=i(h,[["render",e]]);export{g as __pageData,o as default}; diff --git a/assets/development-guide_new-store_usage.md.BbQ_8XUq.js b/assets/development-guide_new-store_usage.md.BbQ_8XUq.js new file mode 100644 index 0000000..b83bb07 --- /dev/null +++ b/assets/development-guide_new-store_usage.md.BbQ_8XUq.js @@ -0,0 +1,19 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"스토어 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-store/usage.md","filePath":"development-guide/new-store/usage.md"}'),h={name:"development-guide/new-store/usage.md"};function e(l,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`

스토어 사용법

스토어 가져오기

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
+
+const authStore = useAuthStore()

상태 읽기

javascript
// 직접 접근
+const token = authStore.accessToken
+
+// Getter 사용
+const isAuthenticated = computed(() => authStore.isAuthenticated)

액션 호출

javascript
authStore.setAccessToken('new-token')
+authStore.clearAccessToken()

반응성

스토어의 상태는 반응형이므로 computed나 watch를 사용할 수 있습니다:

vue
<script setup>
+import { computed } from 'vue'
+import { useAuthStore } from '@/utils/stores/authStore.js'
+
+const authStore = useAuthStore()
+
+const isAuthenticated = computed(() => authStore.isAuthenticated)
+
+watch(() => authStore.accessToken, (newToken) => {
+  console.log('토큰 변경:', newToken)
+})
+</script>
`,10)]))}const c=i(h,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/development-guide_new-store_usage.md.BbQ_8XUq.lean.js b/assets/development-guide_new-store_usage.md.BbQ_8XUq.lean.js new file mode 100644 index 0000000..29d2796 --- /dev/null +++ b/assets/development-guide_new-store_usage.md.BbQ_8XUq.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"스토어 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-store/usage.md","filePath":"development-guide/new-store/usage.md"}'),h={name:"development-guide/new-store/usage.md"};function e(l,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n("",10)]))}const c=i(h,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/development-guide_new-store_usage.md.D_GowFsF.js b/assets/development-guide_new-store_usage.md.D_GowFsF.js deleted file mode 100644 index 5b27d08..0000000 --- a/assets/development-guide_new-store_usage.md.D_GowFsF.js +++ /dev/null @@ -1,19 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"스토어 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-store/usage.md","filePath":"development-guide/new-store/usage.md"}'),h={name:"development-guide/new-store/usage.md"};function e(l,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`

스토어 사용법

스토어 가져오기

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
-
-const authStore = useAuthStore()

상태 읽기

javascript
// 직접 접근
-const token = authStore.accessToken
-
-// Getter 사용
-const isAuthenticated = computed(() => authStore.isAuthenticated)

액션 호출

javascript
authStore.setAccessToken('new-token')
-authStore.clearAccessToken()

반응성

스토어의 상태는 반응형이므로 computed나 watch를 사용할 수 있습니다:

vue
<script setup>
-import { computed } from 'vue'
-import { useAuthStore } from '@/utils/stores/authStore.js'
-
-const authStore = useAuthStore()
-
-const isAuthenticated = computed(() => authStore.isAuthenticated)
-
-watch(() => authStore.accessToken, (newToken) => {
-  console.log('토큰 변경:', newToken)
-})
-</script>
`,10)]))}const c=i(h,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/development-guide_new-store_usage.md.D_GowFsF.lean.js b/assets/development-guide_new-store_usage.md.D_GowFsF.lean.js deleted file mode 100644 index 89b9e1f..0000000 --- a/assets/development-guide_new-store_usage.md.D_GowFsF.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"스토어 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/new-store/usage.md","filePath":"development-guide/new-store/usage.md"}'),h={name:"development-guide/new-store/usage.md"};function e(l,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n("",10)]))}const c=i(h,[["render",e]]);export{E as __pageData,c as default}; diff --git a/assets/development-guide_styling_custom.md.BNRn1XWg.js b/assets/development-guide_styling_custom.md.BNRn1XWg.js deleted file mode 100644 index ce167b4..0000000 --- a/assets/development-guide_styling_custom.md.BNRn1XWg.js +++ /dev/null @@ -1,5 +0,0 @@ -import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"커스텀 CSS","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/custom.md","filePath":"development-guide/styling/custom.md"}'),n={name:"development-guide/styling/custom.md"};function l(p,s,h,o,c,d){return e(),i("div",null,s[0]||(s[0]=[t(`

커스텀 CSS

커스텀 CSS 파일

커스텀 CSS 파일은 public/custom-css/ 디렉토리에 있습니다:

  • custom.css: 기본 커스텀 스타일
  • custom-datepicker.css: 날짜 선택기 스타일
  • custom-orgchart.css: 조직도 스타일

스타일 오버라이드

Vuetify 컴포넌트 스타일을 오버라이드할 수 있습니다:

vue
<style scoped lang="scss">
-::v-deep(.v-btn) {
-  // 버튼 스타일 오버라이드
-}
-</style>

전역 스타일

main.js에서 전역 스타일을 import합니다:

javascript
import '@/vendor/assets/css/dashforge.css'
`,10)]))}const u=a(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/development-guide_styling_custom.md.BNRn1XWg.lean.js b/assets/development-guide_styling_custom.md.BNRn1XWg.lean.js deleted file mode 100644 index e89c44e..0000000 --- a/assets/development-guide_styling_custom.md.BNRn1XWg.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"커스텀 CSS","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/custom.md","filePath":"development-guide/styling/custom.md"}'),n={name:"development-guide/styling/custom.md"};function l(p,s,h,o,c,d){return e(),i("div",null,s[0]||(s[0]=[t("",10)]))}const u=a(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/development-guide_styling_custom.md.DYrXidHG.js b/assets/development-guide_styling_custom.md.DYrXidHG.js new file mode 100644 index 0000000..36c9d2d --- /dev/null +++ b/assets/development-guide_styling_custom.md.DYrXidHG.js @@ -0,0 +1,5 @@ +import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"커스텀 CSS","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/custom.md","filePath":"development-guide/styling/custom.md"}'),n={name:"development-guide/styling/custom.md"};function l(p,s,h,o,c,d){return e(),i("div",null,s[0]||(s[0]=[t(`

커스텀 CSS

커스텀 CSS 파일

커스텀 CSS 파일은 public/custom-css/ 디렉토리에 있습니다:

  • custom.css: 기본 커스텀 스타일
  • custom-datepicker.css: 날짜 선택기 스타일
  • custom-orgchart.css: 조직도 스타일

스타일 오버라이드

Vuetify 컴포넌트 스타일을 오버라이드할 수 있습니다:

vue
<style scoped lang="scss">
+::v-deep(.v-btn) {
+  // 버튼 스타일 오버라이드
+}
+</style>

전역 스타일

main.js에서 전역 스타일을 import합니다:

javascript
import '@/vendor/assets/css/dashforge.css'
`,10)]))}const u=a(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/development-guide_styling_custom.md.DYrXidHG.lean.js b/assets/development-guide_styling_custom.md.DYrXidHG.lean.js new file mode 100644 index 0000000..a33ed25 --- /dev/null +++ b/assets/development-guide_styling_custom.md.DYrXidHG.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"커스텀 CSS","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/custom.md","filePath":"development-guide/styling/custom.md"}'),n={name:"development-guide/styling/custom.md"};function l(p,s,h,o,c,d){return e(),i("div",null,s[0]||(s[0]=[t("",10)]))}const u=a(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/development-guide_styling_scss.md.BDw24h8X.js b/assets/development-guide_styling_scss.md.BDw24h8X.js new file mode 100644 index 0000000..efbdc74 --- /dev/null +++ b/assets/development-guide_styling_scss.md.BDw24h8X.js @@ -0,0 +1,18 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"SCSS 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/scss.md","filePath":"development-guide/styling/scss.md"}'),t={name:"development-guide/styling/scss.md"};function l(p,s,h,k,d,r){return n(),i("div",null,s[0]||(s[0]=[e(`

SCSS 사용법

컴포넌트 스타일

vue
<style scoped lang="scss">
+.my-component {
+  padding: 16px;
+  
+  .title {
+    font-size: 18px;
+    font-weight: bold;
+  }
+}
+</style>

전역 스타일

전역 스타일은 src/vendor/assets/styles/ 디렉토리에 있습니다.

변수 사용

scss
@import '@styles/variables/_template.scss';
+
+.my-component {
+  color: $primary-color;
+}

믹스인 사용

scss
@import '@styles/mixins';
+
+.my-component {
+  @include flex-center;
+}
`,9)]))}const o=a(t,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/development-guide_styling_scss.md.BDw24h8X.lean.js b/assets/development-guide_styling_scss.md.BDw24h8X.lean.js new file mode 100644 index 0000000..91f0428 --- /dev/null +++ b/assets/development-guide_styling_scss.md.BDw24h8X.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"SCSS 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/scss.md","filePath":"development-guide/styling/scss.md"}'),t={name:"development-guide/styling/scss.md"};function l(p,s,h,k,d,r){return n(),i("div",null,s[0]||(s[0]=[e("",9)]))}const o=a(t,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/development-guide_styling_scss.md.DZdY9spX.js b/assets/development-guide_styling_scss.md.DZdY9spX.js deleted file mode 100644 index 2457e2b..0000000 --- a/assets/development-guide_styling_scss.md.DZdY9spX.js +++ /dev/null @@ -1,18 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"SCSS 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/scss.md","filePath":"development-guide/styling/scss.md"}'),t={name:"development-guide/styling/scss.md"};function l(p,s,h,k,d,r){return n(),i("div",null,s[0]||(s[0]=[e(`

SCSS 사용법

컴포넌트 스타일

vue
<style scoped lang="scss">
-.my-component {
-  padding: 16px;
-  
-  .title {
-    font-size: 18px;
-    font-weight: bold;
-  }
-}
-</style>

전역 스타일

전역 스타일은 src/vendor/assets/styles/ 디렉토리에 있습니다.

변수 사용

scss
@import '@styles/variables/_template.scss';
-
-.my-component {
-  color: $primary-color;
-}

믹스인 사용

scss
@import '@styles/mixins';
-
-.my-component {
-  @include flex-center;
-}
`,9)]))}const o=a(t,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/development-guide_styling_scss.md.DZdY9spX.lean.js b/assets/development-guide_styling_scss.md.DZdY9spX.lean.js deleted file mode 100644 index 62b6861..0000000 --- a/assets/development-guide_styling_scss.md.DZdY9spX.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"SCSS 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/scss.md","filePath":"development-guide/styling/scss.md"}'),t={name:"development-guide/styling/scss.md"};function l(p,s,h,k,d,r){return n(),i("div",null,s[0]||(s[0]=[e("",9)]))}const o=a(t,[["render",l]]);export{c as __pageData,o as default}; diff --git a/assets/development-guide_styling_vuetify.md.DNBdapBb.js b/assets/development-guide_styling_vuetify.md.DNBdapBb.js deleted file mode 100644 index caedafd..0000000 --- a/assets/development-guide_styling_vuetify.md.DNBdapBb.js +++ /dev/null @@ -1,18 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Vuetify 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/vuetify.md","filePath":"development-guide/styling/vuetify.md"}'),l={name:"development-guide/styling/vuetify.md"};function h(e,s,k,p,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`

Vuetify 사용법

기본 컴포넌트

Vuetify의 컴포넌트를 직접 사용할 수 있습니다:

vue
<template>
-  <v-card>
-    <v-card-title>제목</v-card-title>
-    <v-card-text>내용</v-card-text>
-  </v-card>
-</template>

테마

기본 테마는 'light'이며, 'dark' 테마도 지원합니다.

그리드 시스템

vue
<template>
-  <v-row>
-    <v-col cols="12" md="6">
-      컬럼 1
-    </v-col>
-    <v-col cols="12" md="6">
-      컬럼 2
-    </v-col>
-  </v-row>
-</template>

아이콘

vue
<template>
-  <v-icon icon="mdi-home" />
-  <v-icon icon="ri-search-line" />
-</template>

공식 문서

자세한 내용은 Vuetify 공식 문서를 참고하세요.

`,12)]))}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_styling_vuetify.md.DNBdapBb.lean.js b/assets/development-guide_styling_vuetify.md.DNBdapBb.lean.js deleted file mode 100644 index b25a22a..0000000 --- a/assets/development-guide_styling_vuetify.md.DNBdapBb.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Vuetify 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/vuetify.md","filePath":"development-guide/styling/vuetify.md"}'),l={name:"development-guide/styling/vuetify.md"};function h(e,s,k,p,E,r){return t(),a("div",null,s[0]||(s[0]=[n("",12)]))}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_styling_vuetify.md.vID9uNnh.js b/assets/development-guide_styling_vuetify.md.vID9uNnh.js new file mode 100644 index 0000000..64f7665 --- /dev/null +++ b/assets/development-guide_styling_vuetify.md.vID9uNnh.js @@ -0,0 +1,18 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Vuetify 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/vuetify.md","filePath":"development-guide/styling/vuetify.md"}'),l={name:"development-guide/styling/vuetify.md"};function h(e,s,k,p,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`

Vuetify 사용법

기본 컴포넌트

Vuetify의 컴포넌트를 직접 사용할 수 있습니다:

vue
<template>
+  <v-card>
+    <v-card-title>제목</v-card-title>
+    <v-card-text>내용</v-card-text>
+  </v-card>
+</template>

테마

기본 테마는 'light'이며, 'dark' 테마도 지원합니다.

그리드 시스템

vue
<template>
+  <v-row>
+    <v-col cols="12" md="6">
+      컬럼 1
+    </v-col>
+    <v-col cols="12" md="6">
+      컬럼 2
+    </v-col>
+  </v-row>
+</template>

아이콘

vue
<template>
+  <v-icon icon="mdi-home" />
+  <v-icon icon="ri-search-line" />
+</template>

공식 문서

자세한 내용은 Vuetify 공식 문서를 참고하세요.

`,12)]))}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/development-guide_styling_vuetify.md.vID9uNnh.lean.js b/assets/development-guide_styling_vuetify.md.vID9uNnh.lean.js new file mode 100644 index 0000000..4537683 --- /dev/null +++ b/assets/development-guide_styling_vuetify.md.vID9uNnh.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Vuetify 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"development-guide/styling/vuetify.md","filePath":"development-guide/styling/vuetify.md"}'),l={name:"development-guide/styling/vuetify.md"};function h(e,s,k,p,E,r){return t(),a("div",null,s[0]||(s[0]=[n("",12)]))}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/getting-started_overview.md.De38ftLG.js b/assets/getting-started_overview.md.De38ftLG.js new file mode 100644 index 0000000..da82b71 --- /dev/null +++ b/assets/getting-started_overview.md.De38ftLG.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as r,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"프로젝트 개요","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/overview.md","filePath":"getting-started/overview.md"}'),t={name:"getting-started/overview.md"};function o(n,a,s,h,u,d){return r(),i("div",null,a[0]||(a[0]=[l('

프로젝트 개요

프로젝트 소개

AXP (AXP Framework)는 Vue 3 기반의 엔터프라이즈급 프론트엔드 애플리케이션 프레임워크입니다. 이 프로젝트는 다양한 비즈니스 모듈(ESS, FCM, geosan 등)을 지원하는 통합 관리 시스템의 프론트엔드 부분을 담당합니다.

주요 특징

  • Vue 3 Composition API: 최신 Vue 3의 Composition API를 활용한 컴포넌트 기반 개발
  • Vite 빌드 도구: 빠른 개발 서버와 최적화된 프로덕션 빌드
  • Pinia 상태 관리: Vuex의 후속작인 Pinia를 사용한 중앙 집중식 상태 관리
  • Vuetify UI 프레임워크: Material Design 기반의 풍부한 UI 컴포넌트 라이브러리
  • 모듈화된 구조: ESS, FCM, geosan 등 다양한 비즈니스 모듈을 독립적으로 관리
  • JWT 기반 인증: 안전한 토큰 기반 인증 시스템
  • 자동 컴포넌트/함수 임포트: unplugin-auto-import와 unplugin-vue-components를 통한 자동 임포트

프로젝트 버전

  • 프로젝트명: AXP
  • 버전: 2.3.0
  • Vue 버전: 3.5.13
  • Vite 버전: 5.4.11

기술 스택 요약

핵심 프레임워크

  • Vue 3.5.13 (Composition API)
  • Vite 5.4.11
  • Pinia 2.3.0
  • Vue Router 4.5.0

UI 프레임워크

  • Vuetify 3.7.5
  • Material Design Icons

주요 라이브러리

  • Axios 1.9.0 (HTTP 클라이언트)
  • AG Grid 33.3.2 (데이터 그리드)
  • ApexCharts 3.54.1 (차트)
  • ECharts 5.6.0 (차트)
  • ExcelJS 4.4.0 (Excel 처리)
  • CryptoJS 4.2.0 (암호화)

프로젝트 목적

이 프로젝트는 다음과 같은 목적으로 개발되었습니다:

  1. 통합 관리 시스템: 다양한 비즈니스 모듈을 하나의 플랫폼에서 관리
  2. 재사용 가능한 컴포넌트: 공통 UI 컴포넌트를 통한 개발 효율성 향상
  3. 확장 가능한 아키텍처: 새로운 모듈과 기능을 쉽게 추가할 수 있는 구조
  4. 개발자 경험 향상: 자동 임포트, 타입 추론 등을 통한 개발 편의성 제공

주요 모듈

AXP Framework

프로젝트의 핵심 프레임워크 모듈로, 인증, 메인 대시보드 등의 기본 기능을 제공합니다.

ESS 모듈

Employee Self Service 모듈로, 인사 관리, 교육, 신용카드 관리 등의 기능을 포함합니다.

FCM 모듈

Finance & HR 모듈로, ERP 및 HR 관련 기능을 제공합니다.

geosan 모듈

BI(Business Intelligence) 관련 기능을 제공하는 모듈입니다.

다음 단계

프로젝트를 시작하려면 다음 문서를 참고하세요:

',29)]))}const m=e(t,[["render",o]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_overview.md.De38ftLG.lean.js b/assets/getting-started_overview.md.De38ftLG.lean.js new file mode 100644 index 0000000..7029728 --- /dev/null +++ b/assets/getting-started_overview.md.De38ftLG.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as r,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"프로젝트 개요","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/overview.md","filePath":"getting-started/overview.md"}'),t={name:"getting-started/overview.md"};function o(n,a,s,h,u,d){return r(),i("div",null,a[0]||(a[0]=[l("",29)]))}const m=e(t,[["render",o]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_overview.md.KQB4W_sR.js b/assets/getting-started_overview.md.KQB4W_sR.js deleted file mode 100644 index 50fd9ca..0000000 --- a/assets/getting-started_overview.md.KQB4W_sR.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as r,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"프로젝트 개요","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/overview.md","filePath":"getting-started/overview.md"}'),t={name:"getting-started/overview.md"};function o(n,a,s,h,u,d){return r(),i("div",null,a[0]||(a[0]=[l('

프로젝트 개요

프로젝트 소개

AXP (AXP Framework)는 Vue 3 기반의 엔터프라이즈급 프론트엔드 애플리케이션 프레임워크입니다. 이 프로젝트는 다양한 비즈니스 모듈(ESS, FCM, geosan 등)을 지원하는 통합 관리 시스템의 프론트엔드 부분을 담당합니다.

주요 특징

  • Vue 3 Composition API: 최신 Vue 3의 Composition API를 활용한 컴포넌트 기반 개발
  • Vite 빌드 도구: 빠른 개발 서버와 최적화된 프로덕션 빌드
  • Pinia 상태 관리: Vuex의 후속작인 Pinia를 사용한 중앙 집중식 상태 관리
  • Vuetify UI 프레임워크: Material Design 기반의 풍부한 UI 컴포넌트 라이브러리
  • 모듈화된 구조: ESS, FCM, geosan 등 다양한 비즈니스 모듈을 독립적으로 관리
  • JWT 기반 인증: 안전한 토큰 기반 인증 시스템
  • 자동 컴포넌트/함수 임포트: unplugin-auto-import와 unplugin-vue-components를 통한 자동 임포트

프로젝트 버전

  • 프로젝트명: AXP
  • 버전: 2.3.0
  • Vue 버전: 3.5.13
  • Vite 버전: 5.4.11

기술 스택 요약

핵심 프레임워크

  • Vue 3.5.13 (Composition API)
  • Vite 5.4.11
  • Pinia 2.3.0
  • Vue Router 4.5.0

UI 프레임워크

  • Vuetify 3.7.5
  • Material Design Icons

주요 라이브러리

  • Axios 1.9.0 (HTTP 클라이언트)
  • AG Grid 33.3.2 (데이터 그리드)
  • ApexCharts 3.54.1 (차트)
  • ECharts 5.6.0 (차트)
  • ExcelJS 4.4.0 (Excel 처리)
  • CryptoJS 4.2.0 (암호화)

프로젝트 목적

이 프로젝트는 다음과 같은 목적으로 개발되었습니다:

  1. 통합 관리 시스템: 다양한 비즈니스 모듈을 하나의 플랫폼에서 관리
  2. 재사용 가능한 컴포넌트: 공통 UI 컴포넌트를 통한 개발 효율성 향상
  3. 확장 가능한 아키텍처: 새로운 모듈과 기능을 쉽게 추가할 수 있는 구조
  4. 개발자 경험 향상: 자동 임포트, 타입 추론 등을 통한 개발 편의성 제공

주요 모듈

AXP Framework

프로젝트의 핵심 프레임워크 모듈로, 인증, 메인 대시보드 등의 기본 기능을 제공합니다.

ESS 모듈

Employee Self Service 모듈로, 인사 관리, 교육, 신용카드 관리 등의 기능을 포함합니다.

FCM 모듈

Finance & HR 모듈로, ERP 및 HR 관련 기능을 제공합니다.

geosan 모듈

BI(Business Intelligence) 관련 기능을 제공하는 모듈입니다.

다음 단계

프로젝트를 시작하려면 다음 문서를 참고하세요:

',29)]))}const m=e(t,[["render",o]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_overview.md.KQB4W_sR.lean.js b/assets/getting-started_overview.md.KQB4W_sR.lean.js deleted file mode 100644 index 2fbc5d9..0000000 --- a/assets/getting-started_overview.md.KQB4W_sR.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as r,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"프로젝트 개요","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/overview.md","filePath":"getting-started/overview.md"}'),t={name:"getting-started/overview.md"};function o(n,a,s,h,u,d){return r(),i("div",null,a[0]||(a[0]=[l("",29)]))}const m=e(t,[["render",o]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_project-structure.md.BZGUsPTJ.js b/assets/getting-started_project-structure.md.BZGUsPTJ.js new file mode 100644 index 0000000..ef34a64 --- /dev/null +++ b/assets/getting-started_project-structure.md.BZGUsPTJ.js @@ -0,0 +1 @@ +import{_ as a,c as s,o,aG as i}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/project-structure.md","filePath":"getting-started/project-structure.md"}'),c={name:"getting-started/project-structure.md"};function l(r,e,n,t,d,p){return o(),s("div",null,e[0]||(e[0]=[i('

프로젝트 구조

전체 디렉토리 구조

vue_project/\n├── public/                 # 정적 리소스 파일\n│   ├── custom-css/         # 커스텀 CSS 파일\n│   ├── favicon.ico         # 파비콘\n│   ├── loader.css          # 로더 스타일\n│   └── logo.png            # 로고 이미지\n├── src/                    # 소스 코드\n│   ├── App.vue             # 루트 컴포넌트\n│   ├── main.js             # 애플리케이션 진입점\n│   ├── CustomAxios.js      # Axios 인스턴스 설정\n│   ├── script/             # 비즈니스 로직 스크립트\n│   ├── utils/              # 유틸리티 함수 및 설정\n│   ├── vendor/             # 외부 라이브러리 및 템플릿\n│   └── views/              # 페이지 컴포넌트\n├── dist/                   # 빌드 결과물 (생성됨)\n├── node_modules/           # npm 패키지 (생성됨)\n├── .env                    # 환경 변수\n├── package.json            # 프로젝트 설정 및 의존성\n├── vite.config.js          # Vite 설정\n└── README.md               # 프로젝트 설명

주요 디렉토리 설명

/src - 소스 코드

프로젝트의 모든 소스 코드가 위치하는 디렉토리입니다.

/src/App.vue

애플리케이션의 루트 컴포넌트입니다. Vue Router의 <RouterView />를 포함하여 페이지 라우팅을 처리합니다.

/src/main.js

애플리케이션의 진입점입니다. Vue 앱을 생성하고 플러그인을 등록한 후 마운트합니다.

/src/CustomAxios.js

Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다. JWT 토큰 관리, 암호화/복호화, 에러 처리 등의 기능을 포함합니다.

/src/utils - 유틸리티

공통으로 사용되는 유틸리티 함수와 설정 파일들이 위치합니다.

/src/utils/common/

  • common.js: 문자열, 날짜, 숫자, 배열, 객체, 파일 처리 등 다양한 유틸리티 함수
  • comfcm.js: FCM(Firebase Cloud Messaging) 관련 유틸리티

/src/utils/stores/

Pinia 스토어 파일들이 위치합니다:

  • authStore.js: 인증 관련 상태 관리
  • loadingStore.js: 로딩 상태 관리
  • menuStore.js: 메뉴 정보 관리
  • sessionStore.js: 세션 데이터 관리
  • modalStore.js: 모달 상태 관리
  • tabStore.js: 탭 상태 관리
  • sidebarStore.js: 사이드바 상태 관리
  • logStore.js: 로그 관리
  • 기타 스토어들

/src/utils/plugins/

플러그인 설정 파일들이 위치합니다:

  • router/: Vue Router 설정
  • pinia.js: Pinia 설정
  • vuetify/: Vuetify 설정
  • iconify/: Iconify 아이콘 설정

/src/views - 페이지 컴포넌트

비즈니스 로직에 해당하는 페이지 컴포넌트들이 위치합니다.

/src/views/axpFramework/

프레임워크 핵심 모듈:

  • auth/: 로그인, 회원가입 등 인증 관련 페이지
  • main/: 메인 대시보드, 메인 레이아웃

/src/views/ess/

ESS(Employee Self Service) 모듈:

  • admin/: 관리자 기능
  • persadm/: 인사 관리
  • creditcard/: 신용카드 관리
  • education/: 교육 관리
  • estimation/: 견적 관리

/src/views/fcm/

FCM(Finance & HR) 모듈:

  • erp/: ERP 관련 기능
  • hr/: HR 관련 기능

/src/views/geosan/

geosan 모듈:

  • BI/: BI(Business Intelligence) 관련 기능

/src/views/ui/

공통 UI 컴포넌트:

  • components/: 재사용 가능한 컴포넌트
    • common/: 공통 컴포넌트 (버튼, 입력, 선택, 조회 등)
    • grid/: 그리드 관련 컴포넌트
    • popup/: 팝업 컴포넌트
    • menu/: 메뉴 컴포넌트
  • layouts/: 레이아웃 컴포넌트

/src/script - 비즈니스 로직

페이지 컴포넌트에서 사용되는 비즈니스 로직 스크립트 파일들이 위치합니다.

/src/vendor - 외부 라이브러리

외부 라이브러리와 템플릿 파일들이 위치합니다:

  • @core/: 핵심 컴포넌트 및 스타일
  • @layouts/: 레이아웃 컴포넌트
  • @dashboard/: 대시보드 컴포넌트
  • assets/: 이미지, 폰트, CSS 등 리소스
  • lib/: 서드파티 라이브러리

/public - 정적 리소스

빌드 시 그대로 복사되는 정적 파일들이 위치합니다.

설정 파일

package.json

프로젝트 메타데이터, 의존성, 스크립트가 정의된 파일입니다.

vite.config.js

Vite 빌드 도구의 설정 파일입니다. 플러그인, 경로 별칭, 프록시 설정 등이 포함됩니다.

.env

환경 변수 설정 파일입니다. API 서버 주소, 인증 서버 주소 등을 설정합니다.

jsconfig.json

JavaScript 프로젝트 설정 파일입니다. 경로 별칭과 모듈 해석 설정이 포함됩니다.

파일 명명 규칙

  • 컴포넌트: PascalCase (예: SelectBoxSQL.vue)
  • 유틸리티 함수: camelCase (예: common.js)
  • 상수: UPPER_SNAKE_CASE
  • 스토어: camelCase + Store (예: authStore.js)

다음 단계

프로젝트 구조를 이해했다면 다음 문서를 참고하세요:

',60)]))}const m=a(c,[["render",l]]);export{h as __pageData,m as default}; diff --git a/assets/getting-started_project-structure.md.BZGUsPTJ.lean.js b/assets/getting-started_project-structure.md.BZGUsPTJ.lean.js new file mode 100644 index 0000000..a43db6c --- /dev/null +++ b/assets/getting-started_project-structure.md.BZGUsPTJ.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o,aG as i}from"./chunks/framework.DytOxJW6.js";const h=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/project-structure.md","filePath":"getting-started/project-structure.md"}'),c={name:"getting-started/project-structure.md"};function l(r,e,n,t,d,p){return o(),s("div",null,e[0]||(e[0]=[i("",60)]))}const m=a(c,[["render",l]]);export{h as __pageData,m as default}; diff --git a/assets/getting-started_project-structure.md.gsHjCrOi.js b/assets/getting-started_project-structure.md.gsHjCrOi.js deleted file mode 100644 index 2a0c74f..0000000 --- a/assets/getting-started_project-structure.md.gsHjCrOi.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as s,o,aG as i}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/project-structure.md","filePath":"getting-started/project-structure.md"}'),c={name:"getting-started/project-structure.md"};function l(r,e,n,t,d,p){return o(),s("div",null,e[0]||(e[0]=[i('

프로젝트 구조

전체 디렉토리 구조

vue_project/\n├── public/                 # 정적 리소스 파일\n│   ├── custom-css/         # 커스텀 CSS 파일\n│   ├── favicon.ico         # 파비콘\n│   ├── loader.css          # 로더 스타일\n│   └── logo.png            # 로고 이미지\n├── src/                    # 소스 코드\n│   ├── App.vue             # 루트 컴포넌트\n│   ├── main.js             # 애플리케이션 진입점\n│   ├── CustomAxios.js      # Axios 인스턴스 설정\n│   ├── script/             # 비즈니스 로직 스크립트\n│   ├── utils/              # 유틸리티 함수 및 설정\n│   ├── vendor/             # 외부 라이브러리 및 템플릿\n│   └── views/              # 페이지 컴포넌트\n├── dist/                   # 빌드 결과물 (생성됨)\n├── node_modules/           # npm 패키지 (생성됨)\n├── .env                    # 환경 변수\n├── package.json            # 프로젝트 설정 및 의존성\n├── vite.config.js          # Vite 설정\n└── README.md               # 프로젝트 설명

주요 디렉토리 설명

/src - 소스 코드

프로젝트의 모든 소스 코드가 위치하는 디렉토리입니다.

/src/App.vue

애플리케이션의 루트 컴포넌트입니다. Vue Router의 <RouterView />를 포함하여 페이지 라우팅을 처리합니다.

/src/main.js

애플리케이션의 진입점입니다. Vue 앱을 생성하고 플러그인을 등록한 후 마운트합니다.

/src/CustomAxios.js

Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다. JWT 토큰 관리, 암호화/복호화, 에러 처리 등의 기능을 포함합니다.

/src/utils - 유틸리티

공통으로 사용되는 유틸리티 함수와 설정 파일들이 위치합니다.

/src/utils/common/

  • common.js: 문자열, 날짜, 숫자, 배열, 객체, 파일 처리 등 다양한 유틸리티 함수
  • comfcm.js: FCM(Firebase Cloud Messaging) 관련 유틸리티

/src/utils/stores/

Pinia 스토어 파일들이 위치합니다:

  • authStore.js: 인증 관련 상태 관리
  • loadingStore.js: 로딩 상태 관리
  • menuStore.js: 메뉴 정보 관리
  • sessionStore.js: 세션 데이터 관리
  • modalStore.js: 모달 상태 관리
  • tabStore.js: 탭 상태 관리
  • sidebarStore.js: 사이드바 상태 관리
  • logStore.js: 로그 관리
  • 기타 스토어들

/src/utils/plugins/

플러그인 설정 파일들이 위치합니다:

  • router/: Vue Router 설정
  • pinia.js: Pinia 설정
  • vuetify/: Vuetify 설정
  • iconify/: Iconify 아이콘 설정

/src/views - 페이지 컴포넌트

비즈니스 로직에 해당하는 페이지 컴포넌트들이 위치합니다.

/src/views/axpFramework/

프레임워크 핵심 모듈:

  • auth/: 로그인, 회원가입 등 인증 관련 페이지
  • main/: 메인 대시보드, 메인 레이아웃

/src/views/ess/

ESS(Employee Self Service) 모듈:

  • admin/: 관리자 기능
  • persadm/: 인사 관리
  • creditcard/: 신용카드 관리
  • education/: 교육 관리
  • estimation/: 견적 관리

/src/views/fcm/

FCM(Finance & HR) 모듈:

  • erp/: ERP 관련 기능
  • hr/: HR 관련 기능

/src/views/geosan/

geosan 모듈:

  • BI/: BI(Business Intelligence) 관련 기능

/src/views/ui/

공통 UI 컴포넌트:

  • components/: 재사용 가능한 컴포넌트
    • common/: 공통 컴포넌트 (버튼, 입력, 선택, 조회 등)
    • grid/: 그리드 관련 컴포넌트
    • popup/: 팝업 컴포넌트
    • menu/: 메뉴 컴포넌트
  • layouts/: 레이아웃 컴포넌트

/src/script - 비즈니스 로직

페이지 컴포넌트에서 사용되는 비즈니스 로직 스크립트 파일들이 위치합니다.

/src/vendor - 외부 라이브러리

외부 라이브러리와 템플릿 파일들이 위치합니다:

  • @core/: 핵심 컴포넌트 및 스타일
  • @layouts/: 레이아웃 컴포넌트
  • @dashboard/: 대시보드 컴포넌트
  • assets/: 이미지, 폰트, CSS 등 리소스
  • lib/: 서드파티 라이브러리

/public - 정적 리소스

빌드 시 그대로 복사되는 정적 파일들이 위치합니다.

설정 파일

package.json

프로젝트 메타데이터, 의존성, 스크립트가 정의된 파일입니다.

vite.config.js

Vite 빌드 도구의 설정 파일입니다. 플러그인, 경로 별칭, 프록시 설정 등이 포함됩니다.

.env

환경 변수 설정 파일입니다. API 서버 주소, 인증 서버 주소 등을 설정합니다.

jsconfig.json

JavaScript 프로젝트 설정 파일입니다. 경로 별칭과 모듈 해석 설정이 포함됩니다.

파일 명명 규칙

  • 컴포넌트: PascalCase (예: SelectBoxSQL.vue)
  • 유틸리티 함수: camelCase (예: common.js)
  • 상수: UPPER_SNAKE_CASE
  • 스토어: camelCase + Store (예: authStore.js)

다음 단계

프로젝트 구조를 이해했다면 다음 문서를 참고하세요:

',60)]))}const m=a(c,[["render",l]]);export{h as __pageData,m as default}; diff --git a/assets/getting-started_project-structure.md.gsHjCrOi.lean.js b/assets/getting-started_project-structure.md.gsHjCrOi.lean.js deleted file mode 100644 index 05b53d3..0000000 --- a/assets/getting-started_project-structure.md.gsHjCrOi.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as s,o,aG as i}from"./chunks/framework.CrOSaJJH.js";const h=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/project-structure.md","filePath":"getting-started/project-structure.md"}'),c={name:"getting-started/project-structure.md"};function l(r,e,n,t,d,p){return o(),s("div",null,e[0]||(e[0]=[i("",60)]))}const m=a(c,[["render",l]]);export{h as __pageData,m as default}; diff --git a/assets/getting-started_quick-start.md.BnRQP6eH.js b/assets/getting-started_quick-start.md.BnRQP6eH.js new file mode 100644 index 0000000..954d3a9 --- /dev/null +++ b/assets/getting-started_quick-start.md.BnRQP6eH.js @@ -0,0 +1,136 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"빠른 시작 가이드","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/quick-start.md","filePath":"getting-started/quick-start.md"}'),l={name:"getting-started/quick-start.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

빠른 시작 가이드

이 가이드는 프로젝트를 처음 시작하는 개발자를 위한 빠른 시작 가이드입니다.

1. 프로젝트 클론 및 설치

bash
# 저장소 클론
+git clone <repository-url>
+cd vue_project
+
+# 의존성 설치
+npm install

2. 환경 변수 설정

프로젝트 루트에 .env 파일을 생성하고 다음 내용을 추가합니다:

env
VITE_API_BASE_URL=http://localhost:8080
+VITE_AUTH_BASE_URL=http://localhost:8080
+VITE_FILE_SERVER_URL=http://localhost:8080

실제 서버 주소에 맞게 수정하세요.

3. 개발 서버 실행

bash
npm run dev

브라우저에서 http://localhost:5173으로 접속합니다.

4. 기본 로그인

개발 환경에서 기본 로그인 정보:

  • 아이디: 6121607 (개발용)
  • 비밀번호: D!d6121607 (개발용)

⚠️ 실제 운영 환경에서는 다른 계정을 사용하세요.

5. 첫 번째 컴포넌트 만들기

5.1 페이지 컴포넌트 생성

src/views/ess/admin/ 디렉토리에 새 파일을 생성합니다:

vue
<!-- src/views/ess/admin/MyFirstPage.vue -->
+<template>
+  <div>
+    <h1>내 첫 번째 페이지</h1>
+    <v-btn @click="handleClick">클릭하세요</v-btn>
+  </div>
+</template>
+
+<script setup>
+const handleClick = () => {
+  alert('버튼이 클릭되었습니다!')
+}
+</script>

5.2 라우트 등록

src/utils/plugins/router/routes.js 파일에 라우트를 추가합니다:

javascript
{
+  path: '/MyFirstPage',
+  name: 'MyFirstPage',
+  component: () => import('@/views/ess/admin/MyFirstPage.vue'),
+}

5.3 메뉴 등록 (선택사항)

백엔드에서 메뉴를 등록하거나, 개발 환경에서 직접 테스트할 수 있습니다.

6. API 호출하기

컴포넌트에서 API를 호출하는 예제:

vue
<script setup>
+import { ref } from 'vue'
+import axiosInstance from '@/CustomAxios.js'
+
+const data = ref(null)
+
+const fetchData = async () => {
+  try {
+    const response = await axiosInstance.post('/api/your-endpoint', {
+      // 파라미터
+    })
+    
+    if (response.status === 'S') {
+      data.value = response.data
+    }
+  } catch (error) {
+    console.error('에러 발생:', error)
+  }
+}
+
+// 컴포넌트 마운트 시 데이터 로드
+onMounted(() => {
+  fetchData()
+})
+</script>

7. 공통 컴포넌트 사용하기

SelectBoxSQL 사용 예제

vue
<template>
+  <SelectBoxSQL
+    v-model="selectedValue"
+    :data="options"
+    option-label="label"
+    option-value="value"
+    default-option
+  />
+</template>
+
+<script setup>
+import { ref } from 'vue'
+
+const selectedValue = ref('')
+const options = ref([
+  { label: '옵션 1', value: '1' },
+  { label: '옵션 2', value: '2' },
+])
+</script>

AG Grid 사용 예제

vue
<template>
+  <AgGridVue
+    :columnDefs="columnDefs"
+    :rowData="rowData"
+    :defaultColDef="defaultColDef"
+    class="ag-theme-balham"
+    style="height: 500px;"
+  />
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { AgGridVue } from 'ag-grid-vue3'
+
+const columnDefs = ref([
+  { field: 'id', headerName: 'ID' },
+  { field: 'name', headerName: '이름' },
+])
+
+const rowData = ref([
+  { id: 1, name: '홍길동' },
+  { id: 2, name: '김철수' },
+])
+
+const defaultColDef = {
+  sortable: true,
+  filter: true,
+}
+</script>

8. Pinia 스토어 사용하기

vue
<script setup>
+import { useAuthStore } from '@/utils/stores/authStore.js'
+import { useLoadingStore } from '@/utils/stores/loadingStore.js'
+
+const authStore = useAuthStore()
+const loadingStore = useLoadingStore()
+
+// 스토어 상태 읽기
+const isAuthenticated = computed(() => authStore.isAuthenticated)
+
+// 스토어 액션 호출
+const handleAction = () => {
+  loadingStore.showLoading()
+  // 작업 수행
+  loadingStore.hideLoading()
+}
+</script>

9. 유틸리티 함수 사용하기

common.js의 함수들은 자동으로 임포트되므로 바로 사용할 수 있습니다:

vue
<script setup>
+// 빈 값 체크
+if (gfIsEmpty(value)) {
+  console.log('값이 비어있습니다')
+}
+
+// null/undefined 처리
+const safeValue = gfNvl(value, '기본값')
+
+// 날짜 포맷팅
+const formattedDate = gfFormatDateString('20240101', '.')
+// 결과: '2024.01.01'
+</script>

10. 스타일링

Vuetify 컴포넌트 사용

vue
<template>
+  <v-card>
+    <v-card-title>제목</v-card-title>
+    <v-card-text>내용</v-card-text>
+  </v-card>
+</template>

커스텀 스타일

vue
<style scoped lang="scss">
+.my-component {
+  padding: 16px;
+  
+  .title {
+    font-size: 18px;
+    font-weight: bold;
+  }
+}
+</style>

다음 단계

기본적인 사용법을 익혔다면 다음 문서들을 참고하여 더 깊이 있게 학습하세요:

`,45)]))}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/getting-started_quick-start.md.BnRQP6eH.lean.js b/assets/getting-started_quick-start.md.BnRQP6eH.lean.js new file mode 100644 index 0000000..cabfdac --- /dev/null +++ b/assets/getting-started_quick-start.md.BnRQP6eH.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"빠른 시작 가이드","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/quick-start.md","filePath":"getting-started/quick-start.md"}'),l={name:"getting-started/quick-start.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",45)]))}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/getting-started_quick-start.md.CDoTHUN9.js b/assets/getting-started_quick-start.md.CDoTHUN9.js deleted file mode 100644 index b0ed609..0000000 --- a/assets/getting-started_quick-start.md.CDoTHUN9.js +++ /dev/null @@ -1,136 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"빠른 시작 가이드","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/quick-start.md","filePath":"getting-started/quick-start.md"}'),l={name:"getting-started/quick-start.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

빠른 시작 가이드

이 가이드는 프로젝트를 처음 시작하는 개발자를 위한 빠른 시작 가이드입니다.

1. 프로젝트 클론 및 설치

bash
# 저장소 클론
-git clone <repository-url>
-cd vue_project
-
-# 의존성 설치
-npm install

2. 환경 변수 설정

프로젝트 루트에 .env 파일을 생성하고 다음 내용을 추가합니다:

env
VITE_API_BASE_URL=http://localhost:8080
-VITE_AUTH_BASE_URL=http://localhost:8080
-VITE_FILE_SERVER_URL=http://localhost:8080

실제 서버 주소에 맞게 수정하세요.

3. 개발 서버 실행

bash
npm run dev

브라우저에서 http://localhost:5173으로 접속합니다.

4. 기본 로그인

개발 환경에서 기본 로그인 정보:

  • 아이디: 6121607 (개발용)
  • 비밀번호: D!d6121607 (개발용)

⚠️ 실제 운영 환경에서는 다른 계정을 사용하세요.

5. 첫 번째 컴포넌트 만들기

5.1 페이지 컴포넌트 생성

src/views/ess/admin/ 디렉토리에 새 파일을 생성합니다:

vue
<!-- src/views/ess/admin/MyFirstPage.vue -->
-<template>
-  <div>
-    <h1>내 첫 번째 페이지</h1>
-    <v-btn @click="handleClick">클릭하세요</v-btn>
-  </div>
-</template>
-
-<script setup>
-const handleClick = () => {
-  alert('버튼이 클릭되었습니다!')
-}
-</script>

5.2 라우트 등록

src/utils/plugins/router/routes.js 파일에 라우트를 추가합니다:

javascript
{
-  path: '/MyFirstPage',
-  name: 'MyFirstPage',
-  component: () => import('@/views/ess/admin/MyFirstPage.vue'),
-}

5.3 메뉴 등록 (선택사항)

백엔드에서 메뉴를 등록하거나, 개발 환경에서 직접 테스트할 수 있습니다.

6. API 호출하기

컴포넌트에서 API를 호출하는 예제:

vue
<script setup>
-import { ref } from 'vue'
-import axiosInstance from '@/CustomAxios.js'
-
-const data = ref(null)
-
-const fetchData = async () => {
-  try {
-    const response = await axiosInstance.post('/api/your-endpoint', {
-      // 파라미터
-    })
-    
-    if (response.status === 'S') {
-      data.value = response.data
-    }
-  } catch (error) {
-    console.error('에러 발생:', error)
-  }
-}
-
-// 컴포넌트 마운트 시 데이터 로드
-onMounted(() => {
-  fetchData()
-})
-</script>

7. 공통 컴포넌트 사용하기

SelectBoxSQL 사용 예제

vue
<template>
-  <SelectBoxSQL
-    v-model="selectedValue"
-    :data="options"
-    option-label="label"
-    option-value="value"
-    default-option
-  />
-</template>
-
-<script setup>
-import { ref } from 'vue'
-
-const selectedValue = ref('')
-const options = ref([
-  { label: '옵션 1', value: '1' },
-  { label: '옵션 2', value: '2' },
-])
-</script>

AG Grid 사용 예제

vue
<template>
-  <AgGridVue
-    :columnDefs="columnDefs"
-    :rowData="rowData"
-    :defaultColDef="defaultColDef"
-    class="ag-theme-balham"
-    style="height: 500px;"
-  />
-</template>
-
-<script setup>
-import { ref } from 'vue'
-import { AgGridVue } from 'ag-grid-vue3'
-
-const columnDefs = ref([
-  { field: 'id', headerName: 'ID' },
-  { field: 'name', headerName: '이름' },
-])
-
-const rowData = ref([
-  { id: 1, name: '홍길동' },
-  { id: 2, name: '김철수' },
-])
-
-const defaultColDef = {
-  sortable: true,
-  filter: true,
-}
-</script>

8. Pinia 스토어 사용하기

vue
<script setup>
-import { useAuthStore } from '@/utils/stores/authStore.js'
-import { useLoadingStore } from '@/utils/stores/loadingStore.js'
-
-const authStore = useAuthStore()
-const loadingStore = useLoadingStore()
-
-// 스토어 상태 읽기
-const isAuthenticated = computed(() => authStore.isAuthenticated)
-
-// 스토어 액션 호출
-const handleAction = () => {
-  loadingStore.showLoading()
-  // 작업 수행
-  loadingStore.hideLoading()
-}
-</script>

9. 유틸리티 함수 사용하기

common.js의 함수들은 자동으로 임포트되므로 바로 사용할 수 있습니다:

vue
<script setup>
-// 빈 값 체크
-if (gfIsEmpty(value)) {
-  console.log('값이 비어있습니다')
-}
-
-// null/undefined 처리
-const safeValue = gfNvl(value, '기본값')
-
-// 날짜 포맷팅
-const formattedDate = gfFormatDateString('20240101', '.')
-// 결과: '2024.01.01'
-</script>

10. 스타일링

Vuetify 컴포넌트 사용

vue
<template>
-  <v-card>
-    <v-card-title>제목</v-card-title>
-    <v-card-text>내용</v-card-text>
-  </v-card>
-</template>

커스텀 스타일

vue
<style scoped lang="scss">
-.my-component {
-  padding: 16px;
-  
-  .title {
-    font-size: 18px;
-    font-weight: bold;
-  }
-}
-</style>

다음 단계

기본적인 사용법을 익혔다면 다음 문서들을 참고하여 더 깊이 있게 학습하세요:

`,45)]))}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/getting-started_quick-start.md.CDoTHUN9.lean.js b/assets/getting-started_quick-start.md.CDoTHUN9.lean.js deleted file mode 100644 index 565701f..0000000 --- a/assets/getting-started_quick-start.md.CDoTHUN9.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"빠른 시작 가이드","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/quick-start.md","filePath":"getting-started/quick-start.md"}'),l={name:"getting-started/quick-start.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",45)]))}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/getting-started_requirements.md.CoPtAB8Z.js b/assets/getting-started_requirements.md.CoPtAB8Z.js new file mode 100644 index 0000000..15f9e94 --- /dev/null +++ b/assets/getting-started_requirements.md.CoPtAB8Z.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as l,aG as t}from"./chunks/framework.DytOxJW6.js";const p=JSON.parse('{"title":"시스템 요구사항","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/requirements.md","filePath":"getting-started/requirements.md"}'),o={name:"getting-started/requirements.md"};function r(n,a,s,d,h,c){return l(),i("div",null,a[0]||(a[0]=[t('

시스템 요구사항

필수 소프트웨어

Node.js

  • 최소 버전: Node.js 18.x 이상
  • 권장 버전: Node.js 20.x LTS
  • 설치 확인: 터미널에서 node --version 명령어로 확인

npm 또는 yarn

  • npm: Node.js와 함께 자동 설치됨 (버전 9.x 이상 권장)
  • yarn: 선택 사항 (npm 대신 사용 가능)
  • 설치 확인: 터미널에서 npm --version 또는 yarn --version 명령어로 확인

Git

  • 최소 버전: Git 2.30 이상
  • 설치 확인: 터미널에서 git --version 명령어로 확인

개발 도구

코드 에디터

  • 권장: Visual Studio Code (VS Code)
  • 필수 확장 프로그램:
    • Volar (Vue 3 지원)
    • ESLint
    • Prettier
    • Vite

브라우저

개발 및 테스트를 위해 다음 브라우저를 지원합니다:

  • Chrome (최신 버전)
  • Firefox (최신 버전)
  • Edge (최신 버전)
  • Safari (최신 버전)

운영 체제

다음 운영 체제에서 개발 및 실행이 가능합니다:

  • Windows 10/11
  • macOS 10.15 이상
  • Linux (Ubuntu 20.04 이상 권장)

하드웨어 요구사항

최소 사양

  • CPU: 2코어 이상
  • RAM: 4GB 이상
  • 디스크 공간: 2GB 이상의 여유 공간

권장 사양

  • CPU: 4코어 이상
  • RAM: 8GB 이상
  • 디스크 공간: 5GB 이상의 여유 공간
  • SSD: 개발 속도 향상을 위해 권장

네트워크 요구사항

개발 환경

  • 백엔드 API 서버와의 통신을 위한 네트워크 연결 필요
  • 인터넷 연결 (npm 패키지 설치 시 필요)

환경 변수

프로젝트 루트에 .env 파일이 필요하며, 다음 환경 변수들이 설정되어야 합니다:

  • VITE_API_BASE_URL: 백엔드 API 서버 주소
  • VITE_AUTH_BASE_URL: 인증 서버 주소
  • VITE_FILE_SERVER_URL: 파일 서버 주소

의존성 확인

프로젝트를 클론한 후 다음 명령어로 의존성을 확인할 수 있습니다:

bash
npm install

설치가 완료되면 node_modules 폴더가 생성되고 모든 패키지가 설치됩니다.

버전 관리

프로젝트는 .nvmrc 파일을 통해 Node.js 버전을 관리합니다. nvm을 사용하는 경우:

bash
nvm use

이 명령어로 프로젝트에 맞는 Node.js 버전으로 자동 전환됩니다.

다음 단계

요구사항을 확인했다면 다음 문서를 참고하여 개발 환경을 설정하세요:

',39)]))}const g=e(o,[["render",r]]);export{p as __pageData,g as default}; diff --git a/assets/getting-started_requirements.md.CoPtAB8Z.lean.js b/assets/getting-started_requirements.md.CoPtAB8Z.lean.js new file mode 100644 index 0000000..e48023f --- /dev/null +++ b/assets/getting-started_requirements.md.CoPtAB8Z.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as l,aG as t}from"./chunks/framework.DytOxJW6.js";const p=JSON.parse('{"title":"시스템 요구사항","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/requirements.md","filePath":"getting-started/requirements.md"}'),o={name:"getting-started/requirements.md"};function r(n,a,s,d,h,c){return l(),i("div",null,a[0]||(a[0]=[t("",39)]))}const g=e(o,[["render",r]]);export{p as __pageData,g as default}; diff --git a/assets/getting-started_requirements.md.H1Py_WqL.js b/assets/getting-started_requirements.md.H1Py_WqL.js deleted file mode 100644 index f47445e..0000000 --- a/assets/getting-started_requirements.md.H1Py_WqL.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as l,aG as t}from"./chunks/framework.CrOSaJJH.js";const p=JSON.parse('{"title":"시스템 요구사항","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/requirements.md","filePath":"getting-started/requirements.md"}'),o={name:"getting-started/requirements.md"};function r(n,a,s,d,h,c){return l(),i("div",null,a[0]||(a[0]=[t('

시스템 요구사항

필수 소프트웨어

Node.js

  • 최소 버전: Node.js 18.x 이상
  • 권장 버전: Node.js 20.x LTS
  • 설치 확인: 터미널에서 node --version 명령어로 확인

npm 또는 yarn

  • npm: Node.js와 함께 자동 설치됨 (버전 9.x 이상 권장)
  • yarn: 선택 사항 (npm 대신 사용 가능)
  • 설치 확인: 터미널에서 npm --version 또는 yarn --version 명령어로 확인

Git

  • 최소 버전: Git 2.30 이상
  • 설치 확인: 터미널에서 git --version 명령어로 확인

개발 도구

코드 에디터

  • 권장: Visual Studio Code (VS Code)
  • 필수 확장 프로그램:
    • Volar (Vue 3 지원)
    • ESLint
    • Prettier
    • Vite

브라우저

개발 및 테스트를 위해 다음 브라우저를 지원합니다:

  • Chrome (최신 버전)
  • Firefox (최신 버전)
  • Edge (최신 버전)
  • Safari (최신 버전)

운영 체제

다음 운영 체제에서 개발 및 실행이 가능합니다:

  • Windows 10/11
  • macOS 10.15 이상
  • Linux (Ubuntu 20.04 이상 권장)

하드웨어 요구사항

최소 사양

  • CPU: 2코어 이상
  • RAM: 4GB 이상
  • 디스크 공간: 2GB 이상의 여유 공간

권장 사양

  • CPU: 4코어 이상
  • RAM: 8GB 이상
  • 디스크 공간: 5GB 이상의 여유 공간
  • SSD: 개발 속도 향상을 위해 권장

네트워크 요구사항

개발 환경

  • 백엔드 API 서버와의 통신을 위한 네트워크 연결 필요
  • 인터넷 연결 (npm 패키지 설치 시 필요)

환경 변수

프로젝트 루트에 .env 파일이 필요하며, 다음 환경 변수들이 설정되어야 합니다:

  • VITE_API_BASE_URL: 백엔드 API 서버 주소
  • VITE_AUTH_BASE_URL: 인증 서버 주소
  • VITE_FILE_SERVER_URL: 파일 서버 주소

의존성 확인

프로젝트를 클론한 후 다음 명령어로 의존성을 확인할 수 있습니다:

bash
npm install

설치가 완료되면 node_modules 폴더가 생성되고 모든 패키지가 설치됩니다.

버전 관리

프로젝트는 .nvmrc 파일을 통해 Node.js 버전을 관리합니다. nvm을 사용하는 경우:

bash
nvm use

이 명령어로 프로젝트에 맞는 Node.js 버전으로 자동 전환됩니다.

다음 단계

요구사항을 확인했다면 다음 문서를 참고하여 개발 환경을 설정하세요:

',39)]))}const g=e(o,[["render",r]]);export{p as __pageData,g as default}; diff --git a/assets/getting-started_requirements.md.H1Py_WqL.lean.js b/assets/getting-started_requirements.md.H1Py_WqL.lean.js deleted file mode 100644 index e6314a9..0000000 --- a/assets/getting-started_requirements.md.H1Py_WqL.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as l,aG as t}from"./chunks/framework.CrOSaJJH.js";const p=JSON.parse('{"title":"시스템 요구사항","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/requirements.md","filePath":"getting-started/requirements.md"}'),o={name:"getting-started/requirements.md"};function r(n,a,s,d,h,c){return l(),i("div",null,a[0]||(a[0]=[t("",39)]))}const g=e(o,[["render",r]]);export{p as __pageData,g as default}; diff --git a/assets/getting-started_setup.md.CcPoeFyE.js b/assets/getting-started_setup.md.CcPoeFyE.js deleted file mode 100644 index 6aee8dc..0000000 --- a/assets/getting-started_setup.md.CcPoeFyE.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"개발 환경 설정","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/setup.md","filePath":"getting-started/setup.md"}'),n={name:"getting-started/setup.md"};function l(h,a,p,d,o,r){return e(),i("div",null,a[0]||(a[0]=[t(`

개발 환경 설정

프로젝트 클론

먼저 프로젝트 저장소를 클론합니다:

bash
git clone <repository-url>
-cd vue_project

Node.js 버전 확인

프로젝트 루트의 .nvmrc 파일에 명시된 Node.js 버전을 사용합니다. nvm을 사용하는 경우:

bash
nvm use

또는 직접 버전을 확인:

bash
node --version  # Node.js 18.x 이상이어야 함

의존성 설치

프로젝트 루트 디렉토리에서 다음 명령어를 실행합니다:

bash
npm install

이 명령어는 다음을 수행합니다:

  • package.json에 명시된 모든 의존성 패키지 설치
  • postinstall 스크립트 실행 (아이콘 빌드)

환경 변수 설정

프로젝트 루트에 .env 파일을 생성하고 필요한 환경 변수를 설정합니다:

env
# API 서버 주소
-VITE_API_BASE_URL=http://localhost:8080
-
-# 인증 서버 주소
-VITE_AUTH_BASE_URL=http://localhost:8080
-
-# 파일 서버 주소
-VITE_FILE_SERVER_URL=http://localhost:8080

환경별 설정 파일

프로젝트는 다음 환경별 설정 파일을 지원합니다:

  • .env: 기본 환경 변수
  • .env.development: 개발 환경 변수
  • .env.production: 프로덕션 환경 변수
  • .env.staging: 스테이징 환경 변수

각 환경에 맞는 변수를 설정하면 됩니다.

개발 서버 실행

환경 설정이 완료되면 개발 서버를 실행합니다:

bash
npm run dev

개발 서버는 기본적으로 http://localhost:5173에서 실행됩니다.

브라우저에서 해당 주소로 접속하면 애플리케이션을 확인할 수 있습니다.

빌드

개발 빌드

bash
npm run build:dev

스테이징 빌드

bash
npm run build:staging

프로덕션 빌드

bash
npm run build:prod

또는

bash
npm run build

빌드 결과물은 dist 폴더에 생성됩니다.

빌드 미리보기

빌드된 결과물을 로컬에서 미리 볼 수 있습니다:

bash
npm run preview

기본적으로 http://localhost:5050에서 실행됩니다.

추가 설정

아이콘 빌드

프로젝트는 Iconify를 사용하여 아이콘을 관리합니다. 아이콘을 추가하거나 변경한 경우:

bash
npm run build:icons

ESLint 설정

프로젝트는 ESLint를 사용하여 코드 품질을 관리합니다. 자동 임포트를 위한 설정 파일은 .eslintrc-auto-import.json에 있습니다.

Prettier 설정

코드 포맷팅은 Prettier를 사용합니다. 설정 파일은 .prettierrc.json에 있습니다.

문제 해결

포트 충돌

개발 서버 포트(5173)가 이미 사용 중인 경우, Vite가 자동으로 다른 포트를 사용합니다. 콘솔에 표시된 포트 번호를 확인하세요.

의존성 설치 오류

의존성 설치 중 오류가 발생하는 경우:

  1. node_modules 폴더와 package-lock.json 삭제
  2. npm cache clean --force 실행
  3. npm install 다시 실행

환경 변수 인식 안 됨

환경 변수가 인식되지 않는 경우:

  1. .env 파일이 프로젝트 루트에 있는지 확인
  2. 환경 변수 이름이 VITE_로 시작하는지 확인
  3. 개발 서버를 재시작

다음 단계

개발 환경 설정이 완료되었다면 다음 문서를 참고하세요:

`,60)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/getting-started_setup.md.CcPoeFyE.lean.js b/assets/getting-started_setup.md.CcPoeFyE.lean.js deleted file mode 100644 index b438051..0000000 --- a/assets/getting-started_setup.md.CcPoeFyE.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"개발 환경 설정","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/setup.md","filePath":"getting-started/setup.md"}'),n={name:"getting-started/setup.md"};function l(h,a,p,d,o,r){return e(),i("div",null,a[0]||(a[0]=[t("",60)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/getting-started_setup.md.DK8D_N6J.js b/assets/getting-started_setup.md.DK8D_N6J.js new file mode 100644 index 0000000..7d9d96c --- /dev/null +++ b/assets/getting-started_setup.md.DK8D_N6J.js @@ -0,0 +1,9 @@ +import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"개발 환경 설정","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/setup.md","filePath":"getting-started/setup.md"}'),n={name:"getting-started/setup.md"};function l(h,a,p,d,o,r){return e(),i("div",null,a[0]||(a[0]=[t(`

개발 환경 설정

프로젝트 클론

먼저 프로젝트 저장소를 클론합니다:

bash
git clone <repository-url>
+cd vue_project

Node.js 버전 확인

프로젝트 루트의 .nvmrc 파일에 명시된 Node.js 버전을 사용합니다. nvm을 사용하는 경우:

bash
nvm use

또는 직접 버전을 확인:

bash
node --version  # Node.js 18.x 이상이어야 함

의존성 설치

프로젝트 루트 디렉토리에서 다음 명령어를 실행합니다:

bash
npm install

이 명령어는 다음을 수행합니다:

  • package.json에 명시된 모든 의존성 패키지 설치
  • postinstall 스크립트 실행 (아이콘 빌드)

환경 변수 설정

프로젝트 루트에 .env 파일을 생성하고 필요한 환경 변수를 설정합니다:

env
# API 서버 주소
+VITE_API_BASE_URL=http://localhost:8080
+
+# 인증 서버 주소
+VITE_AUTH_BASE_URL=http://localhost:8080
+
+# 파일 서버 주소
+VITE_FILE_SERVER_URL=http://localhost:8080

환경별 설정 파일

프로젝트는 다음 환경별 설정 파일을 지원합니다:

  • .env: 기본 환경 변수
  • .env.development: 개발 환경 변수
  • .env.production: 프로덕션 환경 변수
  • .env.staging: 스테이징 환경 변수

각 환경에 맞는 변수를 설정하면 됩니다.

개발 서버 실행

환경 설정이 완료되면 개발 서버를 실행합니다:

bash
npm run dev

개발 서버는 기본적으로 http://localhost:5173에서 실행됩니다.

브라우저에서 해당 주소로 접속하면 애플리케이션을 확인할 수 있습니다.

빌드

개발 빌드

bash
npm run build:dev

스테이징 빌드

bash
npm run build:staging

프로덕션 빌드

bash
npm run build:prod

또는

bash
npm run build

빌드 결과물은 dist 폴더에 생성됩니다.

빌드 미리보기

빌드된 결과물을 로컬에서 미리 볼 수 있습니다:

bash
npm run preview

기본적으로 http://localhost:5050에서 실행됩니다.

추가 설정

아이콘 빌드

프로젝트는 Iconify를 사용하여 아이콘을 관리합니다. 아이콘을 추가하거나 변경한 경우:

bash
npm run build:icons

ESLint 설정

프로젝트는 ESLint를 사용하여 코드 품질을 관리합니다. 자동 임포트를 위한 설정 파일은 .eslintrc-auto-import.json에 있습니다.

Prettier 설정

코드 포맷팅은 Prettier를 사용합니다. 설정 파일은 .prettierrc.json에 있습니다.

문제 해결

포트 충돌

개발 서버 포트(5173)가 이미 사용 중인 경우, Vite가 자동으로 다른 포트를 사용합니다. 콘솔에 표시된 포트 번호를 확인하세요.

의존성 설치 오류

의존성 설치 중 오류가 발생하는 경우:

  1. node_modules 폴더와 package-lock.json 삭제
  2. npm cache clean --force 실행
  3. npm install 다시 실행

환경 변수 인식 안 됨

환경 변수가 인식되지 않는 경우:

  1. .env 파일이 프로젝트 루트에 있는지 확인
  2. 환경 변수 이름이 VITE_로 시작하는지 확인
  3. 개발 서버를 재시작

다음 단계

개발 환경 설정이 완료되었다면 다음 문서를 참고하세요:

`,60)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/getting-started_setup.md.DK8D_N6J.lean.js b/assets/getting-started_setup.md.DK8D_N6J.lean.js new file mode 100644 index 0000000..5216162 --- /dev/null +++ b/assets/getting-started_setup.md.DK8D_N6J.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"개발 환경 설정","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/setup.md","filePath":"getting-started/setup.md"}'),n={name:"getting-started/setup.md"};function l(h,a,p,d,o,r){return e(),i("div",null,a[0]||(a[0]=[t("",60)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/index.md.C3l6ASiS.js b/assets/index.md.C3l6ASiS.js deleted file mode 100644 index 152e795..0000000 --- a/assets/index.md.C3l6ASiS.js +++ /dev/null @@ -1,28 +0,0 @@ -import{_ as i,c as s,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"AXP Dev Docs","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),l={name:"index.md"};function n(r,a,h,o,p,g){return t(),s("div",null,a[0]||(a[0]=[e(`

AXP Dev Docs

이 문서는 무엇인가요?

AXP 프론트엔드 프로젝트에서 공통 컴포넌트·유틸·상태 관리 패턴을 표준화해서
다른 개발자들이 빠르게 신규 화면/기능을 개발할 수 있도록 돕는 개발자용 가이드 문서입니다.

  • Vue 3 + Vite + Pinia + Vuetify 기반
  • 공통 SelectBox, Grid, Popup, Layout 등 재사용 컴포넌트 제공
  • CustomAxios, 공통 유틸, Pinia 스토어 등 프로젝트 전용 규칙 정리

처음 온 개발자를 위한 3단계

1. 프로젝트 전체 그림 이해하기

2. 로컬 개발 환경 구축하기

3. AXP 방식 개발 패턴 익히기


핵심 아키텍처 빠른 링크

AXP 프로젝트에서 반드시 알아야 하는 핵심 모듈들입니다.

상태 관리 (Pinia Stores)

프로젝트의 상태 관리는 Pinia를 사용합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

HTTP 통신 규약

모든 API 호출은 CustomAxios를 통해 이루어지며, 자동으로 토큰 관리, 암호화, 에러 처리가 됩니다.

인증 및 보안


UI 컴포넌트 사용 가이드

자주 쓰는 컴포넌트들은 아래 문서에서 상세 사용법과 예제를 제공합니다.

공통 컴포넌트

그리드 컴포넌트

팝업 컴포넌트

레이아웃 컴포넌트

  • 메인 레이아웃: Main.vue - 메인 애플리케이션 레이아웃
  • 블랭크 레이아웃: blank.vue - 인증 페이지 레이아웃
  • 팝업 레이아웃: popBlank.vue - 팝업 창 레이아웃

유틸리티 함수

프로젝트 전반에서 사용되는 공통 유틸리티 함수들입니다. 자동으로 임포트되므로 별도의 import 문 없이 바로 사용할 수 있습니다.


새 화면을 만들 때 추천 흐름

1. 페이지 생성

2. 데이터 통신 설계

3. UI 구성

4. 상태 관리

5. 스타일링


기술 스택

프로젝트에서 사용하는 주요 기술 스택에 대한 상세 정보입니다.


프로젝트 구조

프로젝트의 디렉토리 구조와 각 디렉토리의 역할을 이해합니다.


모듈별 가이드

각 비즈니스 모듈에 대한 가이드입니다.


환경 설정

개발 및 배포 환경 설정에 대한 정보입니다.


코딩 컨벤션

프로젝트에서 지켜야 할 코딩 규칙입니다.


테스트

프로젝트의 테스트 방법입니다.


빌드 및 배포

프로젝트 빌드 및 배포 방법입니다.


트러블슈팅

자주 발생하는 문제와 해결 방법입니다.


참고 자료

프로젝트 개발 시 참고할 수 있는 자료입니다.


빠른 참조

자주 사용하는 함수

javascript
// 빈 값 체크
-if (gfIsEmpty(value)) { /* ... */ }
-
-// null 처리
-const safeValue = gfNvl(value, '기본값')
-
-// 날짜 포맷팅
-const formatted = gfFormatDateString('20240101', '.')
-
-// 숫자 포맷팅
-const formatted = gfNumberFormat(1234567)

자주 사용하는 스토어

javascript
// 인증 상태 확인
-const authStore = useAuthStore()
-if (authStore.isAuthenticated) { /* ... */ }
-
-// 로딩 표시
-const loadingStore = useLoadingStore()
-loadingStore.showLoading()
-
-// 세션 값 가져오기
-const sessionStore = useSessionStore()
-const userId = sessionStore.getSessionValue('UserID')

API 호출 기본 패턴

javascript
try {
-  const response = await axiosInstance.post('/api/endpoint', params)
-  if (response.status === 'S') {
-    // 성공 처리
-  }
-} catch (error) {
-  // 에러 처리 (자동으로 처리됨)
-}

다음 단계

이제 프로젝트에 대한 기본적인 이해가 되셨다면:

  1. 빠른 시작 가이드로 첫 번째 페이지를 만들어보세요
  2. 개발 가이드에서 상세한 개발 방법을 확인하세요
  3. UI 컴포넌트 문서에서 컴포넌트 사용법을 익히세요

💡 : 문서를 검색하려면 브라우저의 Ctrl+F (또는 Cmd+F)를 사용하거나, VitePress의 검색 기능을 활용하세요.

`,100)]))}const u=i(l,[["render",n]]);export{k as __pageData,u as default}; diff --git a/assets/index.md.C3l6ASiS.lean.js b/assets/index.md.C3l6ASiS.lean.js deleted file mode 100644 index ab4c79b..0000000 --- a/assets/index.md.C3l6ASiS.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as s,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"AXP Dev Docs","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),l={name:"index.md"};function n(r,a,h,o,p,g){return t(),s("div",null,a[0]||(a[0]=[e("",100)]))}const u=i(l,[["render",n]]);export{k as __pageData,u as default}; diff --git a/assets/index.md.CV36ZjpW.js b/assets/index.md.CV36ZjpW.js new file mode 100644 index 0000000..b1091f9 --- /dev/null +++ b/assets/index.md.CV36ZjpW.js @@ -0,0 +1,28 @@ +import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"AXP Dev Docs","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),l={name:"index.md"};function n(r,s,o,h,p,d){return t(),i("div",null,s[0]||(s[0]=[e(`

AXP Dev Docs

이 문서는 무엇인가요?

AXP 프론트엔드 프로젝트에서 공통 컴포넌트·유틸·상태 관리 패턴을 표준화해서
다른 개발자들이 빠르게 신규 화면/기능을 개발할 수 있도록 돕는 개발자용 가이드 문서입니다.

  • Vue 3 + Vite + Pinia + Vuetify 기반
  • 공통 SelectBox, Grid, Popup, Layout 등 재사용 컴포넌트 제공
  • CustomAxios, 공통 유틸, Pinia 스토어 등 프로젝트 전용 규칙 정리

처음 온 개발자를 위한 3단계

1. 프로젝트 전체 그림 이해하기

2. 로컬 개발 환경 구축하기

3. AXP 방식 개발 패턴 익히기


핵심 아키텍처 빠른 링크

AXP 프로젝트에서 반드시 알아야 하는 핵심 모듈들입니다.

상태 관리 (Pinia Stores)

프로젝트의 상태 관리는 Pinia를 사용합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

HTTP 통신 규약

모든 API 호출은 CustomAxios를 통해 이루어지며, 자동으로 토큰 관리, 암호화, 에러 처리가 됩니다.

인증 및 보안


UI 컴포넌트 사용 가이드

자주 쓰는 컴포넌트들은 아래 문서에서 상세 사용법과 예제를 제공합니다.

공통 컴포넌트

그리드 컴포넌트

팝업 컴포넌트

레이아웃 컴포넌트

  • 메인 레이아웃: Main.vue - 메인 애플리케이션 레이아웃
  • 블랭크 레이아웃: blank.vue - 인증 페이지 레이아웃
  • 팝업 레이아웃: popBlank.vue - 팝업 창 레이아웃

유틸리티 함수

프로젝트 전반에서 사용되는 공통 유틸리티 함수들입니다. 자동으로 임포트되므로 별도의 import 문 없이 바로 사용할 수 있습니다.


새 화면을 만들 때 추천 흐름

1. 페이지 생성

2. 데이터 통신 설계

3. UI 구성

4. 상태 관리

5. 스타일링


기술 스택

프로젝트에서 사용하는 주요 기술 스택에 대한 상세 정보입니다.


프로젝트 구조

프로젝트의 디렉토리 구조와 각 디렉토리의 역할을 이해합니다.


모듈별 가이드

각 비즈니스 모듈에 대한 가이드입니다.


환경 설정

개발 및 배포 환경 설정에 대한 정보입니다.


코딩 컨벤션

프로젝트에서 지켜야 할 코딩 규칙입니다.


테스트

프로젝트의 테스트 방법입니다.


빌드 및 배포

프로젝트 빌드 및 배포 방법입니다.


트러블슈팅

자주 발생하는 문제와 해결 방법입니다.


참고 자료

프로젝트 개발 시 참고할 수 있는 자료입니다.


빠른 참조

자주 사용하는 함수

javascript
// 빈 값 체크
+if (gfIsEmpty(value)) { /* ... */ }
+
+// null 처리
+const safeValue = gfNvl(value, '기본값')
+
+// 날짜 포맷팅
+const formatted = gfFormatDateString('20240101', '.')
+
+// 숫자 포맷팅
+const formatted = gfNumberFormat(1234567)

자주 사용하는 스토어

javascript
// 인증 상태 확인
+const authStore = useAuthStore()
+if (authStore.isAuthenticated) { /* ... */ }
+
+// 로딩 표시
+const loadingStore = useLoadingStore()
+loadingStore.showLoading()
+
+// 세션 값 가져오기
+const sessionStore = useSessionStore()
+const userId = sessionStore.getSessionValue('UserID')

API 호출 기본 패턴

javascript
try {
+  const response = await axiosInstance.post('/api/endpoint', params)
+  if (response.status === 'S') {
+    // 성공 처리
+  }
+} catch (error) {
+  // 에러 처리 (자동으로 처리됨)
+}

다음 단계

이제 프로젝트에 대한 기본적인 이해가 되셨다면:

  1. 빠른 시작 가이드로 첫 번째 페이지를 만들어보세요
  2. 개발 가이드에서 상세한 개발 방법을 확인하세요
  3. UI 컴포넌트 문서에서 컴포넌트 사용법을 익히세요

💡 : 문서를 검색하려면 브라우저의 Ctrl+F (또는 Cmd+F)를 사용하거나, VitePress의 검색 기능을 활용하세요.

`,100)]))}const k=a(l,[["render",n]]);export{g as __pageData,k as default}; diff --git a/assets/index.md.CV36ZjpW.lean.js b/assets/index.md.CV36ZjpW.lean.js new file mode 100644 index 0000000..b9d0eb0 --- /dev/null +++ b/assets/index.md.CV36ZjpW.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"AXP Dev Docs","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),l={name:"index.md"};function n(r,s,o,h,p,d){return t(),i("div",null,s[0]||(s[0]=[e("",100)]))}const k=a(l,[["render",n]]);export{g as __pageData,k as default}; diff --git a/assets/markdown-examples.md.BB1r4u9D.js b/assets/markdown-examples.md.BB1r4u9D.js new file mode 100644 index 0000000..37caa9d --- /dev/null +++ b/assets/markdown-examples.md.BB1r4u9D.js @@ -0,0 +1,33 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md"}'),e={name:"markdown-examples.md"};function l(p,s,h,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t(`

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

md
\`\`\`js{4}
+export default {
+  data () {
+    return {
+      msg: 'Highlighted!'
+    }
+  }
+}
+\`\`\`

Output

js
export default {
+  data () {
+    return {
+      msg: 'Highlighted!'
+    }
+  }
+}

Custom Containers

Input

md
::: info
+This is an info box.
+:::
+
+::: tip
+This is a tip.
+:::
+
+::: warning
+This is a warning.
+:::
+
+::: danger
+This is a dangerous warning.
+:::
+
+::: details
+This is a details block.
+:::

Output

INFO

This is an info box.

TIP

This is a tip.

WARNING

This is a warning.

DANGER

This is a dangerous warning.

Details

This is a details block.

More

Check out the documentation for the full list of markdown extensions.

`,19)]))}const c=a(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/markdown-examples.md.BB1r4u9D.lean.js b/assets/markdown-examples.md.BB1r4u9D.lean.js new file mode 100644 index 0000000..a4cf2b8 --- /dev/null +++ b/assets/markdown-examples.md.BB1r4u9D.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md"}'),e={name:"markdown-examples.md"};function l(p,s,h,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t("",19)]))}const c=a(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/markdown-examples.md.BHQsMIvn.js b/assets/markdown-examples.md.BHQsMIvn.js deleted file mode 100644 index 82554c1..0000000 --- a/assets/markdown-examples.md.BHQsMIvn.js +++ /dev/null @@ -1,33 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md"}'),e={name:"markdown-examples.md"};function l(p,s,h,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t(`

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

md
\`\`\`js{4}
-export default {
-  data () {
-    return {
-      msg: 'Highlighted!'
-    }
-  }
-}
-\`\`\`

Output

js
export default {
-  data () {
-    return {
-      msg: 'Highlighted!'
-    }
-  }
-}

Custom Containers

Input

md
::: info
-This is an info box.
-:::
-
-::: tip
-This is a tip.
-:::
-
-::: warning
-This is a warning.
-:::
-
-::: danger
-This is a dangerous warning.
-:::
-
-::: details
-This is a details block.
-:::

Output

INFO

This is an info box.

TIP

This is a tip.

WARNING

This is a warning.

DANGER

This is a dangerous warning.

Details

This is a details block.

More

Check out the documentation for the full list of markdown extensions.

`,19)]))}const c=a(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/markdown-examples.md.BHQsMIvn.lean.js b/assets/markdown-examples.md.BHQsMIvn.lean.js deleted file mode 100644 index bbab151..0000000 --- a/assets/markdown-examples.md.BHQsMIvn.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md"}'),e={name:"markdown-examples.md"};function l(p,s,h,k,r,d){return n(),i("div",null,s[0]||(s[0]=[t("",19)]))}const c=a(e,[["render",l]]);export{E as __pageData,c as default}; diff --git a/assets/modules_axpframework_auth.md.Bt-evg0Y.js b/assets/modules_axpframework_auth.md.Bt-evg0Y.js deleted file mode 100644 index 8082cbe..0000000 --- a/assets/modules_axpframework_auth.md.Bt-evg0Y.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as r,o,aG as i}from"./chunks/framework.CrOSaJJH.js";const m=JSON.parse('{"title":"AXP Framework - 인증 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"modules/axpframework/auth.md","filePath":"modules/axpframework/auth.md"}'),t={name:"modules/axpframework/auth.md"};function l(n,a,s,h,u,d){return o(),r("div",null,a[0]||(a[0]=[i('

AXP Framework - 인증 모듈

개요

AXP Framework의 인증 모듈입니다.

주요 페이지

Login.vue

일반 사용자 로그인 페이지입니다.

파일 위치: src/views/axpFramework/auth/Login.vue

주요 기능:

  • 사용자 로그인
  • JWT 토큰 발급
  • 세션 데이터 설정

AdminLogin.vue

관리자 로그인 페이지입니다.

파일 위치: src/views/axpFramework/auth/AdminLogin.vue

register.vue

회원가입 페이지입니다.

파일 위치: src/views/axpFramework/auth/register.vue

로그인 프로세스

  1. 사용자 인증 정보 입력
  2. 서버에 로그인 요청
  3. Access Token 및 세션 데이터 수신
  4. 토큰 및 세션 저장
  5. 메인 페이지로 이동

관련 문서

',19)]))}const p=e(t,[["render",l]]);export{m as __pageData,p as default}; diff --git a/assets/modules_axpframework_auth.md.Bt-evg0Y.lean.js b/assets/modules_axpframework_auth.md.Bt-evg0Y.lean.js deleted file mode 100644 index 966c957..0000000 --- a/assets/modules_axpframework_auth.md.Bt-evg0Y.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as r,o,aG as i}from"./chunks/framework.CrOSaJJH.js";const m=JSON.parse('{"title":"AXP Framework - 인증 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"modules/axpframework/auth.md","filePath":"modules/axpframework/auth.md"}'),t={name:"modules/axpframework/auth.md"};function l(n,a,s,h,u,d){return o(),r("div",null,a[0]||(a[0]=[i("",19)]))}const p=e(t,[["render",l]]);export{m as __pageData,p as default}; diff --git a/assets/modules_axpframework_auth.md.CKrkW9Md.js b/assets/modules_axpframework_auth.md.CKrkW9Md.js new file mode 100644 index 0000000..034e460 --- /dev/null +++ b/assets/modules_axpframework_auth.md.CKrkW9Md.js @@ -0,0 +1 @@ +import{_ as e,c as r,o,aG as i}from"./chunks/framework.DytOxJW6.js";const m=JSON.parse('{"title":"AXP Framework - 인증 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"modules/axpframework/auth.md","filePath":"modules/axpframework/auth.md"}'),t={name:"modules/axpframework/auth.md"};function l(n,a,s,h,u,d){return o(),r("div",null,a[0]||(a[0]=[i('

AXP Framework - 인증 모듈

개요

AXP Framework의 인증 모듈입니다.

주요 페이지

Login.vue

일반 사용자 로그인 페이지입니다.

파일 위치: src/views/axpFramework/auth/Login.vue

주요 기능:

  • 사용자 로그인
  • JWT 토큰 발급
  • 세션 데이터 설정

AdminLogin.vue

관리자 로그인 페이지입니다.

파일 위치: src/views/axpFramework/auth/AdminLogin.vue

register.vue

회원가입 페이지입니다.

파일 위치: src/views/axpFramework/auth/register.vue

로그인 프로세스

  1. 사용자 인증 정보 입력
  2. 서버에 로그인 요청
  3. Access Token 및 세션 데이터 수신
  4. 토큰 및 세션 저장
  5. 메인 페이지로 이동

관련 문서

',19)]))}const p=e(t,[["render",l]]);export{m as __pageData,p as default}; diff --git a/assets/modules_axpframework_auth.md.CKrkW9Md.lean.js b/assets/modules_axpframework_auth.md.CKrkW9Md.lean.js new file mode 100644 index 0000000..404fb28 --- /dev/null +++ b/assets/modules_axpframework_auth.md.CKrkW9Md.lean.js @@ -0,0 +1 @@ +import{_ as e,c as r,o,aG as i}from"./chunks/framework.DytOxJW6.js";const m=JSON.parse('{"title":"AXP Framework - 인증 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"modules/axpframework/auth.md","filePath":"modules/axpframework/auth.md"}'),t={name:"modules/axpframework/auth.md"};function l(n,a,s,h,u,d){return o(),r("div",null,a[0]||(a[0]=[i("",19)]))}const p=e(t,[["render",l]]);export{m as __pageData,p as default}; diff --git a/assets/modules_ess_persadm.md.Cqrm0opA.js b/assets/modules_ess_persadm.md.Cqrm0opA.js deleted file mode 100644 index fbd32f8..0000000 --- a/assets/modules_ess_persadm.md.Cqrm0opA.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as s,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"ESS 모듈 - 인사 관리","description":"","frontmatter":{},"headers":[],"relativePath":"modules/ess/persadm.md","filePath":"modules/ess/persadm.md"}'),o={name:"modules/ess/persadm.md"};function n(i,e,d,l,c,p){return s(),r("div",null,e[0]||(e[0]=[t('

ESS 모듈 - 인사 관리

개요

ESS 모듈의 인사 관리 기능입니다.

주요 페이지

PiMyPersonnelInformation.vue

본인 인사 정보 페이지입니다.

파일 위치: src/views/ess/persadm/PiMyPersonnelInformation.vue

PaAttendanceRequest.vue

근태 신청 및 조회 페이지입니다.

파일 위치: src/views/ess/persadm/PaAttendanceRequest.vue

PcBillReqHipass.vue

하이패스 청구 요청 페이지입니다.

파일 위치: src/views/ess/persadm/PcBillReqHipass.vue

PoOrganizationChart.vue

조직도 페이지입니다.

파일 위치: src/views/ess/persadm/PoOrganizationChart.vue

관련 스크립트

인사 관리 관련 비즈니스 로직은 src/script/ess/persadm/ 디렉토리에 있습니다.

',18)]))}const m=a(o,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/modules_ess_persadm.md.Cqrm0opA.lean.js b/assets/modules_ess_persadm.md.Cqrm0opA.lean.js deleted file mode 100644 index fe8493f..0000000 --- a/assets/modules_ess_persadm.md.Cqrm0opA.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as s,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"ESS 모듈 - 인사 관리","description":"","frontmatter":{},"headers":[],"relativePath":"modules/ess/persadm.md","filePath":"modules/ess/persadm.md"}'),o={name:"modules/ess/persadm.md"};function n(i,e,d,l,c,p){return s(),r("div",null,e[0]||(e[0]=[t("",18)]))}const m=a(o,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/modules_ess_persadm.md.CysIkcX7.js b/assets/modules_ess_persadm.md.CysIkcX7.js new file mode 100644 index 0000000..113c231 --- /dev/null +++ b/assets/modules_ess_persadm.md.CysIkcX7.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as s,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"ESS 모듈 - 인사 관리","description":"","frontmatter":{},"headers":[],"relativePath":"modules/ess/persadm.md","filePath":"modules/ess/persadm.md"}'),o={name:"modules/ess/persadm.md"};function n(i,e,d,l,c,p){return s(),r("div",null,e[0]||(e[0]=[t('

ESS 모듈 - 인사 관리

개요

ESS 모듈의 인사 관리 기능입니다.

주요 페이지

PiMyPersonnelInformation.vue

본인 인사 정보 페이지입니다.

파일 위치: src/views/ess/persadm/PiMyPersonnelInformation.vue

PaAttendanceRequest.vue

근태 신청 및 조회 페이지입니다.

파일 위치: src/views/ess/persadm/PaAttendanceRequest.vue

PcBillReqHipass.vue

하이패스 청구 요청 페이지입니다.

파일 위치: src/views/ess/persadm/PcBillReqHipass.vue

PoOrganizationChart.vue

조직도 페이지입니다.

파일 위치: src/views/ess/persadm/PoOrganizationChart.vue

관련 스크립트

인사 관리 관련 비즈니스 로직은 src/script/ess/persadm/ 디렉토리에 있습니다.

',18)]))}const m=a(o,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/modules_ess_persadm.md.CysIkcX7.lean.js b/assets/modules_ess_persadm.md.CysIkcX7.lean.js new file mode 100644 index 0000000..f9c6403 --- /dev/null +++ b/assets/modules_ess_persadm.md.CysIkcX7.lean.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as s,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"ESS 모듈 - 인사 관리","description":"","frontmatter":{},"headers":[],"relativePath":"modules/ess/persadm.md","filePath":"modules/ess/persadm.md"}'),o={name:"modules/ess/persadm.md"};function n(i,e,d,l,c,p){return s(),r("div",null,e[0]||(e[0]=[t("",18)]))}const m=a(o,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/modules_fcm_erp.md.BaTqiTS_.js b/assets/modules_fcm_erp.md.BaTqiTS_.js new file mode 100644 index 0000000..a545088 --- /dev/null +++ b/assets/modules_fcm_erp.md.BaTqiTS_.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,aG as s}from"./chunks/framework.DytOxJW6.js";const m=JSON.parse('{"title":"FCM 모듈 - ERP 기능","description":"","frontmatter":{},"headers":[],"relativePath":"modules/fcm/erp.md","filePath":"modules/fcm/erp.md"}'),o={name:"modules/fcm/erp.md"};function i(n,a,l,c,d,p){return r(),t("div",null,a[0]||(a[0]=[s('

FCM 모듈 - ERP 기능

개요

FCM 모듈의 ERP 기능입니다.

디렉토리 구조

src/views/fcm/erp/

주요 기능

재무 및 회계 관련 기능을 제공합니다.

',7)]))}const u=e(o,[["render",i]]);export{m as __pageData,u as default}; diff --git a/assets/modules_fcm_erp.md.BaTqiTS_.lean.js b/assets/modules_fcm_erp.md.BaTqiTS_.lean.js new file mode 100644 index 0000000..a3570a5 --- /dev/null +++ b/assets/modules_fcm_erp.md.BaTqiTS_.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,aG as s}from"./chunks/framework.DytOxJW6.js";const m=JSON.parse('{"title":"FCM 모듈 - ERP 기능","description":"","frontmatter":{},"headers":[],"relativePath":"modules/fcm/erp.md","filePath":"modules/fcm/erp.md"}'),o={name:"modules/fcm/erp.md"};function i(n,a,l,c,d,p){return r(),t("div",null,a[0]||(a[0]=[s("",7)]))}const u=e(o,[["render",i]]);export{m as __pageData,u as default}; diff --git a/assets/modules_fcm_erp.md.CC2evF3J.js b/assets/modules_fcm_erp.md.CC2evF3J.js deleted file mode 100644 index 0a69ee7..0000000 --- a/assets/modules_fcm_erp.md.CC2evF3J.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as r,aG as s}from"./chunks/framework.CrOSaJJH.js";const m=JSON.parse('{"title":"FCM 모듈 - ERP 기능","description":"","frontmatter":{},"headers":[],"relativePath":"modules/fcm/erp.md","filePath":"modules/fcm/erp.md"}'),o={name:"modules/fcm/erp.md"};function i(n,a,l,c,d,p){return r(),t("div",null,a[0]||(a[0]=[s('

FCM 모듈 - ERP 기능

개요

FCM 모듈의 ERP 기능입니다.

디렉토리 구조

src/views/fcm/erp/

주요 기능

재무 및 회계 관련 기능을 제공합니다.

',7)]))}const u=e(o,[["render",i]]);export{m as __pageData,u as default}; diff --git a/assets/modules_fcm_erp.md.CC2evF3J.lean.js b/assets/modules_fcm_erp.md.CC2evF3J.lean.js deleted file mode 100644 index aa008ab..0000000 --- a/assets/modules_fcm_erp.md.CC2evF3J.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as r,aG as s}from"./chunks/framework.CrOSaJJH.js";const m=JSON.parse('{"title":"FCM 모듈 - ERP 기능","description":"","frontmatter":{},"headers":[],"relativePath":"modules/fcm/erp.md","filePath":"modules/fcm/erp.md"}'),o={name:"modules/fcm/erp.md"};function i(n,a,l,c,d,p){return r(),t("div",null,a[0]||(a[0]=[s("",7)]))}const u=e(o,[["render",i]]);export{m as __pageData,u as default}; diff --git a/assets/modules_geosan_bi.md.BtHk0SqJ.js b/assets/modules_geosan_bi.md.BtHk0SqJ.js new file mode 100644 index 0000000..707635f --- /dev/null +++ b/assets/modules_geosan_bi.md.BtHk0SqJ.js @@ -0,0 +1 @@ +import{_ as e,c as s,o as t,aG as o}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"geosan 모듈 - BI 기능","description":"","frontmatter":{},"headers":[],"relativePath":"modules/geosan/bi.md","filePath":"modules/geosan/bi.md"}'),n={name:"modules/geosan/bi.md"};function i(r,a,l,d,c,h){return t(),s("div",null,a[0]||(a[0]=[o('

geosan 모듈 - BI 기능

개요

geosan 모듈의 BI 기능입니다.

디렉토리 구조

src/views/geosan/BI/

주요 기능

Business Intelligence 관련 기능을 제공합니다.

',7)]))}const _=e(n,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/modules_geosan_bi.md.BtHk0SqJ.lean.js b/assets/modules_geosan_bi.md.BtHk0SqJ.lean.js new file mode 100644 index 0000000..fc7a52c --- /dev/null +++ b/assets/modules_geosan_bi.md.BtHk0SqJ.lean.js @@ -0,0 +1 @@ +import{_ as e,c as s,o as t,aG as o}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"geosan 모듈 - BI 기능","description":"","frontmatter":{},"headers":[],"relativePath":"modules/geosan/bi.md","filePath":"modules/geosan/bi.md"}'),n={name:"modules/geosan/bi.md"};function i(r,a,l,d,c,h){return t(),s("div",null,a[0]||(a[0]=[o("",7)]))}const _=e(n,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/modules_geosan_bi.md.D2HNGqO2.js b/assets/modules_geosan_bi.md.D2HNGqO2.js deleted file mode 100644 index f938948..0000000 --- a/assets/modules_geosan_bi.md.D2HNGqO2.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as s,o as t,aG as o}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"geosan 모듈 - BI 기능","description":"","frontmatter":{},"headers":[],"relativePath":"modules/geosan/bi.md","filePath":"modules/geosan/bi.md"}'),n={name:"modules/geosan/bi.md"};function i(r,a,l,d,c,h){return t(),s("div",null,a[0]||(a[0]=[o('

geosan 모듈 - BI 기능

개요

geosan 모듈의 BI 기능입니다.

디렉토리 구조

src/views/geosan/BI/

주요 기능

Business Intelligence 관련 기능을 제공합니다.

',7)]))}const _=e(n,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/modules_geosan_bi.md.D2HNGqO2.lean.js b/assets/modules_geosan_bi.md.D2HNGqO2.lean.js deleted file mode 100644 index a668357..0000000 --- a/assets/modules_geosan_bi.md.D2HNGqO2.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as s,o as t,aG as o}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"geosan 모듈 - BI 기능","description":"","frontmatter":{},"headers":[],"relativePath":"modules/geosan/bi.md","filePath":"modules/geosan/bi.md"}'),n={name:"modules/geosan/bi.md"};function i(r,a,l,d,c,h){return t(),s("div",null,a[0]||(a[0]=[o("",7)]))}const _=e(n,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/project-structure_directory.md.BTU5qbI1.js b/assets/project-structure_directory.md.BTU5qbI1.js new file mode 100644 index 0000000..b8d3d38 --- /dev/null +++ b/assets/project-structure_directory.md.BTU5qbI1.js @@ -0,0 +1,78 @@ +import{_ as a,c as n,o as p,aG as e}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"전체 디렉토리 구조","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/directory.md","filePath":"project-structure/directory.md"}'),l={name:"project-structure/directory.md"};function i(c,s,o,t,r,d){return p(),n("div",null,s[0]||(s[0]=[e(`

전체 디렉토리 구조

프로젝트 루트 구조

vue_project/
+├── public/                    # 정적 리소스 (빌드 시 그대로 복사)
+├── src/                       # 소스 코드
+├── dist/                      # 빌드 결과물 (생성됨)
+├── node_modules/              # npm 패키지 (생성됨)
+├── .env                       # 환경 변수
+├── package.json               # 프로젝트 설정
+├── vite.config.js             # Vite 설정
+└── README.md                  # 프로젝트 설명

src 디렉토리 상세 구조

src/
+├── App.vue                    # 루트 컴포넌트
+├── main.js                    # 애플리케이션 진입점
+├── CustomAxios.js             # Axios 인스턴스 설정
+├── auto-imports.d.ts          # 자동 임포트 타입 정의
+├── components.d.ts            # 컴포넌트 타입 정의
+
+├── script/                    # 비즈니스 로직 스크립트
+│   ├── axpFramework/
+│   ├── ess/
+│   │   └── persadm/
+│   └── fcm/
+
+├── utils/                     # 유틸리티 및 설정
+│   ├── common/                # 공통 유틸리티
+│   │   ├── common.js          # 주요 유틸리티 함수
+│   │   └── comfcm.js          # FCM 유틸리티
+│   ├── stores/                # Pinia 스토어
+│   │   ├── authStore.js
+│   │   ├── loadingStore.js
+│   │   ├── menuStore.js
+│   │   ├── sessionStore.js
+│   │   ├── modalStore.js
+│   │   ├── tabStore.js
+│   │   └── ...
+│   ├── plugins/               # 플러그인 설정
+│   │   ├── router/            # Vue Router 설정
+│   │   ├── pinia.js           # Pinia 설정
+│   │   ├── vuetify/           # Vuetify 설정
+│   │   ├── iconify/           # Iconify 설정
+│   │   └── webfontloader.js
+│   ├── lang/                  # 언어 설정
+│   │   ├── agGrid/
+│   │   └── i18n.js
+│   ├── indexedDbUtil.js       # IndexedDB 유틸리티
+│   ├── paginationMeta.js      # 페이징 메타데이터
+│   └── pluginsUtil.js        # 플러그인 등록 유틸리티
+
+├── views/                     # 페이지 컴포넌트
+│   ├── axpFramework/         # 프레임워크 모듈
+│   │   ├── auth/              # 인증 페이지
+│   │   └── main/              # 메인 페이지
+│   ├── ess/                   # ESS 모듈
+│   │   ├── admin/
+│   │   ├── persadm/
+│   │   ├── creditcard/
+│   │   ├── education/
+│   │   └── estimation/
+│   ├── fcm/                   # FCM 모듈
+│   │   ├── erp/
+│   │   └── hr/
+│   ├── geosan/                # geosan 모듈
+│   │   └── BI/
+│   └── ui/                    # UI 컴포넌트
+│       ├── components/        # 재사용 가능한 컴포넌트
+│       │   ├── common/        # 공통 컴포넌트
+│       │   ├── grid/          # 그리드 컴포넌트
+│       │   ├── popup/         # 팝업 컴포넌트
+│       │   └── menu/          # 메뉴 컴포넌트
+│       └── layouts/            # 레이아웃 컴포넌트
+
+└── vendor/                    # 외부 라이브러리 및 템플릿
+    ├── @core/                 # 핵심 컴포넌트
+    ├── @layouts/              # 레이아웃 컴포넌트
+    ├── @dashboard/            # 대시보드 컴포넌트
+    ├── @pages/                # 페이지 템플릿
+    ├── @user-interface/       # UI 컴포넌트
+    └── assets/                # 리소스 파일

주요 디렉토리 설명

/src/script

비즈니스 로직을 담은 JavaScript 파일들이 위치합니다. 페이지 컴포넌트에서 공통으로 사용되는 로직을 분리하여 관리합니다.

/src/utils/common

프로젝트 전반에서 사용되는 공통 유틸리티 함수들이 위치합니다:

  • common.js: 문자열, 날짜, 숫자, 배열, 객체, 파일 처리 등
  • comfcm.js: FCM 관련 유틸리티

/src/utils/stores

Pinia 스토어 파일들이 위치합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

/src/utils/plugins

Vue 플러그인 설정 파일들이 위치합니다:

  • router/: 라우팅 설정
  • pinia.js: 상태 관리 설정
  • vuetify/: UI 프레임워크 설정
  • iconify/: 아이콘 설정

/src/views

비즈니스 로직에 해당하는 페이지 컴포넌트들이 위치합니다. 모듈별로 디렉토리가 구분되어 있습니다.

/src/vendor

외부 라이브러리와 템플릿 파일들이 위치합니다. 프로젝트의 기본 템플릿과 스타일이 포함되어 있습니다.

파일 명명 규칙

컴포넌트 파일

  • 형식: PascalCase
  • 예시: SelectBoxSQL.vue, MyNewPage.vue

유틸리티 파일

  • 형식: camelCase
  • 예시: common.js, authStore.js

상수 파일

  • 형식: UPPER_SNAKE_CASE
  • 예시: CONSTANTS.js

경로 별칭 (Alias)

프로젝트는 다음과 같은 경로 별칭을 사용합니다:

  • @/: src/ 디렉토리
  • @core/: src/vendor/@core
  • @layouts/: src/vendor/@layouts
  • @dashboard/: src/vendor/@dashboard
  • @images/: src/vendor/assets/images/
  • @styles/: src/vendor/assets/styles/

사용 예제

javascript
// 절대 경로 대신 별칭 사용
+import axiosInstance from '@/CustomAxios.js'
+import { useAuthStore } from '@/utils/stores/authStore.js'

다음 단계

디렉토리 구조를 이해했다면 다음 문서를 참고하세요:

`,35)]))}const m=a(l,[["render",i]]);export{u as __pageData,m as default}; diff --git a/assets/project-structure_directory.md.BTU5qbI1.lean.js b/assets/project-structure_directory.md.BTU5qbI1.lean.js new file mode 100644 index 0000000..7c8a2e8 --- /dev/null +++ b/assets/project-structure_directory.md.BTU5qbI1.lean.js @@ -0,0 +1 @@ +import{_ as a,c as n,o as p,aG as e}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"전체 디렉토리 구조","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/directory.md","filePath":"project-structure/directory.md"}'),l={name:"project-structure/directory.md"};function i(c,s,o,t,r,d){return p(),n("div",null,s[0]||(s[0]=[e("",35)]))}const m=a(l,[["render",i]]);export{u as __pageData,m as default}; diff --git a/assets/project-structure_directory.md.Ck-scnak.js b/assets/project-structure_directory.md.Ck-scnak.js deleted file mode 100644 index d3b2d47..0000000 --- a/assets/project-structure_directory.md.Ck-scnak.js +++ /dev/null @@ -1,78 +0,0 @@ -import{_ as a,c as n,o as p,aG as e}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"전체 디렉토리 구조","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/directory.md","filePath":"project-structure/directory.md"}'),l={name:"project-structure/directory.md"};function i(c,s,o,t,r,d){return p(),n("div",null,s[0]||(s[0]=[e(`

전체 디렉토리 구조

프로젝트 루트 구조

vue_project/
-├── public/                    # 정적 리소스 (빌드 시 그대로 복사)
-├── src/                       # 소스 코드
-├── dist/                      # 빌드 결과물 (생성됨)
-├── node_modules/              # npm 패키지 (생성됨)
-├── .env                       # 환경 변수
-├── package.json               # 프로젝트 설정
-├── vite.config.js             # Vite 설정
-└── README.md                  # 프로젝트 설명

src 디렉토리 상세 구조

src/
-├── App.vue                    # 루트 컴포넌트
-├── main.js                    # 애플리케이션 진입점
-├── CustomAxios.js             # Axios 인스턴스 설정
-├── auto-imports.d.ts          # 자동 임포트 타입 정의
-├── components.d.ts            # 컴포넌트 타입 정의
-
-├── script/                    # 비즈니스 로직 스크립트
-│   ├── axpFramework/
-│   ├── ess/
-│   │   └── persadm/
-│   └── fcm/
-
-├── utils/                     # 유틸리티 및 설정
-│   ├── common/                # 공통 유틸리티
-│   │   ├── common.js          # 주요 유틸리티 함수
-│   │   └── comfcm.js          # FCM 유틸리티
-│   ├── stores/                # Pinia 스토어
-│   │   ├── authStore.js
-│   │   ├── loadingStore.js
-│   │   ├── menuStore.js
-│   │   ├── sessionStore.js
-│   │   ├── modalStore.js
-│   │   ├── tabStore.js
-│   │   └── ...
-│   ├── plugins/               # 플러그인 설정
-│   │   ├── router/            # Vue Router 설정
-│   │   ├── pinia.js           # Pinia 설정
-│   │   ├── vuetify/           # Vuetify 설정
-│   │   ├── iconify/           # Iconify 설정
-│   │   └── webfontloader.js
-│   ├── lang/                  # 언어 설정
-│   │   ├── agGrid/
-│   │   └── i18n.js
-│   ├── indexedDbUtil.js       # IndexedDB 유틸리티
-│   ├── paginationMeta.js      # 페이징 메타데이터
-│   └── pluginsUtil.js        # 플러그인 등록 유틸리티
-
-├── views/                     # 페이지 컴포넌트
-│   ├── axpFramework/         # 프레임워크 모듈
-│   │   ├── auth/              # 인증 페이지
-│   │   └── main/              # 메인 페이지
-│   ├── ess/                   # ESS 모듈
-│   │   ├── admin/
-│   │   ├── persadm/
-│   │   ├── creditcard/
-│   │   ├── education/
-│   │   └── estimation/
-│   ├── fcm/                   # FCM 모듈
-│   │   ├── erp/
-│   │   └── hr/
-│   ├── geosan/                # geosan 모듈
-│   │   └── BI/
-│   └── ui/                    # UI 컴포넌트
-│       ├── components/        # 재사용 가능한 컴포넌트
-│       │   ├── common/        # 공통 컴포넌트
-│       │   ├── grid/          # 그리드 컴포넌트
-│       │   ├── popup/         # 팝업 컴포넌트
-│       │   └── menu/          # 메뉴 컴포넌트
-│       └── layouts/            # 레이아웃 컴포넌트
-
-└── vendor/                    # 외부 라이브러리 및 템플릿
-    ├── @core/                 # 핵심 컴포넌트
-    ├── @layouts/              # 레이아웃 컴포넌트
-    ├── @dashboard/            # 대시보드 컴포넌트
-    ├── @pages/                # 페이지 템플릿
-    ├── @user-interface/       # UI 컴포넌트
-    └── assets/                # 리소스 파일

주요 디렉토리 설명

/src/script

비즈니스 로직을 담은 JavaScript 파일들이 위치합니다. 페이지 컴포넌트에서 공통으로 사용되는 로직을 분리하여 관리합니다.

/src/utils/common

프로젝트 전반에서 사용되는 공통 유틸리티 함수들이 위치합니다:

  • common.js: 문자열, 날짜, 숫자, 배열, 객체, 파일 처리 등
  • comfcm.js: FCM 관련 유틸리티

/src/utils/stores

Pinia 스토어 파일들이 위치합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

/src/utils/plugins

Vue 플러그인 설정 파일들이 위치합니다:

  • router/: 라우팅 설정
  • pinia.js: 상태 관리 설정
  • vuetify/: UI 프레임워크 설정
  • iconify/: 아이콘 설정

/src/views

비즈니스 로직에 해당하는 페이지 컴포넌트들이 위치합니다. 모듈별로 디렉토리가 구분되어 있습니다.

/src/vendor

외부 라이브러리와 템플릿 파일들이 위치합니다. 프로젝트의 기본 템플릿과 스타일이 포함되어 있습니다.

파일 명명 규칙

컴포넌트 파일

  • 형식: PascalCase
  • 예시: SelectBoxSQL.vue, MyNewPage.vue

유틸리티 파일

  • 형식: camelCase
  • 예시: common.js, authStore.js

상수 파일

  • 형식: UPPER_SNAKE_CASE
  • 예시: CONSTANTS.js

경로 별칭 (Alias)

프로젝트는 다음과 같은 경로 별칭을 사용합니다:

  • @/: src/ 디렉토리
  • @core/: src/vendor/@core
  • @layouts/: src/vendor/@layouts
  • @dashboard/: src/vendor/@dashboard
  • @images/: src/vendor/assets/images/
  • @styles/: src/vendor/assets/styles/

사용 예제

javascript
// 절대 경로 대신 별칭 사용
-import axiosInstance from '@/CustomAxios.js'
-import { useAuthStore } from '@/utils/stores/authStore.js'

다음 단계

디렉토리 구조를 이해했다면 다음 문서를 참고하세요:

`,35)]))}const m=a(l,[["render",i]]);export{u as __pageData,m as default}; diff --git a/assets/project-structure_directory.md.Ck-scnak.lean.js b/assets/project-structure_directory.md.Ck-scnak.lean.js deleted file mode 100644 index 52945c3..0000000 --- a/assets/project-structure_directory.md.Ck-scnak.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as n,o as p,aG as e}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"전체 디렉토리 구조","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/directory.md","filePath":"project-structure/directory.md"}'),l={name:"project-structure/directory.md"};function i(c,s,o,t,r,d){return p(),n("div",null,s[0]||(s[0]=[e("",35)]))}const m=a(l,[["render",i]]);export{u as __pageData,m as default}; diff --git a/assets/project-structure_public.md.BjWwKtwW.js b/assets/project-structure_public.md.BjWwKtwW.js new file mode 100644 index 0000000..90ea228 --- /dev/null +++ b/assets/project-structure_public.md.BjWwKtwW.js @@ -0,0 +1,25 @@ +import{_ as i,c as a,o as t,aG as l}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"public 디렉토리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/public.md","filePath":"project-structure/public.md"}'),n={name:"project-structure/public.md"};function p(e,s,h,k,o,r){return t(),a("div",null,s[0]||(s[0]=[l(`

public 디렉토리

개요

public 디렉토리는 빌드 시 그대로 복사되는 정적 리소스 파일들이 위치합니다. 이 디렉토리의 파일들은 빌드 후 dist 디렉토리의 루트에 그대로 복사됩니다.

디렉토리 구조

public/
+├── custom-css/               # 커스텀 CSS 파일
+│   ├── custom-datepicker.css
+│   ├── custom-orgchart.css
+│   └── custom.css
+├── favicon.ico              # 파비콘
+├── loader.css               # 로더 CSS
+└── logo.png                 # 로고 이미지

주요 파일

favicon.ico

브라우저 탭에 표시되는 파비콘 파일입니다.

사용 방법:index.html에서 자동으로 참조됩니다:

html
<link rel="icon" type="image/x-icon" href="/favicon.ico">

logo.png

애플리케이션 로고 이미지입니다.

사용 예제:

vue
<template>
+  <img src="/logo.png" alt="Logo" />
+</template>

또는:

vue
<template>
+  <img :src="logoUrl" alt="Logo" />
+</template>
+
+<script setup>
+const logoUrl = new URL('/logo.png', import.meta.url).href
+</script>

loader.css

로딩 애니메이션 스타일입니다.

주요 내용:

  • 로딩 스피너 스타일
  • 페이드 인/아웃 애니메이션

사용 방법:main.js 또는 필요한 컴포넌트에서 임포트:

javascript
import '/public/loader.css'

custom-css/

커스텀 CSS 파일들이 위치합니다.

custom.css

전역 커스텀 스타일입니다.

주요 내용:

  • 전역 스타일 오버라이드
  • 커스텀 유틸리티 클래스

사용 방법:main.js에서 임포트:

javascript
import '/public/custom-css/custom.css'

custom-datepicker.css

날짜 선택기 커스텀 스타일입니다.

주요 내용:

  • 날짜 선택기 스타일 커스터마이징
  • 달력 레이아웃 조정

사용 방법: 날짜 선택기를 사용하는 컴포넌트에서 임포트:

javascript
import '/public/custom-css/custom-datepicker.css'

custom-orgchart.css

조직도 커스텀 스타일입니다.

주요 내용:

  • 조직도 트리 스타일
  • 노드 스타일 커스터마이징

사용 방법: 조직도 컴포넌트에서 임포트:

javascript
import '/public/custom-css/custom-orgchart.css'

파일 참조 방법

절대 경로 사용

public 디렉토리의 파일은 빌드 후 루트에 복사되므로, 절대 경로로 참조합니다:

vue
<template>
+  <img src="/logo.png" alt="Logo" />
+</template>

동적 경로 사용

환경 변수나 동적 경로가 필요한 경우:

vue
<script setup>
+const logoPath = import.meta.env.BASE_URL + 'logo.png'
+</script>
+
+<template>
+  <img :src="logoPath" alt="Logo" />
+</template>

CSS 파일 임포트

CSS 파일은 JavaScript/TypeScript 파일에서 직접 임포트할 수 있습니다:

javascript
import '/public/custom-css/custom.css'

또는 main.js에서 전역으로 임포트:

javascript
// main.js
+import '/public/custom-css/custom.css'

빌드 시 처리

Vite는 public 디렉토리의 파일을 빌드 시 dist 디렉토리로 복사합니다:

public/logo.png → dist/logo.png

파일 경로는 그대로 유지되므로, 코드에서 /logo.png로 참조하면 빌드 후에도 정상적으로 작동합니다.

주의사항

  1. 파일 크기: public 디렉토리의 파일은 빌드 최적화 대상이 아니므로, 큰 파일은 사용하지 않는 것이 좋습니다.

  2. 파일명 변경: public 디렉토리의 파일명을 변경하면 참조하는 모든 코드를 수정해야 합니다.

  3. 캐싱: 정적 리소스는 브라우저에 캐싱될 수 있으므로, 파일을 업데이트할 때는 파일명에 버전을 추가하거나 캐시 무효화 전략을 고려해야 합니다.

관련 문서

`,62)]))}const g=i(n,[["render",p]]);export{d as __pageData,g as default}; diff --git a/assets/project-structure_public.md.BjWwKtwW.lean.js b/assets/project-structure_public.md.BjWwKtwW.lean.js new file mode 100644 index 0000000..7130ecc --- /dev/null +++ b/assets/project-structure_public.md.BjWwKtwW.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as l}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"public 디렉토리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/public.md","filePath":"project-structure/public.md"}'),n={name:"project-structure/public.md"};function p(e,s,h,k,o,r){return t(),a("div",null,s[0]||(s[0]=[l("",62)]))}const g=i(n,[["render",p]]);export{d as __pageData,g as default}; diff --git a/assets/project-structure_public.md.BltRYdKv.js b/assets/project-structure_public.md.BltRYdKv.js deleted file mode 100644 index c90ccb5..0000000 --- a/assets/project-structure_public.md.BltRYdKv.js +++ /dev/null @@ -1,25 +0,0 @@ -import{_ as i,c as a,o as t,aG as l}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"public 디렉토리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/public.md","filePath":"project-structure/public.md"}'),n={name:"project-structure/public.md"};function p(e,s,h,k,o,r){return t(),a("div",null,s[0]||(s[0]=[l(`

public 디렉토리

개요

public 디렉토리는 빌드 시 그대로 복사되는 정적 리소스 파일들이 위치합니다. 이 디렉토리의 파일들은 빌드 후 dist 디렉토리의 루트에 그대로 복사됩니다.

디렉토리 구조

public/
-├── custom-css/               # 커스텀 CSS 파일
-│   ├── custom-datepicker.css
-│   ├── custom-orgchart.css
-│   └── custom.css
-├── favicon.ico              # 파비콘
-├── loader.css               # 로더 CSS
-└── logo.png                 # 로고 이미지

주요 파일

favicon.ico

브라우저 탭에 표시되는 파비콘 파일입니다.

사용 방법:index.html에서 자동으로 참조됩니다:

html
<link rel="icon" type="image/x-icon" href="/favicon.ico">

logo.png

애플리케이션 로고 이미지입니다.

사용 예제:

vue
<template>
-  <img src="/logo.png" alt="Logo" />
-</template>

또는:

vue
<template>
-  <img :src="logoUrl" alt="Logo" />
-</template>
-
-<script setup>
-const logoUrl = new URL('/logo.png', import.meta.url).href
-</script>

loader.css

로딩 애니메이션 스타일입니다.

주요 내용:

  • 로딩 스피너 스타일
  • 페이드 인/아웃 애니메이션

사용 방법:main.js 또는 필요한 컴포넌트에서 임포트:

javascript
import '/public/loader.css'

custom-css/

커스텀 CSS 파일들이 위치합니다.

custom.css

전역 커스텀 스타일입니다.

주요 내용:

  • 전역 스타일 오버라이드
  • 커스텀 유틸리티 클래스

사용 방법:main.js에서 임포트:

javascript
import '/public/custom-css/custom.css'

custom-datepicker.css

날짜 선택기 커스텀 스타일입니다.

주요 내용:

  • 날짜 선택기 스타일 커스터마이징
  • 달력 레이아웃 조정

사용 방법: 날짜 선택기를 사용하는 컴포넌트에서 임포트:

javascript
import '/public/custom-css/custom-datepicker.css'

custom-orgchart.css

조직도 커스텀 스타일입니다.

주요 내용:

  • 조직도 트리 스타일
  • 노드 스타일 커스터마이징

사용 방법: 조직도 컴포넌트에서 임포트:

javascript
import '/public/custom-css/custom-orgchart.css'

파일 참조 방법

절대 경로 사용

public 디렉토리의 파일은 빌드 후 루트에 복사되므로, 절대 경로로 참조합니다:

vue
<template>
-  <img src="/logo.png" alt="Logo" />
-</template>

동적 경로 사용

환경 변수나 동적 경로가 필요한 경우:

vue
<script setup>
-const logoPath = import.meta.env.BASE_URL + 'logo.png'
-</script>
-
-<template>
-  <img :src="logoPath" alt="Logo" />
-</template>

CSS 파일 임포트

CSS 파일은 JavaScript/TypeScript 파일에서 직접 임포트할 수 있습니다:

javascript
import '/public/custom-css/custom.css'

또는 main.js에서 전역으로 임포트:

javascript
// main.js
-import '/public/custom-css/custom.css'

빌드 시 처리

Vite는 public 디렉토리의 파일을 빌드 시 dist 디렉토리로 복사합니다:

public/logo.png → dist/logo.png

파일 경로는 그대로 유지되므로, 코드에서 /logo.png로 참조하면 빌드 후에도 정상적으로 작동합니다.

주의사항

  1. 파일 크기: public 디렉토리의 파일은 빌드 최적화 대상이 아니므로, 큰 파일은 사용하지 않는 것이 좋습니다.

  2. 파일명 변경: public 디렉토리의 파일명을 변경하면 참조하는 모든 코드를 수정해야 합니다.

  3. 캐싱: 정적 리소스는 브라우저에 캐싱될 수 있으므로, 파일을 업데이트할 때는 파일명에 버전을 추가하거나 캐시 무효화 전략을 고려해야 합니다.

관련 문서

`,62)]))}const g=i(n,[["render",p]]);export{d as __pageData,g as default}; diff --git a/assets/project-structure_public.md.BltRYdKv.lean.js b/assets/project-structure_public.md.BltRYdKv.lean.js deleted file mode 100644 index 9d244f6..0000000 --- a/assets/project-structure_public.md.BltRYdKv.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as l}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"public 디렉토리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/public.md","filePath":"project-structure/public.md"}'),n={name:"project-structure/public.md"};function p(e,s,h,k,o,r){return t(),a("div",null,s[0]||(s[0]=[l("",62)]))}const g=i(n,[["render",p]]);export{d as __pageData,g as default}; diff --git a/assets/project-structure_scripts.md.Cu2dub-4.js b/assets/project-structure_scripts.md.Cu2dub-4.js new file mode 100644 index 0000000..8c138b4 --- /dev/null +++ b/assets/project-structure_scripts.md.Cu2dub-4.js @@ -0,0 +1,12 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"스크립트 파일","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/scripts.md","filePath":"project-structure/scripts.md"}'),t={name:"project-structure/scripts.md"};function p(l,s,r,h,c,o){return n(),i("div",null,s[0]||(s[0]=[e(`

스크립트 파일

개요

비즈니스 로직을 담은 JavaScript 파일들입니다.

파일 위치

src/script/

디렉토리 구조

src/script/
+├── axpFramework/
+├── ess/
+│   └── persadm/
+│       ├── PcBillReqHipass2.js
+│       ├── PcBillReqHipassApproval.js
+│       └── ...
+└── fcm/

사용 목적

페이지 컴포넌트에서 공통으로 사용되는 로직을 분리하여 관리합니다.

사용 예제

vue
<script setup>
+import { /* 함수들 */ } from '@/script/ess/persadm/PcBillReqHipass2.js'
+
+// 스크립트 함수 사용
+</script>
`,11)]))}const u=a(t,[["render",p]]);export{k as __pageData,u as default}; diff --git a/assets/project-structure_scripts.md.Cu2dub-4.lean.js b/assets/project-structure_scripts.md.Cu2dub-4.lean.js new file mode 100644 index 0000000..1b93728 --- /dev/null +++ b/assets/project-structure_scripts.md.Cu2dub-4.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"스크립트 파일","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/scripts.md","filePath":"project-structure/scripts.md"}'),t={name:"project-structure/scripts.md"};function p(l,s,r,h,c,o){return n(),i("div",null,s[0]||(s[0]=[e("",11)]))}const u=a(t,[["render",p]]);export{k as __pageData,u as default}; diff --git a/assets/project-structure_scripts.md.YiE0s8yi.js b/assets/project-structure_scripts.md.YiE0s8yi.js deleted file mode 100644 index 1aba95c..0000000 --- a/assets/project-structure_scripts.md.YiE0s8yi.js +++ /dev/null @@ -1,12 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"스크립트 파일","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/scripts.md","filePath":"project-structure/scripts.md"}'),t={name:"project-structure/scripts.md"};function p(l,s,r,h,c,o){return n(),i("div",null,s[0]||(s[0]=[e(`

스크립트 파일

개요

비즈니스 로직을 담은 JavaScript 파일들입니다.

파일 위치

src/script/

디렉토리 구조

src/script/
-├── axpFramework/
-├── ess/
-│   └── persadm/
-│       ├── PcBillReqHipass2.js
-│       ├── PcBillReqHipassApproval.js
-│       └── ...
-└── fcm/

사용 목적

페이지 컴포넌트에서 공통으로 사용되는 로직을 분리하여 관리합니다.

사용 예제

vue
<script setup>
-import { /* 함수들 */ } from '@/script/ess/persadm/PcBillReqHipass2.js'
-
-// 스크립트 함수 사용
-</script>
`,11)]))}const u=a(t,[["render",p]]);export{k as __pageData,u as default}; diff --git a/assets/project-structure_scripts.md.YiE0s8yi.lean.js b/assets/project-structure_scripts.md.YiE0s8yi.lean.js deleted file mode 100644 index e7c946d..0000000 --- a/assets/project-structure_scripts.md.YiE0s8yi.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"스크립트 파일","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/scripts.md","filePath":"project-structure/scripts.md"}'),t={name:"project-structure/scripts.md"};function p(l,s,r,h,c,o){return n(),i("div",null,s[0]||(s[0]=[e("",11)]))}const u=a(t,[["render",p]]);export{k as __pageData,u as default}; diff --git a/assets/project-structure_src.md.B6--VhRV.js b/assets/project-structure_src.md.B6--VhRV.js new file mode 100644 index 0000000..9907ab5 --- /dev/null +++ b/assets/project-structure_src.md.B6--VhRV.js @@ -0,0 +1,28 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"src 디렉토리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/src.md","filePath":"project-structure/src.md"}'),p={name:"project-structure/src.md"};function e(t,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[l(`

src 디렉토리

개요

src 디렉토리는 프로젝트의 모든 소스 코드가 위치하는 핵심 디렉토리입니다. Vue 3 애플리케이션의 메인 진입점과 모든 비즈니스 로직이 포함되어 있습니다.

디렉토리 구조

src/
+├── App.vue                    # 루트 컴포넌트
+├── main.js                    # 애플리케이션 진입점
+├── CustomAxios.js            # Axios 인스턴스 및 인터셉터 설정
+├── views/                     # 페이지 컴포넌트
+│   ├── axpFramework/          # AXP Framework 모듈
+│   ├── ess/                   # ESS 모듈
+│   ├── fcm/                   # FCM 모듈
+│   ├── geosan/                # geosan 모듈
+│   └── ui/                    # UI 컴포넌트 및 레이아웃
+├── utils/                     # 유틸리티 함수 및 설정
+│   ├── stores/                # Pinia 스토어
+│   ├── plugins/               # Vue 플러그인 설정
+│   ├── lang/                  # 언어 및 국제화 설정
+│   └── common/                # 공통 유틸리티 함수
+└── core/                      # 핵심 스타일 및 템플릿

주요 파일

App.vue

루트 컴포넌트로, 애플리케이션의 최상위 레벨에서 RouterView를 렌더링합니다.

vue
<template>
+    <VApp>
+        <RouterView />
+    </VApp>
+</template>

main.js

애플리케이션의 진입점입니다. Vue 앱을 생성하고 필요한 플러그인을 등록합니다.

주요 기능:

  • Vue 앱 생성
  • 플러그인 등록 (registerPlugins)
  • Axios 인스턴스를 전역 속성으로 등록
  • CSS 파일 임포트
  • AG Grid 모듈 등록
javascript
import { createApp } from 'vue'
+import App from '@/App.vue'
+import { registerPlugins } from '@/utils/pluginsUtil.js'
+import axiosInstance from '@/CustomAxios.js'
+
+const app = createApp(App)
+app.config.globalProperties.$axios = axiosInstance
+registerPlugins(app)
+app.mount('#app')

CustomAxios.js

Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다.

주요 기능:

  • JWT 토큰 자동 추가
  • 토큰 갱신 로직
  • 로딩 상태 관리
  • 에러 처리
  • 암호화/복호화 처리

디렉토리별 상세 설명

views/

페이지 레벨 컴포넌트가 위치합니다. 각 모듈별로 하위 디렉토리를 구성합니다.

  • axpFramework/: 인증, 메인 페이지 등 프레임워크 핵심 기능
  • ess/: Employee Self Service 관련 페이지
  • fcm/: FCM 모듈 관련 페이지
  • geosan/: geosan 모듈 관련 페이지
  • ui/: 공통 UI 컴포넌트 및 레이아웃

utils/

유틸리티 함수, 스토어, 플러그인 설정이 위치합니다.

  • stores/: Pinia 스토어 파일들
  • plugins/: Vue 플러그인 설정 (Vuetify, Router, Pinia 등)
  • lang/: 다국어 지원 설정
  • common/: 공통 유틸리티 함수

관련 문서

`,27)]))}const g=a(p,[["render",e]]);export{d as __pageData,g as default}; diff --git a/assets/project-structure_src.md.B6--VhRV.lean.js b/assets/project-structure_src.md.B6--VhRV.lean.js new file mode 100644 index 0000000..2c2d9c5 --- /dev/null +++ b/assets/project-structure_src.md.B6--VhRV.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const d=JSON.parse('{"title":"src 디렉토리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/src.md","filePath":"project-structure/src.md"}'),p={name:"project-structure/src.md"};function e(t,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[l("",27)]))}const g=a(p,[["render",e]]);export{d as __pageData,g as default}; diff --git a/assets/project-structure_src.md.B6mdu9hL.js b/assets/project-structure_src.md.B6mdu9hL.js deleted file mode 100644 index a16ec68..0000000 --- a/assets/project-structure_src.md.B6mdu9hL.js +++ /dev/null @@ -1,28 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"src 디렉토리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/src.md","filePath":"project-structure/src.md"}'),p={name:"project-structure/src.md"};function e(t,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[l(`

src 디렉토리

개요

src 디렉토리는 프로젝트의 모든 소스 코드가 위치하는 핵심 디렉토리입니다. Vue 3 애플리케이션의 메인 진입점과 모든 비즈니스 로직이 포함되어 있습니다.

디렉토리 구조

src/
-├── App.vue                    # 루트 컴포넌트
-├── main.js                    # 애플리케이션 진입점
-├── CustomAxios.js            # Axios 인스턴스 및 인터셉터 설정
-├── views/                     # 페이지 컴포넌트
-│   ├── axpFramework/          # AXP Framework 모듈
-│   ├── ess/                   # ESS 모듈
-│   ├── fcm/                   # FCM 모듈
-│   ├── geosan/                # geosan 모듈
-│   └── ui/                    # UI 컴포넌트 및 레이아웃
-├── utils/                     # 유틸리티 함수 및 설정
-│   ├── stores/                # Pinia 스토어
-│   ├── plugins/               # Vue 플러그인 설정
-│   ├── lang/                  # 언어 및 국제화 설정
-│   └── common/                # 공통 유틸리티 함수
-└── core/                      # 핵심 스타일 및 템플릿

주요 파일

App.vue

루트 컴포넌트로, 애플리케이션의 최상위 레벨에서 RouterView를 렌더링합니다.

vue
<template>
-    <VApp>
-        <RouterView />
-    </VApp>
-</template>

main.js

애플리케이션의 진입점입니다. Vue 앱을 생성하고 필요한 플러그인을 등록합니다.

주요 기능:

  • Vue 앱 생성
  • 플러그인 등록 (registerPlugins)
  • Axios 인스턴스를 전역 속성으로 등록
  • CSS 파일 임포트
  • AG Grid 모듈 등록
javascript
import { createApp } from 'vue'
-import App from '@/App.vue'
-import { registerPlugins } from '@/utils/pluginsUtil.js'
-import axiosInstance from '@/CustomAxios.js'
-
-const app = createApp(App)
-app.config.globalProperties.$axios = axiosInstance
-registerPlugins(app)
-app.mount('#app')

CustomAxios.js

Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다.

주요 기능:

  • JWT 토큰 자동 추가
  • 토큰 갱신 로직
  • 로딩 상태 관리
  • 에러 처리
  • 암호화/복호화 처리

디렉토리별 상세 설명

views/

페이지 레벨 컴포넌트가 위치합니다. 각 모듈별로 하위 디렉토리를 구성합니다.

  • axpFramework/: 인증, 메인 페이지 등 프레임워크 핵심 기능
  • ess/: Employee Self Service 관련 페이지
  • fcm/: FCM 모듈 관련 페이지
  • geosan/: geosan 모듈 관련 페이지
  • ui/: 공통 UI 컴포넌트 및 레이아웃

utils/

유틸리티 함수, 스토어, 플러그인 설정이 위치합니다.

  • stores/: Pinia 스토어 파일들
  • plugins/: Vue 플러그인 설정 (Vuetify, Router, Pinia 등)
  • lang/: 다국어 지원 설정
  • common/: 공통 유틸리티 함수

관련 문서

`,27)]))}const g=a(p,[["render",e]]);export{d as __pageData,g as default}; diff --git a/assets/project-structure_src.md.B6mdu9hL.lean.js b/assets/project-structure_src.md.B6mdu9hL.lean.js deleted file mode 100644 index 56700f4..0000000 --- a/assets/project-structure_src.md.B6mdu9hL.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const d=JSON.parse('{"title":"src 디렉토리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/src.md","filePath":"project-structure/src.md"}'),p={name:"project-structure/src.md"};function e(t,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[l("",27)]))}const g=a(p,[["render",e]]);export{d as __pageData,g as default}; diff --git a/assets/project-structure_utils_common.md.B53wFpGV.js b/assets/project-structure_utils_common.md.B53wFpGV.js deleted file mode 100644 index f3c2353..0000000 --- a/assets/project-structure_utils_common.md.B53wFpGV.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as o,o as t,aG as r}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"공통 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/common.md","filePath":"project-structure/utils/common.md"}'),i={name:"project-structure/utils/common.md"};function l(c,a,s,n,m,h){return t(),o("div",null,a[0]||(a[0]=[r('

공통 유틸리티

개요

프로젝트 전반에서 사용되는 공통 유틸리티 함수들입니다.

파일 위치

src/utils/common/

주요 파일

common.js

주요 유틸리티 함수들이 포함되어 있습니다:

  • 문자열 처리
  • 날짜/시간 처리
  • 숫자 처리
  • 배열/객체 처리
  • 파일 처리
  • 검증 함수

comfcm.js

FCM(Firebase Cloud Messaging) 관련 유틸리티입니다.

자동 임포트

이 파일의 함수들은 자동으로 임포트되므로 별도의 import 문이 필요 없습니다.

관련 문서

',15)]))}const p=e(i,[["render",l]]);export{u as __pageData,p as default}; diff --git a/assets/project-structure_utils_common.md.B53wFpGV.lean.js b/assets/project-structure_utils_common.md.B53wFpGV.lean.js deleted file mode 100644 index 8791c4f..0000000 --- a/assets/project-structure_utils_common.md.B53wFpGV.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as o,o as t,aG as r}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"공통 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/common.md","filePath":"project-structure/utils/common.md"}'),i={name:"project-structure/utils/common.md"};function l(c,a,s,n,m,h){return t(),o("div",null,a[0]||(a[0]=[r("",15)]))}const p=e(i,[["render",l]]);export{u as __pageData,p as default}; diff --git a/assets/project-structure_utils_common.md.Cjijm0-H.js b/assets/project-structure_utils_common.md.Cjijm0-H.js new file mode 100644 index 0000000..85772da --- /dev/null +++ b/assets/project-structure_utils_common.md.Cjijm0-H.js @@ -0,0 +1 @@ +import{_ as e,c as o,o as t,aG as r}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"공통 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/common.md","filePath":"project-structure/utils/common.md"}'),i={name:"project-structure/utils/common.md"};function l(c,a,s,n,m,h){return t(),o("div",null,a[0]||(a[0]=[r('

공통 유틸리티

개요

프로젝트 전반에서 사용되는 공통 유틸리티 함수들입니다.

파일 위치

src/utils/common/

주요 파일

common.js

주요 유틸리티 함수들이 포함되어 있습니다:

  • 문자열 처리
  • 날짜/시간 처리
  • 숫자 처리
  • 배열/객체 처리
  • 파일 처리
  • 검증 함수

comfcm.js

FCM(Firebase Cloud Messaging) 관련 유틸리티입니다.

자동 임포트

이 파일의 함수들은 자동으로 임포트되므로 별도의 import 문이 필요 없습니다.

관련 문서

',15)]))}const p=e(i,[["render",l]]);export{u as __pageData,p as default}; diff --git a/assets/project-structure_utils_common.md.Cjijm0-H.lean.js b/assets/project-structure_utils_common.md.Cjijm0-H.lean.js new file mode 100644 index 0000000..f16df92 --- /dev/null +++ b/assets/project-structure_utils_common.md.Cjijm0-H.lean.js @@ -0,0 +1 @@ +import{_ as e,c as o,o as t,aG as r}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"공통 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/common.md","filePath":"project-structure/utils/common.md"}'),i={name:"project-structure/utils/common.md"};function l(c,a,s,n,m,h){return t(),o("div",null,a[0]||(a[0]=[r("",15)]))}const p=e(i,[["render",l]]);export{u as __pageData,p as default}; diff --git a/assets/project-structure_utils_lang.md.CZnZSxCT.js b/assets/project-structure_utils_lang.md.CZnZSxCT.js deleted file mode 100644 index 4a4c53d..0000000 --- a/assets/project-structure_utils_lang.md.CZnZSxCT.js +++ /dev/null @@ -1,142 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"언어 및 국제화","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/lang.md","filePath":"project-structure/utils/lang.md"}'),p={name:"project-structure/utils/lang.md"};function h(t,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

언어 및 국제화

개요

src/utils/lang/ 디렉토리는 다국어 지원 및 국제화(i18n) 관련 설정 파일이 위치합니다.

디렉토리 구조

src/utils/lang/
-├── i18n.js                   # Vue I18n 설정
-└── agGrid/                   # AG Grid 다국어 설정
-    └── ko-KR.js              # AG Grid 한국어 로케일

주요 파일

i18n.js

Vue I18n 플러그인 설정 파일입니다.

주요 기능:

  • 다국어 메시지 정의 (한국어, 영어)
  • 숫자 형식 설정
  • 기본 언어 설정

지원 언어:

  • KOR: 한국어 (기본)
  • ENG: 영어

메시지 구조:

javascript
const messages = {
-  KOR: {
-    nav: {
-      dashboard: '대시보드',
-      testpages: '테스트 페이지',
-      // ...
-    },
-    btn: {
-      new: '신규',
-      save: '저장',
-      // ...
-    },
-  },
-  ENG: {
-    nav: {
-      dashboard: 'Dashboard',
-      testpages: 'Test Pages',
-      // ...
-    },
-    btn: {
-      new: 'New',
-      save: 'Save',
-      // ...
-    },
-  },
-}

숫자 형식 설정:

javascript
const numberFormats = {
-  KOR: {
-    currency: {
-      style: 'currency',
-      currency: 'KRW',
-      useGrouping: true,
-      minimumFractionDigits: 0,
-      maximumFractionDigits: 0,
-    },
-  },
-  ENG: {
-    currency: {
-      style: 'currency',
-      currency: 'USD',
-      useGrouping: true,
-      minimumFractionDigits: 2,
-      maximumFractionDigits: 2,
-    },
-  },
-}

I18n 인스턴스 생성:

javascript
import { createI18n } from 'vue-i18n'
-
-const i18n = createI18n({
-  legacy: false,           // Composition API 사용
-  globalInjection: true,    // 전역에서 t() 바로 사용 가능
-  locale: 'KOR',            // 기본 언어
-  fallbackLocale: 'ENG',    // 폴백 언어
-  messages,
-  numberFormats,
-})
-
-export default i18n

agGrid/ko-KR.js

AG Grid 한국어 로케일 설정 파일입니다.

주요 내용:

  • AG Grid의 모든 UI 텍스트를 한국어로 번역
  • 필터, 정렬, 그룹화 등의 메뉴 텍스트
  • 에러 메시지 및 검증 메시지

사용 예제:

javascript
import { AG_GRID_LOCALE_KR } from '@/utils/lang/agGrid/ko-KR.js'
-import { AgGridVue } from 'ag-grid-vue3'
-
-// AG Grid에 로케일 적용
-const gridOptions = {
-  localeText: AG_GRID_LOCALE_KR,
-  // ...
-}

사용 방법

Composition API에서 사용

vue
<script setup>
-import { useI18n } from 'vue-i18n'
-
-const { t, locale } = useI18n()
-
-// 텍스트 번역
-const title = t('nav.dashboard')
-
-// 언어 변경
-locale.value = 'ENG'
-</script>
-
-<template>
-  <div>{{ t('btn.save') }}</div>
-</template>

Options API에서 사용

vue
<script>
-export default {
-  methods: {
-    getText() {
-      return this.$t('btn.save')
-    },
-  },
-}
-</script>
-
-<template>
-  <div>{{ $t('nav.dashboard') }}</div>
-</template>

숫자 형식 사용

vue
<script setup>
-import { useI18n } from 'vue-i18n'
-
-const { n } = useI18n()
-
-// 통화 형식
-const price = n(1000000, 'currency')  // ₩1,000,000 (KOR) or $1,000,000.00 (ENG)
-</script>

메시지 추가

새로운 메시지를 추가하려면 i18n.jsmessages 객체에 추가합니다:

javascript
const messages = {
-  KOR: {
-    // 기존 메시지...
-    custom: {
-      title: '커스텀 제목',
-      message: '커스텀 메시지',
-    },
-  },
-  ENG: {
-    // 기존 메시지...
-    custom: {
-      title: 'Custom Title',
-      message: 'Custom Message',
-    },
-  },
-}

사용:

vue
<template>
-  <div>{{ t('custom.title') }}</div>
-</template>

언어 변경

언어를 동적으로 변경할 수 있습니다:

javascript
import { useI18n } from 'vue-i18n'
-
-const { locale } = useI18n()
-
-// 한국어로 변경
-locale.value = 'KOR'
-
-// 영어로 변경
-locale.value = 'ENG'

AG Grid 로케일 적용

AG Grid에 한국어 로케일을 적용하려면:

vue
<script setup>
-import { AG_GRID_LOCALE_KR } from '@/utils/lang/agGrid/ko-KR.js'
-
-const gridOptions = reactive({
-  localeText: AG_GRID_LOCALE_KR,
-  columnDefs: [
-    { field: 'name', headerName: '이름' },
-  ],
-  rowData: [],
-})
-</script>
-
-<template>
-  <AgGridVue
-    :gridOptions="gridOptions"
-    :columnDefs="gridOptions.columnDefs"
-    :rowData="gridOptions.rowData"
-  />
-</template>

관련 문서

`,44)]))}const c=i(p,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/project-structure_utils_lang.md.CZnZSxCT.lean.js b/assets/project-structure_utils_lang.md.CZnZSxCT.lean.js deleted file mode 100644 index 6cd3ec5..0000000 --- a/assets/project-structure_utils_lang.md.CZnZSxCT.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"언어 및 국제화","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/lang.md","filePath":"project-structure/utils/lang.md"}'),p={name:"project-structure/utils/lang.md"};function h(t,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",44)]))}const c=i(p,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/project-structure_utils_lang.md.D3ygRwKk.js b/assets/project-structure_utils_lang.md.D3ygRwKk.js new file mode 100644 index 0000000..2e13e2c --- /dev/null +++ b/assets/project-structure_utils_lang.md.D3ygRwKk.js @@ -0,0 +1,142 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"언어 및 국제화","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/lang.md","filePath":"project-structure/utils/lang.md"}'),p={name:"project-structure/utils/lang.md"};function h(t,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

언어 및 국제화

개요

src/utils/lang/ 디렉토리는 다국어 지원 및 국제화(i18n) 관련 설정 파일이 위치합니다.

디렉토리 구조

src/utils/lang/
+├── i18n.js                   # Vue I18n 설정
+└── agGrid/                   # AG Grid 다국어 설정
+    └── ko-KR.js              # AG Grid 한국어 로케일

주요 파일

i18n.js

Vue I18n 플러그인 설정 파일입니다.

주요 기능:

  • 다국어 메시지 정의 (한국어, 영어)
  • 숫자 형식 설정
  • 기본 언어 설정

지원 언어:

  • KOR: 한국어 (기본)
  • ENG: 영어

메시지 구조:

javascript
const messages = {
+  KOR: {
+    nav: {
+      dashboard: '대시보드',
+      testpages: '테스트 페이지',
+      // ...
+    },
+    btn: {
+      new: '신규',
+      save: '저장',
+      // ...
+    },
+  },
+  ENG: {
+    nav: {
+      dashboard: 'Dashboard',
+      testpages: 'Test Pages',
+      // ...
+    },
+    btn: {
+      new: 'New',
+      save: 'Save',
+      // ...
+    },
+  },
+}

숫자 형식 설정:

javascript
const numberFormats = {
+  KOR: {
+    currency: {
+      style: 'currency',
+      currency: 'KRW',
+      useGrouping: true,
+      minimumFractionDigits: 0,
+      maximumFractionDigits: 0,
+    },
+  },
+  ENG: {
+    currency: {
+      style: 'currency',
+      currency: 'USD',
+      useGrouping: true,
+      minimumFractionDigits: 2,
+      maximumFractionDigits: 2,
+    },
+  },
+}

I18n 인스턴스 생성:

javascript
import { createI18n } from 'vue-i18n'
+
+const i18n = createI18n({
+  legacy: false,           // Composition API 사용
+  globalInjection: true,    // 전역에서 t() 바로 사용 가능
+  locale: 'KOR',            // 기본 언어
+  fallbackLocale: 'ENG',    // 폴백 언어
+  messages,
+  numberFormats,
+})
+
+export default i18n

agGrid/ko-KR.js

AG Grid 한국어 로케일 설정 파일입니다.

주요 내용:

  • AG Grid의 모든 UI 텍스트를 한국어로 번역
  • 필터, 정렬, 그룹화 등의 메뉴 텍스트
  • 에러 메시지 및 검증 메시지

사용 예제:

javascript
import { AG_GRID_LOCALE_KR } from '@/utils/lang/agGrid/ko-KR.js'
+import { AgGridVue } from 'ag-grid-vue3'
+
+// AG Grid에 로케일 적용
+const gridOptions = {
+  localeText: AG_GRID_LOCALE_KR,
+  // ...
+}

사용 방법

Composition API에서 사용

vue
<script setup>
+import { useI18n } from 'vue-i18n'
+
+const { t, locale } = useI18n()
+
+// 텍스트 번역
+const title = t('nav.dashboard')
+
+// 언어 변경
+locale.value = 'ENG'
+</script>
+
+<template>
+  <div>{{ t('btn.save') }}</div>
+</template>

Options API에서 사용

vue
<script>
+export default {
+  methods: {
+    getText() {
+      return this.$t('btn.save')
+    },
+  },
+}
+</script>
+
+<template>
+  <div>{{ $t('nav.dashboard') }}</div>
+</template>

숫자 형식 사용

vue
<script setup>
+import { useI18n } from 'vue-i18n'
+
+const { n } = useI18n()
+
+// 통화 형식
+const price = n(1000000, 'currency')  // ₩1,000,000 (KOR) or $1,000,000.00 (ENG)
+</script>

메시지 추가

새로운 메시지를 추가하려면 i18n.jsmessages 객체에 추가합니다:

javascript
const messages = {
+  KOR: {
+    // 기존 메시지...
+    custom: {
+      title: '커스텀 제목',
+      message: '커스텀 메시지',
+    },
+  },
+  ENG: {
+    // 기존 메시지...
+    custom: {
+      title: 'Custom Title',
+      message: 'Custom Message',
+    },
+  },
+}

사용:

vue
<template>
+  <div>{{ t('custom.title') }}</div>
+</template>

언어 변경

언어를 동적으로 변경할 수 있습니다:

javascript
import { useI18n } from 'vue-i18n'
+
+const { locale } = useI18n()
+
+// 한국어로 변경
+locale.value = 'KOR'
+
+// 영어로 변경
+locale.value = 'ENG'

AG Grid 로케일 적용

AG Grid에 한국어 로케일을 적용하려면:

vue
<script setup>
+import { AG_GRID_LOCALE_KR } from '@/utils/lang/agGrid/ko-KR.js'
+
+const gridOptions = reactive({
+  localeText: AG_GRID_LOCALE_KR,
+  columnDefs: [
+    { field: 'name', headerName: '이름' },
+  ],
+  rowData: [],
+})
+</script>
+
+<template>
+  <AgGridVue
+    :gridOptions="gridOptions"
+    :columnDefs="gridOptions.columnDefs"
+    :rowData="gridOptions.rowData"
+  />
+</template>

관련 문서

`,44)]))}const c=i(p,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/project-structure_utils_lang.md.D3ygRwKk.lean.js b/assets/project-structure_utils_lang.md.D3ygRwKk.lean.js new file mode 100644 index 0000000..68c9ae2 --- /dev/null +++ b/assets/project-structure_utils_lang.md.D3ygRwKk.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"언어 및 국제화","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/lang.md","filePath":"project-structure/utils/lang.md"}'),p={name:"project-structure/utils/lang.md"};function h(t,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",44)]))}const c=i(p,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/project-structure_utils_plugins.md.B4iaTJBI.js b/assets/project-structure_utils_plugins.md.B4iaTJBI.js new file mode 100644 index 0000000..92fab00 --- /dev/null +++ b/assets/project-structure_utils_plugins.md.B4iaTJBI.js @@ -0,0 +1,92 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"플러그인 설정","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/plugins.md","filePath":"project-structure/utils/plugins.md"}'),p={name:"project-structure/utils/plugins.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

플러그인 설정

개요

src/utils/plugins/ 디렉토리는 Vue 애플리케이션에서 사용하는 플러그인들의 설정 파일이 위치합니다.

디렉토리 구조

src/utils/plugins/
+├── iconify/                  # Iconify 아이콘 플러그인
+│   ├── build-icons.js
+│   ├── icons.css
+│   ├── index.js
+│   └── package.json
+├── pinia.js                  # Pinia 상태 관리 플러그인
+├── router/                   # Vue Router 설정
+│   ├── index.js
+│   └── routes.js
+├── vuetify/                  # Vuetify UI 프레임워크 설정
+│   ├── defaults.js
+│   ├── icons.js
+│   ├── index.js
+│   └── theme.js
+└── webfontloader.js          # 웹 폰트 로더

주요 플러그인

Pinia (pinia.js)

상태 관리 플러그인입니다.

설정 내용:

  • Pinia 인스턴스 생성
  • pinia-plugin-persistedstate 플러그인 사용 (상태 영속화)

코드 예제:

javascript
import { createPinia } from 'pinia'
+import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
+
+export const pinia = createPinia()
+
+export default function(app) {
+  pinia.use(piniaPluginPersistedstate)
+  app.use(pinia)
+}

사용 방법:main.js에서 자동으로 등록됩니다.

Vue Router (router/)

라우팅 설정입니다.

routes.js

라우트 정의 파일입니다.

주요 라우트:

  • /: 기본 경로 (리다이렉트)
  • /Login: 로그인 페이지
  • /AdminLogin: 관리자 로그인 페이지
  • /Logout: 로그아웃 페이지
  • /Register: 회원가입 페이지
  • /Main: 메인 페이지
  • /Popup: 팝업 레이아웃

코드 예제:

javascript
export const routes = [
+  {
+    path: '/',
+    name: 'default',
+    redirect: '/Login',
+  },
+  {
+    path: '/Login',
+    name: 'Login',
+    component: () => import('@/views/axpFramework/auth/Login.vue'),
+  },
+  {
+    path: '/Main',
+    name: 'Main',
+    component: () => import('@/views/axpFramework/main/Main.vue'),
+    children: [],
+  },
+]

index.js

Router 인스턴스 생성 및 설정 파일입니다.

주요 기능:

  • Router 인스턴스 생성
  • 라우트 가드 설정
  • 히스토리 모드 설정

Vuetify (vuetify/)

Vuetify UI 프레임워크 설정입니다.

index.js

Vuetify 인스턴스 생성 파일입니다.

설정 내용:

  • Vuetify 인스턴스 생성
  • 기본 테마 설정
  • 아이콘 설정
  • 로케일 설정 (한국어)

코드 예제:

javascript
import { createVuetify } from 'vuetify'
+import defaults from './defaults.js'
+import { icons } from './icons.js'
+import { themes } from './theme.js'
+import { ko } from 'vuetify/locale'
+
+export default function(app) {
+  const vuetify = createVuetify({
+    aliases: {
+      IconBtn: VBtn,
+    },
+    defaults,
+    icons: {
+      defaultSet: 'mdi',
+    },
+    theme: {
+      defaultTheme: 'light',
+      themes,
+    },
+    locale: {
+      locale: 'ko',
+      messages: { ko },
+    },
+  })
+
+  app.use(vuetify)
+}

defaults.js

Vuetify 컴포넌트 기본 설정입니다.

설정 내용:

  • 버튼 기본 스타일
  • 입력 필드 기본 설정
  • 카드 기본 설정

icons.js

아이콘 설정 파일입니다.

설정 내용:

  • Material Design Icons 설정
  • 커스텀 아이콘 등록

theme.js

테마 설정 파일입니다.

설정 내용:

  • 라이트 테마 색상
  • 다크 테마 색상
  • 커스텀 색상 팔레트

Iconify (iconify/)

Iconify 아이콘 플러그인 설정입니다.

주요 기능:

  • 아이콘 빌드 스크립트
  • 아이콘 CSS 생성
  • 아이콘 등록

WebFontLoader (webfontloader.js)

웹 폰트 로더 설정입니다.

주요 기능:

  • Google Fonts 로딩
  • 커스텀 폰트 로딩

플러그인 등록

플러그인은 src/utils/pluginsUtil.js에서 통합 관리됩니다:

javascript
import pinia from './plugins/pinia.js'
+import router from './plugins/router/index.js'
+import vuetify from './plugins/vuetify/index.js'
+
+export function registerPlugins(app) {
+  pinia(app)
+  router(app)
+  vuetify(app)
+  // 기타 플러그인...
+}

main.js에서 호출됩니다:

javascript
import { registerPlugins } from '@/utils/pluginsUtil.js'
+
+const app = createApp(App)
+registerPlugins(app)
+app.mount('#app')

커스텀 플러그인 추가

새로운 플러그인을 추가하려면:

  1. src/utils/plugins/ 디렉토리에 플러그인 설정 파일 생성
  2. src/utils/pluginsUtil.js에 플러그인 등록 함수 추가
  3. registerPlugins 함수에서 호출

예제:

javascript
// src/utils/plugins/custom.js
+export default function(app) {
+  // 플러그인 설정
+  app.use(customPlugin)
+}
+
+// src/utils/pluginsUtil.js
+import custom from './plugins/custom.js'
+
+export function registerPlugins(app) {
+  // ...
+  custom(app)
+}

관련 문서

`,65)]))}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_utils_plugins.md.B4iaTJBI.lean.js b/assets/project-structure_utils_plugins.md.B4iaTJBI.lean.js new file mode 100644 index 0000000..b5d570b --- /dev/null +++ b/assets/project-structure_utils_plugins.md.B4iaTJBI.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"플러그인 설정","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/plugins.md","filePath":"project-structure/utils/plugins.md"}'),p={name:"project-structure/utils/plugins.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l("",65)]))}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_utils_plugins.md.Ce68kzUz.js b/assets/project-structure_utils_plugins.md.Ce68kzUz.js deleted file mode 100644 index 21b80b6..0000000 --- a/assets/project-structure_utils_plugins.md.Ce68kzUz.js +++ /dev/null @@ -1,92 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"플러그인 설정","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/plugins.md","filePath":"project-structure/utils/plugins.md"}'),p={name:"project-structure/utils/plugins.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

플러그인 설정

개요

src/utils/plugins/ 디렉토리는 Vue 애플리케이션에서 사용하는 플러그인들의 설정 파일이 위치합니다.

디렉토리 구조

src/utils/plugins/
-├── iconify/                  # Iconify 아이콘 플러그인
-│   ├── build-icons.js
-│   ├── icons.css
-│   ├── index.js
-│   └── package.json
-├── pinia.js                  # Pinia 상태 관리 플러그인
-├── router/                   # Vue Router 설정
-│   ├── index.js
-│   └── routes.js
-├── vuetify/                  # Vuetify UI 프레임워크 설정
-│   ├── defaults.js
-│   ├── icons.js
-│   ├── index.js
-│   └── theme.js
-└── webfontloader.js          # 웹 폰트 로더

주요 플러그인

Pinia (pinia.js)

상태 관리 플러그인입니다.

설정 내용:

  • Pinia 인스턴스 생성
  • pinia-plugin-persistedstate 플러그인 사용 (상태 영속화)

코드 예제:

javascript
import { createPinia } from 'pinia'
-import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
-
-export const pinia = createPinia()
-
-export default function(app) {
-  pinia.use(piniaPluginPersistedstate)
-  app.use(pinia)
-}

사용 방법:main.js에서 자동으로 등록됩니다.

Vue Router (router/)

라우팅 설정입니다.

routes.js

라우트 정의 파일입니다.

주요 라우트:

  • /: 기본 경로 (리다이렉트)
  • /Login: 로그인 페이지
  • /AdminLogin: 관리자 로그인 페이지
  • /Logout: 로그아웃 페이지
  • /Register: 회원가입 페이지
  • /Main: 메인 페이지
  • /Popup: 팝업 레이아웃

코드 예제:

javascript
export const routes = [
-  {
-    path: '/',
-    name: 'default',
-    redirect: '/Login',
-  },
-  {
-    path: '/Login',
-    name: 'Login',
-    component: () => import('@/views/axpFramework/auth/Login.vue'),
-  },
-  {
-    path: '/Main',
-    name: 'Main',
-    component: () => import('@/views/axpFramework/main/Main.vue'),
-    children: [],
-  },
-]

index.js

Router 인스턴스 생성 및 설정 파일입니다.

주요 기능:

  • Router 인스턴스 생성
  • 라우트 가드 설정
  • 히스토리 모드 설정

Vuetify (vuetify/)

Vuetify UI 프레임워크 설정입니다.

index.js

Vuetify 인스턴스 생성 파일입니다.

설정 내용:

  • Vuetify 인스턴스 생성
  • 기본 테마 설정
  • 아이콘 설정
  • 로케일 설정 (한국어)

코드 예제:

javascript
import { createVuetify } from 'vuetify'
-import defaults from './defaults.js'
-import { icons } from './icons.js'
-import { themes } from './theme.js'
-import { ko } from 'vuetify/locale'
-
-export default function(app) {
-  const vuetify = createVuetify({
-    aliases: {
-      IconBtn: VBtn,
-    },
-    defaults,
-    icons: {
-      defaultSet: 'mdi',
-    },
-    theme: {
-      defaultTheme: 'light',
-      themes,
-    },
-    locale: {
-      locale: 'ko',
-      messages: { ko },
-    },
-  })
-
-  app.use(vuetify)
-}

defaults.js

Vuetify 컴포넌트 기본 설정입니다.

설정 내용:

  • 버튼 기본 스타일
  • 입력 필드 기본 설정
  • 카드 기본 설정

icons.js

아이콘 설정 파일입니다.

설정 내용:

  • Material Design Icons 설정
  • 커스텀 아이콘 등록

theme.js

테마 설정 파일입니다.

설정 내용:

  • 라이트 테마 색상
  • 다크 테마 색상
  • 커스텀 색상 팔레트

Iconify (iconify/)

Iconify 아이콘 플러그인 설정입니다.

주요 기능:

  • 아이콘 빌드 스크립트
  • 아이콘 CSS 생성
  • 아이콘 등록

WebFontLoader (webfontloader.js)

웹 폰트 로더 설정입니다.

주요 기능:

  • Google Fonts 로딩
  • 커스텀 폰트 로딩

플러그인 등록

플러그인은 src/utils/pluginsUtil.js에서 통합 관리됩니다:

javascript
import pinia from './plugins/pinia.js'
-import router from './plugins/router/index.js'
-import vuetify from './plugins/vuetify/index.js'
-
-export function registerPlugins(app) {
-  pinia(app)
-  router(app)
-  vuetify(app)
-  // 기타 플러그인...
-}

main.js에서 호출됩니다:

javascript
import { registerPlugins } from '@/utils/pluginsUtil.js'
-
-const app = createApp(App)
-registerPlugins(app)
-app.mount('#app')

커스텀 플러그인 추가

새로운 플러그인을 추가하려면:

  1. src/utils/plugins/ 디렉토리에 플러그인 설정 파일 생성
  2. src/utils/pluginsUtil.js에 플러그인 등록 함수 추가
  3. registerPlugins 함수에서 호출

예제:

javascript
// src/utils/plugins/custom.js
-export default function(app) {
-  // 플러그인 설정
-  app.use(customPlugin)
-}
-
-// src/utils/pluginsUtil.js
-import custom from './plugins/custom.js'
-
-export function registerPlugins(app) {
-  // ...
-  custom(app)
-}

관련 문서

`,65)]))}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_utils_plugins.md.Ce68kzUz.lean.js b/assets/project-structure_utils_plugins.md.Ce68kzUz.lean.js deleted file mode 100644 index 6eedc01..0000000 --- a/assets/project-structure_utils_plugins.md.Ce68kzUz.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"플러그인 설정","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/plugins.md","filePath":"project-structure/utils/plugins.md"}'),p={name:"project-structure/utils/plugins.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l("",65)]))}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_utils_stores.md.CAXVOPtt.js b/assets/project-structure_utils_stores.md.CAXVOPtt.js new file mode 100644 index 0000000..6a1f5de --- /dev/null +++ b/assets/project-structure_utils_stores.md.CAXVOPtt.js @@ -0,0 +1,92 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"Pinia 스토어","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/stores.md","filePath":"project-structure/utils/stores.md"}'),l={name:"project-structure/utils/stores.md"};function e(h,s,p,k,r,o){return n(),a("div",null,s[0]||(s[0]=[t(`

Pinia 스토어

개요

src/utils/stores/ 디렉토리는 Pinia를 사용한 상태 관리 스토어 파일들이 위치합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

디렉토리 구조

src/utils/stores/
+├── authStore.js           # 인증 스토어
+├── loadingStore.js        # 로딩 스토어
+├── menuStore.js           # 메뉴 스토어
+├── sessionStore.js        # 세션 스토어
+├── modalStore.js          # 모달 스토어
+├── tabStore.js            # 탭 스토어
+├── sidebarStore.js        # 사이드바 스토어
+└── logStore.js            # 로그 스토어

주요 스토어

authStore.js

인증 관련 상태를 관리합니다.

주요 상태:

  • accessToken: JWT Access Token
  • isAuthenticated: 인증 여부

주요 액션:

  • setAccessToken(token): Access Token 설정
  • clearAccessToken(): Access Token 초기화

사용 예제:

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
+
+const authStore = useAuthStore()
+authStore.setAccessToken('token')
+const isAuth = computed(() => authStore.isAuthenticated)

자세한 내용은 인증 스토어 문서를 참고하세요.

loadingStore.js

로딩 상태를 관리합니다.

주요 상태:

  • isLoading: 로딩 여부

주요 액션:

  • showLoading(): 로딩 표시
  • hideLoading(): 로딩 숨김

사용 예제:

javascript
import { useLoadingStore } from '@/utils/stores/loadingStore.js'
+
+const loadingStore = useLoadingStore()
+loadingStore.showLoading()
+// API 호출
+loadingStore.hideLoading()

자세한 내용은 로딩 스토어 문서를 참고하세요.

메뉴 관련 상태를 관리합니다.

주요 상태:

  • menuList: 메뉴 목록
  • currentMenu: 현재 메뉴
  • visitedMenu: 방문한 메뉴 목록

주요 액션:

  • setMenuList(menuList): 메뉴 목록 설정
  • setCurrentMenu(menu): 현재 메뉴 설정

자세한 내용은 메뉴 스토어 문서를 참고하세요.

sessionStore.js

세션 정보를 관리합니다.

주요 상태:

  • sessionData: 세션 데이터 객체

주요 액션:

  • setSessionValue(key, value): 세션 값 설정
  • getSessionValue(key): 세션 값 가져오기
  • getAllSessionData: 모든 세션 데이터 가져오기

사용 예제:

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
+
+const sessionStore = useSessionStore()
+sessionStore.setSessionValue('CompCode', '1000')
+const compCode = sessionStore.getSessionValue('CompCode')

자세한 내용은 세션 스토어 문서를 참고하세요.

modalStore.js

모달 상태를 관리합니다.

주요 상태:

  • modalId: 현재 열린 모달 ID
  • modalData: 모달 데이터

주요 액션:

  • openModal(id, data): 모달 열기
  • closeModal(): 모달 닫기

사용 예제:

javascript
import { useModalStore } from '@/utils/stores/modalStore.js'
+
+const modalStore = useModalStore()
+modalStore.openModal('PopupApproval', {
+  title: '승인',
+  data: approvalData,
+})

자세한 내용은 모달 스토어 문서를 참고하세요.

tabStore.js

탭 상태를 관리합니다.

주요 상태:

  • tabList: 탭 목록
  • nowTab: 현재 활성 탭

주요 액션:

  • addTab(tab): 탭 추가
  • removeTab(tabId): 탭 제거
  • setActiveTab(tabId): 활성 탭 설정

자세한 내용은 탭 스토어 문서를 참고하세요.

sidebarStore.js

사이드바 상태를 관리합니다.

주요 상태:

  • visible: 사이드바 표시 여부
  • unfoldable: 사이드바 접기/펼치기 가능 여부

주요 액션:

  • toggleVisible(value): 표시 여부 토글
  • toggleUnfoldable(): 접기/펼치기 토글

사용 예제:

javascript
import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
+
+const sidebarStore = useSidebarStore()
+sidebarStore.toggleVisible()
+sidebarStore.toggleUnfoldable()

자세한 내용은 사이드바 스토어 문서를 참고하세요.

logStore.js

API 호출 로그를 관리합니다.

주요 상태:

  • logYN: 로그 표시 여부
  • logList: 로그 목록

주요 액션:

  • toggleLogYN(): 로그 표시 여부 토글
  • addLogData(config, menuData): 로그 추가
  • clearLogData(): 로그 초기화

사용 예제:

javascript
import { useLogStore } from '@/utils/stores/logStore.js'
+
+const logStore = useLogStore()
+logStore.toggleLogYN()
+const logs = computed(() => logStore.logList)

자세한 내용은 로그 스토어 문서를 참고하세요.

스토어 사용 패턴

Composition API에서 사용

vue
<script setup>
+import { useAuthStore } from '@/utils/stores/authStore.js'
+import { useLoadingStore } from '@/utils/stores/loadingStore.js'
+
+const authStore = useAuthStore()
+const loadingStore = useLoadingStore()
+
+// 반응형 상태 사용
+const isAuthenticated = computed(() => authStore.isAuthenticated)
+
+// 액션 호출
+const handleLogin = async () => {
+  loadingStore.showLoading()
+  try {
+    // 로그인 로직
+    authStore.setAccessToken(token)
+  } finally {
+    loadingStore.hideLoading()
+  }
+}
+</script>

Options API에서 사용

vue
<script>
+import { useAuthStore } from '@/utils/stores/authStore.js'
+
+export default {
+  setup() {
+    const authStore = useAuthStore()
+    return {
+      authStore,
+    }
+  },
+  computed: {
+    isAuthenticated() {
+      return this.authStore.isAuthenticated
+    },
+  },
+}
+</script>

스토어 생성 가이드

새로운 스토어를 생성할 때는 다음 패턴을 따릅니다:

javascript
import { defineStore } from 'pinia'
+import { ref, computed } from 'vue'
+
+export const useCustomStore = defineStore('custom', () => {
+  // State
+  const state = ref('initial')
+
+  // Getters
+  const getState = computed(() => state.value)
+
+  // Actions
+  const setState = (value) => {
+    state.value = value
+  }
+
+  return {
+    state,
+    getState,
+    setState,
+  }
+})

관련 문서

`,84)]))}const g=i(l,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/project-structure_utils_stores.md.CAXVOPtt.lean.js b/assets/project-structure_utils_stores.md.CAXVOPtt.lean.js new file mode 100644 index 0000000..62b4487 --- /dev/null +++ b/assets/project-structure_utils_stores.md.CAXVOPtt.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"Pinia 스토어","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/stores.md","filePath":"project-structure/utils/stores.md"}'),l={name:"project-structure/utils/stores.md"};function e(h,s,p,k,r,o){return n(),a("div",null,s[0]||(s[0]=[t("",84)]))}const g=i(l,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/project-structure_utils_stores.md.C_DqYVYN.js b/assets/project-structure_utils_stores.md.C_DqYVYN.js deleted file mode 100644 index 3c4a28f..0000000 --- a/assets/project-structure_utils_stores.md.C_DqYVYN.js +++ /dev/null @@ -1,92 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"Pinia 스토어","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/stores.md","filePath":"project-structure/utils/stores.md"}'),l={name:"project-structure/utils/stores.md"};function e(h,s,p,k,r,o){return n(),a("div",null,s[0]||(s[0]=[t(`

Pinia 스토어

개요

src/utils/stores/ 디렉토리는 Pinia를 사용한 상태 관리 스토어 파일들이 위치합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

디렉토리 구조

src/utils/stores/
-├── authStore.js           # 인증 스토어
-├── loadingStore.js        # 로딩 스토어
-├── menuStore.js           # 메뉴 스토어
-├── sessionStore.js        # 세션 스토어
-├── modalStore.js          # 모달 스토어
-├── tabStore.js            # 탭 스토어
-├── sidebarStore.js        # 사이드바 스토어
-└── logStore.js            # 로그 스토어

주요 스토어

authStore.js

인증 관련 상태를 관리합니다.

주요 상태:

  • accessToken: JWT Access Token
  • isAuthenticated: 인증 여부

주요 액션:

  • setAccessToken(token): Access Token 설정
  • clearAccessToken(): Access Token 초기화

사용 예제:

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
-
-const authStore = useAuthStore()
-authStore.setAccessToken('token')
-const isAuth = computed(() => authStore.isAuthenticated)

자세한 내용은 인증 스토어 문서를 참고하세요.

loadingStore.js

로딩 상태를 관리합니다.

주요 상태:

  • isLoading: 로딩 여부

주요 액션:

  • showLoading(): 로딩 표시
  • hideLoading(): 로딩 숨김

사용 예제:

javascript
import { useLoadingStore } from '@/utils/stores/loadingStore.js'
-
-const loadingStore = useLoadingStore()
-loadingStore.showLoading()
-// API 호출
-loadingStore.hideLoading()

자세한 내용은 로딩 스토어 문서를 참고하세요.

메뉴 관련 상태를 관리합니다.

주요 상태:

  • menuList: 메뉴 목록
  • currentMenu: 현재 메뉴
  • visitedMenu: 방문한 메뉴 목록

주요 액션:

  • setMenuList(menuList): 메뉴 목록 설정
  • setCurrentMenu(menu): 현재 메뉴 설정

자세한 내용은 메뉴 스토어 문서를 참고하세요.

sessionStore.js

세션 정보를 관리합니다.

주요 상태:

  • sessionData: 세션 데이터 객체

주요 액션:

  • setSessionValue(key, value): 세션 값 설정
  • getSessionValue(key): 세션 값 가져오기
  • getAllSessionData: 모든 세션 데이터 가져오기

사용 예제:

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
-
-const sessionStore = useSessionStore()
-sessionStore.setSessionValue('CompCode', '1000')
-const compCode = sessionStore.getSessionValue('CompCode')

자세한 내용은 세션 스토어 문서를 참고하세요.

modalStore.js

모달 상태를 관리합니다.

주요 상태:

  • modalId: 현재 열린 모달 ID
  • modalData: 모달 데이터

주요 액션:

  • openModal(id, data): 모달 열기
  • closeModal(): 모달 닫기

사용 예제:

javascript
import { useModalStore } from '@/utils/stores/modalStore.js'
-
-const modalStore = useModalStore()
-modalStore.openModal('PopupApproval', {
-  title: '승인',
-  data: approvalData,
-})

자세한 내용은 모달 스토어 문서를 참고하세요.

tabStore.js

탭 상태를 관리합니다.

주요 상태:

  • tabList: 탭 목록
  • nowTab: 현재 활성 탭

주요 액션:

  • addTab(tab): 탭 추가
  • removeTab(tabId): 탭 제거
  • setActiveTab(tabId): 활성 탭 설정

자세한 내용은 탭 스토어 문서를 참고하세요.

sidebarStore.js

사이드바 상태를 관리합니다.

주요 상태:

  • visible: 사이드바 표시 여부
  • unfoldable: 사이드바 접기/펼치기 가능 여부

주요 액션:

  • toggleVisible(value): 표시 여부 토글
  • toggleUnfoldable(): 접기/펼치기 토글

사용 예제:

javascript
import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
-
-const sidebarStore = useSidebarStore()
-sidebarStore.toggleVisible()
-sidebarStore.toggleUnfoldable()

자세한 내용은 사이드바 스토어 문서를 참고하세요.

logStore.js

API 호출 로그를 관리합니다.

주요 상태:

  • logYN: 로그 표시 여부
  • logList: 로그 목록

주요 액션:

  • toggleLogYN(): 로그 표시 여부 토글
  • addLogData(config, menuData): 로그 추가
  • clearLogData(): 로그 초기화

사용 예제:

javascript
import { useLogStore } from '@/utils/stores/logStore.js'
-
-const logStore = useLogStore()
-logStore.toggleLogYN()
-const logs = computed(() => logStore.logList)

자세한 내용은 로그 스토어 문서를 참고하세요.

스토어 사용 패턴

Composition API에서 사용

vue
<script setup>
-import { useAuthStore } from '@/utils/stores/authStore.js'
-import { useLoadingStore } from '@/utils/stores/loadingStore.js'
-
-const authStore = useAuthStore()
-const loadingStore = useLoadingStore()
-
-// 반응형 상태 사용
-const isAuthenticated = computed(() => authStore.isAuthenticated)
-
-// 액션 호출
-const handleLogin = async () => {
-  loadingStore.showLoading()
-  try {
-    // 로그인 로직
-    authStore.setAccessToken(token)
-  } finally {
-    loadingStore.hideLoading()
-  }
-}
-</script>

Options API에서 사용

vue
<script>
-import { useAuthStore } from '@/utils/stores/authStore.js'
-
-export default {
-  setup() {
-    const authStore = useAuthStore()
-    return {
-      authStore,
-    }
-  },
-  computed: {
-    isAuthenticated() {
-      return this.authStore.isAuthenticated
-    },
-  },
-}
-</script>

스토어 생성 가이드

새로운 스토어를 생성할 때는 다음 패턴을 따릅니다:

javascript
import { defineStore } from 'pinia'
-import { ref, computed } from 'vue'
-
-export const useCustomStore = defineStore('custom', () => {
-  // State
-  const state = ref('initial')
-
-  // Getters
-  const getState = computed(() => state.value)
-
-  // Actions
-  const setState = (value) => {
-    state.value = value
-  }
-
-  return {
-    state,
-    getState,
-    setState,
-  }
-})

관련 문서

`,84)]))}const g=i(l,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/project-structure_utils_stores.md.C_DqYVYN.lean.js b/assets/project-structure_utils_stores.md.C_DqYVYN.lean.js deleted file mode 100644 index 52277c6..0000000 --- a/assets/project-structure_utils_stores.md.C_DqYVYN.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"Pinia 스토어","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/utils/stores.md","filePath":"project-structure/utils/stores.md"}'),l={name:"project-structure/utils/stores.md"};function e(h,s,p,k,r,o){return n(),a("div",null,s[0]||(s[0]=[t("",84)]))}const g=i(l,[["render",e]]);export{E as __pageData,g as default}; diff --git a/assets/project-structure_vendor.md.BtjPSR9P.js b/assets/project-structure_vendor.md.BtjPSR9P.js deleted file mode 100644 index 7eafb14..0000000 --- a/assets/project-structure_vendor.md.BtjPSR9P.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as s,c as e,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"벤더 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/vendor.md","filePath":"project-structure/vendor.md"}'),r={name:"project-structure/vendor.md"};function o(p,a,l,i,c,d){return n(),e("div",null,a[0]||(a[0]=[t(`

벤더 라이브러리

개요

외부 라이브러리 및 템플릿 파일들이 위치합니다.

디렉토리 구조

src/vendor/
-├── @core/              # 핵심 컴포넌트
-├── @layouts/           # 레이아웃 컴포넌트
-├── @dashboard/         # 대시보드 컴포넌트
-├── @pages/             # 페이지 템플릿
-├── @user-interface/    # UI 컴포넌트
-└── assets/             # 리소스 파일
-    ├── css/            # CSS 파일
-    ├── images/         # 이미지
-    ├── fonts/          # 폰트
-    └── js/             # JavaScript 파일

주요 디렉토리

@core

프로젝트의 핵심 컴포넌트 및 스타일

@layouts

레이아웃 관련 컴포넌트

@dashboard

대시보드 컴포넌트

assets

이미지, 폰트, CSS 등 리소스 파일

`,14)]))}const b=s(r,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/project-structure_vendor.md.BtjPSR9P.lean.js b/assets/project-structure_vendor.md.BtjPSR9P.lean.js deleted file mode 100644 index b6e5da1..0000000 --- a/assets/project-structure_vendor.md.BtjPSR9P.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as e,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"벤더 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/vendor.md","filePath":"project-structure/vendor.md"}'),r={name:"project-structure/vendor.md"};function o(p,a,l,i,c,d){return n(),e("div",null,a[0]||(a[0]=[t("",14)]))}const b=s(r,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/project-structure_vendor.md.CoaDo4cT.js b/assets/project-structure_vendor.md.CoaDo4cT.js new file mode 100644 index 0000000..76a4292 --- /dev/null +++ b/assets/project-structure_vendor.md.CoaDo4cT.js @@ -0,0 +1,11 @@ +import{_ as s,c as e,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"벤더 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/vendor.md","filePath":"project-structure/vendor.md"}'),r={name:"project-structure/vendor.md"};function o(p,a,l,i,c,d){return n(),e("div",null,a[0]||(a[0]=[t(`

벤더 라이브러리

개요

외부 라이브러리 및 템플릿 파일들이 위치합니다.

디렉토리 구조

src/vendor/
+├── @core/              # 핵심 컴포넌트
+├── @layouts/           # 레이아웃 컴포넌트
+├── @dashboard/         # 대시보드 컴포넌트
+├── @pages/             # 페이지 템플릿
+├── @user-interface/    # UI 컴포넌트
+└── assets/             # 리소스 파일
+    ├── css/            # CSS 파일
+    ├── images/         # 이미지
+    ├── fonts/          # 폰트
+    └── js/             # JavaScript 파일

주요 디렉토리

@core

프로젝트의 핵심 컴포넌트 및 스타일

@layouts

레이아웃 관련 컴포넌트

@dashboard

대시보드 컴포넌트

assets

이미지, 폰트, CSS 등 리소스 파일

`,14)]))}const b=s(r,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/project-structure_vendor.md.CoaDo4cT.lean.js b/assets/project-structure_vendor.md.CoaDo4cT.lean.js new file mode 100644 index 0000000..6067e8f --- /dev/null +++ b/assets/project-structure_vendor.md.CoaDo4cT.lean.js @@ -0,0 +1 @@ +import{_ as s,c as e,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"벤더 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/vendor.md","filePath":"project-structure/vendor.md"}'),r={name:"project-structure/vendor.md"};function o(p,a,l,i,c,d){return n(),e("div",null,a[0]||(a[0]=[t("",14)]))}const b=s(r,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/project-structure_views_axpframework.md.CsZ6tcU2.js b/assets/project-structure_views_axpframework.md.CsZ6tcU2.js deleted file mode 100644 index c141271..0000000 --- a/assets/project-structure_views_axpframework.md.CsZ6tcU2.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as e,c as n,o as s,aG as r}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"axpFramework 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/axpframework.md","filePath":"project-structure/views/axpframework.md"}'),i={name:"project-structure/views/axpframework.md"};function o(t,a,p,l,d,h){return s(),n("div",null,a[0]||(a[0]=[r(`

axpFramework 모듈

개요

AXP Framework의 핵심 모듈입니다.

디렉토리 구조

src/views/axpFramework/
-├── auth/          # 인증 관련 페이지
-│   ├── Login.vue
-│   ├── AdminLogin.vue
-│   └── register.vue
-└── main/          # 메인 페이지
-    ├── Main.vue
-    ├── Dashboard.vue
-    └── Dashboard_NEW.vue

주요 컴포넌트

Login.vue

일반 사용자 로그인 페이지입니다.

AdminLogin.vue

관리자 로그인 페이지입니다.

Main.vue

메인 애플리케이션 레이아웃입니다.

Dashboard.vue

대시보드 페이지입니다.

`,14)]))}const m=e(i,[["render",o]]);export{c as __pageData,m as default}; diff --git a/assets/project-structure_views_axpframework.md.CsZ6tcU2.lean.js b/assets/project-structure_views_axpframework.md.CsZ6tcU2.lean.js deleted file mode 100644 index 8d2e51d..0000000 --- a/assets/project-structure_views_axpframework.md.CsZ6tcU2.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as n,o as s,aG as r}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"axpFramework 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/axpframework.md","filePath":"project-structure/views/axpframework.md"}'),i={name:"project-structure/views/axpframework.md"};function o(t,a,p,l,d,h){return s(),n("div",null,a[0]||(a[0]=[r("",14)]))}const m=e(i,[["render",o]]);export{c as __pageData,m as default}; diff --git a/assets/project-structure_views_axpframework.md.Dm9l2md5.js b/assets/project-structure_views_axpframework.md.Dm9l2md5.js new file mode 100644 index 0000000..3257e0f --- /dev/null +++ b/assets/project-structure_views_axpframework.md.Dm9l2md5.js @@ -0,0 +1,9 @@ +import{_ as e,c as n,o as s,aG as r}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"axpFramework 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/axpframework.md","filePath":"project-structure/views/axpframework.md"}'),i={name:"project-structure/views/axpframework.md"};function o(t,a,p,l,d,h){return s(),n("div",null,a[0]||(a[0]=[r(`

axpFramework 모듈

개요

AXP Framework의 핵심 모듈입니다.

디렉토리 구조

src/views/axpFramework/
+├── auth/          # 인증 관련 페이지
+│   ├── Login.vue
+│   ├── AdminLogin.vue
+│   └── register.vue
+└── main/          # 메인 페이지
+    ├── Main.vue
+    ├── Dashboard.vue
+    └── Dashboard_NEW.vue

주요 컴포넌트

Login.vue

일반 사용자 로그인 페이지입니다.

AdminLogin.vue

관리자 로그인 페이지입니다.

Main.vue

메인 애플리케이션 레이아웃입니다.

Dashboard.vue

대시보드 페이지입니다.

`,14)]))}const m=e(i,[["render",o]]);export{c as __pageData,m as default}; diff --git a/assets/project-structure_views_axpframework.md.Dm9l2md5.lean.js b/assets/project-structure_views_axpframework.md.Dm9l2md5.lean.js new file mode 100644 index 0000000..da7b8a7 --- /dev/null +++ b/assets/project-structure_views_axpframework.md.Dm9l2md5.lean.js @@ -0,0 +1 @@ +import{_ as e,c as n,o as s,aG as r}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"axpFramework 모듈","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/axpframework.md","filePath":"project-structure/views/axpframework.md"}'),i={name:"project-structure/views/axpframework.md"};function o(t,a,p,l,d,h){return s(),n("div",null,a[0]||(a[0]=[r("",14)]))}const m=e(i,[["render",o]]);export{c as __pageData,m as default}; diff --git a/assets/project-structure_views_ess.md.Bky9Z1_w.js b/assets/project-structure_views_ess.md.Bky9Z1_w.js new file mode 100644 index 0000000..22ab090 --- /dev/null +++ b/assets/project-structure_views_ess.md.Bky9Z1_w.js @@ -0,0 +1,78 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"ESS 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/ess.md","filePath":"project-structure/views/ess.md"}'),e={name:"project-structure/views/ess.md"};function t(p,s,h,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

ESS 모듈 뷰 컴포넌트

개요

ESS(Employee Self Service) 모듈은 직원이 직접 사용하는 자가 서비스 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/ess/
+├── admin/                     # 관리자 기능
+│   ├── AdminTest.vue
+│   └── AsSMSManagement.vue    # SMS 관리
+├── creditcard/                # 법인카드 관련
+│   └── BillApproveList.vue
+├── education/                 # 교육 관련
+│   └── EtEduRequest.vue
+├── estimation/                # 평가 관련
+│   └── EbAdminEstimationStatistics.vue
+└── persadm/                   # 인사 관리
+    ├── PaAttendanceRequest.vue           # 근태 신청 및 조회
+    ├── PcBillReqHipass.vue               # 하이패스 청구 요청
+    ├── PcBillReqHipass2.vue
+    ├── PcBillReqHipass_popup.vue
+    ├── PcBillReqHipassApproval.vue       # 하이패스 청구 승인
+    ├── PcBillReqHipassApprovalCancel.vue # 하이패스 청구 승인 취소
+    ├── PiMyPersonnelInformation.vue      # 본인 인사 정보
+    └── PoOrganizationChart.vue            # 조직도

주요 컴포넌트

인사 관리 (persadm)

PaAttendanceRequest.vue

근태 신청 및 조회 페이지입니다.

주요 기능:

  • 근태 신청
  • 근태 조회
  • 사업장, 부서, 사원별 필터링

사용 예제:

vue
<template>
+  <PaAttendanceRequest />
+</template>

PiMyPersonnelInformation.vue

본인 인사 정보 조회 페이지입니다.

주요 기능:

  • 기본 인사 정보 조회
  • 교육 이력 조회
  • 자격증 정보 조회
  • 외부 활동 이력 조회
  • 보상 정보 조회
  • 발령 정보 조회
  • 교육 이수 정보 조회
  • 경력 이력 조회
  • 평가 이력 조회

API 호출:

javascript
const param = {
+  procedure: "P_HRESS1300_Q",
+  params: {
+    V_P_WORK_TYPE: "ESS",
+    V_P_LANG_ID: sessionStore.getSessionValue('LangID'),
+    V_P_COMP_CODE: sessionStore.getSessionValue('CompCode'),
+    V_P_EMP_CODE: sessionStore.getSessionValue('EmpCode'),
+  }
+}

PoOrganizationChart.vue

조직도 페이지입니다.

주요 기능:

  • 조직 구조 시각화
  • 부서별 직원 조회

관리자 기능 (admin)

AsSMSManagement.vue

SMS 발송 및 관리 페이지입니다.

주요 기능:

  • SMS 발송
  • SMS 템플릿 관리
  • 발송 내역 조회
  • 부서/사원별 대상 선택

사용 예제:

vue
<template>
+  <AsSMSManagement 
+    :pemenu="menuId"
+    :nvmenu="menuName"
+    :msgKtStel="sendTelNo"
+  />
+</template>

API 호출:

javascript
// SMS 발송
+const param = {
+  procedure: 'P_SYSMESSAGESEND_S',
+  params: {
+    msg_type: 'SMS',
+    rev_type: 'DEPT',
+    msg_cont: '메시지 내용',
+    send_tel: '010-1234-5678',
+  }
+}
+
+// 발송 내역 조회
+const param = {
+  procedure: 'P_SYSMESSAGESEND_Q',
+  params: {
+    V_P_WORK_TYPE: 'Q',
+    V_P_MSG_TYPE: '',
+    V_P_MSG_STATE: '',
+    V_P_SEND_DATETIME_S: '20240101',
+    V_P_SEND_DATETIME_E: '20241231',
+  }
+}

법인카드 (creditcard)

BillApproveList.vue

법인카드 청구 승인 목록 페이지입니다.

주요 기능:

  • 법인카드 청구 내역 조회
  • 승인 처리

교육 (education)

EtEduRequest.vue

교육 신청 페이지입니다.

주요 기능:

  • 교육 신청
  • 교육 이력 조회

평가 (estimation)

EbAdminEstimationStatistics.vue

평가 통계 페이지입니다.

주요 기능:

  • 평가 통계 조회
  • 관리자용 평가 현황

공통 패턴

API 호출 패턴

ESS 모듈의 대부분의 컴포넌트는 다음과 같은 패턴으로 API를 호출합니다:

javascript
const url = '/api/direct/call/atomic'
+const paramObj = {
+  V_P_WORK_TYPE: 'Q',
+  V_P_LANG_ID: sessionStore.getSessionValue('LangID'),
+  V_P_COMP_CODE: sessionStore.getSessionValue('CompCode'),
+  V_P_EMP_CODE: sessionStore.getSessionValue('EmpCode'),
+  V_P_USERID: sessionStore.getSessionValue('UserID'),
+  V_P_PC: sessionStore.getSessionValue('ipAddress'),
+}
+
+const param = {
+  procedure: 'PROCEDURE_NAME',
+  params: paramObj,
+}
+
+const response = await axiosInstance.post(url, param)

세션 정보 사용

ESS 모듈에서는 sessionStore를 통해 세션 정보를 가져옵니다:

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
+
+const sessionStore = useSessionStore()
+
+// 세션 값 가져오기
+const compCode = sessionStore.getSessionValue('CompCode')
+const empCode = sessionStore.getSessionValue('EmpCode')
+const langID = sessionStore.getSessionValue('LangID')

관련 문서

`,56)]))}const g=i(e,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_views_ess.md.Bky9Z1_w.lean.js b/assets/project-structure_views_ess.md.Bky9Z1_w.lean.js new file mode 100644 index 0000000..d18afd4 --- /dev/null +++ b/assets/project-structure_views_ess.md.Bky9Z1_w.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"ESS 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/ess.md","filePath":"project-structure/views/ess.md"}'),e={name:"project-structure/views/ess.md"};function t(p,s,h,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",56)]))}const g=i(e,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_views_ess.md.CKvjNUw3.js b/assets/project-structure_views_ess.md.CKvjNUw3.js deleted file mode 100644 index 05adec1..0000000 --- a/assets/project-structure_views_ess.md.CKvjNUw3.js +++ /dev/null @@ -1,78 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"ESS 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/ess.md","filePath":"project-structure/views/ess.md"}'),e={name:"project-structure/views/ess.md"};function t(p,s,h,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

ESS 모듈 뷰 컴포넌트

개요

ESS(Employee Self Service) 모듈은 직원이 직접 사용하는 자가 서비스 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/ess/
-├── admin/                     # 관리자 기능
-│   ├── AdminTest.vue
-│   └── AsSMSManagement.vue    # SMS 관리
-├── creditcard/                # 법인카드 관련
-│   └── BillApproveList.vue
-├── education/                 # 교육 관련
-│   └── EtEduRequest.vue
-├── estimation/                # 평가 관련
-│   └── EbAdminEstimationStatistics.vue
-└── persadm/                   # 인사 관리
-    ├── PaAttendanceRequest.vue           # 근태 신청 및 조회
-    ├── PcBillReqHipass.vue               # 하이패스 청구 요청
-    ├── PcBillReqHipass2.vue
-    ├── PcBillReqHipass_popup.vue
-    ├── PcBillReqHipassApproval.vue       # 하이패스 청구 승인
-    ├── PcBillReqHipassApprovalCancel.vue # 하이패스 청구 승인 취소
-    ├── PiMyPersonnelInformation.vue      # 본인 인사 정보
-    └── PoOrganizationChart.vue            # 조직도

주요 컴포넌트

인사 관리 (persadm)

PaAttendanceRequest.vue

근태 신청 및 조회 페이지입니다.

주요 기능:

  • 근태 신청
  • 근태 조회
  • 사업장, 부서, 사원별 필터링

사용 예제:

vue
<template>
-  <PaAttendanceRequest />
-</template>

PiMyPersonnelInformation.vue

본인 인사 정보 조회 페이지입니다.

주요 기능:

  • 기본 인사 정보 조회
  • 교육 이력 조회
  • 자격증 정보 조회
  • 외부 활동 이력 조회
  • 보상 정보 조회
  • 발령 정보 조회
  • 교육 이수 정보 조회
  • 경력 이력 조회
  • 평가 이력 조회

API 호출:

javascript
const param = {
-  procedure: "P_HRESS1300_Q",
-  params: {
-    V_P_WORK_TYPE: "ESS",
-    V_P_LANG_ID: sessionStore.getSessionValue('LangID'),
-    V_P_COMP_CODE: sessionStore.getSessionValue('CompCode'),
-    V_P_EMP_CODE: sessionStore.getSessionValue('EmpCode'),
-  }
-}

PoOrganizationChart.vue

조직도 페이지입니다.

주요 기능:

  • 조직 구조 시각화
  • 부서별 직원 조회

관리자 기능 (admin)

AsSMSManagement.vue

SMS 발송 및 관리 페이지입니다.

주요 기능:

  • SMS 발송
  • SMS 템플릿 관리
  • 발송 내역 조회
  • 부서/사원별 대상 선택

사용 예제:

vue
<template>
-  <AsSMSManagement 
-    :pemenu="menuId"
-    :nvmenu="menuName"
-    :msgKtStel="sendTelNo"
-  />
-</template>

API 호출:

javascript
// SMS 발송
-const param = {
-  procedure: 'P_SYSMESSAGESEND_S',
-  params: {
-    msg_type: 'SMS',
-    rev_type: 'DEPT',
-    msg_cont: '메시지 내용',
-    send_tel: '010-1234-5678',
-  }
-}
-
-// 발송 내역 조회
-const param = {
-  procedure: 'P_SYSMESSAGESEND_Q',
-  params: {
-    V_P_WORK_TYPE: 'Q',
-    V_P_MSG_TYPE: '',
-    V_P_MSG_STATE: '',
-    V_P_SEND_DATETIME_S: '20240101',
-    V_P_SEND_DATETIME_E: '20241231',
-  }
-}

법인카드 (creditcard)

BillApproveList.vue

법인카드 청구 승인 목록 페이지입니다.

주요 기능:

  • 법인카드 청구 내역 조회
  • 승인 처리

교육 (education)

EtEduRequest.vue

교육 신청 페이지입니다.

주요 기능:

  • 교육 신청
  • 교육 이력 조회

평가 (estimation)

EbAdminEstimationStatistics.vue

평가 통계 페이지입니다.

주요 기능:

  • 평가 통계 조회
  • 관리자용 평가 현황

공통 패턴

API 호출 패턴

ESS 모듈의 대부분의 컴포넌트는 다음과 같은 패턴으로 API를 호출합니다:

javascript
const url = '/api/direct/call/atomic'
-const paramObj = {
-  V_P_WORK_TYPE: 'Q',
-  V_P_LANG_ID: sessionStore.getSessionValue('LangID'),
-  V_P_COMP_CODE: sessionStore.getSessionValue('CompCode'),
-  V_P_EMP_CODE: sessionStore.getSessionValue('EmpCode'),
-  V_P_USERID: sessionStore.getSessionValue('UserID'),
-  V_P_PC: sessionStore.getSessionValue('ipAddress'),
-}
-
-const param = {
-  procedure: 'PROCEDURE_NAME',
-  params: paramObj,
-}
-
-const response = await axiosInstance.post(url, param)

세션 정보 사용

ESS 모듈에서는 sessionStore를 통해 세션 정보를 가져옵니다:

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
-
-const sessionStore = useSessionStore()
-
-// 세션 값 가져오기
-const compCode = sessionStore.getSessionValue('CompCode')
-const empCode = sessionStore.getSessionValue('EmpCode')
-const langID = sessionStore.getSessionValue('LangID')

관련 문서

`,56)]))}const g=i(e,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_views_ess.md.CKvjNUw3.lean.js b/assets/project-structure_views_ess.md.CKvjNUw3.lean.js deleted file mode 100644 index 6d2c74e..0000000 --- a/assets/project-structure_views_ess.md.CKvjNUw3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"ESS 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/ess.md","filePath":"project-structure/views/ess.md"}'),e={name:"project-structure/views/ess.md"};function t(p,s,h,k,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",56)]))}const g=i(e,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_views_fcm.md.BtECMXU9.js b/assets/project-structure_views_fcm.md.BtECMXU9.js new file mode 100644 index 0000000..4cd8843 --- /dev/null +++ b/assets/project-structure_views_fcm.md.BtECMXU9.js @@ -0,0 +1,76 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"FCM 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/fcm.md","filePath":"project-structure/views/fcm.md"}'),h={name:"project-structure/views/fcm.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

FCM 모듈 뷰 컴포넌트

개요

FCM 모듈은 재무 및 회계 관련 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/fcm/
+├── erp/                       # ERP 관련 기능
+│   └── sys/                   # 시스템 관리
+│       ├── sys1200.vue
+│       ├── sys1710.vue
+│       └── sys5300.vue
+└── hr/                        # 인사 관리
+    └── hri/                   # 인사 정보
+        ├── Hri1000.vue        # 인사 정보 관리
+        ├── Hri1000TabContents.vue
+        └── hri5100.vue

주요 컴포넌트

ERP 모듈 (erp/sys)

sys1200.vue

시스템 관리 페이지입니다.

주요 기능:

  • 시스템 설정 관리

sys1710.vue

시스템 관리 페이지입니다.

주요 기능:

  • 시스템 설정 관리

sys5300.vue

시스템 관리 페이지입니다.

주요 기능:

  • 시스템 설정 관리

HR 모듈 (hr/hri)

Hri1000.vue

인사 정보 관리 페이지입니다.

주요 기능:

  • 사원 정보 조회
  • 사원 정보 등록/수정
  • 부서별 사원 조회
  • 사업장, 재직구분, 직군, 성별 필터링

검색 조건:

  • 사업장
  • 재직구분
  • 직군
  • 성별
  • 부서
  • 사원

사용 예제:

vue
<template>
+  <Hri1000 />
+</template>

API 호출 패턴:

javascript
const url = '/api/direct/call/atomic'
+const paramObj = {
+  V_P_WORK_TYPE: 'Q',
+  V_P_LANG_ID: sessionStore.getSessionValue('LangID'),
+  V_P_COMP_CODE: sessionStore.getSessionValue('CompCode'),
+  V_P_SITE_CODE: searchData.SRCH_SITE_CODE,
+  V_P_EMP_STATE: searchData.SRCH_EMP_STATE,
+  V_P_JOB_GROUP: searchData.SRCH_JOB_GROUP,
+  V_P_GENDER: searchData.SRCH_GENDER,
+  V_P_DEPT_CODE: searchData.SRCH_DEPT_CODE,
+  V_P_EMP_CODE: searchData.SRCH_EMP_CODE,
+}
+
+const param = {
+  procedure: 'P_HRI1000_Q',
+  params: paramObj,
+}
+
+const response = await axiosInstance.post(url, param)

Hri1000TabContents.vue

Hri1000 페이지의 탭 컨텐츠 컴포넌트입니다.

주요 기능:

  • 인사 정보 상세 탭
  • 부서 이력 탭
  • 급여 정보 탭

hri5100.vue

인사 정보 관리 페이지입니다.

주요 기능:

  • 인사 정보 조회 및 관리

공통 패턴

검색 폼 구조

FCM 모듈의 대부분의 컴포넌트는 다음과 같은 검색 폼 구조를 사용합니다:

vue
<template>
+  <table id="srchArea" class="custom-table">
+    <colgroup>
+      <col style="width: 8%">
+      <col style="width: 7%">
+      <!-- ... -->
+    </colgroup>
+    <tbody>
+      <tr>
+        <th scope="row">사업장</th>
+        <td>
+          <SelectBoxSQL
+            v-model="searchData.SRCH_SITE_CODE"
+            v-bind="jsonSiteCode"
+          />
+        </td>
+        <!-- ... -->
+      </tr>
+    </tbody>
+  </table>
+</template>

그리드 사용

AG Grid를 사용하여 데이터를 표시합니다:

vue
<template>
+  <AgGridVue
+    id="gridData"
+    class="ag-theme-balham"
+    :columnDefs="gridData.columns"
+    :rowData="gridData.rows"
+    @grid-ready="onGridReady"
+  />
+</template>
+
+<script setup>
+import { AgGridVue } from 'ag-grid-vue3'
+
+const gridData = reactive({
+  columns: [
+    { field: 'empCode', headerName: '사원코드' },
+    { field: 'empName', headerName: '사원명' },
+  ],
+  rows: [],
+})
+
+let gridApi = null
+const onGridReady = (params) => {
+  gridApi = params.api
+}
+</script>

관련 문서

`,47)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/project-structure_views_fcm.md.BtECMXU9.lean.js b/assets/project-structure_views_fcm.md.BtECMXU9.lean.js new file mode 100644 index 0000000..2426c16 --- /dev/null +++ b/assets/project-structure_views_fcm.md.BtECMXU9.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"FCM 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/fcm.md","filePath":"project-structure/views/fcm.md"}'),h={name:"project-structure/views/fcm.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",47)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/project-structure_views_fcm.md.CuW7jApc.js b/assets/project-structure_views_fcm.md.CuW7jApc.js deleted file mode 100644 index 5fde9da..0000000 --- a/assets/project-structure_views_fcm.md.CuW7jApc.js +++ /dev/null @@ -1,76 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"FCM 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/fcm.md","filePath":"project-structure/views/fcm.md"}'),h={name:"project-structure/views/fcm.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

FCM 모듈 뷰 컴포넌트

개요

FCM 모듈은 재무 및 회계 관련 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/fcm/
-├── erp/                       # ERP 관련 기능
-│   └── sys/                   # 시스템 관리
-│       ├── sys1200.vue
-│       ├── sys1710.vue
-│       └── sys5300.vue
-└── hr/                        # 인사 관리
-    └── hri/                   # 인사 정보
-        ├── Hri1000.vue        # 인사 정보 관리
-        ├── Hri1000TabContents.vue
-        └── hri5100.vue

주요 컴포넌트

ERP 모듈 (erp/sys)

sys1200.vue

시스템 관리 페이지입니다.

주요 기능:

  • 시스템 설정 관리

sys1710.vue

시스템 관리 페이지입니다.

주요 기능:

  • 시스템 설정 관리

sys5300.vue

시스템 관리 페이지입니다.

주요 기능:

  • 시스템 설정 관리

HR 모듈 (hr/hri)

Hri1000.vue

인사 정보 관리 페이지입니다.

주요 기능:

  • 사원 정보 조회
  • 사원 정보 등록/수정
  • 부서별 사원 조회
  • 사업장, 재직구분, 직군, 성별 필터링

검색 조건:

  • 사업장
  • 재직구분
  • 직군
  • 성별
  • 부서
  • 사원

사용 예제:

vue
<template>
-  <Hri1000 />
-</template>

API 호출 패턴:

javascript
const url = '/api/direct/call/atomic'
-const paramObj = {
-  V_P_WORK_TYPE: 'Q',
-  V_P_LANG_ID: sessionStore.getSessionValue('LangID'),
-  V_P_COMP_CODE: sessionStore.getSessionValue('CompCode'),
-  V_P_SITE_CODE: searchData.SRCH_SITE_CODE,
-  V_P_EMP_STATE: searchData.SRCH_EMP_STATE,
-  V_P_JOB_GROUP: searchData.SRCH_JOB_GROUP,
-  V_P_GENDER: searchData.SRCH_GENDER,
-  V_P_DEPT_CODE: searchData.SRCH_DEPT_CODE,
-  V_P_EMP_CODE: searchData.SRCH_EMP_CODE,
-}
-
-const param = {
-  procedure: 'P_HRI1000_Q',
-  params: paramObj,
-}
-
-const response = await axiosInstance.post(url, param)

Hri1000TabContents.vue

Hri1000 페이지의 탭 컨텐츠 컴포넌트입니다.

주요 기능:

  • 인사 정보 상세 탭
  • 부서 이력 탭
  • 급여 정보 탭

hri5100.vue

인사 정보 관리 페이지입니다.

주요 기능:

  • 인사 정보 조회 및 관리

공통 패턴

검색 폼 구조

FCM 모듈의 대부분의 컴포넌트는 다음과 같은 검색 폼 구조를 사용합니다:

vue
<template>
-  <table id="srchArea" class="custom-table">
-    <colgroup>
-      <col style="width: 8%">
-      <col style="width: 7%">
-      <!-- ... -->
-    </colgroup>
-    <tbody>
-      <tr>
-        <th scope="row">사업장</th>
-        <td>
-          <SelectBoxSQL
-            v-model="searchData.SRCH_SITE_CODE"
-            v-bind="jsonSiteCode"
-          />
-        </td>
-        <!-- ... -->
-      </tr>
-    </tbody>
-  </table>
-</template>

그리드 사용

AG Grid를 사용하여 데이터를 표시합니다:

vue
<template>
-  <AgGridVue
-    id="gridData"
-    class="ag-theme-balham"
-    :columnDefs="gridData.columns"
-    :rowData="gridData.rows"
-    @grid-ready="onGridReady"
-  />
-</template>
-
-<script setup>
-import { AgGridVue } from 'ag-grid-vue3'
-
-const gridData = reactive({
-  columns: [
-    { field: 'empCode', headerName: '사원코드' },
-    { field: 'empName', headerName: '사원명' },
-  ],
-  rows: [],
-})
-
-let gridApi = null
-const onGridReady = (params) => {
-  gridApi = params.api
-}
-</script>

관련 문서

`,47)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/project-structure_views_fcm.md.CuW7jApc.lean.js b/assets/project-structure_views_fcm.md.CuW7jApc.lean.js deleted file mode 100644 index da47d95..0000000 --- a/assets/project-structure_views_fcm.md.CuW7jApc.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"FCM 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/fcm.md","filePath":"project-structure/views/fcm.md"}'),h={name:"project-structure/views/fcm.md"};function t(p,s,k,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",47)]))}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/assets/project-structure_views_geosan.md.CLPwdS3z.js b/assets/project-structure_views_geosan.md.CLPwdS3z.js deleted file mode 100644 index 17b62df..0000000 --- a/assets/project-structure_views_geosan.md.CLPwdS3z.js +++ /dev/null @@ -1,68 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"geosan 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/geosan.md","filePath":"project-structure/views/geosan.md"}'),l={name:"project-structure/views/geosan.md"};function e(p,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

geosan 모듈 뷰 컴포넌트

개요

geosan 모듈은 비즈니스 인텔리전스(BI) 관련 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/geosan/
-└── BI/                        # 비즈니스 인텔리전스
-    └── Customer/              # 고객 관리
-        ├── CustomerGrpList.vue        # 고객 그룹 목록
-        ├── CustomerGrpListData.js     # 고객 그룹 목록 데이터
-        ├── CustomerGrpPop.vue         # 고객 그룹 팝업
-        ├── CustomerList.vue           # 고객 목록
-        ├── CustomerListData.js         # 고객 목록 데이터
-        └── CustomerListPop.vue         # 고객 목록 팝업

주요 컴포넌트

고객 관리 (BI/Customer)

CustomerList.vue

고객 목록 조회 및 관리 페이지입니다.

주요 기능:

  • 고객 목록 조회
  • 거래처명, 점포코드, 거래처코드(SERP) 검색
  • 거래구분, 그룹구분, 거래처유형 필터링
  • 자동등록유무, 사용유무 필터링
  • AG Grid를 사용한 데이터 표시

검색 조건:

  • 거래처명 (cust_nm_sc)
  • 점포코드 (jum_cd_sc)
  • 거래처코드(SERP) (serp_cust_cd_sc)
  • 거래구분 (deal_gb_sc)
  • 그룹구분 (grp_cd_sc)
  • 거래처유형 (deal_ty_sc)
  • 자동등록유무 (auto_reg_yn_sc)
  • 사용유무 (use_yn_sc)

사용 예제:

vue
<template>
-  <CustomerList />
-</template>

API 호출 패턴:

javascript
const url = '/api/direct/call/atomic'
-const paramObj = {
-  V_P_WORK_TYPE: 'Q',
-  V_P_LANG_ID: sessionStore.getSessionValue('LangID'),
-  V_P_COMP_CODE: sessionStore.getSessionValue('CompCode'),
-  V_P_CUST_NM: searchData.cust_nm_sc,
-  V_P_JUM_CD: searchData.jum_cd_sc,
-  V_P_SERP_CUST_CD: searchData.serp_cust_cd_sc,
-  V_P_DEAL_GB: searchData.deal_gb_sc,
-  V_P_GRP_CD: searchData.grp_cd_sc,
-  V_P_DEAL_TY: searchData.deal_ty_sc,
-  V_P_AUTO_REG_YN: searchData.auto_reg_yn_sc,
-  V_P_USE_YN: searchData.use_yn_sc,
-}
-
-const param = {
-  procedure: 'P_GEOSAN_CUSTOMER_Q',
-  params: paramObj,
-}
-
-const response = await axiosInstance.post(url, param)

CustomerGrpList.vue

고객 그룹 목록 조회 및 관리 페이지입니다.

주요 기능:

  • 고객 그룹 목록 조회
  • 고객 그룹 등록/수정/삭제

CustomerListPop.vue

고객 목록 팝업 컴포넌트입니다.

주요 기능:

  • 고객 선택 팝업
  • 고객 검색 및 선택

사용 예제:

vue
<template>
-  <CustomerListPop
-    v-model="selectedCustomer"
-    @select="handleCustomerSelect"
-  />
-</template>

CustomerGrpPop.vue

고객 그룹 팝업 컴포넌트입니다.

주요 기능:

  • 고객 그룹 선택 팝업
  • 고객 그룹 검색 및 선택

데이터 파일

CustomerListData.js

고객 목록 페이지의 그리드 컬럼 정의 및 초기 데이터를 관리합니다.

주요 내용:

  • AG Grid 컬럼 정의
  • 초기 검색 조건
  • 데이터 변환 함수

사용 예제:

javascript
import { customerListData } from '@/views/geosan/BI/Customer/CustomerListData.js'
-
-const gridData = reactive({
-  columns: customerListData.columns,
-  rows: [],
-})

CustomerGrpListData.js

고객 그룹 목록 페이지의 그리드 컬럼 정의 및 초기 데이터를 관리합니다.

공통 패턴

검색 폼 구조

geosan 모듈의 컴포넌트는 다음과 같은 검색 폼 구조를 사용합니다:

vue
<template>
-  <v-row no-gutters class="cu-find-bd">
-    <v-col cols="12">
-      <v-row class="align-items-center" no-gutters>
-        <label>거래처명</label>
-        <v-text-field
-          v-model="searchData.cust_nm_sc"
-          @keyup.enter="fnGetData"
-        />
-        <label>점포코드</label>
-        <v-text-field
-          v-model="searchData.jum_cd_sc"
-          @keyup.enter="fnGetData"
-        />
-        <!-- ... -->
-      </v-row>
-    </v-col>
-  </v-row>
-</template>

그리드 사용

AG Grid를 사용하여 데이터를 표시합니다:

vue
<template>
-  <AgGridVue
-    id="gridCustomerList"
-    class="ag-theme-balham"
-    :columnDefs="gridCustomerList.columns"
-    :rowData="gridCustomerList.rows"
-    @grid-ready="onGridReady"
-    @row-clicked="onRowClicked"
-  />
-</template>

관련 문서

`,49)]))}const g=i(l,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_views_geosan.md.CLPwdS3z.lean.js b/assets/project-structure_views_geosan.md.CLPwdS3z.lean.js deleted file mode 100644 index 01b15b6..0000000 --- a/assets/project-structure_views_geosan.md.CLPwdS3z.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"geosan 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/geosan.md","filePath":"project-structure/views/geosan.md"}'),l={name:"project-structure/views/geosan.md"};function e(p,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",49)]))}const g=i(l,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_views_geosan.md.MInucDlz.js b/assets/project-structure_views_geosan.md.MInucDlz.js new file mode 100644 index 0000000..8117339 --- /dev/null +++ b/assets/project-structure_views_geosan.md.MInucDlz.js @@ -0,0 +1,68 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"geosan 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/geosan.md","filePath":"project-structure/views/geosan.md"}'),l={name:"project-structure/views/geosan.md"};function e(p,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

geosan 모듈 뷰 컴포넌트

개요

geosan 모듈은 비즈니스 인텔리전스(BI) 관련 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/geosan/
+└── BI/                        # 비즈니스 인텔리전스
+    └── Customer/              # 고객 관리
+        ├── CustomerGrpList.vue        # 고객 그룹 목록
+        ├── CustomerGrpListData.js     # 고객 그룹 목록 데이터
+        ├── CustomerGrpPop.vue         # 고객 그룹 팝업
+        ├── CustomerList.vue           # 고객 목록
+        ├── CustomerListData.js         # 고객 목록 데이터
+        └── CustomerListPop.vue         # 고객 목록 팝업

주요 컴포넌트

고객 관리 (BI/Customer)

CustomerList.vue

고객 목록 조회 및 관리 페이지입니다.

주요 기능:

  • 고객 목록 조회
  • 거래처명, 점포코드, 거래처코드(SERP) 검색
  • 거래구분, 그룹구분, 거래처유형 필터링
  • 자동등록유무, 사용유무 필터링
  • AG Grid를 사용한 데이터 표시

검색 조건:

  • 거래처명 (cust_nm_sc)
  • 점포코드 (jum_cd_sc)
  • 거래처코드(SERP) (serp_cust_cd_sc)
  • 거래구분 (deal_gb_sc)
  • 그룹구분 (grp_cd_sc)
  • 거래처유형 (deal_ty_sc)
  • 자동등록유무 (auto_reg_yn_sc)
  • 사용유무 (use_yn_sc)

사용 예제:

vue
<template>
+  <CustomerList />
+</template>

API 호출 패턴:

javascript
const url = '/api/direct/call/atomic'
+const paramObj = {
+  V_P_WORK_TYPE: 'Q',
+  V_P_LANG_ID: sessionStore.getSessionValue('LangID'),
+  V_P_COMP_CODE: sessionStore.getSessionValue('CompCode'),
+  V_P_CUST_NM: searchData.cust_nm_sc,
+  V_P_JUM_CD: searchData.jum_cd_sc,
+  V_P_SERP_CUST_CD: searchData.serp_cust_cd_sc,
+  V_P_DEAL_GB: searchData.deal_gb_sc,
+  V_P_GRP_CD: searchData.grp_cd_sc,
+  V_P_DEAL_TY: searchData.deal_ty_sc,
+  V_P_AUTO_REG_YN: searchData.auto_reg_yn_sc,
+  V_P_USE_YN: searchData.use_yn_sc,
+}
+
+const param = {
+  procedure: 'P_GEOSAN_CUSTOMER_Q',
+  params: paramObj,
+}
+
+const response = await axiosInstance.post(url, param)

CustomerGrpList.vue

고객 그룹 목록 조회 및 관리 페이지입니다.

주요 기능:

  • 고객 그룹 목록 조회
  • 고객 그룹 등록/수정/삭제

CustomerListPop.vue

고객 목록 팝업 컴포넌트입니다.

주요 기능:

  • 고객 선택 팝업
  • 고객 검색 및 선택

사용 예제:

vue
<template>
+  <CustomerListPop
+    v-model="selectedCustomer"
+    @select="handleCustomerSelect"
+  />
+</template>

CustomerGrpPop.vue

고객 그룹 팝업 컴포넌트입니다.

주요 기능:

  • 고객 그룹 선택 팝업
  • 고객 그룹 검색 및 선택

데이터 파일

CustomerListData.js

고객 목록 페이지의 그리드 컬럼 정의 및 초기 데이터를 관리합니다.

주요 내용:

  • AG Grid 컬럼 정의
  • 초기 검색 조건
  • 데이터 변환 함수

사용 예제:

javascript
import { customerListData } from '@/views/geosan/BI/Customer/CustomerListData.js'
+
+const gridData = reactive({
+  columns: customerListData.columns,
+  rows: [],
+})

CustomerGrpListData.js

고객 그룹 목록 페이지의 그리드 컬럼 정의 및 초기 데이터를 관리합니다.

공통 패턴

검색 폼 구조

geosan 모듈의 컴포넌트는 다음과 같은 검색 폼 구조를 사용합니다:

vue
<template>
+  <v-row no-gutters class="cu-find-bd">
+    <v-col cols="12">
+      <v-row class="align-items-center" no-gutters>
+        <label>거래처명</label>
+        <v-text-field
+          v-model="searchData.cust_nm_sc"
+          @keyup.enter="fnGetData"
+        />
+        <label>점포코드</label>
+        <v-text-field
+          v-model="searchData.jum_cd_sc"
+          @keyup.enter="fnGetData"
+        />
+        <!-- ... -->
+      </v-row>
+    </v-col>
+  </v-row>
+</template>

그리드 사용

AG Grid를 사용하여 데이터를 표시합니다:

vue
<template>
+  <AgGridVue
+    id="gridCustomerList"
+    class="ag-theme-balham"
+    :columnDefs="gridCustomerList.columns"
+    :rowData="gridCustomerList.rows"
+    @grid-ready="onGridReady"
+    @row-clicked="onRowClicked"
+  />
+</template>

관련 문서

`,49)]))}const g=i(l,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_views_geosan.md.MInucDlz.lean.js b/assets/project-structure_views_geosan.md.MInucDlz.lean.js new file mode 100644 index 0000000..b0e2dbe --- /dev/null +++ b/assets/project-structure_views_geosan.md.MInucDlz.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"geosan 모듈 뷰 컴포넌트","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/geosan.md","filePath":"project-structure/views/geosan.md"}'),l={name:"project-structure/views/geosan.md"};function e(p,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[t("",49)]))}const g=i(l,[["render",e]]);export{o as __pageData,g as default}; diff --git a/assets/project-structure_views_ui.md.COcOBemw.js b/assets/project-structure_views_ui.md.COcOBemw.js new file mode 100644 index 0000000..86a90e3 --- /dev/null +++ b/assets/project-structure_views_ui.md.COcOBemw.js @@ -0,0 +1,105 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"UI 컴포넌트 및 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/ui.md","filePath":"project-structure/views/ui.md"}'),l={name:"project-structure/views/ui.md"};function p(t,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[e(`

UI 컴포넌트 및 레이아웃

개요

src/views/ui/ 디렉토리는 프로젝트 전반에서 사용되는 공통 UI 컴포넌트와 레이아웃 컴포넌트를 포함합니다.

디렉토리 구조

src/views/ui/
+├── components/                # 공통 컴포넌트
+│   ├── common/               # 기본 컴포넌트
+│   │   ├── button/
+│   │   │   └── ButtonBox.vue
+│   │   ├── input/
+│   │   │   └── InputPhone.vue
+│   │   ├── Loading.vue
+│   │   ├── lookup/
+│   │   │   └── LookUpBox.vue
+│   │   ├── select/
+│   │   │   ├── MultiSelectBoxSQL.vue
+│   │   │   ├── SelectBoxDate.vue
+│   │   │   └── SelectBoxSQL.vue
+│   │   └── tree/
+│   │       ├── TreeDeptDropdown.vue
+│   │       ├── TreeEmpDropdown.vue
+│   │       └── TreeOrgNode.vue
+│   ├── error/                # 에러 컴포넌트
+│   │   └── ErrorHeader.vue
+│   ├── grid/                 # 그리드 컴포넌트
+│   │   ├── GridClickField.vue
+│   │   ├── GridContextMenu.vue
+│   │   └── GridMultiSelectWrapper.vue
+│   ├── main/                 # 메인 컴포넌트
+│   │   └── MainHeader.vue
+│   ├── menu/                 # 메뉴 컴포넌트
+│   │   ├── MenuBmk.vue
+│   │   ├── MenuHeaderBar.vue
+│   │   └── MenuSideBar.vue
+│   └── popup/                # 팝업 컴포넌트
+│       ├── PopupApproval.vue
+│       ├── PopupApprovalBox.vue
+│       ├── PopupApproveList.vue
+│       ├── PopupFileLink.vue
+│       ├── PopupLog.vue
+│       ├── PopupPageLog.vue
+│       └── PopupSmsTemplateList.vue
+├── layouts/                  # 레이아웃 컴포넌트
+│   ├── blank.vue             # 빈 레이아웃 (로그인 등)
+│   ├── default.vue           # 기본 레이아웃
+│   ├── popBlank.vue          # 팝업 레이아웃
+│   └── components/           # 레이아웃 하위 컴포넌트
+│       ├── DefaultLayoutWithVerticalNav.vue
+│       ├── Footer.vue
+│       ├── NavbarThemeSwitcher.vue
+│       ├── NavItems.vue
+│       └── UserProfile.vue
+└── UpgradeToPro.vue         # 업그레이드 컴포넌트

공통 컴포넌트 (components/common)

버튼 컴포넌트

ButtonBox.vue

공통 버튼 컴포넌트입니다.

사용 예제:

vue
<template>
+  <ButtonBox
+    text="저장"
+    color="primary"
+    @click="handleSave"
+  />
+</template>

입력 컴포넌트

InputPhone.vue

전화번호 입력 컴포넌트입니다.

주요 기능:

  • 전화번호 형식 자동 포맷팅
  • 유효성 검증

사용 예제:

vue
<template>
+  <InputPhone
+    v-model="phoneNumber"
+    placeholder="010-1234-5678"
+  />
+</template>

로딩 컴포넌트

Loading.vue

전역 로딩 인디케이터 컴포넌트입니다.

사용 방법: 로딩 스토어를 통해 자동으로 표시/숨김 처리됩니다.

javascript
import { useLoadingStore } from '@/utils/stores/loadingStore.js'
+
+const loadingStore = useLoadingStore()
+loadingStore.showLoading()  // 로딩 표시
+loadingStore.hideLoading()  // 로딩 숨김

조회 컴포넌트 (lookup)

LookUpBox.vue

데이터 조회 및 선택 컴포넌트입니다.

주요 기능:

  • 팝업을 통한 데이터 조회
  • 다중 선택 지원
  • 검색 기능

사용 예제:

vue
<template>
+  <LookUpBox
+    v-model="selectedData"
+    :url="'/api/direct/call/atomic'"
+    :procedure="'P_LOOKUP_Q'"
+    @select="handleSelect"
+  />
+</template>

선택 컴포넌트 (select)

SelectBoxSQL.vue

SQL 기반 선택 박스 컴포넌트입니다.

주요 기능:

  • 비즈니스 컴포넌트 ID를 통한 데이터 조회
  • 동적 옵션 로딩

사용 예제:

vue
<template>
+  <SelectBoxSQL
+    v-model="selectedValue"
+    v-bind="jsonData"
+  />
+</template>
+
+<script setup>
+const jsonData = reactive({
+  bizcompId: 'BIZCOMP_ID',
+  whereClause: '',
+  compCode: '1000',
+})
+</script>

SelectBoxDate.vue

날짜 선택 컴포넌트입니다.

주요 기능:

  • 날짜 범위 선택
  • 날짜 형식 지정

사용 예제:

vue
<template>
+  <SelectBoxDate
+    v-model="selectedDate"
+    format="YYYY-MM-DD"
+  />
+</template>

MultiSelectBoxSQL.vue

다중 선택 박스 컴포넌트입니다.

주요 기능:

  • 여러 항목 선택
  • SQL 기반 데이터 로딩

트리 컴포넌트 (tree)

TreeDeptDropdown.vue

부서 트리 드롭다운 컴포넌트입니다.

주요 기능:

  • 계층적 부서 구조 표시
  • 부서 선택

사용 예제:

vue
<template>
+  <TreeDeptDropdown
+    v-model="selectedDept"
+    @select="handleDeptSelect"
+  />
+</template>

TreeEmpDropdown.vue

사원 트리 드롭다운 컴포넌트입니다.

주요 기능:

  • 부서별 사원 구조 표시
  • 사원 선택

TreeOrgNode.vue

조직 노드 컴포넌트입니다.

주요 기능:

  • 조직 구조 노드 렌더링
  • 확장/축소 기능

그리드 컴포넌트 (components/grid)

GridClickField.vue

그리드 클릭 필드 컴포넌트입니다.

주요 기능:

  • 그리드 셀 클릭 이벤트 처리
  • 필드별 커스텀 동작

GridContextMenu.vue

그리드 컨텍스트 메뉴 컴포넌트입니다.

주요 기능:

  • 우클릭 메뉴 표시
  • 행별 작업 메뉴

사용 예제:

vue
<template>
+  <grid-context-menu />
+</template>

GridMultiSelectWrapper.vue

멀티 선택 그리드 래퍼 컴포넌트입니다.

주요 기능:

  • 다중 행 선택
  • 선택된 행 관리

메뉴 컴포넌트 (components/menu)

사이드바 메뉴 컴포넌트입니다.

주요 기능:

  • 계층적 메뉴 구조 표시
  • 메뉴 네비게이션
  • 메뉴 접기/펼치기

메뉴 헤더바 컴포넌트입니다.

주요 기능:

  • 현재 메뉴 경로 표시
  • 북마크 기능

북마크 메뉴 컴포넌트입니다.

주요 기능:

  • 자주 사용하는 메뉴 북마크
  • 빠른 접근

팝업 컴포넌트 (components/popup)

PopupApproval.vue

승인 팝업 컴포넌트입니다.

주요 기능:

  • 결재 승인/반려
  • 결재 이력 조회

PopupApproveList.vue

승인 목록 팝업 컴포넌트입니다.

주요 기능:

  • 결재 목록 조회
  • 결재 상태 확인

파일 링크 팝업 컴포넌트입니다.

주요 기능:

  • 첨부 파일 목록 표시
  • 파일 다운로드

PopupLog.vue

로그 팝업 컴포넌트입니다.

주요 기능:

  • API 호출 로그 표시
  • 로그 상세 정보

PopupPageLog.vue

페이지 로그 팝업 컴포넌트입니다.

주요 기능:

  • 페이지 접근 로그 조회
  • 사용자별 접근 이력

API 호출:

javascript
const param = {
+  procedure: 'P_SYSNEWESSLOG_Q',
+  params: {
+    V_P_WORK_TYPE: 'Q',
+    V_P_AC_DATETIME_S: '',
+    V_P_AC_DATETIME_E: '',
+    V_P_AC_EMP_CODE: empCode,
+    V_P_AC_MENU_NAME: '',
+  }
+}

PopupSmsTemplateList.vue

SMS 템플릿 목록 팝업 컴포넌트입니다.

주요 기능:

  • SMS 템플릿 목록 조회
  • 템플릿 선택

레이아웃 컴포넌트 (layouts)

blank.vue

빈 레이아웃입니다. 로그인 페이지 등에서 사용됩니다.

주요 특징:

  • 최소한의 레이아웃
  • 헤더/푸터 없음

default.vue

기본 레이아웃입니다. 대부분의 페이지에서 사용됩니다.

주요 특징:

  • 사이드바 메뉴
  • 헤더바
  • 탭 기능
  • 컨텐츠 영역

popBlank.vue

팝업 레이아웃입니다. 팝업 창에서 사용됩니다.

주요 특징:

  • 팝업 전용 레이아웃
  • 모달 스타일

관련 문서

`,132)]))}const E=a(l,[["render",p]]);export{u as __pageData,E as default}; diff --git a/assets/project-structure_views_ui.md.COcOBemw.lean.js b/assets/project-structure_views_ui.md.COcOBemw.lean.js new file mode 100644 index 0000000..58f8172 --- /dev/null +++ b/assets/project-structure_views_ui.md.COcOBemw.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"UI 컴포넌트 및 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/ui.md","filePath":"project-structure/views/ui.md"}'),l={name:"project-structure/views/ui.md"};function p(t,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[e("",132)]))}const E=a(l,[["render",p]]);export{u as __pageData,E as default}; diff --git a/assets/project-structure_views_ui.md.DNuswPXA.js b/assets/project-structure_views_ui.md.DNuswPXA.js deleted file mode 100644 index 28bc306..0000000 --- a/assets/project-structure_views_ui.md.DNuswPXA.js +++ /dev/null @@ -1,105 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"UI 컴포넌트 및 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/ui.md","filePath":"project-structure/views/ui.md"}'),l={name:"project-structure/views/ui.md"};function p(t,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[e(`

UI 컴포넌트 및 레이아웃

개요

src/views/ui/ 디렉토리는 프로젝트 전반에서 사용되는 공통 UI 컴포넌트와 레이아웃 컴포넌트를 포함합니다.

디렉토리 구조

src/views/ui/
-├── components/                # 공통 컴포넌트
-│   ├── common/               # 기본 컴포넌트
-│   │   ├── button/
-│   │   │   └── ButtonBox.vue
-│   │   ├── input/
-│   │   │   └── InputPhone.vue
-│   │   ├── Loading.vue
-│   │   ├── lookup/
-│   │   │   └── LookUpBox.vue
-│   │   ├── select/
-│   │   │   ├── MultiSelectBoxSQL.vue
-│   │   │   ├── SelectBoxDate.vue
-│   │   │   └── SelectBoxSQL.vue
-│   │   └── tree/
-│   │       ├── TreeDeptDropdown.vue
-│   │       ├── TreeEmpDropdown.vue
-│   │       └── TreeOrgNode.vue
-│   ├── error/                # 에러 컴포넌트
-│   │   └── ErrorHeader.vue
-│   ├── grid/                 # 그리드 컴포넌트
-│   │   ├── GridClickField.vue
-│   │   ├── GridContextMenu.vue
-│   │   └── GridMultiSelectWrapper.vue
-│   ├── main/                 # 메인 컴포넌트
-│   │   └── MainHeader.vue
-│   ├── menu/                 # 메뉴 컴포넌트
-│   │   ├── MenuBmk.vue
-│   │   ├── MenuHeaderBar.vue
-│   │   └── MenuSideBar.vue
-│   └── popup/                # 팝업 컴포넌트
-│       ├── PopupApproval.vue
-│       ├── PopupApprovalBox.vue
-│       ├── PopupApproveList.vue
-│       ├── PopupFileLink.vue
-│       ├── PopupLog.vue
-│       ├── PopupPageLog.vue
-│       └── PopupSmsTemplateList.vue
-├── layouts/                  # 레이아웃 컴포넌트
-│   ├── blank.vue             # 빈 레이아웃 (로그인 등)
-│   ├── default.vue           # 기본 레이아웃
-│   ├── popBlank.vue          # 팝업 레이아웃
-│   └── components/           # 레이아웃 하위 컴포넌트
-│       ├── DefaultLayoutWithVerticalNav.vue
-│       ├── Footer.vue
-│       ├── NavbarThemeSwitcher.vue
-│       ├── NavItems.vue
-│       └── UserProfile.vue
-└── UpgradeToPro.vue         # 업그레이드 컴포넌트

공통 컴포넌트 (components/common)

버튼 컴포넌트

ButtonBox.vue

공통 버튼 컴포넌트입니다.

사용 예제:

vue
<template>
-  <ButtonBox
-    text="저장"
-    color="primary"
-    @click="handleSave"
-  />
-</template>

입력 컴포넌트

InputPhone.vue

전화번호 입력 컴포넌트입니다.

주요 기능:

  • 전화번호 형식 자동 포맷팅
  • 유효성 검증

사용 예제:

vue
<template>
-  <InputPhone
-    v-model="phoneNumber"
-    placeholder="010-1234-5678"
-  />
-</template>

로딩 컴포넌트

Loading.vue

전역 로딩 인디케이터 컴포넌트입니다.

사용 방법: 로딩 스토어를 통해 자동으로 표시/숨김 처리됩니다.

javascript
import { useLoadingStore } from '@/utils/stores/loadingStore.js'
-
-const loadingStore = useLoadingStore()
-loadingStore.showLoading()  // 로딩 표시
-loadingStore.hideLoading()  // 로딩 숨김

조회 컴포넌트 (lookup)

LookUpBox.vue

데이터 조회 및 선택 컴포넌트입니다.

주요 기능:

  • 팝업을 통한 데이터 조회
  • 다중 선택 지원
  • 검색 기능

사용 예제:

vue
<template>
-  <LookUpBox
-    v-model="selectedData"
-    :url="'/api/direct/call/atomic'"
-    :procedure="'P_LOOKUP_Q'"
-    @select="handleSelect"
-  />
-</template>

선택 컴포넌트 (select)

SelectBoxSQL.vue

SQL 기반 선택 박스 컴포넌트입니다.

주요 기능:

  • 비즈니스 컴포넌트 ID를 통한 데이터 조회
  • 동적 옵션 로딩

사용 예제:

vue
<template>
-  <SelectBoxSQL
-    v-model="selectedValue"
-    v-bind="jsonData"
-  />
-</template>
-
-<script setup>
-const jsonData = reactive({
-  bizcompId: 'BIZCOMP_ID',
-  whereClause: '',
-  compCode: '1000',
-})
-</script>

SelectBoxDate.vue

날짜 선택 컴포넌트입니다.

주요 기능:

  • 날짜 범위 선택
  • 날짜 형식 지정

사용 예제:

vue
<template>
-  <SelectBoxDate
-    v-model="selectedDate"
-    format="YYYY-MM-DD"
-  />
-</template>

MultiSelectBoxSQL.vue

다중 선택 박스 컴포넌트입니다.

주요 기능:

  • 여러 항목 선택
  • SQL 기반 데이터 로딩

트리 컴포넌트 (tree)

TreeDeptDropdown.vue

부서 트리 드롭다운 컴포넌트입니다.

주요 기능:

  • 계층적 부서 구조 표시
  • 부서 선택

사용 예제:

vue
<template>
-  <TreeDeptDropdown
-    v-model="selectedDept"
-    @select="handleDeptSelect"
-  />
-</template>

TreeEmpDropdown.vue

사원 트리 드롭다운 컴포넌트입니다.

주요 기능:

  • 부서별 사원 구조 표시
  • 사원 선택

TreeOrgNode.vue

조직 노드 컴포넌트입니다.

주요 기능:

  • 조직 구조 노드 렌더링
  • 확장/축소 기능

그리드 컴포넌트 (components/grid)

GridClickField.vue

그리드 클릭 필드 컴포넌트입니다.

주요 기능:

  • 그리드 셀 클릭 이벤트 처리
  • 필드별 커스텀 동작

GridContextMenu.vue

그리드 컨텍스트 메뉴 컴포넌트입니다.

주요 기능:

  • 우클릭 메뉴 표시
  • 행별 작업 메뉴

사용 예제:

vue
<template>
-  <grid-context-menu />
-</template>

GridMultiSelectWrapper.vue

멀티 선택 그리드 래퍼 컴포넌트입니다.

주요 기능:

  • 다중 행 선택
  • 선택된 행 관리

메뉴 컴포넌트 (components/menu)

사이드바 메뉴 컴포넌트입니다.

주요 기능:

  • 계층적 메뉴 구조 표시
  • 메뉴 네비게이션
  • 메뉴 접기/펼치기

메뉴 헤더바 컴포넌트입니다.

주요 기능:

  • 현재 메뉴 경로 표시
  • 북마크 기능

북마크 메뉴 컴포넌트입니다.

주요 기능:

  • 자주 사용하는 메뉴 북마크
  • 빠른 접근

팝업 컴포넌트 (components/popup)

PopupApproval.vue

승인 팝업 컴포넌트입니다.

주요 기능:

  • 결재 승인/반려
  • 결재 이력 조회

PopupApproveList.vue

승인 목록 팝업 컴포넌트입니다.

주요 기능:

  • 결재 목록 조회
  • 결재 상태 확인

파일 링크 팝업 컴포넌트입니다.

주요 기능:

  • 첨부 파일 목록 표시
  • 파일 다운로드

PopupLog.vue

로그 팝업 컴포넌트입니다.

주요 기능:

  • API 호출 로그 표시
  • 로그 상세 정보

PopupPageLog.vue

페이지 로그 팝업 컴포넌트입니다.

주요 기능:

  • 페이지 접근 로그 조회
  • 사용자별 접근 이력

API 호출:

javascript
const param = {
-  procedure: 'P_SYSNEWESSLOG_Q',
-  params: {
-    V_P_WORK_TYPE: 'Q',
-    V_P_AC_DATETIME_S: '',
-    V_P_AC_DATETIME_E: '',
-    V_P_AC_EMP_CODE: empCode,
-    V_P_AC_MENU_NAME: '',
-  }
-}

PopupSmsTemplateList.vue

SMS 템플릿 목록 팝업 컴포넌트입니다.

주요 기능:

  • SMS 템플릿 목록 조회
  • 템플릿 선택

레이아웃 컴포넌트 (layouts)

blank.vue

빈 레이아웃입니다. 로그인 페이지 등에서 사용됩니다.

주요 특징:

  • 최소한의 레이아웃
  • 헤더/푸터 없음

default.vue

기본 레이아웃입니다. 대부분의 페이지에서 사용됩니다.

주요 특징:

  • 사이드바 메뉴
  • 헤더바
  • 탭 기능
  • 컨텐츠 영역

popBlank.vue

팝업 레이아웃입니다. 팝업 창에서 사용됩니다.

주요 특징:

  • 팝업 전용 레이아웃
  • 모달 스타일

관련 문서

`,132)]))}const E=a(l,[["render",p]]);export{u as __pageData,E as default}; diff --git a/assets/project-structure_views_ui.md.DNuswPXA.lean.js b/assets/project-structure_views_ui.md.DNuswPXA.lean.js deleted file mode 100644 index c211e44..0000000 --- a/assets/project-structure_views_ui.md.DNuswPXA.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as e}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"UI 컴포넌트 및 레이아웃","description":"","frontmatter":{},"headers":[],"relativePath":"project-structure/views/ui.md","filePath":"project-structure/views/ui.md"}'),l={name:"project-structure/views/ui.md"};function p(t,s,h,r,o,k){return n(),i("div",null,s[0]||(s[0]=[e("",132)]))}const E=a(l,[["render",p]]);export{u as __pageData,E as default}; diff --git a/assets/references_classes.md.BvJWEp-u.js b/assets/references_classes.md.BvJWEp-u.js deleted file mode 100644 index 8c3c103..0000000 --- a/assets/references_classes.md.BvJWEp-u.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as o,o as t,aG as r}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"주요 클래스/함수 참조","description":"","frontmatter":{},"headers":[],"relativePath":"references/classes.md","filePath":"references/classes.md"}'),l={name:"references/classes.md"};function i(s,e,c,d,n,u){return t(),o("div",null,e[0]||(e[0]=[r('

주요 클래스/함수 참조

유틸리티 함수

  • gfIsEmpty(): 빈 값 체크
  • gfNvl(): null/undefined 처리
  • gfFormatDateString(): 날짜 포맷팅
  • gfNumberFormat(): 숫자 포맷팅

자세한 내용은 공통 유틸리티 문서를 참고하세요.

스토어

  • useAuthStore(): 인증 스토어
  • useLoadingStore(): 로딩 스토어
  • useMenuStore(): 메뉴 스토어
  • useSessionStore(): 세션 스토어

자세한 내용은 핵심 기능 - 상태 관리 문서를 참고하세요.

API 호출

  • axiosInstance: Axios 인스턴스

자세한 내용은 HTTP 통신 문서를 참고하세요.

',10)]))}const m=a(l,[["render",i]]);export{f as __pageData,m as default}; diff --git a/assets/references_classes.md.BvJWEp-u.lean.js b/assets/references_classes.md.BvJWEp-u.lean.js deleted file mode 100644 index 2a8955b..0000000 --- a/assets/references_classes.md.BvJWEp-u.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as o,o as t,aG as r}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"주요 클래스/함수 참조","description":"","frontmatter":{},"headers":[],"relativePath":"references/classes.md","filePath":"references/classes.md"}'),l={name:"references/classes.md"};function i(s,e,c,d,n,u){return t(),o("div",null,e[0]||(e[0]=[r("",10)]))}const m=a(l,[["render",i]]);export{f as __pageData,m as default}; diff --git a/assets/references_classes.md.Dtb9OqfZ.js b/assets/references_classes.md.Dtb9OqfZ.js new file mode 100644 index 0000000..d4d940e --- /dev/null +++ b/assets/references_classes.md.Dtb9OqfZ.js @@ -0,0 +1 @@ +import{_ as a,c as o,o as t,aG as r}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"주요 클래스/함수 참조","description":"","frontmatter":{},"headers":[],"relativePath":"references/classes.md","filePath":"references/classes.md"}'),l={name:"references/classes.md"};function i(s,e,c,d,n,u){return t(),o("div",null,e[0]||(e[0]=[r('

주요 클래스/함수 참조

유틸리티 함수

  • gfIsEmpty(): 빈 값 체크
  • gfNvl(): null/undefined 처리
  • gfFormatDateString(): 날짜 포맷팅
  • gfNumberFormat(): 숫자 포맷팅

자세한 내용은 공통 유틸리티 문서를 참고하세요.

스토어

  • useAuthStore(): 인증 스토어
  • useLoadingStore(): 로딩 스토어
  • useMenuStore(): 메뉴 스토어
  • useSessionStore(): 세션 스토어

자세한 내용은 핵심 기능 - 상태 관리 문서를 참고하세요.

API 호출

  • axiosInstance: Axios 인스턴스

자세한 내용은 HTTP 통신 문서를 참고하세요.

',10)]))}const m=a(l,[["render",i]]);export{f as __pageData,m as default}; diff --git a/assets/references_classes.md.Dtb9OqfZ.lean.js b/assets/references_classes.md.Dtb9OqfZ.lean.js new file mode 100644 index 0000000..a7f2070 --- /dev/null +++ b/assets/references_classes.md.Dtb9OqfZ.lean.js @@ -0,0 +1 @@ +import{_ as a,c as o,o as t,aG as r}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"주요 클래스/함수 참조","description":"","frontmatter":{},"headers":[],"relativePath":"references/classes.md","filePath":"references/classes.md"}'),l={name:"references/classes.md"};function i(s,e,c,d,n,u){return t(),o("div",null,e[0]||(e[0]=[r("",10)]))}const m=a(l,[["render",i]]);export{f as __pageData,m as default}; diff --git a/assets/references_config-files.md.BhQxxc-9.js b/assets/references_config-files.md.BhQxxc-9.js deleted file mode 100644 index 2afe44b..0000000 --- a/assets/references_config-files.md.BhQxxc-9.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as r,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"설정 파일 참조","description":"","frontmatter":{},"headers":[],"relativePath":"references/config-files.md","filePath":"references/config-files.md"}'),o={name:"references/config-files.md"};function n(s,a,c,l,h,d){return r(),i("div",null,a[0]||(a[0]=[t('

설정 파일 참조

주요 설정 파일

package.json

프로젝트 메타데이터, 의존성, 스크립트 정의

vite.config.js

Vite 빌드 도구 설정

.env

환경 변수 설정

jsconfig.json

JavaScript 프로젝트 설정

플러그인 설정

router/routes.js

라우트 정의

pinia.js

Pinia 설정

vuetify/index.js

Vuetify 설정

',17)]))}const p=e(o,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/references_config-files.md.BhQxxc-9.lean.js b/assets/references_config-files.md.BhQxxc-9.lean.js deleted file mode 100644 index bb1c005..0000000 --- a/assets/references_config-files.md.BhQxxc-9.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as r,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"설정 파일 참조","description":"","frontmatter":{},"headers":[],"relativePath":"references/config-files.md","filePath":"references/config-files.md"}'),o={name:"references/config-files.md"};function n(s,a,c,l,h,d){return r(),i("div",null,a[0]||(a[0]=[t("",17)]))}const p=e(o,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/references_config-files.md.DDHMzl_7.js b/assets/references_config-files.md.DDHMzl_7.js new file mode 100644 index 0000000..8975e14 --- /dev/null +++ b/assets/references_config-files.md.DDHMzl_7.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as r,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"설정 파일 참조","description":"","frontmatter":{},"headers":[],"relativePath":"references/config-files.md","filePath":"references/config-files.md"}'),o={name:"references/config-files.md"};function n(s,a,c,l,h,d){return r(),i("div",null,a[0]||(a[0]=[t('

설정 파일 참조

주요 설정 파일

package.json

프로젝트 메타데이터, 의존성, 스크립트 정의

vite.config.js

Vite 빌드 도구 설정

.env

환경 변수 설정

jsconfig.json

JavaScript 프로젝트 설정

플러그인 설정

router/routes.js

라우트 정의

pinia.js

Pinia 설정

vuetify/index.js

Vuetify 설정

',17)]))}const p=e(o,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/references_config-files.md.DDHMzl_7.lean.js b/assets/references_config-files.md.DDHMzl_7.lean.js new file mode 100644 index 0000000..6559575 --- /dev/null +++ b/assets/references_config-files.md.DDHMzl_7.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as r,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"설정 파일 참조","description":"","frontmatter":{},"headers":[],"relativePath":"references/config-files.md","filePath":"references/config-files.md"}'),o={name:"references/config-files.md"};function n(s,a,c,l,h,d){return r(),i("div",null,a[0]||(a[0]=[t("",17)]))}const p=e(o,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/references_external-libs.md.Bq9Imz0N.js b/assets/references_external-libs.md.Bq9Imz0N.js deleted file mode 100644 index 725ac89..0000000 --- a/assets/references_external-libs.md.Bq9Imz0N.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as t,aG as i}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"외부 라이브러리 문서","description":"","frontmatter":{},"headers":[],"relativePath":"references/external-libs.md","filePath":"references/external-libs.md"}'),l={name:"references/external-libs.md"};function o(s,e,n,h,u,d){return t(),r("div",null,e[0]||(e[0]=[i('

외부 라이브러리 문서

Vue 3

Vite

Pinia

Vuetify

Vue Router

AG Grid

Axios

',15)]))}const p=a(l,[["render",o]]);export{c as __pageData,p as default}; diff --git a/assets/references_external-libs.md.Bq9Imz0N.lean.js b/assets/references_external-libs.md.Bq9Imz0N.lean.js deleted file mode 100644 index c5fe69b..0000000 --- a/assets/references_external-libs.md.Bq9Imz0N.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as t,aG as i}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"외부 라이브러리 문서","description":"","frontmatter":{},"headers":[],"relativePath":"references/external-libs.md","filePath":"references/external-libs.md"}'),l={name:"references/external-libs.md"};function o(s,e,n,h,u,d){return t(),r("div",null,e[0]||(e[0]=[i("",15)]))}const p=a(l,[["render",o]]);export{c as __pageData,p as default}; diff --git a/assets/references_external-libs.md.CgeWtmbA.js b/assets/references_external-libs.md.CgeWtmbA.js new file mode 100644 index 0000000..a76178b --- /dev/null +++ b/assets/references_external-libs.md.CgeWtmbA.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as t,aG as i}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"외부 라이브러리 문서","description":"","frontmatter":{},"headers":[],"relativePath":"references/external-libs.md","filePath":"references/external-libs.md"}'),l={name:"references/external-libs.md"};function o(s,e,n,h,u,d){return t(),r("div",null,e[0]||(e[0]=[i('

외부 라이브러리 문서

Vue 3

Vite

Pinia

Vuetify

Vue Router

AG Grid

Axios

',15)]))}const p=a(l,[["render",o]]);export{c as __pageData,p as default}; diff --git a/assets/references_external-libs.md.CgeWtmbA.lean.js b/assets/references_external-libs.md.CgeWtmbA.lean.js new file mode 100644 index 0000000..13f2276 --- /dev/null +++ b/assets/references_external-libs.md.CgeWtmbA.lean.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as t,aG as i}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"외부 라이브러리 문서","description":"","frontmatter":{},"headers":[],"relativePath":"references/external-libs.md","filePath":"references/external-libs.md"}'),l={name:"references/external-libs.md"};function o(s,e,n,h,u,d){return t(),r("div",null,e[0]||(e[0]=[i("",15)]))}const p=a(l,[["render",o]]);export{c as __pageData,p as default}; diff --git a/assets/references_faq.md.CExE0H3k.js b/assets/references_faq.md.CExE0H3k.js new file mode 100644 index 0000000..eda339b --- /dev/null +++ b/assets/references_faq.md.CExE0H3k.js @@ -0,0 +1 @@ +import{_ as e,c as r,o as t,aG as o}from"./chunks/framework.DytOxJW6.js";const p=JSON.parse('{"title":"자주 묻는 질문 (FAQ)","description":"","frontmatter":{},"headers":[],"relativePath":"references/faq.md","filePath":"references/faq.md"}'),n={name:"references/faq.md"};function c(i,a,s,d,l,h){return t(),r("div",null,a[0]||(a[0]=[o('

자주 묻는 질문 (FAQ)

Q: 자동 임포트가 작동하지 않아요

A: 개발 서버를 재시작하고, src/auto-imports.d.ts 파일이 생성되었는지 확인하세요.

Q: 컴포넌트를 찾을 수 없어요

A: 컴포넌트가 src/views/ui/components/ 디렉토리에 있는지 확인하고, src/components.d.ts 파일을 확인하세요.

Q: API 호출 시 401 에러가 발생해요

A: 토큰이 만료되었을 수 있습니다. 자동으로 갱신되지만, 실패 시 로그인 페이지로 이동합니다.

Q: 환경 변수가 적용되지 않아요

A: 환경 변수명이 VITE_로 시작하는지 확인하고, 개발 서버를 재시작하세요.

Q: 빌드가 실패해요

A: 타입 오류나 ESLint 오류를 확인하고, 의존성 버전을 확인하세요.

',11)]))}const f=e(n,[["render",c]]);export{p as __pageData,f as default}; diff --git a/assets/references_faq.md.CExE0H3k.lean.js b/assets/references_faq.md.CExE0H3k.lean.js new file mode 100644 index 0000000..247a122 --- /dev/null +++ b/assets/references_faq.md.CExE0H3k.lean.js @@ -0,0 +1 @@ +import{_ as e,c as r,o as t,aG as o}from"./chunks/framework.DytOxJW6.js";const p=JSON.parse('{"title":"자주 묻는 질문 (FAQ)","description":"","frontmatter":{},"headers":[],"relativePath":"references/faq.md","filePath":"references/faq.md"}'),n={name:"references/faq.md"};function c(i,a,s,d,l,h){return t(),r("div",null,a[0]||(a[0]=[o("",11)]))}const f=e(n,[["render",c]]);export{p as __pageData,f as default}; diff --git a/assets/references_faq.md.ZeU1UL6C.js b/assets/references_faq.md.ZeU1UL6C.js deleted file mode 100644 index ea2091f..0000000 --- a/assets/references_faq.md.ZeU1UL6C.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as r,o as t,aG as o}from"./chunks/framework.CrOSaJJH.js";const p=JSON.parse('{"title":"자주 묻는 질문 (FAQ)","description":"","frontmatter":{},"headers":[],"relativePath":"references/faq.md","filePath":"references/faq.md"}'),n={name:"references/faq.md"};function c(i,a,s,d,l,h){return t(),r("div",null,a[0]||(a[0]=[o('

자주 묻는 질문 (FAQ)

Q: 자동 임포트가 작동하지 않아요

A: 개발 서버를 재시작하고, src/auto-imports.d.ts 파일이 생성되었는지 확인하세요.

Q: 컴포넌트를 찾을 수 없어요

A: 컴포넌트가 src/views/ui/components/ 디렉토리에 있는지 확인하고, src/components.d.ts 파일을 확인하세요.

Q: API 호출 시 401 에러가 발생해요

A: 토큰이 만료되었을 수 있습니다. 자동으로 갱신되지만, 실패 시 로그인 페이지로 이동합니다.

Q: 환경 변수가 적용되지 않아요

A: 환경 변수명이 VITE_로 시작하는지 확인하고, 개발 서버를 재시작하세요.

Q: 빌드가 실패해요

A: 타입 오류나 ESLint 오류를 확인하고, 의존성 버전을 확인하세요.

',11)]))}const f=e(n,[["render",c]]);export{p as __pageData,f as default}; diff --git a/assets/references_faq.md.ZeU1UL6C.lean.js b/assets/references_faq.md.ZeU1UL6C.lean.js deleted file mode 100644 index b2fa9f2..0000000 --- a/assets/references_faq.md.ZeU1UL6C.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as r,o as t,aG as o}from"./chunks/framework.CrOSaJJH.js";const p=JSON.parse('{"title":"자주 묻는 질문 (FAQ)","description":"","frontmatter":{},"headers":[],"relativePath":"references/faq.md","filePath":"references/faq.md"}'),n={name:"references/faq.md"};function c(i,a,s,d,l,h){return t(),r("div",null,a[0]||(a[0]=[o("",11)]))}const f=e(n,[["render",c]]);export{p as __pageData,f as default}; diff --git a/assets/references_icons.md.DuoobUKJ.js b/assets/references_icons.md.DuoobUKJ.js new file mode 100644 index 0000000..115604b --- /dev/null +++ b/assets/references_icons.md.DuoobUKJ.js @@ -0,0 +1,4 @@ +import{_ as s,c as a,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"아이콘 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"references/icons.md","filePath":"references/icons.md"}'),n={name:"references/icons.md"};function l(h,i,p,r,k,o){return e(),a("div",null,i[0]||(i[0]=[t(`

아이콘 사용법

Iconify

프로젝트는 Iconify를 사용하여 아이콘을 관리합니다.

사용 예제

vue
<template>
+  <v-icon icon="ri-search-line" />
+  <v-icon icon="mdi-home" />
+</template>

아이콘 빌드

아이콘을 추가하거나 변경한 경우:

bash
npm run build:icons

아이콘 라이브러리

  • Remix Icon (ri-*)
  • Material Design Icons (mdi-*)
`,10)]))}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/references_icons.md.DuoobUKJ.lean.js b/assets/references_icons.md.DuoobUKJ.lean.js new file mode 100644 index 0000000..408a5fb --- /dev/null +++ b/assets/references_icons.md.DuoobUKJ.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"아이콘 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"references/icons.md","filePath":"references/icons.md"}'),n={name:"references/icons.md"};function l(h,i,p,r,k,o){return e(),a("div",null,i[0]||(i[0]=[t("",10)]))}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/references_icons.md.Dwl8vs6S.js b/assets/references_icons.md.Dwl8vs6S.js deleted file mode 100644 index 0296d9e..0000000 --- a/assets/references_icons.md.Dwl8vs6S.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as s,c as a,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"아이콘 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"references/icons.md","filePath":"references/icons.md"}'),n={name:"references/icons.md"};function l(h,i,p,r,k,o){return e(),a("div",null,i[0]||(i[0]=[t(`

아이콘 사용법

Iconify

프로젝트는 Iconify를 사용하여 아이콘을 관리합니다.

사용 예제

vue
<template>
-  <v-icon icon="ri-search-line" />
-  <v-icon icon="mdi-home" />
-</template>

아이콘 빌드

아이콘을 추가하거나 변경한 경우:

bash
npm run build:icons

아이콘 라이브러리

  • Remix Icon (ri-*)
  • Material Design Icons (mdi-*)
`,10)]))}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/references_icons.md.Dwl8vs6S.lean.js b/assets/references_icons.md.Dwl8vs6S.lean.js deleted file mode 100644 index a0b8fbd..0000000 --- a/assets/references_icons.md.Dwl8vs6S.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"아이콘 사용법","description":"","frontmatter":{},"headers":[],"relativePath":"references/icons.md","filePath":"references/icons.md"}'),n={name:"references/icons.md"};function l(h,i,p,r,k,o){return e(),a("div",null,i[0]||(i[0]=[t("",10)]))}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/style.BMBugAGI.css b/assets/style.BMBugAGI.css new file mode 100644 index 0000000..28831a9 --- /dev/null +++ b/assets/style.BMBugAGI.css @@ -0,0 +1,5 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/docs/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: #3c3c43;--vp-c-text-2: #67676c;--vp-c-text-3: #929295}.dark{--vp-c-text-1: #dfdfd6;--vp-c-text-2: #98989f;--vp-c-text-3: #6a6a71}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:lang(es),:lang(pt){--vp-code-copy-copied-text-content: "Copiado"}:lang(fa){--vp-code-copy-copied-text-content: "کپی شد"}:lang(ko){--vp-code-copy-copied-text-content: "복사됨"}:lang(ru){--vp-code-copy-copied-text-content: "Скопировано"}:lang(zh){--vp-code-copy-copied-text-content: "已复制"}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d6be1790]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d6be1790]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d6be1790]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-a5bbad30]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-a5bbad30]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-e98dd255]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-e98dd255]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-e257564d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-e257564d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-fa7799d5]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-fa7799d5]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa7799d5]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-fa7799d5]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-fa7799d5]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-fa7799d5]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-fa7799d5]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-fa7799d5]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-fa7799d5]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-fa7799d5]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-fa7799d5]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-fa7799d5]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-fa7799d5]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-4f9c455b]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-4f9c455b]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-4f9c455b]{flex-direction:row}}.main[data-v-4f9c455b]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-4f9c455b]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-4f9c455b]{text-align:left}}@media (min-width: 960px){.main[data-v-4f9c455b]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-4f9c455b]{max-width:592px}}.heading[data-v-4f9c455b]{display:flex;flex-direction:column}.name[data-v-4f9c455b],.text[data-v-4f9c455b]{width:fit-content;max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0 auto}.name[data-v-4f9c455b]{color:var(--vp-home-hero-name-color)}.clip[data-v-4f9c455b]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-4f9c455b],.text[data-v-4f9c455b]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-4f9c455b],.text[data-v-4f9c455b]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0}}.tagline[data-v-4f9c455b]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-4f9c455b]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-4f9c455b]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-4f9c455b]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-4f9c455b]{margin:0}}.actions[data-v-4f9c455b]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:center}@media (min-width: 640px){.actions[data-v-4f9c455b]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:flex-start}}.action[data-v-4f9c455b]{flex-shrink:0;padding:6px}.image[data-v-4f9c455b]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-4f9c455b]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-4f9c455b]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-4f9c455b]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-4f9c455b]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-4f9c455b]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-4f9c455b]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-4f9c455b]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-4f9c455b]{width:320px;height:320px}}[data-v-4f9c455b] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-4f9c455b] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-4f9c455b] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-a3976bdc]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a3976bdc]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a3976bdc]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width: 960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-8b561e3d]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-8b561e3d]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width: 960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e315a0ad]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-8a42e2b4]{color:var(--vp-c-text-1)}.icon[data-v-8a42e2b4]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{font-size:14px}.icon[data-v-8a42e2b4]{font-size:16px}}.open>.icon[data-v-8a42e2b4]{transform:rotate(90deg)}.items[data-v-8a42e2b4]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-8a42e2b4]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-8a42e2b4]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-8a42e2b4]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-8a42e2b4]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-8a42e2b4]{transition:all .2s ease-out}.flyout-leave-active[data-v-8a42e2b4]{transition:all .15s ease-in}.flyout-enter-from[data-v-8a42e2b4],.flyout-leave-to[data-v-8a42e2b4]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-a6f0e41e]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.moon[data-v-5337faa4],.dark .sun[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-6c893767]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-35975db6]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-35975db6]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-35975db6]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-35975db6]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-b98bc113]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-b98bc113] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-b98bc113] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-b98bc113] .group:last-child{padding-bottom:0}.VPMenu[data-v-b98bc113] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-b98bc113] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-b98bc113] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-b98bc113] .action{padding-left:24px}.VPFlyout[data-v-cf11d7a2]{position:relative}.VPFlyout[data-v-cf11d7a2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-cf11d7a2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-cf11d7a2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-cf11d7a2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-cf11d7a2]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-cf11d7a2]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-cf11d7a2],.button[aria-expanded=true]+.menu[data-v-cf11d7a2]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-cf11d7a2]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-cf11d7a2]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-cf11d7a2]{margin-right:0;font-size:16px}.text-icon[data-v-cf11d7a2]{margin-left:4px;font-size:14px}.icon[data-v-cf11d7a2]{font-size:20px;transition:fill .25s}.menu[data-v-cf11d7a2]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-bd121fe5]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-bd121fe5]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-bd121fe5]>svg,.VPSocialLink[data-v-bd121fe5]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-bb2aa2f0]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-bb2aa2f0]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-bb2aa2f0]{display:none}}.trans-title[data-v-bb2aa2f0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-bb2aa2f0],.item.social-links[data-v-bb2aa2f0]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-bb2aa2f0]{min-width:176px}.appearance-action[data-v-bb2aa2f0]{margin-right:-2px}.social-links-list[data-v-bb2aa2f0]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-e56f3d57]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-e56f3d57],.VPNavBarMenuLink[data-v-e56f3d57]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-dc692963]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-dc692963]{display:flex}}/*! @docsearch/css 3.8.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-1168a8e4]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-1168a8e4]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-1168a8e4]{border-bottom-color:var(--vp-c-divider)}}[data-v-1168a8e4] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-88af2de4]{display:flex;align-items:center}}.title[data-v-88af2de4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-6aa21345]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-6aa21345]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-6aa21345]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-6aa21345]:not(.home){background-color:transparent}.VPNavBar[data-v-6aa21345]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-6aa21345]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-6aa21345]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-6aa21345]{padding:0}}.container[data-v-6aa21345]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-6aa21345],.container>.content[data-v-6aa21345]{pointer-events:none}.container[data-v-6aa21345] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-6aa21345]{max-width:100%}}.title[data-v-6aa21345]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-6aa21345]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-6aa21345]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-6aa21345]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-6aa21345]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-6aa21345]{column-gap:.5rem}}.menu+.translations[data-v-6aa21345]:before,.menu+.appearance[data-v-6aa21345]:before,.menu+.social-links[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before,.appearance+.social-links[data-v-6aa21345]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{margin-right:16px}.appearance+.social-links[data-v-6aa21345]:before{margin-left:16px}.social-links[data-v-6aa21345]{margin-right:-8px}.divider[data-v-6aa21345]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-6aa21345]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-6aa21345]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-b44890b2]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-df37e6dd]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-df37e6dd]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-b9ab8c58]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-b9ab8c58]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-b9ab8c58]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-b9ab8c58]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-b9ab8c58]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-b9ab8c58]{transform:rotate(45deg)}.button[data-v-b9ab8c58]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-b9ab8c58]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-b9ab8c58]{transition:transform .25s}.group[data-v-b9ab8c58]:first-child{padding-top:0}.group+.group[data-v-b9ab8c58],.group+.item[data-v-b9ab8c58]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-f2779853]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-f2779853],.VPNavScreen.fade-leave-active[data-v-f2779853]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-f2779853],.VPNavScreen.fade-leave-active .container[data-v-f2779853]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-f2779853],.VPNavScreen.fade-leave-to[data-v-f2779853]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-f2779853],.VPNavScreen.fade-leave-to .container[data-v-f2779853]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-f2779853]{display:none}}.container[data-v-f2779853]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-f2779853],.menu+.appearance[data-v-f2779853],.translations+.appearance[data-v-f2779853]{margin-top:24px}.menu+.social-links[data-v-f2779853]{margin-top:16px}.appearance+.social-links[data-v-f2779853]{margin-top:16px}.VPNav[data-v-ae24b3ad]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b3fd67f8]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b3fd67f8]{padding-bottom:10px}.item[data-v-b3fd67f8]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b3fd67f8]{cursor:pointer}.indicator[data-v-b3fd67f8]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b3fd67f8]{background-color:var(--vp-c-brand-1)}.link[data-v-b3fd67f8]{display:flex;align-items:center;flex-grow:1}.text[data-v-b3fd67f8]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b3fd67f8]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b3fd67f8],.VPSidebarItem.level-2 .text[data-v-b3fd67f8],.VPSidebarItem.level-3 .text[data-v-b3fd67f8],.VPSidebarItem.level-4 .text[data-v-b3fd67f8],.VPSidebarItem.level-5 .text[data-v-b3fd67f8]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b3fd67f8]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.caret[data-v-b3fd67f8]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-b3fd67f8]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b3fd67f8]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b3fd67f8]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b3fd67f8]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b3fd67f8],.VPSidebarItem.level-2 .items[data-v-b3fd67f8],.VPSidebarItem.level-3 .items[data-v-b3fd67f8],.VPSidebarItem.level-4 .items[data-v-b3fd67f8],.VPSidebarItem.level-5 .items[data-v-b3fd67f8]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b3fd67f8]{display:none}.no-transition[data-v-c40bc020] .caret-icon{transition:none}.group+.group[data-v-c40bc020]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-c40bc020]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-319d5ca6]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-319d5ca6]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-319d5ca6]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-319d5ca6]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-319d5ca6]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-319d5ca6]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-319d5ca6]{outline:0}.VPSkipLink[data-v-0b0ada53]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0b0ada53]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0b0ada53]{top:14px;left:16px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3d121b4a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamMembersItem[data-v-f3fa364a]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f3fa364a]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f3fa364a]{margin:0;font-weight:600}.affiliation[data-v-f3fa364a]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f3fa364a]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:hover,.sp .sp-link.link[data-v-f3fa364a]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f3fa364a]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.v-application{display:flex;background:rgb(var(--v-theme-background));color:rgba(var(--v-theme-on-background),var(--v-high-emphasis-opacity))}.v-application__wrap{backface-visibility:hidden;display:flex;flex-direction:column;flex:1 1 auto;max-width:100%;min-height:100vh;min-height:100dvh;position:relative}.v-app-bar{display:flex}.v-app-bar.v-toolbar{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-app-bar.v-toolbar:not(.v-toolbar--flat){box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-app-bar:not(.v-toolbar--absolute){padding-inline-end:var(--v-scrollbar-offset)}.v-toolbar{align-items:flex-start;display:flex;flex:none;flex-direction:column;justify-content:space-between;max-width:100%;position:relative;transition:.2s cubic-bezier(.4,0,.2,1);transition-property:height,width,transform,max-width,left,right,top,bottom,box-shadow;width:100%}.v-toolbar{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-toolbar--border{border-width:thin;box-shadow:none}.v-toolbar{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-toolbar{border-radius:0}.v-toolbar{background:rgb(var(--v-theme-surface-light));color:rgba(var(--v-theme-on-surface-light),var(--v-high-emphasis-opacity))}.v-toolbar--absolute{position:absolute}.v-toolbar--collapse{max-width:112px;overflow:hidden;border-end-end-radius:24px}.v-toolbar--collapse .v-toolbar-title{display:none}.v-toolbar--flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-toolbar--floating{display:inline-flex}.v-toolbar--rounded{border-radius:4px}.v-toolbar__content,.v-toolbar__extension{align-items:center;display:flex;flex:0 0 auto;position:relative;transition:inherit;width:100%}.v-toolbar__content{overflow:hidden}.v-toolbar__content>.v-btn:first-child{margin-inline-start:4px}.v-toolbar__content>.v-btn:last-child{margin-inline-end:4px}.v-toolbar__content>.v-toolbar-title{margin-inline-start:20px}.v-toolbar--density-prominent .v-toolbar__content{align-items:flex-start}.v-toolbar__image{display:flex;opacity:var(--v-toolbar-image-opacity, 1);transition-property:opacity}.v-toolbar__image{position:absolute;top:0;left:0;width:100%;height:100%}.v-toolbar__prepend,.v-toolbar__append{align-items:center;align-self:stretch;display:flex}.v-toolbar__prepend{margin-inline:4px auto}.v-toolbar__append{margin-inline:auto 4px}.v-toolbar-title{flex:1 1;font-size:1.25rem;min-width:0}.v-toolbar-title{font-size:1.25rem;font-weight:400;letter-spacing:0;line-height:1.75rem;text-transform:none}.v-toolbar--density-prominent .v-toolbar-title{align-self:flex-end;padding-bottom:6px}.v-toolbar--density-prominent .v-toolbar-title{font-size:1.5rem;font-weight:400;letter-spacing:0;line-height:2.25rem;text-transform:none}.v-toolbar-title__placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-toolbar-items{display:flex;height:inherit;align-self:stretch}.v-toolbar-items>.v-btn{border-radius:0}.v-img{--v-theme-overlay-multiplier: 3;z-index:0}.v-img.v-img--absolute{height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:-1}.v-img--booting .v-responsive__sizer{transition:none}.v-img--rounded{border-radius:4px}.v-img__img,.v-img__picture,.v-img__gradient,.v-img__placeholder,.v-img__error{z-index:-1}.v-img__img,.v-img__picture,.v-img__gradient,.v-img__placeholder,.v-img__error{position:absolute;top:0;left:0;width:100%;height:100%}.v-img__img--preload{filter:blur(4px)}.v-img__img--contain{object-fit:contain}.v-img__img--cover{object-fit:cover}.v-img__gradient{background-repeat:no-repeat}.v-responsive{display:flex;flex:1 0 auto;max-height:100%;max-width:100%;overflow:hidden;position:relative}.v-responsive--inline{display:inline-flex;flex:0 0 auto}.v-responsive__content{flex:1 0 0px;max-width:100%}.v-responsive__sizer~.v-responsive__content{margin-inline-start:-100%}.v-responsive__sizer{flex:1 0 0px;transition:padding-bottom .2s cubic-bezier(.4,0,.2,1);pointer-events:none}.v-btn{align-items:center;border-radius:4px;display:inline-grid;grid-template-areas:"prepend content append";grid-template-columns:max-content auto max-content;font-weight:500;justify-content:center;letter-spacing:.0892857143em;line-height:normal;max-width:100%;outline:none;position:relative;text-decoration:none;text-indent:.0892857143em;text-transform:uppercase;transition-property:box-shadow,transform,opacity,background;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-user-select:none;user-select:none;vertical-align:middle;flex-shrink:0}.v-btn--size-x-small{--v-btn-size: .625rem;--v-btn-height: 20px;font-size:var(--v-btn-size);min-width:36px;padding:0 8px}.v-btn--size-small{--v-btn-size: .75rem;--v-btn-height: 28px;font-size:var(--v-btn-size);min-width:50px;padding:0 12px}.v-btn--size-default{--v-btn-size: .875rem;--v-btn-height: 36px;font-size:var(--v-btn-size);min-width:64px;padding:0 16px}.v-btn--size-large{--v-btn-size: 1rem;--v-btn-height: 44px;font-size:var(--v-btn-size);min-width:78px;padding:0 20px}.v-btn--size-x-large{--v-btn-size: 1.125rem;--v-btn-height: 52px;font-size:var(--v-btn-size);min-width:92px;padding:0 24px}.v-btn.v-btn--density-default{height:calc(var(--v-btn-height) + 0px)}.v-btn.v-btn--density-comfortable{height:calc(var(--v-btn-height) + -8px)}.v-btn.v-btn--density-compact{height:calc(var(--v-btn-height) + -12px)}.v-btn{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-btn--border{border-width:thin;box-shadow:none}.v-btn--absolute{position:absolute}.v-btn--fixed{position:fixed}.v-btn:hover>.v-btn__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-btn:focus-visible>.v-btn__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-btn:focus>.v-btn__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-btn--active>.v-btn__overlay,.v-btn[aria-haspopup=menu][aria-expanded=true]>.v-btn__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-btn--active:hover>.v-btn__overlay,.v-btn[aria-haspopup=menu][aria-expanded=true]:hover>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-btn--active:focus-visible>.v-btn__overlay,.v-btn[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-btn--active:focus>.v-btn__overlay,.v-btn[aria-haspopup=menu][aria-expanded=true]:focus>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-btn--variant-plain,.v-btn--variant-outlined,.v-btn--variant-text,.v-btn--variant-tonal{background:transparent;color:inherit}.v-btn--variant-plain{opacity:.62}.v-btn--variant-plain:focus,.v-btn--variant-plain:hover{opacity:1}.v-btn--variant-plain .v-btn__overlay{display:none}.v-btn--variant-elevated,.v-btn--variant-flat{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-btn--variant-elevated{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn--variant-outlined{border:thin solid currentColor}.v-btn--variant-text .v-btn__overlay{background:currentColor}.v-btn--variant-tonal .v-btn__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-btn .v-btn__underlay{position:absolute}@supports selector(:focus-visible){.v-btn:after{pointer-events:none;border:2px solid currentColor;border-radius:inherit;opacity:0;transition:opacity .2s ease-in-out}.v-btn:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-btn:focus-visible:after{opacity:calc(.25 * var(--v-theme-overlay-multiplier))}}.v-btn--icon{border-radius:50%;min-width:0;padding:0}.v-btn--icon.v-btn--size-default{--v-btn-size: 1rem}.v-btn--icon.v-btn--density-default{width:calc(var(--v-btn-height) + 12px);height:calc(var(--v-btn-height) + 12px)}.v-btn--icon.v-btn--density-comfortable{width:calc(var(--v-btn-height) + 0px);height:calc(var(--v-btn-height) + 0px)}.v-btn--icon.v-btn--density-compact{width:calc(var(--v-btn-height) + -8px);height:calc(var(--v-btn-height) + -8px)}.v-btn--elevated:hover,.v-btn--elevated:focus{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn--elevated:active{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn--flat{box-shadow:none}.v-btn--block{display:flex;flex:1 0 auto;min-width:100%}.v-btn--disabled{pointer-events:none;opacity:.26}.v-btn--disabled:hover{opacity:.26}.v-btn--disabled.v-btn--variant-elevated,.v-btn--disabled.v-btn--variant-flat{box-shadow:none;opacity:1;color:rgba(var(--v-theme-on-surface),.26);background:rgb(var(--v-theme-surface))}.v-btn--disabled.v-btn--variant-elevated .v-btn__overlay,.v-btn--disabled.v-btn--variant-flat .v-btn__overlay{opacity:.4615384615}.v-btn--loading{pointer-events:none}.v-btn--loading .v-btn__content,.v-btn--loading .v-btn__prepend,.v-btn--loading .v-btn__append{opacity:0}.v-btn--stacked{grid-template-areas:"prepend" "content" "append";grid-template-columns:auto;grid-template-rows:max-content max-content max-content;justify-items:center;align-content:center}.v-btn--stacked .v-btn__content{flex-direction:column;line-height:1.25}.v-btn--stacked .v-btn__prepend,.v-btn--stacked .v-btn__append,.v-btn--stacked .v-btn__content>.v-icon--start,.v-btn--stacked .v-btn__content>.v-icon--end{margin-inline:0}.v-btn--stacked .v-btn__prepend,.v-btn--stacked .v-btn__content>.v-icon--start{margin-bottom:4px}.v-btn--stacked .v-btn__append,.v-btn--stacked .v-btn__content>.v-icon--end{margin-top:4px}.v-btn--stacked.v-btn--size-x-small{--v-btn-size: .625rem;--v-btn-height: 56px;font-size:var(--v-btn-size);min-width:56px;padding:0 12px}.v-btn--stacked.v-btn--size-small{--v-btn-size: .75rem;--v-btn-height: 64px;font-size:var(--v-btn-size);min-width:64px;padding:0 14px}.v-btn--stacked.v-btn--size-default{--v-btn-size: .875rem;--v-btn-height: 72px;font-size:var(--v-btn-size);min-width:72px;padding:0 16px}.v-btn--stacked.v-btn--size-large{--v-btn-size: 1rem;--v-btn-height: 80px;font-size:var(--v-btn-size);min-width:80px;padding:0 18px}.v-btn--stacked.v-btn--size-x-large{--v-btn-size: 1.125rem;--v-btn-height: 88px;font-size:var(--v-btn-size);min-width:88px;padding:0 20px}.v-btn--stacked.v-btn--density-default{height:calc(var(--v-btn-height) + 0px)}.v-btn--stacked.v-btn--density-comfortable{height:calc(var(--v-btn-height) + -16px)}.v-btn--stacked.v-btn--density-compact{height:calc(var(--v-btn-height) + -24px)}.v-btn--slim{padding:0 8px}.v-btn--readonly{pointer-events:none}.v-btn--rounded{border-radius:24px}.v-btn--rounded.v-btn--icon{border-radius:4px}.v-btn .v-icon{--v-icon-size-multiplier: .8571428571}.v-btn--icon .v-icon{--v-icon-size-multiplier: 1}.v-btn--stacked .v-icon{--v-icon-size-multiplier: 1.1428571429}.v-btn--stacked.v-btn--block{min-width:100%}.v-btn__loader{align-items:center;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.v-btn__loader>.v-progress-circular{width:1.5em;height:1.5em}.v-btn__content,.v-btn__prepend,.v-btn__append{align-items:center;display:flex;transition:transform,opacity .2s cubic-bezier(.4,0,.2,1)}.v-btn__prepend{grid-area:prepend;margin-inline:calc(var(--v-btn-height) / -9) calc(var(--v-btn-height) / 4.5)}.v-btn--slim .v-btn__prepend{margin-inline-start:0}.v-btn__append{grid-area:append;margin-inline:calc(var(--v-btn-height) / 4.5) calc(var(--v-btn-height) / -9)}.v-btn--slim .v-btn__append{margin-inline-end:0}.v-btn__content{grid-area:content;justify-content:center;white-space:nowrap}.v-btn__content>.v-icon--start{margin-inline:calc(var(--v-btn-height) / -9) calc(var(--v-btn-height) / 4.5)}.v-btn__content>.v-icon--end{margin-inline:calc(var(--v-btn-height) / 4.5) calc(var(--v-btn-height) / -9)}.v-btn--stacked .v-btn__content{white-space:normal}.v-btn__overlay{background-color:currentColor;border-radius:inherit;opacity:0;transition:opacity .2s ease-in-out}.v-btn__overlay,.v-btn__underlay{pointer-events:none}.v-btn__overlay,.v-btn__underlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-pagination .v-btn{border-radius:4px}.v-pagination .v-btn--rounded{border-radius:50%}.v-pagination .v-btn__overlay{transition:none}.v-pagination .v-pagination__item--is-active .v-btn__overlay{opacity:var(--v-border-opacity)}.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled)>.v-btn__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled):hover>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled):focus-visible>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled):focus>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled).v-btn--variant-plain{opacity:1}.v-btn-group{display:inline-flex;flex-wrap:nowrap;max-width:100%;min-width:0;overflow:hidden;vertical-align:middle}.v-btn-group{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-btn-group--border{border-width:thin;box-shadow:none}.v-btn-group{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn-group{border-radius:4px}.v-btn-group{background:transparent;color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-btn-group--density-default.v-btn-group{height:48px}.v-btn-group--density-comfortable.v-btn-group{height:40px}.v-btn-group--density-compact.v-btn-group{height:36px}.v-btn-group .v-btn{border-radius:0;border-color:inherit}.v-btn-group .v-btn:not(:last-child){border-inline-end:none}.v-btn-group .v-btn:not(:first-child){border-inline-start:none}.v-btn-group .v-btn:first-child{border-start-start-radius:inherit;border-end-start-radius:inherit}.v-btn-group .v-btn:last-child{border-start-end-radius:inherit;border-end-end-radius:inherit}.v-btn-group--divided .v-btn:not(:last-child){border-inline-end-width:thin;border-inline-end-style:solid;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))}.v-btn-group--tile{border-radius:0}.v-icon{--v-icon-size-multiplier: 1;align-items:center;display:inline-flex;font-feature-settings:"liga";height:1em;justify-content:center;letter-spacing:normal;line-height:1;position:relative;text-indent:0;text-align:center;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1em;min-width:1em}.v-icon--clickable{cursor:pointer}.v-icon--disabled{pointer-events:none;opacity:.38}.v-icon--size-x-small{font-size:calc(var(--v-icon-size-multiplier) * 1em)}.v-icon--size-small{font-size:calc(var(--v-icon-size-multiplier) * 1.25em)}.v-icon--size-default{font-size:calc(var(--v-icon-size-multiplier) * 1.5em)}.v-icon--size-large{font-size:calc(var(--v-icon-size-multiplier) * 1.75em)}.v-icon--size-x-large{font-size:calc(var(--v-icon-size-multiplier) * 2em)}.v-icon__svg{fill:currentColor;width:100%;height:100%}.v-icon--start{margin-inline-end:8px}.v-icon--end{margin-inline-start:8px}.v-progress-circular{align-items:center;display:inline-flex;justify-content:center;position:relative;vertical-align:middle}.v-progress-circular>svg{width:100%;height:100%;margin:auto;position:absolute;top:0;bottom:0;left:0;right:0;z-index:0}.v-progress-circular__content{align-items:center;display:flex;justify-content:center}.v-progress-circular__underlay{color:rgba(var(--v-border-color),var(--v-border-opacity));stroke:currentColor;z-index:1}.v-progress-circular__overlay{stroke:currentColor;transition:all .2s ease-in-out,stroke-width 0s;z-index:2}.v-progress-circular--size-x-small{height:16px;width:16px}.v-progress-circular--size-small{height:24px;width:24px}.v-progress-circular--size-default{height:32px;width:32px}.v-progress-circular--size-large{height:48px;width:48px}.v-progress-circular--size-x-large{height:64px;width:64px}.v-progress-circular--indeterminate>svg{animation:progress-circular-rotate 1.4s linear infinite;transform-origin:center center;transition:all .2s ease-in-out}.v-progress-circular--indeterminate .v-progress-circular__overlay{animation:progress-circular-dash 1.4s ease-in-out infinite,progress-circular-rotate 1.4s linear infinite;stroke-dasharray:25,200;stroke-dashoffset:0;stroke-linecap:round;transform-origin:center center;transform:rotate(-90deg)}.v-progress-circular--disable-shrink>svg{animation-duration:.7s}.v-progress-circular--disable-shrink .v-progress-circular__overlay{animation:none}.v-progress-circular--indeterminate:not(.v-progress-circular--visible)>svg,.v-progress-circular--indeterminate:not(.v-progress-circular--visible) .v-progress-circular__overlay{animation-play-state:paused!important}@keyframes progress-circular-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0px}50%{stroke-dasharray:100,200;stroke-dashoffset:-15px}to{stroke-dasharray:100,200;stroke-dashoffset:-124px}}@keyframes progress-circular-rotate{to{transform:rotate(270deg)}}.v-progress-linear{background:transparent;overflow:hidden;position:relative;transition:.2s cubic-bezier(.4,0,.2,1);width:100%}@media (forced-colors: active){.v-progress-linear{border:thin solid buttontext}}.v-progress-linear__background,.v-progress-linear__buffer{background:currentColor;bottom:0;left:0;opacity:var(--v-border-opacity);position:absolute;top:0;width:100%;transition-property:width,left,right;transition:inherit}@media (forced-colors: active){.v-progress-linear__buffer{background-color:highlight;opacity:.3}}.v-progress-linear__content{align-items:center;display:flex;height:100%;justify-content:center;left:0;pointer-events:none;position:absolute;top:0;width:100%}.v-progress-linear__determinate,.v-progress-linear__indeterminate{background:currentColor}@media (forced-colors: active){.v-progress-linear__determinate,.v-progress-linear__indeterminate{background-color:highlight}}.v-progress-linear__determinate{height:inherit;left:0;position:absolute;transition:inherit;transition-property:width,left,right}.v-progress-linear__indeterminate .long,.v-progress-linear__indeterminate .short{animation-play-state:paused;animation-duration:2.2s;animation-iteration-count:infinite;bottom:0;height:inherit;left:0;position:absolute;right:auto;top:0;width:auto}.v-progress-linear__indeterminate .long{animation-name:indeterminate-ltr}.v-progress-linear__indeterminate .short{animation-name:indeterminate-short-ltr}.v-progress-linear__stream{animation:stream .25s infinite linear;animation-play-state:paused;bottom:0;left:auto;opacity:.3;pointer-events:none;position:absolute;transition:inherit;transition-property:width,left,right}.v-progress-linear--reverse .v-progress-linear__background,.v-progress-linear--reverse .v-progress-linear__determinate,.v-progress-linear--reverse .v-progress-linear__content,.v-progress-linear--reverse .v-progress-linear__indeterminate .long,.v-progress-linear--reverse .v-progress-linear__indeterminate .short{left:auto;right:0}.v-progress-linear--reverse .v-progress-linear__indeterminate .long{animation-name:indeterminate-rtl}.v-progress-linear--reverse .v-progress-linear__indeterminate .short{animation-name:indeterminate-short-rtl}.v-progress-linear--reverse .v-progress-linear__stream{right:auto}.v-progress-linear--absolute,.v-progress-linear--fixed{left:0;z-index:1}.v-progress-linear--absolute{position:absolute}.v-progress-linear--fixed{position:fixed}.v-progress-linear--rounded{border-radius:9999px}.v-progress-linear--rounded.v-progress-linear--rounded-bar .v-progress-linear__determinate,.v-progress-linear--rounded.v-progress-linear--rounded-bar .v-progress-linear__indeterminate{border-radius:inherit}.v-progress-linear--striped .v-progress-linear__determinate{animation:progress-linear-stripes 1s infinite linear;background-image:linear-gradient(135deg,hsla(0,0%,100%,.25) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.25) 0,hsla(0,0%,100%,.25) 75%,transparent 0,transparent);background-repeat:repeat;background-size:var(--v-progress-linear-height)}.v-progress-linear--active .v-progress-linear__indeterminate .long,.v-progress-linear--active .v-progress-linear__indeterminate .short,.v-progress-linear--active .v-progress-linear__stream{animation-play-state:running}.v-progress-linear--rounded-bar .v-progress-linear__determinate,.v-progress-linear--rounded-bar .v-progress-linear__indeterminate,.v-progress-linear--rounded-bar .v-progress-linear__stream+.v-progress-linear__background{border-radius:9999px}.v-progress-linear--rounded-bar .v-progress-linear__determinate{border-start-start-radius:0;border-end-start-radius:0}@keyframes indeterminate-ltr{0%{left:-90%;right:100%}60%{left:-90%;right:100%}to{left:100%;right:-35%}}@keyframes indeterminate-rtl{0%{left:100%;right:-90%}60%{left:100%;right:-90%}to{left:-35%;right:100%}}@keyframes indeterminate-short-ltr{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}@keyframes indeterminate-short-rtl{0%{left:100%;right:-200%}60%{left:-8%;right:107%}to{left:-8%;right:107%}}@keyframes stream{to{transform:translate(var(--v-progress-linear-stream-to))}}@keyframes progress-linear-stripes{0%{background-position-x:var(--v-progress-linear-height)}}.v-ripple__container{color:inherit;border-radius:inherit;position:absolute;width:100%;height:100%;left:0;top:0;overflow:hidden;z-index:0;pointer-events:none;contain:strict}.v-ripple__animation{color:inherit;position:absolute;top:0;left:0;border-radius:50%;background:currentColor;opacity:0;pointer-events:none;overflow:hidden;will-change:transform,opacity}.v-ripple__animation--enter{transition:none;opacity:0}.v-ripple__animation--in{transition:transform .25s cubic-bezier(0,0,.2,1),opacity .1s cubic-bezier(0,0,.2,1);opacity:calc(.25 * var(--v-theme-overlay-multiplier))}.v-ripple__animation--out{transition:opacity .3s cubic-bezier(0,0,.2,1);opacity:0}.v-alert{display:grid;flex:1 1;grid-template-areas:"prepend content append close" ". content . .";grid-template-columns:max-content auto max-content max-content;position:relative;padding:16px;overflow:hidden;--v-border-color: currentColor}.v-alert--absolute{position:absolute}.v-alert--fixed{position:fixed}.v-alert--sticky{position:sticky}.v-alert{border-radius:4px}.v-alert--variant-plain,.v-alert--variant-outlined,.v-alert--variant-text,.v-alert--variant-tonal{background:transparent;color:inherit}.v-alert--variant-plain{opacity:.62}.v-alert--variant-plain:focus,.v-alert--variant-plain:hover{opacity:1}.v-alert--variant-plain .v-alert__overlay{display:none}.v-alert--variant-elevated,.v-alert--variant-flat{background:rgb(var(--v-theme-surface-light));color:rgba(var(--v-theme-on-surface-light),var(--v-high-emphasis-opacity))}.v-alert--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-alert--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-alert--variant-outlined{border:thin solid currentColor}.v-alert--variant-text .v-alert__overlay{background:currentColor}.v-alert--variant-tonal .v-alert__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-alert .v-alert__underlay{position:absolute}.v-alert--prominent{grid-template-areas:"prepend content append close" "prepend content . ."}.v-alert.v-alert--border{--v-border-opacity: .38}.v-alert.v-alert--border.v-alert--border-start{padding-inline-start:24px}.v-alert.v-alert--border.v-alert--border-end{padding-inline-end:24px}.v-alert--variant-plain{transition:.2s opacity cubic-bezier(.4,0,.2,1)}.v-alert--density-default{padding-bottom:16px;padding-top:16px}.v-alert--density-default.v-alert--border-top{padding-top:24px}.v-alert--density-default.v-alert--border-bottom{padding-bottom:24px}.v-alert--density-comfortable{padding-bottom:12px;padding-top:12px}.v-alert--density-comfortable.v-alert--border-top{padding-top:20px}.v-alert--density-comfortable.v-alert--border-bottom{padding-bottom:20px}.v-alert--density-compact{padding-bottom:8px;padding-top:8px}.v-alert--density-compact.v-alert--border-top{padding-top:16px}.v-alert--density-compact.v-alert--border-bottom{padding-bottom:16px}.v-alert__border{border-radius:inherit;bottom:0;left:0;opacity:var(--v-border-opacity);position:absolute;pointer-events:none;right:0;top:0;width:100%}.v-alert__border{border-color:currentColor;border-style:solid;border-width:0}.v-alert__border--border{border-width:8px;box-shadow:none}.v-alert--border-start .v-alert__border{border-inline-start-width:8px}.v-alert--border-end .v-alert__border{border-inline-end-width:8px}.v-alert--border-top .v-alert__border{border-top-width:8px}.v-alert--border-bottom .v-alert__border{border-bottom-width:8px}.v-alert__close{flex:0 1 auto;grid-area:close}.v-alert__content{align-self:center;grid-area:content;overflow:hidden}.v-alert__append,.v-alert__close{align-self:flex-start;margin-inline-start:16px}.v-alert__append{align-self:flex-start;grid-area:append}.v-alert__append+.v-alert__close{margin-inline-start:16px}.v-alert__prepend{align-self:flex-start;display:flex;align-items:center;grid-area:prepend;margin-inline-end:16px}.v-alert--prominent .v-alert__prepend{align-self:center}.v-alert__underlay{grid-area:none;position:absolute}.v-alert--border-start .v-alert__underlay{border-top-left-radius:0;border-bottom-left-radius:0}.v-alert--border-end .v-alert__underlay{border-top-right-radius:0;border-bottom-right-radius:0}.v-alert--border-top .v-alert__underlay{border-top-left-radius:0;border-top-right-radius:0}.v-alert--border-bottom .v-alert__underlay{border-bottom-left-radius:0;border-bottom-right-radius:0}.v-alert-title{align-items:center;align-self:center;display:flex;font-size:1.25rem;font-weight:500;-webkit-hyphens:auto;hyphens:auto;letter-spacing:.0125em;line-height:1.75rem;overflow-wrap:normal;text-transform:none;word-break:normal;word-wrap:break-word}.v-autocomplete .v-field .v-text-field__prefix,.v-autocomplete .v-field .v-text-field__suffix,.v-autocomplete .v-field .v-field__input,.v-autocomplete .v-field.v-field{cursor:text}.v-autocomplete .v-field .v-field__input>input{flex:1 1}.v-autocomplete .v-field input{min-width:64px}.v-autocomplete .v-field:not(.v-field--focused) input{min-width:0}.v-autocomplete .v-field--dirty .v-autocomplete__selection{margin-inline-end:2px}.v-autocomplete .v-autocomplete__selection-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-autocomplete__content{overflow:hidden}.v-autocomplete__content{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-autocomplete__content{border-radius:4px}.v-autocomplete__mask{background:rgb(var(--v-theme-surface-light))}.v-autocomplete__selection{display:inline-flex;align-items:center;height:1.5rem;letter-spacing:inherit;line-height:inherit;max-width:calc(100% - 4px)}.v-autocomplete__selection:first-child{margin-inline-start:0}.v-autocomplete--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-autocomplete--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-autocomplete--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-autocomplete--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-autocomplete--selecting-index .v-autocomplete__selection{opacity:var(--v-medium-emphasis-opacity)}.v-autocomplete--selecting-index .v-autocomplete__selection--selected{opacity:1}.v-autocomplete--selecting-index .v-field__input>input{caret-color:transparent}.v-autocomplete--single:not(.v-autocomplete--selection-slot).v-text-field input{flex:1 1;position:absolute;left:0;right:0;width:100%;padding-inline:inherit}.v-autocomplete--single:not(.v-autocomplete--selection-slot) .v-field--active input{transition:none}.v-autocomplete--single:not(.v-autocomplete--selection-slot) .v-field--dirty:not(.v-field--focused) input{opacity:0}.v-autocomplete--single:not(.v-autocomplete--selection-slot) .v-field--focused .v-autocomplete__selection{opacity:0}.v-autocomplete__menu-icon{margin-inline-start:4px;transition:.2s cubic-bezier(.4,0,.2,1)}.v-autocomplete--active-menu .v-autocomplete__menu-icon{opacity:var(--v-high-emphasis-opacity);transform:rotate(180deg)}.v-avatar{flex:none;align-items:center;display:inline-flex;justify-content:center;line-height:normal;overflow:hidden;position:relative;text-align:center;transition:.2s cubic-bezier(.4,0,.2,1);transition-property:width,height;vertical-align:middle}.v-avatar.v-avatar--size-x-small{--v-avatar-height: 24px}.v-avatar.v-avatar--size-small{--v-avatar-height: 32px}.v-avatar.v-avatar--size-default{--v-avatar-height: 40px}.v-avatar.v-avatar--size-large{--v-avatar-height: 48px}.v-avatar.v-avatar--size-x-large{--v-avatar-height: 56px}.v-avatar.v-avatar--density-default{height:calc(var(--v-avatar-height) + 0px);width:calc(var(--v-avatar-height) + 0px)}.v-avatar.v-avatar--density-comfortable{height:calc(var(--v-avatar-height) + -4px);width:calc(var(--v-avatar-height) + -4px)}.v-avatar.v-avatar--density-compact{height:calc(var(--v-avatar-height) + -8px);width:calc(var(--v-avatar-height) + -8px)}.v-avatar{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-avatar--border{border-width:thin;box-shadow:none}.v-avatar{border-radius:50%}.v-avatar--variant-plain,.v-avatar--variant-outlined,.v-avatar--variant-text,.v-avatar--variant-tonal{background:transparent;color:inherit}.v-avatar--variant-plain{opacity:.62}.v-avatar--variant-plain:focus,.v-avatar--variant-plain:hover{opacity:1}.v-avatar--variant-plain .v-avatar__overlay{display:none}.v-avatar--variant-elevated,.v-avatar--variant-flat{background:var(--v-theme-surface);color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity))}.v-avatar--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-avatar--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-avatar--variant-outlined{border:thin solid currentColor}.v-avatar--variant-text .v-avatar__overlay{background:currentColor}.v-avatar--variant-tonal .v-avatar__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-avatar .v-avatar__underlay{position:absolute}.v-avatar--rounded{border-radius:4px}.v-avatar--start{margin-inline-end:8px}.v-avatar--end{margin-inline-start:8px}.v-avatar .v-img{height:100%;width:100%}.v-checkbox.v-input{flex:0 1 auto}.v-checkbox .v-selection-control{min-height:var(--v-input-control-height)}.v-selection-control{align-items:center;contain:layout;display:flex;flex:1 0;grid-area:control;position:relative;-webkit-user-select:none;user-select:none}.v-selection-control .v-label{white-space:normal;word-break:break-word;height:100%}.v-selection-control--disabled{opacity:var(--v-disabled-opacity);pointer-events:none}.v-selection-control--error .v-label,.v-selection-control--disabled .v-label{opacity:1}.v-selection-control--error:not(.v-selection-control--disabled) .v-label{color:rgb(var(--v-theme-error))}.v-selection-control--inline{display:inline-flex;flex:0 0 auto;min-width:0;max-width:100%}.v-selection-control--inline .v-label{width:auto}.v-selection-control--density-default{--v-selection-control-size: 40px}.v-selection-control--density-comfortable{--v-selection-control-size: 36px}.v-selection-control--density-compact{--v-selection-control-size: 28px}.v-selection-control__wrapper{width:var(--v-selection-control-size);height:var(--v-selection-control-size);display:inline-flex;align-items:center;position:relative;justify-content:center;flex:none}.v-selection-control__input{width:var(--v-selection-control-size);height:var(--v-selection-control-size);align-items:center;display:flex;flex:none;justify-content:center;position:relative;border-radius:50%}.v-selection-control__input input{cursor:pointer;position:absolute;left:0;top:0;width:100%;height:100%;opacity:0}.v-selection-control__input:before{border-radius:100%;background-color:currentColor;opacity:0;pointer-events:none}.v-selection-control__input:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-selection-control__input:hover:before{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-selection-control__input>.v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-selection-control--disabled .v-selection-control__input>.v-icon,.v-selection-control--dirty .v-selection-control__input>.v-icon,.v-selection-control--error .v-selection-control__input>.v-icon{opacity:1}.v-selection-control--error:not(.v-selection-control--disabled) .v-selection-control__input>.v-icon{color:rgb(var(--v-theme-error))}.v-selection-control--focus-visible .v-selection-control__input:before{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}.v-label{align-items:center;color:inherit;display:inline-flex;font-size:1rem;letter-spacing:.009375em;min-width:0;opacity:var(--v-medium-emphasis-opacity);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-label--clickable{cursor:pointer}.v-selection-control-group{grid-area:control;display:flex;flex-direction:column}.v-selection-control-group--inline{flex-direction:row;flex-wrap:wrap}.v-input{display:grid;flex:1 1 auto;font-size:1rem;font-weight:400;line-height:1.5}.v-input--disabled{pointer-events:none}.v-input--density-default{--v-input-control-height: 56px;--v-input-padding-top: 16px}.v-input--density-comfortable{--v-input-control-height: 48px;--v-input-padding-top: 12px}.v-input--density-compact{--v-input-control-height: 40px;--v-input-padding-top: 8px}.v-input--vertical{grid-template-areas:"append" "control" "prepend";grid-template-rows:max-content auto max-content;grid-template-columns:min-content}.v-input--vertical .v-input__prepend{margin-block-start:16px}.v-input--vertical .v-input__append{margin-block-end:16px}.v-input--horizontal{grid-template-areas:"prepend control append" "a messages b";grid-template-columns:max-content minmax(0,1fr) max-content;grid-template-rows:auto auto}.v-input--horizontal .v-input__prepend{margin-inline-end:16px}.v-input--horizontal .v-input__append{margin-inline-start:16px}.v-input__details{align-items:flex-end;display:flex;font-size:.75rem;font-weight:400;grid-area:messages;letter-spacing:.0333333333em;line-height:normal;min-height:22px;padding-top:6px;overflow:hidden;justify-content:space-between}.v-input__details>.v-icon,.v-input__prepend>.v-icon,.v-input__append>.v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-input--disabled .v-input__details>.v-icon,.v-input--disabled .v-input__details .v-messages,.v-input--error .v-input__details>.v-icon,.v-input--error .v-input__details .v-messages,.v-input--disabled .v-input__prepend>.v-icon,.v-input--disabled .v-input__prepend .v-messages,.v-input--error .v-input__prepend>.v-icon,.v-input--error .v-input__prepend .v-messages,.v-input--disabled .v-input__append>.v-icon,.v-input--disabled .v-input__append .v-messages,.v-input--error .v-input__append>.v-icon,.v-input--error .v-input__append .v-messages{opacity:1}.v-input--disabled .v-input__details,.v-input--disabled .v-input__prepend,.v-input--disabled .v-input__append{opacity:var(--v-disabled-opacity)}.v-input--error:not(.v-input--disabled) .v-input__details>.v-icon,.v-input--error:not(.v-input--disabled) .v-input__details .v-messages,.v-input--error:not(.v-input--disabled) .v-input__prepend>.v-icon,.v-input--error:not(.v-input--disabled) .v-input__prepend .v-messages,.v-input--error:not(.v-input--disabled) .v-input__append>.v-icon,.v-input--error:not(.v-input--disabled) .v-input__append .v-messages{color:rgb(var(--v-theme-error))}.v-input__prepend,.v-input__append{display:flex;align-items:flex-start;padding-top:var(--v-input-padding-top)}.v-input--center-affix .v-input__prepend,.v-input--center-affix .v-input__append{align-items:center;padding-top:0}.v-input__prepend{grid-area:prepend}.v-input__append{grid-area:append}.v-input__control{display:flex;grid-area:control}.v-input--hide-spin-buttons input::-webkit-outer-spin-button,.v-input--hide-spin-buttons input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.v-input--hide-spin-buttons input[type=number]{-moz-appearance:textfield}.v-input--plain-underlined .v-input__prepend,.v-input--plain-underlined .v-input__append{align-items:flex-start}.v-input--density-default.v-input--plain-underlined .v-input__prepend,.v-input--density-default.v-input--plain-underlined .v-input__append{padding-top:calc(var(--v-input-padding-top) + 4px)}.v-input--density-comfortable.v-input--plain-underlined .v-input__prepend,.v-input--density-comfortable.v-input--plain-underlined .v-input__append{padding-top:calc(var(--v-input-padding-top) + 2px)}.v-input--density-compact.v-input--plain-underlined .v-input__prepend,.v-input--density-compact.v-input--plain-underlined .v-input__append{padding-top:calc(var(--v-input-padding-top) + 0px)}.v-messages{flex:1 1 auto;font-size:12px;min-height:14px;min-width:1px;opacity:var(--v-medium-emphasis-opacity);position:relative}.v-messages__message{line-height:12px;word-break:break-word;overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;transition-duration:.15s}.v-chip{align-items:center;display:inline-flex;font-weight:400;max-width:100%;min-width:0;overflow:hidden;position:relative;text-decoration:none;white-space:nowrap;vertical-align:middle}.v-chip .v-icon{--v-icon-size-multiplier: .8571428571}.v-chip.v-chip--size-x-small{--v-chip-size: .625rem;--v-chip-height: 20px;font-size:.625rem;padding:0 8px}.v-chip.v-chip--size-x-small .v-avatar{--v-avatar-height: 14px}.v-chip--pill.v-chip.v-chip--size-x-small .v-avatar{--v-avatar-height: 20px}.v-chip.v-chip--size-x-small .v-avatar--start{margin-inline-start:-5.6px;margin-inline-end:4px}.v-chip--pill.v-chip.v-chip--size-x-small .v-avatar--start{margin-inline-start:-8px}.v-chip.v-chip--size-x-small .v-avatar--end{margin-inline-start:4px;margin-inline-end:-5.6px}.v-chip--pill.v-chip.v-chip--size-x-small .v-avatar--end{margin-inline-end:-8px}.v-chip--pill.v-chip.v-chip--size-x-small .v-avatar--end+.v-chip__close{margin-inline-start:12px}.v-chip.v-chip--size-x-small .v-icon--start,.v-chip.v-chip--size-x-small .v-chip__filter{margin-inline-start:-4px;margin-inline-end:4px}.v-chip.v-chip--size-x-small .v-icon--end,.v-chip.v-chip--size-x-small .v-chip__close{margin-inline-start:4px;margin-inline-end:-4px}.v-chip.v-chip--size-x-small .v-icon--end+.v-chip__close,.v-chip.v-chip--size-x-small .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-x-small .v-chip__append+.v-chip__close{margin-inline-start:8px}.v-chip.v-chip--size-small{--v-chip-size: .75rem;--v-chip-height: 26px;font-size:.75rem;padding:0 10px}.v-chip.v-chip--size-small .v-avatar{--v-avatar-height: 20px}.v-chip--pill.v-chip.v-chip--size-small .v-avatar{--v-avatar-height: 26px}.v-chip.v-chip--size-small .v-avatar--start{margin-inline-start:-7px;margin-inline-end:5px}.v-chip--pill.v-chip.v-chip--size-small .v-avatar--start{margin-inline-start:-10px}.v-chip.v-chip--size-small .v-avatar--end{margin-inline-start:5px;margin-inline-end:-7px}.v-chip--pill.v-chip.v-chip--size-small .v-avatar--end{margin-inline-end:-10px}.v-chip--pill.v-chip.v-chip--size-small .v-avatar--end+.v-chip__close{margin-inline-start:15px}.v-chip.v-chip--size-small .v-icon--start,.v-chip.v-chip--size-small .v-chip__filter{margin-inline-start:-5px;margin-inline-end:5px}.v-chip.v-chip--size-small .v-icon--end,.v-chip.v-chip--size-small .v-chip__close{margin-inline-start:5px;margin-inline-end:-5px}.v-chip.v-chip--size-small .v-icon--end+.v-chip__close,.v-chip.v-chip--size-small .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-small .v-chip__append+.v-chip__close{margin-inline-start:10px}.v-chip.v-chip--size-default{--v-chip-size: .875rem;--v-chip-height: 32px;font-size:.875rem;padding:0 12px}.v-chip.v-chip--size-default .v-avatar{--v-avatar-height: 26px}.v-chip--pill.v-chip.v-chip--size-default .v-avatar{--v-avatar-height: 32px}.v-chip.v-chip--size-default .v-avatar--start{margin-inline-start:-8.4px;margin-inline-end:6px}.v-chip--pill.v-chip.v-chip--size-default .v-avatar--start{margin-inline-start:-12px}.v-chip.v-chip--size-default .v-avatar--end{margin-inline-start:6px;margin-inline-end:-8.4px}.v-chip--pill.v-chip.v-chip--size-default .v-avatar--end{margin-inline-end:-12px}.v-chip--pill.v-chip.v-chip--size-default .v-avatar--end+.v-chip__close{margin-inline-start:18px}.v-chip.v-chip--size-default .v-icon--start,.v-chip.v-chip--size-default .v-chip__filter{margin-inline-start:-6px;margin-inline-end:6px}.v-chip.v-chip--size-default .v-icon--end,.v-chip.v-chip--size-default .v-chip__close{margin-inline-start:6px;margin-inline-end:-6px}.v-chip.v-chip--size-default .v-icon--end+.v-chip__close,.v-chip.v-chip--size-default .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-default .v-chip__append+.v-chip__close{margin-inline-start:12px}.v-chip.v-chip--size-large{--v-chip-size: 1rem;--v-chip-height: 38px;font-size:1rem;padding:0 14px}.v-chip.v-chip--size-large .v-avatar{--v-avatar-height: 32px}.v-chip--pill.v-chip.v-chip--size-large .v-avatar{--v-avatar-height: 38px}.v-chip.v-chip--size-large .v-avatar--start{margin-inline-start:-9.8px;margin-inline-end:7px}.v-chip--pill.v-chip.v-chip--size-large .v-avatar--start{margin-inline-start:-14px}.v-chip.v-chip--size-large .v-avatar--end{margin-inline-start:7px;margin-inline-end:-9.8px}.v-chip--pill.v-chip.v-chip--size-large .v-avatar--end{margin-inline-end:-14px}.v-chip--pill.v-chip.v-chip--size-large .v-avatar--end+.v-chip__close{margin-inline-start:21px}.v-chip.v-chip--size-large .v-icon--start,.v-chip.v-chip--size-large .v-chip__filter{margin-inline-start:-7px;margin-inline-end:7px}.v-chip.v-chip--size-large .v-icon--end,.v-chip.v-chip--size-large .v-chip__close{margin-inline-start:7px;margin-inline-end:-7px}.v-chip.v-chip--size-large .v-icon--end+.v-chip__close,.v-chip.v-chip--size-large .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-large .v-chip__append+.v-chip__close{margin-inline-start:14px}.v-chip.v-chip--size-x-large{--v-chip-size: 1.125rem;--v-chip-height: 44px;font-size:1.125rem;padding:0 17px}.v-chip.v-chip--size-x-large .v-avatar{--v-avatar-height: 38px}.v-chip--pill.v-chip.v-chip--size-x-large .v-avatar{--v-avatar-height: 44px}.v-chip.v-chip--size-x-large .v-avatar--start{margin-inline-start:-11.9px;margin-inline-end:8.5px}.v-chip--pill.v-chip.v-chip--size-x-large .v-avatar--start{margin-inline-start:-17px}.v-chip.v-chip--size-x-large .v-avatar--end{margin-inline-start:8.5px;margin-inline-end:-11.9px}.v-chip--pill.v-chip.v-chip--size-x-large .v-avatar--end{margin-inline-end:-17px}.v-chip--pill.v-chip.v-chip--size-x-large .v-avatar--end+.v-chip__close{margin-inline-start:25.5px}.v-chip.v-chip--size-x-large .v-icon--start,.v-chip.v-chip--size-x-large .v-chip__filter{margin-inline-start:-8.5px;margin-inline-end:8.5px}.v-chip.v-chip--size-x-large .v-icon--end,.v-chip.v-chip--size-x-large .v-chip__close{margin-inline-start:8.5px;margin-inline-end:-8.5px}.v-chip.v-chip--size-x-large .v-icon--end+.v-chip__close,.v-chip.v-chip--size-x-large .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-x-large .v-chip__append+.v-chip__close{margin-inline-start:17px}.v-chip.v-chip--density-default{height:calc(var(--v-chip-height) + 0px)}.v-chip.v-chip--density-comfortable{height:calc(var(--v-chip-height) + -4px)}.v-chip.v-chip--density-compact{height:calc(var(--v-chip-height) + -8px)}.v-chip{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-chip:hover>.v-chip__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-chip:focus-visible>.v-chip__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-chip:focus>.v-chip__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-chip--active>.v-chip__overlay,.v-chip[aria-haspopup=menu][aria-expanded=true]>.v-chip__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-chip--active:hover>.v-chip__overlay,.v-chip[aria-haspopup=menu][aria-expanded=true]:hover>.v-chip__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-chip--active:focus-visible>.v-chip__overlay,.v-chip[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-chip__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-chip--active:focus>.v-chip__overlay,.v-chip[aria-haspopup=menu][aria-expanded=true]:focus>.v-chip__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-chip{border-radius:9999px}.v-chip--variant-plain,.v-chip--variant-outlined,.v-chip--variant-text,.v-chip--variant-tonal{background:transparent;color:inherit}.v-chip--variant-plain{opacity:.26}.v-chip--variant-plain:focus,.v-chip--variant-plain:hover{opacity:1}.v-chip--variant-plain .v-chip__overlay{display:none}.v-chip--variant-elevated,.v-chip--variant-flat{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-chip--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-chip--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-chip--variant-outlined{border:thin solid currentColor}.v-chip--variant-text .v-chip__overlay{background:currentColor}.v-chip--variant-tonal .v-chip__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-chip .v-chip__underlay{position:absolute}.v-chip--border{border-width:thin}.v-chip--link{cursor:pointer}.v-chip--link,.v-chip--filter{-webkit-user-select:none;user-select:none}.v-chip__content{align-items:center;display:inline-flex}.v-autocomplete__selection .v-chip__content,.v-combobox__selection .v-chip__content,.v-select__selection .v-chip__content{overflow:hidden}.v-chip__filter,.v-chip__prepend,.v-chip__append,.v-chip__close{align-items:center;display:inline-flex}.v-chip__close{cursor:pointer;flex:0 1 auto;font-size:18px;max-height:18px;max-width:18px;-webkit-user-select:none;user-select:none}.v-chip__close .v-icon{font-size:inherit}.v-chip__filter{transition:.15s cubic-bezier(.4,0,.2,1)}.v-chip__overlay{background-color:currentColor;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .2s ease-in-out}.v-chip__overlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-chip--disabled{opacity:.3;pointer-events:none;-webkit-user-select:none;user-select:none}.v-chip--label{border-radius:4px}.v-chip-group{display:flex;max-width:100%;min-width:0;overflow-x:auto;padding:4px 0}.v-chip-group .v-chip{margin:4px 8px 4px 0}.v-chip-group .v-chip.v-chip--selected:not(.v-chip--disabled) .v-chip__overlay{opacity:var(--v-activated-opacity)}.v-chip-group--column .v-slide-group__content{white-space:normal;flex-wrap:wrap;max-width:100%}.v-slide-group{display:flex;overflow:hidden}.v-slide-group__next,.v-slide-group__prev{align-items:center;display:flex;flex:0 1 52px;justify-content:center;min-width:52px;cursor:pointer}.v-slide-group__next--disabled,.v-slide-group__prev--disabled{pointer-events:none;opacity:var(--v-disabled-opacity)}.v-slide-group__content{display:flex;flex:1 0 auto;position:relative;transition:.2s all cubic-bezier(.4,0,.2,1);white-space:nowrap}.v-slide-group__content>*{white-space:initial}.v-slide-group__container{contain:content;display:flex;flex:1 1 auto;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;scrollbar-color:rgba(0,0,0,0)}.v-slide-group__container::-webkit-scrollbar{display:none}.v-slide-group--vertical{max-height:inherit}.v-slide-group--vertical,.v-slide-group--vertical .v-slide-group__container,.v-slide-group--vertical .v-slide-group__content{flex-direction:column}.v-slide-group--vertical .v-slide-group__container{overflow-x:hidden;overflow-y:auto}.v-list{overflow:auto;padding:8px 0;position:relative;outline:none}.v-list{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-list--border{border-width:thin;box-shadow:none}.v-list{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-list{border-radius:0}.v-list{background:rgba(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-list--disabled{pointer-events:none;-webkit-user-select:none;user-select:none}.v-list--nav{padding-inline:8px}.v-list--rounded{border-radius:4px}.v-list--subheader{padding-top:0}.v-list-img{border-radius:inherit;display:flex;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:-1}.v-list-subheader{align-items:center;background:inherit;color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity));display:flex;font-size:.875rem;font-weight:400;line-height:1.375rem;padding-inline-end:16px;min-height:40px;transition:.2s min-height cubic-bezier(.4,0,.2,1)}.v-list-subheader__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-list--density-default .v-list-subheader{min-height:40px;padding-inline-start:calc(16px + var(--indent-padding))!important}.v-list--density-comfortable .v-list-subheader{min-height:36px;padding-inline-start:calc(16px + var(--indent-padding))!important}.v-list--density-compact .v-list-subheader{min-height:32px;padding-inline-start:calc(16px + var(--indent-padding))!important}.v-list-subheader--inset{--indent-padding: 56px}.v-list--nav .v-list-subheader{font-size:.75rem}.v-list-subheader--sticky{background:inherit;left:0;position:sticky;top:0;z-index:1}.v-list__overlay{background-color:currentColor;border-radius:inherit;bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .2s ease-in-out}.v-list-item{align-items:center;display:grid;flex:none;grid-template-areas:"prepend content append";grid-template-columns:max-content 1fr auto;outline:none;max-width:100%;padding:4px 16px;position:relative;text-decoration:none}.v-list-item{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-list-item--border{border-width:thin;box-shadow:none}.v-list-item:hover>.v-list-item__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-list-item:focus-visible>.v-list-item__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-list-item:focus>.v-list-item__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-list-item--active>.v-list-item__overlay,.v-list-item[aria-haspopup=menu][aria-expanded=true]>.v-list-item__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-list-item--active:hover>.v-list-item__overlay,.v-list-item[aria-haspopup=menu][aria-expanded=true]:hover>.v-list-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-list-item--active:focus-visible>.v-list-item__overlay,.v-list-item[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-list-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-list-item--active:focus>.v-list-item__overlay,.v-list-item[aria-haspopup=menu][aria-expanded=true]:focus>.v-list-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-list-item{border-radius:0}.v-list-item--variant-plain,.v-list-item--variant-outlined,.v-list-item--variant-text,.v-list-item--variant-tonal{background:transparent;color:inherit}.v-list-item--variant-plain{opacity:.62}.v-list-item--variant-plain:focus,.v-list-item--variant-plain:hover{opacity:1}.v-list-item--variant-plain .v-list-item__overlay{display:none}.v-list-item--variant-elevated,.v-list-item--variant-flat{background:rgba(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-list-item--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-list-item--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-list-item--variant-outlined{border:thin solid currentColor}.v-list-item--variant-text .v-list-item__overlay{background:currentColor}.v-list-item--variant-tonal .v-list-item__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-list-item .v-list-item__underlay{position:absolute}@supports selector(:focus-visible){.v-list-item:after{pointer-events:none;border:2px solid currentColor;border-radius:4px;opacity:0;transition:opacity .2s ease-in-out}.v-list-item:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-list-item:focus-visible:after{opacity:calc(.15 * var(--v-theme-overlay-multiplier))}}.v-list-item__prepend>.v-badge .v-icon,.v-list-item__prepend>.v-icon,.v-list-item__append>.v-badge .v-icon,.v-list-item__append>.v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-list-item--active .v-list-item__prepend>.v-badge .v-icon,.v-list-item--active .v-list-item__prepend>.v-icon,.v-list-item--active .v-list-item__append>.v-badge .v-icon,.v-list-item--active .v-list-item__append>.v-icon{opacity:1}.v-list-item--active:not(.v-list-item--link) .v-list-item__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-list-item--rounded{border-radius:4px}.v-list-item--disabled{pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.6}.v-list-item--link{cursor:pointer}.v-navigation-drawer--rail:not(.v-navigation-drawer--expand-on-hover) .v-list-item .v-avatar,.v-navigation-drawer--rail.v-navigation-drawer--expand-on-hover:not(.v-navigation-drawer--is-hovering) .v-list-item .v-avatar{--v-avatar-height: 24px}.v-list-item__prepend{align-items:center;align-self:center;display:flex;grid-area:prepend}.v-list-item__prepend>.v-badge~.v-list-item__spacer,.v-list-item__prepend>.v-icon~.v-list-item__spacer,.v-list-item__prepend>.v-tooltip~.v-list-item__spacer{width:32px}.v-list-item__prepend>.v-avatar~.v-list-item__spacer,.v-list-item__prepend>.v-badge:is(:has(.v-avatar))~.v-list-item__spacer{width:16px}.v-list-item--slim .v-list-item__prepend>.v-badge~.v-list-item__spacer,.v-list-item--slim .v-list-item__prepend>.v-icon~.v-list-item__spacer,.v-list-item--slim .v-list-item__prepend>.v-tooltip~.v-list-item__spacer{width:20px}.v-list-item--slim .v-list-item__prepend>.v-avatar~.v-list-item__spacer,.v-list-item--slim .v-list-item__prepend>.v-badge:is(:has(.v-avatar))~.v-list-item__spacer{width:4px}.v-list-item--slim .v-list-item__prepend>.v-list-item-action~.v-list-item__spacer{width:4px}.v-list-item--three-line .v-list-item__prepend{align-self:start}.v-list-item__append{align-self:center;display:flex;align-items:center;grid-area:append}.v-list-item__append .v-list-item__spacer{order:-1;transition:.15s width cubic-bezier(.4,0,.2,1)}.v-list-item__append>.v-badge~.v-list-item__spacer,.v-list-item__append>.v-icon~.v-list-item__spacer,.v-list-item__append>.v-tooltip~.v-list-item__spacer{width:32px}.v-list-item__append>.v-avatar~.v-list-item__spacer,.v-list-item__append>.v-badge:is(:has(.v-avatar))~.v-list-item__spacer{width:16px}.v-list-item__append>.v-list-item-action~.v-list-item__spacer{width:16px}.v-list-item--slim .v-list-item__append>.v-badge~.v-list-item__spacer,.v-list-item--slim .v-list-item__append>.v-icon~.v-list-item__spacer,.v-list-item--slim .v-list-item__append>.v-tooltip~.v-list-item__spacer{width:20px}.v-list-item--slim .v-list-item__append>.v-avatar~.v-list-item__spacer,.v-list-item--slim .v-list-item__append>.v-badge:is(:has(.v-avatar))~.v-list-item__spacer{width:4px}.v-list-item--slim .v-list-item__append>.v-list-item-action~.v-list-item__spacer{width:4px}.v-list-item--three-line .v-list-item__append{align-self:start}.v-list-item__content{align-self:center;grid-area:content;overflow:hidden}.v-list-item-action{align-self:center;display:flex;align-items:center;flex:none;transition:inherit;transition-property:height,width}.v-list-item-action--start{margin-inline-end:8px;margin-inline-start:-8px}.v-list-item-action--end{margin-inline-start:8px;margin-inline-end:-8px}.v-list-item-media{margin-top:0;margin-bottom:0}.v-list-item-media--start{margin-inline-end:16px}.v-list-item-media--end{margin-inline-start:16px}.v-list-item--two-line .v-list-item-media{margin-top:-4px;margin-bottom:-4px}.v-list-item--three-line .v-list-item-media{margin-top:0;margin-bottom:0}.v-list-item-subtitle{-webkit-box-orient:vertical;display:-webkit-box;opacity:var(--v-list-item-subtitle-opacity, var(--v-medium-emphasis-opacity));overflow:hidden;padding:0;text-overflow:ellipsis;overflow-wrap:break-word;word-break:initial}.v-list-item--one-line .v-list-item-subtitle{-webkit-line-clamp:1}.v-list-item--two-line .v-list-item-subtitle{-webkit-line-clamp:2}.v-list-item--three-line .v-list-item-subtitle{-webkit-line-clamp:3}.v-list-item-subtitle{font-size:.875rem;font-weight:400;letter-spacing:.0178571429em;line-height:1rem;text-transform:none}.v-list-item--nav .v-list-item-subtitle{font-size:.75rem;font-weight:400;letter-spacing:.0178571429em;line-height:1rem}.v-list-item-title{-webkit-hyphens:auto;hyphens:auto;overflow-wrap:normal;overflow:hidden;padding:0;white-space:nowrap;text-overflow:ellipsis;word-break:normal;word-wrap:break-word}.v-list-item-title{font-size:1rem;font-weight:400;letter-spacing:.009375em;line-height:1.5;text-transform:none}.v-list-item--nav .v-list-item-title{font-size:.8125rem;font-weight:500;letter-spacing:normal;line-height:1rem}.v-list-item--density-default{min-height:40px}.v-list-item--density-default.v-list-item--one-line{min-height:48px;padding-top:4px;padding-bottom:4px}.v-list-item--density-default.v-list-item--two-line{min-height:64px;padding-top:12px;padding-bottom:12px}.v-list-item--density-default.v-list-item--three-line{min-height:88px;padding-top:16px;padding-bottom:16px}.v-list-item--density-default.v-list-item--three-line .v-list-item__prepend,.v-list-item--density-default.v-list-item--three-line .v-list-item__append{padding-top:8px}.v-list-item--density-default:not(.v-list-item--nav).v-list-item--one-line{padding-inline:16px}.v-list-item--density-default:not(.v-list-item--nav).v-list-item--two-line{padding-inline:16px}.v-list-item--density-default:not(.v-list-item--nav).v-list-item--three-line{padding-inline:16px}.v-list-item--density-comfortable{min-height:36px}.v-list-item--density-comfortable.v-list-item--one-line{min-height:44px}.v-list-item--density-comfortable.v-list-item--two-line{min-height:60px;padding-top:8px;padding-bottom:8px}.v-list-item--density-comfortable.v-list-item--three-line{min-height:84px;padding-top:12px;padding-bottom:12px}.v-list-item--density-comfortable.v-list-item--three-line .v-list-item__prepend,.v-list-item--density-comfortable.v-list-item--three-line .v-list-item__append{padding-top:6px}.v-list-item--density-comfortable:not(.v-list-item--nav).v-list-item--one-line{padding-inline:16px}.v-list-item--density-comfortable:not(.v-list-item--nav).v-list-item--two-line{padding-inline:16px}.v-list-item--density-comfortable:not(.v-list-item--nav).v-list-item--three-line{padding-inline:16px}.v-list-item--density-compact{min-height:32px}.v-list-item--density-compact.v-list-item--one-line{min-height:40px}.v-list-item--density-compact.v-list-item--two-line{min-height:56px;padding-top:4px;padding-bottom:4px}.v-list-item--density-compact.v-list-item--three-line{min-height:80px;padding-top:8px;padding-bottom:8px}.v-list-item--density-compact.v-list-item--three-line .v-list-item__prepend,.v-list-item--density-compact.v-list-item--three-line .v-list-item__append{padding-top:4px}.v-list-item--density-compact:not(.v-list-item--nav).v-list-item--one-line{padding-inline:16px}.v-list-item--density-compact:not(.v-list-item--nav).v-list-item--two-line{padding-inline:16px}.v-list-item--density-compact:not(.v-list-item--nav).v-list-item--three-line{padding-inline:16px}.v-list-item--nav{padding-inline:8px}.v-list .v-list-item--nav:not(:only-child){margin-bottom:4px}.v-list-item__underlay{position:absolute}.v-list-item__overlay{background-color:currentColor;border-radius:inherit;bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .2s ease-in-out}.v-list-item--active.v-list-item--variant-elevated .v-list-item__overlay{--v-theme-overlay-multiplier: 0}.v-list{--indent-padding: 0px}.v-list--nav{--indent-padding: -8px}.v-list-group{--list-indent-size: 16px;--parent-padding: var(--indent-padding);--prepend-width: 40px}.v-list--slim .v-list-group{--prepend-width: 28px}.v-list-group--fluid{--list-indent-size: 0px}.v-list-group--prepend{--parent-padding: calc(var(--indent-padding) + var(--prepend-width))}.v-list-group--fluid.v-list-group--prepend{--parent-padding: var(--indent-padding)}.v-list-group__items{--indent-padding: calc(var(--parent-padding) + var(--list-indent-size))}.v-list-group__items .v-list-item{padding-inline-start:calc(16px + var(--indent-padding))!important}.v-list-group__header:not(.v-treeview-item--activatable-group-activator).v-list-item--active:not(:focus-visible) .v-list-item__overlay{opacity:0}.v-list-group__header:not(.v-treeview-item--activatable-group-activator).v-list-item--active:hover .v-list-item__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-divider{display:block;flex:1 1 100%;height:0px;max-height:0px;opacity:var(--v-border-opacity);transition:inherit}.v-divider{border-style:solid;border-width:thin 0 0 0}.v-divider--vertical{align-self:stretch;border-width:0 thin 0 0;display:inline-flex;height:auto;margin-left:-1px;max-height:100%;max-width:0px;vertical-align:text-bottom;width:0px}.v-divider--inset:not(.v-divider--vertical){max-width:calc(100% - 72px);margin-inline-start:72px}.v-divider--inset.v-divider--vertical{margin-bottom:8px;margin-top:8px;max-height:calc(100% - 16px)}.v-divider__content{padding:0 16px;text-wrap:nowrap}.v-divider__wrapper--vertical .v-divider__content{padding:4px 0}.v-divider__wrapper{display:flex;align-items:center;justify-content:center}.v-divider__wrapper--vertical{flex-direction:column;height:100%}.v-divider__wrapper--vertical .v-divider{margin:0 auto}.v-menu>.v-overlay__content{display:flex;flex-direction:column}.v-menu>.v-overlay__content{border-radius:4px}.v-menu>.v-overlay__content>.v-card,.v-menu>.v-overlay__content>.v-sheet,.v-menu>.v-overlay__content>.v-list{background:rgb(var(--v-theme-surface));border-radius:inherit;overflow:auto;height:100%}.v-menu>.v-overlay__content>.v-card,.v-menu>.v-overlay__content>.v-sheet,.v-menu>.v-overlay__content>.v-list{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-overlay-container{contain:layout;left:0;pointer-events:none;position:absolute;top:0;display:contents}.v-overlay-scroll-blocked{padding-inline-end:var(--v-scrollbar-offset)}.v-overlay-scroll-blocked:not(html){overflow-y:hidden!important}html.v-overlay-scroll-blocked{position:fixed;top:var(--v-body-scroll-y);left:var(--v-body-scroll-x);width:100%;height:100%}.v-overlay{border-radius:inherit;display:flex;left:0;pointer-events:none;position:fixed;top:0;bottom:0;right:0}.v-overlay__content{outline:none;position:absolute;pointer-events:auto;contain:layout}.v-overlay__scrim{pointer-events:auto;background:rgb(var(--v-theme-on-surface));border-radius:inherit;bottom:0;left:0;opacity:var(--v-overlay-opacity, .32);position:fixed;right:0;top:0}.v-overlay--absolute,.v-overlay--contained .v-overlay__scrim{position:absolute}.v-overlay--scroll-blocked{padding-inline-end:var(--v-scrollbar-offset)}.v-select .v-field .v-text-field__prefix,.v-select .v-field .v-text-field__suffix,.v-select .v-field .v-field__input,.v-select .v-field.v-field{cursor:pointer}.v-select .v-field .v-field__input>input{align-self:flex-start;opacity:1;flex:0 0;position:absolute;width:100%;transition:none;pointer-events:none;caret-color:transparent}.v-select .v-field--dirty .v-select__selection{margin-inline-end:2px}.v-select .v-select__selection-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-select__content{overflow:hidden}.v-select__content{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-select__content{border-radius:4px}.v-select__selection{display:inline-flex;align-items:center;letter-spacing:inherit;line-height:inherit;max-width:100%}.v-select .v-select__selection:first-child{margin-inline-start:0}.v-select--selected .v-field .v-field__input>input{opacity:0}.v-select__menu-icon{margin-inline-start:4px;transition:.2s cubic-bezier(.4,0,.2,1)}.v-select--active-menu .v-select__menu-icon{opacity:var(--v-high-emphasis-opacity);transform:rotate(180deg)}.v-text-field input{color:inherit;opacity:0;flex:1;transition:.15s opacity cubic-bezier(.4,0,.2,1);min-width:0}.v-text-field input:focus,.v-text-field input:active{outline:none}.v-text-field input:invalid{box-shadow:none}.v-text-field .v-field{cursor:text}.v-text-field--prefixed.v-text-field .v-field__input{--v-field-padding-start: 6px}.v-text-field--suffixed.v-text-field .v-field__input{--v-field-padding-end: 0}.v-text-field .v-input__details{padding-inline:16px}.v-input--plain-underlined.v-text-field .v-input__details{padding-inline:0}.v-text-field .v-field--no-label input,.v-text-field .v-field--active input{opacity:1}.v-text-field .v-field--single-line input{transition:none}.v-text-field__prefix,.v-text-field__suffix{align-items:center;color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity));cursor:default;display:flex;opacity:0;transition:inherit;white-space:nowrap;min-height:max(var(--v-input-control-height, 56px),1.5rem + var(--v-field-input-padding-top) + var(--v-field-input-padding-bottom));padding-top:calc(var(--v-field-padding-top, 4px) + var(--v-input-padding-top, 0));padding-bottom:var(--v-field-padding-bottom, 6px)}.v-field--active .v-text-field__prefix,.v-field--active .v-text-field__suffix{opacity:1}.v-field--disabled .v-text-field__prefix,.v-field--disabled .v-text-field__suffix{color:rgba(var(--v-theme-on-surface),var(--v-disabled-opacity))}.v-text-field__prefix{padding-inline-start:var(--v-field-padding-start)}.v-text-field__suffix{padding-inline-end:var(--v-field-padding-end)}.v-counter{color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity));flex:0 1 auto;font-size:12px;transition-duration:.15s}.v-field{display:grid;grid-template-areas:"prepend-inner field clear append-inner";grid-template-columns:min-content minmax(0,1fr) min-content min-content;font-size:16px;letter-spacing:.009375em;max-width:100%;border-radius:4px;contain:layout;flex:1 0;grid-area:control;position:relative;--v-theme-overlay-multiplier: 1;--v-field-padding-start: 16px;--v-field-padding-end: 16px;--v-field-padding-top: 8px;--v-field-padding-bottom: 4px;--v-field-input-padding-top: calc(var(--v-field-padding-top, 8px) + var(--v-input-padding-top, 0));--v-field-input-padding-bottom: var(--v-field-padding-bottom, 4px)}.v-field--disabled{opacity:var(--v-disabled-opacity);pointer-events:none}.v-field .v-chip{--v-chip-height: 24px}.v-field--prepended{padding-inline-start:12px}.v-field--appended{padding-inline-end:12px}.v-field--variant-solo,.v-field--variant-solo-filled{background:rgb(var(--v-theme-surface));border-color:transparent;color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-field--variant-solo,.v-field--variant-solo-filled{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-field--variant-solo-inverted{background:rgb(var(--v-theme-surface));border-color:transparent;color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-field--variant-solo-inverted{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-field--variant-solo-inverted.v-field--focused{color:rgb(var(--v-theme-on-surface-variant))}.v-field--variant-filled{border-bottom-left-radius:0;border-bottom-right-radius:0}.v-input--density-default .v-field--variant-solo,.v-input--density-default .v-field--variant-solo-inverted,.v-input--density-default .v-field--variant-solo-filled,.v-input--density-default .v-field--variant-filled{--v-input-control-height: 56px;--v-field-padding-bottom: 4px}.v-input--density-comfortable .v-field--variant-solo,.v-input--density-comfortable .v-field--variant-solo-inverted,.v-input--density-comfortable .v-field--variant-solo-filled,.v-input--density-comfortable .v-field--variant-filled{--v-input-control-height: 48px;--v-field-padding-bottom: 0px}.v-input--density-compact .v-field--variant-solo,.v-input--density-compact .v-field--variant-solo-inverted,.v-input--density-compact .v-field--variant-solo-filled,.v-input--density-compact .v-field--variant-filled{--v-input-control-height: 40px;--v-field-padding-bottom: 0px}.v-field--variant-outlined,.v-field--single-line,.v-field--no-label{--v-field-padding-top: 0px}.v-input--density-default .v-field--variant-outlined,.v-input--density-default .v-field--single-line,.v-input--density-default .v-field--no-label{--v-field-padding-bottom: 16px}.v-input--density-comfortable .v-field--variant-outlined,.v-input--density-comfortable .v-field--single-line,.v-input--density-comfortable .v-field--no-label{--v-field-padding-bottom: 12px}.v-input--density-compact .v-field--variant-outlined,.v-input--density-compact .v-field--single-line,.v-input--density-compact .v-field--no-label{--v-field-padding-bottom: 8px}.v-field--variant-plain,.v-field--variant-underlined{border-radius:0;padding:0}.v-field--variant-plain.v-field,.v-field--variant-underlined.v-field{--v-field-padding-start: 0px;--v-field-padding-end: 0px}.v-input--density-default .v-field--variant-plain,.v-input--density-default .v-field--variant-underlined{--v-input-control-height: 48px;--v-field-padding-top: 4px;--v-field-padding-bottom: 4px}.v-input--density-comfortable .v-field--variant-plain,.v-input--density-comfortable .v-field--variant-underlined{--v-input-control-height: 40px;--v-field-padding-top: 2px;--v-field-padding-bottom: 0px}.v-input--density-compact .v-field--variant-plain,.v-input--density-compact .v-field--variant-underlined{--v-input-control-height: 32px;--v-field-padding-top: 0px;--v-field-padding-bottom: 0px}.v-field--flat{box-shadow:none}.v-field--rounded{border-radius:24px}.v-field.v-field--prepended{--v-field-padding-start: 6px}.v-field.v-field--appended{--v-field-padding-end: 6px}.v-field__input{align-items:center;color:inherit;column-gap:2px;display:flex;flex-wrap:wrap;letter-spacing:.009375em;opacity:var(--v-high-emphasis-opacity);min-height:max(var(--v-input-control-height, 56px),1.5rem + var(--v-field-input-padding-top) + var(--v-field-input-padding-bottom));min-width:0;padding-inline:var(--v-field-padding-start) var(--v-field-padding-end);padding-top:var(--v-field-input-padding-top);padding-bottom:var(--v-field-input-padding-bottom);position:relative;width:100%}.v-input--density-default .v-field__input{row-gap:8px}.v-input--density-comfortable .v-field__input{row-gap:6px}.v-input--density-compact .v-field__input{row-gap:4px}.v-field__input input{letter-spacing:inherit}.v-field__input input::placeholder,input.v-field__input::placeholder,textarea.v-field__input::placeholder{color:currentColor;opacity:var(--v-disabled-opacity)}.v-field__input:focus,.v-field__input:active{outline:none}.v-field__input:invalid{box-shadow:none}.v-field__field{flex:1 0;grid-area:field;position:relative;align-items:flex-start;display:flex}.v-field__prepend-inner{grid-area:prepend-inner;padding-inline-end:var(--v-field-padding-after)}.v-field__clearable{grid-area:clear}.v-field__append-inner{grid-area:append-inner;padding-inline-start:var(--v-field-padding-after)}.v-field__append-inner,.v-field__clearable,.v-field__prepend-inner{display:flex;align-items:flex-start;padding-top:var(--v-input-padding-top, 8px)}.v-field--center-affix .v-field__append-inner,.v-field--center-affix .v-field__clearable,.v-field--center-affix .v-field__prepend-inner{align-items:center;padding-top:0}.v-field.v-field--variant-underlined .v-field__append-inner,.v-field.v-field--variant-underlined .v-field__clearable,.v-field.v-field--variant-underlined .v-field__prepend-inner,.v-field.v-field--variant-plain .v-field__append-inner,.v-field.v-field--variant-plain .v-field__clearable,.v-field.v-field--variant-plain .v-field__prepend-inner{align-items:flex-start;padding-top:calc(var(--v-field-padding-top, 8px) + var(--v-input-padding-top, 0));padding-bottom:var(--v-field-padding-bottom, 4px)}.v-field--focused .v-field__prepend-inner,.v-field--focused .v-field__append-inner{opacity:1}.v-field__prepend-inner>.v-icon,.v-field__append-inner>.v-icon,.v-field__clearable>.v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-field--disabled .v-field__prepend-inner>.v-icon,.v-field--error .v-field__prepend-inner>.v-icon,.v-field--disabled .v-field__append-inner>.v-icon,.v-field--error .v-field__append-inner>.v-icon,.v-field--disabled .v-field__clearable>.v-icon,.v-field--error .v-field__clearable>.v-icon{opacity:1}.v-field--error:not(.v-field--disabled) .v-field__prepend-inner>.v-icon,.v-field--error:not(.v-field--disabled) .v-field__append-inner>.v-icon,.v-field--error:not(.v-field--disabled) .v-field__clearable>.v-icon{color:rgb(var(--v-theme-error))}.v-field__clearable{cursor:pointer;opacity:0;overflow:hidden;margin-inline:4px;transition:.15s cubic-bezier(.4,0,.2,1);transition-property:opacity,transform,width}.v-field--focused .v-field__clearable,.v-field--persistent-clear .v-field__clearable{opacity:1}@media (hover: hover){.v-field:hover .v-field__clearable{opacity:1}}@media (hover: none){.v-field__clearable{opacity:1}}.v-label.v-field-label{contain:layout paint;display:block;margin-inline-start:var(--v-field-padding-start);margin-inline-end:var(--v-field-padding-end);max-width:calc(100% - var(--v-field-padding-start) - var(--v-field-padding-end));pointer-events:none;position:absolute;top:var(--v-input-padding-top);transform-origin:left center;transition:.15s cubic-bezier(.4,0,.2,1);transition-property:opacity,transform;z-index:1}.v-field--variant-underlined .v-label.v-field-label,.v-field--variant-plain .v-label.v-field-label{top:calc(var(--v-input-padding-top) + var(--v-field-padding-top))}.v-field--center-affix .v-label.v-field-label{top:50%;transform:translateY(-50%)}.v-field--active .v-label.v-field-label{visibility:hidden}.v-field--focused .v-label.v-field-label,.v-field--error .v-label.v-field-label{opacity:1}.v-field--error:not(.v-field--disabled) .v-label.v-field-label{color:rgb(var(--v-theme-error))}.v-label.v-field-label--floating{--v-field-label-scale: .75em;font-size:var(--v-field-label-scale);visibility:hidden;max-width:100%}.v-field--center-affix .v-label.v-field-label--floating{transform:none}.v-field.v-field--active .v-label.v-field-label--floating{visibility:unset}.v-input--density-default .v-field--variant-solo .v-label.v-field-label--floating,.v-input--density-default .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-input--density-default .v-field--variant-filled .v-label.v-field-label--floating,.v-input--density-default .v-field--variant-solo-filled .v-label.v-field-label--floating{top:7px}.v-input--density-comfortable .v-field--variant-solo .v-label.v-field-label--floating,.v-input--density-comfortable .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-input--density-comfortable .v-field--variant-filled .v-label.v-field-label--floating,.v-input--density-comfortable .v-field--variant-solo-filled .v-label.v-field-label--floating{top:5px}.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:3px}.v-field--variant-plain .v-label.v-field-label--floating,.v-field--variant-underlined .v-label.v-field-label--floating{transform:translateY(-16px);margin:0;top:var(--v-input-padding-top)}.v-field--variant-outlined .v-label.v-field-label--floating{transform:translateY(-50%);transform-origin:center;position:static;margin:0 4px}.v-field__outline{--v-field-border-width: 1px;--v-field-border-opacity: .38;align-items:stretch;contain:layout;display:flex;height:100%;left:0;pointer-events:none;position:absolute;right:0;width:100%}@media (hover: hover){.v-field:hover .v-field__outline{--v-field-border-opacity: var(--v-high-emphasis-opacity)}}.v-field--error:not(.v-field--disabled) .v-field__outline{color:rgb(var(--v-theme-error))}.v-field.v-field--focused .v-field__outline,.v-input.v-input--error .v-field__outline{--v-field-border-opacity: 1}.v-field--variant-outlined.v-field--focused .v-field__outline{--v-field-border-width: 2px}.v-field--variant-filled .v-field__outline:before,.v-field--variant-underlined .v-field__outline:before{border-color:currentColor;border-style:solid;border-width:0 0 var(--v-field-border-width);opacity:var(--v-field-border-opacity);transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-filled .v-field__outline:before,.v-field--variant-underlined .v-field__outline:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-field--variant-filled .v-field__outline:after,.v-field--variant-underlined .v-field__outline:after{border-color:currentColor;border-style:solid;border-width:0 0 2px;transform:scaleX(0);transition:transform .15s cubic-bezier(.4,0,.2,1)}.v-field--variant-filled .v-field__outline:after,.v-field--variant-underlined .v-field__outline:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-field--focused.v-field--variant-filled .v-field__outline:after,.v-field--focused.v-field--variant-underlined .v-field__outline:after{transform:scaleX(1)}.v-field--variant-outlined .v-field__outline{border-radius:inherit}.v-field--variant-outlined .v-field__outline__start,.v-field--variant-outlined .v-field__outline__notch:before,.v-field--variant-outlined .v-field__outline__notch:after,.v-field--variant-outlined .v-field__outline__end{border:0 solid currentColor;opacity:var(--v-field-border-opacity);transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-outlined .v-field__outline__start{flex:0 0 12px;border-top-width:var(--v-field-border-width);border-bottom-width:var(--v-field-border-width);border-inline-start-width:var(--v-field-border-width);border-start-start-radius:inherit;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:inherit}.v-field--rounded.v-field--variant-outlined .v-field__outline__start,[class^=rounded-].v-field--variant-outlined .v-field__outline__start,[class*=" rounded-"].v-field--variant-outlined .v-field__outline__start{flex-basis:calc(var(--v-input-control-height) / 2 + 2px)}.v-field--reverse.v-field--variant-outlined .v-field__outline__start{border-start-start-radius:0;border-start-end-radius:inherit;border-end-end-radius:inherit;border-end-start-radius:0;border-inline-end-width:var(--v-field-border-width);border-inline-start-width:0}.v-field--variant-outlined .v-field__outline__notch{flex:none;position:relative;max-width:calc(100% - 12px)}.v-field--variant-outlined .v-field__outline__notch:before,.v-field--variant-outlined .v-field__outline__notch:after{opacity:var(--v-field-border-opacity);transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-outlined .v-field__outline__notch:before,.v-field--variant-outlined .v-field__outline__notch:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-field--variant-outlined .v-field__outline__notch:before{border-width:var(--v-field-border-width) 0 0}.v-field--variant-outlined .v-field__outline__notch:after{bottom:0;border-width:0 0 var(--v-field-border-width)}.v-field--active.v-field--variant-outlined .v-field__outline__notch:before{opacity:0}.v-field--variant-outlined .v-field__outline__end{flex:1;border-top-width:var(--v-field-border-width);border-bottom-width:var(--v-field-border-width);border-inline-end-width:var(--v-field-border-width);border-start-start-radius:0;border-start-end-radius:inherit;border-end-end-radius:inherit;border-end-start-radius:0}.v-field--reverse.v-field--variant-outlined .v-field__outline__end{border-start-start-radius:inherit;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:inherit;border-inline-end-width:0;border-inline-start-width:var(--v-field-border-width)}.v-field__loader{top:calc(100% - 2px);left:0;position:absolute;right:0;width:100%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;overflow:hidden}.v-field--variant-outlined .v-field__loader{top:calc(100% - 3px);width:calc(100% - 2px);left:1px}.v-field__overlay{border-radius:inherit;pointer-events:none}.v-field__overlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-field--variant-filled .v-field__overlay{background-color:currentColor;opacity:.04;transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-filled.v-field--has-background .v-field__overlay{opacity:0}@media (hover: hover){.v-field--variant-filled:hover .v-field__overlay{opacity:calc((.04 + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}}.v-field--variant-filled.v-field--focused .v-field__overlay{opacity:calc((.04 + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}.v-field--variant-solo-filled .v-field__overlay{background-color:currentColor;opacity:.04;transition:opacity .25s cubic-bezier(.4,0,.2,1)}@media (hover: hover){.v-field--variant-solo-filled:hover .v-field__overlay{opacity:calc((.04 + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}}.v-field--variant-solo-filled.v-field--focused .v-field__overlay{opacity:calc((.04 + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}.v-field--variant-solo-inverted .v-field__overlay{transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-solo-inverted.v-field--has-background .v-field__overlay{opacity:0}@media (hover: hover){.v-field--variant-solo-inverted:hover .v-field__overlay{opacity:calc((.04 + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}}.v-field--variant-solo-inverted.v-field--focused .v-field__overlay{background-color:rgb(var(--v-theme-surface-variant));opacity:1}.v-field--reverse .v-field__field,.v-field--reverse .v-field__input,.v-field--reverse .v-field__outline{flex-direction:row-reverse}.v-field--reverse .v-field__input,.v-field--reverse input{text-align:end}.v-input--disabled .v-field--variant-filled .v-field__outline:before,.v-input--disabled .v-field--variant-underlined .v-field__outline:before{border-image:repeating-linear-gradient(to right,rgba(var(--v-theme-on-surface),var(--v-disabled-opacity)) 0px,rgba(var(--v-theme-on-surface),var(--v-disabled-opacity)) 2px,transparent 2px,transparent 4px) 1 repeat}.v-field--loading .v-field__outline:after,.v-field--loading .v-field__outline:before{opacity:0}.v-virtual-scroll{display:block;flex:1 1 auto;max-width:100%;overflow:auto;position:relative}.v-virtual-scroll__container{display:block}.v-badge{display:inline-block;line-height:1}.v-badge__badge{align-items:center;display:inline-flex;border-radius:10px;font-family:Roboto,sans-serif;font-size:.75rem;font-weight:500;height:1.25rem;justify-content:center;min-width:20px;padding:4px 6px;pointer-events:auto;position:absolute;text-align:center;text-indent:0;transition:.225s cubic-bezier(.4,0,.2,1);white-space:nowrap}.v-badge__badge{background:rgb(var(--v-theme-surface-variant));color:rgba(var(--v-theme-on-surface-variant),var(--v-high-emphasis-opacity))}.v-badge__badge:has(.v-icon){padding:4px 6px}.v-badge--bordered .v-badge__badge:after{border-radius:inherit;border-style:solid;border-width:2px;bottom:0;color:rgb(var(--v-theme-background));content:"";left:0;position:absolute;right:0;top:0;transform:scale(1.05)}.v-badge--dot .v-badge__badge{border-radius:4.5px;height:9px;min-width:0;padding:0;width:9px}.v-badge--dot .v-badge__badge:after{border-width:1.5px}.v-badge--inline .v-badge__badge{position:relative;vertical-align:middle}.v-badge__badge .v-icon{color:inherit;font-size:.75rem;margin:0 -2px}.v-badge__badge img,.v-badge__badge .v-img{height:100%;width:100%}.v-badge__wrapper{display:flex;position:relative}.v-badge--inline .v-badge__wrapper{align-items:center;display:inline-flex;justify-content:center;margin:0 4px}.v-banner{display:grid;flex:1 1;font-size:.875rem;grid-template-areas:"prepend content actions";grid-template-columns:max-content auto max-content;grid-template-rows:max-content max-content;line-height:1.6;overflow:hidden;padding-inline:16px 8px;padding-top:16px;padding-bottom:16px;position:relative;width:100%}.v-banner{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0 0 thin 0}.v-banner--border{border-width:thin;box-shadow:none}.v-banner{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-banner--absolute{position:absolute}.v-banner--fixed{position:fixed}.v-banner--sticky{position:sticky}.v-banner{border-radius:0}.v-banner{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-banner--rounded{border-radius:4px}.v-banner--stacked:not(.v-banner--one-line){grid-template-areas:"prepend content" ". actions"}.v-banner--stacked .v-banner-text{padding-inline-end:36px}.v-banner--density-default .v-banner-actions{margin-bottom:-8px}.v-banner--density-default.v-banner--one-line{padding-top:8px;padding-bottom:8px}.v-banner--density-default.v-banner--one-line .v-banner-actions{margin-bottom:0}.v-banner--density-default.v-banner--one-line{padding-top:10px}.v-banner--density-default.v-banner--two-line{padding-top:16px;padding-bottom:16px}.v-banner--density-default.v-banner--three-line{padding-top:24px;padding-bottom:16px}.v-banner--density-default:not(.v-banner--one-line) .v-banner-actions,.v-banner--density-default.v-banner--two-line .v-banner-actions,.v-banner--density-default.v-banner--three-line .v-banner-actions{margin-top:20px}.v-banner--density-comfortable .v-banner-actions{margin-bottom:-4px}.v-banner--density-comfortable.v-banner--one-line{padding-top:4px;padding-bottom:4px}.v-banner--density-comfortable.v-banner--one-line .v-banner-actions{margin-bottom:0}.v-banner--density-comfortable.v-banner--two-line{padding-top:12px;padding-bottom:12px}.v-banner--density-comfortable.v-banner--three-line{padding-top:20px;padding-bottom:12px}.v-banner--density-comfortable:not(.v-banner--one-line) .v-banner-actions,.v-banner--density-comfortable.v-banner--two-line .v-banner-actions,.v-banner--density-comfortable.v-banner--three-line .v-banner-actions{margin-top:16px}.v-banner--density-compact .v-banner-actions{margin-bottom:0}.v-banner--density-compact.v-banner--one-line{padding-top:0;padding-bottom:0}.v-banner--density-compact.v-banner--one-line .v-banner-actions{margin-bottom:0}.v-banner--density-compact.v-banner--two-line{padding-top:8px;padding-bottom:8px}.v-banner--density-compact.v-banner--three-line{padding-top:16px;padding-bottom:8px}.v-banner--density-compact:not(.v-banner--one-line) .v-banner-actions,.v-banner--density-compact.v-banner--two-line .v-banner-actions,.v-banner--density-compact.v-banner--three-line .v-banner-actions{margin-top:12px}.v-banner--sticky{top:0;z-index:1}.v-banner__content{align-items:center;display:flex;grid-area:content}.v-banner__prepend{align-self:flex-start;grid-area:prepend;margin-inline-end:24px}.v-banner-actions{align-self:flex-end;display:flex;flex:0 1;grid-area:actions;justify-content:flex-end}.v-banner--two-line .v-banner-actions,.v-banner--three-line .v-banner-actions{margin-top:20px}.v-banner-text{-webkit-box-orient:vertical;display:-webkit-box;padding-inline-end:90px;overflow:hidden}.v-banner--one-line .v-banner-text{-webkit-line-clamp:1}.v-banner--two-line .v-banner-text{-webkit-line-clamp:2}.v-banner--three-line .v-banner-text{-webkit-line-clamp:3}.v-banner--two-line .v-banner-text,.v-banner--three-line .v-banner-text{align-self:flex-start}.v-bottom-navigation{display:flex;max-width:100%;overflow:hidden;position:absolute;transition:transform,color,.2s,.1s cubic-bezier(.4,0,.2,1)}.v-bottom-navigation{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-bottom-navigation--border{border-width:thin;box-shadow:none}.v-bottom-navigation{border-radius:0}.v-bottom-navigation{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-bottom-navigation--active{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-bottom-navigation__content{display:flex;flex:none;font-size:.75rem;justify-content:center;transition:inherit;width:100%}.v-bottom-navigation .v-bottom-navigation__content>.v-btn{font-size:inherit;height:100%;max-width:168px;min-width:80px;text-transform:none;transition:inherit;width:auto}.v-bottom-navigation .v-bottom-navigation__content>.v-btn{border-radius:0}.v-bottom-navigation .v-bottom-navigation__content>.v-btn .v-btn__content,.v-bottom-navigation .v-bottom-navigation__content>.v-btn .v-btn__icon{transition:inherit}.v-bottom-navigation .v-bottom-navigation__content>.v-btn .v-btn__icon{font-size:1.5rem}.v-bottom-navigation--grow .v-bottom-navigation__content>.v-btn{flex-grow:1}.v-bottom-navigation--shift .v-bottom-navigation__content .v-btn:not(.v-btn--selected) .v-btn__content>span{transition:inherit;opacity:0}.v-bottom-navigation--shift .v-bottom-navigation__content .v-btn:not(.v-btn--selected) .v-btn__content{transform:translateY(.5rem)}.bottom-sheet-transition-enter-from,.bottom-sheet-transition-leave-to{transform:translateY(100%)}.v-bottom-sheet>.v-bottom-sheet__content.v-overlay__content{align-self:flex-end;border-radius:0;flex:0 1 auto;left:0;right:0;margin-inline:0;margin-bottom:0;transition-duration:.2s;width:100%;max-width:100%;overflow:visible}.v-bottom-sheet>.v-bottom-sheet__content.v-overlay__content{box-shadow:0 7px 8px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 12px 17px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 5px 22px 4px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-bottom-sheet>.v-bottom-sheet__content.v-overlay__content>.v-card,.v-bottom-sheet>.v-bottom-sheet__content.v-overlay__content>.v-sheet{border-radius:0}.v-bottom-sheet.v-bottom-sheet--inset{max-width:none}@media (min-width: 600px){.v-bottom-sheet.v-bottom-sheet--inset{max-width:70%}}.v-dialog{align-items:center;justify-content:center;margin:auto}.v-dialog>.v-overlay__content{max-height:calc(100% - 48px);width:calc(100% - 48px);max-width:calc(100% - 48px);margin:24px}.v-dialog>.v-overlay__content,.v-dialog>.v-overlay__content>form{display:flex;flex-direction:column;min-height:0}.v-dialog>.v-overlay__content>.v-card,.v-dialog>.v-overlay__content>.v-sheet,.v-dialog>.v-overlay__content>form>.v-card,.v-dialog>.v-overlay__content>form>.v-sheet{--v-scrollbar-offset: 0px;border-radius:4px;overflow-y:auto;flex:1 1 100%}.v-dialog>.v-overlay__content>.v-card,.v-dialog>.v-overlay__content>.v-sheet,.v-dialog>.v-overlay__content>form>.v-card,.v-dialog>.v-overlay__content>form>.v-sheet{box-shadow:0 11px 15px -7px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 24px 38px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 9px 46px 8px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-dialog>.v-overlay__content>.v-card,.v-dialog>.v-overlay__content>form>.v-card{display:flex;flex-direction:column}.v-dialog>.v-overlay__content>.v-card>.v-card-item,.v-dialog>.v-overlay__content>form>.v-card>.v-card-item{padding:16px 24px}.v-dialog>.v-overlay__content>.v-card>.v-card-item+.v-card-text,.v-dialog>.v-overlay__content>form>.v-card>.v-card-item+.v-card-text{padding-top:0}.v-dialog>.v-overlay__content>.v-card>.v-card-text,.v-dialog>.v-overlay__content>form>.v-card>.v-card-text{font-size:inherit;letter-spacing:.03125em;line-height:inherit;padding:16px 24px 24px}.v-dialog>.v-overlay__content>.v-card>.v-card-actions,.v-dialog>.v-overlay__content>form>.v-card>.v-card-actions{justify-content:flex-end}.v-dialog--fullscreen{--v-scrollbar-offset: 0px}.v-dialog--fullscreen>.v-overlay__content{border-radius:0;margin:0;padding:0;width:100%;height:100%;max-width:100%;max-height:100%;overflow-y:auto;top:0;left:0}.v-dialog--fullscreen>.v-overlay__content>.v-card,.v-dialog--fullscreen>.v-overlay__content>.v-sheet,.v-dialog--fullscreen>.v-overlay__content>form>.v-card,.v-dialog--fullscreen>.v-overlay__content>form>.v-sheet{min-height:100%;min-width:100%;border-radius:0}.v-dialog--scrollable>.v-overlay__content,.v-dialog--scrollable>.v-overlay__content>.v-card,.v-dialog--scrollable>.v-overlay__content>form,.v-dialog--scrollable>.v-overlay__content>form>.v-card{display:flex;flex:1 1 100%;flex-direction:column;max-height:100%;max-width:100%}.v-dialog--scrollable>.v-overlay__content>.v-card>.v-card-text,.v-dialog--scrollable>.v-overlay__content>form>.v-card>.v-card-text{backface-visibility:hidden;overflow-y:auto}.v-breadcrumbs{display:flex;align-items:center;line-height:1.6;padding:16px 12px}.v-breadcrumbs--rounded{border-radius:4px}.v-breadcrumbs--density-default{padding-top:16px;padding-bottom:16px}.v-breadcrumbs--density-comfortable{padding-top:12px;padding-bottom:12px}.v-breadcrumbs--density-compact{padding-top:8px;padding-bottom:8px}.v-breadcrumbs__prepend{align-items:center;display:inline-flex}.v-breadcrumbs-item{align-items:center;color:inherit;display:inline-flex;padding:0 4px;text-decoration:none;vertical-align:middle}.v-breadcrumbs-item--disabled{opacity:var(--v-disabled-opacity);pointer-events:none}.v-breadcrumbs-item--link{color:inherit;text-decoration:none}.v-breadcrumbs-item--link:hover{text-decoration:underline}.v-breadcrumbs-item .v-icon{font-size:1rem;margin-inline:-4px 2px}.v-breadcrumbs-divider{display:inline-block;padding:0 8px;vertical-align:middle}.v-card{display:block;overflow:hidden;overflow-wrap:break-word;position:relative;padding:0;text-decoration:none;transition-duration:.28s;transition-property:box-shadow,opacity,background;transition-timing-function:cubic-bezier(.4,0,.2,1);z-index:0}.v-card{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-card--border{border-width:thin;box-shadow:none}.v-card--absolute{position:absolute}.v-card--fixed{position:fixed}.v-card{border-radius:4px}.v-card:hover>.v-card__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-card:focus-visible>.v-card__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-card:focus>.v-card__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-card--active>.v-card__overlay,.v-card[aria-haspopup=menu][aria-expanded=true]>.v-card__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-card--active:hover>.v-card__overlay,.v-card[aria-haspopup=menu][aria-expanded=true]:hover>.v-card__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-card--active:focus-visible>.v-card__overlay,.v-card[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-card__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-card--active:focus>.v-card__overlay,.v-card[aria-haspopup=menu][aria-expanded=true]:focus>.v-card__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-card--variant-plain,.v-card--variant-outlined,.v-card--variant-text,.v-card--variant-tonal{background:transparent;color:inherit}.v-card--variant-plain{opacity:.62}.v-card--variant-plain:focus,.v-card--variant-plain:hover{opacity:1}.v-card--variant-plain .v-card__overlay{display:none}.v-card--variant-elevated,.v-card--variant-flat{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-card--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--variant-outlined{border:thin solid currentColor}.v-card--variant-text .v-card__overlay{background:currentColor}.v-card--variant-tonal .v-card__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-card .v-card__underlay{position:absolute}.v-card--disabled{pointer-events:none;-webkit-user-select:none;user-select:none}.v-card--disabled>:not(.v-card__loader){opacity:.6}.v-card--flat{box-shadow:none}.v-card--hover{cursor:pointer}.v-card--hover:before,.v-card--hover:after{border-radius:inherit;bottom:0;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0;transition:inherit}.v-card--hover:before{opacity:1;z-index:-1}.v-card--hover:before{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--hover:after{z-index:1;opacity:0}.v-card--hover:after{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--hover:hover:after{opacity:1}.v-card--hover:hover:before{opacity:0}.v-card--hover:hover{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--link{cursor:pointer}.v-card-actions{align-items:center;display:flex;flex:none;min-height:52px;padding:.5rem;gap:.5rem}.v-card-item{align-items:center;display:grid;flex:none;grid-template-areas:"prepend content append";grid-template-columns:max-content auto max-content;padding:.625rem 1rem}.v-card-item+.v-card-text{padding-top:0}.v-card-item__prepend,.v-card-item__append{align-items:center;display:flex}.v-card-item__prepend{grid-area:prepend;padding-inline-end:.5rem}.v-card-item__append{grid-area:append;padding-inline-start:.5rem}.v-card-item__content{align-self:center;grid-area:content;overflow:hidden}.v-card-title{display:block;flex:none;font-size:1.25rem;font-weight:500;-webkit-hyphens:auto;hyphens:auto;letter-spacing:.0125em;min-width:0;overflow-wrap:normal;overflow:hidden;padding:.5rem 1rem;text-overflow:ellipsis;text-transform:none;white-space:nowrap;word-break:normal;word-wrap:break-word}.v-card .v-card-title{line-height:1.6}.v-card--density-comfortable .v-card-title{line-height:1.75rem}.v-card--density-compact .v-card-title{line-height:1.55rem}.v-card-item .v-card-title{padding:0}.v-card-title+.v-card-text,.v-card-title+.v-card-actions{padding-top:0}.v-card-subtitle{display:block;flex:none;font-size:.875rem;font-weight:400;letter-spacing:.0178571429em;opacity:var(--v-card-subtitle-opacity, var(--v-medium-emphasis-opacity));overflow:hidden;padding:0 1rem;text-overflow:ellipsis;text-transform:none;white-space:nowrap}.v-card .v-card-subtitle{line-height:1.425}.v-card--density-comfortable .v-card-subtitle{line-height:1.125rem}.v-card--density-compact .v-card-subtitle{line-height:1rem}.v-card-item .v-card-subtitle{padding:0 0 .25rem}.v-card-text{flex:1 1 auto;font-size:.875rem;font-weight:400;letter-spacing:.0178571429em;opacity:var(--v-card-text-opacity, 1);padding:1rem;text-transform:none}.v-card .v-card-text{line-height:1.425}.v-card--density-comfortable .v-card-text{line-height:1.2rem}.v-card--density-compact .v-card-text{line-height:1.15rem}.v-card__image{display:flex;height:100%;flex:1 1 auto;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:-1}.v-card__content{border-radius:inherit;overflow:hidden;position:relative}.v-card__loader{bottom:auto;top:0;left:0;position:absolute;right:0;width:100%;z-index:1}.v-card__overlay{background-color:currentColor;border-radius:inherit;position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;opacity:0;transition:opacity .2s ease-in-out}.v-carousel{overflow:hidden;position:relative;width:100%}.v-carousel__controls{align-items:center;bottom:0;display:flex;height:50px;justify-content:center;list-style-type:none;position:absolute;width:100%;z-index:1}.v-carousel__controls{background:rgba(var(--v-theme-surface-variant),.3);color:rgb(var(--v-theme-on-surface-variant))}.v-carousel__controls>.v-item-group{flex:0 1 auto}.v-carousel__controls__item{margin:0 8px}.v-carousel__controls__item .v-icon{opacity:.5}.v-carousel__controls__item--active .v-icon{opacity:1;vertical-align:middle}.v-carousel__controls__item:hover{background:none}.v-carousel__controls__item:hover .v-icon{opacity:.8}.v-carousel__progress{margin:0;position:absolute;bottom:0;left:0;right:0}.v-carousel-item{display:block;height:inherit;text-decoration:none}.v-carousel-item>.v-img{height:inherit}.v-carousel--hide-delimiter-background .v-carousel__controls{background:transparent}.v-carousel--vertical-delimiters .v-carousel__controls{flex-direction:column;height:100%!important;width:50px}.v-window{overflow:hidden}.v-window__container{display:flex;flex-direction:column;height:inherit;position:relative;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-window__controls{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;align-items:center;justify-content:space-between;padding:0 16px;pointer-events:none}.v-window__controls>*{pointer-events:auto}.v-window--show-arrows-on-hover{overflow:hidden}.v-window--show-arrows-on-hover .v-window__left{transform:translate(-200%)}.v-window--show-arrows-on-hover .v-window__right{transform:translate(200%)}.v-window--show-arrows-on-hover:hover .v-window__left,.v-window--show-arrows-on-hover:hover .v-window__right{transform:translate(0)}.v-window-x-transition-enter-active,.v-window-x-transition-leave-active,.v-window-x-reverse-transition-enter-active,.v-window-x-reverse-transition-leave-active,.v-window-y-transition-enter-active,.v-window-y-transition-leave-active,.v-window-y-reverse-transition-enter-active,.v-window-y-reverse-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)}.v-window-x-transition-leave-from,.v-window-x-transition-leave-to,.v-window-x-reverse-transition-leave-from,.v-window-x-reverse-transition-leave-to,.v-window-y-transition-leave-from,.v-window-y-transition-leave-to,.v-window-y-reverse-transition-leave-from,.v-window-y-reverse-transition-leave-to{position:absolute!important;top:0;width:100%}.v-window-x-transition-enter-from{transform:translate(100%)}.v-window-x-transition-leave-to,.v-window-x-reverse-transition-enter-from{transform:translate(-100%)}.v-window-x-reverse-transition-leave-to{transform:translate(100%)}.v-window-y-transition-enter-from{transform:translateY(100%)}.v-window-y-transition-leave-to,.v-window-y-reverse-transition-enter-from{transform:translateY(-100%)}.v-window-y-reverse-transition-leave-to{transform:translateY(100%)}.v-code{background-color:rgb(var(--v-theme-code));color:rgb(var(--v-theme-on-code));border-radius:4px;line-height:1.8;font-size:.9em;font-weight:400;padding:.2em .4em}.v-color-picker{align-self:flex-start;contain:content}.v-color-picker.v-sheet{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-color-picker.v-sheet{border-radius:4px}.v-color-picker__controls{display:flex;flex-direction:column;padding:16px}.v-color-picker--flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-color-picker--flat .v-color-picker__track:not(.v-input--is-disabled) .v-slider__thumb{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-color-picker-canvas{display:flex;position:relative;overflow:hidden;contain:content;touch-action:none}.v-color-picker-canvas__dot{position:absolute;top:0;left:0;width:15px;height:15px;background:transparent;border-radius:50%;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1.5px #0000004d}.v-color-picker-canvas__dot--disabled{box-shadow:0 0 0 1.5px #ffffffb3,inset 0 0 1px 1.5px #0000004d}.v-color-picker-canvas:hover .v-color-picker-canvas__dot{will-change:transform}.v-color-picker-edit{display:flex;margin-top:24px}.v-color-picker-edit__input{width:100%;display:flex;flex-wrap:wrap;justify-content:center;text-align:center}.v-color-picker-edit__input:not(:last-child){margin-inline-end:8px}.v-color-picker-edit__input input{border-radius:4px;margin-bottom:8px;min-width:0;outline:none;text-align:center;width:100%;height:32px;background:rgba(var(--v-theme-surface-variant),.2);color:rgba(var(--v-theme-on-surface))}.v-color-picker-edit__input span{font-size:.75rem}.v-color-picker-preview__alpha .v-slider-track__background{background-color:transparent!important}.v-locale--is-ltr.v-color-picker-preview__alpha .v-slider-track__background,.v-locale--is-ltr .v-color-picker-preview__alpha .v-slider-track__background{background-image:linear-gradient(to right,transparent,var(--v-color-picker-color-hsv))}.v-locale--is-rtl.v-color-picker-preview__alpha .v-slider-track__background,.v-locale--is-rtl .v-color-picker-preview__alpha .v-slider-track__background{background-image:linear-gradient(to left,transparent,var(--v-color-picker-color-hsv))}.v-color-picker-preview__alpha .v-slider-track__background:after{content:"";z-index:-1;left:0;top:0;width:100%;height:100%;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAACRJREFUKFNjPHTo0H8GJGBnZ8eIzGekgwJk+0BsdCtRHEQbBQBbbh0dIGKknQAAAABJRU5ErkJggg==) repeat;border-radius:inherit}.v-color-picker-preview__sliders{display:flex;flex:1 0 auto;flex-direction:column;padding-inline-end:16px}.v-color-picker-preview__dot{position:relative;height:30px;width:30px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAACRJREFUKFNjPHTo0H8GJGBnZ8eIzGekgwJk+0BsdCtRHEQbBQBbbh0dIGKknQAAAABJRU5ErkJggg==) repeat;border-radius:50%;overflow:hidden;margin-inline-end:24px}.v-color-picker-preview__dot>div{width:100%;height:100%}.v-locale--is-ltr.v-color-picker-preview__hue:not(.v-input--is-disabled) .v-slider-track__background,.v-locale--is-ltr .v-color-picker-preview__hue:not(.v-input--is-disabled) .v-slider-track__background{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.v-locale--is-rtl.v-color-picker-preview__hue:not(.v-input--is-disabled) .v-slider-track__background,.v-locale--is-rtl .v-color-picker-preview__hue:not(.v-input--is-disabled) .v-slider-track__background{background:linear-gradient(to left,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.v-color-picker-preview__track{position:relative;width:100%;margin:0!important}.v-color-picker-preview__track .v-slider-track__fill{display:none}.v-color-picker-preview{align-items:center;display:flex;margin-bottom:0}.v-color-picker-preview__eye-dropper{position:relative;margin-right:12px}.v-slider .v-slider__container input{cursor:default;padding:0;width:100%;display:none}.v-slider>.v-input__append,.v-slider>.v-input__prepend{padding:0}.v-slider__container{position:relative;min-height:inherit;width:100%;height:100%;display:flex;justify-content:center;align-items:center;cursor:pointer}.v-input--disabled .v-slider__container{opacity:var(--v-disabled-opacity)}.v-input--error:not(.v-input--disabled) .v-slider__container{color:rgb(var(--v-theme-error))}.v-slider.v-input--horizontal{align-items:center;margin-inline:8px 8px}.v-slider.v-input--horizontal>.v-input__control{min-height:32px;display:flex;align-items:center}.v-slider.v-input--vertical{justify-content:center;margin-top:12px;margin-bottom:12px}.v-slider.v-input--vertical>.v-input__control{min-height:300px}.v-slider.v-input--disabled{pointer-events:none}.v-slider--has-labels>.v-input__control{margin-bottom:4px}.v-slider__label{margin-inline-end:12px}.v-slider-thumb{touch-action:none;color:rgb(var(--v-theme-surface-variant))}.v-input--error:not(.v-input--disabled) .v-slider-thumb{color:inherit}.v-slider-thumb__label{background:rgba(var(--v-theme-surface-variant),.7);color:rgb(var(--v-theme-on-surface-variant))}.v-slider-thumb__label:before{color:rgba(var(--v-theme-surface-variant),.7)}.v-slider-thumb{outline:none;position:absolute;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-slider-thumb__surface{cursor:pointer;width:var(--v-slider-thumb-size);height:var(--v-slider-thumb-size);border-radius:50%;-webkit-user-select:none;user-select:none;background-color:currentColor}@media (forced-colors: active){.v-slider-thumb__surface{background-color:highlight}}.v-slider-thumb__surface:before{transition:.3s cubic-bezier(.4,0,.2,1);content:"";color:inherit;top:0;left:0;width:100%;height:100%;border-radius:50%;background:currentColor;position:absolute;pointer-events:none;opacity:0}.v-slider-thumb__surface:after{content:"";width:42px;height:42px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.v-slider-thumb__label-container{position:absolute;transition:.2s cubic-bezier(.4,0,1,1)}.v-slider-thumb__label{display:flex;align-items:center;justify-content:center;font-size:.75rem;min-width:35px;height:25px;border-radius:4px;padding:6px;position:absolute;-webkit-user-select:none;user-select:none;transition:.2s cubic-bezier(.4,0,1,1)}.v-slider-thumb__label:before{content:"";width:0;height:0;position:absolute}.v-slider-thumb__ripple{position:absolute;left:calc(var(--v-slider-thumb-size) / -2);top:calc(var(--v-slider-thumb-size) / -2);width:calc(var(--v-slider-thumb-size) * 2);height:calc(var(--v-slider-thumb-size) * 2);background:inherit}.v-slider.v-input--horizontal .v-slider-thumb{top:50%;transform:translateY(-50%);inset-inline-start:calc(var(--v-slider-thumb-position) - var(--v-slider-thumb-size) / 2)}.v-slider.v-input--horizontal .v-slider-thumb__label-container{left:calc(var(--v-slider-thumb-size) / 2);top:0}.v-slider.v-input--horizontal .v-slider-thumb__label{bottom:calc(var(--v-slider-thumb-size) / 2)}.v-locale--is-ltr.v-slider.v-input--horizontal .v-slider-thumb__label,.v-locale--is-ltr .v-slider.v-input--horizontal .v-slider-thumb__label{transform:translate(-50%)}.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-thumb__label,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-thumb__label{transform:translate(50%)}.v-slider.v-input--horizontal .v-slider-thumb__label:before{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid currentColor;bottom:-6px}.v-slider.v-input--vertical .v-slider-thumb{top:calc(var(--v-slider-thumb-position) - var(--v-slider-thumb-size) / 2)}.v-slider.v-input--vertical .v-slider-thumb__label-container{top:calc(var(--v-slider-thumb-size) / 2);right:0}.v-slider.v-input--vertical .v-slider-thumb__label{top:-12.5px;left:calc(var(--v-slider-thumb-size) / 2)}.v-slider.v-input--vertical .v-slider-thumb__label:before{border-right:6px solid currentColor;border-top:6px solid transparent;border-bottom:6px solid transparent;left:-6px}.v-slider-thumb--focused .v-slider-thumb__surface:before{transform:scale(2);opacity:var(--v-focus-opacity)}.v-slider-thumb--pressed{transition:none}.v-slider-thumb--pressed .v-slider-thumb__surface:before{opacity:var(--v-pressed-opacity)}@media (hover: hover){.v-slider-thumb:hover .v-slider-thumb__surface:before{transform:scale(2)}.v-slider-thumb:hover:not(.v-slider-thumb--focused) .v-slider-thumb__surface:before{opacity:var(--v-hover-opacity)}}.v-slider-track__background{background-color:rgb(var(--v-theme-surface-variant))}@media (forced-colors: active){.v-slider-track__background{background-color:highlight}}.v-slider-track__fill{background-color:rgb(var(--v-theme-surface-variant))}@media (forced-colors: active){.v-slider-track__fill{background-color:highlight}}.v-slider-track__tick{background-color:rgb(var(--v-theme-surface-variant))}.v-slider-track__tick--filled{background-color:rgb(var(--v-theme-surface-light))}.v-slider-track{border-radius:6px}@media (forced-colors: active){.v-slider-track{border:thin solid buttontext}}.v-slider-track__background,.v-slider-track__fill{position:absolute;transition:.3s cubic-bezier(.25,.8,.5,1);border-radius:inherit}.v-slider--pressed .v-slider-track__background,.v-slider--pressed .v-slider-track__fill{transition:none}.v-input--error:not(.v-input--disabled) .v-slider-track__background,.v-input--error:not(.v-input--disabled) .v-slider-track__fill{background-color:currentColor}.v-slider-track__ticks{height:100%;width:100%;position:relative}.v-slider-track__tick{position:absolute;opacity:0;transition:.2s opacity cubic-bezier(.4,0,.2,1);border-radius:2px;width:var(--v-slider-tick-size);height:var(--v-slider-tick-size);transform:translate(calc(var(--v-slider-tick-size) / -2),calc(var(--v-slider-tick-size) / -2))}.v-locale--is-ltr.v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-ltr .v-slider-track__tick--first .v-slider-track__tick-label{transform:none}.v-locale--is-rtl.v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-rtl .v-slider-track__tick--first .v-slider-track__tick-label{transform:translate(100%)}.v-locale--is-ltr.v-slider-track__tick--last .v-slider-track__tick-label,.v-locale--is-ltr .v-slider-track__tick--last .v-slider-track__tick-label{transform:translate(-100%)}.v-locale--is-rtl.v-slider-track__tick--last .v-slider-track__tick-label,.v-locale--is-rtl .v-slider-track__tick--last .v-slider-track__tick-label{transform:none}.v-slider-track__tick-label{position:absolute;-webkit-user-select:none;user-select:none;white-space:nowrap}.v-slider.v-input--horizontal .v-slider-track{display:flex;align-items:center;width:100%;height:calc(var(--v-slider-track-size) + 2px);touch-action:pan-y}.v-slider.v-input--horizontal .v-slider-track__background{height:var(--v-slider-track-size)}.v-slider.v-input--horizontal .v-slider-track__fill{height:inherit}.v-slider.v-input--horizontal .v-slider-track__tick{margin-top:calc(calc(var(--v-slider-track-size) + 2px) / 2)}.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-track__tick,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-track__tick{transform:translate(calc(var(--v-slider-tick-size) / 2),calc(var(--v-slider-tick-size) / -2))}.v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label{margin-top:calc(var(--v-slider-track-size) / 2 + 8px)}.v-locale--is-ltr.v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label,.v-locale--is-ltr .v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label{transform:translate(-50%)}.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label{transform:translate(50%)}.v-slider.v-input--horizontal .v-slider-track__tick--first{margin-inline-start:calc(var(--v-slider-tick-size) + 1px)}.v-locale--is-ltr.v-slider.v-input--horizontal .v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-ltr .v-slider.v-input--horizontal .v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-track__tick--first .v-slider-track__tick-label{transform:translate(0)}.v-slider.v-input--horizontal .v-slider-track__tick--last{margin-inline-start:calc(100% - var(--v-slider-tick-size) - 1px)}.v-locale--is-ltr.v-slider.v-input--horizontal .v-slider-track__tick--last .v-slider-track__tick-label,.v-locale--is-ltr .v-slider.v-input--horizontal .v-slider-track__tick--last .v-slider-track__tick-label{transform:translate(-100%)}.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-track__tick--last .v-slider-track__tick-label,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-track__tick--last .v-slider-track__tick-label{transform:translate(100%)}.v-slider.v-input--vertical .v-slider-track{height:100%;display:flex;justify-content:center;width:calc(var(--v-slider-track-size) + 2px);touch-action:pan-x}.v-slider.v-input--vertical .v-slider-track__background{width:var(--v-slider-track-size)}.v-slider.v-input--vertical .v-slider-track__fill{width:inherit}.v-slider.v-input--vertical .v-slider-track__ticks{height:100%}.v-slider.v-input--vertical .v-slider-track__tick{margin-inline-start:calc(calc(var(--v-slider-track-size) + 2px) / 2);transform:translate(calc(var(--v-slider-tick-size) / -2),calc(var(--v-slider-tick-size) / 2))}.v-locale--is-rtl.v-slider.v-input--vertical .v-slider-track__tick,.v-locale--is-rtl .v-slider.v-input--vertical .v-slider-track__tick{transform:translate(calc(var(--v-slider-tick-size) / 2),calc(var(--v-slider-tick-size) / 2))}.v-slider.v-input--vertical .v-slider-track__tick--first{bottom:calc(0% + var(--v-slider-tick-size) + 1px)}.v-slider.v-input--vertical .v-slider-track__tick--last{bottom:calc(100% - var(--v-slider-tick-size) - 1px)}.v-slider.v-input--vertical .v-slider-track__tick .v-slider-track__tick-label{margin-inline-start:calc(var(--v-slider-track-size) / 2 + 12px);transform:translateY(-50%)}.v-slider-track__ticks--always-show .v-slider-track__tick,.v-slider--focused .v-slider-track__tick{opacity:1}.v-slider-track__background--opacity{opacity:.38}.v-color-picker-swatches{overflow-y:auto}.v-color-picker-swatches>div{display:flex;flex-wrap:wrap;justify-content:center;padding:8px}.v-color-picker-swatches__swatch{display:flex;flex-direction:column;margin-bottom:10px}.v-color-picker-swatches__color{position:relative;height:18px;max-height:18px;width:45px;margin:2px 4px;border-radius:2px;-webkit-user-select:none;user-select:none;overflow:hidden;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAACRJREFUKFNjPHTo0H8GJGBnZ8eIzGekgwJk+0BsdCtRHEQbBQBbbh0dIGKknQAAAABJRU5ErkJggg==) repeat;cursor:pointer}.v-color-picker-swatches__color>div{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.v-sheet{display:block}.v-sheet{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-sheet--border{border-width:thin;box-shadow:none}.v-sheet{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-sheet--absolute{position:absolute}.v-sheet--fixed{position:fixed}.v-sheet--relative{position:relative}.v-sheet--sticky{position:sticky}.v-sheet{border-radius:0}.v-sheet{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-sheet--rounded{border-radius:4px}.v-combobox .v-field .v-text-field__prefix,.v-combobox .v-field .v-text-field__suffix,.v-combobox .v-field .v-field__input,.v-combobox .v-field.v-field{cursor:text}.v-combobox .v-field .v-field__input>input{flex:1 1}.v-combobox .v-field input{min-width:64px}.v-combobox .v-field:not(.v-field--focused) input{min-width:0}.v-combobox .v-field--dirty .v-combobox__selection{margin-inline-end:2px}.v-combobox .v-combobox__selection-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-combobox__content{overflow:hidden}.v-combobox__content{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-combobox__content{border-radius:4px}.v-combobox__mask{background:rgb(var(--v-theme-surface-light))}.v-combobox__selection{display:inline-flex;align-items:center;height:1.5rem;letter-spacing:inherit;line-height:inherit;max-width:calc(100% - 4px)}.v-combobox__selection:first-child{margin-inline-start:0}.v-combobox--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-combobox--selecting-index .v-combobox__selection{opacity:var(--v-medium-emphasis-opacity)}.v-combobox--selecting-index .v-combobox__selection--selected{opacity:1}.v-combobox--selecting-index .v-field__input>input{caret-color:transparent}.v-combobox--single:not(.v-combobox--selection-slot).v-text-field input{flex:1 1;position:absolute;left:0;right:0;width:100%;padding-inline:inherit}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--active input{transition:none}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--dirty:not(.v-field--focused) input{opacity:0}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--focused .v-combobox__selection{opacity:0}.v-combobox__menu-icon{margin-inline-start:4px;transition:.2s cubic-bezier(.4,0,.2,1)}.v-combobox--active-menu .v-combobox__menu-icon{opacity:var(--v-high-emphasis-opacity);transform:rotate(180deg)}.v-data-table{width:100%}.v-data-table__table{width:100%;border-collapse:separate;border-spacing:0}.v-data-table__tr--focus{border:1px dotted black}.v-data-table__tr--clickable{cursor:pointer}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--align-end,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--align-end,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--align-end,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--align-end{text-align:end}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--align-end .v-data-table-header__content,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--align-end .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--align-end .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--align-end .v-data-table-header__content{flex-direction:row-reverse}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--align-center,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--align-center,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--align-center,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--align-center{text-align:center}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--align-center .v-data-table-header__content,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--align-center .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--align-center .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--align-center .v-data-table-header__content{justify-content:center}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--no-padding,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--no-padding,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--no-padding,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--no-padding{padding:0 8px}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--nowrap,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--nowrap,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--nowrap,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--nowrap{text-overflow:ellipsis;text-wrap:nowrap;overflow:hidden}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--nowrap .v-data-table-header__content,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--nowrap .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--nowrap .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--nowrap .v-data-table-header__content{display:contents}.v-data-table .v-table__wrapper>table>thead>tr>th,.v-data-table .v-table__wrapper>table tbody>tr>th{align-items:center}.v-data-table .v-table__wrapper>table>thead>tr>th.v-data-table__th--fixed,.v-data-table .v-table__wrapper>table tbody>tr>th.v-data-table__th--fixed{position:sticky}.v-data-table .v-table__wrapper>table>thead>tr>th.v-data-table__th--sortable:hover,.v-data-table .v-table__wrapper>table tbody>tr>th.v-data-table__th--sortable:hover{cursor:pointer;color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-data-table .v-table__wrapper>table>thead>tr>th:not(.v-data-table__th--sorted) .v-data-table-header__sort-icon,.v-data-table .v-table__wrapper>table tbody>tr>th:not(.v-data-table__th--sorted) .v-data-table-header__sort-icon{opacity:0}.v-data-table .v-table__wrapper>table>thead>tr>th:not(.v-data-table__th--sorted):hover .v-data-table-header__sort-icon,.v-data-table .v-table__wrapper>table tbody>tr>th:not(.v-data-table__th--sorted):hover .v-data-table-header__sort-icon{opacity:.5}.v-data-table .v-table__wrapper>table>thead>tr.v-data-table__tr--mobile>td,.v-data-table .v-table__wrapper>table tbody>tr.v-data-table__tr--mobile>td{height:fit-content}.v-data-table-column--fixed,.v-data-table__th--sticky{background:rgb(var(--v-theme-surface));position:sticky!important;left:0;z-index:1}.v-data-table-column--last-fixed{border-right:1px solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-data-table.v-table--fixed-header>.v-table__wrapper>table>thead>tr>th.v-data-table-column--fixed{z-index:2}.v-data-table-group-header-row td{background:rgba(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface))}.v-data-table-group-header-row td>span{padding-left:5px}.v-data-table--loading .v-data-table__td{opacity:var(--v-disabled-opacity)}.v-data-table-group-header-row__column{padding-left:calc(var(--v-data-table-group-header-row-depth) * 16px)!important}.v-data-table-header__content{display:flex;align-items:center}.v-data-table-header__sort-badge{display:inline-flex;justify-content:center;align-items:center;font-size:.875rem;padding:4px;border-radius:50%;background:rgba(var(--v-border-color),var(--v-border-opacity));min-width:20px;min-height:20px;width:20px;height:20px}.v-data-table-progress>th{border:none!important;height:auto!important;padding:0!important}.v-data-table-progress__loader{position:relative}.v-data-table-rows-loading,.v-data-table-rows-no-data{text-align:center}.v-data-table__tr--mobile>.v-data-table__td--expanded-row{grid-template-columns:0;justify-content:center}.v-data-table__tr--mobile>.v-data-table__td--select-row{grid-template-columns:0;justify-content:end}.v-data-table__tr--mobile>td{align-items:center;column-gap:4px;display:grid;grid-template-columns:repeat(2,1fr);min-height:var(--v-table-row-height)}.v-data-table__tr--mobile>td:not(:last-child){border-bottom:0!important}.v-data-table__td-title{font-weight:500;text-align:left}.v-data-table__td-value{text-align:right}.v-data-table__td-sort-icon{color:rgba(var(--v-theme-on-surface),var(--v-disabled-opacity))}.v-data-table__td-sort-icon-active{color:rgba(var(--v-theme-on-surface))}.v-data-table-footer{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:8px 4px}.v-data-table-footer__items-per-page{align-items:center;display:flex;justify-content:center}.v-data-table-footer__items-per-page>span{padding-inline-end:8px}.v-data-table-footer__items-per-page>.v-select{width:90px}.v-data-table-footer__info{display:flex;justify-content:flex-end;min-width:116px;padding:0 16px}.v-data-table-footer__paginationz{align-items:center;display:flex;margin-inline-start:16px}.v-data-table-footer__page{padding:0 8px}.v-pagination__list{display:inline-flex;list-style-type:none;justify-content:center;width:100%}.v-pagination__item,.v-pagination__first,.v-pagination__prev,.v-pagination__next,.v-pagination__last{margin:.3rem}.v-table{font-size:.875rem;transition-duration:.28s;transition-property:box-shadow,opacity,background,height;transition-timing-function:cubic-bezier(.4,0,.2,1)}.v-table{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-table .v-table-divider{border-right:thin solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-table .v-table__wrapper>table>thead>tr>th{border-bottom:thin solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-table .v-table__wrapper>table>tbody>tr:not(:last-child)>td,.v-table .v-table__wrapper>table>tbody>tr:not(:last-child)>th{border-bottom:thin solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-table .v-table__wrapper>table>tfoot>tr>td,.v-table .v-table__wrapper>table>tfoot>tr>th{border-top:thin solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-table.v-table--hover>.v-table__wrapper>table>tbody>tr>td{position:relative}.v-table.v-table--hover>.v-table__wrapper>table>tbody>tr:hover>td:after{background:rgba(var(--v-border-color),var(--v-hover-opacity));pointer-events:none}.v-table.v-table--hover>.v-table__wrapper>table>tbody>tr:hover>td:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-table.v-table--fixed-header>.v-table__wrapper>table>thead>tr>th{background:rgb(var(--v-theme-surface));box-shadow:inset 0 -1px rgba(var(--v-border-color),var(--v-border-opacity));z-index:1}.v-table.v-table--fixed-footer>tfoot>tr>th,.v-table.v-table--fixed-footer>tfoot>tr>td{background:rgb(var(--v-theme-surface));box-shadow:inset 0 1px rgba(var(--v-border-color),var(--v-border-opacity))}.v-table{border-radius:inherit;line-height:1.5;max-width:100%;display:flex;flex-direction:column}.v-table>.v-table__wrapper>table{width:100%;border-spacing:0}.v-table>.v-table__wrapper>table>tbody>tr>td,.v-table>.v-table__wrapper>table>tbody>tr>th,.v-table>.v-table__wrapper>table>thead>tr>td,.v-table>.v-table__wrapper>table>thead>tr>th,.v-table>.v-table__wrapper>table>tfoot>tr>td,.v-table>.v-table__wrapper>table>tfoot>tr>th{padding:0 16px;transition-duration:.28s;transition-property:box-shadow,opacity,background,height;transition-timing-function:cubic-bezier(.4,0,.2,1)}.v-table>.v-table__wrapper>table>tbody>tr>td,.v-table>.v-table__wrapper>table>thead>tr>td,.v-table>.v-table__wrapper>table>tfoot>tr>td{height:var(--v-table-row-height)}.v-table>.v-table__wrapper>table>tbody>tr>th,.v-table>.v-table__wrapper>table>thead>tr>th,.v-table>.v-table__wrapper>table>tfoot>tr>th{height:var(--v-table-header-height);font-weight:500;-webkit-user-select:none;user-select:none;text-align:start}.v-table--density-default{--v-table-header-height: 56px;--v-table-row-height: 52px}.v-table--density-comfortable{--v-table-header-height: 48px;--v-table-row-height: 44px}.v-table--density-compact{--v-table-header-height: 40px;--v-table-row-height: 36px}.v-table__wrapper{border-radius:inherit;overflow:auto;flex:1 1 auto}.v-table--has-top>.v-table__wrapper>table>tbody>tr:first-child:hover>td:first-child{border-top-left-radius:0}.v-table--has-top>.v-table__wrapper>table>tbody>tr:first-child:hover>td:last-child{border-top-right-radius:0}.v-table--has-bottom>.v-table__wrapper>table>tbody>tr:last-child:hover>td:first-child{border-bottom-left-radius:0}.v-table--has-bottom>.v-table__wrapper>table>tbody>tr:last-child:hover>td:last-child{border-bottom-right-radius:0}.v-table--fixed-height>.v-table__wrapper{overflow-y:auto}.v-table--fixed-header>.v-table__wrapper>table>thead{position:sticky;top:0;z-index:2}.v-table--fixed-header>.v-table__wrapper>table>thead>tr>th{border-bottom:0px!important}.v-table--fixed-footer>.v-table__wrapper>table>tfoot>tr{position:sticky;bottom:0;z-index:1}.v-table--fixed-footer>.v-table__wrapper>table>tfoot>tr>td,.v-table--fixed-footer>.v-table__wrapper>table>tfoot>tr>th{border-top:0px!important}.v-date-picker{overflow:hidden;width:328px}.v-date-picker--show-week{width:368px}.v-date-picker-controls{display:flex;align-items:center;justify-content:space-between;font-size:.875rem;padding-top:4px;padding-bottom:4px;padding-inline-start:6px;padding-inline-end:12px}.v-date-picker-controls>.v-btn:first-child{text-transform:none;font-weight:400;line-height:initial;letter-spacing:initial}.v-date-picker-controls--variant-classic{padding-inline-start:12px}.v-date-picker-controls--variant-modern .v-date-picker__title:not(:hover){opacity:.7}.v-date-picker--month .v-date-picker-controls--variant-modern .v-date-picker__title{cursor:pointer}.v-date-picker--year .v-date-picker-controls--variant-modern .v-date-picker__title{opacity:1}.v-date-picker-controls .v-btn:last-child{margin-inline-start:4px}.v-date-picker--year .v-date-picker-controls .v-date-picker-controls__mode-btn{transform:rotate(180deg)}.v-date-picker-controls__date{margin-inline-end:4px}.v-date-picker-controls--variant-classic .v-date-picker-controls__date{margin:auto;text-align:center}.v-date-picker-controls__month{display:flex}.v-locale--is-rtl.v-date-picker-controls__month,.v-locale--is-rtl .v-date-picker-controls__month{flex-direction:row-reverse}.v-date-picker-controls--variant-classic .v-date-picker-controls__month{flex:1 0 auto}.v-date-picker__title{display:inline-block}.v-container{width:100%;padding:16px;margin-right:auto;margin-left:auto}@media (min-width: 960px){.v-container{max-width:900px}}@media (min-width: 1280px){.v-container{max-width:1200px}}@media (min-width: 1920px){.v-container{max-width:1800px}}@media (min-width: 2560px){.v-container{max-width:2400px}}.v-container--fluid{max-width:100%}.v-container.fill-height{align-items:center;display:flex;flex-wrap:wrap}.v-row{display:flex;flex-wrap:wrap;flex:1 1 auto;margin:-12px}.v-row+.v-row{margin-top:12px}.v-row+.v-row--dense{margin-top:4px}.v-row--dense{margin:-4px}.v-row--dense>.v-col,.v-row--dense>[class*=v-col-]{padding:4px}.v-row.v-row--no-gutters{margin:0}.v-row.v-row--no-gutters>.v-col,.v-row.v-row--no-gutters>[class*=v-col-]{padding:0}.v-spacer{flex-grow:1}.v-col-xxl,.v-col-xxl-auto,.v-col-xxl-12,.v-col-xxl-11,.v-col-xxl-10,.v-col-xxl-9,.v-col-xxl-8,.v-col-xxl-7,.v-col-xxl-6,.v-col-xxl-5,.v-col-xxl-4,.v-col-xxl-3,.v-col-xxl-2,.v-col-xxl-1,.v-col-xl,.v-col-xl-auto,.v-col-xl-12,.v-col-xl-11,.v-col-xl-10,.v-col-xl-9,.v-col-xl-8,.v-col-xl-7,.v-col-xl-6,.v-col-xl-5,.v-col-xl-4,.v-col-xl-3,.v-col-xl-2,.v-col-xl-1,.v-col-lg,.v-col-lg-auto,.v-col-lg-12,.v-col-lg-11,.v-col-lg-10,.v-col-lg-9,.v-col-lg-8,.v-col-lg-7,.v-col-lg-6,.v-col-lg-5,.v-col-lg-4,.v-col-lg-3,.v-col-lg-2,.v-col-lg-1,.v-col-md,.v-col-md-auto,.v-col-md-12,.v-col-md-11,.v-col-md-10,.v-col-md-9,.v-col-md-8,.v-col-md-7,.v-col-md-6,.v-col-md-5,.v-col-md-4,.v-col-md-3,.v-col-md-2,.v-col-md-1,.v-col-sm,.v-col-sm-auto,.v-col-sm-12,.v-col-sm-11,.v-col-sm-10,.v-col-sm-9,.v-col-sm-8,.v-col-sm-7,.v-col-sm-6,.v-col-sm-5,.v-col-sm-4,.v-col-sm-3,.v-col-sm-2,.v-col-sm-1,.v-col,.v-col-auto,.v-col-12,.v-col-11,.v-col-10,.v-col-9,.v-col-8,.v-col-7,.v-col-6,.v-col-5,.v-col-4,.v-col-3,.v-col-2,.v-col-1{width:100%;padding:12px}.v-col{flex-basis:0;flex-grow:1;max-width:100%}.v-col-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-3{flex:0 0 25%;max-width:25%}.v-col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-6{flex:0 0 50%;max-width:50%}.v-col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-9{flex:0 0 75%;max-width:75%}.v-col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-12{flex:0 0 100%;max-width:100%}.offset-1{margin-inline-start:8.3333333333%}.offset-2{margin-inline-start:16.6666666667%}.offset-3{margin-inline-start:25%}.offset-4{margin-inline-start:33.3333333333%}.offset-5{margin-inline-start:41.6666666667%}.offset-6{margin-inline-start:50%}.offset-7{margin-inline-start:58.3333333333%}.offset-8{margin-inline-start:66.6666666667%}.offset-9{margin-inline-start:75%}.offset-10{margin-inline-start:83.3333333333%}.offset-11{margin-inline-start:91.6666666667%}@media (min-width: 600px){.v-col-sm{flex-basis:0;flex-grow:1;max-width:100%}.v-col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-sm-3{flex:0 0 25%;max-width:25%}.v-col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-sm-6{flex:0 0 50%;max-width:50%}.v-col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-sm-9{flex:0 0 75%;max-width:75%}.v-col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-sm-12{flex:0 0 100%;max-width:100%}.offset-sm-0{margin-inline-start:0}.offset-sm-1{margin-inline-start:8.3333333333%}.offset-sm-2{margin-inline-start:16.6666666667%}.offset-sm-3{margin-inline-start:25%}.offset-sm-4{margin-inline-start:33.3333333333%}.offset-sm-5{margin-inline-start:41.6666666667%}.offset-sm-6{margin-inline-start:50%}.offset-sm-7{margin-inline-start:58.3333333333%}.offset-sm-8{margin-inline-start:66.6666666667%}.offset-sm-9{margin-inline-start:75%}.offset-sm-10{margin-inline-start:83.3333333333%}.offset-sm-11{margin-inline-start:91.6666666667%}}@media (min-width: 960px){.v-col-md{flex-basis:0;flex-grow:1;max-width:100%}.v-col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-md-3{flex:0 0 25%;max-width:25%}.v-col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-md-6{flex:0 0 50%;max-width:50%}.v-col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-md-9{flex:0 0 75%;max-width:75%}.v-col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-md-12{flex:0 0 100%;max-width:100%}.offset-md-0{margin-inline-start:0}.offset-md-1{margin-inline-start:8.3333333333%}.offset-md-2{margin-inline-start:16.6666666667%}.offset-md-3{margin-inline-start:25%}.offset-md-4{margin-inline-start:33.3333333333%}.offset-md-5{margin-inline-start:41.6666666667%}.offset-md-6{margin-inline-start:50%}.offset-md-7{margin-inline-start:58.3333333333%}.offset-md-8{margin-inline-start:66.6666666667%}.offset-md-9{margin-inline-start:75%}.offset-md-10{margin-inline-start:83.3333333333%}.offset-md-11{margin-inline-start:91.6666666667%}}@media (min-width: 1280px){.v-col-lg{flex-basis:0;flex-grow:1;max-width:100%}.v-col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-lg-3{flex:0 0 25%;max-width:25%}.v-col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-lg-6{flex:0 0 50%;max-width:50%}.v-col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-lg-9{flex:0 0 75%;max-width:75%}.v-col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-lg-12{flex:0 0 100%;max-width:100%}.offset-lg-0{margin-inline-start:0}.offset-lg-1{margin-inline-start:8.3333333333%}.offset-lg-2{margin-inline-start:16.6666666667%}.offset-lg-3{margin-inline-start:25%}.offset-lg-4{margin-inline-start:33.3333333333%}.offset-lg-5{margin-inline-start:41.6666666667%}.offset-lg-6{margin-inline-start:50%}.offset-lg-7{margin-inline-start:58.3333333333%}.offset-lg-8{margin-inline-start:66.6666666667%}.offset-lg-9{margin-inline-start:75%}.offset-lg-10{margin-inline-start:83.3333333333%}.offset-lg-11{margin-inline-start:91.6666666667%}}@media (min-width: 1920px){.v-col-xl{flex-basis:0;flex-grow:1;max-width:100%}.v-col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-xl-3{flex:0 0 25%;max-width:25%}.v-col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-xl-6{flex:0 0 50%;max-width:50%}.v-col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-xl-9{flex:0 0 75%;max-width:75%}.v-col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-xl-12{flex:0 0 100%;max-width:100%}.offset-xl-0{margin-inline-start:0}.offset-xl-1{margin-inline-start:8.3333333333%}.offset-xl-2{margin-inline-start:16.6666666667%}.offset-xl-3{margin-inline-start:25%}.offset-xl-4{margin-inline-start:33.3333333333%}.offset-xl-5{margin-inline-start:41.6666666667%}.offset-xl-6{margin-inline-start:50%}.offset-xl-7{margin-inline-start:58.3333333333%}.offset-xl-8{margin-inline-start:66.6666666667%}.offset-xl-9{margin-inline-start:75%}.offset-xl-10{margin-inline-start:83.3333333333%}.offset-xl-11{margin-inline-start:91.6666666667%}}@media (min-width: 2560px){.v-col-xxl{flex-basis:0;flex-grow:1;max-width:100%}.v-col-xxl-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-xxl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-xxl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-xxl-3{flex:0 0 25%;max-width:25%}.v-col-xxl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-xxl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-xxl-6{flex:0 0 50%;max-width:50%}.v-col-xxl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-xxl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-xxl-9{flex:0 0 75%;max-width:75%}.v-col-xxl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-xxl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-xxl-12{flex:0 0 100%;max-width:100%}.offset-xxl-0{margin-inline-start:0}.offset-xxl-1{margin-inline-start:8.3333333333%}.offset-xxl-2{margin-inline-start:16.6666666667%}.offset-xxl-3{margin-inline-start:25%}.offset-xxl-4{margin-inline-start:33.3333333333%}.offset-xxl-5{margin-inline-start:41.6666666667%}.offset-xxl-6{margin-inline-start:50%}.offset-xxl-7{margin-inline-start:58.3333333333%}.offset-xxl-8{margin-inline-start:66.6666666667%}.offset-xxl-9{margin-inline-start:75%}.offset-xxl-10{margin-inline-start:83.3333333333%}.offset-xxl-11{margin-inline-start:91.6666666667%}}.v-date-picker-header{align-items:flex-end;height:70px;display:grid;grid-template-areas:"prepend content append";grid-template-columns:min-content minmax(0,1fr) min-content;overflow:hidden;padding-inline:24px 12px;padding-bottom:12px}.v-date-picker-header__append{grid-area:append}.v-date-picker-header__prepend{grid-area:prepend;padding-inline-start:8px}.v-date-picker-header__content{align-items:center;display:inline-flex;font-size:32px;line-height:40px;grid-area:content;justify-content:space-between}.v-date-picker-header--clickable .v-date-picker-header__content{cursor:pointer}.v-date-picker-header--clickable .v-date-picker-header__content:not(:hover){opacity:.7}.date-picker-header-transition-enter-active,.date-picker-header-reverse-transition-enter-active,.date-picker-header-transition-leave-active,.date-picker-header-reverse-transition-leave-active{transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.date-picker-header-transition-enter-from{transform:translateY(100%)}.date-picker-header-transition-leave-to{opacity:0;transform:translateY(-100%)}.date-picker-header-reverse-transition-enter-from{transform:translateY(-100%)}.date-picker-header-reverse-transition-leave-to{opacity:0;transform:translateY(100%)}.v-date-picker-month{display:flex;justify-content:center;padding:0 12px 8px;--v-date-picker-month-day-diff: 4px}.v-date-picker-month__weeks{display:grid;grid-template-rows:min-content min-content min-content min-content min-content min-content min-content;column-gap:4px;font-size:.85rem}.v-date-picker-month__weeks+.v-date-picker-month__days{grid-row-gap:0}.v-date-picker-month__weekday{font-size:.85rem}.v-date-picker-month__days{display:grid;grid-template-columns:min-content min-content min-content min-content min-content min-content min-content;column-gap:4px;flex:1 1;justify-content:space-around}.v-date-picker-month__day{align-items:center;display:flex;justify-content:center;position:relative;height:40px;width:40px}.v-date-picker-month__day--selected .v-btn{background-color:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-date-picker-month__day .v-btn.v-date-picker-month__day-btn{--v-btn-height: 24px;--v-btn-size: .85rem}.v-date-picker-month__day--week{font-size:var(--v-btn-size)}.v-date-picker-month__day--adjacent{opacity:.5}.v-date-picker-month__day--hide-adjacent{opacity:0}.v-date-picker-months{height:288px}.v-date-picker-months__content{align-items:center;display:grid;flex:1 1;height:inherit;justify-content:space-around;grid-template-columns:repeat(2,1fr);grid-gap:0px 24px;padding-inline-start:36px;padding-inline-end:36px}.v-date-picker-months__content .v-btn{text-transform:none;padding-inline-start:8px;padding-inline-end:8px}.v-date-picker-years{height:288px;overflow-y:scroll}.v-date-picker-years__content{display:grid;flex:1 1;justify-content:space-around;grid-template-columns:repeat(3,1fr);gap:8px 24px;padding-inline:32px}.v-date-picker-years__content .v-btn{padding-inline:8px}.v-picker.v-sheet{display:grid;grid-auto-rows:min-content;grid-template-areas:"title" "header" "body";overflow:hidden}.v-picker.v-sheet{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-picker.v-sheet{border-radius:4px}.v-picker.v-sheet.v-picker--with-actions{grid-template-areas:"title" "header" "body" "actions"}.v-picker__body{grid-area:body;overflow:hidden;position:relative}.v-picker__header{grid-area:header}.v-picker__actions{grid-area:actions;padding:0 12px 12px;display:flex;align-items:center;justify-content:flex-end}.v-picker__actions .v-btn{min-width:48px}.v-picker__actions .v-btn:not(:last-child){margin-inline-end:8px}.v-picker--landscape{grid-template-areas:"title" "header body" "header body"}.v-picker--landscape.v-picker--with-actions{grid-template-areas:"title" "header body" "header actions"}.v-picker-title{text-transform:uppercase;font-size:.75rem;grid-area:title;padding-inline:24px 12px;padding-top:16px;padding-bottom:16px;font-weight:400;letter-spacing:.1666666667em}.v-empty-state{align-items:center;display:flex;flex-direction:column;justify-content:center;min-height:100%;padding:16px}.v-empty-state--start{align-items:flex-start}.v-empty-state--center{align-items:center}.v-empty-state--end{align-items:flex-end}.v-empty-state__media{text-align:center;width:100%}.v-empty-state__media .v-icon{color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity))}.v-empty-state__headline{color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity));font-size:3.75rem;font-weight:300;line-height:1;text-align:center;margin-bottom:8px}.v-empty-state--mobile .v-empty-state__headline{font-size:2.125rem}.v-empty-state__title{font-size:1.25rem;font-weight:500;line-height:1.6;margin-bottom:4px;text-align:center}.v-empty-state__text{font-size:.875rem;font-weight:400;line-height:1.425;padding:0 16px;text-align:center}.v-empty-state__content{padding:24px 0}.v-empty-state__actions{display:flex;gap:8px;padding:16px}.v-empty-state__action-btn.v-btn{background-color:initial;color:initial}.v-expansion-panel{background-color:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-expansion-panel:not(:first-child):after{border-color:rgba(var(--v-border-color),var(--v-border-opacity))}.v-expansion-panel--disabled .v-expansion-panel-title{color:rgba(var(--v-theme-on-surface),.26)}.v-expansion-panel--disabled .v-expansion-panel-title .v-expansion-panel-title__overlay{opacity:.4615384615}.v-expansion-panels{display:flex;flex-wrap:wrap;justify-content:center;list-style-type:none;padding:0;width:100%;position:relative;z-index:1}.v-expansion-panels:not(.v-expansion-panels--variant-accordion)>:not(:first-child):not(:last-child):not(.v-expansion-panel--active):not(.v-expansion-panel--before-active){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.v-expansion-panels:not(.v-expansion-panels--variant-accordion)>:not(:first-child):not(:last-child):not(.v-expansion-panel--active):not(.v-expansion-panel--after-active){border-top-left-radius:0!important;border-top-right-radius:0!important}.v-expansion-panels:not(.v-expansion-panels--variant-accordion)>:first-child:not(:last-child):not(.v-expansion-panel--active):not(.v-expansion-panel--before-active){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.v-expansion-panels:not(.v-expansion-panels--variant-accordion)>:last-child:not(:first-child):not(.v-expansion-panel--active):not(.v-expansion-panel--after-active){border-top-left-radius:0!important;border-top-right-radius:0!important}.v-expansion-panels--variant-accordion>:first-child:not(:last-child){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.v-expansion-panels--variant-accordion>:last-child:not(:first-child){border-top-left-radius:0!important;border-top-right-radius:0!important}.v-expansion-panels--variant-accordion>:last-child:not(:first-child) .v-expansion-panel-title--active{border-bottom-left-radius:initial;border-bottom-right-radius:initial}.v-expansion-panels--variant-accordion>:not(:first-child):not(:last-child){border-radius:0!important}.v-expansion-panels--variant-accordion .v-expansion-panel-title__overlay{transition:.3s border-radius cubic-bezier(.4,0,.2,1)}.v-expansion-panel{flex:1 0 100%;max-width:100%;position:relative;transition:.3s all cubic-bezier(.4,0,.2,1);transition-property:margin-top,border-radius,border,max-width;border-radius:4px}.v-expansion-panel:not(:first-child):after{border-top-style:solid;border-top-width:thin;content:"";left:0;position:absolute;right:0;top:0;transition:.3s opacity cubic-bezier(.4,0,.2,1)}.v-expansion-panel--disabled .v-expansion-panel-title{pointer-events:none}.v-expansion-panel--active:not(:first-child),.v-expansion-panel--active+.v-expansion-panel{margin-top:16px}.v-expansion-panel--active:not(:first-child):after,.v-expansion-panel--active+.v-expansion-panel:after{opacity:0}.v-expansion-panel--active>.v-expansion-panel-title{border-bottom-left-radius:0;border-bottom-right-radius:0}.v-expansion-panel--active>.v-expansion-panel-title:not(.v-expansion-panel-title--static){min-height:64px}.v-expansion-panel__shadow{border-radius:inherit;z-index:-1}.v-expansion-panel__shadow{position:absolute;top:0;left:0;width:100%;height:100%}.v-expansion-panel__shadow{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-expansion-panel-title{align-items:center;text-align:start;border-radius:inherit;display:flex;font-size:.9375rem;line-height:1;min-height:48px;outline:none;padding:16px 24px;position:relative;transition:.3s min-height cubic-bezier(.4,0,.2,1);width:100%;justify-content:space-between}.v-expansion-panel-title:hover>.v-expansion-panel-title__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-expansion-panel-title:focus-visible>.v-expansion-panel-title__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-expansion-panel-title:focus>.v-expansion-panel-title__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-expansion-panel-title--focusable.v-expansion-panel-title--active .v-expansion-panel-title__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-expansion-panel-title--focusable.v-expansion-panel-title--active:hover .v-expansion-panel-title__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-expansion-panel-title--focusable.v-expansion-panel-title--active:focus-visible .v-expansion-panel-title__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-expansion-panel-title--focusable.v-expansion-panel-title--active:focus .v-expansion-panel-title__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-expansion-panel-title__overlay{background-color:currentColor;border-radius:inherit;opacity:0}.v-expansion-panel-title__overlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-expansion-panel-title__icon{display:inline-flex;margin-bottom:-4px;margin-top:-4px;-webkit-user-select:none;user-select:none;margin-inline-start:auto}.v-expansion-panel-text{display:flex}.v-expansion-panel-text__wrapper{padding:8px 24px 16px;flex:1 1 auto;max-width:100%}.v-expansion-panels--variant-accordion>.v-expansion-panel{margin-top:0}.v-expansion-panels--variant-accordion>.v-expansion-panel:after{opacity:1}.v-expansion-panels--variant-popout>.v-expansion-panel{max-width:calc(100% - 32px)}.v-expansion-panels--variant-popout>.v-expansion-panel--active{max-width:calc(100% + 16px)}.v-expansion-panels--variant-inset>.v-expansion-panel{max-width:100%}.v-expansion-panels--variant-inset>.v-expansion-panel--active{max-width:calc(100% - 32px)}.v-expansion-panels--flat>.v-expansion-panel:after{border-top:none}.v-expansion-panels--flat>.v-expansion-panel .v-expansion-panel__shadow{display:none}.v-expansion-panels--tile{border-radius:0}.v-expansion-panels--tile>.v-expansion-panel{border-radius:0}.v-fab{align-items:center;display:inline-flex;flex:1 1 auto;pointer-events:none;position:relative;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);vertical-align:middle}.v-fab .v-btn{pointer-events:auto}.v-fab .v-btn--variant-elevated{box-shadow:0 3px 3px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 3px 4px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 8px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-fab--app,.v-fab--absolute{display:flex}.v-fab--start,.v-fab--left{justify-content:flex-start}.v-fab--center{align-items:center;justify-content:center}.v-fab--end,.v-fab--right{justify-content:flex-end}.v-fab--bottom{align-items:flex-end}.v-fab--top{align-items:flex-start}.v-fab--extended .v-btn{border-radius:9999px!important}.v-fab__container{align-self:center;display:inline-flex;position:absolute;vertical-align:middle}.v-fab--app .v-fab__container{margin:12px}.v-fab--absolute .v-fab__container{position:absolute;z-index:4}.v-fab--offset.v-fab--top .v-fab__container{transform:translateY(-50%)}.v-fab--offset.v-fab--bottom .v-fab__container{transform:translateY(50%)}.v-fab--top .v-fab__container{top:0}.v-fab--bottom .v-fab__container{bottom:0}.v-fab--left .v-fab__container,.v-fab--start .v-fab__container{left:0}.v-fab--right .v-fab__container,.v-fab--end .v-fab__container{right:0}.v-file-input--hide.v-input .v-field,.v-file-input--hide.v-input .v-input__control,.v-file-input--hide.v-input .v-input__details{display:none}.v-file-input--hide.v-input .v-input__prepend{grid-area:control;margin:0 auto}.v-file-input--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-file-input input[type=file]{height:100%;left:0;opacity:0;position:absolute;top:0;width:100%;z-index:1}.v-file-input .v-input__details{padding-inline:16px}.v-input--plain-underlined.v-file-input .v-input__details{padding-inline:0}.v-footer{align-items:center;display:flex;flex:1 1 auto;padding:8px 16px;position:relative;transition:.2s cubic-bezier(.4,0,.2,1);transition-property:height,width,transform,max-width,left,right,top,bottom}.v-footer{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-footer--border{border-width:thin;box-shadow:none}.v-footer{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-footer--absolute{position:absolute}.v-footer--fixed{position:fixed}.v-footer{border-radius:0}.v-footer{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-footer--rounded{border-radius:4px}.v-infinite-scroll--horizontal{display:flex;flex-direction:row;overflow-x:auto}.v-infinite-scroll--horizontal .v-infinite-scroll-intersect{height:100%;width:var(--v-infinite-margin-size, 1px)}.v-infinite-scroll--vertical{display:flex;flex-direction:column;overflow-y:auto}.v-infinite-scroll--vertical .v-infinite-scroll-intersect{height:1px;width:100%}.v-infinite-scroll-intersect{pointer-events:none;margin-top:var(--v-infinite-margin);margin-bottom:calc(var(--v-infinite-margin) * -1)}.v-infinite-scroll-intersect:nth-child(2){--v-infinite-margin: var(--v-infinite-margin-size, 1px)}.v-infinite-scroll-intersect:nth-last-child(2){--v-infinite-margin: calc(var(--v-infinite-margin-size, 1px) * -1)}.v-infinite-scroll__side{align-items:center;display:flex;justify-content:center;padding:8px}.v-item-group{flex:0 1 auto;max-width:100%;position:relative;transition:.2s cubic-bezier(.4,0,.2,1)}.v-kbd{background:rgb(var(--v-theme-kbd));color:rgb(var(--v-theme-on-kbd));border-radius:3px;display:inline;font-size:85%;font-weight:400;padding:.2em .4rem}.v-kbd{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-layout{--v-scrollbar-offset: 0px;display:flex;flex:1 1 auto}.v-layout--full-height{--v-scrollbar-offset: inherit;height:100%}.v-layout-item{position:absolute;transition:.2s cubic-bezier(.4,0,.2,1)}.v-layout-item--absolute{position:absolute}.v-locale-provider{display:contents}.v-main{flex:1 0 auto;max-width:100%;transition:.2s cubic-bezier(.4,0,.2,1);padding-left:var(--v-layout-left);padding-right:var(--v-layout-right);padding-top:var(--v-layout-top);padding-bottom:var(--v-layout-bottom)}.v-main__scroller{max-width:100%;position:relative}.v-main--scrollable{display:flex}.v-main--scrollable{position:absolute;top:0;left:0;width:100%;height:100%}.v-main--scrollable>.v-main__scroller{flex:1 1 auto;overflow-y:auto;--v-layout-left: 0px;--v-layout-right: 0px;--v-layout-top: 0px;--v-layout-bottom: 0px}.v-navigation-drawer{-webkit-overflow-scrolling:touch;background:rgb(var(--v-theme-surface));display:flex;flex-direction:column;height:100%;max-width:100%;pointer-events:auto;transition-duration:.2s;transition-property:box-shadow,transform,visibility,width,height,left,right,top,bottom;transition-timing-function:cubic-bezier(.4,0,.2,1);position:absolute}.v-navigation-drawer{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-navigation-drawer--border{border-width:thin;box-shadow:none}.v-navigation-drawer{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-navigation-drawer{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-navigation-drawer--rounded{border-radius:4px}.v-navigation-drawer--top,.v-navigation-drawer--bottom{max-height:-webkit-fill-available;overflow-y:auto}.v-navigation-drawer--top{top:0;border-bottom-width:thin}.v-navigation-drawer--bottom{left:0;border-top-width:thin}.v-navigation-drawer--left{top:0;left:0;right:auto;border-right-width:thin}.v-navigation-drawer--right{top:0;left:auto;right:0;border-left-width:thin}.v-navigation-drawer--floating{border:none}.v-navigation-drawer--temporary.v-navigation-drawer--active{box-shadow:0 8px 10px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 16px 24px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 6px 30px 5px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-navigation-drawer--sticky{height:auto;transition:box-shadow,transform,visibility,width,height,left,right}.v-navigation-drawer .v-list{overflow:hidden}.v-navigation-drawer__content{flex:0 1 auto;height:100%;max-width:100%;overflow-x:hidden;overflow-y:auto}.v-navigation-drawer__img{height:100%;left:0;position:absolute;top:0;width:100%;z-index:-1}.v-navigation-drawer__img img:not(.v-img__img){height:inherit;object-fit:cover;width:inherit}.v-navigation-drawer__scrim{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;opacity:.2;transition:opacity .2s cubic-bezier(.4,0,.2,1);z-index:1}.v-navigation-drawer__prepend,.v-navigation-drawer__append{flex:none;overflow:hidden}.v-otp-input{align-items:center;display:flex;justify-content:center;padding:.5rem 0;position:relative}.v-otp-input{border-radius:4px}.v-otp-input .v-field{height:100%}.v-otp-input__divider{margin:0 8px}.v-otp-input__content{align-items:center;display:flex;gap:.5rem;height:64px;padding:.5rem;justify-content:center;max-width:320px;position:relative;border-radius:inherit}.v-otp-input--divided .v-otp-input__content{max-width:360px}.v-otp-input__field{color:inherit;font-size:1.25rem;height:100%;outline:none;text-align:center;width:100%}.v-otp-input__field[type=number]::-webkit-outer-spin-button,.v-otp-input__field[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.v-otp-input__field[type=number]{-moz-appearance:textfield}.v-otp-input__loader{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.v-otp-input__loader .v-progress-linear{position:absolute}.v-parallax{position:relative;overflow:hidden}.v-parallax--active>.v-img__img{will-change:transform}.v-radio-group>.v-input__control{flex-direction:column}.v-radio-group>.v-input__control>.v-label{margin-inline-start:16px}.v-radio-group>.v-input__control>.v-label+.v-selection-control-group{padding-inline-start:6px;margin-top:8px}.v-radio-group .v-input__details{padding-inline:16px}.v-rating{max-width:100%;display:inline-flex;white-space:nowrap}.v-rating--readonly{pointer-events:none}.v-rating__wrapper{align-items:center;display:inline-flex;flex-direction:column}.v-rating__wrapper--bottom{flex-direction:column-reverse}.v-rating__item{display:inline-flex;position:relative}.v-rating__item label{cursor:pointer}.v-rating__item .v-btn--variant-plain{opacity:1}.v-rating__item .v-btn{transition-property:transform}.v-rating__item .v-btn .v-icon{transition:inherit;transition-timing-function:cubic-bezier(0,0,.2,1)}.v-rating--hover .v-rating__item:hover:not(.v-rating__item--focused) .v-btn{transform:scale(1.25)}.v-rating__item--half{overflow:hidden;position:absolute;clip-path:polygon(0 0,50% 0,50% 100%,0 100%);z-index:1}.v-rating__item--half .v-btn__overlay,.v-rating__item--half:hover .v-btn__overlay{opacity:0}.v-rating__hidden{height:0;opacity:0;position:absolute;width:0}.v-skeleton-loader{align-items:center;background:rgb(var(--v-theme-surface));border-radius:4px;display:flex;flex-wrap:wrap;position:relative;vertical-align:top}.v-skeleton-loader__actions{justify-content:end}.v-skeleton-loader .v-skeleton-loader__ossein{height:100%}.v-skeleton-loader .v-skeleton-loader__avatar,.v-skeleton-loader .v-skeleton-loader__button,.v-skeleton-loader .v-skeleton-loader__chip,.v-skeleton-loader .v-skeleton-loader__divider,.v-skeleton-loader .v-skeleton-loader__heading,.v-skeleton-loader .v-skeleton-loader__image,.v-skeleton-loader .v-skeleton-loader__ossein,.v-skeleton-loader .v-skeleton-loader__text{background:rgba(var(--v-theme-on-surface),var(--v-border-opacity))}.v-skeleton-loader .v-skeleton-loader__list-item,.v-skeleton-loader .v-skeleton-loader__list-item-avatar,.v-skeleton-loader .v-skeleton-loader__list-item-text,.v-skeleton-loader .v-skeleton-loader__list-item-two-line,.v-skeleton-loader .v-skeleton-loader__list-item-avatar-two-line,.v-skeleton-loader .v-skeleton-loader__list-item-three-line,.v-skeleton-loader .v-skeleton-loader__list-item-avatar-three-line{border-radius:4px}.v-skeleton-loader__bone{align-items:center;border-radius:inherit;display:flex;flex:1 1 100%;flex-wrap:wrap;overflow:hidden;position:relative}.v-skeleton-loader__bone:after{animation:loading 1.5s infinite;background:linear-gradient(90deg,rgba(var(--v-theme-surface),0),rgba(var(--v-theme-surface),.3),rgba(var(--v-theme-surface),0));transform:translate(-100%);z-index:1}.v-skeleton-loader__bone:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-skeleton-loader__avatar{border-radius:50%;flex:0 1 auto;margin:8px 16px;max-height:48px;min-height:48px;height:48px;max-width:48px;min-width:48px;width:48px}.v-skeleton-loader__avatar+.v-skeleton-loader__bone{flex:1 1 auto;margin-inline-start:0}.v-skeleton-loader__avatar+.v-skeleton-loader__sentences>.v-skeleton-loader__text,.v-skeleton-loader__avatar+.v-skeleton-loader__paragraph>.v-skeleton-loader__text{margin-inline-start:0}.v-skeleton-loader__button{border-radius:4px;height:36px;margin:16px;max-width:64px}.v-skeleton-loader__button+.v-skeleton-loader__bone{flex:1 1 auto;margin-inline-start:0}.v-skeleton-loader__button+.v-skeleton-loader__sentences>.v-skeleton-loader__text,.v-skeleton-loader__button+.v-skeleton-loader__paragraph>.v-skeleton-loader__text{margin-inline-start:0}.v-skeleton-loader__chip{border-radius:16px;margin:16px;height:32px;max-width:96px}.v-skeleton-loader__chip+.v-skeleton-loader__bone{flex:1 1 auto;margin-inline-start:0}.v-skeleton-loader__chip+.v-skeleton-loader__sentences>.v-skeleton-loader__text,.v-skeleton-loader__chip+.v-skeleton-loader__paragraph>.v-skeleton-loader__text{margin-inline-start:0}.v-skeleton-loader__date-picker{border-radius:inherit}.v-skeleton-loader__date-picker .v-skeleton-loader__list-item:first-child .v-skeleton-loader__text{max-width:88px;width:20%}.v-skeleton-loader__date-picker .v-skeleton-loader__heading{max-width:256px;width:40%}.v-skeleton-loader__date-picker-days{flex-wrap:wrap;margin:16px}.v-skeleton-loader__date-picker-days .v-skeleton-loader__avatar{border-radius:4px;margin:4px;max-width:100%}.v-skeleton-loader__date-picker-options{flex-wrap:nowrap}.v-skeleton-loader__date-picker-options .v-skeleton-loader__text{flex:1 1 auto}.v-skeleton-loader__divider{border-radius:1px;height:2px}.v-skeleton-loader__heading{border-radius:12px;margin:16px;height:24px}.v-skeleton-loader__heading+.v-skeleton-loader__subtitle{margin-top:-16px}.v-skeleton-loader__image{height:150px;border-radius:0}.v-skeleton-loader__card .v-skeleton-loader__image{border-radius:0}.v-skeleton-loader__list-item{margin:16px}.v-skeleton-loader__list-item .v-skeleton-loader__text{margin:0}.v-skeleton-loader__table-thead{justify-content:space-between}.v-skeleton-loader__table-thead .v-skeleton-loader__heading{margin-top:16px;max-width:16px}.v-skeleton-loader__table-tfoot{flex-wrap:nowrap}.v-skeleton-loader__table-tfoot>.v-skeleton-loader__text.v-skeleton-loader__bone{margin-top:16px}.v-skeleton-loader__table-row{align-items:baseline;margin:0 8px;justify-content:space-evenly;flex-wrap:nowrap}.v-skeleton-loader__table-row>.v-skeleton-loader__text.v-skeleton-loader__bone{margin-inline:8px}.v-skeleton-loader__table-row+.v-skeleton-loader__divider{margin:0 16px}.v-skeleton-loader__table-cell{align-items:center;display:flex;height:48px;width:88px}.v-skeleton-loader__table-cell .v-skeleton-loader__text{margin-bottom:0}.v-skeleton-loader__subtitle{max-width:70%}.v-skeleton-loader__subtitle>.v-skeleton-loader__text{height:16px;border-radius:8px}.v-skeleton-loader__text{border-radius:6px;margin:16px;height:12px}.v-skeleton-loader__text+.v-skeleton-loader__text{margin-top:-8px;max-width:50%}.v-skeleton-loader__text+.v-skeleton-loader__text+.v-skeleton-loader__text{max-width:70%}.v-skeleton-loader--boilerplate .v-skeleton-loader__bone:after{display:none}.v-skeleton-loader--is-loading{overflow:hidden}.v-skeleton-loader--tile,.v-skeleton-loader--tile .v-skeleton-loader__bone{border-radius:0}@keyframes loading{to{transform:translate(100%)}}.v-snackbar{justify-content:center;z-index:10000;margin:8px;margin-inline-end:calc(8px + var(--v-scrollbar-offset));padding:var(--v-layout-top) var(--v-layout-right) var(--v-layout-bottom) var(--v-layout-left)}.v-snackbar:not(.v-snackbar--center):not(.v-snackbar--top){align-items:flex-end}.v-snackbar__wrapper{align-items:center;display:flex;max-width:672px;min-height:48px;min-width:344px;overflow:hidden;padding:0}.v-snackbar__wrapper{border-radius:4px}.v-snackbar--variant-plain,.v-snackbar--variant-outlined,.v-snackbar--variant-text,.v-snackbar--variant-tonal{background:transparent;color:inherit}.v-snackbar--variant-plain{opacity:.62}.v-snackbar--variant-plain:focus,.v-snackbar--variant-plain:hover{opacity:1}.v-snackbar--variant-plain .v-snackbar__overlay{display:none}.v-snackbar--variant-elevated,.v-snackbar--variant-flat{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-snackbar--variant-elevated{box-shadow:0 3px 5px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 6px 10px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 18px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-snackbar--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-snackbar--variant-outlined{border:thin solid currentColor}.v-snackbar--variant-text .v-snackbar__overlay{background:currentColor}.v-snackbar--variant-tonal .v-snackbar__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-snackbar .v-snackbar__underlay{position:absolute}.v-snackbar__content{flex-grow:1;font-size:.875rem;font-weight:400;letter-spacing:.0178571429em;line-height:1.425;margin-right:auto;padding:14px 16px;text-align:initial}.v-snackbar__actions{align-items:center;align-self:center;display:flex;margin-inline-end:8px}.v-snackbar__actions>.v-btn{padding:0 8px;min-width:auto}.v-snackbar__timer{width:100%;position:absolute;top:0}.v-snackbar__timer .v-progress-linear{transition:.2s linear}.v-snackbar--absolute{position:absolute;z-index:1}.v-snackbar--multi-line .v-snackbar__wrapper{min-height:68px}.v-snackbar--vertical .v-snackbar__wrapper{flex-direction:column}.v-snackbar--vertical .v-snackbar__wrapper .v-snackbar__actions{align-self:flex-end;margin-bottom:8px}.v-snackbar--center{align-items:center;justify-content:center}.v-snackbar--top{align-items:flex-start}.v-snackbar--bottom{align-items:flex-end}.v-snackbar--left,.v-snackbar--start{justify-content:flex-start}.v-snackbar--right,.v-snackbar--end{justify-content:flex-end}.v-snackbar-transition-enter-active,.v-snackbar-transition-leave-active{transition-duration:.15s;transition-timing-function:cubic-bezier(0,0,.2,1)}.v-snackbar-transition-enter-active{transition-property:opacity,transform}.v-snackbar-transition-enter-from{opacity:0;transform:scale(.8)}.v-snackbar-transition-leave-active{transition-property:opacity}.v-snackbar-transition-leave-to{opacity:0}.v-speed-dial__content{gap:8px}.v-speed-dial__content.v-overlay__content.v-speed-dial__content--end,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--end-center,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--right,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--right-center{flex-direction:row}.v-speed-dial__content.v-overlay__content.v-speed-dial__content--left,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--left-center,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--start,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--start-center{flex-direction:row-reverse}.v-speed-dial__content.v-overlay__content.v-speed-dial__content--top,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--top-center{flex-direction:column-reverse}.v-speed-dial__content>*:nth-child(1){transition-delay:0s}.v-speed-dial__content>*:nth-child(2){transition-delay:.05s}.v-speed-dial__content>*:nth-child(3){transition-delay:.1s}.v-speed-dial__content>*:nth-child(4){transition-delay:.15s}.v-speed-dial__content>*:nth-child(5){transition-delay:.2s}.v-speed-dial__content>*:nth-child(6){transition-delay:.25s}.v-speed-dial__content>*:nth-child(7){transition-delay:.3s}.v-speed-dial__content>*:nth-child(8){transition-delay:.35s}.v-speed-dial__content>*:nth-child(9){transition-delay:.4s}.v-speed-dial__content>*:nth-child(10){transition-delay:.45s}.v-stepper.v-sheet{overflow:hidden}.v-stepper.v-sheet{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-stepper.v-sheet{border-radius:4px}.v-stepper.v-sheet.v-stepper--flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-stepper-header{align-items:center;display:flex;position:relative;overflow-x:auto;justify-content:space-between;z-index:1}.v-stepper-header{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-stepper-header .v-divider{margin:0 -16px}.v-stepper-header .v-divider:last-child{margin-inline-end:0}.v-stepper-header .v-divider:first-child{margin-inline-start:0}.v-stepper--alt-labels .v-stepper-header{height:auto}.v-stepper--alt-labels .v-stepper-header .v-divider{align-self:flex-start;margin:35px -67px 0}.v-stepper-window{margin:1.5rem}.v-stepper-actions{display:flex;align-items:center;justify-content:space-between;padding:1rem}.v-stepper .v-stepper-actions{padding:0 1.5rem 1rem}.v-stepper-window-item .v-stepper-actions{padding:1.5rem 0 0}.v-stepper-item{align-items:center;align-self:stretch;display:inline-flex;flex:none;outline:none;opacity:var(--v-medium-emphasis-opacity);padding:1.5rem;position:relative;transition-duration:.2s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.v-stepper-item:hover>.v-stepper-item__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-stepper-item:focus-visible>.v-stepper-item__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-stepper-item:focus>.v-stepper-item__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-stepper-item--active>.v-stepper-item__overlay,.v-stepper-item[aria-haspopup=menu][aria-expanded=true]>.v-stepper-item__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-stepper-item--active:hover>.v-stepper-item__overlay,.v-stepper-item[aria-haspopup=menu][aria-expanded=true]:hover>.v-stepper-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-stepper-item--active:focus-visible>.v-stepper-item__overlay,.v-stepper-item[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-stepper-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-stepper-item--active:focus>.v-stepper-item__overlay,.v-stepper-item[aria-haspopup=menu][aria-expanded=true]:focus>.v-stepper-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-stepper--non-linear .v-stepper-item{opacity:var(--v-high-emphasis-opacity)}.v-stepper-item--selected{opacity:1}.v-stepper-item--error{color:rgb(var(--v-theme-error))}.v-stepper-item--disabled{opacity:var(--v-medium-emphasis-opacity);pointer-events:none}.v-stepper--alt-labels .v-stepper-item{flex-direction:column;justify-content:flex-start;align-items:center;flex-basis:175px}.v-stepper-item__avatar.v-avatar{background:rgba(var(--v-theme-surface-variant),var(--v-medium-emphasis-opacity));color:rgb(var(--v-theme-on-surface-variant));font-size:.75rem;margin-inline-end:8px}.v-stepper--mobile .v-stepper-item__avatar.v-avatar{margin-inline-end:0}.v-stepper-item__avatar.v-avatar .v-icon{font-size:.875rem}.v-stepper-item--selected .v-stepper-item__avatar.v-avatar,.v-stepper-item--complete .v-stepper-item__avatar.v-avatar{background:rgb(var(--v-theme-surface-variant))}.v-stepper-item--error .v-stepper-item__avatar.v-avatar{background:rgb(var(--v-theme-error))}.v-stepper--alt-labels .v-stepper-item__avatar.v-avatar{margin-bottom:16px;margin-inline-end:0}.v-stepper-item__title{line-height:1}.v-stepper--mobile .v-stepper-item__title{display:none}.v-stepper-item__subtitle{font-size:.75rem;text-align:left;line-height:1;opacity:var(--v-medium-emphasis-opacity)}.v-stepper--alt-labels .v-stepper-item__subtitle{text-align:center}.v-stepper--mobile .v-stepper-item__subtitle{display:none}.v-stepper-item__overlay{background-color:currentColor;border-radius:inherit;opacity:0;transition:opacity .2s ease-in-out}.v-stepper-item__overlay,.v-stepper-item__underlay{pointer-events:none}.v-stepper-item__overlay,.v-stepper-item__underlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-switch .v-label{padding-inline-start:10px}.v-switch__loader{display:flex}.v-switch__loader .v-progress-circular{color:rgb(var(--v-theme-surface))}.v-switch__track,.v-switch__thumb{transition:none}.v-selection-control--error:not(.v-selection-control--disabled) .v-switch__track,.v-selection-control--error:not(.v-selection-control--disabled) .v-switch__thumb{background-color:rgb(var(--v-theme-error));color:rgb(var(--v-theme-on-error))}.v-switch__track-true{margin-inline-end:auto}.v-selection-control:not(.v-selection-control--dirty) .v-switch__track-true{opacity:0}.v-switch__track-false{margin-inline-start:auto}.v-selection-control--dirty .v-switch__track-false{opacity:0}.v-switch__track{display:inline-flex;align-items:center;font-size:.5rem;padding:0 5px;background-color:rgb(var(--v-theme-surface-variant));border-radius:9999px;height:14px;opacity:.6;min-width:36px;cursor:pointer;transition:.2s background-color cubic-bezier(.4,0,.2,1)}.v-switch--inset .v-switch__track{border-radius:9999px;font-size:.75rem;height:32px;min-width:52px}.v-switch__thumb{align-items:center;background-color:rgb(var(--v-theme-surface-bright));color:rgb(var(--v-theme-on-surface-bright));border-radius:50%;display:flex;font-size:.75rem;height:20px;justify-content:center;width:20px;pointer-events:none;transition:.15s .05s transform cubic-bezier(0,0,.2,1),.2s color cubic-bezier(.4,0,.2,1),.2s background-color cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.v-switch:not(.v-switch--inset) .v-switch__thumb{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-switch.v-switch--flat:not(.v-switch--inset) .v-switch__thumb{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-switch.v-switch--flat:not(.v-switch--inset) .v-switch__thumb{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-switch--inset .v-switch__thumb{height:24px;width:24px;transform:scale(.6666666667)}.v-switch--inset .v-switch__thumb--filled{transform:none}.v-switch--inset .v-selection-control--dirty .v-switch__thumb{transform:none;transition:.15s .05s transform cubic-bezier(0,0,.2,1)}.v-switch.v-input{flex:0 1 auto}.v-switch .v-selection-control{min-height:var(--v-input-control-height)}.v-switch .v-selection-control__input{border-radius:50%;transition:.2s transform cubic-bezier(.4,0,.2,1);position:absolute}.v-locale--is-ltr.v-switch .v-selection-control__input,.v-locale--is-ltr .v-switch .v-selection-control__input{transform:translate(-10px)}.v-locale--is-rtl.v-switch .v-selection-control__input,.v-locale--is-rtl .v-switch .v-selection-control__input{transform:translate(10px)}.v-switch .v-selection-control__input .v-icon{position:absolute}.v-locale--is-ltr.v-switch .v-selection-control--dirty .v-selection-control__input,.v-locale--is-ltr .v-switch .v-selection-control--dirty .v-selection-control__input{transform:translate(10px)}.v-locale--is-rtl.v-switch .v-selection-control--dirty .v-selection-control__input,.v-locale--is-rtl .v-switch .v-selection-control--dirty .v-selection-control__input{transform:translate(-10px)}.v-switch.v-switch--indeterminate .v-selection-control__input{transform:scale(.8)}.v-switch.v-switch--indeterminate .v-switch__thumb{transform:scale(.75);box-shadow:none}.v-switch.v-switch--inset .v-selection-control__wrapper{width:auto}.v-switch.v-input--vertical .v-label{min-width:max-content}.v-switch.v-input--vertical .v-selection-control__wrapper{transform:rotate(-90deg)}@media (forced-colors: active){.v-switch .v-switch__loader .v-progress-circular{color:currentColor}.v-switch .v-switch__thumb{background-color:buttontext}.v-switch .v-switch__track,.v-switch .v-switch__thumb{border:1px solid;color:buttontext}.v-switch:not(.v-switch--loading):not(.v-input--disabled) .v-selection-control--dirty .v-switch__thumb{background-color:highlight}.v-switch:not(.v-input--disabled) .v-selection-control--dirty .v-switch__track{background-color:highlight}.v-switch:not(.v-input--disabled) .v-selection-control--dirty .v-switch__track,.v-switch:not(.v-input--disabled) .v-selection-control--dirty .v-switch__thumb{color:highlight}.v-switch.v-switch--inset .v-switch__track{border-width:2px}.v-switch.v-switch--inset:not(.v-switch--loading):not(.v-input--disabled) .v-selection-control--dirty .v-switch__thumb{background-color:highlighttext;color:highlighttext}.v-switch.v-input--disabled .v-switch__thumb{background-color:graytext}.v-switch.v-input--disabled .v-switch__track,.v-switch.v-input--disabled .v-switch__thumb{color:graytext}.v-switch.v-switch--loading .v-switch__thumb{background-color:canvas}.v-switch.v-switch--loading.v-switch--inset .v-switch__thumb,.v-switch.v-switch--loading.v-switch--indeterminate .v-switch__thumb{border-width:0}}.v-system-bar{align-items:center;display:flex;flex:1 1 auto;height:24px;justify-content:flex-end;max-width:100%;padding-inline:8px;position:relative;text-align:end;width:100%}.v-system-bar .v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-system-bar{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-system-bar--absolute{position:absolute}.v-system-bar--fixed{position:fixed}.v-system-bar{background:rgba(var(--v-theme-surface-light));color:rgba(var(--v-theme-on-surface-light),var(--v-high-emphasis-opacity))}.v-system-bar{font-size:.75rem;font-weight:400;letter-spacing:.0333333333em;line-height:1.667;text-transform:none}.v-system-bar--rounded{border-radius:0}.v-system-bar--window{height:32px}.v-system-bar:not(.v-system-bar--absolute){padding-inline-end:calc(var(--v-scrollbar-offset) + 8px)}.v-tab.v-tab.v-btn{height:var(--v-tabs-height);border-radius:0;min-width:90px}.v-slide-group--horizontal .v-tab{max-width:360px}.v-slide-group--vertical .v-tab{justify-content:start}.v-tab__slider{position:absolute;bottom:0;left:0;height:2px;width:100%;background:currentColor;pointer-events:none;opacity:0}.v-tab--selected .v-tab__slider{opacity:1}.v-slide-group--vertical .v-tab__slider{top:0;height:100%;width:2px}.v-tabs{display:flex;height:var(--v-tabs-height)}.v-tabs--density-default{--v-tabs-height: 48px}.v-tabs--density-default.v-tabs--stacked{--v-tabs-height: 72px}.v-tabs--density-comfortable{--v-tabs-height: 44px}.v-tabs--density-comfortable.v-tabs--stacked{--v-tabs-height: 68px}.v-tabs--density-compact{--v-tabs-height: 36px}.v-tabs--density-compact.v-tabs--stacked{--v-tabs-height: 60px}.v-tabs.v-slide-group--vertical{height:auto;flex:none;--v-tabs-height: 48px}.v-tabs--align-tabs-title:not(.v-slide-group--has-affixes) .v-tab:first-child{margin-inline-start:42px}.v-tabs--fixed-tabs .v-slide-group__content>*:last-child,.v-tabs--align-tabs-center .v-slide-group__content>*:last-child{margin-inline-end:auto}.v-tabs--fixed-tabs .v-slide-group__content>*:first-child,.v-tabs--align-tabs-center .v-slide-group__content>*:first-child{margin-inline-start:auto}.v-tabs--grow{flex-grow:1}.v-tabs--grow .v-tab{flex:1 0 auto;max-width:none}.v-tabs--align-tabs-end .v-tab:first-child{margin-inline-start:auto}.v-tabs--align-tabs-end .v-tab:last-child{margin-inline-end:0}@media (max-width: 1279.98px){.v-tabs.v-slide-group--is-overflowing.v-slide-group--horizontal:not(.v-slide-group--has-affixes) .v-tab:first-child{margin-inline-start:52px}.v-tabs.v-slide-group--is-overflowing.v-slide-group--horizontal:not(.v-slide-group--has-affixes) .v-tab:last-child{margin-inline-end:52px}}.v-textarea .v-field{--v-textarea-control-height: var(--v-input-control-height)}.v-textarea .v-field__field{--v-input-control-height: var(--v-textarea-control-height)}.v-textarea .v-field__input{flex:1 1 auto;outline:none;-webkit-mask-image:linear-gradient(to bottom,transparent,transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px),black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px));mask-image:linear-gradient(to bottom,transparent,transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px),black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px))}.v-textarea .v-field__input.v-textarea__sizer{visibility:hidden;position:absolute;top:0;left:0;height:0!important;min-height:0!important;pointer-events:none}.v-textarea--no-resize .v-field__input{resize:none}.v-textarea .v-field--no-label textarea,.v-textarea .v-field--active textarea{opacity:1}.v-textarea textarea{opacity:0;flex:1;min-width:0;transition:.15s opacity cubic-bezier(.4,0,.2,1)}.v-textarea textarea:focus,.v-textarea textarea:active{outline:none}.v-textarea textarea:invalid{box-shadow:none}.v-theme-provider{background:rgb(var(--v-theme-background));color:rgb(var(--v-theme-on-background))}.v-timeline .v-timeline-divider__dot{background:rgb(var(--v-theme-surface-light))}.v-timeline .v-timeline-divider__inner-dot{background:rgb(var(--v-theme-on-surface))}.v-timeline{display:grid;grid-auto-flow:dense;position:relative}.v-timeline--horizontal.v-timeline{grid-column-gap:24px;width:100%}.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__body{grid-row:3;padding-block-start:24px}.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__opposite{grid-row:1;padding-block-end:24px;align-self:flex-end}.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(odd) .v-timeline-item__body{grid-row:1;padding-block-end:24px;align-self:flex-end}.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(odd) .v-timeline-item__opposite{grid-row:3;padding-block-start:24px}.v-timeline--vertical.v-timeline{row-gap:24px;height:100%}.v-timeline--vertical.v-timeline .v-timeline-item:first-child .v-timeline-divider,.v-timeline--vertical.v-timeline .v-timeline-item:first-child .v-timeline-item__body,.v-timeline--vertical.v-timeline .v-timeline-item:first-child .v-timeline-item__opposite{padding-block-start:24px}.v-timeline--vertical.v-timeline .v-timeline-item:last-child .v-timeline-divider,.v-timeline--vertical.v-timeline .v-timeline-item:last-child .v-timeline-item__body,.v-timeline--vertical.v-timeline .v-timeline-item:last-child .v-timeline-item__opposite{padding-block-end:24px}.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__body{grid-column:1;padding-inline-end:24px}.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__opposite{grid-column:3;padding-inline-start:24px}.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(odd) .v-timeline-item__body{grid-column:3;padding-inline-start:24px}.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(odd) .v-timeline-item__opposite{grid-column:1;justify-self:flex-end;padding-inline-end:24px}.v-timeline-item{display:contents}.v-timeline-divider{position:relative;display:flex;align-items:center}.v-timeline--horizontal .v-timeline-divider{flex-direction:row;grid-row:2;width:100%}.v-timeline--vertical .v-timeline-divider{height:100%;flex-direction:column;grid-column:2}.v-timeline-divider__before{background:rgba(var(--v-border-color),var(--v-border-opacity));position:absolute}.v-timeline--horizontal .v-timeline-divider__before{height:var(--v-timeline-line-thickness);width:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));inset-inline-start:-12px;inset-inline-end:initial}.v-timeline--vertical .v-timeline-divider__before{height:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));width:var(--v-timeline-line-thickness);top:-12px}.v-timeline-divider__after{background:rgba(var(--v-border-color),var(--v-border-opacity));position:absolute}.v-timeline--horizontal .v-timeline-divider__after{height:var(--v-timeline-line-thickness);width:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));inset-inline-end:-12px;inset-inline-start:initial}.v-timeline--vertical .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));width:var(--v-timeline-line-thickness);bottom:-12px}.v-timeline--vertical .v-timeline-item:first-child .v-timeline-divider__before{height:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));top:0}.v-timeline--horizontal .v-timeline-item:first-child .v-timeline-divider__before{width:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));inset-inline-start:0;inset-inline-end:initial}.v-timeline--vertical .v-timeline-item:first-child .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset))}.v-timeline--horizontal .v-timeline-item:first-child .v-timeline-divider__after{width:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset));inset-inline-end:-12px;inset-inline-start:initial}.v-timeline--vertical .v-timeline-item:last-child .v-timeline-divider__before{height:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset))}.v-timeline--horizontal .v-timeline-item:last-child .v-timeline-divider__before{width:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset))}.v-timeline--vertical .v-timeline-item:last-child .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));bottom:0}.v-timeline--horizontal .v-timeline-item:last-child .v-timeline-divider__after{width:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));inset-inline-end:0;inset-inline-start:initial}.v-timeline--vertical .v-timeline-item:only-child .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset))}.v-timeline-divider__dot{z-index:1;flex-shrink:0;border-radius:50%;display:flex;justify-content:center;align-items:center}.v-timeline-divider__dot{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-timeline-divider__dot--size-x-small{height:22px;width:22px}.v-timeline-divider__dot--size-x-small .v-timeline-divider__inner-dot{height:calc(100% - 6px);width:calc(100% - 6px)}.v-timeline-divider__dot--size-small{height:30px;width:30px}.v-timeline-divider__dot--size-small .v-timeline-divider__inner-dot{height:calc(100% - 8px);width:calc(100% - 8px)}.v-timeline-divider__dot--size-default{height:38px;width:38px}.v-timeline-divider__dot--size-default .v-timeline-divider__inner-dot{height:calc(100% - 8px);width:calc(100% - 8px)}.v-timeline-divider__dot--size-large{height:46px;width:46px}.v-timeline-divider__dot--size-large .v-timeline-divider__inner-dot{height:calc(100% - 8px);width:calc(100% - 8px)}.v-timeline-divider__dot--size-x-large{height:54px;width:54px}.v-timeline-divider__dot--size-x-large .v-timeline-divider__inner-dot{height:calc(100% - 10px);width:calc(100% - 10px)}.v-timeline-divider__inner-dot{align-items:center;border-radius:50%;display:flex;justify-content:center}.v-timeline--horizontal.v-timeline--justify-center{grid-template-rows:minmax(auto,50%) min-content minmax(auto,50%)}.v-timeline--vertical.v-timeline--justify-center{grid-template-columns:minmax(auto,50%) min-content minmax(auto,50%)}.v-timeline--horizontal.v-timeline--justify-auto{grid-template-rows:auto min-content auto}.v-timeline--vertical.v-timeline--justify-auto{grid-template-columns:auto min-content auto}.v-timeline--horizontal.v-timeline--density-comfortable{height:100%}.v-timeline--horizontal.v-timeline--density-comfortable.v-timeline--side-end{grid-template-rows:min-content min-content auto}.v-timeline--horizontal.v-timeline--density-comfortable.v-timeline--side-start{grid-template-rows:auto min-content min-content}.v-timeline--vertical.v-timeline--density-comfortable{width:100%}.v-timeline--vertical.v-timeline--density-comfortable.v-timeline--side-end{grid-template-columns:min-content min-content auto}.v-timeline--vertical.v-timeline--density-comfortable.v-timeline--side-start{grid-template-columns:auto min-content min-content}.v-timeline--horizontal.v-timeline--density-compact.v-timeline--side-end{grid-template-rows:0 min-content auto}.v-timeline--horizontal.v-timeline--density-compact.v-timeline--side-start{grid-template-rows:auto min-content 0}.v-timeline--horizontal.v-timeline--density-compact .v-timeline-item__body{grid-row:1}.v-timeline--vertical.v-timeline--density-compact.v-timeline--side-end{grid-template-columns:0 min-content auto}.v-timeline--vertical.v-timeline--density-compact.v-timeline--side-start{grid-template-columns:auto min-content 0}.v-timeline--vertical.v-timeline--density-compact .v-timeline-item__body{grid-column:3}.v-timeline--horizontal.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__body{grid-row:3;padding-block-end:initial;padding-block-start:24px}.v-timeline--horizontal.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__opposite{grid-row:1;padding-block-end:24px;padding-block-start:initial}.v-timeline--vertical.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__body{grid-column:3;padding-inline-start:24px;padding-inline-end:initial;justify-self:flex-start}.v-timeline--vertical.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__opposite{grid-column:1;justify-self:flex-end;padding-inline-end:24px;padding-inline-start:initial}.v-timeline--horizontal.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__body{grid-row:1;padding-block-end:24px;padding-block-start:initial}.v-timeline--horizontal.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__opposite{grid-row:3;padding-block-end:initial;padding-block-start:24px}.v-timeline--vertical.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__body{grid-column:1;justify-self:flex-end;padding-inline-end:24px}.v-timeline--vertical.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__opposite{grid-column:3;padding-inline-start:24px;justify-self:flex-start}.v-timeline-divider--fill-dot .v-timeline-divider__inner-dot{height:inherit;width:inherit}.v-timeline--align-center{--v-timeline-line-size-base: 50%;--v-timeline-line-size-offset: 0px}.v-timeline--horizontal.v-timeline--align-center{justify-items:center}.v-timeline--horizontal.v-timeline--align-center .v-timeline-item__body,.v-timeline--horizontal.v-timeline--align-center .v-timeline-item__opposite{padding-inline:12px}.v-timeline--horizontal.v-timeline--align-center .v-timeline-divider{justify-content:center}.v-timeline--vertical.v-timeline--align-center{align-items:center}.v-timeline--vertical.v-timeline--align-center .v-timeline-divider{justify-content:center}.v-timeline--align-start{--v-timeline-line-size-base: 100%;--v-timeline-line-size-offset: 12px}.v-timeline--align-start .v-timeline-item:first-child .v-timeline-divider__before{--v-timeline-line-size-offset: 24px}.v-timeline--align-start .v-timeline-item:first-child .v-timeline-divider__after{--v-timeline-line-size-offset: -12px}.v-timeline--align-start .v-timeline-item:last-child .v-timeline-divider__after{--v-timeline-line-size-offset: 0px}.v-timeline--horizontal.v-timeline--align-start{justify-items:flex-start}.v-timeline--horizontal.v-timeline--align-start .v-timeline-divider{justify-content:flex-start}.v-timeline--horizontal.v-timeline--align-start .v-timeline-divider .v-timeline-divider__before{width:calc(var(--v-timeline-line-size-offset) + var(--v-timeline-dot-size) / 2 - var(--v-timeline-line-inset))}.v-timeline--horizontal.v-timeline--align-start .v-timeline-divider .v-timeline-divider__after{width:calc(var(--v-timeline-line-size-base) - var(--v-timeline-dot-size) / 2 + var(--v-timeline-line-size-offset) - var(--v-timeline-line-inset))}.v-timeline--vertical.v-timeline--align-start{align-items:flex-start}.v-timeline--vertical.v-timeline--align-start .v-timeline-divider{justify-content:flex-start}.v-timeline--vertical.v-timeline--align-start .v-timeline-divider .v-timeline-divider__before{height:calc(var(--v-timeline-line-size-offset) + var(--v-timeline-dot-size) / 2 - var(--v-timeline-line-inset))}.v-timeline--vertical.v-timeline--align-start .v-timeline-divider .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) - var(--v-timeline-dot-size) / 2 + var(--v-timeline-line-size-offset) - var(--v-timeline-line-inset))}.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider__before{display:none}.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider__after{--v-timeline-line-size-offset: 12px}.v-timeline--vertical.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider,.v-timeline--vertical.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__body,.v-timeline--vertical.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__opposite{padding-block-start:0}.v-timeline--horizontal.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider,.v-timeline--horizontal.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__body,.v-timeline--horizontal.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__opposite{padding-inline-start:0}.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider__after{display:none}.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider__before{--v-timeline-line-size-offset: 12px}.v-timeline--vertical.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider,.v-timeline--vertical.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__body,.v-timeline--vertical.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__opposite{padding-block-end:0}.v-timeline--horizontal.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider,.v-timeline--horizontal.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__body,.v-timeline--horizontal.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__opposite{padding-inline-end:0}.v-tooltip>.v-overlay__content{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant));border-radius:4px;font-size:.875rem;line-height:1.6;display:inline-block;padding:5px 16px;text-transform:initial;width:auto;opacity:1;pointer-events:none;transition-property:opacity,transform;overflow-wrap:break-word}.v-tooltip>.v-overlay__content[class*=enter-active]{transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.15s}.v-tooltip>.v-overlay__content[class*=leave-active]{transition-timing-function:cubic-bezier(.4,0,1,1);transition-duration:75ms}@keyframes v-shake{59%{margin-left:0}60%,80%{margin-left:2px}70%,90%{margin-left:-2px}}.bg-black{background-color:#000!important}.bg-black{color:#fff!important}.bg-white{background-color:#fff!important}.bg-white{color:#000!important}.bg-transparent{background-color:transparent!important}.bg-transparent{color:currentColor!important}.bg-red{background-color:#f44336!important}.bg-red{color:#fff!important}.bg-red-lighten-5{background-color:#ffebee!important}.bg-red-lighten-5{color:#000!important}.bg-red-lighten-4{background-color:#ffcdd2!important}.bg-red-lighten-4{color:#000!important}.bg-red-lighten-3{background-color:#ef9a9a!important}.bg-red-lighten-3{color:#000!important}.bg-red-lighten-2{background-color:#e57373!important}.bg-red-lighten-2{color:#fff!important}.bg-red-lighten-1{background-color:#ef5350!important}.bg-red-lighten-1{color:#fff!important}.bg-red-darken-1{background-color:#e53935!important}.bg-red-darken-1{color:#fff!important}.bg-red-darken-2{background-color:#d32f2f!important}.bg-red-darken-2{color:#fff!important}.bg-red-darken-3{background-color:#c62828!important}.bg-red-darken-3{color:#fff!important}.bg-red-darken-4{background-color:#b71c1c!important}.bg-red-darken-4{color:#fff!important}.bg-red-accent-1{background-color:#ff8a80!important}.bg-red-accent-1{color:#000!important}.bg-red-accent-2{background-color:#ff5252!important}.bg-red-accent-2{color:#fff!important}.bg-red-accent-3{background-color:#ff1744!important}.bg-red-accent-3{color:#fff!important}.bg-red-accent-4{background-color:#d50000!important}.bg-red-accent-4{color:#fff!important}.bg-pink{background-color:#e91e63!important}.bg-pink{color:#fff!important}.bg-pink-lighten-5{background-color:#fce4ec!important}.bg-pink-lighten-5{color:#000!important}.bg-pink-lighten-4{background-color:#f8bbd0!important}.bg-pink-lighten-4{color:#000!important}.bg-pink-lighten-3{background-color:#f48fb1!important}.bg-pink-lighten-3{color:#000!important}.bg-pink-lighten-2{background-color:#f06292!important}.bg-pink-lighten-2{color:#fff!important}.bg-pink-lighten-1{background-color:#ec407a!important}.bg-pink-lighten-1{color:#fff!important}.bg-pink-darken-1{background-color:#d81b60!important}.bg-pink-darken-1{color:#fff!important}.bg-pink-darken-2{background-color:#c2185b!important}.bg-pink-darken-2{color:#fff!important}.bg-pink-darken-3{background-color:#ad1457!important}.bg-pink-darken-3{color:#fff!important}.bg-pink-darken-4{background-color:#880e4f!important}.bg-pink-darken-4{color:#fff!important}.bg-pink-accent-1{background-color:#ff80ab!important}.bg-pink-accent-1{color:#fff!important}.bg-pink-accent-2{background-color:#ff4081!important}.bg-pink-accent-2{color:#fff!important}.bg-pink-accent-3{background-color:#f50057!important}.bg-pink-accent-3{color:#fff!important}.bg-pink-accent-4{background-color:#c51162!important}.bg-pink-accent-4{color:#fff!important}.bg-purple{background-color:#9c27b0!important}.bg-purple{color:#fff!important}.bg-purple-lighten-5{background-color:#f3e5f5!important}.bg-purple-lighten-5{color:#000!important}.bg-purple-lighten-4{background-color:#e1bee7!important}.bg-purple-lighten-4{color:#000!important}.bg-purple-lighten-3{background-color:#ce93d8!important}.bg-purple-lighten-3{color:#fff!important}.bg-purple-lighten-2{background-color:#ba68c8!important}.bg-purple-lighten-2{color:#fff!important}.bg-purple-lighten-1{background-color:#ab47bc!important}.bg-purple-lighten-1{color:#fff!important}.bg-purple-darken-1{background-color:#8e24aa!important}.bg-purple-darken-1{color:#fff!important}.bg-purple-darken-2{background-color:#7b1fa2!important}.bg-purple-darken-2{color:#fff!important}.bg-purple-darken-3{background-color:#6a1b9a!important}.bg-purple-darken-3{color:#fff!important}.bg-purple-darken-4{background-color:#4a148c!important}.bg-purple-darken-4{color:#fff!important}.bg-purple-accent-1{background-color:#ea80fc!important}.bg-purple-accent-1{color:#fff!important}.bg-purple-accent-2{background-color:#e040fb!important}.bg-purple-accent-2{color:#fff!important}.bg-purple-accent-3{background-color:#d500f9!important}.bg-purple-accent-3{color:#fff!important}.bg-purple-accent-4{background-color:#a0f!important}.bg-purple-accent-4{color:#fff!important}.bg-deep-purple{background-color:#673ab7!important}.bg-deep-purple{color:#fff!important}.bg-deep-purple-lighten-5{background-color:#ede7f6!important}.bg-deep-purple-lighten-5{color:#000!important}.bg-deep-purple-lighten-4{background-color:#d1c4e9!important}.bg-deep-purple-lighten-4{color:#000!important}.bg-deep-purple-lighten-3{background-color:#b39ddb!important}.bg-deep-purple-lighten-3{color:#fff!important}.bg-deep-purple-lighten-2{background-color:#9575cd!important}.bg-deep-purple-lighten-2{color:#fff!important}.bg-deep-purple-lighten-1{background-color:#7e57c2!important}.bg-deep-purple-lighten-1{color:#fff!important}.bg-deep-purple-darken-1{background-color:#5e35b1!important}.bg-deep-purple-darken-1{color:#fff!important}.bg-deep-purple-darken-2{background-color:#512da8!important}.bg-deep-purple-darken-2{color:#fff!important}.bg-deep-purple-darken-3{background-color:#4527a0!important}.bg-deep-purple-darken-3{color:#fff!important}.bg-deep-purple-darken-4{background-color:#311b92!important}.bg-deep-purple-darken-4{color:#fff!important}.bg-deep-purple-accent-1{background-color:#b388ff!important}.bg-deep-purple-accent-1{color:#fff!important}.bg-deep-purple-accent-2{background-color:#7c4dff!important}.bg-deep-purple-accent-2{color:#fff!important}.bg-deep-purple-accent-3{background-color:#651fff!important}.bg-deep-purple-accent-3{color:#fff!important}.bg-deep-purple-accent-4{background-color:#6200ea!important}.bg-deep-purple-accent-4{color:#fff!important}.bg-indigo{background-color:#3f51b5!important}.bg-indigo{color:#fff!important}.bg-indigo-lighten-5{background-color:#e8eaf6!important}.bg-indigo-lighten-5{color:#000!important}.bg-indigo-lighten-4{background-color:#c5cae9!important}.bg-indigo-lighten-4{color:#000!important}.bg-indigo-lighten-3{background-color:#9fa8da!important}.bg-indigo-lighten-3{color:#fff!important}.bg-indigo-lighten-2{background-color:#7986cb!important}.bg-indigo-lighten-2{color:#fff!important}.bg-indigo-lighten-1{background-color:#5c6bc0!important}.bg-indigo-lighten-1{color:#fff!important}.bg-indigo-darken-1{background-color:#3949ab!important}.bg-indigo-darken-1{color:#fff!important}.bg-indigo-darken-2{background-color:#303f9f!important}.bg-indigo-darken-2{color:#fff!important}.bg-indigo-darken-3{background-color:#283593!important}.bg-indigo-darken-3{color:#fff!important}.bg-indigo-darken-4{background-color:#1a237e!important}.bg-indigo-darken-4{color:#fff!important}.bg-indigo-accent-1{background-color:#8c9eff!important}.bg-indigo-accent-1{color:#fff!important}.bg-indigo-accent-2{background-color:#536dfe!important}.bg-indigo-accent-2{color:#fff!important}.bg-indigo-accent-3{background-color:#3d5afe!important}.bg-indigo-accent-3{color:#fff!important}.bg-indigo-accent-4{background-color:#304ffe!important}.bg-indigo-accent-4{color:#fff!important}.bg-blue{background-color:#2196f3!important}.bg-blue{color:#fff!important}.bg-blue-lighten-5{background-color:#e3f2fd!important}.bg-blue-lighten-5{color:#000!important}.bg-blue-lighten-4{background-color:#bbdefb!important}.bg-blue-lighten-4{color:#000!important}.bg-blue-lighten-3{background-color:#90caf9!important}.bg-blue-lighten-3{color:#000!important}.bg-blue-lighten-2{background-color:#64b5f6!important}.bg-blue-lighten-2{color:#000!important}.bg-blue-lighten-1{background-color:#42a5f5!important}.bg-blue-lighten-1{color:#fff!important}.bg-blue-darken-1{background-color:#1e88e5!important}.bg-blue-darken-1{color:#fff!important}.bg-blue-darken-2{background-color:#1976d2!important}.bg-blue-darken-2{color:#fff!important}.bg-blue-darken-3{background-color:#1565c0!important}.bg-blue-darken-3{color:#fff!important}.bg-blue-darken-4{background-color:#0d47a1!important}.bg-blue-darken-4{color:#fff!important}.bg-blue-accent-1{background-color:#82b1ff!important}.bg-blue-accent-1{color:#000!important}.bg-blue-accent-2{background-color:#448aff!important}.bg-blue-accent-2{color:#fff!important}.bg-blue-accent-3{background-color:#2979ff!important}.bg-blue-accent-3{color:#fff!important}.bg-blue-accent-4{background-color:#2962ff!important}.bg-blue-accent-4{color:#fff!important}.bg-light-blue{background-color:#03a9f4!important}.bg-light-blue{color:#fff!important}.bg-light-blue-lighten-5{background-color:#e1f5fe!important}.bg-light-blue-lighten-5{color:#000!important}.bg-light-blue-lighten-4{background-color:#b3e5fc!important}.bg-light-blue-lighten-4{color:#000!important}.bg-light-blue-lighten-3{background-color:#81d4fa!important}.bg-light-blue-lighten-3{color:#000!important}.bg-light-blue-lighten-2{background-color:#4fc3f7!important}.bg-light-blue-lighten-2{color:#000!important}.bg-light-blue-lighten-1{background-color:#29b6f6!important}.bg-light-blue-lighten-1{color:#000!important}.bg-light-blue-darken-1{background-color:#039be5!important}.bg-light-blue-darken-1{color:#fff!important}.bg-light-blue-darken-2{background-color:#0288d1!important}.bg-light-blue-darken-2{color:#fff!important}.bg-light-blue-darken-3{background-color:#0277bd!important}.bg-light-blue-darken-3{color:#fff!important}.bg-light-blue-darken-4{background-color:#01579b!important}.bg-light-blue-darken-4{color:#fff!important}.bg-light-blue-accent-1{background-color:#80d8ff!important}.bg-light-blue-accent-1{color:#000!important}.bg-light-blue-accent-2{background-color:#40c4ff!important}.bg-light-blue-accent-2{color:#000!important}.bg-light-blue-accent-3{background-color:#00b0ff!important}.bg-light-blue-accent-3{color:#fff!important}.bg-light-blue-accent-4{background-color:#0091ea!important}.bg-light-blue-accent-4{color:#fff!important}.bg-cyan{background-color:#00bcd4!important}.bg-cyan{color:#000!important}.bg-cyan-lighten-5{background-color:#e0f7fa!important}.bg-cyan-lighten-5{color:#000!important}.bg-cyan-lighten-4{background-color:#b2ebf2!important}.bg-cyan-lighten-4{color:#000!important}.bg-cyan-lighten-3{background-color:#80deea!important}.bg-cyan-lighten-3{color:#000!important}.bg-cyan-lighten-2{background-color:#4dd0e1!important}.bg-cyan-lighten-2{color:#000!important}.bg-cyan-lighten-1{background-color:#26c6da!important}.bg-cyan-lighten-1{color:#000!important}.bg-cyan-darken-1{background-color:#00acc1!important}.bg-cyan-darken-1{color:#fff!important}.bg-cyan-darken-2{background-color:#0097a7!important}.bg-cyan-darken-2{color:#fff!important}.bg-cyan-darken-3{background-color:#00838f!important}.bg-cyan-darken-3{color:#fff!important}.bg-cyan-darken-4{background-color:#006064!important}.bg-cyan-darken-4{color:#fff!important}.bg-cyan-accent-1{background-color:#84ffff!important}.bg-cyan-accent-1{color:#000!important}.bg-cyan-accent-2{background-color:#18ffff!important}.bg-cyan-accent-2{color:#000!important}.bg-cyan-accent-3{background-color:#00e5ff!important}.bg-cyan-accent-3{color:#000!important}.bg-cyan-accent-4{background-color:#00b8d4!important}.bg-cyan-accent-4{color:#fff!important}.bg-teal{background-color:#009688!important}.bg-teal{color:#fff!important}.bg-teal-lighten-5{background-color:#e0f2f1!important}.bg-teal-lighten-5{color:#000!important}.bg-teal-lighten-4{background-color:#b2dfdb!important}.bg-teal-lighten-4{color:#000!important}.bg-teal-lighten-3{background-color:#80cbc4!important}.bg-teal-lighten-3{color:#000!important}.bg-teal-lighten-2{background-color:#4db6ac!important}.bg-teal-lighten-2{color:#fff!important}.bg-teal-lighten-1{background-color:#26a69a!important}.bg-teal-lighten-1{color:#fff!important}.bg-teal-darken-1{background-color:#00897b!important}.bg-teal-darken-1{color:#fff!important}.bg-teal-darken-2{background-color:#00796b!important}.bg-teal-darken-2{color:#fff!important}.bg-teal-darken-3{background-color:#00695c!important}.bg-teal-darken-3{color:#fff!important}.bg-teal-darken-4{background-color:#004d40!important}.bg-teal-darken-4{color:#fff!important}.bg-teal-accent-1{background-color:#a7ffeb!important}.bg-teal-accent-1{color:#000!important}.bg-teal-accent-2{background-color:#64ffda!important}.bg-teal-accent-2{color:#000!important}.bg-teal-accent-3{background-color:#1de9b6!important}.bg-teal-accent-3{color:#000!important}.bg-teal-accent-4{background-color:#00bfa5!important}.bg-teal-accent-4{color:#fff!important}.bg-green{background-color:#4caf50!important}.bg-green{color:#fff!important}.bg-green-lighten-5{background-color:#e8f5e9!important}.bg-green-lighten-5{color:#000!important}.bg-green-lighten-4{background-color:#c8e6c9!important}.bg-green-lighten-4{color:#000!important}.bg-green-lighten-3{background-color:#a5d6a7!important}.bg-green-lighten-3{color:#000!important}.bg-green-lighten-2{background-color:#81c784!important}.bg-green-lighten-2{color:#000!important}.bg-green-lighten-1{background-color:#66bb6a!important}.bg-green-lighten-1{color:#fff!important}.bg-green-darken-1{background-color:#43a047!important}.bg-green-darken-1{color:#fff!important}.bg-green-darken-2{background-color:#388e3c!important}.bg-green-darken-2{color:#fff!important}.bg-green-darken-3{background-color:#2e7d32!important}.bg-green-darken-3{color:#fff!important}.bg-green-darken-4{background-color:#1b5e20!important}.bg-green-darken-4{color:#fff!important}.bg-green-accent-1{background-color:#b9f6ca!important}.bg-green-accent-1{color:#000!important}.bg-green-accent-2{background-color:#69f0ae!important}.bg-green-accent-2{color:#000!important}.bg-green-accent-3{background-color:#00e676!important}.bg-green-accent-3{color:#000!important}.bg-green-accent-4{background-color:#00c853!important}.bg-green-accent-4{color:#000!important}.bg-light-green{background-color:#8bc34a!important}.bg-light-green{color:#000!important}.bg-light-green-lighten-5{background-color:#f1f8e9!important}.bg-light-green-lighten-5{color:#000!important}.bg-light-green-lighten-4{background-color:#dcedc8!important}.bg-light-green-lighten-4{color:#000!important}.bg-light-green-lighten-3{background-color:#c5e1a5!important}.bg-light-green-lighten-3{color:#000!important}.bg-light-green-lighten-2{background-color:#aed581!important}.bg-light-green-lighten-2{color:#000!important}.bg-light-green-lighten-1{background-color:#9ccc65!important}.bg-light-green-lighten-1{color:#000!important}.bg-light-green-darken-1{background-color:#7cb342!important}.bg-light-green-darken-1{color:#fff!important}.bg-light-green-darken-2{background-color:#689f38!important}.bg-light-green-darken-2{color:#fff!important}.bg-light-green-darken-3{background-color:#558b2f!important}.bg-light-green-darken-3{color:#fff!important}.bg-light-green-darken-4{background-color:#33691e!important}.bg-light-green-darken-4{color:#fff!important}.bg-light-green-accent-1{background-color:#ccff90!important}.bg-light-green-accent-1{color:#000!important}.bg-light-green-accent-2{background-color:#b2ff59!important}.bg-light-green-accent-2{color:#000!important}.bg-light-green-accent-3{background-color:#76ff03!important}.bg-light-green-accent-3{color:#000!important}.bg-light-green-accent-4{background-color:#64dd17!important}.bg-light-green-accent-4{color:#000!important}.bg-lime{background-color:#cddc39!important}.bg-lime{color:#000!important}.bg-lime-lighten-5{background-color:#f9fbe7!important}.bg-lime-lighten-5{color:#000!important}.bg-lime-lighten-4{background-color:#f0f4c3!important}.bg-lime-lighten-4{color:#000!important}.bg-lime-lighten-3{background-color:#e6ee9c!important}.bg-lime-lighten-3{color:#000!important}.bg-lime-lighten-2{background-color:#dce775!important}.bg-lime-lighten-2{color:#000!important}.bg-lime-lighten-1{background-color:#d4e157!important}.bg-lime-lighten-1{color:#000!important}.bg-lime-darken-1{background-color:#c0ca33!important}.bg-lime-darken-1{color:#000!important}.bg-lime-darken-2{background-color:#afb42b!important}.bg-lime-darken-2{color:#000!important}.bg-lime-darken-3{background-color:#9e9d24!important}.bg-lime-darken-3{color:#fff!important}.bg-lime-darken-4{background-color:#827717!important}.bg-lime-darken-4{color:#fff!important}.bg-lime-accent-1{background-color:#f4ff81!important}.bg-lime-accent-1{color:#000!important}.bg-lime-accent-2{background-color:#eeff41!important}.bg-lime-accent-2{color:#000!important}.bg-lime-accent-3{background-color:#c6ff00!important}.bg-lime-accent-3{color:#000!important}.bg-lime-accent-4{background-color:#aeea00!important}.bg-lime-accent-4{color:#000!important}.bg-yellow{background-color:#ffeb3b!important}.bg-yellow{color:#000!important}.bg-yellow-lighten-5{background-color:#fffde7!important}.bg-yellow-lighten-5{color:#000!important}.bg-yellow-lighten-4{background-color:#fff9c4!important}.bg-yellow-lighten-4{color:#000!important}.bg-yellow-lighten-3{background-color:#fff59d!important}.bg-yellow-lighten-3{color:#000!important}.bg-yellow-lighten-2{background-color:#fff176!important}.bg-yellow-lighten-2{color:#000!important}.bg-yellow-lighten-1{background-color:#ffee58!important}.bg-yellow-lighten-1{color:#000!important}.bg-yellow-darken-1{background-color:#fdd835!important}.bg-yellow-darken-1{color:#000!important}.bg-yellow-darken-2{background-color:#fbc02d!important}.bg-yellow-darken-2{color:#000!important}.bg-yellow-darken-3{background-color:#f9a825!important}.bg-yellow-darken-3{color:#000!important}.bg-yellow-darken-4{background-color:#f57f17!important}.bg-yellow-darken-4{color:#fff!important}.bg-yellow-accent-1{background-color:#ffff8d!important}.bg-yellow-accent-1{color:#000!important}.bg-yellow-accent-2{background-color:#ff0!important}.bg-yellow-accent-2{color:#000!important}.bg-yellow-accent-3{background-color:#ffea00!important}.bg-yellow-accent-3{color:#000!important}.bg-yellow-accent-4{background-color:#ffd600!important}.bg-yellow-accent-4{color:#000!important}.bg-amber{background-color:#ffc107!important}.bg-amber{color:#000!important}.bg-amber-lighten-5{background-color:#fff8e1!important}.bg-amber-lighten-5{color:#000!important}.bg-amber-lighten-4{background-color:#ffecb3!important}.bg-amber-lighten-4{color:#000!important}.bg-amber-lighten-3{background-color:#ffe082!important}.bg-amber-lighten-3{color:#000!important}.bg-amber-lighten-2{background-color:#ffd54f!important}.bg-amber-lighten-2{color:#000!important}.bg-amber-lighten-1{background-color:#ffca28!important}.bg-amber-lighten-1{color:#000!important}.bg-amber-darken-1{background-color:#ffb300!important}.bg-amber-darken-1{color:#000!important}.bg-amber-darken-2{background-color:#ffa000!important}.bg-amber-darken-2{color:#000!important}.bg-amber-darken-3{background-color:#ff8f00!important}.bg-amber-darken-3{color:#000!important}.bg-amber-darken-4{background-color:#ff6f00!important}.bg-amber-darken-4{color:#fff!important}.bg-amber-accent-1{background-color:#ffe57f!important}.bg-amber-accent-1{color:#000!important}.bg-amber-accent-2{background-color:#ffd740!important}.bg-amber-accent-2{color:#000!important}.bg-amber-accent-3{background-color:#ffc400!important}.bg-amber-accent-3{color:#000!important}.bg-amber-accent-4{background-color:#ffab00!important}.bg-amber-accent-4{color:#000!important}.bg-orange{background-color:#ff9800!important}.bg-orange{color:#000!important}.bg-orange-lighten-5{background-color:#fff3e0!important}.bg-orange-lighten-5{color:#000!important}.bg-orange-lighten-4{background-color:#ffe0b2!important}.bg-orange-lighten-4{color:#000!important}.bg-orange-lighten-3{background-color:#ffcc80!important}.bg-orange-lighten-3{color:#000!important}.bg-orange-lighten-2{background-color:#ffb74d!important}.bg-orange-lighten-2{color:#000!important}.bg-orange-lighten-1{background-color:#ffa726!important}.bg-orange-lighten-1{color:#000!important}.bg-orange-darken-1{background-color:#fb8c00!important}.bg-orange-darken-1{color:#fff!important}.bg-orange-darken-2{background-color:#f57c00!important}.bg-orange-darken-2{color:#fff!important}.bg-orange-darken-3{background-color:#ef6c00!important}.bg-orange-darken-3{color:#fff!important}.bg-orange-darken-4{background-color:#e65100!important}.bg-orange-darken-4{color:#fff!important}.bg-orange-accent-1{background-color:#ffd180!important}.bg-orange-accent-1{color:#000!important}.bg-orange-accent-2{background-color:#ffab40!important}.bg-orange-accent-2{color:#000!important}.bg-orange-accent-3{background-color:#ff9100!important}.bg-orange-accent-3{color:#000!important}.bg-orange-accent-4{background-color:#ff6d00!important}.bg-orange-accent-4{color:#fff!important}.bg-deep-orange{background-color:#ff5722!important}.bg-deep-orange{color:#fff!important}.bg-deep-orange-lighten-5{background-color:#fbe9e7!important}.bg-deep-orange-lighten-5{color:#000!important}.bg-deep-orange-lighten-4{background-color:#ffccbc!important}.bg-deep-orange-lighten-4{color:#000!important}.bg-deep-orange-lighten-3{background-color:#ffab91!important}.bg-deep-orange-lighten-3{color:#000!important}.bg-deep-orange-lighten-2{background-color:#ff8a65!important}.bg-deep-orange-lighten-2{color:#000!important}.bg-deep-orange-lighten-1{background-color:#ff7043!important}.bg-deep-orange-lighten-1{color:#fff!important}.bg-deep-orange-darken-1{background-color:#f4511e!important}.bg-deep-orange-darken-1{color:#fff!important}.bg-deep-orange-darken-2{background-color:#e64a19!important}.bg-deep-orange-darken-2{color:#fff!important}.bg-deep-orange-darken-3{background-color:#d84315!important}.bg-deep-orange-darken-3{color:#fff!important}.bg-deep-orange-darken-4{background-color:#bf360c!important}.bg-deep-orange-darken-4{color:#fff!important}.bg-deep-orange-accent-1{background-color:#ff9e80!important}.bg-deep-orange-accent-1{color:#000!important}.bg-deep-orange-accent-2{background-color:#ff6e40!important}.bg-deep-orange-accent-2{color:#fff!important}.bg-deep-orange-accent-3{background-color:#ff3d00!important}.bg-deep-orange-accent-3{color:#fff!important}.bg-deep-orange-accent-4{background-color:#dd2c00!important}.bg-deep-orange-accent-4{color:#fff!important}.bg-brown{background-color:#795548!important}.bg-brown{color:#fff!important}.bg-brown-lighten-5{background-color:#efebe9!important}.bg-brown-lighten-5{color:#000!important}.bg-brown-lighten-4{background-color:#d7ccc8!important}.bg-brown-lighten-4{color:#000!important}.bg-brown-lighten-3{background-color:#bcaaa4!important}.bg-brown-lighten-3{color:#000!important}.bg-brown-lighten-2{background-color:#a1887f!important}.bg-brown-lighten-2{color:#fff!important}.bg-brown-lighten-1{background-color:#8d6e63!important}.bg-brown-lighten-1{color:#fff!important}.bg-brown-darken-1{background-color:#6d4c41!important}.bg-brown-darken-1{color:#fff!important}.bg-brown-darken-2{background-color:#5d4037!important}.bg-brown-darken-2{color:#fff!important}.bg-brown-darken-3{background-color:#4e342e!important}.bg-brown-darken-3{color:#fff!important}.bg-brown-darken-4{background-color:#3e2723!important}.bg-brown-darken-4{color:#fff!important}.bg-blue-grey{background-color:#607d8b!important}.bg-blue-grey{color:#fff!important}.bg-blue-grey-lighten-5{background-color:#eceff1!important}.bg-blue-grey-lighten-5{color:#000!important}.bg-blue-grey-lighten-4{background-color:#cfd8dc!important}.bg-blue-grey-lighten-4{color:#000!important}.bg-blue-grey-lighten-3{background-color:#b0bec5!important}.bg-blue-grey-lighten-3{color:#000!important}.bg-blue-grey-lighten-2{background-color:#90a4ae!important}.bg-blue-grey-lighten-2{color:#fff!important}.bg-blue-grey-lighten-1{background-color:#78909c!important}.bg-blue-grey-lighten-1{color:#fff!important}.bg-blue-grey-darken-1{background-color:#546e7a!important}.bg-blue-grey-darken-1{color:#fff!important}.bg-blue-grey-darken-2{background-color:#455a64!important}.bg-blue-grey-darken-2{color:#fff!important}.bg-blue-grey-darken-3{background-color:#37474f!important}.bg-blue-grey-darken-3{color:#fff!important}.bg-blue-grey-darken-4{background-color:#263238!important}.bg-blue-grey-darken-4{color:#fff!important}.bg-grey{background-color:#9e9e9e!important}.bg-grey{color:#fff!important}.bg-grey-lighten-5{background-color:#fafafa!important}.bg-grey-lighten-5{color:#000!important}.bg-grey-lighten-4{background-color:#f5f5f5!important}.bg-grey-lighten-4{color:#000!important}.bg-grey-lighten-3{background-color:#eee!important}.bg-grey-lighten-3{color:#000!important}.bg-grey-lighten-2{background-color:#e0e0e0!important}.bg-grey-lighten-2{color:#000!important}.bg-grey-lighten-1{background-color:#bdbdbd!important}.bg-grey-lighten-1{color:#000!important}.bg-grey-darken-1{background-color:#757575!important}.bg-grey-darken-1{color:#fff!important}.bg-grey-darken-2{background-color:#616161!important}.bg-grey-darken-2{color:#fff!important}.bg-grey-darken-3{background-color:#424242!important}.bg-grey-darken-3{color:#fff!important}.bg-grey-darken-4{background-color:#212121!important}.bg-grey-darken-4{color:#fff!important}.bg-shades-black{background-color:#000!important}.bg-shades-black{color:#fff!important}.bg-shades-white{background-color:#fff!important}.bg-shades-white{color:#000!important}.bg-shades-transparent{background-color:transparent!important}.bg-shades-transparent{color:currentColor!important}.text-black{color:#000!important}.text-white{color:#fff!important}.text-transparent{color:transparent!important}.text-red{color:#f44336!important}.text-red-lighten-5{color:#ffebee!important}.text-red-lighten-4{color:#ffcdd2!important}.text-red-lighten-3{color:#ef9a9a!important}.text-red-lighten-2{color:#e57373!important}.text-red-lighten-1{color:#ef5350!important}.text-red-darken-1{color:#e53935!important}.text-red-darken-2{color:#d32f2f!important}.text-red-darken-3{color:#c62828!important}.text-red-darken-4{color:#b71c1c!important}.text-red-accent-1{color:#ff8a80!important}.text-red-accent-2{color:#ff5252!important}.text-red-accent-3{color:#ff1744!important}.text-red-accent-4{color:#d50000!important}.text-pink{color:#e91e63!important}.text-pink-lighten-5{color:#fce4ec!important}.text-pink-lighten-4{color:#f8bbd0!important}.text-pink-lighten-3{color:#f48fb1!important}.text-pink-lighten-2{color:#f06292!important}.text-pink-lighten-1{color:#ec407a!important}.text-pink-darken-1{color:#d81b60!important}.text-pink-darken-2{color:#c2185b!important}.text-pink-darken-3{color:#ad1457!important}.text-pink-darken-4{color:#880e4f!important}.text-pink-accent-1{color:#ff80ab!important}.text-pink-accent-2{color:#ff4081!important}.text-pink-accent-3{color:#f50057!important}.text-pink-accent-4{color:#c51162!important}.text-purple{color:#9c27b0!important}.text-purple-lighten-5{color:#f3e5f5!important}.text-purple-lighten-4{color:#e1bee7!important}.text-purple-lighten-3{color:#ce93d8!important}.text-purple-lighten-2{color:#ba68c8!important}.text-purple-lighten-1{color:#ab47bc!important}.text-purple-darken-1{color:#8e24aa!important}.text-purple-darken-2{color:#7b1fa2!important}.text-purple-darken-3{color:#6a1b9a!important}.text-purple-darken-4{color:#4a148c!important}.text-purple-accent-1{color:#ea80fc!important}.text-purple-accent-2{color:#e040fb!important}.text-purple-accent-3{color:#d500f9!important}.text-purple-accent-4{color:#a0f!important}.text-deep-purple{color:#673ab7!important}.text-deep-purple-lighten-5{color:#ede7f6!important}.text-deep-purple-lighten-4{color:#d1c4e9!important}.text-deep-purple-lighten-3{color:#b39ddb!important}.text-deep-purple-lighten-2{color:#9575cd!important}.text-deep-purple-lighten-1{color:#7e57c2!important}.text-deep-purple-darken-1{color:#5e35b1!important}.text-deep-purple-darken-2{color:#512da8!important}.text-deep-purple-darken-3{color:#4527a0!important}.text-deep-purple-darken-4{color:#311b92!important}.text-deep-purple-accent-1{color:#b388ff!important}.text-deep-purple-accent-2{color:#7c4dff!important}.text-deep-purple-accent-3{color:#651fff!important}.text-deep-purple-accent-4{color:#6200ea!important}.text-indigo{color:#3f51b5!important}.text-indigo-lighten-5{color:#e8eaf6!important}.text-indigo-lighten-4{color:#c5cae9!important}.text-indigo-lighten-3{color:#9fa8da!important}.text-indigo-lighten-2{color:#7986cb!important}.text-indigo-lighten-1{color:#5c6bc0!important}.text-indigo-darken-1{color:#3949ab!important}.text-indigo-darken-2{color:#303f9f!important}.text-indigo-darken-3{color:#283593!important}.text-indigo-darken-4{color:#1a237e!important}.text-indigo-accent-1{color:#8c9eff!important}.text-indigo-accent-2{color:#536dfe!important}.text-indigo-accent-3{color:#3d5afe!important}.text-indigo-accent-4{color:#304ffe!important}.text-blue{color:#2196f3!important}.text-blue-lighten-5{color:#e3f2fd!important}.text-blue-lighten-4{color:#bbdefb!important}.text-blue-lighten-3{color:#90caf9!important}.text-blue-lighten-2{color:#64b5f6!important}.text-blue-lighten-1{color:#42a5f5!important}.text-blue-darken-1{color:#1e88e5!important}.text-blue-darken-2{color:#1976d2!important}.text-blue-darken-3{color:#1565c0!important}.text-blue-darken-4{color:#0d47a1!important}.text-blue-accent-1{color:#82b1ff!important}.text-blue-accent-2{color:#448aff!important}.text-blue-accent-3{color:#2979ff!important}.text-blue-accent-4{color:#2962ff!important}.text-light-blue{color:#03a9f4!important}.text-light-blue-lighten-5{color:#e1f5fe!important}.text-light-blue-lighten-4{color:#b3e5fc!important}.text-light-blue-lighten-3{color:#81d4fa!important}.text-light-blue-lighten-2{color:#4fc3f7!important}.text-light-blue-lighten-1{color:#29b6f6!important}.text-light-blue-darken-1{color:#039be5!important}.text-light-blue-darken-2{color:#0288d1!important}.text-light-blue-darken-3{color:#0277bd!important}.text-light-blue-darken-4{color:#01579b!important}.text-light-blue-accent-1{color:#80d8ff!important}.text-light-blue-accent-2{color:#40c4ff!important}.text-light-blue-accent-3{color:#00b0ff!important}.text-light-blue-accent-4{color:#0091ea!important}.text-cyan{color:#00bcd4!important}.text-cyan-lighten-5{color:#e0f7fa!important}.text-cyan-lighten-4{color:#b2ebf2!important}.text-cyan-lighten-3{color:#80deea!important}.text-cyan-lighten-2{color:#4dd0e1!important}.text-cyan-lighten-1{color:#26c6da!important}.text-cyan-darken-1{color:#00acc1!important}.text-cyan-darken-2{color:#0097a7!important}.text-cyan-darken-3{color:#00838f!important}.text-cyan-darken-4{color:#006064!important}.text-cyan-accent-1{color:#84ffff!important}.text-cyan-accent-2{color:#18ffff!important}.text-cyan-accent-3{color:#00e5ff!important}.text-cyan-accent-4{color:#00b8d4!important}.text-teal{color:#009688!important}.text-teal-lighten-5{color:#e0f2f1!important}.text-teal-lighten-4{color:#b2dfdb!important}.text-teal-lighten-3{color:#80cbc4!important}.text-teal-lighten-2{color:#4db6ac!important}.text-teal-lighten-1{color:#26a69a!important}.text-teal-darken-1{color:#00897b!important}.text-teal-darken-2{color:#00796b!important}.text-teal-darken-3{color:#00695c!important}.text-teal-darken-4{color:#004d40!important}.text-teal-accent-1{color:#a7ffeb!important}.text-teal-accent-2{color:#64ffda!important}.text-teal-accent-3{color:#1de9b6!important}.text-teal-accent-4{color:#00bfa5!important}.text-green{color:#4caf50!important}.text-green-lighten-5{color:#e8f5e9!important}.text-green-lighten-4{color:#c8e6c9!important}.text-green-lighten-3{color:#a5d6a7!important}.text-green-lighten-2{color:#81c784!important}.text-green-lighten-1{color:#66bb6a!important}.text-green-darken-1{color:#43a047!important}.text-green-darken-2{color:#388e3c!important}.text-green-darken-3{color:#2e7d32!important}.text-green-darken-4{color:#1b5e20!important}.text-green-accent-1{color:#b9f6ca!important}.text-green-accent-2{color:#69f0ae!important}.text-green-accent-3{color:#00e676!important}.text-green-accent-4{color:#00c853!important}.text-light-green{color:#8bc34a!important}.text-light-green-lighten-5{color:#f1f8e9!important}.text-light-green-lighten-4{color:#dcedc8!important}.text-light-green-lighten-3{color:#c5e1a5!important}.text-light-green-lighten-2{color:#aed581!important}.text-light-green-lighten-1{color:#9ccc65!important}.text-light-green-darken-1{color:#7cb342!important}.text-light-green-darken-2{color:#689f38!important}.text-light-green-darken-3{color:#558b2f!important}.text-light-green-darken-4{color:#33691e!important}.text-light-green-accent-1{color:#ccff90!important}.text-light-green-accent-2{color:#b2ff59!important}.text-light-green-accent-3{color:#76ff03!important}.text-light-green-accent-4{color:#64dd17!important}.text-lime{color:#cddc39!important}.text-lime-lighten-5{color:#f9fbe7!important}.text-lime-lighten-4{color:#f0f4c3!important}.text-lime-lighten-3{color:#e6ee9c!important}.text-lime-lighten-2{color:#dce775!important}.text-lime-lighten-1{color:#d4e157!important}.text-lime-darken-1{color:#c0ca33!important}.text-lime-darken-2{color:#afb42b!important}.text-lime-darken-3{color:#9e9d24!important}.text-lime-darken-4{color:#827717!important}.text-lime-accent-1{color:#f4ff81!important}.text-lime-accent-2{color:#eeff41!important}.text-lime-accent-3{color:#c6ff00!important}.text-lime-accent-4{color:#aeea00!important}.text-yellow{color:#ffeb3b!important}.text-yellow-lighten-5{color:#fffde7!important}.text-yellow-lighten-4{color:#fff9c4!important}.text-yellow-lighten-3{color:#fff59d!important}.text-yellow-lighten-2{color:#fff176!important}.text-yellow-lighten-1{color:#ffee58!important}.text-yellow-darken-1{color:#fdd835!important}.text-yellow-darken-2{color:#fbc02d!important}.text-yellow-darken-3{color:#f9a825!important}.text-yellow-darken-4{color:#f57f17!important}.text-yellow-accent-1{color:#ffff8d!important}.text-yellow-accent-2{color:#ff0!important}.text-yellow-accent-3{color:#ffea00!important}.text-yellow-accent-4{color:#ffd600!important}.text-amber{color:#ffc107!important}.text-amber-lighten-5{color:#fff8e1!important}.text-amber-lighten-4{color:#ffecb3!important}.text-amber-lighten-3{color:#ffe082!important}.text-amber-lighten-2{color:#ffd54f!important}.text-amber-lighten-1{color:#ffca28!important}.text-amber-darken-1{color:#ffb300!important}.text-amber-darken-2{color:#ffa000!important}.text-amber-darken-3{color:#ff8f00!important}.text-amber-darken-4{color:#ff6f00!important}.text-amber-accent-1{color:#ffe57f!important}.text-amber-accent-2{color:#ffd740!important}.text-amber-accent-3{color:#ffc400!important}.text-amber-accent-4{color:#ffab00!important}.text-orange{color:#ff9800!important}.text-orange-lighten-5{color:#fff3e0!important}.text-orange-lighten-4{color:#ffe0b2!important}.text-orange-lighten-3{color:#ffcc80!important}.text-orange-lighten-2{color:#ffb74d!important}.text-orange-lighten-1{color:#ffa726!important}.text-orange-darken-1{color:#fb8c00!important}.text-orange-darken-2{color:#f57c00!important}.text-orange-darken-3{color:#ef6c00!important}.text-orange-darken-4{color:#e65100!important}.text-orange-accent-1{color:#ffd180!important}.text-orange-accent-2{color:#ffab40!important}.text-orange-accent-3{color:#ff9100!important}.text-orange-accent-4{color:#ff6d00!important}.text-deep-orange{color:#ff5722!important}.text-deep-orange-lighten-5{color:#fbe9e7!important}.text-deep-orange-lighten-4{color:#ffccbc!important}.text-deep-orange-lighten-3{color:#ffab91!important}.text-deep-orange-lighten-2{color:#ff8a65!important}.text-deep-orange-lighten-1{color:#ff7043!important}.text-deep-orange-darken-1{color:#f4511e!important}.text-deep-orange-darken-2{color:#e64a19!important}.text-deep-orange-darken-3{color:#d84315!important}.text-deep-orange-darken-4{color:#bf360c!important}.text-deep-orange-accent-1{color:#ff9e80!important}.text-deep-orange-accent-2{color:#ff6e40!important}.text-deep-orange-accent-3{color:#ff3d00!important}.text-deep-orange-accent-4{color:#dd2c00!important}.text-brown{color:#795548!important}.text-brown-lighten-5{color:#efebe9!important}.text-brown-lighten-4{color:#d7ccc8!important}.text-brown-lighten-3{color:#bcaaa4!important}.text-brown-lighten-2{color:#a1887f!important}.text-brown-lighten-1{color:#8d6e63!important}.text-brown-darken-1{color:#6d4c41!important}.text-brown-darken-2{color:#5d4037!important}.text-brown-darken-3{color:#4e342e!important}.text-brown-darken-4{color:#3e2723!important}.text-blue-grey{color:#607d8b!important}.text-blue-grey-lighten-5{color:#eceff1!important}.text-blue-grey-lighten-4{color:#cfd8dc!important}.text-blue-grey-lighten-3{color:#b0bec5!important}.text-blue-grey-lighten-2{color:#90a4ae!important}.text-blue-grey-lighten-1{color:#78909c!important}.text-blue-grey-darken-1{color:#546e7a!important}.text-blue-grey-darken-2{color:#455a64!important}.text-blue-grey-darken-3{color:#37474f!important}.text-blue-grey-darken-4{color:#263238!important}.text-grey{color:#9e9e9e!important}.text-grey-lighten-5{color:#fafafa!important}.text-grey-lighten-4{color:#f5f5f5!important}.text-grey-lighten-3{color:#eee!important}.text-grey-lighten-2{color:#e0e0e0!important}.text-grey-lighten-1{color:#bdbdbd!important}.text-grey-darken-1{color:#757575!important}.text-grey-darken-2{color:#616161!important}.text-grey-darken-3{color:#424242!important}.text-grey-darken-4{color:#212121!important}.text-shades-black{color:#000!important}.text-shades-white{color:#fff!important}.text-shades-transparent{color:transparent!important}/*! + * ress.css • v2.0.4 + * MIT License + * github.com/filipelinhares/ress + */html{box-sizing:border-box;overflow-y:scroll;-webkit-text-size-adjust:100%;word-break:normal;-moz-tab-size:4;tab-size:4}*,:before,:after{background-repeat:no-repeat;box-sizing:inherit}:before,:after{text-decoration:inherit;vertical-align:inherit}*{padding:0;margin:0}hr{overflow:visible;height:0}details,main{display:block}summary{display:list-item}small{font-size:80%}[hidden]{display:none}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}a{background-color:transparent}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}pre{font-size:1em}b,strong{font-weight:bolder}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[disabled]{cursor:default}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit],[role=button]{cursor:pointer;color:inherit}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{outline:1px dotted ButtonText}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button,input,select,textarea{background-color:transparent;border-style:none}select{-moz-appearance:none;-webkit-appearance:none}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;white-space:normal;max-width:100%}::-webkit-file-upload-button{-webkit-appearance:button;color:inherit;font:inherit}::-ms-clear,::-ms-reveal{display:none}img{border-style:none}progress{vertical-align:baseline}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled=true]{cursor:default}.dialog-transition-enter-active,.dialog-bottom-transition-enter-active,.dialog-top-transition-enter-active{transition-duration:225ms!important;transition-timing-function:cubic-bezier(0,0,.2,1)!important}.dialog-transition-leave-active,.dialog-bottom-transition-leave-active,.dialog-top-transition-leave-active{transition-duration:125ms!important;transition-timing-function:cubic-bezier(.4,0,1,1)!important}.dialog-transition-enter-active,.dialog-transition-leave-active,.dialog-bottom-transition-enter-active,.dialog-bottom-transition-leave-active,.dialog-top-transition-enter-active,.dialog-top-transition-leave-active{transition-property:transform,opacity!important;pointer-events:none}.dialog-transition-enter-from,.dialog-transition-leave-to{transform:scale(.9);opacity:0}.dialog-transition-enter-to,.dialog-transition-leave-from{opacity:1}.dialog-bottom-transition-enter-from,.dialog-bottom-transition-leave-to{transform:translateY(calc(50vh + 50%))}.dialog-top-transition-enter-from,.dialog-top-transition-leave-to{transform:translateY(calc(-50vh - 50%))}.picker-transition-enter-active,.picker-reverse-transition-enter-active,.picker-transition-leave-active,.picker-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-transition-move,.picker-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-transition-enter-from,.picker-transition-leave-to,.picker-reverse-transition-enter-from,.picker-reverse-transition-leave-to{opacity:0}.picker-transition-leave-from,.picker-transition-leave-active,.picker-transition-leave-to,.picker-reverse-transition-leave-from,.picker-reverse-transition-leave-active,.picker-reverse-transition-leave-to{position:absolute!important}.picker-transition-enter-active,.picker-transition-leave-active,.picker-reverse-transition-enter-active,.picker-reverse-transition-leave-active{transition-property:transform,opacity!important}.picker-transition-enter-active,.picker-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-transition-enter-from{transform:translate(100%)}.picker-transition-leave-to{transform:translate(-100%)}.picker-reverse-transition-enter-active,.picker-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-reverse-transition-enter-from{transform:translate(-100%)}.picker-reverse-transition-leave-to{transform:translate(100%)}.expand-transition-enter-active,.expand-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.expand-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.expand-transition-enter-active,.expand-transition-leave-active{transition-property:height!important}.expand-x-transition-enter-active,.expand-x-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.expand-x-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.expand-x-transition-enter-active,.expand-x-transition-leave-active{transition-property:width!important}.scale-transition-enter-active,.scale-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-transition-leave-to{opacity:0}.scale-transition-leave-active{transition-duration:.1s!important}.scale-transition-enter-from{opacity:0;transform:scale(0)}.scale-transition-enter-active,.scale-transition-leave-active{transition-property:transform,opacity!important}.scale-rotate-transition-enter-active,.scale-rotate-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-rotate-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-rotate-transition-leave-to{opacity:0}.scale-rotate-transition-leave-active{transition-duration:.1s!important}.scale-rotate-transition-enter-from{opacity:0;transform:scale(0) rotate(-45deg)}.scale-rotate-transition-enter-active,.scale-rotate-transition-leave-active{transition-property:transform,opacity!important}.scale-rotate-reverse-transition-enter-active,.scale-rotate-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-rotate-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-rotate-reverse-transition-leave-to{opacity:0}.scale-rotate-reverse-transition-leave-active{transition-duration:.1s!important}.scale-rotate-reverse-transition-enter-from{opacity:0;transform:scale(0) rotate(45deg)}.scale-rotate-reverse-transition-enter-active,.scale-rotate-reverse-transition-leave-active{transition-property:transform,opacity!important}.message-transition-enter-active,.message-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.message-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.message-transition-enter-from,.message-transition-leave-to{opacity:0;transform:translateY(-15px)}.message-transition-leave-from,.message-transition-leave-active{position:absolute}.message-transition-enter-active,.message-transition-leave-active{transition-property:transform,opacity!important}.slide-y-transition-enter-active,.slide-y-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-y-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-y-transition-enter-from,.slide-y-transition-leave-to{opacity:0;transform:translateY(-15px)}.slide-y-transition-enter-active,.slide-y-transition-leave-active{transition-property:transform,opacity!important}.slide-y-reverse-transition-enter-active,.slide-y-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-y-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-y-reverse-transition-enter-from,.slide-y-reverse-transition-leave-to{opacity:0;transform:translateY(15px)}.slide-y-reverse-transition-enter-active,.slide-y-reverse-transition-leave-active{transition-property:transform,opacity!important}.scroll-y-transition-enter-active,.scroll-y-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-y-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-y-transition-enter-from,.scroll-y-transition-leave-to{opacity:0}.scroll-y-transition-enter-from{transform:translateY(-15px)}.scroll-y-transition-leave-to{transform:translateY(15px)}.scroll-y-transition-enter-active,.scroll-y-transition-leave-active{transition-property:transform,opacity!important}.scroll-y-reverse-transition-enter-active,.scroll-y-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-y-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-y-reverse-transition-enter-from,.scroll-y-reverse-transition-leave-to{opacity:0}.scroll-y-reverse-transition-enter-from{transform:translateY(15px)}.scroll-y-reverse-transition-leave-to{transform:translateY(-15px)}.scroll-y-reverse-transition-enter-active,.scroll-y-reverse-transition-leave-active{transition-property:transform,opacity!important}.scroll-x-transition-enter-active,.scroll-x-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-x-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-x-transition-enter-from,.scroll-x-transition-leave-to{opacity:0}.scroll-x-transition-enter-from{transform:translate(-15px)}.scroll-x-transition-leave-to{transform:translate(15px)}.scroll-x-transition-enter-active,.scroll-x-transition-leave-active{transition-property:transform,opacity!important}.scroll-x-reverse-transition-enter-active,.scroll-x-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-x-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-x-reverse-transition-enter-from,.scroll-x-reverse-transition-leave-to{opacity:0}.scroll-x-reverse-transition-enter-from{transform:translate(15px)}.scroll-x-reverse-transition-leave-to{transform:translate(-15px)}.scroll-x-reverse-transition-enter-active,.scroll-x-reverse-transition-leave-active{transition-property:transform,opacity!important}.slide-x-transition-enter-active,.slide-x-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-x-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-x-transition-enter-from,.slide-x-transition-leave-to{opacity:0;transform:translate(-15px)}.slide-x-transition-enter-active,.slide-x-transition-leave-active{transition-property:transform,opacity!important}.slide-x-reverse-transition-enter-active,.slide-x-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-x-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-x-reverse-transition-enter-from,.slide-x-reverse-transition-leave-to{opacity:0;transform:translate(15px)}.slide-x-reverse-transition-enter-active,.slide-x-reverse-transition-leave-active{transition-property:transform,opacity!important}.fade-transition-enter-active,.fade-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.fade-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.fade-transition-enter-from,.fade-transition-leave-to{opacity:0!important}.fade-transition-enter-active,.fade-transition-leave-active{transition-property:opacity!important}.fab-transition-enter-active,.fab-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.fab-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.fab-transition-enter-from,.fab-transition-leave-to{transform:scale(0) rotate(-45deg)}.fab-transition-enter-active,.fab-transition-leave-active{transition-property:transform!important}.v-locale--is-rtl{direction:rtl}.v-locale--is-ltr{direction:ltr}.blockquote{padding:16px 0 16px 24px;font-size:18px;font-weight:300}html{font-family:Roboto,sans-serif;line-height:1.5;font-size:1rem;overflow-x:hidden;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:rgba(0,0,0,0)}html.overflow-y-hidden{overflow-y:hidden!important}:root{--v-theme-overlay-multiplier: 1;--v-scrollbar-offset: 0px}@supports (-webkit-touch-callout: none){body{cursor:pointer}}@media only print{.hidden-print-only{display:none!important}}@media only screen{.hidden-screen-only{display:none!important}}@media (max-width: 599.98px){.hidden-xs{display:none!important}}@media (min-width: 600px) and (max-width: 959.98px){.hidden-sm{display:none!important}}@media (min-width: 960px) and (max-width: 1279.98px){.hidden-md{display:none!important}}@media (min-width: 1280px) and (max-width: 1919.98px){.hidden-lg{display:none!important}}@media (min-width: 1920px) and (max-width: 2559.98px){.hidden-xl{display:none!important}}@media (min-width: 2560px){.hidden-xxl{display:none!important}}@media (min-width: 600px){.hidden-sm-and-up{display:none!important}}@media (min-width: 960px){.hidden-md-and-up{display:none!important}}@media (min-width: 1280px){.hidden-lg-and-up{display:none!important}}@media (min-width: 1920px){.hidden-xl-and-up{display:none!important}}@media (max-width: 959.98px){.hidden-sm-and-down{display:none!important}}@media (max-width: 1279.98px){.hidden-md-and-down{display:none!important}}@media (max-width: 1919.98px){.hidden-lg-and-down{display:none!important}}@media (max-width: 2559.98px){.hidden-xl-and-down{display:none!important}}.elevation-24{box-shadow:0 11px 15px -7px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 24px 38px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 9px 46px 8px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-23{box-shadow:0 11px 14px -7px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 23px 36px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 9px 44px 8px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-22{box-shadow:0 10px 14px -6px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 22px 35px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 8px 42px 7px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-21{box-shadow:0 10px 13px -6px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 21px 33px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 8px 40px 7px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-20{box-shadow:0 10px 13px -6px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 20px 31px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 8px 38px 7px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-19{box-shadow:0 9px 12px -6px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 19px 29px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 7px 36px 6px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-18{box-shadow:0 9px 11px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 18px 28px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 7px 34px 6px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-17{box-shadow:0 8px 11px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 17px 26px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 6px 32px 5px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-16{box-shadow:0 8px 10px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 16px 24px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 6px 30px 5px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-15{box-shadow:0 8px 9px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 15px 22px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 6px 28px 5px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-14{box-shadow:0 7px 9px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 14px 21px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 5px 26px 4px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-13{box-shadow:0 7px 8px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 13px 19px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 5px 24px 4px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-12{box-shadow:0 7px 8px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 12px 17px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 5px 22px 4px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-11{box-shadow:0 6px 7px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 11px 15px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 4px 20px 3px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-10{box-shadow:0 6px 6px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 10px 14px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 4px 18px 3px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-9{box-shadow:0 5px 6px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 9px 12px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 16px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-8{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-7{box-shadow:0 4px 5px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 7px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 2px 16px 1px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-6{box-shadow:0 3px 5px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 6px 10px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 18px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-5{box-shadow:0 3px 5px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 5px 8px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 14px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-4{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-3{box-shadow:0 3px 3px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 3px 4px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 8px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-2{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-1{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-0{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.d-sr-only,.d-sr-only-focusable:not(:focus){border:0!important;clip:rect(0,0,0,0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!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-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-scroll{overflow-y:scroll!important}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!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}.float-none{float:none!important}.float-left{float:left!important}.float-right{float:right!important}.v-locale--is-rtl .float-end{float:left!important}.v-locale--is-rtl .float-start,.v-locale--is-ltr .float-end{float:right!important}.v-locale--is-ltr .float-start{float:left!important}.flex-fill,.flex-1-1{flex:1 1 auto!important}.flex-1-0{flex:1 0 auto!important}.flex-0-1{flex:0 1 auto!important}.flex-0-0{flex:0 0 auto!important}.flex-1-1-100{flex:1 1 100%!important}.flex-1-0-100{flex:1 0 100%!important}.flex-0-1-100{flex:0 1 100%!important}.flex-0-0-100{flex:0 0 100%!important}.flex-1-1-0{flex:1 1 0!important}.flex-1-0-0{flex:1 0 0!important}.flex-0-1-0{flex:0 1 0!important}.flex-0-0-0{flex:0 0 0!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-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-space-between{justify-content:space-between!important}.justify-space-around{justify-content:space-around!important}.justify-space-evenly{justify-content:space-evenly!important}.align-start{align-items:flex-start!important}.align-end{align-items:flex-end!important}.align-center{align-items:center!important}.align-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-space-around{align-content:space-around!important}.align-content-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-7{order:7!important}.order-8{order:8!important}.order-9{order:9!important}.order-10{order:10!important}.order-11{order:11!important}.order-12{order:12!important}.order-last{order:13!important}.ga-0{gap:0px!important}.ga-1{gap:4px!important}.ga-2{gap:8px!important}.ga-3{gap:12px!important}.ga-4{gap:16px!important}.ga-5{gap:20px!important}.ga-6{gap:24px!important}.ga-7{gap:28px!important}.ga-8{gap:32px!important}.ga-9{gap:36px!important}.ga-10{gap:40px!important}.ga-11{gap:44px!important}.ga-12{gap:48px!important}.ga-13{gap:52px!important}.ga-14{gap:56px!important}.ga-15{gap:60px!important}.ga-16{gap:64px!important}.ga-auto{gap:auto!important}.gr-0{row-gap:0px!important}.gr-1{row-gap:4px!important}.gr-2{row-gap:8px!important}.gr-3{row-gap:12px!important}.gr-4{row-gap:16px!important}.gr-5{row-gap:20px!important}.gr-6{row-gap:24px!important}.gr-7{row-gap:28px!important}.gr-8{row-gap:32px!important}.gr-9{row-gap:36px!important}.gr-10{row-gap:40px!important}.gr-11{row-gap:44px!important}.gr-12{row-gap:48px!important}.gr-13{row-gap:52px!important}.gr-14{row-gap:56px!important}.gr-15{row-gap:60px!important}.gr-16{row-gap:64px!important}.gr-auto{row-gap:auto!important}.gc-0{column-gap:0px!important}.gc-1{column-gap:4px!important}.gc-2{column-gap:8px!important}.gc-3{column-gap:12px!important}.gc-4{column-gap:16px!important}.gc-5{column-gap:20px!important}.gc-6{column-gap:24px!important}.gc-7{column-gap:28px!important}.gc-8{column-gap:32px!important}.gc-9{column-gap:36px!important}.gc-10{column-gap:40px!important}.gc-11{column-gap:44px!important}.gc-12{column-gap:48px!important}.gc-13{column-gap:52px!important}.gc-14{column-gap:56px!important}.gc-15{column-gap:60px!important}.gc-16{column-gap:64px!important}.gc-auto{column-gap:auto!important}.ma-0{margin:0!important}.ma-1{margin:4px!important}.ma-2{margin:8px!important}.ma-3{margin:12px!important}.ma-4{margin:16px!important}.ma-5{margin:20px!important}.ma-6{margin:24px!important}.ma-7{margin:28px!important}.ma-8{margin:32px!important}.ma-9{margin:36px!important}.ma-10{margin:40px!important}.ma-11{margin:44px!important}.ma-12{margin:48px!important}.ma-13{margin:52px!important}.ma-14{margin:56px!important}.ma-15{margin:60px!important}.ma-16{margin:64px!important}.ma-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:4px!important;margin-left:4px!important}.mx-2{margin-right:8px!important;margin-left:8px!important}.mx-3{margin-right:12px!important;margin-left:12px!important}.mx-4{margin-right:16px!important;margin-left:16px!important}.mx-5{margin-right:20px!important;margin-left:20px!important}.mx-6{margin-right:24px!important;margin-left:24px!important}.mx-7{margin-right:28px!important;margin-left:28px!important}.mx-8{margin-right:32px!important;margin-left:32px!important}.mx-9{margin-right:36px!important;margin-left:36px!important}.mx-10{margin-right:40px!important;margin-left:40px!important}.mx-11{margin-right:44px!important;margin-left:44px!important}.mx-12{margin-right:48px!important;margin-left:48px!important}.mx-13{margin-right:52px!important;margin-left:52px!important}.mx-14{margin-right:56px!important;margin-left:56px!important}.mx-15{margin-right:60px!important;margin-left:60px!important}.mx-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-2{margin-top:8px!important;margin-bottom:8px!important}.my-3{margin-top:12px!important;margin-bottom:12px!important}.my-4{margin-top:16px!important;margin-bottom:16px!important}.my-5{margin-top:20px!important;margin-bottom:20px!important}.my-6{margin-top:24px!important;margin-bottom:24px!important}.my-7{margin-top:28px!important;margin-bottom:28px!important}.my-8{margin-top:32px!important;margin-bottom:32px!important}.my-9{margin-top:36px!important;margin-bottom:36px!important}.my-10{margin-top:40px!important;margin-bottom:40px!important}.my-11{margin-top:44px!important;margin-bottom:44px!important}.my-12{margin-top:48px!important;margin-bottom:48px!important}.my-13{margin-top:52px!important;margin-bottom:52px!important}.my-14{margin-top:56px!important;margin-bottom:56px!important}.my-15{margin-top:60px!important;margin-bottom:60px!important}.my-16{margin-top:64px!important;margin-bottom:64px!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:4px!important}.mt-2{margin-top:8px!important}.mt-3{margin-top:12px!important}.mt-4{margin-top:16px!important}.mt-5{margin-top:20px!important}.mt-6{margin-top:24px!important}.mt-7{margin-top:28px!important}.mt-8{margin-top:32px!important}.mt-9{margin-top:36px!important}.mt-10{margin-top:40px!important}.mt-11{margin-top:44px!important}.mt-12{margin-top:48px!important}.mt-13{margin-top:52px!important}.mt-14{margin-top:56px!important}.mt-15{margin-top:60px!important}.mt-16{margin-top:64px!important}.mt-auto{margin-top:auto!important}.mr-0{margin-right:0!important}.mr-1{margin-right:4px!important}.mr-2{margin-right:8px!important}.mr-3{margin-right:12px!important}.mr-4{margin-right:16px!important}.mr-5{margin-right:20px!important}.mr-6{margin-right:24px!important}.mr-7{margin-right:28px!important}.mr-8{margin-right:32px!important}.mr-9{margin-right:36px!important}.mr-10{margin-right:40px!important}.mr-11{margin-right:44px!important}.mr-12{margin-right:48px!important}.mr-13{margin-right:52px!important}.mr-14{margin-right:56px!important}.mr-15{margin-right:60px!important}.mr-16{margin-right:64px!important}.mr-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:4px!important}.mb-2{margin-bottom:8px!important}.mb-3{margin-bottom:12px!important}.mb-4{margin-bottom:16px!important}.mb-5{margin-bottom:20px!important}.mb-6{margin-bottom:24px!important}.mb-7{margin-bottom:28px!important}.mb-8{margin-bottom:32px!important}.mb-9{margin-bottom:36px!important}.mb-10{margin-bottom:40px!important}.mb-11{margin-bottom:44px!important}.mb-12{margin-bottom:48px!important}.mb-13{margin-bottom:52px!important}.mb-14{margin-bottom:56px!important}.mb-15{margin-bottom:60px!important}.mb-16{margin-bottom:64px!important}.mb-auto{margin-bottom:auto!important}.ml-0{margin-left:0!important}.ml-1{margin-left:4px!important}.ml-2{margin-left:8px!important}.ml-3{margin-left:12px!important}.ml-4{margin-left:16px!important}.ml-5{margin-left:20px!important}.ml-6{margin-left:24px!important}.ml-7{margin-left:28px!important}.ml-8{margin-left:32px!important}.ml-9{margin-left:36px!important}.ml-10{margin-left:40px!important}.ml-11{margin-left:44px!important}.ml-12{margin-left:48px!important}.ml-13{margin-left:52px!important}.ml-14{margin-left:56px!important}.ml-15{margin-left:60px!important}.ml-16{margin-left:64px!important}.ml-auto{margin-left:auto!important}.ms-0{margin-inline-start:0px!important}.ms-1{margin-inline-start:4px!important}.ms-2{margin-inline-start:8px!important}.ms-3{margin-inline-start:12px!important}.ms-4{margin-inline-start:16px!important}.ms-5{margin-inline-start:20px!important}.ms-6{margin-inline-start:24px!important}.ms-7{margin-inline-start:28px!important}.ms-8{margin-inline-start:32px!important}.ms-9{margin-inline-start:36px!important}.ms-10{margin-inline-start:40px!important}.ms-11{margin-inline-start:44px!important}.ms-12{margin-inline-start:48px!important}.ms-13{margin-inline-start:52px!important}.ms-14{margin-inline-start:56px!important}.ms-15{margin-inline-start:60px!important}.ms-16{margin-inline-start:64px!important}.ms-auto{margin-inline-start:auto!important}.me-0{margin-inline-end:0px!important}.me-1{margin-inline-end:4px!important}.me-2{margin-inline-end:8px!important}.me-3{margin-inline-end:12px!important}.me-4{margin-inline-end:16px!important}.me-5{margin-inline-end:20px!important}.me-6{margin-inline-end:24px!important}.me-7{margin-inline-end:28px!important}.me-8{margin-inline-end:32px!important}.me-9{margin-inline-end:36px!important}.me-10{margin-inline-end:40px!important}.me-11{margin-inline-end:44px!important}.me-12{margin-inline-end:48px!important}.me-13{margin-inline-end:52px!important}.me-14{margin-inline-end:56px!important}.me-15{margin-inline-end:60px!important}.me-16{margin-inline-end:64px!important}.me-auto{margin-inline-end:auto!important}.ma-n1{margin:-4px!important}.ma-n2{margin:-8px!important}.ma-n3{margin:-12px!important}.ma-n4{margin:-16px!important}.ma-n5{margin:-20px!important}.ma-n6{margin:-24px!important}.ma-n7{margin:-28px!important}.ma-n8{margin:-32px!important}.ma-n9{margin:-36px!important}.ma-n10{margin:-40px!important}.ma-n11{margin:-44px!important}.ma-n12{margin:-48px!important}.ma-n13{margin:-52px!important}.ma-n14{margin:-56px!important}.ma-n15{margin:-60px!important}.ma-n16{margin:-64px!important}.mx-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-n16{margin-right:-64px!important;margin-left:-64px!important}.my-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-n1{margin-top:-4px!important}.mt-n2{margin-top:-8px!important}.mt-n3{margin-top:-12px!important}.mt-n4{margin-top:-16px!important}.mt-n5{margin-top:-20px!important}.mt-n6{margin-top:-24px!important}.mt-n7{margin-top:-28px!important}.mt-n8{margin-top:-32px!important}.mt-n9{margin-top:-36px!important}.mt-n10{margin-top:-40px!important}.mt-n11{margin-top:-44px!important}.mt-n12{margin-top:-48px!important}.mt-n13{margin-top:-52px!important}.mt-n14{margin-top:-56px!important}.mt-n15{margin-top:-60px!important}.mt-n16{margin-top:-64px!important}.mr-n1{margin-right:-4px!important}.mr-n2{margin-right:-8px!important}.mr-n3{margin-right:-12px!important}.mr-n4{margin-right:-16px!important}.mr-n5{margin-right:-20px!important}.mr-n6{margin-right:-24px!important}.mr-n7{margin-right:-28px!important}.mr-n8{margin-right:-32px!important}.mr-n9{margin-right:-36px!important}.mr-n10{margin-right:-40px!important}.mr-n11{margin-right:-44px!important}.mr-n12{margin-right:-48px!important}.mr-n13{margin-right:-52px!important}.mr-n14{margin-right:-56px!important}.mr-n15{margin-right:-60px!important}.mr-n16{margin-right:-64px!important}.mb-n1{margin-bottom:-4px!important}.mb-n2{margin-bottom:-8px!important}.mb-n3{margin-bottom:-12px!important}.mb-n4{margin-bottom:-16px!important}.mb-n5{margin-bottom:-20px!important}.mb-n6{margin-bottom:-24px!important}.mb-n7{margin-bottom:-28px!important}.mb-n8{margin-bottom:-32px!important}.mb-n9{margin-bottom:-36px!important}.mb-n10{margin-bottom:-40px!important}.mb-n11{margin-bottom:-44px!important}.mb-n12{margin-bottom:-48px!important}.mb-n13{margin-bottom:-52px!important}.mb-n14{margin-bottom:-56px!important}.mb-n15{margin-bottom:-60px!important}.mb-n16{margin-bottom:-64px!important}.ml-n1{margin-left:-4px!important}.ml-n2{margin-left:-8px!important}.ml-n3{margin-left:-12px!important}.ml-n4{margin-left:-16px!important}.ml-n5{margin-left:-20px!important}.ml-n6{margin-left:-24px!important}.ml-n7{margin-left:-28px!important}.ml-n8{margin-left:-32px!important}.ml-n9{margin-left:-36px!important}.ml-n10{margin-left:-40px!important}.ml-n11{margin-left:-44px!important}.ml-n12{margin-left:-48px!important}.ml-n13{margin-left:-52px!important}.ml-n14{margin-left:-56px!important}.ml-n15{margin-left:-60px!important}.ml-n16{margin-left:-64px!important}.ms-n1{margin-inline-start:-4px!important}.ms-n2{margin-inline-start:-8px!important}.ms-n3{margin-inline-start:-12px!important}.ms-n4{margin-inline-start:-16px!important}.ms-n5{margin-inline-start:-20px!important}.ms-n6{margin-inline-start:-24px!important}.ms-n7{margin-inline-start:-28px!important}.ms-n8{margin-inline-start:-32px!important}.ms-n9{margin-inline-start:-36px!important}.ms-n10{margin-inline-start:-40px!important}.ms-n11{margin-inline-start:-44px!important}.ms-n12{margin-inline-start:-48px!important}.ms-n13{margin-inline-start:-52px!important}.ms-n14{margin-inline-start:-56px!important}.ms-n15{margin-inline-start:-60px!important}.ms-n16{margin-inline-start:-64px!important}.me-n1{margin-inline-end:-4px!important}.me-n2{margin-inline-end:-8px!important}.me-n3{margin-inline-end:-12px!important}.me-n4{margin-inline-end:-16px!important}.me-n5{margin-inline-end:-20px!important}.me-n6{margin-inline-end:-24px!important}.me-n7{margin-inline-end:-28px!important}.me-n8{margin-inline-end:-32px!important}.me-n9{margin-inline-end:-36px!important}.me-n10{margin-inline-end:-40px!important}.me-n11{margin-inline-end:-44px!important}.me-n12{margin-inline-end:-48px!important}.me-n13{margin-inline-end:-52px!important}.me-n14{margin-inline-end:-56px!important}.me-n15{margin-inline-end:-60px!important}.me-n16{margin-inline-end:-64px!important}.pa-0{padding:0!important}.pa-1{padding:4px!important}.pa-2{padding:8px!important}.pa-3{padding:12px!important}.pa-4{padding:16px!important}.pa-5{padding:20px!important}.pa-6{padding:24px!important}.pa-7{padding:28px!important}.pa-8{padding:32px!important}.pa-9{padding:36px!important}.pa-10{padding:40px!important}.pa-11{padding:44px!important}.pa-12{padding:48px!important}.pa-13{padding:52px!important}.pa-14{padding:56px!important}.pa-15{padding:60px!important}.pa-16{padding:64px!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:4px!important;padding-left:4px!important}.px-2{padding-right:8px!important;padding-left:8px!important}.px-3{padding-right:12px!important;padding-left:12px!important}.px-4{padding-right:16px!important;padding-left:16px!important}.px-5{padding-right:20px!important;padding-left:20px!important}.px-6{padding-right:24px!important;padding-left:24px!important}.px-7{padding-right:28px!important;padding-left:28px!important}.px-8{padding-right:32px!important;padding-left:32px!important}.px-9{padding-right:36px!important;padding-left:36px!important}.px-10{padding-right:40px!important;padding-left:40px!important}.px-11{padding-right:44px!important;padding-left:44px!important}.px-12{padding-right:48px!important;padding-left:48px!important}.px-13{padding-right:52px!important;padding-left:52px!important}.px-14{padding-right:56px!important;padding-left:56px!important}.px-15{padding-right:60px!important;padding-left:60px!important}.px-16{padding-right:64px!important;padding-left:64px!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:4px!important;padding-bottom:4px!important}.py-2{padding-top:8px!important;padding-bottom:8px!important}.py-3{padding-top:12px!important;padding-bottom:12px!important}.py-4{padding-top:16px!important;padding-bottom:16px!important}.py-5{padding-top:20px!important;padding-bottom:20px!important}.py-6{padding-top:24px!important;padding-bottom:24px!important}.py-7{padding-top:28px!important;padding-bottom:28px!important}.py-8{padding-top:32px!important;padding-bottom:32px!important}.py-9{padding-top:36px!important;padding-bottom:36px!important}.py-10{padding-top:40px!important;padding-bottom:40px!important}.py-11{padding-top:44px!important;padding-bottom:44px!important}.py-12{padding-top:48px!important;padding-bottom:48px!important}.py-13{padding-top:52px!important;padding-bottom:52px!important}.py-14{padding-top:56px!important;padding-bottom:56px!important}.py-15{padding-top:60px!important;padding-bottom:60px!important}.py-16{padding-top:64px!important;padding-bottom:64px!important}.pt-0{padding-top:0!important}.pt-1{padding-top:4px!important}.pt-2{padding-top:8px!important}.pt-3{padding-top:12px!important}.pt-4{padding-top:16px!important}.pt-5{padding-top:20px!important}.pt-6{padding-top:24px!important}.pt-7{padding-top:28px!important}.pt-8{padding-top:32px!important}.pt-9{padding-top:36px!important}.pt-10{padding-top:40px!important}.pt-11{padding-top:44px!important}.pt-12{padding-top:48px!important}.pt-13{padding-top:52px!important}.pt-14{padding-top:56px!important}.pt-15{padding-top:60px!important}.pt-16{padding-top:64px!important}.pr-0{padding-right:0!important}.pr-1{padding-right:4px!important}.pr-2{padding-right:8px!important}.pr-3{padding-right:12px!important}.pr-4{padding-right:16px!important}.pr-5{padding-right:20px!important}.pr-6{padding-right:24px!important}.pr-7{padding-right:28px!important}.pr-8{padding-right:32px!important}.pr-9{padding-right:36px!important}.pr-10{padding-right:40px!important}.pr-11{padding-right:44px!important}.pr-12{padding-right:48px!important}.pr-13{padding-right:52px!important}.pr-14{padding-right:56px!important}.pr-15{padding-right:60px!important}.pr-16{padding-right:64px!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:4px!important}.pb-2{padding-bottom:8px!important}.pb-3{padding-bottom:12px!important}.pb-4{padding-bottom:16px!important}.pb-5{padding-bottom:20px!important}.pb-6{padding-bottom:24px!important}.pb-7{padding-bottom:28px!important}.pb-8{padding-bottom:32px!important}.pb-9{padding-bottom:36px!important}.pb-10{padding-bottom:40px!important}.pb-11{padding-bottom:44px!important}.pb-12{padding-bottom:48px!important}.pb-13{padding-bottom:52px!important}.pb-14{padding-bottom:56px!important}.pb-15{padding-bottom:60px!important}.pb-16{padding-bottom:64px!important}.pl-0{padding-left:0!important}.pl-1{padding-left:4px!important}.pl-2{padding-left:8px!important}.pl-3{padding-left:12px!important}.pl-4{padding-left:16px!important}.pl-5{padding-left:20px!important}.pl-6{padding-left:24px!important}.pl-7{padding-left:28px!important}.pl-8{padding-left:32px!important}.pl-9{padding-left:36px!important}.pl-10{padding-left:40px!important}.pl-11{padding-left:44px!important}.pl-12{padding-left:48px!important}.pl-13{padding-left:52px!important}.pl-14{padding-left:56px!important}.pl-15{padding-left:60px!important}.pl-16{padding-left:64px!important}.ps-0{padding-inline-start:0px!important}.ps-1{padding-inline-start:4px!important}.ps-2{padding-inline-start:8px!important}.ps-3{padding-inline-start:12px!important}.ps-4{padding-inline-start:16px!important}.ps-5{padding-inline-start:20px!important}.ps-6{padding-inline-start:24px!important}.ps-7{padding-inline-start:28px!important}.ps-8{padding-inline-start:32px!important}.ps-9{padding-inline-start:36px!important}.ps-10{padding-inline-start:40px!important}.ps-11{padding-inline-start:44px!important}.ps-12{padding-inline-start:48px!important}.ps-13{padding-inline-start:52px!important}.ps-14{padding-inline-start:56px!important}.ps-15{padding-inline-start:60px!important}.ps-16{padding-inline-start:64px!important}.pe-0{padding-inline-end:0px!important}.pe-1{padding-inline-end:4px!important}.pe-2{padding-inline-end:8px!important}.pe-3{padding-inline-end:12px!important}.pe-4{padding-inline-end:16px!important}.pe-5{padding-inline-end:20px!important}.pe-6{padding-inline-end:24px!important}.pe-7{padding-inline-end:28px!important}.pe-8{padding-inline-end:32px!important}.pe-9{padding-inline-end:36px!important}.pe-10{padding-inline-end:40px!important}.pe-11{padding-inline-end:44px!important}.pe-12{padding-inline-end:48px!important}.pe-13{padding-inline-end:52px!important}.pe-14{padding-inline-end:56px!important}.pe-15{padding-inline-end:60px!important}.pe-16{padding-inline-end:64px!important}.rounded-0{border-radius:0!important}.rounded-sm{border-radius:2px!important}.rounded{border-radius:4px!important}.rounded-lg{border-radius:8px!important}.rounded-xl{border-radius:24px!important}.rounded-pill{border-radius:9999px!important}.rounded-circle{border-radius:50%!important}.rounded-shaped{border-radius:24px 0!important}.rounded-t-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-t-sm{border-top-left-radius:2px!important;border-top-right-radius:2px!important}.rounded-t{border-top-left-radius:4px!important;border-top-right-radius:4px!important}.rounded-t-lg{border-top-left-radius:8px!important;border-top-right-radius:8px!important}.rounded-t-xl{border-top-left-radius:24px!important;border-top-right-radius:24px!important}.rounded-t-pill{border-top-left-radius:9999px!important;border-top-right-radius:9999px!important}.rounded-t-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-t-shaped{border-top-left-radius:24px!important;border-top-right-radius:0!important}.v-locale--is-ltr .rounded-e-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.v-locale--is-rtl .rounded-e-0{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.v-locale--is-ltr .rounded-e-sm{border-top-right-radius:2px!important;border-bottom-right-radius:2px!important}.v-locale--is-rtl .rounded-e-sm{border-top-left-radius:2px!important;border-bottom-left-radius:2px!important}.v-locale--is-ltr .rounded-e{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.v-locale--is-rtl .rounded-e{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}.v-locale--is-ltr .rounded-e-lg{border-top-right-radius:8px!important;border-bottom-right-radius:8px!important}.v-locale--is-rtl .rounded-e-lg{border-top-left-radius:8px!important;border-bottom-left-radius:8px!important}.v-locale--is-ltr .rounded-e-xl{border-top-right-radius:24px!important;border-bottom-right-radius:24px!important}.v-locale--is-rtl .rounded-e-xl{border-top-left-radius:24px!important;border-bottom-left-radius:24px!important}.v-locale--is-ltr .rounded-e-pill{border-top-right-radius:9999px!important;border-bottom-right-radius:9999px!important}.v-locale--is-rtl .rounded-e-pill{border-top-left-radius:9999px!important;border-bottom-left-radius:9999px!important}.v-locale--is-ltr .rounded-e-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.v-locale--is-rtl .rounded-e-circle{border-top-left-radius:50%!important;border-bottom-left-radius:50%!important}.v-locale--is-ltr .rounded-e-shaped{border-top-right-radius:24px!important;border-bottom-right-radius:0!important}.v-locale--is-rtl .rounded-e-shaped{border-top-left-radius:24px!important;border-bottom-left-radius:0!important}.rounded-b-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-b-sm{border-bottom-left-radius:2px!important;border-bottom-right-radius:2px!important}.rounded-b{border-bottom-left-radius:4px!important;border-bottom-right-radius:4px!important}.rounded-b-lg{border-bottom-left-radius:8px!important;border-bottom-right-radius:8px!important}.rounded-b-xl{border-bottom-left-radius:24px!important;border-bottom-right-radius:24px!important}.rounded-b-pill{border-bottom-left-radius:9999px!important;border-bottom-right-radius:9999px!important}.rounded-b-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-b-shaped{border-bottom-left-radius:24px!important;border-bottom-right-radius:0!important}.v-locale--is-ltr .rounded-s-0{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.v-locale--is-rtl .rounded-s-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.v-locale--is-ltr .rounded-s-sm{border-top-left-radius:2px!important;border-bottom-left-radius:2px!important}.v-locale--is-rtl .rounded-s-sm{border-top-right-radius:2px!important;border-bottom-right-radius:2px!important}.v-locale--is-ltr .rounded-s{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}.v-locale--is-rtl .rounded-s{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.v-locale--is-ltr .rounded-s-lg{border-top-left-radius:8px!important;border-bottom-left-radius:8px!important}.v-locale--is-rtl .rounded-s-lg{border-top-right-radius:8px!important;border-bottom-right-radius:8px!important}.v-locale--is-ltr .rounded-s-xl{border-top-left-radius:24px!important;border-bottom-left-radius:24px!important}.v-locale--is-rtl .rounded-s-xl{border-top-right-radius:24px!important;border-bottom-right-radius:24px!important}.v-locale--is-ltr .rounded-s-pill{border-top-left-radius:9999px!important;border-bottom-left-radius:9999px!important}.v-locale--is-rtl .rounded-s-pill{border-top-right-radius:9999px!important;border-bottom-right-radius:9999px!important}.v-locale--is-ltr .rounded-s-circle{border-top-left-radius:50%!important;border-bottom-left-radius:50%!important}.v-locale--is-rtl .rounded-s-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.v-locale--is-ltr .rounded-s-shaped{border-top-left-radius:24px!important;border-bottom-left-radius:0!important}.v-locale--is-rtl .rounded-s-shaped{border-top-right-radius:24px!important;border-bottom-right-radius:0!important}.v-locale--is-ltr .rounded-ts-0{border-top-left-radius:0!important}.v-locale--is-rtl .rounded-ts-0{border-top-right-radius:0!important}.v-locale--is-ltr .rounded-ts-sm{border-top-left-radius:2px!important}.v-locale--is-rtl .rounded-ts-sm{border-top-right-radius:2px!important}.v-locale--is-ltr .rounded-ts{border-top-left-radius:4px!important}.v-locale--is-rtl .rounded-ts{border-top-right-radius:4px!important}.v-locale--is-ltr .rounded-ts-lg{border-top-left-radius:8px!important}.v-locale--is-rtl .rounded-ts-lg{border-top-right-radius:8px!important}.v-locale--is-ltr .rounded-ts-xl{border-top-left-radius:24px!important}.v-locale--is-rtl .rounded-ts-xl{border-top-right-radius:24px!important}.v-locale--is-ltr .rounded-ts-pill{border-top-left-radius:9999px!important}.v-locale--is-rtl .rounded-ts-pill{border-top-right-radius:9999px!important}.v-locale--is-ltr .rounded-ts-circle{border-top-left-radius:50%!important}.v-locale--is-rtl .rounded-ts-circle{border-top-right-radius:50%!important}.v-locale--is-ltr .rounded-ts-shaped{border-top-left-radius:24px 0!important}.v-locale--is-rtl .rounded-ts-shaped{border-top-right-radius:24px 0!important}.v-locale--is-ltr .rounded-te-0{border-top-right-radius:0!important}.v-locale--is-rtl .rounded-te-0{border-top-left-radius:0!important}.v-locale--is-ltr .rounded-te-sm{border-top-right-radius:2px!important}.v-locale--is-rtl .rounded-te-sm{border-top-left-radius:2px!important}.v-locale--is-ltr .rounded-te{border-top-right-radius:4px!important}.v-locale--is-rtl .rounded-te{border-top-left-radius:4px!important}.v-locale--is-ltr .rounded-te-lg{border-top-right-radius:8px!important}.v-locale--is-rtl .rounded-te-lg{border-top-left-radius:8px!important}.v-locale--is-ltr .rounded-te-xl{border-top-right-radius:24px!important}.v-locale--is-rtl .rounded-te-xl{border-top-left-radius:24px!important}.v-locale--is-ltr .rounded-te-pill{border-top-right-radius:9999px!important}.v-locale--is-rtl .rounded-te-pill{border-top-left-radius:9999px!important}.v-locale--is-ltr .rounded-te-circle{border-top-right-radius:50%!important}.v-locale--is-rtl .rounded-te-circle{border-top-left-radius:50%!important}.v-locale--is-ltr .rounded-te-shaped{border-top-right-radius:24px 0!important}.v-locale--is-rtl .rounded-te-shaped{border-top-left-radius:24px 0!important}.v-locale--is-ltr .rounded-be-0{border-bottom-right-radius:0!important}.v-locale--is-rtl .rounded-be-0{border-bottom-left-radius:0!important}.v-locale--is-ltr .rounded-be-sm{border-bottom-right-radius:2px!important}.v-locale--is-rtl .rounded-be-sm{border-bottom-left-radius:2px!important}.v-locale--is-ltr .rounded-be{border-bottom-right-radius:4px!important}.v-locale--is-rtl .rounded-be{border-bottom-left-radius:4px!important}.v-locale--is-ltr .rounded-be-lg{border-bottom-right-radius:8px!important}.v-locale--is-rtl .rounded-be-lg{border-bottom-left-radius:8px!important}.v-locale--is-ltr .rounded-be-xl{border-bottom-right-radius:24px!important}.v-locale--is-rtl .rounded-be-xl{border-bottom-left-radius:24px!important}.v-locale--is-ltr .rounded-be-pill{border-bottom-right-radius:9999px!important}.v-locale--is-rtl .rounded-be-pill{border-bottom-left-radius:9999px!important}.v-locale--is-ltr .rounded-be-circle{border-bottom-right-radius:50%!important}.v-locale--is-rtl .rounded-be-circle{border-bottom-left-radius:50%!important}.v-locale--is-ltr .rounded-be-shaped{border-bottom-right-radius:24px 0!important}.v-locale--is-rtl .rounded-be-shaped{border-bottom-left-radius:24px 0!important}.v-locale--is-ltr .rounded-bs-0{border-bottom-left-radius:0!important}.v-locale--is-rtl .rounded-bs-0{border-bottom-right-radius:0!important}.v-locale--is-ltr .rounded-bs-sm{border-bottom-left-radius:2px!important}.v-locale--is-rtl .rounded-bs-sm{border-bottom-right-radius:2px!important}.v-locale--is-ltr .rounded-bs{border-bottom-left-radius:4px!important}.v-locale--is-rtl .rounded-bs{border-bottom-right-radius:4px!important}.v-locale--is-ltr .rounded-bs-lg{border-bottom-left-radius:8px!important}.v-locale--is-rtl .rounded-bs-lg{border-bottom-right-radius:8px!important}.v-locale--is-ltr .rounded-bs-xl{border-bottom-left-radius:24px!important}.v-locale--is-rtl .rounded-bs-xl{border-bottom-right-radius:24px!important}.v-locale--is-ltr .rounded-bs-pill{border-bottom-left-radius:9999px!important}.v-locale--is-rtl .rounded-bs-pill{border-bottom-right-radius:9999px!important}.v-locale--is-ltr .rounded-bs-circle{border-bottom-left-radius:50%!important}.v-locale--is-rtl .rounded-bs-circle{border-bottom-right-radius:50%!important}.v-locale--is-ltr .rounded-bs-shaped{border-bottom-left-radius:24px 0!important}.v-locale--is-rtl .rounded-bs-shaped{border-bottom-right-radius:24px 0!important}.border-0{border-width:0!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border,.border-thin{border-width:thin!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-sm{border-width:1px!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-md{border-width:2px!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-lg{border-width:4px!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-xl{border-width:8px!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-opacity-0{--v-border-opacity: 0 !important}.border-opacity{--v-border-opacity: .12 !important}.border-opacity-25{--v-border-opacity: .25 !important}.border-opacity-50{--v-border-opacity: .5 !important}.border-opacity-75{--v-border-opacity: .75 !important}.border-opacity-100{--v-border-opacity: 1 !important}.border-t-0{border-block-start-width:0!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t,.border-t-thin{border-block-start-width:thin!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t-sm{border-block-start-width:1px!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t-md{border-block-start-width:2px!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t-lg{border-block-start-width:4px!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t-xl{border-block-start-width:8px!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-0{border-inline-end-width:0!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e,.border-e-thin{border-inline-end-width:thin!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-sm{border-inline-end-width:1px!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-md{border-inline-end-width:2px!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-lg{border-inline-end-width:4px!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-xl{border-inline-end-width:8px!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-0{border-block-end-width:0!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b,.border-b-thin{border-block-end-width:thin!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-sm{border-block-end-width:1px!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-md{border-block-end-width:2px!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-lg{border-block-end-width:4px!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-xl{border-block-end-width:8px!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-0{border-inline-start-width:0!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s,.border-s-thin{border-inline-start-width:thin!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-sm{border-inline-start-width:1px!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-md{border-inline-start-width:2px!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-lg{border-inline-start-width:4px!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-xl{border-inline-start-width:8px!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-solid{border-style:solid!important}.border-dashed{border-style:dashed!important}.border-dotted{border-style:dotted!important}.border-double{border-style:double!important}.border-none{border-style:none!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}.text-justify{text-align:justify!important}.text-start{text-align:start!important}.text-end{text-align:end!important}.text-decoration-line-through{text-decoration:line-through!important}.text-decoration-none{text-decoration:none!important}.text-decoration-overline{text-decoration:overline!important}.text-decoration-underline{text-decoration:underline!important}.text-wrap{white-space:normal!important}.text-no-wrap{white-space:nowrap!important}.text-pre{white-space:pre!important}.text-pre-line{white-space:pre-line!important}.text-pre-wrap{white-space:pre-wrap!important}.text-break{overflow-wrap:break-word!important;word-break:break-word!important}.opacity-hover{opacity:var(--v-hover-opacity)!important}.opacity-focus{opacity:var(--v-focus-opacity)!important}.opacity-selected{opacity:var(--v-selected-opacity)!important}.opacity-activated{opacity:var(--v-activated-opacity)!important}.opacity-pressed{opacity:var(--v-pressed-opacity)!important}.opacity-dragged{opacity:var(--v-dragged-opacity)!important}.opacity-0{opacity:0!important}.opacity-10{opacity:.1!important}.opacity-20{opacity:.2!important}.opacity-30{opacity:.3!important}.opacity-40{opacity:.4!important}.opacity-50{opacity:.5!important}.opacity-60{opacity:.6!important}.opacity-70{opacity:.7!important}.opacity-80{opacity:.8!important}.opacity-90{opacity:.9!important}.opacity-100{opacity:1!important}.text-high-emphasis{color:rgba(var(--v-theme-on-background),var(--v-high-emphasis-opacity))!important}.text-medium-emphasis{color:rgba(var(--v-theme-on-background),var(--v-medium-emphasis-opacity))!important}.text-disabled{color:rgba(var(--v-theme-on-background),var(--v-disabled-opacity))!important}.text-truncate{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.text-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-none{text-transform:none!important}.text-capitalize{text-transform:capitalize!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.font-weight-thin{font-weight:100!important}.font-weight-light{font-weight:300!important}.font-weight-regular{font-weight:400!important}.font-weight-medium{font-weight:500!important}.font-weight-bold{font-weight:700!important}.font-weight-black{font-weight:900!important}.font-italic{font-style:italic!important}.text-mono{font-family:monospace!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-fixed{position:fixed!important}.position-absolute{position:absolute!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.right-0{right:0!important}.bottom-0{bottom:0!important}.left-0{left:0!important}.cursor-auto{cursor:auto!important}.cursor-default{cursor:default!important}.cursor-pointer{cursor:pointer!important}.cursor-wait{cursor:wait!important}.cursor-text{cursor:text!important}.cursor-move{cursor:move!important}.cursor-help{cursor:help!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-progress{cursor:progress!important}.cursor-grab{cursor:grab!important}.cursor-grabbing{cursor:grabbing!important}.cursor-none{cursor:none!important}.fill-height{height:100%!important}.h-auto{height:auto!important}.h-screen{height:100vh!important}.h-0{height:0!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-screen{height:100dvh!important}.w-auto{width:auto!important}.w-0{width:0!important}.w-25{width:25%!important}.w-33{width:33%!important}.w-50{width:50%!important}.w-66{width:66%!important}.w-75{width:75%!important}.w-100{width:100%!important}@media (min-width: 600px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!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}.float-sm-none{float:none!important}.float-sm-left{float:left!important}.float-sm-right{float:right!important}.v-locale--is-rtl .float-sm-end{float:left!important}.v-locale--is-rtl .float-sm-start,.v-locale--is-ltr .float-sm-end{float:right!important}.v-locale--is-ltr .float-sm-start{float:left!important}.flex-sm-fill,.flex-sm-1-1{flex:1 1 auto!important}.flex-sm-1-0{flex:1 0 auto!important}.flex-sm-0-1{flex:0 1 auto!important}.flex-sm-0-0{flex:0 0 auto!important}.flex-sm-1-1-100{flex:1 1 100%!important}.flex-sm-1-0-100{flex:1 0 100%!important}.flex-sm-0-1-100{flex:0 1 100%!important}.flex-sm-0-0-100{flex:0 0 100%!important}.flex-sm-1-1-0{flex:1 1 0!important}.flex-sm-1-0-0{flex:1 0 0!important}.flex-sm-0-1-0{flex:0 1 0!important}.flex-sm-0-0-0{flex:0 0 0!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-sm-start{justify-content:flex-start!important}.justify-sm-end{justify-content:flex-end!important}.justify-sm-center{justify-content:center!important}.justify-sm-space-between{justify-content:space-between!important}.justify-sm-space-around{justify-content:space-around!important}.justify-sm-space-evenly{justify-content:space-evenly!important}.align-sm-start{align-items:flex-start!important}.align-sm-end{align-items:flex-end!important}.align-sm-center{align-items:center!important}.align-sm-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-sm-space-around{align-content:space-around!important}.align-content-sm-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-sm-7{order:7!important}.order-sm-8{order:8!important}.order-sm-9{order:9!important}.order-sm-10{order:10!important}.order-sm-11{order:11!important}.order-sm-12{order:12!important}.order-sm-last{order:13!important}.ga-sm-0{gap:0px!important}.ga-sm-1{gap:4px!important}.ga-sm-2{gap:8px!important}.ga-sm-3{gap:12px!important}.ga-sm-4{gap:16px!important}.ga-sm-5{gap:20px!important}.ga-sm-6{gap:24px!important}.ga-sm-7{gap:28px!important}.ga-sm-8{gap:32px!important}.ga-sm-9{gap:36px!important}.ga-sm-10{gap:40px!important}.ga-sm-11{gap:44px!important}.ga-sm-12{gap:48px!important}.ga-sm-13{gap:52px!important}.ga-sm-14{gap:56px!important}.ga-sm-15{gap:60px!important}.ga-sm-16{gap:64px!important}.ga-sm-auto{gap:auto!important}.gr-sm-0{row-gap:0px!important}.gr-sm-1{row-gap:4px!important}.gr-sm-2{row-gap:8px!important}.gr-sm-3{row-gap:12px!important}.gr-sm-4{row-gap:16px!important}.gr-sm-5{row-gap:20px!important}.gr-sm-6{row-gap:24px!important}.gr-sm-7{row-gap:28px!important}.gr-sm-8{row-gap:32px!important}.gr-sm-9{row-gap:36px!important}.gr-sm-10{row-gap:40px!important}.gr-sm-11{row-gap:44px!important}.gr-sm-12{row-gap:48px!important}.gr-sm-13{row-gap:52px!important}.gr-sm-14{row-gap:56px!important}.gr-sm-15{row-gap:60px!important}.gr-sm-16{row-gap:64px!important}.gr-sm-auto{row-gap:auto!important}.gc-sm-0{column-gap:0px!important}.gc-sm-1{column-gap:4px!important}.gc-sm-2{column-gap:8px!important}.gc-sm-3{column-gap:12px!important}.gc-sm-4{column-gap:16px!important}.gc-sm-5{column-gap:20px!important}.gc-sm-6{column-gap:24px!important}.gc-sm-7{column-gap:28px!important}.gc-sm-8{column-gap:32px!important}.gc-sm-9{column-gap:36px!important}.gc-sm-10{column-gap:40px!important}.gc-sm-11{column-gap:44px!important}.gc-sm-12{column-gap:48px!important}.gc-sm-13{column-gap:52px!important}.gc-sm-14{column-gap:56px!important}.gc-sm-15{column-gap:60px!important}.gc-sm-16{column-gap:64px!important}.gc-sm-auto{column-gap:auto!important}.ma-sm-0{margin:0!important}.ma-sm-1{margin:4px!important}.ma-sm-2{margin:8px!important}.ma-sm-3{margin:12px!important}.ma-sm-4{margin:16px!important}.ma-sm-5{margin:20px!important}.ma-sm-6{margin:24px!important}.ma-sm-7{margin:28px!important}.ma-sm-8{margin:32px!important}.ma-sm-9{margin:36px!important}.ma-sm-10{margin:40px!important}.ma-sm-11{margin:44px!important}.ma-sm-12{margin:48px!important}.ma-sm-13{margin:52px!important}.ma-sm-14{margin:56px!important}.ma-sm-15{margin:60px!important}.ma-sm-16{margin:64px!important}.ma-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:4px!important;margin-left:4px!important}.mx-sm-2{margin-right:8px!important;margin-left:8px!important}.mx-sm-3{margin-right:12px!important;margin-left:12px!important}.mx-sm-4{margin-right:16px!important;margin-left:16px!important}.mx-sm-5{margin-right:20px!important;margin-left:20px!important}.mx-sm-6{margin-right:24px!important;margin-left:24px!important}.mx-sm-7{margin-right:28px!important;margin-left:28px!important}.mx-sm-8{margin-right:32px!important;margin-left:32px!important}.mx-sm-9{margin-right:36px!important;margin-left:36px!important}.mx-sm-10{margin-right:40px!important;margin-left:40px!important}.mx-sm-11{margin-right:44px!important;margin-left:44px!important}.mx-sm-12{margin-right:48px!important;margin-left:48px!important}.mx-sm-13{margin-right:52px!important;margin-left:52px!important}.mx-sm-14{margin-right:56px!important;margin-left:56px!important}.mx-sm-15{margin-right:60px!important;margin-left:60px!important}.mx-sm-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-sm-2{margin-top:8px!important;margin-bottom:8px!important}.my-sm-3{margin-top:12px!important;margin-bottom:12px!important}.my-sm-4{margin-top:16px!important;margin-bottom:16px!important}.my-sm-5{margin-top:20px!important;margin-bottom:20px!important}.my-sm-6{margin-top:24px!important;margin-bottom:24px!important}.my-sm-7{margin-top:28px!important;margin-bottom:28px!important}.my-sm-8{margin-top:32px!important;margin-bottom:32px!important}.my-sm-9{margin-top:36px!important;margin-bottom:36px!important}.my-sm-10{margin-top:40px!important;margin-bottom:40px!important}.my-sm-11{margin-top:44px!important;margin-bottom:44px!important}.my-sm-12{margin-top:48px!important;margin-bottom:48px!important}.my-sm-13{margin-top:52px!important;margin-bottom:52px!important}.my-sm-14{margin-top:56px!important;margin-bottom:56px!important}.my-sm-15{margin-top:60px!important;margin-bottom:60px!important}.my-sm-16{margin-top:64px!important;margin-bottom:64px!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:4px!important}.mt-sm-2{margin-top:8px!important}.mt-sm-3{margin-top:12px!important}.mt-sm-4{margin-top:16px!important}.mt-sm-5{margin-top:20px!important}.mt-sm-6{margin-top:24px!important}.mt-sm-7{margin-top:28px!important}.mt-sm-8{margin-top:32px!important}.mt-sm-9{margin-top:36px!important}.mt-sm-10{margin-top:40px!important}.mt-sm-11{margin-top:44px!important}.mt-sm-12{margin-top:48px!important}.mt-sm-13{margin-top:52px!important}.mt-sm-14{margin-top:56px!important}.mt-sm-15{margin-top:60px!important}.mt-sm-16{margin-top:64px!important}.mt-sm-auto{margin-top:auto!important}.mr-sm-0{margin-right:0!important}.mr-sm-1{margin-right:4px!important}.mr-sm-2{margin-right:8px!important}.mr-sm-3{margin-right:12px!important}.mr-sm-4{margin-right:16px!important}.mr-sm-5{margin-right:20px!important}.mr-sm-6{margin-right:24px!important}.mr-sm-7{margin-right:28px!important}.mr-sm-8{margin-right:32px!important}.mr-sm-9{margin-right:36px!important}.mr-sm-10{margin-right:40px!important}.mr-sm-11{margin-right:44px!important}.mr-sm-12{margin-right:48px!important}.mr-sm-13{margin-right:52px!important}.mr-sm-14{margin-right:56px!important}.mr-sm-15{margin-right:60px!important}.mr-sm-16{margin-right:64px!important}.mr-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:4px!important}.mb-sm-2{margin-bottom:8px!important}.mb-sm-3{margin-bottom:12px!important}.mb-sm-4{margin-bottom:16px!important}.mb-sm-5{margin-bottom:20px!important}.mb-sm-6{margin-bottom:24px!important}.mb-sm-7{margin-bottom:28px!important}.mb-sm-8{margin-bottom:32px!important}.mb-sm-9{margin-bottom:36px!important}.mb-sm-10{margin-bottom:40px!important}.mb-sm-11{margin-bottom:44px!important}.mb-sm-12{margin-bottom:48px!important}.mb-sm-13{margin-bottom:52px!important}.mb-sm-14{margin-bottom:56px!important}.mb-sm-15{margin-bottom:60px!important}.mb-sm-16{margin-bottom:64px!important}.mb-sm-auto{margin-bottom:auto!important}.ml-sm-0{margin-left:0!important}.ml-sm-1{margin-left:4px!important}.ml-sm-2{margin-left:8px!important}.ml-sm-3{margin-left:12px!important}.ml-sm-4{margin-left:16px!important}.ml-sm-5{margin-left:20px!important}.ml-sm-6{margin-left:24px!important}.ml-sm-7{margin-left:28px!important}.ml-sm-8{margin-left:32px!important}.ml-sm-9{margin-left:36px!important}.ml-sm-10{margin-left:40px!important}.ml-sm-11{margin-left:44px!important}.ml-sm-12{margin-left:48px!important}.ml-sm-13{margin-left:52px!important}.ml-sm-14{margin-left:56px!important}.ml-sm-15{margin-left:60px!important}.ml-sm-16{margin-left:64px!important}.ml-sm-auto{margin-left:auto!important}.ms-sm-0{margin-inline-start:0px!important}.ms-sm-1{margin-inline-start:4px!important}.ms-sm-2{margin-inline-start:8px!important}.ms-sm-3{margin-inline-start:12px!important}.ms-sm-4{margin-inline-start:16px!important}.ms-sm-5{margin-inline-start:20px!important}.ms-sm-6{margin-inline-start:24px!important}.ms-sm-7{margin-inline-start:28px!important}.ms-sm-8{margin-inline-start:32px!important}.ms-sm-9{margin-inline-start:36px!important}.ms-sm-10{margin-inline-start:40px!important}.ms-sm-11{margin-inline-start:44px!important}.ms-sm-12{margin-inline-start:48px!important}.ms-sm-13{margin-inline-start:52px!important}.ms-sm-14{margin-inline-start:56px!important}.ms-sm-15{margin-inline-start:60px!important}.ms-sm-16{margin-inline-start:64px!important}.ms-sm-auto{margin-inline-start:auto!important}.me-sm-0{margin-inline-end:0px!important}.me-sm-1{margin-inline-end:4px!important}.me-sm-2{margin-inline-end:8px!important}.me-sm-3{margin-inline-end:12px!important}.me-sm-4{margin-inline-end:16px!important}.me-sm-5{margin-inline-end:20px!important}.me-sm-6{margin-inline-end:24px!important}.me-sm-7{margin-inline-end:28px!important}.me-sm-8{margin-inline-end:32px!important}.me-sm-9{margin-inline-end:36px!important}.me-sm-10{margin-inline-end:40px!important}.me-sm-11{margin-inline-end:44px!important}.me-sm-12{margin-inline-end:48px!important}.me-sm-13{margin-inline-end:52px!important}.me-sm-14{margin-inline-end:56px!important}.me-sm-15{margin-inline-end:60px!important}.me-sm-16{margin-inline-end:64px!important}.me-sm-auto{margin-inline-end:auto!important}.ma-sm-n1{margin:-4px!important}.ma-sm-n2{margin:-8px!important}.ma-sm-n3{margin:-12px!important}.ma-sm-n4{margin:-16px!important}.ma-sm-n5{margin:-20px!important}.ma-sm-n6{margin:-24px!important}.ma-sm-n7{margin:-28px!important}.ma-sm-n8{margin:-32px!important}.ma-sm-n9{margin:-36px!important}.ma-sm-n10{margin:-40px!important}.ma-sm-n11{margin:-44px!important}.ma-sm-n12{margin:-48px!important}.ma-sm-n13{margin:-52px!important}.ma-sm-n14{margin:-56px!important}.ma-sm-n15{margin:-60px!important}.ma-sm-n16{margin:-64px!important}.mx-sm-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-sm-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-sm-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-sm-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-sm-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-sm-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-sm-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-sm-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-sm-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-sm-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-sm-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-sm-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-sm-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-sm-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-sm-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-sm-n16{margin-right:-64px!important;margin-left:-64px!important}.my-sm-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-sm-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-sm-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-sm-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-sm-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-sm-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-sm-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-sm-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-sm-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-sm-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-sm-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-sm-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-sm-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-sm-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-sm-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-sm-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-sm-n1{margin-top:-4px!important}.mt-sm-n2{margin-top:-8px!important}.mt-sm-n3{margin-top:-12px!important}.mt-sm-n4{margin-top:-16px!important}.mt-sm-n5{margin-top:-20px!important}.mt-sm-n6{margin-top:-24px!important}.mt-sm-n7{margin-top:-28px!important}.mt-sm-n8{margin-top:-32px!important}.mt-sm-n9{margin-top:-36px!important}.mt-sm-n10{margin-top:-40px!important}.mt-sm-n11{margin-top:-44px!important}.mt-sm-n12{margin-top:-48px!important}.mt-sm-n13{margin-top:-52px!important}.mt-sm-n14{margin-top:-56px!important}.mt-sm-n15{margin-top:-60px!important}.mt-sm-n16{margin-top:-64px!important}.mr-sm-n1{margin-right:-4px!important}.mr-sm-n2{margin-right:-8px!important}.mr-sm-n3{margin-right:-12px!important}.mr-sm-n4{margin-right:-16px!important}.mr-sm-n5{margin-right:-20px!important}.mr-sm-n6{margin-right:-24px!important}.mr-sm-n7{margin-right:-28px!important}.mr-sm-n8{margin-right:-32px!important}.mr-sm-n9{margin-right:-36px!important}.mr-sm-n10{margin-right:-40px!important}.mr-sm-n11{margin-right:-44px!important}.mr-sm-n12{margin-right:-48px!important}.mr-sm-n13{margin-right:-52px!important}.mr-sm-n14{margin-right:-56px!important}.mr-sm-n15{margin-right:-60px!important}.mr-sm-n16{margin-right:-64px!important}.mb-sm-n1{margin-bottom:-4px!important}.mb-sm-n2{margin-bottom:-8px!important}.mb-sm-n3{margin-bottom:-12px!important}.mb-sm-n4{margin-bottom:-16px!important}.mb-sm-n5{margin-bottom:-20px!important}.mb-sm-n6{margin-bottom:-24px!important}.mb-sm-n7{margin-bottom:-28px!important}.mb-sm-n8{margin-bottom:-32px!important}.mb-sm-n9{margin-bottom:-36px!important}.mb-sm-n10{margin-bottom:-40px!important}.mb-sm-n11{margin-bottom:-44px!important}.mb-sm-n12{margin-bottom:-48px!important}.mb-sm-n13{margin-bottom:-52px!important}.mb-sm-n14{margin-bottom:-56px!important}.mb-sm-n15{margin-bottom:-60px!important}.mb-sm-n16{margin-bottom:-64px!important}.ml-sm-n1{margin-left:-4px!important}.ml-sm-n2{margin-left:-8px!important}.ml-sm-n3{margin-left:-12px!important}.ml-sm-n4{margin-left:-16px!important}.ml-sm-n5{margin-left:-20px!important}.ml-sm-n6{margin-left:-24px!important}.ml-sm-n7{margin-left:-28px!important}.ml-sm-n8{margin-left:-32px!important}.ml-sm-n9{margin-left:-36px!important}.ml-sm-n10{margin-left:-40px!important}.ml-sm-n11{margin-left:-44px!important}.ml-sm-n12{margin-left:-48px!important}.ml-sm-n13{margin-left:-52px!important}.ml-sm-n14{margin-left:-56px!important}.ml-sm-n15{margin-left:-60px!important}.ml-sm-n16{margin-left:-64px!important}.ms-sm-n1{margin-inline-start:-4px!important}.ms-sm-n2{margin-inline-start:-8px!important}.ms-sm-n3{margin-inline-start:-12px!important}.ms-sm-n4{margin-inline-start:-16px!important}.ms-sm-n5{margin-inline-start:-20px!important}.ms-sm-n6{margin-inline-start:-24px!important}.ms-sm-n7{margin-inline-start:-28px!important}.ms-sm-n8{margin-inline-start:-32px!important}.ms-sm-n9{margin-inline-start:-36px!important}.ms-sm-n10{margin-inline-start:-40px!important}.ms-sm-n11{margin-inline-start:-44px!important}.ms-sm-n12{margin-inline-start:-48px!important}.ms-sm-n13{margin-inline-start:-52px!important}.ms-sm-n14{margin-inline-start:-56px!important}.ms-sm-n15{margin-inline-start:-60px!important}.ms-sm-n16{margin-inline-start:-64px!important}.me-sm-n1{margin-inline-end:-4px!important}.me-sm-n2{margin-inline-end:-8px!important}.me-sm-n3{margin-inline-end:-12px!important}.me-sm-n4{margin-inline-end:-16px!important}.me-sm-n5{margin-inline-end:-20px!important}.me-sm-n6{margin-inline-end:-24px!important}.me-sm-n7{margin-inline-end:-28px!important}.me-sm-n8{margin-inline-end:-32px!important}.me-sm-n9{margin-inline-end:-36px!important}.me-sm-n10{margin-inline-end:-40px!important}.me-sm-n11{margin-inline-end:-44px!important}.me-sm-n12{margin-inline-end:-48px!important}.me-sm-n13{margin-inline-end:-52px!important}.me-sm-n14{margin-inline-end:-56px!important}.me-sm-n15{margin-inline-end:-60px!important}.me-sm-n16{margin-inline-end:-64px!important}.pa-sm-0{padding:0!important}.pa-sm-1{padding:4px!important}.pa-sm-2{padding:8px!important}.pa-sm-3{padding:12px!important}.pa-sm-4{padding:16px!important}.pa-sm-5{padding:20px!important}.pa-sm-6{padding:24px!important}.pa-sm-7{padding:28px!important}.pa-sm-8{padding:32px!important}.pa-sm-9{padding:36px!important}.pa-sm-10{padding:40px!important}.pa-sm-11{padding:44px!important}.pa-sm-12{padding:48px!important}.pa-sm-13{padding:52px!important}.pa-sm-14{padding:56px!important}.pa-sm-15{padding:60px!important}.pa-sm-16{padding:64px!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:4px!important;padding-left:4px!important}.px-sm-2{padding-right:8px!important;padding-left:8px!important}.px-sm-3{padding-right:12px!important;padding-left:12px!important}.px-sm-4{padding-right:16px!important;padding-left:16px!important}.px-sm-5{padding-right:20px!important;padding-left:20px!important}.px-sm-6{padding-right:24px!important;padding-left:24px!important}.px-sm-7{padding-right:28px!important;padding-left:28px!important}.px-sm-8{padding-right:32px!important;padding-left:32px!important}.px-sm-9{padding-right:36px!important;padding-left:36px!important}.px-sm-10{padding-right:40px!important;padding-left:40px!important}.px-sm-11{padding-right:44px!important;padding-left:44px!important}.px-sm-12{padding-right:48px!important;padding-left:48px!important}.px-sm-13{padding-right:52px!important;padding-left:52px!important}.px-sm-14{padding-right:56px!important;padding-left:56px!important}.px-sm-15{padding-right:60px!important;padding-left:60px!important}.px-sm-16{padding-right:64px!important;padding-left:64px!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:4px!important;padding-bottom:4px!important}.py-sm-2{padding-top:8px!important;padding-bottom:8px!important}.py-sm-3{padding-top:12px!important;padding-bottom:12px!important}.py-sm-4{padding-top:16px!important;padding-bottom:16px!important}.py-sm-5{padding-top:20px!important;padding-bottom:20px!important}.py-sm-6{padding-top:24px!important;padding-bottom:24px!important}.py-sm-7{padding-top:28px!important;padding-bottom:28px!important}.py-sm-8{padding-top:32px!important;padding-bottom:32px!important}.py-sm-9{padding-top:36px!important;padding-bottom:36px!important}.py-sm-10{padding-top:40px!important;padding-bottom:40px!important}.py-sm-11{padding-top:44px!important;padding-bottom:44px!important}.py-sm-12{padding-top:48px!important;padding-bottom:48px!important}.py-sm-13{padding-top:52px!important;padding-bottom:52px!important}.py-sm-14{padding-top:56px!important;padding-bottom:56px!important}.py-sm-15{padding-top:60px!important;padding-bottom:60px!important}.py-sm-16{padding-top:64px!important;padding-bottom:64px!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:4px!important}.pt-sm-2{padding-top:8px!important}.pt-sm-3{padding-top:12px!important}.pt-sm-4{padding-top:16px!important}.pt-sm-5{padding-top:20px!important}.pt-sm-6{padding-top:24px!important}.pt-sm-7{padding-top:28px!important}.pt-sm-8{padding-top:32px!important}.pt-sm-9{padding-top:36px!important}.pt-sm-10{padding-top:40px!important}.pt-sm-11{padding-top:44px!important}.pt-sm-12{padding-top:48px!important}.pt-sm-13{padding-top:52px!important}.pt-sm-14{padding-top:56px!important}.pt-sm-15{padding-top:60px!important}.pt-sm-16{padding-top:64px!important}.pr-sm-0{padding-right:0!important}.pr-sm-1{padding-right:4px!important}.pr-sm-2{padding-right:8px!important}.pr-sm-3{padding-right:12px!important}.pr-sm-4{padding-right:16px!important}.pr-sm-5{padding-right:20px!important}.pr-sm-6{padding-right:24px!important}.pr-sm-7{padding-right:28px!important}.pr-sm-8{padding-right:32px!important}.pr-sm-9{padding-right:36px!important}.pr-sm-10{padding-right:40px!important}.pr-sm-11{padding-right:44px!important}.pr-sm-12{padding-right:48px!important}.pr-sm-13{padding-right:52px!important}.pr-sm-14{padding-right:56px!important}.pr-sm-15{padding-right:60px!important}.pr-sm-16{padding-right:64px!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:4px!important}.pb-sm-2{padding-bottom:8px!important}.pb-sm-3{padding-bottom:12px!important}.pb-sm-4{padding-bottom:16px!important}.pb-sm-5{padding-bottom:20px!important}.pb-sm-6{padding-bottom:24px!important}.pb-sm-7{padding-bottom:28px!important}.pb-sm-8{padding-bottom:32px!important}.pb-sm-9{padding-bottom:36px!important}.pb-sm-10{padding-bottom:40px!important}.pb-sm-11{padding-bottom:44px!important}.pb-sm-12{padding-bottom:48px!important}.pb-sm-13{padding-bottom:52px!important}.pb-sm-14{padding-bottom:56px!important}.pb-sm-15{padding-bottom:60px!important}.pb-sm-16{padding-bottom:64px!important}.pl-sm-0{padding-left:0!important}.pl-sm-1{padding-left:4px!important}.pl-sm-2{padding-left:8px!important}.pl-sm-3{padding-left:12px!important}.pl-sm-4{padding-left:16px!important}.pl-sm-5{padding-left:20px!important}.pl-sm-6{padding-left:24px!important}.pl-sm-7{padding-left:28px!important}.pl-sm-8{padding-left:32px!important}.pl-sm-9{padding-left:36px!important}.pl-sm-10{padding-left:40px!important}.pl-sm-11{padding-left:44px!important}.pl-sm-12{padding-left:48px!important}.pl-sm-13{padding-left:52px!important}.pl-sm-14{padding-left:56px!important}.pl-sm-15{padding-left:60px!important}.pl-sm-16{padding-left:64px!important}.ps-sm-0{padding-inline-start:0px!important}.ps-sm-1{padding-inline-start:4px!important}.ps-sm-2{padding-inline-start:8px!important}.ps-sm-3{padding-inline-start:12px!important}.ps-sm-4{padding-inline-start:16px!important}.ps-sm-5{padding-inline-start:20px!important}.ps-sm-6{padding-inline-start:24px!important}.ps-sm-7{padding-inline-start:28px!important}.ps-sm-8{padding-inline-start:32px!important}.ps-sm-9{padding-inline-start:36px!important}.ps-sm-10{padding-inline-start:40px!important}.ps-sm-11{padding-inline-start:44px!important}.ps-sm-12{padding-inline-start:48px!important}.ps-sm-13{padding-inline-start:52px!important}.ps-sm-14{padding-inline-start:56px!important}.ps-sm-15{padding-inline-start:60px!important}.ps-sm-16{padding-inline-start:64px!important}.pe-sm-0{padding-inline-end:0px!important}.pe-sm-1{padding-inline-end:4px!important}.pe-sm-2{padding-inline-end:8px!important}.pe-sm-3{padding-inline-end:12px!important}.pe-sm-4{padding-inline-end:16px!important}.pe-sm-5{padding-inline-end:20px!important}.pe-sm-6{padding-inline-end:24px!important}.pe-sm-7{padding-inline-end:28px!important}.pe-sm-8{padding-inline-end:32px!important}.pe-sm-9{padding-inline-end:36px!important}.pe-sm-10{padding-inline-end:40px!important}.pe-sm-11{padding-inline-end:44px!important}.pe-sm-12{padding-inline-end:48px!important}.pe-sm-13{padding-inline-end:52px!important}.pe-sm-14{padding-inline-end:56px!important}.pe-sm-15{padding-inline-end:60px!important}.pe-sm-16{padding-inline-end:64px!important}.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}.text-sm-justify{text-align:justify!important}.text-sm-start{text-align:start!important}.text-sm-end{text-align:end!important}.text-sm-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-sm-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-sm-auto{height:auto!important}.h-sm-screen{height:100vh!important}.h-sm-0{height:0!important}.h-sm-25{height:25%!important}.h-sm-50{height:50%!important}.h-sm-75{height:75%!important}.h-sm-100{height:100%!important}.w-sm-auto{width:auto!important}.w-sm-0{width:0!important}.w-sm-25{width:25%!important}.w-sm-33{width:33%!important}.w-sm-50{width:50%!important}.w-sm-66{width:66%!important}.w-sm-75{width:75%!important}.w-sm-100{width:100%!important}}@media (min-width: 960px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!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}.float-md-none{float:none!important}.float-md-left{float:left!important}.float-md-right{float:right!important}.v-locale--is-rtl .float-md-end{float:left!important}.v-locale--is-rtl .float-md-start,.v-locale--is-ltr .float-md-end{float:right!important}.v-locale--is-ltr .float-md-start{float:left!important}.flex-md-fill,.flex-md-1-1{flex:1 1 auto!important}.flex-md-1-0{flex:1 0 auto!important}.flex-md-0-1{flex:0 1 auto!important}.flex-md-0-0{flex:0 0 auto!important}.flex-md-1-1-100{flex:1 1 100%!important}.flex-md-1-0-100{flex:1 0 100%!important}.flex-md-0-1-100{flex:0 1 100%!important}.flex-md-0-0-100{flex:0 0 100%!important}.flex-md-1-1-0{flex:1 1 0!important}.flex-md-1-0-0{flex:1 0 0!important}.flex-md-0-1-0{flex:0 1 0!important}.flex-md-0-0-0{flex:0 0 0!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-md-start{justify-content:flex-start!important}.justify-md-end{justify-content:flex-end!important}.justify-md-center{justify-content:center!important}.justify-md-space-between{justify-content:space-between!important}.justify-md-space-around{justify-content:space-around!important}.justify-md-space-evenly{justify-content:space-evenly!important}.align-md-start{align-items:flex-start!important}.align-md-end{align-items:flex-end!important}.align-md-center{align-items:center!important}.align-md-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-md-space-around{align-content:space-around!important}.align-content-md-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-md-7{order:7!important}.order-md-8{order:8!important}.order-md-9{order:9!important}.order-md-10{order:10!important}.order-md-11{order:11!important}.order-md-12{order:12!important}.order-md-last{order:13!important}.ga-md-0{gap:0px!important}.ga-md-1{gap:4px!important}.ga-md-2{gap:8px!important}.ga-md-3{gap:12px!important}.ga-md-4{gap:16px!important}.ga-md-5{gap:20px!important}.ga-md-6{gap:24px!important}.ga-md-7{gap:28px!important}.ga-md-8{gap:32px!important}.ga-md-9{gap:36px!important}.ga-md-10{gap:40px!important}.ga-md-11{gap:44px!important}.ga-md-12{gap:48px!important}.ga-md-13{gap:52px!important}.ga-md-14{gap:56px!important}.ga-md-15{gap:60px!important}.ga-md-16{gap:64px!important}.ga-md-auto{gap:auto!important}.gr-md-0{row-gap:0px!important}.gr-md-1{row-gap:4px!important}.gr-md-2{row-gap:8px!important}.gr-md-3{row-gap:12px!important}.gr-md-4{row-gap:16px!important}.gr-md-5{row-gap:20px!important}.gr-md-6{row-gap:24px!important}.gr-md-7{row-gap:28px!important}.gr-md-8{row-gap:32px!important}.gr-md-9{row-gap:36px!important}.gr-md-10{row-gap:40px!important}.gr-md-11{row-gap:44px!important}.gr-md-12{row-gap:48px!important}.gr-md-13{row-gap:52px!important}.gr-md-14{row-gap:56px!important}.gr-md-15{row-gap:60px!important}.gr-md-16{row-gap:64px!important}.gr-md-auto{row-gap:auto!important}.gc-md-0{column-gap:0px!important}.gc-md-1{column-gap:4px!important}.gc-md-2{column-gap:8px!important}.gc-md-3{column-gap:12px!important}.gc-md-4{column-gap:16px!important}.gc-md-5{column-gap:20px!important}.gc-md-6{column-gap:24px!important}.gc-md-7{column-gap:28px!important}.gc-md-8{column-gap:32px!important}.gc-md-9{column-gap:36px!important}.gc-md-10{column-gap:40px!important}.gc-md-11{column-gap:44px!important}.gc-md-12{column-gap:48px!important}.gc-md-13{column-gap:52px!important}.gc-md-14{column-gap:56px!important}.gc-md-15{column-gap:60px!important}.gc-md-16{column-gap:64px!important}.gc-md-auto{column-gap:auto!important}.ma-md-0{margin:0!important}.ma-md-1{margin:4px!important}.ma-md-2{margin:8px!important}.ma-md-3{margin:12px!important}.ma-md-4{margin:16px!important}.ma-md-5{margin:20px!important}.ma-md-6{margin:24px!important}.ma-md-7{margin:28px!important}.ma-md-8{margin:32px!important}.ma-md-9{margin:36px!important}.ma-md-10{margin:40px!important}.ma-md-11{margin:44px!important}.ma-md-12{margin:48px!important}.ma-md-13{margin:52px!important}.ma-md-14{margin:56px!important}.ma-md-15{margin:60px!important}.ma-md-16{margin:64px!important}.ma-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:4px!important;margin-left:4px!important}.mx-md-2{margin-right:8px!important;margin-left:8px!important}.mx-md-3{margin-right:12px!important;margin-left:12px!important}.mx-md-4{margin-right:16px!important;margin-left:16px!important}.mx-md-5{margin-right:20px!important;margin-left:20px!important}.mx-md-6{margin-right:24px!important;margin-left:24px!important}.mx-md-7{margin-right:28px!important;margin-left:28px!important}.mx-md-8{margin-right:32px!important;margin-left:32px!important}.mx-md-9{margin-right:36px!important;margin-left:36px!important}.mx-md-10{margin-right:40px!important;margin-left:40px!important}.mx-md-11{margin-right:44px!important;margin-left:44px!important}.mx-md-12{margin-right:48px!important;margin-left:48px!important}.mx-md-13{margin-right:52px!important;margin-left:52px!important}.mx-md-14{margin-right:56px!important;margin-left:56px!important}.mx-md-15{margin-right:60px!important;margin-left:60px!important}.mx-md-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-md-2{margin-top:8px!important;margin-bottom:8px!important}.my-md-3{margin-top:12px!important;margin-bottom:12px!important}.my-md-4{margin-top:16px!important;margin-bottom:16px!important}.my-md-5{margin-top:20px!important;margin-bottom:20px!important}.my-md-6{margin-top:24px!important;margin-bottom:24px!important}.my-md-7{margin-top:28px!important;margin-bottom:28px!important}.my-md-8{margin-top:32px!important;margin-bottom:32px!important}.my-md-9{margin-top:36px!important;margin-bottom:36px!important}.my-md-10{margin-top:40px!important;margin-bottom:40px!important}.my-md-11{margin-top:44px!important;margin-bottom:44px!important}.my-md-12{margin-top:48px!important;margin-bottom:48px!important}.my-md-13{margin-top:52px!important;margin-bottom:52px!important}.my-md-14{margin-top:56px!important;margin-bottom:56px!important}.my-md-15{margin-top:60px!important;margin-bottom:60px!important}.my-md-16{margin-top:64px!important;margin-bottom:64px!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:4px!important}.mt-md-2{margin-top:8px!important}.mt-md-3{margin-top:12px!important}.mt-md-4{margin-top:16px!important}.mt-md-5{margin-top:20px!important}.mt-md-6{margin-top:24px!important}.mt-md-7{margin-top:28px!important}.mt-md-8{margin-top:32px!important}.mt-md-9{margin-top:36px!important}.mt-md-10{margin-top:40px!important}.mt-md-11{margin-top:44px!important}.mt-md-12{margin-top:48px!important}.mt-md-13{margin-top:52px!important}.mt-md-14{margin-top:56px!important}.mt-md-15{margin-top:60px!important}.mt-md-16{margin-top:64px!important}.mt-md-auto{margin-top:auto!important}.mr-md-0{margin-right:0!important}.mr-md-1{margin-right:4px!important}.mr-md-2{margin-right:8px!important}.mr-md-3{margin-right:12px!important}.mr-md-4{margin-right:16px!important}.mr-md-5{margin-right:20px!important}.mr-md-6{margin-right:24px!important}.mr-md-7{margin-right:28px!important}.mr-md-8{margin-right:32px!important}.mr-md-9{margin-right:36px!important}.mr-md-10{margin-right:40px!important}.mr-md-11{margin-right:44px!important}.mr-md-12{margin-right:48px!important}.mr-md-13{margin-right:52px!important}.mr-md-14{margin-right:56px!important}.mr-md-15{margin-right:60px!important}.mr-md-16{margin-right:64px!important}.mr-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:4px!important}.mb-md-2{margin-bottom:8px!important}.mb-md-3{margin-bottom:12px!important}.mb-md-4{margin-bottom:16px!important}.mb-md-5{margin-bottom:20px!important}.mb-md-6{margin-bottom:24px!important}.mb-md-7{margin-bottom:28px!important}.mb-md-8{margin-bottom:32px!important}.mb-md-9{margin-bottom:36px!important}.mb-md-10{margin-bottom:40px!important}.mb-md-11{margin-bottom:44px!important}.mb-md-12{margin-bottom:48px!important}.mb-md-13{margin-bottom:52px!important}.mb-md-14{margin-bottom:56px!important}.mb-md-15{margin-bottom:60px!important}.mb-md-16{margin-bottom:64px!important}.mb-md-auto{margin-bottom:auto!important}.ml-md-0{margin-left:0!important}.ml-md-1{margin-left:4px!important}.ml-md-2{margin-left:8px!important}.ml-md-3{margin-left:12px!important}.ml-md-4{margin-left:16px!important}.ml-md-5{margin-left:20px!important}.ml-md-6{margin-left:24px!important}.ml-md-7{margin-left:28px!important}.ml-md-8{margin-left:32px!important}.ml-md-9{margin-left:36px!important}.ml-md-10{margin-left:40px!important}.ml-md-11{margin-left:44px!important}.ml-md-12{margin-left:48px!important}.ml-md-13{margin-left:52px!important}.ml-md-14{margin-left:56px!important}.ml-md-15{margin-left:60px!important}.ml-md-16{margin-left:64px!important}.ml-md-auto{margin-left:auto!important}.ms-md-0{margin-inline-start:0px!important}.ms-md-1{margin-inline-start:4px!important}.ms-md-2{margin-inline-start:8px!important}.ms-md-3{margin-inline-start:12px!important}.ms-md-4{margin-inline-start:16px!important}.ms-md-5{margin-inline-start:20px!important}.ms-md-6{margin-inline-start:24px!important}.ms-md-7{margin-inline-start:28px!important}.ms-md-8{margin-inline-start:32px!important}.ms-md-9{margin-inline-start:36px!important}.ms-md-10{margin-inline-start:40px!important}.ms-md-11{margin-inline-start:44px!important}.ms-md-12{margin-inline-start:48px!important}.ms-md-13{margin-inline-start:52px!important}.ms-md-14{margin-inline-start:56px!important}.ms-md-15{margin-inline-start:60px!important}.ms-md-16{margin-inline-start:64px!important}.ms-md-auto{margin-inline-start:auto!important}.me-md-0{margin-inline-end:0px!important}.me-md-1{margin-inline-end:4px!important}.me-md-2{margin-inline-end:8px!important}.me-md-3{margin-inline-end:12px!important}.me-md-4{margin-inline-end:16px!important}.me-md-5{margin-inline-end:20px!important}.me-md-6{margin-inline-end:24px!important}.me-md-7{margin-inline-end:28px!important}.me-md-8{margin-inline-end:32px!important}.me-md-9{margin-inline-end:36px!important}.me-md-10{margin-inline-end:40px!important}.me-md-11{margin-inline-end:44px!important}.me-md-12{margin-inline-end:48px!important}.me-md-13{margin-inline-end:52px!important}.me-md-14{margin-inline-end:56px!important}.me-md-15{margin-inline-end:60px!important}.me-md-16{margin-inline-end:64px!important}.me-md-auto{margin-inline-end:auto!important}.ma-md-n1{margin:-4px!important}.ma-md-n2{margin:-8px!important}.ma-md-n3{margin:-12px!important}.ma-md-n4{margin:-16px!important}.ma-md-n5{margin:-20px!important}.ma-md-n6{margin:-24px!important}.ma-md-n7{margin:-28px!important}.ma-md-n8{margin:-32px!important}.ma-md-n9{margin:-36px!important}.ma-md-n10{margin:-40px!important}.ma-md-n11{margin:-44px!important}.ma-md-n12{margin:-48px!important}.ma-md-n13{margin:-52px!important}.ma-md-n14{margin:-56px!important}.ma-md-n15{margin:-60px!important}.ma-md-n16{margin:-64px!important}.mx-md-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-md-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-md-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-md-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-md-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-md-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-md-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-md-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-md-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-md-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-md-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-md-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-md-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-md-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-md-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-md-n16{margin-right:-64px!important;margin-left:-64px!important}.my-md-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-md-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-md-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-md-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-md-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-md-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-md-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-md-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-md-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-md-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-md-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-md-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-md-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-md-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-md-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-md-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-md-n1{margin-top:-4px!important}.mt-md-n2{margin-top:-8px!important}.mt-md-n3{margin-top:-12px!important}.mt-md-n4{margin-top:-16px!important}.mt-md-n5{margin-top:-20px!important}.mt-md-n6{margin-top:-24px!important}.mt-md-n7{margin-top:-28px!important}.mt-md-n8{margin-top:-32px!important}.mt-md-n9{margin-top:-36px!important}.mt-md-n10{margin-top:-40px!important}.mt-md-n11{margin-top:-44px!important}.mt-md-n12{margin-top:-48px!important}.mt-md-n13{margin-top:-52px!important}.mt-md-n14{margin-top:-56px!important}.mt-md-n15{margin-top:-60px!important}.mt-md-n16{margin-top:-64px!important}.mr-md-n1{margin-right:-4px!important}.mr-md-n2{margin-right:-8px!important}.mr-md-n3{margin-right:-12px!important}.mr-md-n4{margin-right:-16px!important}.mr-md-n5{margin-right:-20px!important}.mr-md-n6{margin-right:-24px!important}.mr-md-n7{margin-right:-28px!important}.mr-md-n8{margin-right:-32px!important}.mr-md-n9{margin-right:-36px!important}.mr-md-n10{margin-right:-40px!important}.mr-md-n11{margin-right:-44px!important}.mr-md-n12{margin-right:-48px!important}.mr-md-n13{margin-right:-52px!important}.mr-md-n14{margin-right:-56px!important}.mr-md-n15{margin-right:-60px!important}.mr-md-n16{margin-right:-64px!important}.mb-md-n1{margin-bottom:-4px!important}.mb-md-n2{margin-bottom:-8px!important}.mb-md-n3{margin-bottom:-12px!important}.mb-md-n4{margin-bottom:-16px!important}.mb-md-n5{margin-bottom:-20px!important}.mb-md-n6{margin-bottom:-24px!important}.mb-md-n7{margin-bottom:-28px!important}.mb-md-n8{margin-bottom:-32px!important}.mb-md-n9{margin-bottom:-36px!important}.mb-md-n10{margin-bottom:-40px!important}.mb-md-n11{margin-bottom:-44px!important}.mb-md-n12{margin-bottom:-48px!important}.mb-md-n13{margin-bottom:-52px!important}.mb-md-n14{margin-bottom:-56px!important}.mb-md-n15{margin-bottom:-60px!important}.mb-md-n16{margin-bottom:-64px!important}.ml-md-n1{margin-left:-4px!important}.ml-md-n2{margin-left:-8px!important}.ml-md-n3{margin-left:-12px!important}.ml-md-n4{margin-left:-16px!important}.ml-md-n5{margin-left:-20px!important}.ml-md-n6{margin-left:-24px!important}.ml-md-n7{margin-left:-28px!important}.ml-md-n8{margin-left:-32px!important}.ml-md-n9{margin-left:-36px!important}.ml-md-n10{margin-left:-40px!important}.ml-md-n11{margin-left:-44px!important}.ml-md-n12{margin-left:-48px!important}.ml-md-n13{margin-left:-52px!important}.ml-md-n14{margin-left:-56px!important}.ml-md-n15{margin-left:-60px!important}.ml-md-n16{margin-left:-64px!important}.ms-md-n1{margin-inline-start:-4px!important}.ms-md-n2{margin-inline-start:-8px!important}.ms-md-n3{margin-inline-start:-12px!important}.ms-md-n4{margin-inline-start:-16px!important}.ms-md-n5{margin-inline-start:-20px!important}.ms-md-n6{margin-inline-start:-24px!important}.ms-md-n7{margin-inline-start:-28px!important}.ms-md-n8{margin-inline-start:-32px!important}.ms-md-n9{margin-inline-start:-36px!important}.ms-md-n10{margin-inline-start:-40px!important}.ms-md-n11{margin-inline-start:-44px!important}.ms-md-n12{margin-inline-start:-48px!important}.ms-md-n13{margin-inline-start:-52px!important}.ms-md-n14{margin-inline-start:-56px!important}.ms-md-n15{margin-inline-start:-60px!important}.ms-md-n16{margin-inline-start:-64px!important}.me-md-n1{margin-inline-end:-4px!important}.me-md-n2{margin-inline-end:-8px!important}.me-md-n3{margin-inline-end:-12px!important}.me-md-n4{margin-inline-end:-16px!important}.me-md-n5{margin-inline-end:-20px!important}.me-md-n6{margin-inline-end:-24px!important}.me-md-n7{margin-inline-end:-28px!important}.me-md-n8{margin-inline-end:-32px!important}.me-md-n9{margin-inline-end:-36px!important}.me-md-n10{margin-inline-end:-40px!important}.me-md-n11{margin-inline-end:-44px!important}.me-md-n12{margin-inline-end:-48px!important}.me-md-n13{margin-inline-end:-52px!important}.me-md-n14{margin-inline-end:-56px!important}.me-md-n15{margin-inline-end:-60px!important}.me-md-n16{margin-inline-end:-64px!important}.pa-md-0{padding:0!important}.pa-md-1{padding:4px!important}.pa-md-2{padding:8px!important}.pa-md-3{padding:12px!important}.pa-md-4{padding:16px!important}.pa-md-5{padding:20px!important}.pa-md-6{padding:24px!important}.pa-md-7{padding:28px!important}.pa-md-8{padding:32px!important}.pa-md-9{padding:36px!important}.pa-md-10{padding:40px!important}.pa-md-11{padding:44px!important}.pa-md-12{padding:48px!important}.pa-md-13{padding:52px!important}.pa-md-14{padding:56px!important}.pa-md-15{padding:60px!important}.pa-md-16{padding:64px!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:4px!important;padding-left:4px!important}.px-md-2{padding-right:8px!important;padding-left:8px!important}.px-md-3{padding-right:12px!important;padding-left:12px!important}.px-md-4{padding-right:16px!important;padding-left:16px!important}.px-md-5{padding-right:20px!important;padding-left:20px!important}.px-md-6{padding-right:24px!important;padding-left:24px!important}.px-md-7{padding-right:28px!important;padding-left:28px!important}.px-md-8{padding-right:32px!important;padding-left:32px!important}.px-md-9{padding-right:36px!important;padding-left:36px!important}.px-md-10{padding-right:40px!important;padding-left:40px!important}.px-md-11{padding-right:44px!important;padding-left:44px!important}.px-md-12{padding-right:48px!important;padding-left:48px!important}.px-md-13{padding-right:52px!important;padding-left:52px!important}.px-md-14{padding-right:56px!important;padding-left:56px!important}.px-md-15{padding-right:60px!important;padding-left:60px!important}.px-md-16{padding-right:64px!important;padding-left:64px!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:4px!important;padding-bottom:4px!important}.py-md-2{padding-top:8px!important;padding-bottom:8px!important}.py-md-3{padding-top:12px!important;padding-bottom:12px!important}.py-md-4{padding-top:16px!important;padding-bottom:16px!important}.py-md-5{padding-top:20px!important;padding-bottom:20px!important}.py-md-6{padding-top:24px!important;padding-bottom:24px!important}.py-md-7{padding-top:28px!important;padding-bottom:28px!important}.py-md-8{padding-top:32px!important;padding-bottom:32px!important}.py-md-9{padding-top:36px!important;padding-bottom:36px!important}.py-md-10{padding-top:40px!important;padding-bottom:40px!important}.py-md-11{padding-top:44px!important;padding-bottom:44px!important}.py-md-12{padding-top:48px!important;padding-bottom:48px!important}.py-md-13{padding-top:52px!important;padding-bottom:52px!important}.py-md-14{padding-top:56px!important;padding-bottom:56px!important}.py-md-15{padding-top:60px!important;padding-bottom:60px!important}.py-md-16{padding-top:64px!important;padding-bottom:64px!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:4px!important}.pt-md-2{padding-top:8px!important}.pt-md-3{padding-top:12px!important}.pt-md-4{padding-top:16px!important}.pt-md-5{padding-top:20px!important}.pt-md-6{padding-top:24px!important}.pt-md-7{padding-top:28px!important}.pt-md-8{padding-top:32px!important}.pt-md-9{padding-top:36px!important}.pt-md-10{padding-top:40px!important}.pt-md-11{padding-top:44px!important}.pt-md-12{padding-top:48px!important}.pt-md-13{padding-top:52px!important}.pt-md-14{padding-top:56px!important}.pt-md-15{padding-top:60px!important}.pt-md-16{padding-top:64px!important}.pr-md-0{padding-right:0!important}.pr-md-1{padding-right:4px!important}.pr-md-2{padding-right:8px!important}.pr-md-3{padding-right:12px!important}.pr-md-4{padding-right:16px!important}.pr-md-5{padding-right:20px!important}.pr-md-6{padding-right:24px!important}.pr-md-7{padding-right:28px!important}.pr-md-8{padding-right:32px!important}.pr-md-9{padding-right:36px!important}.pr-md-10{padding-right:40px!important}.pr-md-11{padding-right:44px!important}.pr-md-12{padding-right:48px!important}.pr-md-13{padding-right:52px!important}.pr-md-14{padding-right:56px!important}.pr-md-15{padding-right:60px!important}.pr-md-16{padding-right:64px!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:4px!important}.pb-md-2{padding-bottom:8px!important}.pb-md-3{padding-bottom:12px!important}.pb-md-4{padding-bottom:16px!important}.pb-md-5{padding-bottom:20px!important}.pb-md-6{padding-bottom:24px!important}.pb-md-7{padding-bottom:28px!important}.pb-md-8{padding-bottom:32px!important}.pb-md-9{padding-bottom:36px!important}.pb-md-10{padding-bottom:40px!important}.pb-md-11{padding-bottom:44px!important}.pb-md-12{padding-bottom:48px!important}.pb-md-13{padding-bottom:52px!important}.pb-md-14{padding-bottom:56px!important}.pb-md-15{padding-bottom:60px!important}.pb-md-16{padding-bottom:64px!important}.pl-md-0{padding-left:0!important}.pl-md-1{padding-left:4px!important}.pl-md-2{padding-left:8px!important}.pl-md-3{padding-left:12px!important}.pl-md-4{padding-left:16px!important}.pl-md-5{padding-left:20px!important}.pl-md-6{padding-left:24px!important}.pl-md-7{padding-left:28px!important}.pl-md-8{padding-left:32px!important}.pl-md-9{padding-left:36px!important}.pl-md-10{padding-left:40px!important}.pl-md-11{padding-left:44px!important}.pl-md-12{padding-left:48px!important}.pl-md-13{padding-left:52px!important}.pl-md-14{padding-left:56px!important}.pl-md-15{padding-left:60px!important}.pl-md-16{padding-left:64px!important}.ps-md-0{padding-inline-start:0px!important}.ps-md-1{padding-inline-start:4px!important}.ps-md-2{padding-inline-start:8px!important}.ps-md-3{padding-inline-start:12px!important}.ps-md-4{padding-inline-start:16px!important}.ps-md-5{padding-inline-start:20px!important}.ps-md-6{padding-inline-start:24px!important}.ps-md-7{padding-inline-start:28px!important}.ps-md-8{padding-inline-start:32px!important}.ps-md-9{padding-inline-start:36px!important}.ps-md-10{padding-inline-start:40px!important}.ps-md-11{padding-inline-start:44px!important}.ps-md-12{padding-inline-start:48px!important}.ps-md-13{padding-inline-start:52px!important}.ps-md-14{padding-inline-start:56px!important}.ps-md-15{padding-inline-start:60px!important}.ps-md-16{padding-inline-start:64px!important}.pe-md-0{padding-inline-end:0px!important}.pe-md-1{padding-inline-end:4px!important}.pe-md-2{padding-inline-end:8px!important}.pe-md-3{padding-inline-end:12px!important}.pe-md-4{padding-inline-end:16px!important}.pe-md-5{padding-inline-end:20px!important}.pe-md-6{padding-inline-end:24px!important}.pe-md-7{padding-inline-end:28px!important}.pe-md-8{padding-inline-end:32px!important}.pe-md-9{padding-inline-end:36px!important}.pe-md-10{padding-inline-end:40px!important}.pe-md-11{padding-inline-end:44px!important}.pe-md-12{padding-inline-end:48px!important}.pe-md-13{padding-inline-end:52px!important}.pe-md-14{padding-inline-end:56px!important}.pe-md-15{padding-inline-end:60px!important}.pe-md-16{padding-inline-end:64px!important}.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}.text-md-justify{text-align:justify!important}.text-md-start{text-align:start!important}.text-md-end{text-align:end!important}.text-md-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-md-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-md-auto{height:auto!important}.h-md-screen{height:100vh!important}.h-md-0{height:0!important}.h-md-25{height:25%!important}.h-md-50{height:50%!important}.h-md-75{height:75%!important}.h-md-100{height:100%!important}.w-md-auto{width:auto!important}.w-md-0{width:0!important}.w-md-25{width:25%!important}.w-md-33{width:33%!important}.w-md-50{width:50%!important}.w-md-66{width:66%!important}.w-md-75{width:75%!important}.w-md-100{width:100%!important}}@media (min-width: 1280px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!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}.float-lg-none{float:none!important}.float-lg-left{float:left!important}.float-lg-right{float:right!important}.v-locale--is-rtl .float-lg-end{float:left!important}.v-locale--is-rtl .float-lg-start,.v-locale--is-ltr .float-lg-end{float:right!important}.v-locale--is-ltr .float-lg-start{float:left!important}.flex-lg-fill,.flex-lg-1-1{flex:1 1 auto!important}.flex-lg-1-0{flex:1 0 auto!important}.flex-lg-0-1{flex:0 1 auto!important}.flex-lg-0-0{flex:0 0 auto!important}.flex-lg-1-1-100{flex:1 1 100%!important}.flex-lg-1-0-100{flex:1 0 100%!important}.flex-lg-0-1-100{flex:0 1 100%!important}.flex-lg-0-0-100{flex:0 0 100%!important}.flex-lg-1-1-0{flex:1 1 0!important}.flex-lg-1-0-0{flex:1 0 0!important}.flex-lg-0-1-0{flex:0 1 0!important}.flex-lg-0-0-0{flex:0 0 0!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-lg-start{justify-content:flex-start!important}.justify-lg-end{justify-content:flex-end!important}.justify-lg-center{justify-content:center!important}.justify-lg-space-between{justify-content:space-between!important}.justify-lg-space-around{justify-content:space-around!important}.justify-lg-space-evenly{justify-content:space-evenly!important}.align-lg-start{align-items:flex-start!important}.align-lg-end{align-items:flex-end!important}.align-lg-center{align-items:center!important}.align-lg-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-lg-space-around{align-content:space-around!important}.align-content-lg-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-lg-7{order:7!important}.order-lg-8{order:8!important}.order-lg-9{order:9!important}.order-lg-10{order:10!important}.order-lg-11{order:11!important}.order-lg-12{order:12!important}.order-lg-last{order:13!important}.ga-lg-0{gap:0px!important}.ga-lg-1{gap:4px!important}.ga-lg-2{gap:8px!important}.ga-lg-3{gap:12px!important}.ga-lg-4{gap:16px!important}.ga-lg-5{gap:20px!important}.ga-lg-6{gap:24px!important}.ga-lg-7{gap:28px!important}.ga-lg-8{gap:32px!important}.ga-lg-9{gap:36px!important}.ga-lg-10{gap:40px!important}.ga-lg-11{gap:44px!important}.ga-lg-12{gap:48px!important}.ga-lg-13{gap:52px!important}.ga-lg-14{gap:56px!important}.ga-lg-15{gap:60px!important}.ga-lg-16{gap:64px!important}.ga-lg-auto{gap:auto!important}.gr-lg-0{row-gap:0px!important}.gr-lg-1{row-gap:4px!important}.gr-lg-2{row-gap:8px!important}.gr-lg-3{row-gap:12px!important}.gr-lg-4{row-gap:16px!important}.gr-lg-5{row-gap:20px!important}.gr-lg-6{row-gap:24px!important}.gr-lg-7{row-gap:28px!important}.gr-lg-8{row-gap:32px!important}.gr-lg-9{row-gap:36px!important}.gr-lg-10{row-gap:40px!important}.gr-lg-11{row-gap:44px!important}.gr-lg-12{row-gap:48px!important}.gr-lg-13{row-gap:52px!important}.gr-lg-14{row-gap:56px!important}.gr-lg-15{row-gap:60px!important}.gr-lg-16{row-gap:64px!important}.gr-lg-auto{row-gap:auto!important}.gc-lg-0{column-gap:0px!important}.gc-lg-1{column-gap:4px!important}.gc-lg-2{column-gap:8px!important}.gc-lg-3{column-gap:12px!important}.gc-lg-4{column-gap:16px!important}.gc-lg-5{column-gap:20px!important}.gc-lg-6{column-gap:24px!important}.gc-lg-7{column-gap:28px!important}.gc-lg-8{column-gap:32px!important}.gc-lg-9{column-gap:36px!important}.gc-lg-10{column-gap:40px!important}.gc-lg-11{column-gap:44px!important}.gc-lg-12{column-gap:48px!important}.gc-lg-13{column-gap:52px!important}.gc-lg-14{column-gap:56px!important}.gc-lg-15{column-gap:60px!important}.gc-lg-16{column-gap:64px!important}.gc-lg-auto{column-gap:auto!important}.ma-lg-0{margin:0!important}.ma-lg-1{margin:4px!important}.ma-lg-2{margin:8px!important}.ma-lg-3{margin:12px!important}.ma-lg-4{margin:16px!important}.ma-lg-5{margin:20px!important}.ma-lg-6{margin:24px!important}.ma-lg-7{margin:28px!important}.ma-lg-8{margin:32px!important}.ma-lg-9{margin:36px!important}.ma-lg-10{margin:40px!important}.ma-lg-11{margin:44px!important}.ma-lg-12{margin:48px!important}.ma-lg-13{margin:52px!important}.ma-lg-14{margin:56px!important}.ma-lg-15{margin:60px!important}.ma-lg-16{margin:64px!important}.ma-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:4px!important;margin-left:4px!important}.mx-lg-2{margin-right:8px!important;margin-left:8px!important}.mx-lg-3{margin-right:12px!important;margin-left:12px!important}.mx-lg-4{margin-right:16px!important;margin-left:16px!important}.mx-lg-5{margin-right:20px!important;margin-left:20px!important}.mx-lg-6{margin-right:24px!important;margin-left:24px!important}.mx-lg-7{margin-right:28px!important;margin-left:28px!important}.mx-lg-8{margin-right:32px!important;margin-left:32px!important}.mx-lg-9{margin-right:36px!important;margin-left:36px!important}.mx-lg-10{margin-right:40px!important;margin-left:40px!important}.mx-lg-11{margin-right:44px!important;margin-left:44px!important}.mx-lg-12{margin-right:48px!important;margin-left:48px!important}.mx-lg-13{margin-right:52px!important;margin-left:52px!important}.mx-lg-14{margin-right:56px!important;margin-left:56px!important}.mx-lg-15{margin-right:60px!important;margin-left:60px!important}.mx-lg-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-lg-2{margin-top:8px!important;margin-bottom:8px!important}.my-lg-3{margin-top:12px!important;margin-bottom:12px!important}.my-lg-4{margin-top:16px!important;margin-bottom:16px!important}.my-lg-5{margin-top:20px!important;margin-bottom:20px!important}.my-lg-6{margin-top:24px!important;margin-bottom:24px!important}.my-lg-7{margin-top:28px!important;margin-bottom:28px!important}.my-lg-8{margin-top:32px!important;margin-bottom:32px!important}.my-lg-9{margin-top:36px!important;margin-bottom:36px!important}.my-lg-10{margin-top:40px!important;margin-bottom:40px!important}.my-lg-11{margin-top:44px!important;margin-bottom:44px!important}.my-lg-12{margin-top:48px!important;margin-bottom:48px!important}.my-lg-13{margin-top:52px!important;margin-bottom:52px!important}.my-lg-14{margin-top:56px!important;margin-bottom:56px!important}.my-lg-15{margin-top:60px!important;margin-bottom:60px!important}.my-lg-16{margin-top:64px!important;margin-bottom:64px!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:4px!important}.mt-lg-2{margin-top:8px!important}.mt-lg-3{margin-top:12px!important}.mt-lg-4{margin-top:16px!important}.mt-lg-5{margin-top:20px!important}.mt-lg-6{margin-top:24px!important}.mt-lg-7{margin-top:28px!important}.mt-lg-8{margin-top:32px!important}.mt-lg-9{margin-top:36px!important}.mt-lg-10{margin-top:40px!important}.mt-lg-11{margin-top:44px!important}.mt-lg-12{margin-top:48px!important}.mt-lg-13{margin-top:52px!important}.mt-lg-14{margin-top:56px!important}.mt-lg-15{margin-top:60px!important}.mt-lg-16{margin-top:64px!important}.mt-lg-auto{margin-top:auto!important}.mr-lg-0{margin-right:0!important}.mr-lg-1{margin-right:4px!important}.mr-lg-2{margin-right:8px!important}.mr-lg-3{margin-right:12px!important}.mr-lg-4{margin-right:16px!important}.mr-lg-5{margin-right:20px!important}.mr-lg-6{margin-right:24px!important}.mr-lg-7{margin-right:28px!important}.mr-lg-8{margin-right:32px!important}.mr-lg-9{margin-right:36px!important}.mr-lg-10{margin-right:40px!important}.mr-lg-11{margin-right:44px!important}.mr-lg-12{margin-right:48px!important}.mr-lg-13{margin-right:52px!important}.mr-lg-14{margin-right:56px!important}.mr-lg-15{margin-right:60px!important}.mr-lg-16{margin-right:64px!important}.mr-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:4px!important}.mb-lg-2{margin-bottom:8px!important}.mb-lg-3{margin-bottom:12px!important}.mb-lg-4{margin-bottom:16px!important}.mb-lg-5{margin-bottom:20px!important}.mb-lg-6{margin-bottom:24px!important}.mb-lg-7{margin-bottom:28px!important}.mb-lg-8{margin-bottom:32px!important}.mb-lg-9{margin-bottom:36px!important}.mb-lg-10{margin-bottom:40px!important}.mb-lg-11{margin-bottom:44px!important}.mb-lg-12{margin-bottom:48px!important}.mb-lg-13{margin-bottom:52px!important}.mb-lg-14{margin-bottom:56px!important}.mb-lg-15{margin-bottom:60px!important}.mb-lg-16{margin-bottom:64px!important}.mb-lg-auto{margin-bottom:auto!important}.ml-lg-0{margin-left:0!important}.ml-lg-1{margin-left:4px!important}.ml-lg-2{margin-left:8px!important}.ml-lg-3{margin-left:12px!important}.ml-lg-4{margin-left:16px!important}.ml-lg-5{margin-left:20px!important}.ml-lg-6{margin-left:24px!important}.ml-lg-7{margin-left:28px!important}.ml-lg-8{margin-left:32px!important}.ml-lg-9{margin-left:36px!important}.ml-lg-10{margin-left:40px!important}.ml-lg-11{margin-left:44px!important}.ml-lg-12{margin-left:48px!important}.ml-lg-13{margin-left:52px!important}.ml-lg-14{margin-left:56px!important}.ml-lg-15{margin-left:60px!important}.ml-lg-16{margin-left:64px!important}.ml-lg-auto{margin-left:auto!important}.ms-lg-0{margin-inline-start:0px!important}.ms-lg-1{margin-inline-start:4px!important}.ms-lg-2{margin-inline-start:8px!important}.ms-lg-3{margin-inline-start:12px!important}.ms-lg-4{margin-inline-start:16px!important}.ms-lg-5{margin-inline-start:20px!important}.ms-lg-6{margin-inline-start:24px!important}.ms-lg-7{margin-inline-start:28px!important}.ms-lg-8{margin-inline-start:32px!important}.ms-lg-9{margin-inline-start:36px!important}.ms-lg-10{margin-inline-start:40px!important}.ms-lg-11{margin-inline-start:44px!important}.ms-lg-12{margin-inline-start:48px!important}.ms-lg-13{margin-inline-start:52px!important}.ms-lg-14{margin-inline-start:56px!important}.ms-lg-15{margin-inline-start:60px!important}.ms-lg-16{margin-inline-start:64px!important}.ms-lg-auto{margin-inline-start:auto!important}.me-lg-0{margin-inline-end:0px!important}.me-lg-1{margin-inline-end:4px!important}.me-lg-2{margin-inline-end:8px!important}.me-lg-3{margin-inline-end:12px!important}.me-lg-4{margin-inline-end:16px!important}.me-lg-5{margin-inline-end:20px!important}.me-lg-6{margin-inline-end:24px!important}.me-lg-7{margin-inline-end:28px!important}.me-lg-8{margin-inline-end:32px!important}.me-lg-9{margin-inline-end:36px!important}.me-lg-10{margin-inline-end:40px!important}.me-lg-11{margin-inline-end:44px!important}.me-lg-12{margin-inline-end:48px!important}.me-lg-13{margin-inline-end:52px!important}.me-lg-14{margin-inline-end:56px!important}.me-lg-15{margin-inline-end:60px!important}.me-lg-16{margin-inline-end:64px!important}.me-lg-auto{margin-inline-end:auto!important}.ma-lg-n1{margin:-4px!important}.ma-lg-n2{margin:-8px!important}.ma-lg-n3{margin:-12px!important}.ma-lg-n4{margin:-16px!important}.ma-lg-n5{margin:-20px!important}.ma-lg-n6{margin:-24px!important}.ma-lg-n7{margin:-28px!important}.ma-lg-n8{margin:-32px!important}.ma-lg-n9{margin:-36px!important}.ma-lg-n10{margin:-40px!important}.ma-lg-n11{margin:-44px!important}.ma-lg-n12{margin:-48px!important}.ma-lg-n13{margin:-52px!important}.ma-lg-n14{margin:-56px!important}.ma-lg-n15{margin:-60px!important}.ma-lg-n16{margin:-64px!important}.mx-lg-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-lg-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-lg-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-lg-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-lg-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-lg-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-lg-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-lg-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-lg-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-lg-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-lg-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-lg-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-lg-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-lg-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-lg-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-lg-n16{margin-right:-64px!important;margin-left:-64px!important}.my-lg-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-lg-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-lg-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-lg-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-lg-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-lg-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-lg-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-lg-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-lg-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-lg-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-lg-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-lg-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-lg-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-lg-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-lg-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-lg-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-lg-n1{margin-top:-4px!important}.mt-lg-n2{margin-top:-8px!important}.mt-lg-n3{margin-top:-12px!important}.mt-lg-n4{margin-top:-16px!important}.mt-lg-n5{margin-top:-20px!important}.mt-lg-n6{margin-top:-24px!important}.mt-lg-n7{margin-top:-28px!important}.mt-lg-n8{margin-top:-32px!important}.mt-lg-n9{margin-top:-36px!important}.mt-lg-n10{margin-top:-40px!important}.mt-lg-n11{margin-top:-44px!important}.mt-lg-n12{margin-top:-48px!important}.mt-lg-n13{margin-top:-52px!important}.mt-lg-n14{margin-top:-56px!important}.mt-lg-n15{margin-top:-60px!important}.mt-lg-n16{margin-top:-64px!important}.mr-lg-n1{margin-right:-4px!important}.mr-lg-n2{margin-right:-8px!important}.mr-lg-n3{margin-right:-12px!important}.mr-lg-n4{margin-right:-16px!important}.mr-lg-n5{margin-right:-20px!important}.mr-lg-n6{margin-right:-24px!important}.mr-lg-n7{margin-right:-28px!important}.mr-lg-n8{margin-right:-32px!important}.mr-lg-n9{margin-right:-36px!important}.mr-lg-n10{margin-right:-40px!important}.mr-lg-n11{margin-right:-44px!important}.mr-lg-n12{margin-right:-48px!important}.mr-lg-n13{margin-right:-52px!important}.mr-lg-n14{margin-right:-56px!important}.mr-lg-n15{margin-right:-60px!important}.mr-lg-n16{margin-right:-64px!important}.mb-lg-n1{margin-bottom:-4px!important}.mb-lg-n2{margin-bottom:-8px!important}.mb-lg-n3{margin-bottom:-12px!important}.mb-lg-n4{margin-bottom:-16px!important}.mb-lg-n5{margin-bottom:-20px!important}.mb-lg-n6{margin-bottom:-24px!important}.mb-lg-n7{margin-bottom:-28px!important}.mb-lg-n8{margin-bottom:-32px!important}.mb-lg-n9{margin-bottom:-36px!important}.mb-lg-n10{margin-bottom:-40px!important}.mb-lg-n11{margin-bottom:-44px!important}.mb-lg-n12{margin-bottom:-48px!important}.mb-lg-n13{margin-bottom:-52px!important}.mb-lg-n14{margin-bottom:-56px!important}.mb-lg-n15{margin-bottom:-60px!important}.mb-lg-n16{margin-bottom:-64px!important}.ml-lg-n1{margin-left:-4px!important}.ml-lg-n2{margin-left:-8px!important}.ml-lg-n3{margin-left:-12px!important}.ml-lg-n4{margin-left:-16px!important}.ml-lg-n5{margin-left:-20px!important}.ml-lg-n6{margin-left:-24px!important}.ml-lg-n7{margin-left:-28px!important}.ml-lg-n8{margin-left:-32px!important}.ml-lg-n9{margin-left:-36px!important}.ml-lg-n10{margin-left:-40px!important}.ml-lg-n11{margin-left:-44px!important}.ml-lg-n12{margin-left:-48px!important}.ml-lg-n13{margin-left:-52px!important}.ml-lg-n14{margin-left:-56px!important}.ml-lg-n15{margin-left:-60px!important}.ml-lg-n16{margin-left:-64px!important}.ms-lg-n1{margin-inline-start:-4px!important}.ms-lg-n2{margin-inline-start:-8px!important}.ms-lg-n3{margin-inline-start:-12px!important}.ms-lg-n4{margin-inline-start:-16px!important}.ms-lg-n5{margin-inline-start:-20px!important}.ms-lg-n6{margin-inline-start:-24px!important}.ms-lg-n7{margin-inline-start:-28px!important}.ms-lg-n8{margin-inline-start:-32px!important}.ms-lg-n9{margin-inline-start:-36px!important}.ms-lg-n10{margin-inline-start:-40px!important}.ms-lg-n11{margin-inline-start:-44px!important}.ms-lg-n12{margin-inline-start:-48px!important}.ms-lg-n13{margin-inline-start:-52px!important}.ms-lg-n14{margin-inline-start:-56px!important}.ms-lg-n15{margin-inline-start:-60px!important}.ms-lg-n16{margin-inline-start:-64px!important}.me-lg-n1{margin-inline-end:-4px!important}.me-lg-n2{margin-inline-end:-8px!important}.me-lg-n3{margin-inline-end:-12px!important}.me-lg-n4{margin-inline-end:-16px!important}.me-lg-n5{margin-inline-end:-20px!important}.me-lg-n6{margin-inline-end:-24px!important}.me-lg-n7{margin-inline-end:-28px!important}.me-lg-n8{margin-inline-end:-32px!important}.me-lg-n9{margin-inline-end:-36px!important}.me-lg-n10{margin-inline-end:-40px!important}.me-lg-n11{margin-inline-end:-44px!important}.me-lg-n12{margin-inline-end:-48px!important}.me-lg-n13{margin-inline-end:-52px!important}.me-lg-n14{margin-inline-end:-56px!important}.me-lg-n15{margin-inline-end:-60px!important}.me-lg-n16{margin-inline-end:-64px!important}.pa-lg-0{padding:0!important}.pa-lg-1{padding:4px!important}.pa-lg-2{padding:8px!important}.pa-lg-3{padding:12px!important}.pa-lg-4{padding:16px!important}.pa-lg-5{padding:20px!important}.pa-lg-6{padding:24px!important}.pa-lg-7{padding:28px!important}.pa-lg-8{padding:32px!important}.pa-lg-9{padding:36px!important}.pa-lg-10{padding:40px!important}.pa-lg-11{padding:44px!important}.pa-lg-12{padding:48px!important}.pa-lg-13{padding:52px!important}.pa-lg-14{padding:56px!important}.pa-lg-15{padding:60px!important}.pa-lg-16{padding:64px!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:4px!important;padding-left:4px!important}.px-lg-2{padding-right:8px!important;padding-left:8px!important}.px-lg-3{padding-right:12px!important;padding-left:12px!important}.px-lg-4{padding-right:16px!important;padding-left:16px!important}.px-lg-5{padding-right:20px!important;padding-left:20px!important}.px-lg-6{padding-right:24px!important;padding-left:24px!important}.px-lg-7{padding-right:28px!important;padding-left:28px!important}.px-lg-8{padding-right:32px!important;padding-left:32px!important}.px-lg-9{padding-right:36px!important;padding-left:36px!important}.px-lg-10{padding-right:40px!important;padding-left:40px!important}.px-lg-11{padding-right:44px!important;padding-left:44px!important}.px-lg-12{padding-right:48px!important;padding-left:48px!important}.px-lg-13{padding-right:52px!important;padding-left:52px!important}.px-lg-14{padding-right:56px!important;padding-left:56px!important}.px-lg-15{padding-right:60px!important;padding-left:60px!important}.px-lg-16{padding-right:64px!important;padding-left:64px!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:4px!important;padding-bottom:4px!important}.py-lg-2{padding-top:8px!important;padding-bottom:8px!important}.py-lg-3{padding-top:12px!important;padding-bottom:12px!important}.py-lg-4{padding-top:16px!important;padding-bottom:16px!important}.py-lg-5{padding-top:20px!important;padding-bottom:20px!important}.py-lg-6{padding-top:24px!important;padding-bottom:24px!important}.py-lg-7{padding-top:28px!important;padding-bottom:28px!important}.py-lg-8{padding-top:32px!important;padding-bottom:32px!important}.py-lg-9{padding-top:36px!important;padding-bottom:36px!important}.py-lg-10{padding-top:40px!important;padding-bottom:40px!important}.py-lg-11{padding-top:44px!important;padding-bottom:44px!important}.py-lg-12{padding-top:48px!important;padding-bottom:48px!important}.py-lg-13{padding-top:52px!important;padding-bottom:52px!important}.py-lg-14{padding-top:56px!important;padding-bottom:56px!important}.py-lg-15{padding-top:60px!important;padding-bottom:60px!important}.py-lg-16{padding-top:64px!important;padding-bottom:64px!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:4px!important}.pt-lg-2{padding-top:8px!important}.pt-lg-3{padding-top:12px!important}.pt-lg-4{padding-top:16px!important}.pt-lg-5{padding-top:20px!important}.pt-lg-6{padding-top:24px!important}.pt-lg-7{padding-top:28px!important}.pt-lg-8{padding-top:32px!important}.pt-lg-9{padding-top:36px!important}.pt-lg-10{padding-top:40px!important}.pt-lg-11{padding-top:44px!important}.pt-lg-12{padding-top:48px!important}.pt-lg-13{padding-top:52px!important}.pt-lg-14{padding-top:56px!important}.pt-lg-15{padding-top:60px!important}.pt-lg-16{padding-top:64px!important}.pr-lg-0{padding-right:0!important}.pr-lg-1{padding-right:4px!important}.pr-lg-2{padding-right:8px!important}.pr-lg-3{padding-right:12px!important}.pr-lg-4{padding-right:16px!important}.pr-lg-5{padding-right:20px!important}.pr-lg-6{padding-right:24px!important}.pr-lg-7{padding-right:28px!important}.pr-lg-8{padding-right:32px!important}.pr-lg-9{padding-right:36px!important}.pr-lg-10{padding-right:40px!important}.pr-lg-11{padding-right:44px!important}.pr-lg-12{padding-right:48px!important}.pr-lg-13{padding-right:52px!important}.pr-lg-14{padding-right:56px!important}.pr-lg-15{padding-right:60px!important}.pr-lg-16{padding-right:64px!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:4px!important}.pb-lg-2{padding-bottom:8px!important}.pb-lg-3{padding-bottom:12px!important}.pb-lg-4{padding-bottom:16px!important}.pb-lg-5{padding-bottom:20px!important}.pb-lg-6{padding-bottom:24px!important}.pb-lg-7{padding-bottom:28px!important}.pb-lg-8{padding-bottom:32px!important}.pb-lg-9{padding-bottom:36px!important}.pb-lg-10{padding-bottom:40px!important}.pb-lg-11{padding-bottom:44px!important}.pb-lg-12{padding-bottom:48px!important}.pb-lg-13{padding-bottom:52px!important}.pb-lg-14{padding-bottom:56px!important}.pb-lg-15{padding-bottom:60px!important}.pb-lg-16{padding-bottom:64px!important}.pl-lg-0{padding-left:0!important}.pl-lg-1{padding-left:4px!important}.pl-lg-2{padding-left:8px!important}.pl-lg-3{padding-left:12px!important}.pl-lg-4{padding-left:16px!important}.pl-lg-5{padding-left:20px!important}.pl-lg-6{padding-left:24px!important}.pl-lg-7{padding-left:28px!important}.pl-lg-8{padding-left:32px!important}.pl-lg-9{padding-left:36px!important}.pl-lg-10{padding-left:40px!important}.pl-lg-11{padding-left:44px!important}.pl-lg-12{padding-left:48px!important}.pl-lg-13{padding-left:52px!important}.pl-lg-14{padding-left:56px!important}.pl-lg-15{padding-left:60px!important}.pl-lg-16{padding-left:64px!important}.ps-lg-0{padding-inline-start:0px!important}.ps-lg-1{padding-inline-start:4px!important}.ps-lg-2{padding-inline-start:8px!important}.ps-lg-3{padding-inline-start:12px!important}.ps-lg-4{padding-inline-start:16px!important}.ps-lg-5{padding-inline-start:20px!important}.ps-lg-6{padding-inline-start:24px!important}.ps-lg-7{padding-inline-start:28px!important}.ps-lg-8{padding-inline-start:32px!important}.ps-lg-9{padding-inline-start:36px!important}.ps-lg-10{padding-inline-start:40px!important}.ps-lg-11{padding-inline-start:44px!important}.ps-lg-12{padding-inline-start:48px!important}.ps-lg-13{padding-inline-start:52px!important}.ps-lg-14{padding-inline-start:56px!important}.ps-lg-15{padding-inline-start:60px!important}.ps-lg-16{padding-inline-start:64px!important}.pe-lg-0{padding-inline-end:0px!important}.pe-lg-1{padding-inline-end:4px!important}.pe-lg-2{padding-inline-end:8px!important}.pe-lg-3{padding-inline-end:12px!important}.pe-lg-4{padding-inline-end:16px!important}.pe-lg-5{padding-inline-end:20px!important}.pe-lg-6{padding-inline-end:24px!important}.pe-lg-7{padding-inline-end:28px!important}.pe-lg-8{padding-inline-end:32px!important}.pe-lg-9{padding-inline-end:36px!important}.pe-lg-10{padding-inline-end:40px!important}.pe-lg-11{padding-inline-end:44px!important}.pe-lg-12{padding-inline-end:48px!important}.pe-lg-13{padding-inline-end:52px!important}.pe-lg-14{padding-inline-end:56px!important}.pe-lg-15{padding-inline-end:60px!important}.pe-lg-16{padding-inline-end:64px!important}.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}.text-lg-justify{text-align:justify!important}.text-lg-start{text-align:start!important}.text-lg-end{text-align:end!important}.text-lg-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-lg-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-lg-auto{height:auto!important}.h-lg-screen{height:100vh!important}.h-lg-0{height:0!important}.h-lg-25{height:25%!important}.h-lg-50{height:50%!important}.h-lg-75{height:75%!important}.h-lg-100{height:100%!important}.w-lg-auto{width:auto!important}.w-lg-0{width:0!important}.w-lg-25{width:25%!important}.w-lg-33{width:33%!important}.w-lg-50{width:50%!important}.w-lg-66{width:66%!important}.w-lg-75{width:75%!important}.w-lg-100{width:100%!important}}@media (min-width: 1920px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!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}.float-xl-none{float:none!important}.float-xl-left{float:left!important}.float-xl-right{float:right!important}.v-locale--is-rtl .float-xl-end{float:left!important}.v-locale--is-rtl .float-xl-start,.v-locale--is-ltr .float-xl-end{float:right!important}.v-locale--is-ltr .float-xl-start{float:left!important}.flex-xl-fill,.flex-xl-1-1{flex:1 1 auto!important}.flex-xl-1-0{flex:1 0 auto!important}.flex-xl-0-1{flex:0 1 auto!important}.flex-xl-0-0{flex:0 0 auto!important}.flex-xl-1-1-100{flex:1 1 100%!important}.flex-xl-1-0-100{flex:1 0 100%!important}.flex-xl-0-1-100{flex:0 1 100%!important}.flex-xl-0-0-100{flex:0 0 100%!important}.flex-xl-1-1-0{flex:1 1 0!important}.flex-xl-1-0-0{flex:1 0 0!important}.flex-xl-0-1-0{flex:0 1 0!important}.flex-xl-0-0-0{flex:0 0 0!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-xl-start{justify-content:flex-start!important}.justify-xl-end{justify-content:flex-end!important}.justify-xl-center{justify-content:center!important}.justify-xl-space-between{justify-content:space-between!important}.justify-xl-space-around{justify-content:space-around!important}.justify-xl-space-evenly{justify-content:space-evenly!important}.align-xl-start{align-items:flex-start!important}.align-xl-end{align-items:flex-end!important}.align-xl-center{align-items:center!important}.align-xl-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-xl-space-around{align-content:space-around!important}.align-content-xl-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-xl-7{order:7!important}.order-xl-8{order:8!important}.order-xl-9{order:9!important}.order-xl-10{order:10!important}.order-xl-11{order:11!important}.order-xl-12{order:12!important}.order-xl-last{order:13!important}.ga-xl-0{gap:0px!important}.ga-xl-1{gap:4px!important}.ga-xl-2{gap:8px!important}.ga-xl-3{gap:12px!important}.ga-xl-4{gap:16px!important}.ga-xl-5{gap:20px!important}.ga-xl-6{gap:24px!important}.ga-xl-7{gap:28px!important}.ga-xl-8{gap:32px!important}.ga-xl-9{gap:36px!important}.ga-xl-10{gap:40px!important}.ga-xl-11{gap:44px!important}.ga-xl-12{gap:48px!important}.ga-xl-13{gap:52px!important}.ga-xl-14{gap:56px!important}.ga-xl-15{gap:60px!important}.ga-xl-16{gap:64px!important}.ga-xl-auto{gap:auto!important}.gr-xl-0{row-gap:0px!important}.gr-xl-1{row-gap:4px!important}.gr-xl-2{row-gap:8px!important}.gr-xl-3{row-gap:12px!important}.gr-xl-4{row-gap:16px!important}.gr-xl-5{row-gap:20px!important}.gr-xl-6{row-gap:24px!important}.gr-xl-7{row-gap:28px!important}.gr-xl-8{row-gap:32px!important}.gr-xl-9{row-gap:36px!important}.gr-xl-10{row-gap:40px!important}.gr-xl-11{row-gap:44px!important}.gr-xl-12{row-gap:48px!important}.gr-xl-13{row-gap:52px!important}.gr-xl-14{row-gap:56px!important}.gr-xl-15{row-gap:60px!important}.gr-xl-16{row-gap:64px!important}.gr-xl-auto{row-gap:auto!important}.gc-xl-0{column-gap:0px!important}.gc-xl-1{column-gap:4px!important}.gc-xl-2{column-gap:8px!important}.gc-xl-3{column-gap:12px!important}.gc-xl-4{column-gap:16px!important}.gc-xl-5{column-gap:20px!important}.gc-xl-6{column-gap:24px!important}.gc-xl-7{column-gap:28px!important}.gc-xl-8{column-gap:32px!important}.gc-xl-9{column-gap:36px!important}.gc-xl-10{column-gap:40px!important}.gc-xl-11{column-gap:44px!important}.gc-xl-12{column-gap:48px!important}.gc-xl-13{column-gap:52px!important}.gc-xl-14{column-gap:56px!important}.gc-xl-15{column-gap:60px!important}.gc-xl-16{column-gap:64px!important}.gc-xl-auto{column-gap:auto!important}.ma-xl-0{margin:0!important}.ma-xl-1{margin:4px!important}.ma-xl-2{margin:8px!important}.ma-xl-3{margin:12px!important}.ma-xl-4{margin:16px!important}.ma-xl-5{margin:20px!important}.ma-xl-6{margin:24px!important}.ma-xl-7{margin:28px!important}.ma-xl-8{margin:32px!important}.ma-xl-9{margin:36px!important}.ma-xl-10{margin:40px!important}.ma-xl-11{margin:44px!important}.ma-xl-12{margin:48px!important}.ma-xl-13{margin:52px!important}.ma-xl-14{margin:56px!important}.ma-xl-15{margin:60px!important}.ma-xl-16{margin:64px!important}.ma-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:4px!important;margin-left:4px!important}.mx-xl-2{margin-right:8px!important;margin-left:8px!important}.mx-xl-3{margin-right:12px!important;margin-left:12px!important}.mx-xl-4{margin-right:16px!important;margin-left:16px!important}.mx-xl-5{margin-right:20px!important;margin-left:20px!important}.mx-xl-6{margin-right:24px!important;margin-left:24px!important}.mx-xl-7{margin-right:28px!important;margin-left:28px!important}.mx-xl-8{margin-right:32px!important;margin-left:32px!important}.mx-xl-9{margin-right:36px!important;margin-left:36px!important}.mx-xl-10{margin-right:40px!important;margin-left:40px!important}.mx-xl-11{margin-right:44px!important;margin-left:44px!important}.mx-xl-12{margin-right:48px!important;margin-left:48px!important}.mx-xl-13{margin-right:52px!important;margin-left:52px!important}.mx-xl-14{margin-right:56px!important;margin-left:56px!important}.mx-xl-15{margin-right:60px!important;margin-left:60px!important}.mx-xl-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-xl-2{margin-top:8px!important;margin-bottom:8px!important}.my-xl-3{margin-top:12px!important;margin-bottom:12px!important}.my-xl-4{margin-top:16px!important;margin-bottom:16px!important}.my-xl-5{margin-top:20px!important;margin-bottom:20px!important}.my-xl-6{margin-top:24px!important;margin-bottom:24px!important}.my-xl-7{margin-top:28px!important;margin-bottom:28px!important}.my-xl-8{margin-top:32px!important;margin-bottom:32px!important}.my-xl-9{margin-top:36px!important;margin-bottom:36px!important}.my-xl-10{margin-top:40px!important;margin-bottom:40px!important}.my-xl-11{margin-top:44px!important;margin-bottom:44px!important}.my-xl-12{margin-top:48px!important;margin-bottom:48px!important}.my-xl-13{margin-top:52px!important;margin-bottom:52px!important}.my-xl-14{margin-top:56px!important;margin-bottom:56px!important}.my-xl-15{margin-top:60px!important;margin-bottom:60px!important}.my-xl-16{margin-top:64px!important;margin-bottom:64px!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:4px!important}.mt-xl-2{margin-top:8px!important}.mt-xl-3{margin-top:12px!important}.mt-xl-4{margin-top:16px!important}.mt-xl-5{margin-top:20px!important}.mt-xl-6{margin-top:24px!important}.mt-xl-7{margin-top:28px!important}.mt-xl-8{margin-top:32px!important}.mt-xl-9{margin-top:36px!important}.mt-xl-10{margin-top:40px!important}.mt-xl-11{margin-top:44px!important}.mt-xl-12{margin-top:48px!important}.mt-xl-13{margin-top:52px!important}.mt-xl-14{margin-top:56px!important}.mt-xl-15{margin-top:60px!important}.mt-xl-16{margin-top:64px!important}.mt-xl-auto{margin-top:auto!important}.mr-xl-0{margin-right:0!important}.mr-xl-1{margin-right:4px!important}.mr-xl-2{margin-right:8px!important}.mr-xl-3{margin-right:12px!important}.mr-xl-4{margin-right:16px!important}.mr-xl-5{margin-right:20px!important}.mr-xl-6{margin-right:24px!important}.mr-xl-7{margin-right:28px!important}.mr-xl-8{margin-right:32px!important}.mr-xl-9{margin-right:36px!important}.mr-xl-10{margin-right:40px!important}.mr-xl-11{margin-right:44px!important}.mr-xl-12{margin-right:48px!important}.mr-xl-13{margin-right:52px!important}.mr-xl-14{margin-right:56px!important}.mr-xl-15{margin-right:60px!important}.mr-xl-16{margin-right:64px!important}.mr-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:4px!important}.mb-xl-2{margin-bottom:8px!important}.mb-xl-3{margin-bottom:12px!important}.mb-xl-4{margin-bottom:16px!important}.mb-xl-5{margin-bottom:20px!important}.mb-xl-6{margin-bottom:24px!important}.mb-xl-7{margin-bottom:28px!important}.mb-xl-8{margin-bottom:32px!important}.mb-xl-9{margin-bottom:36px!important}.mb-xl-10{margin-bottom:40px!important}.mb-xl-11{margin-bottom:44px!important}.mb-xl-12{margin-bottom:48px!important}.mb-xl-13{margin-bottom:52px!important}.mb-xl-14{margin-bottom:56px!important}.mb-xl-15{margin-bottom:60px!important}.mb-xl-16{margin-bottom:64px!important}.mb-xl-auto{margin-bottom:auto!important}.ml-xl-0{margin-left:0!important}.ml-xl-1{margin-left:4px!important}.ml-xl-2{margin-left:8px!important}.ml-xl-3{margin-left:12px!important}.ml-xl-4{margin-left:16px!important}.ml-xl-5{margin-left:20px!important}.ml-xl-6{margin-left:24px!important}.ml-xl-7{margin-left:28px!important}.ml-xl-8{margin-left:32px!important}.ml-xl-9{margin-left:36px!important}.ml-xl-10{margin-left:40px!important}.ml-xl-11{margin-left:44px!important}.ml-xl-12{margin-left:48px!important}.ml-xl-13{margin-left:52px!important}.ml-xl-14{margin-left:56px!important}.ml-xl-15{margin-left:60px!important}.ml-xl-16{margin-left:64px!important}.ml-xl-auto{margin-left:auto!important}.ms-xl-0{margin-inline-start:0px!important}.ms-xl-1{margin-inline-start:4px!important}.ms-xl-2{margin-inline-start:8px!important}.ms-xl-3{margin-inline-start:12px!important}.ms-xl-4{margin-inline-start:16px!important}.ms-xl-5{margin-inline-start:20px!important}.ms-xl-6{margin-inline-start:24px!important}.ms-xl-7{margin-inline-start:28px!important}.ms-xl-8{margin-inline-start:32px!important}.ms-xl-9{margin-inline-start:36px!important}.ms-xl-10{margin-inline-start:40px!important}.ms-xl-11{margin-inline-start:44px!important}.ms-xl-12{margin-inline-start:48px!important}.ms-xl-13{margin-inline-start:52px!important}.ms-xl-14{margin-inline-start:56px!important}.ms-xl-15{margin-inline-start:60px!important}.ms-xl-16{margin-inline-start:64px!important}.ms-xl-auto{margin-inline-start:auto!important}.me-xl-0{margin-inline-end:0px!important}.me-xl-1{margin-inline-end:4px!important}.me-xl-2{margin-inline-end:8px!important}.me-xl-3{margin-inline-end:12px!important}.me-xl-4{margin-inline-end:16px!important}.me-xl-5{margin-inline-end:20px!important}.me-xl-6{margin-inline-end:24px!important}.me-xl-7{margin-inline-end:28px!important}.me-xl-8{margin-inline-end:32px!important}.me-xl-9{margin-inline-end:36px!important}.me-xl-10{margin-inline-end:40px!important}.me-xl-11{margin-inline-end:44px!important}.me-xl-12{margin-inline-end:48px!important}.me-xl-13{margin-inline-end:52px!important}.me-xl-14{margin-inline-end:56px!important}.me-xl-15{margin-inline-end:60px!important}.me-xl-16{margin-inline-end:64px!important}.me-xl-auto{margin-inline-end:auto!important}.ma-xl-n1{margin:-4px!important}.ma-xl-n2{margin:-8px!important}.ma-xl-n3{margin:-12px!important}.ma-xl-n4{margin:-16px!important}.ma-xl-n5{margin:-20px!important}.ma-xl-n6{margin:-24px!important}.ma-xl-n7{margin:-28px!important}.ma-xl-n8{margin:-32px!important}.ma-xl-n9{margin:-36px!important}.ma-xl-n10{margin:-40px!important}.ma-xl-n11{margin:-44px!important}.ma-xl-n12{margin:-48px!important}.ma-xl-n13{margin:-52px!important}.ma-xl-n14{margin:-56px!important}.ma-xl-n15{margin:-60px!important}.ma-xl-n16{margin:-64px!important}.mx-xl-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-xl-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-xl-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-xl-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-xl-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-xl-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-xl-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-xl-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-xl-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-xl-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-xl-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-xl-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-xl-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-xl-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-xl-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-xl-n16{margin-right:-64px!important;margin-left:-64px!important}.my-xl-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-xl-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-xl-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-xl-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-xl-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-xl-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-xl-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-xl-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-xl-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-xl-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-xl-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-xl-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-xl-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-xl-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-xl-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-xl-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-xl-n1{margin-top:-4px!important}.mt-xl-n2{margin-top:-8px!important}.mt-xl-n3{margin-top:-12px!important}.mt-xl-n4{margin-top:-16px!important}.mt-xl-n5{margin-top:-20px!important}.mt-xl-n6{margin-top:-24px!important}.mt-xl-n7{margin-top:-28px!important}.mt-xl-n8{margin-top:-32px!important}.mt-xl-n9{margin-top:-36px!important}.mt-xl-n10{margin-top:-40px!important}.mt-xl-n11{margin-top:-44px!important}.mt-xl-n12{margin-top:-48px!important}.mt-xl-n13{margin-top:-52px!important}.mt-xl-n14{margin-top:-56px!important}.mt-xl-n15{margin-top:-60px!important}.mt-xl-n16{margin-top:-64px!important}.mr-xl-n1{margin-right:-4px!important}.mr-xl-n2{margin-right:-8px!important}.mr-xl-n3{margin-right:-12px!important}.mr-xl-n4{margin-right:-16px!important}.mr-xl-n5{margin-right:-20px!important}.mr-xl-n6{margin-right:-24px!important}.mr-xl-n7{margin-right:-28px!important}.mr-xl-n8{margin-right:-32px!important}.mr-xl-n9{margin-right:-36px!important}.mr-xl-n10{margin-right:-40px!important}.mr-xl-n11{margin-right:-44px!important}.mr-xl-n12{margin-right:-48px!important}.mr-xl-n13{margin-right:-52px!important}.mr-xl-n14{margin-right:-56px!important}.mr-xl-n15{margin-right:-60px!important}.mr-xl-n16{margin-right:-64px!important}.mb-xl-n1{margin-bottom:-4px!important}.mb-xl-n2{margin-bottom:-8px!important}.mb-xl-n3{margin-bottom:-12px!important}.mb-xl-n4{margin-bottom:-16px!important}.mb-xl-n5{margin-bottom:-20px!important}.mb-xl-n6{margin-bottom:-24px!important}.mb-xl-n7{margin-bottom:-28px!important}.mb-xl-n8{margin-bottom:-32px!important}.mb-xl-n9{margin-bottom:-36px!important}.mb-xl-n10{margin-bottom:-40px!important}.mb-xl-n11{margin-bottom:-44px!important}.mb-xl-n12{margin-bottom:-48px!important}.mb-xl-n13{margin-bottom:-52px!important}.mb-xl-n14{margin-bottom:-56px!important}.mb-xl-n15{margin-bottom:-60px!important}.mb-xl-n16{margin-bottom:-64px!important}.ml-xl-n1{margin-left:-4px!important}.ml-xl-n2{margin-left:-8px!important}.ml-xl-n3{margin-left:-12px!important}.ml-xl-n4{margin-left:-16px!important}.ml-xl-n5{margin-left:-20px!important}.ml-xl-n6{margin-left:-24px!important}.ml-xl-n7{margin-left:-28px!important}.ml-xl-n8{margin-left:-32px!important}.ml-xl-n9{margin-left:-36px!important}.ml-xl-n10{margin-left:-40px!important}.ml-xl-n11{margin-left:-44px!important}.ml-xl-n12{margin-left:-48px!important}.ml-xl-n13{margin-left:-52px!important}.ml-xl-n14{margin-left:-56px!important}.ml-xl-n15{margin-left:-60px!important}.ml-xl-n16{margin-left:-64px!important}.ms-xl-n1{margin-inline-start:-4px!important}.ms-xl-n2{margin-inline-start:-8px!important}.ms-xl-n3{margin-inline-start:-12px!important}.ms-xl-n4{margin-inline-start:-16px!important}.ms-xl-n5{margin-inline-start:-20px!important}.ms-xl-n6{margin-inline-start:-24px!important}.ms-xl-n7{margin-inline-start:-28px!important}.ms-xl-n8{margin-inline-start:-32px!important}.ms-xl-n9{margin-inline-start:-36px!important}.ms-xl-n10{margin-inline-start:-40px!important}.ms-xl-n11{margin-inline-start:-44px!important}.ms-xl-n12{margin-inline-start:-48px!important}.ms-xl-n13{margin-inline-start:-52px!important}.ms-xl-n14{margin-inline-start:-56px!important}.ms-xl-n15{margin-inline-start:-60px!important}.ms-xl-n16{margin-inline-start:-64px!important}.me-xl-n1{margin-inline-end:-4px!important}.me-xl-n2{margin-inline-end:-8px!important}.me-xl-n3{margin-inline-end:-12px!important}.me-xl-n4{margin-inline-end:-16px!important}.me-xl-n5{margin-inline-end:-20px!important}.me-xl-n6{margin-inline-end:-24px!important}.me-xl-n7{margin-inline-end:-28px!important}.me-xl-n8{margin-inline-end:-32px!important}.me-xl-n9{margin-inline-end:-36px!important}.me-xl-n10{margin-inline-end:-40px!important}.me-xl-n11{margin-inline-end:-44px!important}.me-xl-n12{margin-inline-end:-48px!important}.me-xl-n13{margin-inline-end:-52px!important}.me-xl-n14{margin-inline-end:-56px!important}.me-xl-n15{margin-inline-end:-60px!important}.me-xl-n16{margin-inline-end:-64px!important}.pa-xl-0{padding:0!important}.pa-xl-1{padding:4px!important}.pa-xl-2{padding:8px!important}.pa-xl-3{padding:12px!important}.pa-xl-4{padding:16px!important}.pa-xl-5{padding:20px!important}.pa-xl-6{padding:24px!important}.pa-xl-7{padding:28px!important}.pa-xl-8{padding:32px!important}.pa-xl-9{padding:36px!important}.pa-xl-10{padding:40px!important}.pa-xl-11{padding:44px!important}.pa-xl-12{padding:48px!important}.pa-xl-13{padding:52px!important}.pa-xl-14{padding:56px!important}.pa-xl-15{padding:60px!important}.pa-xl-16{padding:64px!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:4px!important;padding-left:4px!important}.px-xl-2{padding-right:8px!important;padding-left:8px!important}.px-xl-3{padding-right:12px!important;padding-left:12px!important}.px-xl-4{padding-right:16px!important;padding-left:16px!important}.px-xl-5{padding-right:20px!important;padding-left:20px!important}.px-xl-6{padding-right:24px!important;padding-left:24px!important}.px-xl-7{padding-right:28px!important;padding-left:28px!important}.px-xl-8{padding-right:32px!important;padding-left:32px!important}.px-xl-9{padding-right:36px!important;padding-left:36px!important}.px-xl-10{padding-right:40px!important;padding-left:40px!important}.px-xl-11{padding-right:44px!important;padding-left:44px!important}.px-xl-12{padding-right:48px!important;padding-left:48px!important}.px-xl-13{padding-right:52px!important;padding-left:52px!important}.px-xl-14{padding-right:56px!important;padding-left:56px!important}.px-xl-15{padding-right:60px!important;padding-left:60px!important}.px-xl-16{padding-right:64px!important;padding-left:64px!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:4px!important;padding-bottom:4px!important}.py-xl-2{padding-top:8px!important;padding-bottom:8px!important}.py-xl-3{padding-top:12px!important;padding-bottom:12px!important}.py-xl-4{padding-top:16px!important;padding-bottom:16px!important}.py-xl-5{padding-top:20px!important;padding-bottom:20px!important}.py-xl-6{padding-top:24px!important;padding-bottom:24px!important}.py-xl-7{padding-top:28px!important;padding-bottom:28px!important}.py-xl-8{padding-top:32px!important;padding-bottom:32px!important}.py-xl-9{padding-top:36px!important;padding-bottom:36px!important}.py-xl-10{padding-top:40px!important;padding-bottom:40px!important}.py-xl-11{padding-top:44px!important;padding-bottom:44px!important}.py-xl-12{padding-top:48px!important;padding-bottom:48px!important}.py-xl-13{padding-top:52px!important;padding-bottom:52px!important}.py-xl-14{padding-top:56px!important;padding-bottom:56px!important}.py-xl-15{padding-top:60px!important;padding-bottom:60px!important}.py-xl-16{padding-top:64px!important;padding-bottom:64px!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:4px!important}.pt-xl-2{padding-top:8px!important}.pt-xl-3{padding-top:12px!important}.pt-xl-4{padding-top:16px!important}.pt-xl-5{padding-top:20px!important}.pt-xl-6{padding-top:24px!important}.pt-xl-7{padding-top:28px!important}.pt-xl-8{padding-top:32px!important}.pt-xl-9{padding-top:36px!important}.pt-xl-10{padding-top:40px!important}.pt-xl-11{padding-top:44px!important}.pt-xl-12{padding-top:48px!important}.pt-xl-13{padding-top:52px!important}.pt-xl-14{padding-top:56px!important}.pt-xl-15{padding-top:60px!important}.pt-xl-16{padding-top:64px!important}.pr-xl-0{padding-right:0!important}.pr-xl-1{padding-right:4px!important}.pr-xl-2{padding-right:8px!important}.pr-xl-3{padding-right:12px!important}.pr-xl-4{padding-right:16px!important}.pr-xl-5{padding-right:20px!important}.pr-xl-6{padding-right:24px!important}.pr-xl-7{padding-right:28px!important}.pr-xl-8{padding-right:32px!important}.pr-xl-9{padding-right:36px!important}.pr-xl-10{padding-right:40px!important}.pr-xl-11{padding-right:44px!important}.pr-xl-12{padding-right:48px!important}.pr-xl-13{padding-right:52px!important}.pr-xl-14{padding-right:56px!important}.pr-xl-15{padding-right:60px!important}.pr-xl-16{padding-right:64px!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:4px!important}.pb-xl-2{padding-bottom:8px!important}.pb-xl-3{padding-bottom:12px!important}.pb-xl-4{padding-bottom:16px!important}.pb-xl-5{padding-bottom:20px!important}.pb-xl-6{padding-bottom:24px!important}.pb-xl-7{padding-bottom:28px!important}.pb-xl-8{padding-bottom:32px!important}.pb-xl-9{padding-bottom:36px!important}.pb-xl-10{padding-bottom:40px!important}.pb-xl-11{padding-bottom:44px!important}.pb-xl-12{padding-bottom:48px!important}.pb-xl-13{padding-bottom:52px!important}.pb-xl-14{padding-bottom:56px!important}.pb-xl-15{padding-bottom:60px!important}.pb-xl-16{padding-bottom:64px!important}.pl-xl-0{padding-left:0!important}.pl-xl-1{padding-left:4px!important}.pl-xl-2{padding-left:8px!important}.pl-xl-3{padding-left:12px!important}.pl-xl-4{padding-left:16px!important}.pl-xl-5{padding-left:20px!important}.pl-xl-6{padding-left:24px!important}.pl-xl-7{padding-left:28px!important}.pl-xl-8{padding-left:32px!important}.pl-xl-9{padding-left:36px!important}.pl-xl-10{padding-left:40px!important}.pl-xl-11{padding-left:44px!important}.pl-xl-12{padding-left:48px!important}.pl-xl-13{padding-left:52px!important}.pl-xl-14{padding-left:56px!important}.pl-xl-15{padding-left:60px!important}.pl-xl-16{padding-left:64px!important}.ps-xl-0{padding-inline-start:0px!important}.ps-xl-1{padding-inline-start:4px!important}.ps-xl-2{padding-inline-start:8px!important}.ps-xl-3{padding-inline-start:12px!important}.ps-xl-4{padding-inline-start:16px!important}.ps-xl-5{padding-inline-start:20px!important}.ps-xl-6{padding-inline-start:24px!important}.ps-xl-7{padding-inline-start:28px!important}.ps-xl-8{padding-inline-start:32px!important}.ps-xl-9{padding-inline-start:36px!important}.ps-xl-10{padding-inline-start:40px!important}.ps-xl-11{padding-inline-start:44px!important}.ps-xl-12{padding-inline-start:48px!important}.ps-xl-13{padding-inline-start:52px!important}.ps-xl-14{padding-inline-start:56px!important}.ps-xl-15{padding-inline-start:60px!important}.ps-xl-16{padding-inline-start:64px!important}.pe-xl-0{padding-inline-end:0px!important}.pe-xl-1{padding-inline-end:4px!important}.pe-xl-2{padding-inline-end:8px!important}.pe-xl-3{padding-inline-end:12px!important}.pe-xl-4{padding-inline-end:16px!important}.pe-xl-5{padding-inline-end:20px!important}.pe-xl-6{padding-inline-end:24px!important}.pe-xl-7{padding-inline-end:28px!important}.pe-xl-8{padding-inline-end:32px!important}.pe-xl-9{padding-inline-end:36px!important}.pe-xl-10{padding-inline-end:40px!important}.pe-xl-11{padding-inline-end:44px!important}.pe-xl-12{padding-inline-end:48px!important}.pe-xl-13{padding-inline-end:52px!important}.pe-xl-14{padding-inline-end:56px!important}.pe-xl-15{padding-inline-end:60px!important}.pe-xl-16{padding-inline-end:64px!important}.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}.text-xl-justify{text-align:justify!important}.text-xl-start{text-align:start!important}.text-xl-end{text-align:end!important}.text-xl-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-xl-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-xl-auto{height:auto!important}.h-xl-screen{height:100vh!important}.h-xl-0{height:0!important}.h-xl-25{height:25%!important}.h-xl-50{height:50%!important}.h-xl-75{height:75%!important}.h-xl-100{height:100%!important}.w-xl-auto{width:auto!important}.w-xl-0{width:0!important}.w-xl-25{width:25%!important}.w-xl-33{width:33%!important}.w-xl-50{width:50%!important}.w-xl-66{width:66%!important}.w-xl-75{width:75%!important}.w-xl-100{width:100%!important}}@media (min-width: 2560px){.d-xxl-none{display:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!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}.float-xxl-none{float:none!important}.float-xxl-left{float:left!important}.float-xxl-right{float:right!important}.v-locale--is-rtl .float-xxl-end{float:left!important}.v-locale--is-rtl .float-xxl-start,.v-locale--is-ltr .float-xxl-end{float:right!important}.v-locale--is-ltr .float-xxl-start{float:left!important}.flex-xxl-fill,.flex-xxl-1-1{flex:1 1 auto!important}.flex-xxl-1-0{flex:1 0 auto!important}.flex-xxl-0-1{flex:0 1 auto!important}.flex-xxl-0-0{flex:0 0 auto!important}.flex-xxl-1-1-100{flex:1 1 100%!important}.flex-xxl-1-0-100{flex:1 0 100%!important}.flex-xxl-0-1-100{flex:0 1 100%!important}.flex-xxl-0-0-100{flex:0 0 100%!important}.flex-xxl-1-1-0{flex:1 1 0!important}.flex-xxl-1-0-0{flex:1 0 0!important}.flex-xxl-0-1-0{flex:0 1 0!important}.flex-xxl-0-0-0{flex:0 0 0!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-xxl-start{justify-content:flex-start!important}.justify-xxl-end{justify-content:flex-end!important}.justify-xxl-center{justify-content:center!important}.justify-xxl-space-between{justify-content:space-between!important}.justify-xxl-space-around{justify-content:space-around!important}.justify-xxl-space-evenly{justify-content:space-evenly!important}.align-xxl-start{align-items:flex-start!important}.align-xxl-end{align-items:flex-end!important}.align-xxl-center{align-items:center!important}.align-xxl-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-xxl-space-around{align-content:space-around!important}.align-content-xxl-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-xxl-7{order:7!important}.order-xxl-8{order:8!important}.order-xxl-9{order:9!important}.order-xxl-10{order:10!important}.order-xxl-11{order:11!important}.order-xxl-12{order:12!important}.order-xxl-last{order:13!important}.ga-xxl-0{gap:0px!important}.ga-xxl-1{gap:4px!important}.ga-xxl-2{gap:8px!important}.ga-xxl-3{gap:12px!important}.ga-xxl-4{gap:16px!important}.ga-xxl-5{gap:20px!important}.ga-xxl-6{gap:24px!important}.ga-xxl-7{gap:28px!important}.ga-xxl-8{gap:32px!important}.ga-xxl-9{gap:36px!important}.ga-xxl-10{gap:40px!important}.ga-xxl-11{gap:44px!important}.ga-xxl-12{gap:48px!important}.ga-xxl-13{gap:52px!important}.ga-xxl-14{gap:56px!important}.ga-xxl-15{gap:60px!important}.ga-xxl-16{gap:64px!important}.ga-xxl-auto{gap:auto!important}.gr-xxl-0{row-gap:0px!important}.gr-xxl-1{row-gap:4px!important}.gr-xxl-2{row-gap:8px!important}.gr-xxl-3{row-gap:12px!important}.gr-xxl-4{row-gap:16px!important}.gr-xxl-5{row-gap:20px!important}.gr-xxl-6{row-gap:24px!important}.gr-xxl-7{row-gap:28px!important}.gr-xxl-8{row-gap:32px!important}.gr-xxl-9{row-gap:36px!important}.gr-xxl-10{row-gap:40px!important}.gr-xxl-11{row-gap:44px!important}.gr-xxl-12{row-gap:48px!important}.gr-xxl-13{row-gap:52px!important}.gr-xxl-14{row-gap:56px!important}.gr-xxl-15{row-gap:60px!important}.gr-xxl-16{row-gap:64px!important}.gr-xxl-auto{row-gap:auto!important}.gc-xxl-0{column-gap:0px!important}.gc-xxl-1{column-gap:4px!important}.gc-xxl-2{column-gap:8px!important}.gc-xxl-3{column-gap:12px!important}.gc-xxl-4{column-gap:16px!important}.gc-xxl-5{column-gap:20px!important}.gc-xxl-6{column-gap:24px!important}.gc-xxl-7{column-gap:28px!important}.gc-xxl-8{column-gap:32px!important}.gc-xxl-9{column-gap:36px!important}.gc-xxl-10{column-gap:40px!important}.gc-xxl-11{column-gap:44px!important}.gc-xxl-12{column-gap:48px!important}.gc-xxl-13{column-gap:52px!important}.gc-xxl-14{column-gap:56px!important}.gc-xxl-15{column-gap:60px!important}.gc-xxl-16{column-gap:64px!important}.gc-xxl-auto{column-gap:auto!important}.ma-xxl-0{margin:0!important}.ma-xxl-1{margin:4px!important}.ma-xxl-2{margin:8px!important}.ma-xxl-3{margin:12px!important}.ma-xxl-4{margin:16px!important}.ma-xxl-5{margin:20px!important}.ma-xxl-6{margin:24px!important}.ma-xxl-7{margin:28px!important}.ma-xxl-8{margin:32px!important}.ma-xxl-9{margin:36px!important}.ma-xxl-10{margin:40px!important}.ma-xxl-11{margin:44px!important}.ma-xxl-12{margin:48px!important}.ma-xxl-13{margin:52px!important}.ma-xxl-14{margin:56px!important}.ma-xxl-15{margin:60px!important}.ma-xxl-16{margin:64px!important}.ma-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:4px!important;margin-left:4px!important}.mx-xxl-2{margin-right:8px!important;margin-left:8px!important}.mx-xxl-3{margin-right:12px!important;margin-left:12px!important}.mx-xxl-4{margin-right:16px!important;margin-left:16px!important}.mx-xxl-5{margin-right:20px!important;margin-left:20px!important}.mx-xxl-6{margin-right:24px!important;margin-left:24px!important}.mx-xxl-7{margin-right:28px!important;margin-left:28px!important}.mx-xxl-8{margin-right:32px!important;margin-left:32px!important}.mx-xxl-9{margin-right:36px!important;margin-left:36px!important}.mx-xxl-10{margin-right:40px!important;margin-left:40px!important}.mx-xxl-11{margin-right:44px!important;margin-left:44px!important}.mx-xxl-12{margin-right:48px!important;margin-left:48px!important}.mx-xxl-13{margin-right:52px!important;margin-left:52px!important}.mx-xxl-14{margin-right:56px!important;margin-left:56px!important}.mx-xxl-15{margin-right:60px!important;margin-left:60px!important}.mx-xxl-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-xxl-2{margin-top:8px!important;margin-bottom:8px!important}.my-xxl-3{margin-top:12px!important;margin-bottom:12px!important}.my-xxl-4{margin-top:16px!important;margin-bottom:16px!important}.my-xxl-5{margin-top:20px!important;margin-bottom:20px!important}.my-xxl-6{margin-top:24px!important;margin-bottom:24px!important}.my-xxl-7{margin-top:28px!important;margin-bottom:28px!important}.my-xxl-8{margin-top:32px!important;margin-bottom:32px!important}.my-xxl-9{margin-top:36px!important;margin-bottom:36px!important}.my-xxl-10{margin-top:40px!important;margin-bottom:40px!important}.my-xxl-11{margin-top:44px!important;margin-bottom:44px!important}.my-xxl-12{margin-top:48px!important;margin-bottom:48px!important}.my-xxl-13{margin-top:52px!important;margin-bottom:52px!important}.my-xxl-14{margin-top:56px!important;margin-bottom:56px!important}.my-xxl-15{margin-top:60px!important;margin-bottom:60px!important}.my-xxl-16{margin-top:64px!important;margin-bottom:64px!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:4px!important}.mt-xxl-2{margin-top:8px!important}.mt-xxl-3{margin-top:12px!important}.mt-xxl-4{margin-top:16px!important}.mt-xxl-5{margin-top:20px!important}.mt-xxl-6{margin-top:24px!important}.mt-xxl-7{margin-top:28px!important}.mt-xxl-8{margin-top:32px!important}.mt-xxl-9{margin-top:36px!important}.mt-xxl-10{margin-top:40px!important}.mt-xxl-11{margin-top:44px!important}.mt-xxl-12{margin-top:48px!important}.mt-xxl-13{margin-top:52px!important}.mt-xxl-14{margin-top:56px!important}.mt-xxl-15{margin-top:60px!important}.mt-xxl-16{margin-top:64px!important}.mt-xxl-auto{margin-top:auto!important}.mr-xxl-0{margin-right:0!important}.mr-xxl-1{margin-right:4px!important}.mr-xxl-2{margin-right:8px!important}.mr-xxl-3{margin-right:12px!important}.mr-xxl-4{margin-right:16px!important}.mr-xxl-5{margin-right:20px!important}.mr-xxl-6{margin-right:24px!important}.mr-xxl-7{margin-right:28px!important}.mr-xxl-8{margin-right:32px!important}.mr-xxl-9{margin-right:36px!important}.mr-xxl-10{margin-right:40px!important}.mr-xxl-11{margin-right:44px!important}.mr-xxl-12{margin-right:48px!important}.mr-xxl-13{margin-right:52px!important}.mr-xxl-14{margin-right:56px!important}.mr-xxl-15{margin-right:60px!important}.mr-xxl-16{margin-right:64px!important}.mr-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:4px!important}.mb-xxl-2{margin-bottom:8px!important}.mb-xxl-3{margin-bottom:12px!important}.mb-xxl-4{margin-bottom:16px!important}.mb-xxl-5{margin-bottom:20px!important}.mb-xxl-6{margin-bottom:24px!important}.mb-xxl-7{margin-bottom:28px!important}.mb-xxl-8{margin-bottom:32px!important}.mb-xxl-9{margin-bottom:36px!important}.mb-xxl-10{margin-bottom:40px!important}.mb-xxl-11{margin-bottom:44px!important}.mb-xxl-12{margin-bottom:48px!important}.mb-xxl-13{margin-bottom:52px!important}.mb-xxl-14{margin-bottom:56px!important}.mb-xxl-15{margin-bottom:60px!important}.mb-xxl-16{margin-bottom:64px!important}.mb-xxl-auto{margin-bottom:auto!important}.ml-xxl-0{margin-left:0!important}.ml-xxl-1{margin-left:4px!important}.ml-xxl-2{margin-left:8px!important}.ml-xxl-3{margin-left:12px!important}.ml-xxl-4{margin-left:16px!important}.ml-xxl-5{margin-left:20px!important}.ml-xxl-6{margin-left:24px!important}.ml-xxl-7{margin-left:28px!important}.ml-xxl-8{margin-left:32px!important}.ml-xxl-9{margin-left:36px!important}.ml-xxl-10{margin-left:40px!important}.ml-xxl-11{margin-left:44px!important}.ml-xxl-12{margin-left:48px!important}.ml-xxl-13{margin-left:52px!important}.ml-xxl-14{margin-left:56px!important}.ml-xxl-15{margin-left:60px!important}.ml-xxl-16{margin-left:64px!important}.ml-xxl-auto{margin-left:auto!important}.ms-xxl-0{margin-inline-start:0px!important}.ms-xxl-1{margin-inline-start:4px!important}.ms-xxl-2{margin-inline-start:8px!important}.ms-xxl-3{margin-inline-start:12px!important}.ms-xxl-4{margin-inline-start:16px!important}.ms-xxl-5{margin-inline-start:20px!important}.ms-xxl-6{margin-inline-start:24px!important}.ms-xxl-7{margin-inline-start:28px!important}.ms-xxl-8{margin-inline-start:32px!important}.ms-xxl-9{margin-inline-start:36px!important}.ms-xxl-10{margin-inline-start:40px!important}.ms-xxl-11{margin-inline-start:44px!important}.ms-xxl-12{margin-inline-start:48px!important}.ms-xxl-13{margin-inline-start:52px!important}.ms-xxl-14{margin-inline-start:56px!important}.ms-xxl-15{margin-inline-start:60px!important}.ms-xxl-16{margin-inline-start:64px!important}.ms-xxl-auto{margin-inline-start:auto!important}.me-xxl-0{margin-inline-end:0px!important}.me-xxl-1{margin-inline-end:4px!important}.me-xxl-2{margin-inline-end:8px!important}.me-xxl-3{margin-inline-end:12px!important}.me-xxl-4{margin-inline-end:16px!important}.me-xxl-5{margin-inline-end:20px!important}.me-xxl-6{margin-inline-end:24px!important}.me-xxl-7{margin-inline-end:28px!important}.me-xxl-8{margin-inline-end:32px!important}.me-xxl-9{margin-inline-end:36px!important}.me-xxl-10{margin-inline-end:40px!important}.me-xxl-11{margin-inline-end:44px!important}.me-xxl-12{margin-inline-end:48px!important}.me-xxl-13{margin-inline-end:52px!important}.me-xxl-14{margin-inline-end:56px!important}.me-xxl-15{margin-inline-end:60px!important}.me-xxl-16{margin-inline-end:64px!important}.me-xxl-auto{margin-inline-end:auto!important}.ma-xxl-n1{margin:-4px!important}.ma-xxl-n2{margin:-8px!important}.ma-xxl-n3{margin:-12px!important}.ma-xxl-n4{margin:-16px!important}.ma-xxl-n5{margin:-20px!important}.ma-xxl-n6{margin:-24px!important}.ma-xxl-n7{margin:-28px!important}.ma-xxl-n8{margin:-32px!important}.ma-xxl-n9{margin:-36px!important}.ma-xxl-n10{margin:-40px!important}.ma-xxl-n11{margin:-44px!important}.ma-xxl-n12{margin:-48px!important}.ma-xxl-n13{margin:-52px!important}.ma-xxl-n14{margin:-56px!important}.ma-xxl-n15{margin:-60px!important}.ma-xxl-n16{margin:-64px!important}.mx-xxl-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-xxl-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-xxl-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-xxl-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-xxl-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-xxl-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-xxl-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-xxl-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-xxl-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-xxl-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-xxl-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-xxl-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-xxl-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-xxl-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-xxl-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-xxl-n16{margin-right:-64px!important;margin-left:-64px!important}.my-xxl-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-xxl-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-xxl-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-xxl-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-xxl-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-xxl-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-xxl-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-xxl-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-xxl-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-xxl-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-xxl-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-xxl-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-xxl-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-xxl-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-xxl-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-xxl-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-xxl-n1{margin-top:-4px!important}.mt-xxl-n2{margin-top:-8px!important}.mt-xxl-n3{margin-top:-12px!important}.mt-xxl-n4{margin-top:-16px!important}.mt-xxl-n5{margin-top:-20px!important}.mt-xxl-n6{margin-top:-24px!important}.mt-xxl-n7{margin-top:-28px!important}.mt-xxl-n8{margin-top:-32px!important}.mt-xxl-n9{margin-top:-36px!important}.mt-xxl-n10{margin-top:-40px!important}.mt-xxl-n11{margin-top:-44px!important}.mt-xxl-n12{margin-top:-48px!important}.mt-xxl-n13{margin-top:-52px!important}.mt-xxl-n14{margin-top:-56px!important}.mt-xxl-n15{margin-top:-60px!important}.mt-xxl-n16{margin-top:-64px!important}.mr-xxl-n1{margin-right:-4px!important}.mr-xxl-n2{margin-right:-8px!important}.mr-xxl-n3{margin-right:-12px!important}.mr-xxl-n4{margin-right:-16px!important}.mr-xxl-n5{margin-right:-20px!important}.mr-xxl-n6{margin-right:-24px!important}.mr-xxl-n7{margin-right:-28px!important}.mr-xxl-n8{margin-right:-32px!important}.mr-xxl-n9{margin-right:-36px!important}.mr-xxl-n10{margin-right:-40px!important}.mr-xxl-n11{margin-right:-44px!important}.mr-xxl-n12{margin-right:-48px!important}.mr-xxl-n13{margin-right:-52px!important}.mr-xxl-n14{margin-right:-56px!important}.mr-xxl-n15{margin-right:-60px!important}.mr-xxl-n16{margin-right:-64px!important}.mb-xxl-n1{margin-bottom:-4px!important}.mb-xxl-n2{margin-bottom:-8px!important}.mb-xxl-n3{margin-bottom:-12px!important}.mb-xxl-n4{margin-bottom:-16px!important}.mb-xxl-n5{margin-bottom:-20px!important}.mb-xxl-n6{margin-bottom:-24px!important}.mb-xxl-n7{margin-bottom:-28px!important}.mb-xxl-n8{margin-bottom:-32px!important}.mb-xxl-n9{margin-bottom:-36px!important}.mb-xxl-n10{margin-bottom:-40px!important}.mb-xxl-n11{margin-bottom:-44px!important}.mb-xxl-n12{margin-bottom:-48px!important}.mb-xxl-n13{margin-bottom:-52px!important}.mb-xxl-n14{margin-bottom:-56px!important}.mb-xxl-n15{margin-bottom:-60px!important}.mb-xxl-n16{margin-bottom:-64px!important}.ml-xxl-n1{margin-left:-4px!important}.ml-xxl-n2{margin-left:-8px!important}.ml-xxl-n3{margin-left:-12px!important}.ml-xxl-n4{margin-left:-16px!important}.ml-xxl-n5{margin-left:-20px!important}.ml-xxl-n6{margin-left:-24px!important}.ml-xxl-n7{margin-left:-28px!important}.ml-xxl-n8{margin-left:-32px!important}.ml-xxl-n9{margin-left:-36px!important}.ml-xxl-n10{margin-left:-40px!important}.ml-xxl-n11{margin-left:-44px!important}.ml-xxl-n12{margin-left:-48px!important}.ml-xxl-n13{margin-left:-52px!important}.ml-xxl-n14{margin-left:-56px!important}.ml-xxl-n15{margin-left:-60px!important}.ml-xxl-n16{margin-left:-64px!important}.ms-xxl-n1{margin-inline-start:-4px!important}.ms-xxl-n2{margin-inline-start:-8px!important}.ms-xxl-n3{margin-inline-start:-12px!important}.ms-xxl-n4{margin-inline-start:-16px!important}.ms-xxl-n5{margin-inline-start:-20px!important}.ms-xxl-n6{margin-inline-start:-24px!important}.ms-xxl-n7{margin-inline-start:-28px!important}.ms-xxl-n8{margin-inline-start:-32px!important}.ms-xxl-n9{margin-inline-start:-36px!important}.ms-xxl-n10{margin-inline-start:-40px!important}.ms-xxl-n11{margin-inline-start:-44px!important}.ms-xxl-n12{margin-inline-start:-48px!important}.ms-xxl-n13{margin-inline-start:-52px!important}.ms-xxl-n14{margin-inline-start:-56px!important}.ms-xxl-n15{margin-inline-start:-60px!important}.ms-xxl-n16{margin-inline-start:-64px!important}.me-xxl-n1{margin-inline-end:-4px!important}.me-xxl-n2{margin-inline-end:-8px!important}.me-xxl-n3{margin-inline-end:-12px!important}.me-xxl-n4{margin-inline-end:-16px!important}.me-xxl-n5{margin-inline-end:-20px!important}.me-xxl-n6{margin-inline-end:-24px!important}.me-xxl-n7{margin-inline-end:-28px!important}.me-xxl-n8{margin-inline-end:-32px!important}.me-xxl-n9{margin-inline-end:-36px!important}.me-xxl-n10{margin-inline-end:-40px!important}.me-xxl-n11{margin-inline-end:-44px!important}.me-xxl-n12{margin-inline-end:-48px!important}.me-xxl-n13{margin-inline-end:-52px!important}.me-xxl-n14{margin-inline-end:-56px!important}.me-xxl-n15{margin-inline-end:-60px!important}.me-xxl-n16{margin-inline-end:-64px!important}.pa-xxl-0{padding:0!important}.pa-xxl-1{padding:4px!important}.pa-xxl-2{padding:8px!important}.pa-xxl-3{padding:12px!important}.pa-xxl-4{padding:16px!important}.pa-xxl-5{padding:20px!important}.pa-xxl-6{padding:24px!important}.pa-xxl-7{padding:28px!important}.pa-xxl-8{padding:32px!important}.pa-xxl-9{padding:36px!important}.pa-xxl-10{padding:40px!important}.pa-xxl-11{padding:44px!important}.pa-xxl-12{padding:48px!important}.pa-xxl-13{padding:52px!important}.pa-xxl-14{padding:56px!important}.pa-xxl-15{padding:60px!important}.pa-xxl-16{padding:64px!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:4px!important;padding-left:4px!important}.px-xxl-2{padding-right:8px!important;padding-left:8px!important}.px-xxl-3{padding-right:12px!important;padding-left:12px!important}.px-xxl-4{padding-right:16px!important;padding-left:16px!important}.px-xxl-5{padding-right:20px!important;padding-left:20px!important}.px-xxl-6{padding-right:24px!important;padding-left:24px!important}.px-xxl-7{padding-right:28px!important;padding-left:28px!important}.px-xxl-8{padding-right:32px!important;padding-left:32px!important}.px-xxl-9{padding-right:36px!important;padding-left:36px!important}.px-xxl-10{padding-right:40px!important;padding-left:40px!important}.px-xxl-11{padding-right:44px!important;padding-left:44px!important}.px-xxl-12{padding-right:48px!important;padding-left:48px!important}.px-xxl-13{padding-right:52px!important;padding-left:52px!important}.px-xxl-14{padding-right:56px!important;padding-left:56px!important}.px-xxl-15{padding-right:60px!important;padding-left:60px!important}.px-xxl-16{padding-right:64px!important;padding-left:64px!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:4px!important;padding-bottom:4px!important}.py-xxl-2{padding-top:8px!important;padding-bottom:8px!important}.py-xxl-3{padding-top:12px!important;padding-bottom:12px!important}.py-xxl-4{padding-top:16px!important;padding-bottom:16px!important}.py-xxl-5{padding-top:20px!important;padding-bottom:20px!important}.py-xxl-6{padding-top:24px!important;padding-bottom:24px!important}.py-xxl-7{padding-top:28px!important;padding-bottom:28px!important}.py-xxl-8{padding-top:32px!important;padding-bottom:32px!important}.py-xxl-9{padding-top:36px!important;padding-bottom:36px!important}.py-xxl-10{padding-top:40px!important;padding-bottom:40px!important}.py-xxl-11{padding-top:44px!important;padding-bottom:44px!important}.py-xxl-12{padding-top:48px!important;padding-bottom:48px!important}.py-xxl-13{padding-top:52px!important;padding-bottom:52px!important}.py-xxl-14{padding-top:56px!important;padding-bottom:56px!important}.py-xxl-15{padding-top:60px!important;padding-bottom:60px!important}.py-xxl-16{padding-top:64px!important;padding-bottom:64px!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:4px!important}.pt-xxl-2{padding-top:8px!important}.pt-xxl-3{padding-top:12px!important}.pt-xxl-4{padding-top:16px!important}.pt-xxl-5{padding-top:20px!important}.pt-xxl-6{padding-top:24px!important}.pt-xxl-7{padding-top:28px!important}.pt-xxl-8{padding-top:32px!important}.pt-xxl-9{padding-top:36px!important}.pt-xxl-10{padding-top:40px!important}.pt-xxl-11{padding-top:44px!important}.pt-xxl-12{padding-top:48px!important}.pt-xxl-13{padding-top:52px!important}.pt-xxl-14{padding-top:56px!important}.pt-xxl-15{padding-top:60px!important}.pt-xxl-16{padding-top:64px!important}.pr-xxl-0{padding-right:0!important}.pr-xxl-1{padding-right:4px!important}.pr-xxl-2{padding-right:8px!important}.pr-xxl-3{padding-right:12px!important}.pr-xxl-4{padding-right:16px!important}.pr-xxl-5{padding-right:20px!important}.pr-xxl-6{padding-right:24px!important}.pr-xxl-7{padding-right:28px!important}.pr-xxl-8{padding-right:32px!important}.pr-xxl-9{padding-right:36px!important}.pr-xxl-10{padding-right:40px!important}.pr-xxl-11{padding-right:44px!important}.pr-xxl-12{padding-right:48px!important}.pr-xxl-13{padding-right:52px!important}.pr-xxl-14{padding-right:56px!important}.pr-xxl-15{padding-right:60px!important}.pr-xxl-16{padding-right:64px!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:4px!important}.pb-xxl-2{padding-bottom:8px!important}.pb-xxl-3{padding-bottom:12px!important}.pb-xxl-4{padding-bottom:16px!important}.pb-xxl-5{padding-bottom:20px!important}.pb-xxl-6{padding-bottom:24px!important}.pb-xxl-7{padding-bottom:28px!important}.pb-xxl-8{padding-bottom:32px!important}.pb-xxl-9{padding-bottom:36px!important}.pb-xxl-10{padding-bottom:40px!important}.pb-xxl-11{padding-bottom:44px!important}.pb-xxl-12{padding-bottom:48px!important}.pb-xxl-13{padding-bottom:52px!important}.pb-xxl-14{padding-bottom:56px!important}.pb-xxl-15{padding-bottom:60px!important}.pb-xxl-16{padding-bottom:64px!important}.pl-xxl-0{padding-left:0!important}.pl-xxl-1{padding-left:4px!important}.pl-xxl-2{padding-left:8px!important}.pl-xxl-3{padding-left:12px!important}.pl-xxl-4{padding-left:16px!important}.pl-xxl-5{padding-left:20px!important}.pl-xxl-6{padding-left:24px!important}.pl-xxl-7{padding-left:28px!important}.pl-xxl-8{padding-left:32px!important}.pl-xxl-9{padding-left:36px!important}.pl-xxl-10{padding-left:40px!important}.pl-xxl-11{padding-left:44px!important}.pl-xxl-12{padding-left:48px!important}.pl-xxl-13{padding-left:52px!important}.pl-xxl-14{padding-left:56px!important}.pl-xxl-15{padding-left:60px!important}.pl-xxl-16{padding-left:64px!important}.ps-xxl-0{padding-inline-start:0px!important}.ps-xxl-1{padding-inline-start:4px!important}.ps-xxl-2{padding-inline-start:8px!important}.ps-xxl-3{padding-inline-start:12px!important}.ps-xxl-4{padding-inline-start:16px!important}.ps-xxl-5{padding-inline-start:20px!important}.ps-xxl-6{padding-inline-start:24px!important}.ps-xxl-7{padding-inline-start:28px!important}.ps-xxl-8{padding-inline-start:32px!important}.ps-xxl-9{padding-inline-start:36px!important}.ps-xxl-10{padding-inline-start:40px!important}.ps-xxl-11{padding-inline-start:44px!important}.ps-xxl-12{padding-inline-start:48px!important}.ps-xxl-13{padding-inline-start:52px!important}.ps-xxl-14{padding-inline-start:56px!important}.ps-xxl-15{padding-inline-start:60px!important}.ps-xxl-16{padding-inline-start:64px!important}.pe-xxl-0{padding-inline-end:0px!important}.pe-xxl-1{padding-inline-end:4px!important}.pe-xxl-2{padding-inline-end:8px!important}.pe-xxl-3{padding-inline-end:12px!important}.pe-xxl-4{padding-inline-end:16px!important}.pe-xxl-5{padding-inline-end:20px!important}.pe-xxl-6{padding-inline-end:24px!important}.pe-xxl-7{padding-inline-end:28px!important}.pe-xxl-8{padding-inline-end:32px!important}.pe-xxl-9{padding-inline-end:36px!important}.pe-xxl-10{padding-inline-end:40px!important}.pe-xxl-11{padding-inline-end:44px!important}.pe-xxl-12{padding-inline-end:48px!important}.pe-xxl-13{padding-inline-end:52px!important}.pe-xxl-14{padding-inline-end:56px!important}.pe-xxl-15{padding-inline-end:60px!important}.pe-xxl-16{padding-inline-end:64px!important}.text-xxl-left{text-align:left!important}.text-xxl-right{text-align:right!important}.text-xxl-center{text-align:center!important}.text-xxl-justify{text-align:justify!important}.text-xxl-start{text-align:start!important}.text-xxl-end{text-align:end!important}.text-xxl-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-xxl-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-xxl-auto{height:auto!important}.h-xxl-screen{height:100vh!important}.h-xxl-0{height:0!important}.h-xxl-25{height:25%!important}.h-xxl-50{height:50%!important}.h-xxl-75{height:75%!important}.h-xxl-100{height:100%!important}.w-xxl-auto{width:auto!important}.w-xxl-0{width:0!important}.w-xxl-25{width:25%!important}.w-xxl-33{width:33%!important}.w-xxl-50{width:50%!important}.w-xxl-66{width:66%!important}.w-xxl-75{width:75%!important}.w-xxl-100{width:100%!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!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}.float-print-none{float:none!important}.float-print-left{float:left!important}.float-print-right{float:right!important}.v-locale--is-rtl .float-print-end{float:left!important}.v-locale--is-rtl .float-print-start,.v-locale--is-ltr .float-print-end{float:right!important}.v-locale--is-ltr .float-print-start{float:left!important}}@font-face{font-family:Material Design Icons;src:url(/docs/assets/materialdesignicons-webfont.CSr8KVlo.eot?v=7.4.47);src:url(/docs/assets/materialdesignicons-webfont.CSr8KVlo.eot?#iefix&v=7.4.47) format("embedded-opentype"),url(/docs/assets/materialdesignicons-webfont.Dp5v-WZN.woff2?v=7.4.47) format("woff2"),url(/docs/assets/materialdesignicons-webfont.PXm3-2wK.woff?v=7.4.47) format("woff"),url(/docs/assets/materialdesignicons-webfont.B7mPwVP_.ttf?v=7.4.47) format("truetype");font-weight:400;font-style:normal}.mdi:before,.mdi-set{display:inline-block;font: 24px/1 Material Design Icons;font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-ab-testing:before{content:"󰇉"}.mdi-abacus:before{content:"󱛠"}.mdi-abjad-arabic:before{content:"󱌨"}.mdi-abjad-hebrew:before{content:"󱌩"}.mdi-abugida-devanagari:before{content:"󱌪"}.mdi-abugida-thai:before{content:"󱌫"}.mdi-access-point:before{content:"󰀃"}.mdi-access-point-check:before{content:"󱔸"}.mdi-access-point-minus:before{content:"󱔹"}.mdi-access-point-network:before{content:"󰀂"}.mdi-access-point-network-off:before{content:"󰯡"}.mdi-access-point-off:before{content:"󱔑"}.mdi-access-point-plus:before{content:"󱔺"}.mdi-access-point-remove:before{content:"󱔻"}.mdi-account:before{content:"󰀄"}.mdi-account-alert:before{content:"󰀅"}.mdi-account-alert-outline:before{content:"󰭐"}.mdi-account-arrow-down:before{content:"󱡨"}.mdi-account-arrow-down-outline:before{content:"󱡩"}.mdi-account-arrow-left:before{content:"󰭑"}.mdi-account-arrow-left-outline:before{content:"󰭒"}.mdi-account-arrow-right:before{content:"󰭓"}.mdi-account-arrow-right-outline:before{content:"󰭔"}.mdi-account-arrow-up:before{content:"󱡧"}.mdi-account-arrow-up-outline:before{content:"󱡪"}.mdi-account-badge:before{content:"󱬊"}.mdi-account-badge-outline:before{content:"󱬋"}.mdi-account-box:before{content:"󰀆"}.mdi-account-box-edit-outline:before{content:"󱳈"}.mdi-account-box-minus-outline:before{content:"󱳉"}.mdi-account-box-multiple:before{content:"󰤴"}.mdi-account-box-multiple-outline:before{content:"󱀊"}.mdi-account-box-outline:before{content:"󰀇"}.mdi-account-box-plus-outline:before{content:"󱳊"}.mdi-account-cancel:before{content:"󱋟"}.mdi-account-cancel-outline:before{content:"󱋠"}.mdi-account-card:before{content:"󱮤"}.mdi-account-card-outline:before{content:"󱮥"}.mdi-account-cash:before{content:"󱂗"}.mdi-account-cash-outline:before{content:"󱂘"}.mdi-account-check:before{content:"󰀈"}.mdi-account-check-outline:before{content:"󰯢"}.mdi-account-child:before{content:"󰪉"}.mdi-account-child-circle:before{content:"󰪊"}.mdi-account-child-outline:before{content:"󱃈"}.mdi-account-circle:before{content:"󰀉"}.mdi-account-circle-outline:before{content:"󰭕"}.mdi-account-clock:before{content:"󰭖"}.mdi-account-clock-outline:before{content:"󰭗"}.mdi-account-cog:before{content:"󱍰"}.mdi-account-cog-outline:before{content:"󱍱"}.mdi-account-convert:before{content:"󰀊"}.mdi-account-convert-outline:before{content:"󱌁"}.mdi-account-cowboy-hat:before{content:"󰺛"}.mdi-account-cowboy-hat-outline:before{content:"󱟳"}.mdi-account-credit-card:before{content:"󱮦"}.mdi-account-credit-card-outline:before{content:"󱮧"}.mdi-account-details:before{content:"󰘱"}.mdi-account-details-outline:before{content:"󱍲"}.mdi-account-edit:before{content:"󰚼"}.mdi-account-edit-outline:before{content:"󰿻"}.mdi-account-eye:before{content:"󰐠"}.mdi-account-eye-outline:before{content:"󱉻"}.mdi-account-file:before{content:"󱲧"}.mdi-account-file-outline:before{content:"󱲨"}.mdi-account-file-text:before{content:"󱲩"}.mdi-account-file-text-outline:before{content:"󱲪"}.mdi-account-filter:before{content:"󰤶"}.mdi-account-filter-outline:before{content:"󰾝"}.mdi-account-group:before{content:"󰡉"}.mdi-account-group-outline:before{content:"󰭘"}.mdi-account-hard-hat:before{content:"󰖵"}.mdi-account-hard-hat-outline:before{content:"󱨟"}.mdi-account-heart:before{content:"󰢙"}.mdi-account-heart-outline:before{content:"󰯣"}.mdi-account-injury:before{content:"󱠕"}.mdi-account-injury-outline:before{content:"󱠖"}.mdi-account-key:before{content:"󰀋"}.mdi-account-key-outline:before{content:"󰯤"}.mdi-account-lock:before{content:"󱅞"}.mdi-account-lock-open:before{content:"󱥠"}.mdi-account-lock-open-outline:before{content:"󱥡"}.mdi-account-lock-outline:before{content:"󱅟"}.mdi-account-minus:before{content:"󰀍"}.mdi-account-minus-outline:before{content:"󰫬"}.mdi-account-multiple:before{content:"󰀎"}.mdi-account-multiple-check:before{content:"󰣅"}.mdi-account-multiple-check-outline:before{content:"󱇾"}.mdi-account-multiple-minus:before{content:"󰗓"}.mdi-account-multiple-minus-outline:before{content:"󰯥"}.mdi-account-multiple-outline:before{content:"󰀏"}.mdi-account-multiple-plus:before{content:"󰀐"}.mdi-account-multiple-plus-outline:before{content:"󰠀"}.mdi-account-multiple-remove:before{content:"󱈊"}.mdi-account-multiple-remove-outline:before{content:"󱈋"}.mdi-account-music:before{content:"󰠃"}.mdi-account-music-outline:before{content:"󰳩"}.mdi-account-network:before{content:"󰀑"}.mdi-account-network-off:before{content:"󱫱"}.mdi-account-network-off-outline:before{content:"󱫲"}.mdi-account-network-outline:before{content:"󰯦"}.mdi-account-off:before{content:"󰀒"}.mdi-account-off-outline:before{content:"󰯧"}.mdi-account-outline:before{content:"󰀓"}.mdi-account-plus:before{content:"󰀔"}.mdi-account-plus-outline:before{content:"󰠁"}.mdi-account-question:before{content:"󰭙"}.mdi-account-question-outline:before{content:"󰭚"}.mdi-account-reactivate:before{content:"󱔫"}.mdi-account-reactivate-outline:before{content:"󱔬"}.mdi-account-remove:before{content:"󰀕"}.mdi-account-remove-outline:before{content:"󰫭"}.mdi-account-school:before{content:"󱨠"}.mdi-account-school-outline:before{content:"󱨡"}.mdi-account-search:before{content:"󰀖"}.mdi-account-search-outline:before{content:"󰤵"}.mdi-account-settings:before{content:"󰘰"}.mdi-account-settings-outline:before{content:"󱃉"}.mdi-account-star:before{content:"󰀗"}.mdi-account-star-outline:before{content:"󰯨"}.mdi-account-supervisor:before{content:"󰪋"}.mdi-account-supervisor-circle:before{content:"󰪌"}.mdi-account-supervisor-circle-outline:before{content:"󱓬"}.mdi-account-supervisor-outline:before{content:"󱄭"}.mdi-account-switch:before{content:"󰀙"}.mdi-account-switch-outline:before{content:"󰓋"}.mdi-account-sync:before{content:"󱤛"}.mdi-account-sync-outline:before{content:"󱤜"}.mdi-account-tag:before{content:"󱰛"}.mdi-account-tag-outline:before{content:"󱰜"}.mdi-account-tie:before{content:"󰳣"}.mdi-account-tie-hat:before{content:"󱢘"}.mdi-account-tie-hat-outline:before{content:"󱢙"}.mdi-account-tie-outline:before{content:"󱃊"}.mdi-account-tie-voice:before{content:"󱌈"}.mdi-account-tie-voice-off:before{content:"󱌊"}.mdi-account-tie-voice-off-outline:before{content:"󱌋"}.mdi-account-tie-voice-outline:before{content:"󱌉"}.mdi-account-tie-woman:before{content:"󱪌"}.mdi-account-voice:before{content:"󰗋"}.mdi-account-voice-off:before{content:"󰻔"}.mdi-account-wrench:before{content:"󱢚"}.mdi-account-wrench-outline:before{content:"󱢛"}.mdi-adjust:before{content:"󰀚"}.mdi-advertisements:before{content:"󱤪"}.mdi-advertisements-off:before{content:"󱤫"}.mdi-air-conditioner:before{content:"󰀛"}.mdi-air-filter:before{content:"󰵃"}.mdi-air-horn:before{content:"󰶬"}.mdi-air-humidifier:before{content:"󱂙"}.mdi-air-humidifier-off:before{content:"󱑦"}.mdi-air-purifier:before{content:"󰵄"}.mdi-air-purifier-off:before{content:"󱭗"}.mdi-airbag:before{content:"󰯩"}.mdi-airballoon:before{content:"󰀜"}.mdi-airballoon-outline:before{content:"󱀋"}.mdi-airplane:before{content:"󰀝"}.mdi-airplane-alert:before{content:"󱡺"}.mdi-airplane-check:before{content:"󱡻"}.mdi-airplane-clock:before{content:"󱡼"}.mdi-airplane-cog:before{content:"󱡽"}.mdi-airplane-edit:before{content:"󱡾"}.mdi-airplane-landing:before{content:"󰗔"}.mdi-airplane-marker:before{content:"󱡿"}.mdi-airplane-minus:before{content:"󱢀"}.mdi-airplane-off:before{content:"󰀞"}.mdi-airplane-plus:before{content:"󱢁"}.mdi-airplane-remove:before{content:"󱢂"}.mdi-airplane-search:before{content:"󱢃"}.mdi-airplane-settings:before{content:"󱢄"}.mdi-airplane-takeoff:before{content:"󰗕"}.mdi-airport:before{content:"󰡋"}.mdi-alarm:before{content:"󰀠"}.mdi-alarm-bell:before{content:"󰞎"}.mdi-alarm-check:before{content:"󰀡"}.mdi-alarm-light:before{content:"󰞏"}.mdi-alarm-light-off:before{content:"󱜞"}.mdi-alarm-light-off-outline:before{content:"󱜟"}.mdi-alarm-light-outline:before{content:"󰯪"}.mdi-alarm-multiple:before{content:"󰀢"}.mdi-alarm-note:before{content:"󰹱"}.mdi-alarm-note-off:before{content:"󰹲"}.mdi-alarm-off:before{content:"󰀣"}.mdi-alarm-panel:before{content:"󱗄"}.mdi-alarm-panel-outline:before{content:"󱗅"}.mdi-alarm-plus:before{content:"󰀤"}.mdi-alarm-snooze:before{content:"󰚎"}.mdi-album:before{content:"󰀥"}.mdi-alert:before{content:"󰀦"}.mdi-alert-box:before{content:"󰀧"}.mdi-alert-box-outline:before{content:"󰳤"}.mdi-alert-circle:before{content:"󰀨"}.mdi-alert-circle-check:before{content:"󱇭"}.mdi-alert-circle-check-outline:before{content:"󱇮"}.mdi-alert-circle-outline:before{content:"󰗖"}.mdi-alert-decagram:before{content:"󰚽"}.mdi-alert-decagram-outline:before{content:"󰳥"}.mdi-alert-minus:before{content:"󱒻"}.mdi-alert-minus-outline:before{content:"󱒾"}.mdi-alert-octagon:before{content:"󰀩"}.mdi-alert-octagon-outline:before{content:"󰳦"}.mdi-alert-octagram:before{content:"󰝧"}.mdi-alert-octagram-outline:before{content:"󰳧"}.mdi-alert-outline:before{content:"󰀪"}.mdi-alert-plus:before{content:"󱒺"}.mdi-alert-plus-outline:before{content:"󱒽"}.mdi-alert-remove:before{content:"󱒼"}.mdi-alert-remove-outline:before{content:"󱒿"}.mdi-alert-rhombus:before{content:"󱇎"}.mdi-alert-rhombus-outline:before{content:"󱇏"}.mdi-alien:before{content:"󰢚"}.mdi-alien-outline:before{content:"󱃋"}.mdi-align-horizontal-center:before{content:"󱇃"}.mdi-align-horizontal-distribute:before{content:"󱥢"}.mdi-align-horizontal-left:before{content:"󱇂"}.mdi-align-horizontal-right:before{content:"󱇄"}.mdi-align-vertical-bottom:before{content:"󱇅"}.mdi-align-vertical-center:before{content:"󱇆"}.mdi-align-vertical-distribute:before{content:"󱥣"}.mdi-align-vertical-top:before{content:"󱇇"}.mdi-all-inclusive:before{content:"󰚾"}.mdi-all-inclusive-box:before{content:"󱢍"}.mdi-all-inclusive-box-outline:before{content:"󱢎"}.mdi-allergy:before{content:"󱉘"}.mdi-alpha:before{content:"󰀫"}.mdi-alpha-a:before{content:"󰫮"}.mdi-alpha-a-box:before{content:"󰬈"}.mdi-alpha-a-box-outline:before{content:"󰯫"}.mdi-alpha-a-circle:before{content:"󰯬"}.mdi-alpha-a-circle-outline:before{content:"󰯭"}.mdi-alpha-b:before{content:"󰫯"}.mdi-alpha-b-box:before{content:"󰬉"}.mdi-alpha-b-box-outline:before{content:"󰯮"}.mdi-alpha-b-circle:before{content:"󰯯"}.mdi-alpha-b-circle-outline:before{content:"󰯰"}.mdi-alpha-c:before{content:"󰫰"}.mdi-alpha-c-box:before{content:"󰬊"}.mdi-alpha-c-box-outline:before{content:"󰯱"}.mdi-alpha-c-circle:before{content:"󰯲"}.mdi-alpha-c-circle-outline:before{content:"󰯳"}.mdi-alpha-d:before{content:"󰫱"}.mdi-alpha-d-box:before{content:"󰬋"}.mdi-alpha-d-box-outline:before{content:"󰯴"}.mdi-alpha-d-circle:before{content:"󰯵"}.mdi-alpha-d-circle-outline:before{content:"󰯶"}.mdi-alpha-e:before{content:"󰫲"}.mdi-alpha-e-box:before{content:"󰬌"}.mdi-alpha-e-box-outline:before{content:"󰯷"}.mdi-alpha-e-circle:before{content:"󰯸"}.mdi-alpha-e-circle-outline:before{content:"󰯹"}.mdi-alpha-f:before{content:"󰫳"}.mdi-alpha-f-box:before{content:"󰬍"}.mdi-alpha-f-box-outline:before{content:"󰯺"}.mdi-alpha-f-circle:before{content:"󰯻"}.mdi-alpha-f-circle-outline:before{content:"󰯼"}.mdi-alpha-g:before{content:"󰫴"}.mdi-alpha-g-box:before{content:"󰬎"}.mdi-alpha-g-box-outline:before{content:"󰯽"}.mdi-alpha-g-circle:before{content:"󰯾"}.mdi-alpha-g-circle-outline:before{content:"󰯿"}.mdi-alpha-h:before{content:"󰫵"}.mdi-alpha-h-box:before{content:"󰬏"}.mdi-alpha-h-box-outline:before{content:"󰰀"}.mdi-alpha-h-circle:before{content:"󰰁"}.mdi-alpha-h-circle-outline:before{content:"󰰂"}.mdi-alpha-i:before{content:"󰫶"}.mdi-alpha-i-box:before{content:"󰬐"}.mdi-alpha-i-box-outline:before{content:"󰰃"}.mdi-alpha-i-circle:before{content:"󰰄"}.mdi-alpha-i-circle-outline:before{content:"󰰅"}.mdi-alpha-j:before{content:"󰫷"}.mdi-alpha-j-box:before{content:"󰬑"}.mdi-alpha-j-box-outline:before{content:"󰰆"}.mdi-alpha-j-circle:before{content:"󰰇"}.mdi-alpha-j-circle-outline:before{content:"󰰈"}.mdi-alpha-k:before{content:"󰫸"}.mdi-alpha-k-box:before{content:"󰬒"}.mdi-alpha-k-box-outline:before{content:"󰰉"}.mdi-alpha-k-circle:before{content:"󰰊"}.mdi-alpha-k-circle-outline:before{content:"󰰋"}.mdi-alpha-l:before{content:"󰫹"}.mdi-alpha-l-box:before{content:"󰬓"}.mdi-alpha-l-box-outline:before{content:"󰰌"}.mdi-alpha-l-circle:before{content:"󰰍"}.mdi-alpha-l-circle-outline:before{content:"󰰎"}.mdi-alpha-m:before{content:"󰫺"}.mdi-alpha-m-box:before{content:"󰬔"}.mdi-alpha-m-box-outline:before{content:"󰰏"}.mdi-alpha-m-circle:before{content:"󰰐"}.mdi-alpha-m-circle-outline:before{content:"󰰑"}.mdi-alpha-n:before{content:"󰫻"}.mdi-alpha-n-box:before{content:"󰬕"}.mdi-alpha-n-box-outline:before{content:"󰰒"}.mdi-alpha-n-circle:before{content:"󰰓"}.mdi-alpha-n-circle-outline:before{content:"󰰔"}.mdi-alpha-o:before{content:"󰫼"}.mdi-alpha-o-box:before{content:"󰬖"}.mdi-alpha-o-box-outline:before{content:"󰰕"}.mdi-alpha-o-circle:before{content:"󰰖"}.mdi-alpha-o-circle-outline:before{content:"󰰗"}.mdi-alpha-p:before{content:"󰫽"}.mdi-alpha-p-box:before{content:"󰬗"}.mdi-alpha-p-box-outline:before{content:"󰰘"}.mdi-alpha-p-circle:before{content:"󰰙"}.mdi-alpha-p-circle-outline:before{content:"󰰚"}.mdi-alpha-q:before{content:"󰫾"}.mdi-alpha-q-box:before{content:"󰬘"}.mdi-alpha-q-box-outline:before{content:"󰰛"}.mdi-alpha-q-circle:before{content:"󰰜"}.mdi-alpha-q-circle-outline:before{content:"󰰝"}.mdi-alpha-r:before{content:"󰫿"}.mdi-alpha-r-box:before{content:"󰬙"}.mdi-alpha-r-box-outline:before{content:"󰰞"}.mdi-alpha-r-circle:before{content:"󰰟"}.mdi-alpha-r-circle-outline:before{content:"󰰠"}.mdi-alpha-s:before{content:"󰬀"}.mdi-alpha-s-box:before{content:"󰬚"}.mdi-alpha-s-box-outline:before{content:"󰰡"}.mdi-alpha-s-circle:before{content:"󰰢"}.mdi-alpha-s-circle-outline:before{content:"󰰣"}.mdi-alpha-t:before{content:"󰬁"}.mdi-alpha-t-box:before{content:"󰬛"}.mdi-alpha-t-box-outline:before{content:"󰰤"}.mdi-alpha-t-circle:before{content:"󰰥"}.mdi-alpha-t-circle-outline:before{content:"󰰦"}.mdi-alpha-u:before{content:"󰬂"}.mdi-alpha-u-box:before{content:"󰬜"}.mdi-alpha-u-box-outline:before{content:"󰰧"}.mdi-alpha-u-circle:before{content:"󰰨"}.mdi-alpha-u-circle-outline:before{content:"󰰩"}.mdi-alpha-v:before{content:"󰬃"}.mdi-alpha-v-box:before{content:"󰬝"}.mdi-alpha-v-box-outline:before{content:"󰰪"}.mdi-alpha-v-circle:before{content:"󰰫"}.mdi-alpha-v-circle-outline:before{content:"󰰬"}.mdi-alpha-w:before{content:"󰬄"}.mdi-alpha-w-box:before{content:"󰬞"}.mdi-alpha-w-box-outline:before{content:"󰰭"}.mdi-alpha-w-circle:before{content:"󰰮"}.mdi-alpha-w-circle-outline:before{content:"󰰯"}.mdi-alpha-x:before{content:"󰬅"}.mdi-alpha-x-box:before{content:"󰬟"}.mdi-alpha-x-box-outline:before{content:"󰰰"}.mdi-alpha-x-circle:before{content:"󰰱"}.mdi-alpha-x-circle-outline:before{content:"󰰲"}.mdi-alpha-y:before{content:"󰬆"}.mdi-alpha-y-box:before{content:"󰬠"}.mdi-alpha-y-box-outline:before{content:"󰰳"}.mdi-alpha-y-circle:before{content:"󰰴"}.mdi-alpha-y-circle-outline:before{content:"󰰵"}.mdi-alpha-z:before{content:"󰬇"}.mdi-alpha-z-box:before{content:"󰬡"}.mdi-alpha-z-box-outline:before{content:"󰰶"}.mdi-alpha-z-circle:before{content:"󰰷"}.mdi-alpha-z-circle-outline:before{content:"󰰸"}.mdi-alphabet-aurebesh:before{content:"󱌬"}.mdi-alphabet-cyrillic:before{content:"󱌭"}.mdi-alphabet-greek:before{content:"󱌮"}.mdi-alphabet-latin:before{content:"󱌯"}.mdi-alphabet-piqad:before{content:"󱌰"}.mdi-alphabet-tengwar:before{content:"󱌷"}.mdi-alphabetical:before{content:"󰀬"}.mdi-alphabetical-off:before{content:"󱀌"}.mdi-alphabetical-variant:before{content:"󱀍"}.mdi-alphabetical-variant-off:before{content:"󱀎"}.mdi-altimeter:before{content:"󰗗"}.mdi-ambulance:before{content:"󰀯"}.mdi-ammunition:before{content:"󰳨"}.mdi-ampersand:before{content:"󰪍"}.mdi-amplifier:before{content:"󰀰"}.mdi-amplifier-off:before{content:"󱆵"}.mdi-anchor:before{content:"󰀱"}.mdi-android:before{content:"󰀲"}.mdi-android-studio:before{content:"󰀴"}.mdi-angle-acute:before{content:"󰤷"}.mdi-angle-obtuse:before{content:"󰤸"}.mdi-angle-right:before{content:"󰤹"}.mdi-angular:before{content:"󰚲"}.mdi-angularjs:before{content:"󰚿"}.mdi-animation:before{content:"󰗘"}.mdi-animation-outline:before{content:"󰪏"}.mdi-animation-play:before{content:"󰤺"}.mdi-animation-play-outline:before{content:"󰪐"}.mdi-ansible:before{content:"󱂚"}.mdi-antenna:before{content:"󱄙"}.mdi-anvil:before{content:"󰢛"}.mdi-apache-kafka:before{content:"󱀏"}.mdi-api:before{content:"󱂛"}.mdi-api-off:before{content:"󱉗"}.mdi-apple:before{content:"󰀵"}.mdi-apple-finder:before{content:"󰀶"}.mdi-apple-icloud:before{content:"󰀸"}.mdi-apple-ios:before{content:"󰀷"}.mdi-apple-keyboard-caps:before{content:"󰘲"}.mdi-apple-keyboard-command:before{content:"󰘳"}.mdi-apple-keyboard-control:before{content:"󰘴"}.mdi-apple-keyboard-option:before{content:"󰘵"}.mdi-apple-keyboard-shift:before{content:"󰘶"}.mdi-apple-safari:before{content:"󰀹"}.mdi-application:before{content:"󰣆"}.mdi-application-array:before{content:"󱃵"}.mdi-application-array-outline:before{content:"󱃶"}.mdi-application-braces:before{content:"󱃷"}.mdi-application-braces-outline:before{content:"󱃸"}.mdi-application-brackets:before{content:"󰲋"}.mdi-application-brackets-outline:before{content:"󰲌"}.mdi-application-cog:before{content:"󰙵"}.mdi-application-cog-outline:before{content:"󱕷"}.mdi-application-edit:before{content:"󰂮"}.mdi-application-edit-outline:before{content:"󰘙"}.mdi-application-export:before{content:"󰶭"}.mdi-application-import:before{content:"󰶮"}.mdi-application-outline:before{content:"󰘔"}.mdi-application-parentheses:before{content:"󱃹"}.mdi-application-parentheses-outline:before{content:"󱃺"}.mdi-application-settings:before{content:"󰭠"}.mdi-application-settings-outline:before{content:"󱕕"}.mdi-application-variable:before{content:"󱃻"}.mdi-application-variable-outline:before{content:"󱃼"}.mdi-approximately-equal:before{content:"󰾞"}.mdi-approximately-equal-box:before{content:"󰾟"}.mdi-apps:before{content:"󰀻"}.mdi-apps-box:before{content:"󰵆"}.mdi-arch:before{content:"󰣇"}.mdi-archive:before{content:"󰀼"}.mdi-archive-alert:before{content:"󱓽"}.mdi-archive-alert-outline:before{content:"󱓾"}.mdi-archive-arrow-down:before{content:"󱉙"}.mdi-archive-arrow-down-outline:before{content:"󱉚"}.mdi-archive-arrow-up:before{content:"󱉛"}.mdi-archive-arrow-up-outline:before{content:"󱉜"}.mdi-archive-cancel:before{content:"󱝋"}.mdi-archive-cancel-outline:before{content:"󱝌"}.mdi-archive-check:before{content:"󱝍"}.mdi-archive-check-outline:before{content:"󱝎"}.mdi-archive-clock:before{content:"󱝏"}.mdi-archive-clock-outline:before{content:"󱝐"}.mdi-archive-cog:before{content:"󱝑"}.mdi-archive-cog-outline:before{content:"󱝒"}.mdi-archive-edit:before{content:"󱝓"}.mdi-archive-edit-outline:before{content:"󱝔"}.mdi-archive-eye:before{content:"󱝕"}.mdi-archive-eye-outline:before{content:"󱝖"}.mdi-archive-lock:before{content:"󱝗"}.mdi-archive-lock-open:before{content:"󱝘"}.mdi-archive-lock-open-outline:before{content:"󱝙"}.mdi-archive-lock-outline:before{content:"󱝚"}.mdi-archive-marker:before{content:"󱝛"}.mdi-archive-marker-outline:before{content:"󱝜"}.mdi-archive-minus:before{content:"󱝝"}.mdi-archive-minus-outline:before{content:"󱝞"}.mdi-archive-music:before{content:"󱝟"}.mdi-archive-music-outline:before{content:"󱝠"}.mdi-archive-off:before{content:"󱝡"}.mdi-archive-off-outline:before{content:"󱝢"}.mdi-archive-outline:before{content:"󱈎"}.mdi-archive-plus:before{content:"󱝣"}.mdi-archive-plus-outline:before{content:"󱝤"}.mdi-archive-refresh:before{content:"󱝥"}.mdi-archive-refresh-outline:before{content:"󱝦"}.mdi-archive-remove:before{content:"󱝧"}.mdi-archive-remove-outline:before{content:"󱝨"}.mdi-archive-search:before{content:"󱝩"}.mdi-archive-search-outline:before{content:"󱝪"}.mdi-archive-settings:before{content:"󱝫"}.mdi-archive-settings-outline:before{content:"󱝬"}.mdi-archive-star:before{content:"󱝭"}.mdi-archive-star-outline:before{content:"󱝮"}.mdi-archive-sync:before{content:"󱝯"}.mdi-archive-sync-outline:before{content:"󱝰"}.mdi-arm-flex:before{content:"󰿗"}.mdi-arm-flex-outline:before{content:"󰿖"}.mdi-arrange-bring-forward:before{content:"󰀽"}.mdi-arrange-bring-to-front:before{content:"󰀾"}.mdi-arrange-send-backward:before{content:"󰀿"}.mdi-arrange-send-to-back:before{content:"󰁀"}.mdi-arrow-all:before{content:"󰁁"}.mdi-arrow-bottom-left:before{content:"󰁂"}.mdi-arrow-bottom-left-bold-box:before{content:"󱥤"}.mdi-arrow-bottom-left-bold-box-outline:before{content:"󱥥"}.mdi-arrow-bottom-left-bold-outline:before{content:"󰦷"}.mdi-arrow-bottom-left-thick:before{content:"󰦸"}.mdi-arrow-bottom-left-thin:before{content:"󱦶"}.mdi-arrow-bottom-left-thin-circle-outline:before{content:"󱖖"}.mdi-arrow-bottom-right:before{content:"󰁃"}.mdi-arrow-bottom-right-bold-box:before{content:"󱥦"}.mdi-arrow-bottom-right-bold-box-outline:before{content:"󱥧"}.mdi-arrow-bottom-right-bold-outline:before{content:"󰦹"}.mdi-arrow-bottom-right-thick:before{content:"󰦺"}.mdi-arrow-bottom-right-thin:before{content:"󱦷"}.mdi-arrow-bottom-right-thin-circle-outline:before{content:"󱖕"}.mdi-arrow-collapse:before{content:"󰘕"}.mdi-arrow-collapse-all:before{content:"󰁄"}.mdi-arrow-collapse-down:before{content:"󰞒"}.mdi-arrow-collapse-horizontal:before{content:"󰡌"}.mdi-arrow-collapse-left:before{content:"󰞓"}.mdi-arrow-collapse-right:before{content:"󰞔"}.mdi-arrow-collapse-up:before{content:"󰞕"}.mdi-arrow-collapse-vertical:before{content:"󰡍"}.mdi-arrow-decision:before{content:"󰦻"}.mdi-arrow-decision-auto:before{content:"󰦼"}.mdi-arrow-decision-auto-outline:before{content:"󰦽"}.mdi-arrow-decision-outline:before{content:"󰦾"}.mdi-arrow-down:before{content:"󰁅"}.mdi-arrow-down-bold:before{content:"󰜮"}.mdi-arrow-down-bold-box:before{content:"󰜯"}.mdi-arrow-down-bold-box-outline:before{content:"󰜰"}.mdi-arrow-down-bold-circle:before{content:"󰁇"}.mdi-arrow-down-bold-circle-outline:before{content:"󰁈"}.mdi-arrow-down-bold-hexagon-outline:before{content:"󰁉"}.mdi-arrow-down-bold-outline:before{content:"󰦿"}.mdi-arrow-down-box:before{content:"󰛀"}.mdi-arrow-down-circle:before{content:"󰳛"}.mdi-arrow-down-circle-outline:before{content:"󰳜"}.mdi-arrow-down-drop-circle:before{content:"󰁊"}.mdi-arrow-down-drop-circle-outline:before{content:"󰁋"}.mdi-arrow-down-left:before{content:"󱞡"}.mdi-arrow-down-left-bold:before{content:"󱞢"}.mdi-arrow-down-right:before{content:"󱞣"}.mdi-arrow-down-right-bold:before{content:"󱞤"}.mdi-arrow-down-thick:before{content:"󰁆"}.mdi-arrow-down-thin:before{content:"󱦳"}.mdi-arrow-down-thin-circle-outline:before{content:"󱖙"}.mdi-arrow-expand:before{content:"󰘖"}.mdi-arrow-expand-all:before{content:"󰁌"}.mdi-arrow-expand-down:before{content:"󰞖"}.mdi-arrow-expand-horizontal:before{content:"󰡎"}.mdi-arrow-expand-left:before{content:"󰞗"}.mdi-arrow-expand-right:before{content:"󰞘"}.mdi-arrow-expand-up:before{content:"󰞙"}.mdi-arrow-expand-vertical:before{content:"󰡏"}.mdi-arrow-horizontal-lock:before{content:"󱅛"}.mdi-arrow-left:before{content:"󰁍"}.mdi-arrow-left-bold:before{content:"󰜱"}.mdi-arrow-left-bold-box:before{content:"󰜲"}.mdi-arrow-left-bold-box-outline:before{content:"󰜳"}.mdi-arrow-left-bold-circle:before{content:"󰁏"}.mdi-arrow-left-bold-circle-outline:before{content:"󰁐"}.mdi-arrow-left-bold-hexagon-outline:before{content:"󰁑"}.mdi-arrow-left-bold-outline:before{content:"󰧀"}.mdi-arrow-left-bottom:before{content:"󱞥"}.mdi-arrow-left-bottom-bold:before{content:"󱞦"}.mdi-arrow-left-box:before{content:"󰛁"}.mdi-arrow-left-circle:before{content:"󰳝"}.mdi-arrow-left-circle-outline:before{content:"󰳞"}.mdi-arrow-left-drop-circle:before{content:"󰁒"}.mdi-arrow-left-drop-circle-outline:before{content:"󰁓"}.mdi-arrow-left-right:before{content:"󰹳"}.mdi-arrow-left-right-bold:before{content:"󰹴"}.mdi-arrow-left-right-bold-outline:before{content:"󰧁"}.mdi-arrow-left-thick:before{content:"󰁎"}.mdi-arrow-left-thin:before{content:"󱦱"}.mdi-arrow-left-thin-circle-outline:before{content:"󱖚"}.mdi-arrow-left-top:before{content:"󱞧"}.mdi-arrow-left-top-bold:before{content:"󱞨"}.mdi-arrow-oscillating:before{content:"󱲑"}.mdi-arrow-oscillating-off:before{content:"󱲒"}.mdi-arrow-projectile:before{content:"󱡀"}.mdi-arrow-projectile-multiple:before{content:"󱠿"}.mdi-arrow-right:before{content:"󰁔"}.mdi-arrow-right-bold:before{content:"󰜴"}.mdi-arrow-right-bold-box:before{content:"󰜵"}.mdi-arrow-right-bold-box-outline:before{content:"󰜶"}.mdi-arrow-right-bold-circle:before{content:"󰁖"}.mdi-arrow-right-bold-circle-outline:before{content:"󰁗"}.mdi-arrow-right-bold-hexagon-outline:before{content:"󰁘"}.mdi-arrow-right-bold-outline:before{content:"󰧂"}.mdi-arrow-right-bottom:before{content:"󱞩"}.mdi-arrow-right-bottom-bold:before{content:"󱞪"}.mdi-arrow-right-box:before{content:"󰛂"}.mdi-arrow-right-circle:before{content:"󰳟"}.mdi-arrow-right-circle-outline:before{content:"󰳠"}.mdi-arrow-right-drop-circle:before{content:"󰁙"}.mdi-arrow-right-drop-circle-outline:before{content:"󰁚"}.mdi-arrow-right-thick:before{content:"󰁕"}.mdi-arrow-right-thin:before{content:"󱦰"}.mdi-arrow-right-thin-circle-outline:before{content:"󱖘"}.mdi-arrow-right-top:before{content:"󱞫"}.mdi-arrow-right-top-bold:before{content:"󱞬"}.mdi-arrow-split-horizontal:before{content:"󰤻"}.mdi-arrow-split-vertical:before{content:"󰤼"}.mdi-arrow-top-left:before{content:"󰁛"}.mdi-arrow-top-left-bold-box:before{content:"󱥨"}.mdi-arrow-top-left-bold-box-outline:before{content:"󱥩"}.mdi-arrow-top-left-bold-outline:before{content:"󰧃"}.mdi-arrow-top-left-bottom-right:before{content:"󰹵"}.mdi-arrow-top-left-bottom-right-bold:before{content:"󰹶"}.mdi-arrow-top-left-thick:before{content:"󰧄"}.mdi-arrow-top-left-thin:before{content:"󱦵"}.mdi-arrow-top-left-thin-circle-outline:before{content:"󱖓"}.mdi-arrow-top-right:before{content:"󰁜"}.mdi-arrow-top-right-bold-box:before{content:"󱥪"}.mdi-arrow-top-right-bold-box-outline:before{content:"󱥫"}.mdi-arrow-top-right-bold-outline:before{content:"󰧅"}.mdi-arrow-top-right-bottom-left:before{content:"󰹷"}.mdi-arrow-top-right-bottom-left-bold:before{content:"󰹸"}.mdi-arrow-top-right-thick:before{content:"󰧆"}.mdi-arrow-top-right-thin:before{content:"󱦴"}.mdi-arrow-top-right-thin-circle-outline:before{content:"󱖔"}.mdi-arrow-u-down-left:before{content:"󱞭"}.mdi-arrow-u-down-left-bold:before{content:"󱞮"}.mdi-arrow-u-down-right:before{content:"󱞯"}.mdi-arrow-u-down-right-bold:before{content:"󱞰"}.mdi-arrow-u-left-bottom:before{content:"󱞱"}.mdi-arrow-u-left-bottom-bold:before{content:"󱞲"}.mdi-arrow-u-left-top:before{content:"󱞳"}.mdi-arrow-u-left-top-bold:before{content:"󱞴"}.mdi-arrow-u-right-bottom:before{content:"󱞵"}.mdi-arrow-u-right-bottom-bold:before{content:"󱞶"}.mdi-arrow-u-right-top:before{content:"󱞷"}.mdi-arrow-u-right-top-bold:before{content:"󱞸"}.mdi-arrow-u-up-left:before{content:"󱞹"}.mdi-arrow-u-up-left-bold:before{content:"󱞺"}.mdi-arrow-u-up-right:before{content:"󱞻"}.mdi-arrow-u-up-right-bold:before{content:"󱞼"}.mdi-arrow-up:before{content:"󰁝"}.mdi-arrow-up-bold:before{content:"󰜷"}.mdi-arrow-up-bold-box:before{content:"󰜸"}.mdi-arrow-up-bold-box-outline:before{content:"󰜹"}.mdi-arrow-up-bold-circle:before{content:"󰁟"}.mdi-arrow-up-bold-circle-outline:before{content:"󰁠"}.mdi-arrow-up-bold-hexagon-outline:before{content:"󰁡"}.mdi-arrow-up-bold-outline:before{content:"󰧇"}.mdi-arrow-up-box:before{content:"󰛃"}.mdi-arrow-up-circle:before{content:"󰳡"}.mdi-arrow-up-circle-outline:before{content:"󰳢"}.mdi-arrow-up-down:before{content:"󰹹"}.mdi-arrow-up-down-bold:before{content:"󰹺"}.mdi-arrow-up-down-bold-outline:before{content:"󰧈"}.mdi-arrow-up-drop-circle:before{content:"󰁢"}.mdi-arrow-up-drop-circle-outline:before{content:"󰁣"}.mdi-arrow-up-left:before{content:"󱞽"}.mdi-arrow-up-left-bold:before{content:"󱞾"}.mdi-arrow-up-right:before{content:"󱞿"}.mdi-arrow-up-right-bold:before{content:"󱟀"}.mdi-arrow-up-thick:before{content:"󰁞"}.mdi-arrow-up-thin:before{content:"󱦲"}.mdi-arrow-up-thin-circle-outline:before{content:"󱖗"}.mdi-arrow-vertical-lock:before{content:"󱅜"}.mdi-artboard:before{content:"󱮚"}.mdi-artstation:before{content:"󰭛"}.mdi-aspect-ratio:before{content:"󰨤"}.mdi-assistant:before{content:"󰁤"}.mdi-asterisk:before{content:"󰛄"}.mdi-asterisk-circle-outline:before{content:"󱨧"}.mdi-at:before{content:"󰁥"}.mdi-atlassian:before{content:"󰠄"}.mdi-atm:before{content:"󰵇"}.mdi-atom:before{content:"󰝨"}.mdi-atom-variant:before{content:"󰹻"}.mdi-attachment:before{content:"󰁦"}.mdi-attachment-check:before{content:"󱫁"}.mdi-attachment-lock:before{content:"󱧄"}.mdi-attachment-minus:before{content:"󱫂"}.mdi-attachment-off:before{content:"󱫃"}.mdi-attachment-plus:before{content:"󱫄"}.mdi-attachment-remove:before{content:"󱫅"}.mdi-atv:before{content:"󱭰"}.mdi-audio-input-rca:before{content:"󱡫"}.mdi-audio-input-stereo-minijack:before{content:"󱡬"}.mdi-audio-input-xlr:before{content:"󱡭"}.mdi-audio-video:before{content:"󰤽"}.mdi-audio-video-off:before{content:"󱆶"}.mdi-augmented-reality:before{content:"󰡐"}.mdi-aurora:before{content:"󱮹"}.mdi-auto-download:before{content:"󱍾"}.mdi-auto-fix:before{content:"󰁨"}.mdi-auto-mode:before{content:"󱰠"}.mdi-auto-upload:before{content:"󰁩"}.mdi-autorenew:before{content:"󰁪"}.mdi-autorenew-off:before{content:"󱧧"}.mdi-av-timer:before{content:"󰁫"}.mdi-awning:before{content:"󱮇"}.mdi-awning-outline:before{content:"󱮈"}.mdi-aws:before{content:"󰸏"}.mdi-axe:before{content:"󰣈"}.mdi-axe-battle:before{content:"󱡂"}.mdi-axis:before{content:"󰵈"}.mdi-axis-arrow:before{content:"󰵉"}.mdi-axis-arrow-info:before{content:"󱐎"}.mdi-axis-arrow-lock:before{content:"󰵊"}.mdi-axis-lock:before{content:"󰵋"}.mdi-axis-x-arrow:before{content:"󰵌"}.mdi-axis-x-arrow-lock:before{content:"󰵍"}.mdi-axis-x-rotate-clockwise:before{content:"󰵎"}.mdi-axis-x-rotate-counterclockwise:before{content:"󰵏"}.mdi-axis-x-y-arrow-lock:before{content:"󰵐"}.mdi-axis-y-arrow:before{content:"󰵑"}.mdi-axis-y-arrow-lock:before{content:"󰵒"}.mdi-axis-y-rotate-clockwise:before{content:"󰵓"}.mdi-axis-y-rotate-counterclockwise:before{content:"󰵔"}.mdi-axis-z-arrow:before{content:"󰵕"}.mdi-axis-z-arrow-lock:before{content:"󰵖"}.mdi-axis-z-rotate-clockwise:before{content:"󰵗"}.mdi-axis-z-rotate-counterclockwise:before{content:"󰵘"}.mdi-babel:before{content:"󰨥"}.mdi-baby:before{content:"󰁬"}.mdi-baby-bottle:before{content:"󰼹"}.mdi-baby-bottle-outline:before{content:"󰼺"}.mdi-baby-buggy:before{content:"󱏠"}.mdi-baby-buggy-off:before{content:"󱫳"}.mdi-baby-carriage:before{content:"󰚏"}.mdi-baby-carriage-off:before{content:"󰾠"}.mdi-baby-face:before{content:"󰹼"}.mdi-baby-face-outline:before{content:"󰹽"}.mdi-backburger:before{content:"󰁭"}.mdi-backspace:before{content:"󰁮"}.mdi-backspace-outline:before{content:"󰭜"}.mdi-backspace-reverse:before{content:"󰹾"}.mdi-backspace-reverse-outline:before{content:"󰹿"}.mdi-backup-restore:before{content:"󰁯"}.mdi-bacteria:before{content:"󰻕"}.mdi-bacteria-outline:before{content:"󰻖"}.mdi-badge-account:before{content:"󰶧"}.mdi-badge-account-alert:before{content:"󰶨"}.mdi-badge-account-alert-outline:before{content:"󰶩"}.mdi-badge-account-horizontal:before{content:"󰸍"}.mdi-badge-account-horizontal-outline:before{content:"󰸎"}.mdi-badge-account-outline:before{content:"󰶪"}.mdi-badminton:before{content:"󰡑"}.mdi-bag-carry-on:before{content:"󰼻"}.mdi-bag-carry-on-check:before{content:"󰵥"}.mdi-bag-carry-on-off:before{content:"󰼼"}.mdi-bag-checked:before{content:"󰼽"}.mdi-bag-personal:before{content:"󰸐"}.mdi-bag-personal-off:before{content:"󰸑"}.mdi-bag-personal-off-outline:before{content:"󰸒"}.mdi-bag-personal-outline:before{content:"󰸓"}.mdi-bag-personal-plus:before{content:"󱲤"}.mdi-bag-personal-plus-outline:before{content:"󱲥"}.mdi-bag-personal-tag:before{content:"󱬌"}.mdi-bag-personal-tag-outline:before{content:"󱬍"}.mdi-bag-suitcase:before{content:"󱖋"}.mdi-bag-suitcase-off:before{content:"󱖍"}.mdi-bag-suitcase-off-outline:before{content:"󱖎"}.mdi-bag-suitcase-outline:before{content:"󱖌"}.mdi-baguette:before{content:"󰼾"}.mdi-balcony:before{content:"󱠗"}.mdi-balloon:before{content:"󰨦"}.mdi-ballot:before{content:"󰧉"}.mdi-ballot-outline:before{content:"󰧊"}.mdi-ballot-recount:before{content:"󰰹"}.mdi-ballot-recount-outline:before{content:"󰰺"}.mdi-bandage:before{content:"󰶯"}.mdi-bank:before{content:"󰁰"}.mdi-bank-check:before{content:"󱙕"}.mdi-bank-circle:before{content:"󱰃"}.mdi-bank-circle-outline:before{content:"󱰄"}.mdi-bank-minus:before{content:"󰶰"}.mdi-bank-off:before{content:"󱙖"}.mdi-bank-off-outline:before{content:"󱙗"}.mdi-bank-outline:before{content:"󰺀"}.mdi-bank-plus:before{content:"󰶱"}.mdi-bank-remove:before{content:"󰶲"}.mdi-bank-transfer:before{content:"󰨧"}.mdi-bank-transfer-in:before{content:"󰨨"}.mdi-bank-transfer-out:before{content:"󰨩"}.mdi-barcode:before{content:"󰁱"}.mdi-barcode-off:before{content:"󱈶"}.mdi-barcode-scan:before{content:"󰁲"}.mdi-barley:before{content:"󰁳"}.mdi-barley-off:before{content:"󰭝"}.mdi-barn:before{content:"󰭞"}.mdi-barrel:before{content:"󰁴"}.mdi-barrel-outline:before{content:"󱨨"}.mdi-baseball:before{content:"󰡒"}.mdi-baseball-bat:before{content:"󰡓"}.mdi-baseball-diamond:before{content:"󱗬"}.mdi-baseball-diamond-outline:before{content:"󱗭"}.mdi-baseball-outline:before{content:"󱱚"}.mdi-bash:before{content:"󱆃"}.mdi-basket:before{content:"󰁶"}.mdi-basket-check:before{content:"󱣥"}.mdi-basket-check-outline:before{content:"󱣦"}.mdi-basket-fill:before{content:"󰁷"}.mdi-basket-minus:before{content:"󱔣"}.mdi-basket-minus-outline:before{content:"󱔤"}.mdi-basket-off:before{content:"󱔥"}.mdi-basket-off-outline:before{content:"󱔦"}.mdi-basket-outline:before{content:"󱆁"}.mdi-basket-plus:before{content:"󱔧"}.mdi-basket-plus-outline:before{content:"󱔨"}.mdi-basket-remove:before{content:"󱔩"}.mdi-basket-remove-outline:before{content:"󱔪"}.mdi-basket-unfill:before{content:"󰁸"}.mdi-basketball:before{content:"󰠆"}.mdi-basketball-hoop:before{content:"󰰻"}.mdi-basketball-hoop-outline:before{content:"󰰼"}.mdi-bat:before{content:"󰭟"}.mdi-bathtub:before{content:"󱠘"}.mdi-bathtub-outline:before{content:"󱠙"}.mdi-battery:before{content:"󰁹"}.mdi-battery-10:before{content:"󰁺"}.mdi-battery-10-bluetooth:before{content:"󰤾"}.mdi-battery-20:before{content:"󰁻"}.mdi-battery-20-bluetooth:before{content:"󰤿"}.mdi-battery-30:before{content:"󰁼"}.mdi-battery-30-bluetooth:before{content:"󰥀"}.mdi-battery-40:before{content:"󰁽"}.mdi-battery-40-bluetooth:before{content:"󰥁"}.mdi-battery-50:before{content:"󰁾"}.mdi-battery-50-bluetooth:before{content:"󰥂"}.mdi-battery-60:before{content:"󰁿"}.mdi-battery-60-bluetooth:before{content:"󰥃"}.mdi-battery-70:before{content:"󰂀"}.mdi-battery-70-bluetooth:before{content:"󰥄"}.mdi-battery-80:before{content:"󰂁"}.mdi-battery-80-bluetooth:before{content:"󰥅"}.mdi-battery-90:before{content:"󰂂"}.mdi-battery-90-bluetooth:before{content:"󰥆"}.mdi-battery-alert:before{content:"󰂃"}.mdi-battery-alert-bluetooth:before{content:"󰥇"}.mdi-battery-alert-variant:before{content:"󱃌"}.mdi-battery-alert-variant-outline:before{content:"󱃍"}.mdi-battery-arrow-down:before{content:"󱟞"}.mdi-battery-arrow-down-outline:before{content:"󱟟"}.mdi-battery-arrow-up:before{content:"󱟠"}.mdi-battery-arrow-up-outline:before{content:"󱟡"}.mdi-battery-bluetooth:before{content:"󰥈"}.mdi-battery-bluetooth-variant:before{content:"󰥉"}.mdi-battery-charging:before{content:"󰂄"}.mdi-battery-charging-10:before{content:"󰢜"}.mdi-battery-charging-100:before{content:"󰂅"}.mdi-battery-charging-20:before{content:"󰂆"}.mdi-battery-charging-30:before{content:"󰂇"}.mdi-battery-charging-40:before{content:"󰂈"}.mdi-battery-charging-50:before{content:"󰢝"}.mdi-battery-charging-60:before{content:"󰂉"}.mdi-battery-charging-70:before{content:"󰢞"}.mdi-battery-charging-80:before{content:"󰂊"}.mdi-battery-charging-90:before{content:"󰂋"}.mdi-battery-charging-high:before{content:"󱊦"}.mdi-battery-charging-low:before{content:"󱊤"}.mdi-battery-charging-medium:before{content:"󱊥"}.mdi-battery-charging-outline:before{content:"󰢟"}.mdi-battery-charging-wireless:before{content:"󰠇"}.mdi-battery-charging-wireless-10:before{content:"󰠈"}.mdi-battery-charging-wireless-20:before{content:"󰠉"}.mdi-battery-charging-wireless-30:before{content:"󰠊"}.mdi-battery-charging-wireless-40:before{content:"󰠋"}.mdi-battery-charging-wireless-50:before{content:"󰠌"}.mdi-battery-charging-wireless-60:before{content:"󰠍"}.mdi-battery-charging-wireless-70:before{content:"󰠎"}.mdi-battery-charging-wireless-80:before{content:"󰠏"}.mdi-battery-charging-wireless-90:before{content:"󰠐"}.mdi-battery-charging-wireless-alert:before{content:"󰠑"}.mdi-battery-charging-wireless-outline:before{content:"󰠒"}.mdi-battery-check:before{content:"󱟢"}.mdi-battery-check-outline:before{content:"󱟣"}.mdi-battery-clock:before{content:"󱧥"}.mdi-battery-clock-outline:before{content:"󱧦"}.mdi-battery-heart:before{content:"󱈏"}.mdi-battery-heart-outline:before{content:"󱈐"}.mdi-battery-heart-variant:before{content:"󱈑"}.mdi-battery-high:before{content:"󱊣"}.mdi-battery-lock:before{content:"󱞜"}.mdi-battery-lock-open:before{content:"󱞝"}.mdi-battery-low:before{content:"󱊡"}.mdi-battery-medium:before{content:"󱊢"}.mdi-battery-minus:before{content:"󱟤"}.mdi-battery-minus-outline:before{content:"󱟥"}.mdi-battery-minus-variant:before{content:"󰂌"}.mdi-battery-negative:before{content:"󰂍"}.mdi-battery-off:before{content:"󱉝"}.mdi-battery-off-outline:before{content:"󱉞"}.mdi-battery-outline:before{content:"󰂎"}.mdi-battery-plus:before{content:"󱟦"}.mdi-battery-plus-outline:before{content:"󱟧"}.mdi-battery-plus-variant:before{content:"󰂏"}.mdi-battery-positive:before{content:"󰂐"}.mdi-battery-remove:before{content:"󱟨"}.mdi-battery-remove-outline:before{content:"󱟩"}.mdi-battery-sync:before{content:"󱠴"}.mdi-battery-sync-outline:before{content:"󱠵"}.mdi-battery-unknown:before{content:"󰂑"}.mdi-battery-unknown-bluetooth:before{content:"󰥊"}.mdi-beach:before{content:"󰂒"}.mdi-beaker:before{content:"󰳪"}.mdi-beaker-alert:before{content:"󱈩"}.mdi-beaker-alert-outline:before{content:"󱈪"}.mdi-beaker-check:before{content:"󱈫"}.mdi-beaker-check-outline:before{content:"󱈬"}.mdi-beaker-minus:before{content:"󱈭"}.mdi-beaker-minus-outline:before{content:"󱈮"}.mdi-beaker-outline:before{content:"󰚐"}.mdi-beaker-plus:before{content:"󱈯"}.mdi-beaker-plus-outline:before{content:"󱈰"}.mdi-beaker-question:before{content:"󱈱"}.mdi-beaker-question-outline:before{content:"󱈲"}.mdi-beaker-remove:before{content:"󱈳"}.mdi-beaker-remove-outline:before{content:"󱈴"}.mdi-bed:before{content:"󰋣"}.mdi-bed-clock:before{content:"󱮔"}.mdi-bed-double:before{content:"󰿔"}.mdi-bed-double-outline:before{content:"󰿓"}.mdi-bed-empty:before{content:"󰢠"}.mdi-bed-king:before{content:"󰿒"}.mdi-bed-king-outline:before{content:"󰿑"}.mdi-bed-outline:before{content:"󰂙"}.mdi-bed-queen:before{content:"󰿐"}.mdi-bed-queen-outline:before{content:"󰿛"}.mdi-bed-single:before{content:"󱁭"}.mdi-bed-single-outline:before{content:"󱁮"}.mdi-bee:before{content:"󰾡"}.mdi-bee-flower:before{content:"󰾢"}.mdi-beehive-off-outline:before{content:"󱏭"}.mdi-beehive-outline:before{content:"󱃎"}.mdi-beekeeper:before{content:"󱓢"}.mdi-beer:before{content:"󰂘"}.mdi-beer-outline:before{content:"󱌌"}.mdi-bell:before{content:"󰂚"}.mdi-bell-alert:before{content:"󰵙"}.mdi-bell-alert-outline:before{content:"󰺁"}.mdi-bell-badge:before{content:"󱅫"}.mdi-bell-badge-outline:before{content:"󰅸"}.mdi-bell-cancel:before{content:"󱏧"}.mdi-bell-cancel-outline:before{content:"󱏨"}.mdi-bell-check:before{content:"󱇥"}.mdi-bell-check-outline:before{content:"󱇦"}.mdi-bell-circle:before{content:"󰵚"}.mdi-bell-circle-outline:before{content:"󰵛"}.mdi-bell-cog:before{content:"󱨩"}.mdi-bell-cog-outline:before{content:"󱨪"}.mdi-bell-minus:before{content:"󱏩"}.mdi-bell-minus-outline:before{content:"󱏪"}.mdi-bell-off:before{content:"󰂛"}.mdi-bell-off-outline:before{content:"󰪑"}.mdi-bell-outline:before{content:"󰂜"}.mdi-bell-plus:before{content:"󰂝"}.mdi-bell-plus-outline:before{content:"󰪒"}.mdi-bell-remove:before{content:"󱏫"}.mdi-bell-remove-outline:before{content:"󱏬"}.mdi-bell-ring:before{content:"󰂞"}.mdi-bell-ring-outline:before{content:"󰂟"}.mdi-bell-sleep:before{content:"󰂠"}.mdi-bell-sleep-outline:before{content:"󰪓"}.mdi-bench:before{content:"󱰡"}.mdi-bench-back:before{content:"󱰢"}.mdi-beta:before{content:"󰂡"}.mdi-betamax:before{content:"󰧋"}.mdi-biathlon:before{content:"󰸔"}.mdi-bicycle:before{content:"󱂜"}.mdi-bicycle-basket:before{content:"󱈵"}.mdi-bicycle-cargo:before{content:"󱢜"}.mdi-bicycle-electric:before{content:"󱖴"}.mdi-bicycle-penny-farthing:before{content:"󱗩"}.mdi-bike:before{content:"󰂣"}.mdi-bike-fast:before{content:"󱄟"}.mdi-bike-pedal:before{content:"󱰣"}.mdi-bike-pedal-clipless:before{content:"󱰤"}.mdi-bike-pedal-mountain:before{content:"󱰥"}.mdi-billboard:before{content:"󱀐"}.mdi-billiards:before{content:"󰭡"}.mdi-billiards-rack:before{content:"󰭢"}.mdi-binoculars:before{content:"󰂥"}.mdi-bio:before{content:"󰂦"}.mdi-biohazard:before{content:"󰂧"}.mdi-bird:before{content:"󱗆"}.mdi-bitbucket:before{content:"󰂨"}.mdi-bitcoin:before{content:"󰠓"}.mdi-black-mesa:before{content:"󰂩"}.mdi-blender:before{content:"󰳫"}.mdi-blender-outline:before{content:"󱠚"}.mdi-blender-software:before{content:"󰂫"}.mdi-blinds:before{content:"󰂬"}.mdi-blinds-horizontal:before{content:"󱨫"}.mdi-blinds-horizontal-closed:before{content:"󱨬"}.mdi-blinds-open:before{content:"󱀑"}.mdi-blinds-vertical:before{content:"󱨭"}.mdi-blinds-vertical-closed:before{content:"󱨮"}.mdi-block-helper:before{content:"󰂭"}.mdi-blood-bag:before{content:"󰳬"}.mdi-bluetooth:before{content:"󰂯"}.mdi-bluetooth-audio:before{content:"󰂰"}.mdi-bluetooth-connect:before{content:"󰂱"}.mdi-bluetooth-off:before{content:"󰂲"}.mdi-bluetooth-settings:before{content:"󰂳"}.mdi-bluetooth-transfer:before{content:"󰂴"}.mdi-blur:before{content:"󰂵"}.mdi-blur-linear:before{content:"󰂶"}.mdi-blur-off:before{content:"󰂷"}.mdi-blur-radial:before{content:"󰂸"}.mdi-bolt:before{content:"󰶳"}.mdi-bomb:before{content:"󰚑"}.mdi-bomb-off:before{content:"󰛅"}.mdi-bone:before{content:"󰂹"}.mdi-bone-off:before{content:"󱧠"}.mdi-book:before{content:"󰂺"}.mdi-book-account:before{content:"󱎭"}.mdi-book-account-outline:before{content:"󱎮"}.mdi-book-alert:before{content:"󱙼"}.mdi-book-alert-outline:before{content:"󱙽"}.mdi-book-alphabet:before{content:"󰘝"}.mdi-book-arrow-down:before{content:"󱙾"}.mdi-book-arrow-down-outline:before{content:"󱙿"}.mdi-book-arrow-left:before{content:"󱚀"}.mdi-book-arrow-left-outline:before{content:"󱚁"}.mdi-book-arrow-right:before{content:"󱚂"}.mdi-book-arrow-right-outline:before{content:"󱚃"}.mdi-book-arrow-up:before{content:"󱚄"}.mdi-book-arrow-up-outline:before{content:"󱚅"}.mdi-book-cancel:before{content:"󱚆"}.mdi-book-cancel-outline:before{content:"󱚇"}.mdi-book-check:before{content:"󱓳"}.mdi-book-check-outline:before{content:"󱓴"}.mdi-book-clock:before{content:"󱚈"}.mdi-book-clock-outline:before{content:"󱚉"}.mdi-book-cog:before{content:"󱚊"}.mdi-book-cog-outline:before{content:"󱚋"}.mdi-book-cross:before{content:"󰂢"}.mdi-book-edit:before{content:"󱚌"}.mdi-book-edit-outline:before{content:"󱚍"}.mdi-book-education:before{content:"󱛉"}.mdi-book-education-outline:before{content:"󱛊"}.mdi-book-heart:before{content:"󱨝"}.mdi-book-heart-outline:before{content:"󱨞"}.mdi-book-information-variant:before{content:"󱁯"}.mdi-book-lock:before{content:"󰞚"}.mdi-book-lock-open:before{content:"󰞛"}.mdi-book-lock-open-outline:before{content:"󱚎"}.mdi-book-lock-outline:before{content:"󱚏"}.mdi-book-marker:before{content:"󱚐"}.mdi-book-marker-outline:before{content:"󱚑"}.mdi-book-minus:before{content:"󰗙"}.mdi-book-minus-multiple:before{content:"󰪔"}.mdi-book-minus-multiple-outline:before{content:"󰤋"}.mdi-book-minus-outline:before{content:"󱚒"}.mdi-book-multiple:before{content:"󰂻"}.mdi-book-multiple-outline:before{content:"󰐶"}.mdi-book-music:before{content:"󰁧"}.mdi-book-music-outline:before{content:"󱚓"}.mdi-book-off:before{content:"󱚔"}.mdi-book-off-outline:before{content:"󱚕"}.mdi-book-open:before{content:"󰂽"}.mdi-book-open-blank-variant:before{content:"󰂾"}.mdi-book-open-blank-variant-outline:before{content:"󱳋"}.mdi-book-open-outline:before{content:"󰭣"}.mdi-book-open-page-variant:before{content:"󰗚"}.mdi-book-open-page-variant-outline:before{content:"󱗖"}.mdi-book-open-variant:before{content:"󱓷"}.mdi-book-open-variant-outline:before{content:"󱳌"}.mdi-book-outline:before{content:"󰭤"}.mdi-book-play:before{content:"󰺂"}.mdi-book-play-outline:before{content:"󰺃"}.mdi-book-plus:before{content:"󰗛"}.mdi-book-plus-multiple:before{content:"󰪕"}.mdi-book-plus-multiple-outline:before{content:"󰫞"}.mdi-book-plus-outline:before{content:"󱚖"}.mdi-book-refresh:before{content:"󱚗"}.mdi-book-refresh-outline:before{content:"󱚘"}.mdi-book-remove:before{content:"󰪗"}.mdi-book-remove-multiple:before{content:"󰪖"}.mdi-book-remove-multiple-outline:before{content:"󰓊"}.mdi-book-remove-outline:before{content:"󱚙"}.mdi-book-search:before{content:"󰺄"}.mdi-book-search-outline:before{content:"󰺅"}.mdi-book-settings:before{content:"󱚚"}.mdi-book-settings-outline:before{content:"󱚛"}.mdi-book-sync:before{content:"󱚜"}.mdi-book-sync-outline:before{content:"󱛈"}.mdi-book-variant:before{content:"󰂿"}.mdi-bookmark:before{content:"󰃀"}.mdi-bookmark-box:before{content:"󱭵"}.mdi-bookmark-box-multiple:before{content:"󱥬"}.mdi-bookmark-box-multiple-outline:before{content:"󱥭"}.mdi-bookmark-box-outline:before{content:"󱭶"}.mdi-bookmark-check:before{content:"󰃁"}.mdi-bookmark-check-outline:before{content:"󱍻"}.mdi-bookmark-minus:before{content:"󰧌"}.mdi-bookmark-minus-outline:before{content:"󰧍"}.mdi-bookmark-multiple:before{content:"󰸕"}.mdi-bookmark-multiple-outline:before{content:"󰸖"}.mdi-bookmark-music:before{content:"󰃂"}.mdi-bookmark-music-outline:before{content:"󱍹"}.mdi-bookmark-off:before{content:"󰧎"}.mdi-bookmark-off-outline:before{content:"󰧏"}.mdi-bookmark-outline:before{content:"󰃃"}.mdi-bookmark-plus:before{content:"󰃅"}.mdi-bookmark-plus-outline:before{content:"󰃄"}.mdi-bookmark-remove:before{content:"󰃆"}.mdi-bookmark-remove-outline:before{content:"󱍺"}.mdi-bookshelf:before{content:"󱉟"}.mdi-boom-gate:before{content:"󰺆"}.mdi-boom-gate-alert:before{content:"󰺇"}.mdi-boom-gate-alert-outline:before{content:"󰺈"}.mdi-boom-gate-arrow-down:before{content:"󰺉"}.mdi-boom-gate-arrow-down-outline:before{content:"󰺊"}.mdi-boom-gate-arrow-up:before{content:"󰺌"}.mdi-boom-gate-arrow-up-outline:before{content:"󰺍"}.mdi-boom-gate-outline:before{content:"󰺋"}.mdi-boom-gate-up:before{content:"󱟹"}.mdi-boom-gate-up-outline:before{content:"󱟺"}.mdi-boombox:before{content:"󰗜"}.mdi-boomerang:before{content:"󱃏"}.mdi-bootstrap:before{content:"󰛆"}.mdi-border-all:before{content:"󰃇"}.mdi-border-all-variant:before{content:"󰢡"}.mdi-border-bottom:before{content:"󰃈"}.mdi-border-bottom-variant:before{content:"󰢢"}.mdi-border-color:before{content:"󰃉"}.mdi-border-horizontal:before{content:"󰃊"}.mdi-border-inside:before{content:"󰃋"}.mdi-border-left:before{content:"󰃌"}.mdi-border-left-variant:before{content:"󰢣"}.mdi-border-none:before{content:"󰃍"}.mdi-border-none-variant:before{content:"󰢤"}.mdi-border-outside:before{content:"󰃎"}.mdi-border-radius:before{content:"󱫴"}.mdi-border-right:before{content:"󰃏"}.mdi-border-right-variant:before{content:"󰢥"}.mdi-border-style:before{content:"󰃐"}.mdi-border-top:before{content:"󰃑"}.mdi-border-top-variant:before{content:"󰢦"}.mdi-border-vertical:before{content:"󰃒"}.mdi-bottle-soda:before{content:"󱁰"}.mdi-bottle-soda-classic:before{content:"󱁱"}.mdi-bottle-soda-classic-outline:before{content:"󱍣"}.mdi-bottle-soda-outline:before{content:"󱁲"}.mdi-bottle-tonic:before{content:"󱄮"}.mdi-bottle-tonic-outline:before{content:"󱄯"}.mdi-bottle-tonic-plus:before{content:"󱄰"}.mdi-bottle-tonic-plus-outline:before{content:"󱄱"}.mdi-bottle-tonic-skull:before{content:"󱄲"}.mdi-bottle-tonic-skull-outline:before{content:"󱄳"}.mdi-bottle-wine:before{content:"󰡔"}.mdi-bottle-wine-outline:before{content:"󱌐"}.mdi-bow-arrow:before{content:"󱡁"}.mdi-bow-tie:before{content:"󰙸"}.mdi-bowl:before{content:"󰊎"}.mdi-bowl-mix:before{content:"󰘗"}.mdi-bowl-mix-outline:before{content:"󰋤"}.mdi-bowl-outline:before{content:"󰊩"}.mdi-bowling:before{content:"󰃓"}.mdi-box:before{content:"󰃔"}.mdi-box-cutter:before{content:"󰃕"}.mdi-box-cutter-off:before{content:"󰭊"}.mdi-box-shadow:before{content:"󰘷"}.mdi-boxing-glove:before{content:"󰭥"}.mdi-braille:before{content:"󰧐"}.mdi-brain:before{content:"󰧑"}.mdi-bread-slice:before{content:"󰳮"}.mdi-bread-slice-outline:before{content:"󰳯"}.mdi-bridge:before{content:"󰘘"}.mdi-briefcase:before{content:"󰃖"}.mdi-briefcase-account:before{content:"󰳰"}.mdi-briefcase-account-outline:before{content:"󰳱"}.mdi-briefcase-arrow-left-right:before{content:"󱪍"}.mdi-briefcase-arrow-left-right-outline:before{content:"󱪎"}.mdi-briefcase-arrow-up-down:before{content:"󱪏"}.mdi-briefcase-arrow-up-down-outline:before{content:"󱪐"}.mdi-briefcase-check:before{content:"󰃗"}.mdi-briefcase-check-outline:before{content:"󱌞"}.mdi-briefcase-clock:before{content:"󱃐"}.mdi-briefcase-clock-outline:before{content:"󱃑"}.mdi-briefcase-download:before{content:"󰃘"}.mdi-briefcase-download-outline:before{content:"󰰽"}.mdi-briefcase-edit:before{content:"󰪘"}.mdi-briefcase-edit-outline:before{content:"󰰾"}.mdi-briefcase-eye:before{content:"󱟙"}.mdi-briefcase-eye-outline:before{content:"󱟚"}.mdi-briefcase-minus:before{content:"󰨪"}.mdi-briefcase-minus-outline:before{content:"󰰿"}.mdi-briefcase-off:before{content:"󱙘"}.mdi-briefcase-off-outline:before{content:"󱙙"}.mdi-briefcase-outline:before{content:"󰠔"}.mdi-briefcase-plus:before{content:"󰨫"}.mdi-briefcase-plus-outline:before{content:"󰱀"}.mdi-briefcase-remove:before{content:"󰨬"}.mdi-briefcase-remove-outline:before{content:"󰱁"}.mdi-briefcase-search:before{content:"󰨭"}.mdi-briefcase-search-outline:before{content:"󰱂"}.mdi-briefcase-upload:before{content:"󰃙"}.mdi-briefcase-upload-outline:before{content:"󰱃"}.mdi-briefcase-variant:before{content:"󱒔"}.mdi-briefcase-variant-off:before{content:"󱙚"}.mdi-briefcase-variant-off-outline:before{content:"󱙛"}.mdi-briefcase-variant-outline:before{content:"󱒕"}.mdi-brightness-1:before{content:"󰃚"}.mdi-brightness-2:before{content:"󰃛"}.mdi-brightness-3:before{content:"󰃜"}.mdi-brightness-4:before{content:"󰃝"}.mdi-brightness-5:before{content:"󰃞"}.mdi-brightness-6:before{content:"󰃟"}.mdi-brightness-7:before{content:"󰃠"}.mdi-brightness-auto:before{content:"󰃡"}.mdi-brightness-percent:before{content:"󰳲"}.mdi-broadcast:before{content:"󱜠"}.mdi-broadcast-off:before{content:"󱜡"}.mdi-broom:before{content:"󰃢"}.mdi-brush:before{content:"󰃣"}.mdi-brush-off:before{content:"󱝱"}.mdi-brush-outline:before{content:"󱨍"}.mdi-brush-variant:before{content:"󱠓"}.mdi-bucket:before{content:"󱐕"}.mdi-bucket-outline:before{content:"󱐖"}.mdi-buffet:before{content:"󰕸"}.mdi-bug:before{content:"󰃤"}.mdi-bug-check:before{content:"󰨮"}.mdi-bug-check-outline:before{content:"󰨯"}.mdi-bug-outline:before{content:"󰨰"}.mdi-bug-pause:before{content:"󱫵"}.mdi-bug-pause-outline:before{content:"󱫶"}.mdi-bug-play:before{content:"󱫷"}.mdi-bug-play-outline:before{content:"󱫸"}.mdi-bug-stop:before{content:"󱫹"}.mdi-bug-stop-outline:before{content:"󱫺"}.mdi-bugle:before{content:"󰶴"}.mdi-bulkhead-light:before{content:"󱨯"}.mdi-bulldozer:before{content:"󰬢"}.mdi-bullet:before{content:"󰳳"}.mdi-bulletin-board:before{content:"󰃥"}.mdi-bullhorn:before{content:"󰃦"}.mdi-bullhorn-outline:before{content:"󰬣"}.mdi-bullhorn-variant:before{content:"󱥮"}.mdi-bullhorn-variant-outline:before{content:"󱥯"}.mdi-bullseye:before{content:"󰗝"}.mdi-bullseye-arrow:before{content:"󰣉"}.mdi-bulma:before{content:"󱋧"}.mdi-bunk-bed:before{content:"󱌂"}.mdi-bunk-bed-outline:before{content:"󰂗"}.mdi-bus:before{content:"󰃧"}.mdi-bus-alert:before{content:"󰪙"}.mdi-bus-articulated-end:before{content:"󰞜"}.mdi-bus-articulated-front:before{content:"󰞝"}.mdi-bus-clock:before{content:"󰣊"}.mdi-bus-double-decker:before{content:"󰞞"}.mdi-bus-electric:before{content:"󱤝"}.mdi-bus-marker:before{content:"󱈒"}.mdi-bus-multiple:before{content:"󰼿"}.mdi-bus-school:before{content:"󰞟"}.mdi-bus-side:before{content:"󰞠"}.mdi-bus-sign:before{content:"󱳁"}.mdi-bus-stop:before{content:"󱀒"}.mdi-bus-stop-covered:before{content:"󱀓"}.mdi-bus-stop-uncovered:before{content:"󱀔"}.mdi-bus-wrench:before{content:"󱳂"}.mdi-butterfly:before{content:"󱖉"}.mdi-butterfly-outline:before{content:"󱖊"}.mdi-button-cursor:before{content:"󱭏"}.mdi-button-pointer:before{content:"󱭐"}.mdi-cabin-a-frame:before{content:"󱢌"}.mdi-cable-data:before{content:"󱎔"}.mdi-cached:before{content:"󰃨"}.mdi-cactus:before{content:"󰶵"}.mdi-cake:before{content:"󰃩"}.mdi-cake-layered:before{content:"󰃪"}.mdi-cake-variant:before{content:"󰃫"}.mdi-cake-variant-outline:before{content:"󱟰"}.mdi-calculator:before{content:"󰃬"}.mdi-calculator-variant:before{content:"󰪚"}.mdi-calculator-variant-outline:before{content:"󱖦"}.mdi-calendar:before{content:"󰃭"}.mdi-calendar-account:before{content:"󰻗"}.mdi-calendar-account-outline:before{content:"󰻘"}.mdi-calendar-alert:before{content:"󰨱"}.mdi-calendar-alert-outline:before{content:"󱭢"}.mdi-calendar-arrow-left:before{content:"󱄴"}.mdi-calendar-arrow-right:before{content:"󱄵"}.mdi-calendar-badge:before{content:"󱮝"}.mdi-calendar-badge-outline:before{content:"󱮞"}.mdi-calendar-blank:before{content:"󰃮"}.mdi-calendar-blank-multiple:before{content:"󱁳"}.mdi-calendar-blank-outline:before{content:"󰭦"}.mdi-calendar-check:before{content:"󰃯"}.mdi-calendar-check-outline:before{content:"󰱄"}.mdi-calendar-clock:before{content:"󰃰"}.mdi-calendar-clock-outline:before{content:"󱛡"}.mdi-calendar-collapse-horizontal:before{content:"󱢝"}.mdi-calendar-collapse-horizontal-outline:before{content:"󱭣"}.mdi-calendar-cursor:before{content:"󱕻"}.mdi-calendar-cursor-outline:before{content:"󱭤"}.mdi-calendar-edit:before{content:"󰢧"}.mdi-calendar-edit-outline:before{content:"󱭥"}.mdi-calendar-end:before{content:"󱙬"}.mdi-calendar-end-outline:before{content:"󱭦"}.mdi-calendar-expand-horizontal:before{content:"󱢞"}.mdi-calendar-expand-horizontal-outline:before{content:"󱭧"}.mdi-calendar-export:before{content:"󰬤"}.mdi-calendar-export-outline:before{content:"󱭨"}.mdi-calendar-filter:before{content:"󱨲"}.mdi-calendar-filter-outline:before{content:"󱨳"}.mdi-calendar-heart:before{content:"󰧒"}.mdi-calendar-heart-outline:before{content:"󱭩"}.mdi-calendar-import:before{content:"󰬥"}.mdi-calendar-import-outline:before{content:"󱭪"}.mdi-calendar-lock:before{content:"󱙁"}.mdi-calendar-lock-open:before{content:"󱭛"}.mdi-calendar-lock-open-outline:before{content:"󱭜"}.mdi-calendar-lock-outline:before{content:"󱙂"}.mdi-calendar-minus:before{content:"󰵜"}.mdi-calendar-minus-outline:before{content:"󱭫"}.mdi-calendar-month:before{content:"󰸗"}.mdi-calendar-month-outline:before{content:"󰸘"}.mdi-calendar-multiple:before{content:"󰃱"}.mdi-calendar-multiple-check:before{content:"󰃲"}.mdi-calendar-multiselect:before{content:"󰨲"}.mdi-calendar-multiselect-outline:before{content:"󱭕"}.mdi-calendar-outline:before{content:"󰭧"}.mdi-calendar-plus:before{content:"󰃳"}.mdi-calendar-plus-outline:before{content:"󱭬"}.mdi-calendar-question:before{content:"󰚒"}.mdi-calendar-question-outline:before{content:"󱭭"}.mdi-calendar-range:before{content:"󰙹"}.mdi-calendar-range-outline:before{content:"󰭨"}.mdi-calendar-refresh:before{content:"󰇡"}.mdi-calendar-refresh-outline:before{content:"󰈃"}.mdi-calendar-remove:before{content:"󰃴"}.mdi-calendar-remove-outline:before{content:"󰱅"}.mdi-calendar-search:before{content:"󰥌"}.mdi-calendar-search-outline:before{content:"󱭮"}.mdi-calendar-star:before{content:"󰧓"}.mdi-calendar-star-four-points:before{content:"󱰟"}.mdi-calendar-star-outline:before{content:"󱭓"}.mdi-calendar-start:before{content:"󱙭"}.mdi-calendar-start-outline:before{content:"󱭯"}.mdi-calendar-sync:before{content:"󰺎"}.mdi-calendar-sync-outline:before{content:"󰺏"}.mdi-calendar-text:before{content:"󰃵"}.mdi-calendar-text-outline:before{content:"󰱆"}.mdi-calendar-today:before{content:"󰃶"}.mdi-calendar-today-outline:before{content:"󱨰"}.mdi-calendar-week:before{content:"󰨳"}.mdi-calendar-week-begin:before{content:"󰨴"}.mdi-calendar-week-begin-outline:before{content:"󱨱"}.mdi-calendar-week-outline:before{content:"󱨴"}.mdi-calendar-weekend:before{content:"󰻙"}.mdi-calendar-weekend-outline:before{content:"󰻚"}.mdi-call-made:before{content:"󰃷"}.mdi-call-merge:before{content:"󰃸"}.mdi-call-missed:before{content:"󰃹"}.mdi-call-received:before{content:"󰃺"}.mdi-call-split:before{content:"󰃻"}.mdi-camcorder:before{content:"󰃼"}.mdi-camcorder-off:before{content:"󰃿"}.mdi-camera:before{content:"󰄀"}.mdi-camera-account:before{content:"󰣋"}.mdi-camera-burst:before{content:"󰚓"}.mdi-camera-control:before{content:"󰭩"}.mdi-camera-document:before{content:"󱡱"}.mdi-camera-document-off:before{content:"󱡲"}.mdi-camera-enhance:before{content:"󰄁"}.mdi-camera-enhance-outline:before{content:"󰭪"}.mdi-camera-flip:before{content:"󱗙"}.mdi-camera-flip-outline:before{content:"󱗚"}.mdi-camera-front:before{content:"󰄂"}.mdi-camera-front-variant:before{content:"󰄃"}.mdi-camera-gopro:before{content:"󰞡"}.mdi-camera-image:before{content:"󰣌"}.mdi-camera-iris:before{content:"󰄄"}.mdi-camera-lock:before{content:"󱨔"}.mdi-camera-lock-open:before{content:"󱰍"}.mdi-camera-lock-open-outline:before{content:"󱰎"}.mdi-camera-lock-outline:before{content:"󱨕"}.mdi-camera-marker:before{content:"󱦧"}.mdi-camera-marker-outline:before{content:"󱦨"}.mdi-camera-metering-center:before{content:"󰞢"}.mdi-camera-metering-matrix:before{content:"󰞣"}.mdi-camera-metering-partial:before{content:"󰞤"}.mdi-camera-metering-spot:before{content:"󰞥"}.mdi-camera-off:before{content:"󰗟"}.mdi-camera-off-outline:before{content:"󱦿"}.mdi-camera-outline:before{content:"󰵝"}.mdi-camera-party-mode:before{content:"󰄅"}.mdi-camera-plus:before{content:"󰻛"}.mdi-camera-plus-outline:before{content:"󰻜"}.mdi-camera-rear:before{content:"󰄆"}.mdi-camera-rear-variant:before{content:"󰄇"}.mdi-camera-retake:before{content:"󰸙"}.mdi-camera-retake-outline:before{content:"󰸚"}.mdi-camera-switch:before{content:"󰄈"}.mdi-camera-switch-outline:before{content:"󰡊"}.mdi-camera-timer:before{content:"󰄉"}.mdi-camera-wireless:before{content:"󰶶"}.mdi-camera-wireless-outline:before{content:"󰶷"}.mdi-campfire:before{content:"󰻝"}.mdi-cancel:before{content:"󰜺"}.mdi-candelabra:before{content:"󱟒"}.mdi-candelabra-fire:before{content:"󱟓"}.mdi-candle:before{content:"󰗢"}.mdi-candy:before{content:"󱥰"}.mdi-candy-off:before{content:"󱥱"}.mdi-candy-off-outline:before{content:"󱥲"}.mdi-candy-outline:before{content:"󱥳"}.mdi-candycane:before{content:"󰄊"}.mdi-cannabis:before{content:"󰞦"}.mdi-cannabis-off:before{content:"󱙮"}.mdi-caps-lock:before{content:"󰪛"}.mdi-car:before{content:"󰄋"}.mdi-car-2-plus:before{content:"󱀕"}.mdi-car-3-plus:before{content:"󱀖"}.mdi-car-arrow-left:before{content:"󱎲"}.mdi-car-arrow-right:before{content:"󱎳"}.mdi-car-back:before{content:"󰸛"}.mdi-car-battery:before{content:"󰄌"}.mdi-car-brake-abs:before{content:"󰱇"}.mdi-car-brake-alert:before{content:"󰱈"}.mdi-car-brake-fluid-level:before{content:"󱤉"}.mdi-car-brake-hold:before{content:"󰵞"}.mdi-car-brake-low-pressure:before{content:"󱤊"}.mdi-car-brake-parking:before{content:"󰵟"}.mdi-car-brake-retarder:before{content:"󱀗"}.mdi-car-brake-temperature:before{content:"󱤋"}.mdi-car-brake-worn-linings:before{content:"󱤌"}.mdi-car-child-seat:before{content:"󰾣"}.mdi-car-clock:before{content:"󱥴"}.mdi-car-clutch:before{content:"󱀘"}.mdi-car-cog:before{content:"󱏌"}.mdi-car-connected:before{content:"󰄍"}.mdi-car-convertible:before{content:"󰞧"}.mdi-car-coolant-level:before{content:"󱀙"}.mdi-car-cruise-control:before{content:"󰵠"}.mdi-car-defrost-front:before{content:"󰵡"}.mdi-car-defrost-rear:before{content:"󰵢"}.mdi-car-door:before{content:"󰭫"}.mdi-car-door-lock:before{content:"󱂝"}.mdi-car-door-lock-open:before{content:"󱲁"}.mdi-car-electric:before{content:"󰭬"}.mdi-car-electric-outline:before{content:"󱖵"}.mdi-car-emergency:before{content:"󱘏"}.mdi-car-esp:before{content:"󰱉"}.mdi-car-estate:before{content:"󰞨"}.mdi-car-hatchback:before{content:"󰞩"}.mdi-car-info:before{content:"󱆾"}.mdi-car-key:before{content:"󰭭"}.mdi-car-lifted-pickup:before{content:"󱔭"}.mdi-car-light-alert:before{content:"󱤍"}.mdi-car-light-dimmed:before{content:"󰱊"}.mdi-car-light-fog:before{content:"󰱋"}.mdi-car-light-high:before{content:"󰱌"}.mdi-car-limousine:before{content:"󰣍"}.mdi-car-multiple:before{content:"󰭮"}.mdi-car-off:before{content:"󰸜"}.mdi-car-outline:before{content:"󱓭"}.mdi-car-parking-lights:before{content:"󰵣"}.mdi-car-pickup:before{content:"󰞪"}.mdi-car-search:before{content:"󱮍"}.mdi-car-search-outline:before{content:"󱮎"}.mdi-car-seat:before{content:"󰾤"}.mdi-car-seat-cooler:before{content:"󰾥"}.mdi-car-seat-heater:before{content:"󰾦"}.mdi-car-select:before{content:"󱡹"}.mdi-car-settings:before{content:"󱏍"}.mdi-car-shift-pattern:before{content:"󰽀"}.mdi-car-side:before{content:"󰞫"}.mdi-car-speed-limiter:before{content:"󱤎"}.mdi-car-sports:before{content:"󰞬"}.mdi-car-tire-alert:before{content:"󰱍"}.mdi-car-traction-control:before{content:"󰵤"}.mdi-car-turbocharger:before{content:"󱀚"}.mdi-car-wash:before{content:"󰄎"}.mdi-car-windshield:before{content:"󱀛"}.mdi-car-windshield-outline:before{content:"󱀜"}.mdi-car-wireless:before{content:"󱡸"}.mdi-car-wrench:before{content:"󱠔"}.mdi-carabiner:before{content:"󱓀"}.mdi-caravan:before{content:"󰞭"}.mdi-card:before{content:"󰭯"}.mdi-card-account-details:before{content:"󰗒"}.mdi-card-account-details-outline:before{content:"󰶫"}.mdi-card-account-details-star:before{content:"󰊣"}.mdi-card-account-details-star-outline:before{content:"󰛛"}.mdi-card-account-mail:before{content:"󰆎"}.mdi-card-account-mail-outline:before{content:"󰺘"}.mdi-card-account-phone:before{content:"󰺙"}.mdi-card-account-phone-outline:before{content:"󰺚"}.mdi-card-bulleted:before{content:"󰭰"}.mdi-card-bulleted-off:before{content:"󰭱"}.mdi-card-bulleted-off-outline:before{content:"󰭲"}.mdi-card-bulleted-outline:before{content:"󰭳"}.mdi-card-bulleted-settings:before{content:"󰭴"}.mdi-card-bulleted-settings-outline:before{content:"󰭵"}.mdi-card-minus:before{content:"󱘀"}.mdi-card-minus-outline:before{content:"󱘁"}.mdi-card-multiple:before{content:"󱟱"}.mdi-card-multiple-outline:before{content:"󱟲"}.mdi-card-off:before{content:"󱘂"}.mdi-card-off-outline:before{content:"󱘃"}.mdi-card-outline:before{content:"󰭶"}.mdi-card-plus:before{content:"󱇿"}.mdi-card-plus-outline:before{content:"󱈀"}.mdi-card-remove:before{content:"󱘄"}.mdi-card-remove-outline:before{content:"󱘅"}.mdi-card-search:before{content:"󱁴"}.mdi-card-search-outline:before{content:"󱁵"}.mdi-card-text:before{content:"󰭷"}.mdi-card-text-outline:before{content:"󰭸"}.mdi-cards:before{content:"󰘸"}.mdi-cards-club:before{content:"󰣎"}.mdi-cards-club-outline:before{content:"󱢟"}.mdi-cards-diamond:before{content:"󰣏"}.mdi-cards-diamond-outline:before{content:"󱀝"}.mdi-cards-heart:before{content:"󰣐"}.mdi-cards-heart-outline:before{content:"󱢠"}.mdi-cards-outline:before{content:"󰘹"}.mdi-cards-playing:before{content:"󱢡"}.mdi-cards-playing-club:before{content:"󱢢"}.mdi-cards-playing-club-multiple:before{content:"󱢣"}.mdi-cards-playing-club-multiple-outline:before{content:"󱢤"}.mdi-cards-playing-club-outline:before{content:"󱢥"}.mdi-cards-playing-diamond:before{content:"󱢦"}.mdi-cards-playing-diamond-multiple:before{content:"󱢧"}.mdi-cards-playing-diamond-multiple-outline:before{content:"󱢨"}.mdi-cards-playing-diamond-outline:before{content:"󱢩"}.mdi-cards-playing-heart:before{content:"󱢪"}.mdi-cards-playing-heart-multiple:before{content:"󱢫"}.mdi-cards-playing-heart-multiple-outline:before{content:"󱢬"}.mdi-cards-playing-heart-outline:before{content:"󱢭"}.mdi-cards-playing-outline:before{content:"󰘺"}.mdi-cards-playing-spade:before{content:"󱢮"}.mdi-cards-playing-spade-multiple:before{content:"󱢯"}.mdi-cards-playing-spade-multiple-outline:before{content:"󱢰"}.mdi-cards-playing-spade-outline:before{content:"󱢱"}.mdi-cards-spade:before{content:"󰣑"}.mdi-cards-spade-outline:before{content:"󱢲"}.mdi-cards-variant:before{content:"󰛇"}.mdi-carrot:before{content:"󰄏"}.mdi-cart:before{content:"󰄐"}.mdi-cart-arrow-down:before{content:"󰵦"}.mdi-cart-arrow-right:before{content:"󰱎"}.mdi-cart-arrow-up:before{content:"󰵧"}.mdi-cart-check:before{content:"󱗪"}.mdi-cart-heart:before{content:"󱣠"}.mdi-cart-minus:before{content:"󰵨"}.mdi-cart-off:before{content:"󰙫"}.mdi-cart-outline:before{content:"󰄑"}.mdi-cart-percent:before{content:"󱮮"}.mdi-cart-plus:before{content:"󰄒"}.mdi-cart-remove:before{content:"󰵩"}.mdi-cart-variant:before{content:"󱗫"}.mdi-case-sensitive-alt:before{content:"󰄓"}.mdi-cash:before{content:"󰄔"}.mdi-cash-100:before{content:"󰄕"}.mdi-cash-check:before{content:"󱓮"}.mdi-cash-clock:before{content:"󱪑"}.mdi-cash-edit:before{content:"󱲫"}.mdi-cash-fast:before{content:"󱡜"}.mdi-cash-lock:before{content:"󱓪"}.mdi-cash-lock-open:before{content:"󱓫"}.mdi-cash-marker:before{content:"󰶸"}.mdi-cash-minus:before{content:"󱉠"}.mdi-cash-multiple:before{content:"󰄖"}.mdi-cash-off:before{content:"󱱹"}.mdi-cash-plus:before{content:"󱉡"}.mdi-cash-refund:before{content:"󰪜"}.mdi-cash-register:before{content:"󰳴"}.mdi-cash-remove:before{content:"󱉢"}.mdi-cash-sync:before{content:"󱪒"}.mdi-cassette:before{content:"󰧔"}.mdi-cast:before{content:"󰄘"}.mdi-cast-audio:before{content:"󱀞"}.mdi-cast-audio-variant:before{content:"󱝉"}.mdi-cast-connected:before{content:"󰄙"}.mdi-cast-education:before{content:"󰸝"}.mdi-cast-off:before{content:"󰞊"}.mdi-cast-variant:before{content:"󰀟"}.mdi-castle:before{content:"󰄚"}.mdi-cat:before{content:"󰄛"}.mdi-cctv:before{content:"󰞮"}.mdi-cctv-off:before{content:"󱡟"}.mdi-ceiling-fan:before{content:"󱞗"}.mdi-ceiling-fan-light:before{content:"󱞘"}.mdi-ceiling-light:before{content:"󰝩"}.mdi-ceiling-light-multiple:before{content:"󱣝"}.mdi-ceiling-light-multiple-outline:before{content:"󱣞"}.mdi-ceiling-light-outline:before{content:"󱟇"}.mdi-cellphone:before{content:"󰄜"}.mdi-cellphone-arrow-down:before{content:"󰧕"}.mdi-cellphone-arrow-down-variant:before{content:"󱧅"}.mdi-cellphone-basic:before{content:"󰄞"}.mdi-cellphone-charging:before{content:"󱎗"}.mdi-cellphone-check:before{content:"󱟽"}.mdi-cellphone-cog:before{content:"󰥑"}.mdi-cellphone-dock:before{content:"󰄟"}.mdi-cellphone-information:before{content:"󰽁"}.mdi-cellphone-key:before{content:"󰥎"}.mdi-cellphone-link:before{content:"󰄡"}.mdi-cellphone-link-off:before{content:"󰄢"}.mdi-cellphone-lock:before{content:"󰥏"}.mdi-cellphone-marker:before{content:"󱠺"}.mdi-cellphone-message:before{content:"󰣓"}.mdi-cellphone-message-off:before{content:"󱃒"}.mdi-cellphone-nfc:before{content:"󰺐"}.mdi-cellphone-nfc-off:before{content:"󱋘"}.mdi-cellphone-off:before{content:"󰥐"}.mdi-cellphone-play:before{content:"󱀟"}.mdi-cellphone-remove:before{content:"󰥍"}.mdi-cellphone-screenshot:before{content:"󰨵"}.mdi-cellphone-settings:before{content:"󰄣"}.mdi-cellphone-sound:before{content:"󰥒"}.mdi-cellphone-text:before{content:"󰣒"}.mdi-cellphone-wireless:before{content:"󰠕"}.mdi-centos:before{content:"󱄚"}.mdi-certificate:before{content:"󰄤"}.mdi-certificate-outline:before{content:"󱆈"}.mdi-chair-rolling:before{content:"󰽈"}.mdi-chair-school:before{content:"󰄥"}.mdi-chandelier:before{content:"󱞓"}.mdi-charity:before{content:"󰱏"}.mdi-charity-search:before{content:"󱲂"}.mdi-chart-arc:before{content:"󰄦"}.mdi-chart-areaspline:before{content:"󰄧"}.mdi-chart-areaspline-variant:before{content:"󰺑"}.mdi-chart-bar:before{content:"󰄨"}.mdi-chart-bar-stacked:before{content:"󰝪"}.mdi-chart-bell-curve:before{content:"󰱐"}.mdi-chart-bell-curve-cumulative:before{content:"󰾧"}.mdi-chart-box:before{content:"󱕍"}.mdi-chart-box-multiple:before{content:"󱳍"}.mdi-chart-box-multiple-outline:before{content:"󱳎"}.mdi-chart-box-outline:before{content:"󱕎"}.mdi-chart-box-plus-outline:before{content:"󱕏"}.mdi-chart-bubble:before{content:"󰗣"}.mdi-chart-donut:before{content:"󰞯"}.mdi-chart-donut-variant:before{content:"󰞰"}.mdi-chart-gantt:before{content:"󰙬"}.mdi-chart-histogram:before{content:"󰄩"}.mdi-chart-line:before{content:"󰄪"}.mdi-chart-line-stacked:before{content:"󰝫"}.mdi-chart-line-variant:before{content:"󰞱"}.mdi-chart-multiline:before{content:"󰣔"}.mdi-chart-multiple:before{content:"󱈓"}.mdi-chart-pie:before{content:"󰄫"}.mdi-chart-pie-outline:before{content:"󱯟"}.mdi-chart-ppf:before{content:"󱎀"}.mdi-chart-sankey:before{content:"󱇟"}.mdi-chart-sankey-variant:before{content:"󱇠"}.mdi-chart-scatter-plot:before{content:"󰺒"}.mdi-chart-scatter-plot-hexbin:before{content:"󰙭"}.mdi-chart-timeline:before{content:"󰙮"}.mdi-chart-timeline-variant:before{content:"󰺓"}.mdi-chart-timeline-variant-shimmer:before{content:"󱖶"}.mdi-chart-tree:before{content:"󰺔"}.mdi-chart-waterfall:before{content:"󱤘"}.mdi-chat:before{content:"󰭹"}.mdi-chat-alert:before{content:"󰭺"}.mdi-chat-alert-outline:before{content:"󱋉"}.mdi-chat-minus:before{content:"󱐐"}.mdi-chat-minus-outline:before{content:"󱐓"}.mdi-chat-outline:before{content:"󰻞"}.mdi-chat-plus:before{content:"󱐏"}.mdi-chat-plus-outline:before{content:"󱐒"}.mdi-chat-processing:before{content:"󰭻"}.mdi-chat-processing-outline:before{content:"󱋊"}.mdi-chat-question:before{content:"󱜸"}.mdi-chat-question-outline:before{content:"󱜹"}.mdi-chat-remove:before{content:"󱐑"}.mdi-chat-remove-outline:before{content:"󱐔"}.mdi-chat-sleep:before{content:"󱋑"}.mdi-chat-sleep-outline:before{content:"󱋒"}.mdi-check:before{content:"󰄬"}.mdi-check-all:before{content:"󰄭"}.mdi-check-bold:before{content:"󰸞"}.mdi-check-circle:before{content:"󰗠"}.mdi-check-circle-outline:before{content:"󰗡"}.mdi-check-decagram:before{content:"󰞑"}.mdi-check-decagram-outline:before{content:"󱝀"}.mdi-check-network:before{content:"󰱓"}.mdi-check-network-outline:before{content:"󰱔"}.mdi-check-outline:before{content:"󰡕"}.mdi-check-underline:before{content:"󰸟"}.mdi-check-underline-circle:before{content:"󰸠"}.mdi-check-underline-circle-outline:before{content:"󰸡"}.mdi-checkbook:before{content:"󰪝"}.mdi-checkbook-arrow-left:before{content:"󱰝"}.mdi-checkbook-arrow-right:before{content:"󱰞"}.mdi-checkbox-blank:before{content:"󰄮"}.mdi-checkbox-blank-badge:before{content:"󱅶"}.mdi-checkbox-blank-badge-outline:before{content:"󰄗"}.mdi-checkbox-blank-circle:before{content:"󰄯"}.mdi-checkbox-blank-circle-outline:before{content:"󰄰"}.mdi-checkbox-blank-off:before{content:"󱋬"}.mdi-checkbox-blank-off-outline:before{content:"󱋭"}.mdi-checkbox-blank-outline:before{content:"󰄱"}.mdi-checkbox-intermediate:before{content:"󰡖"}.mdi-checkbox-intermediate-variant:before{content:"󱭔"}.mdi-checkbox-marked:before{content:"󰄲"}.mdi-checkbox-marked-circle:before{content:"󰄳"}.mdi-checkbox-marked-circle-auto-outline:before{content:"󱰦"}.mdi-checkbox-marked-circle-minus-outline:before{content:"󱰧"}.mdi-checkbox-marked-circle-outline:before{content:"󰄴"}.mdi-checkbox-marked-circle-plus-outline:before{content:"󱤧"}.mdi-checkbox-marked-outline:before{content:"󰄵"}.mdi-checkbox-multiple-blank:before{content:"󰄶"}.mdi-checkbox-multiple-blank-circle:before{content:"󰘻"}.mdi-checkbox-multiple-blank-circle-outline:before{content:"󰘼"}.mdi-checkbox-multiple-blank-outline:before{content:"󰄷"}.mdi-checkbox-multiple-marked:before{content:"󰄸"}.mdi-checkbox-multiple-marked-circle:before{content:"󰘽"}.mdi-checkbox-multiple-marked-circle-outline:before{content:"󰘾"}.mdi-checkbox-multiple-marked-outline:before{content:"󰄹"}.mdi-checkbox-multiple-outline:before{content:"󰱑"}.mdi-checkbox-outline:before{content:"󰱒"}.mdi-checkerboard:before{content:"󰄺"}.mdi-checkerboard-minus:before{content:"󱈂"}.mdi-checkerboard-plus:before{content:"󱈁"}.mdi-checkerboard-remove:before{content:"󱈃"}.mdi-cheese:before{content:"󱊹"}.mdi-cheese-off:before{content:"󱏮"}.mdi-chef-hat:before{content:"󰭼"}.mdi-chemical-weapon:before{content:"󰄻"}.mdi-chess-bishop:before{content:"󰡜"}.mdi-chess-king:before{content:"󰡗"}.mdi-chess-knight:before{content:"󰡘"}.mdi-chess-pawn:before{content:"󰡙"}.mdi-chess-queen:before{content:"󰡚"}.mdi-chess-rook:before{content:"󰡛"}.mdi-chevron-double-down:before{content:"󰄼"}.mdi-chevron-double-left:before{content:"󰄽"}.mdi-chevron-double-right:before{content:"󰄾"}.mdi-chevron-double-up:before{content:"󰄿"}.mdi-chevron-down:before{content:"󰅀"}.mdi-chevron-down-box:before{content:"󰧖"}.mdi-chevron-down-box-outline:before{content:"󰧗"}.mdi-chevron-down-circle:before{content:"󰬦"}.mdi-chevron-down-circle-outline:before{content:"󰬧"}.mdi-chevron-left:before{content:"󰅁"}.mdi-chevron-left-box:before{content:"󰧘"}.mdi-chevron-left-box-outline:before{content:"󰧙"}.mdi-chevron-left-circle:before{content:"󰬨"}.mdi-chevron-left-circle-outline:before{content:"󰬩"}.mdi-chevron-right:before{content:"󰅂"}.mdi-chevron-right-box:before{content:"󰧚"}.mdi-chevron-right-box-outline:before{content:"󰧛"}.mdi-chevron-right-circle:before{content:"󰬪"}.mdi-chevron-right-circle-outline:before{content:"󰬫"}.mdi-chevron-triple-down:before{content:"󰶹"}.mdi-chevron-triple-left:before{content:"󰶺"}.mdi-chevron-triple-right:before{content:"󰶻"}.mdi-chevron-triple-up:before{content:"󰶼"}.mdi-chevron-up:before{content:"󰅃"}.mdi-chevron-up-box:before{content:"󰧜"}.mdi-chevron-up-box-outline:before{content:"󰧝"}.mdi-chevron-up-circle:before{content:"󰬬"}.mdi-chevron-up-circle-outline:before{content:"󰬭"}.mdi-chili-alert:before{content:"󱟪"}.mdi-chili-alert-outline:before{content:"󱟫"}.mdi-chili-hot:before{content:"󰞲"}.mdi-chili-hot-outline:before{content:"󱟬"}.mdi-chili-medium:before{content:"󰞳"}.mdi-chili-medium-outline:before{content:"󱟭"}.mdi-chili-mild:before{content:"󰞴"}.mdi-chili-mild-outline:before{content:"󱟮"}.mdi-chili-off:before{content:"󱑧"}.mdi-chili-off-outline:before{content:"󱟯"}.mdi-chip:before{content:"󰘚"}.mdi-church:before{content:"󰅄"}.mdi-church-outline:before{content:"󱬂"}.mdi-cigar:before{content:"󱆉"}.mdi-cigar-off:before{content:"󱐛"}.mdi-circle:before{content:"󰝥"}.mdi-circle-box:before{content:"󱗜"}.mdi-circle-box-outline:before{content:"󱗝"}.mdi-circle-double:before{content:"󰺕"}.mdi-circle-edit-outline:before{content:"󰣕"}.mdi-circle-expand:before{content:"󰺖"}.mdi-circle-half:before{content:"󱎕"}.mdi-circle-half-full:before{content:"󱎖"}.mdi-circle-medium:before{content:"󰧞"}.mdi-circle-multiple:before{content:"󰬸"}.mdi-circle-multiple-outline:before{content:"󰚕"}.mdi-circle-off-outline:before{content:"󱃓"}.mdi-circle-opacity:before{content:"󱡓"}.mdi-circle-outline:before{content:"󰝦"}.mdi-circle-slice-1:before{content:"󰪞"}.mdi-circle-slice-2:before{content:"󰪟"}.mdi-circle-slice-3:before{content:"󰪠"}.mdi-circle-slice-4:before{content:"󰪡"}.mdi-circle-slice-5:before{content:"󰪢"}.mdi-circle-slice-6:before{content:"󰪣"}.mdi-circle-slice-7:before{content:"󰪤"}.mdi-circle-slice-8:before{content:"󰪥"}.mdi-circle-small:before{content:"󰧟"}.mdi-circular-saw:before{content:"󰸢"}.mdi-city:before{content:"󰅆"}.mdi-city-switch:before{content:"󱰨"}.mdi-city-variant:before{content:"󰨶"}.mdi-city-variant-outline:before{content:"󰨷"}.mdi-clipboard:before{content:"󰅇"}.mdi-clipboard-account:before{content:"󰅈"}.mdi-clipboard-account-outline:before{content:"󰱕"}.mdi-clipboard-alert:before{content:"󰅉"}.mdi-clipboard-alert-outline:before{content:"󰳷"}.mdi-clipboard-arrow-down:before{content:"󰅊"}.mdi-clipboard-arrow-down-outline:before{content:"󰱖"}.mdi-clipboard-arrow-left:before{content:"󰅋"}.mdi-clipboard-arrow-left-outline:before{content:"󰳸"}.mdi-clipboard-arrow-right:before{content:"󰳹"}.mdi-clipboard-arrow-right-outline:before{content:"󰳺"}.mdi-clipboard-arrow-up:before{content:"󰱗"}.mdi-clipboard-arrow-up-outline:before{content:"󰱘"}.mdi-clipboard-check:before{content:"󰅎"}.mdi-clipboard-check-multiple:before{content:"󱉣"}.mdi-clipboard-check-multiple-outline:before{content:"󱉤"}.mdi-clipboard-check-outline:before{content:"󰢨"}.mdi-clipboard-clock:before{content:"󱛢"}.mdi-clipboard-clock-outline:before{content:"󱛣"}.mdi-clipboard-edit:before{content:"󱓥"}.mdi-clipboard-edit-outline:before{content:"󱓦"}.mdi-clipboard-file:before{content:"󱉥"}.mdi-clipboard-file-outline:before{content:"󱉦"}.mdi-clipboard-flow:before{content:"󰛈"}.mdi-clipboard-flow-outline:before{content:"󱄗"}.mdi-clipboard-list:before{content:"󱃔"}.mdi-clipboard-list-outline:before{content:"󱃕"}.mdi-clipboard-minus:before{content:"󱘘"}.mdi-clipboard-minus-outline:before{content:"󱘙"}.mdi-clipboard-multiple:before{content:"󱉧"}.mdi-clipboard-multiple-outline:before{content:"󱉨"}.mdi-clipboard-off:before{content:"󱘚"}.mdi-clipboard-off-outline:before{content:"󱘛"}.mdi-clipboard-outline:before{content:"󰅌"}.mdi-clipboard-play:before{content:"󰱙"}.mdi-clipboard-play-multiple:before{content:"󱉩"}.mdi-clipboard-play-multiple-outline:before{content:"󱉪"}.mdi-clipboard-play-outline:before{content:"󰱚"}.mdi-clipboard-plus:before{content:"󰝑"}.mdi-clipboard-plus-outline:before{content:"󱌟"}.mdi-clipboard-pulse:before{content:"󰡝"}.mdi-clipboard-pulse-outline:before{content:"󰡞"}.mdi-clipboard-remove:before{content:"󱘜"}.mdi-clipboard-remove-outline:before{content:"󱘝"}.mdi-clipboard-search:before{content:"󱘞"}.mdi-clipboard-search-outline:before{content:"󱘟"}.mdi-clipboard-text:before{content:"󰅍"}.mdi-clipboard-text-clock:before{content:"󱣹"}.mdi-clipboard-text-clock-outline:before{content:"󱣺"}.mdi-clipboard-text-multiple:before{content:"󱉫"}.mdi-clipboard-text-multiple-outline:before{content:"󱉬"}.mdi-clipboard-text-off:before{content:"󱘠"}.mdi-clipboard-text-off-outline:before{content:"󱘡"}.mdi-clipboard-text-outline:before{content:"󰨸"}.mdi-clipboard-text-play:before{content:"󰱛"}.mdi-clipboard-text-play-outline:before{content:"󰱜"}.mdi-clipboard-text-search:before{content:"󱘢"}.mdi-clipboard-text-search-outline:before{content:"󱘣"}.mdi-clippy:before{content:"󰅏"}.mdi-clock:before{content:"󰥔"}.mdi-clock-alert:before{content:"󰥕"}.mdi-clock-alert-outline:before{content:"󰗎"}.mdi-clock-check:before{content:"󰾨"}.mdi-clock-check-outline:before{content:"󰾩"}.mdi-clock-digital:before{content:"󰺗"}.mdi-clock-edit:before{content:"󱦺"}.mdi-clock-edit-outline:before{content:"󱦻"}.mdi-clock-end:before{content:"󰅑"}.mdi-clock-fast:before{content:"󰅒"}.mdi-clock-in:before{content:"󰅓"}.mdi-clock-minus:before{content:"󱡣"}.mdi-clock-minus-outline:before{content:"󱡤"}.mdi-clock-out:before{content:"󰅔"}.mdi-clock-outline:before{content:"󰅐"}.mdi-clock-plus:before{content:"󱡡"}.mdi-clock-plus-outline:before{content:"󱡢"}.mdi-clock-remove:before{content:"󱡥"}.mdi-clock-remove-outline:before{content:"󱡦"}.mdi-clock-star-four-points:before{content:"󱰩"}.mdi-clock-star-four-points-outline:before{content:"󱰪"}.mdi-clock-start:before{content:"󰅕"}.mdi-clock-time-eight:before{content:"󱑆"}.mdi-clock-time-eight-outline:before{content:"󱑒"}.mdi-clock-time-eleven:before{content:"󱑉"}.mdi-clock-time-eleven-outline:before{content:"󱑕"}.mdi-clock-time-five:before{content:"󱑃"}.mdi-clock-time-five-outline:before{content:"󱑏"}.mdi-clock-time-four:before{content:"󱑂"}.mdi-clock-time-four-outline:before{content:"󱑎"}.mdi-clock-time-nine:before{content:"󱑇"}.mdi-clock-time-nine-outline:before{content:"󱑓"}.mdi-clock-time-one:before{content:"󱐿"}.mdi-clock-time-one-outline:before{content:"󱑋"}.mdi-clock-time-seven:before{content:"󱑅"}.mdi-clock-time-seven-outline:before{content:"󱑑"}.mdi-clock-time-six:before{content:"󱑄"}.mdi-clock-time-six-outline:before{content:"󱑐"}.mdi-clock-time-ten:before{content:"󱑈"}.mdi-clock-time-ten-outline:before{content:"󱑔"}.mdi-clock-time-three:before{content:"󱑁"}.mdi-clock-time-three-outline:before{content:"󱑍"}.mdi-clock-time-twelve:before{content:"󱑊"}.mdi-clock-time-twelve-outline:before{content:"󱑖"}.mdi-clock-time-two:before{content:"󱑀"}.mdi-clock-time-two-outline:before{content:"󱑌"}.mdi-close:before{content:"󰅖"}.mdi-close-box:before{content:"󰅗"}.mdi-close-box-multiple:before{content:"󰱝"}.mdi-close-box-multiple-outline:before{content:"󰱞"}.mdi-close-box-outline:before{content:"󰅘"}.mdi-close-circle:before{content:"󰅙"}.mdi-close-circle-multiple:before{content:"󰘪"}.mdi-close-circle-multiple-outline:before{content:"󰢃"}.mdi-close-circle-outline:before{content:"󰅚"}.mdi-close-network:before{content:"󰅛"}.mdi-close-network-outline:before{content:"󰱟"}.mdi-close-octagon:before{content:"󰅜"}.mdi-close-octagon-outline:before{content:"󰅝"}.mdi-close-outline:before{content:"󰛉"}.mdi-close-thick:before{content:"󱎘"}.mdi-closed-caption:before{content:"󰅞"}.mdi-closed-caption-outline:before{content:"󰶽"}.mdi-cloud:before{content:"󰅟"}.mdi-cloud-alert:before{content:"󰧠"}.mdi-cloud-alert-outline:before{content:"󱯠"}.mdi-cloud-arrow-down:before{content:"󱯡"}.mdi-cloud-arrow-down-outline:before{content:"󱯢"}.mdi-cloud-arrow-left:before{content:"󱯣"}.mdi-cloud-arrow-left-outline:before{content:"󱯤"}.mdi-cloud-arrow-right:before{content:"󱯥"}.mdi-cloud-arrow-right-outline:before{content:"󱯦"}.mdi-cloud-arrow-up:before{content:"󱯧"}.mdi-cloud-arrow-up-outline:before{content:"󱯨"}.mdi-cloud-braces:before{content:"󰞵"}.mdi-cloud-cancel:before{content:"󱯩"}.mdi-cloud-cancel-outline:before{content:"󱯪"}.mdi-cloud-check:before{content:"󱯫"}.mdi-cloud-check-outline:before{content:"󱯬"}.mdi-cloud-check-variant:before{content:"󰅠"}.mdi-cloud-check-variant-outline:before{content:"󱋌"}.mdi-cloud-circle:before{content:"󰅡"}.mdi-cloud-circle-outline:before{content:"󱯭"}.mdi-cloud-clock:before{content:"󱯮"}.mdi-cloud-clock-outline:before{content:"󱯯"}.mdi-cloud-cog:before{content:"󱯰"}.mdi-cloud-cog-outline:before{content:"󱯱"}.mdi-cloud-download:before{content:"󰅢"}.mdi-cloud-download-outline:before{content:"󰭽"}.mdi-cloud-key:before{content:"󱲡"}.mdi-cloud-key-outline:before{content:"󱲢"}.mdi-cloud-lock:before{content:"󱇱"}.mdi-cloud-lock-open:before{content:"󱯲"}.mdi-cloud-lock-open-outline:before{content:"󱯳"}.mdi-cloud-lock-outline:before{content:"󱇲"}.mdi-cloud-minus:before{content:"󱯴"}.mdi-cloud-minus-outline:before{content:"󱯵"}.mdi-cloud-off:before{content:"󱯶"}.mdi-cloud-off-outline:before{content:"󰅤"}.mdi-cloud-outline:before{content:"󰅣"}.mdi-cloud-percent:before{content:"󱨵"}.mdi-cloud-percent-outline:before{content:"󱨶"}.mdi-cloud-plus:before{content:"󱯷"}.mdi-cloud-plus-outline:before{content:"󱯸"}.mdi-cloud-print:before{content:"󰅥"}.mdi-cloud-print-outline:before{content:"󰅦"}.mdi-cloud-question:before{content:"󰨹"}.mdi-cloud-question-outline:before{content:"󱯹"}.mdi-cloud-refresh:before{content:"󱯺"}.mdi-cloud-refresh-outline:before{content:"󱯻"}.mdi-cloud-refresh-variant:before{content:"󰔪"}.mdi-cloud-refresh-variant-outline:before{content:"󱯼"}.mdi-cloud-remove:before{content:"󱯽"}.mdi-cloud-remove-outline:before{content:"󱯾"}.mdi-cloud-search:before{content:"󰥖"}.mdi-cloud-search-outline:before{content:"󰥗"}.mdi-cloud-sync:before{content:"󰘿"}.mdi-cloud-sync-outline:before{content:"󱋖"}.mdi-cloud-tags:before{content:"󰞶"}.mdi-cloud-upload:before{content:"󰅧"}.mdi-cloud-upload-outline:before{content:"󰭾"}.mdi-clouds:before{content:"󱮕"}.mdi-clover:before{content:"󰠖"}.mdi-clover-outline:before{content:"󱱢"}.mdi-coach-lamp:before{content:"󱀠"}.mdi-coach-lamp-variant:before{content:"󱨷"}.mdi-coat-rack:before{content:"󱂞"}.mdi-code-array:before{content:"󰅨"}.mdi-code-block-braces:before{content:"󱲃"}.mdi-code-block-brackets:before{content:"󱲄"}.mdi-code-block-parentheses:before{content:"󱲅"}.mdi-code-block-tags:before{content:"󱲆"}.mdi-code-braces:before{content:"󰅩"}.mdi-code-braces-box:before{content:"󱃖"}.mdi-code-brackets:before{content:"󰅪"}.mdi-code-equal:before{content:"󰅫"}.mdi-code-greater-than:before{content:"󰅬"}.mdi-code-greater-than-or-equal:before{content:"󰅭"}.mdi-code-json:before{content:"󰘦"}.mdi-code-less-than:before{content:"󰅮"}.mdi-code-less-than-or-equal:before{content:"󰅯"}.mdi-code-not-equal:before{content:"󰅰"}.mdi-code-not-equal-variant:before{content:"󰅱"}.mdi-code-parentheses:before{content:"󰅲"}.mdi-code-parentheses-box:before{content:"󱃗"}.mdi-code-string:before{content:"󰅳"}.mdi-code-tags:before{content:"󰅴"}.mdi-code-tags-check:before{content:"󰚔"}.mdi-codepen:before{content:"󰅵"}.mdi-coffee:before{content:"󰅶"}.mdi-coffee-maker:before{content:"󱂟"}.mdi-coffee-maker-check:before{content:"󱤱"}.mdi-coffee-maker-check-outline:before{content:"󱤲"}.mdi-coffee-maker-outline:before{content:"󱠛"}.mdi-coffee-off:before{content:"󰾪"}.mdi-coffee-off-outline:before{content:"󰾫"}.mdi-coffee-outline:before{content:"󰛊"}.mdi-coffee-to-go:before{content:"󰅷"}.mdi-coffee-to-go-outline:before{content:"󱌎"}.mdi-coffin:before{content:"󰭿"}.mdi-cog:before{content:"󰒓"}.mdi-cog-box:before{content:"󰒔"}.mdi-cog-clockwise:before{content:"󱇝"}.mdi-cog-counterclockwise:before{content:"󱇞"}.mdi-cog-off:before{content:"󱏎"}.mdi-cog-off-outline:before{content:"󱏏"}.mdi-cog-outline:before{content:"󰢻"}.mdi-cog-pause:before{content:"󱤳"}.mdi-cog-pause-outline:before{content:"󱤴"}.mdi-cog-play:before{content:"󱤵"}.mdi-cog-play-outline:before{content:"󱤶"}.mdi-cog-refresh:before{content:"󱑞"}.mdi-cog-refresh-outline:before{content:"󱑟"}.mdi-cog-stop:before{content:"󱤷"}.mdi-cog-stop-outline:before{content:"󱤸"}.mdi-cog-sync:before{content:"󱑠"}.mdi-cog-sync-outline:before{content:"󱑡"}.mdi-cog-transfer:before{content:"󱁛"}.mdi-cog-transfer-outline:before{content:"󱁜"}.mdi-cogs:before{content:"󰣖"}.mdi-collage:before{content:"󰙀"}.mdi-collapse-all:before{content:"󰪦"}.mdi-collapse-all-outline:before{content:"󰪧"}.mdi-color-helper:before{content:"󰅹"}.mdi-comma:before{content:"󰸣"}.mdi-comma-box:before{content:"󰸫"}.mdi-comma-box-outline:before{content:"󰸤"}.mdi-comma-circle:before{content:"󰸥"}.mdi-comma-circle-outline:before{content:"󰸦"}.mdi-comment:before{content:"󰅺"}.mdi-comment-account:before{content:"󰅻"}.mdi-comment-account-outline:before{content:"󰅼"}.mdi-comment-alert:before{content:"󰅽"}.mdi-comment-alert-outline:before{content:"󰅾"}.mdi-comment-arrow-left:before{content:"󰧡"}.mdi-comment-arrow-left-outline:before{content:"󰧢"}.mdi-comment-arrow-right:before{content:"󰧣"}.mdi-comment-arrow-right-outline:before{content:"󰧤"}.mdi-comment-bookmark:before{content:"󱖮"}.mdi-comment-bookmark-outline:before{content:"󱖯"}.mdi-comment-check:before{content:"󰅿"}.mdi-comment-check-outline:before{content:"󰆀"}.mdi-comment-edit:before{content:"󱆿"}.mdi-comment-edit-outline:before{content:"󱋄"}.mdi-comment-eye:before{content:"󰨺"}.mdi-comment-eye-outline:before{content:"󰨻"}.mdi-comment-flash:before{content:"󱖰"}.mdi-comment-flash-outline:before{content:"󱖱"}.mdi-comment-minus:before{content:"󱗟"}.mdi-comment-minus-outline:before{content:"󱗠"}.mdi-comment-multiple:before{content:"󰡟"}.mdi-comment-multiple-outline:before{content:"󰆁"}.mdi-comment-off:before{content:"󱗡"}.mdi-comment-off-outline:before{content:"󱗢"}.mdi-comment-outline:before{content:"󰆂"}.mdi-comment-plus:before{content:"󰧥"}.mdi-comment-plus-outline:before{content:"󰆃"}.mdi-comment-processing:before{content:"󰆄"}.mdi-comment-processing-outline:before{content:"󰆅"}.mdi-comment-question:before{content:"󰠗"}.mdi-comment-question-outline:before{content:"󰆆"}.mdi-comment-quote:before{content:"󱀡"}.mdi-comment-quote-outline:before{content:"󱀢"}.mdi-comment-remove:before{content:"󰗞"}.mdi-comment-remove-outline:before{content:"󰆇"}.mdi-comment-search:before{content:"󰨼"}.mdi-comment-search-outline:before{content:"󰨽"}.mdi-comment-text:before{content:"󰆈"}.mdi-comment-text-multiple:before{content:"󰡠"}.mdi-comment-text-multiple-outline:before{content:"󰡡"}.mdi-comment-text-outline:before{content:"󰆉"}.mdi-compare:before{content:"󰆊"}.mdi-compare-horizontal:before{content:"󱒒"}.mdi-compare-remove:before{content:"󱢳"}.mdi-compare-vertical:before{content:"󱒓"}.mdi-compass:before{content:"󰆋"}.mdi-compass-off:before{content:"󰮀"}.mdi-compass-off-outline:before{content:"󰮁"}.mdi-compass-outline:before{content:"󰆌"}.mdi-compass-rose:before{content:"󱎂"}.mdi-compost:before{content:"󱨸"}.mdi-cone:before{content:"󱥌"}.mdi-cone-off:before{content:"󱥍"}.mdi-connection:before{content:"󱘖"}.mdi-console:before{content:"󰆍"}.mdi-console-line:before{content:"󰞷"}.mdi-console-network:before{content:"󰢩"}.mdi-console-network-outline:before{content:"󰱠"}.mdi-consolidate:before{content:"󱃘"}.mdi-contactless-payment:before{content:"󰵪"}.mdi-contactless-payment-circle:before{content:"󰌡"}.mdi-contactless-payment-circle-outline:before{content:"󰐈"}.mdi-contacts:before{content:"󰛋"}.mdi-contacts-outline:before{content:"󰖸"}.mdi-contain:before{content:"󰨾"}.mdi-contain-end:before{content:"󰨿"}.mdi-contain-start:before{content:"󰩀"}.mdi-content-copy:before{content:"󰆏"}.mdi-content-cut:before{content:"󰆐"}.mdi-content-duplicate:before{content:"󰆑"}.mdi-content-paste:before{content:"󰆒"}.mdi-content-save:before{content:"󰆓"}.mdi-content-save-alert:before{content:"󰽂"}.mdi-content-save-alert-outline:before{content:"󰽃"}.mdi-content-save-all:before{content:"󰆔"}.mdi-content-save-all-outline:before{content:"󰽄"}.mdi-content-save-check:before{content:"󱣪"}.mdi-content-save-check-outline:before{content:"󱣫"}.mdi-content-save-cog:before{content:"󱑛"}.mdi-content-save-cog-outline:before{content:"󱑜"}.mdi-content-save-edit:before{content:"󰳻"}.mdi-content-save-edit-outline:before{content:"󰳼"}.mdi-content-save-minus:before{content:"󱭃"}.mdi-content-save-minus-outline:before{content:"󱭄"}.mdi-content-save-move:before{content:"󰸧"}.mdi-content-save-move-outline:before{content:"󰸨"}.mdi-content-save-off:before{content:"󱙃"}.mdi-content-save-off-outline:before{content:"󱙄"}.mdi-content-save-outline:before{content:"󰠘"}.mdi-content-save-plus:before{content:"󱭁"}.mdi-content-save-plus-outline:before{content:"󱭂"}.mdi-content-save-settings:before{content:"󰘛"}.mdi-content-save-settings-outline:before{content:"󰬮"}.mdi-contrast:before{content:"󰆕"}.mdi-contrast-box:before{content:"󰆖"}.mdi-contrast-circle:before{content:"󰆗"}.mdi-controller:before{content:"󰊴"}.mdi-controller-classic:before{content:"󰮂"}.mdi-controller-classic-outline:before{content:"󰮃"}.mdi-controller-off:before{content:"󰊵"}.mdi-cookie:before{content:"󰆘"}.mdi-cookie-alert:before{content:"󱛐"}.mdi-cookie-alert-outline:before{content:"󱛑"}.mdi-cookie-check:before{content:"󱛒"}.mdi-cookie-check-outline:before{content:"󱛓"}.mdi-cookie-clock:before{content:"󱛤"}.mdi-cookie-clock-outline:before{content:"󱛥"}.mdi-cookie-cog:before{content:"󱛔"}.mdi-cookie-cog-outline:before{content:"󱛕"}.mdi-cookie-edit:before{content:"󱛦"}.mdi-cookie-edit-outline:before{content:"󱛧"}.mdi-cookie-lock:before{content:"󱛨"}.mdi-cookie-lock-outline:before{content:"󱛩"}.mdi-cookie-minus:before{content:"󱛚"}.mdi-cookie-minus-outline:before{content:"󱛛"}.mdi-cookie-off:before{content:"󱛪"}.mdi-cookie-off-outline:before{content:"󱛫"}.mdi-cookie-outline:before{content:"󱛞"}.mdi-cookie-plus:before{content:"󱛖"}.mdi-cookie-plus-outline:before{content:"󱛗"}.mdi-cookie-refresh:before{content:"󱛬"}.mdi-cookie-refresh-outline:before{content:"󱛭"}.mdi-cookie-remove:before{content:"󱛘"}.mdi-cookie-remove-outline:before{content:"󱛙"}.mdi-cookie-settings:before{content:"󱛜"}.mdi-cookie-settings-outline:before{content:"󱛝"}.mdi-coolant-temperature:before{content:"󰏈"}.mdi-copyleft:before{content:"󱤹"}.mdi-copyright:before{content:"󰗦"}.mdi-cordova:before{content:"󰥘"}.mdi-corn:before{content:"󰞸"}.mdi-corn-off:before{content:"󱏯"}.mdi-cosine-wave:before{content:"󱑹"}.mdi-counter:before{content:"󰆙"}.mdi-countertop:before{content:"󱠜"}.mdi-countertop-outline:before{content:"󱠝"}.mdi-cow:before{content:"󰆚"}.mdi-cow-off:before{content:"󱣼"}.mdi-cpu-32-bit:before{content:"󰻟"}.mdi-cpu-64-bit:before{content:"󰻠"}.mdi-cradle:before{content:"󱦋"}.mdi-cradle-outline:before{content:"󱦑"}.mdi-crane:before{content:"󰡢"}.mdi-creation:before{content:"󰙴"}.mdi-creation-outline:before{content:"󱰫"}.mdi-creative-commons:before{content:"󰵫"}.mdi-credit-card:before{content:"󰿯"}.mdi-credit-card-check:before{content:"󱏐"}.mdi-credit-card-check-outline:before{content:"󱏑"}.mdi-credit-card-chip:before{content:"󱤏"}.mdi-credit-card-chip-outline:before{content:"󱤐"}.mdi-credit-card-clock:before{content:"󰻡"}.mdi-credit-card-clock-outline:before{content:"󰻢"}.mdi-credit-card-edit:before{content:"󱟗"}.mdi-credit-card-edit-outline:before{content:"󱟘"}.mdi-credit-card-fast:before{content:"󱤑"}.mdi-credit-card-fast-outline:before{content:"󱤒"}.mdi-credit-card-lock:before{content:"󱣧"}.mdi-credit-card-lock-outline:before{content:"󱣨"}.mdi-credit-card-marker:before{content:"󰚨"}.mdi-credit-card-marker-outline:before{content:"󰶾"}.mdi-credit-card-minus:before{content:"󰾬"}.mdi-credit-card-minus-outline:before{content:"󰾭"}.mdi-credit-card-multiple:before{content:"󰿰"}.mdi-credit-card-multiple-outline:before{content:"󰆜"}.mdi-credit-card-off:before{content:"󰿱"}.mdi-credit-card-off-outline:before{content:"󰗤"}.mdi-credit-card-outline:before{content:"󰆛"}.mdi-credit-card-plus:before{content:"󰿲"}.mdi-credit-card-plus-outline:before{content:"󰙶"}.mdi-credit-card-refresh:before{content:"󱙅"}.mdi-credit-card-refresh-outline:before{content:"󱙆"}.mdi-credit-card-refund:before{content:"󰿳"}.mdi-credit-card-refund-outline:before{content:"󰪨"}.mdi-credit-card-remove:before{content:"󰾮"}.mdi-credit-card-remove-outline:before{content:"󰾯"}.mdi-credit-card-scan:before{content:"󰿴"}.mdi-credit-card-scan-outline:before{content:"󰆝"}.mdi-credit-card-search:before{content:"󱙇"}.mdi-credit-card-search-outline:before{content:"󱙈"}.mdi-credit-card-settings:before{content:"󰿵"}.mdi-credit-card-settings-outline:before{content:"󰣗"}.mdi-credit-card-sync:before{content:"󱙉"}.mdi-credit-card-sync-outline:before{content:"󱙊"}.mdi-credit-card-wireless:before{content:"󰠂"}.mdi-credit-card-wireless-off:before{content:"󰕺"}.mdi-credit-card-wireless-off-outline:before{content:"󰕻"}.mdi-credit-card-wireless-outline:before{content:"󰵬"}.mdi-cricket:before{content:"󰵭"}.mdi-crop:before{content:"󰆞"}.mdi-crop-free:before{content:"󰆟"}.mdi-crop-landscape:before{content:"󰆠"}.mdi-crop-portrait:before{content:"󰆡"}.mdi-crop-rotate:before{content:"󰚖"}.mdi-crop-square:before{content:"󰆢"}.mdi-cross:before{content:"󰥓"}.mdi-cross-bolnisi:before{content:"󰳭"}.mdi-cross-celtic:before{content:"󰳵"}.mdi-cross-outline:before{content:"󰳶"}.mdi-crosshairs:before{content:"󰆣"}.mdi-crosshairs-gps:before{content:"󰆤"}.mdi-crosshairs-off:before{content:"󰽅"}.mdi-crosshairs-question:before{content:"󱄶"}.mdi-crowd:before{content:"󱥵"}.mdi-crown:before{content:"󰆥"}.mdi-crown-circle:before{content:"󱟜"}.mdi-crown-circle-outline:before{content:"󱟝"}.mdi-crown-outline:before{content:"󱇐"}.mdi-cryengine:before{content:"󰥙"}.mdi-crystal-ball:before{content:"󰬯"}.mdi-cube:before{content:"󰆦"}.mdi-cube-off:before{content:"󱐜"}.mdi-cube-off-outline:before{content:"󱐝"}.mdi-cube-outline:before{content:"󰆧"}.mdi-cube-scan:before{content:"󰮄"}.mdi-cube-send:before{content:"󰆨"}.mdi-cube-unfolded:before{content:"󰆩"}.mdi-cup:before{content:"󰆪"}.mdi-cup-off:before{content:"󰗥"}.mdi-cup-off-outline:before{content:"󱍽"}.mdi-cup-outline:before{content:"󱌏"}.mdi-cup-water:before{content:"󰆫"}.mdi-cupboard:before{content:"󰽆"}.mdi-cupboard-outline:before{content:"󰽇"}.mdi-cupcake:before{content:"󰥚"}.mdi-curling:before{content:"󰡣"}.mdi-currency-bdt:before{content:"󰡤"}.mdi-currency-brl:before{content:"󰮅"}.mdi-currency-btc:before{content:"󰆬"}.mdi-currency-cny:before{content:"󰞺"}.mdi-currency-eth:before{content:"󰞻"}.mdi-currency-eur:before{content:"󰆭"}.mdi-currency-eur-off:before{content:"󱌕"}.mdi-currency-fra:before{content:"󱨹"}.mdi-currency-gbp:before{content:"󰆮"}.mdi-currency-ils:before{content:"󰱡"}.mdi-currency-inr:before{content:"󰆯"}.mdi-currency-jpy:before{content:"󰞼"}.mdi-currency-krw:before{content:"󰞽"}.mdi-currency-kzt:before{content:"󰡥"}.mdi-currency-mnt:before{content:"󱔒"}.mdi-currency-ngn:before{content:"󰆰"}.mdi-currency-php:before{content:"󰧦"}.mdi-currency-rial:before{content:"󰺜"}.mdi-currency-rub:before{content:"󰆱"}.mdi-currency-rupee:before{content:"󱥶"}.mdi-currency-sign:before{content:"󰞾"}.mdi-currency-thb:before{content:"󱰅"}.mdi-currency-try:before{content:"󰆲"}.mdi-currency-twd:before{content:"󰞿"}.mdi-currency-uah:before{content:"󱮛"}.mdi-currency-usd:before{content:"󰇁"}.mdi-currency-usd-off:before{content:"󰙺"}.mdi-current-ac:before{content:"󱒀"}.mdi-current-dc:before{content:"󰥜"}.mdi-cursor-default:before{content:"󰇀"}.mdi-cursor-default-click:before{content:"󰳽"}.mdi-cursor-default-click-outline:before{content:"󰳾"}.mdi-cursor-default-gesture:before{content:"󱄧"}.mdi-cursor-default-gesture-outline:before{content:"󱄨"}.mdi-cursor-default-outline:before{content:"󰆿"}.mdi-cursor-move:before{content:"󰆾"}.mdi-cursor-pointer:before{content:"󰆽"}.mdi-cursor-text:before{content:"󰗧"}.mdi-curtains:before{content:"󱡆"}.mdi-curtains-closed:before{content:"󱡇"}.mdi-cylinder:before{content:"󱥎"}.mdi-cylinder-off:before{content:"󱥏"}.mdi-dance-ballroom:before{content:"󱗻"}.mdi-dance-pole:before{content:"󱕸"}.mdi-data-matrix:before{content:"󱔼"}.mdi-data-matrix-edit:before{content:"󱔽"}.mdi-data-matrix-minus:before{content:"󱔾"}.mdi-data-matrix-plus:before{content:"󱔿"}.mdi-data-matrix-remove:before{content:"󱕀"}.mdi-data-matrix-scan:before{content:"󱕁"}.mdi-database:before{content:"󰆼"}.mdi-database-alert:before{content:"󱘺"}.mdi-database-alert-outline:before{content:"󱘤"}.mdi-database-arrow-down:before{content:"󱘻"}.mdi-database-arrow-down-outline:before{content:"󱘥"}.mdi-database-arrow-left:before{content:"󱘼"}.mdi-database-arrow-left-outline:before{content:"󱘦"}.mdi-database-arrow-right:before{content:"󱘽"}.mdi-database-arrow-right-outline:before{content:"󱘧"}.mdi-database-arrow-up:before{content:"󱘾"}.mdi-database-arrow-up-outline:before{content:"󱘨"}.mdi-database-check:before{content:"󰪩"}.mdi-database-check-outline:before{content:"󱘩"}.mdi-database-clock:before{content:"󱘿"}.mdi-database-clock-outline:before{content:"󱘪"}.mdi-database-cog:before{content:"󱙋"}.mdi-database-cog-outline:before{content:"󱙌"}.mdi-database-edit:before{content:"󰮆"}.mdi-database-edit-outline:before{content:"󱘫"}.mdi-database-export:before{content:"󰥞"}.mdi-database-export-outline:before{content:"󱘬"}.mdi-database-eye:before{content:"󱤟"}.mdi-database-eye-off:before{content:"󱤠"}.mdi-database-eye-off-outline:before{content:"󱤡"}.mdi-database-eye-outline:before{content:"󱤢"}.mdi-database-import:before{content:"󰥝"}.mdi-database-import-outline:before{content:"󱘭"}.mdi-database-lock:before{content:"󰪪"}.mdi-database-lock-outline:before{content:"󱘮"}.mdi-database-marker:before{content:"󱋶"}.mdi-database-marker-outline:before{content:"󱘯"}.mdi-database-minus:before{content:"󰆻"}.mdi-database-minus-outline:before{content:"󱘰"}.mdi-database-off:before{content:"󱙀"}.mdi-database-off-outline:before{content:"󱘱"}.mdi-database-outline:before{content:"󱘲"}.mdi-database-plus:before{content:"󰆺"}.mdi-database-plus-outline:before{content:"󱘳"}.mdi-database-refresh:before{content:"󰗂"}.mdi-database-refresh-outline:before{content:"󱘴"}.mdi-database-remove:before{content:"󰴀"}.mdi-database-remove-outline:before{content:"󱘵"}.mdi-database-search:before{content:"󰡦"}.mdi-database-search-outline:before{content:"󱘶"}.mdi-database-settings:before{content:"󰴁"}.mdi-database-settings-outline:before{content:"󱘷"}.mdi-database-sync:before{content:"󰳿"}.mdi-database-sync-outline:before{content:"󱘸"}.mdi-death-star:before{content:"󰣘"}.mdi-death-star-variant:before{content:"󰣙"}.mdi-deathly-hallows:before{content:"󰮇"}.mdi-debian:before{content:"󰣚"}.mdi-debug-step-into:before{content:"󰆹"}.mdi-debug-step-out:before{content:"󰆸"}.mdi-debug-step-over:before{content:"󰆷"}.mdi-decagram:before{content:"󰝬"}.mdi-decagram-outline:before{content:"󰝭"}.mdi-decimal:before{content:"󱂡"}.mdi-decimal-comma:before{content:"󱂢"}.mdi-decimal-comma-decrease:before{content:"󱂣"}.mdi-decimal-comma-increase:before{content:"󱂤"}.mdi-decimal-decrease:before{content:"󰆶"}.mdi-decimal-increase:before{content:"󰆵"}.mdi-delete:before{content:"󰆴"}.mdi-delete-alert:before{content:"󱂥"}.mdi-delete-alert-outline:before{content:"󱂦"}.mdi-delete-circle:before{content:"󰚃"}.mdi-delete-circle-outline:before{content:"󰮈"}.mdi-delete-clock:before{content:"󱕖"}.mdi-delete-clock-outline:before{content:"󱕗"}.mdi-delete-empty:before{content:"󰛌"}.mdi-delete-empty-outline:before{content:"󰺝"}.mdi-delete-forever:before{content:"󰗨"}.mdi-delete-forever-outline:before{content:"󰮉"}.mdi-delete-off:before{content:"󱂧"}.mdi-delete-off-outline:before{content:"󱂨"}.mdi-delete-outline:before{content:"󰧧"}.mdi-delete-restore:before{content:"󰠙"}.mdi-delete-sweep:before{content:"󰗩"}.mdi-delete-sweep-outline:before{content:"󰱢"}.mdi-delete-variant:before{content:"󰆳"}.mdi-delta:before{content:"󰇂"}.mdi-desk:before{content:"󱈹"}.mdi-desk-lamp:before{content:"󰥟"}.mdi-desk-lamp-off:before{content:"󱬟"}.mdi-desk-lamp-on:before{content:"󱬠"}.mdi-deskphone:before{content:"󰇃"}.mdi-desktop-classic:before{content:"󰟀"}.mdi-desktop-tower:before{content:"󰇅"}.mdi-desktop-tower-monitor:before{content:"󰪫"}.mdi-details:before{content:"󰇆"}.mdi-dev-to:before{content:"󰵮"}.mdi-developer-board:before{content:"󰚗"}.mdi-deviantart:before{content:"󰇇"}.mdi-devices:before{content:"󰾰"}.mdi-dharmachakra:before{content:"󰥋"}.mdi-diabetes:before{content:"󱄦"}.mdi-dialpad:before{content:"󰘜"}.mdi-diameter:before{content:"󰱣"}.mdi-diameter-outline:before{content:"󰱤"}.mdi-diameter-variant:before{content:"󰱥"}.mdi-diamond:before{content:"󰮊"}.mdi-diamond-outline:before{content:"󰮋"}.mdi-diamond-stone:before{content:"󰇈"}.mdi-diaper-outline:before{content:"󱳏"}.mdi-dice-1:before{content:"󰇊"}.mdi-dice-1-outline:before{content:"󱅊"}.mdi-dice-2:before{content:"󰇋"}.mdi-dice-2-outline:before{content:"󱅋"}.mdi-dice-3:before{content:"󰇌"}.mdi-dice-3-outline:before{content:"󱅌"}.mdi-dice-4:before{content:"󰇍"}.mdi-dice-4-outline:before{content:"󱅍"}.mdi-dice-5:before{content:"󰇎"}.mdi-dice-5-outline:before{content:"󱅎"}.mdi-dice-6:before{content:"󰇏"}.mdi-dice-6-outline:before{content:"󱅏"}.mdi-dice-d10:before{content:"󱅓"}.mdi-dice-d10-outline:before{content:"󰝯"}.mdi-dice-d12:before{content:"󱅔"}.mdi-dice-d12-outline:before{content:"󰡧"}.mdi-dice-d20:before{content:"󱅕"}.mdi-dice-d20-outline:before{content:"󰗪"}.mdi-dice-d4:before{content:"󱅐"}.mdi-dice-d4-outline:before{content:"󰗫"}.mdi-dice-d6:before{content:"󱅑"}.mdi-dice-d6-outline:before{content:"󰗭"}.mdi-dice-d8:before{content:"󱅒"}.mdi-dice-d8-outline:before{content:"󰗬"}.mdi-dice-multiple:before{content:"󰝮"}.mdi-dice-multiple-outline:before{content:"󱅖"}.mdi-digital-ocean:before{content:"󱈷"}.mdi-dip-switch:before{content:"󰟁"}.mdi-directions:before{content:"󰇐"}.mdi-directions-fork:before{content:"󰙁"}.mdi-disc:before{content:"󰗮"}.mdi-disc-alert:before{content:"󰇑"}.mdi-disc-player:before{content:"󰥠"}.mdi-dishwasher:before{content:"󰪬"}.mdi-dishwasher-alert:before{content:"󱆸"}.mdi-dishwasher-off:before{content:"󱆹"}.mdi-disqus:before{content:"󰇒"}.mdi-distribute-horizontal-center:before{content:"󱇉"}.mdi-distribute-horizontal-left:before{content:"󱇈"}.mdi-distribute-horizontal-right:before{content:"󱇊"}.mdi-distribute-vertical-bottom:before{content:"󱇋"}.mdi-distribute-vertical-center:before{content:"󱇌"}.mdi-distribute-vertical-top:before{content:"󱇍"}.mdi-diversify:before{content:"󱡷"}.mdi-diving:before{content:"󱥷"}.mdi-diving-flippers:before{content:"󰶿"}.mdi-diving-helmet:before{content:"󰷀"}.mdi-diving-scuba:before{content:"󱭷"}.mdi-diving-scuba-flag:before{content:"󰷂"}.mdi-diving-scuba-mask:before{content:"󰷁"}.mdi-diving-scuba-tank:before{content:"󰷃"}.mdi-diving-scuba-tank-multiple:before{content:"󰷄"}.mdi-diving-snorkel:before{content:"󰷅"}.mdi-division:before{content:"󰇔"}.mdi-division-box:before{content:"󰇕"}.mdi-dlna:before{content:"󰩁"}.mdi-dna:before{content:"󰚄"}.mdi-dns:before{content:"󰇖"}.mdi-dns-outline:before{content:"󰮌"}.mdi-dock-bottom:before{content:"󱂩"}.mdi-dock-left:before{content:"󱂪"}.mdi-dock-right:before{content:"󱂫"}.mdi-dock-top:before{content:"󱔓"}.mdi-dock-window:before{content:"󱂬"}.mdi-docker:before{content:"󰡨"}.mdi-doctor:before{content:"󰩂"}.mdi-dog:before{content:"󰩃"}.mdi-dog-service:before{content:"󰪭"}.mdi-dog-side:before{content:"󰩄"}.mdi-dog-side-off:before{content:"󱛮"}.mdi-dolby:before{content:"󰚳"}.mdi-dolly:before{content:"󰺞"}.mdi-dolphin:before{content:"󱢴"}.mdi-domain:before{content:"󰇗"}.mdi-domain-off:before{content:"󰵯"}.mdi-domain-plus:before{content:"󱂭"}.mdi-domain-remove:before{content:"󱂮"}.mdi-domain-switch:before{content:"󱰬"}.mdi-dome-light:before{content:"󱐞"}.mdi-domino-mask:before{content:"󱀣"}.mdi-donkey:before{content:"󰟂"}.mdi-door:before{content:"󰠚"}.mdi-door-closed:before{content:"󰠛"}.mdi-door-closed-cancel:before{content:"󱲓"}.mdi-door-closed-lock:before{content:"󱂯"}.mdi-door-open:before{content:"󰠜"}.mdi-door-sliding:before{content:"󱠞"}.mdi-door-sliding-lock:before{content:"󱠟"}.mdi-door-sliding-open:before{content:"󱠠"}.mdi-doorbell:before{content:"󱋦"}.mdi-doorbell-video:before{content:"󰡩"}.mdi-dot-net:before{content:"󰪮"}.mdi-dots-circle:before{content:"󱥸"}.mdi-dots-grid:before{content:"󱗼"}.mdi-dots-hexagon:before{content:"󱗿"}.mdi-dots-horizontal:before{content:"󰇘"}.mdi-dots-horizontal-circle:before{content:"󰟃"}.mdi-dots-horizontal-circle-outline:before{content:"󰮍"}.mdi-dots-square:before{content:"󱗽"}.mdi-dots-triangle:before{content:"󱗾"}.mdi-dots-vertical:before{content:"󰇙"}.mdi-dots-vertical-circle:before{content:"󰟄"}.mdi-dots-vertical-circle-outline:before{content:"󰮎"}.mdi-download:before{content:"󰇚"}.mdi-download-box:before{content:"󱑢"}.mdi-download-box-outline:before{content:"󱑣"}.mdi-download-circle:before{content:"󱑤"}.mdi-download-circle-outline:before{content:"󱑥"}.mdi-download-lock:before{content:"󱌠"}.mdi-download-lock-outline:before{content:"󱌡"}.mdi-download-multiple:before{content:"󰧩"}.mdi-download-multiple-outline:before{content:"󱳐"}.mdi-download-network:before{content:"󰛴"}.mdi-download-network-outline:before{content:"󰱦"}.mdi-download-off:before{content:"󱂰"}.mdi-download-off-outline:before{content:"󱂱"}.mdi-download-outline:before{content:"󰮏"}.mdi-drag:before{content:"󰇛"}.mdi-drag-horizontal:before{content:"󰇜"}.mdi-drag-horizontal-variant:before{content:"󱋰"}.mdi-drag-variant:before{content:"󰮐"}.mdi-drag-vertical:before{content:"󰇝"}.mdi-drag-vertical-variant:before{content:"󱋱"}.mdi-drama-masks:before{content:"󰴂"}.mdi-draw:before{content:"󰽉"}.mdi-draw-pen:before{content:"󱦹"}.mdi-drawing:before{content:"󰇞"}.mdi-drawing-box:before{content:"󰇟"}.mdi-dresser:before{content:"󰽊"}.mdi-dresser-outline:before{content:"󰽋"}.mdi-drone:before{content:"󰇢"}.mdi-dropbox:before{content:"󰇣"}.mdi-drupal:before{content:"󰇤"}.mdi-duck:before{content:"󰇥"}.mdi-dumbbell:before{content:"󰇦"}.mdi-dump-truck:before{content:"󰱧"}.mdi-ear-hearing:before{content:"󰟅"}.mdi-ear-hearing-loop:before{content:"󱫮"}.mdi-ear-hearing-off:before{content:"󰩅"}.mdi-earbuds:before{content:"󱡏"}.mdi-earbuds-off:before{content:"󱡐"}.mdi-earbuds-off-outline:before{content:"󱡑"}.mdi-earbuds-outline:before{content:"󱡒"}.mdi-earth:before{content:"󰇧"}.mdi-earth-arrow-down:before{content:"󱲇"}.mdi-earth-arrow-left:before{content:"󱲈"}.mdi-earth-arrow-right:before{content:"󱌑"}.mdi-earth-arrow-up:before{content:"󱲉"}.mdi-earth-box:before{content:"󰛍"}.mdi-earth-box-minus:before{content:"󱐇"}.mdi-earth-box-off:before{content:"󰛎"}.mdi-earth-box-plus:before{content:"󱐆"}.mdi-earth-box-remove:before{content:"󱐈"}.mdi-earth-minus:before{content:"󱐄"}.mdi-earth-off:before{content:"󰇨"}.mdi-earth-plus:before{content:"󱐃"}.mdi-earth-remove:before{content:"󱐅"}.mdi-egg:before{content:"󰪯"}.mdi-egg-easter:before{content:"󰪰"}.mdi-egg-fried:before{content:"󱡊"}.mdi-egg-off:before{content:"󱏰"}.mdi-egg-off-outline:before{content:"󱏱"}.mdi-egg-outline:before{content:"󱏲"}.mdi-eiffel-tower:before{content:"󱕫"}.mdi-eight-track:before{content:"󰧪"}.mdi-eject:before{content:"󰇪"}.mdi-eject-circle:before{content:"󱬣"}.mdi-eject-circle-outline:before{content:"󱬤"}.mdi-eject-outline:before{content:"󰮑"}.mdi-electric-switch:before{content:"󰺟"}.mdi-electric-switch-closed:before{content:"󱃙"}.mdi-electron-framework:before{content:"󱀤"}.mdi-elephant:before{content:"󰟆"}.mdi-elevation-decline:before{content:"󰇫"}.mdi-elevation-rise:before{content:"󰇬"}.mdi-elevator:before{content:"󰇭"}.mdi-elevator-down:before{content:"󱋂"}.mdi-elevator-passenger:before{content:"󱎁"}.mdi-elevator-passenger-off:before{content:"󱥹"}.mdi-elevator-passenger-off-outline:before{content:"󱥺"}.mdi-elevator-passenger-outline:before{content:"󱥻"}.mdi-elevator-up:before{content:"󱋁"}.mdi-ellipse:before{content:"󰺠"}.mdi-ellipse-outline:before{content:"󰺡"}.mdi-email:before{content:"󰇮"}.mdi-email-alert:before{content:"󰛏"}.mdi-email-alert-outline:before{content:"󰵂"}.mdi-email-arrow-left:before{content:"󱃚"}.mdi-email-arrow-left-outline:before{content:"󱃛"}.mdi-email-arrow-right:before{content:"󱃜"}.mdi-email-arrow-right-outline:before{content:"󱃝"}.mdi-email-box:before{content:"󰴃"}.mdi-email-check:before{content:"󰪱"}.mdi-email-check-outline:before{content:"󰪲"}.mdi-email-edit:before{content:"󰻣"}.mdi-email-edit-outline:before{content:"󰻤"}.mdi-email-fast:before{content:"󱡯"}.mdi-email-fast-outline:before{content:"󱡰"}.mdi-email-heart-outline:before{content:"󱱛"}.mdi-email-lock:before{content:"󰇱"}.mdi-email-lock-outline:before{content:"󱭡"}.mdi-email-mark-as-unread:before{content:"󰮒"}.mdi-email-minus:before{content:"󰻥"}.mdi-email-minus-outline:before{content:"󰻦"}.mdi-email-multiple:before{content:"󰻧"}.mdi-email-multiple-outline:before{content:"󰻨"}.mdi-email-newsletter:before{content:"󰾱"}.mdi-email-off:before{content:"󱏣"}.mdi-email-off-outline:before{content:"󱏤"}.mdi-email-open:before{content:"󰇯"}.mdi-email-open-heart-outline:before{content:"󱱜"}.mdi-email-open-multiple:before{content:"󰻩"}.mdi-email-open-multiple-outline:before{content:"󰻪"}.mdi-email-open-outline:before{content:"󰗯"}.mdi-email-outline:before{content:"󰇰"}.mdi-email-plus:before{content:"󰧫"}.mdi-email-plus-outline:before{content:"󰧬"}.mdi-email-remove:before{content:"󱙡"}.mdi-email-remove-outline:before{content:"󱙢"}.mdi-email-seal:before{content:"󱥛"}.mdi-email-seal-outline:before{content:"󱥜"}.mdi-email-search:before{content:"󰥡"}.mdi-email-search-outline:before{content:"󰥢"}.mdi-email-sync:before{content:"󱋇"}.mdi-email-sync-outline:before{content:"󱋈"}.mdi-email-variant:before{content:"󰗰"}.mdi-ember:before{content:"󰬰"}.mdi-emby:before{content:"󰚴"}.mdi-emoticon:before{content:"󰱨"}.mdi-emoticon-angry:before{content:"󰱩"}.mdi-emoticon-angry-outline:before{content:"󰱪"}.mdi-emoticon-confused:before{content:"󱃞"}.mdi-emoticon-confused-outline:before{content:"󱃟"}.mdi-emoticon-cool:before{content:"󰱫"}.mdi-emoticon-cool-outline:before{content:"󰇳"}.mdi-emoticon-cry:before{content:"󰱬"}.mdi-emoticon-cry-outline:before{content:"󰱭"}.mdi-emoticon-dead:before{content:"󰱮"}.mdi-emoticon-dead-outline:before{content:"󰚛"}.mdi-emoticon-devil:before{content:"󰱯"}.mdi-emoticon-devil-outline:before{content:"󰇴"}.mdi-emoticon-excited:before{content:"󰱰"}.mdi-emoticon-excited-outline:before{content:"󰚜"}.mdi-emoticon-frown:before{content:"󰽌"}.mdi-emoticon-frown-outline:before{content:"󰽍"}.mdi-emoticon-happy:before{content:"󰱱"}.mdi-emoticon-happy-outline:before{content:"󰇵"}.mdi-emoticon-kiss:before{content:"󰱲"}.mdi-emoticon-kiss-outline:before{content:"󰱳"}.mdi-emoticon-lol:before{content:"󱈔"}.mdi-emoticon-lol-outline:before{content:"󱈕"}.mdi-emoticon-minus:before{content:"󱲲"}.mdi-emoticon-minus-outline:before{content:"󱲳"}.mdi-emoticon-neutral:before{content:"󰱴"}.mdi-emoticon-neutral-outline:before{content:"󰇶"}.mdi-emoticon-outline:before{content:"󰇲"}.mdi-emoticon-plus:before{content:"󱲴"}.mdi-emoticon-plus-outline:before{content:"󱲵"}.mdi-emoticon-poop:before{content:"󰇷"}.mdi-emoticon-poop-outline:before{content:"󰱵"}.mdi-emoticon-remove:before{content:"󱲶"}.mdi-emoticon-remove-outline:before{content:"󱲷"}.mdi-emoticon-sad:before{content:"󰱶"}.mdi-emoticon-sad-outline:before{content:"󰇸"}.mdi-emoticon-sick:before{content:"󱕼"}.mdi-emoticon-sick-outline:before{content:"󱕽"}.mdi-emoticon-tongue:before{content:"󰇹"}.mdi-emoticon-tongue-outline:before{content:"󰱷"}.mdi-emoticon-wink:before{content:"󰱸"}.mdi-emoticon-wink-outline:before{content:"󰱹"}.mdi-engine:before{content:"󰇺"}.mdi-engine-off:before{content:"󰩆"}.mdi-engine-off-outline:before{content:"󰩇"}.mdi-engine-outline:before{content:"󰇻"}.mdi-epsilon:before{content:"󱃠"}.mdi-equal:before{content:"󰇼"}.mdi-equal-box:before{content:"󰇽"}.mdi-equalizer:before{content:"󰺢"}.mdi-equalizer-outline:before{content:"󰺣"}.mdi-eraser:before{content:"󰇾"}.mdi-eraser-variant:before{content:"󰙂"}.mdi-escalator:before{content:"󰇿"}.mdi-escalator-box:before{content:"󱎙"}.mdi-escalator-down:before{content:"󱋀"}.mdi-escalator-up:before{content:"󱊿"}.mdi-eslint:before{content:"󰱺"}.mdi-et:before{content:"󰪳"}.mdi-ethereum:before{content:"󰡪"}.mdi-ethernet:before{content:"󰈀"}.mdi-ethernet-cable:before{content:"󰈁"}.mdi-ethernet-cable-off:before{content:"󰈂"}.mdi-ethernet-off:before{content:"󱳑"}.mdi-ev-plug-ccs1:before{content:"󱔙"}.mdi-ev-plug-ccs2:before{content:"󱔚"}.mdi-ev-plug-chademo:before{content:"󱔛"}.mdi-ev-plug-tesla:before{content:"󱔜"}.mdi-ev-plug-type1:before{content:"󱔝"}.mdi-ev-plug-type2:before{content:"󱔞"}.mdi-ev-station:before{content:"󰗱"}.mdi-evernote:before{content:"󰈄"}.mdi-excavator:before{content:"󱀥"}.mdi-exclamation:before{content:"󰈅"}.mdi-exclamation-thick:before{content:"󱈸"}.mdi-exit-run:before{content:"󰩈"}.mdi-exit-to-app:before{content:"󰈆"}.mdi-expand-all:before{content:"󰪴"}.mdi-expand-all-outline:before{content:"󰪵"}.mdi-expansion-card:before{content:"󰢮"}.mdi-expansion-card-variant:before{content:"󰾲"}.mdi-exponent:before{content:"󰥣"}.mdi-exponent-box:before{content:"󰥤"}.mdi-export:before{content:"󰈇"}.mdi-export-variant:before{content:"󰮓"}.mdi-eye:before{content:"󰈈"}.mdi-eye-arrow-left:before{content:"󱣽"}.mdi-eye-arrow-left-outline:before{content:"󱣾"}.mdi-eye-arrow-right:before{content:"󱣿"}.mdi-eye-arrow-right-outline:before{content:"󱤀"}.mdi-eye-check:before{content:"󰴄"}.mdi-eye-check-outline:before{content:"󰴅"}.mdi-eye-circle:before{content:"󰮔"}.mdi-eye-circle-outline:before{content:"󰮕"}.mdi-eye-closed:before{content:"󱲣"}.mdi-eye-lock:before{content:"󱰆"}.mdi-eye-lock-open:before{content:"󱰇"}.mdi-eye-lock-open-outline:before{content:"󱰈"}.mdi-eye-lock-outline:before{content:"󱰉"}.mdi-eye-minus:before{content:"󱀦"}.mdi-eye-minus-outline:before{content:"󱀧"}.mdi-eye-off:before{content:"󰈉"}.mdi-eye-off-outline:before{content:"󰛑"}.mdi-eye-outline:before{content:"󰛐"}.mdi-eye-plus:before{content:"󰡫"}.mdi-eye-plus-outline:before{content:"󰡬"}.mdi-eye-refresh:before{content:"󱥼"}.mdi-eye-refresh-outline:before{content:"󱥽"}.mdi-eye-remove:before{content:"󱗣"}.mdi-eye-remove-outline:before{content:"󱗤"}.mdi-eye-settings:before{content:"󰡭"}.mdi-eye-settings-outline:before{content:"󰡮"}.mdi-eyedropper:before{content:"󰈊"}.mdi-eyedropper-minus:before{content:"󱏝"}.mdi-eyedropper-off:before{content:"󱏟"}.mdi-eyedropper-plus:before{content:"󱏜"}.mdi-eyedropper-remove:before{content:"󱏞"}.mdi-eyedropper-variant:before{content:"󰈋"}.mdi-face-agent:before{content:"󰵰"}.mdi-face-man:before{content:"󰙃"}.mdi-face-man-outline:before{content:"󰮖"}.mdi-face-man-profile:before{content:"󰙄"}.mdi-face-man-shimmer:before{content:"󱗌"}.mdi-face-man-shimmer-outline:before{content:"󱗍"}.mdi-face-mask:before{content:"󱖆"}.mdi-face-mask-outline:before{content:"󱖇"}.mdi-face-recognition:before{content:"󰱻"}.mdi-face-woman:before{content:"󱁷"}.mdi-face-woman-outline:before{content:"󱁸"}.mdi-face-woman-profile:before{content:"󱁶"}.mdi-face-woman-shimmer:before{content:"󱗎"}.mdi-face-woman-shimmer-outline:before{content:"󱗏"}.mdi-facebook:before{content:"󰈌"}.mdi-facebook-gaming:before{content:"󰟝"}.mdi-facebook-messenger:before{content:"󰈎"}.mdi-facebook-workplace:before{content:"󰬱"}.mdi-factory:before{content:"󰈏"}.mdi-family-tree:before{content:"󱘎"}.mdi-fan:before{content:"󰈐"}.mdi-fan-alert:before{content:"󱑬"}.mdi-fan-auto:before{content:"󱜝"}.mdi-fan-chevron-down:before{content:"󱑭"}.mdi-fan-chevron-up:before{content:"󱑮"}.mdi-fan-clock:before{content:"󱨺"}.mdi-fan-minus:before{content:"󱑰"}.mdi-fan-off:before{content:"󰠝"}.mdi-fan-plus:before{content:"󱑯"}.mdi-fan-remove:before{content:"󱑱"}.mdi-fan-speed-1:before{content:"󱑲"}.mdi-fan-speed-2:before{content:"󱑳"}.mdi-fan-speed-3:before{content:"󱑴"}.mdi-fast-forward:before{content:"󰈑"}.mdi-fast-forward-10:before{content:"󰵱"}.mdi-fast-forward-15:before{content:"󱤺"}.mdi-fast-forward-30:before{content:"󰴆"}.mdi-fast-forward-45:before{content:"󱬒"}.mdi-fast-forward-5:before{content:"󱇸"}.mdi-fast-forward-60:before{content:"󱘋"}.mdi-fast-forward-outline:before{content:"󰛒"}.mdi-faucet:before{content:"󱬩"}.mdi-faucet-variant:before{content:"󱬪"}.mdi-fax:before{content:"󰈒"}.mdi-feather:before{content:"󰛓"}.mdi-feature-search:before{content:"󰩉"}.mdi-feature-search-outline:before{content:"󰩊"}.mdi-fedora:before{content:"󰣛"}.mdi-fence:before{content:"󱞚"}.mdi-fence-electric:before{content:"󱟶"}.mdi-fencing:before{content:"󱓁"}.mdi-ferris-wheel:before{content:"󰺤"}.mdi-ferry:before{content:"󰈓"}.mdi-file:before{content:"󰈔"}.mdi-file-account:before{content:"󰜻"}.mdi-file-account-outline:before{content:"󱀨"}.mdi-file-alert:before{content:"󰩋"}.mdi-file-alert-outline:before{content:"󰩌"}.mdi-file-arrow-left-right:before{content:"󱪓"}.mdi-file-arrow-left-right-outline:before{content:"󱪔"}.mdi-file-arrow-up-down:before{content:"󱪕"}.mdi-file-arrow-up-down-outline:before{content:"󱪖"}.mdi-file-cabinet:before{content:"󰪶"}.mdi-file-cad:before{content:"󰻫"}.mdi-file-cad-box:before{content:"󰻬"}.mdi-file-cancel:before{content:"󰷆"}.mdi-file-cancel-outline:before{content:"󰷇"}.mdi-file-certificate:before{content:"󱆆"}.mdi-file-certificate-outline:before{content:"󱆇"}.mdi-file-chart:before{content:"󰈕"}.mdi-file-chart-check:before{content:"󱧆"}.mdi-file-chart-check-outline:before{content:"󱧇"}.mdi-file-chart-outline:before{content:"󱀩"}.mdi-file-check:before{content:"󰈖"}.mdi-file-check-outline:before{content:"󰸩"}.mdi-file-clock:before{content:"󱋡"}.mdi-file-clock-outline:before{content:"󱋢"}.mdi-file-cloud:before{content:"󰈗"}.mdi-file-cloud-outline:before{content:"󱀪"}.mdi-file-code:before{content:"󰈮"}.mdi-file-code-outline:before{content:"󱀫"}.mdi-file-cog:before{content:"󱁻"}.mdi-file-cog-outline:before{content:"󱁼"}.mdi-file-compare:before{content:"󰢪"}.mdi-file-delimited:before{content:"󰈘"}.mdi-file-delimited-outline:before{content:"󰺥"}.mdi-file-document:before{content:"󰈙"}.mdi-file-document-alert:before{content:"󱪗"}.mdi-file-document-alert-outline:before{content:"󱪘"}.mdi-file-document-arrow-right:before{content:"󱰏"}.mdi-file-document-arrow-right-outline:before{content:"󱰐"}.mdi-file-document-check:before{content:"󱪙"}.mdi-file-document-check-outline:before{content:"󱪚"}.mdi-file-document-edit:before{content:"󰷈"}.mdi-file-document-edit-outline:before{content:"󰷉"}.mdi-file-document-minus:before{content:"󱪛"}.mdi-file-document-minus-outline:before{content:"󱪜"}.mdi-file-document-multiple:before{content:"󱔗"}.mdi-file-document-multiple-outline:before{content:"󱔘"}.mdi-file-document-outline:before{content:"󰧮"}.mdi-file-document-plus:before{content:"󱪝"}.mdi-file-document-plus-outline:before{content:"󱪞"}.mdi-file-document-refresh:before{content:"󱱺"}.mdi-file-document-refresh-outline:before{content:"󱱻"}.mdi-file-document-remove:before{content:"󱪟"}.mdi-file-document-remove-outline:before{content:"󱪠"}.mdi-file-download:before{content:"󰥥"}.mdi-file-download-outline:before{content:"󰥦"}.mdi-file-edit:before{content:"󱇧"}.mdi-file-edit-outline:before{content:"󱇨"}.mdi-file-excel:before{content:"󰈛"}.mdi-file-excel-box:before{content:"󰈜"}.mdi-file-excel-box-outline:before{content:"󱀬"}.mdi-file-excel-outline:before{content:"󱀭"}.mdi-file-export:before{content:"󰈝"}.mdi-file-export-outline:before{content:"󱀮"}.mdi-file-eye:before{content:"󰷊"}.mdi-file-eye-outline:before{content:"󰷋"}.mdi-file-find:before{content:"󰈞"}.mdi-file-find-outline:before{content:"󰮗"}.mdi-file-gif-box:before{content:"󰵸"}.mdi-file-hidden:before{content:"󰘓"}.mdi-file-image:before{content:"󰈟"}.mdi-file-image-marker:before{content:"󱝲"}.mdi-file-image-marker-outline:before{content:"󱝳"}.mdi-file-image-minus:before{content:"󱤻"}.mdi-file-image-minus-outline:before{content:"󱤼"}.mdi-file-image-outline:before{content:"󰺰"}.mdi-file-image-plus:before{content:"󱤽"}.mdi-file-image-plus-outline:before{content:"󱤾"}.mdi-file-image-remove:before{content:"󱤿"}.mdi-file-image-remove-outline:before{content:"󱥀"}.mdi-file-import:before{content:"󰈠"}.mdi-file-import-outline:before{content:"󱀯"}.mdi-file-jpg-box:before{content:"󰈥"}.mdi-file-key:before{content:"󱆄"}.mdi-file-key-outline:before{content:"󱆅"}.mdi-file-link:before{content:"󱅷"}.mdi-file-link-outline:before{content:"󱅸"}.mdi-file-lock:before{content:"󰈡"}.mdi-file-lock-open:before{content:"󱧈"}.mdi-file-lock-open-outline:before{content:"󱧉"}.mdi-file-lock-outline:before{content:"󱀰"}.mdi-file-marker:before{content:"󱝴"}.mdi-file-marker-outline:before{content:"󱝵"}.mdi-file-minus:before{content:"󱪡"}.mdi-file-minus-outline:before{content:"󱪢"}.mdi-file-move:before{content:"󰪹"}.mdi-file-move-outline:before{content:"󱀱"}.mdi-file-multiple:before{content:"󰈢"}.mdi-file-multiple-outline:before{content:"󱀲"}.mdi-file-music:before{content:"󰈣"}.mdi-file-music-outline:before{content:"󰸪"}.mdi-file-outline:before{content:"󰈤"}.mdi-file-pdf-box:before{content:"󰈦"}.mdi-file-percent:before{content:"󰠞"}.mdi-file-percent-outline:before{content:"󱀳"}.mdi-file-phone:before{content:"󱅹"}.mdi-file-phone-outline:before{content:"󱅺"}.mdi-file-plus:before{content:"󰝒"}.mdi-file-plus-outline:before{content:"󰻭"}.mdi-file-png-box:before{content:"󰸭"}.mdi-file-powerpoint:before{content:"󰈧"}.mdi-file-powerpoint-box:before{content:"󰈨"}.mdi-file-powerpoint-box-outline:before{content:"󱀴"}.mdi-file-powerpoint-outline:before{content:"󱀵"}.mdi-file-presentation-box:before{content:"󰈩"}.mdi-file-question:before{content:"󰡯"}.mdi-file-question-outline:before{content:"󱀶"}.mdi-file-refresh:before{content:"󰤘"}.mdi-file-refresh-outline:before{content:"󰕁"}.mdi-file-remove:before{content:"󰮘"}.mdi-file-remove-outline:before{content:"󱀷"}.mdi-file-replace:before{content:"󰬲"}.mdi-file-replace-outline:before{content:"󰬳"}.mdi-file-restore:before{content:"󰙰"}.mdi-file-restore-outline:before{content:"󱀸"}.mdi-file-rotate-left:before{content:"󱨻"}.mdi-file-rotate-left-outline:before{content:"󱨼"}.mdi-file-rotate-right:before{content:"󱨽"}.mdi-file-rotate-right-outline:before{content:"󱨾"}.mdi-file-search:before{content:"󰱼"}.mdi-file-search-outline:before{content:"󰱽"}.mdi-file-send:before{content:"󰈪"}.mdi-file-send-outline:before{content:"󱀹"}.mdi-file-settings:before{content:"󱁹"}.mdi-file-settings-outline:before{content:"󱁺"}.mdi-file-sign:before{content:"󱧃"}.mdi-file-star:before{content:"󱀺"}.mdi-file-star-four-points:before{content:"󱰭"}.mdi-file-star-four-points-outline:before{content:"󱰮"}.mdi-file-star-outline:before{content:"󱀻"}.mdi-file-swap:before{content:"󰾴"}.mdi-file-swap-outline:before{content:"󰾵"}.mdi-file-sync:before{content:"󱈖"}.mdi-file-sync-outline:before{content:"󱈗"}.mdi-file-table:before{content:"󰱾"}.mdi-file-table-box:before{content:"󱃡"}.mdi-file-table-box-multiple:before{content:"󱃢"}.mdi-file-table-box-multiple-outline:before{content:"󱃣"}.mdi-file-table-box-outline:before{content:"󱃤"}.mdi-file-table-outline:before{content:"󰱿"}.mdi-file-tree:before{content:"󰙅"}.mdi-file-tree-outline:before{content:"󱏒"}.mdi-file-undo:before{content:"󰣜"}.mdi-file-undo-outline:before{content:"󱀼"}.mdi-file-upload:before{content:"󰩍"}.mdi-file-upload-outline:before{content:"󰩎"}.mdi-file-video:before{content:"󰈫"}.mdi-file-video-outline:before{content:"󰸬"}.mdi-file-word:before{content:"󰈬"}.mdi-file-word-box:before{content:"󰈭"}.mdi-file-word-box-outline:before{content:"󱀽"}.mdi-file-word-outline:before{content:"󱀾"}.mdi-file-xml-box:before{content:"󱭋"}.mdi-film:before{content:"󰈯"}.mdi-filmstrip:before{content:"󰈰"}.mdi-filmstrip-box:before{content:"󰌲"}.mdi-filmstrip-box-multiple:before{content:"󰴘"}.mdi-filmstrip-off:before{content:"󰈱"}.mdi-filter:before{content:"󰈲"}.mdi-filter-check:before{content:"󱣬"}.mdi-filter-check-outline:before{content:"󱣭"}.mdi-filter-cog:before{content:"󱪣"}.mdi-filter-cog-outline:before{content:"󱪤"}.mdi-filter-menu:before{content:"󱃥"}.mdi-filter-menu-outline:before{content:"󱃦"}.mdi-filter-minus:before{content:"󰻮"}.mdi-filter-minus-outline:before{content:"󰻯"}.mdi-filter-multiple:before{content:"󱨿"}.mdi-filter-multiple-outline:before{content:"󱩀"}.mdi-filter-off:before{content:"󱓯"}.mdi-filter-off-outline:before{content:"󱓰"}.mdi-filter-outline:before{content:"󰈳"}.mdi-filter-plus:before{content:"󰻰"}.mdi-filter-plus-outline:before{content:"󰻱"}.mdi-filter-remove:before{content:"󰈴"}.mdi-filter-remove-outline:before{content:"󰈵"}.mdi-filter-settings:before{content:"󱪥"}.mdi-filter-settings-outline:before{content:"󱪦"}.mdi-filter-variant:before{content:"󰈶"}.mdi-filter-variant-minus:before{content:"󱄒"}.mdi-filter-variant-plus:before{content:"󱄓"}.mdi-filter-variant-remove:before{content:"󱀿"}.mdi-finance:before{content:"󰠟"}.mdi-find-replace:before{content:"󰛔"}.mdi-fingerprint:before{content:"󰈷"}.mdi-fingerprint-off:before{content:"󰺱"}.mdi-fire:before{content:"󰈸"}.mdi-fire-alert:before{content:"󱗗"}.mdi-fire-circle:before{content:"󱠇"}.mdi-fire-extinguisher:before{content:"󰻲"}.mdi-fire-hydrant:before{content:"󱄷"}.mdi-fire-hydrant-alert:before{content:"󱄸"}.mdi-fire-hydrant-off:before{content:"󱄹"}.mdi-fire-off:before{content:"󱜢"}.mdi-fire-station:before{content:"󱳃"}.mdi-fire-truck:before{content:"󰢫"}.mdi-firebase:before{content:"󰥧"}.mdi-firefox:before{content:"󰈹"}.mdi-fireplace:before{content:"󰸮"}.mdi-fireplace-off:before{content:"󰸯"}.mdi-firewire:before{content:"󰖾"}.mdi-firework:before{content:"󰸰"}.mdi-firework-off:before{content:"󱜣"}.mdi-fish:before{content:"󰈺"}.mdi-fish-off:before{content:"󱏳"}.mdi-fishbowl:before{content:"󰻳"}.mdi-fishbowl-outline:before{content:"󰻴"}.mdi-fit-to-page:before{content:"󰻵"}.mdi-fit-to-page-outline:before{content:"󰻶"}.mdi-fit-to-screen:before{content:"󱣴"}.mdi-fit-to-screen-outline:before{content:"󱣵"}.mdi-flag:before{content:"󰈻"}.mdi-flag-checkered:before{content:"󰈼"}.mdi-flag-minus:before{content:"󰮙"}.mdi-flag-minus-outline:before{content:"󱂲"}.mdi-flag-off:before{content:"󱣮"}.mdi-flag-off-outline:before{content:"󱣯"}.mdi-flag-outline:before{content:"󰈽"}.mdi-flag-plus:before{content:"󰮚"}.mdi-flag-plus-outline:before{content:"󱂳"}.mdi-flag-remove:before{content:"󰮛"}.mdi-flag-remove-outline:before{content:"󱂴"}.mdi-flag-triangle:before{content:"󰈿"}.mdi-flag-variant:before{content:"󰉀"}.mdi-flag-variant-minus:before{content:"󱮴"}.mdi-flag-variant-minus-outline:before{content:"󱮵"}.mdi-flag-variant-off:before{content:"󱮰"}.mdi-flag-variant-off-outline:before{content:"󱮱"}.mdi-flag-variant-outline:before{content:"󰈾"}.mdi-flag-variant-plus:before{content:"󱮲"}.mdi-flag-variant-plus-outline:before{content:"󱮳"}.mdi-flag-variant-remove:before{content:"󱮶"}.mdi-flag-variant-remove-outline:before{content:"󱮷"}.mdi-flare:before{content:"󰵲"}.mdi-flash:before{content:"󰉁"}.mdi-flash-alert:before{content:"󰻷"}.mdi-flash-alert-outline:before{content:"󰻸"}.mdi-flash-auto:before{content:"󰉂"}.mdi-flash-off:before{content:"󰉃"}.mdi-flash-off-outline:before{content:"󱭅"}.mdi-flash-outline:before{content:"󰛕"}.mdi-flash-red-eye:before{content:"󰙻"}.mdi-flash-triangle:before{content:"󱬝"}.mdi-flash-triangle-outline:before{content:"󱬞"}.mdi-flashlight:before{content:"󰉄"}.mdi-flashlight-off:before{content:"󰉅"}.mdi-flask:before{content:"󰂓"}.mdi-flask-empty:before{content:"󰂔"}.mdi-flask-empty-minus:before{content:"󱈺"}.mdi-flask-empty-minus-outline:before{content:"󱈻"}.mdi-flask-empty-off:before{content:"󱏴"}.mdi-flask-empty-off-outline:before{content:"󱏵"}.mdi-flask-empty-outline:before{content:"󰂕"}.mdi-flask-empty-plus:before{content:"󱈼"}.mdi-flask-empty-plus-outline:before{content:"󱈽"}.mdi-flask-empty-remove:before{content:"󱈾"}.mdi-flask-empty-remove-outline:before{content:"󱈿"}.mdi-flask-minus:before{content:"󱉀"}.mdi-flask-minus-outline:before{content:"󱉁"}.mdi-flask-off:before{content:"󱏶"}.mdi-flask-off-outline:before{content:"󱏷"}.mdi-flask-outline:before{content:"󰂖"}.mdi-flask-plus:before{content:"󱉂"}.mdi-flask-plus-outline:before{content:"󱉃"}.mdi-flask-remove:before{content:"󱉄"}.mdi-flask-remove-outline:before{content:"󱉅"}.mdi-flask-round-bottom:before{content:"󱉋"}.mdi-flask-round-bottom-empty:before{content:"󱉌"}.mdi-flask-round-bottom-empty-outline:before{content:"󱉍"}.mdi-flask-round-bottom-outline:before{content:"󱉎"}.mdi-fleur-de-lis:before{content:"󱌃"}.mdi-flip-horizontal:before{content:"󱃧"}.mdi-flip-to-back:before{content:"󰉇"}.mdi-flip-to-front:before{content:"󰉈"}.mdi-flip-vertical:before{content:"󱃨"}.mdi-floor-lamp:before{content:"󰣝"}.mdi-floor-lamp-dual:before{content:"󱁀"}.mdi-floor-lamp-dual-outline:before{content:"󱟎"}.mdi-floor-lamp-outline:before{content:"󱟈"}.mdi-floor-lamp-torchiere:before{content:"󱝇"}.mdi-floor-lamp-torchiere-outline:before{content:"󱟖"}.mdi-floor-lamp-torchiere-variant:before{content:"󱁁"}.mdi-floor-lamp-torchiere-variant-outline:before{content:"󱟏"}.mdi-floor-plan:before{content:"󰠡"}.mdi-floppy:before{content:"󰉉"}.mdi-floppy-variant:before{content:"󰧯"}.mdi-flower:before{content:"󰉊"}.mdi-flower-outline:before{content:"󰧰"}.mdi-flower-pollen:before{content:"󱢅"}.mdi-flower-pollen-outline:before{content:"󱢆"}.mdi-flower-poppy:before{content:"󰴈"}.mdi-flower-tulip:before{content:"󰧱"}.mdi-flower-tulip-outline:before{content:"󰧲"}.mdi-focus-auto:before{content:"󰽎"}.mdi-focus-field:before{content:"󰽏"}.mdi-focus-field-horizontal:before{content:"󰽐"}.mdi-focus-field-vertical:before{content:"󰽑"}.mdi-folder:before{content:"󰉋"}.mdi-folder-account:before{content:"󰉌"}.mdi-folder-account-outline:before{content:"󰮜"}.mdi-folder-alert:before{content:"󰷌"}.mdi-folder-alert-outline:before{content:"󰷍"}.mdi-folder-arrow-down:before{content:"󱧨"}.mdi-folder-arrow-down-outline:before{content:"󱧩"}.mdi-folder-arrow-left:before{content:"󱧪"}.mdi-folder-arrow-left-outline:before{content:"󱧫"}.mdi-folder-arrow-left-right:before{content:"󱧬"}.mdi-folder-arrow-left-right-outline:before{content:"󱧭"}.mdi-folder-arrow-right:before{content:"󱧮"}.mdi-folder-arrow-right-outline:before{content:"󱧯"}.mdi-folder-arrow-up:before{content:"󱧰"}.mdi-folder-arrow-up-down:before{content:"󱧱"}.mdi-folder-arrow-up-down-outline:before{content:"󱧲"}.mdi-folder-arrow-up-outline:before{content:"󱧳"}.mdi-folder-cancel:before{content:"󱧴"}.mdi-folder-cancel-outline:before{content:"󱧵"}.mdi-folder-check:before{content:"󱥾"}.mdi-folder-check-outline:before{content:"󱥿"}.mdi-folder-clock:before{content:"󰪺"}.mdi-folder-clock-outline:before{content:"󰪻"}.mdi-folder-cog:before{content:"󱁿"}.mdi-folder-cog-outline:before{content:"󱂀"}.mdi-folder-download:before{content:"󰉍"}.mdi-folder-download-outline:before{content:"󱃩"}.mdi-folder-edit:before{content:"󰣞"}.mdi-folder-edit-outline:before{content:"󰷎"}.mdi-folder-eye:before{content:"󱞊"}.mdi-folder-eye-outline:before{content:"󱞋"}.mdi-folder-file:before{content:"󱧶"}.mdi-folder-file-outline:before{content:"󱧷"}.mdi-folder-google-drive:before{content:"󰉎"}.mdi-folder-heart:before{content:"󱃪"}.mdi-folder-heart-outline:before{content:"󱃫"}.mdi-folder-hidden:before{content:"󱞞"}.mdi-folder-home:before{content:"󱂵"}.mdi-folder-home-outline:before{content:"󱂶"}.mdi-folder-image:before{content:"󰉏"}.mdi-folder-information:before{content:"󱂷"}.mdi-folder-information-outline:before{content:"󱂸"}.mdi-folder-key:before{content:"󰢬"}.mdi-folder-key-network:before{content:"󰢭"}.mdi-folder-key-network-outline:before{content:"󰲀"}.mdi-folder-key-outline:before{content:"󱃬"}.mdi-folder-lock:before{content:"󰉐"}.mdi-folder-lock-open:before{content:"󰉑"}.mdi-folder-lock-open-outline:before{content:"󱪧"}.mdi-folder-lock-outline:before{content:"󱪨"}.mdi-folder-marker:before{content:"󱉭"}.mdi-folder-marker-outline:before{content:"󱉮"}.mdi-folder-minus:before{content:"󱭉"}.mdi-folder-minus-outline:before{content:"󱭊"}.mdi-folder-move:before{content:"󰉒"}.mdi-folder-move-outline:before{content:"󱉆"}.mdi-folder-multiple:before{content:"󰉓"}.mdi-folder-multiple-image:before{content:"󰉔"}.mdi-folder-multiple-outline:before{content:"󰉕"}.mdi-folder-multiple-plus:before{content:"󱑾"}.mdi-folder-multiple-plus-outline:before{content:"󱑿"}.mdi-folder-music:before{content:"󱍙"}.mdi-folder-music-outline:before{content:"󱍚"}.mdi-folder-network:before{content:"󰡰"}.mdi-folder-network-outline:before{content:"󰲁"}.mdi-folder-off:before{content:"󱧸"}.mdi-folder-off-outline:before{content:"󱧹"}.mdi-folder-open:before{content:"󰝰"}.mdi-folder-open-outline:before{content:"󰷏"}.mdi-folder-outline:before{content:"󰉖"}.mdi-folder-play:before{content:"󱧺"}.mdi-folder-play-outline:before{content:"󱧻"}.mdi-folder-plus:before{content:"󰉗"}.mdi-folder-plus-outline:before{content:"󰮝"}.mdi-folder-pound:before{content:"󰴉"}.mdi-folder-pound-outline:before{content:"󰴊"}.mdi-folder-question:before{content:"󱧊"}.mdi-folder-question-outline:before{content:"󱧋"}.mdi-folder-refresh:before{content:"󰝉"}.mdi-folder-refresh-outline:before{content:"󰕂"}.mdi-folder-remove:before{content:"󰉘"}.mdi-folder-remove-outline:before{content:"󰮞"}.mdi-folder-search:before{content:"󰥨"}.mdi-folder-search-outline:before{content:"󰥩"}.mdi-folder-settings:before{content:"󱁽"}.mdi-folder-settings-outline:before{content:"󱁾"}.mdi-folder-star:before{content:"󰚝"}.mdi-folder-star-multiple:before{content:"󱏓"}.mdi-folder-star-multiple-outline:before{content:"󱏔"}.mdi-folder-star-outline:before{content:"󰮟"}.mdi-folder-swap:before{content:"󰾶"}.mdi-folder-swap-outline:before{content:"󰾷"}.mdi-folder-sync:before{content:"󰴋"}.mdi-folder-sync-outline:before{content:"󰴌"}.mdi-folder-table:before{content:"󱋣"}.mdi-folder-table-outline:before{content:"󱋤"}.mdi-folder-text:before{content:"󰲂"}.mdi-folder-text-outline:before{content:"󰲃"}.mdi-folder-upload:before{content:"󰉙"}.mdi-folder-upload-outline:before{content:"󱃭"}.mdi-folder-wrench:before{content:"󱧼"}.mdi-folder-wrench-outline:before{content:"󱧽"}.mdi-folder-zip:before{content:"󰛫"}.mdi-folder-zip-outline:before{content:"󰞹"}.mdi-font-awesome:before{content:"󰀺"}.mdi-food:before{content:"󰉚"}.mdi-food-apple:before{content:"󰉛"}.mdi-food-apple-outline:before{content:"󰲄"}.mdi-food-croissant:before{content:"󰟈"}.mdi-food-drumstick:before{content:"󱐟"}.mdi-food-drumstick-off:before{content:"󱑨"}.mdi-food-drumstick-off-outline:before{content:"󱑩"}.mdi-food-drumstick-outline:before{content:"󱐠"}.mdi-food-fork-drink:before{content:"󰗲"}.mdi-food-halal:before{content:"󱕲"}.mdi-food-hot-dog:before{content:"󱡋"}.mdi-food-kosher:before{content:"󱕳"}.mdi-food-off:before{content:"󰗳"}.mdi-food-off-outline:before{content:"󱤕"}.mdi-food-outline:before{content:"󱤖"}.mdi-food-steak:before{content:"󱑪"}.mdi-food-steak-off:before{content:"󱑫"}.mdi-food-takeout-box:before{content:"󱠶"}.mdi-food-takeout-box-outline:before{content:"󱠷"}.mdi-food-turkey:before{content:"󱜜"}.mdi-food-variant:before{content:"󰉜"}.mdi-food-variant-off:before{content:"󱏥"}.mdi-foot-print:before{content:"󰽒"}.mdi-football:before{content:"󰉝"}.mdi-football-australian:before{content:"󰉞"}.mdi-football-helmet:before{content:"󰉟"}.mdi-forest:before{content:"󱢗"}.mdi-forest-outline:before{content:"󱱣"}.mdi-forklift:before{content:"󰟉"}.mdi-form-dropdown:before{content:"󱐀"}.mdi-form-select:before{content:"󱐁"}.mdi-form-textarea:before{content:"󱂕"}.mdi-form-textbox:before{content:"󰘎"}.mdi-form-textbox-lock:before{content:"󱍝"}.mdi-form-textbox-password:before{content:"󰟵"}.mdi-format-align-bottom:before{content:"󰝓"}.mdi-format-align-center:before{content:"󰉠"}.mdi-format-align-justify:before{content:"󰉡"}.mdi-format-align-left:before{content:"󰉢"}.mdi-format-align-middle:before{content:"󰝔"}.mdi-format-align-right:before{content:"󰉣"}.mdi-format-align-top:before{content:"󰝕"}.mdi-format-annotation-minus:before{content:"󰪼"}.mdi-format-annotation-plus:before{content:"󰙆"}.mdi-format-bold:before{content:"󰉤"}.mdi-format-clear:before{content:"󰉥"}.mdi-format-color-fill:before{content:"󰉦"}.mdi-format-color-highlight:before{content:"󰸱"}.mdi-format-color-marker-cancel:before{content:"󱌓"}.mdi-format-color-text:before{content:"󰚞"}.mdi-format-columns:before{content:"󰣟"}.mdi-format-float-center:before{content:"󰉧"}.mdi-format-float-left:before{content:"󰉨"}.mdi-format-float-none:before{content:"󰉩"}.mdi-format-float-right:before{content:"󰉪"}.mdi-format-font:before{content:"󰛖"}.mdi-format-font-size-decrease:before{content:"󰧳"}.mdi-format-font-size-increase:before{content:"󰧴"}.mdi-format-header-1:before{content:"󰉫"}.mdi-format-header-2:before{content:"󰉬"}.mdi-format-header-3:before{content:"󰉭"}.mdi-format-header-4:before{content:"󰉮"}.mdi-format-header-5:before{content:"󰉯"}.mdi-format-header-6:before{content:"󰉰"}.mdi-format-header-decrease:before{content:"󰉱"}.mdi-format-header-equal:before{content:"󰉲"}.mdi-format-header-increase:before{content:"󰉳"}.mdi-format-header-pound:before{content:"󰉴"}.mdi-format-horizontal-align-center:before{content:"󰘞"}.mdi-format-horizontal-align-left:before{content:"󰘟"}.mdi-format-horizontal-align-right:before{content:"󰘠"}.mdi-format-indent-decrease:before{content:"󰉵"}.mdi-format-indent-increase:before{content:"󰉶"}.mdi-format-italic:before{content:"󰉷"}.mdi-format-letter-case:before{content:"󰬴"}.mdi-format-letter-case-lower:before{content:"󰬵"}.mdi-format-letter-case-upper:before{content:"󰬶"}.mdi-format-letter-ends-with:before{content:"󰾸"}.mdi-format-letter-matches:before{content:"󰾹"}.mdi-format-letter-spacing:before{content:"󱥖"}.mdi-format-letter-spacing-variant:before{content:"󱫻"}.mdi-format-letter-starts-with:before{content:"󰾺"}.mdi-format-line-height:before{content:"󱫼"}.mdi-format-line-spacing:before{content:"󰉸"}.mdi-format-line-style:before{content:"󰗈"}.mdi-format-line-weight:before{content:"󰗉"}.mdi-format-list-bulleted:before{content:"󰉹"}.mdi-format-list-bulleted-square:before{content:"󰷐"}.mdi-format-list-bulleted-triangle:before{content:"󰺲"}.mdi-format-list-bulleted-type:before{content:"󰉺"}.mdi-format-list-checkbox:before{content:"󰥪"}.mdi-format-list-checks:before{content:"󰝖"}.mdi-format-list-group:before{content:"󱡠"}.mdi-format-list-group-plus:before{content:"󱭖"}.mdi-format-list-numbered:before{content:"󰉻"}.mdi-format-list-numbered-rtl:before{content:"󰴍"}.mdi-format-list-text:before{content:"󱉯"}.mdi-format-overline:before{content:"󰺳"}.mdi-format-page-break:before{content:"󰛗"}.mdi-format-page-split:before{content:"󱤗"}.mdi-format-paint:before{content:"󰉼"}.mdi-format-paragraph:before{content:"󰉽"}.mdi-format-paragraph-spacing:before{content:"󱫽"}.mdi-format-pilcrow:before{content:"󰛘"}.mdi-format-pilcrow-arrow-left:before{content:"󰊆"}.mdi-format-pilcrow-arrow-right:before{content:"󰊅"}.mdi-format-quote-close:before{content:"󰉾"}.mdi-format-quote-close-outline:before{content:"󱆨"}.mdi-format-quote-open:before{content:"󰝗"}.mdi-format-quote-open-outline:before{content:"󱆧"}.mdi-format-rotate-90:before{content:"󰚪"}.mdi-format-section:before{content:"󰚟"}.mdi-format-size:before{content:"󰉿"}.mdi-format-strikethrough:before{content:"󰊀"}.mdi-format-strikethrough-variant:before{content:"󰊁"}.mdi-format-subscript:before{content:"󰊂"}.mdi-format-superscript:before{content:"󰊃"}.mdi-format-text:before{content:"󰊄"}.mdi-format-text-rotation-angle-down:before{content:"󰾻"}.mdi-format-text-rotation-angle-up:before{content:"󰾼"}.mdi-format-text-rotation-down:before{content:"󰵳"}.mdi-format-text-rotation-down-vertical:before{content:"󰾽"}.mdi-format-text-rotation-none:before{content:"󰵴"}.mdi-format-text-rotation-up:before{content:"󰾾"}.mdi-format-text-rotation-vertical:before{content:"󰾿"}.mdi-format-text-variant:before{content:"󰸲"}.mdi-format-text-variant-outline:before{content:"󱔏"}.mdi-format-text-wrapping-clip:before{content:"󰴎"}.mdi-format-text-wrapping-overflow:before{content:"󰴏"}.mdi-format-text-wrapping-wrap:before{content:"󰴐"}.mdi-format-textbox:before{content:"󰴑"}.mdi-format-title:before{content:"󰗴"}.mdi-format-underline:before{content:"󰊇"}.mdi-format-underline-wavy:before{content:"󱣩"}.mdi-format-vertical-align-bottom:before{content:"󰘡"}.mdi-format-vertical-align-center:before{content:"󰘢"}.mdi-format-vertical-align-top:before{content:"󰘣"}.mdi-format-wrap-inline:before{content:"󰊈"}.mdi-format-wrap-square:before{content:"󰊉"}.mdi-format-wrap-tight:before{content:"󰊊"}.mdi-format-wrap-top-bottom:before{content:"󰊋"}.mdi-forum:before{content:"󰊌"}.mdi-forum-minus:before{content:"󱪩"}.mdi-forum-minus-outline:before{content:"󱪪"}.mdi-forum-outline:before{content:"󰠢"}.mdi-forum-plus:before{content:"󱪫"}.mdi-forum-plus-outline:before{content:"󱪬"}.mdi-forum-remove:before{content:"󱪭"}.mdi-forum-remove-outline:before{content:"󱪮"}.mdi-forward:before{content:"󰊍"}.mdi-forwardburger:before{content:"󰵵"}.mdi-fountain:before{content:"󰥫"}.mdi-fountain-pen:before{content:"󰴒"}.mdi-fountain-pen-tip:before{content:"󰴓"}.mdi-fraction-one-half:before{content:"󱦒"}.mdi-freebsd:before{content:"󰣠"}.mdi-french-fries:before{content:"󱥗"}.mdi-frequently-asked-questions:before{content:"󰺴"}.mdi-fridge:before{content:"󰊐"}.mdi-fridge-alert:before{content:"󱆱"}.mdi-fridge-alert-outline:before{content:"󱆲"}.mdi-fridge-bottom:before{content:"󰊒"}.mdi-fridge-industrial:before{content:"󱗮"}.mdi-fridge-industrial-alert:before{content:"󱗯"}.mdi-fridge-industrial-alert-outline:before{content:"󱗰"}.mdi-fridge-industrial-off:before{content:"󱗱"}.mdi-fridge-industrial-off-outline:before{content:"󱗲"}.mdi-fridge-industrial-outline:before{content:"󱗳"}.mdi-fridge-off:before{content:"󱆯"}.mdi-fridge-off-outline:before{content:"󱆰"}.mdi-fridge-outline:before{content:"󰊏"}.mdi-fridge-top:before{content:"󰊑"}.mdi-fridge-variant:before{content:"󱗴"}.mdi-fridge-variant-alert:before{content:"󱗵"}.mdi-fridge-variant-alert-outline:before{content:"󱗶"}.mdi-fridge-variant-off:before{content:"󱗷"}.mdi-fridge-variant-off-outline:before{content:"󱗸"}.mdi-fridge-variant-outline:before{content:"󱗹"}.mdi-fruit-cherries:before{content:"󱁂"}.mdi-fruit-cherries-off:before{content:"󱏸"}.mdi-fruit-citrus:before{content:"󱁃"}.mdi-fruit-citrus-off:before{content:"󱏹"}.mdi-fruit-grapes:before{content:"󱁄"}.mdi-fruit-grapes-outline:before{content:"󱁅"}.mdi-fruit-pear:before{content:"󱨎"}.mdi-fruit-pineapple:before{content:"󱁆"}.mdi-fruit-watermelon:before{content:"󱁇"}.mdi-fuel:before{content:"󰟊"}.mdi-fuel-cell:before{content:"󱢵"}.mdi-fullscreen:before{content:"󰊓"}.mdi-fullscreen-exit:before{content:"󰊔"}.mdi-function:before{content:"󰊕"}.mdi-function-variant:before{content:"󰡱"}.mdi-furigana-horizontal:before{content:"󱂁"}.mdi-furigana-vertical:before{content:"󱂂"}.mdi-fuse:before{content:"󰲅"}.mdi-fuse-alert:before{content:"󱐭"}.mdi-fuse-blade:before{content:"󰲆"}.mdi-fuse-off:before{content:"󱐬"}.mdi-gamepad:before{content:"󰊖"}.mdi-gamepad-circle:before{content:"󰸳"}.mdi-gamepad-circle-down:before{content:"󰸴"}.mdi-gamepad-circle-left:before{content:"󰸵"}.mdi-gamepad-circle-outline:before{content:"󰸶"}.mdi-gamepad-circle-right:before{content:"󰸷"}.mdi-gamepad-circle-up:before{content:"󰸸"}.mdi-gamepad-down:before{content:"󰸹"}.mdi-gamepad-left:before{content:"󰸺"}.mdi-gamepad-outline:before{content:"󱤙"}.mdi-gamepad-right:before{content:"󰸻"}.mdi-gamepad-round:before{content:"󰸼"}.mdi-gamepad-round-down:before{content:"󰸽"}.mdi-gamepad-round-left:before{content:"󰸾"}.mdi-gamepad-round-outline:before{content:"󰸿"}.mdi-gamepad-round-right:before{content:"󰹀"}.mdi-gamepad-round-up:before{content:"󰹁"}.mdi-gamepad-square:before{content:"󰺵"}.mdi-gamepad-square-outline:before{content:"󰺶"}.mdi-gamepad-up:before{content:"󰹂"}.mdi-gamepad-variant:before{content:"󰊗"}.mdi-gamepad-variant-outline:before{content:"󰺷"}.mdi-gamma:before{content:"󱃮"}.mdi-gantry-crane:before{content:"󰷑"}.mdi-garage:before{content:"󰛙"}.mdi-garage-alert:before{content:"󰡲"}.mdi-garage-alert-variant:before{content:"󱋕"}.mdi-garage-lock:before{content:"󱟻"}.mdi-garage-open:before{content:"󰛚"}.mdi-garage-open-variant:before{content:"󱋔"}.mdi-garage-variant:before{content:"󱋓"}.mdi-garage-variant-lock:before{content:"󱟼"}.mdi-gas-burner:before{content:"󱨛"}.mdi-gas-cylinder:before{content:"󰙇"}.mdi-gas-station:before{content:"󰊘"}.mdi-gas-station-in-use:before{content:"󱳄"}.mdi-gas-station-in-use-outline:before{content:"󱳅"}.mdi-gas-station-off:before{content:"󱐉"}.mdi-gas-station-off-outline:before{content:"󱐊"}.mdi-gas-station-outline:before{content:"󰺸"}.mdi-gate:before{content:"󰊙"}.mdi-gate-alert:before{content:"󱟸"}.mdi-gate-and:before{content:"󰣡"}.mdi-gate-arrow-left:before{content:"󱟷"}.mdi-gate-arrow-right:before{content:"󱅩"}.mdi-gate-buffer:before{content:"󱫾"}.mdi-gate-nand:before{content:"󰣢"}.mdi-gate-nor:before{content:"󰣣"}.mdi-gate-not:before{content:"󰣤"}.mdi-gate-open:before{content:"󱅪"}.mdi-gate-or:before{content:"󰣥"}.mdi-gate-xnor:before{content:"󰣦"}.mdi-gate-xor:before{content:"󰣧"}.mdi-gatsby:before{content:"󰹃"}.mdi-gauge:before{content:"󰊚"}.mdi-gauge-empty:before{content:"󰡳"}.mdi-gauge-full:before{content:"󰡴"}.mdi-gauge-low:before{content:"󰡵"}.mdi-gavel:before{content:"󰊛"}.mdi-gender-female:before{content:"󰊜"}.mdi-gender-male:before{content:"󰊝"}.mdi-gender-male-female:before{content:"󰊞"}.mdi-gender-male-female-variant:before{content:"󱄿"}.mdi-gender-non-binary:before{content:"󱅀"}.mdi-gender-transgender:before{content:"󰊟"}.mdi-generator-mobile:before{content:"󱲊"}.mdi-generator-portable:before{content:"󱲋"}.mdi-generator-stationary:before{content:"󱲌"}.mdi-gentoo:before{content:"󰣨"}.mdi-gesture:before{content:"󰟋"}.mdi-gesture-double-tap:before{content:"󰜼"}.mdi-gesture-pinch:before{content:"󰪽"}.mdi-gesture-spread:before{content:"󰪾"}.mdi-gesture-swipe:before{content:"󰵶"}.mdi-gesture-swipe-down:before{content:"󰜽"}.mdi-gesture-swipe-horizontal:before{content:"󰪿"}.mdi-gesture-swipe-left:before{content:"󰜾"}.mdi-gesture-swipe-right:before{content:"󰜿"}.mdi-gesture-swipe-up:before{content:"󰝀"}.mdi-gesture-swipe-vertical:before{content:"󰫀"}.mdi-gesture-tap:before{content:"󰝁"}.mdi-gesture-tap-box:before{content:"󱊩"}.mdi-gesture-tap-button:before{content:"󱊨"}.mdi-gesture-tap-hold:before{content:"󰵷"}.mdi-gesture-two-double-tap:before{content:"󰝂"}.mdi-gesture-two-tap:before{content:"󰝃"}.mdi-ghost:before{content:"󰊠"}.mdi-ghost-off:before{content:"󰧵"}.mdi-ghost-off-outline:before{content:"󱙜"}.mdi-ghost-outline:before{content:"󱙝"}.mdi-gift:before{content:"󰹄"}.mdi-gift-off:before{content:"󱛯"}.mdi-gift-off-outline:before{content:"󱛰"}.mdi-gift-open:before{content:"󱛱"}.mdi-gift-open-outline:before{content:"󱛲"}.mdi-gift-outline:before{content:"󰊡"}.mdi-git:before{content:"󰊢"}.mdi-github:before{content:"󰊤"}.mdi-gitlab:before{content:"󰮠"}.mdi-glass-cocktail:before{content:"󰍖"}.mdi-glass-cocktail-off:before{content:"󱗦"}.mdi-glass-flute:before{content:"󰊥"}.mdi-glass-fragile:before{content:"󱡳"}.mdi-glass-mug:before{content:"󰊦"}.mdi-glass-mug-off:before{content:"󱗧"}.mdi-glass-mug-variant:before{content:"󱄖"}.mdi-glass-mug-variant-off:before{content:"󱗨"}.mdi-glass-pint-outline:before{content:"󱌍"}.mdi-glass-stange:before{content:"󰊧"}.mdi-glass-tulip:before{content:"󰊨"}.mdi-glass-wine:before{content:"󰡶"}.mdi-glasses:before{content:"󰊪"}.mdi-globe-light:before{content:"󰙯"}.mdi-globe-light-outline:before{content:"󱋗"}.mdi-globe-model:before{content:"󰣩"}.mdi-gmail:before{content:"󰊫"}.mdi-gnome:before{content:"󰊬"}.mdi-go-kart:before{content:"󰵹"}.mdi-go-kart-track:before{content:"󰵺"}.mdi-gog:before{content:"󰮡"}.mdi-gold:before{content:"󱉏"}.mdi-golf:before{content:"󰠣"}.mdi-golf-cart:before{content:"󱆤"}.mdi-golf-tee:before{content:"󱂃"}.mdi-gondola:before{content:"󰚆"}.mdi-goodreads:before{content:"󰵻"}.mdi-google:before{content:"󰊭"}.mdi-google-ads:before{content:"󰲇"}.mdi-google-analytics:before{content:"󰟌"}.mdi-google-assistant:before{content:"󰟍"}.mdi-google-cardboard:before{content:"󰊮"}.mdi-google-chrome:before{content:"󰊯"}.mdi-google-circles:before{content:"󰊰"}.mdi-google-circles-communities:before{content:"󰊱"}.mdi-google-circles-extended:before{content:"󰊲"}.mdi-google-circles-group:before{content:"󰊳"}.mdi-google-classroom:before{content:"󰋀"}.mdi-google-cloud:before{content:"󱇶"}.mdi-google-downasaur:before{content:"󱍢"}.mdi-google-drive:before{content:"󰊶"}.mdi-google-earth:before{content:"󰊷"}.mdi-google-fit:before{content:"󰥬"}.mdi-google-glass:before{content:"󰊸"}.mdi-google-hangouts:before{content:"󰋉"}.mdi-google-keep:before{content:"󰛜"}.mdi-google-lens:before{content:"󰧶"}.mdi-google-maps:before{content:"󰗵"}.mdi-google-my-business:before{content:"󱁈"}.mdi-google-nearby:before{content:"󰊹"}.mdi-google-play:before{content:"󰊼"}.mdi-google-plus:before{content:"󰊽"}.mdi-google-podcast:before{content:"󰺹"}.mdi-google-spreadsheet:before{content:"󰧷"}.mdi-google-street-view:before{content:"󰲈"}.mdi-google-translate:before{content:"󰊿"}.mdi-gradient-horizontal:before{content:"󱝊"}.mdi-gradient-vertical:before{content:"󰚠"}.mdi-grain:before{content:"󰵼"}.mdi-graph:before{content:"󱁉"}.mdi-graph-outline:before{content:"󱁊"}.mdi-graphql:before{content:"󰡷"}.mdi-grass:before{content:"󱔐"}.mdi-grave-stone:before{content:"󰮢"}.mdi-grease-pencil:before{content:"󰙈"}.mdi-greater-than:before{content:"󰥭"}.mdi-greater-than-or-equal:before{content:"󰥮"}.mdi-greenhouse:before{content:"󰀭"}.mdi-grid:before{content:"󰋁"}.mdi-grid-large:before{content:"󰝘"}.mdi-grid-off:before{content:"󰋂"}.mdi-grill:before{content:"󰹅"}.mdi-grill-outline:before{content:"󱆊"}.mdi-group:before{content:"󰋃"}.mdi-guitar-acoustic:before{content:"󰝱"}.mdi-guitar-electric:before{content:"󰋄"}.mdi-guitar-pick:before{content:"󰋅"}.mdi-guitar-pick-outline:before{content:"󰋆"}.mdi-guy-fawkes-mask:before{content:"󰠥"}.mdi-gymnastics:before{content:"󱩁"}.mdi-hail:before{content:"󰫁"}.mdi-hair-dryer:before{content:"󱃯"}.mdi-hair-dryer-outline:before{content:"󱃰"}.mdi-halloween:before{content:"󰮣"}.mdi-hamburger:before{content:"󰚅"}.mdi-hamburger-check:before{content:"󱝶"}.mdi-hamburger-minus:before{content:"󱝷"}.mdi-hamburger-off:before{content:"󱝸"}.mdi-hamburger-plus:before{content:"󱝹"}.mdi-hamburger-remove:before{content:"󱝺"}.mdi-hammer:before{content:"󰣪"}.mdi-hammer-screwdriver:before{content:"󱌢"}.mdi-hammer-sickle:before{content:"󱢇"}.mdi-hammer-wrench:before{content:"󱌣"}.mdi-hand-back-left:before{content:"󰹆"}.mdi-hand-back-left-off:before{content:"󱠰"}.mdi-hand-back-left-off-outline:before{content:"󱠲"}.mdi-hand-back-left-outline:before{content:"󱠬"}.mdi-hand-back-right:before{content:"󰹇"}.mdi-hand-back-right-off:before{content:"󱠱"}.mdi-hand-back-right-off-outline:before{content:"󱠳"}.mdi-hand-back-right-outline:before{content:"󱠭"}.mdi-hand-clap:before{content:"󱥋"}.mdi-hand-clap-off:before{content:"󱩂"}.mdi-hand-coin:before{content:"󱢏"}.mdi-hand-coin-outline:before{content:"󱢐"}.mdi-hand-cycle:before{content:"󱮜"}.mdi-hand-extended:before{content:"󱢶"}.mdi-hand-extended-outline:before{content:"󱢷"}.mdi-hand-front-left:before{content:"󱠫"}.mdi-hand-front-left-outline:before{content:"󱠮"}.mdi-hand-front-right:before{content:"󰩏"}.mdi-hand-front-right-outline:before{content:"󱠯"}.mdi-hand-heart:before{content:"󱃱"}.mdi-hand-heart-outline:before{content:"󱕾"}.mdi-hand-okay:before{content:"󰩐"}.mdi-hand-peace:before{content:"󰩑"}.mdi-hand-peace-variant:before{content:"󰩒"}.mdi-hand-pointing-down:before{content:"󰩓"}.mdi-hand-pointing-left:before{content:"󰩔"}.mdi-hand-pointing-right:before{content:"󰋇"}.mdi-hand-pointing-up:before{content:"󰩕"}.mdi-hand-saw:before{content:"󰹈"}.mdi-hand-wash:before{content:"󱕿"}.mdi-hand-wash-outline:before{content:"󱖀"}.mdi-hand-water:before{content:"󱎟"}.mdi-hand-wave:before{content:"󱠡"}.mdi-hand-wave-outline:before{content:"󱠢"}.mdi-handball:before{content:"󰽓"}.mdi-handcuffs:before{content:"󱄾"}.mdi-hands-pray:before{content:"󰕹"}.mdi-handshake:before{content:"󱈘"}.mdi-handshake-outline:before{content:"󱖡"}.mdi-hanger:before{content:"󰋈"}.mdi-hard-hat:before{content:"󰥯"}.mdi-harddisk:before{content:"󰋊"}.mdi-harddisk-plus:before{content:"󱁋"}.mdi-harddisk-remove:before{content:"󱁌"}.mdi-hat-fedora:before{content:"󰮤"}.mdi-hazard-lights:before{content:"󰲉"}.mdi-hdmi-port:before{content:"󱮸"}.mdi-hdr:before{content:"󰵽"}.mdi-hdr-off:before{content:"󰵾"}.mdi-head:before{content:"󱍞"}.mdi-head-alert:before{content:"󱌸"}.mdi-head-alert-outline:before{content:"󱌹"}.mdi-head-check:before{content:"󱌺"}.mdi-head-check-outline:before{content:"󱌻"}.mdi-head-cog:before{content:"󱌼"}.mdi-head-cog-outline:before{content:"󱌽"}.mdi-head-dots-horizontal:before{content:"󱌾"}.mdi-head-dots-horizontal-outline:before{content:"󱌿"}.mdi-head-flash:before{content:"󱍀"}.mdi-head-flash-outline:before{content:"󱍁"}.mdi-head-heart:before{content:"󱍂"}.mdi-head-heart-outline:before{content:"󱍃"}.mdi-head-lightbulb:before{content:"󱍄"}.mdi-head-lightbulb-outline:before{content:"󱍅"}.mdi-head-minus:before{content:"󱍆"}.mdi-head-minus-outline:before{content:"󱍇"}.mdi-head-outline:before{content:"󱍟"}.mdi-head-plus:before{content:"󱍈"}.mdi-head-plus-outline:before{content:"󱍉"}.mdi-head-question:before{content:"󱍊"}.mdi-head-question-outline:before{content:"󱍋"}.mdi-head-remove:before{content:"󱍌"}.mdi-head-remove-outline:before{content:"󱍍"}.mdi-head-snowflake:before{content:"󱍎"}.mdi-head-snowflake-outline:before{content:"󱍏"}.mdi-head-sync:before{content:"󱍐"}.mdi-head-sync-outline:before{content:"󱍑"}.mdi-headphones:before{content:"󰋋"}.mdi-headphones-bluetooth:before{content:"󰥰"}.mdi-headphones-box:before{content:"󰋌"}.mdi-headphones-off:before{content:"󰟎"}.mdi-headphones-settings:before{content:"󰋍"}.mdi-headset:before{content:"󰋎"}.mdi-headset-dock:before{content:"󰋏"}.mdi-headset-off:before{content:"󰋐"}.mdi-heart:before{content:"󰋑"}.mdi-heart-box:before{content:"󰋒"}.mdi-heart-box-outline:before{content:"󰋓"}.mdi-heart-broken:before{content:"󰋔"}.mdi-heart-broken-outline:before{content:"󰴔"}.mdi-heart-circle:before{content:"󰥱"}.mdi-heart-circle-outline:before{content:"󰥲"}.mdi-heart-cog:before{content:"󱙣"}.mdi-heart-cog-outline:before{content:"󱙤"}.mdi-heart-flash:before{content:"󰻹"}.mdi-heart-half:before{content:"󰛟"}.mdi-heart-half-full:before{content:"󰛞"}.mdi-heart-half-outline:before{content:"󰛠"}.mdi-heart-minus:before{content:"󱐯"}.mdi-heart-minus-outline:before{content:"󱐲"}.mdi-heart-multiple:before{content:"󰩖"}.mdi-heart-multiple-outline:before{content:"󰩗"}.mdi-heart-off:before{content:"󰝙"}.mdi-heart-off-outline:before{content:"󱐴"}.mdi-heart-outline:before{content:"󰋕"}.mdi-heart-plus:before{content:"󱐮"}.mdi-heart-plus-outline:before{content:"󱐱"}.mdi-heart-pulse:before{content:"󰗶"}.mdi-heart-remove:before{content:"󱐰"}.mdi-heart-remove-outline:before{content:"󱐳"}.mdi-heart-search:before{content:"󱲍"}.mdi-heart-settings:before{content:"󱙥"}.mdi-heart-settings-outline:before{content:"󱙦"}.mdi-heat-pump:before{content:"󱩃"}.mdi-heat-pump-outline:before{content:"󱩄"}.mdi-heat-wave:before{content:"󱩅"}.mdi-heating-coil:before{content:"󱪯"}.mdi-helicopter:before{content:"󰫂"}.mdi-help:before{content:"󰋖"}.mdi-help-box:before{content:"󰞋"}.mdi-help-box-multiple:before{content:"󱰊"}.mdi-help-box-multiple-outline:before{content:"󱰋"}.mdi-help-box-outline:before{content:"󱰌"}.mdi-help-circle:before{content:"󰋗"}.mdi-help-circle-outline:before{content:"󰘥"}.mdi-help-network:before{content:"󰛵"}.mdi-help-network-outline:before{content:"󰲊"}.mdi-help-rhombus:before{content:"󰮥"}.mdi-help-rhombus-outline:before{content:"󰮦"}.mdi-hexadecimal:before{content:"󱊧"}.mdi-hexagon:before{content:"󰋘"}.mdi-hexagon-multiple:before{content:"󰛡"}.mdi-hexagon-multiple-outline:before{content:"󱃲"}.mdi-hexagon-outline:before{content:"󰋙"}.mdi-hexagon-slice-1:before{content:"󰫃"}.mdi-hexagon-slice-2:before{content:"󰫄"}.mdi-hexagon-slice-3:before{content:"󰫅"}.mdi-hexagon-slice-4:before{content:"󰫆"}.mdi-hexagon-slice-5:before{content:"󰫇"}.mdi-hexagon-slice-6:before{content:"󰫈"}.mdi-hexagram:before{content:"󰫉"}.mdi-hexagram-outline:before{content:"󰫊"}.mdi-high-definition:before{content:"󰟏"}.mdi-high-definition-box:before{content:"󰡸"}.mdi-highway:before{content:"󰗷"}.mdi-hiking:before{content:"󰵿"}.mdi-history:before{content:"󰋚"}.mdi-hockey-puck:before{content:"󰡹"}.mdi-hockey-sticks:before{content:"󰡺"}.mdi-hololens:before{content:"󰋛"}.mdi-home:before{content:"󰋜"}.mdi-home-account:before{content:"󰠦"}.mdi-home-alert:before{content:"󰡻"}.mdi-home-alert-outline:before{content:"󱗐"}.mdi-home-analytics:before{content:"󰺺"}.mdi-home-assistant:before{content:"󰟐"}.mdi-home-automation:before{content:"󰟑"}.mdi-home-battery:before{content:"󱤁"}.mdi-home-battery-outline:before{content:"󱤂"}.mdi-home-circle:before{content:"󰟒"}.mdi-home-circle-outline:before{content:"󱁍"}.mdi-home-city:before{content:"󰴕"}.mdi-home-city-outline:before{content:"󰴖"}.mdi-home-clock:before{content:"󱨒"}.mdi-home-clock-outline:before{content:"󱨓"}.mdi-home-edit:before{content:"󱅙"}.mdi-home-edit-outline:before{content:"󱅚"}.mdi-home-export-outline:before{content:"󰾛"}.mdi-home-flood:before{content:"󰻺"}.mdi-home-floor-0:before{content:"󰷒"}.mdi-home-floor-1:before{content:"󰶀"}.mdi-home-floor-2:before{content:"󰶁"}.mdi-home-floor-3:before{content:"󰶂"}.mdi-home-floor-a:before{content:"󰶃"}.mdi-home-floor-b:before{content:"󰶄"}.mdi-home-floor-g:before{content:"󰶅"}.mdi-home-floor-l:before{content:"󰶆"}.mdi-home-floor-negative-1:before{content:"󰷓"}.mdi-home-group:before{content:"󰷔"}.mdi-home-group-minus:before{content:"󱧁"}.mdi-home-group-plus:before{content:"󱧀"}.mdi-home-group-remove:before{content:"󱧂"}.mdi-home-heart:before{content:"󰠧"}.mdi-home-import-outline:before{content:"󰾜"}.mdi-home-lightbulb:before{content:"󱉑"}.mdi-home-lightbulb-outline:before{content:"󱉒"}.mdi-home-lightning-bolt:before{content:"󱤃"}.mdi-home-lightning-bolt-outline:before{content:"󱤄"}.mdi-home-lock:before{content:"󰣫"}.mdi-home-lock-open:before{content:"󰣬"}.mdi-home-map-marker:before{content:"󰗸"}.mdi-home-minus:before{content:"󰥴"}.mdi-home-minus-outline:before{content:"󱏕"}.mdi-home-modern:before{content:"󰋝"}.mdi-home-off:before{content:"󱩆"}.mdi-home-off-outline:before{content:"󱩇"}.mdi-home-outline:before{content:"󰚡"}.mdi-home-percent:before{content:"󱱼"}.mdi-home-percent-outline:before{content:"󱱽"}.mdi-home-plus:before{content:"󰥵"}.mdi-home-plus-outline:before{content:"󱏖"}.mdi-home-remove:before{content:"󱉇"}.mdi-home-remove-outline:before{content:"󱏗"}.mdi-home-roof:before{content:"󱄫"}.mdi-home-search:before{content:"󱎰"}.mdi-home-search-outline:before{content:"󱎱"}.mdi-home-silo:before{content:"󱮠"}.mdi-home-silo-outline:before{content:"󱮡"}.mdi-home-sound-in:before{content:"󱰯"}.mdi-home-sound-in-outline:before{content:"󱰰"}.mdi-home-sound-out:before{content:"󱰱"}.mdi-home-sound-out-outline:before{content:"󱰲"}.mdi-home-switch:before{content:"󱞔"}.mdi-home-switch-outline:before{content:"󱞕"}.mdi-home-thermometer:before{content:"󰽔"}.mdi-home-thermometer-outline:before{content:"󰽕"}.mdi-home-variant:before{content:"󰋞"}.mdi-home-variant-outline:before{content:"󰮧"}.mdi-hook:before{content:"󰛢"}.mdi-hook-off:before{content:"󰛣"}.mdi-hoop-house:before{content:"󰹖"}.mdi-hops:before{content:"󰋟"}.mdi-horizontal-rotate-clockwise:before{content:"󱃳"}.mdi-horizontal-rotate-counterclockwise:before{content:"󱃴"}.mdi-horse:before{content:"󱖿"}.mdi-horse-human:before{content:"󱗀"}.mdi-horse-variant:before{content:"󱗁"}.mdi-horse-variant-fast:before{content:"󱡮"}.mdi-horseshoe:before{content:"󰩘"}.mdi-hospital:before{content:"󰿶"}.mdi-hospital-box:before{content:"󰋠"}.mdi-hospital-box-outline:before{content:"󰿷"}.mdi-hospital-building:before{content:"󰋡"}.mdi-hospital-marker:before{content:"󰋢"}.mdi-hot-tub:before{content:"󰠨"}.mdi-hours-12:before{content:"󱲔"}.mdi-hours-24:before{content:"󱑸"}.mdi-hub:before{content:"󱲕"}.mdi-hub-outline:before{content:"󱲖"}.mdi-hubspot:before{content:"󰴗"}.mdi-hulu:before{content:"󰠩"}.mdi-human:before{content:"󰋦"}.mdi-human-baby-changing-table:before{content:"󱎋"}.mdi-human-cane:before{content:"󱖁"}.mdi-human-capacity-decrease:before{content:"󱖛"}.mdi-human-capacity-increase:before{content:"󱖜"}.mdi-human-child:before{content:"󰋧"}.mdi-human-dolly:before{content:"󱦀"}.mdi-human-edit:before{content:"󱓨"}.mdi-human-female:before{content:"󰙉"}.mdi-human-female-boy:before{content:"󰩙"}.mdi-human-female-dance:before{content:"󱗉"}.mdi-human-female-female:before{content:"󰩚"}.mdi-human-female-female-child:before{content:"󱲎"}.mdi-human-female-girl:before{content:"󰩛"}.mdi-human-greeting:before{content:"󱟄"}.mdi-human-greeting-proximity:before{content:"󱖝"}.mdi-human-greeting-variant:before{content:"󰙊"}.mdi-human-handsdown:before{content:"󰙋"}.mdi-human-handsup:before{content:"󰙌"}.mdi-human-male:before{content:"󰙍"}.mdi-human-male-board:before{content:"󰢐"}.mdi-human-male-board-poll:before{content:"󰡆"}.mdi-human-male-boy:before{content:"󰩜"}.mdi-human-male-child:before{content:"󱎌"}.mdi-human-male-female:before{content:"󰋨"}.mdi-human-male-female-child:before{content:"󱠣"}.mdi-human-male-girl:before{content:"󰩝"}.mdi-human-male-height:before{content:"󰻻"}.mdi-human-male-height-variant:before{content:"󰻼"}.mdi-human-male-male:before{content:"󰩞"}.mdi-human-male-male-child:before{content:"󱲏"}.mdi-human-non-binary:before{content:"󱡈"}.mdi-human-pregnant:before{content:"󰗏"}.mdi-human-queue:before{content:"󱕱"}.mdi-human-scooter:before{content:"󱇩"}.mdi-human-walker:before{content:"󱭱"}.mdi-human-wheelchair:before{content:"󱎍"}.mdi-human-white-cane:before{content:"󱦁"}.mdi-humble-bundle:before{content:"󰝄"}.mdi-hvac:before{content:"󱍒"}.mdi-hvac-off:before{content:"󱖞"}.mdi-hydraulic-oil-level:before{content:"󱌤"}.mdi-hydraulic-oil-temperature:before{content:"󱌥"}.mdi-hydro-power:before{content:"󱋥"}.mdi-hydrogen-station:before{content:"󱢔"}.mdi-ice-cream:before{content:"󰠪"}.mdi-ice-cream-off:before{content:"󰹒"}.mdi-ice-pop:before{content:"󰻽"}.mdi-id-card:before{content:"󰿀"}.mdi-identifier:before{content:"󰻾"}.mdi-ideogram-cjk:before{content:"󱌱"}.mdi-ideogram-cjk-variant:before{content:"󱌲"}.mdi-image:before{content:"󰋩"}.mdi-image-album:before{content:"󰋪"}.mdi-image-area:before{content:"󰋫"}.mdi-image-area-close:before{content:"󰋬"}.mdi-image-auto-adjust:before{content:"󰿁"}.mdi-image-broken:before{content:"󰋭"}.mdi-image-broken-variant:before{content:"󰋮"}.mdi-image-check:before{content:"󱬥"}.mdi-image-check-outline:before{content:"󱬦"}.mdi-image-edit:before{content:"󱇣"}.mdi-image-edit-outline:before{content:"󱇤"}.mdi-image-filter-black-white:before{content:"󰋰"}.mdi-image-filter-center-focus:before{content:"󰋱"}.mdi-image-filter-center-focus-strong:before{content:"󰻿"}.mdi-image-filter-center-focus-strong-outline:before{content:"󰼀"}.mdi-image-filter-center-focus-weak:before{content:"󰋲"}.mdi-image-filter-drama:before{content:"󰋳"}.mdi-image-filter-drama-outline:before{content:"󱯿"}.mdi-image-filter-frames:before{content:"󰋴"}.mdi-image-filter-hdr:before{content:"󰋵"}.mdi-image-filter-hdr-outline:before{content:"󱱤"}.mdi-image-filter-none:before{content:"󰋶"}.mdi-image-filter-tilt-shift:before{content:"󰋷"}.mdi-image-filter-vintage:before{content:"󰋸"}.mdi-image-frame:before{content:"󰹉"}.mdi-image-lock:before{content:"󱪰"}.mdi-image-lock-outline:before{content:"󱪱"}.mdi-image-marker:before{content:"󱝻"}.mdi-image-marker-outline:before{content:"󱝼"}.mdi-image-minus:before{content:"󱐙"}.mdi-image-minus-outline:before{content:"󱭇"}.mdi-image-move:before{content:"󰧸"}.mdi-image-multiple:before{content:"󰋹"}.mdi-image-multiple-outline:before{content:"󰋯"}.mdi-image-off:before{content:"󰠫"}.mdi-image-off-outline:before{content:"󱇑"}.mdi-image-outline:before{content:"󰥶"}.mdi-image-plus:before{content:"󰡼"}.mdi-image-plus-outline:before{content:"󱭆"}.mdi-image-refresh:before{content:"󱧾"}.mdi-image-refresh-outline:before{content:"󱧿"}.mdi-image-remove:before{content:"󱐘"}.mdi-image-remove-outline:before{content:"󱭈"}.mdi-image-search:before{content:"󰥷"}.mdi-image-search-outline:before{content:"󰥸"}.mdi-image-size-select-actual:before{content:"󰲍"}.mdi-image-size-select-large:before{content:"󰲎"}.mdi-image-size-select-small:before{content:"󰲏"}.mdi-image-sync:before{content:"󱨀"}.mdi-image-sync-outline:before{content:"󱨁"}.mdi-image-text:before{content:"󱘍"}.mdi-import:before{content:"󰋺"}.mdi-inbox:before{content:"󰚇"}.mdi-inbox-arrow-down:before{content:"󰋻"}.mdi-inbox-arrow-down-outline:before{content:"󱉰"}.mdi-inbox-arrow-up:before{content:"󰏑"}.mdi-inbox-arrow-up-outline:before{content:"󱉱"}.mdi-inbox-full:before{content:"󱉲"}.mdi-inbox-full-outline:before{content:"󱉳"}.mdi-inbox-multiple:before{content:"󰢰"}.mdi-inbox-multiple-outline:before{content:"󰮨"}.mdi-inbox-outline:before{content:"󱉴"}.mdi-inbox-remove:before{content:"󱖟"}.mdi-inbox-remove-outline:before{content:"󱖠"}.mdi-incognito:before{content:"󰗹"}.mdi-incognito-circle:before{content:"󱐡"}.mdi-incognito-circle-off:before{content:"󱐢"}.mdi-incognito-off:before{content:"󰁵"}.mdi-induction:before{content:"󱡌"}.mdi-infinity:before{content:"󰛤"}.mdi-information:before{content:"󰋼"}.mdi-information-box:before{content:"󱱥"}.mdi-information-box-outline:before{content:"󱱦"}.mdi-information-off:before{content:"󱞌"}.mdi-information-off-outline:before{content:"󱞍"}.mdi-information-outline:before{content:"󰋽"}.mdi-information-slab-box:before{content:"󱱧"}.mdi-information-slab-box-outline:before{content:"󱱨"}.mdi-information-slab-circle:before{content:"󱱩"}.mdi-information-slab-circle-outline:before{content:"󱱪"}.mdi-information-slab-symbol:before{content:"󱱫"}.mdi-information-symbol:before{content:"󱱬"}.mdi-information-variant:before{content:"󰙎"}.mdi-information-variant-box:before{content:"󱱭"}.mdi-information-variant-box-outline:before{content:"󱱮"}.mdi-information-variant-circle:before{content:"󱱯"}.mdi-information-variant-circle-outline:before{content:"󱱰"}.mdi-instagram:before{content:"󰋾"}.mdi-instrument-triangle:before{content:"󱁎"}.mdi-integrated-circuit-chip:before{content:"󱤓"}.mdi-invert-colors:before{content:"󰌁"}.mdi-invert-colors-off:before{content:"󰹊"}.mdi-invoice:before{content:"󱳒"}.mdi-invoice-arrow-left:before{content:"󱳓"}.mdi-invoice-arrow-left-outline:before{content:"󱳔"}.mdi-invoice-arrow-right:before{content:"󱳕"}.mdi-invoice-arrow-right-outline:before{content:"󱳖"}.mdi-invoice-check:before{content:"󱳗"}.mdi-invoice-check-outline:before{content:"󱳘"}.mdi-invoice-clock:before{content:"󱳙"}.mdi-invoice-clock-outline:before{content:"󱳚"}.mdi-invoice-edit:before{content:"󱳛"}.mdi-invoice-edit-outline:before{content:"󱳜"}.mdi-invoice-export-outline:before{content:"󱳝"}.mdi-invoice-fast:before{content:"󱳞"}.mdi-invoice-fast-outline:before{content:"󱳟"}.mdi-invoice-import:before{content:"󱳠"}.mdi-invoice-import-outline:before{content:"󱳡"}.mdi-invoice-list:before{content:"󱳢"}.mdi-invoice-list-outline:before{content:"󱳣"}.mdi-invoice-minus:before{content:"󱳤"}.mdi-invoice-minus-outline:before{content:"󱳥"}.mdi-invoice-multiple:before{content:"󱳦"}.mdi-invoice-multiple-outline:before{content:"󱳧"}.mdi-invoice-outline:before{content:"󱳨"}.mdi-invoice-plus:before{content:"󱳩"}.mdi-invoice-plus-outline:before{content:"󱳪"}.mdi-invoice-remove:before{content:"󱳫"}.mdi-invoice-remove-outline:before{content:"󱳬"}.mdi-invoice-send:before{content:"󱳭"}.mdi-invoice-send-outline:before{content:"󱳮"}.mdi-invoice-text:before{content:"󱳯"}.mdi-invoice-text-arrow-left:before{content:"󱳰"}.mdi-invoice-text-arrow-left-outline:before{content:"󱳱"}.mdi-invoice-text-arrow-right:before{content:"󱳲"}.mdi-invoice-text-arrow-right-outline:before{content:"󱳳"}.mdi-invoice-text-check:before{content:"󱳴"}.mdi-invoice-text-check-outline:before{content:"󱳵"}.mdi-invoice-text-clock:before{content:"󱳶"}.mdi-invoice-text-clock-outline:before{content:"󱳷"}.mdi-invoice-text-edit:before{content:"󱳸"}.mdi-invoice-text-edit-outline:before{content:"󱳹"}.mdi-invoice-text-fast:before{content:"󱳺"}.mdi-invoice-text-fast-outline:before{content:"󱳻"}.mdi-invoice-text-minus:before{content:"󱳼"}.mdi-invoice-text-minus-outline:before{content:"󱳽"}.mdi-invoice-text-multiple:before{content:"󱳾"}.mdi-invoice-text-multiple-outline:before{content:"󱳿"}.mdi-invoice-text-outline:before{content:"󱴀"}.mdi-invoice-text-plus:before{content:"󱴁"}.mdi-invoice-text-plus-outline:before{content:"󱴂"}.mdi-invoice-text-remove:before{content:"󱴃"}.mdi-invoice-text-remove-outline:before{content:"󱴄"}.mdi-invoice-text-send:before{content:"󱴅"}.mdi-invoice-text-send-outline:before{content:"󱴆"}.mdi-iobroker:before{content:"󱋨"}.mdi-ip:before{content:"󰩟"}.mdi-ip-network:before{content:"󰩠"}.mdi-ip-network-outline:before{content:"󰲐"}.mdi-ip-outline:before{content:"󱦂"}.mdi-ipod:before{content:"󰲑"}.mdi-iron:before{content:"󱠤"}.mdi-iron-board:before{content:"󱠸"}.mdi-iron-outline:before{content:"󱠥"}.mdi-island:before{content:"󱁏"}.mdi-island-variant:before{content:"󱳆"}.mdi-iv-bag:before{content:"󱂹"}.mdi-jabber:before{content:"󰷕"}.mdi-jeepney:before{content:"󰌂"}.mdi-jellyfish:before{content:"󰼁"}.mdi-jellyfish-outline:before{content:"󰼂"}.mdi-jira:before{content:"󰌃"}.mdi-jquery:before{content:"󰡽"}.mdi-jsfiddle:before{content:"󰌄"}.mdi-jump-rope:before{content:"󱋿"}.mdi-kabaddi:before{content:"󰶇"}.mdi-kangaroo:before{content:"󱕘"}.mdi-karate:before{content:"󰠬"}.mdi-kayaking:before{content:"󰢯"}.mdi-keg:before{content:"󰌅"}.mdi-kettle:before{content:"󰗺"}.mdi-kettle-alert:before{content:"󱌗"}.mdi-kettle-alert-outline:before{content:"󱌘"}.mdi-kettle-off:before{content:"󱌛"}.mdi-kettle-off-outline:before{content:"󱌜"}.mdi-kettle-outline:before{content:"󰽖"}.mdi-kettle-pour-over:before{content:"󱜼"}.mdi-kettle-steam:before{content:"󱌙"}.mdi-kettle-steam-outline:before{content:"󱌚"}.mdi-kettlebell:before{content:"󱌀"}.mdi-key:before{content:"󰌆"}.mdi-key-alert:before{content:"󱦃"}.mdi-key-alert-outline:before{content:"󱦄"}.mdi-key-arrow-right:before{content:"󱌒"}.mdi-key-chain:before{content:"󱕴"}.mdi-key-chain-variant:before{content:"󱕵"}.mdi-key-change:before{content:"󰌇"}.mdi-key-link:before{content:"󱆟"}.mdi-key-minus:before{content:"󰌈"}.mdi-key-outline:before{content:"󰷖"}.mdi-key-plus:before{content:"󰌉"}.mdi-key-remove:before{content:"󰌊"}.mdi-key-star:before{content:"󱆞"}.mdi-key-variant:before{content:"󰌋"}.mdi-key-wireless:before{content:"󰿂"}.mdi-keyboard:before{content:"󰌌"}.mdi-keyboard-backspace:before{content:"󰌍"}.mdi-keyboard-caps:before{content:"󰌎"}.mdi-keyboard-close:before{content:"󰌏"}.mdi-keyboard-close-outline:before{content:"󱰀"}.mdi-keyboard-esc:before{content:"󱊷"}.mdi-keyboard-f1:before{content:"󱊫"}.mdi-keyboard-f10:before{content:"󱊴"}.mdi-keyboard-f11:before{content:"󱊵"}.mdi-keyboard-f12:before{content:"󱊶"}.mdi-keyboard-f2:before{content:"󱊬"}.mdi-keyboard-f3:before{content:"󱊭"}.mdi-keyboard-f4:before{content:"󱊮"}.mdi-keyboard-f5:before{content:"󱊯"}.mdi-keyboard-f6:before{content:"󱊰"}.mdi-keyboard-f7:before{content:"󱊱"}.mdi-keyboard-f8:before{content:"󱊲"}.mdi-keyboard-f9:before{content:"󱊳"}.mdi-keyboard-off:before{content:"󰌐"}.mdi-keyboard-off-outline:before{content:"󰹋"}.mdi-keyboard-outline:before{content:"󰥻"}.mdi-keyboard-return:before{content:"󰌑"}.mdi-keyboard-settings:before{content:"󰧹"}.mdi-keyboard-settings-outline:before{content:"󰧺"}.mdi-keyboard-space:before{content:"󱁐"}.mdi-keyboard-tab:before{content:"󰌒"}.mdi-keyboard-tab-reverse:before{content:"󰌥"}.mdi-keyboard-variant:before{content:"󰌓"}.mdi-khanda:before{content:"󱃽"}.mdi-kickstarter:before{content:"󰝅"}.mdi-kite:before{content:"󱦅"}.mdi-kite-outline:before{content:"󱦆"}.mdi-kitesurfing:before{content:"󱝄"}.mdi-klingon:before{content:"󱍛"}.mdi-knife:before{content:"󰧻"}.mdi-knife-military:before{content:"󰧼"}.mdi-knob:before{content:"󱮖"}.mdi-koala:before{content:"󱜿"}.mdi-kodi:before{content:"󰌔"}.mdi-kubernetes:before{content:"󱃾"}.mdi-label:before{content:"󰌕"}.mdi-label-multiple:before{content:"󱍵"}.mdi-label-multiple-outline:before{content:"󱍶"}.mdi-label-off:before{content:"󰫋"}.mdi-label-off-outline:before{content:"󰫌"}.mdi-label-outline:before{content:"󰌖"}.mdi-label-percent:before{content:"󱋪"}.mdi-label-percent-outline:before{content:"󱋫"}.mdi-label-variant:before{content:"󰫍"}.mdi-label-variant-outline:before{content:"󰫎"}.mdi-ladder:before{content:"󱖢"}.mdi-ladybug:before{content:"󰠭"}.mdi-lambda:before{content:"󰘧"}.mdi-lamp:before{content:"󰚵"}.mdi-lamp-outline:before{content:"󱟐"}.mdi-lamps:before{content:"󱕶"}.mdi-lamps-outline:before{content:"󱟑"}.mdi-lan:before{content:"󰌗"}.mdi-lan-check:before{content:"󱊪"}.mdi-lan-connect:before{content:"󰌘"}.mdi-lan-disconnect:before{content:"󰌙"}.mdi-lan-pending:before{content:"󰌚"}.mdi-land-fields:before{content:"󱪲"}.mdi-land-plots:before{content:"󱪳"}.mdi-land-plots-circle:before{content:"󱪴"}.mdi-land-plots-circle-variant:before{content:"󱪵"}.mdi-land-plots-marker:before{content:"󱱝"}.mdi-land-rows-horizontal:before{content:"󱪶"}.mdi-land-rows-vertical:before{content:"󱪷"}.mdi-landslide:before{content:"󱩈"}.mdi-landslide-outline:before{content:"󱩉"}.mdi-language-c:before{content:"󰙱"}.mdi-language-cpp:before{content:"󰙲"}.mdi-language-csharp:before{content:"󰌛"}.mdi-language-css3:before{content:"󰌜"}.mdi-language-fortran:before{content:"󱈚"}.mdi-language-go:before{content:"󰟓"}.mdi-language-haskell:before{content:"󰲒"}.mdi-language-html5:before{content:"󰌝"}.mdi-language-java:before{content:"󰬷"}.mdi-language-javascript:before{content:"󰌞"}.mdi-language-kotlin:before{content:"󱈙"}.mdi-language-lua:before{content:"󰢱"}.mdi-language-markdown:before{content:"󰍔"}.mdi-language-markdown-outline:before{content:"󰽛"}.mdi-language-php:before{content:"󰌟"}.mdi-language-python:before{content:"󰌠"}.mdi-language-r:before{content:"󰟔"}.mdi-language-ruby:before{content:"󰴭"}.mdi-language-ruby-on-rails:before{content:"󰫏"}.mdi-language-rust:before{content:"󱘗"}.mdi-language-swift:before{content:"󰛥"}.mdi-language-typescript:before{content:"󰛦"}.mdi-language-xaml:before{content:"󰙳"}.mdi-laptop:before{content:"󰌢"}.mdi-laptop-account:before{content:"󱩊"}.mdi-laptop-off:before{content:"󰛧"}.mdi-laravel:before{content:"󰫐"}.mdi-laser-pointer:before{content:"󱒄"}.mdi-lasso:before{content:"󰼃"}.mdi-lastpass:before{content:"󰑆"}.mdi-latitude:before{content:"󰽗"}.mdi-launch:before{content:"󰌧"}.mdi-lava-lamp:before{content:"󰟕"}.mdi-layers:before{content:"󰌨"}.mdi-layers-edit:before{content:"󱢒"}.mdi-layers-minus:before{content:"󰹌"}.mdi-layers-off:before{content:"󰌩"}.mdi-layers-off-outline:before{content:"󰧽"}.mdi-layers-outline:before{content:"󰧾"}.mdi-layers-plus:before{content:"󰹍"}.mdi-layers-remove:before{content:"󰹎"}.mdi-layers-search:before{content:"󱈆"}.mdi-layers-search-outline:before{content:"󱈇"}.mdi-layers-triple:before{content:"󰽘"}.mdi-layers-triple-outline:before{content:"󰽙"}.mdi-lead-pencil:before{content:"󰙏"}.mdi-leaf:before{content:"󰌪"}.mdi-leaf-circle:before{content:"󱤅"}.mdi-leaf-circle-outline:before{content:"󱤆"}.mdi-leaf-maple:before{content:"󰲓"}.mdi-leaf-maple-off:before{content:"󱋚"}.mdi-leaf-off:before{content:"󱋙"}.mdi-leak:before{content:"󰷗"}.mdi-leak-off:before{content:"󰷘"}.mdi-lectern:before{content:"󱫰"}.mdi-led-off:before{content:"󰌫"}.mdi-led-on:before{content:"󰌬"}.mdi-led-outline:before{content:"󰌭"}.mdi-led-strip:before{content:"󰟖"}.mdi-led-strip-variant:before{content:"󱁑"}.mdi-led-strip-variant-off:before{content:"󱩋"}.mdi-led-variant-off:before{content:"󰌮"}.mdi-led-variant-on:before{content:"󰌯"}.mdi-led-variant-outline:before{content:"󰌰"}.mdi-leek:before{content:"󱅽"}.mdi-less-than:before{content:"󰥼"}.mdi-less-than-or-equal:before{content:"󰥽"}.mdi-library:before{content:"󰌱"}.mdi-library-outline:before{content:"󱨢"}.mdi-library-shelves:before{content:"󰮩"}.mdi-license:before{content:"󰿃"}.mdi-lifebuoy:before{content:"󰡾"}.mdi-light-flood-down:before{content:"󱦇"}.mdi-light-flood-up:before{content:"󱦈"}.mdi-light-recessed:before{content:"󱞛"}.mdi-light-switch:before{content:"󰥾"}.mdi-light-switch-off:before{content:"󱨤"}.mdi-lightbulb:before{content:"󰌵"}.mdi-lightbulb-alert:before{content:"󱧡"}.mdi-lightbulb-alert-outline:before{content:"󱧢"}.mdi-lightbulb-auto:before{content:"󱠀"}.mdi-lightbulb-auto-outline:before{content:"󱠁"}.mdi-lightbulb-cfl:before{content:"󱈈"}.mdi-lightbulb-cfl-off:before{content:"󱈉"}.mdi-lightbulb-cfl-spiral:before{content:"󱉵"}.mdi-lightbulb-cfl-spiral-off:before{content:"󱋃"}.mdi-lightbulb-fluorescent-tube:before{content:"󱠄"}.mdi-lightbulb-fluorescent-tube-outline:before{content:"󱠅"}.mdi-lightbulb-group:before{content:"󱉓"}.mdi-lightbulb-group-off:before{content:"󱋍"}.mdi-lightbulb-group-off-outline:before{content:"󱋎"}.mdi-lightbulb-group-outline:before{content:"󱉔"}.mdi-lightbulb-multiple:before{content:"󱉕"}.mdi-lightbulb-multiple-off:before{content:"󱋏"}.mdi-lightbulb-multiple-off-outline:before{content:"󱋐"}.mdi-lightbulb-multiple-outline:before{content:"󱉖"}.mdi-lightbulb-night:before{content:"󱩌"}.mdi-lightbulb-night-outline:before{content:"󱩍"}.mdi-lightbulb-off:before{content:"󰹏"}.mdi-lightbulb-off-outline:before{content:"󰹐"}.mdi-lightbulb-on:before{content:"󰛨"}.mdi-lightbulb-on-10:before{content:"󱩎"}.mdi-lightbulb-on-20:before{content:"󱩏"}.mdi-lightbulb-on-30:before{content:"󱩐"}.mdi-lightbulb-on-40:before{content:"󱩑"}.mdi-lightbulb-on-50:before{content:"󱩒"}.mdi-lightbulb-on-60:before{content:"󱩓"}.mdi-lightbulb-on-70:before{content:"󱩔"}.mdi-lightbulb-on-80:before{content:"󱩕"}.mdi-lightbulb-on-90:before{content:"󱩖"}.mdi-lightbulb-on-outline:before{content:"󰛩"}.mdi-lightbulb-outline:before{content:"󰌶"}.mdi-lightbulb-question:before{content:"󱧣"}.mdi-lightbulb-question-outline:before{content:"󱧤"}.mdi-lightbulb-spot:before{content:"󱟴"}.mdi-lightbulb-spot-off:before{content:"󱟵"}.mdi-lightbulb-variant:before{content:"󱠂"}.mdi-lightbulb-variant-outline:before{content:"󱠃"}.mdi-lighthouse:before{content:"󰧿"}.mdi-lighthouse-on:before{content:"󰨀"}.mdi-lightning-bolt:before{content:"󱐋"}.mdi-lightning-bolt-circle:before{content:"󰠠"}.mdi-lightning-bolt-outline:before{content:"󱐌"}.mdi-line-scan:before{content:"󰘤"}.mdi-lingerie:before{content:"󱑶"}.mdi-link:before{content:"󰌷"}.mdi-link-box:before{content:"󰴚"}.mdi-link-box-outline:before{content:"󰴛"}.mdi-link-box-variant:before{content:"󰴜"}.mdi-link-box-variant-outline:before{content:"󰴝"}.mdi-link-circle:before{content:"󱲬"}.mdi-link-circle-outline:before{content:"󱲭"}.mdi-link-edit:before{content:"󱲮"}.mdi-link-lock:before{content:"󱂺"}.mdi-link-off:before{content:"󰌸"}.mdi-link-plus:before{content:"󰲔"}.mdi-link-variant:before{content:"󰌹"}.mdi-link-variant-minus:before{content:"󱃿"}.mdi-link-variant-off:before{content:"󰌺"}.mdi-link-variant-plus:before{content:"󱄀"}.mdi-link-variant-remove:before{content:"󱄁"}.mdi-linkedin:before{content:"󰌻"}.mdi-linux:before{content:"󰌽"}.mdi-linux-mint:before{content:"󰣭"}.mdi-lipstick:before{content:"󱎵"}.mdi-liquid-spot:before{content:"󱠦"}.mdi-liquor:before{content:"󱤞"}.mdi-list-box:before{content:"󱭻"}.mdi-list-box-outline:before{content:"󱭼"}.mdi-list-status:before{content:"󱖫"}.mdi-litecoin:before{content:"󰩡"}.mdi-loading:before{content:"󰝲"}.mdi-location-enter:before{content:"󰿄"}.mdi-location-exit:before{content:"󰿅"}.mdi-lock:before{content:"󰌾"}.mdi-lock-alert:before{content:"󰣮"}.mdi-lock-alert-outline:before{content:"󱗑"}.mdi-lock-check:before{content:"󱎚"}.mdi-lock-check-outline:before{content:"󱚨"}.mdi-lock-clock:before{content:"󰥿"}.mdi-lock-minus:before{content:"󱚩"}.mdi-lock-minus-outline:before{content:"󱚪"}.mdi-lock-off:before{content:"󱙱"}.mdi-lock-off-outline:before{content:"󱙲"}.mdi-lock-open:before{content:"󰌿"}.mdi-lock-open-alert:before{content:"󱎛"}.mdi-lock-open-alert-outline:before{content:"󱗒"}.mdi-lock-open-check:before{content:"󱎜"}.mdi-lock-open-check-outline:before{content:"󱚫"}.mdi-lock-open-minus:before{content:"󱚬"}.mdi-lock-open-minus-outline:before{content:"󱚭"}.mdi-lock-open-outline:before{content:"󰍀"}.mdi-lock-open-plus:before{content:"󱚮"}.mdi-lock-open-plus-outline:before{content:"󱚯"}.mdi-lock-open-remove:before{content:"󱚰"}.mdi-lock-open-remove-outline:before{content:"󱚱"}.mdi-lock-open-variant:before{content:"󰿆"}.mdi-lock-open-variant-outline:before{content:"󰿇"}.mdi-lock-outline:before{content:"󰍁"}.mdi-lock-pattern:before{content:"󰛪"}.mdi-lock-percent:before{content:"󱰒"}.mdi-lock-percent-open:before{content:"󱰓"}.mdi-lock-percent-open-outline:before{content:"󱰔"}.mdi-lock-percent-open-variant:before{content:"󱰕"}.mdi-lock-percent-open-variant-outline:before{content:"󱰖"}.mdi-lock-percent-outline:before{content:"󱰗"}.mdi-lock-plus:before{content:"󰗻"}.mdi-lock-plus-outline:before{content:"󱚲"}.mdi-lock-question:before{content:"󰣯"}.mdi-lock-remove:before{content:"󱚳"}.mdi-lock-remove-outline:before{content:"󱚴"}.mdi-lock-reset:before{content:"󰝳"}.mdi-lock-smart:before{content:"󰢲"}.mdi-locker:before{content:"󰟗"}.mdi-locker-multiple:before{content:"󰟘"}.mdi-login:before{content:"󰍂"}.mdi-login-variant:before{content:"󰗼"}.mdi-logout:before{content:"󰍃"}.mdi-logout-variant:before{content:"󰗽"}.mdi-longitude:before{content:"󰽚"}.mdi-looks:before{content:"󰍄"}.mdi-lotion:before{content:"󱖂"}.mdi-lotion-outline:before{content:"󱖃"}.mdi-lotion-plus:before{content:"󱖄"}.mdi-lotion-plus-outline:before{content:"󱖅"}.mdi-loupe:before{content:"󰍅"}.mdi-lumx:before{content:"󰍆"}.mdi-lungs:before{content:"󱂄"}.mdi-mace:before{content:"󱡃"}.mdi-magazine-pistol:before{content:"󰌤"}.mdi-magazine-rifle:before{content:"󰌣"}.mdi-magic-staff:before{content:"󱡄"}.mdi-magnet:before{content:"󰍇"}.mdi-magnet-on:before{content:"󰍈"}.mdi-magnify:before{content:"󰍉"}.mdi-magnify-close:before{content:"󰦀"}.mdi-magnify-expand:before{content:"󱡴"}.mdi-magnify-minus:before{content:"󰍊"}.mdi-magnify-minus-cursor:before{content:"󰩢"}.mdi-magnify-minus-outline:before{content:"󰛬"}.mdi-magnify-plus:before{content:"󰍋"}.mdi-magnify-plus-cursor:before{content:"󰩣"}.mdi-magnify-plus-outline:before{content:"󰛭"}.mdi-magnify-remove-cursor:before{content:"󱈌"}.mdi-magnify-remove-outline:before{content:"󱈍"}.mdi-magnify-scan:before{content:"󱉶"}.mdi-mail:before{content:"󰺻"}.mdi-mailbox:before{content:"󰛮"}.mdi-mailbox-open:before{content:"󰶈"}.mdi-mailbox-open-outline:before{content:"󰶉"}.mdi-mailbox-open-up:before{content:"󰶊"}.mdi-mailbox-open-up-outline:before{content:"󰶋"}.mdi-mailbox-outline:before{content:"󰶌"}.mdi-mailbox-up:before{content:"󰶍"}.mdi-mailbox-up-outline:before{content:"󰶎"}.mdi-manjaro:before{content:"󱘊"}.mdi-map:before{content:"󰍍"}.mdi-map-check:before{content:"󰺼"}.mdi-map-check-outline:before{content:"󰺽"}.mdi-map-clock:before{content:"󰴞"}.mdi-map-clock-outline:before{content:"󰴟"}.mdi-map-legend:before{content:"󰨁"}.mdi-map-marker:before{content:"󰍎"}.mdi-map-marker-account:before{content:"󱣣"}.mdi-map-marker-account-outline:before{content:"󱣤"}.mdi-map-marker-alert:before{content:"󰼅"}.mdi-map-marker-alert-outline:before{content:"󰼆"}.mdi-map-marker-check:before{content:"󰲕"}.mdi-map-marker-check-outline:before{content:"󱋻"}.mdi-map-marker-circle:before{content:"󰍏"}.mdi-map-marker-distance:before{content:"󰣰"}.mdi-map-marker-down:before{content:"󱄂"}.mdi-map-marker-left:before{content:"󱋛"}.mdi-map-marker-left-outline:before{content:"󱋝"}.mdi-map-marker-minus:before{content:"󰙐"}.mdi-map-marker-minus-outline:before{content:"󱋹"}.mdi-map-marker-multiple:before{content:"󰍐"}.mdi-map-marker-multiple-outline:before{content:"󱉷"}.mdi-map-marker-off:before{content:"󰍑"}.mdi-map-marker-off-outline:before{content:"󱋽"}.mdi-map-marker-outline:before{content:"󰟙"}.mdi-map-marker-path:before{content:"󰴠"}.mdi-map-marker-plus:before{content:"󰙑"}.mdi-map-marker-plus-outline:before{content:"󱋸"}.mdi-map-marker-question:before{content:"󰼇"}.mdi-map-marker-question-outline:before{content:"󰼈"}.mdi-map-marker-radius:before{content:"󰍒"}.mdi-map-marker-radius-outline:before{content:"󱋼"}.mdi-map-marker-remove:before{content:"󰼉"}.mdi-map-marker-remove-outline:before{content:"󱋺"}.mdi-map-marker-remove-variant:before{content:"󰼊"}.mdi-map-marker-right:before{content:"󱋜"}.mdi-map-marker-right-outline:before{content:"󱋞"}.mdi-map-marker-star:before{content:"󱘈"}.mdi-map-marker-star-outline:before{content:"󱘉"}.mdi-map-marker-up:before{content:"󱄃"}.mdi-map-minus:before{content:"󰦁"}.mdi-map-outline:before{content:"󰦂"}.mdi-map-plus:before{content:"󰦃"}.mdi-map-search:before{content:"󰦄"}.mdi-map-search-outline:before{content:"󰦅"}.mdi-mapbox:before{content:"󰮪"}.mdi-margin:before{content:"󰍓"}.mdi-marker:before{content:"󰙒"}.mdi-marker-cancel:before{content:"󰷙"}.mdi-marker-check:before{content:"󰍕"}.mdi-mastodon:before{content:"󰫑"}.mdi-material-design:before{content:"󰦆"}.mdi-material-ui:before{content:"󰍗"}.mdi-math-compass:before{content:"󰍘"}.mdi-math-cos:before{content:"󰲖"}.mdi-math-integral:before{content:"󰿈"}.mdi-math-integral-box:before{content:"󰿉"}.mdi-math-log:before{content:"󱂅"}.mdi-math-norm:before{content:"󰿊"}.mdi-math-norm-box:before{content:"󰿋"}.mdi-math-sin:before{content:"󰲗"}.mdi-math-tan:before{content:"󰲘"}.mdi-matrix:before{content:"󰘨"}.mdi-medal:before{content:"󰦇"}.mdi-medal-outline:before{content:"󱌦"}.mdi-medical-bag:before{content:"󰛯"}.mdi-medical-cotton-swab:before{content:"󱪸"}.mdi-medication:before{content:"󱬔"}.mdi-medication-outline:before{content:"󱬕"}.mdi-meditation:before{content:"󱅻"}.mdi-memory:before{content:"󰍛"}.mdi-memory-arrow-down:before{content:"󱲦"}.mdi-menorah:before{content:"󱟔"}.mdi-menorah-fire:before{content:"󱟕"}.mdi-menu:before{content:"󰍜"}.mdi-menu-close:before{content:"󱲐"}.mdi-menu-down:before{content:"󰍝"}.mdi-menu-down-outline:before{content:"󰚶"}.mdi-menu-left:before{content:"󰍞"}.mdi-menu-left-outline:before{content:"󰨂"}.mdi-menu-open:before{content:"󰮫"}.mdi-menu-right:before{content:"󰍟"}.mdi-menu-right-outline:before{content:"󰨃"}.mdi-menu-swap:before{content:"󰩤"}.mdi-menu-swap-outline:before{content:"󰩥"}.mdi-menu-up:before{content:"󰍠"}.mdi-menu-up-outline:before{content:"󰚷"}.mdi-merge:before{content:"󰽜"}.mdi-message:before{content:"󰍡"}.mdi-message-alert:before{content:"󰍢"}.mdi-message-alert-outline:before{content:"󰨄"}.mdi-message-arrow-left:before{content:"󱋲"}.mdi-message-arrow-left-outline:before{content:"󱋳"}.mdi-message-arrow-right:before{content:"󱋴"}.mdi-message-arrow-right-outline:before{content:"󱋵"}.mdi-message-badge:before{content:"󱥁"}.mdi-message-badge-outline:before{content:"󱥂"}.mdi-message-bookmark:before{content:"󱖬"}.mdi-message-bookmark-outline:before{content:"󱖭"}.mdi-message-bulleted:before{content:"󰚢"}.mdi-message-bulleted-off:before{content:"󰚣"}.mdi-message-check:before{content:"󱮊"}.mdi-message-check-outline:before{content:"󱮋"}.mdi-message-cog:before{content:"󰛱"}.mdi-message-cog-outline:before{content:"󱅲"}.mdi-message-draw:before{content:"󰍣"}.mdi-message-fast:before{content:"󱧌"}.mdi-message-fast-outline:before{content:"󱧍"}.mdi-message-flash:before{content:"󱖩"}.mdi-message-flash-outline:before{content:"󱖪"}.mdi-message-image:before{content:"󰍤"}.mdi-message-image-outline:before{content:"󱅬"}.mdi-message-lock:before{content:"󰿌"}.mdi-message-lock-outline:before{content:"󱅭"}.mdi-message-minus:before{content:"󱅮"}.mdi-message-minus-outline:before{content:"󱅯"}.mdi-message-off:before{content:"󱙍"}.mdi-message-off-outline:before{content:"󱙎"}.mdi-message-outline:before{content:"󰍥"}.mdi-message-plus:before{content:"󰙓"}.mdi-message-plus-outline:before{content:"󱂻"}.mdi-message-processing:before{content:"󰍦"}.mdi-message-processing-outline:before{content:"󱅰"}.mdi-message-question:before{content:"󱜺"}.mdi-message-question-outline:before{content:"󱜻"}.mdi-message-reply:before{content:"󰍧"}.mdi-message-reply-outline:before{content:"󱜽"}.mdi-message-reply-text:before{content:"󰍨"}.mdi-message-reply-text-outline:before{content:"󱜾"}.mdi-message-settings:before{content:"󰛰"}.mdi-message-settings-outline:before{content:"󱅱"}.mdi-message-star:before{content:"󰚚"}.mdi-message-star-outline:before{content:"󱉐"}.mdi-message-text:before{content:"󰍩"}.mdi-message-text-clock:before{content:"󱅳"}.mdi-message-text-clock-outline:before{content:"󱅴"}.mdi-message-text-fast:before{content:"󱧎"}.mdi-message-text-fast-outline:before{content:"󱧏"}.mdi-message-text-lock:before{content:"󰿍"}.mdi-message-text-lock-outline:before{content:"󱅵"}.mdi-message-text-outline:before{content:"󰍪"}.mdi-message-video:before{content:"󰍫"}.mdi-meteor:before{content:"󰘩"}.mdi-meter-electric:before{content:"󱩗"}.mdi-meter-electric-outline:before{content:"󱩘"}.mdi-meter-gas:before{content:"󱩙"}.mdi-meter-gas-outline:before{content:"󱩚"}.mdi-metronome:before{content:"󰟚"}.mdi-metronome-tick:before{content:"󰟛"}.mdi-micro-sd:before{content:"󰟜"}.mdi-microphone:before{content:"󰍬"}.mdi-microphone-message:before{content:"󰔊"}.mdi-microphone-message-off:before{content:"󰔋"}.mdi-microphone-minus:before{content:"󰢳"}.mdi-microphone-off:before{content:"󰍭"}.mdi-microphone-outline:before{content:"󰍮"}.mdi-microphone-plus:before{content:"󰢴"}.mdi-microphone-question:before{content:"󱦉"}.mdi-microphone-question-outline:before{content:"󱦊"}.mdi-microphone-settings:before{content:"󰍯"}.mdi-microphone-variant:before{content:"󰍰"}.mdi-microphone-variant-off:before{content:"󰍱"}.mdi-microscope:before{content:"󰙔"}.mdi-microsoft:before{content:"󰍲"}.mdi-microsoft-access:before{content:"󱎎"}.mdi-microsoft-azure:before{content:"󰠅"}.mdi-microsoft-azure-devops:before{content:"󰿕"}.mdi-microsoft-bing:before{content:"󰂤"}.mdi-microsoft-dynamics-365:before{content:"󰦈"}.mdi-microsoft-edge:before{content:"󰇩"}.mdi-microsoft-excel:before{content:"󱎏"}.mdi-microsoft-internet-explorer:before{content:"󰌀"}.mdi-microsoft-office:before{content:"󰏆"}.mdi-microsoft-onedrive:before{content:"󰏊"}.mdi-microsoft-onenote:before{content:"󰝇"}.mdi-microsoft-outlook:before{content:"󰴢"}.mdi-microsoft-powerpoint:before{content:"󱎐"}.mdi-microsoft-sharepoint:before{content:"󱎑"}.mdi-microsoft-teams:before{content:"󰊻"}.mdi-microsoft-visual-studio:before{content:"󰘐"}.mdi-microsoft-visual-studio-code:before{content:"󰨞"}.mdi-microsoft-windows:before{content:"󰖳"}.mdi-microsoft-windows-classic:before{content:"󰨡"}.mdi-microsoft-word:before{content:"󱎒"}.mdi-microsoft-xbox:before{content:"󰖹"}.mdi-microsoft-xbox-controller:before{content:"󰖺"}.mdi-microsoft-xbox-controller-battery-alert:before{content:"󰝋"}.mdi-microsoft-xbox-controller-battery-charging:before{content:"󰨢"}.mdi-microsoft-xbox-controller-battery-empty:before{content:"󰝌"}.mdi-microsoft-xbox-controller-battery-full:before{content:"󰝍"}.mdi-microsoft-xbox-controller-battery-low:before{content:"󰝎"}.mdi-microsoft-xbox-controller-battery-medium:before{content:"󰝏"}.mdi-microsoft-xbox-controller-battery-unknown:before{content:"󰝐"}.mdi-microsoft-xbox-controller-menu:before{content:"󰹯"}.mdi-microsoft-xbox-controller-off:before{content:"󰖻"}.mdi-microsoft-xbox-controller-view:before{content:"󰹰"}.mdi-microwave:before{content:"󰲙"}.mdi-microwave-off:before{content:"󱐣"}.mdi-middleware:before{content:"󰽝"}.mdi-middleware-outline:before{content:"󰽞"}.mdi-midi:before{content:"󰣱"}.mdi-midi-port:before{content:"󰣲"}.mdi-mine:before{content:"󰷚"}.mdi-minecraft:before{content:"󰍳"}.mdi-mini-sd:before{content:"󰨅"}.mdi-minidisc:before{content:"󰨆"}.mdi-minus:before{content:"󰍴"}.mdi-minus-box:before{content:"󰍵"}.mdi-minus-box-multiple:before{content:"󱅁"}.mdi-minus-box-multiple-outline:before{content:"󱅂"}.mdi-minus-box-outline:before{content:"󰛲"}.mdi-minus-circle:before{content:"󰍶"}.mdi-minus-circle-multiple:before{content:"󰍚"}.mdi-minus-circle-multiple-outline:before{content:"󰫓"}.mdi-minus-circle-off:before{content:"󱑙"}.mdi-minus-circle-off-outline:before{content:"󱑚"}.mdi-minus-circle-outline:before{content:"󰍷"}.mdi-minus-network:before{content:"󰍸"}.mdi-minus-network-outline:before{content:"󰲚"}.mdi-minus-thick:before{content:"󱘹"}.mdi-mirror:before{content:"󱇽"}.mdi-mirror-rectangle:before{content:"󱞟"}.mdi-mirror-variant:before{content:"󱞠"}.mdi-mixed-martial-arts:before{content:"󰶏"}.mdi-mixed-reality:before{content:"󰡿"}.mdi-molecule:before{content:"󰮬"}.mdi-molecule-co:before{content:"󱋾"}.mdi-molecule-co2:before{content:"󰟤"}.mdi-monitor:before{content:"󰍹"}.mdi-monitor-account:before{content:"󱩛"}.mdi-monitor-arrow-down:before{content:"󱧐"}.mdi-monitor-arrow-down-variant:before{content:"󱧑"}.mdi-monitor-cellphone:before{content:"󰦉"}.mdi-monitor-cellphone-star:before{content:"󰦊"}.mdi-monitor-dashboard:before{content:"󰨇"}.mdi-monitor-edit:before{content:"󱋆"}.mdi-monitor-eye:before{content:"󱎴"}.mdi-monitor-lock:before{content:"󰷛"}.mdi-monitor-multiple:before{content:"󰍺"}.mdi-monitor-off:before{content:"󰶐"}.mdi-monitor-screenshot:before{content:"󰹑"}.mdi-monitor-share:before{content:"󱒃"}.mdi-monitor-shimmer:before{content:"󱄄"}.mdi-monitor-small:before{content:"󱡶"}.mdi-monitor-speaker:before{content:"󰽟"}.mdi-monitor-speaker-off:before{content:"󰽠"}.mdi-monitor-star:before{content:"󰷜"}.mdi-monitor-vertical:before{content:"󱰳"}.mdi-moon-first-quarter:before{content:"󰽡"}.mdi-moon-full:before{content:"󰽢"}.mdi-moon-last-quarter:before{content:"󰽣"}.mdi-moon-new:before{content:"󰽤"}.mdi-moon-waning-crescent:before{content:"󰽥"}.mdi-moon-waning-gibbous:before{content:"󰽦"}.mdi-moon-waxing-crescent:before{content:"󰽧"}.mdi-moon-waxing-gibbous:before{content:"󰽨"}.mdi-moped:before{content:"󱂆"}.mdi-moped-electric:before{content:"󱖷"}.mdi-moped-electric-outline:before{content:"󱖸"}.mdi-moped-outline:before{content:"󱖹"}.mdi-more:before{content:"󰍻"}.mdi-mortar-pestle:before{content:"󱝈"}.mdi-mortar-pestle-plus:before{content:"󰏱"}.mdi-mosque:before{content:"󰵅"}.mdi-mosque-outline:before{content:"󱠧"}.mdi-mother-heart:before{content:"󱌔"}.mdi-mother-nurse:before{content:"󰴡"}.mdi-motion:before{content:"󱖲"}.mdi-motion-outline:before{content:"󱖳"}.mdi-motion-pause:before{content:"󱖐"}.mdi-motion-pause-outline:before{content:"󱖒"}.mdi-motion-play:before{content:"󱖏"}.mdi-motion-play-outline:before{content:"󱖑"}.mdi-motion-sensor:before{content:"󰶑"}.mdi-motion-sensor-off:before{content:"󱐵"}.mdi-motorbike:before{content:"󰍼"}.mdi-motorbike-electric:before{content:"󱖺"}.mdi-motorbike-off:before{content:"󱬖"}.mdi-mouse:before{content:"󰍽"}.mdi-mouse-bluetooth:before{content:"󰦋"}.mdi-mouse-left-click:before{content:"󱴇"}.mdi-mouse-left-click-outline:before{content:"󱴈"}.mdi-mouse-move-down:before{content:"󱕐"}.mdi-mouse-move-up:before{content:"󱕑"}.mdi-mouse-move-vertical:before{content:"󱕒"}.mdi-mouse-off:before{content:"󰍾"}.mdi-mouse-outline:before{content:"󱴉"}.mdi-mouse-right-click:before{content:"󱴊"}.mdi-mouse-right-click-outline:before{content:"󱴋"}.mdi-mouse-scroll-wheel:before{content:"󱴌"}.mdi-mouse-variant:before{content:"󰍿"}.mdi-mouse-variant-off:before{content:"󰎀"}.mdi-move-resize:before{content:"󰙕"}.mdi-move-resize-variant:before{content:"󰙖"}.mdi-movie:before{content:"󰎁"}.mdi-movie-check:before{content:"󱛳"}.mdi-movie-check-outline:before{content:"󱛴"}.mdi-movie-cog:before{content:"󱛵"}.mdi-movie-cog-outline:before{content:"󱛶"}.mdi-movie-edit:before{content:"󱄢"}.mdi-movie-edit-outline:before{content:"󱄣"}.mdi-movie-filter:before{content:"󱄤"}.mdi-movie-filter-outline:before{content:"󱄥"}.mdi-movie-minus:before{content:"󱛷"}.mdi-movie-minus-outline:before{content:"󱛸"}.mdi-movie-off:before{content:"󱛹"}.mdi-movie-off-outline:before{content:"󱛺"}.mdi-movie-open:before{content:"󰿎"}.mdi-movie-open-check:before{content:"󱛻"}.mdi-movie-open-check-outline:before{content:"󱛼"}.mdi-movie-open-cog:before{content:"󱛽"}.mdi-movie-open-cog-outline:before{content:"󱛾"}.mdi-movie-open-edit:before{content:"󱛿"}.mdi-movie-open-edit-outline:before{content:"󱜀"}.mdi-movie-open-minus:before{content:"󱜁"}.mdi-movie-open-minus-outline:before{content:"󱜂"}.mdi-movie-open-off:before{content:"󱜃"}.mdi-movie-open-off-outline:before{content:"󱜄"}.mdi-movie-open-outline:before{content:"󰿏"}.mdi-movie-open-play:before{content:"󱜅"}.mdi-movie-open-play-outline:before{content:"󱜆"}.mdi-movie-open-plus:before{content:"󱜇"}.mdi-movie-open-plus-outline:before{content:"󱜈"}.mdi-movie-open-remove:before{content:"󱜉"}.mdi-movie-open-remove-outline:before{content:"󱜊"}.mdi-movie-open-settings:before{content:"󱜋"}.mdi-movie-open-settings-outline:before{content:"󱜌"}.mdi-movie-open-star:before{content:"󱜍"}.mdi-movie-open-star-outline:before{content:"󱜎"}.mdi-movie-outline:before{content:"󰷝"}.mdi-movie-play:before{content:"󱜏"}.mdi-movie-play-outline:before{content:"󱜐"}.mdi-movie-plus:before{content:"󱜑"}.mdi-movie-plus-outline:before{content:"󱜒"}.mdi-movie-remove:before{content:"󱜓"}.mdi-movie-remove-outline:before{content:"󱜔"}.mdi-movie-roll:before{content:"󰟞"}.mdi-movie-search:before{content:"󱇒"}.mdi-movie-search-outline:before{content:"󱇓"}.mdi-movie-settings:before{content:"󱜕"}.mdi-movie-settings-outline:before{content:"󱜖"}.mdi-movie-star:before{content:"󱜗"}.mdi-movie-star-outline:before{content:"󱜘"}.mdi-mower:before{content:"󱙯"}.mdi-mower-bag:before{content:"󱙰"}.mdi-mower-bag-on:before{content:"󱭠"}.mdi-mower-on:before{content:"󱭟"}.mdi-muffin:before{content:"󰦌"}.mdi-multicast:before{content:"󱢓"}.mdi-multimedia:before{content:"󱮗"}.mdi-multiplication:before{content:"󰎂"}.mdi-multiplication-box:before{content:"󰎃"}.mdi-mushroom:before{content:"󰟟"}.mdi-mushroom-off:before{content:"󱏺"}.mdi-mushroom-off-outline:before{content:"󱏻"}.mdi-mushroom-outline:before{content:"󰟠"}.mdi-music:before{content:"󰝚"}.mdi-music-accidental-double-flat:before{content:"󰽩"}.mdi-music-accidental-double-sharp:before{content:"󰽪"}.mdi-music-accidental-flat:before{content:"󰽫"}.mdi-music-accidental-natural:before{content:"󰽬"}.mdi-music-accidental-sharp:before{content:"󰽭"}.mdi-music-box:before{content:"󰎄"}.mdi-music-box-multiple:before{content:"󰌳"}.mdi-music-box-multiple-outline:before{content:"󰼄"}.mdi-music-box-outline:before{content:"󰎅"}.mdi-music-circle:before{content:"󰎆"}.mdi-music-circle-outline:before{content:"󰫔"}.mdi-music-clef-alto:before{content:"󰽮"}.mdi-music-clef-bass:before{content:"󰽯"}.mdi-music-clef-treble:before{content:"󰽰"}.mdi-music-note:before{content:"󰎇"}.mdi-music-note-bluetooth:before{content:"󰗾"}.mdi-music-note-bluetooth-off:before{content:"󰗿"}.mdi-music-note-eighth:before{content:"󰎈"}.mdi-music-note-eighth-dotted:before{content:"󰽱"}.mdi-music-note-half:before{content:"󰎉"}.mdi-music-note-half-dotted:before{content:"󰽲"}.mdi-music-note-minus:before{content:"󱮉"}.mdi-music-note-off:before{content:"󰎊"}.mdi-music-note-off-outline:before{content:"󰽳"}.mdi-music-note-outline:before{content:"󰽴"}.mdi-music-note-plus:before{content:"󰷞"}.mdi-music-note-quarter:before{content:"󰎋"}.mdi-music-note-quarter-dotted:before{content:"󰽵"}.mdi-music-note-sixteenth:before{content:"󰎌"}.mdi-music-note-sixteenth-dotted:before{content:"󰽶"}.mdi-music-note-whole:before{content:"󰎍"}.mdi-music-note-whole-dotted:before{content:"󰽷"}.mdi-music-off:before{content:"󰝛"}.mdi-music-rest-eighth:before{content:"󰽸"}.mdi-music-rest-half:before{content:"󰽹"}.mdi-music-rest-quarter:before{content:"󰽺"}.mdi-music-rest-sixteenth:before{content:"󰽻"}.mdi-music-rest-whole:before{content:"󰽼"}.mdi-mustache:before{content:"󱗞"}.mdi-nail:before{content:"󰷟"}.mdi-nas:before{content:"󰣳"}.mdi-nativescript:before{content:"󰢀"}.mdi-nature:before{content:"󰎎"}.mdi-nature-outline:before{content:"󱱱"}.mdi-nature-people:before{content:"󰎏"}.mdi-nature-people-outline:before{content:"󱱲"}.mdi-navigation:before{content:"󰎐"}.mdi-navigation-outline:before{content:"󱘇"}.mdi-navigation-variant:before{content:"󱣰"}.mdi-navigation-variant-outline:before{content:"󱣱"}.mdi-near-me:before{content:"󰗍"}.mdi-necklace:before{content:"󰼋"}.mdi-needle:before{content:"󰎑"}.mdi-needle-off:before{content:"󱧒"}.mdi-netflix:before{content:"󰝆"}.mdi-network:before{content:"󰛳"}.mdi-network-off:before{content:"󰲛"}.mdi-network-off-outline:before{content:"󰲜"}.mdi-network-outline:before{content:"󰲝"}.mdi-network-pos:before{content:"󱫋"}.mdi-network-strength-1:before{content:"󰣴"}.mdi-network-strength-1-alert:before{content:"󰣵"}.mdi-network-strength-2:before{content:"󰣶"}.mdi-network-strength-2-alert:before{content:"󰣷"}.mdi-network-strength-3:before{content:"󰣸"}.mdi-network-strength-3-alert:before{content:"󰣹"}.mdi-network-strength-4:before{content:"󰣺"}.mdi-network-strength-4-alert:before{content:"󰣻"}.mdi-network-strength-4-cog:before{content:"󱤚"}.mdi-network-strength-off:before{content:"󰣼"}.mdi-network-strength-off-outline:before{content:"󰣽"}.mdi-network-strength-outline:before{content:"󰣾"}.mdi-new-box:before{content:"󰎔"}.mdi-newspaper:before{content:"󰎕"}.mdi-newspaper-check:before{content:"󱥃"}.mdi-newspaper-minus:before{content:"󰼌"}.mdi-newspaper-plus:before{content:"󰼍"}.mdi-newspaper-remove:before{content:"󱥄"}.mdi-newspaper-variant:before{content:"󱀁"}.mdi-newspaper-variant-multiple:before{content:"󱀂"}.mdi-newspaper-variant-multiple-outline:before{content:"󱀃"}.mdi-newspaper-variant-outline:before{content:"󱀄"}.mdi-nfc:before{content:"󰎖"}.mdi-nfc-search-variant:before{content:"󰹓"}.mdi-nfc-tap:before{content:"󰎗"}.mdi-nfc-variant:before{content:"󰎘"}.mdi-nfc-variant-off:before{content:"󰹔"}.mdi-ninja:before{content:"󰝴"}.mdi-nintendo-game-boy:before{content:"󱎓"}.mdi-nintendo-switch:before{content:"󰟡"}.mdi-nintendo-wii:before{content:"󰖫"}.mdi-nintendo-wiiu:before{content:"󰜭"}.mdi-nix:before{content:"󱄅"}.mdi-nodejs:before{content:"󰎙"}.mdi-noodles:before{content:"󱅾"}.mdi-not-equal:before{content:"󰦍"}.mdi-not-equal-variant:before{content:"󰦎"}.mdi-note:before{content:"󰎚"}.mdi-note-alert:before{content:"󱝽"}.mdi-note-alert-outline:before{content:"󱝾"}.mdi-note-check:before{content:"󱝿"}.mdi-note-check-outline:before{content:"󱞀"}.mdi-note-edit:before{content:"󱞁"}.mdi-note-edit-outline:before{content:"󱞂"}.mdi-note-minus:before{content:"󱙏"}.mdi-note-minus-outline:before{content:"󱙐"}.mdi-note-multiple:before{content:"󰚸"}.mdi-note-multiple-outline:before{content:"󰚹"}.mdi-note-off:before{content:"󱞃"}.mdi-note-off-outline:before{content:"󱞄"}.mdi-note-outline:before{content:"󰎛"}.mdi-note-plus:before{content:"󰎜"}.mdi-note-plus-outline:before{content:"󰎝"}.mdi-note-remove:before{content:"󱙑"}.mdi-note-remove-outline:before{content:"󱙒"}.mdi-note-search:before{content:"󱙓"}.mdi-note-search-outline:before{content:"󱙔"}.mdi-note-text:before{content:"󰎞"}.mdi-note-text-outline:before{content:"󱇗"}.mdi-notebook:before{content:"󰠮"}.mdi-notebook-check:before{content:"󱓵"}.mdi-notebook-check-outline:before{content:"󱓶"}.mdi-notebook-edit:before{content:"󱓧"}.mdi-notebook-edit-outline:before{content:"󱓩"}.mdi-notebook-heart:before{content:"󱨋"}.mdi-notebook-heart-outline:before{content:"󱨌"}.mdi-notebook-minus:before{content:"󱘐"}.mdi-notebook-minus-outline:before{content:"󱘑"}.mdi-notebook-multiple:before{content:"󰹕"}.mdi-notebook-outline:before{content:"󰺿"}.mdi-notebook-plus:before{content:"󱘒"}.mdi-notebook-plus-outline:before{content:"󱘓"}.mdi-notebook-remove:before{content:"󱘔"}.mdi-notebook-remove-outline:before{content:"󱘕"}.mdi-notification-clear-all:before{content:"󰎟"}.mdi-npm:before{content:"󰛷"}.mdi-nuke:before{content:"󰚤"}.mdi-null:before{content:"󰟢"}.mdi-numeric:before{content:"󰎠"}.mdi-numeric-0:before{content:"󰬹"}.mdi-numeric-0-box:before{content:"󰎡"}.mdi-numeric-0-box-multiple:before{content:"󰼎"}.mdi-numeric-0-box-multiple-outline:before{content:"󰎢"}.mdi-numeric-0-box-outline:before{content:"󰎣"}.mdi-numeric-0-circle:before{content:"󰲞"}.mdi-numeric-0-circle-outline:before{content:"󰲟"}.mdi-numeric-1:before{content:"󰬺"}.mdi-numeric-1-box:before{content:"󰎤"}.mdi-numeric-1-box-multiple:before{content:"󰼏"}.mdi-numeric-1-box-multiple-outline:before{content:"󰎥"}.mdi-numeric-1-box-outline:before{content:"󰎦"}.mdi-numeric-1-circle:before{content:"󰲠"}.mdi-numeric-1-circle-outline:before{content:"󰲡"}.mdi-numeric-10:before{content:"󰿩"}.mdi-numeric-10-box:before{content:"󰽽"}.mdi-numeric-10-box-multiple:before{content:"󰿪"}.mdi-numeric-10-box-multiple-outline:before{content:"󰿫"}.mdi-numeric-10-box-outline:before{content:"󰽾"}.mdi-numeric-10-circle:before{content:"󰿬"}.mdi-numeric-10-circle-outline:before{content:"󰿭"}.mdi-numeric-2:before{content:"󰬻"}.mdi-numeric-2-box:before{content:"󰎧"}.mdi-numeric-2-box-multiple:before{content:"󰼐"}.mdi-numeric-2-box-multiple-outline:before{content:"󰎨"}.mdi-numeric-2-box-outline:before{content:"󰎩"}.mdi-numeric-2-circle:before{content:"󰲢"}.mdi-numeric-2-circle-outline:before{content:"󰲣"}.mdi-numeric-3:before{content:"󰬼"}.mdi-numeric-3-box:before{content:"󰎪"}.mdi-numeric-3-box-multiple:before{content:"󰼑"}.mdi-numeric-3-box-multiple-outline:before{content:"󰎫"}.mdi-numeric-3-box-outline:before{content:"󰎬"}.mdi-numeric-3-circle:before{content:"󰲤"}.mdi-numeric-3-circle-outline:before{content:"󰲥"}.mdi-numeric-4:before{content:"󰬽"}.mdi-numeric-4-box:before{content:"󰎭"}.mdi-numeric-4-box-multiple:before{content:"󰼒"}.mdi-numeric-4-box-multiple-outline:before{content:"󰎲"}.mdi-numeric-4-box-outline:before{content:"󰎮"}.mdi-numeric-4-circle:before{content:"󰲦"}.mdi-numeric-4-circle-outline:before{content:"󰲧"}.mdi-numeric-5:before{content:"󰬾"}.mdi-numeric-5-box:before{content:"󰎱"}.mdi-numeric-5-box-multiple:before{content:"󰼓"}.mdi-numeric-5-box-multiple-outline:before{content:"󰎯"}.mdi-numeric-5-box-outline:before{content:"󰎰"}.mdi-numeric-5-circle:before{content:"󰲨"}.mdi-numeric-5-circle-outline:before{content:"󰲩"}.mdi-numeric-6:before{content:"󰬿"}.mdi-numeric-6-box:before{content:"󰎳"}.mdi-numeric-6-box-multiple:before{content:"󰼔"}.mdi-numeric-6-box-multiple-outline:before{content:"󰎴"}.mdi-numeric-6-box-outline:before{content:"󰎵"}.mdi-numeric-6-circle:before{content:"󰲪"}.mdi-numeric-6-circle-outline:before{content:"󰲫"}.mdi-numeric-7:before{content:"󰭀"}.mdi-numeric-7-box:before{content:"󰎶"}.mdi-numeric-7-box-multiple:before{content:"󰼕"}.mdi-numeric-7-box-multiple-outline:before{content:"󰎷"}.mdi-numeric-7-box-outline:before{content:"󰎸"}.mdi-numeric-7-circle:before{content:"󰲬"}.mdi-numeric-7-circle-outline:before{content:"󰲭"}.mdi-numeric-8:before{content:"󰭁"}.mdi-numeric-8-box:before{content:"󰎹"}.mdi-numeric-8-box-multiple:before{content:"󰼖"}.mdi-numeric-8-box-multiple-outline:before{content:"󰎺"}.mdi-numeric-8-box-outline:before{content:"󰎻"}.mdi-numeric-8-circle:before{content:"󰲮"}.mdi-numeric-8-circle-outline:before{content:"󰲯"}.mdi-numeric-9:before{content:"󰭂"}.mdi-numeric-9-box:before{content:"󰎼"}.mdi-numeric-9-box-multiple:before{content:"󰼗"}.mdi-numeric-9-box-multiple-outline:before{content:"󰎽"}.mdi-numeric-9-box-outline:before{content:"󰎾"}.mdi-numeric-9-circle:before{content:"󰲰"}.mdi-numeric-9-circle-outline:before{content:"󰲱"}.mdi-numeric-9-plus:before{content:"󰿮"}.mdi-numeric-9-plus-box:before{content:"󰎿"}.mdi-numeric-9-plus-box-multiple:before{content:"󰼘"}.mdi-numeric-9-plus-box-multiple-outline:before{content:"󰏀"}.mdi-numeric-9-plus-box-outline:before{content:"󰏁"}.mdi-numeric-9-plus-circle:before{content:"󰲲"}.mdi-numeric-9-plus-circle-outline:before{content:"󰲳"}.mdi-numeric-negative-1:before{content:"󱁒"}.mdi-numeric-off:before{content:"󱧓"}.mdi-numeric-positive-1:before{content:"󱗋"}.mdi-nut:before{content:"󰛸"}.mdi-nutrition:before{content:"󰏂"}.mdi-nuxt:before{content:"󱄆"}.mdi-oar:before{content:"󰙼"}.mdi-ocarina:before{content:"󰷠"}.mdi-oci:before{content:"󱋩"}.mdi-ocr:before{content:"󱄺"}.mdi-octagon:before{content:"󰏃"}.mdi-octagon-outline:before{content:"󰏄"}.mdi-octagram:before{content:"󰛹"}.mdi-octagram-edit:before{content:"󱰴"}.mdi-octagram-edit-outline:before{content:"󱰵"}.mdi-octagram-minus:before{content:"󱰶"}.mdi-octagram-minus-outline:before{content:"󱰷"}.mdi-octagram-outline:before{content:"󰝵"}.mdi-octagram-plus:before{content:"󱰸"}.mdi-octagram-plus-outline:before{content:"󱰹"}.mdi-octahedron:before{content:"󱥐"}.mdi-octahedron-off:before{content:"󱥑"}.mdi-odnoklassniki:before{content:"󰏅"}.mdi-offer:before{content:"󱈛"}.mdi-office-building:before{content:"󰦑"}.mdi-office-building-cog:before{content:"󱥉"}.mdi-office-building-cog-outline:before{content:"󱥊"}.mdi-office-building-marker:before{content:"󱔠"}.mdi-office-building-marker-outline:before{content:"󱔡"}.mdi-office-building-minus:before{content:"󱮪"}.mdi-office-building-minus-outline:before{content:"󱮫"}.mdi-office-building-outline:before{content:"󱔟"}.mdi-office-building-plus:before{content:"󱮨"}.mdi-office-building-plus-outline:before{content:"󱮩"}.mdi-office-building-remove:before{content:"󱮬"}.mdi-office-building-remove-outline:before{content:"󱮭"}.mdi-oil:before{content:"󰏇"}.mdi-oil-lamp:before{content:"󰼙"}.mdi-oil-level:before{content:"󱁓"}.mdi-oil-temperature:before{content:"󰿸"}.mdi-om:before{content:"󰥳"}.mdi-omega:before{content:"󰏉"}.mdi-one-up:before{content:"󰮭"}.mdi-onepassword:before{content:"󰢁"}.mdi-opacity:before{content:"󰗌"}.mdi-open-in-app:before{content:"󰏋"}.mdi-open-in-new:before{content:"󰏌"}.mdi-open-source-initiative:before{content:"󰮮"}.mdi-openid:before{content:"󰏍"}.mdi-opera:before{content:"󰏎"}.mdi-orbit:before{content:"󰀘"}.mdi-orbit-variant:before{content:"󱗛"}.mdi-order-alphabetical-ascending:before{content:"󰈍"}.mdi-order-alphabetical-descending:before{content:"󰴇"}.mdi-order-bool-ascending:before{content:"󰊾"}.mdi-order-bool-ascending-variant:before{content:"󰦏"}.mdi-order-bool-descending:before{content:"󱎄"}.mdi-order-bool-descending-variant:before{content:"󰦐"}.mdi-order-numeric-ascending:before{content:"󰕅"}.mdi-order-numeric-descending:before{content:"󰕆"}.mdi-origin:before{content:"󰭃"}.mdi-ornament:before{content:"󰏏"}.mdi-ornament-variant:before{content:"󰏐"}.mdi-outdoor-lamp:before{content:"󱁔"}.mdi-overscan:before{content:"󱀅"}.mdi-owl:before{content:"󰏒"}.mdi-pac-man:before{content:"󰮯"}.mdi-package:before{content:"󰏓"}.mdi-package-check:before{content:"󱭑"}.mdi-package-down:before{content:"󰏔"}.mdi-package-up:before{content:"󰏕"}.mdi-package-variant:before{content:"󰏖"}.mdi-package-variant-closed:before{content:"󰏗"}.mdi-package-variant-closed-check:before{content:"󱭒"}.mdi-package-variant-closed-minus:before{content:"󱧔"}.mdi-package-variant-closed-plus:before{content:"󱧕"}.mdi-package-variant-closed-remove:before{content:"󱧖"}.mdi-package-variant-minus:before{content:"󱧗"}.mdi-package-variant-plus:before{content:"󱧘"}.mdi-package-variant-remove:before{content:"󱧙"}.mdi-page-first:before{content:"󰘀"}.mdi-page-last:before{content:"󰘁"}.mdi-page-layout-body:before{content:"󰛺"}.mdi-page-layout-footer:before{content:"󰛻"}.mdi-page-layout-header:before{content:"󰛼"}.mdi-page-layout-header-footer:before{content:"󰽿"}.mdi-page-layout-sidebar-left:before{content:"󰛽"}.mdi-page-layout-sidebar-right:before{content:"󰛾"}.mdi-page-next:before{content:"󰮰"}.mdi-page-next-outline:before{content:"󰮱"}.mdi-page-previous:before{content:"󰮲"}.mdi-page-previous-outline:before{content:"󰮳"}.mdi-pail:before{content:"󱐗"}.mdi-pail-minus:before{content:"󱐷"}.mdi-pail-minus-outline:before{content:"󱐼"}.mdi-pail-off:before{content:"󱐹"}.mdi-pail-off-outline:before{content:"󱐾"}.mdi-pail-outline:before{content:"󱐺"}.mdi-pail-plus:before{content:"󱐶"}.mdi-pail-plus-outline:before{content:"󱐻"}.mdi-pail-remove:before{content:"󱐸"}.mdi-pail-remove-outline:before{content:"󱐽"}.mdi-palette:before{content:"󰏘"}.mdi-palette-advanced:before{content:"󰏙"}.mdi-palette-outline:before{content:"󰸌"}.mdi-palette-swatch:before{content:"󰢵"}.mdi-palette-swatch-outline:before{content:"󱍜"}.mdi-palette-swatch-variant:before{content:"󱥚"}.mdi-palm-tree:before{content:"󱁕"}.mdi-pan:before{content:"󰮴"}.mdi-pan-bottom-left:before{content:"󰮵"}.mdi-pan-bottom-right:before{content:"󰮶"}.mdi-pan-down:before{content:"󰮷"}.mdi-pan-horizontal:before{content:"󰮸"}.mdi-pan-left:before{content:"󰮹"}.mdi-pan-right:before{content:"󰮺"}.mdi-pan-top-left:before{content:"󰮻"}.mdi-pan-top-right:before{content:"󰮼"}.mdi-pan-up:before{content:"󰮽"}.mdi-pan-vertical:before{content:"󰮾"}.mdi-panda:before{content:"󰏚"}.mdi-pandora:before{content:"󰏛"}.mdi-panorama:before{content:"󰏜"}.mdi-panorama-fisheye:before{content:"󰏝"}.mdi-panorama-horizontal:before{content:"󱤨"}.mdi-panorama-horizontal-outline:before{content:"󰏞"}.mdi-panorama-outline:before{content:"󱦌"}.mdi-panorama-sphere:before{content:"󱦍"}.mdi-panorama-sphere-outline:before{content:"󱦎"}.mdi-panorama-variant:before{content:"󱦏"}.mdi-panorama-variant-outline:before{content:"󱦐"}.mdi-panorama-vertical:before{content:"󱤩"}.mdi-panorama-vertical-outline:before{content:"󰏟"}.mdi-panorama-wide-angle:before{content:"󱥟"}.mdi-panorama-wide-angle-outline:before{content:"󰏠"}.mdi-paper-cut-vertical:before{content:"󰏡"}.mdi-paper-roll:before{content:"󱅗"}.mdi-paper-roll-outline:before{content:"󱅘"}.mdi-paperclip:before{content:"󰏢"}.mdi-paperclip-check:before{content:"󱫆"}.mdi-paperclip-lock:before{content:"󱧚"}.mdi-paperclip-minus:before{content:"󱫇"}.mdi-paperclip-off:before{content:"󱫈"}.mdi-paperclip-plus:before{content:"󱫉"}.mdi-paperclip-remove:before{content:"󱫊"}.mdi-parachute:before{content:"󰲴"}.mdi-parachute-outline:before{content:"󰲵"}.mdi-paragliding:before{content:"󱝅"}.mdi-parking:before{content:"󰏣"}.mdi-party-popper:before{content:"󱁖"}.mdi-passport:before{content:"󰟣"}.mdi-passport-alert:before{content:"󱲸"}.mdi-passport-biometric:before{content:"󰷡"}.mdi-passport-cancel:before{content:"󱲹"}.mdi-passport-check:before{content:"󱲺"}.mdi-passport-minus:before{content:"󱲻"}.mdi-passport-plus:before{content:"󱲼"}.mdi-passport-remove:before{content:"󱲽"}.mdi-pasta:before{content:"󱅠"}.mdi-patio-heater:before{content:"󰾀"}.mdi-patreon:before{content:"󰢂"}.mdi-pause:before{content:"󰏤"}.mdi-pause-box:before{content:"󰂼"}.mdi-pause-box-outline:before{content:"󱭺"}.mdi-pause-circle:before{content:"󰏥"}.mdi-pause-circle-outline:before{content:"󰏦"}.mdi-pause-octagon:before{content:"󰏧"}.mdi-pause-octagon-outline:before{content:"󰏨"}.mdi-paw:before{content:"󰏩"}.mdi-paw-off:before{content:"󰙗"}.mdi-paw-off-outline:before{content:"󱙶"}.mdi-paw-outline:before{content:"󱙵"}.mdi-peace:before{content:"󰢄"}.mdi-peanut:before{content:"󰿼"}.mdi-peanut-off:before{content:"󰿽"}.mdi-peanut-off-outline:before{content:"󰿿"}.mdi-peanut-outline:before{content:"󰿾"}.mdi-pen:before{content:"󰏪"}.mdi-pen-lock:before{content:"󰷢"}.mdi-pen-minus:before{content:"󰷣"}.mdi-pen-off:before{content:"󰷤"}.mdi-pen-plus:before{content:"󰷥"}.mdi-pen-remove:before{content:"󰷦"}.mdi-pencil:before{content:"󰏫"}.mdi-pencil-box:before{content:"󰏬"}.mdi-pencil-box-multiple:before{content:"󱅄"}.mdi-pencil-box-multiple-outline:before{content:"󱅅"}.mdi-pencil-box-outline:before{content:"󰏭"}.mdi-pencil-circle:before{content:"󰛿"}.mdi-pencil-circle-outline:before{content:"󰝶"}.mdi-pencil-lock:before{content:"󰏮"}.mdi-pencil-lock-outline:before{content:"󰷧"}.mdi-pencil-minus:before{content:"󰷨"}.mdi-pencil-minus-outline:before{content:"󰷩"}.mdi-pencil-off:before{content:"󰏯"}.mdi-pencil-off-outline:before{content:"󰷪"}.mdi-pencil-outline:before{content:"󰲶"}.mdi-pencil-plus:before{content:"󰷫"}.mdi-pencil-plus-outline:before{content:"󰷬"}.mdi-pencil-remove:before{content:"󰷭"}.mdi-pencil-remove-outline:before{content:"󰷮"}.mdi-pencil-ruler:before{content:"󱍓"}.mdi-pencil-ruler-outline:before{content:"󱰑"}.mdi-penguin:before{content:"󰻀"}.mdi-pentagon:before{content:"󰜁"}.mdi-pentagon-outline:before{content:"󰜀"}.mdi-pentagram:before{content:"󱙧"}.mdi-percent:before{content:"󰏰"}.mdi-percent-box:before{content:"󱨂"}.mdi-percent-box-outline:before{content:"󱨃"}.mdi-percent-circle:before{content:"󱨄"}.mdi-percent-circle-outline:before{content:"󱨅"}.mdi-percent-outline:before{content:"󱉸"}.mdi-periodic-table:before{content:"󰢶"}.mdi-perspective-less:before{content:"󰴣"}.mdi-perspective-more:before{content:"󰴤"}.mdi-ph:before{content:"󱟅"}.mdi-phone:before{content:"󰏲"}.mdi-phone-alert:before{content:"󰼚"}.mdi-phone-alert-outline:before{content:"󱆎"}.mdi-phone-bluetooth:before{content:"󰏳"}.mdi-phone-bluetooth-outline:before{content:"󱆏"}.mdi-phone-cancel:before{content:"󱂼"}.mdi-phone-cancel-outline:before{content:"󱆐"}.mdi-phone-check:before{content:"󱆩"}.mdi-phone-check-outline:before{content:"󱆪"}.mdi-phone-classic:before{content:"󰘂"}.mdi-phone-classic-off:before{content:"󱉹"}.mdi-phone-clock:before{content:"󱧛"}.mdi-phone-dial:before{content:"󱕙"}.mdi-phone-dial-outline:before{content:"󱕚"}.mdi-phone-forward:before{content:"󰏴"}.mdi-phone-forward-outline:before{content:"󱆑"}.mdi-phone-hangup:before{content:"󰏵"}.mdi-phone-hangup-outline:before{content:"󱆒"}.mdi-phone-in-talk:before{content:"󰏶"}.mdi-phone-in-talk-outline:before{content:"󱆂"}.mdi-phone-incoming:before{content:"󰏷"}.mdi-phone-incoming-outgoing:before{content:"󱬿"}.mdi-phone-incoming-outgoing-outline:before{content:"󱭀"}.mdi-phone-incoming-outline:before{content:"󱆓"}.mdi-phone-lock:before{content:"󰏸"}.mdi-phone-lock-outline:before{content:"󱆔"}.mdi-phone-log:before{content:"󰏹"}.mdi-phone-log-outline:before{content:"󱆕"}.mdi-phone-message:before{content:"󱆖"}.mdi-phone-message-outline:before{content:"󱆗"}.mdi-phone-minus:before{content:"󰙘"}.mdi-phone-minus-outline:before{content:"󱆘"}.mdi-phone-missed:before{content:"󰏺"}.mdi-phone-missed-outline:before{content:"󱆥"}.mdi-phone-off:before{content:"󰷯"}.mdi-phone-off-outline:before{content:"󱆦"}.mdi-phone-outgoing:before{content:"󰏻"}.mdi-phone-outgoing-outline:before{content:"󱆙"}.mdi-phone-outline:before{content:"󰷰"}.mdi-phone-paused:before{content:"󰏼"}.mdi-phone-paused-outline:before{content:"󱆚"}.mdi-phone-plus:before{content:"󰙙"}.mdi-phone-plus-outline:before{content:"󱆛"}.mdi-phone-refresh:before{content:"󱦓"}.mdi-phone-refresh-outline:before{content:"󱦔"}.mdi-phone-remove:before{content:"󱔯"}.mdi-phone-remove-outline:before{content:"󱔰"}.mdi-phone-return:before{content:"󰠯"}.mdi-phone-return-outline:before{content:"󱆜"}.mdi-phone-ring:before{content:"󱆫"}.mdi-phone-ring-outline:before{content:"󱆬"}.mdi-phone-rotate-landscape:before{content:"󰢅"}.mdi-phone-rotate-portrait:before{content:"󰢆"}.mdi-phone-settings:before{content:"󰏽"}.mdi-phone-settings-outline:before{content:"󱆝"}.mdi-phone-sync:before{content:"󱦕"}.mdi-phone-sync-outline:before{content:"󱦖"}.mdi-phone-voip:before{content:"󰏾"}.mdi-pi:before{content:"󰏿"}.mdi-pi-box:before{content:"󰐀"}.mdi-pi-hole:before{content:"󰷱"}.mdi-piano:before{content:"󰙽"}.mdi-piano-off:before{content:"󰚘"}.mdi-pickaxe:before{content:"󰢷"}.mdi-picture-in-picture-bottom-right:before{content:"󰹗"}.mdi-picture-in-picture-bottom-right-outline:before{content:"󰹘"}.mdi-picture-in-picture-top-right:before{content:"󰹙"}.mdi-picture-in-picture-top-right-outline:before{content:"󰹚"}.mdi-pier:before{content:"󰢇"}.mdi-pier-crane:before{content:"󰢈"}.mdi-pig:before{content:"󰐁"}.mdi-pig-variant:before{content:"󱀆"}.mdi-pig-variant-outline:before{content:"󱙸"}.mdi-piggy-bank:before{content:"󱀇"}.mdi-piggy-bank-outline:before{content:"󱙹"}.mdi-pill:before{content:"󰐂"}.mdi-pill-multiple:before{content:"󱭌"}.mdi-pill-off:before{content:"󱩜"}.mdi-pillar:before{content:"󰜂"}.mdi-pin:before{content:"󰐃"}.mdi-pin-off:before{content:"󰐄"}.mdi-pin-off-outline:before{content:"󰤰"}.mdi-pin-outline:before{content:"󰤱"}.mdi-pine-tree:before{content:"󰐅"}.mdi-pine-tree-box:before{content:"󰐆"}.mdi-pine-tree-fire:before{content:"󱐚"}.mdi-pine-tree-variant:before{content:"󱱳"}.mdi-pine-tree-variant-outline:before{content:"󱱴"}.mdi-pinterest:before{content:"󰐇"}.mdi-pinwheel:before{content:"󰫕"}.mdi-pinwheel-outline:before{content:"󰫖"}.mdi-pipe:before{content:"󰟥"}.mdi-pipe-disconnected:before{content:"󰟦"}.mdi-pipe-leak:before{content:"󰢉"}.mdi-pipe-valve:before{content:"󱡍"}.mdi-pipe-wrench:before{content:"󱍔"}.mdi-pirate:before{content:"󰨈"}.mdi-pistol:before{content:"󰜃"}.mdi-piston:before{content:"󰢊"}.mdi-pitchfork:before{content:"󱕓"}.mdi-pizza:before{content:"󰐉"}.mdi-plane-car:before{content:"󱫿"}.mdi-plane-train:before{content:"󱬀"}.mdi-play:before{content:"󰐊"}.mdi-play-box:before{content:"󱉺"}.mdi-play-box-edit-outline:before{content:"󱰺"}.mdi-play-box-lock:before{content:"󱨖"}.mdi-play-box-lock-open:before{content:"󱨗"}.mdi-play-box-lock-open-outline:before{content:"󱨘"}.mdi-play-box-lock-outline:before{content:"󱨙"}.mdi-play-box-multiple:before{content:"󰴙"}.mdi-play-box-multiple-outline:before{content:"󱏦"}.mdi-play-box-outline:before{content:"󰐋"}.mdi-play-circle:before{content:"󰐌"}.mdi-play-circle-outline:before{content:"󰐍"}.mdi-play-network:before{content:"󰢋"}.mdi-play-network-outline:before{content:"󰲷"}.mdi-play-outline:before{content:"󰼛"}.mdi-play-pause:before{content:"󰐎"}.mdi-play-protected-content:before{content:"󰐏"}.mdi-play-speed:before{content:"󰣿"}.mdi-playlist-check:before{content:"󰗇"}.mdi-playlist-edit:before{content:"󰤀"}.mdi-playlist-minus:before{content:"󰐐"}.mdi-playlist-music:before{content:"󰲸"}.mdi-playlist-music-outline:before{content:"󰲹"}.mdi-playlist-play:before{content:"󰐑"}.mdi-playlist-plus:before{content:"󰐒"}.mdi-playlist-remove:before{content:"󰐓"}.mdi-playlist-star:before{content:"󰷲"}.mdi-plex:before{content:"󰚺"}.mdi-pliers:before{content:"󱦤"}.mdi-plus:before{content:"󰐕"}.mdi-plus-box:before{content:"󰐖"}.mdi-plus-box-multiple:before{content:"󰌴"}.mdi-plus-box-multiple-outline:before{content:"󱅃"}.mdi-plus-box-outline:before{content:"󰜄"}.mdi-plus-circle:before{content:"󰐗"}.mdi-plus-circle-multiple:before{content:"󰍌"}.mdi-plus-circle-multiple-outline:before{content:"󰐘"}.mdi-plus-circle-outline:before{content:"󰐙"}.mdi-plus-lock:before{content:"󱩝"}.mdi-plus-lock-open:before{content:"󱩞"}.mdi-plus-minus:before{content:"󰦒"}.mdi-plus-minus-box:before{content:"󰦓"}.mdi-plus-minus-variant:before{content:"󱓉"}.mdi-plus-network:before{content:"󰐚"}.mdi-plus-network-outline:before{content:"󰲺"}.mdi-plus-outline:before{content:"󰜅"}.mdi-plus-thick:before{content:"󱇬"}.mdi-pocket:before{content:"󱲾"}.mdi-podcast:before{content:"󰦔"}.mdi-podium:before{content:"󰴥"}.mdi-podium-bronze:before{content:"󰴦"}.mdi-podium-gold:before{content:"󰴧"}.mdi-podium-silver:before{content:"󰴨"}.mdi-point-of-sale:before{content:"󰶒"}.mdi-pokeball:before{content:"󰐝"}.mdi-pokemon-go:before{content:"󰨉"}.mdi-poker-chip:before{content:"󰠰"}.mdi-polaroid:before{content:"󰐞"}.mdi-police-badge:before{content:"󱅧"}.mdi-police-badge-outline:before{content:"󱅨"}.mdi-police-station:before{content:"󱠹"}.mdi-poll:before{content:"󰐟"}.mdi-polo:before{content:"󱓃"}.mdi-polymer:before{content:"󰐡"}.mdi-pool:before{content:"󰘆"}.mdi-pool-thermometer:before{content:"󱩟"}.mdi-popcorn:before{content:"󰐢"}.mdi-post:before{content:"󱀈"}.mdi-post-lamp:before{content:"󱩠"}.mdi-post-outline:before{content:"󱀉"}.mdi-postage-stamp:before{content:"󰲻"}.mdi-pot:before{content:"󰋥"}.mdi-pot-mix:before{content:"󰙛"}.mdi-pot-mix-outline:before{content:"󰙷"}.mdi-pot-outline:before{content:"󰋿"}.mdi-pot-steam:before{content:"󰙚"}.mdi-pot-steam-outline:before{content:"󰌦"}.mdi-pound:before{content:"󰐣"}.mdi-pound-box:before{content:"󰐤"}.mdi-pound-box-outline:before{content:"󱅿"}.mdi-power:before{content:"󰐥"}.mdi-power-cycle:before{content:"󰤁"}.mdi-power-off:before{content:"󰤂"}.mdi-power-on:before{content:"󰤃"}.mdi-power-plug:before{content:"󰚥"}.mdi-power-plug-battery:before{content:"󱰻"}.mdi-power-plug-battery-outline:before{content:"󱰼"}.mdi-power-plug-off:before{content:"󰚦"}.mdi-power-plug-off-outline:before{content:"󱐤"}.mdi-power-plug-outline:before{content:"󱐥"}.mdi-power-settings:before{content:"󰐦"}.mdi-power-sleep:before{content:"󰤄"}.mdi-power-socket:before{content:"󰐧"}.mdi-power-socket-au:before{content:"󰤅"}.mdi-power-socket-ch:before{content:"󰾳"}.mdi-power-socket-de:before{content:"󱄇"}.mdi-power-socket-eu:before{content:"󰟧"}.mdi-power-socket-fr:before{content:"󱄈"}.mdi-power-socket-it:before{content:"󱓿"}.mdi-power-socket-jp:before{content:"󱄉"}.mdi-power-socket-uk:before{content:"󰟨"}.mdi-power-socket-us:before{content:"󰟩"}.mdi-power-standby:before{content:"󰤆"}.mdi-powershell:before{content:"󰨊"}.mdi-prescription:before{content:"󰜆"}.mdi-presentation:before{content:"󰐨"}.mdi-presentation-play:before{content:"󰐩"}.mdi-pretzel:before{content:"󱕢"}.mdi-printer:before{content:"󰐪"}.mdi-printer-3d:before{content:"󰐫"}.mdi-printer-3d-nozzle:before{content:"󰹛"}.mdi-printer-3d-nozzle-alert:before{content:"󱇀"}.mdi-printer-3d-nozzle-alert-outline:before{content:"󱇁"}.mdi-printer-3d-nozzle-heat:before{content:"󱢸"}.mdi-printer-3d-nozzle-heat-outline:before{content:"󱢹"}.mdi-printer-3d-nozzle-off:before{content:"󱬙"}.mdi-printer-3d-nozzle-off-outline:before{content:"󱬚"}.mdi-printer-3d-nozzle-outline:before{content:"󰹜"}.mdi-printer-3d-off:before{content:"󱬎"}.mdi-printer-alert:before{content:"󰐬"}.mdi-printer-check:before{content:"󱅆"}.mdi-printer-eye:before{content:"󱑘"}.mdi-printer-off:before{content:"󰹝"}.mdi-printer-off-outline:before{content:"󱞅"}.mdi-printer-outline:before{content:"󱞆"}.mdi-printer-pos:before{content:"󱁗"}.mdi-printer-pos-alert:before{content:"󱮼"}.mdi-printer-pos-alert-outline:before{content:"󱮽"}.mdi-printer-pos-cancel:before{content:"󱮾"}.mdi-printer-pos-cancel-outline:before{content:"󱮿"}.mdi-printer-pos-check:before{content:"󱯀"}.mdi-printer-pos-check-outline:before{content:"󱯁"}.mdi-printer-pos-cog:before{content:"󱯂"}.mdi-printer-pos-cog-outline:before{content:"󱯃"}.mdi-printer-pos-edit:before{content:"󱯄"}.mdi-printer-pos-edit-outline:before{content:"󱯅"}.mdi-printer-pos-minus:before{content:"󱯆"}.mdi-printer-pos-minus-outline:before{content:"󱯇"}.mdi-printer-pos-network:before{content:"󱯈"}.mdi-printer-pos-network-outline:before{content:"󱯉"}.mdi-printer-pos-off:before{content:"󱯊"}.mdi-printer-pos-off-outline:before{content:"󱯋"}.mdi-printer-pos-outline:before{content:"󱯌"}.mdi-printer-pos-pause:before{content:"󱯍"}.mdi-printer-pos-pause-outline:before{content:"󱯎"}.mdi-printer-pos-play:before{content:"󱯏"}.mdi-printer-pos-play-outline:before{content:"󱯐"}.mdi-printer-pos-plus:before{content:"󱯑"}.mdi-printer-pos-plus-outline:before{content:"󱯒"}.mdi-printer-pos-refresh:before{content:"󱯓"}.mdi-printer-pos-refresh-outline:before{content:"󱯔"}.mdi-printer-pos-remove:before{content:"󱯕"}.mdi-printer-pos-remove-outline:before{content:"󱯖"}.mdi-printer-pos-star:before{content:"󱯗"}.mdi-printer-pos-star-outline:before{content:"󱯘"}.mdi-printer-pos-stop:before{content:"󱯙"}.mdi-printer-pos-stop-outline:before{content:"󱯚"}.mdi-printer-pos-sync:before{content:"󱯛"}.mdi-printer-pos-sync-outline:before{content:"󱯜"}.mdi-printer-pos-wrench:before{content:"󱯝"}.mdi-printer-pos-wrench-outline:before{content:"󱯞"}.mdi-printer-search:before{content:"󱑗"}.mdi-printer-settings:before{content:"󰜇"}.mdi-printer-wireless:before{content:"󰨋"}.mdi-priority-high:before{content:"󰘃"}.mdi-priority-low:before{content:"󰘄"}.mdi-professional-hexagon:before{content:"󰐭"}.mdi-progress-alert:before{content:"󰲼"}.mdi-progress-check:before{content:"󰦕"}.mdi-progress-clock:before{content:"󰦖"}.mdi-progress-close:before{content:"󱄊"}.mdi-progress-download:before{content:"󰦗"}.mdi-progress-helper:before{content:"󱮢"}.mdi-progress-pencil:before{content:"󱞇"}.mdi-progress-question:before{content:"󱔢"}.mdi-progress-star:before{content:"󱞈"}.mdi-progress-star-four-points:before{content:"󱰽"}.mdi-progress-tag:before{content:"󱴍"}.mdi-progress-upload:before{content:"󰦘"}.mdi-progress-wrench:before{content:"󰲽"}.mdi-projector:before{content:"󰐮"}.mdi-projector-off:before{content:"󱨣"}.mdi-projector-screen:before{content:"󰐯"}.mdi-projector-screen-off:before{content:"󱠍"}.mdi-projector-screen-off-outline:before{content:"󱠎"}.mdi-projector-screen-outline:before{content:"󱜤"}.mdi-projector-screen-variant:before{content:"󱠏"}.mdi-projector-screen-variant-off:before{content:"󱠐"}.mdi-projector-screen-variant-off-outline:before{content:"󱠑"}.mdi-projector-screen-variant-outline:before{content:"󱠒"}.mdi-propane-tank:before{content:"󱍗"}.mdi-propane-tank-outline:before{content:"󱍘"}.mdi-protocol:before{content:"󰿘"}.mdi-publish:before{content:"󰚧"}.mdi-publish-off:before{content:"󱥅"}.mdi-pulse:before{content:"󰐰"}.mdi-pump:before{content:"󱐂"}.mdi-pump-off:before{content:"󱬢"}.mdi-pumpkin:before{content:"󰮿"}.mdi-purse:before{content:"󰼜"}.mdi-purse-outline:before{content:"󰼝"}.mdi-puzzle:before{content:"󰐱"}.mdi-puzzle-check:before{content:"󱐦"}.mdi-puzzle-check-outline:before{content:"󱐧"}.mdi-puzzle-edit:before{content:"󱓓"}.mdi-puzzle-edit-outline:before{content:"󱓙"}.mdi-puzzle-heart:before{content:"󱓔"}.mdi-puzzle-heart-outline:before{content:"󱓚"}.mdi-puzzle-minus:before{content:"󱓑"}.mdi-puzzle-minus-outline:before{content:"󱓗"}.mdi-puzzle-outline:before{content:"󰩦"}.mdi-puzzle-plus:before{content:"󱓐"}.mdi-puzzle-plus-outline:before{content:"󱓖"}.mdi-puzzle-remove:before{content:"󱓒"}.mdi-puzzle-remove-outline:before{content:"󱓘"}.mdi-puzzle-star:before{content:"󱓕"}.mdi-puzzle-star-outline:before{content:"󱓛"}.mdi-pyramid:before{content:"󱥒"}.mdi-pyramid-off:before{content:"󱥓"}.mdi-qi:before{content:"󰦙"}.mdi-qqchat:before{content:"󰘅"}.mdi-qrcode:before{content:"󰐲"}.mdi-qrcode-edit:before{content:"󰢸"}.mdi-qrcode-minus:before{content:"󱆌"}.mdi-qrcode-plus:before{content:"󱆋"}.mdi-qrcode-remove:before{content:"󱆍"}.mdi-qrcode-scan:before{content:"󰐳"}.mdi-quadcopter:before{content:"󰐴"}.mdi-quality-high:before{content:"󰐵"}.mdi-quality-low:before{content:"󰨌"}.mdi-quality-medium:before{content:"󰨍"}.mdi-queue-first-in-last-out:before{content:"󱲯"}.mdi-quora:before{content:"󰴩"}.mdi-rabbit:before{content:"󰤇"}.mdi-rabbit-variant:before{content:"󱩡"}.mdi-rabbit-variant-outline:before{content:"󱩢"}.mdi-racing-helmet:before{content:"󰶓"}.mdi-racquetball:before{content:"󰶔"}.mdi-radar:before{content:"󰐷"}.mdi-radiator:before{content:"󰐸"}.mdi-radiator-disabled:before{content:"󰫗"}.mdi-radiator-off:before{content:"󰫘"}.mdi-radio:before{content:"󰐹"}.mdi-radio-am:before{content:"󰲾"}.mdi-radio-fm:before{content:"󰲿"}.mdi-radio-handheld:before{content:"󰐺"}.mdi-radio-off:before{content:"󱈜"}.mdi-radio-tower:before{content:"󰐻"}.mdi-radioactive:before{content:"󰐼"}.mdi-radioactive-circle:before{content:"󱡝"}.mdi-radioactive-circle-outline:before{content:"󱡞"}.mdi-radioactive-off:before{content:"󰻁"}.mdi-radiobox-blank:before{content:"󰐽"}.mdi-radiobox-indeterminate-variant:before{content:"󱱞"}.mdi-radiobox-marked:before{content:"󰐾"}.mdi-radiology-box:before{content:"󱓅"}.mdi-radiology-box-outline:before{content:"󱓆"}.mdi-radius:before{content:"󰳀"}.mdi-radius-outline:before{content:"󰳁"}.mdi-railroad-light:before{content:"󰼞"}.mdi-rake:before{content:"󱕄"}.mdi-raspberry-pi:before{content:"󰐿"}.mdi-raw:before{content:"󱨏"}.mdi-raw-off:before{content:"󱨐"}.mdi-ray-end:before{content:"󰑀"}.mdi-ray-end-arrow:before{content:"󰑁"}.mdi-ray-start:before{content:"󰑂"}.mdi-ray-start-arrow:before{content:"󰑃"}.mdi-ray-start-end:before{content:"󰑄"}.mdi-ray-start-vertex-end:before{content:"󱗘"}.mdi-ray-vertex:before{content:"󰑅"}.mdi-razor-double-edge:before{content:"󱦗"}.mdi-razor-single-edge:before{content:"󱦘"}.mdi-react:before{content:"󰜈"}.mdi-read:before{content:"󰑇"}.mdi-receipt:before{content:"󰠤"}.mdi-receipt-clock:before{content:"󱰾"}.mdi-receipt-clock-outline:before{content:"󱰿"}.mdi-receipt-outline:before{content:"󰓷"}.mdi-receipt-send:before{content:"󱱀"}.mdi-receipt-send-outline:before{content:"󱱁"}.mdi-receipt-text:before{content:"󰑉"}.mdi-receipt-text-arrow-left:before{content:"󱱂"}.mdi-receipt-text-arrow-left-outline:before{content:"󱱃"}.mdi-receipt-text-arrow-right:before{content:"󱱄"}.mdi-receipt-text-arrow-right-outline:before{content:"󱱅"}.mdi-receipt-text-check:before{content:"󱩣"}.mdi-receipt-text-check-outline:before{content:"󱩤"}.mdi-receipt-text-clock:before{content:"󱱆"}.mdi-receipt-text-clock-outline:before{content:"󱱇"}.mdi-receipt-text-edit:before{content:"󱱈"}.mdi-receipt-text-edit-outline:before{content:"󱱉"}.mdi-receipt-text-minus:before{content:"󱩥"}.mdi-receipt-text-minus-outline:before{content:"󱩦"}.mdi-receipt-text-outline:before{content:"󱧜"}.mdi-receipt-text-plus:before{content:"󱩧"}.mdi-receipt-text-plus-outline:before{content:"󱩨"}.mdi-receipt-text-remove:before{content:"󱩩"}.mdi-receipt-text-remove-outline:before{content:"󱩪"}.mdi-receipt-text-send:before{content:"󱱊"}.mdi-receipt-text-send-outline:before{content:"󱱋"}.mdi-record:before{content:"󰑊"}.mdi-record-circle:before{content:"󰻂"}.mdi-record-circle-outline:before{content:"󰻃"}.mdi-record-player:before{content:"󰦚"}.mdi-record-rec:before{content:"󰑋"}.mdi-rectangle:before{content:"󰹞"}.mdi-rectangle-outline:before{content:"󰹟"}.mdi-recycle:before{content:"󰑌"}.mdi-recycle-variant:before{content:"󱎝"}.mdi-reddit:before{content:"󰑍"}.mdi-redhat:before{content:"󱄛"}.mdi-redo:before{content:"󰑎"}.mdi-redo-variant:before{content:"󰑏"}.mdi-reflect-horizontal:before{content:"󰨎"}.mdi-reflect-vertical:before{content:"󰨏"}.mdi-refresh:before{content:"󰑐"}.mdi-refresh-auto:before{content:"󱣲"}.mdi-refresh-circle:before{content:"󱍷"}.mdi-regex:before{content:"󰑑"}.mdi-registered-trademark:before{content:"󰩧"}.mdi-reiterate:before{content:"󱖈"}.mdi-relation-many-to-many:before{content:"󱒖"}.mdi-relation-many-to-one:before{content:"󱒗"}.mdi-relation-many-to-one-or-many:before{content:"󱒘"}.mdi-relation-many-to-only-one:before{content:"󱒙"}.mdi-relation-many-to-zero-or-many:before{content:"󱒚"}.mdi-relation-many-to-zero-or-one:before{content:"󱒛"}.mdi-relation-one-or-many-to-many:before{content:"󱒜"}.mdi-relation-one-or-many-to-one:before{content:"󱒝"}.mdi-relation-one-or-many-to-one-or-many:before{content:"󱒞"}.mdi-relation-one-or-many-to-only-one:before{content:"󱒟"}.mdi-relation-one-or-many-to-zero-or-many:before{content:"󱒠"}.mdi-relation-one-or-many-to-zero-or-one:before{content:"󱒡"}.mdi-relation-one-to-many:before{content:"󱒢"}.mdi-relation-one-to-one:before{content:"󱒣"}.mdi-relation-one-to-one-or-many:before{content:"󱒤"}.mdi-relation-one-to-only-one:before{content:"󱒥"}.mdi-relation-one-to-zero-or-many:before{content:"󱒦"}.mdi-relation-one-to-zero-or-one:before{content:"󱒧"}.mdi-relation-only-one-to-many:before{content:"󱒨"}.mdi-relation-only-one-to-one:before{content:"󱒩"}.mdi-relation-only-one-to-one-or-many:before{content:"󱒪"}.mdi-relation-only-one-to-only-one:before{content:"󱒫"}.mdi-relation-only-one-to-zero-or-many:before{content:"󱒬"}.mdi-relation-only-one-to-zero-or-one:before{content:"󱒭"}.mdi-relation-zero-or-many-to-many:before{content:"󱒮"}.mdi-relation-zero-or-many-to-one:before{content:"󱒯"}.mdi-relation-zero-or-many-to-one-or-many:before{content:"󱒰"}.mdi-relation-zero-or-many-to-only-one:before{content:"󱒱"}.mdi-relation-zero-or-many-to-zero-or-many:before{content:"󱒲"}.mdi-relation-zero-or-many-to-zero-or-one:before{content:"󱒳"}.mdi-relation-zero-or-one-to-many:before{content:"󱒴"}.mdi-relation-zero-or-one-to-one:before{content:"󱒵"}.mdi-relation-zero-or-one-to-one-or-many:before{content:"󱒶"}.mdi-relation-zero-or-one-to-only-one:before{content:"󱒷"}.mdi-relation-zero-or-one-to-zero-or-many:before{content:"󱒸"}.mdi-relation-zero-or-one-to-zero-or-one:before{content:"󱒹"}.mdi-relative-scale:before{content:"󰑒"}.mdi-reload:before{content:"󰑓"}.mdi-reload-alert:before{content:"󱄋"}.mdi-reminder:before{content:"󰢌"}.mdi-remote:before{content:"󰑔"}.mdi-remote-desktop:before{content:"󰢹"}.mdi-remote-off:before{content:"󰻄"}.mdi-remote-tv:before{content:"󰻅"}.mdi-remote-tv-off:before{content:"󰻆"}.mdi-rename:before{content:"󱰘"}.mdi-rename-box:before{content:"󰑕"}.mdi-rename-box-outline:before{content:"󱰙"}.mdi-rename-outline:before{content:"󱰚"}.mdi-reorder-horizontal:before{content:"󰚈"}.mdi-reorder-vertical:before{content:"󰚉"}.mdi-repeat:before{content:"󰑖"}.mdi-repeat-off:before{content:"󰑗"}.mdi-repeat-once:before{content:"󰑘"}.mdi-repeat-variant:before{content:"󰕇"}.mdi-replay:before{content:"󰑙"}.mdi-reply:before{content:"󰑚"}.mdi-reply-all:before{content:"󰑛"}.mdi-reply-all-outline:before{content:"󰼟"}.mdi-reply-circle:before{content:"󱆮"}.mdi-reply-outline:before{content:"󰼠"}.mdi-reproduction:before{content:"󰑜"}.mdi-resistor:before{content:"󰭄"}.mdi-resistor-nodes:before{content:"󰭅"}.mdi-resize:before{content:"󰩨"}.mdi-resize-bottom-right:before{content:"󰑝"}.mdi-responsive:before{content:"󰑞"}.mdi-restart:before{content:"󰜉"}.mdi-restart-alert:before{content:"󱄌"}.mdi-restart-off:before{content:"󰶕"}.mdi-restore:before{content:"󰦛"}.mdi-restore-alert:before{content:"󱄍"}.mdi-rewind:before{content:"󰑟"}.mdi-rewind-10:before{content:"󰴪"}.mdi-rewind-15:before{content:"󱥆"}.mdi-rewind-30:before{content:"󰶖"}.mdi-rewind-45:before{content:"󱬓"}.mdi-rewind-5:before{content:"󱇹"}.mdi-rewind-60:before{content:"󱘌"}.mdi-rewind-outline:before{content:"󰜊"}.mdi-rhombus:before{content:"󰜋"}.mdi-rhombus-medium:before{content:"󰨐"}.mdi-rhombus-medium-outline:before{content:"󱓜"}.mdi-rhombus-outline:before{content:"󰜌"}.mdi-rhombus-split:before{content:"󰨑"}.mdi-rhombus-split-outline:before{content:"󱓝"}.mdi-ribbon:before{content:"󰑠"}.mdi-rice:before{content:"󰟪"}.mdi-rickshaw:before{content:"󱖻"}.mdi-rickshaw-electric:before{content:"󱖼"}.mdi-ring:before{content:"󰟫"}.mdi-rivet:before{content:"󰹠"}.mdi-road:before{content:"󰑡"}.mdi-road-variant:before{content:"󰑢"}.mdi-robber:before{content:"󱁘"}.mdi-robot:before{content:"󰚩"}.mdi-robot-angry:before{content:"󱚝"}.mdi-robot-angry-outline:before{content:"󱚞"}.mdi-robot-confused:before{content:"󱚟"}.mdi-robot-confused-outline:before{content:"󱚠"}.mdi-robot-dead:before{content:"󱚡"}.mdi-robot-dead-outline:before{content:"󱚢"}.mdi-robot-excited:before{content:"󱚣"}.mdi-robot-excited-outline:before{content:"󱚤"}.mdi-robot-happy:before{content:"󱜙"}.mdi-robot-happy-outline:before{content:"󱜚"}.mdi-robot-industrial:before{content:"󰭆"}.mdi-robot-industrial-outline:before{content:"󱨚"}.mdi-robot-love:before{content:"󱚥"}.mdi-robot-love-outline:before{content:"󱚦"}.mdi-robot-mower:before{content:"󱇷"}.mdi-robot-mower-outline:before{content:"󱇳"}.mdi-robot-off:before{content:"󱚧"}.mdi-robot-off-outline:before{content:"󱙻"}.mdi-robot-outline:before{content:"󱙺"}.mdi-robot-vacuum:before{content:"󰜍"}.mdi-robot-vacuum-alert:before{content:"󱭝"}.mdi-robot-vacuum-off:before{content:"󱰁"}.mdi-robot-vacuum-variant:before{content:"󰤈"}.mdi-robot-vacuum-variant-alert:before{content:"󱭞"}.mdi-robot-vacuum-variant-off:before{content:"󱰂"}.mdi-rocket:before{content:"󰑣"}.mdi-rocket-launch:before{content:"󱓞"}.mdi-rocket-launch-outline:before{content:"󱓟"}.mdi-rocket-outline:before{content:"󱎯"}.mdi-rodent:before{content:"󱌧"}.mdi-roller-shade:before{content:"󱩫"}.mdi-roller-shade-closed:before{content:"󱩬"}.mdi-roller-skate:before{content:"󰴫"}.mdi-roller-skate-off:before{content:"󰅅"}.mdi-rollerblade:before{content:"󰴬"}.mdi-rollerblade-off:before{content:"󰀮"}.mdi-rollupjs:before{content:"󰯀"}.mdi-rolodex:before{content:"󱪹"}.mdi-rolodex-outline:before{content:"󱪺"}.mdi-roman-numeral-1:before{content:"󱂈"}.mdi-roman-numeral-10:before{content:"󱂑"}.mdi-roman-numeral-2:before{content:"󱂉"}.mdi-roman-numeral-3:before{content:"󱂊"}.mdi-roman-numeral-4:before{content:"󱂋"}.mdi-roman-numeral-5:before{content:"󱂌"}.mdi-roman-numeral-6:before{content:"󱂍"}.mdi-roman-numeral-7:before{content:"󱂎"}.mdi-roman-numeral-8:before{content:"󱂏"}.mdi-roman-numeral-9:before{content:"󱂐"}.mdi-room-service:before{content:"󰢍"}.mdi-room-service-outline:before{content:"󰶗"}.mdi-rotate-360:before{content:"󱦙"}.mdi-rotate-3d:before{content:"󰻇"}.mdi-rotate-3d-variant:before{content:"󰑤"}.mdi-rotate-left:before{content:"󰑥"}.mdi-rotate-left-variant:before{content:"󰑦"}.mdi-rotate-orbit:before{content:"󰶘"}.mdi-rotate-right:before{content:"󰑧"}.mdi-rotate-right-variant:before{content:"󰑨"}.mdi-rounded-corner:before{content:"󰘇"}.mdi-router:before{content:"󱇢"}.mdi-router-network:before{content:"󱂇"}.mdi-router-network-wireless:before{content:"󱲗"}.mdi-router-wireless:before{content:"󰑩"}.mdi-router-wireless-off:before{content:"󱖣"}.mdi-router-wireless-settings:before{content:"󰩩"}.mdi-routes:before{content:"󰑪"}.mdi-routes-clock:before{content:"󱁙"}.mdi-rowing:before{content:"󰘈"}.mdi-rss:before{content:"󰑫"}.mdi-rss-box:before{content:"󰑬"}.mdi-rss-off:before{content:"󰼡"}.mdi-rug:before{content:"󱑵"}.mdi-rugby:before{content:"󰶙"}.mdi-ruler:before{content:"󰑭"}.mdi-ruler-square:before{content:"󰳂"}.mdi-ruler-square-compass:before{content:"󰺾"}.mdi-run:before{content:"󰜎"}.mdi-run-fast:before{content:"󰑮"}.mdi-rv-truck:before{content:"󱇔"}.mdi-sack:before{content:"󰴮"}.mdi-sack-outline:before{content:"󱱌"}.mdi-sack-percent:before{content:"󰴯"}.mdi-safe:before{content:"󰩪"}.mdi-safe-square:before{content:"󱉼"}.mdi-safe-square-outline:before{content:"󱉽"}.mdi-safety-goggles:before{content:"󰴰"}.mdi-sail-boat:before{content:"󰻈"}.mdi-sail-boat-sink:before{content:"󱫯"}.mdi-sale:before{content:"󰑯"}.mdi-sale-outline:before{content:"󱨆"}.mdi-salesforce:before{content:"󰢎"}.mdi-sass:before{content:"󰟬"}.mdi-satellite:before{content:"󰑰"}.mdi-satellite-uplink:before{content:"󰤉"}.mdi-satellite-variant:before{content:"󰑱"}.mdi-sausage:before{content:"󰢺"}.mdi-sausage-off:before{content:"󱞉"}.mdi-saw-blade:before{content:"󰹡"}.mdi-sawtooth-wave:before{content:"󱑺"}.mdi-saxophone:before{content:"󰘉"}.mdi-scale:before{content:"󰑲"}.mdi-scale-balance:before{content:"󰗑"}.mdi-scale-bathroom:before{content:"󰑳"}.mdi-scale-off:before{content:"󱁚"}.mdi-scale-unbalanced:before{content:"󱦸"}.mdi-scan-helper:before{content:"󱏘"}.mdi-scanner:before{content:"󰚫"}.mdi-scanner-off:before{content:"󰤊"}.mdi-scatter-plot:before{content:"󰻉"}.mdi-scatter-plot-outline:before{content:"󰻊"}.mdi-scent:before{content:"󱥘"}.mdi-scent-off:before{content:"󱥙"}.mdi-school:before{content:"󰑴"}.mdi-school-outline:before{content:"󱆀"}.mdi-scissors-cutting:before{content:"󰩫"}.mdi-scooter:before{content:"󱖽"}.mdi-scooter-electric:before{content:"󱖾"}.mdi-scoreboard:before{content:"󱉾"}.mdi-scoreboard-outline:before{content:"󱉿"}.mdi-screen-rotation:before{content:"󰑵"}.mdi-screen-rotation-lock:before{content:"󰑸"}.mdi-screw-flat-top:before{content:"󰷳"}.mdi-screw-lag:before{content:"󰷴"}.mdi-screw-machine-flat-top:before{content:"󰷵"}.mdi-screw-machine-round-top:before{content:"󰷶"}.mdi-screw-round-top:before{content:"󰷷"}.mdi-screwdriver:before{content:"󰑶"}.mdi-script:before{content:"󰯁"}.mdi-script-outline:before{content:"󰑷"}.mdi-script-text:before{content:"󰯂"}.mdi-script-text-key:before{content:"󱜥"}.mdi-script-text-key-outline:before{content:"󱜦"}.mdi-script-text-outline:before{content:"󰯃"}.mdi-script-text-play:before{content:"󱜧"}.mdi-script-text-play-outline:before{content:"󱜨"}.mdi-sd:before{content:"󰑹"}.mdi-seal:before{content:"󰑺"}.mdi-seal-variant:before{content:"󰿙"}.mdi-search-web:before{content:"󰜏"}.mdi-seat:before{content:"󰳃"}.mdi-seat-flat:before{content:"󰑻"}.mdi-seat-flat-angled:before{content:"󰑼"}.mdi-seat-individual-suite:before{content:"󰑽"}.mdi-seat-legroom-extra:before{content:"󰑾"}.mdi-seat-legroom-normal:before{content:"󰑿"}.mdi-seat-legroom-reduced:before{content:"󰒀"}.mdi-seat-outline:before{content:"󰳄"}.mdi-seat-passenger:before{content:"󱉉"}.mdi-seat-recline-extra:before{content:"󰒁"}.mdi-seat-recline-normal:before{content:"󰒂"}.mdi-seatbelt:before{content:"󰳅"}.mdi-security:before{content:"󰒃"}.mdi-security-network:before{content:"󰒄"}.mdi-seed:before{content:"󰹢"}.mdi-seed-off:before{content:"󱏽"}.mdi-seed-off-outline:before{content:"󱏾"}.mdi-seed-outline:before{content:"󰹣"}.mdi-seed-plus:before{content:"󱩭"}.mdi-seed-plus-outline:before{content:"󱩮"}.mdi-seesaw:before{content:"󱖤"}.mdi-segment:before{content:"󰻋"}.mdi-select:before{content:"󰒅"}.mdi-select-all:before{content:"󰒆"}.mdi-select-arrow-down:before{content:"󱭙"}.mdi-select-arrow-up:before{content:"󱭘"}.mdi-select-color:before{content:"󰴱"}.mdi-select-compare:before{content:"󰫙"}.mdi-select-drag:before{content:"󰩬"}.mdi-select-group:before{content:"󰾂"}.mdi-select-inverse:before{content:"󰒇"}.mdi-select-marker:before{content:"󱊀"}.mdi-select-multiple:before{content:"󱊁"}.mdi-select-multiple-marker:before{content:"󱊂"}.mdi-select-off:before{content:"󰒈"}.mdi-select-place:before{content:"󰿚"}.mdi-select-remove:before{content:"󱟁"}.mdi-select-search:before{content:"󱈄"}.mdi-selection:before{content:"󰒉"}.mdi-selection-drag:before{content:"󰩭"}.mdi-selection-ellipse:before{content:"󰴲"}.mdi-selection-ellipse-arrow-inside:before{content:"󰼢"}.mdi-selection-ellipse-remove:before{content:"󱟂"}.mdi-selection-marker:before{content:"󱊃"}.mdi-selection-multiple:before{content:"󱊅"}.mdi-selection-multiple-marker:before{content:"󱊄"}.mdi-selection-off:before{content:"󰝷"}.mdi-selection-remove:before{content:"󱟃"}.mdi-selection-search:before{content:"󱈅"}.mdi-semantic-web:before{content:"󱌖"}.mdi-send:before{content:"󰒊"}.mdi-send-check:before{content:"󱅡"}.mdi-send-check-outline:before{content:"󱅢"}.mdi-send-circle:before{content:"󰷸"}.mdi-send-circle-outline:before{content:"󰷹"}.mdi-send-clock:before{content:"󱅣"}.mdi-send-clock-outline:before{content:"󱅤"}.mdi-send-lock:before{content:"󰟭"}.mdi-send-lock-outline:before{content:"󱅦"}.mdi-send-outline:before{content:"󱅥"}.mdi-send-variant:before{content:"󱱍"}.mdi-send-variant-clock:before{content:"󱱾"}.mdi-send-variant-clock-outline:before{content:"󱱿"}.mdi-send-variant-outline:before{content:"󱱎"}.mdi-serial-port:before{content:"󰙜"}.mdi-server:before{content:"󰒋"}.mdi-server-minus:before{content:"󰒌"}.mdi-server-minus-outline:before{content:"󱲘"}.mdi-server-network:before{content:"󰒍"}.mdi-server-network-off:before{content:"󰒎"}.mdi-server-network-outline:before{content:"󱲙"}.mdi-server-off:before{content:"󰒏"}.mdi-server-outline:before{content:"󱲚"}.mdi-server-plus:before{content:"󰒐"}.mdi-server-plus-outline:before{content:"󱲛"}.mdi-server-remove:before{content:"󰒑"}.mdi-server-security:before{content:"󰒒"}.mdi-set-all:before{content:"󰝸"}.mdi-set-center:before{content:"󰝹"}.mdi-set-center-right:before{content:"󰝺"}.mdi-set-left:before{content:"󰝻"}.mdi-set-left-center:before{content:"󰝼"}.mdi-set-left-right:before{content:"󰝽"}.mdi-set-merge:before{content:"󱓠"}.mdi-set-none:before{content:"󰝾"}.mdi-set-right:before{content:"󰝿"}.mdi-set-split:before{content:"󱓡"}.mdi-set-square:before{content:"󱑝"}.mdi-set-top-box:before{content:"󰦟"}.mdi-settings-helper:before{content:"󰩮"}.mdi-shaker:before{content:"󱄎"}.mdi-shaker-outline:before{content:"󱄏"}.mdi-shape:before{content:"󰠱"}.mdi-shape-circle-plus:before{content:"󰙝"}.mdi-shape-outline:before{content:"󰠲"}.mdi-shape-oval-plus:before{content:"󱇺"}.mdi-shape-plus:before{content:"󰒕"}.mdi-shape-plus-outline:before{content:"󱱏"}.mdi-shape-polygon-plus:before{content:"󰙞"}.mdi-shape-rectangle-plus:before{content:"󰙟"}.mdi-shape-square-plus:before{content:"󰙠"}.mdi-shape-square-rounded-plus:before{content:"󱓺"}.mdi-share:before{content:"󰒖"}.mdi-share-all:before{content:"󱇴"}.mdi-share-all-outline:before{content:"󱇵"}.mdi-share-circle:before{content:"󱆭"}.mdi-share-off:before{content:"󰼣"}.mdi-share-off-outline:before{content:"󰼤"}.mdi-share-outline:before{content:"󰤲"}.mdi-share-variant:before{content:"󰒗"}.mdi-share-variant-outline:before{content:"󱔔"}.mdi-shark:before{content:"󱢺"}.mdi-shark-fin:before{content:"󱙳"}.mdi-shark-fin-outline:before{content:"󱙴"}.mdi-shark-off:before{content:"󱢻"}.mdi-sheep:before{content:"󰳆"}.mdi-shield:before{content:"󰒘"}.mdi-shield-account:before{content:"󰢏"}.mdi-shield-account-outline:before{content:"󰨒"}.mdi-shield-account-variant:before{content:"󱖧"}.mdi-shield-account-variant-outline:before{content:"󱖨"}.mdi-shield-airplane:before{content:"󰚻"}.mdi-shield-airplane-outline:before{content:"󰳇"}.mdi-shield-alert:before{content:"󰻌"}.mdi-shield-alert-outline:before{content:"󰻍"}.mdi-shield-bug:before{content:"󱏚"}.mdi-shield-bug-outline:before{content:"󱏛"}.mdi-shield-car:before{content:"󰾃"}.mdi-shield-check:before{content:"󰕥"}.mdi-shield-check-outline:before{content:"󰳈"}.mdi-shield-cross:before{content:"󰳉"}.mdi-shield-cross-outline:before{content:"󰳊"}.mdi-shield-crown:before{content:"󱢼"}.mdi-shield-crown-outline:before{content:"󱢽"}.mdi-shield-edit:before{content:"󱆠"}.mdi-shield-edit-outline:before{content:"󱆡"}.mdi-shield-half:before{content:"󱍠"}.mdi-shield-half-full:before{content:"󰞀"}.mdi-shield-home:before{content:"󰚊"}.mdi-shield-home-outline:before{content:"󰳋"}.mdi-shield-key:before{content:"󰯄"}.mdi-shield-key-outline:before{content:"󰯅"}.mdi-shield-link-variant:before{content:"󰴳"}.mdi-shield-link-variant-outline:before{content:"󰴴"}.mdi-shield-lock:before{content:"󰦝"}.mdi-shield-lock-open:before{content:"󱦚"}.mdi-shield-lock-open-outline:before{content:"󱦛"}.mdi-shield-lock-outline:before{content:"󰳌"}.mdi-shield-moon:before{content:"󱠨"}.mdi-shield-moon-outline:before{content:"󱠩"}.mdi-shield-off:before{content:"󰦞"}.mdi-shield-off-outline:before{content:"󰦜"}.mdi-shield-outline:before{content:"󰒙"}.mdi-shield-plus:before{content:"󰫚"}.mdi-shield-plus-outline:before{content:"󰫛"}.mdi-shield-refresh:before{content:"󰂪"}.mdi-shield-refresh-outline:before{content:"󰇠"}.mdi-shield-remove:before{content:"󰫜"}.mdi-shield-remove-outline:before{content:"󰫝"}.mdi-shield-search:before{content:"󰶚"}.mdi-shield-star:before{content:"󱄻"}.mdi-shield-star-outline:before{content:"󱄼"}.mdi-shield-sun:before{content:"󱁝"}.mdi-shield-sun-outline:before{content:"󱁞"}.mdi-shield-sword:before{content:"󱢾"}.mdi-shield-sword-outline:before{content:"󱢿"}.mdi-shield-sync:before{content:"󱆢"}.mdi-shield-sync-outline:before{content:"󱆣"}.mdi-shimmer:before{content:"󱕅"}.mdi-ship-wheel:before{content:"󰠳"}.mdi-shipping-pallet:before{content:"󱡎"}.mdi-shoe-ballet:before{content:"󱗊"}.mdi-shoe-cleat:before{content:"󱗇"}.mdi-shoe-formal:before{content:"󰭇"}.mdi-shoe-heel:before{content:"󰭈"}.mdi-shoe-print:before{content:"󰷺"}.mdi-shoe-sneaker:before{content:"󱗈"}.mdi-shopping:before{content:"󰒚"}.mdi-shopping-music:before{content:"󰒛"}.mdi-shopping-outline:before{content:"󱇕"}.mdi-shopping-search:before{content:"󰾄"}.mdi-shopping-search-outline:before{content:"󱩯"}.mdi-shore:before{content:"󱓹"}.mdi-shovel:before{content:"󰜐"}.mdi-shovel-off:before{content:"󰜑"}.mdi-shower:before{content:"󰦠"}.mdi-shower-head:before{content:"󰦡"}.mdi-shredder:before{content:"󰒜"}.mdi-shuffle:before{content:"󰒝"}.mdi-shuffle-disabled:before{content:"󰒞"}.mdi-shuffle-variant:before{content:"󰒟"}.mdi-shuriken:before{content:"󱍿"}.mdi-sickle:before{content:"󱣀"}.mdi-sigma:before{content:"󰒠"}.mdi-sigma-lower:before{content:"󰘫"}.mdi-sign-caution:before{content:"󰒡"}.mdi-sign-direction:before{content:"󰞁"}.mdi-sign-direction-minus:before{content:"󱀀"}.mdi-sign-direction-plus:before{content:"󰿜"}.mdi-sign-direction-remove:before{content:"󰿝"}.mdi-sign-language:before{content:"󱭍"}.mdi-sign-language-outline:before{content:"󱭎"}.mdi-sign-pole:before{content:"󱓸"}.mdi-sign-real-estate:before{content:"󱄘"}.mdi-sign-text:before{content:"󰞂"}.mdi-sign-yield:before{content:"󱮯"}.mdi-signal:before{content:"󰒢"}.mdi-signal-2g:before{content:"󰜒"}.mdi-signal-3g:before{content:"󰜓"}.mdi-signal-4g:before{content:"󰜔"}.mdi-signal-5g:before{content:"󰩯"}.mdi-signal-cellular-1:before{content:"󰢼"}.mdi-signal-cellular-2:before{content:"󰢽"}.mdi-signal-cellular-3:before{content:"󰢾"}.mdi-signal-cellular-outline:before{content:"󰢿"}.mdi-signal-distance-variant:before{content:"󰹤"}.mdi-signal-hspa:before{content:"󰜕"}.mdi-signal-hspa-plus:before{content:"󰜖"}.mdi-signal-off:before{content:"󰞃"}.mdi-signal-variant:before{content:"󰘊"}.mdi-signature:before{content:"󰷻"}.mdi-signature-freehand:before{content:"󰷼"}.mdi-signature-image:before{content:"󰷽"}.mdi-signature-text:before{content:"󰷾"}.mdi-silo:before{content:"󱮟"}.mdi-silo-outline:before{content:"󰭉"}.mdi-silverware:before{content:"󰒣"}.mdi-silverware-clean:before{content:"󰿞"}.mdi-silverware-fork:before{content:"󰒤"}.mdi-silverware-fork-knife:before{content:"󰩰"}.mdi-silverware-spoon:before{content:"󰒥"}.mdi-silverware-variant:before{content:"󰒦"}.mdi-sim:before{content:"󰒧"}.mdi-sim-alert:before{content:"󰒨"}.mdi-sim-alert-outline:before{content:"󱗓"}.mdi-sim-off:before{content:"󰒩"}.mdi-sim-off-outline:before{content:"󱗔"}.mdi-sim-outline:before{content:"󱗕"}.mdi-simple-icons:before{content:"󱌝"}.mdi-sina-weibo:before{content:"󰫟"}.mdi-sine-wave:before{content:"󰥛"}.mdi-sitemap:before{content:"󰒪"}.mdi-sitemap-outline:before{content:"󱦜"}.mdi-size-l:before{content:"󱎦"}.mdi-size-m:before{content:"󱎥"}.mdi-size-s:before{content:"󱎤"}.mdi-size-xl:before{content:"󱎧"}.mdi-size-xs:before{content:"󱎣"}.mdi-size-xxl:before{content:"󱎨"}.mdi-size-xxs:before{content:"󱎢"}.mdi-size-xxxl:before{content:"󱎩"}.mdi-skate:before{content:"󰴵"}.mdi-skate-off:before{content:"󰚙"}.mdi-skateboard:before{content:"󱓂"}.mdi-skateboarding:before{content:"󰔁"}.mdi-skew-less:before{content:"󰴶"}.mdi-skew-more:before{content:"󰴷"}.mdi-ski:before{content:"󱌄"}.mdi-ski-cross-country:before{content:"󱌅"}.mdi-ski-water:before{content:"󱌆"}.mdi-skip-backward:before{content:"󰒫"}.mdi-skip-backward-outline:before{content:"󰼥"}.mdi-skip-forward:before{content:"󰒬"}.mdi-skip-forward-outline:before{content:"󰼦"}.mdi-skip-next:before{content:"󰒭"}.mdi-skip-next-circle:before{content:"󰙡"}.mdi-skip-next-circle-outline:before{content:"󰙢"}.mdi-skip-next-outline:before{content:"󰼧"}.mdi-skip-previous:before{content:"󰒮"}.mdi-skip-previous-circle:before{content:"󰙣"}.mdi-skip-previous-circle-outline:before{content:"󰙤"}.mdi-skip-previous-outline:before{content:"󰼨"}.mdi-skull:before{content:"󰚌"}.mdi-skull-crossbones:before{content:"󰯆"}.mdi-skull-crossbones-outline:before{content:"󰯇"}.mdi-skull-outline:before{content:"󰯈"}.mdi-skull-scan:before{content:"󱓇"}.mdi-skull-scan-outline:before{content:"󱓈"}.mdi-skype:before{content:"󰒯"}.mdi-skype-business:before{content:"󰒰"}.mdi-slack:before{content:"󰒱"}.mdi-slash-forward:before{content:"󰿟"}.mdi-slash-forward-box:before{content:"󰿠"}.mdi-sledding:before{content:"󰐛"}.mdi-sleep:before{content:"󰒲"}.mdi-sleep-off:before{content:"󰒳"}.mdi-slide:before{content:"󱖥"}.mdi-slope-downhill:before{content:"󰷿"}.mdi-slope-uphill:before{content:"󰸀"}.mdi-slot-machine:before{content:"󱄔"}.mdi-slot-machine-outline:before{content:"󱄕"}.mdi-smart-card:before{content:"󱂽"}.mdi-smart-card-off:before{content:"󱣷"}.mdi-smart-card-off-outline:before{content:"󱣸"}.mdi-smart-card-outline:before{content:"󱂾"}.mdi-smart-card-reader:before{content:"󱂿"}.mdi-smart-card-reader-outline:before{content:"󱃀"}.mdi-smog:before{content:"󰩱"}.mdi-smoke:before{content:"󱞙"}.mdi-smoke-detector:before{content:"󰎒"}.mdi-smoke-detector-alert:before{content:"󱤮"}.mdi-smoke-detector-alert-outline:before{content:"󱤯"}.mdi-smoke-detector-off:before{content:"󱠉"}.mdi-smoke-detector-off-outline:before{content:"󱠊"}.mdi-smoke-detector-outline:before{content:"󱠈"}.mdi-smoke-detector-variant:before{content:"󱠋"}.mdi-smoke-detector-variant-alert:before{content:"󱤰"}.mdi-smoke-detector-variant-off:before{content:"󱠌"}.mdi-smoking:before{content:"󰒴"}.mdi-smoking-off:before{content:"󰒵"}.mdi-smoking-pipe:before{content:"󱐍"}.mdi-smoking-pipe-off:before{content:"󱐨"}.mdi-snail:before{content:"󱙷"}.mdi-snake:before{content:"󱔎"}.mdi-snapchat:before{content:"󰒶"}.mdi-snowboard:before{content:"󱌇"}.mdi-snowflake:before{content:"󰜗"}.mdi-snowflake-alert:before{content:"󰼩"}.mdi-snowflake-check:before{content:"󱩰"}.mdi-snowflake-melt:before{content:"󱋋"}.mdi-snowflake-off:before{content:"󱓣"}.mdi-snowflake-thermometer:before{content:"󱩱"}.mdi-snowflake-variant:before{content:"󰼪"}.mdi-snowman:before{content:"󰒷"}.mdi-snowmobile:before{content:"󰛝"}.mdi-snowshoeing:before{content:"󱩲"}.mdi-soccer:before{content:"󰒸"}.mdi-soccer-field:before{content:"󰠴"}.mdi-social-distance-2-meters:before{content:"󱕹"}.mdi-social-distance-6-feet:before{content:"󱕺"}.mdi-sofa:before{content:"󰒹"}.mdi-sofa-outline:before{content:"󱕭"}.mdi-sofa-single:before{content:"󱕮"}.mdi-sofa-single-outline:before{content:"󱕯"}.mdi-solar-panel:before{content:"󰶛"}.mdi-solar-panel-large:before{content:"󰶜"}.mdi-solar-power:before{content:"󰩲"}.mdi-solar-power-variant:before{content:"󱩳"}.mdi-solar-power-variant-outline:before{content:"󱩴"}.mdi-soldering-iron:before{content:"󱂒"}.mdi-solid:before{content:"󰚍"}.mdi-sony-playstation:before{content:"󰐔"}.mdi-sort:before{content:"󰒺"}.mdi-sort-alphabetical-ascending:before{content:"󰖽"}.mdi-sort-alphabetical-ascending-variant:before{content:"󱅈"}.mdi-sort-alphabetical-descending:before{content:"󰖿"}.mdi-sort-alphabetical-descending-variant:before{content:"󱅉"}.mdi-sort-alphabetical-variant:before{content:"󰒻"}.mdi-sort-ascending:before{content:"󰒼"}.mdi-sort-bool-ascending:before{content:"󱎅"}.mdi-sort-bool-ascending-variant:before{content:"󱎆"}.mdi-sort-bool-descending:before{content:"󱎇"}.mdi-sort-bool-descending-variant:before{content:"󱎈"}.mdi-sort-calendar-ascending:before{content:"󱕇"}.mdi-sort-calendar-descending:before{content:"󱕈"}.mdi-sort-clock-ascending:before{content:"󱕉"}.mdi-sort-clock-ascending-outline:before{content:"󱕊"}.mdi-sort-clock-descending:before{content:"󱕋"}.mdi-sort-clock-descending-outline:before{content:"󱕌"}.mdi-sort-descending:before{content:"󰒽"}.mdi-sort-numeric-ascending:before{content:"󱎉"}.mdi-sort-numeric-ascending-variant:before{content:"󰤍"}.mdi-sort-numeric-descending:before{content:"󱎊"}.mdi-sort-numeric-descending-variant:before{content:"󰫒"}.mdi-sort-numeric-variant:before{content:"󰒾"}.mdi-sort-reverse-variant:before{content:"󰌼"}.mdi-sort-variant:before{content:"󰒿"}.mdi-sort-variant-lock:before{content:"󰳍"}.mdi-sort-variant-lock-open:before{content:"󰳎"}.mdi-sort-variant-off:before{content:"󱪻"}.mdi-sort-variant-remove:before{content:"󱅇"}.mdi-soundbar:before{content:"󱟛"}.mdi-soundcloud:before{content:"󰓀"}.mdi-source-branch:before{content:"󰘬"}.mdi-source-branch-check:before{content:"󱓏"}.mdi-source-branch-minus:before{content:"󱓋"}.mdi-source-branch-plus:before{content:"󱓊"}.mdi-source-branch-refresh:before{content:"󱓍"}.mdi-source-branch-remove:before{content:"󱓌"}.mdi-source-branch-sync:before{content:"󱓎"}.mdi-source-commit:before{content:"󰜘"}.mdi-source-commit-end:before{content:"󰜙"}.mdi-source-commit-end-local:before{content:"󰜚"}.mdi-source-commit-local:before{content:"󰜛"}.mdi-source-commit-next-local:before{content:"󰜜"}.mdi-source-commit-start:before{content:"󰜝"}.mdi-source-commit-start-next-local:before{content:"󰜞"}.mdi-source-fork:before{content:"󰓁"}.mdi-source-merge:before{content:"󰘭"}.mdi-source-pull:before{content:"󰓂"}.mdi-source-repository:before{content:"󰳏"}.mdi-source-repository-multiple:before{content:"󰳐"}.mdi-soy-sauce:before{content:"󰟮"}.mdi-soy-sauce-off:before{content:"󱏼"}.mdi-spa:before{content:"󰳑"}.mdi-spa-outline:before{content:"󰳒"}.mdi-space-invaders:before{content:"󰯉"}.mdi-space-station:before{content:"󱎃"}.mdi-spade:before{content:"󰹥"}.mdi-speaker:before{content:"󰓃"}.mdi-speaker-bluetooth:before{content:"󰦢"}.mdi-speaker-message:before{content:"󱬑"}.mdi-speaker-multiple:before{content:"󰴸"}.mdi-speaker-off:before{content:"󰓄"}.mdi-speaker-pause:before{content:"󱭳"}.mdi-speaker-play:before{content:"󱭲"}.mdi-speaker-stop:before{content:"󱭴"}.mdi-speaker-wireless:before{content:"󰜟"}.mdi-spear:before{content:"󱡅"}.mdi-speedometer:before{content:"󰓅"}.mdi-speedometer-medium:before{content:"󰾅"}.mdi-speedometer-slow:before{content:"󰾆"}.mdi-spellcheck:before{content:"󰓆"}.mdi-sphere:before{content:"󱥔"}.mdi-sphere-off:before{content:"󱥕"}.mdi-spider:before{content:"󱇪"}.mdi-spider-outline:before{content:"󱱵"}.mdi-spider-thread:before{content:"󱇫"}.mdi-spider-web:before{content:"󰯊"}.mdi-spirit-level:before{content:"󱓱"}.mdi-spoon-sugar:before{content:"󱐩"}.mdi-spotify:before{content:"󰓇"}.mdi-spotlight:before{content:"󰓈"}.mdi-spotlight-beam:before{content:"󰓉"}.mdi-spray:before{content:"󰙥"}.mdi-spray-bottle:before{content:"󰫠"}.mdi-sprinkler:before{content:"󱁟"}.mdi-sprinkler-fire:before{content:"󱦝"}.mdi-sprinkler-variant:before{content:"󱁠"}.mdi-sprout:before{content:"󰹦"}.mdi-sprout-outline:before{content:"󰹧"}.mdi-square:before{content:"󰝤"}.mdi-square-circle:before{content:"󱔀"}.mdi-square-circle-outline:before{content:"󱱐"}.mdi-square-edit-outline:before{content:"󰤌"}.mdi-square-medium:before{content:"󰨓"}.mdi-square-medium-outline:before{content:"󰨔"}.mdi-square-off:before{content:"󱋮"}.mdi-square-off-outline:before{content:"󱋯"}.mdi-square-opacity:before{content:"󱡔"}.mdi-square-outline:before{content:"󰝣"}.mdi-square-root:before{content:"󰞄"}.mdi-square-root-box:before{content:"󰦣"}.mdi-square-rounded:before{content:"󱓻"}.mdi-square-rounded-badge:before{content:"󱨇"}.mdi-square-rounded-badge-outline:before{content:"󱨈"}.mdi-square-rounded-outline:before{content:"󱓼"}.mdi-square-small:before{content:"󰨕"}.mdi-square-wave:before{content:"󱑻"}.mdi-squeegee:before{content:"󰫡"}.mdi-ssh:before{content:"󰣀"}.mdi-stack-exchange:before{content:"󰘋"}.mdi-stack-overflow:before{content:"󰓌"}.mdi-stackpath:before{content:"󰍙"}.mdi-stadium:before{content:"󰿹"}.mdi-stadium-outline:before{content:"󱬃"}.mdi-stadium-variant:before{content:"󰜠"}.mdi-stairs:before{content:"󰓍"}.mdi-stairs-box:before{content:"󱎞"}.mdi-stairs-down:before{content:"󱊾"}.mdi-stairs-up:before{content:"󱊽"}.mdi-stamper:before{content:"󰴹"}.mdi-standard-definition:before{content:"󰟯"}.mdi-star:before{content:"󰓎"}.mdi-star-box:before{content:"󰩳"}.mdi-star-box-multiple:before{content:"󱊆"}.mdi-star-box-multiple-outline:before{content:"󱊇"}.mdi-star-box-outline:before{content:"󰩴"}.mdi-star-check:before{content:"󱕦"}.mdi-star-check-outline:before{content:"󱕪"}.mdi-star-circle:before{content:"󰓏"}.mdi-star-circle-outline:before{content:"󰦤"}.mdi-star-cog:before{content:"󱙨"}.mdi-star-cog-outline:before{content:"󱙩"}.mdi-star-crescent:before{content:"󰥹"}.mdi-star-david:before{content:"󰥺"}.mdi-star-face:before{content:"󰦥"}.mdi-star-four-points:before{content:"󰫢"}.mdi-star-four-points-box:before{content:"󱱑"}.mdi-star-four-points-box-outline:before{content:"󱱒"}.mdi-star-four-points-circle:before{content:"󱱓"}.mdi-star-four-points-circle-outline:before{content:"󱱔"}.mdi-star-four-points-outline:before{content:"󰫣"}.mdi-star-four-points-small:before{content:"󱱕"}.mdi-star-half:before{content:"󰉆"}.mdi-star-half-full:before{content:"󰓐"}.mdi-star-minus:before{content:"󱕤"}.mdi-star-minus-outline:before{content:"󱕨"}.mdi-star-off:before{content:"󰓑"}.mdi-star-off-outline:before{content:"󱕛"}.mdi-star-outline:before{content:"󰓒"}.mdi-star-plus:before{content:"󱕣"}.mdi-star-plus-outline:before{content:"󱕧"}.mdi-star-remove:before{content:"󱕥"}.mdi-star-remove-outline:before{content:"󱕩"}.mdi-star-settings:before{content:"󱙪"}.mdi-star-settings-outline:before{content:"󱙫"}.mdi-star-shooting:before{content:"󱝁"}.mdi-star-shooting-outline:before{content:"󱝂"}.mdi-star-three-points:before{content:"󰫤"}.mdi-star-three-points-outline:before{content:"󰫥"}.mdi-state-machine:before{content:"󱇯"}.mdi-steam:before{content:"󰓓"}.mdi-steering:before{content:"󰓔"}.mdi-steering-off:before{content:"󰤎"}.mdi-step-backward:before{content:"󰓕"}.mdi-step-backward-2:before{content:"󰓖"}.mdi-step-forward:before{content:"󰓗"}.mdi-step-forward-2:before{content:"󰓘"}.mdi-stethoscope:before{content:"󰓙"}.mdi-sticker:before{content:"󱍤"}.mdi-sticker-alert:before{content:"󱍥"}.mdi-sticker-alert-outline:before{content:"󱍦"}.mdi-sticker-check:before{content:"󱍧"}.mdi-sticker-check-outline:before{content:"󱍨"}.mdi-sticker-circle-outline:before{content:"󰗐"}.mdi-sticker-emoji:before{content:"󰞅"}.mdi-sticker-minus:before{content:"󱍩"}.mdi-sticker-minus-outline:before{content:"󱍪"}.mdi-sticker-outline:before{content:"󱍫"}.mdi-sticker-plus:before{content:"󱍬"}.mdi-sticker-plus-outline:before{content:"󱍭"}.mdi-sticker-remove:before{content:"󱍮"}.mdi-sticker-remove-outline:before{content:"󱍯"}.mdi-sticker-text:before{content:"󱞎"}.mdi-sticker-text-outline:before{content:"󱞏"}.mdi-stocking:before{content:"󰓚"}.mdi-stomach:before{content:"󱂓"}.mdi-stool:before{content:"󱥝"}.mdi-stool-outline:before{content:"󱥞"}.mdi-stop:before{content:"󰓛"}.mdi-stop-circle:before{content:"󰙦"}.mdi-stop-circle-outline:before{content:"󰙧"}.mdi-storage-tank:before{content:"󱩵"}.mdi-storage-tank-outline:before{content:"󱩶"}.mdi-store:before{content:"󰓜"}.mdi-store-24-hour:before{content:"󰓝"}.mdi-store-alert:before{content:"󱣁"}.mdi-store-alert-outline:before{content:"󱣂"}.mdi-store-check:before{content:"󱣃"}.mdi-store-check-outline:before{content:"󱣄"}.mdi-store-clock:before{content:"󱣅"}.mdi-store-clock-outline:before{content:"󱣆"}.mdi-store-cog:before{content:"󱣇"}.mdi-store-cog-outline:before{content:"󱣈"}.mdi-store-edit:before{content:"󱣉"}.mdi-store-edit-outline:before{content:"󱣊"}.mdi-store-marker:before{content:"󱣋"}.mdi-store-marker-outline:before{content:"󱣌"}.mdi-store-minus:before{content:"󱙞"}.mdi-store-minus-outline:before{content:"󱣍"}.mdi-store-off:before{content:"󱣎"}.mdi-store-off-outline:before{content:"󱣏"}.mdi-store-outline:before{content:"󱍡"}.mdi-store-plus:before{content:"󱙟"}.mdi-store-plus-outline:before{content:"󱣐"}.mdi-store-remove:before{content:"󱙠"}.mdi-store-remove-outline:before{content:"󱣑"}.mdi-store-search:before{content:"󱣒"}.mdi-store-search-outline:before{content:"󱣓"}.mdi-store-settings:before{content:"󱣔"}.mdi-store-settings-outline:before{content:"󱣕"}.mdi-storefront:before{content:"󰟇"}.mdi-storefront-check:before{content:"󱭽"}.mdi-storefront-check-outline:before{content:"󱭾"}.mdi-storefront-edit:before{content:"󱭿"}.mdi-storefront-edit-outline:before{content:"󱮀"}.mdi-storefront-minus:before{content:"󱮃"}.mdi-storefront-minus-outline:before{content:"󱮄"}.mdi-storefront-outline:before{content:"󱃁"}.mdi-storefront-plus:before{content:"󱮁"}.mdi-storefront-plus-outline:before{content:"󱮂"}.mdi-storefront-remove:before{content:"󱮅"}.mdi-storefront-remove-outline:before{content:"󱮆"}.mdi-stove:before{content:"󰓞"}.mdi-strategy:before{content:"󱇖"}.mdi-stretch-to-page:before{content:"󰼫"}.mdi-stretch-to-page-outline:before{content:"󰼬"}.mdi-string-lights:before{content:"󱊺"}.mdi-string-lights-off:before{content:"󱊻"}.mdi-subdirectory-arrow-left:before{content:"󰘌"}.mdi-subdirectory-arrow-right:before{content:"󰘍"}.mdi-submarine:before{content:"󱕬"}.mdi-subtitles:before{content:"󰨖"}.mdi-subtitles-outline:before{content:"󰨗"}.mdi-subway:before{content:"󰚬"}.mdi-subway-alert-variant:before{content:"󰶝"}.mdi-subway-variant:before{content:"󰓟"}.mdi-summit:before{content:"󰞆"}.mdi-sun-angle:before{content:"󱬧"}.mdi-sun-angle-outline:before{content:"󱬨"}.mdi-sun-clock:before{content:"󱩷"}.mdi-sun-clock-outline:before{content:"󱩸"}.mdi-sun-compass:before{content:"󱦥"}.mdi-sun-snowflake:before{content:"󱞖"}.mdi-sun-snowflake-variant:before{content:"󱩹"}.mdi-sun-thermometer:before{content:"󱣖"}.mdi-sun-thermometer-outline:before{content:"󱣗"}.mdi-sun-wireless:before{content:"󱟾"}.mdi-sun-wireless-outline:before{content:"󱟿"}.mdi-sunglasses:before{content:"󰓠"}.mdi-surfing:before{content:"󱝆"}.mdi-surround-sound:before{content:"󰗅"}.mdi-surround-sound-2-0:before{content:"󰟰"}.mdi-surround-sound-2-1:before{content:"󱜩"}.mdi-surround-sound-3-1:before{content:"󰟱"}.mdi-surround-sound-5-1:before{content:"󰟲"}.mdi-surround-sound-5-1-2:before{content:"󱜪"}.mdi-surround-sound-7-1:before{content:"󰟳"}.mdi-svg:before{content:"󰜡"}.mdi-swap-horizontal:before{content:"󰓡"}.mdi-swap-horizontal-bold:before{content:"󰯍"}.mdi-swap-horizontal-circle:before{content:"󰿡"}.mdi-swap-horizontal-circle-outline:before{content:"󰿢"}.mdi-swap-horizontal-hidden:before{content:"󱴎"}.mdi-swap-horizontal-variant:before{content:"󰣁"}.mdi-swap-vertical:before{content:"󰓢"}.mdi-swap-vertical-bold:before{content:"󰯎"}.mdi-swap-vertical-circle:before{content:"󰿣"}.mdi-swap-vertical-circle-outline:before{content:"󰿤"}.mdi-swap-vertical-variant:before{content:"󰣂"}.mdi-swim:before{content:"󰓣"}.mdi-switch:before{content:"󰓤"}.mdi-sword:before{content:"󰓥"}.mdi-sword-cross:before{content:"󰞇"}.mdi-syllabary-hangul:before{content:"󱌳"}.mdi-syllabary-hiragana:before{content:"󱌴"}.mdi-syllabary-katakana:before{content:"󱌵"}.mdi-syllabary-katakana-halfwidth:before{content:"󱌶"}.mdi-symbol:before{content:"󱔁"}.mdi-symfony:before{content:"󰫦"}.mdi-synagogue:before{content:"󱬄"}.mdi-synagogue-outline:before{content:"󱬅"}.mdi-sync:before{content:"󰓦"}.mdi-sync-alert:before{content:"󰓧"}.mdi-sync-circle:before{content:"󱍸"}.mdi-sync-off:before{content:"󰓨"}.mdi-tab:before{content:"󰓩"}.mdi-tab-minus:before{content:"󰭋"}.mdi-tab-plus:before{content:"󰝜"}.mdi-tab-remove:before{content:"󰭌"}.mdi-tab-search:before{content:"󱦞"}.mdi-tab-unselected:before{content:"󰓪"}.mdi-table:before{content:"󰓫"}.mdi-table-account:before{content:"󱎹"}.mdi-table-alert:before{content:"󱎺"}.mdi-table-arrow-down:before{content:"󱎻"}.mdi-table-arrow-left:before{content:"󱎼"}.mdi-table-arrow-right:before{content:"󱎽"}.mdi-table-arrow-up:before{content:"󱎾"}.mdi-table-border:before{content:"󰨘"}.mdi-table-cancel:before{content:"󱎿"}.mdi-table-chair:before{content:"󱁡"}.mdi-table-check:before{content:"󱏀"}.mdi-table-clock:before{content:"󱏁"}.mdi-table-cog:before{content:"󱏂"}.mdi-table-column:before{content:"󰠵"}.mdi-table-column-plus-after:before{content:"󰓬"}.mdi-table-column-plus-before:before{content:"󰓭"}.mdi-table-column-remove:before{content:"󰓮"}.mdi-table-column-width:before{content:"󰓯"}.mdi-table-edit:before{content:"󰓰"}.mdi-table-eye:before{content:"󱂔"}.mdi-table-eye-off:before{content:"󱏃"}.mdi-table-filter:before{content:"󱮌"}.mdi-table-furniture:before{content:"󰖼"}.mdi-table-headers-eye:before{content:"󱈝"}.mdi-table-headers-eye-off:before{content:"󱈞"}.mdi-table-heart:before{content:"󱏄"}.mdi-table-key:before{content:"󱏅"}.mdi-table-large:before{content:"󰓱"}.mdi-table-large-plus:before{content:"󰾇"}.mdi-table-large-remove:before{content:"󰾈"}.mdi-table-lock:before{content:"󱏆"}.mdi-table-merge-cells:before{content:"󰦦"}.mdi-table-minus:before{content:"󱏇"}.mdi-table-multiple:before{content:"󱏈"}.mdi-table-network:before{content:"󱏉"}.mdi-table-of-contents:before{content:"󰠶"}.mdi-table-off:before{content:"󱏊"}.mdi-table-picnic:before{content:"󱝃"}.mdi-table-pivot:before{content:"󱠼"}.mdi-table-plus:before{content:"󰩵"}.mdi-table-question:before{content:"󱬡"}.mdi-table-refresh:before{content:"󱎠"}.mdi-table-remove:before{content:"󰩶"}.mdi-table-row:before{content:"󰠷"}.mdi-table-row-height:before{content:"󰓲"}.mdi-table-row-plus-after:before{content:"󰓳"}.mdi-table-row-plus-before:before{content:"󰓴"}.mdi-table-row-remove:before{content:"󰓵"}.mdi-table-search:before{content:"󰤏"}.mdi-table-settings:before{content:"󰠸"}.mdi-table-split-cell:before{content:"󱐪"}.mdi-table-star:before{content:"󱏋"}.mdi-table-sync:before{content:"󱎡"}.mdi-table-tennis:before{content:"󰹨"}.mdi-tablet:before{content:"󰓶"}.mdi-tablet-cellphone:before{content:"󰦧"}.mdi-tablet-dashboard:before{content:"󰻎"}.mdi-taco:before{content:"󰝢"}.mdi-tag:before{content:"󰓹"}.mdi-tag-arrow-down:before{content:"󱜫"}.mdi-tag-arrow-down-outline:before{content:"󱜬"}.mdi-tag-arrow-left:before{content:"󱜭"}.mdi-tag-arrow-left-outline:before{content:"󱜮"}.mdi-tag-arrow-right:before{content:"󱜯"}.mdi-tag-arrow-right-outline:before{content:"󱜰"}.mdi-tag-arrow-up:before{content:"󱜱"}.mdi-tag-arrow-up-outline:before{content:"󱜲"}.mdi-tag-check:before{content:"󱩺"}.mdi-tag-check-outline:before{content:"󱩻"}.mdi-tag-edit:before{content:"󱲜"}.mdi-tag-edit-outline:before{content:"󱲝"}.mdi-tag-faces:before{content:"󰓺"}.mdi-tag-heart:before{content:"󰚋"}.mdi-tag-heart-outline:before{content:"󰯏"}.mdi-tag-hidden:before{content:"󱱶"}.mdi-tag-minus:before{content:"󰤐"}.mdi-tag-minus-outline:before{content:"󱈟"}.mdi-tag-multiple:before{content:"󰓻"}.mdi-tag-multiple-outline:before{content:"󱋷"}.mdi-tag-off:before{content:"󱈠"}.mdi-tag-off-outline:before{content:"󱈡"}.mdi-tag-outline:before{content:"󰓼"}.mdi-tag-plus:before{content:"󰜢"}.mdi-tag-plus-outline:before{content:"󱈢"}.mdi-tag-remove:before{content:"󰜣"}.mdi-tag-remove-outline:before{content:"󱈣"}.mdi-tag-search:before{content:"󱤇"}.mdi-tag-search-outline:before{content:"󱤈"}.mdi-tag-text:before{content:"󱈤"}.mdi-tag-text-outline:before{content:"󰓽"}.mdi-tailwind:before{content:"󱏿"}.mdi-tally-mark-1:before{content:"󱪼"}.mdi-tally-mark-2:before{content:"󱪽"}.mdi-tally-mark-3:before{content:"󱪾"}.mdi-tally-mark-4:before{content:"󱪿"}.mdi-tally-mark-5:before{content:"󱫀"}.mdi-tangram:before{content:"󰓸"}.mdi-tank:before{content:"󰴺"}.mdi-tanker-truck:before{content:"󰿥"}.mdi-tape-drive:before{content:"󱛟"}.mdi-tape-measure:before{content:"󰭍"}.mdi-target:before{content:"󰓾"}.mdi-target-account:before{content:"󰯐"}.mdi-target-variant:before{content:"󰩷"}.mdi-taxi:before{content:"󰓿"}.mdi-tea:before{content:"󰶞"}.mdi-tea-outline:before{content:"󰶟"}.mdi-teamviewer:before{content:"󰔀"}.mdi-teddy-bear:before{content:"󱣻"}.mdi-telescope:before{content:"󰭎"}.mdi-television:before{content:"󰔂"}.mdi-television-ambient-light:before{content:"󱍖"}.mdi-television-box:before{content:"󰠹"}.mdi-television-classic:before{content:"󰟴"}.mdi-television-classic-off:before{content:"󰠺"}.mdi-television-guide:before{content:"󰔃"}.mdi-television-off:before{content:"󰠻"}.mdi-television-pause:before{content:"󰾉"}.mdi-television-play:before{content:"󰻏"}.mdi-television-shimmer:before{content:"󱄐"}.mdi-television-speaker:before{content:"󱬛"}.mdi-television-speaker-off:before{content:"󱬜"}.mdi-television-stop:before{content:"󰾊"}.mdi-temperature-celsius:before{content:"󰔄"}.mdi-temperature-fahrenheit:before{content:"󰔅"}.mdi-temperature-kelvin:before{content:"󰔆"}.mdi-temple-buddhist:before{content:"󱬆"}.mdi-temple-buddhist-outline:before{content:"󱬇"}.mdi-temple-hindu:before{content:"󱬈"}.mdi-temple-hindu-outline:before{content:"󱬉"}.mdi-tennis:before{content:"󰶠"}.mdi-tennis-ball:before{content:"󰔇"}.mdi-tennis-ball-outline:before{content:"󱱟"}.mdi-tent:before{content:"󰔈"}.mdi-terraform:before{content:"󱁢"}.mdi-terrain:before{content:"󰔉"}.mdi-test-tube:before{content:"󰙨"}.mdi-test-tube-empty:before{content:"󰤑"}.mdi-test-tube-off:before{content:"󰤒"}.mdi-text:before{content:"󰦨"}.mdi-text-account:before{content:"󱕰"}.mdi-text-box:before{content:"󰈚"}.mdi-text-box-check:before{content:"󰺦"}.mdi-text-box-check-outline:before{content:"󰺧"}.mdi-text-box-edit:before{content:"󱩼"}.mdi-text-box-edit-outline:before{content:"󱩽"}.mdi-text-box-minus:before{content:"󰺨"}.mdi-text-box-minus-outline:before{content:"󰺩"}.mdi-text-box-multiple:before{content:"󰪷"}.mdi-text-box-multiple-outline:before{content:"󰪸"}.mdi-text-box-outline:before{content:"󰧭"}.mdi-text-box-plus:before{content:"󰺪"}.mdi-text-box-plus-outline:before{content:"󰺫"}.mdi-text-box-remove:before{content:"󰺬"}.mdi-text-box-remove-outline:before{content:"󰺭"}.mdi-text-box-search:before{content:"󰺮"}.mdi-text-box-search-outline:before{content:"󰺯"}.mdi-text-long:before{content:"󰦪"}.mdi-text-recognition:before{content:"󱄽"}.mdi-text-search:before{content:"󱎸"}.mdi-text-search-variant:before{content:"󱩾"}.mdi-text-shadow:before{content:"󰙩"}.mdi-text-short:before{content:"󰦩"}.mdi-texture:before{content:"󰔌"}.mdi-texture-box:before{content:"󰿦"}.mdi-theater:before{content:"󰔍"}.mdi-theme-light-dark:before{content:"󰔎"}.mdi-thermometer:before{content:"󰔏"}.mdi-thermometer-alert:before{content:"󰸁"}.mdi-thermometer-auto:before{content:"󱬏"}.mdi-thermometer-bluetooth:before{content:"󱢕"}.mdi-thermometer-check:before{content:"󱩿"}.mdi-thermometer-chevron-down:before{content:"󰸂"}.mdi-thermometer-chevron-up:before{content:"󰸃"}.mdi-thermometer-high:before{content:"󱃂"}.mdi-thermometer-lines:before{content:"󰔐"}.mdi-thermometer-low:before{content:"󱃃"}.mdi-thermometer-minus:before{content:"󰸄"}.mdi-thermometer-off:before{content:"󱔱"}.mdi-thermometer-plus:before{content:"󰸅"}.mdi-thermometer-probe:before{content:"󱬫"}.mdi-thermometer-probe-off:before{content:"󱬬"}.mdi-thermometer-water:before{content:"󱪀"}.mdi-thermostat:before{content:"󰎓"}.mdi-thermostat-auto:before{content:"󱬗"}.mdi-thermostat-box:before{content:"󰢑"}.mdi-thermostat-box-auto:before{content:"󱬘"}.mdi-thermostat-cog:before{content:"󱲀"}.mdi-thought-bubble:before{content:"󰟶"}.mdi-thought-bubble-outline:before{content:"󰟷"}.mdi-thumb-down:before{content:"󰔑"}.mdi-thumb-down-outline:before{content:"󰔒"}.mdi-thumb-up:before{content:"󰔓"}.mdi-thumb-up-outline:before{content:"󰔔"}.mdi-thumbs-up-down:before{content:"󰔕"}.mdi-thumbs-up-down-outline:before{content:"󱤔"}.mdi-ticket:before{content:"󰔖"}.mdi-ticket-account:before{content:"󰔗"}.mdi-ticket-confirmation:before{content:"󰔘"}.mdi-ticket-confirmation-outline:before{content:"󱎪"}.mdi-ticket-outline:before{content:"󰤓"}.mdi-ticket-percent:before{content:"󰜤"}.mdi-ticket-percent-outline:before{content:"󱐫"}.mdi-tie:before{content:"󰔙"}.mdi-tilde:before{content:"󰜥"}.mdi-tilde-off:before{content:"󱣳"}.mdi-timelapse:before{content:"󰔚"}.mdi-timeline:before{content:"󰯑"}.mdi-timeline-alert:before{content:"󰾕"}.mdi-timeline-alert-outline:before{content:"󰾘"}.mdi-timeline-check:before{content:"󱔲"}.mdi-timeline-check-outline:before{content:"󱔳"}.mdi-timeline-clock:before{content:"󱇻"}.mdi-timeline-clock-outline:before{content:"󱇼"}.mdi-timeline-minus:before{content:"󱔴"}.mdi-timeline-minus-outline:before{content:"󱔵"}.mdi-timeline-outline:before{content:"󰯒"}.mdi-timeline-plus:before{content:"󰾖"}.mdi-timeline-plus-outline:before{content:"󰾗"}.mdi-timeline-question:before{content:"󰾙"}.mdi-timeline-question-outline:before{content:"󰾚"}.mdi-timeline-remove:before{content:"󱔶"}.mdi-timeline-remove-outline:before{content:"󱔷"}.mdi-timeline-text:before{content:"󰯓"}.mdi-timeline-text-outline:before{content:"󰯔"}.mdi-timer:before{content:"󱎫"}.mdi-timer-10:before{content:"󰔜"}.mdi-timer-3:before{content:"󰔝"}.mdi-timer-alert:before{content:"󱫌"}.mdi-timer-alert-outline:before{content:"󱫍"}.mdi-timer-cancel:before{content:"󱫎"}.mdi-timer-cancel-outline:before{content:"󱫏"}.mdi-timer-check:before{content:"󱫐"}.mdi-timer-check-outline:before{content:"󱫑"}.mdi-timer-cog:before{content:"󱤥"}.mdi-timer-cog-outline:before{content:"󱤦"}.mdi-timer-edit:before{content:"󱫒"}.mdi-timer-edit-outline:before{content:"󱫓"}.mdi-timer-lock:before{content:"󱫔"}.mdi-timer-lock-open:before{content:"󱫕"}.mdi-timer-lock-open-outline:before{content:"󱫖"}.mdi-timer-lock-outline:before{content:"󱫗"}.mdi-timer-marker:before{content:"󱫘"}.mdi-timer-marker-outline:before{content:"󱫙"}.mdi-timer-minus:before{content:"󱫚"}.mdi-timer-minus-outline:before{content:"󱫛"}.mdi-timer-music:before{content:"󱫜"}.mdi-timer-music-outline:before{content:"󱫝"}.mdi-timer-off:before{content:"󱎬"}.mdi-timer-off-outline:before{content:"󰔞"}.mdi-timer-outline:before{content:"󰔛"}.mdi-timer-pause:before{content:"󱫞"}.mdi-timer-pause-outline:before{content:"󱫟"}.mdi-timer-play:before{content:"󱫠"}.mdi-timer-play-outline:before{content:"󱫡"}.mdi-timer-plus:before{content:"󱫢"}.mdi-timer-plus-outline:before{content:"󱫣"}.mdi-timer-refresh:before{content:"󱫤"}.mdi-timer-refresh-outline:before{content:"󱫥"}.mdi-timer-remove:before{content:"󱫦"}.mdi-timer-remove-outline:before{content:"󱫧"}.mdi-timer-sand:before{content:"󰔟"}.mdi-timer-sand-complete:before{content:"󱦟"}.mdi-timer-sand-empty:before{content:"󰚭"}.mdi-timer-sand-full:before{content:"󰞌"}.mdi-timer-sand-paused:before{content:"󱦠"}.mdi-timer-settings:before{content:"󱤣"}.mdi-timer-settings-outline:before{content:"󱤤"}.mdi-timer-star:before{content:"󱫨"}.mdi-timer-star-outline:before{content:"󱫩"}.mdi-timer-stop:before{content:"󱫪"}.mdi-timer-stop-outline:before{content:"󱫫"}.mdi-timer-sync:before{content:"󱫬"}.mdi-timer-sync-outline:before{content:"󱫭"}.mdi-timetable:before{content:"󰔠"}.mdi-tire:before{content:"󱢖"}.mdi-toaster:before{content:"󱁣"}.mdi-toaster-off:before{content:"󱆷"}.mdi-toaster-oven:before{content:"󰳓"}.mdi-toggle-switch:before{content:"󰔡"}.mdi-toggle-switch-off:before{content:"󰔢"}.mdi-toggle-switch-off-outline:before{content:"󰨙"}.mdi-toggle-switch-outline:before{content:"󰨚"}.mdi-toggle-switch-variant:before{content:"󱨥"}.mdi-toggle-switch-variant-off:before{content:"󱨦"}.mdi-toilet:before{content:"󰦫"}.mdi-toolbox:before{content:"󰦬"}.mdi-toolbox-outline:before{content:"󰦭"}.mdi-tools:before{content:"󱁤"}.mdi-tooltip:before{content:"󰔣"}.mdi-tooltip-account:before{content:"󰀌"}.mdi-tooltip-cellphone:before{content:"󱠻"}.mdi-tooltip-check:before{content:"󱕜"}.mdi-tooltip-check-outline:before{content:"󱕝"}.mdi-tooltip-edit:before{content:"󰔤"}.mdi-tooltip-edit-outline:before{content:"󱋅"}.mdi-tooltip-image:before{content:"󰔥"}.mdi-tooltip-image-outline:before{content:"󰯕"}.mdi-tooltip-minus:before{content:"󱕞"}.mdi-tooltip-minus-outline:before{content:"󱕟"}.mdi-tooltip-outline:before{content:"󰔦"}.mdi-tooltip-plus:before{content:"󰯖"}.mdi-tooltip-plus-outline:before{content:"󰔧"}.mdi-tooltip-question:before{content:"󱮺"}.mdi-tooltip-question-outline:before{content:"󱮻"}.mdi-tooltip-remove:before{content:"󱕠"}.mdi-tooltip-remove-outline:before{content:"󱕡"}.mdi-tooltip-text:before{content:"󰔨"}.mdi-tooltip-text-outline:before{content:"󰯗"}.mdi-tooth:before{content:"󰣃"}.mdi-tooth-outline:before{content:"󰔩"}.mdi-toothbrush:before{content:"󱄩"}.mdi-toothbrush-electric:before{content:"󱄬"}.mdi-toothbrush-paste:before{content:"󱄪"}.mdi-torch:before{content:"󱘆"}.mdi-tortoise:before{content:"󰴻"}.mdi-toslink:before{content:"󱊸"}.mdi-touch-text-outline:before{content:"󱱠"}.mdi-tournament:before{content:"󰦮"}.mdi-tow-truck:before{content:"󰠼"}.mdi-tower-beach:before{content:"󰚁"}.mdi-tower-fire:before{content:"󰚂"}.mdi-town-hall:before{content:"󱡵"}.mdi-toy-brick:before{content:"󱊈"}.mdi-toy-brick-marker:before{content:"󱊉"}.mdi-toy-brick-marker-outline:before{content:"󱊊"}.mdi-toy-brick-minus:before{content:"󱊋"}.mdi-toy-brick-minus-outline:before{content:"󱊌"}.mdi-toy-brick-outline:before{content:"󱊍"}.mdi-toy-brick-plus:before{content:"󱊎"}.mdi-toy-brick-plus-outline:before{content:"󱊏"}.mdi-toy-brick-remove:before{content:"󱊐"}.mdi-toy-brick-remove-outline:before{content:"󱊑"}.mdi-toy-brick-search:before{content:"󱊒"}.mdi-toy-brick-search-outline:before{content:"󱊓"}.mdi-track-light:before{content:"󰤔"}.mdi-track-light-off:before{content:"󱬁"}.mdi-trackpad:before{content:"󰟸"}.mdi-trackpad-lock:before{content:"󰤳"}.mdi-tractor:before{content:"󰢒"}.mdi-tractor-variant:before{content:"󱓄"}.mdi-trademark:before{content:"󰩸"}.mdi-traffic-cone:before{content:"󱍼"}.mdi-traffic-light:before{content:"󰔫"}.mdi-traffic-light-outline:before{content:"󱠪"}.mdi-train:before{content:"󰔬"}.mdi-train-bus:before{content:"󱳇"}.mdi-train-car:before{content:"󰯘"}.mdi-train-car-autorack:before{content:"󱬭"}.mdi-train-car-box:before{content:"󱬮"}.mdi-train-car-box-full:before{content:"󱬯"}.mdi-train-car-box-open:before{content:"󱬰"}.mdi-train-car-caboose:before{content:"󱬱"}.mdi-train-car-centerbeam:before{content:"󱬲"}.mdi-train-car-centerbeam-full:before{content:"󱬳"}.mdi-train-car-container:before{content:"󱬴"}.mdi-train-car-flatbed:before{content:"󱬵"}.mdi-train-car-flatbed-car:before{content:"󱬶"}.mdi-train-car-flatbed-tank:before{content:"󱬷"}.mdi-train-car-gondola:before{content:"󱬸"}.mdi-train-car-gondola-full:before{content:"󱬹"}.mdi-train-car-hopper:before{content:"󱬺"}.mdi-train-car-hopper-covered:before{content:"󱬻"}.mdi-train-car-hopper-full:before{content:"󱬼"}.mdi-train-car-intermodal:before{content:"󱬽"}.mdi-train-car-passenger:before{content:"󱜳"}.mdi-train-car-passenger-door:before{content:"󱜴"}.mdi-train-car-passenger-door-open:before{content:"󱜵"}.mdi-train-car-passenger-variant:before{content:"󱜶"}.mdi-train-car-tank:before{content:"󱬾"}.mdi-train-variant:before{content:"󰣄"}.mdi-tram:before{content:"󰔭"}.mdi-tram-side:before{content:"󰿧"}.mdi-transcribe:before{content:"󰔮"}.mdi-transcribe-close:before{content:"󰔯"}.mdi-transfer:before{content:"󱁥"}.mdi-transfer-down:before{content:"󰶡"}.mdi-transfer-left:before{content:"󰶢"}.mdi-transfer-right:before{content:"󰔰"}.mdi-transfer-up:before{content:"󰶣"}.mdi-transit-connection:before{content:"󰴼"}.mdi-transit-connection-horizontal:before{content:"󱕆"}.mdi-transit-connection-variant:before{content:"󰴽"}.mdi-transit-detour:before{content:"󰾋"}.mdi-transit-skip:before{content:"󱔕"}.mdi-transit-transfer:before{content:"󰚮"}.mdi-transition:before{content:"󰤕"}.mdi-transition-masked:before{content:"󰤖"}.mdi-translate:before{content:"󰗊"}.mdi-translate-off:before{content:"󰸆"}.mdi-translate-variant:before{content:"󱮙"}.mdi-transmission-tower:before{content:"󰴾"}.mdi-transmission-tower-export:before{content:"󱤬"}.mdi-transmission-tower-import:before{content:"󱤭"}.mdi-transmission-tower-off:before{content:"󱧝"}.mdi-trash-can:before{content:"󰩹"}.mdi-trash-can-outline:before{content:"󰩺"}.mdi-tray:before{content:"󱊔"}.mdi-tray-alert:before{content:"󱊕"}.mdi-tray-arrow-down:before{content:"󰄠"}.mdi-tray-arrow-up:before{content:"󰄝"}.mdi-tray-full:before{content:"󱊖"}.mdi-tray-minus:before{content:"󱊗"}.mdi-tray-plus:before{content:"󱊘"}.mdi-tray-remove:before{content:"󱊙"}.mdi-treasure-chest:before{content:"󰜦"}.mdi-treasure-chest-outline:before{content:"󱱷"}.mdi-tree:before{content:"󰔱"}.mdi-tree-outline:before{content:"󰹩"}.mdi-trello:before{content:"󰔲"}.mdi-trending-down:before{content:"󰔳"}.mdi-trending-neutral:before{content:"󰔴"}.mdi-trending-up:before{content:"󰔵"}.mdi-triangle:before{content:"󰔶"}.mdi-triangle-down:before{content:"󱱖"}.mdi-triangle-down-outline:before{content:"󱱗"}.mdi-triangle-outline:before{content:"󰔷"}.mdi-triangle-small-down:before{content:"󱨉"}.mdi-triangle-small-up:before{content:"󱨊"}.mdi-triangle-wave:before{content:"󱑼"}.mdi-triforce:before{content:"󰯙"}.mdi-trophy:before{content:"󰔸"}.mdi-trophy-award:before{content:"󰔹"}.mdi-trophy-broken:before{content:"󰶤"}.mdi-trophy-outline:before{content:"󰔺"}.mdi-trophy-variant:before{content:"󰔻"}.mdi-trophy-variant-outline:before{content:"󰔼"}.mdi-truck:before{content:"󰔽"}.mdi-truck-alert:before{content:"󱧞"}.mdi-truck-alert-outline:before{content:"󱧟"}.mdi-truck-cargo-container:before{content:"󱣘"}.mdi-truck-check:before{content:"󰳔"}.mdi-truck-check-outline:before{content:"󱊚"}.mdi-truck-delivery:before{content:"󰔾"}.mdi-truck-delivery-outline:before{content:"󱊛"}.mdi-truck-fast:before{content:"󰞈"}.mdi-truck-fast-outline:before{content:"󱊜"}.mdi-truck-flatbed:before{content:"󱢑"}.mdi-truck-minus:before{content:"󱦮"}.mdi-truck-minus-outline:before{content:"󱦽"}.mdi-truck-off-road:before{content:"󱲞"}.mdi-truck-off-road-off:before{content:"󱲟"}.mdi-truck-outline:before{content:"󱊝"}.mdi-truck-plus:before{content:"󱦭"}.mdi-truck-plus-outline:before{content:"󱦼"}.mdi-truck-remove:before{content:"󱦯"}.mdi-truck-remove-outline:before{content:"󱦾"}.mdi-truck-snowflake:before{content:"󱦦"}.mdi-truck-trailer:before{content:"󰜧"}.mdi-trumpet:before{content:"󱂖"}.mdi-tshirt-crew:before{content:"󰩻"}.mdi-tshirt-crew-outline:before{content:"󰔿"}.mdi-tshirt-v:before{content:"󰩼"}.mdi-tshirt-v-outline:before{content:"󰕀"}.mdi-tsunami:before{content:"󱪁"}.mdi-tumble-dryer:before{content:"󰤗"}.mdi-tumble-dryer-alert:before{content:"󱆺"}.mdi-tumble-dryer-off:before{content:"󱆻"}.mdi-tune:before{content:"󰘮"}.mdi-tune-variant:before{content:"󱕂"}.mdi-tune-vertical:before{content:"󰙪"}.mdi-tune-vertical-variant:before{content:"󱕃"}.mdi-tunnel:before{content:"󱠽"}.mdi-tunnel-outline:before{content:"󱠾"}.mdi-turbine:before{content:"󱪂"}.mdi-turkey:before{content:"󱜛"}.mdi-turnstile:before{content:"󰳕"}.mdi-turnstile-outline:before{content:"󰳖"}.mdi-turtle:before{content:"󰳗"}.mdi-twitch:before{content:"󰕃"}.mdi-twitter:before{content:"󰕄"}.mdi-two-factor-authentication:before{content:"󰦯"}.mdi-typewriter:before{content:"󰼭"}.mdi-ubisoft:before{content:"󰯚"}.mdi-ubuntu:before{content:"󰕈"}.mdi-ufo:before{content:"󱃄"}.mdi-ufo-outline:before{content:"󱃅"}.mdi-ultra-high-definition:before{content:"󰟹"}.mdi-umbraco:before{content:"󰕉"}.mdi-umbrella:before{content:"󰕊"}.mdi-umbrella-beach:before{content:"󱢊"}.mdi-umbrella-beach-outline:before{content:"󱢋"}.mdi-umbrella-closed:before{content:"󰦰"}.mdi-umbrella-closed-outline:before{content:"󱏢"}.mdi-umbrella-closed-variant:before{content:"󱏡"}.mdi-umbrella-outline:before{content:"󰕋"}.mdi-underwear-outline:before{content:"󱴏"}.mdi-undo:before{content:"󰕌"}.mdi-undo-variant:before{content:"󰕍"}.mdi-unfold-less-horizontal:before{content:"󰕎"}.mdi-unfold-less-vertical:before{content:"󰝠"}.mdi-unfold-more-horizontal:before{content:"󰕏"}.mdi-unfold-more-vertical:before{content:"󰝡"}.mdi-ungroup:before{content:"󰕐"}.mdi-unicode:before{content:"󰻐"}.mdi-unicorn:before{content:"󱗂"}.mdi-unicorn-variant:before{content:"󱗃"}.mdi-unicycle:before{content:"󱗥"}.mdi-unity:before{content:"󰚯"}.mdi-unreal:before{content:"󰦱"}.mdi-update:before{content:"󰚰"}.mdi-upload:before{content:"󰕒"}.mdi-upload-box:before{content:"󱴐"}.mdi-upload-box-outline:before{content:"󱴑"}.mdi-upload-circle:before{content:"󱴒"}.mdi-upload-circle-outline:before{content:"󱴓"}.mdi-upload-lock:before{content:"󱍳"}.mdi-upload-lock-outline:before{content:"󱍴"}.mdi-upload-multiple:before{content:"󰠽"}.mdi-upload-multiple-outline:before{content:"󱴔"}.mdi-upload-network:before{content:"󰛶"}.mdi-upload-network-outline:before{content:"󰳘"}.mdi-upload-off:before{content:"󱃆"}.mdi-upload-off-outline:before{content:"󱃇"}.mdi-upload-outline:before{content:"󰸇"}.mdi-usb:before{content:"󰕓"}.mdi-usb-c-port:before{content:"󱲿"}.mdi-usb-flash-drive:before{content:"󱊞"}.mdi-usb-flash-drive-outline:before{content:"󱊟"}.mdi-usb-port:before{content:"󱇰"}.mdi-vacuum:before{content:"󱦡"}.mdi-vacuum-outline:before{content:"󱦢"}.mdi-valve:before{content:"󱁦"}.mdi-valve-closed:before{content:"󱁧"}.mdi-valve-open:before{content:"󱁨"}.mdi-van-passenger:before{content:"󰟺"}.mdi-van-utility:before{content:"󰟻"}.mdi-vanish:before{content:"󰟼"}.mdi-vanish-quarter:before{content:"󱕔"}.mdi-vanity-light:before{content:"󱇡"}.mdi-variable:before{content:"󰫧"}.mdi-variable-box:before{content:"󱄑"}.mdi-vector-arrange-above:before{content:"󰕔"}.mdi-vector-arrange-below:before{content:"󰕕"}.mdi-vector-bezier:before{content:"󰫨"}.mdi-vector-circle:before{content:"󰕖"}.mdi-vector-circle-variant:before{content:"󰕗"}.mdi-vector-combine:before{content:"󰕘"}.mdi-vector-curve:before{content:"󰕙"}.mdi-vector-difference:before{content:"󰕚"}.mdi-vector-difference-ab:before{content:"󰕛"}.mdi-vector-difference-ba:before{content:"󰕜"}.mdi-vector-ellipse:before{content:"󰢓"}.mdi-vector-intersection:before{content:"󰕝"}.mdi-vector-line:before{content:"󰕞"}.mdi-vector-link:before{content:"󰿨"}.mdi-vector-point:before{content:"󰇄"}.mdi-vector-point-edit:before{content:"󰧨"}.mdi-vector-point-minus:before{content:"󱭸"}.mdi-vector-point-plus:before{content:"󱭹"}.mdi-vector-point-select:before{content:"󰕟"}.mdi-vector-polygon:before{content:"󰕠"}.mdi-vector-polygon-variant:before{content:"󱡖"}.mdi-vector-polyline:before{content:"󰕡"}.mdi-vector-polyline-edit:before{content:"󱈥"}.mdi-vector-polyline-minus:before{content:"󱈦"}.mdi-vector-polyline-plus:before{content:"󱈧"}.mdi-vector-polyline-remove:before{content:"󱈨"}.mdi-vector-radius:before{content:"󰝊"}.mdi-vector-rectangle:before{content:"󰗆"}.mdi-vector-selection:before{content:"󰕢"}.mdi-vector-square:before{content:"󰀁"}.mdi-vector-square-close:before{content:"󱡗"}.mdi-vector-square-edit:before{content:"󱣙"}.mdi-vector-square-minus:before{content:"󱣚"}.mdi-vector-square-open:before{content:"󱡘"}.mdi-vector-square-plus:before{content:"󱣛"}.mdi-vector-square-remove:before{content:"󱣜"}.mdi-vector-triangle:before{content:"󰕣"}.mdi-vector-union:before{content:"󰕤"}.mdi-vhs:before{content:"󰨛"}.mdi-vibrate:before{content:"󰕦"}.mdi-vibrate-off:before{content:"󰳙"}.mdi-video:before{content:"󰕧"}.mdi-video-2d:before{content:"󱨜"}.mdi-video-3d:before{content:"󰟽"}.mdi-video-3d-off:before{content:"󱏙"}.mdi-video-3d-variant:before{content:"󰻑"}.mdi-video-4k-box:before{content:"󰠾"}.mdi-video-account:before{content:"󰤙"}.mdi-video-box:before{content:"󰃽"}.mdi-video-box-off:before{content:"󰃾"}.mdi-video-check:before{content:"󱁩"}.mdi-video-check-outline:before{content:"󱁪"}.mdi-video-high-definition:before{content:"󱔮"}.mdi-video-image:before{content:"󰤚"}.mdi-video-input-antenna:before{content:"󰠿"}.mdi-video-input-component:before{content:"󰡀"}.mdi-video-input-hdmi:before{content:"󰡁"}.mdi-video-input-scart:before{content:"󰾌"}.mdi-video-input-svideo:before{content:"󰡂"}.mdi-video-marker:before{content:"󱦩"}.mdi-video-marker-outline:before{content:"󱦪"}.mdi-video-minus:before{content:"󰦲"}.mdi-video-minus-outline:before{content:"󰊺"}.mdi-video-off:before{content:"󰕨"}.mdi-video-off-outline:before{content:"󰯛"}.mdi-video-outline:before{content:"󰯜"}.mdi-video-plus:before{content:"󰦳"}.mdi-video-plus-outline:before{content:"󰇓"}.mdi-video-stabilization:before{content:"󰤛"}.mdi-video-standard-definition:before{content:"󱲠"}.mdi-video-switch:before{content:"󰕩"}.mdi-video-switch-outline:before{content:"󰞐"}.mdi-video-vintage:before{content:"󰨜"}.mdi-video-wireless:before{content:"󰻒"}.mdi-video-wireless-outline:before{content:"󰻓"}.mdi-view-agenda:before{content:"󰕪"}.mdi-view-agenda-outline:before{content:"󱇘"}.mdi-view-array:before{content:"󰕫"}.mdi-view-array-outline:before{content:"󱒅"}.mdi-view-carousel:before{content:"󰕬"}.mdi-view-carousel-outline:before{content:"󱒆"}.mdi-view-column:before{content:"󰕭"}.mdi-view-column-outline:before{content:"󱒇"}.mdi-view-comfy:before{content:"󰹪"}.mdi-view-comfy-outline:before{content:"󱒈"}.mdi-view-compact:before{content:"󰹫"}.mdi-view-compact-outline:before{content:"󰹬"}.mdi-view-dashboard:before{content:"󰕮"}.mdi-view-dashboard-edit:before{content:"󱥇"}.mdi-view-dashboard-edit-outline:before{content:"󱥈"}.mdi-view-dashboard-outline:before{content:"󰨝"}.mdi-view-dashboard-variant:before{content:"󰡃"}.mdi-view-dashboard-variant-outline:before{content:"󱒉"}.mdi-view-day:before{content:"󰕯"}.mdi-view-day-outline:before{content:"󱒊"}.mdi-view-gallery:before{content:"󱢈"}.mdi-view-gallery-outline:before{content:"󱢉"}.mdi-view-grid:before{content:"󰕰"}.mdi-view-grid-compact:before{content:"󱱡"}.mdi-view-grid-outline:before{content:"󱇙"}.mdi-view-grid-plus:before{content:"󰾍"}.mdi-view-grid-plus-outline:before{content:"󱇚"}.mdi-view-headline:before{content:"󰕱"}.mdi-view-list:before{content:"󰕲"}.mdi-view-list-outline:before{content:"󱒋"}.mdi-view-module:before{content:"󰕳"}.mdi-view-module-outline:before{content:"󱒌"}.mdi-view-parallel:before{content:"󰜨"}.mdi-view-parallel-outline:before{content:"󱒍"}.mdi-view-quilt:before{content:"󰕴"}.mdi-view-quilt-outline:before{content:"󱒎"}.mdi-view-sequential:before{content:"󰜩"}.mdi-view-sequential-outline:before{content:"󱒏"}.mdi-view-split-horizontal:before{content:"󰯋"}.mdi-view-split-vertical:before{content:"󰯌"}.mdi-view-stream:before{content:"󰕵"}.mdi-view-stream-outline:before{content:"󱒐"}.mdi-view-week:before{content:"󰕶"}.mdi-view-week-outline:before{content:"󱒑"}.mdi-vimeo:before{content:"󰕷"}.mdi-violin:before{content:"󰘏"}.mdi-virtual-reality:before{content:"󰢔"}.mdi-virus:before{content:"󱎶"}.mdi-virus-off:before{content:"󱣡"}.mdi-virus-off-outline:before{content:"󱣢"}.mdi-virus-outline:before{content:"󱎷"}.mdi-vlc:before{content:"󰕼"}.mdi-voicemail:before{content:"󰕽"}.mdi-volcano:before{content:"󱪃"}.mdi-volcano-outline:before{content:"󱪄"}.mdi-volleyball:before{content:"󰦴"}.mdi-volume-equal:before{content:"󱬐"}.mdi-volume-high:before{content:"󰕾"}.mdi-volume-low:before{content:"󰕿"}.mdi-volume-medium:before{content:"󰖀"}.mdi-volume-minus:before{content:"󰝞"}.mdi-volume-mute:before{content:"󰝟"}.mdi-volume-off:before{content:"󰖁"}.mdi-volume-plus:before{content:"󰝝"}.mdi-volume-source:before{content:"󱄠"}.mdi-volume-variant-off:before{content:"󰸈"}.mdi-volume-vibrate:before{content:"󱄡"}.mdi-vote:before{content:"󰨟"}.mdi-vote-outline:before{content:"󰨠"}.mdi-vpn:before{content:"󰖂"}.mdi-vuejs:before{content:"󰡄"}.mdi-vuetify:before{content:"󰹭"}.mdi-walk:before{content:"󰖃"}.mdi-wall:before{content:"󰟾"}.mdi-wall-fire:before{content:"󱨑"}.mdi-wall-sconce:before{content:"󰤜"}.mdi-wall-sconce-flat:before{content:"󰤝"}.mdi-wall-sconce-flat-outline:before{content:"󱟉"}.mdi-wall-sconce-flat-variant:before{content:"󰐜"}.mdi-wall-sconce-flat-variant-outline:before{content:"󱟊"}.mdi-wall-sconce-outline:before{content:"󱟋"}.mdi-wall-sconce-round:before{content:"󰝈"}.mdi-wall-sconce-round-outline:before{content:"󱟌"}.mdi-wall-sconce-round-variant:before{content:"󰤞"}.mdi-wall-sconce-round-variant-outline:before{content:"󱟍"}.mdi-wallet:before{content:"󰖄"}.mdi-wallet-bifold:before{content:"󱱘"}.mdi-wallet-bifold-outline:before{content:"󱱙"}.mdi-wallet-giftcard:before{content:"󰖅"}.mdi-wallet-membership:before{content:"󰖆"}.mdi-wallet-outline:before{content:"󰯝"}.mdi-wallet-plus:before{content:"󰾎"}.mdi-wallet-plus-outline:before{content:"󰾏"}.mdi-wallet-travel:before{content:"󰖇"}.mdi-wallpaper:before{content:"󰸉"}.mdi-wan:before{content:"󰖈"}.mdi-wardrobe:before{content:"󰾐"}.mdi-wardrobe-outline:before{content:"󰾑"}.mdi-warehouse:before{content:"󰾁"}.mdi-washing-machine:before{content:"󰜪"}.mdi-washing-machine-alert:before{content:"󱆼"}.mdi-washing-machine-off:before{content:"󱆽"}.mdi-watch:before{content:"󰖉"}.mdi-watch-export:before{content:"󰖊"}.mdi-watch-export-variant:before{content:"󰢕"}.mdi-watch-import:before{content:"󰖋"}.mdi-watch-import-variant:before{content:"󰢖"}.mdi-watch-variant:before{content:"󰢗"}.mdi-watch-vibrate:before{content:"󰚱"}.mdi-watch-vibrate-off:before{content:"󰳚"}.mdi-water:before{content:"󰖌"}.mdi-water-alert:before{content:"󱔂"}.mdi-water-alert-outline:before{content:"󱔃"}.mdi-water-boiler:before{content:"󰾒"}.mdi-water-boiler-alert:before{content:"󱆳"}.mdi-water-boiler-auto:before{content:"󱮘"}.mdi-water-boiler-off:before{content:"󱆴"}.mdi-water-check:before{content:"󱔄"}.mdi-water-check-outline:before{content:"󱔅"}.mdi-water-circle:before{content:"󱠆"}.mdi-water-minus:before{content:"󱔆"}.mdi-water-minus-outline:before{content:"󱔇"}.mdi-water-off:before{content:"󰖍"}.mdi-water-off-outline:before{content:"󱔈"}.mdi-water-opacity:before{content:"󱡕"}.mdi-water-outline:before{content:"󰸊"}.mdi-water-percent:before{content:"󰖎"}.mdi-water-percent-alert:before{content:"󱔉"}.mdi-water-plus:before{content:"󱔊"}.mdi-water-plus-outline:before{content:"󱔋"}.mdi-water-polo:before{content:"󱊠"}.mdi-water-pump:before{content:"󰖏"}.mdi-water-pump-off:before{content:"󰾓"}.mdi-water-remove:before{content:"󱔌"}.mdi-water-remove-outline:before{content:"󱔍"}.mdi-water-sync:before{content:"󱟆"}.mdi-water-thermometer:before{content:"󱪅"}.mdi-water-thermometer-outline:before{content:"󱪆"}.mdi-water-well:before{content:"󱁫"}.mdi-water-well-outline:before{content:"󱁬"}.mdi-waterfall:before{content:"󱡉"}.mdi-watering-can:before{content:"󱒁"}.mdi-watering-can-outline:before{content:"󱒂"}.mdi-watermark:before{content:"󰘒"}.mdi-wave:before{content:"󰼮"}.mdi-wave-arrow-down:before{content:"󱲰"}.mdi-wave-arrow-up:before{content:"󱲱"}.mdi-wave-undercurrent:before{content:"󱳀"}.mdi-waveform:before{content:"󱑽"}.mdi-waves:before{content:"󰞍"}.mdi-waves-arrow-left:before{content:"󱡙"}.mdi-waves-arrow-right:before{content:"󱡚"}.mdi-waves-arrow-up:before{content:"󱡛"}.mdi-waze:before{content:"󰯞"}.mdi-weather-cloudy:before{content:"󰖐"}.mdi-weather-cloudy-alert:before{content:"󰼯"}.mdi-weather-cloudy-arrow-right:before{content:"󰹮"}.mdi-weather-cloudy-clock:before{content:"󱣶"}.mdi-weather-dust:before{content:"󱭚"}.mdi-weather-fog:before{content:"󰖑"}.mdi-weather-hail:before{content:"󰖒"}.mdi-weather-hazy:before{content:"󰼰"}.mdi-weather-hurricane:before{content:"󰢘"}.mdi-weather-hurricane-outline:before{content:"󱱸"}.mdi-weather-lightning:before{content:"󰖓"}.mdi-weather-lightning-rainy:before{content:"󰙾"}.mdi-weather-moonset:before{content:"󱴕"}.mdi-weather-moonset-down:before{content:"󱴖"}.mdi-weather-moonset-up:before{content:"󱴗"}.mdi-weather-night:before{content:"󰖔"}.mdi-weather-night-partly-cloudy:before{content:"󰼱"}.mdi-weather-partly-cloudy:before{content:"󰖕"}.mdi-weather-partly-lightning:before{content:"󰼲"}.mdi-weather-partly-rainy:before{content:"󰼳"}.mdi-weather-partly-snowy:before{content:"󰼴"}.mdi-weather-partly-snowy-rainy:before{content:"󰼵"}.mdi-weather-pouring:before{content:"󰖖"}.mdi-weather-rainy:before{content:"󰖗"}.mdi-weather-snowy:before{content:"󰖘"}.mdi-weather-snowy-heavy:before{content:"󰼶"}.mdi-weather-snowy-rainy:before{content:"󰙿"}.mdi-weather-sunny:before{content:"󰖙"}.mdi-weather-sunny-alert:before{content:"󰼷"}.mdi-weather-sunny-off:before{content:"󱓤"}.mdi-weather-sunset:before{content:"󰖚"}.mdi-weather-sunset-down:before{content:"󰖛"}.mdi-weather-sunset-up:before{content:"󰖜"}.mdi-weather-tornado:before{content:"󰼸"}.mdi-weather-windy:before{content:"󰖝"}.mdi-weather-windy-variant:before{content:"󰖞"}.mdi-web:before{content:"󰖟"}.mdi-web-box:before{content:"󰾔"}.mdi-web-cancel:before{content:"󱞐"}.mdi-web-check:before{content:"󰞉"}.mdi-web-clock:before{content:"󱉊"}.mdi-web-minus:before{content:"󱂠"}.mdi-web-off:before{content:"󰪎"}.mdi-web-plus:before{content:"󰀳"}.mdi-web-refresh:before{content:"󱞑"}.mdi-web-remove:before{content:"󰕑"}.mdi-web-sync:before{content:"󱞒"}.mdi-webcam:before{content:"󰖠"}.mdi-webcam-off:before{content:"󱜷"}.mdi-webhook:before{content:"󰘯"}.mdi-webpack:before{content:"󰜫"}.mdi-webrtc:before{content:"󱉈"}.mdi-wechat:before{content:"󰘑"}.mdi-weight:before{content:"󰖡"}.mdi-weight-gram:before{content:"󰴿"}.mdi-weight-kilogram:before{content:"󰖢"}.mdi-weight-lifter:before{content:"󱅝"}.mdi-weight-pound:before{content:"󰦵"}.mdi-whatsapp:before{content:"󰖣"}.mdi-wheel-barrow:before{content:"󱓲"}.mdi-wheelchair:before{content:"󱪇"}.mdi-wheelchair-accessibility:before{content:"󰖤"}.mdi-whistle:before{content:"󰦶"}.mdi-whistle-outline:before{content:"󱊼"}.mdi-white-balance-auto:before{content:"󰖥"}.mdi-white-balance-incandescent:before{content:"󰖦"}.mdi-white-balance-iridescent:before{content:"󰖧"}.mdi-white-balance-sunny:before{content:"󰖨"}.mdi-widgets:before{content:"󰜬"}.mdi-widgets-outline:before{content:"󱍕"}.mdi-wifi:before{content:"󰖩"}.mdi-wifi-alert:before{content:"󱚵"}.mdi-wifi-arrow-down:before{content:"󱚶"}.mdi-wifi-arrow-left:before{content:"󱚷"}.mdi-wifi-arrow-left-right:before{content:"󱚸"}.mdi-wifi-arrow-right:before{content:"󱚹"}.mdi-wifi-arrow-up:before{content:"󱚺"}.mdi-wifi-arrow-up-down:before{content:"󱚻"}.mdi-wifi-cancel:before{content:"󱚼"}.mdi-wifi-check:before{content:"󱚽"}.mdi-wifi-cog:before{content:"󱚾"}.mdi-wifi-lock:before{content:"󱚿"}.mdi-wifi-lock-open:before{content:"󱛀"}.mdi-wifi-marker:before{content:"󱛁"}.mdi-wifi-minus:before{content:"󱛂"}.mdi-wifi-off:before{content:"󰖪"}.mdi-wifi-plus:before{content:"󱛃"}.mdi-wifi-refresh:before{content:"󱛄"}.mdi-wifi-remove:before{content:"󱛅"}.mdi-wifi-settings:before{content:"󱛆"}.mdi-wifi-star:before{content:"󰸋"}.mdi-wifi-strength-1:before{content:"󰤟"}.mdi-wifi-strength-1-alert:before{content:"󰤠"}.mdi-wifi-strength-1-lock:before{content:"󰤡"}.mdi-wifi-strength-1-lock-open:before{content:"󱛋"}.mdi-wifi-strength-2:before{content:"󰤢"}.mdi-wifi-strength-2-alert:before{content:"󰤣"}.mdi-wifi-strength-2-lock:before{content:"󰤤"}.mdi-wifi-strength-2-lock-open:before{content:"󱛌"}.mdi-wifi-strength-3:before{content:"󰤥"}.mdi-wifi-strength-3-alert:before{content:"󰤦"}.mdi-wifi-strength-3-lock:before{content:"󰤧"}.mdi-wifi-strength-3-lock-open:before{content:"󱛍"}.mdi-wifi-strength-4:before{content:"󰤨"}.mdi-wifi-strength-4-alert:before{content:"󰤩"}.mdi-wifi-strength-4-lock:before{content:"󰤪"}.mdi-wifi-strength-4-lock-open:before{content:"󱛎"}.mdi-wifi-strength-alert-outline:before{content:"󰤫"}.mdi-wifi-strength-lock-open-outline:before{content:"󱛏"}.mdi-wifi-strength-lock-outline:before{content:"󰤬"}.mdi-wifi-strength-off:before{content:"󰤭"}.mdi-wifi-strength-off-outline:before{content:"󰤮"}.mdi-wifi-strength-outline:before{content:"󰤯"}.mdi-wifi-sync:before{content:"󱛇"}.mdi-wikipedia:before{content:"󰖬"}.mdi-wind-power:before{content:"󱪈"}.mdi-wind-power-outline:before{content:"󱪉"}.mdi-wind-turbine:before{content:"󰶥"}.mdi-wind-turbine-alert:before{content:"󱦫"}.mdi-wind-turbine-check:before{content:"󱦬"}.mdi-window-close:before{content:"󰖭"}.mdi-window-closed:before{content:"󰖮"}.mdi-window-closed-variant:before{content:"󱇛"}.mdi-window-maximize:before{content:"󰖯"}.mdi-window-minimize:before{content:"󰖰"}.mdi-window-open:before{content:"󰖱"}.mdi-window-open-variant:before{content:"󱇜"}.mdi-window-restore:before{content:"󰖲"}.mdi-window-shutter:before{content:"󱄜"}.mdi-window-shutter-alert:before{content:"󱄝"}.mdi-window-shutter-auto:before{content:"󱮣"}.mdi-window-shutter-cog:before{content:"󱪊"}.mdi-window-shutter-open:before{content:"󱄞"}.mdi-window-shutter-settings:before{content:"󱪋"}.mdi-windsock:before{content:"󱗺"}.mdi-wiper:before{content:"󰫩"}.mdi-wiper-wash:before{content:"󰶦"}.mdi-wiper-wash-alert:before{content:"󱣟"}.mdi-wizard-hat:before{content:"󱑷"}.mdi-wordpress:before{content:"󰖴"}.mdi-wrap:before{content:"󰖶"}.mdi-wrap-disabled:before{content:"󰯟"}.mdi-wrench:before{content:"󰖷"}.mdi-wrench-check:before{content:"󱮏"}.mdi-wrench-check-outline:before{content:"󱮐"}.mdi-wrench-clock:before{content:"󱦣"}.mdi-wrench-clock-outline:before{content:"󱮓"}.mdi-wrench-cog:before{content:"󱮑"}.mdi-wrench-cog-outline:before{content:"󱮒"}.mdi-wrench-outline:before{content:"󰯠"}.mdi-xamarin:before{content:"󰡅"}.mdi-xml:before{content:"󰗀"}.mdi-xmpp:before{content:"󰟿"}.mdi-yahoo:before{content:"󰭏"}.mdi-yeast:before{content:"󰗁"}.mdi-yin-yang:before{content:"󰚀"}.mdi-yoga:before{content:"󱅼"}.mdi-youtube:before{content:"󰗃"}.mdi-youtube-gaming:before{content:"󰡈"}.mdi-youtube-studio:before{content:"󰡇"}.mdi-youtube-subscription:before{content:"󰵀"}.mdi-youtube-tv:before{content:"󰑈"}.mdi-yurt:before{content:"󱔖"}.mdi-z-wave:before{content:"󰫪"}.mdi-zend:before{content:"󰫫"}.mdi-zigbee:before{content:"󰵁"}.mdi-zip-box:before{content:"󰗄"}.mdi-zip-box-outline:before{content:"󰿺"}.mdi-zip-disk:before{content:"󰨣"}.mdi-zodiac-aquarius:before{content:"󰩽"}.mdi-zodiac-aries:before{content:"󰩾"}.mdi-zodiac-cancer:before{content:"󰩿"}.mdi-zodiac-capricorn:before{content:"󰪀"}.mdi-zodiac-gemini:before{content:"󰪁"}.mdi-zodiac-leo:before{content:"󰪂"}.mdi-zodiac-libra:before{content:"󰪃"}.mdi-zodiac-pisces:before{content:"󰪄"}.mdi-zodiac-sagittarius:before{content:"󰪅"}.mdi-zodiac-scorpio:before{content:"󰪆"}.mdi-zodiac-taurus:before{content:"󰪇"}.mdi-zodiac-virgo:before{content:"󰪈"}.mdi-blank:before{content:"";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:#0000008a}.mdi-dark.mdi-inactive:before{color:#00000042}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:#ffffff4d}.mdi-rotate-45:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mdi-rotate-90:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-135:before{-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.mdi-rotate-180:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-225:before{-webkit-transform:rotate(225deg);-ms-transform:rotate(225deg);transform:rotate(225deg)}.mdi-rotate-270:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-rotate-315:before{-webkit-transform:rotate(315deg);-ms-transform:rotate(315deg);transform:rotate(315deg)}.mdi-flip-h:before{-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.mdi-flip-v:before{-webkit-transform:scaleY(-1);transform:scaleY(-1);filter:FlipV;-ms-filter:"FlipV"}.mdi-spin:before{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.custom-combobox{background-color:#fff}.custom-combobox .v-field{min-height:28px!important;height:28px!important;border-radius:2px!important}.custom-combobox .v-field__input{min-height:28px!important;padding:4px 8px!important;font-size:.8rem!important;color:#000}.custom-combobox-readonly .v-field__append-inner{display:none!important}.custom-combobox-menu .v-list-item-title{font-size:.8rem!important}.custom-combobox-menu .v-list-item{min-height:28px!important;padding-top:4px!important;padding-bottom:4px!important;font-size:.8rem!important}body .v-btn--variant-text[data-v-be01a021]:not(.v-btn--icon),body .v-btn--variant-plain[data-v-be01a021]:not(.v-btn--icon){padding-inline:8px}.custom-mtSelect-btn[data-v-be01a021]{flex:1 1 auto;min-width:0;overflow:hidden;justify-content:flex-start;text-align:left;padding-left:5px}.custom-mtSelect-span[data-v-be01a021]{font-size:.75rem;color:#000;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;width:100%}.custom-mtSelect-toggleBtn[data-v-be01a021]{width:25px;flex:0 0 25px;padding:0;border-left:1px solid #CCCAD0}.custom-row[data-v-be01a021]:hover{background-color:#f1f1f1}.active-row[data-v-be01a021]{background-color:#e3f2fd!important}.active-row[data-v-be01a021]:hover{background-color:#bbdefb!important}tbody>tr>td[data-v-be01a021],th[data-v-be01a021]{font-size:.75rem;border:2px solid #F1F5F9}@font-face{font-family:agGridBalham;src:url(data:font/woff2;charset=utf-8;base64,d09GMgABAAAAABfEAAsAAAAAMPQAABdyAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIo4BmAAjD4KugCvaQE2AiQDgjwLgSAABCAFhEYHhT0bdypVRoWNAyDCdNdFUbImvez/6wRuDJXukHrR7C3coWARzq7IlVcn6Cc2tRyGccEfwfcJ3f2dvkLBmLSr7Khf76QrOHAx7JCkqCUo9mO/h3liiCSSuCZtIh4yIWmCUknJfhR99ev/Pyf+DfY1KQE+SLjlEZKa0FNTk1MTemcKj59RX/7haZv/4MDAAXIW4DAQVDDIBQiHhWCjHkY0RsKi1VmrqHORLlhEO/fnyv3/dRUAvq+q+buXzBoWOWW8MXW/ttMkVBIK4CMht/l+05pJUmEmVN5BqApbVj3nMlLznHp+4Bd+E2+7YrEVd+RMWmCg+38E/J/NtBUGOkMZwAlx0SU1d83M7Eje+fPXp5VOebc32WevL7Re00gmwi7AFZDWhJKJFSdcuUwq4I7avDRlar9Ubkt3KYo6kGvKa7cuJCieHXqMzX8PFz8W+lwZWAwRCxnemC+aoM1xe5BCIg4S4iBPQ0NTRMcjgBwjFr7/MwoFgR1TVwkyRN6yAeLBY6cuygFoXSIyOgXU5LRrClSc88rfKMDVYYvPG0J7Pf5tATxBSNgFIEjJAEdF/MYohsA0OoOJJ6POzQ0Wm6BtTkEUkSIVbnjvgCQRpTsgbUMdB9SFYFsZI26s7Gm0bbhhOOyvbEOQ2TxTk0RHLGhEioIRQ5TXQcyGzYXZq2OPQNYOwExbzFaYZM3BuGIEbi5ujuxc0gNNsa2jb6s1DLWjFV5J1c9zVDtcBltujzZv0a4NBzCmLpHOsdRm547yiAbNBuYKpq0Nq0TMmqZEVHFHjCygwXDCLW/adHYCaqNRoX6yPVaR2kpb1hTZfFMXc5imAznVeweMIQWVplwcYWsRYYecM+GXc8Azn3Zc8OKrX5wFDsaNxXGAR8ICU+ulrxjW+lo+EuFM7lucgjfObMlCHONhRl4+hsb6UhsH9NqXoSaFem+HkhaMTa1SdFmtoTCnL8/dUnh4I5tIxojAhZRALcR9jR/LN7HZfKSx0gcF8B4dEiSgc0MiRUbLRE6qQG9oIrLAQ9F7ldastmlWKwyieKVViNY2JxQG1BIftje8cEQegq3pWg2PYIqwtM7MXDKSZM4eW1oztBROtK0gncdagHr62n2Iye2bnIJj6vVYTALeAR4hPQunXPPIGzN+hjK51cZMwj6fvzOnFPMCdcAKI4o5ZNHhnq0CQgeaqfVPHZKgB0SDRLYqQUo1TxYT16Dj4koluBUV7csJwPOT0sxY7XBt7bC9P4eJKathDyCClKtuHwCuz99/fFATeAAppFTgHcD0mjof/FCR2NAAFtKCZ89xYP+KgXQgFSgH0kBKGbsjSoEQRuUEStGIov9BAaTQsfTd98yHRP9q/z0VrnvoRcJ9ReixPC8E/BELWqhvwLB6xbE0dXgOuIluyaVMXQutyD2cWcvaQUdweAKRROaBeClUPn4BQSFhEVEd/yMxISklLSMrJ6+gSFVSVlFVE1HX0NTSFqHq6FL1tPUJQgaGRsYmpmbmIDKA9yAP+j+/sd/RyKJJsA6WPVql4gDQLm1/CFEfjAHOffIAaSWg7wxQEZBBYJE0AkukH1gm3cAKGQJWSQuwRiaAddIEbJBeYJO0AdukD9ghPcAuGQb2SAewT9qBAzIKHJFm4Jh0ASekFTglI8AZGQfOSSdwQQaASzIGXF0/CRIObFbkASgAUASgBEAZgB4AIgB6AagAUAWgD4B+AAYAGARgCIBhAEYAGAVgDIBxACYAmARgCoBpAGYAmAVgDoB5ABYAWARgyW3kgqQMzlgBYBWANQDWAdhg3RWbwAxbAGwDsAPALgB7rAjsu41ckAzACg4BOGLNcQys44QVh1MgCmduIxUkc+vZEANXIAEgBSADoAZAHYAWAG0SdGCq7OABeAJZNwDk9XdSazxW6wtR3B+bZ/GK815z5MY3KYHkfeX7WDheldCUrEXpHS7nw3yRNJy86a7yWsdc2ibIcjDQJknl5sXz1wTINsulGjFY60fa+mZVFCuF6NcsLu9SZEFoekasbQiVB7TWNRisPCAI2pJBqaLiqF8QFDlYGRTaBKmrsU6orC8rEyrKy+plsbraqoTyDAJyXUMXqJmoK9T4rlhV07Md9bVCgM8uetxxmn/tn7Pt1f9MnnDdlt+Gtnneuv/HzUdNxAY6nX+85t+pk09bfx9ceLLWRaY9gSAC8UXR/Lycr0/bakw9JeUAhhgEQ0bjNi3pKUUlW+i70FdogeIQ3cz4FiL6yVYeXeMTWZi6QV8Og7L/k/1ZFDWJrU46dTpZ3OtkMLdIrB70IbjAIwdcrsauZ5sBWHgM+1AdaQBxDFBtlem6sMzwPFxtOQ4I6Lb9c5V561DoHr6dde8eZbxPjtwh0+wDGuHs118Fq6P7qVCFGX3Gd4LfzL5Lp2cGOaUxKVdXAvpj6yk0lmb6plAZHgmS3xa/me548QskKeUHLD3pC0aR+egiH2fk03z9ZBq15IkguJv6E6XDaIK5IQO5oPzKZPXnPorgjxUiTclpjEcm9VQuh8y9hUxmARq7Dp7F1un9QI+ZiVCmgMxDQJ/PW8XGZNKKU710Cpk9CR5GbT2djmOrCI3M3tDewgHjYDH0nny60t4lMmYO6PG43L1HjufTnPKkAoXNuA4kNBZjh4kQC4XqWE/6k9lEtrhHntk3KLbigxzJOKoxkj8MklyhX2V1E/NUSd9/2jp70DhwRtyMOvjcUDJT2C19M0lmBQ/W5ax30mgrzNdTrijFOm0AXSU03vNwt7k3xLpn7kZmARo/jOCAs5FPPI6dDGhdSfUr1r+3mdk2vkKWWdqYhbir77wfpqfs5ZJDnQq+r7fvHtoNbXjazFlvleJmZJMtRe+2HaJuq5MloDsOtjaFD0LDdZG5Plr3vDap91nP4+32dAiwJJfUQsaJ6QWoeC/TtkGNQ1meB6MpNafTsPmeGgOAcK8jESq87/ZdgLD6U13Ov+csOt8MjsKsFgMVw0+1JBzgm4/7kJ8jiGkwK5/Tk/lxkBh5Q3giCMXJs5jiX7WPkB//8K4Igu+R2Ug//YCJMMjf/yEmyaedpjmV5Oy1J560LHiaBhdaoHqurmQ379hy3nnjpMYveisPbBwybZWcs1fs36AlldAZd1lW40VvzXGnST+kqvJ8M9QuNh70Wna6G0+gL9rl1hFObGbhqVh+GkgO8rOsJLCtIUoZZ2SKMUooj1q2A4NcOlfaPYI51nUxPwVRhzpPfM8NWXziAk2gNDVQBs+0MdfFpYf3jb1psxuvb4xMX/fCFzuPrmTOaxumrwh8fu885O3X3ry3/NAKvjdqNGR6Cqa6uy4FkHnvEvDpl+9j0Xp4FfqNKw8QsfJ6ziwYxY+C5oXNsBcxBiLE1vmrwnMRpiT92IOvnHyJLywrbtqnzEy0uFNriRyv37G4tL5rFP6KPtktpeR6cmP1NXVGKbZmOxq4HMdxZV8ju8nhRFXA4aaVHqqYmXt1w4g0eAhZbftqJD/M90a6vu6mVmz9XG/HkNltGHITGSaGeArglimxvsndaDVQ+Q0E8KwulmIpluNZpsyUMRk5pzfzsmCxZfThzpC36/c5oUEgkvc4i/qq/Mg3Z1T6x/l7hH3wOKmYng1THp1NZaRCs8M0MlYNqqKmtDmmy84MjVtKOGmE3FmWGMjZzpL9juM55KoERNd3R77pBBOtXgJShEtTp0zYjnkdZom4+v49/333SFkTImfb4v8g6B30dtJ9BLGllcNSJZzN1zAFhNPkEmDdXE9Rx8l1J871rT2edEm2Z1KGXXO8lbTuXvsdt8HveO3djvseNtntt6be7rg55Ua1TYrdgVZpkZSXw0t6t3ZsBYSJxl7GCtvzzUaK4c4lVaZGTKMSKFkEMjHnhbt3ll6VuB1vMcxFzou9nJSqRM5jqURfgrAP33cJfQFIcUjSe2GC3exljo5JBwO2C3wSE5B8Baps1C/hLHBsd3REGWvpK7ztE2sL7SvAJymr7a/YWPAmoA4IRWopoFpkt7U6lMcLtYTGyrDkhYbyqi8zgLJ10IO49QQwhF8dOxMqgSXuLNLw3CXwUbKozzkBXxI4il84olKNQhT37T/uPo5f+9M6qP6f/9KfFtqOqlSmRpJAmhfyOFDwODhT9/j9d7vr+JBG0H9Ho8HmeS8X02jI5I0J7OUzZ165CfaVs9WLCHANKStMFKMiESpONPuNi1BUlCg2Z2oWKPVavprHU/O126BtqHla/lZwsdI+2MpbDoCO2bDRvLEu3WDOhfWD68WmpaYPmjpt3cBI/Wg9kE4RxQsE8aKma9l4gYjaMv77uumssadYM1inxrLcn2qvL2vXXrnivmRJZZXguxl4U6FVAEnIQKXHEk1V1waDp9esWZabi8crFf068v4L/buVO3Z0DuoZbKAGbAb6sRMcfKQSq46JEDGCidyU2AS936lU7LV3CBjYYRz20fL5Wh+JD0+r5ftSSb7JFf3y1Hsqgtz5z/TzeyDsw9No+T4LVUu5oVzw3XU0Gxl/631RQX3V1NC9OK8iL5FXodd4cmFVz9l/w/l1Q1Mb7o6Vd6DtI1zVmntjuli37G2LRKOrQx3Y5+ohO6cAT9h6FblZUSehOu0Xux0rcEtKYkyirNxDYdAdHFmUy8OwTSelpbj64xhaIkxZ4/Rj/Drgb//KETYSGh1Wk0vkMS9dYLJ16pZgR8cNF+AVAZ38YzyMzgcOzTYNUSQiXXqbXrmYeiSDLr7qb0VaDRvAZapVaLO3cFrb4m9/OX0aHk+jd6Dh6cPCLfqwJPb5rQVGezWLn2Oj0N6gj8dQkDfz0grpikvShbfC+SiUjo5LfHuzveGFXZu3cF4zgCOn82TRzJd2qz+5KaK0szzCUUWlsf8LSFGlrLqJnrOiCsbQoqLLE5pOLIA76fb0cUmTEpvHzSZaUd2oMOi9b1JJ9b7WoONLprAYD6fht0RPme2RdAXH2rr8S7IZ02ojOFtpOrsE+xChTibUj/pN37zh93DfYB+mXPQnMikfx03WKWMU2Xb59mksvQxbFq7Ik8vzAriOQZGz/P+OJufjWJraigWKVfgId/f9QY7cgHy5LE/BcQiOFD1cLODzdVMhKMEWCXxGzOZ/6wLX2x6d2GVEdLlHCbuSbKAkq2JlosQO/BoEPZlXBlEicXMVFWUuof8HHatjTKljxzQ7lMZFnj1Rll3nTtmyOnvipdCfvnsLd4suRTVz8/Fxk4D41gDJ3/pv5WRVc9OYWqwDoMDAIBU16YIUnd0ctUGM0Jqal7/B3G7CtGcoyX/kr/hEdnMTDfw/ngex2mEYGQYjI4gJwYwqk+qYMVyQGMnej/L8AbPxZpfDJsTUoJQhsgaEpL4P+V15CDkE+DZe86k1MowAz+5PbX1t5bZxPfuqBryKMxpfIa/WWYcDSugcm3wSM27Jwr6yUnM8bFQoCuId1G00aB8H0EKGD1Fyn3/x2NbKnLXqc1npVadZlytW5Vnxo1zNpaVDjtOPVe1+2kTKj6HnRW2ilZVVjjPtGh9DZuVLaPh1Tr1ut/bbpa9YExxzK4sP4AxkFKly6e/HDKfJ3TC6aBQZFSmLERl0KcOnxB3ZclVt8LEf//ABXq02GHS6mufySioGiG8yDCqDyYDAqCoDuPYVevAAYkTVPSfwD/g6V+viashiO6Y9emR+aH50qo4HHRAFHaep7EH+W4Hr+oZ0nF6iE5Zvss6wyeelcmOjJmilhzlJ9ukOwUi/aiUuAZfICXcNrMhtHxeIxOI0PiG81LlWsVYoJ4obE+cXze8jRPNQX56erbVELXXJ3Wp+uO+ii7+IWqI6xng6yCPcQmpd0NxiWywoY85Y+Nqa33clCNdZ39yMkHqdAhnBySviCJ23JjpFZjD//PkAvOxY8P77nS8TX3be3w+b2FPp7ENs+lT2cGiO2NJmu81mBzGkrGGmlHGIKWG+DDffhDBDmIcYoUBn6u21YspjOvqXDZTmZvdsUSAuD1isyIOvwsKK8okEOkcee6F04UJ0/G160yXo3mf6sXx5Rg1MYjDq8xwta2kLFtbOt3lxz+nr7duTdpjmn7IJQ8RPVhPVsPr0n5lGXTf4pfUoZQmGogkoNqfamxem5hvq5mDJI0CxpV+kjvPuWo9nhVkaJ7UcB+EE02Tkf2nkxB9+tEWl6ms1tuDWh4XfI+sxTj5hrNZMmgxcQwYK0z2Tue3t3GTPdLNp0+/Fk7npnuaCmgXKxoKAXJksN6BgaNL5bK6sQD4EzyTkGfl5GCBxpXcf1L8e6b7tVcsoYAJtmMtta7s/Hxe22aW86sUD0dRhjpaTwGEDtjYwOVHOZWXLroO97IwyHwXC4EIq9U7vC4RB07DHFcuNX1hRsXdv38xZQUEAg21km4BUW4anSWhE2rLlEyZ8GLi0S2wtEjHjP3ygUWc/dYnDqVhfnDLHNtdF8tT8lF1ss2wyuazWPnzZa6wJ50W7mgtqgfPT3uhFzpa2yUNR17MhVz0xLWlNrnwiGPyl0TBy6JmiO+juzmFcbDr0TiBrONdicfYxPp1+Y6N9RJ8JZPuNTB1EBp/OudprU6fCCAy+H2SGQFJhDSNhPGSGQhIpVWQcyNI8TCgEyNcNTd2oD6tGww4eQY4cQtXVevWmqQzEW61TQu83NUwp63lUdfRgU4YN2ziFrvTW61B3aD1wmF5GppH3lGIeXRs6lXx2FsPkp4DsTgZ14iGxcrfhkIH2qL4eW7d23ToMnKAWFFyOiibhp2UsX/7DtK9bYGu+otMpc+D2w5+ac7NLB5b1n1LzrWglYPv2BQtKL8TKOXQCsSg/LOzVwcgXriPFTp/S792LBcjj47863XthM792wUJaraVjXn1dHbCWTpdnz52bikxdw2OifjuVHbCen+55dgoyhXYM3gKFyX/zypG/v0ChXbLO9hI4dLgA2dN22bCITcf9+x8eNgB9oDBQAyzdBOVDFz+I0mE+RKQxWrTggkYB4H+gSugfmVO1tTFWUTcRfzMkPzseMtN+2dFl/PBDfe5W1LUGcnYMYHfIYtm/yYmkrztsmbitr5c1DWrU5VArOMZzXid5ktfF8oj4+a5zRnba3q+AynUyTRMpk7SF20i5VSRP0FlFi+S+uzqoxd7PzAqlKn4gG2iAWJi8ftaBjb/8s9Rf+dyee34Ac+BHI43vu+fcNwecPYGAGzMPE+X+S8G576vQHn75btbSt8xx5wLfvftFfhIVHCL2UnjWAmRq6EQhmZYtknSqrswoymKZs3IWsOtcUY8JuDRrwEn56BJewGcpQParFCH7nUgS/kkZsv8RxZkg/G6qRqTuNeVXrN2r8ZVpflPZehPT45Bv859iqoWz5+NT3uF9EVM0Si473bJ0Ll9Ui6yI0mSfwnFA3ksWonyT1WOlGn49PhZuw0crTceUX7F2r8ZXO4r3m9Ze68nMRY6Jcr3/tJIJfmjC2fPxiTP5pZj75kbJeafb0UvnrfeivldkQRilCdWnVM4pvS9lo0Jx+E3W1cdKQIVf2VBNr+DVRysl/53aAyFT9v0oHj30McAQI4wxwRQzzLH4xPZCuQ5HorF4IplKZ7K5fKFYKleqtXqj2Wp3ur3+YDgaT6azOSaUabphWraDIAQjBKFQIwwaaBGOCEQiCtGIQSx0HWyaKctIpdFaeGhilEvqmWSH1rAlP7CVibre1WR/TnLNLz3IPaT2ULMjpdjUbJS2eeWWuYadW/ES81AnLo2jJrYNp6kV1miskutbCbeBjZJSz6Zzz7bad5TsgK5N2+PtBiM91k3oRnnyJlW9MBgWtW/QHvTQMWm/jHUYrEDa0C+1FZMKHfqaW2505MW4mstxY651U9+p3xC3454KaissTDMWzY33csEdhMoF6lHgQYVn0XWs+t1IfmpVhXMpilVqWzyIdVlpP5kzTVMjYaDcyYXHEeuMVJVfYKuRaJSeGLfcOaMffJsGOXTDuFusE4aOE6l2uDXNx0rlBvGGLWvQ5UVgMLn8JK2Xmyn1RakEGJSIIChqCBgXJFh4VPjBCVfkDg1aBNxwRoF7BwAA);font-weight:400;font-style:normal}.ag-theme-balham,.ag-theme-balham-dark,.ag-theme-balham-auto-dark{--ag-balham-active-color: #0091ea;--ag-foreground-color: #000;--ag-background-color: #fff;--ag-header-background-color: #f5f7f7;--ag-tooltip-background-color: #cbd0d3;--ag-subheader-background-color: #e2e9eb;--ag-control-panel-background-color: #f5f7f7;--ag-border-color: #bdc3c7;--ag-odd-row-background-color: #fcfdfe;--ag-row-hover-color: #ecf0f1;--ag-column-hover-color: #ecf0f1;--ag-input-border-color: #95a5a6;--ag-invalid-color: #e02525;--ag-input-disabled-background-color: #ebebeb;--ag-checkbox-unchecked-color: #7f8c8d;--ag-input-focus-border-color: #719ece;--ag-advanced-filter-join-pill-color: #f08e8d;--ag-advanced-filter-column-pill-color: #a6e194;--ag-advanced-filter-option-pill-color: #f3c08b;--ag-advanced-filter-value-pill-color: #85c0e4;--ag-find-match-color: var(--ag-foreground-color);--ag-find-match-background-color: #ffff00;--ag-find-active-match-color: var(--ag-foreground-color);--ag-find-active-match-background-color: #ffa500;--ag-input-focus-box-shadow: 0 0 2px 1px var(--ag-input-focus-border-color);--ag-range-selection-border-color: var(--ag-balham-active-color);--ag-checkbox-checked-color: var(--ag-balham-active-color);--ag-checkbox-background-color: var(--ag-background-color);--ag-panel-background-color: var(--ag-header-background-color);--ag-secondary-foreground-color: rgba(0, 0, 0, .54);--ag-disabled-foreground-color: rgba(0, 0, 0, .38);--ag-subheader-toolbar-background-color: rgba(226, 233, 235, .5);--ag-row-border-color: rgba(189, 195, 199, .58);--ag-chip-background-color: rgba(0, 0, 0, .1);--ag-range-selection-background-color: rgba(0, 145, 234, .2);--ag-range-selection-background-color-2: rgba(0, 145, 234, .36);--ag-range-selection-background-color-3: rgba(0, 145, 234, .49);--ag-range-selection-background-color-4: rgba(0, 145, 234, .59);--ag-selected-row-background-color: rgba(0, 145, 234, .28);--ag-header-column-separator-color: rgba(189, 195, 199, .5);--ag-input-disabled-border-color: rgba(149, 165, 166, .3);--ag-row-numbers-selected-color: color-mix(in srgb, transparent, var(--ag-balham-active-color) 50%);--ag-header-column-separator-display: block;--ag-header-column-separator-height: 50%;--ag-grid-size: 4px;--ag-icon-size: 16px;--ag-row-height: calc(var(--ag-grid-size) * 7);--ag-header-height: calc(var(--ag-grid-size) * 8);--ag-list-item-height: calc(var(--ag-grid-size) * 6);--ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));--ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);--ag-input-height: calc(var(--ag-grid-size) * 4);--ag-chart-menu-panel-width: 240px;--ag-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--ag-font-size: 12px;--ag-icon-font-family: agGridBalham;--ag-border-radius: 2px;--ag-checkbox-border-radius: 3px;--ag-card-shadow: none}.ag-theme-balham-dark{--ag-balham-active-color: #00b0ff;--ag-foreground-color: #f5f5f5;--ag-background-color: #2d3436;--ag-header-background-color: #1c1c1c;--ag-tooltip-background-color: #1c1f20;--ag-subheader-background-color: #111;--ag-control-panel-background-color: #202020;--ag-border-color: #424242;--ag-odd-row-background-color: #262c2e;--ag-row-hover-color: #3d4749;--ag-column-hover-color: #3d4749;--ag-input-border-color: #f0f0f0;--ag-input-disabled-background-color: rgba(48, 46, 46, .3);--ag-modal-overlay-background-color: rgba(45, 52, 54, .66);--ag-checkbox-unchecked-color: #ecf0f1;--ag-advanced-filter-join-pill-color: #7a3a37;--ag-advanced-filter-column-pill-color: #355f2d;--ag-advanced-filter-option-pill-color: #5a3168;--ag-advanced-filter-value-pill-color: #374c86;--ag-find-match-color: var(--ag-background-color);--ag-find-active-match-color: var(--ag-background-color);--ag-secondary-foreground-color: var(--ag-foreground-color);--ag-disabled-foreground-color: rgba(245, 245, 245, .38);--ag-subheader-toolbar-background-color: rgba(17, 17, 17, .5);--ag-row-border-color: #5c5c5c;--ag-chip-background-color: rgba(245, 245, 245, .08);--ag-range-selection-background-color: rgba(0, 176, 255, .2);--ag-range-selection-background-color-2: rgba(0, 176, 255, .36);--ag-range-selection-background-color-3: rgba(0, 176, 255, .49);--ag-range-selection-background-color-4: rgba(0, 176, 255, .59);--ag-selected-row-background-color: rgba(0, 176, 255, .28);--ag-header-column-separator-color: rgba(66, 66, 66, .5);--ag-input-disabled-border-color: rgba(240, 240, 240, .3);--ag-header-foreground-color: rgba(245, 245, 245, .64);--ag-toggle-button-off-background-color: transparent;--ag-toggle-button-off-border-color: var(--ag-foreground-color);--ag-range-selection-chart-category-background-color: rgba(26, 177, 74, .5);--ag-range-selection-chart-background-color: rgba(45, 166, 255, .5);--ag-input-focus-box-shadow: 0 0 4px 1.5px var(--ag-input-focus-border-color);--ag-row-loading-skeleton-effect-color: rgba(202, 203, 204, .4);color-scheme:dark}@media (prefers-color-scheme: dark){.ag-theme-balham-auto-dark{--ag-balham-active-color: #00b0ff;--ag-foreground-color: #f5f5f5;--ag-background-color: #2d3436;--ag-header-background-color: #1c1c1c;--ag-tooltip-background-color: #1c1f20;--ag-subheader-background-color: #111;--ag-control-panel-background-color: #202020;--ag-border-color: #424242;--ag-odd-row-background-color: #262c2e;--ag-row-hover-color: #3d4749;--ag-column-hover-color: #3d4749;--ag-input-border-color: #f0f0f0;--ag-input-disabled-background-color: rgba(48, 46, 46, .3);--ag-modal-overlay-background-color: rgba(45, 52, 54, .66);--ag-checkbox-unchecked-color: #ecf0f1;--ag-advanced-filter-join-pill-color: #7a3a37;--ag-advanced-filter-column-pill-color: #355f2d;--ag-advanced-filter-option-pill-color: #5a3168;--ag-advanced-filter-value-pill-color: #374c86;--ag-find-match-color: var(--ag-background-color);--ag-find-active-match-color: var(--ag-background-color);--ag-secondary-foreground-color: var(--ag-foreground-color);--ag-disabled-foreground-color: rgba(245, 245, 245, .38);--ag-subheader-toolbar-background-color: rgba(17, 17, 17, .5);--ag-row-border-color: #5c5c5c;--ag-chip-background-color: rgba(245, 245, 245, .08);--ag-range-selection-background-color: rgba(0, 176, 255, .2);--ag-range-selection-background-color-2: rgba(0, 176, 255, .36);--ag-range-selection-background-color-3: rgba(0, 176, 255, .49);--ag-range-selection-background-color-4: rgba(0, 176, 255, .59);--ag-selected-row-background-color: rgba(0, 176, 255, .28);--ag-header-column-separator-color: rgba(66, 66, 66, .5);--ag-input-disabled-border-color: rgba(240, 240, 240, .3);--ag-header-foreground-color: rgba(245, 245, 245, .64);--ag-toggle-button-off-background-color: transparent;--ag-toggle-button-off-border-color: var(--ag-foreground-color);--ag-range-selection-chart-category-background-color: rgba(26, 177, 74, .5);--ag-range-selection-chart-background-color: rgba(45, 166, 255, .5);--ag-input-focus-box-shadow: 0 0 4px 1.5px var(--ag-input-focus-border-color);--ag-row-loading-skeleton-effect-color: rgba(202, 203, 204, .4);color-scheme:dark}}.ag-theme-balham .ag-filter-toolpanel-header,.ag-theme-balham .ag-filter-toolpanel-search,.ag-theme-balham .ag-status-bar,.ag-theme-balham .ag-header-row,.ag-theme-balham .ag-row-number-cell,.ag-theme-balham .ag-multi-filter-group-title-bar,.ag-theme-balham-dark .ag-filter-toolpanel-header,.ag-theme-balham-dark .ag-filter-toolpanel-search,.ag-theme-balham-dark .ag-status-bar,.ag-theme-balham-dark .ag-header-row,.ag-theme-balham-dark .ag-row-number-cell,.ag-theme-balham-dark .ag-multi-filter-group-title-bar,.ag-theme-balham-auto-dark .ag-filter-toolpanel-header,.ag-theme-balham-auto-dark .ag-filter-toolpanel-search,.ag-theme-balham-auto-dark .ag-status-bar,.ag-theme-balham-auto-dark .ag-header-row,.ag-theme-balham-auto-dark .ag-row-number-cell,.ag-theme-balham-auto-dark .ag-multi-filter-group-title-bar{font-weight:600;color:var(--ag-header-foreground-color)}.ag-theme-balham .ag-ltr input[class^=ag-]:not([type]),.ag-theme-balham .ag-ltr input[class^=ag-][type=text],.ag-theme-balham .ag-ltr input[class^=ag-][type=number],.ag-theme-balham .ag-ltr input[class^=ag-][type=tel],.ag-theme-balham .ag-ltr input[class^=ag-][type=date],.ag-theme-balham .ag-ltr input[class^=ag-][type=datetime-local],.ag-theme-balham .ag-ltr textarea[class^=ag-],.ag-theme-balham-dark .ag-ltr input[class^=ag-]:not([type]),.ag-theme-balham-dark .ag-ltr input[class^=ag-][type=text],.ag-theme-balham-dark .ag-ltr input[class^=ag-][type=number],.ag-theme-balham-dark .ag-ltr input[class^=ag-][type=tel],.ag-theme-balham-dark .ag-ltr input[class^=ag-][type=date],.ag-theme-balham-dark .ag-ltr input[class^=ag-][type=datetime-local],.ag-theme-balham-dark .ag-ltr textarea[class^=ag-],.ag-theme-balham-auto-dark .ag-ltr input[class^=ag-]:not([type]),.ag-theme-balham-auto-dark .ag-ltr input[class^=ag-][type=text],.ag-theme-balham-auto-dark .ag-ltr input[class^=ag-][type=number],.ag-theme-balham-auto-dark .ag-ltr input[class^=ag-][type=tel],.ag-theme-balham-auto-dark .ag-ltr input[class^=ag-][type=date],.ag-theme-balham-auto-dark .ag-ltr input[class^=ag-][type=datetime-local],.ag-theme-balham-auto-dark .ag-ltr textarea[class^=ag-]{padding-left:var(--ag-grid-size)}.ag-theme-balham .ag-rtl input[class^=ag-]:not([type]),.ag-theme-balham .ag-rtl input[class^=ag-][type=text],.ag-theme-balham .ag-rtl input[class^=ag-][type=number],.ag-theme-balham .ag-rtl input[class^=ag-][type=tel],.ag-theme-balham .ag-rtl input[class^=ag-][type=date],.ag-theme-balham .ag-rtl input[class^=ag-][type=datetime-local],.ag-theme-balham .ag-rtl textarea[class^=ag-],.ag-theme-balham-dark .ag-rtl input[class^=ag-]:not([type]),.ag-theme-balham-dark .ag-rtl input[class^=ag-][type=text],.ag-theme-balham-dark .ag-rtl input[class^=ag-][type=number],.ag-theme-balham-dark .ag-rtl input[class^=ag-][type=tel],.ag-theme-balham-dark .ag-rtl input[class^=ag-][type=date],.ag-theme-balham-dark .ag-rtl input[class^=ag-][type=datetime-local],.ag-theme-balham-dark .ag-rtl textarea[class^=ag-],.ag-theme-balham-auto-dark .ag-rtl input[class^=ag-]:not([type]),.ag-theme-balham-auto-dark .ag-rtl input[class^=ag-][type=text],.ag-theme-balham-auto-dark .ag-rtl input[class^=ag-][type=number],.ag-theme-balham-auto-dark .ag-rtl input[class^=ag-][type=tel],.ag-theme-balham-auto-dark .ag-rtl input[class^=ag-][type=date],.ag-theme-balham-auto-dark .ag-rtl input[class^=ag-][type=datetime-local],.ag-theme-balham-auto-dark .ag-rtl textarea[class^=ag-]{padding-right:var(--ag-grid-size)}.ag-theme-balham .ag-column-drop-vertical-empty-message,.ag-theme-balham .ag-status-bar,.ag-theme-balham-dark .ag-column-drop-vertical-empty-message,.ag-theme-balham-dark .ag-status-bar,.ag-theme-balham-auto-dark .ag-column-drop-vertical-empty-message,.ag-theme-balham-auto-dark .ag-status-bar{font-weight:600;color:var(--ag-disabled-foreground-color)}.ag-theme-balham.ag-dnd-ghost,.ag-theme-balham-dark.ag-dnd-ghost,.ag-theme-balham-auto-dark.ag-dnd-ghost{font-size:var(--ag-font-size);font-weight:600}.ag-theme-balham .ag-tab,.ag-theme-balham-dark .ag-tab,.ag-theme-balham-auto-dark .ag-tab{border:1px solid transparent;padding:var(--ag-grid-size) calc(var(--ag-grid-size) * 2);margin:var(--ag-grid-size);margin-bottom:-1px}.ag-theme-balham .ag-tab-selected,.ag-theme-balham-dark .ag-tab-selected,.ag-theme-balham-auto-dark .ag-tab-selected{background-color:var(--ag-background-color);border-color:var(--ag-border-color);border-bottom-color:transparent}.ag-theme-balham .ag-tabs-header,.ag-theme-balham-dark .ag-tabs-header,.ag-theme-balham-auto-dark .ag-tabs-header{border-bottom:1px solid var(--ag-border-color)}.ag-theme-balham .ag-column-drop-cell,.ag-theme-balham-dark .ag-column-drop-cell,.ag-theme-balham-auto-dark .ag-column-drop-cell{height:calc(var(--ag-grid-size) * 6)}.ag-theme-balham .ag-column-drop-vertical-title,.ag-theme-balham-dark .ag-column-drop-vertical-title,.ag-theme-balham-auto-dark .ag-column-drop-vertical-title{color:var(--ag-foreground-color)}.ag-theme-balham .ag-column-drop-vertical-cell,.ag-theme-balham-dark .ag-column-drop-vertical-cell,.ag-theme-balham-auto-dark .ag-column-drop-vertical-cell{margin-left:calc(var(--ag-grid-size) * 2);margin-right:calc(var(--ag-grid-size) * 2)}.ag-theme-balham .ag-column-drop-vertical-cell-text,.ag-theme-balham-dark .ag-column-drop-vertical-cell-text,.ag-theme-balham-auto-dark .ag-column-drop-vertical-cell-text{margin-left:calc(var(--ag-grid-size) * 2)}.ag-theme-balham .ag-column-drop-vertical-icon,.ag-theme-balham-dark .ag-column-drop-vertical-icon,.ag-theme-balham-auto-dark .ag-column-drop-vertical-icon{color:var(--ag-secondary-foreground-color)}.ag-theme-balham .ag-ltr .ag-column-drop-vertical-empty-message,.ag-theme-balham-dark .ag-ltr .ag-column-drop-vertical-empty-message,.ag-theme-balham-auto-dark .ag-ltr .ag-column-drop-vertical-empty-message{padding-left:calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);padding-right:var(--ag-grid-size)}.ag-theme-balham .ag-rtl .ag-column-drop-vertical-empty-message,.ag-theme-balham-dark .ag-rtl .ag-column-drop-vertical-empty-message,.ag-theme-balham-auto-dark .ag-rtl .ag-column-drop-vertical-empty-message{padding-right:calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);padding-left:var(--ag-grid-size)}.ag-theme-balham .ag-column-drop-horizontal,.ag-theme-balham-dark .ag-column-drop-horizontal,.ag-theme-balham-auto-dark .ag-column-drop-horizontal{height:var(--ag-header-height)}.ag-theme-balham .ag-column-drop-empty,.ag-theme-balham-dark .ag-column-drop-empty,.ag-theme-balham-auto-dark .ag-column-drop-empty{color:var(--ag-disabled-foreground-color)}.ag-theme-balham .ag-column-drop-horizontal-cell-text,.ag-theme-balham-dark .ag-column-drop-horizontal-cell-text,.ag-theme-balham-auto-dark .ag-column-drop-horizontal-cell-text{margin-left:calc(var(--ag-grid-size) * 2)}.ag-theme-balham .ag-column-drop-vertical,.ag-theme-balham-dark .ag-column-drop-vertical,.ag-theme-balham-auto-dark .ag-column-drop-vertical{padding-top:calc(var(--ag-grid-size) * 2)}.ag-theme-balham .ag-column-select-column-readonly.ag-icon-grip,.ag-theme-balham .ag-column-select-column-readonly .ag-icon-grip,.ag-theme-balham-dark .ag-column-select-column-readonly.ag-icon-grip,.ag-theme-balham-dark .ag-column-select-column-readonly .ag-icon-grip,.ag-theme-balham-auto-dark .ag-column-select-column-readonly.ag-icon-grip,.ag-theme-balham-auto-dark .ag-column-select-column-readonly .ag-icon-grip{opacity:.35}.ag-theme-balham .ag-menu-header,.ag-theme-balham-dark .ag-menu-header,.ag-theme-balham-auto-dark .ag-menu-header{background-color:var(--ag-header-background-color)}.ag-theme-balham .ag-overlay-loading-center,.ag-theme-balham-dark .ag-overlay-loading-center,.ag-theme-balham-auto-dark .ag-overlay-loading-center{background-color:var(--ag-background-color);border:1px solid var(--ag-border-color);color:var(--ag-foreground-color);padding:calc(var(--ag-grid-size) * 4)}.ag-theme-balham .ag-tooltip,.ag-theme-balham-dark .ag-tooltip,.ag-theme-balham-auto-dark .ag-tooltip{border:none}.ag-theme-balham .ag-panel-title-bar-button-icon,.ag-theme-balham-dark .ag-panel-title-bar-button-icon,.ag-theme-balham-auto-dark .ag-panel-title-bar-button-icon{font-size:calc(var(--ag-icon-size) + var(--ag-grid-size))}.ag-theme-balham .ag-panel,.ag-theme-balham-dark .ag-panel,.ag-theme-balham-auto-dark .ag-panel{background-color:var(--ag-header-background-color)}.ag-theme-balham .ag-chart-data-section,.ag-theme-balham .ag-chart-format-section,.ag-theme-balham .ag-chart-advanced-settings-section,.ag-theme-balham-dark .ag-chart-data-section,.ag-theme-balham-dark .ag-chart-format-section,.ag-theme-balham-dark .ag-chart-advanced-settings-section,.ag-theme-balham-auto-dark .ag-chart-data-section,.ag-theme-balham-auto-dark .ag-chart-format-section,.ag-theme-balham-auto-dark .ag-chart-advanced-settings-section{padding-bottom:calc(var(--ag-grid-size) * .5)}.ag-theme-balham .ag-group-toolbar,.ag-theme-balham-dark .ag-group-toolbar,.ag-theme-balham-auto-dark .ag-group-toolbar{background-color:var(--ag-subheader-toolbar-background-color)}.ag-theme-balham .ag-chart-tab,.ag-theme-balham-dark .ag-chart-tab,.ag-theme-balham-auto-dark .ag-chart-tab{padding-top:calc(var(--ag-grid-size) * .5)}.ag-theme-balham .ag-charts-format-sub-level-group-item,.ag-theme-balham-dark .ag-charts-format-sub-level-group-item,.ag-theme-balham-auto-dark .ag-charts-format-sub-level-group-item{margin-bottom:calc(var(--ag-grid-size) * 1.5)}.ag-theme-balham .ag-filter-active .ag-icon-filter,.ag-theme-balham-dark .ag-filter-active .ag-icon-filter,.ag-theme-balham-auto-dark .ag-filter-active .ag-icon-filter{color:var(--ag-balham-active-color)}.ag-theme-balham .ag-color-input input[class^=ag-][type=text].ag-input-field-input,.ag-theme-balham-dark .ag-color-input input[class^=ag-][type=text].ag-input-field-input,.ag-theme-balham-auto-dark .ag-color-input input[class^=ag-][type=text].ag-input-field-input{min-height:calc(var(--ag-icon-size) + 4px)}.ag-theme-balham .ag-list-item-hovered:after,.ag-theme-balham-dark .ag-list-item-hovered:after,.ag-theme-balham-auto-dark .ag-list-item-hovered:after{background-color:var(--ag-balham-active-color)}.ag-theme-balham .ag-pill .ag-pill-button:hover,.ag-theme-balham-dark .ag-pill .ag-pill-button:hover,.ag-theme-balham-auto-dark .ag-pill .ag-pill-button:hover{color:var(--ag-balham-active-color)}.ag-theme-balham .ag-header-highlight-before:after,.ag-theme-balham .ag-header-highlight-after:after,.ag-theme-balham-dark .ag-header-highlight-before:after,.ag-theme-balham-dark .ag-header-highlight-after:after,.ag-theme-balham-auto-dark .ag-header-highlight-before:after,.ag-theme-balham-auto-dark .ag-header-highlight-after:after{background-color:var(--ag-balham-active-color)}.ag-theme-balham .ag-advanced-filter-builder-item-button-disabled .ag-icon,.ag-theme-balham .ag-disabled .ag-icon,.ag-theme-balham .ag-column-select-column-group-readonly .ag-icon,.ag-theme-balham [disabled] .ag-icon,.ag-theme-balham-dark .ag-advanced-filter-builder-item-button-disabled .ag-icon,.ag-theme-balham-dark .ag-disabled .ag-icon,.ag-theme-balham-dark .ag-column-select-column-group-readonly .ag-icon,.ag-theme-balham-dark [disabled] .ag-icon,.ag-theme-balham-auto-dark .ag-advanced-filter-builder-item-button-disabled .ag-icon,.ag-theme-balham-auto-dark .ag-disabled .ag-icon,.ag-theme-balham-auto-dark .ag-column-select-column-group-readonly .ag-icon,.ag-theme-balham-auto-dark [disabled] .ag-icon{color:var(--ag-disabled-foreground-color)}.VPLocalSearchBox[data-v-ce626c7c]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-ce626c7c]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-ce626c7c]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-ce626c7c]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-ce626c7c]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-ce626c7c]{padding:0 8px}}.search-bar[data-v-ce626c7c]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-ce626c7c]{display:block;font-size:18px}.navigate-icon[data-v-ce626c7c]{display:block;font-size:14px}.search-icon[data-v-ce626c7c]{margin:8px}@media (max-width: 767px){.search-icon[data-v-ce626c7c]{display:none}}.search-input[data-v-ce626c7c]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-ce626c7c]{padding:6px 4px}}.search-actions[data-v-ce626c7c]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-ce626c7c]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-ce626c7c]{display:none}}.search-actions button[data-v-ce626c7c]{padding:8px}.search-actions button[data-v-ce626c7c]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-ce626c7c]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-ce626c7c]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-ce626c7c]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-ce626c7c]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-ce626c7c]{display:none}}.search-keyboard-shortcuts kbd[data-v-ce626c7c]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-ce626c7c]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-ce626c7c]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-ce626c7c]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-ce626c7c]{margin:8px}}.titles[data-v-ce626c7c]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-ce626c7c]{display:flex;align-items:center;gap:4px}.title.main[data-v-ce626c7c]{font-weight:500}.title-icon[data-v-ce626c7c]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-ce626c7c]{opacity:.5}.result.selected[data-v-ce626c7c]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-ce626c7c]{position:relative}.excerpt[data-v-ce626c7c]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-ce626c7c]{opacity:1}.excerpt[data-v-ce626c7c] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-ce626c7c] mark,.excerpt[data-v-ce626c7c] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-ce626c7c] .vp-code-group .tabs{display:none}.excerpt[data-v-ce626c7c] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-ce626c7c]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-ce626c7c]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-ce626c7c],.result.selected .title-icon[data-v-ce626c7c]{color:var(--vp-c-brand-1)!important}.no-results[data-v-ce626c7c]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-ce626c7c]{flex:none} diff --git a/assets/style.CHwhGjlA.css b/assets/style.CHwhGjlA.css deleted file mode 100644 index e028504..0000000 --- a/assets/style.CHwhGjlA.css +++ /dev/null @@ -1,5 +0,0 @@ -@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: #3c3c43;--vp-c-text-2: #67676c;--vp-c-text-3: #929295}.dark{--vp-c-text-1: #dfdfd6;--vp-c-text-2: #98989f;--vp-c-text-3: #6a6a71}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:lang(es),:lang(pt){--vp-code-copy-copied-text-content: "Copiado"}:lang(fa){--vp-code-copy-copied-text-content: "کپی شد"}:lang(ko){--vp-code-copy-copied-text-content: "복사됨"}:lang(ru){--vp-code-copy-copied-text-content: "Скопировано"}:lang(zh){--vp-code-copy-copied-text-content: "已复制"}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d6be1790]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d6be1790]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d6be1790]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-a5bbad30]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-a5bbad30]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-e98dd255]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-e98dd255]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-e257564d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-e257564d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-fa7799d5]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-fa7799d5]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa7799d5]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-fa7799d5]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-fa7799d5]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-fa7799d5]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-fa7799d5]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-fa7799d5]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-fa7799d5]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-fa7799d5]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-fa7799d5]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-fa7799d5]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-fa7799d5]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-4f9c455b]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-4f9c455b]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-4f9c455b]{flex-direction:row}}.main[data-v-4f9c455b]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-4f9c455b]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-4f9c455b]{text-align:left}}@media (min-width: 960px){.main[data-v-4f9c455b]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-4f9c455b]{max-width:592px}}.heading[data-v-4f9c455b]{display:flex;flex-direction:column}.name[data-v-4f9c455b],.text[data-v-4f9c455b]{width:fit-content;max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0 auto}.name[data-v-4f9c455b]{color:var(--vp-home-hero-name-color)}.clip[data-v-4f9c455b]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-4f9c455b],.text[data-v-4f9c455b]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-4f9c455b],.text[data-v-4f9c455b]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0}}.tagline[data-v-4f9c455b]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-4f9c455b]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-4f9c455b]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-4f9c455b]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-4f9c455b]{margin:0}}.actions[data-v-4f9c455b]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:center}@media (min-width: 640px){.actions[data-v-4f9c455b]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:flex-start}}.action[data-v-4f9c455b]{flex-shrink:0;padding:6px}.image[data-v-4f9c455b]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-4f9c455b]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-4f9c455b]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-4f9c455b]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-4f9c455b]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-4f9c455b]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-4f9c455b]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-4f9c455b]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-4f9c455b]{width:320px;height:320px}}[data-v-4f9c455b] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-4f9c455b] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-4f9c455b] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-a3976bdc]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a3976bdc]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a3976bdc]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width: 960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-8b561e3d]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-8b561e3d]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width: 960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e315a0ad]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-8a42e2b4]{color:var(--vp-c-text-1)}.icon[data-v-8a42e2b4]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{font-size:14px}.icon[data-v-8a42e2b4]{font-size:16px}}.open>.icon[data-v-8a42e2b4]{transform:rotate(90deg)}.items[data-v-8a42e2b4]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-8a42e2b4]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-8a42e2b4]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-8a42e2b4]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-8a42e2b4]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-8a42e2b4]{transition:all .2s ease-out}.flyout-leave-active[data-v-8a42e2b4]{transition:all .15s ease-in}.flyout-enter-from[data-v-8a42e2b4],.flyout-leave-to[data-v-8a42e2b4]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-a6f0e41e]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.moon[data-v-5337faa4],.dark .sun[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-6c893767]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-35975db6]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-35975db6]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-35975db6]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-35975db6]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-b98bc113]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-b98bc113] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-b98bc113] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-b98bc113] .group:last-child{padding-bottom:0}.VPMenu[data-v-b98bc113] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-b98bc113] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-b98bc113] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-b98bc113] .action{padding-left:24px}.VPFlyout[data-v-cf11d7a2]{position:relative}.VPFlyout[data-v-cf11d7a2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-cf11d7a2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-cf11d7a2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-cf11d7a2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-cf11d7a2]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-cf11d7a2]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-cf11d7a2],.button[aria-expanded=true]+.menu[data-v-cf11d7a2]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-cf11d7a2]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-cf11d7a2]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-cf11d7a2]{margin-right:0;font-size:16px}.text-icon[data-v-cf11d7a2]{margin-left:4px;font-size:14px}.icon[data-v-cf11d7a2]{font-size:20px;transition:fill .25s}.menu[data-v-cf11d7a2]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-bd121fe5]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-bd121fe5]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-bd121fe5]>svg,.VPSocialLink[data-v-bd121fe5]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-bb2aa2f0]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-bb2aa2f0]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-bb2aa2f0]{display:none}}.trans-title[data-v-bb2aa2f0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-bb2aa2f0],.item.social-links[data-v-bb2aa2f0]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-bb2aa2f0]{min-width:176px}.appearance-action[data-v-bb2aa2f0]{margin-right:-2px}.social-links-list[data-v-bb2aa2f0]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-e56f3d57]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-e56f3d57],.VPNavBarMenuLink[data-v-e56f3d57]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-dc692963]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-dc692963]{display:flex}}/*! @docsearch/css 3.8.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-1168a8e4]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-1168a8e4]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-1168a8e4]{border-bottom-color:var(--vp-c-divider)}}[data-v-1168a8e4] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-88af2de4]{display:flex;align-items:center}}.title[data-v-88af2de4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-6aa21345]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-6aa21345]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-6aa21345]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-6aa21345]:not(.home){background-color:transparent}.VPNavBar[data-v-6aa21345]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-6aa21345]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-6aa21345]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-6aa21345]{padding:0}}.container[data-v-6aa21345]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-6aa21345],.container>.content[data-v-6aa21345]{pointer-events:none}.container[data-v-6aa21345] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-6aa21345]{max-width:100%}}.title[data-v-6aa21345]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-6aa21345]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-6aa21345]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-6aa21345]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-6aa21345]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-6aa21345]{column-gap:.5rem}}.menu+.translations[data-v-6aa21345]:before,.menu+.appearance[data-v-6aa21345]:before,.menu+.social-links[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before,.appearance+.social-links[data-v-6aa21345]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{margin-right:16px}.appearance+.social-links[data-v-6aa21345]:before{margin-left:16px}.social-links[data-v-6aa21345]{margin-right:-8px}.divider[data-v-6aa21345]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-6aa21345]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-6aa21345]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-b44890b2]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-df37e6dd]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-df37e6dd]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-b9ab8c58]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-b9ab8c58]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-b9ab8c58]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-b9ab8c58]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-b9ab8c58]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-b9ab8c58]{transform:rotate(45deg)}.button[data-v-b9ab8c58]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-b9ab8c58]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-b9ab8c58]{transition:transform .25s}.group[data-v-b9ab8c58]:first-child{padding-top:0}.group+.group[data-v-b9ab8c58],.group+.item[data-v-b9ab8c58]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-f2779853]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-f2779853],.VPNavScreen.fade-leave-active[data-v-f2779853]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-f2779853],.VPNavScreen.fade-leave-active .container[data-v-f2779853]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-f2779853],.VPNavScreen.fade-leave-to[data-v-f2779853]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-f2779853],.VPNavScreen.fade-leave-to .container[data-v-f2779853]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-f2779853]{display:none}}.container[data-v-f2779853]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-f2779853],.menu+.appearance[data-v-f2779853],.translations+.appearance[data-v-f2779853]{margin-top:24px}.menu+.social-links[data-v-f2779853]{margin-top:16px}.appearance+.social-links[data-v-f2779853]{margin-top:16px}.VPNav[data-v-ae24b3ad]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b3fd67f8]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b3fd67f8]{padding-bottom:10px}.item[data-v-b3fd67f8]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b3fd67f8]{cursor:pointer}.indicator[data-v-b3fd67f8]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b3fd67f8]{background-color:var(--vp-c-brand-1)}.link[data-v-b3fd67f8]{display:flex;align-items:center;flex-grow:1}.text[data-v-b3fd67f8]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b3fd67f8]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b3fd67f8],.VPSidebarItem.level-2 .text[data-v-b3fd67f8],.VPSidebarItem.level-3 .text[data-v-b3fd67f8],.VPSidebarItem.level-4 .text[data-v-b3fd67f8],.VPSidebarItem.level-5 .text[data-v-b3fd67f8]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b3fd67f8]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.caret[data-v-b3fd67f8]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-b3fd67f8]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b3fd67f8]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b3fd67f8]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b3fd67f8]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b3fd67f8],.VPSidebarItem.level-2 .items[data-v-b3fd67f8],.VPSidebarItem.level-3 .items[data-v-b3fd67f8],.VPSidebarItem.level-4 .items[data-v-b3fd67f8],.VPSidebarItem.level-5 .items[data-v-b3fd67f8]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b3fd67f8]{display:none}.no-transition[data-v-c40bc020] .caret-icon{transition:none}.group+.group[data-v-c40bc020]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-c40bc020]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-319d5ca6]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-319d5ca6]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-319d5ca6]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-319d5ca6]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-319d5ca6]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-319d5ca6]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-319d5ca6]{outline:0}.VPSkipLink[data-v-0b0ada53]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0b0ada53]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0b0ada53]{top:14px;left:16px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3d121b4a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamMembersItem[data-v-f3fa364a]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f3fa364a]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f3fa364a]{margin:0;font-weight:600}.affiliation[data-v-f3fa364a]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f3fa364a]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:hover,.sp .sp-link.link[data-v-f3fa364a]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f3fa364a]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.v-application{display:flex;background:rgb(var(--v-theme-background));color:rgba(var(--v-theme-on-background),var(--v-high-emphasis-opacity))}.v-application__wrap{backface-visibility:hidden;display:flex;flex-direction:column;flex:1 1 auto;max-width:100%;min-height:100vh;min-height:100dvh;position:relative}.v-app-bar{display:flex}.v-app-bar.v-toolbar{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-app-bar.v-toolbar:not(.v-toolbar--flat){box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-app-bar:not(.v-toolbar--absolute){padding-inline-end:var(--v-scrollbar-offset)}.v-toolbar{align-items:flex-start;display:flex;flex:none;flex-direction:column;justify-content:space-between;max-width:100%;position:relative;transition:.2s cubic-bezier(.4,0,.2,1);transition-property:height,width,transform,max-width,left,right,top,bottom,box-shadow;width:100%}.v-toolbar{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-toolbar--border{border-width:thin;box-shadow:none}.v-toolbar{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-toolbar{border-radius:0}.v-toolbar{background:rgb(var(--v-theme-surface-light));color:rgba(var(--v-theme-on-surface-light),var(--v-high-emphasis-opacity))}.v-toolbar--absolute{position:absolute}.v-toolbar--collapse{max-width:112px;overflow:hidden;border-end-end-radius:24px}.v-toolbar--collapse .v-toolbar-title{display:none}.v-toolbar--flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-toolbar--floating{display:inline-flex}.v-toolbar--rounded{border-radius:4px}.v-toolbar__content,.v-toolbar__extension{align-items:center;display:flex;flex:0 0 auto;position:relative;transition:inherit;width:100%}.v-toolbar__content{overflow:hidden}.v-toolbar__content>.v-btn:first-child{margin-inline-start:4px}.v-toolbar__content>.v-btn:last-child{margin-inline-end:4px}.v-toolbar__content>.v-toolbar-title{margin-inline-start:20px}.v-toolbar--density-prominent .v-toolbar__content{align-items:flex-start}.v-toolbar__image{display:flex;opacity:var(--v-toolbar-image-opacity, 1);transition-property:opacity}.v-toolbar__image{position:absolute;top:0;left:0;width:100%;height:100%}.v-toolbar__prepend,.v-toolbar__append{align-items:center;align-self:stretch;display:flex}.v-toolbar__prepend{margin-inline:4px auto}.v-toolbar__append{margin-inline:auto 4px}.v-toolbar-title{flex:1 1;font-size:1.25rem;min-width:0}.v-toolbar-title{font-size:1.25rem;font-weight:400;letter-spacing:0;line-height:1.75rem;text-transform:none}.v-toolbar--density-prominent .v-toolbar-title{align-self:flex-end;padding-bottom:6px}.v-toolbar--density-prominent .v-toolbar-title{font-size:1.5rem;font-weight:400;letter-spacing:0;line-height:2.25rem;text-transform:none}.v-toolbar-title__placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-toolbar-items{display:flex;height:inherit;align-self:stretch}.v-toolbar-items>.v-btn{border-radius:0}.v-img{--v-theme-overlay-multiplier: 3;z-index:0}.v-img.v-img--absolute{height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:-1}.v-img--booting .v-responsive__sizer{transition:none}.v-img--rounded{border-radius:4px}.v-img__img,.v-img__picture,.v-img__gradient,.v-img__placeholder,.v-img__error{z-index:-1}.v-img__img,.v-img__picture,.v-img__gradient,.v-img__placeholder,.v-img__error{position:absolute;top:0;left:0;width:100%;height:100%}.v-img__img--preload{filter:blur(4px)}.v-img__img--contain{object-fit:contain}.v-img__img--cover{object-fit:cover}.v-img__gradient{background-repeat:no-repeat}.v-responsive{display:flex;flex:1 0 auto;max-height:100%;max-width:100%;overflow:hidden;position:relative}.v-responsive--inline{display:inline-flex;flex:0 0 auto}.v-responsive__content{flex:1 0 0px;max-width:100%}.v-responsive__sizer~.v-responsive__content{margin-inline-start:-100%}.v-responsive__sizer{flex:1 0 0px;transition:padding-bottom .2s cubic-bezier(.4,0,.2,1);pointer-events:none}.v-btn{align-items:center;border-radius:4px;display:inline-grid;grid-template-areas:"prepend content append";grid-template-columns:max-content auto max-content;font-weight:500;justify-content:center;letter-spacing:.0892857143em;line-height:normal;max-width:100%;outline:none;position:relative;text-decoration:none;text-indent:.0892857143em;text-transform:uppercase;transition-property:box-shadow,transform,opacity,background;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-user-select:none;user-select:none;vertical-align:middle;flex-shrink:0}.v-btn--size-x-small{--v-btn-size: .625rem;--v-btn-height: 20px;font-size:var(--v-btn-size);min-width:36px;padding:0 8px}.v-btn--size-small{--v-btn-size: .75rem;--v-btn-height: 28px;font-size:var(--v-btn-size);min-width:50px;padding:0 12px}.v-btn--size-default{--v-btn-size: .875rem;--v-btn-height: 36px;font-size:var(--v-btn-size);min-width:64px;padding:0 16px}.v-btn--size-large{--v-btn-size: 1rem;--v-btn-height: 44px;font-size:var(--v-btn-size);min-width:78px;padding:0 20px}.v-btn--size-x-large{--v-btn-size: 1.125rem;--v-btn-height: 52px;font-size:var(--v-btn-size);min-width:92px;padding:0 24px}.v-btn.v-btn--density-default{height:calc(var(--v-btn-height) + 0px)}.v-btn.v-btn--density-comfortable{height:calc(var(--v-btn-height) + -8px)}.v-btn.v-btn--density-compact{height:calc(var(--v-btn-height) + -12px)}.v-btn{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-btn--border{border-width:thin;box-shadow:none}.v-btn--absolute{position:absolute}.v-btn--fixed{position:fixed}.v-btn:hover>.v-btn__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-btn:focus-visible>.v-btn__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-btn:focus>.v-btn__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-btn--active>.v-btn__overlay,.v-btn[aria-haspopup=menu][aria-expanded=true]>.v-btn__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-btn--active:hover>.v-btn__overlay,.v-btn[aria-haspopup=menu][aria-expanded=true]:hover>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-btn--active:focus-visible>.v-btn__overlay,.v-btn[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-btn--active:focus>.v-btn__overlay,.v-btn[aria-haspopup=menu][aria-expanded=true]:focus>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-btn--variant-plain,.v-btn--variant-outlined,.v-btn--variant-text,.v-btn--variant-tonal{background:transparent;color:inherit}.v-btn--variant-plain{opacity:.62}.v-btn--variant-plain:focus,.v-btn--variant-plain:hover{opacity:1}.v-btn--variant-plain .v-btn__overlay{display:none}.v-btn--variant-elevated,.v-btn--variant-flat{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-btn--variant-elevated{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn--variant-outlined{border:thin solid currentColor}.v-btn--variant-text .v-btn__overlay{background:currentColor}.v-btn--variant-tonal .v-btn__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-btn .v-btn__underlay{position:absolute}@supports selector(:focus-visible){.v-btn:after{pointer-events:none;border:2px solid currentColor;border-radius:inherit;opacity:0;transition:opacity .2s ease-in-out}.v-btn:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-btn:focus-visible:after{opacity:calc(.25 * var(--v-theme-overlay-multiplier))}}.v-btn--icon{border-radius:50%;min-width:0;padding:0}.v-btn--icon.v-btn--size-default{--v-btn-size: 1rem}.v-btn--icon.v-btn--density-default{width:calc(var(--v-btn-height) + 12px);height:calc(var(--v-btn-height) + 12px)}.v-btn--icon.v-btn--density-comfortable{width:calc(var(--v-btn-height) + 0px);height:calc(var(--v-btn-height) + 0px)}.v-btn--icon.v-btn--density-compact{width:calc(var(--v-btn-height) + -8px);height:calc(var(--v-btn-height) + -8px)}.v-btn--elevated:hover,.v-btn--elevated:focus{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn--elevated:active{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn--flat{box-shadow:none}.v-btn--block{display:flex;flex:1 0 auto;min-width:100%}.v-btn--disabled{pointer-events:none;opacity:.26}.v-btn--disabled:hover{opacity:.26}.v-btn--disabled.v-btn--variant-elevated,.v-btn--disabled.v-btn--variant-flat{box-shadow:none;opacity:1;color:rgba(var(--v-theme-on-surface),.26);background:rgb(var(--v-theme-surface))}.v-btn--disabled.v-btn--variant-elevated .v-btn__overlay,.v-btn--disabled.v-btn--variant-flat .v-btn__overlay{opacity:.4615384615}.v-btn--loading{pointer-events:none}.v-btn--loading .v-btn__content,.v-btn--loading .v-btn__prepend,.v-btn--loading .v-btn__append{opacity:0}.v-btn--stacked{grid-template-areas:"prepend" "content" "append";grid-template-columns:auto;grid-template-rows:max-content max-content max-content;justify-items:center;align-content:center}.v-btn--stacked .v-btn__content{flex-direction:column;line-height:1.25}.v-btn--stacked .v-btn__prepend,.v-btn--stacked .v-btn__append,.v-btn--stacked .v-btn__content>.v-icon--start,.v-btn--stacked .v-btn__content>.v-icon--end{margin-inline:0}.v-btn--stacked .v-btn__prepend,.v-btn--stacked .v-btn__content>.v-icon--start{margin-bottom:4px}.v-btn--stacked .v-btn__append,.v-btn--stacked .v-btn__content>.v-icon--end{margin-top:4px}.v-btn--stacked.v-btn--size-x-small{--v-btn-size: .625rem;--v-btn-height: 56px;font-size:var(--v-btn-size);min-width:56px;padding:0 12px}.v-btn--stacked.v-btn--size-small{--v-btn-size: .75rem;--v-btn-height: 64px;font-size:var(--v-btn-size);min-width:64px;padding:0 14px}.v-btn--stacked.v-btn--size-default{--v-btn-size: .875rem;--v-btn-height: 72px;font-size:var(--v-btn-size);min-width:72px;padding:0 16px}.v-btn--stacked.v-btn--size-large{--v-btn-size: 1rem;--v-btn-height: 80px;font-size:var(--v-btn-size);min-width:80px;padding:0 18px}.v-btn--stacked.v-btn--size-x-large{--v-btn-size: 1.125rem;--v-btn-height: 88px;font-size:var(--v-btn-size);min-width:88px;padding:0 20px}.v-btn--stacked.v-btn--density-default{height:calc(var(--v-btn-height) + 0px)}.v-btn--stacked.v-btn--density-comfortable{height:calc(var(--v-btn-height) + -16px)}.v-btn--stacked.v-btn--density-compact{height:calc(var(--v-btn-height) + -24px)}.v-btn--slim{padding:0 8px}.v-btn--readonly{pointer-events:none}.v-btn--rounded{border-radius:24px}.v-btn--rounded.v-btn--icon{border-radius:4px}.v-btn .v-icon{--v-icon-size-multiplier: .8571428571}.v-btn--icon .v-icon{--v-icon-size-multiplier: 1}.v-btn--stacked .v-icon{--v-icon-size-multiplier: 1.1428571429}.v-btn--stacked.v-btn--block{min-width:100%}.v-btn__loader{align-items:center;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.v-btn__loader>.v-progress-circular{width:1.5em;height:1.5em}.v-btn__content,.v-btn__prepend,.v-btn__append{align-items:center;display:flex;transition:transform,opacity .2s cubic-bezier(.4,0,.2,1)}.v-btn__prepend{grid-area:prepend;margin-inline:calc(var(--v-btn-height) / -9) calc(var(--v-btn-height) / 4.5)}.v-btn--slim .v-btn__prepend{margin-inline-start:0}.v-btn__append{grid-area:append;margin-inline:calc(var(--v-btn-height) / 4.5) calc(var(--v-btn-height) / -9)}.v-btn--slim .v-btn__append{margin-inline-end:0}.v-btn__content{grid-area:content;justify-content:center;white-space:nowrap}.v-btn__content>.v-icon--start{margin-inline:calc(var(--v-btn-height) / -9) calc(var(--v-btn-height) / 4.5)}.v-btn__content>.v-icon--end{margin-inline:calc(var(--v-btn-height) / 4.5) calc(var(--v-btn-height) / -9)}.v-btn--stacked .v-btn__content{white-space:normal}.v-btn__overlay{background-color:currentColor;border-radius:inherit;opacity:0;transition:opacity .2s ease-in-out}.v-btn__overlay,.v-btn__underlay{pointer-events:none}.v-btn__overlay,.v-btn__underlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-pagination .v-btn{border-radius:4px}.v-pagination .v-btn--rounded{border-radius:50%}.v-pagination .v-btn__overlay{transition:none}.v-pagination .v-pagination__item--is-active .v-btn__overlay{opacity:var(--v-border-opacity)}.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled)>.v-btn__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled):hover>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled):focus-visible>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled):focus>.v-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-btn-toggle>.v-btn.v-btn--active:not(.v-btn--disabled).v-btn--variant-plain{opacity:1}.v-btn-group{display:inline-flex;flex-wrap:nowrap;max-width:100%;min-width:0;overflow:hidden;vertical-align:middle}.v-btn-group{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-btn-group--border{border-width:thin;box-shadow:none}.v-btn-group{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-btn-group{border-radius:4px}.v-btn-group{background:transparent;color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-btn-group--density-default.v-btn-group{height:48px}.v-btn-group--density-comfortable.v-btn-group{height:40px}.v-btn-group--density-compact.v-btn-group{height:36px}.v-btn-group .v-btn{border-radius:0;border-color:inherit}.v-btn-group .v-btn:not(:last-child){border-inline-end:none}.v-btn-group .v-btn:not(:first-child){border-inline-start:none}.v-btn-group .v-btn:first-child{border-start-start-radius:inherit;border-end-start-radius:inherit}.v-btn-group .v-btn:last-child{border-start-end-radius:inherit;border-end-end-radius:inherit}.v-btn-group--divided .v-btn:not(:last-child){border-inline-end-width:thin;border-inline-end-style:solid;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))}.v-btn-group--tile{border-radius:0}.v-icon{--v-icon-size-multiplier: 1;align-items:center;display:inline-flex;font-feature-settings:"liga";height:1em;justify-content:center;letter-spacing:normal;line-height:1;position:relative;text-indent:0;text-align:center;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1em;min-width:1em}.v-icon--clickable{cursor:pointer}.v-icon--disabled{pointer-events:none;opacity:.38}.v-icon--size-x-small{font-size:calc(var(--v-icon-size-multiplier) * 1em)}.v-icon--size-small{font-size:calc(var(--v-icon-size-multiplier) * 1.25em)}.v-icon--size-default{font-size:calc(var(--v-icon-size-multiplier) * 1.5em)}.v-icon--size-large{font-size:calc(var(--v-icon-size-multiplier) * 1.75em)}.v-icon--size-x-large{font-size:calc(var(--v-icon-size-multiplier) * 2em)}.v-icon__svg{fill:currentColor;width:100%;height:100%}.v-icon--start{margin-inline-end:8px}.v-icon--end{margin-inline-start:8px}.v-progress-circular{align-items:center;display:inline-flex;justify-content:center;position:relative;vertical-align:middle}.v-progress-circular>svg{width:100%;height:100%;margin:auto;position:absolute;top:0;bottom:0;left:0;right:0;z-index:0}.v-progress-circular__content{align-items:center;display:flex;justify-content:center}.v-progress-circular__underlay{color:rgba(var(--v-border-color),var(--v-border-opacity));stroke:currentColor;z-index:1}.v-progress-circular__overlay{stroke:currentColor;transition:all .2s ease-in-out,stroke-width 0s;z-index:2}.v-progress-circular--size-x-small{height:16px;width:16px}.v-progress-circular--size-small{height:24px;width:24px}.v-progress-circular--size-default{height:32px;width:32px}.v-progress-circular--size-large{height:48px;width:48px}.v-progress-circular--size-x-large{height:64px;width:64px}.v-progress-circular--indeterminate>svg{animation:progress-circular-rotate 1.4s linear infinite;transform-origin:center center;transition:all .2s ease-in-out}.v-progress-circular--indeterminate .v-progress-circular__overlay{animation:progress-circular-dash 1.4s ease-in-out infinite,progress-circular-rotate 1.4s linear infinite;stroke-dasharray:25,200;stroke-dashoffset:0;stroke-linecap:round;transform-origin:center center;transform:rotate(-90deg)}.v-progress-circular--disable-shrink>svg{animation-duration:.7s}.v-progress-circular--disable-shrink .v-progress-circular__overlay{animation:none}.v-progress-circular--indeterminate:not(.v-progress-circular--visible)>svg,.v-progress-circular--indeterminate:not(.v-progress-circular--visible) .v-progress-circular__overlay{animation-play-state:paused!important}@keyframes progress-circular-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0px}50%{stroke-dasharray:100,200;stroke-dashoffset:-15px}to{stroke-dasharray:100,200;stroke-dashoffset:-124px}}@keyframes progress-circular-rotate{to{transform:rotate(270deg)}}.v-progress-linear{background:transparent;overflow:hidden;position:relative;transition:.2s cubic-bezier(.4,0,.2,1);width:100%}@media (forced-colors: active){.v-progress-linear{border:thin solid buttontext}}.v-progress-linear__background,.v-progress-linear__buffer{background:currentColor;bottom:0;left:0;opacity:var(--v-border-opacity);position:absolute;top:0;width:100%;transition-property:width,left,right;transition:inherit}@media (forced-colors: active){.v-progress-linear__buffer{background-color:highlight;opacity:.3}}.v-progress-linear__content{align-items:center;display:flex;height:100%;justify-content:center;left:0;pointer-events:none;position:absolute;top:0;width:100%}.v-progress-linear__determinate,.v-progress-linear__indeterminate{background:currentColor}@media (forced-colors: active){.v-progress-linear__determinate,.v-progress-linear__indeterminate{background-color:highlight}}.v-progress-linear__determinate{height:inherit;left:0;position:absolute;transition:inherit;transition-property:width,left,right}.v-progress-linear__indeterminate .long,.v-progress-linear__indeterminate .short{animation-play-state:paused;animation-duration:2.2s;animation-iteration-count:infinite;bottom:0;height:inherit;left:0;position:absolute;right:auto;top:0;width:auto}.v-progress-linear__indeterminate .long{animation-name:indeterminate-ltr}.v-progress-linear__indeterminate .short{animation-name:indeterminate-short-ltr}.v-progress-linear__stream{animation:stream .25s infinite linear;animation-play-state:paused;bottom:0;left:auto;opacity:.3;pointer-events:none;position:absolute;transition:inherit;transition-property:width,left,right}.v-progress-linear--reverse .v-progress-linear__background,.v-progress-linear--reverse .v-progress-linear__determinate,.v-progress-linear--reverse .v-progress-linear__content,.v-progress-linear--reverse .v-progress-linear__indeterminate .long,.v-progress-linear--reverse .v-progress-linear__indeterminate .short{left:auto;right:0}.v-progress-linear--reverse .v-progress-linear__indeterminate .long{animation-name:indeterminate-rtl}.v-progress-linear--reverse .v-progress-linear__indeterminate .short{animation-name:indeterminate-short-rtl}.v-progress-linear--reverse .v-progress-linear__stream{right:auto}.v-progress-linear--absolute,.v-progress-linear--fixed{left:0;z-index:1}.v-progress-linear--absolute{position:absolute}.v-progress-linear--fixed{position:fixed}.v-progress-linear--rounded{border-radius:9999px}.v-progress-linear--rounded.v-progress-linear--rounded-bar .v-progress-linear__determinate,.v-progress-linear--rounded.v-progress-linear--rounded-bar .v-progress-linear__indeterminate{border-radius:inherit}.v-progress-linear--striped .v-progress-linear__determinate{animation:progress-linear-stripes 1s infinite linear;background-image:linear-gradient(135deg,hsla(0,0%,100%,.25) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.25) 0,hsla(0,0%,100%,.25) 75%,transparent 0,transparent);background-repeat:repeat;background-size:var(--v-progress-linear-height)}.v-progress-linear--active .v-progress-linear__indeterminate .long,.v-progress-linear--active .v-progress-linear__indeterminate .short,.v-progress-linear--active .v-progress-linear__stream{animation-play-state:running}.v-progress-linear--rounded-bar .v-progress-linear__determinate,.v-progress-linear--rounded-bar .v-progress-linear__indeterminate,.v-progress-linear--rounded-bar .v-progress-linear__stream+.v-progress-linear__background{border-radius:9999px}.v-progress-linear--rounded-bar .v-progress-linear__determinate{border-start-start-radius:0;border-end-start-radius:0}@keyframes indeterminate-ltr{0%{left:-90%;right:100%}60%{left:-90%;right:100%}to{left:100%;right:-35%}}@keyframes indeterminate-rtl{0%{left:100%;right:-90%}60%{left:100%;right:-90%}to{left:-35%;right:100%}}@keyframes indeterminate-short-ltr{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}@keyframes indeterminate-short-rtl{0%{left:100%;right:-200%}60%{left:-8%;right:107%}to{left:-8%;right:107%}}@keyframes stream{to{transform:translate(var(--v-progress-linear-stream-to))}}@keyframes progress-linear-stripes{0%{background-position-x:var(--v-progress-linear-height)}}.v-ripple__container{color:inherit;border-radius:inherit;position:absolute;width:100%;height:100%;left:0;top:0;overflow:hidden;z-index:0;pointer-events:none;contain:strict}.v-ripple__animation{color:inherit;position:absolute;top:0;left:0;border-radius:50%;background:currentColor;opacity:0;pointer-events:none;overflow:hidden;will-change:transform,opacity}.v-ripple__animation--enter{transition:none;opacity:0}.v-ripple__animation--in{transition:transform .25s cubic-bezier(0,0,.2,1),opacity .1s cubic-bezier(0,0,.2,1);opacity:calc(.25 * var(--v-theme-overlay-multiplier))}.v-ripple__animation--out{transition:opacity .3s cubic-bezier(0,0,.2,1);opacity:0}.v-alert{display:grid;flex:1 1;grid-template-areas:"prepend content append close" ". content . .";grid-template-columns:max-content auto max-content max-content;position:relative;padding:16px;overflow:hidden;--v-border-color: currentColor}.v-alert--absolute{position:absolute}.v-alert--fixed{position:fixed}.v-alert--sticky{position:sticky}.v-alert{border-radius:4px}.v-alert--variant-plain,.v-alert--variant-outlined,.v-alert--variant-text,.v-alert--variant-tonal{background:transparent;color:inherit}.v-alert--variant-plain{opacity:.62}.v-alert--variant-plain:focus,.v-alert--variant-plain:hover{opacity:1}.v-alert--variant-plain .v-alert__overlay{display:none}.v-alert--variant-elevated,.v-alert--variant-flat{background:rgb(var(--v-theme-surface-light));color:rgba(var(--v-theme-on-surface-light),var(--v-high-emphasis-opacity))}.v-alert--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-alert--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-alert--variant-outlined{border:thin solid currentColor}.v-alert--variant-text .v-alert__overlay{background:currentColor}.v-alert--variant-tonal .v-alert__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-alert .v-alert__underlay{position:absolute}.v-alert--prominent{grid-template-areas:"prepend content append close" "prepend content . ."}.v-alert.v-alert--border{--v-border-opacity: .38}.v-alert.v-alert--border.v-alert--border-start{padding-inline-start:24px}.v-alert.v-alert--border.v-alert--border-end{padding-inline-end:24px}.v-alert--variant-plain{transition:.2s opacity cubic-bezier(.4,0,.2,1)}.v-alert--density-default{padding-bottom:16px;padding-top:16px}.v-alert--density-default.v-alert--border-top{padding-top:24px}.v-alert--density-default.v-alert--border-bottom{padding-bottom:24px}.v-alert--density-comfortable{padding-bottom:12px;padding-top:12px}.v-alert--density-comfortable.v-alert--border-top{padding-top:20px}.v-alert--density-comfortable.v-alert--border-bottom{padding-bottom:20px}.v-alert--density-compact{padding-bottom:8px;padding-top:8px}.v-alert--density-compact.v-alert--border-top{padding-top:16px}.v-alert--density-compact.v-alert--border-bottom{padding-bottom:16px}.v-alert__border{border-radius:inherit;bottom:0;left:0;opacity:var(--v-border-opacity);position:absolute;pointer-events:none;right:0;top:0;width:100%}.v-alert__border{border-color:currentColor;border-style:solid;border-width:0}.v-alert__border--border{border-width:8px;box-shadow:none}.v-alert--border-start .v-alert__border{border-inline-start-width:8px}.v-alert--border-end .v-alert__border{border-inline-end-width:8px}.v-alert--border-top .v-alert__border{border-top-width:8px}.v-alert--border-bottom .v-alert__border{border-bottom-width:8px}.v-alert__close{flex:0 1 auto;grid-area:close}.v-alert__content{align-self:center;grid-area:content;overflow:hidden}.v-alert__append,.v-alert__close{align-self:flex-start;margin-inline-start:16px}.v-alert__append{align-self:flex-start;grid-area:append}.v-alert__append+.v-alert__close{margin-inline-start:16px}.v-alert__prepend{align-self:flex-start;display:flex;align-items:center;grid-area:prepend;margin-inline-end:16px}.v-alert--prominent .v-alert__prepend{align-self:center}.v-alert__underlay{grid-area:none;position:absolute}.v-alert--border-start .v-alert__underlay{border-top-left-radius:0;border-bottom-left-radius:0}.v-alert--border-end .v-alert__underlay{border-top-right-radius:0;border-bottom-right-radius:0}.v-alert--border-top .v-alert__underlay{border-top-left-radius:0;border-top-right-radius:0}.v-alert--border-bottom .v-alert__underlay{border-bottom-left-radius:0;border-bottom-right-radius:0}.v-alert-title{align-items:center;align-self:center;display:flex;font-size:1.25rem;font-weight:500;-webkit-hyphens:auto;hyphens:auto;letter-spacing:.0125em;line-height:1.75rem;overflow-wrap:normal;text-transform:none;word-break:normal;word-wrap:break-word}.v-autocomplete .v-field .v-text-field__prefix,.v-autocomplete .v-field .v-text-field__suffix,.v-autocomplete .v-field .v-field__input,.v-autocomplete .v-field.v-field{cursor:text}.v-autocomplete .v-field .v-field__input>input{flex:1 1}.v-autocomplete .v-field input{min-width:64px}.v-autocomplete .v-field:not(.v-field--focused) input{min-width:0}.v-autocomplete .v-field--dirty .v-autocomplete__selection{margin-inline-end:2px}.v-autocomplete .v-autocomplete__selection-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-autocomplete__content{overflow:hidden}.v-autocomplete__content{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-autocomplete__content{border-radius:4px}.v-autocomplete__mask{background:rgb(var(--v-theme-surface-light))}.v-autocomplete__selection{display:inline-flex;align-items:center;height:1.5rem;letter-spacing:inherit;line-height:inherit;max-width:calc(100% - 4px)}.v-autocomplete__selection:first-child{margin-inline-start:0}.v-autocomplete--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-autocomplete--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-autocomplete--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-autocomplete--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-autocomplete--selecting-index .v-autocomplete__selection{opacity:var(--v-medium-emphasis-opacity)}.v-autocomplete--selecting-index .v-autocomplete__selection--selected{opacity:1}.v-autocomplete--selecting-index .v-field__input>input{caret-color:transparent}.v-autocomplete--single:not(.v-autocomplete--selection-slot).v-text-field input{flex:1 1;position:absolute;left:0;right:0;width:100%;padding-inline:inherit}.v-autocomplete--single:not(.v-autocomplete--selection-slot) .v-field--active input{transition:none}.v-autocomplete--single:not(.v-autocomplete--selection-slot) .v-field--dirty:not(.v-field--focused) input{opacity:0}.v-autocomplete--single:not(.v-autocomplete--selection-slot) .v-field--focused .v-autocomplete__selection{opacity:0}.v-autocomplete__menu-icon{margin-inline-start:4px;transition:.2s cubic-bezier(.4,0,.2,1)}.v-autocomplete--active-menu .v-autocomplete__menu-icon{opacity:var(--v-high-emphasis-opacity);transform:rotate(180deg)}.v-avatar{flex:none;align-items:center;display:inline-flex;justify-content:center;line-height:normal;overflow:hidden;position:relative;text-align:center;transition:.2s cubic-bezier(.4,0,.2,1);transition-property:width,height;vertical-align:middle}.v-avatar.v-avatar--size-x-small{--v-avatar-height: 24px}.v-avatar.v-avatar--size-small{--v-avatar-height: 32px}.v-avatar.v-avatar--size-default{--v-avatar-height: 40px}.v-avatar.v-avatar--size-large{--v-avatar-height: 48px}.v-avatar.v-avatar--size-x-large{--v-avatar-height: 56px}.v-avatar.v-avatar--density-default{height:calc(var(--v-avatar-height) + 0px);width:calc(var(--v-avatar-height) + 0px)}.v-avatar.v-avatar--density-comfortable{height:calc(var(--v-avatar-height) + -4px);width:calc(var(--v-avatar-height) + -4px)}.v-avatar.v-avatar--density-compact{height:calc(var(--v-avatar-height) + -8px);width:calc(var(--v-avatar-height) + -8px)}.v-avatar{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-avatar--border{border-width:thin;box-shadow:none}.v-avatar{border-radius:50%}.v-avatar--variant-plain,.v-avatar--variant-outlined,.v-avatar--variant-text,.v-avatar--variant-tonal{background:transparent;color:inherit}.v-avatar--variant-plain{opacity:.62}.v-avatar--variant-plain:focus,.v-avatar--variant-plain:hover{opacity:1}.v-avatar--variant-plain .v-avatar__overlay{display:none}.v-avatar--variant-elevated,.v-avatar--variant-flat{background:var(--v-theme-surface);color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity))}.v-avatar--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-avatar--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-avatar--variant-outlined{border:thin solid currentColor}.v-avatar--variant-text .v-avatar__overlay{background:currentColor}.v-avatar--variant-tonal .v-avatar__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-avatar .v-avatar__underlay{position:absolute}.v-avatar--rounded{border-radius:4px}.v-avatar--start{margin-inline-end:8px}.v-avatar--end{margin-inline-start:8px}.v-avatar .v-img{height:100%;width:100%}.v-checkbox.v-input{flex:0 1 auto}.v-checkbox .v-selection-control{min-height:var(--v-input-control-height)}.v-selection-control{align-items:center;contain:layout;display:flex;flex:1 0;grid-area:control;position:relative;-webkit-user-select:none;user-select:none}.v-selection-control .v-label{white-space:normal;word-break:break-word;height:100%}.v-selection-control--disabled{opacity:var(--v-disabled-opacity);pointer-events:none}.v-selection-control--error .v-label,.v-selection-control--disabled .v-label{opacity:1}.v-selection-control--error:not(.v-selection-control--disabled) .v-label{color:rgb(var(--v-theme-error))}.v-selection-control--inline{display:inline-flex;flex:0 0 auto;min-width:0;max-width:100%}.v-selection-control--inline .v-label{width:auto}.v-selection-control--density-default{--v-selection-control-size: 40px}.v-selection-control--density-comfortable{--v-selection-control-size: 36px}.v-selection-control--density-compact{--v-selection-control-size: 28px}.v-selection-control__wrapper{width:var(--v-selection-control-size);height:var(--v-selection-control-size);display:inline-flex;align-items:center;position:relative;justify-content:center;flex:none}.v-selection-control__input{width:var(--v-selection-control-size);height:var(--v-selection-control-size);align-items:center;display:flex;flex:none;justify-content:center;position:relative;border-radius:50%}.v-selection-control__input input{cursor:pointer;position:absolute;left:0;top:0;width:100%;height:100%;opacity:0}.v-selection-control__input:before{border-radius:100%;background-color:currentColor;opacity:0;pointer-events:none}.v-selection-control__input:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-selection-control__input:hover:before{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-selection-control__input>.v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-selection-control--disabled .v-selection-control__input>.v-icon,.v-selection-control--dirty .v-selection-control__input>.v-icon,.v-selection-control--error .v-selection-control__input>.v-icon{opacity:1}.v-selection-control--error:not(.v-selection-control--disabled) .v-selection-control__input>.v-icon{color:rgb(var(--v-theme-error))}.v-selection-control--focus-visible .v-selection-control__input:before{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}.v-label{align-items:center;color:inherit;display:inline-flex;font-size:1rem;letter-spacing:.009375em;min-width:0;opacity:var(--v-medium-emphasis-opacity);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-label--clickable{cursor:pointer}.v-selection-control-group{grid-area:control;display:flex;flex-direction:column}.v-selection-control-group--inline{flex-direction:row;flex-wrap:wrap}.v-input{display:grid;flex:1 1 auto;font-size:1rem;font-weight:400;line-height:1.5}.v-input--disabled{pointer-events:none}.v-input--density-default{--v-input-control-height: 56px;--v-input-padding-top: 16px}.v-input--density-comfortable{--v-input-control-height: 48px;--v-input-padding-top: 12px}.v-input--density-compact{--v-input-control-height: 40px;--v-input-padding-top: 8px}.v-input--vertical{grid-template-areas:"append" "control" "prepend";grid-template-rows:max-content auto max-content;grid-template-columns:min-content}.v-input--vertical .v-input__prepend{margin-block-start:16px}.v-input--vertical .v-input__append{margin-block-end:16px}.v-input--horizontal{grid-template-areas:"prepend control append" "a messages b";grid-template-columns:max-content minmax(0,1fr) max-content;grid-template-rows:auto auto}.v-input--horizontal .v-input__prepend{margin-inline-end:16px}.v-input--horizontal .v-input__append{margin-inline-start:16px}.v-input__details{align-items:flex-end;display:flex;font-size:.75rem;font-weight:400;grid-area:messages;letter-spacing:.0333333333em;line-height:normal;min-height:22px;padding-top:6px;overflow:hidden;justify-content:space-between}.v-input__details>.v-icon,.v-input__prepend>.v-icon,.v-input__append>.v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-input--disabled .v-input__details>.v-icon,.v-input--disabled .v-input__details .v-messages,.v-input--error .v-input__details>.v-icon,.v-input--error .v-input__details .v-messages,.v-input--disabled .v-input__prepend>.v-icon,.v-input--disabled .v-input__prepend .v-messages,.v-input--error .v-input__prepend>.v-icon,.v-input--error .v-input__prepend .v-messages,.v-input--disabled .v-input__append>.v-icon,.v-input--disabled .v-input__append .v-messages,.v-input--error .v-input__append>.v-icon,.v-input--error .v-input__append .v-messages{opacity:1}.v-input--disabled .v-input__details,.v-input--disabled .v-input__prepend,.v-input--disabled .v-input__append{opacity:var(--v-disabled-opacity)}.v-input--error:not(.v-input--disabled) .v-input__details>.v-icon,.v-input--error:not(.v-input--disabled) .v-input__details .v-messages,.v-input--error:not(.v-input--disabled) .v-input__prepend>.v-icon,.v-input--error:not(.v-input--disabled) .v-input__prepend .v-messages,.v-input--error:not(.v-input--disabled) .v-input__append>.v-icon,.v-input--error:not(.v-input--disabled) .v-input__append .v-messages{color:rgb(var(--v-theme-error))}.v-input__prepend,.v-input__append{display:flex;align-items:flex-start;padding-top:var(--v-input-padding-top)}.v-input--center-affix .v-input__prepend,.v-input--center-affix .v-input__append{align-items:center;padding-top:0}.v-input__prepend{grid-area:prepend}.v-input__append{grid-area:append}.v-input__control{display:flex;grid-area:control}.v-input--hide-spin-buttons input::-webkit-outer-spin-button,.v-input--hide-spin-buttons input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.v-input--hide-spin-buttons input[type=number]{-moz-appearance:textfield}.v-input--plain-underlined .v-input__prepend,.v-input--plain-underlined .v-input__append{align-items:flex-start}.v-input--density-default.v-input--plain-underlined .v-input__prepend,.v-input--density-default.v-input--plain-underlined .v-input__append{padding-top:calc(var(--v-input-padding-top) + 4px)}.v-input--density-comfortable.v-input--plain-underlined .v-input__prepend,.v-input--density-comfortable.v-input--plain-underlined .v-input__append{padding-top:calc(var(--v-input-padding-top) + 2px)}.v-input--density-compact.v-input--plain-underlined .v-input__prepend,.v-input--density-compact.v-input--plain-underlined .v-input__append{padding-top:calc(var(--v-input-padding-top) + 0px)}.v-messages{flex:1 1 auto;font-size:12px;min-height:14px;min-width:1px;opacity:var(--v-medium-emphasis-opacity);position:relative}.v-messages__message{line-height:12px;word-break:break-word;overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;transition-duration:.15s}.v-chip{align-items:center;display:inline-flex;font-weight:400;max-width:100%;min-width:0;overflow:hidden;position:relative;text-decoration:none;white-space:nowrap;vertical-align:middle}.v-chip .v-icon{--v-icon-size-multiplier: .8571428571}.v-chip.v-chip--size-x-small{--v-chip-size: .625rem;--v-chip-height: 20px;font-size:.625rem;padding:0 8px}.v-chip.v-chip--size-x-small .v-avatar{--v-avatar-height: 14px}.v-chip--pill.v-chip.v-chip--size-x-small .v-avatar{--v-avatar-height: 20px}.v-chip.v-chip--size-x-small .v-avatar--start{margin-inline-start:-5.6px;margin-inline-end:4px}.v-chip--pill.v-chip.v-chip--size-x-small .v-avatar--start{margin-inline-start:-8px}.v-chip.v-chip--size-x-small .v-avatar--end{margin-inline-start:4px;margin-inline-end:-5.6px}.v-chip--pill.v-chip.v-chip--size-x-small .v-avatar--end{margin-inline-end:-8px}.v-chip--pill.v-chip.v-chip--size-x-small .v-avatar--end+.v-chip__close{margin-inline-start:12px}.v-chip.v-chip--size-x-small .v-icon--start,.v-chip.v-chip--size-x-small .v-chip__filter{margin-inline-start:-4px;margin-inline-end:4px}.v-chip.v-chip--size-x-small .v-icon--end,.v-chip.v-chip--size-x-small .v-chip__close{margin-inline-start:4px;margin-inline-end:-4px}.v-chip.v-chip--size-x-small .v-icon--end+.v-chip__close,.v-chip.v-chip--size-x-small .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-x-small .v-chip__append+.v-chip__close{margin-inline-start:8px}.v-chip.v-chip--size-small{--v-chip-size: .75rem;--v-chip-height: 26px;font-size:.75rem;padding:0 10px}.v-chip.v-chip--size-small .v-avatar{--v-avatar-height: 20px}.v-chip--pill.v-chip.v-chip--size-small .v-avatar{--v-avatar-height: 26px}.v-chip.v-chip--size-small .v-avatar--start{margin-inline-start:-7px;margin-inline-end:5px}.v-chip--pill.v-chip.v-chip--size-small .v-avatar--start{margin-inline-start:-10px}.v-chip.v-chip--size-small .v-avatar--end{margin-inline-start:5px;margin-inline-end:-7px}.v-chip--pill.v-chip.v-chip--size-small .v-avatar--end{margin-inline-end:-10px}.v-chip--pill.v-chip.v-chip--size-small .v-avatar--end+.v-chip__close{margin-inline-start:15px}.v-chip.v-chip--size-small .v-icon--start,.v-chip.v-chip--size-small .v-chip__filter{margin-inline-start:-5px;margin-inline-end:5px}.v-chip.v-chip--size-small .v-icon--end,.v-chip.v-chip--size-small .v-chip__close{margin-inline-start:5px;margin-inline-end:-5px}.v-chip.v-chip--size-small .v-icon--end+.v-chip__close,.v-chip.v-chip--size-small .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-small .v-chip__append+.v-chip__close{margin-inline-start:10px}.v-chip.v-chip--size-default{--v-chip-size: .875rem;--v-chip-height: 32px;font-size:.875rem;padding:0 12px}.v-chip.v-chip--size-default .v-avatar{--v-avatar-height: 26px}.v-chip--pill.v-chip.v-chip--size-default .v-avatar{--v-avatar-height: 32px}.v-chip.v-chip--size-default .v-avatar--start{margin-inline-start:-8.4px;margin-inline-end:6px}.v-chip--pill.v-chip.v-chip--size-default .v-avatar--start{margin-inline-start:-12px}.v-chip.v-chip--size-default .v-avatar--end{margin-inline-start:6px;margin-inline-end:-8.4px}.v-chip--pill.v-chip.v-chip--size-default .v-avatar--end{margin-inline-end:-12px}.v-chip--pill.v-chip.v-chip--size-default .v-avatar--end+.v-chip__close{margin-inline-start:18px}.v-chip.v-chip--size-default .v-icon--start,.v-chip.v-chip--size-default .v-chip__filter{margin-inline-start:-6px;margin-inline-end:6px}.v-chip.v-chip--size-default .v-icon--end,.v-chip.v-chip--size-default .v-chip__close{margin-inline-start:6px;margin-inline-end:-6px}.v-chip.v-chip--size-default .v-icon--end+.v-chip__close,.v-chip.v-chip--size-default .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-default .v-chip__append+.v-chip__close{margin-inline-start:12px}.v-chip.v-chip--size-large{--v-chip-size: 1rem;--v-chip-height: 38px;font-size:1rem;padding:0 14px}.v-chip.v-chip--size-large .v-avatar{--v-avatar-height: 32px}.v-chip--pill.v-chip.v-chip--size-large .v-avatar{--v-avatar-height: 38px}.v-chip.v-chip--size-large .v-avatar--start{margin-inline-start:-9.8px;margin-inline-end:7px}.v-chip--pill.v-chip.v-chip--size-large .v-avatar--start{margin-inline-start:-14px}.v-chip.v-chip--size-large .v-avatar--end{margin-inline-start:7px;margin-inline-end:-9.8px}.v-chip--pill.v-chip.v-chip--size-large .v-avatar--end{margin-inline-end:-14px}.v-chip--pill.v-chip.v-chip--size-large .v-avatar--end+.v-chip__close{margin-inline-start:21px}.v-chip.v-chip--size-large .v-icon--start,.v-chip.v-chip--size-large .v-chip__filter{margin-inline-start:-7px;margin-inline-end:7px}.v-chip.v-chip--size-large .v-icon--end,.v-chip.v-chip--size-large .v-chip__close{margin-inline-start:7px;margin-inline-end:-7px}.v-chip.v-chip--size-large .v-icon--end+.v-chip__close,.v-chip.v-chip--size-large .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-large .v-chip__append+.v-chip__close{margin-inline-start:14px}.v-chip.v-chip--size-x-large{--v-chip-size: 1.125rem;--v-chip-height: 44px;font-size:1.125rem;padding:0 17px}.v-chip.v-chip--size-x-large .v-avatar{--v-avatar-height: 38px}.v-chip--pill.v-chip.v-chip--size-x-large .v-avatar{--v-avatar-height: 44px}.v-chip.v-chip--size-x-large .v-avatar--start{margin-inline-start:-11.9px;margin-inline-end:8.5px}.v-chip--pill.v-chip.v-chip--size-x-large .v-avatar--start{margin-inline-start:-17px}.v-chip.v-chip--size-x-large .v-avatar--end{margin-inline-start:8.5px;margin-inline-end:-11.9px}.v-chip--pill.v-chip.v-chip--size-x-large .v-avatar--end{margin-inline-end:-17px}.v-chip--pill.v-chip.v-chip--size-x-large .v-avatar--end+.v-chip__close{margin-inline-start:25.5px}.v-chip.v-chip--size-x-large .v-icon--start,.v-chip.v-chip--size-x-large .v-chip__filter{margin-inline-start:-8.5px;margin-inline-end:8.5px}.v-chip.v-chip--size-x-large .v-icon--end,.v-chip.v-chip--size-x-large .v-chip__close{margin-inline-start:8.5px;margin-inline-end:-8.5px}.v-chip.v-chip--size-x-large .v-icon--end+.v-chip__close,.v-chip.v-chip--size-x-large .v-avatar--end+.v-chip__close,.v-chip.v-chip--size-x-large .v-chip__append+.v-chip__close{margin-inline-start:17px}.v-chip.v-chip--density-default{height:calc(var(--v-chip-height) + 0px)}.v-chip.v-chip--density-comfortable{height:calc(var(--v-chip-height) + -4px)}.v-chip.v-chip--density-compact{height:calc(var(--v-chip-height) + -8px)}.v-chip{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-chip:hover>.v-chip__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-chip:focus-visible>.v-chip__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-chip:focus>.v-chip__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-chip--active>.v-chip__overlay,.v-chip[aria-haspopup=menu][aria-expanded=true]>.v-chip__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-chip--active:hover>.v-chip__overlay,.v-chip[aria-haspopup=menu][aria-expanded=true]:hover>.v-chip__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-chip--active:focus-visible>.v-chip__overlay,.v-chip[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-chip__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-chip--active:focus>.v-chip__overlay,.v-chip[aria-haspopup=menu][aria-expanded=true]:focus>.v-chip__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-chip{border-radius:9999px}.v-chip--variant-plain,.v-chip--variant-outlined,.v-chip--variant-text,.v-chip--variant-tonal{background:transparent;color:inherit}.v-chip--variant-plain{opacity:.26}.v-chip--variant-plain:focus,.v-chip--variant-plain:hover{opacity:1}.v-chip--variant-plain .v-chip__overlay{display:none}.v-chip--variant-elevated,.v-chip--variant-flat{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-chip--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-chip--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-chip--variant-outlined{border:thin solid currentColor}.v-chip--variant-text .v-chip__overlay{background:currentColor}.v-chip--variant-tonal .v-chip__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-chip .v-chip__underlay{position:absolute}.v-chip--border{border-width:thin}.v-chip--link{cursor:pointer}.v-chip--link,.v-chip--filter{-webkit-user-select:none;user-select:none}.v-chip__content{align-items:center;display:inline-flex}.v-autocomplete__selection .v-chip__content,.v-combobox__selection .v-chip__content,.v-select__selection .v-chip__content{overflow:hidden}.v-chip__filter,.v-chip__prepend,.v-chip__append,.v-chip__close{align-items:center;display:inline-flex}.v-chip__close{cursor:pointer;flex:0 1 auto;font-size:18px;max-height:18px;max-width:18px;-webkit-user-select:none;user-select:none}.v-chip__close .v-icon{font-size:inherit}.v-chip__filter{transition:.15s cubic-bezier(.4,0,.2,1)}.v-chip__overlay{background-color:currentColor;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .2s ease-in-out}.v-chip__overlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-chip--disabled{opacity:.3;pointer-events:none;-webkit-user-select:none;user-select:none}.v-chip--label{border-radius:4px}.v-chip-group{display:flex;max-width:100%;min-width:0;overflow-x:auto;padding:4px 0}.v-chip-group .v-chip{margin:4px 8px 4px 0}.v-chip-group .v-chip.v-chip--selected:not(.v-chip--disabled) .v-chip__overlay{opacity:var(--v-activated-opacity)}.v-chip-group--column .v-slide-group__content{white-space:normal;flex-wrap:wrap;max-width:100%}.v-slide-group{display:flex;overflow:hidden}.v-slide-group__next,.v-slide-group__prev{align-items:center;display:flex;flex:0 1 52px;justify-content:center;min-width:52px;cursor:pointer}.v-slide-group__next--disabled,.v-slide-group__prev--disabled{pointer-events:none;opacity:var(--v-disabled-opacity)}.v-slide-group__content{display:flex;flex:1 0 auto;position:relative;transition:.2s all cubic-bezier(.4,0,.2,1);white-space:nowrap}.v-slide-group__content>*{white-space:initial}.v-slide-group__container{contain:content;display:flex;flex:1 1 auto;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;scrollbar-color:rgba(0,0,0,0)}.v-slide-group__container::-webkit-scrollbar{display:none}.v-slide-group--vertical{max-height:inherit}.v-slide-group--vertical,.v-slide-group--vertical .v-slide-group__container,.v-slide-group--vertical .v-slide-group__content{flex-direction:column}.v-slide-group--vertical .v-slide-group__container{overflow-x:hidden;overflow-y:auto}.v-list{overflow:auto;padding:8px 0;position:relative;outline:none}.v-list{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-list--border{border-width:thin;box-shadow:none}.v-list{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-list{border-radius:0}.v-list{background:rgba(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-list--disabled{pointer-events:none;-webkit-user-select:none;user-select:none}.v-list--nav{padding-inline:8px}.v-list--rounded{border-radius:4px}.v-list--subheader{padding-top:0}.v-list-img{border-radius:inherit;display:flex;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:-1}.v-list-subheader{align-items:center;background:inherit;color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity));display:flex;font-size:.875rem;font-weight:400;line-height:1.375rem;padding-inline-end:16px;min-height:40px;transition:.2s min-height cubic-bezier(.4,0,.2,1)}.v-list-subheader__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-list--density-default .v-list-subheader{min-height:40px;padding-inline-start:calc(16px + var(--indent-padding))!important}.v-list--density-comfortable .v-list-subheader{min-height:36px;padding-inline-start:calc(16px + var(--indent-padding))!important}.v-list--density-compact .v-list-subheader{min-height:32px;padding-inline-start:calc(16px + var(--indent-padding))!important}.v-list-subheader--inset{--indent-padding: 56px}.v-list--nav .v-list-subheader{font-size:.75rem}.v-list-subheader--sticky{background:inherit;left:0;position:sticky;top:0;z-index:1}.v-list__overlay{background-color:currentColor;border-radius:inherit;bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .2s ease-in-out}.v-list-item{align-items:center;display:grid;flex:none;grid-template-areas:"prepend content append";grid-template-columns:max-content 1fr auto;outline:none;max-width:100%;padding:4px 16px;position:relative;text-decoration:none}.v-list-item{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-list-item--border{border-width:thin;box-shadow:none}.v-list-item:hover>.v-list-item__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-list-item:focus-visible>.v-list-item__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-list-item:focus>.v-list-item__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-list-item--active>.v-list-item__overlay,.v-list-item[aria-haspopup=menu][aria-expanded=true]>.v-list-item__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-list-item--active:hover>.v-list-item__overlay,.v-list-item[aria-haspopup=menu][aria-expanded=true]:hover>.v-list-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-list-item--active:focus-visible>.v-list-item__overlay,.v-list-item[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-list-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-list-item--active:focus>.v-list-item__overlay,.v-list-item[aria-haspopup=menu][aria-expanded=true]:focus>.v-list-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-list-item{border-radius:0}.v-list-item--variant-plain,.v-list-item--variant-outlined,.v-list-item--variant-text,.v-list-item--variant-tonal{background:transparent;color:inherit}.v-list-item--variant-plain{opacity:.62}.v-list-item--variant-plain:focus,.v-list-item--variant-plain:hover{opacity:1}.v-list-item--variant-plain .v-list-item__overlay{display:none}.v-list-item--variant-elevated,.v-list-item--variant-flat{background:rgba(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-list-item--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-list-item--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-list-item--variant-outlined{border:thin solid currentColor}.v-list-item--variant-text .v-list-item__overlay{background:currentColor}.v-list-item--variant-tonal .v-list-item__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-list-item .v-list-item__underlay{position:absolute}@supports selector(:focus-visible){.v-list-item:after{pointer-events:none;border:2px solid currentColor;border-radius:4px;opacity:0;transition:opacity .2s ease-in-out}.v-list-item:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-list-item:focus-visible:after{opacity:calc(.15 * var(--v-theme-overlay-multiplier))}}.v-list-item__prepend>.v-badge .v-icon,.v-list-item__prepend>.v-icon,.v-list-item__append>.v-badge .v-icon,.v-list-item__append>.v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-list-item--active .v-list-item__prepend>.v-badge .v-icon,.v-list-item--active .v-list-item__prepend>.v-icon,.v-list-item--active .v-list-item__append>.v-badge .v-icon,.v-list-item--active .v-list-item__append>.v-icon{opacity:1}.v-list-item--active:not(.v-list-item--link) .v-list-item__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-list-item--rounded{border-radius:4px}.v-list-item--disabled{pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.6}.v-list-item--link{cursor:pointer}.v-navigation-drawer--rail:not(.v-navigation-drawer--expand-on-hover) .v-list-item .v-avatar,.v-navigation-drawer--rail.v-navigation-drawer--expand-on-hover:not(.v-navigation-drawer--is-hovering) .v-list-item .v-avatar{--v-avatar-height: 24px}.v-list-item__prepend{align-items:center;align-self:center;display:flex;grid-area:prepend}.v-list-item__prepend>.v-badge~.v-list-item__spacer,.v-list-item__prepend>.v-icon~.v-list-item__spacer,.v-list-item__prepend>.v-tooltip~.v-list-item__spacer{width:32px}.v-list-item__prepend>.v-avatar~.v-list-item__spacer,.v-list-item__prepend>.v-badge:is(:has(.v-avatar))~.v-list-item__spacer{width:16px}.v-list-item--slim .v-list-item__prepend>.v-badge~.v-list-item__spacer,.v-list-item--slim .v-list-item__prepend>.v-icon~.v-list-item__spacer,.v-list-item--slim .v-list-item__prepend>.v-tooltip~.v-list-item__spacer{width:20px}.v-list-item--slim .v-list-item__prepend>.v-avatar~.v-list-item__spacer,.v-list-item--slim .v-list-item__prepend>.v-badge:is(:has(.v-avatar))~.v-list-item__spacer{width:4px}.v-list-item--slim .v-list-item__prepend>.v-list-item-action~.v-list-item__spacer{width:4px}.v-list-item--three-line .v-list-item__prepend{align-self:start}.v-list-item__append{align-self:center;display:flex;align-items:center;grid-area:append}.v-list-item__append .v-list-item__spacer{order:-1;transition:.15s width cubic-bezier(.4,0,.2,1)}.v-list-item__append>.v-badge~.v-list-item__spacer,.v-list-item__append>.v-icon~.v-list-item__spacer,.v-list-item__append>.v-tooltip~.v-list-item__spacer{width:32px}.v-list-item__append>.v-avatar~.v-list-item__spacer,.v-list-item__append>.v-badge:is(:has(.v-avatar))~.v-list-item__spacer{width:16px}.v-list-item__append>.v-list-item-action~.v-list-item__spacer{width:16px}.v-list-item--slim .v-list-item__append>.v-badge~.v-list-item__spacer,.v-list-item--slim .v-list-item__append>.v-icon~.v-list-item__spacer,.v-list-item--slim .v-list-item__append>.v-tooltip~.v-list-item__spacer{width:20px}.v-list-item--slim .v-list-item__append>.v-avatar~.v-list-item__spacer,.v-list-item--slim .v-list-item__append>.v-badge:is(:has(.v-avatar))~.v-list-item__spacer{width:4px}.v-list-item--slim .v-list-item__append>.v-list-item-action~.v-list-item__spacer{width:4px}.v-list-item--three-line .v-list-item__append{align-self:start}.v-list-item__content{align-self:center;grid-area:content;overflow:hidden}.v-list-item-action{align-self:center;display:flex;align-items:center;flex:none;transition:inherit;transition-property:height,width}.v-list-item-action--start{margin-inline-end:8px;margin-inline-start:-8px}.v-list-item-action--end{margin-inline-start:8px;margin-inline-end:-8px}.v-list-item-media{margin-top:0;margin-bottom:0}.v-list-item-media--start{margin-inline-end:16px}.v-list-item-media--end{margin-inline-start:16px}.v-list-item--two-line .v-list-item-media{margin-top:-4px;margin-bottom:-4px}.v-list-item--three-line .v-list-item-media{margin-top:0;margin-bottom:0}.v-list-item-subtitle{-webkit-box-orient:vertical;display:-webkit-box;opacity:var(--v-list-item-subtitle-opacity, var(--v-medium-emphasis-opacity));overflow:hidden;padding:0;text-overflow:ellipsis;overflow-wrap:break-word;word-break:initial}.v-list-item--one-line .v-list-item-subtitle{-webkit-line-clamp:1}.v-list-item--two-line .v-list-item-subtitle{-webkit-line-clamp:2}.v-list-item--three-line .v-list-item-subtitle{-webkit-line-clamp:3}.v-list-item-subtitle{font-size:.875rem;font-weight:400;letter-spacing:.0178571429em;line-height:1rem;text-transform:none}.v-list-item--nav .v-list-item-subtitle{font-size:.75rem;font-weight:400;letter-spacing:.0178571429em;line-height:1rem}.v-list-item-title{-webkit-hyphens:auto;hyphens:auto;overflow-wrap:normal;overflow:hidden;padding:0;white-space:nowrap;text-overflow:ellipsis;word-break:normal;word-wrap:break-word}.v-list-item-title{font-size:1rem;font-weight:400;letter-spacing:.009375em;line-height:1.5;text-transform:none}.v-list-item--nav .v-list-item-title{font-size:.8125rem;font-weight:500;letter-spacing:normal;line-height:1rem}.v-list-item--density-default{min-height:40px}.v-list-item--density-default.v-list-item--one-line{min-height:48px;padding-top:4px;padding-bottom:4px}.v-list-item--density-default.v-list-item--two-line{min-height:64px;padding-top:12px;padding-bottom:12px}.v-list-item--density-default.v-list-item--three-line{min-height:88px;padding-top:16px;padding-bottom:16px}.v-list-item--density-default.v-list-item--three-line .v-list-item__prepend,.v-list-item--density-default.v-list-item--three-line .v-list-item__append{padding-top:8px}.v-list-item--density-default:not(.v-list-item--nav).v-list-item--one-line{padding-inline:16px}.v-list-item--density-default:not(.v-list-item--nav).v-list-item--two-line{padding-inline:16px}.v-list-item--density-default:not(.v-list-item--nav).v-list-item--three-line{padding-inline:16px}.v-list-item--density-comfortable{min-height:36px}.v-list-item--density-comfortable.v-list-item--one-line{min-height:44px}.v-list-item--density-comfortable.v-list-item--two-line{min-height:60px;padding-top:8px;padding-bottom:8px}.v-list-item--density-comfortable.v-list-item--three-line{min-height:84px;padding-top:12px;padding-bottom:12px}.v-list-item--density-comfortable.v-list-item--three-line .v-list-item__prepend,.v-list-item--density-comfortable.v-list-item--three-line .v-list-item__append{padding-top:6px}.v-list-item--density-comfortable:not(.v-list-item--nav).v-list-item--one-line{padding-inline:16px}.v-list-item--density-comfortable:not(.v-list-item--nav).v-list-item--two-line{padding-inline:16px}.v-list-item--density-comfortable:not(.v-list-item--nav).v-list-item--three-line{padding-inline:16px}.v-list-item--density-compact{min-height:32px}.v-list-item--density-compact.v-list-item--one-line{min-height:40px}.v-list-item--density-compact.v-list-item--two-line{min-height:56px;padding-top:4px;padding-bottom:4px}.v-list-item--density-compact.v-list-item--three-line{min-height:80px;padding-top:8px;padding-bottom:8px}.v-list-item--density-compact.v-list-item--three-line .v-list-item__prepend,.v-list-item--density-compact.v-list-item--three-line .v-list-item__append{padding-top:4px}.v-list-item--density-compact:not(.v-list-item--nav).v-list-item--one-line{padding-inline:16px}.v-list-item--density-compact:not(.v-list-item--nav).v-list-item--two-line{padding-inline:16px}.v-list-item--density-compact:not(.v-list-item--nav).v-list-item--three-line{padding-inline:16px}.v-list-item--nav{padding-inline:8px}.v-list .v-list-item--nav:not(:only-child){margin-bottom:4px}.v-list-item__underlay{position:absolute}.v-list-item__overlay{background-color:currentColor;border-radius:inherit;bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .2s ease-in-out}.v-list-item--active.v-list-item--variant-elevated .v-list-item__overlay{--v-theme-overlay-multiplier: 0}.v-list{--indent-padding: 0px}.v-list--nav{--indent-padding: -8px}.v-list-group{--list-indent-size: 16px;--parent-padding: var(--indent-padding);--prepend-width: 40px}.v-list--slim .v-list-group{--prepend-width: 28px}.v-list-group--fluid{--list-indent-size: 0px}.v-list-group--prepend{--parent-padding: calc(var(--indent-padding) + var(--prepend-width))}.v-list-group--fluid.v-list-group--prepend{--parent-padding: var(--indent-padding)}.v-list-group__items{--indent-padding: calc(var(--parent-padding) + var(--list-indent-size))}.v-list-group__items .v-list-item{padding-inline-start:calc(16px + var(--indent-padding))!important}.v-list-group__header:not(.v-treeview-item--activatable-group-activator).v-list-item--active:not(:focus-visible) .v-list-item__overlay{opacity:0}.v-list-group__header:not(.v-treeview-item--activatable-group-activator).v-list-item--active:hover .v-list-item__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-divider{display:block;flex:1 1 100%;height:0px;max-height:0px;opacity:var(--v-border-opacity);transition:inherit}.v-divider{border-style:solid;border-width:thin 0 0 0}.v-divider--vertical{align-self:stretch;border-width:0 thin 0 0;display:inline-flex;height:auto;margin-left:-1px;max-height:100%;max-width:0px;vertical-align:text-bottom;width:0px}.v-divider--inset:not(.v-divider--vertical){max-width:calc(100% - 72px);margin-inline-start:72px}.v-divider--inset.v-divider--vertical{margin-bottom:8px;margin-top:8px;max-height:calc(100% - 16px)}.v-divider__content{padding:0 16px;text-wrap:nowrap}.v-divider__wrapper--vertical .v-divider__content{padding:4px 0}.v-divider__wrapper{display:flex;align-items:center;justify-content:center}.v-divider__wrapper--vertical{flex-direction:column;height:100%}.v-divider__wrapper--vertical .v-divider{margin:0 auto}.v-menu>.v-overlay__content{display:flex;flex-direction:column}.v-menu>.v-overlay__content{border-radius:4px}.v-menu>.v-overlay__content>.v-card,.v-menu>.v-overlay__content>.v-sheet,.v-menu>.v-overlay__content>.v-list{background:rgb(var(--v-theme-surface));border-radius:inherit;overflow:auto;height:100%}.v-menu>.v-overlay__content>.v-card,.v-menu>.v-overlay__content>.v-sheet,.v-menu>.v-overlay__content>.v-list{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-overlay-container{contain:layout;left:0;pointer-events:none;position:absolute;top:0;display:contents}.v-overlay-scroll-blocked{padding-inline-end:var(--v-scrollbar-offset)}.v-overlay-scroll-blocked:not(html){overflow-y:hidden!important}html.v-overlay-scroll-blocked{position:fixed;top:var(--v-body-scroll-y);left:var(--v-body-scroll-x);width:100%;height:100%}.v-overlay{border-radius:inherit;display:flex;left:0;pointer-events:none;position:fixed;top:0;bottom:0;right:0}.v-overlay__content{outline:none;position:absolute;pointer-events:auto;contain:layout}.v-overlay__scrim{pointer-events:auto;background:rgb(var(--v-theme-on-surface));border-radius:inherit;bottom:0;left:0;opacity:var(--v-overlay-opacity, .32);position:fixed;right:0;top:0}.v-overlay--absolute,.v-overlay--contained .v-overlay__scrim{position:absolute}.v-overlay--scroll-blocked{padding-inline-end:var(--v-scrollbar-offset)}.v-select .v-field .v-text-field__prefix,.v-select .v-field .v-text-field__suffix,.v-select .v-field .v-field__input,.v-select .v-field.v-field{cursor:pointer}.v-select .v-field .v-field__input>input{align-self:flex-start;opacity:1;flex:0 0;position:absolute;width:100%;transition:none;pointer-events:none;caret-color:transparent}.v-select .v-field--dirty .v-select__selection{margin-inline-end:2px}.v-select .v-select__selection-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-select__content{overflow:hidden}.v-select__content{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-select__content{border-radius:4px}.v-select__selection{display:inline-flex;align-items:center;letter-spacing:inherit;line-height:inherit;max-width:100%}.v-select .v-select__selection:first-child{margin-inline-start:0}.v-select--selected .v-field .v-field__input>input{opacity:0}.v-select__menu-icon{margin-inline-start:4px;transition:.2s cubic-bezier(.4,0,.2,1)}.v-select--active-menu .v-select__menu-icon{opacity:var(--v-high-emphasis-opacity);transform:rotate(180deg)}.v-text-field input{color:inherit;opacity:0;flex:1;transition:.15s opacity cubic-bezier(.4,0,.2,1);min-width:0}.v-text-field input:focus,.v-text-field input:active{outline:none}.v-text-field input:invalid{box-shadow:none}.v-text-field .v-field{cursor:text}.v-text-field--prefixed.v-text-field .v-field__input{--v-field-padding-start: 6px}.v-text-field--suffixed.v-text-field .v-field__input{--v-field-padding-end: 0}.v-text-field .v-input__details{padding-inline:16px}.v-input--plain-underlined.v-text-field .v-input__details{padding-inline:0}.v-text-field .v-field--no-label input,.v-text-field .v-field--active input{opacity:1}.v-text-field .v-field--single-line input{transition:none}.v-text-field__prefix,.v-text-field__suffix{align-items:center;color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity));cursor:default;display:flex;opacity:0;transition:inherit;white-space:nowrap;min-height:max(var(--v-input-control-height, 56px),1.5rem + var(--v-field-input-padding-top) + var(--v-field-input-padding-bottom));padding-top:calc(var(--v-field-padding-top, 4px) + var(--v-input-padding-top, 0));padding-bottom:var(--v-field-padding-bottom, 6px)}.v-field--active .v-text-field__prefix,.v-field--active .v-text-field__suffix{opacity:1}.v-field--disabled .v-text-field__prefix,.v-field--disabled .v-text-field__suffix{color:rgba(var(--v-theme-on-surface),var(--v-disabled-opacity))}.v-text-field__prefix{padding-inline-start:var(--v-field-padding-start)}.v-text-field__suffix{padding-inline-end:var(--v-field-padding-end)}.v-counter{color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity));flex:0 1 auto;font-size:12px;transition-duration:.15s}.v-field{display:grid;grid-template-areas:"prepend-inner field clear append-inner";grid-template-columns:min-content minmax(0,1fr) min-content min-content;font-size:16px;letter-spacing:.009375em;max-width:100%;border-radius:4px;contain:layout;flex:1 0;grid-area:control;position:relative;--v-theme-overlay-multiplier: 1;--v-field-padding-start: 16px;--v-field-padding-end: 16px;--v-field-padding-top: 8px;--v-field-padding-bottom: 4px;--v-field-input-padding-top: calc(var(--v-field-padding-top, 8px) + var(--v-input-padding-top, 0));--v-field-input-padding-bottom: var(--v-field-padding-bottom, 4px)}.v-field--disabled{opacity:var(--v-disabled-opacity);pointer-events:none}.v-field .v-chip{--v-chip-height: 24px}.v-field--prepended{padding-inline-start:12px}.v-field--appended{padding-inline-end:12px}.v-field--variant-solo,.v-field--variant-solo-filled{background:rgb(var(--v-theme-surface));border-color:transparent;color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-field--variant-solo,.v-field--variant-solo-filled{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-field--variant-solo-inverted{background:rgb(var(--v-theme-surface));border-color:transparent;color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-field--variant-solo-inverted{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-field--variant-solo-inverted.v-field--focused{color:rgb(var(--v-theme-on-surface-variant))}.v-field--variant-filled{border-bottom-left-radius:0;border-bottom-right-radius:0}.v-input--density-default .v-field--variant-solo,.v-input--density-default .v-field--variant-solo-inverted,.v-input--density-default .v-field--variant-solo-filled,.v-input--density-default .v-field--variant-filled{--v-input-control-height: 56px;--v-field-padding-bottom: 4px}.v-input--density-comfortable .v-field--variant-solo,.v-input--density-comfortable .v-field--variant-solo-inverted,.v-input--density-comfortable .v-field--variant-solo-filled,.v-input--density-comfortable .v-field--variant-filled{--v-input-control-height: 48px;--v-field-padding-bottom: 0px}.v-input--density-compact .v-field--variant-solo,.v-input--density-compact .v-field--variant-solo-inverted,.v-input--density-compact .v-field--variant-solo-filled,.v-input--density-compact .v-field--variant-filled{--v-input-control-height: 40px;--v-field-padding-bottom: 0px}.v-field--variant-outlined,.v-field--single-line,.v-field--no-label{--v-field-padding-top: 0px}.v-input--density-default .v-field--variant-outlined,.v-input--density-default .v-field--single-line,.v-input--density-default .v-field--no-label{--v-field-padding-bottom: 16px}.v-input--density-comfortable .v-field--variant-outlined,.v-input--density-comfortable .v-field--single-line,.v-input--density-comfortable .v-field--no-label{--v-field-padding-bottom: 12px}.v-input--density-compact .v-field--variant-outlined,.v-input--density-compact .v-field--single-line,.v-input--density-compact .v-field--no-label{--v-field-padding-bottom: 8px}.v-field--variant-plain,.v-field--variant-underlined{border-radius:0;padding:0}.v-field--variant-plain.v-field,.v-field--variant-underlined.v-field{--v-field-padding-start: 0px;--v-field-padding-end: 0px}.v-input--density-default .v-field--variant-plain,.v-input--density-default .v-field--variant-underlined{--v-input-control-height: 48px;--v-field-padding-top: 4px;--v-field-padding-bottom: 4px}.v-input--density-comfortable .v-field--variant-plain,.v-input--density-comfortable .v-field--variant-underlined{--v-input-control-height: 40px;--v-field-padding-top: 2px;--v-field-padding-bottom: 0px}.v-input--density-compact .v-field--variant-plain,.v-input--density-compact .v-field--variant-underlined{--v-input-control-height: 32px;--v-field-padding-top: 0px;--v-field-padding-bottom: 0px}.v-field--flat{box-shadow:none}.v-field--rounded{border-radius:24px}.v-field.v-field--prepended{--v-field-padding-start: 6px}.v-field.v-field--appended{--v-field-padding-end: 6px}.v-field__input{align-items:center;color:inherit;column-gap:2px;display:flex;flex-wrap:wrap;letter-spacing:.009375em;opacity:var(--v-high-emphasis-opacity);min-height:max(var(--v-input-control-height, 56px),1.5rem + var(--v-field-input-padding-top) + var(--v-field-input-padding-bottom));min-width:0;padding-inline:var(--v-field-padding-start) var(--v-field-padding-end);padding-top:var(--v-field-input-padding-top);padding-bottom:var(--v-field-input-padding-bottom);position:relative;width:100%}.v-input--density-default .v-field__input{row-gap:8px}.v-input--density-comfortable .v-field__input{row-gap:6px}.v-input--density-compact .v-field__input{row-gap:4px}.v-field__input input{letter-spacing:inherit}.v-field__input input::placeholder,input.v-field__input::placeholder,textarea.v-field__input::placeholder{color:currentColor;opacity:var(--v-disabled-opacity)}.v-field__input:focus,.v-field__input:active{outline:none}.v-field__input:invalid{box-shadow:none}.v-field__field{flex:1 0;grid-area:field;position:relative;align-items:flex-start;display:flex}.v-field__prepend-inner{grid-area:prepend-inner;padding-inline-end:var(--v-field-padding-after)}.v-field__clearable{grid-area:clear}.v-field__append-inner{grid-area:append-inner;padding-inline-start:var(--v-field-padding-after)}.v-field__append-inner,.v-field__clearable,.v-field__prepend-inner{display:flex;align-items:flex-start;padding-top:var(--v-input-padding-top, 8px)}.v-field--center-affix .v-field__append-inner,.v-field--center-affix .v-field__clearable,.v-field--center-affix .v-field__prepend-inner{align-items:center;padding-top:0}.v-field.v-field--variant-underlined .v-field__append-inner,.v-field.v-field--variant-underlined .v-field__clearable,.v-field.v-field--variant-underlined .v-field__prepend-inner,.v-field.v-field--variant-plain .v-field__append-inner,.v-field.v-field--variant-plain .v-field__clearable,.v-field.v-field--variant-plain .v-field__prepend-inner{align-items:flex-start;padding-top:calc(var(--v-field-padding-top, 8px) + var(--v-input-padding-top, 0));padding-bottom:var(--v-field-padding-bottom, 4px)}.v-field--focused .v-field__prepend-inner,.v-field--focused .v-field__append-inner{opacity:1}.v-field__prepend-inner>.v-icon,.v-field__append-inner>.v-icon,.v-field__clearable>.v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-field--disabled .v-field__prepend-inner>.v-icon,.v-field--error .v-field__prepend-inner>.v-icon,.v-field--disabled .v-field__append-inner>.v-icon,.v-field--error .v-field__append-inner>.v-icon,.v-field--disabled .v-field__clearable>.v-icon,.v-field--error .v-field__clearable>.v-icon{opacity:1}.v-field--error:not(.v-field--disabled) .v-field__prepend-inner>.v-icon,.v-field--error:not(.v-field--disabled) .v-field__append-inner>.v-icon,.v-field--error:not(.v-field--disabled) .v-field__clearable>.v-icon{color:rgb(var(--v-theme-error))}.v-field__clearable{cursor:pointer;opacity:0;overflow:hidden;margin-inline:4px;transition:.15s cubic-bezier(.4,0,.2,1);transition-property:opacity,transform,width}.v-field--focused .v-field__clearable,.v-field--persistent-clear .v-field__clearable{opacity:1}@media (hover: hover){.v-field:hover .v-field__clearable{opacity:1}}@media (hover: none){.v-field__clearable{opacity:1}}.v-label.v-field-label{contain:layout paint;display:block;margin-inline-start:var(--v-field-padding-start);margin-inline-end:var(--v-field-padding-end);max-width:calc(100% - var(--v-field-padding-start) - var(--v-field-padding-end));pointer-events:none;position:absolute;top:var(--v-input-padding-top);transform-origin:left center;transition:.15s cubic-bezier(.4,0,.2,1);transition-property:opacity,transform;z-index:1}.v-field--variant-underlined .v-label.v-field-label,.v-field--variant-plain .v-label.v-field-label{top:calc(var(--v-input-padding-top) + var(--v-field-padding-top))}.v-field--center-affix .v-label.v-field-label{top:50%;transform:translateY(-50%)}.v-field--active .v-label.v-field-label{visibility:hidden}.v-field--focused .v-label.v-field-label,.v-field--error .v-label.v-field-label{opacity:1}.v-field--error:not(.v-field--disabled) .v-label.v-field-label{color:rgb(var(--v-theme-error))}.v-label.v-field-label--floating{--v-field-label-scale: .75em;font-size:var(--v-field-label-scale);visibility:hidden;max-width:100%}.v-field--center-affix .v-label.v-field-label--floating{transform:none}.v-field.v-field--active .v-label.v-field-label--floating{visibility:unset}.v-input--density-default .v-field--variant-solo .v-label.v-field-label--floating,.v-input--density-default .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-input--density-default .v-field--variant-filled .v-label.v-field-label--floating,.v-input--density-default .v-field--variant-solo-filled .v-label.v-field-label--floating{top:7px}.v-input--density-comfortable .v-field--variant-solo .v-label.v-field-label--floating,.v-input--density-comfortable .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-input--density-comfortable .v-field--variant-filled .v-label.v-field-label--floating,.v-input--density-comfortable .v-field--variant-solo-filled .v-label.v-field-label--floating{top:5px}.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:3px}.v-field--variant-plain .v-label.v-field-label--floating,.v-field--variant-underlined .v-label.v-field-label--floating{transform:translateY(-16px);margin:0;top:var(--v-input-padding-top)}.v-field--variant-outlined .v-label.v-field-label--floating{transform:translateY(-50%);transform-origin:center;position:static;margin:0 4px}.v-field__outline{--v-field-border-width: 1px;--v-field-border-opacity: .38;align-items:stretch;contain:layout;display:flex;height:100%;left:0;pointer-events:none;position:absolute;right:0;width:100%}@media (hover: hover){.v-field:hover .v-field__outline{--v-field-border-opacity: var(--v-high-emphasis-opacity)}}.v-field--error:not(.v-field--disabled) .v-field__outline{color:rgb(var(--v-theme-error))}.v-field.v-field--focused .v-field__outline,.v-input.v-input--error .v-field__outline{--v-field-border-opacity: 1}.v-field--variant-outlined.v-field--focused .v-field__outline{--v-field-border-width: 2px}.v-field--variant-filled .v-field__outline:before,.v-field--variant-underlined .v-field__outline:before{border-color:currentColor;border-style:solid;border-width:0 0 var(--v-field-border-width);opacity:var(--v-field-border-opacity);transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-filled .v-field__outline:before,.v-field--variant-underlined .v-field__outline:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-field--variant-filled .v-field__outline:after,.v-field--variant-underlined .v-field__outline:after{border-color:currentColor;border-style:solid;border-width:0 0 2px;transform:scaleX(0);transition:transform .15s cubic-bezier(.4,0,.2,1)}.v-field--variant-filled .v-field__outline:after,.v-field--variant-underlined .v-field__outline:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-field--focused.v-field--variant-filled .v-field__outline:after,.v-field--focused.v-field--variant-underlined .v-field__outline:after{transform:scaleX(1)}.v-field--variant-outlined .v-field__outline{border-radius:inherit}.v-field--variant-outlined .v-field__outline__start,.v-field--variant-outlined .v-field__outline__notch:before,.v-field--variant-outlined .v-field__outline__notch:after,.v-field--variant-outlined .v-field__outline__end{border:0 solid currentColor;opacity:var(--v-field-border-opacity);transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-outlined .v-field__outline__start{flex:0 0 12px;border-top-width:var(--v-field-border-width);border-bottom-width:var(--v-field-border-width);border-inline-start-width:var(--v-field-border-width);border-start-start-radius:inherit;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:inherit}.v-field--rounded.v-field--variant-outlined .v-field__outline__start,[class^=rounded-].v-field--variant-outlined .v-field__outline__start,[class*=" rounded-"].v-field--variant-outlined .v-field__outline__start{flex-basis:calc(var(--v-input-control-height) / 2 + 2px)}.v-field--reverse.v-field--variant-outlined .v-field__outline__start{border-start-start-radius:0;border-start-end-radius:inherit;border-end-end-radius:inherit;border-end-start-radius:0;border-inline-end-width:var(--v-field-border-width);border-inline-start-width:0}.v-field--variant-outlined .v-field__outline__notch{flex:none;position:relative;max-width:calc(100% - 12px)}.v-field--variant-outlined .v-field__outline__notch:before,.v-field--variant-outlined .v-field__outline__notch:after{opacity:var(--v-field-border-opacity);transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-outlined .v-field__outline__notch:before,.v-field--variant-outlined .v-field__outline__notch:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-field--variant-outlined .v-field__outline__notch:before{border-width:var(--v-field-border-width) 0 0}.v-field--variant-outlined .v-field__outline__notch:after{bottom:0;border-width:0 0 var(--v-field-border-width)}.v-field--active.v-field--variant-outlined .v-field__outline__notch:before{opacity:0}.v-field--variant-outlined .v-field__outline__end{flex:1;border-top-width:var(--v-field-border-width);border-bottom-width:var(--v-field-border-width);border-inline-end-width:var(--v-field-border-width);border-start-start-radius:0;border-start-end-radius:inherit;border-end-end-radius:inherit;border-end-start-radius:0}.v-field--reverse.v-field--variant-outlined .v-field__outline__end{border-start-start-radius:inherit;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:inherit;border-inline-end-width:0;border-inline-start-width:var(--v-field-border-width)}.v-field__loader{top:calc(100% - 2px);left:0;position:absolute;right:0;width:100%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;overflow:hidden}.v-field--variant-outlined .v-field__loader{top:calc(100% - 3px);width:calc(100% - 2px);left:1px}.v-field__overlay{border-radius:inherit;pointer-events:none}.v-field__overlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-field--variant-filled .v-field__overlay{background-color:currentColor;opacity:.04;transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-filled.v-field--has-background .v-field__overlay{opacity:0}@media (hover: hover){.v-field--variant-filled:hover .v-field__overlay{opacity:calc((.04 + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}}.v-field--variant-filled.v-field--focused .v-field__overlay{opacity:calc((.04 + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}.v-field--variant-solo-filled .v-field__overlay{background-color:currentColor;opacity:.04;transition:opacity .25s cubic-bezier(.4,0,.2,1)}@media (hover: hover){.v-field--variant-solo-filled:hover .v-field__overlay{opacity:calc((.04 + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}}.v-field--variant-solo-filled.v-field--focused .v-field__overlay{opacity:calc((.04 + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}.v-field--variant-solo-inverted .v-field__overlay{transition:opacity .25s cubic-bezier(.4,0,.2,1)}.v-field--variant-solo-inverted.v-field--has-background .v-field__overlay{opacity:0}@media (hover: hover){.v-field--variant-solo-inverted:hover .v-field__overlay{opacity:calc((.04 + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}}.v-field--variant-solo-inverted.v-field--focused .v-field__overlay{background-color:rgb(var(--v-theme-surface-variant));opacity:1}.v-field--reverse .v-field__field,.v-field--reverse .v-field__input,.v-field--reverse .v-field__outline{flex-direction:row-reverse}.v-field--reverse .v-field__input,.v-field--reverse input{text-align:end}.v-input--disabled .v-field--variant-filled .v-field__outline:before,.v-input--disabled .v-field--variant-underlined .v-field__outline:before{border-image:repeating-linear-gradient(to right,rgba(var(--v-theme-on-surface),var(--v-disabled-opacity)) 0px,rgba(var(--v-theme-on-surface),var(--v-disabled-opacity)) 2px,transparent 2px,transparent 4px) 1 repeat}.v-field--loading .v-field__outline:after,.v-field--loading .v-field__outline:before{opacity:0}.v-virtual-scroll{display:block;flex:1 1 auto;max-width:100%;overflow:auto;position:relative}.v-virtual-scroll__container{display:block}.v-badge{display:inline-block;line-height:1}.v-badge__badge{align-items:center;display:inline-flex;border-radius:10px;font-family:Roboto,sans-serif;font-size:.75rem;font-weight:500;height:1.25rem;justify-content:center;min-width:20px;padding:4px 6px;pointer-events:auto;position:absolute;text-align:center;text-indent:0;transition:.225s cubic-bezier(.4,0,.2,1);white-space:nowrap}.v-badge__badge{background:rgb(var(--v-theme-surface-variant));color:rgba(var(--v-theme-on-surface-variant),var(--v-high-emphasis-opacity))}.v-badge__badge:has(.v-icon){padding:4px 6px}.v-badge--bordered .v-badge__badge:after{border-radius:inherit;border-style:solid;border-width:2px;bottom:0;color:rgb(var(--v-theme-background));content:"";left:0;position:absolute;right:0;top:0;transform:scale(1.05)}.v-badge--dot .v-badge__badge{border-radius:4.5px;height:9px;min-width:0;padding:0;width:9px}.v-badge--dot .v-badge__badge:after{border-width:1.5px}.v-badge--inline .v-badge__badge{position:relative;vertical-align:middle}.v-badge__badge .v-icon{color:inherit;font-size:.75rem;margin:0 -2px}.v-badge__badge img,.v-badge__badge .v-img{height:100%;width:100%}.v-badge__wrapper{display:flex;position:relative}.v-badge--inline .v-badge__wrapper{align-items:center;display:inline-flex;justify-content:center;margin:0 4px}.v-banner{display:grid;flex:1 1;font-size:.875rem;grid-template-areas:"prepend content actions";grid-template-columns:max-content auto max-content;grid-template-rows:max-content max-content;line-height:1.6;overflow:hidden;padding-inline:16px 8px;padding-top:16px;padding-bottom:16px;position:relative;width:100%}.v-banner{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0 0 thin 0}.v-banner--border{border-width:thin;box-shadow:none}.v-banner{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-banner--absolute{position:absolute}.v-banner--fixed{position:fixed}.v-banner--sticky{position:sticky}.v-banner{border-radius:0}.v-banner{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-banner--rounded{border-radius:4px}.v-banner--stacked:not(.v-banner--one-line){grid-template-areas:"prepend content" ". actions"}.v-banner--stacked .v-banner-text{padding-inline-end:36px}.v-banner--density-default .v-banner-actions{margin-bottom:-8px}.v-banner--density-default.v-banner--one-line{padding-top:8px;padding-bottom:8px}.v-banner--density-default.v-banner--one-line .v-banner-actions{margin-bottom:0}.v-banner--density-default.v-banner--one-line{padding-top:10px}.v-banner--density-default.v-banner--two-line{padding-top:16px;padding-bottom:16px}.v-banner--density-default.v-banner--three-line{padding-top:24px;padding-bottom:16px}.v-banner--density-default:not(.v-banner--one-line) .v-banner-actions,.v-banner--density-default.v-banner--two-line .v-banner-actions,.v-banner--density-default.v-banner--three-line .v-banner-actions{margin-top:20px}.v-banner--density-comfortable .v-banner-actions{margin-bottom:-4px}.v-banner--density-comfortable.v-banner--one-line{padding-top:4px;padding-bottom:4px}.v-banner--density-comfortable.v-banner--one-line .v-banner-actions{margin-bottom:0}.v-banner--density-comfortable.v-banner--two-line{padding-top:12px;padding-bottom:12px}.v-banner--density-comfortable.v-banner--three-line{padding-top:20px;padding-bottom:12px}.v-banner--density-comfortable:not(.v-banner--one-line) .v-banner-actions,.v-banner--density-comfortable.v-banner--two-line .v-banner-actions,.v-banner--density-comfortable.v-banner--three-line .v-banner-actions{margin-top:16px}.v-banner--density-compact .v-banner-actions{margin-bottom:0}.v-banner--density-compact.v-banner--one-line{padding-top:0;padding-bottom:0}.v-banner--density-compact.v-banner--one-line .v-banner-actions{margin-bottom:0}.v-banner--density-compact.v-banner--two-line{padding-top:8px;padding-bottom:8px}.v-banner--density-compact.v-banner--three-line{padding-top:16px;padding-bottom:8px}.v-banner--density-compact:not(.v-banner--one-line) .v-banner-actions,.v-banner--density-compact.v-banner--two-line .v-banner-actions,.v-banner--density-compact.v-banner--three-line .v-banner-actions{margin-top:12px}.v-banner--sticky{top:0;z-index:1}.v-banner__content{align-items:center;display:flex;grid-area:content}.v-banner__prepend{align-self:flex-start;grid-area:prepend;margin-inline-end:24px}.v-banner-actions{align-self:flex-end;display:flex;flex:0 1;grid-area:actions;justify-content:flex-end}.v-banner--two-line .v-banner-actions,.v-banner--three-line .v-banner-actions{margin-top:20px}.v-banner-text{-webkit-box-orient:vertical;display:-webkit-box;padding-inline-end:90px;overflow:hidden}.v-banner--one-line .v-banner-text{-webkit-line-clamp:1}.v-banner--two-line .v-banner-text{-webkit-line-clamp:2}.v-banner--three-line .v-banner-text{-webkit-line-clamp:3}.v-banner--two-line .v-banner-text,.v-banner--three-line .v-banner-text{align-self:flex-start}.v-bottom-navigation{display:flex;max-width:100%;overflow:hidden;position:absolute;transition:transform,color,.2s,.1s cubic-bezier(.4,0,.2,1)}.v-bottom-navigation{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-bottom-navigation--border{border-width:thin;box-shadow:none}.v-bottom-navigation{border-radius:0}.v-bottom-navigation{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-bottom-navigation--active{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-bottom-navigation__content{display:flex;flex:none;font-size:.75rem;justify-content:center;transition:inherit;width:100%}.v-bottom-navigation .v-bottom-navigation__content>.v-btn{font-size:inherit;height:100%;max-width:168px;min-width:80px;text-transform:none;transition:inherit;width:auto}.v-bottom-navigation .v-bottom-navigation__content>.v-btn{border-radius:0}.v-bottom-navigation .v-bottom-navigation__content>.v-btn .v-btn__content,.v-bottom-navigation .v-bottom-navigation__content>.v-btn .v-btn__icon{transition:inherit}.v-bottom-navigation .v-bottom-navigation__content>.v-btn .v-btn__icon{font-size:1.5rem}.v-bottom-navigation--grow .v-bottom-navigation__content>.v-btn{flex-grow:1}.v-bottom-navigation--shift .v-bottom-navigation__content .v-btn:not(.v-btn--selected) .v-btn__content>span{transition:inherit;opacity:0}.v-bottom-navigation--shift .v-bottom-navigation__content .v-btn:not(.v-btn--selected) .v-btn__content{transform:translateY(.5rem)}.bottom-sheet-transition-enter-from,.bottom-sheet-transition-leave-to{transform:translateY(100%)}.v-bottom-sheet>.v-bottom-sheet__content.v-overlay__content{align-self:flex-end;border-radius:0;flex:0 1 auto;left:0;right:0;margin-inline:0;margin-bottom:0;transition-duration:.2s;width:100%;max-width:100%;overflow:visible}.v-bottom-sheet>.v-bottom-sheet__content.v-overlay__content{box-shadow:0 7px 8px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 12px 17px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 5px 22px 4px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-bottom-sheet>.v-bottom-sheet__content.v-overlay__content>.v-card,.v-bottom-sheet>.v-bottom-sheet__content.v-overlay__content>.v-sheet{border-radius:0}.v-bottom-sheet.v-bottom-sheet--inset{max-width:none}@media (min-width: 600px){.v-bottom-sheet.v-bottom-sheet--inset{max-width:70%}}.v-dialog{align-items:center;justify-content:center;margin:auto}.v-dialog>.v-overlay__content{max-height:calc(100% - 48px);width:calc(100% - 48px);max-width:calc(100% - 48px);margin:24px}.v-dialog>.v-overlay__content,.v-dialog>.v-overlay__content>form{display:flex;flex-direction:column;min-height:0}.v-dialog>.v-overlay__content>.v-card,.v-dialog>.v-overlay__content>.v-sheet,.v-dialog>.v-overlay__content>form>.v-card,.v-dialog>.v-overlay__content>form>.v-sheet{--v-scrollbar-offset: 0px;border-radius:4px;overflow-y:auto;flex:1 1 100%}.v-dialog>.v-overlay__content>.v-card,.v-dialog>.v-overlay__content>.v-sheet,.v-dialog>.v-overlay__content>form>.v-card,.v-dialog>.v-overlay__content>form>.v-sheet{box-shadow:0 11px 15px -7px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 24px 38px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 9px 46px 8px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-dialog>.v-overlay__content>.v-card,.v-dialog>.v-overlay__content>form>.v-card{display:flex;flex-direction:column}.v-dialog>.v-overlay__content>.v-card>.v-card-item,.v-dialog>.v-overlay__content>form>.v-card>.v-card-item{padding:16px 24px}.v-dialog>.v-overlay__content>.v-card>.v-card-item+.v-card-text,.v-dialog>.v-overlay__content>form>.v-card>.v-card-item+.v-card-text{padding-top:0}.v-dialog>.v-overlay__content>.v-card>.v-card-text,.v-dialog>.v-overlay__content>form>.v-card>.v-card-text{font-size:inherit;letter-spacing:.03125em;line-height:inherit;padding:16px 24px 24px}.v-dialog>.v-overlay__content>.v-card>.v-card-actions,.v-dialog>.v-overlay__content>form>.v-card>.v-card-actions{justify-content:flex-end}.v-dialog--fullscreen{--v-scrollbar-offset: 0px}.v-dialog--fullscreen>.v-overlay__content{border-radius:0;margin:0;padding:0;width:100%;height:100%;max-width:100%;max-height:100%;overflow-y:auto;top:0;left:0}.v-dialog--fullscreen>.v-overlay__content>.v-card,.v-dialog--fullscreen>.v-overlay__content>.v-sheet,.v-dialog--fullscreen>.v-overlay__content>form>.v-card,.v-dialog--fullscreen>.v-overlay__content>form>.v-sheet{min-height:100%;min-width:100%;border-radius:0}.v-dialog--scrollable>.v-overlay__content,.v-dialog--scrollable>.v-overlay__content>.v-card,.v-dialog--scrollable>.v-overlay__content>form,.v-dialog--scrollable>.v-overlay__content>form>.v-card{display:flex;flex:1 1 100%;flex-direction:column;max-height:100%;max-width:100%}.v-dialog--scrollable>.v-overlay__content>.v-card>.v-card-text,.v-dialog--scrollable>.v-overlay__content>form>.v-card>.v-card-text{backface-visibility:hidden;overflow-y:auto}.v-breadcrumbs{display:flex;align-items:center;line-height:1.6;padding:16px 12px}.v-breadcrumbs--rounded{border-radius:4px}.v-breadcrumbs--density-default{padding-top:16px;padding-bottom:16px}.v-breadcrumbs--density-comfortable{padding-top:12px;padding-bottom:12px}.v-breadcrumbs--density-compact{padding-top:8px;padding-bottom:8px}.v-breadcrumbs__prepend{align-items:center;display:inline-flex}.v-breadcrumbs-item{align-items:center;color:inherit;display:inline-flex;padding:0 4px;text-decoration:none;vertical-align:middle}.v-breadcrumbs-item--disabled{opacity:var(--v-disabled-opacity);pointer-events:none}.v-breadcrumbs-item--link{color:inherit;text-decoration:none}.v-breadcrumbs-item--link:hover{text-decoration:underline}.v-breadcrumbs-item .v-icon{font-size:1rem;margin-inline:-4px 2px}.v-breadcrumbs-divider{display:inline-block;padding:0 8px;vertical-align:middle}.v-card{display:block;overflow:hidden;overflow-wrap:break-word;position:relative;padding:0;text-decoration:none;transition-duration:.28s;transition-property:box-shadow,opacity,background;transition-timing-function:cubic-bezier(.4,0,.2,1);z-index:0}.v-card{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-card--border{border-width:thin;box-shadow:none}.v-card--absolute{position:absolute}.v-card--fixed{position:fixed}.v-card{border-radius:4px}.v-card:hover>.v-card__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-card:focus-visible>.v-card__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-card:focus>.v-card__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-card--active>.v-card__overlay,.v-card[aria-haspopup=menu][aria-expanded=true]>.v-card__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-card--active:hover>.v-card__overlay,.v-card[aria-haspopup=menu][aria-expanded=true]:hover>.v-card__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-card--active:focus-visible>.v-card__overlay,.v-card[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-card__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-card--active:focus>.v-card__overlay,.v-card[aria-haspopup=menu][aria-expanded=true]:focus>.v-card__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-card--variant-plain,.v-card--variant-outlined,.v-card--variant-text,.v-card--variant-tonal{background:transparent;color:inherit}.v-card--variant-plain{opacity:.62}.v-card--variant-plain:focus,.v-card--variant-plain:hover{opacity:1}.v-card--variant-plain .v-card__overlay{display:none}.v-card--variant-elevated,.v-card--variant-flat{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-card--variant-elevated{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--variant-outlined{border:thin solid currentColor}.v-card--variant-text .v-card__overlay{background:currentColor}.v-card--variant-tonal .v-card__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-card .v-card__underlay{position:absolute}.v-card--disabled{pointer-events:none;-webkit-user-select:none;user-select:none}.v-card--disabled>:not(.v-card__loader){opacity:.6}.v-card--flat{box-shadow:none}.v-card--hover{cursor:pointer}.v-card--hover:before,.v-card--hover:after{border-radius:inherit;bottom:0;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0;transition:inherit}.v-card--hover:before{opacity:1;z-index:-1}.v-card--hover:before{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--hover:after{z-index:1;opacity:0}.v-card--hover:after{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--hover:hover:after{opacity:1}.v-card--hover:hover:before{opacity:0}.v-card--hover:hover{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-card--link{cursor:pointer}.v-card-actions{align-items:center;display:flex;flex:none;min-height:52px;padding:.5rem;gap:.5rem}.v-card-item{align-items:center;display:grid;flex:none;grid-template-areas:"prepend content append";grid-template-columns:max-content auto max-content;padding:.625rem 1rem}.v-card-item+.v-card-text{padding-top:0}.v-card-item__prepend,.v-card-item__append{align-items:center;display:flex}.v-card-item__prepend{grid-area:prepend;padding-inline-end:.5rem}.v-card-item__append{grid-area:append;padding-inline-start:.5rem}.v-card-item__content{align-self:center;grid-area:content;overflow:hidden}.v-card-title{display:block;flex:none;font-size:1.25rem;font-weight:500;-webkit-hyphens:auto;hyphens:auto;letter-spacing:.0125em;min-width:0;overflow-wrap:normal;overflow:hidden;padding:.5rem 1rem;text-overflow:ellipsis;text-transform:none;white-space:nowrap;word-break:normal;word-wrap:break-word}.v-card .v-card-title{line-height:1.6}.v-card--density-comfortable .v-card-title{line-height:1.75rem}.v-card--density-compact .v-card-title{line-height:1.55rem}.v-card-item .v-card-title{padding:0}.v-card-title+.v-card-text,.v-card-title+.v-card-actions{padding-top:0}.v-card-subtitle{display:block;flex:none;font-size:.875rem;font-weight:400;letter-spacing:.0178571429em;opacity:var(--v-card-subtitle-opacity, var(--v-medium-emphasis-opacity));overflow:hidden;padding:0 1rem;text-overflow:ellipsis;text-transform:none;white-space:nowrap}.v-card .v-card-subtitle{line-height:1.425}.v-card--density-comfortable .v-card-subtitle{line-height:1.125rem}.v-card--density-compact .v-card-subtitle{line-height:1rem}.v-card-item .v-card-subtitle{padding:0 0 .25rem}.v-card-text{flex:1 1 auto;font-size:.875rem;font-weight:400;letter-spacing:.0178571429em;opacity:var(--v-card-text-opacity, 1);padding:1rem;text-transform:none}.v-card .v-card-text{line-height:1.425}.v-card--density-comfortable .v-card-text{line-height:1.2rem}.v-card--density-compact .v-card-text{line-height:1.15rem}.v-card__image{display:flex;height:100%;flex:1 1 auto;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:-1}.v-card__content{border-radius:inherit;overflow:hidden;position:relative}.v-card__loader{bottom:auto;top:0;left:0;position:absolute;right:0;width:100%;z-index:1}.v-card__overlay{background-color:currentColor;border-radius:inherit;position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;opacity:0;transition:opacity .2s ease-in-out}.v-carousel{overflow:hidden;position:relative;width:100%}.v-carousel__controls{align-items:center;bottom:0;display:flex;height:50px;justify-content:center;list-style-type:none;position:absolute;width:100%;z-index:1}.v-carousel__controls{background:rgba(var(--v-theme-surface-variant),.3);color:rgb(var(--v-theme-on-surface-variant))}.v-carousel__controls>.v-item-group{flex:0 1 auto}.v-carousel__controls__item{margin:0 8px}.v-carousel__controls__item .v-icon{opacity:.5}.v-carousel__controls__item--active .v-icon{opacity:1;vertical-align:middle}.v-carousel__controls__item:hover{background:none}.v-carousel__controls__item:hover .v-icon{opacity:.8}.v-carousel__progress{margin:0;position:absolute;bottom:0;left:0;right:0}.v-carousel-item{display:block;height:inherit;text-decoration:none}.v-carousel-item>.v-img{height:inherit}.v-carousel--hide-delimiter-background .v-carousel__controls{background:transparent}.v-carousel--vertical-delimiters .v-carousel__controls{flex-direction:column;height:100%!important;width:50px}.v-window{overflow:hidden}.v-window__container{display:flex;flex-direction:column;height:inherit;position:relative;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-window__controls{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;align-items:center;justify-content:space-between;padding:0 16px;pointer-events:none}.v-window__controls>*{pointer-events:auto}.v-window--show-arrows-on-hover{overflow:hidden}.v-window--show-arrows-on-hover .v-window__left{transform:translate(-200%)}.v-window--show-arrows-on-hover .v-window__right{transform:translate(200%)}.v-window--show-arrows-on-hover:hover .v-window__left,.v-window--show-arrows-on-hover:hover .v-window__right{transform:translate(0)}.v-window-x-transition-enter-active,.v-window-x-transition-leave-active,.v-window-x-reverse-transition-enter-active,.v-window-x-reverse-transition-leave-active,.v-window-y-transition-enter-active,.v-window-y-transition-leave-active,.v-window-y-reverse-transition-enter-active,.v-window-y-reverse-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)}.v-window-x-transition-leave-from,.v-window-x-transition-leave-to,.v-window-x-reverse-transition-leave-from,.v-window-x-reverse-transition-leave-to,.v-window-y-transition-leave-from,.v-window-y-transition-leave-to,.v-window-y-reverse-transition-leave-from,.v-window-y-reverse-transition-leave-to{position:absolute!important;top:0;width:100%}.v-window-x-transition-enter-from{transform:translate(100%)}.v-window-x-transition-leave-to,.v-window-x-reverse-transition-enter-from{transform:translate(-100%)}.v-window-x-reverse-transition-leave-to{transform:translate(100%)}.v-window-y-transition-enter-from{transform:translateY(100%)}.v-window-y-transition-leave-to,.v-window-y-reverse-transition-enter-from{transform:translateY(-100%)}.v-window-y-reverse-transition-leave-to{transform:translateY(100%)}.v-code{background-color:rgb(var(--v-theme-code));color:rgb(var(--v-theme-on-code));border-radius:4px;line-height:1.8;font-size:.9em;font-weight:400;padding:.2em .4em}.v-color-picker{align-self:flex-start;contain:content}.v-color-picker.v-sheet{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-color-picker.v-sheet{border-radius:4px}.v-color-picker__controls{display:flex;flex-direction:column;padding:16px}.v-color-picker--flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-color-picker--flat .v-color-picker__track:not(.v-input--is-disabled) .v-slider__thumb{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-color-picker-canvas{display:flex;position:relative;overflow:hidden;contain:content;touch-action:none}.v-color-picker-canvas__dot{position:absolute;top:0;left:0;width:15px;height:15px;background:transparent;border-radius:50%;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1.5px #0000004d}.v-color-picker-canvas__dot--disabled{box-shadow:0 0 0 1.5px #ffffffb3,inset 0 0 1px 1.5px #0000004d}.v-color-picker-canvas:hover .v-color-picker-canvas__dot{will-change:transform}.v-color-picker-edit{display:flex;margin-top:24px}.v-color-picker-edit__input{width:100%;display:flex;flex-wrap:wrap;justify-content:center;text-align:center}.v-color-picker-edit__input:not(:last-child){margin-inline-end:8px}.v-color-picker-edit__input input{border-radius:4px;margin-bottom:8px;min-width:0;outline:none;text-align:center;width:100%;height:32px;background:rgba(var(--v-theme-surface-variant),.2);color:rgba(var(--v-theme-on-surface))}.v-color-picker-edit__input span{font-size:.75rem}.v-color-picker-preview__alpha .v-slider-track__background{background-color:transparent!important}.v-locale--is-ltr.v-color-picker-preview__alpha .v-slider-track__background,.v-locale--is-ltr .v-color-picker-preview__alpha .v-slider-track__background{background-image:linear-gradient(to right,transparent,var(--v-color-picker-color-hsv))}.v-locale--is-rtl.v-color-picker-preview__alpha .v-slider-track__background,.v-locale--is-rtl .v-color-picker-preview__alpha .v-slider-track__background{background-image:linear-gradient(to left,transparent,var(--v-color-picker-color-hsv))}.v-color-picker-preview__alpha .v-slider-track__background:after{content:"";z-index:-1;left:0;top:0;width:100%;height:100%;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAACRJREFUKFNjPHTo0H8GJGBnZ8eIzGekgwJk+0BsdCtRHEQbBQBbbh0dIGKknQAAAABJRU5ErkJggg==) repeat;border-radius:inherit}.v-color-picker-preview__sliders{display:flex;flex:1 0 auto;flex-direction:column;padding-inline-end:16px}.v-color-picker-preview__dot{position:relative;height:30px;width:30px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAACRJREFUKFNjPHTo0H8GJGBnZ8eIzGekgwJk+0BsdCtRHEQbBQBbbh0dIGKknQAAAABJRU5ErkJggg==) repeat;border-radius:50%;overflow:hidden;margin-inline-end:24px}.v-color-picker-preview__dot>div{width:100%;height:100%}.v-locale--is-ltr.v-color-picker-preview__hue:not(.v-input--is-disabled) .v-slider-track__background,.v-locale--is-ltr .v-color-picker-preview__hue:not(.v-input--is-disabled) .v-slider-track__background{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.v-locale--is-rtl.v-color-picker-preview__hue:not(.v-input--is-disabled) .v-slider-track__background,.v-locale--is-rtl .v-color-picker-preview__hue:not(.v-input--is-disabled) .v-slider-track__background{background:linear-gradient(to left,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.v-color-picker-preview__track{position:relative;width:100%;margin:0!important}.v-color-picker-preview__track .v-slider-track__fill{display:none}.v-color-picker-preview{align-items:center;display:flex;margin-bottom:0}.v-color-picker-preview__eye-dropper{position:relative;margin-right:12px}.v-slider .v-slider__container input{cursor:default;padding:0;width:100%;display:none}.v-slider>.v-input__append,.v-slider>.v-input__prepend{padding:0}.v-slider__container{position:relative;min-height:inherit;width:100%;height:100%;display:flex;justify-content:center;align-items:center;cursor:pointer}.v-input--disabled .v-slider__container{opacity:var(--v-disabled-opacity)}.v-input--error:not(.v-input--disabled) .v-slider__container{color:rgb(var(--v-theme-error))}.v-slider.v-input--horizontal{align-items:center;margin-inline:8px 8px}.v-slider.v-input--horizontal>.v-input__control{min-height:32px;display:flex;align-items:center}.v-slider.v-input--vertical{justify-content:center;margin-top:12px;margin-bottom:12px}.v-slider.v-input--vertical>.v-input__control{min-height:300px}.v-slider.v-input--disabled{pointer-events:none}.v-slider--has-labels>.v-input__control{margin-bottom:4px}.v-slider__label{margin-inline-end:12px}.v-slider-thumb{touch-action:none;color:rgb(var(--v-theme-surface-variant))}.v-input--error:not(.v-input--disabled) .v-slider-thumb{color:inherit}.v-slider-thumb__label{background:rgba(var(--v-theme-surface-variant),.7);color:rgb(var(--v-theme-on-surface-variant))}.v-slider-thumb__label:before{color:rgba(var(--v-theme-surface-variant),.7)}.v-slider-thumb{outline:none;position:absolute;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-slider-thumb__surface{cursor:pointer;width:var(--v-slider-thumb-size);height:var(--v-slider-thumb-size);border-radius:50%;-webkit-user-select:none;user-select:none;background-color:currentColor}@media (forced-colors: active){.v-slider-thumb__surface{background-color:highlight}}.v-slider-thumb__surface:before{transition:.3s cubic-bezier(.4,0,.2,1);content:"";color:inherit;top:0;left:0;width:100%;height:100%;border-radius:50%;background:currentColor;position:absolute;pointer-events:none;opacity:0}.v-slider-thumb__surface:after{content:"";width:42px;height:42px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.v-slider-thumb__label-container{position:absolute;transition:.2s cubic-bezier(.4,0,1,1)}.v-slider-thumb__label{display:flex;align-items:center;justify-content:center;font-size:.75rem;min-width:35px;height:25px;border-radius:4px;padding:6px;position:absolute;-webkit-user-select:none;user-select:none;transition:.2s cubic-bezier(.4,0,1,1)}.v-slider-thumb__label:before{content:"";width:0;height:0;position:absolute}.v-slider-thumb__ripple{position:absolute;left:calc(var(--v-slider-thumb-size) / -2);top:calc(var(--v-slider-thumb-size) / -2);width:calc(var(--v-slider-thumb-size) * 2);height:calc(var(--v-slider-thumb-size) * 2);background:inherit}.v-slider.v-input--horizontal .v-slider-thumb{top:50%;transform:translateY(-50%);inset-inline-start:calc(var(--v-slider-thumb-position) - var(--v-slider-thumb-size) / 2)}.v-slider.v-input--horizontal .v-slider-thumb__label-container{left:calc(var(--v-slider-thumb-size) / 2);top:0}.v-slider.v-input--horizontal .v-slider-thumb__label{bottom:calc(var(--v-slider-thumb-size) / 2)}.v-locale--is-ltr.v-slider.v-input--horizontal .v-slider-thumb__label,.v-locale--is-ltr .v-slider.v-input--horizontal .v-slider-thumb__label{transform:translate(-50%)}.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-thumb__label,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-thumb__label{transform:translate(50%)}.v-slider.v-input--horizontal .v-slider-thumb__label:before{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid currentColor;bottom:-6px}.v-slider.v-input--vertical .v-slider-thumb{top:calc(var(--v-slider-thumb-position) - var(--v-slider-thumb-size) / 2)}.v-slider.v-input--vertical .v-slider-thumb__label-container{top:calc(var(--v-slider-thumb-size) / 2);right:0}.v-slider.v-input--vertical .v-slider-thumb__label{top:-12.5px;left:calc(var(--v-slider-thumb-size) / 2)}.v-slider.v-input--vertical .v-slider-thumb__label:before{border-right:6px solid currentColor;border-top:6px solid transparent;border-bottom:6px solid transparent;left:-6px}.v-slider-thumb--focused .v-slider-thumb__surface:before{transform:scale(2);opacity:var(--v-focus-opacity)}.v-slider-thumb--pressed{transition:none}.v-slider-thumb--pressed .v-slider-thumb__surface:before{opacity:var(--v-pressed-opacity)}@media (hover: hover){.v-slider-thumb:hover .v-slider-thumb__surface:before{transform:scale(2)}.v-slider-thumb:hover:not(.v-slider-thumb--focused) .v-slider-thumb__surface:before{opacity:var(--v-hover-opacity)}}.v-slider-track__background{background-color:rgb(var(--v-theme-surface-variant))}@media (forced-colors: active){.v-slider-track__background{background-color:highlight}}.v-slider-track__fill{background-color:rgb(var(--v-theme-surface-variant))}@media (forced-colors: active){.v-slider-track__fill{background-color:highlight}}.v-slider-track__tick{background-color:rgb(var(--v-theme-surface-variant))}.v-slider-track__tick--filled{background-color:rgb(var(--v-theme-surface-light))}.v-slider-track{border-radius:6px}@media (forced-colors: active){.v-slider-track{border:thin solid buttontext}}.v-slider-track__background,.v-slider-track__fill{position:absolute;transition:.3s cubic-bezier(.25,.8,.5,1);border-radius:inherit}.v-slider--pressed .v-slider-track__background,.v-slider--pressed .v-slider-track__fill{transition:none}.v-input--error:not(.v-input--disabled) .v-slider-track__background,.v-input--error:not(.v-input--disabled) .v-slider-track__fill{background-color:currentColor}.v-slider-track__ticks{height:100%;width:100%;position:relative}.v-slider-track__tick{position:absolute;opacity:0;transition:.2s opacity cubic-bezier(.4,0,.2,1);border-radius:2px;width:var(--v-slider-tick-size);height:var(--v-slider-tick-size);transform:translate(calc(var(--v-slider-tick-size) / -2),calc(var(--v-slider-tick-size) / -2))}.v-locale--is-ltr.v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-ltr .v-slider-track__tick--first .v-slider-track__tick-label{transform:none}.v-locale--is-rtl.v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-rtl .v-slider-track__tick--first .v-slider-track__tick-label{transform:translate(100%)}.v-locale--is-ltr.v-slider-track__tick--last .v-slider-track__tick-label,.v-locale--is-ltr .v-slider-track__tick--last .v-slider-track__tick-label{transform:translate(-100%)}.v-locale--is-rtl.v-slider-track__tick--last .v-slider-track__tick-label,.v-locale--is-rtl .v-slider-track__tick--last .v-slider-track__tick-label{transform:none}.v-slider-track__tick-label{position:absolute;-webkit-user-select:none;user-select:none;white-space:nowrap}.v-slider.v-input--horizontal .v-slider-track{display:flex;align-items:center;width:100%;height:calc(var(--v-slider-track-size) + 2px);touch-action:pan-y}.v-slider.v-input--horizontal .v-slider-track__background{height:var(--v-slider-track-size)}.v-slider.v-input--horizontal .v-slider-track__fill{height:inherit}.v-slider.v-input--horizontal .v-slider-track__tick{margin-top:calc(calc(var(--v-slider-track-size) + 2px) / 2)}.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-track__tick,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-track__tick{transform:translate(calc(var(--v-slider-tick-size) / 2),calc(var(--v-slider-tick-size) / -2))}.v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label{margin-top:calc(var(--v-slider-track-size) / 2 + 8px)}.v-locale--is-ltr.v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label,.v-locale--is-ltr .v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label{transform:translate(-50%)}.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-track__tick .v-slider-track__tick-label{transform:translate(50%)}.v-slider.v-input--horizontal .v-slider-track__tick--first{margin-inline-start:calc(var(--v-slider-tick-size) + 1px)}.v-locale--is-ltr.v-slider.v-input--horizontal .v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-ltr .v-slider.v-input--horizontal .v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-track__tick--first .v-slider-track__tick-label,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-track__tick--first .v-slider-track__tick-label{transform:translate(0)}.v-slider.v-input--horizontal .v-slider-track__tick--last{margin-inline-start:calc(100% - var(--v-slider-tick-size) - 1px)}.v-locale--is-ltr.v-slider.v-input--horizontal .v-slider-track__tick--last .v-slider-track__tick-label,.v-locale--is-ltr .v-slider.v-input--horizontal .v-slider-track__tick--last .v-slider-track__tick-label{transform:translate(-100%)}.v-locale--is-rtl.v-slider.v-input--horizontal .v-slider-track__tick--last .v-slider-track__tick-label,.v-locale--is-rtl .v-slider.v-input--horizontal .v-slider-track__tick--last .v-slider-track__tick-label{transform:translate(100%)}.v-slider.v-input--vertical .v-slider-track{height:100%;display:flex;justify-content:center;width:calc(var(--v-slider-track-size) + 2px);touch-action:pan-x}.v-slider.v-input--vertical .v-slider-track__background{width:var(--v-slider-track-size)}.v-slider.v-input--vertical .v-slider-track__fill{width:inherit}.v-slider.v-input--vertical .v-slider-track__ticks{height:100%}.v-slider.v-input--vertical .v-slider-track__tick{margin-inline-start:calc(calc(var(--v-slider-track-size) + 2px) / 2);transform:translate(calc(var(--v-slider-tick-size) / -2),calc(var(--v-slider-tick-size) / 2))}.v-locale--is-rtl.v-slider.v-input--vertical .v-slider-track__tick,.v-locale--is-rtl .v-slider.v-input--vertical .v-slider-track__tick{transform:translate(calc(var(--v-slider-tick-size) / 2),calc(var(--v-slider-tick-size) / 2))}.v-slider.v-input--vertical .v-slider-track__tick--first{bottom:calc(0% + var(--v-slider-tick-size) + 1px)}.v-slider.v-input--vertical .v-slider-track__tick--last{bottom:calc(100% - var(--v-slider-tick-size) - 1px)}.v-slider.v-input--vertical .v-slider-track__tick .v-slider-track__tick-label{margin-inline-start:calc(var(--v-slider-track-size) / 2 + 12px);transform:translateY(-50%)}.v-slider-track__ticks--always-show .v-slider-track__tick,.v-slider--focused .v-slider-track__tick{opacity:1}.v-slider-track__background--opacity{opacity:.38}.v-color-picker-swatches{overflow-y:auto}.v-color-picker-swatches>div{display:flex;flex-wrap:wrap;justify-content:center;padding:8px}.v-color-picker-swatches__swatch{display:flex;flex-direction:column;margin-bottom:10px}.v-color-picker-swatches__color{position:relative;height:18px;max-height:18px;width:45px;margin:2px 4px;border-radius:2px;-webkit-user-select:none;user-select:none;overflow:hidden;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAACRJREFUKFNjPHTo0H8GJGBnZ8eIzGekgwJk+0BsdCtRHEQbBQBbbh0dIGKknQAAAABJRU5ErkJggg==) repeat;cursor:pointer}.v-color-picker-swatches__color>div{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.v-sheet{display:block}.v-sheet{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-sheet--border{border-width:thin;box-shadow:none}.v-sheet{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-sheet--absolute{position:absolute}.v-sheet--fixed{position:fixed}.v-sheet--relative{position:relative}.v-sheet--sticky{position:sticky}.v-sheet{border-radius:0}.v-sheet{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-sheet--rounded{border-radius:4px}.v-combobox .v-field .v-text-field__prefix,.v-combobox .v-field .v-text-field__suffix,.v-combobox .v-field .v-field__input,.v-combobox .v-field.v-field{cursor:text}.v-combobox .v-field .v-field__input>input{flex:1 1}.v-combobox .v-field input{min-width:64px}.v-combobox .v-field:not(.v-field--focused) input{min-width:0}.v-combobox .v-field--dirty .v-combobox__selection{margin-inline-end:2px}.v-combobox .v-combobox__selection-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-combobox__content{overflow:hidden}.v-combobox__content{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-combobox__content{border-radius:4px}.v-combobox__mask{background:rgb(var(--v-theme-surface-light))}.v-combobox__selection{display:inline-flex;align-items:center;height:1.5rem;letter-spacing:inherit;line-height:inherit;max-width:calc(100% - 4px)}.v-combobox__selection:first-child{margin-inline-start:0}.v-combobox--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-combobox--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-combobox--selecting-index .v-combobox__selection{opacity:var(--v-medium-emphasis-opacity)}.v-combobox--selecting-index .v-combobox__selection--selected{opacity:1}.v-combobox--selecting-index .v-field__input>input{caret-color:transparent}.v-combobox--single:not(.v-combobox--selection-slot).v-text-field input{flex:1 1;position:absolute;left:0;right:0;width:100%;padding-inline:inherit}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--active input{transition:none}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--dirty:not(.v-field--focused) input{opacity:0}.v-combobox--single:not(.v-combobox--selection-slot) .v-field--focused .v-combobox__selection{opacity:0}.v-combobox__menu-icon{margin-inline-start:4px;transition:.2s cubic-bezier(.4,0,.2,1)}.v-combobox--active-menu .v-combobox__menu-icon{opacity:var(--v-high-emphasis-opacity);transform:rotate(180deg)}.v-data-table{width:100%}.v-data-table__table{width:100%;border-collapse:separate;border-spacing:0}.v-data-table__tr--focus{border:1px dotted black}.v-data-table__tr--clickable{cursor:pointer}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--align-end,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--align-end,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--align-end,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--align-end{text-align:end}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--align-end .v-data-table-header__content,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--align-end .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--align-end .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--align-end .v-data-table-header__content{flex-direction:row-reverse}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--align-center,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--align-center,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--align-center,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--align-center{text-align:center}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--align-center .v-data-table-header__content,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--align-center .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--align-center .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--align-center .v-data-table-header__content{justify-content:center}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--no-padding,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--no-padding,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--no-padding,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--no-padding{padding:0 8px}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--nowrap,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--nowrap,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--nowrap,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--nowrap{text-overflow:ellipsis;text-wrap:nowrap;overflow:hidden}.v-data-table .v-table__wrapper>table>thead>tr>td.v-data-table-column--nowrap .v-data-table-header__content,.v-data-table .v-table__wrapper>table>thead>tr th.v-data-table-column--nowrap .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr>td.v-data-table-column--nowrap .v-data-table-header__content,.v-data-table .v-table__wrapper>table tbody>tr th.v-data-table-column--nowrap .v-data-table-header__content{display:contents}.v-data-table .v-table__wrapper>table>thead>tr>th,.v-data-table .v-table__wrapper>table tbody>tr>th{align-items:center}.v-data-table .v-table__wrapper>table>thead>tr>th.v-data-table__th--fixed,.v-data-table .v-table__wrapper>table tbody>tr>th.v-data-table__th--fixed{position:sticky}.v-data-table .v-table__wrapper>table>thead>tr>th.v-data-table__th--sortable:hover,.v-data-table .v-table__wrapper>table tbody>tr>th.v-data-table__th--sortable:hover{cursor:pointer;color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-data-table .v-table__wrapper>table>thead>tr>th:not(.v-data-table__th--sorted) .v-data-table-header__sort-icon,.v-data-table .v-table__wrapper>table tbody>tr>th:not(.v-data-table__th--sorted) .v-data-table-header__sort-icon{opacity:0}.v-data-table .v-table__wrapper>table>thead>tr>th:not(.v-data-table__th--sorted):hover .v-data-table-header__sort-icon,.v-data-table .v-table__wrapper>table tbody>tr>th:not(.v-data-table__th--sorted):hover .v-data-table-header__sort-icon{opacity:.5}.v-data-table .v-table__wrapper>table>thead>tr.v-data-table__tr--mobile>td,.v-data-table .v-table__wrapper>table tbody>tr.v-data-table__tr--mobile>td{height:fit-content}.v-data-table-column--fixed,.v-data-table__th--sticky{background:rgb(var(--v-theme-surface));position:sticky!important;left:0;z-index:1}.v-data-table-column--last-fixed{border-right:1px solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-data-table.v-table--fixed-header>.v-table__wrapper>table>thead>tr>th.v-data-table-column--fixed{z-index:2}.v-data-table-group-header-row td{background:rgba(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface))}.v-data-table-group-header-row td>span{padding-left:5px}.v-data-table--loading .v-data-table__td{opacity:var(--v-disabled-opacity)}.v-data-table-group-header-row__column{padding-left:calc(var(--v-data-table-group-header-row-depth) * 16px)!important}.v-data-table-header__content{display:flex;align-items:center}.v-data-table-header__sort-badge{display:inline-flex;justify-content:center;align-items:center;font-size:.875rem;padding:4px;border-radius:50%;background:rgba(var(--v-border-color),var(--v-border-opacity));min-width:20px;min-height:20px;width:20px;height:20px}.v-data-table-progress>th{border:none!important;height:auto!important;padding:0!important}.v-data-table-progress__loader{position:relative}.v-data-table-rows-loading,.v-data-table-rows-no-data{text-align:center}.v-data-table__tr--mobile>.v-data-table__td--expanded-row{grid-template-columns:0;justify-content:center}.v-data-table__tr--mobile>.v-data-table__td--select-row{grid-template-columns:0;justify-content:end}.v-data-table__tr--mobile>td{align-items:center;column-gap:4px;display:grid;grid-template-columns:repeat(2,1fr);min-height:var(--v-table-row-height)}.v-data-table__tr--mobile>td:not(:last-child){border-bottom:0!important}.v-data-table__td-title{font-weight:500;text-align:left}.v-data-table__td-value{text-align:right}.v-data-table__td-sort-icon{color:rgba(var(--v-theme-on-surface),var(--v-disabled-opacity))}.v-data-table__td-sort-icon-active{color:rgba(var(--v-theme-on-surface))}.v-data-table-footer{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:8px 4px}.v-data-table-footer__items-per-page{align-items:center;display:flex;justify-content:center}.v-data-table-footer__items-per-page>span{padding-inline-end:8px}.v-data-table-footer__items-per-page>.v-select{width:90px}.v-data-table-footer__info{display:flex;justify-content:flex-end;min-width:116px;padding:0 16px}.v-data-table-footer__paginationz{align-items:center;display:flex;margin-inline-start:16px}.v-data-table-footer__page{padding:0 8px}.v-pagination__list{display:inline-flex;list-style-type:none;justify-content:center;width:100%}.v-pagination__item,.v-pagination__first,.v-pagination__prev,.v-pagination__next,.v-pagination__last{margin:.3rem}.v-table{font-size:.875rem;transition-duration:.28s;transition-property:box-shadow,opacity,background,height;transition-timing-function:cubic-bezier(.4,0,.2,1)}.v-table{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-table .v-table-divider{border-right:thin solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-table .v-table__wrapper>table>thead>tr>th{border-bottom:thin solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-table .v-table__wrapper>table>tbody>tr:not(:last-child)>td,.v-table .v-table__wrapper>table>tbody>tr:not(:last-child)>th{border-bottom:thin solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-table .v-table__wrapper>table>tfoot>tr>td,.v-table .v-table__wrapper>table>tfoot>tr>th{border-top:thin solid rgba(var(--v-border-color),var(--v-border-opacity))}.v-table.v-table--hover>.v-table__wrapper>table>tbody>tr>td{position:relative}.v-table.v-table--hover>.v-table__wrapper>table>tbody>tr:hover>td:after{background:rgba(var(--v-border-color),var(--v-hover-opacity));pointer-events:none}.v-table.v-table--hover>.v-table__wrapper>table>tbody>tr:hover>td:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-table.v-table--fixed-header>.v-table__wrapper>table>thead>tr>th{background:rgb(var(--v-theme-surface));box-shadow:inset 0 -1px rgba(var(--v-border-color),var(--v-border-opacity));z-index:1}.v-table.v-table--fixed-footer>tfoot>tr>th,.v-table.v-table--fixed-footer>tfoot>tr>td{background:rgb(var(--v-theme-surface));box-shadow:inset 0 1px rgba(var(--v-border-color),var(--v-border-opacity))}.v-table{border-radius:inherit;line-height:1.5;max-width:100%;display:flex;flex-direction:column}.v-table>.v-table__wrapper>table{width:100%;border-spacing:0}.v-table>.v-table__wrapper>table>tbody>tr>td,.v-table>.v-table__wrapper>table>tbody>tr>th,.v-table>.v-table__wrapper>table>thead>tr>td,.v-table>.v-table__wrapper>table>thead>tr>th,.v-table>.v-table__wrapper>table>tfoot>tr>td,.v-table>.v-table__wrapper>table>tfoot>tr>th{padding:0 16px;transition-duration:.28s;transition-property:box-shadow,opacity,background,height;transition-timing-function:cubic-bezier(.4,0,.2,1)}.v-table>.v-table__wrapper>table>tbody>tr>td,.v-table>.v-table__wrapper>table>thead>tr>td,.v-table>.v-table__wrapper>table>tfoot>tr>td{height:var(--v-table-row-height)}.v-table>.v-table__wrapper>table>tbody>tr>th,.v-table>.v-table__wrapper>table>thead>tr>th,.v-table>.v-table__wrapper>table>tfoot>tr>th{height:var(--v-table-header-height);font-weight:500;-webkit-user-select:none;user-select:none;text-align:start}.v-table--density-default{--v-table-header-height: 56px;--v-table-row-height: 52px}.v-table--density-comfortable{--v-table-header-height: 48px;--v-table-row-height: 44px}.v-table--density-compact{--v-table-header-height: 40px;--v-table-row-height: 36px}.v-table__wrapper{border-radius:inherit;overflow:auto;flex:1 1 auto}.v-table--has-top>.v-table__wrapper>table>tbody>tr:first-child:hover>td:first-child{border-top-left-radius:0}.v-table--has-top>.v-table__wrapper>table>tbody>tr:first-child:hover>td:last-child{border-top-right-radius:0}.v-table--has-bottom>.v-table__wrapper>table>tbody>tr:last-child:hover>td:first-child{border-bottom-left-radius:0}.v-table--has-bottom>.v-table__wrapper>table>tbody>tr:last-child:hover>td:last-child{border-bottom-right-radius:0}.v-table--fixed-height>.v-table__wrapper{overflow-y:auto}.v-table--fixed-header>.v-table__wrapper>table>thead{position:sticky;top:0;z-index:2}.v-table--fixed-header>.v-table__wrapper>table>thead>tr>th{border-bottom:0px!important}.v-table--fixed-footer>.v-table__wrapper>table>tfoot>tr{position:sticky;bottom:0;z-index:1}.v-table--fixed-footer>.v-table__wrapper>table>tfoot>tr>td,.v-table--fixed-footer>.v-table__wrapper>table>tfoot>tr>th{border-top:0px!important}.v-date-picker{overflow:hidden;width:328px}.v-date-picker--show-week{width:368px}.v-date-picker-controls{display:flex;align-items:center;justify-content:space-between;font-size:.875rem;padding-top:4px;padding-bottom:4px;padding-inline-start:6px;padding-inline-end:12px}.v-date-picker-controls>.v-btn:first-child{text-transform:none;font-weight:400;line-height:initial;letter-spacing:initial}.v-date-picker-controls--variant-classic{padding-inline-start:12px}.v-date-picker-controls--variant-modern .v-date-picker__title:not(:hover){opacity:.7}.v-date-picker--month .v-date-picker-controls--variant-modern .v-date-picker__title{cursor:pointer}.v-date-picker--year .v-date-picker-controls--variant-modern .v-date-picker__title{opacity:1}.v-date-picker-controls .v-btn:last-child{margin-inline-start:4px}.v-date-picker--year .v-date-picker-controls .v-date-picker-controls__mode-btn{transform:rotate(180deg)}.v-date-picker-controls__date{margin-inline-end:4px}.v-date-picker-controls--variant-classic .v-date-picker-controls__date{margin:auto;text-align:center}.v-date-picker-controls__month{display:flex}.v-locale--is-rtl.v-date-picker-controls__month,.v-locale--is-rtl .v-date-picker-controls__month{flex-direction:row-reverse}.v-date-picker-controls--variant-classic .v-date-picker-controls__month{flex:1 0 auto}.v-date-picker__title{display:inline-block}.v-container{width:100%;padding:16px;margin-right:auto;margin-left:auto}@media (min-width: 960px){.v-container{max-width:900px}}@media (min-width: 1280px){.v-container{max-width:1200px}}@media (min-width: 1920px){.v-container{max-width:1800px}}@media (min-width: 2560px){.v-container{max-width:2400px}}.v-container--fluid{max-width:100%}.v-container.fill-height{align-items:center;display:flex;flex-wrap:wrap}.v-row{display:flex;flex-wrap:wrap;flex:1 1 auto;margin:-12px}.v-row+.v-row{margin-top:12px}.v-row+.v-row--dense{margin-top:4px}.v-row--dense{margin:-4px}.v-row--dense>.v-col,.v-row--dense>[class*=v-col-]{padding:4px}.v-row.v-row--no-gutters{margin:0}.v-row.v-row--no-gutters>.v-col,.v-row.v-row--no-gutters>[class*=v-col-]{padding:0}.v-spacer{flex-grow:1}.v-col-xxl,.v-col-xxl-auto,.v-col-xxl-12,.v-col-xxl-11,.v-col-xxl-10,.v-col-xxl-9,.v-col-xxl-8,.v-col-xxl-7,.v-col-xxl-6,.v-col-xxl-5,.v-col-xxl-4,.v-col-xxl-3,.v-col-xxl-2,.v-col-xxl-1,.v-col-xl,.v-col-xl-auto,.v-col-xl-12,.v-col-xl-11,.v-col-xl-10,.v-col-xl-9,.v-col-xl-8,.v-col-xl-7,.v-col-xl-6,.v-col-xl-5,.v-col-xl-4,.v-col-xl-3,.v-col-xl-2,.v-col-xl-1,.v-col-lg,.v-col-lg-auto,.v-col-lg-12,.v-col-lg-11,.v-col-lg-10,.v-col-lg-9,.v-col-lg-8,.v-col-lg-7,.v-col-lg-6,.v-col-lg-5,.v-col-lg-4,.v-col-lg-3,.v-col-lg-2,.v-col-lg-1,.v-col-md,.v-col-md-auto,.v-col-md-12,.v-col-md-11,.v-col-md-10,.v-col-md-9,.v-col-md-8,.v-col-md-7,.v-col-md-6,.v-col-md-5,.v-col-md-4,.v-col-md-3,.v-col-md-2,.v-col-md-1,.v-col-sm,.v-col-sm-auto,.v-col-sm-12,.v-col-sm-11,.v-col-sm-10,.v-col-sm-9,.v-col-sm-8,.v-col-sm-7,.v-col-sm-6,.v-col-sm-5,.v-col-sm-4,.v-col-sm-3,.v-col-sm-2,.v-col-sm-1,.v-col,.v-col-auto,.v-col-12,.v-col-11,.v-col-10,.v-col-9,.v-col-8,.v-col-7,.v-col-6,.v-col-5,.v-col-4,.v-col-3,.v-col-2,.v-col-1{width:100%;padding:12px}.v-col{flex-basis:0;flex-grow:1;max-width:100%}.v-col-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-3{flex:0 0 25%;max-width:25%}.v-col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-6{flex:0 0 50%;max-width:50%}.v-col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-9{flex:0 0 75%;max-width:75%}.v-col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-12{flex:0 0 100%;max-width:100%}.offset-1{margin-inline-start:8.3333333333%}.offset-2{margin-inline-start:16.6666666667%}.offset-3{margin-inline-start:25%}.offset-4{margin-inline-start:33.3333333333%}.offset-5{margin-inline-start:41.6666666667%}.offset-6{margin-inline-start:50%}.offset-7{margin-inline-start:58.3333333333%}.offset-8{margin-inline-start:66.6666666667%}.offset-9{margin-inline-start:75%}.offset-10{margin-inline-start:83.3333333333%}.offset-11{margin-inline-start:91.6666666667%}@media (min-width: 600px){.v-col-sm{flex-basis:0;flex-grow:1;max-width:100%}.v-col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-sm-3{flex:0 0 25%;max-width:25%}.v-col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-sm-6{flex:0 0 50%;max-width:50%}.v-col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-sm-9{flex:0 0 75%;max-width:75%}.v-col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-sm-12{flex:0 0 100%;max-width:100%}.offset-sm-0{margin-inline-start:0}.offset-sm-1{margin-inline-start:8.3333333333%}.offset-sm-2{margin-inline-start:16.6666666667%}.offset-sm-3{margin-inline-start:25%}.offset-sm-4{margin-inline-start:33.3333333333%}.offset-sm-5{margin-inline-start:41.6666666667%}.offset-sm-6{margin-inline-start:50%}.offset-sm-7{margin-inline-start:58.3333333333%}.offset-sm-8{margin-inline-start:66.6666666667%}.offset-sm-9{margin-inline-start:75%}.offset-sm-10{margin-inline-start:83.3333333333%}.offset-sm-11{margin-inline-start:91.6666666667%}}@media (min-width: 960px){.v-col-md{flex-basis:0;flex-grow:1;max-width:100%}.v-col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-md-3{flex:0 0 25%;max-width:25%}.v-col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-md-6{flex:0 0 50%;max-width:50%}.v-col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-md-9{flex:0 0 75%;max-width:75%}.v-col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-md-12{flex:0 0 100%;max-width:100%}.offset-md-0{margin-inline-start:0}.offset-md-1{margin-inline-start:8.3333333333%}.offset-md-2{margin-inline-start:16.6666666667%}.offset-md-3{margin-inline-start:25%}.offset-md-4{margin-inline-start:33.3333333333%}.offset-md-5{margin-inline-start:41.6666666667%}.offset-md-6{margin-inline-start:50%}.offset-md-7{margin-inline-start:58.3333333333%}.offset-md-8{margin-inline-start:66.6666666667%}.offset-md-9{margin-inline-start:75%}.offset-md-10{margin-inline-start:83.3333333333%}.offset-md-11{margin-inline-start:91.6666666667%}}@media (min-width: 1280px){.v-col-lg{flex-basis:0;flex-grow:1;max-width:100%}.v-col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-lg-3{flex:0 0 25%;max-width:25%}.v-col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-lg-6{flex:0 0 50%;max-width:50%}.v-col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-lg-9{flex:0 0 75%;max-width:75%}.v-col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-lg-12{flex:0 0 100%;max-width:100%}.offset-lg-0{margin-inline-start:0}.offset-lg-1{margin-inline-start:8.3333333333%}.offset-lg-2{margin-inline-start:16.6666666667%}.offset-lg-3{margin-inline-start:25%}.offset-lg-4{margin-inline-start:33.3333333333%}.offset-lg-5{margin-inline-start:41.6666666667%}.offset-lg-6{margin-inline-start:50%}.offset-lg-7{margin-inline-start:58.3333333333%}.offset-lg-8{margin-inline-start:66.6666666667%}.offset-lg-9{margin-inline-start:75%}.offset-lg-10{margin-inline-start:83.3333333333%}.offset-lg-11{margin-inline-start:91.6666666667%}}@media (min-width: 1920px){.v-col-xl{flex-basis:0;flex-grow:1;max-width:100%}.v-col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-xl-3{flex:0 0 25%;max-width:25%}.v-col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-xl-6{flex:0 0 50%;max-width:50%}.v-col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-xl-9{flex:0 0 75%;max-width:75%}.v-col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-xl-12{flex:0 0 100%;max-width:100%}.offset-xl-0{margin-inline-start:0}.offset-xl-1{margin-inline-start:8.3333333333%}.offset-xl-2{margin-inline-start:16.6666666667%}.offset-xl-3{margin-inline-start:25%}.offset-xl-4{margin-inline-start:33.3333333333%}.offset-xl-5{margin-inline-start:41.6666666667%}.offset-xl-6{margin-inline-start:50%}.offset-xl-7{margin-inline-start:58.3333333333%}.offset-xl-8{margin-inline-start:66.6666666667%}.offset-xl-9{margin-inline-start:75%}.offset-xl-10{margin-inline-start:83.3333333333%}.offset-xl-11{margin-inline-start:91.6666666667%}}@media (min-width: 2560px){.v-col-xxl{flex-basis:0;flex-grow:1;max-width:100%}.v-col-xxl-auto{flex:0 0 auto;width:auto;max-width:100%}.v-col-xxl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.v-col-xxl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.v-col-xxl-3{flex:0 0 25%;max-width:25%}.v-col-xxl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.v-col-xxl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.v-col-xxl-6{flex:0 0 50%;max-width:50%}.v-col-xxl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.v-col-xxl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.v-col-xxl-9{flex:0 0 75%;max-width:75%}.v-col-xxl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.v-col-xxl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.v-col-xxl-12{flex:0 0 100%;max-width:100%}.offset-xxl-0{margin-inline-start:0}.offset-xxl-1{margin-inline-start:8.3333333333%}.offset-xxl-2{margin-inline-start:16.6666666667%}.offset-xxl-3{margin-inline-start:25%}.offset-xxl-4{margin-inline-start:33.3333333333%}.offset-xxl-5{margin-inline-start:41.6666666667%}.offset-xxl-6{margin-inline-start:50%}.offset-xxl-7{margin-inline-start:58.3333333333%}.offset-xxl-8{margin-inline-start:66.6666666667%}.offset-xxl-9{margin-inline-start:75%}.offset-xxl-10{margin-inline-start:83.3333333333%}.offset-xxl-11{margin-inline-start:91.6666666667%}}.v-date-picker-header{align-items:flex-end;height:70px;display:grid;grid-template-areas:"prepend content append";grid-template-columns:min-content minmax(0,1fr) min-content;overflow:hidden;padding-inline:24px 12px;padding-bottom:12px}.v-date-picker-header__append{grid-area:append}.v-date-picker-header__prepend{grid-area:prepend;padding-inline-start:8px}.v-date-picker-header__content{align-items:center;display:inline-flex;font-size:32px;line-height:40px;grid-area:content;justify-content:space-between}.v-date-picker-header--clickable .v-date-picker-header__content{cursor:pointer}.v-date-picker-header--clickable .v-date-picker-header__content:not(:hover){opacity:.7}.date-picker-header-transition-enter-active,.date-picker-header-reverse-transition-enter-active,.date-picker-header-transition-leave-active,.date-picker-header-reverse-transition-leave-active{transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.date-picker-header-transition-enter-from{transform:translateY(100%)}.date-picker-header-transition-leave-to{opacity:0;transform:translateY(-100%)}.date-picker-header-reverse-transition-enter-from{transform:translateY(-100%)}.date-picker-header-reverse-transition-leave-to{opacity:0;transform:translateY(100%)}.v-date-picker-month{display:flex;justify-content:center;padding:0 12px 8px;--v-date-picker-month-day-diff: 4px}.v-date-picker-month__weeks{display:grid;grid-template-rows:min-content min-content min-content min-content min-content min-content min-content;column-gap:4px;font-size:.85rem}.v-date-picker-month__weeks+.v-date-picker-month__days{grid-row-gap:0}.v-date-picker-month__weekday{font-size:.85rem}.v-date-picker-month__days{display:grid;grid-template-columns:min-content min-content min-content min-content min-content min-content min-content;column-gap:4px;flex:1 1;justify-content:space-around}.v-date-picker-month__day{align-items:center;display:flex;justify-content:center;position:relative;height:40px;width:40px}.v-date-picker-month__day--selected .v-btn{background-color:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-date-picker-month__day .v-btn.v-date-picker-month__day-btn{--v-btn-height: 24px;--v-btn-size: .85rem}.v-date-picker-month__day--week{font-size:var(--v-btn-size)}.v-date-picker-month__day--adjacent{opacity:.5}.v-date-picker-month__day--hide-adjacent{opacity:0}.v-date-picker-months{height:288px}.v-date-picker-months__content{align-items:center;display:grid;flex:1 1;height:inherit;justify-content:space-around;grid-template-columns:repeat(2,1fr);grid-gap:0px 24px;padding-inline-start:36px;padding-inline-end:36px}.v-date-picker-months__content .v-btn{text-transform:none;padding-inline-start:8px;padding-inline-end:8px}.v-date-picker-years{height:288px;overflow-y:scroll}.v-date-picker-years__content{display:grid;flex:1 1;justify-content:space-around;grid-template-columns:repeat(3,1fr);gap:8px 24px;padding-inline:32px}.v-date-picker-years__content .v-btn{padding-inline:8px}.v-picker.v-sheet{display:grid;grid-auto-rows:min-content;grid-template-areas:"title" "header" "body";overflow:hidden}.v-picker.v-sheet{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-picker.v-sheet{border-radius:4px}.v-picker.v-sheet.v-picker--with-actions{grid-template-areas:"title" "header" "body" "actions"}.v-picker__body{grid-area:body;overflow:hidden;position:relative}.v-picker__header{grid-area:header}.v-picker__actions{grid-area:actions;padding:0 12px 12px;display:flex;align-items:center;justify-content:flex-end}.v-picker__actions .v-btn{min-width:48px}.v-picker__actions .v-btn:not(:last-child){margin-inline-end:8px}.v-picker--landscape{grid-template-areas:"title" "header body" "header body"}.v-picker--landscape.v-picker--with-actions{grid-template-areas:"title" "header body" "header actions"}.v-picker-title{text-transform:uppercase;font-size:.75rem;grid-area:title;padding-inline:24px 12px;padding-top:16px;padding-bottom:16px;font-weight:400;letter-spacing:.1666666667em}.v-empty-state{align-items:center;display:flex;flex-direction:column;justify-content:center;min-height:100%;padding:16px}.v-empty-state--start{align-items:flex-start}.v-empty-state--center{align-items:center}.v-empty-state--end{align-items:flex-end}.v-empty-state__media{text-align:center;width:100%}.v-empty-state__media .v-icon{color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity))}.v-empty-state__headline{color:rgba(var(--v-theme-on-surface),var(--v-medium-emphasis-opacity));font-size:3.75rem;font-weight:300;line-height:1;text-align:center;margin-bottom:8px}.v-empty-state--mobile .v-empty-state__headline{font-size:2.125rem}.v-empty-state__title{font-size:1.25rem;font-weight:500;line-height:1.6;margin-bottom:4px;text-align:center}.v-empty-state__text{font-size:.875rem;font-weight:400;line-height:1.425;padding:0 16px;text-align:center}.v-empty-state__content{padding:24px 0}.v-empty-state__actions{display:flex;gap:8px;padding:16px}.v-empty-state__action-btn.v-btn{background-color:initial;color:initial}.v-expansion-panel{background-color:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-expansion-panel:not(:first-child):after{border-color:rgba(var(--v-border-color),var(--v-border-opacity))}.v-expansion-panel--disabled .v-expansion-panel-title{color:rgba(var(--v-theme-on-surface),.26)}.v-expansion-panel--disabled .v-expansion-panel-title .v-expansion-panel-title__overlay{opacity:.4615384615}.v-expansion-panels{display:flex;flex-wrap:wrap;justify-content:center;list-style-type:none;padding:0;width:100%;position:relative;z-index:1}.v-expansion-panels:not(.v-expansion-panels--variant-accordion)>:not(:first-child):not(:last-child):not(.v-expansion-panel--active):not(.v-expansion-panel--before-active){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.v-expansion-panels:not(.v-expansion-panels--variant-accordion)>:not(:first-child):not(:last-child):not(.v-expansion-panel--active):not(.v-expansion-panel--after-active){border-top-left-radius:0!important;border-top-right-radius:0!important}.v-expansion-panels:not(.v-expansion-panels--variant-accordion)>:first-child:not(:last-child):not(.v-expansion-panel--active):not(.v-expansion-panel--before-active){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.v-expansion-panels:not(.v-expansion-panels--variant-accordion)>:last-child:not(:first-child):not(.v-expansion-panel--active):not(.v-expansion-panel--after-active){border-top-left-radius:0!important;border-top-right-radius:0!important}.v-expansion-panels--variant-accordion>:first-child:not(:last-child){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.v-expansion-panels--variant-accordion>:last-child:not(:first-child){border-top-left-radius:0!important;border-top-right-radius:0!important}.v-expansion-panels--variant-accordion>:last-child:not(:first-child) .v-expansion-panel-title--active{border-bottom-left-radius:initial;border-bottom-right-radius:initial}.v-expansion-panels--variant-accordion>:not(:first-child):not(:last-child){border-radius:0!important}.v-expansion-panels--variant-accordion .v-expansion-panel-title__overlay{transition:.3s border-radius cubic-bezier(.4,0,.2,1)}.v-expansion-panel{flex:1 0 100%;max-width:100%;position:relative;transition:.3s all cubic-bezier(.4,0,.2,1);transition-property:margin-top,border-radius,border,max-width;border-radius:4px}.v-expansion-panel:not(:first-child):after{border-top-style:solid;border-top-width:thin;content:"";left:0;position:absolute;right:0;top:0;transition:.3s opacity cubic-bezier(.4,0,.2,1)}.v-expansion-panel--disabled .v-expansion-panel-title{pointer-events:none}.v-expansion-panel--active:not(:first-child),.v-expansion-panel--active+.v-expansion-panel{margin-top:16px}.v-expansion-panel--active:not(:first-child):after,.v-expansion-panel--active+.v-expansion-panel:after{opacity:0}.v-expansion-panel--active>.v-expansion-panel-title{border-bottom-left-radius:0;border-bottom-right-radius:0}.v-expansion-panel--active>.v-expansion-panel-title:not(.v-expansion-panel-title--static){min-height:64px}.v-expansion-panel__shadow{border-radius:inherit;z-index:-1}.v-expansion-panel__shadow{position:absolute;top:0;left:0;width:100%;height:100%}.v-expansion-panel__shadow{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-expansion-panel-title{align-items:center;text-align:start;border-radius:inherit;display:flex;font-size:.9375rem;line-height:1;min-height:48px;outline:none;padding:16px 24px;position:relative;transition:.3s min-height cubic-bezier(.4,0,.2,1);width:100%;justify-content:space-between}.v-expansion-panel-title:hover>.v-expansion-panel-title__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-expansion-panel-title:focus-visible>.v-expansion-panel-title__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-expansion-panel-title:focus>.v-expansion-panel-title__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-expansion-panel-title--focusable.v-expansion-panel-title--active .v-expansion-panel-title__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-expansion-panel-title--focusable.v-expansion-panel-title--active:hover .v-expansion-panel-title__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-expansion-panel-title--focusable.v-expansion-panel-title--active:focus-visible .v-expansion-panel-title__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-expansion-panel-title--focusable.v-expansion-panel-title--active:focus .v-expansion-panel-title__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-expansion-panel-title__overlay{background-color:currentColor;border-radius:inherit;opacity:0}.v-expansion-panel-title__overlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-expansion-panel-title__icon{display:inline-flex;margin-bottom:-4px;margin-top:-4px;-webkit-user-select:none;user-select:none;margin-inline-start:auto}.v-expansion-panel-text{display:flex}.v-expansion-panel-text__wrapper{padding:8px 24px 16px;flex:1 1 auto;max-width:100%}.v-expansion-panels--variant-accordion>.v-expansion-panel{margin-top:0}.v-expansion-panels--variant-accordion>.v-expansion-panel:after{opacity:1}.v-expansion-panels--variant-popout>.v-expansion-panel{max-width:calc(100% - 32px)}.v-expansion-panels--variant-popout>.v-expansion-panel--active{max-width:calc(100% + 16px)}.v-expansion-panels--variant-inset>.v-expansion-panel{max-width:100%}.v-expansion-panels--variant-inset>.v-expansion-panel--active{max-width:calc(100% - 32px)}.v-expansion-panels--flat>.v-expansion-panel:after{border-top:none}.v-expansion-panels--flat>.v-expansion-panel .v-expansion-panel__shadow{display:none}.v-expansion-panels--tile{border-radius:0}.v-expansion-panels--tile>.v-expansion-panel{border-radius:0}.v-fab{align-items:center;display:inline-flex;flex:1 1 auto;pointer-events:none;position:relative;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);vertical-align:middle}.v-fab .v-btn{pointer-events:auto}.v-fab .v-btn--variant-elevated{box-shadow:0 3px 3px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 3px 4px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 8px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-fab--app,.v-fab--absolute{display:flex}.v-fab--start,.v-fab--left{justify-content:flex-start}.v-fab--center{align-items:center;justify-content:center}.v-fab--end,.v-fab--right{justify-content:flex-end}.v-fab--bottom{align-items:flex-end}.v-fab--top{align-items:flex-start}.v-fab--extended .v-btn{border-radius:9999px!important}.v-fab__container{align-self:center;display:inline-flex;position:absolute;vertical-align:middle}.v-fab--app .v-fab__container{margin:12px}.v-fab--absolute .v-fab__container{position:absolute;z-index:4}.v-fab--offset.v-fab--top .v-fab__container{transform:translateY(-50%)}.v-fab--offset.v-fab--bottom .v-fab__container{transform:translateY(50%)}.v-fab--top .v-fab__container{top:0}.v-fab--bottom .v-fab__container{bottom:0}.v-fab--left .v-fab__container,.v-fab--start .v-fab__container{left:0}.v-fab--right .v-fab__container,.v-fab--end .v-fab__container{right:0}.v-file-input--hide.v-input .v-field,.v-file-input--hide.v-input .v-input__control,.v-file-input--hide.v-input .v-input__details{display:none}.v-file-input--hide.v-input .v-input__prepend{grid-area:control;margin:0 auto}.v-file-input--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-file-input input[type=file]{height:100%;left:0;opacity:0;position:absolute;top:0;width:100%;z-index:1}.v-file-input .v-input__details{padding-inline:16px}.v-input--plain-underlined.v-file-input .v-input__details{padding-inline:0}.v-footer{align-items:center;display:flex;flex:1 1 auto;padding:8px 16px;position:relative;transition:.2s cubic-bezier(.4,0,.2,1);transition-property:height,width,transform,max-width,left,right,top,bottom}.v-footer{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-footer--border{border-width:thin;box-shadow:none}.v-footer{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-footer--absolute{position:absolute}.v-footer--fixed{position:fixed}.v-footer{border-radius:0}.v-footer{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-footer--rounded{border-radius:4px}.v-infinite-scroll--horizontal{display:flex;flex-direction:row;overflow-x:auto}.v-infinite-scroll--horizontal .v-infinite-scroll-intersect{height:100%;width:var(--v-infinite-margin-size, 1px)}.v-infinite-scroll--vertical{display:flex;flex-direction:column;overflow-y:auto}.v-infinite-scroll--vertical .v-infinite-scroll-intersect{height:1px;width:100%}.v-infinite-scroll-intersect{pointer-events:none;margin-top:var(--v-infinite-margin);margin-bottom:calc(var(--v-infinite-margin) * -1)}.v-infinite-scroll-intersect:nth-child(2){--v-infinite-margin: var(--v-infinite-margin-size, 1px)}.v-infinite-scroll-intersect:nth-last-child(2){--v-infinite-margin: calc(var(--v-infinite-margin-size, 1px) * -1)}.v-infinite-scroll__side{align-items:center;display:flex;justify-content:center;padding:8px}.v-item-group{flex:0 1 auto;max-width:100%;position:relative;transition:.2s cubic-bezier(.4,0,.2,1)}.v-kbd{background:rgb(var(--v-theme-kbd));color:rgb(var(--v-theme-on-kbd));border-radius:3px;display:inline;font-size:85%;font-weight:400;padding:.2em .4rem}.v-kbd{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-layout{--v-scrollbar-offset: 0px;display:flex;flex:1 1 auto}.v-layout--full-height{--v-scrollbar-offset: inherit;height:100%}.v-layout-item{position:absolute;transition:.2s cubic-bezier(.4,0,.2,1)}.v-layout-item--absolute{position:absolute}.v-locale-provider{display:contents}.v-main{flex:1 0 auto;max-width:100%;transition:.2s cubic-bezier(.4,0,.2,1);padding-left:var(--v-layout-left);padding-right:var(--v-layout-right);padding-top:var(--v-layout-top);padding-bottom:var(--v-layout-bottom)}.v-main__scroller{max-width:100%;position:relative}.v-main--scrollable{display:flex}.v-main--scrollable{position:absolute;top:0;left:0;width:100%;height:100%}.v-main--scrollable>.v-main__scroller{flex:1 1 auto;overflow-y:auto;--v-layout-left: 0px;--v-layout-right: 0px;--v-layout-top: 0px;--v-layout-bottom: 0px}.v-navigation-drawer{-webkit-overflow-scrolling:touch;background:rgb(var(--v-theme-surface));display:flex;flex-direction:column;height:100%;max-width:100%;pointer-events:auto;transition-duration:.2s;transition-property:box-shadow,transform,visibility,width,height,left,right,top,bottom;transition-timing-function:cubic-bezier(.4,0,.2,1);position:absolute}.v-navigation-drawer{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-navigation-drawer--border{border-width:thin;box-shadow:none}.v-navigation-drawer{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-navigation-drawer{background:rgb(var(--v-theme-surface));color:rgba(var(--v-theme-on-surface),var(--v-high-emphasis-opacity))}.v-navigation-drawer--rounded{border-radius:4px}.v-navigation-drawer--top,.v-navigation-drawer--bottom{max-height:-webkit-fill-available;overflow-y:auto}.v-navigation-drawer--top{top:0;border-bottom-width:thin}.v-navigation-drawer--bottom{left:0;border-top-width:thin}.v-navigation-drawer--left{top:0;left:0;right:auto;border-right-width:thin}.v-navigation-drawer--right{top:0;left:auto;right:0;border-left-width:thin}.v-navigation-drawer--floating{border:none}.v-navigation-drawer--temporary.v-navigation-drawer--active{box-shadow:0 8px 10px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 16px 24px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 6px 30px 5px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-navigation-drawer--sticky{height:auto;transition:box-shadow,transform,visibility,width,height,left,right}.v-navigation-drawer .v-list{overflow:hidden}.v-navigation-drawer__content{flex:0 1 auto;height:100%;max-width:100%;overflow-x:hidden;overflow-y:auto}.v-navigation-drawer__img{height:100%;left:0;position:absolute;top:0;width:100%;z-index:-1}.v-navigation-drawer__img img:not(.v-img__img){height:inherit;object-fit:cover;width:inherit}.v-navigation-drawer__scrim{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;opacity:.2;transition:opacity .2s cubic-bezier(.4,0,.2,1);z-index:1}.v-navigation-drawer__prepend,.v-navigation-drawer__append{flex:none;overflow:hidden}.v-otp-input{align-items:center;display:flex;justify-content:center;padding:.5rem 0;position:relative}.v-otp-input{border-radius:4px}.v-otp-input .v-field{height:100%}.v-otp-input__divider{margin:0 8px}.v-otp-input__content{align-items:center;display:flex;gap:.5rem;height:64px;padding:.5rem;justify-content:center;max-width:320px;position:relative;border-radius:inherit}.v-otp-input--divided .v-otp-input__content{max-width:360px}.v-otp-input__field{color:inherit;font-size:1.25rem;height:100%;outline:none;text-align:center;width:100%}.v-otp-input__field[type=number]::-webkit-outer-spin-button,.v-otp-input__field[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.v-otp-input__field[type=number]{-moz-appearance:textfield}.v-otp-input__loader{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.v-otp-input__loader .v-progress-linear{position:absolute}.v-parallax{position:relative;overflow:hidden}.v-parallax--active>.v-img__img{will-change:transform}.v-radio-group>.v-input__control{flex-direction:column}.v-radio-group>.v-input__control>.v-label{margin-inline-start:16px}.v-radio-group>.v-input__control>.v-label+.v-selection-control-group{padding-inline-start:6px;margin-top:8px}.v-radio-group .v-input__details{padding-inline:16px}.v-rating{max-width:100%;display:inline-flex;white-space:nowrap}.v-rating--readonly{pointer-events:none}.v-rating__wrapper{align-items:center;display:inline-flex;flex-direction:column}.v-rating__wrapper--bottom{flex-direction:column-reverse}.v-rating__item{display:inline-flex;position:relative}.v-rating__item label{cursor:pointer}.v-rating__item .v-btn--variant-plain{opacity:1}.v-rating__item .v-btn{transition-property:transform}.v-rating__item .v-btn .v-icon{transition:inherit;transition-timing-function:cubic-bezier(0,0,.2,1)}.v-rating--hover .v-rating__item:hover:not(.v-rating__item--focused) .v-btn{transform:scale(1.25)}.v-rating__item--half{overflow:hidden;position:absolute;clip-path:polygon(0 0,50% 0,50% 100%,0 100%);z-index:1}.v-rating__item--half .v-btn__overlay,.v-rating__item--half:hover .v-btn__overlay{opacity:0}.v-rating__hidden{height:0;opacity:0;position:absolute;width:0}.v-skeleton-loader{align-items:center;background:rgb(var(--v-theme-surface));border-radius:4px;display:flex;flex-wrap:wrap;position:relative;vertical-align:top}.v-skeleton-loader__actions{justify-content:end}.v-skeleton-loader .v-skeleton-loader__ossein{height:100%}.v-skeleton-loader .v-skeleton-loader__avatar,.v-skeleton-loader .v-skeleton-loader__button,.v-skeleton-loader .v-skeleton-loader__chip,.v-skeleton-loader .v-skeleton-loader__divider,.v-skeleton-loader .v-skeleton-loader__heading,.v-skeleton-loader .v-skeleton-loader__image,.v-skeleton-loader .v-skeleton-loader__ossein,.v-skeleton-loader .v-skeleton-loader__text{background:rgba(var(--v-theme-on-surface),var(--v-border-opacity))}.v-skeleton-loader .v-skeleton-loader__list-item,.v-skeleton-loader .v-skeleton-loader__list-item-avatar,.v-skeleton-loader .v-skeleton-loader__list-item-text,.v-skeleton-loader .v-skeleton-loader__list-item-two-line,.v-skeleton-loader .v-skeleton-loader__list-item-avatar-two-line,.v-skeleton-loader .v-skeleton-loader__list-item-three-line,.v-skeleton-loader .v-skeleton-loader__list-item-avatar-three-line{border-radius:4px}.v-skeleton-loader__bone{align-items:center;border-radius:inherit;display:flex;flex:1 1 100%;flex-wrap:wrap;overflow:hidden;position:relative}.v-skeleton-loader__bone:after{animation:loading 1.5s infinite;background:linear-gradient(90deg,rgba(var(--v-theme-surface),0),rgba(var(--v-theme-surface),.3),rgba(var(--v-theme-surface),0));transform:translate(-100%);z-index:1}.v-skeleton-loader__bone:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-skeleton-loader__avatar{border-radius:50%;flex:0 1 auto;margin:8px 16px;max-height:48px;min-height:48px;height:48px;max-width:48px;min-width:48px;width:48px}.v-skeleton-loader__avatar+.v-skeleton-loader__bone{flex:1 1 auto;margin-inline-start:0}.v-skeleton-loader__avatar+.v-skeleton-loader__sentences>.v-skeleton-loader__text,.v-skeleton-loader__avatar+.v-skeleton-loader__paragraph>.v-skeleton-loader__text{margin-inline-start:0}.v-skeleton-loader__button{border-radius:4px;height:36px;margin:16px;max-width:64px}.v-skeleton-loader__button+.v-skeleton-loader__bone{flex:1 1 auto;margin-inline-start:0}.v-skeleton-loader__button+.v-skeleton-loader__sentences>.v-skeleton-loader__text,.v-skeleton-loader__button+.v-skeleton-loader__paragraph>.v-skeleton-loader__text{margin-inline-start:0}.v-skeleton-loader__chip{border-radius:16px;margin:16px;height:32px;max-width:96px}.v-skeleton-loader__chip+.v-skeleton-loader__bone{flex:1 1 auto;margin-inline-start:0}.v-skeleton-loader__chip+.v-skeleton-loader__sentences>.v-skeleton-loader__text,.v-skeleton-loader__chip+.v-skeleton-loader__paragraph>.v-skeleton-loader__text{margin-inline-start:0}.v-skeleton-loader__date-picker{border-radius:inherit}.v-skeleton-loader__date-picker .v-skeleton-loader__list-item:first-child .v-skeleton-loader__text{max-width:88px;width:20%}.v-skeleton-loader__date-picker .v-skeleton-loader__heading{max-width:256px;width:40%}.v-skeleton-loader__date-picker-days{flex-wrap:wrap;margin:16px}.v-skeleton-loader__date-picker-days .v-skeleton-loader__avatar{border-radius:4px;margin:4px;max-width:100%}.v-skeleton-loader__date-picker-options{flex-wrap:nowrap}.v-skeleton-loader__date-picker-options .v-skeleton-loader__text{flex:1 1 auto}.v-skeleton-loader__divider{border-radius:1px;height:2px}.v-skeleton-loader__heading{border-radius:12px;margin:16px;height:24px}.v-skeleton-loader__heading+.v-skeleton-loader__subtitle{margin-top:-16px}.v-skeleton-loader__image{height:150px;border-radius:0}.v-skeleton-loader__card .v-skeleton-loader__image{border-radius:0}.v-skeleton-loader__list-item{margin:16px}.v-skeleton-loader__list-item .v-skeleton-loader__text{margin:0}.v-skeleton-loader__table-thead{justify-content:space-between}.v-skeleton-loader__table-thead .v-skeleton-loader__heading{margin-top:16px;max-width:16px}.v-skeleton-loader__table-tfoot{flex-wrap:nowrap}.v-skeleton-loader__table-tfoot>.v-skeleton-loader__text.v-skeleton-loader__bone{margin-top:16px}.v-skeleton-loader__table-row{align-items:baseline;margin:0 8px;justify-content:space-evenly;flex-wrap:nowrap}.v-skeleton-loader__table-row>.v-skeleton-loader__text.v-skeleton-loader__bone{margin-inline:8px}.v-skeleton-loader__table-row+.v-skeleton-loader__divider{margin:0 16px}.v-skeleton-loader__table-cell{align-items:center;display:flex;height:48px;width:88px}.v-skeleton-loader__table-cell .v-skeleton-loader__text{margin-bottom:0}.v-skeleton-loader__subtitle{max-width:70%}.v-skeleton-loader__subtitle>.v-skeleton-loader__text{height:16px;border-radius:8px}.v-skeleton-loader__text{border-radius:6px;margin:16px;height:12px}.v-skeleton-loader__text+.v-skeleton-loader__text{margin-top:-8px;max-width:50%}.v-skeleton-loader__text+.v-skeleton-loader__text+.v-skeleton-loader__text{max-width:70%}.v-skeleton-loader--boilerplate .v-skeleton-loader__bone:after{display:none}.v-skeleton-loader--is-loading{overflow:hidden}.v-skeleton-loader--tile,.v-skeleton-loader--tile .v-skeleton-loader__bone{border-radius:0}@keyframes loading{to{transform:translate(100%)}}.v-snackbar{justify-content:center;z-index:10000;margin:8px;margin-inline-end:calc(8px + var(--v-scrollbar-offset));padding:var(--v-layout-top) var(--v-layout-right) var(--v-layout-bottom) var(--v-layout-left)}.v-snackbar:not(.v-snackbar--center):not(.v-snackbar--top){align-items:flex-end}.v-snackbar__wrapper{align-items:center;display:flex;max-width:672px;min-height:48px;min-width:344px;overflow:hidden;padding:0}.v-snackbar__wrapper{border-radius:4px}.v-snackbar--variant-plain,.v-snackbar--variant-outlined,.v-snackbar--variant-text,.v-snackbar--variant-tonal{background:transparent;color:inherit}.v-snackbar--variant-plain{opacity:.62}.v-snackbar--variant-plain:focus,.v-snackbar--variant-plain:hover{opacity:1}.v-snackbar--variant-plain .v-snackbar__overlay{display:none}.v-snackbar--variant-elevated,.v-snackbar--variant-flat{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-snackbar--variant-elevated{box-shadow:0 3px 5px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 6px 10px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 18px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-snackbar--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-snackbar--variant-outlined{border:thin solid currentColor}.v-snackbar--variant-text .v-snackbar__overlay{background:currentColor}.v-snackbar--variant-tonal .v-snackbar__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-snackbar .v-snackbar__underlay{position:absolute}.v-snackbar__content{flex-grow:1;font-size:.875rem;font-weight:400;letter-spacing:.0178571429em;line-height:1.425;margin-right:auto;padding:14px 16px;text-align:initial}.v-snackbar__actions{align-items:center;align-self:center;display:flex;margin-inline-end:8px}.v-snackbar__actions>.v-btn{padding:0 8px;min-width:auto}.v-snackbar__timer{width:100%;position:absolute;top:0}.v-snackbar__timer .v-progress-linear{transition:.2s linear}.v-snackbar--absolute{position:absolute;z-index:1}.v-snackbar--multi-line .v-snackbar__wrapper{min-height:68px}.v-snackbar--vertical .v-snackbar__wrapper{flex-direction:column}.v-snackbar--vertical .v-snackbar__wrapper .v-snackbar__actions{align-self:flex-end;margin-bottom:8px}.v-snackbar--center{align-items:center;justify-content:center}.v-snackbar--top{align-items:flex-start}.v-snackbar--bottom{align-items:flex-end}.v-snackbar--left,.v-snackbar--start{justify-content:flex-start}.v-snackbar--right,.v-snackbar--end{justify-content:flex-end}.v-snackbar-transition-enter-active,.v-snackbar-transition-leave-active{transition-duration:.15s;transition-timing-function:cubic-bezier(0,0,.2,1)}.v-snackbar-transition-enter-active{transition-property:opacity,transform}.v-snackbar-transition-enter-from{opacity:0;transform:scale(.8)}.v-snackbar-transition-leave-active{transition-property:opacity}.v-snackbar-transition-leave-to{opacity:0}.v-speed-dial__content{gap:8px}.v-speed-dial__content.v-overlay__content.v-speed-dial__content--end,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--end-center,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--right,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--right-center{flex-direction:row}.v-speed-dial__content.v-overlay__content.v-speed-dial__content--left,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--left-center,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--start,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--start-center{flex-direction:row-reverse}.v-speed-dial__content.v-overlay__content.v-speed-dial__content--top,.v-speed-dial__content.v-overlay__content.v-speed-dial__content--top-center{flex-direction:column-reverse}.v-speed-dial__content>*:nth-child(1){transition-delay:0s}.v-speed-dial__content>*:nth-child(2){transition-delay:.05s}.v-speed-dial__content>*:nth-child(3){transition-delay:.1s}.v-speed-dial__content>*:nth-child(4){transition-delay:.15s}.v-speed-dial__content>*:nth-child(5){transition-delay:.2s}.v-speed-dial__content>*:nth-child(6){transition-delay:.25s}.v-speed-dial__content>*:nth-child(7){transition-delay:.3s}.v-speed-dial__content>*:nth-child(8){transition-delay:.35s}.v-speed-dial__content>*:nth-child(9){transition-delay:.4s}.v-speed-dial__content>*:nth-child(10){transition-delay:.45s}.v-stepper.v-sheet{overflow:hidden}.v-stepper.v-sheet{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-stepper.v-sheet{border-radius:4px}.v-stepper.v-sheet.v-stepper--flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-stepper-header{align-items:center;display:flex;position:relative;overflow-x:auto;justify-content:space-between;z-index:1}.v-stepper-header{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-stepper-header .v-divider{margin:0 -16px}.v-stepper-header .v-divider:last-child{margin-inline-end:0}.v-stepper-header .v-divider:first-child{margin-inline-start:0}.v-stepper--alt-labels .v-stepper-header{height:auto}.v-stepper--alt-labels .v-stepper-header .v-divider{align-self:flex-start;margin:35px -67px 0}.v-stepper-window{margin:1.5rem}.v-stepper-actions{display:flex;align-items:center;justify-content:space-between;padding:1rem}.v-stepper .v-stepper-actions{padding:0 1.5rem 1rem}.v-stepper-window-item .v-stepper-actions{padding:1.5rem 0 0}.v-stepper-item{align-items:center;align-self:stretch;display:inline-flex;flex:none;outline:none;opacity:var(--v-medium-emphasis-opacity);padding:1.5rem;position:relative;transition-duration:.2s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.v-stepper-item:hover>.v-stepper-item__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-stepper-item:focus-visible>.v-stepper-item__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-stepper-item:focus>.v-stepper-item__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-stepper-item--active>.v-stepper-item__overlay,.v-stepper-item[aria-haspopup=menu][aria-expanded=true]>.v-stepper-item__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-stepper-item--active:hover>.v-stepper-item__overlay,.v-stepper-item[aria-haspopup=menu][aria-expanded=true]:hover>.v-stepper-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-stepper-item--active:focus-visible>.v-stepper-item__overlay,.v-stepper-item[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-stepper-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-stepper-item--active:focus>.v-stepper-item__overlay,.v-stepper-item[aria-haspopup=menu][aria-expanded=true]:focus>.v-stepper-item__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-stepper--non-linear .v-stepper-item{opacity:var(--v-high-emphasis-opacity)}.v-stepper-item--selected{opacity:1}.v-stepper-item--error{color:rgb(var(--v-theme-error))}.v-stepper-item--disabled{opacity:var(--v-medium-emphasis-opacity);pointer-events:none}.v-stepper--alt-labels .v-stepper-item{flex-direction:column;justify-content:flex-start;align-items:center;flex-basis:175px}.v-stepper-item__avatar.v-avatar{background:rgba(var(--v-theme-surface-variant),var(--v-medium-emphasis-opacity));color:rgb(var(--v-theme-on-surface-variant));font-size:.75rem;margin-inline-end:8px}.v-stepper--mobile .v-stepper-item__avatar.v-avatar{margin-inline-end:0}.v-stepper-item__avatar.v-avatar .v-icon{font-size:.875rem}.v-stepper-item--selected .v-stepper-item__avatar.v-avatar,.v-stepper-item--complete .v-stepper-item__avatar.v-avatar{background:rgb(var(--v-theme-surface-variant))}.v-stepper-item--error .v-stepper-item__avatar.v-avatar{background:rgb(var(--v-theme-error))}.v-stepper--alt-labels .v-stepper-item__avatar.v-avatar{margin-bottom:16px;margin-inline-end:0}.v-stepper-item__title{line-height:1}.v-stepper--mobile .v-stepper-item__title{display:none}.v-stepper-item__subtitle{font-size:.75rem;text-align:left;line-height:1;opacity:var(--v-medium-emphasis-opacity)}.v-stepper--alt-labels .v-stepper-item__subtitle{text-align:center}.v-stepper--mobile .v-stepper-item__subtitle{display:none}.v-stepper-item__overlay{background-color:currentColor;border-radius:inherit;opacity:0;transition:opacity .2s ease-in-out}.v-stepper-item__overlay,.v-stepper-item__underlay{pointer-events:none}.v-stepper-item__overlay,.v-stepper-item__underlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-switch .v-label{padding-inline-start:10px}.v-switch__loader{display:flex}.v-switch__loader .v-progress-circular{color:rgb(var(--v-theme-surface))}.v-switch__track,.v-switch__thumb{transition:none}.v-selection-control--error:not(.v-selection-control--disabled) .v-switch__track,.v-selection-control--error:not(.v-selection-control--disabled) .v-switch__thumb{background-color:rgb(var(--v-theme-error));color:rgb(var(--v-theme-on-error))}.v-switch__track-true{margin-inline-end:auto}.v-selection-control:not(.v-selection-control--dirty) .v-switch__track-true{opacity:0}.v-switch__track-false{margin-inline-start:auto}.v-selection-control--dirty .v-switch__track-false{opacity:0}.v-switch__track{display:inline-flex;align-items:center;font-size:.5rem;padding:0 5px;background-color:rgb(var(--v-theme-surface-variant));border-radius:9999px;height:14px;opacity:.6;min-width:36px;cursor:pointer;transition:.2s background-color cubic-bezier(.4,0,.2,1)}.v-switch--inset .v-switch__track{border-radius:9999px;font-size:.75rem;height:32px;min-width:52px}.v-switch__thumb{align-items:center;background-color:rgb(var(--v-theme-surface-bright));color:rgb(var(--v-theme-on-surface-bright));border-radius:50%;display:flex;font-size:.75rem;height:20px;justify-content:center;width:20px;pointer-events:none;transition:.15s .05s transform cubic-bezier(0,0,.2,1),.2s color cubic-bezier(.4,0,.2,1),.2s background-color cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.v-switch:not(.v-switch--inset) .v-switch__thumb{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-switch.v-switch--flat:not(.v-switch--inset) .v-switch__thumb{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-switch.v-switch--flat:not(.v-switch--inset) .v-switch__thumb{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-switch--inset .v-switch__thumb{height:24px;width:24px;transform:scale(.6666666667)}.v-switch--inset .v-switch__thumb--filled{transform:none}.v-switch--inset .v-selection-control--dirty .v-switch__thumb{transform:none;transition:.15s .05s transform cubic-bezier(0,0,.2,1)}.v-switch.v-input{flex:0 1 auto}.v-switch .v-selection-control{min-height:var(--v-input-control-height)}.v-switch .v-selection-control__input{border-radius:50%;transition:.2s transform cubic-bezier(.4,0,.2,1);position:absolute}.v-locale--is-ltr.v-switch .v-selection-control__input,.v-locale--is-ltr .v-switch .v-selection-control__input{transform:translate(-10px)}.v-locale--is-rtl.v-switch .v-selection-control__input,.v-locale--is-rtl .v-switch .v-selection-control__input{transform:translate(10px)}.v-switch .v-selection-control__input .v-icon{position:absolute}.v-locale--is-ltr.v-switch .v-selection-control--dirty .v-selection-control__input,.v-locale--is-ltr .v-switch .v-selection-control--dirty .v-selection-control__input{transform:translate(10px)}.v-locale--is-rtl.v-switch .v-selection-control--dirty .v-selection-control__input,.v-locale--is-rtl .v-switch .v-selection-control--dirty .v-selection-control__input{transform:translate(-10px)}.v-switch.v-switch--indeterminate .v-selection-control__input{transform:scale(.8)}.v-switch.v-switch--indeterminate .v-switch__thumb{transform:scale(.75);box-shadow:none}.v-switch.v-switch--inset .v-selection-control__wrapper{width:auto}.v-switch.v-input--vertical .v-label{min-width:max-content}.v-switch.v-input--vertical .v-selection-control__wrapper{transform:rotate(-90deg)}@media (forced-colors: active){.v-switch .v-switch__loader .v-progress-circular{color:currentColor}.v-switch .v-switch__thumb{background-color:buttontext}.v-switch .v-switch__track,.v-switch .v-switch__thumb{border:1px solid;color:buttontext}.v-switch:not(.v-switch--loading):not(.v-input--disabled) .v-selection-control--dirty .v-switch__thumb{background-color:highlight}.v-switch:not(.v-input--disabled) .v-selection-control--dirty .v-switch__track{background-color:highlight}.v-switch:not(.v-input--disabled) .v-selection-control--dirty .v-switch__track,.v-switch:not(.v-input--disabled) .v-selection-control--dirty .v-switch__thumb{color:highlight}.v-switch.v-switch--inset .v-switch__track{border-width:2px}.v-switch.v-switch--inset:not(.v-switch--loading):not(.v-input--disabled) .v-selection-control--dirty .v-switch__thumb{background-color:highlighttext;color:highlighttext}.v-switch.v-input--disabled .v-switch__thumb{background-color:graytext}.v-switch.v-input--disabled .v-switch__track,.v-switch.v-input--disabled .v-switch__thumb{color:graytext}.v-switch.v-switch--loading .v-switch__thumb{background-color:canvas}.v-switch.v-switch--loading.v-switch--inset .v-switch__thumb,.v-switch.v-switch--loading.v-switch--indeterminate .v-switch__thumb{border-width:0}}.v-system-bar{align-items:center;display:flex;flex:1 1 auto;height:24px;justify-content:flex-end;max-width:100%;padding-inline:8px;position:relative;text-align:end;width:100%}.v-system-bar .v-icon{opacity:var(--v-medium-emphasis-opacity)}.v-system-bar{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-system-bar--absolute{position:absolute}.v-system-bar--fixed{position:fixed}.v-system-bar{background:rgba(var(--v-theme-surface-light));color:rgba(var(--v-theme-on-surface-light),var(--v-high-emphasis-opacity))}.v-system-bar{font-size:.75rem;font-weight:400;letter-spacing:.0333333333em;line-height:1.667;text-transform:none}.v-system-bar--rounded{border-radius:0}.v-system-bar--window{height:32px}.v-system-bar:not(.v-system-bar--absolute){padding-inline-end:calc(var(--v-scrollbar-offset) + 8px)}.v-tab.v-tab.v-btn{height:var(--v-tabs-height);border-radius:0;min-width:90px}.v-slide-group--horizontal .v-tab{max-width:360px}.v-slide-group--vertical .v-tab{justify-content:start}.v-tab__slider{position:absolute;bottom:0;left:0;height:2px;width:100%;background:currentColor;pointer-events:none;opacity:0}.v-tab--selected .v-tab__slider{opacity:1}.v-slide-group--vertical .v-tab__slider{top:0;height:100%;width:2px}.v-tabs{display:flex;height:var(--v-tabs-height)}.v-tabs--density-default{--v-tabs-height: 48px}.v-tabs--density-default.v-tabs--stacked{--v-tabs-height: 72px}.v-tabs--density-comfortable{--v-tabs-height: 44px}.v-tabs--density-comfortable.v-tabs--stacked{--v-tabs-height: 68px}.v-tabs--density-compact{--v-tabs-height: 36px}.v-tabs--density-compact.v-tabs--stacked{--v-tabs-height: 60px}.v-tabs.v-slide-group--vertical{height:auto;flex:none;--v-tabs-height: 48px}.v-tabs--align-tabs-title:not(.v-slide-group--has-affixes) .v-tab:first-child{margin-inline-start:42px}.v-tabs--fixed-tabs .v-slide-group__content>*:last-child,.v-tabs--align-tabs-center .v-slide-group__content>*:last-child{margin-inline-end:auto}.v-tabs--fixed-tabs .v-slide-group__content>*:first-child,.v-tabs--align-tabs-center .v-slide-group__content>*:first-child{margin-inline-start:auto}.v-tabs--grow{flex-grow:1}.v-tabs--grow .v-tab{flex:1 0 auto;max-width:none}.v-tabs--align-tabs-end .v-tab:first-child{margin-inline-start:auto}.v-tabs--align-tabs-end .v-tab:last-child{margin-inline-end:0}@media (max-width: 1279.98px){.v-tabs.v-slide-group--is-overflowing.v-slide-group--horizontal:not(.v-slide-group--has-affixes) .v-tab:first-child{margin-inline-start:52px}.v-tabs.v-slide-group--is-overflowing.v-slide-group--horizontal:not(.v-slide-group--has-affixes) .v-tab:last-child{margin-inline-end:52px}}.v-textarea .v-field{--v-textarea-control-height: var(--v-input-control-height)}.v-textarea .v-field__field{--v-input-control-height: var(--v-textarea-control-height)}.v-textarea .v-field__input{flex:1 1 auto;outline:none;-webkit-mask-image:linear-gradient(to bottom,transparent,transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px),black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px));mask-image:linear-gradient(to bottom,transparent,transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px),black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px))}.v-textarea .v-field__input.v-textarea__sizer{visibility:hidden;position:absolute;top:0;left:0;height:0!important;min-height:0!important;pointer-events:none}.v-textarea--no-resize .v-field__input{resize:none}.v-textarea .v-field--no-label textarea,.v-textarea .v-field--active textarea{opacity:1}.v-textarea textarea{opacity:0;flex:1;min-width:0;transition:.15s opacity cubic-bezier(.4,0,.2,1)}.v-textarea textarea:focus,.v-textarea textarea:active{outline:none}.v-textarea textarea:invalid{box-shadow:none}.v-theme-provider{background:rgb(var(--v-theme-background));color:rgb(var(--v-theme-on-background))}.v-timeline .v-timeline-divider__dot{background:rgb(var(--v-theme-surface-light))}.v-timeline .v-timeline-divider__inner-dot{background:rgb(var(--v-theme-on-surface))}.v-timeline{display:grid;grid-auto-flow:dense;position:relative}.v-timeline--horizontal.v-timeline{grid-column-gap:24px;width:100%}.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__body{grid-row:3;padding-block-start:24px}.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__opposite{grid-row:1;padding-block-end:24px;align-self:flex-end}.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(odd) .v-timeline-item__body{grid-row:1;padding-block-end:24px;align-self:flex-end}.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(odd) .v-timeline-item__opposite{grid-row:3;padding-block-start:24px}.v-timeline--vertical.v-timeline{row-gap:24px;height:100%}.v-timeline--vertical.v-timeline .v-timeline-item:first-child .v-timeline-divider,.v-timeline--vertical.v-timeline .v-timeline-item:first-child .v-timeline-item__body,.v-timeline--vertical.v-timeline .v-timeline-item:first-child .v-timeline-item__opposite{padding-block-start:24px}.v-timeline--vertical.v-timeline .v-timeline-item:last-child .v-timeline-divider,.v-timeline--vertical.v-timeline .v-timeline-item:last-child .v-timeline-item__body,.v-timeline--vertical.v-timeline .v-timeline-item:last-child .v-timeline-item__opposite{padding-block-end:24px}.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__body{grid-column:1;padding-inline-end:24px}.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__opposite{grid-column:3;padding-inline-start:24px}.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(odd) .v-timeline-item__body{grid-column:3;padding-inline-start:24px}.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(odd) .v-timeline-item__opposite{grid-column:1;justify-self:flex-end;padding-inline-end:24px}.v-timeline-item{display:contents}.v-timeline-divider{position:relative;display:flex;align-items:center}.v-timeline--horizontal .v-timeline-divider{flex-direction:row;grid-row:2;width:100%}.v-timeline--vertical .v-timeline-divider{height:100%;flex-direction:column;grid-column:2}.v-timeline-divider__before{background:rgba(var(--v-border-color),var(--v-border-opacity));position:absolute}.v-timeline--horizontal .v-timeline-divider__before{height:var(--v-timeline-line-thickness);width:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));inset-inline-start:-12px;inset-inline-end:initial}.v-timeline--vertical .v-timeline-divider__before{height:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));width:var(--v-timeline-line-thickness);top:-12px}.v-timeline-divider__after{background:rgba(var(--v-border-color),var(--v-border-opacity));position:absolute}.v-timeline--horizontal .v-timeline-divider__after{height:var(--v-timeline-line-thickness);width:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));inset-inline-end:-12px;inset-inline-start:initial}.v-timeline--vertical .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));width:var(--v-timeline-line-thickness);bottom:-12px}.v-timeline--vertical .v-timeline-item:first-child .v-timeline-divider__before{height:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));top:0}.v-timeline--horizontal .v-timeline-item:first-child .v-timeline-divider__before{width:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));inset-inline-start:0;inset-inline-end:initial}.v-timeline--vertical .v-timeline-item:first-child .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset))}.v-timeline--horizontal .v-timeline-item:first-child .v-timeline-divider__after{width:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset));inset-inline-end:-12px;inset-inline-start:initial}.v-timeline--vertical .v-timeline-item:last-child .v-timeline-divider__before{height:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset))}.v-timeline--horizontal .v-timeline-item:last-child .v-timeline-divider__before{width:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset))}.v-timeline--vertical .v-timeline-item:last-child .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));bottom:0}.v-timeline--horizontal .v-timeline-item:last-child .v-timeline-divider__after{width:calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));inset-inline-end:0;inset-inline-start:initial}.v-timeline--vertical .v-timeline-item:only-child .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset))}.v-timeline-divider__dot{z-index:1;flex-shrink:0;border-radius:50%;display:flex;justify-content:center;align-items:center}.v-timeline-divider__dot{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-timeline-divider__dot--size-x-small{height:22px;width:22px}.v-timeline-divider__dot--size-x-small .v-timeline-divider__inner-dot{height:calc(100% - 6px);width:calc(100% - 6px)}.v-timeline-divider__dot--size-small{height:30px;width:30px}.v-timeline-divider__dot--size-small .v-timeline-divider__inner-dot{height:calc(100% - 8px);width:calc(100% - 8px)}.v-timeline-divider__dot--size-default{height:38px;width:38px}.v-timeline-divider__dot--size-default .v-timeline-divider__inner-dot{height:calc(100% - 8px);width:calc(100% - 8px)}.v-timeline-divider__dot--size-large{height:46px;width:46px}.v-timeline-divider__dot--size-large .v-timeline-divider__inner-dot{height:calc(100% - 8px);width:calc(100% - 8px)}.v-timeline-divider__dot--size-x-large{height:54px;width:54px}.v-timeline-divider__dot--size-x-large .v-timeline-divider__inner-dot{height:calc(100% - 10px);width:calc(100% - 10px)}.v-timeline-divider__inner-dot{align-items:center;border-radius:50%;display:flex;justify-content:center}.v-timeline--horizontal.v-timeline--justify-center{grid-template-rows:minmax(auto,50%) min-content minmax(auto,50%)}.v-timeline--vertical.v-timeline--justify-center{grid-template-columns:minmax(auto,50%) min-content minmax(auto,50%)}.v-timeline--horizontal.v-timeline--justify-auto{grid-template-rows:auto min-content auto}.v-timeline--vertical.v-timeline--justify-auto{grid-template-columns:auto min-content auto}.v-timeline--horizontal.v-timeline--density-comfortable{height:100%}.v-timeline--horizontal.v-timeline--density-comfortable.v-timeline--side-end{grid-template-rows:min-content min-content auto}.v-timeline--horizontal.v-timeline--density-comfortable.v-timeline--side-start{grid-template-rows:auto min-content min-content}.v-timeline--vertical.v-timeline--density-comfortable{width:100%}.v-timeline--vertical.v-timeline--density-comfortable.v-timeline--side-end{grid-template-columns:min-content min-content auto}.v-timeline--vertical.v-timeline--density-comfortable.v-timeline--side-start{grid-template-columns:auto min-content min-content}.v-timeline--horizontal.v-timeline--density-compact.v-timeline--side-end{grid-template-rows:0 min-content auto}.v-timeline--horizontal.v-timeline--density-compact.v-timeline--side-start{grid-template-rows:auto min-content 0}.v-timeline--horizontal.v-timeline--density-compact .v-timeline-item__body{grid-row:1}.v-timeline--vertical.v-timeline--density-compact.v-timeline--side-end{grid-template-columns:0 min-content auto}.v-timeline--vertical.v-timeline--density-compact.v-timeline--side-start{grid-template-columns:auto min-content 0}.v-timeline--vertical.v-timeline--density-compact .v-timeline-item__body{grid-column:3}.v-timeline--horizontal.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__body{grid-row:3;padding-block-end:initial;padding-block-start:24px}.v-timeline--horizontal.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__opposite{grid-row:1;padding-block-end:24px;padding-block-start:initial}.v-timeline--vertical.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__body{grid-column:3;padding-inline-start:24px;padding-inline-end:initial;justify-self:flex-start}.v-timeline--vertical.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__opposite{grid-column:1;justify-self:flex-end;padding-inline-end:24px;padding-inline-start:initial}.v-timeline--horizontal.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__body{grid-row:1;padding-block-end:24px;padding-block-start:initial}.v-timeline--horizontal.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__opposite{grid-row:3;padding-block-end:initial;padding-block-start:24px}.v-timeline--vertical.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__body{grid-column:1;justify-self:flex-end;padding-inline-end:24px}.v-timeline--vertical.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__opposite{grid-column:3;padding-inline-start:24px;justify-self:flex-start}.v-timeline-divider--fill-dot .v-timeline-divider__inner-dot{height:inherit;width:inherit}.v-timeline--align-center{--v-timeline-line-size-base: 50%;--v-timeline-line-size-offset: 0px}.v-timeline--horizontal.v-timeline--align-center{justify-items:center}.v-timeline--horizontal.v-timeline--align-center .v-timeline-item__body,.v-timeline--horizontal.v-timeline--align-center .v-timeline-item__opposite{padding-inline:12px}.v-timeline--horizontal.v-timeline--align-center .v-timeline-divider{justify-content:center}.v-timeline--vertical.v-timeline--align-center{align-items:center}.v-timeline--vertical.v-timeline--align-center .v-timeline-divider{justify-content:center}.v-timeline--align-start{--v-timeline-line-size-base: 100%;--v-timeline-line-size-offset: 12px}.v-timeline--align-start .v-timeline-item:first-child .v-timeline-divider__before{--v-timeline-line-size-offset: 24px}.v-timeline--align-start .v-timeline-item:first-child .v-timeline-divider__after{--v-timeline-line-size-offset: -12px}.v-timeline--align-start .v-timeline-item:last-child .v-timeline-divider__after{--v-timeline-line-size-offset: 0px}.v-timeline--horizontal.v-timeline--align-start{justify-items:flex-start}.v-timeline--horizontal.v-timeline--align-start .v-timeline-divider{justify-content:flex-start}.v-timeline--horizontal.v-timeline--align-start .v-timeline-divider .v-timeline-divider__before{width:calc(var(--v-timeline-line-size-offset) + var(--v-timeline-dot-size) / 2 - var(--v-timeline-line-inset))}.v-timeline--horizontal.v-timeline--align-start .v-timeline-divider .v-timeline-divider__after{width:calc(var(--v-timeline-line-size-base) - var(--v-timeline-dot-size) / 2 + var(--v-timeline-line-size-offset) - var(--v-timeline-line-inset))}.v-timeline--vertical.v-timeline--align-start{align-items:flex-start}.v-timeline--vertical.v-timeline--align-start .v-timeline-divider{justify-content:flex-start}.v-timeline--vertical.v-timeline--align-start .v-timeline-divider .v-timeline-divider__before{height:calc(var(--v-timeline-line-size-offset) + var(--v-timeline-dot-size) / 2 - var(--v-timeline-line-inset))}.v-timeline--vertical.v-timeline--align-start .v-timeline-divider .v-timeline-divider__after{height:calc(var(--v-timeline-line-size-base) - var(--v-timeline-dot-size) / 2 + var(--v-timeline-line-size-offset) - var(--v-timeline-line-inset))}.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider__before{display:none}.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider__after{--v-timeline-line-size-offset: 12px}.v-timeline--vertical.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider,.v-timeline--vertical.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__body,.v-timeline--vertical.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__opposite{padding-block-start:0}.v-timeline--horizontal.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider,.v-timeline--horizontal.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__body,.v-timeline--horizontal.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__opposite{padding-inline-start:0}.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider__after{display:none}.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider__before{--v-timeline-line-size-offset: 12px}.v-timeline--vertical.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider,.v-timeline--vertical.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__body,.v-timeline--vertical.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__opposite{padding-block-end:0}.v-timeline--horizontal.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider,.v-timeline--horizontal.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__body,.v-timeline--horizontal.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__opposite{padding-inline-end:0}.v-tooltip>.v-overlay__content{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant));border-radius:4px;font-size:.875rem;line-height:1.6;display:inline-block;padding:5px 16px;text-transform:initial;width:auto;opacity:1;pointer-events:none;transition-property:opacity,transform;overflow-wrap:break-word}.v-tooltip>.v-overlay__content[class*=enter-active]{transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.15s}.v-tooltip>.v-overlay__content[class*=leave-active]{transition-timing-function:cubic-bezier(.4,0,1,1);transition-duration:75ms}@keyframes v-shake{59%{margin-left:0}60%,80%{margin-left:2px}70%,90%{margin-left:-2px}}.bg-black{background-color:#000!important}.bg-black{color:#fff!important}.bg-white{background-color:#fff!important}.bg-white{color:#000!important}.bg-transparent{background-color:transparent!important}.bg-transparent{color:currentColor!important}.bg-red{background-color:#f44336!important}.bg-red{color:#fff!important}.bg-red-lighten-5{background-color:#ffebee!important}.bg-red-lighten-5{color:#000!important}.bg-red-lighten-4{background-color:#ffcdd2!important}.bg-red-lighten-4{color:#000!important}.bg-red-lighten-3{background-color:#ef9a9a!important}.bg-red-lighten-3{color:#000!important}.bg-red-lighten-2{background-color:#e57373!important}.bg-red-lighten-2{color:#fff!important}.bg-red-lighten-1{background-color:#ef5350!important}.bg-red-lighten-1{color:#fff!important}.bg-red-darken-1{background-color:#e53935!important}.bg-red-darken-1{color:#fff!important}.bg-red-darken-2{background-color:#d32f2f!important}.bg-red-darken-2{color:#fff!important}.bg-red-darken-3{background-color:#c62828!important}.bg-red-darken-3{color:#fff!important}.bg-red-darken-4{background-color:#b71c1c!important}.bg-red-darken-4{color:#fff!important}.bg-red-accent-1{background-color:#ff8a80!important}.bg-red-accent-1{color:#000!important}.bg-red-accent-2{background-color:#ff5252!important}.bg-red-accent-2{color:#fff!important}.bg-red-accent-3{background-color:#ff1744!important}.bg-red-accent-3{color:#fff!important}.bg-red-accent-4{background-color:#d50000!important}.bg-red-accent-4{color:#fff!important}.bg-pink{background-color:#e91e63!important}.bg-pink{color:#fff!important}.bg-pink-lighten-5{background-color:#fce4ec!important}.bg-pink-lighten-5{color:#000!important}.bg-pink-lighten-4{background-color:#f8bbd0!important}.bg-pink-lighten-4{color:#000!important}.bg-pink-lighten-3{background-color:#f48fb1!important}.bg-pink-lighten-3{color:#000!important}.bg-pink-lighten-2{background-color:#f06292!important}.bg-pink-lighten-2{color:#fff!important}.bg-pink-lighten-1{background-color:#ec407a!important}.bg-pink-lighten-1{color:#fff!important}.bg-pink-darken-1{background-color:#d81b60!important}.bg-pink-darken-1{color:#fff!important}.bg-pink-darken-2{background-color:#c2185b!important}.bg-pink-darken-2{color:#fff!important}.bg-pink-darken-3{background-color:#ad1457!important}.bg-pink-darken-3{color:#fff!important}.bg-pink-darken-4{background-color:#880e4f!important}.bg-pink-darken-4{color:#fff!important}.bg-pink-accent-1{background-color:#ff80ab!important}.bg-pink-accent-1{color:#fff!important}.bg-pink-accent-2{background-color:#ff4081!important}.bg-pink-accent-2{color:#fff!important}.bg-pink-accent-3{background-color:#f50057!important}.bg-pink-accent-3{color:#fff!important}.bg-pink-accent-4{background-color:#c51162!important}.bg-pink-accent-4{color:#fff!important}.bg-purple{background-color:#9c27b0!important}.bg-purple{color:#fff!important}.bg-purple-lighten-5{background-color:#f3e5f5!important}.bg-purple-lighten-5{color:#000!important}.bg-purple-lighten-4{background-color:#e1bee7!important}.bg-purple-lighten-4{color:#000!important}.bg-purple-lighten-3{background-color:#ce93d8!important}.bg-purple-lighten-3{color:#fff!important}.bg-purple-lighten-2{background-color:#ba68c8!important}.bg-purple-lighten-2{color:#fff!important}.bg-purple-lighten-1{background-color:#ab47bc!important}.bg-purple-lighten-1{color:#fff!important}.bg-purple-darken-1{background-color:#8e24aa!important}.bg-purple-darken-1{color:#fff!important}.bg-purple-darken-2{background-color:#7b1fa2!important}.bg-purple-darken-2{color:#fff!important}.bg-purple-darken-3{background-color:#6a1b9a!important}.bg-purple-darken-3{color:#fff!important}.bg-purple-darken-4{background-color:#4a148c!important}.bg-purple-darken-4{color:#fff!important}.bg-purple-accent-1{background-color:#ea80fc!important}.bg-purple-accent-1{color:#fff!important}.bg-purple-accent-2{background-color:#e040fb!important}.bg-purple-accent-2{color:#fff!important}.bg-purple-accent-3{background-color:#d500f9!important}.bg-purple-accent-3{color:#fff!important}.bg-purple-accent-4{background-color:#a0f!important}.bg-purple-accent-4{color:#fff!important}.bg-deep-purple{background-color:#673ab7!important}.bg-deep-purple{color:#fff!important}.bg-deep-purple-lighten-5{background-color:#ede7f6!important}.bg-deep-purple-lighten-5{color:#000!important}.bg-deep-purple-lighten-4{background-color:#d1c4e9!important}.bg-deep-purple-lighten-4{color:#000!important}.bg-deep-purple-lighten-3{background-color:#b39ddb!important}.bg-deep-purple-lighten-3{color:#fff!important}.bg-deep-purple-lighten-2{background-color:#9575cd!important}.bg-deep-purple-lighten-2{color:#fff!important}.bg-deep-purple-lighten-1{background-color:#7e57c2!important}.bg-deep-purple-lighten-1{color:#fff!important}.bg-deep-purple-darken-1{background-color:#5e35b1!important}.bg-deep-purple-darken-1{color:#fff!important}.bg-deep-purple-darken-2{background-color:#512da8!important}.bg-deep-purple-darken-2{color:#fff!important}.bg-deep-purple-darken-3{background-color:#4527a0!important}.bg-deep-purple-darken-3{color:#fff!important}.bg-deep-purple-darken-4{background-color:#311b92!important}.bg-deep-purple-darken-4{color:#fff!important}.bg-deep-purple-accent-1{background-color:#b388ff!important}.bg-deep-purple-accent-1{color:#fff!important}.bg-deep-purple-accent-2{background-color:#7c4dff!important}.bg-deep-purple-accent-2{color:#fff!important}.bg-deep-purple-accent-3{background-color:#651fff!important}.bg-deep-purple-accent-3{color:#fff!important}.bg-deep-purple-accent-4{background-color:#6200ea!important}.bg-deep-purple-accent-4{color:#fff!important}.bg-indigo{background-color:#3f51b5!important}.bg-indigo{color:#fff!important}.bg-indigo-lighten-5{background-color:#e8eaf6!important}.bg-indigo-lighten-5{color:#000!important}.bg-indigo-lighten-4{background-color:#c5cae9!important}.bg-indigo-lighten-4{color:#000!important}.bg-indigo-lighten-3{background-color:#9fa8da!important}.bg-indigo-lighten-3{color:#fff!important}.bg-indigo-lighten-2{background-color:#7986cb!important}.bg-indigo-lighten-2{color:#fff!important}.bg-indigo-lighten-1{background-color:#5c6bc0!important}.bg-indigo-lighten-1{color:#fff!important}.bg-indigo-darken-1{background-color:#3949ab!important}.bg-indigo-darken-1{color:#fff!important}.bg-indigo-darken-2{background-color:#303f9f!important}.bg-indigo-darken-2{color:#fff!important}.bg-indigo-darken-3{background-color:#283593!important}.bg-indigo-darken-3{color:#fff!important}.bg-indigo-darken-4{background-color:#1a237e!important}.bg-indigo-darken-4{color:#fff!important}.bg-indigo-accent-1{background-color:#8c9eff!important}.bg-indigo-accent-1{color:#fff!important}.bg-indigo-accent-2{background-color:#536dfe!important}.bg-indigo-accent-2{color:#fff!important}.bg-indigo-accent-3{background-color:#3d5afe!important}.bg-indigo-accent-3{color:#fff!important}.bg-indigo-accent-4{background-color:#304ffe!important}.bg-indigo-accent-4{color:#fff!important}.bg-blue{background-color:#2196f3!important}.bg-blue{color:#fff!important}.bg-blue-lighten-5{background-color:#e3f2fd!important}.bg-blue-lighten-5{color:#000!important}.bg-blue-lighten-4{background-color:#bbdefb!important}.bg-blue-lighten-4{color:#000!important}.bg-blue-lighten-3{background-color:#90caf9!important}.bg-blue-lighten-3{color:#000!important}.bg-blue-lighten-2{background-color:#64b5f6!important}.bg-blue-lighten-2{color:#000!important}.bg-blue-lighten-1{background-color:#42a5f5!important}.bg-blue-lighten-1{color:#fff!important}.bg-blue-darken-1{background-color:#1e88e5!important}.bg-blue-darken-1{color:#fff!important}.bg-blue-darken-2{background-color:#1976d2!important}.bg-blue-darken-2{color:#fff!important}.bg-blue-darken-3{background-color:#1565c0!important}.bg-blue-darken-3{color:#fff!important}.bg-blue-darken-4{background-color:#0d47a1!important}.bg-blue-darken-4{color:#fff!important}.bg-blue-accent-1{background-color:#82b1ff!important}.bg-blue-accent-1{color:#000!important}.bg-blue-accent-2{background-color:#448aff!important}.bg-blue-accent-2{color:#fff!important}.bg-blue-accent-3{background-color:#2979ff!important}.bg-blue-accent-3{color:#fff!important}.bg-blue-accent-4{background-color:#2962ff!important}.bg-blue-accent-4{color:#fff!important}.bg-light-blue{background-color:#03a9f4!important}.bg-light-blue{color:#fff!important}.bg-light-blue-lighten-5{background-color:#e1f5fe!important}.bg-light-blue-lighten-5{color:#000!important}.bg-light-blue-lighten-4{background-color:#b3e5fc!important}.bg-light-blue-lighten-4{color:#000!important}.bg-light-blue-lighten-3{background-color:#81d4fa!important}.bg-light-blue-lighten-3{color:#000!important}.bg-light-blue-lighten-2{background-color:#4fc3f7!important}.bg-light-blue-lighten-2{color:#000!important}.bg-light-blue-lighten-1{background-color:#29b6f6!important}.bg-light-blue-lighten-1{color:#000!important}.bg-light-blue-darken-1{background-color:#039be5!important}.bg-light-blue-darken-1{color:#fff!important}.bg-light-blue-darken-2{background-color:#0288d1!important}.bg-light-blue-darken-2{color:#fff!important}.bg-light-blue-darken-3{background-color:#0277bd!important}.bg-light-blue-darken-3{color:#fff!important}.bg-light-blue-darken-4{background-color:#01579b!important}.bg-light-blue-darken-4{color:#fff!important}.bg-light-blue-accent-1{background-color:#80d8ff!important}.bg-light-blue-accent-1{color:#000!important}.bg-light-blue-accent-2{background-color:#40c4ff!important}.bg-light-blue-accent-2{color:#000!important}.bg-light-blue-accent-3{background-color:#00b0ff!important}.bg-light-blue-accent-3{color:#fff!important}.bg-light-blue-accent-4{background-color:#0091ea!important}.bg-light-blue-accent-4{color:#fff!important}.bg-cyan{background-color:#00bcd4!important}.bg-cyan{color:#000!important}.bg-cyan-lighten-5{background-color:#e0f7fa!important}.bg-cyan-lighten-5{color:#000!important}.bg-cyan-lighten-4{background-color:#b2ebf2!important}.bg-cyan-lighten-4{color:#000!important}.bg-cyan-lighten-3{background-color:#80deea!important}.bg-cyan-lighten-3{color:#000!important}.bg-cyan-lighten-2{background-color:#4dd0e1!important}.bg-cyan-lighten-2{color:#000!important}.bg-cyan-lighten-1{background-color:#26c6da!important}.bg-cyan-lighten-1{color:#000!important}.bg-cyan-darken-1{background-color:#00acc1!important}.bg-cyan-darken-1{color:#fff!important}.bg-cyan-darken-2{background-color:#0097a7!important}.bg-cyan-darken-2{color:#fff!important}.bg-cyan-darken-3{background-color:#00838f!important}.bg-cyan-darken-3{color:#fff!important}.bg-cyan-darken-4{background-color:#006064!important}.bg-cyan-darken-4{color:#fff!important}.bg-cyan-accent-1{background-color:#84ffff!important}.bg-cyan-accent-1{color:#000!important}.bg-cyan-accent-2{background-color:#18ffff!important}.bg-cyan-accent-2{color:#000!important}.bg-cyan-accent-3{background-color:#00e5ff!important}.bg-cyan-accent-3{color:#000!important}.bg-cyan-accent-4{background-color:#00b8d4!important}.bg-cyan-accent-4{color:#fff!important}.bg-teal{background-color:#009688!important}.bg-teal{color:#fff!important}.bg-teal-lighten-5{background-color:#e0f2f1!important}.bg-teal-lighten-5{color:#000!important}.bg-teal-lighten-4{background-color:#b2dfdb!important}.bg-teal-lighten-4{color:#000!important}.bg-teal-lighten-3{background-color:#80cbc4!important}.bg-teal-lighten-3{color:#000!important}.bg-teal-lighten-2{background-color:#4db6ac!important}.bg-teal-lighten-2{color:#fff!important}.bg-teal-lighten-1{background-color:#26a69a!important}.bg-teal-lighten-1{color:#fff!important}.bg-teal-darken-1{background-color:#00897b!important}.bg-teal-darken-1{color:#fff!important}.bg-teal-darken-2{background-color:#00796b!important}.bg-teal-darken-2{color:#fff!important}.bg-teal-darken-3{background-color:#00695c!important}.bg-teal-darken-3{color:#fff!important}.bg-teal-darken-4{background-color:#004d40!important}.bg-teal-darken-4{color:#fff!important}.bg-teal-accent-1{background-color:#a7ffeb!important}.bg-teal-accent-1{color:#000!important}.bg-teal-accent-2{background-color:#64ffda!important}.bg-teal-accent-2{color:#000!important}.bg-teal-accent-3{background-color:#1de9b6!important}.bg-teal-accent-3{color:#000!important}.bg-teal-accent-4{background-color:#00bfa5!important}.bg-teal-accent-4{color:#fff!important}.bg-green{background-color:#4caf50!important}.bg-green{color:#fff!important}.bg-green-lighten-5{background-color:#e8f5e9!important}.bg-green-lighten-5{color:#000!important}.bg-green-lighten-4{background-color:#c8e6c9!important}.bg-green-lighten-4{color:#000!important}.bg-green-lighten-3{background-color:#a5d6a7!important}.bg-green-lighten-3{color:#000!important}.bg-green-lighten-2{background-color:#81c784!important}.bg-green-lighten-2{color:#000!important}.bg-green-lighten-1{background-color:#66bb6a!important}.bg-green-lighten-1{color:#fff!important}.bg-green-darken-1{background-color:#43a047!important}.bg-green-darken-1{color:#fff!important}.bg-green-darken-2{background-color:#388e3c!important}.bg-green-darken-2{color:#fff!important}.bg-green-darken-3{background-color:#2e7d32!important}.bg-green-darken-3{color:#fff!important}.bg-green-darken-4{background-color:#1b5e20!important}.bg-green-darken-4{color:#fff!important}.bg-green-accent-1{background-color:#b9f6ca!important}.bg-green-accent-1{color:#000!important}.bg-green-accent-2{background-color:#69f0ae!important}.bg-green-accent-2{color:#000!important}.bg-green-accent-3{background-color:#00e676!important}.bg-green-accent-3{color:#000!important}.bg-green-accent-4{background-color:#00c853!important}.bg-green-accent-4{color:#000!important}.bg-light-green{background-color:#8bc34a!important}.bg-light-green{color:#000!important}.bg-light-green-lighten-5{background-color:#f1f8e9!important}.bg-light-green-lighten-5{color:#000!important}.bg-light-green-lighten-4{background-color:#dcedc8!important}.bg-light-green-lighten-4{color:#000!important}.bg-light-green-lighten-3{background-color:#c5e1a5!important}.bg-light-green-lighten-3{color:#000!important}.bg-light-green-lighten-2{background-color:#aed581!important}.bg-light-green-lighten-2{color:#000!important}.bg-light-green-lighten-1{background-color:#9ccc65!important}.bg-light-green-lighten-1{color:#000!important}.bg-light-green-darken-1{background-color:#7cb342!important}.bg-light-green-darken-1{color:#fff!important}.bg-light-green-darken-2{background-color:#689f38!important}.bg-light-green-darken-2{color:#fff!important}.bg-light-green-darken-3{background-color:#558b2f!important}.bg-light-green-darken-3{color:#fff!important}.bg-light-green-darken-4{background-color:#33691e!important}.bg-light-green-darken-4{color:#fff!important}.bg-light-green-accent-1{background-color:#ccff90!important}.bg-light-green-accent-1{color:#000!important}.bg-light-green-accent-2{background-color:#b2ff59!important}.bg-light-green-accent-2{color:#000!important}.bg-light-green-accent-3{background-color:#76ff03!important}.bg-light-green-accent-3{color:#000!important}.bg-light-green-accent-4{background-color:#64dd17!important}.bg-light-green-accent-4{color:#000!important}.bg-lime{background-color:#cddc39!important}.bg-lime{color:#000!important}.bg-lime-lighten-5{background-color:#f9fbe7!important}.bg-lime-lighten-5{color:#000!important}.bg-lime-lighten-4{background-color:#f0f4c3!important}.bg-lime-lighten-4{color:#000!important}.bg-lime-lighten-3{background-color:#e6ee9c!important}.bg-lime-lighten-3{color:#000!important}.bg-lime-lighten-2{background-color:#dce775!important}.bg-lime-lighten-2{color:#000!important}.bg-lime-lighten-1{background-color:#d4e157!important}.bg-lime-lighten-1{color:#000!important}.bg-lime-darken-1{background-color:#c0ca33!important}.bg-lime-darken-1{color:#000!important}.bg-lime-darken-2{background-color:#afb42b!important}.bg-lime-darken-2{color:#000!important}.bg-lime-darken-3{background-color:#9e9d24!important}.bg-lime-darken-3{color:#fff!important}.bg-lime-darken-4{background-color:#827717!important}.bg-lime-darken-4{color:#fff!important}.bg-lime-accent-1{background-color:#f4ff81!important}.bg-lime-accent-1{color:#000!important}.bg-lime-accent-2{background-color:#eeff41!important}.bg-lime-accent-2{color:#000!important}.bg-lime-accent-3{background-color:#c6ff00!important}.bg-lime-accent-3{color:#000!important}.bg-lime-accent-4{background-color:#aeea00!important}.bg-lime-accent-4{color:#000!important}.bg-yellow{background-color:#ffeb3b!important}.bg-yellow{color:#000!important}.bg-yellow-lighten-5{background-color:#fffde7!important}.bg-yellow-lighten-5{color:#000!important}.bg-yellow-lighten-4{background-color:#fff9c4!important}.bg-yellow-lighten-4{color:#000!important}.bg-yellow-lighten-3{background-color:#fff59d!important}.bg-yellow-lighten-3{color:#000!important}.bg-yellow-lighten-2{background-color:#fff176!important}.bg-yellow-lighten-2{color:#000!important}.bg-yellow-lighten-1{background-color:#ffee58!important}.bg-yellow-lighten-1{color:#000!important}.bg-yellow-darken-1{background-color:#fdd835!important}.bg-yellow-darken-1{color:#000!important}.bg-yellow-darken-2{background-color:#fbc02d!important}.bg-yellow-darken-2{color:#000!important}.bg-yellow-darken-3{background-color:#f9a825!important}.bg-yellow-darken-3{color:#000!important}.bg-yellow-darken-4{background-color:#f57f17!important}.bg-yellow-darken-4{color:#fff!important}.bg-yellow-accent-1{background-color:#ffff8d!important}.bg-yellow-accent-1{color:#000!important}.bg-yellow-accent-2{background-color:#ff0!important}.bg-yellow-accent-2{color:#000!important}.bg-yellow-accent-3{background-color:#ffea00!important}.bg-yellow-accent-3{color:#000!important}.bg-yellow-accent-4{background-color:#ffd600!important}.bg-yellow-accent-4{color:#000!important}.bg-amber{background-color:#ffc107!important}.bg-amber{color:#000!important}.bg-amber-lighten-5{background-color:#fff8e1!important}.bg-amber-lighten-5{color:#000!important}.bg-amber-lighten-4{background-color:#ffecb3!important}.bg-amber-lighten-4{color:#000!important}.bg-amber-lighten-3{background-color:#ffe082!important}.bg-amber-lighten-3{color:#000!important}.bg-amber-lighten-2{background-color:#ffd54f!important}.bg-amber-lighten-2{color:#000!important}.bg-amber-lighten-1{background-color:#ffca28!important}.bg-amber-lighten-1{color:#000!important}.bg-amber-darken-1{background-color:#ffb300!important}.bg-amber-darken-1{color:#000!important}.bg-amber-darken-2{background-color:#ffa000!important}.bg-amber-darken-2{color:#000!important}.bg-amber-darken-3{background-color:#ff8f00!important}.bg-amber-darken-3{color:#000!important}.bg-amber-darken-4{background-color:#ff6f00!important}.bg-amber-darken-4{color:#fff!important}.bg-amber-accent-1{background-color:#ffe57f!important}.bg-amber-accent-1{color:#000!important}.bg-amber-accent-2{background-color:#ffd740!important}.bg-amber-accent-2{color:#000!important}.bg-amber-accent-3{background-color:#ffc400!important}.bg-amber-accent-3{color:#000!important}.bg-amber-accent-4{background-color:#ffab00!important}.bg-amber-accent-4{color:#000!important}.bg-orange{background-color:#ff9800!important}.bg-orange{color:#000!important}.bg-orange-lighten-5{background-color:#fff3e0!important}.bg-orange-lighten-5{color:#000!important}.bg-orange-lighten-4{background-color:#ffe0b2!important}.bg-orange-lighten-4{color:#000!important}.bg-orange-lighten-3{background-color:#ffcc80!important}.bg-orange-lighten-3{color:#000!important}.bg-orange-lighten-2{background-color:#ffb74d!important}.bg-orange-lighten-2{color:#000!important}.bg-orange-lighten-1{background-color:#ffa726!important}.bg-orange-lighten-1{color:#000!important}.bg-orange-darken-1{background-color:#fb8c00!important}.bg-orange-darken-1{color:#fff!important}.bg-orange-darken-2{background-color:#f57c00!important}.bg-orange-darken-2{color:#fff!important}.bg-orange-darken-3{background-color:#ef6c00!important}.bg-orange-darken-3{color:#fff!important}.bg-orange-darken-4{background-color:#e65100!important}.bg-orange-darken-4{color:#fff!important}.bg-orange-accent-1{background-color:#ffd180!important}.bg-orange-accent-1{color:#000!important}.bg-orange-accent-2{background-color:#ffab40!important}.bg-orange-accent-2{color:#000!important}.bg-orange-accent-3{background-color:#ff9100!important}.bg-orange-accent-3{color:#000!important}.bg-orange-accent-4{background-color:#ff6d00!important}.bg-orange-accent-4{color:#fff!important}.bg-deep-orange{background-color:#ff5722!important}.bg-deep-orange{color:#fff!important}.bg-deep-orange-lighten-5{background-color:#fbe9e7!important}.bg-deep-orange-lighten-5{color:#000!important}.bg-deep-orange-lighten-4{background-color:#ffccbc!important}.bg-deep-orange-lighten-4{color:#000!important}.bg-deep-orange-lighten-3{background-color:#ffab91!important}.bg-deep-orange-lighten-3{color:#000!important}.bg-deep-orange-lighten-2{background-color:#ff8a65!important}.bg-deep-orange-lighten-2{color:#000!important}.bg-deep-orange-lighten-1{background-color:#ff7043!important}.bg-deep-orange-lighten-1{color:#fff!important}.bg-deep-orange-darken-1{background-color:#f4511e!important}.bg-deep-orange-darken-1{color:#fff!important}.bg-deep-orange-darken-2{background-color:#e64a19!important}.bg-deep-orange-darken-2{color:#fff!important}.bg-deep-orange-darken-3{background-color:#d84315!important}.bg-deep-orange-darken-3{color:#fff!important}.bg-deep-orange-darken-4{background-color:#bf360c!important}.bg-deep-orange-darken-4{color:#fff!important}.bg-deep-orange-accent-1{background-color:#ff9e80!important}.bg-deep-orange-accent-1{color:#000!important}.bg-deep-orange-accent-2{background-color:#ff6e40!important}.bg-deep-orange-accent-2{color:#fff!important}.bg-deep-orange-accent-3{background-color:#ff3d00!important}.bg-deep-orange-accent-3{color:#fff!important}.bg-deep-orange-accent-4{background-color:#dd2c00!important}.bg-deep-orange-accent-4{color:#fff!important}.bg-brown{background-color:#795548!important}.bg-brown{color:#fff!important}.bg-brown-lighten-5{background-color:#efebe9!important}.bg-brown-lighten-5{color:#000!important}.bg-brown-lighten-4{background-color:#d7ccc8!important}.bg-brown-lighten-4{color:#000!important}.bg-brown-lighten-3{background-color:#bcaaa4!important}.bg-brown-lighten-3{color:#000!important}.bg-brown-lighten-2{background-color:#a1887f!important}.bg-brown-lighten-2{color:#fff!important}.bg-brown-lighten-1{background-color:#8d6e63!important}.bg-brown-lighten-1{color:#fff!important}.bg-brown-darken-1{background-color:#6d4c41!important}.bg-brown-darken-1{color:#fff!important}.bg-brown-darken-2{background-color:#5d4037!important}.bg-brown-darken-2{color:#fff!important}.bg-brown-darken-3{background-color:#4e342e!important}.bg-brown-darken-3{color:#fff!important}.bg-brown-darken-4{background-color:#3e2723!important}.bg-brown-darken-4{color:#fff!important}.bg-blue-grey{background-color:#607d8b!important}.bg-blue-grey{color:#fff!important}.bg-blue-grey-lighten-5{background-color:#eceff1!important}.bg-blue-grey-lighten-5{color:#000!important}.bg-blue-grey-lighten-4{background-color:#cfd8dc!important}.bg-blue-grey-lighten-4{color:#000!important}.bg-blue-grey-lighten-3{background-color:#b0bec5!important}.bg-blue-grey-lighten-3{color:#000!important}.bg-blue-grey-lighten-2{background-color:#90a4ae!important}.bg-blue-grey-lighten-2{color:#fff!important}.bg-blue-grey-lighten-1{background-color:#78909c!important}.bg-blue-grey-lighten-1{color:#fff!important}.bg-blue-grey-darken-1{background-color:#546e7a!important}.bg-blue-grey-darken-1{color:#fff!important}.bg-blue-grey-darken-2{background-color:#455a64!important}.bg-blue-grey-darken-2{color:#fff!important}.bg-blue-grey-darken-3{background-color:#37474f!important}.bg-blue-grey-darken-3{color:#fff!important}.bg-blue-grey-darken-4{background-color:#263238!important}.bg-blue-grey-darken-4{color:#fff!important}.bg-grey{background-color:#9e9e9e!important}.bg-grey{color:#fff!important}.bg-grey-lighten-5{background-color:#fafafa!important}.bg-grey-lighten-5{color:#000!important}.bg-grey-lighten-4{background-color:#f5f5f5!important}.bg-grey-lighten-4{color:#000!important}.bg-grey-lighten-3{background-color:#eee!important}.bg-grey-lighten-3{color:#000!important}.bg-grey-lighten-2{background-color:#e0e0e0!important}.bg-grey-lighten-2{color:#000!important}.bg-grey-lighten-1{background-color:#bdbdbd!important}.bg-grey-lighten-1{color:#000!important}.bg-grey-darken-1{background-color:#757575!important}.bg-grey-darken-1{color:#fff!important}.bg-grey-darken-2{background-color:#616161!important}.bg-grey-darken-2{color:#fff!important}.bg-grey-darken-3{background-color:#424242!important}.bg-grey-darken-3{color:#fff!important}.bg-grey-darken-4{background-color:#212121!important}.bg-grey-darken-4{color:#fff!important}.bg-shades-black{background-color:#000!important}.bg-shades-black{color:#fff!important}.bg-shades-white{background-color:#fff!important}.bg-shades-white{color:#000!important}.bg-shades-transparent{background-color:transparent!important}.bg-shades-transparent{color:currentColor!important}.text-black{color:#000!important}.text-white{color:#fff!important}.text-transparent{color:transparent!important}.text-red{color:#f44336!important}.text-red-lighten-5{color:#ffebee!important}.text-red-lighten-4{color:#ffcdd2!important}.text-red-lighten-3{color:#ef9a9a!important}.text-red-lighten-2{color:#e57373!important}.text-red-lighten-1{color:#ef5350!important}.text-red-darken-1{color:#e53935!important}.text-red-darken-2{color:#d32f2f!important}.text-red-darken-3{color:#c62828!important}.text-red-darken-4{color:#b71c1c!important}.text-red-accent-1{color:#ff8a80!important}.text-red-accent-2{color:#ff5252!important}.text-red-accent-3{color:#ff1744!important}.text-red-accent-4{color:#d50000!important}.text-pink{color:#e91e63!important}.text-pink-lighten-5{color:#fce4ec!important}.text-pink-lighten-4{color:#f8bbd0!important}.text-pink-lighten-3{color:#f48fb1!important}.text-pink-lighten-2{color:#f06292!important}.text-pink-lighten-1{color:#ec407a!important}.text-pink-darken-1{color:#d81b60!important}.text-pink-darken-2{color:#c2185b!important}.text-pink-darken-3{color:#ad1457!important}.text-pink-darken-4{color:#880e4f!important}.text-pink-accent-1{color:#ff80ab!important}.text-pink-accent-2{color:#ff4081!important}.text-pink-accent-3{color:#f50057!important}.text-pink-accent-4{color:#c51162!important}.text-purple{color:#9c27b0!important}.text-purple-lighten-5{color:#f3e5f5!important}.text-purple-lighten-4{color:#e1bee7!important}.text-purple-lighten-3{color:#ce93d8!important}.text-purple-lighten-2{color:#ba68c8!important}.text-purple-lighten-1{color:#ab47bc!important}.text-purple-darken-1{color:#8e24aa!important}.text-purple-darken-2{color:#7b1fa2!important}.text-purple-darken-3{color:#6a1b9a!important}.text-purple-darken-4{color:#4a148c!important}.text-purple-accent-1{color:#ea80fc!important}.text-purple-accent-2{color:#e040fb!important}.text-purple-accent-3{color:#d500f9!important}.text-purple-accent-4{color:#a0f!important}.text-deep-purple{color:#673ab7!important}.text-deep-purple-lighten-5{color:#ede7f6!important}.text-deep-purple-lighten-4{color:#d1c4e9!important}.text-deep-purple-lighten-3{color:#b39ddb!important}.text-deep-purple-lighten-2{color:#9575cd!important}.text-deep-purple-lighten-1{color:#7e57c2!important}.text-deep-purple-darken-1{color:#5e35b1!important}.text-deep-purple-darken-2{color:#512da8!important}.text-deep-purple-darken-3{color:#4527a0!important}.text-deep-purple-darken-4{color:#311b92!important}.text-deep-purple-accent-1{color:#b388ff!important}.text-deep-purple-accent-2{color:#7c4dff!important}.text-deep-purple-accent-3{color:#651fff!important}.text-deep-purple-accent-4{color:#6200ea!important}.text-indigo{color:#3f51b5!important}.text-indigo-lighten-5{color:#e8eaf6!important}.text-indigo-lighten-4{color:#c5cae9!important}.text-indigo-lighten-3{color:#9fa8da!important}.text-indigo-lighten-2{color:#7986cb!important}.text-indigo-lighten-1{color:#5c6bc0!important}.text-indigo-darken-1{color:#3949ab!important}.text-indigo-darken-2{color:#303f9f!important}.text-indigo-darken-3{color:#283593!important}.text-indigo-darken-4{color:#1a237e!important}.text-indigo-accent-1{color:#8c9eff!important}.text-indigo-accent-2{color:#536dfe!important}.text-indigo-accent-3{color:#3d5afe!important}.text-indigo-accent-4{color:#304ffe!important}.text-blue{color:#2196f3!important}.text-blue-lighten-5{color:#e3f2fd!important}.text-blue-lighten-4{color:#bbdefb!important}.text-blue-lighten-3{color:#90caf9!important}.text-blue-lighten-2{color:#64b5f6!important}.text-blue-lighten-1{color:#42a5f5!important}.text-blue-darken-1{color:#1e88e5!important}.text-blue-darken-2{color:#1976d2!important}.text-blue-darken-3{color:#1565c0!important}.text-blue-darken-4{color:#0d47a1!important}.text-blue-accent-1{color:#82b1ff!important}.text-blue-accent-2{color:#448aff!important}.text-blue-accent-3{color:#2979ff!important}.text-blue-accent-4{color:#2962ff!important}.text-light-blue{color:#03a9f4!important}.text-light-blue-lighten-5{color:#e1f5fe!important}.text-light-blue-lighten-4{color:#b3e5fc!important}.text-light-blue-lighten-3{color:#81d4fa!important}.text-light-blue-lighten-2{color:#4fc3f7!important}.text-light-blue-lighten-1{color:#29b6f6!important}.text-light-blue-darken-1{color:#039be5!important}.text-light-blue-darken-2{color:#0288d1!important}.text-light-blue-darken-3{color:#0277bd!important}.text-light-blue-darken-4{color:#01579b!important}.text-light-blue-accent-1{color:#80d8ff!important}.text-light-blue-accent-2{color:#40c4ff!important}.text-light-blue-accent-3{color:#00b0ff!important}.text-light-blue-accent-4{color:#0091ea!important}.text-cyan{color:#00bcd4!important}.text-cyan-lighten-5{color:#e0f7fa!important}.text-cyan-lighten-4{color:#b2ebf2!important}.text-cyan-lighten-3{color:#80deea!important}.text-cyan-lighten-2{color:#4dd0e1!important}.text-cyan-lighten-1{color:#26c6da!important}.text-cyan-darken-1{color:#00acc1!important}.text-cyan-darken-2{color:#0097a7!important}.text-cyan-darken-3{color:#00838f!important}.text-cyan-darken-4{color:#006064!important}.text-cyan-accent-1{color:#84ffff!important}.text-cyan-accent-2{color:#18ffff!important}.text-cyan-accent-3{color:#00e5ff!important}.text-cyan-accent-4{color:#00b8d4!important}.text-teal{color:#009688!important}.text-teal-lighten-5{color:#e0f2f1!important}.text-teal-lighten-4{color:#b2dfdb!important}.text-teal-lighten-3{color:#80cbc4!important}.text-teal-lighten-2{color:#4db6ac!important}.text-teal-lighten-1{color:#26a69a!important}.text-teal-darken-1{color:#00897b!important}.text-teal-darken-2{color:#00796b!important}.text-teal-darken-3{color:#00695c!important}.text-teal-darken-4{color:#004d40!important}.text-teal-accent-1{color:#a7ffeb!important}.text-teal-accent-2{color:#64ffda!important}.text-teal-accent-3{color:#1de9b6!important}.text-teal-accent-4{color:#00bfa5!important}.text-green{color:#4caf50!important}.text-green-lighten-5{color:#e8f5e9!important}.text-green-lighten-4{color:#c8e6c9!important}.text-green-lighten-3{color:#a5d6a7!important}.text-green-lighten-2{color:#81c784!important}.text-green-lighten-1{color:#66bb6a!important}.text-green-darken-1{color:#43a047!important}.text-green-darken-2{color:#388e3c!important}.text-green-darken-3{color:#2e7d32!important}.text-green-darken-4{color:#1b5e20!important}.text-green-accent-1{color:#b9f6ca!important}.text-green-accent-2{color:#69f0ae!important}.text-green-accent-3{color:#00e676!important}.text-green-accent-4{color:#00c853!important}.text-light-green{color:#8bc34a!important}.text-light-green-lighten-5{color:#f1f8e9!important}.text-light-green-lighten-4{color:#dcedc8!important}.text-light-green-lighten-3{color:#c5e1a5!important}.text-light-green-lighten-2{color:#aed581!important}.text-light-green-lighten-1{color:#9ccc65!important}.text-light-green-darken-1{color:#7cb342!important}.text-light-green-darken-2{color:#689f38!important}.text-light-green-darken-3{color:#558b2f!important}.text-light-green-darken-4{color:#33691e!important}.text-light-green-accent-1{color:#ccff90!important}.text-light-green-accent-2{color:#b2ff59!important}.text-light-green-accent-3{color:#76ff03!important}.text-light-green-accent-4{color:#64dd17!important}.text-lime{color:#cddc39!important}.text-lime-lighten-5{color:#f9fbe7!important}.text-lime-lighten-4{color:#f0f4c3!important}.text-lime-lighten-3{color:#e6ee9c!important}.text-lime-lighten-2{color:#dce775!important}.text-lime-lighten-1{color:#d4e157!important}.text-lime-darken-1{color:#c0ca33!important}.text-lime-darken-2{color:#afb42b!important}.text-lime-darken-3{color:#9e9d24!important}.text-lime-darken-4{color:#827717!important}.text-lime-accent-1{color:#f4ff81!important}.text-lime-accent-2{color:#eeff41!important}.text-lime-accent-3{color:#c6ff00!important}.text-lime-accent-4{color:#aeea00!important}.text-yellow{color:#ffeb3b!important}.text-yellow-lighten-5{color:#fffde7!important}.text-yellow-lighten-4{color:#fff9c4!important}.text-yellow-lighten-3{color:#fff59d!important}.text-yellow-lighten-2{color:#fff176!important}.text-yellow-lighten-1{color:#ffee58!important}.text-yellow-darken-1{color:#fdd835!important}.text-yellow-darken-2{color:#fbc02d!important}.text-yellow-darken-3{color:#f9a825!important}.text-yellow-darken-4{color:#f57f17!important}.text-yellow-accent-1{color:#ffff8d!important}.text-yellow-accent-2{color:#ff0!important}.text-yellow-accent-3{color:#ffea00!important}.text-yellow-accent-4{color:#ffd600!important}.text-amber{color:#ffc107!important}.text-amber-lighten-5{color:#fff8e1!important}.text-amber-lighten-4{color:#ffecb3!important}.text-amber-lighten-3{color:#ffe082!important}.text-amber-lighten-2{color:#ffd54f!important}.text-amber-lighten-1{color:#ffca28!important}.text-amber-darken-1{color:#ffb300!important}.text-amber-darken-2{color:#ffa000!important}.text-amber-darken-3{color:#ff8f00!important}.text-amber-darken-4{color:#ff6f00!important}.text-amber-accent-1{color:#ffe57f!important}.text-amber-accent-2{color:#ffd740!important}.text-amber-accent-3{color:#ffc400!important}.text-amber-accent-4{color:#ffab00!important}.text-orange{color:#ff9800!important}.text-orange-lighten-5{color:#fff3e0!important}.text-orange-lighten-4{color:#ffe0b2!important}.text-orange-lighten-3{color:#ffcc80!important}.text-orange-lighten-2{color:#ffb74d!important}.text-orange-lighten-1{color:#ffa726!important}.text-orange-darken-1{color:#fb8c00!important}.text-orange-darken-2{color:#f57c00!important}.text-orange-darken-3{color:#ef6c00!important}.text-orange-darken-4{color:#e65100!important}.text-orange-accent-1{color:#ffd180!important}.text-orange-accent-2{color:#ffab40!important}.text-orange-accent-3{color:#ff9100!important}.text-orange-accent-4{color:#ff6d00!important}.text-deep-orange{color:#ff5722!important}.text-deep-orange-lighten-5{color:#fbe9e7!important}.text-deep-orange-lighten-4{color:#ffccbc!important}.text-deep-orange-lighten-3{color:#ffab91!important}.text-deep-orange-lighten-2{color:#ff8a65!important}.text-deep-orange-lighten-1{color:#ff7043!important}.text-deep-orange-darken-1{color:#f4511e!important}.text-deep-orange-darken-2{color:#e64a19!important}.text-deep-orange-darken-3{color:#d84315!important}.text-deep-orange-darken-4{color:#bf360c!important}.text-deep-orange-accent-1{color:#ff9e80!important}.text-deep-orange-accent-2{color:#ff6e40!important}.text-deep-orange-accent-3{color:#ff3d00!important}.text-deep-orange-accent-4{color:#dd2c00!important}.text-brown{color:#795548!important}.text-brown-lighten-5{color:#efebe9!important}.text-brown-lighten-4{color:#d7ccc8!important}.text-brown-lighten-3{color:#bcaaa4!important}.text-brown-lighten-2{color:#a1887f!important}.text-brown-lighten-1{color:#8d6e63!important}.text-brown-darken-1{color:#6d4c41!important}.text-brown-darken-2{color:#5d4037!important}.text-brown-darken-3{color:#4e342e!important}.text-brown-darken-4{color:#3e2723!important}.text-blue-grey{color:#607d8b!important}.text-blue-grey-lighten-5{color:#eceff1!important}.text-blue-grey-lighten-4{color:#cfd8dc!important}.text-blue-grey-lighten-3{color:#b0bec5!important}.text-blue-grey-lighten-2{color:#90a4ae!important}.text-blue-grey-lighten-1{color:#78909c!important}.text-blue-grey-darken-1{color:#546e7a!important}.text-blue-grey-darken-2{color:#455a64!important}.text-blue-grey-darken-3{color:#37474f!important}.text-blue-grey-darken-4{color:#263238!important}.text-grey{color:#9e9e9e!important}.text-grey-lighten-5{color:#fafafa!important}.text-grey-lighten-4{color:#f5f5f5!important}.text-grey-lighten-3{color:#eee!important}.text-grey-lighten-2{color:#e0e0e0!important}.text-grey-lighten-1{color:#bdbdbd!important}.text-grey-darken-1{color:#757575!important}.text-grey-darken-2{color:#616161!important}.text-grey-darken-3{color:#424242!important}.text-grey-darken-4{color:#212121!important}.text-shades-black{color:#000!important}.text-shades-white{color:#fff!important}.text-shades-transparent{color:transparent!important}/*! - * ress.css • v2.0.4 - * MIT License - * github.com/filipelinhares/ress - */html{box-sizing:border-box;overflow-y:scroll;-webkit-text-size-adjust:100%;word-break:normal;-moz-tab-size:4;tab-size:4}*,:before,:after{background-repeat:no-repeat;box-sizing:inherit}:before,:after{text-decoration:inherit;vertical-align:inherit}*{padding:0;margin:0}hr{overflow:visible;height:0}details,main{display:block}summary{display:list-item}small{font-size:80%}[hidden]{display:none}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}a{background-color:transparent}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}pre{font-size:1em}b,strong{font-weight:bolder}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[disabled]{cursor:default}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit],[role=button]{cursor:pointer;color:inherit}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{outline:1px dotted ButtonText}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button,input,select,textarea{background-color:transparent;border-style:none}select{-moz-appearance:none;-webkit-appearance:none}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;white-space:normal;max-width:100%}::-webkit-file-upload-button{-webkit-appearance:button;color:inherit;font:inherit}::-ms-clear,::-ms-reveal{display:none}img{border-style:none}progress{vertical-align:baseline}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled=true]{cursor:default}.dialog-transition-enter-active,.dialog-bottom-transition-enter-active,.dialog-top-transition-enter-active{transition-duration:225ms!important;transition-timing-function:cubic-bezier(0,0,.2,1)!important}.dialog-transition-leave-active,.dialog-bottom-transition-leave-active,.dialog-top-transition-leave-active{transition-duration:125ms!important;transition-timing-function:cubic-bezier(.4,0,1,1)!important}.dialog-transition-enter-active,.dialog-transition-leave-active,.dialog-bottom-transition-enter-active,.dialog-bottom-transition-leave-active,.dialog-top-transition-enter-active,.dialog-top-transition-leave-active{transition-property:transform,opacity!important;pointer-events:none}.dialog-transition-enter-from,.dialog-transition-leave-to{transform:scale(.9);opacity:0}.dialog-transition-enter-to,.dialog-transition-leave-from{opacity:1}.dialog-bottom-transition-enter-from,.dialog-bottom-transition-leave-to{transform:translateY(calc(50vh + 50%))}.dialog-top-transition-enter-from,.dialog-top-transition-leave-to{transform:translateY(calc(-50vh - 50%))}.picker-transition-enter-active,.picker-reverse-transition-enter-active,.picker-transition-leave-active,.picker-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-transition-move,.picker-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-transition-enter-from,.picker-transition-leave-to,.picker-reverse-transition-enter-from,.picker-reverse-transition-leave-to{opacity:0}.picker-transition-leave-from,.picker-transition-leave-active,.picker-transition-leave-to,.picker-reverse-transition-leave-from,.picker-reverse-transition-leave-active,.picker-reverse-transition-leave-to{position:absolute!important}.picker-transition-enter-active,.picker-transition-leave-active,.picker-reverse-transition-enter-active,.picker-reverse-transition-leave-active{transition-property:transform,opacity!important}.picker-transition-enter-active,.picker-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-transition-enter-from{transform:translate(100%)}.picker-transition-leave-to{transform:translate(-100%)}.picker-reverse-transition-enter-active,.picker-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.picker-reverse-transition-enter-from{transform:translate(-100%)}.picker-reverse-transition-leave-to{transform:translate(100%)}.expand-transition-enter-active,.expand-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.expand-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.expand-transition-enter-active,.expand-transition-leave-active{transition-property:height!important}.expand-x-transition-enter-active,.expand-x-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.expand-x-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.expand-x-transition-enter-active,.expand-x-transition-leave-active{transition-property:width!important}.scale-transition-enter-active,.scale-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-transition-leave-to{opacity:0}.scale-transition-leave-active{transition-duration:.1s!important}.scale-transition-enter-from{opacity:0;transform:scale(0)}.scale-transition-enter-active,.scale-transition-leave-active{transition-property:transform,opacity!important}.scale-rotate-transition-enter-active,.scale-rotate-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-rotate-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-rotate-transition-leave-to{opacity:0}.scale-rotate-transition-leave-active{transition-duration:.1s!important}.scale-rotate-transition-enter-from{opacity:0;transform:scale(0) rotate(-45deg)}.scale-rotate-transition-enter-active,.scale-rotate-transition-leave-active{transition-property:transform,opacity!important}.scale-rotate-reverse-transition-enter-active,.scale-rotate-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-rotate-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scale-rotate-reverse-transition-leave-to{opacity:0}.scale-rotate-reverse-transition-leave-active{transition-duration:.1s!important}.scale-rotate-reverse-transition-enter-from{opacity:0;transform:scale(0) rotate(45deg)}.scale-rotate-reverse-transition-enter-active,.scale-rotate-reverse-transition-leave-active{transition-property:transform,opacity!important}.message-transition-enter-active,.message-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.message-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.message-transition-enter-from,.message-transition-leave-to{opacity:0;transform:translateY(-15px)}.message-transition-leave-from,.message-transition-leave-active{position:absolute}.message-transition-enter-active,.message-transition-leave-active{transition-property:transform,opacity!important}.slide-y-transition-enter-active,.slide-y-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-y-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-y-transition-enter-from,.slide-y-transition-leave-to{opacity:0;transform:translateY(-15px)}.slide-y-transition-enter-active,.slide-y-transition-leave-active{transition-property:transform,opacity!important}.slide-y-reverse-transition-enter-active,.slide-y-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-y-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-y-reverse-transition-enter-from,.slide-y-reverse-transition-leave-to{opacity:0;transform:translateY(15px)}.slide-y-reverse-transition-enter-active,.slide-y-reverse-transition-leave-active{transition-property:transform,opacity!important}.scroll-y-transition-enter-active,.scroll-y-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-y-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-y-transition-enter-from,.scroll-y-transition-leave-to{opacity:0}.scroll-y-transition-enter-from{transform:translateY(-15px)}.scroll-y-transition-leave-to{transform:translateY(15px)}.scroll-y-transition-enter-active,.scroll-y-transition-leave-active{transition-property:transform,opacity!important}.scroll-y-reverse-transition-enter-active,.scroll-y-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-y-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-y-reverse-transition-enter-from,.scroll-y-reverse-transition-leave-to{opacity:0}.scroll-y-reverse-transition-enter-from{transform:translateY(15px)}.scroll-y-reverse-transition-leave-to{transform:translateY(-15px)}.scroll-y-reverse-transition-enter-active,.scroll-y-reverse-transition-leave-active{transition-property:transform,opacity!important}.scroll-x-transition-enter-active,.scroll-x-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-x-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-x-transition-enter-from,.scroll-x-transition-leave-to{opacity:0}.scroll-x-transition-enter-from{transform:translate(-15px)}.scroll-x-transition-leave-to{transform:translate(15px)}.scroll-x-transition-enter-active,.scroll-x-transition-leave-active{transition-property:transform,opacity!important}.scroll-x-reverse-transition-enter-active,.scroll-x-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-x-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.scroll-x-reverse-transition-enter-from,.scroll-x-reverse-transition-leave-to{opacity:0}.scroll-x-reverse-transition-enter-from{transform:translate(15px)}.scroll-x-reverse-transition-leave-to{transform:translate(-15px)}.scroll-x-reverse-transition-enter-active,.scroll-x-reverse-transition-leave-active{transition-property:transform,opacity!important}.slide-x-transition-enter-active,.slide-x-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-x-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-x-transition-enter-from,.slide-x-transition-leave-to{opacity:0;transform:translate(-15px)}.slide-x-transition-enter-active,.slide-x-transition-leave-active{transition-property:transform,opacity!important}.slide-x-reverse-transition-enter-active,.slide-x-reverse-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-x-reverse-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.slide-x-reverse-transition-enter-from,.slide-x-reverse-transition-leave-to{opacity:0;transform:translate(15px)}.slide-x-reverse-transition-enter-active,.slide-x-reverse-transition-leave-active{transition-property:transform,opacity!important}.fade-transition-enter-active,.fade-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.fade-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.fade-transition-enter-from,.fade-transition-leave-to{opacity:0!important}.fade-transition-enter-active,.fade-transition-leave-active{transition-property:opacity!important}.fab-transition-enter-active,.fab-transition-leave-active{transition-duration:.3s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.fab-transition-move{transition-duration:.5s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.fab-transition-enter-from,.fab-transition-leave-to{transform:scale(0) rotate(-45deg)}.fab-transition-enter-active,.fab-transition-leave-active{transition-property:transform!important}.v-locale--is-rtl{direction:rtl}.v-locale--is-ltr{direction:ltr}.blockquote{padding:16px 0 16px 24px;font-size:18px;font-weight:300}html{font-family:Roboto,sans-serif;line-height:1.5;font-size:1rem;overflow-x:hidden;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:rgba(0,0,0,0)}html.overflow-y-hidden{overflow-y:hidden!important}:root{--v-theme-overlay-multiplier: 1;--v-scrollbar-offset: 0px}@supports (-webkit-touch-callout: none){body{cursor:pointer}}@media only print{.hidden-print-only{display:none!important}}@media only screen{.hidden-screen-only{display:none!important}}@media (max-width: 599.98px){.hidden-xs{display:none!important}}@media (min-width: 600px) and (max-width: 959.98px){.hidden-sm{display:none!important}}@media (min-width: 960px) and (max-width: 1279.98px){.hidden-md{display:none!important}}@media (min-width: 1280px) and (max-width: 1919.98px){.hidden-lg{display:none!important}}@media (min-width: 1920px) and (max-width: 2559.98px){.hidden-xl{display:none!important}}@media (min-width: 2560px){.hidden-xxl{display:none!important}}@media (min-width: 600px){.hidden-sm-and-up{display:none!important}}@media (min-width: 960px){.hidden-md-and-up{display:none!important}}@media (min-width: 1280px){.hidden-lg-and-up{display:none!important}}@media (min-width: 1920px){.hidden-xl-and-up{display:none!important}}@media (max-width: 959.98px){.hidden-sm-and-down{display:none!important}}@media (max-width: 1279.98px){.hidden-md-and-down{display:none!important}}@media (max-width: 1919.98px){.hidden-lg-and-down{display:none!important}}@media (max-width: 2559.98px){.hidden-xl-and-down{display:none!important}}.elevation-24{box-shadow:0 11px 15px -7px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 24px 38px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 9px 46px 8px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-23{box-shadow:0 11px 14px -7px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 23px 36px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 9px 44px 8px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-22{box-shadow:0 10px 14px -6px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 22px 35px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 8px 42px 7px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-21{box-shadow:0 10px 13px -6px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 21px 33px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 8px 40px 7px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-20{box-shadow:0 10px 13px -6px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 20px 31px 3px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 8px 38px 7px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-19{box-shadow:0 9px 12px -6px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 19px 29px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 7px 36px 6px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-18{box-shadow:0 9px 11px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 18px 28px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 7px 34px 6px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-17{box-shadow:0 8px 11px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 17px 26px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 6px 32px 5px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-16{box-shadow:0 8px 10px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 16px 24px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 6px 30px 5px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-15{box-shadow:0 8px 9px -5px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 15px 22px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 6px 28px 5px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-14{box-shadow:0 7px 9px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 14px 21px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 5px 26px 4px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-13{box-shadow:0 7px 8px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 13px 19px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 5px 24px 4px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-12{box-shadow:0 7px 8px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 12px 17px 2px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 5px 22px 4px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-11{box-shadow:0 6px 7px -4px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 11px 15px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 4px 20px 3px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-10{box-shadow:0 6px 6px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 10px 14px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 4px 18px 3px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-9{box-shadow:0 5px 6px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 9px 12px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 16px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-8{box-shadow:0 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-7{box-shadow:0 4px 5px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 7px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 2px 16px 1px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-6{box-shadow:0 3px 5px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 6px 10px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 18px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-5{box-shadow:0 3px 5px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 5px 8px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 14px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-4{box-shadow:0 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 4px 5px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 10px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-3{box-shadow:0 3px 3px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 3px 4px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 8px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-2{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-1{box-shadow:0 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 1px 1px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 3px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.elevation-0{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))!important}.d-sr-only,.d-sr-only-focusable:not(:focus){border:0!important;clip:rect(0,0,0,0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!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-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-scroll{overflow-y:scroll!important}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!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}.float-none{float:none!important}.float-left{float:left!important}.float-right{float:right!important}.v-locale--is-rtl .float-end{float:left!important}.v-locale--is-rtl .float-start,.v-locale--is-ltr .float-end{float:right!important}.v-locale--is-ltr .float-start{float:left!important}.flex-fill,.flex-1-1{flex:1 1 auto!important}.flex-1-0{flex:1 0 auto!important}.flex-0-1{flex:0 1 auto!important}.flex-0-0{flex:0 0 auto!important}.flex-1-1-100{flex:1 1 100%!important}.flex-1-0-100{flex:1 0 100%!important}.flex-0-1-100{flex:0 1 100%!important}.flex-0-0-100{flex:0 0 100%!important}.flex-1-1-0{flex:1 1 0!important}.flex-1-0-0{flex:1 0 0!important}.flex-0-1-0{flex:0 1 0!important}.flex-0-0-0{flex:0 0 0!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-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-space-between{justify-content:space-between!important}.justify-space-around{justify-content:space-around!important}.justify-space-evenly{justify-content:space-evenly!important}.align-start{align-items:flex-start!important}.align-end{align-items:flex-end!important}.align-center{align-items:center!important}.align-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-space-around{align-content:space-around!important}.align-content-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-7{order:7!important}.order-8{order:8!important}.order-9{order:9!important}.order-10{order:10!important}.order-11{order:11!important}.order-12{order:12!important}.order-last{order:13!important}.ga-0{gap:0px!important}.ga-1{gap:4px!important}.ga-2{gap:8px!important}.ga-3{gap:12px!important}.ga-4{gap:16px!important}.ga-5{gap:20px!important}.ga-6{gap:24px!important}.ga-7{gap:28px!important}.ga-8{gap:32px!important}.ga-9{gap:36px!important}.ga-10{gap:40px!important}.ga-11{gap:44px!important}.ga-12{gap:48px!important}.ga-13{gap:52px!important}.ga-14{gap:56px!important}.ga-15{gap:60px!important}.ga-16{gap:64px!important}.ga-auto{gap:auto!important}.gr-0{row-gap:0px!important}.gr-1{row-gap:4px!important}.gr-2{row-gap:8px!important}.gr-3{row-gap:12px!important}.gr-4{row-gap:16px!important}.gr-5{row-gap:20px!important}.gr-6{row-gap:24px!important}.gr-7{row-gap:28px!important}.gr-8{row-gap:32px!important}.gr-9{row-gap:36px!important}.gr-10{row-gap:40px!important}.gr-11{row-gap:44px!important}.gr-12{row-gap:48px!important}.gr-13{row-gap:52px!important}.gr-14{row-gap:56px!important}.gr-15{row-gap:60px!important}.gr-16{row-gap:64px!important}.gr-auto{row-gap:auto!important}.gc-0{column-gap:0px!important}.gc-1{column-gap:4px!important}.gc-2{column-gap:8px!important}.gc-3{column-gap:12px!important}.gc-4{column-gap:16px!important}.gc-5{column-gap:20px!important}.gc-6{column-gap:24px!important}.gc-7{column-gap:28px!important}.gc-8{column-gap:32px!important}.gc-9{column-gap:36px!important}.gc-10{column-gap:40px!important}.gc-11{column-gap:44px!important}.gc-12{column-gap:48px!important}.gc-13{column-gap:52px!important}.gc-14{column-gap:56px!important}.gc-15{column-gap:60px!important}.gc-16{column-gap:64px!important}.gc-auto{column-gap:auto!important}.ma-0{margin:0!important}.ma-1{margin:4px!important}.ma-2{margin:8px!important}.ma-3{margin:12px!important}.ma-4{margin:16px!important}.ma-5{margin:20px!important}.ma-6{margin:24px!important}.ma-7{margin:28px!important}.ma-8{margin:32px!important}.ma-9{margin:36px!important}.ma-10{margin:40px!important}.ma-11{margin:44px!important}.ma-12{margin:48px!important}.ma-13{margin:52px!important}.ma-14{margin:56px!important}.ma-15{margin:60px!important}.ma-16{margin:64px!important}.ma-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:4px!important;margin-left:4px!important}.mx-2{margin-right:8px!important;margin-left:8px!important}.mx-3{margin-right:12px!important;margin-left:12px!important}.mx-4{margin-right:16px!important;margin-left:16px!important}.mx-5{margin-right:20px!important;margin-left:20px!important}.mx-6{margin-right:24px!important;margin-left:24px!important}.mx-7{margin-right:28px!important;margin-left:28px!important}.mx-8{margin-right:32px!important;margin-left:32px!important}.mx-9{margin-right:36px!important;margin-left:36px!important}.mx-10{margin-right:40px!important;margin-left:40px!important}.mx-11{margin-right:44px!important;margin-left:44px!important}.mx-12{margin-right:48px!important;margin-left:48px!important}.mx-13{margin-right:52px!important;margin-left:52px!important}.mx-14{margin-right:56px!important;margin-left:56px!important}.mx-15{margin-right:60px!important;margin-left:60px!important}.mx-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-2{margin-top:8px!important;margin-bottom:8px!important}.my-3{margin-top:12px!important;margin-bottom:12px!important}.my-4{margin-top:16px!important;margin-bottom:16px!important}.my-5{margin-top:20px!important;margin-bottom:20px!important}.my-6{margin-top:24px!important;margin-bottom:24px!important}.my-7{margin-top:28px!important;margin-bottom:28px!important}.my-8{margin-top:32px!important;margin-bottom:32px!important}.my-9{margin-top:36px!important;margin-bottom:36px!important}.my-10{margin-top:40px!important;margin-bottom:40px!important}.my-11{margin-top:44px!important;margin-bottom:44px!important}.my-12{margin-top:48px!important;margin-bottom:48px!important}.my-13{margin-top:52px!important;margin-bottom:52px!important}.my-14{margin-top:56px!important;margin-bottom:56px!important}.my-15{margin-top:60px!important;margin-bottom:60px!important}.my-16{margin-top:64px!important;margin-bottom:64px!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:4px!important}.mt-2{margin-top:8px!important}.mt-3{margin-top:12px!important}.mt-4{margin-top:16px!important}.mt-5{margin-top:20px!important}.mt-6{margin-top:24px!important}.mt-7{margin-top:28px!important}.mt-8{margin-top:32px!important}.mt-9{margin-top:36px!important}.mt-10{margin-top:40px!important}.mt-11{margin-top:44px!important}.mt-12{margin-top:48px!important}.mt-13{margin-top:52px!important}.mt-14{margin-top:56px!important}.mt-15{margin-top:60px!important}.mt-16{margin-top:64px!important}.mt-auto{margin-top:auto!important}.mr-0{margin-right:0!important}.mr-1{margin-right:4px!important}.mr-2{margin-right:8px!important}.mr-3{margin-right:12px!important}.mr-4{margin-right:16px!important}.mr-5{margin-right:20px!important}.mr-6{margin-right:24px!important}.mr-7{margin-right:28px!important}.mr-8{margin-right:32px!important}.mr-9{margin-right:36px!important}.mr-10{margin-right:40px!important}.mr-11{margin-right:44px!important}.mr-12{margin-right:48px!important}.mr-13{margin-right:52px!important}.mr-14{margin-right:56px!important}.mr-15{margin-right:60px!important}.mr-16{margin-right:64px!important}.mr-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:4px!important}.mb-2{margin-bottom:8px!important}.mb-3{margin-bottom:12px!important}.mb-4{margin-bottom:16px!important}.mb-5{margin-bottom:20px!important}.mb-6{margin-bottom:24px!important}.mb-7{margin-bottom:28px!important}.mb-8{margin-bottom:32px!important}.mb-9{margin-bottom:36px!important}.mb-10{margin-bottom:40px!important}.mb-11{margin-bottom:44px!important}.mb-12{margin-bottom:48px!important}.mb-13{margin-bottom:52px!important}.mb-14{margin-bottom:56px!important}.mb-15{margin-bottom:60px!important}.mb-16{margin-bottom:64px!important}.mb-auto{margin-bottom:auto!important}.ml-0{margin-left:0!important}.ml-1{margin-left:4px!important}.ml-2{margin-left:8px!important}.ml-3{margin-left:12px!important}.ml-4{margin-left:16px!important}.ml-5{margin-left:20px!important}.ml-6{margin-left:24px!important}.ml-7{margin-left:28px!important}.ml-8{margin-left:32px!important}.ml-9{margin-left:36px!important}.ml-10{margin-left:40px!important}.ml-11{margin-left:44px!important}.ml-12{margin-left:48px!important}.ml-13{margin-left:52px!important}.ml-14{margin-left:56px!important}.ml-15{margin-left:60px!important}.ml-16{margin-left:64px!important}.ml-auto{margin-left:auto!important}.ms-0{margin-inline-start:0px!important}.ms-1{margin-inline-start:4px!important}.ms-2{margin-inline-start:8px!important}.ms-3{margin-inline-start:12px!important}.ms-4{margin-inline-start:16px!important}.ms-5{margin-inline-start:20px!important}.ms-6{margin-inline-start:24px!important}.ms-7{margin-inline-start:28px!important}.ms-8{margin-inline-start:32px!important}.ms-9{margin-inline-start:36px!important}.ms-10{margin-inline-start:40px!important}.ms-11{margin-inline-start:44px!important}.ms-12{margin-inline-start:48px!important}.ms-13{margin-inline-start:52px!important}.ms-14{margin-inline-start:56px!important}.ms-15{margin-inline-start:60px!important}.ms-16{margin-inline-start:64px!important}.ms-auto{margin-inline-start:auto!important}.me-0{margin-inline-end:0px!important}.me-1{margin-inline-end:4px!important}.me-2{margin-inline-end:8px!important}.me-3{margin-inline-end:12px!important}.me-4{margin-inline-end:16px!important}.me-5{margin-inline-end:20px!important}.me-6{margin-inline-end:24px!important}.me-7{margin-inline-end:28px!important}.me-8{margin-inline-end:32px!important}.me-9{margin-inline-end:36px!important}.me-10{margin-inline-end:40px!important}.me-11{margin-inline-end:44px!important}.me-12{margin-inline-end:48px!important}.me-13{margin-inline-end:52px!important}.me-14{margin-inline-end:56px!important}.me-15{margin-inline-end:60px!important}.me-16{margin-inline-end:64px!important}.me-auto{margin-inline-end:auto!important}.ma-n1{margin:-4px!important}.ma-n2{margin:-8px!important}.ma-n3{margin:-12px!important}.ma-n4{margin:-16px!important}.ma-n5{margin:-20px!important}.ma-n6{margin:-24px!important}.ma-n7{margin:-28px!important}.ma-n8{margin:-32px!important}.ma-n9{margin:-36px!important}.ma-n10{margin:-40px!important}.ma-n11{margin:-44px!important}.ma-n12{margin:-48px!important}.ma-n13{margin:-52px!important}.ma-n14{margin:-56px!important}.ma-n15{margin:-60px!important}.ma-n16{margin:-64px!important}.mx-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-n16{margin-right:-64px!important;margin-left:-64px!important}.my-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-n1{margin-top:-4px!important}.mt-n2{margin-top:-8px!important}.mt-n3{margin-top:-12px!important}.mt-n4{margin-top:-16px!important}.mt-n5{margin-top:-20px!important}.mt-n6{margin-top:-24px!important}.mt-n7{margin-top:-28px!important}.mt-n8{margin-top:-32px!important}.mt-n9{margin-top:-36px!important}.mt-n10{margin-top:-40px!important}.mt-n11{margin-top:-44px!important}.mt-n12{margin-top:-48px!important}.mt-n13{margin-top:-52px!important}.mt-n14{margin-top:-56px!important}.mt-n15{margin-top:-60px!important}.mt-n16{margin-top:-64px!important}.mr-n1{margin-right:-4px!important}.mr-n2{margin-right:-8px!important}.mr-n3{margin-right:-12px!important}.mr-n4{margin-right:-16px!important}.mr-n5{margin-right:-20px!important}.mr-n6{margin-right:-24px!important}.mr-n7{margin-right:-28px!important}.mr-n8{margin-right:-32px!important}.mr-n9{margin-right:-36px!important}.mr-n10{margin-right:-40px!important}.mr-n11{margin-right:-44px!important}.mr-n12{margin-right:-48px!important}.mr-n13{margin-right:-52px!important}.mr-n14{margin-right:-56px!important}.mr-n15{margin-right:-60px!important}.mr-n16{margin-right:-64px!important}.mb-n1{margin-bottom:-4px!important}.mb-n2{margin-bottom:-8px!important}.mb-n3{margin-bottom:-12px!important}.mb-n4{margin-bottom:-16px!important}.mb-n5{margin-bottom:-20px!important}.mb-n6{margin-bottom:-24px!important}.mb-n7{margin-bottom:-28px!important}.mb-n8{margin-bottom:-32px!important}.mb-n9{margin-bottom:-36px!important}.mb-n10{margin-bottom:-40px!important}.mb-n11{margin-bottom:-44px!important}.mb-n12{margin-bottom:-48px!important}.mb-n13{margin-bottom:-52px!important}.mb-n14{margin-bottom:-56px!important}.mb-n15{margin-bottom:-60px!important}.mb-n16{margin-bottom:-64px!important}.ml-n1{margin-left:-4px!important}.ml-n2{margin-left:-8px!important}.ml-n3{margin-left:-12px!important}.ml-n4{margin-left:-16px!important}.ml-n5{margin-left:-20px!important}.ml-n6{margin-left:-24px!important}.ml-n7{margin-left:-28px!important}.ml-n8{margin-left:-32px!important}.ml-n9{margin-left:-36px!important}.ml-n10{margin-left:-40px!important}.ml-n11{margin-left:-44px!important}.ml-n12{margin-left:-48px!important}.ml-n13{margin-left:-52px!important}.ml-n14{margin-left:-56px!important}.ml-n15{margin-left:-60px!important}.ml-n16{margin-left:-64px!important}.ms-n1{margin-inline-start:-4px!important}.ms-n2{margin-inline-start:-8px!important}.ms-n3{margin-inline-start:-12px!important}.ms-n4{margin-inline-start:-16px!important}.ms-n5{margin-inline-start:-20px!important}.ms-n6{margin-inline-start:-24px!important}.ms-n7{margin-inline-start:-28px!important}.ms-n8{margin-inline-start:-32px!important}.ms-n9{margin-inline-start:-36px!important}.ms-n10{margin-inline-start:-40px!important}.ms-n11{margin-inline-start:-44px!important}.ms-n12{margin-inline-start:-48px!important}.ms-n13{margin-inline-start:-52px!important}.ms-n14{margin-inline-start:-56px!important}.ms-n15{margin-inline-start:-60px!important}.ms-n16{margin-inline-start:-64px!important}.me-n1{margin-inline-end:-4px!important}.me-n2{margin-inline-end:-8px!important}.me-n3{margin-inline-end:-12px!important}.me-n4{margin-inline-end:-16px!important}.me-n5{margin-inline-end:-20px!important}.me-n6{margin-inline-end:-24px!important}.me-n7{margin-inline-end:-28px!important}.me-n8{margin-inline-end:-32px!important}.me-n9{margin-inline-end:-36px!important}.me-n10{margin-inline-end:-40px!important}.me-n11{margin-inline-end:-44px!important}.me-n12{margin-inline-end:-48px!important}.me-n13{margin-inline-end:-52px!important}.me-n14{margin-inline-end:-56px!important}.me-n15{margin-inline-end:-60px!important}.me-n16{margin-inline-end:-64px!important}.pa-0{padding:0!important}.pa-1{padding:4px!important}.pa-2{padding:8px!important}.pa-3{padding:12px!important}.pa-4{padding:16px!important}.pa-5{padding:20px!important}.pa-6{padding:24px!important}.pa-7{padding:28px!important}.pa-8{padding:32px!important}.pa-9{padding:36px!important}.pa-10{padding:40px!important}.pa-11{padding:44px!important}.pa-12{padding:48px!important}.pa-13{padding:52px!important}.pa-14{padding:56px!important}.pa-15{padding:60px!important}.pa-16{padding:64px!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:4px!important;padding-left:4px!important}.px-2{padding-right:8px!important;padding-left:8px!important}.px-3{padding-right:12px!important;padding-left:12px!important}.px-4{padding-right:16px!important;padding-left:16px!important}.px-5{padding-right:20px!important;padding-left:20px!important}.px-6{padding-right:24px!important;padding-left:24px!important}.px-7{padding-right:28px!important;padding-left:28px!important}.px-8{padding-right:32px!important;padding-left:32px!important}.px-9{padding-right:36px!important;padding-left:36px!important}.px-10{padding-right:40px!important;padding-left:40px!important}.px-11{padding-right:44px!important;padding-left:44px!important}.px-12{padding-right:48px!important;padding-left:48px!important}.px-13{padding-right:52px!important;padding-left:52px!important}.px-14{padding-right:56px!important;padding-left:56px!important}.px-15{padding-right:60px!important;padding-left:60px!important}.px-16{padding-right:64px!important;padding-left:64px!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:4px!important;padding-bottom:4px!important}.py-2{padding-top:8px!important;padding-bottom:8px!important}.py-3{padding-top:12px!important;padding-bottom:12px!important}.py-4{padding-top:16px!important;padding-bottom:16px!important}.py-5{padding-top:20px!important;padding-bottom:20px!important}.py-6{padding-top:24px!important;padding-bottom:24px!important}.py-7{padding-top:28px!important;padding-bottom:28px!important}.py-8{padding-top:32px!important;padding-bottom:32px!important}.py-9{padding-top:36px!important;padding-bottom:36px!important}.py-10{padding-top:40px!important;padding-bottom:40px!important}.py-11{padding-top:44px!important;padding-bottom:44px!important}.py-12{padding-top:48px!important;padding-bottom:48px!important}.py-13{padding-top:52px!important;padding-bottom:52px!important}.py-14{padding-top:56px!important;padding-bottom:56px!important}.py-15{padding-top:60px!important;padding-bottom:60px!important}.py-16{padding-top:64px!important;padding-bottom:64px!important}.pt-0{padding-top:0!important}.pt-1{padding-top:4px!important}.pt-2{padding-top:8px!important}.pt-3{padding-top:12px!important}.pt-4{padding-top:16px!important}.pt-5{padding-top:20px!important}.pt-6{padding-top:24px!important}.pt-7{padding-top:28px!important}.pt-8{padding-top:32px!important}.pt-9{padding-top:36px!important}.pt-10{padding-top:40px!important}.pt-11{padding-top:44px!important}.pt-12{padding-top:48px!important}.pt-13{padding-top:52px!important}.pt-14{padding-top:56px!important}.pt-15{padding-top:60px!important}.pt-16{padding-top:64px!important}.pr-0{padding-right:0!important}.pr-1{padding-right:4px!important}.pr-2{padding-right:8px!important}.pr-3{padding-right:12px!important}.pr-4{padding-right:16px!important}.pr-5{padding-right:20px!important}.pr-6{padding-right:24px!important}.pr-7{padding-right:28px!important}.pr-8{padding-right:32px!important}.pr-9{padding-right:36px!important}.pr-10{padding-right:40px!important}.pr-11{padding-right:44px!important}.pr-12{padding-right:48px!important}.pr-13{padding-right:52px!important}.pr-14{padding-right:56px!important}.pr-15{padding-right:60px!important}.pr-16{padding-right:64px!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:4px!important}.pb-2{padding-bottom:8px!important}.pb-3{padding-bottom:12px!important}.pb-4{padding-bottom:16px!important}.pb-5{padding-bottom:20px!important}.pb-6{padding-bottom:24px!important}.pb-7{padding-bottom:28px!important}.pb-8{padding-bottom:32px!important}.pb-9{padding-bottom:36px!important}.pb-10{padding-bottom:40px!important}.pb-11{padding-bottom:44px!important}.pb-12{padding-bottom:48px!important}.pb-13{padding-bottom:52px!important}.pb-14{padding-bottom:56px!important}.pb-15{padding-bottom:60px!important}.pb-16{padding-bottom:64px!important}.pl-0{padding-left:0!important}.pl-1{padding-left:4px!important}.pl-2{padding-left:8px!important}.pl-3{padding-left:12px!important}.pl-4{padding-left:16px!important}.pl-5{padding-left:20px!important}.pl-6{padding-left:24px!important}.pl-7{padding-left:28px!important}.pl-8{padding-left:32px!important}.pl-9{padding-left:36px!important}.pl-10{padding-left:40px!important}.pl-11{padding-left:44px!important}.pl-12{padding-left:48px!important}.pl-13{padding-left:52px!important}.pl-14{padding-left:56px!important}.pl-15{padding-left:60px!important}.pl-16{padding-left:64px!important}.ps-0{padding-inline-start:0px!important}.ps-1{padding-inline-start:4px!important}.ps-2{padding-inline-start:8px!important}.ps-3{padding-inline-start:12px!important}.ps-4{padding-inline-start:16px!important}.ps-5{padding-inline-start:20px!important}.ps-6{padding-inline-start:24px!important}.ps-7{padding-inline-start:28px!important}.ps-8{padding-inline-start:32px!important}.ps-9{padding-inline-start:36px!important}.ps-10{padding-inline-start:40px!important}.ps-11{padding-inline-start:44px!important}.ps-12{padding-inline-start:48px!important}.ps-13{padding-inline-start:52px!important}.ps-14{padding-inline-start:56px!important}.ps-15{padding-inline-start:60px!important}.ps-16{padding-inline-start:64px!important}.pe-0{padding-inline-end:0px!important}.pe-1{padding-inline-end:4px!important}.pe-2{padding-inline-end:8px!important}.pe-3{padding-inline-end:12px!important}.pe-4{padding-inline-end:16px!important}.pe-5{padding-inline-end:20px!important}.pe-6{padding-inline-end:24px!important}.pe-7{padding-inline-end:28px!important}.pe-8{padding-inline-end:32px!important}.pe-9{padding-inline-end:36px!important}.pe-10{padding-inline-end:40px!important}.pe-11{padding-inline-end:44px!important}.pe-12{padding-inline-end:48px!important}.pe-13{padding-inline-end:52px!important}.pe-14{padding-inline-end:56px!important}.pe-15{padding-inline-end:60px!important}.pe-16{padding-inline-end:64px!important}.rounded-0{border-radius:0!important}.rounded-sm{border-radius:2px!important}.rounded{border-radius:4px!important}.rounded-lg{border-radius:8px!important}.rounded-xl{border-radius:24px!important}.rounded-pill{border-radius:9999px!important}.rounded-circle{border-radius:50%!important}.rounded-shaped{border-radius:24px 0!important}.rounded-t-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-t-sm{border-top-left-radius:2px!important;border-top-right-radius:2px!important}.rounded-t{border-top-left-radius:4px!important;border-top-right-radius:4px!important}.rounded-t-lg{border-top-left-radius:8px!important;border-top-right-radius:8px!important}.rounded-t-xl{border-top-left-radius:24px!important;border-top-right-radius:24px!important}.rounded-t-pill{border-top-left-radius:9999px!important;border-top-right-radius:9999px!important}.rounded-t-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-t-shaped{border-top-left-radius:24px!important;border-top-right-radius:0!important}.v-locale--is-ltr .rounded-e-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.v-locale--is-rtl .rounded-e-0{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.v-locale--is-ltr .rounded-e-sm{border-top-right-radius:2px!important;border-bottom-right-radius:2px!important}.v-locale--is-rtl .rounded-e-sm{border-top-left-radius:2px!important;border-bottom-left-radius:2px!important}.v-locale--is-ltr .rounded-e{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.v-locale--is-rtl .rounded-e{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}.v-locale--is-ltr .rounded-e-lg{border-top-right-radius:8px!important;border-bottom-right-radius:8px!important}.v-locale--is-rtl .rounded-e-lg{border-top-left-radius:8px!important;border-bottom-left-radius:8px!important}.v-locale--is-ltr .rounded-e-xl{border-top-right-radius:24px!important;border-bottom-right-radius:24px!important}.v-locale--is-rtl .rounded-e-xl{border-top-left-radius:24px!important;border-bottom-left-radius:24px!important}.v-locale--is-ltr .rounded-e-pill{border-top-right-radius:9999px!important;border-bottom-right-radius:9999px!important}.v-locale--is-rtl .rounded-e-pill{border-top-left-radius:9999px!important;border-bottom-left-radius:9999px!important}.v-locale--is-ltr .rounded-e-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.v-locale--is-rtl .rounded-e-circle{border-top-left-radius:50%!important;border-bottom-left-radius:50%!important}.v-locale--is-ltr .rounded-e-shaped{border-top-right-radius:24px!important;border-bottom-right-radius:0!important}.v-locale--is-rtl .rounded-e-shaped{border-top-left-radius:24px!important;border-bottom-left-radius:0!important}.rounded-b-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-b-sm{border-bottom-left-radius:2px!important;border-bottom-right-radius:2px!important}.rounded-b{border-bottom-left-radius:4px!important;border-bottom-right-radius:4px!important}.rounded-b-lg{border-bottom-left-radius:8px!important;border-bottom-right-radius:8px!important}.rounded-b-xl{border-bottom-left-radius:24px!important;border-bottom-right-radius:24px!important}.rounded-b-pill{border-bottom-left-radius:9999px!important;border-bottom-right-radius:9999px!important}.rounded-b-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-b-shaped{border-bottom-left-radius:24px!important;border-bottom-right-radius:0!important}.v-locale--is-ltr .rounded-s-0{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.v-locale--is-rtl .rounded-s-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.v-locale--is-ltr .rounded-s-sm{border-top-left-radius:2px!important;border-bottom-left-radius:2px!important}.v-locale--is-rtl .rounded-s-sm{border-top-right-radius:2px!important;border-bottom-right-radius:2px!important}.v-locale--is-ltr .rounded-s{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}.v-locale--is-rtl .rounded-s{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.v-locale--is-ltr .rounded-s-lg{border-top-left-radius:8px!important;border-bottom-left-radius:8px!important}.v-locale--is-rtl .rounded-s-lg{border-top-right-radius:8px!important;border-bottom-right-radius:8px!important}.v-locale--is-ltr .rounded-s-xl{border-top-left-radius:24px!important;border-bottom-left-radius:24px!important}.v-locale--is-rtl .rounded-s-xl{border-top-right-radius:24px!important;border-bottom-right-radius:24px!important}.v-locale--is-ltr .rounded-s-pill{border-top-left-radius:9999px!important;border-bottom-left-radius:9999px!important}.v-locale--is-rtl .rounded-s-pill{border-top-right-radius:9999px!important;border-bottom-right-radius:9999px!important}.v-locale--is-ltr .rounded-s-circle{border-top-left-radius:50%!important;border-bottom-left-radius:50%!important}.v-locale--is-rtl .rounded-s-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.v-locale--is-ltr .rounded-s-shaped{border-top-left-radius:24px!important;border-bottom-left-radius:0!important}.v-locale--is-rtl .rounded-s-shaped{border-top-right-radius:24px!important;border-bottom-right-radius:0!important}.v-locale--is-ltr .rounded-ts-0{border-top-left-radius:0!important}.v-locale--is-rtl .rounded-ts-0{border-top-right-radius:0!important}.v-locale--is-ltr .rounded-ts-sm{border-top-left-radius:2px!important}.v-locale--is-rtl .rounded-ts-sm{border-top-right-radius:2px!important}.v-locale--is-ltr .rounded-ts{border-top-left-radius:4px!important}.v-locale--is-rtl .rounded-ts{border-top-right-radius:4px!important}.v-locale--is-ltr .rounded-ts-lg{border-top-left-radius:8px!important}.v-locale--is-rtl .rounded-ts-lg{border-top-right-radius:8px!important}.v-locale--is-ltr .rounded-ts-xl{border-top-left-radius:24px!important}.v-locale--is-rtl .rounded-ts-xl{border-top-right-radius:24px!important}.v-locale--is-ltr .rounded-ts-pill{border-top-left-radius:9999px!important}.v-locale--is-rtl .rounded-ts-pill{border-top-right-radius:9999px!important}.v-locale--is-ltr .rounded-ts-circle{border-top-left-radius:50%!important}.v-locale--is-rtl .rounded-ts-circle{border-top-right-radius:50%!important}.v-locale--is-ltr .rounded-ts-shaped{border-top-left-radius:24px 0!important}.v-locale--is-rtl .rounded-ts-shaped{border-top-right-radius:24px 0!important}.v-locale--is-ltr .rounded-te-0{border-top-right-radius:0!important}.v-locale--is-rtl .rounded-te-0{border-top-left-radius:0!important}.v-locale--is-ltr .rounded-te-sm{border-top-right-radius:2px!important}.v-locale--is-rtl .rounded-te-sm{border-top-left-radius:2px!important}.v-locale--is-ltr .rounded-te{border-top-right-radius:4px!important}.v-locale--is-rtl .rounded-te{border-top-left-radius:4px!important}.v-locale--is-ltr .rounded-te-lg{border-top-right-radius:8px!important}.v-locale--is-rtl .rounded-te-lg{border-top-left-radius:8px!important}.v-locale--is-ltr .rounded-te-xl{border-top-right-radius:24px!important}.v-locale--is-rtl .rounded-te-xl{border-top-left-radius:24px!important}.v-locale--is-ltr .rounded-te-pill{border-top-right-radius:9999px!important}.v-locale--is-rtl .rounded-te-pill{border-top-left-radius:9999px!important}.v-locale--is-ltr .rounded-te-circle{border-top-right-radius:50%!important}.v-locale--is-rtl .rounded-te-circle{border-top-left-radius:50%!important}.v-locale--is-ltr .rounded-te-shaped{border-top-right-radius:24px 0!important}.v-locale--is-rtl .rounded-te-shaped{border-top-left-radius:24px 0!important}.v-locale--is-ltr .rounded-be-0{border-bottom-right-radius:0!important}.v-locale--is-rtl .rounded-be-0{border-bottom-left-radius:0!important}.v-locale--is-ltr .rounded-be-sm{border-bottom-right-radius:2px!important}.v-locale--is-rtl .rounded-be-sm{border-bottom-left-radius:2px!important}.v-locale--is-ltr .rounded-be{border-bottom-right-radius:4px!important}.v-locale--is-rtl .rounded-be{border-bottom-left-radius:4px!important}.v-locale--is-ltr .rounded-be-lg{border-bottom-right-radius:8px!important}.v-locale--is-rtl .rounded-be-lg{border-bottom-left-radius:8px!important}.v-locale--is-ltr .rounded-be-xl{border-bottom-right-radius:24px!important}.v-locale--is-rtl .rounded-be-xl{border-bottom-left-radius:24px!important}.v-locale--is-ltr .rounded-be-pill{border-bottom-right-radius:9999px!important}.v-locale--is-rtl .rounded-be-pill{border-bottom-left-radius:9999px!important}.v-locale--is-ltr .rounded-be-circle{border-bottom-right-radius:50%!important}.v-locale--is-rtl .rounded-be-circle{border-bottom-left-radius:50%!important}.v-locale--is-ltr .rounded-be-shaped{border-bottom-right-radius:24px 0!important}.v-locale--is-rtl .rounded-be-shaped{border-bottom-left-radius:24px 0!important}.v-locale--is-ltr .rounded-bs-0{border-bottom-left-radius:0!important}.v-locale--is-rtl .rounded-bs-0{border-bottom-right-radius:0!important}.v-locale--is-ltr .rounded-bs-sm{border-bottom-left-radius:2px!important}.v-locale--is-rtl .rounded-bs-sm{border-bottom-right-radius:2px!important}.v-locale--is-ltr .rounded-bs{border-bottom-left-radius:4px!important}.v-locale--is-rtl .rounded-bs{border-bottom-right-radius:4px!important}.v-locale--is-ltr .rounded-bs-lg{border-bottom-left-radius:8px!important}.v-locale--is-rtl .rounded-bs-lg{border-bottom-right-radius:8px!important}.v-locale--is-ltr .rounded-bs-xl{border-bottom-left-radius:24px!important}.v-locale--is-rtl .rounded-bs-xl{border-bottom-right-radius:24px!important}.v-locale--is-ltr .rounded-bs-pill{border-bottom-left-radius:9999px!important}.v-locale--is-rtl .rounded-bs-pill{border-bottom-right-radius:9999px!important}.v-locale--is-ltr .rounded-bs-circle{border-bottom-left-radius:50%!important}.v-locale--is-rtl .rounded-bs-circle{border-bottom-right-radius:50%!important}.v-locale--is-ltr .rounded-bs-shaped{border-bottom-left-radius:24px 0!important}.v-locale--is-rtl .rounded-bs-shaped{border-bottom-right-radius:24px 0!important}.border-0{border-width:0!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border,.border-thin{border-width:thin!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-sm{border-width:1px!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-md{border-width:2px!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-lg{border-width:4px!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-xl{border-width:8px!important;border-style:solid!important;border-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-opacity-0{--v-border-opacity: 0 !important}.border-opacity{--v-border-opacity: .12 !important}.border-opacity-25{--v-border-opacity: .25 !important}.border-opacity-50{--v-border-opacity: .5 !important}.border-opacity-75{--v-border-opacity: .75 !important}.border-opacity-100{--v-border-opacity: 1 !important}.border-t-0{border-block-start-width:0!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t,.border-t-thin{border-block-start-width:thin!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t-sm{border-block-start-width:1px!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t-md{border-block-start-width:2px!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t-lg{border-block-start-width:4px!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-t-xl{border-block-start-width:8px!important;border-block-start-style:solid!important;border-block-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-0{border-inline-end-width:0!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e,.border-e-thin{border-inline-end-width:thin!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-sm{border-inline-end-width:1px!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-md{border-inline-end-width:2px!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-lg{border-inline-end-width:4px!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-e-xl{border-inline-end-width:8px!important;border-inline-end-style:solid!important;border-inline-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-0{border-block-end-width:0!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b,.border-b-thin{border-block-end-width:thin!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-sm{border-block-end-width:1px!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-md{border-block-end-width:2px!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-lg{border-block-end-width:4px!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-b-xl{border-block-end-width:8px!important;border-block-end-style:solid!important;border-block-end-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-0{border-inline-start-width:0!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s,.border-s-thin{border-inline-start-width:thin!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-sm{border-inline-start-width:1px!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-md{border-inline-start-width:2px!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-lg{border-inline-start-width:4px!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-s-xl{border-inline-start-width:8px!important;border-inline-start-style:solid!important;border-inline-start-color:rgba(var(--v-border-color),var(--v-border-opacity))!important}.border-solid{border-style:solid!important}.border-dashed{border-style:dashed!important}.border-dotted{border-style:dotted!important}.border-double{border-style:double!important}.border-none{border-style:none!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}.text-justify{text-align:justify!important}.text-start{text-align:start!important}.text-end{text-align:end!important}.text-decoration-line-through{text-decoration:line-through!important}.text-decoration-none{text-decoration:none!important}.text-decoration-overline{text-decoration:overline!important}.text-decoration-underline{text-decoration:underline!important}.text-wrap{white-space:normal!important}.text-no-wrap{white-space:nowrap!important}.text-pre{white-space:pre!important}.text-pre-line{white-space:pre-line!important}.text-pre-wrap{white-space:pre-wrap!important}.text-break{overflow-wrap:break-word!important;word-break:break-word!important}.opacity-hover{opacity:var(--v-hover-opacity)!important}.opacity-focus{opacity:var(--v-focus-opacity)!important}.opacity-selected{opacity:var(--v-selected-opacity)!important}.opacity-activated{opacity:var(--v-activated-opacity)!important}.opacity-pressed{opacity:var(--v-pressed-opacity)!important}.opacity-dragged{opacity:var(--v-dragged-opacity)!important}.opacity-0{opacity:0!important}.opacity-10{opacity:.1!important}.opacity-20{opacity:.2!important}.opacity-30{opacity:.3!important}.opacity-40{opacity:.4!important}.opacity-50{opacity:.5!important}.opacity-60{opacity:.6!important}.opacity-70{opacity:.7!important}.opacity-80{opacity:.8!important}.opacity-90{opacity:.9!important}.opacity-100{opacity:1!important}.text-high-emphasis{color:rgba(var(--v-theme-on-background),var(--v-high-emphasis-opacity))!important}.text-medium-emphasis{color:rgba(var(--v-theme-on-background),var(--v-medium-emphasis-opacity))!important}.text-disabled{color:rgba(var(--v-theme-on-background),var(--v-disabled-opacity))!important}.text-truncate{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.text-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-none{text-transform:none!important}.text-capitalize{text-transform:capitalize!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.font-weight-thin{font-weight:100!important}.font-weight-light{font-weight:300!important}.font-weight-regular{font-weight:400!important}.font-weight-medium{font-weight:500!important}.font-weight-bold{font-weight:700!important}.font-weight-black{font-weight:900!important}.font-italic{font-style:italic!important}.text-mono{font-family:monospace!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-fixed{position:fixed!important}.position-absolute{position:absolute!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.right-0{right:0!important}.bottom-0{bottom:0!important}.left-0{left:0!important}.cursor-auto{cursor:auto!important}.cursor-default{cursor:default!important}.cursor-pointer{cursor:pointer!important}.cursor-wait{cursor:wait!important}.cursor-text{cursor:text!important}.cursor-move{cursor:move!important}.cursor-help{cursor:help!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-progress{cursor:progress!important}.cursor-grab{cursor:grab!important}.cursor-grabbing{cursor:grabbing!important}.cursor-none{cursor:none!important}.fill-height{height:100%!important}.h-auto{height:auto!important}.h-screen{height:100vh!important}.h-0{height:0!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-screen{height:100dvh!important}.w-auto{width:auto!important}.w-0{width:0!important}.w-25{width:25%!important}.w-33{width:33%!important}.w-50{width:50%!important}.w-66{width:66%!important}.w-75{width:75%!important}.w-100{width:100%!important}@media (min-width: 600px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!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}.float-sm-none{float:none!important}.float-sm-left{float:left!important}.float-sm-right{float:right!important}.v-locale--is-rtl .float-sm-end{float:left!important}.v-locale--is-rtl .float-sm-start,.v-locale--is-ltr .float-sm-end{float:right!important}.v-locale--is-ltr .float-sm-start{float:left!important}.flex-sm-fill,.flex-sm-1-1{flex:1 1 auto!important}.flex-sm-1-0{flex:1 0 auto!important}.flex-sm-0-1{flex:0 1 auto!important}.flex-sm-0-0{flex:0 0 auto!important}.flex-sm-1-1-100{flex:1 1 100%!important}.flex-sm-1-0-100{flex:1 0 100%!important}.flex-sm-0-1-100{flex:0 1 100%!important}.flex-sm-0-0-100{flex:0 0 100%!important}.flex-sm-1-1-0{flex:1 1 0!important}.flex-sm-1-0-0{flex:1 0 0!important}.flex-sm-0-1-0{flex:0 1 0!important}.flex-sm-0-0-0{flex:0 0 0!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-sm-start{justify-content:flex-start!important}.justify-sm-end{justify-content:flex-end!important}.justify-sm-center{justify-content:center!important}.justify-sm-space-between{justify-content:space-between!important}.justify-sm-space-around{justify-content:space-around!important}.justify-sm-space-evenly{justify-content:space-evenly!important}.align-sm-start{align-items:flex-start!important}.align-sm-end{align-items:flex-end!important}.align-sm-center{align-items:center!important}.align-sm-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-sm-space-around{align-content:space-around!important}.align-content-sm-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-sm-7{order:7!important}.order-sm-8{order:8!important}.order-sm-9{order:9!important}.order-sm-10{order:10!important}.order-sm-11{order:11!important}.order-sm-12{order:12!important}.order-sm-last{order:13!important}.ga-sm-0{gap:0px!important}.ga-sm-1{gap:4px!important}.ga-sm-2{gap:8px!important}.ga-sm-3{gap:12px!important}.ga-sm-4{gap:16px!important}.ga-sm-5{gap:20px!important}.ga-sm-6{gap:24px!important}.ga-sm-7{gap:28px!important}.ga-sm-8{gap:32px!important}.ga-sm-9{gap:36px!important}.ga-sm-10{gap:40px!important}.ga-sm-11{gap:44px!important}.ga-sm-12{gap:48px!important}.ga-sm-13{gap:52px!important}.ga-sm-14{gap:56px!important}.ga-sm-15{gap:60px!important}.ga-sm-16{gap:64px!important}.ga-sm-auto{gap:auto!important}.gr-sm-0{row-gap:0px!important}.gr-sm-1{row-gap:4px!important}.gr-sm-2{row-gap:8px!important}.gr-sm-3{row-gap:12px!important}.gr-sm-4{row-gap:16px!important}.gr-sm-5{row-gap:20px!important}.gr-sm-6{row-gap:24px!important}.gr-sm-7{row-gap:28px!important}.gr-sm-8{row-gap:32px!important}.gr-sm-9{row-gap:36px!important}.gr-sm-10{row-gap:40px!important}.gr-sm-11{row-gap:44px!important}.gr-sm-12{row-gap:48px!important}.gr-sm-13{row-gap:52px!important}.gr-sm-14{row-gap:56px!important}.gr-sm-15{row-gap:60px!important}.gr-sm-16{row-gap:64px!important}.gr-sm-auto{row-gap:auto!important}.gc-sm-0{column-gap:0px!important}.gc-sm-1{column-gap:4px!important}.gc-sm-2{column-gap:8px!important}.gc-sm-3{column-gap:12px!important}.gc-sm-4{column-gap:16px!important}.gc-sm-5{column-gap:20px!important}.gc-sm-6{column-gap:24px!important}.gc-sm-7{column-gap:28px!important}.gc-sm-8{column-gap:32px!important}.gc-sm-9{column-gap:36px!important}.gc-sm-10{column-gap:40px!important}.gc-sm-11{column-gap:44px!important}.gc-sm-12{column-gap:48px!important}.gc-sm-13{column-gap:52px!important}.gc-sm-14{column-gap:56px!important}.gc-sm-15{column-gap:60px!important}.gc-sm-16{column-gap:64px!important}.gc-sm-auto{column-gap:auto!important}.ma-sm-0{margin:0!important}.ma-sm-1{margin:4px!important}.ma-sm-2{margin:8px!important}.ma-sm-3{margin:12px!important}.ma-sm-4{margin:16px!important}.ma-sm-5{margin:20px!important}.ma-sm-6{margin:24px!important}.ma-sm-7{margin:28px!important}.ma-sm-8{margin:32px!important}.ma-sm-9{margin:36px!important}.ma-sm-10{margin:40px!important}.ma-sm-11{margin:44px!important}.ma-sm-12{margin:48px!important}.ma-sm-13{margin:52px!important}.ma-sm-14{margin:56px!important}.ma-sm-15{margin:60px!important}.ma-sm-16{margin:64px!important}.ma-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:4px!important;margin-left:4px!important}.mx-sm-2{margin-right:8px!important;margin-left:8px!important}.mx-sm-3{margin-right:12px!important;margin-left:12px!important}.mx-sm-4{margin-right:16px!important;margin-left:16px!important}.mx-sm-5{margin-right:20px!important;margin-left:20px!important}.mx-sm-6{margin-right:24px!important;margin-left:24px!important}.mx-sm-7{margin-right:28px!important;margin-left:28px!important}.mx-sm-8{margin-right:32px!important;margin-left:32px!important}.mx-sm-9{margin-right:36px!important;margin-left:36px!important}.mx-sm-10{margin-right:40px!important;margin-left:40px!important}.mx-sm-11{margin-right:44px!important;margin-left:44px!important}.mx-sm-12{margin-right:48px!important;margin-left:48px!important}.mx-sm-13{margin-right:52px!important;margin-left:52px!important}.mx-sm-14{margin-right:56px!important;margin-left:56px!important}.mx-sm-15{margin-right:60px!important;margin-left:60px!important}.mx-sm-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-sm-2{margin-top:8px!important;margin-bottom:8px!important}.my-sm-3{margin-top:12px!important;margin-bottom:12px!important}.my-sm-4{margin-top:16px!important;margin-bottom:16px!important}.my-sm-5{margin-top:20px!important;margin-bottom:20px!important}.my-sm-6{margin-top:24px!important;margin-bottom:24px!important}.my-sm-7{margin-top:28px!important;margin-bottom:28px!important}.my-sm-8{margin-top:32px!important;margin-bottom:32px!important}.my-sm-9{margin-top:36px!important;margin-bottom:36px!important}.my-sm-10{margin-top:40px!important;margin-bottom:40px!important}.my-sm-11{margin-top:44px!important;margin-bottom:44px!important}.my-sm-12{margin-top:48px!important;margin-bottom:48px!important}.my-sm-13{margin-top:52px!important;margin-bottom:52px!important}.my-sm-14{margin-top:56px!important;margin-bottom:56px!important}.my-sm-15{margin-top:60px!important;margin-bottom:60px!important}.my-sm-16{margin-top:64px!important;margin-bottom:64px!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:4px!important}.mt-sm-2{margin-top:8px!important}.mt-sm-3{margin-top:12px!important}.mt-sm-4{margin-top:16px!important}.mt-sm-5{margin-top:20px!important}.mt-sm-6{margin-top:24px!important}.mt-sm-7{margin-top:28px!important}.mt-sm-8{margin-top:32px!important}.mt-sm-9{margin-top:36px!important}.mt-sm-10{margin-top:40px!important}.mt-sm-11{margin-top:44px!important}.mt-sm-12{margin-top:48px!important}.mt-sm-13{margin-top:52px!important}.mt-sm-14{margin-top:56px!important}.mt-sm-15{margin-top:60px!important}.mt-sm-16{margin-top:64px!important}.mt-sm-auto{margin-top:auto!important}.mr-sm-0{margin-right:0!important}.mr-sm-1{margin-right:4px!important}.mr-sm-2{margin-right:8px!important}.mr-sm-3{margin-right:12px!important}.mr-sm-4{margin-right:16px!important}.mr-sm-5{margin-right:20px!important}.mr-sm-6{margin-right:24px!important}.mr-sm-7{margin-right:28px!important}.mr-sm-8{margin-right:32px!important}.mr-sm-9{margin-right:36px!important}.mr-sm-10{margin-right:40px!important}.mr-sm-11{margin-right:44px!important}.mr-sm-12{margin-right:48px!important}.mr-sm-13{margin-right:52px!important}.mr-sm-14{margin-right:56px!important}.mr-sm-15{margin-right:60px!important}.mr-sm-16{margin-right:64px!important}.mr-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:4px!important}.mb-sm-2{margin-bottom:8px!important}.mb-sm-3{margin-bottom:12px!important}.mb-sm-4{margin-bottom:16px!important}.mb-sm-5{margin-bottom:20px!important}.mb-sm-6{margin-bottom:24px!important}.mb-sm-7{margin-bottom:28px!important}.mb-sm-8{margin-bottom:32px!important}.mb-sm-9{margin-bottom:36px!important}.mb-sm-10{margin-bottom:40px!important}.mb-sm-11{margin-bottom:44px!important}.mb-sm-12{margin-bottom:48px!important}.mb-sm-13{margin-bottom:52px!important}.mb-sm-14{margin-bottom:56px!important}.mb-sm-15{margin-bottom:60px!important}.mb-sm-16{margin-bottom:64px!important}.mb-sm-auto{margin-bottom:auto!important}.ml-sm-0{margin-left:0!important}.ml-sm-1{margin-left:4px!important}.ml-sm-2{margin-left:8px!important}.ml-sm-3{margin-left:12px!important}.ml-sm-4{margin-left:16px!important}.ml-sm-5{margin-left:20px!important}.ml-sm-6{margin-left:24px!important}.ml-sm-7{margin-left:28px!important}.ml-sm-8{margin-left:32px!important}.ml-sm-9{margin-left:36px!important}.ml-sm-10{margin-left:40px!important}.ml-sm-11{margin-left:44px!important}.ml-sm-12{margin-left:48px!important}.ml-sm-13{margin-left:52px!important}.ml-sm-14{margin-left:56px!important}.ml-sm-15{margin-left:60px!important}.ml-sm-16{margin-left:64px!important}.ml-sm-auto{margin-left:auto!important}.ms-sm-0{margin-inline-start:0px!important}.ms-sm-1{margin-inline-start:4px!important}.ms-sm-2{margin-inline-start:8px!important}.ms-sm-3{margin-inline-start:12px!important}.ms-sm-4{margin-inline-start:16px!important}.ms-sm-5{margin-inline-start:20px!important}.ms-sm-6{margin-inline-start:24px!important}.ms-sm-7{margin-inline-start:28px!important}.ms-sm-8{margin-inline-start:32px!important}.ms-sm-9{margin-inline-start:36px!important}.ms-sm-10{margin-inline-start:40px!important}.ms-sm-11{margin-inline-start:44px!important}.ms-sm-12{margin-inline-start:48px!important}.ms-sm-13{margin-inline-start:52px!important}.ms-sm-14{margin-inline-start:56px!important}.ms-sm-15{margin-inline-start:60px!important}.ms-sm-16{margin-inline-start:64px!important}.ms-sm-auto{margin-inline-start:auto!important}.me-sm-0{margin-inline-end:0px!important}.me-sm-1{margin-inline-end:4px!important}.me-sm-2{margin-inline-end:8px!important}.me-sm-3{margin-inline-end:12px!important}.me-sm-4{margin-inline-end:16px!important}.me-sm-5{margin-inline-end:20px!important}.me-sm-6{margin-inline-end:24px!important}.me-sm-7{margin-inline-end:28px!important}.me-sm-8{margin-inline-end:32px!important}.me-sm-9{margin-inline-end:36px!important}.me-sm-10{margin-inline-end:40px!important}.me-sm-11{margin-inline-end:44px!important}.me-sm-12{margin-inline-end:48px!important}.me-sm-13{margin-inline-end:52px!important}.me-sm-14{margin-inline-end:56px!important}.me-sm-15{margin-inline-end:60px!important}.me-sm-16{margin-inline-end:64px!important}.me-sm-auto{margin-inline-end:auto!important}.ma-sm-n1{margin:-4px!important}.ma-sm-n2{margin:-8px!important}.ma-sm-n3{margin:-12px!important}.ma-sm-n4{margin:-16px!important}.ma-sm-n5{margin:-20px!important}.ma-sm-n6{margin:-24px!important}.ma-sm-n7{margin:-28px!important}.ma-sm-n8{margin:-32px!important}.ma-sm-n9{margin:-36px!important}.ma-sm-n10{margin:-40px!important}.ma-sm-n11{margin:-44px!important}.ma-sm-n12{margin:-48px!important}.ma-sm-n13{margin:-52px!important}.ma-sm-n14{margin:-56px!important}.ma-sm-n15{margin:-60px!important}.ma-sm-n16{margin:-64px!important}.mx-sm-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-sm-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-sm-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-sm-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-sm-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-sm-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-sm-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-sm-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-sm-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-sm-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-sm-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-sm-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-sm-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-sm-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-sm-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-sm-n16{margin-right:-64px!important;margin-left:-64px!important}.my-sm-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-sm-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-sm-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-sm-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-sm-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-sm-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-sm-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-sm-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-sm-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-sm-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-sm-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-sm-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-sm-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-sm-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-sm-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-sm-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-sm-n1{margin-top:-4px!important}.mt-sm-n2{margin-top:-8px!important}.mt-sm-n3{margin-top:-12px!important}.mt-sm-n4{margin-top:-16px!important}.mt-sm-n5{margin-top:-20px!important}.mt-sm-n6{margin-top:-24px!important}.mt-sm-n7{margin-top:-28px!important}.mt-sm-n8{margin-top:-32px!important}.mt-sm-n9{margin-top:-36px!important}.mt-sm-n10{margin-top:-40px!important}.mt-sm-n11{margin-top:-44px!important}.mt-sm-n12{margin-top:-48px!important}.mt-sm-n13{margin-top:-52px!important}.mt-sm-n14{margin-top:-56px!important}.mt-sm-n15{margin-top:-60px!important}.mt-sm-n16{margin-top:-64px!important}.mr-sm-n1{margin-right:-4px!important}.mr-sm-n2{margin-right:-8px!important}.mr-sm-n3{margin-right:-12px!important}.mr-sm-n4{margin-right:-16px!important}.mr-sm-n5{margin-right:-20px!important}.mr-sm-n6{margin-right:-24px!important}.mr-sm-n7{margin-right:-28px!important}.mr-sm-n8{margin-right:-32px!important}.mr-sm-n9{margin-right:-36px!important}.mr-sm-n10{margin-right:-40px!important}.mr-sm-n11{margin-right:-44px!important}.mr-sm-n12{margin-right:-48px!important}.mr-sm-n13{margin-right:-52px!important}.mr-sm-n14{margin-right:-56px!important}.mr-sm-n15{margin-right:-60px!important}.mr-sm-n16{margin-right:-64px!important}.mb-sm-n1{margin-bottom:-4px!important}.mb-sm-n2{margin-bottom:-8px!important}.mb-sm-n3{margin-bottom:-12px!important}.mb-sm-n4{margin-bottom:-16px!important}.mb-sm-n5{margin-bottom:-20px!important}.mb-sm-n6{margin-bottom:-24px!important}.mb-sm-n7{margin-bottom:-28px!important}.mb-sm-n8{margin-bottom:-32px!important}.mb-sm-n9{margin-bottom:-36px!important}.mb-sm-n10{margin-bottom:-40px!important}.mb-sm-n11{margin-bottom:-44px!important}.mb-sm-n12{margin-bottom:-48px!important}.mb-sm-n13{margin-bottom:-52px!important}.mb-sm-n14{margin-bottom:-56px!important}.mb-sm-n15{margin-bottom:-60px!important}.mb-sm-n16{margin-bottom:-64px!important}.ml-sm-n1{margin-left:-4px!important}.ml-sm-n2{margin-left:-8px!important}.ml-sm-n3{margin-left:-12px!important}.ml-sm-n4{margin-left:-16px!important}.ml-sm-n5{margin-left:-20px!important}.ml-sm-n6{margin-left:-24px!important}.ml-sm-n7{margin-left:-28px!important}.ml-sm-n8{margin-left:-32px!important}.ml-sm-n9{margin-left:-36px!important}.ml-sm-n10{margin-left:-40px!important}.ml-sm-n11{margin-left:-44px!important}.ml-sm-n12{margin-left:-48px!important}.ml-sm-n13{margin-left:-52px!important}.ml-sm-n14{margin-left:-56px!important}.ml-sm-n15{margin-left:-60px!important}.ml-sm-n16{margin-left:-64px!important}.ms-sm-n1{margin-inline-start:-4px!important}.ms-sm-n2{margin-inline-start:-8px!important}.ms-sm-n3{margin-inline-start:-12px!important}.ms-sm-n4{margin-inline-start:-16px!important}.ms-sm-n5{margin-inline-start:-20px!important}.ms-sm-n6{margin-inline-start:-24px!important}.ms-sm-n7{margin-inline-start:-28px!important}.ms-sm-n8{margin-inline-start:-32px!important}.ms-sm-n9{margin-inline-start:-36px!important}.ms-sm-n10{margin-inline-start:-40px!important}.ms-sm-n11{margin-inline-start:-44px!important}.ms-sm-n12{margin-inline-start:-48px!important}.ms-sm-n13{margin-inline-start:-52px!important}.ms-sm-n14{margin-inline-start:-56px!important}.ms-sm-n15{margin-inline-start:-60px!important}.ms-sm-n16{margin-inline-start:-64px!important}.me-sm-n1{margin-inline-end:-4px!important}.me-sm-n2{margin-inline-end:-8px!important}.me-sm-n3{margin-inline-end:-12px!important}.me-sm-n4{margin-inline-end:-16px!important}.me-sm-n5{margin-inline-end:-20px!important}.me-sm-n6{margin-inline-end:-24px!important}.me-sm-n7{margin-inline-end:-28px!important}.me-sm-n8{margin-inline-end:-32px!important}.me-sm-n9{margin-inline-end:-36px!important}.me-sm-n10{margin-inline-end:-40px!important}.me-sm-n11{margin-inline-end:-44px!important}.me-sm-n12{margin-inline-end:-48px!important}.me-sm-n13{margin-inline-end:-52px!important}.me-sm-n14{margin-inline-end:-56px!important}.me-sm-n15{margin-inline-end:-60px!important}.me-sm-n16{margin-inline-end:-64px!important}.pa-sm-0{padding:0!important}.pa-sm-1{padding:4px!important}.pa-sm-2{padding:8px!important}.pa-sm-3{padding:12px!important}.pa-sm-4{padding:16px!important}.pa-sm-5{padding:20px!important}.pa-sm-6{padding:24px!important}.pa-sm-7{padding:28px!important}.pa-sm-8{padding:32px!important}.pa-sm-9{padding:36px!important}.pa-sm-10{padding:40px!important}.pa-sm-11{padding:44px!important}.pa-sm-12{padding:48px!important}.pa-sm-13{padding:52px!important}.pa-sm-14{padding:56px!important}.pa-sm-15{padding:60px!important}.pa-sm-16{padding:64px!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:4px!important;padding-left:4px!important}.px-sm-2{padding-right:8px!important;padding-left:8px!important}.px-sm-3{padding-right:12px!important;padding-left:12px!important}.px-sm-4{padding-right:16px!important;padding-left:16px!important}.px-sm-5{padding-right:20px!important;padding-left:20px!important}.px-sm-6{padding-right:24px!important;padding-left:24px!important}.px-sm-7{padding-right:28px!important;padding-left:28px!important}.px-sm-8{padding-right:32px!important;padding-left:32px!important}.px-sm-9{padding-right:36px!important;padding-left:36px!important}.px-sm-10{padding-right:40px!important;padding-left:40px!important}.px-sm-11{padding-right:44px!important;padding-left:44px!important}.px-sm-12{padding-right:48px!important;padding-left:48px!important}.px-sm-13{padding-right:52px!important;padding-left:52px!important}.px-sm-14{padding-right:56px!important;padding-left:56px!important}.px-sm-15{padding-right:60px!important;padding-left:60px!important}.px-sm-16{padding-right:64px!important;padding-left:64px!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:4px!important;padding-bottom:4px!important}.py-sm-2{padding-top:8px!important;padding-bottom:8px!important}.py-sm-3{padding-top:12px!important;padding-bottom:12px!important}.py-sm-4{padding-top:16px!important;padding-bottom:16px!important}.py-sm-5{padding-top:20px!important;padding-bottom:20px!important}.py-sm-6{padding-top:24px!important;padding-bottom:24px!important}.py-sm-7{padding-top:28px!important;padding-bottom:28px!important}.py-sm-8{padding-top:32px!important;padding-bottom:32px!important}.py-sm-9{padding-top:36px!important;padding-bottom:36px!important}.py-sm-10{padding-top:40px!important;padding-bottom:40px!important}.py-sm-11{padding-top:44px!important;padding-bottom:44px!important}.py-sm-12{padding-top:48px!important;padding-bottom:48px!important}.py-sm-13{padding-top:52px!important;padding-bottom:52px!important}.py-sm-14{padding-top:56px!important;padding-bottom:56px!important}.py-sm-15{padding-top:60px!important;padding-bottom:60px!important}.py-sm-16{padding-top:64px!important;padding-bottom:64px!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:4px!important}.pt-sm-2{padding-top:8px!important}.pt-sm-3{padding-top:12px!important}.pt-sm-4{padding-top:16px!important}.pt-sm-5{padding-top:20px!important}.pt-sm-6{padding-top:24px!important}.pt-sm-7{padding-top:28px!important}.pt-sm-8{padding-top:32px!important}.pt-sm-9{padding-top:36px!important}.pt-sm-10{padding-top:40px!important}.pt-sm-11{padding-top:44px!important}.pt-sm-12{padding-top:48px!important}.pt-sm-13{padding-top:52px!important}.pt-sm-14{padding-top:56px!important}.pt-sm-15{padding-top:60px!important}.pt-sm-16{padding-top:64px!important}.pr-sm-0{padding-right:0!important}.pr-sm-1{padding-right:4px!important}.pr-sm-2{padding-right:8px!important}.pr-sm-3{padding-right:12px!important}.pr-sm-4{padding-right:16px!important}.pr-sm-5{padding-right:20px!important}.pr-sm-6{padding-right:24px!important}.pr-sm-7{padding-right:28px!important}.pr-sm-8{padding-right:32px!important}.pr-sm-9{padding-right:36px!important}.pr-sm-10{padding-right:40px!important}.pr-sm-11{padding-right:44px!important}.pr-sm-12{padding-right:48px!important}.pr-sm-13{padding-right:52px!important}.pr-sm-14{padding-right:56px!important}.pr-sm-15{padding-right:60px!important}.pr-sm-16{padding-right:64px!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:4px!important}.pb-sm-2{padding-bottom:8px!important}.pb-sm-3{padding-bottom:12px!important}.pb-sm-4{padding-bottom:16px!important}.pb-sm-5{padding-bottom:20px!important}.pb-sm-6{padding-bottom:24px!important}.pb-sm-7{padding-bottom:28px!important}.pb-sm-8{padding-bottom:32px!important}.pb-sm-9{padding-bottom:36px!important}.pb-sm-10{padding-bottom:40px!important}.pb-sm-11{padding-bottom:44px!important}.pb-sm-12{padding-bottom:48px!important}.pb-sm-13{padding-bottom:52px!important}.pb-sm-14{padding-bottom:56px!important}.pb-sm-15{padding-bottom:60px!important}.pb-sm-16{padding-bottom:64px!important}.pl-sm-0{padding-left:0!important}.pl-sm-1{padding-left:4px!important}.pl-sm-2{padding-left:8px!important}.pl-sm-3{padding-left:12px!important}.pl-sm-4{padding-left:16px!important}.pl-sm-5{padding-left:20px!important}.pl-sm-6{padding-left:24px!important}.pl-sm-7{padding-left:28px!important}.pl-sm-8{padding-left:32px!important}.pl-sm-9{padding-left:36px!important}.pl-sm-10{padding-left:40px!important}.pl-sm-11{padding-left:44px!important}.pl-sm-12{padding-left:48px!important}.pl-sm-13{padding-left:52px!important}.pl-sm-14{padding-left:56px!important}.pl-sm-15{padding-left:60px!important}.pl-sm-16{padding-left:64px!important}.ps-sm-0{padding-inline-start:0px!important}.ps-sm-1{padding-inline-start:4px!important}.ps-sm-2{padding-inline-start:8px!important}.ps-sm-3{padding-inline-start:12px!important}.ps-sm-4{padding-inline-start:16px!important}.ps-sm-5{padding-inline-start:20px!important}.ps-sm-6{padding-inline-start:24px!important}.ps-sm-7{padding-inline-start:28px!important}.ps-sm-8{padding-inline-start:32px!important}.ps-sm-9{padding-inline-start:36px!important}.ps-sm-10{padding-inline-start:40px!important}.ps-sm-11{padding-inline-start:44px!important}.ps-sm-12{padding-inline-start:48px!important}.ps-sm-13{padding-inline-start:52px!important}.ps-sm-14{padding-inline-start:56px!important}.ps-sm-15{padding-inline-start:60px!important}.ps-sm-16{padding-inline-start:64px!important}.pe-sm-0{padding-inline-end:0px!important}.pe-sm-1{padding-inline-end:4px!important}.pe-sm-2{padding-inline-end:8px!important}.pe-sm-3{padding-inline-end:12px!important}.pe-sm-4{padding-inline-end:16px!important}.pe-sm-5{padding-inline-end:20px!important}.pe-sm-6{padding-inline-end:24px!important}.pe-sm-7{padding-inline-end:28px!important}.pe-sm-8{padding-inline-end:32px!important}.pe-sm-9{padding-inline-end:36px!important}.pe-sm-10{padding-inline-end:40px!important}.pe-sm-11{padding-inline-end:44px!important}.pe-sm-12{padding-inline-end:48px!important}.pe-sm-13{padding-inline-end:52px!important}.pe-sm-14{padding-inline-end:56px!important}.pe-sm-15{padding-inline-end:60px!important}.pe-sm-16{padding-inline-end:64px!important}.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}.text-sm-justify{text-align:justify!important}.text-sm-start{text-align:start!important}.text-sm-end{text-align:end!important}.text-sm-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-sm-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-sm-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-sm-auto{height:auto!important}.h-sm-screen{height:100vh!important}.h-sm-0{height:0!important}.h-sm-25{height:25%!important}.h-sm-50{height:50%!important}.h-sm-75{height:75%!important}.h-sm-100{height:100%!important}.w-sm-auto{width:auto!important}.w-sm-0{width:0!important}.w-sm-25{width:25%!important}.w-sm-33{width:33%!important}.w-sm-50{width:50%!important}.w-sm-66{width:66%!important}.w-sm-75{width:75%!important}.w-sm-100{width:100%!important}}@media (min-width: 960px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!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}.float-md-none{float:none!important}.float-md-left{float:left!important}.float-md-right{float:right!important}.v-locale--is-rtl .float-md-end{float:left!important}.v-locale--is-rtl .float-md-start,.v-locale--is-ltr .float-md-end{float:right!important}.v-locale--is-ltr .float-md-start{float:left!important}.flex-md-fill,.flex-md-1-1{flex:1 1 auto!important}.flex-md-1-0{flex:1 0 auto!important}.flex-md-0-1{flex:0 1 auto!important}.flex-md-0-0{flex:0 0 auto!important}.flex-md-1-1-100{flex:1 1 100%!important}.flex-md-1-0-100{flex:1 0 100%!important}.flex-md-0-1-100{flex:0 1 100%!important}.flex-md-0-0-100{flex:0 0 100%!important}.flex-md-1-1-0{flex:1 1 0!important}.flex-md-1-0-0{flex:1 0 0!important}.flex-md-0-1-0{flex:0 1 0!important}.flex-md-0-0-0{flex:0 0 0!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-md-start{justify-content:flex-start!important}.justify-md-end{justify-content:flex-end!important}.justify-md-center{justify-content:center!important}.justify-md-space-between{justify-content:space-between!important}.justify-md-space-around{justify-content:space-around!important}.justify-md-space-evenly{justify-content:space-evenly!important}.align-md-start{align-items:flex-start!important}.align-md-end{align-items:flex-end!important}.align-md-center{align-items:center!important}.align-md-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-md-space-around{align-content:space-around!important}.align-content-md-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-md-7{order:7!important}.order-md-8{order:8!important}.order-md-9{order:9!important}.order-md-10{order:10!important}.order-md-11{order:11!important}.order-md-12{order:12!important}.order-md-last{order:13!important}.ga-md-0{gap:0px!important}.ga-md-1{gap:4px!important}.ga-md-2{gap:8px!important}.ga-md-3{gap:12px!important}.ga-md-4{gap:16px!important}.ga-md-5{gap:20px!important}.ga-md-6{gap:24px!important}.ga-md-7{gap:28px!important}.ga-md-8{gap:32px!important}.ga-md-9{gap:36px!important}.ga-md-10{gap:40px!important}.ga-md-11{gap:44px!important}.ga-md-12{gap:48px!important}.ga-md-13{gap:52px!important}.ga-md-14{gap:56px!important}.ga-md-15{gap:60px!important}.ga-md-16{gap:64px!important}.ga-md-auto{gap:auto!important}.gr-md-0{row-gap:0px!important}.gr-md-1{row-gap:4px!important}.gr-md-2{row-gap:8px!important}.gr-md-3{row-gap:12px!important}.gr-md-4{row-gap:16px!important}.gr-md-5{row-gap:20px!important}.gr-md-6{row-gap:24px!important}.gr-md-7{row-gap:28px!important}.gr-md-8{row-gap:32px!important}.gr-md-9{row-gap:36px!important}.gr-md-10{row-gap:40px!important}.gr-md-11{row-gap:44px!important}.gr-md-12{row-gap:48px!important}.gr-md-13{row-gap:52px!important}.gr-md-14{row-gap:56px!important}.gr-md-15{row-gap:60px!important}.gr-md-16{row-gap:64px!important}.gr-md-auto{row-gap:auto!important}.gc-md-0{column-gap:0px!important}.gc-md-1{column-gap:4px!important}.gc-md-2{column-gap:8px!important}.gc-md-3{column-gap:12px!important}.gc-md-4{column-gap:16px!important}.gc-md-5{column-gap:20px!important}.gc-md-6{column-gap:24px!important}.gc-md-7{column-gap:28px!important}.gc-md-8{column-gap:32px!important}.gc-md-9{column-gap:36px!important}.gc-md-10{column-gap:40px!important}.gc-md-11{column-gap:44px!important}.gc-md-12{column-gap:48px!important}.gc-md-13{column-gap:52px!important}.gc-md-14{column-gap:56px!important}.gc-md-15{column-gap:60px!important}.gc-md-16{column-gap:64px!important}.gc-md-auto{column-gap:auto!important}.ma-md-0{margin:0!important}.ma-md-1{margin:4px!important}.ma-md-2{margin:8px!important}.ma-md-3{margin:12px!important}.ma-md-4{margin:16px!important}.ma-md-5{margin:20px!important}.ma-md-6{margin:24px!important}.ma-md-7{margin:28px!important}.ma-md-8{margin:32px!important}.ma-md-9{margin:36px!important}.ma-md-10{margin:40px!important}.ma-md-11{margin:44px!important}.ma-md-12{margin:48px!important}.ma-md-13{margin:52px!important}.ma-md-14{margin:56px!important}.ma-md-15{margin:60px!important}.ma-md-16{margin:64px!important}.ma-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:4px!important;margin-left:4px!important}.mx-md-2{margin-right:8px!important;margin-left:8px!important}.mx-md-3{margin-right:12px!important;margin-left:12px!important}.mx-md-4{margin-right:16px!important;margin-left:16px!important}.mx-md-5{margin-right:20px!important;margin-left:20px!important}.mx-md-6{margin-right:24px!important;margin-left:24px!important}.mx-md-7{margin-right:28px!important;margin-left:28px!important}.mx-md-8{margin-right:32px!important;margin-left:32px!important}.mx-md-9{margin-right:36px!important;margin-left:36px!important}.mx-md-10{margin-right:40px!important;margin-left:40px!important}.mx-md-11{margin-right:44px!important;margin-left:44px!important}.mx-md-12{margin-right:48px!important;margin-left:48px!important}.mx-md-13{margin-right:52px!important;margin-left:52px!important}.mx-md-14{margin-right:56px!important;margin-left:56px!important}.mx-md-15{margin-right:60px!important;margin-left:60px!important}.mx-md-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-md-2{margin-top:8px!important;margin-bottom:8px!important}.my-md-3{margin-top:12px!important;margin-bottom:12px!important}.my-md-4{margin-top:16px!important;margin-bottom:16px!important}.my-md-5{margin-top:20px!important;margin-bottom:20px!important}.my-md-6{margin-top:24px!important;margin-bottom:24px!important}.my-md-7{margin-top:28px!important;margin-bottom:28px!important}.my-md-8{margin-top:32px!important;margin-bottom:32px!important}.my-md-9{margin-top:36px!important;margin-bottom:36px!important}.my-md-10{margin-top:40px!important;margin-bottom:40px!important}.my-md-11{margin-top:44px!important;margin-bottom:44px!important}.my-md-12{margin-top:48px!important;margin-bottom:48px!important}.my-md-13{margin-top:52px!important;margin-bottom:52px!important}.my-md-14{margin-top:56px!important;margin-bottom:56px!important}.my-md-15{margin-top:60px!important;margin-bottom:60px!important}.my-md-16{margin-top:64px!important;margin-bottom:64px!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:4px!important}.mt-md-2{margin-top:8px!important}.mt-md-3{margin-top:12px!important}.mt-md-4{margin-top:16px!important}.mt-md-5{margin-top:20px!important}.mt-md-6{margin-top:24px!important}.mt-md-7{margin-top:28px!important}.mt-md-8{margin-top:32px!important}.mt-md-9{margin-top:36px!important}.mt-md-10{margin-top:40px!important}.mt-md-11{margin-top:44px!important}.mt-md-12{margin-top:48px!important}.mt-md-13{margin-top:52px!important}.mt-md-14{margin-top:56px!important}.mt-md-15{margin-top:60px!important}.mt-md-16{margin-top:64px!important}.mt-md-auto{margin-top:auto!important}.mr-md-0{margin-right:0!important}.mr-md-1{margin-right:4px!important}.mr-md-2{margin-right:8px!important}.mr-md-3{margin-right:12px!important}.mr-md-4{margin-right:16px!important}.mr-md-5{margin-right:20px!important}.mr-md-6{margin-right:24px!important}.mr-md-7{margin-right:28px!important}.mr-md-8{margin-right:32px!important}.mr-md-9{margin-right:36px!important}.mr-md-10{margin-right:40px!important}.mr-md-11{margin-right:44px!important}.mr-md-12{margin-right:48px!important}.mr-md-13{margin-right:52px!important}.mr-md-14{margin-right:56px!important}.mr-md-15{margin-right:60px!important}.mr-md-16{margin-right:64px!important}.mr-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:4px!important}.mb-md-2{margin-bottom:8px!important}.mb-md-3{margin-bottom:12px!important}.mb-md-4{margin-bottom:16px!important}.mb-md-5{margin-bottom:20px!important}.mb-md-6{margin-bottom:24px!important}.mb-md-7{margin-bottom:28px!important}.mb-md-8{margin-bottom:32px!important}.mb-md-9{margin-bottom:36px!important}.mb-md-10{margin-bottom:40px!important}.mb-md-11{margin-bottom:44px!important}.mb-md-12{margin-bottom:48px!important}.mb-md-13{margin-bottom:52px!important}.mb-md-14{margin-bottom:56px!important}.mb-md-15{margin-bottom:60px!important}.mb-md-16{margin-bottom:64px!important}.mb-md-auto{margin-bottom:auto!important}.ml-md-0{margin-left:0!important}.ml-md-1{margin-left:4px!important}.ml-md-2{margin-left:8px!important}.ml-md-3{margin-left:12px!important}.ml-md-4{margin-left:16px!important}.ml-md-5{margin-left:20px!important}.ml-md-6{margin-left:24px!important}.ml-md-7{margin-left:28px!important}.ml-md-8{margin-left:32px!important}.ml-md-9{margin-left:36px!important}.ml-md-10{margin-left:40px!important}.ml-md-11{margin-left:44px!important}.ml-md-12{margin-left:48px!important}.ml-md-13{margin-left:52px!important}.ml-md-14{margin-left:56px!important}.ml-md-15{margin-left:60px!important}.ml-md-16{margin-left:64px!important}.ml-md-auto{margin-left:auto!important}.ms-md-0{margin-inline-start:0px!important}.ms-md-1{margin-inline-start:4px!important}.ms-md-2{margin-inline-start:8px!important}.ms-md-3{margin-inline-start:12px!important}.ms-md-4{margin-inline-start:16px!important}.ms-md-5{margin-inline-start:20px!important}.ms-md-6{margin-inline-start:24px!important}.ms-md-7{margin-inline-start:28px!important}.ms-md-8{margin-inline-start:32px!important}.ms-md-9{margin-inline-start:36px!important}.ms-md-10{margin-inline-start:40px!important}.ms-md-11{margin-inline-start:44px!important}.ms-md-12{margin-inline-start:48px!important}.ms-md-13{margin-inline-start:52px!important}.ms-md-14{margin-inline-start:56px!important}.ms-md-15{margin-inline-start:60px!important}.ms-md-16{margin-inline-start:64px!important}.ms-md-auto{margin-inline-start:auto!important}.me-md-0{margin-inline-end:0px!important}.me-md-1{margin-inline-end:4px!important}.me-md-2{margin-inline-end:8px!important}.me-md-3{margin-inline-end:12px!important}.me-md-4{margin-inline-end:16px!important}.me-md-5{margin-inline-end:20px!important}.me-md-6{margin-inline-end:24px!important}.me-md-7{margin-inline-end:28px!important}.me-md-8{margin-inline-end:32px!important}.me-md-9{margin-inline-end:36px!important}.me-md-10{margin-inline-end:40px!important}.me-md-11{margin-inline-end:44px!important}.me-md-12{margin-inline-end:48px!important}.me-md-13{margin-inline-end:52px!important}.me-md-14{margin-inline-end:56px!important}.me-md-15{margin-inline-end:60px!important}.me-md-16{margin-inline-end:64px!important}.me-md-auto{margin-inline-end:auto!important}.ma-md-n1{margin:-4px!important}.ma-md-n2{margin:-8px!important}.ma-md-n3{margin:-12px!important}.ma-md-n4{margin:-16px!important}.ma-md-n5{margin:-20px!important}.ma-md-n6{margin:-24px!important}.ma-md-n7{margin:-28px!important}.ma-md-n8{margin:-32px!important}.ma-md-n9{margin:-36px!important}.ma-md-n10{margin:-40px!important}.ma-md-n11{margin:-44px!important}.ma-md-n12{margin:-48px!important}.ma-md-n13{margin:-52px!important}.ma-md-n14{margin:-56px!important}.ma-md-n15{margin:-60px!important}.ma-md-n16{margin:-64px!important}.mx-md-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-md-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-md-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-md-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-md-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-md-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-md-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-md-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-md-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-md-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-md-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-md-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-md-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-md-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-md-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-md-n16{margin-right:-64px!important;margin-left:-64px!important}.my-md-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-md-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-md-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-md-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-md-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-md-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-md-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-md-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-md-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-md-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-md-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-md-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-md-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-md-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-md-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-md-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-md-n1{margin-top:-4px!important}.mt-md-n2{margin-top:-8px!important}.mt-md-n3{margin-top:-12px!important}.mt-md-n4{margin-top:-16px!important}.mt-md-n5{margin-top:-20px!important}.mt-md-n6{margin-top:-24px!important}.mt-md-n7{margin-top:-28px!important}.mt-md-n8{margin-top:-32px!important}.mt-md-n9{margin-top:-36px!important}.mt-md-n10{margin-top:-40px!important}.mt-md-n11{margin-top:-44px!important}.mt-md-n12{margin-top:-48px!important}.mt-md-n13{margin-top:-52px!important}.mt-md-n14{margin-top:-56px!important}.mt-md-n15{margin-top:-60px!important}.mt-md-n16{margin-top:-64px!important}.mr-md-n1{margin-right:-4px!important}.mr-md-n2{margin-right:-8px!important}.mr-md-n3{margin-right:-12px!important}.mr-md-n4{margin-right:-16px!important}.mr-md-n5{margin-right:-20px!important}.mr-md-n6{margin-right:-24px!important}.mr-md-n7{margin-right:-28px!important}.mr-md-n8{margin-right:-32px!important}.mr-md-n9{margin-right:-36px!important}.mr-md-n10{margin-right:-40px!important}.mr-md-n11{margin-right:-44px!important}.mr-md-n12{margin-right:-48px!important}.mr-md-n13{margin-right:-52px!important}.mr-md-n14{margin-right:-56px!important}.mr-md-n15{margin-right:-60px!important}.mr-md-n16{margin-right:-64px!important}.mb-md-n1{margin-bottom:-4px!important}.mb-md-n2{margin-bottom:-8px!important}.mb-md-n3{margin-bottom:-12px!important}.mb-md-n4{margin-bottom:-16px!important}.mb-md-n5{margin-bottom:-20px!important}.mb-md-n6{margin-bottom:-24px!important}.mb-md-n7{margin-bottom:-28px!important}.mb-md-n8{margin-bottom:-32px!important}.mb-md-n9{margin-bottom:-36px!important}.mb-md-n10{margin-bottom:-40px!important}.mb-md-n11{margin-bottom:-44px!important}.mb-md-n12{margin-bottom:-48px!important}.mb-md-n13{margin-bottom:-52px!important}.mb-md-n14{margin-bottom:-56px!important}.mb-md-n15{margin-bottom:-60px!important}.mb-md-n16{margin-bottom:-64px!important}.ml-md-n1{margin-left:-4px!important}.ml-md-n2{margin-left:-8px!important}.ml-md-n3{margin-left:-12px!important}.ml-md-n4{margin-left:-16px!important}.ml-md-n5{margin-left:-20px!important}.ml-md-n6{margin-left:-24px!important}.ml-md-n7{margin-left:-28px!important}.ml-md-n8{margin-left:-32px!important}.ml-md-n9{margin-left:-36px!important}.ml-md-n10{margin-left:-40px!important}.ml-md-n11{margin-left:-44px!important}.ml-md-n12{margin-left:-48px!important}.ml-md-n13{margin-left:-52px!important}.ml-md-n14{margin-left:-56px!important}.ml-md-n15{margin-left:-60px!important}.ml-md-n16{margin-left:-64px!important}.ms-md-n1{margin-inline-start:-4px!important}.ms-md-n2{margin-inline-start:-8px!important}.ms-md-n3{margin-inline-start:-12px!important}.ms-md-n4{margin-inline-start:-16px!important}.ms-md-n5{margin-inline-start:-20px!important}.ms-md-n6{margin-inline-start:-24px!important}.ms-md-n7{margin-inline-start:-28px!important}.ms-md-n8{margin-inline-start:-32px!important}.ms-md-n9{margin-inline-start:-36px!important}.ms-md-n10{margin-inline-start:-40px!important}.ms-md-n11{margin-inline-start:-44px!important}.ms-md-n12{margin-inline-start:-48px!important}.ms-md-n13{margin-inline-start:-52px!important}.ms-md-n14{margin-inline-start:-56px!important}.ms-md-n15{margin-inline-start:-60px!important}.ms-md-n16{margin-inline-start:-64px!important}.me-md-n1{margin-inline-end:-4px!important}.me-md-n2{margin-inline-end:-8px!important}.me-md-n3{margin-inline-end:-12px!important}.me-md-n4{margin-inline-end:-16px!important}.me-md-n5{margin-inline-end:-20px!important}.me-md-n6{margin-inline-end:-24px!important}.me-md-n7{margin-inline-end:-28px!important}.me-md-n8{margin-inline-end:-32px!important}.me-md-n9{margin-inline-end:-36px!important}.me-md-n10{margin-inline-end:-40px!important}.me-md-n11{margin-inline-end:-44px!important}.me-md-n12{margin-inline-end:-48px!important}.me-md-n13{margin-inline-end:-52px!important}.me-md-n14{margin-inline-end:-56px!important}.me-md-n15{margin-inline-end:-60px!important}.me-md-n16{margin-inline-end:-64px!important}.pa-md-0{padding:0!important}.pa-md-1{padding:4px!important}.pa-md-2{padding:8px!important}.pa-md-3{padding:12px!important}.pa-md-4{padding:16px!important}.pa-md-5{padding:20px!important}.pa-md-6{padding:24px!important}.pa-md-7{padding:28px!important}.pa-md-8{padding:32px!important}.pa-md-9{padding:36px!important}.pa-md-10{padding:40px!important}.pa-md-11{padding:44px!important}.pa-md-12{padding:48px!important}.pa-md-13{padding:52px!important}.pa-md-14{padding:56px!important}.pa-md-15{padding:60px!important}.pa-md-16{padding:64px!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:4px!important;padding-left:4px!important}.px-md-2{padding-right:8px!important;padding-left:8px!important}.px-md-3{padding-right:12px!important;padding-left:12px!important}.px-md-4{padding-right:16px!important;padding-left:16px!important}.px-md-5{padding-right:20px!important;padding-left:20px!important}.px-md-6{padding-right:24px!important;padding-left:24px!important}.px-md-7{padding-right:28px!important;padding-left:28px!important}.px-md-8{padding-right:32px!important;padding-left:32px!important}.px-md-9{padding-right:36px!important;padding-left:36px!important}.px-md-10{padding-right:40px!important;padding-left:40px!important}.px-md-11{padding-right:44px!important;padding-left:44px!important}.px-md-12{padding-right:48px!important;padding-left:48px!important}.px-md-13{padding-right:52px!important;padding-left:52px!important}.px-md-14{padding-right:56px!important;padding-left:56px!important}.px-md-15{padding-right:60px!important;padding-left:60px!important}.px-md-16{padding-right:64px!important;padding-left:64px!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:4px!important;padding-bottom:4px!important}.py-md-2{padding-top:8px!important;padding-bottom:8px!important}.py-md-3{padding-top:12px!important;padding-bottom:12px!important}.py-md-4{padding-top:16px!important;padding-bottom:16px!important}.py-md-5{padding-top:20px!important;padding-bottom:20px!important}.py-md-6{padding-top:24px!important;padding-bottom:24px!important}.py-md-7{padding-top:28px!important;padding-bottom:28px!important}.py-md-8{padding-top:32px!important;padding-bottom:32px!important}.py-md-9{padding-top:36px!important;padding-bottom:36px!important}.py-md-10{padding-top:40px!important;padding-bottom:40px!important}.py-md-11{padding-top:44px!important;padding-bottom:44px!important}.py-md-12{padding-top:48px!important;padding-bottom:48px!important}.py-md-13{padding-top:52px!important;padding-bottom:52px!important}.py-md-14{padding-top:56px!important;padding-bottom:56px!important}.py-md-15{padding-top:60px!important;padding-bottom:60px!important}.py-md-16{padding-top:64px!important;padding-bottom:64px!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:4px!important}.pt-md-2{padding-top:8px!important}.pt-md-3{padding-top:12px!important}.pt-md-4{padding-top:16px!important}.pt-md-5{padding-top:20px!important}.pt-md-6{padding-top:24px!important}.pt-md-7{padding-top:28px!important}.pt-md-8{padding-top:32px!important}.pt-md-9{padding-top:36px!important}.pt-md-10{padding-top:40px!important}.pt-md-11{padding-top:44px!important}.pt-md-12{padding-top:48px!important}.pt-md-13{padding-top:52px!important}.pt-md-14{padding-top:56px!important}.pt-md-15{padding-top:60px!important}.pt-md-16{padding-top:64px!important}.pr-md-0{padding-right:0!important}.pr-md-1{padding-right:4px!important}.pr-md-2{padding-right:8px!important}.pr-md-3{padding-right:12px!important}.pr-md-4{padding-right:16px!important}.pr-md-5{padding-right:20px!important}.pr-md-6{padding-right:24px!important}.pr-md-7{padding-right:28px!important}.pr-md-8{padding-right:32px!important}.pr-md-9{padding-right:36px!important}.pr-md-10{padding-right:40px!important}.pr-md-11{padding-right:44px!important}.pr-md-12{padding-right:48px!important}.pr-md-13{padding-right:52px!important}.pr-md-14{padding-right:56px!important}.pr-md-15{padding-right:60px!important}.pr-md-16{padding-right:64px!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:4px!important}.pb-md-2{padding-bottom:8px!important}.pb-md-3{padding-bottom:12px!important}.pb-md-4{padding-bottom:16px!important}.pb-md-5{padding-bottom:20px!important}.pb-md-6{padding-bottom:24px!important}.pb-md-7{padding-bottom:28px!important}.pb-md-8{padding-bottom:32px!important}.pb-md-9{padding-bottom:36px!important}.pb-md-10{padding-bottom:40px!important}.pb-md-11{padding-bottom:44px!important}.pb-md-12{padding-bottom:48px!important}.pb-md-13{padding-bottom:52px!important}.pb-md-14{padding-bottom:56px!important}.pb-md-15{padding-bottom:60px!important}.pb-md-16{padding-bottom:64px!important}.pl-md-0{padding-left:0!important}.pl-md-1{padding-left:4px!important}.pl-md-2{padding-left:8px!important}.pl-md-3{padding-left:12px!important}.pl-md-4{padding-left:16px!important}.pl-md-5{padding-left:20px!important}.pl-md-6{padding-left:24px!important}.pl-md-7{padding-left:28px!important}.pl-md-8{padding-left:32px!important}.pl-md-9{padding-left:36px!important}.pl-md-10{padding-left:40px!important}.pl-md-11{padding-left:44px!important}.pl-md-12{padding-left:48px!important}.pl-md-13{padding-left:52px!important}.pl-md-14{padding-left:56px!important}.pl-md-15{padding-left:60px!important}.pl-md-16{padding-left:64px!important}.ps-md-0{padding-inline-start:0px!important}.ps-md-1{padding-inline-start:4px!important}.ps-md-2{padding-inline-start:8px!important}.ps-md-3{padding-inline-start:12px!important}.ps-md-4{padding-inline-start:16px!important}.ps-md-5{padding-inline-start:20px!important}.ps-md-6{padding-inline-start:24px!important}.ps-md-7{padding-inline-start:28px!important}.ps-md-8{padding-inline-start:32px!important}.ps-md-9{padding-inline-start:36px!important}.ps-md-10{padding-inline-start:40px!important}.ps-md-11{padding-inline-start:44px!important}.ps-md-12{padding-inline-start:48px!important}.ps-md-13{padding-inline-start:52px!important}.ps-md-14{padding-inline-start:56px!important}.ps-md-15{padding-inline-start:60px!important}.ps-md-16{padding-inline-start:64px!important}.pe-md-0{padding-inline-end:0px!important}.pe-md-1{padding-inline-end:4px!important}.pe-md-2{padding-inline-end:8px!important}.pe-md-3{padding-inline-end:12px!important}.pe-md-4{padding-inline-end:16px!important}.pe-md-5{padding-inline-end:20px!important}.pe-md-6{padding-inline-end:24px!important}.pe-md-7{padding-inline-end:28px!important}.pe-md-8{padding-inline-end:32px!important}.pe-md-9{padding-inline-end:36px!important}.pe-md-10{padding-inline-end:40px!important}.pe-md-11{padding-inline-end:44px!important}.pe-md-12{padding-inline-end:48px!important}.pe-md-13{padding-inline-end:52px!important}.pe-md-14{padding-inline-end:56px!important}.pe-md-15{padding-inline-end:60px!important}.pe-md-16{padding-inline-end:64px!important}.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}.text-md-justify{text-align:justify!important}.text-md-start{text-align:start!important}.text-md-end{text-align:end!important}.text-md-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-md-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-md-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-md-auto{height:auto!important}.h-md-screen{height:100vh!important}.h-md-0{height:0!important}.h-md-25{height:25%!important}.h-md-50{height:50%!important}.h-md-75{height:75%!important}.h-md-100{height:100%!important}.w-md-auto{width:auto!important}.w-md-0{width:0!important}.w-md-25{width:25%!important}.w-md-33{width:33%!important}.w-md-50{width:50%!important}.w-md-66{width:66%!important}.w-md-75{width:75%!important}.w-md-100{width:100%!important}}@media (min-width: 1280px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!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}.float-lg-none{float:none!important}.float-lg-left{float:left!important}.float-lg-right{float:right!important}.v-locale--is-rtl .float-lg-end{float:left!important}.v-locale--is-rtl .float-lg-start,.v-locale--is-ltr .float-lg-end{float:right!important}.v-locale--is-ltr .float-lg-start{float:left!important}.flex-lg-fill,.flex-lg-1-1{flex:1 1 auto!important}.flex-lg-1-0{flex:1 0 auto!important}.flex-lg-0-1{flex:0 1 auto!important}.flex-lg-0-0{flex:0 0 auto!important}.flex-lg-1-1-100{flex:1 1 100%!important}.flex-lg-1-0-100{flex:1 0 100%!important}.flex-lg-0-1-100{flex:0 1 100%!important}.flex-lg-0-0-100{flex:0 0 100%!important}.flex-lg-1-1-0{flex:1 1 0!important}.flex-lg-1-0-0{flex:1 0 0!important}.flex-lg-0-1-0{flex:0 1 0!important}.flex-lg-0-0-0{flex:0 0 0!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-lg-start{justify-content:flex-start!important}.justify-lg-end{justify-content:flex-end!important}.justify-lg-center{justify-content:center!important}.justify-lg-space-between{justify-content:space-between!important}.justify-lg-space-around{justify-content:space-around!important}.justify-lg-space-evenly{justify-content:space-evenly!important}.align-lg-start{align-items:flex-start!important}.align-lg-end{align-items:flex-end!important}.align-lg-center{align-items:center!important}.align-lg-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-lg-space-around{align-content:space-around!important}.align-content-lg-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-lg-7{order:7!important}.order-lg-8{order:8!important}.order-lg-9{order:9!important}.order-lg-10{order:10!important}.order-lg-11{order:11!important}.order-lg-12{order:12!important}.order-lg-last{order:13!important}.ga-lg-0{gap:0px!important}.ga-lg-1{gap:4px!important}.ga-lg-2{gap:8px!important}.ga-lg-3{gap:12px!important}.ga-lg-4{gap:16px!important}.ga-lg-5{gap:20px!important}.ga-lg-6{gap:24px!important}.ga-lg-7{gap:28px!important}.ga-lg-8{gap:32px!important}.ga-lg-9{gap:36px!important}.ga-lg-10{gap:40px!important}.ga-lg-11{gap:44px!important}.ga-lg-12{gap:48px!important}.ga-lg-13{gap:52px!important}.ga-lg-14{gap:56px!important}.ga-lg-15{gap:60px!important}.ga-lg-16{gap:64px!important}.ga-lg-auto{gap:auto!important}.gr-lg-0{row-gap:0px!important}.gr-lg-1{row-gap:4px!important}.gr-lg-2{row-gap:8px!important}.gr-lg-3{row-gap:12px!important}.gr-lg-4{row-gap:16px!important}.gr-lg-5{row-gap:20px!important}.gr-lg-6{row-gap:24px!important}.gr-lg-7{row-gap:28px!important}.gr-lg-8{row-gap:32px!important}.gr-lg-9{row-gap:36px!important}.gr-lg-10{row-gap:40px!important}.gr-lg-11{row-gap:44px!important}.gr-lg-12{row-gap:48px!important}.gr-lg-13{row-gap:52px!important}.gr-lg-14{row-gap:56px!important}.gr-lg-15{row-gap:60px!important}.gr-lg-16{row-gap:64px!important}.gr-lg-auto{row-gap:auto!important}.gc-lg-0{column-gap:0px!important}.gc-lg-1{column-gap:4px!important}.gc-lg-2{column-gap:8px!important}.gc-lg-3{column-gap:12px!important}.gc-lg-4{column-gap:16px!important}.gc-lg-5{column-gap:20px!important}.gc-lg-6{column-gap:24px!important}.gc-lg-7{column-gap:28px!important}.gc-lg-8{column-gap:32px!important}.gc-lg-9{column-gap:36px!important}.gc-lg-10{column-gap:40px!important}.gc-lg-11{column-gap:44px!important}.gc-lg-12{column-gap:48px!important}.gc-lg-13{column-gap:52px!important}.gc-lg-14{column-gap:56px!important}.gc-lg-15{column-gap:60px!important}.gc-lg-16{column-gap:64px!important}.gc-lg-auto{column-gap:auto!important}.ma-lg-0{margin:0!important}.ma-lg-1{margin:4px!important}.ma-lg-2{margin:8px!important}.ma-lg-3{margin:12px!important}.ma-lg-4{margin:16px!important}.ma-lg-5{margin:20px!important}.ma-lg-6{margin:24px!important}.ma-lg-7{margin:28px!important}.ma-lg-8{margin:32px!important}.ma-lg-9{margin:36px!important}.ma-lg-10{margin:40px!important}.ma-lg-11{margin:44px!important}.ma-lg-12{margin:48px!important}.ma-lg-13{margin:52px!important}.ma-lg-14{margin:56px!important}.ma-lg-15{margin:60px!important}.ma-lg-16{margin:64px!important}.ma-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:4px!important;margin-left:4px!important}.mx-lg-2{margin-right:8px!important;margin-left:8px!important}.mx-lg-3{margin-right:12px!important;margin-left:12px!important}.mx-lg-4{margin-right:16px!important;margin-left:16px!important}.mx-lg-5{margin-right:20px!important;margin-left:20px!important}.mx-lg-6{margin-right:24px!important;margin-left:24px!important}.mx-lg-7{margin-right:28px!important;margin-left:28px!important}.mx-lg-8{margin-right:32px!important;margin-left:32px!important}.mx-lg-9{margin-right:36px!important;margin-left:36px!important}.mx-lg-10{margin-right:40px!important;margin-left:40px!important}.mx-lg-11{margin-right:44px!important;margin-left:44px!important}.mx-lg-12{margin-right:48px!important;margin-left:48px!important}.mx-lg-13{margin-right:52px!important;margin-left:52px!important}.mx-lg-14{margin-right:56px!important;margin-left:56px!important}.mx-lg-15{margin-right:60px!important;margin-left:60px!important}.mx-lg-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-lg-2{margin-top:8px!important;margin-bottom:8px!important}.my-lg-3{margin-top:12px!important;margin-bottom:12px!important}.my-lg-4{margin-top:16px!important;margin-bottom:16px!important}.my-lg-5{margin-top:20px!important;margin-bottom:20px!important}.my-lg-6{margin-top:24px!important;margin-bottom:24px!important}.my-lg-7{margin-top:28px!important;margin-bottom:28px!important}.my-lg-8{margin-top:32px!important;margin-bottom:32px!important}.my-lg-9{margin-top:36px!important;margin-bottom:36px!important}.my-lg-10{margin-top:40px!important;margin-bottom:40px!important}.my-lg-11{margin-top:44px!important;margin-bottom:44px!important}.my-lg-12{margin-top:48px!important;margin-bottom:48px!important}.my-lg-13{margin-top:52px!important;margin-bottom:52px!important}.my-lg-14{margin-top:56px!important;margin-bottom:56px!important}.my-lg-15{margin-top:60px!important;margin-bottom:60px!important}.my-lg-16{margin-top:64px!important;margin-bottom:64px!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:4px!important}.mt-lg-2{margin-top:8px!important}.mt-lg-3{margin-top:12px!important}.mt-lg-4{margin-top:16px!important}.mt-lg-5{margin-top:20px!important}.mt-lg-6{margin-top:24px!important}.mt-lg-7{margin-top:28px!important}.mt-lg-8{margin-top:32px!important}.mt-lg-9{margin-top:36px!important}.mt-lg-10{margin-top:40px!important}.mt-lg-11{margin-top:44px!important}.mt-lg-12{margin-top:48px!important}.mt-lg-13{margin-top:52px!important}.mt-lg-14{margin-top:56px!important}.mt-lg-15{margin-top:60px!important}.mt-lg-16{margin-top:64px!important}.mt-lg-auto{margin-top:auto!important}.mr-lg-0{margin-right:0!important}.mr-lg-1{margin-right:4px!important}.mr-lg-2{margin-right:8px!important}.mr-lg-3{margin-right:12px!important}.mr-lg-4{margin-right:16px!important}.mr-lg-5{margin-right:20px!important}.mr-lg-6{margin-right:24px!important}.mr-lg-7{margin-right:28px!important}.mr-lg-8{margin-right:32px!important}.mr-lg-9{margin-right:36px!important}.mr-lg-10{margin-right:40px!important}.mr-lg-11{margin-right:44px!important}.mr-lg-12{margin-right:48px!important}.mr-lg-13{margin-right:52px!important}.mr-lg-14{margin-right:56px!important}.mr-lg-15{margin-right:60px!important}.mr-lg-16{margin-right:64px!important}.mr-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:4px!important}.mb-lg-2{margin-bottom:8px!important}.mb-lg-3{margin-bottom:12px!important}.mb-lg-4{margin-bottom:16px!important}.mb-lg-5{margin-bottom:20px!important}.mb-lg-6{margin-bottom:24px!important}.mb-lg-7{margin-bottom:28px!important}.mb-lg-8{margin-bottom:32px!important}.mb-lg-9{margin-bottom:36px!important}.mb-lg-10{margin-bottom:40px!important}.mb-lg-11{margin-bottom:44px!important}.mb-lg-12{margin-bottom:48px!important}.mb-lg-13{margin-bottom:52px!important}.mb-lg-14{margin-bottom:56px!important}.mb-lg-15{margin-bottom:60px!important}.mb-lg-16{margin-bottom:64px!important}.mb-lg-auto{margin-bottom:auto!important}.ml-lg-0{margin-left:0!important}.ml-lg-1{margin-left:4px!important}.ml-lg-2{margin-left:8px!important}.ml-lg-3{margin-left:12px!important}.ml-lg-4{margin-left:16px!important}.ml-lg-5{margin-left:20px!important}.ml-lg-6{margin-left:24px!important}.ml-lg-7{margin-left:28px!important}.ml-lg-8{margin-left:32px!important}.ml-lg-9{margin-left:36px!important}.ml-lg-10{margin-left:40px!important}.ml-lg-11{margin-left:44px!important}.ml-lg-12{margin-left:48px!important}.ml-lg-13{margin-left:52px!important}.ml-lg-14{margin-left:56px!important}.ml-lg-15{margin-left:60px!important}.ml-lg-16{margin-left:64px!important}.ml-lg-auto{margin-left:auto!important}.ms-lg-0{margin-inline-start:0px!important}.ms-lg-1{margin-inline-start:4px!important}.ms-lg-2{margin-inline-start:8px!important}.ms-lg-3{margin-inline-start:12px!important}.ms-lg-4{margin-inline-start:16px!important}.ms-lg-5{margin-inline-start:20px!important}.ms-lg-6{margin-inline-start:24px!important}.ms-lg-7{margin-inline-start:28px!important}.ms-lg-8{margin-inline-start:32px!important}.ms-lg-9{margin-inline-start:36px!important}.ms-lg-10{margin-inline-start:40px!important}.ms-lg-11{margin-inline-start:44px!important}.ms-lg-12{margin-inline-start:48px!important}.ms-lg-13{margin-inline-start:52px!important}.ms-lg-14{margin-inline-start:56px!important}.ms-lg-15{margin-inline-start:60px!important}.ms-lg-16{margin-inline-start:64px!important}.ms-lg-auto{margin-inline-start:auto!important}.me-lg-0{margin-inline-end:0px!important}.me-lg-1{margin-inline-end:4px!important}.me-lg-2{margin-inline-end:8px!important}.me-lg-3{margin-inline-end:12px!important}.me-lg-4{margin-inline-end:16px!important}.me-lg-5{margin-inline-end:20px!important}.me-lg-6{margin-inline-end:24px!important}.me-lg-7{margin-inline-end:28px!important}.me-lg-8{margin-inline-end:32px!important}.me-lg-9{margin-inline-end:36px!important}.me-lg-10{margin-inline-end:40px!important}.me-lg-11{margin-inline-end:44px!important}.me-lg-12{margin-inline-end:48px!important}.me-lg-13{margin-inline-end:52px!important}.me-lg-14{margin-inline-end:56px!important}.me-lg-15{margin-inline-end:60px!important}.me-lg-16{margin-inline-end:64px!important}.me-lg-auto{margin-inline-end:auto!important}.ma-lg-n1{margin:-4px!important}.ma-lg-n2{margin:-8px!important}.ma-lg-n3{margin:-12px!important}.ma-lg-n4{margin:-16px!important}.ma-lg-n5{margin:-20px!important}.ma-lg-n6{margin:-24px!important}.ma-lg-n7{margin:-28px!important}.ma-lg-n8{margin:-32px!important}.ma-lg-n9{margin:-36px!important}.ma-lg-n10{margin:-40px!important}.ma-lg-n11{margin:-44px!important}.ma-lg-n12{margin:-48px!important}.ma-lg-n13{margin:-52px!important}.ma-lg-n14{margin:-56px!important}.ma-lg-n15{margin:-60px!important}.ma-lg-n16{margin:-64px!important}.mx-lg-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-lg-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-lg-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-lg-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-lg-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-lg-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-lg-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-lg-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-lg-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-lg-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-lg-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-lg-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-lg-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-lg-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-lg-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-lg-n16{margin-right:-64px!important;margin-left:-64px!important}.my-lg-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-lg-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-lg-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-lg-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-lg-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-lg-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-lg-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-lg-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-lg-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-lg-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-lg-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-lg-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-lg-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-lg-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-lg-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-lg-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-lg-n1{margin-top:-4px!important}.mt-lg-n2{margin-top:-8px!important}.mt-lg-n3{margin-top:-12px!important}.mt-lg-n4{margin-top:-16px!important}.mt-lg-n5{margin-top:-20px!important}.mt-lg-n6{margin-top:-24px!important}.mt-lg-n7{margin-top:-28px!important}.mt-lg-n8{margin-top:-32px!important}.mt-lg-n9{margin-top:-36px!important}.mt-lg-n10{margin-top:-40px!important}.mt-lg-n11{margin-top:-44px!important}.mt-lg-n12{margin-top:-48px!important}.mt-lg-n13{margin-top:-52px!important}.mt-lg-n14{margin-top:-56px!important}.mt-lg-n15{margin-top:-60px!important}.mt-lg-n16{margin-top:-64px!important}.mr-lg-n1{margin-right:-4px!important}.mr-lg-n2{margin-right:-8px!important}.mr-lg-n3{margin-right:-12px!important}.mr-lg-n4{margin-right:-16px!important}.mr-lg-n5{margin-right:-20px!important}.mr-lg-n6{margin-right:-24px!important}.mr-lg-n7{margin-right:-28px!important}.mr-lg-n8{margin-right:-32px!important}.mr-lg-n9{margin-right:-36px!important}.mr-lg-n10{margin-right:-40px!important}.mr-lg-n11{margin-right:-44px!important}.mr-lg-n12{margin-right:-48px!important}.mr-lg-n13{margin-right:-52px!important}.mr-lg-n14{margin-right:-56px!important}.mr-lg-n15{margin-right:-60px!important}.mr-lg-n16{margin-right:-64px!important}.mb-lg-n1{margin-bottom:-4px!important}.mb-lg-n2{margin-bottom:-8px!important}.mb-lg-n3{margin-bottom:-12px!important}.mb-lg-n4{margin-bottom:-16px!important}.mb-lg-n5{margin-bottom:-20px!important}.mb-lg-n6{margin-bottom:-24px!important}.mb-lg-n7{margin-bottom:-28px!important}.mb-lg-n8{margin-bottom:-32px!important}.mb-lg-n9{margin-bottom:-36px!important}.mb-lg-n10{margin-bottom:-40px!important}.mb-lg-n11{margin-bottom:-44px!important}.mb-lg-n12{margin-bottom:-48px!important}.mb-lg-n13{margin-bottom:-52px!important}.mb-lg-n14{margin-bottom:-56px!important}.mb-lg-n15{margin-bottom:-60px!important}.mb-lg-n16{margin-bottom:-64px!important}.ml-lg-n1{margin-left:-4px!important}.ml-lg-n2{margin-left:-8px!important}.ml-lg-n3{margin-left:-12px!important}.ml-lg-n4{margin-left:-16px!important}.ml-lg-n5{margin-left:-20px!important}.ml-lg-n6{margin-left:-24px!important}.ml-lg-n7{margin-left:-28px!important}.ml-lg-n8{margin-left:-32px!important}.ml-lg-n9{margin-left:-36px!important}.ml-lg-n10{margin-left:-40px!important}.ml-lg-n11{margin-left:-44px!important}.ml-lg-n12{margin-left:-48px!important}.ml-lg-n13{margin-left:-52px!important}.ml-lg-n14{margin-left:-56px!important}.ml-lg-n15{margin-left:-60px!important}.ml-lg-n16{margin-left:-64px!important}.ms-lg-n1{margin-inline-start:-4px!important}.ms-lg-n2{margin-inline-start:-8px!important}.ms-lg-n3{margin-inline-start:-12px!important}.ms-lg-n4{margin-inline-start:-16px!important}.ms-lg-n5{margin-inline-start:-20px!important}.ms-lg-n6{margin-inline-start:-24px!important}.ms-lg-n7{margin-inline-start:-28px!important}.ms-lg-n8{margin-inline-start:-32px!important}.ms-lg-n9{margin-inline-start:-36px!important}.ms-lg-n10{margin-inline-start:-40px!important}.ms-lg-n11{margin-inline-start:-44px!important}.ms-lg-n12{margin-inline-start:-48px!important}.ms-lg-n13{margin-inline-start:-52px!important}.ms-lg-n14{margin-inline-start:-56px!important}.ms-lg-n15{margin-inline-start:-60px!important}.ms-lg-n16{margin-inline-start:-64px!important}.me-lg-n1{margin-inline-end:-4px!important}.me-lg-n2{margin-inline-end:-8px!important}.me-lg-n3{margin-inline-end:-12px!important}.me-lg-n4{margin-inline-end:-16px!important}.me-lg-n5{margin-inline-end:-20px!important}.me-lg-n6{margin-inline-end:-24px!important}.me-lg-n7{margin-inline-end:-28px!important}.me-lg-n8{margin-inline-end:-32px!important}.me-lg-n9{margin-inline-end:-36px!important}.me-lg-n10{margin-inline-end:-40px!important}.me-lg-n11{margin-inline-end:-44px!important}.me-lg-n12{margin-inline-end:-48px!important}.me-lg-n13{margin-inline-end:-52px!important}.me-lg-n14{margin-inline-end:-56px!important}.me-lg-n15{margin-inline-end:-60px!important}.me-lg-n16{margin-inline-end:-64px!important}.pa-lg-0{padding:0!important}.pa-lg-1{padding:4px!important}.pa-lg-2{padding:8px!important}.pa-lg-3{padding:12px!important}.pa-lg-4{padding:16px!important}.pa-lg-5{padding:20px!important}.pa-lg-6{padding:24px!important}.pa-lg-7{padding:28px!important}.pa-lg-8{padding:32px!important}.pa-lg-9{padding:36px!important}.pa-lg-10{padding:40px!important}.pa-lg-11{padding:44px!important}.pa-lg-12{padding:48px!important}.pa-lg-13{padding:52px!important}.pa-lg-14{padding:56px!important}.pa-lg-15{padding:60px!important}.pa-lg-16{padding:64px!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:4px!important;padding-left:4px!important}.px-lg-2{padding-right:8px!important;padding-left:8px!important}.px-lg-3{padding-right:12px!important;padding-left:12px!important}.px-lg-4{padding-right:16px!important;padding-left:16px!important}.px-lg-5{padding-right:20px!important;padding-left:20px!important}.px-lg-6{padding-right:24px!important;padding-left:24px!important}.px-lg-7{padding-right:28px!important;padding-left:28px!important}.px-lg-8{padding-right:32px!important;padding-left:32px!important}.px-lg-9{padding-right:36px!important;padding-left:36px!important}.px-lg-10{padding-right:40px!important;padding-left:40px!important}.px-lg-11{padding-right:44px!important;padding-left:44px!important}.px-lg-12{padding-right:48px!important;padding-left:48px!important}.px-lg-13{padding-right:52px!important;padding-left:52px!important}.px-lg-14{padding-right:56px!important;padding-left:56px!important}.px-lg-15{padding-right:60px!important;padding-left:60px!important}.px-lg-16{padding-right:64px!important;padding-left:64px!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:4px!important;padding-bottom:4px!important}.py-lg-2{padding-top:8px!important;padding-bottom:8px!important}.py-lg-3{padding-top:12px!important;padding-bottom:12px!important}.py-lg-4{padding-top:16px!important;padding-bottom:16px!important}.py-lg-5{padding-top:20px!important;padding-bottom:20px!important}.py-lg-6{padding-top:24px!important;padding-bottom:24px!important}.py-lg-7{padding-top:28px!important;padding-bottom:28px!important}.py-lg-8{padding-top:32px!important;padding-bottom:32px!important}.py-lg-9{padding-top:36px!important;padding-bottom:36px!important}.py-lg-10{padding-top:40px!important;padding-bottom:40px!important}.py-lg-11{padding-top:44px!important;padding-bottom:44px!important}.py-lg-12{padding-top:48px!important;padding-bottom:48px!important}.py-lg-13{padding-top:52px!important;padding-bottom:52px!important}.py-lg-14{padding-top:56px!important;padding-bottom:56px!important}.py-lg-15{padding-top:60px!important;padding-bottom:60px!important}.py-lg-16{padding-top:64px!important;padding-bottom:64px!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:4px!important}.pt-lg-2{padding-top:8px!important}.pt-lg-3{padding-top:12px!important}.pt-lg-4{padding-top:16px!important}.pt-lg-5{padding-top:20px!important}.pt-lg-6{padding-top:24px!important}.pt-lg-7{padding-top:28px!important}.pt-lg-8{padding-top:32px!important}.pt-lg-9{padding-top:36px!important}.pt-lg-10{padding-top:40px!important}.pt-lg-11{padding-top:44px!important}.pt-lg-12{padding-top:48px!important}.pt-lg-13{padding-top:52px!important}.pt-lg-14{padding-top:56px!important}.pt-lg-15{padding-top:60px!important}.pt-lg-16{padding-top:64px!important}.pr-lg-0{padding-right:0!important}.pr-lg-1{padding-right:4px!important}.pr-lg-2{padding-right:8px!important}.pr-lg-3{padding-right:12px!important}.pr-lg-4{padding-right:16px!important}.pr-lg-5{padding-right:20px!important}.pr-lg-6{padding-right:24px!important}.pr-lg-7{padding-right:28px!important}.pr-lg-8{padding-right:32px!important}.pr-lg-9{padding-right:36px!important}.pr-lg-10{padding-right:40px!important}.pr-lg-11{padding-right:44px!important}.pr-lg-12{padding-right:48px!important}.pr-lg-13{padding-right:52px!important}.pr-lg-14{padding-right:56px!important}.pr-lg-15{padding-right:60px!important}.pr-lg-16{padding-right:64px!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:4px!important}.pb-lg-2{padding-bottom:8px!important}.pb-lg-3{padding-bottom:12px!important}.pb-lg-4{padding-bottom:16px!important}.pb-lg-5{padding-bottom:20px!important}.pb-lg-6{padding-bottom:24px!important}.pb-lg-7{padding-bottom:28px!important}.pb-lg-8{padding-bottom:32px!important}.pb-lg-9{padding-bottom:36px!important}.pb-lg-10{padding-bottom:40px!important}.pb-lg-11{padding-bottom:44px!important}.pb-lg-12{padding-bottom:48px!important}.pb-lg-13{padding-bottom:52px!important}.pb-lg-14{padding-bottom:56px!important}.pb-lg-15{padding-bottom:60px!important}.pb-lg-16{padding-bottom:64px!important}.pl-lg-0{padding-left:0!important}.pl-lg-1{padding-left:4px!important}.pl-lg-2{padding-left:8px!important}.pl-lg-3{padding-left:12px!important}.pl-lg-4{padding-left:16px!important}.pl-lg-5{padding-left:20px!important}.pl-lg-6{padding-left:24px!important}.pl-lg-7{padding-left:28px!important}.pl-lg-8{padding-left:32px!important}.pl-lg-9{padding-left:36px!important}.pl-lg-10{padding-left:40px!important}.pl-lg-11{padding-left:44px!important}.pl-lg-12{padding-left:48px!important}.pl-lg-13{padding-left:52px!important}.pl-lg-14{padding-left:56px!important}.pl-lg-15{padding-left:60px!important}.pl-lg-16{padding-left:64px!important}.ps-lg-0{padding-inline-start:0px!important}.ps-lg-1{padding-inline-start:4px!important}.ps-lg-2{padding-inline-start:8px!important}.ps-lg-3{padding-inline-start:12px!important}.ps-lg-4{padding-inline-start:16px!important}.ps-lg-5{padding-inline-start:20px!important}.ps-lg-6{padding-inline-start:24px!important}.ps-lg-7{padding-inline-start:28px!important}.ps-lg-8{padding-inline-start:32px!important}.ps-lg-9{padding-inline-start:36px!important}.ps-lg-10{padding-inline-start:40px!important}.ps-lg-11{padding-inline-start:44px!important}.ps-lg-12{padding-inline-start:48px!important}.ps-lg-13{padding-inline-start:52px!important}.ps-lg-14{padding-inline-start:56px!important}.ps-lg-15{padding-inline-start:60px!important}.ps-lg-16{padding-inline-start:64px!important}.pe-lg-0{padding-inline-end:0px!important}.pe-lg-1{padding-inline-end:4px!important}.pe-lg-2{padding-inline-end:8px!important}.pe-lg-3{padding-inline-end:12px!important}.pe-lg-4{padding-inline-end:16px!important}.pe-lg-5{padding-inline-end:20px!important}.pe-lg-6{padding-inline-end:24px!important}.pe-lg-7{padding-inline-end:28px!important}.pe-lg-8{padding-inline-end:32px!important}.pe-lg-9{padding-inline-end:36px!important}.pe-lg-10{padding-inline-end:40px!important}.pe-lg-11{padding-inline-end:44px!important}.pe-lg-12{padding-inline-end:48px!important}.pe-lg-13{padding-inline-end:52px!important}.pe-lg-14{padding-inline-end:56px!important}.pe-lg-15{padding-inline-end:60px!important}.pe-lg-16{padding-inline-end:64px!important}.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}.text-lg-justify{text-align:justify!important}.text-lg-start{text-align:start!important}.text-lg-end{text-align:end!important}.text-lg-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-lg-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-lg-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-lg-auto{height:auto!important}.h-lg-screen{height:100vh!important}.h-lg-0{height:0!important}.h-lg-25{height:25%!important}.h-lg-50{height:50%!important}.h-lg-75{height:75%!important}.h-lg-100{height:100%!important}.w-lg-auto{width:auto!important}.w-lg-0{width:0!important}.w-lg-25{width:25%!important}.w-lg-33{width:33%!important}.w-lg-50{width:50%!important}.w-lg-66{width:66%!important}.w-lg-75{width:75%!important}.w-lg-100{width:100%!important}}@media (min-width: 1920px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!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}.float-xl-none{float:none!important}.float-xl-left{float:left!important}.float-xl-right{float:right!important}.v-locale--is-rtl .float-xl-end{float:left!important}.v-locale--is-rtl .float-xl-start,.v-locale--is-ltr .float-xl-end{float:right!important}.v-locale--is-ltr .float-xl-start{float:left!important}.flex-xl-fill,.flex-xl-1-1{flex:1 1 auto!important}.flex-xl-1-0{flex:1 0 auto!important}.flex-xl-0-1{flex:0 1 auto!important}.flex-xl-0-0{flex:0 0 auto!important}.flex-xl-1-1-100{flex:1 1 100%!important}.flex-xl-1-0-100{flex:1 0 100%!important}.flex-xl-0-1-100{flex:0 1 100%!important}.flex-xl-0-0-100{flex:0 0 100%!important}.flex-xl-1-1-0{flex:1 1 0!important}.flex-xl-1-0-0{flex:1 0 0!important}.flex-xl-0-1-0{flex:0 1 0!important}.flex-xl-0-0-0{flex:0 0 0!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-xl-start{justify-content:flex-start!important}.justify-xl-end{justify-content:flex-end!important}.justify-xl-center{justify-content:center!important}.justify-xl-space-between{justify-content:space-between!important}.justify-xl-space-around{justify-content:space-around!important}.justify-xl-space-evenly{justify-content:space-evenly!important}.align-xl-start{align-items:flex-start!important}.align-xl-end{align-items:flex-end!important}.align-xl-center{align-items:center!important}.align-xl-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-xl-space-around{align-content:space-around!important}.align-content-xl-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-xl-7{order:7!important}.order-xl-8{order:8!important}.order-xl-9{order:9!important}.order-xl-10{order:10!important}.order-xl-11{order:11!important}.order-xl-12{order:12!important}.order-xl-last{order:13!important}.ga-xl-0{gap:0px!important}.ga-xl-1{gap:4px!important}.ga-xl-2{gap:8px!important}.ga-xl-3{gap:12px!important}.ga-xl-4{gap:16px!important}.ga-xl-5{gap:20px!important}.ga-xl-6{gap:24px!important}.ga-xl-7{gap:28px!important}.ga-xl-8{gap:32px!important}.ga-xl-9{gap:36px!important}.ga-xl-10{gap:40px!important}.ga-xl-11{gap:44px!important}.ga-xl-12{gap:48px!important}.ga-xl-13{gap:52px!important}.ga-xl-14{gap:56px!important}.ga-xl-15{gap:60px!important}.ga-xl-16{gap:64px!important}.ga-xl-auto{gap:auto!important}.gr-xl-0{row-gap:0px!important}.gr-xl-1{row-gap:4px!important}.gr-xl-2{row-gap:8px!important}.gr-xl-3{row-gap:12px!important}.gr-xl-4{row-gap:16px!important}.gr-xl-5{row-gap:20px!important}.gr-xl-6{row-gap:24px!important}.gr-xl-7{row-gap:28px!important}.gr-xl-8{row-gap:32px!important}.gr-xl-9{row-gap:36px!important}.gr-xl-10{row-gap:40px!important}.gr-xl-11{row-gap:44px!important}.gr-xl-12{row-gap:48px!important}.gr-xl-13{row-gap:52px!important}.gr-xl-14{row-gap:56px!important}.gr-xl-15{row-gap:60px!important}.gr-xl-16{row-gap:64px!important}.gr-xl-auto{row-gap:auto!important}.gc-xl-0{column-gap:0px!important}.gc-xl-1{column-gap:4px!important}.gc-xl-2{column-gap:8px!important}.gc-xl-3{column-gap:12px!important}.gc-xl-4{column-gap:16px!important}.gc-xl-5{column-gap:20px!important}.gc-xl-6{column-gap:24px!important}.gc-xl-7{column-gap:28px!important}.gc-xl-8{column-gap:32px!important}.gc-xl-9{column-gap:36px!important}.gc-xl-10{column-gap:40px!important}.gc-xl-11{column-gap:44px!important}.gc-xl-12{column-gap:48px!important}.gc-xl-13{column-gap:52px!important}.gc-xl-14{column-gap:56px!important}.gc-xl-15{column-gap:60px!important}.gc-xl-16{column-gap:64px!important}.gc-xl-auto{column-gap:auto!important}.ma-xl-0{margin:0!important}.ma-xl-1{margin:4px!important}.ma-xl-2{margin:8px!important}.ma-xl-3{margin:12px!important}.ma-xl-4{margin:16px!important}.ma-xl-5{margin:20px!important}.ma-xl-6{margin:24px!important}.ma-xl-7{margin:28px!important}.ma-xl-8{margin:32px!important}.ma-xl-9{margin:36px!important}.ma-xl-10{margin:40px!important}.ma-xl-11{margin:44px!important}.ma-xl-12{margin:48px!important}.ma-xl-13{margin:52px!important}.ma-xl-14{margin:56px!important}.ma-xl-15{margin:60px!important}.ma-xl-16{margin:64px!important}.ma-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:4px!important;margin-left:4px!important}.mx-xl-2{margin-right:8px!important;margin-left:8px!important}.mx-xl-3{margin-right:12px!important;margin-left:12px!important}.mx-xl-4{margin-right:16px!important;margin-left:16px!important}.mx-xl-5{margin-right:20px!important;margin-left:20px!important}.mx-xl-6{margin-right:24px!important;margin-left:24px!important}.mx-xl-7{margin-right:28px!important;margin-left:28px!important}.mx-xl-8{margin-right:32px!important;margin-left:32px!important}.mx-xl-9{margin-right:36px!important;margin-left:36px!important}.mx-xl-10{margin-right:40px!important;margin-left:40px!important}.mx-xl-11{margin-right:44px!important;margin-left:44px!important}.mx-xl-12{margin-right:48px!important;margin-left:48px!important}.mx-xl-13{margin-right:52px!important;margin-left:52px!important}.mx-xl-14{margin-right:56px!important;margin-left:56px!important}.mx-xl-15{margin-right:60px!important;margin-left:60px!important}.mx-xl-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-xl-2{margin-top:8px!important;margin-bottom:8px!important}.my-xl-3{margin-top:12px!important;margin-bottom:12px!important}.my-xl-4{margin-top:16px!important;margin-bottom:16px!important}.my-xl-5{margin-top:20px!important;margin-bottom:20px!important}.my-xl-6{margin-top:24px!important;margin-bottom:24px!important}.my-xl-7{margin-top:28px!important;margin-bottom:28px!important}.my-xl-8{margin-top:32px!important;margin-bottom:32px!important}.my-xl-9{margin-top:36px!important;margin-bottom:36px!important}.my-xl-10{margin-top:40px!important;margin-bottom:40px!important}.my-xl-11{margin-top:44px!important;margin-bottom:44px!important}.my-xl-12{margin-top:48px!important;margin-bottom:48px!important}.my-xl-13{margin-top:52px!important;margin-bottom:52px!important}.my-xl-14{margin-top:56px!important;margin-bottom:56px!important}.my-xl-15{margin-top:60px!important;margin-bottom:60px!important}.my-xl-16{margin-top:64px!important;margin-bottom:64px!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:4px!important}.mt-xl-2{margin-top:8px!important}.mt-xl-3{margin-top:12px!important}.mt-xl-4{margin-top:16px!important}.mt-xl-5{margin-top:20px!important}.mt-xl-6{margin-top:24px!important}.mt-xl-7{margin-top:28px!important}.mt-xl-8{margin-top:32px!important}.mt-xl-9{margin-top:36px!important}.mt-xl-10{margin-top:40px!important}.mt-xl-11{margin-top:44px!important}.mt-xl-12{margin-top:48px!important}.mt-xl-13{margin-top:52px!important}.mt-xl-14{margin-top:56px!important}.mt-xl-15{margin-top:60px!important}.mt-xl-16{margin-top:64px!important}.mt-xl-auto{margin-top:auto!important}.mr-xl-0{margin-right:0!important}.mr-xl-1{margin-right:4px!important}.mr-xl-2{margin-right:8px!important}.mr-xl-3{margin-right:12px!important}.mr-xl-4{margin-right:16px!important}.mr-xl-5{margin-right:20px!important}.mr-xl-6{margin-right:24px!important}.mr-xl-7{margin-right:28px!important}.mr-xl-8{margin-right:32px!important}.mr-xl-9{margin-right:36px!important}.mr-xl-10{margin-right:40px!important}.mr-xl-11{margin-right:44px!important}.mr-xl-12{margin-right:48px!important}.mr-xl-13{margin-right:52px!important}.mr-xl-14{margin-right:56px!important}.mr-xl-15{margin-right:60px!important}.mr-xl-16{margin-right:64px!important}.mr-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:4px!important}.mb-xl-2{margin-bottom:8px!important}.mb-xl-3{margin-bottom:12px!important}.mb-xl-4{margin-bottom:16px!important}.mb-xl-5{margin-bottom:20px!important}.mb-xl-6{margin-bottom:24px!important}.mb-xl-7{margin-bottom:28px!important}.mb-xl-8{margin-bottom:32px!important}.mb-xl-9{margin-bottom:36px!important}.mb-xl-10{margin-bottom:40px!important}.mb-xl-11{margin-bottom:44px!important}.mb-xl-12{margin-bottom:48px!important}.mb-xl-13{margin-bottom:52px!important}.mb-xl-14{margin-bottom:56px!important}.mb-xl-15{margin-bottom:60px!important}.mb-xl-16{margin-bottom:64px!important}.mb-xl-auto{margin-bottom:auto!important}.ml-xl-0{margin-left:0!important}.ml-xl-1{margin-left:4px!important}.ml-xl-2{margin-left:8px!important}.ml-xl-3{margin-left:12px!important}.ml-xl-4{margin-left:16px!important}.ml-xl-5{margin-left:20px!important}.ml-xl-6{margin-left:24px!important}.ml-xl-7{margin-left:28px!important}.ml-xl-8{margin-left:32px!important}.ml-xl-9{margin-left:36px!important}.ml-xl-10{margin-left:40px!important}.ml-xl-11{margin-left:44px!important}.ml-xl-12{margin-left:48px!important}.ml-xl-13{margin-left:52px!important}.ml-xl-14{margin-left:56px!important}.ml-xl-15{margin-left:60px!important}.ml-xl-16{margin-left:64px!important}.ml-xl-auto{margin-left:auto!important}.ms-xl-0{margin-inline-start:0px!important}.ms-xl-1{margin-inline-start:4px!important}.ms-xl-2{margin-inline-start:8px!important}.ms-xl-3{margin-inline-start:12px!important}.ms-xl-4{margin-inline-start:16px!important}.ms-xl-5{margin-inline-start:20px!important}.ms-xl-6{margin-inline-start:24px!important}.ms-xl-7{margin-inline-start:28px!important}.ms-xl-8{margin-inline-start:32px!important}.ms-xl-9{margin-inline-start:36px!important}.ms-xl-10{margin-inline-start:40px!important}.ms-xl-11{margin-inline-start:44px!important}.ms-xl-12{margin-inline-start:48px!important}.ms-xl-13{margin-inline-start:52px!important}.ms-xl-14{margin-inline-start:56px!important}.ms-xl-15{margin-inline-start:60px!important}.ms-xl-16{margin-inline-start:64px!important}.ms-xl-auto{margin-inline-start:auto!important}.me-xl-0{margin-inline-end:0px!important}.me-xl-1{margin-inline-end:4px!important}.me-xl-2{margin-inline-end:8px!important}.me-xl-3{margin-inline-end:12px!important}.me-xl-4{margin-inline-end:16px!important}.me-xl-5{margin-inline-end:20px!important}.me-xl-6{margin-inline-end:24px!important}.me-xl-7{margin-inline-end:28px!important}.me-xl-8{margin-inline-end:32px!important}.me-xl-9{margin-inline-end:36px!important}.me-xl-10{margin-inline-end:40px!important}.me-xl-11{margin-inline-end:44px!important}.me-xl-12{margin-inline-end:48px!important}.me-xl-13{margin-inline-end:52px!important}.me-xl-14{margin-inline-end:56px!important}.me-xl-15{margin-inline-end:60px!important}.me-xl-16{margin-inline-end:64px!important}.me-xl-auto{margin-inline-end:auto!important}.ma-xl-n1{margin:-4px!important}.ma-xl-n2{margin:-8px!important}.ma-xl-n3{margin:-12px!important}.ma-xl-n4{margin:-16px!important}.ma-xl-n5{margin:-20px!important}.ma-xl-n6{margin:-24px!important}.ma-xl-n7{margin:-28px!important}.ma-xl-n8{margin:-32px!important}.ma-xl-n9{margin:-36px!important}.ma-xl-n10{margin:-40px!important}.ma-xl-n11{margin:-44px!important}.ma-xl-n12{margin:-48px!important}.ma-xl-n13{margin:-52px!important}.ma-xl-n14{margin:-56px!important}.ma-xl-n15{margin:-60px!important}.ma-xl-n16{margin:-64px!important}.mx-xl-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-xl-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-xl-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-xl-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-xl-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-xl-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-xl-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-xl-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-xl-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-xl-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-xl-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-xl-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-xl-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-xl-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-xl-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-xl-n16{margin-right:-64px!important;margin-left:-64px!important}.my-xl-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-xl-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-xl-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-xl-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-xl-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-xl-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-xl-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-xl-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-xl-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-xl-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-xl-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-xl-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-xl-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-xl-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-xl-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-xl-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-xl-n1{margin-top:-4px!important}.mt-xl-n2{margin-top:-8px!important}.mt-xl-n3{margin-top:-12px!important}.mt-xl-n4{margin-top:-16px!important}.mt-xl-n5{margin-top:-20px!important}.mt-xl-n6{margin-top:-24px!important}.mt-xl-n7{margin-top:-28px!important}.mt-xl-n8{margin-top:-32px!important}.mt-xl-n9{margin-top:-36px!important}.mt-xl-n10{margin-top:-40px!important}.mt-xl-n11{margin-top:-44px!important}.mt-xl-n12{margin-top:-48px!important}.mt-xl-n13{margin-top:-52px!important}.mt-xl-n14{margin-top:-56px!important}.mt-xl-n15{margin-top:-60px!important}.mt-xl-n16{margin-top:-64px!important}.mr-xl-n1{margin-right:-4px!important}.mr-xl-n2{margin-right:-8px!important}.mr-xl-n3{margin-right:-12px!important}.mr-xl-n4{margin-right:-16px!important}.mr-xl-n5{margin-right:-20px!important}.mr-xl-n6{margin-right:-24px!important}.mr-xl-n7{margin-right:-28px!important}.mr-xl-n8{margin-right:-32px!important}.mr-xl-n9{margin-right:-36px!important}.mr-xl-n10{margin-right:-40px!important}.mr-xl-n11{margin-right:-44px!important}.mr-xl-n12{margin-right:-48px!important}.mr-xl-n13{margin-right:-52px!important}.mr-xl-n14{margin-right:-56px!important}.mr-xl-n15{margin-right:-60px!important}.mr-xl-n16{margin-right:-64px!important}.mb-xl-n1{margin-bottom:-4px!important}.mb-xl-n2{margin-bottom:-8px!important}.mb-xl-n3{margin-bottom:-12px!important}.mb-xl-n4{margin-bottom:-16px!important}.mb-xl-n5{margin-bottom:-20px!important}.mb-xl-n6{margin-bottom:-24px!important}.mb-xl-n7{margin-bottom:-28px!important}.mb-xl-n8{margin-bottom:-32px!important}.mb-xl-n9{margin-bottom:-36px!important}.mb-xl-n10{margin-bottom:-40px!important}.mb-xl-n11{margin-bottom:-44px!important}.mb-xl-n12{margin-bottom:-48px!important}.mb-xl-n13{margin-bottom:-52px!important}.mb-xl-n14{margin-bottom:-56px!important}.mb-xl-n15{margin-bottom:-60px!important}.mb-xl-n16{margin-bottom:-64px!important}.ml-xl-n1{margin-left:-4px!important}.ml-xl-n2{margin-left:-8px!important}.ml-xl-n3{margin-left:-12px!important}.ml-xl-n4{margin-left:-16px!important}.ml-xl-n5{margin-left:-20px!important}.ml-xl-n6{margin-left:-24px!important}.ml-xl-n7{margin-left:-28px!important}.ml-xl-n8{margin-left:-32px!important}.ml-xl-n9{margin-left:-36px!important}.ml-xl-n10{margin-left:-40px!important}.ml-xl-n11{margin-left:-44px!important}.ml-xl-n12{margin-left:-48px!important}.ml-xl-n13{margin-left:-52px!important}.ml-xl-n14{margin-left:-56px!important}.ml-xl-n15{margin-left:-60px!important}.ml-xl-n16{margin-left:-64px!important}.ms-xl-n1{margin-inline-start:-4px!important}.ms-xl-n2{margin-inline-start:-8px!important}.ms-xl-n3{margin-inline-start:-12px!important}.ms-xl-n4{margin-inline-start:-16px!important}.ms-xl-n5{margin-inline-start:-20px!important}.ms-xl-n6{margin-inline-start:-24px!important}.ms-xl-n7{margin-inline-start:-28px!important}.ms-xl-n8{margin-inline-start:-32px!important}.ms-xl-n9{margin-inline-start:-36px!important}.ms-xl-n10{margin-inline-start:-40px!important}.ms-xl-n11{margin-inline-start:-44px!important}.ms-xl-n12{margin-inline-start:-48px!important}.ms-xl-n13{margin-inline-start:-52px!important}.ms-xl-n14{margin-inline-start:-56px!important}.ms-xl-n15{margin-inline-start:-60px!important}.ms-xl-n16{margin-inline-start:-64px!important}.me-xl-n1{margin-inline-end:-4px!important}.me-xl-n2{margin-inline-end:-8px!important}.me-xl-n3{margin-inline-end:-12px!important}.me-xl-n4{margin-inline-end:-16px!important}.me-xl-n5{margin-inline-end:-20px!important}.me-xl-n6{margin-inline-end:-24px!important}.me-xl-n7{margin-inline-end:-28px!important}.me-xl-n8{margin-inline-end:-32px!important}.me-xl-n9{margin-inline-end:-36px!important}.me-xl-n10{margin-inline-end:-40px!important}.me-xl-n11{margin-inline-end:-44px!important}.me-xl-n12{margin-inline-end:-48px!important}.me-xl-n13{margin-inline-end:-52px!important}.me-xl-n14{margin-inline-end:-56px!important}.me-xl-n15{margin-inline-end:-60px!important}.me-xl-n16{margin-inline-end:-64px!important}.pa-xl-0{padding:0!important}.pa-xl-1{padding:4px!important}.pa-xl-2{padding:8px!important}.pa-xl-3{padding:12px!important}.pa-xl-4{padding:16px!important}.pa-xl-5{padding:20px!important}.pa-xl-6{padding:24px!important}.pa-xl-7{padding:28px!important}.pa-xl-8{padding:32px!important}.pa-xl-9{padding:36px!important}.pa-xl-10{padding:40px!important}.pa-xl-11{padding:44px!important}.pa-xl-12{padding:48px!important}.pa-xl-13{padding:52px!important}.pa-xl-14{padding:56px!important}.pa-xl-15{padding:60px!important}.pa-xl-16{padding:64px!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:4px!important;padding-left:4px!important}.px-xl-2{padding-right:8px!important;padding-left:8px!important}.px-xl-3{padding-right:12px!important;padding-left:12px!important}.px-xl-4{padding-right:16px!important;padding-left:16px!important}.px-xl-5{padding-right:20px!important;padding-left:20px!important}.px-xl-6{padding-right:24px!important;padding-left:24px!important}.px-xl-7{padding-right:28px!important;padding-left:28px!important}.px-xl-8{padding-right:32px!important;padding-left:32px!important}.px-xl-9{padding-right:36px!important;padding-left:36px!important}.px-xl-10{padding-right:40px!important;padding-left:40px!important}.px-xl-11{padding-right:44px!important;padding-left:44px!important}.px-xl-12{padding-right:48px!important;padding-left:48px!important}.px-xl-13{padding-right:52px!important;padding-left:52px!important}.px-xl-14{padding-right:56px!important;padding-left:56px!important}.px-xl-15{padding-right:60px!important;padding-left:60px!important}.px-xl-16{padding-right:64px!important;padding-left:64px!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:4px!important;padding-bottom:4px!important}.py-xl-2{padding-top:8px!important;padding-bottom:8px!important}.py-xl-3{padding-top:12px!important;padding-bottom:12px!important}.py-xl-4{padding-top:16px!important;padding-bottom:16px!important}.py-xl-5{padding-top:20px!important;padding-bottom:20px!important}.py-xl-6{padding-top:24px!important;padding-bottom:24px!important}.py-xl-7{padding-top:28px!important;padding-bottom:28px!important}.py-xl-8{padding-top:32px!important;padding-bottom:32px!important}.py-xl-9{padding-top:36px!important;padding-bottom:36px!important}.py-xl-10{padding-top:40px!important;padding-bottom:40px!important}.py-xl-11{padding-top:44px!important;padding-bottom:44px!important}.py-xl-12{padding-top:48px!important;padding-bottom:48px!important}.py-xl-13{padding-top:52px!important;padding-bottom:52px!important}.py-xl-14{padding-top:56px!important;padding-bottom:56px!important}.py-xl-15{padding-top:60px!important;padding-bottom:60px!important}.py-xl-16{padding-top:64px!important;padding-bottom:64px!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:4px!important}.pt-xl-2{padding-top:8px!important}.pt-xl-3{padding-top:12px!important}.pt-xl-4{padding-top:16px!important}.pt-xl-5{padding-top:20px!important}.pt-xl-6{padding-top:24px!important}.pt-xl-7{padding-top:28px!important}.pt-xl-8{padding-top:32px!important}.pt-xl-9{padding-top:36px!important}.pt-xl-10{padding-top:40px!important}.pt-xl-11{padding-top:44px!important}.pt-xl-12{padding-top:48px!important}.pt-xl-13{padding-top:52px!important}.pt-xl-14{padding-top:56px!important}.pt-xl-15{padding-top:60px!important}.pt-xl-16{padding-top:64px!important}.pr-xl-0{padding-right:0!important}.pr-xl-1{padding-right:4px!important}.pr-xl-2{padding-right:8px!important}.pr-xl-3{padding-right:12px!important}.pr-xl-4{padding-right:16px!important}.pr-xl-5{padding-right:20px!important}.pr-xl-6{padding-right:24px!important}.pr-xl-7{padding-right:28px!important}.pr-xl-8{padding-right:32px!important}.pr-xl-9{padding-right:36px!important}.pr-xl-10{padding-right:40px!important}.pr-xl-11{padding-right:44px!important}.pr-xl-12{padding-right:48px!important}.pr-xl-13{padding-right:52px!important}.pr-xl-14{padding-right:56px!important}.pr-xl-15{padding-right:60px!important}.pr-xl-16{padding-right:64px!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:4px!important}.pb-xl-2{padding-bottom:8px!important}.pb-xl-3{padding-bottom:12px!important}.pb-xl-4{padding-bottom:16px!important}.pb-xl-5{padding-bottom:20px!important}.pb-xl-6{padding-bottom:24px!important}.pb-xl-7{padding-bottom:28px!important}.pb-xl-8{padding-bottom:32px!important}.pb-xl-9{padding-bottom:36px!important}.pb-xl-10{padding-bottom:40px!important}.pb-xl-11{padding-bottom:44px!important}.pb-xl-12{padding-bottom:48px!important}.pb-xl-13{padding-bottom:52px!important}.pb-xl-14{padding-bottom:56px!important}.pb-xl-15{padding-bottom:60px!important}.pb-xl-16{padding-bottom:64px!important}.pl-xl-0{padding-left:0!important}.pl-xl-1{padding-left:4px!important}.pl-xl-2{padding-left:8px!important}.pl-xl-3{padding-left:12px!important}.pl-xl-4{padding-left:16px!important}.pl-xl-5{padding-left:20px!important}.pl-xl-6{padding-left:24px!important}.pl-xl-7{padding-left:28px!important}.pl-xl-8{padding-left:32px!important}.pl-xl-9{padding-left:36px!important}.pl-xl-10{padding-left:40px!important}.pl-xl-11{padding-left:44px!important}.pl-xl-12{padding-left:48px!important}.pl-xl-13{padding-left:52px!important}.pl-xl-14{padding-left:56px!important}.pl-xl-15{padding-left:60px!important}.pl-xl-16{padding-left:64px!important}.ps-xl-0{padding-inline-start:0px!important}.ps-xl-1{padding-inline-start:4px!important}.ps-xl-2{padding-inline-start:8px!important}.ps-xl-3{padding-inline-start:12px!important}.ps-xl-4{padding-inline-start:16px!important}.ps-xl-5{padding-inline-start:20px!important}.ps-xl-6{padding-inline-start:24px!important}.ps-xl-7{padding-inline-start:28px!important}.ps-xl-8{padding-inline-start:32px!important}.ps-xl-9{padding-inline-start:36px!important}.ps-xl-10{padding-inline-start:40px!important}.ps-xl-11{padding-inline-start:44px!important}.ps-xl-12{padding-inline-start:48px!important}.ps-xl-13{padding-inline-start:52px!important}.ps-xl-14{padding-inline-start:56px!important}.ps-xl-15{padding-inline-start:60px!important}.ps-xl-16{padding-inline-start:64px!important}.pe-xl-0{padding-inline-end:0px!important}.pe-xl-1{padding-inline-end:4px!important}.pe-xl-2{padding-inline-end:8px!important}.pe-xl-3{padding-inline-end:12px!important}.pe-xl-4{padding-inline-end:16px!important}.pe-xl-5{padding-inline-end:20px!important}.pe-xl-6{padding-inline-end:24px!important}.pe-xl-7{padding-inline-end:28px!important}.pe-xl-8{padding-inline-end:32px!important}.pe-xl-9{padding-inline-end:36px!important}.pe-xl-10{padding-inline-end:40px!important}.pe-xl-11{padding-inline-end:44px!important}.pe-xl-12{padding-inline-end:48px!important}.pe-xl-13{padding-inline-end:52px!important}.pe-xl-14{padding-inline-end:56px!important}.pe-xl-15{padding-inline-end:60px!important}.pe-xl-16{padding-inline-end:64px!important}.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}.text-xl-justify{text-align:justify!important}.text-xl-start{text-align:start!important}.text-xl-end{text-align:end!important}.text-xl-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-xl-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xl-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-xl-auto{height:auto!important}.h-xl-screen{height:100vh!important}.h-xl-0{height:0!important}.h-xl-25{height:25%!important}.h-xl-50{height:50%!important}.h-xl-75{height:75%!important}.h-xl-100{height:100%!important}.w-xl-auto{width:auto!important}.w-xl-0{width:0!important}.w-xl-25{width:25%!important}.w-xl-33{width:33%!important}.w-xl-50{width:50%!important}.w-xl-66{width:66%!important}.w-xl-75{width:75%!important}.w-xl-100{width:100%!important}}@media (min-width: 2560px){.d-xxl-none{display:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!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}.float-xxl-none{float:none!important}.float-xxl-left{float:left!important}.float-xxl-right{float:right!important}.v-locale--is-rtl .float-xxl-end{float:left!important}.v-locale--is-rtl .float-xxl-start,.v-locale--is-ltr .float-xxl-end{float:right!important}.v-locale--is-ltr .float-xxl-start{float:left!important}.flex-xxl-fill,.flex-xxl-1-1{flex:1 1 auto!important}.flex-xxl-1-0{flex:1 0 auto!important}.flex-xxl-0-1{flex:0 1 auto!important}.flex-xxl-0-0{flex:0 0 auto!important}.flex-xxl-1-1-100{flex:1 1 100%!important}.flex-xxl-1-0-100{flex:1 0 100%!important}.flex-xxl-0-1-100{flex:0 1 100%!important}.flex-xxl-0-0-100{flex:0 0 100%!important}.flex-xxl-1-1-0{flex:1 1 0!important}.flex-xxl-1-0-0{flex:1 0 0!important}.flex-xxl-0-1-0{flex:0 1 0!important}.flex-xxl-0-0-0{flex:0 0 0!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-xxl-start{justify-content:flex-start!important}.justify-xxl-end{justify-content:flex-end!important}.justify-xxl-center{justify-content:center!important}.justify-xxl-space-between{justify-content:space-between!important}.justify-xxl-space-around{justify-content:space-around!important}.justify-xxl-space-evenly{justify-content:space-evenly!important}.align-xxl-start{align-items:flex-start!important}.align-xxl-end{align-items:flex-end!important}.align-xxl-center{align-items:center!important}.align-xxl-baseline{align-items:baseline!important}.align-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-space-between{align-content:space-between!important}.align-content-xxl-space-around{align-content:space-around!important}.align-content-xxl-space-evenly{align-content:space-evenly!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-6{order:6!important}.order-xxl-7{order:7!important}.order-xxl-8{order:8!important}.order-xxl-9{order:9!important}.order-xxl-10{order:10!important}.order-xxl-11{order:11!important}.order-xxl-12{order:12!important}.order-xxl-last{order:13!important}.ga-xxl-0{gap:0px!important}.ga-xxl-1{gap:4px!important}.ga-xxl-2{gap:8px!important}.ga-xxl-3{gap:12px!important}.ga-xxl-4{gap:16px!important}.ga-xxl-5{gap:20px!important}.ga-xxl-6{gap:24px!important}.ga-xxl-7{gap:28px!important}.ga-xxl-8{gap:32px!important}.ga-xxl-9{gap:36px!important}.ga-xxl-10{gap:40px!important}.ga-xxl-11{gap:44px!important}.ga-xxl-12{gap:48px!important}.ga-xxl-13{gap:52px!important}.ga-xxl-14{gap:56px!important}.ga-xxl-15{gap:60px!important}.ga-xxl-16{gap:64px!important}.ga-xxl-auto{gap:auto!important}.gr-xxl-0{row-gap:0px!important}.gr-xxl-1{row-gap:4px!important}.gr-xxl-2{row-gap:8px!important}.gr-xxl-3{row-gap:12px!important}.gr-xxl-4{row-gap:16px!important}.gr-xxl-5{row-gap:20px!important}.gr-xxl-6{row-gap:24px!important}.gr-xxl-7{row-gap:28px!important}.gr-xxl-8{row-gap:32px!important}.gr-xxl-9{row-gap:36px!important}.gr-xxl-10{row-gap:40px!important}.gr-xxl-11{row-gap:44px!important}.gr-xxl-12{row-gap:48px!important}.gr-xxl-13{row-gap:52px!important}.gr-xxl-14{row-gap:56px!important}.gr-xxl-15{row-gap:60px!important}.gr-xxl-16{row-gap:64px!important}.gr-xxl-auto{row-gap:auto!important}.gc-xxl-0{column-gap:0px!important}.gc-xxl-1{column-gap:4px!important}.gc-xxl-2{column-gap:8px!important}.gc-xxl-3{column-gap:12px!important}.gc-xxl-4{column-gap:16px!important}.gc-xxl-5{column-gap:20px!important}.gc-xxl-6{column-gap:24px!important}.gc-xxl-7{column-gap:28px!important}.gc-xxl-8{column-gap:32px!important}.gc-xxl-9{column-gap:36px!important}.gc-xxl-10{column-gap:40px!important}.gc-xxl-11{column-gap:44px!important}.gc-xxl-12{column-gap:48px!important}.gc-xxl-13{column-gap:52px!important}.gc-xxl-14{column-gap:56px!important}.gc-xxl-15{column-gap:60px!important}.gc-xxl-16{column-gap:64px!important}.gc-xxl-auto{column-gap:auto!important}.ma-xxl-0{margin:0!important}.ma-xxl-1{margin:4px!important}.ma-xxl-2{margin:8px!important}.ma-xxl-3{margin:12px!important}.ma-xxl-4{margin:16px!important}.ma-xxl-5{margin:20px!important}.ma-xxl-6{margin:24px!important}.ma-xxl-7{margin:28px!important}.ma-xxl-8{margin:32px!important}.ma-xxl-9{margin:36px!important}.ma-xxl-10{margin:40px!important}.ma-xxl-11{margin:44px!important}.ma-xxl-12{margin:48px!important}.ma-xxl-13{margin:52px!important}.ma-xxl-14{margin:56px!important}.ma-xxl-15{margin:60px!important}.ma-xxl-16{margin:64px!important}.ma-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:4px!important;margin-left:4px!important}.mx-xxl-2{margin-right:8px!important;margin-left:8px!important}.mx-xxl-3{margin-right:12px!important;margin-left:12px!important}.mx-xxl-4{margin-right:16px!important;margin-left:16px!important}.mx-xxl-5{margin-right:20px!important;margin-left:20px!important}.mx-xxl-6{margin-right:24px!important;margin-left:24px!important}.mx-xxl-7{margin-right:28px!important;margin-left:28px!important}.mx-xxl-8{margin-right:32px!important;margin-left:32px!important}.mx-xxl-9{margin-right:36px!important;margin-left:36px!important}.mx-xxl-10{margin-right:40px!important;margin-left:40px!important}.mx-xxl-11{margin-right:44px!important;margin-left:44px!important}.mx-xxl-12{margin-right:48px!important;margin-left:48px!important}.mx-xxl-13{margin-right:52px!important;margin-left:52px!important}.mx-xxl-14{margin-right:56px!important;margin-left:56px!important}.mx-xxl-15{margin-right:60px!important;margin-left:60px!important}.mx-xxl-16{margin-right:64px!important;margin-left:64px!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:4px!important;margin-bottom:4px!important}.my-xxl-2{margin-top:8px!important;margin-bottom:8px!important}.my-xxl-3{margin-top:12px!important;margin-bottom:12px!important}.my-xxl-4{margin-top:16px!important;margin-bottom:16px!important}.my-xxl-5{margin-top:20px!important;margin-bottom:20px!important}.my-xxl-6{margin-top:24px!important;margin-bottom:24px!important}.my-xxl-7{margin-top:28px!important;margin-bottom:28px!important}.my-xxl-8{margin-top:32px!important;margin-bottom:32px!important}.my-xxl-9{margin-top:36px!important;margin-bottom:36px!important}.my-xxl-10{margin-top:40px!important;margin-bottom:40px!important}.my-xxl-11{margin-top:44px!important;margin-bottom:44px!important}.my-xxl-12{margin-top:48px!important;margin-bottom:48px!important}.my-xxl-13{margin-top:52px!important;margin-bottom:52px!important}.my-xxl-14{margin-top:56px!important;margin-bottom:56px!important}.my-xxl-15{margin-top:60px!important;margin-bottom:60px!important}.my-xxl-16{margin-top:64px!important;margin-bottom:64px!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:4px!important}.mt-xxl-2{margin-top:8px!important}.mt-xxl-3{margin-top:12px!important}.mt-xxl-4{margin-top:16px!important}.mt-xxl-5{margin-top:20px!important}.mt-xxl-6{margin-top:24px!important}.mt-xxl-7{margin-top:28px!important}.mt-xxl-8{margin-top:32px!important}.mt-xxl-9{margin-top:36px!important}.mt-xxl-10{margin-top:40px!important}.mt-xxl-11{margin-top:44px!important}.mt-xxl-12{margin-top:48px!important}.mt-xxl-13{margin-top:52px!important}.mt-xxl-14{margin-top:56px!important}.mt-xxl-15{margin-top:60px!important}.mt-xxl-16{margin-top:64px!important}.mt-xxl-auto{margin-top:auto!important}.mr-xxl-0{margin-right:0!important}.mr-xxl-1{margin-right:4px!important}.mr-xxl-2{margin-right:8px!important}.mr-xxl-3{margin-right:12px!important}.mr-xxl-4{margin-right:16px!important}.mr-xxl-5{margin-right:20px!important}.mr-xxl-6{margin-right:24px!important}.mr-xxl-7{margin-right:28px!important}.mr-xxl-8{margin-right:32px!important}.mr-xxl-9{margin-right:36px!important}.mr-xxl-10{margin-right:40px!important}.mr-xxl-11{margin-right:44px!important}.mr-xxl-12{margin-right:48px!important}.mr-xxl-13{margin-right:52px!important}.mr-xxl-14{margin-right:56px!important}.mr-xxl-15{margin-right:60px!important}.mr-xxl-16{margin-right:64px!important}.mr-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:4px!important}.mb-xxl-2{margin-bottom:8px!important}.mb-xxl-3{margin-bottom:12px!important}.mb-xxl-4{margin-bottom:16px!important}.mb-xxl-5{margin-bottom:20px!important}.mb-xxl-6{margin-bottom:24px!important}.mb-xxl-7{margin-bottom:28px!important}.mb-xxl-8{margin-bottom:32px!important}.mb-xxl-9{margin-bottom:36px!important}.mb-xxl-10{margin-bottom:40px!important}.mb-xxl-11{margin-bottom:44px!important}.mb-xxl-12{margin-bottom:48px!important}.mb-xxl-13{margin-bottom:52px!important}.mb-xxl-14{margin-bottom:56px!important}.mb-xxl-15{margin-bottom:60px!important}.mb-xxl-16{margin-bottom:64px!important}.mb-xxl-auto{margin-bottom:auto!important}.ml-xxl-0{margin-left:0!important}.ml-xxl-1{margin-left:4px!important}.ml-xxl-2{margin-left:8px!important}.ml-xxl-3{margin-left:12px!important}.ml-xxl-4{margin-left:16px!important}.ml-xxl-5{margin-left:20px!important}.ml-xxl-6{margin-left:24px!important}.ml-xxl-7{margin-left:28px!important}.ml-xxl-8{margin-left:32px!important}.ml-xxl-9{margin-left:36px!important}.ml-xxl-10{margin-left:40px!important}.ml-xxl-11{margin-left:44px!important}.ml-xxl-12{margin-left:48px!important}.ml-xxl-13{margin-left:52px!important}.ml-xxl-14{margin-left:56px!important}.ml-xxl-15{margin-left:60px!important}.ml-xxl-16{margin-left:64px!important}.ml-xxl-auto{margin-left:auto!important}.ms-xxl-0{margin-inline-start:0px!important}.ms-xxl-1{margin-inline-start:4px!important}.ms-xxl-2{margin-inline-start:8px!important}.ms-xxl-3{margin-inline-start:12px!important}.ms-xxl-4{margin-inline-start:16px!important}.ms-xxl-5{margin-inline-start:20px!important}.ms-xxl-6{margin-inline-start:24px!important}.ms-xxl-7{margin-inline-start:28px!important}.ms-xxl-8{margin-inline-start:32px!important}.ms-xxl-9{margin-inline-start:36px!important}.ms-xxl-10{margin-inline-start:40px!important}.ms-xxl-11{margin-inline-start:44px!important}.ms-xxl-12{margin-inline-start:48px!important}.ms-xxl-13{margin-inline-start:52px!important}.ms-xxl-14{margin-inline-start:56px!important}.ms-xxl-15{margin-inline-start:60px!important}.ms-xxl-16{margin-inline-start:64px!important}.ms-xxl-auto{margin-inline-start:auto!important}.me-xxl-0{margin-inline-end:0px!important}.me-xxl-1{margin-inline-end:4px!important}.me-xxl-2{margin-inline-end:8px!important}.me-xxl-3{margin-inline-end:12px!important}.me-xxl-4{margin-inline-end:16px!important}.me-xxl-5{margin-inline-end:20px!important}.me-xxl-6{margin-inline-end:24px!important}.me-xxl-7{margin-inline-end:28px!important}.me-xxl-8{margin-inline-end:32px!important}.me-xxl-9{margin-inline-end:36px!important}.me-xxl-10{margin-inline-end:40px!important}.me-xxl-11{margin-inline-end:44px!important}.me-xxl-12{margin-inline-end:48px!important}.me-xxl-13{margin-inline-end:52px!important}.me-xxl-14{margin-inline-end:56px!important}.me-xxl-15{margin-inline-end:60px!important}.me-xxl-16{margin-inline-end:64px!important}.me-xxl-auto{margin-inline-end:auto!important}.ma-xxl-n1{margin:-4px!important}.ma-xxl-n2{margin:-8px!important}.ma-xxl-n3{margin:-12px!important}.ma-xxl-n4{margin:-16px!important}.ma-xxl-n5{margin:-20px!important}.ma-xxl-n6{margin:-24px!important}.ma-xxl-n7{margin:-28px!important}.ma-xxl-n8{margin:-32px!important}.ma-xxl-n9{margin:-36px!important}.ma-xxl-n10{margin:-40px!important}.ma-xxl-n11{margin:-44px!important}.ma-xxl-n12{margin:-48px!important}.ma-xxl-n13{margin:-52px!important}.ma-xxl-n14{margin:-56px!important}.ma-xxl-n15{margin:-60px!important}.ma-xxl-n16{margin:-64px!important}.mx-xxl-n1{margin-right:-4px!important;margin-left:-4px!important}.mx-xxl-n2{margin-right:-8px!important;margin-left:-8px!important}.mx-xxl-n3{margin-right:-12px!important;margin-left:-12px!important}.mx-xxl-n4{margin-right:-16px!important;margin-left:-16px!important}.mx-xxl-n5{margin-right:-20px!important;margin-left:-20px!important}.mx-xxl-n6{margin-right:-24px!important;margin-left:-24px!important}.mx-xxl-n7{margin-right:-28px!important;margin-left:-28px!important}.mx-xxl-n8{margin-right:-32px!important;margin-left:-32px!important}.mx-xxl-n9{margin-right:-36px!important;margin-left:-36px!important}.mx-xxl-n10{margin-right:-40px!important;margin-left:-40px!important}.mx-xxl-n11{margin-right:-44px!important;margin-left:-44px!important}.mx-xxl-n12{margin-right:-48px!important;margin-left:-48px!important}.mx-xxl-n13{margin-right:-52px!important;margin-left:-52px!important}.mx-xxl-n14{margin-right:-56px!important;margin-left:-56px!important}.mx-xxl-n15{margin-right:-60px!important;margin-left:-60px!important}.mx-xxl-n16{margin-right:-64px!important;margin-left:-64px!important}.my-xxl-n1{margin-top:-4px!important;margin-bottom:-4px!important}.my-xxl-n2{margin-top:-8px!important;margin-bottom:-8px!important}.my-xxl-n3{margin-top:-12px!important;margin-bottom:-12px!important}.my-xxl-n4{margin-top:-16px!important;margin-bottom:-16px!important}.my-xxl-n5{margin-top:-20px!important;margin-bottom:-20px!important}.my-xxl-n6{margin-top:-24px!important;margin-bottom:-24px!important}.my-xxl-n7{margin-top:-28px!important;margin-bottom:-28px!important}.my-xxl-n8{margin-top:-32px!important;margin-bottom:-32px!important}.my-xxl-n9{margin-top:-36px!important;margin-bottom:-36px!important}.my-xxl-n10{margin-top:-40px!important;margin-bottom:-40px!important}.my-xxl-n11{margin-top:-44px!important;margin-bottom:-44px!important}.my-xxl-n12{margin-top:-48px!important;margin-bottom:-48px!important}.my-xxl-n13{margin-top:-52px!important;margin-bottom:-52px!important}.my-xxl-n14{margin-top:-56px!important;margin-bottom:-56px!important}.my-xxl-n15{margin-top:-60px!important;margin-bottom:-60px!important}.my-xxl-n16{margin-top:-64px!important;margin-bottom:-64px!important}.mt-xxl-n1{margin-top:-4px!important}.mt-xxl-n2{margin-top:-8px!important}.mt-xxl-n3{margin-top:-12px!important}.mt-xxl-n4{margin-top:-16px!important}.mt-xxl-n5{margin-top:-20px!important}.mt-xxl-n6{margin-top:-24px!important}.mt-xxl-n7{margin-top:-28px!important}.mt-xxl-n8{margin-top:-32px!important}.mt-xxl-n9{margin-top:-36px!important}.mt-xxl-n10{margin-top:-40px!important}.mt-xxl-n11{margin-top:-44px!important}.mt-xxl-n12{margin-top:-48px!important}.mt-xxl-n13{margin-top:-52px!important}.mt-xxl-n14{margin-top:-56px!important}.mt-xxl-n15{margin-top:-60px!important}.mt-xxl-n16{margin-top:-64px!important}.mr-xxl-n1{margin-right:-4px!important}.mr-xxl-n2{margin-right:-8px!important}.mr-xxl-n3{margin-right:-12px!important}.mr-xxl-n4{margin-right:-16px!important}.mr-xxl-n5{margin-right:-20px!important}.mr-xxl-n6{margin-right:-24px!important}.mr-xxl-n7{margin-right:-28px!important}.mr-xxl-n8{margin-right:-32px!important}.mr-xxl-n9{margin-right:-36px!important}.mr-xxl-n10{margin-right:-40px!important}.mr-xxl-n11{margin-right:-44px!important}.mr-xxl-n12{margin-right:-48px!important}.mr-xxl-n13{margin-right:-52px!important}.mr-xxl-n14{margin-right:-56px!important}.mr-xxl-n15{margin-right:-60px!important}.mr-xxl-n16{margin-right:-64px!important}.mb-xxl-n1{margin-bottom:-4px!important}.mb-xxl-n2{margin-bottom:-8px!important}.mb-xxl-n3{margin-bottom:-12px!important}.mb-xxl-n4{margin-bottom:-16px!important}.mb-xxl-n5{margin-bottom:-20px!important}.mb-xxl-n6{margin-bottom:-24px!important}.mb-xxl-n7{margin-bottom:-28px!important}.mb-xxl-n8{margin-bottom:-32px!important}.mb-xxl-n9{margin-bottom:-36px!important}.mb-xxl-n10{margin-bottom:-40px!important}.mb-xxl-n11{margin-bottom:-44px!important}.mb-xxl-n12{margin-bottom:-48px!important}.mb-xxl-n13{margin-bottom:-52px!important}.mb-xxl-n14{margin-bottom:-56px!important}.mb-xxl-n15{margin-bottom:-60px!important}.mb-xxl-n16{margin-bottom:-64px!important}.ml-xxl-n1{margin-left:-4px!important}.ml-xxl-n2{margin-left:-8px!important}.ml-xxl-n3{margin-left:-12px!important}.ml-xxl-n4{margin-left:-16px!important}.ml-xxl-n5{margin-left:-20px!important}.ml-xxl-n6{margin-left:-24px!important}.ml-xxl-n7{margin-left:-28px!important}.ml-xxl-n8{margin-left:-32px!important}.ml-xxl-n9{margin-left:-36px!important}.ml-xxl-n10{margin-left:-40px!important}.ml-xxl-n11{margin-left:-44px!important}.ml-xxl-n12{margin-left:-48px!important}.ml-xxl-n13{margin-left:-52px!important}.ml-xxl-n14{margin-left:-56px!important}.ml-xxl-n15{margin-left:-60px!important}.ml-xxl-n16{margin-left:-64px!important}.ms-xxl-n1{margin-inline-start:-4px!important}.ms-xxl-n2{margin-inline-start:-8px!important}.ms-xxl-n3{margin-inline-start:-12px!important}.ms-xxl-n4{margin-inline-start:-16px!important}.ms-xxl-n5{margin-inline-start:-20px!important}.ms-xxl-n6{margin-inline-start:-24px!important}.ms-xxl-n7{margin-inline-start:-28px!important}.ms-xxl-n8{margin-inline-start:-32px!important}.ms-xxl-n9{margin-inline-start:-36px!important}.ms-xxl-n10{margin-inline-start:-40px!important}.ms-xxl-n11{margin-inline-start:-44px!important}.ms-xxl-n12{margin-inline-start:-48px!important}.ms-xxl-n13{margin-inline-start:-52px!important}.ms-xxl-n14{margin-inline-start:-56px!important}.ms-xxl-n15{margin-inline-start:-60px!important}.ms-xxl-n16{margin-inline-start:-64px!important}.me-xxl-n1{margin-inline-end:-4px!important}.me-xxl-n2{margin-inline-end:-8px!important}.me-xxl-n3{margin-inline-end:-12px!important}.me-xxl-n4{margin-inline-end:-16px!important}.me-xxl-n5{margin-inline-end:-20px!important}.me-xxl-n6{margin-inline-end:-24px!important}.me-xxl-n7{margin-inline-end:-28px!important}.me-xxl-n8{margin-inline-end:-32px!important}.me-xxl-n9{margin-inline-end:-36px!important}.me-xxl-n10{margin-inline-end:-40px!important}.me-xxl-n11{margin-inline-end:-44px!important}.me-xxl-n12{margin-inline-end:-48px!important}.me-xxl-n13{margin-inline-end:-52px!important}.me-xxl-n14{margin-inline-end:-56px!important}.me-xxl-n15{margin-inline-end:-60px!important}.me-xxl-n16{margin-inline-end:-64px!important}.pa-xxl-0{padding:0!important}.pa-xxl-1{padding:4px!important}.pa-xxl-2{padding:8px!important}.pa-xxl-3{padding:12px!important}.pa-xxl-4{padding:16px!important}.pa-xxl-5{padding:20px!important}.pa-xxl-6{padding:24px!important}.pa-xxl-7{padding:28px!important}.pa-xxl-8{padding:32px!important}.pa-xxl-9{padding:36px!important}.pa-xxl-10{padding:40px!important}.pa-xxl-11{padding:44px!important}.pa-xxl-12{padding:48px!important}.pa-xxl-13{padding:52px!important}.pa-xxl-14{padding:56px!important}.pa-xxl-15{padding:60px!important}.pa-xxl-16{padding:64px!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:4px!important;padding-left:4px!important}.px-xxl-2{padding-right:8px!important;padding-left:8px!important}.px-xxl-3{padding-right:12px!important;padding-left:12px!important}.px-xxl-4{padding-right:16px!important;padding-left:16px!important}.px-xxl-5{padding-right:20px!important;padding-left:20px!important}.px-xxl-6{padding-right:24px!important;padding-left:24px!important}.px-xxl-7{padding-right:28px!important;padding-left:28px!important}.px-xxl-8{padding-right:32px!important;padding-left:32px!important}.px-xxl-9{padding-right:36px!important;padding-left:36px!important}.px-xxl-10{padding-right:40px!important;padding-left:40px!important}.px-xxl-11{padding-right:44px!important;padding-left:44px!important}.px-xxl-12{padding-right:48px!important;padding-left:48px!important}.px-xxl-13{padding-right:52px!important;padding-left:52px!important}.px-xxl-14{padding-right:56px!important;padding-left:56px!important}.px-xxl-15{padding-right:60px!important;padding-left:60px!important}.px-xxl-16{padding-right:64px!important;padding-left:64px!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:4px!important;padding-bottom:4px!important}.py-xxl-2{padding-top:8px!important;padding-bottom:8px!important}.py-xxl-3{padding-top:12px!important;padding-bottom:12px!important}.py-xxl-4{padding-top:16px!important;padding-bottom:16px!important}.py-xxl-5{padding-top:20px!important;padding-bottom:20px!important}.py-xxl-6{padding-top:24px!important;padding-bottom:24px!important}.py-xxl-7{padding-top:28px!important;padding-bottom:28px!important}.py-xxl-8{padding-top:32px!important;padding-bottom:32px!important}.py-xxl-9{padding-top:36px!important;padding-bottom:36px!important}.py-xxl-10{padding-top:40px!important;padding-bottom:40px!important}.py-xxl-11{padding-top:44px!important;padding-bottom:44px!important}.py-xxl-12{padding-top:48px!important;padding-bottom:48px!important}.py-xxl-13{padding-top:52px!important;padding-bottom:52px!important}.py-xxl-14{padding-top:56px!important;padding-bottom:56px!important}.py-xxl-15{padding-top:60px!important;padding-bottom:60px!important}.py-xxl-16{padding-top:64px!important;padding-bottom:64px!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:4px!important}.pt-xxl-2{padding-top:8px!important}.pt-xxl-3{padding-top:12px!important}.pt-xxl-4{padding-top:16px!important}.pt-xxl-5{padding-top:20px!important}.pt-xxl-6{padding-top:24px!important}.pt-xxl-7{padding-top:28px!important}.pt-xxl-8{padding-top:32px!important}.pt-xxl-9{padding-top:36px!important}.pt-xxl-10{padding-top:40px!important}.pt-xxl-11{padding-top:44px!important}.pt-xxl-12{padding-top:48px!important}.pt-xxl-13{padding-top:52px!important}.pt-xxl-14{padding-top:56px!important}.pt-xxl-15{padding-top:60px!important}.pt-xxl-16{padding-top:64px!important}.pr-xxl-0{padding-right:0!important}.pr-xxl-1{padding-right:4px!important}.pr-xxl-2{padding-right:8px!important}.pr-xxl-3{padding-right:12px!important}.pr-xxl-4{padding-right:16px!important}.pr-xxl-5{padding-right:20px!important}.pr-xxl-6{padding-right:24px!important}.pr-xxl-7{padding-right:28px!important}.pr-xxl-8{padding-right:32px!important}.pr-xxl-9{padding-right:36px!important}.pr-xxl-10{padding-right:40px!important}.pr-xxl-11{padding-right:44px!important}.pr-xxl-12{padding-right:48px!important}.pr-xxl-13{padding-right:52px!important}.pr-xxl-14{padding-right:56px!important}.pr-xxl-15{padding-right:60px!important}.pr-xxl-16{padding-right:64px!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:4px!important}.pb-xxl-2{padding-bottom:8px!important}.pb-xxl-3{padding-bottom:12px!important}.pb-xxl-4{padding-bottom:16px!important}.pb-xxl-5{padding-bottom:20px!important}.pb-xxl-6{padding-bottom:24px!important}.pb-xxl-7{padding-bottom:28px!important}.pb-xxl-8{padding-bottom:32px!important}.pb-xxl-9{padding-bottom:36px!important}.pb-xxl-10{padding-bottom:40px!important}.pb-xxl-11{padding-bottom:44px!important}.pb-xxl-12{padding-bottom:48px!important}.pb-xxl-13{padding-bottom:52px!important}.pb-xxl-14{padding-bottom:56px!important}.pb-xxl-15{padding-bottom:60px!important}.pb-xxl-16{padding-bottom:64px!important}.pl-xxl-0{padding-left:0!important}.pl-xxl-1{padding-left:4px!important}.pl-xxl-2{padding-left:8px!important}.pl-xxl-3{padding-left:12px!important}.pl-xxl-4{padding-left:16px!important}.pl-xxl-5{padding-left:20px!important}.pl-xxl-6{padding-left:24px!important}.pl-xxl-7{padding-left:28px!important}.pl-xxl-8{padding-left:32px!important}.pl-xxl-9{padding-left:36px!important}.pl-xxl-10{padding-left:40px!important}.pl-xxl-11{padding-left:44px!important}.pl-xxl-12{padding-left:48px!important}.pl-xxl-13{padding-left:52px!important}.pl-xxl-14{padding-left:56px!important}.pl-xxl-15{padding-left:60px!important}.pl-xxl-16{padding-left:64px!important}.ps-xxl-0{padding-inline-start:0px!important}.ps-xxl-1{padding-inline-start:4px!important}.ps-xxl-2{padding-inline-start:8px!important}.ps-xxl-3{padding-inline-start:12px!important}.ps-xxl-4{padding-inline-start:16px!important}.ps-xxl-5{padding-inline-start:20px!important}.ps-xxl-6{padding-inline-start:24px!important}.ps-xxl-7{padding-inline-start:28px!important}.ps-xxl-8{padding-inline-start:32px!important}.ps-xxl-9{padding-inline-start:36px!important}.ps-xxl-10{padding-inline-start:40px!important}.ps-xxl-11{padding-inline-start:44px!important}.ps-xxl-12{padding-inline-start:48px!important}.ps-xxl-13{padding-inline-start:52px!important}.ps-xxl-14{padding-inline-start:56px!important}.ps-xxl-15{padding-inline-start:60px!important}.ps-xxl-16{padding-inline-start:64px!important}.pe-xxl-0{padding-inline-end:0px!important}.pe-xxl-1{padding-inline-end:4px!important}.pe-xxl-2{padding-inline-end:8px!important}.pe-xxl-3{padding-inline-end:12px!important}.pe-xxl-4{padding-inline-end:16px!important}.pe-xxl-5{padding-inline-end:20px!important}.pe-xxl-6{padding-inline-end:24px!important}.pe-xxl-7{padding-inline-end:28px!important}.pe-xxl-8{padding-inline-end:32px!important}.pe-xxl-9{padding-inline-end:36px!important}.pe-xxl-10{padding-inline-end:40px!important}.pe-xxl-11{padding-inline-end:44px!important}.pe-xxl-12{padding-inline-end:48px!important}.pe-xxl-13{padding-inline-end:52px!important}.pe-xxl-14{padding-inline-end:56px!important}.pe-xxl-15{padding-inline-end:60px!important}.pe-xxl-16{padding-inline-end:64px!important}.text-xxl-left{text-align:left!important}.text-xxl-right{text-align:right!important}.text-xxl-center{text-align:center!important}.text-xxl-justify{text-align:justify!important}.text-xxl-start{text-align:start!important}.text-xxl-end{text-align:end!important}.text-xxl-h1{font-size:6rem!important;font-weight:300;line-height:1;letter-spacing:-.015625em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h2{font-size:3.75rem!important;font-weight:300;line-height:1;letter-spacing:-.0083333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h3{font-size:3rem!important;font-weight:400;line-height:1.05;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h4{font-size:2.125rem!important;font-weight:400;line-height:1.175;letter-spacing:.0073529412em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h5{font-size:1.5rem!important;font-weight:400;line-height:1.333;letter-spacing:normal!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-h6{font-size:1.25rem!important;font-weight:500;line-height:1.6;letter-spacing:.0125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75;letter-spacing:.009375em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.6;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-body-1{font-size:1rem!important;font-weight:400;line-height:1.5;letter-spacing:.03125em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-body-2{font-size:.875rem!important;font-weight:400;line-height:1.425;letter-spacing:.0178571429em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-button{font-size:.875rem!important;font-weight:500;line-height:2.6;letter-spacing:.0892857143em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.text-xxl-caption{font-size:.75rem!important;font-weight:400;line-height:1.667;letter-spacing:.0333333333em!important;font-family:Roboto,sans-serif;text-transform:none!important}.text-xxl-overline{font-size:.75rem!important;font-weight:500;line-height:2.667;letter-spacing:.1666666667em!important;font-family:Roboto,sans-serif;text-transform:uppercase!important}.h-xxl-auto{height:auto!important}.h-xxl-screen{height:100vh!important}.h-xxl-0{height:0!important}.h-xxl-25{height:25%!important}.h-xxl-50{height:50%!important}.h-xxl-75{height:75%!important}.h-xxl-100{height:100%!important}.w-xxl-auto{width:auto!important}.w-xxl-0{width:0!important}.w-xxl-25{width:25%!important}.w-xxl-33{width:33%!important}.w-xxl-50{width:50%!important}.w-xxl-66{width:66%!important}.w-xxl-75{width:75%!important}.w-xxl-100{width:100%!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!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}.float-print-none{float:none!important}.float-print-left{float:left!important}.float-print-right{float:right!important}.v-locale--is-rtl .float-print-end{float:left!important}.v-locale--is-rtl .float-print-start,.v-locale--is-ltr .float-print-end{float:right!important}.v-locale--is-ltr .float-print-start{float:left!important}}@font-face{font-family:Material Design Icons;src:url(/assets/materialdesignicons-webfont.CSr8KVlo.eot?v=7.4.47);src:url(/assets/materialdesignicons-webfont.CSr8KVlo.eot?#iefix&v=7.4.47) format("embedded-opentype"),url(/assets/materialdesignicons-webfont.Dp5v-WZN.woff2?v=7.4.47) format("woff2"),url(/assets/materialdesignicons-webfont.PXm3-2wK.woff?v=7.4.47) format("woff"),url(/assets/materialdesignicons-webfont.B7mPwVP_.ttf?v=7.4.47) format("truetype");font-weight:400;font-style:normal}.mdi:before,.mdi-set{display:inline-block;font: 24px/1 Material Design Icons;font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-ab-testing:before{content:"󰇉"}.mdi-abacus:before{content:"󱛠"}.mdi-abjad-arabic:before{content:"󱌨"}.mdi-abjad-hebrew:before{content:"󱌩"}.mdi-abugida-devanagari:before{content:"󱌪"}.mdi-abugida-thai:before{content:"󱌫"}.mdi-access-point:before{content:"󰀃"}.mdi-access-point-check:before{content:"󱔸"}.mdi-access-point-minus:before{content:"󱔹"}.mdi-access-point-network:before{content:"󰀂"}.mdi-access-point-network-off:before{content:"󰯡"}.mdi-access-point-off:before{content:"󱔑"}.mdi-access-point-plus:before{content:"󱔺"}.mdi-access-point-remove:before{content:"󱔻"}.mdi-account:before{content:"󰀄"}.mdi-account-alert:before{content:"󰀅"}.mdi-account-alert-outline:before{content:"󰭐"}.mdi-account-arrow-down:before{content:"󱡨"}.mdi-account-arrow-down-outline:before{content:"󱡩"}.mdi-account-arrow-left:before{content:"󰭑"}.mdi-account-arrow-left-outline:before{content:"󰭒"}.mdi-account-arrow-right:before{content:"󰭓"}.mdi-account-arrow-right-outline:before{content:"󰭔"}.mdi-account-arrow-up:before{content:"󱡧"}.mdi-account-arrow-up-outline:before{content:"󱡪"}.mdi-account-badge:before{content:"󱬊"}.mdi-account-badge-outline:before{content:"󱬋"}.mdi-account-box:before{content:"󰀆"}.mdi-account-box-edit-outline:before{content:"󱳈"}.mdi-account-box-minus-outline:before{content:"󱳉"}.mdi-account-box-multiple:before{content:"󰤴"}.mdi-account-box-multiple-outline:before{content:"󱀊"}.mdi-account-box-outline:before{content:"󰀇"}.mdi-account-box-plus-outline:before{content:"󱳊"}.mdi-account-cancel:before{content:"󱋟"}.mdi-account-cancel-outline:before{content:"󱋠"}.mdi-account-card:before{content:"󱮤"}.mdi-account-card-outline:before{content:"󱮥"}.mdi-account-cash:before{content:"󱂗"}.mdi-account-cash-outline:before{content:"󱂘"}.mdi-account-check:before{content:"󰀈"}.mdi-account-check-outline:before{content:"󰯢"}.mdi-account-child:before{content:"󰪉"}.mdi-account-child-circle:before{content:"󰪊"}.mdi-account-child-outline:before{content:"󱃈"}.mdi-account-circle:before{content:"󰀉"}.mdi-account-circle-outline:before{content:"󰭕"}.mdi-account-clock:before{content:"󰭖"}.mdi-account-clock-outline:before{content:"󰭗"}.mdi-account-cog:before{content:"󱍰"}.mdi-account-cog-outline:before{content:"󱍱"}.mdi-account-convert:before{content:"󰀊"}.mdi-account-convert-outline:before{content:"󱌁"}.mdi-account-cowboy-hat:before{content:"󰺛"}.mdi-account-cowboy-hat-outline:before{content:"󱟳"}.mdi-account-credit-card:before{content:"󱮦"}.mdi-account-credit-card-outline:before{content:"󱮧"}.mdi-account-details:before{content:"󰘱"}.mdi-account-details-outline:before{content:"󱍲"}.mdi-account-edit:before{content:"󰚼"}.mdi-account-edit-outline:before{content:"󰿻"}.mdi-account-eye:before{content:"󰐠"}.mdi-account-eye-outline:before{content:"󱉻"}.mdi-account-file:before{content:"󱲧"}.mdi-account-file-outline:before{content:"󱲨"}.mdi-account-file-text:before{content:"󱲩"}.mdi-account-file-text-outline:before{content:"󱲪"}.mdi-account-filter:before{content:"󰤶"}.mdi-account-filter-outline:before{content:"󰾝"}.mdi-account-group:before{content:"󰡉"}.mdi-account-group-outline:before{content:"󰭘"}.mdi-account-hard-hat:before{content:"󰖵"}.mdi-account-hard-hat-outline:before{content:"󱨟"}.mdi-account-heart:before{content:"󰢙"}.mdi-account-heart-outline:before{content:"󰯣"}.mdi-account-injury:before{content:"󱠕"}.mdi-account-injury-outline:before{content:"󱠖"}.mdi-account-key:before{content:"󰀋"}.mdi-account-key-outline:before{content:"󰯤"}.mdi-account-lock:before{content:"󱅞"}.mdi-account-lock-open:before{content:"󱥠"}.mdi-account-lock-open-outline:before{content:"󱥡"}.mdi-account-lock-outline:before{content:"󱅟"}.mdi-account-minus:before{content:"󰀍"}.mdi-account-minus-outline:before{content:"󰫬"}.mdi-account-multiple:before{content:"󰀎"}.mdi-account-multiple-check:before{content:"󰣅"}.mdi-account-multiple-check-outline:before{content:"󱇾"}.mdi-account-multiple-minus:before{content:"󰗓"}.mdi-account-multiple-minus-outline:before{content:"󰯥"}.mdi-account-multiple-outline:before{content:"󰀏"}.mdi-account-multiple-plus:before{content:"󰀐"}.mdi-account-multiple-plus-outline:before{content:"󰠀"}.mdi-account-multiple-remove:before{content:"󱈊"}.mdi-account-multiple-remove-outline:before{content:"󱈋"}.mdi-account-music:before{content:"󰠃"}.mdi-account-music-outline:before{content:"󰳩"}.mdi-account-network:before{content:"󰀑"}.mdi-account-network-off:before{content:"󱫱"}.mdi-account-network-off-outline:before{content:"󱫲"}.mdi-account-network-outline:before{content:"󰯦"}.mdi-account-off:before{content:"󰀒"}.mdi-account-off-outline:before{content:"󰯧"}.mdi-account-outline:before{content:"󰀓"}.mdi-account-plus:before{content:"󰀔"}.mdi-account-plus-outline:before{content:"󰠁"}.mdi-account-question:before{content:"󰭙"}.mdi-account-question-outline:before{content:"󰭚"}.mdi-account-reactivate:before{content:"󱔫"}.mdi-account-reactivate-outline:before{content:"󱔬"}.mdi-account-remove:before{content:"󰀕"}.mdi-account-remove-outline:before{content:"󰫭"}.mdi-account-school:before{content:"󱨠"}.mdi-account-school-outline:before{content:"󱨡"}.mdi-account-search:before{content:"󰀖"}.mdi-account-search-outline:before{content:"󰤵"}.mdi-account-settings:before{content:"󰘰"}.mdi-account-settings-outline:before{content:"󱃉"}.mdi-account-star:before{content:"󰀗"}.mdi-account-star-outline:before{content:"󰯨"}.mdi-account-supervisor:before{content:"󰪋"}.mdi-account-supervisor-circle:before{content:"󰪌"}.mdi-account-supervisor-circle-outline:before{content:"󱓬"}.mdi-account-supervisor-outline:before{content:"󱄭"}.mdi-account-switch:before{content:"󰀙"}.mdi-account-switch-outline:before{content:"󰓋"}.mdi-account-sync:before{content:"󱤛"}.mdi-account-sync-outline:before{content:"󱤜"}.mdi-account-tag:before{content:"󱰛"}.mdi-account-tag-outline:before{content:"󱰜"}.mdi-account-tie:before{content:"󰳣"}.mdi-account-tie-hat:before{content:"󱢘"}.mdi-account-tie-hat-outline:before{content:"󱢙"}.mdi-account-tie-outline:before{content:"󱃊"}.mdi-account-tie-voice:before{content:"󱌈"}.mdi-account-tie-voice-off:before{content:"󱌊"}.mdi-account-tie-voice-off-outline:before{content:"󱌋"}.mdi-account-tie-voice-outline:before{content:"󱌉"}.mdi-account-tie-woman:before{content:"󱪌"}.mdi-account-voice:before{content:"󰗋"}.mdi-account-voice-off:before{content:"󰻔"}.mdi-account-wrench:before{content:"󱢚"}.mdi-account-wrench-outline:before{content:"󱢛"}.mdi-adjust:before{content:"󰀚"}.mdi-advertisements:before{content:"󱤪"}.mdi-advertisements-off:before{content:"󱤫"}.mdi-air-conditioner:before{content:"󰀛"}.mdi-air-filter:before{content:"󰵃"}.mdi-air-horn:before{content:"󰶬"}.mdi-air-humidifier:before{content:"󱂙"}.mdi-air-humidifier-off:before{content:"󱑦"}.mdi-air-purifier:before{content:"󰵄"}.mdi-air-purifier-off:before{content:"󱭗"}.mdi-airbag:before{content:"󰯩"}.mdi-airballoon:before{content:"󰀜"}.mdi-airballoon-outline:before{content:"󱀋"}.mdi-airplane:before{content:"󰀝"}.mdi-airplane-alert:before{content:"󱡺"}.mdi-airplane-check:before{content:"󱡻"}.mdi-airplane-clock:before{content:"󱡼"}.mdi-airplane-cog:before{content:"󱡽"}.mdi-airplane-edit:before{content:"󱡾"}.mdi-airplane-landing:before{content:"󰗔"}.mdi-airplane-marker:before{content:"󱡿"}.mdi-airplane-minus:before{content:"󱢀"}.mdi-airplane-off:before{content:"󰀞"}.mdi-airplane-plus:before{content:"󱢁"}.mdi-airplane-remove:before{content:"󱢂"}.mdi-airplane-search:before{content:"󱢃"}.mdi-airplane-settings:before{content:"󱢄"}.mdi-airplane-takeoff:before{content:"󰗕"}.mdi-airport:before{content:"󰡋"}.mdi-alarm:before{content:"󰀠"}.mdi-alarm-bell:before{content:"󰞎"}.mdi-alarm-check:before{content:"󰀡"}.mdi-alarm-light:before{content:"󰞏"}.mdi-alarm-light-off:before{content:"󱜞"}.mdi-alarm-light-off-outline:before{content:"󱜟"}.mdi-alarm-light-outline:before{content:"󰯪"}.mdi-alarm-multiple:before{content:"󰀢"}.mdi-alarm-note:before{content:"󰹱"}.mdi-alarm-note-off:before{content:"󰹲"}.mdi-alarm-off:before{content:"󰀣"}.mdi-alarm-panel:before{content:"󱗄"}.mdi-alarm-panel-outline:before{content:"󱗅"}.mdi-alarm-plus:before{content:"󰀤"}.mdi-alarm-snooze:before{content:"󰚎"}.mdi-album:before{content:"󰀥"}.mdi-alert:before{content:"󰀦"}.mdi-alert-box:before{content:"󰀧"}.mdi-alert-box-outline:before{content:"󰳤"}.mdi-alert-circle:before{content:"󰀨"}.mdi-alert-circle-check:before{content:"󱇭"}.mdi-alert-circle-check-outline:before{content:"󱇮"}.mdi-alert-circle-outline:before{content:"󰗖"}.mdi-alert-decagram:before{content:"󰚽"}.mdi-alert-decagram-outline:before{content:"󰳥"}.mdi-alert-minus:before{content:"󱒻"}.mdi-alert-minus-outline:before{content:"󱒾"}.mdi-alert-octagon:before{content:"󰀩"}.mdi-alert-octagon-outline:before{content:"󰳦"}.mdi-alert-octagram:before{content:"󰝧"}.mdi-alert-octagram-outline:before{content:"󰳧"}.mdi-alert-outline:before{content:"󰀪"}.mdi-alert-plus:before{content:"󱒺"}.mdi-alert-plus-outline:before{content:"󱒽"}.mdi-alert-remove:before{content:"󱒼"}.mdi-alert-remove-outline:before{content:"󱒿"}.mdi-alert-rhombus:before{content:"󱇎"}.mdi-alert-rhombus-outline:before{content:"󱇏"}.mdi-alien:before{content:"󰢚"}.mdi-alien-outline:before{content:"󱃋"}.mdi-align-horizontal-center:before{content:"󱇃"}.mdi-align-horizontal-distribute:before{content:"󱥢"}.mdi-align-horizontal-left:before{content:"󱇂"}.mdi-align-horizontal-right:before{content:"󱇄"}.mdi-align-vertical-bottom:before{content:"󱇅"}.mdi-align-vertical-center:before{content:"󱇆"}.mdi-align-vertical-distribute:before{content:"󱥣"}.mdi-align-vertical-top:before{content:"󱇇"}.mdi-all-inclusive:before{content:"󰚾"}.mdi-all-inclusive-box:before{content:"󱢍"}.mdi-all-inclusive-box-outline:before{content:"󱢎"}.mdi-allergy:before{content:"󱉘"}.mdi-alpha:before{content:"󰀫"}.mdi-alpha-a:before{content:"󰫮"}.mdi-alpha-a-box:before{content:"󰬈"}.mdi-alpha-a-box-outline:before{content:"󰯫"}.mdi-alpha-a-circle:before{content:"󰯬"}.mdi-alpha-a-circle-outline:before{content:"󰯭"}.mdi-alpha-b:before{content:"󰫯"}.mdi-alpha-b-box:before{content:"󰬉"}.mdi-alpha-b-box-outline:before{content:"󰯮"}.mdi-alpha-b-circle:before{content:"󰯯"}.mdi-alpha-b-circle-outline:before{content:"󰯰"}.mdi-alpha-c:before{content:"󰫰"}.mdi-alpha-c-box:before{content:"󰬊"}.mdi-alpha-c-box-outline:before{content:"󰯱"}.mdi-alpha-c-circle:before{content:"󰯲"}.mdi-alpha-c-circle-outline:before{content:"󰯳"}.mdi-alpha-d:before{content:"󰫱"}.mdi-alpha-d-box:before{content:"󰬋"}.mdi-alpha-d-box-outline:before{content:"󰯴"}.mdi-alpha-d-circle:before{content:"󰯵"}.mdi-alpha-d-circle-outline:before{content:"󰯶"}.mdi-alpha-e:before{content:"󰫲"}.mdi-alpha-e-box:before{content:"󰬌"}.mdi-alpha-e-box-outline:before{content:"󰯷"}.mdi-alpha-e-circle:before{content:"󰯸"}.mdi-alpha-e-circle-outline:before{content:"󰯹"}.mdi-alpha-f:before{content:"󰫳"}.mdi-alpha-f-box:before{content:"󰬍"}.mdi-alpha-f-box-outline:before{content:"󰯺"}.mdi-alpha-f-circle:before{content:"󰯻"}.mdi-alpha-f-circle-outline:before{content:"󰯼"}.mdi-alpha-g:before{content:"󰫴"}.mdi-alpha-g-box:before{content:"󰬎"}.mdi-alpha-g-box-outline:before{content:"󰯽"}.mdi-alpha-g-circle:before{content:"󰯾"}.mdi-alpha-g-circle-outline:before{content:"󰯿"}.mdi-alpha-h:before{content:"󰫵"}.mdi-alpha-h-box:before{content:"󰬏"}.mdi-alpha-h-box-outline:before{content:"󰰀"}.mdi-alpha-h-circle:before{content:"󰰁"}.mdi-alpha-h-circle-outline:before{content:"󰰂"}.mdi-alpha-i:before{content:"󰫶"}.mdi-alpha-i-box:before{content:"󰬐"}.mdi-alpha-i-box-outline:before{content:"󰰃"}.mdi-alpha-i-circle:before{content:"󰰄"}.mdi-alpha-i-circle-outline:before{content:"󰰅"}.mdi-alpha-j:before{content:"󰫷"}.mdi-alpha-j-box:before{content:"󰬑"}.mdi-alpha-j-box-outline:before{content:"󰰆"}.mdi-alpha-j-circle:before{content:"󰰇"}.mdi-alpha-j-circle-outline:before{content:"󰰈"}.mdi-alpha-k:before{content:"󰫸"}.mdi-alpha-k-box:before{content:"󰬒"}.mdi-alpha-k-box-outline:before{content:"󰰉"}.mdi-alpha-k-circle:before{content:"󰰊"}.mdi-alpha-k-circle-outline:before{content:"󰰋"}.mdi-alpha-l:before{content:"󰫹"}.mdi-alpha-l-box:before{content:"󰬓"}.mdi-alpha-l-box-outline:before{content:"󰰌"}.mdi-alpha-l-circle:before{content:"󰰍"}.mdi-alpha-l-circle-outline:before{content:"󰰎"}.mdi-alpha-m:before{content:"󰫺"}.mdi-alpha-m-box:before{content:"󰬔"}.mdi-alpha-m-box-outline:before{content:"󰰏"}.mdi-alpha-m-circle:before{content:"󰰐"}.mdi-alpha-m-circle-outline:before{content:"󰰑"}.mdi-alpha-n:before{content:"󰫻"}.mdi-alpha-n-box:before{content:"󰬕"}.mdi-alpha-n-box-outline:before{content:"󰰒"}.mdi-alpha-n-circle:before{content:"󰰓"}.mdi-alpha-n-circle-outline:before{content:"󰰔"}.mdi-alpha-o:before{content:"󰫼"}.mdi-alpha-o-box:before{content:"󰬖"}.mdi-alpha-o-box-outline:before{content:"󰰕"}.mdi-alpha-o-circle:before{content:"󰰖"}.mdi-alpha-o-circle-outline:before{content:"󰰗"}.mdi-alpha-p:before{content:"󰫽"}.mdi-alpha-p-box:before{content:"󰬗"}.mdi-alpha-p-box-outline:before{content:"󰰘"}.mdi-alpha-p-circle:before{content:"󰰙"}.mdi-alpha-p-circle-outline:before{content:"󰰚"}.mdi-alpha-q:before{content:"󰫾"}.mdi-alpha-q-box:before{content:"󰬘"}.mdi-alpha-q-box-outline:before{content:"󰰛"}.mdi-alpha-q-circle:before{content:"󰰜"}.mdi-alpha-q-circle-outline:before{content:"󰰝"}.mdi-alpha-r:before{content:"󰫿"}.mdi-alpha-r-box:before{content:"󰬙"}.mdi-alpha-r-box-outline:before{content:"󰰞"}.mdi-alpha-r-circle:before{content:"󰰟"}.mdi-alpha-r-circle-outline:before{content:"󰰠"}.mdi-alpha-s:before{content:"󰬀"}.mdi-alpha-s-box:before{content:"󰬚"}.mdi-alpha-s-box-outline:before{content:"󰰡"}.mdi-alpha-s-circle:before{content:"󰰢"}.mdi-alpha-s-circle-outline:before{content:"󰰣"}.mdi-alpha-t:before{content:"󰬁"}.mdi-alpha-t-box:before{content:"󰬛"}.mdi-alpha-t-box-outline:before{content:"󰰤"}.mdi-alpha-t-circle:before{content:"󰰥"}.mdi-alpha-t-circle-outline:before{content:"󰰦"}.mdi-alpha-u:before{content:"󰬂"}.mdi-alpha-u-box:before{content:"󰬜"}.mdi-alpha-u-box-outline:before{content:"󰰧"}.mdi-alpha-u-circle:before{content:"󰰨"}.mdi-alpha-u-circle-outline:before{content:"󰰩"}.mdi-alpha-v:before{content:"󰬃"}.mdi-alpha-v-box:before{content:"󰬝"}.mdi-alpha-v-box-outline:before{content:"󰰪"}.mdi-alpha-v-circle:before{content:"󰰫"}.mdi-alpha-v-circle-outline:before{content:"󰰬"}.mdi-alpha-w:before{content:"󰬄"}.mdi-alpha-w-box:before{content:"󰬞"}.mdi-alpha-w-box-outline:before{content:"󰰭"}.mdi-alpha-w-circle:before{content:"󰰮"}.mdi-alpha-w-circle-outline:before{content:"󰰯"}.mdi-alpha-x:before{content:"󰬅"}.mdi-alpha-x-box:before{content:"󰬟"}.mdi-alpha-x-box-outline:before{content:"󰰰"}.mdi-alpha-x-circle:before{content:"󰰱"}.mdi-alpha-x-circle-outline:before{content:"󰰲"}.mdi-alpha-y:before{content:"󰬆"}.mdi-alpha-y-box:before{content:"󰬠"}.mdi-alpha-y-box-outline:before{content:"󰰳"}.mdi-alpha-y-circle:before{content:"󰰴"}.mdi-alpha-y-circle-outline:before{content:"󰰵"}.mdi-alpha-z:before{content:"󰬇"}.mdi-alpha-z-box:before{content:"󰬡"}.mdi-alpha-z-box-outline:before{content:"󰰶"}.mdi-alpha-z-circle:before{content:"󰰷"}.mdi-alpha-z-circle-outline:before{content:"󰰸"}.mdi-alphabet-aurebesh:before{content:"󱌬"}.mdi-alphabet-cyrillic:before{content:"󱌭"}.mdi-alphabet-greek:before{content:"󱌮"}.mdi-alphabet-latin:before{content:"󱌯"}.mdi-alphabet-piqad:before{content:"󱌰"}.mdi-alphabet-tengwar:before{content:"󱌷"}.mdi-alphabetical:before{content:"󰀬"}.mdi-alphabetical-off:before{content:"󱀌"}.mdi-alphabetical-variant:before{content:"󱀍"}.mdi-alphabetical-variant-off:before{content:"󱀎"}.mdi-altimeter:before{content:"󰗗"}.mdi-ambulance:before{content:"󰀯"}.mdi-ammunition:before{content:"󰳨"}.mdi-ampersand:before{content:"󰪍"}.mdi-amplifier:before{content:"󰀰"}.mdi-amplifier-off:before{content:"󱆵"}.mdi-anchor:before{content:"󰀱"}.mdi-android:before{content:"󰀲"}.mdi-android-studio:before{content:"󰀴"}.mdi-angle-acute:before{content:"󰤷"}.mdi-angle-obtuse:before{content:"󰤸"}.mdi-angle-right:before{content:"󰤹"}.mdi-angular:before{content:"󰚲"}.mdi-angularjs:before{content:"󰚿"}.mdi-animation:before{content:"󰗘"}.mdi-animation-outline:before{content:"󰪏"}.mdi-animation-play:before{content:"󰤺"}.mdi-animation-play-outline:before{content:"󰪐"}.mdi-ansible:before{content:"󱂚"}.mdi-antenna:before{content:"󱄙"}.mdi-anvil:before{content:"󰢛"}.mdi-apache-kafka:before{content:"󱀏"}.mdi-api:before{content:"󱂛"}.mdi-api-off:before{content:"󱉗"}.mdi-apple:before{content:"󰀵"}.mdi-apple-finder:before{content:"󰀶"}.mdi-apple-icloud:before{content:"󰀸"}.mdi-apple-ios:before{content:"󰀷"}.mdi-apple-keyboard-caps:before{content:"󰘲"}.mdi-apple-keyboard-command:before{content:"󰘳"}.mdi-apple-keyboard-control:before{content:"󰘴"}.mdi-apple-keyboard-option:before{content:"󰘵"}.mdi-apple-keyboard-shift:before{content:"󰘶"}.mdi-apple-safari:before{content:"󰀹"}.mdi-application:before{content:"󰣆"}.mdi-application-array:before{content:"󱃵"}.mdi-application-array-outline:before{content:"󱃶"}.mdi-application-braces:before{content:"󱃷"}.mdi-application-braces-outline:before{content:"󱃸"}.mdi-application-brackets:before{content:"󰲋"}.mdi-application-brackets-outline:before{content:"󰲌"}.mdi-application-cog:before{content:"󰙵"}.mdi-application-cog-outline:before{content:"󱕷"}.mdi-application-edit:before{content:"󰂮"}.mdi-application-edit-outline:before{content:"󰘙"}.mdi-application-export:before{content:"󰶭"}.mdi-application-import:before{content:"󰶮"}.mdi-application-outline:before{content:"󰘔"}.mdi-application-parentheses:before{content:"󱃹"}.mdi-application-parentheses-outline:before{content:"󱃺"}.mdi-application-settings:before{content:"󰭠"}.mdi-application-settings-outline:before{content:"󱕕"}.mdi-application-variable:before{content:"󱃻"}.mdi-application-variable-outline:before{content:"󱃼"}.mdi-approximately-equal:before{content:"󰾞"}.mdi-approximately-equal-box:before{content:"󰾟"}.mdi-apps:before{content:"󰀻"}.mdi-apps-box:before{content:"󰵆"}.mdi-arch:before{content:"󰣇"}.mdi-archive:before{content:"󰀼"}.mdi-archive-alert:before{content:"󱓽"}.mdi-archive-alert-outline:before{content:"󱓾"}.mdi-archive-arrow-down:before{content:"󱉙"}.mdi-archive-arrow-down-outline:before{content:"󱉚"}.mdi-archive-arrow-up:before{content:"󱉛"}.mdi-archive-arrow-up-outline:before{content:"󱉜"}.mdi-archive-cancel:before{content:"󱝋"}.mdi-archive-cancel-outline:before{content:"󱝌"}.mdi-archive-check:before{content:"󱝍"}.mdi-archive-check-outline:before{content:"󱝎"}.mdi-archive-clock:before{content:"󱝏"}.mdi-archive-clock-outline:before{content:"󱝐"}.mdi-archive-cog:before{content:"󱝑"}.mdi-archive-cog-outline:before{content:"󱝒"}.mdi-archive-edit:before{content:"󱝓"}.mdi-archive-edit-outline:before{content:"󱝔"}.mdi-archive-eye:before{content:"󱝕"}.mdi-archive-eye-outline:before{content:"󱝖"}.mdi-archive-lock:before{content:"󱝗"}.mdi-archive-lock-open:before{content:"󱝘"}.mdi-archive-lock-open-outline:before{content:"󱝙"}.mdi-archive-lock-outline:before{content:"󱝚"}.mdi-archive-marker:before{content:"󱝛"}.mdi-archive-marker-outline:before{content:"󱝜"}.mdi-archive-minus:before{content:"󱝝"}.mdi-archive-minus-outline:before{content:"󱝞"}.mdi-archive-music:before{content:"󱝟"}.mdi-archive-music-outline:before{content:"󱝠"}.mdi-archive-off:before{content:"󱝡"}.mdi-archive-off-outline:before{content:"󱝢"}.mdi-archive-outline:before{content:"󱈎"}.mdi-archive-plus:before{content:"󱝣"}.mdi-archive-plus-outline:before{content:"󱝤"}.mdi-archive-refresh:before{content:"󱝥"}.mdi-archive-refresh-outline:before{content:"󱝦"}.mdi-archive-remove:before{content:"󱝧"}.mdi-archive-remove-outline:before{content:"󱝨"}.mdi-archive-search:before{content:"󱝩"}.mdi-archive-search-outline:before{content:"󱝪"}.mdi-archive-settings:before{content:"󱝫"}.mdi-archive-settings-outline:before{content:"󱝬"}.mdi-archive-star:before{content:"󱝭"}.mdi-archive-star-outline:before{content:"󱝮"}.mdi-archive-sync:before{content:"󱝯"}.mdi-archive-sync-outline:before{content:"󱝰"}.mdi-arm-flex:before{content:"󰿗"}.mdi-arm-flex-outline:before{content:"󰿖"}.mdi-arrange-bring-forward:before{content:"󰀽"}.mdi-arrange-bring-to-front:before{content:"󰀾"}.mdi-arrange-send-backward:before{content:"󰀿"}.mdi-arrange-send-to-back:before{content:"󰁀"}.mdi-arrow-all:before{content:"󰁁"}.mdi-arrow-bottom-left:before{content:"󰁂"}.mdi-arrow-bottom-left-bold-box:before{content:"󱥤"}.mdi-arrow-bottom-left-bold-box-outline:before{content:"󱥥"}.mdi-arrow-bottom-left-bold-outline:before{content:"󰦷"}.mdi-arrow-bottom-left-thick:before{content:"󰦸"}.mdi-arrow-bottom-left-thin:before{content:"󱦶"}.mdi-arrow-bottom-left-thin-circle-outline:before{content:"󱖖"}.mdi-arrow-bottom-right:before{content:"󰁃"}.mdi-arrow-bottom-right-bold-box:before{content:"󱥦"}.mdi-arrow-bottom-right-bold-box-outline:before{content:"󱥧"}.mdi-arrow-bottom-right-bold-outline:before{content:"󰦹"}.mdi-arrow-bottom-right-thick:before{content:"󰦺"}.mdi-arrow-bottom-right-thin:before{content:"󱦷"}.mdi-arrow-bottom-right-thin-circle-outline:before{content:"󱖕"}.mdi-arrow-collapse:before{content:"󰘕"}.mdi-arrow-collapse-all:before{content:"󰁄"}.mdi-arrow-collapse-down:before{content:"󰞒"}.mdi-arrow-collapse-horizontal:before{content:"󰡌"}.mdi-arrow-collapse-left:before{content:"󰞓"}.mdi-arrow-collapse-right:before{content:"󰞔"}.mdi-arrow-collapse-up:before{content:"󰞕"}.mdi-arrow-collapse-vertical:before{content:"󰡍"}.mdi-arrow-decision:before{content:"󰦻"}.mdi-arrow-decision-auto:before{content:"󰦼"}.mdi-arrow-decision-auto-outline:before{content:"󰦽"}.mdi-arrow-decision-outline:before{content:"󰦾"}.mdi-arrow-down:before{content:"󰁅"}.mdi-arrow-down-bold:before{content:"󰜮"}.mdi-arrow-down-bold-box:before{content:"󰜯"}.mdi-arrow-down-bold-box-outline:before{content:"󰜰"}.mdi-arrow-down-bold-circle:before{content:"󰁇"}.mdi-arrow-down-bold-circle-outline:before{content:"󰁈"}.mdi-arrow-down-bold-hexagon-outline:before{content:"󰁉"}.mdi-arrow-down-bold-outline:before{content:"󰦿"}.mdi-arrow-down-box:before{content:"󰛀"}.mdi-arrow-down-circle:before{content:"󰳛"}.mdi-arrow-down-circle-outline:before{content:"󰳜"}.mdi-arrow-down-drop-circle:before{content:"󰁊"}.mdi-arrow-down-drop-circle-outline:before{content:"󰁋"}.mdi-arrow-down-left:before{content:"󱞡"}.mdi-arrow-down-left-bold:before{content:"󱞢"}.mdi-arrow-down-right:before{content:"󱞣"}.mdi-arrow-down-right-bold:before{content:"󱞤"}.mdi-arrow-down-thick:before{content:"󰁆"}.mdi-arrow-down-thin:before{content:"󱦳"}.mdi-arrow-down-thin-circle-outline:before{content:"󱖙"}.mdi-arrow-expand:before{content:"󰘖"}.mdi-arrow-expand-all:before{content:"󰁌"}.mdi-arrow-expand-down:before{content:"󰞖"}.mdi-arrow-expand-horizontal:before{content:"󰡎"}.mdi-arrow-expand-left:before{content:"󰞗"}.mdi-arrow-expand-right:before{content:"󰞘"}.mdi-arrow-expand-up:before{content:"󰞙"}.mdi-arrow-expand-vertical:before{content:"󰡏"}.mdi-arrow-horizontal-lock:before{content:"󱅛"}.mdi-arrow-left:before{content:"󰁍"}.mdi-arrow-left-bold:before{content:"󰜱"}.mdi-arrow-left-bold-box:before{content:"󰜲"}.mdi-arrow-left-bold-box-outline:before{content:"󰜳"}.mdi-arrow-left-bold-circle:before{content:"󰁏"}.mdi-arrow-left-bold-circle-outline:before{content:"󰁐"}.mdi-arrow-left-bold-hexagon-outline:before{content:"󰁑"}.mdi-arrow-left-bold-outline:before{content:"󰧀"}.mdi-arrow-left-bottom:before{content:"󱞥"}.mdi-arrow-left-bottom-bold:before{content:"󱞦"}.mdi-arrow-left-box:before{content:"󰛁"}.mdi-arrow-left-circle:before{content:"󰳝"}.mdi-arrow-left-circle-outline:before{content:"󰳞"}.mdi-arrow-left-drop-circle:before{content:"󰁒"}.mdi-arrow-left-drop-circle-outline:before{content:"󰁓"}.mdi-arrow-left-right:before{content:"󰹳"}.mdi-arrow-left-right-bold:before{content:"󰹴"}.mdi-arrow-left-right-bold-outline:before{content:"󰧁"}.mdi-arrow-left-thick:before{content:"󰁎"}.mdi-arrow-left-thin:before{content:"󱦱"}.mdi-arrow-left-thin-circle-outline:before{content:"󱖚"}.mdi-arrow-left-top:before{content:"󱞧"}.mdi-arrow-left-top-bold:before{content:"󱞨"}.mdi-arrow-oscillating:before{content:"󱲑"}.mdi-arrow-oscillating-off:before{content:"󱲒"}.mdi-arrow-projectile:before{content:"󱡀"}.mdi-arrow-projectile-multiple:before{content:"󱠿"}.mdi-arrow-right:before{content:"󰁔"}.mdi-arrow-right-bold:before{content:"󰜴"}.mdi-arrow-right-bold-box:before{content:"󰜵"}.mdi-arrow-right-bold-box-outline:before{content:"󰜶"}.mdi-arrow-right-bold-circle:before{content:"󰁖"}.mdi-arrow-right-bold-circle-outline:before{content:"󰁗"}.mdi-arrow-right-bold-hexagon-outline:before{content:"󰁘"}.mdi-arrow-right-bold-outline:before{content:"󰧂"}.mdi-arrow-right-bottom:before{content:"󱞩"}.mdi-arrow-right-bottom-bold:before{content:"󱞪"}.mdi-arrow-right-box:before{content:"󰛂"}.mdi-arrow-right-circle:before{content:"󰳟"}.mdi-arrow-right-circle-outline:before{content:"󰳠"}.mdi-arrow-right-drop-circle:before{content:"󰁙"}.mdi-arrow-right-drop-circle-outline:before{content:"󰁚"}.mdi-arrow-right-thick:before{content:"󰁕"}.mdi-arrow-right-thin:before{content:"󱦰"}.mdi-arrow-right-thin-circle-outline:before{content:"󱖘"}.mdi-arrow-right-top:before{content:"󱞫"}.mdi-arrow-right-top-bold:before{content:"󱞬"}.mdi-arrow-split-horizontal:before{content:"󰤻"}.mdi-arrow-split-vertical:before{content:"󰤼"}.mdi-arrow-top-left:before{content:"󰁛"}.mdi-arrow-top-left-bold-box:before{content:"󱥨"}.mdi-arrow-top-left-bold-box-outline:before{content:"󱥩"}.mdi-arrow-top-left-bold-outline:before{content:"󰧃"}.mdi-arrow-top-left-bottom-right:before{content:"󰹵"}.mdi-arrow-top-left-bottom-right-bold:before{content:"󰹶"}.mdi-arrow-top-left-thick:before{content:"󰧄"}.mdi-arrow-top-left-thin:before{content:"󱦵"}.mdi-arrow-top-left-thin-circle-outline:before{content:"󱖓"}.mdi-arrow-top-right:before{content:"󰁜"}.mdi-arrow-top-right-bold-box:before{content:"󱥪"}.mdi-arrow-top-right-bold-box-outline:before{content:"󱥫"}.mdi-arrow-top-right-bold-outline:before{content:"󰧅"}.mdi-arrow-top-right-bottom-left:before{content:"󰹷"}.mdi-arrow-top-right-bottom-left-bold:before{content:"󰹸"}.mdi-arrow-top-right-thick:before{content:"󰧆"}.mdi-arrow-top-right-thin:before{content:"󱦴"}.mdi-arrow-top-right-thin-circle-outline:before{content:"󱖔"}.mdi-arrow-u-down-left:before{content:"󱞭"}.mdi-arrow-u-down-left-bold:before{content:"󱞮"}.mdi-arrow-u-down-right:before{content:"󱞯"}.mdi-arrow-u-down-right-bold:before{content:"󱞰"}.mdi-arrow-u-left-bottom:before{content:"󱞱"}.mdi-arrow-u-left-bottom-bold:before{content:"󱞲"}.mdi-arrow-u-left-top:before{content:"󱞳"}.mdi-arrow-u-left-top-bold:before{content:"󱞴"}.mdi-arrow-u-right-bottom:before{content:"󱞵"}.mdi-arrow-u-right-bottom-bold:before{content:"󱞶"}.mdi-arrow-u-right-top:before{content:"󱞷"}.mdi-arrow-u-right-top-bold:before{content:"󱞸"}.mdi-arrow-u-up-left:before{content:"󱞹"}.mdi-arrow-u-up-left-bold:before{content:"󱞺"}.mdi-arrow-u-up-right:before{content:"󱞻"}.mdi-arrow-u-up-right-bold:before{content:"󱞼"}.mdi-arrow-up:before{content:"󰁝"}.mdi-arrow-up-bold:before{content:"󰜷"}.mdi-arrow-up-bold-box:before{content:"󰜸"}.mdi-arrow-up-bold-box-outline:before{content:"󰜹"}.mdi-arrow-up-bold-circle:before{content:"󰁟"}.mdi-arrow-up-bold-circle-outline:before{content:"󰁠"}.mdi-arrow-up-bold-hexagon-outline:before{content:"󰁡"}.mdi-arrow-up-bold-outline:before{content:"󰧇"}.mdi-arrow-up-box:before{content:"󰛃"}.mdi-arrow-up-circle:before{content:"󰳡"}.mdi-arrow-up-circle-outline:before{content:"󰳢"}.mdi-arrow-up-down:before{content:"󰹹"}.mdi-arrow-up-down-bold:before{content:"󰹺"}.mdi-arrow-up-down-bold-outline:before{content:"󰧈"}.mdi-arrow-up-drop-circle:before{content:"󰁢"}.mdi-arrow-up-drop-circle-outline:before{content:"󰁣"}.mdi-arrow-up-left:before{content:"󱞽"}.mdi-arrow-up-left-bold:before{content:"󱞾"}.mdi-arrow-up-right:before{content:"󱞿"}.mdi-arrow-up-right-bold:before{content:"󱟀"}.mdi-arrow-up-thick:before{content:"󰁞"}.mdi-arrow-up-thin:before{content:"󱦲"}.mdi-arrow-up-thin-circle-outline:before{content:"󱖗"}.mdi-arrow-vertical-lock:before{content:"󱅜"}.mdi-artboard:before{content:"󱮚"}.mdi-artstation:before{content:"󰭛"}.mdi-aspect-ratio:before{content:"󰨤"}.mdi-assistant:before{content:"󰁤"}.mdi-asterisk:before{content:"󰛄"}.mdi-asterisk-circle-outline:before{content:"󱨧"}.mdi-at:before{content:"󰁥"}.mdi-atlassian:before{content:"󰠄"}.mdi-atm:before{content:"󰵇"}.mdi-atom:before{content:"󰝨"}.mdi-atom-variant:before{content:"󰹻"}.mdi-attachment:before{content:"󰁦"}.mdi-attachment-check:before{content:"󱫁"}.mdi-attachment-lock:before{content:"󱧄"}.mdi-attachment-minus:before{content:"󱫂"}.mdi-attachment-off:before{content:"󱫃"}.mdi-attachment-plus:before{content:"󱫄"}.mdi-attachment-remove:before{content:"󱫅"}.mdi-atv:before{content:"󱭰"}.mdi-audio-input-rca:before{content:"󱡫"}.mdi-audio-input-stereo-minijack:before{content:"󱡬"}.mdi-audio-input-xlr:before{content:"󱡭"}.mdi-audio-video:before{content:"󰤽"}.mdi-audio-video-off:before{content:"󱆶"}.mdi-augmented-reality:before{content:"󰡐"}.mdi-aurora:before{content:"󱮹"}.mdi-auto-download:before{content:"󱍾"}.mdi-auto-fix:before{content:"󰁨"}.mdi-auto-mode:before{content:"󱰠"}.mdi-auto-upload:before{content:"󰁩"}.mdi-autorenew:before{content:"󰁪"}.mdi-autorenew-off:before{content:"󱧧"}.mdi-av-timer:before{content:"󰁫"}.mdi-awning:before{content:"󱮇"}.mdi-awning-outline:before{content:"󱮈"}.mdi-aws:before{content:"󰸏"}.mdi-axe:before{content:"󰣈"}.mdi-axe-battle:before{content:"󱡂"}.mdi-axis:before{content:"󰵈"}.mdi-axis-arrow:before{content:"󰵉"}.mdi-axis-arrow-info:before{content:"󱐎"}.mdi-axis-arrow-lock:before{content:"󰵊"}.mdi-axis-lock:before{content:"󰵋"}.mdi-axis-x-arrow:before{content:"󰵌"}.mdi-axis-x-arrow-lock:before{content:"󰵍"}.mdi-axis-x-rotate-clockwise:before{content:"󰵎"}.mdi-axis-x-rotate-counterclockwise:before{content:"󰵏"}.mdi-axis-x-y-arrow-lock:before{content:"󰵐"}.mdi-axis-y-arrow:before{content:"󰵑"}.mdi-axis-y-arrow-lock:before{content:"󰵒"}.mdi-axis-y-rotate-clockwise:before{content:"󰵓"}.mdi-axis-y-rotate-counterclockwise:before{content:"󰵔"}.mdi-axis-z-arrow:before{content:"󰵕"}.mdi-axis-z-arrow-lock:before{content:"󰵖"}.mdi-axis-z-rotate-clockwise:before{content:"󰵗"}.mdi-axis-z-rotate-counterclockwise:before{content:"󰵘"}.mdi-babel:before{content:"󰨥"}.mdi-baby:before{content:"󰁬"}.mdi-baby-bottle:before{content:"󰼹"}.mdi-baby-bottle-outline:before{content:"󰼺"}.mdi-baby-buggy:before{content:"󱏠"}.mdi-baby-buggy-off:before{content:"󱫳"}.mdi-baby-carriage:before{content:"󰚏"}.mdi-baby-carriage-off:before{content:"󰾠"}.mdi-baby-face:before{content:"󰹼"}.mdi-baby-face-outline:before{content:"󰹽"}.mdi-backburger:before{content:"󰁭"}.mdi-backspace:before{content:"󰁮"}.mdi-backspace-outline:before{content:"󰭜"}.mdi-backspace-reverse:before{content:"󰹾"}.mdi-backspace-reverse-outline:before{content:"󰹿"}.mdi-backup-restore:before{content:"󰁯"}.mdi-bacteria:before{content:"󰻕"}.mdi-bacteria-outline:before{content:"󰻖"}.mdi-badge-account:before{content:"󰶧"}.mdi-badge-account-alert:before{content:"󰶨"}.mdi-badge-account-alert-outline:before{content:"󰶩"}.mdi-badge-account-horizontal:before{content:"󰸍"}.mdi-badge-account-horizontal-outline:before{content:"󰸎"}.mdi-badge-account-outline:before{content:"󰶪"}.mdi-badminton:before{content:"󰡑"}.mdi-bag-carry-on:before{content:"󰼻"}.mdi-bag-carry-on-check:before{content:"󰵥"}.mdi-bag-carry-on-off:before{content:"󰼼"}.mdi-bag-checked:before{content:"󰼽"}.mdi-bag-personal:before{content:"󰸐"}.mdi-bag-personal-off:before{content:"󰸑"}.mdi-bag-personal-off-outline:before{content:"󰸒"}.mdi-bag-personal-outline:before{content:"󰸓"}.mdi-bag-personal-plus:before{content:"󱲤"}.mdi-bag-personal-plus-outline:before{content:"󱲥"}.mdi-bag-personal-tag:before{content:"󱬌"}.mdi-bag-personal-tag-outline:before{content:"󱬍"}.mdi-bag-suitcase:before{content:"󱖋"}.mdi-bag-suitcase-off:before{content:"󱖍"}.mdi-bag-suitcase-off-outline:before{content:"󱖎"}.mdi-bag-suitcase-outline:before{content:"󱖌"}.mdi-baguette:before{content:"󰼾"}.mdi-balcony:before{content:"󱠗"}.mdi-balloon:before{content:"󰨦"}.mdi-ballot:before{content:"󰧉"}.mdi-ballot-outline:before{content:"󰧊"}.mdi-ballot-recount:before{content:"󰰹"}.mdi-ballot-recount-outline:before{content:"󰰺"}.mdi-bandage:before{content:"󰶯"}.mdi-bank:before{content:"󰁰"}.mdi-bank-check:before{content:"󱙕"}.mdi-bank-circle:before{content:"󱰃"}.mdi-bank-circle-outline:before{content:"󱰄"}.mdi-bank-minus:before{content:"󰶰"}.mdi-bank-off:before{content:"󱙖"}.mdi-bank-off-outline:before{content:"󱙗"}.mdi-bank-outline:before{content:"󰺀"}.mdi-bank-plus:before{content:"󰶱"}.mdi-bank-remove:before{content:"󰶲"}.mdi-bank-transfer:before{content:"󰨧"}.mdi-bank-transfer-in:before{content:"󰨨"}.mdi-bank-transfer-out:before{content:"󰨩"}.mdi-barcode:before{content:"󰁱"}.mdi-barcode-off:before{content:"󱈶"}.mdi-barcode-scan:before{content:"󰁲"}.mdi-barley:before{content:"󰁳"}.mdi-barley-off:before{content:"󰭝"}.mdi-barn:before{content:"󰭞"}.mdi-barrel:before{content:"󰁴"}.mdi-barrel-outline:before{content:"󱨨"}.mdi-baseball:before{content:"󰡒"}.mdi-baseball-bat:before{content:"󰡓"}.mdi-baseball-diamond:before{content:"󱗬"}.mdi-baseball-diamond-outline:before{content:"󱗭"}.mdi-baseball-outline:before{content:"󱱚"}.mdi-bash:before{content:"󱆃"}.mdi-basket:before{content:"󰁶"}.mdi-basket-check:before{content:"󱣥"}.mdi-basket-check-outline:before{content:"󱣦"}.mdi-basket-fill:before{content:"󰁷"}.mdi-basket-minus:before{content:"󱔣"}.mdi-basket-minus-outline:before{content:"󱔤"}.mdi-basket-off:before{content:"󱔥"}.mdi-basket-off-outline:before{content:"󱔦"}.mdi-basket-outline:before{content:"󱆁"}.mdi-basket-plus:before{content:"󱔧"}.mdi-basket-plus-outline:before{content:"󱔨"}.mdi-basket-remove:before{content:"󱔩"}.mdi-basket-remove-outline:before{content:"󱔪"}.mdi-basket-unfill:before{content:"󰁸"}.mdi-basketball:before{content:"󰠆"}.mdi-basketball-hoop:before{content:"󰰻"}.mdi-basketball-hoop-outline:before{content:"󰰼"}.mdi-bat:before{content:"󰭟"}.mdi-bathtub:before{content:"󱠘"}.mdi-bathtub-outline:before{content:"󱠙"}.mdi-battery:before{content:"󰁹"}.mdi-battery-10:before{content:"󰁺"}.mdi-battery-10-bluetooth:before{content:"󰤾"}.mdi-battery-20:before{content:"󰁻"}.mdi-battery-20-bluetooth:before{content:"󰤿"}.mdi-battery-30:before{content:"󰁼"}.mdi-battery-30-bluetooth:before{content:"󰥀"}.mdi-battery-40:before{content:"󰁽"}.mdi-battery-40-bluetooth:before{content:"󰥁"}.mdi-battery-50:before{content:"󰁾"}.mdi-battery-50-bluetooth:before{content:"󰥂"}.mdi-battery-60:before{content:"󰁿"}.mdi-battery-60-bluetooth:before{content:"󰥃"}.mdi-battery-70:before{content:"󰂀"}.mdi-battery-70-bluetooth:before{content:"󰥄"}.mdi-battery-80:before{content:"󰂁"}.mdi-battery-80-bluetooth:before{content:"󰥅"}.mdi-battery-90:before{content:"󰂂"}.mdi-battery-90-bluetooth:before{content:"󰥆"}.mdi-battery-alert:before{content:"󰂃"}.mdi-battery-alert-bluetooth:before{content:"󰥇"}.mdi-battery-alert-variant:before{content:"󱃌"}.mdi-battery-alert-variant-outline:before{content:"󱃍"}.mdi-battery-arrow-down:before{content:"󱟞"}.mdi-battery-arrow-down-outline:before{content:"󱟟"}.mdi-battery-arrow-up:before{content:"󱟠"}.mdi-battery-arrow-up-outline:before{content:"󱟡"}.mdi-battery-bluetooth:before{content:"󰥈"}.mdi-battery-bluetooth-variant:before{content:"󰥉"}.mdi-battery-charging:before{content:"󰂄"}.mdi-battery-charging-10:before{content:"󰢜"}.mdi-battery-charging-100:before{content:"󰂅"}.mdi-battery-charging-20:before{content:"󰂆"}.mdi-battery-charging-30:before{content:"󰂇"}.mdi-battery-charging-40:before{content:"󰂈"}.mdi-battery-charging-50:before{content:"󰢝"}.mdi-battery-charging-60:before{content:"󰂉"}.mdi-battery-charging-70:before{content:"󰢞"}.mdi-battery-charging-80:before{content:"󰂊"}.mdi-battery-charging-90:before{content:"󰂋"}.mdi-battery-charging-high:before{content:"󱊦"}.mdi-battery-charging-low:before{content:"󱊤"}.mdi-battery-charging-medium:before{content:"󱊥"}.mdi-battery-charging-outline:before{content:"󰢟"}.mdi-battery-charging-wireless:before{content:"󰠇"}.mdi-battery-charging-wireless-10:before{content:"󰠈"}.mdi-battery-charging-wireless-20:before{content:"󰠉"}.mdi-battery-charging-wireless-30:before{content:"󰠊"}.mdi-battery-charging-wireless-40:before{content:"󰠋"}.mdi-battery-charging-wireless-50:before{content:"󰠌"}.mdi-battery-charging-wireless-60:before{content:"󰠍"}.mdi-battery-charging-wireless-70:before{content:"󰠎"}.mdi-battery-charging-wireless-80:before{content:"󰠏"}.mdi-battery-charging-wireless-90:before{content:"󰠐"}.mdi-battery-charging-wireless-alert:before{content:"󰠑"}.mdi-battery-charging-wireless-outline:before{content:"󰠒"}.mdi-battery-check:before{content:"󱟢"}.mdi-battery-check-outline:before{content:"󱟣"}.mdi-battery-clock:before{content:"󱧥"}.mdi-battery-clock-outline:before{content:"󱧦"}.mdi-battery-heart:before{content:"󱈏"}.mdi-battery-heart-outline:before{content:"󱈐"}.mdi-battery-heart-variant:before{content:"󱈑"}.mdi-battery-high:before{content:"󱊣"}.mdi-battery-lock:before{content:"󱞜"}.mdi-battery-lock-open:before{content:"󱞝"}.mdi-battery-low:before{content:"󱊡"}.mdi-battery-medium:before{content:"󱊢"}.mdi-battery-minus:before{content:"󱟤"}.mdi-battery-minus-outline:before{content:"󱟥"}.mdi-battery-minus-variant:before{content:"󰂌"}.mdi-battery-negative:before{content:"󰂍"}.mdi-battery-off:before{content:"󱉝"}.mdi-battery-off-outline:before{content:"󱉞"}.mdi-battery-outline:before{content:"󰂎"}.mdi-battery-plus:before{content:"󱟦"}.mdi-battery-plus-outline:before{content:"󱟧"}.mdi-battery-plus-variant:before{content:"󰂏"}.mdi-battery-positive:before{content:"󰂐"}.mdi-battery-remove:before{content:"󱟨"}.mdi-battery-remove-outline:before{content:"󱟩"}.mdi-battery-sync:before{content:"󱠴"}.mdi-battery-sync-outline:before{content:"󱠵"}.mdi-battery-unknown:before{content:"󰂑"}.mdi-battery-unknown-bluetooth:before{content:"󰥊"}.mdi-beach:before{content:"󰂒"}.mdi-beaker:before{content:"󰳪"}.mdi-beaker-alert:before{content:"󱈩"}.mdi-beaker-alert-outline:before{content:"󱈪"}.mdi-beaker-check:before{content:"󱈫"}.mdi-beaker-check-outline:before{content:"󱈬"}.mdi-beaker-minus:before{content:"󱈭"}.mdi-beaker-minus-outline:before{content:"󱈮"}.mdi-beaker-outline:before{content:"󰚐"}.mdi-beaker-plus:before{content:"󱈯"}.mdi-beaker-plus-outline:before{content:"󱈰"}.mdi-beaker-question:before{content:"󱈱"}.mdi-beaker-question-outline:before{content:"󱈲"}.mdi-beaker-remove:before{content:"󱈳"}.mdi-beaker-remove-outline:before{content:"󱈴"}.mdi-bed:before{content:"󰋣"}.mdi-bed-clock:before{content:"󱮔"}.mdi-bed-double:before{content:"󰿔"}.mdi-bed-double-outline:before{content:"󰿓"}.mdi-bed-empty:before{content:"󰢠"}.mdi-bed-king:before{content:"󰿒"}.mdi-bed-king-outline:before{content:"󰿑"}.mdi-bed-outline:before{content:"󰂙"}.mdi-bed-queen:before{content:"󰿐"}.mdi-bed-queen-outline:before{content:"󰿛"}.mdi-bed-single:before{content:"󱁭"}.mdi-bed-single-outline:before{content:"󱁮"}.mdi-bee:before{content:"󰾡"}.mdi-bee-flower:before{content:"󰾢"}.mdi-beehive-off-outline:before{content:"󱏭"}.mdi-beehive-outline:before{content:"󱃎"}.mdi-beekeeper:before{content:"󱓢"}.mdi-beer:before{content:"󰂘"}.mdi-beer-outline:before{content:"󱌌"}.mdi-bell:before{content:"󰂚"}.mdi-bell-alert:before{content:"󰵙"}.mdi-bell-alert-outline:before{content:"󰺁"}.mdi-bell-badge:before{content:"󱅫"}.mdi-bell-badge-outline:before{content:"󰅸"}.mdi-bell-cancel:before{content:"󱏧"}.mdi-bell-cancel-outline:before{content:"󱏨"}.mdi-bell-check:before{content:"󱇥"}.mdi-bell-check-outline:before{content:"󱇦"}.mdi-bell-circle:before{content:"󰵚"}.mdi-bell-circle-outline:before{content:"󰵛"}.mdi-bell-cog:before{content:"󱨩"}.mdi-bell-cog-outline:before{content:"󱨪"}.mdi-bell-minus:before{content:"󱏩"}.mdi-bell-minus-outline:before{content:"󱏪"}.mdi-bell-off:before{content:"󰂛"}.mdi-bell-off-outline:before{content:"󰪑"}.mdi-bell-outline:before{content:"󰂜"}.mdi-bell-plus:before{content:"󰂝"}.mdi-bell-plus-outline:before{content:"󰪒"}.mdi-bell-remove:before{content:"󱏫"}.mdi-bell-remove-outline:before{content:"󱏬"}.mdi-bell-ring:before{content:"󰂞"}.mdi-bell-ring-outline:before{content:"󰂟"}.mdi-bell-sleep:before{content:"󰂠"}.mdi-bell-sleep-outline:before{content:"󰪓"}.mdi-bench:before{content:"󱰡"}.mdi-bench-back:before{content:"󱰢"}.mdi-beta:before{content:"󰂡"}.mdi-betamax:before{content:"󰧋"}.mdi-biathlon:before{content:"󰸔"}.mdi-bicycle:before{content:"󱂜"}.mdi-bicycle-basket:before{content:"󱈵"}.mdi-bicycle-cargo:before{content:"󱢜"}.mdi-bicycle-electric:before{content:"󱖴"}.mdi-bicycle-penny-farthing:before{content:"󱗩"}.mdi-bike:before{content:"󰂣"}.mdi-bike-fast:before{content:"󱄟"}.mdi-bike-pedal:before{content:"󱰣"}.mdi-bike-pedal-clipless:before{content:"󱰤"}.mdi-bike-pedal-mountain:before{content:"󱰥"}.mdi-billboard:before{content:"󱀐"}.mdi-billiards:before{content:"󰭡"}.mdi-billiards-rack:before{content:"󰭢"}.mdi-binoculars:before{content:"󰂥"}.mdi-bio:before{content:"󰂦"}.mdi-biohazard:before{content:"󰂧"}.mdi-bird:before{content:"󱗆"}.mdi-bitbucket:before{content:"󰂨"}.mdi-bitcoin:before{content:"󰠓"}.mdi-black-mesa:before{content:"󰂩"}.mdi-blender:before{content:"󰳫"}.mdi-blender-outline:before{content:"󱠚"}.mdi-blender-software:before{content:"󰂫"}.mdi-blinds:before{content:"󰂬"}.mdi-blinds-horizontal:before{content:"󱨫"}.mdi-blinds-horizontal-closed:before{content:"󱨬"}.mdi-blinds-open:before{content:"󱀑"}.mdi-blinds-vertical:before{content:"󱨭"}.mdi-blinds-vertical-closed:before{content:"󱨮"}.mdi-block-helper:before{content:"󰂭"}.mdi-blood-bag:before{content:"󰳬"}.mdi-bluetooth:before{content:"󰂯"}.mdi-bluetooth-audio:before{content:"󰂰"}.mdi-bluetooth-connect:before{content:"󰂱"}.mdi-bluetooth-off:before{content:"󰂲"}.mdi-bluetooth-settings:before{content:"󰂳"}.mdi-bluetooth-transfer:before{content:"󰂴"}.mdi-blur:before{content:"󰂵"}.mdi-blur-linear:before{content:"󰂶"}.mdi-blur-off:before{content:"󰂷"}.mdi-blur-radial:before{content:"󰂸"}.mdi-bolt:before{content:"󰶳"}.mdi-bomb:before{content:"󰚑"}.mdi-bomb-off:before{content:"󰛅"}.mdi-bone:before{content:"󰂹"}.mdi-bone-off:before{content:"󱧠"}.mdi-book:before{content:"󰂺"}.mdi-book-account:before{content:"󱎭"}.mdi-book-account-outline:before{content:"󱎮"}.mdi-book-alert:before{content:"󱙼"}.mdi-book-alert-outline:before{content:"󱙽"}.mdi-book-alphabet:before{content:"󰘝"}.mdi-book-arrow-down:before{content:"󱙾"}.mdi-book-arrow-down-outline:before{content:"󱙿"}.mdi-book-arrow-left:before{content:"󱚀"}.mdi-book-arrow-left-outline:before{content:"󱚁"}.mdi-book-arrow-right:before{content:"󱚂"}.mdi-book-arrow-right-outline:before{content:"󱚃"}.mdi-book-arrow-up:before{content:"󱚄"}.mdi-book-arrow-up-outline:before{content:"󱚅"}.mdi-book-cancel:before{content:"󱚆"}.mdi-book-cancel-outline:before{content:"󱚇"}.mdi-book-check:before{content:"󱓳"}.mdi-book-check-outline:before{content:"󱓴"}.mdi-book-clock:before{content:"󱚈"}.mdi-book-clock-outline:before{content:"󱚉"}.mdi-book-cog:before{content:"󱚊"}.mdi-book-cog-outline:before{content:"󱚋"}.mdi-book-cross:before{content:"󰂢"}.mdi-book-edit:before{content:"󱚌"}.mdi-book-edit-outline:before{content:"󱚍"}.mdi-book-education:before{content:"󱛉"}.mdi-book-education-outline:before{content:"󱛊"}.mdi-book-heart:before{content:"󱨝"}.mdi-book-heart-outline:before{content:"󱨞"}.mdi-book-information-variant:before{content:"󱁯"}.mdi-book-lock:before{content:"󰞚"}.mdi-book-lock-open:before{content:"󰞛"}.mdi-book-lock-open-outline:before{content:"󱚎"}.mdi-book-lock-outline:before{content:"󱚏"}.mdi-book-marker:before{content:"󱚐"}.mdi-book-marker-outline:before{content:"󱚑"}.mdi-book-minus:before{content:"󰗙"}.mdi-book-minus-multiple:before{content:"󰪔"}.mdi-book-minus-multiple-outline:before{content:"󰤋"}.mdi-book-minus-outline:before{content:"󱚒"}.mdi-book-multiple:before{content:"󰂻"}.mdi-book-multiple-outline:before{content:"󰐶"}.mdi-book-music:before{content:"󰁧"}.mdi-book-music-outline:before{content:"󱚓"}.mdi-book-off:before{content:"󱚔"}.mdi-book-off-outline:before{content:"󱚕"}.mdi-book-open:before{content:"󰂽"}.mdi-book-open-blank-variant:before{content:"󰂾"}.mdi-book-open-blank-variant-outline:before{content:"󱳋"}.mdi-book-open-outline:before{content:"󰭣"}.mdi-book-open-page-variant:before{content:"󰗚"}.mdi-book-open-page-variant-outline:before{content:"󱗖"}.mdi-book-open-variant:before{content:"󱓷"}.mdi-book-open-variant-outline:before{content:"󱳌"}.mdi-book-outline:before{content:"󰭤"}.mdi-book-play:before{content:"󰺂"}.mdi-book-play-outline:before{content:"󰺃"}.mdi-book-plus:before{content:"󰗛"}.mdi-book-plus-multiple:before{content:"󰪕"}.mdi-book-plus-multiple-outline:before{content:"󰫞"}.mdi-book-plus-outline:before{content:"󱚖"}.mdi-book-refresh:before{content:"󱚗"}.mdi-book-refresh-outline:before{content:"󱚘"}.mdi-book-remove:before{content:"󰪗"}.mdi-book-remove-multiple:before{content:"󰪖"}.mdi-book-remove-multiple-outline:before{content:"󰓊"}.mdi-book-remove-outline:before{content:"󱚙"}.mdi-book-search:before{content:"󰺄"}.mdi-book-search-outline:before{content:"󰺅"}.mdi-book-settings:before{content:"󱚚"}.mdi-book-settings-outline:before{content:"󱚛"}.mdi-book-sync:before{content:"󱚜"}.mdi-book-sync-outline:before{content:"󱛈"}.mdi-book-variant:before{content:"󰂿"}.mdi-bookmark:before{content:"󰃀"}.mdi-bookmark-box:before{content:"󱭵"}.mdi-bookmark-box-multiple:before{content:"󱥬"}.mdi-bookmark-box-multiple-outline:before{content:"󱥭"}.mdi-bookmark-box-outline:before{content:"󱭶"}.mdi-bookmark-check:before{content:"󰃁"}.mdi-bookmark-check-outline:before{content:"󱍻"}.mdi-bookmark-minus:before{content:"󰧌"}.mdi-bookmark-minus-outline:before{content:"󰧍"}.mdi-bookmark-multiple:before{content:"󰸕"}.mdi-bookmark-multiple-outline:before{content:"󰸖"}.mdi-bookmark-music:before{content:"󰃂"}.mdi-bookmark-music-outline:before{content:"󱍹"}.mdi-bookmark-off:before{content:"󰧎"}.mdi-bookmark-off-outline:before{content:"󰧏"}.mdi-bookmark-outline:before{content:"󰃃"}.mdi-bookmark-plus:before{content:"󰃅"}.mdi-bookmark-plus-outline:before{content:"󰃄"}.mdi-bookmark-remove:before{content:"󰃆"}.mdi-bookmark-remove-outline:before{content:"󱍺"}.mdi-bookshelf:before{content:"󱉟"}.mdi-boom-gate:before{content:"󰺆"}.mdi-boom-gate-alert:before{content:"󰺇"}.mdi-boom-gate-alert-outline:before{content:"󰺈"}.mdi-boom-gate-arrow-down:before{content:"󰺉"}.mdi-boom-gate-arrow-down-outline:before{content:"󰺊"}.mdi-boom-gate-arrow-up:before{content:"󰺌"}.mdi-boom-gate-arrow-up-outline:before{content:"󰺍"}.mdi-boom-gate-outline:before{content:"󰺋"}.mdi-boom-gate-up:before{content:"󱟹"}.mdi-boom-gate-up-outline:before{content:"󱟺"}.mdi-boombox:before{content:"󰗜"}.mdi-boomerang:before{content:"󱃏"}.mdi-bootstrap:before{content:"󰛆"}.mdi-border-all:before{content:"󰃇"}.mdi-border-all-variant:before{content:"󰢡"}.mdi-border-bottom:before{content:"󰃈"}.mdi-border-bottom-variant:before{content:"󰢢"}.mdi-border-color:before{content:"󰃉"}.mdi-border-horizontal:before{content:"󰃊"}.mdi-border-inside:before{content:"󰃋"}.mdi-border-left:before{content:"󰃌"}.mdi-border-left-variant:before{content:"󰢣"}.mdi-border-none:before{content:"󰃍"}.mdi-border-none-variant:before{content:"󰢤"}.mdi-border-outside:before{content:"󰃎"}.mdi-border-radius:before{content:"󱫴"}.mdi-border-right:before{content:"󰃏"}.mdi-border-right-variant:before{content:"󰢥"}.mdi-border-style:before{content:"󰃐"}.mdi-border-top:before{content:"󰃑"}.mdi-border-top-variant:before{content:"󰢦"}.mdi-border-vertical:before{content:"󰃒"}.mdi-bottle-soda:before{content:"󱁰"}.mdi-bottle-soda-classic:before{content:"󱁱"}.mdi-bottle-soda-classic-outline:before{content:"󱍣"}.mdi-bottle-soda-outline:before{content:"󱁲"}.mdi-bottle-tonic:before{content:"󱄮"}.mdi-bottle-tonic-outline:before{content:"󱄯"}.mdi-bottle-tonic-plus:before{content:"󱄰"}.mdi-bottle-tonic-plus-outline:before{content:"󱄱"}.mdi-bottle-tonic-skull:before{content:"󱄲"}.mdi-bottle-tonic-skull-outline:before{content:"󱄳"}.mdi-bottle-wine:before{content:"󰡔"}.mdi-bottle-wine-outline:before{content:"󱌐"}.mdi-bow-arrow:before{content:"󱡁"}.mdi-bow-tie:before{content:"󰙸"}.mdi-bowl:before{content:"󰊎"}.mdi-bowl-mix:before{content:"󰘗"}.mdi-bowl-mix-outline:before{content:"󰋤"}.mdi-bowl-outline:before{content:"󰊩"}.mdi-bowling:before{content:"󰃓"}.mdi-box:before{content:"󰃔"}.mdi-box-cutter:before{content:"󰃕"}.mdi-box-cutter-off:before{content:"󰭊"}.mdi-box-shadow:before{content:"󰘷"}.mdi-boxing-glove:before{content:"󰭥"}.mdi-braille:before{content:"󰧐"}.mdi-brain:before{content:"󰧑"}.mdi-bread-slice:before{content:"󰳮"}.mdi-bread-slice-outline:before{content:"󰳯"}.mdi-bridge:before{content:"󰘘"}.mdi-briefcase:before{content:"󰃖"}.mdi-briefcase-account:before{content:"󰳰"}.mdi-briefcase-account-outline:before{content:"󰳱"}.mdi-briefcase-arrow-left-right:before{content:"󱪍"}.mdi-briefcase-arrow-left-right-outline:before{content:"󱪎"}.mdi-briefcase-arrow-up-down:before{content:"󱪏"}.mdi-briefcase-arrow-up-down-outline:before{content:"󱪐"}.mdi-briefcase-check:before{content:"󰃗"}.mdi-briefcase-check-outline:before{content:"󱌞"}.mdi-briefcase-clock:before{content:"󱃐"}.mdi-briefcase-clock-outline:before{content:"󱃑"}.mdi-briefcase-download:before{content:"󰃘"}.mdi-briefcase-download-outline:before{content:"󰰽"}.mdi-briefcase-edit:before{content:"󰪘"}.mdi-briefcase-edit-outline:before{content:"󰰾"}.mdi-briefcase-eye:before{content:"󱟙"}.mdi-briefcase-eye-outline:before{content:"󱟚"}.mdi-briefcase-minus:before{content:"󰨪"}.mdi-briefcase-minus-outline:before{content:"󰰿"}.mdi-briefcase-off:before{content:"󱙘"}.mdi-briefcase-off-outline:before{content:"󱙙"}.mdi-briefcase-outline:before{content:"󰠔"}.mdi-briefcase-plus:before{content:"󰨫"}.mdi-briefcase-plus-outline:before{content:"󰱀"}.mdi-briefcase-remove:before{content:"󰨬"}.mdi-briefcase-remove-outline:before{content:"󰱁"}.mdi-briefcase-search:before{content:"󰨭"}.mdi-briefcase-search-outline:before{content:"󰱂"}.mdi-briefcase-upload:before{content:"󰃙"}.mdi-briefcase-upload-outline:before{content:"󰱃"}.mdi-briefcase-variant:before{content:"󱒔"}.mdi-briefcase-variant-off:before{content:"󱙚"}.mdi-briefcase-variant-off-outline:before{content:"󱙛"}.mdi-briefcase-variant-outline:before{content:"󱒕"}.mdi-brightness-1:before{content:"󰃚"}.mdi-brightness-2:before{content:"󰃛"}.mdi-brightness-3:before{content:"󰃜"}.mdi-brightness-4:before{content:"󰃝"}.mdi-brightness-5:before{content:"󰃞"}.mdi-brightness-6:before{content:"󰃟"}.mdi-brightness-7:before{content:"󰃠"}.mdi-brightness-auto:before{content:"󰃡"}.mdi-brightness-percent:before{content:"󰳲"}.mdi-broadcast:before{content:"󱜠"}.mdi-broadcast-off:before{content:"󱜡"}.mdi-broom:before{content:"󰃢"}.mdi-brush:before{content:"󰃣"}.mdi-brush-off:before{content:"󱝱"}.mdi-brush-outline:before{content:"󱨍"}.mdi-brush-variant:before{content:"󱠓"}.mdi-bucket:before{content:"󱐕"}.mdi-bucket-outline:before{content:"󱐖"}.mdi-buffet:before{content:"󰕸"}.mdi-bug:before{content:"󰃤"}.mdi-bug-check:before{content:"󰨮"}.mdi-bug-check-outline:before{content:"󰨯"}.mdi-bug-outline:before{content:"󰨰"}.mdi-bug-pause:before{content:"󱫵"}.mdi-bug-pause-outline:before{content:"󱫶"}.mdi-bug-play:before{content:"󱫷"}.mdi-bug-play-outline:before{content:"󱫸"}.mdi-bug-stop:before{content:"󱫹"}.mdi-bug-stop-outline:before{content:"󱫺"}.mdi-bugle:before{content:"󰶴"}.mdi-bulkhead-light:before{content:"󱨯"}.mdi-bulldozer:before{content:"󰬢"}.mdi-bullet:before{content:"󰳳"}.mdi-bulletin-board:before{content:"󰃥"}.mdi-bullhorn:before{content:"󰃦"}.mdi-bullhorn-outline:before{content:"󰬣"}.mdi-bullhorn-variant:before{content:"󱥮"}.mdi-bullhorn-variant-outline:before{content:"󱥯"}.mdi-bullseye:before{content:"󰗝"}.mdi-bullseye-arrow:before{content:"󰣉"}.mdi-bulma:before{content:"󱋧"}.mdi-bunk-bed:before{content:"󱌂"}.mdi-bunk-bed-outline:before{content:"󰂗"}.mdi-bus:before{content:"󰃧"}.mdi-bus-alert:before{content:"󰪙"}.mdi-bus-articulated-end:before{content:"󰞜"}.mdi-bus-articulated-front:before{content:"󰞝"}.mdi-bus-clock:before{content:"󰣊"}.mdi-bus-double-decker:before{content:"󰞞"}.mdi-bus-electric:before{content:"󱤝"}.mdi-bus-marker:before{content:"󱈒"}.mdi-bus-multiple:before{content:"󰼿"}.mdi-bus-school:before{content:"󰞟"}.mdi-bus-side:before{content:"󰞠"}.mdi-bus-sign:before{content:"󱳁"}.mdi-bus-stop:before{content:"󱀒"}.mdi-bus-stop-covered:before{content:"󱀓"}.mdi-bus-stop-uncovered:before{content:"󱀔"}.mdi-bus-wrench:before{content:"󱳂"}.mdi-butterfly:before{content:"󱖉"}.mdi-butterfly-outline:before{content:"󱖊"}.mdi-button-cursor:before{content:"󱭏"}.mdi-button-pointer:before{content:"󱭐"}.mdi-cabin-a-frame:before{content:"󱢌"}.mdi-cable-data:before{content:"󱎔"}.mdi-cached:before{content:"󰃨"}.mdi-cactus:before{content:"󰶵"}.mdi-cake:before{content:"󰃩"}.mdi-cake-layered:before{content:"󰃪"}.mdi-cake-variant:before{content:"󰃫"}.mdi-cake-variant-outline:before{content:"󱟰"}.mdi-calculator:before{content:"󰃬"}.mdi-calculator-variant:before{content:"󰪚"}.mdi-calculator-variant-outline:before{content:"󱖦"}.mdi-calendar:before{content:"󰃭"}.mdi-calendar-account:before{content:"󰻗"}.mdi-calendar-account-outline:before{content:"󰻘"}.mdi-calendar-alert:before{content:"󰨱"}.mdi-calendar-alert-outline:before{content:"󱭢"}.mdi-calendar-arrow-left:before{content:"󱄴"}.mdi-calendar-arrow-right:before{content:"󱄵"}.mdi-calendar-badge:before{content:"󱮝"}.mdi-calendar-badge-outline:before{content:"󱮞"}.mdi-calendar-blank:before{content:"󰃮"}.mdi-calendar-blank-multiple:before{content:"󱁳"}.mdi-calendar-blank-outline:before{content:"󰭦"}.mdi-calendar-check:before{content:"󰃯"}.mdi-calendar-check-outline:before{content:"󰱄"}.mdi-calendar-clock:before{content:"󰃰"}.mdi-calendar-clock-outline:before{content:"󱛡"}.mdi-calendar-collapse-horizontal:before{content:"󱢝"}.mdi-calendar-collapse-horizontal-outline:before{content:"󱭣"}.mdi-calendar-cursor:before{content:"󱕻"}.mdi-calendar-cursor-outline:before{content:"󱭤"}.mdi-calendar-edit:before{content:"󰢧"}.mdi-calendar-edit-outline:before{content:"󱭥"}.mdi-calendar-end:before{content:"󱙬"}.mdi-calendar-end-outline:before{content:"󱭦"}.mdi-calendar-expand-horizontal:before{content:"󱢞"}.mdi-calendar-expand-horizontal-outline:before{content:"󱭧"}.mdi-calendar-export:before{content:"󰬤"}.mdi-calendar-export-outline:before{content:"󱭨"}.mdi-calendar-filter:before{content:"󱨲"}.mdi-calendar-filter-outline:before{content:"󱨳"}.mdi-calendar-heart:before{content:"󰧒"}.mdi-calendar-heart-outline:before{content:"󱭩"}.mdi-calendar-import:before{content:"󰬥"}.mdi-calendar-import-outline:before{content:"󱭪"}.mdi-calendar-lock:before{content:"󱙁"}.mdi-calendar-lock-open:before{content:"󱭛"}.mdi-calendar-lock-open-outline:before{content:"󱭜"}.mdi-calendar-lock-outline:before{content:"󱙂"}.mdi-calendar-minus:before{content:"󰵜"}.mdi-calendar-minus-outline:before{content:"󱭫"}.mdi-calendar-month:before{content:"󰸗"}.mdi-calendar-month-outline:before{content:"󰸘"}.mdi-calendar-multiple:before{content:"󰃱"}.mdi-calendar-multiple-check:before{content:"󰃲"}.mdi-calendar-multiselect:before{content:"󰨲"}.mdi-calendar-multiselect-outline:before{content:"󱭕"}.mdi-calendar-outline:before{content:"󰭧"}.mdi-calendar-plus:before{content:"󰃳"}.mdi-calendar-plus-outline:before{content:"󱭬"}.mdi-calendar-question:before{content:"󰚒"}.mdi-calendar-question-outline:before{content:"󱭭"}.mdi-calendar-range:before{content:"󰙹"}.mdi-calendar-range-outline:before{content:"󰭨"}.mdi-calendar-refresh:before{content:"󰇡"}.mdi-calendar-refresh-outline:before{content:"󰈃"}.mdi-calendar-remove:before{content:"󰃴"}.mdi-calendar-remove-outline:before{content:"󰱅"}.mdi-calendar-search:before{content:"󰥌"}.mdi-calendar-search-outline:before{content:"󱭮"}.mdi-calendar-star:before{content:"󰧓"}.mdi-calendar-star-four-points:before{content:"󱰟"}.mdi-calendar-star-outline:before{content:"󱭓"}.mdi-calendar-start:before{content:"󱙭"}.mdi-calendar-start-outline:before{content:"󱭯"}.mdi-calendar-sync:before{content:"󰺎"}.mdi-calendar-sync-outline:before{content:"󰺏"}.mdi-calendar-text:before{content:"󰃵"}.mdi-calendar-text-outline:before{content:"󰱆"}.mdi-calendar-today:before{content:"󰃶"}.mdi-calendar-today-outline:before{content:"󱨰"}.mdi-calendar-week:before{content:"󰨳"}.mdi-calendar-week-begin:before{content:"󰨴"}.mdi-calendar-week-begin-outline:before{content:"󱨱"}.mdi-calendar-week-outline:before{content:"󱨴"}.mdi-calendar-weekend:before{content:"󰻙"}.mdi-calendar-weekend-outline:before{content:"󰻚"}.mdi-call-made:before{content:"󰃷"}.mdi-call-merge:before{content:"󰃸"}.mdi-call-missed:before{content:"󰃹"}.mdi-call-received:before{content:"󰃺"}.mdi-call-split:before{content:"󰃻"}.mdi-camcorder:before{content:"󰃼"}.mdi-camcorder-off:before{content:"󰃿"}.mdi-camera:before{content:"󰄀"}.mdi-camera-account:before{content:"󰣋"}.mdi-camera-burst:before{content:"󰚓"}.mdi-camera-control:before{content:"󰭩"}.mdi-camera-document:before{content:"󱡱"}.mdi-camera-document-off:before{content:"󱡲"}.mdi-camera-enhance:before{content:"󰄁"}.mdi-camera-enhance-outline:before{content:"󰭪"}.mdi-camera-flip:before{content:"󱗙"}.mdi-camera-flip-outline:before{content:"󱗚"}.mdi-camera-front:before{content:"󰄂"}.mdi-camera-front-variant:before{content:"󰄃"}.mdi-camera-gopro:before{content:"󰞡"}.mdi-camera-image:before{content:"󰣌"}.mdi-camera-iris:before{content:"󰄄"}.mdi-camera-lock:before{content:"󱨔"}.mdi-camera-lock-open:before{content:"󱰍"}.mdi-camera-lock-open-outline:before{content:"󱰎"}.mdi-camera-lock-outline:before{content:"󱨕"}.mdi-camera-marker:before{content:"󱦧"}.mdi-camera-marker-outline:before{content:"󱦨"}.mdi-camera-metering-center:before{content:"󰞢"}.mdi-camera-metering-matrix:before{content:"󰞣"}.mdi-camera-metering-partial:before{content:"󰞤"}.mdi-camera-metering-spot:before{content:"󰞥"}.mdi-camera-off:before{content:"󰗟"}.mdi-camera-off-outline:before{content:"󱦿"}.mdi-camera-outline:before{content:"󰵝"}.mdi-camera-party-mode:before{content:"󰄅"}.mdi-camera-plus:before{content:"󰻛"}.mdi-camera-plus-outline:before{content:"󰻜"}.mdi-camera-rear:before{content:"󰄆"}.mdi-camera-rear-variant:before{content:"󰄇"}.mdi-camera-retake:before{content:"󰸙"}.mdi-camera-retake-outline:before{content:"󰸚"}.mdi-camera-switch:before{content:"󰄈"}.mdi-camera-switch-outline:before{content:"󰡊"}.mdi-camera-timer:before{content:"󰄉"}.mdi-camera-wireless:before{content:"󰶶"}.mdi-camera-wireless-outline:before{content:"󰶷"}.mdi-campfire:before{content:"󰻝"}.mdi-cancel:before{content:"󰜺"}.mdi-candelabra:before{content:"󱟒"}.mdi-candelabra-fire:before{content:"󱟓"}.mdi-candle:before{content:"󰗢"}.mdi-candy:before{content:"󱥰"}.mdi-candy-off:before{content:"󱥱"}.mdi-candy-off-outline:before{content:"󱥲"}.mdi-candy-outline:before{content:"󱥳"}.mdi-candycane:before{content:"󰄊"}.mdi-cannabis:before{content:"󰞦"}.mdi-cannabis-off:before{content:"󱙮"}.mdi-caps-lock:before{content:"󰪛"}.mdi-car:before{content:"󰄋"}.mdi-car-2-plus:before{content:"󱀕"}.mdi-car-3-plus:before{content:"󱀖"}.mdi-car-arrow-left:before{content:"󱎲"}.mdi-car-arrow-right:before{content:"󱎳"}.mdi-car-back:before{content:"󰸛"}.mdi-car-battery:before{content:"󰄌"}.mdi-car-brake-abs:before{content:"󰱇"}.mdi-car-brake-alert:before{content:"󰱈"}.mdi-car-brake-fluid-level:before{content:"󱤉"}.mdi-car-brake-hold:before{content:"󰵞"}.mdi-car-brake-low-pressure:before{content:"󱤊"}.mdi-car-brake-parking:before{content:"󰵟"}.mdi-car-brake-retarder:before{content:"󱀗"}.mdi-car-brake-temperature:before{content:"󱤋"}.mdi-car-brake-worn-linings:before{content:"󱤌"}.mdi-car-child-seat:before{content:"󰾣"}.mdi-car-clock:before{content:"󱥴"}.mdi-car-clutch:before{content:"󱀘"}.mdi-car-cog:before{content:"󱏌"}.mdi-car-connected:before{content:"󰄍"}.mdi-car-convertible:before{content:"󰞧"}.mdi-car-coolant-level:before{content:"󱀙"}.mdi-car-cruise-control:before{content:"󰵠"}.mdi-car-defrost-front:before{content:"󰵡"}.mdi-car-defrost-rear:before{content:"󰵢"}.mdi-car-door:before{content:"󰭫"}.mdi-car-door-lock:before{content:"󱂝"}.mdi-car-door-lock-open:before{content:"󱲁"}.mdi-car-electric:before{content:"󰭬"}.mdi-car-electric-outline:before{content:"󱖵"}.mdi-car-emergency:before{content:"󱘏"}.mdi-car-esp:before{content:"󰱉"}.mdi-car-estate:before{content:"󰞨"}.mdi-car-hatchback:before{content:"󰞩"}.mdi-car-info:before{content:"󱆾"}.mdi-car-key:before{content:"󰭭"}.mdi-car-lifted-pickup:before{content:"󱔭"}.mdi-car-light-alert:before{content:"󱤍"}.mdi-car-light-dimmed:before{content:"󰱊"}.mdi-car-light-fog:before{content:"󰱋"}.mdi-car-light-high:before{content:"󰱌"}.mdi-car-limousine:before{content:"󰣍"}.mdi-car-multiple:before{content:"󰭮"}.mdi-car-off:before{content:"󰸜"}.mdi-car-outline:before{content:"󱓭"}.mdi-car-parking-lights:before{content:"󰵣"}.mdi-car-pickup:before{content:"󰞪"}.mdi-car-search:before{content:"󱮍"}.mdi-car-search-outline:before{content:"󱮎"}.mdi-car-seat:before{content:"󰾤"}.mdi-car-seat-cooler:before{content:"󰾥"}.mdi-car-seat-heater:before{content:"󰾦"}.mdi-car-select:before{content:"󱡹"}.mdi-car-settings:before{content:"󱏍"}.mdi-car-shift-pattern:before{content:"󰽀"}.mdi-car-side:before{content:"󰞫"}.mdi-car-speed-limiter:before{content:"󱤎"}.mdi-car-sports:before{content:"󰞬"}.mdi-car-tire-alert:before{content:"󰱍"}.mdi-car-traction-control:before{content:"󰵤"}.mdi-car-turbocharger:before{content:"󱀚"}.mdi-car-wash:before{content:"󰄎"}.mdi-car-windshield:before{content:"󱀛"}.mdi-car-windshield-outline:before{content:"󱀜"}.mdi-car-wireless:before{content:"󱡸"}.mdi-car-wrench:before{content:"󱠔"}.mdi-carabiner:before{content:"󱓀"}.mdi-caravan:before{content:"󰞭"}.mdi-card:before{content:"󰭯"}.mdi-card-account-details:before{content:"󰗒"}.mdi-card-account-details-outline:before{content:"󰶫"}.mdi-card-account-details-star:before{content:"󰊣"}.mdi-card-account-details-star-outline:before{content:"󰛛"}.mdi-card-account-mail:before{content:"󰆎"}.mdi-card-account-mail-outline:before{content:"󰺘"}.mdi-card-account-phone:before{content:"󰺙"}.mdi-card-account-phone-outline:before{content:"󰺚"}.mdi-card-bulleted:before{content:"󰭰"}.mdi-card-bulleted-off:before{content:"󰭱"}.mdi-card-bulleted-off-outline:before{content:"󰭲"}.mdi-card-bulleted-outline:before{content:"󰭳"}.mdi-card-bulleted-settings:before{content:"󰭴"}.mdi-card-bulleted-settings-outline:before{content:"󰭵"}.mdi-card-minus:before{content:"󱘀"}.mdi-card-minus-outline:before{content:"󱘁"}.mdi-card-multiple:before{content:"󱟱"}.mdi-card-multiple-outline:before{content:"󱟲"}.mdi-card-off:before{content:"󱘂"}.mdi-card-off-outline:before{content:"󱘃"}.mdi-card-outline:before{content:"󰭶"}.mdi-card-plus:before{content:"󱇿"}.mdi-card-plus-outline:before{content:"󱈀"}.mdi-card-remove:before{content:"󱘄"}.mdi-card-remove-outline:before{content:"󱘅"}.mdi-card-search:before{content:"󱁴"}.mdi-card-search-outline:before{content:"󱁵"}.mdi-card-text:before{content:"󰭷"}.mdi-card-text-outline:before{content:"󰭸"}.mdi-cards:before{content:"󰘸"}.mdi-cards-club:before{content:"󰣎"}.mdi-cards-club-outline:before{content:"󱢟"}.mdi-cards-diamond:before{content:"󰣏"}.mdi-cards-diamond-outline:before{content:"󱀝"}.mdi-cards-heart:before{content:"󰣐"}.mdi-cards-heart-outline:before{content:"󱢠"}.mdi-cards-outline:before{content:"󰘹"}.mdi-cards-playing:before{content:"󱢡"}.mdi-cards-playing-club:before{content:"󱢢"}.mdi-cards-playing-club-multiple:before{content:"󱢣"}.mdi-cards-playing-club-multiple-outline:before{content:"󱢤"}.mdi-cards-playing-club-outline:before{content:"󱢥"}.mdi-cards-playing-diamond:before{content:"󱢦"}.mdi-cards-playing-diamond-multiple:before{content:"󱢧"}.mdi-cards-playing-diamond-multiple-outline:before{content:"󱢨"}.mdi-cards-playing-diamond-outline:before{content:"󱢩"}.mdi-cards-playing-heart:before{content:"󱢪"}.mdi-cards-playing-heart-multiple:before{content:"󱢫"}.mdi-cards-playing-heart-multiple-outline:before{content:"󱢬"}.mdi-cards-playing-heart-outline:before{content:"󱢭"}.mdi-cards-playing-outline:before{content:"󰘺"}.mdi-cards-playing-spade:before{content:"󱢮"}.mdi-cards-playing-spade-multiple:before{content:"󱢯"}.mdi-cards-playing-spade-multiple-outline:before{content:"󱢰"}.mdi-cards-playing-spade-outline:before{content:"󱢱"}.mdi-cards-spade:before{content:"󰣑"}.mdi-cards-spade-outline:before{content:"󱢲"}.mdi-cards-variant:before{content:"󰛇"}.mdi-carrot:before{content:"󰄏"}.mdi-cart:before{content:"󰄐"}.mdi-cart-arrow-down:before{content:"󰵦"}.mdi-cart-arrow-right:before{content:"󰱎"}.mdi-cart-arrow-up:before{content:"󰵧"}.mdi-cart-check:before{content:"󱗪"}.mdi-cart-heart:before{content:"󱣠"}.mdi-cart-minus:before{content:"󰵨"}.mdi-cart-off:before{content:"󰙫"}.mdi-cart-outline:before{content:"󰄑"}.mdi-cart-percent:before{content:"󱮮"}.mdi-cart-plus:before{content:"󰄒"}.mdi-cart-remove:before{content:"󰵩"}.mdi-cart-variant:before{content:"󱗫"}.mdi-case-sensitive-alt:before{content:"󰄓"}.mdi-cash:before{content:"󰄔"}.mdi-cash-100:before{content:"󰄕"}.mdi-cash-check:before{content:"󱓮"}.mdi-cash-clock:before{content:"󱪑"}.mdi-cash-edit:before{content:"󱲫"}.mdi-cash-fast:before{content:"󱡜"}.mdi-cash-lock:before{content:"󱓪"}.mdi-cash-lock-open:before{content:"󱓫"}.mdi-cash-marker:before{content:"󰶸"}.mdi-cash-minus:before{content:"󱉠"}.mdi-cash-multiple:before{content:"󰄖"}.mdi-cash-off:before{content:"󱱹"}.mdi-cash-plus:before{content:"󱉡"}.mdi-cash-refund:before{content:"󰪜"}.mdi-cash-register:before{content:"󰳴"}.mdi-cash-remove:before{content:"󱉢"}.mdi-cash-sync:before{content:"󱪒"}.mdi-cassette:before{content:"󰧔"}.mdi-cast:before{content:"󰄘"}.mdi-cast-audio:before{content:"󱀞"}.mdi-cast-audio-variant:before{content:"󱝉"}.mdi-cast-connected:before{content:"󰄙"}.mdi-cast-education:before{content:"󰸝"}.mdi-cast-off:before{content:"󰞊"}.mdi-cast-variant:before{content:"󰀟"}.mdi-castle:before{content:"󰄚"}.mdi-cat:before{content:"󰄛"}.mdi-cctv:before{content:"󰞮"}.mdi-cctv-off:before{content:"󱡟"}.mdi-ceiling-fan:before{content:"󱞗"}.mdi-ceiling-fan-light:before{content:"󱞘"}.mdi-ceiling-light:before{content:"󰝩"}.mdi-ceiling-light-multiple:before{content:"󱣝"}.mdi-ceiling-light-multiple-outline:before{content:"󱣞"}.mdi-ceiling-light-outline:before{content:"󱟇"}.mdi-cellphone:before{content:"󰄜"}.mdi-cellphone-arrow-down:before{content:"󰧕"}.mdi-cellphone-arrow-down-variant:before{content:"󱧅"}.mdi-cellphone-basic:before{content:"󰄞"}.mdi-cellphone-charging:before{content:"󱎗"}.mdi-cellphone-check:before{content:"󱟽"}.mdi-cellphone-cog:before{content:"󰥑"}.mdi-cellphone-dock:before{content:"󰄟"}.mdi-cellphone-information:before{content:"󰽁"}.mdi-cellphone-key:before{content:"󰥎"}.mdi-cellphone-link:before{content:"󰄡"}.mdi-cellphone-link-off:before{content:"󰄢"}.mdi-cellphone-lock:before{content:"󰥏"}.mdi-cellphone-marker:before{content:"󱠺"}.mdi-cellphone-message:before{content:"󰣓"}.mdi-cellphone-message-off:before{content:"󱃒"}.mdi-cellphone-nfc:before{content:"󰺐"}.mdi-cellphone-nfc-off:before{content:"󱋘"}.mdi-cellphone-off:before{content:"󰥐"}.mdi-cellphone-play:before{content:"󱀟"}.mdi-cellphone-remove:before{content:"󰥍"}.mdi-cellphone-screenshot:before{content:"󰨵"}.mdi-cellphone-settings:before{content:"󰄣"}.mdi-cellphone-sound:before{content:"󰥒"}.mdi-cellphone-text:before{content:"󰣒"}.mdi-cellphone-wireless:before{content:"󰠕"}.mdi-centos:before{content:"󱄚"}.mdi-certificate:before{content:"󰄤"}.mdi-certificate-outline:before{content:"󱆈"}.mdi-chair-rolling:before{content:"󰽈"}.mdi-chair-school:before{content:"󰄥"}.mdi-chandelier:before{content:"󱞓"}.mdi-charity:before{content:"󰱏"}.mdi-charity-search:before{content:"󱲂"}.mdi-chart-arc:before{content:"󰄦"}.mdi-chart-areaspline:before{content:"󰄧"}.mdi-chart-areaspline-variant:before{content:"󰺑"}.mdi-chart-bar:before{content:"󰄨"}.mdi-chart-bar-stacked:before{content:"󰝪"}.mdi-chart-bell-curve:before{content:"󰱐"}.mdi-chart-bell-curve-cumulative:before{content:"󰾧"}.mdi-chart-box:before{content:"󱕍"}.mdi-chart-box-multiple:before{content:"󱳍"}.mdi-chart-box-multiple-outline:before{content:"󱳎"}.mdi-chart-box-outline:before{content:"󱕎"}.mdi-chart-box-plus-outline:before{content:"󱕏"}.mdi-chart-bubble:before{content:"󰗣"}.mdi-chart-donut:before{content:"󰞯"}.mdi-chart-donut-variant:before{content:"󰞰"}.mdi-chart-gantt:before{content:"󰙬"}.mdi-chart-histogram:before{content:"󰄩"}.mdi-chart-line:before{content:"󰄪"}.mdi-chart-line-stacked:before{content:"󰝫"}.mdi-chart-line-variant:before{content:"󰞱"}.mdi-chart-multiline:before{content:"󰣔"}.mdi-chart-multiple:before{content:"󱈓"}.mdi-chart-pie:before{content:"󰄫"}.mdi-chart-pie-outline:before{content:"󱯟"}.mdi-chart-ppf:before{content:"󱎀"}.mdi-chart-sankey:before{content:"󱇟"}.mdi-chart-sankey-variant:before{content:"󱇠"}.mdi-chart-scatter-plot:before{content:"󰺒"}.mdi-chart-scatter-plot-hexbin:before{content:"󰙭"}.mdi-chart-timeline:before{content:"󰙮"}.mdi-chart-timeline-variant:before{content:"󰺓"}.mdi-chart-timeline-variant-shimmer:before{content:"󱖶"}.mdi-chart-tree:before{content:"󰺔"}.mdi-chart-waterfall:before{content:"󱤘"}.mdi-chat:before{content:"󰭹"}.mdi-chat-alert:before{content:"󰭺"}.mdi-chat-alert-outline:before{content:"󱋉"}.mdi-chat-minus:before{content:"󱐐"}.mdi-chat-minus-outline:before{content:"󱐓"}.mdi-chat-outline:before{content:"󰻞"}.mdi-chat-plus:before{content:"󱐏"}.mdi-chat-plus-outline:before{content:"󱐒"}.mdi-chat-processing:before{content:"󰭻"}.mdi-chat-processing-outline:before{content:"󱋊"}.mdi-chat-question:before{content:"󱜸"}.mdi-chat-question-outline:before{content:"󱜹"}.mdi-chat-remove:before{content:"󱐑"}.mdi-chat-remove-outline:before{content:"󱐔"}.mdi-chat-sleep:before{content:"󱋑"}.mdi-chat-sleep-outline:before{content:"󱋒"}.mdi-check:before{content:"󰄬"}.mdi-check-all:before{content:"󰄭"}.mdi-check-bold:before{content:"󰸞"}.mdi-check-circle:before{content:"󰗠"}.mdi-check-circle-outline:before{content:"󰗡"}.mdi-check-decagram:before{content:"󰞑"}.mdi-check-decagram-outline:before{content:"󱝀"}.mdi-check-network:before{content:"󰱓"}.mdi-check-network-outline:before{content:"󰱔"}.mdi-check-outline:before{content:"󰡕"}.mdi-check-underline:before{content:"󰸟"}.mdi-check-underline-circle:before{content:"󰸠"}.mdi-check-underline-circle-outline:before{content:"󰸡"}.mdi-checkbook:before{content:"󰪝"}.mdi-checkbook-arrow-left:before{content:"󱰝"}.mdi-checkbook-arrow-right:before{content:"󱰞"}.mdi-checkbox-blank:before{content:"󰄮"}.mdi-checkbox-blank-badge:before{content:"󱅶"}.mdi-checkbox-blank-badge-outline:before{content:"󰄗"}.mdi-checkbox-blank-circle:before{content:"󰄯"}.mdi-checkbox-blank-circle-outline:before{content:"󰄰"}.mdi-checkbox-blank-off:before{content:"󱋬"}.mdi-checkbox-blank-off-outline:before{content:"󱋭"}.mdi-checkbox-blank-outline:before{content:"󰄱"}.mdi-checkbox-intermediate:before{content:"󰡖"}.mdi-checkbox-intermediate-variant:before{content:"󱭔"}.mdi-checkbox-marked:before{content:"󰄲"}.mdi-checkbox-marked-circle:before{content:"󰄳"}.mdi-checkbox-marked-circle-auto-outline:before{content:"󱰦"}.mdi-checkbox-marked-circle-minus-outline:before{content:"󱰧"}.mdi-checkbox-marked-circle-outline:before{content:"󰄴"}.mdi-checkbox-marked-circle-plus-outline:before{content:"󱤧"}.mdi-checkbox-marked-outline:before{content:"󰄵"}.mdi-checkbox-multiple-blank:before{content:"󰄶"}.mdi-checkbox-multiple-blank-circle:before{content:"󰘻"}.mdi-checkbox-multiple-blank-circle-outline:before{content:"󰘼"}.mdi-checkbox-multiple-blank-outline:before{content:"󰄷"}.mdi-checkbox-multiple-marked:before{content:"󰄸"}.mdi-checkbox-multiple-marked-circle:before{content:"󰘽"}.mdi-checkbox-multiple-marked-circle-outline:before{content:"󰘾"}.mdi-checkbox-multiple-marked-outline:before{content:"󰄹"}.mdi-checkbox-multiple-outline:before{content:"󰱑"}.mdi-checkbox-outline:before{content:"󰱒"}.mdi-checkerboard:before{content:"󰄺"}.mdi-checkerboard-minus:before{content:"󱈂"}.mdi-checkerboard-plus:before{content:"󱈁"}.mdi-checkerboard-remove:before{content:"󱈃"}.mdi-cheese:before{content:"󱊹"}.mdi-cheese-off:before{content:"󱏮"}.mdi-chef-hat:before{content:"󰭼"}.mdi-chemical-weapon:before{content:"󰄻"}.mdi-chess-bishop:before{content:"󰡜"}.mdi-chess-king:before{content:"󰡗"}.mdi-chess-knight:before{content:"󰡘"}.mdi-chess-pawn:before{content:"󰡙"}.mdi-chess-queen:before{content:"󰡚"}.mdi-chess-rook:before{content:"󰡛"}.mdi-chevron-double-down:before{content:"󰄼"}.mdi-chevron-double-left:before{content:"󰄽"}.mdi-chevron-double-right:before{content:"󰄾"}.mdi-chevron-double-up:before{content:"󰄿"}.mdi-chevron-down:before{content:"󰅀"}.mdi-chevron-down-box:before{content:"󰧖"}.mdi-chevron-down-box-outline:before{content:"󰧗"}.mdi-chevron-down-circle:before{content:"󰬦"}.mdi-chevron-down-circle-outline:before{content:"󰬧"}.mdi-chevron-left:before{content:"󰅁"}.mdi-chevron-left-box:before{content:"󰧘"}.mdi-chevron-left-box-outline:before{content:"󰧙"}.mdi-chevron-left-circle:before{content:"󰬨"}.mdi-chevron-left-circle-outline:before{content:"󰬩"}.mdi-chevron-right:before{content:"󰅂"}.mdi-chevron-right-box:before{content:"󰧚"}.mdi-chevron-right-box-outline:before{content:"󰧛"}.mdi-chevron-right-circle:before{content:"󰬪"}.mdi-chevron-right-circle-outline:before{content:"󰬫"}.mdi-chevron-triple-down:before{content:"󰶹"}.mdi-chevron-triple-left:before{content:"󰶺"}.mdi-chevron-triple-right:before{content:"󰶻"}.mdi-chevron-triple-up:before{content:"󰶼"}.mdi-chevron-up:before{content:"󰅃"}.mdi-chevron-up-box:before{content:"󰧜"}.mdi-chevron-up-box-outline:before{content:"󰧝"}.mdi-chevron-up-circle:before{content:"󰬬"}.mdi-chevron-up-circle-outline:before{content:"󰬭"}.mdi-chili-alert:before{content:"󱟪"}.mdi-chili-alert-outline:before{content:"󱟫"}.mdi-chili-hot:before{content:"󰞲"}.mdi-chili-hot-outline:before{content:"󱟬"}.mdi-chili-medium:before{content:"󰞳"}.mdi-chili-medium-outline:before{content:"󱟭"}.mdi-chili-mild:before{content:"󰞴"}.mdi-chili-mild-outline:before{content:"󱟮"}.mdi-chili-off:before{content:"󱑧"}.mdi-chili-off-outline:before{content:"󱟯"}.mdi-chip:before{content:"󰘚"}.mdi-church:before{content:"󰅄"}.mdi-church-outline:before{content:"󱬂"}.mdi-cigar:before{content:"󱆉"}.mdi-cigar-off:before{content:"󱐛"}.mdi-circle:before{content:"󰝥"}.mdi-circle-box:before{content:"󱗜"}.mdi-circle-box-outline:before{content:"󱗝"}.mdi-circle-double:before{content:"󰺕"}.mdi-circle-edit-outline:before{content:"󰣕"}.mdi-circle-expand:before{content:"󰺖"}.mdi-circle-half:before{content:"󱎕"}.mdi-circle-half-full:before{content:"󱎖"}.mdi-circle-medium:before{content:"󰧞"}.mdi-circle-multiple:before{content:"󰬸"}.mdi-circle-multiple-outline:before{content:"󰚕"}.mdi-circle-off-outline:before{content:"󱃓"}.mdi-circle-opacity:before{content:"󱡓"}.mdi-circle-outline:before{content:"󰝦"}.mdi-circle-slice-1:before{content:"󰪞"}.mdi-circle-slice-2:before{content:"󰪟"}.mdi-circle-slice-3:before{content:"󰪠"}.mdi-circle-slice-4:before{content:"󰪡"}.mdi-circle-slice-5:before{content:"󰪢"}.mdi-circle-slice-6:before{content:"󰪣"}.mdi-circle-slice-7:before{content:"󰪤"}.mdi-circle-slice-8:before{content:"󰪥"}.mdi-circle-small:before{content:"󰧟"}.mdi-circular-saw:before{content:"󰸢"}.mdi-city:before{content:"󰅆"}.mdi-city-switch:before{content:"󱰨"}.mdi-city-variant:before{content:"󰨶"}.mdi-city-variant-outline:before{content:"󰨷"}.mdi-clipboard:before{content:"󰅇"}.mdi-clipboard-account:before{content:"󰅈"}.mdi-clipboard-account-outline:before{content:"󰱕"}.mdi-clipboard-alert:before{content:"󰅉"}.mdi-clipboard-alert-outline:before{content:"󰳷"}.mdi-clipboard-arrow-down:before{content:"󰅊"}.mdi-clipboard-arrow-down-outline:before{content:"󰱖"}.mdi-clipboard-arrow-left:before{content:"󰅋"}.mdi-clipboard-arrow-left-outline:before{content:"󰳸"}.mdi-clipboard-arrow-right:before{content:"󰳹"}.mdi-clipboard-arrow-right-outline:before{content:"󰳺"}.mdi-clipboard-arrow-up:before{content:"󰱗"}.mdi-clipboard-arrow-up-outline:before{content:"󰱘"}.mdi-clipboard-check:before{content:"󰅎"}.mdi-clipboard-check-multiple:before{content:"󱉣"}.mdi-clipboard-check-multiple-outline:before{content:"󱉤"}.mdi-clipboard-check-outline:before{content:"󰢨"}.mdi-clipboard-clock:before{content:"󱛢"}.mdi-clipboard-clock-outline:before{content:"󱛣"}.mdi-clipboard-edit:before{content:"󱓥"}.mdi-clipboard-edit-outline:before{content:"󱓦"}.mdi-clipboard-file:before{content:"󱉥"}.mdi-clipboard-file-outline:before{content:"󱉦"}.mdi-clipboard-flow:before{content:"󰛈"}.mdi-clipboard-flow-outline:before{content:"󱄗"}.mdi-clipboard-list:before{content:"󱃔"}.mdi-clipboard-list-outline:before{content:"󱃕"}.mdi-clipboard-minus:before{content:"󱘘"}.mdi-clipboard-minus-outline:before{content:"󱘙"}.mdi-clipboard-multiple:before{content:"󱉧"}.mdi-clipboard-multiple-outline:before{content:"󱉨"}.mdi-clipboard-off:before{content:"󱘚"}.mdi-clipboard-off-outline:before{content:"󱘛"}.mdi-clipboard-outline:before{content:"󰅌"}.mdi-clipboard-play:before{content:"󰱙"}.mdi-clipboard-play-multiple:before{content:"󱉩"}.mdi-clipboard-play-multiple-outline:before{content:"󱉪"}.mdi-clipboard-play-outline:before{content:"󰱚"}.mdi-clipboard-plus:before{content:"󰝑"}.mdi-clipboard-plus-outline:before{content:"󱌟"}.mdi-clipboard-pulse:before{content:"󰡝"}.mdi-clipboard-pulse-outline:before{content:"󰡞"}.mdi-clipboard-remove:before{content:"󱘜"}.mdi-clipboard-remove-outline:before{content:"󱘝"}.mdi-clipboard-search:before{content:"󱘞"}.mdi-clipboard-search-outline:before{content:"󱘟"}.mdi-clipboard-text:before{content:"󰅍"}.mdi-clipboard-text-clock:before{content:"󱣹"}.mdi-clipboard-text-clock-outline:before{content:"󱣺"}.mdi-clipboard-text-multiple:before{content:"󱉫"}.mdi-clipboard-text-multiple-outline:before{content:"󱉬"}.mdi-clipboard-text-off:before{content:"󱘠"}.mdi-clipboard-text-off-outline:before{content:"󱘡"}.mdi-clipboard-text-outline:before{content:"󰨸"}.mdi-clipboard-text-play:before{content:"󰱛"}.mdi-clipboard-text-play-outline:before{content:"󰱜"}.mdi-clipboard-text-search:before{content:"󱘢"}.mdi-clipboard-text-search-outline:before{content:"󱘣"}.mdi-clippy:before{content:"󰅏"}.mdi-clock:before{content:"󰥔"}.mdi-clock-alert:before{content:"󰥕"}.mdi-clock-alert-outline:before{content:"󰗎"}.mdi-clock-check:before{content:"󰾨"}.mdi-clock-check-outline:before{content:"󰾩"}.mdi-clock-digital:before{content:"󰺗"}.mdi-clock-edit:before{content:"󱦺"}.mdi-clock-edit-outline:before{content:"󱦻"}.mdi-clock-end:before{content:"󰅑"}.mdi-clock-fast:before{content:"󰅒"}.mdi-clock-in:before{content:"󰅓"}.mdi-clock-minus:before{content:"󱡣"}.mdi-clock-minus-outline:before{content:"󱡤"}.mdi-clock-out:before{content:"󰅔"}.mdi-clock-outline:before{content:"󰅐"}.mdi-clock-plus:before{content:"󱡡"}.mdi-clock-plus-outline:before{content:"󱡢"}.mdi-clock-remove:before{content:"󱡥"}.mdi-clock-remove-outline:before{content:"󱡦"}.mdi-clock-star-four-points:before{content:"󱰩"}.mdi-clock-star-four-points-outline:before{content:"󱰪"}.mdi-clock-start:before{content:"󰅕"}.mdi-clock-time-eight:before{content:"󱑆"}.mdi-clock-time-eight-outline:before{content:"󱑒"}.mdi-clock-time-eleven:before{content:"󱑉"}.mdi-clock-time-eleven-outline:before{content:"󱑕"}.mdi-clock-time-five:before{content:"󱑃"}.mdi-clock-time-five-outline:before{content:"󱑏"}.mdi-clock-time-four:before{content:"󱑂"}.mdi-clock-time-four-outline:before{content:"󱑎"}.mdi-clock-time-nine:before{content:"󱑇"}.mdi-clock-time-nine-outline:before{content:"󱑓"}.mdi-clock-time-one:before{content:"󱐿"}.mdi-clock-time-one-outline:before{content:"󱑋"}.mdi-clock-time-seven:before{content:"󱑅"}.mdi-clock-time-seven-outline:before{content:"󱑑"}.mdi-clock-time-six:before{content:"󱑄"}.mdi-clock-time-six-outline:before{content:"󱑐"}.mdi-clock-time-ten:before{content:"󱑈"}.mdi-clock-time-ten-outline:before{content:"󱑔"}.mdi-clock-time-three:before{content:"󱑁"}.mdi-clock-time-three-outline:before{content:"󱑍"}.mdi-clock-time-twelve:before{content:"󱑊"}.mdi-clock-time-twelve-outline:before{content:"󱑖"}.mdi-clock-time-two:before{content:"󱑀"}.mdi-clock-time-two-outline:before{content:"󱑌"}.mdi-close:before{content:"󰅖"}.mdi-close-box:before{content:"󰅗"}.mdi-close-box-multiple:before{content:"󰱝"}.mdi-close-box-multiple-outline:before{content:"󰱞"}.mdi-close-box-outline:before{content:"󰅘"}.mdi-close-circle:before{content:"󰅙"}.mdi-close-circle-multiple:before{content:"󰘪"}.mdi-close-circle-multiple-outline:before{content:"󰢃"}.mdi-close-circle-outline:before{content:"󰅚"}.mdi-close-network:before{content:"󰅛"}.mdi-close-network-outline:before{content:"󰱟"}.mdi-close-octagon:before{content:"󰅜"}.mdi-close-octagon-outline:before{content:"󰅝"}.mdi-close-outline:before{content:"󰛉"}.mdi-close-thick:before{content:"󱎘"}.mdi-closed-caption:before{content:"󰅞"}.mdi-closed-caption-outline:before{content:"󰶽"}.mdi-cloud:before{content:"󰅟"}.mdi-cloud-alert:before{content:"󰧠"}.mdi-cloud-alert-outline:before{content:"󱯠"}.mdi-cloud-arrow-down:before{content:"󱯡"}.mdi-cloud-arrow-down-outline:before{content:"󱯢"}.mdi-cloud-arrow-left:before{content:"󱯣"}.mdi-cloud-arrow-left-outline:before{content:"󱯤"}.mdi-cloud-arrow-right:before{content:"󱯥"}.mdi-cloud-arrow-right-outline:before{content:"󱯦"}.mdi-cloud-arrow-up:before{content:"󱯧"}.mdi-cloud-arrow-up-outline:before{content:"󱯨"}.mdi-cloud-braces:before{content:"󰞵"}.mdi-cloud-cancel:before{content:"󱯩"}.mdi-cloud-cancel-outline:before{content:"󱯪"}.mdi-cloud-check:before{content:"󱯫"}.mdi-cloud-check-outline:before{content:"󱯬"}.mdi-cloud-check-variant:before{content:"󰅠"}.mdi-cloud-check-variant-outline:before{content:"󱋌"}.mdi-cloud-circle:before{content:"󰅡"}.mdi-cloud-circle-outline:before{content:"󱯭"}.mdi-cloud-clock:before{content:"󱯮"}.mdi-cloud-clock-outline:before{content:"󱯯"}.mdi-cloud-cog:before{content:"󱯰"}.mdi-cloud-cog-outline:before{content:"󱯱"}.mdi-cloud-download:before{content:"󰅢"}.mdi-cloud-download-outline:before{content:"󰭽"}.mdi-cloud-key:before{content:"󱲡"}.mdi-cloud-key-outline:before{content:"󱲢"}.mdi-cloud-lock:before{content:"󱇱"}.mdi-cloud-lock-open:before{content:"󱯲"}.mdi-cloud-lock-open-outline:before{content:"󱯳"}.mdi-cloud-lock-outline:before{content:"󱇲"}.mdi-cloud-minus:before{content:"󱯴"}.mdi-cloud-minus-outline:before{content:"󱯵"}.mdi-cloud-off:before{content:"󱯶"}.mdi-cloud-off-outline:before{content:"󰅤"}.mdi-cloud-outline:before{content:"󰅣"}.mdi-cloud-percent:before{content:"󱨵"}.mdi-cloud-percent-outline:before{content:"󱨶"}.mdi-cloud-plus:before{content:"󱯷"}.mdi-cloud-plus-outline:before{content:"󱯸"}.mdi-cloud-print:before{content:"󰅥"}.mdi-cloud-print-outline:before{content:"󰅦"}.mdi-cloud-question:before{content:"󰨹"}.mdi-cloud-question-outline:before{content:"󱯹"}.mdi-cloud-refresh:before{content:"󱯺"}.mdi-cloud-refresh-outline:before{content:"󱯻"}.mdi-cloud-refresh-variant:before{content:"󰔪"}.mdi-cloud-refresh-variant-outline:before{content:"󱯼"}.mdi-cloud-remove:before{content:"󱯽"}.mdi-cloud-remove-outline:before{content:"󱯾"}.mdi-cloud-search:before{content:"󰥖"}.mdi-cloud-search-outline:before{content:"󰥗"}.mdi-cloud-sync:before{content:"󰘿"}.mdi-cloud-sync-outline:before{content:"󱋖"}.mdi-cloud-tags:before{content:"󰞶"}.mdi-cloud-upload:before{content:"󰅧"}.mdi-cloud-upload-outline:before{content:"󰭾"}.mdi-clouds:before{content:"󱮕"}.mdi-clover:before{content:"󰠖"}.mdi-clover-outline:before{content:"󱱢"}.mdi-coach-lamp:before{content:"󱀠"}.mdi-coach-lamp-variant:before{content:"󱨷"}.mdi-coat-rack:before{content:"󱂞"}.mdi-code-array:before{content:"󰅨"}.mdi-code-block-braces:before{content:"󱲃"}.mdi-code-block-brackets:before{content:"󱲄"}.mdi-code-block-parentheses:before{content:"󱲅"}.mdi-code-block-tags:before{content:"󱲆"}.mdi-code-braces:before{content:"󰅩"}.mdi-code-braces-box:before{content:"󱃖"}.mdi-code-brackets:before{content:"󰅪"}.mdi-code-equal:before{content:"󰅫"}.mdi-code-greater-than:before{content:"󰅬"}.mdi-code-greater-than-or-equal:before{content:"󰅭"}.mdi-code-json:before{content:"󰘦"}.mdi-code-less-than:before{content:"󰅮"}.mdi-code-less-than-or-equal:before{content:"󰅯"}.mdi-code-not-equal:before{content:"󰅰"}.mdi-code-not-equal-variant:before{content:"󰅱"}.mdi-code-parentheses:before{content:"󰅲"}.mdi-code-parentheses-box:before{content:"󱃗"}.mdi-code-string:before{content:"󰅳"}.mdi-code-tags:before{content:"󰅴"}.mdi-code-tags-check:before{content:"󰚔"}.mdi-codepen:before{content:"󰅵"}.mdi-coffee:before{content:"󰅶"}.mdi-coffee-maker:before{content:"󱂟"}.mdi-coffee-maker-check:before{content:"󱤱"}.mdi-coffee-maker-check-outline:before{content:"󱤲"}.mdi-coffee-maker-outline:before{content:"󱠛"}.mdi-coffee-off:before{content:"󰾪"}.mdi-coffee-off-outline:before{content:"󰾫"}.mdi-coffee-outline:before{content:"󰛊"}.mdi-coffee-to-go:before{content:"󰅷"}.mdi-coffee-to-go-outline:before{content:"󱌎"}.mdi-coffin:before{content:"󰭿"}.mdi-cog:before{content:"󰒓"}.mdi-cog-box:before{content:"󰒔"}.mdi-cog-clockwise:before{content:"󱇝"}.mdi-cog-counterclockwise:before{content:"󱇞"}.mdi-cog-off:before{content:"󱏎"}.mdi-cog-off-outline:before{content:"󱏏"}.mdi-cog-outline:before{content:"󰢻"}.mdi-cog-pause:before{content:"󱤳"}.mdi-cog-pause-outline:before{content:"󱤴"}.mdi-cog-play:before{content:"󱤵"}.mdi-cog-play-outline:before{content:"󱤶"}.mdi-cog-refresh:before{content:"󱑞"}.mdi-cog-refresh-outline:before{content:"󱑟"}.mdi-cog-stop:before{content:"󱤷"}.mdi-cog-stop-outline:before{content:"󱤸"}.mdi-cog-sync:before{content:"󱑠"}.mdi-cog-sync-outline:before{content:"󱑡"}.mdi-cog-transfer:before{content:"󱁛"}.mdi-cog-transfer-outline:before{content:"󱁜"}.mdi-cogs:before{content:"󰣖"}.mdi-collage:before{content:"󰙀"}.mdi-collapse-all:before{content:"󰪦"}.mdi-collapse-all-outline:before{content:"󰪧"}.mdi-color-helper:before{content:"󰅹"}.mdi-comma:before{content:"󰸣"}.mdi-comma-box:before{content:"󰸫"}.mdi-comma-box-outline:before{content:"󰸤"}.mdi-comma-circle:before{content:"󰸥"}.mdi-comma-circle-outline:before{content:"󰸦"}.mdi-comment:before{content:"󰅺"}.mdi-comment-account:before{content:"󰅻"}.mdi-comment-account-outline:before{content:"󰅼"}.mdi-comment-alert:before{content:"󰅽"}.mdi-comment-alert-outline:before{content:"󰅾"}.mdi-comment-arrow-left:before{content:"󰧡"}.mdi-comment-arrow-left-outline:before{content:"󰧢"}.mdi-comment-arrow-right:before{content:"󰧣"}.mdi-comment-arrow-right-outline:before{content:"󰧤"}.mdi-comment-bookmark:before{content:"󱖮"}.mdi-comment-bookmark-outline:before{content:"󱖯"}.mdi-comment-check:before{content:"󰅿"}.mdi-comment-check-outline:before{content:"󰆀"}.mdi-comment-edit:before{content:"󱆿"}.mdi-comment-edit-outline:before{content:"󱋄"}.mdi-comment-eye:before{content:"󰨺"}.mdi-comment-eye-outline:before{content:"󰨻"}.mdi-comment-flash:before{content:"󱖰"}.mdi-comment-flash-outline:before{content:"󱖱"}.mdi-comment-minus:before{content:"󱗟"}.mdi-comment-minus-outline:before{content:"󱗠"}.mdi-comment-multiple:before{content:"󰡟"}.mdi-comment-multiple-outline:before{content:"󰆁"}.mdi-comment-off:before{content:"󱗡"}.mdi-comment-off-outline:before{content:"󱗢"}.mdi-comment-outline:before{content:"󰆂"}.mdi-comment-plus:before{content:"󰧥"}.mdi-comment-plus-outline:before{content:"󰆃"}.mdi-comment-processing:before{content:"󰆄"}.mdi-comment-processing-outline:before{content:"󰆅"}.mdi-comment-question:before{content:"󰠗"}.mdi-comment-question-outline:before{content:"󰆆"}.mdi-comment-quote:before{content:"󱀡"}.mdi-comment-quote-outline:before{content:"󱀢"}.mdi-comment-remove:before{content:"󰗞"}.mdi-comment-remove-outline:before{content:"󰆇"}.mdi-comment-search:before{content:"󰨼"}.mdi-comment-search-outline:before{content:"󰨽"}.mdi-comment-text:before{content:"󰆈"}.mdi-comment-text-multiple:before{content:"󰡠"}.mdi-comment-text-multiple-outline:before{content:"󰡡"}.mdi-comment-text-outline:before{content:"󰆉"}.mdi-compare:before{content:"󰆊"}.mdi-compare-horizontal:before{content:"󱒒"}.mdi-compare-remove:before{content:"󱢳"}.mdi-compare-vertical:before{content:"󱒓"}.mdi-compass:before{content:"󰆋"}.mdi-compass-off:before{content:"󰮀"}.mdi-compass-off-outline:before{content:"󰮁"}.mdi-compass-outline:before{content:"󰆌"}.mdi-compass-rose:before{content:"󱎂"}.mdi-compost:before{content:"󱨸"}.mdi-cone:before{content:"󱥌"}.mdi-cone-off:before{content:"󱥍"}.mdi-connection:before{content:"󱘖"}.mdi-console:before{content:"󰆍"}.mdi-console-line:before{content:"󰞷"}.mdi-console-network:before{content:"󰢩"}.mdi-console-network-outline:before{content:"󰱠"}.mdi-consolidate:before{content:"󱃘"}.mdi-contactless-payment:before{content:"󰵪"}.mdi-contactless-payment-circle:before{content:"󰌡"}.mdi-contactless-payment-circle-outline:before{content:"󰐈"}.mdi-contacts:before{content:"󰛋"}.mdi-contacts-outline:before{content:"󰖸"}.mdi-contain:before{content:"󰨾"}.mdi-contain-end:before{content:"󰨿"}.mdi-contain-start:before{content:"󰩀"}.mdi-content-copy:before{content:"󰆏"}.mdi-content-cut:before{content:"󰆐"}.mdi-content-duplicate:before{content:"󰆑"}.mdi-content-paste:before{content:"󰆒"}.mdi-content-save:before{content:"󰆓"}.mdi-content-save-alert:before{content:"󰽂"}.mdi-content-save-alert-outline:before{content:"󰽃"}.mdi-content-save-all:before{content:"󰆔"}.mdi-content-save-all-outline:before{content:"󰽄"}.mdi-content-save-check:before{content:"󱣪"}.mdi-content-save-check-outline:before{content:"󱣫"}.mdi-content-save-cog:before{content:"󱑛"}.mdi-content-save-cog-outline:before{content:"󱑜"}.mdi-content-save-edit:before{content:"󰳻"}.mdi-content-save-edit-outline:before{content:"󰳼"}.mdi-content-save-minus:before{content:"󱭃"}.mdi-content-save-minus-outline:before{content:"󱭄"}.mdi-content-save-move:before{content:"󰸧"}.mdi-content-save-move-outline:before{content:"󰸨"}.mdi-content-save-off:before{content:"󱙃"}.mdi-content-save-off-outline:before{content:"󱙄"}.mdi-content-save-outline:before{content:"󰠘"}.mdi-content-save-plus:before{content:"󱭁"}.mdi-content-save-plus-outline:before{content:"󱭂"}.mdi-content-save-settings:before{content:"󰘛"}.mdi-content-save-settings-outline:before{content:"󰬮"}.mdi-contrast:before{content:"󰆕"}.mdi-contrast-box:before{content:"󰆖"}.mdi-contrast-circle:before{content:"󰆗"}.mdi-controller:before{content:"󰊴"}.mdi-controller-classic:before{content:"󰮂"}.mdi-controller-classic-outline:before{content:"󰮃"}.mdi-controller-off:before{content:"󰊵"}.mdi-cookie:before{content:"󰆘"}.mdi-cookie-alert:before{content:"󱛐"}.mdi-cookie-alert-outline:before{content:"󱛑"}.mdi-cookie-check:before{content:"󱛒"}.mdi-cookie-check-outline:before{content:"󱛓"}.mdi-cookie-clock:before{content:"󱛤"}.mdi-cookie-clock-outline:before{content:"󱛥"}.mdi-cookie-cog:before{content:"󱛔"}.mdi-cookie-cog-outline:before{content:"󱛕"}.mdi-cookie-edit:before{content:"󱛦"}.mdi-cookie-edit-outline:before{content:"󱛧"}.mdi-cookie-lock:before{content:"󱛨"}.mdi-cookie-lock-outline:before{content:"󱛩"}.mdi-cookie-minus:before{content:"󱛚"}.mdi-cookie-minus-outline:before{content:"󱛛"}.mdi-cookie-off:before{content:"󱛪"}.mdi-cookie-off-outline:before{content:"󱛫"}.mdi-cookie-outline:before{content:"󱛞"}.mdi-cookie-plus:before{content:"󱛖"}.mdi-cookie-plus-outline:before{content:"󱛗"}.mdi-cookie-refresh:before{content:"󱛬"}.mdi-cookie-refresh-outline:before{content:"󱛭"}.mdi-cookie-remove:before{content:"󱛘"}.mdi-cookie-remove-outline:before{content:"󱛙"}.mdi-cookie-settings:before{content:"󱛜"}.mdi-cookie-settings-outline:before{content:"󱛝"}.mdi-coolant-temperature:before{content:"󰏈"}.mdi-copyleft:before{content:"󱤹"}.mdi-copyright:before{content:"󰗦"}.mdi-cordova:before{content:"󰥘"}.mdi-corn:before{content:"󰞸"}.mdi-corn-off:before{content:"󱏯"}.mdi-cosine-wave:before{content:"󱑹"}.mdi-counter:before{content:"󰆙"}.mdi-countertop:before{content:"󱠜"}.mdi-countertop-outline:before{content:"󱠝"}.mdi-cow:before{content:"󰆚"}.mdi-cow-off:before{content:"󱣼"}.mdi-cpu-32-bit:before{content:"󰻟"}.mdi-cpu-64-bit:before{content:"󰻠"}.mdi-cradle:before{content:"󱦋"}.mdi-cradle-outline:before{content:"󱦑"}.mdi-crane:before{content:"󰡢"}.mdi-creation:before{content:"󰙴"}.mdi-creation-outline:before{content:"󱰫"}.mdi-creative-commons:before{content:"󰵫"}.mdi-credit-card:before{content:"󰿯"}.mdi-credit-card-check:before{content:"󱏐"}.mdi-credit-card-check-outline:before{content:"󱏑"}.mdi-credit-card-chip:before{content:"󱤏"}.mdi-credit-card-chip-outline:before{content:"󱤐"}.mdi-credit-card-clock:before{content:"󰻡"}.mdi-credit-card-clock-outline:before{content:"󰻢"}.mdi-credit-card-edit:before{content:"󱟗"}.mdi-credit-card-edit-outline:before{content:"󱟘"}.mdi-credit-card-fast:before{content:"󱤑"}.mdi-credit-card-fast-outline:before{content:"󱤒"}.mdi-credit-card-lock:before{content:"󱣧"}.mdi-credit-card-lock-outline:before{content:"󱣨"}.mdi-credit-card-marker:before{content:"󰚨"}.mdi-credit-card-marker-outline:before{content:"󰶾"}.mdi-credit-card-minus:before{content:"󰾬"}.mdi-credit-card-minus-outline:before{content:"󰾭"}.mdi-credit-card-multiple:before{content:"󰿰"}.mdi-credit-card-multiple-outline:before{content:"󰆜"}.mdi-credit-card-off:before{content:"󰿱"}.mdi-credit-card-off-outline:before{content:"󰗤"}.mdi-credit-card-outline:before{content:"󰆛"}.mdi-credit-card-plus:before{content:"󰿲"}.mdi-credit-card-plus-outline:before{content:"󰙶"}.mdi-credit-card-refresh:before{content:"󱙅"}.mdi-credit-card-refresh-outline:before{content:"󱙆"}.mdi-credit-card-refund:before{content:"󰿳"}.mdi-credit-card-refund-outline:before{content:"󰪨"}.mdi-credit-card-remove:before{content:"󰾮"}.mdi-credit-card-remove-outline:before{content:"󰾯"}.mdi-credit-card-scan:before{content:"󰿴"}.mdi-credit-card-scan-outline:before{content:"󰆝"}.mdi-credit-card-search:before{content:"󱙇"}.mdi-credit-card-search-outline:before{content:"󱙈"}.mdi-credit-card-settings:before{content:"󰿵"}.mdi-credit-card-settings-outline:before{content:"󰣗"}.mdi-credit-card-sync:before{content:"󱙉"}.mdi-credit-card-sync-outline:before{content:"󱙊"}.mdi-credit-card-wireless:before{content:"󰠂"}.mdi-credit-card-wireless-off:before{content:"󰕺"}.mdi-credit-card-wireless-off-outline:before{content:"󰕻"}.mdi-credit-card-wireless-outline:before{content:"󰵬"}.mdi-cricket:before{content:"󰵭"}.mdi-crop:before{content:"󰆞"}.mdi-crop-free:before{content:"󰆟"}.mdi-crop-landscape:before{content:"󰆠"}.mdi-crop-portrait:before{content:"󰆡"}.mdi-crop-rotate:before{content:"󰚖"}.mdi-crop-square:before{content:"󰆢"}.mdi-cross:before{content:"󰥓"}.mdi-cross-bolnisi:before{content:"󰳭"}.mdi-cross-celtic:before{content:"󰳵"}.mdi-cross-outline:before{content:"󰳶"}.mdi-crosshairs:before{content:"󰆣"}.mdi-crosshairs-gps:before{content:"󰆤"}.mdi-crosshairs-off:before{content:"󰽅"}.mdi-crosshairs-question:before{content:"󱄶"}.mdi-crowd:before{content:"󱥵"}.mdi-crown:before{content:"󰆥"}.mdi-crown-circle:before{content:"󱟜"}.mdi-crown-circle-outline:before{content:"󱟝"}.mdi-crown-outline:before{content:"󱇐"}.mdi-cryengine:before{content:"󰥙"}.mdi-crystal-ball:before{content:"󰬯"}.mdi-cube:before{content:"󰆦"}.mdi-cube-off:before{content:"󱐜"}.mdi-cube-off-outline:before{content:"󱐝"}.mdi-cube-outline:before{content:"󰆧"}.mdi-cube-scan:before{content:"󰮄"}.mdi-cube-send:before{content:"󰆨"}.mdi-cube-unfolded:before{content:"󰆩"}.mdi-cup:before{content:"󰆪"}.mdi-cup-off:before{content:"󰗥"}.mdi-cup-off-outline:before{content:"󱍽"}.mdi-cup-outline:before{content:"󱌏"}.mdi-cup-water:before{content:"󰆫"}.mdi-cupboard:before{content:"󰽆"}.mdi-cupboard-outline:before{content:"󰽇"}.mdi-cupcake:before{content:"󰥚"}.mdi-curling:before{content:"󰡣"}.mdi-currency-bdt:before{content:"󰡤"}.mdi-currency-brl:before{content:"󰮅"}.mdi-currency-btc:before{content:"󰆬"}.mdi-currency-cny:before{content:"󰞺"}.mdi-currency-eth:before{content:"󰞻"}.mdi-currency-eur:before{content:"󰆭"}.mdi-currency-eur-off:before{content:"󱌕"}.mdi-currency-fra:before{content:"󱨹"}.mdi-currency-gbp:before{content:"󰆮"}.mdi-currency-ils:before{content:"󰱡"}.mdi-currency-inr:before{content:"󰆯"}.mdi-currency-jpy:before{content:"󰞼"}.mdi-currency-krw:before{content:"󰞽"}.mdi-currency-kzt:before{content:"󰡥"}.mdi-currency-mnt:before{content:"󱔒"}.mdi-currency-ngn:before{content:"󰆰"}.mdi-currency-php:before{content:"󰧦"}.mdi-currency-rial:before{content:"󰺜"}.mdi-currency-rub:before{content:"󰆱"}.mdi-currency-rupee:before{content:"󱥶"}.mdi-currency-sign:before{content:"󰞾"}.mdi-currency-thb:before{content:"󱰅"}.mdi-currency-try:before{content:"󰆲"}.mdi-currency-twd:before{content:"󰞿"}.mdi-currency-uah:before{content:"󱮛"}.mdi-currency-usd:before{content:"󰇁"}.mdi-currency-usd-off:before{content:"󰙺"}.mdi-current-ac:before{content:"󱒀"}.mdi-current-dc:before{content:"󰥜"}.mdi-cursor-default:before{content:"󰇀"}.mdi-cursor-default-click:before{content:"󰳽"}.mdi-cursor-default-click-outline:before{content:"󰳾"}.mdi-cursor-default-gesture:before{content:"󱄧"}.mdi-cursor-default-gesture-outline:before{content:"󱄨"}.mdi-cursor-default-outline:before{content:"󰆿"}.mdi-cursor-move:before{content:"󰆾"}.mdi-cursor-pointer:before{content:"󰆽"}.mdi-cursor-text:before{content:"󰗧"}.mdi-curtains:before{content:"󱡆"}.mdi-curtains-closed:before{content:"󱡇"}.mdi-cylinder:before{content:"󱥎"}.mdi-cylinder-off:before{content:"󱥏"}.mdi-dance-ballroom:before{content:"󱗻"}.mdi-dance-pole:before{content:"󱕸"}.mdi-data-matrix:before{content:"󱔼"}.mdi-data-matrix-edit:before{content:"󱔽"}.mdi-data-matrix-minus:before{content:"󱔾"}.mdi-data-matrix-plus:before{content:"󱔿"}.mdi-data-matrix-remove:before{content:"󱕀"}.mdi-data-matrix-scan:before{content:"󱕁"}.mdi-database:before{content:"󰆼"}.mdi-database-alert:before{content:"󱘺"}.mdi-database-alert-outline:before{content:"󱘤"}.mdi-database-arrow-down:before{content:"󱘻"}.mdi-database-arrow-down-outline:before{content:"󱘥"}.mdi-database-arrow-left:before{content:"󱘼"}.mdi-database-arrow-left-outline:before{content:"󱘦"}.mdi-database-arrow-right:before{content:"󱘽"}.mdi-database-arrow-right-outline:before{content:"󱘧"}.mdi-database-arrow-up:before{content:"󱘾"}.mdi-database-arrow-up-outline:before{content:"󱘨"}.mdi-database-check:before{content:"󰪩"}.mdi-database-check-outline:before{content:"󱘩"}.mdi-database-clock:before{content:"󱘿"}.mdi-database-clock-outline:before{content:"󱘪"}.mdi-database-cog:before{content:"󱙋"}.mdi-database-cog-outline:before{content:"󱙌"}.mdi-database-edit:before{content:"󰮆"}.mdi-database-edit-outline:before{content:"󱘫"}.mdi-database-export:before{content:"󰥞"}.mdi-database-export-outline:before{content:"󱘬"}.mdi-database-eye:before{content:"󱤟"}.mdi-database-eye-off:before{content:"󱤠"}.mdi-database-eye-off-outline:before{content:"󱤡"}.mdi-database-eye-outline:before{content:"󱤢"}.mdi-database-import:before{content:"󰥝"}.mdi-database-import-outline:before{content:"󱘭"}.mdi-database-lock:before{content:"󰪪"}.mdi-database-lock-outline:before{content:"󱘮"}.mdi-database-marker:before{content:"󱋶"}.mdi-database-marker-outline:before{content:"󱘯"}.mdi-database-minus:before{content:"󰆻"}.mdi-database-minus-outline:before{content:"󱘰"}.mdi-database-off:before{content:"󱙀"}.mdi-database-off-outline:before{content:"󱘱"}.mdi-database-outline:before{content:"󱘲"}.mdi-database-plus:before{content:"󰆺"}.mdi-database-plus-outline:before{content:"󱘳"}.mdi-database-refresh:before{content:"󰗂"}.mdi-database-refresh-outline:before{content:"󱘴"}.mdi-database-remove:before{content:"󰴀"}.mdi-database-remove-outline:before{content:"󱘵"}.mdi-database-search:before{content:"󰡦"}.mdi-database-search-outline:before{content:"󱘶"}.mdi-database-settings:before{content:"󰴁"}.mdi-database-settings-outline:before{content:"󱘷"}.mdi-database-sync:before{content:"󰳿"}.mdi-database-sync-outline:before{content:"󱘸"}.mdi-death-star:before{content:"󰣘"}.mdi-death-star-variant:before{content:"󰣙"}.mdi-deathly-hallows:before{content:"󰮇"}.mdi-debian:before{content:"󰣚"}.mdi-debug-step-into:before{content:"󰆹"}.mdi-debug-step-out:before{content:"󰆸"}.mdi-debug-step-over:before{content:"󰆷"}.mdi-decagram:before{content:"󰝬"}.mdi-decagram-outline:before{content:"󰝭"}.mdi-decimal:before{content:"󱂡"}.mdi-decimal-comma:before{content:"󱂢"}.mdi-decimal-comma-decrease:before{content:"󱂣"}.mdi-decimal-comma-increase:before{content:"󱂤"}.mdi-decimal-decrease:before{content:"󰆶"}.mdi-decimal-increase:before{content:"󰆵"}.mdi-delete:before{content:"󰆴"}.mdi-delete-alert:before{content:"󱂥"}.mdi-delete-alert-outline:before{content:"󱂦"}.mdi-delete-circle:before{content:"󰚃"}.mdi-delete-circle-outline:before{content:"󰮈"}.mdi-delete-clock:before{content:"󱕖"}.mdi-delete-clock-outline:before{content:"󱕗"}.mdi-delete-empty:before{content:"󰛌"}.mdi-delete-empty-outline:before{content:"󰺝"}.mdi-delete-forever:before{content:"󰗨"}.mdi-delete-forever-outline:before{content:"󰮉"}.mdi-delete-off:before{content:"󱂧"}.mdi-delete-off-outline:before{content:"󱂨"}.mdi-delete-outline:before{content:"󰧧"}.mdi-delete-restore:before{content:"󰠙"}.mdi-delete-sweep:before{content:"󰗩"}.mdi-delete-sweep-outline:before{content:"󰱢"}.mdi-delete-variant:before{content:"󰆳"}.mdi-delta:before{content:"󰇂"}.mdi-desk:before{content:"󱈹"}.mdi-desk-lamp:before{content:"󰥟"}.mdi-desk-lamp-off:before{content:"󱬟"}.mdi-desk-lamp-on:before{content:"󱬠"}.mdi-deskphone:before{content:"󰇃"}.mdi-desktop-classic:before{content:"󰟀"}.mdi-desktop-tower:before{content:"󰇅"}.mdi-desktop-tower-monitor:before{content:"󰪫"}.mdi-details:before{content:"󰇆"}.mdi-dev-to:before{content:"󰵮"}.mdi-developer-board:before{content:"󰚗"}.mdi-deviantart:before{content:"󰇇"}.mdi-devices:before{content:"󰾰"}.mdi-dharmachakra:before{content:"󰥋"}.mdi-diabetes:before{content:"󱄦"}.mdi-dialpad:before{content:"󰘜"}.mdi-diameter:before{content:"󰱣"}.mdi-diameter-outline:before{content:"󰱤"}.mdi-diameter-variant:before{content:"󰱥"}.mdi-diamond:before{content:"󰮊"}.mdi-diamond-outline:before{content:"󰮋"}.mdi-diamond-stone:before{content:"󰇈"}.mdi-diaper-outline:before{content:"󱳏"}.mdi-dice-1:before{content:"󰇊"}.mdi-dice-1-outline:before{content:"󱅊"}.mdi-dice-2:before{content:"󰇋"}.mdi-dice-2-outline:before{content:"󱅋"}.mdi-dice-3:before{content:"󰇌"}.mdi-dice-3-outline:before{content:"󱅌"}.mdi-dice-4:before{content:"󰇍"}.mdi-dice-4-outline:before{content:"󱅍"}.mdi-dice-5:before{content:"󰇎"}.mdi-dice-5-outline:before{content:"󱅎"}.mdi-dice-6:before{content:"󰇏"}.mdi-dice-6-outline:before{content:"󱅏"}.mdi-dice-d10:before{content:"󱅓"}.mdi-dice-d10-outline:before{content:"󰝯"}.mdi-dice-d12:before{content:"󱅔"}.mdi-dice-d12-outline:before{content:"󰡧"}.mdi-dice-d20:before{content:"󱅕"}.mdi-dice-d20-outline:before{content:"󰗪"}.mdi-dice-d4:before{content:"󱅐"}.mdi-dice-d4-outline:before{content:"󰗫"}.mdi-dice-d6:before{content:"󱅑"}.mdi-dice-d6-outline:before{content:"󰗭"}.mdi-dice-d8:before{content:"󱅒"}.mdi-dice-d8-outline:before{content:"󰗬"}.mdi-dice-multiple:before{content:"󰝮"}.mdi-dice-multiple-outline:before{content:"󱅖"}.mdi-digital-ocean:before{content:"󱈷"}.mdi-dip-switch:before{content:"󰟁"}.mdi-directions:before{content:"󰇐"}.mdi-directions-fork:before{content:"󰙁"}.mdi-disc:before{content:"󰗮"}.mdi-disc-alert:before{content:"󰇑"}.mdi-disc-player:before{content:"󰥠"}.mdi-dishwasher:before{content:"󰪬"}.mdi-dishwasher-alert:before{content:"󱆸"}.mdi-dishwasher-off:before{content:"󱆹"}.mdi-disqus:before{content:"󰇒"}.mdi-distribute-horizontal-center:before{content:"󱇉"}.mdi-distribute-horizontal-left:before{content:"󱇈"}.mdi-distribute-horizontal-right:before{content:"󱇊"}.mdi-distribute-vertical-bottom:before{content:"󱇋"}.mdi-distribute-vertical-center:before{content:"󱇌"}.mdi-distribute-vertical-top:before{content:"󱇍"}.mdi-diversify:before{content:"󱡷"}.mdi-diving:before{content:"󱥷"}.mdi-diving-flippers:before{content:"󰶿"}.mdi-diving-helmet:before{content:"󰷀"}.mdi-diving-scuba:before{content:"󱭷"}.mdi-diving-scuba-flag:before{content:"󰷂"}.mdi-diving-scuba-mask:before{content:"󰷁"}.mdi-diving-scuba-tank:before{content:"󰷃"}.mdi-diving-scuba-tank-multiple:before{content:"󰷄"}.mdi-diving-snorkel:before{content:"󰷅"}.mdi-division:before{content:"󰇔"}.mdi-division-box:before{content:"󰇕"}.mdi-dlna:before{content:"󰩁"}.mdi-dna:before{content:"󰚄"}.mdi-dns:before{content:"󰇖"}.mdi-dns-outline:before{content:"󰮌"}.mdi-dock-bottom:before{content:"󱂩"}.mdi-dock-left:before{content:"󱂪"}.mdi-dock-right:before{content:"󱂫"}.mdi-dock-top:before{content:"󱔓"}.mdi-dock-window:before{content:"󱂬"}.mdi-docker:before{content:"󰡨"}.mdi-doctor:before{content:"󰩂"}.mdi-dog:before{content:"󰩃"}.mdi-dog-service:before{content:"󰪭"}.mdi-dog-side:before{content:"󰩄"}.mdi-dog-side-off:before{content:"󱛮"}.mdi-dolby:before{content:"󰚳"}.mdi-dolly:before{content:"󰺞"}.mdi-dolphin:before{content:"󱢴"}.mdi-domain:before{content:"󰇗"}.mdi-domain-off:before{content:"󰵯"}.mdi-domain-plus:before{content:"󱂭"}.mdi-domain-remove:before{content:"󱂮"}.mdi-domain-switch:before{content:"󱰬"}.mdi-dome-light:before{content:"󱐞"}.mdi-domino-mask:before{content:"󱀣"}.mdi-donkey:before{content:"󰟂"}.mdi-door:before{content:"󰠚"}.mdi-door-closed:before{content:"󰠛"}.mdi-door-closed-cancel:before{content:"󱲓"}.mdi-door-closed-lock:before{content:"󱂯"}.mdi-door-open:before{content:"󰠜"}.mdi-door-sliding:before{content:"󱠞"}.mdi-door-sliding-lock:before{content:"󱠟"}.mdi-door-sliding-open:before{content:"󱠠"}.mdi-doorbell:before{content:"󱋦"}.mdi-doorbell-video:before{content:"󰡩"}.mdi-dot-net:before{content:"󰪮"}.mdi-dots-circle:before{content:"󱥸"}.mdi-dots-grid:before{content:"󱗼"}.mdi-dots-hexagon:before{content:"󱗿"}.mdi-dots-horizontal:before{content:"󰇘"}.mdi-dots-horizontal-circle:before{content:"󰟃"}.mdi-dots-horizontal-circle-outline:before{content:"󰮍"}.mdi-dots-square:before{content:"󱗽"}.mdi-dots-triangle:before{content:"󱗾"}.mdi-dots-vertical:before{content:"󰇙"}.mdi-dots-vertical-circle:before{content:"󰟄"}.mdi-dots-vertical-circle-outline:before{content:"󰮎"}.mdi-download:before{content:"󰇚"}.mdi-download-box:before{content:"󱑢"}.mdi-download-box-outline:before{content:"󱑣"}.mdi-download-circle:before{content:"󱑤"}.mdi-download-circle-outline:before{content:"󱑥"}.mdi-download-lock:before{content:"󱌠"}.mdi-download-lock-outline:before{content:"󱌡"}.mdi-download-multiple:before{content:"󰧩"}.mdi-download-multiple-outline:before{content:"󱳐"}.mdi-download-network:before{content:"󰛴"}.mdi-download-network-outline:before{content:"󰱦"}.mdi-download-off:before{content:"󱂰"}.mdi-download-off-outline:before{content:"󱂱"}.mdi-download-outline:before{content:"󰮏"}.mdi-drag:before{content:"󰇛"}.mdi-drag-horizontal:before{content:"󰇜"}.mdi-drag-horizontal-variant:before{content:"󱋰"}.mdi-drag-variant:before{content:"󰮐"}.mdi-drag-vertical:before{content:"󰇝"}.mdi-drag-vertical-variant:before{content:"󱋱"}.mdi-drama-masks:before{content:"󰴂"}.mdi-draw:before{content:"󰽉"}.mdi-draw-pen:before{content:"󱦹"}.mdi-drawing:before{content:"󰇞"}.mdi-drawing-box:before{content:"󰇟"}.mdi-dresser:before{content:"󰽊"}.mdi-dresser-outline:before{content:"󰽋"}.mdi-drone:before{content:"󰇢"}.mdi-dropbox:before{content:"󰇣"}.mdi-drupal:before{content:"󰇤"}.mdi-duck:before{content:"󰇥"}.mdi-dumbbell:before{content:"󰇦"}.mdi-dump-truck:before{content:"󰱧"}.mdi-ear-hearing:before{content:"󰟅"}.mdi-ear-hearing-loop:before{content:"󱫮"}.mdi-ear-hearing-off:before{content:"󰩅"}.mdi-earbuds:before{content:"󱡏"}.mdi-earbuds-off:before{content:"󱡐"}.mdi-earbuds-off-outline:before{content:"󱡑"}.mdi-earbuds-outline:before{content:"󱡒"}.mdi-earth:before{content:"󰇧"}.mdi-earth-arrow-down:before{content:"󱲇"}.mdi-earth-arrow-left:before{content:"󱲈"}.mdi-earth-arrow-right:before{content:"󱌑"}.mdi-earth-arrow-up:before{content:"󱲉"}.mdi-earth-box:before{content:"󰛍"}.mdi-earth-box-minus:before{content:"󱐇"}.mdi-earth-box-off:before{content:"󰛎"}.mdi-earth-box-plus:before{content:"󱐆"}.mdi-earth-box-remove:before{content:"󱐈"}.mdi-earth-minus:before{content:"󱐄"}.mdi-earth-off:before{content:"󰇨"}.mdi-earth-plus:before{content:"󱐃"}.mdi-earth-remove:before{content:"󱐅"}.mdi-egg:before{content:"󰪯"}.mdi-egg-easter:before{content:"󰪰"}.mdi-egg-fried:before{content:"󱡊"}.mdi-egg-off:before{content:"󱏰"}.mdi-egg-off-outline:before{content:"󱏱"}.mdi-egg-outline:before{content:"󱏲"}.mdi-eiffel-tower:before{content:"󱕫"}.mdi-eight-track:before{content:"󰧪"}.mdi-eject:before{content:"󰇪"}.mdi-eject-circle:before{content:"󱬣"}.mdi-eject-circle-outline:before{content:"󱬤"}.mdi-eject-outline:before{content:"󰮑"}.mdi-electric-switch:before{content:"󰺟"}.mdi-electric-switch-closed:before{content:"󱃙"}.mdi-electron-framework:before{content:"󱀤"}.mdi-elephant:before{content:"󰟆"}.mdi-elevation-decline:before{content:"󰇫"}.mdi-elevation-rise:before{content:"󰇬"}.mdi-elevator:before{content:"󰇭"}.mdi-elevator-down:before{content:"󱋂"}.mdi-elevator-passenger:before{content:"󱎁"}.mdi-elevator-passenger-off:before{content:"󱥹"}.mdi-elevator-passenger-off-outline:before{content:"󱥺"}.mdi-elevator-passenger-outline:before{content:"󱥻"}.mdi-elevator-up:before{content:"󱋁"}.mdi-ellipse:before{content:"󰺠"}.mdi-ellipse-outline:before{content:"󰺡"}.mdi-email:before{content:"󰇮"}.mdi-email-alert:before{content:"󰛏"}.mdi-email-alert-outline:before{content:"󰵂"}.mdi-email-arrow-left:before{content:"󱃚"}.mdi-email-arrow-left-outline:before{content:"󱃛"}.mdi-email-arrow-right:before{content:"󱃜"}.mdi-email-arrow-right-outline:before{content:"󱃝"}.mdi-email-box:before{content:"󰴃"}.mdi-email-check:before{content:"󰪱"}.mdi-email-check-outline:before{content:"󰪲"}.mdi-email-edit:before{content:"󰻣"}.mdi-email-edit-outline:before{content:"󰻤"}.mdi-email-fast:before{content:"󱡯"}.mdi-email-fast-outline:before{content:"󱡰"}.mdi-email-heart-outline:before{content:"󱱛"}.mdi-email-lock:before{content:"󰇱"}.mdi-email-lock-outline:before{content:"󱭡"}.mdi-email-mark-as-unread:before{content:"󰮒"}.mdi-email-minus:before{content:"󰻥"}.mdi-email-minus-outline:before{content:"󰻦"}.mdi-email-multiple:before{content:"󰻧"}.mdi-email-multiple-outline:before{content:"󰻨"}.mdi-email-newsletter:before{content:"󰾱"}.mdi-email-off:before{content:"󱏣"}.mdi-email-off-outline:before{content:"󱏤"}.mdi-email-open:before{content:"󰇯"}.mdi-email-open-heart-outline:before{content:"󱱜"}.mdi-email-open-multiple:before{content:"󰻩"}.mdi-email-open-multiple-outline:before{content:"󰻪"}.mdi-email-open-outline:before{content:"󰗯"}.mdi-email-outline:before{content:"󰇰"}.mdi-email-plus:before{content:"󰧫"}.mdi-email-plus-outline:before{content:"󰧬"}.mdi-email-remove:before{content:"󱙡"}.mdi-email-remove-outline:before{content:"󱙢"}.mdi-email-seal:before{content:"󱥛"}.mdi-email-seal-outline:before{content:"󱥜"}.mdi-email-search:before{content:"󰥡"}.mdi-email-search-outline:before{content:"󰥢"}.mdi-email-sync:before{content:"󱋇"}.mdi-email-sync-outline:before{content:"󱋈"}.mdi-email-variant:before{content:"󰗰"}.mdi-ember:before{content:"󰬰"}.mdi-emby:before{content:"󰚴"}.mdi-emoticon:before{content:"󰱨"}.mdi-emoticon-angry:before{content:"󰱩"}.mdi-emoticon-angry-outline:before{content:"󰱪"}.mdi-emoticon-confused:before{content:"󱃞"}.mdi-emoticon-confused-outline:before{content:"󱃟"}.mdi-emoticon-cool:before{content:"󰱫"}.mdi-emoticon-cool-outline:before{content:"󰇳"}.mdi-emoticon-cry:before{content:"󰱬"}.mdi-emoticon-cry-outline:before{content:"󰱭"}.mdi-emoticon-dead:before{content:"󰱮"}.mdi-emoticon-dead-outline:before{content:"󰚛"}.mdi-emoticon-devil:before{content:"󰱯"}.mdi-emoticon-devil-outline:before{content:"󰇴"}.mdi-emoticon-excited:before{content:"󰱰"}.mdi-emoticon-excited-outline:before{content:"󰚜"}.mdi-emoticon-frown:before{content:"󰽌"}.mdi-emoticon-frown-outline:before{content:"󰽍"}.mdi-emoticon-happy:before{content:"󰱱"}.mdi-emoticon-happy-outline:before{content:"󰇵"}.mdi-emoticon-kiss:before{content:"󰱲"}.mdi-emoticon-kiss-outline:before{content:"󰱳"}.mdi-emoticon-lol:before{content:"󱈔"}.mdi-emoticon-lol-outline:before{content:"󱈕"}.mdi-emoticon-minus:before{content:"󱲲"}.mdi-emoticon-minus-outline:before{content:"󱲳"}.mdi-emoticon-neutral:before{content:"󰱴"}.mdi-emoticon-neutral-outline:before{content:"󰇶"}.mdi-emoticon-outline:before{content:"󰇲"}.mdi-emoticon-plus:before{content:"󱲴"}.mdi-emoticon-plus-outline:before{content:"󱲵"}.mdi-emoticon-poop:before{content:"󰇷"}.mdi-emoticon-poop-outline:before{content:"󰱵"}.mdi-emoticon-remove:before{content:"󱲶"}.mdi-emoticon-remove-outline:before{content:"󱲷"}.mdi-emoticon-sad:before{content:"󰱶"}.mdi-emoticon-sad-outline:before{content:"󰇸"}.mdi-emoticon-sick:before{content:"󱕼"}.mdi-emoticon-sick-outline:before{content:"󱕽"}.mdi-emoticon-tongue:before{content:"󰇹"}.mdi-emoticon-tongue-outline:before{content:"󰱷"}.mdi-emoticon-wink:before{content:"󰱸"}.mdi-emoticon-wink-outline:before{content:"󰱹"}.mdi-engine:before{content:"󰇺"}.mdi-engine-off:before{content:"󰩆"}.mdi-engine-off-outline:before{content:"󰩇"}.mdi-engine-outline:before{content:"󰇻"}.mdi-epsilon:before{content:"󱃠"}.mdi-equal:before{content:"󰇼"}.mdi-equal-box:before{content:"󰇽"}.mdi-equalizer:before{content:"󰺢"}.mdi-equalizer-outline:before{content:"󰺣"}.mdi-eraser:before{content:"󰇾"}.mdi-eraser-variant:before{content:"󰙂"}.mdi-escalator:before{content:"󰇿"}.mdi-escalator-box:before{content:"󱎙"}.mdi-escalator-down:before{content:"󱋀"}.mdi-escalator-up:before{content:"󱊿"}.mdi-eslint:before{content:"󰱺"}.mdi-et:before{content:"󰪳"}.mdi-ethereum:before{content:"󰡪"}.mdi-ethernet:before{content:"󰈀"}.mdi-ethernet-cable:before{content:"󰈁"}.mdi-ethernet-cable-off:before{content:"󰈂"}.mdi-ethernet-off:before{content:"󱳑"}.mdi-ev-plug-ccs1:before{content:"󱔙"}.mdi-ev-plug-ccs2:before{content:"󱔚"}.mdi-ev-plug-chademo:before{content:"󱔛"}.mdi-ev-plug-tesla:before{content:"󱔜"}.mdi-ev-plug-type1:before{content:"󱔝"}.mdi-ev-plug-type2:before{content:"󱔞"}.mdi-ev-station:before{content:"󰗱"}.mdi-evernote:before{content:"󰈄"}.mdi-excavator:before{content:"󱀥"}.mdi-exclamation:before{content:"󰈅"}.mdi-exclamation-thick:before{content:"󱈸"}.mdi-exit-run:before{content:"󰩈"}.mdi-exit-to-app:before{content:"󰈆"}.mdi-expand-all:before{content:"󰪴"}.mdi-expand-all-outline:before{content:"󰪵"}.mdi-expansion-card:before{content:"󰢮"}.mdi-expansion-card-variant:before{content:"󰾲"}.mdi-exponent:before{content:"󰥣"}.mdi-exponent-box:before{content:"󰥤"}.mdi-export:before{content:"󰈇"}.mdi-export-variant:before{content:"󰮓"}.mdi-eye:before{content:"󰈈"}.mdi-eye-arrow-left:before{content:"󱣽"}.mdi-eye-arrow-left-outline:before{content:"󱣾"}.mdi-eye-arrow-right:before{content:"󱣿"}.mdi-eye-arrow-right-outline:before{content:"󱤀"}.mdi-eye-check:before{content:"󰴄"}.mdi-eye-check-outline:before{content:"󰴅"}.mdi-eye-circle:before{content:"󰮔"}.mdi-eye-circle-outline:before{content:"󰮕"}.mdi-eye-closed:before{content:"󱲣"}.mdi-eye-lock:before{content:"󱰆"}.mdi-eye-lock-open:before{content:"󱰇"}.mdi-eye-lock-open-outline:before{content:"󱰈"}.mdi-eye-lock-outline:before{content:"󱰉"}.mdi-eye-minus:before{content:"󱀦"}.mdi-eye-minus-outline:before{content:"󱀧"}.mdi-eye-off:before{content:"󰈉"}.mdi-eye-off-outline:before{content:"󰛑"}.mdi-eye-outline:before{content:"󰛐"}.mdi-eye-plus:before{content:"󰡫"}.mdi-eye-plus-outline:before{content:"󰡬"}.mdi-eye-refresh:before{content:"󱥼"}.mdi-eye-refresh-outline:before{content:"󱥽"}.mdi-eye-remove:before{content:"󱗣"}.mdi-eye-remove-outline:before{content:"󱗤"}.mdi-eye-settings:before{content:"󰡭"}.mdi-eye-settings-outline:before{content:"󰡮"}.mdi-eyedropper:before{content:"󰈊"}.mdi-eyedropper-minus:before{content:"󱏝"}.mdi-eyedropper-off:before{content:"󱏟"}.mdi-eyedropper-plus:before{content:"󱏜"}.mdi-eyedropper-remove:before{content:"󱏞"}.mdi-eyedropper-variant:before{content:"󰈋"}.mdi-face-agent:before{content:"󰵰"}.mdi-face-man:before{content:"󰙃"}.mdi-face-man-outline:before{content:"󰮖"}.mdi-face-man-profile:before{content:"󰙄"}.mdi-face-man-shimmer:before{content:"󱗌"}.mdi-face-man-shimmer-outline:before{content:"󱗍"}.mdi-face-mask:before{content:"󱖆"}.mdi-face-mask-outline:before{content:"󱖇"}.mdi-face-recognition:before{content:"󰱻"}.mdi-face-woman:before{content:"󱁷"}.mdi-face-woman-outline:before{content:"󱁸"}.mdi-face-woman-profile:before{content:"󱁶"}.mdi-face-woman-shimmer:before{content:"󱗎"}.mdi-face-woman-shimmer-outline:before{content:"󱗏"}.mdi-facebook:before{content:"󰈌"}.mdi-facebook-gaming:before{content:"󰟝"}.mdi-facebook-messenger:before{content:"󰈎"}.mdi-facebook-workplace:before{content:"󰬱"}.mdi-factory:before{content:"󰈏"}.mdi-family-tree:before{content:"󱘎"}.mdi-fan:before{content:"󰈐"}.mdi-fan-alert:before{content:"󱑬"}.mdi-fan-auto:before{content:"󱜝"}.mdi-fan-chevron-down:before{content:"󱑭"}.mdi-fan-chevron-up:before{content:"󱑮"}.mdi-fan-clock:before{content:"󱨺"}.mdi-fan-minus:before{content:"󱑰"}.mdi-fan-off:before{content:"󰠝"}.mdi-fan-plus:before{content:"󱑯"}.mdi-fan-remove:before{content:"󱑱"}.mdi-fan-speed-1:before{content:"󱑲"}.mdi-fan-speed-2:before{content:"󱑳"}.mdi-fan-speed-3:before{content:"󱑴"}.mdi-fast-forward:before{content:"󰈑"}.mdi-fast-forward-10:before{content:"󰵱"}.mdi-fast-forward-15:before{content:"󱤺"}.mdi-fast-forward-30:before{content:"󰴆"}.mdi-fast-forward-45:before{content:"󱬒"}.mdi-fast-forward-5:before{content:"󱇸"}.mdi-fast-forward-60:before{content:"󱘋"}.mdi-fast-forward-outline:before{content:"󰛒"}.mdi-faucet:before{content:"󱬩"}.mdi-faucet-variant:before{content:"󱬪"}.mdi-fax:before{content:"󰈒"}.mdi-feather:before{content:"󰛓"}.mdi-feature-search:before{content:"󰩉"}.mdi-feature-search-outline:before{content:"󰩊"}.mdi-fedora:before{content:"󰣛"}.mdi-fence:before{content:"󱞚"}.mdi-fence-electric:before{content:"󱟶"}.mdi-fencing:before{content:"󱓁"}.mdi-ferris-wheel:before{content:"󰺤"}.mdi-ferry:before{content:"󰈓"}.mdi-file:before{content:"󰈔"}.mdi-file-account:before{content:"󰜻"}.mdi-file-account-outline:before{content:"󱀨"}.mdi-file-alert:before{content:"󰩋"}.mdi-file-alert-outline:before{content:"󰩌"}.mdi-file-arrow-left-right:before{content:"󱪓"}.mdi-file-arrow-left-right-outline:before{content:"󱪔"}.mdi-file-arrow-up-down:before{content:"󱪕"}.mdi-file-arrow-up-down-outline:before{content:"󱪖"}.mdi-file-cabinet:before{content:"󰪶"}.mdi-file-cad:before{content:"󰻫"}.mdi-file-cad-box:before{content:"󰻬"}.mdi-file-cancel:before{content:"󰷆"}.mdi-file-cancel-outline:before{content:"󰷇"}.mdi-file-certificate:before{content:"󱆆"}.mdi-file-certificate-outline:before{content:"󱆇"}.mdi-file-chart:before{content:"󰈕"}.mdi-file-chart-check:before{content:"󱧆"}.mdi-file-chart-check-outline:before{content:"󱧇"}.mdi-file-chart-outline:before{content:"󱀩"}.mdi-file-check:before{content:"󰈖"}.mdi-file-check-outline:before{content:"󰸩"}.mdi-file-clock:before{content:"󱋡"}.mdi-file-clock-outline:before{content:"󱋢"}.mdi-file-cloud:before{content:"󰈗"}.mdi-file-cloud-outline:before{content:"󱀪"}.mdi-file-code:before{content:"󰈮"}.mdi-file-code-outline:before{content:"󱀫"}.mdi-file-cog:before{content:"󱁻"}.mdi-file-cog-outline:before{content:"󱁼"}.mdi-file-compare:before{content:"󰢪"}.mdi-file-delimited:before{content:"󰈘"}.mdi-file-delimited-outline:before{content:"󰺥"}.mdi-file-document:before{content:"󰈙"}.mdi-file-document-alert:before{content:"󱪗"}.mdi-file-document-alert-outline:before{content:"󱪘"}.mdi-file-document-arrow-right:before{content:"󱰏"}.mdi-file-document-arrow-right-outline:before{content:"󱰐"}.mdi-file-document-check:before{content:"󱪙"}.mdi-file-document-check-outline:before{content:"󱪚"}.mdi-file-document-edit:before{content:"󰷈"}.mdi-file-document-edit-outline:before{content:"󰷉"}.mdi-file-document-minus:before{content:"󱪛"}.mdi-file-document-minus-outline:before{content:"󱪜"}.mdi-file-document-multiple:before{content:"󱔗"}.mdi-file-document-multiple-outline:before{content:"󱔘"}.mdi-file-document-outline:before{content:"󰧮"}.mdi-file-document-plus:before{content:"󱪝"}.mdi-file-document-plus-outline:before{content:"󱪞"}.mdi-file-document-refresh:before{content:"󱱺"}.mdi-file-document-refresh-outline:before{content:"󱱻"}.mdi-file-document-remove:before{content:"󱪟"}.mdi-file-document-remove-outline:before{content:"󱪠"}.mdi-file-download:before{content:"󰥥"}.mdi-file-download-outline:before{content:"󰥦"}.mdi-file-edit:before{content:"󱇧"}.mdi-file-edit-outline:before{content:"󱇨"}.mdi-file-excel:before{content:"󰈛"}.mdi-file-excel-box:before{content:"󰈜"}.mdi-file-excel-box-outline:before{content:"󱀬"}.mdi-file-excel-outline:before{content:"󱀭"}.mdi-file-export:before{content:"󰈝"}.mdi-file-export-outline:before{content:"󱀮"}.mdi-file-eye:before{content:"󰷊"}.mdi-file-eye-outline:before{content:"󰷋"}.mdi-file-find:before{content:"󰈞"}.mdi-file-find-outline:before{content:"󰮗"}.mdi-file-gif-box:before{content:"󰵸"}.mdi-file-hidden:before{content:"󰘓"}.mdi-file-image:before{content:"󰈟"}.mdi-file-image-marker:before{content:"󱝲"}.mdi-file-image-marker-outline:before{content:"󱝳"}.mdi-file-image-minus:before{content:"󱤻"}.mdi-file-image-minus-outline:before{content:"󱤼"}.mdi-file-image-outline:before{content:"󰺰"}.mdi-file-image-plus:before{content:"󱤽"}.mdi-file-image-plus-outline:before{content:"󱤾"}.mdi-file-image-remove:before{content:"󱤿"}.mdi-file-image-remove-outline:before{content:"󱥀"}.mdi-file-import:before{content:"󰈠"}.mdi-file-import-outline:before{content:"󱀯"}.mdi-file-jpg-box:before{content:"󰈥"}.mdi-file-key:before{content:"󱆄"}.mdi-file-key-outline:before{content:"󱆅"}.mdi-file-link:before{content:"󱅷"}.mdi-file-link-outline:before{content:"󱅸"}.mdi-file-lock:before{content:"󰈡"}.mdi-file-lock-open:before{content:"󱧈"}.mdi-file-lock-open-outline:before{content:"󱧉"}.mdi-file-lock-outline:before{content:"󱀰"}.mdi-file-marker:before{content:"󱝴"}.mdi-file-marker-outline:before{content:"󱝵"}.mdi-file-minus:before{content:"󱪡"}.mdi-file-minus-outline:before{content:"󱪢"}.mdi-file-move:before{content:"󰪹"}.mdi-file-move-outline:before{content:"󱀱"}.mdi-file-multiple:before{content:"󰈢"}.mdi-file-multiple-outline:before{content:"󱀲"}.mdi-file-music:before{content:"󰈣"}.mdi-file-music-outline:before{content:"󰸪"}.mdi-file-outline:before{content:"󰈤"}.mdi-file-pdf-box:before{content:"󰈦"}.mdi-file-percent:before{content:"󰠞"}.mdi-file-percent-outline:before{content:"󱀳"}.mdi-file-phone:before{content:"󱅹"}.mdi-file-phone-outline:before{content:"󱅺"}.mdi-file-plus:before{content:"󰝒"}.mdi-file-plus-outline:before{content:"󰻭"}.mdi-file-png-box:before{content:"󰸭"}.mdi-file-powerpoint:before{content:"󰈧"}.mdi-file-powerpoint-box:before{content:"󰈨"}.mdi-file-powerpoint-box-outline:before{content:"󱀴"}.mdi-file-powerpoint-outline:before{content:"󱀵"}.mdi-file-presentation-box:before{content:"󰈩"}.mdi-file-question:before{content:"󰡯"}.mdi-file-question-outline:before{content:"󱀶"}.mdi-file-refresh:before{content:"󰤘"}.mdi-file-refresh-outline:before{content:"󰕁"}.mdi-file-remove:before{content:"󰮘"}.mdi-file-remove-outline:before{content:"󱀷"}.mdi-file-replace:before{content:"󰬲"}.mdi-file-replace-outline:before{content:"󰬳"}.mdi-file-restore:before{content:"󰙰"}.mdi-file-restore-outline:before{content:"󱀸"}.mdi-file-rotate-left:before{content:"󱨻"}.mdi-file-rotate-left-outline:before{content:"󱨼"}.mdi-file-rotate-right:before{content:"󱨽"}.mdi-file-rotate-right-outline:before{content:"󱨾"}.mdi-file-search:before{content:"󰱼"}.mdi-file-search-outline:before{content:"󰱽"}.mdi-file-send:before{content:"󰈪"}.mdi-file-send-outline:before{content:"󱀹"}.mdi-file-settings:before{content:"󱁹"}.mdi-file-settings-outline:before{content:"󱁺"}.mdi-file-sign:before{content:"󱧃"}.mdi-file-star:before{content:"󱀺"}.mdi-file-star-four-points:before{content:"󱰭"}.mdi-file-star-four-points-outline:before{content:"󱰮"}.mdi-file-star-outline:before{content:"󱀻"}.mdi-file-swap:before{content:"󰾴"}.mdi-file-swap-outline:before{content:"󰾵"}.mdi-file-sync:before{content:"󱈖"}.mdi-file-sync-outline:before{content:"󱈗"}.mdi-file-table:before{content:"󰱾"}.mdi-file-table-box:before{content:"󱃡"}.mdi-file-table-box-multiple:before{content:"󱃢"}.mdi-file-table-box-multiple-outline:before{content:"󱃣"}.mdi-file-table-box-outline:before{content:"󱃤"}.mdi-file-table-outline:before{content:"󰱿"}.mdi-file-tree:before{content:"󰙅"}.mdi-file-tree-outline:before{content:"󱏒"}.mdi-file-undo:before{content:"󰣜"}.mdi-file-undo-outline:before{content:"󱀼"}.mdi-file-upload:before{content:"󰩍"}.mdi-file-upload-outline:before{content:"󰩎"}.mdi-file-video:before{content:"󰈫"}.mdi-file-video-outline:before{content:"󰸬"}.mdi-file-word:before{content:"󰈬"}.mdi-file-word-box:before{content:"󰈭"}.mdi-file-word-box-outline:before{content:"󱀽"}.mdi-file-word-outline:before{content:"󱀾"}.mdi-file-xml-box:before{content:"󱭋"}.mdi-film:before{content:"󰈯"}.mdi-filmstrip:before{content:"󰈰"}.mdi-filmstrip-box:before{content:"󰌲"}.mdi-filmstrip-box-multiple:before{content:"󰴘"}.mdi-filmstrip-off:before{content:"󰈱"}.mdi-filter:before{content:"󰈲"}.mdi-filter-check:before{content:"󱣬"}.mdi-filter-check-outline:before{content:"󱣭"}.mdi-filter-cog:before{content:"󱪣"}.mdi-filter-cog-outline:before{content:"󱪤"}.mdi-filter-menu:before{content:"󱃥"}.mdi-filter-menu-outline:before{content:"󱃦"}.mdi-filter-minus:before{content:"󰻮"}.mdi-filter-minus-outline:before{content:"󰻯"}.mdi-filter-multiple:before{content:"󱨿"}.mdi-filter-multiple-outline:before{content:"󱩀"}.mdi-filter-off:before{content:"󱓯"}.mdi-filter-off-outline:before{content:"󱓰"}.mdi-filter-outline:before{content:"󰈳"}.mdi-filter-plus:before{content:"󰻰"}.mdi-filter-plus-outline:before{content:"󰻱"}.mdi-filter-remove:before{content:"󰈴"}.mdi-filter-remove-outline:before{content:"󰈵"}.mdi-filter-settings:before{content:"󱪥"}.mdi-filter-settings-outline:before{content:"󱪦"}.mdi-filter-variant:before{content:"󰈶"}.mdi-filter-variant-minus:before{content:"󱄒"}.mdi-filter-variant-plus:before{content:"󱄓"}.mdi-filter-variant-remove:before{content:"󱀿"}.mdi-finance:before{content:"󰠟"}.mdi-find-replace:before{content:"󰛔"}.mdi-fingerprint:before{content:"󰈷"}.mdi-fingerprint-off:before{content:"󰺱"}.mdi-fire:before{content:"󰈸"}.mdi-fire-alert:before{content:"󱗗"}.mdi-fire-circle:before{content:"󱠇"}.mdi-fire-extinguisher:before{content:"󰻲"}.mdi-fire-hydrant:before{content:"󱄷"}.mdi-fire-hydrant-alert:before{content:"󱄸"}.mdi-fire-hydrant-off:before{content:"󱄹"}.mdi-fire-off:before{content:"󱜢"}.mdi-fire-station:before{content:"󱳃"}.mdi-fire-truck:before{content:"󰢫"}.mdi-firebase:before{content:"󰥧"}.mdi-firefox:before{content:"󰈹"}.mdi-fireplace:before{content:"󰸮"}.mdi-fireplace-off:before{content:"󰸯"}.mdi-firewire:before{content:"󰖾"}.mdi-firework:before{content:"󰸰"}.mdi-firework-off:before{content:"󱜣"}.mdi-fish:before{content:"󰈺"}.mdi-fish-off:before{content:"󱏳"}.mdi-fishbowl:before{content:"󰻳"}.mdi-fishbowl-outline:before{content:"󰻴"}.mdi-fit-to-page:before{content:"󰻵"}.mdi-fit-to-page-outline:before{content:"󰻶"}.mdi-fit-to-screen:before{content:"󱣴"}.mdi-fit-to-screen-outline:before{content:"󱣵"}.mdi-flag:before{content:"󰈻"}.mdi-flag-checkered:before{content:"󰈼"}.mdi-flag-minus:before{content:"󰮙"}.mdi-flag-minus-outline:before{content:"󱂲"}.mdi-flag-off:before{content:"󱣮"}.mdi-flag-off-outline:before{content:"󱣯"}.mdi-flag-outline:before{content:"󰈽"}.mdi-flag-plus:before{content:"󰮚"}.mdi-flag-plus-outline:before{content:"󱂳"}.mdi-flag-remove:before{content:"󰮛"}.mdi-flag-remove-outline:before{content:"󱂴"}.mdi-flag-triangle:before{content:"󰈿"}.mdi-flag-variant:before{content:"󰉀"}.mdi-flag-variant-minus:before{content:"󱮴"}.mdi-flag-variant-minus-outline:before{content:"󱮵"}.mdi-flag-variant-off:before{content:"󱮰"}.mdi-flag-variant-off-outline:before{content:"󱮱"}.mdi-flag-variant-outline:before{content:"󰈾"}.mdi-flag-variant-plus:before{content:"󱮲"}.mdi-flag-variant-plus-outline:before{content:"󱮳"}.mdi-flag-variant-remove:before{content:"󱮶"}.mdi-flag-variant-remove-outline:before{content:"󱮷"}.mdi-flare:before{content:"󰵲"}.mdi-flash:before{content:"󰉁"}.mdi-flash-alert:before{content:"󰻷"}.mdi-flash-alert-outline:before{content:"󰻸"}.mdi-flash-auto:before{content:"󰉂"}.mdi-flash-off:before{content:"󰉃"}.mdi-flash-off-outline:before{content:"󱭅"}.mdi-flash-outline:before{content:"󰛕"}.mdi-flash-red-eye:before{content:"󰙻"}.mdi-flash-triangle:before{content:"󱬝"}.mdi-flash-triangle-outline:before{content:"󱬞"}.mdi-flashlight:before{content:"󰉄"}.mdi-flashlight-off:before{content:"󰉅"}.mdi-flask:before{content:"󰂓"}.mdi-flask-empty:before{content:"󰂔"}.mdi-flask-empty-minus:before{content:"󱈺"}.mdi-flask-empty-minus-outline:before{content:"󱈻"}.mdi-flask-empty-off:before{content:"󱏴"}.mdi-flask-empty-off-outline:before{content:"󱏵"}.mdi-flask-empty-outline:before{content:"󰂕"}.mdi-flask-empty-plus:before{content:"󱈼"}.mdi-flask-empty-plus-outline:before{content:"󱈽"}.mdi-flask-empty-remove:before{content:"󱈾"}.mdi-flask-empty-remove-outline:before{content:"󱈿"}.mdi-flask-minus:before{content:"󱉀"}.mdi-flask-minus-outline:before{content:"󱉁"}.mdi-flask-off:before{content:"󱏶"}.mdi-flask-off-outline:before{content:"󱏷"}.mdi-flask-outline:before{content:"󰂖"}.mdi-flask-plus:before{content:"󱉂"}.mdi-flask-plus-outline:before{content:"󱉃"}.mdi-flask-remove:before{content:"󱉄"}.mdi-flask-remove-outline:before{content:"󱉅"}.mdi-flask-round-bottom:before{content:"󱉋"}.mdi-flask-round-bottom-empty:before{content:"󱉌"}.mdi-flask-round-bottom-empty-outline:before{content:"󱉍"}.mdi-flask-round-bottom-outline:before{content:"󱉎"}.mdi-fleur-de-lis:before{content:"󱌃"}.mdi-flip-horizontal:before{content:"󱃧"}.mdi-flip-to-back:before{content:"󰉇"}.mdi-flip-to-front:before{content:"󰉈"}.mdi-flip-vertical:before{content:"󱃨"}.mdi-floor-lamp:before{content:"󰣝"}.mdi-floor-lamp-dual:before{content:"󱁀"}.mdi-floor-lamp-dual-outline:before{content:"󱟎"}.mdi-floor-lamp-outline:before{content:"󱟈"}.mdi-floor-lamp-torchiere:before{content:"󱝇"}.mdi-floor-lamp-torchiere-outline:before{content:"󱟖"}.mdi-floor-lamp-torchiere-variant:before{content:"󱁁"}.mdi-floor-lamp-torchiere-variant-outline:before{content:"󱟏"}.mdi-floor-plan:before{content:"󰠡"}.mdi-floppy:before{content:"󰉉"}.mdi-floppy-variant:before{content:"󰧯"}.mdi-flower:before{content:"󰉊"}.mdi-flower-outline:before{content:"󰧰"}.mdi-flower-pollen:before{content:"󱢅"}.mdi-flower-pollen-outline:before{content:"󱢆"}.mdi-flower-poppy:before{content:"󰴈"}.mdi-flower-tulip:before{content:"󰧱"}.mdi-flower-tulip-outline:before{content:"󰧲"}.mdi-focus-auto:before{content:"󰽎"}.mdi-focus-field:before{content:"󰽏"}.mdi-focus-field-horizontal:before{content:"󰽐"}.mdi-focus-field-vertical:before{content:"󰽑"}.mdi-folder:before{content:"󰉋"}.mdi-folder-account:before{content:"󰉌"}.mdi-folder-account-outline:before{content:"󰮜"}.mdi-folder-alert:before{content:"󰷌"}.mdi-folder-alert-outline:before{content:"󰷍"}.mdi-folder-arrow-down:before{content:"󱧨"}.mdi-folder-arrow-down-outline:before{content:"󱧩"}.mdi-folder-arrow-left:before{content:"󱧪"}.mdi-folder-arrow-left-outline:before{content:"󱧫"}.mdi-folder-arrow-left-right:before{content:"󱧬"}.mdi-folder-arrow-left-right-outline:before{content:"󱧭"}.mdi-folder-arrow-right:before{content:"󱧮"}.mdi-folder-arrow-right-outline:before{content:"󱧯"}.mdi-folder-arrow-up:before{content:"󱧰"}.mdi-folder-arrow-up-down:before{content:"󱧱"}.mdi-folder-arrow-up-down-outline:before{content:"󱧲"}.mdi-folder-arrow-up-outline:before{content:"󱧳"}.mdi-folder-cancel:before{content:"󱧴"}.mdi-folder-cancel-outline:before{content:"󱧵"}.mdi-folder-check:before{content:"󱥾"}.mdi-folder-check-outline:before{content:"󱥿"}.mdi-folder-clock:before{content:"󰪺"}.mdi-folder-clock-outline:before{content:"󰪻"}.mdi-folder-cog:before{content:"󱁿"}.mdi-folder-cog-outline:before{content:"󱂀"}.mdi-folder-download:before{content:"󰉍"}.mdi-folder-download-outline:before{content:"󱃩"}.mdi-folder-edit:before{content:"󰣞"}.mdi-folder-edit-outline:before{content:"󰷎"}.mdi-folder-eye:before{content:"󱞊"}.mdi-folder-eye-outline:before{content:"󱞋"}.mdi-folder-file:before{content:"󱧶"}.mdi-folder-file-outline:before{content:"󱧷"}.mdi-folder-google-drive:before{content:"󰉎"}.mdi-folder-heart:before{content:"󱃪"}.mdi-folder-heart-outline:before{content:"󱃫"}.mdi-folder-hidden:before{content:"󱞞"}.mdi-folder-home:before{content:"󱂵"}.mdi-folder-home-outline:before{content:"󱂶"}.mdi-folder-image:before{content:"󰉏"}.mdi-folder-information:before{content:"󱂷"}.mdi-folder-information-outline:before{content:"󱂸"}.mdi-folder-key:before{content:"󰢬"}.mdi-folder-key-network:before{content:"󰢭"}.mdi-folder-key-network-outline:before{content:"󰲀"}.mdi-folder-key-outline:before{content:"󱃬"}.mdi-folder-lock:before{content:"󰉐"}.mdi-folder-lock-open:before{content:"󰉑"}.mdi-folder-lock-open-outline:before{content:"󱪧"}.mdi-folder-lock-outline:before{content:"󱪨"}.mdi-folder-marker:before{content:"󱉭"}.mdi-folder-marker-outline:before{content:"󱉮"}.mdi-folder-minus:before{content:"󱭉"}.mdi-folder-minus-outline:before{content:"󱭊"}.mdi-folder-move:before{content:"󰉒"}.mdi-folder-move-outline:before{content:"󱉆"}.mdi-folder-multiple:before{content:"󰉓"}.mdi-folder-multiple-image:before{content:"󰉔"}.mdi-folder-multiple-outline:before{content:"󰉕"}.mdi-folder-multiple-plus:before{content:"󱑾"}.mdi-folder-multiple-plus-outline:before{content:"󱑿"}.mdi-folder-music:before{content:"󱍙"}.mdi-folder-music-outline:before{content:"󱍚"}.mdi-folder-network:before{content:"󰡰"}.mdi-folder-network-outline:before{content:"󰲁"}.mdi-folder-off:before{content:"󱧸"}.mdi-folder-off-outline:before{content:"󱧹"}.mdi-folder-open:before{content:"󰝰"}.mdi-folder-open-outline:before{content:"󰷏"}.mdi-folder-outline:before{content:"󰉖"}.mdi-folder-play:before{content:"󱧺"}.mdi-folder-play-outline:before{content:"󱧻"}.mdi-folder-plus:before{content:"󰉗"}.mdi-folder-plus-outline:before{content:"󰮝"}.mdi-folder-pound:before{content:"󰴉"}.mdi-folder-pound-outline:before{content:"󰴊"}.mdi-folder-question:before{content:"󱧊"}.mdi-folder-question-outline:before{content:"󱧋"}.mdi-folder-refresh:before{content:"󰝉"}.mdi-folder-refresh-outline:before{content:"󰕂"}.mdi-folder-remove:before{content:"󰉘"}.mdi-folder-remove-outline:before{content:"󰮞"}.mdi-folder-search:before{content:"󰥨"}.mdi-folder-search-outline:before{content:"󰥩"}.mdi-folder-settings:before{content:"󱁽"}.mdi-folder-settings-outline:before{content:"󱁾"}.mdi-folder-star:before{content:"󰚝"}.mdi-folder-star-multiple:before{content:"󱏓"}.mdi-folder-star-multiple-outline:before{content:"󱏔"}.mdi-folder-star-outline:before{content:"󰮟"}.mdi-folder-swap:before{content:"󰾶"}.mdi-folder-swap-outline:before{content:"󰾷"}.mdi-folder-sync:before{content:"󰴋"}.mdi-folder-sync-outline:before{content:"󰴌"}.mdi-folder-table:before{content:"󱋣"}.mdi-folder-table-outline:before{content:"󱋤"}.mdi-folder-text:before{content:"󰲂"}.mdi-folder-text-outline:before{content:"󰲃"}.mdi-folder-upload:before{content:"󰉙"}.mdi-folder-upload-outline:before{content:"󱃭"}.mdi-folder-wrench:before{content:"󱧼"}.mdi-folder-wrench-outline:before{content:"󱧽"}.mdi-folder-zip:before{content:"󰛫"}.mdi-folder-zip-outline:before{content:"󰞹"}.mdi-font-awesome:before{content:"󰀺"}.mdi-food:before{content:"󰉚"}.mdi-food-apple:before{content:"󰉛"}.mdi-food-apple-outline:before{content:"󰲄"}.mdi-food-croissant:before{content:"󰟈"}.mdi-food-drumstick:before{content:"󱐟"}.mdi-food-drumstick-off:before{content:"󱑨"}.mdi-food-drumstick-off-outline:before{content:"󱑩"}.mdi-food-drumstick-outline:before{content:"󱐠"}.mdi-food-fork-drink:before{content:"󰗲"}.mdi-food-halal:before{content:"󱕲"}.mdi-food-hot-dog:before{content:"󱡋"}.mdi-food-kosher:before{content:"󱕳"}.mdi-food-off:before{content:"󰗳"}.mdi-food-off-outline:before{content:"󱤕"}.mdi-food-outline:before{content:"󱤖"}.mdi-food-steak:before{content:"󱑪"}.mdi-food-steak-off:before{content:"󱑫"}.mdi-food-takeout-box:before{content:"󱠶"}.mdi-food-takeout-box-outline:before{content:"󱠷"}.mdi-food-turkey:before{content:"󱜜"}.mdi-food-variant:before{content:"󰉜"}.mdi-food-variant-off:before{content:"󱏥"}.mdi-foot-print:before{content:"󰽒"}.mdi-football:before{content:"󰉝"}.mdi-football-australian:before{content:"󰉞"}.mdi-football-helmet:before{content:"󰉟"}.mdi-forest:before{content:"󱢗"}.mdi-forest-outline:before{content:"󱱣"}.mdi-forklift:before{content:"󰟉"}.mdi-form-dropdown:before{content:"󱐀"}.mdi-form-select:before{content:"󱐁"}.mdi-form-textarea:before{content:"󱂕"}.mdi-form-textbox:before{content:"󰘎"}.mdi-form-textbox-lock:before{content:"󱍝"}.mdi-form-textbox-password:before{content:"󰟵"}.mdi-format-align-bottom:before{content:"󰝓"}.mdi-format-align-center:before{content:"󰉠"}.mdi-format-align-justify:before{content:"󰉡"}.mdi-format-align-left:before{content:"󰉢"}.mdi-format-align-middle:before{content:"󰝔"}.mdi-format-align-right:before{content:"󰉣"}.mdi-format-align-top:before{content:"󰝕"}.mdi-format-annotation-minus:before{content:"󰪼"}.mdi-format-annotation-plus:before{content:"󰙆"}.mdi-format-bold:before{content:"󰉤"}.mdi-format-clear:before{content:"󰉥"}.mdi-format-color-fill:before{content:"󰉦"}.mdi-format-color-highlight:before{content:"󰸱"}.mdi-format-color-marker-cancel:before{content:"󱌓"}.mdi-format-color-text:before{content:"󰚞"}.mdi-format-columns:before{content:"󰣟"}.mdi-format-float-center:before{content:"󰉧"}.mdi-format-float-left:before{content:"󰉨"}.mdi-format-float-none:before{content:"󰉩"}.mdi-format-float-right:before{content:"󰉪"}.mdi-format-font:before{content:"󰛖"}.mdi-format-font-size-decrease:before{content:"󰧳"}.mdi-format-font-size-increase:before{content:"󰧴"}.mdi-format-header-1:before{content:"󰉫"}.mdi-format-header-2:before{content:"󰉬"}.mdi-format-header-3:before{content:"󰉭"}.mdi-format-header-4:before{content:"󰉮"}.mdi-format-header-5:before{content:"󰉯"}.mdi-format-header-6:before{content:"󰉰"}.mdi-format-header-decrease:before{content:"󰉱"}.mdi-format-header-equal:before{content:"󰉲"}.mdi-format-header-increase:before{content:"󰉳"}.mdi-format-header-pound:before{content:"󰉴"}.mdi-format-horizontal-align-center:before{content:"󰘞"}.mdi-format-horizontal-align-left:before{content:"󰘟"}.mdi-format-horizontal-align-right:before{content:"󰘠"}.mdi-format-indent-decrease:before{content:"󰉵"}.mdi-format-indent-increase:before{content:"󰉶"}.mdi-format-italic:before{content:"󰉷"}.mdi-format-letter-case:before{content:"󰬴"}.mdi-format-letter-case-lower:before{content:"󰬵"}.mdi-format-letter-case-upper:before{content:"󰬶"}.mdi-format-letter-ends-with:before{content:"󰾸"}.mdi-format-letter-matches:before{content:"󰾹"}.mdi-format-letter-spacing:before{content:"󱥖"}.mdi-format-letter-spacing-variant:before{content:"󱫻"}.mdi-format-letter-starts-with:before{content:"󰾺"}.mdi-format-line-height:before{content:"󱫼"}.mdi-format-line-spacing:before{content:"󰉸"}.mdi-format-line-style:before{content:"󰗈"}.mdi-format-line-weight:before{content:"󰗉"}.mdi-format-list-bulleted:before{content:"󰉹"}.mdi-format-list-bulleted-square:before{content:"󰷐"}.mdi-format-list-bulleted-triangle:before{content:"󰺲"}.mdi-format-list-bulleted-type:before{content:"󰉺"}.mdi-format-list-checkbox:before{content:"󰥪"}.mdi-format-list-checks:before{content:"󰝖"}.mdi-format-list-group:before{content:"󱡠"}.mdi-format-list-group-plus:before{content:"󱭖"}.mdi-format-list-numbered:before{content:"󰉻"}.mdi-format-list-numbered-rtl:before{content:"󰴍"}.mdi-format-list-text:before{content:"󱉯"}.mdi-format-overline:before{content:"󰺳"}.mdi-format-page-break:before{content:"󰛗"}.mdi-format-page-split:before{content:"󱤗"}.mdi-format-paint:before{content:"󰉼"}.mdi-format-paragraph:before{content:"󰉽"}.mdi-format-paragraph-spacing:before{content:"󱫽"}.mdi-format-pilcrow:before{content:"󰛘"}.mdi-format-pilcrow-arrow-left:before{content:"󰊆"}.mdi-format-pilcrow-arrow-right:before{content:"󰊅"}.mdi-format-quote-close:before{content:"󰉾"}.mdi-format-quote-close-outline:before{content:"󱆨"}.mdi-format-quote-open:before{content:"󰝗"}.mdi-format-quote-open-outline:before{content:"󱆧"}.mdi-format-rotate-90:before{content:"󰚪"}.mdi-format-section:before{content:"󰚟"}.mdi-format-size:before{content:"󰉿"}.mdi-format-strikethrough:before{content:"󰊀"}.mdi-format-strikethrough-variant:before{content:"󰊁"}.mdi-format-subscript:before{content:"󰊂"}.mdi-format-superscript:before{content:"󰊃"}.mdi-format-text:before{content:"󰊄"}.mdi-format-text-rotation-angle-down:before{content:"󰾻"}.mdi-format-text-rotation-angle-up:before{content:"󰾼"}.mdi-format-text-rotation-down:before{content:"󰵳"}.mdi-format-text-rotation-down-vertical:before{content:"󰾽"}.mdi-format-text-rotation-none:before{content:"󰵴"}.mdi-format-text-rotation-up:before{content:"󰾾"}.mdi-format-text-rotation-vertical:before{content:"󰾿"}.mdi-format-text-variant:before{content:"󰸲"}.mdi-format-text-variant-outline:before{content:"󱔏"}.mdi-format-text-wrapping-clip:before{content:"󰴎"}.mdi-format-text-wrapping-overflow:before{content:"󰴏"}.mdi-format-text-wrapping-wrap:before{content:"󰴐"}.mdi-format-textbox:before{content:"󰴑"}.mdi-format-title:before{content:"󰗴"}.mdi-format-underline:before{content:"󰊇"}.mdi-format-underline-wavy:before{content:"󱣩"}.mdi-format-vertical-align-bottom:before{content:"󰘡"}.mdi-format-vertical-align-center:before{content:"󰘢"}.mdi-format-vertical-align-top:before{content:"󰘣"}.mdi-format-wrap-inline:before{content:"󰊈"}.mdi-format-wrap-square:before{content:"󰊉"}.mdi-format-wrap-tight:before{content:"󰊊"}.mdi-format-wrap-top-bottom:before{content:"󰊋"}.mdi-forum:before{content:"󰊌"}.mdi-forum-minus:before{content:"󱪩"}.mdi-forum-minus-outline:before{content:"󱪪"}.mdi-forum-outline:before{content:"󰠢"}.mdi-forum-plus:before{content:"󱪫"}.mdi-forum-plus-outline:before{content:"󱪬"}.mdi-forum-remove:before{content:"󱪭"}.mdi-forum-remove-outline:before{content:"󱪮"}.mdi-forward:before{content:"󰊍"}.mdi-forwardburger:before{content:"󰵵"}.mdi-fountain:before{content:"󰥫"}.mdi-fountain-pen:before{content:"󰴒"}.mdi-fountain-pen-tip:before{content:"󰴓"}.mdi-fraction-one-half:before{content:"󱦒"}.mdi-freebsd:before{content:"󰣠"}.mdi-french-fries:before{content:"󱥗"}.mdi-frequently-asked-questions:before{content:"󰺴"}.mdi-fridge:before{content:"󰊐"}.mdi-fridge-alert:before{content:"󱆱"}.mdi-fridge-alert-outline:before{content:"󱆲"}.mdi-fridge-bottom:before{content:"󰊒"}.mdi-fridge-industrial:before{content:"󱗮"}.mdi-fridge-industrial-alert:before{content:"󱗯"}.mdi-fridge-industrial-alert-outline:before{content:"󱗰"}.mdi-fridge-industrial-off:before{content:"󱗱"}.mdi-fridge-industrial-off-outline:before{content:"󱗲"}.mdi-fridge-industrial-outline:before{content:"󱗳"}.mdi-fridge-off:before{content:"󱆯"}.mdi-fridge-off-outline:before{content:"󱆰"}.mdi-fridge-outline:before{content:"󰊏"}.mdi-fridge-top:before{content:"󰊑"}.mdi-fridge-variant:before{content:"󱗴"}.mdi-fridge-variant-alert:before{content:"󱗵"}.mdi-fridge-variant-alert-outline:before{content:"󱗶"}.mdi-fridge-variant-off:before{content:"󱗷"}.mdi-fridge-variant-off-outline:before{content:"󱗸"}.mdi-fridge-variant-outline:before{content:"󱗹"}.mdi-fruit-cherries:before{content:"󱁂"}.mdi-fruit-cherries-off:before{content:"󱏸"}.mdi-fruit-citrus:before{content:"󱁃"}.mdi-fruit-citrus-off:before{content:"󱏹"}.mdi-fruit-grapes:before{content:"󱁄"}.mdi-fruit-grapes-outline:before{content:"󱁅"}.mdi-fruit-pear:before{content:"󱨎"}.mdi-fruit-pineapple:before{content:"󱁆"}.mdi-fruit-watermelon:before{content:"󱁇"}.mdi-fuel:before{content:"󰟊"}.mdi-fuel-cell:before{content:"󱢵"}.mdi-fullscreen:before{content:"󰊓"}.mdi-fullscreen-exit:before{content:"󰊔"}.mdi-function:before{content:"󰊕"}.mdi-function-variant:before{content:"󰡱"}.mdi-furigana-horizontal:before{content:"󱂁"}.mdi-furigana-vertical:before{content:"󱂂"}.mdi-fuse:before{content:"󰲅"}.mdi-fuse-alert:before{content:"󱐭"}.mdi-fuse-blade:before{content:"󰲆"}.mdi-fuse-off:before{content:"󱐬"}.mdi-gamepad:before{content:"󰊖"}.mdi-gamepad-circle:before{content:"󰸳"}.mdi-gamepad-circle-down:before{content:"󰸴"}.mdi-gamepad-circle-left:before{content:"󰸵"}.mdi-gamepad-circle-outline:before{content:"󰸶"}.mdi-gamepad-circle-right:before{content:"󰸷"}.mdi-gamepad-circle-up:before{content:"󰸸"}.mdi-gamepad-down:before{content:"󰸹"}.mdi-gamepad-left:before{content:"󰸺"}.mdi-gamepad-outline:before{content:"󱤙"}.mdi-gamepad-right:before{content:"󰸻"}.mdi-gamepad-round:before{content:"󰸼"}.mdi-gamepad-round-down:before{content:"󰸽"}.mdi-gamepad-round-left:before{content:"󰸾"}.mdi-gamepad-round-outline:before{content:"󰸿"}.mdi-gamepad-round-right:before{content:"󰹀"}.mdi-gamepad-round-up:before{content:"󰹁"}.mdi-gamepad-square:before{content:"󰺵"}.mdi-gamepad-square-outline:before{content:"󰺶"}.mdi-gamepad-up:before{content:"󰹂"}.mdi-gamepad-variant:before{content:"󰊗"}.mdi-gamepad-variant-outline:before{content:"󰺷"}.mdi-gamma:before{content:"󱃮"}.mdi-gantry-crane:before{content:"󰷑"}.mdi-garage:before{content:"󰛙"}.mdi-garage-alert:before{content:"󰡲"}.mdi-garage-alert-variant:before{content:"󱋕"}.mdi-garage-lock:before{content:"󱟻"}.mdi-garage-open:before{content:"󰛚"}.mdi-garage-open-variant:before{content:"󱋔"}.mdi-garage-variant:before{content:"󱋓"}.mdi-garage-variant-lock:before{content:"󱟼"}.mdi-gas-burner:before{content:"󱨛"}.mdi-gas-cylinder:before{content:"󰙇"}.mdi-gas-station:before{content:"󰊘"}.mdi-gas-station-in-use:before{content:"󱳄"}.mdi-gas-station-in-use-outline:before{content:"󱳅"}.mdi-gas-station-off:before{content:"󱐉"}.mdi-gas-station-off-outline:before{content:"󱐊"}.mdi-gas-station-outline:before{content:"󰺸"}.mdi-gate:before{content:"󰊙"}.mdi-gate-alert:before{content:"󱟸"}.mdi-gate-and:before{content:"󰣡"}.mdi-gate-arrow-left:before{content:"󱟷"}.mdi-gate-arrow-right:before{content:"󱅩"}.mdi-gate-buffer:before{content:"󱫾"}.mdi-gate-nand:before{content:"󰣢"}.mdi-gate-nor:before{content:"󰣣"}.mdi-gate-not:before{content:"󰣤"}.mdi-gate-open:before{content:"󱅪"}.mdi-gate-or:before{content:"󰣥"}.mdi-gate-xnor:before{content:"󰣦"}.mdi-gate-xor:before{content:"󰣧"}.mdi-gatsby:before{content:"󰹃"}.mdi-gauge:before{content:"󰊚"}.mdi-gauge-empty:before{content:"󰡳"}.mdi-gauge-full:before{content:"󰡴"}.mdi-gauge-low:before{content:"󰡵"}.mdi-gavel:before{content:"󰊛"}.mdi-gender-female:before{content:"󰊜"}.mdi-gender-male:before{content:"󰊝"}.mdi-gender-male-female:before{content:"󰊞"}.mdi-gender-male-female-variant:before{content:"󱄿"}.mdi-gender-non-binary:before{content:"󱅀"}.mdi-gender-transgender:before{content:"󰊟"}.mdi-generator-mobile:before{content:"󱲊"}.mdi-generator-portable:before{content:"󱲋"}.mdi-generator-stationary:before{content:"󱲌"}.mdi-gentoo:before{content:"󰣨"}.mdi-gesture:before{content:"󰟋"}.mdi-gesture-double-tap:before{content:"󰜼"}.mdi-gesture-pinch:before{content:"󰪽"}.mdi-gesture-spread:before{content:"󰪾"}.mdi-gesture-swipe:before{content:"󰵶"}.mdi-gesture-swipe-down:before{content:"󰜽"}.mdi-gesture-swipe-horizontal:before{content:"󰪿"}.mdi-gesture-swipe-left:before{content:"󰜾"}.mdi-gesture-swipe-right:before{content:"󰜿"}.mdi-gesture-swipe-up:before{content:"󰝀"}.mdi-gesture-swipe-vertical:before{content:"󰫀"}.mdi-gesture-tap:before{content:"󰝁"}.mdi-gesture-tap-box:before{content:"󱊩"}.mdi-gesture-tap-button:before{content:"󱊨"}.mdi-gesture-tap-hold:before{content:"󰵷"}.mdi-gesture-two-double-tap:before{content:"󰝂"}.mdi-gesture-two-tap:before{content:"󰝃"}.mdi-ghost:before{content:"󰊠"}.mdi-ghost-off:before{content:"󰧵"}.mdi-ghost-off-outline:before{content:"󱙜"}.mdi-ghost-outline:before{content:"󱙝"}.mdi-gift:before{content:"󰹄"}.mdi-gift-off:before{content:"󱛯"}.mdi-gift-off-outline:before{content:"󱛰"}.mdi-gift-open:before{content:"󱛱"}.mdi-gift-open-outline:before{content:"󱛲"}.mdi-gift-outline:before{content:"󰊡"}.mdi-git:before{content:"󰊢"}.mdi-github:before{content:"󰊤"}.mdi-gitlab:before{content:"󰮠"}.mdi-glass-cocktail:before{content:"󰍖"}.mdi-glass-cocktail-off:before{content:"󱗦"}.mdi-glass-flute:before{content:"󰊥"}.mdi-glass-fragile:before{content:"󱡳"}.mdi-glass-mug:before{content:"󰊦"}.mdi-glass-mug-off:before{content:"󱗧"}.mdi-glass-mug-variant:before{content:"󱄖"}.mdi-glass-mug-variant-off:before{content:"󱗨"}.mdi-glass-pint-outline:before{content:"󱌍"}.mdi-glass-stange:before{content:"󰊧"}.mdi-glass-tulip:before{content:"󰊨"}.mdi-glass-wine:before{content:"󰡶"}.mdi-glasses:before{content:"󰊪"}.mdi-globe-light:before{content:"󰙯"}.mdi-globe-light-outline:before{content:"󱋗"}.mdi-globe-model:before{content:"󰣩"}.mdi-gmail:before{content:"󰊫"}.mdi-gnome:before{content:"󰊬"}.mdi-go-kart:before{content:"󰵹"}.mdi-go-kart-track:before{content:"󰵺"}.mdi-gog:before{content:"󰮡"}.mdi-gold:before{content:"󱉏"}.mdi-golf:before{content:"󰠣"}.mdi-golf-cart:before{content:"󱆤"}.mdi-golf-tee:before{content:"󱂃"}.mdi-gondola:before{content:"󰚆"}.mdi-goodreads:before{content:"󰵻"}.mdi-google:before{content:"󰊭"}.mdi-google-ads:before{content:"󰲇"}.mdi-google-analytics:before{content:"󰟌"}.mdi-google-assistant:before{content:"󰟍"}.mdi-google-cardboard:before{content:"󰊮"}.mdi-google-chrome:before{content:"󰊯"}.mdi-google-circles:before{content:"󰊰"}.mdi-google-circles-communities:before{content:"󰊱"}.mdi-google-circles-extended:before{content:"󰊲"}.mdi-google-circles-group:before{content:"󰊳"}.mdi-google-classroom:before{content:"󰋀"}.mdi-google-cloud:before{content:"󱇶"}.mdi-google-downasaur:before{content:"󱍢"}.mdi-google-drive:before{content:"󰊶"}.mdi-google-earth:before{content:"󰊷"}.mdi-google-fit:before{content:"󰥬"}.mdi-google-glass:before{content:"󰊸"}.mdi-google-hangouts:before{content:"󰋉"}.mdi-google-keep:before{content:"󰛜"}.mdi-google-lens:before{content:"󰧶"}.mdi-google-maps:before{content:"󰗵"}.mdi-google-my-business:before{content:"󱁈"}.mdi-google-nearby:before{content:"󰊹"}.mdi-google-play:before{content:"󰊼"}.mdi-google-plus:before{content:"󰊽"}.mdi-google-podcast:before{content:"󰺹"}.mdi-google-spreadsheet:before{content:"󰧷"}.mdi-google-street-view:before{content:"󰲈"}.mdi-google-translate:before{content:"󰊿"}.mdi-gradient-horizontal:before{content:"󱝊"}.mdi-gradient-vertical:before{content:"󰚠"}.mdi-grain:before{content:"󰵼"}.mdi-graph:before{content:"󱁉"}.mdi-graph-outline:before{content:"󱁊"}.mdi-graphql:before{content:"󰡷"}.mdi-grass:before{content:"󱔐"}.mdi-grave-stone:before{content:"󰮢"}.mdi-grease-pencil:before{content:"󰙈"}.mdi-greater-than:before{content:"󰥭"}.mdi-greater-than-or-equal:before{content:"󰥮"}.mdi-greenhouse:before{content:"󰀭"}.mdi-grid:before{content:"󰋁"}.mdi-grid-large:before{content:"󰝘"}.mdi-grid-off:before{content:"󰋂"}.mdi-grill:before{content:"󰹅"}.mdi-grill-outline:before{content:"󱆊"}.mdi-group:before{content:"󰋃"}.mdi-guitar-acoustic:before{content:"󰝱"}.mdi-guitar-electric:before{content:"󰋄"}.mdi-guitar-pick:before{content:"󰋅"}.mdi-guitar-pick-outline:before{content:"󰋆"}.mdi-guy-fawkes-mask:before{content:"󰠥"}.mdi-gymnastics:before{content:"󱩁"}.mdi-hail:before{content:"󰫁"}.mdi-hair-dryer:before{content:"󱃯"}.mdi-hair-dryer-outline:before{content:"󱃰"}.mdi-halloween:before{content:"󰮣"}.mdi-hamburger:before{content:"󰚅"}.mdi-hamburger-check:before{content:"󱝶"}.mdi-hamburger-minus:before{content:"󱝷"}.mdi-hamburger-off:before{content:"󱝸"}.mdi-hamburger-plus:before{content:"󱝹"}.mdi-hamburger-remove:before{content:"󱝺"}.mdi-hammer:before{content:"󰣪"}.mdi-hammer-screwdriver:before{content:"󱌢"}.mdi-hammer-sickle:before{content:"󱢇"}.mdi-hammer-wrench:before{content:"󱌣"}.mdi-hand-back-left:before{content:"󰹆"}.mdi-hand-back-left-off:before{content:"󱠰"}.mdi-hand-back-left-off-outline:before{content:"󱠲"}.mdi-hand-back-left-outline:before{content:"󱠬"}.mdi-hand-back-right:before{content:"󰹇"}.mdi-hand-back-right-off:before{content:"󱠱"}.mdi-hand-back-right-off-outline:before{content:"󱠳"}.mdi-hand-back-right-outline:before{content:"󱠭"}.mdi-hand-clap:before{content:"󱥋"}.mdi-hand-clap-off:before{content:"󱩂"}.mdi-hand-coin:before{content:"󱢏"}.mdi-hand-coin-outline:before{content:"󱢐"}.mdi-hand-cycle:before{content:"󱮜"}.mdi-hand-extended:before{content:"󱢶"}.mdi-hand-extended-outline:before{content:"󱢷"}.mdi-hand-front-left:before{content:"󱠫"}.mdi-hand-front-left-outline:before{content:"󱠮"}.mdi-hand-front-right:before{content:"󰩏"}.mdi-hand-front-right-outline:before{content:"󱠯"}.mdi-hand-heart:before{content:"󱃱"}.mdi-hand-heart-outline:before{content:"󱕾"}.mdi-hand-okay:before{content:"󰩐"}.mdi-hand-peace:before{content:"󰩑"}.mdi-hand-peace-variant:before{content:"󰩒"}.mdi-hand-pointing-down:before{content:"󰩓"}.mdi-hand-pointing-left:before{content:"󰩔"}.mdi-hand-pointing-right:before{content:"󰋇"}.mdi-hand-pointing-up:before{content:"󰩕"}.mdi-hand-saw:before{content:"󰹈"}.mdi-hand-wash:before{content:"󱕿"}.mdi-hand-wash-outline:before{content:"󱖀"}.mdi-hand-water:before{content:"󱎟"}.mdi-hand-wave:before{content:"󱠡"}.mdi-hand-wave-outline:before{content:"󱠢"}.mdi-handball:before{content:"󰽓"}.mdi-handcuffs:before{content:"󱄾"}.mdi-hands-pray:before{content:"󰕹"}.mdi-handshake:before{content:"󱈘"}.mdi-handshake-outline:before{content:"󱖡"}.mdi-hanger:before{content:"󰋈"}.mdi-hard-hat:before{content:"󰥯"}.mdi-harddisk:before{content:"󰋊"}.mdi-harddisk-plus:before{content:"󱁋"}.mdi-harddisk-remove:before{content:"󱁌"}.mdi-hat-fedora:before{content:"󰮤"}.mdi-hazard-lights:before{content:"󰲉"}.mdi-hdmi-port:before{content:"󱮸"}.mdi-hdr:before{content:"󰵽"}.mdi-hdr-off:before{content:"󰵾"}.mdi-head:before{content:"󱍞"}.mdi-head-alert:before{content:"󱌸"}.mdi-head-alert-outline:before{content:"󱌹"}.mdi-head-check:before{content:"󱌺"}.mdi-head-check-outline:before{content:"󱌻"}.mdi-head-cog:before{content:"󱌼"}.mdi-head-cog-outline:before{content:"󱌽"}.mdi-head-dots-horizontal:before{content:"󱌾"}.mdi-head-dots-horizontal-outline:before{content:"󱌿"}.mdi-head-flash:before{content:"󱍀"}.mdi-head-flash-outline:before{content:"󱍁"}.mdi-head-heart:before{content:"󱍂"}.mdi-head-heart-outline:before{content:"󱍃"}.mdi-head-lightbulb:before{content:"󱍄"}.mdi-head-lightbulb-outline:before{content:"󱍅"}.mdi-head-minus:before{content:"󱍆"}.mdi-head-minus-outline:before{content:"󱍇"}.mdi-head-outline:before{content:"󱍟"}.mdi-head-plus:before{content:"󱍈"}.mdi-head-plus-outline:before{content:"󱍉"}.mdi-head-question:before{content:"󱍊"}.mdi-head-question-outline:before{content:"󱍋"}.mdi-head-remove:before{content:"󱍌"}.mdi-head-remove-outline:before{content:"󱍍"}.mdi-head-snowflake:before{content:"󱍎"}.mdi-head-snowflake-outline:before{content:"󱍏"}.mdi-head-sync:before{content:"󱍐"}.mdi-head-sync-outline:before{content:"󱍑"}.mdi-headphones:before{content:"󰋋"}.mdi-headphones-bluetooth:before{content:"󰥰"}.mdi-headphones-box:before{content:"󰋌"}.mdi-headphones-off:before{content:"󰟎"}.mdi-headphones-settings:before{content:"󰋍"}.mdi-headset:before{content:"󰋎"}.mdi-headset-dock:before{content:"󰋏"}.mdi-headset-off:before{content:"󰋐"}.mdi-heart:before{content:"󰋑"}.mdi-heart-box:before{content:"󰋒"}.mdi-heart-box-outline:before{content:"󰋓"}.mdi-heart-broken:before{content:"󰋔"}.mdi-heart-broken-outline:before{content:"󰴔"}.mdi-heart-circle:before{content:"󰥱"}.mdi-heart-circle-outline:before{content:"󰥲"}.mdi-heart-cog:before{content:"󱙣"}.mdi-heart-cog-outline:before{content:"󱙤"}.mdi-heart-flash:before{content:"󰻹"}.mdi-heart-half:before{content:"󰛟"}.mdi-heart-half-full:before{content:"󰛞"}.mdi-heart-half-outline:before{content:"󰛠"}.mdi-heart-minus:before{content:"󱐯"}.mdi-heart-minus-outline:before{content:"󱐲"}.mdi-heart-multiple:before{content:"󰩖"}.mdi-heart-multiple-outline:before{content:"󰩗"}.mdi-heart-off:before{content:"󰝙"}.mdi-heart-off-outline:before{content:"󱐴"}.mdi-heart-outline:before{content:"󰋕"}.mdi-heart-plus:before{content:"󱐮"}.mdi-heart-plus-outline:before{content:"󱐱"}.mdi-heart-pulse:before{content:"󰗶"}.mdi-heart-remove:before{content:"󱐰"}.mdi-heart-remove-outline:before{content:"󱐳"}.mdi-heart-search:before{content:"󱲍"}.mdi-heart-settings:before{content:"󱙥"}.mdi-heart-settings-outline:before{content:"󱙦"}.mdi-heat-pump:before{content:"󱩃"}.mdi-heat-pump-outline:before{content:"󱩄"}.mdi-heat-wave:before{content:"󱩅"}.mdi-heating-coil:before{content:"󱪯"}.mdi-helicopter:before{content:"󰫂"}.mdi-help:before{content:"󰋖"}.mdi-help-box:before{content:"󰞋"}.mdi-help-box-multiple:before{content:"󱰊"}.mdi-help-box-multiple-outline:before{content:"󱰋"}.mdi-help-box-outline:before{content:"󱰌"}.mdi-help-circle:before{content:"󰋗"}.mdi-help-circle-outline:before{content:"󰘥"}.mdi-help-network:before{content:"󰛵"}.mdi-help-network-outline:before{content:"󰲊"}.mdi-help-rhombus:before{content:"󰮥"}.mdi-help-rhombus-outline:before{content:"󰮦"}.mdi-hexadecimal:before{content:"󱊧"}.mdi-hexagon:before{content:"󰋘"}.mdi-hexagon-multiple:before{content:"󰛡"}.mdi-hexagon-multiple-outline:before{content:"󱃲"}.mdi-hexagon-outline:before{content:"󰋙"}.mdi-hexagon-slice-1:before{content:"󰫃"}.mdi-hexagon-slice-2:before{content:"󰫄"}.mdi-hexagon-slice-3:before{content:"󰫅"}.mdi-hexagon-slice-4:before{content:"󰫆"}.mdi-hexagon-slice-5:before{content:"󰫇"}.mdi-hexagon-slice-6:before{content:"󰫈"}.mdi-hexagram:before{content:"󰫉"}.mdi-hexagram-outline:before{content:"󰫊"}.mdi-high-definition:before{content:"󰟏"}.mdi-high-definition-box:before{content:"󰡸"}.mdi-highway:before{content:"󰗷"}.mdi-hiking:before{content:"󰵿"}.mdi-history:before{content:"󰋚"}.mdi-hockey-puck:before{content:"󰡹"}.mdi-hockey-sticks:before{content:"󰡺"}.mdi-hololens:before{content:"󰋛"}.mdi-home:before{content:"󰋜"}.mdi-home-account:before{content:"󰠦"}.mdi-home-alert:before{content:"󰡻"}.mdi-home-alert-outline:before{content:"󱗐"}.mdi-home-analytics:before{content:"󰺺"}.mdi-home-assistant:before{content:"󰟐"}.mdi-home-automation:before{content:"󰟑"}.mdi-home-battery:before{content:"󱤁"}.mdi-home-battery-outline:before{content:"󱤂"}.mdi-home-circle:before{content:"󰟒"}.mdi-home-circle-outline:before{content:"󱁍"}.mdi-home-city:before{content:"󰴕"}.mdi-home-city-outline:before{content:"󰴖"}.mdi-home-clock:before{content:"󱨒"}.mdi-home-clock-outline:before{content:"󱨓"}.mdi-home-edit:before{content:"󱅙"}.mdi-home-edit-outline:before{content:"󱅚"}.mdi-home-export-outline:before{content:"󰾛"}.mdi-home-flood:before{content:"󰻺"}.mdi-home-floor-0:before{content:"󰷒"}.mdi-home-floor-1:before{content:"󰶀"}.mdi-home-floor-2:before{content:"󰶁"}.mdi-home-floor-3:before{content:"󰶂"}.mdi-home-floor-a:before{content:"󰶃"}.mdi-home-floor-b:before{content:"󰶄"}.mdi-home-floor-g:before{content:"󰶅"}.mdi-home-floor-l:before{content:"󰶆"}.mdi-home-floor-negative-1:before{content:"󰷓"}.mdi-home-group:before{content:"󰷔"}.mdi-home-group-minus:before{content:"󱧁"}.mdi-home-group-plus:before{content:"󱧀"}.mdi-home-group-remove:before{content:"󱧂"}.mdi-home-heart:before{content:"󰠧"}.mdi-home-import-outline:before{content:"󰾜"}.mdi-home-lightbulb:before{content:"󱉑"}.mdi-home-lightbulb-outline:before{content:"󱉒"}.mdi-home-lightning-bolt:before{content:"󱤃"}.mdi-home-lightning-bolt-outline:before{content:"󱤄"}.mdi-home-lock:before{content:"󰣫"}.mdi-home-lock-open:before{content:"󰣬"}.mdi-home-map-marker:before{content:"󰗸"}.mdi-home-minus:before{content:"󰥴"}.mdi-home-minus-outline:before{content:"󱏕"}.mdi-home-modern:before{content:"󰋝"}.mdi-home-off:before{content:"󱩆"}.mdi-home-off-outline:before{content:"󱩇"}.mdi-home-outline:before{content:"󰚡"}.mdi-home-percent:before{content:"󱱼"}.mdi-home-percent-outline:before{content:"󱱽"}.mdi-home-plus:before{content:"󰥵"}.mdi-home-plus-outline:before{content:"󱏖"}.mdi-home-remove:before{content:"󱉇"}.mdi-home-remove-outline:before{content:"󱏗"}.mdi-home-roof:before{content:"󱄫"}.mdi-home-search:before{content:"󱎰"}.mdi-home-search-outline:before{content:"󱎱"}.mdi-home-silo:before{content:"󱮠"}.mdi-home-silo-outline:before{content:"󱮡"}.mdi-home-sound-in:before{content:"󱰯"}.mdi-home-sound-in-outline:before{content:"󱰰"}.mdi-home-sound-out:before{content:"󱰱"}.mdi-home-sound-out-outline:before{content:"󱰲"}.mdi-home-switch:before{content:"󱞔"}.mdi-home-switch-outline:before{content:"󱞕"}.mdi-home-thermometer:before{content:"󰽔"}.mdi-home-thermometer-outline:before{content:"󰽕"}.mdi-home-variant:before{content:"󰋞"}.mdi-home-variant-outline:before{content:"󰮧"}.mdi-hook:before{content:"󰛢"}.mdi-hook-off:before{content:"󰛣"}.mdi-hoop-house:before{content:"󰹖"}.mdi-hops:before{content:"󰋟"}.mdi-horizontal-rotate-clockwise:before{content:"󱃳"}.mdi-horizontal-rotate-counterclockwise:before{content:"󱃴"}.mdi-horse:before{content:"󱖿"}.mdi-horse-human:before{content:"󱗀"}.mdi-horse-variant:before{content:"󱗁"}.mdi-horse-variant-fast:before{content:"󱡮"}.mdi-horseshoe:before{content:"󰩘"}.mdi-hospital:before{content:"󰿶"}.mdi-hospital-box:before{content:"󰋠"}.mdi-hospital-box-outline:before{content:"󰿷"}.mdi-hospital-building:before{content:"󰋡"}.mdi-hospital-marker:before{content:"󰋢"}.mdi-hot-tub:before{content:"󰠨"}.mdi-hours-12:before{content:"󱲔"}.mdi-hours-24:before{content:"󱑸"}.mdi-hub:before{content:"󱲕"}.mdi-hub-outline:before{content:"󱲖"}.mdi-hubspot:before{content:"󰴗"}.mdi-hulu:before{content:"󰠩"}.mdi-human:before{content:"󰋦"}.mdi-human-baby-changing-table:before{content:"󱎋"}.mdi-human-cane:before{content:"󱖁"}.mdi-human-capacity-decrease:before{content:"󱖛"}.mdi-human-capacity-increase:before{content:"󱖜"}.mdi-human-child:before{content:"󰋧"}.mdi-human-dolly:before{content:"󱦀"}.mdi-human-edit:before{content:"󱓨"}.mdi-human-female:before{content:"󰙉"}.mdi-human-female-boy:before{content:"󰩙"}.mdi-human-female-dance:before{content:"󱗉"}.mdi-human-female-female:before{content:"󰩚"}.mdi-human-female-female-child:before{content:"󱲎"}.mdi-human-female-girl:before{content:"󰩛"}.mdi-human-greeting:before{content:"󱟄"}.mdi-human-greeting-proximity:before{content:"󱖝"}.mdi-human-greeting-variant:before{content:"󰙊"}.mdi-human-handsdown:before{content:"󰙋"}.mdi-human-handsup:before{content:"󰙌"}.mdi-human-male:before{content:"󰙍"}.mdi-human-male-board:before{content:"󰢐"}.mdi-human-male-board-poll:before{content:"󰡆"}.mdi-human-male-boy:before{content:"󰩜"}.mdi-human-male-child:before{content:"󱎌"}.mdi-human-male-female:before{content:"󰋨"}.mdi-human-male-female-child:before{content:"󱠣"}.mdi-human-male-girl:before{content:"󰩝"}.mdi-human-male-height:before{content:"󰻻"}.mdi-human-male-height-variant:before{content:"󰻼"}.mdi-human-male-male:before{content:"󰩞"}.mdi-human-male-male-child:before{content:"󱲏"}.mdi-human-non-binary:before{content:"󱡈"}.mdi-human-pregnant:before{content:"󰗏"}.mdi-human-queue:before{content:"󱕱"}.mdi-human-scooter:before{content:"󱇩"}.mdi-human-walker:before{content:"󱭱"}.mdi-human-wheelchair:before{content:"󱎍"}.mdi-human-white-cane:before{content:"󱦁"}.mdi-humble-bundle:before{content:"󰝄"}.mdi-hvac:before{content:"󱍒"}.mdi-hvac-off:before{content:"󱖞"}.mdi-hydraulic-oil-level:before{content:"󱌤"}.mdi-hydraulic-oil-temperature:before{content:"󱌥"}.mdi-hydro-power:before{content:"󱋥"}.mdi-hydrogen-station:before{content:"󱢔"}.mdi-ice-cream:before{content:"󰠪"}.mdi-ice-cream-off:before{content:"󰹒"}.mdi-ice-pop:before{content:"󰻽"}.mdi-id-card:before{content:"󰿀"}.mdi-identifier:before{content:"󰻾"}.mdi-ideogram-cjk:before{content:"󱌱"}.mdi-ideogram-cjk-variant:before{content:"󱌲"}.mdi-image:before{content:"󰋩"}.mdi-image-album:before{content:"󰋪"}.mdi-image-area:before{content:"󰋫"}.mdi-image-area-close:before{content:"󰋬"}.mdi-image-auto-adjust:before{content:"󰿁"}.mdi-image-broken:before{content:"󰋭"}.mdi-image-broken-variant:before{content:"󰋮"}.mdi-image-check:before{content:"󱬥"}.mdi-image-check-outline:before{content:"󱬦"}.mdi-image-edit:before{content:"󱇣"}.mdi-image-edit-outline:before{content:"󱇤"}.mdi-image-filter-black-white:before{content:"󰋰"}.mdi-image-filter-center-focus:before{content:"󰋱"}.mdi-image-filter-center-focus-strong:before{content:"󰻿"}.mdi-image-filter-center-focus-strong-outline:before{content:"󰼀"}.mdi-image-filter-center-focus-weak:before{content:"󰋲"}.mdi-image-filter-drama:before{content:"󰋳"}.mdi-image-filter-drama-outline:before{content:"󱯿"}.mdi-image-filter-frames:before{content:"󰋴"}.mdi-image-filter-hdr:before{content:"󰋵"}.mdi-image-filter-hdr-outline:before{content:"󱱤"}.mdi-image-filter-none:before{content:"󰋶"}.mdi-image-filter-tilt-shift:before{content:"󰋷"}.mdi-image-filter-vintage:before{content:"󰋸"}.mdi-image-frame:before{content:"󰹉"}.mdi-image-lock:before{content:"󱪰"}.mdi-image-lock-outline:before{content:"󱪱"}.mdi-image-marker:before{content:"󱝻"}.mdi-image-marker-outline:before{content:"󱝼"}.mdi-image-minus:before{content:"󱐙"}.mdi-image-minus-outline:before{content:"󱭇"}.mdi-image-move:before{content:"󰧸"}.mdi-image-multiple:before{content:"󰋹"}.mdi-image-multiple-outline:before{content:"󰋯"}.mdi-image-off:before{content:"󰠫"}.mdi-image-off-outline:before{content:"󱇑"}.mdi-image-outline:before{content:"󰥶"}.mdi-image-plus:before{content:"󰡼"}.mdi-image-plus-outline:before{content:"󱭆"}.mdi-image-refresh:before{content:"󱧾"}.mdi-image-refresh-outline:before{content:"󱧿"}.mdi-image-remove:before{content:"󱐘"}.mdi-image-remove-outline:before{content:"󱭈"}.mdi-image-search:before{content:"󰥷"}.mdi-image-search-outline:before{content:"󰥸"}.mdi-image-size-select-actual:before{content:"󰲍"}.mdi-image-size-select-large:before{content:"󰲎"}.mdi-image-size-select-small:before{content:"󰲏"}.mdi-image-sync:before{content:"󱨀"}.mdi-image-sync-outline:before{content:"󱨁"}.mdi-image-text:before{content:"󱘍"}.mdi-import:before{content:"󰋺"}.mdi-inbox:before{content:"󰚇"}.mdi-inbox-arrow-down:before{content:"󰋻"}.mdi-inbox-arrow-down-outline:before{content:"󱉰"}.mdi-inbox-arrow-up:before{content:"󰏑"}.mdi-inbox-arrow-up-outline:before{content:"󱉱"}.mdi-inbox-full:before{content:"󱉲"}.mdi-inbox-full-outline:before{content:"󱉳"}.mdi-inbox-multiple:before{content:"󰢰"}.mdi-inbox-multiple-outline:before{content:"󰮨"}.mdi-inbox-outline:before{content:"󱉴"}.mdi-inbox-remove:before{content:"󱖟"}.mdi-inbox-remove-outline:before{content:"󱖠"}.mdi-incognito:before{content:"󰗹"}.mdi-incognito-circle:before{content:"󱐡"}.mdi-incognito-circle-off:before{content:"󱐢"}.mdi-incognito-off:before{content:"󰁵"}.mdi-induction:before{content:"󱡌"}.mdi-infinity:before{content:"󰛤"}.mdi-information:before{content:"󰋼"}.mdi-information-box:before{content:"󱱥"}.mdi-information-box-outline:before{content:"󱱦"}.mdi-information-off:before{content:"󱞌"}.mdi-information-off-outline:before{content:"󱞍"}.mdi-information-outline:before{content:"󰋽"}.mdi-information-slab-box:before{content:"󱱧"}.mdi-information-slab-box-outline:before{content:"󱱨"}.mdi-information-slab-circle:before{content:"󱱩"}.mdi-information-slab-circle-outline:before{content:"󱱪"}.mdi-information-slab-symbol:before{content:"󱱫"}.mdi-information-symbol:before{content:"󱱬"}.mdi-information-variant:before{content:"󰙎"}.mdi-information-variant-box:before{content:"󱱭"}.mdi-information-variant-box-outline:before{content:"󱱮"}.mdi-information-variant-circle:before{content:"󱱯"}.mdi-information-variant-circle-outline:before{content:"󱱰"}.mdi-instagram:before{content:"󰋾"}.mdi-instrument-triangle:before{content:"󱁎"}.mdi-integrated-circuit-chip:before{content:"󱤓"}.mdi-invert-colors:before{content:"󰌁"}.mdi-invert-colors-off:before{content:"󰹊"}.mdi-invoice:before{content:"󱳒"}.mdi-invoice-arrow-left:before{content:"󱳓"}.mdi-invoice-arrow-left-outline:before{content:"󱳔"}.mdi-invoice-arrow-right:before{content:"󱳕"}.mdi-invoice-arrow-right-outline:before{content:"󱳖"}.mdi-invoice-check:before{content:"󱳗"}.mdi-invoice-check-outline:before{content:"󱳘"}.mdi-invoice-clock:before{content:"󱳙"}.mdi-invoice-clock-outline:before{content:"󱳚"}.mdi-invoice-edit:before{content:"󱳛"}.mdi-invoice-edit-outline:before{content:"󱳜"}.mdi-invoice-export-outline:before{content:"󱳝"}.mdi-invoice-fast:before{content:"󱳞"}.mdi-invoice-fast-outline:before{content:"󱳟"}.mdi-invoice-import:before{content:"󱳠"}.mdi-invoice-import-outline:before{content:"󱳡"}.mdi-invoice-list:before{content:"󱳢"}.mdi-invoice-list-outline:before{content:"󱳣"}.mdi-invoice-minus:before{content:"󱳤"}.mdi-invoice-minus-outline:before{content:"󱳥"}.mdi-invoice-multiple:before{content:"󱳦"}.mdi-invoice-multiple-outline:before{content:"󱳧"}.mdi-invoice-outline:before{content:"󱳨"}.mdi-invoice-plus:before{content:"󱳩"}.mdi-invoice-plus-outline:before{content:"󱳪"}.mdi-invoice-remove:before{content:"󱳫"}.mdi-invoice-remove-outline:before{content:"󱳬"}.mdi-invoice-send:before{content:"󱳭"}.mdi-invoice-send-outline:before{content:"󱳮"}.mdi-invoice-text:before{content:"󱳯"}.mdi-invoice-text-arrow-left:before{content:"󱳰"}.mdi-invoice-text-arrow-left-outline:before{content:"󱳱"}.mdi-invoice-text-arrow-right:before{content:"󱳲"}.mdi-invoice-text-arrow-right-outline:before{content:"󱳳"}.mdi-invoice-text-check:before{content:"󱳴"}.mdi-invoice-text-check-outline:before{content:"󱳵"}.mdi-invoice-text-clock:before{content:"󱳶"}.mdi-invoice-text-clock-outline:before{content:"󱳷"}.mdi-invoice-text-edit:before{content:"󱳸"}.mdi-invoice-text-edit-outline:before{content:"󱳹"}.mdi-invoice-text-fast:before{content:"󱳺"}.mdi-invoice-text-fast-outline:before{content:"󱳻"}.mdi-invoice-text-minus:before{content:"󱳼"}.mdi-invoice-text-minus-outline:before{content:"󱳽"}.mdi-invoice-text-multiple:before{content:"󱳾"}.mdi-invoice-text-multiple-outline:before{content:"󱳿"}.mdi-invoice-text-outline:before{content:"󱴀"}.mdi-invoice-text-plus:before{content:"󱴁"}.mdi-invoice-text-plus-outline:before{content:"󱴂"}.mdi-invoice-text-remove:before{content:"󱴃"}.mdi-invoice-text-remove-outline:before{content:"󱴄"}.mdi-invoice-text-send:before{content:"󱴅"}.mdi-invoice-text-send-outline:before{content:"󱴆"}.mdi-iobroker:before{content:"󱋨"}.mdi-ip:before{content:"󰩟"}.mdi-ip-network:before{content:"󰩠"}.mdi-ip-network-outline:before{content:"󰲐"}.mdi-ip-outline:before{content:"󱦂"}.mdi-ipod:before{content:"󰲑"}.mdi-iron:before{content:"󱠤"}.mdi-iron-board:before{content:"󱠸"}.mdi-iron-outline:before{content:"󱠥"}.mdi-island:before{content:"󱁏"}.mdi-island-variant:before{content:"󱳆"}.mdi-iv-bag:before{content:"󱂹"}.mdi-jabber:before{content:"󰷕"}.mdi-jeepney:before{content:"󰌂"}.mdi-jellyfish:before{content:"󰼁"}.mdi-jellyfish-outline:before{content:"󰼂"}.mdi-jira:before{content:"󰌃"}.mdi-jquery:before{content:"󰡽"}.mdi-jsfiddle:before{content:"󰌄"}.mdi-jump-rope:before{content:"󱋿"}.mdi-kabaddi:before{content:"󰶇"}.mdi-kangaroo:before{content:"󱕘"}.mdi-karate:before{content:"󰠬"}.mdi-kayaking:before{content:"󰢯"}.mdi-keg:before{content:"󰌅"}.mdi-kettle:before{content:"󰗺"}.mdi-kettle-alert:before{content:"󱌗"}.mdi-kettle-alert-outline:before{content:"󱌘"}.mdi-kettle-off:before{content:"󱌛"}.mdi-kettle-off-outline:before{content:"󱌜"}.mdi-kettle-outline:before{content:"󰽖"}.mdi-kettle-pour-over:before{content:"󱜼"}.mdi-kettle-steam:before{content:"󱌙"}.mdi-kettle-steam-outline:before{content:"󱌚"}.mdi-kettlebell:before{content:"󱌀"}.mdi-key:before{content:"󰌆"}.mdi-key-alert:before{content:"󱦃"}.mdi-key-alert-outline:before{content:"󱦄"}.mdi-key-arrow-right:before{content:"󱌒"}.mdi-key-chain:before{content:"󱕴"}.mdi-key-chain-variant:before{content:"󱕵"}.mdi-key-change:before{content:"󰌇"}.mdi-key-link:before{content:"󱆟"}.mdi-key-minus:before{content:"󰌈"}.mdi-key-outline:before{content:"󰷖"}.mdi-key-plus:before{content:"󰌉"}.mdi-key-remove:before{content:"󰌊"}.mdi-key-star:before{content:"󱆞"}.mdi-key-variant:before{content:"󰌋"}.mdi-key-wireless:before{content:"󰿂"}.mdi-keyboard:before{content:"󰌌"}.mdi-keyboard-backspace:before{content:"󰌍"}.mdi-keyboard-caps:before{content:"󰌎"}.mdi-keyboard-close:before{content:"󰌏"}.mdi-keyboard-close-outline:before{content:"󱰀"}.mdi-keyboard-esc:before{content:"󱊷"}.mdi-keyboard-f1:before{content:"󱊫"}.mdi-keyboard-f10:before{content:"󱊴"}.mdi-keyboard-f11:before{content:"󱊵"}.mdi-keyboard-f12:before{content:"󱊶"}.mdi-keyboard-f2:before{content:"󱊬"}.mdi-keyboard-f3:before{content:"󱊭"}.mdi-keyboard-f4:before{content:"󱊮"}.mdi-keyboard-f5:before{content:"󱊯"}.mdi-keyboard-f6:before{content:"󱊰"}.mdi-keyboard-f7:before{content:"󱊱"}.mdi-keyboard-f8:before{content:"󱊲"}.mdi-keyboard-f9:before{content:"󱊳"}.mdi-keyboard-off:before{content:"󰌐"}.mdi-keyboard-off-outline:before{content:"󰹋"}.mdi-keyboard-outline:before{content:"󰥻"}.mdi-keyboard-return:before{content:"󰌑"}.mdi-keyboard-settings:before{content:"󰧹"}.mdi-keyboard-settings-outline:before{content:"󰧺"}.mdi-keyboard-space:before{content:"󱁐"}.mdi-keyboard-tab:before{content:"󰌒"}.mdi-keyboard-tab-reverse:before{content:"󰌥"}.mdi-keyboard-variant:before{content:"󰌓"}.mdi-khanda:before{content:"󱃽"}.mdi-kickstarter:before{content:"󰝅"}.mdi-kite:before{content:"󱦅"}.mdi-kite-outline:before{content:"󱦆"}.mdi-kitesurfing:before{content:"󱝄"}.mdi-klingon:before{content:"󱍛"}.mdi-knife:before{content:"󰧻"}.mdi-knife-military:before{content:"󰧼"}.mdi-knob:before{content:"󱮖"}.mdi-koala:before{content:"󱜿"}.mdi-kodi:before{content:"󰌔"}.mdi-kubernetes:before{content:"󱃾"}.mdi-label:before{content:"󰌕"}.mdi-label-multiple:before{content:"󱍵"}.mdi-label-multiple-outline:before{content:"󱍶"}.mdi-label-off:before{content:"󰫋"}.mdi-label-off-outline:before{content:"󰫌"}.mdi-label-outline:before{content:"󰌖"}.mdi-label-percent:before{content:"󱋪"}.mdi-label-percent-outline:before{content:"󱋫"}.mdi-label-variant:before{content:"󰫍"}.mdi-label-variant-outline:before{content:"󰫎"}.mdi-ladder:before{content:"󱖢"}.mdi-ladybug:before{content:"󰠭"}.mdi-lambda:before{content:"󰘧"}.mdi-lamp:before{content:"󰚵"}.mdi-lamp-outline:before{content:"󱟐"}.mdi-lamps:before{content:"󱕶"}.mdi-lamps-outline:before{content:"󱟑"}.mdi-lan:before{content:"󰌗"}.mdi-lan-check:before{content:"󱊪"}.mdi-lan-connect:before{content:"󰌘"}.mdi-lan-disconnect:before{content:"󰌙"}.mdi-lan-pending:before{content:"󰌚"}.mdi-land-fields:before{content:"󱪲"}.mdi-land-plots:before{content:"󱪳"}.mdi-land-plots-circle:before{content:"󱪴"}.mdi-land-plots-circle-variant:before{content:"󱪵"}.mdi-land-plots-marker:before{content:"󱱝"}.mdi-land-rows-horizontal:before{content:"󱪶"}.mdi-land-rows-vertical:before{content:"󱪷"}.mdi-landslide:before{content:"󱩈"}.mdi-landslide-outline:before{content:"󱩉"}.mdi-language-c:before{content:"󰙱"}.mdi-language-cpp:before{content:"󰙲"}.mdi-language-csharp:before{content:"󰌛"}.mdi-language-css3:before{content:"󰌜"}.mdi-language-fortran:before{content:"󱈚"}.mdi-language-go:before{content:"󰟓"}.mdi-language-haskell:before{content:"󰲒"}.mdi-language-html5:before{content:"󰌝"}.mdi-language-java:before{content:"󰬷"}.mdi-language-javascript:before{content:"󰌞"}.mdi-language-kotlin:before{content:"󱈙"}.mdi-language-lua:before{content:"󰢱"}.mdi-language-markdown:before{content:"󰍔"}.mdi-language-markdown-outline:before{content:"󰽛"}.mdi-language-php:before{content:"󰌟"}.mdi-language-python:before{content:"󰌠"}.mdi-language-r:before{content:"󰟔"}.mdi-language-ruby:before{content:"󰴭"}.mdi-language-ruby-on-rails:before{content:"󰫏"}.mdi-language-rust:before{content:"󱘗"}.mdi-language-swift:before{content:"󰛥"}.mdi-language-typescript:before{content:"󰛦"}.mdi-language-xaml:before{content:"󰙳"}.mdi-laptop:before{content:"󰌢"}.mdi-laptop-account:before{content:"󱩊"}.mdi-laptop-off:before{content:"󰛧"}.mdi-laravel:before{content:"󰫐"}.mdi-laser-pointer:before{content:"󱒄"}.mdi-lasso:before{content:"󰼃"}.mdi-lastpass:before{content:"󰑆"}.mdi-latitude:before{content:"󰽗"}.mdi-launch:before{content:"󰌧"}.mdi-lava-lamp:before{content:"󰟕"}.mdi-layers:before{content:"󰌨"}.mdi-layers-edit:before{content:"󱢒"}.mdi-layers-minus:before{content:"󰹌"}.mdi-layers-off:before{content:"󰌩"}.mdi-layers-off-outline:before{content:"󰧽"}.mdi-layers-outline:before{content:"󰧾"}.mdi-layers-plus:before{content:"󰹍"}.mdi-layers-remove:before{content:"󰹎"}.mdi-layers-search:before{content:"󱈆"}.mdi-layers-search-outline:before{content:"󱈇"}.mdi-layers-triple:before{content:"󰽘"}.mdi-layers-triple-outline:before{content:"󰽙"}.mdi-lead-pencil:before{content:"󰙏"}.mdi-leaf:before{content:"󰌪"}.mdi-leaf-circle:before{content:"󱤅"}.mdi-leaf-circle-outline:before{content:"󱤆"}.mdi-leaf-maple:before{content:"󰲓"}.mdi-leaf-maple-off:before{content:"󱋚"}.mdi-leaf-off:before{content:"󱋙"}.mdi-leak:before{content:"󰷗"}.mdi-leak-off:before{content:"󰷘"}.mdi-lectern:before{content:"󱫰"}.mdi-led-off:before{content:"󰌫"}.mdi-led-on:before{content:"󰌬"}.mdi-led-outline:before{content:"󰌭"}.mdi-led-strip:before{content:"󰟖"}.mdi-led-strip-variant:before{content:"󱁑"}.mdi-led-strip-variant-off:before{content:"󱩋"}.mdi-led-variant-off:before{content:"󰌮"}.mdi-led-variant-on:before{content:"󰌯"}.mdi-led-variant-outline:before{content:"󰌰"}.mdi-leek:before{content:"󱅽"}.mdi-less-than:before{content:"󰥼"}.mdi-less-than-or-equal:before{content:"󰥽"}.mdi-library:before{content:"󰌱"}.mdi-library-outline:before{content:"󱨢"}.mdi-library-shelves:before{content:"󰮩"}.mdi-license:before{content:"󰿃"}.mdi-lifebuoy:before{content:"󰡾"}.mdi-light-flood-down:before{content:"󱦇"}.mdi-light-flood-up:before{content:"󱦈"}.mdi-light-recessed:before{content:"󱞛"}.mdi-light-switch:before{content:"󰥾"}.mdi-light-switch-off:before{content:"󱨤"}.mdi-lightbulb:before{content:"󰌵"}.mdi-lightbulb-alert:before{content:"󱧡"}.mdi-lightbulb-alert-outline:before{content:"󱧢"}.mdi-lightbulb-auto:before{content:"󱠀"}.mdi-lightbulb-auto-outline:before{content:"󱠁"}.mdi-lightbulb-cfl:before{content:"󱈈"}.mdi-lightbulb-cfl-off:before{content:"󱈉"}.mdi-lightbulb-cfl-spiral:before{content:"󱉵"}.mdi-lightbulb-cfl-spiral-off:before{content:"󱋃"}.mdi-lightbulb-fluorescent-tube:before{content:"󱠄"}.mdi-lightbulb-fluorescent-tube-outline:before{content:"󱠅"}.mdi-lightbulb-group:before{content:"󱉓"}.mdi-lightbulb-group-off:before{content:"󱋍"}.mdi-lightbulb-group-off-outline:before{content:"󱋎"}.mdi-lightbulb-group-outline:before{content:"󱉔"}.mdi-lightbulb-multiple:before{content:"󱉕"}.mdi-lightbulb-multiple-off:before{content:"󱋏"}.mdi-lightbulb-multiple-off-outline:before{content:"󱋐"}.mdi-lightbulb-multiple-outline:before{content:"󱉖"}.mdi-lightbulb-night:before{content:"󱩌"}.mdi-lightbulb-night-outline:before{content:"󱩍"}.mdi-lightbulb-off:before{content:"󰹏"}.mdi-lightbulb-off-outline:before{content:"󰹐"}.mdi-lightbulb-on:before{content:"󰛨"}.mdi-lightbulb-on-10:before{content:"󱩎"}.mdi-lightbulb-on-20:before{content:"󱩏"}.mdi-lightbulb-on-30:before{content:"󱩐"}.mdi-lightbulb-on-40:before{content:"󱩑"}.mdi-lightbulb-on-50:before{content:"󱩒"}.mdi-lightbulb-on-60:before{content:"󱩓"}.mdi-lightbulb-on-70:before{content:"󱩔"}.mdi-lightbulb-on-80:before{content:"󱩕"}.mdi-lightbulb-on-90:before{content:"󱩖"}.mdi-lightbulb-on-outline:before{content:"󰛩"}.mdi-lightbulb-outline:before{content:"󰌶"}.mdi-lightbulb-question:before{content:"󱧣"}.mdi-lightbulb-question-outline:before{content:"󱧤"}.mdi-lightbulb-spot:before{content:"󱟴"}.mdi-lightbulb-spot-off:before{content:"󱟵"}.mdi-lightbulb-variant:before{content:"󱠂"}.mdi-lightbulb-variant-outline:before{content:"󱠃"}.mdi-lighthouse:before{content:"󰧿"}.mdi-lighthouse-on:before{content:"󰨀"}.mdi-lightning-bolt:before{content:"󱐋"}.mdi-lightning-bolt-circle:before{content:"󰠠"}.mdi-lightning-bolt-outline:before{content:"󱐌"}.mdi-line-scan:before{content:"󰘤"}.mdi-lingerie:before{content:"󱑶"}.mdi-link:before{content:"󰌷"}.mdi-link-box:before{content:"󰴚"}.mdi-link-box-outline:before{content:"󰴛"}.mdi-link-box-variant:before{content:"󰴜"}.mdi-link-box-variant-outline:before{content:"󰴝"}.mdi-link-circle:before{content:"󱲬"}.mdi-link-circle-outline:before{content:"󱲭"}.mdi-link-edit:before{content:"󱲮"}.mdi-link-lock:before{content:"󱂺"}.mdi-link-off:before{content:"󰌸"}.mdi-link-plus:before{content:"󰲔"}.mdi-link-variant:before{content:"󰌹"}.mdi-link-variant-minus:before{content:"󱃿"}.mdi-link-variant-off:before{content:"󰌺"}.mdi-link-variant-plus:before{content:"󱄀"}.mdi-link-variant-remove:before{content:"󱄁"}.mdi-linkedin:before{content:"󰌻"}.mdi-linux:before{content:"󰌽"}.mdi-linux-mint:before{content:"󰣭"}.mdi-lipstick:before{content:"󱎵"}.mdi-liquid-spot:before{content:"󱠦"}.mdi-liquor:before{content:"󱤞"}.mdi-list-box:before{content:"󱭻"}.mdi-list-box-outline:before{content:"󱭼"}.mdi-list-status:before{content:"󱖫"}.mdi-litecoin:before{content:"󰩡"}.mdi-loading:before{content:"󰝲"}.mdi-location-enter:before{content:"󰿄"}.mdi-location-exit:before{content:"󰿅"}.mdi-lock:before{content:"󰌾"}.mdi-lock-alert:before{content:"󰣮"}.mdi-lock-alert-outline:before{content:"󱗑"}.mdi-lock-check:before{content:"󱎚"}.mdi-lock-check-outline:before{content:"󱚨"}.mdi-lock-clock:before{content:"󰥿"}.mdi-lock-minus:before{content:"󱚩"}.mdi-lock-minus-outline:before{content:"󱚪"}.mdi-lock-off:before{content:"󱙱"}.mdi-lock-off-outline:before{content:"󱙲"}.mdi-lock-open:before{content:"󰌿"}.mdi-lock-open-alert:before{content:"󱎛"}.mdi-lock-open-alert-outline:before{content:"󱗒"}.mdi-lock-open-check:before{content:"󱎜"}.mdi-lock-open-check-outline:before{content:"󱚫"}.mdi-lock-open-minus:before{content:"󱚬"}.mdi-lock-open-minus-outline:before{content:"󱚭"}.mdi-lock-open-outline:before{content:"󰍀"}.mdi-lock-open-plus:before{content:"󱚮"}.mdi-lock-open-plus-outline:before{content:"󱚯"}.mdi-lock-open-remove:before{content:"󱚰"}.mdi-lock-open-remove-outline:before{content:"󱚱"}.mdi-lock-open-variant:before{content:"󰿆"}.mdi-lock-open-variant-outline:before{content:"󰿇"}.mdi-lock-outline:before{content:"󰍁"}.mdi-lock-pattern:before{content:"󰛪"}.mdi-lock-percent:before{content:"󱰒"}.mdi-lock-percent-open:before{content:"󱰓"}.mdi-lock-percent-open-outline:before{content:"󱰔"}.mdi-lock-percent-open-variant:before{content:"󱰕"}.mdi-lock-percent-open-variant-outline:before{content:"󱰖"}.mdi-lock-percent-outline:before{content:"󱰗"}.mdi-lock-plus:before{content:"󰗻"}.mdi-lock-plus-outline:before{content:"󱚲"}.mdi-lock-question:before{content:"󰣯"}.mdi-lock-remove:before{content:"󱚳"}.mdi-lock-remove-outline:before{content:"󱚴"}.mdi-lock-reset:before{content:"󰝳"}.mdi-lock-smart:before{content:"󰢲"}.mdi-locker:before{content:"󰟗"}.mdi-locker-multiple:before{content:"󰟘"}.mdi-login:before{content:"󰍂"}.mdi-login-variant:before{content:"󰗼"}.mdi-logout:before{content:"󰍃"}.mdi-logout-variant:before{content:"󰗽"}.mdi-longitude:before{content:"󰽚"}.mdi-looks:before{content:"󰍄"}.mdi-lotion:before{content:"󱖂"}.mdi-lotion-outline:before{content:"󱖃"}.mdi-lotion-plus:before{content:"󱖄"}.mdi-lotion-plus-outline:before{content:"󱖅"}.mdi-loupe:before{content:"󰍅"}.mdi-lumx:before{content:"󰍆"}.mdi-lungs:before{content:"󱂄"}.mdi-mace:before{content:"󱡃"}.mdi-magazine-pistol:before{content:"󰌤"}.mdi-magazine-rifle:before{content:"󰌣"}.mdi-magic-staff:before{content:"󱡄"}.mdi-magnet:before{content:"󰍇"}.mdi-magnet-on:before{content:"󰍈"}.mdi-magnify:before{content:"󰍉"}.mdi-magnify-close:before{content:"󰦀"}.mdi-magnify-expand:before{content:"󱡴"}.mdi-magnify-minus:before{content:"󰍊"}.mdi-magnify-minus-cursor:before{content:"󰩢"}.mdi-magnify-minus-outline:before{content:"󰛬"}.mdi-magnify-plus:before{content:"󰍋"}.mdi-magnify-plus-cursor:before{content:"󰩣"}.mdi-magnify-plus-outline:before{content:"󰛭"}.mdi-magnify-remove-cursor:before{content:"󱈌"}.mdi-magnify-remove-outline:before{content:"󱈍"}.mdi-magnify-scan:before{content:"󱉶"}.mdi-mail:before{content:"󰺻"}.mdi-mailbox:before{content:"󰛮"}.mdi-mailbox-open:before{content:"󰶈"}.mdi-mailbox-open-outline:before{content:"󰶉"}.mdi-mailbox-open-up:before{content:"󰶊"}.mdi-mailbox-open-up-outline:before{content:"󰶋"}.mdi-mailbox-outline:before{content:"󰶌"}.mdi-mailbox-up:before{content:"󰶍"}.mdi-mailbox-up-outline:before{content:"󰶎"}.mdi-manjaro:before{content:"󱘊"}.mdi-map:before{content:"󰍍"}.mdi-map-check:before{content:"󰺼"}.mdi-map-check-outline:before{content:"󰺽"}.mdi-map-clock:before{content:"󰴞"}.mdi-map-clock-outline:before{content:"󰴟"}.mdi-map-legend:before{content:"󰨁"}.mdi-map-marker:before{content:"󰍎"}.mdi-map-marker-account:before{content:"󱣣"}.mdi-map-marker-account-outline:before{content:"󱣤"}.mdi-map-marker-alert:before{content:"󰼅"}.mdi-map-marker-alert-outline:before{content:"󰼆"}.mdi-map-marker-check:before{content:"󰲕"}.mdi-map-marker-check-outline:before{content:"󱋻"}.mdi-map-marker-circle:before{content:"󰍏"}.mdi-map-marker-distance:before{content:"󰣰"}.mdi-map-marker-down:before{content:"󱄂"}.mdi-map-marker-left:before{content:"󱋛"}.mdi-map-marker-left-outline:before{content:"󱋝"}.mdi-map-marker-minus:before{content:"󰙐"}.mdi-map-marker-minus-outline:before{content:"󱋹"}.mdi-map-marker-multiple:before{content:"󰍐"}.mdi-map-marker-multiple-outline:before{content:"󱉷"}.mdi-map-marker-off:before{content:"󰍑"}.mdi-map-marker-off-outline:before{content:"󱋽"}.mdi-map-marker-outline:before{content:"󰟙"}.mdi-map-marker-path:before{content:"󰴠"}.mdi-map-marker-plus:before{content:"󰙑"}.mdi-map-marker-plus-outline:before{content:"󱋸"}.mdi-map-marker-question:before{content:"󰼇"}.mdi-map-marker-question-outline:before{content:"󰼈"}.mdi-map-marker-radius:before{content:"󰍒"}.mdi-map-marker-radius-outline:before{content:"󱋼"}.mdi-map-marker-remove:before{content:"󰼉"}.mdi-map-marker-remove-outline:before{content:"󱋺"}.mdi-map-marker-remove-variant:before{content:"󰼊"}.mdi-map-marker-right:before{content:"󱋜"}.mdi-map-marker-right-outline:before{content:"󱋞"}.mdi-map-marker-star:before{content:"󱘈"}.mdi-map-marker-star-outline:before{content:"󱘉"}.mdi-map-marker-up:before{content:"󱄃"}.mdi-map-minus:before{content:"󰦁"}.mdi-map-outline:before{content:"󰦂"}.mdi-map-plus:before{content:"󰦃"}.mdi-map-search:before{content:"󰦄"}.mdi-map-search-outline:before{content:"󰦅"}.mdi-mapbox:before{content:"󰮪"}.mdi-margin:before{content:"󰍓"}.mdi-marker:before{content:"󰙒"}.mdi-marker-cancel:before{content:"󰷙"}.mdi-marker-check:before{content:"󰍕"}.mdi-mastodon:before{content:"󰫑"}.mdi-material-design:before{content:"󰦆"}.mdi-material-ui:before{content:"󰍗"}.mdi-math-compass:before{content:"󰍘"}.mdi-math-cos:before{content:"󰲖"}.mdi-math-integral:before{content:"󰿈"}.mdi-math-integral-box:before{content:"󰿉"}.mdi-math-log:before{content:"󱂅"}.mdi-math-norm:before{content:"󰿊"}.mdi-math-norm-box:before{content:"󰿋"}.mdi-math-sin:before{content:"󰲗"}.mdi-math-tan:before{content:"󰲘"}.mdi-matrix:before{content:"󰘨"}.mdi-medal:before{content:"󰦇"}.mdi-medal-outline:before{content:"󱌦"}.mdi-medical-bag:before{content:"󰛯"}.mdi-medical-cotton-swab:before{content:"󱪸"}.mdi-medication:before{content:"󱬔"}.mdi-medication-outline:before{content:"󱬕"}.mdi-meditation:before{content:"󱅻"}.mdi-memory:before{content:"󰍛"}.mdi-memory-arrow-down:before{content:"󱲦"}.mdi-menorah:before{content:"󱟔"}.mdi-menorah-fire:before{content:"󱟕"}.mdi-menu:before{content:"󰍜"}.mdi-menu-close:before{content:"󱲐"}.mdi-menu-down:before{content:"󰍝"}.mdi-menu-down-outline:before{content:"󰚶"}.mdi-menu-left:before{content:"󰍞"}.mdi-menu-left-outline:before{content:"󰨂"}.mdi-menu-open:before{content:"󰮫"}.mdi-menu-right:before{content:"󰍟"}.mdi-menu-right-outline:before{content:"󰨃"}.mdi-menu-swap:before{content:"󰩤"}.mdi-menu-swap-outline:before{content:"󰩥"}.mdi-menu-up:before{content:"󰍠"}.mdi-menu-up-outline:before{content:"󰚷"}.mdi-merge:before{content:"󰽜"}.mdi-message:before{content:"󰍡"}.mdi-message-alert:before{content:"󰍢"}.mdi-message-alert-outline:before{content:"󰨄"}.mdi-message-arrow-left:before{content:"󱋲"}.mdi-message-arrow-left-outline:before{content:"󱋳"}.mdi-message-arrow-right:before{content:"󱋴"}.mdi-message-arrow-right-outline:before{content:"󱋵"}.mdi-message-badge:before{content:"󱥁"}.mdi-message-badge-outline:before{content:"󱥂"}.mdi-message-bookmark:before{content:"󱖬"}.mdi-message-bookmark-outline:before{content:"󱖭"}.mdi-message-bulleted:before{content:"󰚢"}.mdi-message-bulleted-off:before{content:"󰚣"}.mdi-message-check:before{content:"󱮊"}.mdi-message-check-outline:before{content:"󱮋"}.mdi-message-cog:before{content:"󰛱"}.mdi-message-cog-outline:before{content:"󱅲"}.mdi-message-draw:before{content:"󰍣"}.mdi-message-fast:before{content:"󱧌"}.mdi-message-fast-outline:before{content:"󱧍"}.mdi-message-flash:before{content:"󱖩"}.mdi-message-flash-outline:before{content:"󱖪"}.mdi-message-image:before{content:"󰍤"}.mdi-message-image-outline:before{content:"󱅬"}.mdi-message-lock:before{content:"󰿌"}.mdi-message-lock-outline:before{content:"󱅭"}.mdi-message-minus:before{content:"󱅮"}.mdi-message-minus-outline:before{content:"󱅯"}.mdi-message-off:before{content:"󱙍"}.mdi-message-off-outline:before{content:"󱙎"}.mdi-message-outline:before{content:"󰍥"}.mdi-message-plus:before{content:"󰙓"}.mdi-message-plus-outline:before{content:"󱂻"}.mdi-message-processing:before{content:"󰍦"}.mdi-message-processing-outline:before{content:"󱅰"}.mdi-message-question:before{content:"󱜺"}.mdi-message-question-outline:before{content:"󱜻"}.mdi-message-reply:before{content:"󰍧"}.mdi-message-reply-outline:before{content:"󱜽"}.mdi-message-reply-text:before{content:"󰍨"}.mdi-message-reply-text-outline:before{content:"󱜾"}.mdi-message-settings:before{content:"󰛰"}.mdi-message-settings-outline:before{content:"󱅱"}.mdi-message-star:before{content:"󰚚"}.mdi-message-star-outline:before{content:"󱉐"}.mdi-message-text:before{content:"󰍩"}.mdi-message-text-clock:before{content:"󱅳"}.mdi-message-text-clock-outline:before{content:"󱅴"}.mdi-message-text-fast:before{content:"󱧎"}.mdi-message-text-fast-outline:before{content:"󱧏"}.mdi-message-text-lock:before{content:"󰿍"}.mdi-message-text-lock-outline:before{content:"󱅵"}.mdi-message-text-outline:before{content:"󰍪"}.mdi-message-video:before{content:"󰍫"}.mdi-meteor:before{content:"󰘩"}.mdi-meter-electric:before{content:"󱩗"}.mdi-meter-electric-outline:before{content:"󱩘"}.mdi-meter-gas:before{content:"󱩙"}.mdi-meter-gas-outline:before{content:"󱩚"}.mdi-metronome:before{content:"󰟚"}.mdi-metronome-tick:before{content:"󰟛"}.mdi-micro-sd:before{content:"󰟜"}.mdi-microphone:before{content:"󰍬"}.mdi-microphone-message:before{content:"󰔊"}.mdi-microphone-message-off:before{content:"󰔋"}.mdi-microphone-minus:before{content:"󰢳"}.mdi-microphone-off:before{content:"󰍭"}.mdi-microphone-outline:before{content:"󰍮"}.mdi-microphone-plus:before{content:"󰢴"}.mdi-microphone-question:before{content:"󱦉"}.mdi-microphone-question-outline:before{content:"󱦊"}.mdi-microphone-settings:before{content:"󰍯"}.mdi-microphone-variant:before{content:"󰍰"}.mdi-microphone-variant-off:before{content:"󰍱"}.mdi-microscope:before{content:"󰙔"}.mdi-microsoft:before{content:"󰍲"}.mdi-microsoft-access:before{content:"󱎎"}.mdi-microsoft-azure:before{content:"󰠅"}.mdi-microsoft-azure-devops:before{content:"󰿕"}.mdi-microsoft-bing:before{content:"󰂤"}.mdi-microsoft-dynamics-365:before{content:"󰦈"}.mdi-microsoft-edge:before{content:"󰇩"}.mdi-microsoft-excel:before{content:"󱎏"}.mdi-microsoft-internet-explorer:before{content:"󰌀"}.mdi-microsoft-office:before{content:"󰏆"}.mdi-microsoft-onedrive:before{content:"󰏊"}.mdi-microsoft-onenote:before{content:"󰝇"}.mdi-microsoft-outlook:before{content:"󰴢"}.mdi-microsoft-powerpoint:before{content:"󱎐"}.mdi-microsoft-sharepoint:before{content:"󱎑"}.mdi-microsoft-teams:before{content:"󰊻"}.mdi-microsoft-visual-studio:before{content:"󰘐"}.mdi-microsoft-visual-studio-code:before{content:"󰨞"}.mdi-microsoft-windows:before{content:"󰖳"}.mdi-microsoft-windows-classic:before{content:"󰨡"}.mdi-microsoft-word:before{content:"󱎒"}.mdi-microsoft-xbox:before{content:"󰖹"}.mdi-microsoft-xbox-controller:before{content:"󰖺"}.mdi-microsoft-xbox-controller-battery-alert:before{content:"󰝋"}.mdi-microsoft-xbox-controller-battery-charging:before{content:"󰨢"}.mdi-microsoft-xbox-controller-battery-empty:before{content:"󰝌"}.mdi-microsoft-xbox-controller-battery-full:before{content:"󰝍"}.mdi-microsoft-xbox-controller-battery-low:before{content:"󰝎"}.mdi-microsoft-xbox-controller-battery-medium:before{content:"󰝏"}.mdi-microsoft-xbox-controller-battery-unknown:before{content:"󰝐"}.mdi-microsoft-xbox-controller-menu:before{content:"󰹯"}.mdi-microsoft-xbox-controller-off:before{content:"󰖻"}.mdi-microsoft-xbox-controller-view:before{content:"󰹰"}.mdi-microwave:before{content:"󰲙"}.mdi-microwave-off:before{content:"󱐣"}.mdi-middleware:before{content:"󰽝"}.mdi-middleware-outline:before{content:"󰽞"}.mdi-midi:before{content:"󰣱"}.mdi-midi-port:before{content:"󰣲"}.mdi-mine:before{content:"󰷚"}.mdi-minecraft:before{content:"󰍳"}.mdi-mini-sd:before{content:"󰨅"}.mdi-minidisc:before{content:"󰨆"}.mdi-minus:before{content:"󰍴"}.mdi-minus-box:before{content:"󰍵"}.mdi-minus-box-multiple:before{content:"󱅁"}.mdi-minus-box-multiple-outline:before{content:"󱅂"}.mdi-minus-box-outline:before{content:"󰛲"}.mdi-minus-circle:before{content:"󰍶"}.mdi-minus-circle-multiple:before{content:"󰍚"}.mdi-minus-circle-multiple-outline:before{content:"󰫓"}.mdi-minus-circle-off:before{content:"󱑙"}.mdi-minus-circle-off-outline:before{content:"󱑚"}.mdi-minus-circle-outline:before{content:"󰍷"}.mdi-minus-network:before{content:"󰍸"}.mdi-minus-network-outline:before{content:"󰲚"}.mdi-minus-thick:before{content:"󱘹"}.mdi-mirror:before{content:"󱇽"}.mdi-mirror-rectangle:before{content:"󱞟"}.mdi-mirror-variant:before{content:"󱞠"}.mdi-mixed-martial-arts:before{content:"󰶏"}.mdi-mixed-reality:before{content:"󰡿"}.mdi-molecule:before{content:"󰮬"}.mdi-molecule-co:before{content:"󱋾"}.mdi-molecule-co2:before{content:"󰟤"}.mdi-monitor:before{content:"󰍹"}.mdi-monitor-account:before{content:"󱩛"}.mdi-monitor-arrow-down:before{content:"󱧐"}.mdi-monitor-arrow-down-variant:before{content:"󱧑"}.mdi-monitor-cellphone:before{content:"󰦉"}.mdi-monitor-cellphone-star:before{content:"󰦊"}.mdi-monitor-dashboard:before{content:"󰨇"}.mdi-monitor-edit:before{content:"󱋆"}.mdi-monitor-eye:before{content:"󱎴"}.mdi-monitor-lock:before{content:"󰷛"}.mdi-monitor-multiple:before{content:"󰍺"}.mdi-monitor-off:before{content:"󰶐"}.mdi-monitor-screenshot:before{content:"󰹑"}.mdi-monitor-share:before{content:"󱒃"}.mdi-monitor-shimmer:before{content:"󱄄"}.mdi-monitor-small:before{content:"󱡶"}.mdi-monitor-speaker:before{content:"󰽟"}.mdi-monitor-speaker-off:before{content:"󰽠"}.mdi-monitor-star:before{content:"󰷜"}.mdi-monitor-vertical:before{content:"󱰳"}.mdi-moon-first-quarter:before{content:"󰽡"}.mdi-moon-full:before{content:"󰽢"}.mdi-moon-last-quarter:before{content:"󰽣"}.mdi-moon-new:before{content:"󰽤"}.mdi-moon-waning-crescent:before{content:"󰽥"}.mdi-moon-waning-gibbous:before{content:"󰽦"}.mdi-moon-waxing-crescent:before{content:"󰽧"}.mdi-moon-waxing-gibbous:before{content:"󰽨"}.mdi-moped:before{content:"󱂆"}.mdi-moped-electric:before{content:"󱖷"}.mdi-moped-electric-outline:before{content:"󱖸"}.mdi-moped-outline:before{content:"󱖹"}.mdi-more:before{content:"󰍻"}.mdi-mortar-pestle:before{content:"󱝈"}.mdi-mortar-pestle-plus:before{content:"󰏱"}.mdi-mosque:before{content:"󰵅"}.mdi-mosque-outline:before{content:"󱠧"}.mdi-mother-heart:before{content:"󱌔"}.mdi-mother-nurse:before{content:"󰴡"}.mdi-motion:before{content:"󱖲"}.mdi-motion-outline:before{content:"󱖳"}.mdi-motion-pause:before{content:"󱖐"}.mdi-motion-pause-outline:before{content:"󱖒"}.mdi-motion-play:before{content:"󱖏"}.mdi-motion-play-outline:before{content:"󱖑"}.mdi-motion-sensor:before{content:"󰶑"}.mdi-motion-sensor-off:before{content:"󱐵"}.mdi-motorbike:before{content:"󰍼"}.mdi-motorbike-electric:before{content:"󱖺"}.mdi-motorbike-off:before{content:"󱬖"}.mdi-mouse:before{content:"󰍽"}.mdi-mouse-bluetooth:before{content:"󰦋"}.mdi-mouse-left-click:before{content:"󱴇"}.mdi-mouse-left-click-outline:before{content:"󱴈"}.mdi-mouse-move-down:before{content:"󱕐"}.mdi-mouse-move-up:before{content:"󱕑"}.mdi-mouse-move-vertical:before{content:"󱕒"}.mdi-mouse-off:before{content:"󰍾"}.mdi-mouse-outline:before{content:"󱴉"}.mdi-mouse-right-click:before{content:"󱴊"}.mdi-mouse-right-click-outline:before{content:"󱴋"}.mdi-mouse-scroll-wheel:before{content:"󱴌"}.mdi-mouse-variant:before{content:"󰍿"}.mdi-mouse-variant-off:before{content:"󰎀"}.mdi-move-resize:before{content:"󰙕"}.mdi-move-resize-variant:before{content:"󰙖"}.mdi-movie:before{content:"󰎁"}.mdi-movie-check:before{content:"󱛳"}.mdi-movie-check-outline:before{content:"󱛴"}.mdi-movie-cog:before{content:"󱛵"}.mdi-movie-cog-outline:before{content:"󱛶"}.mdi-movie-edit:before{content:"󱄢"}.mdi-movie-edit-outline:before{content:"󱄣"}.mdi-movie-filter:before{content:"󱄤"}.mdi-movie-filter-outline:before{content:"󱄥"}.mdi-movie-minus:before{content:"󱛷"}.mdi-movie-minus-outline:before{content:"󱛸"}.mdi-movie-off:before{content:"󱛹"}.mdi-movie-off-outline:before{content:"󱛺"}.mdi-movie-open:before{content:"󰿎"}.mdi-movie-open-check:before{content:"󱛻"}.mdi-movie-open-check-outline:before{content:"󱛼"}.mdi-movie-open-cog:before{content:"󱛽"}.mdi-movie-open-cog-outline:before{content:"󱛾"}.mdi-movie-open-edit:before{content:"󱛿"}.mdi-movie-open-edit-outline:before{content:"󱜀"}.mdi-movie-open-minus:before{content:"󱜁"}.mdi-movie-open-minus-outline:before{content:"󱜂"}.mdi-movie-open-off:before{content:"󱜃"}.mdi-movie-open-off-outline:before{content:"󱜄"}.mdi-movie-open-outline:before{content:"󰿏"}.mdi-movie-open-play:before{content:"󱜅"}.mdi-movie-open-play-outline:before{content:"󱜆"}.mdi-movie-open-plus:before{content:"󱜇"}.mdi-movie-open-plus-outline:before{content:"󱜈"}.mdi-movie-open-remove:before{content:"󱜉"}.mdi-movie-open-remove-outline:before{content:"󱜊"}.mdi-movie-open-settings:before{content:"󱜋"}.mdi-movie-open-settings-outline:before{content:"󱜌"}.mdi-movie-open-star:before{content:"󱜍"}.mdi-movie-open-star-outline:before{content:"󱜎"}.mdi-movie-outline:before{content:"󰷝"}.mdi-movie-play:before{content:"󱜏"}.mdi-movie-play-outline:before{content:"󱜐"}.mdi-movie-plus:before{content:"󱜑"}.mdi-movie-plus-outline:before{content:"󱜒"}.mdi-movie-remove:before{content:"󱜓"}.mdi-movie-remove-outline:before{content:"󱜔"}.mdi-movie-roll:before{content:"󰟞"}.mdi-movie-search:before{content:"󱇒"}.mdi-movie-search-outline:before{content:"󱇓"}.mdi-movie-settings:before{content:"󱜕"}.mdi-movie-settings-outline:before{content:"󱜖"}.mdi-movie-star:before{content:"󱜗"}.mdi-movie-star-outline:before{content:"󱜘"}.mdi-mower:before{content:"󱙯"}.mdi-mower-bag:before{content:"󱙰"}.mdi-mower-bag-on:before{content:"󱭠"}.mdi-mower-on:before{content:"󱭟"}.mdi-muffin:before{content:"󰦌"}.mdi-multicast:before{content:"󱢓"}.mdi-multimedia:before{content:"󱮗"}.mdi-multiplication:before{content:"󰎂"}.mdi-multiplication-box:before{content:"󰎃"}.mdi-mushroom:before{content:"󰟟"}.mdi-mushroom-off:before{content:"󱏺"}.mdi-mushroom-off-outline:before{content:"󱏻"}.mdi-mushroom-outline:before{content:"󰟠"}.mdi-music:before{content:"󰝚"}.mdi-music-accidental-double-flat:before{content:"󰽩"}.mdi-music-accidental-double-sharp:before{content:"󰽪"}.mdi-music-accidental-flat:before{content:"󰽫"}.mdi-music-accidental-natural:before{content:"󰽬"}.mdi-music-accidental-sharp:before{content:"󰽭"}.mdi-music-box:before{content:"󰎄"}.mdi-music-box-multiple:before{content:"󰌳"}.mdi-music-box-multiple-outline:before{content:"󰼄"}.mdi-music-box-outline:before{content:"󰎅"}.mdi-music-circle:before{content:"󰎆"}.mdi-music-circle-outline:before{content:"󰫔"}.mdi-music-clef-alto:before{content:"󰽮"}.mdi-music-clef-bass:before{content:"󰽯"}.mdi-music-clef-treble:before{content:"󰽰"}.mdi-music-note:before{content:"󰎇"}.mdi-music-note-bluetooth:before{content:"󰗾"}.mdi-music-note-bluetooth-off:before{content:"󰗿"}.mdi-music-note-eighth:before{content:"󰎈"}.mdi-music-note-eighth-dotted:before{content:"󰽱"}.mdi-music-note-half:before{content:"󰎉"}.mdi-music-note-half-dotted:before{content:"󰽲"}.mdi-music-note-minus:before{content:"󱮉"}.mdi-music-note-off:before{content:"󰎊"}.mdi-music-note-off-outline:before{content:"󰽳"}.mdi-music-note-outline:before{content:"󰽴"}.mdi-music-note-plus:before{content:"󰷞"}.mdi-music-note-quarter:before{content:"󰎋"}.mdi-music-note-quarter-dotted:before{content:"󰽵"}.mdi-music-note-sixteenth:before{content:"󰎌"}.mdi-music-note-sixteenth-dotted:before{content:"󰽶"}.mdi-music-note-whole:before{content:"󰎍"}.mdi-music-note-whole-dotted:before{content:"󰽷"}.mdi-music-off:before{content:"󰝛"}.mdi-music-rest-eighth:before{content:"󰽸"}.mdi-music-rest-half:before{content:"󰽹"}.mdi-music-rest-quarter:before{content:"󰽺"}.mdi-music-rest-sixteenth:before{content:"󰽻"}.mdi-music-rest-whole:before{content:"󰽼"}.mdi-mustache:before{content:"󱗞"}.mdi-nail:before{content:"󰷟"}.mdi-nas:before{content:"󰣳"}.mdi-nativescript:before{content:"󰢀"}.mdi-nature:before{content:"󰎎"}.mdi-nature-outline:before{content:"󱱱"}.mdi-nature-people:before{content:"󰎏"}.mdi-nature-people-outline:before{content:"󱱲"}.mdi-navigation:before{content:"󰎐"}.mdi-navigation-outline:before{content:"󱘇"}.mdi-navigation-variant:before{content:"󱣰"}.mdi-navigation-variant-outline:before{content:"󱣱"}.mdi-near-me:before{content:"󰗍"}.mdi-necklace:before{content:"󰼋"}.mdi-needle:before{content:"󰎑"}.mdi-needle-off:before{content:"󱧒"}.mdi-netflix:before{content:"󰝆"}.mdi-network:before{content:"󰛳"}.mdi-network-off:before{content:"󰲛"}.mdi-network-off-outline:before{content:"󰲜"}.mdi-network-outline:before{content:"󰲝"}.mdi-network-pos:before{content:"󱫋"}.mdi-network-strength-1:before{content:"󰣴"}.mdi-network-strength-1-alert:before{content:"󰣵"}.mdi-network-strength-2:before{content:"󰣶"}.mdi-network-strength-2-alert:before{content:"󰣷"}.mdi-network-strength-3:before{content:"󰣸"}.mdi-network-strength-3-alert:before{content:"󰣹"}.mdi-network-strength-4:before{content:"󰣺"}.mdi-network-strength-4-alert:before{content:"󰣻"}.mdi-network-strength-4-cog:before{content:"󱤚"}.mdi-network-strength-off:before{content:"󰣼"}.mdi-network-strength-off-outline:before{content:"󰣽"}.mdi-network-strength-outline:before{content:"󰣾"}.mdi-new-box:before{content:"󰎔"}.mdi-newspaper:before{content:"󰎕"}.mdi-newspaper-check:before{content:"󱥃"}.mdi-newspaper-minus:before{content:"󰼌"}.mdi-newspaper-plus:before{content:"󰼍"}.mdi-newspaper-remove:before{content:"󱥄"}.mdi-newspaper-variant:before{content:"󱀁"}.mdi-newspaper-variant-multiple:before{content:"󱀂"}.mdi-newspaper-variant-multiple-outline:before{content:"󱀃"}.mdi-newspaper-variant-outline:before{content:"󱀄"}.mdi-nfc:before{content:"󰎖"}.mdi-nfc-search-variant:before{content:"󰹓"}.mdi-nfc-tap:before{content:"󰎗"}.mdi-nfc-variant:before{content:"󰎘"}.mdi-nfc-variant-off:before{content:"󰹔"}.mdi-ninja:before{content:"󰝴"}.mdi-nintendo-game-boy:before{content:"󱎓"}.mdi-nintendo-switch:before{content:"󰟡"}.mdi-nintendo-wii:before{content:"󰖫"}.mdi-nintendo-wiiu:before{content:"󰜭"}.mdi-nix:before{content:"󱄅"}.mdi-nodejs:before{content:"󰎙"}.mdi-noodles:before{content:"󱅾"}.mdi-not-equal:before{content:"󰦍"}.mdi-not-equal-variant:before{content:"󰦎"}.mdi-note:before{content:"󰎚"}.mdi-note-alert:before{content:"󱝽"}.mdi-note-alert-outline:before{content:"󱝾"}.mdi-note-check:before{content:"󱝿"}.mdi-note-check-outline:before{content:"󱞀"}.mdi-note-edit:before{content:"󱞁"}.mdi-note-edit-outline:before{content:"󱞂"}.mdi-note-minus:before{content:"󱙏"}.mdi-note-minus-outline:before{content:"󱙐"}.mdi-note-multiple:before{content:"󰚸"}.mdi-note-multiple-outline:before{content:"󰚹"}.mdi-note-off:before{content:"󱞃"}.mdi-note-off-outline:before{content:"󱞄"}.mdi-note-outline:before{content:"󰎛"}.mdi-note-plus:before{content:"󰎜"}.mdi-note-plus-outline:before{content:"󰎝"}.mdi-note-remove:before{content:"󱙑"}.mdi-note-remove-outline:before{content:"󱙒"}.mdi-note-search:before{content:"󱙓"}.mdi-note-search-outline:before{content:"󱙔"}.mdi-note-text:before{content:"󰎞"}.mdi-note-text-outline:before{content:"󱇗"}.mdi-notebook:before{content:"󰠮"}.mdi-notebook-check:before{content:"󱓵"}.mdi-notebook-check-outline:before{content:"󱓶"}.mdi-notebook-edit:before{content:"󱓧"}.mdi-notebook-edit-outline:before{content:"󱓩"}.mdi-notebook-heart:before{content:"󱨋"}.mdi-notebook-heart-outline:before{content:"󱨌"}.mdi-notebook-minus:before{content:"󱘐"}.mdi-notebook-minus-outline:before{content:"󱘑"}.mdi-notebook-multiple:before{content:"󰹕"}.mdi-notebook-outline:before{content:"󰺿"}.mdi-notebook-plus:before{content:"󱘒"}.mdi-notebook-plus-outline:before{content:"󱘓"}.mdi-notebook-remove:before{content:"󱘔"}.mdi-notebook-remove-outline:before{content:"󱘕"}.mdi-notification-clear-all:before{content:"󰎟"}.mdi-npm:before{content:"󰛷"}.mdi-nuke:before{content:"󰚤"}.mdi-null:before{content:"󰟢"}.mdi-numeric:before{content:"󰎠"}.mdi-numeric-0:before{content:"󰬹"}.mdi-numeric-0-box:before{content:"󰎡"}.mdi-numeric-0-box-multiple:before{content:"󰼎"}.mdi-numeric-0-box-multiple-outline:before{content:"󰎢"}.mdi-numeric-0-box-outline:before{content:"󰎣"}.mdi-numeric-0-circle:before{content:"󰲞"}.mdi-numeric-0-circle-outline:before{content:"󰲟"}.mdi-numeric-1:before{content:"󰬺"}.mdi-numeric-1-box:before{content:"󰎤"}.mdi-numeric-1-box-multiple:before{content:"󰼏"}.mdi-numeric-1-box-multiple-outline:before{content:"󰎥"}.mdi-numeric-1-box-outline:before{content:"󰎦"}.mdi-numeric-1-circle:before{content:"󰲠"}.mdi-numeric-1-circle-outline:before{content:"󰲡"}.mdi-numeric-10:before{content:"󰿩"}.mdi-numeric-10-box:before{content:"󰽽"}.mdi-numeric-10-box-multiple:before{content:"󰿪"}.mdi-numeric-10-box-multiple-outline:before{content:"󰿫"}.mdi-numeric-10-box-outline:before{content:"󰽾"}.mdi-numeric-10-circle:before{content:"󰿬"}.mdi-numeric-10-circle-outline:before{content:"󰿭"}.mdi-numeric-2:before{content:"󰬻"}.mdi-numeric-2-box:before{content:"󰎧"}.mdi-numeric-2-box-multiple:before{content:"󰼐"}.mdi-numeric-2-box-multiple-outline:before{content:"󰎨"}.mdi-numeric-2-box-outline:before{content:"󰎩"}.mdi-numeric-2-circle:before{content:"󰲢"}.mdi-numeric-2-circle-outline:before{content:"󰲣"}.mdi-numeric-3:before{content:"󰬼"}.mdi-numeric-3-box:before{content:"󰎪"}.mdi-numeric-3-box-multiple:before{content:"󰼑"}.mdi-numeric-3-box-multiple-outline:before{content:"󰎫"}.mdi-numeric-3-box-outline:before{content:"󰎬"}.mdi-numeric-3-circle:before{content:"󰲤"}.mdi-numeric-3-circle-outline:before{content:"󰲥"}.mdi-numeric-4:before{content:"󰬽"}.mdi-numeric-4-box:before{content:"󰎭"}.mdi-numeric-4-box-multiple:before{content:"󰼒"}.mdi-numeric-4-box-multiple-outline:before{content:"󰎲"}.mdi-numeric-4-box-outline:before{content:"󰎮"}.mdi-numeric-4-circle:before{content:"󰲦"}.mdi-numeric-4-circle-outline:before{content:"󰲧"}.mdi-numeric-5:before{content:"󰬾"}.mdi-numeric-5-box:before{content:"󰎱"}.mdi-numeric-5-box-multiple:before{content:"󰼓"}.mdi-numeric-5-box-multiple-outline:before{content:"󰎯"}.mdi-numeric-5-box-outline:before{content:"󰎰"}.mdi-numeric-5-circle:before{content:"󰲨"}.mdi-numeric-5-circle-outline:before{content:"󰲩"}.mdi-numeric-6:before{content:"󰬿"}.mdi-numeric-6-box:before{content:"󰎳"}.mdi-numeric-6-box-multiple:before{content:"󰼔"}.mdi-numeric-6-box-multiple-outline:before{content:"󰎴"}.mdi-numeric-6-box-outline:before{content:"󰎵"}.mdi-numeric-6-circle:before{content:"󰲪"}.mdi-numeric-6-circle-outline:before{content:"󰲫"}.mdi-numeric-7:before{content:"󰭀"}.mdi-numeric-7-box:before{content:"󰎶"}.mdi-numeric-7-box-multiple:before{content:"󰼕"}.mdi-numeric-7-box-multiple-outline:before{content:"󰎷"}.mdi-numeric-7-box-outline:before{content:"󰎸"}.mdi-numeric-7-circle:before{content:"󰲬"}.mdi-numeric-7-circle-outline:before{content:"󰲭"}.mdi-numeric-8:before{content:"󰭁"}.mdi-numeric-8-box:before{content:"󰎹"}.mdi-numeric-8-box-multiple:before{content:"󰼖"}.mdi-numeric-8-box-multiple-outline:before{content:"󰎺"}.mdi-numeric-8-box-outline:before{content:"󰎻"}.mdi-numeric-8-circle:before{content:"󰲮"}.mdi-numeric-8-circle-outline:before{content:"󰲯"}.mdi-numeric-9:before{content:"󰭂"}.mdi-numeric-9-box:before{content:"󰎼"}.mdi-numeric-9-box-multiple:before{content:"󰼗"}.mdi-numeric-9-box-multiple-outline:before{content:"󰎽"}.mdi-numeric-9-box-outline:before{content:"󰎾"}.mdi-numeric-9-circle:before{content:"󰲰"}.mdi-numeric-9-circle-outline:before{content:"󰲱"}.mdi-numeric-9-plus:before{content:"󰿮"}.mdi-numeric-9-plus-box:before{content:"󰎿"}.mdi-numeric-9-plus-box-multiple:before{content:"󰼘"}.mdi-numeric-9-plus-box-multiple-outline:before{content:"󰏀"}.mdi-numeric-9-plus-box-outline:before{content:"󰏁"}.mdi-numeric-9-plus-circle:before{content:"󰲲"}.mdi-numeric-9-plus-circle-outline:before{content:"󰲳"}.mdi-numeric-negative-1:before{content:"󱁒"}.mdi-numeric-off:before{content:"󱧓"}.mdi-numeric-positive-1:before{content:"󱗋"}.mdi-nut:before{content:"󰛸"}.mdi-nutrition:before{content:"󰏂"}.mdi-nuxt:before{content:"󱄆"}.mdi-oar:before{content:"󰙼"}.mdi-ocarina:before{content:"󰷠"}.mdi-oci:before{content:"󱋩"}.mdi-ocr:before{content:"󱄺"}.mdi-octagon:before{content:"󰏃"}.mdi-octagon-outline:before{content:"󰏄"}.mdi-octagram:before{content:"󰛹"}.mdi-octagram-edit:before{content:"󱰴"}.mdi-octagram-edit-outline:before{content:"󱰵"}.mdi-octagram-minus:before{content:"󱰶"}.mdi-octagram-minus-outline:before{content:"󱰷"}.mdi-octagram-outline:before{content:"󰝵"}.mdi-octagram-plus:before{content:"󱰸"}.mdi-octagram-plus-outline:before{content:"󱰹"}.mdi-octahedron:before{content:"󱥐"}.mdi-octahedron-off:before{content:"󱥑"}.mdi-odnoklassniki:before{content:"󰏅"}.mdi-offer:before{content:"󱈛"}.mdi-office-building:before{content:"󰦑"}.mdi-office-building-cog:before{content:"󱥉"}.mdi-office-building-cog-outline:before{content:"󱥊"}.mdi-office-building-marker:before{content:"󱔠"}.mdi-office-building-marker-outline:before{content:"󱔡"}.mdi-office-building-minus:before{content:"󱮪"}.mdi-office-building-minus-outline:before{content:"󱮫"}.mdi-office-building-outline:before{content:"󱔟"}.mdi-office-building-plus:before{content:"󱮨"}.mdi-office-building-plus-outline:before{content:"󱮩"}.mdi-office-building-remove:before{content:"󱮬"}.mdi-office-building-remove-outline:before{content:"󱮭"}.mdi-oil:before{content:"󰏇"}.mdi-oil-lamp:before{content:"󰼙"}.mdi-oil-level:before{content:"󱁓"}.mdi-oil-temperature:before{content:"󰿸"}.mdi-om:before{content:"󰥳"}.mdi-omega:before{content:"󰏉"}.mdi-one-up:before{content:"󰮭"}.mdi-onepassword:before{content:"󰢁"}.mdi-opacity:before{content:"󰗌"}.mdi-open-in-app:before{content:"󰏋"}.mdi-open-in-new:before{content:"󰏌"}.mdi-open-source-initiative:before{content:"󰮮"}.mdi-openid:before{content:"󰏍"}.mdi-opera:before{content:"󰏎"}.mdi-orbit:before{content:"󰀘"}.mdi-orbit-variant:before{content:"󱗛"}.mdi-order-alphabetical-ascending:before{content:"󰈍"}.mdi-order-alphabetical-descending:before{content:"󰴇"}.mdi-order-bool-ascending:before{content:"󰊾"}.mdi-order-bool-ascending-variant:before{content:"󰦏"}.mdi-order-bool-descending:before{content:"󱎄"}.mdi-order-bool-descending-variant:before{content:"󰦐"}.mdi-order-numeric-ascending:before{content:"󰕅"}.mdi-order-numeric-descending:before{content:"󰕆"}.mdi-origin:before{content:"󰭃"}.mdi-ornament:before{content:"󰏏"}.mdi-ornament-variant:before{content:"󰏐"}.mdi-outdoor-lamp:before{content:"󱁔"}.mdi-overscan:before{content:"󱀅"}.mdi-owl:before{content:"󰏒"}.mdi-pac-man:before{content:"󰮯"}.mdi-package:before{content:"󰏓"}.mdi-package-check:before{content:"󱭑"}.mdi-package-down:before{content:"󰏔"}.mdi-package-up:before{content:"󰏕"}.mdi-package-variant:before{content:"󰏖"}.mdi-package-variant-closed:before{content:"󰏗"}.mdi-package-variant-closed-check:before{content:"󱭒"}.mdi-package-variant-closed-minus:before{content:"󱧔"}.mdi-package-variant-closed-plus:before{content:"󱧕"}.mdi-package-variant-closed-remove:before{content:"󱧖"}.mdi-package-variant-minus:before{content:"󱧗"}.mdi-package-variant-plus:before{content:"󱧘"}.mdi-package-variant-remove:before{content:"󱧙"}.mdi-page-first:before{content:"󰘀"}.mdi-page-last:before{content:"󰘁"}.mdi-page-layout-body:before{content:"󰛺"}.mdi-page-layout-footer:before{content:"󰛻"}.mdi-page-layout-header:before{content:"󰛼"}.mdi-page-layout-header-footer:before{content:"󰽿"}.mdi-page-layout-sidebar-left:before{content:"󰛽"}.mdi-page-layout-sidebar-right:before{content:"󰛾"}.mdi-page-next:before{content:"󰮰"}.mdi-page-next-outline:before{content:"󰮱"}.mdi-page-previous:before{content:"󰮲"}.mdi-page-previous-outline:before{content:"󰮳"}.mdi-pail:before{content:"󱐗"}.mdi-pail-minus:before{content:"󱐷"}.mdi-pail-minus-outline:before{content:"󱐼"}.mdi-pail-off:before{content:"󱐹"}.mdi-pail-off-outline:before{content:"󱐾"}.mdi-pail-outline:before{content:"󱐺"}.mdi-pail-plus:before{content:"󱐶"}.mdi-pail-plus-outline:before{content:"󱐻"}.mdi-pail-remove:before{content:"󱐸"}.mdi-pail-remove-outline:before{content:"󱐽"}.mdi-palette:before{content:"󰏘"}.mdi-palette-advanced:before{content:"󰏙"}.mdi-palette-outline:before{content:"󰸌"}.mdi-palette-swatch:before{content:"󰢵"}.mdi-palette-swatch-outline:before{content:"󱍜"}.mdi-palette-swatch-variant:before{content:"󱥚"}.mdi-palm-tree:before{content:"󱁕"}.mdi-pan:before{content:"󰮴"}.mdi-pan-bottom-left:before{content:"󰮵"}.mdi-pan-bottom-right:before{content:"󰮶"}.mdi-pan-down:before{content:"󰮷"}.mdi-pan-horizontal:before{content:"󰮸"}.mdi-pan-left:before{content:"󰮹"}.mdi-pan-right:before{content:"󰮺"}.mdi-pan-top-left:before{content:"󰮻"}.mdi-pan-top-right:before{content:"󰮼"}.mdi-pan-up:before{content:"󰮽"}.mdi-pan-vertical:before{content:"󰮾"}.mdi-panda:before{content:"󰏚"}.mdi-pandora:before{content:"󰏛"}.mdi-panorama:before{content:"󰏜"}.mdi-panorama-fisheye:before{content:"󰏝"}.mdi-panorama-horizontal:before{content:"󱤨"}.mdi-panorama-horizontal-outline:before{content:"󰏞"}.mdi-panorama-outline:before{content:"󱦌"}.mdi-panorama-sphere:before{content:"󱦍"}.mdi-panorama-sphere-outline:before{content:"󱦎"}.mdi-panorama-variant:before{content:"󱦏"}.mdi-panorama-variant-outline:before{content:"󱦐"}.mdi-panorama-vertical:before{content:"󱤩"}.mdi-panorama-vertical-outline:before{content:"󰏟"}.mdi-panorama-wide-angle:before{content:"󱥟"}.mdi-panorama-wide-angle-outline:before{content:"󰏠"}.mdi-paper-cut-vertical:before{content:"󰏡"}.mdi-paper-roll:before{content:"󱅗"}.mdi-paper-roll-outline:before{content:"󱅘"}.mdi-paperclip:before{content:"󰏢"}.mdi-paperclip-check:before{content:"󱫆"}.mdi-paperclip-lock:before{content:"󱧚"}.mdi-paperclip-minus:before{content:"󱫇"}.mdi-paperclip-off:before{content:"󱫈"}.mdi-paperclip-plus:before{content:"󱫉"}.mdi-paperclip-remove:before{content:"󱫊"}.mdi-parachute:before{content:"󰲴"}.mdi-parachute-outline:before{content:"󰲵"}.mdi-paragliding:before{content:"󱝅"}.mdi-parking:before{content:"󰏣"}.mdi-party-popper:before{content:"󱁖"}.mdi-passport:before{content:"󰟣"}.mdi-passport-alert:before{content:"󱲸"}.mdi-passport-biometric:before{content:"󰷡"}.mdi-passport-cancel:before{content:"󱲹"}.mdi-passport-check:before{content:"󱲺"}.mdi-passport-minus:before{content:"󱲻"}.mdi-passport-plus:before{content:"󱲼"}.mdi-passport-remove:before{content:"󱲽"}.mdi-pasta:before{content:"󱅠"}.mdi-patio-heater:before{content:"󰾀"}.mdi-patreon:before{content:"󰢂"}.mdi-pause:before{content:"󰏤"}.mdi-pause-box:before{content:"󰂼"}.mdi-pause-box-outline:before{content:"󱭺"}.mdi-pause-circle:before{content:"󰏥"}.mdi-pause-circle-outline:before{content:"󰏦"}.mdi-pause-octagon:before{content:"󰏧"}.mdi-pause-octagon-outline:before{content:"󰏨"}.mdi-paw:before{content:"󰏩"}.mdi-paw-off:before{content:"󰙗"}.mdi-paw-off-outline:before{content:"󱙶"}.mdi-paw-outline:before{content:"󱙵"}.mdi-peace:before{content:"󰢄"}.mdi-peanut:before{content:"󰿼"}.mdi-peanut-off:before{content:"󰿽"}.mdi-peanut-off-outline:before{content:"󰿿"}.mdi-peanut-outline:before{content:"󰿾"}.mdi-pen:before{content:"󰏪"}.mdi-pen-lock:before{content:"󰷢"}.mdi-pen-minus:before{content:"󰷣"}.mdi-pen-off:before{content:"󰷤"}.mdi-pen-plus:before{content:"󰷥"}.mdi-pen-remove:before{content:"󰷦"}.mdi-pencil:before{content:"󰏫"}.mdi-pencil-box:before{content:"󰏬"}.mdi-pencil-box-multiple:before{content:"󱅄"}.mdi-pencil-box-multiple-outline:before{content:"󱅅"}.mdi-pencil-box-outline:before{content:"󰏭"}.mdi-pencil-circle:before{content:"󰛿"}.mdi-pencil-circle-outline:before{content:"󰝶"}.mdi-pencil-lock:before{content:"󰏮"}.mdi-pencil-lock-outline:before{content:"󰷧"}.mdi-pencil-minus:before{content:"󰷨"}.mdi-pencil-minus-outline:before{content:"󰷩"}.mdi-pencil-off:before{content:"󰏯"}.mdi-pencil-off-outline:before{content:"󰷪"}.mdi-pencil-outline:before{content:"󰲶"}.mdi-pencil-plus:before{content:"󰷫"}.mdi-pencil-plus-outline:before{content:"󰷬"}.mdi-pencil-remove:before{content:"󰷭"}.mdi-pencil-remove-outline:before{content:"󰷮"}.mdi-pencil-ruler:before{content:"󱍓"}.mdi-pencil-ruler-outline:before{content:"󱰑"}.mdi-penguin:before{content:"󰻀"}.mdi-pentagon:before{content:"󰜁"}.mdi-pentagon-outline:before{content:"󰜀"}.mdi-pentagram:before{content:"󱙧"}.mdi-percent:before{content:"󰏰"}.mdi-percent-box:before{content:"󱨂"}.mdi-percent-box-outline:before{content:"󱨃"}.mdi-percent-circle:before{content:"󱨄"}.mdi-percent-circle-outline:before{content:"󱨅"}.mdi-percent-outline:before{content:"󱉸"}.mdi-periodic-table:before{content:"󰢶"}.mdi-perspective-less:before{content:"󰴣"}.mdi-perspective-more:before{content:"󰴤"}.mdi-ph:before{content:"󱟅"}.mdi-phone:before{content:"󰏲"}.mdi-phone-alert:before{content:"󰼚"}.mdi-phone-alert-outline:before{content:"󱆎"}.mdi-phone-bluetooth:before{content:"󰏳"}.mdi-phone-bluetooth-outline:before{content:"󱆏"}.mdi-phone-cancel:before{content:"󱂼"}.mdi-phone-cancel-outline:before{content:"󱆐"}.mdi-phone-check:before{content:"󱆩"}.mdi-phone-check-outline:before{content:"󱆪"}.mdi-phone-classic:before{content:"󰘂"}.mdi-phone-classic-off:before{content:"󱉹"}.mdi-phone-clock:before{content:"󱧛"}.mdi-phone-dial:before{content:"󱕙"}.mdi-phone-dial-outline:before{content:"󱕚"}.mdi-phone-forward:before{content:"󰏴"}.mdi-phone-forward-outline:before{content:"󱆑"}.mdi-phone-hangup:before{content:"󰏵"}.mdi-phone-hangup-outline:before{content:"󱆒"}.mdi-phone-in-talk:before{content:"󰏶"}.mdi-phone-in-talk-outline:before{content:"󱆂"}.mdi-phone-incoming:before{content:"󰏷"}.mdi-phone-incoming-outgoing:before{content:"󱬿"}.mdi-phone-incoming-outgoing-outline:before{content:"󱭀"}.mdi-phone-incoming-outline:before{content:"󱆓"}.mdi-phone-lock:before{content:"󰏸"}.mdi-phone-lock-outline:before{content:"󱆔"}.mdi-phone-log:before{content:"󰏹"}.mdi-phone-log-outline:before{content:"󱆕"}.mdi-phone-message:before{content:"󱆖"}.mdi-phone-message-outline:before{content:"󱆗"}.mdi-phone-minus:before{content:"󰙘"}.mdi-phone-minus-outline:before{content:"󱆘"}.mdi-phone-missed:before{content:"󰏺"}.mdi-phone-missed-outline:before{content:"󱆥"}.mdi-phone-off:before{content:"󰷯"}.mdi-phone-off-outline:before{content:"󱆦"}.mdi-phone-outgoing:before{content:"󰏻"}.mdi-phone-outgoing-outline:before{content:"󱆙"}.mdi-phone-outline:before{content:"󰷰"}.mdi-phone-paused:before{content:"󰏼"}.mdi-phone-paused-outline:before{content:"󱆚"}.mdi-phone-plus:before{content:"󰙙"}.mdi-phone-plus-outline:before{content:"󱆛"}.mdi-phone-refresh:before{content:"󱦓"}.mdi-phone-refresh-outline:before{content:"󱦔"}.mdi-phone-remove:before{content:"󱔯"}.mdi-phone-remove-outline:before{content:"󱔰"}.mdi-phone-return:before{content:"󰠯"}.mdi-phone-return-outline:before{content:"󱆜"}.mdi-phone-ring:before{content:"󱆫"}.mdi-phone-ring-outline:before{content:"󱆬"}.mdi-phone-rotate-landscape:before{content:"󰢅"}.mdi-phone-rotate-portrait:before{content:"󰢆"}.mdi-phone-settings:before{content:"󰏽"}.mdi-phone-settings-outline:before{content:"󱆝"}.mdi-phone-sync:before{content:"󱦕"}.mdi-phone-sync-outline:before{content:"󱦖"}.mdi-phone-voip:before{content:"󰏾"}.mdi-pi:before{content:"󰏿"}.mdi-pi-box:before{content:"󰐀"}.mdi-pi-hole:before{content:"󰷱"}.mdi-piano:before{content:"󰙽"}.mdi-piano-off:before{content:"󰚘"}.mdi-pickaxe:before{content:"󰢷"}.mdi-picture-in-picture-bottom-right:before{content:"󰹗"}.mdi-picture-in-picture-bottom-right-outline:before{content:"󰹘"}.mdi-picture-in-picture-top-right:before{content:"󰹙"}.mdi-picture-in-picture-top-right-outline:before{content:"󰹚"}.mdi-pier:before{content:"󰢇"}.mdi-pier-crane:before{content:"󰢈"}.mdi-pig:before{content:"󰐁"}.mdi-pig-variant:before{content:"󱀆"}.mdi-pig-variant-outline:before{content:"󱙸"}.mdi-piggy-bank:before{content:"󱀇"}.mdi-piggy-bank-outline:before{content:"󱙹"}.mdi-pill:before{content:"󰐂"}.mdi-pill-multiple:before{content:"󱭌"}.mdi-pill-off:before{content:"󱩜"}.mdi-pillar:before{content:"󰜂"}.mdi-pin:before{content:"󰐃"}.mdi-pin-off:before{content:"󰐄"}.mdi-pin-off-outline:before{content:"󰤰"}.mdi-pin-outline:before{content:"󰤱"}.mdi-pine-tree:before{content:"󰐅"}.mdi-pine-tree-box:before{content:"󰐆"}.mdi-pine-tree-fire:before{content:"󱐚"}.mdi-pine-tree-variant:before{content:"󱱳"}.mdi-pine-tree-variant-outline:before{content:"󱱴"}.mdi-pinterest:before{content:"󰐇"}.mdi-pinwheel:before{content:"󰫕"}.mdi-pinwheel-outline:before{content:"󰫖"}.mdi-pipe:before{content:"󰟥"}.mdi-pipe-disconnected:before{content:"󰟦"}.mdi-pipe-leak:before{content:"󰢉"}.mdi-pipe-valve:before{content:"󱡍"}.mdi-pipe-wrench:before{content:"󱍔"}.mdi-pirate:before{content:"󰨈"}.mdi-pistol:before{content:"󰜃"}.mdi-piston:before{content:"󰢊"}.mdi-pitchfork:before{content:"󱕓"}.mdi-pizza:before{content:"󰐉"}.mdi-plane-car:before{content:"󱫿"}.mdi-plane-train:before{content:"󱬀"}.mdi-play:before{content:"󰐊"}.mdi-play-box:before{content:"󱉺"}.mdi-play-box-edit-outline:before{content:"󱰺"}.mdi-play-box-lock:before{content:"󱨖"}.mdi-play-box-lock-open:before{content:"󱨗"}.mdi-play-box-lock-open-outline:before{content:"󱨘"}.mdi-play-box-lock-outline:before{content:"󱨙"}.mdi-play-box-multiple:before{content:"󰴙"}.mdi-play-box-multiple-outline:before{content:"󱏦"}.mdi-play-box-outline:before{content:"󰐋"}.mdi-play-circle:before{content:"󰐌"}.mdi-play-circle-outline:before{content:"󰐍"}.mdi-play-network:before{content:"󰢋"}.mdi-play-network-outline:before{content:"󰲷"}.mdi-play-outline:before{content:"󰼛"}.mdi-play-pause:before{content:"󰐎"}.mdi-play-protected-content:before{content:"󰐏"}.mdi-play-speed:before{content:"󰣿"}.mdi-playlist-check:before{content:"󰗇"}.mdi-playlist-edit:before{content:"󰤀"}.mdi-playlist-minus:before{content:"󰐐"}.mdi-playlist-music:before{content:"󰲸"}.mdi-playlist-music-outline:before{content:"󰲹"}.mdi-playlist-play:before{content:"󰐑"}.mdi-playlist-plus:before{content:"󰐒"}.mdi-playlist-remove:before{content:"󰐓"}.mdi-playlist-star:before{content:"󰷲"}.mdi-plex:before{content:"󰚺"}.mdi-pliers:before{content:"󱦤"}.mdi-plus:before{content:"󰐕"}.mdi-plus-box:before{content:"󰐖"}.mdi-plus-box-multiple:before{content:"󰌴"}.mdi-plus-box-multiple-outline:before{content:"󱅃"}.mdi-plus-box-outline:before{content:"󰜄"}.mdi-plus-circle:before{content:"󰐗"}.mdi-plus-circle-multiple:before{content:"󰍌"}.mdi-plus-circle-multiple-outline:before{content:"󰐘"}.mdi-plus-circle-outline:before{content:"󰐙"}.mdi-plus-lock:before{content:"󱩝"}.mdi-plus-lock-open:before{content:"󱩞"}.mdi-plus-minus:before{content:"󰦒"}.mdi-plus-minus-box:before{content:"󰦓"}.mdi-plus-minus-variant:before{content:"󱓉"}.mdi-plus-network:before{content:"󰐚"}.mdi-plus-network-outline:before{content:"󰲺"}.mdi-plus-outline:before{content:"󰜅"}.mdi-plus-thick:before{content:"󱇬"}.mdi-pocket:before{content:"󱲾"}.mdi-podcast:before{content:"󰦔"}.mdi-podium:before{content:"󰴥"}.mdi-podium-bronze:before{content:"󰴦"}.mdi-podium-gold:before{content:"󰴧"}.mdi-podium-silver:before{content:"󰴨"}.mdi-point-of-sale:before{content:"󰶒"}.mdi-pokeball:before{content:"󰐝"}.mdi-pokemon-go:before{content:"󰨉"}.mdi-poker-chip:before{content:"󰠰"}.mdi-polaroid:before{content:"󰐞"}.mdi-police-badge:before{content:"󱅧"}.mdi-police-badge-outline:before{content:"󱅨"}.mdi-police-station:before{content:"󱠹"}.mdi-poll:before{content:"󰐟"}.mdi-polo:before{content:"󱓃"}.mdi-polymer:before{content:"󰐡"}.mdi-pool:before{content:"󰘆"}.mdi-pool-thermometer:before{content:"󱩟"}.mdi-popcorn:before{content:"󰐢"}.mdi-post:before{content:"󱀈"}.mdi-post-lamp:before{content:"󱩠"}.mdi-post-outline:before{content:"󱀉"}.mdi-postage-stamp:before{content:"󰲻"}.mdi-pot:before{content:"󰋥"}.mdi-pot-mix:before{content:"󰙛"}.mdi-pot-mix-outline:before{content:"󰙷"}.mdi-pot-outline:before{content:"󰋿"}.mdi-pot-steam:before{content:"󰙚"}.mdi-pot-steam-outline:before{content:"󰌦"}.mdi-pound:before{content:"󰐣"}.mdi-pound-box:before{content:"󰐤"}.mdi-pound-box-outline:before{content:"󱅿"}.mdi-power:before{content:"󰐥"}.mdi-power-cycle:before{content:"󰤁"}.mdi-power-off:before{content:"󰤂"}.mdi-power-on:before{content:"󰤃"}.mdi-power-plug:before{content:"󰚥"}.mdi-power-plug-battery:before{content:"󱰻"}.mdi-power-plug-battery-outline:before{content:"󱰼"}.mdi-power-plug-off:before{content:"󰚦"}.mdi-power-plug-off-outline:before{content:"󱐤"}.mdi-power-plug-outline:before{content:"󱐥"}.mdi-power-settings:before{content:"󰐦"}.mdi-power-sleep:before{content:"󰤄"}.mdi-power-socket:before{content:"󰐧"}.mdi-power-socket-au:before{content:"󰤅"}.mdi-power-socket-ch:before{content:"󰾳"}.mdi-power-socket-de:before{content:"󱄇"}.mdi-power-socket-eu:before{content:"󰟧"}.mdi-power-socket-fr:before{content:"󱄈"}.mdi-power-socket-it:before{content:"󱓿"}.mdi-power-socket-jp:before{content:"󱄉"}.mdi-power-socket-uk:before{content:"󰟨"}.mdi-power-socket-us:before{content:"󰟩"}.mdi-power-standby:before{content:"󰤆"}.mdi-powershell:before{content:"󰨊"}.mdi-prescription:before{content:"󰜆"}.mdi-presentation:before{content:"󰐨"}.mdi-presentation-play:before{content:"󰐩"}.mdi-pretzel:before{content:"󱕢"}.mdi-printer:before{content:"󰐪"}.mdi-printer-3d:before{content:"󰐫"}.mdi-printer-3d-nozzle:before{content:"󰹛"}.mdi-printer-3d-nozzle-alert:before{content:"󱇀"}.mdi-printer-3d-nozzle-alert-outline:before{content:"󱇁"}.mdi-printer-3d-nozzle-heat:before{content:"󱢸"}.mdi-printer-3d-nozzle-heat-outline:before{content:"󱢹"}.mdi-printer-3d-nozzle-off:before{content:"󱬙"}.mdi-printer-3d-nozzle-off-outline:before{content:"󱬚"}.mdi-printer-3d-nozzle-outline:before{content:"󰹜"}.mdi-printer-3d-off:before{content:"󱬎"}.mdi-printer-alert:before{content:"󰐬"}.mdi-printer-check:before{content:"󱅆"}.mdi-printer-eye:before{content:"󱑘"}.mdi-printer-off:before{content:"󰹝"}.mdi-printer-off-outline:before{content:"󱞅"}.mdi-printer-outline:before{content:"󱞆"}.mdi-printer-pos:before{content:"󱁗"}.mdi-printer-pos-alert:before{content:"󱮼"}.mdi-printer-pos-alert-outline:before{content:"󱮽"}.mdi-printer-pos-cancel:before{content:"󱮾"}.mdi-printer-pos-cancel-outline:before{content:"󱮿"}.mdi-printer-pos-check:before{content:"󱯀"}.mdi-printer-pos-check-outline:before{content:"󱯁"}.mdi-printer-pos-cog:before{content:"󱯂"}.mdi-printer-pos-cog-outline:before{content:"󱯃"}.mdi-printer-pos-edit:before{content:"󱯄"}.mdi-printer-pos-edit-outline:before{content:"󱯅"}.mdi-printer-pos-minus:before{content:"󱯆"}.mdi-printer-pos-minus-outline:before{content:"󱯇"}.mdi-printer-pos-network:before{content:"󱯈"}.mdi-printer-pos-network-outline:before{content:"󱯉"}.mdi-printer-pos-off:before{content:"󱯊"}.mdi-printer-pos-off-outline:before{content:"󱯋"}.mdi-printer-pos-outline:before{content:"󱯌"}.mdi-printer-pos-pause:before{content:"󱯍"}.mdi-printer-pos-pause-outline:before{content:"󱯎"}.mdi-printer-pos-play:before{content:"󱯏"}.mdi-printer-pos-play-outline:before{content:"󱯐"}.mdi-printer-pos-plus:before{content:"󱯑"}.mdi-printer-pos-plus-outline:before{content:"󱯒"}.mdi-printer-pos-refresh:before{content:"󱯓"}.mdi-printer-pos-refresh-outline:before{content:"󱯔"}.mdi-printer-pos-remove:before{content:"󱯕"}.mdi-printer-pos-remove-outline:before{content:"󱯖"}.mdi-printer-pos-star:before{content:"󱯗"}.mdi-printer-pos-star-outline:before{content:"󱯘"}.mdi-printer-pos-stop:before{content:"󱯙"}.mdi-printer-pos-stop-outline:before{content:"󱯚"}.mdi-printer-pos-sync:before{content:"󱯛"}.mdi-printer-pos-sync-outline:before{content:"󱯜"}.mdi-printer-pos-wrench:before{content:"󱯝"}.mdi-printer-pos-wrench-outline:before{content:"󱯞"}.mdi-printer-search:before{content:"󱑗"}.mdi-printer-settings:before{content:"󰜇"}.mdi-printer-wireless:before{content:"󰨋"}.mdi-priority-high:before{content:"󰘃"}.mdi-priority-low:before{content:"󰘄"}.mdi-professional-hexagon:before{content:"󰐭"}.mdi-progress-alert:before{content:"󰲼"}.mdi-progress-check:before{content:"󰦕"}.mdi-progress-clock:before{content:"󰦖"}.mdi-progress-close:before{content:"󱄊"}.mdi-progress-download:before{content:"󰦗"}.mdi-progress-helper:before{content:"󱮢"}.mdi-progress-pencil:before{content:"󱞇"}.mdi-progress-question:before{content:"󱔢"}.mdi-progress-star:before{content:"󱞈"}.mdi-progress-star-four-points:before{content:"󱰽"}.mdi-progress-tag:before{content:"󱴍"}.mdi-progress-upload:before{content:"󰦘"}.mdi-progress-wrench:before{content:"󰲽"}.mdi-projector:before{content:"󰐮"}.mdi-projector-off:before{content:"󱨣"}.mdi-projector-screen:before{content:"󰐯"}.mdi-projector-screen-off:before{content:"󱠍"}.mdi-projector-screen-off-outline:before{content:"󱠎"}.mdi-projector-screen-outline:before{content:"󱜤"}.mdi-projector-screen-variant:before{content:"󱠏"}.mdi-projector-screen-variant-off:before{content:"󱠐"}.mdi-projector-screen-variant-off-outline:before{content:"󱠑"}.mdi-projector-screen-variant-outline:before{content:"󱠒"}.mdi-propane-tank:before{content:"󱍗"}.mdi-propane-tank-outline:before{content:"󱍘"}.mdi-protocol:before{content:"󰿘"}.mdi-publish:before{content:"󰚧"}.mdi-publish-off:before{content:"󱥅"}.mdi-pulse:before{content:"󰐰"}.mdi-pump:before{content:"󱐂"}.mdi-pump-off:before{content:"󱬢"}.mdi-pumpkin:before{content:"󰮿"}.mdi-purse:before{content:"󰼜"}.mdi-purse-outline:before{content:"󰼝"}.mdi-puzzle:before{content:"󰐱"}.mdi-puzzle-check:before{content:"󱐦"}.mdi-puzzle-check-outline:before{content:"󱐧"}.mdi-puzzle-edit:before{content:"󱓓"}.mdi-puzzle-edit-outline:before{content:"󱓙"}.mdi-puzzle-heart:before{content:"󱓔"}.mdi-puzzle-heart-outline:before{content:"󱓚"}.mdi-puzzle-minus:before{content:"󱓑"}.mdi-puzzle-minus-outline:before{content:"󱓗"}.mdi-puzzle-outline:before{content:"󰩦"}.mdi-puzzle-plus:before{content:"󱓐"}.mdi-puzzle-plus-outline:before{content:"󱓖"}.mdi-puzzle-remove:before{content:"󱓒"}.mdi-puzzle-remove-outline:before{content:"󱓘"}.mdi-puzzle-star:before{content:"󱓕"}.mdi-puzzle-star-outline:before{content:"󱓛"}.mdi-pyramid:before{content:"󱥒"}.mdi-pyramid-off:before{content:"󱥓"}.mdi-qi:before{content:"󰦙"}.mdi-qqchat:before{content:"󰘅"}.mdi-qrcode:before{content:"󰐲"}.mdi-qrcode-edit:before{content:"󰢸"}.mdi-qrcode-minus:before{content:"󱆌"}.mdi-qrcode-plus:before{content:"󱆋"}.mdi-qrcode-remove:before{content:"󱆍"}.mdi-qrcode-scan:before{content:"󰐳"}.mdi-quadcopter:before{content:"󰐴"}.mdi-quality-high:before{content:"󰐵"}.mdi-quality-low:before{content:"󰨌"}.mdi-quality-medium:before{content:"󰨍"}.mdi-queue-first-in-last-out:before{content:"󱲯"}.mdi-quora:before{content:"󰴩"}.mdi-rabbit:before{content:"󰤇"}.mdi-rabbit-variant:before{content:"󱩡"}.mdi-rabbit-variant-outline:before{content:"󱩢"}.mdi-racing-helmet:before{content:"󰶓"}.mdi-racquetball:before{content:"󰶔"}.mdi-radar:before{content:"󰐷"}.mdi-radiator:before{content:"󰐸"}.mdi-radiator-disabled:before{content:"󰫗"}.mdi-radiator-off:before{content:"󰫘"}.mdi-radio:before{content:"󰐹"}.mdi-radio-am:before{content:"󰲾"}.mdi-radio-fm:before{content:"󰲿"}.mdi-radio-handheld:before{content:"󰐺"}.mdi-radio-off:before{content:"󱈜"}.mdi-radio-tower:before{content:"󰐻"}.mdi-radioactive:before{content:"󰐼"}.mdi-radioactive-circle:before{content:"󱡝"}.mdi-radioactive-circle-outline:before{content:"󱡞"}.mdi-radioactive-off:before{content:"󰻁"}.mdi-radiobox-blank:before{content:"󰐽"}.mdi-radiobox-indeterminate-variant:before{content:"󱱞"}.mdi-radiobox-marked:before{content:"󰐾"}.mdi-radiology-box:before{content:"󱓅"}.mdi-radiology-box-outline:before{content:"󱓆"}.mdi-radius:before{content:"󰳀"}.mdi-radius-outline:before{content:"󰳁"}.mdi-railroad-light:before{content:"󰼞"}.mdi-rake:before{content:"󱕄"}.mdi-raspberry-pi:before{content:"󰐿"}.mdi-raw:before{content:"󱨏"}.mdi-raw-off:before{content:"󱨐"}.mdi-ray-end:before{content:"󰑀"}.mdi-ray-end-arrow:before{content:"󰑁"}.mdi-ray-start:before{content:"󰑂"}.mdi-ray-start-arrow:before{content:"󰑃"}.mdi-ray-start-end:before{content:"󰑄"}.mdi-ray-start-vertex-end:before{content:"󱗘"}.mdi-ray-vertex:before{content:"󰑅"}.mdi-razor-double-edge:before{content:"󱦗"}.mdi-razor-single-edge:before{content:"󱦘"}.mdi-react:before{content:"󰜈"}.mdi-read:before{content:"󰑇"}.mdi-receipt:before{content:"󰠤"}.mdi-receipt-clock:before{content:"󱰾"}.mdi-receipt-clock-outline:before{content:"󱰿"}.mdi-receipt-outline:before{content:"󰓷"}.mdi-receipt-send:before{content:"󱱀"}.mdi-receipt-send-outline:before{content:"󱱁"}.mdi-receipt-text:before{content:"󰑉"}.mdi-receipt-text-arrow-left:before{content:"󱱂"}.mdi-receipt-text-arrow-left-outline:before{content:"󱱃"}.mdi-receipt-text-arrow-right:before{content:"󱱄"}.mdi-receipt-text-arrow-right-outline:before{content:"󱱅"}.mdi-receipt-text-check:before{content:"󱩣"}.mdi-receipt-text-check-outline:before{content:"󱩤"}.mdi-receipt-text-clock:before{content:"󱱆"}.mdi-receipt-text-clock-outline:before{content:"󱱇"}.mdi-receipt-text-edit:before{content:"󱱈"}.mdi-receipt-text-edit-outline:before{content:"󱱉"}.mdi-receipt-text-minus:before{content:"󱩥"}.mdi-receipt-text-minus-outline:before{content:"󱩦"}.mdi-receipt-text-outline:before{content:"󱧜"}.mdi-receipt-text-plus:before{content:"󱩧"}.mdi-receipt-text-plus-outline:before{content:"󱩨"}.mdi-receipt-text-remove:before{content:"󱩩"}.mdi-receipt-text-remove-outline:before{content:"󱩪"}.mdi-receipt-text-send:before{content:"󱱊"}.mdi-receipt-text-send-outline:before{content:"󱱋"}.mdi-record:before{content:"󰑊"}.mdi-record-circle:before{content:"󰻂"}.mdi-record-circle-outline:before{content:"󰻃"}.mdi-record-player:before{content:"󰦚"}.mdi-record-rec:before{content:"󰑋"}.mdi-rectangle:before{content:"󰹞"}.mdi-rectangle-outline:before{content:"󰹟"}.mdi-recycle:before{content:"󰑌"}.mdi-recycle-variant:before{content:"󱎝"}.mdi-reddit:before{content:"󰑍"}.mdi-redhat:before{content:"󱄛"}.mdi-redo:before{content:"󰑎"}.mdi-redo-variant:before{content:"󰑏"}.mdi-reflect-horizontal:before{content:"󰨎"}.mdi-reflect-vertical:before{content:"󰨏"}.mdi-refresh:before{content:"󰑐"}.mdi-refresh-auto:before{content:"󱣲"}.mdi-refresh-circle:before{content:"󱍷"}.mdi-regex:before{content:"󰑑"}.mdi-registered-trademark:before{content:"󰩧"}.mdi-reiterate:before{content:"󱖈"}.mdi-relation-many-to-many:before{content:"󱒖"}.mdi-relation-many-to-one:before{content:"󱒗"}.mdi-relation-many-to-one-or-many:before{content:"󱒘"}.mdi-relation-many-to-only-one:before{content:"󱒙"}.mdi-relation-many-to-zero-or-many:before{content:"󱒚"}.mdi-relation-many-to-zero-or-one:before{content:"󱒛"}.mdi-relation-one-or-many-to-many:before{content:"󱒜"}.mdi-relation-one-or-many-to-one:before{content:"󱒝"}.mdi-relation-one-or-many-to-one-or-many:before{content:"󱒞"}.mdi-relation-one-or-many-to-only-one:before{content:"󱒟"}.mdi-relation-one-or-many-to-zero-or-many:before{content:"󱒠"}.mdi-relation-one-or-many-to-zero-or-one:before{content:"󱒡"}.mdi-relation-one-to-many:before{content:"󱒢"}.mdi-relation-one-to-one:before{content:"󱒣"}.mdi-relation-one-to-one-or-many:before{content:"󱒤"}.mdi-relation-one-to-only-one:before{content:"󱒥"}.mdi-relation-one-to-zero-or-many:before{content:"󱒦"}.mdi-relation-one-to-zero-or-one:before{content:"󱒧"}.mdi-relation-only-one-to-many:before{content:"󱒨"}.mdi-relation-only-one-to-one:before{content:"󱒩"}.mdi-relation-only-one-to-one-or-many:before{content:"󱒪"}.mdi-relation-only-one-to-only-one:before{content:"󱒫"}.mdi-relation-only-one-to-zero-or-many:before{content:"󱒬"}.mdi-relation-only-one-to-zero-or-one:before{content:"󱒭"}.mdi-relation-zero-or-many-to-many:before{content:"󱒮"}.mdi-relation-zero-or-many-to-one:before{content:"󱒯"}.mdi-relation-zero-or-many-to-one-or-many:before{content:"󱒰"}.mdi-relation-zero-or-many-to-only-one:before{content:"󱒱"}.mdi-relation-zero-or-many-to-zero-or-many:before{content:"󱒲"}.mdi-relation-zero-or-many-to-zero-or-one:before{content:"󱒳"}.mdi-relation-zero-or-one-to-many:before{content:"󱒴"}.mdi-relation-zero-or-one-to-one:before{content:"󱒵"}.mdi-relation-zero-or-one-to-one-or-many:before{content:"󱒶"}.mdi-relation-zero-or-one-to-only-one:before{content:"󱒷"}.mdi-relation-zero-or-one-to-zero-or-many:before{content:"󱒸"}.mdi-relation-zero-or-one-to-zero-or-one:before{content:"󱒹"}.mdi-relative-scale:before{content:"󰑒"}.mdi-reload:before{content:"󰑓"}.mdi-reload-alert:before{content:"󱄋"}.mdi-reminder:before{content:"󰢌"}.mdi-remote:before{content:"󰑔"}.mdi-remote-desktop:before{content:"󰢹"}.mdi-remote-off:before{content:"󰻄"}.mdi-remote-tv:before{content:"󰻅"}.mdi-remote-tv-off:before{content:"󰻆"}.mdi-rename:before{content:"󱰘"}.mdi-rename-box:before{content:"󰑕"}.mdi-rename-box-outline:before{content:"󱰙"}.mdi-rename-outline:before{content:"󱰚"}.mdi-reorder-horizontal:before{content:"󰚈"}.mdi-reorder-vertical:before{content:"󰚉"}.mdi-repeat:before{content:"󰑖"}.mdi-repeat-off:before{content:"󰑗"}.mdi-repeat-once:before{content:"󰑘"}.mdi-repeat-variant:before{content:"󰕇"}.mdi-replay:before{content:"󰑙"}.mdi-reply:before{content:"󰑚"}.mdi-reply-all:before{content:"󰑛"}.mdi-reply-all-outline:before{content:"󰼟"}.mdi-reply-circle:before{content:"󱆮"}.mdi-reply-outline:before{content:"󰼠"}.mdi-reproduction:before{content:"󰑜"}.mdi-resistor:before{content:"󰭄"}.mdi-resistor-nodes:before{content:"󰭅"}.mdi-resize:before{content:"󰩨"}.mdi-resize-bottom-right:before{content:"󰑝"}.mdi-responsive:before{content:"󰑞"}.mdi-restart:before{content:"󰜉"}.mdi-restart-alert:before{content:"󱄌"}.mdi-restart-off:before{content:"󰶕"}.mdi-restore:before{content:"󰦛"}.mdi-restore-alert:before{content:"󱄍"}.mdi-rewind:before{content:"󰑟"}.mdi-rewind-10:before{content:"󰴪"}.mdi-rewind-15:before{content:"󱥆"}.mdi-rewind-30:before{content:"󰶖"}.mdi-rewind-45:before{content:"󱬓"}.mdi-rewind-5:before{content:"󱇹"}.mdi-rewind-60:before{content:"󱘌"}.mdi-rewind-outline:before{content:"󰜊"}.mdi-rhombus:before{content:"󰜋"}.mdi-rhombus-medium:before{content:"󰨐"}.mdi-rhombus-medium-outline:before{content:"󱓜"}.mdi-rhombus-outline:before{content:"󰜌"}.mdi-rhombus-split:before{content:"󰨑"}.mdi-rhombus-split-outline:before{content:"󱓝"}.mdi-ribbon:before{content:"󰑠"}.mdi-rice:before{content:"󰟪"}.mdi-rickshaw:before{content:"󱖻"}.mdi-rickshaw-electric:before{content:"󱖼"}.mdi-ring:before{content:"󰟫"}.mdi-rivet:before{content:"󰹠"}.mdi-road:before{content:"󰑡"}.mdi-road-variant:before{content:"󰑢"}.mdi-robber:before{content:"󱁘"}.mdi-robot:before{content:"󰚩"}.mdi-robot-angry:before{content:"󱚝"}.mdi-robot-angry-outline:before{content:"󱚞"}.mdi-robot-confused:before{content:"󱚟"}.mdi-robot-confused-outline:before{content:"󱚠"}.mdi-robot-dead:before{content:"󱚡"}.mdi-robot-dead-outline:before{content:"󱚢"}.mdi-robot-excited:before{content:"󱚣"}.mdi-robot-excited-outline:before{content:"󱚤"}.mdi-robot-happy:before{content:"󱜙"}.mdi-robot-happy-outline:before{content:"󱜚"}.mdi-robot-industrial:before{content:"󰭆"}.mdi-robot-industrial-outline:before{content:"󱨚"}.mdi-robot-love:before{content:"󱚥"}.mdi-robot-love-outline:before{content:"󱚦"}.mdi-robot-mower:before{content:"󱇷"}.mdi-robot-mower-outline:before{content:"󱇳"}.mdi-robot-off:before{content:"󱚧"}.mdi-robot-off-outline:before{content:"󱙻"}.mdi-robot-outline:before{content:"󱙺"}.mdi-robot-vacuum:before{content:"󰜍"}.mdi-robot-vacuum-alert:before{content:"󱭝"}.mdi-robot-vacuum-off:before{content:"󱰁"}.mdi-robot-vacuum-variant:before{content:"󰤈"}.mdi-robot-vacuum-variant-alert:before{content:"󱭞"}.mdi-robot-vacuum-variant-off:before{content:"󱰂"}.mdi-rocket:before{content:"󰑣"}.mdi-rocket-launch:before{content:"󱓞"}.mdi-rocket-launch-outline:before{content:"󱓟"}.mdi-rocket-outline:before{content:"󱎯"}.mdi-rodent:before{content:"󱌧"}.mdi-roller-shade:before{content:"󱩫"}.mdi-roller-shade-closed:before{content:"󱩬"}.mdi-roller-skate:before{content:"󰴫"}.mdi-roller-skate-off:before{content:"󰅅"}.mdi-rollerblade:before{content:"󰴬"}.mdi-rollerblade-off:before{content:"󰀮"}.mdi-rollupjs:before{content:"󰯀"}.mdi-rolodex:before{content:"󱪹"}.mdi-rolodex-outline:before{content:"󱪺"}.mdi-roman-numeral-1:before{content:"󱂈"}.mdi-roman-numeral-10:before{content:"󱂑"}.mdi-roman-numeral-2:before{content:"󱂉"}.mdi-roman-numeral-3:before{content:"󱂊"}.mdi-roman-numeral-4:before{content:"󱂋"}.mdi-roman-numeral-5:before{content:"󱂌"}.mdi-roman-numeral-6:before{content:"󱂍"}.mdi-roman-numeral-7:before{content:"󱂎"}.mdi-roman-numeral-8:before{content:"󱂏"}.mdi-roman-numeral-9:before{content:"󱂐"}.mdi-room-service:before{content:"󰢍"}.mdi-room-service-outline:before{content:"󰶗"}.mdi-rotate-360:before{content:"󱦙"}.mdi-rotate-3d:before{content:"󰻇"}.mdi-rotate-3d-variant:before{content:"󰑤"}.mdi-rotate-left:before{content:"󰑥"}.mdi-rotate-left-variant:before{content:"󰑦"}.mdi-rotate-orbit:before{content:"󰶘"}.mdi-rotate-right:before{content:"󰑧"}.mdi-rotate-right-variant:before{content:"󰑨"}.mdi-rounded-corner:before{content:"󰘇"}.mdi-router:before{content:"󱇢"}.mdi-router-network:before{content:"󱂇"}.mdi-router-network-wireless:before{content:"󱲗"}.mdi-router-wireless:before{content:"󰑩"}.mdi-router-wireless-off:before{content:"󱖣"}.mdi-router-wireless-settings:before{content:"󰩩"}.mdi-routes:before{content:"󰑪"}.mdi-routes-clock:before{content:"󱁙"}.mdi-rowing:before{content:"󰘈"}.mdi-rss:before{content:"󰑫"}.mdi-rss-box:before{content:"󰑬"}.mdi-rss-off:before{content:"󰼡"}.mdi-rug:before{content:"󱑵"}.mdi-rugby:before{content:"󰶙"}.mdi-ruler:before{content:"󰑭"}.mdi-ruler-square:before{content:"󰳂"}.mdi-ruler-square-compass:before{content:"󰺾"}.mdi-run:before{content:"󰜎"}.mdi-run-fast:before{content:"󰑮"}.mdi-rv-truck:before{content:"󱇔"}.mdi-sack:before{content:"󰴮"}.mdi-sack-outline:before{content:"󱱌"}.mdi-sack-percent:before{content:"󰴯"}.mdi-safe:before{content:"󰩪"}.mdi-safe-square:before{content:"󱉼"}.mdi-safe-square-outline:before{content:"󱉽"}.mdi-safety-goggles:before{content:"󰴰"}.mdi-sail-boat:before{content:"󰻈"}.mdi-sail-boat-sink:before{content:"󱫯"}.mdi-sale:before{content:"󰑯"}.mdi-sale-outline:before{content:"󱨆"}.mdi-salesforce:before{content:"󰢎"}.mdi-sass:before{content:"󰟬"}.mdi-satellite:before{content:"󰑰"}.mdi-satellite-uplink:before{content:"󰤉"}.mdi-satellite-variant:before{content:"󰑱"}.mdi-sausage:before{content:"󰢺"}.mdi-sausage-off:before{content:"󱞉"}.mdi-saw-blade:before{content:"󰹡"}.mdi-sawtooth-wave:before{content:"󱑺"}.mdi-saxophone:before{content:"󰘉"}.mdi-scale:before{content:"󰑲"}.mdi-scale-balance:before{content:"󰗑"}.mdi-scale-bathroom:before{content:"󰑳"}.mdi-scale-off:before{content:"󱁚"}.mdi-scale-unbalanced:before{content:"󱦸"}.mdi-scan-helper:before{content:"󱏘"}.mdi-scanner:before{content:"󰚫"}.mdi-scanner-off:before{content:"󰤊"}.mdi-scatter-plot:before{content:"󰻉"}.mdi-scatter-plot-outline:before{content:"󰻊"}.mdi-scent:before{content:"󱥘"}.mdi-scent-off:before{content:"󱥙"}.mdi-school:before{content:"󰑴"}.mdi-school-outline:before{content:"󱆀"}.mdi-scissors-cutting:before{content:"󰩫"}.mdi-scooter:before{content:"󱖽"}.mdi-scooter-electric:before{content:"󱖾"}.mdi-scoreboard:before{content:"󱉾"}.mdi-scoreboard-outline:before{content:"󱉿"}.mdi-screen-rotation:before{content:"󰑵"}.mdi-screen-rotation-lock:before{content:"󰑸"}.mdi-screw-flat-top:before{content:"󰷳"}.mdi-screw-lag:before{content:"󰷴"}.mdi-screw-machine-flat-top:before{content:"󰷵"}.mdi-screw-machine-round-top:before{content:"󰷶"}.mdi-screw-round-top:before{content:"󰷷"}.mdi-screwdriver:before{content:"󰑶"}.mdi-script:before{content:"󰯁"}.mdi-script-outline:before{content:"󰑷"}.mdi-script-text:before{content:"󰯂"}.mdi-script-text-key:before{content:"󱜥"}.mdi-script-text-key-outline:before{content:"󱜦"}.mdi-script-text-outline:before{content:"󰯃"}.mdi-script-text-play:before{content:"󱜧"}.mdi-script-text-play-outline:before{content:"󱜨"}.mdi-sd:before{content:"󰑹"}.mdi-seal:before{content:"󰑺"}.mdi-seal-variant:before{content:"󰿙"}.mdi-search-web:before{content:"󰜏"}.mdi-seat:before{content:"󰳃"}.mdi-seat-flat:before{content:"󰑻"}.mdi-seat-flat-angled:before{content:"󰑼"}.mdi-seat-individual-suite:before{content:"󰑽"}.mdi-seat-legroom-extra:before{content:"󰑾"}.mdi-seat-legroom-normal:before{content:"󰑿"}.mdi-seat-legroom-reduced:before{content:"󰒀"}.mdi-seat-outline:before{content:"󰳄"}.mdi-seat-passenger:before{content:"󱉉"}.mdi-seat-recline-extra:before{content:"󰒁"}.mdi-seat-recline-normal:before{content:"󰒂"}.mdi-seatbelt:before{content:"󰳅"}.mdi-security:before{content:"󰒃"}.mdi-security-network:before{content:"󰒄"}.mdi-seed:before{content:"󰹢"}.mdi-seed-off:before{content:"󱏽"}.mdi-seed-off-outline:before{content:"󱏾"}.mdi-seed-outline:before{content:"󰹣"}.mdi-seed-plus:before{content:"󱩭"}.mdi-seed-plus-outline:before{content:"󱩮"}.mdi-seesaw:before{content:"󱖤"}.mdi-segment:before{content:"󰻋"}.mdi-select:before{content:"󰒅"}.mdi-select-all:before{content:"󰒆"}.mdi-select-arrow-down:before{content:"󱭙"}.mdi-select-arrow-up:before{content:"󱭘"}.mdi-select-color:before{content:"󰴱"}.mdi-select-compare:before{content:"󰫙"}.mdi-select-drag:before{content:"󰩬"}.mdi-select-group:before{content:"󰾂"}.mdi-select-inverse:before{content:"󰒇"}.mdi-select-marker:before{content:"󱊀"}.mdi-select-multiple:before{content:"󱊁"}.mdi-select-multiple-marker:before{content:"󱊂"}.mdi-select-off:before{content:"󰒈"}.mdi-select-place:before{content:"󰿚"}.mdi-select-remove:before{content:"󱟁"}.mdi-select-search:before{content:"󱈄"}.mdi-selection:before{content:"󰒉"}.mdi-selection-drag:before{content:"󰩭"}.mdi-selection-ellipse:before{content:"󰴲"}.mdi-selection-ellipse-arrow-inside:before{content:"󰼢"}.mdi-selection-ellipse-remove:before{content:"󱟂"}.mdi-selection-marker:before{content:"󱊃"}.mdi-selection-multiple:before{content:"󱊅"}.mdi-selection-multiple-marker:before{content:"󱊄"}.mdi-selection-off:before{content:"󰝷"}.mdi-selection-remove:before{content:"󱟃"}.mdi-selection-search:before{content:"󱈅"}.mdi-semantic-web:before{content:"󱌖"}.mdi-send:before{content:"󰒊"}.mdi-send-check:before{content:"󱅡"}.mdi-send-check-outline:before{content:"󱅢"}.mdi-send-circle:before{content:"󰷸"}.mdi-send-circle-outline:before{content:"󰷹"}.mdi-send-clock:before{content:"󱅣"}.mdi-send-clock-outline:before{content:"󱅤"}.mdi-send-lock:before{content:"󰟭"}.mdi-send-lock-outline:before{content:"󱅦"}.mdi-send-outline:before{content:"󱅥"}.mdi-send-variant:before{content:"󱱍"}.mdi-send-variant-clock:before{content:"󱱾"}.mdi-send-variant-clock-outline:before{content:"󱱿"}.mdi-send-variant-outline:before{content:"󱱎"}.mdi-serial-port:before{content:"󰙜"}.mdi-server:before{content:"󰒋"}.mdi-server-minus:before{content:"󰒌"}.mdi-server-minus-outline:before{content:"󱲘"}.mdi-server-network:before{content:"󰒍"}.mdi-server-network-off:before{content:"󰒎"}.mdi-server-network-outline:before{content:"󱲙"}.mdi-server-off:before{content:"󰒏"}.mdi-server-outline:before{content:"󱲚"}.mdi-server-plus:before{content:"󰒐"}.mdi-server-plus-outline:before{content:"󱲛"}.mdi-server-remove:before{content:"󰒑"}.mdi-server-security:before{content:"󰒒"}.mdi-set-all:before{content:"󰝸"}.mdi-set-center:before{content:"󰝹"}.mdi-set-center-right:before{content:"󰝺"}.mdi-set-left:before{content:"󰝻"}.mdi-set-left-center:before{content:"󰝼"}.mdi-set-left-right:before{content:"󰝽"}.mdi-set-merge:before{content:"󱓠"}.mdi-set-none:before{content:"󰝾"}.mdi-set-right:before{content:"󰝿"}.mdi-set-split:before{content:"󱓡"}.mdi-set-square:before{content:"󱑝"}.mdi-set-top-box:before{content:"󰦟"}.mdi-settings-helper:before{content:"󰩮"}.mdi-shaker:before{content:"󱄎"}.mdi-shaker-outline:before{content:"󱄏"}.mdi-shape:before{content:"󰠱"}.mdi-shape-circle-plus:before{content:"󰙝"}.mdi-shape-outline:before{content:"󰠲"}.mdi-shape-oval-plus:before{content:"󱇺"}.mdi-shape-plus:before{content:"󰒕"}.mdi-shape-plus-outline:before{content:"󱱏"}.mdi-shape-polygon-plus:before{content:"󰙞"}.mdi-shape-rectangle-plus:before{content:"󰙟"}.mdi-shape-square-plus:before{content:"󰙠"}.mdi-shape-square-rounded-plus:before{content:"󱓺"}.mdi-share:before{content:"󰒖"}.mdi-share-all:before{content:"󱇴"}.mdi-share-all-outline:before{content:"󱇵"}.mdi-share-circle:before{content:"󱆭"}.mdi-share-off:before{content:"󰼣"}.mdi-share-off-outline:before{content:"󰼤"}.mdi-share-outline:before{content:"󰤲"}.mdi-share-variant:before{content:"󰒗"}.mdi-share-variant-outline:before{content:"󱔔"}.mdi-shark:before{content:"󱢺"}.mdi-shark-fin:before{content:"󱙳"}.mdi-shark-fin-outline:before{content:"󱙴"}.mdi-shark-off:before{content:"󱢻"}.mdi-sheep:before{content:"󰳆"}.mdi-shield:before{content:"󰒘"}.mdi-shield-account:before{content:"󰢏"}.mdi-shield-account-outline:before{content:"󰨒"}.mdi-shield-account-variant:before{content:"󱖧"}.mdi-shield-account-variant-outline:before{content:"󱖨"}.mdi-shield-airplane:before{content:"󰚻"}.mdi-shield-airplane-outline:before{content:"󰳇"}.mdi-shield-alert:before{content:"󰻌"}.mdi-shield-alert-outline:before{content:"󰻍"}.mdi-shield-bug:before{content:"󱏚"}.mdi-shield-bug-outline:before{content:"󱏛"}.mdi-shield-car:before{content:"󰾃"}.mdi-shield-check:before{content:"󰕥"}.mdi-shield-check-outline:before{content:"󰳈"}.mdi-shield-cross:before{content:"󰳉"}.mdi-shield-cross-outline:before{content:"󰳊"}.mdi-shield-crown:before{content:"󱢼"}.mdi-shield-crown-outline:before{content:"󱢽"}.mdi-shield-edit:before{content:"󱆠"}.mdi-shield-edit-outline:before{content:"󱆡"}.mdi-shield-half:before{content:"󱍠"}.mdi-shield-half-full:before{content:"󰞀"}.mdi-shield-home:before{content:"󰚊"}.mdi-shield-home-outline:before{content:"󰳋"}.mdi-shield-key:before{content:"󰯄"}.mdi-shield-key-outline:before{content:"󰯅"}.mdi-shield-link-variant:before{content:"󰴳"}.mdi-shield-link-variant-outline:before{content:"󰴴"}.mdi-shield-lock:before{content:"󰦝"}.mdi-shield-lock-open:before{content:"󱦚"}.mdi-shield-lock-open-outline:before{content:"󱦛"}.mdi-shield-lock-outline:before{content:"󰳌"}.mdi-shield-moon:before{content:"󱠨"}.mdi-shield-moon-outline:before{content:"󱠩"}.mdi-shield-off:before{content:"󰦞"}.mdi-shield-off-outline:before{content:"󰦜"}.mdi-shield-outline:before{content:"󰒙"}.mdi-shield-plus:before{content:"󰫚"}.mdi-shield-plus-outline:before{content:"󰫛"}.mdi-shield-refresh:before{content:"󰂪"}.mdi-shield-refresh-outline:before{content:"󰇠"}.mdi-shield-remove:before{content:"󰫜"}.mdi-shield-remove-outline:before{content:"󰫝"}.mdi-shield-search:before{content:"󰶚"}.mdi-shield-star:before{content:"󱄻"}.mdi-shield-star-outline:before{content:"󱄼"}.mdi-shield-sun:before{content:"󱁝"}.mdi-shield-sun-outline:before{content:"󱁞"}.mdi-shield-sword:before{content:"󱢾"}.mdi-shield-sword-outline:before{content:"󱢿"}.mdi-shield-sync:before{content:"󱆢"}.mdi-shield-sync-outline:before{content:"󱆣"}.mdi-shimmer:before{content:"󱕅"}.mdi-ship-wheel:before{content:"󰠳"}.mdi-shipping-pallet:before{content:"󱡎"}.mdi-shoe-ballet:before{content:"󱗊"}.mdi-shoe-cleat:before{content:"󱗇"}.mdi-shoe-formal:before{content:"󰭇"}.mdi-shoe-heel:before{content:"󰭈"}.mdi-shoe-print:before{content:"󰷺"}.mdi-shoe-sneaker:before{content:"󱗈"}.mdi-shopping:before{content:"󰒚"}.mdi-shopping-music:before{content:"󰒛"}.mdi-shopping-outline:before{content:"󱇕"}.mdi-shopping-search:before{content:"󰾄"}.mdi-shopping-search-outline:before{content:"󱩯"}.mdi-shore:before{content:"󱓹"}.mdi-shovel:before{content:"󰜐"}.mdi-shovel-off:before{content:"󰜑"}.mdi-shower:before{content:"󰦠"}.mdi-shower-head:before{content:"󰦡"}.mdi-shredder:before{content:"󰒜"}.mdi-shuffle:before{content:"󰒝"}.mdi-shuffle-disabled:before{content:"󰒞"}.mdi-shuffle-variant:before{content:"󰒟"}.mdi-shuriken:before{content:"󱍿"}.mdi-sickle:before{content:"󱣀"}.mdi-sigma:before{content:"󰒠"}.mdi-sigma-lower:before{content:"󰘫"}.mdi-sign-caution:before{content:"󰒡"}.mdi-sign-direction:before{content:"󰞁"}.mdi-sign-direction-minus:before{content:"󱀀"}.mdi-sign-direction-plus:before{content:"󰿜"}.mdi-sign-direction-remove:before{content:"󰿝"}.mdi-sign-language:before{content:"󱭍"}.mdi-sign-language-outline:before{content:"󱭎"}.mdi-sign-pole:before{content:"󱓸"}.mdi-sign-real-estate:before{content:"󱄘"}.mdi-sign-text:before{content:"󰞂"}.mdi-sign-yield:before{content:"󱮯"}.mdi-signal:before{content:"󰒢"}.mdi-signal-2g:before{content:"󰜒"}.mdi-signal-3g:before{content:"󰜓"}.mdi-signal-4g:before{content:"󰜔"}.mdi-signal-5g:before{content:"󰩯"}.mdi-signal-cellular-1:before{content:"󰢼"}.mdi-signal-cellular-2:before{content:"󰢽"}.mdi-signal-cellular-3:before{content:"󰢾"}.mdi-signal-cellular-outline:before{content:"󰢿"}.mdi-signal-distance-variant:before{content:"󰹤"}.mdi-signal-hspa:before{content:"󰜕"}.mdi-signal-hspa-plus:before{content:"󰜖"}.mdi-signal-off:before{content:"󰞃"}.mdi-signal-variant:before{content:"󰘊"}.mdi-signature:before{content:"󰷻"}.mdi-signature-freehand:before{content:"󰷼"}.mdi-signature-image:before{content:"󰷽"}.mdi-signature-text:before{content:"󰷾"}.mdi-silo:before{content:"󱮟"}.mdi-silo-outline:before{content:"󰭉"}.mdi-silverware:before{content:"󰒣"}.mdi-silverware-clean:before{content:"󰿞"}.mdi-silverware-fork:before{content:"󰒤"}.mdi-silverware-fork-knife:before{content:"󰩰"}.mdi-silverware-spoon:before{content:"󰒥"}.mdi-silverware-variant:before{content:"󰒦"}.mdi-sim:before{content:"󰒧"}.mdi-sim-alert:before{content:"󰒨"}.mdi-sim-alert-outline:before{content:"󱗓"}.mdi-sim-off:before{content:"󰒩"}.mdi-sim-off-outline:before{content:"󱗔"}.mdi-sim-outline:before{content:"󱗕"}.mdi-simple-icons:before{content:"󱌝"}.mdi-sina-weibo:before{content:"󰫟"}.mdi-sine-wave:before{content:"󰥛"}.mdi-sitemap:before{content:"󰒪"}.mdi-sitemap-outline:before{content:"󱦜"}.mdi-size-l:before{content:"󱎦"}.mdi-size-m:before{content:"󱎥"}.mdi-size-s:before{content:"󱎤"}.mdi-size-xl:before{content:"󱎧"}.mdi-size-xs:before{content:"󱎣"}.mdi-size-xxl:before{content:"󱎨"}.mdi-size-xxs:before{content:"󱎢"}.mdi-size-xxxl:before{content:"󱎩"}.mdi-skate:before{content:"󰴵"}.mdi-skate-off:before{content:"󰚙"}.mdi-skateboard:before{content:"󱓂"}.mdi-skateboarding:before{content:"󰔁"}.mdi-skew-less:before{content:"󰴶"}.mdi-skew-more:before{content:"󰴷"}.mdi-ski:before{content:"󱌄"}.mdi-ski-cross-country:before{content:"󱌅"}.mdi-ski-water:before{content:"󱌆"}.mdi-skip-backward:before{content:"󰒫"}.mdi-skip-backward-outline:before{content:"󰼥"}.mdi-skip-forward:before{content:"󰒬"}.mdi-skip-forward-outline:before{content:"󰼦"}.mdi-skip-next:before{content:"󰒭"}.mdi-skip-next-circle:before{content:"󰙡"}.mdi-skip-next-circle-outline:before{content:"󰙢"}.mdi-skip-next-outline:before{content:"󰼧"}.mdi-skip-previous:before{content:"󰒮"}.mdi-skip-previous-circle:before{content:"󰙣"}.mdi-skip-previous-circle-outline:before{content:"󰙤"}.mdi-skip-previous-outline:before{content:"󰼨"}.mdi-skull:before{content:"󰚌"}.mdi-skull-crossbones:before{content:"󰯆"}.mdi-skull-crossbones-outline:before{content:"󰯇"}.mdi-skull-outline:before{content:"󰯈"}.mdi-skull-scan:before{content:"󱓇"}.mdi-skull-scan-outline:before{content:"󱓈"}.mdi-skype:before{content:"󰒯"}.mdi-skype-business:before{content:"󰒰"}.mdi-slack:before{content:"󰒱"}.mdi-slash-forward:before{content:"󰿟"}.mdi-slash-forward-box:before{content:"󰿠"}.mdi-sledding:before{content:"󰐛"}.mdi-sleep:before{content:"󰒲"}.mdi-sleep-off:before{content:"󰒳"}.mdi-slide:before{content:"󱖥"}.mdi-slope-downhill:before{content:"󰷿"}.mdi-slope-uphill:before{content:"󰸀"}.mdi-slot-machine:before{content:"󱄔"}.mdi-slot-machine-outline:before{content:"󱄕"}.mdi-smart-card:before{content:"󱂽"}.mdi-smart-card-off:before{content:"󱣷"}.mdi-smart-card-off-outline:before{content:"󱣸"}.mdi-smart-card-outline:before{content:"󱂾"}.mdi-smart-card-reader:before{content:"󱂿"}.mdi-smart-card-reader-outline:before{content:"󱃀"}.mdi-smog:before{content:"󰩱"}.mdi-smoke:before{content:"󱞙"}.mdi-smoke-detector:before{content:"󰎒"}.mdi-smoke-detector-alert:before{content:"󱤮"}.mdi-smoke-detector-alert-outline:before{content:"󱤯"}.mdi-smoke-detector-off:before{content:"󱠉"}.mdi-smoke-detector-off-outline:before{content:"󱠊"}.mdi-smoke-detector-outline:before{content:"󱠈"}.mdi-smoke-detector-variant:before{content:"󱠋"}.mdi-smoke-detector-variant-alert:before{content:"󱤰"}.mdi-smoke-detector-variant-off:before{content:"󱠌"}.mdi-smoking:before{content:"󰒴"}.mdi-smoking-off:before{content:"󰒵"}.mdi-smoking-pipe:before{content:"󱐍"}.mdi-smoking-pipe-off:before{content:"󱐨"}.mdi-snail:before{content:"󱙷"}.mdi-snake:before{content:"󱔎"}.mdi-snapchat:before{content:"󰒶"}.mdi-snowboard:before{content:"󱌇"}.mdi-snowflake:before{content:"󰜗"}.mdi-snowflake-alert:before{content:"󰼩"}.mdi-snowflake-check:before{content:"󱩰"}.mdi-snowflake-melt:before{content:"󱋋"}.mdi-snowflake-off:before{content:"󱓣"}.mdi-snowflake-thermometer:before{content:"󱩱"}.mdi-snowflake-variant:before{content:"󰼪"}.mdi-snowman:before{content:"󰒷"}.mdi-snowmobile:before{content:"󰛝"}.mdi-snowshoeing:before{content:"󱩲"}.mdi-soccer:before{content:"󰒸"}.mdi-soccer-field:before{content:"󰠴"}.mdi-social-distance-2-meters:before{content:"󱕹"}.mdi-social-distance-6-feet:before{content:"󱕺"}.mdi-sofa:before{content:"󰒹"}.mdi-sofa-outline:before{content:"󱕭"}.mdi-sofa-single:before{content:"󱕮"}.mdi-sofa-single-outline:before{content:"󱕯"}.mdi-solar-panel:before{content:"󰶛"}.mdi-solar-panel-large:before{content:"󰶜"}.mdi-solar-power:before{content:"󰩲"}.mdi-solar-power-variant:before{content:"󱩳"}.mdi-solar-power-variant-outline:before{content:"󱩴"}.mdi-soldering-iron:before{content:"󱂒"}.mdi-solid:before{content:"󰚍"}.mdi-sony-playstation:before{content:"󰐔"}.mdi-sort:before{content:"󰒺"}.mdi-sort-alphabetical-ascending:before{content:"󰖽"}.mdi-sort-alphabetical-ascending-variant:before{content:"󱅈"}.mdi-sort-alphabetical-descending:before{content:"󰖿"}.mdi-sort-alphabetical-descending-variant:before{content:"󱅉"}.mdi-sort-alphabetical-variant:before{content:"󰒻"}.mdi-sort-ascending:before{content:"󰒼"}.mdi-sort-bool-ascending:before{content:"󱎅"}.mdi-sort-bool-ascending-variant:before{content:"󱎆"}.mdi-sort-bool-descending:before{content:"󱎇"}.mdi-sort-bool-descending-variant:before{content:"󱎈"}.mdi-sort-calendar-ascending:before{content:"󱕇"}.mdi-sort-calendar-descending:before{content:"󱕈"}.mdi-sort-clock-ascending:before{content:"󱕉"}.mdi-sort-clock-ascending-outline:before{content:"󱕊"}.mdi-sort-clock-descending:before{content:"󱕋"}.mdi-sort-clock-descending-outline:before{content:"󱕌"}.mdi-sort-descending:before{content:"󰒽"}.mdi-sort-numeric-ascending:before{content:"󱎉"}.mdi-sort-numeric-ascending-variant:before{content:"󰤍"}.mdi-sort-numeric-descending:before{content:"󱎊"}.mdi-sort-numeric-descending-variant:before{content:"󰫒"}.mdi-sort-numeric-variant:before{content:"󰒾"}.mdi-sort-reverse-variant:before{content:"󰌼"}.mdi-sort-variant:before{content:"󰒿"}.mdi-sort-variant-lock:before{content:"󰳍"}.mdi-sort-variant-lock-open:before{content:"󰳎"}.mdi-sort-variant-off:before{content:"󱪻"}.mdi-sort-variant-remove:before{content:"󱅇"}.mdi-soundbar:before{content:"󱟛"}.mdi-soundcloud:before{content:"󰓀"}.mdi-source-branch:before{content:"󰘬"}.mdi-source-branch-check:before{content:"󱓏"}.mdi-source-branch-minus:before{content:"󱓋"}.mdi-source-branch-plus:before{content:"󱓊"}.mdi-source-branch-refresh:before{content:"󱓍"}.mdi-source-branch-remove:before{content:"󱓌"}.mdi-source-branch-sync:before{content:"󱓎"}.mdi-source-commit:before{content:"󰜘"}.mdi-source-commit-end:before{content:"󰜙"}.mdi-source-commit-end-local:before{content:"󰜚"}.mdi-source-commit-local:before{content:"󰜛"}.mdi-source-commit-next-local:before{content:"󰜜"}.mdi-source-commit-start:before{content:"󰜝"}.mdi-source-commit-start-next-local:before{content:"󰜞"}.mdi-source-fork:before{content:"󰓁"}.mdi-source-merge:before{content:"󰘭"}.mdi-source-pull:before{content:"󰓂"}.mdi-source-repository:before{content:"󰳏"}.mdi-source-repository-multiple:before{content:"󰳐"}.mdi-soy-sauce:before{content:"󰟮"}.mdi-soy-sauce-off:before{content:"󱏼"}.mdi-spa:before{content:"󰳑"}.mdi-spa-outline:before{content:"󰳒"}.mdi-space-invaders:before{content:"󰯉"}.mdi-space-station:before{content:"󱎃"}.mdi-spade:before{content:"󰹥"}.mdi-speaker:before{content:"󰓃"}.mdi-speaker-bluetooth:before{content:"󰦢"}.mdi-speaker-message:before{content:"󱬑"}.mdi-speaker-multiple:before{content:"󰴸"}.mdi-speaker-off:before{content:"󰓄"}.mdi-speaker-pause:before{content:"󱭳"}.mdi-speaker-play:before{content:"󱭲"}.mdi-speaker-stop:before{content:"󱭴"}.mdi-speaker-wireless:before{content:"󰜟"}.mdi-spear:before{content:"󱡅"}.mdi-speedometer:before{content:"󰓅"}.mdi-speedometer-medium:before{content:"󰾅"}.mdi-speedometer-slow:before{content:"󰾆"}.mdi-spellcheck:before{content:"󰓆"}.mdi-sphere:before{content:"󱥔"}.mdi-sphere-off:before{content:"󱥕"}.mdi-spider:before{content:"󱇪"}.mdi-spider-outline:before{content:"󱱵"}.mdi-spider-thread:before{content:"󱇫"}.mdi-spider-web:before{content:"󰯊"}.mdi-spirit-level:before{content:"󱓱"}.mdi-spoon-sugar:before{content:"󱐩"}.mdi-spotify:before{content:"󰓇"}.mdi-spotlight:before{content:"󰓈"}.mdi-spotlight-beam:before{content:"󰓉"}.mdi-spray:before{content:"󰙥"}.mdi-spray-bottle:before{content:"󰫠"}.mdi-sprinkler:before{content:"󱁟"}.mdi-sprinkler-fire:before{content:"󱦝"}.mdi-sprinkler-variant:before{content:"󱁠"}.mdi-sprout:before{content:"󰹦"}.mdi-sprout-outline:before{content:"󰹧"}.mdi-square:before{content:"󰝤"}.mdi-square-circle:before{content:"󱔀"}.mdi-square-circle-outline:before{content:"󱱐"}.mdi-square-edit-outline:before{content:"󰤌"}.mdi-square-medium:before{content:"󰨓"}.mdi-square-medium-outline:before{content:"󰨔"}.mdi-square-off:before{content:"󱋮"}.mdi-square-off-outline:before{content:"󱋯"}.mdi-square-opacity:before{content:"󱡔"}.mdi-square-outline:before{content:"󰝣"}.mdi-square-root:before{content:"󰞄"}.mdi-square-root-box:before{content:"󰦣"}.mdi-square-rounded:before{content:"󱓻"}.mdi-square-rounded-badge:before{content:"󱨇"}.mdi-square-rounded-badge-outline:before{content:"󱨈"}.mdi-square-rounded-outline:before{content:"󱓼"}.mdi-square-small:before{content:"󰨕"}.mdi-square-wave:before{content:"󱑻"}.mdi-squeegee:before{content:"󰫡"}.mdi-ssh:before{content:"󰣀"}.mdi-stack-exchange:before{content:"󰘋"}.mdi-stack-overflow:before{content:"󰓌"}.mdi-stackpath:before{content:"󰍙"}.mdi-stadium:before{content:"󰿹"}.mdi-stadium-outline:before{content:"󱬃"}.mdi-stadium-variant:before{content:"󰜠"}.mdi-stairs:before{content:"󰓍"}.mdi-stairs-box:before{content:"󱎞"}.mdi-stairs-down:before{content:"󱊾"}.mdi-stairs-up:before{content:"󱊽"}.mdi-stamper:before{content:"󰴹"}.mdi-standard-definition:before{content:"󰟯"}.mdi-star:before{content:"󰓎"}.mdi-star-box:before{content:"󰩳"}.mdi-star-box-multiple:before{content:"󱊆"}.mdi-star-box-multiple-outline:before{content:"󱊇"}.mdi-star-box-outline:before{content:"󰩴"}.mdi-star-check:before{content:"󱕦"}.mdi-star-check-outline:before{content:"󱕪"}.mdi-star-circle:before{content:"󰓏"}.mdi-star-circle-outline:before{content:"󰦤"}.mdi-star-cog:before{content:"󱙨"}.mdi-star-cog-outline:before{content:"󱙩"}.mdi-star-crescent:before{content:"󰥹"}.mdi-star-david:before{content:"󰥺"}.mdi-star-face:before{content:"󰦥"}.mdi-star-four-points:before{content:"󰫢"}.mdi-star-four-points-box:before{content:"󱱑"}.mdi-star-four-points-box-outline:before{content:"󱱒"}.mdi-star-four-points-circle:before{content:"󱱓"}.mdi-star-four-points-circle-outline:before{content:"󱱔"}.mdi-star-four-points-outline:before{content:"󰫣"}.mdi-star-four-points-small:before{content:"󱱕"}.mdi-star-half:before{content:"󰉆"}.mdi-star-half-full:before{content:"󰓐"}.mdi-star-minus:before{content:"󱕤"}.mdi-star-minus-outline:before{content:"󱕨"}.mdi-star-off:before{content:"󰓑"}.mdi-star-off-outline:before{content:"󱕛"}.mdi-star-outline:before{content:"󰓒"}.mdi-star-plus:before{content:"󱕣"}.mdi-star-plus-outline:before{content:"󱕧"}.mdi-star-remove:before{content:"󱕥"}.mdi-star-remove-outline:before{content:"󱕩"}.mdi-star-settings:before{content:"󱙪"}.mdi-star-settings-outline:before{content:"󱙫"}.mdi-star-shooting:before{content:"󱝁"}.mdi-star-shooting-outline:before{content:"󱝂"}.mdi-star-three-points:before{content:"󰫤"}.mdi-star-three-points-outline:before{content:"󰫥"}.mdi-state-machine:before{content:"󱇯"}.mdi-steam:before{content:"󰓓"}.mdi-steering:before{content:"󰓔"}.mdi-steering-off:before{content:"󰤎"}.mdi-step-backward:before{content:"󰓕"}.mdi-step-backward-2:before{content:"󰓖"}.mdi-step-forward:before{content:"󰓗"}.mdi-step-forward-2:before{content:"󰓘"}.mdi-stethoscope:before{content:"󰓙"}.mdi-sticker:before{content:"󱍤"}.mdi-sticker-alert:before{content:"󱍥"}.mdi-sticker-alert-outline:before{content:"󱍦"}.mdi-sticker-check:before{content:"󱍧"}.mdi-sticker-check-outline:before{content:"󱍨"}.mdi-sticker-circle-outline:before{content:"󰗐"}.mdi-sticker-emoji:before{content:"󰞅"}.mdi-sticker-minus:before{content:"󱍩"}.mdi-sticker-minus-outline:before{content:"󱍪"}.mdi-sticker-outline:before{content:"󱍫"}.mdi-sticker-plus:before{content:"󱍬"}.mdi-sticker-plus-outline:before{content:"󱍭"}.mdi-sticker-remove:before{content:"󱍮"}.mdi-sticker-remove-outline:before{content:"󱍯"}.mdi-sticker-text:before{content:"󱞎"}.mdi-sticker-text-outline:before{content:"󱞏"}.mdi-stocking:before{content:"󰓚"}.mdi-stomach:before{content:"󱂓"}.mdi-stool:before{content:"󱥝"}.mdi-stool-outline:before{content:"󱥞"}.mdi-stop:before{content:"󰓛"}.mdi-stop-circle:before{content:"󰙦"}.mdi-stop-circle-outline:before{content:"󰙧"}.mdi-storage-tank:before{content:"󱩵"}.mdi-storage-tank-outline:before{content:"󱩶"}.mdi-store:before{content:"󰓜"}.mdi-store-24-hour:before{content:"󰓝"}.mdi-store-alert:before{content:"󱣁"}.mdi-store-alert-outline:before{content:"󱣂"}.mdi-store-check:before{content:"󱣃"}.mdi-store-check-outline:before{content:"󱣄"}.mdi-store-clock:before{content:"󱣅"}.mdi-store-clock-outline:before{content:"󱣆"}.mdi-store-cog:before{content:"󱣇"}.mdi-store-cog-outline:before{content:"󱣈"}.mdi-store-edit:before{content:"󱣉"}.mdi-store-edit-outline:before{content:"󱣊"}.mdi-store-marker:before{content:"󱣋"}.mdi-store-marker-outline:before{content:"󱣌"}.mdi-store-minus:before{content:"󱙞"}.mdi-store-minus-outline:before{content:"󱣍"}.mdi-store-off:before{content:"󱣎"}.mdi-store-off-outline:before{content:"󱣏"}.mdi-store-outline:before{content:"󱍡"}.mdi-store-plus:before{content:"󱙟"}.mdi-store-plus-outline:before{content:"󱣐"}.mdi-store-remove:before{content:"󱙠"}.mdi-store-remove-outline:before{content:"󱣑"}.mdi-store-search:before{content:"󱣒"}.mdi-store-search-outline:before{content:"󱣓"}.mdi-store-settings:before{content:"󱣔"}.mdi-store-settings-outline:before{content:"󱣕"}.mdi-storefront:before{content:"󰟇"}.mdi-storefront-check:before{content:"󱭽"}.mdi-storefront-check-outline:before{content:"󱭾"}.mdi-storefront-edit:before{content:"󱭿"}.mdi-storefront-edit-outline:before{content:"󱮀"}.mdi-storefront-minus:before{content:"󱮃"}.mdi-storefront-minus-outline:before{content:"󱮄"}.mdi-storefront-outline:before{content:"󱃁"}.mdi-storefront-plus:before{content:"󱮁"}.mdi-storefront-plus-outline:before{content:"󱮂"}.mdi-storefront-remove:before{content:"󱮅"}.mdi-storefront-remove-outline:before{content:"󱮆"}.mdi-stove:before{content:"󰓞"}.mdi-strategy:before{content:"󱇖"}.mdi-stretch-to-page:before{content:"󰼫"}.mdi-stretch-to-page-outline:before{content:"󰼬"}.mdi-string-lights:before{content:"󱊺"}.mdi-string-lights-off:before{content:"󱊻"}.mdi-subdirectory-arrow-left:before{content:"󰘌"}.mdi-subdirectory-arrow-right:before{content:"󰘍"}.mdi-submarine:before{content:"󱕬"}.mdi-subtitles:before{content:"󰨖"}.mdi-subtitles-outline:before{content:"󰨗"}.mdi-subway:before{content:"󰚬"}.mdi-subway-alert-variant:before{content:"󰶝"}.mdi-subway-variant:before{content:"󰓟"}.mdi-summit:before{content:"󰞆"}.mdi-sun-angle:before{content:"󱬧"}.mdi-sun-angle-outline:before{content:"󱬨"}.mdi-sun-clock:before{content:"󱩷"}.mdi-sun-clock-outline:before{content:"󱩸"}.mdi-sun-compass:before{content:"󱦥"}.mdi-sun-snowflake:before{content:"󱞖"}.mdi-sun-snowflake-variant:before{content:"󱩹"}.mdi-sun-thermometer:before{content:"󱣖"}.mdi-sun-thermometer-outline:before{content:"󱣗"}.mdi-sun-wireless:before{content:"󱟾"}.mdi-sun-wireless-outline:before{content:"󱟿"}.mdi-sunglasses:before{content:"󰓠"}.mdi-surfing:before{content:"󱝆"}.mdi-surround-sound:before{content:"󰗅"}.mdi-surround-sound-2-0:before{content:"󰟰"}.mdi-surround-sound-2-1:before{content:"󱜩"}.mdi-surround-sound-3-1:before{content:"󰟱"}.mdi-surround-sound-5-1:before{content:"󰟲"}.mdi-surround-sound-5-1-2:before{content:"󱜪"}.mdi-surround-sound-7-1:before{content:"󰟳"}.mdi-svg:before{content:"󰜡"}.mdi-swap-horizontal:before{content:"󰓡"}.mdi-swap-horizontal-bold:before{content:"󰯍"}.mdi-swap-horizontal-circle:before{content:"󰿡"}.mdi-swap-horizontal-circle-outline:before{content:"󰿢"}.mdi-swap-horizontal-hidden:before{content:"󱴎"}.mdi-swap-horizontal-variant:before{content:"󰣁"}.mdi-swap-vertical:before{content:"󰓢"}.mdi-swap-vertical-bold:before{content:"󰯎"}.mdi-swap-vertical-circle:before{content:"󰿣"}.mdi-swap-vertical-circle-outline:before{content:"󰿤"}.mdi-swap-vertical-variant:before{content:"󰣂"}.mdi-swim:before{content:"󰓣"}.mdi-switch:before{content:"󰓤"}.mdi-sword:before{content:"󰓥"}.mdi-sword-cross:before{content:"󰞇"}.mdi-syllabary-hangul:before{content:"󱌳"}.mdi-syllabary-hiragana:before{content:"󱌴"}.mdi-syllabary-katakana:before{content:"󱌵"}.mdi-syllabary-katakana-halfwidth:before{content:"󱌶"}.mdi-symbol:before{content:"󱔁"}.mdi-symfony:before{content:"󰫦"}.mdi-synagogue:before{content:"󱬄"}.mdi-synagogue-outline:before{content:"󱬅"}.mdi-sync:before{content:"󰓦"}.mdi-sync-alert:before{content:"󰓧"}.mdi-sync-circle:before{content:"󱍸"}.mdi-sync-off:before{content:"󰓨"}.mdi-tab:before{content:"󰓩"}.mdi-tab-minus:before{content:"󰭋"}.mdi-tab-plus:before{content:"󰝜"}.mdi-tab-remove:before{content:"󰭌"}.mdi-tab-search:before{content:"󱦞"}.mdi-tab-unselected:before{content:"󰓪"}.mdi-table:before{content:"󰓫"}.mdi-table-account:before{content:"󱎹"}.mdi-table-alert:before{content:"󱎺"}.mdi-table-arrow-down:before{content:"󱎻"}.mdi-table-arrow-left:before{content:"󱎼"}.mdi-table-arrow-right:before{content:"󱎽"}.mdi-table-arrow-up:before{content:"󱎾"}.mdi-table-border:before{content:"󰨘"}.mdi-table-cancel:before{content:"󱎿"}.mdi-table-chair:before{content:"󱁡"}.mdi-table-check:before{content:"󱏀"}.mdi-table-clock:before{content:"󱏁"}.mdi-table-cog:before{content:"󱏂"}.mdi-table-column:before{content:"󰠵"}.mdi-table-column-plus-after:before{content:"󰓬"}.mdi-table-column-plus-before:before{content:"󰓭"}.mdi-table-column-remove:before{content:"󰓮"}.mdi-table-column-width:before{content:"󰓯"}.mdi-table-edit:before{content:"󰓰"}.mdi-table-eye:before{content:"󱂔"}.mdi-table-eye-off:before{content:"󱏃"}.mdi-table-filter:before{content:"󱮌"}.mdi-table-furniture:before{content:"󰖼"}.mdi-table-headers-eye:before{content:"󱈝"}.mdi-table-headers-eye-off:before{content:"󱈞"}.mdi-table-heart:before{content:"󱏄"}.mdi-table-key:before{content:"󱏅"}.mdi-table-large:before{content:"󰓱"}.mdi-table-large-plus:before{content:"󰾇"}.mdi-table-large-remove:before{content:"󰾈"}.mdi-table-lock:before{content:"󱏆"}.mdi-table-merge-cells:before{content:"󰦦"}.mdi-table-minus:before{content:"󱏇"}.mdi-table-multiple:before{content:"󱏈"}.mdi-table-network:before{content:"󱏉"}.mdi-table-of-contents:before{content:"󰠶"}.mdi-table-off:before{content:"󱏊"}.mdi-table-picnic:before{content:"󱝃"}.mdi-table-pivot:before{content:"󱠼"}.mdi-table-plus:before{content:"󰩵"}.mdi-table-question:before{content:"󱬡"}.mdi-table-refresh:before{content:"󱎠"}.mdi-table-remove:before{content:"󰩶"}.mdi-table-row:before{content:"󰠷"}.mdi-table-row-height:before{content:"󰓲"}.mdi-table-row-plus-after:before{content:"󰓳"}.mdi-table-row-plus-before:before{content:"󰓴"}.mdi-table-row-remove:before{content:"󰓵"}.mdi-table-search:before{content:"󰤏"}.mdi-table-settings:before{content:"󰠸"}.mdi-table-split-cell:before{content:"󱐪"}.mdi-table-star:before{content:"󱏋"}.mdi-table-sync:before{content:"󱎡"}.mdi-table-tennis:before{content:"󰹨"}.mdi-tablet:before{content:"󰓶"}.mdi-tablet-cellphone:before{content:"󰦧"}.mdi-tablet-dashboard:before{content:"󰻎"}.mdi-taco:before{content:"󰝢"}.mdi-tag:before{content:"󰓹"}.mdi-tag-arrow-down:before{content:"󱜫"}.mdi-tag-arrow-down-outline:before{content:"󱜬"}.mdi-tag-arrow-left:before{content:"󱜭"}.mdi-tag-arrow-left-outline:before{content:"󱜮"}.mdi-tag-arrow-right:before{content:"󱜯"}.mdi-tag-arrow-right-outline:before{content:"󱜰"}.mdi-tag-arrow-up:before{content:"󱜱"}.mdi-tag-arrow-up-outline:before{content:"󱜲"}.mdi-tag-check:before{content:"󱩺"}.mdi-tag-check-outline:before{content:"󱩻"}.mdi-tag-edit:before{content:"󱲜"}.mdi-tag-edit-outline:before{content:"󱲝"}.mdi-tag-faces:before{content:"󰓺"}.mdi-tag-heart:before{content:"󰚋"}.mdi-tag-heart-outline:before{content:"󰯏"}.mdi-tag-hidden:before{content:"󱱶"}.mdi-tag-minus:before{content:"󰤐"}.mdi-tag-minus-outline:before{content:"󱈟"}.mdi-tag-multiple:before{content:"󰓻"}.mdi-tag-multiple-outline:before{content:"󱋷"}.mdi-tag-off:before{content:"󱈠"}.mdi-tag-off-outline:before{content:"󱈡"}.mdi-tag-outline:before{content:"󰓼"}.mdi-tag-plus:before{content:"󰜢"}.mdi-tag-plus-outline:before{content:"󱈢"}.mdi-tag-remove:before{content:"󰜣"}.mdi-tag-remove-outline:before{content:"󱈣"}.mdi-tag-search:before{content:"󱤇"}.mdi-tag-search-outline:before{content:"󱤈"}.mdi-tag-text:before{content:"󱈤"}.mdi-tag-text-outline:before{content:"󰓽"}.mdi-tailwind:before{content:"󱏿"}.mdi-tally-mark-1:before{content:"󱪼"}.mdi-tally-mark-2:before{content:"󱪽"}.mdi-tally-mark-3:before{content:"󱪾"}.mdi-tally-mark-4:before{content:"󱪿"}.mdi-tally-mark-5:before{content:"󱫀"}.mdi-tangram:before{content:"󰓸"}.mdi-tank:before{content:"󰴺"}.mdi-tanker-truck:before{content:"󰿥"}.mdi-tape-drive:before{content:"󱛟"}.mdi-tape-measure:before{content:"󰭍"}.mdi-target:before{content:"󰓾"}.mdi-target-account:before{content:"󰯐"}.mdi-target-variant:before{content:"󰩷"}.mdi-taxi:before{content:"󰓿"}.mdi-tea:before{content:"󰶞"}.mdi-tea-outline:before{content:"󰶟"}.mdi-teamviewer:before{content:"󰔀"}.mdi-teddy-bear:before{content:"󱣻"}.mdi-telescope:before{content:"󰭎"}.mdi-television:before{content:"󰔂"}.mdi-television-ambient-light:before{content:"󱍖"}.mdi-television-box:before{content:"󰠹"}.mdi-television-classic:before{content:"󰟴"}.mdi-television-classic-off:before{content:"󰠺"}.mdi-television-guide:before{content:"󰔃"}.mdi-television-off:before{content:"󰠻"}.mdi-television-pause:before{content:"󰾉"}.mdi-television-play:before{content:"󰻏"}.mdi-television-shimmer:before{content:"󱄐"}.mdi-television-speaker:before{content:"󱬛"}.mdi-television-speaker-off:before{content:"󱬜"}.mdi-television-stop:before{content:"󰾊"}.mdi-temperature-celsius:before{content:"󰔄"}.mdi-temperature-fahrenheit:before{content:"󰔅"}.mdi-temperature-kelvin:before{content:"󰔆"}.mdi-temple-buddhist:before{content:"󱬆"}.mdi-temple-buddhist-outline:before{content:"󱬇"}.mdi-temple-hindu:before{content:"󱬈"}.mdi-temple-hindu-outline:before{content:"󱬉"}.mdi-tennis:before{content:"󰶠"}.mdi-tennis-ball:before{content:"󰔇"}.mdi-tennis-ball-outline:before{content:"󱱟"}.mdi-tent:before{content:"󰔈"}.mdi-terraform:before{content:"󱁢"}.mdi-terrain:before{content:"󰔉"}.mdi-test-tube:before{content:"󰙨"}.mdi-test-tube-empty:before{content:"󰤑"}.mdi-test-tube-off:before{content:"󰤒"}.mdi-text:before{content:"󰦨"}.mdi-text-account:before{content:"󱕰"}.mdi-text-box:before{content:"󰈚"}.mdi-text-box-check:before{content:"󰺦"}.mdi-text-box-check-outline:before{content:"󰺧"}.mdi-text-box-edit:before{content:"󱩼"}.mdi-text-box-edit-outline:before{content:"󱩽"}.mdi-text-box-minus:before{content:"󰺨"}.mdi-text-box-minus-outline:before{content:"󰺩"}.mdi-text-box-multiple:before{content:"󰪷"}.mdi-text-box-multiple-outline:before{content:"󰪸"}.mdi-text-box-outline:before{content:"󰧭"}.mdi-text-box-plus:before{content:"󰺪"}.mdi-text-box-plus-outline:before{content:"󰺫"}.mdi-text-box-remove:before{content:"󰺬"}.mdi-text-box-remove-outline:before{content:"󰺭"}.mdi-text-box-search:before{content:"󰺮"}.mdi-text-box-search-outline:before{content:"󰺯"}.mdi-text-long:before{content:"󰦪"}.mdi-text-recognition:before{content:"󱄽"}.mdi-text-search:before{content:"󱎸"}.mdi-text-search-variant:before{content:"󱩾"}.mdi-text-shadow:before{content:"󰙩"}.mdi-text-short:before{content:"󰦩"}.mdi-texture:before{content:"󰔌"}.mdi-texture-box:before{content:"󰿦"}.mdi-theater:before{content:"󰔍"}.mdi-theme-light-dark:before{content:"󰔎"}.mdi-thermometer:before{content:"󰔏"}.mdi-thermometer-alert:before{content:"󰸁"}.mdi-thermometer-auto:before{content:"󱬏"}.mdi-thermometer-bluetooth:before{content:"󱢕"}.mdi-thermometer-check:before{content:"󱩿"}.mdi-thermometer-chevron-down:before{content:"󰸂"}.mdi-thermometer-chevron-up:before{content:"󰸃"}.mdi-thermometer-high:before{content:"󱃂"}.mdi-thermometer-lines:before{content:"󰔐"}.mdi-thermometer-low:before{content:"󱃃"}.mdi-thermometer-minus:before{content:"󰸄"}.mdi-thermometer-off:before{content:"󱔱"}.mdi-thermometer-plus:before{content:"󰸅"}.mdi-thermometer-probe:before{content:"󱬫"}.mdi-thermometer-probe-off:before{content:"󱬬"}.mdi-thermometer-water:before{content:"󱪀"}.mdi-thermostat:before{content:"󰎓"}.mdi-thermostat-auto:before{content:"󱬗"}.mdi-thermostat-box:before{content:"󰢑"}.mdi-thermostat-box-auto:before{content:"󱬘"}.mdi-thermostat-cog:before{content:"󱲀"}.mdi-thought-bubble:before{content:"󰟶"}.mdi-thought-bubble-outline:before{content:"󰟷"}.mdi-thumb-down:before{content:"󰔑"}.mdi-thumb-down-outline:before{content:"󰔒"}.mdi-thumb-up:before{content:"󰔓"}.mdi-thumb-up-outline:before{content:"󰔔"}.mdi-thumbs-up-down:before{content:"󰔕"}.mdi-thumbs-up-down-outline:before{content:"󱤔"}.mdi-ticket:before{content:"󰔖"}.mdi-ticket-account:before{content:"󰔗"}.mdi-ticket-confirmation:before{content:"󰔘"}.mdi-ticket-confirmation-outline:before{content:"󱎪"}.mdi-ticket-outline:before{content:"󰤓"}.mdi-ticket-percent:before{content:"󰜤"}.mdi-ticket-percent-outline:before{content:"󱐫"}.mdi-tie:before{content:"󰔙"}.mdi-tilde:before{content:"󰜥"}.mdi-tilde-off:before{content:"󱣳"}.mdi-timelapse:before{content:"󰔚"}.mdi-timeline:before{content:"󰯑"}.mdi-timeline-alert:before{content:"󰾕"}.mdi-timeline-alert-outline:before{content:"󰾘"}.mdi-timeline-check:before{content:"󱔲"}.mdi-timeline-check-outline:before{content:"󱔳"}.mdi-timeline-clock:before{content:"󱇻"}.mdi-timeline-clock-outline:before{content:"󱇼"}.mdi-timeline-minus:before{content:"󱔴"}.mdi-timeline-minus-outline:before{content:"󱔵"}.mdi-timeline-outline:before{content:"󰯒"}.mdi-timeline-plus:before{content:"󰾖"}.mdi-timeline-plus-outline:before{content:"󰾗"}.mdi-timeline-question:before{content:"󰾙"}.mdi-timeline-question-outline:before{content:"󰾚"}.mdi-timeline-remove:before{content:"󱔶"}.mdi-timeline-remove-outline:before{content:"󱔷"}.mdi-timeline-text:before{content:"󰯓"}.mdi-timeline-text-outline:before{content:"󰯔"}.mdi-timer:before{content:"󱎫"}.mdi-timer-10:before{content:"󰔜"}.mdi-timer-3:before{content:"󰔝"}.mdi-timer-alert:before{content:"󱫌"}.mdi-timer-alert-outline:before{content:"󱫍"}.mdi-timer-cancel:before{content:"󱫎"}.mdi-timer-cancel-outline:before{content:"󱫏"}.mdi-timer-check:before{content:"󱫐"}.mdi-timer-check-outline:before{content:"󱫑"}.mdi-timer-cog:before{content:"󱤥"}.mdi-timer-cog-outline:before{content:"󱤦"}.mdi-timer-edit:before{content:"󱫒"}.mdi-timer-edit-outline:before{content:"󱫓"}.mdi-timer-lock:before{content:"󱫔"}.mdi-timer-lock-open:before{content:"󱫕"}.mdi-timer-lock-open-outline:before{content:"󱫖"}.mdi-timer-lock-outline:before{content:"󱫗"}.mdi-timer-marker:before{content:"󱫘"}.mdi-timer-marker-outline:before{content:"󱫙"}.mdi-timer-minus:before{content:"󱫚"}.mdi-timer-minus-outline:before{content:"󱫛"}.mdi-timer-music:before{content:"󱫜"}.mdi-timer-music-outline:before{content:"󱫝"}.mdi-timer-off:before{content:"󱎬"}.mdi-timer-off-outline:before{content:"󰔞"}.mdi-timer-outline:before{content:"󰔛"}.mdi-timer-pause:before{content:"󱫞"}.mdi-timer-pause-outline:before{content:"󱫟"}.mdi-timer-play:before{content:"󱫠"}.mdi-timer-play-outline:before{content:"󱫡"}.mdi-timer-plus:before{content:"󱫢"}.mdi-timer-plus-outline:before{content:"󱫣"}.mdi-timer-refresh:before{content:"󱫤"}.mdi-timer-refresh-outline:before{content:"󱫥"}.mdi-timer-remove:before{content:"󱫦"}.mdi-timer-remove-outline:before{content:"󱫧"}.mdi-timer-sand:before{content:"󰔟"}.mdi-timer-sand-complete:before{content:"󱦟"}.mdi-timer-sand-empty:before{content:"󰚭"}.mdi-timer-sand-full:before{content:"󰞌"}.mdi-timer-sand-paused:before{content:"󱦠"}.mdi-timer-settings:before{content:"󱤣"}.mdi-timer-settings-outline:before{content:"󱤤"}.mdi-timer-star:before{content:"󱫨"}.mdi-timer-star-outline:before{content:"󱫩"}.mdi-timer-stop:before{content:"󱫪"}.mdi-timer-stop-outline:before{content:"󱫫"}.mdi-timer-sync:before{content:"󱫬"}.mdi-timer-sync-outline:before{content:"󱫭"}.mdi-timetable:before{content:"󰔠"}.mdi-tire:before{content:"󱢖"}.mdi-toaster:before{content:"󱁣"}.mdi-toaster-off:before{content:"󱆷"}.mdi-toaster-oven:before{content:"󰳓"}.mdi-toggle-switch:before{content:"󰔡"}.mdi-toggle-switch-off:before{content:"󰔢"}.mdi-toggle-switch-off-outline:before{content:"󰨙"}.mdi-toggle-switch-outline:before{content:"󰨚"}.mdi-toggle-switch-variant:before{content:"󱨥"}.mdi-toggle-switch-variant-off:before{content:"󱨦"}.mdi-toilet:before{content:"󰦫"}.mdi-toolbox:before{content:"󰦬"}.mdi-toolbox-outline:before{content:"󰦭"}.mdi-tools:before{content:"󱁤"}.mdi-tooltip:before{content:"󰔣"}.mdi-tooltip-account:before{content:"󰀌"}.mdi-tooltip-cellphone:before{content:"󱠻"}.mdi-tooltip-check:before{content:"󱕜"}.mdi-tooltip-check-outline:before{content:"󱕝"}.mdi-tooltip-edit:before{content:"󰔤"}.mdi-tooltip-edit-outline:before{content:"󱋅"}.mdi-tooltip-image:before{content:"󰔥"}.mdi-tooltip-image-outline:before{content:"󰯕"}.mdi-tooltip-minus:before{content:"󱕞"}.mdi-tooltip-minus-outline:before{content:"󱕟"}.mdi-tooltip-outline:before{content:"󰔦"}.mdi-tooltip-plus:before{content:"󰯖"}.mdi-tooltip-plus-outline:before{content:"󰔧"}.mdi-tooltip-question:before{content:"󱮺"}.mdi-tooltip-question-outline:before{content:"󱮻"}.mdi-tooltip-remove:before{content:"󱕠"}.mdi-tooltip-remove-outline:before{content:"󱕡"}.mdi-tooltip-text:before{content:"󰔨"}.mdi-tooltip-text-outline:before{content:"󰯗"}.mdi-tooth:before{content:"󰣃"}.mdi-tooth-outline:before{content:"󰔩"}.mdi-toothbrush:before{content:"󱄩"}.mdi-toothbrush-electric:before{content:"󱄬"}.mdi-toothbrush-paste:before{content:"󱄪"}.mdi-torch:before{content:"󱘆"}.mdi-tortoise:before{content:"󰴻"}.mdi-toslink:before{content:"󱊸"}.mdi-touch-text-outline:before{content:"󱱠"}.mdi-tournament:before{content:"󰦮"}.mdi-tow-truck:before{content:"󰠼"}.mdi-tower-beach:before{content:"󰚁"}.mdi-tower-fire:before{content:"󰚂"}.mdi-town-hall:before{content:"󱡵"}.mdi-toy-brick:before{content:"󱊈"}.mdi-toy-brick-marker:before{content:"󱊉"}.mdi-toy-brick-marker-outline:before{content:"󱊊"}.mdi-toy-brick-minus:before{content:"󱊋"}.mdi-toy-brick-minus-outline:before{content:"󱊌"}.mdi-toy-brick-outline:before{content:"󱊍"}.mdi-toy-brick-plus:before{content:"󱊎"}.mdi-toy-brick-plus-outline:before{content:"󱊏"}.mdi-toy-brick-remove:before{content:"󱊐"}.mdi-toy-brick-remove-outline:before{content:"󱊑"}.mdi-toy-brick-search:before{content:"󱊒"}.mdi-toy-brick-search-outline:before{content:"󱊓"}.mdi-track-light:before{content:"󰤔"}.mdi-track-light-off:before{content:"󱬁"}.mdi-trackpad:before{content:"󰟸"}.mdi-trackpad-lock:before{content:"󰤳"}.mdi-tractor:before{content:"󰢒"}.mdi-tractor-variant:before{content:"󱓄"}.mdi-trademark:before{content:"󰩸"}.mdi-traffic-cone:before{content:"󱍼"}.mdi-traffic-light:before{content:"󰔫"}.mdi-traffic-light-outline:before{content:"󱠪"}.mdi-train:before{content:"󰔬"}.mdi-train-bus:before{content:"󱳇"}.mdi-train-car:before{content:"󰯘"}.mdi-train-car-autorack:before{content:"󱬭"}.mdi-train-car-box:before{content:"󱬮"}.mdi-train-car-box-full:before{content:"󱬯"}.mdi-train-car-box-open:before{content:"󱬰"}.mdi-train-car-caboose:before{content:"󱬱"}.mdi-train-car-centerbeam:before{content:"󱬲"}.mdi-train-car-centerbeam-full:before{content:"󱬳"}.mdi-train-car-container:before{content:"󱬴"}.mdi-train-car-flatbed:before{content:"󱬵"}.mdi-train-car-flatbed-car:before{content:"󱬶"}.mdi-train-car-flatbed-tank:before{content:"󱬷"}.mdi-train-car-gondola:before{content:"󱬸"}.mdi-train-car-gondola-full:before{content:"󱬹"}.mdi-train-car-hopper:before{content:"󱬺"}.mdi-train-car-hopper-covered:before{content:"󱬻"}.mdi-train-car-hopper-full:before{content:"󱬼"}.mdi-train-car-intermodal:before{content:"󱬽"}.mdi-train-car-passenger:before{content:"󱜳"}.mdi-train-car-passenger-door:before{content:"󱜴"}.mdi-train-car-passenger-door-open:before{content:"󱜵"}.mdi-train-car-passenger-variant:before{content:"󱜶"}.mdi-train-car-tank:before{content:"󱬾"}.mdi-train-variant:before{content:"󰣄"}.mdi-tram:before{content:"󰔭"}.mdi-tram-side:before{content:"󰿧"}.mdi-transcribe:before{content:"󰔮"}.mdi-transcribe-close:before{content:"󰔯"}.mdi-transfer:before{content:"󱁥"}.mdi-transfer-down:before{content:"󰶡"}.mdi-transfer-left:before{content:"󰶢"}.mdi-transfer-right:before{content:"󰔰"}.mdi-transfer-up:before{content:"󰶣"}.mdi-transit-connection:before{content:"󰴼"}.mdi-transit-connection-horizontal:before{content:"󱕆"}.mdi-transit-connection-variant:before{content:"󰴽"}.mdi-transit-detour:before{content:"󰾋"}.mdi-transit-skip:before{content:"󱔕"}.mdi-transit-transfer:before{content:"󰚮"}.mdi-transition:before{content:"󰤕"}.mdi-transition-masked:before{content:"󰤖"}.mdi-translate:before{content:"󰗊"}.mdi-translate-off:before{content:"󰸆"}.mdi-translate-variant:before{content:"󱮙"}.mdi-transmission-tower:before{content:"󰴾"}.mdi-transmission-tower-export:before{content:"󱤬"}.mdi-transmission-tower-import:before{content:"󱤭"}.mdi-transmission-tower-off:before{content:"󱧝"}.mdi-trash-can:before{content:"󰩹"}.mdi-trash-can-outline:before{content:"󰩺"}.mdi-tray:before{content:"󱊔"}.mdi-tray-alert:before{content:"󱊕"}.mdi-tray-arrow-down:before{content:"󰄠"}.mdi-tray-arrow-up:before{content:"󰄝"}.mdi-tray-full:before{content:"󱊖"}.mdi-tray-minus:before{content:"󱊗"}.mdi-tray-plus:before{content:"󱊘"}.mdi-tray-remove:before{content:"󱊙"}.mdi-treasure-chest:before{content:"󰜦"}.mdi-treasure-chest-outline:before{content:"󱱷"}.mdi-tree:before{content:"󰔱"}.mdi-tree-outline:before{content:"󰹩"}.mdi-trello:before{content:"󰔲"}.mdi-trending-down:before{content:"󰔳"}.mdi-trending-neutral:before{content:"󰔴"}.mdi-trending-up:before{content:"󰔵"}.mdi-triangle:before{content:"󰔶"}.mdi-triangle-down:before{content:"󱱖"}.mdi-triangle-down-outline:before{content:"󱱗"}.mdi-triangle-outline:before{content:"󰔷"}.mdi-triangle-small-down:before{content:"󱨉"}.mdi-triangle-small-up:before{content:"󱨊"}.mdi-triangle-wave:before{content:"󱑼"}.mdi-triforce:before{content:"󰯙"}.mdi-trophy:before{content:"󰔸"}.mdi-trophy-award:before{content:"󰔹"}.mdi-trophy-broken:before{content:"󰶤"}.mdi-trophy-outline:before{content:"󰔺"}.mdi-trophy-variant:before{content:"󰔻"}.mdi-trophy-variant-outline:before{content:"󰔼"}.mdi-truck:before{content:"󰔽"}.mdi-truck-alert:before{content:"󱧞"}.mdi-truck-alert-outline:before{content:"󱧟"}.mdi-truck-cargo-container:before{content:"󱣘"}.mdi-truck-check:before{content:"󰳔"}.mdi-truck-check-outline:before{content:"󱊚"}.mdi-truck-delivery:before{content:"󰔾"}.mdi-truck-delivery-outline:before{content:"󱊛"}.mdi-truck-fast:before{content:"󰞈"}.mdi-truck-fast-outline:before{content:"󱊜"}.mdi-truck-flatbed:before{content:"󱢑"}.mdi-truck-minus:before{content:"󱦮"}.mdi-truck-minus-outline:before{content:"󱦽"}.mdi-truck-off-road:before{content:"󱲞"}.mdi-truck-off-road-off:before{content:"󱲟"}.mdi-truck-outline:before{content:"󱊝"}.mdi-truck-plus:before{content:"󱦭"}.mdi-truck-plus-outline:before{content:"󱦼"}.mdi-truck-remove:before{content:"󱦯"}.mdi-truck-remove-outline:before{content:"󱦾"}.mdi-truck-snowflake:before{content:"󱦦"}.mdi-truck-trailer:before{content:"󰜧"}.mdi-trumpet:before{content:"󱂖"}.mdi-tshirt-crew:before{content:"󰩻"}.mdi-tshirt-crew-outline:before{content:"󰔿"}.mdi-tshirt-v:before{content:"󰩼"}.mdi-tshirt-v-outline:before{content:"󰕀"}.mdi-tsunami:before{content:"󱪁"}.mdi-tumble-dryer:before{content:"󰤗"}.mdi-tumble-dryer-alert:before{content:"󱆺"}.mdi-tumble-dryer-off:before{content:"󱆻"}.mdi-tune:before{content:"󰘮"}.mdi-tune-variant:before{content:"󱕂"}.mdi-tune-vertical:before{content:"󰙪"}.mdi-tune-vertical-variant:before{content:"󱕃"}.mdi-tunnel:before{content:"󱠽"}.mdi-tunnel-outline:before{content:"󱠾"}.mdi-turbine:before{content:"󱪂"}.mdi-turkey:before{content:"󱜛"}.mdi-turnstile:before{content:"󰳕"}.mdi-turnstile-outline:before{content:"󰳖"}.mdi-turtle:before{content:"󰳗"}.mdi-twitch:before{content:"󰕃"}.mdi-twitter:before{content:"󰕄"}.mdi-two-factor-authentication:before{content:"󰦯"}.mdi-typewriter:before{content:"󰼭"}.mdi-ubisoft:before{content:"󰯚"}.mdi-ubuntu:before{content:"󰕈"}.mdi-ufo:before{content:"󱃄"}.mdi-ufo-outline:before{content:"󱃅"}.mdi-ultra-high-definition:before{content:"󰟹"}.mdi-umbraco:before{content:"󰕉"}.mdi-umbrella:before{content:"󰕊"}.mdi-umbrella-beach:before{content:"󱢊"}.mdi-umbrella-beach-outline:before{content:"󱢋"}.mdi-umbrella-closed:before{content:"󰦰"}.mdi-umbrella-closed-outline:before{content:"󱏢"}.mdi-umbrella-closed-variant:before{content:"󱏡"}.mdi-umbrella-outline:before{content:"󰕋"}.mdi-underwear-outline:before{content:"󱴏"}.mdi-undo:before{content:"󰕌"}.mdi-undo-variant:before{content:"󰕍"}.mdi-unfold-less-horizontal:before{content:"󰕎"}.mdi-unfold-less-vertical:before{content:"󰝠"}.mdi-unfold-more-horizontal:before{content:"󰕏"}.mdi-unfold-more-vertical:before{content:"󰝡"}.mdi-ungroup:before{content:"󰕐"}.mdi-unicode:before{content:"󰻐"}.mdi-unicorn:before{content:"󱗂"}.mdi-unicorn-variant:before{content:"󱗃"}.mdi-unicycle:before{content:"󱗥"}.mdi-unity:before{content:"󰚯"}.mdi-unreal:before{content:"󰦱"}.mdi-update:before{content:"󰚰"}.mdi-upload:before{content:"󰕒"}.mdi-upload-box:before{content:"󱴐"}.mdi-upload-box-outline:before{content:"󱴑"}.mdi-upload-circle:before{content:"󱴒"}.mdi-upload-circle-outline:before{content:"󱴓"}.mdi-upload-lock:before{content:"󱍳"}.mdi-upload-lock-outline:before{content:"󱍴"}.mdi-upload-multiple:before{content:"󰠽"}.mdi-upload-multiple-outline:before{content:"󱴔"}.mdi-upload-network:before{content:"󰛶"}.mdi-upload-network-outline:before{content:"󰳘"}.mdi-upload-off:before{content:"󱃆"}.mdi-upload-off-outline:before{content:"󱃇"}.mdi-upload-outline:before{content:"󰸇"}.mdi-usb:before{content:"󰕓"}.mdi-usb-c-port:before{content:"󱲿"}.mdi-usb-flash-drive:before{content:"󱊞"}.mdi-usb-flash-drive-outline:before{content:"󱊟"}.mdi-usb-port:before{content:"󱇰"}.mdi-vacuum:before{content:"󱦡"}.mdi-vacuum-outline:before{content:"󱦢"}.mdi-valve:before{content:"󱁦"}.mdi-valve-closed:before{content:"󱁧"}.mdi-valve-open:before{content:"󱁨"}.mdi-van-passenger:before{content:"󰟺"}.mdi-van-utility:before{content:"󰟻"}.mdi-vanish:before{content:"󰟼"}.mdi-vanish-quarter:before{content:"󱕔"}.mdi-vanity-light:before{content:"󱇡"}.mdi-variable:before{content:"󰫧"}.mdi-variable-box:before{content:"󱄑"}.mdi-vector-arrange-above:before{content:"󰕔"}.mdi-vector-arrange-below:before{content:"󰕕"}.mdi-vector-bezier:before{content:"󰫨"}.mdi-vector-circle:before{content:"󰕖"}.mdi-vector-circle-variant:before{content:"󰕗"}.mdi-vector-combine:before{content:"󰕘"}.mdi-vector-curve:before{content:"󰕙"}.mdi-vector-difference:before{content:"󰕚"}.mdi-vector-difference-ab:before{content:"󰕛"}.mdi-vector-difference-ba:before{content:"󰕜"}.mdi-vector-ellipse:before{content:"󰢓"}.mdi-vector-intersection:before{content:"󰕝"}.mdi-vector-line:before{content:"󰕞"}.mdi-vector-link:before{content:"󰿨"}.mdi-vector-point:before{content:"󰇄"}.mdi-vector-point-edit:before{content:"󰧨"}.mdi-vector-point-minus:before{content:"󱭸"}.mdi-vector-point-plus:before{content:"󱭹"}.mdi-vector-point-select:before{content:"󰕟"}.mdi-vector-polygon:before{content:"󰕠"}.mdi-vector-polygon-variant:before{content:"󱡖"}.mdi-vector-polyline:before{content:"󰕡"}.mdi-vector-polyline-edit:before{content:"󱈥"}.mdi-vector-polyline-minus:before{content:"󱈦"}.mdi-vector-polyline-plus:before{content:"󱈧"}.mdi-vector-polyline-remove:before{content:"󱈨"}.mdi-vector-radius:before{content:"󰝊"}.mdi-vector-rectangle:before{content:"󰗆"}.mdi-vector-selection:before{content:"󰕢"}.mdi-vector-square:before{content:"󰀁"}.mdi-vector-square-close:before{content:"󱡗"}.mdi-vector-square-edit:before{content:"󱣙"}.mdi-vector-square-minus:before{content:"󱣚"}.mdi-vector-square-open:before{content:"󱡘"}.mdi-vector-square-plus:before{content:"󱣛"}.mdi-vector-square-remove:before{content:"󱣜"}.mdi-vector-triangle:before{content:"󰕣"}.mdi-vector-union:before{content:"󰕤"}.mdi-vhs:before{content:"󰨛"}.mdi-vibrate:before{content:"󰕦"}.mdi-vibrate-off:before{content:"󰳙"}.mdi-video:before{content:"󰕧"}.mdi-video-2d:before{content:"󱨜"}.mdi-video-3d:before{content:"󰟽"}.mdi-video-3d-off:before{content:"󱏙"}.mdi-video-3d-variant:before{content:"󰻑"}.mdi-video-4k-box:before{content:"󰠾"}.mdi-video-account:before{content:"󰤙"}.mdi-video-box:before{content:"󰃽"}.mdi-video-box-off:before{content:"󰃾"}.mdi-video-check:before{content:"󱁩"}.mdi-video-check-outline:before{content:"󱁪"}.mdi-video-high-definition:before{content:"󱔮"}.mdi-video-image:before{content:"󰤚"}.mdi-video-input-antenna:before{content:"󰠿"}.mdi-video-input-component:before{content:"󰡀"}.mdi-video-input-hdmi:before{content:"󰡁"}.mdi-video-input-scart:before{content:"󰾌"}.mdi-video-input-svideo:before{content:"󰡂"}.mdi-video-marker:before{content:"󱦩"}.mdi-video-marker-outline:before{content:"󱦪"}.mdi-video-minus:before{content:"󰦲"}.mdi-video-minus-outline:before{content:"󰊺"}.mdi-video-off:before{content:"󰕨"}.mdi-video-off-outline:before{content:"󰯛"}.mdi-video-outline:before{content:"󰯜"}.mdi-video-plus:before{content:"󰦳"}.mdi-video-plus-outline:before{content:"󰇓"}.mdi-video-stabilization:before{content:"󰤛"}.mdi-video-standard-definition:before{content:"󱲠"}.mdi-video-switch:before{content:"󰕩"}.mdi-video-switch-outline:before{content:"󰞐"}.mdi-video-vintage:before{content:"󰨜"}.mdi-video-wireless:before{content:"󰻒"}.mdi-video-wireless-outline:before{content:"󰻓"}.mdi-view-agenda:before{content:"󰕪"}.mdi-view-agenda-outline:before{content:"󱇘"}.mdi-view-array:before{content:"󰕫"}.mdi-view-array-outline:before{content:"󱒅"}.mdi-view-carousel:before{content:"󰕬"}.mdi-view-carousel-outline:before{content:"󱒆"}.mdi-view-column:before{content:"󰕭"}.mdi-view-column-outline:before{content:"󱒇"}.mdi-view-comfy:before{content:"󰹪"}.mdi-view-comfy-outline:before{content:"󱒈"}.mdi-view-compact:before{content:"󰹫"}.mdi-view-compact-outline:before{content:"󰹬"}.mdi-view-dashboard:before{content:"󰕮"}.mdi-view-dashboard-edit:before{content:"󱥇"}.mdi-view-dashboard-edit-outline:before{content:"󱥈"}.mdi-view-dashboard-outline:before{content:"󰨝"}.mdi-view-dashboard-variant:before{content:"󰡃"}.mdi-view-dashboard-variant-outline:before{content:"󱒉"}.mdi-view-day:before{content:"󰕯"}.mdi-view-day-outline:before{content:"󱒊"}.mdi-view-gallery:before{content:"󱢈"}.mdi-view-gallery-outline:before{content:"󱢉"}.mdi-view-grid:before{content:"󰕰"}.mdi-view-grid-compact:before{content:"󱱡"}.mdi-view-grid-outline:before{content:"󱇙"}.mdi-view-grid-plus:before{content:"󰾍"}.mdi-view-grid-plus-outline:before{content:"󱇚"}.mdi-view-headline:before{content:"󰕱"}.mdi-view-list:before{content:"󰕲"}.mdi-view-list-outline:before{content:"󱒋"}.mdi-view-module:before{content:"󰕳"}.mdi-view-module-outline:before{content:"󱒌"}.mdi-view-parallel:before{content:"󰜨"}.mdi-view-parallel-outline:before{content:"󱒍"}.mdi-view-quilt:before{content:"󰕴"}.mdi-view-quilt-outline:before{content:"󱒎"}.mdi-view-sequential:before{content:"󰜩"}.mdi-view-sequential-outline:before{content:"󱒏"}.mdi-view-split-horizontal:before{content:"󰯋"}.mdi-view-split-vertical:before{content:"󰯌"}.mdi-view-stream:before{content:"󰕵"}.mdi-view-stream-outline:before{content:"󱒐"}.mdi-view-week:before{content:"󰕶"}.mdi-view-week-outline:before{content:"󱒑"}.mdi-vimeo:before{content:"󰕷"}.mdi-violin:before{content:"󰘏"}.mdi-virtual-reality:before{content:"󰢔"}.mdi-virus:before{content:"󱎶"}.mdi-virus-off:before{content:"󱣡"}.mdi-virus-off-outline:before{content:"󱣢"}.mdi-virus-outline:before{content:"󱎷"}.mdi-vlc:before{content:"󰕼"}.mdi-voicemail:before{content:"󰕽"}.mdi-volcano:before{content:"󱪃"}.mdi-volcano-outline:before{content:"󱪄"}.mdi-volleyball:before{content:"󰦴"}.mdi-volume-equal:before{content:"󱬐"}.mdi-volume-high:before{content:"󰕾"}.mdi-volume-low:before{content:"󰕿"}.mdi-volume-medium:before{content:"󰖀"}.mdi-volume-minus:before{content:"󰝞"}.mdi-volume-mute:before{content:"󰝟"}.mdi-volume-off:before{content:"󰖁"}.mdi-volume-plus:before{content:"󰝝"}.mdi-volume-source:before{content:"󱄠"}.mdi-volume-variant-off:before{content:"󰸈"}.mdi-volume-vibrate:before{content:"󱄡"}.mdi-vote:before{content:"󰨟"}.mdi-vote-outline:before{content:"󰨠"}.mdi-vpn:before{content:"󰖂"}.mdi-vuejs:before{content:"󰡄"}.mdi-vuetify:before{content:"󰹭"}.mdi-walk:before{content:"󰖃"}.mdi-wall:before{content:"󰟾"}.mdi-wall-fire:before{content:"󱨑"}.mdi-wall-sconce:before{content:"󰤜"}.mdi-wall-sconce-flat:before{content:"󰤝"}.mdi-wall-sconce-flat-outline:before{content:"󱟉"}.mdi-wall-sconce-flat-variant:before{content:"󰐜"}.mdi-wall-sconce-flat-variant-outline:before{content:"󱟊"}.mdi-wall-sconce-outline:before{content:"󱟋"}.mdi-wall-sconce-round:before{content:"󰝈"}.mdi-wall-sconce-round-outline:before{content:"󱟌"}.mdi-wall-sconce-round-variant:before{content:"󰤞"}.mdi-wall-sconce-round-variant-outline:before{content:"󱟍"}.mdi-wallet:before{content:"󰖄"}.mdi-wallet-bifold:before{content:"󱱘"}.mdi-wallet-bifold-outline:before{content:"󱱙"}.mdi-wallet-giftcard:before{content:"󰖅"}.mdi-wallet-membership:before{content:"󰖆"}.mdi-wallet-outline:before{content:"󰯝"}.mdi-wallet-plus:before{content:"󰾎"}.mdi-wallet-plus-outline:before{content:"󰾏"}.mdi-wallet-travel:before{content:"󰖇"}.mdi-wallpaper:before{content:"󰸉"}.mdi-wan:before{content:"󰖈"}.mdi-wardrobe:before{content:"󰾐"}.mdi-wardrobe-outline:before{content:"󰾑"}.mdi-warehouse:before{content:"󰾁"}.mdi-washing-machine:before{content:"󰜪"}.mdi-washing-machine-alert:before{content:"󱆼"}.mdi-washing-machine-off:before{content:"󱆽"}.mdi-watch:before{content:"󰖉"}.mdi-watch-export:before{content:"󰖊"}.mdi-watch-export-variant:before{content:"󰢕"}.mdi-watch-import:before{content:"󰖋"}.mdi-watch-import-variant:before{content:"󰢖"}.mdi-watch-variant:before{content:"󰢗"}.mdi-watch-vibrate:before{content:"󰚱"}.mdi-watch-vibrate-off:before{content:"󰳚"}.mdi-water:before{content:"󰖌"}.mdi-water-alert:before{content:"󱔂"}.mdi-water-alert-outline:before{content:"󱔃"}.mdi-water-boiler:before{content:"󰾒"}.mdi-water-boiler-alert:before{content:"󱆳"}.mdi-water-boiler-auto:before{content:"󱮘"}.mdi-water-boiler-off:before{content:"󱆴"}.mdi-water-check:before{content:"󱔄"}.mdi-water-check-outline:before{content:"󱔅"}.mdi-water-circle:before{content:"󱠆"}.mdi-water-minus:before{content:"󱔆"}.mdi-water-minus-outline:before{content:"󱔇"}.mdi-water-off:before{content:"󰖍"}.mdi-water-off-outline:before{content:"󱔈"}.mdi-water-opacity:before{content:"󱡕"}.mdi-water-outline:before{content:"󰸊"}.mdi-water-percent:before{content:"󰖎"}.mdi-water-percent-alert:before{content:"󱔉"}.mdi-water-plus:before{content:"󱔊"}.mdi-water-plus-outline:before{content:"󱔋"}.mdi-water-polo:before{content:"󱊠"}.mdi-water-pump:before{content:"󰖏"}.mdi-water-pump-off:before{content:"󰾓"}.mdi-water-remove:before{content:"󱔌"}.mdi-water-remove-outline:before{content:"󱔍"}.mdi-water-sync:before{content:"󱟆"}.mdi-water-thermometer:before{content:"󱪅"}.mdi-water-thermometer-outline:before{content:"󱪆"}.mdi-water-well:before{content:"󱁫"}.mdi-water-well-outline:before{content:"󱁬"}.mdi-waterfall:before{content:"󱡉"}.mdi-watering-can:before{content:"󱒁"}.mdi-watering-can-outline:before{content:"󱒂"}.mdi-watermark:before{content:"󰘒"}.mdi-wave:before{content:"󰼮"}.mdi-wave-arrow-down:before{content:"󱲰"}.mdi-wave-arrow-up:before{content:"󱲱"}.mdi-wave-undercurrent:before{content:"󱳀"}.mdi-waveform:before{content:"󱑽"}.mdi-waves:before{content:"󰞍"}.mdi-waves-arrow-left:before{content:"󱡙"}.mdi-waves-arrow-right:before{content:"󱡚"}.mdi-waves-arrow-up:before{content:"󱡛"}.mdi-waze:before{content:"󰯞"}.mdi-weather-cloudy:before{content:"󰖐"}.mdi-weather-cloudy-alert:before{content:"󰼯"}.mdi-weather-cloudy-arrow-right:before{content:"󰹮"}.mdi-weather-cloudy-clock:before{content:"󱣶"}.mdi-weather-dust:before{content:"󱭚"}.mdi-weather-fog:before{content:"󰖑"}.mdi-weather-hail:before{content:"󰖒"}.mdi-weather-hazy:before{content:"󰼰"}.mdi-weather-hurricane:before{content:"󰢘"}.mdi-weather-hurricane-outline:before{content:"󱱸"}.mdi-weather-lightning:before{content:"󰖓"}.mdi-weather-lightning-rainy:before{content:"󰙾"}.mdi-weather-moonset:before{content:"󱴕"}.mdi-weather-moonset-down:before{content:"󱴖"}.mdi-weather-moonset-up:before{content:"󱴗"}.mdi-weather-night:before{content:"󰖔"}.mdi-weather-night-partly-cloudy:before{content:"󰼱"}.mdi-weather-partly-cloudy:before{content:"󰖕"}.mdi-weather-partly-lightning:before{content:"󰼲"}.mdi-weather-partly-rainy:before{content:"󰼳"}.mdi-weather-partly-snowy:before{content:"󰼴"}.mdi-weather-partly-snowy-rainy:before{content:"󰼵"}.mdi-weather-pouring:before{content:"󰖖"}.mdi-weather-rainy:before{content:"󰖗"}.mdi-weather-snowy:before{content:"󰖘"}.mdi-weather-snowy-heavy:before{content:"󰼶"}.mdi-weather-snowy-rainy:before{content:"󰙿"}.mdi-weather-sunny:before{content:"󰖙"}.mdi-weather-sunny-alert:before{content:"󰼷"}.mdi-weather-sunny-off:before{content:"󱓤"}.mdi-weather-sunset:before{content:"󰖚"}.mdi-weather-sunset-down:before{content:"󰖛"}.mdi-weather-sunset-up:before{content:"󰖜"}.mdi-weather-tornado:before{content:"󰼸"}.mdi-weather-windy:before{content:"󰖝"}.mdi-weather-windy-variant:before{content:"󰖞"}.mdi-web:before{content:"󰖟"}.mdi-web-box:before{content:"󰾔"}.mdi-web-cancel:before{content:"󱞐"}.mdi-web-check:before{content:"󰞉"}.mdi-web-clock:before{content:"󱉊"}.mdi-web-minus:before{content:"󱂠"}.mdi-web-off:before{content:"󰪎"}.mdi-web-plus:before{content:"󰀳"}.mdi-web-refresh:before{content:"󱞑"}.mdi-web-remove:before{content:"󰕑"}.mdi-web-sync:before{content:"󱞒"}.mdi-webcam:before{content:"󰖠"}.mdi-webcam-off:before{content:"󱜷"}.mdi-webhook:before{content:"󰘯"}.mdi-webpack:before{content:"󰜫"}.mdi-webrtc:before{content:"󱉈"}.mdi-wechat:before{content:"󰘑"}.mdi-weight:before{content:"󰖡"}.mdi-weight-gram:before{content:"󰴿"}.mdi-weight-kilogram:before{content:"󰖢"}.mdi-weight-lifter:before{content:"󱅝"}.mdi-weight-pound:before{content:"󰦵"}.mdi-whatsapp:before{content:"󰖣"}.mdi-wheel-barrow:before{content:"󱓲"}.mdi-wheelchair:before{content:"󱪇"}.mdi-wheelchair-accessibility:before{content:"󰖤"}.mdi-whistle:before{content:"󰦶"}.mdi-whistle-outline:before{content:"󱊼"}.mdi-white-balance-auto:before{content:"󰖥"}.mdi-white-balance-incandescent:before{content:"󰖦"}.mdi-white-balance-iridescent:before{content:"󰖧"}.mdi-white-balance-sunny:before{content:"󰖨"}.mdi-widgets:before{content:"󰜬"}.mdi-widgets-outline:before{content:"󱍕"}.mdi-wifi:before{content:"󰖩"}.mdi-wifi-alert:before{content:"󱚵"}.mdi-wifi-arrow-down:before{content:"󱚶"}.mdi-wifi-arrow-left:before{content:"󱚷"}.mdi-wifi-arrow-left-right:before{content:"󱚸"}.mdi-wifi-arrow-right:before{content:"󱚹"}.mdi-wifi-arrow-up:before{content:"󱚺"}.mdi-wifi-arrow-up-down:before{content:"󱚻"}.mdi-wifi-cancel:before{content:"󱚼"}.mdi-wifi-check:before{content:"󱚽"}.mdi-wifi-cog:before{content:"󱚾"}.mdi-wifi-lock:before{content:"󱚿"}.mdi-wifi-lock-open:before{content:"󱛀"}.mdi-wifi-marker:before{content:"󱛁"}.mdi-wifi-minus:before{content:"󱛂"}.mdi-wifi-off:before{content:"󰖪"}.mdi-wifi-plus:before{content:"󱛃"}.mdi-wifi-refresh:before{content:"󱛄"}.mdi-wifi-remove:before{content:"󱛅"}.mdi-wifi-settings:before{content:"󱛆"}.mdi-wifi-star:before{content:"󰸋"}.mdi-wifi-strength-1:before{content:"󰤟"}.mdi-wifi-strength-1-alert:before{content:"󰤠"}.mdi-wifi-strength-1-lock:before{content:"󰤡"}.mdi-wifi-strength-1-lock-open:before{content:"󱛋"}.mdi-wifi-strength-2:before{content:"󰤢"}.mdi-wifi-strength-2-alert:before{content:"󰤣"}.mdi-wifi-strength-2-lock:before{content:"󰤤"}.mdi-wifi-strength-2-lock-open:before{content:"󱛌"}.mdi-wifi-strength-3:before{content:"󰤥"}.mdi-wifi-strength-3-alert:before{content:"󰤦"}.mdi-wifi-strength-3-lock:before{content:"󰤧"}.mdi-wifi-strength-3-lock-open:before{content:"󱛍"}.mdi-wifi-strength-4:before{content:"󰤨"}.mdi-wifi-strength-4-alert:before{content:"󰤩"}.mdi-wifi-strength-4-lock:before{content:"󰤪"}.mdi-wifi-strength-4-lock-open:before{content:"󱛎"}.mdi-wifi-strength-alert-outline:before{content:"󰤫"}.mdi-wifi-strength-lock-open-outline:before{content:"󱛏"}.mdi-wifi-strength-lock-outline:before{content:"󰤬"}.mdi-wifi-strength-off:before{content:"󰤭"}.mdi-wifi-strength-off-outline:before{content:"󰤮"}.mdi-wifi-strength-outline:before{content:"󰤯"}.mdi-wifi-sync:before{content:"󱛇"}.mdi-wikipedia:before{content:"󰖬"}.mdi-wind-power:before{content:"󱪈"}.mdi-wind-power-outline:before{content:"󱪉"}.mdi-wind-turbine:before{content:"󰶥"}.mdi-wind-turbine-alert:before{content:"󱦫"}.mdi-wind-turbine-check:before{content:"󱦬"}.mdi-window-close:before{content:"󰖭"}.mdi-window-closed:before{content:"󰖮"}.mdi-window-closed-variant:before{content:"󱇛"}.mdi-window-maximize:before{content:"󰖯"}.mdi-window-minimize:before{content:"󰖰"}.mdi-window-open:before{content:"󰖱"}.mdi-window-open-variant:before{content:"󱇜"}.mdi-window-restore:before{content:"󰖲"}.mdi-window-shutter:before{content:"󱄜"}.mdi-window-shutter-alert:before{content:"󱄝"}.mdi-window-shutter-auto:before{content:"󱮣"}.mdi-window-shutter-cog:before{content:"󱪊"}.mdi-window-shutter-open:before{content:"󱄞"}.mdi-window-shutter-settings:before{content:"󱪋"}.mdi-windsock:before{content:"󱗺"}.mdi-wiper:before{content:"󰫩"}.mdi-wiper-wash:before{content:"󰶦"}.mdi-wiper-wash-alert:before{content:"󱣟"}.mdi-wizard-hat:before{content:"󱑷"}.mdi-wordpress:before{content:"󰖴"}.mdi-wrap:before{content:"󰖶"}.mdi-wrap-disabled:before{content:"󰯟"}.mdi-wrench:before{content:"󰖷"}.mdi-wrench-check:before{content:"󱮏"}.mdi-wrench-check-outline:before{content:"󱮐"}.mdi-wrench-clock:before{content:"󱦣"}.mdi-wrench-clock-outline:before{content:"󱮓"}.mdi-wrench-cog:before{content:"󱮑"}.mdi-wrench-cog-outline:before{content:"󱮒"}.mdi-wrench-outline:before{content:"󰯠"}.mdi-xamarin:before{content:"󰡅"}.mdi-xml:before{content:"󰗀"}.mdi-xmpp:before{content:"󰟿"}.mdi-yahoo:before{content:"󰭏"}.mdi-yeast:before{content:"󰗁"}.mdi-yin-yang:before{content:"󰚀"}.mdi-yoga:before{content:"󱅼"}.mdi-youtube:before{content:"󰗃"}.mdi-youtube-gaming:before{content:"󰡈"}.mdi-youtube-studio:before{content:"󰡇"}.mdi-youtube-subscription:before{content:"󰵀"}.mdi-youtube-tv:before{content:"󰑈"}.mdi-yurt:before{content:"󱔖"}.mdi-z-wave:before{content:"󰫪"}.mdi-zend:before{content:"󰫫"}.mdi-zigbee:before{content:"󰵁"}.mdi-zip-box:before{content:"󰗄"}.mdi-zip-box-outline:before{content:"󰿺"}.mdi-zip-disk:before{content:"󰨣"}.mdi-zodiac-aquarius:before{content:"󰩽"}.mdi-zodiac-aries:before{content:"󰩾"}.mdi-zodiac-cancer:before{content:"󰩿"}.mdi-zodiac-capricorn:before{content:"󰪀"}.mdi-zodiac-gemini:before{content:"󰪁"}.mdi-zodiac-leo:before{content:"󰪂"}.mdi-zodiac-libra:before{content:"󰪃"}.mdi-zodiac-pisces:before{content:"󰪄"}.mdi-zodiac-sagittarius:before{content:"󰪅"}.mdi-zodiac-scorpio:before{content:"󰪆"}.mdi-zodiac-taurus:before{content:"󰪇"}.mdi-zodiac-virgo:before{content:"󰪈"}.mdi-blank:before{content:"";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:#0000008a}.mdi-dark.mdi-inactive:before{color:#00000042}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:#ffffff4d}.mdi-rotate-45:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mdi-rotate-90:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-135:before{-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.mdi-rotate-180:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-225:before{-webkit-transform:rotate(225deg);-ms-transform:rotate(225deg);transform:rotate(225deg)}.mdi-rotate-270:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-rotate-315:before{-webkit-transform:rotate(315deg);-ms-transform:rotate(315deg);transform:rotate(315deg)}.mdi-flip-h:before{-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.mdi-flip-v:before{-webkit-transform:scaleY(-1);transform:scaleY(-1);filter:FlipV;-ms-filter:"FlipV"}.mdi-spin:before{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.custom-combobox{background-color:#fff}.custom-combobox .v-field{min-height:28px!important;height:28px!important;border-radius:2px!important}.custom-combobox .v-field__input{min-height:28px!important;padding:4px 8px!important;font-size:.8rem!important;color:#000}.custom-combobox-readonly .v-field__append-inner{display:none!important}.custom-combobox-menu .v-list-item-title{font-size:.8rem!important}.custom-combobox-menu .v-list-item{min-height:28px!important;padding-top:4px!important;padding-bottom:4px!important;font-size:.8rem!important}.VPLocalSearchBox[data-v-ce626c7c]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-ce626c7c]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-ce626c7c]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-ce626c7c]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-ce626c7c]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-ce626c7c]{padding:0 8px}}.search-bar[data-v-ce626c7c]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-ce626c7c]{display:block;font-size:18px}.navigate-icon[data-v-ce626c7c]{display:block;font-size:14px}.search-icon[data-v-ce626c7c]{margin:8px}@media (max-width: 767px){.search-icon[data-v-ce626c7c]{display:none}}.search-input[data-v-ce626c7c]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-ce626c7c]{padding:6px 4px}}.search-actions[data-v-ce626c7c]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-ce626c7c]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-ce626c7c]{display:none}}.search-actions button[data-v-ce626c7c]{padding:8px}.search-actions button[data-v-ce626c7c]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-ce626c7c]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-ce626c7c]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-ce626c7c]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-ce626c7c]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-ce626c7c]{display:none}}.search-keyboard-shortcuts kbd[data-v-ce626c7c]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-ce626c7c]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-ce626c7c]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-ce626c7c]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-ce626c7c]{margin:8px}}.titles[data-v-ce626c7c]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-ce626c7c]{display:flex;align-items:center;gap:4px}.title.main[data-v-ce626c7c]{font-weight:500}.title-icon[data-v-ce626c7c]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-ce626c7c]{opacity:.5}.result.selected[data-v-ce626c7c]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-ce626c7c]{position:relative}.excerpt[data-v-ce626c7c]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-ce626c7c]{opacity:1}.excerpt[data-v-ce626c7c] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-ce626c7c] mark,.excerpt[data-v-ce626c7c] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-ce626c7c] .vp-code-group .tabs{display:none}.excerpt[data-v-ce626c7c] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-ce626c7c]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-ce626c7c]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-ce626c7c],.result.selected .title-icon[data-v-ce626c7c]{color:var(--vp-c-brand-1)!important}.no-results[data-v-ce626c7c]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-ce626c7c]{flex:none} diff --git a/assets/tech-stack_axios.md.DCDophae.js b/assets/tech-stack_axios.md.DCDophae.js deleted file mode 100644 index 92d0cbd..0000000 --- a/assets/tech-stack_axios.md.DCDophae.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"HTTP 클라이언트 (Axios)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/axios.md","filePath":"tech-stack/axios.md"}'),n={name:"tech-stack/axios.md"};function l(h,a,o,r,p,k){return t(),i("div",null,a[0]||(a[0]=[e(`

HTTP 클라이언트 (Axios)

개요

Axios 1.9.0을 사용하여 HTTP 통신을 처리합니다.

커스텀 인스턴스

src/CustomAxios.js에서 Axios 인스턴스를 생성하고 설정합니다.

주요 기능

  • JWT 토큰 자동 추가
  • 토큰 갱신 자동 처리
  • 요청/응답 암호화/복호화
  • 에러 처리

사용법

javascript
import axiosInstance from '@/CustomAxios.js'
-
-const response = await axiosInstance.post('/api/endpoint', params)
`,9)]))}const u=s(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/tech-stack_axios.md.DCDophae.lean.js b/assets/tech-stack_axios.md.DCDophae.lean.js deleted file mode 100644 index c10eb40..0000000 --- a/assets/tech-stack_axios.md.DCDophae.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"HTTP 클라이언트 (Axios)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/axios.md","filePath":"tech-stack/axios.md"}'),n={name:"tech-stack/axios.md"};function l(h,a,o,r,p,k){return t(),i("div",null,a[0]||(a[0]=[e("",9)]))}const u=s(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/tech-stack_axios.md.DyXqs4Dv.js b/assets/tech-stack_axios.md.DyXqs4Dv.js new file mode 100644 index 0000000..7144bd2 --- /dev/null +++ b/assets/tech-stack_axios.md.DyXqs4Dv.js @@ -0,0 +1,3 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"HTTP 클라이언트 (Axios)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/axios.md","filePath":"tech-stack/axios.md"}'),n={name:"tech-stack/axios.md"};function l(h,a,o,r,p,k){return t(),i("div",null,a[0]||(a[0]=[e(`

HTTP 클라이언트 (Axios)

개요

Axios 1.9.0을 사용하여 HTTP 통신을 처리합니다.

커스텀 인스턴스

src/CustomAxios.js에서 Axios 인스턴스를 생성하고 설정합니다.

주요 기능

  • JWT 토큰 자동 추가
  • 토큰 갱신 자동 처리
  • 요청/응답 암호화/복호화
  • 에러 처리

사용법

javascript
import axiosInstance from '@/CustomAxios.js'
+
+const response = await axiosInstance.post('/api/endpoint', params)
`,9)]))}const u=s(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/tech-stack_axios.md.DyXqs4Dv.lean.js b/assets/tech-stack_axios.md.DyXqs4Dv.lean.js new file mode 100644 index 0000000..d3e20b5 --- /dev/null +++ b/assets/tech-stack_axios.md.DyXqs4Dv.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"HTTP 클라이언트 (Axios)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/axios.md","filePath":"tech-stack/axios.md"}'),n={name:"tech-stack/axios.md"};function l(h,a,o,r,p,k){return t(),i("div",null,a[0]||(a[0]=[e("",9)]))}const u=s(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/tech-stack_charts.md.DBQGpmtD.js b/assets/tech-stack_charts.md.DBQGpmtD.js new file mode 100644 index 0000000..52fefd5 --- /dev/null +++ b/assets/tech-stack_charts.md.DBQGpmtD.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as r,aG as s}from"./chunks/framework.DytOxJW6.js";const _=JSON.parse('{"title":"차트 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/charts.md","filePath":"tech-stack/charts.md"}'),o={name:"tech-stack/charts.md"};function h(c,a,l,n,i,d){return r(),e("div",null,a[0]||(a[0]=[s('

차트 라이브러리

ApexCharts

  • 버전: 3.54.1
  • Vue 래퍼: vue3-apexcharts 1.5.2

ECharts

  • 버전: 5.6.0
  • Vue 래퍼: vue-echarts 7.0.3

사용 목적

다양한 형태의 차트를 표시하기 위해 두 가지 라이브러리를 모두 사용합니다.

',7)]))}const p=t(o,[["render",h]]);export{_ as __pageData,p as default}; diff --git a/assets/tech-stack_charts.md.DBQGpmtD.lean.js b/assets/tech-stack_charts.md.DBQGpmtD.lean.js new file mode 100644 index 0000000..f025d36 --- /dev/null +++ b/assets/tech-stack_charts.md.DBQGpmtD.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as r,aG as s}from"./chunks/framework.DytOxJW6.js";const _=JSON.parse('{"title":"차트 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/charts.md","filePath":"tech-stack/charts.md"}'),o={name:"tech-stack/charts.md"};function h(c,a,l,n,i,d){return r(),e("div",null,a[0]||(a[0]=[s("",7)]))}const p=t(o,[["render",h]]);export{_ as __pageData,p as default}; diff --git a/assets/tech-stack_charts.md.DpZhSJ3h.js b/assets/tech-stack_charts.md.DpZhSJ3h.js deleted file mode 100644 index 70e0c6a..0000000 --- a/assets/tech-stack_charts.md.DpZhSJ3h.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as r,aG as s}from"./chunks/framework.CrOSaJJH.js";const _=JSON.parse('{"title":"차트 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/charts.md","filePath":"tech-stack/charts.md"}'),o={name:"tech-stack/charts.md"};function h(c,a,l,n,i,d){return r(),e("div",null,a[0]||(a[0]=[s('

차트 라이브러리

ApexCharts

  • 버전: 3.54.1
  • Vue 래퍼: vue3-apexcharts 1.5.2

ECharts

  • 버전: 5.6.0
  • Vue 래퍼: vue-echarts 7.0.3

사용 목적

다양한 형태의 차트를 표시하기 위해 두 가지 라이브러리를 모두 사용합니다.

',7)]))}const p=t(o,[["render",h]]);export{_ as __pageData,p as default}; diff --git a/assets/tech-stack_charts.md.DpZhSJ3h.lean.js b/assets/tech-stack_charts.md.DpZhSJ3h.lean.js deleted file mode 100644 index 24a69cf..0000000 --- a/assets/tech-stack_charts.md.DpZhSJ3h.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as r,aG as s}from"./chunks/framework.CrOSaJJH.js";const _=JSON.parse('{"title":"차트 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/charts.md","filePath":"tech-stack/charts.md"}'),o={name:"tech-stack/charts.md"};function h(c,a,l,n,i,d){return r(),e("div",null,a[0]||(a[0]=[s("",7)]))}const p=t(o,[["render",h]]);export{_ as __pageData,p as default}; diff --git a/assets/tech-stack_frameworks.md.C4lVJKqg.js b/assets/tech-stack_frameworks.md.C4lVJKqg.js new file mode 100644 index 0000000..074fcfb --- /dev/null +++ b/assets/tech-stack_frameworks.md.C4lVJKqg.js @@ -0,0 +1,37 @@ +import{_ as i,c as s,o as l,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"프레임워크 및 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/frameworks.md","filePath":"tech-stack/frameworks.md"}'),e={name:"tech-stack/frameworks.md"};function n(h,a,r,p,k,o){return l(),s("div",null,a[0]||(a[0]=[t(`

프레임워크 및 라이브러리

Vue 3

버전

  • Vue: 3.5.13
  • Composition API: 사용 중

주요 특징

이 프로젝트는 Vue 3의 Composition API를 사용합니다. <script setup> 문법을 통해 더 간결하고 효율적인 코드를 작성할 수 있습니다.

사용 예제

vue
<template>
+  <div>
+    <h1>{{ title }}</h1>
+    <button @click="increment">카운트: {{ count }}</button>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+
+const title = ref('Vue 3 예제')
+const count = ref(0)
+
+const increment = () => {
+  count.value++
+}
+</script>

자동 임포트

프로젝트는 unplugin-auto-import를 사용하여 Vue의 기본 함수들(ref, computed, watch 등)을 자동으로 임포트합니다. 별도의 import 문 없이 바로 사용할 수 있습니다.

Vite

버전

  • Vite: 5.4.11

주요 기능

  • 빠른 개발 서버: HMR(Hot Module Replacement) 지원
  • 최적화된 빌드: 프로덕션 빌드 최적화
  • 플러그인 시스템: 다양한 플러그인 지원

주요 플러그인

  • @vitejs/plugin-vue: Vue 3 지원
  • @vitejs/plugin-vue-jsx: JSX 지원
  • vite-plugin-vuetify: Vuetify 지원
  • unplugin-auto-import: 자동 임포트
  • unplugin-vue-components: 자동 컴포넌트 임포트

Pinia

버전

  • Pinia: 2.3.0
  • pinia-plugin-persistedstate: 3.2.1 (상태 영속화)

특징

  • Vuex의 후속작으로 더 간단하고 타입 안전한 상태 관리
  • Composition API와 완벽한 통합
  • 상태 영속화 지원 (localStorage)

스토어 구조

javascript
// src/utils/stores/exampleStore.js
+import { defineStore } from 'pinia'
+
+export const useExampleStore = defineStore('example', {
+  state: () => ({
+    data: null,
+  }),
+  actions: {
+    setData(newData) {
+      this.data = newData
+    },
+  },
+  getters: {
+    getData: (state) => state.data,
+  },
+  persist: {
+    key: 'example',
+    storage: localStorage,
+    paths: ['data'],
+  },
+})

Vue Router

버전

  • Vue Router: 4.5.0

라우팅 구조

라우트는 src/utils/plugins/router/routes.js에 정의되어 있으며, 동적 라우팅을 지원합니다.

라우트 가드

router.beforeEach를 통해 라우트 전환 전 인증 확인 등의 작업을 수행합니다.

Axios

버전

  • Axios: 1.9.0

커스텀 인스턴스

src/CustomAxios.js에서 Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다.

주요 기능

  • JWT 토큰 자동 추가
  • 토큰 갱신 자동 처리
  • 요청/응답 암호화/복호화
  • 에러 처리

AG Grid

버전

  • ag-grid-community: 33.3.2
  • ag-grid-vue3: 33.3.2

사용 목적

대용량 데이터를 효율적으로 표시하기 위한 그리드 컴포넌트입니다.

주요 기능

  • 정렬, 필터링, 페이징
  • 셀 편집
  • 행 선택
  • 컨텍스트 메뉴

차트 라이브러리

ApexCharts

  • 버전: 3.54.1
  • vue3-apexcharts: 1.5.2

ECharts

  • 버전: 5.6.0
  • vue-echarts: 7.0.3

사용 목적

다양한 형태의 차트를 표시하기 위해 두 가지 라이브러리를 모두 사용합니다.

Excel 처리

ExcelJS

  • 버전: 4.4.0

사용 목적

Excel 파일의 읽기, 쓰기, 수정 기능을 제공합니다.

암호화

CryptoJS

  • 버전: 4.2.0

사용 목적

데이터 암호화/복호화를 위해 사용됩니다. 주로 API 요청/응답 데이터의 암호화에 사용됩니다.

기타 주요 라이브러리

파일 처리

  • file-saver: 2.0.5 - 파일 다운로드

PDF 처리

  • pdfjs-dist: 5.4.149 - PDF 렌더링
  • vue-pdf-embed: 2.1.3 - Vue PDF 컴포넌트

날짜 처리

  • vue-flatpickr-component: 11.0.5 - 날짜 선택기

드래그 앤 드롭

  • vuedraggable: 4.1.0 - 드래그 앤 드롭 기능

트리 뷰

  • vue3-tree-vue: 2.0.14 - 트리 구조 표시

다음 단계

각 기술 스택에 대한 상세한 사용법은 다음 문서를 참고하세요:

`,76)]))}const c=i(e,[["render",n]]);export{E as __pageData,c as default}; diff --git a/assets/tech-stack_frameworks.md.C4lVJKqg.lean.js b/assets/tech-stack_frameworks.md.C4lVJKqg.lean.js new file mode 100644 index 0000000..3320069 --- /dev/null +++ b/assets/tech-stack_frameworks.md.C4lVJKqg.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as l,aG as t}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"프레임워크 및 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/frameworks.md","filePath":"tech-stack/frameworks.md"}'),e={name:"tech-stack/frameworks.md"};function n(h,a,r,p,k,o){return l(),s("div",null,a[0]||(a[0]=[t("",76)]))}const c=i(e,[["render",n]]);export{E as __pageData,c as default}; diff --git a/assets/tech-stack_frameworks.md.Cx6EsRgf.js b/assets/tech-stack_frameworks.md.Cx6EsRgf.js deleted file mode 100644 index b6f8446..0000000 --- a/assets/tech-stack_frameworks.md.Cx6EsRgf.js +++ /dev/null @@ -1,37 +0,0 @@ -import{_ as i,c as s,o as l,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"프레임워크 및 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/frameworks.md","filePath":"tech-stack/frameworks.md"}'),e={name:"tech-stack/frameworks.md"};function n(h,a,r,p,k,o){return l(),s("div",null,a[0]||(a[0]=[t(`

프레임워크 및 라이브러리

Vue 3

버전

  • Vue: 3.5.13
  • Composition API: 사용 중

주요 특징

이 프로젝트는 Vue 3의 Composition API를 사용합니다. <script setup> 문법을 통해 더 간결하고 효율적인 코드를 작성할 수 있습니다.

사용 예제

vue
<template>
-  <div>
-    <h1>{{ title }}</h1>
-    <button @click="increment">카운트: {{ count }}</button>
-  </div>
-</template>
-
-<script setup>
-import { ref } from 'vue'
-
-const title = ref('Vue 3 예제')
-const count = ref(0)
-
-const increment = () => {
-  count.value++
-}
-</script>

자동 임포트

프로젝트는 unplugin-auto-import를 사용하여 Vue의 기본 함수들(ref, computed, watch 등)을 자동으로 임포트합니다. 별도의 import 문 없이 바로 사용할 수 있습니다.

Vite

버전

  • Vite: 5.4.11

주요 기능

  • 빠른 개발 서버: HMR(Hot Module Replacement) 지원
  • 최적화된 빌드: 프로덕션 빌드 최적화
  • 플러그인 시스템: 다양한 플러그인 지원

주요 플러그인

  • @vitejs/plugin-vue: Vue 3 지원
  • @vitejs/plugin-vue-jsx: JSX 지원
  • vite-plugin-vuetify: Vuetify 지원
  • unplugin-auto-import: 자동 임포트
  • unplugin-vue-components: 자동 컴포넌트 임포트

Pinia

버전

  • Pinia: 2.3.0
  • pinia-plugin-persistedstate: 3.2.1 (상태 영속화)

특징

  • Vuex의 후속작으로 더 간단하고 타입 안전한 상태 관리
  • Composition API와 완벽한 통합
  • 상태 영속화 지원 (localStorage)

스토어 구조

javascript
// src/utils/stores/exampleStore.js
-import { defineStore } from 'pinia'
-
-export const useExampleStore = defineStore('example', {
-  state: () => ({
-    data: null,
-  }),
-  actions: {
-    setData(newData) {
-      this.data = newData
-    },
-  },
-  getters: {
-    getData: (state) => state.data,
-  },
-  persist: {
-    key: 'example',
-    storage: localStorage,
-    paths: ['data'],
-  },
-})

Vue Router

버전

  • Vue Router: 4.5.0

라우팅 구조

라우트는 src/utils/plugins/router/routes.js에 정의되어 있으며, 동적 라우팅을 지원합니다.

라우트 가드

router.beforeEach를 통해 라우트 전환 전 인증 확인 등의 작업을 수행합니다.

Axios

버전

  • Axios: 1.9.0

커스텀 인스턴스

src/CustomAxios.js에서 Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다.

주요 기능

  • JWT 토큰 자동 추가
  • 토큰 갱신 자동 처리
  • 요청/응답 암호화/복호화
  • 에러 처리

AG Grid

버전

  • ag-grid-community: 33.3.2
  • ag-grid-vue3: 33.3.2

사용 목적

대용량 데이터를 효율적으로 표시하기 위한 그리드 컴포넌트입니다.

주요 기능

  • 정렬, 필터링, 페이징
  • 셀 편집
  • 행 선택
  • 컨텍스트 메뉴

차트 라이브러리

ApexCharts

  • 버전: 3.54.1
  • vue3-apexcharts: 1.5.2

ECharts

  • 버전: 5.6.0
  • vue-echarts: 7.0.3

사용 목적

다양한 형태의 차트를 표시하기 위해 두 가지 라이브러리를 모두 사용합니다.

Excel 처리

ExcelJS

  • 버전: 4.4.0

사용 목적

Excel 파일의 읽기, 쓰기, 수정 기능을 제공합니다.

암호화

CryptoJS

  • 버전: 4.2.0

사용 목적

데이터 암호화/복호화를 위해 사용됩니다. 주로 API 요청/응답 데이터의 암호화에 사용됩니다.

기타 주요 라이브러리

파일 처리

  • file-saver: 2.0.5 - 파일 다운로드

PDF 처리

  • pdfjs-dist: 5.4.149 - PDF 렌더링
  • vue-pdf-embed: 2.1.3 - Vue PDF 컴포넌트

날짜 처리

  • vue-flatpickr-component: 11.0.5 - 날짜 선택기

드래그 앤 드롭

  • vuedraggable: 4.1.0 - 드래그 앤 드롭 기능

트리 뷰

  • vue3-tree-vue: 2.0.14 - 트리 구조 표시

다음 단계

각 기술 스택에 대한 상세한 사용법은 다음 문서를 참고하세요:

`,76)]))}const c=i(e,[["render",n]]);export{E as __pageData,c as default}; diff --git a/assets/tech-stack_frameworks.md.Cx6EsRgf.lean.js b/assets/tech-stack_frameworks.md.Cx6EsRgf.lean.js deleted file mode 100644 index 3482c53..0000000 --- a/assets/tech-stack_frameworks.md.Cx6EsRgf.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as s,o as l,aG as t}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"프레임워크 및 라이브러리","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/frameworks.md","filePath":"tech-stack/frameworks.md"}'),e={name:"tech-stack/frameworks.md"};function n(h,a,r,p,k,o){return l(),s("div",null,a[0]||(a[0]=[t("",76)]))}const c=i(e,[["render",n]]);export{E as __pageData,c as default}; diff --git a/assets/tech-stack_grid.md.CTaB_UdR.js b/assets/tech-stack_grid.md.CTaB_UdR.js new file mode 100644 index 0000000..6a67d48 --- /dev/null +++ b/assets/tech-stack_grid.md.CTaB_UdR.js @@ -0,0 +1,20 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"그리드 라이브러리 (AG Grid)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/grid.md","filePath":"tech-stack/grid.md"}'),t={name:"tech-stack/grid.md"};function h(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

그리드 라이브러리 (AG Grid)

개요

AG Grid 33.3.2를 사용하여 데이터 그리드를 구현합니다.

주요 기능

  • 정렬, 필터링, 페이징
  • 셀 편집
  • 행 선택
  • 컨텍스트 메뉴

사용 예제

vue
<template>
+  <AgGridVue
+    :columnDefs="columnDefs"
+    :rowData="rowData"
+    class="ag-theme-balham"
+  />
+</template>
+
+<script setup>
+import { AgGridVue } from 'ag-grid-vue3'
+
+const columnDefs = ref([
+  { field: 'id', headerName: 'ID' },
+  { field: 'name', headerName: '이름' },
+])
+
+const rowData = ref([
+  { id: 1, name: '홍길동' },
+])
+</script>
`,7)]))}const c=i(t,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/tech-stack_grid.md.CTaB_UdR.lean.js b/assets/tech-stack_grid.md.CTaB_UdR.lean.js new file mode 100644 index 0000000..5683065 --- /dev/null +++ b/assets/tech-stack_grid.md.CTaB_UdR.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"그리드 라이브러리 (AG Grid)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/grid.md","filePath":"tech-stack/grid.md"}'),t={name:"tech-stack/grid.md"};function h(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",7)]))}const c=i(t,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/tech-stack_grid.md.CW7amus9.js b/assets/tech-stack_grid.md.CW7amus9.js deleted file mode 100644 index 6b545f4..0000000 --- a/assets/tech-stack_grid.md.CW7amus9.js +++ /dev/null @@ -1,20 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"그리드 라이브러리 (AG Grid)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/grid.md","filePath":"tech-stack/grid.md"}'),t={name:"tech-stack/grid.md"};function h(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l(`

그리드 라이브러리 (AG Grid)

개요

AG Grid 33.3.2를 사용하여 데이터 그리드를 구현합니다.

주요 기능

  • 정렬, 필터링, 페이징
  • 셀 편집
  • 행 선택
  • 컨텍스트 메뉴

사용 예제

vue
<template>
-  <AgGridVue
-    :columnDefs="columnDefs"
-    :rowData="rowData"
-    class="ag-theme-balham"
-  />
-</template>
-
-<script setup>
-import { AgGridVue } from 'ag-grid-vue3'
-
-const columnDefs = ref([
-  { field: 'id', headerName: 'ID' },
-  { field: 'name', headerName: '이름' },
-])
-
-const rowData = ref([
-  { id: 1, name: '홍길동' },
-])
-</script>
`,7)]))}const c=i(t,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/tech-stack_grid.md.CW7amus9.lean.js b/assets/tech-stack_grid.md.CW7amus9.lean.js deleted file mode 100644 index 314bcc3..0000000 --- a/assets/tech-stack_grid.md.CW7amus9.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"그리드 라이브러리 (AG Grid)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/grid.md","filePath":"tech-stack/grid.md"}'),t={name:"tech-stack/grid.md"};function h(k,s,p,e,E,r){return n(),a("div",null,s[0]||(s[0]=[l("",7)]))}const c=i(t,[["render",h]]);export{g as __pageData,c as default}; diff --git a/assets/tech-stack_pinia.md.BqPaA96Y.js b/assets/tech-stack_pinia.md.BqPaA96Y.js deleted file mode 100644 index 0f4e1b9..0000000 --- a/assets/tech-stack_pinia.md.BqPaA96Y.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as i,c as e,o as s,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"상태 관리 (Pinia)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/pinia.md","filePath":"tech-stack/pinia.md"}'),n={name:"tech-stack/pinia.md"};function l(o,a,r,h,d,p){return s(),e("div",null,a[0]||(a[0]=[t(`

상태 관리 (Pinia)

개요

프로젝트는 Pinia를 사용하여 상태를 관리합니다.

주요 스토어

  • authStore: 인증 상태
  • loadingStore: 로딩 상태
  • menuStore: 메뉴 정보
  • sessionStore: 세션 데이터
  • modalStore: 모달 상태
  • tabStore: 탭 상태

사용법

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
-
-const authStore = useAuthStore()

상태 영속화

pinia-plugin-persistedstate를 사용하여 상태를 localStorage에 저장합니다.

`,9)]))}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/tech-stack_pinia.md.BqPaA96Y.lean.js b/assets/tech-stack_pinia.md.BqPaA96Y.lean.js deleted file mode 100644 index b530a84..0000000 --- a/assets/tech-stack_pinia.md.BqPaA96Y.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as e,o as s,aG as t}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"상태 관리 (Pinia)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/pinia.md","filePath":"tech-stack/pinia.md"}'),n={name:"tech-stack/pinia.md"};function l(o,a,r,h,d,p){return s(),e("div",null,a[0]||(a[0]=[t("",9)]))}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/tech-stack_pinia.md.CqczpNcB.js b/assets/tech-stack_pinia.md.CqczpNcB.js new file mode 100644 index 0000000..59361ec --- /dev/null +++ b/assets/tech-stack_pinia.md.CqczpNcB.js @@ -0,0 +1,3 @@ +import{_ as i,c as e,o as s,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"상태 관리 (Pinia)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/pinia.md","filePath":"tech-stack/pinia.md"}'),n={name:"tech-stack/pinia.md"};function l(o,a,r,h,d,p){return s(),e("div",null,a[0]||(a[0]=[t(`

상태 관리 (Pinia)

개요

프로젝트는 Pinia를 사용하여 상태를 관리합니다.

주요 스토어

  • authStore: 인증 상태
  • loadingStore: 로딩 상태
  • menuStore: 메뉴 정보
  • sessionStore: 세션 데이터
  • modalStore: 모달 상태
  • tabStore: 탭 상태

사용법

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
+
+const authStore = useAuthStore()

상태 영속화

pinia-plugin-persistedstate를 사용하여 상태를 localStorage에 저장합니다.

`,9)]))}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/tech-stack_pinia.md.CqczpNcB.lean.js b/assets/tech-stack_pinia.md.CqczpNcB.lean.js new file mode 100644 index 0000000..306ea4f --- /dev/null +++ b/assets/tech-stack_pinia.md.CqczpNcB.lean.js @@ -0,0 +1 @@ +import{_ as i,c as e,o as s,aG as t}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"상태 관리 (Pinia)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/pinia.md","filePath":"tech-stack/pinia.md"}'),n={name:"tech-stack/pinia.md"};function l(o,a,r,h,d,p){return s(),e("div",null,a[0]||(a[0]=[t("",9)]))}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/tech-stack_router.md.DcxxchZX.js b/assets/tech-stack_router.md.DcxxchZX.js deleted file mode 100644 index 35ce6c7..0000000 --- a/assets/tech-stack_router.md.DcxxchZX.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as t,o as r,aG as o}from"./chunks/framework.CrOSaJJH.js";const _=JSON.parse('{"title":"라우팅 (Vue Router)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/router.md","filePath":"tech-stack/router.md"}'),u={name:"tech-stack/router.md"};function c(s,e,i,n,h,l){return r(),t("div",null,e[0]||(e[0]=[o('

라우팅 (Vue Router)

개요

Vue Router 4.5.0을 사용하여 라우팅을 관리합니다.

라우트 정의

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

동적 라우팅

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다.

라우트 가드

router.beforeEach를 통해 라우트 전환 전 인증 확인 등을 수행합니다.

',9)]))}const p=a(u,[["render",c]]);export{_ as __pageData,p as default}; diff --git a/assets/tech-stack_router.md.DcxxchZX.lean.js b/assets/tech-stack_router.md.DcxxchZX.lean.js deleted file mode 100644 index 7402c30..0000000 --- a/assets/tech-stack_router.md.DcxxchZX.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as t,o as r,aG as o}from"./chunks/framework.CrOSaJJH.js";const _=JSON.parse('{"title":"라우팅 (Vue Router)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/router.md","filePath":"tech-stack/router.md"}'),u={name:"tech-stack/router.md"};function c(s,e,i,n,h,l){return r(),t("div",null,e[0]||(e[0]=[o("",9)]))}const p=a(u,[["render",c]]);export{_ as __pageData,p as default}; diff --git a/assets/tech-stack_router.md.Onfe4Ent.js b/assets/tech-stack_router.md.Onfe4Ent.js new file mode 100644 index 0000000..fc5964c --- /dev/null +++ b/assets/tech-stack_router.md.Onfe4Ent.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as r,aG as o}from"./chunks/framework.DytOxJW6.js";const _=JSON.parse('{"title":"라우팅 (Vue Router)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/router.md","filePath":"tech-stack/router.md"}'),u={name:"tech-stack/router.md"};function c(s,e,i,n,h,l){return r(),t("div",null,e[0]||(e[0]=[o('

라우팅 (Vue Router)

개요

Vue Router 4.5.0을 사용하여 라우팅을 관리합니다.

라우트 정의

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

동적 라우팅

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다.

라우트 가드

router.beforeEach를 통해 라우트 전환 전 인증 확인 등을 수행합니다.

',9)]))}const p=a(u,[["render",c]]);export{_ as __pageData,p as default}; diff --git a/assets/tech-stack_router.md.Onfe4Ent.lean.js b/assets/tech-stack_router.md.Onfe4Ent.lean.js new file mode 100644 index 0000000..14e9faa --- /dev/null +++ b/assets/tech-stack_router.md.Onfe4Ent.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as r,aG as o}from"./chunks/framework.DytOxJW6.js";const _=JSON.parse('{"title":"라우팅 (Vue Router)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/router.md","filePath":"tech-stack/router.md"}'),u={name:"tech-stack/router.md"};function c(s,e,i,n,h,l){return r(),t("div",null,e[0]||(e[0]=[o("",9)]))}const p=a(u,[["render",c]]);export{_ as __pageData,p as default}; diff --git a/assets/tech-stack_utilities.md.Dt4bFryL.js b/assets/tech-stack_utilities.md.Dt4bFryL.js new file mode 100644 index 0000000..a22c313 --- /dev/null +++ b/assets/tech-stack_utilities.md.Dt4bFryL.js @@ -0,0 +1 @@ +import{_ as e,c as l,o as t,aG as i}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"기타 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/utilities.md","filePath":"tech-stack/utilities.md"}'),r={name:"tech-stack/utilities.md"};function o(s,a,n,h,u,c){return t(),l("div",null,a[0]||(a[0]=[i('

기타 유틸리티

Excel 처리

  • ExcelJS: 4.4.0
  • Excel 파일 읽기, 쓰기, 수정

암호화

  • CryptoJS: 4.2.0
  • 데이터 암호화/복호화

파일 처리

  • file-saver: 2.0.5
  • 파일 다운로드

PDF 처리

  • pdfjs-dist: 5.4.149
  • vue-pdf-embed: 2.1.3
  • PDF 렌더링

날짜 처리

  • vue-flatpickr-component: 11.0.5
  • 날짜 선택기

드래그 앤 드롭

  • vuedraggable: 4.1.0
  • 드래그 앤 드롭 기능

트리 뷰

  • vue3-tree-vue: 2.0.14
  • 트리 구조 표시
',15)]))}const _=e(r,[["render",o]]);export{f as __pageData,_ as default}; diff --git a/assets/tech-stack_utilities.md.Dt4bFryL.lean.js b/assets/tech-stack_utilities.md.Dt4bFryL.lean.js new file mode 100644 index 0000000..db834fe --- /dev/null +++ b/assets/tech-stack_utilities.md.Dt4bFryL.lean.js @@ -0,0 +1 @@ +import{_ as e,c as l,o as t,aG as i}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"기타 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/utilities.md","filePath":"tech-stack/utilities.md"}'),r={name:"tech-stack/utilities.md"};function o(s,a,n,h,u,c){return t(),l("div",null,a[0]||(a[0]=[i("",15)]))}const _=e(r,[["render",o]]);export{f as __pageData,_ as default}; diff --git a/assets/tech-stack_utilities.md.aD8q4_8H.js b/assets/tech-stack_utilities.md.aD8q4_8H.js deleted file mode 100644 index 6b98075..0000000 --- a/assets/tech-stack_utilities.md.aD8q4_8H.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as l,o as t,aG as i}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"기타 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/utilities.md","filePath":"tech-stack/utilities.md"}'),r={name:"tech-stack/utilities.md"};function o(s,a,n,h,u,c){return t(),l("div",null,a[0]||(a[0]=[i('

기타 유틸리티

Excel 처리

  • ExcelJS: 4.4.0
  • Excel 파일 읽기, 쓰기, 수정

암호화

  • CryptoJS: 4.2.0
  • 데이터 암호화/복호화

파일 처리

  • file-saver: 2.0.5
  • 파일 다운로드

PDF 처리

  • pdfjs-dist: 5.4.149
  • vue-pdf-embed: 2.1.3
  • PDF 렌더링

날짜 처리

  • vue-flatpickr-component: 11.0.5
  • 날짜 선택기

드래그 앤 드롭

  • vuedraggable: 4.1.0
  • 드래그 앤 드롭 기능

트리 뷰

  • vue3-tree-vue: 2.0.14
  • 트리 구조 표시
',15)]))}const _=e(r,[["render",o]]);export{f as __pageData,_ as default}; diff --git a/assets/tech-stack_utilities.md.aD8q4_8H.lean.js b/assets/tech-stack_utilities.md.aD8q4_8H.lean.js deleted file mode 100644 index 8b6235f..0000000 --- a/assets/tech-stack_utilities.md.aD8q4_8H.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as l,o as t,aG as i}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"기타 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/utilities.md","filePath":"tech-stack/utilities.md"}'),r={name:"tech-stack/utilities.md"};function o(s,a,n,h,u,c){return t(),l("div",null,a[0]||(a[0]=[i("",15)]))}const _=e(r,[["render",o]]);export{f as __pageData,_ as default}; diff --git a/assets/tech-stack_vuetify.md.BiSO6ll2.js b/assets/tech-stack_vuetify.md.BiSO6ll2.js new file mode 100644 index 0000000..0355671 --- /dev/null +++ b/assets/tech-stack_vuetify.md.BiSO6ll2.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as i,aG as o}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"UI 프레임워크 (Vuetify)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/vuetify.md","filePath":"tech-stack/vuetify.md"}'),r={name:"tech-stack/vuetify.md"};function l(c,e,d,n,h,s){return i(),t("div",null,e[0]||(e[0]=[o('

UI 프레임워크 (Vuetify)

개요

프로젝트는 Vuetify 3.7.5를 UI 프레임워크로 사용합니다.

주요 컴포넌트

  • v-card: 카드
  • v-btn: 버튼
  • v-text-field: 텍스트 입력
  • v-select: 선택
  • v-data-table: 테이블

테마

기본 테마는 'light'이며, 'dark' 테마도 지원합니다.

로케일

한국어(ko) 로케일이 기본으로 설정되어 있습니다.

',9)]))}const _=a(r,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/assets/tech-stack_vuetify.md.BiSO6ll2.lean.js b/assets/tech-stack_vuetify.md.BiSO6ll2.lean.js new file mode 100644 index 0000000..f36e0e6 --- /dev/null +++ b/assets/tech-stack_vuetify.md.BiSO6ll2.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as i,aG as o}from"./chunks/framework.DytOxJW6.js";const f=JSON.parse('{"title":"UI 프레임워크 (Vuetify)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/vuetify.md","filePath":"tech-stack/vuetify.md"}'),r={name:"tech-stack/vuetify.md"};function l(c,e,d,n,h,s){return i(),t("div",null,e[0]||(e[0]=[o("",9)]))}const _=a(r,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/assets/tech-stack_vuetify.md.DI-HcrLA.js b/assets/tech-stack_vuetify.md.DI-HcrLA.js deleted file mode 100644 index 3f42ac8..0000000 --- a/assets/tech-stack_vuetify.md.DI-HcrLA.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as t,o as i,aG as o}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"UI 프레임워크 (Vuetify)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/vuetify.md","filePath":"tech-stack/vuetify.md"}'),r={name:"tech-stack/vuetify.md"};function l(c,e,d,n,h,s){return i(),t("div",null,e[0]||(e[0]=[o('

UI 프레임워크 (Vuetify)

개요

프로젝트는 Vuetify 3.7.5를 UI 프레임워크로 사용합니다.

주요 컴포넌트

  • v-card: 카드
  • v-btn: 버튼
  • v-text-field: 텍스트 입력
  • v-select: 선택
  • v-data-table: 테이블

테마

기본 테마는 'light'이며, 'dark' 테마도 지원합니다.

로케일

한국어(ko) 로케일이 기본으로 설정되어 있습니다.

',9)]))}const _=a(r,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/assets/tech-stack_vuetify.md.DI-HcrLA.lean.js b/assets/tech-stack_vuetify.md.DI-HcrLA.lean.js deleted file mode 100644 index 995042b..0000000 --- a/assets/tech-stack_vuetify.md.DI-HcrLA.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as t,o as i,aG as o}from"./chunks/framework.CrOSaJJH.js";const f=JSON.parse('{"title":"UI 프레임워크 (Vuetify)","description":"","frontmatter":{},"headers":[],"relativePath":"tech-stack/vuetify.md","filePath":"tech-stack/vuetify.md"}'),r={name:"tech-stack/vuetify.md"};function l(c,e,d,n,h,s){return i(),t("div",null,e[0]||(e[0]=[o("",9)]))}const _=a(r,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/assets/testing_component-test.md.DBDqn2PZ.js b/assets/testing_component-test.md.DBDqn2PZ.js deleted file mode 100644 index b64ff76..0000000 --- a/assets/testing_component-test.md.DBDqn2PZ.js +++ /dev/null @@ -1,28 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"컴포넌트 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/component-test.md","filePath":"testing/component-test.md"}'),t={name:"testing/component-test.md"};function p(k,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

컴포넌트 테스트

개요

Vue 컴포넌트 테스트 가이드입니다.

테스트 예제

javascript
import { mount } from '@vue/test-utils'
-import MyComponent from '@/views/MyComponent.vue'
-
-describe('MyComponent', () => {
-  it('should render correctly', () => {
-    const wrapper = mount(MyComponent)
-    expect(wrapper.text()).toContain('Hello')
-  })
-  
-  it('should handle click event', async () => {
-    const wrapper = mount(MyComponent)
-    await wrapper.find('button').trigger('click')
-    expect(wrapper.emitted('click')).toBeTruthy()
-  })
-})

스토어 통합 테스트

javascript
import { mount } from '@vue/test-utils'
-import { createPinia, setActivePinia } from 'pinia'
-import MyComponent from '@/views/MyComponent.vue'
-
-describe('MyComponent with store', () => {
-  beforeEach(() => {
-    setActivePinia(createPinia())
-  })
-  
-  it('should use store', () => {
-    const wrapper = mount(MyComponent)
-    // 스토어 사용 테스트
-  })
-})
`,7)]))}const y=i(t,[["render",p]]);export{g as __pageData,y as default}; diff --git a/assets/testing_component-test.md.DBDqn2PZ.lean.js b/assets/testing_component-test.md.DBDqn2PZ.lean.js deleted file mode 100644 index ca4061c..0000000 --- a/assets/testing_component-test.md.DBDqn2PZ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"컴포넌트 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/component-test.md","filePath":"testing/component-test.md"}'),t={name:"testing/component-test.md"};function p(k,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",7)]))}const y=i(t,[["render",p]]);export{g as __pageData,y as default}; diff --git a/assets/testing_component-test.md.JuJ8goX2.js b/assets/testing_component-test.md.JuJ8goX2.js new file mode 100644 index 0000000..5b84e06 --- /dev/null +++ b/assets/testing_component-test.md.JuJ8goX2.js @@ -0,0 +1,28 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"컴포넌트 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/component-test.md","filePath":"testing/component-test.md"}'),t={name:"testing/component-test.md"};function p(k,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h(`

컴포넌트 테스트

개요

Vue 컴포넌트 테스트 가이드입니다.

테스트 예제

javascript
import { mount } from '@vue/test-utils'
+import MyComponent from '@/views/MyComponent.vue'
+
+describe('MyComponent', () => {
+  it('should render correctly', () => {
+    const wrapper = mount(MyComponent)
+    expect(wrapper.text()).toContain('Hello')
+  })
+  
+  it('should handle click event', async () => {
+    const wrapper = mount(MyComponent)
+    await wrapper.find('button').trigger('click')
+    expect(wrapper.emitted('click')).toBeTruthy()
+  })
+})

스토어 통합 테스트

javascript
import { mount } from '@vue/test-utils'
+import { createPinia, setActivePinia } from 'pinia'
+import MyComponent from '@/views/MyComponent.vue'
+
+describe('MyComponent with store', () => {
+  beforeEach(() => {
+    setActivePinia(createPinia())
+  })
+  
+  it('should use store', () => {
+    const wrapper = mount(MyComponent)
+    // 스토어 사용 테스트
+  })
+})
`,7)]))}const y=i(t,[["render",p]]);export{g as __pageData,y as default}; diff --git a/assets/testing_component-test.md.JuJ8goX2.lean.js b/assets/testing_component-test.md.JuJ8goX2.lean.js new file mode 100644 index 0000000..86ee4b2 --- /dev/null +++ b/assets/testing_component-test.md.JuJ8goX2.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"컴포넌트 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/component-test.md","filePath":"testing/component-test.md"}'),t={name:"testing/component-test.md"};function p(k,s,l,e,E,r){return n(),a("div",null,s[0]||(s[0]=[h("",7)]))}const y=i(t,[["render",p]]);export{g as __pageData,y as default}; diff --git a/assets/testing_e2e-test.md.BshYbzpB.js b/assets/testing_e2e-test.md.BshYbzpB.js new file mode 100644 index 0000000..f0827e3 --- /dev/null +++ b/assets/testing_e2e-test.md.BshYbzpB.js @@ -0,0 +1,9 @@ +import{_ as i,c as a,o as t,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"E2E 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/e2e-test.md","filePath":"testing/e2e-test.md"}'),n={name:"testing/e2e-test.md"};function l(e,s,k,p,E,r){return t(),a("div",null,s[0]||(s[0]=[h(`

E2E 테스트

개요

End-to-End 테스트 가이드입니다.

테스트 프레임워크

권장 E2E 테스트 프레임워크:

  • Playwright
  • Cypress

테스트 예제

javascript
import { test, expect } from '@playwright/test'
+
+test('should login successfully', async ({ page }) => {
+  await page.goto('http://localhost:5173')
+  await page.fill('#userId', 'user123')
+  await page.fill('#password', 'password')
+  await page.click('button[type="submit"]')
+  await expect(page).toHaveURL(/.*Main/)
+})

테스트 실행

bash
npm run test:e2e
`,10)]))}const o=i(n,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/testing_e2e-test.md.BshYbzpB.lean.js b/assets/testing_e2e-test.md.BshYbzpB.lean.js new file mode 100644 index 0000000..9d2f5be --- /dev/null +++ b/assets/testing_e2e-test.md.BshYbzpB.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"E2E 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/e2e-test.md","filePath":"testing/e2e-test.md"}'),n={name:"testing/e2e-test.md"};function l(e,s,k,p,E,r){return t(),a("div",null,s[0]||(s[0]=[h("",10)]))}const o=i(n,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/testing_e2e-test.md.DrVnKCZ6.js b/assets/testing_e2e-test.md.DrVnKCZ6.js deleted file mode 100644 index 8583962..0000000 --- a/assets/testing_e2e-test.md.DrVnKCZ6.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as i,c as a,o as t,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"E2E 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/e2e-test.md","filePath":"testing/e2e-test.md"}'),n={name:"testing/e2e-test.md"};function l(e,s,k,p,E,r){return t(),a("div",null,s[0]||(s[0]=[h(`

E2E 테스트

개요

End-to-End 테스트 가이드입니다.

테스트 프레임워크

권장 E2E 테스트 프레임워크:

  • Playwright
  • Cypress

테스트 예제

javascript
import { test, expect } from '@playwright/test'
-
-test('should login successfully', async ({ page }) => {
-  await page.goto('http://localhost:5173')
-  await page.fill('#userId', 'user123')
-  await page.fill('#password', 'password')
-  await page.click('button[type="submit"]')
-  await expect(page).toHaveURL(/.*Main/)
-})

테스트 실행

bash
npm run test:e2e
`,10)]))}const o=i(n,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/testing_e2e-test.md.DrVnKCZ6.lean.js b/assets/testing_e2e-test.md.DrVnKCZ6.lean.js deleted file mode 100644 index 18502db..0000000 --- a/assets/testing_e2e-test.md.DrVnKCZ6.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"E2E 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/e2e-test.md","filePath":"testing/e2e-test.md"}'),n={name:"testing/e2e-test.md"};function l(e,s,k,p,E,r){return t(),a("div",null,s[0]||(s[0]=[h("",10)]))}const o=i(n,[["render",l]]);export{g as __pageData,o as default}; diff --git a/assets/testing_unit-test.md.Cf1AIAU0.js b/assets/testing_unit-test.md.Cf1AIAU0.js new file mode 100644 index 0000000..ee3eec0 --- /dev/null +++ b/assets/testing_unit-test.md.Cf1AIAU0.js @@ -0,0 +1,28 @@ +import{_ as i,c as a,o as h,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"단위 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/unit-test.md","filePath":"testing/unit-test.md"}'),t={name:"testing/unit-test.md"};function k(l,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

단위 테스트

개요

프로젝트의 단위 테스트 가이드입니다.

테스트 프레임워크

권장 테스트 프레임워크:

  • Vitest
  • Vue Test Utils

유틸리티 함수 테스트

javascript
import { describe, it, expect } from 'vitest'
+import { gfIsEmpty, gfNvl } from '@/utils/common/common.js'
+
+describe('common.js', () => {
+  it('should check if value is empty', () => {
+    expect(gfIsEmpty('')).toBe(true)
+    expect(gfIsEmpty(null)).toBe(true)
+    expect(gfIsEmpty('text')).toBe(false)
+  })
+  
+  it('should return default value for null', () => {
+    expect(gfNvl(null, 'default')).toBe('default')
+    expect(gfNvl('value', 'default')).toBe('value')
+  })
+})

스토어 테스트

javascript
import { setActivePinia, createPinia } from 'pinia'
+import { useAuthStore } from '@/utils/stores/authStore.js'
+
+describe('authStore', () => {
+  beforeEach(() => {
+    setActivePinia(createPinia())
+  })
+  
+  it('should set access token', () => {
+    const store = useAuthStore()
+    store.setAccessToken('token123')
+    expect(store.accessToken).toBe('token123')
+  })
+})

테스트 실행

bash
npm run test
`,12)]))}const y=i(t,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/testing_unit-test.md.Cf1AIAU0.lean.js b/assets/testing_unit-test.md.Cf1AIAU0.lean.js new file mode 100644 index 0000000..039553e --- /dev/null +++ b/assets/testing_unit-test.md.Cf1AIAU0.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as h,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"단위 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/unit-test.md","filePath":"testing/unit-test.md"}'),t={name:"testing/unit-test.md"};function k(l,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n("",12)]))}const y=i(t,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/testing_unit-test.md.YPwp2OVV.js b/assets/testing_unit-test.md.YPwp2OVV.js deleted file mode 100644 index 55abce9..0000000 --- a/assets/testing_unit-test.md.YPwp2OVV.js +++ /dev/null @@ -1,28 +0,0 @@ -import{_ as i,c as a,o as h,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"단위 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/unit-test.md","filePath":"testing/unit-test.md"}'),t={name:"testing/unit-test.md"};function k(l,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

단위 테스트

개요

프로젝트의 단위 테스트 가이드입니다.

테스트 프레임워크

권장 테스트 프레임워크:

  • Vitest
  • Vue Test Utils

유틸리티 함수 테스트

javascript
import { describe, it, expect } from 'vitest'
-import { gfIsEmpty, gfNvl } from '@/utils/common/common.js'
-
-describe('common.js', () => {
-  it('should check if value is empty', () => {
-    expect(gfIsEmpty('')).toBe(true)
-    expect(gfIsEmpty(null)).toBe(true)
-    expect(gfIsEmpty('text')).toBe(false)
-  })
-  
-  it('should return default value for null', () => {
-    expect(gfNvl(null, 'default')).toBe('default')
-    expect(gfNvl('value', 'default')).toBe('value')
-  })
-})

스토어 테스트

javascript
import { setActivePinia, createPinia } from 'pinia'
-import { useAuthStore } from '@/utils/stores/authStore.js'
-
-describe('authStore', () => {
-  beforeEach(() => {
-    setActivePinia(createPinia())
-  })
-  
-  it('should set access token', () => {
-    const store = useAuthStore()
-    store.setAccessToken('token123')
-    expect(store.accessToken).toBe('token123')
-  })
-})

테스트 실행

bash
npm run test
`,12)]))}const y=i(t,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/testing_unit-test.md.YPwp2OVV.lean.js b/assets/testing_unit-test.md.YPwp2OVV.lean.js deleted file mode 100644 index 60c74e4..0000000 --- a/assets/testing_unit-test.md.YPwp2OVV.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as h,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"단위 테스트","description":"","frontmatter":{},"headers":[],"relativePath":"testing/unit-test.md","filePath":"testing/unit-test.md"}'),t={name:"testing/unit-test.md"};function k(l,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n("",12)]))}const y=i(t,[["render",k]]);export{g as __pageData,y as default}; diff --git a/assets/troubleshooting_api-issues.md.BAW6UpbV.js b/assets/troubleshooting_api-issues.md.BAW6UpbV.js deleted file mode 100644 index 80af8d3..0000000 --- a/assets/troubleshooting_api-issues.md.BAW6UpbV.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o,c as t,o as e,aG as r}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"API 통신 문제","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/api-issues.md","filePath":"troubleshooting/api-issues.md"}'),s={name:"troubleshooting/api-issues.md"};function i(l,a,n,p,h,c){return e(),t("div",null,a[0]||(a[0]=[r('

API 통신 문제

CORS 오류

문제: CORS policy 오류

해결:

  1. 백엔드 CORS 설정 확인
  2. 프록시 설정 확인

타임아웃

문제: 요청 타임아웃

해결:

  1. 서버 응답 시간 확인
  2. 타임아웃 시간 조정 (현재 300초)

429 에러

문제: Too Many Requests

해결: 요청 빈도를 줄이세요. 429 에러 발생 시 자동으로 로그인 페이지로 이동합니다.

암호화 오류

문제: 암호화/복호화 실패

해결:

  1. 암호화 설정 확인
  2. 키 확인
  3. 데이터 형식 확인
',16)]))}const _=o(s,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/troubleshooting_api-issues.md.BAW6UpbV.lean.js b/assets/troubleshooting_api-issues.md.BAW6UpbV.lean.js deleted file mode 100644 index b51e913..0000000 --- a/assets/troubleshooting_api-issues.md.BAW6UpbV.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o,c as t,o as e,aG as r}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"API 통신 문제","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/api-issues.md","filePath":"troubleshooting/api-issues.md"}'),s={name:"troubleshooting/api-issues.md"};function i(l,a,n,p,h,c){return e(),t("div",null,a[0]||(a[0]=[r("",16)]))}const _=o(s,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/troubleshooting_api-issues.md.ChjIgCp0.js b/assets/troubleshooting_api-issues.md.ChjIgCp0.js new file mode 100644 index 0000000..76f9d71 --- /dev/null +++ b/assets/troubleshooting_api-issues.md.ChjIgCp0.js @@ -0,0 +1 @@ +import{_ as o,c as t,o as e,aG as r}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"API 통신 문제","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/api-issues.md","filePath":"troubleshooting/api-issues.md"}'),s={name:"troubleshooting/api-issues.md"};function i(l,a,n,p,h,c){return e(),t("div",null,a[0]||(a[0]=[r('

API 통신 문제

CORS 오류

문제: CORS policy 오류

해결:

  1. 백엔드 CORS 설정 확인
  2. 프록시 설정 확인

타임아웃

문제: 요청 타임아웃

해결:

  1. 서버 응답 시간 확인
  2. 타임아웃 시간 조정 (현재 300초)

429 에러

문제: Too Many Requests

해결: 요청 빈도를 줄이세요. 429 에러 발생 시 자동으로 로그인 페이지로 이동합니다.

암호화 오류

문제: 암호화/복호화 실패

해결:

  1. 암호화 설정 확인
  2. 키 확인
  3. 데이터 형식 확인
',16)]))}const _=o(s,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/troubleshooting_api-issues.md.ChjIgCp0.lean.js b/assets/troubleshooting_api-issues.md.ChjIgCp0.lean.js new file mode 100644 index 0000000..962b4c0 --- /dev/null +++ b/assets/troubleshooting_api-issues.md.ChjIgCp0.lean.js @@ -0,0 +1 @@ +import{_ as o,c as t,o as e,aG as r}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"API 통신 문제","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/api-issues.md","filePath":"troubleshooting/api-issues.md"}'),s={name:"troubleshooting/api-issues.md"};function i(l,a,n,p,h,c){return e(),t("div",null,a[0]||(a[0]=[r("",16)]))}const _=o(s,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/troubleshooting_auth-issues.md.CsXYnxB7.js b/assets/troubleshooting_auth-issues.md.CsXYnxB7.js deleted file mode 100644 index caf8607..0000000 --- a/assets/troubleshooting_auth-issues.md.CsXYnxB7.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as a,o,aG as r}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"인증 관련 문제","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/auth-issues.md","filePath":"troubleshooting/auth-issues.md"}'),s={name:"troubleshooting/auth-issues.md"};function n(i,e,l,h,c,d){return o(),a("div",null,e[0]||(e[0]=[r('

인증 관련 문제

토큰 만료

문제: 401 에러 발생

해결:

  1. 자동으로 토큰 갱신 시도
  2. 갱신 실패 시 로그인 페이지로 이동

Refresh Token 만료

문제: 토큰 갱신 실패

해결: 다시 로그인하세요.

토큰이 저장되지 않음

문제: 로그인 후 토큰이 저장되지 않음

해결:

  1. authStore.setAccessToken() 호출 확인
  2. 브라우저 콘솔 확인

인증 상태가 유지되지 않음

문제: 새로고침 후 로그아웃됨

해결: Access Token은 메모리에만 저장되므로 새로고침 시 초기화됩니다. Refresh Token으로 자동 갱신됩니다.

',15)]))}const _=t(s,[["render",n]]);export{u as __pageData,_ as default}; diff --git a/assets/troubleshooting_auth-issues.md.CsXYnxB7.lean.js b/assets/troubleshooting_auth-issues.md.CsXYnxB7.lean.js deleted file mode 100644 index ae85514..0000000 --- a/assets/troubleshooting_auth-issues.md.CsXYnxB7.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as a,o,aG as r}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"인증 관련 문제","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/auth-issues.md","filePath":"troubleshooting/auth-issues.md"}'),s={name:"troubleshooting/auth-issues.md"};function n(i,e,l,h,c,d){return o(),a("div",null,e[0]||(e[0]=[r("",15)]))}const _=t(s,[["render",n]]);export{u as __pageData,_ as default}; diff --git a/assets/troubleshooting_auth-issues.md.DXDQV8rg.js b/assets/troubleshooting_auth-issues.md.DXDQV8rg.js new file mode 100644 index 0000000..7331582 --- /dev/null +++ b/assets/troubleshooting_auth-issues.md.DXDQV8rg.js @@ -0,0 +1 @@ +import{_ as t,c as a,o,aG as r}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"인증 관련 문제","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/auth-issues.md","filePath":"troubleshooting/auth-issues.md"}'),s={name:"troubleshooting/auth-issues.md"};function n(i,e,l,h,c,d){return o(),a("div",null,e[0]||(e[0]=[r('

인증 관련 문제

토큰 만료

문제: 401 에러 발생

해결:

  1. 자동으로 토큰 갱신 시도
  2. 갱신 실패 시 로그인 페이지로 이동

Refresh Token 만료

문제: 토큰 갱신 실패

해결: 다시 로그인하세요.

토큰이 저장되지 않음

문제: 로그인 후 토큰이 저장되지 않음

해결:

  1. authStore.setAccessToken() 호출 확인
  2. 브라우저 콘솔 확인

인증 상태가 유지되지 않음

문제: 새로고침 후 로그아웃됨

해결: Access Token은 메모리에만 저장되므로 새로고침 시 초기화됩니다. Refresh Token으로 자동 갱신됩니다.

',15)]))}const _=t(s,[["render",n]]);export{u as __pageData,_ as default}; diff --git a/assets/troubleshooting_auth-issues.md.DXDQV8rg.lean.js b/assets/troubleshooting_auth-issues.md.DXDQV8rg.lean.js new file mode 100644 index 0000000..9c0019c --- /dev/null +++ b/assets/troubleshooting_auth-issues.md.DXDQV8rg.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,o,aG as r}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"인증 관련 문제","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/auth-issues.md","filePath":"troubleshooting/auth-issues.md"}'),s={name:"troubleshooting/auth-issues.md"};function n(i,e,l,h,c,d){return o(),a("div",null,e[0]||(e[0]=[r("",15)]))}const _=t(s,[["render",n]]);export{u as __pageData,_ as default}; diff --git a/assets/troubleshooting_build-errors.md.CgZLYGAJ.js b/assets/troubleshooting_build-errors.md.CgZLYGAJ.js deleted file mode 100644 index 2803032..0000000 --- a/assets/troubleshooting_build-errors.md.CgZLYGAJ.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"빌드 오류","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/build-errors.md","filePath":"troubleshooting/build-errors.md"}'),l={name:"troubleshooting/build-errors.md"};function n(r,a,o,h,p,d){return t(),i("div",null,a[0]||(a[0]=[e(`

빌드 오류

일반적인 빌드 오류

타입 오류

문제: TypeScript/JavaScript 타입 오류

해결:

  1. 타입 오류 확인
  2. 타입 정의 수정
  3. any 타입 사용 (임시)

의존성 오류

문제: 패키지 의존성 오류

해결:

bash
rm -rf node_modules package-lock.json
-npm install

경로 오류

문제: 파일 경로를 찾을 수 없음

해결:

  1. 파일 경로 확인
  2. 경로 별칭 확인
  3. import 경로 수정

메모리 오류

문제: 빌드 중 메모리 부족

해결:

bash
NODE_OPTIONS=--max-old-space-size=4096 npm run build

빌드 최적화

큰 프로젝트의 경우 빌드 시간이 오래 걸릴 수 있습니다. 코드 분할을 활용하여 최적화하세요.

`,20)]))}const g=s(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/assets/troubleshooting_build-errors.md.CgZLYGAJ.lean.js b/assets/troubleshooting_build-errors.md.CgZLYGAJ.lean.js deleted file mode 100644 index abded9d..0000000 --- a/assets/troubleshooting_build-errors.md.CgZLYGAJ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"빌드 오류","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/build-errors.md","filePath":"troubleshooting/build-errors.md"}'),l={name:"troubleshooting/build-errors.md"};function n(r,a,o,h,p,d){return t(),i("div",null,a[0]||(a[0]=[e("",20)]))}const g=s(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/assets/troubleshooting_build-errors.md.CvM-svAn.js b/assets/troubleshooting_build-errors.md.CvM-svAn.js new file mode 100644 index 0000000..cad1993 --- /dev/null +++ b/assets/troubleshooting_build-errors.md.CvM-svAn.js @@ -0,0 +1,2 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"빌드 오류","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/build-errors.md","filePath":"troubleshooting/build-errors.md"}'),l={name:"troubleshooting/build-errors.md"};function n(r,a,o,h,p,d){return t(),i("div",null,a[0]||(a[0]=[e(`

빌드 오류

일반적인 빌드 오류

타입 오류

문제: TypeScript/JavaScript 타입 오류

해결:

  1. 타입 오류 확인
  2. 타입 정의 수정
  3. any 타입 사용 (임시)

의존성 오류

문제: 패키지 의존성 오류

해결:

bash
rm -rf node_modules package-lock.json
+npm install

경로 오류

문제: 파일 경로를 찾을 수 없음

해결:

  1. 파일 경로 확인
  2. 경로 별칭 확인
  3. import 경로 수정

메모리 오류

문제: 빌드 중 메모리 부족

해결:

bash
NODE_OPTIONS=--max-old-space-size=4096 npm run build

빌드 최적화

큰 프로젝트의 경우 빌드 시간이 오래 걸릴 수 있습니다. 코드 분할을 활용하여 최적화하세요.

`,20)]))}const g=s(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/assets/troubleshooting_build-errors.md.CvM-svAn.lean.js b/assets/troubleshooting_build-errors.md.CvM-svAn.lean.js new file mode 100644 index 0000000..6de0d31 --- /dev/null +++ b/assets/troubleshooting_build-errors.md.CvM-svAn.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"빌드 오류","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/build-errors.md","filePath":"troubleshooting/build-errors.md"}'),l={name:"troubleshooting/build-errors.md"};function n(r,a,o,h,p,d){return t(),i("div",null,a[0]||(a[0]=[e("",20)]))}const g=s(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/assets/troubleshooting_common-issues.md.DONM8Ynb.js b/assets/troubleshooting_common-issues.md.DONM8Ynb.js new file mode 100644 index 0000000..520b744 --- /dev/null +++ b/assets/troubleshooting_common-issues.md.DONM8Ynb.js @@ -0,0 +1,10 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"일반적인 문제 해결","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/common-issues.md","filePath":"troubleshooting/common-issues.md"}'),e={name:"troubleshooting/common-issues.md"};function l(h,s,p,o,r,k){return n(),i("div",null,s[0]||(s[0]=[t(`

일반적인 문제 해결

포트 충돌

문제: 개발 서버가 시작되지 않음

해결: 다른 포트를 사용하거나 기존 프로세스를 종료합니다.

bash
# 포트 사용 확인
+netstat -ano | findstr :5173
+
+# 프로세스 종료
+taskkill /PID <PID> /F

의존성 설치 오류

문제: npm install 실패

해결:

bash
# 캐시 정리
+npm cache clean --force
+
+# node_modules 삭제 후 재설치
+rm -rf node_modules package-lock.json
+npm install

환경 변수 인식 안 됨

문제: 환경 변수가 적용되지 않음

해결:

  1. .env 파일이 프로젝트 루트에 있는지 확인
  2. 변수명이 VITE_로 시작하는지 확인
  3. 개발 서버 재시작

빌드 오류

문제: 빌드 실패

해결:

  1. 타입 오류 확인
  2. ESLint 오류 확인
  3. 의존성 버전 확인

토큰 갱신 실패

문제: 401 에러 후 로그인 페이지로 이동

해결: refreshToken이 만료되었을 수 있습니다. 다시 로그인하세요.

`,20)]))}const g=a(e,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/troubleshooting_common-issues.md.DONM8Ynb.lean.js b/assets/troubleshooting_common-issues.md.DONM8Ynb.lean.js new file mode 100644 index 0000000..2fbb3f9 --- /dev/null +++ b/assets/troubleshooting_common-issues.md.DONM8Ynb.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"일반적인 문제 해결","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/common-issues.md","filePath":"troubleshooting/common-issues.md"}'),e={name:"troubleshooting/common-issues.md"};function l(h,s,p,o,r,k){return n(),i("div",null,s[0]||(s[0]=[t("",20)]))}const g=a(e,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/troubleshooting_common-issues.md.DRF7GBYq.js b/assets/troubleshooting_common-issues.md.DRF7GBYq.js deleted file mode 100644 index ab9f33f..0000000 --- a/assets/troubleshooting_common-issues.md.DRF7GBYq.js +++ /dev/null @@ -1,10 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"일반적인 문제 해결","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/common-issues.md","filePath":"troubleshooting/common-issues.md"}'),e={name:"troubleshooting/common-issues.md"};function l(h,s,p,o,r,k){return n(),i("div",null,s[0]||(s[0]=[t(`

일반적인 문제 해결

포트 충돌

문제: 개발 서버가 시작되지 않음

해결: 다른 포트를 사용하거나 기존 프로세스를 종료합니다.

bash
# 포트 사용 확인
-netstat -ano | findstr :5173
-
-# 프로세스 종료
-taskkill /PID <PID> /F

의존성 설치 오류

문제: npm install 실패

해결:

bash
# 캐시 정리
-npm cache clean --force
-
-# node_modules 삭제 후 재설치
-rm -rf node_modules package-lock.json
-npm install

환경 변수 인식 안 됨

문제: 환경 변수가 적용되지 않음

해결:

  1. .env 파일이 프로젝트 루트에 있는지 확인
  2. 변수명이 VITE_로 시작하는지 확인
  3. 개발 서버 재시작

빌드 오류

문제: 빌드 실패

해결:

  1. 타입 오류 확인
  2. ESLint 오류 확인
  3. 의존성 버전 확인

토큰 갱신 실패

문제: 401 에러 후 로그인 페이지로 이동

해결: refreshToken이 만료되었을 수 있습니다. 다시 로그인하세요.

`,20)]))}const g=a(e,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/troubleshooting_common-issues.md.DRF7GBYq.lean.js b/assets/troubleshooting_common-issues.md.DRF7GBYq.lean.js deleted file mode 100644 index 4db8960..0000000 --- a/assets/troubleshooting_common-issues.md.DRF7GBYq.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"일반적인 문제 해결","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/common-issues.md","filePath":"troubleshooting/common-issues.md"}'),e={name:"troubleshooting/common-issues.md"};function l(h,s,p,o,r,k){return n(),i("div",null,s[0]||(s[0]=[t("",20)]))}const g=a(e,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/troubleshooting_runtime-errors.md.BydLjSEI.js b/assets/troubleshooting_runtime-errors.md.BydLjSEI.js deleted file mode 100644 index 19560db..0000000 --- a/assets/troubleshooting_runtime-errors.md.BydLjSEI.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"런타임 오류","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/runtime-errors.md","filePath":"troubleshooting/runtime-errors.md"}'),i={name:"troubleshooting/runtime-errors.md"};function l(n,o,s,d,h,c){return e(),r("div",null,o[0]||(o[0]=[t('

런타임 오류

일반적인 런타임 오류

컴포넌트를 찾을 수 없음

문제: Failed to resolve component

해결:

  1. 컴포넌트 import 확인
  2. 컴포넌트 등록 확인
  3. 자동 임포트 설정 확인

스토어를 찾을 수 없음

문제: Cannot read property of undefined

해결:

  1. 스토어 import 확인
  2. 스토어 초기화 확인
  3. Pinia 설정 확인

라우트를 찾을 수 없음

문제: No match found for location

해결:

  1. 라우트 정의 확인
  2. 라우트 이름 확인
  3. 동적 라우트 등록 확인

API 요청 실패

문제: 네트워크 오류

해결:

  1. API 서버 상태 확인
  2. 프록시 설정 확인
  3. CORS 설정 확인

디버깅

브라우저 개발자 도구의 콘솔과 네트워크 탭을 확인하세요.

',20)]))}const m=a(i,[["render",l]]);export{u as __pageData,m as default}; diff --git a/assets/troubleshooting_runtime-errors.md.BydLjSEI.lean.js b/assets/troubleshooting_runtime-errors.md.BydLjSEI.lean.js deleted file mode 100644 index 76d6e8e..0000000 --- a/assets/troubleshooting_runtime-errors.md.BydLjSEI.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as e,aG as t}from"./chunks/framework.CrOSaJJH.js";const u=JSON.parse('{"title":"런타임 오류","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/runtime-errors.md","filePath":"troubleshooting/runtime-errors.md"}'),i={name:"troubleshooting/runtime-errors.md"};function l(n,o,s,d,h,c){return e(),r("div",null,o[0]||(o[0]=[t("",20)]))}const m=a(i,[["render",l]]);export{u as __pageData,m as default}; diff --git a/assets/troubleshooting_runtime-errors.md.Dm-pnwMq.js b/assets/troubleshooting_runtime-errors.md.Dm-pnwMq.js new file mode 100644 index 0000000..51a2345 --- /dev/null +++ b/assets/troubleshooting_runtime-errors.md.Dm-pnwMq.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"런타임 오류","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/runtime-errors.md","filePath":"troubleshooting/runtime-errors.md"}'),i={name:"troubleshooting/runtime-errors.md"};function l(n,o,s,d,h,c){return e(),r("div",null,o[0]||(o[0]=[t('

런타임 오류

일반적인 런타임 오류

컴포넌트를 찾을 수 없음

문제: Failed to resolve component

해결:

  1. 컴포넌트 import 확인
  2. 컴포넌트 등록 확인
  3. 자동 임포트 설정 확인

스토어를 찾을 수 없음

문제: Cannot read property of undefined

해결:

  1. 스토어 import 확인
  2. 스토어 초기화 확인
  3. Pinia 설정 확인

라우트를 찾을 수 없음

문제: No match found for location

해결:

  1. 라우트 정의 확인
  2. 라우트 이름 확인
  3. 동적 라우트 등록 확인

API 요청 실패

문제: 네트워크 오류

해결:

  1. API 서버 상태 확인
  2. 프록시 설정 확인
  3. CORS 설정 확인

디버깅

브라우저 개발자 도구의 콘솔과 네트워크 탭을 확인하세요.

',20)]))}const m=a(i,[["render",l]]);export{u as __pageData,m as default}; diff --git a/assets/troubleshooting_runtime-errors.md.Dm-pnwMq.lean.js b/assets/troubleshooting_runtime-errors.md.Dm-pnwMq.lean.js new file mode 100644 index 0000000..9071d34 --- /dev/null +++ b/assets/troubleshooting_runtime-errors.md.Dm-pnwMq.lean.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as e,aG as t}from"./chunks/framework.DytOxJW6.js";const u=JSON.parse('{"title":"런타임 오류","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting/runtime-errors.md","filePath":"troubleshooting/runtime-errors.md"}'),i={name:"troubleshooting/runtime-errors.md"};function l(n,o,s,d,h,c){return e(),r("div",null,o[0]||(o[0]=[t("",20)]))}const m=a(i,[["render",l]]);export{u as __pageData,m as default}; diff --git a/assets/utilities_array-object.md.Be6UbmjN.js b/assets/utilities_array-object.md.Be6UbmjN.js deleted file mode 100644 index 2652589..0000000 --- a/assets/utilities_array-object.md.Be6UbmjN.js +++ /dev/null @@ -1,33 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"배열/객체 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/array-object.md","filePath":"utilities/array-object.md"}'),l={name:"utilities/array-object.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

배열/객체 처리

개요

common.js에서 제공하는 배열/객체 처리 함수들입니다.

주요 함수

gfArrayToObject(array, keyField, valueField)

배열을 객체로 변환합니다.

javascript
const array = [
-  { code: 'A', name: 'Apple' },
-  { code: 'B', name: 'Banana' },
-]
-
-gfArrayToObject(array, 'code', 'name')
-// { A: 'Apple', B: 'Banana' }

gfGetRowTable(listData)

객체 배열을 값만 가진 2차원 배열로 변환합니다.

javascript
const data = [
-  { id: 1, name: '홍길동' },
-  { id: 2, name: '김철수' },
-]
-
-gfGetRowTable(data)
-// [[1, '홍길동'], [2, '김철수']]

gfGetJsonFilter(data, key, values)

조건에 맞는 데이터를 필터링합니다.

javascript
const data = [
-  { id: 1, status: 'active' },
-  { id: 2, status: 'inactive' },
-  { id: 3, status: 'active' },
-]
-
-gfGetJsonFilter(data, 'status', 'active')
-// [{ id: 1, status: 'active' }, { id: 3, status: 'active' }]
-
-gfGetJsonFilter(data, 'status', ['active', 'inactive'])
-// 전체 데이터

gfJsonDataValidation(jsonData, _code)

JSON 배열에서 코드 존재 여부를 확인합니다.

javascript
const data = [
-  { value: 'A', label: 'Apple' },
-  { value: 'B', label: 'Banana' },
-]
-
-gfJsonDataValidation(data, 'A') // 'Y'
-gfJsonDataValidation(data, 'C') // ''

gfCloneJson(obj)

JSON 객체를 깊은 복사합니다.

javascript
const original = { a: 1, b: { c: 2 } }
-const cloned = gfCloneJson(original)
-cloned.b.c = 3
-// original.b.c는 여전히 2

gfObjectToString(obj, log)

객체를 문자열로 변환합니다.

javascript
const obj = { name: '홍길동', age: 30 }
-gfObjectToString(obj) // '홍길동∥30'

관련 문서

`,24)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/utilities_array-object.md.Be6UbmjN.lean.js b/assets/utilities_array-object.md.Be6UbmjN.lean.js deleted file mode 100644 index b660699..0000000 --- a/assets/utilities_array-object.md.Be6UbmjN.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"배열/객체 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/array-object.md","filePath":"utilities/array-object.md"}'),l={name:"utilities/array-object.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",24)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/utilities_array-object.md.lZfzFbZP.js b/assets/utilities_array-object.md.lZfzFbZP.js new file mode 100644 index 0000000..e19ed0e --- /dev/null +++ b/assets/utilities_array-object.md.lZfzFbZP.js @@ -0,0 +1,33 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"배열/객체 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/array-object.md","filePath":"utilities/array-object.md"}'),l={name:"utilities/array-object.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

배열/객체 처리

개요

common.js에서 제공하는 배열/객체 처리 함수들입니다.

주요 함수

gfArrayToObject(array, keyField, valueField)

배열을 객체로 변환합니다.

javascript
const array = [
+  { code: 'A', name: 'Apple' },
+  { code: 'B', name: 'Banana' },
+]
+
+gfArrayToObject(array, 'code', 'name')
+// { A: 'Apple', B: 'Banana' }

gfGetRowTable(listData)

객체 배열을 값만 가진 2차원 배열로 변환합니다.

javascript
const data = [
+  { id: 1, name: '홍길동' },
+  { id: 2, name: '김철수' },
+]
+
+gfGetRowTable(data)
+// [[1, '홍길동'], [2, '김철수']]

gfGetJsonFilter(data, key, values)

조건에 맞는 데이터를 필터링합니다.

javascript
const data = [
+  { id: 1, status: 'active' },
+  { id: 2, status: 'inactive' },
+  { id: 3, status: 'active' },
+]
+
+gfGetJsonFilter(data, 'status', 'active')
+// [{ id: 1, status: 'active' }, { id: 3, status: 'active' }]
+
+gfGetJsonFilter(data, 'status', ['active', 'inactive'])
+// 전체 데이터

gfJsonDataValidation(jsonData, _code)

JSON 배열에서 코드 존재 여부를 확인합니다.

javascript
const data = [
+  { value: 'A', label: 'Apple' },
+  { value: 'B', label: 'Banana' },
+]
+
+gfJsonDataValidation(data, 'A') // 'Y'
+gfJsonDataValidation(data, 'C') // ''

gfCloneJson(obj)

JSON 객체를 깊은 복사합니다.

javascript
const original = { a: 1, b: { c: 2 } }
+const cloned = gfCloneJson(original)
+cloned.b.c = 3
+// original.b.c는 여전히 2

gfObjectToString(obj, log)

객체를 문자열로 변환합니다.

javascript
const obj = { name: '홍길동', age: 30 }
+gfObjectToString(obj) // '홍길동∥30'

관련 문서

`,24)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/utilities_array-object.md.lZfzFbZP.lean.js b/assets/utilities_array-object.md.lZfzFbZP.lean.js new file mode 100644 index 0000000..8763786 --- /dev/null +++ b/assets/utilities_array-object.md.lZfzFbZP.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as t}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"배열/객체 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/array-object.md","filePath":"utilities/array-object.md"}'),l={name:"utilities/array-object.md"};function h(e,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t("",24)]))}const o=i(l,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/utilities_common.md.BQuLhqC4.js b/assets/utilities_common.md.BQuLhqC4.js deleted file mode 100644 index 6f2f2ac..0000000 --- a/assets/utilities_common.md.BQuLhqC4.js +++ /dev/null @@ -1,73 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"공통 유틸리티 (common.js)","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/common.md","filePath":"utilities/common.md"}'),l={name:"utilities/common.md"};function h(e,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`

공통 유틸리티 (common.js)

개요

common.js는 프로젝트 전반에서 사용되는 공통 유틸리티 함수들을 제공합니다. 이 파일의 함수들은 unplugin-auto-import를 통해 자동으로 임포트되므로 별도의 import 문 없이 바로 사용할 수 있습니다.

파일 위치

src/utils/common/common.js

주요 함수 카테고리

1. 기본 유틸리티/검증 함수

gfIsEmpty(value)

값이 비어있는지 확인합니다.

파라미터:

  • value: 확인할 값 (모든 타입)

반환값:

  • boolean: 비어있으면 true, 아니면 false

사용 예제:

javascript
if (gfIsEmpty(userName)) {
-  alert('사용자 이름을 입력해주세요')
-}
-
-// 문자열
-gfIsEmpty('')        // true
-gfIsEmpty('text')    // false
-
-// 배열
-gfIsEmpty([])        // true
-gfIsEmpty([1, 2])    // false
-
-// 객체
-gfIsEmpty({})        // true
-gfIsEmpty({a: 1})    // false
-
-// null/undefined
-gfIsEmpty(null)      // true
-gfIsEmpty(undefined) // true

gfNvl(val, defaultVal)

값이 null, undefined, 빈 문자열인 경우 기본값을 반환합니다.

파라미터:

  • val: 확인할 값
  • defaultVal: 기본값 (선택사항, 기본값: '')

반환값:

  • 값이 비어있으면 defaultVal, 아니면 val

사용 예제:

javascript
const userName = gfNvl(user.name, '익명')
-const count = gfNvl(data.count, 0)

2. 날짜/시간 관련 함수

gfFormatDateString(dateStr, delimiter)

날짜 문자열을 포맷팅합니다.

파라미터:

  • dateStr: 날짜 문자열 (예: '20240101')
  • delimiter: 구분자 (예: '.', '-', '/')

반환값:

  • 포맷팅된 날짜 문자열 (예: '2024.01.01')

사용 예제:

javascript
gfFormatDateString('20240101', '.')  // '2024.01.01'
-gfFormatDateString('20240101', '-')  // '2024-01-01'
-gfFormatDateString('20240101', '/')  // '2024/01/01'

gfFormatDateTime(date)

날짜를 yyyyMMddHHmmss 형식의 문자열로 변환합니다.

파라미터:

  • date: Date 객체 (선택사항, 기본값: 현재 날짜)

반환값:

  • 날짜 시간 문자열 (예: '20240101120000')

사용 예제:

javascript
const now = gfFormatDateTime()           // 현재 날짜 시간
-const date = gfFormatDateTime(new Date()) // 특정 날짜 시간

gfAddDay(date, add)

날짜에 일수를 더하거나 뺍니다.

파라미터:

  • date: Date 객체
  • add: 증감 일수 (양수: 더하기, 음수: 빼기)

반환값:

  • yyyyMMdd 형식의 날짜 문자열

사용 예제:

javascript
const today = new Date()
-const tomorrow = gfAddDay(today, 1)   // 내일
-const yesterday = gfAddDay(today, -1) // 어제

gfDiffDate(fromDate, toDate)

두 날짜 사이의 일수 차이를 계산합니다.

파라미터:

  • fromDate: 시작 날짜 (yyyyMMdd 형식)
  • toDate: 종료 날짜 (yyyyMMdd 형식)

반환값:

  • 일수 차이 (숫자)

사용 예제:

javascript
const diff = gfDiffDate('20240101', '20240110') // 9

3. 숫자 처리 함수

gfNumberFormat(number, decimals, decPoint, thousandsSep)

숫자를 포맷팅합니다.

파라미터:

  • number: 포맷팅할 숫자
  • decimals: 소수점 자릿수 (기본값: 0)
  • decPoint: 소수점 구분자 (기본값: '.')
  • thousandsSep: 천 단위 구분자 (기본값: ',')

반환값:

  • 포맷팅된 숫자 문자열

사용 예제:

javascript
gfNumberFormat(1234567)        // '1,234,567'
-gfNumberFormat(1234.56, 2)     // '1,234.56'
-gfNumberFormat(1234.56, 2, ',', '.') // '1.234,56'

4. 문자열 처리 함수

gfTrim(str)

문자열의 앞뒤 공백을 제거합니다.

파라미터:

  • str: 처리할 문자열

반환값:

  • 공백이 제거된 문자열

사용 예제:

javascript
gfTrim('  hello  ') // 'hello'

5. 배열/객체 처리 함수

gfArrayToObject(array, keyField, valueField)

배열을 객체로 변환합니다.

파라미터:

  • array: 변환할 배열
  • keyField: 키로 사용할 필드명
  • valueField: 값으로 사용할 필드명

반환값:

  • 변환된 객체

사용 예제:

javascript
const array = [
-  { code: 'A', name: 'Apple' },
-  { code: 'B', name: 'Banana' },
-]
-
-const obj = gfArrayToObject(array, 'code', 'name')
-// { A: 'Apple', B: 'Banana' }

6. 파일 처리 함수

gfDownloadFile(data, fileName, mimeType)

파일을 다운로드합니다.

파라미터:

  • data: 파일 데이터 (Blob, ArrayBuffer 등)
  • fileName: 파일명
  • mimeType: MIME 타입 (선택사항)

사용 예제:

javascript
const fileData = new Blob([data], { type: 'application/pdf' })
-gfDownloadFile(fileData, 'document.pdf', 'application/pdf')

7. 검증 함수

gfValidateResidentNumber(residentNumber)

주민등록번호를 검증합니다.

파라미터:

  • residentNumber: 주민등록번호 (예: '123456-1234567')

반환값:

  • boolean: 유효하면 true, 아니면 false

사용 예제:

javascript
if (gfValidateResidentNumber('123456-1234567')) {
-  console.log('유효한 주민등록번호입니다')
-}

gfIsDate(str)

날짜 형식인지 확인합니다.

파라미터:

  • str: 확인할 문자열

반환값:

  • boolean: 날짜 형식이면 true, 아니면 false

사용 예제:

javascript
gfIsDate('20240101') // true
-gfIsDate('20241301') // false (잘못된 월)

자동 임포트

이 파일의 함수들은 자동으로 임포트되므로 별도의 import 문이 필요 없습니다:

vue
<script setup>
-// import 문 없이 바로 사용 가능
-const isEmpty = gfIsEmpty(value)
-const formatted = gfFormatDateString('20240101', '.')
-</script>

사용 예제

날짜 처리

vue
<script setup>
-const today = ref(gfFormatDateString(gfFormatDateTime(), '.'))
-
-const calculateDays = () => {
-  const from = '20240101'
-  const to = '20240110'
-  const days = gfDiffDate(from, to)
-  console.log(\`차이: \${days}일\`)
-}
-</script>

숫자 포맷팅

vue
<template>
-  <div>
-    <p>가격: {{ formattedPrice }}원</p>
-  </div>
-</template>
-
-<script setup>
-const price = ref(1234567)
-const formattedPrice = computed(() => gfNumberFormat(price.value))
-</script>

데이터 검증

vue
<script setup>
-const validateForm = () => {
-  if (gfIsEmpty(formData.userName)) {
-    alert('사용자 이름을 입력해주세요')
-    return false
-  }
-  
-  if (!gfIsDate(formData.birthDate)) {
-    alert('올바른 날짜 형식을 입력해주세요')
-    return false
-  }
-  
-  return true
-}
-</script>

관련 문서

`,119)]))}const o=i(l,[["render",h]]);export{E as __pageData,o as default}; diff --git a/assets/utilities_common.md.BQuLhqC4.lean.js b/assets/utilities_common.md.BQuLhqC4.lean.js deleted file mode 100644 index 5129a83..0000000 --- a/assets/utilities_common.md.BQuLhqC4.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const E=JSON.parse('{"title":"공통 유틸리티 (common.js)","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/common.md","filePath":"utilities/common.md"}'),l={name:"utilities/common.md"};function h(e,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n("",119)]))}const o=i(l,[["render",h]]);export{E as __pageData,o as default}; diff --git a/assets/utilities_common.md.CsnLD4RH.js b/assets/utilities_common.md.CsnLD4RH.js new file mode 100644 index 0000000..200a3b1 --- /dev/null +++ b/assets/utilities_common.md.CsnLD4RH.js @@ -0,0 +1,73 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"공통 유틸리티 (common.js)","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/common.md","filePath":"utilities/common.md"}'),l={name:"utilities/common.md"};function h(e,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`

공통 유틸리티 (common.js)

개요

common.js는 프로젝트 전반에서 사용되는 공통 유틸리티 함수들을 제공합니다. 이 파일의 함수들은 unplugin-auto-import를 통해 자동으로 임포트되므로 별도의 import 문 없이 바로 사용할 수 있습니다.

파일 위치

src/utils/common/common.js

주요 함수 카테고리

1. 기본 유틸리티/검증 함수

gfIsEmpty(value)

값이 비어있는지 확인합니다.

파라미터:

  • value: 확인할 값 (모든 타입)

반환값:

  • boolean: 비어있으면 true, 아니면 false

사용 예제:

javascript
if (gfIsEmpty(userName)) {
+  alert('사용자 이름을 입력해주세요')
+}
+
+// 문자열
+gfIsEmpty('')        // true
+gfIsEmpty('text')    // false
+
+// 배열
+gfIsEmpty([])        // true
+gfIsEmpty([1, 2])    // false
+
+// 객체
+gfIsEmpty({})        // true
+gfIsEmpty({a: 1})    // false
+
+// null/undefined
+gfIsEmpty(null)      // true
+gfIsEmpty(undefined) // true

gfNvl(val, defaultVal)

값이 null, undefined, 빈 문자열인 경우 기본값을 반환합니다.

파라미터:

  • val: 확인할 값
  • defaultVal: 기본값 (선택사항, 기본값: '')

반환값:

  • 값이 비어있으면 defaultVal, 아니면 val

사용 예제:

javascript
const userName = gfNvl(user.name, '익명')
+const count = gfNvl(data.count, 0)

2. 날짜/시간 관련 함수

gfFormatDateString(dateStr, delimiter)

날짜 문자열을 포맷팅합니다.

파라미터:

  • dateStr: 날짜 문자열 (예: '20240101')
  • delimiter: 구분자 (예: '.', '-', '/')

반환값:

  • 포맷팅된 날짜 문자열 (예: '2024.01.01')

사용 예제:

javascript
gfFormatDateString('20240101', '.')  // '2024.01.01'
+gfFormatDateString('20240101', '-')  // '2024-01-01'
+gfFormatDateString('20240101', '/')  // '2024/01/01'

gfFormatDateTime(date)

날짜를 yyyyMMddHHmmss 형식의 문자열로 변환합니다.

파라미터:

  • date: Date 객체 (선택사항, 기본값: 현재 날짜)

반환값:

  • 날짜 시간 문자열 (예: '20240101120000')

사용 예제:

javascript
const now = gfFormatDateTime()           // 현재 날짜 시간
+const date = gfFormatDateTime(new Date()) // 특정 날짜 시간

gfAddDay(date, add)

날짜에 일수를 더하거나 뺍니다.

파라미터:

  • date: Date 객체
  • add: 증감 일수 (양수: 더하기, 음수: 빼기)

반환값:

  • yyyyMMdd 형식의 날짜 문자열

사용 예제:

javascript
const today = new Date()
+const tomorrow = gfAddDay(today, 1)   // 내일
+const yesterday = gfAddDay(today, -1) // 어제

gfDiffDate(fromDate, toDate)

두 날짜 사이의 일수 차이를 계산합니다.

파라미터:

  • fromDate: 시작 날짜 (yyyyMMdd 형식)
  • toDate: 종료 날짜 (yyyyMMdd 형식)

반환값:

  • 일수 차이 (숫자)

사용 예제:

javascript
const diff = gfDiffDate('20240101', '20240110') // 9

3. 숫자 처리 함수

gfNumberFormat(number, decimals, decPoint, thousandsSep)

숫자를 포맷팅합니다.

파라미터:

  • number: 포맷팅할 숫자
  • decimals: 소수점 자릿수 (기본값: 0)
  • decPoint: 소수점 구분자 (기본값: '.')
  • thousandsSep: 천 단위 구분자 (기본값: ',')

반환값:

  • 포맷팅된 숫자 문자열

사용 예제:

javascript
gfNumberFormat(1234567)        // '1,234,567'
+gfNumberFormat(1234.56, 2)     // '1,234.56'
+gfNumberFormat(1234.56, 2, ',', '.') // '1.234,56'

4. 문자열 처리 함수

gfTrim(str)

문자열의 앞뒤 공백을 제거합니다.

파라미터:

  • str: 처리할 문자열

반환값:

  • 공백이 제거된 문자열

사용 예제:

javascript
gfTrim('  hello  ') // 'hello'

5. 배열/객체 처리 함수

gfArrayToObject(array, keyField, valueField)

배열을 객체로 변환합니다.

파라미터:

  • array: 변환할 배열
  • keyField: 키로 사용할 필드명
  • valueField: 값으로 사용할 필드명

반환값:

  • 변환된 객체

사용 예제:

javascript
const array = [
+  { code: 'A', name: 'Apple' },
+  { code: 'B', name: 'Banana' },
+]
+
+const obj = gfArrayToObject(array, 'code', 'name')
+// { A: 'Apple', B: 'Banana' }

6. 파일 처리 함수

gfDownloadFile(data, fileName, mimeType)

파일을 다운로드합니다.

파라미터:

  • data: 파일 데이터 (Blob, ArrayBuffer 등)
  • fileName: 파일명
  • mimeType: MIME 타입 (선택사항)

사용 예제:

javascript
const fileData = new Blob([data], { type: 'application/pdf' })
+gfDownloadFile(fileData, 'document.pdf', 'application/pdf')

7. 검증 함수

gfValidateResidentNumber(residentNumber)

주민등록번호를 검증합니다.

파라미터:

  • residentNumber: 주민등록번호 (예: '123456-1234567')

반환값:

  • boolean: 유효하면 true, 아니면 false

사용 예제:

javascript
if (gfValidateResidentNumber('123456-1234567')) {
+  console.log('유효한 주민등록번호입니다')
+}

gfIsDate(str)

날짜 형식인지 확인합니다.

파라미터:

  • str: 확인할 문자열

반환값:

  • boolean: 날짜 형식이면 true, 아니면 false

사용 예제:

javascript
gfIsDate('20240101') // true
+gfIsDate('20241301') // false (잘못된 월)

자동 임포트

이 파일의 함수들은 자동으로 임포트되므로 별도의 import 문이 필요 없습니다:

vue
<script setup>
+// import 문 없이 바로 사용 가능
+const isEmpty = gfIsEmpty(value)
+const formatted = gfFormatDateString('20240101', '.')
+</script>

사용 예제

날짜 처리

vue
<script setup>
+const today = ref(gfFormatDateString(gfFormatDateTime(), '.'))
+
+const calculateDays = () => {
+  const from = '20240101'
+  const to = '20240110'
+  const days = gfDiffDate(from, to)
+  console.log(\`차이: \${days}일\`)
+}
+</script>

숫자 포맷팅

vue
<template>
+  <div>
+    <p>가격: {{ formattedPrice }}원</p>
+  </div>
+</template>
+
+<script setup>
+const price = ref(1234567)
+const formattedPrice = computed(() => gfNumberFormat(price.value))
+</script>

데이터 검증

vue
<script setup>
+const validateForm = () => {
+  if (gfIsEmpty(formData.userName)) {
+    alert('사용자 이름을 입력해주세요')
+    return false
+  }
+  
+  if (!gfIsDate(formData.birthDate)) {
+    alert('올바른 날짜 형식을 입력해주세요')
+    return false
+  }
+  
+  return true
+}
+</script>

관련 문서

`,119)]))}const o=i(l,[["render",h]]);export{E as __pageData,o as default}; diff --git a/assets/utilities_common.md.CsnLD4RH.lean.js b/assets/utilities_common.md.CsnLD4RH.lean.js new file mode 100644 index 0000000..702da79 --- /dev/null +++ b/assets/utilities_common.md.CsnLD4RH.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const E=JSON.parse('{"title":"공통 유틸리티 (common.js)","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/common.md","filePath":"utilities/common.md"}'),l={name:"utilities/common.md"};function h(e,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n("",119)]))}const o=i(l,[["render",h]]);export{E as __pageData,o as default}; diff --git a/assets/utilities_crypto.md.AIfSF4xW.js b/assets/utilities_crypto.md.AIfSF4xW.js new file mode 100644 index 0000000..9bac3a6 --- /dev/null +++ b/assets/utilities_crypto.md.AIfSF4xW.js @@ -0,0 +1,14 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"암호화/복호화","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/crypto.md","filePath":"utilities/crypto.md"}'),e={name:"utilities/crypto.md"};function l(p,s,h,r,k,d){return t(),a("div",null,s[0]||(s[0]=[n(`

암호화/복호화

개요

CryptoJS를 사용한 암호화/복호화 함수들입니다.

주요 함수

encryptObject(data)

객체를 암호화합니다.

파라미터:

  • data (object): 암호화할 데이터

반환값:

  • 암호화된 객체 { param, KEY, IV }

사용 예제:

javascript
const encrypted = encryptObject({
+  userId: 'user123',
+  password: 'password',
+})
+// { param: 'encrypted_string', KEY: 'key', IV: 'iv' }

decryptObject(data)

객체를 복호화합니다.

파라미터:

  • data (object): 복호화할 데이터 { param, KEY, IV }

반환값:

  • 복호화된 객체

사용 예제:

javascript
const decrypted = decryptObject({
+  param: 'encrypted_string',
+  KEY: 'key',
+  IV: 'iv',
+})
+// { userId: 'user123', password: 'password' }

encryptBinary(bytes, file)

바이너리 데이터를 암호화합니다.

파라미터:

  • bytes (Uint8Array): 암호화할 바이트 배열
  • file (File): 파일 객체

반환값:

  • 암호화된 데이터 객체

사용 예제:

javascript
const file = document.querySelector('input[type="file"]').files[0]
+const arr = await file.arrayBuffer()
+const bytes = new Uint8Array(arr)
+const encrypted = encryptBinary(bytes, file)

자동 암호화

CustomAxios.js의 요청 인터셉터에서 세션 설정에 따라 자동으로 암호화됩니다:

javascript
const sessionStore = useSessionStore()
+sessionStore.setSessionKey('encrypt', 'Y')

관련 문서

`,33)]))}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/assets/utilities_crypto.md.AIfSF4xW.lean.js b/assets/utilities_crypto.md.AIfSF4xW.lean.js new file mode 100644 index 0000000..1b7d8ea --- /dev/null +++ b/assets/utilities_crypto.md.AIfSF4xW.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.DytOxJW6.js";const c=JSON.parse('{"title":"암호화/복호화","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/crypto.md","filePath":"utilities/crypto.md"}'),e={name:"utilities/crypto.md"};function l(p,s,h,r,k,d){return t(),a("div",null,s[0]||(s[0]=[n("",33)]))}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/assets/utilities_crypto.md.DjXiM71Y.js b/assets/utilities_crypto.md.DjXiM71Y.js deleted file mode 100644 index 22b750e..0000000 --- a/assets/utilities_crypto.md.DjXiM71Y.js +++ /dev/null @@ -1,14 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"암호화/복호화","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/crypto.md","filePath":"utilities/crypto.md"}'),e={name:"utilities/crypto.md"};function l(p,s,h,r,k,d){return t(),a("div",null,s[0]||(s[0]=[n(`

암호화/복호화

개요

CryptoJS를 사용한 암호화/복호화 함수들입니다.

주요 함수

encryptObject(data)

객체를 암호화합니다.

파라미터:

  • data (object): 암호화할 데이터

반환값:

  • 암호화된 객체 { param, KEY, IV }

사용 예제:

javascript
const encrypted = encryptObject({
-  userId: 'user123',
-  password: 'password',
-})
-// { param: 'encrypted_string', KEY: 'key', IV: 'iv' }

decryptObject(data)

객체를 복호화합니다.

파라미터:

  • data (object): 복호화할 데이터 { param, KEY, IV }

반환값:

  • 복호화된 객체

사용 예제:

javascript
const decrypted = decryptObject({
-  param: 'encrypted_string',
-  KEY: 'key',
-  IV: 'iv',
-})
-// { userId: 'user123', password: 'password' }

encryptBinary(bytes, file)

바이너리 데이터를 암호화합니다.

파라미터:

  • bytes (Uint8Array): 암호화할 바이트 배열
  • file (File): 파일 객체

반환값:

  • 암호화된 데이터 객체

사용 예제:

javascript
const file = document.querySelector('input[type="file"]').files[0]
-const arr = await file.arrayBuffer()
-const bytes = new Uint8Array(arr)
-const encrypted = encryptBinary(bytes, file)

자동 암호화

CustomAxios.js의 요청 인터셉터에서 세션 설정에 따라 자동으로 암호화됩니다:

javascript
const sessionStore = useSessionStore()
-sessionStore.setSessionKey('encrypt', 'Y')

관련 문서

`,33)]))}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/assets/utilities_crypto.md.DjXiM71Y.lean.js b/assets/utilities_crypto.md.DjXiM71Y.lean.js deleted file mode 100644 index 5fec2a3..0000000 --- a/assets/utilities_crypto.md.DjXiM71Y.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as n}from"./chunks/framework.CrOSaJJH.js";const c=JSON.parse('{"title":"암호화/복호화","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/crypto.md","filePath":"utilities/crypto.md"}'),e={name:"utilities/crypto.md"};function l(p,s,h,r,k,d){return t(),a("div",null,s[0]||(s[0]=[n("",33)]))}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/assets/utilities_date.md.BYdslHtu.js b/assets/utilities_date.md.BYdslHtu.js deleted file mode 100644 index c0ffd16..0000000 --- a/assets/utilities_date.md.BYdslHtu.js +++ /dev/null @@ -1,8 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"날짜 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/date.md","filePath":"utilities/date.md"}'),h={name:"utilities/date.md"};function n(p,a,l,d,k,r){return t(),i("div",null,a[0]||(a[0]=[e(`

날짜 처리

개요

common.js에서 제공하는 날짜/시간 처리 함수들입니다.

주요 함수

gfFormatDateString(dateStr, delimiter)

날짜 문자열을 포맷팅합니다.

javascript
gfFormatDateString('20240101', '.') // '2024.01.01'
-gfFormatDateString('20240101', '-') // '2024-01-01'

gfFormatDateTime(date)

날짜를 yyyyMMddHHmmss 형식으로 변환합니다.

javascript
gfFormatDateTime(new Date()) // '20240101120000'

gfFormatDateTimeString(pDate)

날짜를 yyyy-MM-dd HH:mm:ss 형식으로 변환합니다.

javascript
gfFormatDateTimeString(new Date()) // '2024-01-01 12:00:00'

gfAddDay(date, add)

날짜에 일수를 더하거나 뺍니다.

javascript
const today = new Date()
-gfAddDay(today, 1)   // 내일 (yyyyMMdd)
-gfAddDay(today, -1)  // 어제 (yyyyMMdd)

gfDiffDate(fromDate, toDate)

두 날짜 사이의 일수 차이를 계산합니다.

javascript
gfDiffDate('20240101', '20240110') // 9

gfAddMonth(date, val)

날짜에 개월수를 더하거나 뺍니다.

javascript
const date = new Date('2024-01-15')
-gfAddMonth(date, 1)  // '2024-02-15'

gfFormatDateWithSep(date)

8자리 날짜에 '-'를 추가합니다.

javascript
gfFormatDateWithSep('20240101') // '2024-01-01'

gfTimestampToDateStr(date)

타임스탬프를 'yyyy-mm-dd' 형식으로 변환합니다.

javascript
gfTimestampToDateStr(1704067200000) // '2024-01-01'

gfConvertTimestamp(pDate)

타임스탬프를 'yyyy-mm-dd HH:mm:ss' 형식으로 변환합니다.

javascript
gfConvertTimestamp(1704067200000) // '2024-01-01 12:00:00'

gfToday()

오늘 날짜를 yyyyMMdd 형식으로 반환합니다.

javascript
gfToday() // '20240101'

gfDayFormat(str)

오늘 날짜를 지정된 구분자로 포맷팅합니다.

javascript
gfDayFormat('.') // '2024.01.01'

날짜 드롭다운 생성

gfSetYearBox()

연도 드롭다운 리스트를 생성합니다.

javascript
const years = gfSetYearBox()
-// [{ code: '2024', name: '2024년' }, ...]

gfSetMonthBox()

월 드롭다운 리스트를 생성합니다.

javascript
const months = gfSetMonthBox()
-// [{ code: '01', name: '01월' }, ...]

gfSetDayBox()

일 드롭다운 리스트를 생성합니다.

javascript
const days = gfSetDayBox()
-// [{ code: '01', name: '01일' }, ...]

관련 문서

`,49)]))}const c=s(h,[["render",n]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_date.md.BYdslHtu.lean.js b/assets/utilities_date.md.BYdslHtu.lean.js deleted file mode 100644 index 1cc9069..0000000 --- a/assets/utilities_date.md.BYdslHtu.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"날짜 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/date.md","filePath":"utilities/date.md"}'),h={name:"utilities/date.md"};function n(p,a,l,d,k,r){return t(),i("div",null,a[0]||(a[0]=[e("",49)]))}const c=s(h,[["render",n]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_date.md.wG1ujv8-.js b/assets/utilities_date.md.wG1ujv8-.js new file mode 100644 index 0000000..448c285 --- /dev/null +++ b/assets/utilities_date.md.wG1ujv8-.js @@ -0,0 +1,8 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"날짜 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/date.md","filePath":"utilities/date.md"}'),h={name:"utilities/date.md"};function n(p,a,l,d,k,r){return t(),i("div",null,a[0]||(a[0]=[e(`

날짜 처리

개요

common.js에서 제공하는 날짜/시간 처리 함수들입니다.

주요 함수

gfFormatDateString(dateStr, delimiter)

날짜 문자열을 포맷팅합니다.

javascript
gfFormatDateString('20240101', '.') // '2024.01.01'
+gfFormatDateString('20240101', '-') // '2024-01-01'

gfFormatDateTime(date)

날짜를 yyyyMMddHHmmss 형식으로 변환합니다.

javascript
gfFormatDateTime(new Date()) // '20240101120000'

gfFormatDateTimeString(pDate)

날짜를 yyyy-MM-dd HH:mm:ss 형식으로 변환합니다.

javascript
gfFormatDateTimeString(new Date()) // '2024-01-01 12:00:00'

gfAddDay(date, add)

날짜에 일수를 더하거나 뺍니다.

javascript
const today = new Date()
+gfAddDay(today, 1)   // 내일 (yyyyMMdd)
+gfAddDay(today, -1)  // 어제 (yyyyMMdd)

gfDiffDate(fromDate, toDate)

두 날짜 사이의 일수 차이를 계산합니다.

javascript
gfDiffDate('20240101', '20240110') // 9

gfAddMonth(date, val)

날짜에 개월수를 더하거나 뺍니다.

javascript
const date = new Date('2024-01-15')
+gfAddMonth(date, 1)  // '2024-02-15'

gfFormatDateWithSep(date)

8자리 날짜에 '-'를 추가합니다.

javascript
gfFormatDateWithSep('20240101') // '2024-01-01'

gfTimestampToDateStr(date)

타임스탬프를 'yyyy-mm-dd' 형식으로 변환합니다.

javascript
gfTimestampToDateStr(1704067200000) // '2024-01-01'

gfConvertTimestamp(pDate)

타임스탬프를 'yyyy-mm-dd HH:mm:ss' 형식으로 변환합니다.

javascript
gfConvertTimestamp(1704067200000) // '2024-01-01 12:00:00'

gfToday()

오늘 날짜를 yyyyMMdd 형식으로 반환합니다.

javascript
gfToday() // '20240101'

gfDayFormat(str)

오늘 날짜를 지정된 구분자로 포맷팅합니다.

javascript
gfDayFormat('.') // '2024.01.01'

날짜 드롭다운 생성

gfSetYearBox()

연도 드롭다운 리스트를 생성합니다.

javascript
const years = gfSetYearBox()
+// [{ code: '2024', name: '2024년' }, ...]

gfSetMonthBox()

월 드롭다운 리스트를 생성합니다.

javascript
const months = gfSetMonthBox()
+// [{ code: '01', name: '01월' }, ...]

gfSetDayBox()

일 드롭다운 리스트를 생성합니다.

javascript
const days = gfSetDayBox()
+// [{ code: '01', name: '01일' }, ...]

관련 문서

`,49)]))}const c=s(h,[["render",n]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_date.md.wG1ujv8-.lean.js b/assets/utilities_date.md.wG1ujv8-.lean.js new file mode 100644 index 0000000..2b4f483 --- /dev/null +++ b/assets/utilities_date.md.wG1ujv8-.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"날짜 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/date.md","filePath":"utilities/date.md"}'),h={name:"utilities/date.md"};function n(p,a,l,d,k,r){return t(),i("div",null,a[0]||(a[0]=[e("",49)]))}const c=s(h,[["render",n]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_excel.md.BSmwE3P_.js b/assets/utilities_excel.md.BSmwE3P_.js new file mode 100644 index 0000000..00ff8de --- /dev/null +++ b/assets/utilities_excel.md.BSmwE3P_.js @@ -0,0 +1,27 @@ +import{_ as i,c as a,o as l,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Excel 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/excel.md","filePath":"utilities/excel.md"}'),n={name:"utilities/excel.md"};function h(t,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[e(`

Excel 처리

개요

ExcelJS를 사용한 Excel 파일 처리 함수들입니다.

주요 함수

gfHtmlExcelDown(obj)

HTML 테이블을 Excel로 다운로드합니다.

파라미터:

  • obj.fileName: 파일명
  • obj.sheetName: 시트명
  • obj.heads: 헤더 정보
  • obj.data: 데이터
  • obj.dataStartColumn: 데이터 시작 컬럼 (예: 'A5')

사용 예제:

javascript
gfHtmlExcelDown({
+  fileName: '직원목록',
+  sheetName: 'Sheet1',
+  heads: [
+    { column: 'A1', text: '사원번호' },
+    { column: 'B1', text: '이름' },
+  ],
+  data: [
+    ['E001', '홍길동'],
+    ['E002', '김철수'],
+  ],
+  dataStartColumn: 'A2',
+})

gfSaveTableAsExcel(id, fileName)

HTML 테이블을 Excel로 저장합니다.

파라미터:

  • id: 테이블 ID
  • fileName: 파일명

사용 예제:

javascript
gfSaveTableAsExcel('myTable', '직원목록')

gfSaveAgGridAsExcel(gridApi, fileName)

AG Grid를 Excel로 저장합니다.

파라미터:

  • gridApi: AG Grid API
  • fileName: 파일명

사용 예제:

javascript
const gridApi = gridRef.value.api
+await gfSaveAgGridAsExcel(gridApi, '그리드데이터')

gfSaveAgGridAsExcel_2(columns, rowData, fileName)

AG Grid의 컬럼 정의와 데이터를 Excel로 저장합니다.

파라미터:

  • columns: 컬럼 정의 배열
  • rowData: 행 데이터 배열
  • fileName: 파일명

사용 예제:

javascript
await gfSaveAgGridAsExcel_2(columnDefs.value, rowData.value, '그리드데이터')

ExcelJS 직접 사용

javascript
import ExcelJS from 'exceljs'
+import FileSaver from 'file-saver'
+
+const workbook = new ExcelJS.Workbook()
+const worksheet = workbook.addWorksheet('Sheet1')
+
+// 데이터 추가
+worksheet.addRow(['이름', '나이'])
+worksheet.addRow(['홍길동', 30])
+
+// 파일 생성
+const buffer = await workbook.xlsx.writeBuffer()
+const blob = new Blob([buffer])
+FileSaver.saveAs(blob, 'data.xlsx')

관련 문서

`,32)]))}const o=i(n,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/utilities_excel.md.BSmwE3P_.lean.js b/assets/utilities_excel.md.BSmwE3P_.lean.js new file mode 100644 index 0000000..86be523 --- /dev/null +++ b/assets/utilities_excel.md.BSmwE3P_.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as l,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"Excel 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/excel.md","filePath":"utilities/excel.md"}'),n={name:"utilities/excel.md"};function h(t,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[e("",32)]))}const o=i(n,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/utilities_excel.md.CQ4RImKr.js b/assets/utilities_excel.md.CQ4RImKr.js deleted file mode 100644 index 58e9384..0000000 --- a/assets/utilities_excel.md.CQ4RImKr.js +++ /dev/null @@ -1,27 +0,0 @@ -import{_ as i,c as a,o as l,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Excel 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/excel.md","filePath":"utilities/excel.md"}'),n={name:"utilities/excel.md"};function h(t,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[e(`

Excel 처리

개요

ExcelJS를 사용한 Excel 파일 처리 함수들입니다.

주요 함수

gfHtmlExcelDown(obj)

HTML 테이블을 Excel로 다운로드합니다.

파라미터:

  • obj.fileName: 파일명
  • obj.sheetName: 시트명
  • obj.heads: 헤더 정보
  • obj.data: 데이터
  • obj.dataStartColumn: 데이터 시작 컬럼 (예: 'A5')

사용 예제:

javascript
gfHtmlExcelDown({
-  fileName: '직원목록',
-  sheetName: 'Sheet1',
-  heads: [
-    { column: 'A1', text: '사원번호' },
-    { column: 'B1', text: '이름' },
-  ],
-  data: [
-    ['E001', '홍길동'],
-    ['E002', '김철수'],
-  ],
-  dataStartColumn: 'A2',
-})

gfSaveTableAsExcel(id, fileName)

HTML 테이블을 Excel로 저장합니다.

파라미터:

  • id: 테이블 ID
  • fileName: 파일명

사용 예제:

javascript
gfSaveTableAsExcel('myTable', '직원목록')

gfSaveAgGridAsExcel(gridApi, fileName)

AG Grid를 Excel로 저장합니다.

파라미터:

  • gridApi: AG Grid API
  • fileName: 파일명

사용 예제:

javascript
const gridApi = gridRef.value.api
-await gfSaveAgGridAsExcel(gridApi, '그리드데이터')

gfSaveAgGridAsExcel_2(columns, rowData, fileName)

AG Grid의 컬럼 정의와 데이터를 Excel로 저장합니다.

파라미터:

  • columns: 컬럼 정의 배열
  • rowData: 행 데이터 배열
  • fileName: 파일명

사용 예제:

javascript
await gfSaveAgGridAsExcel_2(columnDefs.value, rowData.value, '그리드데이터')

ExcelJS 직접 사용

javascript
import ExcelJS from 'exceljs'
-import FileSaver from 'file-saver'
-
-const workbook = new ExcelJS.Workbook()
-const worksheet = workbook.addWorksheet('Sheet1')
-
-// 데이터 추가
-worksheet.addRow(['이름', '나이'])
-worksheet.addRow(['홍길동', 30])
-
-// 파일 생성
-const buffer = await workbook.xlsx.writeBuffer()
-const blob = new Blob([buffer])
-FileSaver.saveAs(blob, 'data.xlsx')

관련 문서

`,32)]))}const o=i(n,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/utilities_excel.md.CQ4RImKr.lean.js b/assets/utilities_excel.md.CQ4RImKr.lean.js deleted file mode 100644 index e1bce1e..0000000 --- a/assets/utilities_excel.md.CQ4RImKr.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as l,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"Excel 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/excel.md","filePath":"utilities/excel.md"}'),n={name:"utilities/excel.md"};function h(t,s,p,k,r,d){return l(),a("div",null,s[0]||(s[0]=[e("",32)]))}const o=i(n,[["render",h]]);export{g as __pageData,o as default}; diff --git a/assets/utilities_fcm.md.Bi1h1ol2.js b/assets/utilities_fcm.md.Bi1h1ol2.js deleted file mode 100644 index d867dba..0000000 --- a/assets/utilities_fcm.md.Bi1h1ol2.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"FCM 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/fcm.md","filePath":"utilities/fcm.md"}'),l={name:"utilities/fcm.md"};function n(o,a,h,p,d,r){return t(),i("div",null,a[0]||(a[0]=[e(`

FCM 유틸리티

개요

FCM 모듈에서 사용하는 유틸리티 함수들입니다. 현재 src/utils/common/comfcm.js 파일에 FCM 관련 유틸리티 함수들이 주석 처리되어 있습니다.

파일 위치

src/utils/common/comfcm.js

현재 상태

현재 comfcm.js 파일에는 대부분의 함수가 주석 처리되어 있습니다. 이는 레거시 코드이거나 향후 사용을 위해 보관된 것으로 보입니다.

주요 함수 (주석 처리됨)

gfIsEmpty(obj)

빈값 체크 함수입니다.

파라미터:

  • obj: 체크할 값

반환값:

  • boolean: 빈값이면 true, 아니면 false

사용 예제:

javascript
// 주석 처리된 코드
-// const isEmpty = gfIsEmpty(value)

gfAddDay(date, add)

날짜에 증감 일수를 계산하고 yyyyMMdd 형식의 문자열을 반환합니다.

파라미터:

  • date: 계산할 날짜 객체
  • add: 증감 일수

반환값:

  • string: yyyyMMdd 형식의 날짜 문자열

gfObjectToString(obj, log)

Object를 String(콤마)으로 변환합니다.

파라미터:

  • obj: 변환할 객체
  • log: 로그 출력 여부

반환값:

  • string: 변환된 문자열

gfGetThreeComma(val)

값을 쓰리콤마로 변경합니다.

파라미터:

  • val: 변환할 값

반환값:

  • string: 쓰리콤마가 적용된 문자열

예제:

javascript
// 1000000 → "1,000,000"

활성화된 함수

현재 활성화되어 사용 가능한 함수는 없습니다. 모든 함수가 주석 처리되어 있습니다.

사용 가이드

함수 활성화

필요한 함수를 사용하려면 주석을 해제하고 common.js에서 export해야 합니다:

javascript
// comfcm.js에서 주석 해제
-export const gfIsEmpty = function (obj) {
-  // 함수 구현
-}
-
-// common.js에서 import
-import { gfIsEmpty } from '@/utils/common/comfcm.js'

대안 사용

현재 활성화된 함수는 common.js에서 사용할 수 있습니다:

javascript
import { gfIsEmpty, gfAddDay } from '@/utils/common/common.js'
-
-const isEmpty = gfIsEmpty(value)
-const nextDate = gfAddDay(new Date(), 7)

향후 계획

FCM 모듈 전용 유틸리티 함수가 필요할 경우, comfcm.js 파일의 주석을 해제하거나 새로운 함수를 추가할 수 있습니다.

관련 문서

`,49)]))}const g=s(l,[["render",n]]);export{k as __pageData,g as default}; diff --git a/assets/utilities_fcm.md.Bi1h1ol2.lean.js b/assets/utilities_fcm.md.Bi1h1ol2.lean.js deleted file mode 100644 index a2c318f..0000000 --- a/assets/utilities_fcm.md.Bi1h1ol2.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const k=JSON.parse('{"title":"FCM 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/fcm.md","filePath":"utilities/fcm.md"}'),l={name:"utilities/fcm.md"};function n(o,a,h,p,d,r){return t(),i("div",null,a[0]||(a[0]=[e("",49)]))}const g=s(l,[["render",n]]);export{k as __pageData,g as default}; diff --git a/assets/utilities_fcm.md.D1SFz8Ed.js b/assets/utilities_fcm.md.D1SFz8Ed.js new file mode 100644 index 0000000..70ab030 --- /dev/null +++ b/assets/utilities_fcm.md.D1SFz8Ed.js @@ -0,0 +1,11 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"FCM 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/fcm.md","filePath":"utilities/fcm.md"}'),l={name:"utilities/fcm.md"};function n(o,a,h,p,d,r){return t(),i("div",null,a[0]||(a[0]=[e(`

FCM 유틸리티

개요

FCM 모듈에서 사용하는 유틸리티 함수들입니다. 현재 src/utils/common/comfcm.js 파일에 FCM 관련 유틸리티 함수들이 주석 처리되어 있습니다.

파일 위치

src/utils/common/comfcm.js

현재 상태

현재 comfcm.js 파일에는 대부분의 함수가 주석 처리되어 있습니다. 이는 레거시 코드이거나 향후 사용을 위해 보관된 것으로 보입니다.

주요 함수 (주석 처리됨)

gfIsEmpty(obj)

빈값 체크 함수입니다.

파라미터:

  • obj: 체크할 값

반환값:

  • boolean: 빈값이면 true, 아니면 false

사용 예제:

javascript
// 주석 처리된 코드
+// const isEmpty = gfIsEmpty(value)

gfAddDay(date, add)

날짜에 증감 일수를 계산하고 yyyyMMdd 형식의 문자열을 반환합니다.

파라미터:

  • date: 계산할 날짜 객체
  • add: 증감 일수

반환값:

  • string: yyyyMMdd 형식의 날짜 문자열

gfObjectToString(obj, log)

Object를 String(콤마)으로 변환합니다.

파라미터:

  • obj: 변환할 객체
  • log: 로그 출력 여부

반환값:

  • string: 변환된 문자열

gfGetThreeComma(val)

값을 쓰리콤마로 변경합니다.

파라미터:

  • val: 변환할 값

반환값:

  • string: 쓰리콤마가 적용된 문자열

예제:

javascript
// 1000000 → "1,000,000"

활성화된 함수

현재 활성화되어 사용 가능한 함수는 없습니다. 모든 함수가 주석 처리되어 있습니다.

사용 가이드

함수 활성화

필요한 함수를 사용하려면 주석을 해제하고 common.js에서 export해야 합니다:

javascript
// comfcm.js에서 주석 해제
+export const gfIsEmpty = function (obj) {
+  // 함수 구현
+}
+
+// common.js에서 import
+import { gfIsEmpty } from '@/utils/common/comfcm.js'

대안 사용

현재 활성화된 함수는 common.js에서 사용할 수 있습니다:

javascript
import { gfIsEmpty, gfAddDay } from '@/utils/common/common.js'
+
+const isEmpty = gfIsEmpty(value)
+const nextDate = gfAddDay(new Date(), 7)

향후 계획

FCM 모듈 전용 유틸리티 함수가 필요할 경우, comfcm.js 파일의 주석을 해제하거나 새로운 함수를 추가할 수 있습니다.

관련 문서

`,49)]))}const g=s(l,[["render",n]]);export{k as __pageData,g as default}; diff --git a/assets/utilities_fcm.md.D1SFz8Ed.lean.js b/assets/utilities_fcm.md.D1SFz8Ed.lean.js new file mode 100644 index 0000000..170fe7f --- /dev/null +++ b/assets/utilities_fcm.md.D1SFz8Ed.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const k=JSON.parse('{"title":"FCM 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/fcm.md","filePath":"utilities/fcm.md"}'),l={name:"utilities/fcm.md"};function n(o,a,h,p,d,r){return t(),i("div",null,a[0]||(a[0]=[e("",49)]))}const g=s(l,[["render",n]]);export{k as __pageData,g as default}; diff --git a/assets/utilities_file.md.9j-Wbup5.js b/assets/utilities_file.md.9j-Wbup5.js new file mode 100644 index 0000000..0c05cb4 --- /dev/null +++ b/assets/utilities_file.md.9j-Wbup5.js @@ -0,0 +1,17 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/file.md","filePath":"utilities/file.md"}'),e={name:"utilities/file.md"};function t(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 처리

개요

common.js에서 제공하는 파일 처리 함수들입니다.

주요 함수

gfFileDownload(obj)

서버에 저장된 파일을 다운로드합니다.

파라미터:

  • obj.p_serverFileName: 서버 파일명
  • obj.p_LangID: 언어 ID
  • obj.p_UserID: 사용자 ID
  • obj.p_ipAddress: IP 주소

사용 예제:

javascript
await gfFileDownload({
+  p_serverFileName: 'file123',
+  p_LangID: 'KOR',
+  p_UserID: 'user123',
+  p_ipAddress: '192.168.1.1',
+})

gfGetUserImage(empCode, compCode)

사용자 이미지를 가져옵니다.

파라미터:

  • empCode: 사원 코드
  • compCode: 회사 코드

반환값:

  • Blob URL (이미지 URL)

사용 예제:

javascript
const imageUrl = await gfGetUserImage('E001', '1000')
+// imageUrl을 img 태그의 src에 사용

파일 다운로드

일반적인 파일 다운로드:

javascript
const response = await axiosInstance.post('/api/download', params, {
+  responseType: 'blob',
+})
+
+const url = window.URL.createObjectURL(new Blob([response.data]))
+const link = document.createElement('a')
+link.href = url
+link.setAttribute('download', response.data.fileName)
+document.body.appendChild(link)
+link.click()
+link.remove()

관련 문서

`,23)]))}const g=i(e,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/utilities_file.md.9j-Wbup5.lean.js b/assets/utilities_file.md.9j-Wbup5.lean.js new file mode 100644 index 0000000..3108820 --- /dev/null +++ b/assets/utilities_file.md.9j-Wbup5.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/file.md","filePath":"utilities/file.md"}'),e={name:"utilities/file.md"};function t(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l("",23)]))}const g=i(e,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/utilities_file.md.CYP8n-g5.js b/assets/utilities_file.md.CYP8n-g5.js deleted file mode 100644 index 6addded..0000000 --- a/assets/utilities_file.md.CYP8n-g5.js +++ /dev/null @@ -1,17 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/file.md","filePath":"utilities/file.md"}'),e={name:"utilities/file.md"};function t(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l(`

파일 처리

개요

common.js에서 제공하는 파일 처리 함수들입니다.

주요 함수

gfFileDownload(obj)

서버에 저장된 파일을 다운로드합니다.

파라미터:

  • obj.p_serverFileName: 서버 파일명
  • obj.p_LangID: 언어 ID
  • obj.p_UserID: 사용자 ID
  • obj.p_ipAddress: IP 주소

사용 예제:

javascript
await gfFileDownload({
-  p_serverFileName: 'file123',
-  p_LangID: 'KOR',
-  p_UserID: 'user123',
-  p_ipAddress: '192.168.1.1',
-})

gfGetUserImage(empCode, compCode)

사용자 이미지를 가져옵니다.

파라미터:

  • empCode: 사원 코드
  • compCode: 회사 코드

반환값:

  • Blob URL (이미지 URL)

사용 예제:

javascript
const imageUrl = await gfGetUserImage('E001', '1000')
-// imageUrl을 img 태그의 src에 사용

파일 다운로드

일반적인 파일 다운로드:

javascript
const response = await axiosInstance.post('/api/download', params, {
-  responseType: 'blob',
-})
-
-const url = window.URL.createObjectURL(new Blob([response.data]))
-const link = document.createElement('a')
-link.href = url
-link.setAttribute('download', response.data.fileName)
-document.body.appendChild(link)
-link.click()
-link.remove()

관련 문서

`,23)]))}const g=i(e,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/utilities_file.md.CYP8n-g5.lean.js b/assets/utilities_file.md.CYP8n-g5.lean.js deleted file mode 100644 index 904f991..0000000 --- a/assets/utilities_file.md.CYP8n-g5.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as l}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"파일 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/file.md","filePath":"utilities/file.md"}'),e={name:"utilities/file.md"};function t(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l("",23)]))}const g=i(e,[["render",t]]);export{o as __pageData,g as default}; diff --git a/assets/utilities_indexeddb.md.C2EZ34yS.js b/assets/utilities_indexeddb.md.C2EZ34yS.js deleted file mode 100644 index 25c1826..0000000 --- a/assets/utilities_indexeddb.md.C2EZ34yS.js +++ /dev/null @@ -1,22 +0,0 @@ -import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"IndexedDB 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/indexeddb.md","filePath":"utilities/indexeddb.md"}'),t={name:"utilities/indexeddb.md"};function l(h,s,p,d,k,r){return e(),i("div",null,s[0]||(s[0]=[n(`

IndexedDB 유틸리티

개요

IndexedDB를 사용하여 대용량 데이터를 브라우저에 저장하는 유틸리티입니다.

파일 위치

src/utils/indexedDbUtil.js

주요 함수

saveToIndexedDB(key, value)

데이터를 IndexedDB에 저장합니다.

파라미터:

  • key (string): 저장 키
  • value (any): 저장할 데이터

사용 예제:

javascript
import { idbUtil } from '@/utils/indexedDbUtil.js'
-
-const { saveToIndexedDB } = idbUtil()
-
-await saveToIndexedDB('pageData', {
-  formData: { /* 데이터 */ },
-  gridData: [ /* 데이터 */ ],
-})

loadFromIndexedDB(key)

IndexedDB에서 데이터를 불러옵니다.

파라미터:

  • key (string): 불러올 키

반환값:

  • 저장된 데이터

사용 예제:

javascript
const { loadFromIndexedDB } = idbUtil()
-
-const pageData = await loadFromIndexedDB('pageData')

getKeyIndexedDB()

모든 키를 가져옵니다.

반환값:

  • 키 배열

removeKeyIndexedDB(key)

특정 키를 삭제합니다.

파라미터:

  • key (string): 삭제할 키

removeAllKeyIndexedDB()

모든 데이터를 삭제합니다.

getPageData(pageData, callback)

페이지 데이터를 불러오고, 없으면 콜백을 실행합니다.

파라미터:

  • pageData (object): 페이지 데이터 객체
  • callback (function): 데이터가 없을 때 실행할 함수

사용 예제:

javascript
const { getPageData } = idbUtil()
-
-await getPageData(pageData, async () => {
-  // 초기 데이터 로드
-  await loadInitialData()
-})

데이터 압축

데이터는 LZString을 사용하여 압축되어 저장됩니다:

javascript
const compressValue = LZString.compressToUTF16(JSON.stringify(value))

탭 스토어 연동

탭 데이터는 IndexedDB에 자동으로 저장됩니다:

javascript
const tabStore = useTabStore()
-const pageId = tabStore.nowTab
-
-// 페이지 데이터 저장
-await saveToIndexedDB(pageId, pageData)
-
-// 페이지 데이터 불러오기
-const savedData = await loadFromIndexedDB(pageId)

주의사항

  1. 용량 제한: IndexedDB는 브라우저별로 용량 제한이 있습니다.
  2. 비동기 처리: 모든 함수는 비동기이므로 await를 사용하세요.
  3. 에러 처리: try-catch로 에러를 처리하세요.

관련 문서

`,46)]))}const c=a(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_indexeddb.md.C2EZ34yS.lean.js b/assets/utilities_indexeddb.md.C2EZ34yS.lean.js deleted file mode 100644 index e32bf84..0000000 --- a/assets/utilities_indexeddb.md.C2EZ34yS.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"IndexedDB 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/indexeddb.md","filePath":"utilities/indexeddb.md"}'),t={name:"utilities/indexeddb.md"};function l(h,s,p,d,k,r){return e(),i("div",null,s[0]||(s[0]=[n("",46)]))}const c=a(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_indexeddb.md.Cf1n7owb.js b/assets/utilities_indexeddb.md.Cf1n7owb.js new file mode 100644 index 0000000..410e5f7 --- /dev/null +++ b/assets/utilities_indexeddb.md.Cf1n7owb.js @@ -0,0 +1,22 @@ +import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"IndexedDB 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/indexeddb.md","filePath":"utilities/indexeddb.md"}'),t={name:"utilities/indexeddb.md"};function l(h,s,p,d,k,r){return e(),i("div",null,s[0]||(s[0]=[n(`

IndexedDB 유틸리티

개요

IndexedDB를 사용하여 대용량 데이터를 브라우저에 저장하는 유틸리티입니다.

파일 위치

src/utils/indexedDbUtil.js

주요 함수

saveToIndexedDB(key, value)

데이터를 IndexedDB에 저장합니다.

파라미터:

  • key (string): 저장 키
  • value (any): 저장할 데이터

사용 예제:

javascript
import { idbUtil } from '@/utils/indexedDbUtil.js'
+
+const { saveToIndexedDB } = idbUtil()
+
+await saveToIndexedDB('pageData', {
+  formData: { /* 데이터 */ },
+  gridData: [ /* 데이터 */ ],
+})

loadFromIndexedDB(key)

IndexedDB에서 데이터를 불러옵니다.

파라미터:

  • key (string): 불러올 키

반환값:

  • 저장된 데이터

사용 예제:

javascript
const { loadFromIndexedDB } = idbUtil()
+
+const pageData = await loadFromIndexedDB('pageData')

getKeyIndexedDB()

모든 키를 가져옵니다.

반환값:

  • 키 배열

removeKeyIndexedDB(key)

특정 키를 삭제합니다.

파라미터:

  • key (string): 삭제할 키

removeAllKeyIndexedDB()

모든 데이터를 삭제합니다.

getPageData(pageData, callback)

페이지 데이터를 불러오고, 없으면 콜백을 실행합니다.

파라미터:

  • pageData (object): 페이지 데이터 객체
  • callback (function): 데이터가 없을 때 실행할 함수

사용 예제:

javascript
const { getPageData } = idbUtil()
+
+await getPageData(pageData, async () => {
+  // 초기 데이터 로드
+  await loadInitialData()
+})

데이터 압축

데이터는 LZString을 사용하여 압축되어 저장됩니다:

javascript
const compressValue = LZString.compressToUTF16(JSON.stringify(value))

탭 스토어 연동

탭 데이터는 IndexedDB에 자동으로 저장됩니다:

javascript
const tabStore = useTabStore()
+const pageId = tabStore.nowTab
+
+// 페이지 데이터 저장
+await saveToIndexedDB(pageId, pageData)
+
+// 페이지 데이터 불러오기
+const savedData = await loadFromIndexedDB(pageId)

주의사항

  1. 용량 제한: IndexedDB는 브라우저별로 용량 제한이 있습니다.
  2. 비동기 처리: 모든 함수는 비동기이므로 await를 사용하세요.
  3. 에러 처리: try-catch로 에러를 처리하세요.

관련 문서

`,46)]))}const c=a(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_indexeddb.md.Cf1n7owb.lean.js b/assets/utilities_indexeddb.md.Cf1n7owb.lean.js new file mode 100644 index 0000000..c135ce6 --- /dev/null +++ b/assets/utilities_indexeddb.md.Cf1n7owb.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as e,aG as n}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"IndexedDB 유틸리티","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/indexeddb.md","filePath":"utilities/indexeddb.md"}'),t={name:"utilities/indexeddb.md"};function l(h,s,p,d,k,r){return e(),i("div",null,s[0]||(s[0]=[n("",46)]))}const c=a(t,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_number.md.DAM7iLsa.js b/assets/utilities_number.md.DAM7iLsa.js deleted file mode 100644 index 2ac05ad..0000000 --- a/assets/utilities_number.md.DAM7iLsa.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as i,c as a,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"숫자 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/number.md","filePath":"utilities/number.md"}'),h={name:"utilities/number.md"};function n(l,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[e(`

숫자 처리

개요

common.js에서 제공하는 숫자 처리 함수들입니다.

주요 함수

gfNumberFormat(number, decimals, decPoint, thousandsSep)

숫자를 포맷팅합니다.

javascript
gfNumberFormat(1234567)        // '1,234,567'
-gfNumberFormat(1234.56, 2)     // '1,234.56'
-gfNumberFormat(1234.56, 2, ',', '.') // '1.234,56'

gfSetNumber(str)

숫자에 천 단위 구분자를 추가합니다.

javascript
gfSetNumber('1234567') // '1,234,567'
-gfSetNumber('1234.56') // '1,234.56'

gfGetComma(val)

값을 천 단위 구분자로 포맷팅합니다.

javascript
gfGetComma(1234567) // '1,234,567'

gfGetThreeComma(val)

값을 천 단위 구분자로 포맷팅합니다.

javascript
gfGetThreeComma(1234567) // '1,234,567'

gfrRemoveComma(val)

콤마를 제거합니다.

javascript
gfrRemoveComma('1,234,567') // '1234567'

gfFillZeros(n, digits)

숫자를 지정된 자릿수로 0을 채워 포맷팅합니다.

javascript
gfFillZeros(5, 3) // '005'
-gfFillZeros(123, 3) // '123'

gfGetNumber(str)

문자열에서 숫자만 추출합니다.

javascript
gfGetNumber('abc123def456') // 123456

gfGetRound(val, unit)

숫자를 반올림합니다.

javascript
gfGetRound(123.456, 2) // 123.46
-gfGetRound(123.456, 0) // 123

관련 문서

`,30)]))}const c=i(h,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/utilities_number.md.DAM7iLsa.lean.js b/assets/utilities_number.md.DAM7iLsa.lean.js deleted file mode 100644 index 2f072d2..0000000 --- a/assets/utilities_number.md.DAM7iLsa.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const o=JSON.parse('{"title":"숫자 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/number.md","filePath":"utilities/number.md"}'),h={name:"utilities/number.md"};function n(l,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[e("",30)]))}const c=i(h,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/utilities_number.md.DD0Wkd8E.js b/assets/utilities_number.md.DD0Wkd8E.js new file mode 100644 index 0000000..710073b --- /dev/null +++ b/assets/utilities_number.md.DD0Wkd8E.js @@ -0,0 +1,6 @@ +import{_ as i,c as a,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"숫자 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/number.md","filePath":"utilities/number.md"}'),h={name:"utilities/number.md"};function n(l,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[e(`

숫자 처리

개요

common.js에서 제공하는 숫자 처리 함수들입니다.

주요 함수

gfNumberFormat(number, decimals, decPoint, thousandsSep)

숫자를 포맷팅합니다.

javascript
gfNumberFormat(1234567)        // '1,234,567'
+gfNumberFormat(1234.56, 2)     // '1,234.56'
+gfNumberFormat(1234.56, 2, ',', '.') // '1.234,56'

gfSetNumber(str)

숫자에 천 단위 구분자를 추가합니다.

javascript
gfSetNumber('1234567') // '1,234,567'
+gfSetNumber('1234.56') // '1,234.56'

gfGetComma(val)

값을 천 단위 구분자로 포맷팅합니다.

javascript
gfGetComma(1234567) // '1,234,567'

gfGetThreeComma(val)

값을 천 단위 구분자로 포맷팅합니다.

javascript
gfGetThreeComma(1234567) // '1,234,567'

gfrRemoveComma(val)

콤마를 제거합니다.

javascript
gfrRemoveComma('1,234,567') // '1234567'

gfFillZeros(n, digits)

숫자를 지정된 자릿수로 0을 채워 포맷팅합니다.

javascript
gfFillZeros(5, 3) // '005'
+gfFillZeros(123, 3) // '123'

gfGetNumber(str)

문자열에서 숫자만 추출합니다.

javascript
gfGetNumber('abc123def456') // 123456

gfGetRound(val, unit)

숫자를 반올림합니다.

javascript
gfGetRound(123.456, 2) // 123.46
+gfGetRound(123.456, 0) // 123

관련 문서

`,30)]))}const c=i(h,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/utilities_number.md.DD0Wkd8E.lean.js b/assets/utilities_number.md.DD0Wkd8E.lean.js new file mode 100644 index 0000000..0cb6dc8 --- /dev/null +++ b/assets/utilities_number.md.DD0Wkd8E.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const o=JSON.parse('{"title":"숫자 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/number.md","filePath":"utilities/number.md"}'),h={name:"utilities/number.md"};function n(l,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[e("",30)]))}const c=i(h,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/utilities_string.md._tmO6er_.js b/assets/utilities_string.md._tmO6er_.js new file mode 100644 index 0000000..ab292e0 --- /dev/null +++ b/assets/utilities_string.md._tmO6er_.js @@ -0,0 +1,5 @@ +import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"문자열 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/string.md","filePath":"utilities/string.md"}'),h={name:"utilities/string.md"};function n(l,s,p,r,k,o){return t(),i("div",null,s[0]||(s[0]=[e(`

문자열 처리

개요

common.js에서 제공하는 문자열 처리 함수들입니다.

주요 함수

gfTrim(str)

문자열의 앞뒤 공백을 제거합니다.

javascript
gfTrim('  hello  ') // 'hello'

gfCamelToSnakeUpper(str)

카멜케이스를 대문자 스네이크케이스로 변환합니다.

javascript
gfCamelToSnakeUpper('userName') // 'USER_NAME'

gfSnakeToCamel(str)

스네이크케이스를 카멜케이스로 변환합니다.

javascript
gfSnakeToCamel('user_name') // 'userName'

gfFormIdStr(val)

URL에서 formId를 추출합니다.

javascript
gfFormIdStr('/ess/persadm/MyPage.do') // 'MyPage.do'

gfSetClobData(strString, strAppend, strSeparator, strNull)

CLOB 문자를 만듭니다.

javascript
let result = ''
+result = gfSetClobData('value1', result, '^', ' ')
+result = gfSetClobData('value2', result, '^', ' ')
+// result: 'value1^value2^'

gfObjectToString(obj, log)

객체를 문자열로 변환합니다.

javascript
const obj = { name: '홍길동', age: 30 }
+gfObjectToString(obj) // '홍길동∥30'

전화번호 처리

gfCheckPhoneHyphen(phoneNum)

전화번호에 하이픈을 추가합니다.

javascript
gfCheckPhoneHyphen('01012345678') // '010-1234-5678'

gfCheckPhoneNumber(p_num)

전화번호 유효성을 검증합니다.

javascript
gfCheckPhoneNumber('010-1234-5678') // true

gfMobliePhoneFormat(str)

모바일 전화번호를 포맷팅합니다.

javascript
gfMobliePhoneFormat('01012345678') // '010-1234-5678'

관련 문서

`,34)]))}const c=a(h,[["render",n]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_string.md._tmO6er_.lean.js b/assets/utilities_string.md._tmO6er_.lean.js new file mode 100644 index 0000000..fafe9c1 --- /dev/null +++ b/assets/utilities_string.md._tmO6er_.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"문자열 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/string.md","filePath":"utilities/string.md"}'),h={name:"utilities/string.md"};function n(l,s,p,r,k,o){return t(),i("div",null,s[0]||(s[0]=[e("",34)]))}const c=a(h,[["render",n]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_string.md.fMLFmV49.js b/assets/utilities_string.md.fMLFmV49.js deleted file mode 100644 index b2838f6..0000000 --- a/assets/utilities_string.md.fMLFmV49.js +++ /dev/null @@ -1,5 +0,0 @@ -import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"문자열 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/string.md","filePath":"utilities/string.md"}'),h={name:"utilities/string.md"};function n(l,s,p,r,k,o){return t(),i("div",null,s[0]||(s[0]=[e(`

문자열 처리

개요

common.js에서 제공하는 문자열 처리 함수들입니다.

주요 함수

gfTrim(str)

문자열의 앞뒤 공백을 제거합니다.

javascript
gfTrim('  hello  ') // 'hello'

gfCamelToSnakeUpper(str)

카멜케이스를 대문자 스네이크케이스로 변환합니다.

javascript
gfCamelToSnakeUpper('userName') // 'USER_NAME'

gfSnakeToCamel(str)

스네이크케이스를 카멜케이스로 변환합니다.

javascript
gfSnakeToCamel('user_name') // 'userName'

gfFormIdStr(val)

URL에서 formId를 추출합니다.

javascript
gfFormIdStr('/ess/persadm/MyPage.do') // 'MyPage.do'

gfSetClobData(strString, strAppend, strSeparator, strNull)

CLOB 문자를 만듭니다.

javascript
let result = ''
-result = gfSetClobData('value1', result, '^', ' ')
-result = gfSetClobData('value2', result, '^', ' ')
-// result: 'value1^value2^'

gfObjectToString(obj, log)

객체를 문자열로 변환합니다.

javascript
const obj = { name: '홍길동', age: 30 }
-gfObjectToString(obj) // '홍길동∥30'

전화번호 처리

gfCheckPhoneHyphen(phoneNum)

전화번호에 하이픈을 추가합니다.

javascript
gfCheckPhoneHyphen('01012345678') // '010-1234-5678'

gfCheckPhoneNumber(p_num)

전화번호 유효성을 검증합니다.

javascript
gfCheckPhoneNumber('010-1234-5678') // true

gfMobliePhoneFormat(str)

모바일 전화번호를 포맷팅합니다.

javascript
gfMobliePhoneFormat('01012345678') // '010-1234-5678'

관련 문서

`,34)]))}const c=a(h,[["render",n]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_string.md.fMLFmV49.lean.js b/assets/utilities_string.md.fMLFmV49.lean.js deleted file mode 100644 index 49f47d8..0000000 --- a/assets/utilities_string.md.fMLFmV49.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as t,aG as e}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"문자열 처리","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/string.md","filePath":"utilities/string.md"}'),h={name:"utilities/string.md"};function n(l,s,p,r,k,o){return t(),i("div",null,s[0]||(s[0]=[e("",34)]))}const c=a(h,[["render",n]]);export{g as __pageData,c as default}; diff --git a/assets/utilities_validation.md.BbnChQXV.js b/assets/utilities_validation.md.BbnChQXV.js new file mode 100644 index 0000000..cb3252f --- /dev/null +++ b/assets/utilities_validation.md.BbnChQXV.js @@ -0,0 +1,36 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"폼 검증","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/validation.md","filePath":"utilities/validation.md"}'),t={name:"utilities/validation.md"};function l(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

폼 검증

개요

common.js에서 제공하는 검증 함수들입니다.

주요 함수

gfIsEmpty(value)

값이 비어있는지 확인합니다.

javascript
gfIsEmpty('')        // true
+gfIsEmpty(null)      // true
+gfIsEmpty(undefined) // true
+gfIsEmpty([])        // true
+gfIsEmpty({})        // true
+gfIsEmpty('text')    // false

gfIsDate(str)

날짜 형식인지 확인합니다.

javascript
gfIsDate('20240101') // true
+gfIsDate('20241301') // false (잘못된 월)

gfValidateResidentNumber(residentNumber)

주민등록번호를 검증합니다.

javascript
gfValidateResidentNumber('123456-1234567') // true
+gfValidateResidentNumber('123456-1234568') // false

gfCheckPhoneNumber(p_num)

전화번호 유효성을 검증합니다.

javascript
gfCheckPhoneNumber('010-1234-5678') // true
+gfCheckPhoneNumber('123')           // false

폼 검증 예제

vue
<script setup>
+const formData = ref({
+  userName: '',
+  birthDate: '',
+  phoneNumber: '',
+})
+
+const validateForm = () => {
+  // 사용자 이름 검증
+  if (gfIsEmpty(formData.value.userName)) {
+    alert('사용자 이름을 입력해주세요')
+    return false
+  }
+  
+  // 생년월일 검증
+  if (!gfIsDate(formData.value.birthDate)) {
+    alert('올바른 날짜 형식을 입력해주세요')
+    return false
+  }
+  
+  // 전화번호 검증
+  if (!gfCheckPhoneNumber(formData.value.phoneNumber)) {
+    return false
+  }
+  
+  return true
+}
+</script>

관련 문서

`,20)]))}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/utilities_validation.md.BbnChQXV.lean.js b/assets/utilities_validation.md.BbnChQXV.lean.js new file mode 100644 index 0000000..2b408ed --- /dev/null +++ b/assets/utilities_validation.md.BbnChQXV.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.DytOxJW6.js";const g=JSON.parse('{"title":"폼 검증","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/validation.md","filePath":"utilities/validation.md"}'),t={name:"utilities/validation.md"};function l(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",20)]))}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/utilities_validation.md.DUjvh97I.js b/assets/utilities_validation.md.DUjvh97I.js deleted file mode 100644 index 5d32d2e..0000000 --- a/assets/utilities_validation.md.DUjvh97I.js +++ /dev/null @@ -1,36 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"폼 검증","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/validation.md","filePath":"utilities/validation.md"}'),t={name:"utilities/validation.md"};function l(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`

폼 검증

개요

common.js에서 제공하는 검증 함수들입니다.

주요 함수

gfIsEmpty(value)

값이 비어있는지 확인합니다.

javascript
gfIsEmpty('')        // true
-gfIsEmpty(null)      // true
-gfIsEmpty(undefined) // true
-gfIsEmpty([])        // true
-gfIsEmpty({})        // true
-gfIsEmpty('text')    // false

gfIsDate(str)

날짜 형식인지 확인합니다.

javascript
gfIsDate('20240101') // true
-gfIsDate('20241301') // false (잘못된 월)

gfValidateResidentNumber(residentNumber)

주민등록번호를 검증합니다.

javascript
gfValidateResidentNumber('123456-1234567') // true
-gfValidateResidentNumber('123456-1234568') // false

gfCheckPhoneNumber(p_num)

전화번호 유효성을 검증합니다.

javascript
gfCheckPhoneNumber('010-1234-5678') // true
-gfCheckPhoneNumber('123')           // false

폼 검증 예제

vue
<script setup>
-const formData = ref({
-  userName: '',
-  birthDate: '',
-  phoneNumber: '',
-})
-
-const validateForm = () => {
-  // 사용자 이름 검증
-  if (gfIsEmpty(formData.value.userName)) {
-    alert('사용자 이름을 입력해주세요')
-    return false
-  }
-  
-  // 생년월일 검증
-  if (!gfIsDate(formData.value.birthDate)) {
-    alert('올바른 날짜 형식을 입력해주세요')
-    return false
-  }
-  
-  // 전화번호 검증
-  if (!gfCheckPhoneNumber(formData.value.phoneNumber)) {
-    return false
-  }
-  
-  return true
-}
-</script>

관련 문서

`,20)]))}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/utilities_validation.md.DUjvh97I.lean.js b/assets/utilities_validation.md.DUjvh97I.lean.js deleted file mode 100644 index 2f3c831..0000000 --- a/assets/utilities_validation.md.DUjvh97I.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,aG as h}from"./chunks/framework.CrOSaJJH.js";const g=JSON.parse('{"title":"폼 검증","description":"","frontmatter":{},"headers":[],"relativePath":"utilities/validation.md","filePath":"utilities/validation.md"}'),t={name:"utilities/validation.md"};function l(e,s,p,k,r,E){return n(),a("div",null,s[0]||(s[0]=[h("",20)]))}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/backend/api/common/ai.html b/backend/api/common/ai.html index 7fcb3d0..8314a0a 100644 --- a/backend/api/common/ai.html +++ b/backend/api/common/ai.html @@ -6,19 +6,19 @@ AI 서비스 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

AI 서비스 API

Google Gemini AI를 연동하는 API입니다.

기본 정보

  • Base URL: /api/ai
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. Gemini AI 호출

엔드포인트: /api/ai/genai

설명: Google Gemini AI에 요청을 전송하고 응답을 받습니다.

요청 본문:

json
{
+    
Skip to content

AI 서비스 API

Google Gemini AI를 연동하는 API입니다.

기본 정보

  • Base URL: /api/ai
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. Gemini AI 호출

엔드포인트: /api/ai/genai

설명: Google Gemini AI에 요청을 전송하고 응답을 받습니다.

요청 본문:

json
{
   "prompt": "질문 내용",
   "model": "gemini-pro",
   "temperature": 0.7,
@@ -41,8 +41,8 @@
   const aiResponse = response.data.data;
   console.log('AI 응답:', aiResponse);
 }

설정

AI 설정 파일

config/ai-config.yaml에서 API 키를 설정합니다.

yaml
gemini:
-  api-key: your-google-api-key

주의사항

  1. API 키: Google Cloud Console에서 API 키를 발급받아야 합니다.
  2. 비용: Gemini API 사용 시 비용이 발생할 수 있습니다.
  3. Rate Limit: API 호출 제한이 있을 수 있습니다.

다음 단계

- + api-key: your-google-api-key

주의사항

  1. API 키: Google Cloud Console에서 API 키를 발급받아야 합니다.
  2. 비용: Gemini API 사용 시 비용이 발생할 수 있습니다.
  3. Rate Limit: API 호출 제한이 있을 수 있습니다.

다음 단계

+ \ No newline at end of file diff --git a/backend/api/common/auth.html b/backend/api/common/auth.html index 6006ac1..6745e62 100644 --- a/backend/api/common/auth.html +++ b/backend/api/common/auth.html @@ -6,19 +6,19 @@ 인증/토큰 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

인증/토큰 API

JWT 토큰 재발급을 처리하는 API입니다.

기본 정보

  • Base URL: /api/auth
  • HTTP Method: POST
  • 인증: Refresh Token 쿠키 필요 (인증 제외 URI)

API 목록

1. Access Token 재발급

엔드포인트: /api/auth/getAccessToken

설명: Refresh Token을 사용하여 새로운 Access Token을 발급받습니다.

요청:

  • 파라미터: 없음 (쿠키에서 자동 추출)
  • 쿠키:
    • refreshToken: 리프레시 토큰 (HttpOnly)
    • uuid: Redis 키값 (HttpOnly)

동작 순서:

  1. 쿠키에서 refreshToken, uuid 추출
  2. Refresh Token 검증
  3. Redis에서 토큰 정보 조회 및 일치 확인
  4. 새로운 Access Token 생성 및 반환

응답 예시 (성공):

json
{
+    
Skip to content

인증/토큰 API

JWT 토큰 재발급을 처리하는 API입니다.

기본 정보

  • Base URL: /api/auth
  • HTTP Method: POST
  • 인증: Refresh Token 쿠키 필요 (인증 제외 URI)

API 목록

1. Access Token 재발급

엔드포인트: /api/auth/getAccessToken

설명: Refresh Token을 사용하여 새로운 Access Token을 발급받습니다.

요청:

  • 파라미터: 없음 (쿠키에서 자동 추출)
  • 쿠키:
    • refreshToken: 리프레시 토큰 (HttpOnly)
    • uuid: Redis 키값 (HttpOnly)

동작 순서:

  1. 쿠키에서 refreshToken, uuid 추출
  2. Refresh Token 검증
  3. Redis에서 토큰 정보 조회 및 일치 확인
  4. 새로운 Access Token 생성 및 반환

응답 예시 (성공):

json
{
   "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJVU0VSMDAxIiwidG9rZW5fdHlwZSI6ImFjY2VzcyIsImlhdCI6MTcwNDA2NDgwMCwiZXhwIjoxNzA0MDY1NzAwfQ..."
 }

응답 필드:

  • accessToken (String): 새로 발급된 액세스 토큰 (유효기간: 15분)

응답 예시 (실패 - 401):

json
"클라이언트에 토큰 없음"

또는

json
"레디스 디비에 토큰 정보가 없습니다"

또는

json
"Invalid refresh token"

사용 예시:

javascript
// 쿠키는 자동으로 전송됨
 const response = await axios.post('/api/auth/getAccessToken');
@@ -36,8 +36,8 @@
 4. 서버: Redis에서 토큰 정보 조회
 5. 서버: 토큰 일치 확인
 6. 서버: 새 Access Token 생성
-7. 서버 → 클라이언트: 새 Access Token 반환

주의사항

  1. 쿠키 자동 전송: 쿠키는 브라우저에서 자동으로 전송되므로 별도 설정 불필요
  2. CORS 설정: 쿠키 전송을 위해 CORS 설정에서 allowCredentials: true 필요
  3. 토큰 만료: Refresh Token이 만료되면 다시 로그인해야 합니다.
  4. 보안: Refresh Token은 HttpOnly 쿠키로 저장되어 JavaScript에서 접근 불가

다음 단계

- +7. 서버 → 클라이언트: 새 Access Token 반환

주의사항

  1. 쿠키 자동 전송: 쿠키는 브라우저에서 자동으로 전송되므로 별도 설정 불필요
  2. CORS 설정: 쿠키 전송을 위해 CORS 설정에서 allowCredentials: true 필요
  3. 토큰 만료: Refresh Token이 만료되면 다시 로그인해야 합니다.
  4. 보안: Refresh Token은 HttpOnly 쿠키로 저장되어 JavaScript에서 접근 불가

다음 단계

+ \ No newline at end of file diff --git a/backend/api/common/database.html b/backend/api/common/database.html index 1beefee..15608ef 100644 --- a/backend/api/common/database.html +++ b/backend/api/common/database.html @@ -6,19 +6,19 @@ 데이터베이스 프로시저 호출 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

데이터베이스 프로시저 호출 API

데이터베이스 프로시저를 직접 호출하는 API입니다.

기본 정보

  • Base URL: /api/direct
  • HTTP Method: POST
  • 인증: 대부분의 API는 JWT 토큰 필요 (제외 URI는 인증 불필요)

API 목록

1. 단일 프로시저 실행

엔드포인트: /api/direct/call/atomic

설명: 단일 프로시저를 실행하고 결과를 반환합니다.

요청 본문:

json
{
+    
Skip to content

데이터베이스 프로시저 호출 API

데이터베이스 프로시저를 직접 호출하는 API입니다.

기본 정보

  • Base URL: /api/direct
  • HTTP Method: POST
  • 인증: 대부분의 API는 JWT 토큰 필요 (제외 URI는 인증 불필요)

API 목록

1. 단일 프로시저 실행

엔드포인트: /api/direct/call/atomic

설명: 단일 프로시저를 실행하고 결과를 반환합니다.

요청 본문:

json
{
   "procedure": "YOUR_PROCEDURE_NAME",
   "params": {
     "V_P_PARAM1": "value1",
@@ -153,8 +153,8 @@
       "COLUMN3": "value5"
     }
   ]
-}

에러 코드

  • MSG0001: 성공
  • 기타: 에러 코드 (에러 메시지는 V_P_ERROR_STR에 포함)

주의사항

  1. 파라미터명 대소문자: 프로시저 파라미터명은 대문자로 전달하는 것을 권장합니다.
  2. 커서 결과: CV_로 시작하는 키는 자동으로 커서로 인식됩니다.
  3. CLOB 처리: multiSelectList API는 CLOB을 자동으로 문자열로 변환합니다.
  4. 트랜잭션: atomicList는 모든 프로시저가 성공해야 커밋됩니다.

다음 단계

- +}

에러 코드

  • MSG0001: 성공
  • 기타: 에러 코드 (에러 메시지는 V_P_ERROR_STR에 포함)

주의사항

  1. 파라미터명 대소문자: 프로시저 파라미터명은 대문자로 전달하는 것을 권장합니다.
  2. 커서 결과: CV_로 시작하는 키는 자동으로 커서로 인식됩니다.
  3. CLOB 처리: multiSelectList API는 CLOB을 자동으로 문자열로 변환합니다.
  4. 트랜잭션: atomicList는 모든 프로시저가 성공해야 커밋됩니다.

다음 단계

+ \ No newline at end of file diff --git a/backend/api/common/file.html b/backend/api/common/file.html index 14186b6..30e29ce 100644 --- a/backend/api/common/file.html +++ b/backend/api/common/file.html @@ -6,19 +6,19 @@ 파일 관리 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

파일 관리 API

파일 업로드 및 다운로드를 처리하는 API입니다.

기본 정보

  • Base URL: /api/file
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. 다중 파일/링크 업로드

엔드포인트: /api/file/JSONMultiFileUpload

설명: 파일과 링크를 함께 업로드할 수 있습니다. 신규 추가, 수정, 삭제를 한 번에 처리합니다.

요청 형식: multipart/form-data

파라미터:

Form Data

  • slist (String, 필수): URL 인코딩된 JSON 문자열 (파일/링크 목록)
  • files (MultipartFile[], 선택): 실제 파일들
  • user_id (String, 필수): 사용자 ID
  • lang_id (String, 필수): 언어 ID
  • pc (String, 필수): PC 정보
  • source_type (String, 필수): 소스 타입
  • source_code (String, 필수): 소스 코드

slist 구조 (JSON 문자열)

json
[
+    
Skip to content

파일 관리 API

파일 업로드 및 다운로드를 처리하는 API입니다.

기본 정보

  • Base URL: /api/file
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. 다중 파일/링크 업로드

엔드포인트: /api/file/JSONMultiFileUpload

설명: 파일과 링크를 함께 업로드할 수 있습니다. 신규 추가, 수정, 삭제를 한 번에 처리합니다.

요청 형식: multipart/form-data

파라미터:

Form Data

  • slist (String, 필수): URL 인코딩된 JSON 문자열 (파일/링크 목록)
  • files (MultipartFile[], 선택): 실제 파일들
  • user_id (String, 필수): 사용자 ID
  • lang_id (String, 필수): 언어 ID
  • pc (String, 필수): PC 정보
  • source_type (String, 필수): 소스 타입
  • source_code (String, 필수): 소스 코드

slist 구조 (JSON 문자열)

json
[
   {
     "CHG_STAT": "N",
     "ORG_STAT": "",
@@ -123,8 +123,8 @@
 link.setAttribute('download', 'filename.ext');
 document.body.appendChild(link);
 link.click();
-link.remove();

파일 처리 규칙

파일 타입

  • FILE_TYPE="1": 실제 파일 (MultipartFile 필요)
  • FILE_TYPE="2": 링크 (LINK_TXT에 URL 저장)

변경 상태

  • CHG_STAT="N": 신규 추가
  • CHG_STAT="U": 수정
  • CHG_STAT="D": 삭제

파일명 규칙

  • 서버에 저장되는 파일명: UUID 형식 (예: abc123-def456-ghi789.ext)
  • 원본 파일명: TITLE_TXT에 저장
  • 다운로드 시 원본 파일명으로 반환

주의사항

  1. slist 인코딩: slist는 URL 인코딩된 JSON 문자열이어야 합니다.
  2. 파일 순서: files 배열의 순서는 slist에서 FILE_TYPE="1"인 항목의 순서와 일치해야 합니다.
  3. 파일 크기 제한: 기본 100MB (설정에서 변경 가능)
  4. 파일 경로: 서버 파일 경로는 application-dev.yamlfile.path 설정 사용

다음 단계

- +link.remove();

파일 처리 규칙

파일 타입

  • FILE_TYPE="1": 실제 파일 (MultipartFile 필요)
  • FILE_TYPE="2": 링크 (LINK_TXT에 URL 저장)

변경 상태

  • CHG_STAT="N": 신규 추가
  • CHG_STAT="U": 수정
  • CHG_STAT="D": 삭제

파일명 규칙

  • 서버에 저장되는 파일명: UUID 형식 (예: abc123-def456-ghi789.ext)
  • 원본 파일명: TITLE_TXT에 저장
  • 다운로드 시 원본 파일명으로 반환

주의사항

  1. slist 인코딩: slist는 URL 인코딩된 JSON 문자열이어야 합니다.
  2. 파일 순서: files 배열의 순서는 slist에서 FILE_TYPE="1"인 항목의 순서와 일치해야 합니다.
  3. 파일 크기 제한: 기본 100MB (설정에서 변경 가능)
  4. 파일 경로: 서버 파일 경로는 application-dev.yamlfile.path 설정 사용

다음 단계

+ \ No newline at end of file diff --git a/backend/api/common/redis.html b/backend/api/common/redis.html index cccdc16..528e914 100644 --- a/backend/api/common/redis.html +++ b/backend/api/common/redis.html @@ -6,19 +6,19 @@ Redis 관리 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Redis 관리 API

Redis에 저장된 토큰 정보를 조회하고 삭제하는 API입니다.

기본 정보

  • Base URL: /api/direct
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. Redis Hash 데이터 조회

엔드포인트: /api/direct/call/getRedisHashData

설명: Redis에 저장된 토큰 정보를 조회합니다. refreshTokenuuid는 응답에서 제외됩니다.

요청 본문:

json
{
+    
Skip to content

Redis 관리 API

Redis에 저장된 토큰 정보를 조회하고 삭제하는 API입니다.

기본 정보

  • Base URL: /api/direct
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. Redis Hash 데이터 조회

엔드포인트: /api/direct/call/getRedisHashData

설명: Redis에 저장된 토큰 정보를 조회합니다. refreshTokenuuid는 응답에서 제외됩니다.

요청 본문:

json
{
   "session": {
     "UserID": "USER001"
   }
@@ -80,8 +80,8 @@
   uuid: abc123def456
   ipAddress: 192.168.1.100
   userAgent: Mozilla/5.0...
-  createdAt: 2024-01-01 10:00:00

주의사항

  1. 보안: refreshTokenuuid는 응답에서 제외되어 전송되지 않습니다.
  2. 패턴 매칭: 현재는 token:* 패턴만 지원합니다.
  3. 권한: 관리자 권한이 필요한 API일 수 있습니다.

다음 단계

- + createdAt: 2024-01-01 10:00:00

주의사항

  1. 보안: refreshTokenuuid는 응답에서 제외되어 전송되지 않습니다.
  2. 패턴 매칭: 현재는 token:* 패턴만 지원합니다.
  3. 권한: 관리자 권한이 필요한 API일 수 있습니다.

다음 단계

+ \ No newline at end of file diff --git a/backend/api/common/report.html b/backend/api/common/report.html index e04147d..aca8e71 100644 --- a/backend/api/common/report.html +++ b/backend/api/common/report.html @@ -6,19 +6,19 @@ 리포트 생성 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

리포트 생성 API

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 API입니다.

기본 정보

  • Base URL: /api/direct
  • HTTP Method: POST (일부 GET)
  • 인증: JWT 토큰 필요 (일부 제외)

API 목록

1. PDF 리포트 생성 (파일 저장)

엔드포인트: /api/direct/report/pdfView

설명: PDF 리포트를 생성하여 서버에 저장하고 파일명을 반환합니다. 생성된 파일은 10초 후 자동 삭제됩니다.

요청 본문:

json
{
+    
Skip to content

리포트 생성 API

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 API입니다.

기본 정보

  • Base URL: /api/direct
  • HTTP Method: POST (일부 GET)
  • 인증: JWT 토큰 필요 (일부 제외)

API 목록

1. PDF 리포트 생성 (파일 저장)

엔드포인트: /api/direct/report/pdfView

설명: PDF 리포트를 생성하여 서버에 저장하고 파일명을 반환합니다. 생성된 파일은 10초 후 자동 삭제됩니다.

요청 본문:

json
{
   "jr_report": "REPORT_TEMPLATE",
   "procedure": "P_REPORT_DATA",
   "params": {
@@ -74,8 +74,8 @@
   "jr_convert_cv_1/cv_main": "cv_1/cv_main"
 }
  • cv_1 커서를 cv_main이라는 이름으로 복사
  • 리포트 템플릿에서 $P{cv_main}으로 사용 가능

복호화

json
{
   "decrypt_column": "cv_1:social_num|cv_3:emp_name"
-}
  • cv_1 커서의 social_num 컬럼 복호화
  • cv_3 커서의 emp_name 컬럼 복호화
  • AES-128로 복호화

리포트 템플릿 위치

src/main/resources/report/jasperForms/{jr_report}.jrxml

한글 폰트

한글 폰트는 다음 위치에 저장됩니다:

src/main/resources/report/jasperfonts/

지원 폰트:

  • NanumGothic
  • MalgunGothic
  • Gothic A1

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제됩니다.
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자 cv_*로 변환됩니다.
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 합니다.
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화됩니다.

다음 단계

- +}
  • cv_1 커서의 social_num 컬럼 복호화
  • cv_3 커서의 emp_name 컬럼 복호화
  • AES-128로 복호화

리포트 템플릿 위치

src/main/resources/report/jasperForms/{jr_report}.jrxml

한글 폰트

한글 폰트는 다음 위치에 저장됩니다:

src/main/resources/report/jasperfonts/

지원 폰트:

  • NanumGothic
  • MalgunGothic
  • Gothic A1

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제됩니다.
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자 cv_*로 변환됩니다.
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 합니다.
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화됩니다.

다음 단계

+ \ No newline at end of file diff --git a/backend/api/common/sms.html b/backend/api/common/sms.html index ebfdfc1..80c764a 100644 --- a/backend/api/common/sms.html +++ b/backend/api/common/sms.html @@ -6,19 +6,19 @@ SMS 발송 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

SMS 발송 API

SMS 메시지를 발송하는 API입니다.

기본 정보

  • Base URL: /api/admin
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. SMS 메시지 발송

엔드포인트: /api/admin/AsSMSManagement/msgSend

설명: SMS 메시지를 발송합니다. 즉시 발송 또는 예약 발송을 지원합니다.

요청 본문:

json
{
+    
Skip to content

SMS 발송 API

SMS 메시지를 발송하는 API입니다.

기본 정보

  • Base URL: /api/admin
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. SMS 메시지 발송

엔드포인트: /api/admin/AsSMSManagement/msgSend

설명: SMS 메시지를 발송합니다. 즉시 발송 또는 예약 발송을 지원합니다.

요청 본문:

json
{
   "params": {
     "msg_type": "SMS",
     "rev_type": "10",
@@ -88,8 +88,8 @@
     key: Basic Q1BTODQwMDA1ODcxOERPUUZOTzpTVks4NDAwMDU4NzE4R0pVTVdP
     stel: 15883391
     url:
-      sms: https://cpaas.api.kt.com/cpaas/v1.0/CPaaS_sendSMS

메시지 상태

  • 10: 발송 대기
  • 20: 발송 완료
  • 30: 발송 실패

주의사항

  1. 즉시 발송: rev_type="10"인 경우에만 즉시 발송됩니다.
  2. 예약 발송: 스케줄러가 실행되어야 발송됩니다.
  3. 메시지 내용: 특수 문자 제한이 있을 수 있습니다.
  4. 전화번호 형식: 하이픈(-) 없이 숫자만 입력 (예: "01012345678")

다음 단계

- + sms: https://cpaas.api.kt.com/cpaas/v1.0/CPaaS_sendSMS

메시지 상태

  • 10: 발송 대기
  • 20: 발송 완료
  • 30: 발송 실패

주의사항

  1. 즉시 발송: rev_type="10"인 경우에만 즉시 발송됩니다.
  2. 예약 발송: 스케줄러가 실행되어야 발송됩니다.
  3. 메시지 내용: 특수 문자 제한이 있을 수 있습니다.
  4. 전화번호 형식: 하이픈(-) 없이 숫자만 입력 (예: "01012345678")

다음 단계

+ \ No newline at end of file diff --git a/backend/api/ess/login.html b/backend/api/ess/login.html index 6b7ecc8..6d47d0d 100644 --- a/backend/api/ess/login.html +++ b/backend/api/ess/login.html @@ -6,19 +6,19 @@ 로그인/인증 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content
+ \ No newline at end of file diff --git a/backend/api/ess/user.html b/backend/api/ess/user.html index 38c81ab..83c8f62 100644 --- a/backend/api/ess/user.html +++ b/backend/api/ess/user.html @@ -6,19 +6,19 @@ 사용자 관리 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

사용자 관리 API

ESS 모듈의 사용자 관련 API입니다.

기본 정보

  • Base URL: /api/user
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. 사용자 이미지 조회

엔드포인트: /api/user/img/getUserImage

설명: 사번으로 사용자 이미지를 조회합니다.

요청 본문:

json
{
+    
Skip to content

사용자 관리 API

ESS 모듈의 사용자 관련 API입니다.

기본 정보

  • Base URL: /api/user
  • HTTP Method: POST
  • 인증: JWT 토큰 필요

API 목록

1. 사용자 이미지 조회

엔드포인트: /api/user/img/getUserImage

설명: 사번으로 사용자 이미지를 조회합니다.

요청 본문:

json
{
   "emp_code": "USER001"
 }

파라미터:

  • emp_code (String, 필수): 사번

동작:

  1. file.empimg.path 경로에서 {emp_code}.* 패턴의 파일 검색
  2. 첫 번째 매칭 파일 반환
  3. MIME 타입 자동 감지

응답:

  • Content-Type: 이미지 MIME 타입 (예: image/jpeg, image/png)
  • Body: 이미지 바이너리

응답 예시 (실패 - 400):

emp_code 파라미터는 필수값입니다.

응답 예시 (실패 - 404):

이미지가 존재하지 않습니다.

사용 예시:

javascript
// 이미지 조회
 const response = await axios.post('/api/user/img/getUserImage', {
@@ -95,8 +95,8 @@
   console.log('즐겨찾기 수정 성공');
 }

파일 경로 설정

사용자 이미지는 다음 경로에서 조회됩니다:

yaml
file:
   empimg:
-    path: D:\\FileUpload\\HRMaster\\EMP\\

파일명 규칙:

  • {emp_code}.{확장자} 형식
  • 예: USER001.jpg, USER001.png

주의사항

  1. 이미지 파일: 첫 번째 매칭 파일만 반환됩니다.
  2. MIME 타입: 이미지 파일이 아니면 415 에러가 반환됩니다.
  3. 즐겨찾기: 수정 시 SEQ가 일치하는 데이터가 없으면 실패합니다.

다음 단계

- + path: D:\\FileUpload\\HRMaster\\EMP\\

파일명 규칙:

  • {emp_code}.{확장자} 형식
  • 예: USER001.jpg, USER001.png

주의사항

  1. 이미지 파일: 첫 번째 매칭 파일만 반환됩니다.
  2. MIME 타입: 이미지 파일이 아니면 415 에러가 반환됩니다.
  3. 즐겨찾기: 수정 시 SEQ가 일치하는 데이터가 없으면 실패합니다.

다음 단계

+ \ No newline at end of file diff --git a/backend/api/fcm/index.html b/backend/api/fcm/index.html index c5a0b0c..9474427 100644 --- a/backend/api/fcm/index.html +++ b/backend/api/fcm/index.html @@ -6,20 +6,20 @@ FCM 모듈 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

FCM 모듈 API

FCM 모듈의 API입니다.

현재 상태

FCM 모듈의 API는 현재 구현 중입니다.

예정된 API

  • FCM 공통 API
  • FCM HRI API
  • FCM SYS API

다음 단계

- +
Skip to content

FCM 모듈 API

FCM 모듈의 API입니다.

현재 상태

FCM 모듈의 API는 현재 구현 중입니다.

예정된 API

  • FCM 공통 API
  • FCM HRI API
  • FCM SYS API

다음 단계

+ \ No newline at end of file diff --git a/backend/api/index.html b/backend/api/index.html index 9707260..e2253fd 100644 --- a/backend/api/index.html +++ b/backend/api/index.html @@ -6,19 +6,19 @@ API 레퍼런스 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

API 레퍼런스

AxpFramework에서 제공하는 모든 REST API를 확인할 수 있습니다.

API 개요

AxpFramework는 다음과 같은 API 그룹으로 구성되어 있습니다:

  • 공통 프레임워크 API: 데이터베이스, Redis, 인증, 파일, 리포트, AI, SMS 등 공통 기능
  • ESS 모듈 API: 로그인/인증, 사용자 관리 등 ESS 비즈니스 기능
  • FCM 모듈 API: FCM 관련 비즈니스 기능

공통 사항

인증 방법

대부분의 API는 JWT 토큰 인증이 필요합니다.

Access Token 사용

http
Authorization: Bearer {accessToken}

Refresh Token 사용

  • HttpOnly 쿠키로 자동 전송
  • 쿠키명: refreshToken, uuid

공통 응답 형식

모든 API는 다음 형식으로 응답합니다:

성공 응답

json
{
+    
Skip to content

API 레퍼런스

AxpFramework에서 제공하는 모든 REST API를 확인할 수 있습니다.

API 개요

AxpFramework는 다음과 같은 API 그룹으로 구성되어 있습니다:

  • 공통 프레임워크 API: 데이터베이스, Redis, 인증, 파일, 리포트, AI, SMS 등 공통 기능
  • ESS 모듈 API: 로그인/인증, 사용자 관리 등 ESS 비즈니스 기능
  • FCM 모듈 API: FCM 관련 비즈니스 기능

공통 사항

인증 방법

대부분의 API는 JWT 토큰 인증이 필요합니다.

Access Token 사용

http
Authorization: Bearer {accessToken}

Refresh Token 사용

  • HttpOnly 쿠키로 자동 전송
  • 쿠키명: refreshToken, uuid

공통 응답 형식

모든 API는 다음 형식으로 응답합니다:

성공 응답

json
{
   "status": "S",
   "message": "",
   "data": { ... }
@@ -29,8 +29,8 @@
 }

HTTP 상태 코드

  • 200 OK: 정상 처리 (성공/실패 모두 200, status 필드로 구분)
  • 400 Bad Request: 잘못된 요청
  • 401 Unauthorized: 인증 실패
  • 403 Forbidden: 권한 없음
  • 404 Not Found: 리소스 없음
  • 500 Internal Server Error: 서버 오류

요청 형식

모든 API는 POST 메서드를 사용하며, 요청 본문은 JSON 형식입니다.

json
{
   "param1": "value1",
   "param2": "value2"
-}

API 그룹별 링크

공통 프레임워크 API

ESS 모듈 API

FCM 모듈 API

Swagger UI

모든 API는 Swagger UI에서 확인하고 테스트할 수 있습니다.

접근 URL:

http://localhost:8080/swagger-ui.html

다음 단계

- +}

API 그룹별 링크

공통 프레임워크 API

ESS 모듈 API

FCM 모듈 API

Swagger UI

모든 API는 Swagger UI에서 확인하고 테스트할 수 있습니다.

접근 URL:

http://localhost:8080/swagger-ui.html

다음 단계

+ \ No newline at end of file diff --git a/backend/common-features/ai.html b/backend/common-features/ai.html index ede4b0a..a41ccf2 100644 --- a/backend/common-features/ai.html +++ b/backend/common-features/ai.html @@ -6,27 +6,27 @@ AI 서비스 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

AI 서비스

AxpFramework는 Google Gemini AI를 연동합니다.

설정

ai-config.yaml

yaml
gemini:
+    
Skip to content

AI 서비스

AxpFramework는 Google Gemini AI를 연동합니다.

설정

ai-config.yaml

yaml
gemini:
   api-key: your-api-key

사용 예시

java
@Autowired
 private AxpGeminiService geminiService;
 
 Map<String, Object> request = new HashMap<>();
 request.put("prompt", "질문 내용");
 
-String response = geminiService.callGeminiAi(request);

API 엔드포인트

POST /api/ai/genai

다음 단계

- +String response = geminiService.callGeminiAi(request);

API 엔드포인트

POST /api/ai/genai

다음 단계

+ \ No newline at end of file diff --git a/backend/common-features/file.html b/backend/common-features/file.html index 273a251..2d9315a 100644 --- a/backend/common-features/file.html +++ b/backend/common-features/file.html @@ -6,19 +6,19 @@ 파일 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

파일 처리

AxpFramework는 파일 업로드/다운로드 기능을 제공합니다.

파일 업로드

MultipartFile 사용

java
@PostMapping("/upload")
+    
Skip to content

파일 처리

AxpFramework는 파일 업로드/다운로드 기능을 제공합니다.

파일 업로드

MultipartFile 사용

java
@PostMapping("/upload")
 public ResponseEntity<String> uploadFile(
     @RequestParam("file") MultipartFile file
 ) {
@@ -59,8 +59,8 @@
 fileUtil.deleteOne(filePath);
 
 // 디렉토리 생성
-fileUtil.createDirectory(dirPath);

다음 단계

- +fileUtil.createDirectory(dirPath);

다음 단계

+ \ No newline at end of file diff --git a/backend/common-features/logging.html b/backend/common-features/logging.html index 519527e..dd6b0e4 100644 --- a/backend/common-features/logging.html +++ b/backend/common-features/logging.html @@ -6,19 +6,19 @@ 로깅 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

로깅

AxpFramework는 AOP 기반 로깅을 제공합니다.

로깅 어노테이션

@AxpCommLogAnnotation

메서드 실행을 자동으로 로깅합니다.

java
@AxpCommLogAnnotation
+    
Skip to content

로깅

AxpFramework는 AOP 기반 로깅을 제공합니다.

로깅 어노테이션

@AxpCommLogAnnotation

메서드 실행을 자동으로 로깅합니다.

java
@AxpCommLogAnnotation
 public void process(Map<String, Object> param) {
     // 비즈니스 로직
 }

로그 레벨

설정

yaml
logging:
@@ -26,8 +26,8 @@
     org.apache.ibatis: DEBUG
     axpFramework.common.database.mapper: DEBUG

로그 파일

logs/AxpFramework/AxpFramework.log
 logs/ess/ess-log.log
-logs/fcm/fcm-log.log

Logback 설정

logback-spring.xml

로그 포맷, 레벨, 파일 경로 등을 설정합니다.

다음 단계

- +logs/fcm/fcm-log.log

Logback 설정

logback-spring.xml

로그 포맷, 레벨, 파일 경로 등을 설정합니다.

다음 단계

+ \ No newline at end of file diff --git a/backend/common-features/mail.html b/backend/common-features/mail.html index 04a1ec3..b323f0e 100644 --- a/backend/common-features/mail.html +++ b/backend/common-features/mail.html @@ -6,19 +6,19 @@ 메일 발송 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

메일 발송

AxpFramework는 Spring Mail을 사용하여 이메일을 발송합니다.

설정

application.yaml

yaml
spring:
+    
Skip to content

메일 발송

AxpFramework는 Spring Mail을 사용하여 이메일을 발송합니다.

설정

application.yaml

yaml
spring:
   mail:
     host: smtp.gmail.com
     port: 587
@@ -37,8 +37,8 @@
 mailData.put("subject", "제목");
 mailData.put("body", "내용");
 
-mailService.sendMail(mailData);

다음 단계

- +mailService.sendMail(mailData);

다음 단계

+ \ No newline at end of file diff --git a/backend/common-features/report.html b/backend/common-features/report.html index 53231b0..547f4e2 100644 --- a/backend/common-features/report.html +++ b/backend/common-features/report.html @@ -6,19 +6,19 @@ 리포트 생성 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

리포트 생성

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 방법을 설명합니다.

개요

AxpFramework는 JasperReports를 사용하여 다양한 형식의 리포트를 생성할 수 있습니다.

지원 형식:

  • PDF
  • Excel (XLS/XLSX)
  • HTML

리포트 생성 프로세스

1. 리포트 템플릿 작성

리포트 템플릿은 .jrxml 형식으로 작성합니다.

템플릿 위치:

src/main/resources/report/jasperForms/{템플릿명}.jrxml

2. 데이터 조회

프로시저를 호출하여 리포트 데이터를 조회합니다.

java
@Resource(name = "AxpCommDbService")
+    
Skip to content

리포트 생성

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 방법을 설명합니다.

개요

AxpFramework는 JasperReports를 사용하여 다양한 형식의 리포트를 생성할 수 있습니다.

지원 형식:

  • PDF
  • Excel (XLS/XLSX)
  • HTML

리포트 생성 프로세스

1. 리포트 템플릿 작성

리포트 템플릿은 .jrxml 형식으로 작성합니다.

템플릿 위치:

src/main/resources/report/jasperForms/{템플릿명}.jrxml

2. 데이터 조회

프로시저를 호출하여 리포트 데이터를 조회합니다.

java
@Resource(name = "AxpCommDbService")
 private AxpCommDbService axpCommDbService;
 
 Map<String, Object> requestBody = new HashMap<>();
@@ -176,8 +176,8 @@
         
         return baos.toByteArray();
     }
-}

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제됩니다.
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자로 변환됩니다.
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 합니다.
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화됩니다.
  5. 한글 폰트: 한글을 표시하려면 폰트 설정이 필요합니다.

다음 단계

- +}

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제됩니다.
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자로 변환됩니다.
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 합니다.
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화됩니다.
  5. 한글 폰트: 한글을 표시하려면 폰트 설정이 필요합니다.

다음 단계

+ \ No newline at end of file diff --git a/backend/common-features/security.html b/backend/common-features/security.html index 463a5f8..7c523cb 100644 --- a/backend/common-features/security.html +++ b/backend/common-features/security.html @@ -6,19 +6,19 @@ 보안 기능 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

보안 기능

AxpFramework에서 제공하는 보안 관련 기능을 설명합니다.

개요

AxpFramework는 다양한 보안 기능을 제공하여 애플리케이션의 보안을 강화합니다.

주요 기능:

  • 암호화/복호화 (AES-128, RSA)
  • XSS 방지
  • JWT 인증
  • Spring Security 통합

암호화 유틸리티

AES-128

대칭키 암호화 알고리즘입니다.

사용 예시:

java
@Resource(name = "AxpCommAES128")
+    
Skip to content

보안 기능

AxpFramework에서 제공하는 보안 관련 기능을 설명합니다.

개요

AxpFramework는 다양한 보안 기능을 제공하여 애플리케이션의 보안을 강화합니다.

주요 기능:

  • 암호화/복호화 (AES-128, RSA)
  • XSS 방지
  • JWT 인증
  • Spring Security 통합

암호화 유틸리티

AES-128

대칭키 암호화 알고리즘입니다.

사용 예시:

java
@Resource(name = "AxpCommAES128")
 private AxpCommAES128 aes128;
 
 // 암호화
@@ -81,8 +81,8 @@
   "procedure": "P_REPORT_DATA",
   "params": { ... },
   "decrypt_column": "cv_1:social_num|cv_3:emp_name"
-}

주의사항

  1. 암호화 키 보안: 암호화 키는 설정 파일에 저장하며, Git에 커밋하지 않도록 주의
  2. XSS 필터: 모든 요청에 자동 적용되므로 성능 고려 필요
  3. 토큰 만료: Access Token은 15분, Refresh Token은 7일
  4. 복호화 필터: 필요한 경우에만 활성화

다음 단계

- +}

주의사항

  1. 암호화 키 보안: 암호화 키는 설정 파일에 저장하며, Git에 커밋하지 않도록 주의
  2. XSS 필터: 모든 요청에 자동 적용되므로 성능 고려 필요
  3. 토큰 만료: Access Token은 15분, Refresh Token은 7일
  4. 복호화 필터: 필요한 경우에만 활성화

다음 단계

+ \ No newline at end of file diff --git a/backend/common-features/sms.html b/backend/common-features/sms.html index d048ae0..176ae3e 100644 --- a/backend/common-features/sms.html +++ b/backend/common-features/sms.html @@ -6,19 +6,19 @@ SMS 발송 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

SMS 발송

AxpFramework는 SMS 발송 기능을 제공합니다.

설정

application.yaml

yaml
msg:
+    
Skip to content

SMS 발송

AxpFramework는 SMS 발송 기능을 제공합니다.

설정

application.yaml

yaml
msg:
   kt:
     scheduled: false
     key: Basic Q1BTODQwMDA1ODcxOERPUUZOTzpTVks4NDAwMDU4NzE4R0pVTVdP
@@ -27,8 +27,8 @@
       sms: https://cpaas.api.kt.com/cpaas/v1.0/CPaaS_sendSMS

사용 예시

java
@Autowired
 private AxpSmsService smsService;
 
-boolean result = smsService.phoneMsgSend(mstNo, sessionInfo);

다음 단계

- +boolean result = smsService.phoneMsgSend(mstNo, sessionInfo);

다음 단계

+ \ No newline at end of file diff --git a/backend/common-features/utilities.html b/backend/common-features/utilities.html index 15ad5c9..779fd75 100644 --- a/backend/common-features/utilities.html +++ b/backend/common-features/utilities.html @@ -6,19 +6,19 @@ 유틸리티 클래스 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

유틸리티 클래스

AxpFramework는 다양한 유틸리티 클래스를 제공합니다.

AxpCommUtil

공통 유틸리티 클래스입니다.

주요 메서드

java
@Autowired
+    
Skip to content

유틸리티 클래스

AxpFramework는 다양한 유틸리티 클래스를 제공합니다.

AxpCommUtil

공통 유틸리티 클래스입니다.

주요 메서드

java
@Autowired
 private AxpCommUtil util;
 
 // 빈 값 확인
@@ -41,8 +41,8 @@
 boolean isValid = validationUtil.isValidPhone(phone);

AxpCommPaging

페이징 처리 유틸리티입니다.

java
@Autowired
 private AxpCommPaging paging;
 
-Map<String, Object> pageInfo = paging.getPageInfo(currentPage, totalCount, pageSize);

다음 단계

- +Map<String, Object> pageInfo = paging.getPageInfo(currentPage, totalCount, pageSize);

다음 단계

+ \ No newline at end of file diff --git a/backend/configuration/application.html b/backend/configuration/application.html index f3f2a6a..5fcab0d 100644 --- a/backend/configuration/application.html +++ b/backend/configuration/application.html @@ -6,19 +6,19 @@ 애플리케이션 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

애플리케이션 설정

애플리케이션 설정은 YAML 형식으로 작성되며, 환경별로 분리되어 있습니다.

설정 파일 위치

src/main/resources/
+    
Skip to content

애플리케이션 설정

애플리케이션 설정은 YAML 형식으로 작성되며, 환경별로 분리되어 있습니다.

설정 파일 위치

src/main/resources/
 ├── application.yaml                 # 기본 설정
 └── config/
     ├── application-local.yaml       # 로컬 환경
@@ -74,8 +74,8 @@
     org.apache.ibatis: DEBUG
     axpFramework.common.database.mapper: DEBUG
   file:
-    name: logs/AxpFramework.log

다음 단계

- + name: logs/AxpFramework.log

다음 단계

+ \ No newline at end of file diff --git a/backend/configuration/datasource.html b/backend/configuration/datasource.html index 0798703..f17a56e 100644 --- a/backend/configuration/datasource.html +++ b/backend/configuration/datasource.html @@ -6,19 +6,19 @@ 데이터소스 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

데이터소스 설정

AxpFramework는 다중 데이터베이스를 지원하며, 환경 설정을 통해 데이터베이스 타입을 선택할 수 있습니다.

데이터베이스 타입 설정

application-dev.yaml에서 데이터베이스 타입을 설정합니다:

yaml
app:
+    
Skip to content

데이터소스 설정

AxpFramework는 다중 데이터베이스를 지원하며, 환경 설정을 통해 데이터베이스 타입을 선택할 수 있습니다.

데이터베이스 타입 설정

application-dev.yaml에서 데이터베이스 타입을 설정합니다:

yaml
app:
   datasource:
     type: tibero  # tibero, oracle, postgres 중 선택

Tibero 설정

기본 설정

yaml
spring:
   datasource:
@@ -49,8 +49,8 @@
 }

생성되는 Bean

  • dataSource: DataSource 인스턴스
  • sqlSessionFactory: MyBatis SqlSessionFactory
  • sqlSessionTemplate: MyBatis SqlSessionTemplate
  • transactionManager: 트랜잭션 관리자

MyBatis 설정

DB별 설정 파일

각 데이터베이스마다 별도의 MyBatis 설정 파일을 사용합니다:

  • mapper-config/mybatis-config-tibero.xml
  • mapper-config/mybatis-config-oracle.xml
  • mapper-config/mybatis-config-postgresql.xml

매퍼 파일 스캔

모든 매퍼 XML 파일은 다음 경로에서 자동으로 스캔됩니다:

java
factoryBean.setMapperLocations(
     new PathMatchingResourcePatternResolver()
         .getResources("classpath:/mapper/**/*.xml")
-);

다음 단계

- +);

다음 단계

+ \ No newline at end of file diff --git a/backend/configuration/maven.html b/backend/configuration/maven.html index 96504f1..889afb1 100644 --- a/backend/configuration/maven.html +++ b/backend/configuration/maven.html @@ -6,19 +6,19 @@ Maven 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Maven 설정

AxpFramework는 Maven을 빌드 도구로 사용합니다.

pom.xml 구조

기본 정보

xml
<groupId>com.itl</groupId>
+    
Skip to content

Maven 설정

AxpFramework는 Maven을 빌드 도구로 사용합니다.

pom.xml 구조

기본 정보

xml
<groupId>com.itl</groupId>
 <artifactId>AxpFramework</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>war</packaging>

Spring Boot Parent

xml
<parent>
@@ -74,8 +74,8 @@
             </resource>
         </webResources>
     </configuration>
-</plugin>

빌드 명령어

개발 환경 빌드

bash
mvn clean install -Pdev

WAR 파일 생성

bash
mvn clean package -Pprod

생성된 파일: target/AxpFramework-0.0.1-SNAPSHOT.war

테스트 제외 빌드

bash
mvn clean install -DskipTests

다음 단계

- +</plugin>

빌드 명령어

개발 환경 빌드

bash
mvn clean install -Pdev

WAR 파일 생성

bash
mvn clean package -Pprod

생성된 파일: target/AxpFramework-0.0.1-SNAPSHOT.war

테스트 제외 빌드

bash
mvn clean install -DskipTests

다음 단계

+ \ No newline at end of file diff --git a/backend/configuration/redis.html b/backend/configuration/redis.html index a7f503c..a299a7d 100644 --- a/backend/configuration/redis.html +++ b/backend/configuration/redis.html @@ -6,19 +6,19 @@ Redis 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Redis 설정

AxpFramework는 Redis를 세션 관리, 토큰 저장, 캐시 데이터 관리에 사용합니다.

Redis 연결 설정

application-dev.yaml

yaml
redis:
+    
Skip to content

Redis 설정

AxpFramework는 Redis를 세션 관리, 토큰 저장, 캐시 데이터 관리에 사용합니다.

Redis 연결 설정

application-dev.yaml

yaml
redis:
   datasource:
     cache:
       host: localhost
@@ -64,8 +64,8 @@
 
 Map<String, Object> result = redisService.setRedisToken(
     uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
-);

토큰 조회

java
Map<String, Object> token = redisService.getRedisToken(uuid, "rediscache");

토큰 삭제

java
Map<String, Object> result = redisService.delRedisToken(uuid, "rediscache");

다음 단계

- +);

토큰 조회

java
Map<String, Object> token = redisService.getRedisToken(uuid, "rediscache");

토큰 삭제

java
Map<String, Object> result = redisService.delRedisToken(uuid, "rediscache");

다음 단계

+ \ No newline at end of file diff --git a/backend/database/common-service.html b/backend/database/common-service.html index dbc4ac7..59567d4 100644 --- a/backend/database/common-service.html +++ b/backend/database/common-service.html @@ -6,19 +6,19 @@ 공통 DB 서비스 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

공통 DB 서비스

AxpFramework는 데이터베이스 작업을 위한 공통 서비스를 제공합니다.

AxpCommDbService

프로시저 호출을 위한 공통 서비스입니다.

사용 예시

java
@Autowired
+    
Skip to content

공통 DB 서비스

AxpFramework는 데이터베이스 작업을 위한 공통 서비스를 제공합니다.

AxpCommDbService

프로시저 호출을 위한 공통 서비스입니다.

사용 예시

java
@Autowired
 private AxpCommDbService dbService;
 
 Map<String, Object> requestBody = new HashMap<>();
@@ -35,8 +35,8 @@
 );

AxpCommDbAdapterService

데이터베이스 어댑터 서비스입니다.

사용 예시

java
@Autowired
 private AxpCommDbAdapterService adapterService;
 
-List<Map<String, Object>> result = adapterService.callOracleTestMapper(requestBody);

다음 단계

- +List<Map<String, Object>> result = adapterService.callOracleTestMapper(requestBody);

다음 단계

+ \ No newline at end of file diff --git a/backend/database/mapper-guide.html b/backend/database/mapper-guide.html index 78a0838..bfcdada 100644 --- a/backend/database/mapper-guide.html +++ b/backend/database/mapper-guide.html @@ -6,19 +6,19 @@ Mapper 작성 가이드 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Mapper 작성 가이드

MyBatis Mapper를 작성하는 방법을 설명합니다.

Mapper 인터페이스

기본 구조

java
package ess.com.mapper;
+    
Skip to content

Mapper 작성 가이드

MyBatis Mapper를 작성하는 방법을 설명합니다.

Mapper 인터페이스

기본 구조

java
package ess.com.mapper;
 
 import org.apache.ibatis.annotations.Mapper;
 import java.util.List;
@@ -73,8 +73,8 @@
     <foreach collection="ids" item="id" open="(" separator="," close=")">
         #{id}
     </foreach>
-</select>

다음 단계

- +</select>

다음 단계

+ \ No newline at end of file diff --git a/backend/database/mybatis.html b/backend/database/mybatis.html index de85a59..6427afb 100644 --- a/backend/database/mybatis.html +++ b/backend/database/mybatis.html @@ -6,19 +6,19 @@ MyBatis 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

MyBatis 설정

AxpFramework는 MyBatis를 사용하여 데이터베이스와 통신합니다.

MapperScan 설정

java
@MapperScan(
+    
Skip to content

MyBatis 설정

AxpFramework는 MyBatis를 사용하여 데이터베이스와 통신합니다.

MapperScan 설정

java
@MapperScan(
     basePackages = {
         "axpFramework.common.database.mapper",
         "ess.com.mapper"
@@ -50,8 +50,8 @@
     { CALL PROCEDURE_NAME(
         #{param1, mode=IN, jdbcType=VARCHAR}
     ) }
-</select>

다음 단계

- +</select>

다음 단계

+ \ No newline at end of file diff --git a/backend/deployment/build.html b/backend/deployment/build.html index 01ecd74..69daaf8 100644 --- a/backend/deployment/build.html +++ b/backend/deployment/build.html @@ -6,20 +6,20 @@ Maven 빌드 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Maven 빌드

프로젝트를 빌드하는 방법을 설명합니다.

개발 환경 빌드

bash
mvn clean install -Pdev

WAR 파일 생성

bash
mvn clean package -Pprod

생성된 파일: target/AxpFramework-0.0.1-SNAPSHOT.war

다음 단계

- +
Skip to content

Maven 빌드

프로젝트를 빌드하는 방법을 설명합니다.

개발 환경 빌드

bash
mvn clean install -Pdev

WAR 파일 생성

bash
mvn clean package -Pprod

생성된 파일: target/AxpFramework-0.0.1-SNAPSHOT.war

다음 단계

+ \ No newline at end of file diff --git a/backend/deployment/deploy.html b/backend/deployment/deploy.html index 70a6145..aefe913 100644 --- a/backend/deployment/deploy.html +++ b/backend/deployment/deploy.html @@ -6,20 +6,20 @@ 배포 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

배포 설정

WAR 파일을 외부 Tomcat에 배포하는 방법을 설명합니다.

Tomcat 배포

  1. WAR 파일을 webapps 디렉토리에 복사
  2. Tomcat 재시작
  3. 애플리케이션 확인

다음 단계

- +
Skip to content

배포 설정

WAR 파일을 외부 Tomcat에 배포하는 방법을 설명합니다.

Tomcat 배포

  1. WAR 파일을 webapps 디렉토리에 복사
  2. Tomcat 재시작
  3. 애플리케이션 확인

다음 단계

+ \ No newline at end of file diff --git a/backend/development-guide/api-design.html b/backend/development-guide/api-design.html index c75dd45..075bcf6 100644 --- a/backend/development-guide/api-design.html +++ b/backend/development-guide/api-design.html @@ -6,19 +6,19 @@ REST API 설계 규칙 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

REST API 설계 규칙

AxpFramework의 REST API 설계 규칙을 설명합니다.

URL 패턴

/api/{모듈명}/{기능}/{액션}

예시:

  • /api/user/bmk/getBmkList
  • /api/login/loginCheck

HTTP 메서드

  • POST: 모든 API는 POST 메서드를 사용합니다.

요청 형식

json
{
+    
Skip to content

REST API 설계 규칙

AxpFramework의 REST API 설계 규칙을 설명합니다.

URL 패턴

/api/{모듈명}/{기능}/{액션}

예시:

  • /api/user/bmk/getBmkList
  • /api/login/loginCheck

HTTP 메서드

  • POST: 모든 API는 POST 메서드를 사용합니다.

요청 형식

json
{
   "param1": "value1",
   "param2": "value2"
 }

응답 형식

성공

json
{
@@ -29,8 +29,8 @@
   "status": "E",
   "message": "에러 메시지",
   "data": null
-}

다음 단계

- +}

다음 단계

+ \ No newline at end of file diff --git a/backend/development-guide/authentication.html b/backend/development-guide/authentication.html index adb6b07..30f1c08 100644 --- a/backend/development-guide/authentication.html +++ b/backend/development-guide/authentication.html @@ -6,25 +6,25 @@ 인증/인가 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

인증/인가 처리

인증이 필요한 API를 작성하는 방법을 설명합니다.

JWT 토큰 사용

Authorization 헤더

java
// 클라이언트에서
+    
Skip to content

인증/인가 처리

인증이 필요한 API를 작성하는 방법을 설명합니다.

JWT 토큰 사용

Authorization 헤더

java
// 클라이언트에서
 headers.set("Authorization", "Bearer " + accessToken);

쿠키

Refresh Token은 HttpOnly 쿠키로 자동 전송됩니다.

제외 URI 설정

인증이 필요 없는 URI를 설정합니다.

yaml
security:
   excluded-uris: >
     /api/public/**
   excluded-jwt-uris: >
-    /api/public/**

다음 단계

- + /api/public/**

다음 단계

+ \ No newline at end of file diff --git a/backend/development-guide/new-module.html b/backend/development-guide/new-module.html index 23a334a..fe1de8e 100644 --- a/backend/development-guide/new-module.html +++ b/backend/development-guide/new-module.html @@ -6,19 +6,19 @@ 새로운 모듈 추가 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

새로운 모듈 추가

AxpFramework에 새로운 비즈니스 모듈을 추가하는 전체 가이드입니다.

개요

새로운 모듈을 추가할 때는 표준화된 패키지 구조와 개발 패턴을 따라야 합니다. 이 문서는 모듈 생성부터 배포까지의 전체 과정을 안내합니다.

모듈 추가 프로세스

1단계: 모듈 구조 설계

새로운 모듈을 추가하기 전에 다음을 결정해야 합니다:

  • 모듈명: 예) hr, finance, inventory
  • 도메인: 모듈 내부의 기능 영역 (예: payroll, attendance, leave)
  • API 엔드포인트: REST API 경로 (예: /api/hr, /api/finance)

2단계: 패키지 구조 생성

표준 패키지 구조를 따라 디렉토리를 생성합니다:

src/main/java/
+    
Skip to content

새로운 모듈 추가

AxpFramework에 새로운 비즈니스 모듈을 추가하는 전체 가이드입니다.

개요

새로운 모듈을 추가할 때는 표준화된 패키지 구조와 개발 패턴을 따라야 합니다. 이 문서는 모듈 생성부터 배포까지의 전체 과정을 안내합니다.

모듈 추가 프로세스

1단계: 모듈 구조 설계

새로운 모듈을 추가하기 전에 다음을 결정해야 합니다:

  • 모듈명: 예) hr, finance, inventory
  • 도메인: 모듈 내부의 기능 영역 (예: payroll, attendance, leave)
  • API 엔드포인트: REST API 경로 (예: /api/hr, /api/finance)

2단계: 패키지 구조 생성

표준 패키지 구조를 따라 디렉토리를 생성합니다:

src/main/java/
 └── {모듈명}/                        # 예: hr, finance
     └── {도메인}/                    # 예: payroll, attendance
         ├── controller/              # REST API 컨트롤러
@@ -80,8 +80,8 @@
 Map<String, Object> requestBody = new HashMap<>();
 requestBody.put("procedure", "P_YOUR_PROCEDURE");
 requestBody.put("params", params);
-Map<String, Object> result = axpCommDbService.executeProcedure(requestBody);

인증/보안

  • JWT 토큰: AxpCommAuthService
  • 암호화: AxpCommAES128, AxpCommRsa

유틸리티

  • 공통 유틸: AxpCommUtil
  • 파일 처리: AxpCommFileUtil
  • 검증: AxpCommValidationUtil

API 설계 규칙

새로운 모듈의 API를 설계할 때는 다음 규칙을 따릅니다:

주요 규칙:

  • 모든 API는 POST 메서드 사용
  • 요청 본문은 JSON 형식
  • 일관된 응답 형식 (status, message, data)
  • 적절한 HTTP 상태 코드 사용

인증/인가 처리

새로운 모듈의 API에 인증이 필요한 경우:

설정 방법:

  • application-dev.yamlsecurity.excluded-uris에 제외 URI 추가
  • 또는 JWT 필터를 통한 자동 인증

Swagger 문서화

새로운 API를 Swagger에 문서화:

체크리스트

새로운 모듈 추가 시 확인사항:

  • [ ] 패키지 구조 생성 완료
  • [ ] AxpBootApplication.java에 ComponentScan 추가
  • [ ] AxpBootApplication.java에 MapperScan 추가
  • [ ] Controller 클래스 작성 완료
  • [ ] Service 클래스 작성 완료
  • [ ] Mapper 인터페이스 작성 완료
  • [ ] XML 매퍼 파일 작성 완료
  • [ ] 설정 파일 추가 (필요한 경우)
  • [ ] API 테스트 완료
  • [ ] Swagger 문서화 완료

다음 단계

각 단계별 상세 가이드를 참고하세요:

  1. 모듈 생성 절차 - 기본 구조 생성
  2. 컨트롤러 작성 - REST API 엔드포인트
  3. 서비스 작성 - 비즈니스 로직
  4. Mapper 작성 - 데이터베이스 접근
  5. 설정 파일 추가 - 모듈 설정

참고 자료

- +Map<String, Object> result = axpCommDbService.executeProcedure(requestBody);

인증/보안

  • JWT 토큰: AxpCommAuthService
  • 암호화: AxpCommAES128, AxpCommRsa

유틸리티

  • 공통 유틸: AxpCommUtil
  • 파일 처리: AxpCommFileUtil
  • 검증: AxpCommValidationUtil

API 설계 규칙

새로운 모듈의 API를 설계할 때는 다음 규칙을 따릅니다:

주요 규칙:

  • 모든 API는 POST 메서드 사용
  • 요청 본문은 JSON 형식
  • 일관된 응답 형식 (status, message, data)
  • 적절한 HTTP 상태 코드 사용

인증/인가 처리

새로운 모듈의 API에 인증이 필요한 경우:

설정 방법:

  • application-dev.yamlsecurity.excluded-uris에 제외 URI 추가
  • 또는 JWT 필터를 통한 자동 인증

Swagger 문서화

새로운 API를 Swagger에 문서화:

체크리스트

새로운 모듈 추가 시 확인사항:

  • [ ] 패키지 구조 생성 완료
  • [ ] AxpBootApplication.java에 ComponentScan 추가
  • [ ] AxpBootApplication.java에 MapperScan 추가
  • [ ] Controller 클래스 작성 완료
  • [ ] Service 클래스 작성 완료
  • [ ] Mapper 인터페이스 작성 완료
  • [ ] XML 매퍼 파일 작성 완료
  • [ ] 설정 파일 추가 (필요한 경우)
  • [ ] API 테스트 완료
  • [ ] Swagger 문서화 완료

다음 단계

각 단계별 상세 가이드를 참고하세요:

  1. 모듈 생성 절차 - 기본 구조 생성
  2. 컨트롤러 작성 - REST API 엔드포인트
  3. 서비스 작성 - 비즈니스 로직
  4. Mapper 작성 - 데이터베이스 접근
  5. 설정 파일 추가 - 모듈 설정

참고 자료

+ \ No newline at end of file diff --git a/backend/development-guide/new-module/config.html b/backend/development-guide/new-module/config.html index 2e816cc..8d953c4 100644 --- a/backend/development-guide/new-module/config.html +++ b/backend/development-guide/new-module/config.html @@ -6,22 +6,22 @@ 설정 파일 추가 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

설정 파일 추가

새로운 모듈에 필요한 설정을 추가하는 방법을 설명합니다.

환경별 설정

application-dev.yaml

yaml
# 새 모듈 설정
+    
Skip to content

설정 파일 추가

새로운 모듈에 필요한 설정을 추가하는 방법을 설명합니다.

환경별 설정

application-dev.yaml

yaml
# 새 모듈 설정
 새모듈명:
-  설정키: 설정값

다음 단계

- + 설정키: 설정값

다음 단계

+ \ No newline at end of file diff --git a/backend/development-guide/new-module/controller.html b/backend/development-guide/new-module/controller.html index edd6a82..0d6aa35 100644 --- a/backend/development-guide/new-module/controller.html +++ b/backend/development-guide/new-module/controller.html @@ -6,19 +6,19 @@ 컨트롤러 작성 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

컨트롤러 작성

컨트롤러를 작성하는 방법을 설명합니다.

기본 구조

java
@RestController
+    
Skip to content

컨트롤러 작성

컨트롤러를 작성하는 방법을 설명합니다.

기본 구조

java
@RestController
 @RequestMapping(value = "/api/{모듈명}", method = RequestMethod.POST)
 public class {모듈명}Controller extends AxpBaseWebController {
     
@@ -50,8 +50,8 @@
   "status": "E",
   "message": "에러 메시지",
   "data": null
-}

다음 단계

- +}

다음 단계

+ \ No newline at end of file diff --git a/backend/development-guide/new-module/creation.html b/backend/development-guide/new-module/creation.html index 75dadf9..9de1a53 100644 --- a/backend/development-guide/new-module/creation.html +++ b/backend/development-guide/new-module/creation.html @@ -6,19 +6,19 @@ 모듈 생성 절차 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

모듈 생성 절차

새로운 비즈니스 모듈을 추가하는 방법을 설명합니다.

1. 패키지 구조 생성

새모듈명/
+    
Skip to content

모듈 생성 절차

새로운 비즈니스 모듈을 추가하는 방법을 설명합니다.

1. 패키지 구조 생성

새모듈명/
 ├── controller/
 │   └── 새모듈Controller.java
 ├── service/
@@ -32,8 +32,8 @@
         "ess.com.mapper",
         "새모듈명.mapper"
     }
-)

4. XML 매퍼 파일 생성

src/main/resources/mapper/새모듈명/새모듈Mapper.xml

다음 단계

- +)

4. XML 매퍼 파일 생성

src/main/resources/mapper/새모듈명/새모듈Mapper.xml

다음 단계

+ \ No newline at end of file diff --git a/backend/development-guide/new-module/mapper.html b/backend/development-guide/new-module/mapper.html index e85b085..2d0d866 100644 --- a/backend/development-guide/new-module/mapper.html +++ b/backend/development-guide/new-module/mapper.html @@ -6,19 +6,19 @@ Mapper 작성 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Mapper 작성

Mapper를 작성하는 방법을 설명합니다.

인터페이스

java
@Mapper
+    
Skip to content

Mapper 작성

Mapper를 작성하는 방법을 설명합니다.

인터페이스

java
@Mapper
 public interface {모듈명}Mapper {
     List<Map<String, Object>> selectList(Map<String, Object> param);
 }

XML 매퍼

xml
<?xml version="1.0" encoding="UTF-8"?>
@@ -28,8 +28,8 @@
     <select id="selectList" resultType="map">
         SELECT * FROM table
     </select>
-</mapper>

파일 위치

src/main/resources/mapper/{모듈명}/{모듈명}Mapper.xml

다음 단계

- +</mapper>

파일 위치

src/main/resources/mapper/{모듈명}/{모듈명}Mapper.xml

다음 단계

+ \ No newline at end of file diff --git a/backend/development-guide/new-module/service.html b/backend/development-guide/new-module/service.html index 488aad1..4f80405 100644 --- a/backend/development-guide/new-module/service.html +++ b/backend/development-guide/new-module/service.html @@ -6,19 +6,19 @@ 서비스 작성 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

서비스 작성

서비스를 작성하는 방법을 설명합니다.

기본 구조

java
@Service
+    
Skip to content

서비스 작성

서비스를 작성하는 방법을 설명합니다.

기본 구조

java
@Service
 public class {모듈명}Service {
     
     private static final Logger LOGGER = LogManager.getLogger({모듈명}Service.class);
@@ -40,8 +40,8 @@
 requestBody.put("params", paramsMap);
 
 Map<String, Object> result = dbService.executeProcedure(requestBody);
-List<Map<String, Object>> list = (List<Map<String, Object>>) result.get("CV_1");

다음 단계

- +List<Map<String, Object>> list = (List<Map<String, Object>>) result.get("CV_1");

다음 단계

+ \ No newline at end of file diff --git a/backend/development-guide/swagger.html b/backend/development-guide/swagger.html index 2a842e5..1233e95 100644 --- a/backend/development-guide/swagger.html +++ b/backend/development-guide/swagger.html @@ -6,19 +6,19 @@ Swagger/OpenAPI 문서화 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Swagger/OpenAPI 문서화

API 문서를 자동으로 생성하는 방법을 설명합니다.

어노테이션 추가

java
@RestController
+    
Skip to content

Swagger/OpenAPI 문서화

API 문서를 자동으로 생성하는 방법을 설명합니다.

어노테이션 추가

java
@RestController
 @RequestMapping("/api/user")
 @Tag(name = "사용자 관리", description = "사용자 관련 API")
 public class EssComController extends AxpBaseWebController {
@@ -36,8 +36,8 @@
     ) {
         // ...
     }
-}

접근 URL

http://localhost:8080/swagger-ui.html

다음 단계

- +}

접근 URL

http://localhost:8080/swagger-ui.html

다음 단계

+ \ No newline at end of file diff --git a/backend/getting-started/overview.html b/backend/getting-started/overview.html index 0f1f6fb..702b653 100644 --- a/backend/getting-started/overview.html +++ b/backend/getting-started/overview.html @@ -6,19 +6,19 @@ 프로젝트 개요 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

프로젝트 개요

AxpFramework 소개

AxpFramework는 Spring Boot 기반의 엔터프라이즈 애플리케이션 개발을 위한 통합 프레임워크입니다. 다양한 데이터베이스 지원, 보안 기능, 공통 유틸리티 등을 제공하여 빠르고 안전한 애플리케이션 개발을 지원합니다.

주요 특징

1. 다중 데이터베이스 지원

  • Tibero6: 국산 데이터베이스 지원 (기본값)
  • Oracle: Oracle 데이터베이스 지원
  • PostgreSQL: 오픈소스 데이터베이스 지원
  • 환경 설정을 통해 데이터베이스 타입을 쉽게 변경 가능

2. 통합 보안 기능

  • JWT 기반 인증/인가
  • XSS 공격 방지 필터
  • RSA/AES 암호화 지원
  • Spring Security 통합

3. 공통 기능 제공

  • 파일 업로드/다운로드
  • Excel 생성 및 다운로드 (POI, JXLS)
  • PDF 리포트 생성 (JasperReports)
  • 메일 발송
  • SMS 발송
  • AI 서비스 연동 (Google Gemini)

4. Redis 캐싱

  • 세션 관리
  • 토큰 저장
  • 캐시 데이터 관리

5. 모듈화된 구조

  • 공통 프레임워크 모듈 (axpFramework)
  • 비즈니스 모듈 분리 (ess, fcm)
  • 표준화된 패키지 구조

프로젝트 목적

이 프레임워크는 다음과 같은 목적으로 개발되었습니다:

  1. 개발 생산성 향상: 공통 기능을 프레임워크 레벨에서 제공하여 반복 개발 최소화
  2. 일관성 유지: 표준화된 구조와 패턴으로 코드 일관성 보장
  3. 보안 강화: 기본 보안 기능을 내장하여 안전한 애플리케이션 개발 지원
  4. 유지보수성 향상: 모듈화된 구조로 유지보수 용이

기술 스택 요약

  • 프레임워크: Spring Boot 3.2.5
  • 언어: Java 17
  • 빌드 도구: Maven
  • ORM: MyBatis 3.0.4
  • 보안: Spring Security, JWT
  • 캐시: Redis (Valkey 호환)
  • 문서화: Springdoc OpenAPI 2.5.0

프로젝트 구조

AxpFramework/
+    
Skip to content

프로젝트 개요

AxpFramework 소개

AxpFramework는 Spring Boot 기반의 엔터프라이즈 애플리케이션 개발을 위한 통합 프레임워크입니다. 다양한 데이터베이스 지원, 보안 기능, 공통 유틸리티 등을 제공하여 빠르고 안전한 애플리케이션 개발을 지원합니다.

주요 특징

1. 다중 데이터베이스 지원

  • Tibero6: 국산 데이터베이스 지원 (기본값)
  • Oracle: Oracle 데이터베이스 지원
  • PostgreSQL: 오픈소스 데이터베이스 지원
  • 환경 설정을 통해 데이터베이스 타입을 쉽게 변경 가능

2. 통합 보안 기능

  • JWT 기반 인증/인가
  • XSS 공격 방지 필터
  • RSA/AES 암호화 지원
  • Spring Security 통합

3. 공통 기능 제공

  • 파일 업로드/다운로드
  • Excel 생성 및 다운로드 (POI, JXLS)
  • PDF 리포트 생성 (JasperReports)
  • 메일 발송
  • SMS 발송
  • AI 서비스 연동 (Google Gemini)

4. Redis 캐싱

  • 세션 관리
  • 토큰 저장
  • 캐시 데이터 관리

5. 모듈화된 구조

  • 공통 프레임워크 모듈 (axpFramework)
  • 비즈니스 모듈 분리 (ess, fcm)
  • 표준화된 패키지 구조

프로젝트 목적

이 프레임워크는 다음과 같은 목적으로 개발되었습니다:

  1. 개발 생산성 향상: 공통 기능을 프레임워크 레벨에서 제공하여 반복 개발 최소화
  2. 일관성 유지: 표준화된 구조와 패턴으로 코드 일관성 보장
  3. 보안 강화: 기본 보안 기능을 내장하여 안전한 애플리케이션 개발 지원
  4. 유지보수성 향상: 모듈화된 구조로 유지보수 용이

기술 스택 요약

  • 프레임워크: Spring Boot 3.2.5
  • 언어: Java 17
  • 빌드 도구: Maven
  • ORM: MyBatis 3.0.4
  • 보안: Spring Security, JWT
  • 캐시: Redis (Valkey 호환)
  • 문서화: Springdoc OpenAPI 2.5.0

프로젝트 구조

AxpFramework/
 ├── src/main/java/
 │   ├── axpFramework/          # 공통 프레임워크 모듈
 │   ├── ess/                   # ESS 비즈니스 모듈
@@ -26,8 +26,8 @@
 └── src/main/resources/
     ├── config/                # 환경별 설정 파일
     ├── mapper/                # MyBatis 매퍼 파일
-    └── report/                # 리포트 템플릿

다음 단계

프로젝트를 시작하려면 다음 문서를 참고하세요:

- + └── report/ # 리포트 템플릿

다음 단계

프로젝트를 시작하려면 다음 문서를 참고하세요:

+ \ No newline at end of file diff --git a/backend/getting-started/project-structure.html b/backend/getting-started/project-structure.html index 2937706..7bb0943 100644 --- a/backend/getting-started/project-structure.html +++ b/backend/getting-started/project-structure.html @@ -6,19 +6,19 @@ 프로젝트 구조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

프로젝트 구조

이 문서는 AxpFramework 프로젝트의 전체 구조와 각 디렉토리의 역할을 설명합니다.

전체 디렉토리 구조

AxpFramework/
+    
Skip to content

프로젝트 구조

이 문서는 AxpFramework 프로젝트의 전체 구조와 각 디렉토리의 역할을 설명합니다.

전체 디렉토리 구조

AxpFramework/
 ├── pom.xml                          # Maven 빌드 설정
 ├── mvnw, mvnw.cmd                   # Maven Wrapper
 ├── src/
@@ -128,8 +128,8 @@
 ├── mapper/
 │   └── 새모듈Mapper.java
 └── utils/ (선택)
-    └── 새모듈Util.java

다음 단계

프로젝트 구조를 이해했다면 다음 문서를 참고하세요:

- + └── 새모듈Util.java

다음 단계

프로젝트 구조를 이해했다면 다음 문서를 참고하세요:

+ \ No newline at end of file diff --git a/backend/getting-started/requirements.html b/backend/getting-started/requirements.html index 4e33c29..c78de0d 100644 --- a/backend/getting-started/requirements.html +++ b/backend/getting-started/requirements.html @@ -6,19 +6,19 @@ 시스템 요구사항 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

시스템 요구사항

필수 요구사항

1. Java 개발 환경

  • Java 버전: Java 17 이상
  • JDK: OpenJDK 17 또는 Oracle JDK 17
  • 환경 변수: JAVA_HOME 설정 필수
bash
# Java 버전 확인
+    
Skip to content

시스템 요구사항

필수 요구사항

1. Java 개발 환경

  • Java 버전: Java 17 이상
  • JDK: OpenJDK 17 또는 Oracle JDK 17
  • 환경 변수: JAVA_HOME 설정 필수
bash
# Java 버전 확인
 java -version
 
 # 출력 예시
@@ -30,8 +30,8 @@
 # 출력 예시
 Apache Maven 3.9.5
 Maven home: /usr/share/maven
-Java version: 17.0.8, vendor: Eclipse Adoptium

3. 데이터베이스

프로젝트는 다음 데이터베이스 중 하나를 사용해야 합니다:

Tibero6 (기본값)

  • 버전: Tibero6
  • JDBC 드라이버: tibero6-jdbc.jar (프로젝트에 포함)
  • 연결 정보: application-dev.yaml에서 설정

Oracle

  • 버전: Oracle 11g 이상
  • JDBC 드라이버: ojdbc11 (Maven 의존성)
  • 연결 정보: application-dev.yaml에서 설정

PostgreSQL

  • 버전: PostgreSQL 12 이상
  • JDBC 드라이버: postgresql (Maven 의존성)
  • 연결 정보: application-dev.yaml에서 설정

4. Redis (Valkey 호환)

  • 버전: Redis 6.0 이상 또는 Valkey
  • 용도: 세션 관리, 토큰 저장, 캐시
  • 연결 정보: application-dev.yaml에서 설정

5. IDE (선택사항)

다음 IDE 중 하나를 사용하는 것을 권장합니다:

  • IntelliJ IDEA: 2023.1 이상 (권장)
  • Eclipse: 2023-03 이상
  • VS Code: Java Extension Pack 설치

선택적 요구사항

1. 외부 Tomcat 서버

WAR 파일로 배포하는 경우:

  • Tomcat: 10.0 이상
  • Java: Java 17 이상

2. 개발 도구

  • Git: 버전 관리
  • Postman/Insomnia: API 테스트
  • DBeaver/DataGrip: 데이터베이스 관리

운영 환경 요구사항

서버 사양 (권장)

  • CPU: 2 Core 이상
  • 메모리: 4GB 이상
  • 디스크: 20GB 이상 (로그 파일 포함)
  • OS: Linux (Ubuntu 20.04 이상, CentOS 7 이상) 또는 Windows Server

네트워크

  • 포트:
    • 8080 (애플리케이션)
    • 6379 (Redis, 기본값)
    • 데이터베이스 포트 (Tibero: 9629, Oracle: 1521, PostgreSQL: 5432)

환경별 설정

프로젝트는 다음 환경별 설정을 지원합니다:

  • local: 로컬 개발 환경
  • dev: 개발 서버 환경
  • prod: 운영 서버 환경

각 환경에 맞는 설정 파일은 src/main/resources/config/ 디렉토리에 있습니다.

다음 단계

환경이 준비되었다면 다음 문서를 참고하여 개발 환경을 설정하세요:

- +Java version: 17.0.8, vendor: Eclipse Adoptium

3. 데이터베이스

프로젝트는 다음 데이터베이스 중 하나를 사용해야 합니다:

Tibero6 (기본값)

  • 버전: Tibero6
  • JDBC 드라이버: tibero6-jdbc.jar (프로젝트에 포함)
  • 연결 정보: application-dev.yaml에서 설정

Oracle

  • 버전: Oracle 11g 이상
  • JDBC 드라이버: ojdbc11 (Maven 의존성)
  • 연결 정보: application-dev.yaml에서 설정

PostgreSQL

  • 버전: PostgreSQL 12 이상
  • JDBC 드라이버: postgresql (Maven 의존성)
  • 연결 정보: application-dev.yaml에서 설정

4. Redis (Valkey 호환)

  • 버전: Redis 6.0 이상 또는 Valkey
  • 용도: 세션 관리, 토큰 저장, 캐시
  • 연결 정보: application-dev.yaml에서 설정

5. IDE (선택사항)

다음 IDE 중 하나를 사용하는 것을 권장합니다:

  • IntelliJ IDEA: 2023.1 이상 (권장)
  • Eclipse: 2023-03 이상
  • VS Code: Java Extension Pack 설치

선택적 요구사항

1. 외부 Tomcat 서버

WAR 파일로 배포하는 경우:

  • Tomcat: 10.0 이상
  • Java: Java 17 이상

2. 개발 도구

  • Git: 버전 관리
  • Postman/Insomnia: API 테스트
  • DBeaver/DataGrip: 데이터베이스 관리

운영 환경 요구사항

서버 사양 (권장)

  • CPU: 2 Core 이상
  • 메모리: 4GB 이상
  • 디스크: 20GB 이상 (로그 파일 포함)
  • OS: Linux (Ubuntu 20.04 이상, CentOS 7 이상) 또는 Windows Server

네트워크

  • 포트:
    • 8080 (애플리케이션)
    • 6379 (Redis, 기본값)
    • 데이터베이스 포트 (Tibero: 9629, Oracle: 1521, PostgreSQL: 5432)

환경별 설정

프로젝트는 다음 환경별 설정을 지원합니다:

  • local: 로컬 개발 환경
  • dev: 개발 서버 환경
  • prod: 운영 서버 환경

각 환경에 맞는 설정 파일은 src/main/resources/config/ 디렉토리에 있습니다.

다음 단계

환경이 준비되었다면 다음 문서를 참고하여 개발 환경을 설정하세요:

+ \ No newline at end of file diff --git a/backend/getting-started/setup.html b/backend/getting-started/setup.html index accacc1..f00a79d 100644 --- a/backend/getting-started/setup.html +++ b/backend/getting-started/setup.html @@ -6,19 +6,19 @@ 개발 환경 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

개발 환경 설정

이 문서는 AxpFramework 프로젝트의 개발 환경을 설정하는 방법을 안내합니다.

1. 프로젝트 클론 및 준비

1.1 프로젝트 다운로드

bash
# Git 저장소에서 클론 (예시)
+    
Skip to content

개발 환경 설정

이 문서는 AxpFramework 프로젝트의 개발 환경을 설정하는 방법을 안내합니다.

1. 프로젝트 클론 및 준비

1.1 프로젝트 다운로드

bash
# Git 저장소에서 클론 (예시)
 git clone <repository-url>
 cd AxpFramework

1.2 프로젝트 구조 확인

AxpFramework/
 ├── pom.xml                    # Maven 설정 파일
@@ -109,8 +109,8 @@
  =========|_|==============|___/=/_/_/_/
  :: Spring Boot ::                (v3.2.5)

7.2 API 확인

브라우저에서 다음 URL로 접속하여 확인합니다:

  • Swagger UI: http://localhost:8080/swagger-ui.html
  • Health Check: http://localhost:8080/api/health (구현된 경우)

7.3 로그 확인

로그 파일은 다음 위치에 생성됩니다:

  • logs/AxpFramework/AxpFramework.log
  • logs/ess/ess-log.log
  • logs/fcm/fcm-log.log

8. 문제 해결

8.1 포트 충돌

8080 포트가 이미 사용 중인 경우:

yaml
# application-dev.yaml
 server:
-  port: 8081  # 다른 포트로 변경

8.2 데이터베이스 연결 실패

  • 데이터베이스 서버가 실행 중인지 확인
  • 연결 정보(호스트, 포트, 사용자명, 비밀번호) 확인
  • 방화벽 설정 확인

8.3 Redis 연결 실패

  • Redis 서버가 실행 중인지 확인
  • Redis 포트가 열려있는지 확인
  • Redis 비밀번호 설정 확인

다음 단계

개발 환경이 준비되었다면 다음 문서를 참고하세요:

- + port: 8081 # 다른 포트로 변경

8.2 데이터베이스 연결 실패

  • 데이터베이스 서버가 실행 중인지 확인
  • 연결 정보(호스트, 포트, 사용자명, 비밀번호) 확인
  • 방화벽 설정 확인

8.3 Redis 연결 실패

  • Redis 서버가 실행 중인지 확인
  • Redis 포트가 열려있는지 확인
  • Redis 비밀번호 설정 확인

다음 단계

개발 환경이 준비되었다면 다음 문서를 참고하세요:

+ \ No newline at end of file diff --git a/backend/index.html b/backend/index.html index e61e56b..ab1fac9 100644 --- a/backend/index.html +++ b/backend/index.html @@ -6,20 +6,20 @@ AXP Framework Dev Docs | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

AXP Framework Dev Docs

이 문서는 무엇인가요?

AXP Framework는 Spring Boot 기반의 **엔터프라이즈 애플리케이션 개발을 위한 통합 프레임워크입니다.
이 문서는 다른 개발자들이 빠르게 신규 모듈/기능을 개발할 수 있도록 돕는 개발자용 가이드 문서입니다.

  • Spring Boot 3.2.5 + Java 17 기반
  • 다중 데이터베이스 지원 (Tibero, Oracle, PostgreSQL)
  • JWT 기반 인증/인가, Redis 캐싱
  • 공통 DB 서비스, 파일 처리, 리포트 생성 등 재사용 기능 제공
  • 표준화된 모듈 구조와 개발 패턴 정리

처음 온 개발자를 위한 3단계

  1. 프로젝트 전체 그림 이해하기

  2. 로컬 개발 환경 구축하기

    • 개발 환경 설정
    • 데이터베이스 및 Redis 연결 설정
    • mvn spring-boot:run -Pdev로 로컬 서버 띄우기
  3. AXP Framework 개발 패턴 익히기


핵심 아키텍처 빠른 링크

AXP Framework에서 반드시 알아야 하는 핵심 모듈들입니다.


공통 기능 사용 가이드

프레임워크에서 제공하는 공통 기능들은 아래 문서에서 상세 사용법과 예제를 제공합니다.


새 모듈을 만들 때 추천 흐름

  1. 모듈 구조 잡기

    • 모듈 생성 절차 참고
    • 표준 패키지 구조: {모듈명}/{도메인}/controller, service, mapper
  2. 데이터베이스 연동 설계

  3. API 개발

  4. 보안 및 인증 적용

    • 필요 시 인증/인가 처리 참고
    • 제외 URI는 application-dev.yamlsecurity.excluded-uris에 추가
  5. 문서화


기술 스택 개요

프로젝트에서 사용하는 주요 기술들을 빠르게 확인할 수 있습니다.


환경 설정 가이드

개발 환경을 구축하고 설정하는 방법을 안내합니다.


API 레퍼런스

프로젝트에서 제공하는 모든 API를 확인할 수 있습니다.


문제 해결

개발 중 자주 발생하는 문제와 해결 방법을 정리했습니다.


참고 자료

프로젝트 개발에 필요한 참고 자료를 모았습니다.

- +
Skip to content

AXP Framework Dev Docs

이 문서는 무엇인가요?

AXP Framework는 Spring Boot 기반의 **엔터프라이즈 애플리케이션 개발을 위한 통합 프레임워크입니다.
이 문서는 다른 개발자들이 빠르게 신규 모듈/기능을 개발할 수 있도록 돕는 개발자용 가이드 문서입니다.

  • Spring Boot 3.2.5 + Java 17 기반
  • 다중 데이터베이스 지원 (Tibero, Oracle, PostgreSQL)
  • JWT 기반 인증/인가, Redis 캐싱
  • 공통 DB 서비스, 파일 처리, 리포트 생성 등 재사용 기능 제공
  • 표준화된 모듈 구조와 개발 패턴 정리

처음 온 개발자를 위한 3단계

  1. 프로젝트 전체 그림 이해하기

  2. 로컬 개발 환경 구축하기

    • 개발 환경 설정
    • 데이터베이스 및 Redis 연결 설정
    • mvn spring-boot:run -Pdev로 로컬 서버 띄우기
  3. AXP Framework 개발 패턴 익히기


핵심 아키텍처 빠른 링크

AXP Framework에서 반드시 알아야 하는 핵심 모듈들입니다.


공통 기능 사용 가이드

프레임워크에서 제공하는 공통 기능들은 아래 문서에서 상세 사용법과 예제를 제공합니다.


새 모듈을 만들 때 추천 흐름

  1. 모듈 구조 잡기

    • 모듈 생성 절차 참고
    • 표준 패키지 구조: {모듈명}/{도메인}/controller, service, mapper
  2. 데이터베이스 연동 설계

  3. API 개발

  4. 보안 및 인증 적용

    • 필요 시 인증/인가 처리 참고
    • 제외 URI는 application-dev.yamlsecurity.excluded-uris에 추가
  5. 문서화


기술 스택 개요

프로젝트에서 사용하는 주요 기술들을 빠르게 확인할 수 있습니다.


환경 설정 가이드

개발 환경을 구축하고 설정하는 방법을 안내합니다.


API 레퍼런스

프로젝트에서 제공하는 모든 API를 확인할 수 있습니다.


문제 해결

개발 중 자주 발생하는 문제와 해결 방법을 정리했습니다.


참고 자료

프로젝트 개발에 필요한 참고 자료를 모았습니다.

+ \ No newline at end of file diff --git a/backend/project-structure/business.html b/backend/project-structure/business.html index cdc43d5..06b20e6 100644 --- a/backend/project-structure/business.html +++ b/backend/project-structure/business.html @@ -6,19 +6,19 @@ 비즈니스 모듈 구조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

비즈니스 모듈 구조

비즈니스 모듈은 표준화된 패키지 구조를 따릅니다.

표준 패키지 구조

{모듈명}/{도메인}/
+    
Skip to content

비즈니스 모듈 구조

비즈니스 모듈은 표준화된 패키지 구조를 따릅니다.

표준 패키지 구조

{모듈명}/{도메인}/
 ├── controller/                     # REST API 컨트롤러
 ├── service/                        # 비즈니스 로직
 ├── mapper/                        # MyBatis Mapper 인터페이스
@@ -128,8 +128,8 @@
     <select id="selectList" resultType="map">
         SELECT * FROM table
     </select>
-</mapper>

다음 단계

- +</mapper>

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/directory.html b/backend/project-structure/directory.html index 305cfbf..b8cf4e3 100644 --- a/backend/project-structure/directory.html +++ b/backend/project-structure/directory.html @@ -6,19 +6,19 @@ 전체 디렉토리 구조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

전체 디렉토리 구조

AxpFramework 프로젝트의 전체 디렉토리 구조와 각 디렉토리의 역할을 설명합니다.

루트 디렉토리 구조

AxpFramework/
+    
Skip to content

전체 디렉토리 구조

AxpFramework 프로젝트의 전체 디렉토리 구조와 각 디렉토리의 역할을 설명합니다.

루트 디렉토리 구조

AxpFramework/
 ├── pom.xml                          # Maven 빌드 설정 파일
 ├── mvnw                             # Maven Wrapper (Linux/Mac)
 ├── mvnw.cmd                         # Maven Wrapper (Windows)
@@ -136,8 +136,8 @@
 ├── ess/                            # ESS 모듈 로그
 │   └── ess-log-YYYY-MM-DD.N.log
 └── fcm/                            # FCM 모듈 로그
-    └── fcm-log.log

디렉토리 역할 설명

src/main/java/

  • 모든 Java 소스 코드가 위치하는 디렉토리
  • 패키지 구조에 따라 하위 디렉토리가 자동 생성됨

src/main/resources/

  • 설정 파일, 매퍼 XML, 리포트 템플릿 등 리소스 파일
  • 클래스패스 루트로 인식됨

src/test/java/

  • 단위 테스트 및 통합 테스트 코드
  • JUnit을 사용한 테스트 작성

target/

  • Maven 빌드 결과물이 저장되는 디렉토리
  • .gitignore에 포함되어 Git에 커밋되지 않음

logs/

  • 애플리케이션 실행 중 생성되는 로그 파일
  • 일별로 로그 파일이 생성됨

패키지 네이밍 규칙

  1. 소문자 사용: 모든 패키지명은 소문자로 작성
  2. 도메인별 분리: 비즈니스 로직은 도메인별로 패키지 분리
  3. 계층별 분리: controller, service, mapper로 계층 분리
  4. 공통 기능: axpFramework.common 패키지에 공통 기능 배치

다음 단계

- + └── fcm-log.log

디렉토리 역할 설명

src/main/java/

  • 모든 Java 소스 코드가 위치하는 디렉토리
  • 패키지 구조에 따라 하위 디렉토리가 자동 생성됨

src/main/resources/

  • 설정 파일, 매퍼 XML, 리포트 템플릿 등 리소스 파일
  • 클래스패스 루트로 인식됨

src/test/java/

  • 단위 테스트 및 통합 테스트 코드
  • JUnit을 사용한 테스트 작성

target/

  • Maven 빌드 결과물이 저장되는 디렉토리
  • .gitignore에 포함되어 Git에 커밋되지 않음

logs/

  • 애플리케이션 실행 중 생성되는 로그 파일
  • 일별로 로그 파일이 생성됨

패키지 네이밍 규칙

  1. 소문자 사용: 모든 패키지명은 소문자로 작성
  2. 도메인별 분리: 비즈니스 로직은 도메인별로 패키지 분리
  3. 계층별 분리: controller, service, mapper로 계층 분리
  4. 공통 기능: axpFramework.common 패키지에 공통 기능 배치

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/framework.html b/backend/project-structure/framework.html index f5c7066..2d3296c 100644 --- a/backend/project-structure/framework.html +++ b/backend/project-structure/framework.html @@ -6,19 +6,19 @@ 공통 프레임워크 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

공통 프레임워크 모듈

axpFramework 패키지는 모든 비즈니스 모듈에서 공통으로 사용하는 기능을 제공합니다.

모듈 구조

axpFramework/
+    
Skip to content

공통 프레임워크 모듈

axpFramework 패키지는 모든 비즈니스 모듈에서 공통으로 사용하는 기능을 제공합니다.

모듈 구조

axpFramework/
 ├── AxpBootApplication.java          # 메인 애플리케이션
 ├── ai/                              # AI 서비스
 ├── common/                          # 공통 기능
@@ -55,8 +55,8 @@
 String encrypted = aes128.encrypt(plainText);
 
 // 복호화
-String decrypted = aes128.decrypt(encrypted);

다음 단계

- +String decrypted = aes128.decrypt(encrypted);

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/framework/ai.html b/backend/project-structure/framework/ai.html index 48c99d9..d1e9b7d 100644 --- a/backend/project-structure/framework/ai.html +++ b/backend/project-structure/framework/ai.html @@ -6,19 +6,19 @@ AI 서비스 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

AI 서비스 모듈

Google Gemini AI를 연동하여 AI 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/ai/
+    
Skip to content

AI 서비스 모듈

Google Gemini AI를 연동하여 AI 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/ai/
 ├── controller/
 │   └── AxpAiController.java        # AI API 컨트롤러
 ├── mapper/
@@ -99,8 +99,8 @@
     <groupId>com.google.genai</groupId>
     <artifactId>genai</artifactId>
     <version>1.11.0</version>
-</dependency>

주의사항

  1. API 키 보안: API 키는 설정 파일에 저장하며, Git에 커밋하지 않도록 주의
  2. 비용 관리: Gemini API 사용 시 비용이 발생할 수 있으므로 사용량 모니터링 필요
  3. Rate Limit: API 호출 제한이 있을 수 있으므로 적절한 재시도 로직 구현 권장
  4. 에러 처리: API 호출 실패 시 적절한 에러 메시지 반환

다음 단계

- +</dependency>

주의사항

  1. API 키 보안: API 키는 설정 파일에 저장하며, Git에 커밋하지 않도록 주의
  2. 비용 관리: Gemini API 사용 시 비용이 발생할 수 있으므로 사용량 모니터링 필요
  3. Rate Limit: API 호출 제한이 있을 수 있으므로 적절한 재시도 로직 구현 권장
  4. 에러 처리: API 호출 실패 시 적절한 에러 메시지 반환

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/framework/common.html b/backend/project-structure/framework/common.html index 992836d..b6fe5dc 100644 --- a/backend/project-structure/framework/common.html +++ b/backend/project-structure/framework/common.html @@ -6,19 +6,19 @@ 공통 기능 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

공통 기능 모듈

모든 비즈니스 모듈에서 공통으로 사용하는 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/common/
+    
Skip to content

공통 기능 모듈

모든 비즈니스 모듈에서 공통으로 사용하는 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/common/
 ├── controller/                      # 공통 컨트롤러
 │   ├── AxpBaseWebController.java   # 기본 웹 컨트롤러
 │   └── AxpCommAutoScheduler.java   # 스케줄러 컨트롤러
@@ -111,8 +111,8 @@
 String encrypted = aes128.encrypt("평문");
 
 // 복호화
-String decrypted = aes128.decrypt(encrypted);

공통 상수

AxpCommConst

위치: axpFramework.common.utils.AxpCommConst

주요 상수:

  • JASPER_USE_CURSER: JasperReports 커서 상수
  • JASPER_PARAMETER: JasperReports 파라미터 상수
  • JASPER_IMAGE_SERVER_POSITION: 서버 이미지 경로 상수
  • JASPER_IMAGE_WEBAPP_POSITION: 웹 이미지 경로 상수
  • PDF_VIEWER_POSITION: PDF 뷰어 위치

다음 단계

- +String decrypted = aes128.decrypt(encrypted);

공통 상수

AxpCommConst

위치: axpFramework.common.utils.AxpCommConst

주요 상수:

  • JASPER_USE_CURSER: JasperReports 커서 상수
  • JASPER_PARAMETER: JasperReports 파라미터 상수
  • JASPER_IMAGE_SERVER_POSITION: 서버 이미지 경로 상수
  • JASPER_IMAGE_WEBAPP_POSITION: 웹 이미지 경로 상수
  • PDF_VIEWER_POSITION: PDF 뷰어 위치

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/framework/config.html b/backend/project-structure/framework/config.html index 54f4404..7282c97 100644 --- a/backend/project-structure/framework/config.html +++ b/backend/project-structure/framework/config.html @@ -6,19 +6,19 @@ 설정 클래스 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

설정 클래스 모듈

Spring Boot 애플리케이션의 핵심 설정을 담당하는 클래스들입니다.

모듈 구조

axpFramework/config/
+    
Skip to content

설정 클래스 모듈

Spring Boot 애플리케이션의 핵심 설정을 담당하는 클래스들입니다.

모듈 구조

axpFramework/config/
 ├── AxpDataSourceConfig.java        # 데이터소스 설정
 ├── AxpFilterConfig.java            # 필터 설정
 ├── AxpMyBatisResultInterceptor.java  # MyBatis 결과 인터셉터
@@ -131,8 +131,8 @@
         registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
         return registration;
     }
-}

6. AxpMyBatisResultInterceptor

위치: axpFramework.config.AxpMyBatisResultInterceptor

역할: MyBatis 결과 처리 인터셉터

주요 기능:

  • 프로시저 결과 후처리
  • 특수 타입 변환

설정 파일 위치

application.yaml

위치: src/main/resources/application.yaml

기본 설정 파일

환경별 설정 파일

위치: src/main/resources/config/

  • application-dev.yaml: 개발 환경
  • application-local.yaml: 로컬 환경
  • application-prod.yaml: 운영 환경

설정 우선순위

  1. application-prod.yaml (운영)
  2. application-dev.yaml (개발)
  3. application-local.yaml (로컬)
  4. application.yaml (기본)

다음 단계

- +}

6. AxpMyBatisResultInterceptor

위치: axpFramework.config.AxpMyBatisResultInterceptor

역할: MyBatis 결과 처리 인터셉터

주요 기능:

  • 프로시저 결과 후처리
  • 특수 타입 변환

설정 파일 위치

application.yaml

위치: src/main/resources/application.yaml

기본 설정 파일

환경별 설정 파일

위치: src/main/resources/config/

  • application-dev.yaml: 개발 환경
  • application-local.yaml: 로컬 환경
  • application-prod.yaml: 운영 환경

설정 우선순위

  1. application-prod.yaml (운영)
  2. application-dev.yaml (개발)
  3. application-local.yaml (로컬)
  4. application.yaml (기본)

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/framework/file.html b/backend/project-structure/framework/file.html index e078ccb..73fd69d 100644 --- a/backend/project-structure/framework/file.html +++ b/backend/project-structure/framework/file.html @@ -6,19 +6,19 @@ 파일 관리 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

파일 관리 모듈

파일 업로드, 다운로드, 관리 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/file/
+    
Skip to content

파일 관리 모듈

파일 업로드, 다운로드, 관리 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/file/
 ├── controller/
 │   └── AxpFileController.java      # 파일 관리 API 컨트롤러
 └── service/
@@ -129,8 +129,8 @@
   "ipAddress": "192.168.1.100"
 }
 
-Response: 파일 바이너리 (Content-Type: application/octet-stream)

주의사항

  1. 파일 크기 제한: 기본 100MB (설정에서 변경 가능)
  2. 파일 순서: files 배열 순서는 slistFILE_TYPE="1" 순서와 일치해야 함
  3. slist 인코딩: URL 인코딩된 JSON 문자열이어야 함
  4. 경로 구분자: Windows는 \, Linux는 / 자동 처리
  5. UUID 파일명: 중복 방지를 위해 UUID 사용

다음 단계

- +Response: 파일 바이너리 (Content-Type: application/octet-stream)

주의사항

  1. 파일 크기 제한: 기본 100MB (설정에서 변경 가능)
  2. 파일 순서: files 배열 순서는 slistFILE_TYPE="1" 순서와 일치해야 함
  3. slist 인코딩: URL 인코딩된 JSON 문자열이어야 함
  4. 경로 구분자: Windows는 \, Linux는 / 자동 처리
  5. UUID 파일명: 중복 방지를 위해 UUID 사용

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/framework/filter.html b/backend/project-structure/framework/filter.html index 6be378a..156f235 100644 --- a/backend/project-structure/framework/filter.html +++ b/backend/project-structure/framework/filter.html @@ -6,19 +6,19 @@ 필터 클래스 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

필터 클래스 모듈

HTTP 요청/응답을 처리하는 필터 클래스들입니다.

모듈 구조

axpFramework/filter/
+    
Skip to content

필터 클래스 모듈

HTTP 요청/응답을 처리하는 필터 클래스들입니다.

모듈 구조

axpFramework/filter/
 ├── auth/
 │   └── AxpJwtAuthenticationFilter.java  # JWT 인증 필터
 ├── logging/
@@ -93,8 +93,8 @@
 
 4. DispatcherServlet
 
-5. Controller

XSS 유틸리티

AxpXssUtil

위치: axpFramework.filter.xss.AxpXssUtil

역할: XSS 필터링 유틸리티

주요 메서드:

  • stripXss(String value): XSS 제거

사용 예시:

java
String safeValue = AxpXssUtil.stripXss(userInput);

보안 정책 파일

antisamy-policy.xml

위치: src/main/resources/antisamy-policy.xml

역할: OWASP AntiSamy 정책 파일

내용:

  • 허용된 HTML 태그 및 속성 정의
  • XSS 공격 패턴 차단 규칙

주의사항

  1. 필터 순서: XSS 필터는 반드시 최우선으로 실행되어야 함
  2. 성능: 필터는 모든 요청에 적용되므로 성능 고려 필요
  3. 예외 URI: 특정 URI는 필터에서 제외 가능
  4. 로깅: 필터 동작은 로그로 확인 가능

다음 단계

- +5. Controller

XSS 유틸리티

AxpXssUtil

위치: axpFramework.filter.xss.AxpXssUtil

역할: XSS 필터링 유틸리티

주요 메서드:

  • stripXss(String value): XSS 제거

사용 예시:

java
String safeValue = AxpXssUtil.stripXss(userInput);

보안 정책 파일

antisamy-policy.xml

위치: src/main/resources/antisamy-policy.xml

역할: OWASP AntiSamy 정책 파일

내용:

  • 허용된 HTML 태그 및 속성 정의
  • XSS 공격 패턴 차단 규칙

주의사항

  1. 필터 순서: XSS 필터는 반드시 최우선으로 실행되어야 함
  2. 성능: 필터는 모든 요청에 적용되므로 성능 고려 필요
  3. 예외 URI: 특정 URI는 필터에서 제외 가능
  4. 로깅: 필터 동작은 로그로 확인 가능

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/framework/mail.html b/backend/project-structure/framework/mail.html index d31e181..788406f 100644 --- a/backend/project-structure/framework/mail.html +++ b/backend/project-structure/framework/mail.html @@ -6,19 +6,19 @@ 메일 발송 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

메일 발송 모듈

이메일 발송 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/mail/
+    
Skip to content

메일 발송 모듈

이메일 발송 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/mail/
 ├── controller/
 │   └── AxpMailController.java       # 메일 발송 API 컨트롤러
 ├── mapper/
@@ -97,8 +97,8 @@
     "제목",
     "본문",
     "recipient@example.com"
-);

주의사항

  1. SMTP 설정: Gmail 등은 앱 비밀번호 사용 필요
  2. 보안: 비밀번호는 설정 파일에 저장, Git 커밋 주의
  3. 비동기 처리: 대량 발송 시 비동기 처리 권장
  4. 에러 처리: 발송 실패 시 재시도 로직 구현 권장

다음 단계

- +);

주의사항

  1. SMTP 설정: Gmail 등은 앱 비밀번호 사용 필요
  2. 보안: 비밀번호는 설정 파일에 저장, Git 커밋 주의
  3. 비동기 처리: 대량 발송 시 비동기 처리 권장
  4. 에러 처리: 발송 실패 시 재시도 로직 구현 권장

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/framework/report.html b/backend/project-structure/framework/report.html index 6d7c50b..b384acd 100644 --- a/backend/project-structure/framework/report.html +++ b/backend/project-structure/framework/report.html @@ -6,19 +6,19 @@ 리포트 생성 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

리포트 생성 모듈

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 모듈입니다.

모듈 구조

axpFramework/report/
+    
Skip to content

리포트 생성 모듈

JasperReports를 사용하여 PDF, Excel, HTML 리포트를 생성하는 모듈입니다.

모듈 구조

axpFramework/report/
 ├── controller/
 │   └── AxpReportController.java    # 리포트 생성 API 컨트롤러
 ├── mapper/
@@ -103,8 +103,8 @@
   "params": { ... }
 }
 
-Response: Excel 파일 (application/ms-excel)

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자로 변환
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 함
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화

다음 단계

- +Response: Excel 파일 (application/ms-excel)

주의사항

  1. 파일 자동 삭제: pdfView로 생성된 파일은 10초 후 자동 삭제
  2. 커서 키 변환: DB에서 반환된 CV_* 키는 소문자로 변환
  3. 이미지 경로: 서버 경로 이미지는 절대 경로여야 함
  4. 복호화: decrypt_column에 지정된 컬럼만 복호화

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/framework/sms.html b/backend/project-structure/framework/sms.html index 966e752..c7102a5 100644 --- a/backend/project-structure/framework/sms.html +++ b/backend/project-structure/framework/sms.html @@ -6,19 +6,19 @@ SMS 발송 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

SMS 발송 모듈

SMS 메시지 발송 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/sms/
+    
Skip to content

SMS 발송 모듈

SMS 메시지 발송 기능을 제공하는 모듈입니다.

모듈 구조

axpFramework/sms/
 ├── controller/
 │   └── AxpSmsController.java       # SMS 발송 API 컨트롤러
 ├── mapper/
@@ -132,8 +132,8 @@
     "rev_type_value": "5",
     ...
   }
-}

주의사항

  1. 즉시 발송: rev_type="10"인 경우에만 즉시 발송
  2. 예약 발송: 스케줄러가 실행되어야 발송됨
  3. 메시지 내용: 특수 문자 제한이 있을 수 있음
  4. 전화번호 형식: 하이픈(-) 없이 숫자만 입력
  5. API 키: KT CPaaS API 키는 설정 파일에 저장

다음 단계

- +}

주의사항

  1. 즉시 발송: rev_type="10"인 경우에만 즉시 발송
  2. 예약 발송: 스케줄러가 실행되어야 발송됨
  3. 메시지 내용: 특수 문자 제한이 있을 수 있음
  4. 전화번호 형식: 하이픈(-) 없이 숫자만 입력
  5. API 키: KT CPaaS API 키는 설정 파일에 저장

다음 단계

+ \ No newline at end of file diff --git a/backend/project-structure/resources.html b/backend/project-structure/resources.html index cd5beea..04184c6 100644 --- a/backend/project-structure/resources.html +++ b/backend/project-structure/resources.html @@ -6,19 +6,19 @@ 리소스 파일 구조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

리소스 파일 구조

리소스 파일은 src/main/resources/ 디렉토리에 위치합니다.

디렉토리 구조

resources/
+    
Skip to content

리소스 파일 구조

리소스 파일은 src/main/resources/ 디렉토리에 위치합니다.

디렉토리 구조

resources/
 ├── application.yaml                 # 기본 설정 파일
 ├── config/                         # 환경별 설정 파일
 ├── mapper/                         # MyBatis XML 매퍼
@@ -78,8 +78,8 @@
     <systemPath>${basedir}/src/main/resources/lib/tibero6-jdbc.jar</systemPath>
 </dependency>

보안 정책 파일

antisamy-policy.xml

OWASP AntiSamy의 XSS 방지 정책 파일입니다.

위치: src/main/resources/antisamy-policy.xml

용도:

  • 허용할 HTML 태그 정의
  • 허용할 속성 정의
  • 스크립트 차단

로깅 설정

logback-spring.xml

Logback 로깅 설정 파일입니다.

위치: src/main/resources/logback-spring.xml

주요 설정:

  • 로그 레벨
  • 로그 파일 경로
  • 로그 포맷
  • 로그 롤링 정책

로그 파일 위치:

  • logs/AxpFramework/AxpFramework.log
  • logs/ess/ess-log.log
  • logs/fcm/fcm-log.log

배너

애플리케이션 시작 시 표시되는 배너입니다.

위치: src/main/resources/banner.txt

비활성화:

yaml
spring:
   main:
-    banner-mode: off

다음 단계

- + banner-mode: off

다음 단계

+ \ No newline at end of file diff --git a/backend/references/classes.html b/backend/references/classes.html index 06271d1..4c73f19 100644 --- a/backend/references/classes.html +++ b/backend/references/classes.html @@ -6,20 +6,20 @@ 주요 클래스 참조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

주요 클래스 참조

AxpFramework의 주요 클래스를 정리합니다.

공통 컨트롤러

  • AxpBaseWebController: 모든 컨트롤러의 기본 클래스

공통 서비스

  • AxpCommDbService: 프로시저 호출 서비스
  • AxpCommRedisDbService: Redis 서비스
  • AxpCommAuthService: JWT 인증 서비스

설정 클래스

  • AxpDataSourceConfig: 데이터소스 설정
  • AxpRedisConfig: Redis 설정
  • AxpSecurityConfig: Security 설정
  • AxpWebConfig: Web 설정

다음 단계

- +
Skip to content

주요 클래스 참조

AxpFramework의 주요 클래스를 정리합니다.

공통 컨트롤러

  • AxpBaseWebController: 모든 컨트롤러의 기본 클래스

공통 서비스

  • AxpCommDbService: 프로시저 호출 서비스
  • AxpCommRedisDbService: Redis 서비스
  • AxpCommAuthService: JWT 인증 서비스

설정 클래스

  • AxpDataSourceConfig: 데이터소스 설정
  • AxpRedisConfig: Redis 설정
  • AxpSecurityConfig: Security 설정
  • AxpWebConfig: Web 설정

다음 단계

+ \ No newline at end of file diff --git a/backend/references/config-files.html b/backend/references/config-files.html index c494bed..9c34a7d 100644 --- a/backend/references/config-files.html +++ b/backend/references/config-files.html @@ -6,20 +6,20 @@ 설정 파일 참조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

설정 파일 참조

주요 설정 파일의 위치와 역할을 정리합니다.

설정 파일

  • application.yaml: 기본 설정
  • config/application-dev.yaml: 개발 환경 설정
  • config/application-local.yaml: 로컬 환경 설정
  • config/application-prod.yaml: 운영 환경 설정

MyBatis 설정

  • mapper-config/mybatis-config-tibero.xml: Tibero 설정
  • mapper-config/mybatis-config-oracle.xml: Oracle 설정
  • mapper-config/mybatis-config-postgresql.xml: PostgreSQL 설정

다음 단계

- +
Skip to content

설정 파일 참조

주요 설정 파일의 위치와 역할을 정리합니다.

설정 파일

  • application.yaml: 기본 설정
  • config/application-dev.yaml: 개발 환경 설정
  • config/application-local.yaml: 로컬 환경 설정
  • config/application-prod.yaml: 운영 환경 설정

MyBatis 설정

  • mapper-config/mybatis-config-tibero.xml: Tibero 설정
  • mapper-config/mybatis-config-oracle.xml: Oracle 설정
  • mapper-config/mybatis-config-postgresql.xml: PostgreSQL 설정

다음 단계

+ \ No newline at end of file diff --git a/backend/references/external-libs.html b/backend/references/external-libs.html index 605a3ef..a3b4ed4 100644 --- a/backend/references/external-libs.html +++ b/backend/references/external-libs.html @@ -6,20 +6,20 @@ 외부 라이브러리 문서 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

외부 라이브러리 문서

사용하는 주요 외부 라이브러리의 공식 문서 링크입니다.

Spring Boot

MyBatis

Spring Security

JWT

JasperReports

Apache POI

Redis

- +
Skip to content

외부 라이브러리 문서

사용하는 주요 외부 라이브러리의 공식 문서 링크입니다.

Spring Boot

MyBatis

Spring Security

JWT

JasperReports

Apache POI

Redis

+ \ No newline at end of file diff --git a/backend/security/encryption.html b/backend/security/encryption.html index 5969108..1f50b0c 100644 --- a/backend/security/encryption.html +++ b/backend/security/encryption.html @@ -6,19 +6,19 @@ 암호화 유틸리티 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

암호화 유틸리티

AxpFramework는 다양한 암호화 유틸리티를 제공합니다.

AES-128

대칭키 암호화 알고리즘입니다.

사용 예시

java
@Autowired
+    
Skip to content

암호화 유틸리티

AxpFramework는 다양한 암호화 유틸리티를 제공합니다.

AES-128

대칭키 암호화 알고리즘입니다.

사용 예시

java
@Autowired
 private AxpCommAES128 aes128;
 
 // 암호화
@@ -39,8 +39,8 @@
 String hash = md5Util.hash(input);

SHA-256

java
@Autowired
 private AxpCommSHA256Util sha256Util;
 
-String hash = sha256Util.hash(input);

다음 단계

- +String hash = sha256Util.hash(input);

다음 단계

+ \ No newline at end of file diff --git a/backend/security/filters.html b/backend/security/filters.html index 4fb696e..8e28ded 100644 --- a/backend/security/filters.html +++ b/backend/security/filters.html @@ -6,27 +6,27 @@ 보안 필터 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

보안 필터

AxpFramework는 여러 보안 필터를 사용하여 요청을 처리합니다.

필터 실행 순서

  1. AxpXssFilter (최우선)
  2. AxpCorsLoggingFilter
  3. AxpDecryptFilter
  4. AxpJwtAuthenticationFilter

XSS 필터

AxpXssFilter

모든 요청에 대해 XSS 공격을 방지합니다.

실행 순서:

  1. 요청 데이터 검사
  2. XSS 패턴 탐지
  3. 위험한 스크립트 제거
  4. 정제된 데이터 전달

설정

java
@Bean
+    
Skip to content

보안 필터

AxpFramework는 여러 보안 필터를 사용하여 요청을 처리합니다.

필터 실행 순서

  1. AxpXssFilter (최우선)
  2. AxpCorsLoggingFilter
  3. AxpDecryptFilter
  4. AxpJwtAuthenticationFilter

XSS 필터

AxpXssFilter

모든 요청에 대해 XSS 공격을 방지합니다.

실행 순서:

  1. 요청 데이터 검사
  2. XSS 패턴 탐지
  3. 위험한 스크립트 제거
  4. 정제된 데이터 전달

설정

java
@Bean
 public FilterRegistrationBean<AxpXssFilter> AxpXssFilterRegistration() {
     FilterRegistrationBean<AxpXssFilter> registration = new FilterRegistrationBean<>();
     registration.setFilter(new AxpXssFilter());
     registration.addUrlPatterns("/*");
     registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
     return registration;
-}

복호화 필터

AxpDecryptFilter

RSA로 AES 키를 복호화하고, AES-CBC로 요청 데이터를 복호화합니다.

동작:

  1. 요청 본문에서 암호화된 데이터 추출
  2. RSA로 AES 키 복호화
  3. AES로 요청 데이터 복호화
  4. 원본 JSON 바디로 복원

JWT 인증 필터

AxpJwtAuthenticationFilter

JWT 토큰을 검증하여 인증을 처리합니다.

동작 순서:

  1. 제외 URI 확인
  2. 쿠키에서 Refresh Token 추출
  3. Authorization 헤더에서 Access Token 추출
  4. 토큰 검증
  5. SecurityContext에 인증 정보 설정

Rate Limiting

분당 최대 요청 수를 제한합니다.

java
private static final int MAX_REQUESTS_PER_MINUTE = 120;

CORS 로깅 필터

AxpCorsLoggingFilter

CORS 요청을 로깅합니다.

다음 단계

- +}

복호화 필터

AxpDecryptFilter

RSA로 AES 키를 복호화하고, AES-CBC로 요청 데이터를 복호화합니다.

동작:

  1. 요청 본문에서 암호화된 데이터 추출
  2. RSA로 AES 키 복호화
  3. AES로 요청 데이터 복호화
  4. 원본 JSON 바디로 복원

JWT 인증 필터

AxpJwtAuthenticationFilter

JWT 토큰을 검증하여 인증을 처리합니다.

동작 순서:

  1. 제외 URI 확인
  2. 쿠키에서 Refresh Token 추출
  3. Authorization 헤더에서 Access Token 추출
  4. 토큰 검증
  5. SecurityContext에 인증 정보 설정

Rate Limiting

분당 최대 요청 수를 제한합니다.

java
private static final int MAX_REQUESTS_PER_MINUTE = 120;

CORS 로깅 필터

AxpCorsLoggingFilter

CORS 요청을 로깅합니다.

다음 단계

+ \ No newline at end of file diff --git a/backend/security/jwt.html b/backend/security/jwt.html index 66537a7..5c155c4 100644 --- a/backend/security/jwt.html +++ b/backend/security/jwt.html @@ -6,19 +6,19 @@ JWT 인증 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

JWT 인증

AxpFramework는 JWT(JSON Web Token)를 사용하여 인증을 처리합니다.

토큰 타입

Access Token

  • 유효기간: 15분
  • 용도: API 인증
  • 저장: Authorization 헤더 또는 메모리

Refresh Token

  • 유효기간: 7일
  • 용도: Access Token 재발급
  • 저장: HttpOnly 쿠키

토큰 생성

java
@Autowired
+    
Skip to content

JWT 인증

AxpFramework는 JWT(JSON Web Token)를 사용하여 인증을 처리합니다.

토큰 타입

Access Token

  • 유효기간: 15분
  • 용도: API 인증
  • 저장: Authorization 헤더 또는 메모리

Refresh Token

  • 유효기간: 7일
  • 용도: Access Token 재발급
  • 저장: HttpOnly 쿠키

토큰 생성

java
@Autowired
 private AxpCommAuthService authService;
 
 // Access Token 생성
@@ -37,8 +37,8 @@
 
 Map<String, Object> result = redisService.setRedisToken(
     uuid, userId, "rediscache", ipAddress, userAgent, refreshToken
-);

다음 단계

- +);

다음 단계

+ \ No newline at end of file diff --git a/backend/security/spring-security.html b/backend/security/spring-security.html index 9a44344..e346370 100644 --- a/backend/security/spring-security.html +++ b/backend/security/spring-security.html @@ -6,19 +6,19 @@ Spring Security 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Spring Security 설정

AxpFramework는 Spring Security를 사용하여 인증/인가를 처리합니다.

SecurityFilterChain

기본 설정

java
@Bean
+    
Skip to content

Spring Security 설정

AxpFramework는 Spring Security를 사용하여 인증/인가를 처리합니다.

SecurityFilterChain

기본 설정

java
@Bean
 public SecurityFilterChain securityFilterChain(HttpSecurity http) {
     http
         .csrf(csrf -> csrf.disable())
@@ -51,8 +51,8 @@
     res.setStatus(401);
     res.setContentType("application/json");
     res.getWriter().write("{\"error\": \"인증이 필요합니다.\"}");
-})

다음 단계

- +})

다음 단계

+ \ No newline at end of file diff --git a/backend/tech-stack/databases.html b/backend/tech-stack/databases.html index f662bc6..5fc1067 100644 --- a/backend/tech-stack/databases.html +++ b/backend/tech-stack/databases.html @@ -6,19 +6,19 @@ 데이터베이스 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

데이터베이스

AxpFramework는 여러 데이터베이스를 지원합니다. 환경 설정을 통해 사용할 데이터베이스를 선택할 수 있습니다.

지원 데이터베이스

1. Tibero6 (기본값)

특징:

  • 국산 데이터베이스
  • Oracle 호환성
  • 프로젝트에 JDBC 드라이버 포함

설정:

yaml
app:
+    
Skip to content

데이터베이스

AxpFramework는 여러 데이터베이스를 지원합니다. 환경 설정을 통해 사용할 데이터베이스를 선택할 수 있습니다.

지원 데이터베이스

1. Tibero6 (기본값)

특징:

  • 국산 데이터베이스
  • Oracle 호환성
  • 프로젝트에 JDBC 드라이버 포함

설정:

yaml
app:
   datasource:
     type: tibero
 
@@ -82,8 +82,8 @@
       host: localhost
       port: 6379
       password: ""
-      database: 0

RedisTemplate

두 개의 RedisTemplate을 사용합니다:

  • cacheRedisTemplate: 캐시용
  • bizcompRedisTemplate: 비즈니스 컴포넌트용

다음 단계

- + database: 0

RedisTemplate

두 개의 RedisTemplate을 사용합니다:

  • cacheRedisTemplate: 캐시용
  • bizcompRedisTemplate: 비즈니스 컴포넌트용

다음 단계

+ \ No newline at end of file diff --git a/backend/tech-stack/documentation.html b/backend/tech-stack/documentation.html index 78224b7..2bbef54 100644 --- a/backend/tech-stack/documentation.html +++ b/backend/tech-stack/documentation.html @@ -6,19 +6,19 @@ 문서화 및 API | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

문서화 및 API

AxpFramework는 Springdoc OpenAPI를 사용하여 API 문서를 자동으로 생성합니다.

Springdoc OpenAPI

버전

  • Springdoc OpenAPI: 2.5.0

기능

  • Swagger UI 자동 생성
  • API 문서 자동화
  • 인터랙티브 API 테스트

접근 URL

개발 환경에서 다음 URL로 접근할 수 있습니다:

http://localhost:8080/swagger-ui.html

또는

http://localhost:8080/swagger-ui/index.html

API 문서 자동 생성

컨트롤러 어노테이션

컨트롤러에 어노테이션을 추가하면 자동으로 API 문서가 생성됩니다.

java
@RestController
+    
Skip to content

문서화 및 API

AxpFramework는 Springdoc OpenAPI를 사용하여 API 문서를 자동으로 생성합니다.

Springdoc OpenAPI

버전

  • Springdoc OpenAPI: 2.5.0

기능

  • Swagger UI 자동 생성
  • API 문서 자동화
  • 인터랙티브 API 테스트

접근 URL

개발 환경에서 다음 URL로 접근할 수 있습니다:

http://localhost:8080/swagger-ui.html

또는

http://localhost:8080/swagger-ui/index.html

API 문서 자동 생성

컨트롤러 어노테이션

컨트롤러에 어노테이션을 추가하면 자동으로 API 문서가 생성됩니다.

java
@RestController
 @RequestMapping("/api/user")
 @Tag(name = "사용자 관리", description = "사용자 관련 API")
 public class EssComController extends AxpBaseWebController {
@@ -68,8 +68,8 @@
         .group("admin")
         .pathsToMatch("/api/admin/**")
         .build();
-}

API 테스트

Swagger UI에서 테스트

  1. Swagger UI 접속
  2. 원하는 API 선택
  3. "Try it out" 클릭
  4. 파라미터 입력
  5. "Execute" 클릭
  6. 응답 확인

인증 설정

JWT 토큰이 필요한 API의 경우:

  1. Swagger UI 상단의 "Authorize" 버튼 클릭
  2. 토큰 입력
  3. "Authorize" 클릭
  4. API 호출

다음 단계

- +}

API 테스트

Swagger UI에서 테스트

  1. Swagger UI 접속
  2. 원하는 API 선택
  3. "Try it out" 클릭
  4. 파라미터 입력
  5. "Execute" 클릭
  6. 응답 확인

인증 설정

JWT 토큰이 필요한 API의 경우:

  1. Swagger UI 상단의 "Authorize" 버튼 클릭
  2. 토큰 입력
  3. "Authorize" 클릭
  4. API 호출

다음 단계

+ \ No newline at end of file diff --git a/backend/tech-stack/file-processing.html b/backend/tech-stack/file-processing.html index 61f4cec..7ffa5af 100644 --- a/backend/tech-stack/file-processing.html +++ b/backend/tech-stack/file-processing.html @@ -6,19 +6,19 @@ 파일 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

파일 처리

AxpFramework는 다양한 파일 처리 기능을 제공합니다.

Apache POI

버전

  • POI: 5.2.5
  • POI OOXML: 5.2.5

기능

  • Excel 파일 읽기/쓰기
  • Word 파일 처리
  • PowerPoint 파일 처리

사용 예시

java
// Excel 파일 생성
+    
Skip to content

파일 처리

AxpFramework는 다양한 파일 처리 기능을 제공합니다.

Apache POI

버전

  • POI: 5.2.5
  • POI OOXML: 5.2.5

기능

  • Excel 파일 읽기/쓰기
  • Word 파일 처리
  • PowerPoint 파일 처리

사용 예시

java
// Excel 파일 생성
 Workbook workbook = new XSSFWorkbook();
 Sheet sheet = workbook.createSheet("Sheet1");
 Row row = sheet.createRow(0);
@@ -98,8 +98,8 @@
 import net.sf.jmimemagic.MagicMatch;
 
 MagicMatch match = Magic.getMagicMatch(file);
-String mimeType = match.getMimeType();

다음 단계

- +String mimeType = match.getMimeType();

다음 단계

+ \ No newline at end of file diff --git a/backend/tech-stack/frameworks.html b/backend/tech-stack/frameworks.html index 7ea38a8..76876e1 100644 --- a/backend/tech-stack/frameworks.html +++ b/backend/tech-stack/frameworks.html @@ -6,19 +6,19 @@ 프레임워크 및 라이브러리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

프레임워크 및 라이브러리

AxpFramework에서 사용하는 주요 프레임워크와 라이브러리를 설명합니다.

Spring Boot

버전

  • Spring Boot: 3.2.5

주요 모듈

Spring Boot Starter Web

xml
<dependency>
+    
Skip to content

프레임워크 및 라이브러리

AxpFramework에서 사용하는 주요 프레임워크와 라이브러리를 설명합니다.

Spring Boot

버전

  • Spring Boot: 3.2.5

주요 모듈

Spring Boot Starter Web

xml
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
  • RESTful API 개발을 위한 웹 모듈
  • 내장 Tomcat 서버 포함
  • JSON 직렬화/역직렬화 지원

Spring Boot Starter AOP

xml
<dependency>
@@ -59,8 +59,8 @@
     .setSubject(userId)
     .setExpiration(expiryDate)
     .signWith(key)
-    .compact();

OWASP AntiSamy

버전

  • AntiSamy: 1.7.4

기능

  • XSS 공격 방지
  • HTML/스크립트 정제
  • 정책 파일: antisamy-policy.xml

다음 단계

- + .compact();

OWASP AntiSamy

버전

  • AntiSamy: 1.7.4

기능

  • XSS 공격 방지
  • HTML/스크립트 정제
  • 정책 파일: antisamy-policy.xml

다음 단계

+ \ No newline at end of file diff --git a/backend/tech-stack/security.html b/backend/tech-stack/security.html index 64530e1..cd1176d 100644 --- a/backend/tech-stack/security.html +++ b/backend/tech-stack/security.html @@ -6,19 +6,19 @@ 보안 및 인증 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

보안 및 인증

AxpFramework는 다양한 보안 기능을 제공하여 안전한 애플리케이션 개발을 지원합니다.

JWT (JSON Web Token)

버전

  • JJWT: 0.11.5

토큰 타입

Access Token

  • 유효기간: 15분
  • 용도: API 인증
  • 저장 위치: Authorization 헤더 또는 메모리

Refresh Token

  • 유효기간: 7일
  • 용도: Access Token 재발급
  • 저장 위치: HttpOnly 쿠키

토큰 생성

java
@Autowired
+    
Skip to content

보안 및 인증

AxpFramework는 다양한 보안 기능을 제공하여 안전한 애플리케이션 개발을 지원합니다.

JWT (JSON Web Token)

버전

  • JJWT: 0.11.5

토큰 타입

Access Token

  • 유효기간: 15분
  • 용도: API 인증
  • 저장 위치: Authorization 헤더 또는 메모리

Refresh Token

  • 유효기간: 7일
  • 용도: Access Token 재발급
  • 저장 위치: HttpOnly 쿠키

토큰 생성

java
@Autowired
 private AxpCommAuthService axpCommAuthService;
 
 // Access Token 생성
@@ -77,8 +77,8 @@
 String hash = sha256Util.hash(input);

XSS 방지

OWASP AntiSamy

HTML 입력을 정제하여 XSS 공격을 방지합니다.

java
@Autowired
 private AxpXssUtil xssUtil;
 
-String sanitized = xssUtil.sanitize(htmlInput);

정책 파일

antisamy-policy.xml 파일에서 허용할 HTML 태그와 속성을 정의합니다.

XSS 필터

AxpXssFilter가 모든 요청에 대해 XSS 공격을 방지합니다.

실행 순서:

  1. 요청 데이터 검사
  2. XSS 패턴 탐지
  3. 위험한 스크립트 제거
  4. 정제된 데이터를 컨트롤러에 전달

보안 헤더

Spring Security를 통해 다음 보안 헤더를 자동으로 설정합니다:

  • Content-Security-Policy: XSS 방지
  • X-Frame-Options: 클릭재킹 방지
  • X-Content-Type-Options: MIME 타입 스니핑 방지
  • Referrer-Policy: Referer 정보 제한
  • Strict-Transport-Security: HTTPS 강제
  • Cache-Control: 캐시 비활성화

다음 단계

- +String sanitized = xssUtil.sanitize(htmlInput);

정책 파일

antisamy-policy.xml 파일에서 허용할 HTML 태그와 속성을 정의합니다.

XSS 필터

AxpXssFilter가 모든 요청에 대해 XSS 공격을 방지합니다.

실행 순서:

  1. 요청 데이터 검사
  2. XSS 패턴 탐지
  3. 위험한 스크립트 제거
  4. 정제된 데이터를 컨트롤러에 전달

보안 헤더

Spring Security를 통해 다음 보안 헤더를 자동으로 설정합니다:

  • Content-Security-Policy: XSS 방지
  • X-Frame-Options: 클릭재킹 방지
  • X-Content-Type-Options: MIME 타입 스니핑 방지
  • Referrer-Policy: Referer 정보 제한
  • Strict-Transport-Security: HTTPS 강제
  • Cache-Control: 캐시 비활성화

다음 단계

+ \ No newline at end of file diff --git a/backend/tech-stack/utilities.html b/backend/tech-stack/utilities.html index 7ad7bc9..741bd80 100644 --- a/backend/tech-stack/utilities.html +++ b/backend/tech-stack/utilities.html @@ -6,19 +6,19 @@ 기타 유틸리티 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

기타 유틸리티

AxpFramework에서 사용하는 기타 유틸리티 라이브러리를 설명합니다.

Jsoup

버전

  • Jsoup: 1.18.1

기능

  • HTML 파싱
  • HTML 정제
  • 웹 스크래핑

사용 예시

java
import org.jsoup.Jsoup;
+    
Skip to content

기타 유틸리티

AxpFramework에서 사용하는 기타 유틸리티 라이브러리를 설명합니다.

Jsoup

버전

  • Jsoup: 1.18.1

기능

  • HTML 파싱
  • HTML 정제
  • 웹 스크래핑

사용 예시

java
import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 
 // HTML 파싱
@@ -52,8 +52,8 @@
 boolean isEmpty = CollectionUtils.isEmpty(list);
 
 // 컬렉션 필터링
-Collection<String> filtered = CollectionUtils.select(list, predicate);

다음 단계

- +Collection<String> filtered = CollectionUtils.select(list, predicate);

다음 단계

+ \ No newline at end of file diff --git a/backend/testing/integration-test.html b/backend/testing/integration-test.html index b694acd..228d4e2 100644 --- a/backend/testing/integration-test.html +++ b/backend/testing/integration-test.html @@ -6,19 +6,19 @@ 통합 테스트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

통합 테스트

통합 테스트를 작성하는 방법을 설명합니다.

기본 구조

java
@SpringBootTest
+    
Skip to content

통합 테스트

통합 테스트를 작성하는 방법을 설명합니다.

기본 구조

java
@SpringBootTest
 @AutoConfigureMockMvc
 class ControllerTest {
     
@@ -32,8 +32,8 @@
             .content("{}"))
             .andExpect(status().isOk());
     }
-}

다음 단계

- +}

다음 단계

+ \ No newline at end of file diff --git a/backend/testing/unit-test.html b/backend/testing/unit-test.html index ec47c12..15ed2ec 100644 --- a/backend/testing/unit-test.html +++ b/backend/testing/unit-test.html @@ -6,19 +6,19 @@ 단위 테스트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

단위 테스트

단위 테스트를 작성하는 방법을 설명합니다.

기본 구조

java
@SpringBootTest
+    
Skip to content

단위 테스트

단위 테스트를 작성하는 방법을 설명합니다.

기본 구조

java
@SpringBootTest
 class ServiceTest {
     
     @Autowired
@@ -28,8 +28,8 @@
     void testMethod() {
         // 테스트 코드
     }
-}

다음 단계

- +}

다음 단계

+ \ No newline at end of file diff --git a/backend/troubleshooting/common-issues.html b/backend/troubleshooting/common-issues.html index 614cd40..5bb88c8 100644 --- a/backend/troubleshooting/common-issues.html +++ b/backend/troubleshooting/common-issues.html @@ -6,21 +6,21 @@ 일반적인 문제 해결 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

일반적인 문제 해결

자주 발생하는 문제와 해결 방법을 설명합니다.

포트 충돌

문제: 8080 포트가 이미 사용 중

해결: application-dev.yaml에서 포트 변경

yaml
server:
-  port: 8081

데이터베이스 연결 실패

문제: 데이터베이스 연결 실패

해결:

  1. 데이터베이스 서버 실행 확인
  2. 연결 정보 확인
  3. 방화벽 설정 확인

Redis 연결 실패

문제: Redis 연결 실패

해결:

  1. Redis 서버 실행 확인
  2. 포트 확인
  3. 비밀번호 설정 확인

다음 단계

- +
Skip to content

일반적인 문제 해결

자주 발생하는 문제와 해결 방법을 설명합니다.

포트 충돌

문제: 8080 포트가 이미 사용 중

해결: application-dev.yaml에서 포트 변경

yaml
server:
+  port: 8081

데이터베이스 연결 실패

문제: 데이터베이스 연결 실패

해결:

  1. 데이터베이스 서버 실행 확인
  2. 연결 정보 확인
  3. 방화벽 설정 확인

Redis 연결 실패

문제: Redis 연결 실패

해결:

  1. Redis 서버 실행 확인
  2. 포트 확인
  3. 비밀번호 설정 확인

다음 단계

+ \ No newline at end of file diff --git a/backend/troubleshooting/logging.html b/backend/troubleshooting/logging.html index abc97b8..39cf194 100644 --- a/backend/troubleshooting/logging.html +++ b/backend/troubleshooting/logging.html @@ -6,25 +6,25 @@ 로그 확인 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

로그 확인

로그 파일 위치와 확인 방법을 설명합니다.

로그 파일 위치

logs/AxpFramework/AxpFramework.log
+    
Skip to content

로그 확인

로그 파일 위치와 확인 방법을 설명합니다.

로그 파일 위치

logs/AxpFramework/AxpFramework.log
 logs/ess/ess-log.log
 logs/fcm/fcm-log.log

로그 레벨 설정

yaml
logging:
   level:
     org.apache.ibatis: DEBUG
-    axpFramework: DEBUG

다음 단계

- + axpFramework: DEBUG

다음 단계

+ \ No newline at end of file diff --git a/components/common/button.html b/components/common/button.html index d1cae83..93c16c3 100644 --- a/components/common/button.html +++ b/components/common/button.html @@ -6,19 +6,19 @@ 버튼 컴포넌트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

버튼 컴포넌트

ButtonBox

파일 위치

src/views/ui/components/common/button/ButtonBox.vue

사용 예제

vue
<template>
+    
Skip to content

버튼 컴포넌트

ButtonBox

파일 위치

src/views/ui/components/common/button/ButtonBox.vue

사용 예제

vue
<template>
   <ButtonBox
     text="저장"
     @click="handleSave"
@@ -27,8 +27,8 @@
   <v-btn color="primary" @click="handleClick">
     클릭
   </v-btn>
-</template>
- +</template>
+ \ No newline at end of file diff --git a/components/common/input.html b/components/common/input.html index 499cd73..9147ecd 100644 --- a/components/common/input.html +++ b/components/common/input.html @@ -6,19 +6,19 @@ 입력 컴포넌트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

입력 컴포넌트

InputPhone

파일 위치

src/views/ui/components/common/input/InputPhone.vue

사용 예제

vue
<template>
+    
Skip to content

입력 컴포넌트

InputPhone

파일 위치

src/views/ui/components/common/input/InputPhone.vue

사용 예제

vue
<template>
   <InputPhone
     v-model="phoneNumber"
     label="전화번호"
@@ -28,8 +28,8 @@
     v-model="value"
     label="입력"
   />
-</template>
- +</template>
+ \ No newline at end of file diff --git a/components/common/loading.html b/components/common/loading.html index 8118541..d4effeb 100644 --- a/components/common/loading.html +++ b/components/common/loading.html @@ -6,19 +6,19 @@ 로딩 컴포넌트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

로딩 컴포넌트

Loading

파일 위치

src/views/ui/components/common/Loading.vue

사용 예제

vue
<template>
+    
Skip to content

로딩 컴포넌트

Loading

파일 위치

src/views/ui/components/common/Loading.vue

사용 예제

vue
<template>
   <Loading :isLoading="loadingStore.isLoading" />
 </template>
 
@@ -26,8 +26,8 @@
 import { useLoadingStore } from '@/utils/stores/loadingStore.js'
 
 const loadingStore = useLoadingStore()
-</script>
- +</script>
+ \ No newline at end of file diff --git a/components/common/lookup.html b/components/common/lookup.html index cdd717e..aace893 100644 --- a/components/common/lookup.html +++ b/components/common/lookup.html @@ -6,19 +6,19 @@ 조회 컴포넌트 (LookUp) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

조회 컴포넌트 (LookUp)

LookUpBox

파일 위치

src/views/ui/components/common/lookup/LookUpBox.vue

사용 예제

vue
<template>
+    
Skip to content

조회 컴포넌트 (LookUp)

LookUpBox

파일 위치

src/views/ui/components/common/lookup/LookUpBox.vue

사용 예제

vue
<template>
   <LookUpBox
     v-model="selectedValue"
     :lookup-config="lookupConfig"
@@ -29,8 +29,8 @@
 const lookupConfig = {
   // 조회 설정
 }
-</script>
- +</script>
+ \ No newline at end of file diff --git a/components/common/select.html b/components/common/select.html index 8d0bad2..5316c01 100644 --- a/components/common/select.html +++ b/components/common/select.html @@ -6,19 +6,19 @@ 선택 컴포넌트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

선택 컴포넌트

개요

프로젝트에서 사용하는 선택(Select) 관련 컴포넌트들입니다. 다양한 형태의 선택 컴포넌트를 제공합니다.

SelectBoxSQL

개요

SQL 쿼리 결과를 기반으로 하는 단일 선택 컴포넌트입니다. Vuetify의 v-combobox를 기반으로 구현되었습니다.

파일 위치

src/views/ui/components/common/select/SelectBoxSQL.vue

Props

속성타입기본값설명
modelValueString-선택된 값 (v-model)
optionLabelString-표시할 라벨 필드명
optionValueString-값으로 사용할 필드명
defaultOptionBooleanfalse'선택' 옵션 추가 여부
readOnlyBooleanfalse읽기 전용 모드
labelString-라벨 텍스트
hiddenBooleanfalse선택된 값 숨김 여부
dataArray[]선택 옵션 데이터

사용 예제

vue

+    
Skip to content

선택 컴포넌트

개요

프로젝트에서 사용하는 선택(Select) 관련 컴포넌트들입니다. 다양한 형태의 선택 컴포넌트를 제공합니다.

SelectBoxSQL

개요

SQL 쿼리 결과를 기반으로 하는 단일 선택 컴포넌트입니다. Vuetify의 v-combobox를 기반으로 구현되었습니다.

파일 위치

src/views/ui/components/common/select/SelectBoxSQL.vue

Props

속성타입기본값설명
modelValueString-선택된 값 (v-model)
optionLabelString-표시할 라벨 필드명
optionValueString-값으로 사용할 필드명
defaultOptionBooleanfalse'선택' 옵션 추가 여부
readOnlyBooleanfalse읽기 전용 모드
labelString-라벨 텍스트
hiddenBooleanfalse선택된 값 숨김 여부
dataArray[]선택 옵션 데이터

사용 예제

vue

 <script setup>
     import {ref} from 'vue'
 
@@ -108,7 +108,7 @@
 const handleChange = (value) => {
   console.log('선택된 값:', value)
 }
-</script>

콜백 함수 사용

vue
<template>
+</script>

선택된 값:

콜백 함수 사용

vue
<template>
   <MultiSelectBoxSQL
     v-model="selectedValue"
     :data="options"
@@ -160,8 +160,8 @@
 .custom-combobox {
   /* 커스텀 스타일 */
 }
-</style>

주의사항

  1. 데이터 형식: data 배열의 각 객체는 optionLabeloptionValue에 해당하는 필드를 포함해야 합니다.

  2. 반응성: data 배열이 변경되면 자동으로 옵션이 업데이트됩니다.

  3. 성능: 대량의 데이터를 사용하는 경우 가상 스크롤링을 고려하세요.

관련 문서

- +</style>

주의사항

  1. 데이터 형식: data 배열의 각 객체는 optionLabeloptionValue에 해당하는 필드를 포함해야 합니다.

  2. 반응성: data 배열이 변경되면 자동으로 옵션이 업데이트됩니다.

  3. 성능: 대량의 데이터를 사용하는 경우 가상 스크롤링을 고려하세요.

관련 문서

+ \ No newline at end of file diff --git a/components/common/tree.html b/components/common/tree.html index 261e6f4..8e8d751 100644 --- a/components/common/tree.html +++ b/components/common/tree.html @@ -6,20 +6,20 @@ 트리 컴포넌트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

트리 컴포넌트

TreeDeptDropdown

부서 트리 드롭다운 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeDeptDropdown.vue

TreeEmpDropdown

직원 트리 드롭다운 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeEmpDropdown.vue

TreeOrgNode

조직 트리 노드 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeOrgNode.vue

- +
Skip to content

트리 컴포넌트

TreeDeptDropdown

부서 트리 드롭다운 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeDeptDropdown.vue

TreeEmpDropdown

직원 트리 드롭다운 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeEmpDropdown.vue

TreeOrgNode

조직 트리 노드 컴포넌트입니다.

파일 위치

src/views/ui/components/common/tree/TreeOrgNode.vue

+ \ No newline at end of file diff --git a/components/grid/ag-grid.html b/components/grid/ag-grid.html index d51fb8a..879d23f 100644 --- a/components/grid/ag-grid.html +++ b/components/grid/ag-grid.html @@ -6,19 +6,19 @@ AG Grid 래퍼 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

AG Grid 래퍼

개요

AG Grid를 Vue 컴포넌트로 사용하기 위한 래퍼입니다.

기본 사용

vue
<template>
+    
Skip to content

AG Grid 래퍼

개요

AG Grid를 Vue 컴포넌트로 사용하기 위한 래퍼입니다.

기본 사용

vue
<template>
   <AgGridVue
     :columnDefs="columnDefs"
     :rowData="rowData"
@@ -36,15 +36,15 @@
 ])
 
 const rowData = ref([])
-</script>

셀 에디터

커스텀 셀 에디터를 사용할 수 있습니다:

javascript
{
+</script>

셀 에디터

커스텀 셀 에디터를 사용할 수 있습니다:

javascript
{
   field: 'department',
-  editable: true,
-  cellEditor: 'GridMultiSelectWrapper',
-  cellEditorParams: {
+  editable : true,
+  cellEditor : 'GridMultiSelectWrapper',
+  cellEditorParams : {
     // 파라미터
-  },
-}
- + } +}
+ \ No newline at end of file diff --git a/components/grid/click-field.html b/components/grid/click-field.html index f9940ab..cede79d 100644 --- a/components/grid/click-field.html +++ b/components/grid/click-field.html @@ -6,19 +6,19 @@ 그리드 클릭 필드 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

그리드 클릭 필드

GridClickField

개요

AG Grid의 셀을 클릭 가능한 필드로 렌더링하는 컴포넌트입니다.

파일 위치

src/views/ui/components/grid/GridClickField.vue

주요 기능

  • 셀 클릭 이벤트 처리
  • 버튼 형태 렌더링
  • 커스텀 액션 실행

사용 예제

javascript
const columnDefs = ref([
+    
Skip to content

그리드 클릭 필드

GridClickField

개요

AG Grid의 셀을 클릭 가능한 필드로 렌더링하는 컴포넌트입니다.

파일 위치

src/views/ui/components/grid/GridClickField.vue

주요 기능

  • 셀 클릭 이벤트 처리
  • 버튼 형태 렌더링
  • 커스텀 액션 실행

사용 예제

javascript
const columnDefs = ref([
   {
     field: 'action',
     headerName: '액션',
@@ -40,8 +40,8 @@
       }
     },
   },
-}

Props

  • actionName: 실행할 함수 이름 (컨텍스트에서 찾음)
  • actionType: 액션 타입
  • renderType: 렌더링 타입 ('button' 또는 'text')
- +}

Props

  • actionName: 실행할 함수 이름 (컨텍스트에서 찾음)
  • actionType: 액션 타입
  • renderType: 렌더링 타입 ('button' 또는 'text')
+ \ No newline at end of file diff --git a/components/grid/context-menu.html b/components/grid/context-menu.html index bd0ab07..54da4c9 100644 --- a/components/grid/context-menu.html +++ b/components/grid/context-menu.html @@ -6,19 +6,19 @@ 그리드 컨텍스트 메뉴 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

그리드 컨텍스트 메뉴

GridContextMenu

개요

AG Grid에서 우클릭 시 표시되는 컨텍스트 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/grid/GridContextMenu.vue

주요 기능

컬럼 헤더 컨텍스트 메뉴

  • 열 고정
  • 열 숨기기

셀 컨텍스트 메뉴

  • 엑셀 관련
    • 엑셀 다운로드
    • CSV 다운로드
    • 엑셀 업로드
  • 행 편집
    • 행 추가
    • 행 삭제

사용 예제

vue
<template>
+    
Skip to content

그리드 컨텍스트 메뉴

GridContextMenu

개요

AG Grid에서 우클릭 시 표시되는 컨텍스트 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/grid/GridContextMenu.vue

주요 기능

컬럼 헤더 컨텍스트 메뉴

  • 열 고정
  • 열 숨기기

셀 컨텍스트 메뉴

  • 엑셀 관련
    • 엑셀 다운로드
    • CSV 다운로드
    • 엑셀 업로드
  • 행 편집
    • 행 추가
    • 행 삭제

사용 예제

vue
<template>
   <AgGridVue
     @cellContextMenu="handleContextMenu"
     @columnHeaderContextMenu="handleHeaderContextMenu"
@@ -41,8 +41,8 @@
     type: 'cellContextMenu',
   })
 }
-</script>

컨텍스트 메뉴 스토어

contextMenuStore를 사용하여 컨텍스트 메뉴의 상태를 관리합니다.

- +</script>

컨텍스트 메뉴 스토어

contextMenuStore를 사용하여 컨텍스트 메뉴의 상태를 관리합니다.

+ \ No newline at end of file diff --git a/components/grid/multi-select.html b/components/grid/multi-select.html index 451f37e..f614cd7 100644 --- a/components/grid/multi-select.html +++ b/components/grid/multi-select.html @@ -6,19 +6,19 @@ 멀티 선택 그리드 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

멀티 선택 그리드

GridMultiSelectWrapper

AG Grid에서 멀티 선택 컴포넌트를 사용하기 위한 래퍼입니다.

파일 위치

src/views/ui/components/grid/GridMultiSelectWrapper.vue

사용 예제

javascript
const columnDefs = ref([
+    
Skip to content

멀티 선택 그리드

GridMultiSelectWrapper

AG Grid에서 멀티 선택 컴포넌트를 사용하기 위한 래퍼입니다.

파일 위치

src/views/ui/components/grid/GridMultiSelectWrapper.vue

사용 예제

javascript
const columnDefs = ref([
   {
     field: 'department',
     headerName: '부서',
@@ -34,8 +34,8 @@
       optionLabel: 'name',
     },
   },
-])
- +])
+ \ No newline at end of file diff --git a/components/layouts/blank.html b/components/layouts/blank.html index 2f66829..0331d00 100644 --- a/components/layouts/blank.html +++ b/components/layouts/blank.html @@ -6,19 +6,19 @@ 블랭크 레이아웃 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

블랭크 레이아웃

blank.vue

개요

인증 페이지 등에 사용되는 간단한 레이아웃입니다.

파일 위치

src/views/ui/layouts/blank.vue

특징

  • 헤더/사이드바 없음
  • RouterView만 표시
  • 전체 화면 사용

사용 예제

javascript
{
+    
Skip to content

블랭크 레이아웃

blank.vue

개요

인증 페이지 등에 사용되는 간단한 레이아웃입니다.

파일 위치

src/views/ui/layouts/blank.vue

특징

  • 헤더/사이드바 없음
  • RouterView만 표시
  • 전체 화면 사용

사용 예제

javascript
{
   path: '/',
   component: () => import('@/views/ui/layouts/blank.vue'),
   children: [
@@ -28,8 +28,8 @@
       component: () => import('@/views/axpFramework/auth/Login.vue'),
     },
   ],
-}
- +}
+ \ No newline at end of file diff --git a/components/layouts/main.html b/components/layouts/main.html index 439cded..cdb7d43 100644 --- a/components/layouts/main.html +++ b/components/layouts/main.html @@ -6,19 +6,19 @@ 메인 레이아웃 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

메인 레이아웃

Main.vue

개요

메인 애플리케이션 레이아웃입니다.

파일 위치

src/views/axpFramework/main/Main.vue

주요 구성 요소

  • 헤더 (로고, 메뉴, 탭, 로그 버튼)
  • 사이드바 메뉴
  • 메인 콘텐츠 영역
  • 탭 관리

레이아웃 구조

┌─────────────────────────────────┐
+    
Skip to content

메인 레이아웃

Main.vue

개요

메인 애플리케이션 레이아웃입니다.

파일 위치

src/views/axpFramework/main/Main.vue

주요 구성 요소

  • 헤더 (로고, 메뉴, 탭, 로그 버튼)
  • 사이드바 메뉴
  • 메인 콘텐츠 영역
  • 탭 관리

레이아웃 구조

┌─────────────────────────────────┐
 │ Header (로고, 메뉴, 탭, 로그)    │
 ├──────────┬──────────────────────┤
 │ Sidebar  │ Main Content         │
@@ -28,8 +28,8 @@
   path: '/Main',
   name: 'Main',
   component: () => import('@/views/axpFramework/main/Main.vue'),
-}
- +}
+ \ No newline at end of file diff --git a/components/layouts/popup.html b/components/layouts/popup.html index 2a7b9b4..ed0ef07 100644 --- a/components/layouts/popup.html +++ b/components/layouts/popup.html @@ -6,19 +6,19 @@ 팝업 레이아웃 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

팝업 레이아웃

popBlank.vue

개요

팝업 창에 사용되는 레이아웃입니다.

파일 위치

src/views/ui/layouts/popBlank.vue

특징

  • 동적 컴포넌트 로드
  • 팝업 파라미터 전달
  • 새 창에서 실행

동적 컴포넌트 로드

javascript
const popName = window.name
+    
Skip to content

팝업 레이아웃

popBlank.vue

개요

팝업 창에 사용되는 레이아웃입니다.

파일 위치

src/views/ui/layouts/popBlank.vue

특징

  • 동적 컴포넌트 로드
  • 팝업 파라미터 전달
  • 새 창에서 실행

동적 컴포넌트 로드

javascript
const popName = window.name
 const param = window.opener.popParam[popName]
 const popupComponent = shallowRef(null)
 
@@ -36,8 +36,8 @@
   // 기타 파라미터
 }
 
-window.open('/Popup', 'popupName', 'width=800,height=600')
- +window.open('/Popup', 'popupName', 'width=800,height=600')
+ \ No newline at end of file diff --git a/components/menu/bookmark.html b/components/menu/bookmark.html index 9065faf..39fcecc 100644 --- a/components/menu/bookmark.html +++ b/components/menu/bookmark.html @@ -6,26 +6,26 @@ 북마크 메뉴 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

북마크 메뉴

개요

즐겨찾기 메뉴를 표시하는 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuBmk.vue

주요 기능

  • 즐겨찾기 메뉴 목록 표시
  • 즐겨찾기 메뉴 클릭
  • 즐겨찾기 순서 변경 (드래그 앤 드롭)

사용 예제

vue
<template>
+    
Skip to content

북마크 메뉴

개요

즐겨찾기 메뉴를 표시하는 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuBmk.vue

주요 기능

  • 즐겨찾기 메뉴 목록 표시
  • 즐겨찾기 메뉴 클릭
  • 즐겨찾기 순서 변경 (드래그 앤 드롭)

사용 예제

vue
<template>
   <MenuBmk :modules="modules" />
 </template>
 
 <script setup>
 const modules = ref({}) // 동적 컴포넌트 모듈
-</script>

드래그 앤 드롭

vuedraggable을 사용하여 즐겨찾기 메뉴의 순서를 변경할 수 있습니다.

- +</script>

드래그 앤 드롭

vuedraggable을 사용하여 즐겨찾기 메뉴의 순서를 변경할 수 있습니다.

+ \ No newline at end of file diff --git a/components/menu/header-bar.html b/components/menu/header-bar.html index 781e5b5..d238084 100644 --- a/components/menu/header-bar.html +++ b/components/menu/header-bar.html @@ -6,26 +6,26 @@ 메뉴 헤더바 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

메뉴 헤더바

개요

헤더에 표시되는 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuHeaderBar.vue

주요 기능

  • 1단계 메뉴 표시
  • 2단계 메뉴 표시
  • 3단계 메뉴 표시
  • 마우스 오버 시 서브메뉴 표시
  • 즐겨찾기 기능

사용 예제

vue
<template>
+    
Skip to content

메뉴 헤더바

개요

헤더에 표시되는 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuHeaderBar.vue

주요 기능

  • 1단계 메뉴 표시
  • 2단계 메뉴 표시
  • 3단계 메뉴 표시
  • 마우스 오버 시 서브메뉴 표시
  • 즐겨찾기 기능

사용 예제

vue
<template>
   <MenuHeaderBar :modules="modules" />
 </template>
 
 <script setup>
 const modules = ref({}) // 동적 컴포넌트 모듈
-</script>

메뉴 구조

  • menuLevel1: 1단계 메뉴
  • menuLevel2: 2단계 메뉴
  • menuLevel3: 3단계 메뉴
- +</script>

메뉴 구조

  • menuLevel1: 1단계 메뉴
  • menuLevel2: 2단계 메뉴
  • menuLevel3: 3단계 메뉴
+ \ No newline at end of file diff --git a/components/menu/sidebar.html b/components/menu/sidebar.html index b319b34..7f152b8 100644 --- a/components/menu/sidebar.html +++ b/components/menu/sidebar.html @@ -6,26 +6,26 @@ 사이드바 메뉴 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

사이드바 메뉴

개요

사이드바에 표시되는 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuSideBar.vue

주요 기능

  • 2단계 메뉴 표시
  • 3단계 메뉴 표시
  • 즐겨찾기 기능
  • 메뉴 클릭 시 탭 열기

사용 예제

vue
<template>
+    
Skip to content

사이드바 메뉴

개요

사이드바에 표시되는 메뉴 컴포넌트입니다.

파일 위치

src/views/ui/components/menu/MenuSideBar.vue

주요 기능

  • 2단계 메뉴 표시
  • 3단계 메뉴 표시
  • 즐겨찾기 기능
  • 메뉴 클릭 시 탭 열기

사용 예제

vue
<template>
   <MenuSideBar :modules="modules" />
 </template>
 
 <script setup>
 const modules = ref({}) // 동적 컴포넌트 모듈
-</script>

메뉴 구조

  • menuLevel2: 2단계 메뉴
  • menuLevel3: 3단계 메뉴

즐겨찾기

메뉴 옆의 별 아이콘을 클릭하여 즐겨찾기에 추가/제거할 수 있습니다.

- +</script>

메뉴 구조

  • menuLevel2: 2단계 메뉴
  • menuLevel3: 3단계 메뉴

즐겨찾기

메뉴 옆의 별 아이콘을 클릭하여 즐겨찾기에 추가/제거할 수 있습니다.

+ \ No newline at end of file diff --git a/components/popup/approval-list.html b/components/popup/approval-list.html index 3ef9043..05bc46d 100644 --- a/components/popup/approval-list.html +++ b/components/popup/approval-list.html @@ -6,19 +6,19 @@ 승인 목록 팝업 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

승인 목록 팝업

PopupApproveList

개요

승인 목록을 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproveList.vue

사용 예제

vue
<template>
+    
Skip to content

승인 목록 팝업

PopupApproveList

개요

승인 목록을 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproveList.vue

사용 예제

vue
<template>
   <PopupApproveList
     :title="'승인 목록'"
     :approval-data="approvalData"
@@ -38,8 +38,8 @@
     data: approvalData.value,
   })
 }
-</script>

Props

  • title: 팝업 제목
  • approval-data: 승인 목록 데이터
- +</script>

Props

  • title: 팝업 제목
  • approval-data: 승인 목록 데이터
+ \ No newline at end of file diff --git a/components/popup/approval.html b/components/popup/approval.html index 71cba27..1e40cb8 100644 --- a/components/popup/approval.html +++ b/components/popup/approval.html @@ -6,20 +6,20 @@ 승인 팝업 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

승인 팝업

PopupApproval

승인 처리를 위한 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproval.vue

PopupApprovalBox

승인 박스 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApprovalBox.vue

PopupApproveList

승인 목록 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproveList.vue

- +
Skip to content

승인 팝업

PopupApproval

승인 처리를 위한 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproval.vue

PopupApprovalBox

승인 박스 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApprovalBox.vue

PopupApproveList

승인 목록 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupApproveList.vue

+ \ No newline at end of file diff --git a/components/popup/file-link.html b/components/popup/file-link.html index bd500d5..6671e32 100644 --- a/components/popup/file-link.html +++ b/components/popup/file-link.html @@ -6,19 +6,19 @@ 파일 링크 팝업 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content
+ \ No newline at end of file diff --git a/components/popup/log.html b/components/popup/log.html index 4ff45c0..96fee2e 100644 --- a/components/popup/log.html +++ b/components/popup/log.html @@ -6,20 +6,20 @@ 로그 팝업 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

로그 팝업

PopupLog

로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupLog.vue

PopupPageLog

페이지 로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupPageLog.vue

- +
Skip to content

로그 팝업

PopupLog

로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupLog.vue

PopupPageLog

페이지 로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupPageLog.vue

+ \ No newline at end of file diff --git a/components/popup/page-log.html b/components/popup/page-log.html index c51723c..a5ccc33 100644 --- a/components/popup/page-log.html +++ b/components/popup/page-log.html @@ -6,19 +6,19 @@ 페이지 로그 팝업 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

페이지 로그 팝업

PopupPageLog

개요

페이지 로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupPageLog.vue

주요 기능

  • 페이지 로그 목록 표시
  • 로그 상세 정보 표시
  • 로그 필터링

사용 예제

vue
<script setup>
+    
Skip to content

페이지 로그 팝업

PopupPageLog

개요

페이지 로그를 표시하는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupPageLog.vue

주요 기능

  • 페이지 로그 목록 표시
  • 로그 상세 정보 표시
  • 로그 필터링

사용 예제

vue
<script setup>
 import { useModalStore } from '@/utils/stores/modalStore.js'
 
 const modalStore = useModalStore()
@@ -28,8 +28,8 @@
     title: '페이지 로그',
   })
 }
-</script>
- +</script>
+ \ No newline at end of file diff --git a/components/popup/sms-template.html b/components/popup/sms-template.html index e843c8a..6237f47 100644 --- a/components/popup/sms-template.html +++ b/components/popup/sms-template.html @@ -6,19 +6,19 @@ SMS 템플릿 팝업 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

SMS 템플릿 팝업

PopupSmsTemplateList

개요

SMS 템플릿 목록을 표시하고 선택할 수 있는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupSmsTemplateList.vue

주요 기능

  • SMS 템플릿 목록 조회
  • 템플릿 선택
  • 템플릿 미리보기

사용 예제

vue
<script setup>
+    
Skip to content

SMS 템플릿 팝업

PopupSmsTemplateList

개요

SMS 템플릿 목록을 표시하고 선택할 수 있는 팝업 컴포넌트입니다.

파일 위치

src/views/ui/components/popup/PopupSmsTemplateList.vue

주요 기능

  • SMS 템플릿 목록 조회
  • 템플릿 선택
  • 템플릿 미리보기

사용 예제

vue
<script setup>
 import { useModalStore } from '@/utils/stores/modalStore.js'
 
 const modalStore = useModalStore()
@@ -28,8 +28,8 @@
     title: 'SMS 템플릿 선택',
   })
 }
-</script>
- +</script>
+ \ No newline at end of file diff --git a/configuration/alias.html b/configuration/alias.html index 2e6eb77..5f0e847 100644 --- a/configuration/alias.html +++ b/configuration/alias.html @@ -6,19 +6,19 @@ 경로 별칭 (Alias) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

경로 별칭 (Alias)

개요

프로젝트는 경로 별칭을 사용하여 긴 경로를 짧게 표현할 수 있습니다.

설정 위치

vite.config.jsjsconfig.json

주요 별칭

javascript
resolve: {
+    
Skip to content

경로 별칭 (Alias)

개요

프로젝트는 경로 별칭을 사용하여 긴 경로를 짧게 표현할 수 있습니다.

설정 위치

vite.config.jsjsconfig.json

주요 별칭

javascript
resolve: {
   alias: {
     '@': fileURLToPath(new URL('./src', import.meta.url)),
     '@core': fileURLToPath(new URL('./src/vendor/@core', import.meta.url)),
@@ -37,8 +37,8 @@
       "@/*": ["src/*"]
     }
   }
-}

주의사항

  1. 별칭 사용: 가능한 한 별칭을 사용하여 코드 가독성을 높이세요.
  2. 일관성: 프로젝트 전체에서 동일한 별칭을 사용하세요.
- +}

주의사항

  1. 별칭 사용: 가능한 한 별칭을 사용하여 코드 가독성을 높이세요.
  2. 일관성: 프로젝트 전체에서 동일한 별칭을 사용하세요.
+ \ No newline at end of file diff --git a/configuration/build.html b/configuration/build.html index 44d9400..541ff26 100644 --- a/configuration/build.html +++ b/configuration/build.html @@ -6,27 +6,27 @@ 빌드 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

빌드 설정

개요

Vite 빌드 설정입니다.

설정 위치

vite.config.js

빌드 옵션

javascript
build: {
+    
Skip to content

빌드 설정

개요

Vite 빌드 설정입니다.

설정 위치

vite.config.js

빌드 옵션

javascript
build: {
   chunkSizeWarningLimit: 5000,
 }

chunkSizeWarningLimit

청크 크기 경고 제한 (KB). 기본값은 500입니다.

빌드 명령어

개발 빌드

bash
npm run build:dev

스테이징 빌드

bash
npm run build:staging

프로덕션 빌드

bash
npm run build:prod
 # 또는
 npm run build

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

빌드 최적화

  • 코드 분할 (Code Splitting)
  • 트리 쉐이킹 (Tree Shaking)
  • 압축 (Minification)
  • 소스맵 생성

환경별 빌드

환경 변수를 사용하여 환경별로 다른 설정을 적용할 수 있습니다:

javascript
export default defineConfig(({ mode }) => {
   const env = loadEnv(mode, process.cwd())
   // ...
-})
- +})
+ \ No newline at end of file diff --git a/configuration/env.html b/configuration/env.html index e32728f..88db1cf 100644 --- a/configuration/env.html +++ b/configuration/env.html @@ -6,19 +6,19 @@ 환경 변수 (.env) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

환경 변수 (.env)

개요

프로젝트는 환경별로 다른 설정을 사용하기 위해 .env 파일을 사용합니다.

환경 변수 파일

  • .env: 기본 환경 변수
  • .env.development: 개발 환경
  • .env.production: 프로덕션 환경
  • .env.staging: 스테이징 환경

필수 환경 변수

env
# API 서버 주소
+    
Skip to content

환경 변수 (.env)

개요

프로젝트는 환경별로 다른 설정을 사용하기 위해 .env 파일을 사용합니다.

환경 변수 파일

  • .env: 기본 환경 변수
  • .env.development: 개발 환경
  • .env.production: 프로덕션 환경
  • .env.staging: 스테이징 환경

필수 환경 변수

env
# API 서버 주소
 VITE_API_BASE_URL=http://localhost:8080
 
 # 인증 서버 주소
@@ -27,8 +27,8 @@
 # 파일 서버 주소
 VITE_FILE_SERVER_URL=http://localhost:8080

환경 변수 사용

Vite에서는 VITE_ 접두사가 붙은 변수만 클라이언트에서 접근 가능합니다:

javascript
const apiUrl = import.meta.env.VITE_API_BASE_URL

환경별 설정

개발 환경 (.env.development)

env
VITE_API_BASE_URL=http://localhost:8080
 VITE_AUTH_BASE_URL=http://localhost:8080

프로덕션 환경 (.env.production)

env
VITE_API_BASE_URL=https://api.example.com
-VITE_AUTH_BASE_URL=https://auth.example.com

주의사항

  1. 보안: 민감한 정보(비밀번호, API 키 등)는 환경 변수에 저장하지 마세요.
  2. 접두사: 클라이언트에서 사용할 변수는 VITE_로 시작해야 합니다.
  3. 재시작: 환경 변수 변경 후 개발 서버를 재시작해야 합니다.
- +VITE_AUTH_BASE_URL=https://auth.example.com

주의사항

  1. 보안: 민감한 정보(비밀번호, API 키 등)는 환경 변수에 저장하지 마세요.
  2. 접두사: 클라이언트에서 사용할 변수는 VITE_로 시작해야 합니다.
  3. 재시작: 환경 변수 변경 후 개발 서버를 재시작해야 합니다.
+ \ No newline at end of file diff --git a/configuration/proxy.html b/configuration/proxy.html index 4e11ff6..1a036ab 100644 --- a/configuration/proxy.html +++ b/configuration/proxy.html @@ -6,19 +6,19 @@ 프록시 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

프록시 설정

개요

Vite 개발 서버의 프록시 설정입니다.

설정 위치

vite.config.js

프록시 설정

javascript
server: {
+    
Skip to content

프록시 설정

개요

Vite 개발 서버의 프록시 설정입니다.

설정 위치

vite.config.js

프록시 설정

javascript
server: {
   proxy: {
     '/api': {
       target: env.VITE_API_BASE_URL,
@@ -34,8 +34,8 @@
     },
   },
 }

프록시 경로

/api

백엔드 API 서버로 프록시됩니다.

/auth

인증 서버로 프록시됩니다.

/files

파일 서버로 프록시됩니다.

사용 예제

javascript
// /api/users → http://localhost:8080/api/users
-const response = await axiosInstance.get('/api/users')

주의사항

프록시는 개발 환경에서만 작동합니다. 프로덕션 빌드에서는 실제 서버 주소를 사용합니다.

- +const response = await axiosInstance.get('/api/users')

주의사항

프록시는 개발 환경에서만 작동합니다. 프로덕션 빌드에서는 실제 서버 주소를 사용합니다.

+ \ No newline at end of file diff --git a/configuration/vite.html b/configuration/vite.html index 5d08ada..1882a59 100644 --- a/configuration/vite.html +++ b/configuration/vite.html @@ -6,19 +6,19 @@ Vite 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Vite 설정

개요

프로젝트는 Vite를 빌드 도구로 사용합니다. 설정 파일은 vite.config.js에 있습니다.

주요 설정

플러그인

javascript
plugins: [
+    
Skip to content

Vite 설정

개요

프로젝트는 Vite를 빌드 도구로 사용합니다. 설정 파일은 vite.config.js에 있습니다.

주요 설정

플러그인

javascript
plugins: [
   vue(),                    // Vue 3 지원
   vueJsx(),                 // JSX 지원
   vueDevTools(),            // Vue DevTools
@@ -69,8 +69,8 @@
     'src/views/ui/components/**',
   ],
   dts: 'src/components.d.ts',
-})
- +})
+ \ No newline at end of file diff --git a/core-features/auth/encryption.html b/core-features/auth/encryption.html index 966da35..3ec50fd 100644 --- a/core-features/auth/encryption.html +++ b/core-features/auth/encryption.html @@ -6,19 +6,19 @@ 암호화/복호화 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

암호화/복호화

개요

프로젝트는 API 요청/응답 데이터의 암호화/복호화를 지원합니다. CryptoJS를 사용하여 AES 암호화를 수행합니다.

암호화 설정

세션 스토어에서 암호화 여부를 설정합니다:

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
+    
Skip to content

암호화/복호화

개요

프로젝트는 API 요청/응답 데이터의 암호화/복호화를 지원합니다. CryptoJS를 사용하여 AES 암호화를 수행합니다.

암호화 설정

세션 스토어에서 암호화 여부를 설정합니다:

javascript
import { useSessionStore } from '@/utils/stores/sessionStore.js'
 
 const sessionStore = useSessionStore()
 
@@ -61,8 +61,8 @@
 const encrypted = encryptObject({ name: '홍길동', age: 30 })
 
 // 복호화
-const decrypted = decryptObject(encrypted)

주의사항

  1. 성능: 암호화/복호화는 CPU 집약적 작업이므로 필요한 경우에만 사용하세요.
  2. 파일 크기: 큰 파일의 경우 암호화 시간이 오래 걸릴 수 있습니다.
  3. 키 관리: 암호화 키는 안전하게 관리해야 합니다.

관련 문서

- +const decrypted = decryptObject(encrypted)

주의사항

  1. 성능: 암호화/복호화는 CPU 집약적 작업이므로 필요한 경우에만 사용하세요.
  2. 파일 크기: 큰 파일의 경우 암호화 시간이 오래 걸릴 수 있습니다.
  3. 키 관리: 암호화 키는 안전하게 관리해야 합니다.

관련 문서

+ \ No newline at end of file diff --git a/core-features/auth/jwt.html b/core-features/auth/jwt.html index b6aaef0..faba093 100644 --- a/core-features/auth/jwt.html +++ b/core-features/auth/jwt.html @@ -6,19 +6,19 @@ JWT 인증 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

JWT 인증

개요

프로젝트는 JWT(JSON Web Token) 기반 인증을 사용합니다. Access Token과 Refresh Token을 사용하여 인증을 관리합니다.

토큰 구조

Access Token

  • 저장 위치: authStore.accessToken (메모리)
  • 용도: API 요청 시 인증
  • 만료 시간: 짧음 (보통 15분~1시간)
  • 전송 방식: Authorization: Bearer <token> 헤더

Refresh Token

  • 저장 위치: HttpOnly Cookie
  • 용도: Access Token 갱신
  • 만료 시간: 길음 (보통 7일~30일)
  • 전송 방식: Cookie (자동 전송)

인증 흐름

1. 로그인

javascript
const response = await axiosInstance.post('/api/login', {
+    
Skip to content

JWT 인증

개요

프로젝트는 JWT(JSON Web Token) 기반 인증을 사용합니다. Access Token과 Refresh Token을 사용하여 인증을 관리합니다.

토큰 구조

Access Token

  • 저장 위치: authStore.accessToken (메모리)
  • 용도: API 요청 시 인증
  • 만료 시간: 짧음 (보통 15분~1시간)
  • 전송 방식: Authorization: Bearer <token> 헤더

Refresh Token

  • 저장 위치: HttpOnly Cookie
  • 용도: Access Token 갱신
  • 만료 시간: 길음 (보통 7일~30일)
  • 전송 방식: Cookie (자동 전송)

인증 흐름

1. 로그인

javascript
const response = await axiosInstance.post('/api/login', {
   userId: 'user123',
   password: 'password',
 })
@@ -34,8 +34,8 @@
 }

3. 토큰 갱신

Access Token이 만료되면 자동으로 Refresh Token을 사용하여 갱신합니다.

토큰 관리

Access Token 설정

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
 
 const authStore = useAuthStore()
-authStore.setAccessToken('new-token')

Access Token 초기화

javascript
authStore.clearAccessToken()

인증 상태 확인

javascript
const isAuthenticated = computed(() => authStore.isAuthenticated)

보안 고려사항

  1. Access Token: 메모리에만 저장 (localStorage 사용 안 함)
  2. Refresh Token: HttpOnly Cookie 사용 (XSS 공격 방지)
  3. HTTPS 사용: 프로덕션 환경에서는 반드시 HTTPS 사용
  4. 토큰 만료: 적절한 만료 시간 설정

관련 문서

- +authStore.setAccessToken('new-token')

Access Token 초기화

javascript
authStore.clearAccessToken()

인증 상태 확인

javascript
const isAuthenticated = computed(() => authStore.isAuthenticated)

보안 고려사항

  1. Access Token: 메모리에만 저장 (localStorage 사용 안 함)
  2. Refresh Token: HttpOnly Cookie 사용 (XSS 공격 방지)
  3. HTTPS 사용: 프로덕션 환경에서는 반드시 HTTPS 사용
  4. 토큰 만료: 적절한 만료 시간 설정

관련 문서

+ \ No newline at end of file diff --git a/core-features/auth/session.html b/core-features/auth/session.html index 96d33e2..493b34b 100644 --- a/core-features/auth/session.html +++ b/core-features/auth/session.html @@ -6,19 +6,19 @@ 세션 관리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

세션 관리

개요

세션 스토어를 통해 사용자 세션 데이터를 관리합니다. 세션 데이터는 localStorage에 저장되어 브라우저를 닫아도 유지됩니다.

세션 데이터 구조

javascript
session: {
+    
Skip to content

세션 관리

개요

세션 스토어를 통해 사용자 세션 데이터를 관리합니다. 세션 데이터는 localStorage에 저장되어 브라우저를 닫아도 유지됩니다.

세션 데이터 구조

javascript
session: {
   UserID: 'user123',
   UserName: '홍길동',
   ClientCode: '100',
@@ -81,8 +81,8 @@
   key: 'session',
   storage: localStorage,
   paths: ['session'],
-}

주의사항

  1. 민감한 정보: 비밀번호나 토큰 같은 민감한 정보는 세션에 저장하지 마세요.
  2. 데이터 크기: localStorage는 용량 제한이 있으므로 큰 데이터는 저장하지 마세요.
  3. 보안: 프로덕션 환경에서는 중요한 데이터를 암호화하여 저장하세요.

관련 문서

- +}

주의사항

  1. 민감한 정보: 비밀번호나 토큰 같은 민감한 정보는 세션에 저장하지 마세요.
  2. 데이터 크기: localStorage는 용량 제한이 있으므로 큰 데이터는 저장하지 마세요.
  3. 보안: 프로덕션 환경에서는 중요한 데이터를 암호화하여 저장하세요.

관련 문서

+ \ No newline at end of file diff --git a/core-features/auth/token-refresh.html b/core-features/auth/token-refresh.html index 3463981..57d5999 100644 --- a/core-features/auth/token-refresh.html +++ b/core-features/auth/token-refresh.html @@ -6,19 +6,19 @@ 토큰 갱신 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

토큰 갱신

개요

Access Token이 만료되면 자동으로 Refresh Token을 사용하여 새로운 Access Token을 발급받습니다.

자동 갱신 메커니즘

CustomAxios.js의 응답 인터셉터에서 401/419 에러 발생 시 자동으로 토큰 갱신을 시도합니다.

갱신 프로세스

1. 401/419 에러 감지

javascript
if (
+    
Skip to content

토큰 갱신

개요

Access Token이 만료되면 자동으로 Refresh Token을 사용하여 새로운 Access Token을 발급받습니다.

자동 갱신 메커니즘

CustomAxios.js의 응답 인터셉터에서 401/419 에러 발생 시 자동으로 토큰 갱신을 시도합니다.

갱신 프로세스

1. 401/419 에러 감지

javascript
if (
   error.response &&
   [401, 419].includes(error.response.status) &&
   !originalRequest._retry
@@ -48,8 +48,8 @@
 
 if (response.data?.accessToken) {
   authStore.setAccessToken(response.data.accessToken)
-}

주의사항

  1. 갱신 중 요청: 갱신이 진행 중일 때는 새로운 갱신 요청을 하지 않습니다.
  2. 재시도 횟수: 무한 재시도를 방지하기 위해 재시도 횟수를 제한합니다.
  3. 에러 처리: 갱신 실패 시 적절한 에러 메시지를 표시합니다.

관련 문서

- +}

주의사항

  1. 갱신 중 요청: 갱신이 진행 중일 때는 새로운 갱신 요청을 하지 않습니다.
  2. 재시도 횟수: 무한 재시도를 방지하기 위해 재시도 횟수를 제한합니다.
  3. 에러 처리: 갱신 실패 시 적절한 에러 메시지를 표시합니다.

관련 문서

+ \ No newline at end of file diff --git a/core-features/http/axios-instance.html b/core-features/http/axios-instance.html index 030b19e..8f6e740 100644 --- a/core-features/http/axios-instance.html +++ b/core-features/http/axios-instance.html @@ -6,19 +6,19 @@ Axios 인스턴스 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Axios 인스턴스 설정

개요

CustomAxios.js는 프로젝트에서 사용하는 Axios 인스턴스를 생성하고 설정하는 파일입니다. 요청/응답 인터셉터를 통해 JWT 토큰 관리, 암호화/복호화, 에러 처리 등을 자동으로 처리합니다.

파일 위치

src/CustomAxios.js

기본 설정

javascript
const axiosInstance = axios.create({
+    
Skip to content

Axios 인스턴스 설정

개요

CustomAxios.js는 프로젝트에서 사용하는 Axios 인스턴스를 생성하고 설정하는 파일입니다. 요청/응답 인터셉터를 통해 JWT 토큰 관리, 암호화/복호화, 에러 처리 등을 자동으로 처리합니다.

파일 위치

src/CustomAxios.js

기본 설정

javascript
const axiosInstance = axios.create({
   headers: { 'Content-Type': 'application/json' },
   timeout: 300000,          // 300초
   withCredentials: true,     // refreshToken을 쿠키로 전송
@@ -136,8 +136,8 @@
 sessionStore.setSessionKey('encrypt', 'Y')  // 암호화 활성화
 sessionStore.setSessionKey('decrypt', 'Y')  // 복호화 활성화

FormData 암호화

FormData를 사용하는 경우, 파일은 개별적으로 암호화되고 텍스트 필드는 함께 암호화됩니다.

에러 처리

타임아웃 에러

javascript
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
   alert('서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해주세요.')
-}

429 에러 (Too Many Requests)

429 에러가 발생하면 모든 요청이 취소되고 로그인 페이지로 리다이렉트됩니다.

기타 에러

에러 메시지는 서버에서 전달된 message 또는 error 필드를 사용하며, 없을 경우 기본 메시지가 표시됩니다.

주의사항

  1. 토큰 갱신: 토큰 갱신은 자동으로 처리되므로 직접 처리할 필요가 없습니다.

  2. 로딩 상태: 요청 시 자동으로 로딩이 표시되므로 별도로 로딩을 표시할 필요가 없습니다.

  3. 에러 처리: 대부분의 에러는 인터셉터에서 처리되지만, 특별한 처리가 필요한 경우 catch 블록에서 처리할 수 있습니다.

  4. 암호화: 암호화가 활성화된 경우, 모든 요청 데이터가 자동으로 암호화됩니다.

관련 문서

- +}

429 에러 (Too Many Requests)

429 에러가 발생하면 모든 요청이 취소되고 로그인 페이지로 리다이렉트됩니다.

기타 에러

에러 메시지는 서버에서 전달된 message 또는 error 필드를 사용하며, 없을 경우 기본 메시지가 표시됩니다.

주의사항

  1. 토큰 갱신: 토큰 갱신은 자동으로 처리되므로 직접 처리할 필요가 없습니다.

  2. 로딩 상태: 요청 시 자동으로 로딩이 표시되므로 별도로 로딩을 표시할 필요가 없습니다.

  3. 에러 처리: 대부분의 에러는 인터셉터에서 처리되지만, 특별한 처리가 필요한 경우 catch 블록에서 처리할 수 있습니다.

  4. 암호화: 암호화가 활성화된 경우, 모든 요청 데이터가 자동으로 암호화됩니다.

관련 문서

+ \ No newline at end of file diff --git a/core-features/http/error-handling.html b/core-features/http/error-handling.html index 479872d..3fc54c8 100644 --- a/core-features/http/error-handling.html +++ b/core-features/http/error-handling.html @@ -6,19 +6,19 @@ 에러 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

에러 처리

개요

CustomAxios.js의 응답 인터셉터에서 다양한 에러 상황을 처리합니다.

에러 타입별 처리

1. 401/419 에러 (인증 실패)

처리 방법:

  • 자동으로 토큰 갱신 시도
  • 갱신 실패 시 로그인 페이지로 리다이렉트

코드:

javascript
if (
+    
Skip to content

에러 처리

개요

CustomAxios.js의 응답 인터셉터에서 다양한 에러 상황을 처리합니다.

에러 타입별 처리

1. 401/419 에러 (인증 실패)

처리 방법:

  • 자동으로 토큰 갱신 시도
  • 갱신 실패 시 로그인 페이지로 리다이렉트

코드:

javascript
if (
   error.response &&
   [401, 419].includes(error.response.status) &&
   !originalRequest._retry
@@ -94,8 +94,8 @@
     // 기타 에러
     console.error('에러:', error)
   }
-}

베스트 프랙티스

  1. 에러 메시지: 사용자에게 명확한 에러 메시지를 표시하세요.
  2. 로깅: 중요한 에러는 로그에 기록하세요.
  3. 재시도: 일시적인 오류는 재시도 로직을 구현하세요.
  4. 에러 타입: 에러 타입에 따라 적절한 처리를 하세요.

관련 문서

- +}

베스트 프랙티스

  1. 에러 메시지: 사용자에게 명확한 에러 메시지를 표시하세요.
  2. 로깅: 중요한 에러는 로그에 기록하세요.
  3. 재시도: 일시적인 오류는 재시도 로직을 구현하세요.
  4. 에러 타입: 에러 타입에 따라 적절한 처리를 하세요.

관련 문서

+ \ No newline at end of file diff --git a/core-features/http/request-interceptor.html b/core-features/http/request-interceptor.html index 6d412c1..39fd2ec 100644 --- a/core-features/http/request-interceptor.html +++ b/core-features/http/request-interceptor.html @@ -6,19 +6,19 @@ 요청 인터셉터 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

요청 인터셉터

개요

CustomAxios.js의 요청 인터셉터는 모든 API 요청이 전송되기 전에 실행됩니다.

주요 기능

1. 로딩 표시

javascript
const loadingStore = useLoadingStore()
+    
Skip to content

요청 인터셉터

개요

CustomAxios.js의 요청 인터셉터는 모든 API 요청이 전송되기 전에 실행됩니다.

주요 기능

1. 로딩 표시

javascript
const loadingStore = useLoadingStore()
 loadingStore.showLoading()

2. JWT 토큰 추가

javascript
const authStore = useAuthStore()
 const token = authStore.accessToken
 if (token) {
@@ -71,8 +71,8 @@
     config.headers['Custom-Header'] = 'value'
     return config
   }
-)

관련 문서

- +)

관련 문서

+ \ No newline at end of file diff --git a/core-features/http/response-interceptor.html b/core-features/http/response-interceptor.html index 196b23f..66b6105 100644 --- a/core-features/http/response-interceptor.html +++ b/core-features/http/response-interceptor.html @@ -6,19 +6,19 @@ 응답 인터셉터 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

응답 인터셉터

개요

CustomAxios.js의 응답 인터셉터는 모든 API 응답을 받은 후 실행됩니다.

성공 응답 처리

1. 로딩 숨김

javascript
useLoadingStore().hideLoading()

2. 파일 다운로드 처리

javascript
const disposition = response.headers?.['content-disposition']
+    
Skip to content

응답 인터셉터

개요

CustomAxios.js의 응답 인터셉터는 모든 API 응답을 받은 후 실행됩니다.

성공 응답 처리

1. 로딩 숨김

javascript
useLoadingStore().hideLoading()

2. 파일 다운로드 처리

javascript
const disposition = response.headers?.['content-disposition']
 if (disposition) {
   let fileName = ''
   const filenameStarMatch = disposition.match(/filename\*=UTF-8''([^;]+)/)
@@ -112,8 +112,8 @@
 link.setAttribute('download', response.data.fileName)
 document.body.appendChild(link)
 link.click()
-link.remove()

관련 문서

- +link.remove()

관련 문서

+ \ No newline at end of file diff --git a/core-features/routing/dynamic.html b/core-features/routing/dynamic.html index 4dc47fa..f331564 100644 --- a/core-features/routing/dynamic.html +++ b/core-features/routing/dynamic.html @@ -6,19 +6,19 @@ 동적 라우팅 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

동적 라우팅

개요

프로젝트는 메뉴 시스템을 통해 동적으로 라우트를 등록합니다.

동적 라우트 등록

메뉴 데이터 구조

javascript
{
+    
Skip to content

동적 라우팅

개요

프로젝트는 메뉴 시스템을 통해 동적으로 라우트를 등록합니다.

동적 라우트 등록

메뉴 데이터 구조

javascript
{
   MENUID: 'ESS000001',
   MENUNAME: '직원 목록',
   URLID: '/ess/persadm/EmployeeList.do',
@@ -57,8 +57,8 @@
     path: menu.URLID,
   })
 }
-</script>

주의사항

  1. 컴포넌트 경로: 컴포넌트 경로가 올바른지 확인하세요.
  2. 라우트 중복: 동일한 라우트가 중복 등록되지 않도록 주의하세요.
  3. 메뉴 로드: 메뉴 데이터가 로드된 후 라우트를 등록하세요.

관련 문서

- +</script>

주의사항

  1. 컴포넌트 경로: 컴포넌트 경로가 올바른지 확인하세요.
  2. 라우트 중복: 동일한 라우트가 중복 등록되지 않도록 주의하세요.
  3. 메뉴 로드: 메뉴 데이터가 로드된 후 라우트를 등록하세요.

관련 문서

+ \ No newline at end of file diff --git a/core-features/routing/guards.html b/core-features/routing/guards.html index e448443..48ba9e9 100644 --- a/core-features/routing/guards.html +++ b/core-features/routing/guards.html @@ -6,19 +6,19 @@ 라우트 가드 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

라우트 가드

개요

라우트 가드는 라우트 전환 전후에 실행되는 함수입니다.

beforeEach 가드

router.beforeEach는 라우트 전환 전에 실행됩니다.

현재 구현

javascript
router.beforeEach(async (to, from, next) => {
+    
Skip to content

라우트 가드

개요

라우트 가드는 라우트 전환 전후에 실행되는 함수입니다.

beforeEach 가드

router.beforeEach는 라우트 전환 전에 실행됩니다.

현재 구현

javascript
router.beforeEach(async (to, from, next) => {
   // 라우터에 일치하는 경로가 없거나 새로고침 시 경로를 찾지 못했을 때
   const isRouteNotFound = !router.hasRoute(to.name) || to.matched.length === 0;
 
@@ -48,8 +48,8 @@
     requiresAuth: true,
     title: '내 페이지',
   },
-}

관련 문서

- +}

관련 문서

+ \ No newline at end of file diff --git a/core-features/routing/routes.html b/core-features/routing/routes.html index b8575f1..086f0af 100644 --- a/core-features/routing/routes.html +++ b/core-features/routing/routes.html @@ -6,19 +6,19 @@ 라우트 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

라우트 설정

개요

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

기본 라우트 구조

javascript
export const routes = [
+    
Skip to content

라우트 설정

개요

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

기본 라우트 구조

javascript
export const routes = [
   {
     path: '/',
     name: 'default',
@@ -51,8 +51,8 @@
   name: 'MyPage',
   component: () => import('@/views/ess/persadm/MyPage.vue'),
 }

동적 라우트

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다.

라우트 매핑 규칙

백엔드 메뉴의 URLID는 다음과 같이 매핑됩니다:

/ess/persadm/MyPage.do
-→ src/views/ess/persadm/MyPage.vue

레이아웃

Blank 레이아웃

인증 페이지 등에 사용됩니다.

Main 레이아웃

메인 애플리케이션에 사용됩니다.

팝업 창에 사용됩니다.

관련 문서

- +→ src/views/ess/persadm/MyPage.vue

레이아웃

Blank 레이아웃

인증 페이지 등에 사용됩니다.

Main 레이아웃

메인 애플리케이션에 사용됩니다.

팝업 창에 사용됩니다.

관련 문서

+ \ No newline at end of file diff --git a/core-features/stores/auth.html b/core-features/stores/auth.html index 0a488df..4fb1b67 100644 --- a/core-features/stores/auth.html +++ b/core-features/stores/auth.html @@ -6,19 +6,19 @@ 인증 스토어 (authStore) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

인증 스토어 (authStore)

개요

authStore는 애플리케이션의 인증 상태를 관리하는 Pinia 스토어입니다. JWT 액세스 토큰을 저장하고 관리합니다.

파일 위치

src/utils/stores/authStore.js

상태 (State)

javascript
state: () => ({
+    
Skip to content

인증 스토어 (authStore)

개요

authStore는 애플리케이션의 인증 상태를 관리하는 Pinia 스토어입니다. JWT 액세스 토큰을 저장하고 관리합니다.

파일 위치

src/utils/stores/authStore.js

상태 (State)

javascript
state: () => ({
   accessToken: null, // 액세스 토큰 저장
 })

accessToken

  • 타입: string | null
  • 설명: JWT 액세스 토큰을 저장합니다. 로그인 시 설정되고, 로그아웃 시 null로 초기화됩니다.

액션 (Actions)

setAccessToken(token)

액세스 토큰을 설정합니다.

파라미터:

  • token (string): 설정할 액세스 토큰

사용 예제:

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
 
@@ -82,8 +82,8 @@
     router.push({ name: 'Login' })
   }
 })
-</script>

주의사항

  1. 토큰 갱신: CustomAxios.js의 인터셉터에서 토큰 갱신이 자동으로 처리됩니다. 직접 토큰을 갱신할 필요는 없습니다.

  2. 보안: 액세스 토큰은 메모리에만 저장됩니다. 영속화가 필요한 경우 persist 옵션을 추가할 수 있지만, 보안상 권장하지 않습니다.

  3. 토큰 만료: 토큰이 만료되면 CustomAxios.js의 응답 인터셉터에서 자동으로 갱신을 시도합니다. 갱신 실패 시 로그인 페이지로 리다이렉트됩니다.

관련 문서

- +</script>

주의사항

  1. 토큰 갱신: CustomAxios.js의 인터셉터에서 토큰 갱신이 자동으로 처리됩니다. 직접 토큰을 갱신할 필요는 없습니다.

  2. 보안: 액세스 토큰은 메모리에만 저장됩니다. 영속화가 필요한 경우 persist 옵션을 추가할 수 있지만, 보안상 권장하지 않습니다.

  3. 토큰 만료: 토큰이 만료되면 CustomAxios.js의 응답 인터셉터에서 자동으로 갱신을 시도합니다. 갱신 실패 시 로그인 페이지로 리다이렉트됩니다.

관련 문서

+ \ No newline at end of file diff --git a/core-features/stores/loading.html b/core-features/stores/loading.html index b29578f..f7df665 100644 --- a/core-features/stores/loading.html +++ b/core-features/stores/loading.html @@ -6,19 +6,19 @@ 로딩 스토어 (loadingStore) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

로딩 스토어 (loadingStore)

개요

loadingStore는 애플리케이션의 로딩 상태를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/loadingStore.js

상태 (State)

javascript
state: () => ({
+    
Skip to content

로딩 스토어 (loadingStore)

개요

loadingStore는 애플리케이션의 로딩 상태를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/loadingStore.js

상태 (State)

javascript
state: () => ({
   isLoading: false,
 })

액션 (Actions)

showLoading()

로딩 상태를 활성화합니다.

hideLoading()

로딩 상태를 비활성화합니다.

사용 예제

vue
<template>
   <Loading :isLoading="loadingStore.isLoading" />
@@ -37,8 +37,8 @@
     loadingStore.hideLoading()
   }
 }
-</script>

주의사항

CustomAxios.js의 인터셉터에서 자동으로 로딩 상태가 관리되므로, 대부분의 경우 수동으로 호출할 필요가 없습니다.

- +</script>

주의사항

CustomAxios.js의 인터셉터에서 자동으로 로딩 상태가 관리되므로, 대부분의 경우 수동으로 호출할 필요가 없습니다.

+ \ No newline at end of file diff --git a/core-features/stores/log.html b/core-features/stores/log.html index bb86569..514193c 100644 --- a/core-features/stores/log.html +++ b/core-features/stores/log.html @@ -6,19 +6,19 @@ 로그 스토어 (logStore) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

로그 스토어 (logStore)

개요

logStore는 API 호출 로그를 관리하는 Pinia 스토어입니다. 모든 API 요청이 자동으로 로그에 기록됩니다.

파일 위치

src/utils/stores/logStore.js

상태 (State)

javascript
state: () => ({
+    
Skip to content

로그 스토어 (logStore)

개요

logStore는 API 호출 로그를 관리하는 Pinia 스토어입니다. 모든 API 요청이 자동으로 로그에 기록됩니다.

파일 위치

src/utils/stores/logStore.js

상태 (State)

javascript
state: () => ({
   logYN: "N",      // 로그 표시 여부
   logList: [],     // 로그 목록
 })

주요 액션

toggleLogYN()

로그 표시 여부를 전환합니다.

addLogData(config, menuData)

로그를 추가합니다. CustomAxios.js의 요청 인터셉터에서 자동으로 호출됩니다.

파라미터:

  • config: Axios 요청 설정
  • menuData: 현재 메뉴 정보

clearLogData()

로그 목록을 초기화합니다.

로그 구조

javascript
{
@@ -46,8 +46,8 @@
 const clearLogs = () => {
   logStore.clearLogData()
 }
-</script>

주의사항

로그는 localStorage에 저장되므로 브라우저를 닫아도 유지됩니다.

- +</script>

주의사항

로그는 localStorage에 저장되므로 브라우저를 닫아도 유지됩니다.

+ \ No newline at end of file diff --git a/core-features/stores/menu.html b/core-features/stores/menu.html index 68e7791..ea3ff55 100644 --- a/core-features/stores/menu.html +++ b/core-features/stores/menu.html @@ -6,19 +6,19 @@ 메뉴 스토어 (menuStore) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

메뉴 스토어 (menuStore)

개요

menuStore는 애플리케이션의 메뉴 정보를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/menuStore.js

상태 (State)

javascript
state: () => ({
+    
Skip to content

메뉴 스토어 (menuStore)

개요

menuStore는 애플리케이션의 메뉴 정보를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/menuStore.js

상태 (State)

javascript
state: () => ({
   menu: {},           // 메뉴 데이터
   nowMenu: {},         // 현재 메뉴
   bmkList: [],        // 즐겨찾기 목록
@@ -35,8 +35,8 @@
 const isBookmarked = (menu) => {
   return menuStore.isBmk(menu)
 }
-</script>
- +</script>
+ \ No newline at end of file diff --git a/core-features/stores/modal.html b/core-features/stores/modal.html index ac312bc..0f99cf4 100644 --- a/core-features/stores/modal.html +++ b/core-features/stores/modal.html @@ -6,19 +6,19 @@ 모달 스토어 (modalStore) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

모달 스토어 (modalStore)

개요

modalStore는 애플리케이션의 모달 상태를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/modalStore.js

상태 (State)

javascript
state: () => ({
+    
Skip to content

모달 스토어 (modalStore)

개요

modalStore는 애플리케이션의 모달 상태를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/modalStore.js

상태 (State)

javascript
state: () => ({
   modalConfig: null,  // 모달 설정
   modalId: null,      // 모달 ID
 })

액션 (Actions)

openModal(modalId, config)

모달을 엽니다.

파라미터:

  • modalId (string): 모달 ID
  • config (object): 모달 설정

사용 예제:

javascript
import { useModalStore } from '@/utils/stores/modalStore.js'
@@ -47,8 +47,8 @@
 const modalStore = useModalStore()
 
 const isModalOpen = computed(() => modalStore.modalId === 'myModal')
-</script>
- +</script>
+ \ No newline at end of file diff --git a/core-features/stores/others.html b/core-features/stores/others.html index b58f7bd..69e711c 100644 --- a/core-features/stores/others.html +++ b/core-features/stores/others.html @@ -6,19 +6,19 @@ 기타 스토어 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

기타 스토어

버튼 스토어 (buttonStore)

개요

공통 버튼 박스의 버튼 상태를 관리하는 스토어입니다.

파일 위치

src/utils/stores/buttonStore.js

주요 기능

  • 버튼 표시/숨김 제어
  • 버튼 핸들러 설정
  • 버튼 초기화

사용 예제

javascript
import { useButtonStore } from '@/utils/stores/buttonStore.js'
+    
Skip to content

기타 스토어

버튼 스토어 (buttonStore)

개요

공통 버튼 박스의 버튼 상태를 관리하는 스토어입니다.

파일 위치

src/utils/stores/buttonStore.js

주요 기능

  • 버튼 표시/숨김 제어
  • 버튼 핸들러 설정
  • 버튼 초기화

사용 예제

javascript
import { useButtonStore } from '@/utils/stores/buttonStore.js'
 
 const buttonStore = useButtonStore()
 
@@ -60,8 +60,8 @@
 const screenData = dynamicStore.getScreenData('screen-uuid')
 
 // 화면 데이터 삭제
-dynamicStore.removeScreenData('screen-uuid')
- +dynamicStore.removeScreenData('screen-uuid')
+ \ No newline at end of file diff --git a/core-features/stores/session.html b/core-features/stores/session.html index 37ffc99..8df5367 100644 --- a/core-features/stores/session.html +++ b/core-features/stores/session.html @@ -6,19 +6,19 @@ 세션 스토어 (sessionStore) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

세션 스토어 (sessionStore)

개요

sessionStore는 사용자 세션 데이터를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/sessionStore.js

상태 (State)

javascript
state: () => ({
+    
Skip to content

세션 스토어 (sessionStore)

개요

sessionStore는 사용자 세션 데이터를 관리하는 Pinia 스토어입니다.

파일 위치

src/utils/stores/sessionStore.js

상태 (State)

javascript
state: () => ({
   session: {},  // 세션 데이터
 })

주요 액션

setSessionData(data)

세션 데이터를 설정합니다.

setSessionKey(key, value)

특정 키의 값을 설정합니다.

getSessionValue(key)

특정 키의 값을 가져옵니다.

사용 예제

vue
<script setup>
 import { useSessionStore } from '@/utils/stores/sessionStore.js'
@@ -30,8 +30,8 @@
 
 // 세션 값 설정
 sessionStore.setSessionKey('encrypt', 'Y')
-</script>
- +</script>
+ \ No newline at end of file diff --git a/core-features/stores/sidebar.html b/core-features/stores/sidebar.html index 1c04471..68f28d2 100644 --- a/core-features/stores/sidebar.html +++ b/core-features/stores/sidebar.html @@ -6,19 +6,19 @@ 사이드바 스토어 (sidebarStore) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

사이드바 스토어 (sidebarStore)

개요

sidebarStore는 사이드바 메뉴의 표시 상태를 관리하는 Pinia 스토어입니다. 사이드바의 표시/숨김 및 접기/펼치기 상태를 제어합니다.

파일 위치

src/utils/stores/sidebarStore.js

상태 (State)

javascript
const visible = ref(undefined)      // 사이드바 표시 여부 (undefined: 자동, true: 표시, false: 숨김)
+    
Skip to content

사이드바 스토어 (sidebarStore)

개요

sidebarStore는 사이드바 메뉴의 표시 상태를 관리하는 Pinia 스토어입니다. 사이드바의 표시/숨김 및 접기/펼치기 상태를 제어합니다.

파일 위치

src/utils/stores/sidebarStore.js

상태 (State)

javascript
const visible = ref(undefined)      // 사이드바 표시 여부 (undefined: 자동, true: 표시, false: 숨김)
 const unfoldable = ref(false)       // 사이드바 접기/펼치기 가능 여부

주요 액션

toggleVisible(value)

사이드바 표시 여부를 토글합니다.

파라미터:

  • value (optional): true면 표시, false면 숨김, undefined면 토글

사용 예제:

javascript
import { useSidebarStore } from '@/utils/stores/sidebarStore.js'
 
 const sidebarStore = useSidebarStore()
@@ -85,8 +85,8 @@
   if (newMenu) {
     sidebarStore.toggleVisible(true)
   }
-})

관련 문서

- +})

관련 문서

+ \ No newline at end of file diff --git a/core-features/stores/tab.html b/core-features/stores/tab.html index 30e01a8..6530d18 100644 --- a/core-features/stores/tab.html +++ b/core-features/stores/tab.html @@ -6,19 +6,19 @@ 탭 스토어 (tabStore) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

탭 스토어 (tabStore)

개요

tabStore는 애플리케이션의 탭 상태를 관리하는 Pinia 스토어입니다. 여러 페이지를 탭으로 관리하고 IndexedDB에 저장합니다.

파일 위치

src/utils/stores/tabStore.js

상태 (State)

javascript
state: () => ({
+    
Skip to content

탭 스토어 (tabStore)

개요

tabStore는 애플리케이션의 탭 상태를 관리하는 Pinia 스토어입니다. 여러 페이지를 탭으로 관리하고 IndexedDB에 저장합니다.

파일 위치

src/utils/stores/tabStore.js

상태 (State)

javascript
state: () => ({
   tabList: [],      // 탭 목록
   tabCntObj: {},    // 탭 개수 객체
   nowTab: null,     // 현재 탭
@@ -44,8 +44,8 @@
 const switchToTab = (tab) => {
   tabStore.switchTab(tab.idxDbKey)
 }
-</script>
- +</script>
+ \ No newline at end of file diff --git a/deployment/deploy.html b/deployment/deploy.html index eb16a88..6b2a14c 100644 --- a/deployment/deploy.html +++ b/deployment/deploy.html @@ -6,20 +6,20 @@ 배포 절차 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

배포 절차

1. 빌드

bash
npm run build:prod

2. 빌드 결과물 확인

dist/ 디렉토리에 빌드 결과물이 생성되었는지 확인합니다.

3. 웹 서버 설정

빌드된 파일을 웹 서버에 업로드합니다.

4. 환경 변수 확인

프로덕션 환경 변수가 올바르게 설정되었는지 확인합니다.

5. 테스트

배포된 애플리케이션을 테스트합니다.

주의사항

  1. 환경 변수: 프로덕션 환경 변수를 확인하세요.
  2. API 주소: 프로덕션 API 주소가 올바른지 확인하세요.
  3. HTTPS: 프로덕션 환경에서는 HTTPS를 사용하세요.
- +
Skip to content

배포 절차

1. 빌드

bash
npm run build:prod

2. 빌드 결과물 확인

dist/ 디렉토리에 빌드 결과물이 생성되었는지 확인합니다.

3. 웹 서버 설정

빌드된 파일을 웹 서버에 업로드합니다.

4. 환경 변수 확인

프로덕션 환경 변수가 올바르게 설정되었는지 확인합니다.

5. 테스트

배포된 애플리케이션을 테스트합니다.

주의사항

  1. 환경 변수: 프로덕션 환경 변수를 확인하세요.
  2. API 주소: 프로덕션 API 주소가 올바른지 확인하세요.
  3. HTTPS: 프로덕션 환경에서는 HTTPS를 사용하세요.
+ \ No newline at end of file diff --git a/deployment/dev-server.html b/deployment/dev-server.html index 2f5dc6e..d163695 100644 --- a/deployment/dev-server.html +++ b/deployment/dev-server.html @@ -6,20 +6,20 @@ 개발 서버 실행 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

개발 서버 실행

개발 서버 시작

bash
npm run dev

기본 설정

  • 포트: 5173
  • 호스트: 모든 네트워크 인터페이스 (host: true)
  • HMR: 활성화됨

포트 변경

포트가 이미 사용 중인 경우 Vite가 자동으로 다른 포트를 사용합니다.

접속

브라우저에서 http://localhost:5173으로 접속합니다.

핫 모듈 교체 (HMR)

코드를 수정하면 자동으로 브라우저가 업데이트됩니다.

프록시

개발 서버는 /api, /auth, /files 경로를 프록시합니다.

- +
Skip to content

개발 서버 실행

개발 서버 시작

bash
npm run dev

기본 설정

  • 포트: 5173
  • 호스트: 모든 네트워크 인터페이스 (host: true)
  • HMR: 활성화됨

포트 변경

포트가 이미 사용 중인 경우 Vite가 자동으로 다른 포트를 사용합니다.

접속

브라우저에서 http://localhost:5173으로 접속합니다.

핫 모듈 교체 (HMR)

코드를 수정하면 자동으로 브라우저가 업데이트됩니다.

프록시

개발 서버는 /api, /auth, /files 경로를 프록시합니다.

+ \ No newline at end of file diff --git a/deployment/optimization.html b/deployment/optimization.html index 02ef658..4c4c51a 100644 --- a/deployment/optimization.html +++ b/deployment/optimization.html @@ -6,20 +6,20 @@ 빌드 최적화 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

빌드 최적화

코드 분할

Vite는 자동으로 코드를 청크로 분할합니다.

트리 쉐이킹

사용하지 않는 코드는 자동으로 제거됩니다.

압축

  • JavaScript: Terser로 압축
  • CSS: 압축
  • HTML: 압축

에셋 최적화

  • 이미지 최적화
  • 폰트 최적화
  • CSS 최적화

청크 크기 제한

chunkSizeWarningLimit로 청크 크기 경고를 설정할 수 있습니다.

성능 모니터링

빌드 후 청크 크기를 확인하여 최적화 여부를 판단합니다.

- +
Skip to content

빌드 최적화

코드 분할

Vite는 자동으로 코드를 청크로 분할합니다.

트리 쉐이킹

사용하지 않는 코드는 자동으로 제거됩니다.

압축

  • JavaScript: Terser로 압축
  • CSS: 압축
  • HTML: 압축

에셋 최적화

  • 이미지 최적화
  • 폰트 최적화
  • CSS 최적화

청크 크기 제한

chunkSizeWarningLimit로 청크 크기 경고를 설정할 수 있습니다.

성능 모니터링

빌드 후 청크 크기를 확인하여 최적화 여부를 판단합니다.

+ \ No newline at end of file diff --git a/deployment/production-build.html b/deployment/production-build.html index 05b9047..c77ecd2 100644 --- a/deployment/production-build.html +++ b/deployment/production-build.html @@ -6,22 +6,22 @@ 프로덕션 빌드 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

프로덕션 빌드

빌드 명령어

bash
npm run build:prod
+    
Skip to content

프로덕션 빌드

빌드 명령어

bash
npm run build:prod
 # 또는
-npm run build

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

빌드 최적화

  • 코드 압축
  • 트리 쉐이킹
  • 코드 분할
  • 에셋 최적화

배포

빌드된 dist/ 디렉토리를 웹 서버에 배포합니다.

환경 변수

프로덕션 환경 변수는 .env.production 파일에서 설정합니다.

- +npm run build

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

빌드 최적화

  • 코드 압축
  • 트리 쉐이킹
  • 코드 분할
  • 에셋 최적화

배포

빌드된 dist/ 디렉토리를 웹 서버에 배포합니다.

환경 변수

프로덕션 환경 변수는 .env.production 파일에서 설정합니다.

+ \ No newline at end of file diff --git a/deployment/staging-build.html b/deployment/staging-build.html index b55d65b..66e124e 100644 --- a/deployment/staging-build.html +++ b/deployment/staging-build.html @@ -6,20 +6,20 @@ 스테이징 빌드 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

스테이징 빌드

빌드 명령어

bash
npm run build:staging

환경 변수

스테이징 환경 변수는 .env.staging 파일에서 설정합니다.

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

스테이징 서버 배포

빌드된 결과물을 스테이징 서버에 배포합니다.

- +
Skip to content

스테이징 빌드

빌드 명령어

bash
npm run build:staging

환경 변수

스테이징 환경 변수는 .env.staging 파일에서 설정합니다.

빌드 결과물

빌드 결과물은 dist/ 디렉토리에 생성됩니다.

스테이징 서버 배포

빌드된 결과물을 스테이징 서버에 배포합니다.

+ \ No newline at end of file diff --git a/development-guide/api/calling.html b/development-guide/api/calling.html index a688c42..6e8f5a5 100644 --- a/development-guide/api/calling.html +++ b/development-guide/api/calling.html @@ -6,19 +6,19 @@ API 호출 방법 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

API 호출 방법

개요

프로젝트에서는 CustomAxios.js를 통해 API를 호출합니다.

기본 사용법

javascript
import axiosInstance from '@/CustomAxios.js'
+    
Skip to content

API 호출 방법

개요

프로젝트에서는 CustomAxios.js를 통해 API를 호출합니다.

기본 사용법

javascript
import axiosInstance from '@/CustomAxios.js'
 
 // GET 요청
 const response = await axiosInstance.get('/api/endpoint')
@@ -61,8 +61,8 @@
 link.setAttribute('download', response.data.fileName)
 document.body.appendChild(link)
 link.click()
-link.remove()
- +link.remove()
+ \ No newline at end of file diff --git a/development-guide/api/error-handling.html b/development-guide/api/error-handling.html index 3c29e8c..ac531f2 100644 --- a/development-guide/api/error-handling.html +++ b/development-guide/api/error-handling.html @@ -6,19 +6,19 @@ API 에러 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

API 에러 처리

개요

API 호출 시 발생하는 에러를 처리하는 방법을 설명합니다.

기본 에러 처리

대부분의 에러는 CustomAxios.js의 응답 인터셉터에서 자동으로 처리됩니다. 하지만 컴포넌트에서 추가적인 에러 처리가 필요한 경우가 있습니다.

Try-Catch 사용

javascript
try {
+    
Skip to content

API 에러 처리

개요

API 호출 시 발생하는 에러를 처리하는 방법을 설명합니다.

기본 에러 처리

대부분의 에러는 CustomAxios.js의 응답 인터셉터에서 자동으로 처리됩니다. 하지만 컴포넌트에서 추가적인 에러 처리가 필요한 경우가 있습니다.

Try-Catch 사용

javascript
try {
   const response = await axiosInstance.post('/api/endpoint', params)
   
   if (response.status === 'S') {
@@ -219,8 +219,8 @@
       console.error('에러 처리:', err, msg)
     },
   })
-}

베스트 프랙티스

  1. 항상 Try-Catch 사용: 모든 API 호출에 try-catch를 사용하세요.
  2. 명확한 에러 메시지: 사용자에게 명확한 에러 메시지를 표시하세요.
  3. 에러 로깅: 중요한 에러는 로그에 기록하세요.
  4. 재시도 로직: 일시적인 오류는 재시도 로직을 구현하세요.
  5. 에러 타입 확인: 에러 타입에 따라 적절한 처리를 하세요.

관련 문서

- +}

베스트 프랙티스

  1. 항상 Try-Catch 사용: 모든 API 호출에 try-catch를 사용하세요.
  2. 명확한 에러 메시지: 사용자에게 명확한 에러 메시지를 표시하세요.
  3. 에러 로깅: 중요한 에러는 로그에 기록하세요.
  4. 재시도 로직: 일시적인 오류는 재시도 로직을 구현하세요.
  5. 에러 타입 확인: 에러 타입에 따라 적절한 처리를 하세요.

관련 문서

+ \ No newline at end of file diff --git a/development-guide/api/file.html b/development-guide/api/file.html index c1fa731..a646b9d 100644 --- a/development-guide/api/file.html +++ b/development-guide/api/file.html @@ -6,19 +6,19 @@ 파일 업로드/다운로드 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

파일 업로드/다운로드

파일 업로드

FormData 사용

javascript
const formData = new FormData()
+    
Skip to content

파일 업로드/다운로드

파일 업로드

FormData 사용

javascript
const formData = new FormData()
 formData.append('file', file)
 formData.append('param', JSON.stringify({ name: 'test' }))
 
@@ -53,8 +53,8 @@
 // 파일 생성
 const buffer = await workbook.xlsx.writeBuffer()
 const blob = new Blob([buffer])
-FileSaver.saveAs(blob, 'data.xlsx')
- +FileSaver.saveAs(blob, 'data.xlsx')
+ \ No newline at end of file diff --git a/development-guide/api/request-response.html b/development-guide/api/request-response.html index b4bb0ca..810fc04 100644 --- a/development-guide/api/request-response.html +++ b/development-guide/api/request-response.html @@ -6,19 +6,19 @@ 요청/응답 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

요청/응답 처리

요청 처리

기본 요청

javascript
const response = await axiosInstance.post('/api/endpoint', {
+    
Skip to content

요청/응답 처리

요청 처리

기본 요청

javascript
const response = await axiosInstance.post('/api/endpoint', {
   param1: 'value1',
   param2: 'value2',
 })

프로시저 호출

javascript
const param = {
@@ -43,8 +43,8 @@
 } catch (error) {
   // 에러 처리
   console.error('에러:', error)
-}
- +}
+ \ No newline at end of file diff --git a/development-guide/conventions/file-structure.html b/development-guide/conventions/file-structure.html index 7a930be..f2135c3 100644 --- a/development-guide/conventions/file-structure.html +++ b/development-guide/conventions/file-structure.html @@ -6,19 +6,19 @@ 파일 구조 규칙 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

파일 구조 규칙

컴포넌트 파일 구조

MyComponent.vue
+    
Skip to content

파일 구조 규칙

컴포넌트 파일 구조

MyComponent.vue
 ├── <template>      # 템플릿
 ├── <script setup>  # 스크립트
 └── <style scoped>  # 스타일

디렉토리 구조

페이지 컴포넌트

src/views/
@@ -27,8 +27,8 @@
 │   │   └── MyPage.vue

공통 컴포넌트

src/views/ui/components/
 ├── common/
 │   └── MyComponent.vue

스토어

src/utils/stores/
-└── myStore.js

파일 조직

  1. 관련 파일 그룹화: 관련된 파일들을 같은 디렉토리에 배치
  2. 명확한 이름: 파일명이 내용을 명확히 표현
  3. 일관성: 프로젝트 전체에서 일관된 구조 유지
- +└── myStore.js

파일 조직

  1. 관련 파일 그룹화: 관련된 파일들을 같은 디렉토리에 배치
  2. 명확한 이름: 파일명이 내용을 명확히 표현
  3. 일관성: 프로젝트 전체에서 일관된 구조 유지
+ \ No newline at end of file diff --git a/development-guide/conventions/js-ts.html b/development-guide/conventions/js-ts.html index fcd32fc..60e4a65 100644 --- a/development-guide/conventions/js-ts.html +++ b/development-guide/conventions/js-ts.html @@ -6,19 +6,19 @@ JavaScript/TypeScript 규칙 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

JavaScript/TypeScript 규칙

코딩 스타일

  • 들여쓰기: 2칸 스페이스
  • 세미콜론: 사용
  • 따옴표: 작은따옴표 사용

함수 작성

javascript
// 화살표 함수
+    
Skip to content

JavaScript/TypeScript 규칙

코딩 스타일

  • 들여쓰기: 2칸 스페이스
  • 세미콜론: 사용
  • 따옴표: 작은따옴표 사용

함수 작성

javascript
// 화살표 함수
 const handleClick = () => {
   console.log('클릭')
 }
@@ -40,8 +40,8 @@
 } catch (error) {
   console.error('에러:', error)
   // 에러 처리
-}
- +}
+ \ No newline at end of file diff --git a/development-guide/conventions/naming.html b/development-guide/conventions/naming.html index 657c2c2..6f54dda 100644 --- a/development-guide/conventions/naming.html +++ b/development-guide/conventions/naming.html @@ -6,20 +6,20 @@ 네이밍 규칙 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

네이밍 규칙

파일명

  • 컴포넌트: PascalCase (예: MyComponent.vue)
  • 유틸리티: camelCase (예: common.js)
  • 스토어: camelCase + Store (예: authStore.js)

변수명

  • 일반 변수: camelCase (예: userName)
  • 상수: UPPER_SNAKE_CASE (예: MAX_COUNT)
  • 프라이빗 변수: _ 접두사 (예: _privateVar)

함수명

  • 일반 함수: camelCase (예: handleClick)
  • 이벤트 핸들러: handle 또는 on 접두사 (예: handleSubmit, onClick)
  • 유틸리티 함수: gf 접두사 (예: gfIsEmpty, gfFormatDate)

컴포넌트명

  • 컴포넌트: PascalCase (예: SelectBoxSQL)
  • Props: camelCase (예: modelValue, optionLabel)

CSS 클래스명

  • BEM 방식 권장: block__element--modifier
  • 또는 kebab-case: my-component
- +
Skip to content

네이밍 규칙

파일명

  • 컴포넌트: PascalCase (예: MyComponent.vue)
  • 유틸리티: camelCase (예: common.js)
  • 스토어: camelCase + Store (예: authStore.js)

변수명

  • 일반 변수: camelCase (예: userName)
  • 상수: UPPER_SNAKE_CASE (예: MAX_COUNT)
  • 프라이빗 변수: _ 접두사 (예: _privateVar)

함수명

  • 일반 함수: camelCase (예: handleClick)
  • 이벤트 핸들러: handle 또는 on 접두사 (예: handleSubmit, onClick)
  • 유틸리티 함수: gf 접두사 (예: gfIsEmpty, gfFormatDate)

컴포넌트명

  • 컴포넌트: PascalCase (예: SelectBoxSQL)
  • Props: camelCase (예: modelValue, optionLabel)

CSS 클래스명

  • BEM 방식 권장: block__element--modifier
  • 또는 kebab-case: my-component
+ \ No newline at end of file diff --git a/development-guide/conventions/vue.html b/development-guide/conventions/vue.html index bed7b41..6f594da 100644 --- a/development-guide/conventions/vue.html +++ b/development-guide/conventions/vue.html @@ -6,19 +6,19 @@ Vue 컴포넌트 작성 규칙 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Vue 컴포넌트 작성 규칙

컴포넌트 구조

vue
<template>
+    
Skip to content

Vue 컴포넌트 작성 규칙

컴포넌트 구조

vue
<template>
   <!-- 템플릿 -->
 </template>
 
@@ -27,7 +27,7 @@
 </script>
 
 <style scoped lang="scss">
-// 스타일
+// 스타일
 </style>

네이밍

  • 컴포넌트 파일: PascalCase (예: MyComponent.vue)
  • 변수: camelCase (예: userName)
  • 상수: UPPER_SNAKE_CASE (예: MAX_COUNT)

Props 정의

vue
<script setup>
 const props = defineProps({
   title: {
@@ -50,8 +50,8 @@
 watch(count, (newVal) => {
   console.log('카운트 변경:', newVal)
 })
-</script>
- +</script>
+ \ No newline at end of file diff --git a/development-guide/new-component/creation.html b/development-guide/new-component/creation.html index f02440c..dfc8b93 100644 --- a/development-guide/new-component/creation.html +++ b/development-guide/new-component/creation.html @@ -6,19 +6,19 @@ 컴포넌트 생성 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

컴포넌트 생성

디렉토리 구조

컴포넌트는 src/views/ui/components/ 하위에 생성합니다:

  • common/: 공통 컴포넌트
  • grid/: 그리드 컴포넌트
  • popup/: 팝업 컴포넌트
  • menu/: 메뉴 컴포넌트

컴포넌트 템플릿

vue
<template>
+    
Skip to content

컴포넌트 생성

디렉토리 구조

컴포넌트는 src/views/ui/components/ 하위에 생성합니다:

  • common/: 공통 컴포넌트
  • grid/: 그리드 컴포넌트
  • popup/: 팝업 컴포넌트
  • menu/: 메뉴 컴포넌트

컴포넌트 템플릿

vue
<template>
   <div class="my-component">
     <!-- 컴포넌트 내용 -->
   </div>
@@ -40,8 +40,8 @@
 .my-component {
   // 스타일
 }
-</style>

자동 임포트

컴포넌트는 unplugin-vue-components를 통해 자동으로 임포트됩니다.

- +</style>

자동 임포트

컴포넌트는 unplugin-vue-components를 통해 자동으로 임포트됩니다.

+ \ No newline at end of file diff --git a/development-guide/new-component/registration.html b/development-guide/new-component/registration.html index aaa5264..38a81eb 100644 --- a/development-guide/new-component/registration.html +++ b/development-guide/new-component/registration.html @@ -6,26 +6,26 @@ 컴포넌트 등록 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

컴포넌트 등록

자동 등록

프로젝트는 unplugin-vue-components를 사용하여 컴포넌트를 자동으로 등록합니다.

등록 디렉토리

다음 디렉토리의 컴포넌트는 자동으로 등록됩니다:

  • src/vendor/@core/components
  • src/views/ui/components/**
  • src/views/ui/components/**/**

수동 등록

필요한 경우 수동으로 등록할 수 있습니다:

vue
<script setup>
+    
Skip to content

컴포넌트 등록

자동 등록

프로젝트는 unplugin-vue-components를 사용하여 컴포넌트를 자동으로 등록합니다.

등록 디렉토리

다음 디렉토리의 컴포넌트는 자동으로 등록됩니다:

  • src/vendor/@core/components
  • src/views/ui/components/**
  • src/views/ui/components/**/**

수동 등록

필요한 경우 수동으로 등록할 수 있습니다:

vue
<script setup>
 import MyComponent from '@/components/MyComponent.vue'
 </script>
 
 <template>
   <MyComponent />
-</template>

타입 정의

자동 등록된 컴포넌트는 src/components.d.ts에 타입 정의가 생성됩니다.

- +</template>

타입 정의

자동 등록된 컴포넌트는 src/components.d.ts에 타입 정의가 생성됩니다.

+ \ No newline at end of file diff --git a/development-guide/new-component/usage.html b/development-guide/new-component/usage.html index caa41c2..7783dbb 100644 --- a/development-guide/new-component/usage.html +++ b/development-guide/new-component/usage.html @@ -6,19 +6,19 @@ 컴포넌트 사용법 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

컴포넌트 사용법

자동 등록된 컴포넌트

자동 등록된 컴포넌트는 import 없이 바로 사용할 수 있습니다:

vue
<template>
+    
Skip to content

컴포넌트 사용법

자동 등록된 컴포넌트

자동 등록된 컴포넌트는 import 없이 바로 사용할 수 있습니다:

vue
<template>
   <SelectBoxSQL
     v-model="value"
     :data="options"
@@ -46,8 +46,8 @@
       내용
     </template>
   </MyComponent>
-</template>
- +</template>
+ \ No newline at end of file diff --git a/development-guide/new-page/creation.html b/development-guide/new-page/creation.html index dbab677..60bd00f 100644 --- a/development-guide/new-page/creation.html +++ b/development-guide/new-page/creation.html @@ -6,19 +6,19 @@ 페이지 생성 절차 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

페이지 생성 절차

개요

새로운 페이지를 추가하는 전체 절차를 설명합니다.

1. 페이지 컴포넌트 생성

1.1 디렉토리 구조 확인

페이지는 모듈별로 src/views/ 하위에 생성합니다:

  • ESS 모듈: src/views/ess/
  • FCM 모듈: src/views/fcm/
  • geosan 모듈: src/views/geosan/
  • AXP Framework: src/views/axpFramework/

1.2 컴포넌트 파일 생성

적절한 디렉토리에 .vue 파일을 생성합니다.

예제: ESS 인사 관리 모듈에 새 페이지 추가

bash
# 파일 생성
+    
Skip to content

페이지 생성 절차

개요

새로운 페이지를 추가하는 전체 절차를 설명합니다.

1. 페이지 컴포넌트 생성

1.1 디렉토리 구조 확인

페이지는 모듈별로 src/views/ 하위에 생성합니다:

  • ESS 모듈: src/views/ess/
  • FCM 모듈: src/views/fcm/
  • geosan 모듈: src/views/geosan/
  • AXP Framework: src/views/axpFramework/

1.2 컴포넌트 파일 생성

적절한 디렉토리에 .vue 파일을 생성합니다.

예제: ESS 인사 관리 모듈에 새 페이지 추가

bash
# 파일 생성
 src/views/ess/persadm/MyNewPage.vue

1.3 기본 템플릿 작성

vue
<template>
   <div class="my-new-page">
     <v-card>
@@ -157,8 +157,8 @@
   } finally {
     loadingStore.hideLoading()
   }
-}

6. 테스트

6.1 개발 서버에서 확인

bash
npm run dev

브라우저에서 해당 라우트로 접속하여 페이지가 정상적으로 표시되는지 확인합니다.

6.2 기능 테스트

  • 데이터 로드 기능
  • 사용자 인터랙션
  • 에러 처리
  • 로딩 상태

다음 단계

페이지 생성이 완료되었다면 다음 문서를 참고하세요:

- +}

6. 테스트

6.1 개발 서버에서 확인

bash
npm run dev

브라우저에서 해당 라우트로 접속하여 페이지가 정상적으로 표시되는지 확인합니다.

6.2 기능 테스트

  • 데이터 로드 기능
  • 사용자 인터랙션
  • 에러 처리
  • 로딩 상태

다음 단계

페이지 생성이 완료되었다면 다음 문서를 참고하세요:

+ \ No newline at end of file diff --git a/development-guide/new-page/menu.html b/development-guide/new-page/menu.html index 9829385..0bf6fe9 100644 --- a/development-guide/new-page/menu.html +++ b/development-guide/new-page/menu.html @@ -6,21 +6,21 @@ 메뉴 등록 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

메뉴 등록

백엔드 메뉴 등록

백엔드 데이터베이스에 메뉴 정보를 등록합니다:

  • MENUID: 메뉴 고유 ID
  • MENUNAME: 메뉴 이름
  • URLID: URL 경로 (예: /ess/persadm/MyNewPage.do)
  • ASSEMBLYFILE: 컴포넌트 파일 경로
  • PARENTMENUID: 부모 메뉴 ID

메뉴 매핑 규칙

백엔드의 URLID는 다음과 같이 매핑됩니다:

/ess/persadm/MyNewPage.do
-→ src/views/ess/persadm/MyNewPage.vue
- +
Skip to content

메뉴 등록

백엔드 메뉴 등록

백엔드 데이터베이스에 메뉴 정보를 등록합니다:

  • MENUID: 메뉴 고유 ID
  • MENUNAME: 메뉴 이름
  • URLID: URL 경로 (예: /ess/persadm/MyNewPage.do)
  • ASSEMBLYFILE: 컴포넌트 파일 경로
  • PARENTMENUID: 부모 메뉴 ID

메뉴 매핑 규칙

백엔드의 URLID는 다음과 같이 매핑됩니다:

/ess/persadm/MyNewPage.do
+→ src/views/ess/persadm/MyNewPage.vue
+ \ No newline at end of file diff --git a/development-guide/new-page/route.html b/development-guide/new-page/route.html index a4ef66f..fa22ca8 100644 --- a/development-guide/new-page/route.html +++ b/development-guide/new-page/route.html @@ -6,24 +6,24 @@ 라우트 등록 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

라우트 등록

라우트 파일

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

라우트 추가

javascript
{
+    
Skip to content

라우트 등록

라우트 파일

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

라우트 추가

javascript
{
   path: '/MyNewPage',
   name: 'MyNewPage',
   component: () => import('@/views/ess/persadm/MyNewPage.vue'),
-}

동적 라우팅

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다. 백엔드에서 메뉴를 등록하면 자동으로 라우트가 생성됩니다.

- +}

동적 라우팅

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다. 백엔드에서 메뉴를 등록하면 자동으로 라우트가 생성됩니다.

+ \ No newline at end of file diff --git a/development-guide/new-store/creation.html b/development-guide/new-store/creation.html index 6c786b8..ac98945 100644 --- a/development-guide/new-store/creation.html +++ b/development-guide/new-store/creation.html @@ -6,19 +6,19 @@ 스토어 생성 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

스토어 생성

스토어 파일 위치

스토어는 src/utils/stores/ 디렉토리에 생성합니다.

스토어 템플릿

javascript
import { defineStore } from 'pinia'
+    
Skip to content

스토어 생성

스토어 파일 위치

스토어는 src/utils/stores/ 디렉토리에 생성합니다.

스토어 템플릿

javascript
import { defineStore } from 'pinia'
 
 export const useMyStore = defineStore('myStore', {
   state: () => ({
@@ -40,8 +40,8 @@
 })

사용법

javascript
import { useMyStore } from '@/utils/stores/myStore.js'
 
 const myStore = useMyStore()
-myStore.setData('value')
- +myStore.setData('value')
+ \ No newline at end of file diff --git a/development-guide/new-store/usage.html b/development-guide/new-store/usage.html index eedb921..652f4ed 100644 --- a/development-guide/new-store/usage.html +++ b/development-guide/new-store/usage.html @@ -6,19 +6,19 @@ 스토어 사용법 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

스토어 사용법

스토어 가져오기

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
+    
Skip to content

스토어 사용법

스토어 가져오기

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
 
 const authStore = useAuthStore()

상태 읽기

javascript
// 직접 접근
 const token = authStore.accessToken
@@ -36,8 +36,8 @@
 watch(() => authStore.accessToken, (newToken) => {
   console.log('토큰 변경:', newToken)
 })
-</script>
- +</script>
+ \ No newline at end of file diff --git a/development-guide/styling/custom.html b/development-guide/styling/custom.html index d6afec1..b912bda 100644 --- a/development-guide/styling/custom.html +++ b/development-guide/styling/custom.html @@ -6,24 +6,24 @@ 커스텀 CSS | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

커스텀 CSS

커스텀 CSS 파일

커스텀 CSS 파일은 public/custom-css/ 디렉토리에 있습니다:

  • custom.css: 기본 커스텀 스타일
  • custom-datepicker.css: 날짜 선택기 스타일
  • custom-orgchart.css: 조직도 스타일

스타일 오버라이드

Vuetify 컴포넌트 스타일을 오버라이드할 수 있습니다:

vue
<style scoped lang="scss">
+    
Skip to content

커스텀 CSS

커스텀 CSS 파일

커스텀 CSS 파일은 public/custom-css/ 디렉토리에 있습니다:

  • custom.css: 기본 커스텀 스타일
  • custom-datepicker.css: 날짜 선택기 스타일
  • custom-orgchart.css: 조직도 스타일

스타일 오버라이드

Vuetify 컴포넌트 스타일을 오버라이드할 수 있습니다:

vue
<style scoped lang="scss">
 ::v-deep(.v-btn) {
   // 버튼 스타일 오버라이드
 }
-</style>

전역 스타일

main.js에서 전역 스타일을 import합니다:

javascript
import '@/vendor/assets/css/dashforge.css'
- +</style>

전역 스타일

main.js에서 전역 스타일을 import합니다:

javascript
import '@/vendor/assets/css/dashforge.css'
+ \ No newline at end of file diff --git a/development-guide/styling/scss.html b/development-guide/styling/scss.html index dd447d3..3ac728b 100644 --- a/development-guide/styling/scss.html +++ b/development-guide/styling/scss.html @@ -6,19 +6,19 @@ SCSS 사용법 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

SCSS 사용법

컴포넌트 스타일

vue
<style scoped lang="scss">
+    
Skip to content

SCSS 사용법

컴포넌트 스타일

vue
<style scoped lang="scss">
 .my-component {
   padding: 16px;
   
@@ -35,8 +35,8 @@
 
 .my-component {
   @include flex-center;
-}
- +}
+ \ No newline at end of file diff --git a/development-guide/styling/vuetify.html b/development-guide/styling/vuetify.html index 206d40f..ed0c5c7 100644 --- a/development-guide/styling/vuetify.html +++ b/development-guide/styling/vuetify.html @@ -6,19 +6,19 @@ Vuetify 사용법 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Vuetify 사용법

기본 컴포넌트

Vuetify의 컴포넌트를 직접 사용할 수 있습니다:

vue
<template>
+    
Skip to content

Vuetify 사용법

기본 컴포넌트

Vuetify의 컴포넌트를 직접 사용할 수 있습니다:

vue
<template>
   <v-card>
     <v-card-title>제목</v-card-title>
     <v-card-text>내용</v-card-text>
@@ -35,8 +35,8 @@
 </template>

아이콘

vue
<template>
   <v-icon icon="mdi-home" />
   <v-icon icon="ri-search-line" />
-</template>

공식 문서

자세한 내용은 Vuetify 공식 문서를 참고하세요.

- +</template>

공식 문서

자세한 내용은 Vuetify 공식 문서를 참고하세요.

+ \ No newline at end of file diff --git a/getting-started/overview.html b/getting-started/overview.html index 8135197..7eda591 100644 --- a/getting-started/overview.html +++ b/getting-started/overview.html @@ -6,20 +6,20 @@ 프로젝트 개요 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

프로젝트 개요

프로젝트 소개

AXP (AXP Framework)는 Vue 3 기반의 엔터프라이즈급 프론트엔드 애플리케이션 프레임워크입니다. 이 프로젝트는 다양한 비즈니스 모듈(ESS, FCM, geosan 등)을 지원하는 통합 관리 시스템의 프론트엔드 부분을 담당합니다.

주요 특징

  • Vue 3 Composition API: 최신 Vue 3의 Composition API를 활용한 컴포넌트 기반 개발
  • Vite 빌드 도구: 빠른 개발 서버와 최적화된 프로덕션 빌드
  • Pinia 상태 관리: Vuex의 후속작인 Pinia를 사용한 중앙 집중식 상태 관리
  • Vuetify UI 프레임워크: Material Design 기반의 풍부한 UI 컴포넌트 라이브러리
  • 모듈화된 구조: ESS, FCM, geosan 등 다양한 비즈니스 모듈을 독립적으로 관리
  • JWT 기반 인증: 안전한 토큰 기반 인증 시스템
  • 자동 컴포넌트/함수 임포트: unplugin-auto-import와 unplugin-vue-components를 통한 자동 임포트

프로젝트 버전

  • 프로젝트명: AXP
  • 버전: 2.3.0
  • Vue 버전: 3.5.13
  • Vite 버전: 5.4.11

기술 스택 요약

핵심 프레임워크

  • Vue 3.5.13 (Composition API)
  • Vite 5.4.11
  • Pinia 2.3.0
  • Vue Router 4.5.0

UI 프레임워크

  • Vuetify 3.7.5
  • Material Design Icons

주요 라이브러리

  • Axios 1.9.0 (HTTP 클라이언트)
  • AG Grid 33.3.2 (데이터 그리드)
  • ApexCharts 3.54.1 (차트)
  • ECharts 5.6.0 (차트)
  • ExcelJS 4.4.0 (Excel 처리)
  • CryptoJS 4.2.0 (암호화)

프로젝트 목적

이 프로젝트는 다음과 같은 목적으로 개발되었습니다:

  1. 통합 관리 시스템: 다양한 비즈니스 모듈을 하나의 플랫폼에서 관리
  2. 재사용 가능한 컴포넌트: 공통 UI 컴포넌트를 통한 개발 효율성 향상
  3. 확장 가능한 아키텍처: 새로운 모듈과 기능을 쉽게 추가할 수 있는 구조
  4. 개발자 경험 향상: 자동 임포트, 타입 추론 등을 통한 개발 편의성 제공

주요 모듈

AXP Framework

프로젝트의 핵심 프레임워크 모듈로, 인증, 메인 대시보드 등의 기본 기능을 제공합니다.

ESS 모듈

Employee Self Service 모듈로, 인사 관리, 교육, 신용카드 관리 등의 기능을 포함합니다.

FCM 모듈

Finance & HR 모듈로, ERP 및 HR 관련 기능을 제공합니다.

geosan 모듈

BI(Business Intelligence) 관련 기능을 제공하는 모듈입니다.

다음 단계

프로젝트를 시작하려면 다음 문서를 참고하세요:

- +
Skip to content

프로젝트 개요

프로젝트 소개

AXP (AXP Framework)는 Vue 3 기반의 엔터프라이즈급 프론트엔드 애플리케이션 프레임워크입니다. 이 프로젝트는 다양한 비즈니스 모듈(ESS, FCM, geosan 등)을 지원하는 통합 관리 시스템의 프론트엔드 부분을 담당합니다.

주요 특징

  • Vue 3 Composition API: 최신 Vue 3의 Composition API를 활용한 컴포넌트 기반 개발
  • Vite 빌드 도구: 빠른 개발 서버와 최적화된 프로덕션 빌드
  • Pinia 상태 관리: Vuex의 후속작인 Pinia를 사용한 중앙 집중식 상태 관리
  • Vuetify UI 프레임워크: Material Design 기반의 풍부한 UI 컴포넌트 라이브러리
  • 모듈화된 구조: ESS, FCM, geosan 등 다양한 비즈니스 모듈을 독립적으로 관리
  • JWT 기반 인증: 안전한 토큰 기반 인증 시스템
  • 자동 컴포넌트/함수 임포트: unplugin-auto-import와 unplugin-vue-components를 통한 자동 임포트

프로젝트 버전

  • 프로젝트명: AXP
  • 버전: 2.3.0
  • Vue 버전: 3.5.13
  • Vite 버전: 5.4.11

기술 스택 요약

핵심 프레임워크

  • Vue 3.5.13 (Composition API)
  • Vite 5.4.11
  • Pinia 2.3.0
  • Vue Router 4.5.0

UI 프레임워크

  • Vuetify 3.7.5
  • Material Design Icons

주요 라이브러리

  • Axios 1.9.0 (HTTP 클라이언트)
  • AG Grid 33.3.2 (데이터 그리드)
  • ApexCharts 3.54.1 (차트)
  • ECharts 5.6.0 (차트)
  • ExcelJS 4.4.0 (Excel 처리)
  • CryptoJS 4.2.0 (암호화)

프로젝트 목적

이 프로젝트는 다음과 같은 목적으로 개발되었습니다:

  1. 통합 관리 시스템: 다양한 비즈니스 모듈을 하나의 플랫폼에서 관리
  2. 재사용 가능한 컴포넌트: 공통 UI 컴포넌트를 통한 개발 효율성 향상
  3. 확장 가능한 아키텍처: 새로운 모듈과 기능을 쉽게 추가할 수 있는 구조
  4. 개발자 경험 향상: 자동 임포트, 타입 추론 등을 통한 개발 편의성 제공

주요 모듈

AXP Framework

프로젝트의 핵심 프레임워크 모듈로, 인증, 메인 대시보드 등의 기본 기능을 제공합니다.

ESS 모듈

Employee Self Service 모듈로, 인사 관리, 교육, 신용카드 관리 등의 기능을 포함합니다.

FCM 모듈

Finance & HR 모듈로, ERP 및 HR 관련 기능을 제공합니다.

geosan 모듈

BI(Business Intelligence) 관련 기능을 제공하는 모듈입니다.

다음 단계

프로젝트를 시작하려면 다음 문서를 참고하세요:

+ \ No newline at end of file diff --git a/getting-started/project-structure.html b/getting-started/project-structure.html index 374af91..ae864da 100644 --- a/getting-started/project-structure.html +++ b/getting-started/project-structure.html @@ -6,19 +6,19 @@ 프로젝트 구조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

프로젝트 구조

전체 디렉토리 구조

vue_project/
+    
Skip to content

프로젝트 구조

전체 디렉토리 구조

vue_project/
 ├── public/                 # 정적 리소스 파일
 │   ├── custom-css/         # 커스텀 CSS 파일
 │   ├── favicon.ico         # 파비콘
@@ -37,8 +37,8 @@
 ├── .env                    # 환경 변수
 ├── package.json            # 프로젝트 설정 및 의존성
 ├── vite.config.js          # Vite 설정
-└── README.md               # 프로젝트 설명

주요 디렉토리 설명

/src - 소스 코드

프로젝트의 모든 소스 코드가 위치하는 디렉토리입니다.

/src/App.vue

애플리케이션의 루트 컴포넌트입니다. Vue Router의 <RouterView />를 포함하여 페이지 라우팅을 처리합니다.

/src/main.js

애플리케이션의 진입점입니다. Vue 앱을 생성하고 플러그인을 등록한 후 마운트합니다.

/src/CustomAxios.js

Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다. JWT 토큰 관리, 암호화/복호화, 에러 처리 등의 기능을 포함합니다.

/src/utils - 유틸리티

공통으로 사용되는 유틸리티 함수와 설정 파일들이 위치합니다.

/src/utils/common/

  • common.js: 문자열, 날짜, 숫자, 배열, 객체, 파일 처리 등 다양한 유틸리티 함수
  • comfcm.js: FCM(Firebase Cloud Messaging) 관련 유틸리티

/src/utils/stores/

Pinia 스토어 파일들이 위치합니다:

  • authStore.js: 인증 관련 상태 관리
  • loadingStore.js: 로딩 상태 관리
  • menuStore.js: 메뉴 정보 관리
  • sessionStore.js: 세션 데이터 관리
  • modalStore.js: 모달 상태 관리
  • tabStore.js: 탭 상태 관리
  • sidebarStore.js: 사이드바 상태 관리
  • logStore.js: 로그 관리
  • 기타 스토어들

/src/utils/plugins/

플러그인 설정 파일들이 위치합니다:

  • router/: Vue Router 설정
  • pinia.js: Pinia 설정
  • vuetify/: Vuetify 설정
  • iconify/: Iconify 아이콘 설정

/src/views - 페이지 컴포넌트

비즈니스 로직에 해당하는 페이지 컴포넌트들이 위치합니다.

/src/views/axpFramework/

프레임워크 핵심 모듈:

  • auth/: 로그인, 회원가입 등 인증 관련 페이지
  • main/: 메인 대시보드, 메인 레이아웃

/src/views/ess/

ESS(Employee Self Service) 모듈:

  • admin/: 관리자 기능
  • persadm/: 인사 관리
  • creditcard/: 신용카드 관리
  • education/: 교육 관리
  • estimation/: 견적 관리

/src/views/fcm/

FCM(Finance & HR) 모듈:

  • erp/: ERP 관련 기능
  • hr/: HR 관련 기능

/src/views/geosan/

geosan 모듈:

  • BI/: BI(Business Intelligence) 관련 기능

/src/views/ui/

공통 UI 컴포넌트:

  • components/: 재사용 가능한 컴포넌트
    • common/: 공통 컴포넌트 (버튼, 입력, 선택, 조회 등)
    • grid/: 그리드 관련 컴포넌트
    • popup/: 팝업 컴포넌트
    • menu/: 메뉴 컴포넌트
  • layouts/: 레이아웃 컴포넌트

/src/script - 비즈니스 로직

페이지 컴포넌트에서 사용되는 비즈니스 로직 스크립트 파일들이 위치합니다.

/src/vendor - 외부 라이브러리

외부 라이브러리와 템플릿 파일들이 위치합니다:

  • @core/: 핵심 컴포넌트 및 스타일
  • @layouts/: 레이아웃 컴포넌트
  • @dashboard/: 대시보드 컴포넌트
  • assets/: 이미지, 폰트, CSS 등 리소스
  • lib/: 서드파티 라이브러리

/public - 정적 리소스

빌드 시 그대로 복사되는 정적 파일들이 위치합니다.

설정 파일

package.json

프로젝트 메타데이터, 의존성, 스크립트가 정의된 파일입니다.

vite.config.js

Vite 빌드 도구의 설정 파일입니다. 플러그인, 경로 별칭, 프록시 설정 등이 포함됩니다.

.env

환경 변수 설정 파일입니다. API 서버 주소, 인증 서버 주소 등을 설정합니다.

jsconfig.json

JavaScript 프로젝트 설정 파일입니다. 경로 별칭과 모듈 해석 설정이 포함됩니다.

파일 명명 규칙

  • 컴포넌트: PascalCase (예: SelectBoxSQL.vue)
  • 유틸리티 함수: camelCase (예: common.js)
  • 상수: UPPER_SNAKE_CASE
  • 스토어: camelCase + Store (예: authStore.js)

다음 단계

프로젝트 구조를 이해했다면 다음 문서를 참고하세요:

- +└── README.md # 프로젝트 설명

주요 디렉토리 설명

/src - 소스 코드

프로젝트의 모든 소스 코드가 위치하는 디렉토리입니다.

/src/App.vue

애플리케이션의 루트 컴포넌트입니다. Vue Router의 <RouterView />를 포함하여 페이지 라우팅을 처리합니다.

/src/main.js

애플리케이션의 진입점입니다. Vue 앱을 생성하고 플러그인을 등록한 후 마운트합니다.

/src/CustomAxios.js

Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다. JWT 토큰 관리, 암호화/복호화, 에러 처리 등의 기능을 포함합니다.

/src/utils - 유틸리티

공통으로 사용되는 유틸리티 함수와 설정 파일들이 위치합니다.

/src/utils/common/

  • common.js: 문자열, 날짜, 숫자, 배열, 객체, 파일 처리 등 다양한 유틸리티 함수
  • comfcm.js: FCM(Firebase Cloud Messaging) 관련 유틸리티

/src/utils/stores/

Pinia 스토어 파일들이 위치합니다:

  • authStore.js: 인증 관련 상태 관리
  • loadingStore.js: 로딩 상태 관리
  • menuStore.js: 메뉴 정보 관리
  • sessionStore.js: 세션 데이터 관리
  • modalStore.js: 모달 상태 관리
  • tabStore.js: 탭 상태 관리
  • sidebarStore.js: 사이드바 상태 관리
  • logStore.js: 로그 관리
  • 기타 스토어들

/src/utils/plugins/

플러그인 설정 파일들이 위치합니다:

  • router/: Vue Router 설정
  • pinia.js: Pinia 설정
  • vuetify/: Vuetify 설정
  • iconify/: Iconify 아이콘 설정

/src/views - 페이지 컴포넌트

비즈니스 로직에 해당하는 페이지 컴포넌트들이 위치합니다.

/src/views/axpFramework/

프레임워크 핵심 모듈:

  • auth/: 로그인, 회원가입 등 인증 관련 페이지
  • main/: 메인 대시보드, 메인 레이아웃

/src/views/ess/

ESS(Employee Self Service) 모듈:

  • admin/: 관리자 기능
  • persadm/: 인사 관리
  • creditcard/: 신용카드 관리
  • education/: 교육 관리
  • estimation/: 견적 관리

/src/views/fcm/

FCM(Finance & HR) 모듈:

  • erp/: ERP 관련 기능
  • hr/: HR 관련 기능

/src/views/geosan/

geosan 모듈:

  • BI/: BI(Business Intelligence) 관련 기능

/src/views/ui/

공통 UI 컴포넌트:

  • components/: 재사용 가능한 컴포넌트
    • common/: 공통 컴포넌트 (버튼, 입력, 선택, 조회 등)
    • grid/: 그리드 관련 컴포넌트
    • popup/: 팝업 컴포넌트
    • menu/: 메뉴 컴포넌트
  • layouts/: 레이아웃 컴포넌트

/src/script - 비즈니스 로직

페이지 컴포넌트에서 사용되는 비즈니스 로직 스크립트 파일들이 위치합니다.

/src/vendor - 외부 라이브러리

외부 라이브러리와 템플릿 파일들이 위치합니다:

  • @core/: 핵심 컴포넌트 및 스타일
  • @layouts/: 레이아웃 컴포넌트
  • @dashboard/: 대시보드 컴포넌트
  • assets/: 이미지, 폰트, CSS 등 리소스
  • lib/: 서드파티 라이브러리

/public - 정적 리소스

빌드 시 그대로 복사되는 정적 파일들이 위치합니다.

설정 파일

package.json

프로젝트 메타데이터, 의존성, 스크립트가 정의된 파일입니다.

vite.config.js

Vite 빌드 도구의 설정 파일입니다. 플러그인, 경로 별칭, 프록시 설정 등이 포함됩니다.

.env

환경 변수 설정 파일입니다. API 서버 주소, 인증 서버 주소 등을 설정합니다.

jsconfig.json

JavaScript 프로젝트 설정 파일입니다. 경로 별칭과 모듈 해석 설정이 포함됩니다.

파일 명명 규칙

  • 컴포넌트: PascalCase (예: SelectBoxSQL.vue)
  • 유틸리티 함수: camelCase (예: common.js)
  • 상수: UPPER_SNAKE_CASE
  • 스토어: camelCase + Store (예: authStore.js)

다음 단계

프로젝트 구조를 이해했다면 다음 문서를 참고하세요:

+ \ No newline at end of file diff --git a/getting-started/quick-start.html b/getting-started/quick-start.html index 64bfdc9..d58f961 100644 --- a/getting-started/quick-start.html +++ b/getting-started/quick-start.html @@ -6,19 +6,19 @@ 빠른 시작 가이드 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

빠른 시작 가이드

이 가이드는 프로젝트를 처음 시작하는 개발자를 위한 빠른 시작 가이드입니다.

1. 프로젝트 클론 및 설치

bash
# 저장소 클론
+    
Skip to content

빠른 시작 가이드

이 가이드는 프로젝트를 처음 시작하는 개발자를 위한 빠른 시작 가이드입니다.

1. 프로젝트 클론 및 설치

bash
# 저장소 클론
 git clone <repository-url>
 cd vue_project
 
@@ -153,8 +153,8 @@
     font-weight: bold;
   }
 }
-</style>

다음 단계

기본적인 사용법을 익혔다면 다음 문서들을 참고하여 더 깊이 있게 학습하세요:

- +</style>

다음 단계

기본적인 사용법을 익혔다면 다음 문서들을 참고하여 더 깊이 있게 학습하세요:

+ \ No newline at end of file diff --git a/getting-started/requirements.html b/getting-started/requirements.html index 6914daf..1d8dd62 100644 --- a/getting-started/requirements.html +++ b/getting-started/requirements.html @@ -6,20 +6,20 @@ 시스템 요구사항 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

시스템 요구사항

필수 소프트웨어

Node.js

  • 최소 버전: Node.js 18.x 이상
  • 권장 버전: Node.js 20.x LTS
  • 설치 확인: 터미널에서 node --version 명령어로 확인

npm 또는 yarn

  • npm: Node.js와 함께 자동 설치됨 (버전 9.x 이상 권장)
  • yarn: 선택 사항 (npm 대신 사용 가능)
  • 설치 확인: 터미널에서 npm --version 또는 yarn --version 명령어로 확인

Git

  • 최소 버전: Git 2.30 이상
  • 설치 확인: 터미널에서 git --version 명령어로 확인

개발 도구

코드 에디터

  • 권장: Visual Studio Code (VS Code)
  • 필수 확장 프로그램:
    • Volar (Vue 3 지원)
    • ESLint
    • Prettier
    • Vite

브라우저

개발 및 테스트를 위해 다음 브라우저를 지원합니다:

  • Chrome (최신 버전)
  • Firefox (최신 버전)
  • Edge (최신 버전)
  • Safari (최신 버전)

운영 체제

다음 운영 체제에서 개발 및 실행이 가능합니다:

  • Windows 10/11
  • macOS 10.15 이상
  • Linux (Ubuntu 20.04 이상 권장)

하드웨어 요구사항

최소 사양

  • CPU: 2코어 이상
  • RAM: 4GB 이상
  • 디스크 공간: 2GB 이상의 여유 공간

권장 사양

  • CPU: 4코어 이상
  • RAM: 8GB 이상
  • 디스크 공간: 5GB 이상의 여유 공간
  • SSD: 개발 속도 향상을 위해 권장

네트워크 요구사항

개발 환경

  • 백엔드 API 서버와의 통신을 위한 네트워크 연결 필요
  • 인터넷 연결 (npm 패키지 설치 시 필요)

환경 변수

프로젝트 루트에 .env 파일이 필요하며, 다음 환경 변수들이 설정되어야 합니다:

  • VITE_API_BASE_URL: 백엔드 API 서버 주소
  • VITE_AUTH_BASE_URL: 인증 서버 주소
  • VITE_FILE_SERVER_URL: 파일 서버 주소

의존성 확인

프로젝트를 클론한 후 다음 명령어로 의존성을 확인할 수 있습니다:

bash
npm install

설치가 완료되면 node_modules 폴더가 생성되고 모든 패키지가 설치됩니다.

버전 관리

프로젝트는 .nvmrc 파일을 통해 Node.js 버전을 관리합니다. nvm을 사용하는 경우:

bash
nvm use

이 명령어로 프로젝트에 맞는 Node.js 버전으로 자동 전환됩니다.

다음 단계

요구사항을 확인했다면 다음 문서를 참고하여 개발 환경을 설정하세요:

- +
Skip to content

시스템 요구사항

필수 소프트웨어

Node.js

  • 최소 버전: Node.js 18.x 이상
  • 권장 버전: Node.js 20.x LTS
  • 설치 확인: 터미널에서 node --version 명령어로 확인

npm 또는 yarn

  • npm: Node.js와 함께 자동 설치됨 (버전 9.x 이상 권장)
  • yarn: 선택 사항 (npm 대신 사용 가능)
  • 설치 확인: 터미널에서 npm --version 또는 yarn --version 명령어로 확인

Git

  • 최소 버전: Git 2.30 이상
  • 설치 확인: 터미널에서 git --version 명령어로 확인

개발 도구

코드 에디터

  • 권장: Visual Studio Code (VS Code)
  • 필수 확장 프로그램:
    • Volar (Vue 3 지원)
    • ESLint
    • Prettier
    • Vite

브라우저

개발 및 테스트를 위해 다음 브라우저를 지원합니다:

  • Chrome (최신 버전)
  • Firefox (최신 버전)
  • Edge (최신 버전)
  • Safari (최신 버전)

운영 체제

다음 운영 체제에서 개발 및 실행이 가능합니다:

  • Windows 10/11
  • macOS 10.15 이상
  • Linux (Ubuntu 20.04 이상 권장)

하드웨어 요구사항

최소 사양

  • CPU: 2코어 이상
  • RAM: 4GB 이상
  • 디스크 공간: 2GB 이상의 여유 공간

권장 사양

  • CPU: 4코어 이상
  • RAM: 8GB 이상
  • 디스크 공간: 5GB 이상의 여유 공간
  • SSD: 개발 속도 향상을 위해 권장

네트워크 요구사항

개발 환경

  • 백엔드 API 서버와의 통신을 위한 네트워크 연결 필요
  • 인터넷 연결 (npm 패키지 설치 시 필요)

환경 변수

프로젝트 루트에 .env 파일이 필요하며, 다음 환경 변수들이 설정되어야 합니다:

  • VITE_API_BASE_URL: 백엔드 API 서버 주소
  • VITE_AUTH_BASE_URL: 인증 서버 주소
  • VITE_FILE_SERVER_URL: 파일 서버 주소

의존성 확인

프로젝트를 클론한 후 다음 명령어로 의존성을 확인할 수 있습니다:

bash
npm install

설치가 완료되면 node_modules 폴더가 생성되고 모든 패키지가 설치됩니다.

버전 관리

프로젝트는 .nvmrc 파일을 통해 Node.js 버전을 관리합니다. nvm을 사용하는 경우:

bash
nvm use

이 명령어로 프로젝트에 맞는 Node.js 버전으로 자동 전환됩니다.

다음 단계

요구사항을 확인했다면 다음 문서를 참고하여 개발 환경을 설정하세요:

+ \ No newline at end of file diff --git a/getting-started/setup.html b/getting-started/setup.html index 15298e0..2b3fcb7 100644 --- a/getting-started/setup.html +++ b/getting-started/setup.html @@ -6,19 +6,19 @@ 개발 환경 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

개발 환경 설정

프로젝트 클론

먼저 프로젝트 저장소를 클론합니다:

bash
git clone <repository-url>
+    
Skip to content

개발 환경 설정

프로젝트 클론

먼저 프로젝트 저장소를 클론합니다:

bash
git clone <repository-url>
 cd vue_project

Node.js 버전 확인

프로젝트 루트의 .nvmrc 파일에 명시된 Node.js 버전을 사용합니다. nvm을 사용하는 경우:

bash
nvm use

또는 직접 버전을 확인:

bash
node --version  # Node.js 18.x 이상이어야 함

의존성 설치

프로젝트 루트 디렉토리에서 다음 명령어를 실행합니다:

bash
npm install

이 명령어는 다음을 수행합니다:

  • package.json에 명시된 모든 의존성 패키지 설치
  • postinstall 스크립트 실행 (아이콘 빌드)

환경 변수 설정

프로젝트 루트에 .env 파일을 생성하고 필요한 환경 변수를 설정합니다:

env
# API 서버 주소
 VITE_API_BASE_URL=http://localhost:8080
 
@@ -26,8 +26,8 @@
 VITE_AUTH_BASE_URL=http://localhost:8080
 
 # 파일 서버 주소
-VITE_FILE_SERVER_URL=http://localhost:8080

환경별 설정 파일

프로젝트는 다음 환경별 설정 파일을 지원합니다:

  • .env: 기본 환경 변수
  • .env.development: 개발 환경 변수
  • .env.production: 프로덕션 환경 변수
  • .env.staging: 스테이징 환경 변수

각 환경에 맞는 변수를 설정하면 됩니다.

개발 서버 실행

환경 설정이 완료되면 개발 서버를 실행합니다:

bash
npm run dev

개발 서버는 기본적으로 http://localhost:5173에서 실행됩니다.

브라우저에서 해당 주소로 접속하면 애플리케이션을 확인할 수 있습니다.

빌드

개발 빌드

bash
npm run build:dev

스테이징 빌드

bash
npm run build:staging

프로덕션 빌드

bash
npm run build:prod

또는

bash
npm run build

빌드 결과물은 dist 폴더에 생성됩니다.

빌드 미리보기

빌드된 결과물을 로컬에서 미리 볼 수 있습니다:

bash
npm run preview

기본적으로 http://localhost:5050에서 실행됩니다.

추가 설정

아이콘 빌드

프로젝트는 Iconify를 사용하여 아이콘을 관리합니다. 아이콘을 추가하거나 변경한 경우:

bash
npm run build:icons

ESLint 설정

프로젝트는 ESLint를 사용하여 코드 품질을 관리합니다. 자동 임포트를 위한 설정 파일은 .eslintrc-auto-import.json에 있습니다.

Prettier 설정

코드 포맷팅은 Prettier를 사용합니다. 설정 파일은 .prettierrc.json에 있습니다.

문제 해결

포트 충돌

개발 서버 포트(5173)가 이미 사용 중인 경우, Vite가 자동으로 다른 포트를 사용합니다. 콘솔에 표시된 포트 번호를 확인하세요.

의존성 설치 오류

의존성 설치 중 오류가 발생하는 경우:

  1. node_modules 폴더와 package-lock.json 삭제
  2. npm cache clean --force 실행
  3. npm install 다시 실행

환경 변수 인식 안 됨

환경 변수가 인식되지 않는 경우:

  1. .env 파일이 프로젝트 루트에 있는지 확인
  2. 환경 변수 이름이 VITE_로 시작하는지 확인
  3. 개발 서버를 재시작

다음 단계

개발 환경 설정이 완료되었다면 다음 문서를 참고하세요:

- +VITE_FILE_SERVER_URL=http://localhost:8080

환경별 설정 파일

프로젝트는 다음 환경별 설정 파일을 지원합니다:

  • .env: 기본 환경 변수
  • .env.development: 개발 환경 변수
  • .env.production: 프로덕션 환경 변수
  • .env.staging: 스테이징 환경 변수

각 환경에 맞는 변수를 설정하면 됩니다.

개발 서버 실행

환경 설정이 완료되면 개발 서버를 실행합니다:

bash
npm run dev

개발 서버는 기본적으로 http://localhost:5173에서 실행됩니다.

브라우저에서 해당 주소로 접속하면 애플리케이션을 확인할 수 있습니다.

빌드

개발 빌드

bash
npm run build:dev

스테이징 빌드

bash
npm run build:staging

프로덕션 빌드

bash
npm run build:prod

또는

bash
npm run build

빌드 결과물은 dist 폴더에 생성됩니다.

빌드 미리보기

빌드된 결과물을 로컬에서 미리 볼 수 있습니다:

bash
npm run preview

기본적으로 http://localhost:5050에서 실행됩니다.

추가 설정

아이콘 빌드

프로젝트는 Iconify를 사용하여 아이콘을 관리합니다. 아이콘을 추가하거나 변경한 경우:

bash
npm run build:icons

ESLint 설정

프로젝트는 ESLint를 사용하여 코드 품질을 관리합니다. 자동 임포트를 위한 설정 파일은 .eslintrc-auto-import.json에 있습니다.

Prettier 설정

코드 포맷팅은 Prettier를 사용합니다. 설정 파일은 .prettierrc.json에 있습니다.

문제 해결

포트 충돌

개발 서버 포트(5173)가 이미 사용 중인 경우, Vite가 자동으로 다른 포트를 사용합니다. 콘솔에 표시된 포트 번호를 확인하세요.

의존성 설치 오류

의존성 설치 중 오류가 발생하는 경우:

  1. node_modules 폴더와 package-lock.json 삭제
  2. npm cache clean --force 실행
  3. npm install 다시 실행

환경 변수 인식 안 됨

환경 변수가 인식되지 않는 경우:

  1. .env 파일이 프로젝트 루트에 있는지 확인
  2. 환경 변수 이름이 VITE_로 시작하는지 확인
  3. 개발 서버를 재시작

다음 단계

개발 환경 설정이 완료되었다면 다음 문서를 참고하세요:

+ \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 2d6a9e5..35e5af1 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"api-examples.md":"BQhZzfKm","backend_api_common_ai.md":"Cphb6nko","backend_api_common_auth.md":"CrFGm3ZQ","backend_api_common_database.md":"BlhwGiZ9","backend_api_common_file.md":"BfuynIf1","backend_api_common_redis.md":"B3P6UwTn","backend_api_common_report.md":"C_pVbIQQ","backend_api_common_sms.md":"D4ICZcEx","backend_api_ess_login.md":"BVQaZY09","backend_api_ess_user.md":"DtcTL5Pm","backend_api_fcm_index.md":"C6iZnzwU","backend_api_index.md":"BFRlATCv","backend_common-features_ai.md":"FbpUuNEs","backend_common-features_file.md":"DetDTpsK","backend_common-features_logging.md":"CpLBzVCs","backend_common-features_mail.md":"aa5D9BwD","backend_common-features_report.md":"DJP8ZNWC","backend_common-features_security.md":"hxnUyxk-","backend_common-features_sms.md":"CQn2dNYa","backend_common-features_utilities.md":"CIOeqodf","backend_configuration_application.md":"Br20Vuzf","backend_configuration_datasource.md":"Ckfam7vd","backend_configuration_maven.md":"DGDGD7_w","backend_configuration_redis.md":"5b5egCnu","backend_database_common-service.md":"CaK8z9dj","backend_database_mapper-guide.md":"DoAnw811","backend_database_mybatis.md":"DpD_xpC5","backend_deployment_build.md":"BThngNd5","backend_deployment_deploy.md":"CZIFW9mr","backend_development-guide_api-design.md":"B9TyYaeE","backend_development-guide_authentication.md":"tHkT7_bk","backend_development-guide_new-module.md":"B9Q-TaWQ","backend_development-guide_new-module_config.md":"DnpW-8EW","backend_development-guide_new-module_controller.md":"C_DJ4yGN","backend_development-guide_new-module_creation.md":"BagBCIbC","backend_development-guide_new-module_mapper.md":"Vughb4Kx","backend_development-guide_new-module_service.md":"N9p-Mefl","backend_development-guide_swagger.md":"uwpsYqcF","backend_getting-started_overview.md":"Buo6O1KF","backend_getting-started_project-structure.md":"D-q4ax4E","backend_getting-started_requirements.md":"jo0Ec_yS","backend_getting-started_setup.md":"CjgHpzHA","backend_index.md":"B8agd6M6","backend_project-structure_business.md":"CH81eD5k","backend_project-structure_directory.md":"E302WhzK","backend_project-structure_framework.md":"hg4YzYX_","backend_project-structure_framework_ai.md":"CXEsW87D","backend_project-structure_framework_common.md":"D-56V9qr","backend_project-structure_framework_config.md":"Da7CdaDm","backend_project-structure_framework_file.md":"ZojyR7vz","backend_project-structure_framework_filter.md":"BVCau3SF","backend_project-structure_framework_mail.md":"bguISNdT","backend_project-structure_framework_report.md":"B6I_eJDL","backend_project-structure_framework_sms.md":"C64Hdd-c","backend_project-structure_resources.md":"BBOYoIgK","backend_references_classes.md":"CkFo3F5d","backend_references_config-files.md":"D2nIZrYt","backend_references_external-libs.md":"BsWxAvun","backend_security_encryption.md":"CdzoDBAG","backend_security_filters.md":"DMrGTEKb","backend_security_jwt.md":"DUux2-kN","backend_security_spring-security.md":"CBs5kSCC","backend_tech-stack_databases.md":"CDGUR4X3","backend_tech-stack_documentation.md":"Bi7mFHtE","backend_tech-stack_file-processing.md":"Dk_DpfYN","backend_tech-stack_frameworks.md":"BciIYQ8-","backend_tech-stack_security.md":"CL9fNcgV","backend_tech-stack_utilities.md":"BsxwVbYD","backend_testing_integration-test.md":"1bSRyHdQ","backend_testing_unit-test.md":"BZ7CWtDo","backend_troubleshooting_common-issues.md":"BDCcNN-Q","backend_troubleshooting_logging.md":"CCu2WgpS","components_common_button.md":"BWGrmsmy","components_common_input.md":"BZOrWVFI","components_common_loading.md":"xYhJ_7FD","components_common_lookup.md":"YgFAeO8Z","components_common_select.md":"QTs8rMvG","components_common_tree.md":"BexI7Dii","components_grid_ag-grid.md":"CBL3DnKl","components_grid_click-field.md":"DTiKcHNo","components_grid_context-menu.md":"75eUqxQY","components_grid_multi-select.md":"CUYcOHR-","components_layouts_blank.md":"DqMYvMC1","components_layouts_main.md":"DZR-gHFD","components_layouts_popup.md":"DmuD20b2","components_menu_bookmark.md":"BySYMprH","components_menu_header-bar.md":"B3riSS0N","components_menu_sidebar.md":"C865jo6P","components_popup_approval-list.md":"D_jmQnZJ","components_popup_approval.md":"Dm6UstSl","components_popup_file-link.md":"BlAJMGNt","components_popup_log.md":"GnHIBnT-","components_popup_page-log.md":"BCT8DIlm","components_popup_sms-template.md":"tdeVZDjp","configuration_alias.md":"D5LOQmkW","configuration_build.md":"Dm0YGx3y","configuration_env.md":"CyUfTadv","configuration_proxy.md":"CTi8hOVA","configuration_vite.md":"D-KwBQgf","core-features_auth_encryption.md":"CCPm4imW","core-features_auth_jwt.md":"D3g4aW05","core-features_auth_session.md":"ouzHpLP8","core-features_auth_token-refresh.md":"C2NqE5yN","core-features_http_axios-instance.md":"PCEq4sHP","core-features_http_error-handling.md":"BvG1RHGz","core-features_http_request-interceptor.md":"CFAUTEpr","core-features_http_response-interceptor.md":"B1m0glPM","core-features_routing_dynamic.md":"CXrme9Ei","core-features_routing_guards.md":"ByjLIwUX","core-features_routing_routes.md":"CUrqxSBZ","core-features_stores_auth.md":"BhYKa_iN","core-features_stores_loading.md":"DIG-aKsx","core-features_stores_log.md":"B5Obijzo","core-features_stores_menu.md":"M_pVgBIp","core-features_stores_modal.md":"DDwVg1nP","core-features_stores_others.md":"Nb9eYwXB","core-features_stores_session.md":"Bn7Rlf0Z","core-features_stores_sidebar.md":"ScgR2GE4","core-features_stores_tab.md":"f0o1uOE5","deployment_deploy.md":"2K0TnCMr","deployment_dev-server.md":"CHYZ-vPY","deployment_optimization.md":"DDwvDmu2","deployment_production-build.md":"BB2S1Aka","deployment_staging-build.md":"BfUgjSDY","development-guide_api_calling.md":"Gn942Yzp","development-guide_api_error-handling.md":"BaN-2VCx","development-guide_api_file.md":"DbuI059R","development-guide_api_request-response.md":"zjH70F9s","development-guide_conventions_file-structure.md":"D8S9qoNZ","development-guide_conventions_js-ts.md":"Bl6FqAZq","development-guide_conventions_naming.md":"C1bIGx7k","development-guide_conventions_vue.md":"Ca7EUAYF","development-guide_new-component_creation.md":"BzfD0GpW","development-guide_new-component_registration.md":"CNSVjuYj","development-guide_new-component_usage.md":"9iK5hBM-","development-guide_new-page_creation.md":"D9wf2-dd","development-guide_new-page_menu.md":"C4vpy7Es","development-guide_new-page_route.md":"BNsilGSA","development-guide_new-store_creation.md":"DH9l03ji","development-guide_new-store_usage.md":"D_GowFsF","development-guide_styling_custom.md":"BNRn1XWg","development-guide_styling_scss.md":"DZdY9spX","development-guide_styling_vuetify.md":"DNBdapBb","getting-started_overview.md":"KQB4W_sR","getting-started_project-structure.md":"gsHjCrOi","getting-started_quick-start.md":"CDoTHUN9","getting-started_requirements.md":"H1Py_WqL","getting-started_setup.md":"CcPoeFyE","index.md":"C3l6ASiS","markdown-examples.md":"BHQsMIvn","modules_axpframework_auth.md":"Bt-evg0Y","modules_ess_persadm.md":"Cqrm0opA","modules_fcm_erp.md":"CC2evF3J","modules_geosan_bi.md":"D2HNGqO2","project-structure_directory.md":"Ck-scnak","project-structure_public.md":"BltRYdKv","project-structure_scripts.md":"YiE0s8yi","project-structure_src.md":"B6mdu9hL","project-structure_utils_common.md":"B53wFpGV","project-structure_utils_lang.md":"CZnZSxCT","project-structure_utils_plugins.md":"Ce68kzUz","project-structure_utils_stores.md":"C_DqYVYN","project-structure_vendor.md":"BtjPSR9P","project-structure_views_axpframework.md":"CsZ6tcU2","project-structure_views_ess.md":"CKvjNUw3","project-structure_views_fcm.md":"CuW7jApc","project-structure_views_geosan.md":"CLPwdS3z","project-structure_views_ui.md":"DNuswPXA","references_classes.md":"BvJWEp-u","references_config-files.md":"BhQxxc-9","references_external-libs.md":"Bq9Imz0N","references_faq.md":"ZeU1UL6C","references_icons.md":"Dwl8vs6S","tech-stack_axios.md":"DCDophae","tech-stack_charts.md":"DpZhSJ3h","tech-stack_frameworks.md":"Cx6EsRgf","tech-stack_grid.md":"CW7amus9","tech-stack_pinia.md":"BqPaA96Y","tech-stack_router.md":"DcxxchZX","tech-stack_utilities.md":"aD8q4_8H","tech-stack_vuetify.md":"DI-HcrLA","testing_component-test.md":"DBDqn2PZ","testing_e2e-test.md":"DrVnKCZ6","testing_unit-test.md":"YPwp2OVV","troubleshooting_api-issues.md":"BAW6UpbV","troubleshooting_auth-issues.md":"CsXYnxB7","troubleshooting_build-errors.md":"CgZLYGAJ","troubleshooting_common-issues.md":"DRF7GBYq","troubleshooting_runtime-errors.md":"BydLjSEI","utilities_array-object.md":"Be6UbmjN","utilities_common.md":"BQuLhqC4","utilities_crypto.md":"DjXiM71Y","utilities_date.md":"BYdslHtu","utilities_excel.md":"CQ4RImKr","utilities_fcm.md":"Bi1h1ol2","utilities_file.md":"CYP8n-g5","utilities_indexeddb.md":"C2EZ34yS","utilities_number.md":"DAM7iLsa","utilities_string.md":"fMLFmV49","utilities_validation.md":"DUjvh97I"} +{"api-examples.md":"ChIkFPJ6","backend_api_common_ai.md":"zIuJQ59i","backend_api_common_auth.md":"DVgaEMoE","backend_api_common_database.md":"CYU8s8pg","backend_api_common_file.md":"Dt9rNkqn","backend_api_common_redis.md":"ReQWNJXT","backend_api_common_report.md":"C4hpMYhE","backend_api_common_sms.md":"CTuSsITz","backend_api_ess_login.md":"BYriAR7v","backend_api_ess_user.md":"CtF7LPTD","backend_api_fcm_index.md":"C1RFK85u","backend_api_index.md":"B_yrViRy","backend_common-features_ai.md":"BRQrI7TP","backend_common-features_file.md":"CCiXlFRR","backend_common-features_logging.md":"ZTX85n5U","backend_common-features_mail.md":"DXC00TlV","backend_common-features_report.md":"cPNfjxvd","backend_common-features_security.md":"DWq4yIEZ","backend_common-features_sms.md":"imPFTBRU","backend_common-features_utilities.md":"BxORt-sQ","backend_configuration_application.md":"Dh540A7P","backend_configuration_datasource.md":"CPiWehhC","backend_configuration_maven.md":"DAlYtNz9","backend_configuration_redis.md":"Ct3v-dnm","backend_database_common-service.md":"BtAYe9Uw","backend_database_mapper-guide.md":"CAFR-vkr","backend_database_mybatis.md":"Br9emqCa","backend_deployment_build.md":"Bk9eyclu","backend_deployment_deploy.md":"D6SVBHfV","backend_development-guide_api-design.md":"SIFAK_Ka","backend_development-guide_authentication.md":"D0DsXVfT","backend_development-guide_new-module.md":"fslj_pZX","backend_development-guide_new-module_config.md":"Cid8TwJT","backend_development-guide_new-module_controller.md":"D-gbDROK","backend_development-guide_new-module_creation.md":"SNlZXEdG","backend_development-guide_new-module_mapper.md":"D1aJj8HV","backend_development-guide_new-module_service.md":"BTHxiCyT","backend_development-guide_swagger.md":"byg3AhzZ","backend_getting-started_overview.md":"DjJv41zD","backend_getting-started_project-structure.md":"jHFZIBS5","backend_getting-started_requirements.md":"Bnkqjzuk","backend_getting-started_setup.md":"Ce16FtvH","backend_index.md":"BIN4Uk7l","backend_project-structure_business.md":"CnSooWTi","backend_project-structure_directory.md":"DeenTXQD","backend_project-structure_framework.md":"DjVPDFTd","backend_project-structure_framework_ai.md":"CAABzOvA","backend_project-structure_framework_common.md":"Cyjv-RCo","backend_project-structure_framework_config.md":"CgqQNZgV","backend_project-structure_framework_file.md":"C12TzJ-b","backend_project-structure_framework_filter.md":"DjDiAHda","backend_project-structure_framework_mail.md":"DLT5Q1Ql","backend_project-structure_framework_report.md":"DFbr_Rrd","backend_project-structure_framework_sms.md":"BBDe9UYt","backend_project-structure_resources.md":"BPIkOSX_","backend_references_classes.md":"DUUjZFEH","backend_references_config-files.md":"DrGrssZy","backend_references_external-libs.md":"DE4b9sIk","backend_security_encryption.md":"B1wehdUb","backend_security_filters.md":"COEaoTgN","backend_security_jwt.md":"CJPdXRFu","backend_security_spring-security.md":"Ff87JO61","backend_tech-stack_databases.md":"BXDnpBTq","backend_tech-stack_documentation.md":"y8iWaTWY","backend_tech-stack_file-processing.md":"BLmB1Ntp","backend_tech-stack_frameworks.md":"Dn5pundH","backend_tech-stack_security.md":"CcSKL3mO","backend_tech-stack_utilities.md":"Z-r0wcQt","backend_testing_integration-test.md":"BdGuJWLN","backend_testing_unit-test.md":"CI4FWioR","backend_troubleshooting_common-issues.md":"C9wx1MZA","backend_troubleshooting_logging.md":"x3l4FLJA","components_common_button.md":"CyOMOjD3","components_common_input.md":"BX7gGsI0","components_common_loading.md":"BjmdaABH","components_common_lookup.md":"BWqFzC69","components_common_select.md":"B-SZvcoi","components_common_tree.md":"8NrcZDvr","components_grid_ag-grid.md":"B5SS5q6u","components_grid_click-field.md":"DkrGJw5l","components_grid_context-menu.md":"CKa96uPl","components_grid_multi-select.md":"BTRJod7F","components_layouts_blank.md":"CsB5kWRE","components_layouts_main.md":"CJsZl2y9","components_layouts_popup.md":"D2A3zeJ2","components_menu_bookmark.md":"BlLI12RA","components_menu_header-bar.md":"BMuVFIl-","components_menu_sidebar.md":"wxCDlckz","components_popup_approval-list.md":"BbuEAy1y","components_popup_approval.md":"BxSYsBcL","components_popup_file-link.md":"DRuWTYof","components_popup_log.md":"BBY2a3Xm","components_popup_page-log.md":"BxmU57MG","components_popup_sms-template.md":"ChogkW63","configuration_alias.md":"BIwbn7oL","configuration_build.md":"Bkkitnyy","configuration_env.md":"BrgGI6Qm","configuration_proxy.md":"D0fh2mvQ","configuration_vite.md":"CVZdAV63","core-features_auth_encryption.md":"z2IPYcWX","core-features_auth_jwt.md":"DR9TMJjM","core-features_auth_session.md":"DwRt4W6C","core-features_auth_token-refresh.md":"coajgGHN","core-features_http_axios-instance.md":"D2GgQPg3","core-features_http_error-handling.md":"C1FrHVpc","core-features_http_request-interceptor.md":"Brkz2pTh","core-features_http_response-interceptor.md":"Csu6AeAv","core-features_routing_dynamic.md":"DnOTBYSX","core-features_routing_guards.md":"B6mHRepH","core-features_routing_routes.md":"i8GS8F-7","core-features_stores_auth.md":"CIYsm40f","core-features_stores_loading.md":"BKLSrxp_","core-features_stores_log.md":"CIeJeCe4","core-features_stores_menu.md":"BsLR_2Z-","core-features_stores_modal.md":"C6xpqMfa","core-features_stores_others.md":"C-Sk3ViC","core-features_stores_session.md":"CpFVswX0","core-features_stores_sidebar.md":"BQumugrp","core-features_stores_tab.md":"BapC7rJA","deployment_deploy.md":"Bfht-wq3","deployment_dev-server.md":"DOjKBv7R","deployment_optimization.md":"Bb6ByP2i","deployment_production-build.md":"DhK3kycA","deployment_staging-build.md":"BqMLFd0c","development-guide_api_calling.md":"DBfyrd8k","development-guide_api_error-handling.md":"CarmXak_","development-guide_api_file.md":"CyZhnp4J","development-guide_api_request-response.md":"C_9lfdyZ","development-guide_conventions_file-structure.md":"JR2Dg672","development-guide_conventions_js-ts.md":"Cuu73fsu","development-guide_conventions_naming.md":"CN4SDtk_","development-guide_conventions_vue.md":"D5-SXw-6","development-guide_new-component_creation.md":"CnGLpXk-","development-guide_new-component_registration.md":"Dy3Xw8Ok","development-guide_new-component_usage.md":"DtCWn0eT","development-guide_new-page_creation.md":"Bja3AEsa","development-guide_new-page_menu.md":"BbuUV6AW","development-guide_new-page_route.md":"BDH6MRi7","development-guide_new-store_creation.md":"CvQUSGmo","development-guide_new-store_usage.md":"BbQ_8XUq","development-guide_styling_custom.md":"DYrXidHG","development-guide_styling_scss.md":"BDw24h8X","development-guide_styling_vuetify.md":"vID9uNnh","getting-started_overview.md":"De38ftLG","getting-started_project-structure.md":"BZGUsPTJ","getting-started_quick-start.md":"BnRQP6eH","getting-started_requirements.md":"CoPtAB8Z","getting-started_setup.md":"DK8D_N6J","index.md":"CV36ZjpW","markdown-examples.md":"BB1r4u9D","modules_axpframework_auth.md":"CKrkW9Md","modules_ess_persadm.md":"CysIkcX7","modules_fcm_erp.md":"BaTqiTS_","modules_geosan_bi.md":"BtHk0SqJ","project-structure_directory.md":"BTU5qbI1","project-structure_public.md":"BjWwKtwW","project-structure_scripts.md":"Cu2dub-4","project-structure_src.md":"B6--VhRV","project-structure_utils_common.md":"Cjijm0-H","project-structure_utils_lang.md":"D3ygRwKk","project-structure_utils_plugins.md":"B4iaTJBI","project-structure_utils_stores.md":"CAXVOPtt","project-structure_vendor.md":"CoaDo4cT","project-structure_views_axpframework.md":"Dm9l2md5","project-structure_views_ess.md":"Bky9Z1_w","project-structure_views_fcm.md":"BtECMXU9","project-structure_views_geosan.md":"MInucDlz","project-structure_views_ui.md":"COcOBemw","references_classes.md":"Dtb9OqfZ","references_config-files.md":"DDHMzl_7","references_external-libs.md":"CgeWtmbA","references_faq.md":"CExE0H3k","references_icons.md":"DuoobUKJ","tech-stack_axios.md":"DyXqs4Dv","tech-stack_charts.md":"DBQGpmtD","tech-stack_frameworks.md":"C4lVJKqg","tech-stack_grid.md":"CTaB_UdR","tech-stack_pinia.md":"CqczpNcB","tech-stack_router.md":"Onfe4Ent","tech-stack_utilities.md":"Dt4bFryL","tech-stack_vuetify.md":"BiSO6ll2","testing_component-test.md":"JuJ8goX2","testing_e2e-test.md":"BshYbzpB","testing_unit-test.md":"Cf1AIAU0","troubleshooting_api-issues.md":"ChjIgCp0","troubleshooting_auth-issues.md":"DXDQV8rg","troubleshooting_build-errors.md":"CvM-svAn","troubleshooting_common-issues.md":"DONM8Ynb","troubleshooting_runtime-errors.md":"Dm-pnwMq","utilities_array-object.md":"lZfzFbZP","utilities_common.md":"CsnLD4RH","utilities_crypto.md":"AIfSF4xW","utilities_date.md":"wG1ujv8-","utilities_excel.md":"BSmwE3P_","utilities_fcm.md":"D1SFz8Ed","utilities_file.md":"9j-Wbup5","utilities_indexeddb.md":"Cf1n7owb","utilities_number.md":"DD0Wkd8E","utilities_string.md":"_tmO6er_","utilities_validation.md":"BbnChQXV"} diff --git a/index.html b/index.html index a253790..221341b 100644 --- a/index.html +++ b/index.html @@ -6,19 +6,19 @@ AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

AXP Dev Docs

이 문서는 무엇인가요?

AXP 프론트엔드 프로젝트에서 공통 컴포넌트·유틸·상태 관리 패턴을 표준화해서
다른 개발자들이 빠르게 신규 화면/기능을 개발할 수 있도록 돕는 개발자용 가이드 문서입니다.

  • Vue 3 + Vite + Pinia + Vuetify 기반
  • 공통 SelectBox, Grid, Popup, Layout 등 재사용 컴포넌트 제공
  • CustomAxios, 공통 유틸, Pinia 스토어 등 프로젝트 전용 규칙 정리

처음 온 개발자를 위한 3단계

1. 프로젝트 전체 그림 이해하기

2. 로컬 개발 환경 구축하기

3. AXP 방식 개발 패턴 익히기


핵심 아키텍처 빠른 링크

AXP 프로젝트에서 반드시 알아야 하는 핵심 모듈들입니다.

상태 관리 (Pinia Stores)

프로젝트의 상태 관리는 Pinia를 사용합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

HTTP 통신 규약

모든 API 호출은 CustomAxios를 통해 이루어지며, 자동으로 토큰 관리, 암호화, 에러 처리가 됩니다.

인증 및 보안


UI 컴포넌트 사용 가이드

자주 쓰는 컴포넌트들은 아래 문서에서 상세 사용법과 예제를 제공합니다.

공통 컴포넌트

그리드 컴포넌트

팝업 컴포넌트

레이아웃 컴포넌트

  • 메인 레이아웃: Main.vue - 메인 애플리케이션 레이아웃
  • 블랭크 레이아웃: blank.vue - 인증 페이지 레이아웃
  • 팝업 레이아웃: popBlank.vue - 팝업 창 레이아웃

유틸리티 함수

프로젝트 전반에서 사용되는 공통 유틸리티 함수들입니다. 자동으로 임포트되므로 별도의 import 문 없이 바로 사용할 수 있습니다.


새 화면을 만들 때 추천 흐름

1. 페이지 생성

2. 데이터 통신 설계

3. UI 구성

4. 상태 관리

5. 스타일링


기술 스택

프로젝트에서 사용하는 주요 기술 스택에 대한 상세 정보입니다.


프로젝트 구조

프로젝트의 디렉토리 구조와 각 디렉토리의 역할을 이해합니다.


모듈별 가이드

각 비즈니스 모듈에 대한 가이드입니다.


환경 설정

개발 및 배포 환경 설정에 대한 정보입니다.


코딩 컨벤션

프로젝트에서 지켜야 할 코딩 규칙입니다.


테스트

프로젝트의 테스트 방법입니다.


빌드 및 배포

프로젝트 빌드 및 배포 방법입니다.


트러블슈팅

자주 발생하는 문제와 해결 방법입니다.


참고 자료

프로젝트 개발 시 참고할 수 있는 자료입니다.


빠른 참조

자주 사용하는 함수

javascript
// 빈 값 체크
+    
Skip to content

AXP Dev Docs

이 문서는 무엇인가요?

AXP 프론트엔드 프로젝트에서 공통 컴포넌트·유틸·상태 관리 패턴을 표준화해서
다른 개발자들이 빠르게 신규 화면/기능을 개발할 수 있도록 돕는 개발자용 가이드 문서입니다.

  • Vue 3 + Vite + Pinia + Vuetify 기반
  • 공통 SelectBox, Grid, Popup, Layout 등 재사용 컴포넌트 제공
  • CustomAxios, 공통 유틸, Pinia 스토어 등 프로젝트 전용 규칙 정리

처음 온 개발자를 위한 3단계

1. 프로젝트 전체 그림 이해하기

2. 로컬 개발 환경 구축하기

3. AXP 방식 개발 패턴 익히기


핵심 아키텍처 빠른 링크

AXP 프로젝트에서 반드시 알아야 하는 핵심 모듈들입니다.

상태 관리 (Pinia Stores)

프로젝트의 상태 관리는 Pinia를 사용합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

HTTP 통신 규약

모든 API 호출은 CustomAxios를 통해 이루어지며, 자동으로 토큰 관리, 암호화, 에러 처리가 됩니다.

인증 및 보안


UI 컴포넌트 사용 가이드

자주 쓰는 컴포넌트들은 아래 문서에서 상세 사용법과 예제를 제공합니다.

공통 컴포넌트

그리드 컴포넌트

팝업 컴포넌트

레이아웃 컴포넌트

  • 메인 레이아웃: Main.vue - 메인 애플리케이션 레이아웃
  • 블랭크 레이아웃: blank.vue - 인증 페이지 레이아웃
  • 팝업 레이아웃: popBlank.vue - 팝업 창 레이아웃

유틸리티 함수

프로젝트 전반에서 사용되는 공통 유틸리티 함수들입니다. 자동으로 임포트되므로 별도의 import 문 없이 바로 사용할 수 있습니다.


새 화면을 만들 때 추천 흐름

1. 페이지 생성

2. 데이터 통신 설계

3. UI 구성

4. 상태 관리

5. 스타일링


기술 스택

프로젝트에서 사용하는 주요 기술 스택에 대한 상세 정보입니다.


프로젝트 구조

프로젝트의 디렉토리 구조와 각 디렉토리의 역할을 이해합니다.


모듈별 가이드

각 비즈니스 모듈에 대한 가이드입니다.


환경 설정

개발 및 배포 환경 설정에 대한 정보입니다.


코딩 컨벤션

프로젝트에서 지켜야 할 코딩 규칙입니다.


테스트

프로젝트의 테스트 방법입니다.


빌드 및 배포

프로젝트 빌드 및 배포 방법입니다.


트러블슈팅

자주 발생하는 문제와 해결 방법입니다.


참고 자료

프로젝트 개발 시 참고할 수 있는 자료입니다.


빠른 참조

자주 사용하는 함수

javascript
// 빈 값 체크
 if (gfIsEmpty(value)) { /* ... */ }
 
 // null 처리
@@ -45,8 +45,8 @@
   }
 } catch (error) {
   // 에러 처리 (자동으로 처리됨)
-}

다음 단계

이제 프로젝트에 대한 기본적인 이해가 되셨다면:

  1. 빠른 시작 가이드로 첫 번째 페이지를 만들어보세요
  2. 개발 가이드에서 상세한 개발 방법을 확인하세요
  3. UI 컴포넌트 문서에서 컴포넌트 사용법을 익히세요

💡 : 문서를 검색하려면 브라우저의 Ctrl+F (또는 Cmd+F)를 사용하거나, VitePress의 검색 기능을 활용하세요.

- +}

다음 단계

이제 프로젝트에 대한 기본적인 이해가 되셨다면:

  1. 빠른 시작 가이드로 첫 번째 페이지를 만들어보세요
  2. 개발 가이드에서 상세한 개발 방법을 확인하세요
  3. UI 컴포넌트 문서에서 컴포넌트 사용법을 익히세요

💡 : 문서를 검색하려면 브라우저의 Ctrl+F (또는 Cmd+F)를 사용하거나, VitePress의 검색 기능을 활용하세요.

+ \ No newline at end of file diff --git a/markdown-examples.html b/markdown-examples.html index 19c1619..0bfc1ee 100644 --- a/markdown-examples.html +++ b/markdown-examples.html @@ -6,19 +6,19 @@ Markdown Extension Examples | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

md
```js{4}
+    
Skip to content

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

md
```js{4}
 export default {
   data () {
     return {
@@ -50,8 +50,8 @@
 
 ::: details
 This is a details block.
-:::

Output

INFO

This is an info box.

TIP

This is a tip.

WARNING

This is a warning.

DANGER

This is a dangerous warning.

Details

This is a details block.

More

Check out the documentation for the full list of markdown extensions.

- +:::

Output

INFO

This is an info box.

TIP

This is a tip.

WARNING

This is a warning.

DANGER

This is a dangerous warning.

Details

This is a details block.

More

Check out the documentation for the full list of markdown extensions.

+ \ No newline at end of file diff --git a/modules/axpframework/auth.html b/modules/axpframework/auth.html index 87ef7bc..a00949c 100644 --- a/modules/axpframework/auth.html +++ b/modules/axpframework/auth.html @@ -6,20 +6,20 @@ AXP Framework - 인증 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

AXP Framework - 인증 모듈

개요

AXP Framework의 인증 모듈입니다.

주요 페이지

Login.vue

일반 사용자 로그인 페이지입니다.

파일 위치: src/views/axpFramework/auth/Login.vue

주요 기능:

  • 사용자 로그인
  • JWT 토큰 발급
  • 세션 데이터 설정

AdminLogin.vue

관리자 로그인 페이지입니다.

파일 위치: src/views/axpFramework/auth/AdminLogin.vue

register.vue

회원가입 페이지입니다.

파일 위치: src/views/axpFramework/auth/register.vue

로그인 프로세스

  1. 사용자 인증 정보 입력
  2. 서버에 로그인 요청
  3. Access Token 및 세션 데이터 수신
  4. 토큰 및 세션 저장
  5. 메인 페이지로 이동

관련 문서

- +
Skip to content

AXP Framework - 인증 모듈

개요

AXP Framework의 인증 모듈입니다.

주요 페이지

Login.vue

일반 사용자 로그인 페이지입니다.

파일 위치: src/views/axpFramework/auth/Login.vue

주요 기능:

  • 사용자 로그인
  • JWT 토큰 발급
  • 세션 데이터 설정

AdminLogin.vue

관리자 로그인 페이지입니다.

파일 위치: src/views/axpFramework/auth/AdminLogin.vue

register.vue

회원가입 페이지입니다.

파일 위치: src/views/axpFramework/auth/register.vue

로그인 프로세스

  1. 사용자 인증 정보 입력
  2. 서버에 로그인 요청
  3. Access Token 및 세션 데이터 수신
  4. 토큰 및 세션 저장
  5. 메인 페이지로 이동

관련 문서

+ \ No newline at end of file diff --git a/modules/ess/persadm.html b/modules/ess/persadm.html index cf4a83d..59e5624 100644 --- a/modules/ess/persadm.html +++ b/modules/ess/persadm.html @@ -6,20 +6,20 @@ ESS 모듈 - 인사 관리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

ESS 모듈 - 인사 관리

개요

ESS 모듈의 인사 관리 기능입니다.

주요 페이지

PiMyPersonnelInformation.vue

본인 인사 정보 페이지입니다.

파일 위치: src/views/ess/persadm/PiMyPersonnelInformation.vue

PaAttendanceRequest.vue

근태 신청 및 조회 페이지입니다.

파일 위치: src/views/ess/persadm/PaAttendanceRequest.vue

PcBillReqHipass.vue

하이패스 청구 요청 페이지입니다.

파일 위치: src/views/ess/persadm/PcBillReqHipass.vue

PoOrganizationChart.vue

조직도 페이지입니다.

파일 위치: src/views/ess/persadm/PoOrganizationChart.vue

관련 스크립트

인사 관리 관련 비즈니스 로직은 src/script/ess/persadm/ 디렉토리에 있습니다.

- +
Skip to content

ESS 모듈 - 인사 관리

개요

ESS 모듈의 인사 관리 기능입니다.

주요 페이지

PiMyPersonnelInformation.vue

본인 인사 정보 페이지입니다.

파일 위치: src/views/ess/persadm/PiMyPersonnelInformation.vue

PaAttendanceRequest.vue

근태 신청 및 조회 페이지입니다.

파일 위치: src/views/ess/persadm/PaAttendanceRequest.vue

PcBillReqHipass.vue

하이패스 청구 요청 페이지입니다.

파일 위치: src/views/ess/persadm/PcBillReqHipass.vue

PoOrganizationChart.vue

조직도 페이지입니다.

파일 위치: src/views/ess/persadm/PoOrganizationChart.vue

관련 스크립트

인사 관리 관련 비즈니스 로직은 src/script/ess/persadm/ 디렉토리에 있습니다.

+ \ No newline at end of file diff --git a/modules/fcm/erp.html b/modules/fcm/erp.html index 59834c4..81b7e6a 100644 --- a/modules/fcm/erp.html +++ b/modules/fcm/erp.html @@ -6,20 +6,20 @@ FCM 모듈 - ERP 기능 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

FCM 모듈 - ERP 기능

개요

FCM 모듈의 ERP 기능입니다.

디렉토리 구조

src/views/fcm/erp/

주요 기능

재무 및 회계 관련 기능을 제공합니다.

- +
Skip to content

FCM 모듈 - ERP 기능

개요

FCM 모듈의 ERP 기능입니다.

디렉토리 구조

src/views/fcm/erp/

주요 기능

재무 및 회계 관련 기능을 제공합니다.

+ \ No newline at end of file diff --git a/modules/geosan/bi.html b/modules/geosan/bi.html index fb02769..bbb81c7 100644 --- a/modules/geosan/bi.html +++ b/modules/geosan/bi.html @@ -6,20 +6,20 @@ geosan 모듈 - BI 기능 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

geosan 모듈 - BI 기능

개요

geosan 모듈의 BI 기능입니다.

디렉토리 구조

src/views/geosan/BI/

주요 기능

Business Intelligence 관련 기능을 제공합니다.

- +
Skip to content

geosan 모듈 - BI 기능

개요

geosan 모듈의 BI 기능입니다.

디렉토리 구조

src/views/geosan/BI/

주요 기능

Business Intelligence 관련 기능을 제공합니다.

+ \ No newline at end of file diff --git a/project-structure/directory.html b/project-structure/directory.html index 778589a..f49b95f 100644 --- a/project-structure/directory.html +++ b/project-structure/directory.html @@ -6,19 +6,19 @@ 전체 디렉토리 구조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

전체 디렉토리 구조

프로젝트 루트 구조

vue_project/
+    
Skip to content

전체 디렉토리 구조

프로젝트 루트 구조

vue_project/
 ├── public/                    # 정적 리소스 (빌드 시 그대로 복사)
 ├── src/                       # 소스 코드
 ├── dist/                      # 빌드 결과물 (생성됨)
@@ -95,8 +95,8 @@
     ├── @user-interface/       # UI 컴포넌트
     └── assets/                # 리소스 파일

주요 디렉토리 설명

/src/script

비즈니스 로직을 담은 JavaScript 파일들이 위치합니다. 페이지 컴포넌트에서 공통으로 사용되는 로직을 분리하여 관리합니다.

/src/utils/common

프로젝트 전반에서 사용되는 공통 유틸리티 함수들이 위치합니다:

  • common.js: 문자열, 날짜, 숫자, 배열, 객체, 파일 처리 등
  • comfcm.js: FCM 관련 유틸리티

/src/utils/stores

Pinia 스토어 파일들이 위치합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

/src/utils/plugins

Vue 플러그인 설정 파일들이 위치합니다:

  • router/: 라우팅 설정
  • pinia.js: 상태 관리 설정
  • vuetify/: UI 프레임워크 설정
  • iconify/: 아이콘 설정

/src/views

비즈니스 로직에 해당하는 페이지 컴포넌트들이 위치합니다. 모듈별로 디렉토리가 구분되어 있습니다.

/src/vendor

외부 라이브러리와 템플릿 파일들이 위치합니다. 프로젝트의 기본 템플릿과 스타일이 포함되어 있습니다.

파일 명명 규칙

컴포넌트 파일

  • 형식: PascalCase
  • 예시: SelectBoxSQL.vue, MyNewPage.vue

유틸리티 파일

  • 형식: camelCase
  • 예시: common.js, authStore.js

상수 파일

  • 형식: UPPER_SNAKE_CASE
  • 예시: CONSTANTS.js

경로 별칭 (Alias)

프로젝트는 다음과 같은 경로 별칭을 사용합니다:

  • @/: src/ 디렉토리
  • @core/: src/vendor/@core
  • @layouts/: src/vendor/@layouts
  • @dashboard/: src/vendor/@dashboard
  • @images/: src/vendor/assets/images/
  • @styles/: src/vendor/assets/styles/

사용 예제

javascript
// 절대 경로 대신 별칭 사용
 import axiosInstance from '@/CustomAxios.js'
-import { useAuthStore } from '@/utils/stores/authStore.js'

다음 단계

디렉토리 구조를 이해했다면 다음 문서를 참고하세요:

- +import { useAuthStore } from '@/utils/stores/authStore.js'

다음 단계

디렉토리 구조를 이해했다면 다음 문서를 참고하세요:

+ \ No newline at end of file diff --git a/project-structure/public.html b/project-structure/public.html index f1a108b..3880421 100644 --- a/project-structure/public.html +++ b/project-structure/public.html @@ -6,19 +6,19 @@ public 디렉토리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

public 디렉토리

개요

public 디렉토리는 빌드 시 그대로 복사되는 정적 리소스 파일들이 위치합니다. 이 디렉토리의 파일들은 빌드 후 dist 디렉토리의 루트에 그대로 복사됩니다.

디렉토리 구조

public/
+    
Skip to content

public 디렉토리

개요

public 디렉토리는 빌드 시 그대로 복사되는 정적 리소스 파일들이 위치합니다. 이 디렉토리의 파일들은 빌드 후 dist 디렉토리의 루트에 그대로 복사됩니다.

디렉토리 구조

public/
 ├── custom-css/               # 커스텀 CSS 파일
 │   ├── custom-datepicker.css
 │   ├── custom-orgchart.css
@@ -42,8 +42,8 @@
 <template>
   <img :src="logoPath" alt="Logo" />
 </template>

CSS 파일 임포트

CSS 파일은 JavaScript/TypeScript 파일에서 직접 임포트할 수 있습니다:

javascript
import '/public/custom-css/custom.css'

또는 main.js에서 전역으로 임포트:

javascript
// main.js
-import '/public/custom-css/custom.css'

빌드 시 처리

Vite는 public 디렉토리의 파일을 빌드 시 dist 디렉토리로 복사합니다:

public/logo.png → dist/logo.png

파일 경로는 그대로 유지되므로, 코드에서 /logo.png로 참조하면 빌드 후에도 정상적으로 작동합니다.

주의사항

  1. 파일 크기: public 디렉토리의 파일은 빌드 최적화 대상이 아니므로, 큰 파일은 사용하지 않는 것이 좋습니다.

  2. 파일명 변경: public 디렉토리의 파일명을 변경하면 참조하는 모든 코드를 수정해야 합니다.

  3. 캐싱: 정적 리소스는 브라우저에 캐싱될 수 있으므로, 파일을 업데이트할 때는 파일명에 버전을 추가하거나 캐시 무효화 전략을 고려해야 합니다.

관련 문서

- +import '/public/custom-css/custom.css'

빌드 시 처리

Vite는 public 디렉토리의 파일을 빌드 시 dist 디렉토리로 복사합니다:

public/logo.png → dist/logo.png

파일 경로는 그대로 유지되므로, 코드에서 /logo.png로 참조하면 빌드 후에도 정상적으로 작동합니다.

주의사항

  1. 파일 크기: public 디렉토리의 파일은 빌드 최적화 대상이 아니므로, 큰 파일은 사용하지 않는 것이 좋습니다.

  2. 파일명 변경: public 디렉토리의 파일명을 변경하면 참조하는 모든 코드를 수정해야 합니다.

  3. 캐싱: 정적 리소스는 브라우저에 캐싱될 수 있으므로, 파일을 업데이트할 때는 파일명에 버전을 추가하거나 캐시 무효화 전략을 고려해야 합니다.

관련 문서

+ \ No newline at end of file diff --git a/project-structure/scripts.html b/project-structure/scripts.html index 3fa4235..baefea2 100644 --- a/project-structure/scripts.html +++ b/project-structure/scripts.html @@ -6,19 +6,19 @@ 스크립트 파일 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

스크립트 파일

개요

비즈니스 로직을 담은 JavaScript 파일들입니다.

파일 위치

src/script/

디렉토리 구조

src/script/
+    
Skip to content

스크립트 파일

개요

비즈니스 로직을 담은 JavaScript 파일들입니다.

파일 위치

src/script/

디렉토리 구조

src/script/
 ├── axpFramework/
 ├── ess/
 │   └── persadm/
@@ -29,8 +29,8 @@
 import { /* 함수들 */ } from '@/script/ess/persadm/PcBillReqHipass2.js'
 
 // 스크립트 함수 사용
-</script>
- +</script>
+ \ No newline at end of file diff --git a/project-structure/src.html b/project-structure/src.html index cb3399c..ee17e0f 100644 --- a/project-structure/src.html +++ b/project-structure/src.html @@ -6,19 +6,19 @@ src 디렉토리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

src 디렉토리

개요

src 디렉토리는 프로젝트의 모든 소스 코드가 위치하는 핵심 디렉토리입니다. Vue 3 애플리케이션의 메인 진입점과 모든 비즈니스 로직이 포함되어 있습니다.

디렉토리 구조

src/
+    
Skip to content

src 디렉토리

개요

src 디렉토리는 프로젝트의 모든 소스 코드가 위치하는 핵심 디렉토리입니다. Vue 3 애플리케이션의 메인 진입점과 모든 비즈니스 로직이 포함되어 있습니다.

디렉토리 구조

src/
 ├── App.vue                    # 루트 컴포넌트
 ├── main.js                    # 애플리케이션 진입점
 ├── CustomAxios.js            # Axios 인스턴스 및 인터셉터 설정
@@ -45,8 +45,8 @@
 const app = createApp(App)
 app.config.globalProperties.$axios = axiosInstance
 registerPlugins(app)
-app.mount('#app')

CustomAxios.js

Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다.

주요 기능:

  • JWT 토큰 자동 추가
  • 토큰 갱신 로직
  • 로딩 상태 관리
  • 에러 처리
  • 암호화/복호화 처리

디렉토리별 상세 설명

views/

페이지 레벨 컴포넌트가 위치합니다. 각 모듈별로 하위 디렉토리를 구성합니다.

  • axpFramework/: 인증, 메인 페이지 등 프레임워크 핵심 기능
  • ess/: Employee Self Service 관련 페이지
  • fcm/: FCM 모듈 관련 페이지
  • geosan/: geosan 모듈 관련 페이지
  • ui/: 공통 UI 컴포넌트 및 레이아웃

utils/

유틸리티 함수, 스토어, 플러그인 설정이 위치합니다.

  • stores/: Pinia 스토어 파일들
  • plugins/: Vue 플러그인 설정 (Vuetify, Router, Pinia 등)
  • lang/: 다국어 지원 설정
  • common/: 공통 유틸리티 함수

관련 문서

- +app.mount('#app')

CustomAxios.js

Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다.

주요 기능:

  • JWT 토큰 자동 추가
  • 토큰 갱신 로직
  • 로딩 상태 관리
  • 에러 처리
  • 암호화/복호화 처리

디렉토리별 상세 설명

views/

페이지 레벨 컴포넌트가 위치합니다. 각 모듈별로 하위 디렉토리를 구성합니다.

  • axpFramework/: 인증, 메인 페이지 등 프레임워크 핵심 기능
  • ess/: Employee Self Service 관련 페이지
  • fcm/: FCM 모듈 관련 페이지
  • geosan/: geosan 모듈 관련 페이지
  • ui/: 공통 UI 컴포넌트 및 레이아웃

utils/

유틸리티 함수, 스토어, 플러그인 설정이 위치합니다.

  • stores/: Pinia 스토어 파일들
  • plugins/: Vue 플러그인 설정 (Vuetify, Router, Pinia 등)
  • lang/: 다국어 지원 설정
  • common/: 공통 유틸리티 함수

관련 문서

+ \ No newline at end of file diff --git a/project-structure/utils/common.html b/project-structure/utils/common.html index d4d58fc..fa79273 100644 --- a/project-structure/utils/common.html +++ b/project-structure/utils/common.html @@ -6,20 +6,20 @@ 공통 유틸리티 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

공통 유틸리티

개요

프로젝트 전반에서 사용되는 공통 유틸리티 함수들입니다.

파일 위치

src/utils/common/

주요 파일

common.js

주요 유틸리티 함수들이 포함되어 있습니다:

  • 문자열 처리
  • 날짜/시간 처리
  • 숫자 처리
  • 배열/객체 처리
  • 파일 처리
  • 검증 함수

comfcm.js

FCM(Firebase Cloud Messaging) 관련 유틸리티입니다.

자동 임포트

이 파일의 함수들은 자동으로 임포트되므로 별도의 import 문이 필요 없습니다.

관련 문서

- +
Skip to content

공통 유틸리티

개요

프로젝트 전반에서 사용되는 공통 유틸리티 함수들입니다.

파일 위치

src/utils/common/

주요 파일

common.js

주요 유틸리티 함수들이 포함되어 있습니다:

  • 문자열 처리
  • 날짜/시간 처리
  • 숫자 처리
  • 배열/객체 처리
  • 파일 처리
  • 검증 함수

comfcm.js

FCM(Firebase Cloud Messaging) 관련 유틸리티입니다.

자동 임포트

이 파일의 함수들은 자동으로 임포트되므로 별도의 import 문이 필요 없습니다.

관련 문서

+ \ No newline at end of file diff --git a/project-structure/utils/lang.html b/project-structure/utils/lang.html index d52d64e..9405074 100644 --- a/project-structure/utils/lang.html +++ b/project-structure/utils/lang.html @@ -6,19 +6,19 @@ 언어 및 국제화 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

언어 및 국제화

개요

src/utils/lang/ 디렉토리는 다국어 지원 및 국제화(i18n) 관련 설정 파일이 위치합니다.

디렉토리 구조

src/utils/lang/
+    
Skip to content

언어 및 국제화

개요

src/utils/lang/ 디렉토리는 다국어 지원 및 국제화(i18n) 관련 설정 파일이 위치합니다.

디렉토리 구조

src/utils/lang/
 ├── i18n.js                   # Vue I18n 설정
 └── agGrid/                   # AG Grid 다국어 설정
     └── ko-KR.js              # AG Grid 한국어 로케일

주요 파일

i18n.js

Vue I18n 플러그인 설정 파일입니다.

주요 기능:

  • 다국어 메시지 정의 (한국어, 영어)
  • 숫자 형식 설정
  • 기본 언어 설정

지원 언어:

  • KOR: 한국어 (기본)
  • ENG: 영어

메시지 구조:

javascript
const messages = {
@@ -159,8 +159,8 @@
     :columnDefs="gridOptions.columnDefs"
     :rowData="gridOptions.rowData"
   />
-</template>

관련 문서

- +</template>

관련 문서

+ \ No newline at end of file diff --git a/project-structure/utils/plugins.html b/project-structure/utils/plugins.html index ea3facd..bfd1ace 100644 --- a/project-structure/utils/plugins.html +++ b/project-structure/utils/plugins.html @@ -6,19 +6,19 @@ 플러그인 설정 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

플러그인 설정

개요

src/utils/plugins/ 디렉토리는 Vue 애플리케이션에서 사용하는 플러그인들의 설정 파일이 위치합니다.

디렉토리 구조

src/utils/plugins/
+    
Skip to content

플러그인 설정

개요

src/utils/plugins/ 디렉토리는 Vue 애플리케이션에서 사용하는 플러그인들의 설정 파일이 위치합니다.

디렉토리 구조

src/utils/plugins/
 ├── iconify/                  # Iconify 아이콘 플러그인
 │   ├── build-icons.js
 │   ├── icons.css
@@ -109,8 +109,8 @@
 export function registerPlugins(app) {
   // ...
   custom(app)
-}

관련 문서

- +}

관련 문서

+ \ No newline at end of file diff --git a/project-structure/utils/stores.html b/project-structure/utils/stores.html index 55c1479..9935cdf 100644 --- a/project-structure/utils/stores.html +++ b/project-structure/utils/stores.html @@ -6,19 +6,19 @@ Pinia 스토어 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Pinia 스토어

개요

src/utils/stores/ 디렉토리는 Pinia를 사용한 상태 관리 스토어 파일들이 위치합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

디렉토리 구조

src/utils/stores/
+    
Skip to content

Pinia 스토어

개요

src/utils/stores/ 디렉토리는 Pinia를 사용한 상태 관리 스토어 파일들이 위치합니다. 각 스토어는 특정 도메인의 상태를 관리합니다.

디렉토리 구조

src/utils/stores/
 ├── authStore.js           # 인증 스토어
 ├── loadingStore.js        # 로딩 스토어
 ├── menuStore.js           # 메뉴 스토어
@@ -109,8 +109,8 @@
     getState,
     setState,
   }
-})

관련 문서

- +})

관련 문서

+ \ No newline at end of file diff --git a/project-structure/vendor.html b/project-structure/vendor.html index 3f7c939..40ab50d 100644 --- a/project-structure/vendor.html +++ b/project-structure/vendor.html @@ -6,19 +6,19 @@ 벤더 라이브러리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

벤더 라이브러리

개요

외부 라이브러리 및 템플릿 파일들이 위치합니다.

디렉토리 구조

src/vendor/
+    
Skip to content

벤더 라이브러리

개요

외부 라이브러리 및 템플릿 파일들이 위치합니다.

디렉토리 구조

src/vendor/
 ├── @core/              # 핵심 컴포넌트
 ├── @layouts/           # 레이아웃 컴포넌트
 ├── @dashboard/         # 대시보드 컴포넌트
@@ -28,8 +28,8 @@
     ├── css/            # CSS 파일
     ├── images/         # 이미지
     ├── fonts/          # 폰트
-    └── js/             # JavaScript 파일

주요 디렉토리

@core

프로젝트의 핵심 컴포넌트 및 스타일

@layouts

레이아웃 관련 컴포넌트

@dashboard

대시보드 컴포넌트

assets

이미지, 폰트, CSS 등 리소스 파일

- + └── js/ # JavaScript 파일

주요 디렉토리

@core

프로젝트의 핵심 컴포넌트 및 스타일

@layouts

레이아웃 관련 컴포넌트

@dashboard

대시보드 컴포넌트

assets

이미지, 폰트, CSS 등 리소스 파일

+ \ No newline at end of file diff --git a/project-structure/views/axpframework.html b/project-structure/views/axpframework.html index dc24544..674c3d9 100644 --- a/project-structure/views/axpframework.html +++ b/project-structure/views/axpframework.html @@ -6,19 +6,19 @@ axpFramework 모듈 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

axpFramework 모듈

개요

AXP Framework의 핵심 모듈입니다.

디렉토리 구조

src/views/axpFramework/
+    
Skip to content

axpFramework 모듈

개요

AXP Framework의 핵심 모듈입니다.

디렉토리 구조

src/views/axpFramework/
 ├── auth/          # 인증 관련 페이지
 │   ├── Login.vue
 │   ├── AdminLogin.vue
@@ -26,8 +26,8 @@
 └── main/          # 메인 페이지
     ├── Main.vue
     ├── Dashboard.vue
-    └── Dashboard_NEW.vue

주요 컴포넌트

Login.vue

일반 사용자 로그인 페이지입니다.

AdminLogin.vue

관리자 로그인 페이지입니다.

Main.vue

메인 애플리케이션 레이아웃입니다.

Dashboard.vue

대시보드 페이지입니다.

- + └── Dashboard_NEW.vue

주요 컴포넌트

Login.vue

일반 사용자 로그인 페이지입니다.

AdminLogin.vue

관리자 로그인 페이지입니다.

Main.vue

메인 애플리케이션 레이아웃입니다.

Dashboard.vue

대시보드 페이지입니다.

+ \ No newline at end of file diff --git a/project-structure/views/ess.html b/project-structure/views/ess.html index 0308d6b..b45c7e8 100644 --- a/project-structure/views/ess.html +++ b/project-structure/views/ess.html @@ -6,19 +6,19 @@ ESS 모듈 뷰 컴포넌트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

ESS 모듈 뷰 컴포넌트

개요

ESS(Employee Self Service) 모듈은 직원이 직접 사용하는 자가 서비스 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/ess/
+    
Skip to content

ESS 모듈 뷰 컴포넌트

개요

ESS(Employee Self Service) 모듈은 직원이 직접 사용하는 자가 서비스 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/ess/
 ├── admin/                     # 관리자 기능
 │   ├── AdminTest.vue
 │   └── AsSMSManagement.vue    # SMS 관리
@@ -95,8 +95,8 @@
 // 세션 값 가져오기
 const compCode = sessionStore.getSessionValue('CompCode')
 const empCode = sessionStore.getSessionValue('EmpCode')
-const langID = sessionStore.getSessionValue('LangID')

관련 문서

- +const langID = sessionStore.getSessionValue('LangID')

관련 문서

+ \ No newline at end of file diff --git a/project-structure/views/fcm.html b/project-structure/views/fcm.html index f642ff5..1b31417 100644 --- a/project-structure/views/fcm.html +++ b/project-structure/views/fcm.html @@ -6,19 +6,19 @@ FCM 모듈 뷰 컴포넌트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

FCM 모듈 뷰 컴포넌트

개요

FCM 모듈은 재무 및 회계 관련 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/fcm/
+    
Skip to content

FCM 모듈 뷰 컴포넌트

개요

FCM 모듈은 재무 및 회계 관련 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/fcm/
 ├── erp/                       # ERP 관련 기능
 │   └── sys/                   # 시스템 관리
 │       ├── sys1200.vue
@@ -93,8 +93,8 @@
 const onGridReady = (params) => {
   gridApi = params.api
 }
-</script>

관련 문서

- +</script>

관련 문서

+ \ No newline at end of file diff --git a/project-structure/views/geosan.html b/project-structure/views/geosan.html index 8d3fdf6..2344107 100644 --- a/project-structure/views/geosan.html +++ b/project-structure/views/geosan.html @@ -6,19 +6,19 @@ geosan 모듈 뷰 컴포넌트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

geosan 모듈 뷰 컴포넌트

개요

geosan 모듈은 비즈니스 인텔리전스(BI) 관련 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/geosan/
+    
Skip to content

geosan 모듈 뷰 컴포넌트

개요

geosan 모듈은 비즈니스 인텔리전스(BI) 관련 기능을 제공하는 뷰 컴포넌트들입니다.

디렉토리 구조

src/views/geosan/
 └── BI/                        # 비즈니스 인텔리전스
     └── Customer/              # 고객 관리
         ├── CustomerGrpList.vue        # 고객 그룹 목록
@@ -85,8 +85,8 @@
     @grid-ready="onGridReady"
     @row-clicked="onRowClicked"
   />
-</template>

관련 문서

- +</template>

관련 문서

+ \ No newline at end of file diff --git a/project-structure/views/ui.html b/project-structure/views/ui.html index c5b0836..e1225fd 100644 --- a/project-structure/views/ui.html +++ b/project-structure/views/ui.html @@ -6,19 +6,19 @@ UI 컴포넌트 및 레이아웃 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

UI 컴포넌트 및 레이아웃

개요

src/views/ui/ 디렉토리는 프로젝트 전반에서 사용되는 공통 UI 컴포넌트와 레이아웃 컴포넌트를 포함합니다.

디렉토리 구조

src/views/ui/
+    
Skip to content

UI 컴포넌트 및 레이아웃

개요

src/views/ui/ 디렉토리는 프로젝트 전반에서 사용되는 공통 UI 컴포넌트와 레이아웃 컴포넌트를 포함합니다.

디렉토리 구조

src/views/ui/
 ├── components/                # 공통 컴포넌트
 │   ├── common/               # 기본 컴포넌트
 │   │   ├── button/
@@ -122,8 +122,8 @@
     V_P_AC_EMP_CODE: empCode,
     V_P_AC_MENU_NAME: '',
   }
-}

PopupSmsTemplateList.vue

SMS 템플릿 목록 팝업 컴포넌트입니다.

주요 기능:

  • SMS 템플릿 목록 조회
  • 템플릿 선택

레이아웃 컴포넌트 (layouts)

blank.vue

빈 레이아웃입니다. 로그인 페이지 등에서 사용됩니다.

주요 특징:

  • 최소한의 레이아웃
  • 헤더/푸터 없음

default.vue

기본 레이아웃입니다. 대부분의 페이지에서 사용됩니다.

주요 특징:

  • 사이드바 메뉴
  • 헤더바
  • 탭 기능
  • 컨텐츠 영역

popBlank.vue

팝업 레이아웃입니다. 팝업 창에서 사용됩니다.

주요 특징:

  • 팝업 전용 레이아웃
  • 모달 스타일

관련 문서

- +}

PopupSmsTemplateList.vue

SMS 템플릿 목록 팝업 컴포넌트입니다.

주요 기능:

  • SMS 템플릿 목록 조회
  • 템플릿 선택

레이아웃 컴포넌트 (layouts)

blank.vue

빈 레이아웃입니다. 로그인 페이지 등에서 사용됩니다.

주요 특징:

  • 최소한의 레이아웃
  • 헤더/푸터 없음

default.vue

기본 레이아웃입니다. 대부분의 페이지에서 사용됩니다.

주요 특징:

  • 사이드바 메뉴
  • 헤더바
  • 탭 기능
  • 컨텐츠 영역

popBlank.vue

팝업 레이아웃입니다. 팝업 창에서 사용됩니다.

주요 특징:

  • 팝업 전용 레이아웃
  • 모달 스타일

관련 문서

+ \ No newline at end of file diff --git a/references/classes.html b/references/classes.html index d59b400..2d19587 100644 --- a/references/classes.html +++ b/references/classes.html @@ -6,20 +6,20 @@ 주요 클래스/함수 참조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

주요 클래스/함수 참조

유틸리티 함수

  • gfIsEmpty(): 빈 값 체크
  • gfNvl(): null/undefined 처리
  • gfFormatDateString(): 날짜 포맷팅
  • gfNumberFormat(): 숫자 포맷팅

자세한 내용은 공통 유틸리티 문서를 참고하세요.

스토어

  • useAuthStore(): 인증 스토어
  • useLoadingStore(): 로딩 스토어
  • useMenuStore(): 메뉴 스토어
  • useSessionStore(): 세션 스토어

자세한 내용은 핵심 기능 - 상태 관리 문서를 참고하세요.

API 호출

  • axiosInstance: Axios 인스턴스

자세한 내용은 HTTP 통신 문서를 참고하세요.

- +
Skip to content

주요 클래스/함수 참조

유틸리티 함수

  • gfIsEmpty(): 빈 값 체크
  • gfNvl(): null/undefined 처리
  • gfFormatDateString(): 날짜 포맷팅
  • gfNumberFormat(): 숫자 포맷팅

자세한 내용은 공통 유틸리티 문서를 참고하세요.

스토어

  • useAuthStore(): 인증 스토어
  • useLoadingStore(): 로딩 스토어
  • useMenuStore(): 메뉴 스토어
  • useSessionStore(): 세션 스토어

자세한 내용은 핵심 기능 - 상태 관리 문서를 참고하세요.

API 호출

  • axiosInstance: Axios 인스턴스

자세한 내용은 HTTP 통신 문서를 참고하세요.

+ \ No newline at end of file diff --git a/references/config-files.html b/references/config-files.html index 52a3c19..85d5008 100644 --- a/references/config-files.html +++ b/references/config-files.html @@ -6,20 +6,20 @@ 설정 파일 참조 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

설정 파일 참조

주요 설정 파일

package.json

프로젝트 메타데이터, 의존성, 스크립트 정의

vite.config.js

Vite 빌드 도구 설정

.env

환경 변수 설정

jsconfig.json

JavaScript 프로젝트 설정

플러그인 설정

router/routes.js

라우트 정의

pinia.js

Pinia 설정

vuetify/index.js

Vuetify 설정

- +
Skip to content

설정 파일 참조

주요 설정 파일

package.json

프로젝트 메타데이터, 의존성, 스크립트 정의

vite.config.js

Vite 빌드 도구 설정

.env

환경 변수 설정

jsconfig.json

JavaScript 프로젝트 설정

플러그인 설정

router/routes.js

라우트 정의

pinia.js

Pinia 설정

vuetify/index.js

Vuetify 설정

+ \ No newline at end of file diff --git a/references/external-libs.html b/references/external-libs.html index 6a8e45b..7bcf5ec 100644 --- a/references/external-libs.html +++ b/references/external-libs.html @@ -6,20 +6,20 @@ 외부 라이브러리 문서 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

외부 라이브러리 문서

Vue 3

Vite

Pinia

Vuetify

Vue Router

AG Grid

Axios

- +
Skip to content

외부 라이브러리 문서

Vue 3

Vite

Pinia

Vuetify

Vue Router

AG Grid

Axios

+ \ No newline at end of file diff --git a/references/faq.html b/references/faq.html index 5e79668..ad98a22 100644 --- a/references/faq.html +++ b/references/faq.html @@ -6,20 +6,20 @@ 자주 묻는 질문 (FAQ) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

자주 묻는 질문 (FAQ)

Q: 자동 임포트가 작동하지 않아요

A: 개발 서버를 재시작하고, src/auto-imports.d.ts 파일이 생성되었는지 확인하세요.

Q: 컴포넌트를 찾을 수 없어요

A: 컴포넌트가 src/views/ui/components/ 디렉토리에 있는지 확인하고, src/components.d.ts 파일을 확인하세요.

Q: API 호출 시 401 에러가 발생해요

A: 토큰이 만료되었을 수 있습니다. 자동으로 갱신되지만, 실패 시 로그인 페이지로 이동합니다.

Q: 환경 변수가 적용되지 않아요

A: 환경 변수명이 VITE_로 시작하는지 확인하고, 개발 서버를 재시작하세요.

Q: 빌드가 실패해요

A: 타입 오류나 ESLint 오류를 확인하고, 의존성 버전을 확인하세요.

- +
Skip to content

자주 묻는 질문 (FAQ)

Q: 자동 임포트가 작동하지 않아요

A: 개발 서버를 재시작하고, src/auto-imports.d.ts 파일이 생성되었는지 확인하세요.

Q: 컴포넌트를 찾을 수 없어요

A: 컴포넌트가 src/views/ui/components/ 디렉토리에 있는지 확인하고, src/components.d.ts 파일을 확인하세요.

Q: API 호출 시 401 에러가 발생해요

A: 토큰이 만료되었을 수 있습니다. 자동으로 갱신되지만, 실패 시 로그인 페이지로 이동합니다.

Q: 환경 변수가 적용되지 않아요

A: 환경 변수명이 VITE_로 시작하는지 확인하고, 개발 서버를 재시작하세요.

Q: 빌드가 실패해요

A: 타입 오류나 ESLint 오류를 확인하고, 의존성 버전을 확인하세요.

+ \ No newline at end of file diff --git a/references/icons.html b/references/icons.html index b4de063..a1f9683 100644 --- a/references/icons.html +++ b/references/icons.html @@ -6,23 +6,23 @@ 아이콘 사용법 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

아이콘 사용법

Iconify

프로젝트는 Iconify를 사용하여 아이콘을 관리합니다.

사용 예제

vue
<template>
+    
Skip to content

아이콘 사용법

Iconify

프로젝트는 Iconify를 사용하여 아이콘을 관리합니다.

사용 예제

vue
<template>
   <v-icon icon="ri-search-line" />
   <v-icon icon="mdi-home" />
-</template>

아이콘 빌드

아이콘을 추가하거나 변경한 경우:

bash
npm run build:icons

아이콘 라이브러리

  • Remix Icon (ri-*)
  • Material Design Icons (mdi-*)
- +</template>

아이콘 빌드

아이콘을 추가하거나 변경한 경우:

bash
npm run build:icons

아이콘 라이브러리

  • Remix Icon (ri-*)
  • Material Design Icons (mdi-*)
+ \ No newline at end of file diff --git a/tech-stack/axios.html b/tech-stack/axios.html index 1ae10e2..de62020 100644 --- a/tech-stack/axios.html +++ b/tech-stack/axios.html @@ -6,22 +6,22 @@ HTTP 클라이언트 (Axios) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

HTTP 클라이언트 (Axios)

개요

Axios 1.9.0을 사용하여 HTTP 통신을 처리합니다.

커스텀 인스턴스

src/CustomAxios.js에서 Axios 인스턴스를 생성하고 설정합니다.

주요 기능

  • JWT 토큰 자동 추가
  • 토큰 갱신 자동 처리
  • 요청/응답 암호화/복호화
  • 에러 처리

사용법

javascript
import axiosInstance from '@/CustomAxios.js'
+    
Skip to content

HTTP 클라이언트 (Axios)

개요

Axios 1.9.0을 사용하여 HTTP 통신을 처리합니다.

커스텀 인스턴스

src/CustomAxios.js에서 Axios 인스턴스를 생성하고 설정합니다.

주요 기능

  • JWT 토큰 자동 추가
  • 토큰 갱신 자동 처리
  • 요청/응답 암호화/복호화
  • 에러 처리

사용법

javascript
import axiosInstance from '@/CustomAxios.js'
 
-const response = await axiosInstance.post('/api/endpoint', params)
- +const response = await axiosInstance.post('/api/endpoint', params)
+ \ No newline at end of file diff --git a/tech-stack/charts.html b/tech-stack/charts.html index de52c49..7ab0172 100644 --- a/tech-stack/charts.html +++ b/tech-stack/charts.html @@ -6,20 +6,20 @@ 차트 라이브러리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

차트 라이브러리

ApexCharts

  • 버전: 3.54.1
  • Vue 래퍼: vue3-apexcharts 1.5.2

ECharts

  • 버전: 5.6.0
  • Vue 래퍼: vue-echarts 7.0.3

사용 목적

다양한 형태의 차트를 표시하기 위해 두 가지 라이브러리를 모두 사용합니다.

- +
Skip to content

차트 라이브러리

ApexCharts

  • 버전: 3.54.1
  • Vue 래퍼: vue3-apexcharts 1.5.2

ECharts

  • 버전: 5.6.0
  • Vue 래퍼: vue-echarts 7.0.3

사용 목적

다양한 형태의 차트를 표시하기 위해 두 가지 라이브러리를 모두 사용합니다.

+ \ No newline at end of file diff --git a/tech-stack/frameworks.html b/tech-stack/frameworks.html index ef4fb29..ab040e5 100644 --- a/tech-stack/frameworks.html +++ b/tech-stack/frameworks.html @@ -6,19 +6,19 @@ 프레임워크 및 라이브러리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

프레임워크 및 라이브러리

Vue 3

버전

  • Vue: 3.5.13
  • Composition API: 사용 중

주요 특징

이 프로젝트는 Vue 3의 Composition API를 사용합니다. <script setup> 문법을 통해 더 간결하고 효율적인 코드를 작성할 수 있습니다.

사용 예제

vue
<template>
+    
Skip to content

프레임워크 및 라이브러리

Vue 3

버전

  • Vue: 3.5.13
  • Composition API: 사용 중

주요 특징

이 프로젝트는 Vue 3의 Composition API를 사용합니다. <script setup> 문법을 통해 더 간결하고 효율적인 코드를 작성할 수 있습니다.

사용 예제

vue
<template>
   <div>
     <h1>{{ title }}</h1>
     <button @click="increment">카운트: {{ count }}</button>
@@ -54,8 +54,8 @@
     storage: localStorage,
     paths: ['data'],
   },
-})

Vue Router

버전

  • Vue Router: 4.5.0

라우팅 구조

라우트는 src/utils/plugins/router/routes.js에 정의되어 있으며, 동적 라우팅을 지원합니다.

라우트 가드

router.beforeEach를 통해 라우트 전환 전 인증 확인 등의 작업을 수행합니다.

Axios

버전

  • Axios: 1.9.0

커스텀 인스턴스

src/CustomAxios.js에서 Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다.

주요 기능

  • JWT 토큰 자동 추가
  • 토큰 갱신 자동 처리
  • 요청/응답 암호화/복호화
  • 에러 처리

AG Grid

버전

  • ag-grid-community: 33.3.2
  • ag-grid-vue3: 33.3.2

사용 목적

대용량 데이터를 효율적으로 표시하기 위한 그리드 컴포넌트입니다.

주요 기능

  • 정렬, 필터링, 페이징
  • 셀 편집
  • 행 선택
  • 컨텍스트 메뉴

차트 라이브러리

ApexCharts

  • 버전: 3.54.1
  • vue3-apexcharts: 1.5.2

ECharts

  • 버전: 5.6.0
  • vue-echarts: 7.0.3

사용 목적

다양한 형태의 차트를 표시하기 위해 두 가지 라이브러리를 모두 사용합니다.

Excel 처리

ExcelJS

  • 버전: 4.4.0

사용 목적

Excel 파일의 읽기, 쓰기, 수정 기능을 제공합니다.

암호화

CryptoJS

  • 버전: 4.2.0

사용 목적

데이터 암호화/복호화를 위해 사용됩니다. 주로 API 요청/응답 데이터의 암호화에 사용됩니다.

기타 주요 라이브러리

파일 처리

  • file-saver: 2.0.5 - 파일 다운로드

PDF 처리

  • pdfjs-dist: 5.4.149 - PDF 렌더링
  • vue-pdf-embed: 2.1.3 - Vue PDF 컴포넌트

날짜 처리

  • vue-flatpickr-component: 11.0.5 - 날짜 선택기

드래그 앤 드롭

  • vuedraggable: 4.1.0 - 드래그 앤 드롭 기능

트리 뷰

  • vue3-tree-vue: 2.0.14 - 트리 구조 표시

다음 단계

각 기술 스택에 대한 상세한 사용법은 다음 문서를 참고하세요:

- +})

Vue Router

버전

  • Vue Router: 4.5.0

라우팅 구조

라우트는 src/utils/plugins/router/routes.js에 정의되어 있으며, 동적 라우팅을 지원합니다.

라우트 가드

router.beforeEach를 통해 라우트 전환 전 인증 확인 등의 작업을 수행합니다.

Axios

버전

  • Axios: 1.9.0

커스텀 인스턴스

src/CustomAxios.js에서 Axios 인스턴스를 생성하고 요청/응답 인터셉터를 설정합니다.

주요 기능

  • JWT 토큰 자동 추가
  • 토큰 갱신 자동 처리
  • 요청/응답 암호화/복호화
  • 에러 처리

AG Grid

버전

  • ag-grid-community: 33.3.2
  • ag-grid-vue3: 33.3.2

사용 목적

대용량 데이터를 효율적으로 표시하기 위한 그리드 컴포넌트입니다.

주요 기능

  • 정렬, 필터링, 페이징
  • 셀 편집
  • 행 선택
  • 컨텍스트 메뉴

차트 라이브러리

ApexCharts

  • 버전: 3.54.1
  • vue3-apexcharts: 1.5.2

ECharts

  • 버전: 5.6.0
  • vue-echarts: 7.0.3

사용 목적

다양한 형태의 차트를 표시하기 위해 두 가지 라이브러리를 모두 사용합니다.

Excel 처리

ExcelJS

  • 버전: 4.4.0

사용 목적

Excel 파일의 읽기, 쓰기, 수정 기능을 제공합니다.

암호화

CryptoJS

  • 버전: 4.2.0

사용 목적

데이터 암호화/복호화를 위해 사용됩니다. 주로 API 요청/응답 데이터의 암호화에 사용됩니다.

기타 주요 라이브러리

파일 처리

  • file-saver: 2.0.5 - 파일 다운로드

PDF 처리

  • pdfjs-dist: 5.4.149 - PDF 렌더링
  • vue-pdf-embed: 2.1.3 - Vue PDF 컴포넌트

날짜 처리

  • vue-flatpickr-component: 11.0.5 - 날짜 선택기

드래그 앤 드롭

  • vuedraggable: 4.1.0 - 드래그 앤 드롭 기능

트리 뷰

  • vue3-tree-vue: 2.0.14 - 트리 구조 표시

다음 단계

각 기술 스택에 대한 상세한 사용법은 다음 문서를 참고하세요:

+ \ No newline at end of file diff --git a/tech-stack/grid.html b/tech-stack/grid.html index ab3cefd..e12f6f7 100644 --- a/tech-stack/grid.html +++ b/tech-stack/grid.html @@ -6,19 +6,19 @@ 그리드 라이브러리 (AG Grid) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

그리드 라이브러리 (AG Grid)

개요

AG Grid 33.3.2를 사용하여 데이터 그리드를 구현합니다.

주요 기능

  • 정렬, 필터링, 페이징
  • 셀 편집
  • 행 선택
  • 컨텍스트 메뉴

사용 예제

vue
<template>
+    
Skip to content

그리드 라이브러리 (AG Grid)

개요

AG Grid 33.3.2를 사용하여 데이터 그리드를 구현합니다.

주요 기능

  • 정렬, 필터링, 페이징
  • 셀 편집
  • 행 선택
  • 컨텍스트 메뉴

사용 예제

vue
<template>
   <AgGridVue
     :columnDefs="columnDefs"
     :rowData="rowData"
@@ -37,8 +37,8 @@
 const rowData = ref([
   { id: 1, name: '홍길동' },
 ])
-</script>
- +</script>
+ \ No newline at end of file diff --git a/tech-stack/pinia.html b/tech-stack/pinia.html index e9a2098..653acc4 100644 --- a/tech-stack/pinia.html +++ b/tech-stack/pinia.html @@ -6,22 +6,22 @@ 상태 관리 (Pinia) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

상태 관리 (Pinia)

개요

프로젝트는 Pinia를 사용하여 상태를 관리합니다.

주요 스토어

  • authStore: 인증 상태
  • loadingStore: 로딩 상태
  • menuStore: 메뉴 정보
  • sessionStore: 세션 데이터
  • modalStore: 모달 상태
  • tabStore: 탭 상태

사용법

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
+    
Skip to content

상태 관리 (Pinia)

개요

프로젝트는 Pinia를 사용하여 상태를 관리합니다.

주요 스토어

  • authStore: 인증 상태
  • loadingStore: 로딩 상태
  • menuStore: 메뉴 정보
  • sessionStore: 세션 데이터
  • modalStore: 모달 상태
  • tabStore: 탭 상태

사용법

javascript
import { useAuthStore } from '@/utils/stores/authStore.js'
 
-const authStore = useAuthStore()

상태 영속화

pinia-plugin-persistedstate를 사용하여 상태를 localStorage에 저장합니다.

- +const authStore = useAuthStore()

상태 영속화

pinia-plugin-persistedstate를 사용하여 상태를 localStorage에 저장합니다.

+ \ No newline at end of file diff --git a/tech-stack/router.html b/tech-stack/router.html index af7790c..a058142 100644 --- a/tech-stack/router.html +++ b/tech-stack/router.html @@ -6,20 +6,20 @@ 라우팅 (Vue Router) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

라우팅 (Vue Router)

개요

Vue Router 4.5.0을 사용하여 라우팅을 관리합니다.

라우트 정의

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

동적 라우팅

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다.

라우트 가드

router.beforeEach를 통해 라우트 전환 전 인증 확인 등을 수행합니다.

- +
Skip to content

라우팅 (Vue Router)

개요

Vue Router 4.5.0을 사용하여 라우팅을 관리합니다.

라우트 정의

라우트는 src/utils/plugins/router/routes.js에 정의됩니다.

동적 라우팅

메뉴 시스템을 통해 동적으로 라우트가 등록됩니다.

라우트 가드

router.beforeEach를 통해 라우트 전환 전 인증 확인 등을 수행합니다.

+ \ No newline at end of file diff --git a/tech-stack/utilities.html b/tech-stack/utilities.html index fc79288..8f2ca33 100644 --- a/tech-stack/utilities.html +++ b/tech-stack/utilities.html @@ -6,20 +6,20 @@ 기타 유틸리티 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

기타 유틸리티

Excel 처리

  • ExcelJS: 4.4.0
  • Excel 파일 읽기, 쓰기, 수정

암호화

  • CryptoJS: 4.2.0
  • 데이터 암호화/복호화

파일 처리

  • file-saver: 2.0.5
  • 파일 다운로드

PDF 처리

  • pdfjs-dist: 5.4.149
  • vue-pdf-embed: 2.1.3
  • PDF 렌더링

날짜 처리

  • vue-flatpickr-component: 11.0.5
  • 날짜 선택기

드래그 앤 드롭

  • vuedraggable: 4.1.0
  • 드래그 앤 드롭 기능

트리 뷰

  • vue3-tree-vue: 2.0.14
  • 트리 구조 표시
- +
Skip to content

기타 유틸리티

Excel 처리

  • ExcelJS: 4.4.0
  • Excel 파일 읽기, 쓰기, 수정

암호화

  • CryptoJS: 4.2.0
  • 데이터 암호화/복호화

파일 처리

  • file-saver: 2.0.5
  • 파일 다운로드

PDF 처리

  • pdfjs-dist: 5.4.149
  • vue-pdf-embed: 2.1.3
  • PDF 렌더링

날짜 처리

  • vue-flatpickr-component: 11.0.5
  • 날짜 선택기

드래그 앤 드롭

  • vuedraggable: 4.1.0
  • 드래그 앤 드롭 기능

트리 뷰

  • vue3-tree-vue: 2.0.14
  • 트리 구조 표시
+ \ No newline at end of file diff --git a/tech-stack/vuetify.html b/tech-stack/vuetify.html index d58788b..c633d2c 100644 --- a/tech-stack/vuetify.html +++ b/tech-stack/vuetify.html @@ -6,20 +6,20 @@ UI 프레임워크 (Vuetify) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

UI 프레임워크 (Vuetify)

개요

프로젝트는 Vuetify 3.7.5를 UI 프레임워크로 사용합니다.

주요 컴포넌트

  • v-card: 카드
  • v-btn: 버튼
  • v-text-field: 텍스트 입력
  • v-select: 선택
  • v-data-table: 테이블

테마

기본 테마는 'light'이며, 'dark' 테마도 지원합니다.

로케일

한국어(ko) 로케일이 기본으로 설정되어 있습니다.

- +
Skip to content

UI 프레임워크 (Vuetify)

개요

프로젝트는 Vuetify 3.7.5를 UI 프레임워크로 사용합니다.

주요 컴포넌트

  • v-card: 카드
  • v-btn: 버튼
  • v-text-field: 텍스트 입력
  • v-select: 선택
  • v-data-table: 테이블

테마

기본 테마는 'light'이며, 'dark' 테마도 지원합니다.

로케일

한국어(ko) 로케일이 기본으로 설정되어 있습니다.

+ \ No newline at end of file diff --git a/testing/component-test.html b/testing/component-test.html index a3a9fc7..7dc0ad5 100644 --- a/testing/component-test.html +++ b/testing/component-test.html @@ -6,19 +6,19 @@ 컴포넌트 테스트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

컴포넌트 테스트

개요

Vue 컴포넌트 테스트 가이드입니다.

테스트 예제

javascript
import { mount } from '@vue/test-utils'
+    
Skip to content

컴포넌트 테스트

개요

Vue 컴포넌트 테스트 가이드입니다.

테스트 예제

javascript
import { mount } from '@vue/test-utils'
 import MyComponent from '@/views/MyComponent.vue'
 
 describe('MyComponent', () => {
@@ -45,8 +45,8 @@
     const wrapper = mount(MyComponent)
     // 스토어 사용 테스트
   })
-})
- +})
+ \ No newline at end of file diff --git a/testing/e2e-test.html b/testing/e2e-test.html index 6675f1b..fe5313f 100644 --- a/testing/e2e-test.html +++ b/testing/e2e-test.html @@ -6,19 +6,19 @@ E2E 테스트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

E2E 테스트

개요

End-to-End 테스트 가이드입니다.

테스트 프레임워크

권장 E2E 테스트 프레임워크:

  • Playwright
  • Cypress

테스트 예제

javascript
import { test, expect } from '@playwright/test'
+    
Skip to content

E2E 테스트

개요

End-to-End 테스트 가이드입니다.

테스트 프레임워크

권장 E2E 테스트 프레임워크:

  • Playwright
  • Cypress

테스트 예제

javascript
import { test, expect } from '@playwright/test'
 
 test('should login successfully', async ({ page }) => {
   await page.goto('http://localhost:5173')
@@ -26,8 +26,8 @@
   await page.fill('#password', 'password')
   await page.click('button[type="submit"]')
   await expect(page).toHaveURL(/.*Main/)
-})

테스트 실행

bash
npm run test:e2e
- +})

테스트 실행

bash
npm run test:e2e
+ \ No newline at end of file diff --git a/testing/unit-test.html b/testing/unit-test.html index fb7a27d..4a13ab0 100644 --- a/testing/unit-test.html +++ b/testing/unit-test.html @@ -6,19 +6,19 @@ 단위 테스트 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

단위 테스트

개요

프로젝트의 단위 테스트 가이드입니다.

테스트 프레임워크

권장 테스트 프레임워크:

  • Vitest
  • Vue Test Utils

유틸리티 함수 테스트

javascript
import { describe, it, expect } from 'vitest'
+    
Skip to content

단위 테스트

개요

프로젝트의 단위 테스트 가이드입니다.

테스트 프레임워크

권장 테스트 프레임워크:

  • Vitest
  • Vue Test Utils

유틸리티 함수 테스트

javascript
import { describe, it, expect } from 'vitest'
 import { gfIsEmpty, gfNvl } from '@/utils/common/common.js'
 
 describe('common.js', () => {
@@ -45,8 +45,8 @@
     store.setAccessToken('token123')
     expect(store.accessToken).toBe('token123')
   })
-})

테스트 실행

bash
npm run test
- +})

테스트 실행

bash
npm run test
+ \ No newline at end of file diff --git a/troubleshooting/api-issues.html b/troubleshooting/api-issues.html index 15feeeb..79d6bd8 100644 --- a/troubleshooting/api-issues.html +++ b/troubleshooting/api-issues.html @@ -6,20 +6,20 @@ API 통신 문제 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

API 통신 문제

CORS 오류

문제: CORS policy 오류

해결:

  1. 백엔드 CORS 설정 확인
  2. 프록시 설정 확인

타임아웃

문제: 요청 타임아웃

해결:

  1. 서버 응답 시간 확인
  2. 타임아웃 시간 조정 (현재 300초)

429 에러

문제: Too Many Requests

해결: 요청 빈도를 줄이세요. 429 에러 발생 시 자동으로 로그인 페이지로 이동합니다.

암호화 오류

문제: 암호화/복호화 실패

해결:

  1. 암호화 설정 확인
  2. 키 확인
  3. 데이터 형식 확인
- +
Skip to content

API 통신 문제

CORS 오류

문제: CORS policy 오류

해결:

  1. 백엔드 CORS 설정 확인
  2. 프록시 설정 확인

타임아웃

문제: 요청 타임아웃

해결:

  1. 서버 응답 시간 확인
  2. 타임아웃 시간 조정 (현재 300초)

429 에러

문제: Too Many Requests

해결: 요청 빈도를 줄이세요. 429 에러 발생 시 자동으로 로그인 페이지로 이동합니다.

암호화 오류

문제: 암호화/복호화 실패

해결:

  1. 암호화 설정 확인
  2. 키 확인
  3. 데이터 형식 확인
+ \ No newline at end of file diff --git a/troubleshooting/auth-issues.html b/troubleshooting/auth-issues.html index 530f15f..d49199f 100644 --- a/troubleshooting/auth-issues.html +++ b/troubleshooting/auth-issues.html @@ -6,20 +6,20 @@ 인증 관련 문제 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

인증 관련 문제

토큰 만료

문제: 401 에러 발생

해결:

  1. 자동으로 토큰 갱신 시도
  2. 갱신 실패 시 로그인 페이지로 이동

Refresh Token 만료

문제: 토큰 갱신 실패

해결: 다시 로그인하세요.

토큰이 저장되지 않음

문제: 로그인 후 토큰이 저장되지 않음

해결:

  1. authStore.setAccessToken() 호출 확인
  2. 브라우저 콘솔 확인

인증 상태가 유지되지 않음

문제: 새로고침 후 로그아웃됨

해결: Access Token은 메모리에만 저장되므로 새로고침 시 초기화됩니다. Refresh Token으로 자동 갱신됩니다.

- +
Skip to content

인증 관련 문제

토큰 만료

문제: 401 에러 발생

해결:

  1. 자동으로 토큰 갱신 시도
  2. 갱신 실패 시 로그인 페이지로 이동

Refresh Token 만료

문제: 토큰 갱신 실패

해결: 다시 로그인하세요.

토큰이 저장되지 않음

문제: 로그인 후 토큰이 저장되지 않음

해결:

  1. authStore.setAccessToken() 호출 확인
  2. 브라우저 콘솔 확인

인증 상태가 유지되지 않음

문제: 새로고침 후 로그아웃됨

해결: Access Token은 메모리에만 저장되므로 새로고침 시 초기화됩니다. Refresh Token으로 자동 갱신됩니다.

+ \ No newline at end of file diff --git a/troubleshooting/build-errors.html b/troubleshooting/build-errors.html index db1eda3..2c3a05c 100644 --- a/troubleshooting/build-errors.html +++ b/troubleshooting/build-errors.html @@ -6,21 +6,21 @@ 빌드 오류 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

빌드 오류

일반적인 빌드 오류

타입 오류

문제: TypeScript/JavaScript 타입 오류

해결:

  1. 타입 오류 확인
  2. 타입 정의 수정
  3. any 타입 사용 (임시)

의존성 오류

문제: 패키지 의존성 오류

해결:

bash
rm -rf node_modules package-lock.json
-npm install

경로 오류

문제: 파일 경로를 찾을 수 없음

해결:

  1. 파일 경로 확인
  2. 경로 별칭 확인
  3. import 경로 수정

메모리 오류

문제: 빌드 중 메모리 부족

해결:

bash
NODE_OPTIONS=--max-old-space-size=4096 npm run build

빌드 최적화

큰 프로젝트의 경우 빌드 시간이 오래 걸릴 수 있습니다. 코드 분할을 활용하여 최적화하세요.

- +
Skip to content

빌드 오류

일반적인 빌드 오류

타입 오류

문제: TypeScript/JavaScript 타입 오류

해결:

  1. 타입 오류 확인
  2. 타입 정의 수정
  3. any 타입 사용 (임시)

의존성 오류

문제: 패키지 의존성 오류

해결:

bash
rm -rf node_modules package-lock.json
+npm install

경로 오류

문제: 파일 경로를 찾을 수 없음

해결:

  1. 파일 경로 확인
  2. 경로 별칭 확인
  3. import 경로 수정

메모리 오류

문제: 빌드 중 메모리 부족

해결:

bash
NODE_OPTIONS=--max-old-space-size=4096 npm run build

빌드 최적화

큰 프로젝트의 경우 빌드 시간이 오래 걸릴 수 있습니다. 코드 분할을 활용하여 최적화하세요.

+ \ No newline at end of file diff --git a/troubleshooting/common-issues.html b/troubleshooting/common-issues.html index a0005df..826b093 100644 --- a/troubleshooting/common-issues.html +++ b/troubleshooting/common-issues.html @@ -6,19 +6,19 @@ 일반적인 문제 해결 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

일반적인 문제 해결

포트 충돌

문제: 개발 서버가 시작되지 않음

해결: 다른 포트를 사용하거나 기존 프로세스를 종료합니다.

bash
# 포트 사용 확인
+    
Skip to content

일반적인 문제 해결

포트 충돌

문제: 개발 서버가 시작되지 않음

해결: 다른 포트를 사용하거나 기존 프로세스를 종료합니다.

bash
# 포트 사용 확인
 netstat -ano | findstr :5173
 
 # 프로세스 종료
@@ -27,8 +27,8 @@
 
 # node_modules 삭제 후 재설치
 rm -rf node_modules package-lock.json
-npm install

환경 변수 인식 안 됨

문제: 환경 변수가 적용되지 않음

해결:

  1. .env 파일이 프로젝트 루트에 있는지 확인
  2. 변수명이 VITE_로 시작하는지 확인
  3. 개발 서버 재시작

빌드 오류

문제: 빌드 실패

해결:

  1. 타입 오류 확인
  2. ESLint 오류 확인
  3. 의존성 버전 확인

토큰 갱신 실패

문제: 401 에러 후 로그인 페이지로 이동

해결: refreshToken이 만료되었을 수 있습니다. 다시 로그인하세요.

- +npm install

환경 변수 인식 안 됨

문제: 환경 변수가 적용되지 않음

해결:

  1. .env 파일이 프로젝트 루트에 있는지 확인
  2. 변수명이 VITE_로 시작하는지 확인
  3. 개발 서버 재시작

빌드 오류

문제: 빌드 실패

해결:

  1. 타입 오류 확인
  2. ESLint 오류 확인
  3. 의존성 버전 확인

토큰 갱신 실패

문제: 401 에러 후 로그인 페이지로 이동

해결: refreshToken이 만료되었을 수 있습니다. 다시 로그인하세요.

+ \ No newline at end of file diff --git a/troubleshooting/runtime-errors.html b/troubleshooting/runtime-errors.html index 695b05f..1b244fc 100644 --- a/troubleshooting/runtime-errors.html +++ b/troubleshooting/runtime-errors.html @@ -6,20 +6,20 @@ 런타임 오류 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

런타임 오류

일반적인 런타임 오류

컴포넌트를 찾을 수 없음

문제: Failed to resolve component

해결:

  1. 컴포넌트 import 확인
  2. 컴포넌트 등록 확인
  3. 자동 임포트 설정 확인

스토어를 찾을 수 없음

문제: Cannot read property of undefined

해결:

  1. 스토어 import 확인
  2. 스토어 초기화 확인
  3. Pinia 설정 확인

라우트를 찾을 수 없음

문제: No match found for location

해결:

  1. 라우트 정의 확인
  2. 라우트 이름 확인
  3. 동적 라우트 등록 확인

API 요청 실패

문제: 네트워크 오류

해결:

  1. API 서버 상태 확인
  2. 프록시 설정 확인
  3. CORS 설정 확인

디버깅

브라우저 개발자 도구의 콘솔과 네트워크 탭을 확인하세요.

- +
Skip to content

런타임 오류

일반적인 런타임 오류

컴포넌트를 찾을 수 없음

문제: Failed to resolve component

해결:

  1. 컴포넌트 import 확인
  2. 컴포넌트 등록 확인
  3. 자동 임포트 설정 확인

스토어를 찾을 수 없음

문제: Cannot read property of undefined

해결:

  1. 스토어 import 확인
  2. 스토어 초기화 확인
  3. Pinia 설정 확인

라우트를 찾을 수 없음

문제: No match found for location

해결:

  1. 라우트 정의 확인
  2. 라우트 이름 확인
  3. 동적 라우트 등록 확인

API 요청 실패

문제: 네트워크 오류

해결:

  1. API 서버 상태 확인
  2. 프록시 설정 확인
  3. CORS 설정 확인

디버깅

브라우저 개발자 도구의 콘솔과 네트워크 탭을 확인하세요.

+ \ No newline at end of file diff --git a/utilities/array-object.html b/utilities/array-object.html index b4e09d1..e12a269 100644 --- a/utilities/array-object.html +++ b/utilities/array-object.html @@ -6,19 +6,19 @@ 배열/객체 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

배열/객체 처리

개요

common.js에서 제공하는 배열/객체 처리 함수들입니다.

주요 함수

gfArrayToObject(array, keyField, valueField)

배열을 객체로 변환합니다.

javascript
const array = [
+    
Skip to content

배열/객체 처리

개요

common.js에서 제공하는 배열/객체 처리 함수들입니다.

주요 함수

gfArrayToObject(array, keyField, valueField)

배열을 객체로 변환합니다.

javascript
const array = [
   { code: 'A', name: 'Apple' },
   { code: 'B', name: 'Banana' },
 ]
@@ -50,8 +50,8 @@
 const cloned = gfCloneJson(original)
 cloned.b.c = 3
 // original.b.c는 여전히 2

gfObjectToString(obj, log)

객체를 문자열로 변환합니다.

javascript
const obj = { name: '홍길동', age: 30 }
-gfObjectToString(obj) // '홍길동∥30'

관련 문서

- +gfObjectToString(obj) // '홍길동∥30'

관련 문서

+ \ No newline at end of file diff --git a/utilities/common.html b/utilities/common.html index 509abb5..cb2f00c 100644 --- a/utilities/common.html +++ b/utilities/common.html @@ -6,19 +6,19 @@ 공통 유틸리티 (common.js) | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

공통 유틸리티 (common.js)

개요

common.js는 프로젝트 전반에서 사용되는 공통 유틸리티 함수들을 제공합니다. 이 파일의 함수들은 unplugin-auto-import를 통해 자동으로 임포트되므로 별도의 import 문 없이 바로 사용할 수 있습니다.

파일 위치

src/utils/common/common.js

주요 함수 카테고리

1. 기본 유틸리티/검증 함수

gfIsEmpty(value)

값이 비어있는지 확인합니다.

파라미터:

  • value: 확인할 값 (모든 타입)

반환값:

  • boolean: 비어있으면 true, 아니면 false

사용 예제:

javascript
if (gfIsEmpty(userName)) {
+    
Skip to content

공통 유틸리티 (common.js)

개요

common.js는 프로젝트 전반에서 사용되는 공통 유틸리티 함수들을 제공합니다. 이 파일의 함수들은 unplugin-auto-import를 통해 자동으로 임포트되므로 별도의 import 문 없이 바로 사용할 수 있습니다.

파일 위치

src/utils/common/common.js

주요 함수 카테고리

1. 기본 유틸리티/검증 함수

gfIsEmpty(value)

값이 비어있는지 확인합니다.

파라미터:

  • value: 확인할 값 (모든 타입)

반환값:

  • boolean: 비어있으면 true, 아니면 false

사용 예제:

javascript
if (gfIsEmpty(userName)) {
   alert('사용자 이름을 입력해주세요')
 }
 
@@ -90,8 +90,8 @@
   
   return true
 }
-</script>

관련 문서

- +</script>

관련 문서

+ \ No newline at end of file diff --git a/utilities/crypto.html b/utilities/crypto.html index 3e8813f..a47c302 100644 --- a/utilities/crypto.html +++ b/utilities/crypto.html @@ -6,19 +6,19 @@ 암호화/복호화 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

암호화/복호화

개요

CryptoJS를 사용한 암호화/복호화 함수들입니다.

주요 함수

encryptObject(data)

객체를 암호화합니다.

파라미터:

  • data (object): 암호화할 데이터

반환값:

  • 암호화된 객체 { param, KEY, IV }

사용 예제:

javascript
const encrypted = encryptObject({
+    
Skip to content

암호화/복호화

개요

CryptoJS를 사용한 암호화/복호화 함수들입니다.

주요 함수

encryptObject(data)

객체를 암호화합니다.

파라미터:

  • data (object): 암호화할 데이터

반환값:

  • 암호화된 객체 { param, KEY, IV }

사용 예제:

javascript
const encrypted = encryptObject({
   userId: 'user123',
   password: 'password',
 })
@@ -31,8 +31,8 @@
 const arr = await file.arrayBuffer()
 const bytes = new Uint8Array(arr)
 const encrypted = encryptBinary(bytes, file)

자동 암호화

CustomAxios.js의 요청 인터셉터에서 세션 설정에 따라 자동으로 암호화됩니다:

javascript
const sessionStore = useSessionStore()
-sessionStore.setSessionKey('encrypt', 'Y')

관련 문서

- +sessionStore.setSessionKey('encrypt', 'Y')

관련 문서

+ \ No newline at end of file diff --git a/utilities/date.html b/utilities/date.html index 25b8f31..87dc0c9 100644 --- a/utilities/date.html +++ b/utilities/date.html @@ -6,27 +6,27 @@ 날짜 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

날짜 처리

개요

common.js에서 제공하는 날짜/시간 처리 함수들입니다.

주요 함수

gfFormatDateString(dateStr, delimiter)

날짜 문자열을 포맷팅합니다.

javascript
gfFormatDateString('20240101', '.') // '2024.01.01'
+    
Skip to content

날짜 처리

개요

common.js에서 제공하는 날짜/시간 처리 함수들입니다.

주요 함수

gfFormatDateString(dateStr, delimiter)

날짜 문자열을 포맷팅합니다.

javascript
gfFormatDateString('20240101', '.') // '2024.01.01'
 gfFormatDateString('20240101', '-') // '2024-01-01'

gfFormatDateTime(date)

날짜를 yyyyMMddHHmmss 형식으로 변환합니다.

javascript
gfFormatDateTime(new Date()) // '20240101120000'

gfFormatDateTimeString(pDate)

날짜를 yyyy-MM-dd HH:mm:ss 형식으로 변환합니다.

javascript
gfFormatDateTimeString(new Date()) // '2024-01-01 12:00:00'

gfAddDay(date, add)

날짜에 일수를 더하거나 뺍니다.

javascript
const today = new Date()
 gfAddDay(today, 1)   // 내일 (yyyyMMdd)
 gfAddDay(today, -1)  // 어제 (yyyyMMdd)

gfDiffDate(fromDate, toDate)

두 날짜 사이의 일수 차이를 계산합니다.

javascript
gfDiffDate('20240101', '20240110') // 9

gfAddMonth(date, val)

날짜에 개월수를 더하거나 뺍니다.

javascript
const date = new Date('2024-01-15')
 gfAddMonth(date, 1)  // '2024-02-15'

gfFormatDateWithSep(date)

8자리 날짜에 '-'를 추가합니다.

javascript
gfFormatDateWithSep('20240101') // '2024-01-01'

gfTimestampToDateStr(date)

타임스탬프를 'yyyy-mm-dd' 형식으로 변환합니다.

javascript
gfTimestampToDateStr(1704067200000) // '2024-01-01'

gfConvertTimestamp(pDate)

타임스탬프를 'yyyy-mm-dd HH:mm:ss' 형식으로 변환합니다.

javascript
gfConvertTimestamp(1704067200000) // '2024-01-01 12:00:00'

gfToday()

오늘 날짜를 yyyyMMdd 형식으로 반환합니다.

javascript
gfToday() // '20240101'

gfDayFormat(str)

오늘 날짜를 지정된 구분자로 포맷팅합니다.

javascript
gfDayFormat('.') // '2024.01.01'

날짜 드롭다운 생성

gfSetYearBox()

연도 드롭다운 리스트를 생성합니다.

javascript
const years = gfSetYearBox()
 // [{ code: '2024', name: '2024년' }, ...]

gfSetMonthBox()

월 드롭다운 리스트를 생성합니다.

javascript
const months = gfSetMonthBox()
 // [{ code: '01', name: '01월' }, ...]

gfSetDayBox()

일 드롭다운 리스트를 생성합니다.

javascript
const days = gfSetDayBox()
-// [{ code: '01', name: '01일' }, ...]

관련 문서

- +// [{ code: '01', name: '01일' }, ...]

관련 문서

+ \ No newline at end of file diff --git a/utilities/excel.html b/utilities/excel.html index 0661403..4addc79 100644 --- a/utilities/excel.html +++ b/utilities/excel.html @@ -6,19 +6,19 @@ Excel 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

Excel 처리

개요

ExcelJS를 사용한 Excel 파일 처리 함수들입니다.

주요 함수

gfHtmlExcelDown(obj)

HTML 테이블을 Excel로 다운로드합니다.

파라미터:

  • obj.fileName: 파일명
  • obj.sheetName: 시트명
  • obj.heads: 헤더 정보
  • obj.data: 데이터
  • obj.dataStartColumn: 데이터 시작 컬럼 (예: 'A5')

사용 예제:

javascript
gfHtmlExcelDown({
+    
Skip to content

Excel 처리

개요

ExcelJS를 사용한 Excel 파일 처리 함수들입니다.

주요 함수

gfHtmlExcelDown(obj)

HTML 테이블을 Excel로 다운로드합니다.

파라미터:

  • obj.fileName: 파일명
  • obj.sheetName: 시트명
  • obj.heads: 헤더 정보
  • obj.data: 데이터
  • obj.dataStartColumn: 데이터 시작 컬럼 (예: 'A5')

사용 예제:

javascript
gfHtmlExcelDown({
   fileName: '직원목록',
   sheetName: 'Sheet1',
   heads: [
@@ -44,8 +44,8 @@
 // 파일 생성
 const buffer = await workbook.xlsx.writeBuffer()
 const blob = new Blob([buffer])
-FileSaver.saveAs(blob, 'data.xlsx')

관련 문서

- +FileSaver.saveAs(blob, 'data.xlsx')

관련 문서

+ \ No newline at end of file diff --git a/utilities/fcm.html b/utilities/fcm.html index e27f34d..5f92619 100644 --- a/utilities/fcm.html +++ b/utilities/fcm.html @@ -6,19 +6,19 @@ FCM 유틸리티 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

FCM 유틸리티

개요

FCM 모듈에서 사용하는 유틸리티 함수들입니다. 현재 src/utils/common/comfcm.js 파일에 FCM 관련 유틸리티 함수들이 주석 처리되어 있습니다.

파일 위치

src/utils/common/comfcm.js

현재 상태

현재 comfcm.js 파일에는 대부분의 함수가 주석 처리되어 있습니다. 이는 레거시 코드이거나 향후 사용을 위해 보관된 것으로 보입니다.

주요 함수 (주석 처리됨)

gfIsEmpty(obj)

빈값 체크 함수입니다.

파라미터:

  • obj: 체크할 값

반환값:

  • boolean: 빈값이면 true, 아니면 false

사용 예제:

javascript
// 주석 처리된 코드
+    
Skip to content

FCM 유틸리티

개요

FCM 모듈에서 사용하는 유틸리티 함수들입니다. 현재 src/utils/common/comfcm.js 파일에 FCM 관련 유틸리티 함수들이 주석 처리되어 있습니다.

파일 위치

src/utils/common/comfcm.js

현재 상태

현재 comfcm.js 파일에는 대부분의 함수가 주석 처리되어 있습니다. 이는 레거시 코드이거나 향후 사용을 위해 보관된 것으로 보입니다.

주요 함수 (주석 처리됨)

gfIsEmpty(obj)

빈값 체크 함수입니다.

파라미터:

  • obj: 체크할 값

반환값:

  • boolean: 빈값이면 true, 아니면 false

사용 예제:

javascript
// 주석 처리된 코드
 // const isEmpty = gfIsEmpty(value)

gfAddDay(date, add)

날짜에 증감 일수를 계산하고 yyyyMMdd 형식의 문자열을 반환합니다.

파라미터:

  • date: 계산할 날짜 객체
  • add: 증감 일수

반환값:

  • string: yyyyMMdd 형식의 날짜 문자열

gfObjectToString(obj, log)

Object를 String(콤마)으로 변환합니다.

파라미터:

  • obj: 변환할 객체
  • log: 로그 출력 여부

반환값:

  • string: 변환된 문자열

gfGetThreeComma(val)

값을 쓰리콤마로 변경합니다.

파라미터:

  • val: 변환할 값

반환값:

  • string: 쓰리콤마가 적용된 문자열

예제:

javascript
// 1000000 → "1,000,000"

활성화된 함수

현재 활성화되어 사용 가능한 함수는 없습니다. 모든 함수가 주석 처리되어 있습니다.

사용 가이드

함수 활성화

필요한 함수를 사용하려면 주석을 해제하고 common.js에서 export해야 합니다:

javascript
// comfcm.js에서 주석 해제
 export const gfIsEmpty = function (obj) {
   // 함수 구현
@@ -28,8 +28,8 @@
 import { gfIsEmpty } from '@/utils/common/comfcm.js'

대안 사용

현재 활성화된 함수는 common.js에서 사용할 수 있습니다:

javascript
import { gfIsEmpty, gfAddDay } from '@/utils/common/common.js'
 
 const isEmpty = gfIsEmpty(value)
-const nextDate = gfAddDay(new Date(), 7)

향후 계획

FCM 모듈 전용 유틸리티 함수가 필요할 경우, comfcm.js 파일의 주석을 해제하거나 새로운 함수를 추가할 수 있습니다.

관련 문서

- +const nextDate = gfAddDay(new Date(), 7)

향후 계획

FCM 모듈 전용 유틸리티 함수가 필요할 경우, comfcm.js 파일의 주석을 해제하거나 새로운 함수를 추가할 수 있습니다.

관련 문서

+ \ No newline at end of file diff --git a/utilities/file.html b/utilities/file.html index 9be29d7..692f816 100644 --- a/utilities/file.html +++ b/utilities/file.html @@ -6,19 +6,19 @@ 파일 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

파일 처리

개요

common.js에서 제공하는 파일 처리 함수들입니다.

주요 함수

gfFileDownload(obj)

서버에 저장된 파일을 다운로드합니다.

파라미터:

  • obj.p_serverFileName: 서버 파일명
  • obj.p_LangID: 언어 ID
  • obj.p_UserID: 사용자 ID
  • obj.p_ipAddress: IP 주소

사용 예제:

javascript
await gfFileDownload({
+    
Skip to content

파일 처리

개요

common.js에서 제공하는 파일 처리 함수들입니다.

주요 함수

gfFileDownload(obj)

서버에 저장된 파일을 다운로드합니다.

파라미터:

  • obj.p_serverFileName: 서버 파일명
  • obj.p_LangID: 언어 ID
  • obj.p_UserID: 사용자 ID
  • obj.p_ipAddress: IP 주소

사용 예제:

javascript
await gfFileDownload({
   p_serverFileName: 'file123',
   p_LangID: 'KOR',
   p_UserID: 'user123',
@@ -34,8 +34,8 @@
 link.setAttribute('download', response.data.fileName)
 document.body.appendChild(link)
 link.click()
-link.remove()

관련 문서

- +link.remove()

관련 문서

+ \ No newline at end of file diff --git a/utilities/indexeddb.html b/utilities/indexeddb.html index 2ce7695..d83c900 100644 --- a/utilities/indexeddb.html +++ b/utilities/indexeddb.html @@ -6,19 +6,19 @@ IndexedDB 유틸리티 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

IndexedDB 유틸리티

개요

IndexedDB를 사용하여 대용량 데이터를 브라우저에 저장하는 유틸리티입니다.

파일 위치

src/utils/indexedDbUtil.js

주요 함수

saveToIndexedDB(key, value)

데이터를 IndexedDB에 저장합니다.

파라미터:

  • key (string): 저장 키
  • value (any): 저장할 데이터

사용 예제:

javascript
import { idbUtil } from '@/utils/indexedDbUtil.js'
+    
Skip to content

IndexedDB 유틸리티

개요

IndexedDB를 사용하여 대용량 데이터를 브라우저에 저장하는 유틸리티입니다.

파일 위치

src/utils/indexedDbUtil.js

주요 함수

saveToIndexedDB(key, value)

데이터를 IndexedDB에 저장합니다.

파라미터:

  • key (string): 저장 키
  • value (any): 저장할 데이터

사용 예제:

javascript
import { idbUtil } from '@/utils/indexedDbUtil.js'
 
 const { saveToIndexedDB } = idbUtil()
 
@@ -39,8 +39,8 @@
 await saveToIndexedDB(pageId, pageData)
 
 // 페이지 데이터 불러오기
-const savedData = await loadFromIndexedDB(pageId)

주의사항

  1. 용량 제한: IndexedDB는 브라우저별로 용량 제한이 있습니다.
  2. 비동기 처리: 모든 함수는 비동기이므로 await를 사용하세요.
  3. 에러 처리: try-catch로 에러를 처리하세요.

관련 문서

- +const savedData = await loadFromIndexedDB(pageId)

주의사항

  1. 용량 제한: IndexedDB는 브라우저별로 용량 제한이 있습니다.
  2. 비동기 처리: 모든 함수는 비동기이므로 await를 사용하세요.
  3. 에러 처리: try-catch로 에러를 처리하세요.

관련 문서

+ \ No newline at end of file diff --git a/utilities/number.html b/utilities/number.html index 812fd21..67a54cd 100644 --- a/utilities/number.html +++ b/utilities/number.html @@ -6,25 +6,25 @@ 숫자 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

숫자 처리

개요

common.js에서 제공하는 숫자 처리 함수들입니다.

주요 함수

gfNumberFormat(number, decimals, decPoint, thousandsSep)

숫자를 포맷팅합니다.

javascript
gfNumberFormat(1234567)        // '1,234,567'
+    
Skip to content

숫자 처리

개요

common.js에서 제공하는 숫자 처리 함수들입니다.

주요 함수

gfNumberFormat(number, decimals, decPoint, thousandsSep)

숫자를 포맷팅합니다.

javascript
gfNumberFormat(1234567)        // '1,234,567'
 gfNumberFormat(1234.56, 2)     // '1,234.56'
 gfNumberFormat(1234.56, 2, ',', '.') // '1.234,56'

gfSetNumber(str)

숫자에 천 단위 구분자를 추가합니다.

javascript
gfSetNumber('1234567') // '1,234,567'
 gfSetNumber('1234.56') // '1,234.56'

gfGetComma(val)

값을 천 단위 구분자로 포맷팅합니다.

javascript
gfGetComma(1234567) // '1,234,567'

gfGetThreeComma(val)

값을 천 단위 구분자로 포맷팅합니다.

javascript
gfGetThreeComma(1234567) // '1,234,567'

gfrRemoveComma(val)

콤마를 제거합니다.

javascript
gfrRemoveComma('1,234,567') // '1234567'

gfFillZeros(n, digits)

숫자를 지정된 자릿수로 0을 채워 포맷팅합니다.

javascript
gfFillZeros(5, 3) // '005'
 gfFillZeros(123, 3) // '123'

gfGetNumber(str)

문자열에서 숫자만 추출합니다.

javascript
gfGetNumber('abc123def456') // 123456

gfGetRound(val, unit)

숫자를 반올림합니다.

javascript
gfGetRound(123.456, 2) // 123.46
-gfGetRound(123.456, 0) // 123

관련 문서

- +gfGetRound(123.456, 0) // 123

관련 문서

+ \ No newline at end of file diff --git a/utilities/string.html b/utilities/string.html index 55a476b..9cf1337 100644 --- a/utilities/string.html +++ b/utilities/string.html @@ -6,24 +6,24 @@ 문자열 처리 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

문자열 처리

개요

common.js에서 제공하는 문자열 처리 함수들입니다.

주요 함수

gfTrim(str)

문자열의 앞뒤 공백을 제거합니다.

javascript
gfTrim('  hello  ') // 'hello'

gfCamelToSnakeUpper(str)

카멜케이스를 대문자 스네이크케이스로 변환합니다.

javascript
gfCamelToSnakeUpper('userName') // 'USER_NAME'

gfSnakeToCamel(str)

스네이크케이스를 카멜케이스로 변환합니다.

javascript
gfSnakeToCamel('user_name') // 'userName'

gfFormIdStr(val)

URL에서 formId를 추출합니다.

javascript
gfFormIdStr('/ess/persadm/MyPage.do') // 'MyPage.do'

gfSetClobData(strString, strAppend, strSeparator, strNull)

CLOB 문자를 만듭니다.

javascript
let result = ''
+    
Skip to content

문자열 처리

개요

common.js에서 제공하는 문자열 처리 함수들입니다.

주요 함수

gfTrim(str)

문자열의 앞뒤 공백을 제거합니다.

javascript
gfTrim('  hello  ') // 'hello'

gfCamelToSnakeUpper(str)

카멜케이스를 대문자 스네이크케이스로 변환합니다.

javascript
gfCamelToSnakeUpper('userName') // 'USER_NAME'

gfSnakeToCamel(str)

스네이크케이스를 카멜케이스로 변환합니다.

javascript
gfSnakeToCamel('user_name') // 'userName'

gfFormIdStr(val)

URL에서 formId를 추출합니다.

javascript
gfFormIdStr('/ess/persadm/MyPage.do') // 'MyPage.do'

gfSetClobData(strString, strAppend, strSeparator, strNull)

CLOB 문자를 만듭니다.

javascript
let result = ''
 result = gfSetClobData('value1', result, '^', ' ')
 result = gfSetClobData('value2', result, '^', ' ')
 // result: 'value1^value2^'

gfObjectToString(obj, log)

객체를 문자열로 변환합니다.

javascript
const obj = { name: '홍길동', age: 30 }
-gfObjectToString(obj) // '홍길동∥30'

전화번호 처리

gfCheckPhoneHyphen(phoneNum)

전화번호에 하이픈을 추가합니다.

javascript
gfCheckPhoneHyphen('01012345678') // '010-1234-5678'

gfCheckPhoneNumber(p_num)

전화번호 유효성을 검증합니다.

javascript
gfCheckPhoneNumber('010-1234-5678') // true

gfMobliePhoneFormat(str)

모바일 전화번호를 포맷팅합니다.

javascript
gfMobliePhoneFormat('01012345678') // '010-1234-5678'

관련 문서

- +gfObjectToString(obj) // '홍길동∥30'

전화번호 처리

gfCheckPhoneHyphen(phoneNum)

전화번호에 하이픈을 추가합니다.

javascript
gfCheckPhoneHyphen('01012345678') // '010-1234-5678'

gfCheckPhoneNumber(p_num)

전화번호 유효성을 검증합니다.

javascript
gfCheckPhoneNumber('010-1234-5678') // true

gfMobliePhoneFormat(str)

모바일 전화번호를 포맷팅합니다.

javascript
gfMobliePhoneFormat('01012345678') // '010-1234-5678'

관련 문서

+ \ No newline at end of file diff --git a/utilities/validation.html b/utilities/validation.html index 61072b1..644a079 100644 --- a/utilities/validation.html +++ b/utilities/validation.html @@ -6,19 +6,19 @@ 폼 검증 | AXP Dev Docs - - + + - - - - - + + + + + -
Skip to content

폼 검증

개요

common.js에서 제공하는 검증 함수들입니다.

주요 함수

gfIsEmpty(value)

값이 비어있는지 확인합니다.

javascript
gfIsEmpty('')        // true
+    
Skip to content

폼 검증

개요

common.js에서 제공하는 검증 함수들입니다.

주요 함수

gfIsEmpty(value)

값이 비어있는지 확인합니다.

javascript
gfIsEmpty('')        // true
 gfIsEmpty(null)      // true
 gfIsEmpty(undefined) // true
 gfIsEmpty([])        // true
@@ -53,8 +53,8 @@
   
   return true
 }
-</script>

관련 문서

- +</script>

관련 문서

+ \ No newline at end of file