@exakt/ui 0.0.35 → 0.0.37
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/dist/module.json +1 -1
- package/dist/module.mjs +5 -1
- package/dist/runtime/components/e/alert.vue +4 -3
- package/dist/runtime/components/e/avatar.vue +3 -3
- package/dist/runtime/components/e/btn.vue +11 -45
- package/dist/runtime/components/e/chat-renderer.vue +1 -2
- package/dist/runtime/components/e/dialog.vue +1 -1
- package/dist/runtime/components/e/dropdown.vue +3 -2
- package/dist/runtime/components/e/icon.vue +50 -19
- package/dist/runtime/components/e/iconButton.vue +4 -2
- package/dist/runtime/components/e/input/text.vue +5 -3
- package/dist/runtime/components/e/nav/btn.vue +4 -2
- package/dist/runtime/components/e/nav/sidebar-btn.vue +6 -7
- package/dist/runtime/components/e/nav/sidebar-icon-btn.vue +30 -0
- package/dist/runtime/components/e/nav/sidebar.vue +162 -38
- package/dist/runtime/components/e/nav/titlebar.vue +17 -0
- package/dist/runtime/components/e/passwordEye.vue +1 -2
- package/dist/runtime/css/main.scss +8 -6
- package/dist/runtime/plugin.d.ts +1 -0
- package/dist/runtime/plugin.mjs +1 -0
- package/package.json +5 -5
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineNuxtModule, createResolver, addPlugin, extendViteConfig, addComponentsDir } from '@nuxt/kit';
|
|
1
|
+
import { defineNuxtModule, createResolver, addPlugin, extendViteConfig, addImportsSources, addComponentsDir } from '@nuxt/kit';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
|
|
4
4
|
const defaults = {
|
|
@@ -69,6 +69,10 @@ const module = defineNuxtModule({
|
|
|
69
69
|
}
|
|
70
70
|
});
|
|
71
71
|
});
|
|
72
|
+
addImportsSources({
|
|
73
|
+
from: "material-symbols",
|
|
74
|
+
imports: ["material-symbols"]
|
|
75
|
+
});
|
|
72
76
|
nuxt.options.css.push(resolver.resolve("./runtime/css/main.scss"));
|
|
73
77
|
nuxt.options.css.push(resolver.resolve("./runtime/css/util.scss"));
|
|
74
78
|
nuxt.options.css.push(
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="flex-center color-red">
|
|
3
3
|
<e-icon
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
size="19"
|
|
6
6
|
class="mr-2"
|
|
7
|
-
|
|
7
|
+
>
|
|
8
|
+
warning
|
|
9
|
+
</e-icon><small><slot /></small>
|
|
8
10
|
</div>
|
|
9
11
|
</template>
|
|
10
12
|
<script setup lang="ts">
|
|
11
|
-
import { mdiAlert } from "@mdi/js";
|
|
12
13
|
</script>
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
<div v-else>
|
|
15
15
|
<e-icon
|
|
16
16
|
:size="props.size"
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
>
|
|
18
|
+
person_circle
|
|
19
|
+
</e-icon>
|
|
19
20
|
</div>
|
|
20
21
|
</div>
|
|
21
22
|
</template>
|
|
22
23
|
<script setup lang="ts">
|
|
23
|
-
import { mdiAccountCircle } from "@mdi/js";
|
|
24
24
|
|
|
25
25
|
const props = withDefaults(defineProps<{
|
|
26
26
|
src?: string;
|
|
@@ -14,33 +14,25 @@
|
|
|
14
14
|
'my-2': solid,
|
|
15
15
|
loading,
|
|
16
16
|
fab,
|
|
17
|
-
loadingGradient,
|
|
18
17
|
colored: background !== 'transparent' || color || solid,
|
|
19
18
|
}"
|
|
20
19
|
>
|
|
21
|
-
<e-progress-gradient
|
|
22
|
-
v-if="loading && loadingGradient"
|
|
23
|
-
class="prog-grad"
|
|
24
|
-
color="primary"
|
|
25
|
-
/>
|
|
26
|
-
|
|
27
20
|
<div
|
|
28
21
|
ref="content"
|
|
29
22
|
class="e-btn-content"
|
|
30
|
-
:style="contentStyles"
|
|
31
23
|
>
|
|
32
24
|
<div
|
|
33
|
-
v-if="loading
|
|
25
|
+
v-if="loading"
|
|
34
26
|
class="load-overlay"
|
|
35
27
|
>
|
|
36
28
|
<e-loading-spinner />
|
|
37
29
|
</div>
|
|
38
30
|
<span
|
|
39
|
-
class="actual-content d-flex"
|
|
40
|
-
:class="{ fullwidth: props.justify == 'space-between' }"
|
|
31
|
+
class="actual-content d-flex fullwidth"
|
|
41
32
|
:style="{
|
|
42
|
-
justifyContent:
|
|
43
|
-
|
|
33
|
+
justifyContent: justify,
|
|
34
|
+
alignContent: props.align,
|
|
35
|
+
alignItems: props.align,
|
|
44
36
|
}"
|
|
45
37
|
>
|
|
46
38
|
<slot />
|
|
@@ -49,7 +41,7 @@
|
|
|
49
41
|
</button>
|
|
50
42
|
</template>
|
|
51
43
|
<script lang="ts" setup>
|
|
52
|
-
import { computed, useNuxtApp
|
|
44
|
+
import { computed, useNuxtApp, } from "#imports";
|
|
53
45
|
//import { IonSpinner } from "@ionic/vue";
|
|
54
46
|
const { $exakt } = useNuxtApp();
|
|
55
47
|
const props = withDefaults(
|
|
@@ -63,7 +55,6 @@ const props = withDefaults(
|
|
|
63
55
|
background?: string;
|
|
64
56
|
block?: boolean;
|
|
65
57
|
loading?: boolean;
|
|
66
|
-
loadingGradient?: boolean;
|
|
67
58
|
fab?: boolean;
|
|
68
59
|
disabled?: boolean;
|
|
69
60
|
align?: string;
|
|
@@ -80,15 +71,6 @@ const props = withDefaults(
|
|
|
80
71
|
}
|
|
81
72
|
);
|
|
82
73
|
|
|
83
|
-
|
|
84
|
-
const contentStyles = computed(() => {
|
|
85
|
-
if (props.justify === "space-between") {
|
|
86
|
-
return "justify-content:stretch; flex-grow: 1";
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return "";
|
|
90
|
-
});
|
|
91
|
-
|
|
92
74
|
function parseColor(input: string) {
|
|
93
75
|
const div = document.createElement("div");
|
|
94
76
|
document.body.appendChild(div);
|
|
@@ -115,8 +97,8 @@ const textColor = computed(() => {
|
|
|
115
97
|
if (props.color) {
|
|
116
98
|
return props.color;
|
|
117
99
|
}
|
|
118
|
-
if (props.background ==
|
|
119
|
-
return
|
|
100
|
+
if (props.background == "transparent") {
|
|
101
|
+
return "var(--e-color-dark)";
|
|
120
102
|
}
|
|
121
103
|
const rgb = backgroundColorRgb.value;
|
|
122
104
|
|
|
@@ -140,12 +122,6 @@ const hoverColor = computed(() => {
|
|
|
140
122
|
});
|
|
141
123
|
</script>
|
|
142
124
|
<style lang="scss" scoped>
|
|
143
|
-
.prog-grad {
|
|
144
|
-
position: absolute;
|
|
145
|
-
top: 0;
|
|
146
|
-
left: 0;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
125
|
.e-btn-content {
|
|
150
126
|
transition: transform 0.1s ease-in-out;
|
|
151
127
|
flex-direction: row;
|
|
@@ -153,7 +129,8 @@ const hoverColor = computed(() => {
|
|
|
153
129
|
position: relative;
|
|
154
130
|
align-content: center;
|
|
155
131
|
align-items: center;
|
|
156
|
-
justify-content:
|
|
132
|
+
justify-content: stretch;
|
|
133
|
+
flex-grow: 1;
|
|
157
134
|
}
|
|
158
135
|
|
|
159
136
|
.e-btn {
|
|
@@ -162,7 +139,7 @@ const hoverColor = computed(() => {
|
|
|
162
139
|
display: flex;
|
|
163
140
|
font-size: 1rem;
|
|
164
141
|
|
|
165
|
-
justify-content:
|
|
142
|
+
justify-content: stretch;
|
|
166
143
|
align-content: center;
|
|
167
144
|
align-items: center;
|
|
168
145
|
padding: 0.3rem var(--e-core-padding-x);
|
|
@@ -190,17 +167,6 @@ const hoverColor = computed(() => {
|
|
|
190
167
|
&.loading {
|
|
191
168
|
pointer-events: none;
|
|
192
169
|
|
|
193
|
-
&.loadingGradient {
|
|
194
|
-
background: rgba(0, 0, 0, 0) !important;
|
|
195
|
-
color: var(--e-color-dark) !important;
|
|
196
|
-
transition: background 0.8s, color 0.5s, opacity 0.4s;
|
|
197
|
-
|
|
198
|
-
.actual-content {
|
|
199
|
-
opacity: 0.8;
|
|
200
|
-
transition: opacity 0.5s;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
170
|
.actual-content {
|
|
205
171
|
opacity: 0;
|
|
206
172
|
}
|
|
@@ -19,11 +19,10 @@
|
|
|
19
19
|
</div>
|
|
20
20
|
</template>
|
|
21
21
|
<script setup lang="ts">
|
|
22
|
-
import { mdiDelete, mdiFlag, mdiMinusCircle } from "@mdi/js";
|
|
23
22
|
import { reactive, computed } from "#imports";
|
|
24
23
|
|
|
25
24
|
const status = reactive({ dropdown: { visible: false, x: 0, y: 0 } });
|
|
26
|
-
const items = [{ icon:
|
|
25
|
+
const items = [{ icon: 'delete', name: "Delete" }, { icon: 'remove', name: "Delete just for me" }, { icon: 'flag', name: "Dox" }];
|
|
27
26
|
|
|
28
27
|
const openDropdown = ({ clientX, clientY }: MouseEvent) => {
|
|
29
28
|
status.dropdown.visible = true;
|
|
@@ -1,30 +1,61 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
:
|
|
5
|
-
:width="size"
|
|
6
|
-
:fill="color"
|
|
2
|
+
<div
|
|
3
|
+
class="material-symbol"
|
|
4
|
+
:icon-style="iconStyle"
|
|
7
5
|
>
|
|
8
|
-
|
|
9
|
-
</
|
|
6
|
+
person
|
|
7
|
+
</div>
|
|
10
8
|
</template>
|
|
11
9
|
<script setup lang="ts">
|
|
12
|
-
|
|
10
|
+
import { computed } from "#imports";
|
|
11
|
+
|
|
12
|
+
const props = withDefaults(
|
|
13
13
|
defineProps<{
|
|
14
|
-
|
|
15
|
-
color?: string;
|
|
16
|
-
size?: number | string;
|
|
14
|
+
iconStyle?: 'outlined' | 'rounded' | 'sharp', size?: number|`${number}`, fill?:boolean|"0"|"1"|`${boolean}`, grade?:number|`${number}`, weight?: number|`${number}`
|
|
17
15
|
}>(),
|
|
18
|
-
{
|
|
19
|
-
icon: "",
|
|
20
|
-
color: "",
|
|
21
|
-
size: "21",
|
|
22
|
-
}
|
|
16
|
+
{ iconStyle: 'rounded', size: 24, fill:false, weight: 400, grade:0}
|
|
23
17
|
);
|
|
24
18
|
|
|
19
|
+
const sizePx = computed(() => props.size + "px")
|
|
20
|
+
const fillNum = computed(()=> {
|
|
21
|
+
if([true, "true", "1"].includes(props.fill)){
|
|
22
|
+
return 1;
|
|
23
|
+
}
|
|
24
|
+
return 0;
|
|
25
|
+
})
|
|
26
|
+
|
|
25
27
|
</script>
|
|
26
|
-
<style
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
<style lang="scss">
|
|
29
|
+
.material-symbol {
|
|
30
|
+
font-weight: normal;
|
|
31
|
+
font-style: normal;
|
|
32
|
+
/* Preferred icon size */
|
|
33
|
+
display: inline-block;
|
|
34
|
+
line-height: 1;
|
|
35
|
+
text-transform: none;
|
|
36
|
+
letter-spacing: normal;
|
|
37
|
+
word-wrap: normal;
|
|
38
|
+
white-space: nowrap;
|
|
39
|
+
direction: ltr;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.material-symbol[icon-style="outlined"] {
|
|
43
|
+
font-family: 'Material Symbols Outlined';
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.material-symbol[icon-style="rounded"] {
|
|
47
|
+
font-family: 'Material Symbols Rounded';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.material-symbol[icon-style="sharp"] {
|
|
51
|
+
font-family: 'Material Symbols Sharp';
|
|
29
52
|
}
|
|
30
53
|
</style>
|
|
54
|
+
<style scoped lang="scss">
|
|
55
|
+
.material-symbol {
|
|
56
|
+
font-size: v-bind('sizePx');
|
|
57
|
+
width: v-bind('sizePx');
|
|
58
|
+
height: v-bind('sizePx');
|
|
59
|
+
font-variation-settings: 'FILL' v-bind('fillNum'), 'wght' v-bind('props.weight'), 'GRAD' v-bind('props.grade'), 'opsz' v-bind('props.size');
|
|
60
|
+
}
|
|
61
|
+
</style>
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
<nuxt-link :to="to">
|
|
3
3
|
<e-btn
|
|
4
4
|
:solid="false"
|
|
5
|
-
justify="
|
|
6
|
-
block
|
|
5
|
+
justify="start"
|
|
6
|
+
:block="true"
|
|
7
7
|
background="transparent"
|
|
8
8
|
class="pa-0 ma-0 e-sidebar-btn"
|
|
9
9
|
>
|
|
@@ -12,9 +12,11 @@
|
|
|
12
12
|
class="e-sidebar-btn-icon"
|
|
13
13
|
>
|
|
14
14
|
<e-icon
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
size="22"
|
|
17
|
-
|
|
17
|
+
>
|
|
18
|
+
{{ icon }}
|
|
19
|
+
</e-icon>
|
|
18
20
|
</div>
|
|
19
21
|
<div class="ml-4 d-flex flex-column e-sidebar-btn-text">
|
|
20
22
|
<div class="mb-1">
|
|
@@ -49,9 +51,6 @@ defineProps<{
|
|
|
49
51
|
position: relative;
|
|
50
52
|
}
|
|
51
53
|
.e-sidebar-btn {
|
|
52
|
-
width: 100%;
|
|
53
|
-
flex-grow: 0;
|
|
54
|
-
flex-shrink: 0;
|
|
55
54
|
min-height: 5rem;
|
|
56
55
|
}
|
|
57
56
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<nuxt-link to="/sidebar">
|
|
3
|
+
<e-btn
|
|
4
|
+
:solid="false"
|
|
5
|
+
justify="center"
|
|
6
|
+
:block="true"
|
|
7
|
+
background="transparent"
|
|
8
|
+
class="pa-0 ma-0 e-sidebar-icon"
|
|
9
|
+
>
|
|
10
|
+
<e-icon
|
|
11
|
+
|
|
12
|
+
size="22"
|
|
13
|
+
>
|
|
14
|
+
home
|
|
15
|
+
</e-icon>
|
|
16
|
+
</e-btn>
|
|
17
|
+
</nuxt-link>
|
|
18
|
+
</template>
|
|
19
|
+
<script lang="ts" setup>
|
|
20
|
+
</script>
|
|
21
|
+
<style lang="scss">
|
|
22
|
+
|
|
23
|
+
.router-link-active .e-sidebar-icon, .router-link-exact-active .e-sidebar-icon {
|
|
24
|
+
background-color: rgba(var(--e-color-primary-rgb), 0.25);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.e-sidebar-icon {
|
|
28
|
+
min-height: 5rem;
|
|
29
|
+
}
|
|
30
|
+
</style>
|
|
@@ -1,76 +1,200 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
class="e-sidebar d-flex flex-column justify-start"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
<div>
|
|
3
|
+
<div class="e-sidebar collapsed d-flex flex-column justify-start">
|
|
4
|
+
<slot name="collapsed" />
|
|
5
|
+
|
|
6
|
+
<nuxt-link
|
|
7
|
+
v-for="(item, i) in props.items"
|
|
8
|
+
:key="i"
|
|
9
|
+
:to="item.to"
|
|
10
|
+
>
|
|
11
|
+
<e-btn
|
|
12
|
+
:solid="false"
|
|
13
|
+
justify="center"
|
|
14
|
+
:block="true"
|
|
15
|
+
background="transparent"
|
|
16
|
+
class="pa-0 ma-0 e-sidebar-btn"
|
|
17
|
+
>
|
|
18
|
+
<e-icon size="22">
|
|
19
|
+
{{ item.icon }}
|
|
20
|
+
</e-icon>
|
|
21
|
+
</e-btn>
|
|
22
|
+
</nuxt-link>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="extended e-sidebar">
|
|
25
|
+
<slot name="extension" />
|
|
26
|
+
|
|
27
|
+
<nuxt-link
|
|
28
|
+
v-for="(item, i) in props.items"
|
|
29
|
+
:key="i"
|
|
30
|
+
:to="item.to"
|
|
31
|
+
>
|
|
32
|
+
<e-btn
|
|
33
|
+
:solid="false"
|
|
34
|
+
justify="start"
|
|
35
|
+
:block="true"
|
|
36
|
+
background="transparent"
|
|
37
|
+
class="pa-0 ma-0 e-sidebar-btn"
|
|
38
|
+
>
|
|
39
|
+
<div
|
|
40
|
+
v-if="item.icon"
|
|
41
|
+
class="icon"
|
|
42
|
+
>
|
|
43
|
+
<e-icon size="22">
|
|
44
|
+
{{ item.icon }}
|
|
45
|
+
</e-icon>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="ml-4 d-flex flex-column text">
|
|
48
|
+
<div :class="{ 'mb-1': item.subtitle }">
|
|
49
|
+
{{ item.title }}
|
|
50
|
+
</div>
|
|
51
|
+
<div
|
|
52
|
+
v-if="item.subtitle"
|
|
53
|
+
class="text-secondary"
|
|
54
|
+
>
|
|
55
|
+
{{ item.subtitle }}
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</e-btn>
|
|
59
|
+
</nuxt-link>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<div class="app-content">
|
|
63
|
+
<slot name="app" />
|
|
64
|
+
</div>
|
|
11
65
|
</div>
|
|
12
66
|
</template>
|
|
13
67
|
<script setup lang="ts">
|
|
14
|
-
import { reactive } from "#imports";
|
|
68
|
+
import { computed, reactive } from "#imports";
|
|
15
69
|
const props = withDefaults(
|
|
16
70
|
defineProps<{
|
|
17
71
|
collapsedWidth?: number | string;
|
|
18
|
-
|
|
72
|
+
expandedWidth?: number | string;
|
|
73
|
+
buttonHeight: string;
|
|
74
|
+
items: {
|
|
75
|
+
title: string;
|
|
76
|
+
icon: string;
|
|
77
|
+
subtitle?: string;
|
|
78
|
+
to: string;
|
|
79
|
+
position?: "top" | "bottom";
|
|
80
|
+
}[];
|
|
81
|
+
elev: 1 | 2 | 3 | "1" | "2" | "3";
|
|
82
|
+
moveContent: number;
|
|
83
|
+
nestingLevel: number;
|
|
19
84
|
}>(),
|
|
20
|
-
{
|
|
85
|
+
{
|
|
86
|
+
collapsedWidth: "3.5rem",
|
|
87
|
+
expandedWidth: "20rem",
|
|
88
|
+
buttonHeight: "3.5rem",
|
|
89
|
+
elev: 2,
|
|
90
|
+
moveContent: 0.5,
|
|
91
|
+
nestingLevel: 0,
|
|
92
|
+
}
|
|
21
93
|
);
|
|
22
94
|
const state = reactive({
|
|
23
95
|
hover: false,
|
|
24
96
|
});
|
|
97
|
+
|
|
98
|
+
const background = computed(() =>
|
|
99
|
+
Number(props.elev) == 1
|
|
100
|
+
? "var(--e-color-elev)"
|
|
101
|
+
: `var(--e-color-elev-${props.elev})`
|
|
102
|
+
);
|
|
25
103
|
</script>
|
|
26
104
|
<style lang="scss" scoped>
|
|
27
105
|
.e-sidebar,
|
|
28
|
-
.
|
|
106
|
+
.app-content {
|
|
29
107
|
--collapsed-sidebar-width: v-bind(collapsedWidth);
|
|
30
|
-
--expanded-sidebar-width:
|
|
31
|
-
--
|
|
32
|
-
var(--expanded-sidebar-width) - var(--collapsed-sidebar-width)
|
|
33
|
-
);
|
|
34
|
-
|
|
108
|
+
--expanded-sidebar-width: v-bind(expandedWidth);
|
|
109
|
+
--btn-height: v-bind(buttonHeight);
|
|
35
110
|
|
|
111
|
+
--expansion-amount: calc(
|
|
112
|
+
var(--expanded-sidebar-width) - var(--collapsed-sidebar-width)
|
|
113
|
+
);
|
|
114
|
+
--reveal-duration: 0.25s;
|
|
36
115
|
}
|
|
37
116
|
.e-sidebar {
|
|
38
|
-
|
|
39
|
-
height: 100vh;
|
|
40
|
-
width: var(--collapsed-sidebar-width);
|
|
41
|
-
z-index: 5;
|
|
117
|
+
height: 100%;
|
|
42
118
|
position: fixed;
|
|
43
119
|
left: 0;
|
|
44
|
-
|
|
45
|
-
background-color:
|
|
46
|
-
overflow
|
|
47
|
-
|
|
120
|
+
|
|
121
|
+
background-color: v-bind("background");
|
|
122
|
+
overflow: clip;
|
|
123
|
+
top: calc(var(--btn-height) * v-bind("props.nestingLevel"));
|
|
48
124
|
|
|
125
|
+
&:hover ~ .app-content {
|
|
126
|
+
transform: translateX(
|
|
127
|
+
calc(var(--expansion-amount) * v-bind("props.moveContent"))
|
|
128
|
+
);
|
|
129
|
+
}
|
|
49
130
|
|
|
50
|
-
|
|
131
|
+
&.collapsed {
|
|
132
|
+
width: var(--collapsed-sidebar-width);
|
|
133
|
+
z-index: 6;
|
|
134
|
+
padding-left: calc(
|
|
135
|
+
var(--collapsed-sidebar-width) * v-bind("props.nestingLevel")
|
|
136
|
+
);
|
|
51
137
|
|
|
52
|
-
|
|
138
|
+
&:hover ~ .extended {
|
|
139
|
+
transform: translateX(
|
|
140
|
+
calc(var(--collapsed-sidebar-width) * v-bind("props.nestingLevel"))
|
|
141
|
+
);
|
|
142
|
+
}
|
|
53
143
|
}
|
|
54
|
-
|
|
144
|
+
|
|
145
|
+
&.extended {
|
|
146
|
+
z-index: 5;
|
|
55
147
|
width: var(--expanded-sidebar-width);
|
|
148
|
+
position: fixed;
|
|
149
|
+
// transform: translateX(calc(-1 * var(--expanded-sidebar-width)));
|
|
150
|
+
transform: translateX(-100%);
|
|
151
|
+
transition: transform var(--reveal-duration) ease-in-out;
|
|
56
152
|
|
|
153
|
+
&:hover {
|
|
154
|
+
transform: translateX(
|
|
155
|
+
calc(var(--collapsed-sidebar-width) * v-bind("props.nestingLevel"))
|
|
156
|
+
);
|
|
157
|
+
}
|
|
57
158
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
159
|
}
|
|
61
160
|
|
|
62
|
-
.
|
|
63
|
-
transition: transform
|
|
161
|
+
.app-content {
|
|
162
|
+
transition: transform var(--reveal-duration) ease-in-out;
|
|
64
163
|
background-color: var(--e-color-light);
|
|
65
164
|
width: 100%;
|
|
66
|
-
width: -
|
|
67
|
-
width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
|
|
68
|
-
width: fill-available;
|
|
165
|
+
width: fill-available;
|
|
69
166
|
height: 100%;
|
|
70
|
-
left:
|
|
167
|
+
left: 0;
|
|
168
|
+
padding-left: var(--collapsed-sidebar-width);
|
|
71
169
|
top: 0rem;
|
|
72
|
-
|
|
170
|
+
position: absolute;
|
|
171
|
+
transform: translateX(0);
|
|
73
172
|
}
|
|
74
173
|
|
|
174
|
+
.e-sidebar-btn {
|
|
175
|
+
min-height: var(--btn-height);
|
|
176
|
+
|
|
177
|
+
.icon {
|
|
178
|
+
min-width: calc(
|
|
179
|
+
var(--collapsed-sidebar-width) - 0.1rem * 2
|
|
180
|
+
); // Compensate the btn's accessibility border
|
|
75
181
|
|
|
182
|
+
display: block;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.text {
|
|
186
|
+
text-align: left;
|
|
187
|
+
max-width: calc(var(--expansion-amount) - 0.1rem * 2);
|
|
188
|
+
|
|
189
|
+
display: block;
|
|
190
|
+
flex-grow: 0;
|
|
191
|
+
flex-shrink: 0;
|
|
192
|
+
position: relative;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.router-link-active .e-sidebar-btn,
|
|
197
|
+
.router-link-exact-active .e-sidebar-btn {
|
|
198
|
+
background-color: rgba(var(--e-color-primary-rgb), 0.25);
|
|
199
|
+
}
|
|
76
200
|
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
<template>
|
|
4
|
+
<div class="titlebar d-flex flex-align-center">
|
|
5
|
+
<h4>Title</h4>
|
|
6
|
+
</div>
|
|
7
|
+
</template>
|
|
8
|
+
<style lang="scss" scoped>
|
|
9
|
+
.titlebar{
|
|
10
|
+
position: sticky;
|
|
11
|
+
top:0;
|
|
12
|
+
left:0;
|
|
13
|
+
height:3.5rem;
|
|
14
|
+
padding-left: 3.5rem;
|
|
15
|
+
background-color: var(--e-color-elev-2);
|
|
16
|
+
}
|
|
17
|
+
</style>
|
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
<e-icon-button
|
|
3
3
|
class="rounded pa-1"
|
|
4
4
|
size="20"
|
|
5
|
-
:icon="modelValue ?
|
|
5
|
+
:icon="modelValue ? 'visibility' : 'visibility_off'"
|
|
6
6
|
@click.stop="emit('update:modelValue', !modelValue)"
|
|
7
7
|
/>
|
|
8
8
|
</template>
|
|
9
9
|
<script setup lang="ts">
|
|
10
|
-
import { mdiEye, mdiEyeOff } from "@mdi/js";
|
|
11
10
|
const emit = defineEmits(["update:modelValue"]);
|
|
12
11
|
|
|
13
12
|
withDefaults(
|
|
@@ -8,7 +8,6 @@ $root-red-rgb: red($root-red), green($root-red), blue($root-red);
|
|
|
8
8
|
$root-blue-rgb: red($root-blue), green($root-blue), blue($root-blue);
|
|
9
9
|
$root-yellow-rgb: red($root-yellow), green($root-yellow), blue($root-yellow);
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
.rounded {
|
|
13
12
|
border-radius: var(--e-rounded-border-radius);
|
|
14
13
|
}
|
|
@@ -66,17 +65,20 @@ a,
|
|
|
66
65
|
|
|
67
66
|
@mixin elev($source, $lightness) {
|
|
68
67
|
$root-elev: color.scale($source, $lightness: $lightness);
|
|
69
|
-
$root-elev-2: color.scale($source, $lightness: $lightness *
|
|
68
|
+
$root-elev-2: color.scale($source, $lightness: $lightness * 1.5);
|
|
69
|
+
$root-elev-3: color.scale($source, $lightness: $lightness * 2);
|
|
70
|
+
|
|
70
71
|
|
|
71
72
|
--e-color-elev: #{$root-elev};
|
|
72
73
|
--e-color-elev-rgb: #{red($root-elev), green($root-elev), blue($root-elev)};
|
|
73
74
|
|
|
74
75
|
--e-color-elev-2: #{$root-elev-2};
|
|
75
76
|
--e-color-elev-2-rgb: #{red($root-elev-2), green($root-elev-2),
|
|
76
|
-
|
|
77
|
-
}
|
|
77
|
+
blue($root-elev-2)};
|
|
78
78
|
|
|
79
|
-
;
|
|
79
|
+
--e-color-elev-3: #{$root-elev-3};
|
|
80
|
+
--e-color-elev-3-rgb: #{red($root-elev-3), green($root-elev-3),
|
|
81
|
+
blue($root-elev-3)};
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
:root {
|
|
@@ -101,4 +103,4 @@ a,
|
|
|
101
103
|
color-scheme: dark;
|
|
102
104
|
@include elev($root-dark, 5%);
|
|
103
105
|
}
|
|
104
|
-
}
|
|
106
|
+
}
|
package/dist/runtime/plugin.d.ts
CHANGED
package/dist/runtime/plugin.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exakt/ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.37",
|
|
4
4
|
"description": "A UI library for Nuxt.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
],
|
|
19
19
|
"scripts": {
|
|
20
20
|
"prepack": "nuxt-module-build",
|
|
21
|
-
"dev": "nuxi dev playground",
|
|
21
|
+
"dev": "nuxi dev playground --host 0.0.0.0",
|
|
22
22
|
"dev:build": "nuxi build playground",
|
|
23
23
|
"dev:prepare": "nuxt-module-build --stub && nuxi prepare playground",
|
|
24
24
|
"release": "npm run lint && npm run test && npm run prepack && changelogen --release && npm publish && git push --follow-tags",
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"test:watch": "vitest watch"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@mdi/js": "^7.1.96",
|
|
31
30
|
"@nuxt/kit": "^3.2.3",
|
|
32
31
|
"blurhash": "^2.0.5",
|
|
33
32
|
"lodash-es": "^4.17.21",
|
|
33
|
+
"material-symbols": "latest",
|
|
34
34
|
"sass": "^1.62.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"eslint": "^8.35.0",
|
|
46
46
|
"eslint-plugin-unused-imports": "^3.0.0",
|
|
47
47
|
"mkdist": "^1.2.0",
|
|
48
|
-
"nuxt": "^3.
|
|
48
|
+
"nuxt": "^3.12.4",
|
|
49
49
|
"vitest": "^0.29.2"
|
|
50
50
|
},
|
|
51
51
|
"directories": {
|
|
@@ -68,4 +68,4 @@
|
|
|
68
68
|
},
|
|
69
69
|
"homepage": "https://github.com/wd-4000/exakt#readme",
|
|
70
70
|
"packageManager": "yarn@3.5.1"
|
|
71
|
-
}
|
|
71
|
+
}
|