admin-lte 4.0.0-alpha3 → 4.0.0-beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cache/.eslintcache +1 -1
- package/.cache/.stylelintcache +1 -1
- package/README.md +6 -1
- package/dist/css/adminlte.css +191 -107
- package/dist/css/adminlte.css.map +1 -1
- package/dist/css/adminlte.min.css +2 -2
- package/dist/css/adminlte.min.css.map +1 -1
- package/dist/css/adminlte.rtl.css +198 -105
- package/dist/css/adminlte.rtl.css.map +1 -1
- package/dist/css/adminlte.rtl.min.css +2 -2
- package/dist/css/adminlte.rtl.min.css.map +1 -1
- package/dist/js/adminlte.js +138 -36
- package/dist/js/adminlte.js.map +1 -1
- package/dist/js/adminlte.min.js +3 -3
- package/dist/js/adminlte.min.js.map +1 -1
- package/dist/pages/UI/general.html +895 -0
- package/dist/pages/UI/timeline.html +221 -598
- package/dist/pages/docs/browser-support.html +199 -508
- package/dist/pages/docs/color-mode.html +339 -684
- package/dist/pages/docs/components/main-header.html +428 -826
- package/dist/pages/docs/components/main-sidebar.html +301 -609
- package/dist/pages/docs/faq.html +187 -497
- package/dist/pages/docs/how-to-contribute.html +189 -498
- package/dist/pages/docs/introduction.html +208 -512
- package/dist/pages/docs/javascript/treeview.html +197 -506
- package/dist/pages/docs/layout.html +187 -498
- package/dist/pages/docs/license.html +187 -497
- package/dist/pages/examples/lockscreen.html +21 -59
- package/dist/pages/examples/login-v2.html +35 -95
- package/dist/pages/examples/login.html +33 -89
- package/dist/pages/examples/register-v2.html +37 -102
- package/dist/pages/examples/register.html +34 -92
- package/dist/pages/forms/general.html +279 -765
- package/dist/pages/index.html +303 -806
- package/dist/pages/index2.html +495 -1188
- package/dist/pages/index3.html +243 -662
- package/dist/pages/layout/collapsed-sidebar.html +194 -519
- package/dist/pages/layout/fixed-complete.html +193 -519
- package/dist/pages/layout/fixed-sidebar.html +194 -520
- package/dist/pages/layout/layout-rtl.html +194 -519
- package/dist/pages/layout/logo-switch.html +111 -310
- package/dist/pages/layout/sidebar-mini.html +194 -519
- package/dist/pages/layout/unfixed-sidebar.html +193 -517
- package/dist/pages/tables/simple.html +261 -650
- package/dist/pages/widgets/cards.html +256 -704
- package/dist/pages/widgets/info-box.html +278 -787
- package/dist/pages/widgets/small-box.html +210 -547
- package/package.json +33 -32
- package/src/html/components/_head.astro +5 -15
- package/src/html/components/_scripts.astro +5 -17
- package/src/html/components/dashboard/_footer.astro +2 -2
- package/src/html/components/dashboard/_sidenav.astro +12 -3
- package/src/html/components/dashboard/_topbar.astro +9 -1
- package/src/html/components/docs/introduction.mdx +5 -5
- package/src/html/pages/UI/general.astro +1451 -0
- package/src/html/pages/docs/color-mode.astro +4 -2
- package/src/html/pages/docs/components/main-header.astro +3 -2
- package/src/html/pages/docs/layout.astro +1 -1
- package/src/html/pages/examples/lockscreen.astro +3 -3
- package/src/html/pages/forms/general.astro +8 -8
- package/src/html/pages/index.astro +32 -23
- package/src/html/pages/index2.astro +100 -72
- package/src/html/pages/index3.astro +12 -12
- package/src/html/pages/tables/simple.astro +20 -20
- package/src/html/pages/widgets/cards.astro +3 -3
- package/src/html/pages/widgets/small-box.astro +1 -1
- package/src/scss/_app-main.scss +4 -0
- package/src/scss/_app-sidebar.scss +2 -2
- package/src/scss/_bootstrap-variables.scss +26 -22
- package/src/scss/_callouts.scss +6 -0
- package/src/scss/_cards.scss +1 -0
- package/src/scss/_direct-chat.scss +5 -0
- package/src/scss/_dropdown.scss +1 -0
- package/src/scss/_info-box.scss +2 -10
- package/src/scss/_timeline.scss +1 -0
- package/src/scss/_toasts.scss +33 -0
- package/src/scss/_variables.scss +11 -5
- package/src/scss/adminlte.scss +1 -2
- package/src/scss/pages/_lockscreen.scss +1 -0
- package/src/scss/pages/_login_and_register.scss +1 -0
- package/src/scss/parts/_extra-components.scss +1 -0
- package/src/ts/adminlte.ts +3 -1
- package/src/ts/card-widget.ts +3 -2
- package/src/ts/direct-chat.ts +3 -2
- package/src/ts/fullscreen.ts +110 -0
- package/src/ts/layout.ts +3 -2
- package/src/ts/push-menu.ts +3 -2
- package/src/ts/treeview.ts +20 -3
- package/src/ts/util/index.ts +1 -1
- package/.idea/AdminLTE.iml +0 -16
- package/.idea/codeStyles/Project.xml +0 -53
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/dbnavigator.xml +0 -421
- package/.idea/git_toolbox_prj.xml +0 -15
- package/.idea/inspectionProfiles/Project_Default.xml +0 -7
- package/.idea/jsLibraryMappings.xml +0 -6
- package/.idea/jsLinters/eslint.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/php.xml +0 -28
- package/.idea/vcs.xml +0 -12
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "admin-lte",
|
|
3
3
|
"description": "Responsive open source admin dashboard and control panel.",
|
|
4
|
-
"version": "4.0.0-
|
|
4
|
+
"version": "4.0.0-beta1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Colorlib <https://colorlib.com>",
|
|
7
7
|
"main": "dist/js/adminlte.min.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"docs-compile": "astro --config src/config/astro.config.mjs build",
|
|
25
25
|
"docs-lint": "astro --config src/config/astro.config.mjs check",
|
|
26
26
|
"docs-format": "js-beautify --file \"dist/pages/**/*.html\"",
|
|
27
|
-
"docs-serve": "astro --config src/config/astro.config.mjs dev --open",
|
|
27
|
+
"docs-serve": "astro --config src/config/astro.config.mjs dev --open --port 3000",
|
|
28
28
|
"assets": "node src/config/assets.config.mjs",
|
|
29
29
|
"lint": "npm-run-all --aggregate-output --continue-on-error --parallel js-lint css-lint docs-lint lockfile-lint",
|
|
30
30
|
"compile": "npm-run-all docs-compile docs-format assets css js",
|
|
@@ -57,39 +57,40 @@
|
|
|
57
57
|
"url": "https://github.com/ColorlibHQ/AdminLTE/issues"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@astrojs/
|
|
61
|
-
"@
|
|
62
|
-
"@
|
|
63
|
-
"@typescript-eslint/
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
60
|
+
"@astrojs/check": "^0.6.0",
|
|
61
|
+
"@astrojs/mdx": "^3.0.0",
|
|
62
|
+
"@rollup/plugin-typescript": "^11.1.6",
|
|
63
|
+
"@typescript-eslint/eslint-plugin": "^7.5.0",
|
|
64
|
+
"@typescript-eslint/parser": "^7.5.0",
|
|
65
|
+
"astro": "^4.5.17",
|
|
66
|
+
"autoprefixer": "^10.4.19",
|
|
67
|
+
"bootstrap": "^5.3.2",
|
|
67
68
|
"bundlewatch": "^0.3.3",
|
|
68
|
-
"clean-css-cli": "^5.6.
|
|
69
|
-
"concurrently": "^8.2.
|
|
69
|
+
"clean-css-cli": "^5.6.3",
|
|
70
|
+
"concurrently": "^8.2.2",
|
|
70
71
|
"cross-env": "^7.0.3",
|
|
71
|
-
"eslint": "^8.
|
|
72
|
-
"eslint-config-xo": "^0.
|
|
73
|
-
"eslint-config-xo-typescript": "^
|
|
74
|
-
"eslint-plugin-astro": "^0.
|
|
75
|
-
"eslint-plugin-import": "^2.
|
|
76
|
-
"eslint-plugin-unicorn": "^
|
|
72
|
+
"eslint": "^8.55.0",
|
|
73
|
+
"eslint-config-xo": "^0.44.0",
|
|
74
|
+
"eslint-config-xo-typescript": "^4.0.0",
|
|
75
|
+
"eslint-plugin-astro": "^0.34.0",
|
|
76
|
+
"eslint-plugin-import": "^2.29.1",
|
|
77
|
+
"eslint-plugin-unicorn": "^52.0.0",
|
|
77
78
|
"fs-extra": "^11.1.1",
|
|
78
|
-
"js-beautify": "^1.
|
|
79
|
-
"lockfile-lint": "^4.
|
|
80
|
-
"nodemon": "^3.0.
|
|
79
|
+
"js-beautify": "^1.15.1",
|
|
80
|
+
"lockfile-lint": "^4.13.2",
|
|
81
|
+
"nodemon": "^3.0.2",
|
|
81
82
|
"npm-run-all": "^4.1.5",
|
|
82
|
-
"postcss": "^8.4.
|
|
83
|
-
"postcss-cli": "^
|
|
84
|
-
"prettier": "^3.
|
|
85
|
-
"prettier-plugin-astro": "^0.
|
|
86
|
-
"rollup": "^
|
|
87
|
-
"rtlcss": "^4.1.
|
|
88
|
-
"sass": "^1.
|
|
89
|
-
"stylelint": "^
|
|
90
|
-
"stylelint-config-twbs-bootstrap": "^
|
|
91
|
-
"terser": "^5.
|
|
92
|
-
"tslib": "^2.6.
|
|
93
|
-
"typescript": "^5.
|
|
83
|
+
"postcss": "^8.4.31",
|
|
84
|
+
"postcss-cli": "^11.0.0",
|
|
85
|
+
"prettier": "^3.2.5",
|
|
86
|
+
"prettier-plugin-astro": "^0.13.0",
|
|
87
|
+
"rollup": "^4.17.2",
|
|
88
|
+
"rtlcss": "^4.1.1",
|
|
89
|
+
"sass": "^1.77.1",
|
|
90
|
+
"stylelint": "^16.3.1",
|
|
91
|
+
"stylelint-config-twbs-bootstrap": "^14.1.0",
|
|
92
|
+
"terser": "^5.31.0",
|
|
93
|
+
"tslib": "^2.6.2",
|
|
94
|
+
"typescript": "^5.4.4"
|
|
94
95
|
}
|
|
95
96
|
}
|
|
@@ -19,28 +19,18 @@ const cssPath = isRtl ? ".rtl" : "";
|
|
|
19
19
|
/>
|
|
20
20
|
<!--end::Primary Meta Tags-->
|
|
21
21
|
<!--begin::Fonts-->
|
|
22
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
23
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
24
22
|
<link
|
|
25
|
-
href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap"
|
|
26
23
|
rel="stylesheet"
|
|
24
|
+
href="https://cdn.jsdelivr.net/npm/@fontsource/source-sans-3@5.0.12/index.css"
|
|
25
|
+
integrity="sha256-tXJfXfp6Ewt1ilPzLDtQnJV4hclT9XuaZUKyUvmyr+Q="
|
|
26
|
+
crossorigin="anonymous"
|
|
27
27
|
/>
|
|
28
28
|
<!--end::Fonts-->
|
|
29
29
|
<!--begin::Third Party Plugin(OverlayScrollbars)-->
|
|
30
|
-
<link
|
|
31
|
-
rel="stylesheet"
|
|
32
|
-
href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.1.0/styles/overlayscrollbars.min.css"
|
|
33
|
-
integrity="sha256-LWLZPJ7X1jJLI5OG5695qDemW1qQ7lNdbTfQ64ylbUY="
|
|
34
|
-
crossorigin="anonymous"
|
|
35
|
-
/>
|
|
30
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.3.0/styles/overlayscrollbars.min.css" integrity="sha256-dSokZseQNT08wYEWiz5iLI8QPlKxG+TswNRD8k35cpg=" crossorigin="anonymous">
|
|
36
31
|
<!--end::Third Party Plugin(OverlayScrollbars)-->
|
|
37
32
|
<!--begin::Third Party Plugin(Bootstrap Icons)-->
|
|
38
|
-
<link
|
|
39
|
-
rel="stylesheet"
|
|
40
|
-
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.min.css"
|
|
41
|
-
integrity="sha256-BicZsQAhkGHIoR//IB2amPN5SrRb3fHB8tFsnqRAwnk="
|
|
42
|
-
crossorigin="anonymous"
|
|
43
|
-
>
|
|
33
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.min.css" integrity="sha256-Qsx5lrStHZyR9REqhUF8iQt73X06c8LGIUPzpOhwRrI=" crossorigin="anonymous">
|
|
44
34
|
<!--end::Third Party Plugin(Bootstrap Icons)-->
|
|
45
35
|
<!--begin::Required Plugin(AdminLTE)-->
|
|
46
36
|
<link rel="stylesheet" href={path + "/css/adminlte" + cssPath + ".css"} />
|
|
@@ -4,26 +4,15 @@ const adminlteJsUrl = path + "/js/adminlte.js";
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!--begin::Third Party Plugin(OverlayScrollbars)-->
|
|
7
|
-
<script
|
|
8
|
-
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.1.0/browser/overlayscrollbars.browser.es6.min.js"
|
|
9
|
-
integrity="sha256-NRZchBuHZWSXldqrtAOeCZpucH/1n1ToJ3C8mSK95NU="
|
|
10
|
-
crossorigin="anonymous"
|
|
11
|
-
></script>
|
|
7
|
+
<script src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.3.0/browser/overlayscrollbars.browser.es6.min.js" integrity="sha256-H2VM7BKda+v2Z4+DRy69uknwxjyDRhszjXFhsL4gD3w=" crossorigin="anonymous"></script>
|
|
12
8
|
<!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Required Plugin(popperjs for Bootstrap 5)-->
|
|
13
|
-
<script
|
|
14
|
-
src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.7/dist/umd/popper.min.js"
|
|
15
|
-
integrity="sha384-zYPOMqeu1DAVkHiLqWBUTcbYfZ8osu1Nd6Z89ify25QV9guujx43ITvfi12/QExE"
|
|
16
|
-
crossorigin="anonymous"
|
|
17
|
-
></script>
|
|
9
|
+
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha256-whL0tQWoY1Ku1iskqPFvmZ+CHsvmRWx/PIoEvIeWh4I=" crossorigin="anonymous"></script>
|
|
18
10
|
<!--end::Required Plugin(popperjs for Bootstrap 5)--><!--begin::Required Plugin(Bootstrap 5)-->
|
|
19
|
-
<script
|
|
20
|
-
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.min.js"
|
|
21
|
-
integrity="sha384-Y4oOpwW3duJdCWv5ly8SCFYWqFDsfob/3GkgExXKV4idmbt98QcxXYs9UoXAB7BZ"
|
|
22
|
-
crossorigin="anonymous"
|
|
23
|
-
></script>
|
|
11
|
+
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.min.js" integrity="sha256-YMa+wAM6QkVyz999odX7lPRxkoYAan8suedu4k2Zur8=" crossorigin="anonymous"></script>
|
|
24
12
|
<!--end::Required Plugin(Bootstrap 5)--><!--begin::Required Plugin(AdminLTE)-->
|
|
25
13
|
<script src={adminlteJsUrl} is:inline></script>
|
|
26
|
-
<!--end::Required Plugin(AdminLTE)
|
|
14
|
+
<!--end::Required Plugin(AdminLTE)-->
|
|
15
|
+
<!--begin::OverlayScrollbars Configure-->
|
|
27
16
|
<script is:inline>
|
|
28
17
|
const SELECTOR_SIDEBAR_WRAPPER = ".sidebar-wrapper";
|
|
29
18
|
const Default = {
|
|
@@ -31,7 +20,6 @@ const adminlteJsUrl = path + "/js/adminlte.js";
|
|
|
31
20
|
scrollbarAutoHide: "leave",
|
|
32
21
|
scrollbarClickScroll: true,
|
|
33
22
|
};
|
|
34
|
-
|
|
35
23
|
document.addEventListener("DOMContentLoaded", function () {
|
|
36
24
|
const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
|
|
37
25
|
if (
|
|
@@ -9,8 +9,8 @@ const year = new Date().getFullYear();
|
|
|
9
9
|
<!--end::To the end-->
|
|
10
10
|
<!--begin::Copyright-->
|
|
11
11
|
<strong>
|
|
12
|
-
Copyright © 2014-{year}
|
|
13
|
-
<a href="https://adminlte.io">AdminLTE.io</a>.
|
|
12
|
+
Copyright © 2014-{year}
|
|
13
|
+
<a href="https://adminlte.io" class="text-decoration-none">AdminLTE.io</a>.
|
|
14
14
|
</strong>
|
|
15
15
|
All rights reserved.
|
|
16
16
|
<!--end::Copyright-->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
import {
|
|
3
|
-
const {
|
|
2
|
+
import {convertPathToHtml} from "../../../utils/index.js";
|
|
3
|
+
const {path, mainPage, page} = Astro.props;
|
|
4
4
|
const htmlPath = convertPathToHtml(path);
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -125,7 +125,7 @@ const htmlPath = convertPathToHtml(path);
|
|
|
125
125
|
<p>
|
|
126
126
|
Layout Options
|
|
127
127
|
<span class="nav-badge badge text-bg-secondary me-3"
|
|
128
|
-
|
|
128
|
+
>6</span
|
|
129
129
|
>
|
|
130
130
|
<i class="nav-arrow bi bi-chevron-right"></i>
|
|
131
131
|
</p>
|
|
@@ -216,6 +216,15 @@ const htmlPath = convertPathToHtml(path);
|
|
|
216
216
|
</p>
|
|
217
217
|
</a>
|
|
218
218
|
<ul class="nav nav-treeview">
|
|
219
|
+
<li class="nav-item">
|
|
220
|
+
<a
|
|
221
|
+
href={htmlPath + "/UI/general.html"}
|
|
222
|
+
class:list={["nav-link", page === "general" && "active"]}
|
|
223
|
+
>
|
|
224
|
+
<i class="nav-icon bi bi-circle"></i>
|
|
225
|
+
<p>General</p>
|
|
226
|
+
</a>
|
|
227
|
+
</li>
|
|
219
228
|
<li class="nav-item">
|
|
220
229
|
<a
|
|
221
230
|
href={htmlPath + "/UI/timeline.html"}
|
|
@@ -154,6 +154,15 @@ const distPath = path;
|
|
|
154
154
|
</li>
|
|
155
155
|
<!--end::Notifications Dropdown Menu-->
|
|
156
156
|
|
|
157
|
+
<!--begin::Fullscreen Toggle-->
|
|
158
|
+
<li class="nav-item">
|
|
159
|
+
<a class="nav-link" href="#" data-lte-toggle="fullscreen">
|
|
160
|
+
<i data-lte-icon="maximize" class="bi bi-arrows-fullscreen"></i>
|
|
161
|
+
<i data-lte-icon="minimize" class="bi bi-fullscreen-exit" style="display: none;"></i>
|
|
162
|
+
</a>
|
|
163
|
+
</li>
|
|
164
|
+
<!--end::Fullscreen Toggle-->
|
|
165
|
+
|
|
157
166
|
<!--begin::User Menu Dropdown-->
|
|
158
167
|
<li class="nav-item dropdown user-menu">
|
|
159
168
|
<a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">
|
|
@@ -172,7 +181,6 @@ const distPath = path;
|
|
|
172
181
|
class="rounded-circle shadow"
|
|
173
182
|
alt="User Image"
|
|
174
183
|
/>
|
|
175
|
-
|
|
176
184
|
<p>
|
|
177
185
|
Alexander Pierce - Web Developer
|
|
178
186
|
<small>Member since Nov. 2023</small>
|
|
@@ -16,7 +16,7 @@ _**Important Note**: You needed to add separately cdn links for plugins in your
|
|
|
16
16
|
|
|
17
17
|
```html
|
|
18
18
|
<script
|
|
19
|
-
src="https://cdn.jsdelivr.net/npm/admin-lte@4.0.0-
|
|
19
|
+
src="https://cdn.jsdelivr.net/npm/admin-lte@4.0.0-beta1/dist/js/adminlte.min.js"
|
|
20
20
|
integrity="sha256-5SPy1/00NR75iVOk7p0Ci0nwAAM8Ab7j31wyie+DKYw="
|
|
21
21
|
crossorigin="anonymous"
|
|
22
22
|
></script>
|
|
@@ -25,7 +25,7 @@ _**Important Note**: You needed to add separately cdn links for plugins in your
|
|
|
25
25
|
```html
|
|
26
26
|
<link
|
|
27
27
|
rel="stylesheet"
|
|
28
|
-
href="https://cdn.jsdelivr.net/npm/admin-lte@4.0.0-
|
|
28
|
+
href="https://cdn.jsdelivr.net/npm/admin-lte@4.0.0-beta1/dist/css/adminlte.min.css"
|
|
29
29
|
integrity="sha256-c66Dhf3TzKZoXxk8aNaf2lu580xGnKke4mjUtbpMqYg="
|
|
30
30
|
crossorigin="anonymous"
|
|
31
31
|
/>
|
|
@@ -38,19 +38,19 @@ _**Important Note**: To install it via npm/Yarn, you need at least Node.js 14 or
|
|
|
38
38
|
#### Via npm
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
|
-
npm install admin-lte@4.0.0-
|
|
41
|
+
npm install admin-lte@4.0.0-beta1 --save
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
#### Via Yarn
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
|
-
yarn add admin-lte@4.0.0-
|
|
47
|
+
yarn add admin-lte@4.0.0-beta1
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
#### Via Composer
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
|
-
composer require "almasaeed2010/adminlte=4.0.0-
|
|
53
|
+
composer require "almasaeed2010/adminlte=4.0.0-beta1"
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
#### Via Git
|