서승완
Builds for 2 pipelines canceled in 16 minutes 42 seconds

Merge branch 'feature/new-front' into 'master'

Feature/new front



See merge request !9
Showing 172 changed files with 1348 additions and 5647 deletions
1 stages: 1 stages:
2 - - deploy:backend 2 + - deploy
3 - - deploy:frontend
4 3
5 variables: 4 variables:
6 PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache" 5 PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache"
...@@ -9,9 +8,9 @@ cache: ...@@ -9,9 +8,9 @@ cache:
9 paths: 8 paths:
10 - "$CI_PROJECT_DIR/.cache" 9 - "$CI_PROJECT_DIR/.cache"
11 10
12 -deploy:backend: 11 +deploy:
13 image: python:3.6.5 12 image: python:3.6.5
14 - stage: deploy:backend 13 + stage: deploy
15 cache: 14 cache:
16 paths: 15 paths:
17 - "$CI_PROJECT_DIR/khubox-api/venv" 16 - "$CI_PROJECT_DIR/khubox-api/venv"
...@@ -27,22 +26,6 @@ deploy:backend: ...@@ -27,22 +26,6 @@ deploy:backend:
27 - source venv/bin/activate 26 - source venv/bin/activate
28 - pip install -r requirements.txt 27 - pip install -r requirements.txt
29 - zappa update 28 - zappa update
30 -
31 -deploy:frontend:
32 - image: nikolaik/python-nodejs:python3.6-nodejs12-alpine
33 - stage: deploy:frontend
34 - cache:
35 - paths:
36 - - "$CI_PROJECT_DIR/.yarn"
37 - - "$CI_PROJECT_DIR/khubox-front/node_modules"
38 - script:
39 - cd $CI_PROJECT_DIR/khubox-front 29 - cd $CI_PROJECT_DIR/khubox-front
40 - - yarn config set cache-folder $CI_PROJECT_DIR/.yarn 30 + - aws s3 cp ./ s3://khubox-deploy/ --recursive --include "*" --acl public-read
41 - - yarn install
42 - - CI=false yarn build
43 - - pip install awscli
44 - - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
45 - - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
46 - - aws configure set region $AWS_DEFAULT_REGION
47 - - aws s3 cp ./build/ s3://khubox-deploy/ --recursive --include "*" --acl public-read
48 - aws cloudfront create-invalidation --distribution-id E1RC3LPJHL5VUA --paths "/*" 31 - aws cloudfront create-invalidation --distribution-id E1RC3LPJHL5VUA --paths "/*"
......
1 -# KhuBox · [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Python 3.6.5](https://img.shields.io/badge/python-3.6.5-blue.svg)](https://www.python.org/downloads/release/python-365/) [![Node 12.16.3](https://img.shields.io/badge/node-12.16.3-brightgreen.svg)](https://nodejs.org/dist/v12.16.3/) [![build status](http://khuhub.khu.ac.kr/2020-1-CloudComputing-E/E_Team_KhuBox/badges/master/build.svg)](http://khuhub.khu.ac.kr/2020-1-CloudComputing-E/E_Team_KhuBox/commits/master) 1 +# KhuBox · [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Python 3.6.5](https://img.shields.io/badge/python-3.6.5-blue.svg)](https://www.python.org/downloads/release/python-365/) [![build status](http://khuhub.khu.ac.kr/2020-1-CloudComputing-E/E_Team_KhuBox/badges/master/build.svg)](http://khuhub.khu.ac.kr/2020-1-CloudComputing-E/E_Team_KhuBox/commits/master)
2 2
3 2020년 1학기 경희대학교 클라우드컴퓨팅(CSE335) E조 3 2020년 1학기 경희대학교 클라우드컴퓨팅(CSE335) E조
4 4
...@@ -16,7 +16,7 @@ AWS를 활용한 Dropbox 개발 프로젝트 ...@@ -16,7 +16,7 @@ AWS를 활용한 Dropbox 개발 프로젝트
16 16
17 ## 기술 스택 17 ## 기술 스택
18 18
19 -1. Front-end : React 19 +1. Front-end : HTML5, CSS3, JavaScript, jQuery
20 20
21 2. Back-end : Django 21 2. Back-end : Django
22 22
......
...@@ -133,8 +133,4 @@ S3_BUCKET = 'khubox-files' ...@@ -133,8 +133,4 @@ S3_BUCKET = 'khubox-files'
133 133
134 # Cors 134 # Cors
135 CORS_ALLOW_CREDENTIALS = True 135 CORS_ALLOW_CREDENTIALS = True
136 -CORS_ORIGIN_WHITELIST = [ 136 +CORS_ORIGIN_ALLOW_ALL = True
137 - 'http://localhost:3000',
138 - 'http://127.0.0.1:3000',
139 - 'https://khubox.khunet.net',
140 -]
......
...@@ -33,6 +33,7 @@ def list_item(request): ...@@ -33,6 +33,7 @@ def list_item(request):
33 data.append({ 33 data.append({
34 'id': file.id, 34 'id': file.id,
35 'type': file.type, 35 'type': file.type,
36 + 'parent_id': file.parent_id,
36 'name': file.name, 37 'name': file.name,
37 'size': file.size, 38 'size': file.size,
38 'is_public': file.is_public, 39 'is_public': file.is_public,
...@@ -141,10 +142,6 @@ def empty_trash(request): ...@@ -141,10 +142,6 @@ def empty_trash(request):
141 142
142 # 폴더/파일 조회 143 # 폴더/파일 조회
143 def find_item(request, file_id): 144 def find_item(request, file_id):
144 - # Check Login
145 - if request.user_id is None:
146 - return {'result': False, 'error': '로그인을 해주세요.'}
147 -
148 # Query 145 # Query
149 file = File.objects.filter(id=file_id, deleted_at__isnull=True) 146 file = File.objects.filter(id=file_id, deleted_at__isnull=True)
150 147
...@@ -174,13 +171,14 @@ def find_item(request, file_id): ...@@ -174,13 +171,14 @@ def find_item(request, file_id):
174 171
175 # Check Auth 172 # Check Auth
176 if is_auth is False: 173 if is_auth is False:
177 - return {'result': False, 'error': '잘못된 요청입니다.'} 174 + return {'result': False, 'error': '권한이 없습니다.'}
178 175
179 # Return File 176 # Return File
180 if file[0].type == 'file': 177 if file[0].type == 'file':
181 download_url = sign_download(file[0].id) 178 download_url = sign_download(file[0].id)
182 data = { 179 data = {
183 'id': file[0].id, 180 'id': file[0].id,
181 + 'type': file[0].type,
184 'parent_id': file[0].parent_id, 182 'parent_id': file[0].parent_id,
185 'name': file[0].name, 183 'name': file[0].name,
186 'size': file[0].size, 184 'size': file[0].size,
...@@ -196,11 +194,23 @@ def find_item(request, file_id): ...@@ -196,11 +194,23 @@ def find_item(request, file_id):
196 files = File.objects.filter(parent_id=file[0].id, is_trashed=0, deleted_at__isnull=True) 194 files = File.objects.filter(parent_id=file[0].id, is_trashed=0, deleted_at__isnull=True)
197 195
198 # Structure 196 # Structure
199 - data = [] 197 + data = {
198 + 'id': file[0].id,
199 + 'type': file[0].type,
200 + 'parent_id': file[0].parent_id,
201 + 'name': file[0].name,
202 + 'size': file[0].size,
203 + 'is_public': file[0].is_public,
204 + 'is_starred': file[0].is_starred,
205 + 'is_trashed': file[0].is_trashed,
206 + 'created_at': file[0].created_at,
207 + }
208 + file_list = []
200 for file in files: 209 for file in files:
201 - data.append({ 210 + file_list.append({
202 'id': file.id, 211 'id': file.id,
203 'type': file.type, 212 'type': file.type,
213 + 'parent_id': file.parent_id,
204 'name': file.name, 214 'name': file.name,
205 'size': file.size, 215 'size': file.size,
206 'is_public': file.is_public, 216 'is_public': file.is_public,
...@@ -210,7 +220,7 @@ def find_item(request, file_id): ...@@ -210,7 +220,7 @@ def find_item(request, file_id):
210 }) 220 })
211 221
212 # Return Folder 222 # Return Folder
213 - return {'result': True, 'data': data} 223 + return {'result': True, 'data': data, 'files': file_list}
214 224
215 225
216 # 폴더/파일 수정 226 # 폴더/파일 수정
...@@ -273,7 +283,8 @@ def update_item(request, file_id): ...@@ -273,7 +283,8 @@ def update_item(request, file_id):
273 if received['name'] == '': 283 if received['name'] == '':
274 return {'result': False, 'error': '이름을 제대로 입력해주세요.'} 284 return {'result': False, 'error': '이름을 제대로 입력해주세요.'}
275 file[0].name = sanitize_filename(received['name']) 285 file[0].name = sanitize_filename(received['name'])
276 - s3_update_and_return_size(file_id, file[0].name) 286 + if file[0].type == 'file':
287 + s3_update_and_return_size(file_id, file[0].name)
277 if 'parent_id' in received: 288 if 'parent_id' in received:
278 file[0].parent_id = received['parent_id'] 289 file[0].parent_id = received['parent_id']
279 if 'is_public' in received: 290 if 'is_public' in received:
......
...@@ -118,6 +118,7 @@ def list_me(request): ...@@ -118,6 +118,7 @@ def list_me(request):
118 data = [] 118 data = []
119 for group in groups: 119 for group in groups:
120 data.append({ 120 data.append({
121 + 'id': group.id,
121 'name': group.name, 122 'name': group.name,
122 'root_folder': group.root_folder, 123 'root_folder': group.root_folder,
123 }) 124 })
...@@ -145,8 +146,10 @@ def find_item(request, group_id): ...@@ -145,8 +146,10 @@ def find_item(request, group_id):
145 146
146 # Serialize 147 # Serialize
147 data = { 148 data = {
149 + 'id': group[0].id,
148 'name': group[0].name, 150 'name': group[0].name,
149 'root_folder': group[0].root_folder, 151 'root_folder': group[0].root_folder,
152 + 'is_owner': False,
150 } 153 }
151 154
152 # If Owner 155 # If Owner
...@@ -159,7 +162,6 @@ def find_item(request, group_id): ...@@ -159,7 +162,6 @@ def find_item(request, group_id):
159 'id': user.id, 162 'id': user.id,
160 'name': user.name, 163 'name': user.name,
161 }) 164 })
162 - data['id'] = group[0].id
163 data['users'] = user_data 165 data['users'] = user_data
164 data['invite_code'] = group[0].invite_code 166 data['invite_code'] = group[0].invite_code
165 data['is_owner'] = True 167 data['is_owner'] = True
......
1 +<!doctype html>
2 +<html lang="ko">
3 +<head>
4 + <meta charset="utf-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6 + <title>KhuBox</title>
7 + <link rel="stylesheet" href="static/css/bootstrap.min.css">
8 + <link rel="stylesheet" href="static/css/main.css">
9 +</head>
10 +<body>
11 +<nav id="main-1" style="display:none;" class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
12 + <a class="navbar-brand col-md-3 col-lg-2 mr-0 px-3" href="#">KhuBox</a>
13 + <button class="navbar-toggler position-absolute d-md-none collapsed" type="button" data-toggle="collapse"
14 + data-target="#sidebarMenu">
15 + <span class="navbar-toggler-icon"></span>
16 + </button>
17 + <input class="form-control form-control-dark w-100" type="text" placeholder="KhuBox에서 검색">
18 + <ul class="navbar-nav px-3">
19 + <li class="nav-item text-nowrap">
20 + <a class="nav-link" href="#!/settings">설정</a>
21 + </li>
22 + </ul>
23 + <ul class="navbar-nav px-3">
24 + <li class="nav-item text-nowrap">
25 + <a class="nav-link" href="#!/logout">로그아웃</a>
26 + </li>
27 + </ul>
28 +</nav>
29 +<div id="main-2" style="display:none;" class="container-fluid">
30 + <div class="row">
31 + <nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse">
32 + <div class="sidebar-sticky pt-3">
33 + <ul class="nav flex-column">
34 + <li class="nav-item">
35 + <a id="menu-me" class="nav-link" href="#">
36 + <span data-feather="hard-drive"></span>
37 + 내 파일
38 + </a>
39 + </li>
40 + <li class="nav-item">
41 + <a id="menu-public" class="nav-link" href="#!/public">
42 + <span data-feather="users"></span>
43 + 공유한 파일
44 + </a>
45 + </li>
46 + <li class="nav-item">
47 + <a id="menu-starred" class="nav-link" href="#!/starred">
48 + <span data-feather="star"></span>
49 + 중요 문서함
50 + </a>
51 + </li>
52 + <li class="nav-item">
53 + <a id="menu-trash" class="nav-link" href="#!/trash">
54 + <span data-feather="trash-2"></span>
55 + 휴지통
56 + </a>
57 + </li>
58 + </ul>
59 + <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted">
60 + <span>그룹 문서함</span>
61 + <a class="d-flex align-items-center text-muted" href="#!/add-group">
62 + <span data-feather="plus-circle"></span>
63 + </a>
64 + </h6>
65 + <ul class="nav flex-column mb-2" id="group_list"></ul>
66 + </div>
67 + </nav>
68 + <main id="file_list" style="display:none;" role="main" class="col-md-9 ml-sm-auto col-lg-10 px-md-4">
69 + <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 mb-3">
70 + <div>
71 + <h1 id="folder_name" class="h2"></h1>
72 + <span id="folder_id" style="display:none;" class="badge badge-info"></span>
73 + </div>
74 + <div id="menu-top-me" style="display:none;" class="btn-toolbar mb-2 mb-md-0">
75 + <div class="btn-group mr-2">
76 + <button type="button" class="btn btn-sm btn-outline-secondary" onclick="GoNewFolder();">새 폴더</button>
77 + <button type="button" class="btn btn-sm btn-outline-secondary" onclick="GoUpload();">파일 업로드</button>
78 + </div>
79 + </div>
80 + <div id="menu-top-group" style="display:none;" class="btn-toolbar mb-2 mb-md-0">
81 + <div class="btn-group mr-2">
82 + <button id="btn-go-group" type="button" class="btn btn-sm btn-outline-secondary">그룹 설정</button>
83 + </div>
84 + <div class="btn-group mr-2">
85 + <button type="button" class="btn btn-sm btn-outline-secondary" onclick="GoNewFolder();">새 폴더</button>
86 + <button type="button" class="btn btn-sm btn-outline-secondary" onclick="GoUpload();">파일 업로드</button>
87 + </div>
88 + </div>
89 + <div id="menu-top-trash" style="display:none;" class="btn-toolbar mb-2 mb-md-0">
90 + <div class="btn-group mr-2">
91 + <button type="button" class="btn btn-sm btn-outline-secondary" onclick="EmptyTrash();">휴지통 비우기</button>
92 + </div>
93 + </div>
94 + </div>
95 + <div id="share-pop"></div>
96 + <div id="upload-progress" style="display:none;" class="progress mb-3">
97 + <div id="progress-val" class="progress-bar" role="progressbar"></div>
98 + </div>
99 + <div class="table-responsive table-hover">
100 + <table class="table table-sm">
101 + <thead>
102 + <tr>
103 + <th class="w-50">이름</th>
104 + <th>마지막으로 수정한 날짜</th>
105 + <th>크기</th>
106 + <th><span data-feather="more-horizontal"></span></th>
107 + </tr>
108 + </thead>
109 + <tbody id="file_items"></tbody>
110 + </table>
111 + </div>
112 + </main>
113 + <main id="add_group" style="display:none;" role="main" class="col-md-9 ml-sm-auto col-lg-10 px-md-4">
114 + <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 mb-3">
115 + <h1 class="h2">그룹 추가</h1>
116 + </div>
117 + <div class="accordion" id="accordionExample">
118 + <div class="card">
119 + <div class="card-header" id="headingOne">
120 + <h2 class="mb-0">
121 + <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
122 + 초대코드로 그룹 가입하기
123 + </button>
124 + </h2>
125 + </div>
126 + <div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordionExample">
127 + <div class="card-body">
128 + <form>
129 + <div class="form-group">
130 + <label for="input-invite-code">그룹 초대코드</label>
131 + <input type="text" class="form-control" id="input-invite-code">
132 + <small class="form-text text-muted">그룹장으로부터 받은 초대코드를 입력해주세요.</small>
133 + <small class="form-text text-muted">그룹장은 그룹설정에서 초대코드를 확인할 수 있습니다.</small>
134 + </div>
135 + <button type="button" class="btn btn-primary" onclick="GroupJoin();">가입</button>
136 + </form>
137 + </div>
138 + </div>
139 + </div>
140 + <div class="card">
141 + <div class="card-header" id="headingTwo">
142 + <h2 class="mb-0">
143 + <button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
144 + 그룹 생성하기
145 + </button>
146 + </h2>
147 + </div>
148 + <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionExample">
149 + <div class="card-body">
150 + <form>
151 + <div class="form-group">
152 + <label for="input-group-name">그룹명</label>
153 + <input type="text" class="form-control" id="input-group-name">
154 + <small class="form-text text-muted">그룹에 업로드 되는 파일의 비용은 그룹장에게 청구됩니다.</small>
155 + <small class="form-text text-muted">그룹원은 폴더 생성, 파일 업로드, 파일 다운로드만 가능합니다.</small>
156 + </div>
157 + <button type="button" class="btn btn-success" onclick="GroupCreate();">생성</button>
158 + </form>
159 + </div>
160 + </div>
161 + </div>
162 + </div>
163 + </main>
164 + <main id="manage_group" style="display:none;" role="main" class="col-md-9 ml-sm-auto col-lg-10 px-md-4">
165 + <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 mb-3">
166 + <h1 class="h2">그룹 설정</h1>
167 + </div>
168 + <div class="accordion" id="manage_group_accord">
169 + <div class="card">
170 + <div class="card-header">
171 + <h2 class="mb-0">
172 + <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#manage_group_accord1" aria-expanded="true" aria-controls="collapseOne">
173 + 그룹명 변경
174 + </button>
175 + </h2>
176 + </div>
177 + <div id="manage_group_accord1" class="collapse" data-parent="#manage_group_accord">
178 + <div class="card-body">
179 + <form>
180 + <div class="form-group">
181 + <label for="input-invite-code">변경할 그룹명</label>
182 + <input type="text" class="form-control" id="change-group-name">
183 + <small class="form-text text-muted">변경할 그룹명을 입력해주세요.</small>
184 + <small class="form-text text-muted">모든 그룹원에게 변경이 반영됩니다.</small>
185 + </div>
186 + <button type="button" class="btn btn-primary" onclick="GroupJoin();">변경</button>
187 + </form>
188 + </div>
189 + </div>
190 + </div>
191 + <div class="card">
192 + <div class="card-header">
193 + <h2 class="mb-0">
194 + <button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#manage_group_accord2" aria-expanded="false" aria-controls="collapseTwo">
195 + 초대코드 조회 및 재발급
196 + </button>
197 + </h2>
198 + </div>
199 + <div id="manage_group_accord2" class="collapse" data-parent="#manage_group_accord">
200 + <div class="card-body">
201 + <form>
202 + <div class="form-group">
203 + <label for="input-group-name">초대코드</label>
204 + <input type="text" class="form-control" id="group-invite-code" readonly>
205 + <small class="form-text text-muted">위의 초대코드를 입력하면 그룹원이 가입할 수 있습니다.</small>
206 + </div>
207 + <button type="button" class="btn btn-success" onclick="GroupCreate();">재발급</button>
208 + <small class="form-text text-muted">재발급할 경우 기존의 초대코드로는 더 이상 가입할 수 없습니다.</small>
209 + </form>
210 + </div>
211 + </div>
212 + </div>
213 + <div class="card">
214 + <div class="card-header">
215 + <h2 class="mb-0">
216 + <button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#manage_group_accord3" aria-expanded="false" aria-controls="collapseTwo">
217 + 그룹원 관리
218 + </button>
219 + </h2>
220 + </div>
221 + <div id="manage_group_accord3" class="collapse" data-parent="#manage_group_accord">
222 + <div class="card-body">
223 + <ul class="list-group">
224 + <li class="list-group-item d-flex justify-content-between align-items-center">
225 + Cras justo odio
226 + <a href="#" class="badge badge-danger">그룹원 삭제</a>
227 + </li>
228 + <li class="list-group-item d-flex justify-content-between align-items-center">
229 + Cras justo odio
230 + <a href="#" class="badge badge-danger">그룹원 삭제</a>
231 + </li>
232 + </ul>
233 + </div>
234 + </div>
235 + </div>
236 + <div class="card">
237 + <div class="card-header">
238 + <h2 class="mb-0">
239 + <button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#manage_group_accord4" aria-expanded="false" aria-controls="collapseTwo">
240 + 그룹 탈퇴
241 + </button>
242 + </h2>
243 + </div>
244 + <div id="manage_group_accord4" class="collapse" data-parent="#manage_group_accord">
245 + <div class="card-body">
246 + <form>
247 + <button type="button" class="btn btn-warning" onclick="GroupCreate();">그룹 탈퇴</button>
248 + <small class="form-text text-muted">탈퇴하면 그룹 내 파일에 접근할 수 없습니다.</small>
249 + <small class="form-text text-muted">초대코드를 받으면 재가입할 수 있습니다.</small>
250 + </form>
251 + </div>
252 + </div>
253 + </div>
254 + <div class="card">
255 + <div class="card-header">
256 + <h2 class="mb-0">
257 + <button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#manage_group_accord5" aria-expanded="false" aria-controls="collapseTwo">
258 + 그룹 삭제
259 + </button>
260 + </h2>
261 + </div>
262 + <div id="manage_group_accord5" class="collapse" data-parent="#manage_group_accord">
263 + <div class="card-body">
264 + <form>
265 + <button type="button" class="btn btn-danger" onclick="GroupCreate();">그룹 삭제</button>
266 + <small class="form-text text-muted">그룹내의 모든 파일이 영구적으로 삭제되며 복구할 수 없습니다.</small>
267 + </form>
268 + </div>
269 + </div>
270 + </div>
271 + </div>
272 + </main>
273 + </div>
274 +</div>
275 +<div id="modal-new-folder" class="modal" tabindex="-1" role="dialog">
276 + <div class="modal-dialog">
277 + <div class="modal-content">
278 + <div class="modal-header">
279 + <h5 class="modal-title">새 폴더</h5>
280 + <button type="button" class="close" data-dismiss="modal" aria-label="Close">
281 + <span aria-hidden="true">&times;</span>
282 + </button>
283 + </div>
284 + <div class="modal-body">
285 + <input id="new-folder-name" type="text" class="form-control" placeholder="폴더명">
286 + </div>
287 + <div class="modal-footer">
288 + <button type="button" class="btn btn-secondary" data-dismiss="modal">닫기</button>
289 + <button type="button" class="btn btn-primary" onclick="CreateFolder();">생성</button>
290 + </div>
291 + </div>
292 + </div>
293 +</div>
294 +<div id="modal-rename" class="modal" tabindex="-1" role="dialog">
295 + <div class="modal-dialog">
296 + <div class="modal-content">
297 + <div class="modal-header">
298 + <h5 class="modal-title">이름 바꾸기</h5>
299 + <button type="button" class="close" data-dismiss="modal" aria-label="Close">
300 + <span aria-hidden="true">&times;</span>
301 + </button>
302 + </div>
303 + <div class="modal-body">
304 + <input id="new-rename" type="text" class="form-control" placeholder="바꿀 이름">
305 + <input id="new-rename-id" type="hidden">
306 + </div>
307 + <div class="modal-footer">
308 + <button type="button" class="btn btn-secondary" data-dismiss="modal">닫기</button>
309 + <button type="button" class="btn btn-primary" onclick="Rename();">변경</button>
310 + </div>
311 + </div>
312 + </div>
313 +</div>
314 +<div id="modal-move" class="modal" tabindex="-1" role="dialog">
315 + <div class="modal-dialog">
316 + <div class="modal-content">
317 + <div class="modal-header">
318 + <h5 class="modal-title">이동</h5>
319 + <button type="button" class="close" data-dismiss="modal" aria-label="Close">
320 + <span aria-hidden="true">&times;</span>
321 + </button>
322 + </div>
323 + <div class="modal-body">
324 + <input id="new-folder" type="text" class="form-control" placeholder="이동할 폴더 ID">
325 + <input id="new-move-id" type="hidden">
326 + </div>
327 + <div class="modal-footer">
328 + <button type="button" class="btn btn-secondary" data-dismiss="modal">닫기</button>
329 + <button type="button" class="btn btn-primary" onclick="Move();">이동</button>
330 + </div>
331 + </div>
332 + </div>
333 +</div>
334 +<form id="login" style="display:none;" class="form-signin" onsubmit="doLogin();return false;">
335 + <h1 class="h3 mb-3 font-weight-normal">KhuBox 로그인</h1>
336 + <input type="email" id="login-email" class="form-control input-top" placeholder="이메일 주소" required>
337 + <input type="password" id="login-password" class="form-control input-bot" placeholder="비밀번호" required>
338 + <button class="btn btn-lg btn-primary btn-block" type="submit">로그인</button>
339 + <a class="btn btn-success btn-sm btn-block" href="#!/register">회원가입</a>
340 +</form>
341 +<form id="register" style="display:none;" class="form-signin" onsubmit="doRegister();return false;">
342 + <h1 class="h3 mb-3 font-weight-normal">KhuBox 로그인</h1>
343 + <input type="email" id="register-email" class="form-control input-top" placeholder="이메일 주소" required>
344 + <input type="password" id="register-password" class="form-control input-mid" placeholder="비밀번호" required>
345 + <input type="password" id="register-password_re" class="form-control input-mid" placeholder="비밀번호 확인" required>
346 + <input type="text" id="register-name" class="form-control input-bot" placeholder="이름" required>
347 + <button class="btn btn-lg btn-primary btn-block" type="submit">회원가입</button>
348 + <a class="btn btn-success btn-sm btn-block" href="#!/login">로그인으로 돌아가기</a>
349 +</form>
350 +<input id="upload-file" type="file" hidden>
351 +<script src="static/js/jquery-3.5.1.min.js"></script>
352 +<script src="static/js/bootstrap.bundle.min.js"></script>
353 +<script src="static/js/feather.min.js"></script>
354 +<script src="static/js/main.js"></script>
355 +</body>
356 +</html>
1 -{
2 - "compilerOptions": {
3 - "baseUrl": "src"
4 - },
5 - "include": ["src"]
6 -}
1 -{
2 - "name": "khubox",
3 - "author": "2020-1_KHU_CloudComputing_E",
4 - "email": "16wjlee@khu.ac.kr",
5 - "licence": "MIT",
6 - "version": "0.0.1",
7 - "private": false,
8 - "scripts": {
9 - "start": "react-scripts start",
10 - "build": "react-scripts build",
11 - "test": "react-scripts test",
12 - "eject": "react-scripts eject"
13 - },
14 - "eslintConfig": {
15 - "extends": "react-app"
16 - },
17 - "browserslist": {
18 - "production": [
19 - ">0.2%",
20 - "not dead",
21 - "not op_mini all"
22 - ],
23 - "development": [
24 - "last 1 chrome version",
25 - "last 1 firefox version",
26 - "last 1 safari version"
27 - ]
28 - },
29 - "dependencies": {
30 - "@material-ui/core": "^4.2.1",
31 - "@material-ui/icons": "^4.2.1",
32 - "@material-ui/styles": "^4.2.1",
33 - "chart.js": "^2.8.0",
34 - "clsx": "^1.0.4",
35 - "history": "^4.9.0",
36 - "moment": "2.24.0",
37 - "moment-timezone": "^0.5.28",
38 - "node-sass": "^4.12.0",
39 - "prop-types": "^15.7.2",
40 - "react": "^16.8.6",
41 - "react-chartjs-2": "^2.7.6",
42 - "react-dom": "^16.8.6",
43 - "react-perfect-scrollbar": "^1.5.3",
44 - "react-router-dom": "^5.0.1",
45 - "react-scripts": "^3.0.1",
46 - "recompose": "^0.30.0",
47 - "underscore": "^1.9.1",
48 - "uuid": "^3.3.2",
49 - "validate.js": "^0.13.1"
50 - },
51 - "devDependencies": {
52 - "eslint-plugin-prettier": "^3.0.1",
53 - "eslint-plugin-react": "^7.12.4",
54 - "prettier": "^1.17.1",
55 - "prettier-eslint": "^8.8.2",
56 - "prettier-eslint-cli": "^4.7.1",
57 - "typescript": "^3.5.1"
58 - }
59 -}
1 -/* /index.html 200
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
1 -<svg width="133" height="36" viewBox="0 0 133 36" fill="none" xmlns="http://www.w3.org/2000/svg">
2 -<g id="Group 2">
3 -<g id="flex">
4 -<path id="Combined Shape" fill-rule="evenodd" clip-rule="evenodd" d="M0 18.1065C0 27.9411 8.05887 36 18.1065 36C27.9411 36 36 27.9411 36 18.1065C36 8.05887 27.9411 0 18.1065 0C8.05887 0 0 8.05887 0 18.1065ZM33.7263 18.1065C33.7263 26.6854 26.6854 33.7263 18.1065 33.7263C9.34353 33.7263 2.27368 26.714 2.27368 18.1065C2.27368 9.3146 9.3146 2.27368 18.1065 2.27368C26.714 2.27368 33.7263 9.34353 33.7263 18.1065Z" fill="white"/>
5 -<path id="Oval 3" fill-rule="evenodd" clip-rule="evenodd" d="M16.4288 13.5917C16.7107 13.359 17.0649 13.2318 17.4305 13.2318C17.7922 13.2318 18.1429 13.3564 18.4235 13.5846L22.6335 17.0082C23.0074 17.3123 23.5156 17.3923 23.9648 17.218L25.9502 16.4474C26.1292 16.3779 26.3302 16.4036 26.4851 16.517C27.0788 16.9516 28.5751 18.0497 29.1289 18.482C30.4861 19.5416 31.486 20.25 31.486 20.25C31.486 20.25 31.4686 19.8601 31.486 19.4401C31.846 10.718 25.2324 4.39017 17.8022 4.50144C10.3803 4.61568 4.38132 10.5662 4.50178 18.8354C4.51309 19.5319 4.6193 20.25 4.6193 20.25L6.50953 18.8354L8.80622 17.1806C9.12242 16.9528 9.54513 16.9393 9.87525 17.1464L10.7991 17.7261C11.0088 17.8577 11.2793 17.8402 11.4703 17.6826L16.4288 13.5917Z" fill="white"/>
6 -<path id="Oval 4" fill-rule="evenodd" clip-rule="evenodd" d="M16.6359 34.7904C18.8195 35.0437 20.6187 34.6644 21.2437 34.486C21.5288 34.4046 22.5941 34.144 22.8452 34.0596C23.6863 33.777 24.9699 33.1782 25.7013 32.7418C26.7957 32.0887 27.5685 31.4007 28.6388 30.4354C31.015 28.2924 32.625 24.3249 32.625 23.92C32.625 23.8287 28.2146 20.5068 26.9191 19.5329C26.7151 19.3796 26.4318 19.4032 26.253 19.5853C26.0843 19.7571 26.0583 20.0226 26.1911 20.2234C26.6343 20.894 27.5743 22.3246 27.6195 22.4617C27.792 22.9849 27.5465 23.2804 27.3009 23.1231C27.0553 22.9658 21.5646 19.2672 21.5646 19.2672L18.2802 16.9963C17.8686 16.7117 17.3068 17.0063 17.3068 17.5066C17.3068 17.5066 17.1957 19.1166 17.1957 20.1676C17.1957 20.5941 17.1518 21.1118 16.6359 21.246C16.3774 21.3132 15.7234 21.3527 15.7234 21.3527L10.1751 20.9334C9.79851 20.905 9.58736 21.358 9.85128 21.6281C9.85128 21.6281 17.1957 26.5849 17.1957 26.9884C17.1957 27.846 14.552 26.4718 12.4773 25.4639C9.95208 24.2372 7.14641 23.1341 6.44734 22.8633C6.34242 22.8227 6.22787 22.8316 6.13033 22.8877C5.52897 23.2335 3.35694 24.4869 3.37515 24.5407C4.0878 26.6437 5.97806 29.7235 8.8419 31.7745C9.987 32.5946 11.3079 33.3606 12.5939 33.8365C14.0645 34.3806 15.6064 34.7904 16.6359 34.7904Z" fill="white"/>
7 -</g>
8 -<path id="Devias Material Kit" d="M45.4453 25V10.7812H49.6445C50.901 10.7812 52.0143 11.0612 52.9844 11.6211C53.9609 12.181 54.7161 12.9753 55.25 14.0039C55.7839 15.0326 56.0508 16.2109 56.0508 17.5391V18.252C56.0508 19.5996 55.7806 20.7845 55.2402 21.8066C54.7064 22.8288 53.9414 23.6165 52.9453 24.1699C51.9557 24.7233 50.8197 25 49.5371 25H45.4453ZM47.916 12.7734V23.0273H49.5273C50.8229 23.0273 51.8158 22.6237 52.5059 21.8164C53.2025 21.0026 53.5573 19.8372 53.5703 18.3203V17.5293C53.5703 15.9863 53.235 14.8079 52.5645 13.9941C51.8939 13.1803 50.9206 12.7734 49.6445 12.7734H47.916ZM62.88 25.1953C61.3761 25.1953 60.1554 24.7233 59.2179 23.7793C58.2869 22.8288 57.8214 21.5658 57.8214 19.9902V19.6973C57.8214 18.6426 58.0232 17.7018 58.4269 16.875C58.837 16.0417 59.4099 15.3939 60.1456 14.9316C60.8813 14.4694 61.7016 14.2383 62.6066 14.2383C64.0454 14.2383 65.1554 14.6973 65.9366 15.6152C66.7244 16.5332 67.1183 17.832 67.1183 19.5117V20.4688H60.214C60.2856 21.3411 60.5753 22.0312 61.0831 22.5391C61.5974 23.0469 62.242 23.3008 63.0167 23.3008C64.1039 23.3008 64.9894 22.8613 65.673 21.9824L66.9523 23.2031C66.5291 23.8346 65.9627 24.3262 65.253 24.6777C64.5499 25.0228 63.7589 25.1953 62.88 25.1953ZM62.5968 16.1426C61.9457 16.1426 61.4184 16.3704 61.0148 16.8262C60.6176 17.2819 60.3637 17.9167 60.253 18.7305H64.7745V18.5547C64.7224 17.7604 64.5109 17.1615 64.1398 16.7578C63.7687 16.3477 63.2543 16.1426 62.5968 16.1426ZM72.5022 21.9922L74.7385 14.4336H77.1897L73.5276 25H71.467L67.7756 14.4336H70.2365L72.5022 21.9922ZM81.1478 25H78.7747V14.4336H81.1478V25ZM78.6283 11.6895C78.6283 11.3249 78.7422 11.0221 78.9701 10.7812C79.2044 10.5404 79.5365 10.4199 79.9661 10.4199C80.3958 10.4199 80.7279 10.5404 80.9622 10.7812C81.1966 11.0221 81.3138 11.3249 81.3138 11.6895C81.3138 12.0475 81.1966 12.347 80.9622 12.5879C80.7279 12.8223 80.3958 12.9395 79.9661 12.9395C79.5365 12.9395 79.2044 12.8223 78.9701 12.5879C78.7422 12.347 78.6283 12.0475 78.6283 11.6895ZM89.9985 25C89.8943 24.7982 89.8032 24.4694 89.725 24.0137C88.9698 24.8014 88.0454 25.1953 86.9516 25.1953C85.8904 25.1953 85.0245 24.8926 84.354 24.2871C83.6834 23.6816 83.3481 22.9329 83.3481 22.041C83.3481 20.9147 83.7648 20.0521 84.5981 19.4531C85.4379 18.8477 86.6359 18.5449 88.1918 18.5449H89.6469V17.8516C89.6469 17.3047 89.4939 16.8685 89.1879 16.543C88.8819 16.2109 88.4165 16.0449 87.7915 16.0449C87.2511 16.0449 86.8084 16.1816 86.4633 16.4551C86.1183 16.722 85.9457 17.0638 85.9457 17.4805H83.5727C83.5727 16.901 83.7648 16.3607 84.1489 15.8594C84.533 15.3516 85.0538 14.9544 85.7114 14.668C86.3754 14.3815 87.1144 14.2383 87.9282 14.2383C89.1651 14.2383 90.1515 14.5508 90.8872 15.1758C91.6228 15.7943 92.0004 16.6667 92.02 17.793V22.5586C92.02 23.5091 92.1534 24.2676 92.4204 24.834V25H89.9985ZM87.3911 23.291C87.8598 23.291 88.2993 23.1771 88.7094 22.9492C89.1261 22.7214 89.4386 22.4154 89.6469 22.0312V20.0391H88.3676C87.4887 20.0391 86.8279 20.1921 86.3852 20.498C85.9425 20.804 85.7211 21.237 85.7211 21.7969C85.7211 22.2526 85.8709 22.6172 86.1704 22.8906C86.4763 23.1576 86.8832 23.291 87.3911 23.291ZM100.373 22.1289C100.373 21.7057 100.197 21.3835 99.8453 21.1621C99.5002 20.9408 98.924 20.7454 98.1168 20.5762C97.3095 20.4069 96.6356 20.1921 96.0953 19.9316C94.9104 19.3587 94.3179 18.5286 94.3179 17.4414C94.3179 16.5299 94.702 15.7682 95.4703 15.1562C96.2385 14.5443 97.2151 14.2383 98.4 14.2383C99.663 14.2383 100.682 14.5508 101.457 15.1758C102.238 15.8008 102.628 16.6113 102.628 17.6074H100.255C100.255 17.1517 100.086 16.7741 99.7476 16.4746C99.4091 16.1686 98.9599 16.0156 98.4 16.0156C97.8791 16.0156 97.4527 16.1361 97.1207 16.377C96.7951 16.6178 96.6324 16.9401 96.6324 17.3438C96.6324 17.7083 96.7854 17.9915 97.0914 18.1934C97.3974 18.3952 98.0158 18.6003 98.9468 18.8086C99.8778 19.0104 100.607 19.2546 101.134 19.541C101.668 19.821 102.062 20.1595 102.316 20.5566C102.576 20.9538 102.707 21.4355 102.707 22.002C102.707 22.9525 102.313 23.724 101.525 24.3164C100.737 24.9023 99.7053 25.1953 98.4293 25.1953C97.5634 25.1953 96.7919 25.0391 96.1148 24.7266C95.4377 24.4141 94.9104 23.9844 94.5328 23.4375C94.1552 22.8906 93.9664 22.3014 93.9664 21.6699H96.271C96.3036 22.2298 96.5152 22.6628 96.9058 22.9688C97.2964 23.2682 97.814 23.418 98.4585 23.418C99.0835 23.418 99.5588 23.3008 99.8843 23.0664C100.21 22.8255 100.373 22.513 100.373 22.1289ZM113.963 18.8574L112.351 20.5664V25H109.881V10.7812H112.351V17.4512L113.719 15.7617L117.879 10.7812H120.867L115.584 17.0801L121.17 25H118.24L113.963 18.8574ZM124.737 25H122.364V14.4336H124.737V25ZM122.218 11.6895C122.218 11.3249 122.332 11.0221 122.559 10.7812C122.794 10.5404 123.126 10.4199 123.556 10.4199C123.985 10.4199 124.317 10.5404 124.552 10.7812C124.786 11.0221 124.903 11.3249 124.903 11.6895C124.903 12.0475 124.786 12.347 124.552 12.5879C124.317 12.8223 123.985 12.9395 123.556 12.9395C123.126 12.9395 122.794 12.8223 122.559 12.5879C122.332 12.347 122.218 12.0475 122.218 11.6895ZM130.248 11.8652V14.4336H132.113V16.1914H130.248V22.0898C130.248 22.4935 130.326 22.7865 130.482 22.9688C130.645 23.1445 130.932 23.2324 131.342 23.2324C131.615 23.2324 131.892 23.1999 132.172 23.1348V24.9707C131.632 25.1204 131.111 25.1953 130.609 25.1953C128.786 25.1953 127.875 24.1895 127.875 22.1777V16.1914H126.137V14.4336H127.875V11.8652H130.248Z" fill="white"/>
9 -</g>
10 -</svg>
1 -<svg id="fd59ce54-f850-4dfc-bc34-dd7d379d600e" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1074.392" height="584.231" viewBox="0 0 1074.392 584.231"><title>page not found</title><ellipse cx="540.64346" cy="549.3094" rx="527.5" ry="34.9216" fill="#f2f2f2"/><path d="M583.47969,324.89424c-85.94407,0-147.651,55.13938-147.651,183.79791,0,145.813,61.70691,184.41057,147.651,184.41057s151.327-42.27352,151.327-184.41057C734.80664,356.75255,669.42376,324.89424,583.47969,324.89424Zm.56495,319.80837c-59.52686,0-90.62592-34.92288-90.62592-135.9163,0-89.11185,32.37209-136.10461,91.899-136.10461s91.899,30.86774,91.899,136.10461C677.21663,607.23367,643.5715,644.70261,584.04464,644.70261Z" transform="translate(-63.054 -157.8845)" fill="#2f2e41"/><path d="M384.36531,591.40121H348.831V486.76183A20.95585,20.95585,0,0,0,327.87517,465.806h-8.32638a20.95585,20.95585,0,0,0-20.95586,20.95585V591.40121H198.36285a11.96327,11.96327,0,0,1-10.57763-17.552l106.0824-200.78034A20.95585,20.95585,0,0,0,284.28724,344.33l-6.26231-2.9572a20.95585,20.95585,0,0,0-27.4293,9.07005L121.21416,592.4754a28.41578,28.41578,0,0,0-3.35584,13.39612v0a28.41583,28.41583,0,0,0,28.41584,28.41583H298.59293v66.16727a25.119,25.119,0,0,0,25.119,25.119h.00005a25.119,25.119,0,0,0,25.119-25.119V634.28739h35.53428a21.44307,21.44307,0,0,0,21.44307-21.44307v0A21.44307,21.44307,0,0,0,384.36531,591.40121Z" transform="translate(-63.054 -157.8845)" fill="#6c63ff"/><path d="M1042.36183,591.40121h-35.53428V486.76183A20.95585,20.95585,0,0,0,985.87169,465.806h-8.32638a20.95585,20.95585,0,0,0-20.95586,20.95585V591.40121H856.35937a11.96326,11.96326,0,0,1-10.57763-17.552L951.86413,373.06891A20.95586,20.95586,0,0,0,942.28376,344.33l-6.26231-2.9572a20.95586,20.95586,0,0,0-27.42931,9.07005L779.21068,592.4754a28.41578,28.41578,0,0,0-3.35584,13.39612v0a28.41583,28.41583,0,0,0,28.41583,28.41583H956.58945v66.16727a25.119,25.119,0,0,0,25.119,25.119h0a25.119,25.119,0,0,0,25.119-25.119V634.28739h35.53428a21.44307,21.44307,0,0,0,21.44307-21.44307v0A21.44307,21.44307,0,0,0,1042.36183,591.40121Z" transform="translate(-63.054 -157.8845)" fill="#6c63ff"/><path d="M394.16787,579.148H358.63358V474.50864a20.95585,20.95585,0,0,0-20.95585-20.95586h-8.32638a20.95586,20.95586,0,0,0-20.95586,20.95586V579.148H208.16541a11.96327,11.96327,0,0,1-10.57763-17.552L303.67017,360.81572a20.95586,20.95586,0,0,0-9.58037-28.73893l-6.26231-2.9572a20.95586,20.95586,0,0,0-27.42931,9.07L131.01672,580.2222a28.41582,28.41582,0,0,0-3.35584,13.39613v0a28.41583,28.41583,0,0,0,28.41583,28.41583H308.39549v66.16727a25.119,25.119,0,0,0,25.119,25.119h.00005a25.119,25.119,0,0,0,25.119-25.119V622.0342h35.53429a21.44307,21.44307,0,0,0,21.44307-21.44307v0A21.44307,21.44307,0,0,0,394.16787,579.148Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M1060.74162,579.148h-35.53428V474.50864a20.95586,20.95586,0,0,0-20.95586-20.95586H995.9251a20.95586,20.95586,0,0,0-20.95586,20.95586V579.148H874.73916a11.96327,11.96327,0,0,1-10.57763-17.552L970.24392,360.81572a20.95586,20.95586,0,0,0-9.58037-28.73893l-6.26231-2.9572a20.95586,20.95586,0,0,0-27.42931,9.07L797.59047,580.2222a28.41582,28.41582,0,0,0-3.35584,13.39613v0a28.41583,28.41583,0,0,0,28.41583,28.41583H974.96924v66.16727a25.119,25.119,0,0,0,25.119,25.119h0a25.119,25.119,0,0,0,25.119-25.119V622.0342h35.53428a21.44307,21.44307,0,0,0,21.44307-21.44307v0A21.44307,21.44307,0,0,0,1060.74162,579.148Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M603.0848,313.86637c-85.94407,0-147.651,55.13937-147.651,183.79791,0,145.813,61.70691,184.41057,147.651,184.41057s151.327-42.27352,151.327-184.41057C754.41175,345.72467,689.02887,313.86637,603.0848,313.86637Zm.565,319.80836c-59.52686,0-90.62592-34.92287-90.62592-135.91629,0-89.11185,32.37209-136.10461,91.899-136.10461s91.899,30.86774,91.899,136.10461C696.82174,596.20579,663.17661,633.67473,603.64975,633.67473Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><circle cx="471.14108" cy="18.25044" r="12.90118" fill="#2f2e41"/><ellipse cx="502.60736" cy="46.88476" rx="36.18622" ry="46.88476" fill="#2f2e41"/><path d="M565.66136,237.49419c-18.1276,0-33.1413-17.27052-35.77576-39.80484a60.9759,60.9759,0,0,0-.41046,7.07991c0,25.89373,16.20114,46.88476,36.18622,46.88476s36.18623-20.991,36.18623-46.88476a60.9759,60.9759,0,0,0-.41046-7.07991C598.80267,220.22367,583.789,237.49419,565.66136,237.49419Z" transform="translate(-63.054 -157.8845)" opacity="0.1"/><path d="M639.29619,342.07326c-.77711,3.19345-4.12792,5.751-7.83881,7.53791-7.80188,3.75682-17.4253,4.87788-26.7597,5.25418a45.17622,45.17622,0,0,1-7.1445-.132,20.5371,20.5371,0,0,1-12.25052-5.63141,1.68086,1.68086,0,0,1,.04371-2.84388c4.9694-5.45888,13.2622-8.80605,21.61613-11.21609,6.3344-1.82743,17.3813-6.56089,24.29013-5.9221C637.94444,329.73864,640.2774,338.04112,639.29619,342.07326Z" transform="translate(-63.054 -157.8845)" fill="#3f3d56"/><path d="M639.29619,342.07326c-.77711,3.19345-4.12792,5.751-7.83881,7.53791-7.80188,3.75682-17.4253,4.87788-26.7597,5.25418a45.17622,45.17622,0,0,1-7.1445-.132,20.5371,20.5371,0,0,1-12.25052-5.63141,1.68086,1.68086,0,0,1,.04371-2.84388c4.9694-5.45888,13.2622-8.80605,21.61613-11.21609,6.3344-1.82743,17.3813-6.56089,24.29013-5.9221C637.94444,329.73864,640.2774,338.04112,639.29619,342.07326Z" transform="translate(-63.054 -157.8845)" opacity="0.1"/><path d="M540.09786,318.2059a19.76967,19.76967,0,0,0-1.1987,15.07476,26.33914,26.33914,0,0,0,8.82921,12.49683c10.09467,8.09163,23.98784,9.20512,36.92477,9.09278a284.6495,284.6495,0,0,0,33.90525-2.32384,40.53788,40.53788,0,0,0,11.00143-2.55442c4.22242-1.82679,7.93282-5.17756,9.436-9.5257s.43625-9.67246-3.13383-12.57428c-3.13686-2.54969-7.46265-2.9004-11.49775-3.14289l-23.08764-1.38745c2.281-2.30839,5.31816-3.614,8.09586-5.29216,3.68523-2.22642,6.13358-5.96455,8.81312-9.33471a129.00143,129.00143,0,0,1,13.4386-13.817c.75138,4.31038,3.4782,7.8499,6.68733,10.824s6.90841,5.36845,10.2439,8.20013c8.0786,6.85838,13.89583,16.1669,22.39215,22.50043a43.82885,43.82885,0,0,0,16.04862-8.0122l-3.30209-5.98141a3.94,3.94,0,0,0-1.24459-1.55282c-.93465-.575-2.13975-.27872-3.225-.44144-2.90082-.435-4.16771-3.784-5.306-6.48737-3.12491-7.42173-9.108-13.17993-14.21783-19.40381a98.00854,98.00854,0,0,1-9.99577-14.72284c-1.71652-3.10162-3.288-6.33107-5.61746-9.00321s-5.59358-4.773-9.1385-4.78051c-3.13222-.00662-6.02122,1.58355-8.71422,3.18308a230.47679,230.47679,0,0,0-23.63018,16.09894c-3.94376,3.0617-7.86306,6.29645-12.48933,8.17393-1.94748.79035-4.00044,1.33052-5.86924,2.29223-3.27313,1.6844-5.75721,4.53435-8.43128,7.06415C566.27712,311.89225,553.219,317.73841,540.09786,318.2059Z" transform="translate(-63.054 -157.8845)" fill="#3f3d56"/><path d="M588.3737,253.98251a23.77444,23.77444,0,0,1-1.73379,8.03335,10.04492,10.04492,0,0,1-5.76772,5.57269,12.37513,12.37513,0,0,1-5.62306.18249,10.88232,10.88232,0,0,1-4.58151-1.56071c-2.16484-1.48837-3.24415-4.14413-3.63748-6.74325-.39333-2.596-.21714-5.24857-.46885-7.86342a42.94439,42.94439,0,0,0-1.202-6.25549c-.16993-.68282-.343-1.36248-.51294-2.04216-.16674-.67967-.33037-1.35935-.48141-2.039-.13847-.63878-.26745-1.28068-.37761-1.92574-.09123-.54436-.173-1.09189-.23285-1.64255a18.42329,18.42329,0,0,0-.80867-4.81118,14.60727,14.60727,0,0,0-1.68659-2.854c-.28635-.40906-.56326-.81811-.81815-1.24292a5.88984,5.88984,0,0,1-.97226-3.74763,3.286,3.286,0,0,1,.14788-.601c.02516-.07552.05347-.151.085-.2234A1.80187,1.80187,0,0,0,560.932,223.07a3.43341,3.43341,0,0,0-.14788-1.77783,11.31808,11.31808,0,0,0-.95974-2.28761c-.2643-.47829-1.16108-1.34046-1.16738-1.888-.0126-1.10132,2.13972-1.98867,3.01134-2.42291a16.79623,16.79623,0,0,1,8.59657-1.74323c1.90369.129,3.9679.71428,5.0189,2.30962.944,1.438.81807,3.30081,1.22085,4.97169a1.47068,1.47068,0,0,0,.29892.66393,1.34135,1.34135,0,0,0,.73948.33982,4.54948,4.54948,0,0,0,1.416.05666h.00315a2.93138,2.93138,0,0,0,.37128-.05351,4.957,4.957,0,0,0,2.03271-.8779q.58531-.15576,1.18-.25488a.25112.25112,0,0,0,.04725-.00945c1.57646,4.97482,1.781,10.30836,3.07111,15.37444.63874,2.52044,1.55442,5.00943,1.6834,7.60225.00945.11327.0126.2297.01575.34612.0189.83386-.04717,1.674-.0126,2.50472a6.981,6.981,0,0,0,.12591,1.1139,15.61121,15.61121,0,0,0,.52546,1.74325l.00945.02831c.05977.18251.11643.36817.16363.55381.03457.1353.06607.26747.09127.40277l.00311.00943A14.93754,14.93754,0,0,1,588.3737,253.98251Z" transform="translate(-63.054 -157.8845)" fill="#fbbebe"/><circle cx="503.23669" cy="44.99678" r="18.56511" fill="#fbbebe"/><path d="M684.15711,304.03278a30.445,30.445,0,0,0-5.236-14.10317q.72216,4.29513,1.44748,8.58714a3.214,3.214,0,0,1-3.36688-1.03523,10.33663,10.33663,0,0,1-1.76529-3.27565,67.46571,67.46571,0,0,0-8.2095-14.73567c-11.81876-.98489-23.50223-5.88418-33.89555-11.59532-10.39643-5.708-20.12582-12.5519-30.38382-18.50217a43.57346,43.57346,0,0,0-5.54436-2.832c-3.20954-1.287-6.81242-1.95406-9.85526-3.46759-.2045-.1007-.409-.20767-.61043-.31781a12.57834,12.57834,0,0,1-1.94459-1.30584,10.34363,10.34363,0,0,1-.93139-.8559,20.35115,20.35115,0,0,1-3.55886-5.95341c-1.63308-3.61232-2.21524-7.97041-3.84517-11.58274a11.20292,11.20292,0,0,1,2.50156-1.76525h.00315c.13213-.06924.2643-.13532.39962-.19824a11.9404,11.9404,0,0,1,2.00437-.73317q.58531-.15576,1.18-.25488a.25112.25112,0,0,0,.04725-.00945,11.56564,11.56564,0,0,1,5.49085.43424c2.58652.87477,4.76711,2.62115,6.94148,4.27313a114.02006,114.02006,0,0,1,10.14787,8.04908c1.79357,1.718,3.4298,3.606,5.35868,5.16676a42.14393,42.14393,0,0,0,5.05662,3.35116q15.65613,9.32658,31.31525,18.65005c3.53365,2.1051,7.07046,4.21019,10.52553,6.438,5.24855,3.38578,10.30828,7.05474,15.36493,10.72057q4.46978,3.23787,8.93647,6.47889a9.72771,9.72771,0,0,1,2.533,2.3411,8.4724,8.4724,0,0,1,1.12337,3.433A31.3874,31.3874,0,0,1,684.15711,304.03278Z" transform="translate(-63.054 -157.8845)" fill="#fbbebe"/><path d="M592.97726,267.9441c-1.25235,5.61674-6.92888,9.012-9.89617,13.94586-3.68784,6.12335-2.18378,13.241-.79922,20.25484q-3.79485,3.27095-7.59285,6.54186c-1.39708,1.19886-2.79417,2.404-4.29827,3.46444a57.35064,57.35064,0,0,1-6.85966,3.93956q-3.3606,1.72752-6.72119,3.45814a32.1282,32.1282,0,0,1-6.57961,2.78793c-4.41473,1.13278-9.10318.33982-13.4707-.97232a6.08761,6.08761,0,0,1-1.47264-.601,2.39351,2.39351,0,0,1-.69854-.63248,3.91067,3.91067,0,0,1-.44365-2.53933c.44365-7.35052,2.24036-14.54686,4.03081-21.68971a85.2598,85.2598,0,0,1,3.84832-12.57708,85.0766,85.0766,0,0,1,5.41538-10.151,68.36751,68.36751,0,0,1,7.92948-11.51353,18.47881,18.47881,0,0,0,3.67525-4.73882c1.11706-2.54876.686-5.472.91252-8.24732a17.14844,17.14844,0,0,1,1.63312-6.0069v-.00315a17.09326,17.09326,0,0,1,1.74321-2.88232q.45788,1.06671.91568,2.13027.30209.69855.59783,1.394.38706.89679.7678,1.78728,1.09973,2.55823,2.19637,5.11327a21.58968,21.58968,0,0,0,3.33538,5.944,6.49923,6.49923,0,0,0,11.12337-.85275,21.26125,21.26125,0,0,0,2.27185-6.0132,19.21547,19.21547,0,0,0,.25175-7.83509c-.75835-5.00945-2.88862-10.12585-4.43678-14.77972a14.94511,14.94511,0,0,1-1.07927-4.871,3.35144,3.35144,0,0,1,.05662-.56011c.00945-.04719.0189-.09754.02834-.14473a11.9404,11.9404,0,0,1,2.00437-.73317q.58531-.15576,1.18-.25488,2.04378,11.06355,4.09377,22.12709c.0315.17307.0661.34613.09756.52234.19509,1.05726.39333,2.11454.61358,3.16865.19828.95657.41223,1.91.65137,2.85715l.00945.02831c.08182.321.16678.63877.2549.95658l.00311.00943c.2423.86848.5129,1.73065.81811,2.58024C590.93825,257.47528,594.16355,262.62946,592.97726,267.9441Z" transform="translate(-63.054 -157.8845)" fill="#6c63ff"/><path d="M668.32144,346.87707a6.58269,6.58269,0,0,0,.61,3.14328c1.16192,2.12353,3.94981,2.60625,6.36228,2.80484a188.37688,188.37688,0,0,0,42.2657-1.28774,4.88565,4.88565,0,0,0,2.15136-.66766c1.98985-1.39509.76329-4.7951-1.40951-5.88355s-4.75126-.82614-7.1353-1.29748a22.47912,22.47912,0,0,1-6.67794-2.89617q-7.25234-4.16669-14.293-8.68808c-2.79453-1.79464-6.09272-3.70993-9.23987-2.64587C672.43,332.34264,668.26533,337.68065,668.32144,346.87707Z" transform="translate(-63.054 -157.8845)" fill="#3f3d56"/><path d="M564.43732,240.87367v.00315c-.022.13215-.04406.26116-.07237.39018-.0346.214-.07551.43108-.11642.645-.39018,1.99812-.86847,3.98678-1.41913,5.96287-1.5104,5.45939-3.53366,10.83069-5.54121,16.12332q-8.08055,21.28692-16.16423,42.577c-1.35936,3.57457-2.71554,7.15228-4.26054,10.65448-.516,1.16741-1.04782,2.34424-1.57647,3.53368-1.89427,4.25737-3.713,8.65322-4.31716,13.18436a27.44976,27.44976,0,0,0-.19194,9.04027c.60416,2.97042,2.40718,5.8716,5.22969,6.96977,1.37823.53808,3.35113,1.25865,2.97355,2.69037-.2045.78665-1.09817,1.17055-1.90057,1.3027a7.31234,7.31234,0,0,1-5.966-1.718c-1.50725-1.33732-2.66518-3.41725-4.66959-3.64065-1.38767-.151-2.66518.67966-3.93643,1.26178-5.18564,2.36942-11.22719.71114-16.674-.9723.42794-2.20579,2.64318-3.65953,4.84267-4.10006,2.19949-.44367,4.47449-.129,6.718-.18879a3.50958,3.50958,0,0,0,2.04216-.52549,3.70545,3.70545,0,0,0,1.10132-1.88169,78.96356,78.96356,0,0,0,3.21273-13.14661c.7237-4.66645,1.02581-9.40527,2.05787-14.01507.80241-3.59661,2.0422-7.07991,3.10572-10.61044a224.68238,224.68238,0,0,0,5.0598-22.07674,78.02019,78.02019,0,0,0,1.42543-9.36751c.17935-2.6117.09438-5.236.34609-7.83826a60.8877,60.8877,0,0,1,2.11141-9.99683q1.44427-5.34769,2.88547-10.68911c1.42544-5.2706,2.95465-10.74572,6.567-14.84264a13.96159,13.96159,0,0,1,10.02834-4.78915,9.8819,9.8819,0,0,1,2.13027.22969c.11639.02831.23285.05664.34923.0881a8.63447,8.63447,0,0,1,2.17437.89995c1.11388-.708,1.68025-.45942,2.41974.63246a6.97319,6.97319,0,0,1,.88107,3.79485A52.42378,52.42378,0,0,1,564.43732,240.87367Z" transform="translate(-63.054 -157.8845)" fill="#fbbebe"/><path d="M565.66136,245.0461l-.0472.04719-.25486.25488-2.5299,2.52675-1.23976-5.20767-4.25109-17.854a9.8819,9.8819,0,0,1,2.13027.22969,3.286,3.286,0,0,1,.14788-.601l.20135.68911,1.44118,4.90245,2.72811,9.30773.45,1.53241v.00315Z" transform="translate(-63.054 -157.8845)" fill="#6c63ff"/><path d="M581.71523,188.0873a12.58165,12.58165,0,0,1-3.70049,8.89583,12.31392,12.31392,0,0,1-1.36008,1.17634,12.52812,12.52812,0,0,1-7.53567,2.52415H554.023a12.5902,12.5902,0,0,1,0-25.18037h15.096A12.62919,12.62919,0,0,1,581.71523,188.0873Z" transform="translate(-63.054 -157.8845)" fill="#2f2e41"/><circle cx="532.81499" cy="18.25044" r="12.90118" fill="#2f2e41"/><path d="M595.55433,163.23377c-.15825,0-.31505.00628-.472.01193a12.89776,12.89776,0,0,1,0,25.77849c.15694.00565.31374.01193.472.01193a12.90117,12.90117,0,1,0,0-25.80235Z" transform="translate(-63.054 -157.8845)" opacity="0.1"/><path d="M534.19508,163.23377c.15825,0,.31505.00628.472.01193a12.89776,12.89776,0,0,0,0,25.77849c-.157.00565-.31375.01193-.472.01193a12.90118,12.90118,0,0,1,0-25.80235Z" transform="translate(-63.054 -157.8845)" opacity="0.1"/><path d="M576.65466,198.15947a12.52812,12.52812,0,0,1-7.53567,2.52415H554.023a12.52833,12.52833,0,0,1-7.53574-2.52415Z" transform="translate(-63.054 -157.8845)" opacity="0.1"/><path d="M674.13958,291.64042s3.25228,9.37161,6.229,6.87633L677.996,286.26693Z" transform="translate(-63.054 -157.8845)" fill="#fbbebe"/><path d="M1069.91781,577.43414a20.81252,20.81252,0,1,0,2.7716-39.91524l.52093,10.7122-5.06814-9.18045a20.734,20.734,0,0,0-10.68367,11.72261,20.40847,20.40847,0,0,0-1.19713,5.62986A20.80856,20.80856,0,0,0,1069.91781,577.43414Z" transform="translate(-63.054 -157.8845)" fill="#57b894"/><path d="M1094.99516,701.67756c-1.78906-9.11027,5.9633-17.1868,13.62086-22.43651s16.605-10.40779,19.21775-19.31684c3.755-12.80387-7.43-24.52981-16.13564-34.64176a125.30044,125.30044,0,0,1-16.52359-24.55738c-1.81107-3.5325-3.47558-7.22528-3.95221-11.16626-.68641-5.67546,1.13693-11.32309,2.9739-16.73673q9.17925-27.05169,19.62843-53.65005" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M1070.77493,574.6762a20.81252,20.81252,0,1,0,2.7716-39.91524l.52093,10.7122-5.06815-9.18045a20.734,20.734,0,0,0-10.68366,11.72261,20.40847,20.40847,0,0,0-1.19713,5.62986A20.80855,20.80855,0,0,0,1070.77493,574.6762Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M1092.45136,515.47266a20.78819,20.78819,0,0,1,14.97993-13.19764l1.71361,10.18378,3.177-10.69566a20.81,20.81,0,1,1-19.87057,13.70952Z" transform="translate(-63.054 -157.8845)" fill="#57b894"/><path d="M1093.59418,511.7954a20.7882,20.7882,0,0,1,14.97993-13.19763l1.71361,10.18378,3.177-10.69567a20.81,20.81,0,1,1-19.87057,13.70952Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M1108.04474,625.48885a20.81,20.81,0,0,0,18.419-37.02267l-2.44121,8.21926-1.73105-10.30382a.36183.36183,0,0,0-.053-.0201,20.81113,20.81113,0,1,0-14.1938,39.12733Z" transform="translate(-63.054 -157.8845)" fill="#57b894"/><path d="M1109.035,621.76417a20.81,20.81,0,0,0,18.419-37.02267l-2.44121,8.21926-1.73105-10.30382a.3621.3621,0,0,0-.053-.0201,20.81113,20.81113,0,1,0-14.1938,39.12733Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M1086.37782,660.05148a20.80131,20.80131,0,1,0,4.01058-16.29737l9.27267,13.95654-12.66994-7.40768A20.61638,20.61638,0,0,0,1086.37782,660.05148Z" transform="translate(-63.054 -157.8845)" fill="#57b894"/><path d="M1087.23494,657.29354a20.80131,20.80131,0,1,0,4.01058-16.29737l9.27267,13.95655-12.66994-7.40769A20.61626,20.61626,0,0,0,1087.23494,657.29354Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M72.06146,628.13325a13.67421,13.67421,0,1,0,1.821-26.225l.34227,7.03811-3.32987-6.03172a13.62263,13.62263,0,0,0-7.01936,7.702,13.40883,13.40883,0,0,0-.78654,3.69893A13.6716,13.6716,0,0,0,72.06146,628.13325Z" transform="translate(-63.054 -157.8845)" fill="#57b894"/><path d="M88.53774,709.76344c-1.17545-5.98561,3.918-11.292,8.94915-14.7412s10.90978-6.8381,12.62642-12.69151c2.46711-8.41238-4.88167-16.11653-10.60142-22.76027A82.32442,82.32442,0,0,1,88.6556,643.43581a22.20962,22.20962,0,0,1-2.59668-7.33643c-.451-3.72888.747-7.43947,1.95391-10.99634q6.03093-17.77346,12.89623-35.24906" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M72.62461,626.32123a13.6742,13.6742,0,1,0,1.821-26.225l.34227,7.03812L71.458,601.10258a13.62262,13.62262,0,0,0-7.01936,7.702,13.40912,13.40912,0,0,0-.78654,3.69892A13.67158,13.67158,0,0,0,72.62461,626.32123Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M86.86641,587.42343a13.65822,13.65822,0,0,1,9.84209-8.67109l1.12587,6.69093,2.08737-7.02725a13.67252,13.67252,0,1,1-13.05533,9.00741Z" transform="translate(-63.054 -157.8845)" fill="#57b894"/><path d="M87.61727,585.0074a13.65822,13.65822,0,0,1,9.84209-8.67108l1.12587,6.69093L100.6726,576a13.67252,13.67252,0,1,1-13.05533,9.0074Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M97.11155,659.70607a13.67255,13.67255,0,0,0,12.10164-24.32457l-1.60392,5.4002-1.13733-6.76979a.238.238,0,0,0-.0348-.0132,13.67329,13.67329,0,1,0-9.32559,25.70736Z" transform="translate(-63.054 -157.8845)" fill="#57b894"/><path d="M97.76214,657.25889a13.67255,13.67255,0,0,0,12.10164-24.32457l-1.60392,5.4002-1.13733-6.7698a.238.238,0,0,0-.0348-.0132,13.67329,13.67329,0,1,0-9.32559,25.70737Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M82.876,682.41435a13.66684,13.66684,0,1,0,2.635-10.70767l6.09231,9.16971-8.32438-4.867A13.54535,13.54535,0,0,0,82.876,682.41435Z" transform="translate(-63.054 -157.8845)" fill="#57b894"/><path d="M83.43913,680.60233a13.66684,13.66684,0,1,0,2.635-10.70767l6.09231,9.16971-8.32439-4.867A13.54535,13.54535,0,0,0,83.43913,680.60233Z" transform="translate(-63.054 -157.8845)" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><ellipse cx="480.946" cy="319.1155" rx="17" ry="22" fill="#2f2e41"/><ellipse cx="573.446" cy="319.6155" rx="17" ry="22" fill="#2f2e41"/><path d="M623.5,542.5c0,9.94-13.88,18-31,18s-31-8.06-31-18c0-8.61,10.41-15.81,24.32-17.57a50.10353,50.10353,0,0,1,6.68-.43,50.69869,50.69869,0,0,1,11.13,1.2C615.25,528.29,623.5,534.84,623.5,542.5Z" transform="translate(-63.054 -157.8845)" fill="#2f2e41"/><ellipse cx="484.946" cy="314.1155" rx="17" ry="22" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><ellipse cx="577.446" cy="314.6155" rx="17" ry="22" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><ellipse cx="533.446" cy="379.6155" rx="31" ry="18" fill="none" stroke="#3f3d56" stroke-miterlimit="10"/><path d="M604,527.2a4.93658,4.93658,0,0,1-1.32,3.392A4.33873,4.33873,0,0,1,599.5,532h-10a4.66433,4.66433,0,0,1-4.5-4.8,4.90458,4.90458,0,0,1,.82-2.74134A47.02,47.02,0,0,1,592.5,524a47.66454,47.66454,0,0,1,11.13,1.28A5.06656,5.06656,0,0,1,604,527.2Z" transform="translate(-63.054 -157.8845)" fill="#fff"/><circle cx="484.946" cy="308.1155" r="5" fill="#fff"/><circle cx="577.946" cy="308.1155" r="5" fill="#fff"/><circle cx="582.946" cy="355.1155" r="5" fill="#6c63ff" opacity="0.3"/><circle cx="460.946" cy="355.1155" r="5" fill="#6c63ff" opacity="0.3"/></svg>
...\ No newline at end of file ...\ No newline at end of file
1 -<svg id="0b188637-16b1-4c40-a71f-ceebe5cfc5ec" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="729.22" height="746.14" viewBox="0 0 729.22 746.14"><defs><linearGradient id="161b0b7e-f39b-42f9-9ca9-e5f4182b27e7" x1="459.12" y1="621" x2="459.12" y2="193.38" gradientTransform="translate(-9.77 -29.03)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="0379165a-8b01-4db8-a9fd-a7f74912e5f9" x1="459.12" y1="355.96" x2="459.12" y2="192.97" gradientTransform="translate(-44.96 -24.28)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b3b3b3" stop-opacity="0.25"/><stop offset="0.54" stop-color="#b3b3b3" stop-opacity="0.1"/><stop offset="1" stop-color="#b3b3b3" stop-opacity="0.05"/></linearGradient><linearGradient id="a5c94603-d688-4cb8-935e-8753937e09f1" x1="890.03" y1="384.1" x2="893.49" y2="466.67" gradientTransform="matrix(-0.96, 0.28, -0.28, -0.96, 1290.21, 438.32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-opacity="0.12"/><stop offset="0.55" stop-opacity="0.09"/><stop offset="1" stop-opacity="0.02"/></linearGradient><linearGradient id="452544f9-f0e1-48f7-bf2a-2e6d32ceef9c" x1="630.78" y1="714.25" x2="630.78" y2="285.78" gradientTransform="matrix(1, 0, 0, 1, 0, 0)" xlink:href="#161b0b7e-f39b-42f9-9ca9-e5f4182b27e7"/><linearGradient id="b357cf12-7038-49e2-a945-bede915bae9c" x1="737.4" y1="672.7" x2="737.4" y2="245.08" gradientTransform="translate(15.96 0.36)" xlink:href="#161b0b7e-f39b-42f9-9ca9-e5f4182b27e7"/><linearGradient id="ea27b32b-d891-4df9-a7ed-488b1d56dfe9" x1="737.4" y1="407.66" x2="737.4" y2="244.68" gradientTransform="translate(1.98 1.1)" xlink:href="#0379165a-8b01-4db8-a9fd-a7f74912e5f9"/><linearGradient id="e9a0bbc5-d046-4610-9b74-eda9798afd67" x1="612.39" y1="329.04" x2="615.85" y2="411.61" gradientTransform="translate(1291.19 632.77) rotate(173.26)" xlink:href="#a5c94603-d688-4cb8-935e-8753937e09f1"/><linearGradient id="d89d3977-de30-46d1-ab57-98fa636459b9" x1="382.92" y1="428.03" x2="382.92" y2="0.4" gradientTransform="matrix(1, 0, 0, 1, 0, 0)" xlink:href="#161b0b7e-f39b-42f9-9ca9-e5f4182b27e7"/><linearGradient id="1e925d76-3047-4c1e-82a0-04113f14e226" x1="382.92" y1="162.99" x2="382.92" y2="0" gradientTransform="matrix(1, 0, 0, 1, 0, 0)" xlink:href="#0379165a-8b01-4db8-a9fd-a7f74912e5f9"/><linearGradient id="9a56d00c-164c-4fec-8f17-f5f893f4fff9" x1="729.45" y1="498.21" x2="732.9" y2="580.79" gradientTransform="matrix(-1, 0.01, -0.01, -1, 1253.94, 688.13)" xlink:href="#a5c94603-d688-4cb8-935e-8753937e09f1"/><linearGradient id="595bce0a-5d70-43e8-a094-99f33f4517de" x1="328.81" y1="746.14" x2="328.81" y2="254.91" gradientTransform="matrix(1, 0, 0, 1, 0, 0)" xlink:href="#161b0b7e-f39b-42f9-9ca9-e5f4182b27e7"/><linearGradient id="7d63bf16-77e8-4c09-b275-41a64fa57a97" x1="329.34" y1="675.01" x2="329.34" y2="373.01" gradientTransform="matrix(1, 0, 0, 1, 0, 0)" xlink:href="#161b0b7e-f39b-42f9-9ca9-e5f4182b27e7"/><linearGradient id="cafffc46-2bab-4c9b-8a17-f57a9c7cb665" x1="683.6" y1="52.97" x2="690.12" y2="208.87" gradientTransform="matrix(-1, 0.01, -0.01, -1, 1253.94, 688.13)" xlink:href="#a5c94603-d688-4cb8-935e-8753937e09f1"/></defs><title>resume folder_2</title><rect x="286.73" y="164.35" width="325.25" height="427.62" transform="matrix(0.96, -0.27, 0.27, 0.96, -319.57, 55.74)" fill="url(#161b0b7e-f39b-42f9-9ca9-e5f4182b27e7)"/><rect x="251.16" y="168.7" width="326" height="162.99" transform="translate(-286.9 41.83) rotate(-15.37)" fill="url(#0379165a-8b01-4db8-a9fd-a7f74912e5f9)"/><rect x="290.45" y="167.72" width="316.93" height="417.67" transform="translate(-319.16 55.57) rotate(-15.37)" fill="#eee"/><rect x="255.71" y="171.97" width="317.66" height="159.19" transform="translate(-287.25 41.98) rotate(-15.37)" fill="#3f51b5"/><rect x="358.16" y="384.47" width="86.17" height="6.57" transform="translate(-323.84 43.33) rotate(-15.37)" fill="#bdbdbd"/><rect x="365.13" y="409.82" width="86.17" height="6.57" transform="translate(-330.31 46.09) rotate(-15.37)" fill="#f5f5f5"/><rect x="359.16" y="378.75" width="224.92" height="6.57" transform="translate(-319.8 61.79) rotate(-15.37)" fill="#69f0ae"/><rect x="375.45" y="229.76" width="86.17" height="6.57" transform="translate(-282.2 42.38) rotate(-15.37)" fill="#fff"/><rect x="378.38" y="236.87" width="138.75" height="6.57" transform="translate(-283.04 50.38) rotate(-15.37)" fill="#fff"/><rect x="409.8" y="255.17" width="86.17" height="7.3" rx="3.09" ry="3.09" transform="translate(-287.8 52.41) rotate(-15.37)" opacity="0.2"/><circle cx="325.31" cy="413.18" r="15.34" transform="translate(-333.29 24.11) rotate(-15.37)" fill="#69f0ae"/><rect x="375.01" y="445.73" width="86.17" height="6.57" transform="translate(-339.47 49.99) rotate(-15.37)" fill="#bdbdbd"/><rect x="381.98" y="471.08" width="86.17" height="6.57" transform="translate(-345.95 52.75) rotate(-15.37)" fill="#f5f5f5"/><rect x="376.01" y="440.01" width="224.92" height="6.57" transform="translate(-335.44 68.45) rotate(-15.37)" fill="#e0e0e0"/><circle cx="342.15" cy="474.44" r="15.34" transform="translate(-348.93 30.77) rotate(-15.37)" fill="#e0e0e0"/><rect x="391.85" y="506.98" width="86.17" height="6.57" transform="translate(-355.11 56.65) rotate(-15.37)" fill="#bdbdbd"/><rect x="398.82" y="532.33" width="86.17" height="6.57" transform="translate(-361.58 59.4) rotate(-15.37)" fill="#f5f5f5"/><rect x="392.85" y="501.27" width="224.92" height="6.57" transform="translate(-351.08 75.1) rotate(-15.37)" fill="#e0e0e0"/><circle cx="359" cy="535.7" r="15.34" transform="translate(-364.57 37.43) rotate(-15.37)" fill="#e0e0e0"/><path d="M274.62,287.15A42.28,42.28,0,1,0,318,233.24l3,10.47a14.36,14.36,0,0,1-9.8,17.72h0a14.36,14.36,0,0,1-17.72-9.8l-3-10.47A42.3,42.3,0,0,0,274.62,287.15Z" transform="translate(-235.39 -76.93)" fill="url(#a5c94603-d688-4cb8-935e-8753937e09f1)"/><path d="M355,260.43a42.28,42.28,0,1,0-44,53.38l-2.89-10.5a14.36,14.36,0,0,1,10-17.6h0a14.36,14.36,0,0,1,17.6,10l2.89,10.5A42.3,42.3,0,0,0,355,260.43Z" transform="translate(-235.39 -76.93)" fill="#3f51b5"/><circle cx="312.7" cy="266.03" r="16.25" transform="translate(-294.73 15.5) rotate(-15.37)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M318.09,285.71h0a14.36,14.36,0,0,0-10,17.6l2.89,10.5a42.44,42.44,0,0,0,27.61-7.59l-2.89-10.5A14.36,14.36,0,0,0,318.09,285.71Z" transform="translate(-235.39 -76.93)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M296.66,269.51a15.77,15.77,0,0,1-3.84-7.42,10.93,10.93,0,0,1,1.51-8.11c1.75-2.57,4.65-4.11,7.58-5.17s6-1.75,8.78-3.14a19.44,19.44,0,0,0,9.74-11.41,26.14,26.14,0,0,1,1.83,6.92,8.81,8.81,0,0,1-2,6.68c2.08-1.76,2.53.9,2.44,2.59,1.57,1.1,4.5.55,5.16,2.35a12,12,0,0,1,.9,5.61c-.25,1.9,1.34,4.68-.46,5.32" transform="translate(-235.39 -76.93)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M321,247.24s11.2-2.05,7.87,16.32" transform="translate(-235.39 -76.93)" fill="#fff"/><polygon points="637.77 714.25 532.34 714.25 532.34 285.78 729.22 285.78 637.77 714.25" fill="url(#452544f9-f0e1-48f7-bf2a-2e6d32ceef9c)"/><polygon points="632.52 714.25 529.17 714.25 529.17 285.78 722.16 285.78 632.52 714.25" fill="#bdbdbd"/><rect x="590.74" y="245.44" width="325.25" height="427.62" transform="translate(-279.59 5.03) rotate(-6.05)" fill="url(#b357cf12-7038-49e2-a945-bede915bae9c)"/><rect x="576.38" y="245.78" width="326" height="162.99" transform="translate(-265.76 2.82) rotate(-6.05)" fill="url(#ea27b32b-d891-4df9-a7ed-488b1d56dfe9)"/><rect x="594.73" y="248.76" width="316.93" height="417.67" transform="translate(-279.42 5) rotate(-6.05)" fill="#f5f5f5"/><rect x="580.7" y="249.09" width="317.66" height="159.19" transform="translate(-265.91 2.84) rotate(-6.05)" fill="#3f51b5"/><rect x="661.26" y="457.64" width="86.17" height="6.57" transform="translate(-280.04 -0.13) rotate(-6.05)" fill="#bdbdbd"/><rect x="664.03" y="483.78" width="86.17" height="6.57" transform="translate(-282.78 0.31) rotate(-6.05)" fill="#f5f5f5"/><rect x="662.26" y="463.4" width="224.92" height="6.57" transform="translate(-280.26 7.32) rotate(-6.05)" fill="#69f0ae"/><rect x="703.39" y="307.77" width="86.17" height="6.57" transform="translate(-264.01 3.48) rotate(-6.05)" fill="#fff"/><rect x="704.78" y="319.53" width="138.75" height="6.57" transform="translate(-265.1 6.46) rotate(-6.05)" fill="#fff"/><rect x="733.11" y="338.4" width="86.17" height="7.3" rx="3.09" ry="3.09" transform="translate(-267.12 6.78) rotate(-6.05)" opacity="0.2"/><circle cx="625.29" cy="473.71" r="15.34" transform="translate(-281.83 -8.39) rotate(-6.05)" fill="#69f0ae"/><rect x="667.96" y="520.81" width="86.17" height="6.57" transform="translate(-286.66 0.93) rotate(-6.05)" fill="#bdbdbd"/><rect x="670.73" y="546.96" width="86.17" height="6.57" transform="translate(-289.4 1.36) rotate(-6.05)" fill="#f5f5f5"/><rect x="668.96" y="526.57" width="224.92" height="6.57" transform="translate(-286.88 8.38) rotate(-6.05)" fill="#e0e0e0"/><circle cx="631.99" cy="536.88" r="15.34" transform="translate(-288.45 -7.33) rotate(-6.05)" fill="#e0e0e0"/><rect x="674.65" y="583.99" width="86.17" height="6.57" transform="translate(-293.28 1.98) rotate(-6.05)" fill="#bdbdbd"/><rect x="677.42" y="610.13" width="86.17" height="6.57" transform="translate(-296.02 2.42) rotate(-6.05)" fill="#f5f5f5"/><rect x="675.65" y="589.75" width="224.92" height="6.57" transform="translate(-293.5 9.43) rotate(-6.05)" fill="#e0e0e0"/><circle cx="638.68" cy="600.06" r="15.34" transform="translate(-295.07 -6.28) rotate(-6.05)" fill="#e0e0e0"/><path d="M595.69,341.12A42.28,42.28,0,1,0,647.23,295l1.28,10.82A14.36,14.36,0,0,1,636,321.67h0a14.36,14.36,0,0,1-15.9-12.54l-1.28-10.82A42.3,42.3,0,0,0,595.69,341.12Z" transform="translate(-235.39 -76.93)" fill="url(#e9a0bbc5-d046-4610-9b74-eda9798afd67)"/><path d="M679.33,327.79a42.28,42.28,0,1,0-52.09,45.54l-1.15-10.83a14.36,14.36,0,0,1,12.73-15.75h0a14.36,14.36,0,0,1,15.75,12.73l1.15,10.83A42.3,42.3,0,0,0,679.33,327.79Z" transform="translate(-235.39 -76.93)" fill="#3f51b5"/><circle cx="636.7" cy="326.46" r="16.25" transform="translate(-266.25 -8.01) rotate(-6.05)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M638.82,346.75h0a14.36,14.36,0,0,0-12.73,15.75l1.15,10.83a42.44,42.44,0,0,0,28.48-3l-1.15-10.83A14.36,14.36,0,0,0,638.82,346.75Z" transform="translate(-235.39 -76.93)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M620.3,327.29a15.77,15.77,0,0,1-2.59-7.95,10.93,10.93,0,0,1,2.8-7.75c2.14-2.26,5.26-3.31,8.32-3.88S635,307,638,306a19.44,19.44,0,0,0,11.46-9.68,26.14,26.14,0,0,1,.69,7.12,8.81,8.81,0,0,1-3.06,6.27c2.33-1.4,2.35,1.29,2,2.95,1.37,1.34,4.35,1.27,4.71,3.16a12,12,0,0,1,0,5.68c-.56,1.83.57,4.84-1.32,5.17" transform="translate(-235.39 -76.93)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M647.93,309.26s11.38-.21,5.13,17.38" transform="translate(-235.39 -76.93)" fill="#fff"/><rect x="220.3" y="0.4" width="325.25" height="427.62" fill="url(#d89d3977-de30-46d1-ab57-98fa636459b9)"/><rect x="219.92" width="326" height="162.99" fill="url(#1e925d76-3047-4c1e-82a0-04113f14e226)"/><rect x="224.46" y="3.71" width="316.93" height="417.67" fill="#f5f5f5"/><rect x="224.1" y="3.32" width="317.66" height="159.19" fill="#3f51b5"/><rect x="290.91" y="207.42" width="86.17" height="6.57" fill="#bdbdbd"/><rect x="290.91" y="233.71" width="86.17" height="6.57" fill="#f5f5f5"/><rect x="290.91" y="220.57" width="224.92" height="6.57" fill="#69f0ae"/><rect x="348.6" y="62.84" width="86.17" height="6.57" fill="#fff"/><rect x="348.6" y="77.44" width="138.75" height="6.57" fill="#fff"/><rect x="374.89" y="96.43" width="86.17" height="7.3" rx="3.09" ry="3.09" opacity="0.2"/><circle cx="254.04" cy="215.09" r="15.34" fill="#69f0ae"/><rect x="290.91" y="270.95" width="86.17" height="6.57" fill="#bdbdbd"/><rect x="290.91" y="297.24" width="86.17" height="6.57" fill="#f5f5f5"/><rect x="290.91" y="284.1" width="224.92" height="6.57" fill="#e0e0e0"/><circle cx="254.04" cy="278.62" r="15.34" fill="#e0e0e0"/><rect x="290.91" y="334.49" width="86.17" height="6.57" fill="#bdbdbd"/><rect x="290.91" y="360.77" width="86.17" height="6.57" fill="#f5f5f5"/><rect x="290.91" y="347.63" width="224.92" height="6.57" fill="#e0e0e0"/><circle cx="254.04" cy="342.15" r="15.34" fill="#e0e0e0"/><path d="M474,157.06a42.28,42.28,0,1,0,56.12-40.48l.13,10.89A14.36,14.36,0,0,1,516.07,142h0a14.36,14.36,0,0,1-14.49-14.14l-.13-10.89A42.3,42.3,0,0,0,474,157.06Z" transform="translate(-235.39 -76.93)" fill="url(#9a56d00c-164c-4fec-8f17-f5f893f4fff9)"/><path d="M558.55,152.61a42.28,42.28,0,1,0-56.6,39.8V181.51a14.36,14.36,0,0,1,14.32-14.32h0a14.36,14.36,0,0,1,14.32,14.32v10.89A42.3,42.3,0,0,0,558.55,152.61Z" transform="translate(-235.39 -76.93)" fill="#3f51b5"/><circle cx="280.9" cy="69.87" r="16.25" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M516.26,167.19h0a14.36,14.36,0,0,0-14.32,14.32v10.89a42.44,42.44,0,0,0,28.64,0V181.51A14.36,14.36,0,0,0,516.26,167.19Z" transform="translate(-235.39 -76.93)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M499.9,145.89a15.77,15.77,0,0,1-1.73-8.18,10.93,10.93,0,0,1,3.6-7.42c2.37-2,5.58-2.73,8.68-3s6.24-.1,9.3-.7a19.44,19.44,0,0,0,12.41-8.42,26.14,26.14,0,0,1-.07,7.15,8.81,8.81,0,0,1-3.7,5.91c2.47-1.14,2.2,1.53,1.67,3.14,1.22,1.48,4.2,1.72,4.35,3.64a12,12,0,0,1-.62,5.65c-.75,1.76.05,4.87-1.86,5" transform="translate(-235.39 -76.93)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M529.27,130.88s11.34,1,3.27,17.82" transform="translate(-235.39 -76.93)" fill="#fff"/><polygon points="190.59 304.74 119.42 254.91 20.88 254.91 20.88 304.74 20.88 329.15 20.88 746.14 636.74 746.14 636.74 304.74 190.59 304.74" fill="url(#595bce0a-5d70-43e8-a094-99f33f4517de)"/><polyline points="26.15 309.78 26.15 333.48 26.15 738.25 632.52 738.25 632.52 309.78 193.25 309.78" fill="#fff"/><polyline points="193.25 309.78 123.17 261.41 26.15 261.41 26.15 309.78" fill="#bdbdbd"/><text x="-235.39" y="-76.93"></text><rect x="162.34" y="373.01" width="334" height="302" fill="url(#7d63bf16-77e8-4c09-b275-41a64fa57a97)"/><rect x="166.88" y="375.21" width="326.42" height="294.31" fill="#fff"/><rect x="268.19" y="595.49" width="128.34" height="10.51" fill="#bdbdbd"/><rect x="189.87" y="616.52" width="280.44" height="10.51" fill="#e0e0e0"/><rect x="189.87" y="637.55" width="280.44" height="10.51" fill="#e0e0e0"/><path d="M485.62,564.67a79.84,79.84,0,1,0,106-76.43l.25,20.57a27.11,27.11,0,0,1-26.7,27.36h0a27.11,27.11,0,0,1-27.36-26.7l-.25-20.57A79.87,79.87,0,0,0,485.62,564.67Z" transform="translate(-235.39 -76.93)" fill="url(#cafffc46-2bab-4c9b-8a17-f57a9c7cb665)"/><path d="M645.32,556.28a79.84,79.84,0,1,0-106.87,75.14V610.85a27.11,27.11,0,0,1,27-27h0a27.11,27.11,0,0,1,27,27v20.57A79.87,79.87,0,0,0,645.32,556.28Z" transform="translate(-235.39 -76.93)" fill="#bdbdbd"/><rect x="323.18" y="488.01" width="9.6" height="33.85" rx="4.8" ry="4.8" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><circle cx="328.03" cy="461.87" r="30.69" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M563.37,577.31h0a27.11,27.11,0,0,0-27,27v20.57a80.13,80.13,0,0,0,54.07,0V604.35A27.11,27.11,0,0,0,563.37,577.31Z" transform="translate(-235.39 -76.93)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M532.47,537.1a29.77,29.77,0,0,1-3.27-15.44,20.64,20.64,0,0,1,6.8-14c4.47-3.81,10.53-5.16,16.39-5.63s11.79-.19,17.55-1.32a36.69,36.69,0,0,0,23.43-15.89c.37,4.5.74,9.07-.13,13.51s-3.15,8.79-7,11.16c4.66-2.16,4.15,2.9,3.14,5.93,2.31,2.79,7.92,3.25,8.21,6.86s.24,7.34-1.17,10.67.1,9.19-3.5,9.45" transform="translate(-235.39 -76.93)" fill="#fff" stroke="#fff" stroke-miterlimit="10"/><path d="M587.94,508.75s21.41,1.87,6.17,33.65" transform="translate(-235.39 -76.93)" fill="#fff"/></svg>
...\ No newline at end of file ...\ No newline at end of file
1 -<!DOCTYPE html>
2 -<html lang="en" dir="ltr">
3 - <head>
4 - <meta charset="utf-8" />
5 - <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
6 - <meta
7 - name="viewport"
8 - content="width=device-width, initial-scale=1, shrink-to-fit=no"
9 - />
10 - <meta name="theme-color" content="#000000" />
11 - <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
12 - <link
13 - href="https://fonts.googleapis.com/css?family=Roboto+Mono|Roboto+Slab|Roboto:300,400,500,700"
14 - rel="stylesheet"
15 - />
16 - <title>KHU Box</title>
17 - </head>
18 - <body>
19 - <noscript>You need to enable JavaScript to run this app.</noscript>
20 - <div id="root"></div>
21 - </body>
22 -</html>
1 -{
2 - "short_name": "React App",
3 - "name": "Create React App Sample",
4 - "icons": [
5 - {
6 - "src": "favicon.ico",
7 - "sizes": "64x64 32x32 24x24 16x16",
8 - "type": "image/x-icon"
9 - }
10 - ],
11 - "start_url": ".",
12 - "display": "standalone",
13 - "theme_color": "#000000",
14 - "background_color": "#ffffff"
15 -}
1 -import React, { Component } from 'react';
2 -import { Router } from 'react-router-dom';
3 -import { createBrowserHistory } from 'history';
4 -import { Chart } from 'react-chartjs-2';
5 -import { ThemeProvider } from '@material-ui/styles';
6 -import validate from 'validate.js';
7 -
8 -import { chartjs } from './helpers';
9 -import theme from './theme';
10 -import 'react-perfect-scrollbar/dist/css/styles.css';
11 -import './assets/scss/index.scss';
12 -import validators from './common/validators';
13 -import Routes from './Routes';
14 -
15 -const browserHistory = createBrowserHistory();
16 -
17 -Chart.helpers.extend(Chart.elements.Rectangle.prototype, {
18 - draw: chartjs.draw
19 -});
20 -
21 -validate.validators = {
22 - ...validate.validators,
23 - ...validators
24 -};
25 -
26 -export default class App extends Component {
27 - render() {
28 - return (
29 - <ThemeProvider theme={theme}>
30 - <Router history={browserHistory}>
31 - <Routes />
32 - </Router>
33 - </ThemeProvider>
34 - );
35 - }
36 -}
1 -import React from 'react';
2 -import { Switch, Redirect } from 'react-router-dom';
3 -
4 -import { RouteWithLayout } from './components';
5 -import { Main as MainLayout, Minimal as MinimalLayout } from './layouts';
6 -
7 -import {
8 - Dashboard as DashboardView,
9 - RecentFileList as RecentFileListView,
10 - MyDrive as MyDriveView,
11 - SharedFileList as SharedFileView,
12 - Trash as TrashView,
13 - Icons as IconsView,
14 - Account as AccountView,
15 - Settings as SettingsView,
16 - SignUp as SignUpView,
17 - SignIn as SignInView,
18 - NotFound as NotFoundView
19 -} from './views';
20 -
21 -const Routes = () => {
22 - return (
23 - <Switch>
24 - <Redirect
25 - exact
26 - from="/"
27 - to="/my-drive"
28 - />
29 - <RouteWithLayout
30 - component={MyDriveView}
31 - exact
32 - layout={MainLayout}
33 - path="/my-drive"
34 - />
35 - <RouteWithLayout
36 - component={SharedFileView}
37 - exact
38 - layout={MainLayout}
39 - path="/share"
40 - />
41 - <RouteWithLayout
42 - component={RecentFileListView}
43 - exact
44 - layout={MainLayout}
45 - path="/recent"
46 - />
47 - <RouteWithLayout
48 - component={TrashView}
49 - exact
50 - layout={MainLayout}
51 - path="/trash"
52 - />
53 - <RouteWithLayout
54 - component={AccountView}
55 - exact
56 - layout={MainLayout}
57 - path="/account"
58 - />
59 - <RouteWithLayout
60 - component={SettingsView}
61 - exact
62 - layout={MainLayout}
63 - path="/settings"
64 - />
65 - <RouteWithLayout
66 - component={SignUpView}
67 - exact
68 - layout={MinimalLayout}
69 - path="/sign-up"
70 - />
71 - <RouteWithLayout
72 - component={SignInView}
73 - exact
74 - layout={MinimalLayout}
75 - path="/sign-in"
76 - />
77 - <RouteWithLayout
78 - component={NotFoundView}
79 - exact
80 - layout={MinimalLayout}
81 - path="/not-found"
82 - />
83 - <Redirect to="/not-found" />
84 - </Switch>
85 - );
86 -};
87 -
88 -export default Routes;
1 -* {
2 - box-sizing: border-box;
3 - margin: 0;
4 - padding: 0;
5 -}
6 -
7 -html {
8 - height: 100%;
9 - -webkit-font-smoothing: antialiased;
10 - -moz-osx-font-smoothing: grayscale;
11 -}
12 -
13 -body {
14 - background-color: #f4f6f8;
15 - height: 100%;
16 -}
17 -
18 -a {
19 - text-decoration: none;
20 -}
21 -
22 -#root {
23 - height: 100%;
24 -}
1 -const checked = (value, options) => {
2 - if (value !== true) {
3 - return options.message || 'must be checked';
4 - }
5 -};
6 -
7 -export default {
8 - checked
9 -};
1 -import React from 'react';
2 -import { Route } from 'react-router-dom';
3 -import PropTypes from 'prop-types';
4 -
5 -const RouteWithLayout = props => {
6 - const { layout: Layout, component: Component, ...rest } = props;
7 -
8 - return (
9 - <Route
10 - {...rest}
11 - render={matchProps => (
12 - <Layout>
13 - <Component {...matchProps} />
14 - </Layout>
15 - )}
16 - />
17 - );
18 -};
19 -
20 -RouteWithLayout.propTypes = {
21 - component: PropTypes.any.isRequired,
22 - layout: PropTypes.any.isRequired,
23 - path: PropTypes.string
24 -};
25 -
26 -export default RouteWithLayout;
1 -export { default } from './RouteWithLayout';
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Paper, Input } from '@material-ui/core';
6 -import SearchIcon from '@material-ui/icons/Search';
7 -
8 -const useStyles = makeStyles(theme => ({
9 - root: {
10 - borderRadius: '4px',
11 - alignItems: 'center',
12 - padding: theme.spacing(1),
13 - display: 'flex',
14 - flexBasis: 420
15 - },
16 - icon: {
17 - marginRight: theme.spacing(1),
18 - color: theme.palette.text.secondary
19 - },
20 - input: {
21 - flexGrow: 1,
22 - fontSize: '14px',
23 - lineHeight: '16px',
24 - letterSpacing: '-0.05px'
25 - }
26 -}));
27 -
28 -const SearchInput = props => {
29 - const { className, onChange, style, ...rest } = props;
30 -
31 - const classes = useStyles();
32 -
33 - return (
34 - <Paper
35 - {...rest}
36 - className={clsx(classes.root, className)}
37 - style={style}
38 - >
39 - <SearchIcon className={classes.icon} />
40 - <Input
41 - {...rest}
42 - className={classes.input}
43 - disableUnderline
44 - onChange={onChange}
45 - />
46 - </Paper>
47 - );
48 -};
49 -
50 -SearchInput.propTypes = {
51 - className: PropTypes.string,
52 - onChange: PropTypes.func,
53 - style: PropTypes.object
54 -};
55 -
56 -export default SearchInput;
1 -export { default } from './SearchInput';
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles } from '@material-ui/styles';
5 -
6 -const useStyles = makeStyles(theme => ({
7 - root: {
8 - display: 'inline-block',
9 - borderRadius: '50%',
10 - flexGrow: 0,
11 - flexShrink: 0
12 - },
13 - sm: {
14 - height: theme.spacing(1),
15 - width: theme.spacing(1)
16 - },
17 - md: {
18 - height: theme.spacing(2),
19 - width: theme.spacing(2)
20 - },
21 - lg: {
22 - height: theme.spacing(3),
23 - width: theme.spacing(3)
24 - },
25 - neutral: {
26 - backgroundColor: theme.palette.neutral
27 - },
28 - primary: {
29 - backgroundColor: theme.palette.primary.main
30 - },
31 - info: {
32 - backgroundColor: theme.palette.info.main
33 - },
34 - warning: {
35 - backgroundColor: theme.palette.warning.main
36 - },
37 - danger: {
38 - backgroundColor: theme.palette.error.main
39 - },
40 - success: {
41 - backgroundColor: theme.palette.success.main
42 - }
43 -}));
44 -
45 -const StatusBullet = props => {
46 - const { className, size, color, ...rest } = props;
47 -
48 - const classes = useStyles();
49 -
50 - return (
51 - <span
52 - {...rest}
53 - className={clsx(
54 - {
55 - [classes.root]: true,
56 - [classes[size]]: size,
57 - [classes[color]]: color
58 - },
59 - className
60 - )}
61 - />
62 - );
63 -};
64 -
65 -StatusBullet.propTypes = {
66 - className: PropTypes.string,
67 - color: PropTypes.oneOf([
68 - 'neutral',
69 - 'primary',
70 - 'info',
71 - 'success',
72 - 'warning',
73 - 'danger'
74 - ]),
75 - size: PropTypes.oneOf(['sm', 'md', 'lg'])
76 -};
77 -
78 -StatusBullet.defaultProps = {
79 - size: 'md',
80 - color: 'default'
81 -};
82 -
83 -export default StatusBullet;
1 -export { default } from './StatusBullet'
...\ No newline at end of file ...\ No newline at end of file
1 -export { default as SearchInput } from './SearchInput';
2 -export { default as StatusBullet } from './StatusBullet';
3 -export { default as RouteWithLayout } from './RouteWithLayout';
1 -// ChartJS extension rounded bar chart
2 -// https://codepen.io/jedtrow/full/ygRYgo
3 -function draw() {
4 - const { ctx } = this._chart;
5 - const vm = this._view;
6 - let { borderWidth } = vm;
7 -
8 - let left;
9 - let right;
10 - let top;
11 - let bottom;
12 - let signX;
13 - let signY;
14 - let borderSkipped;
15 - let radius;
16 -
17 - // If radius is less than 0 or is large enough to cause drawing errors a max
18 - // radius is imposed. If cornerRadius is not defined set it to 0.
19 - let { cornerRadius } = this._chart.config.options;
20 - if (cornerRadius < 0) {
21 - cornerRadius = 0;
22 - }
23 -
24 - if (typeof cornerRadius === 'undefined') {
25 - cornerRadius = 0;
26 - }
27 -
28 - if (!vm.horizontal) {
29 - // bar
30 - left = vm.x - vm.width / 2;
31 - right = vm.x + vm.width / 2;
32 - top = vm.y;
33 - bottom = vm.base;
34 - signX = 1;
35 - signY = bottom > top ? 1 : -1;
36 - borderSkipped = vm.borderSkipped || 'bottom';
37 - } else {
38 - // horizontal bar
39 - left = vm.base;
40 - right = vm.x;
41 - top = vm.y - vm.height / 2;
42 - bottom = vm.y + vm.height / 2;
43 - signX = right > left ? 1 : -1;
44 - signY = 1;
45 - borderSkipped = vm.borderSkipped || 'left';
46 - }
47 -
48 - // Canvas doesn't allow us to stroke inside the width so we can
49 - // adjust the sizes to fit if we're setting a stroke on the line
50 - if (borderWidth) {
51 - // borderWidth shold be less than bar width and bar height.
52 - const barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom));
53 - borderWidth = borderWidth > barSize ? barSize : borderWidth;
54 - const halfStroke = borderWidth / 2;
55 - // Adjust borderWidth when bar top position is near vm.base(zero).
56 - const borderLeft =
57 - left + (borderSkipped !== 'left' ? halfStroke * signX : 0);
58 - const borderRight =
59 - right + (borderSkipped !== 'right' ? -halfStroke * signX : 0);
60 - const borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0);
61 - const borderBottom =
62 - bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0);
63 - // not become a vertical line?
64 - if (borderLeft !== borderRight) {
65 - top = borderTop;
66 - bottom = borderBottom;
67 - }
68 - // not become a horizontal line?
69 - if (borderTop !== borderBottom) {
70 - left = borderLeft;
71 - right = borderRight;
72 - }
73 - }
74 -
75 - ctx.beginPath();
76 - ctx.fillStyle = vm.backgroundColor;
77 - ctx.strokeStyle = vm.borderColor;
78 - ctx.lineWidth = borderWidth;
79 -
80 - // Corner points, from bottom-left to bottom-right clockwise
81 - // | 1 2 |
82 - // | 0 3 |
83 - const corners = [[left, bottom], [left, top], [right, top], [right, bottom]];
84 -
85 - // Find first (starting) corner with fallback to 'bottom'
86 - const borders = ['bottom', 'left', 'top', 'right'];
87 - let startCorner = borders.indexOf(borderSkipped, 0);
88 - if (startCorner === -1) {
89 - startCorner = 0;
90 - }
91 -
92 - function cornerAt(index) {
93 - return corners[(startCorner + index) % 4];
94 - }
95 -
96 - // Draw rectangle from 'startCorner'
97 - let corner = cornerAt(0);
98 - ctx.moveTo(corner[0], corner[1]);
99 -
100 - for (let i = 1; i < 4; i += 1) {
101 - corner = cornerAt(i);
102 - let nextCornerId = i + 1;
103 - if (nextCornerId === 4) {
104 - nextCornerId = 0;
105 - }
106 -
107 - const width = corners[2][0] - corners[1][0];
108 - const height = corners[0][1] - corners[1][1];
109 - const x = corners[1][0];
110 - const y = corners[1][1];
111 -
112 - radius = cornerRadius;
113 - // Fix radius being too large
114 - if (radius > Math.abs(height) / 2) {
115 - radius = Math.floor(Math.abs(height) / 2);
116 - }
117 - if (radius > Math.abs(width) / 2) {
118 - radius = Math.floor(Math.abs(width) / 2);
119 - }
120 -
121 - if (height < 0) {
122 - // Negative values in a standard bar chart
123 - const xTl = x;
124 - const xTr = x + width;
125 - const yTl = y + height;
126 - const yTr = y + height;
127 -
128 - const xBl = x;
129 - const xBr = x + width;
130 - const yBl = y;
131 - const yBr = y;
132 -
133 - // Draw
134 - ctx.moveTo(xBl + radius, yBl);
135 - ctx.lineTo(xBr - radius, yBr);
136 - ctx.quadraticCurveTo(xBr, yBr, xBr, yBr - radius);
137 - ctx.lineTo(xTr, yTr + radius);
138 - ctx.quadraticCurveTo(xTr, yTr, xTr - radius, yTr);
139 - ctx.lineTo(xTl + radius, yTl);
140 - ctx.quadraticCurveTo(xTl, yTl, xTl, yTl + radius);
141 - ctx.lineTo(xBl, yBl - radius);
142 - ctx.quadraticCurveTo(xBl, yBl, xBl + radius, yBl);
143 - } else if (width < 0) {
144 - // Negative values in a horizontal bar chart
145 - const xTl = x + width;
146 - const xTr = x;
147 - const yTl = y;
148 - const yTr = y;
149 -
150 - const xBl = x + width;
151 - const xBr = x;
152 - const yBl = y + height;
153 - const yBr = y + height;
154 -
155 - // Draw
156 - ctx.moveTo(xBl + radius, yBl);
157 - ctx.lineTo(xBr - radius, yBr);
158 - ctx.quadraticCurveTo(xBr, yBr, xBr, yBr - radius);
159 - ctx.lineTo(xTr, yTr + radius);
160 - ctx.quadraticCurveTo(xTr, yTr, xTr - radius, yTr);
161 - ctx.lineTo(xTl + radius, yTl);
162 - ctx.quadraticCurveTo(xTl, yTl, xTl, yTl + radius);
163 - ctx.lineTo(xBl, yBl - radius);
164 - ctx.quadraticCurveTo(xBl, yBl, xBl + radius, yBl);
165 - } else {
166 - // Positive Value
167 - ctx.moveTo(x + radius, y);
168 - ctx.lineTo(x + width - radius, y);
169 - ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
170 - ctx.lineTo(x + width, y + height - radius);
171 - ctx.quadraticCurveTo(
172 - x + width,
173 - y + height,
174 - x + width - radius,
175 - y + height
176 - );
177 - ctx.lineTo(x + radius, y + height);
178 - ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
179 - ctx.lineTo(x, y + radius);
180 - ctx.quadraticCurveTo(x, y, x + radius, y);
181 - }
182 - }
183 -
184 - ctx.fill();
185 - if (borderWidth) {
186 - ctx.stroke();
187 - }
188 -}
189 -
190 -export default {
191 - draw
192 -};
1 -export default (name = '') =>
2 - name
3 - .replace(/\s+/, ' ')
4 - .split(' ')
5 - .slice(0, 2)
6 - .map(v => v && v[0].toUpperCase())
7 - .join('');
1 -export { default as chartjs } from './chartjs';
2 -export { default as getInitials } from './getInitials';
1 -import React from 'react';
2 -
3 -// Material components
4 -import { SvgIcon } from '@material-ui/core';
5 -
6 -export default function Facebook(props) {
7 - return (
8 - <SvgIcon {...props}>
9 - <path d="M9.53144612,22.005 L9.53144612,13.0552149 L6.44166667,13.0552149 L6.44166667,9.49875 L9.53144612,9.49875 L9.53144612,6.68484375 C9.53144612,5.19972656 9.95946769,4.04680661 10.8155103,3.22608401 C11.6715529,2.4053613 12.808485,1.995 14.2263057,1.995 C15.3766134,1.995 16.3129099,2.04710915 17.0351961,2.15132812 L17.0351961,5.3169726 L15.1090998,5.3169726 C14.3868137,5.3169726 13.8919142,5.47330073 13.6244006,5.78595698 C13.4103902,6.04650407 13.3033846,6.46337874 13.3033846,7.03658198 L13.3033846,9.49875 L16.71418,9.49875 L16.2326559,13.0552149 L13.3033846,13.0552149 L13.3033846,22.005 L9.53144612,22.005 Z" />
10 - </SvgIcon>
11 - );
12 -}
1 -import React from 'react';
2 -
3 -// Material components
4 -import { SvgIcon } from '@material-ui/core';
5 -
6 -export default function Google(props) {
7 - return (
8 - <SvgIcon {...props}>
9 - <path d="M21,12.2177419 C21,13.9112905 20.6311475,15.4233869 19.8934426,16.7540323 C19.1557377,18.0846776 18.1168031,19.1249998 16.7766393,19.875 C15.4364756,20.6250002 13.8934424,21 12.147541,21 C10.4999998,21 8.97540984,20.5947579 7.57377049,19.7842742 C6.17213115,18.9737905 5.05942604,17.8790323 4.23565574,16.5 C3.41188543,15.1209677 3,13.6209679 3,12 C3,10.3790321 3.41188543,8.87903226 4.23565574,7.5 C5.05942604,6.12096774 6.17213115,5.02620949 7.57377049,4.21572581 C8.97540984,3.40524212 10.4999998,3 12.147541,3 C14.5327871,3 16.5737705,3.78629051 18.2704918,5.35887097 L15.7991803,7.71774194 C15.0122953,6.96774175 14.0655738,6.52016129 12.9590164,6.375 C11.9262295,6.22983871 10.9057375,6.375 9.89754098,6.81048387 C8.88934445,7.24596774 8.07786904,7.89919355 7.46311475,8.77016129 C6.79918033,9.71370968 6.46721311,10.7903228 6.46721311,12 C6.46721311,13.0403228 6.72540984,13.9899192 7.24180328,14.8487903 C7.75819672,15.7076615 8.4467215,16.3971776 9.30737705,16.9173387 C10.1680326,17.4374998 11.1147541,17.6975806 12.147541,17.6975806 C13.2540984,17.6975806 14.2254096,17.455645 15.0614754,16.9717742 C15.7254098,16.5846772 16.2786885,16.0645161 16.7213115,15.4112903 C17.0409838,14.8790321 17.2499998,14.3467744 17.3483607,13.8145161 L12.147541,13.8145161 L12.147541,10.6935484 L20.852459,10.6935484 C20.9508199,11.2258066 21,11.7338712 21,12.2177419 Z" />
10 - </SvgIcon>
11 - );
12 -}
1 -export { default as Facebook } from './Facebook';
2 -export { default as Google } from './Google';
1 -import React from 'react';
2 -import ReactDOM from 'react-dom';
3 -
4 -import * as serviceWorker from './serviceWorker';
5 -import App from './App';
6 -
7 -ReactDOM.render(<App />, document.getElementById('root'));
8 -
9 -serviceWorker.unregister();
1 -import React, { useState } from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles, useTheme } from '@material-ui/styles';
5 -import { useMediaQuery } from '@material-ui/core';
6 -
7 -import { Sidebar, Topbar, Footer } from './components';
8 -
9 -const useStyles = makeStyles(theme => ({
10 - root: {
11 - paddingTop: 56,
12 - height: '100%',
13 - [theme.breakpoints.up('sm')]: {
14 - paddingTop: 64
15 - }
16 - },
17 - shiftContent: {
18 - paddingLeft: 240
19 - },
20 - content: {
21 - height: '100%'
22 - }
23 -}));
24 -
25 -const Main = props => {
26 - const { children } = props;
27 -
28 - const classes = useStyles();
29 - const theme = useTheme();
30 - const isDesktop = useMediaQuery(theme.breakpoints.up('lg'), {
31 - defaultMatches: true
32 - });
33 -
34 - const [openSidebar, setOpenSidebar] = useState(false);
35 -
36 - const handleSidebarOpen = () => {
37 - setOpenSidebar(true);
38 - };
39 -
40 - const handleSidebarClose = () => {
41 - setOpenSidebar(false);
42 - };
43 -
44 - const shouldOpenSidebar = isDesktop ? true : openSidebar;
45 -
46 - return (
47 - <div
48 - className={clsx({
49 - [classes.root]: true,
50 - [classes.shiftContent]: isDesktop
51 - })}
52 - >
53 - <Topbar onSidebarOpen={handleSidebarOpen} />
54 - <Sidebar
55 - onClose={handleSidebarClose}
56 - open={shouldOpenSidebar}
57 - variant={isDesktop ? 'persistent' : 'temporary'}
58 - />
59 - <main className={classes.content}>
60 - {children}
61 - <Footer />
62 - </main>
63 - </div>
64 - );
65 -};
66 -
67 -Main.propTypes = {
68 - children: PropTypes.node
69 -};
70 -
71 -export default Main;
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Typography, Link } from '@material-ui/core';
6 -
7 -const useStyles = makeStyles(theme => ({
8 - root: {
9 - padding: theme.spacing(4)
10 - }
11 -}));
12 -
13 -const Footer = props => {
14 - const { className, ...rest } = props;
15 -
16 - const classes = useStyles();
17 -
18 - return (
19 - <div
20 - {...rest}
21 - className={clsx(classes.root, className)}
22 - >
23 - <Typography variant="body1">
24 - &copy;{' '}
25 - <Link
26 - component="a"
27 - href="https://devias.io/"
28 - target="_blank"
29 - >
30 - Devias IO
31 - </Link>
32 - . 2019
33 - </Typography>
34 - <Typography variant="caption">
35 - Created with love for the environment. By designers and developers who
36 - love to work together in offices!
37 - </Typography>
38 - </div>
39 - );
40 -};
41 -
42 -Footer.propTypes = {
43 - className: PropTypes.string
44 -};
45 -
46 -export default Footer;
1 -import React from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Divider, Drawer } from '@material-ui/core';
6 -import DashboardIcon from '@material-ui/icons/Dashboard';
7 -import PeopleIcon from '@material-ui/icons/People';
8 -import ShoppingBasketIcon from '@material-ui/icons/ShoppingBasket';
9 -import TextFieldsIcon from '@material-ui/icons/TextFields';
10 -import ImageIcon from '@material-ui/icons/Image';
11 -import AccountBoxIcon from '@material-ui/icons/AccountBox';
12 -import SettingsIcon from '@material-ui/icons/Settings';
13 -import LockOpenIcon from '@material-ui/icons/LockOpen';
14 -
15 -import { Profile, SidebarNav, UpgradePlan } from './components';
16 -
17 -const useStyles = makeStyles(theme => ({
18 - drawer: {
19 - width: 240,
20 - [theme.breakpoints.up('lg')]: {
21 - marginTop: 64,
22 - height: 'calc(100% - 64px)'
23 - }
24 - },
25 - root: {
26 - backgroundColor: theme.palette.white,
27 - display: 'flex',
28 - flexDirection: 'column',
29 - height: '100%',
30 - padding: theme.spacing(2)
31 - },
32 - divider: {
33 - margin: theme.spacing(2, 0)
34 - },
35 - nav: {
36 - marginBottom: theme.spacing(2)
37 - }
38 -}));
39 -
40 -const Sidebar = props => {
41 - const { open, variant, onClose, className, ...rest } = props;
42 -
43 - const classes = useStyles();
44 -
45 - const pages = [
46 - {
47 - title: '내 드라이브',
48 - href: '/my-drive',
49 - icon: <DashboardIcon />
50 - },
51 - {
52 - title: '공유함',
53 - href: '/share',
54 - icon: <PeopleIcon />
55 - },
56 - {
57 - title: '최근 열어본 파일',
58 - href: '/recent',
59 - icon: <ShoppingBasketIcon />
60 - },
61 - {
62 - title: '휴지통',
63 - href: '/trash',
64 - icon: <LockOpenIcon />
65 - },
66 - {
67 - title: '계정',
68 - href: '/account',
69 - icon: <AccountBoxIcon />
70 - },
71 - {
72 - title: '설정',
73 - href: '/settings',
74 - icon: <SettingsIcon />
75 - }
76 - ];
77 -
78 - return (
79 - <Drawer
80 - anchor="left"
81 - classes={{ paper: classes.drawer }}
82 - onClose={onClose}
83 - open={open}
84 - variant={variant}
85 - >
86 - <div
87 - {...rest}
88 - className={clsx(classes.root, className)}
89 - >
90 - <Profile />
91 - <Divider className={classes.divider} />
92 - <SidebarNav
93 - className={classes.nav}
94 - pages={pages}
95 - />
96 - </div>
97 - </Drawer>
98 - );
99 -};
100 -
101 -Sidebar.propTypes = {
102 - className: PropTypes.string,
103 - onClose: PropTypes.func,
104 - open: PropTypes.bool.isRequired,
105 - variant: PropTypes.string.isRequired
106 -};
107 -
108 -export default Sidebar;
1 -import React from 'react';
2 -import { Link as RouterLink } from 'react-router-dom';
3 -import clsx from 'clsx';
4 -import PropTypes from 'prop-types';
5 -import { makeStyles } from '@material-ui/styles';
6 -import { Avatar, Typography } from '@material-ui/core';
7 -
8 -const useStyles = makeStyles(theme => ({
9 - root: {
10 - display: 'flex',
11 - flexDirection: 'column',
12 - alignItems: 'center',
13 - minHeight: 'fit-content'
14 - },
15 - avatar: {
16 - width: 60,
17 - height: 60
18 - },
19 - name: {
20 - marginTop: theme.spacing(1)
21 - }
22 -}));
23 -
24 -const Profile = props => {
25 - const { className, ...rest } = props;
26 -
27 - const classes = useStyles();
28 -
29 - const user = {
30 - name: '엄준식',
31 - avatar: '/images/avatars/avatar_1.png',
32 - membership: 'Basic Plan'
33 - };
34 -
35 - return (
36 - <div
37 - {...rest}
38 - className={clsx(classes.root, className)}
39 - >
40 - <Avatar
41 - alt="Person"
42 - className={classes.avatar}
43 - component={RouterLink}
44 - src={user.avatar}
45 - to="/settings"
46 - />
47 - <Typography
48 - className={classes.name}
49 - variant="h4"
50 - >
51 - {user.name}
52 - </Typography>
53 - <Typography variant="body2">{user.membership}</Typography>
54 - </div>
55 - );
56 -};
57 -
58 -Profile.propTypes = {
59 - className: PropTypes.string
60 -};
61 -
62 -export default Profile;
1 -/* eslint-disable react/no-multi-comp */
2 -/* eslint-disable react/display-name */
3 -import React, { forwardRef } from 'react';
4 -import { NavLink as RouterLink } from 'react-router-dom';
5 -import clsx from 'clsx';
6 -import PropTypes from 'prop-types';
7 -import { makeStyles } from '@material-ui/styles';
8 -import { List, ListItem, Button, colors } from '@material-ui/core';
9 -
10 -const useStyles = makeStyles(theme => ({
11 - root: {},
12 - item: {
13 - display: 'flex',
14 - paddingTop: 0,
15 - paddingBottom: 0
16 - },
17 - button: {
18 - color: colors.blueGrey[800],
19 - padding: '10px 8px',
20 - justifyContent: 'flex-start',
21 - textTransform: 'none',
22 - letterSpacing: 0,
23 - width: '100%',
24 - fontWeight: theme.typography.fontWeightMedium
25 - },
26 - icon: {
27 - color: theme.palette.icon,
28 - width: 24,
29 - height: 24,
30 - display: 'flex',
31 - alignItems: 'center',
32 - marginRight: theme.spacing(1)
33 - },
34 - active: {
35 - color: theme.palette.primary.main,
36 - fontWeight: theme.typography.fontWeightMedium,
37 - '& $icon': {
38 - color: theme.palette.primary.main
39 - }
40 - }
41 -}));
42 -
43 -const CustomRouterLink = forwardRef((props, ref) => (
44 - <div
45 - ref={ref}
46 - style={{ flexGrow: 1 }}
47 - >
48 - <RouterLink {...props} />
49 - </div>
50 -));
51 -
52 -const SidebarNav = props => {
53 - const { pages, className, ...rest } = props;
54 -
55 - const classes = useStyles();
56 -
57 - return (
58 - <List
59 - {...rest}
60 - className={clsx(classes.root, className)}
61 - >
62 - {pages.map(page => (
63 - <ListItem
64 - className={classes.item}
65 - disableGutters
66 - key={page.title}
67 - >
68 - <Button
69 - activeClassName={classes.active}
70 - className={classes.button}
71 - component={CustomRouterLink}
72 - to={page.href}
73 - >
74 - <div className={classes.icon}>{page.icon}</div>
75 - {page.title}
76 - </Button>
77 - </ListItem>
78 - ))}
79 - </List>
80 - );
81 -};
82 -
83 -SidebarNav.propTypes = {
84 - className: PropTypes.string,
85 - pages: PropTypes.array.isRequired
86 -};
87 -
88 -export default SidebarNav;
1 -import React from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Typography, Button, colors } from '@material-ui/core';
6 -
7 -const useStyles = makeStyles(theme => ({
8 - root: {
9 - backgroundColor: colors.grey[50]
10 - },
11 - media: {
12 - paddingTop: theme.spacing(2),
13 - height: 80,
14 - textAlign: 'center',
15 - '& > img': {
16 - height: '100%',
17 - width: 'auto'
18 - }
19 - },
20 - content: {
21 - padding: theme.spacing(1, 2)
22 - },
23 - actions: {
24 - padding: theme.spacing(1, 2),
25 - display: 'flex',
26 - justifyContent: 'center'
27 - }
28 -}));
29 -
30 -const UpgradePlan = props => {
31 - const { className, ...rest } = props;
32 -
33 - const classes = useStyles();
34 -
35 - return (
36 - <div
37 - {...rest}
38 - className={clsx(classes.root, className)}
39 - >
40 - <div className={classes.media}>
41 - <img
42 - alt="Upgrade to PRO"
43 - src="/images/undraw_resume_folder_2_arse.svg"
44 - />
45 - </div>
46 - <div className={classes.content}>
47 - <Typography
48 - align="center"
49 - gutterBottom
50 - variant="h6"
51 - >
52 - Upgrade to PRO
53 - </Typography>
54 - <Typography
55 - align="center"
56 - variant="body2"
57 - >
58 - Upgrade to Devias Kit PRO and get even more components
59 - </Typography>
60 - </div>
61 - <div className={classes.actions}>
62 - <Button
63 - color="primary"
64 - component="a"
65 - href="https://devias.io/products/devias-kit-pro"
66 - variant="contained"
67 - >
68 - Upgrade
69 - </Button>
70 - </div>
71 - </div>
72 - );
73 -};
74 -
75 -UpgradePlan.propTypes = {
76 - className: PropTypes.string
77 -};
78 -
79 -export default UpgradePlan;
1 -export { default as Profile } from './Profile';
2 -export { default as SidebarNav } from './SidebarNav';
3 -export { default as UpgradePlan } from './UpgradePlan';
1 -import React, { useState } from 'react';
2 -import { Link as RouterLink } from 'react-router-dom';
3 -import clsx from 'clsx';
4 -import PropTypes from 'prop-types';
5 -import { makeStyles } from '@material-ui/styles';
6 -import { AppBar, Toolbar, Badge, Hidden, IconButton } from '@material-ui/core';
7 -import MenuIcon from '@material-ui/icons/Menu';
8 -import NotificationsIcon from '@material-ui/icons/NotificationsOutlined';
9 -import InputIcon from '@material-ui/icons/Input';
10 -
11 -const useStyles = makeStyles(theme => ({
12 - root: {
13 - boxShadow: 'none'
14 - },
15 - flexGrow: {
16 - flexGrow: 1
17 - },
18 - signOutButton: {
19 - marginLeft: theme.spacing(1)
20 - }
21 -}));
22 -
23 -const Topbar = props => {
24 - const { className, onSidebarOpen, ...rest } = props;
25 -
26 - const classes = useStyles();
27 -
28 - const [notifications] = useState([]);
29 -
30 - return (
31 - <AppBar
32 - {...rest}
33 - className={clsx(classes.root, className)}
34 - >
35 - <Toolbar>
36 - <RouterLink to="/">
37 - <h1>KHU Box</h1>
38 - </RouterLink>
39 - <div className={classes.flexGrow} />
40 - <Hidden mdDown>
41 - <IconButton color="inherit">
42 - <Badge
43 - badgeContent={notifications.length}
44 - color="primary"
45 - variant="dot"
46 - >
47 - <NotificationsIcon />
48 - </Badge>
49 - </IconButton>
50 - <IconButton
51 - className={classes.signOutButton}
52 - color="inherit"
53 - >
54 - <InputIcon />
55 - </IconButton>
56 - </Hidden>
57 - <Hidden lgUp>
58 - <IconButton
59 - color="inherit"
60 - onClick={onSidebarOpen}
61 - >
62 - <MenuIcon />
63 - </IconButton>
64 - </Hidden>
65 - </Toolbar>
66 - </AppBar>
67 - );
68 -};
69 -
70 -Topbar.propTypes = {
71 - className: PropTypes.string,
72 - onSidebarOpen: PropTypes.func
73 -};
74 -
75 -export default Topbar;
1 -export { default as Footer } from './Footer';
2 -export { default as Sidebar } from './Sidebar';
3 -export { default as Topbar } from './Topbar';
1 -export { default } from './Main';
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import { makeStyles } from '@material-ui/styles';
4 -
5 -import { Topbar } from './components';
6 -
7 -const useStyles = makeStyles(() => ({
8 - root: {
9 - paddingTop: 64,
10 - height: '100%'
11 - },
12 - content: {
13 - height: '100%'
14 - }
15 -}));
16 -
17 -const Minimal = props => {
18 - const { children } = props;
19 -
20 - const classes = useStyles();
21 -
22 - return (
23 - <div className={classes.root}>
24 - <Topbar />
25 - <main className={classes.content}>{children}</main>
26 - </div>
27 - );
28 -};
29 -
30 -Minimal.propTypes = {
31 - children: PropTypes.node,
32 - className: PropTypes.string
33 -};
34 -
35 -export default Minimal;
1 -import React from 'react';
2 -import { Link as RouterLink } from 'react-router-dom';
3 -import clsx from 'clsx';
4 -import PropTypes from 'prop-types';
5 -import { makeStyles } from '@material-ui/styles';
6 -import { AppBar, Toolbar } from '@material-ui/core';
7 -
8 -const useStyles = makeStyles(() => ({
9 - root: {
10 - boxShadow: 'none'
11 - }
12 -}));
13 -
14 -const Topbar = props => {
15 - const { className, ...rest } = props;
16 -
17 - const classes = useStyles();
18 -
19 - return (
20 - <AppBar
21 - {...rest}
22 - className={clsx(classes.root, className)}
23 - color="primary"
24 - position="fixed"
25 - >
26 - <Toolbar>
27 - <RouterLink to="/">
28 - <img
29 - alt="Logo"
30 - src="/images/logos/logo--white.svg"
31 - />
32 - </RouterLink>
33 - </Toolbar>
34 - </AppBar>
35 - );
36 -};
37 -
38 -Topbar.propTypes = {
39 - className: PropTypes.string
40 -};
41 -
42 -export default Topbar;
1 -export { default as Topbar } from './Topbar';
1 -export { default } from './Minimal';
1 -export { default as Main } from './Main';
2 -export { default as Minimal } from './Minimal';
1 -[{"id":1,"name":"MattisNibh.tiff","modifiedAt":"2019-12-20","size":334,"share":false,"sharedAt":"2019-11-19","sharedUser":"Vi de Lloyd"},
2 -{"id":2,"name":"UltricesPosuereCubilia.mpeg","modifiedAt":"2019-06-12","size":703,"share":true,"sharedAt":"2019-10-10","sharedUser":"Rogerio Baynon"},
3 -{"id":3,"name":"FuscePosuereFelis.tiff","modifiedAt":"2019-08-09","size":811,"share":true,"sharedAt":"2019-11-18","sharedUser":"Etheline Hynard"},
4 -{"id":4,"name":"HacHabitassePlatea.xls","modifiedAt":"2020-01-23","size":414,"share":false,"sharedAt":"2020-01-08","sharedUser":"Rudd Skellern"},
5 -{"id":5,"name":"Vivamus.xls","modifiedAt":"2020-03-14","size":351,"share":false,"sharedAt":"2019-12-12","sharedUser":"Carmelle Plumridege"},
6 -{"id":6,"name":"BlanditMi.ppt","modifiedAt":"2019-05-09","size":234,"share":false,"sharedAt":"2020-03-12","sharedUser":"Darla Hassey"},
7 -{"id":7,"name":"ErosVestibulumAc.ppt","modifiedAt":"2019-12-18","size":381,"share":true,"sharedAt":"2019-12-17","sharedUser":"Dame Alenikov"},
8 -{"id":8,"name":"AcTellusSemper.ppt","modifiedAt":"2019-05-07","size":706,"share":false,"sharedAt":"2020-02-10","sharedUser":"Jules Gutteridge"},
9 -{"id":9,"name":"SedTinciduntEu.xls","modifiedAt":"2019-07-24","size":746,"share":true,"sharedAt":"2020-04-19","sharedUser":"Peyton Wakeling"},
10 -{"id":10,"name":"Turpis.tiff","modifiedAt":"2019-12-14","size":132,"share":true,"sharedAt":"2019-07-10","sharedUser":"Felice Tethcote"},
11 -{"id":11,"name":"Nascetur.mp3","modifiedAt":"2019-12-28","size":218,"share":true,"sharedAt":"2019-05-19","sharedUser":"Lindie Balmann"},
12 -{"id":12,"name":"Est.ppt","modifiedAt":"2019-07-13","size":467,"share":true,"sharedAt":"2019-08-31","sharedUser":"Nathalia Heinritz"},
13 -{"id":13,"name":"Egestas.txt","modifiedAt":"2020-04-22","size":690,"share":true,"sharedAt":"2020-04-26","sharedUser":"Eloise Proschke"},
14 -{"id":14,"name":"Sed.doc","modifiedAt":"2019-10-09","size":691,"share":false,"sharedAt":"2019-08-27","sharedUser":"Janaye Aikin"},
15 -{"id":15,"name":"InFaucibus.ppt","modifiedAt":"2019-12-10","size":677,"share":false,"sharedAt":"2020-02-09","sharedUser":"Maurizia Swann"},
16 -{"id":16,"name":"EgetTempus.xls","modifiedAt":"2020-04-07","size":542,"share":false,"sharedAt":"2019-11-16","sharedUser":"Terrence Gummow"},
17 -{"id":17,"name":"AcNulla.tiff","modifiedAt":"2019-09-12","size":409,"share":true,"sharedAt":"2019-12-03","sharedUser":"Paulie Strawbridge"},
18 -{"id":18,"name":"LiberoNullam.mov","modifiedAt":"2019-11-29","size":700,"share":true,"sharedAt":"2019-07-07","sharedUser":"Peggi Guildford"},
19 -{"id":19,"name":"DuisBibendum.xls","modifiedAt":"2020-04-19","size":822,"share":true,"sharedAt":"2019-06-17","sharedUser":"Baron Colles"},
20 -{"id":20,"name":"AliquetPulvinar.ppt","modifiedAt":"2019-09-11","size":799,"share":true,"sharedAt":"2020-02-13","sharedUser":"Roxanna Elcombe"},
21 -{"id":21,"name":"Congue.ppt","modifiedAt":"2020-03-28","size":671,"share":true,"sharedAt":"2019-05-11","sharedUser":"Gleda Rabjohn"},
22 -{"id":22,"name":"IdNulla.xls","modifiedAt":"2019-06-05","size":810,"share":true,"sharedAt":"2019-08-18","sharedUser":"Constantia Windrass"},
23 -{"id":23,"name":"MaurisLaoreet.mov","modifiedAt":"2019-07-12","size":651,"share":false,"sharedAt":"2019-11-17","sharedUser":"Lynda Paoletto"},
24 -{"id":24,"name":"EuSapien.mp3","modifiedAt":"2019-08-19","size":50,"share":true,"sharedAt":"2019-10-23","sharedUser":"Bern Rizzello"},
25 -{"id":25,"name":"Eu.jpeg","modifiedAt":"2020-01-08","size":635,"share":true,"sharedAt":"2019-12-01","sharedUser":"Norah Dumini"},
26 -{"id":26,"name":"Cras.ppt","modifiedAt":"2020-04-28","size":37,"share":true,"sharedAt":"2019-11-26","sharedUser":"Kelsy Stebbings"},
27 -{"id":27,"name":"SapienUt.xls","modifiedAt":"2020-02-10","size":901,"share":true,"sharedAt":"2019-09-13","sharedUser":"Aveline Kemmis"},
28 -{"id":28,"name":"EgetTempus.ppt","modifiedAt":"2020-03-05","size":652,"share":false,"sharedAt":"2020-04-05","sharedUser":"Steffane Hussy"},
29 -{"id":29,"name":"ConvallisTortor.mpeg","modifiedAt":"2019-10-05","size":306,"share":false,"sharedAt":"2020-01-20","sharedUser":"Coral Lisciandro"},
30 -{"id":30,"name":"Sed.pdf","modifiedAt":"2020-03-22","size":965,"share":false,"sharedAt":"2020-02-25","sharedUser":"Dawna Ruprechter"},
31 -{"id":31,"name":"MollisMolestieLorem.ppt","modifiedAt":"2019-12-12","size":415,"share":true,"sharedAt":"2020-03-06","sharedUser":"Myra Fifield"},
32 -{"id":32,"name":"APedePosuere.tiff","modifiedAt":"2019-12-01","size":132,"share":false,"sharedAt":"2019-09-03","sharedUser":"Wolfy Boniface"},
33 -{"id":33,"name":"Proin.jpeg","modifiedAt":"2020-04-21","size":315,"share":false,"sharedAt":"2019-10-13","sharedUser":"Ozzie Orpin"},
34 -{"id":34,"name":"HacHabitassePlatea.mp3","modifiedAt":"2020-03-09","size":761,"share":false,"sharedAt":"2019-10-09","sharedUser":"Theadora Vaughan"},
35 -{"id":35,"name":"Vulputate.doc","modifiedAt":"2019-11-22","size":761,"share":false,"sharedAt":"2019-05-18","sharedUser":"Reina Copley"},
36 -{"id":36,"name":"SitAmet.tiff","modifiedAt":"2019-07-11","size":284,"share":true,"sharedAt":"2019-10-06","sharedUser":"Rhiamon Devon"},
37 -{"id":37,"name":"ConvallisNullaNeque.tiff","modifiedAt":"2019-12-23","size":201,"share":true,"sharedAt":"2019-05-19","sharedUser":"Dur Pocke"},
38 -{"id":38,"name":"RhoncusAliquet.xls","modifiedAt":"2019-10-11","size":635,"share":true,"sharedAt":"2019-07-31","sharedUser":"Dori Grellis"},
39 -{"id":39,"name":"TinciduntEuFelis.doc","modifiedAt":"2019-06-05","size":118,"share":true,"sharedAt":"2019-09-17","sharedUser":"Wylie Warbrick"},
40 -{"id":40,"name":"Erat.mp3","modifiedAt":"2020-02-13","size":285,"share":false,"sharedAt":"2019-10-06","sharedUser":"Chelsey Marzellano"},
41 -{"id":41,"name":"VestibulumSitAmet.jpeg","modifiedAt":"2020-04-23","size":262,"share":false,"sharedAt":"2019-11-03","sharedUser":"Marni Harpur"},
42 -{"id":42,"name":"PorttitorLacusAt.xls","modifiedAt":"2019-11-06","size":301,"share":false,"sharedAt":"2019-08-23","sharedUser":"Gerri Jest"},
43 -{"id":43,"name":"EratNulla.jpeg","modifiedAt":"2019-10-11","size":788,"share":true,"sharedAt":"2020-01-20","sharedUser":"Ginni Hillatt"},
44 -{"id":44,"name":"CubiliaCuraeMauris.ppt","modifiedAt":"2019-11-04","size":416,"share":true,"sharedAt":"2019-10-09","sharedUser":"Eolande Garstan"},
45 -{"id":45,"name":"QuisJusto.avi","modifiedAt":"2020-03-03","size":159,"share":false,"sharedAt":"2020-02-13","sharedUser":"Karl Lyness"},
46 -{"id":46,"name":"ElementumInHac.avi","modifiedAt":"2019-09-04","size":413,"share":true,"sharedAt":"2019-06-17","sharedUser":"Hugo Challicum"},
47 -{"id":47,"name":"Adipiscing.tiff","modifiedAt":"2020-01-16","size":510,"share":true,"sharedAt":"2019-08-30","sharedUser":"Leela Larmouth"},
48 -{"id":48,"name":"Sed.gif","modifiedAt":"2020-02-17","size":778,"share":true,"sharedAt":"2019-12-30","sharedUser":"Koren Timmermann"},
49 -{"id":49,"name":"QuisqueArcuLibero.xls","modifiedAt":"2020-02-23","size":320,"share":false,"sharedAt":"2020-01-15","sharedUser":"Osborne Sprull"},
50 -{"id":50,"name":"Ac.ppt","modifiedAt":"2019-07-01","size":644,"share":true,"sharedAt":"2019-10-15","sharedUser":"Brandy Antal"}]
1 -// This optional code is used to register a service worker.
2 -// register() is not called by default.
3 -
4 -// This lets the app load faster on subsequent visits in production, and gives
5 -// it offline capabilities. However, it also means that developers (and users)
6 -// will only see deployed updates on subsequent visits to a page, after all the
7 -// existing tabs open on the page have been closed, since previously cached
8 -// resources are updated in the background.
9 -
10 -// To learn more about the benefits of this model and instructions on how to
11 -// opt-in, read http://bit.ly/CRA-PWA
12 -
13 -const isLocalhost = Boolean(
14 - window.location.hostname === 'localhost' ||
15 - // [::1] is the IPv6 localhost address.
16 - window.location.hostname === '[::1]' ||
17 - // 127.0.0.1/8 is considered localhost for IPv4.
18 - window.location.hostname.match(
19 - /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
20 - )
21 -);
22 -
23 -export function register(config) {
24 - if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
25 - // The URL constructor is available in all browsers that support SW.
26 - const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
27 - if (publicUrl.origin !== window.location.origin) {
28 - // Our service worker won't work if PUBLIC_URL is on a different origin
29 - // from what our page is served on. This might happen if a CDN is used to
30 - // serve assets; see https://github.com/facebook/create-react-app/issues/2374
31 - return;
32 - }
33 -
34 - window.addEventListener('load', () => {
35 - const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
36 -
37 - if (isLocalhost) {
38 - // This is running on localhost. Let's check if a service worker still exists or not.
39 - checkValidServiceWorker(swUrl, config);
40 -
41 - // Add some additional logging to localhost, pointing developers to the
42 - // service worker/PWA documentation.
43 - navigator.serviceWorker.ready.then(() => {
44 - console.log(
45 - 'This web app is being served cache-first by a service ' +
46 - 'worker. To learn more, visit http://bit.ly/CRA-PWA'
47 - );
48 - });
49 - } else {
50 - // Is not localhost. Just register service worker
51 - registerValidSW(swUrl, config);
52 - }
53 - });
54 - }
55 -}
56 -
57 -function registerValidSW(swUrl, config) {
58 - navigator.serviceWorker
59 - .register(swUrl)
60 - .then(registration => {
61 - registration.onupdatefound = () => {
62 - const installingWorker = registration.installing;
63 - if (installingWorker == null) {
64 - return;
65 - }
66 - installingWorker.onstatechange = () => {
67 - if (installingWorker.state === 'installed') {
68 - if (navigator.serviceWorker.controller) {
69 - // At this point, the updated precached content has been fetched,
70 - // but the previous service worker will still serve the older
71 - // content until all client tabs are closed.
72 - console.log(
73 - 'New content is available and will be used when all ' +
74 - 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'
75 - );
76 -
77 - // Execute callback
78 - if (config && config.onUpdate) {
79 - config.onUpdate(registration);
80 - }
81 - } else {
82 - // At this point, everything has been precached.
83 - // It's the perfect time to display a
84 - // "Content is cached for offline use." message.
85 - console.log('Content is cached for offline use.');
86 -
87 - // Execute callback
88 - if (config && config.onSuccess) {
89 - config.onSuccess(registration);
90 - }
91 - }
92 - }
93 - };
94 - };
95 - })
96 - .catch(error => {
97 - console.error('Error during service worker registration:', error);
98 - });
99 -}
100 -
101 -function checkValidServiceWorker(swUrl, config) {
102 - // Check if the service worker can be found. If it can't reload the page.
103 - fetch(swUrl)
104 - .then(response => {
105 - // Ensure service worker exists, and that we really are getting a JS file.
106 - const contentType = response.headers.get('content-type');
107 - if (
108 - response.status === 404 ||
109 - (contentType != null && contentType.indexOf('javascript') === -1)
110 - ) {
111 - // No service worker found. Probably a different app. Reload the page.
112 - navigator.serviceWorker.ready.then(registration => {
113 - registration.unregister().then(() => {
114 - window.location.reload();
115 - });
116 - });
117 - } else {
118 - // Service worker found. Proceed as normal.
119 - registerValidSW(swUrl, config);
120 - }
121 - })
122 - .catch(() => {
123 - console.log(
124 - 'No internet connection found. App is running in offline mode.'
125 - );
126 - });
127 -}
128 -
129 -export function unregister() {
130 - if ('serviceWorker' in navigator) {
131 - navigator.serviceWorker.ready.then(registration => {
132 - registration.unregister();
133 - });
134 - }
135 -}
1 -import { createMuiTheme } from '@material-ui/core';
2 -
3 -import palette from './palette';
4 -import typography from './typography';
5 -import overrides from './overrides';
6 -
7 -const theme = createMuiTheme({
8 - palette,
9 - typography,
10 - overrides,
11 - zIndex: {
12 - appBar: 1200,
13 - drawer: 1100
14 - }
15 -});
16 -
17 -export default theme;
1 -export default {
2 - contained: {
3 - boxShadow:
4 - '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.20)',
5 - backgroundColor: '#FFFFFF'
6 - }
7 -};
1 -import palette from '../palette';
2 -
3 -export default {
4 - root: {
5 - color: palette.icon,
6 - '&:hover': {
7 - backgroundColor: 'rgba(0, 0, 0, 0.03)'
8 - }
9 - }
10 -};
1 -export default {
2 - elevation1: {
3 - boxShadow: '0 0 0 1px rgba(63,63,68,0.05), 0 1px 3px 0 rgba(63,63,68,0.15)'
4 - }
5 -};
1 -import palette from '../palette';
2 -import typography from '../typography';
3 -
4 -export default {
5 - root: {
6 - ...typography.body1,
7 - borderBottom: `1px solid ${palette.divider}`
8 - }
9 -};
1 -import { colors } from '@material-ui/core';
2 -
3 -export default {
4 - root: {
5 - backgroundColor: colors.grey[50]
6 - }
7 -};
1 -import palette from '../palette';
2 -
3 -export default {
4 - root: {
5 - '&$selected': {
6 - backgroundColor: palette.background.default
7 - },
8 - '&$hover': {
9 - '&:hover': {
10 - backgroundColor: palette.background.default
11 - }
12 - }
13 - }
14 -};
1 -export default {
2 - gutterBottom: {
3 - marginBottom: 8
4 - }
5 -};
1 -import MuiButton from './MuiButton';
2 -import MuiIconButton from './MuiIconButton';
3 -import MuiPaper from './MuiPaper';
4 -import MuiTableCell from './MuiTableCell';
5 -import MuiTableHead from './MuiTableHead';
6 -import MuiTypography from './MuiTypography';
7 -
8 -export default {
9 - MuiButton,
10 - MuiIconButton,
11 - MuiPaper,
12 - MuiTableCell,
13 - MuiTableHead,
14 - MuiTypography
15 -};
1 -import { colors } from '@material-ui/core';
2 -
3 -const white = '#FFFFFF';
4 -const black = '#000000';
5 -
6 -export default {
7 - black,
8 - white,
9 - primary: {
10 - contrastText: white,
11 - dark: colors.indigo[900],
12 - main: colors.indigo[500],
13 - light: colors.indigo[100]
14 - },
15 - secondary: {
16 - contrastText: white,
17 - dark: colors.blue[900],
18 - main: colors.blue['A400'],
19 - light: colors.blue['A400']
20 - },
21 - success: {
22 - contrastText: white,
23 - dark: colors.green[900],
24 - main: colors.green[600],
25 - light: colors.green[400]
26 - },
27 - info: {
28 - contrastText: white,
29 - dark: colors.blue[900],
30 - main: colors.blue[600],
31 - light: colors.blue[400]
32 - },
33 - warning: {
34 - contrastText: white,
35 - dark: colors.orange[900],
36 - main: colors.orange[600],
37 - light: colors.orange[400]
38 - },
39 - error: {
40 - contrastText: white,
41 - dark: colors.red[900],
42 - main: colors.red[600],
43 - light: colors.red[400]
44 - },
45 - text: {
46 - primary: colors.blueGrey[900],
47 - secondary: colors.blueGrey[600],
48 - link: colors.blue[600]
49 - },
50 - background: {
51 - default: '#F4F6F8',
52 - paper: white
53 - },
54 - icon: colors.blueGrey[600],
55 - divider: colors.grey[200]
56 -};
1 -import palette from './palette';
2 -
3 -export default {
4 - h1: {
5 - color: palette.text.primary,
6 - fontWeight: 500,
7 - fontSize: '35px',
8 - letterSpacing: '-0.24px',
9 - lineHeight: '40px'
10 - },
11 - h2: {
12 - color: palette.text.primary,
13 - fontWeight: 500,
14 - fontSize: '29px',
15 - letterSpacing: '-0.24px',
16 - lineHeight: '32px'
17 - },
18 - h3: {
19 - color: palette.text.primary,
20 - fontWeight: 500,
21 - fontSize: '24px',
22 - letterSpacing: '-0.06px',
23 - lineHeight: '28px'
24 - },
25 - h4: {
26 - color: palette.text.primary,
27 - fontWeight: 500,
28 - fontSize: '20px',
29 - letterSpacing: '-0.06px',
30 - lineHeight: '24px'
31 - },
32 - h5: {
33 - color: palette.text.primary,
34 - fontWeight: 500,
35 - fontSize: '16px',
36 - letterSpacing: '-0.05px',
37 - lineHeight: '20px'
38 - },
39 - h6: {
40 - color: palette.text.primary,
41 - fontWeight: 500,
42 - fontSize: '14px',
43 - letterSpacing: '-0.05px',
44 - lineHeight: '20px'
45 - },
46 - subtitle1: {
47 - color: palette.text.primary,
48 - fontSize: '16px',
49 - letterSpacing: '-0.05px',
50 - lineHeight: '25px'
51 - },
52 - subtitle2: {
53 - color: palette.text.secondary,
54 - fontWeight: 400,
55 - fontSize: '14px',
56 - letterSpacing: '-0.05px',
57 - lineHeight: '21px'
58 - },
59 - body1: {
60 - color: palette.text.primary,
61 - fontSize: '14px',
62 - letterSpacing: '-0.05px',
63 - lineHeight: '21px'
64 - },
65 - body2: {
66 - color: palette.text.secondary,
67 - fontSize: '12px',
68 - letterSpacing: '-0.04px',
69 - lineHeight: '18px'
70 - },
71 - button: {
72 - color: palette.text.primary,
73 - fontSize: '14px'
74 - },
75 - caption: {
76 - color: palette.text.secondary,
77 - fontSize: '11px',
78 - letterSpacing: '0.33px',
79 - lineHeight: '13px'
80 - },
81 - overline: {
82 - color: palette.text.secondary,
83 - fontSize: '11px',
84 - fontWeight: 500,
85 - letterSpacing: '0.33px',
86 - lineHeight: '13px',
87 - textTransform: 'uppercase'
88 - }
89 -};
1 -import React from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -import { Grid } from '@material-ui/core';
4 -
5 -import { AccountProfile, AccountDetails } from './components';
6 -
7 -const useStyles = makeStyles(theme => ({
8 - root: {
9 - padding: theme.spacing(4)
10 - }
11 -}));
12 -
13 -const Account = () => {
14 - const classes = useStyles();
15 -
16 - return (
17 - <div className={classes.root}>
18 - <Grid
19 - container
20 - spacing={4}
21 - >
22 - <Grid
23 - item
24 - lg={4}
25 - md={6}
26 - xl={4}
27 - xs={12}
28 - >
29 - <AccountProfile />
30 - </Grid>
31 - <Grid
32 - item
33 - lg={8}
34 - md={6}
35 - xl={8}
36 - xs={12}
37 - >
38 - <AccountDetails />
39 - </Grid>
40 - </Grid>
41 - </div>
42 - );
43 -};
44 -
45 -export default Account;
1 -import React, { useState } from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import { makeStyles } from '@material-ui/styles';
5 -import {
6 - Card,
7 - CardHeader,
8 - CardContent,
9 - CardActions,
10 - Divider,
11 - Grid,
12 - Button,
13 - TextField
14 -} from '@material-ui/core';
15 -
16 -const useStyles = makeStyles(() => ({
17 - root: {}
18 -}));
19 -
20 -const AccountDetails = props => {
21 - const { className, ...rest } = props;
22 -
23 - const classes = useStyles();
24 -
25 - const [values, setValues] = useState({
26 - firstName: 'Shen',
27 - lastName: 'Zhi',
28 - email: 'shen.zhi@devias.io',
29 - phone: '',
30 - state: 'Alabama',
31 - country: 'USA'
32 - });
33 -
34 - const handleChange = event => {
35 - setValues({
36 - ...values,
37 - [event.target.name]: event.target.value
38 - });
39 - };
40 -
41 - const states = [
42 - {
43 - value: 'alabama',
44 - label: 'Alabama'
45 - },
46 - {
47 - value: 'new-york',
48 - label: 'New York'
49 - },
50 - {
51 - value: 'san-francisco',
52 - label: 'San Francisco'
53 - }
54 - ];
55 -
56 - return (
57 - <Card
58 - {...rest}
59 - className={clsx(classes.root, className)}
60 - >
61 - <form
62 - autoComplete="off"
63 - noValidate
64 - >
65 - <CardHeader
66 - subheader="The information can be edited"
67 - title="Profile"
68 - />
69 - <Divider />
70 - <CardContent>
71 - <Grid
72 - container
73 - spacing={3}
74 - >
75 - <Grid
76 - item
77 - md={6}
78 - xs={12}
79 - >
80 - <TextField
81 - fullWidth
82 - helperText="Please specify the first name"
83 - label="First name"
84 - margin="dense"
85 - name="firstName"
86 - onChange={handleChange}
87 - required
88 - value={values.firstName}
89 - variant="outlined"
90 - />
91 - </Grid>
92 - <Grid
93 - item
94 - md={6}
95 - xs={12}
96 - >
97 - <TextField
98 - fullWidth
99 - label="Last name"
100 - margin="dense"
101 - name="lastName"
102 - onChange={handleChange}
103 - required
104 - value={values.lastName}
105 - variant="outlined"
106 - />
107 - </Grid>
108 - <Grid
109 - item
110 - md={6}
111 - xs={12}
112 - >
113 - <TextField
114 - fullWidth
115 - label="Email Address"
116 - margin="dense"
117 - name="email"
118 - onChange={handleChange}
119 - required
120 - value={values.email}
121 - variant="outlined"
122 - />
123 - </Grid>
124 - <Grid
125 - item
126 - md={6}
127 - xs={12}
128 - >
129 - <TextField
130 - fullWidth
131 - label="Phone Number"
132 - margin="dense"
133 - name="phone"
134 - onChange={handleChange}
135 - type="number"
136 - value={values.phone}
137 - variant="outlined"
138 - />
139 - </Grid>
140 - <Grid
141 - item
142 - md={6}
143 - xs={12}
144 - >
145 - <TextField
146 - fullWidth
147 - label="Select State"
148 - margin="dense"
149 - name="state"
150 - onChange={handleChange}
151 - required
152 - select
153 - // eslint-disable-next-line react/jsx-sort-props
154 - SelectProps={{ native: true }}
155 - value={values.state}
156 - variant="outlined"
157 - >
158 - {states.map(option => (
159 - <option
160 - key={option.value}
161 - value={option.value}
162 - >
163 - {option.label}
164 - </option>
165 - ))}
166 - </TextField>
167 - </Grid>
168 - <Grid
169 - item
170 - md={6}
171 - xs={12}
172 - >
173 - <TextField
174 - fullWidth
175 - label="Country"
176 - margin="dense"
177 - name="country"
178 - onChange={handleChange}
179 - required
180 - value={values.country}
181 - variant="outlined"
182 - />
183 - </Grid>
184 - </Grid>
185 - </CardContent>
186 - <Divider />
187 - <CardActions>
188 - <Button
189 - color="primary"
190 - variant="contained"
191 - >
192 - Save details
193 - </Button>
194 - </CardActions>
195 - </form>
196 - </Card>
197 - );
198 -};
199 -
200 -AccountDetails.propTypes = {
201 - className: PropTypes.string
202 -};
203 -
204 -export default AccountDetails;
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import moment from 'moment';
5 -import { makeStyles } from '@material-ui/styles';
6 -import {
7 - Card,
8 - CardActions,
9 - CardContent,
10 - Avatar,
11 - Typography,
12 - Divider,
13 - Button,
14 - LinearProgress
15 -} from '@material-ui/core';
16 -
17 -const useStyles = makeStyles(theme => ({
18 - root: {},
19 - details: {
20 - display: 'flex'
21 - },
22 - avatar: {
23 - marginLeft: 'auto',
24 - height: 110,
25 - width: 100,
26 - flexShrink: 0,
27 - flexGrow: 0
28 - },
29 - progress: {
30 - marginTop: theme.spacing(2)
31 - },
32 - uploadButton: {
33 - marginRight: theme.spacing(2)
34 - }
35 -}));
36 -
37 -const AccountProfile = props => {
38 - const { className, ...rest } = props;
39 -
40 - const classes = useStyles();
41 -
42 - const user = {
43 - name: '엄준식',
44 - membership: 'Basic',
45 - avatar: '/images/avatars/avatar_1.png'
46 - };
47 -
48 - return (
49 - <Card
50 - {...rest}
51 - className={clsx(classes.root, className)}
52 - >
53 - <CardContent>
54 - <div className={classes.details}>
55 - <div>
56 - <Typography
57 - gutterBottom
58 - variant="h2"
59 - >
60 - {user.name}
61 - </Typography>
62 - <Typography
63 - color="textSecondary"
64 - variant="body1"
65 - >
66 - {user.membership + " Plan"}
67 - </Typography>
68 - </div>
69 - <Avatar
70 - className={classes.avatar}
71 - src={user.avatar}
72 - />
73 - </div>
74 - <div className={classes.progress}>
75 - <Typography variant="body1">저장용량: 70% (7GB/10GB)</Typography>
76 - <LinearProgress
77 - value={70}
78 - variant="determinate"
79 - />
80 - </div>
81 - </CardContent>
82 - <Divider />
83 - <CardActions>
84 - <Button
85 - className={classes.uploadButton}
86 - color="primary"
87 - variant="text"
88 - >
89 - Upload picture
90 - </Button>
91 - <Button variant="text">Remove picture</Button>
92 - </CardActions>
93 - </Card>
94 - );
95 -};
96 -
97 -AccountProfile.propTypes = {
98 - className: PropTypes.string
99 -};
100 -
101 -export default AccountProfile;
1 -export { default as AccountDetails } from './AccountDetails';
2 -export { default as AccountProfile } from './AccountProfile';
1 -export { default } from './Account';
1 -import React from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -import { Grid } from '@material-ui/core';
4 -
5 -import {
6 - Budget,
7 - TotalUsers,
8 - TasksProgress,
9 - TotalProfit,
10 - LatestSales,
11 - UsersByDevice,
12 - LatestProducts,
13 - LatestOrders
14 -} from './components';
15 -
16 -const useStyles = makeStyles(theme => ({
17 - root: {
18 - padding: theme.spacing(4)
19 - }
20 -}));
21 -
22 -const Dashboard = () => {
23 - const classes = useStyles();
24 -
25 - return (
26 - <div className={classes.root}>
27 - <Grid
28 - container
29 - spacing={4}
30 - >
31 - <Grid
32 - item
33 - lg={3}
34 - sm={6}
35 - xl={3}
36 - xs={12}
37 - >
38 - <Budget />
39 - </Grid>
40 - <Grid
41 - item
42 - lg={3}
43 - sm={6}
44 - xl={3}
45 - xs={12}
46 - >
47 - <TotalUsers />
48 - </Grid>
49 - <Grid
50 - item
51 - lg={3}
52 - sm={6}
53 - xl={3}
54 - xs={12}
55 - >
56 - <TasksProgress />
57 - </Grid>
58 - <Grid
59 - item
60 - lg={3}
61 - sm={6}
62 - xl={3}
63 - xs={12}
64 - >
65 - <TotalProfit />
66 - </Grid>
67 - <Grid
68 - item
69 - lg={8}
70 - md={12}
71 - xl={9}
72 - xs={12}
73 - >
74 - <LatestSales />
75 - </Grid>
76 - <Grid
77 - item
78 - lg={4}
79 - md={6}
80 - xl={3}
81 - xs={12}
82 - >
83 - <UsersByDevice />
84 - </Grid>
85 - <Grid
86 - item
87 - lg={4}
88 - md={6}
89 - xl={3}
90 - xs={12}
91 - >
92 - <LatestProducts />
93 - </Grid>
94 - <Grid
95 - item
96 - lg={8}
97 - md={12}
98 - xl={9}
99 - xs={12}
100 - >
101 - <LatestOrders />
102 - </Grid>
103 - </Grid>
104 - </div>
105 - );
106 -};
107 -
108 -export default Dashboard;
1 -import React from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core';
6 -import ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';
7 -import MoneyIcon from '@material-ui/icons/Money';
8 -
9 -const useStyles = makeStyles(theme => ({
10 - root: {
11 - height: '100%'
12 - },
13 - content: {
14 - alignItems: 'center',
15 - display: 'flex'
16 - },
17 - title: {
18 - fontWeight: 700
19 - },
20 - avatar: {
21 - backgroundColor: theme.palette.error.main,
22 - height: 56,
23 - width: 56
24 - },
25 - icon: {
26 - height: 32,
27 - width: 32
28 - },
29 - difference: {
30 - marginTop: theme.spacing(2),
31 - display: 'flex',
32 - alignItems: 'center'
33 - },
34 - differenceIcon: {
35 - color: theme.palette.error.dark
36 - },
37 - differenceValue: {
38 - color: theme.palette.error.dark,
39 - marginRight: theme.spacing(1)
40 - }
41 -}));
42 -
43 -const Budget = props => {
44 - const { className, ...rest } = props;
45 -
46 - const classes = useStyles();
47 -
48 - return (
49 - <Card
50 - {...rest}
51 - className={clsx(classes.root, className)}
52 - >
53 - <CardContent>
54 - <Grid
55 - container
56 - justify="space-between"
57 - >
58 - <Grid item>
59 - <Typography
60 - className={classes.title}
61 - color="textSecondary"
62 - gutterBottom
63 - variant="body2"
64 - >
65 - BUDGET
66 - </Typography>
67 - <Typography variant="h3">$24,000</Typography>
68 - </Grid>
69 - <Grid item>
70 - <Avatar className={classes.avatar}>
71 - <MoneyIcon className={classes.icon} />
72 - </Avatar>
73 - </Grid>
74 - </Grid>
75 - <div className={classes.difference}>
76 - <ArrowDownwardIcon className={classes.differenceIcon} />
77 - <Typography
78 - className={classes.differenceValue}
79 - variant="body2"
80 - >
81 - 12%
82 - </Typography>
83 - <Typography
84 - className={classes.caption}
85 - variant="caption"
86 - >
87 - Since last month
88 - </Typography>
89 - </div>
90 - </CardContent>
91 - </Card>
92 - );
93 -};
94 -
95 -Budget.propTypes = {
96 - className: PropTypes.string
97 -};
98 -
99 -export default Budget;
1 -import React, { useState } from 'react';
2 -import clsx from 'clsx';
3 -import moment from 'moment';
4 -import PerfectScrollbar from 'react-perfect-scrollbar';
5 -import PropTypes from 'prop-types';
6 -import { makeStyles } from '@material-ui/styles';
7 -import {
8 - Card,
9 - CardActions,
10 - CardHeader,
11 - CardContent,
12 - Button,
13 - Divider,
14 - Table,
15 - TableBody,
16 - TableCell,
17 - TableHead,
18 - TableRow,
19 - Tooltip,
20 - TableSortLabel
21 -} from '@material-ui/core';
22 -import ArrowRightIcon from '@material-ui/icons/ArrowRight';
23 -
24 -import mockData from './data';
25 -import { StatusBullet } from 'components';
26 -
27 -const useStyles = makeStyles(theme => ({
28 - root: {},
29 - content: {
30 - padding: 0
31 - },
32 - inner: {
33 - minWidth: 800
34 - },
35 - statusContainer: {
36 - display: 'flex',
37 - alignItems: 'center'
38 - },
39 - status: {
40 - marginRight: theme.spacing(1)
41 - },
42 - actions: {
43 - justifyContent: 'flex-end'
44 - }
45 -}));
46 -
47 -const statusColors = {
48 - delivered: 'success',
49 - pending: 'info',
50 - refunded: 'danger'
51 -};
52 -
53 -const LatestOrders = props => {
54 - const { className, ...rest } = props;
55 -
56 - const classes = useStyles();
57 -
58 - const [orders] = useState(mockData);
59 -
60 - return (
61 - <Card
62 - {...rest}
63 - className={clsx(classes.root, className)}
64 - >
65 - <CardHeader
66 - action={
67 - <Button
68 - color="primary"
69 - size="small"
70 - variant="outlined"
71 - >
72 - New entry
73 - </Button>
74 - }
75 - title="Latest Orders"
76 - />
77 - <Divider />
78 - <CardContent className={classes.content}>
79 - <PerfectScrollbar>
80 - <div className={classes.inner}>
81 - <Table>
82 - <TableHead>
83 - <TableRow>
84 - <TableCell>Order Ref</TableCell>
85 - <TableCell>Customer</TableCell>
86 - <TableCell sortDirection="desc">
87 - <Tooltip
88 - enterDelay={300}
89 - title="Sort"
90 - >
91 - <TableSortLabel
92 - active
93 - direction="desc"
94 - >
95 - Date
96 - </TableSortLabel>
97 - </Tooltip>
98 - </TableCell>
99 - <TableCell>Status</TableCell>
100 - </TableRow>
101 - </TableHead>
102 - <TableBody>
103 - {orders.map(order => (
104 - <TableRow
105 - hover
106 - key={order.id}
107 - >
108 - <TableCell>{order.ref}</TableCell>
109 - <TableCell>{order.customer.name}</TableCell>
110 - <TableCell>
111 - {moment(order.createdAt).format('DD/MM/YYYY')}
112 - </TableCell>
113 - <TableCell>
114 - <div className={classes.statusContainer}>
115 - <StatusBullet
116 - className={classes.status}
117 - color={statusColors[order.status]}
118 - size="sm"
119 - />
120 - {order.status}
121 - </div>
122 - </TableCell>
123 - </TableRow>
124 - ))}
125 - </TableBody>
126 - </Table>
127 - </div>
128 - </PerfectScrollbar>
129 - </CardContent>
130 - <Divider />
131 - <CardActions className={classes.actions}>
132 - <Button
133 - color="primary"
134 - size="small"
135 - variant="text"
136 - >
137 - View all <ArrowRightIcon />
138 - </Button>
139 - </CardActions>
140 - </Card>
141 - );
142 -};
143 -
144 -LatestOrders.propTypes = {
145 - className: PropTypes.string
146 -};
147 -
148 -export default LatestOrders;
1 -import uuid from 'uuid/v1';
2 -
3 -export default [
4 - {
5 - id: uuid(),
6 - ref: 'CDD1049',
7 - amount: 30.5,
8 - customer: {
9 - name: 'Ekaterina Tankova'
10 - },
11 - createdAt: 1555016400000,
12 - status: 'pending'
13 - },
14 - {
15 - id: uuid(),
16 - ref: 'CDD1048',
17 - amount: 25.1,
18 - customer: {
19 - name: 'Cao Yu'
20 - },
21 - createdAt: 1555016400000,
22 - status: 'delivered'
23 - },
24 - {
25 - id: uuid(),
26 - ref: 'CDD1047',
27 - amount: 10.99,
28 - customer: {
29 - name: 'Alexa Richardson'
30 - },
31 - createdAt: 1554930000000,
32 - status: 'refunded'
33 - },
34 - {
35 - id: uuid(),
36 - ref: 'CDD1046',
37 - amount: 96.43,
38 - customer: {
39 - name: 'Anje Keizer'
40 - },
41 - createdAt: 1554757200000,
42 - status: 'pending'
43 - },
44 - {
45 - id: uuid(),
46 - ref: 'CDD1045',
47 - amount: 32.54,
48 - customer: {
49 - name: 'Clarke Gillebert'
50 - },
51 - createdAt: 1554670800000,
52 - status: 'delivered'
53 - },
54 - {
55 - id: uuid(),
56 - ref: 'CDD1044',
57 - amount: 16.76,
58 - customer: {
59 - name: 'Adam Denisov'
60 - },
61 - createdAt: 1554670800000,
62 - status: 'delivered'
63 - }
64 -];
1 -import React, { useState } from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import { makeStyles } from '@material-ui/styles';
5 -import {
6 - Card,
7 - CardHeader,
8 - CardContent,
9 - CardActions,
10 - Button,
11 - Divider,
12 - List,
13 - ListItem,
14 - ListItemAvatar,
15 - ListItemText,
16 - IconButton
17 -} from '@material-ui/core';
18 -import ArrowRightIcon from '@material-ui/icons/ArrowRight';
19 -import MoreVertIcon from '@material-ui/icons/MoreVert';
20 -
21 -import mockData from './data';
22 -
23 -const useStyles = makeStyles(() => ({
24 - root: {
25 - height: '100%'
26 - },
27 - content: {
28 - padding: 0
29 - },
30 - image: {
31 - height: 48,
32 - width: 48
33 - },
34 - actions: {
35 - justifyContent: 'flex-end'
36 - }
37 -}));
38 -
39 -const LatestProducts = props => {
40 - const { className, ...rest } = props;
41 -
42 - const classes = useStyles();
43 -
44 - const [products] = useState(mockData);
45 -
46 - return (
47 - <Card
48 - {...rest}
49 - className={clsx(classes.root, className)}
50 - >
51 - <CardHeader
52 - subtitle={`${products.length} in total`}
53 - title="Latest products"
54 - />
55 - <Divider />
56 - <CardContent className={classes.content}>
57 - <List>
58 - {products.map((product, i) => (
59 - <ListItem
60 - divider={i < products.length - 1}
61 - key={product.id}
62 - >
63 - <ListItemAvatar>
64 - <img
65 - alt="Product"
66 - className={classes.image}
67 - src={product.imageUrl}
68 - />
69 - </ListItemAvatar>
70 - <ListItemText
71 - primary={product.name}
72 - secondary={`Updated ${product.updatedAt.fromNow()}`}
73 - />
74 - <IconButton
75 - edge="end"
76 - size="small"
77 - >
78 - <MoreVertIcon />
79 - </IconButton>
80 - </ListItem>
81 - ))}
82 - </List>
83 - </CardContent>
84 - <Divider />
85 - <CardActions className={classes.actions}>
86 - <Button
87 - color="primary"
88 - size="small"
89 - variant="text"
90 - >
91 - View all <ArrowRightIcon />
92 - </Button>
93 - </CardActions>
94 - </Card>
95 - );
96 -};
97 -
98 -LatestProducts.propTypes = {
99 - className: PropTypes.string
100 -};
101 -
102 -export default LatestProducts;
1 -import uuid from 'uuid/v1';
2 -import moment from 'moment';
3 -
4 -export default [
5 - {
6 - id: uuid(),
7 - name: 'Dropbox',
8 - imageUrl: '/images/products/product_1.png',
9 - updatedAt: moment().subtract(2, 'hours')
10 - },
11 - {
12 - id: uuid(),
13 - name: 'Medium Corporation',
14 - imageUrl: '/images/products/product_2.png',
15 - updatedAt: moment().subtract(2, 'hours')
16 - },
17 - {
18 - id: uuid(),
19 - name: 'Slack',
20 - imageUrl: '/images/products/product_3.png',
21 - updatedAt: moment().subtract(3, 'hours')
22 - },
23 - {
24 - id: uuid(),
25 - name: 'Lyft',
26 - imageUrl: '/images/products/product_4.png',
27 - updatedAt: moment().subtract(5, 'hours')
28 - },
29 - {
30 - id: uuid(),
31 - name: 'GitHub',
32 - imageUrl: '/images/products/product_5.png',
33 - updatedAt: moment().subtract(9, 'hours')
34 - }
35 -];
1 -import React from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import { Bar } from 'react-chartjs-2';
5 -import { makeStyles } from '@material-ui/styles';
6 -import {
7 - Card,
8 - CardHeader,
9 - CardContent,
10 - CardActions,
11 - Divider,
12 - Button
13 -} from '@material-ui/core';
14 -import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';
15 -import ArrowRightIcon from '@material-ui/icons/ArrowRight';
16 -
17 -import { data, options } from './chart';
18 -
19 -const useStyles = makeStyles(() => ({
20 - root: {},
21 - chartContainer: {
22 - height: 400,
23 - position: 'relative'
24 - },
25 - actions: {
26 - justifyContent: 'flex-end'
27 - }
28 -}));
29 -
30 -const LatestSales = props => {
31 - const { className, ...rest } = props;
32 -
33 - const classes = useStyles();
34 -
35 - return (
36 - <Card
37 - {...rest}
38 - className={clsx(classes.root, className)}
39 - >
40 - <CardHeader
41 - action={
42 - <Button
43 - size="small"
44 - variant="text"
45 - >
46 - Last 7 days <ArrowDropDownIcon />
47 - </Button>
48 - }
49 - title="Latest Sales"
50 - />
51 - <Divider />
52 - <CardContent>
53 - <div className={classes.chartContainer}>
54 - <Bar
55 - data={data}
56 - options={options}
57 - />
58 - </div>
59 - </CardContent>
60 - <Divider />
61 - <CardActions className={classes.actions}>
62 - <Button
63 - color="primary"
64 - size="small"
65 - variant="text"
66 - >
67 - Overview <ArrowRightIcon />
68 - </Button>
69 - </CardActions>
70 - </Card>
71 - );
72 -};
73 -
74 -LatestSales.propTypes = {
75 - className: PropTypes.string
76 -};
77 -
78 -export default LatestSales;
1 -import palette from 'theme/palette';
2 -
3 -export const data = {
4 - labels: ['1 Aug', '2 Aug', '3 Aug', '4 Aug', '5 Aug', '6 Aug'],
5 - datasets: [
6 - {
7 - label: 'This year',
8 - backgroundColor: palette.primary.main,
9 - data: [18, 5, 19, 27, 29, 19, 20]
10 - },
11 - {
12 - label: 'Last year',
13 - backgroundColor: palette.neutral,
14 - data: [11, 20, 12, 29, 30, 25, 13]
15 - }
16 - ]
17 -};
18 -
19 -export const options = {
20 - responsive: true,
21 - maintainAspectRatio: false,
22 - animation: false,
23 - legend: { display: false },
24 - cornerRadius: 20,
25 - tooltips: {
26 - enabled: true,
27 - mode: 'index',
28 - intersect: false,
29 - borderWidth: 1,
30 - borderColor: palette.divider,
31 - backgroundColor: palette.white,
32 - titleFontColor: palette.text.primary,
33 - bodyFontColor: palette.text.secondary,
34 - footerFontColor: palette.text.secondary
35 - },
36 - layout: { padding: 0 },
37 - scales: {
38 - xAxes: [
39 - {
40 - barThickness: 12,
41 - maxBarThickness: 10,
42 - barPercentage: 0.5,
43 - categoryPercentage: 0.5,
44 - ticks: {
45 - fontColor: palette.text.secondary
46 - },
47 - gridLines: {
48 - display: false,
49 - drawBorder: false
50 - }
51 - }
52 - ],
53 - yAxes: [
54 - {
55 - ticks: {
56 - fontColor: palette.text.secondary,
57 - beginAtZero: true,
58 - min: 0
59 - },
60 - gridLines: {
61 - borderDash: [2],
62 - borderDashOffset: [2],
63 - color: palette.divider,
64 - drawBorder: false,
65 - zeroLineBorderDash: [2],
66 - zeroLineBorderDashOffset: [2],
67 - zeroLineColor: palette.divider
68 - }
69 - }
70 - ]
71 - }
72 -};
1 -import React from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import { makeStyles } from '@material-ui/styles';
5 -import {
6 - Card,
7 - CardContent,
8 - Grid,
9 - Typography,
10 - Avatar,
11 - LinearProgress
12 -} from '@material-ui/core';
13 -import InsertChartIcon from '@material-ui/icons/InsertChartOutlined';
14 -
15 -const useStyles = makeStyles(theme => ({
16 - root: {
17 - height: '100%'
18 - },
19 - content: {
20 - alignItems: 'center',
21 - display: 'flex'
22 - },
23 - title: {
24 - fontWeight: 700
25 - },
26 - avatar: {
27 - backgroundColor: theme.palette.primary.main,
28 - color: theme.palette.primary.contrastText,
29 - height: 56,
30 - width: 56
31 - },
32 - icon: {
33 - height: 32,
34 - width: 32
35 - },
36 - progress: {
37 - marginTop: theme.spacing(3)
38 - }
39 -}));
40 -
41 -const TasksProgress = props => {
42 - const { className, ...rest } = props;
43 -
44 - const classes = useStyles();
45 -
46 - return (
47 - <Card
48 - {...rest}
49 - className={clsx(classes.root, className)}
50 - >
51 - <CardContent>
52 - <Grid
53 - container
54 - justify="space-between"
55 - >
56 - <Grid item>
57 - <Typography
58 - className={classes.title}
59 - color="textSecondary"
60 - gutterBottom
61 - variant="body2"
62 - >
63 - TASKS PROGRESS
64 - </Typography>
65 - <Typography variant="h3">75.5%</Typography>
66 - </Grid>
67 - <Grid item>
68 - <Avatar className={classes.avatar}>
69 - <InsertChartIcon className={classes.icon} />
70 - </Avatar>
71 - </Grid>
72 - </Grid>
73 - <LinearProgress
74 - className={classes.progress}
75 - value={75.5}
76 - variant="determinate"
77 - />
78 - </CardContent>
79 - </Card>
80 - );
81 -};
82 -
83 -TasksProgress.propTypes = {
84 - className: PropTypes.string
85 -};
86 -
87 -export default TasksProgress;
1 -import React from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core';
6 -import AttachMoneyIcon from '@material-ui/icons/AttachMoney';
7 -
8 -const useStyles = makeStyles(theme => ({
9 - root: {
10 - height: '100%',
11 - backgroundColor: theme.palette.primary.main,
12 - color: theme.palette.primary.contrastText
13 - },
14 - content: {
15 - alignItems: 'center',
16 - display: 'flex'
17 - },
18 - title: {
19 - fontWeight: 700
20 - },
21 - avatar: {
22 - backgroundColor: theme.palette.white,
23 - color: theme.palette.primary.main,
24 - height: 56,
25 - width: 56
26 - },
27 - icon: {
28 - height: 32,
29 - width: 32
30 - }
31 -}));
32 -
33 -const TotalProfit = props => {
34 - const { className, ...rest } = props;
35 -
36 - const classes = useStyles();
37 -
38 - return (
39 - <Card
40 - {...rest}
41 - className={clsx(classes.root, className)}
42 - >
43 - <CardContent>
44 - <Grid
45 - container
46 - justify="space-between"
47 - >
48 - <Grid item>
49 - <Typography
50 - className={classes.title}
51 - color="inherit"
52 - gutterBottom
53 - variant="body2"
54 - >
55 - TOTAL PROFIT
56 - </Typography>
57 - <Typography
58 - color="inherit"
59 - variant="h3"
60 - >
61 - $23,200
62 - </Typography>
63 - </Grid>
64 - <Grid item>
65 - <Avatar className={classes.avatar}>
66 - <AttachMoneyIcon className={classes.icon} />
67 - </Avatar>
68 - </Grid>
69 - </Grid>
70 - </CardContent>
71 - </Card>
72 - );
73 -};
74 -
75 -TotalProfit.propTypes = {
76 - className: PropTypes.string
77 -};
78 -
79 -export default TotalProfit;
1 -import React from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core';
6 -import ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';
7 -import PeopleIcon from '@material-ui/icons/PeopleOutlined';
8 -
9 -const useStyles = makeStyles(theme => ({
10 - root: {
11 - height: '100%'
12 - },
13 - content: {
14 - alignItems: 'center',
15 - display: 'flex'
16 - },
17 - title: {
18 - fontWeight: 700
19 - },
20 - avatar: {
21 - backgroundColor: theme.palette.success.main,
22 - height: 56,
23 - width: 56
24 - },
25 - icon: {
26 - height: 32,
27 - width: 32
28 - },
29 - difference: {
30 - marginTop: theme.spacing(2),
31 - display: 'flex',
32 - alignItems: 'center'
33 - },
34 - differenceIcon: {
35 - color: theme.palette.success.dark
36 - },
37 - differenceValue: {
38 - color: theme.palette.success.dark,
39 - marginRight: theme.spacing(1)
40 - }
41 -}));
42 -
43 -const TotalUsers = props => {
44 - const { className, ...rest } = props;
45 -
46 - const classes = useStyles();
47 -
48 - return (
49 - <Card
50 - {...rest}
51 - className={clsx(classes.root, className)}
52 - >
53 - <CardContent>
54 - <Grid
55 - container
56 - justify="space-between"
57 - >
58 - <Grid item>
59 - <Typography
60 - className={classes.title}
61 - color="textSecondary"
62 - gutterBottom
63 - variant="body2"
64 - >
65 - TOTAL USERS
66 - </Typography>
67 - <Typography variant="h3">1,600</Typography>
68 - </Grid>
69 - <Grid item>
70 - <Avatar className={classes.avatar}>
71 - <PeopleIcon className={classes.icon} />
72 - </Avatar>
73 - </Grid>
74 - </Grid>
75 - <div className={classes.difference}>
76 - <ArrowUpwardIcon className={classes.differenceIcon} />
77 - <Typography
78 - className={classes.differenceValue}
79 - variant="body2"
80 - >
81 - 16%
82 - </Typography>
83 - <Typography
84 - className={classes.caption}
85 - variant="caption"
86 - >
87 - Since last month
88 - </Typography>
89 - </div>
90 - </CardContent>
91 - </Card>
92 - );
93 -};
94 -
95 -TotalUsers.propTypes = {
96 - className: PropTypes.string
97 -};
98 -
99 -export default TotalUsers;
1 -import React from 'react';
2 -import { Doughnut } from 'react-chartjs-2';
3 -import clsx from 'clsx';
4 -import PropTypes from 'prop-types';
5 -import { makeStyles, useTheme } from '@material-ui/styles';
6 -import {
7 - Card,
8 - CardHeader,
9 - CardContent,
10 - IconButton,
11 - Divider,
12 - Typography
13 -} from '@material-ui/core';
14 -import LaptopMacIcon from '@material-ui/icons/LaptopMac';
15 -import PhoneIphoneIcon from '@material-ui/icons/PhoneIphone';
16 -import RefreshIcon from '@material-ui/icons/Refresh';
17 -import TabletMacIcon from '@material-ui/icons/TabletMac';
18 -
19 -const useStyles = makeStyles(theme => ({
20 - root: {
21 - height: '100%'
22 - },
23 - chartContainer: {
24 - position: 'relative',
25 - height: '300px'
26 - },
27 - stats: {
28 - marginTop: theme.spacing(2),
29 - display: 'flex',
30 - justifyContent: 'center'
31 - },
32 - device: {
33 - textAlign: 'center',
34 - padding: theme.spacing(1)
35 - },
36 - deviceIcon: {
37 - color: theme.palette.icon
38 - }
39 -}));
40 -
41 -const UsersByDevice = props => {
42 - const { className, ...rest } = props;
43 -
44 - const classes = useStyles();
45 - const theme = useTheme();
46 -
47 - const data = {
48 - datasets: [
49 - {
50 - data: [63, 15, 22],
51 - backgroundColor: [
52 - theme.palette.primary.main,
53 - theme.palette.error.main,
54 - theme.palette.warning.main
55 - ],
56 - borderWidth: 8,
57 - borderColor: theme.palette.white,
58 - hoverBorderColor: theme.palette.white
59 - }
60 - ],
61 - labels: ['Desktop', 'Tablet', 'Mobile']
62 - };
63 -
64 - const options = {
65 - legend: {
66 - display: false
67 - },
68 - responsive: true,
69 - maintainAspectRatio: false,
70 - animation: false,
71 - cutoutPercentage: 80,
72 - layout: { padding: 0 },
73 - tooltips: {
74 - enabled: true,
75 - mode: 'index',
76 - intersect: false,
77 - borderWidth: 1,
78 - borderColor: theme.palette.divider,
79 - backgroundColor: theme.palette.white,
80 - titleFontColor: theme.palette.text.primary,
81 - bodyFontColor: theme.palette.text.secondary,
82 - footerFontColor: theme.palette.text.secondary
83 - }
84 - };
85 -
86 - const devices = [
87 - {
88 - title: 'Desktop',
89 - value: '63',
90 - icon: <LaptopMacIcon />,
91 - color: theme.palette.primary.main
92 - },
93 - {
94 - title: 'Tablet',
95 - value: '15',
96 - icon: <TabletMacIcon />,
97 - color: theme.palette.error.main
98 - },
99 - {
100 - title: 'Mobile',
101 - value: '23',
102 - icon: <PhoneIphoneIcon />,
103 - color: theme.palette.warning.main
104 - }
105 - ];
106 -
107 - return (
108 - <Card
109 - {...rest}
110 - className={clsx(classes.root, className)}
111 - >
112 - <CardHeader
113 - action={
114 - <IconButton size="small">
115 - <RefreshIcon />
116 - </IconButton>
117 - }
118 - title="Users By Device"
119 - />
120 - <Divider />
121 - <CardContent>
122 - <div className={classes.chartContainer}>
123 - <Doughnut
124 - data={data}
125 - options={options}
126 - />
127 - </div>
128 - <div className={classes.stats}>
129 - {devices.map(device => (
130 - <div
131 - className={classes.device}
132 - key={device.title}
133 - >
134 - <span className={classes.deviceIcon}>{device.icon}</span>
135 - <Typography variant="body1">{device.title}</Typography>
136 - <Typography
137 - style={{ color: device.color }}
138 - variant="h2"
139 - >
140 - {device.value}%
141 - </Typography>
142 - </div>
143 - ))}
144 - </div>
145 - </CardContent>
146 - </Card>
147 - );
148 -};
149 -
150 -UsersByDevice.propTypes = {
151 - className: PropTypes.string
152 -};
153 -
154 -export default UsersByDevice;
1 -export { default as Budget } from './Budget';
2 -export { default as LatestOrders } from './LatestOrders';
3 -export { default as LatestProducts } from './LatestProducts';
4 -export { default as LatestSales } from './LatestSales';
5 -export { default as TasksProgress } from './TasksProgress';
6 -export { default as TotalProfit } from './TotalProfit';
7 -export { default as TotalUsers } from './TotalUsers';
8 -export { default as UsersByDevice } from './UsersByDevice';
1 -export { default } from './Dashboard';
1 -import React from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -
4 -const useStyles = makeStyles(theme => ({
5 - root: {
6 - padding: theme.spacing(4)
7 - },
8 - iframe: {
9 - width: '100%',
10 - minHeight: 640,
11 - border: 0
12 - }
13 -}));
14 -
15 -const Icons = () => {
16 - const classes = useStyles();
17 -
18 - return (
19 - <div className={classes.root}>
20 - <iframe
21 - className={classes.iframe}
22 - src="https://material.io/tools/icons/?icon=accessibility&style=outline"
23 - title="Material Design icons"
24 - />
25 - </div>
26 - );
27 -};
28 -
29 -export default Icons;
1 -export { default } from './Icons';
1 -import React, { useState } from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -
4 -import { DriveToolbar, FileTable } from './components';
5 -import mockData from './data';
6 -
7 -const useStyles = makeStyles(theme => ({
8 - root: {
9 - padding: theme.spacing(3)
10 - },
11 - content: {
12 - marginTop: theme.spacing(2)
13 - }
14 -}));
15 -
16 -const MyDrive = () => {
17 - const classes = useStyles();
18 -
19 - const [files] = useState(mockData);
20 -
21 - return (
22 - <div className={classes.root}>
23 - <DriveToolbar />
24 - <div className={classes.content}>
25 - <FileTable files={files} />
26 - </div>
27 - </div>
28 - );
29 -};
30 -
31 -export default MyDrive;
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Button } from '@material-ui/core';
6 -
7 -import { SearchInput } from 'components';
8 -
9 -const useStyles = makeStyles(theme => ({
10 - root: {},
11 - row: {
12 - height: '42px',
13 - display: 'flex',
14 - alignItems: 'center',
15 - marginTop: theme.spacing(1)
16 - },
17 - spacer: {
18 - flexGrow: 1
19 - },
20 - Button: {
21 - marginRight: theme.spacing(1)
22 - },
23 - importButton: {
24 - marginRight: theme.spacing(1)
25 - },
26 - exportButton: {
27 - marginRight: theme.spacing(1)
28 - },
29 - searchInput: {
30 - marginRight: theme.spacing(1)
31 - }
32 -}));
33 -
34 -const DriveToolbar = props => {
35 - const { className, ...rest } = props;
36 -
37 - const classes = useStyles();
38 -
39 - return (
40 - <div
41 - {...rest}
42 - className={clsx(classes.root, className)}
43 - >
44 - <div className={classes.row}>
45 - <span className={classes.spacer} />
46 - <Button className={classes.Button}> 폴더</Button>
47 - <Button className={classes.Button}>폴더 업로드</Button>
48 - <Button
49 - color="primary"
50 - variant="contained"
51 - >
52 - 파일 업로드
53 - </Button>
54 - </div>
55 - <div className={classes.row}>
56 - {/* 파일 클릭했을 때 표시 */}
57 - <span className={classes.spacer} />
58 - <Button className={classes.Button}>공유</Button>
59 - <Button className={classes.Button}>미리보기</Button>
60 - <Button className={classes.Button}>삭제</Button>
61 - <Button className={classes.Button}>이름 바꾸기</Button>
62 - <Button className={classes.Button}>이동</Button>
63 - <Button className={classes.Button}>다운로드</Button>
64 - </div>
65 - <div className={classes.row}>
66 - <SearchInput
67 - className={classes.searchInput}
68 - placeholder="파일, 폴더 검색"
69 - />
70 - </div>
71 - </div>
72 - );
73 -};
74 -
75 -DriveToolbar.propTypes = {
76 - className: PropTypes.string
77 -};
78 -
79 -export default DriveToolbar;
1 -import React, { useState } from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import moment from 'moment';
5 -import PerfectScrollbar from 'react-perfect-scrollbar';
6 -import { makeStyles } from '@material-ui/styles';
7 -import {
8 - Card,
9 - CardActions,
10 - CardContent,
11 - Avatar,
12 - Checkbox,
13 - Table,
14 - TableBody,
15 - TableCell,
16 - TableHead,
17 - TableRow,
18 - Typography,
19 - TablePagination
20 -} from '@material-ui/core';
21 -
22 -import { getInitials } from 'helpers';
23 -
24 -const useStyles = makeStyles(theme => ({
25 - root: {},
26 - content: {
27 - padding: 0
28 - },
29 - inner: {
30 - minWidth: 1050
31 - },
32 - nameContainer: {
33 - display: 'flex',
34 - alignItems: 'center'
35 - },
36 - avatar: {
37 - marginRight: theme.spacing(2)
38 - },
39 - actions: {
40 - justifyContent: 'flex-end'
41 - }
42 -}));
43 -
44 -const FileTable = props => {
45 - const { className, files: files, ...rest } = props;
46 -
47 - const classes = useStyles();
48 -
49 - const [selectedUsers, setSelectedUsers] = useState([]);
50 - const [rowsPerPage, setRowsPerPage] = useState(10);
51 - const [page, setPage] = useState(0);
52 -
53 - const handleSelectAll = event => {
54 - const { files } = props;
55 -
56 - let selectedUsers;
57 -
58 - if (event.target.checked) {
59 - selectedUsers = files.map(user => user.id);
60 - } else {
61 - selectedUsers = [];
62 - }
63 -
64 - setSelectedUsers(selectedUsers);
65 - };
66 -
67 - const handleSelectOne = (event, id) => {
68 - const selectedIndex = selectedUsers.indexOf(id);
69 - let newSelectedUsers = [];
70 -
71 - if (selectedIndex === -1) {
72 - newSelectedUsers = newSelectedUsers.concat(selectedUsers, id);
73 - } else if (selectedIndex === 0) {
74 - newSelectedUsers = newSelectedUsers.concat(selectedUsers.slice(1));
75 - } else if (selectedIndex === selectedUsers.length - 1) {
76 - newSelectedUsers = newSelectedUsers.concat(selectedUsers.slice(0, -1));
77 - } else if (selectedIndex > 0) {
78 - newSelectedUsers = newSelectedUsers.concat(
79 - selectedUsers.slice(0, selectedIndex),
80 - selectedUsers.slice(selectedIndex + 1)
81 - );
82 - }
83 -
84 - setSelectedUsers(newSelectedUsers);
85 - };
86 -
87 - const handlePageChange = (event, page) => {
88 - setPage(page);
89 - };
90 -
91 - const handleRowsPerPageChange = event => {
92 - setRowsPerPage(event.target.value);
93 - };
94 -
95 - return (
96 - <Card
97 - {...rest}
98 - className={clsx(classes.root, className)}
99 - >
100 - <CardContent className={classes.content}>
101 - <PerfectScrollbar>
102 - <div className={classes.inner}>
103 - <Table>
104 - <TableHead>
105 - <TableRow>
106 - <TableCell padding="checkbox">
107 - <Checkbox
108 - checked={selectedUsers.length === files.length}
109 - color="primary"
110 - indeterminate={
111 - selectedUsers.length > 0 &&
112 - selectedUsers.length < files.length
113 - }
114 - onChange={handleSelectAll}
115 - />
116 - </TableCell>
117 - <TableCell>이름</TableCell>
118 - <TableCell>마지막으로 수정한 날짜</TableCell>
119 - <TableCell>크기</TableCell>
120 - <TableCell>공유</TableCell>
121 - </TableRow>
122 - </TableHead>
123 - <TableBody>
124 - {files.slice(0, rowsPerPage).map(file => (
125 - <TableRow
126 - className={classes.tableRow}
127 - hover
128 - key={file.id}
129 - selected={selectedUsers.indexOf(file.id) !== -1}
130 - >
131 - <TableCell padding="checkbox">
132 - <Checkbox
133 - checked={selectedUsers.indexOf(file.id) !== -1}
134 - color="primary"
135 - onChange={event => handleSelectOne(event, file.id)}
136 - value="true"
137 - />
138 - </TableCell>
139 - <TableCell>
140 - <div className={classes.nameContainer}>
141 - {/* 파일 아이콘 */}
142 - <Typography variant="body1">{file.name}</Typography>
143 - </div>
144 - </TableCell>
145 - <TableCell>
146 - {moment(file.modifiedAt).format('DD/MM/YYYY')}
147 - </TableCell>
148 - <TableCell>{file.size}</TableCell>
149 - <TableCell>
150 - {file.share}
151 - </TableCell>
152 -
153 - </TableRow>
154 - ))}
155 - </TableBody>
156 - </Table>
157 - </div>
158 - </PerfectScrollbar>
159 - </CardContent>
160 - <CardActions className={classes.actions}>
161 - <TablePagination
162 - component="div"
163 - count={files.length}
164 - onChangePage={handlePageChange}
165 - onChangeRowsPerPage={handleRowsPerPageChange}
166 - page={page}
167 - rowsPerPage={rowsPerPage}
168 - rowsPerPageOptions={[5, 10, 25]}
169 - />
170 - </CardActions>
171 - </Card>
172 - );
173 -};
174 -
175 -FileTable.propTypes = {
176 - className: PropTypes.string,
177 - files: PropTypes.array.isRequired
178 -};
179 -
180 -export default FileTable;
1 -export { default as FileTable } from './FileTable';
2 -export { default as DriveToolbar } from './DriveToolbar';
1 -import uuid from 'uuid/v1';
2 -import data from 'mock_file_data.json'
3 -
4 -export default data;
...\ No newline at end of file ...\ No newline at end of file
1 -export { default } from './MyDrive';
1 -import React from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -import { Grid, Typography } from '@material-ui/core';
4 -
5 -const useStyles = makeStyles(theme => ({
6 - root: {
7 - padding: theme.spacing(4)
8 - },
9 - content: {
10 - paddingTop: 150,
11 - textAlign: 'center'
12 - },
13 - image: {
14 - marginTop: 50,
15 - display: 'inline-block',
16 - maxWidth: '100%',
17 - width: 560
18 - }
19 -}));
20 -
21 -const NotFound = () => {
22 - const classes = useStyles();
23 -
24 - return (
25 - <div className={classes.root}>
26 - <Grid
27 - container
28 - justify="center"
29 - spacing={4}
30 - >
31 - <Grid
32 - item
33 - lg={6}
34 - xs={12}
35 - >
36 - <div className={classes.content}>
37 - <Typography variant="h1">
38 - 404: The page you are looking for isnt here
39 - </Typography>
40 - <Typography variant="subtitle2">
41 - You either tried some shady route or you came here by mistake.
42 - Whichever it is, try using the navigation
43 - </Typography>
44 - <img
45 - alt="Under development"
46 - className={classes.image}
47 - src="/images/undraw_page_not_found_su7k.svg"
48 - />
49 - </div>
50 - </Grid>
51 - </Grid>
52 - </div>
53 - );
54 -};
55 -
56 -export default NotFound;
1 -export { default } from './NotFound';
1 -import React, { useState } from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -import { IconButton, Grid, Typography } from '@material-ui/core';
4 -import ChevronRightIcon from '@material-ui/icons/ChevronRight';
5 -import ChevronLeftIcon from '@material-ui/icons/ChevronLeft';
6 -
7 -import { FileCard } from './components';
8 -import mockData from './data';
9 -
10 -const useStyles = makeStyles(theme => ({
11 - root: {
12 - padding: theme.spacing(3)
13 - },
14 - content: {
15 - marginTop: theme.spacing(2)
16 - },
17 - pagination: {
18 - marginTop: theme.spacing(3),
19 - display: 'flex',
20 - alignItems: 'center',
21 - justifyContent: 'flex-end'
22 - }
23 -}));
24 -
25 -const RecentFileList = () => {
26 - const classes = useStyles();
27 -
28 - const [files] = useState(mockData);
29 -
30 - return (
31 - <div className={classes.root}>
32 - <div className={classes.content}>
33 - <Grid
34 - container
35 - spacing={3}
36 - >
37 - {files.map(file => (
38 - <Grid
39 - item
40 - key={file.id}
41 - lg={4}
42 - md={6}
43 - xs={12}
44 - >
45 - <FileCard file={file} />
46 - </Grid>
47 - ))}
48 - </Grid>
49 - </div>
50 - <div className={classes.pagination}>
51 - <Typography variant="caption">1-6 of 20</Typography>
52 - <IconButton>
53 - <ChevronLeftIcon />
54 - </IconButton>
55 - <IconButton>
56 - <ChevronRightIcon />
57 - </IconButton>
58 - </div>
59 - </div>
60 - );
61 -};
62 -
63 -export default RecentFileList;
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles } from '@material-ui/styles';
5 -import {
6 - Card,
7 - CardContent,
8 - CardActions,
9 - Typography,
10 - Grid,
11 - Divider
12 -} from '@material-ui/core';
13 -import AccessTimeIcon from '@material-ui/icons/AccessTime';
14 -import GetAppIcon from '@material-ui/icons/GetApp';
15 -
16 -const useStyles = makeStyles(theme => ({
17 - root: {},
18 - imageContainer: {
19 - height: 64,
20 - width: 64,
21 - margin: '0 auto',
22 - border: `1px solid ${theme.palette.divider}`,
23 - borderRadius: '5px',
24 - overflow: 'hidden',
25 - display: 'flex',
26 - alignItems: 'center',
27 - justifyContent: 'center'
28 - },
29 - image: {
30 - width: '100%'
31 - },
32 - statsItem: {
33 - display: 'flex',
34 - alignItems: 'center'
35 - },
36 - statsIcon: {
37 - color: theme.palette.icon,
38 - marginRight: theme.spacing(1)
39 - }
40 -}));
41 -
42 -const FileCard = props => {
43 - const { className, file, ...rest } = props;
44 -
45 - const classes = useStyles();
46 -
47 - return (
48 - <Card
49 - {...rest}
50 - className={clsx(classes.root, className)}
51 - >
52 - <CardContent>
53 - <div className={classes.imageContainer}>
54 - {/* TODO: file.modifiedAt과 연동 */}
55 - <img
56 - alt="FileIcon"
57 - className={classes.image}
58 - src={file.imageUrl}
59 - />
60 - </div>
61 - <Typography
62 - align="center"
63 - gutterBottom
64 - variant="h4"
65 - >
66 - {file.name}
67 - </Typography>
68 - </CardContent>
69 - <Divider />
70 - <CardActions>
71 - <Grid
72 - container
73 - justify="space-between"
74 - >
75 - <Grid
76 - className={classes.statsItem}
77 - item
78 - >
79 - <AccessTimeIcon className={classes.statsIcon} />
80 - <Typography
81 - display="inline"
82 - variant="body2"
83 - >
84 - {/* TODO: file.modifiedAt과 연동 */}
85 - Updated 2hr ago
86 - </Typography>
87 - </Grid>
88 - <Grid
89 - className={classes.statsItem}
90 - item
91 - >
92 - </Grid>
93 - </Grid>
94 - </CardActions>
95 - </Card>
96 - );
97 -};
98 -
99 -FileCard.propTypes = {
100 - className: PropTypes.string,
101 - file: PropTypes.object.isRequired
102 -};
103 -
104 -export default FileCard;
1 -export { default as FileCard } from './FileCard';
1 -import uuid from 'uuid/v1';
2 -import data from 'mock_file_data.json'
3 -
4 -export default data;
1 -export { default } from './RecentFileList';
1 -import React from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -import { Grid } from '@material-ui/core';
4 -
5 -import { Notifications, Password } from './components';
6 -
7 -const useStyles = makeStyles(theme => ({
8 - root: {
9 - padding: theme.spacing(4)
10 - }
11 -}));
12 -
13 -const Settings = () => {
14 - const classes = useStyles();
15 -
16 - return (
17 - <div className={classes.root}>
18 - <Grid
19 - container
20 - spacing={4}
21 - >
22 - <Grid
23 - item
24 - md={7}
25 - xs={12}
26 - >
27 - <Notifications />
28 - </Grid>
29 - <Grid
30 - item
31 - md={5}
32 - xs={12}
33 - >
34 - <Password />
35 - </Grid>
36 - </Grid>
37 - </div>
38 - );
39 -};
40 -
41 -export default Settings;
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles } from '@material-ui/styles';
5 -import {
6 - Card,
7 - CardHeader,
8 - CardContent,
9 - CardActions,
10 - Grid,
11 - Divider,
12 - FormControlLabel,
13 - Checkbox,
14 - Typography,
15 - Button
16 -} from '@material-ui/core';
17 -
18 -const useStyles = makeStyles(() => ({
19 - root: {},
20 - item: {
21 - display: 'flex',
22 - flexDirection: 'column'
23 - }
24 -}));
25 -
26 -const Notifications = props => {
27 - const { className, ...rest } = props;
28 -
29 - const classes = useStyles();
30 -
31 - return (
32 - <Card
33 - {...rest}
34 - className={clsx(classes.root, className)}
35 - >
36 - <form>
37 - <CardHeader
38 - subheader="Manage the notifications"
39 - title="Notifications"
40 - />
41 - <Divider />
42 - <CardContent>
43 - <Grid
44 - container
45 - spacing={6}
46 - wrap="wrap"
47 - >
48 - <Grid
49 - className={classes.item}
50 - item
51 - md={4}
52 - sm={6}
53 - xs={12}
54 - >
55 - <Typography
56 - gutterBottom
57 - variant="h6"
58 - >
59 - Notifications
60 - </Typography>
61 - <FormControlLabel
62 - control={
63 - <Checkbox
64 - color="primary"
65 - defaultChecked //
66 - />
67 - }
68 - label="Email"
69 - />
70 - <FormControlLabel
71 - control={
72 - <Checkbox
73 - color="primary"
74 - defaultChecked //
75 - />
76 - }
77 - label="Push Notifications"
78 - />
79 - <FormControlLabel
80 - control={<Checkbox color="primary" />}
81 - label="Text Messages"
82 - />
83 - <FormControlLabel
84 - control={
85 - <Checkbox
86 - color="primary"
87 - defaultChecked //
88 - />
89 - }
90 - label="Phone calls"
91 - />
92 - </Grid>
93 - <Grid
94 - className={classes.item}
95 - item
96 - md={4}
97 - sm={6}
98 - xs={12}
99 - >
100 - <Typography
101 - gutterBottom
102 - variant="h6"
103 - >
104 - Messages
105 - </Typography>
106 - <FormControlLabel
107 - control={
108 - <Checkbox
109 - color="primary"
110 - defaultChecked //
111 - />
112 - }
113 - label="Email"
114 - />
115 - <FormControlLabel
116 - control={<Checkbox color="primary" />}
117 - label="Push Notifications"
118 - />
119 - <FormControlLabel
120 - control={
121 - <Checkbox
122 - color="primary"
123 - defaultChecked //
124 - />
125 - }
126 - label="Phone calls"
127 - />
128 - </Grid>
129 - </Grid>
130 - </CardContent>
131 - <Divider />
132 - <CardActions>
133 - <Button
134 - color="primary"
135 - variant="outlined"
136 - >
137 - Save
138 - </Button>
139 - </CardActions>
140 - </form>
141 - </Card>
142 - );
143 -};
144 -
145 -Notifications.propTypes = {
146 - className: PropTypes.string
147 -};
148 -
149 -export default Notifications;
1 -import React, { useState } from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles } from '@material-ui/styles';
5 -import {
6 - Card,
7 - CardHeader,
8 - CardContent,
9 - CardActions,
10 - Divider,
11 - Button,
12 - TextField
13 -} from '@material-ui/core';
14 -
15 -const useStyles = makeStyles(() => ({
16 - root: {}
17 -}));
18 -
19 -const Password = props => {
20 - const { className, ...rest } = props;
21 -
22 - const classes = useStyles();
23 -
24 - const [values, setValues] = useState({
25 - password: '',
26 - confirm: ''
27 - });
28 -
29 - const handleChange = event => {
30 - setValues({
31 - ...values,
32 - [event.target.name]: event.target.value
33 - });
34 - };
35 -
36 - return (
37 - <Card
38 - {...rest}
39 - className={clsx(classes.root, className)}
40 - >
41 - <form>
42 - <CardHeader
43 - subheader="Update password"
44 - title="Password"
45 - />
46 - <Divider />
47 - <CardContent>
48 - <TextField
49 - fullWidth
50 - label="Password"
51 - name="password"
52 - onChange={handleChange}
53 - type="password"
54 - value={values.password}
55 - variant="outlined"
56 - />
57 - <TextField
58 - fullWidth
59 - label="Confirm password"
60 - name="confirm"
61 - onChange={handleChange}
62 - style={{ marginTop: '1rem' }}
63 - type="password"
64 - value={values.confirm}
65 - variant="outlined"
66 - />
67 - </CardContent>
68 - <Divider />
69 - <CardActions>
70 - <Button
71 - color="primary"
72 - variant="outlined"
73 - >
74 - Update
75 - </Button>
76 - </CardActions>
77 - </form>
78 - </Card>
79 - );
80 -};
81 -
82 -Password.propTypes = {
83 - className: PropTypes.string
84 -};
85 -
86 -export default Password;
1 -export { default as Notifications } from './Notifications';
2 -export { default as Password } from './Password';
1 -export { default } from './Settings';
1 -import React, { useState } from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -
4 -import { SharedFileToolbar, SharedFileTable } from './components';
5 -import mockData from './data';
6 -
7 -const useStyles = makeStyles(theme => ({
8 - root: {
9 - padding: theme.spacing(3)
10 - },
11 - content: {
12 - marginTop: theme.spacing(2)
13 - }
14 -}));
15 -
16 -const SharedFileList = () => {
17 - const classes = useStyles();
18 -
19 - const [files] = useState(mockData);
20 -
21 - return (
22 - <div className={classes.root}>
23 - <SharedFileToolbar />
24 - <div className={classes.content}>
25 - <SharedFileTable files={files} />
26 - </div>
27 - </div>
28 - );
29 -};
30 -
31 -export default SharedFileList;
1 -import React, { useState } from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import moment from 'moment';
5 -import PerfectScrollbar from 'react-perfect-scrollbar';
6 -import { makeStyles } from '@material-ui/styles';
7 -import {
8 - Card,
9 - CardActions,
10 - CardContent,
11 - Avatar,
12 - Checkbox,
13 - Table,
14 - TableBody,
15 - TableCell,
16 - TableHead,
17 - TableRow,
18 - Typography,
19 - TablePagination
20 -} from '@material-ui/core';
21 -
22 -import { getInitials } from '../../../Trash/components/RemovedFileTable/node_modules/helpers';
23 -
24 -const useStyles = makeStyles(theme => ({
25 - root: {},
26 - content: {
27 - padding: 0
28 - },
29 - inner: {
30 - minWidth: 1050
31 - },
32 - nameContainer: {
33 - display: 'flex',
34 - alignItems: 'center'
35 - },
36 - avatar: {
37 - marginRight: theme.spacing(2)
38 - },
39 - actions: {
40 - justifyContent: 'flex-end'
41 - }
42 -}));
43 -
44 -const FileTable = props => {
45 - const { className, files: files, ...rest } = props;
46 -
47 - const classes = useStyles();
48 -
49 - const [selectedUsers, setSelectedUsers] = useState([]);
50 - const [rowsPerPage, setRowsPerPage] = useState(10);
51 - const [page, setPage] = useState(0);
52 -
53 - const handleSelectAll = event => {
54 - const { files } = props;
55 -
56 - let selectedUsers;
57 -
58 - if (event.target.checked) {
59 - selectedUsers = files.map(user => user.id);
60 - } else {
61 - selectedUsers = [];
62 - }
63 -
64 - setSelectedUsers(selectedUsers);
65 - };
66 -
67 - const handleSelectOne = (event, id) => {
68 - const selectedIndex = selectedUsers.indexOf(id);
69 - let newSelectedUsers = [];
70 -
71 - if (selectedIndex === -1) {
72 - newSelectedUsers = newSelectedUsers.concat(selectedUsers, id);
73 - } else if (selectedIndex === 0) {
74 - newSelectedUsers = newSelectedUsers.concat(selectedUsers.slice(1));
75 - } else if (selectedIndex === selectedUsers.length - 1) {
76 - newSelectedUsers = newSelectedUsers.concat(selectedUsers.slice(0, -1));
77 - } else if (selectedIndex > 0) {
78 - newSelectedUsers = newSelectedUsers.concat(
79 - selectedUsers.slice(0, selectedIndex),
80 - selectedUsers.slice(selectedIndex + 1)
81 - );
82 - }
83 -
84 - setSelectedUsers(newSelectedUsers);
85 - };
86 -
87 - const handlePageChange = (event, page) => {
88 - setPage(page);
89 - };
90 -
91 - const handleRowsPerPageChange = event => {
92 - setRowsPerPage(event.target.value);
93 - };
94 -
95 - return (
96 - <Card
97 - {...rest}
98 - className={clsx(classes.root, className)}
99 - >
100 - <CardContent className={classes.content}>
101 - <PerfectScrollbar>
102 - <div className={classes.inner}>
103 - <Table>
104 - <TableHead>
105 - <TableRow>
106 - <TableCell padding="checkbox">
107 - <Checkbox
108 - checked={selectedUsers.length === files.length}
109 - color="primary"
110 - indeterminate={
111 - selectedUsers.length > 0 &&
112 - selectedUsers.length < files.length
113 - }
114 - onChange={handleSelectAll}
115 - />
116 - </TableCell>
117 - <TableCell>이름</TableCell>
118 - <TableCell>마지막으로 수정한 날짜</TableCell>
119 - <TableCell>크기</TableCell>
120 - <TableCell>공유</TableCell>
121 - </TableRow>
122 - </TableHead>
123 - <TableBody>
124 - {files.slice(0, rowsPerPage).map(file => (
125 - <TableRow
126 - className={classes.tableRow}
127 - hover
128 - key={file.id}
129 - selected={selectedUsers.indexOf(file.id) !== -1}
130 - >
131 - <TableCell padding="checkbox">
132 - <Checkbox
133 - checked={selectedUsers.indexOf(file.id) !== -1}
134 - color="primary"
135 - onChange={event => handleSelectOne(event, file.id)}
136 - value="true"
137 - />
138 - </TableCell>
139 - <TableCell>
140 - <div className={classes.nameContainer}>
141 - {/* 파일 아이콘 */}
142 - <Typography variant="body1">{file.name}</Typography>
143 - </div>
144 - </TableCell>
145 - <TableCell>
146 - {moment(file.modifiedAt).format('DD/MM/YYYY')}
147 - </TableCell>
148 - <TableCell>{file.size}</TableCell>
149 - <TableCell>
150 - {file.share}
151 - </TableCell>
152 -
153 - </TableRow>
154 - ))}
155 - </TableBody>
156 - </Table>
157 - </div>
158 - </PerfectScrollbar>
159 - </CardContent>
160 - <CardActions className={classes.actions}>
161 - <TablePagination
162 - component="div"
163 - count={files.length}
164 - onChangePage={handlePageChange}
165 - onChangeRowsPerPage={handleRowsPerPageChange}
166 - page={page}
167 - rowsPerPage={rowsPerPage}
168 - rowsPerPageOptions={[5, 10, 25]}
169 - />
170 - </CardActions>
171 - </Card>
172 - );
173 -};
174 -
175 -FileTable.propTypes = {
176 - className: PropTypes.string,
177 - files: PropTypes.array.isRequired
178 -};
179 -
180 -export default FileTable;
1 -import React, { useState } from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import moment from 'moment';
5 -import PerfectScrollbar from 'react-perfect-scrollbar';
6 -import { makeStyles } from '@material-ui/styles';
7 -import {
8 - Card,
9 - CardActions,
10 - CardContent,
11 - Avatar,
12 - Checkbox,
13 - Table,
14 - TableBody,
15 - TableCell,
16 - TableHead,
17 - TableRow,
18 - Typography,
19 - TablePagination
20 -} from '@material-ui/core';
21 -
22 -import { getInitials } from 'helpers';
23 -
24 -const useStyles = makeStyles(theme => ({
25 - root: {},
26 - content: {
27 - padding: 0
28 - },
29 - inner: {
30 - minWidth: 1050
31 - },
32 - nameContainer: {
33 - display: 'flex',
34 - alignItems: 'center'
35 - },
36 - avatar: {
37 - marginRight: theme.spacing(2)
38 - },
39 - actions: {
40 - justifyContent: 'flex-end'
41 - }
42 -}));
43 -
44 -const FileTable = props => {
45 - const { className, files: files, ...rest } = props;
46 -
47 - const classes = useStyles();
48 -
49 - const [selectedUsers, setSelectedUsers] = useState([]);
50 - const [rowsPerPage, setRowsPerPage] = useState(10);
51 - const [page, setPage] = useState(0);
52 -
53 - const handleSelectAll = event => {
54 - const { files } = props;
55 -
56 - let selectedUsers;
57 -
58 - if (event.target.checked) {
59 - selectedUsers = files.map(user => user.id);
60 - } else {
61 - selectedUsers = [];
62 - }
63 -
64 - setSelectedUsers(selectedUsers);
65 - };
66 -
67 - const handleSelectOne = (event, id) => {
68 - const selectedIndex = selectedUsers.indexOf(id);
69 - let newSelectedUsers = [];
70 -
71 - if (selectedIndex === -1) {
72 - newSelectedUsers = newSelectedUsers.concat(selectedUsers, id);
73 - } else if (selectedIndex === 0) {
74 - newSelectedUsers = newSelectedUsers.concat(selectedUsers.slice(1));
75 - } else if (selectedIndex === selectedUsers.length - 1) {
76 - newSelectedUsers = newSelectedUsers.concat(selectedUsers.slice(0, -1));
77 - } else if (selectedIndex > 0) {
78 - newSelectedUsers = newSelectedUsers.concat(
79 - selectedUsers.slice(0, selectedIndex),
80 - selectedUsers.slice(selectedIndex + 1)
81 - );
82 - }
83 -
84 - setSelectedUsers(newSelectedUsers);
85 - };
86 -
87 - const handlePageChange = (event, page) => {
88 - setPage(page);
89 - };
90 -
91 - const handleRowsPerPageChange = event => {
92 - setRowsPerPage(event.target.value);
93 - };
94 -
95 - return (
96 - <Card
97 - {...rest}
98 - className={clsx(classes.root, className)}
99 - >
100 - <CardContent className={classes.content}>
101 - <PerfectScrollbar>
102 - <div className={classes.inner}>
103 - <Table>
104 - <TableHead>
105 - <TableRow>
106 - <TableCell padding="checkbox">
107 - <Checkbox
108 - checked={selectedUsers.length === files.length}
109 - color="primary"
110 - indeterminate={
111 - selectedUsers.length > 0 &&
112 - selectedUsers.length < files.length
113 - }
114 - onChange={handleSelectAll}
115 - />
116 - </TableCell>
117 - <TableCell>이름</TableCell>
118 - <TableCell>공유한 날짜</TableCell>
119 - <TableCell>공유자</TableCell>
120 - </TableRow>
121 - </TableHead>
122 - <TableBody>
123 - {files.slice(0, rowsPerPage).map(file => (
124 - <TableRow
125 - className={classes.tableRow}
126 - hover
127 - key={file.id}
128 - selected={selectedUsers.indexOf(file.id) !== -1}
129 - >
130 - <TableCell padding="checkbox">
131 - <Checkbox
132 - checked={selectedUsers.indexOf(file.id) !== -1}
133 - color="primary"
134 - onChange={event => handleSelectOne(event, file.id)}
135 - value="true"
136 - />
137 - </TableCell>
138 - <TableCell>
139 - <div className={classes.nameContainer}>
140 - {/* 파일 아이콘 */}
141 - <Typography variant="body1">{file.name}</Typography>
142 - </div>
143 - </TableCell>
144 - <TableCell>
145 - {moment(file.sharedAt).format('DD/MM/YYYY')}
146 - </TableCell>
147 - <TableCell>{file.sharedUser}</TableCell>
148 -
149 - </TableRow>
150 - ))}
151 - </TableBody>
152 - </Table>
153 - </div>
154 - </PerfectScrollbar>
155 - </CardContent>
156 - <CardActions className={classes.actions}>
157 - <TablePagination
158 - component="div"
159 - count={files.length}
160 - onChangePage={handlePageChange}
161 - onChangeRowsPerPage={handleRowsPerPageChange}
162 - page={page}
163 - rowsPerPage={rowsPerPage}
164 - rowsPerPageOptions={[5, 10, 25]}
165 - />
166 - </CardActions>
167 - </Card>
168 - );
169 -};
170 -
171 -FileTable.propTypes = {
172 - className: PropTypes.string,
173 - files: PropTypes.array.isRequired
174 -};
175 -
176 -export default FileTable;
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Button } from '@material-ui/core';
6 -
7 -import { SearchInput } from 'components';
8 -
9 -const useStyles = makeStyles(theme => ({
10 - root: {},
11 - row: {
12 - height: '42px',
13 - display: 'flex',
14 - alignItems: 'center',
15 - marginTop: theme.spacing(1)
16 - },
17 - spacer: {
18 - flexGrow: 1
19 - },
20 - importButton: {
21 - marginRight: theme.spacing(1)
22 - },
23 - exportButton: {
24 - marginRight: theme.spacing(1)
25 - },
26 - searchInput: {
27 - marginRight: theme.spacing(1)
28 - }
29 -}));
30 -
31 -const DriveToolbar = props => {
32 - const { className, ...rest } = props;
33 -
34 - const classes = useStyles();
35 -
36 - return (
37 - <div
38 - {...rest}
39 - className={clsx(classes.root, className)}
40 - >
41 - <div className={classes.row}>
42 - {/* 파일 클릭했을 때 표시 */}
43 - <span className={classes.spacer} />
44 - <Button className={classes.Button}>공유</Button>
45 - <Button className={classes.Button}>미리보기</Button>
46 - <Button className={classes.Button}>삭제</Button>
47 - <Button className={classes.Button}>이름 바꾸기</Button>
48 - <Button className={classes.Button}>다운로드</Button>
49 - </div>
50 - <div className={classes.row}>
51 - <SearchInput
52 - className={classes.searchInput}
53 - placeholder="파일, 폴더 검색"
54 - />
55 - </div>
56 - </div>
57 - );
58 -};
59 -
60 -DriveToolbar.propTypes = {
61 - className: PropTypes.string
62 -};
63 -
64 -export default DriveToolbar;
1 -export { default as SharedFileTable } from './SharedFileTable';
2 -export { default as SharedFileToolbar } from './SharedFileToolbar';
1 -import uuid from 'uuid/v1';
2 -import data from 'mock_file_data.json'
3 -
4 -export default data;
1 -export { default } from './SharedFileList';
1 -import React, { useState, useEffect } from 'react';
2 -import { Link as RouterLink, withRouter } from 'react-router-dom';
3 -import PropTypes from 'prop-types';
4 -import validate from 'validate.js';
5 -import { makeStyles } from '@material-ui/styles';
6 -import {
7 - Grid,
8 - Button,
9 - IconButton,
10 - TextField,
11 - Link,
12 - Typography
13 -} from '@material-ui/core';
14 -import ArrowBackIcon from '@material-ui/icons/ArrowBack';
15 -
16 -import { Facebook as FacebookIcon, Google as GoogleIcon } from 'icons';
17 -
18 -const schema = {
19 - email: {
20 - presence: { allowEmpty: false, message: 'is required' },
21 - email: true,
22 - length: {
23 - maximum: 64
24 - }
25 - },
26 - password: {
27 - presence: { allowEmpty: false, message: 'is required' },
28 - length: {
29 - maximum: 128
30 - }
31 - }
32 -};
33 -
34 -const useStyles = makeStyles(theme => ({
35 - root: {
36 - backgroundColor: theme.palette.background.default,
37 - height: '100%'
38 - },
39 - grid: {
40 - height: '100%'
41 - },
42 - quoteContainer: {
43 - [theme.breakpoints.down('md')]: {
44 - display: 'none'
45 - }
46 - },
47 - quote: {
48 - backgroundColor: theme.palette.neutral,
49 - height: '100%',
50 - display: 'flex',
51 - justifyContent: 'center',
52 - alignItems: 'center',
53 - backgroundImage: 'url(/images/auth.jpg)',
54 - backgroundSize: 'cover',
55 - backgroundRepeat: 'no-repeat',
56 - backgroundPosition: 'center'
57 - },
58 - quoteInner: {
59 - textAlign: 'center',
60 - flexBasis: '600px'
61 - },
62 - quoteText: {
63 - color: theme.palette.white,
64 - fontWeight: 300
65 - },
66 - name: {
67 - marginTop: theme.spacing(3),
68 - color: theme.palette.white
69 - },
70 - bio: {
71 - color: theme.palette.white
72 - },
73 - contentContainer: {},
74 - content: {
75 - height: '100%',
76 - display: 'flex',
77 - flexDirection: 'column'
78 - },
79 - contentHeader: {
80 - display: 'flex',
81 - alignItems: 'center',
82 - paddingTop: theme.spacing(5),
83 - paddingBototm: theme.spacing(2),
84 - paddingLeft: theme.spacing(2),
85 - paddingRight: theme.spacing(2)
86 - },
87 - logoImage: {
88 - marginLeft: theme.spacing(4)
89 - },
90 - contentBody: {
91 - flexGrow: 1,
92 - display: 'flex',
93 - alignItems: 'center',
94 - [theme.breakpoints.down('md')]: {
95 - justifyContent: 'center'
96 - }
97 - },
98 - form: {
99 - paddingLeft: 100,
100 - paddingRight: 100,
101 - paddingBottom: 125,
102 - flexBasis: 700,
103 - [theme.breakpoints.down('sm')]: {
104 - paddingLeft: theme.spacing(2),
105 - paddingRight: theme.spacing(2)
106 - }
107 - },
108 - title: {
109 - marginTop: theme.spacing(3)
110 - },
111 - socialButtons: {
112 - marginTop: theme.spacing(3)
113 - },
114 - socialIcon: {
115 - marginRight: theme.spacing(1)
116 - },
117 - sugestion: {
118 - marginTop: theme.spacing(2)
119 - },
120 - textField: {
121 - marginTop: theme.spacing(2)
122 - },
123 - signInButton: {
124 - margin: theme.spacing(2, 0)
125 - }
126 -}));
127 -
128 -const SignIn = props => {
129 - const { history } = props;
130 -
131 - const classes = useStyles();
132 -
133 - const [formState, setFormState] = useState({
134 - isValid: false,
135 - values: {},
136 - touched: {},
137 - errors: {}
138 - });
139 -
140 - useEffect(() => {
141 - const errors = validate(formState.values, schema);
142 -
143 - setFormState(formState => ({
144 - ...formState,
145 - isValid: errors ? false : true,
146 - errors: errors || {}
147 - }));
148 - }, [formState.values]);
149 -
150 - const handleBack = () => {
151 - history.goBack();
152 - };
153 -
154 - const handleChange = event => {
155 - event.persist();
156 -
157 - setFormState(formState => ({
158 - ...formState,
159 - values: {
160 - ...formState.values,
161 - [event.target.name]:
162 - event.target.type === 'checkbox'
163 - ? event.target.checked
164 - : event.target.value
165 - },
166 - touched: {
167 - ...formState.touched,
168 - [event.target.name]: true
169 - }
170 - }));
171 - };
172 -
173 - const handleSignIn = event => {
174 - event.preventDefault();
175 - history.push('/');
176 - };
177 -
178 - const hasError = field =>
179 - formState.touched[field] && formState.errors[field] ? true : false;
180 -
181 - return (
182 - <div className={classes.root}>
183 - <Grid
184 - className={classes.grid}
185 - container
186 - >
187 - <Grid
188 - className={classes.quoteContainer}
189 - item
190 - lg={5}
191 - >
192 - <div className={classes.quote}>
193 - <div className={classes.quoteInner}>
194 - <Typography
195 - className={classes.quoteText}
196 - variant="h1"
197 - >
198 - Hella narwhal Cosby sweater McSweeney's, salvia kitsch before
199 - they sold out High Life.
200 - </Typography>
201 - <div className={classes.person}>
202 - <Typography
203 - className={classes.name}
204 - variant="body1"
205 - >
206 - Takamaru Ayako
207 - </Typography>
208 - <Typography
209 - className={classes.bio}
210 - variant="body2"
211 - >
212 - Manager at inVision
213 - </Typography>
214 - </div>
215 - </div>
216 - </div>
217 - </Grid>
218 - <Grid
219 - className={classes.content}
220 - item
221 - lg={7}
222 - xs={12}
223 - >
224 - <div className={classes.content}>
225 - <div className={classes.contentHeader}>
226 - <IconButton onClick={handleBack}>
227 - <ArrowBackIcon />
228 - </IconButton>
229 - </div>
230 - <div className={classes.contentBody}>
231 - <form
232 - className={classes.form}
233 - onSubmit={handleSignIn}
234 - >
235 - <Typography
236 - className={classes.title}
237 - variant="h2"
238 - >
239 - Sign in
240 - </Typography>
241 - <Typography
242 - color="textSecondary"
243 - gutterBottom
244 - >
245 - Sign in with social media
246 - </Typography>
247 - <Grid
248 - className={classes.socialButtons}
249 - container
250 - spacing={2}
251 - >
252 - <Grid item>
253 - <Button
254 - color="primary"
255 - onClick={handleSignIn}
256 - size="large"
257 - variant="contained"
258 - >
259 - <FacebookIcon className={classes.socialIcon} />
260 - Login with Facebook
261 - </Button>
262 - </Grid>
263 - <Grid item>
264 - <Button
265 - onClick={handleSignIn}
266 - size="large"
267 - variant="contained"
268 - >
269 - <GoogleIcon className={classes.socialIcon} />
270 - Login with Google
271 - </Button>
272 - </Grid>
273 - </Grid>
274 - <Typography
275 - align="center"
276 - className={classes.sugestion}
277 - color="textSecondary"
278 - variant="body1"
279 - >
280 - or login with email address
281 - </Typography>
282 - <TextField
283 - className={classes.textField}
284 - error={hasError('email')}
285 - fullWidth
286 - helperText={
287 - hasError('email') ? formState.errors.email[0] : null
288 - }
289 - label="Email address"
290 - name="email"
291 - onChange={handleChange}
292 - type="text"
293 - value={formState.values.email || ''}
294 - variant="outlined"
295 - />
296 - <TextField
297 - className={classes.textField}
298 - error={hasError('password')}
299 - fullWidth
300 - helperText={
301 - hasError('password') ? formState.errors.password[0] : null
302 - }
303 - label="Password"
304 - name="password"
305 - onChange={handleChange}
306 - type="password"
307 - value={formState.values.password || ''}
308 - variant="outlined"
309 - />
310 - <Button
311 - className={classes.signInButton}
312 - color="primary"
313 - disabled={!formState.isValid}
314 - fullWidth
315 - size="large"
316 - type="submit"
317 - variant="contained"
318 - >
319 - Sign in now
320 - </Button>
321 - <Typography
322 - color="textSecondary"
323 - variant="body1"
324 - >
325 - Don't have an account?{' '}
326 - <Link
327 - component={RouterLink}
328 - to="/sign-up"
329 - variant="h6"
330 - >
331 - Sign up
332 - </Link>
333 - </Typography>
334 - </form>
335 - </div>
336 - </div>
337 - </Grid>
338 - </Grid>
339 - </div>
340 - );
341 -};
342 -
343 -SignIn.propTypes = {
344 - history: PropTypes.object
345 -};
346 -
347 -export default withRouter(SignIn);
1 -export { default } from './SignIn';
1 -import React, { useState, useEffect } from 'react';
2 -import { Link as RouterLink, withRouter } from 'react-router-dom';
3 -import PropTypes from 'prop-types';
4 -import validate from 'validate.js';
5 -import { makeStyles } from '@material-ui/styles';
6 -import {
7 - Grid,
8 - Button,
9 - IconButton,
10 - TextField,
11 - Link,
12 - FormHelperText,
13 - Checkbox,
14 - Typography
15 -} from '@material-ui/core';
16 -import ArrowBackIcon from '@material-ui/icons/ArrowBack';
17 -
18 -const schema = {
19 - firstName: {
20 - presence: { allowEmpty: false, message: 'is required' },
21 - length: {
22 - maximum: 32
23 - }
24 - },
25 - lastName: {
26 - presence: { allowEmpty: false, message: 'is required' },
27 - length: {
28 - maximum: 32
29 - }
30 - },
31 - email: {
32 - presence: { allowEmpty: false, message: 'is required' },
33 - email: true,
34 - length: {
35 - maximum: 64
36 - }
37 - },
38 - password: {
39 - presence: { allowEmpty: false, message: 'is required' },
40 - length: {
41 - maximum: 128
42 - }
43 - },
44 - policy: {
45 - presence: { allowEmpty: false, message: 'is required' },
46 - checked: true
47 - }
48 -};
49 -
50 -const useStyles = makeStyles(theme => ({
51 - root: {
52 - backgroundColor: theme.palette.background.default,
53 - height: '100%'
54 - },
55 - grid: {
56 - height: '100%'
57 - },
58 - quoteContainer: {
59 - [theme.breakpoints.down('md')]: {
60 - display: 'none'
61 - }
62 - },
63 - quote: {
64 - backgroundColor: theme.palette.neutral,
65 - height: '100%',
66 - display: 'flex',
67 - justifyContent: 'center',
68 - alignItems: 'center',
69 - backgroundImage: 'url(/images/auth.jpg)',
70 - backgroundSize: 'cover',
71 - backgroundRepeat: 'no-repeat',
72 - backgroundPosition: 'center'
73 - },
74 - quoteInner: {
75 - textAlign: 'center',
76 - flexBasis: '600px'
77 - },
78 - quoteText: {
79 - color: theme.palette.white,
80 - fontWeight: 300
81 - },
82 - name: {
83 - marginTop: theme.spacing(3),
84 - color: theme.palette.white
85 - },
86 - bio: {
87 - color: theme.palette.white
88 - },
89 - contentContainer: {},
90 - content: {
91 - height: '100%',
92 - display: 'flex',
93 - flexDirection: 'column'
94 - },
95 - contentHeader: {
96 - display: 'flex',
97 - alignItems: 'center',
98 - paddingTop: theme.spacing(5),
99 - paddingBototm: theme.spacing(2),
100 - paddingLeft: theme.spacing(2),
101 - paddingRight: theme.spacing(2)
102 - },
103 - logoImage: {
104 - marginLeft: theme.spacing(4)
105 - },
106 - contentBody: {
107 - flexGrow: 1,
108 - display: 'flex',
109 - alignItems: 'center',
110 - [theme.breakpoints.down('md')]: {
111 - justifyContent: 'center'
112 - }
113 - },
114 - form: {
115 - paddingLeft: 100,
116 - paddingRight: 100,
117 - paddingBottom: 125,
118 - flexBasis: 700,
119 - [theme.breakpoints.down('sm')]: {
120 - paddingLeft: theme.spacing(2),
121 - paddingRight: theme.spacing(2)
122 - }
123 - },
124 - title: {
125 - marginTop: theme.spacing(3)
126 - },
127 - textField: {
128 - marginTop: theme.spacing(2)
129 - },
130 - policy: {
131 - marginTop: theme.spacing(1),
132 - display: 'flex',
133 - alignItems: 'center'
134 - },
135 - policyCheckbox: {
136 - marginLeft: '-14px'
137 - },
138 - signUpButton: {
139 - margin: theme.spacing(2, 0)
140 - }
141 -}));
142 -
143 -const SignUp = props => {
144 - const { history } = props;
145 -
146 - const classes = useStyles();
147 -
148 - const [formState, setFormState] = useState({
149 - isValid: false,
150 - values: {},
151 - touched: {},
152 - errors: {}
153 - });
154 -
155 - useEffect(() => {
156 - const errors = validate(formState.values, schema);
157 -
158 - setFormState(formState => ({
159 - ...formState,
160 - isValid: errors ? false : true,
161 - errors: errors || {}
162 - }));
163 - }, [formState.values]);
164 -
165 - const handleChange = event => {
166 - event.persist();
167 -
168 - setFormState(formState => ({
169 - ...formState,
170 - values: {
171 - ...formState.values,
172 - [event.target.name]:
173 - event.target.type === 'checkbox'
174 - ? event.target.checked
175 - : event.target.value
176 - },
177 - touched: {
178 - ...formState.touched,
179 - [event.target.name]: true
180 - }
181 - }));
182 - };
183 -
184 - const handleBack = () => {
185 - history.goBack();
186 - };
187 -
188 - const handleSignUp = event => {
189 - event.preventDefault();
190 - history.push('/');
191 - };
192 -
193 - const hasError = field =>
194 - formState.touched[field] && formState.errors[field] ? true : false;
195 -
196 - return (
197 - <div className={classes.root}>
198 - <Grid
199 - className={classes.grid}
200 - container
201 - >
202 - <Grid
203 - className={classes.quoteContainer}
204 - item
205 - lg={5}
206 - >
207 - <div className={classes.quote}>
208 - <div className={classes.quoteInner}>
209 - <Typography
210 - className={classes.quoteText}
211 - variant="h1"
212 - >
213 - Hella narwhal Cosby sweater McSweeney's, salvia kitsch before
214 - they sold out High Life.
215 - </Typography>
216 - <div className={classes.person}>
217 - <Typography
218 - className={classes.name}
219 - variant="body1"
220 - >
221 - Takamaru Ayako
222 - </Typography>
223 - <Typography
224 - className={classes.bio}
225 - variant="body2"
226 - >
227 - Manager at inVision
228 - </Typography>
229 - </div>
230 - </div>
231 - </div>
232 - </Grid>
233 - <Grid
234 - className={classes.content}
235 - item
236 - lg={7}
237 - xs={12}
238 - >
239 - <div className={classes.content}>
240 - <div className={classes.contentHeader}>
241 - <IconButton onClick={handleBack}>
242 - <ArrowBackIcon />
243 - </IconButton>
244 - </div>
245 - <div className={classes.contentBody}>
246 - <form
247 - className={classes.form}
248 - onSubmit={handleSignUp}
249 - >
250 - <Typography
251 - className={classes.title}
252 - variant="h2"
253 - >
254 - Create new account
255 - </Typography>
256 - <Typography
257 - color="textSecondary"
258 - gutterBottom
259 - >
260 - Use your email to create new account
261 - </Typography>
262 - <TextField
263 - className={classes.textField}
264 - error={hasError('firstName')}
265 - fullWidth
266 - helperText={
267 - hasError('firstName') ? formState.errors.firstName[0] : null
268 - }
269 - label="First name"
270 - name="firstName"
271 - onChange={handleChange}
272 - type="text"
273 - value={formState.values.firstName || ''}
274 - variant="outlined"
275 - />
276 - <TextField
277 - className={classes.textField}
278 - error={hasError('lastName')}
279 - fullWidth
280 - helperText={
281 - hasError('lastName') ? formState.errors.lastName[0] : null
282 - }
283 - label="Last name"
284 - name="lastName"
285 - onChange={handleChange}
286 - type="text"
287 - value={formState.values.lastName || ''}
288 - variant="outlined"
289 - />
290 - <TextField
291 - className={classes.textField}
292 - error={hasError('email')}
293 - fullWidth
294 - helperText={
295 - hasError('email') ? formState.errors.email[0] : null
296 - }
297 - label="Email address"
298 - name="email"
299 - onChange={handleChange}
300 - type="text"
301 - value={formState.values.email || ''}
302 - variant="outlined"
303 - />
304 - <TextField
305 - className={classes.textField}
306 - error={hasError('password')}
307 - fullWidth
308 - helperText={
309 - hasError('password') ? formState.errors.password[0] : null
310 - }
311 - label="Password"
312 - name="password"
313 - onChange={handleChange}
314 - type="password"
315 - value={formState.values.password || ''}
316 - variant="outlined"
317 - />
318 - <div className={classes.policy}>
319 - <Checkbox
320 - checked={formState.values.policy || false}
321 - className={classes.policyCheckbox}
322 - color="primary"
323 - name="policy"
324 - onChange={handleChange}
325 - />
326 - <Typography
327 - className={classes.policyText}
328 - color="textSecondary"
329 - variant="body1"
330 - >
331 - I have read the{' '}
332 - <Link
333 - color="primary"
334 - component={RouterLink}
335 - to="#"
336 - underline="always"
337 - variant="h6"
338 - >
339 - Terms and Conditions
340 - </Link>
341 - </Typography>
342 - </div>
343 - {hasError('policy') && (
344 - <FormHelperText error>
345 - {formState.errors.policy[0]}
346 - </FormHelperText>
347 - )}
348 - <Button
349 - className={classes.signUpButton}
350 - color="primary"
351 - disabled={!formState.isValid}
352 - fullWidth
353 - size="large"
354 - type="submit"
355 - variant="contained"
356 - >
357 - Sign up now
358 - </Button>
359 - <Typography
360 - color="textSecondary"
361 - variant="body1"
362 - >
363 - Have an account?{' '}
364 - <Link
365 - component={RouterLink}
366 - to="/sign-in"
367 - variant="h6"
368 - >
369 - Sign in
370 - </Link>
371 - </Typography>
372 - </form>
373 - </div>
374 - </div>
375 - </Grid>
376 - </Grid>
377 - </div>
378 - );
379 -};
380 -
381 -SignUp.propTypes = {
382 - history: PropTypes.object
383 -};
384 -
385 -export default withRouter(SignUp);
1 -export { default } from './SignUp';
1 -import React, { useState } from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -
4 -import { TrashToolbar, RemovedFileTable } from './components';
5 -import mockData from './data';
6 -
7 -const useStyles = makeStyles(theme => ({
8 - root: {
9 - padding: theme.spacing(3)
10 - },
11 - content: {
12 - marginTop: theme.spacing(2)
13 - }
14 -}));
15 -
16 -const Trash = () => {
17 - const classes = useStyles();
18 -
19 - const [files] = useState(mockData);
20 -
21 - return (
22 - <div className={classes.root}>
23 - <TrashToolbar />
24 - <div className={classes.content}>
25 - <RemovedFileTable files={files} />
26 - </div>
27 - </div>
28 - );
29 -};
30 -
31 -export default Trash;
1 -import React, { useState } from 'react';
2 -import clsx from 'clsx';
3 -import PropTypes from 'prop-types';
4 -import moment from 'moment';
5 -import PerfectScrollbar from 'react-perfect-scrollbar';
6 -import { makeStyles } from '@material-ui/styles';
7 -import {
8 - Card,
9 - CardActions,
10 - CardContent,
11 - Avatar,
12 - Checkbox,
13 - Table,
14 - TableBody,
15 - TableCell,
16 - TableHead,
17 - TableRow,
18 - Typography,
19 - TablePagination
20 -} from '@material-ui/core';
21 -
22 -import { getInitials } from 'helpers';
23 -
24 -const useStyles = makeStyles(theme => ({
25 - root: {},
26 - content: {
27 - padding: 0
28 - },
29 - inner: {
30 - minWidth: 1050
31 - },
32 - nameContainer: {
33 - display: 'flex',
34 - alignItems: 'center'
35 - },
36 - avatar: {
37 - marginRight: theme.spacing(2)
38 - },
39 - actions: {
40 - justifyContent: 'flex-end'
41 - }
42 -}));
43 -
44 -const RemovedFileTable = props => {
45 - const { className, files: files, ...rest } = props;
46 -
47 - const classes = useStyles();
48 -
49 - const [selectedUsers, setSelectedUsers] = useState([]);
50 - const [rowsPerPage, setRowsPerPage] = useState(10);
51 - const [page, setPage] = useState(0);
52 -
53 - const handleSelectAll = event => {
54 - const { files } = props;
55 -
56 - let selectedUsers;
57 -
58 - if (event.target.checked) {
59 - selectedUsers = files.map(user => user.id);
60 - } else {
61 - selectedUsers = [];
62 - }
63 -
64 - setSelectedUsers(selectedUsers);
65 - };
66 -
67 - const handleSelectOne = (event, id) => {
68 - const selectedIndex = selectedUsers.indexOf(id);
69 - let newSelectedUsers = [];
70 -
71 - if (selectedIndex === -1) {
72 - newSelectedUsers = newSelectedUsers.concat(selectedUsers, id);
73 - } else if (selectedIndex === 0) {
74 - newSelectedUsers = newSelectedUsers.concat(selectedUsers.slice(1));
75 - } else if (selectedIndex === selectedUsers.length - 1) {
76 - newSelectedUsers = newSelectedUsers.concat(selectedUsers.slice(0, -1));
77 - } else if (selectedIndex > 0) {
78 - newSelectedUsers = newSelectedUsers.concat(
79 - selectedUsers.slice(0, selectedIndex),
80 - selectedUsers.slice(selectedIndex + 1)
81 - );
82 - }
83 -
84 - setSelectedUsers(newSelectedUsers);
85 - };
86 -
87 - const handlePageChange = (event, page) => {
88 - setPage(page);
89 - };
90 -
91 - const handleRowsPerPageChange = event => {
92 - setRowsPerPage(event.target.value);
93 - };
94 -
95 - return (
96 - <Card
97 - {...rest}
98 - className={clsx(classes.root, className)}
99 - >
100 - <CardContent className={classes.content}>
101 - <PerfectScrollbar>
102 - <div className={classes.inner}>
103 - <Table>
104 - <TableHead>
105 - <TableRow>
106 - <TableCell padding="checkbox">
107 - <Checkbox
108 - checked={selectedUsers.length === files.length}
109 - color="primary"
110 - indeterminate={
111 - selectedUsers.length > 0 &&
112 - selectedUsers.length < files.length
113 - }
114 - onChange={handleSelectAll}
115 - />
116 - </TableCell>
117 - <TableCell>이름</TableCell>
118 - <TableCell>마지막으로 수정한 날짜</TableCell>
119 - <TableCell>크기</TableCell>
120 - <TableCell>공유</TableCell>
121 - </TableRow>
122 - </TableHead>
123 - <TableBody>
124 - {files.slice(0, rowsPerPage).map(file => (
125 - <TableRow
126 - className={classes.tableRow}
127 - hover
128 - key={file.id}
129 - selected={selectedUsers.indexOf(file.id) !== -1}
130 - >
131 - <TableCell padding="checkbox">
132 - <Checkbox
133 - checked={selectedUsers.indexOf(file.id) !== -1}
134 - color="primary"
135 - onChange={event => handleSelectOne(event, file.id)}
136 - value="true"
137 - />
138 - </TableCell>
139 - <TableCell>
140 - <div className={classes.nameContainer}>
141 - {/* 파일 아이콘 */}
142 - <Typography variant="body1">{file.name}</Typography>
143 - </div>
144 - </TableCell>
145 - <TableCell>
146 - {moment(file.modifiedAt).format('DD/MM/YYYY')}
147 - </TableCell>
148 - <TableCell>{file.size}</TableCell>
149 - <TableCell>
150 - {file.share}
151 - </TableCell>
152 -
153 - </TableRow>
154 - ))}
155 - </TableBody>
156 - </Table>
157 - </div>
158 - </PerfectScrollbar>
159 - </CardContent>
160 - <CardActions className={classes.actions}>
161 - <TablePagination
162 - component="div"
163 - count={files.length}
164 - onChangePage={handlePageChange}
165 - onChangeRowsPerPage={handleRowsPerPageChange}
166 - page={page}
167 - rowsPerPage={rowsPerPage}
168 - rowsPerPageOptions={[5, 10, 25]}
169 - />
170 - </CardActions>
171 - </Card>
172 - );
173 -};
174 -
175 -RemovedFileTable.propTypes = {
176 - className: PropTypes.string,
177 - files: PropTypes.array.isRequired
178 -};
179 -
180 -export default RemovedFileTable;
1 -import React from 'react';
2 -import PropTypes from 'prop-types';
3 -import clsx from 'clsx';
4 -import { makeStyles } from '@material-ui/styles';
5 -import { Button } from '@material-ui/core';
6 -
7 -import { SearchInput } from 'components';
8 -
9 -const useStyles = makeStyles(theme => ({
10 - root: {},
11 - row: {
12 - height: '42px',
13 - display: 'flex',
14 - alignItems: 'center',
15 - marginTop: theme.spacing(1)
16 - },
17 - spacer: {
18 - flexGrow: 1
19 - },
20 - importButton: {
21 - marginRight: theme.spacing(1)
22 - },
23 - exportButton: {
24 - marginRight: theme.spacing(1)
25 - },
26 - searchInput: {
27 - marginRight: theme.spacing(1)
28 - }
29 -}));
30 -
31 -const DriveToolbar = props => {
32 - const { className, ...rest } = props;
33 -
34 - const classes = useStyles();
35 -
36 - return (
37 - <div
38 - {...rest}
39 - className={clsx(classes.root, className)}
40 - >
41 - <div className={classes.row}>
42 - {/* 파일 클릭했을 때 표시 */}
43 - <span className={classes.spacer} />
44 - <Button className={classes.Button}>복원</Button>
45 - <Button className={classes.Button}>영구 삭제</Button>
46 - </div>
47 - <div className={classes.row}>
48 - <SearchInput
49 - className={classes.searchInput}
50 - placeholder="파일, 폴더 검색"
51 - />
52 - </div>
53 - </div>
54 - );
55 -};
56 -
57 -DriveToolbar.propTypes = {
58 - className: PropTypes.string
59 -};
60 -
61 -export default DriveToolbar;
1 -export { default as RemovedFileTable } from './RemovedFileTable';
2 -export { default as TrashToolbar } from './TrashToolbar';
1 -import uuid from 'uuid/v1';
2 -import data from 'mock_file_data.json'
3 -
4 -export default data;
...\ No newline at end of file ...\ No newline at end of file
1 -export { default } from './Trash';
1 -import React, { Fragment } from 'react';
2 -import { makeStyles } from '@material-ui/styles';
3 -import { Grid, Typography as MuiTypography } from '@material-ui/core';
4 -
5 -const useStyles = makeStyles(theme => ({
6 - root: {
7 - padding: theme.spacing(4)
8 - }
9 -}));
10 -
11 -const variants = {
12 - h1: 'Nisi euismod ante senectus consequat phasellus ut',
13 - h2: 'Nisi euismod ante senectus consequat phasellus ut',
14 - h3: 'Nisi euismod ante senectus consequat phasellus ut',
15 - h4: 'Nisi euismod ante senectus consequat phasellus ut',
16 - h5: 'Nisi euismod ante senectus consequat phasellus ut',
17 - h6: 'Nisi euismod ante senectus consequat phasellus ut',
18 - subtitle1: 'Leo varius justo aptent arcu urna felis pede nisl',
19 - subtitle2: 'Leo varius justo aptent arcu urna felis pede nisl',
20 - body1:
21 - 'Justo proin curabitur dictumst semper auctor, consequat tempor, nostra aenean neque turpis nunc. Leo. Sapien aliquet facilisi turpis, elit facilisi praesent porta metus leo. Dignissim amet dis nec ac integer inceptos erat dis Turpis sodales ad torquent. Dolor, erat convallis.Laoreet velit a fames commodo tristique hendrerit sociosqu rhoncus vel sapien penatibus facilisis faucibus ad. Mus purus vehicula imperdiet tempor lectus, feugiat Sapien erat viverra netus potenti mattis purus turpis. Interdum curabitur potenti tristique. Porta velit dignissim tristique ultrices primis.',
22 - body2:
23 - 'Justo proin curabitur dictumst semper auctor, consequat tempor, nostra aenean neque turpis nunc. Leo. Sapien aliquet facilisi turpis, elit facilisi praesent porta metus leo. Dignissim amet dis nec ac integer inceptos erat dis Turpis sodales ad torquent. Dolor, erat convallis.',
24 - caption: 'Accumsan leo pretium conubia ullamcorper.',
25 - overline: 'Accumsan leo pretium conubia ullamcorper.',
26 - button: 'Vivamus ultrices rutrum fames dictumst'
27 -};
28 -
29 -const Typography = () => {
30 - const classes = useStyles();
31 -
32 - return (
33 - <div className={classes.root}>
34 - <Grid
35 - container
36 - spacing={4}
37 - >
38 - {Object.keys(variants).map((key, i) => (
39 - <Fragment key={i}>
40 - <Grid
41 - item
42 - sm={3}
43 - xs={12}
44 - >
45 - <MuiTypography variant="caption">{key}</MuiTypography>
46 - </Grid>
47 - <Grid
48 - item
49 - sm={9}
50 - xs={12}
51 - >
52 - <MuiTypography variant={key}>{variants[key]}</MuiTypography>
53 - </Grid>
54 - </Fragment>
55 - ))}
56 - </Grid>
57 - </div>
58 - );
59 -};
60 -
61 -export default Typography;
1 -export { default } from './Typography';
1 -export { default as Account } from './Account';
2 -export { default as Dashboard } from './Dashboard';
3 -export { default as Icons } from './Icons';
4 -export { default as NotFound } from './NotFound';
5 -export { default as RecentFileList } from './RecentFileList';
6 -export { default as Settings } from './Settings';
7 -export { default as SignIn } from './SignIn';
8 -export { default as SignUp } from './SignUp';
9 -export { default as Typography } from './Typography';
10 -export { default as MyDrive } from './MyDrive';
11 -export { default as SharedFileList } from './SharedFileList';
12 -export { default as Trash } from './Trash';
This diff could not be displayed because it is too large.
1 +body {
2 + font-size: .875rem;
3 +}
4 +
5 +.login-html, .login-body {
6 + height: 100%;
7 +}
8 +
9 +.login-body {
10 + display: -ms-flexbox;
11 + display: flex;
12 + -ms-flex-align: center;
13 + align-items: center;
14 + padding-top: 40px;
15 + padding-bottom: 40px;
16 + background-color: #f5f5f5;
17 +}
18 +
19 +.form-signin {
20 + width: 100%;
21 + max-width: 330px;
22 + padding: 15px;
23 + margin: auto;
24 +}
25 +.form-signin .checkbox {
26 + font-weight: 400;
27 +}
28 +.form-signin .form-control {
29 + position: relative;
30 + box-sizing: border-box;
31 + height: auto;
32 + padding: 10px;
33 + font-size: 16px;
34 +}
35 +.form-signin .form-control:focus {
36 + z-index: 2;
37 +}
38 +.form-signin .input-top {
39 + margin-bottom: -1px;
40 + border-bottom-right-radius: 0;
41 + border-bottom-left-radius: 0;
42 +}
43 +.form-signin .input-mid {
44 + margin-bottom: -1px;
45 + border-radius: 0;
46 +}
47 +.form-signin .input-bot {
48 + margin-bottom: 10px;
49 + border-top-left-radius: 0;
50 + border-top-right-radius: 0;
51 +}
52 +
53 +.feather {
54 + width: 16px;
55 + height: 16px;
56 + vertical-align: text-bottom;
57 +}
58 +
59 +/*
60 + * Sidebar
61 + */
62 +
63 +.sidebar {
64 + position: fixed;
65 + top: 0;
66 + bottom: 0;
67 + left: 0;
68 + z-index: 100; /* Behind the navbar */
69 + padding: 48px 0 0; /* Height of navbar */
70 + box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
71 +}
72 +
73 +@media (max-width: 767.98px) {
74 + .sidebar {
75 + top: 5rem;
76 + }
77 +}
78 +
79 +.sidebar-sticky {
80 + position: relative;
81 + top: 0;
82 + height: calc(100vh - 48px);
83 + padding-top: .5rem;
84 + overflow-x: hidden;
85 + overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
86 +}
87 +
88 +@supports ((position: -webkit-sticky) or (position: sticky)) {
89 + .sidebar-sticky {
90 + position: -webkit-sticky;
91 + position: sticky;
92 + }
93 +}
94 +
95 +.sidebar .nav-link {
96 + font-weight: 500;
97 + color: #333;
98 +}
99 +
100 +.sidebar .nav-link .feather {
101 + margin-right: 4px;
102 + color: #999;
103 +}
104 +
105 +.sidebar .nav-link.active {
106 + color: #007bff;
107 +}
108 +
109 +.sidebar .nav-link:hover .feather,
110 +.sidebar .nav-link.active .feather {
111 + color: inherit;
112 +}
113 +
114 +.sidebar-heading {
115 + font-size: .75rem;
116 + text-transform: uppercase;
117 +}
118 +
119 +/*
120 + * Navbar
121 + */
122 +
123 +.navbar-brand {
124 + padding-top: .75rem;
125 + padding-bottom: .75rem;
126 + font-size: 1rem;
127 + background-color: rgba(0, 0, 0, .25);
128 + box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25);
129 +}
130 +
131 +.navbar .navbar-toggler {
132 + top: .25rem;
133 + right: 1rem;
134 +}
135 +
136 +.navbar .form-control {
137 + padding: .75rem 1rem;
138 + border-width: 0;
139 + border-radius: 0;
140 +}
141 +
142 +.form-control-dark {
143 + color: #fff;
144 + background-color: rgba(255, 255, 255, .1);
145 + border-color: rgba(255, 255, 255, .1);
146 +}
147 +
148 +.form-control-dark:focus {
149 + border-color: transparent;
150 + box-shadow: 0 0 0 3px rgba(255, 255, 255, .25);
151 +}
152 +
153 +.dropdown-item {
154 + font-size: 0.8rem;
155 +}
1 +/*!
2 + * Bootstrap v4.5.0 (https://getbootstrap.com/)
3 + * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 + */
6 +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],e):e((t=t||self).bootstrap={},t.jQuery)}(this,(function(t,e){"use strict";function n(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function i(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function s(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(e){o(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e;function a(t){var n=this,i=!1;return e(this).one(l.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||l.triggerTransitionEnd(n)}),t),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),r=parseFloat(i);return o||r?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&l.isElement(r)?"element":null===(a=r)||"undefined"==typeof a?""+a:{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?l.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};l.jQueryDetection(),e.fn.emulateTransitionEnd=a,e.event.special[l.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var c="alert",u=e.fn[c],h=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=l.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=l.getTransitionDurationFromElement(t);e(t).one(l.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),e.fn[c]=h._jQueryInterface,e.fn[c].Constructor=h,e.fn[c].noConflict=function(){return e.fn[c]=u,h._jQueryInterface};var f=e.fn.button,d=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var r=i.querySelector(".active");r&&e(r).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"LABEL"===i.tagName&&o&&"checkbox"===o.type&&t.preventDefault(),d._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var r=0,s=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;r<s;r++){var a=t[r];"true"===a.getAttribute("aria-pressed")?a.classList.add("active"):a.classList.remove("active")}})),e.fn.button=d._jQueryInterface,e.fn.button.Constructor=d,e.fn.button.noConflict=function(){return e.fn.button=f,d._jQueryInterface};var p="carousel",m=".bs.carousel",g=e.fn[p],v={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},b={TOUCH:"touch",PEN:"pen"},y=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(l.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(m),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=s(s({},v),t),l.typeCheckConfig(p,t,_),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+("prev"===t?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),r=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(r),r},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,r,s=this,a=this._element.querySelector(".active.carousel-item"),c=this._getItemIndex(a),u=n||a&&this._getItemByDirection(t,a),h=this._getItemIndex(u),f=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",r="left"):(i="carousel-item-right",o="carousel-item-prev",r="right"),u&&e(u).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(u,r).isDefaultPrevented()&&a&&u){this._isSliding=!0,f&&this.pause(),this._setActiveIndicatorElement(u);var d=e.Event("slid.bs.carousel",{relatedTarget:u,direction:r,from:c,to:h});if(e(this._element).hasClass("slide")){e(u).addClass(o),l.reflow(u),e(a).addClass(i),e(u).addClass(i);var p=parseInt(u.getAttribute("data-interval"),10);p?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=p):this._config.interval=this._config.defaultInterval||this._config.interval;var m=l.getTransitionDurationFromElement(a);e(a).one(l.TRANSITION_END,(function(){e(u).removeClass(i+" "+o).addClass("active"),e(a).removeClass("active "+o+" "+i),s._isSliding=!1,setTimeout((function(){return e(s._element).trigger(d)}),0)})).emulateTransitionEnd(m)}else e(a).removeClass("active"),e(u).addClass("active"),this._isSliding=!1,e(this._element).trigger(d);f&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=s(s({},v),e(this).data());"object"==typeof n&&(o=s(s({},o),n));var r="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof r){if("undefined"==typeof i[r])throw new TypeError('No method named "'+r+'"');i[r]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=l.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var r=s(s({},e(o).data()),e(this).data()),a=this.getAttribute("data-slide-to");a&&(r.interval=!1),t._jQueryInterface.call(e(o),r),a&&e(o).data("bs.carousel").to(a),n.preventDefault()}}},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return v}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",y._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n<i;n++){var o=e(t[n]);y._jQueryInterface.call(o,o.data())}})),e.fn[p]=y._jQueryInterface,e.fn[p].Constructor=y,e.fn[p].noConflict=function(){return e.fn[p]=g,y._jQueryInterface};var w="collapse",E=e.fn[w],T={toggle:!0,parent:""},C={toggle:"boolean",parent:"(string|element)"},S=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var r=n[i],s=l.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter((function(e){return e===t}));null!==s&&a.length>0&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var r=e.Event("show.bs.collapse");if(e(this._element).trigger(r),!r.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var s=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[s]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var a="scroll"+(s[0].toUpperCase()+s.slice(1)),c=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[s]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(c),this._element.style[s]=this._element[a]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",l.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var r=0;r<o;r++){var s=this._triggerArray[r],a=l.getSelectorFromElement(s);if(null!==a)e([].slice.call(document.querySelectorAll(a))).hasClass("show")||e(s).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var c=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(){t.setTransitioning(!1),e(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(c)}}},n.setTransitioning=function(t){this._isTransitioning=t},n.dispose=function(){e.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},n._getConfig=function(t){return(t=s(s({},T),t)).toggle=Boolean(t.toggle),l.typeCheckConfig(w,t,C),t},n._getDimension=function(){return e(this._element).hasClass("width")?"width":"height"},n._getParent=function(){var n,i=this;l.isElement(this._config.parent)?(n=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',r=[].slice.call(n.querySelectorAll(o));return e(r).each((function(e,n){i._addAriaAndCollapsedClass(t._getTargetFromElement(n),[n])})),n},n._addAriaAndCollapsedClass=function(t,n){var i=e(t).hasClass("show");n.length&&e(n).toggleClass("collapsed",!i).attr("aria-expanded",i)},t._getTargetFromElement=function(t){var e=l.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.collapse"),r=s(s(s({},T),i.data()),"object"==typeof n&&n?n:{});if(!o&&r.toggle&&"string"==typeof n&&/show|hide/.test(n)&&(r.toggle=!1),o||(o=new t(this,r),i.data("bs.collapse",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return T}}]),t}();e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=e(this),i=l.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));e(o).each((function(){var t=e(this),i=t.data("bs.collapse")?"toggle":n.data();S._jQueryInterface.call(t,i)}))})),e.fn[w]=S._jQueryInterface,e.fn[w].Constructor=S,e.fn[w].noConflict=function(){return e.fn[w]=E,S._jQueryInterface};var D="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,k=function(){for(var t=["Edge","Trident","Firefox"],e=0;e<t.length;e+=1)if(D&&navigator.userAgent.indexOf(t[e])>=0)return 1;return 0}();var N=D&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),k))}};function O(t){return t&&"[object Function]"==={}.toString.call(t)}function A(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function I(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function x(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=A(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:x(I(t))}function j(t){return t&&t.referenceNode?t.referenceNode:t}var L=D&&!(!window.MSInputMethodContext||!document.documentMode),P=D&&/MSIE 10/.test(navigator.userAgent);function F(t){return 11===t?L:10===t?P:L||P}function R(t){if(!t)return document.documentElement;for(var e=F(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===A(n,"position")?R(n):n:t?t.ownerDocument.documentElement:document.documentElement}function M(t){return null!==t.parentNode?M(t.parentNode):t}function B(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var s,a,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(a=(s=l).nodeName)||"HTML"!==a&&R(s.firstElementChild)!==s?R(l):l;var c=M(t);return c.host?B(c.host,e):B(t,M(e).host)}function q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",i=t.nodeName;if("BODY"===i||"HTML"===i){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[n]}return t[n]}function H(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=q(e,"top"),o=q(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}function Q(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"],10)+parseFloat(t["border"+i+"Width"],10)}function W(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],F(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function U(t){var e=t.body,n=t.documentElement,i=F(10)&&getComputedStyle(n);return{height:W("Height",e,n,i),width:W("Width",e,n,i)}}var V=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Y=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),z=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},X=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t};function K(t){return X({},t,{right:t.left+t.width,bottom:t.top+t.height})}function G(t){var e={};try{if(F(10)){e=t.getBoundingClientRect();var n=q(t,"top"),i=q(t,"left");e.top+=n,e.left+=i,e.bottom+=n,e.right+=i}else e=t.getBoundingClientRect()}catch(t){}var o={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},r="HTML"===t.nodeName?U(t.ownerDocument):{},s=r.width||t.clientWidth||o.width,a=r.height||t.clientHeight||o.height,l=t.offsetWidth-s,c=t.offsetHeight-a;if(l||c){var u=A(t);l-=Q(u,"x"),c-=Q(u,"y"),o.width-=l,o.height-=c}return K(o)}function $(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=F(10),o="HTML"===e.nodeName,r=G(t),s=G(e),a=x(t),l=A(e),c=parseFloat(l.borderTopWidth,10),u=parseFloat(l.borderLeftWidth,10);n&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var h=K({top:r.top-s.top-c,left:r.left-s.left-u,width:r.width,height:r.height});if(h.marginTop=0,h.marginLeft=0,!i&&o){var f=parseFloat(l.marginTop,10),d=parseFloat(l.marginLeft,10);h.top-=c-f,h.bottom-=c-f,h.left-=u-d,h.right-=u-d,h.marginTop=f,h.marginLeft=d}return(i&&!n?e.contains(a):e===a&&"BODY"!==a.nodeName)&&(h=H(h,e)),h}function J(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=$(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:q(n),a=e?0:q(n,"left"),l={top:s-i.top+i.marginTop,left:a-i.left+i.marginLeft,width:o,height:r};return K(l)}function Z(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===A(t,"position"))return!0;var n=I(t);return!!n&&Z(n)}function tt(t){if(!t||!t.parentElement||F())return document.documentElement;for(var e=t.parentElement;e&&"none"===A(e,"transform");)e=e.parentElement;return e||document.documentElement}function et(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},s=o?tt(t):B(t,j(e));if("viewport"===i)r=J(s,o);else{var a=void 0;"scrollParent"===i?"BODY"===(a=x(I(e))).nodeName&&(a=t.ownerDocument.documentElement):a="window"===i?t.ownerDocument.documentElement:i;var l=$(a,s,o);if("HTML"!==a.nodeName||Z(s))r=l;else{var c=U(t.ownerDocument),u=c.height,h=c.width;r.top+=l.top-l.marginTop,r.bottom=u+l.top,r.left+=l.left-l.marginLeft,r.right=h+l.left}}var f="number"==typeof(n=n||0);return r.left+=f?n:n.left||0,r.top+=f?n:n.top||0,r.right-=f?n:n.right||0,r.bottom-=f?n:n.bottom||0,r}function nt(t){return t.width*t.height}function it(t,e,n,i,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var s=et(n,i,r,o),a={top:{width:s.width,height:e.top-s.top},right:{width:s.right-e.right,height:s.height},bottom:{width:s.width,height:s.bottom-e.bottom},left:{width:e.left-s.left,height:s.height}},l=Object.keys(a).map((function(t){return X({key:t},a[t],{area:nt(a[t])})})).sort((function(t,e){return e.area-t.area})),c=l.filter((function(t){var e=t.width,i=t.height;return e>=n.clientWidth&&i>=n.clientHeight})),u=c.length>0?c[0].key:l[0].key,h=t.split("-")[1];return u+(h?"-"+h:"")}function ot(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=i?tt(e):B(e,j(n));return $(n,o,i)}function rt(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function st(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function at(t,e,n){n=n.split("-")[0];var i=rt(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),s=r?"top":"left",a=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return o[s]=e[s]+e[l]/2-i[l]/2,o[a]=n===a?e[a]-i[c]:e[st(a)],o}function lt(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ct(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var i=lt(t,(function(t){return t[e]===n}));return t.indexOf(i)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&O(n)&&(e.offsets.popper=K(e.offsets.popper),e.offsets.reference=K(e.offsets.reference),e=n(e,t))})),e}function ut(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=ot(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=it(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=at(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ct(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function ht(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function ft(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i<e.length;i++){var o=e[i],r=o?""+o+n:t;if("undefined"!=typeof document.body.style[r])return r}return null}function dt(){return this.state.isDestroyed=!0,ht(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[ft("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function pt(t){var e=t.ownerDocument;return e?e.defaultView:window}function mt(t,e,n,i){n.updateBound=i,pt(t).addEventListener("resize",n.updateBound,{passive:!0});var o=x(t);return function t(e,n,i,o){var r="BODY"===e.nodeName,s=r?e.ownerDocument.defaultView:e;s.addEventListener(n,i,{passive:!0}),r||t(x(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function gt(){this.state.eventsEnabled||(this.state=mt(this.reference,this.options,this.state,this.scheduleUpdate))}function vt(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,pt(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach((function(t){t.removeEventListener("scroll",e.updateBound)})),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function _t(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function bt(t,e){Object.keys(e).forEach((function(n){var i="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&_t(e[n])&&(i="px"),t.style[n]=e[n]+i}))}var yt=D&&/Firefox/i.test(navigator.userAgent);function wt(t,e,n){var i=lt(t,(function(t){return t.name===e})),o=!!i&&t.some((function(t){return t.name===n&&t.enabled&&t.order<i.order}));if(!o){var r="`"+e+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var Et=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Tt=Et.slice(3);function Ct(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Tt.indexOf(t),i=Tt.slice(n+1).concat(Tt.slice(0,n));return e?i.reverse():i}var St="flip",Dt="clockwise",kt="counterclockwise";function Nt(t,e,n,i){var o=[0,0],r=-1!==["right","left"].indexOf(i),s=t.split(/(\+|\-)/).map((function(t){return t.trim()})),a=s.indexOf(lt(s,(function(t){return-1!==t.search(/,|\s/)})));s[a]&&-1===s[a].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==a?[s.slice(0,a).concat([s[a].split(l)[0]]),[s[a].split(l)[1]].concat(s.slice(a+1))]:[s];return(c=c.map((function(t,i){var o=(1===i?!r:r)?"height":"width",s=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,s=!0,t):s?(t[t.length-1]+=e,s=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],s=o[2];if(!r)return t;if(0===s.indexOf("%")){var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=i}return K(a)[e]/100*r}if("vh"===s||"vw"===s){return("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r}return r}(t,o,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,i){_t(n)&&(o[e]+=n*("-"===t[i-1]?-1:1))}))})),o}var Ot={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,s=o.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",u={start:z({},l,r[l]),end:z({},l,r[l]+r[c]-s[c])};t.offsets.popper=X({},s,u[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,s=o.reference,a=i.split("-")[0],l=void 0;return l=_t(+n)?[+n,0]:Nt(n,r,s,a),"left"===a?(r.top+=l[0],r.left-=l[1]):"right"===a?(r.top+=l[0],r.left+=l[1]):"top"===a?(r.left+=l[0],r.top-=l[1]):"bottom"===a&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||R(t.instance.popper);t.instance.reference===n&&(n=R(n));var i=ft("transform"),o=t.instance.popper.style,r=o.top,s=o.left,a=o[i];o.top="",o.left="",o[i]="";var l=et(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);o.top=r,o.left=s,o[i]=a,e.boundaries=l;var c=e.priority,u=t.offsets.popper,h={primary:function(t){var n=u[t];return u[t]<l[t]&&!e.escapeWithReference&&(n=Math.max(u[t],l[t])),z({},t,n)},secondary:function(t){var n="right"===t?"left":"top",i=u[n];return u[t]>l[t]&&!e.escapeWithReference&&(i=Math.min(u[n],l[t]-("right"===t?u.width:u.height))),z({},n,i)}};return c.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";u=X({},u,h[e](t))})),t.offsets.popper=u,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<r(i[l])&&(t.offsets.popper[l]=r(i[l])-n[c]),n[l]>r(i[a])&&(t.offsets.popper[l]=r(i[a])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!wt(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",u=l?"Top":"Left",h=u.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=rt(i)[c];a[d]-p<s[h]&&(t.offsets.popper[h]-=s[h]-(a[d]-p)),a[h]+p>s[d]&&(t.offsets.popper[h]+=a[h]+p-s[d]),t.offsets.popper=K(t.offsets.popper);var m=a[h]+a[c]/2-p/2,g=A(t.instance.popper),v=parseFloat(g["margin"+u],10),_=parseFloat(g["border"+u+"Width"],10),b=m-t.offsets.popper[h]-v-_;return b=Math.max(Math.min(s[c]-p,b),0),t.arrowElement=i,t.offsets.arrow=(z(n={},h,Math.round(b)),z(n,f,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(ht(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=et(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),i=t.placement.split("-")[0],o=st(i),r=t.placement.split("-")[1]||"",s=[];switch(e.behavior){case St:s=[i,o];break;case Dt:s=Ct(i);break;case kt:s=Ct(i,!0);break;default:s=e.behavior}return s.forEach((function(a,l){if(i!==a||s.length===l+1)return t;i=t.placement.split("-")[0],o=st(i);var c=t.offsets.popper,u=t.offsets.reference,h=Math.floor,f="left"===i&&h(c.right)>h(u.left)||"right"===i&&h(c.left)<h(u.right)||"top"===i&&h(c.bottom)>h(u.top)||"bottom"===i&&h(c.top)<h(u.bottom),d=h(c.left)<h(n.left),p=h(c.right)>h(n.right),m=h(c.top)<h(n.top),g=h(c.bottom)>h(n.bottom),v="left"===i&&d||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!e.flipVariations&&(_&&"start"===r&&d||_&&"end"===r&&p||!_&&"start"===r&&m||!_&&"end"===r&&g),y=!!e.flipVariationsByContent&&(_&&"start"===r&&p||_&&"end"===r&&d||!_&&"start"===r&&g||!_&&"end"===r&&m),w=b||y;(f||v||w)&&(t.flipped=!0,(f||v)&&(i=s[l+1]),w&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=i+(r?"-"+r:""),t.offsets.popper=X({},t.offsets.popper,at(t.instance.popper,t.offsets.reference,t.placement)),t=ct(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[s?"left":"top"]=r[n]-(a?o[s?"width":"height"]:0),t.placement=st(e),t.offsets.popper=K(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!wt(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=lt(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,i=e.y,o=t.offsets.popper,r=lt(t.instance.modifiers,(function(t){return"applyStyle"===t.name})).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s=void 0!==r?r:e.gpuAcceleration,a=R(t.instance.popper),l=G(a),c={position:o.position},u=function(t,e){var n=t.offsets,i=n.popper,o=n.reference,r=Math.round,s=Math.floor,a=function(t){return t},l=r(o.width),c=r(i.width),u=-1!==["left","right"].indexOf(t.placement),h=-1!==t.placement.indexOf("-"),f=e?u||h||l%2==c%2?r:s:a,d=e?r:a;return{left:f(l%2==1&&c%2==1&&!h&&e?i.left-1:i.left),top:d(i.top),bottom:d(i.bottom),right:f(i.right)}}(t,window.devicePixelRatio<2||!yt),h="bottom"===n?"top":"bottom",f="right"===i?"left":"right",d=ft("transform"),p=void 0,m=void 0;if(m="bottom"===h?"HTML"===a.nodeName?-a.clientHeight+u.bottom:-l.height+u.bottom:u.top,p="right"===f?"HTML"===a.nodeName?-a.clientWidth+u.right:-l.width+u.right:u.left,s&&d)c[d]="translate3d("+p+"px, "+m+"px, 0)",c[h]=0,c[f]=0,c.willChange="transform";else{var g="bottom"===h?-1:1,v="right"===f?-1:1;c[h]=m*g,c[f]=p*v,c.willChange=h+", "+f}var _={"x-placement":t.placement};return t.attributes=X({},_,t.attributes),t.styles=X({},c,t.styles),t.arrowStyles=X({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return bt(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach((function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)})),t.arrowElement&&Object.keys(t.arrowStyles).length&&bt(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=ot(o,e,t,n.positionFixed),s=it(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",s),bt(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},At=function(){function t(e,n){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};V(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=N(this.update.bind(this)),this.options=X({},t.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(X({},t.Defaults.modifiers,o.modifiers)).forEach((function(e){i.options.modifiers[e]=X({},t.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return X({name:t},i.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&O(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)})),this.update();var r=this.options.eventsEnabled;r&&this.enableEventListeners(),this.state.eventsEnabled=r}return Y(t,[{key:"update",value:function(){return ut.call(this)}},{key:"destroy",value:function(){return dt.call(this)}},{key:"enableEventListeners",value:function(){return gt.call(this)}},{key:"disableEventListeners",value:function(){return vt.call(this)}}]),t}();At.Utils=("undefined"!=typeof window?window:global).PopperUtils,At.placements=Et,At.Defaults=Ot;var It="dropdown",xt=e.fn[It],jt=new RegExp("38|40|27"),Lt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Pt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},Ft=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var n=t.prototype;return n.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")){var n=e(this._menu).hasClass("show");t._clearMenus(),n||this.show(!0)}},n.show=function(n){if(void 0===n&&(n=!1),!(this._element.disabled||e(this._element).hasClass("disabled")||e(this._menu).hasClass("show"))){var i={relatedTarget:this._element},o=e.Event("show.bs.dropdown",i),r=t._getParentFromElement(this._element);if(e(r).trigger(o),!o.isDefaultPrevented()){if(!this._inNavbar&&n){if("undefined"==typeof At)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var s=this._element;"parent"===this._config.reference?s=r:l.isElement(this._config.reference)&&(s=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(s=this._config.reference[0])),"scrollParent"!==this._config.boundary&&e(r).addClass("position-static"),this._popper=new At(s,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===e(r).closest(".navbar-nav").length&&e(document.body).children().on("mouseover",null,e.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),e(this._menu).toggleClass("show"),e(r).toggleClass("show").trigger(e.Event("shown.bs.dropdown",i))}}},n.hide=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")&&e(this._menu).hasClass("show")){var n={relatedTarget:this._element},i=e.Event("hide.bs.dropdown",n),o=t._getParentFromElement(this._element);e(o).trigger(i),i.isDefaultPrevented()||(this._popper&&this._popper.destroy(),e(this._menu).toggleClass("show"),e(o).toggleClass("show").trigger(e.Event("hidden.bs.dropdown",n)))}},n.dispose=function(){e.removeData(this._element,"bs.dropdown"),e(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},n.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},n._addEventListeners=function(){var t=this;e(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},n._getConfig=function(t){return t=s(s(s({},this.constructor.Default),e(this._element).data()),t),l.typeCheckConfig(It,t,this.constructor.DefaultType),t},n._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},n._getPlacement=function(){var t=e(this._element.parentNode),n="bottom-start";return t.hasClass("dropup")?n=e(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?n="right-start":t.hasClass("dropleft")?n="left-start":e(this._menu).hasClass("dropdown-menu-right")&&(n="bottom-end"),n},n._detectNavbar=function(){return e(this._element).closest(".navbar").length>0},n._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=s(s({},e.offsets),t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},n._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),s(s({},t),this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,r=i.length;o<r;o++){var s=t._getParentFromElement(i[o]),a=e(i[o]).data("bs.dropdown"),l={relatedTarget:i[o]};if(n&&"click"===n.type&&(l.clickEvent=n),a){var c=a._menu;if(e(s).hasClass("show")&&!(n&&("click"===n.type&&/input|textarea/i.test(n.target.tagName)||"keyup"===n.type&&9===n.which)&&e.contains(s,n.target))){var u=e.Event("hide.bs.dropdown",l);e(s).trigger(u),u.isDefaultPrevented()||("ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),i[o].setAttribute("aria-expanded","false"),a._popper&&a._popper.destroy(),e(c).removeClass("show"),e(s).removeClass("show").trigger(e.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=l.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(n){if(!(/input|textarea/i.test(n.target.tagName)?32===n.which||27!==n.which&&(40!==n.which&&38!==n.which||e(n.target).closest(".dropdown-menu").length):!jt.test(n.which))&&!this.disabled&&!e(this).hasClass("disabled")){var i=t._getParentFromElement(this),o=e(i).hasClass("show");if(o||27!==n.which){if(n.preventDefault(),n.stopPropagation(),!o||o&&(27===n.which||32===n.which))return 27===n.which&&e(i.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void e(this).trigger("click");var r=[].slice.call(i.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return e(t).is(":visible")}));if(0!==r.length){var s=r.indexOf(n.target);38===n.which&&s>0&&s--,40===n.which&&s<r.length-1&&s++,s<0&&(s=0),r[s].focus()}}}},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return Lt}},{key:"DefaultType",get:function(){return Pt}}]),t}();e(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',Ft._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",Ft._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",Ft._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),Ft._jQueryInterface.call(e(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),e.fn[It]=Ft._jQueryInterface,e.fn[It].Constructor=Ft,e.fn[It].noConflict=function(){return e.fn[It]=xt,Ft._jQueryInterface};var Rt=e.fn.modal,Mt={backdrop:!0,keyboard:!0,focus:!0,show:!0},Bt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},qt=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var n=t.prototype;return n.toggle=function(t){return this._isShown?this.hide():this.show(t)},n.show=function(t){var n=this;if(!this._isShown&&!this._isTransitioning){e(this._element).hasClass("fade")&&(this._isTransitioning=!0);var i=e.Event("show.bs.modal",{relatedTarget:t});e(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return n.hide(t)})),e(this._dialog).on("mousedown.dismiss.bs.modal",(function(){e(n._element).one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return n._showElement(t)})))}},n.hide=function(t){var n=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var i=e.Event("hide.bs.modal");if(e(this._element).trigger(i),this._isShown&&!i.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off("focusin.bs.modal"),e(this._element).removeClass("show"),e(this._element).off("click.dismiss.bs.modal"),e(this._dialog).off("mousedown.dismiss.bs.modal"),o){var r=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(t){return n._hideModal(t)})).emulateTransitionEnd(r)}else this._hideModal()}}},n.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return e(t).off(".bs.modal")})),e(document).off("focusin.bs.modal"),e.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},n.handleUpdate=function(){this._adjustDialog()},n._getConfig=function(t){return t=s(s({},Mt),t),l.typeCheckConfig("modal",t,Bt),t},n._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var n=e.Event("hidePrevented.bs.modal");if(e(this._element).trigger(n),n.defaultPrevented)return;this._element.classList.add("modal-static");var i=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(){t._element.classList.remove("modal-static")})).emulateTransitionEnd(i),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&l.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var r=e.Event("shown.bs.modal",{relatedTarget:t}),s=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(r)};if(i){var a=l.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(l.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&l.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=l.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(l.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var r=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var s=l.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(l.TRANSITION_END,r).emulateTransitionEnd(s)}else r()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},n._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var n=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),i=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(n,i){var o=i.style.paddingRight,r=e(i).css("padding-right");e(i).data("padding-right",o).css("padding-right",parseFloat(r)+t._scrollbarWidth+"px")})),e(i).each((function(n,i){var o=i.style.marginRight,r=e(i).css("margin-right");e(i).data("margin-right",o).css("margin-right",parseFloat(r)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,r=e(document.body).css("padding-right");e(document.body).data("padding-right",o).css("padding-right",parseFloat(r)+this._scrollbarWidth+"px")}e(document.body).addClass("modal-open")},n._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));e(t).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}));var n=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(t,n){var i=e(n).data("margin-right");"undefined"!=typeof i&&e(n).css("margin-right",i).removeData("margin-right")}));var i=e(document.body).data("padding-right");e(document.body).removeData("padding-right"),document.body.style.paddingRight=i||""},n._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(n,i){return this.each((function(){var o=e(this).data("bs.modal"),r=s(s(s({},Mt),e(this).data()),"object"==typeof n&&n?n:{});if(o||(o=new t(this,r),e(this).data("bs.modal",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](i)}else r.show&&o.show(i)}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return Mt}}]),t}();e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var n,i=this,o=l.getSelectorFromElement(this);o&&(n=document.querySelector(o));var r=e(n).data("bs.modal")?"toggle":s(s({},e(n).data()),e(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var a=e(n).one("show.bs.modal",(function(t){t.isDefaultPrevented()||a.one("hidden.bs.modal",(function(){e(i).is(":visible")&&i.focus()}))}));qt._jQueryInterface.call(e(n),r,this)})),e.fn.modal=qt._jQueryInterface,e.fn.modal.Constructor=qt,e.fn.modal.noConflict=function(){return e.fn.modal=Rt,qt._jQueryInterface};var Ht=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Qt={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Wt=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,Ut=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function Vt(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),r=[].slice.call(i.body.querySelectorAll("*")),s=function(t,n){var i=r[t],s=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var a=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[s]||[]);a.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===Ht.indexOf(n)||Boolean(t.nodeValue.match(Wt)||t.nodeValue.match(Ut));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},a=0,l=r.length;a<l;a++)s(a);return i.body.innerHTML}var Yt="tooltip",zt=e.fn[Yt],Xt=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Kt=["sanitize","whiteList","sanitizeFn"],Gt={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},$t={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Jt={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Qt,popperConfig:null},Zt={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},te=function(){function t(t,e){if("undefined"==typeof At)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var n=t.prototype;return n.enable=function(){this._isEnabled=!0},n.disable=function(){this._isEnabled=!1},n.toggleEnabled=function(){this._isEnabled=!this._isEnabled},n.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},n.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},n.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var n=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(n);var i=l.findShadowRoot(this.element),o=e.contains(null!==i?i:this.element.ownerDocument.documentElement,this.element);if(n.isDefaultPrevented()||!o)return;var r=this.getTipElement(),s=l.getUID(this.constructor.NAME);r.setAttribute("id",s),this.element.setAttribute("aria-describedby",s),this.setContent(),this.config.animation&&e(r).addClass("fade");var a="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,c=this._getAttachment(a);this.addAttachmentClass(c);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new At(this.element,r,this._getPopperConfig(c)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var h=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=l.getTransitionDurationFromElement(this.tip);e(this.tip).one(l.TRANSITION_END,h).emulateTransitionEnd(f)}else h()}},n.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),r=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var s=l.getTransitionDurationFromElement(i);e(i).one(l.TRANSITION_END,r).emulateTransitionEnd(s)}else r();this._hoverState=""}},n.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},n.isWithContent=function(){return Boolean(this.getTitle())},n.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},n.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},n.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},n.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=Vt(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},n.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},n._getPopperConfig=function(t){var e=this;return s(s({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),this.config.popperConfig)},n._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s(s({},e.offsets),t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},n._getContainer=function(){return!1===this.config.container?document.body:l.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},n._getAttachment=function(t){return $t[t.toUpperCase()]},n._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s(s({},this.config),{},{trigger:"manual",selector:""}):this._fixTitle()},n._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},n._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},n._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},n._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},n._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==Kt.indexOf(t)&&delete n[t]})),"number"==typeof(t=s(s(s({},this.constructor.Default),n),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),l.typeCheckConfig(Yt,t,this.constructor.DefaultType),t.sanitize&&(t.template=Vt(t.template,t.whiteList,t.sanitizeFn)),t},n._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},n._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(Xt);null!==n&&n.length&&t.removeClass(n.join(""))},n._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},n._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Yt}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Zt}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return Gt}}]),t}();e.fn[Yt]=te._jQueryInterface,e.fn[Yt].Constructor=te,e.fn[Yt].noConflict=function(){return e.fn[Yt]=zt,te._jQueryInterface};var ee="popover",ne=e.fn[ee],ie=new RegExp("(^|\\s)bs-popover\\S+","g"),oe=s(s({},te.Default),{},{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),re=s(s({},te.DefaultType),{},{content:"(string|element|function)"}),se={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},ae=function(t){var n,o;function r(){return t.apply(this,arguments)||this}o=t,(n=r).prototype=Object.create(o.prototype),n.prototype.constructor=n,n.__proto__=o;var s=r.prototype;return s.isWithContent=function(){return this.getTitle()||this._getContent()},s.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},s.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},s.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},s._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},s._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(ie);null!==n&&n.length>0&&t.removeClass(n.join(""))},r._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new r(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},i(r,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return oe}},{key:"NAME",get:function(){return ee}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return se}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return re}}]),r}(te);e.fn[ee]=ae._jQueryInterface,e.fn[ee].Constructor=ae,e.fn[ee].noConflict=function(){return e.fn[ee]=ne,ae._jQueryInterface};var le="scrollspy",ce=e.fn[le],ue={offset:10,method:"auto",target:""},he={offset:"number",method:"string",target:"(string|element)"},fe=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,r=l.getSelectorFromElement(t);if(r&&(n=document.querySelector(r)),n){var s=n.getBoundingClientRect();if(s.width||s.height)return[e(n)[i]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=s(s({},ue),"object"==typeof t&&t?t:{})).target&&l.isElement(t.target)){var n=e(t.target).attr("id");n||(n=l.getUID(le),e(t.target).attr("id",n)),t.target="#"+n}return l.typeCheckConfig(le,t,he),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},n._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),i=e([].slice.call(document.querySelectorAll(n.join(","))));i.hasClass("dropdown-item")?(i.closest(".dropdown").find(".dropdown-toggle").addClass("active"),i.addClass("active")):(i.addClass("active"),i.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),i.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),e(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},n._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.scrollspy");if(i||(i=new t(this,"object"==typeof n&&n),e(this).data("bs.scrollspy",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return ue}}]),t}();e(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=t.length;n--;){var i=e(t[n]);fe._jQueryInterface.call(i,i.data())}})),e.fn[le]=fe._jQueryInterface,e.fn[le].Constructor=fe,e.fn[le].noConflict=function(){return e.fn[le]=ce,fe._jQueryInterface};var de=e.fn.tab,pe=function(){function t(t){this._element=t}var n=t.prototype;return n.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass("active")||e(this._element).hasClass("disabled"))){var n,i,o=e(this._element).closest(".nav, .list-group")[0],r=l.getSelectorFromElement(this._element);if(o){var s="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";i=(i=e.makeArray(e(o).find(s)))[i.length-1]}var a=e.Event("hide.bs.tab",{relatedTarget:this._element}),c=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(a),e(this._element).trigger(c),!c.isDefaultPrevented()&&!a.isDefaultPrevented()){r&&(n=document.querySelector(r)),this._activate(this._element,o);var u=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,u):u()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,r=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],s=i&&r&&e(r).hasClass("fade"),a=function(){return o._transitionComplete(t,r,i)};if(r&&s){var c=l.getTransitionDurationFromElement(r);e(r).removeClass("show").one(l.TRANSITION_END,a).emulateTransitionEnd(c)}else a()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),l.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var r=e(t).closest(".dropdown")[0];if(r){var s=[].slice.call(r.querySelectorAll(".dropdown-toggle"));e(s).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),pe._jQueryInterface.call(e(this),"show")})),e.fn.tab=pe._jQueryInterface,e.fn.tab.Constructor=pe,e.fn.tab.noConflict=function(){return e.fn.tab=de,pe._jQueryInterface};var me=e.fn.toast,ge={animation:"boolean",autohide:"boolean",delay:"number"},ve={animation:!0,autohide:!0,delay:500},_e=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),l.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=s(s(s({},ve),e(this._element).data()),"object"==typeof t&&t?t:{}),l.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"DefaultType",get:function(){return ge}},{key:"Default",get:function(){return ve}}]),t}();e.fn.toast=_e._jQueryInterface,e.fn.toast.Constructor=_e,e.fn.toast.noConflict=function(){return e.fn.toast=me,_e._jQueryInterface},t.Alert=h,t.Button=d,t.Carousel=y,t.Collapse=S,t.Dropdown=Ft,t.Modal=qt,t.Popover=ae,t.Scrollspy=fe,t.Tab=pe,t.Toast=_e,t.Tooltip=te,t.Util=l,Object.defineProperty(t,"__esModule",{value:!0})}));
1 +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.feather=n():e.feather=n()}("undefined"!=typeof self?self:this,function(){return function(e){var n={};function i(l){if(n[l])return n[l].exports;var t=n[l]={i:l,l:!1,exports:{}};return e[l].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=e,i.c=n,i.d=function(e,n,l){i.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:l})},i.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i.p="",i(i.s=61)}([function(e,n,i){var l=i(20)("wks"),t=i(11),r=i(1).Symbol,o="function"==typeof r;(e.exports=function(e){return l[e]||(l[e]=o&&r[e]||(o?r:t)("Symbol."+e))}).store=l},function(e,n){var i=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(e,n){var i=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=i)},function(e,n){var i={}.hasOwnProperty;e.exports=function(e,n){return i.call(e,n)}},function(e,n,i){e.exports=!i(27)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n,i){var l=i(13);e.exports=function(e){if(!l(e))throw TypeError(e+" is not an object!");return e}},function(e,n,i){var l=i(5),t=i(56),r=i(55),o=Object.defineProperty;n.f=i(4)?Object.defineProperty:function(e,n,i){if(l(e),n=r(n,!0),l(i),t)try{return o(e,n,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(e[n]=i.value),e}},function(e,n,i){var l=i(6),t=i(12);e.exports=i(4)?function(e,n,i){return l.f(e,n,t(1,i))}:function(e,n,i){return e[n]=i,e}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l=o(i(35)),t=o(i(33)),r=o(i(32));function o(e){return e&&e.__esModule?e:{default:e}}n.default=Object.keys(t.default).map(function(e){return new l.default(e,t.default[e],r.default[e])}).reduce(function(e,n){return e[n.name]=n,e},{})},function(e,n,i){var l=i(20)("keys"),t=i(11);e.exports=function(e){return l[e]||(l[e]=t(e))}},function(e,n){e.exports={}},function(e,n){var i=0,l=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++i+l).toString(36))}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,n){var i=Math.ceil,l=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?l:i)(e)}},function(e,n,i){var l;
2 +/*!
3 + Copyright (c) 2016 Jed Watson.
4 + Licensed under the MIT License (MIT), see
5 + http://jedwatson.github.io/classnames
6 +*/
7 +/*!
8 + Copyright (c) 2016 Jed Watson.
9 + Licensed under the MIT License (MIT), see
10 + http://jedwatson.github.io/classnames
11 +*/
12 +!function(){"use strict";var i=function(){function e(){}function n(e,n){for(var i=n.length,l=0;l<i;++l)t(e,n[l])}e.prototype=Object.create(null);var i={}.hasOwnProperty;var l=/\s+/;function t(e,t){if(t){var r=typeof t;"string"===r?function(e,n){for(var i=n.split(l),t=i.length,r=0;r<t;++r)e[i[r]]=!0}(e,t):Array.isArray(t)?n(e,t):"object"===r?function(e,n){for(var l in n)i.call(n,l)&&(e[l]=!!n[l])}(e,t):"number"===r&&function(e,n){e[n]=!0}(e,t)}}return function(){for(var i=arguments.length,l=Array(i),t=0;t<i;t++)l[t]=arguments[t];var r=new e;n(r,l);var o=[];for(var a in r)r[a]&&o.push(a);return o.join(" ")}}();void 0!==e&&e.exports?e.exports=i:void 0===(l=function(){return i}.apply(n,[]))||(e.exports=l)}()},function(e,n,i){var l=i(14);e.exports=function(e){return Object(l(e))}},function(e,n,i){var l=i(6).f,t=i(3),r=i(0)("toStringTag");e.exports=function(e,n,i){e&&!t(e=i?e:e.prototype,r)&&l(e,r,{configurable:!0,value:n})}},function(e,n){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,n,i){var l=i(2),t=i(1),r=t["__core-js_shared__"]||(t["__core-js_shared__"]={});(e.exports=function(e,n){return r[e]||(r[e]=void 0!==n?n:{})})("versions",[]).push({version:l.version,mode:i(29)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(e,n,i){var l=i(15),t=Math.min;e.exports=function(e){return e>0?t(l(e),9007199254740991):0}},function(e,n){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,n,i){var l=i(48),t=i(14);e.exports=function(e){return l(t(e))}},function(e,n,i){var l=i(54);e.exports=function(e,n,i){if(l(e),void 0===n)return e;switch(i){case 1:return function(i){return e.call(n,i)};case 2:return function(i,l){return e.call(n,i,l)};case 3:return function(i,l,t){return e.call(n,i,l,t)}}return function(){return e.apply(n,arguments)}}},function(e,n,i){var l=i(1),t=i(7),r=i(3),o=i(11)("src"),a=Function.toString,c=(""+a).split("toString");i(2).inspectSource=function(e){return a.call(e)},(e.exports=function(e,n,i,a){var y="function"==typeof i;y&&(r(i,"name")||t(i,"name",n)),e[n]!==i&&(y&&(r(i,o)||t(i,o,e[n]?""+e[n]:c.join(String(n)))),e===l?e[n]=i:a?e[n]?e[n]=i:t(e,n,i):(delete e[n],t(e,n,i)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[o]||a.call(this)})},function(e,n,i){var l=i(13),t=i(1).document,r=l(t)&&l(t.createElement);e.exports=function(e){return r?t.createElement(e):{}}},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n,i){var l=i(1),t=i(2),r=i(7),o=i(25),a=i(24),c=function(e,n,i){var y,p,h,x,s=e&c.F,u=e&c.G,d=e&c.S,f=e&c.P,v=e&c.B,g=u?l:d?l[n]||(l[n]={}):(l[n]||{}).prototype,m=u?t:t[n]||(t[n]={}),M=m.prototype||(m.prototype={});for(y in u&&(i=n),i)h=((p=!s&&g&&void 0!==g[y])?g:i)[y],x=v&&p?a(h,l):f&&"function"==typeof h?a(Function.call,h):h,g&&o(g,y,h,e&c.U),m[y]!=h&&r(m,y,x),f&&M[y]!=h&&(M[y]=h)};l.core=t,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,n){e.exports=!1},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var i=arguments[n];for(var l in i)Object.prototype.hasOwnProperty.call(i,l)&&(e[l]=i[l])}return e},t=o(i(16)),r=o(i(8));function o(e){return e&&e.__esModule?e:{default:e}}n.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if("undefined"==typeof document)throw new Error("`feather.replace()` only works in a browser environment.");var n=document.querySelectorAll("[data-feather]");Array.from(n).forEach(function(n){return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=function(e){return Array.from(e.attributes).reduce(function(e,n){return e[n.name]=n.value,e},{})}(e),o=i["data-feather"];delete i["data-feather"];var a=r.default[o].toSvg(l({},n,i,{class:(0,t.default)(n.class,i.class)})),c=(new DOMParser).parseFromString(a,"image/svg+xml").querySelector("svg");e.parentNode.replaceChild(c,e)}(n,e)})}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l,t=i(8),r=(l=t)&&l.__esModule?l:{default:l};n.default=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead."),!e)throw new Error("The required `key` (icon name) parameter is missing.");if(!r.default[e])throw new Error("No icon matching '"+e+"'. See the complete list of icons at https://feathericons.com");return r.default[e].toSvg(n)}},function(e){e.exports={activity:["pulse","health","action","motion"],airplay:["stream","cast","mirroring"],"alert-circle":["warning"],"alert-octagon":["warning"],"alert-triangle":["warning"],"at-sign":["mention"],award:["achievement","badge"],aperture:["camera","photo"],bell:["alarm","notification"],"bell-off":["alarm","notification","silent"],bluetooth:["wireless"],"book-open":["read"],book:["read","dictionary","booklet","magazine"],bookmark:["read","clip","marker","tag"],briefcase:["work","bag","baggage","folder"],clipboard:["copy"],clock:["time","watch","alarm"],"cloud-drizzle":["weather","shower"],"cloud-lightning":["weather","bolt"],"cloud-rain":["weather"],"cloud-snow":["weather","blizzard"],cloud:["weather"],codepen:["logo"],coffee:["drink","cup","mug","tea","cafe","hot","beverage"],command:["keyboard","cmd"],compass:["navigation","safari","travel"],copy:["clone","duplicate"],"corner-down-left":["arrow"],"corner-down-right":["arrow"],"corner-left-down":["arrow"],"corner-left-up":["arrow"],"corner-right-down":["arrow"],"corner-right-up":["arrow"],"corner-up-left":["arrow"],"corner-up-right":["arrow"],"credit-card":["purchase","payment","cc"],crop:["photo","image"],crosshair:["aim","target"],database:["storage"],delete:["remove"],disc:["album","cd","dvd","music"],"dollar-sign":["currency","money","payment"],droplet:["water"],edit:["pencil","change"],"edit-2":["pencil","change"],"edit-3":["pencil","change"],eye:["view","watch"],"eye-off":["view","watch"],"external-link":["outbound"],facebook:["logo"],"fast-forward":["music"],film:["movie","video"],"folder-minus":["directory"],"folder-plus":["directory"],folder:["directory"],gift:["present","box","birthday","party"],"git-branch":["code","version control"],"git-commit":["code","version control"],"git-merge":["code","version control"],"git-pull-request":["code","version control"],github:["logo","version control"],gitlab:["logo","version control"],global:["world","browser","language","translate"],"hard-drive":["computer","server"],hash:["hashtag","number","pound"],headphones:["music","audio"],heart:["like","love"],"help-circle":["question mark"],home:["house"],image:["picture"],inbox:["email"],instagram:["logo","camera"],"life-bouy":["help","life ring","support"],linkedin:["logo"],lock:["security","password"],"log-in":["sign in","arrow"],"log-out":["sign out","arrow"],mail:["email"],"map-pin":["location","navigation","travel","marker"],map:["location","navigation","travel"],maximize:["fullscreen"],"maximize-2":["fullscreen","arrows"],menu:["bars","navigation","hamburger"],"message-circle":["comment","chat"],"message-square":["comment","chat"],"mic-off":["record"],mic:["record"],minimize:["exit fullscreen"],"minimize-2":["exit fullscreen","arrows"],monitor:["tv"],moon:["dark","night"],"more-horizontal":["ellipsis"],"more-vertical":["ellipsis"],move:["arrows"],navigation:["location","travel"],"navigation-2":["location","travel"],octagon:["stop"],package:["box"],paperclip:["attachment"],pause:["music","stop"],"pause-circle":["music","stop"],play:["music","start"],"play-circle":["music","start"],plus:["add","new"],"plus-circle":["add","new"],"plus-square":["add","new"],pocket:["logo","save"],power:["on","off"],radio:["signal"],rewind:["music"],rss:["feed","subscribe"],save:["floppy disk"],send:["message","mail","paper airplane"],settings:["cog","edit","gear","preferences"],shield:["security"],"shield-off":["security"],"shopping-bag":["ecommerce","cart","purchase","store"],"shopping-cart":["ecommerce","cart","purchase","store"],shuffle:["music"],"skip-back":["music"],"skip-forward":["music"],slash:["ban","no"],sliders:["settings","controls"],speaker:["music"],star:["bookmark","favorite","like"],sun:["brightness","weather","light"],sunrise:["weather"],sunset:["weather"],tag:["label"],target:["bullseye"],terminal:["code","command line"],"thumbs-down":["dislike","bad"],"thumbs-up":["like","good"],"toggle-left":["on","off","switch"],"toggle-right":["on","off","switch"],trash:["garbage","delete","remove"],"trash-2":["garbage","delete","remove"],triangle:["delta"],truck:["delivery","van","shipping"],twitter:["logo"],umbrella:["rain","weather"],"video-off":["camera","movie","film"],video:["camera","movie","film"],voicemail:["phone"],volume:["music","sound","mute"],"volume-1":["music","sound"],"volume-2":["music","sound"],"volume-x":["music","sound","mute"],watch:["clock","time"],wind:["weather","air"],"x-circle":["cancel","close","delete","remove","times"],"x-square":["cancel","close","delete","remove","times"],x:["cancel","close","delete","remove","times"],youtube:["logo","video","play"],"zap-off":["flash","camera","lightning"],zap:["flash","camera","lightning"]}},function(e){e.exports={activity:'<polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline>',airplay:'<path d="M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1"></path><polygon points="12 15 17 21 7 21 12 15"></polygon>',"alert-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12" y2="16"></line>',"alert-octagon":'<polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12" y2="16"></line>',"alert-triangle":'<path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12" y2="17"></line>',"align-center":'<line x1="18" y1="10" x2="6" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="18" y1="18" x2="6" y2="18"></line>',"align-justify":'<line x1="21" y1="10" x2="3" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="21" y1="18" x2="3" y2="18"></line>',"align-left":'<line x1="17" y1="10" x2="3" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="17" y1="18" x2="3" y2="18"></line>',"align-right":'<line x1="21" y1="10" x2="7" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="21" y1="18" x2="7" y2="18"></line>',anchor:'<circle cx="12" cy="5" r="3"></circle><line x1="12" y1="22" x2="12" y2="8"></line><path d="M5 12H2a10 10 0 0 0 20 0h-3"></path>',aperture:'<circle cx="12" cy="12" r="10"></circle><line x1="14.31" y1="8" x2="20.05" y2="17.94"></line><line x1="9.69" y1="8" x2="21.17" y2="8"></line><line x1="7.38" y1="12" x2="13.12" y2="2.06"></line><line x1="9.69" y1="16" x2="3.95" y2="6.06"></line><line x1="14.31" y1="16" x2="2.83" y2="16"></line><line x1="16.62" y1="12" x2="10.88" y2="21.94"></line>',archive:'<polyline points="21 8 21 21 3 21 3 8"></polyline><rect x="1" y="3" width="22" height="5"></rect><line x1="10" y1="12" x2="14" y2="12"></line>',"arrow-down-circle":'<circle cx="12" cy="12" r="10"></circle><polyline points="8 12 12 16 16 12"></polyline><line x1="12" y1="8" x2="12" y2="16"></line>',"arrow-down-left":'<line x1="17" y1="7" x2="7" y2="17"></line><polyline points="17 17 7 17 7 7"></polyline>',"arrow-down-right":'<line x1="7" y1="7" x2="17" y2="17"></line><polyline points="17 7 17 17 7 17"></polyline>',"arrow-down":'<line x1="12" y1="5" x2="12" y2="19"></line><polyline points="19 12 12 19 5 12"></polyline>',"arrow-left-circle":'<circle cx="12" cy="12" r="10"></circle><polyline points="12 8 8 12 12 16"></polyline><line x1="16" y1="12" x2="8" y2="12"></line>',"arrow-left":'<line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline>',"arrow-right-circle":'<circle cx="12" cy="12" r="10"></circle><polyline points="12 16 16 12 12 8"></polyline><line x1="8" y1="12" x2="16" y2="12"></line>',"arrow-right":'<line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline>',"arrow-up-circle":'<circle cx="12" cy="12" r="10"></circle><polyline points="16 12 12 8 8 12"></polyline><line x1="12" y1="16" x2="12" y2="8"></line>',"arrow-up-left":'<line x1="17" y1="17" x2="7" y2="7"></line><polyline points="7 17 7 7 17 7"></polyline>',"arrow-up-right":'<line x1="7" y1="17" x2="17" y2="7"></line><polyline points="7 7 17 7 17 17"></polyline>',"arrow-up":'<line x1="12" y1="19" x2="12" y2="5"></line><polyline points="5 12 12 5 19 12"></polyline>',"at-sign":'<circle cx="12" cy="12" r="4"></circle><path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94"></path>',award:'<circle cx="12" cy="8" r="7"></circle><polyline points="8.21 13.89 7 23 12 20 17 23 15.79 13.88"></polyline>',"bar-chart-2":'<line x1="18" y1="20" x2="18" y2="10"></line><line x1="12" y1="20" x2="12" y2="4"></line><line x1="6" y1="20" x2="6" y2="14"></line>',"bar-chart":'<line x1="12" y1="20" x2="12" y2="10"></line><line x1="18" y1="20" x2="18" y2="4"></line><line x1="6" y1="20" x2="6" y2="16"></line>',"battery-charging":'<path d="M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19"></path><line x1="23" y1="13" x2="23" y2="11"></line><polyline points="11 6 7 12 13 12 9 18"></polyline>',battery:'<rect x="1" y="6" width="18" height="12" rx="2" ry="2"></rect><line x1="23" y1="13" x2="23" y2="11"></line>',"bell-off":'<path d="M8.56 2.9A7 7 0 0 1 19 9v4m-2 4H2a3 3 0 0 0 3-3V9a7 7 0 0 1 .78-3.22M13.73 21a2 2 0 0 1-3.46 0"></path><line x1="1" y1="1" x2="23" y2="23"></line>',bell:'<path d="M22 17H2a3 3 0 0 0 3-3V9a7 7 0 0 1 14 0v5a3 3 0 0 0 3 3zm-8.27 4a2 2 0 0 1-3.46 0"></path>',bluetooth:'<polyline points="6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5"></polyline>',bold:'<path d="M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"></path><path d="M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"></path>',"book-open":'<path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path>',book:'<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path>',bookmark:'<path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"></path>',box:'<path d="M12.89 1.45l8 4A2 2 0 0 1 22 7.24v9.53a2 2 0 0 1-1.11 1.79l-8 4a2 2 0 0 1-1.79 0l-8-4a2 2 0 0 1-1.1-1.8V7.24a2 2 0 0 1 1.11-1.79l8-4a2 2 0 0 1 1.78 0z"></path><polyline points="2.32 6.16 12 11 21.68 6.16"></polyline><line x1="12" y1="22.76" x2="12" y2="11"></line>',briefcase:'<rect x="2" y="7" width="20" height="14" rx="2" ry="2"></rect><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path>',calendar:'<rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>',"camera-off":'<line x1="1" y1="1" x2="23" y2="23"></line><path d="M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56"></path>',camera:'<path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"></path><circle cx="12" cy="13" r="4"></circle>',cast:'<path d="M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6"></path><line x1="2" y1="20" x2="2" y2="20"></line>',"check-circle":'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline>',"check-square":'<polyline points="9 11 12 14 22 4"></polyline><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"></path>',check:'<polyline points="20 6 9 17 4 12"></polyline>',"chevron-down":'<polyline points="6 9 12 15 18 9"></polyline>',"chevron-left":'<polyline points="15 18 9 12 15 6"></polyline>',"chevron-right":'<polyline points="9 18 15 12 9 6"></polyline>',"chevron-up":'<polyline points="18 15 12 9 6 15"></polyline>',"chevrons-down":'<polyline points="7 13 12 18 17 13"></polyline><polyline points="7 6 12 11 17 6"></polyline>',"chevrons-left":'<polyline points="11 17 6 12 11 7"></polyline><polyline points="18 17 13 12 18 7"></polyline>',"chevrons-right":'<polyline points="13 17 18 12 13 7"></polyline><polyline points="6 17 11 12 6 7"></polyline>',"chevrons-up":'<polyline points="17 11 12 6 7 11"></polyline><polyline points="17 18 12 13 7 18"></polyline>',chrome:'<circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="4"></circle><line x1="21.17" y1="8" x2="12" y2="8"></line><line x1="3.95" y1="6.06" x2="8.54" y2="14"></line><line x1="10.88" y1="21.94" x2="15.46" y2="14"></line>',circle:'<circle cx="12" cy="12" r="10"></circle>',clipboard:'<path 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"></path><rect x="8" y="2" width="8" height="4" rx="1" ry="1"></rect>',clock:'<circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>',"cloud-drizzle":'<line x1="8" y1="19" x2="8" y2="21"></line><line x1="8" y1="13" x2="8" y2="15"></line><line x1="16" y1="19" x2="16" y2="21"></line><line x1="16" y1="13" x2="16" y2="15"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="12" y1="15" x2="12" y2="17"></line><path d="M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25"></path>',"cloud-lightning":'<path d="M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9"></path><polyline points="13 11 9 17 15 17 11 23"></polyline>',"cloud-off":'<path d="M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3"></path><line x1="1" y1="1" x2="23" y2="23"></line>',"cloud-rain":'<line x1="16" y1="13" x2="16" y2="21"></line><line x1="8" y1="13" x2="8" y2="21"></line><line x1="12" y1="15" x2="12" y2="23"></line><path d="M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25"></path>',"cloud-snow":'<path d="M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25"></path><line x1="8" y1="16" x2="8" y2="16"></line><line x1="8" y1="20" x2="8" y2="20"></line><line x1="12" y1="18" x2="12" y2="18"></line><line x1="12" y1="22" x2="12" y2="22"></line><line x1="16" y1="16" x2="16" y2="16"></line><line x1="16" y1="20" x2="16" y2="20"></line>',cloud:'<path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"></path>',code:'<polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline>',codepen:'<polygon points="12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2"></polygon><line x1="12" y1="22" x2="12" y2="15.5"></line><polyline points="22 8.5 12 15.5 2 8.5"></polyline><polyline points="2 15.5 12 8.5 22 15.5"></polyline><line x1="12" y1="2" x2="12" y2="8.5"></line>',coffee:'<path d="M18 8h1a4 4 0 0 1 0 8h-1"></path><path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"></path><line x1="6" y1="1" x2="6" y2="4"></line><line x1="10" y1="1" x2="10" y2="4"></line><line x1="14" y1="1" x2="14" y2="4"></line>',command:'<path d="M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z"></path>',compass:'<circle cx="12" cy="12" r="10"></circle><polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"></polygon>',copy:'<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>',"corner-down-left":'<polyline points="9 10 4 15 9 20"></polyline><path d="M20 4v7a4 4 0 0 1-4 4H4"></path>',"corner-down-right":'<polyline points="15 10 20 15 15 20"></polyline><path d="M4 4v7a4 4 0 0 0 4 4h12"></path>',"corner-left-down":'<polyline points="14 15 9 20 4 15"></polyline><path d="M20 4h-7a4 4 0 0 0-4 4v12"></path>',"corner-left-up":'<polyline points="14 9 9 4 4 9"></polyline><path d="M20 20h-7a4 4 0 0 1-4-4V4"></path>',"corner-right-down":'<polyline points="10 15 15 20 20 15"></polyline><path d="M4 4h7a4 4 0 0 1 4 4v12"></path>',"corner-right-up":'<polyline points="10 9 15 4 20 9"></polyline><path d="M4 20h7a4 4 0 0 0 4-4V4"></path>',"corner-up-left":'<polyline points="9 14 4 9 9 4"></polyline><path d="M20 20v-7a4 4 0 0 0-4-4H4"></path>',"corner-up-right":'<polyline points="15 14 20 9 15 4"></polyline><path d="M4 20v-7a4 4 0 0 1 4-4h12"></path>',cpu:'<rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line>',"credit-card":'<rect x="1" y="4" width="22" height="16" rx="2" ry="2"></rect><line x1="1" y1="10" x2="23" y2="10"></line>',crop:'<path d="M6.13 1L6 16a2 2 0 0 0 2 2h15"></path><path d="M1 6.13L16 6a2 2 0 0 1 2 2v15"></path>',crosshair:'<circle cx="12" cy="12" r="10"></circle><line x1="22" y1="12" x2="18" y2="12"></line><line x1="6" y1="12" x2="2" y2="12"></line><line x1="12" y1="6" x2="12" y2="2"></line><line x1="12" y1="22" x2="12" y2="18"></line>',database:'<ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"></path><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"></path>',delete:'<path d="M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z"></path><line x1="18" y1="9" x2="12" y2="15"></line><line x1="12" y1="9" x2="18" y2="15"></line>',disc:'<circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="3"></circle>',"dollar-sign":'<line x1="12" y1="1" x2="12" y2="23"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path>',"download-cloud":'<polyline points="8 17 12 21 16 17"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29"></path>',download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line>',droplet:'<path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"></path>',"edit-2":'<polygon points="16 3 21 8 8 21 3 21 3 16 16 3"></polygon>',"edit-3":'<polygon points="14 2 18 6 7 17 3 17 3 13 14 2"></polygon><line x1="3" y1="22" x2="21" y2="22"></line>',edit:'<path d="M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34"></path><polygon points="18 2 22 6 12 16 8 16 8 12 18 2"></polygon>',"external-link":'<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>',"eye-off":'<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path><line x1="1" y1="1" x2="23" y2="23"></line>',eye:'<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle>',facebook:'<path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path>',"fast-forward":'<polygon points="13 19 22 12 13 5 13 19"></polygon><polygon points="2 19 11 12 2 5 2 19"></polygon>',feather:'<path d="M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z"></path><line x1="16" y1="8" x2="2" y2="22"></line><line x1="17.5" y1="15" x2="9" y2="15"></line>',"file-minus":'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="9" y1="15" x2="15" y2="15"></line>',"file-plus":'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="12" y1="18" x2="12" y2="12"></line><line x1="9" y1="15" x2="15" y2="15"></line>',"file-text":'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline>',file:'<path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>',film:'<rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"></rect><line x1="7" y1="2" x2="7" y2="22"></line><line x1="17" y1="2" x2="17" y2="22"></line><line x1="2" y1="12" x2="22" y2="12"></line><line x1="2" y1="7" x2="7" y2="7"></line><line x1="2" y1="17" x2="7" y2="17"></line><line x1="17" y1="17" x2="22" y2="17"></line><line x1="17" y1="7" x2="22" y2="7"></line>',filter:'<polygon points="22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"></polygon>',flag:'<path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"></path><line x1="4" y1="22" x2="4" y2="15"></line>',"folder-minus":'<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path><line x1="9" y1="14" x2="15" y2="14"></line>',"folder-plus":'<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path><line x1="12" y1="11" x2="12" y2="17"></line><line x1="9" y1="14" x2="15" y2="14"></line>',folder:'<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path>',gift:'<polyline points="20 12 20 22 4 22 4 12"></polyline><rect x="2" y="7" width="20" height="5"></rect><line x1="12" y1="22" x2="12" y2="7"></line><path d="M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z"></path><path d="M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z"></path>',"git-branch":'<line x1="6" y1="3" x2="6" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path>',"git-commit":'<circle cx="12" cy="12" r="4"></circle><line x1="1.05" y1="12" x2="7" y2="12"></line><line x1="17.01" y1="12" x2="22.96" y2="12"></line>',"git-merge":'<circle cx="18" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><path d="M6 21V9a9 9 0 0 0 9 9"></path>',"git-pull-request":'<circle cx="18" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><path d="M13 6h3a2 2 0 0 1 2 2v7"></path><line x1="6" y1="9" x2="6" y2="21"></line>',github:'<path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path>',gitlab:'<path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"></path>',globe:'<circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path>',grid:'<rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect>',"hard-drive":'<line x1="22" y1="12" x2="2" y2="12"></line><path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path><line x1="6" y1="16" x2="6" y2="16"></line><line x1="10" y1="16" x2="10" y2="16"></line>',hash:'<line x1="4" y1="9" x2="20" y2="9"></line><line x1="4" y1="15" x2="20" y2="15"></line><line x1="10" y1="3" x2="8" y2="21"></line><line x1="16" y1="3" x2="14" y2="21"></line>',headphones:'<path d="M3 18v-6a9 9 0 0 1 18 0v6"></path><path d="M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z"></path>',heart:'<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>',"help-circle":'<circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12" y2="17"></line>',home:'<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline>',image:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline>',inbox:'<polyline points="22 12 16 12 14 15 10 15 8 12 2 12"></polyline><path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path>',info:'<circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12" y2="8"></line>',instagram:'<rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.5" y2="6.5"></line>',italic:'<line x1="19" y1="4" x2="10" y2="4"></line><line x1="14" y1="20" x2="5" y2="20"></line><line x1="15" y1="4" x2="9" y2="20"></line>',layers:'<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline>',layout:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line>',"life-buoy":'<circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="4"></circle><line x1="4.93" y1="4.93" x2="9.17" y2="9.17"></line><line x1="14.83" y1="14.83" x2="19.07" y2="19.07"></line><line x1="14.83" y1="9.17" x2="19.07" y2="4.93"></line><line x1="14.83" y1="9.17" x2="18.36" y2="5.64"></line><line x1="4.93" y1="19.07" x2="9.17" y2="14.83"></line>',"link-2":'<path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path><line x1="8" y1="12" x2="16" y2="12"></line>',link:'<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>',linkedin:'<path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle>',list:'<line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3" y2="6"></line><line x1="3" y1="12" x2="3" y2="12"></line><line x1="3" y1="18" x2="3" y2="18"></line>',loader:'<line x1="12" y1="2" x2="12" y2="6"></line><line x1="12" y1="18" x2="12" y2="22"></line><line x1="4.93" y1="4.93" x2="7.76" y2="7.76"></line><line x1="16.24" y1="16.24" x2="19.07" y2="19.07"></line><line x1="2" y1="12" x2="6" y2="12"></line><line x1="18" y1="12" x2="22" y2="12"></line><line x1="4.93" y1="19.07" x2="7.76" y2="16.24"></line><line x1="16.24" y1="7.76" x2="19.07" y2="4.93"></line>',lock:'<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path>',"log-in":'<path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"></path><polyline points="10 17 15 12 10 7"></polyline><line x1="15" y1="12" x2="3" y2="12"></line>',"log-out":'<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path><polyline points="16 17 21 12 16 7"></polyline><line x1="21" y1="12" x2="9" y2="12"></line>',mail:'<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>',"map-pin":'<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle>',map:'<polygon points="1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6"></polygon><line x1="8" y1="2" x2="8" y2="18"></line><line x1="16" y1="6" x2="16" y2="22"></line>',"maximize-2":'<polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" y1="3" x2="14" y2="10"></line><line x1="3" y1="21" x2="10" y2="14"></line>',maximize:'<path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"></path>',menu:'<line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>',"message-circle":'<path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path>',"message-square":'<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>',"mic-off":'<line x1="1" y1="1" x2="23" y2="23"></line><path d="M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6"></path><path d="M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23"></path><line x1="12" y1="19" x2="12" y2="23"></line><line x1="8" y1="23" x2="16" y2="23"></line>',mic:'<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"></path><path d="M19 10v2a7 7 0 0 1-14 0v-2"></path><line x1="12" y1="19" x2="12" y2="23"></line><line x1="8" y1="23" x2="16" y2="23"></line>',"minimize-2":'<polyline points="4 14 10 14 10 20"></polyline><polyline points="20 10 14 10 14 4"></polyline><line x1="14" y1="10" x2="21" y2="3"></line><line x1="3" y1="21" x2="10" y2="14"></line>',minimize:'<path d="M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"></path>',"minus-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="8" y1="12" x2="16" y2="12"></line>',"minus-square":'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="8" y1="12" x2="16" y2="12"></line>',minus:'<line x1="5" y1="12" x2="19" y2="12"></line>',monitor:'<rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect><line x1="8" y1="21" x2="16" y2="21"></line><line x1="12" y1="17" x2="12" y2="21"></line>',moon:'<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>',"more-horizontal":'<circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle>',"more-vertical":'<circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="19" r="1"></circle>',move:'<polyline points="5 9 2 12 5 15"></polyline><polyline points="9 5 12 2 15 5"></polyline><polyline points="15 19 12 22 9 19"></polyline><polyline points="19 9 22 12 19 15"></polyline><line x1="2" y1="12" x2="22" y2="12"></line><line x1="12" y1="2" x2="12" y2="22"></line>',music:'<path d="M9 17H5a2 2 0 0 0-2 2 2 2 0 0 0 2 2h2a2 2 0 0 0 2-2zm12-2h-4a2 2 0 0 0-2 2 2 2 0 0 0 2 2h2a2 2 0 0 0 2-2z"></path><polyline points="9 17 9 5 21 3 21 15"></polyline>',"navigation-2":'<polygon points="12 2 19 21 12 17 5 21 12 2"></polygon>',navigation:'<polygon points="3 11 22 2 13 21 11 13 3 11"></polygon>',octagon:'<polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon>',package:'<path d="M12.89 1.45l8 4A2 2 0 0 1 22 7.24v9.53a2 2 0 0 1-1.11 1.79l-8 4a2 2 0 0 1-1.79 0l-8-4a2 2 0 0 1-1.1-1.8V7.24a2 2 0 0 1 1.11-1.79l8-4a2 2 0 0 1 1.78 0z"></path><polyline points="2.32 6.16 12 11 21.68 6.16"></polyline><line x1="12" y1="22.76" x2="12" y2="11"></line><line x1="7" y1="3.5" x2="17" y2="8.5"></line>',paperclip:'<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path>',"pause-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="10" y1="15" x2="10" y2="9"></line><line x1="14" y1="15" x2="14" y2="9"></line>',pause:'<rect x="6" y="4" width="4" height="16"></rect><rect x="14" y="4" width="4" height="16"></rect>',percent:'<line x1="19" y1="5" x2="5" y2="19"></line><circle cx="6.5" cy="6.5" r="2.5"></circle><circle cx="17.5" cy="17.5" r="2.5"></circle>',"phone-call":'<path d="M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"phone-forwarded":'<polyline points="19 1 23 5 19 9"></polyline><line x1="15" y1="5" x2="23" y2="5"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"phone-incoming":'<polyline points="16 2 16 8 22 8"></polyline><line x1="23" y1="1" x2="16" y2="8"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"phone-missed":'<line x1="23" y1="1" x2="17" y2="7"></line><line x1="17" y1="1" x2="23" y2="7"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"phone-off":'<path d="M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91"></path><line x1="23" y1="1" x2="1" y2="23"></line>',"phone-outgoing":'<polyline points="23 7 23 1 17 1"></polyline><line x1="16" y1="8" x2="23" y2="1"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',phone:'<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"pie-chart":'<path d="M21.21 15.89A10 10 0 1 1 8 2.83"></path><path d="M22 12A10 10 0 0 0 12 2v10z"></path>',"play-circle":'<circle cx="12" cy="12" r="10"></circle><polygon points="10 8 16 12 10 16 10 8"></polygon>',play:'<polygon points="5 3 19 12 5 21 5 3"></polygon>',"plus-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line>',"plus-square":'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line>',plus:'<line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line>',pocket:'<path d="M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z"></path><polyline points="8 10 12 14 16 10"></polyline>',power:'<path d="M18.36 6.64a9 9 0 1 1-12.73 0"></path><line x1="12" y1="2" x2="12" y2="12"></line>',printer:'<polyline points="6 9 6 2 18 2 18 9"></polyline><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path><rect x="6" y="14" width="12" height="8"></rect>',radio:'<circle cx="12" cy="12" r="2"></circle><path d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"></path>',"refresh-ccw":'<polyline points="1 4 1 10 7 10"></polyline><polyline points="23 20 23 14 17 14"></polyline><path d="M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15"></path>',"refresh-cw":'<polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path>',repeat:'<polyline points="17 1 21 5 17 9"></polyline><path d="M3 11V9a4 4 0 0 1 4-4h14"></path><polyline points="7 23 3 19 7 15"></polyline><path d="M21 13v2a4 4 0 0 1-4 4H3"></path>',rewind:'<polygon points="11 19 2 12 11 5 11 19"></polygon><polygon points="22 19 13 12 22 5 22 19"></polygon>',"rotate-ccw":'<polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path>',"rotate-cw":'<polyline points="23 4 23 10 17 10"></polyline><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"></path>',rss:'<path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle>',save:'<path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"></path><polyline points="17 21 17 13 7 13 7 21"></polyline><polyline points="7 3 7 8 15 8"></polyline>',scissors:'<circle cx="6" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><line x1="20" y1="4" x2="8.12" y2="15.88"></line><line x1="14.47" y1="14.48" x2="20" y2="20"></line><line x1="8.12" y1="8.12" x2="12" y2="12"></line>',search:'<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>',send:'<line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon>',server:'<rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6" y2="6"></line><line x1="6" y1="18" x2="6" y2="18"></line>',settings:'<circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path>',"share-2":'<circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line>',share:'<path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"></path><polyline points="16 6 12 2 8 6"></polyline><line x1="12" y1="2" x2="12" y2="15"></line>',"shield-off":'<path d="M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18"></path><path d="M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38"></path><line x1="1" y1="1" x2="23" y2="23"></line>',shield:'<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path>',"shopping-bag":'<path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path><line x1="3" y1="6" x2="21" y2="6"></line><path d="M16 10a4 4 0 0 1-8 0"></path>',"shopping-cart":'<circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path>',shuffle:'<polyline points="16 3 21 3 21 8"></polyline><line x1="4" y1="20" x2="21" y2="3"></line><polyline points="21 16 21 21 16 21"></polyline><line x1="15" y1="15" x2="21" y2="21"></line><line x1="4" y1="4" x2="9" y2="9"></line>',sidebar:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line>',"skip-back":'<polygon points="19 20 9 12 19 4 19 20"></polygon><line x1="5" y1="19" x2="5" y2="5"></line>',"skip-forward":'<polygon points="5 4 15 12 5 20 5 4"></polygon><line x1="19" y1="5" x2="19" y2="19"></line>',slack:'<path d="M22.08 9C19.81 1.41 16.54-.35 9 1.92S-.35 7.46 1.92 15 7.46 24.35 15 22.08 24.35 16.54 22.08 9z"></path><line x1="12.57" y1="5.99" x2="16.15" y2="16.39"></line><line x1="7.85" y1="7.61" x2="11.43" y2="18.01"></line><line x1="16.39" y1="7.85" x2="5.99" y2="11.43"></line><line x1="18.01" y1="12.57" x2="7.61" y2="16.15"></line>',slash:'<circle cx="12" cy="12" r="10"></circle><line x1="4.93" y1="4.93" x2="19.07" y2="19.07"></line>',sliders:'<line x1="4" y1="21" x2="4" y2="14"></line><line x1="4" y1="10" x2="4" y2="3"></line><line x1="12" y1="21" x2="12" y2="12"></line><line x1="12" y1="8" x2="12" y2="3"></line><line x1="20" y1="21" x2="20" y2="16"></line><line x1="20" y1="12" x2="20" y2="3"></line><line x1="1" y1="14" x2="7" y2="14"></line><line x1="9" y1="8" x2="15" y2="8"></line><line x1="17" y1="16" x2="23" y2="16"></line>',smartphone:'<rect x="5" y="2" width="14" height="20" rx="2" ry="2"></rect><line x1="12" y1="18" x2="12" y2="18"></line>',speaker:'<rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><circle cx="12" cy="14" r="4"></circle><line x1="12" y1="6" x2="12" y2="6"></line>',square:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>',star:'<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>',"stop-circle":'<circle cx="12" cy="12" r="10"></circle><rect x="9" y="9" width="6" height="6"></rect>',sun:'<circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>',sunrise:'<path d="M17 18a5 5 0 0 0-10 0"></path><line x1="12" y1="2" x2="12" y2="9"></line><line x1="4.22" y1="10.22" x2="5.64" y2="11.64"></line><line x1="1" y1="18" x2="3" y2="18"></line><line x1="21" y1="18" x2="23" y2="18"></line><line x1="18.36" y1="11.64" x2="19.78" y2="10.22"></line><line x1="23" y1="22" x2="1" y2="22"></line><polyline points="8 6 12 2 16 6"></polyline>',sunset:'<path d="M17 18a5 5 0 0 0-10 0"></path><line x1="12" y1="9" x2="12" y2="2"></line><line x1="4.22" y1="10.22" x2="5.64" y2="11.64"></line><line x1="1" y1="18" x2="3" y2="18"></line><line x1="21" y1="18" x2="23" y2="18"></line><line x1="18.36" y1="11.64" x2="19.78" y2="10.22"></line><line x1="23" y1="22" x2="1" y2="22"></line><polyline points="16 5 12 9 8 5"></polyline>',tablet:'<rect x="4" y="2" width="16" height="20" rx="2" ry="2" transform="rotate(180 12 12)"></rect><line x1="12" y1="18" x2="12" y2="18"></line>',tag:'<path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7" y2="7"></line>',target:'<circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="6"></circle><circle cx="12" cy="12" r="2"></circle>',terminal:'<polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line>',thermometer:'<path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"></path>',"thumbs-down":'<path d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17"></path>',"thumbs-up":'<path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"></path>',"toggle-left":'<rect x="1" y="5" width="22" height="14" rx="7" ry="7"></rect><circle cx="8" cy="12" r="3"></circle>',"toggle-right":'<rect x="1" y="5" width="22" height="14" rx="7" ry="7"></rect><circle cx="16" cy="12" r="3"></circle>',"trash-2":'<polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line>',trash:'<polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path>',trello:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><rect x="7" y="7" width="3" height="9"></rect><rect x="14" y="7" width="3" height="5"></rect>',"trending-down":'<polyline points="23 18 13.5 8.5 8.5 13.5 1 6"></polyline><polyline points="17 18 23 18 23 12"></polyline>',"trending-up":'<polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline><polyline points="17 6 23 6 23 12"></polyline>',triangle:'<path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path>',truck:'<rect x="1" y="3" width="15" height="13"></rect><polygon points="16 8 20 8 23 11 23 16 16 16 16 8"></polygon><circle cx="5.5" cy="18.5" r="2.5"></circle><circle cx="18.5" cy="18.5" r="2.5"></circle>',tv:'<rect x="2" y="7" width="20" height="15" rx="2" ry="2"></rect><polyline points="17 2 12 7 7 2"></polyline>',twitter:'<path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path>',type:'<polyline points="4 7 4 4 20 4 20 7"></polyline><line x1="9" y1="20" x2="15" y2="20"></line><line x1="12" y1="4" x2="12" y2="20"></line>',umbrella:'<path d="M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7"></path>',underline:'<path d="M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3"></path><line x1="4" y1="21" x2="20" y2="21"></line>',unlock:'<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 9.9-1"></path>',"upload-cloud":'<polyline points="16 16 12 12 8 16"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3"></path><polyline points="16 16 12 12 8 16"></polyline>',upload:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line>',"user-check":'<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><polyline points="17 11 19 13 23 9"></polyline>',"user-minus":'<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="23" y1="11" x2="17" y2="11"></line>',"user-plus":'<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="20" y1="8" x2="20" y2="14"></line><line x1="23" y1="11" x2="17" y2="11"></line>',"user-x":'<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="18" y1="8" x2="23" y2="13"></line><line x1="23" y1="8" x2="18" y2="13"></line>',user:'<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle>',users:'<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path>',"video-off":'<path d="M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10"></path><line x1="1" y1="1" x2="23" y2="23"></line>',video:'<polygon points="23 7 16 12 23 17 23 7"></polygon><rect x="1" y="5" width="15" height="14" rx="2" ry="2"></rect>',voicemail:'<circle cx="5.5" cy="11.5" r="4.5"></circle><circle cx="18.5" cy="11.5" r="4.5"></circle><line x1="5.5" y1="16" x2="18.5" y2="16"></line>',"volume-1":'<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M15.54 8.46a5 5 0 0 1 0 7.07"></path>',"volume-2":'<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07"></path>',"volume-x":'<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><line x1="23" y1="9" x2="17" y2="15"></line><line x1="17" y1="9" x2="23" y2="15"></line>',volume:'<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon>',watch:'<circle cx="12" cy="12" r="7"></circle><polyline points="12 9 12 12 13.5 13.5"></polyline><path d="M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83"></path>',"wifi-off":'<line x1="1" y1="1" x2="23" y2="23"></line><path d="M16.72 11.06A10.94 10.94 0 0 1 19 12.55"></path><path d="M5 12.55a10.94 10.94 0 0 1 5.17-2.39"></path><path d="M10.71 5.05A16 16 0 0 1 22.58 9"></path><path d="M1.42 9a15.91 15.91 0 0 1 4.7-2.88"></path><path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path><line x1="12" y1="20" x2="12" y2="20"></line>',wifi:'<path d="M5 12.55a11 11 0 0 1 14.08 0"></path><path d="M1.42 9a16 16 0 0 1 21.16 0"></path><path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path><line x1="12" y1="20" x2="12" y2="20"></line>',wind:'<path d="M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2"></path>',"x-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line>',"x-square":'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="9" x2="15" y2="15"></line><line x1="15" y1="9" x2="9" y2="15"></line>',x:'<line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line>',youtube:'<path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon>',"zap-off":'<polyline points="12.41 6.75 13 2 10.57 4.92"></polyline><polyline points="18.57 12.91 21 10 15.66 10"></polyline><polyline points="8 8 3 14 12 14 11 22 16 16"></polyline><line x1="1" y1="1" x2="23" y2="23"></line>',zap:'<polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon>',"zoom-in":'<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line>',"zoom-out":'<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="8" y1="11" x2="14" y2="11"></line>'}},function(e){e.exports={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var i=arguments[n];for(var l in i)Object.prototype.hasOwnProperty.call(i,l)&&(e[l]=i[l])}return e},t=function(){function e(e,n){for(var i=0;i<n.length;i++){var l=n[i];l.enumerable=l.enumerable||!1,l.configurable=!0,"value"in l&&(l.writable=!0),Object.defineProperty(e,l.key,l)}}return function(n,i,l){return i&&e(n.prototype,i),l&&e(n,l),n}}(),r=a(i(16)),o=a(i(34));function a(e){return e&&e.__esModule?e:{default:e}}var c=function(){function e(n,i){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.name=n,this.contents=i,this.tags=t,this.attrs=l({},o.default,{class:"feather feather-"+n})}return t(e,[{key:"toSvg",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return"<svg "+function(e){return Object.keys(e).map(function(n){return n+'="'+e[n]+'"'}).join(" ")}(l({},this.attrs,e,{class:(0,r.default)(this.attrs.class,e.class)}))+">"+this.contents+"</svg>"}},{key:"toString",value:function(){return this.contents}}]),e}();n.default=c},function(e,n,i){"use strict";var l=o(i(8)),t=o(i(31)),r=o(i(30));function o(e){return e&&e.__esModule?e:{default:e}}e.exports={icons:l.default,toSvg:t.default,replace:r.default}},function(e,n,i){var l=i(0)("iterator"),t=!1;try{var r=[7][l]();r.return=function(){t=!0},Array.from(r,function(){throw 2})}catch(e){}e.exports=function(e,n){if(!n&&!t)return!1;var i=!1;try{var r=[7],o=r[l]();o.next=function(){return{done:i=!0}},r[l]=function(){return o},e(r)}catch(e){}return i}},function(e,n,i){var l=i(22),t=i(0)("toStringTag"),r="Arguments"==l(function(){return arguments}());e.exports=function(e){var n,i,o;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,n){try{return e[n]}catch(e){}}(n=Object(e),t))?i:r?l(n):"Object"==(o=l(n))&&"function"==typeof n.callee?"Arguments":o}},function(e,n,i){var l=i(38),t=i(0)("iterator"),r=i(10);e.exports=i(2).getIteratorMethod=function(e){if(void 0!=e)return e[t]||e["@@iterator"]||r[l(e)]}},function(e,n,i){"use strict";var l=i(6),t=i(12);e.exports=function(e,n,i){n in e?l.f(e,n,t(0,i)):e[n]=i}},function(e,n,i){var l=i(10),t=i(0)("iterator"),r=Array.prototype;e.exports=function(e){return void 0!==e&&(l.Array===e||r[t]===e)}},function(e,n,i){var l=i(5);e.exports=function(e,n,i,t){try{return t?n(l(i)[0],i[1]):n(i)}catch(n){var r=e.return;throw void 0!==r&&l(r.call(e)),n}}},function(e,n,i){"use strict";var l=i(24),t=i(28),r=i(17),o=i(42),a=i(41),c=i(21),y=i(40),p=i(39);t(t.S+t.F*!i(37)(function(e){Array.from(e)}),"Array",{from:function(e){var n,i,t,h,x=r(e),s="function"==typeof this?this:Array,u=arguments.length,d=u>1?arguments[1]:void 0,f=void 0!==d,v=0,g=p(x);if(f&&(d=l(d,u>2?arguments[2]:void 0,2)),void 0==g||s==Array&&a(g))for(i=new s(n=c(x.length));n>v;v++)y(i,v,f?d(x[v],v):x[v]);else for(h=g.call(x),i=new s;!(t=h.next()).done;v++)y(i,v,f?o(h,d,[t.value,v],!0):t.value);return i.length=v,i}})},function(e,n,i){var l=i(3),t=i(17),r=i(9)("IE_PROTO"),o=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=t(e),l(e,r)?e[r]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?o:null}},function(e,n,i){var l=i(1).document;e.exports=l&&l.documentElement},function(e,n,i){var l=i(15),t=Math.max,r=Math.min;e.exports=function(e,n){return(e=l(e))<0?t(e+n,0):r(e,n)}},function(e,n,i){var l=i(23),t=i(21),r=i(46);e.exports=function(e){return function(n,i,o){var a,c=l(n),y=t(c.length),p=r(o,y);if(e&&i!=i){for(;y>p;)if((a=c[p++])!=a)return!0}else for(;y>p;p++)if((e||p in c)&&c[p]===i)return e||p||0;return!e&&-1}}},function(e,n,i){var l=i(22);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==l(e)?e.split(""):Object(e)}},function(e,n,i){var l=i(3),t=i(23),r=i(47)(!1),o=i(9)("IE_PROTO");e.exports=function(e,n){var i,a=t(e),c=0,y=[];for(i in a)i!=o&&l(a,i)&&y.push(i);for(;n.length>c;)l(a,i=n[c++])&&(~r(y,i)||y.push(i));return y}},function(e,n,i){var l=i(49),t=i(19);e.exports=Object.keys||function(e){return l(e,t)}},function(e,n,i){var l=i(6),t=i(5),r=i(50);e.exports=i(4)?Object.defineProperties:function(e,n){t(e);for(var i,o=r(n),a=o.length,c=0;a>c;)l.f(e,i=o[c++],n[i]);return e}},function(e,n,i){var l=i(5),t=i(51),r=i(19),o=i(9)("IE_PROTO"),a=function(){},c=function(){var e,n=i(26)("iframe"),l=r.length;for(n.style.display="none",i(45).appendChild(n),n.src="javascript:",(e=n.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),c=e.F;l--;)delete c.prototype[r[l]];return c()};e.exports=Object.create||function(e,n){var i;return null!==e?(a.prototype=l(e),i=new a,a.prototype=null,i[o]=e):i=c(),void 0===n?i:t(i,n)}},function(e,n,i){"use strict";var l=i(52),t=i(12),r=i(18),o={};i(7)(o,i(0)("iterator"),function(){return this}),e.exports=function(e,n,i){e.prototype=l(o,{next:t(1,i)}),r(e,n+" Iterator")}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,i){var l=i(13);e.exports=function(e,n){if(!l(e))return e;var i,t;if(n&&"function"==typeof(i=e.toString)&&!l(t=i.call(e)))return t;if("function"==typeof(i=e.valueOf)&&!l(t=i.call(e)))return t;if(!n&&"function"==typeof(i=e.toString)&&!l(t=i.call(e)))return t;throw TypeError("Can't convert object to primitive value")}},function(e,n,i){e.exports=!i(4)&&!i(27)(function(){return 7!=Object.defineProperty(i(26)("div"),"a",{get:function(){return 7}}).a})},function(e,n,i){"use strict";var l=i(29),t=i(28),r=i(25),o=i(7),a=i(10),c=i(53),y=i(18),p=i(44),h=i(0)("iterator"),x=!([].keys&&"next"in[].keys()),s=function(){return this};e.exports=function(e,n,i,u,d,f,v){c(i,n,u);var g,m,M,w=function(e){if(!x&&e in k)return k[e];switch(e){case"keys":case"values":return function(){return new i(this,e)}}return function(){return new i(this,e)}},b=n+" Iterator",z="values"==d,A=!1,k=e.prototype,H=k[h]||k["@@iterator"]||d&&k[d],V=H||w(d),O=d?z?w("entries"):V:void 0,_="Array"==n&&k.entries||H;if(_&&(M=p(_.call(new e)))!==Object.prototype&&M.next&&(y(M,b,!0),l||"function"==typeof M[h]||o(M,h,s)),z&&H&&"values"!==H.name&&(A=!0,V=function(){return H.call(this)}),l&&!v||!x&&!A&&k[h]||o(k,h,V),a[n]=V,a[b]=s,d)if(g={values:z?V:w("values"),keys:f?V:w("keys"),entries:O},v)for(m in g)m in k||r(k,m,g[m]);else t(t.P+t.F*(x||A),n,g);return g}},function(e,n,i){var l=i(15),t=i(14);e.exports=function(e){return function(n,i){var r,o,a=String(t(n)),c=l(i),y=a.length;return c<0||c>=y?e?"":void 0:(r=a.charCodeAt(c))<55296||r>56319||c+1===y||(o=a.charCodeAt(c+1))<56320||o>57343?e?a.charAt(c):r:e?a.slice(c,c+2):o-56320+(r-55296<<10)+65536}}},function(e,n,i){"use strict";var l=i(58)(!0);i(57)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,n=this._t,i=this._i;return i>=n.length?{value:void 0,done:!0}:(e=l(n,i),this._i+=e.length,{value:e,done:!1})})},function(e,n,i){i(59),i(43),e.exports=i(2).Array.from},function(e,n,i){i(60),e.exports=i(36)}])});
1 +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
2 +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
1 +$(document).ready(function(){ProcessHash();});
2 +$(window).on('hashchange',function(){ProcessHash();});
3 +
4 +$("body").on('dblclick', 'tr.single-file', function(e) {
5 + location.hash = `#!/files/${e.currentTarget.id}`;
6 +});
7 +
8 +const ProcessHash = () => {
9 + $('#menu-me').removeClass('active');
10 + $('#menu-public').removeClass('active');
11 + $('#menu-starred').removeClass('active');
12 + $('#menu-trash').removeClass('active');
13 + $('#folder_name').text('');
14 + $('#folder_id').hide();
15 + $('#menu-top-me').hide();
16 + $('#menu-top-group').hide();
17 + $('#menu-top-trash').hide();
18 + $('#main-1').hide();
19 + $('#main-2').hide();
20 + $('#login').hide();
21 + $('#register').hide();
22 + $('html').removeClass('login-html');
23 + $('body').removeClass('login-body');
24 + $('body').removeClass('text-center');
25 + if (location.hash === '#!/login') {
26 + $('html').addClass('login-html');
27 + $('body').addClass('login-body');
28 + $('body').addClass('text-center')
29 + $('#login').show();
30 + } else if (location.hash === '#!/register') {
31 + $('html').addClass('login-html');
32 + $('body').addClass('login-body');
33 + $('body').addClass('text-center')
34 + $('#register').show();
35 + } else if (location.hash === '#!/logout') {
36 + localStorage.clear();
37 + location.hash = '#!/login';
38 + } else if (location.hash === '#!/settings') {
39 + // TODO
40 + ProcessMain();
41 + $('#main-1').show();
42 + $('#main-2').show();
43 + } else if (location.hash === '#!/public') {
44 + ProcessMain();
45 + $('#main-1').show();
46 + $('#main-2').show();
47 + GetPublicList();
48 + $('#folder_name').text('공유한 파일');
49 + $('#menu-public').show();
50 + $('#file_list').show();
51 + } else if (location.hash === '#!/starred') {
52 + ProcessMain();
53 + $('#main-1').show();
54 + $('#main-2').show();
55 + GetStarredList();
56 + $('#folder_name').text('중요 문서함');
57 + $('#menu-starred').show();
58 + $('#file_list').show();
59 + } else if (location.hash === '#!/trash') {
60 + ProcessMain();
61 + $('#main-1').show();
62 + $('#main-2').show();
63 + GetTrashList();
64 + $('#folder_name').text('휴지통');
65 + $('#menu-top-trash').show();
66 + $('#file_list').show();
67 + } else if (location.hash === '#!/add-group') {
68 + ProcessMain();
69 + $('#main-1').show();
70 + $('#main-2').show();
71 + $('#add_group').show();
72 + } else if (location.hash.indexOf('#!/groups/') > -1) {
73 + ProcessMain();
74 + $('#main-1').show();
75 + $('#main-2').show();
76 + $('#manage_group').show();
77 + } else if (location.hash.indexOf('#!/files/') > -1) {
78 + ProcessMain();
79 + $('#main-1').show();
80 + $('#main-2').show();
81 + GetFileLis(location.hash.substring(9));
82 + $('#file_list').show();
83 + } else {
84 + const token = localStorage.getItem('token');
85 + if (token === null) {
86 + location.hash = '#!/login';
87 + } else {
88 + location.hash = `#!/files/${localStorage.getItem('root_folder')}`;
89 + }
90 + }
91 + feather.replace();
92 +}
93 +
94 +const GetFileLis = (file_id) => {
95 + $('#file_items').empty();
96 + $.ajax({
97 + url: `https://khubox-api.khunet.net/files/${file_id}`,
98 + headers: {
99 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
100 + },
101 + type: 'GET',
102 + success: (response) => {
103 + if (response.result === true) {
104 + if (response.data.parent_id === null) {
105 + const current_id = location.hash.substring(9);
106 + const me_root_folder = localStorage.getItem('root_folder');
107 +
108 + if (current_id === me_root_folder) {
109 + $('#menu-top-me').show();
110 + $('#menu-me').addClass('active');
111 + $('#folder_name').text('내 파일');
112 + $('#folder_id').show();
113 + $('#folder_id').text(`폴더ID : ${me_root_folder}`);
114 + } else {
115 + // 그룹
116 + $('#menu-top-group').show();
117 + }
118 + } else {
119 + $('#menu-top-me').show();
120 + $('#folder_name').text(response.data.name);
121 + $('#folder_id').show();
122 + $('#folder_id').text(`폴더ID : ${response.data.id}`);
123 + $('#file_items').append(`
124 + <tr class="single-file" id="${response.data.parent_id}">
125 + <td>
126 + <span data-feather="folder"></span>
127 + ..
128 + </td>
129 + <td></td>
130 + <td></td>
131 + <td></td>
132 + </tr>
133 + `);
134 + }
135 +
136 + if (response.data.download_url) {
137 + location.href = response.data.download_url;
138 + return;
139 + }
140 +
141 + const s_folders = response.files.filter(x => x.type === 'folder');
142 + const s_files = response.files.filter(x => x.type === 'file');
143 + for (const single of s_folders) {
144 + $('#file_items').append(`
145 + <tr class="single-file" id="${single.id}">
146 + <td>
147 + <span data-feather="folder"></span>
148 + ${single.name}
149 + ${(single.is_starred === 1)?'<span data-feather="star"></span>':''}
150 + ${(single.is_public === 1)?'<span data-feather="share-2"></span>':''}
151 + </td>
152 + <td>${single.created_at}</td>
153 + <td></td>
154 + <td>
155 + <div class="dropdown">
156 + <span class="badge badge-primary px-2" type="button" data-toggle="dropdown" data-boundary="viewport">
157 + <span data-feather="more-horizontal"></span>
158 + </span>
159 + <div class="dropdown-menu dropdown-menu-right">
160 + ${(single.is_public === 0)?
161 + '<a class="dropdown-item" onclick="GoShare(\''+single.id+'\', true);">공유</a>':
162 + '<a class="dropdown-item" onclick="GoShareLink(\''+single.id+'\');">공유 링크 확인</a>' +
163 + '<a class="dropdown-item" onclick="GoShare(\''+single.id+'\', false);">공유 해제</a>'}
164 + <a class="dropdown-item" onclick="GoMove('${single.id}');">이동</a>
165 + ${(single.is_starred === 0)?
166 + '<a class="dropdown-item" onclick="GoStar(\''+single.id+'\', true);">중요 문서함에 추가</a>':
167 + '<a class="dropdown-item" onclick="GoStar(\''+single.id+'\', false);">중요 문서함에서 삭제</a>'}
168 + <a class="dropdown-item" onclick="GoRename('${single.id}', '${single.name}');">이름 바꾸기</a>
169 + <a class="dropdown-item" onclick="GoDelete('${single.id}');">삭제</a>
170 + </div>
171 + </div>
172 + </td>
173 + </tr>
174 + `);
175 + }
176 + for (const single of s_files) {
177 + $('#file_items').append(`
178 + <tr>
179 + <td>
180 + <span data-feather="file-text"></span>
181 + ${single.name}
182 + ${(single.is_starred === 1)?'<span data-feather="star"></span>':''}
183 + ${(single.is_public === 1)?'<span data-feather="share-2"></span>':''}
184 + </td>
185 + <td>${single.created_at}</td>
186 + <td>${single.size}</td>
187 + <td>
188 + <div class="dropdown">
189 + <span class="badge badge-primary px-2" type="button" data-toggle="dropdown" data-boundary="viewport">
190 + <span data-feather="more-horizontal"></span>
191 + </span>
192 + <div class="dropdown-menu dropdown-menu-right">
193 + <a class="dropdown-item" onclick="GoDownload('${single.id}');">다운로드</a>
194 + ${(single.is_public === 0)?
195 + '<a class="dropdown-item" onclick="GoShare(\''+single.id+'\', true);">공유</a>':
196 + '<a class="dropdown-item" onclick="GoShareLink(\''+single.id+'\');">공유 링크 확인</a>' +
197 + '<a class="dropdown-item" onclick="GoShare(\''+single.id+'\', false);">공유 해제</a>'}
198 + <a class="dropdown-item" onclick="GoMove('${single.id}');">이동</a>
199 + ${(single.is_starred === 0)?
200 + '<a class="dropdown-item" onclick="GoStar(\''+single.id+'\', true);">중요 문서함에 추가</a>':
201 + '<a class="dropdown-item" onclick="GoStar(\''+single.id+'\', false);">중요 문서함에서 삭제</a>'}
202 + <a class="dropdown-item" onclick="GoRename('${single.id}', '${single.name}');">이름 바꾸기</a>
203 + <a class="dropdown-item" onclick="GoCopy('${single.id}');">사본 만들기</a>
204 + <a class="dropdown-item" onclick="GoDelete('${single.id}');">삭제</a>
205 + </div>
206 + </div>
207 + </td>
208 + </tr>
209 + `);
210 + }
211 + feather.replace();
212 + } else {
213 + alert(response.error);
214 + }
215 + }
216 + });
217 +};
218 +const GetTrashList = () => {
219 + $('#file_items').empty();
220 + $.ajax({
221 + url: `https://khubox-api.khunet.net/files?is_trashed=true`,
222 + headers: {
223 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
224 + },
225 + type: 'GET',
226 + success: (response) => {
227 + if (response.result === true) {
228 + $('#menu-trash').addClass('active');
229 + for (const single of response.data) {
230 + $('#file_items').append(`
231 + <tr>
232 + <td>
233 + <span data-feather="${(single.type==='folder')?'folder':'file'}"></span>
234 + ${single.name}
235 + ${(single.is_starred === 1)?'<span data-feather="star"></span>':''}
236 + ${(single.is_public === 1)?'<span data-feather="share-2"></span>':''}
237 + </td>
238 + <td>${single.created_at}</td>
239 + <td></td>
240 + <td>
241 + <div class="dropdown">
242 + <span class="badge badge-primary px-2" type="button" data-toggle="dropdown" data-boundary="viewport">
243 + <span data-feather="more-horizontal"></span>
244 + </span>
245 + <div class="dropdown-menu dropdown-menu-right">
246 + <a class="dropdown-item" onclick="GoRecover('${single.id}');">복원</a>
247 + </div>
248 + </div>
249 + </td>
250 + </tr>
251 + `);
252 + }
253 + feather.replace();
254 + } else {
255 + alert(response.error);
256 + }
257 + }
258 + });
259 +};
260 +const GetPublicList = () => {
261 + $('#file_items').empty();
262 + $.ajax({
263 + url: `https://khubox-api.khunet.net/files?is_public=true`,
264 + headers: {
265 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
266 + },
267 + type: 'GET',
268 + success: (response) => {
269 + if (response.result === true) {
270 + $('#menu-public').addClass('active');
271 + for (const single of response.data) {
272 + $('#file_items').append(`
273 + <tr class="single-file" id="${(single.type==='folder')?single.id:single.parent_id}">
274 + <td>
275 + <span data-feather="${(single.type==='folder')?'folder':'file-text'}"></span>
276 + ${single.name}
277 + ${(single.is_starred === 1)?'<span data-feather="star"></span>':''}
278 + ${(single.is_public === 1)?'<span data-feather="share-2"></span>':''}
279 + </td>
280 + <td>${single.created_at}</td>
281 + <td>${(single.type==='file')?single.size:''}</td>
282 + <td>
283 + <div class="dropdown">
284 + <span class="badge badge-primary px-2" type="button" data-toggle="dropdown" data-boundary="viewport">
285 + <span data-feather="more-horizontal"></span>
286 + </span>
287 + <div class="dropdown-menu dropdown-menu-right">
288 + ${(single.type==='file')?
289 + '<a class="dropdown-item" onclick="GoDownload(\''+single.id+'\');">다운로드</a>':''}
290 + ${(single.is_public === 0)?
291 + '<a class="dropdown-item" onclick="GoShare(\''+single.id+'\', true);">공유</a>':
292 + '<a class="dropdown-item" onclick="GoShareLink(\''+single.id+'\');">공유 링크 확인</a>' +
293 + '<a class="dropdown-item" onclick="GoShare(\''+single.id+'\', false);">공유 해제</a>'}
294 + </div>
295 + </div>
296 + </td>
297 + </tr>
298 + `);
299 + }
300 + feather.replace();
301 + } else {
302 + alert(response.error);
303 + }
304 + }
305 + });
306 +};
307 +const GetStarredList = () => {
308 + $('#file_items').empty();
309 + $.ajax({
310 + url: `https://khubox-api.khunet.net/files?is_starred=true`,
311 + headers: {
312 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
313 + },
314 + type: 'GET',
315 + success: (response) => {
316 + if (response.result === true) {
317 + $('#menu-starred').addClass('active');
318 + for (const single of response.data) {
319 + $('#file_items').append(`
320 + <tr class="single-file" id="${(single.type==='folder')?single.id:single.parent_id}">
321 + <td>
322 + <span data-feather="${(single.type==='folder')?'folder':'file-text'}"></span>
323 + ${single.name}
324 + ${(single.is_starred === 1)?'<span data-feather="star"></span>':''}
325 + ${(single.is_public === 1)?'<span data-feather="share-2"></span>':''}
326 + </td>
327 + <td>${single.created_at}</td>
328 + <td>${(single.type==='file')?single.size:''}</td>
329 + <td>
330 + <div class="dropdown">
331 + <span class="badge badge-primary px-2" type="button" data-toggle="dropdown" data-boundary="viewport">
332 + <span data-feather="more-horizontal"></span>
333 + </span>
334 + <div class="dropdown-menu dropdown-menu-right">
335 + ${(single.type==='file')?
336 + '<a class="dropdown-item" onclick="GoDownload(\''+single.id+'\');">다운로드</a>':''}
337 + ${(single.is_starred === 0)?
338 + '<a class="dropdown-item" onclick="GoStar(\''+single.id+'\', true);">중요 문서함에 추가</a>':
339 + '<a class="dropdown-item" onclick="GoStar(\''+single.id+'\', false);">중요 문서함에서 삭제</a>'}
340 + </div>
341 + </div>
342 + </td>
343 + </tr>
344 + `);
345 + }
346 + feather.replace();
347 + } else {
348 + alert(response.error);
349 + }
350 + }
351 + });
352 +};
353 +
354 +const GoShareLink = (file_id) => {
355 + $('#share-pop').append(`
356 + <div class="alert alert-info alert-dismissible fade show" role="alert">
357 + ${`http://localhost:63342/front/#!/files/${file_id}`}
358 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
359 + <span aria-hidden="true">&times;</span>
360 + </button>
361 + </div>
362 + `);
363 +}
364 +const GoShare = (file_id, isBool) => {
365 + const post_data = {
366 + is_public: isBool,
367 + };
368 + $.ajax({
369 + url: `https://khubox-api.khunet.net/files/${file_id}`,
370 + headers: {
371 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
372 + },
373 + type: 'PATCH',
374 + data: JSON.stringify(post_data),
375 + success: (response) => {
376 + if (response.result === true) {
377 + location.reload();
378 + } else {
379 + alert(response.error)
380 + }
381 + }
382 + });
383 +}
384 +const GoMove = (file_id) => {
385 + $('#new-move-id').val(file_id);
386 + $('#modal-move').modal({
387 + show: true,
388 + });
389 +}
390 +const GoStar = (file_id, isBool) => {
391 + const post_data = {
392 + is_starred: isBool,
393 + };
394 + $.ajax({
395 + url: `https://khubox-api.khunet.net/files/${file_id}`,
396 + headers: {
397 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
398 + },
399 + type: 'PATCH',
400 + data: JSON.stringify(post_data),
401 + success: (response) => {
402 + if (response.result === true) {
403 + location.reload();
404 + } else {
405 + alert(response.error)
406 + }
407 + }
408 + });
409 +}
410 +const GoRename = (file_id, original_name) => {
411 + $('#new-rename').val(original_name);
412 + $('#new-rename-id').val(file_id);
413 + $('#modal-rename').modal({
414 + show: true,
415 + });
416 +}
417 +const GoCopy = (file_id) => {
418 + $.ajax({
419 + url: `https://khubox-api.khunet.net/files/${file_id}/copy`,
420 + headers: {
421 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
422 + },
423 + type: 'POST',
424 + success: (response) => {
425 + if (response.result === true) {
426 + location.reload();
427 + } else {
428 + alert(response.error)
429 + }
430 + }
431 + });
432 +}
433 +const GoDownload = (file_id) => {
434 + $.ajax({
435 + url: `https://khubox-api.khunet.net/files/${file_id}`,
436 + headers: {
437 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
438 + },
439 + type: 'GET',
440 + success: (response) => {
441 + if (response.result === true) {
442 + window.open(response.data.download_url);
443 + } else {
444 + alert(response.error);
445 + }
446 + }
447 + });
448 +}
449 +const GoDelete = (file_id) => {
450 + const post_data = {
451 + is_trashed: true,
452 + };
453 + $.ajax({
454 + url: `https://khubox-api.khunet.net/files/${file_id}`,
455 + headers: {
456 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
457 + },
458 + type: 'PATCH',
459 + data: JSON.stringify(post_data),
460 + success: (response) => {
461 + if (response.result === true) {
462 + location.reload();
463 + } else {
464 + alert(response.error)
465 + }
466 + }
467 + });
468 +}
469 +const Rename = () => {
470 + const file_id = $('#new-rename-id').val();
471 + const name = $('#new-rename').val();
472 + const post_data = {
473 + name: name,
474 + };
475 + $.ajax({
476 + url: `https://khubox-api.khunet.net/files/${file_id}`,
477 + headers: {
478 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
479 + },
480 + type: 'PATCH',
481 + data: JSON.stringify(post_data),
482 + success: (response) => {
483 + if (response.result === true) {
484 + location.reload();
485 + } else {
486 + alert(response.error)
487 + }
488 + }
489 + });
490 +};
491 +const Move = () => {
492 + const file_id = $('#new-move-id').val();
493 + const parent_id = $('#new-folder').val();
494 + const post_data = {
495 + parent_id: parent_id,
496 + };
497 + $.ajax({
498 + url: `https://khubox-api.khunet.net/files/${file_id}`,
499 + headers: {
500 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
501 + },
502 + type: 'PATCH',
503 + data: JSON.stringify(post_data),
504 + success: (response) => {
505 + if (response.result === true) {
506 + location.reload();
507 + } else {
508 + alert(response.error)
509 + }
510 + }
511 + });
512 +};
513 +const GoNewFolder = () => {
514 + $('#modal-new-folder').modal({
515 + show: true,
516 + });
517 +};
518 +const CreateFolder = () => {
519 + const parent_id = location.hash.substring(9);
520 + const name = $('#new-folder-name').val();
521 + if (name === '') {
522 + alert('폴더명을 입력해주세요.');
523 + return;
524 + }
525 + const post_data = {
526 + parent_id: parent_id,
527 + type: 'folder',
528 + name: name,
529 + };
530 + $.ajax({
531 + url: `https://khubox-api.khunet.net/files`,
532 + headers: {
533 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
534 + },
535 + type: 'POST',
536 + data: JSON.stringify(post_data),
537 + success: (response) => {
538 + if (response.result === true) {
539 + location.reload();
540 + } else {
541 + alert(response.error)
542 + }
543 + }
544 + });
545 +}
546 +const GoUpload = () => {
547 + $('#upload-file').trigger('click');
548 +};
549 +$('#upload-file').change(() => {
550 + const theFormFile = $('#upload-file').get()[0].files[0];
551 + if (theFormFile === undefined)
552 + return;
553 +
554 + const parent_id = location.hash.substring(9);
555 + const name = theFormFile.name;
556 +
557 + const post_data = {
558 + parent_id: parent_id,
559 + type: 'file',
560 + name: name,
561 + };
562 + $.ajax({
563 + url: `https://khubox-api.khunet.net/files`,
564 + headers: {
565 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
566 + },
567 + type: 'POST',
568 + data: JSON.stringify(post_data),
569 + success: (response) => {
570 + if (response.result === true) {
571 + RealUpload(response.upload_url);
572 + } else {
573 + alert(response.error)
574 + }
575 + }
576 + });
577 +});
578 +const RealUpload = (upload_url) => {
579 + const theFormFile = $('#upload-file').get()[0].files[0];
580 + if (theFormFile === undefined)
581 + return;
582 + $('#upload-progress').show();
583 + $.ajax({
584 + xhr: function() {
585 + var xhr = new window.XMLHttpRequest();
586 + xhr.upload.addEventListener("progress", function(evt) {
587 + if (evt.lengthComputable) {
588 + var percentComplete = evt.loaded / evt.total;
589 + percentComplete = parseInt(percentComplete * 100);
590 + console.log(percentComplete);
591 + $('#progress-val').css('width', `${percentComplete}%`);
592 + if (percentComplete === 100) {
593 + location.reload();
594 + }
595 + }
596 + }, false);
597 + return xhr;
598 + },
599 + type: 'PUT',
600 + url: upload_url,
601 + contentType: 'application/octet-stream',
602 + processData: false,
603 + data: theFormFile,
604 + success: (response) => {
605 +
606 + }
607 + });
608 +};
609 +const ProcessMain = () => {
610 + $('#file_list').hide();
611 + $('#add_group').hide();
612 + $('#manage_group').hide();
613 + $('#file_items').empty();
614 + $('#group_list').empty();
615 + const groups = JSON.parse(localStorage.getItem('groups'));
616 + for (const group of groups) {
617 + if (location.hash.substring(9)===group.root_folder) {
618 + $('#folder_name').text(group.name);
619 + $('#folder_id').show();
620 + $('#folder_id').text(`폴더ID : ${group.root_folder}`);
621 + $('#btn-go-group').attr('onclick', `GoGroup('${group.id}');`);
622 + }
623 + $('#group_list').append(`
624 + <li class="nav-item">
625 + <a class="nav-link${(location.hash.substring(9)===group.root_folder)?' active':''}" href="#!/files/${group.root_folder}">
626 + <span data-feather="hard-drive"></span>
627 + ${group.name}
628 + </a>
629 + </li>
630 + `);
631 + }
632 +};
633 +const doLogin = () => {
634 + const post_data = {
635 + email: $('#login-email').val(),
636 + password: $('#login-password').val(),
637 + };
638 + $.ajax({
639 + url: 'https://khubox-api.khunet.net/users/login',
640 + type: 'POST',
641 + data: JSON.stringify(post_data),
642 + success: (response) => {
643 + if (response.result === true) {
644 + localStorage.setItem('token', response.token);
645 + getRootFolder();
646 + } else {
647 + alert(response.error)
648 + }
649 + }
650 + });
651 +};
652 +const getRootFolder = () => {
653 + $.ajax({
654 + url: 'https://khubox-api.khunet.net/users/me',
655 + headers: {
656 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
657 + },
658 + type: 'GET',
659 + success: (response) => {
660 + if (response.result === true) {
661 + localStorage.setItem('root_folder', response.data.root_folder);
662 + getGroups();
663 + } else {
664 + alert(response.error);
665 + }
666 + }
667 + });
668 +};
669 +const getGroups = () => {
670 + $.ajax({
671 + url: 'https://khubox-api.khunet.net/groups/me',
672 + headers: {
673 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
674 + },
675 + type: 'GET',
676 + success: (response) => {
677 + if (response.result === true) {
678 + localStorage.setItem('groups', JSON.stringify(response.data));
679 + location.hash = '#';
680 + } else {
681 + alert(response.error);
682 + }
683 + }
684 + });
685 +};
686 +const doRegister = () => {
687 + if ($('#register-password').val() !== $('#register-password_re').val()) {
688 + alert('비밀번호가 일치하지 않습니다.');
689 + return;
690 + }
691 + const post_data = {
692 + email: $('#register-email').val(),
693 + password: $('#register-password').val(),
694 + name: $('#register-name').val(),
695 + };
696 + $.ajax({
697 + url: 'https://khubox-api.khunet.net/users',
698 + type: 'POST',
699 + data: JSON.stringify(post_data),
700 + success: (response) => {
701 + if (response.result === true) {
702 + alert('성공적으로 가입되었습니다.');
703 + location.hash = '#';
704 + } else {
705 + alert(response.error)
706 + }
707 + }
708 + });
709 +};
710 +const GoGroup = (group_id) => {
711 + location.href = `#!/groups/${group_id}`;
712 +};
713 +const GoRecover = (file_id) => {
714 + const post_data = {
715 + is_trashed: false,
716 + };
717 + $.ajax({
718 + url: `https://khubox-api.khunet.net/files/${file_id}`,
719 + headers: {
720 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
721 + },
722 + type: 'PATCH',
723 + data: JSON.stringify(post_data),
724 + success: (response) => {
725 + if (response.result === true) {
726 + location.reload();
727 + } else {
728 + alert(response.error)
729 + }
730 + }
731 + });
732 +};
733 +const EmptyTrash = () => {
734 + $.ajax({
735 + url: `https://khubox-api.khunet.net/files/trash`,
736 + headers: {
737 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
738 + },
739 + type: 'DELETE',
740 + success: (response) => {
741 + if (response.result === true) {
742 + location.reload();
743 + } else {
744 + alert(response.error)
745 + }
746 + }
747 + });
748 +};
749 +const GroupJoin = () => {
750 + const invite_code = $('#input-invite-code').val();
751 + $.ajax({
752 + url: `https://khubox-api.khunet.net/groups/invite/${invite_code}`,
753 + headers: {
754 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
755 + },
756 + type: 'POST',
757 + success: (response) => {
758 + if (response.result === true) {
759 + alert('성공적으로 그룹에 가입되었습니다.');
760 + getGroups();
761 + } else {
762 + alert(response.error)
763 + }
764 + }
765 + });
766 +};
767 +const GroupCreate = () => {
768 + const post_data = {
769 + name: $('#input-group-name').val(),
770 + };
771 + $.ajax({
772 + url: `https://khubox-api.khunet.net/groups`,
773 + headers: {
774 + 'Authorization': `Bearer ${localStorage.getItem('token')}`,
775 + },
776 + type: 'POST',
777 + data: JSON.stringify(post_data),
778 + success: (response) => {
779 + if (response.result === true) {
780 + alert('성공적으로 그룹에 생성되었습니다.');
781 + getGroups();
782 + } else {
783 + alert(response.error)
784 + }
785 + }
786 + });
787 +};
This diff could not be displayed because it is too large.