Muhammad Iqbal Afandi 4 лет назад
Родитель
Сommit
88e3d533c0

+ 340
- 340
package-lock.json
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 1
- 0
resources/css/_overrides.scss Просмотреть файл

1
+// Suggested location to add your overrides so that migration would be easy by just updating the SASS folder in the future

+ 4
- 0
resources/css/_variables.scss Просмотреть файл

1
+/* General */
2
+$fontSize:14px;
3
+$borderRadius:12px;
4
+$transitionDuration:.2s;

+ 0
- 107
resources/css/app.scss Просмотреть файл

1
-* {
2
-  box-sizing: border-box;
3
-}
4
-
5
-html {
6
-  height: 100%;
7
-  font-size: 14px;
8
-}
9
-
10
-body {
11
-  font-family: var(--font-family);
12
-  color: var(--text-color);
13
-  background-color: var(--surface-ground);
14
-  margin: 0;
15
-  padding: 0;
16
-  min-height: 100%;
17
-  -webkit-font-smoothing: antialiased;
18
-  -moz-osx-font-smoothing: grayscale;
19
-}
20
-
21
-/*
22
-  Typography
23
-*/
24
-a {
25
-  text-decoration: none;
26
-  color: var(--primary-color);
27
-}
28
-
29
-h1,
30
-h2,
31
-h3,
32
-h4,
33
-h5,
34
-h6 {
35
-  margin: 0.5rem 0 0.5rem 0;
36
-  font-family: inherit;
37
-  font-weight: 500;
38
-  line-height: 1.2;
39
-  color: inherit;
40
-
41
-  &:first-child {
42
-    margin-top: 0;
43
-  }
44
-}
45
-
46
-h1 {
47
-  font-size: 2.5rem;
48
-}
49
-
50
-h2 {
51
-  font-size: 2rem;
52
-}
53
-
54
-h3 {
55
-  font-size: 1.75rem;
56
-}
57
-
58
-h4 {
59
-  font-size: 1.5rem;
60
-}
61
-
62
-h5 {
63
-  font-size: 1.25rem;
64
-}
65
-
66
-h6 {
67
-  font-size: 1rem;
68
-}
69
-
70
-mark {
71
-  background: #fff8e1;
72
-  padding: 0.25rem 0.4rem;
73
-  border-radius: 12px;
74
-  font-family: monospace;
75
-}
76
-
77
-blockquote {
78
-  margin: 1rem 0;
79
-  padding: 0 2rem;
80
-  border-left: 4px solid #90a4ae;
81
-}
82
-
83
-hr {
84
-  border-top: solid var(--surface-border);
85
-  border-width: 1px 0 0 0;
86
-  margin: 1rem 0;
87
-}
88
-
89
-p {
90
-  margin: 0 0 1rem 0;
91
-  line-height: 1.5;
92
-
93
-  &:last-child {
94
-    margin-bottom: 0;
95
-  }
96
-}
97
-
98
-/*
99
-  Component
100
-*/
101
-.layout-topbar-menu-tooltip.p-tooltip {
102
-  position: absolute;
103
-  z-index: 997;
104
-  display: none;
105
-  padding: 0.25em 0.5rem;
106
-  max-width: 12.5rem;
107
-}

+ 3
- 0
resources/css/layout.scss Просмотреть файл

1
+@import './_variables';
2
+@import './partials/layout';
3
+@import './_overrides';

+ 12
- 0
resources/css/partials/_content.scss Просмотреть файл

1
+.layout-main-container {
2
+    display: flex;
3
+    flex-direction: column;
4
+    min-height: 100vh;
5
+    justify-content: space-between;
6
+    padding: 7rem 2rem 2rem 4rem;
7
+    transition: margin-left $transitionDuration;
8
+}
9
+
10
+.layout-main {
11
+    flex: 1 1 auto;
12
+}

+ 8
- 0
resources/css/partials/_footer.scss Просмотреть файл

1
+.layout-footer {
2
+    transition: margin-left $transitionDuration;
3
+    display: flex;
4
+    align-items: center;
5
+    justify-content: center;
6
+    padding-top: 1rem;
7
+    border-top: 1px solid var(--surface-border);
8
+}

+ 9
- 0
resources/css/partials/_layout.scss Просмотреть файл

1
+@import './_mixins';
2
+@import './_main';
3
+@import './_topbar';
4
+@import './_menu';
5
+@import './_content';
6
+@import './_footer';
7
+@import './_responsive';
8
+@import './_utils';
9
+@import './_typography';

+ 28
- 0
resources/css/partials/_main.scss Просмотреть файл

1
+* {
2
+    box-sizing: border-box;
3
+}
4
+
5
+html {
6
+    height: 100%;
7
+    font-size: $fontSize;
8
+}
9
+
10
+body {
11
+    font-family: var(--font-family);
12
+    color: var(--text-color);
13
+    background-color: var(--surface-ground);
14
+    margin: 0;
15
+    padding: 0;
16
+    min-height: 100%;
17
+    -webkit-font-smoothing: antialiased;
18
+    -moz-osx-font-smoothing: grayscale;
19
+}
20
+
21
+a {
22
+    text-decoration: none;
23
+    color: var(--primary-color);
24
+}
25
+
26
+.layout-theme-light {
27
+    background-color: #edf1f5;
28
+}

+ 116
- 0
resources/css/partials/_menu.scss Просмотреть файл

1
+.layout-sidebar {
2
+	position: fixed;
3
+	width: 300px;
4
+	height: calc(100vh - 9rem);
5
+	z-index: 999;
6
+	overflow-y: auto;
7
+	user-select: none;
8
+	top: 7rem;
9
+	left: 2rem;
10
+	transition: transform $transitionDuration, left $transitionDuration;
11
+	background-color: var(--surface-overlay);
12
+	border-radius: 12px;
13
+    padding: 1.5rem;
14
+    box-shadow: 0px 3px 5px rgba(0,0,0,.02), 0px 0px 2px rgba(0,0,0,.05), 0px 1px 4px rgba(0,0,0,.08)
15
+}
16
+
17
+.layout-menu {
18
+    list-style-type: none;
19
+    margin: 0;
20
+    padding: 0;
21
+
22
+    li {
23
+        &.layout-menuitem-category {
24
+            margin-top: .75rem;
25
+
26
+            &:first-child {
27
+                margin-top: 0;
28
+            }
29
+        }
30
+        
31
+        .layout-menuitem-root-text {
32
+            text-transform: uppercase;
33
+            color:var(--surface-900);
34
+            font-weight: 600;
35
+            margin-bottom: .5rem;
36
+            font-size: .875rem;
37
+        }
38
+
39
+        a {
40
+            cursor: pointer;
41
+            text-decoration: none;
42
+            display: flex;
43
+            align-items: center;
44
+            color:var(--text-color);
45
+            transition: color $transitionDuration;
46
+            border-radius: $borderRadius;
47
+            padding: .75rem 1rem;
48
+            transition: background-color .15s;
49
+
50
+            span {
51
+                margin-left: 0.5rem;
52
+            }
53
+
54
+            .menuitem-toggle-icon {
55
+                margin-left: auto;
56
+            }
57
+
58
+            &:focus {
59
+                @include focused-inset();
60
+            }
61
+
62
+            &:hover {
63
+                background-color: var(--surface-hover);
64
+            }
65
+
66
+            &.router-link-exact-active {
67
+                font-weight: 700;
68
+                color: var(--primary-color);
69
+            }
70
+
71
+            .p-badge {
72
+                margin-left: auto;
73
+            }
74
+        }
75
+
76
+        &.active-menuitem {
77
+            > a {
78
+                .menuitem-toggle-icon {
79
+                    &:before {
80
+                        content: '\e933';
81
+                    }
82
+                }
83
+            }
84
+        }
85
+
86
+        ul {
87
+            list-style-type: none;
88
+            margin: 0;
89
+            padding: 0;
90
+
91
+            &.layout-submenu-wrapper-enter-from,
92
+            &.layout-submenu-wrapper-leave-to {
93
+                max-height: 0;
94
+            }
95
+
96
+            &.layout-submenu-wrapper-enter-to,
97
+            &.layout-submenu-wrapper-leave-from {
98
+                max-height: 1000px;
99
+            }
100
+
101
+            &.layout-submenu-wrapper-leave-active {
102
+                overflow: hidden;
103
+                transition: max-height 0.45s cubic-bezier(0, 1, 0, 1);
104
+            }
105
+
106
+            &.layout-submenu-wrapper-enter-active {
107
+                overflow: hidden;
108
+                transition: max-height 1s ease-in-out;
109
+            }
110
+
111
+            ul {
112
+                padding-left: 1rem;
113
+            }
114
+        }
115
+    }
116
+}

+ 13
- 0
resources/css/partials/_mixins.scss Просмотреть файл

1
+@mixin focused() {
2
+    outline: 0 none;
3
+    outline-offset: 0;
4
+    transition: box-shadow .2s;
5
+    box-shadow: var(--focus-ring);
6
+}
7
+
8
+@mixin focused-inset() {
9
+    outline: 0 none;
10
+    outline-offset: 0;
11
+    transition: box-shadow .2s;
12
+    box-shadow: inset var(--focus-ring);
13
+}

+ 89
- 0
resources/css/partials/_responsive.scss Просмотреть файл

1
+@media (min-width: 992px) {
2
+    .layout-wrapper {
3
+        &.layout-overlay {
4
+            .layout-main-container {
5
+                margin-left: 0;
6
+                padding-left: 2rem;
7
+            }
8
+
9
+            .layout-sidebar {
10
+                transform: translateX(-100%);
11
+                left: 0;
12
+                top: 0;
13
+                height: 100vh;
14
+                border-top-left-radius: 0;
15
+                border-bottom-left-radius: 0;
16
+            }
17
+
18
+            &.layout-overlay-sidebar-active {
19
+                .layout-sidebar {
20
+                    transform: translateX(0);
21
+                }
22
+            }
23
+        }
24
+
25
+        &.layout-static {
26
+            .layout-main-container {
27
+                margin-left: 300px;
28
+            }
29
+
30
+            &.layout-static-sidebar-inactive {
31
+                .layout-sidebar {
32
+                    transform: translateX(-100%);
33
+                    left: 0;
34
+                }
35
+
36
+                .layout-main-container {
37
+                    margin-left: 0;
38
+                    padding-left: 2rem;
39
+                }
40
+            }
41
+        }
42
+
43
+        .layout-mask {
44
+            display: none;
45
+        }
46
+    }
47
+}
48
+
49
+@media (max-width: 991px) {
50
+    .layout-wrapper {
51
+        .layout-main-container {
52
+            margin-left: 0;
53
+            padding-left: 2rem;
54
+        }
55
+
56
+        .layout-sidebar {
57
+            transform: translateX(-100%);
58
+            left: 0;
59
+            top: 0;
60
+            height: 100vh;
61
+            border-top-left-radius: 0;
62
+            border-bottom-left-radius: 0;
63
+        }
64
+
65
+        .layout-mask {
66
+            z-index: 998;
67
+            background-color: var(--maskbg);
68
+
69
+            &.layout-mask-enter-from,
70
+            &.layout-mask-leave-to {
71
+                background-color: transparent;
72
+            }
73
+        }
74
+
75
+        &.layout-mobile-sidebar-active {
76
+            .layout-sidebar {
77
+                transform: translateX(0);
78
+            }
79
+
80
+            .layout-mask {
81
+                display: block;
82
+            }
83
+        }
84
+    }
85
+
86
+    .body-overflow-hidden {
87
+        overflow: hidden;
88
+    }
89
+}

+ 142
- 0
resources/css/partials/_topbar.scss Просмотреть файл

1
+.layout-topbar {
2
+    position: fixed;
3
+    height: 5rem;
4
+    z-index: 997;
5
+    left: 0;
6
+    top: 0;
7
+    width: 100%;
8
+    padding: 0 2rem;
9
+    background-color: var(--surface-card);
10
+    transition: left $transitionDuration;
11
+    display: flex;
12
+    align-items: center;
13
+    box-shadow: 0px 3px 5px rgba(0,0,0,.02), 0px 0px 2px rgba(0,0,0,.05), 0px 1px 4px rgba(0,0,0,.08);
14
+
15
+    .layout-topbar-logo {
16
+        display: flex;
17
+        align-items: center;
18
+        color: var(--surface-900);
19
+        font-size: 1.5rem;
20
+        font-weight: 500;
21
+        width: 300px;
22
+        border-radius: 12px;
23
+
24
+        img {
25
+            height: 2.5rem;
26
+            margin-right: .5rem;
27
+        }
28
+
29
+        &:focus {
30
+            @include focused();
31
+        }
32
+    }
33
+
34
+    .layout-topbar-button {
35
+        display: inline-flex;
36
+        justify-content: center;
37
+        align-items: center;
38
+        position: relative;
39
+        color: var(--text-color-secondary);
40
+        border-radius: 50%;
41
+        width: 3rem;
42
+        height: 3rem;
43
+        cursor: pointer;
44
+        transition: background-color $transitionDuration;
45
+        
46
+        &:hover {
47
+            color: var(--text-color);
48
+            background-color: var(--surface-hover);
49
+        }
50
+
51
+        &:focus {
52
+            @include focused();
53
+        }
54
+
55
+        i {
56
+            font-size: 1.5rem;
57
+        }
58
+
59
+        span {
60
+            font-size: 1rem;
61
+            display: none;
62
+        }
63
+    }
64
+
65
+    .layout-menu-button {
66
+        margin-left: 2rem;
67
+    }
68
+
69
+    .layout-topbar-menu-button {
70
+        display: none;
71
+
72
+        i {
73
+            font-size: 1.25rem;
74
+        }
75
+    }
76
+
77
+    .layout-topbar-menu {
78
+        margin: 0 0 0 auto;
79
+        padding: 0;
80
+        list-style: none;
81
+        display: flex;
82
+        
83
+        .layout-topbar-button {
84
+            margin-left: 1rem;
85
+        }
86
+    }
87
+}
88
+
89
+@media (max-width: 991px) {
90
+    .layout-topbar {
91
+        justify-content: space-between;
92
+
93
+        .layout-topbar-logo {
94
+            width: auto;
95
+            order: 2;
96
+        }
97
+    
98
+        .layout-menu-button {
99
+            margin-left: 0;
100
+            order: 1;
101
+        }
102
+
103
+        .layout-topbar-menu-button {
104
+            display: inline-flex;
105
+            margin-left: 0;
106
+            order: 3;
107
+        }
108
+
109
+        .layout-topbar-menu {
110
+            margin-left: 0;
111
+            position: absolute;
112
+            flex-direction: column;
113
+            background-color: var(--surface-overlay);
114
+            box-shadow: 0px 3px 5px rgba(0,0,0,.02), 0px 0px 2px rgba(0,0,0,.05), 0px 1px 4px rgba(0,0,0,.08);
115
+            border-radius: 12px;
116
+            padding: 1rem;
117
+            right: 2rem;
118
+            top: 5rem;
119
+            min-width: 15rem;
120
+
121
+            .layout-topbar-button {
122
+                margin-left: 0;
123
+                display: flex;
124
+                width: 100%;
125
+                height: auto;
126
+                justify-content: flex-start;
127
+                border-radius: 12px;
128
+                padding: 1rem;
129
+
130
+                i {
131
+                    font-size: 1rem;
132
+                    margin-right: .5rem;
133
+                }
134
+
135
+                span {
136
+                    font-weight: medium;
137
+                    display: block;
138
+                }
139
+            }
140
+        }
141
+    }
142
+}

+ 63
- 0
resources/css/partials/_typography.scss Просмотреть файл

1
+h1, h2, h3, h4, h5, h6 {
2
+	margin: 1.5rem 0 1rem 0;
3
+	font-family: inherit;
4
+	font-weight: 500;
5
+	line-height: 1.2;
6
+	color: inherit;
7
+
8
+	&:first-child {
9
+		margin-top: 0;
10
+	}
11
+}
12
+
13
+h1 {
14
+	font-size: 2.5rem;
15
+}
16
+
17
+h2 {
18
+	font-size: 2rem;
19
+}
20
+
21
+h3 {
22
+	font-size: 1.75rem;
23
+}
24
+
25
+h4 {
26
+	font-size: 1.5rem;
27
+}
28
+
29
+h5 {
30
+	font-size: 1.25rem;
31
+}
32
+
33
+h6 {
34
+	font-size: 1rem;
35
+}
36
+
37
+mark {
38
+	background: #FFF8E1;
39
+	padding: .25rem .4rem;
40
+	border-radius: $borderRadius;
41
+	font-family: monospace;
42
+}
43
+
44
+blockquote {
45
+	margin: 1rem 0;
46
+	padding: 0 2rem;
47
+	border-left: 4px solid #90A4AE;
48
+}
49
+
50
+hr {
51
+	border-top: solid var(--surface-border);
52
+	border-width: 1px 0 0 0;
53
+	margin: 1rem 0;
54
+}
55
+
56
+p {
57
+	margin: 0 0 1rem 0;
58
+	line-height: 1.5;
59
+
60
+	&:last-child {
61
+		margin-bottom: 0;
62
+	}
63
+}

+ 12
- 0
resources/css/partials/_utils.scss Просмотреть файл

1
+.card {
2
+    background-color: var(--surface-card);
3
+    padding: 1.5rem;
4
+    color: var(--surface-900);
5
+    margin-bottom: 1rem;
6
+    border-radius: $borderRadius;
7
+    box-shadow: 0px 3px 5px rgba(0,0,0,.02), 0px 0px 2px rgba(0,0,0,.05), 0px 1px 4px rgba(0,0,0,.08) !important;
8
+
9
+    &.card-w-title {
10
+        padding-bottom: 2rem;
11
+    }
12
+}

+ 4
- 1
resources/js/components/AppAutoComplete.vue Просмотреть файл

7
     type: String,
7
     type: String,
8
     required: true,
8
     required: true,
9
   },
9
   },
10
+  labelClass: {
11
+    type: String,
12
+  },
10
   disabled: {
13
   disabled: {
11
     type: Boolean,
14
     type: Boolean,
12
     default: false,
15
     default: false,
64
 
67
 
65
 <template>
68
 <template>
66
   <div class="field">
69
   <div class="field">
67
-    <label :for="forLabel">{{ label }}</label>
70
+    <label :for="forLabel" :class="labelClass">{{ label }}</label>
68
 
71
 
69
     <AutoComplete
72
     <AutoComplete
70
       forceSelection
73
       forceSelection

+ 4
- 1
resources/js/components/AppDropdown.vue Просмотреть файл

6
     type: String,
6
     type: String,
7
     required: true,
7
     required: true,
8
   },
8
   },
9
+  labelClass: {
10
+    type: String,
11
+  },
9
   disabled: {
12
   disabled: {
10
     type: Boolean,
13
     type: Boolean,
11
     default: false,
14
     default: false,
68
 
71
 
69
 <template>
72
 <template>
70
   <div class="field">
73
   <div class="field">
71
-    <label v-if="label" :for="forLabel">{{ label }}</label>
74
+    <label v-if="label" :for="forLabel" :class="labelClass">{{ label }}</label>
72
 
75
 
73
     <Dropdown
76
     <Dropdown
74
       class="w-full"
77
       class="w-full"

+ 4
- 1
resources/js/components/AppEditor.vue Просмотреть файл

6
     type: String,
6
     type: String,
7
     required: true,
7
     required: true,
8
   },
8
   },
9
+  labelClass: {
10
+    type: String,
11
+  },
9
   readOnly: {
12
   readOnly: {
10
     type: Boolean,
13
     type: Boolean,
11
     required: false,
14
     required: false,
35
 
38
 
36
 <template>
39
 <template>
37
   <div class="field">
40
   <div class="field">
38
-    <label v-if="label" :for="forLabel">{{ label }}</label>
41
+    <label v-if="label" :for="forLabel" :class="labelClass">{{ label }}</label>
39
 
42
 
40
     <Editor
43
     <Editor
41
       :read-only="readOnly"
44
       :read-only="readOnly"

+ 4
- 1
resources/js/components/AppInputNumber.vue Просмотреть файл

6
     type: String,
6
     type: String,
7
     required: true,
7
     required: true,
8
   },
8
   },
9
+  labelClass: {
10
+    type: String,
11
+  },
9
   disabled: {
12
   disabled: {
10
     type: Boolean,
13
     type: Boolean,
11
     default: false,
14
     default: false,
76
 
79
 
77
 <template>
80
 <template>
78
   <div class="field">
81
   <div class="field">
79
-    <label :for="forLabel">{{ label }}</label>
82
+    <label :for="forLabel" :class="labelClass">{{ label }}</label>
80
 
83
 
81
     <InputNumber
84
     <InputNumber
82
       class="w-full"
85
       class="w-full"

+ 4
- 1
resources/js/components/AppInputText.vue Просмотреть файл

6
     type: String,
6
     type: String,
7
     required: true,
7
     required: true,
8
   },
8
   },
9
+  labelClass: {
10
+    type: String,
11
+  },
9
   disabled: {
12
   disabled: {
10
     type: Boolean,
13
     type: Boolean,
11
     default: false,
14
     default: false,
36
 
39
 
37
 <template>
40
 <template>
38
   <div class="field">
41
   <div class="field">
39
-    <label :for="forLabel">{{ label }}</label>
42
+    <label :for="forLabel" :class="labelClass">{{ label }}</label>
40
 
43
 
41
     <InputText
44
     <InputText
42
       class="w-full"
45
       class="w-full"

+ 4
- 1
resources/js/components/AppPassword.vue Просмотреть файл

6
     type: String,
6
     type: String,
7
     required: true,
7
     required: true,
8
   },
8
   },
9
+  labelClass: {
10
+    type: String,
11
+  },
9
   disabled: {
12
   disabled: {
10
     type: Boolean,
13
     type: Boolean,
11
     default: false,
14
     default: false,
48
 
51
 
49
 <template>
52
 <template>
50
   <div class="field">
53
   <div class="field">
51
-    <label :for="forLabel">{{ label }}</label>
54
+    <label :for="forLabel" :class="labelClass">{{ label }}</label>
52
 
55
 
53
     <Password
56
     <Password
54
       class="w-full"
57
       class="w-full"

+ 4
- 1
resources/js/components/AppTextArea.vue Просмотреть файл

6
     type: String,
6
     type: String,
7
     required: true,
7
     required: true,
8
   },
8
   },
9
+  labelClass: {
10
+    type: String,
11
+  },
9
   disabled: {
12
   disabled: {
10
     type: Boolean,
13
     type: Boolean,
11
     default: false,
14
     default: false,
40
 
43
 
41
 <template>
44
 <template>
42
   <div class="field">
45
   <div class="field">
43
-    <label :for="forLabel">{{ label }}</label>
46
+    <label :for="forLabel" :class="labelClass">{{ label }}</label>
44
 
47
 
45
     <Textarea
48
     <Textarea
46
       class="w-full"
49
       class="w-full"

+ 3
- 3
resources/js/layouts/Auth/AuthLayout.vue Просмотреть файл

34
   </div>
34
   </div>
35
 </template>
35
 </template>
36
 
36
 
37
-<style lang="scss" scoped>
37
+<style scoped>
38
 .border-gradient {
38
 .border-gradient {
39
-  border-radius: 4px;
39
+  border-radius: 56px;
40
   padding: 0.3rem;
40
   padding: 0.3rem;
41
   background: linear-gradient(
41
   background: linear-gradient(
42
     180deg,
42
     180deg,
46
 }
46
 }
47
 
47
 
48
 .bg-gradient {
48
 .bg-gradient {
49
-  border-radius: 3px;
49
+  border-radius: 53px;
50
   background: linear-gradient(
50
   background: linear-gradient(
51
     180deg,
51
     180deg,
52
     var(--surface-50) 38.9%,
52
     var(--surface-50) 38.9%,

+ 0
- 8
resources/js/layouts/Dashboard/Components/Sidebar.vue Просмотреть файл

11
     <SubSidebar class="layout-menu" :items="menu" :root="true" />
11
     <SubSidebar class="layout-menu" :items="menu" :root="true" />
12
   </div>
12
   </div>
13
 </template>
13
 </template>
14
-
15
-<style lang="scss" scoped>
16
-.layout-menu {
17
-  list-style-type: none;
18
-  margin: 0;
19
-  padding: 0;
20
-}
21
-</style>

+ 0
- 68
resources/js/layouts/Dashboard/Components/SubSidebar.vue Просмотреть файл

58
     </template>
58
     </template>
59
   </ul>
59
   </ul>
60
 </template>
60
 </template>
61
-
62
-<style lang="scss" scoped>
63
-$transition: 0.2s;
64
-
65
-li {
66
-  &.layout-menuitem-category {
67
-    margin-top: 0.75rem;
68
-
69
-    &:first-child {
70
-      margin-top: 0;
71
-    }
72
-  }
73
-
74
-  .layout-menuitem-root-text {
75
-    text-transform: uppercase;
76
-    color: var(--surface-900);
77
-    font-weight: 600;
78
-    margin-bottom: 0.5rem;
79
-    font-size: 0.875rem;
80
-  }
81
-
82
-  a {
83
-    cursor: pointer;
84
-    text-decoration: none;
85
-    display: flex;
86
-    align-items: center;
87
-    color: var(--text-color);
88
-    transition: color $transition;
89
-    border-radius: 12px;
90
-    padding: 0.75rem 1rem;
91
-    transition: background-color 0.15s;
92
-
93
-    span {
94
-      margin-left: 0.5rem;
95
-    }
96
-
97
-    .menuitem-toggle-icon {
98
-      margin-left: auto;
99
-    }
100
-
101
-    &:focus {
102
-      outline: 0 none;
103
-      outline-offset: 0;
104
-      transition: box-shadow $transition;
105
-      box-shadow: inset var(--focus-ring);
106
-    }
107
-
108
-    &:hover {
109
-      background-color: var(--surface-hover);
110
-    }
111
-
112
-    &.router-link-exact-active {
113
-      font-weight: 700;
114
-      color: var(--primary-color);
115
-    }
116
-  }
117
-
118
-  ul {
119
-    list-style-type: none;
120
-    margin: 0;
121
-    padding: 0;
122
-
123
-    ul {
124
-      padding-left: 1rem;
125
-    }
126
-  }
127
-}
128
-</style>

+ 2
- 160
resources/js/layouts/Dashboard/Components/TopBar.vue Просмотреть файл

24
 <template>
24
 <template>
25
   <div class="layout-topbar">
25
   <div class="layout-topbar">
26
     <Link href="/" class="layout-topbar-logo">
26
     <Link href="/" class="layout-topbar-logo">
27
-      <img alt="Brand Logo" src="/images/logo.svg" class="md:mr-3" />
27
+      <img alt="Brand Logo" src="/images/logo.svg" />
28
       <span>{{ $page.props.company?.name ?? 'Your Company' }}</span>
28
       <span>{{ $page.props.company?.name ?? 'Your Company' }}</span>
29
     </Link>
29
     </Link>
30
 
30
 
31
     <button
31
     <button
32
       class="p-link layout-menu-button layout-topbar-button"
32
       class="p-link layout-menu-button layout-topbar-button"
33
-      @click="$emit('menu-toggle', $event)"
33
+      @click="$emit('menu-toggle')"
34
     >
34
     >
35
       <i class="pi pi-bars"></i>
35
       <i class="pi pi-bars"></i>
36
     </button>
36
     </button>
59
           class="p-link layout-topbar-button"
59
           class="p-link layout-topbar-button"
60
           v-tooltip.bottom="{
60
           v-tooltip.bottom="{
61
             value: 'Ubah Profil',
61
             value: 'Ubah Profil',
62
-            class: 'layout-topbar-menu-tooltip',
63
           }"
62
           }"
64
         >
63
         >
65
           <i class="pi pi-user"></i>
64
           <i class="pi pi-user"></i>
71
           class="p-link layout-topbar-button"
70
           class="p-link layout-topbar-button"
72
           v-tooltip.bottom="{
71
           v-tooltip.bottom="{
73
             value: 'Keluar',
72
             value: 'Keluar',
74
-            class: 'layout-topbar-menu-tooltip',
75
           }"
73
           }"
76
           @click="logout"
74
           @click="logout"
77
         >
75
         >
82
     </ul>
80
     </ul>
83
   </div>
81
   </div>
84
 </template>
82
 </template>
85
-
86
-<style lang="scss" scoped>
87
-$transition: 0.2s;
88
-
89
-@mixin focused() {
90
-  outline: 0 none;
91
-  outline-offset: 0;
92
-  transition: box-shadow $transition;
93
-  box-shadow: var(--focus-ring);
94
-}
95
-
96
-.layout-topbar {
97
-  position: fixed;
98
-  height: 5rem;
99
-  z-index: 994;
100
-  left: 0;
101
-  top: 0;
102
-  width: 100%;
103
-  padding: 0 2rem;
104
-  background-color: var(--surface-card);
105
-  transition: left $transition;
106
-  display: flex;
107
-  align-items: center;
108
-  box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.02), 0px 0px 2px rgba(0, 0, 0, 0.05),
109
-    0px 1px 4px rgba(0, 0, 0, 0.08);
110
-
111
-  .layout-topbar-logo {
112
-    display: flex;
113
-    align-items: center;
114
-    color: var(--surface-900);
115
-    font-size: 1.5rem;
116
-    font-weight: 500;
117
-    width: 300px;
118
-    border-radius: 12px;
119
-
120
-    img {
121
-      height: 2.5rem;
122
-      margin-right: 0.5rem;
123
-    }
124
-
125
-    &:focus {
126
-      @include focused();
127
-    }
128
-  }
129
-
130
-  .layout-topbar-button {
131
-    display: inline-flex;
132
-    justify-content: center;
133
-    align-items: center;
134
-    position: relative;
135
-    color: var(--text-color-secondary);
136
-    border-radius: 50%;
137
-    width: 3rem;
138
-    height: 3rem;
139
-    cursor: pointer;
140
-    transition: background-color $transition;
141
-
142
-    &:hover {
143
-      color: var(--text-color);
144
-      background-color: var(--surface-hover);
145
-    }
146
-
147
-    &:focus {
148
-      @include focused();
149
-    }
150
-
151
-    i {
152
-      font-size: 1.5rem;
153
-    }
154
-
155
-    span {
156
-      font-size: 1rem;
157
-      display: none;
158
-    }
159
-  }
160
-
161
-  .layout-menu-button {
162
-    margin-left: 2rem;
163
-  }
164
-
165
-  .layout-topbar-menu-button {
166
-    display: none;
167
-
168
-    i {
169
-      font-size: 1.25rem;
170
-    }
171
-  }
172
-
173
-  .layout-topbar-menu {
174
-    margin: 0 0 0 auto;
175
-    padding: 0;
176
-    list-style: none;
177
-    display: flex;
178
-
179
-    .layout-topbar-button {
180
-      margin-left: 1rem;
181
-    }
182
-  }
183
-}
184
-
185
-@media (max-width: 991px) {
186
-  .layout-topbar {
187
-    justify-content: space-between;
188
-
189
-    .layout-topbar-logo {
190
-      width: auto;
191
-      order: 2;
192
-    }
193
-
194
-    .layout-menu-button {
195
-      margin-left: 0;
196
-      order: 1;
197
-    }
198
-
199
-    .layout-topbar-menu-button {
200
-      display: inline-flex;
201
-      margin-left: 0;
202
-      order: 3;
203
-    }
204
-
205
-    .layout-topbar-menu {
206
-      margin-left: 0;
207
-      position: absolute;
208
-      flex-direction: column;
209
-      background-color: var(--surface-overlay);
210
-      box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.02),
211
-        0px 0px 2px rgba(0, 0, 0, 0.05), 0px 1px 4px rgba(0, 0, 0, 0.08);
212
-      border-radius: 4px;
213
-      padding: 1rem;
214
-      right: 2rem;
215
-      top: 5.5rem;
216
-      min-width: 15rem;
217
-
218
-      .layout-topbar-button {
219
-        margin-left: 0;
220
-        display: flex;
221
-        width: 100%;
222
-        height: auto;
223
-        justify-content: flex-start;
224
-        border-radius: 12px;
225
-        padding: 1rem;
226
-
227
-        i {
228
-          font-size: 1rem;
229
-          margin-right: 0.5rem;
230
-        }
231
-
232
-        span {
233
-          font-weight: medium;
234
-          display: block;
235
-        }
236
-      }
237
-    }
238
-  }
239
-}
240
-</style>

+ 2
- 106
resources/js/layouts/Dashboard/DashboardLayout.vue Просмотреть файл

22
 const containerClass = computed(() => {
22
 const containerClass = computed(() => {
23
   return [
23
   return [
24
     'layout-wrapper',
24
     'layout-wrapper',
25
+    'layout-static',
25
     {
26
     {
26
       'layout-static-sidebar-inactive': staticMenuInactive.value,
27
       'layout-static-sidebar-inactive': staticMenuInactive.value,
27
       'layout-mobile-sidebar-active': mobileMenuActive.value,
28
       'layout-mobile-sidebar-active': mobileMenuActive.value,
37
   menuClick.value = false
38
   menuClick.value = false
38
 }
39
 }
39
 
40
 
40
-const onMenuToggle = (event) => {
41
+const onMenuToggle = () => {
41
   menuClick.value = true
42
   menuClick.value = true
42
 
43
 
43
   if (isDesktop()) {
44
   if (isDesktop()) {
45
   } else {
46
   } else {
46
     mobileMenuActive.value = !mobileMenuActive.value
47
     mobileMenuActive.value = !mobileMenuActive.value
47
   }
48
   }
48
-
49
-  event.preventDefault()
50
 }
49
 }
51
 </script>
50
 </script>
52
 
51
 
80
     </Transition>
79
     </Transition>
81
   </div>
80
   </div>
82
 </template>
81
 </template>
83
-
84
-<style lang="scss" scoped>
85
-.layout-sidebar {
86
-  position: fixed;
87
-  width: 300px;
88
-  height: calc(100vh - 9rem);
89
-  z-index: 996;
90
-  overflow-y: auto;
91
-  user-select: none;
92
-  top: 7rem;
93
-  left: 2rem;
94
-  transition: transform 0.2s, left 0.2s;
95
-  background-color: var(--surface-overlay);
96
-  border-radius: 4px;
97
-  padding: 1.5rem;
98
-  box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.02), 0px 0px 2px rgba(0, 0, 0, 0.05),
99
-    0px 1px 4px rgba(0, 0, 0, 0.08);
100
-}
101
-
102
-.layout-main-container {
103
-  display: flex;
104
-  flex-direction: column;
105
-  min-height: 100vh;
106
-  justify-content: space-between;
107
-  padding: 7rem 2rem 2rem 4rem;
108
-  transition: margin-left 0.2s;
109
-}
110
-
111
-.layout-main {
112
-  flex: 1 1 auto;
113
-}
114
-
115
-.layout-footer {
116
-  transition: margin-left 0.2s;
117
-  display: flex;
118
-  align-items: center;
119
-  justify-content: center;
120
-  padding-top: 1rem;
121
-  border-top: 1px solid var(--surface-border);
122
-}
123
-
124
-@media (min-width: 992px) {
125
-  .layout-wrapper {
126
-    .layout-main-container {
127
-      margin-left: 300px;
128
-    }
129
-
130
-    &.layout-static-sidebar-inactive {
131
-      .layout-sidebar {
132
-        transform: translateX(-100%);
133
-        left: 0;
134
-      }
135
-
136
-      .layout-main-container {
137
-        margin-left: 0;
138
-        padding-left: 2rem;
139
-      }
140
-    }
141
-
142
-    .layout-mask {
143
-      display: none;
144
-    }
145
-  }
146
-}
147
-
148
-@media (max-width: 991px) {
149
-  .layout-wrapper {
150
-    .layout-main-container {
151
-      margin-left: 0;
152
-      padding-left: 2rem;
153
-    }
154
-
155
-    .layout-sidebar {
156
-      transform: translateX(-100%);
157
-      left: 0;
158
-      top: 0;
159
-      height: 100vh;
160
-      border-top-left-radius: 0;
161
-      border-bottom-left-radius: 0;
162
-    }
163
-
164
-    .layout-mask {
165
-      z-index: 995;
166
-      background-color: var(--maskbg);
167
-
168
-      &.layout-mask-enter-from,
169
-      &.layout-mask-leave-to {
170
-        background-color: transparent;
171
-      }
172
-    }
173
-
174
-    &.layout-mobile-sidebar-active {
175
-      .layout-sidebar {
176
-        transform: translateX(0);
177
-      }
178
-
179
-      .layout-mask {
180
-        display: block;
181
-      }
182
-    }
183
-  }
184
-}
185
-</style>

+ 2
- 0
resources/js/pages/Auth/Login.vue Просмотреть файл

25
       v-model="form.username"
25
       v-model="form.username"
26
       label="Nama Pengguna"
26
       label="Nama Pengguna"
27
       placeholder="nama pengguna"
27
       placeholder="nama pengguna"
28
+      label-class="text-900 text-xl font-medium mb-2"
28
       :error="form.errors.username"
29
       :error="form.errors.username"
29
     />
30
     />
30
 
31
 
32
       v-model="form.password"
33
       v-model="form.password"
33
       label="Kata Sandi"
34
       label="Kata Sandi"
34
       placeholder="Kata Sandi"
35
       placeholder="Kata Sandi"
36
+      label-class="text-900 text-xl font-medium mb-2"
35
       :error="form.errors.password"
37
       :error="form.errors.password"
36
     />
38
     />
37
 
39
 

+ 5
- 3
resources/js/vue.js Просмотреть файл

4
 import { InertiaProgress } from '@inertiajs/progress'
4
 import { InertiaProgress } from '@inertiajs/progress'
5
 import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'
5
 import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'
6
 
6
 
7
-import 'primeflex/primeflex.css'
8
-import 'primevue/resources/themes/mdc-light-indigo/theme.css'
9
 import 'primevue/resources/primevue.min.css'
7
 import 'primevue/resources/primevue.min.css'
8
+import 'primeflex/primeflex.css'
10
 import 'primeicons/primeicons.css'
9
 import 'primeicons/primeicons.css'
11
-import '../css/app.scss'
10
+import 'primevue/resources/themes/lara-light-indigo/theme.css'
11
+import '../css/layout.scss'
12
 import PrimeVue from 'primevue/config'
12
 import PrimeVue from 'primevue/config'
13
 import StyleClass from 'primevue/styleclass'
13
 import StyleClass from 'primevue/styleclass'
14
 import AutoComplete from 'primevue/autocomplete'
14
 import AutoComplete from 'primevue/autocomplete'
32
 import Message from 'primevue/message'
32
 import Message from 'primevue/message'
33
 import Password from 'primevue/password'
33
 import Password from 'primevue/password'
34
 import Row from 'primevue/row'
34
 import Row from 'primevue/row'
35
+import Ripple from 'primevue/ripple'
35
 import TabView from 'primevue/tabview'
36
 import TabView from 'primevue/tabview'
36
 import TabPanel from 'primevue/tabpanel'
37
 import TabPanel from 'primevue/tabpanel'
37
 import Tooltip from 'primevue/tooltip'
38
 import Tooltip from 'primevue/tooltip'
54
       .use(DialogService)
55
       .use(DialogService)
55
       .directive('styleclass', StyleClass)
56
       .directive('styleclass', StyleClass)
56
       .directive('tooltip', Tooltip)
57
       .directive('tooltip', Tooltip)
58
+      .directive('ripple', Ripple)
57
       .component('AutoComplete', AutoComplete)
59
       .component('AutoComplete', AutoComplete)
58
       .component('Button', Button)
60
       .component('Button', Button)
59
       .component('Badge', Badge)
61
       .component('Badge', Badge)