@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,141 +1,142 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { VariantProps } from 'tailwind-variants'
|
|
3
|
+
import type { AppConfig } from '@nuxt/schema'
|
|
4
|
+
import _appConfig from '#build/app.config'
|
|
5
|
+
import theme from '#build/b24ui/textarea'
|
|
6
|
+
import type { UseComponentIconsProps } from '../composables/useComponentIcons'
|
|
7
|
+
import { tv } from '../utils/tv'
|
|
8
|
+
import type { AvatarProps } from '../types'
|
|
9
|
+
import type { PartialString } from '../types/utils'
|
|
10
|
+
|
|
11
|
+
const appConfigTextarea = _appConfig as AppConfig & { b24ui: { textarea: Partial<typeof theme> } }
|
|
12
|
+
|
|
13
|
+
const textarea = tv({ extend: tv(theme), ...(appConfigTextarea.b24ui?.textarea || {}) })
|
|
14
|
+
|
|
15
|
+
type TextareaVariants = VariantProps<typeof textarea>
|
|
16
|
+
|
|
17
|
+
export interface TextareaProps extends UseComponentIconsProps {
|
|
18
|
+
/**
|
|
19
|
+
* The element or component this component should render as.
|
|
20
|
+
* @defaultValue 'div'
|
|
21
|
+
*/
|
|
22
|
+
as?: any
|
|
23
|
+
id?: string
|
|
24
|
+
name?: string
|
|
25
|
+
/**
|
|
26
|
+
* The placeholder text when the textarea is empty
|
|
27
|
+
*/
|
|
28
|
+
placeholder?: string
|
|
29
|
+
/**
|
|
30
|
+
* @defaultValue 'primary'
|
|
31
|
+
*/
|
|
32
|
+
color?: TextareaVariants['color']
|
|
33
|
+
/**
|
|
34
|
+
* Removes padding from input
|
|
35
|
+
* @defaultValue false
|
|
36
|
+
*/
|
|
37
|
+
noPadding?: boolean
|
|
38
|
+
/**
|
|
39
|
+
* Removes all borders (rings)
|
|
40
|
+
* @defaultValue false
|
|
41
|
+
*/
|
|
42
|
+
noBorder?: boolean
|
|
43
|
+
/**
|
|
44
|
+
* Removes all borders (rings) except the bottom one
|
|
45
|
+
* @defaultValue false
|
|
46
|
+
*/
|
|
47
|
+
underline?: boolean
|
|
48
|
+
/**
|
|
49
|
+
* Rounds the corners of the button
|
|
50
|
+
* @defaultValue false
|
|
51
|
+
*/
|
|
52
|
+
rounded?: boolean
|
|
53
|
+
/**
|
|
54
|
+
* @defaultValue false
|
|
55
|
+
*/
|
|
56
|
+
required?: boolean
|
|
57
|
+
/**
|
|
58
|
+
* @defaultValue false
|
|
59
|
+
*/
|
|
60
|
+
autofocus?: boolean
|
|
61
|
+
/**
|
|
62
|
+
* @defaultValue 0
|
|
63
|
+
*/
|
|
64
|
+
autofocusDelay?: number
|
|
65
|
+
/**
|
|
66
|
+
* @defaultValue false
|
|
67
|
+
*/
|
|
68
|
+
autoresize?: boolean
|
|
69
|
+
/**
|
|
70
|
+
* @defaultValue 0
|
|
71
|
+
*/
|
|
72
|
+
autoresizeDelay?: number
|
|
73
|
+
/**
|
|
74
|
+
* @defaultValue false
|
|
75
|
+
*/
|
|
76
|
+
disabled?: boolean
|
|
77
|
+
/**
|
|
78
|
+
* @defaultValue 3
|
|
79
|
+
*/
|
|
80
|
+
rows?: number
|
|
81
|
+
/**
|
|
82
|
+
* @defaultValue 5
|
|
83
|
+
*/
|
|
84
|
+
maxrows?: number
|
|
85
|
+
tag?: string
|
|
86
|
+
/**
|
|
87
|
+
* @defaultValue 'primary'
|
|
88
|
+
*/
|
|
89
|
+
tagColor?: TextareaVariants['tagColor']
|
|
90
|
+
/**
|
|
91
|
+
* Highlight the ring color like a focus state
|
|
92
|
+
* @defaultValue false
|
|
93
|
+
*/
|
|
94
|
+
highlight?: boolean
|
|
95
|
+
class?: any
|
|
96
|
+
b24ui?: PartialString<typeof textarea.slots>
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface TextareaEmits {
|
|
100
|
+
(e: 'update:modelValue', payload: string | number): void
|
|
101
|
+
(e: 'blur', event: FocusEvent): void
|
|
102
|
+
(e: 'change', event: Event): void
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface TextareaSlots {
|
|
106
|
+
leading(props?: {}): any
|
|
107
|
+
default(props?: {}): any
|
|
108
|
+
trailing(props?: {}): any
|
|
109
|
+
}
|
|
7
110
|
</script>
|
|
8
111
|
|
|
9
|
-
<script setup>
|
|
10
|
-
import { ref, computed, onMounted, nextTick, watch } from
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
type: null,
|
|
34
|
-
required: false
|
|
35
|
-
},
|
|
36
|
-
noPadding: {
|
|
37
|
-
type: Boolean,
|
|
38
|
-
required: false
|
|
39
|
-
},
|
|
40
|
-
noBorder: {
|
|
41
|
-
type: Boolean,
|
|
42
|
-
required: false
|
|
43
|
-
},
|
|
44
|
-
underline: {
|
|
45
|
-
type: Boolean,
|
|
46
|
-
required: false
|
|
47
|
-
},
|
|
48
|
-
rounded: {
|
|
49
|
-
type: Boolean,
|
|
50
|
-
required: false
|
|
51
|
-
},
|
|
52
|
-
required: {
|
|
53
|
-
type: Boolean,
|
|
54
|
-
required: false
|
|
55
|
-
},
|
|
56
|
-
autofocus: {
|
|
57
|
-
type: Boolean,
|
|
58
|
-
required: false
|
|
59
|
-
},
|
|
60
|
-
autofocusDelay: {
|
|
61
|
-
type: Number,
|
|
62
|
-
required: false,
|
|
63
|
-
default: 0
|
|
64
|
-
},
|
|
65
|
-
autoresize: {
|
|
66
|
-
type: Boolean,
|
|
67
|
-
required: false
|
|
68
|
-
},
|
|
69
|
-
autoresizeDelay: {
|
|
70
|
-
type: Number,
|
|
71
|
-
required: false,
|
|
72
|
-
default: 0
|
|
73
|
-
},
|
|
74
|
-
disabled: {
|
|
75
|
-
type: Boolean,
|
|
76
|
-
required: false
|
|
77
|
-
},
|
|
78
|
-
rows: {
|
|
79
|
-
type: Number,
|
|
80
|
-
required: false,
|
|
81
|
-
default: 3
|
|
82
|
-
},
|
|
83
|
-
maxrows: {
|
|
84
|
-
type: Number,
|
|
85
|
-
required: false,
|
|
86
|
-
default: 5
|
|
87
|
-
},
|
|
88
|
-
tag: {
|
|
89
|
-
type: String,
|
|
90
|
-
required: false
|
|
91
|
-
},
|
|
92
|
-
tagColor: {
|
|
93
|
-
type: null,
|
|
94
|
-
required: false
|
|
95
|
-
},
|
|
96
|
-
highlight: {
|
|
97
|
-
type: Boolean,
|
|
98
|
-
required: false
|
|
99
|
-
},
|
|
100
|
-
class: {
|
|
101
|
-
type: null,
|
|
102
|
-
required: false
|
|
103
|
-
},
|
|
104
|
-
b24ui: {
|
|
105
|
-
type: null,
|
|
106
|
-
required: false
|
|
107
|
-
},
|
|
108
|
-
icon: {
|
|
109
|
-
type: [Function, Object],
|
|
110
|
-
required: false
|
|
111
|
-
},
|
|
112
|
-
avatar: {
|
|
113
|
-
type: Object,
|
|
114
|
-
required: false
|
|
115
|
-
},
|
|
116
|
-
loading: {
|
|
117
|
-
type: Boolean,
|
|
118
|
-
required: false
|
|
119
|
-
},
|
|
120
|
-
trailing: {
|
|
121
|
-
type: Boolean,
|
|
122
|
-
required: false
|
|
123
|
-
},
|
|
124
|
-
trailingIcon: {
|
|
125
|
-
type: [Function, Object],
|
|
126
|
-
required: false
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
const slots = defineSlots();
|
|
130
|
-
const emits = defineEmits(["update:modelValue", "blur", "change"]);
|
|
131
|
-
const [modelValue, modelModifiers] = defineModel({
|
|
132
|
-
"type": [String, Number, null]
|
|
133
|
-
});
|
|
134
|
-
const { emitFormFocus, emitFormBlur, emitFormInput, emitFormChange, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props, { deferInputValidation: true });
|
|
135
|
-
const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props);
|
|
112
|
+
<script setup lang="ts">
|
|
113
|
+
import { ref, computed, onMounted, nextTick, watch } from 'vue'
|
|
114
|
+
import { Primitive } from 'reka-ui'
|
|
115
|
+
import { useComponentIcons } from '../composables/useComponentIcons'
|
|
116
|
+
import { useFormField } from '../composables/useFormField'
|
|
117
|
+
import { looseToNumber } from '../utils'
|
|
118
|
+
import B24Avatar from './Avatar.vue'
|
|
119
|
+
|
|
120
|
+
defineOptions({ inheritAttrs: false })
|
|
121
|
+
|
|
122
|
+
const props = withDefaults(defineProps<TextareaProps>(), {
|
|
123
|
+
rows: 3,
|
|
124
|
+
maxrows: 5,
|
|
125
|
+
autofocusDelay: 0,
|
|
126
|
+
autoresizeDelay: 0
|
|
127
|
+
})
|
|
128
|
+
const slots = defineSlots<TextareaSlots>()
|
|
129
|
+
const emits = defineEmits<TextareaEmits>()
|
|
130
|
+
|
|
131
|
+
const [modelValue, modelModifiers] = defineModel<string | number | null>()
|
|
132
|
+
|
|
133
|
+
const { emitFormFocus, emitFormBlur, emitFormInput, emitFormChange, color, id, name, highlight, disabled, ariaAttrs } = useFormField<TextareaProps>(props, { deferInputValidation: true })
|
|
134
|
+
const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props)
|
|
135
|
+
|
|
136
136
|
const isTag = computed(() => {
|
|
137
|
-
return props.tag
|
|
138
|
-
})
|
|
137
|
+
return props.tag
|
|
138
|
+
})
|
|
139
|
+
|
|
139
140
|
const b24ui = computed(() => textarea({
|
|
140
141
|
color: color.value,
|
|
141
142
|
loading: props.loading,
|
|
@@ -148,79 +149,102 @@ const b24ui = computed(() => textarea({
|
|
|
148
149
|
underline: Boolean(props.underline),
|
|
149
150
|
leading: Boolean(isLeading.value || !!props.avatar || !!slots.leading),
|
|
150
151
|
trailing: Boolean(isTrailing.value || !!slots.trailing)
|
|
151
|
-
}))
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
}))
|
|
153
|
+
|
|
154
|
+
const textareaRef = ref<HTMLTextAreaElement | null>(null)
|
|
155
|
+
|
|
156
|
+
// Custom function to handle the v-model properties
|
|
157
|
+
function updateInput(value: string | null) {
|
|
154
158
|
if (modelModifiers.trim) {
|
|
155
|
-
value = value?.trim() ?? null
|
|
159
|
+
value = value?.trim() ?? null
|
|
156
160
|
}
|
|
161
|
+
|
|
157
162
|
if (modelModifiers.number) {
|
|
158
|
-
value = looseToNumber(value)
|
|
163
|
+
value = looseToNumber(value)
|
|
159
164
|
}
|
|
165
|
+
|
|
160
166
|
if (modelModifiers.nullify) {
|
|
161
|
-
value ||= null
|
|
167
|
+
value ||= null
|
|
162
168
|
}
|
|
163
|
-
|
|
164
|
-
|
|
169
|
+
|
|
170
|
+
modelValue.value = value
|
|
171
|
+
emitFormInput()
|
|
165
172
|
}
|
|
166
|
-
|
|
167
|
-
|
|
173
|
+
|
|
174
|
+
function onInput(event: Event) {
|
|
175
|
+
autoResize()
|
|
176
|
+
|
|
168
177
|
if (!modelModifiers.lazy) {
|
|
169
|
-
updateInput(event.target.value)
|
|
178
|
+
updateInput((event.target as HTMLInputElement).value)
|
|
170
179
|
}
|
|
171
180
|
}
|
|
172
|
-
|
|
173
|
-
|
|
181
|
+
|
|
182
|
+
function onChange(event: Event) {
|
|
183
|
+
const value = (event.target as HTMLInputElement).value
|
|
184
|
+
|
|
174
185
|
if (modelModifiers.lazy) {
|
|
175
|
-
updateInput(value)
|
|
186
|
+
updateInput(value)
|
|
176
187
|
}
|
|
188
|
+
|
|
189
|
+
// Update trimmed textarea so that it has same behavior as native textarea https://github.com/vuejs/core/blob/5ea8a8a4fab4e19a71e123e4d27d051f5e927172/packages/runtime-dom/src/directives/vModel.ts#L63
|
|
177
190
|
if (modelModifiers.trim) {
|
|
178
|
-
event.target.value = value.trim()
|
|
191
|
+
(event.target as HTMLInputElement).value = value.trim()
|
|
179
192
|
}
|
|
180
|
-
|
|
181
|
-
|
|
193
|
+
|
|
194
|
+
emitFormChange()
|
|
195
|
+
emits('change', event)
|
|
182
196
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
197
|
+
|
|
198
|
+
function onBlur(event: FocusEvent) {
|
|
199
|
+
emitFormBlur()
|
|
200
|
+
emits('blur', event)
|
|
186
201
|
}
|
|
202
|
+
|
|
187
203
|
function autoFocus() {
|
|
188
204
|
if (props.autofocus) {
|
|
189
|
-
textareaRef.value?.focus()
|
|
205
|
+
textareaRef.value?.focus()
|
|
190
206
|
}
|
|
191
207
|
}
|
|
208
|
+
|
|
192
209
|
function autoResize() {
|
|
193
210
|
if (props.autoresize && textareaRef.value) {
|
|
194
|
-
textareaRef.value.rows = props.rows
|
|
195
|
-
const overflow = textareaRef.value.style.overflow
|
|
196
|
-
textareaRef.value.style.overflow =
|
|
197
|
-
|
|
198
|
-
const
|
|
199
|
-
const
|
|
200
|
-
const
|
|
201
|
-
const
|
|
202
|
-
const
|
|
203
|
-
const
|
|
211
|
+
textareaRef.value.rows = props.rows
|
|
212
|
+
const overflow = textareaRef.value.style.overflow
|
|
213
|
+
textareaRef.value.style.overflow = 'hidden'
|
|
214
|
+
|
|
215
|
+
const styles = window.getComputedStyle(textareaRef.value)
|
|
216
|
+
const paddingTop = Number.parseInt(styles.paddingTop)
|
|
217
|
+
const paddingBottom = Number.parseInt(styles.paddingBottom)
|
|
218
|
+
const padding = paddingTop + paddingBottom
|
|
219
|
+
const lineHeight = Number.parseInt(styles.lineHeight)
|
|
220
|
+
const { scrollHeight } = textareaRef.value
|
|
221
|
+
const newRows = (scrollHeight - padding) / lineHeight
|
|
222
|
+
|
|
204
223
|
if (newRows > props.rows) {
|
|
205
|
-
textareaRef.value.rows = props.maxrows ? Math.min(newRows, props.maxrows) : newRows
|
|
224
|
+
textareaRef.value.rows = props.maxrows ? Math.min(newRows, props.maxrows) : newRows
|
|
206
225
|
}
|
|
207
|
-
|
|
226
|
+
|
|
227
|
+
textareaRef.value.style.overflow = overflow
|
|
208
228
|
}
|
|
209
229
|
}
|
|
230
|
+
|
|
210
231
|
watch(modelValue, () => {
|
|
211
|
-
nextTick(autoResize)
|
|
212
|
-
})
|
|
232
|
+
nextTick(autoResize)
|
|
233
|
+
})
|
|
234
|
+
|
|
213
235
|
onMounted(() => {
|
|
214
236
|
setTimeout(() => {
|
|
215
|
-
autoFocus()
|
|
216
|
-
}, props.autofocusDelay)
|
|
237
|
+
autoFocus()
|
|
238
|
+
}, props.autofocusDelay)
|
|
239
|
+
|
|
217
240
|
setTimeout(() => {
|
|
218
|
-
autoResize()
|
|
219
|
-
}, props.autoresizeDelay)
|
|
220
|
-
})
|
|
241
|
+
autoResize()
|
|
242
|
+
}, props.autoresizeDelay)
|
|
243
|
+
})
|
|
244
|
+
|
|
221
245
|
defineExpose({
|
|
222
246
|
textareaRef
|
|
223
|
-
})
|
|
247
|
+
})
|
|
224
248
|
</script>
|
|
225
249
|
|
|
226
250
|
<template>
|
|
@@ -257,7 +281,7 @@ defineExpose({
|
|
|
257
281
|
/>
|
|
258
282
|
<B24Avatar
|
|
259
283
|
v-else-if="!!avatar"
|
|
260
|
-
:size="props.b24ui?.leadingAvatarSize || b24ui.leadingAvatarSize()"
|
|
284
|
+
:size="((props.b24ui?.leadingAvatarSize || b24ui.leadingAvatarSize()) as AvatarProps['size'])"
|
|
261
285
|
v-bind="avatar"
|
|
262
286
|
:class="b24ui.leadingAvatar({ class: props.b24ui?.leadingAvatar })"
|
|
263
287
|
/>
|
|
@@ -1,106 +1,117 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { VariantProps } from 'tailwind-variants'
|
|
3
|
+
import type { ToastRootProps, ToastRootEmits } from 'reka-ui'
|
|
4
|
+
import type { AppConfig } from '@nuxt/schema'
|
|
5
|
+
import _appConfig from '#build/app.config'
|
|
6
|
+
import theme from '#build/b24ui/toast'
|
|
7
|
+
import { tv } from '../utils/tv'
|
|
8
|
+
import type { AvatarProps, ButtonProps, IconComponent } from '../types'
|
|
9
|
+
import type { StringOrVNode } from '../types/utils'
|
|
10
|
+
|
|
11
|
+
const appConfigToast = _appConfig as AppConfig & { b24ui: { toast: Partial<typeof theme> } }
|
|
12
|
+
|
|
13
|
+
const toast = tv({ extend: tv(theme), ...(appConfigToast.b24ui?.toast || {}) })
|
|
14
|
+
|
|
15
|
+
type ToastVariants = VariantProps<typeof toast>
|
|
16
|
+
|
|
17
|
+
export interface ToastProps extends Pick<ToastRootProps, 'defaultOpen' | 'open' | 'type' | 'duration'> {
|
|
18
|
+
/**
|
|
19
|
+
* The element or component this component should render as.
|
|
20
|
+
* @defaultValue 'li'
|
|
21
|
+
*/
|
|
22
|
+
as?: any
|
|
23
|
+
title?: StringOrVNode
|
|
24
|
+
description?: StringOrVNode
|
|
25
|
+
/**
|
|
26
|
+
* @IconComponent
|
|
27
|
+
*/
|
|
28
|
+
icon?: IconComponent
|
|
29
|
+
avatar?: AvatarProps
|
|
30
|
+
/**
|
|
31
|
+
* @defaultValue 'default'
|
|
32
|
+
*/
|
|
33
|
+
color?: ToastVariants['color']
|
|
34
|
+
/**
|
|
35
|
+
* The orientation between the content and the actions
|
|
36
|
+
* @defaultValue 'vertical'
|
|
37
|
+
*/
|
|
38
|
+
orientation?: ToastVariants['orientation']
|
|
39
|
+
/**
|
|
40
|
+
* Display a list of actions:
|
|
41
|
+
* - under the title and description when orientation is `vertical`
|
|
42
|
+
* - next to the close button when orientation is `horizontal`
|
|
43
|
+
* `{ size: 'xs' }`{lang="ts"}
|
|
44
|
+
*/
|
|
45
|
+
actions?: ButtonProps[]
|
|
46
|
+
/**
|
|
47
|
+
* Display a close button to dismiss the toast.
|
|
48
|
+
* `{ size: 'md', color: 'neutral', variant: 'link' }`{lang="ts"}
|
|
49
|
+
* @defaultValue true
|
|
50
|
+
*/
|
|
51
|
+
close?: boolean | Partial<ButtonProps>
|
|
52
|
+
/**
|
|
53
|
+
* The icon displayed in the close button.
|
|
54
|
+
* @defaultValue icons.close
|
|
55
|
+
* @IconComponent
|
|
56
|
+
*/
|
|
57
|
+
closeIcon?: IconComponent
|
|
58
|
+
class?: any
|
|
59
|
+
b24ui?: Partial<typeof toast.slots>
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface ToastEmits extends ToastRootEmits {}
|
|
63
|
+
|
|
64
|
+
export interface ToastSlots {
|
|
65
|
+
leading(props?: {}): any
|
|
66
|
+
title(props?: {}): any
|
|
67
|
+
description(props?: {}): any
|
|
68
|
+
actions(props?: {}): any
|
|
69
|
+
close(props: { b24ui: ReturnType<typeof toast> }): any
|
|
70
|
+
}
|
|
7
71
|
</script>
|
|
8
72
|
|
|
9
|
-
<script setup>
|
|
10
|
-
import { ref, computed, onMounted } from
|
|
11
|
-
import { useForwardPropsEmits } from
|
|
12
|
-
import { reactivePick } from
|
|
13
|
-
import { useLocale } from
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
required: false
|
|
30
|
-
},
|
|
31
|
-
avatar: {
|
|
32
|
-
type: Object,
|
|
33
|
-
required: false
|
|
34
|
-
},
|
|
35
|
-
color: {
|
|
36
|
-
type: null,
|
|
37
|
-
required: false
|
|
38
|
-
},
|
|
39
|
-
orientation: {
|
|
40
|
-
type: null,
|
|
41
|
-
required: false,
|
|
42
|
-
default: "vertical"
|
|
43
|
-
},
|
|
44
|
-
actions: {
|
|
45
|
-
type: Array,
|
|
46
|
-
required: false
|
|
47
|
-
},
|
|
48
|
-
close: {
|
|
49
|
-
type: [Boolean, Object],
|
|
50
|
-
required: false,
|
|
51
|
-
default: true
|
|
52
|
-
},
|
|
53
|
-
closeIcon: {
|
|
54
|
-
type: [Function, Object],
|
|
55
|
-
required: false
|
|
56
|
-
},
|
|
57
|
-
class: {
|
|
58
|
-
type: null,
|
|
59
|
-
required: false
|
|
60
|
-
},
|
|
61
|
-
b24ui: {
|
|
62
|
-
type: Object,
|
|
63
|
-
required: false
|
|
64
|
-
},
|
|
65
|
-
defaultOpen: {
|
|
66
|
-
type: Boolean,
|
|
67
|
-
required: false
|
|
68
|
-
},
|
|
69
|
-
open: {
|
|
70
|
-
type: Boolean,
|
|
71
|
-
required: false
|
|
72
|
-
},
|
|
73
|
-
type: {
|
|
74
|
-
type: String,
|
|
75
|
-
required: false
|
|
76
|
-
},
|
|
77
|
-
duration: {
|
|
78
|
-
type: Number,
|
|
79
|
-
required: false
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
const emits = defineEmits(["escapeKeyDown", "pause", "resume", "swipeStart", "swipeMove", "swipeCancel", "swipeEnd", "update:open"]);
|
|
83
|
-
const slots = defineSlots();
|
|
84
|
-
const { t } = useLocale();
|
|
85
|
-
const rootProps = useForwardPropsEmits(reactivePick(props, "as", "defaultOpen", "open", "duration", "type"), emits);
|
|
73
|
+
<script setup lang="ts">
|
|
74
|
+
import { ref, computed, onMounted } from 'vue'
|
|
75
|
+
import { ToastRoot, ToastTitle, ToastDescription, ToastAction, ToastClose, useForwardPropsEmits } from 'reka-ui'
|
|
76
|
+
import { reactivePick } from '@vueuse/core'
|
|
77
|
+
import { useLocale } from '../composables/useLocale'
|
|
78
|
+
import icons from '../dictionary/icons'
|
|
79
|
+
import B24Avatar from './Avatar.vue'
|
|
80
|
+
import B24Button from './Button.vue'
|
|
81
|
+
|
|
82
|
+
const props = withDefaults(defineProps<ToastProps>(), {
|
|
83
|
+
close: true,
|
|
84
|
+
orientation: 'vertical'
|
|
85
|
+
})
|
|
86
|
+
const emits = defineEmits<ToastEmits>()
|
|
87
|
+
const slots = defineSlots<ToastSlots>()
|
|
88
|
+
|
|
89
|
+
const { t } = useLocale()
|
|
90
|
+
|
|
91
|
+
const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'defaultOpen', 'open', 'duration', 'type'), emits)
|
|
92
|
+
|
|
86
93
|
const b24ui = computed(() => toast({
|
|
87
94
|
color: props.color,
|
|
88
95
|
orientation: props.orientation,
|
|
89
96
|
title: !!props.title || !!slots.title
|
|
90
|
-
}))
|
|
91
|
-
|
|
92
|
-
const
|
|
97
|
+
}))
|
|
98
|
+
|
|
99
|
+
const el = ref()
|
|
100
|
+
const height = ref(0)
|
|
101
|
+
|
|
93
102
|
onMounted(() => {
|
|
94
103
|
if (!el.value) {
|
|
95
|
-
return
|
|
104
|
+
return
|
|
96
105
|
}
|
|
106
|
+
|
|
97
107
|
setTimeout(() => {
|
|
98
|
-
height.value = el.value.$el.getBoundingClientRect()?.height
|
|
99
|
-
}, 0)
|
|
100
|
-
})
|
|
108
|
+
height.value = el.value.$el.getBoundingClientRect()?.height
|
|
109
|
+
}, 0)
|
|
110
|
+
})
|
|
111
|
+
|
|
101
112
|
defineExpose({
|
|
102
113
|
height
|
|
103
|
-
})
|
|
114
|
+
})
|
|
104
115
|
</script>
|
|
105
116
|
|
|
106
117
|
<template>
|
|
@@ -118,7 +129,7 @@ defineExpose({
|
|
|
118
129
|
v-if="icon"
|
|
119
130
|
:class="b24ui.icon({ class: props.b24ui?.icon })"
|
|
120
131
|
/>
|
|
121
|
-
<B24Avatar v-else-if="avatar" :size="props.b24ui?.avatarSize || b24ui.avatarSize()" v-bind="avatar" :class="b24ui.avatar({ class: props.b24ui?.avatar })" />
|
|
132
|
+
<B24Avatar v-else-if="avatar" :size="((props.b24ui?.avatarSize || b24ui.avatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="b24ui.avatar({ class: props.b24ui?.avatar })" />
|
|
122
133
|
</slot>
|
|
123
134
|
|
|
124
135
|
<div :class="b24ui.wrapper({ class: props.b24ui?.wrapper })">
|
|
@@ -150,7 +161,7 @@ defineExpose({
|
|
|
150
161
|
</div>
|
|
151
162
|
</div>
|
|
152
163
|
|
|
153
|
-
<div v-if="orientation === 'horizontal' && actions?.length || close !== null" :class="b24ui.actions({ class: props.b24ui?.actions, orientation: 'horizontal' })">
|
|
164
|
+
<div v-if="(orientation === 'horizontal' && actions?.length) || close !== null" :class="b24ui.actions({ class: props.b24ui?.actions, orientation: 'horizontal' })">
|
|
154
165
|
<template v-if="orientation === 'horizontal' && actions?.length">
|
|
155
166
|
<slot name="actions">
|
|
156
167
|
<ToastAction v-for="(action, index) in actions" :key="index" :alt-text="action.label || 'Action'" as-child @click.stop>
|
|
@@ -167,7 +178,7 @@ defineExpose({
|
|
|
167
178
|
size="xs"
|
|
168
179
|
color="link"
|
|
169
180
|
:aria-label="t('toast.close')"
|
|
170
|
-
v-bind="typeof close === 'object' ? close : {}"
|
|
181
|
+
v-bind="(typeof close === 'object' ? close as Partial<ButtonProps> : {})"
|
|
171
182
|
:class="b24ui.close({ class: props.b24ui?.close })"
|
|
172
183
|
@click.stop
|
|
173
184
|
/>
|