-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathtypes.ts
115 lines (105 loc) · 2.59 KB
/
types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import type { OffsetOptions } from '@floating-ui/dom'
import type { RouteLocationRaw } from 'vue-router'
import type { AppContentLayoutNav, ContentWidth, FooterType, HorizontalNavType, NavbarType } from '@base/@layouts/enums'
import type { Component } from 'vue'
import type { Actions } from '@base/stores/casl'
export interface LayoutConfig {
app: {
contentWidth: typeof ContentWidth[keyof typeof ContentWidth]
contentLayoutNav: typeof AppContentLayoutNav[keyof typeof AppContentLayoutNav]
overlayNavFromBreakpoint: number
iconRenderer: Component
}
navbar: {
type: typeof NavbarType[keyof typeof NavbarType]
navbarBlur: boolean
}
footer: {
type: typeof FooterType[keyof typeof FooterType]
}
verticalNav: {
isVerticalNavCollapsed: boolean
defaultNavItemIconProps: { icon: string }
}
horizontalNav: {
type: typeof HorizontalNavType[keyof typeof HorizontalNavType]
transition: string | Component
popoverOffset?: OffsetOptions
}
icons: {
chevronDown: any
chevronRight: any
close: any
verticalNavPinned: any
verticalNavUnPinned: any
sectionTitlePlaceholder: any
}
}
export interface AclProperties {
action: Actions
subject: string
}
// 👉 Vertical nav link
declare type ATagTargetAttrValues = '_blank' | '_self' | '_parent' | '_top' | 'framename'
declare type ATagRelAttrValues =
| 'alternate'
| 'author'
| 'bookmark'
| 'external'
| 'help'
| 'license'
| 'next'
| 'nofollow'
| 'noopener'
| 'noreferrer'
| 'prev'
| 'search'
| 'tag'
export interface NavLinkProps {
to?: RouteLocationRaw | string | null
href?: string
target?: ATagTargetAttrValues
rel?: ATagRelAttrValues
}
// 👉 Vertical nav group
export interface NavItem extends Partial<AclProperties> {
order?: number
title: string
heading?: string
icon?: { icon: string }
badgeContent?: string
badgeClass?: string
children?: NavItem[]
disable?: boolean
to?: RouteLocationRaw
href?: string
target?: ATagTargetAttrValues
rel?: ATagRelAttrValues
group?: NavGroupType
}
export enum NavGroupType {
POPULAR,
APP,
SETTINGS,
}
// 👉 Components ========================
// avatar | text | icon
// Thanks: https://stackoverflow.com/a/60617060/10796681
export type Notification = {
id: number
title: string
subtitle: string
time: string
color?: string
isSeen: boolean
} & (
| { img: string, text?: never, icon?: never }
| { img?: never, text: string, icon?: never }
| { img?: never, text?: never, icon: string }
)
export interface ThemeSwitcherTheme {
label: string
value: string
icon: string
data?: string
}