@bitrix24/b24ui-nuxt 0.5.10 → 0.5.11
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/meta.cjs +72112 -0
- package/dist/meta.d.cts +72110 -0
- package/dist/meta.d.mts +5060 -5060
- package/dist/meta.d.ts +72110 -0
- package/dist/meta.mjs +5060 -5060
- package/dist/module.cjs +63 -0
- package/dist/module.d.cts +15 -0
- package/dist/module.d.ts +15 -0
- package/dist/module.json +3 -3
- package/dist/module.mjs +1 -1
- package/dist/runtime/components/Advice.vue +54 -47
- package/dist/runtime/components/Alert.vue +96 -71
- package/dist/runtime/components/App.vue +34 -37
- package/dist/runtime/components/Avatar.vue +81 -69
- package/dist/runtime/components/AvatarGroup.vue +76 -53
- package/dist/runtime/components/Badge.vue +83 -83
- package/dist/runtime/components/Button.vue +157 -220
- package/dist/runtime/components/ButtonGroup.vue +51 -35
- package/dist/runtime/components/Calendar.vue +152 -186
- package/dist/runtime/components/Checkbox.vue +73 -84
- package/dist/runtime/components/Chip.vue +74 -59
- package/dist/runtime/components/Collapsible.vue +41 -44
- package/dist/runtime/components/Container.vue +27 -18
- package/dist/runtime/components/Countdown.vue +378 -198
- package/dist/runtime/components/DescriptionList.vue +149 -102
- package/dist/runtime/components/DropdownMenu.vue +139 -83
- package/dist/runtime/components/DropdownMenuContent.vue +84 -137
- package/dist/runtime/components/Form.vue +216 -162
- package/dist/runtime/components/FormField.vue +80 -76
- package/dist/runtime/components/Input.vue +179 -160
- package/dist/runtime/components/InputMenu.vue +380 -300
- package/dist/runtime/components/InputNumber.vue +175 -178
- package/dist/runtime/components/Kbd.vue +45 -33
- package/dist/runtime/components/Link.vue +173 -179
- package/dist/runtime/components/LinkBase.vue +42 -64
- package/dist/runtime/components/Modal.vue +127 -105
- package/dist/runtime/components/ModalDialogClose.vue +8 -4
- package/dist/runtime/components/Navbar.vue +33 -24
- package/dist/runtime/components/NavbarDivider.vue +33 -24
- package/dist/runtime/components/NavbarSection.vue +33 -24
- package/dist/runtime/components/NavbarSpacer.vue +33 -24
- package/dist/runtime/components/NavigationMenu.vue +210 -144
- package/dist/runtime/components/OverlayProvider.vue +17 -13
- package/dist/runtime/components/Popover.vue +81 -81
- package/dist/runtime/components/Progress.vue +136 -109
- package/dist/runtime/components/RadioGroup.vue +134 -120
- package/dist/runtime/components/Range.vue +85 -94
- package/dist/runtime/components/Select.vue +260 -212
- package/dist/runtime/components/SelectMenu.vue +365 -272
- package/dist/runtime/components/Separator.vue +71 -61
- package/dist/runtime/components/Sidebar.vue +33 -24
- package/dist/runtime/components/SidebarBody.vue +38 -30
- package/dist/runtime/components/SidebarFooter.vue +33 -24
- package/dist/runtime/components/SidebarHeader.vue +33 -24
- package/dist/runtime/components/SidebarHeading.vue +33 -24
- package/dist/runtime/components/SidebarLayout.vue +70 -40
- package/dist/runtime/components/SidebarSection.vue +33 -24
- package/dist/runtime/components/SidebarSpacer.vue +33 -24
- package/dist/runtime/components/Skeleton.vue +22 -17
- package/dist/runtime/components/Slideover.vue +131 -108
- package/dist/runtime/components/StackedLayout.vue +73 -40
- package/dist/runtime/components/Switch.vue +95 -100
- package/dist/runtime/components/Tabs.vue +107 -81
- package/dist/runtime/components/Textarea.vue +201 -177
- package/dist/runtime/components/Toast.vue +105 -94
- package/dist/runtime/components/Toaster.vue +116 -94
- package/dist/runtime/components/Tooltip.vue +64 -78
- package/dist/runtime/components/content/TableWrapper.vue +70 -58
- package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
- package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
- package/dist/runtime/composables/useComponentIcons.d.ts +3 -3
- package/dist/runtime/composables/useFormField.d.ts +1 -1
- package/dist/runtime/prose/A.vue +23 -18
- package/dist/runtime/prose/Blockquote.vue +23 -18
- package/dist/runtime/prose/Code.vue +31 -23
- package/dist/runtime/prose/Em.vue +23 -18
- package/dist/runtime/prose/H1.vue +23 -18
- package/dist/runtime/prose/H2.vue +23 -18
- package/dist/runtime/prose/H3.vue +23 -18
- package/dist/runtime/prose/H4.vue +23 -18
- package/dist/runtime/prose/H5.vue +23 -18
- package/dist/runtime/prose/H6.vue +23 -18
- package/dist/runtime/prose/Hr.vue +19 -18
- package/dist/runtime/prose/Img.vue +23 -18
- package/dist/runtime/prose/Li.vue +23 -18
- package/dist/runtime/prose/Ol.vue +23 -18
- package/dist/runtime/prose/P.vue +23 -18
- package/dist/runtime/prose/Pre.vue +33 -28
- package/dist/runtime/prose/Strong.vue +23 -18
- package/dist/runtime/prose/Table.vue +54 -44
- package/dist/runtime/prose/Tbody.vue +23 -18
- package/dist/runtime/prose/Td.vue +23 -18
- package/dist/runtime/prose/Th.vue +23 -18
- package/dist/runtime/prose/Thead.vue +23 -18
- package/dist/runtime/prose/Tr.vue +23 -18
- package/dist/runtime/prose/Ul.vue +23 -18
- package/dist/runtime/vue/components/Link.vue +202 -201
- package/dist/shared/b24ui-nuxt.DrKwIWoc.cjs +7721 -0
- package/dist/types.d.mts +5 -3
- package/dist/types.d.ts +7 -0
- package/dist/unplugin.cjs +236 -0
- package/dist/unplugin.d.cts +33 -0
- package/dist/unplugin.d.ts +33 -0
- package/dist/vite.cjs +21 -0
- package/dist/vite.d.cts +14 -0
- package/dist/vite.d.ts +14 -0
- package/package.json +25 -13
- package/dist/runtime/components/Advice.vue.d.ts +0 -170
- package/dist/runtime/components/Alert.vue.d.ts +0 -464
- package/dist/runtime/components/App.vue.d.ts +0 -23
- package/dist/runtime/components/Avatar.vue.d.ts +0 -281
- package/dist/runtime/components/AvatarGroup.vue.d.ts +0 -204
- package/dist/runtime/components/Badge.vue.d.ts +0 -517
- package/dist/runtime/components/Button.vue.d.ts +0 -640
- package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -116
- package/dist/runtime/components/Calendar.vue.d.ts +0 -437
- package/dist/runtime/components/Checkbox.vue.d.ts +0 -354
- package/dist/runtime/components/Chip.vue.d.ts +0 -271
- package/dist/runtime/components/Collapsible.vue.d.ts +0 -118
- package/dist/runtime/components/Container.vue.d.ts +0 -27
- package/dist/runtime/components/Countdown.vue.d.ts +0 -356
- package/dist/runtime/components/DescriptionList.vue.d.ts +0 -379
- package/dist/runtime/components/DropdownMenu.vue.d.ts +0 -533
- package/dist/runtime/components/DropdownMenuContent.vue.d.ts +0 -228
- package/dist/runtime/components/Form.vue.d.ts +0 -55
- package/dist/runtime/components/FormField.vue.d.ts +0 -282
- package/dist/runtime/components/Input.vue.d.ts +0 -755
- package/dist/runtime/components/InputMenu.vue.d.ts +0 -1504
- package/dist/runtime/components/InputNumber.vue.d.ts +0 -658
- package/dist/runtime/components/Kbd.vue.d.ts +0 -109
- package/dist/runtime/components/Link.vue.d.ts +0 -129
- package/dist/runtime/components/LinkBase.vue.d.ts +0 -48
- package/dist/runtime/components/Modal.vue.d.ts +0 -327
- package/dist/runtime/components/ModalDialogClose.vue.d.ts +0 -10
- package/dist/runtime/components/Navbar.vue.d.ts +0 -101
- package/dist/runtime/components/NavbarDivider.vue.d.ts +0 -101
- package/dist/runtime/components/NavbarSection.vue.d.ts +0 -101
- package/dist/runtime/components/NavbarSpacer.vue.d.ts +0 -101
- package/dist/runtime/components/NavigationMenu.vue.d.ts +0 -824
- package/dist/runtime/components/OverlayProvider.vue.d.ts +0 -2
- package/dist/runtime/components/Popover.vue.d.ts +0 -147
- package/dist/runtime/components/Progress.vue.d.ts +0 -592
- package/dist/runtime/components/RadioGroup.vue.d.ts +0 -723
- package/dist/runtime/components/Range.vue.d.ts +0 -417
- package/dist/runtime/components/Select.vue.d.ts +0 -1200
- package/dist/runtime/components/SelectMenu.vue.d.ts +0 -1298
- package/dist/runtime/components/Separator.vue.d.ts +0 -400
- package/dist/runtime/components/Sidebar.vue.d.ts +0 -101
- package/dist/runtime/components/SidebarBody.vue.d.ts +0 -90
- package/dist/runtime/components/SidebarFooter.vue.d.ts +0 -101
- package/dist/runtime/components/SidebarHeader.vue.d.ts +0 -101
- package/dist/runtime/components/SidebarHeading.vue.d.ts +0 -101
- package/dist/runtime/components/SidebarLayout.vue.d.ts +0 -222
- package/dist/runtime/components/SidebarSection.vue.d.ts +0 -101
- package/dist/runtime/components/SidebarSpacer.vue.d.ts +0 -101
- package/dist/runtime/components/Skeleton.vue.d.ts +0 -26
- package/dist/runtime/components/Slideover.vue.d.ts +0 -360
- package/dist/runtime/components/StackedLayout.vue.d.ts +0 -192
- package/dist/runtime/components/Switch.vue.d.ts +0 -587
- package/dist/runtime/components/Tabs.vue.d.ts +0 -453
- package/dist/runtime/components/Textarea.vue.d.ts +0 -601
- package/dist/runtime/components/Toast.vue.d.ts +0 -438
- package/dist/runtime/components/Toaster.vue.d.ts +0 -219
- package/dist/runtime/components/Tooltip.vue.d.ts +0 -186
- package/dist/runtime/components/content/TableWrapper.vue.d.ts +0 -237
- package/dist/runtime/prose/A.vue.d.ts +0 -84
- package/dist/runtime/prose/Blockquote.vue.d.ts +0 -84
- package/dist/runtime/prose/Code.vue.d.ts +0 -97
- package/dist/runtime/prose/Em.vue.d.ts +0 -84
- package/dist/runtime/prose/H1.vue.d.ts +0 -97
- package/dist/runtime/prose/H2.vue.d.ts +0 -123
- package/dist/runtime/prose/H3.vue.d.ts +0 -123
- package/dist/runtime/prose/H4.vue.d.ts +0 -123
- package/dist/runtime/prose/H5.vue.d.ts +0 -123
- package/dist/runtime/prose/H6.vue.d.ts +0 -123
- package/dist/runtime/prose/Hr.vue.d.ts +0 -74
- package/dist/runtime/prose/Img.vue.d.ts +0 -77
- package/dist/runtime/prose/Li.vue.d.ts +0 -84
- package/dist/runtime/prose/Ol.vue.d.ts +0 -84
- package/dist/runtime/prose/P.vue.d.ts +0 -84
- package/dist/runtime/prose/Pre.vue.d.ts +0 -117
- package/dist/runtime/prose/Strong.vue.d.ts +0 -84
- package/dist/runtime/prose/Table.vue.d.ts +0 -144
- package/dist/runtime/prose/Tbody.vue.d.ts +0 -84
- package/dist/runtime/prose/Td.vue.d.ts +0 -84
- package/dist/runtime/prose/Th.vue.d.ts +0 -84
- package/dist/runtime/prose/Thead.vue.d.ts +0 -84
- package/dist/runtime/prose/Tr.vue.d.ts +0 -84
- package/dist/runtime/prose/Ul.vue.d.ts +0 -84
- package/dist/runtime/vue/components/Link.vue.d.ts +0 -129
|
@@ -1,150 +1,137 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ButtonHTMLAttributes } from 'vue'
|
|
3
|
+
import { tv } from 'tailwind-variants'
|
|
4
|
+
import type { AppConfig } from '@nuxt/schema'
|
|
5
|
+
import _appConfig from '#build/app.config'
|
|
6
|
+
import type { RouterLinkProps, RouteLocationRaw } from 'vue-router'
|
|
7
|
+
import theme from '#build/b24ui/link'
|
|
8
|
+
|
|
9
|
+
interface NuxtLinkProps extends Omit<RouterLinkProps, 'to'> {
|
|
10
|
+
/**
|
|
11
|
+
* Route Location the link should navigate to when clicked on.
|
|
12
|
+
*/
|
|
13
|
+
to?: RouteLocationRaw // need to manually type to avoid breaking typedPages
|
|
14
|
+
/**
|
|
15
|
+
* An alias for `to`. If used with `to`, `href` will be ignored
|
|
16
|
+
*/
|
|
17
|
+
href?: NuxtLinkProps['to']
|
|
18
|
+
/**
|
|
19
|
+
* Forces the link to be considered as external (true) or internal (false). This is helpful to handle edge-cases
|
|
20
|
+
*/
|
|
21
|
+
external?: boolean
|
|
22
|
+
/**
|
|
23
|
+
* Where to display the linked URL, as the name for a browsing context.
|
|
24
|
+
*/
|
|
25
|
+
target?: '_blank' | '_parent' | '_self' | '_top' | (string & {}) | null
|
|
26
|
+
/**
|
|
27
|
+
* A rel attribute value to apply on the link. Defaults to "noopener noreferrer" for external links.
|
|
28
|
+
*/
|
|
29
|
+
rel?: 'noopener' | 'noreferrer' | 'nofollow' | 'sponsored' | 'ugc' | (string & {}) | null
|
|
30
|
+
/**
|
|
31
|
+
* If set to true, no rel attribute will be added to the link
|
|
32
|
+
*/
|
|
33
|
+
noRel?: boolean
|
|
34
|
+
/**
|
|
35
|
+
* A class to apply to links that have been prefetched.
|
|
36
|
+
*/
|
|
37
|
+
prefetchedClass?: string
|
|
38
|
+
/**
|
|
39
|
+
* When enabled will prefetch middleware, layouts and payloads of links in the viewport.
|
|
40
|
+
*/
|
|
41
|
+
prefetch?: boolean
|
|
42
|
+
/**
|
|
43
|
+
* Allows controlling when to prefetch links. By default, prefetch is triggered only on visibility.
|
|
44
|
+
*/
|
|
45
|
+
prefetchOn?: 'visibility' | 'interaction' | Partial<{
|
|
46
|
+
visibility: boolean
|
|
47
|
+
interaction: boolean
|
|
48
|
+
}>
|
|
49
|
+
/**
|
|
50
|
+
* Escape hatch to disable `prefetch` attribute.
|
|
51
|
+
*/
|
|
52
|
+
noPrefetch?: boolean
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const appConfigLink = _appConfig as AppConfig & { b24ui: { link: Partial<typeof theme> } }
|
|
56
|
+
|
|
57
|
+
const link = tv({ extend: tv(theme), ...(appConfigLink.b24ui?.link || {}) })
|
|
58
|
+
|
|
59
|
+
export interface LinkProps extends NuxtLinkProps {
|
|
60
|
+
/**
|
|
61
|
+
* The element or component this component should render as when not a link.
|
|
62
|
+
* @defaultValue 'button'
|
|
63
|
+
*/
|
|
64
|
+
as?: any
|
|
65
|
+
/**
|
|
66
|
+
* The type of the button when not a link.
|
|
67
|
+
* @defaultValue 'button'
|
|
68
|
+
*/
|
|
69
|
+
type?: ButtonHTMLAttributes['type']
|
|
70
|
+
disabled?: boolean
|
|
71
|
+
/** Force the link to be active independent of the current route. */
|
|
72
|
+
active?: boolean
|
|
73
|
+
/** Will only be active if the current route is an exact match. */
|
|
74
|
+
exact?: boolean
|
|
75
|
+
/** Will only be active if the current route query is an exact match. */
|
|
76
|
+
exactQuery?: boolean | 'partial'
|
|
77
|
+
/** Will only be active if the current route hash is an exact match. */
|
|
78
|
+
exactHash?: boolean
|
|
79
|
+
/** The class to apply when the link is inactive. */
|
|
80
|
+
inactiveClass?: string
|
|
81
|
+
custom?: boolean
|
|
82
|
+
/** When `true`, uses special underlined styling. */
|
|
83
|
+
isAction?: boolean
|
|
84
|
+
/** When `true`, only styles from `class`, `activeClass`, and `inactiveClass` will be applied. */
|
|
85
|
+
raw?: boolean
|
|
86
|
+
class?: any
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface LinkSlots {
|
|
90
|
+
default(props: { active: boolean }): any
|
|
91
|
+
}
|
|
7
92
|
</script>
|
|
8
93
|
|
|
9
|
-
<script setup>
|
|
10
|
-
import { computed, getCurrentInstance } from
|
|
11
|
-
import { isEqual, diff } from
|
|
12
|
-
import { useForwardProps } from
|
|
13
|
-
import { reactiveOmit } from
|
|
14
|
-
import { hasProtocol } from
|
|
15
|
-
import { useRoute } from
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
type:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
type: Boolean,
|
|
34
|
-
required: false,
|
|
35
|
-
default: void 0
|
|
36
|
-
},
|
|
37
|
-
exact: {
|
|
38
|
-
type: Boolean,
|
|
39
|
-
required: false
|
|
40
|
-
},
|
|
41
|
-
exactQuery: {
|
|
42
|
-
type: [Boolean, String],
|
|
43
|
-
required: false
|
|
44
|
-
},
|
|
45
|
-
exactHash: {
|
|
46
|
-
type: Boolean,
|
|
47
|
-
required: false
|
|
48
|
-
},
|
|
49
|
-
inactiveClass: {
|
|
50
|
-
type: String,
|
|
51
|
-
required: false,
|
|
52
|
-
default: ""
|
|
53
|
-
},
|
|
54
|
-
custom: {
|
|
55
|
-
type: Boolean,
|
|
56
|
-
required: false
|
|
57
|
-
},
|
|
58
|
-
isAction: {
|
|
59
|
-
type: Boolean,
|
|
60
|
-
required: false,
|
|
61
|
-
default: false
|
|
62
|
-
},
|
|
63
|
-
raw: {
|
|
64
|
-
type: Boolean,
|
|
65
|
-
required: false
|
|
66
|
-
},
|
|
67
|
-
class: {
|
|
68
|
-
type: null,
|
|
69
|
-
required: false
|
|
70
|
-
},
|
|
71
|
-
to: {
|
|
72
|
-
type: null,
|
|
73
|
-
required: false
|
|
74
|
-
},
|
|
75
|
-
href: {
|
|
76
|
-
type: null,
|
|
77
|
-
required: false
|
|
78
|
-
},
|
|
79
|
-
external: {
|
|
80
|
-
type: Boolean,
|
|
81
|
-
required: false
|
|
82
|
-
},
|
|
83
|
-
target: {
|
|
84
|
-
type: [String, Object, null],
|
|
85
|
-
required: false
|
|
86
|
-
},
|
|
87
|
-
rel: {
|
|
88
|
-
type: [String, Object, null],
|
|
89
|
-
required: false
|
|
90
|
-
},
|
|
91
|
-
noRel: {
|
|
92
|
-
type: Boolean,
|
|
93
|
-
required: false
|
|
94
|
-
},
|
|
95
|
-
prefetchedClass: {
|
|
96
|
-
type: String,
|
|
97
|
-
required: false
|
|
98
|
-
},
|
|
99
|
-
prefetch: {
|
|
100
|
-
type: Boolean,
|
|
101
|
-
required: false
|
|
102
|
-
},
|
|
103
|
-
prefetchOn: {
|
|
104
|
-
type: [String, Object],
|
|
105
|
-
required: false
|
|
106
|
-
},
|
|
107
|
-
noPrefetch: {
|
|
108
|
-
type: Boolean,
|
|
109
|
-
required: false
|
|
110
|
-
},
|
|
111
|
-
activeClass: {
|
|
112
|
-
type: String,
|
|
113
|
-
required: false,
|
|
114
|
-
default: ""
|
|
115
|
-
},
|
|
116
|
-
exactActiveClass: {
|
|
117
|
-
type: String,
|
|
118
|
-
required: false
|
|
119
|
-
},
|
|
120
|
-
ariaCurrentValue: {
|
|
121
|
-
type: String,
|
|
122
|
-
required: false,
|
|
123
|
-
default: "page"
|
|
124
|
-
},
|
|
125
|
-
viewTransition: {
|
|
126
|
-
type: Boolean,
|
|
127
|
-
required: false
|
|
128
|
-
},
|
|
129
|
-
replace: {
|
|
130
|
-
type: Boolean,
|
|
131
|
-
required: false
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
defineSlots();
|
|
94
|
+
<script setup lang="ts">
|
|
95
|
+
import { computed, getCurrentInstance } from 'vue'
|
|
96
|
+
import { isEqual, diff } from 'ohash/utils'
|
|
97
|
+
import { useForwardProps } from 'reka-ui'
|
|
98
|
+
import { reactiveOmit } from '@vueuse/core'
|
|
99
|
+
import { hasProtocol } from 'ufo'
|
|
100
|
+
import { useRoute } from '#imports'
|
|
101
|
+
import { RouterLink } from 'vue-router'
|
|
102
|
+
import B24LinkBase from './../../components/LinkBase.vue'
|
|
103
|
+
|
|
104
|
+
defineOptions({ inheritAttrs: false })
|
|
105
|
+
|
|
106
|
+
const props = withDefaults(defineProps<LinkProps>(), {
|
|
107
|
+
as: 'button',
|
|
108
|
+
type: 'button',
|
|
109
|
+
ariaCurrentValue: 'page',
|
|
110
|
+
active: undefined,
|
|
111
|
+
isAction: false,
|
|
112
|
+
activeClass: '',
|
|
113
|
+
inactiveClass: ''
|
|
114
|
+
})
|
|
115
|
+
defineSlots<LinkSlots>()
|
|
116
|
+
|
|
117
|
+
// Check if vue-router is available by checking for the injection key
|
|
135
118
|
const hasRouter = computed(() => {
|
|
136
|
-
const app = getCurrentInstance()?.appContext.app
|
|
137
|
-
return !!app?.config?.globalProperties?.$router
|
|
138
|
-
})
|
|
119
|
+
const app = getCurrentInstance()?.appContext.app
|
|
120
|
+
return !!(app?.config?.globalProperties?.$router)
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
// Only try to get route if router exists
|
|
139
124
|
const route = computed(() => {
|
|
140
|
-
if (!hasRouter.value) return null
|
|
125
|
+
if (!hasRouter.value) return null
|
|
141
126
|
try {
|
|
142
|
-
return useRoute()
|
|
127
|
+
return useRoute()
|
|
143
128
|
} catch {
|
|
144
|
-
return null
|
|
129
|
+
return null
|
|
145
130
|
}
|
|
146
|
-
})
|
|
147
|
-
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
const routerLinkProps = useForwardProps(reactiveOmit(props, 'as', 'type', 'disabled', 'active', 'exact', 'exactQuery', 'exactHash', 'activeClass', 'inactiveClass', 'to', 'raw', 'class'))
|
|
134
|
+
|
|
148
135
|
const b24ui = computed(() => tv({
|
|
149
136
|
extend: link,
|
|
150
137
|
variants: {
|
|
@@ -153,56 +140,70 @@ const b24ui = computed(() => tv({
|
|
|
153
140
|
false: props.inactiveClass
|
|
154
141
|
}
|
|
155
142
|
}
|
|
156
|
-
}))
|
|
157
|
-
|
|
143
|
+
}))
|
|
144
|
+
|
|
145
|
+
function isPartiallyEqual(item1: any, item2: any) {
|
|
158
146
|
const diffedKeys = diff(item1, item2).reduce((filtered, q) => {
|
|
159
|
-
if (q.type ===
|
|
160
|
-
filtered.add(q.key)
|
|
147
|
+
if (q.type === 'added') {
|
|
148
|
+
filtered.add(q.key)
|
|
161
149
|
}
|
|
162
|
-
return filtered
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
const
|
|
166
|
-
|
|
150
|
+
return filtered
|
|
151
|
+
}, new Set<string>())
|
|
152
|
+
|
|
153
|
+
const item1Filtered = Object.fromEntries(Object.entries(item1).filter(([key]) => !diffedKeys.has(key)))
|
|
154
|
+
const item2Filtered = Object.fromEntries(Object.entries(item2).filter(([key]) => !diffedKeys.has(key)))
|
|
155
|
+
|
|
156
|
+
return isEqual(item1Filtered, item2Filtered)
|
|
167
157
|
}
|
|
158
|
+
|
|
168
159
|
const isExternal = computed(() => {
|
|
169
|
-
if (!props.to) return false
|
|
170
|
-
return typeof props.to ===
|
|
171
|
-
})
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
160
|
+
if (!props.to) return false
|
|
161
|
+
return typeof props.to === 'string' && hasProtocol(props.to, { acceptRelative: true })
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
function isLinkActive({ route: linkRoute, isActive, isExactActive }: any) {
|
|
165
|
+
if (props.active !== undefined) {
|
|
166
|
+
return props.active
|
|
175
167
|
}
|
|
168
|
+
|
|
176
169
|
if (!props.to || !route.value) {
|
|
177
|
-
return false
|
|
170
|
+
return false
|
|
178
171
|
}
|
|
179
|
-
|
|
180
|
-
|
|
172
|
+
|
|
173
|
+
if (props.exactQuery === 'partial') {
|
|
174
|
+
if (!isPartiallyEqual(linkRoute.query, route.value.query)) return false
|
|
181
175
|
} else if (props.exactQuery === true) {
|
|
182
|
-
if (!isEqual(linkRoute.query, route.value.query)) return false
|
|
176
|
+
if (!isEqual(linkRoute.query, route.value.query)) return false
|
|
183
177
|
}
|
|
178
|
+
|
|
184
179
|
if (props.exactHash && linkRoute.hash !== route.value.hash) {
|
|
185
|
-
return false
|
|
180
|
+
return false
|
|
186
181
|
}
|
|
182
|
+
|
|
187
183
|
if (props.exact && isExactActive) {
|
|
188
|
-
return true
|
|
184
|
+
return true
|
|
189
185
|
}
|
|
186
|
+
|
|
190
187
|
if (!props.exact && isActive) {
|
|
191
|
-
return true
|
|
188
|
+
return true
|
|
192
189
|
}
|
|
193
|
-
|
|
190
|
+
|
|
191
|
+
return false
|
|
194
192
|
}
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
|
|
194
|
+
function resolveLinkClass({ route, isActive, isExactActive }: any = {}) {
|
|
195
|
+
const active = isLinkActive({ route, isActive, isExactActive })
|
|
196
|
+
|
|
197
197
|
if (props.raw) {
|
|
198
|
-
return [props.class, active ? props.activeClass : props.inactiveClass]
|
|
198
|
+
return [props.class, active ? props.activeClass : props.inactiveClass]
|
|
199
199
|
}
|
|
200
|
+
|
|
200
201
|
return b24ui.value({
|
|
201
202
|
class: props.class,
|
|
202
203
|
active,
|
|
203
204
|
disabled: props.disabled,
|
|
204
205
|
isAction: Boolean(props.isAction)
|
|
205
|
-
})
|
|
206
|
+
})
|
|
206
207
|
}
|
|
207
208
|
</script>
|
|
208
209
|
|
|
@@ -212,30 +213,30 @@ function resolveLinkClass({ route: route2, isActive, isExactActive } = {}) {
|
|
|
212
213
|
<template v-if="custom">
|
|
213
214
|
<slot
|
|
214
215
|
v-bind="{
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}"
|
|
216
|
+
...$attrs,
|
|
217
|
+
...(exact && isExactActive ? { 'aria-current': props.ariaCurrentValue } : {}),
|
|
218
|
+
as,
|
|
219
|
+
type,
|
|
220
|
+
disabled,
|
|
221
|
+
target: props.target ? props.target : undefined,
|
|
222
|
+
href: to ? href : undefined,
|
|
223
|
+
navigate,
|
|
224
|
+
active: isLinkActive({ route: linkRoute, isActive, isExactActive })
|
|
225
|
+
}"
|
|
225
226
|
/>
|
|
226
227
|
</template>
|
|
227
228
|
<B24LinkBase
|
|
228
229
|
v-else
|
|
229
230
|
v-bind="{
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}"
|
|
238
|
-
:class="resolveLinkClass({ route: linkRoute, isActive, isExactActive })"
|
|
231
|
+
...$attrs,
|
|
232
|
+
...(exact && isExactActive ? { 'aria-current': props.ariaCurrentValue } : {}),
|
|
233
|
+
as,
|
|
234
|
+
type,
|
|
235
|
+
disabled,
|
|
236
|
+
href: to ? href : undefined,
|
|
237
|
+
navigate
|
|
238
|
+
}"
|
|
239
|
+
:class="resolveLinkClass({ route: linkRoute, isActive: isActive, isExactActive: isExactActive })"
|
|
239
240
|
>
|
|
240
241
|
<slot :active="isLinkActive({ route: linkRoute, isActive, isExactActive })" />
|
|
241
242
|
</B24LinkBase>
|
|
@@ -246,26 +247,26 @@ function resolveLinkClass({ route: route2, isActive, isExactActive } = {}) {
|
|
|
246
247
|
<template v-if="custom">
|
|
247
248
|
<slot
|
|
248
249
|
v-bind="{
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
}"
|
|
250
|
+
...$attrs,
|
|
251
|
+
as,
|
|
252
|
+
type,
|
|
253
|
+
disabled,
|
|
254
|
+
href: to,
|
|
255
|
+
target: isExternal ? '_blank' : undefined,
|
|
256
|
+
active: props?.active || false
|
|
257
|
+
}"
|
|
257
258
|
/>
|
|
258
259
|
</template>
|
|
259
260
|
<B24LinkBase
|
|
260
261
|
v-else
|
|
261
262
|
v-bind="{
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
}"
|
|
263
|
+
...$attrs,
|
|
264
|
+
as,
|
|
265
|
+
type,
|
|
266
|
+
disabled,
|
|
267
|
+
href: (to as string),
|
|
268
|
+
target: isExternal ? '_blank' : undefined
|
|
269
|
+
}"
|
|
269
270
|
:is-external="isExternal"
|
|
270
271
|
:class="resolveLinkClass()"
|
|
271
272
|
>
|