@flux-ui/dashboard 3.0.0-next.6 → 3.0.0-next.61
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/README.md +26 -35
- package/dist/component/FluxDashboard.vue.d.ts +2 -3
- package/dist/component/FluxDashboardContent.vue.d.ts +2 -2
- package/dist/component/FluxDashboardHeader.vue.d.ts +2 -2
- package/dist/component/FluxDashboardMenu.vue.d.ts +3 -3
- package/dist/component/FluxDashboardNavigation.vue.d.ts +2 -2
- package/dist/component/FluxDashboardSide.vue.d.ts +2 -2
- package/dist/component/FluxDashboardTopBar.vue.d.ts +2 -2
- package/dist/component/index.d.ts +0 -1
- package/dist/composable/index.d.ts +0 -1
- package/dist/composable/useDashboardInjection.d.ts +0 -1
- package/dist/data/index.d.ts +0 -1
- package/dist/index.css +427 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +3690 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +13 -0
- package/package.json +23 -21
- package/src/component/FluxDashboard.vue +4 -4
- package/src/component/FluxDashboardContent.vue +2 -2
- package/src/component/FluxDashboardHeader.vue +1 -1
- package/src/component/FluxDashboardMenu.vue +6 -4
- package/src/component/FluxDashboardNavigation.vue +2 -2
- package/src/component/FluxDashboardSide.vue +1 -1
- package/src/component/FluxDashboardTopBar.vue +2 -2
- package/src/composable/useDashboardInjection.ts +1 -1
- package/src/css/component/Dashboard.module.scss +5 -4
- package/src/css/component/DashboardContent.module.scss +9 -9
- package/src/css/component/DashboardNavigation.module.scss +13 -11
- package/src/css/component/DashboardPane.module.scss +7 -7
- package/src/css/component/DashboardTopBar.module.scss +7 -7
- package/dist/component/FluxDashboard.vue.d.ts.map +0 -1
- package/dist/component/FluxDashboardContent.vue.d.ts.map +0 -1
- package/dist/component/FluxDashboardHeader.vue.d.ts.map +0 -1
- package/dist/component/FluxDashboardMenu.vue.d.ts.map +0 -1
- package/dist/component/FluxDashboardNavigation.vue.d.ts.map +0 -1
- package/dist/component/FluxDashboardSide.vue.d.ts.map +0 -1
- package/dist/component/FluxDashboardTopBar.vue.d.ts.map +0 -1
- package/dist/component/index.d.ts.map +0 -1
- package/dist/composable/index.d.ts.map +0 -1
- package/dist/composable/useDashboardInjection.d.ts.map +0 -1
- package/dist/data/index.d.ts.map +0 -1
- package/dist/flux-dashboard.css +0 -1
- package/dist/flux-dashboard.js +0 -221
- package/dist/flux-dashboard.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/tsconfig.json +0 -45
package/README.md
CHANGED
|
@@ -1,45 +1,36 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `@flux-ui/dashboard`
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
targets Vue 3+. Please read the following instructions and checks in order to proceed.
|
|
3
|
+
Layout components for building dashboards with [Flux UI](https://flux-ui.dev).
|
|
5
4
|
|
|
6
|
-
##
|
|
5
|
+
## Highlights
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
- The Dashboard library package is available under `@flux-ui/dashboard`.
|
|
10
|
-
- The internal package is available under `@flux-ui/internals`.
|
|
7
|
+
Composable shell components:
|
|
11
8
|
|
|
12
|
-
|
|
9
|
+
- `FluxDashboard` — root container.
|
|
10
|
+
- `FluxDashboardContent` — main content region.
|
|
11
|
+
- `FluxDashboardSide` — sidebar slot.
|
|
12
|
+
- `FluxDashboardNavigation` — navigation rail.
|
|
13
|
+
- `FluxDashboardTopBar` — top bar.
|
|
14
|
+
- `FluxDashboardHeader` — page-level header.
|
|
15
|
+
- `FluxDashboardMenu` — menu primitive.
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
- Install pnpm using `npm i -g pnpm`.
|
|
16
|
-
- Configure a new environment variable `FONTAWESOME_NPM_AUTH_TOKEN`. This should be a valid Font Awesome private npm auth token.
|
|
17
|
-
- Use `pnpm install` to install the required packages.
|
|
18
|
-
- Use `pnpm dev` to start a build watcher for both targets.
|
|
19
|
-
- Use `pnpm build` to build a production bundle.
|
|
20
|
-
- Use `pnpm link` to link the dist folder of flux to your global node_modules.
|
|
17
|
+
## ⭐️ Prerequisites
|
|
21
18
|
|
|
22
|
-
|
|
19
|
+
- Bun >= 1.2.13
|
|
20
|
+
- Node >= 23
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
## 🚀 Getting started
|
|
25
23
|
|
|
26
|
-
|
|
24
|
+
1. Make sure the Flux monorepo is checked out.
|
|
25
|
+
2. Run `bun install` in the project root.
|
|
26
|
+
3. Run `bun run --cwd packages/dashboard build` to build the package (runs `vue-tsc` then `vite build`).
|
|
27
|
+
4. To link Flux Dashboard globally with Bun, run `bun link --cwd packages/dashboard`.
|
|
28
|
+
- In another project, use `link:@flux-ui/dashboard` as the dependency version in `package.json`.
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
- **Develop** — Contains the latest staging release that is marked for deployment and is the exact source that is running on staging.
|
|
30
|
-
- **Feature branches** — Any feature should have its own feature branch. Once complete, the branch should be merged into the _develop_ branch and the feature branch should be deleted.
|
|
31
|
-
- **Bugfix branches** — When a bug is found, it should be fixed within a bugfix branch. Once complete the branch should be merged into the _develop_ branch and the feature branch should be deleted.
|
|
30
|
+
## 📦 Sibling packages
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
- `<type>(<feature>): <message>`
|
|
39
|
-
- `<type>(<feature>): <message> [<issue-number>]`
|
|
40
|
-
|
|
41
|
-
#### Examples
|
|
42
|
-
|
|
43
|
-
- `feat(expandable): adds header slot to expandable.`
|
|
44
|
-
- `feat(expandable): adds header slot to expandable. [FLUX-123]`
|
|
45
|
-
- `chore: adds vue 3 build target.`
|
|
32
|
+
- [`@flux-ui/components`](../components)
|
|
33
|
+
- [`@flux-ui/types`](../types)
|
|
34
|
+
- [`@flux-ui/internals`](../internals)
|
|
35
|
+
- [`@flux-ui/statistics`](../statistics)
|
|
36
|
+
- [`@flux-ui/application`](../application)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VNode } from 'vue';
|
|
1
|
+
import { VNode, DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
|
|
2
2
|
declare function __VLS_template(): {
|
|
3
3
|
attrs: Partial<{}>;
|
|
4
4
|
slots: Readonly<{
|
|
@@ -18,7 +18,7 @@ declare function __VLS_template(): {
|
|
|
18
18
|
rootEl: HTMLDivElement;
|
|
19
19
|
};
|
|
20
20
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
21
|
-
declare const __VLS_component:
|
|
21
|
+
declare const __VLS_component: DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
|
|
22
22
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
23
23
|
export default _default;
|
|
24
24
|
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
@@ -26,4 +26,3 @@ type __VLS_WithTemplateSlots<T, S> = T & {
|
|
|
26
26
|
$slots: S;
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
|
-
//# sourceMappingURL=FluxDashboard.vue.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
|
|
1
2
|
declare function __VLS_template(): {
|
|
2
3
|
attrs: Partial<{}>;
|
|
3
4
|
slots: {
|
|
@@ -7,7 +8,7 @@ declare function __VLS_template(): {
|
|
|
7
8
|
rootEl: HTMLElement;
|
|
8
9
|
};
|
|
9
10
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
10
|
-
declare const __VLS_component:
|
|
11
|
+
declare const __VLS_component: DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLElement>;
|
|
11
12
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
12
13
|
export default _default;
|
|
13
14
|
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
@@ -15,4 +16,3 @@ type __VLS_WithTemplateSlots<T, S> = T & {
|
|
|
15
16
|
$slots: S;
|
|
16
17
|
};
|
|
17
18
|
};
|
|
18
|
-
//# sourceMappingURL=FluxDashboardContent.vue.d.ts.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FluxIconName } from '@flux-ui/types';
|
|
2
|
+
import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
|
|
2
3
|
type __VLS_Props = {
|
|
3
4
|
readonly icon?: FluxIconName;
|
|
4
5
|
readonly title?: string;
|
|
@@ -13,7 +14,7 @@ declare function __VLS_template(): {
|
|
|
13
14
|
rootEl: HTMLElement;
|
|
14
15
|
};
|
|
15
16
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
16
|
-
declare const __VLS_component:
|
|
17
|
+
declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLElement>;
|
|
17
18
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
18
19
|
export default _default;
|
|
19
20
|
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
@@ -21,4 +22,3 @@ type __VLS_WithTemplateSlots<T, S> = T & {
|
|
|
21
22
|
$slots: S;
|
|
22
23
|
};
|
|
23
24
|
};
|
|
24
|
-
//# sourceMappingURL=FluxDashboardHeader.vue.d.ts.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FluxIconName } from '@flux-ui/types';
|
|
2
|
+
import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
|
|
2
3
|
type __VLS_Props = {
|
|
3
4
|
readonly icon?: FluxIconName;
|
|
4
|
-
readonly title
|
|
5
|
+
readonly title?: string;
|
|
5
6
|
};
|
|
6
7
|
declare function __VLS_template(): {
|
|
7
8
|
attrs: Partial<{}>;
|
|
@@ -14,7 +15,7 @@ declare function __VLS_template(): {
|
|
|
14
15
|
rootEl: HTMLElement;
|
|
15
16
|
};
|
|
16
17
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
17
|
-
declare const __VLS_component:
|
|
18
|
+
declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLElement>;
|
|
18
19
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
19
20
|
export default _default;
|
|
20
21
|
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
@@ -22,4 +23,3 @@ type __VLS_WithTemplateSlots<T, S> = T & {
|
|
|
22
23
|
$slots: S;
|
|
23
24
|
};
|
|
24
25
|
};
|
|
25
|
-
//# sourceMappingURL=FluxDashboardMenu.vue.d.ts.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FluxTo } from '@flux-ui/types';
|
|
2
|
+
import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
|
|
2
3
|
type __VLS_Props = {
|
|
3
4
|
logoLocation?: FluxTo;
|
|
4
5
|
};
|
|
@@ -15,7 +16,7 @@ declare function __VLS_template(): {
|
|
|
15
16
|
rootEl: any;
|
|
16
17
|
};
|
|
17
18
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
18
|
-
declare const __VLS_component:
|
|
19
|
+
declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
19
20
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
20
21
|
export default _default;
|
|
21
22
|
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
@@ -23,4 +24,3 @@ type __VLS_WithTemplateSlots<T, S> = T & {
|
|
|
23
24
|
$slots: S;
|
|
24
25
|
};
|
|
25
26
|
};
|
|
26
|
-
//# sourceMappingURL=FluxDashboardNavigation.vue.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
|
|
1
2
|
type __VLS_Props = {
|
|
2
3
|
readonly title: string;
|
|
3
4
|
};
|
|
@@ -12,7 +13,7 @@ declare function __VLS_template(): {
|
|
|
12
13
|
rootEl: HTMLElement;
|
|
13
14
|
};
|
|
14
15
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
15
|
-
declare const __VLS_component:
|
|
16
|
+
declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLElement>;
|
|
16
17
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
17
18
|
export default _default;
|
|
18
19
|
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
@@ -20,4 +21,3 @@ type __VLS_WithTemplateSlots<T, S> = T & {
|
|
|
20
21
|
$slots: S;
|
|
21
22
|
};
|
|
22
23
|
};
|
|
23
|
-
//# sourceMappingURL=FluxDashboardSide.vue.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
|
|
1
2
|
declare function __VLS_template(): {
|
|
2
3
|
attrs: Partial<{}>;
|
|
3
4
|
slots: {
|
|
@@ -7,7 +8,7 @@ declare function __VLS_template(): {
|
|
|
7
8
|
rootEl: HTMLElement;
|
|
8
9
|
};
|
|
9
10
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
10
|
-
declare const __VLS_component:
|
|
11
|
+
declare const __VLS_component: DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLElement>;
|
|
11
12
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
12
13
|
export default _default;
|
|
13
14
|
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
@@ -15,4 +16,3 @@ type __VLS_WithTemplateSlots<T, S> = T & {
|
|
|
15
16
|
$slots: S;
|
|
16
17
|
};
|
|
17
18
|
};
|
|
18
|
-
//# sourceMappingURL=FluxDashboardTopBar.vue.d.ts.map
|
|
@@ -4,4 +4,3 @@ export { default as FluxDashboardHeader } from './FluxDashboardHeader.vue';
|
|
|
4
4
|
export { default as FluxDashboardMenu } from './FluxDashboardMenu.vue';
|
|
5
5
|
export { default as FluxDashboardNavigation } from './FluxDashboardNavigation.vue';
|
|
6
6
|
export { default as FluxDashboardSide } from './FluxDashboardSide.vue';
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/data/index.d.ts
CHANGED
package/dist/index.css
ADDED
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--dashboard-background: var(--gray-25);
|
|
3
|
+
--dashboard-duration: 360ms;
|
|
4
|
+
--dashboard-navigation-background: var(--primary-950);
|
|
5
|
+
--dashboard-navigation-foreground: var(--primary-25);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
[dark] {
|
|
9
|
+
--dashboard-navigation-background: color-mix(in srgb, var(--gray-25), black 25%);
|
|
10
|
+
--dashboard-navigation-foreground: var(--gray-800);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
body:has(.root > .dashboard) {
|
|
14
|
+
background: var(--dashboard-background);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.dashboard {
|
|
18
|
+
min-height: 100dvh;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.dashboard-mount {
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: stretch;
|
|
24
|
+
flex-flow: column;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.is-resizing, .is-resizing * {
|
|
28
|
+
animation: none !important;
|
|
29
|
+
transition: none !important;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@media (min-width: 1024px) {
|
|
33
|
+
.dashboard {
|
|
34
|
+
display: grid;
|
|
35
|
+
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
36
|
+
grid-template-rows: minmax(0, 1fr);
|
|
37
|
+
transition: padding-left var(--dashboard-duration) var(--swift-out);
|
|
38
|
+
}
|
|
39
|
+
.dashboard:has(> .dashboard-navigation) {
|
|
40
|
+
padding-left: 300px;
|
|
41
|
+
}
|
|
42
|
+
.dashboard:has(> .dashboard-navigation-collapsed) {
|
|
43
|
+
padding-left: 84px;
|
|
44
|
+
}
|
|
45
|
+
.dashboard .dashboard-mount {
|
|
46
|
+
grid-column: 2;
|
|
47
|
+
}
|
|
48
|
+
.dashboard .dashboard-menu {
|
|
49
|
+
grid-column: 1;
|
|
50
|
+
}
|
|
51
|
+
.dashboard .dashboard-side {
|
|
52
|
+
grid-column: 3;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
@media (max-width: 1023.98px) {
|
|
56
|
+
.dashboard {
|
|
57
|
+
display: flex;
|
|
58
|
+
padding-top: 84px;
|
|
59
|
+
flex-flow: column;
|
|
60
|
+
}
|
|
61
|
+
}.notice + .dashboard-content {
|
|
62
|
+
padding-top: 21px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.dashboard-content {
|
|
66
|
+
display: flex;
|
|
67
|
+
padding: 0 21px;
|
|
68
|
+
flex-flow: column;
|
|
69
|
+
flex-grow: 1;
|
|
70
|
+
}
|
|
71
|
+
.dashboard-content > :is(.calendar, .table) {
|
|
72
|
+
margin-left: -21px;
|
|
73
|
+
margin-right: -21px;
|
|
74
|
+
height: calc(100dvh - 84px);
|
|
75
|
+
flex-grow: 1;
|
|
76
|
+
}
|
|
77
|
+
.dashboard-content > .calendar {
|
|
78
|
+
border-left: 0;
|
|
79
|
+
border-right: 0;
|
|
80
|
+
border-radius: 0;
|
|
81
|
+
}
|
|
82
|
+
.dashboard-content > .calendar .calendar-actions {
|
|
83
|
+
padding-left: 21px;
|
|
84
|
+
padding-right: 21px;
|
|
85
|
+
}
|
|
86
|
+
.dashboard-content > .table {
|
|
87
|
+
border-top: 1px solid var(--surface-stroke);
|
|
88
|
+
}
|
|
89
|
+
.dashboard-content > .table .table-cell:first-child .table-cell-content {
|
|
90
|
+
padding-left: 21px;
|
|
91
|
+
}
|
|
92
|
+
.dashboard-content > .table .table-cell:last-child .table-cell-content {
|
|
93
|
+
padding-right: 21px;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@media (max-width: 1023.98px) {
|
|
97
|
+
.dashboard-content-collapsed {
|
|
98
|
+
display: none;
|
|
99
|
+
}
|
|
100
|
+
}.dashboard-top-bar {
|
|
101
|
+
position: sticky;
|
|
102
|
+
display: flex;
|
|
103
|
+
top: 0;
|
|
104
|
+
height: 72px;
|
|
105
|
+
padding-left: 21px;
|
|
106
|
+
padding-right: 21px;
|
|
107
|
+
align-items: center;
|
|
108
|
+
flex-flow: row;
|
|
109
|
+
gap: 15px;
|
|
110
|
+
background: rgb(from var(--gray-25) r g b/0.9);
|
|
111
|
+
backdrop-filter: blur(10px) saturate(180%);
|
|
112
|
+
z-index: 100;
|
|
113
|
+
}
|
|
114
|
+
.dashboard-top-bar > h1 {
|
|
115
|
+
font-size: 16px;
|
|
116
|
+
overflow: hidden;
|
|
117
|
+
text-overflow: ellipsis;
|
|
118
|
+
white-space: nowrap;
|
|
119
|
+
}
|
|
120
|
+
.dashboard-top-bar > .icon {
|
|
121
|
+
color: var(--foreground-prominent);
|
|
122
|
+
}
|
|
123
|
+
.dashboard-top-bar > .separator {
|
|
124
|
+
height: 24px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.dashboard-header:not(.route-transition-enter-active):not(.route-transition-leave-active) {
|
|
128
|
+
transition: box-shadow var(--dashboard-duration) var(--swift-out);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.dashboard-header-scrolled {
|
|
132
|
+
box-shadow: var(--shadow-md);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
[dark] .dashboard-header-scrolled {
|
|
136
|
+
box-shadow: 0 1px 0 var(--gray-50), var(--shadow-md);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@media (max-width: 1023.98px) {
|
|
140
|
+
.dashboard > .dashboard-top-bar {
|
|
141
|
+
top: 84px;
|
|
142
|
+
}
|
|
143
|
+
.dashboard > .dashboard-top-bar-collapsed {
|
|
144
|
+
display: none;
|
|
145
|
+
}
|
|
146
|
+
}.dashboard-pane {
|
|
147
|
+
background: var(--gray-50);
|
|
148
|
+
overflow: auto;
|
|
149
|
+
z-index: 200;
|
|
150
|
+
}
|
|
151
|
+
.dashboard-pane .menu-sub-header {
|
|
152
|
+
background: linear-gradient(to bottom, var(--gray-50) 75%, transparent);
|
|
153
|
+
}
|
|
154
|
+
.dashboard-pane .dashboard-top-bar {
|
|
155
|
+
background: rgb(from var(--gray-50) r g b/0.9);
|
|
156
|
+
}
|
|
157
|
+
.dashboard-pane .filter {
|
|
158
|
+
--background: var(--gray-50);
|
|
159
|
+
max-height: calc(100dvh - 84px);
|
|
160
|
+
margin-top: -9px;
|
|
161
|
+
padding: 9px 18px 18px;
|
|
162
|
+
width: 100%;
|
|
163
|
+
}
|
|
164
|
+
.dashboard-pane .filter .filter-header {
|
|
165
|
+
margin-left: -18px;
|
|
166
|
+
margin-right: -18px;
|
|
167
|
+
padding-left: 18px;
|
|
168
|
+
padding-right: 18px;
|
|
169
|
+
}
|
|
170
|
+
.dashboard-pane .filter .menu {
|
|
171
|
+
font-size: 14px;
|
|
172
|
+
}
|
|
173
|
+
.dashboard-pane .filter .menu-item-command {
|
|
174
|
+
font-size: 12px;
|
|
175
|
+
}
|
|
176
|
+
.dashboard-pane .filter .menu-item-icon {
|
|
177
|
+
font-size: 16px;
|
|
178
|
+
}
|
|
179
|
+
.dashboard-pane .filter .menu > :where(.divider, .separator) {
|
|
180
|
+
margin-left: -18px;
|
|
181
|
+
margin-right: -18px;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.dashboard-menu {
|
|
185
|
+
border-right: 1px solid var(--surface-stroke);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.dashboard-menu-body {
|
|
189
|
+
padding: 0 18px 21px;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.dashboard-side {
|
|
193
|
+
border-left: 1px solid var(--surface-stroke);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
@media (min-width: 1024px) {
|
|
197
|
+
.dashboard-pane {
|
|
198
|
+
position: sticky;
|
|
199
|
+
top: 0;
|
|
200
|
+
height: 100dvh;
|
|
201
|
+
width: 300px;
|
|
202
|
+
grid-row: 1/span 2;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
@media (max-width: 1023.98px) {
|
|
206
|
+
.dashboard-menu {
|
|
207
|
+
height: calc(100dvh - 84px);
|
|
208
|
+
}
|
|
209
|
+
.dashboard-menu-collapsed {
|
|
210
|
+
display: none;
|
|
211
|
+
}
|
|
212
|
+
}.dashboard-navigation {
|
|
213
|
+
position: fixed;
|
|
214
|
+
display: flex;
|
|
215
|
+
top: 0;
|
|
216
|
+
left: 0;
|
|
217
|
+
background: var(--dashboard-navigation-background);
|
|
218
|
+
color: var(--dashboard-navigation-foreground);
|
|
219
|
+
z-index: 750;
|
|
220
|
+
}
|
|
221
|
+
.dashboard-navigation .divider {
|
|
222
|
+
margin: 3px 15px;
|
|
223
|
+
}
|
|
224
|
+
.dashboard-navigation .divider-line {
|
|
225
|
+
background: var(--primary-900);
|
|
226
|
+
}
|
|
227
|
+
.dashboard-navigation .menu {
|
|
228
|
+
flex-grow: 1;
|
|
229
|
+
}
|
|
230
|
+
.dashboard-navigation .menu-item {
|
|
231
|
+
height: 54px;
|
|
232
|
+
min-width: 54px;
|
|
233
|
+
padding: 15px;
|
|
234
|
+
gap: 21px;
|
|
235
|
+
color: var(--dashboard-navigation-foreground);
|
|
236
|
+
overflow: hidden;
|
|
237
|
+
}
|
|
238
|
+
@media (hover: hover) {
|
|
239
|
+
.dashboard-navigation .menu-item:hover {
|
|
240
|
+
background: var(--primary-900);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
.dashboard-navigation .menu-item:active {
|
|
244
|
+
background: var(--primary-800);
|
|
245
|
+
}
|
|
246
|
+
.dashboard-navigation .menu-item-highlighted {
|
|
247
|
+
background: var(--primary-900);
|
|
248
|
+
}
|
|
249
|
+
.dashboard-navigation .menu-item-icon {
|
|
250
|
+
margin-left: 0;
|
|
251
|
+
margin-right: 0;
|
|
252
|
+
color: var(--dashboard-navigation-foreground);
|
|
253
|
+
font-size: 24px;
|
|
254
|
+
}
|
|
255
|
+
.dashboard-navigation .menu-item-label {
|
|
256
|
+
transition: var(--dashboard-duration) var(--swift-out);
|
|
257
|
+
transition-property: filter, opacity, translate;
|
|
258
|
+
white-space: nowrap;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.dashboard-navigation-collapsed {
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
[dark] .dashboard-navigation .divider-line {
|
|
265
|
+
background: var(--gray-100);
|
|
266
|
+
}
|
|
267
|
+
@media (hover: hover) {
|
|
268
|
+
[dark] .dashboard-navigation .menu-item:hover {
|
|
269
|
+
background: var(--gray-100);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
[dark] .dashboard-navigation .menu-item:active {
|
|
273
|
+
background: var(--gray-200);
|
|
274
|
+
}
|
|
275
|
+
[dark] .dashboard-navigation .menu-item-highlighted {
|
|
276
|
+
background: var(--gray-50);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.dashboard-navigation-logo {
|
|
280
|
+
display: flex;
|
|
281
|
+
height: 54px;
|
|
282
|
+
width: 54px;
|
|
283
|
+
align-items: center;
|
|
284
|
+
justify-content: center;
|
|
285
|
+
}
|
|
286
|
+
.dashboard-navigation-logo :is(svg) {
|
|
287
|
+
max-height: 48px;
|
|
288
|
+
max-width: 48px;
|
|
289
|
+
width: 100%;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.dashboard-navigation-rounding-fix {
|
|
293
|
+
position: absolute;
|
|
294
|
+
display: block;
|
|
295
|
+
height: var(--radius);
|
|
296
|
+
width: var(--radius);
|
|
297
|
+
content: "";
|
|
298
|
+
background: var(--dashboard-navigation-background);
|
|
299
|
+
transition: left var(--dashboard-duration) var(--swift-out);
|
|
300
|
+
}
|
|
301
|
+
.dashboard-navigation-rounding-fix::before {
|
|
302
|
+
position: absolute;
|
|
303
|
+
display: block;
|
|
304
|
+
inset: 0;
|
|
305
|
+
content: "";
|
|
306
|
+
background: var(--gray-50);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.dashboard:not(:has(.dashboard-menu)) .dashboard-navigation-rounding-fix::before {
|
|
310
|
+
background: var(--gray-25);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
@media (min-width: 1024px) {
|
|
314
|
+
.dashboard-navigation {
|
|
315
|
+
height: 100dvh;
|
|
316
|
+
width: 300px;
|
|
317
|
+
padding: 15px;
|
|
318
|
+
flex-flow: column;
|
|
319
|
+
gap: 15px;
|
|
320
|
+
transition: width var(--dashboard-duration) var(--swift-out);
|
|
321
|
+
}
|
|
322
|
+
.dashboard-navigation-collapsed {
|
|
323
|
+
width: 84px;
|
|
324
|
+
}
|
|
325
|
+
.dashboard-navigation-collapsed .menu-item-label {
|
|
326
|
+
filter: blur(6px);
|
|
327
|
+
opacity: 0;
|
|
328
|
+
translate: -12px 0;
|
|
329
|
+
}
|
|
330
|
+
.dashboard-navigation-header {
|
|
331
|
+
display: flex;
|
|
332
|
+
}
|
|
333
|
+
.dashboard-navigation-header .menu-item {
|
|
334
|
+
display: none;
|
|
335
|
+
}
|
|
336
|
+
.dashboard-navigation-nav {
|
|
337
|
+
display: flex;
|
|
338
|
+
flex-flow: column;
|
|
339
|
+
flex-grow: 1;
|
|
340
|
+
}
|
|
341
|
+
.dashboard-navigation-rounding-fix {
|
|
342
|
+
left: 100%;
|
|
343
|
+
}
|
|
344
|
+
.dashboard-navigation-rounding-fix:first-of-type {
|
|
345
|
+
top: 0;
|
|
346
|
+
}
|
|
347
|
+
.dashboard-navigation-rounding-fix:first-of-type::before {
|
|
348
|
+
border-top-left-radius: var(--radius);
|
|
349
|
+
}
|
|
350
|
+
.dashboard-navigation-rounding-fix:not(:first-of-type) {
|
|
351
|
+
bottom: 0;
|
|
352
|
+
}
|
|
353
|
+
.dashboard-navigation-rounding-fix:not(:first-of-type)::before {
|
|
354
|
+
border-bottom-left-radius: var(--radius);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
@media (max-width: 1023.98px) {
|
|
358
|
+
.dashboard-navigation {
|
|
359
|
+
width: 100dvw;
|
|
360
|
+
height: 84px;
|
|
361
|
+
}
|
|
362
|
+
.dashboard-navigation::after {
|
|
363
|
+
position: fixed;
|
|
364
|
+
display: block;
|
|
365
|
+
inset: 0;
|
|
366
|
+
width: 100dvw;
|
|
367
|
+
height: 100dvh;
|
|
368
|
+
content: "";
|
|
369
|
+
background: rgb(from var(--gray-200) r g b/0.5);
|
|
370
|
+
backdrop-filter: blur(3px) saturate(180%);
|
|
371
|
+
transition: var(--dashboard-duration) var(--swift-out);
|
|
372
|
+
transition-property: background, backdrop-filter;
|
|
373
|
+
z-index: 1900;
|
|
374
|
+
}
|
|
375
|
+
.dashboard-navigation-header {
|
|
376
|
+
display: flex;
|
|
377
|
+
width: inherit;
|
|
378
|
+
height: inherit;
|
|
379
|
+
padding: 0 15px;
|
|
380
|
+
align-items: center;
|
|
381
|
+
flex-flow: row;
|
|
382
|
+
justify-content: space-between;
|
|
383
|
+
}
|
|
384
|
+
.dashboard-navigation-header .menu-item {
|
|
385
|
+
align-self: center;
|
|
386
|
+
justify-content: center;
|
|
387
|
+
}
|
|
388
|
+
.dashboard-navigation-nav {
|
|
389
|
+
position: fixed;
|
|
390
|
+
display: flex;
|
|
391
|
+
top: 0;
|
|
392
|
+
left: 0;
|
|
393
|
+
width: min(300px, 100dvw - 42px);
|
|
394
|
+
height: 100dvh;
|
|
395
|
+
padding: 15px;
|
|
396
|
+
flex-flow: column;
|
|
397
|
+
background: var(--dashboard-navigation-background);
|
|
398
|
+
transition: translate var(--dashboard-duration) var(--swift-out);
|
|
399
|
+
z-index: 2000;
|
|
400
|
+
}
|
|
401
|
+
.dashboard-navigation-rounding-fix {
|
|
402
|
+
position: fixed;
|
|
403
|
+
top: 84px;
|
|
404
|
+
z-index: 750;
|
|
405
|
+
}
|
|
406
|
+
.dashboard-navigation-rounding-fix:first-of-type {
|
|
407
|
+
left: 0;
|
|
408
|
+
}
|
|
409
|
+
.dashboard-navigation-rounding-fix:first-of-type::before {
|
|
410
|
+
border-top-left-radius: var(--radius);
|
|
411
|
+
}
|
|
412
|
+
.dashboard-navigation-rounding-fix:not(:first-of-type) {
|
|
413
|
+
right: 0;
|
|
414
|
+
}
|
|
415
|
+
.dashboard-navigation-rounding-fix:not(:first-of-type)::before {
|
|
416
|
+
border-top-right-radius: var(--radius);
|
|
417
|
+
}
|
|
418
|
+
.dashboard-navigation-collapsed::after {
|
|
419
|
+
background: transparent;
|
|
420
|
+
backdrop-filter: none;
|
|
421
|
+
pointer-events: none;
|
|
422
|
+
}
|
|
423
|
+
.dashboard-navigation-collapsed .dashboard-navigation-nav {
|
|
424
|
+
pointer-events: none;
|
|
425
|
+
translate: -100% 0;
|
|
426
|
+
}
|
|
427
|
+
}/*$vite$:1*/
|
package/dist/index.d.ts
CHANGED