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 | ... | ... |
khubox-front/index.html
0 → 100644
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">×</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">×</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">×</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> |
khubox-front/jsconfig.json
deleted
100644 → 0
khubox-front/package.json
deleted
100644 → 0
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 | -} |
khubox-front/public/_redirects
deleted
100644 → 0
1 | -/* /index.html 200 | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
khubox-front/public/favicon.ico
deleted
100644 → 0
No preview for this file type
khubox-front/public/images/auth.jpg
deleted
100644 → 0
854 KB
112 KB
140 KB
153 KB
121 KB
103 KB
158 KB
153 KB
143 KB
97.2 KB
68.3 KB
130 KB
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> |
59.7 KB
6.13 KB
3.38 KB
9.7 KB
4.78 KB
6.28 KB
6.68 KB
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 |
khubox-front/public/index.html
deleted
100755 → 0
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> |
khubox-front/public/manifest.json
deleted
100755 → 0
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 | -} |
khubox-front/src/App.js
deleted
100644 → 0
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 | -} |
khubox-front/src/Routes.js
deleted
100644 → 0
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 | -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 |
khubox-front/src/components/index.js
deleted
100644 → 0
khubox-front/src/helpers/chartjs.js
deleted
100644 → 0
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 | -}; |
khubox-front/src/helpers/index.js
deleted
100644 → 0
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 | -} |
khubox-front/src/icons/index.js
deleted
100644 → 0
khubox-front/src/index.js
deleted
100755 → 0
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 | - ©{' '} | ||
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 | -export { default } from './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 | -export { default } from './Profile'; |
khubox-front/src/layouts/Main/components/Sidebar/components/SidebarNav/SidebarNav.js
deleted
100644 → 0
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 | -export { default } from './SidebarNav'; |
khubox-front/src/layouts/Main/components/Sidebar/components/UpgradePlan/UpgradePlan.js
deleted
100644 → 0
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 } from './UpgradePlan'; |
1 | -export { default } from './Sidebar'; |
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 } 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 } from './Topbar'; |
1 | -export { default as Topbar } from './Topbar'; |
1 | -export { default } from './Minimal'; |
khubox-front/src/layouts/index.js
deleted
100644 → 0
khubox-front/src/mock_file_data.json
deleted
100644 → 0
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"}] |
khubox-front/src/serviceWorker.js
deleted
100755 → 0
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 | -} |
khubox-front/src/theme/index.js
deleted
100644 → 0
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 | -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 | -}; |
khubox-front/src/theme/palette.js
deleted
100644 → 0
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 | -}; |
khubox-front/src/theme/typography.js
deleted
100644 → 0
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 | -export { default } from './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 } 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 | -export { default } from './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 | -export { default } from './LatestOrders'; |
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 | -export { default } from './LatestProducts'; |
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 | -export { default } from './LatestSales'; |
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 | -export { default } from './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 | -export { default } from './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 | -export { default } from './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 } from './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 | -export { default } from './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 } from './FileTable'; |
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 isn’t 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 } from './FileCard'; |
1 | -export { default as FileCard } from './FileCard'; |
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 | -export { default } from './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 } 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; |
khubox-front/src/views/SharedFileList/components/SharedFileTable/SharedFileTable.js
deleted
100644 → 0
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 | -export { default } from './SharedFileTable'; |
khubox-front/src/views/SharedFileList/components/SharedFileToolbar/SharedFileToolbar.js
deleted
100644 → 0
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 } from './SharedFileToolbar'; |
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 | -export { default } from './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 } from './TrashToolbar'; |
khubox-front/src/views/Trash/data.js
deleted
100644 → 0
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'; |
khubox-front/src/views/index.js
deleted
100644 → 0
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'; |
khubox-front/static/css/bootstrap.min.css
0 → 100644
This diff could not be displayed because it is too large.
khubox-front/static/css/main.css
0 → 100644
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})})); |
khubox-front/static/js/feather.min.js
0 → 100644
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)}])}); |
khubox-front/static/js/jquery-3.5.1.min.js
0 → 100644
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}); |
khubox-front/static/js/main.js
0 → 100644
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">×</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 | +}; |
khubox-front/yarn.lock
deleted
100644 → 0
This diff could not be displayed because it is too large.
-
Please register or login to post a comment