@redseed/redseed-ui-vue3 1.9.2 → 1.10.0
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/index.js +20 -111
- package/package.json +1 -1
- package/src/components/Badge/index.js +7 -0
- package/src/components/Button/index.js +37 -0
- package/src/components/ButtonGroup/index.js +7 -0
- package/src/components/Card/Card.vue +21 -8
- package/src/components/Card/CardResource.vue +26 -0
- package/src/components/Card/index.js +7 -0
- package/src/components/DropdownMenu/index.js +7 -0
- package/src/components/Form/index.js +13 -0
- package/src/components/FormField/FormFieldCheckbox.vue +1 -1
- package/src/components/FormField/FormFieldSearch.vue +1 -1
- package/src/components/FormField/FormFieldSelect.vue +209 -0
- package/src/components/FormField/FormFieldSlot.vue +8 -2
- package/src/components/FormField/index.js +23 -0
- package/src/components/Image/Image16By9.vue +7 -1
- package/src/components/Image/Image3By1.vue +7 -1
- package/src/components/Image/Image9By16.vue +7 -1
- package/src/components/Image/ImageCircle.vue +7 -1
- package/src/components/Image/index.js +13 -0
- package/src/components/Link/LinkPrimary.vue +19 -0
- package/src/components/Link/LinkSlot.vue +87 -0
- package/src/components/Link/index.js +7 -0
- package/src/components/List/List.vue +70 -0
- package/src/components/List/ListControl.vue +217 -0
- package/src/components/List/ListItem.vue +192 -0
- package/src/components/List/index.js +9 -0
- package/src/components/Logo/index.js +11 -0
- package/src/components/MessageBox/index.js +5 -0
- package/src/components/MetaInfo/index.js +5 -0
- package/src/components/Modal/index.js +5 -0
- package/src/components/PageHeading/index.js +5 -0
- package/src/components/Pagination/Pagination.vue +275 -0
- package/src/components/Pagination/PaginationItem.vue +60 -0
- package/src/components/Pagination/PaginationItemCollapsed.vue +18 -0
- package/src/components/Pagination/PaginationItemNext.vue +17 -0
- package/src/components/Pagination/PaginationItemPrevious.vue +17 -0
- package/src/components/Pagination/index.js +13 -0
- package/src/components/Progress/index.js +5 -0
- package/src/components/Social/index.js +7 -0
- package/src/components/Sorting/Sorting.vue +79 -0
- package/src/components/Sorting/index.js +5 -0
- package/src/components/TwoColumnLayout/index.js +5 -0
package/index.js
CHANGED
|
@@ -1,111 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
import ButtonGroupItem from './src/components/ButtonGroup/ButtonGroupItem.vue'
|
|
22
|
-
import Card from './src/components/Card/Card.vue'
|
|
23
|
-
import DropdownMenu from './src/components/DropdownMenu/DropdownMenu.vue'
|
|
24
|
-
import DropdownOption from './src/components/DropdownMenu/DropdownOption.vue'
|
|
25
|
-
import FormFieldCheckbox from './src/components/FormField/FormFieldCheckbox.vue'
|
|
26
|
-
import FormFieldEmail from './src/components/FormField/FormFieldEmail.vue'
|
|
27
|
-
import FormFieldHidden from './src/components/FormField/FormFieldHidden.vue'
|
|
28
|
-
import FormFieldPassword from './src/components/FormField/FormFieldPassword.vue'
|
|
29
|
-
import FormFieldPasswordToggle from './src/components/FormField/FormFieldPasswordToggle.vue'
|
|
30
|
-
import FormFieldSearch from './src/components/FormField/FormFieldSearch.vue'
|
|
31
|
-
import FormFieldsLogin from './src/components/Form/FormFieldsLogin.vue'
|
|
32
|
-
import FormFieldSlot from './src/components/FormField/FormFieldSlot.vue'
|
|
33
|
-
import FormFieldsRegister from './src/components/Form/FormFieldsRegister.vue'
|
|
34
|
-
import FormFieldText from './src/components/FormField/FormFieldText.vue'
|
|
35
|
-
import FormFieldTextSuffix from './src/components/FormField/FormFieldTextSuffix.vue'
|
|
36
|
-
import FormWrapperBuild from './src/components/Form/FormWrapperBuild.vue'
|
|
37
|
-
import FormWrapperLMS from './src/components/Form/FormWrapperLMS.vue'
|
|
38
|
-
import Image from './src/components/Image/Image.vue'
|
|
39
|
-
import Image3By1 from './src/components/Image/Image3By1.vue'
|
|
40
|
-
import Image9By16 from './src/components/Image/Image9By16.vue'
|
|
41
|
-
import Image16By9 from './src/components/Image/Image16By9.vue'
|
|
42
|
-
import ImageCircle from './src/components/Image/ImageCircle.vue'
|
|
43
|
-
import LogoRedSeedBuild from './src/components/Logo/LogoRedSeedBuild.vue'
|
|
44
|
-
import LogoRedSeedCoach from './src/components/Logo/LogoRedSeedCoach.vue'
|
|
45
|
-
import LogoRedSeedCourses from './src/components/Logo/LogoRedSeedCourses.vue'
|
|
46
|
-
import LogoRedSeedLMS from './src/components/Logo/LogoRedSeedLMS.vue'
|
|
47
|
-
import MessageBox from './src/components/MessageBox/MessageBox.vue'
|
|
48
|
-
import MetaInfo from './src/components/MetaInfo/MetaInfo.vue'
|
|
49
|
-
import Modal from './src/components/Modal/Modal.vue'
|
|
50
|
-
import PageHeading from './src/components/PageHeading/PageHeading.vue'
|
|
51
|
-
import ProgressCircle from './src/components/Progress/ProgressCircle.vue'
|
|
52
|
-
import SignInWithGoogle from './src/components/Social/SignInWithGoogle.vue'
|
|
53
|
-
import SignUpWithGoogle from './src/components/Social/SignUpWithGoogle.vue'
|
|
54
|
-
import TwoColumnLayout from './src/components/TwoColumnLayout/TwoColumnLayout.vue'
|
|
55
|
-
|
|
56
|
-
export {
|
|
57
|
-
BadgeSlot,
|
|
58
|
-
BadgeSuccess,
|
|
59
|
-
ButtonDanger,
|
|
60
|
-
ButtonDangerFull,
|
|
61
|
-
ButtonDangerFullRounded,
|
|
62
|
-
ButtonDangerRounded,
|
|
63
|
-
ButtonGroup,
|
|
64
|
-
ButtonGroupItem,
|
|
65
|
-
ButtonPrimary,
|
|
66
|
-
ButtonPrimaryFull,
|
|
67
|
-
ButtonPrimaryFullRounded,
|
|
68
|
-
ButtonPrimaryRounded,
|
|
69
|
-
ButtonSecondary,
|
|
70
|
-
ButtonSecondaryFull,
|
|
71
|
-
ButtonSecondaryFullRounded,
|
|
72
|
-
ButtonSecondaryRounded,
|
|
73
|
-
ButtonSlot,
|
|
74
|
-
ButtonTertiary,
|
|
75
|
-
ButtonTertiaryFull,
|
|
76
|
-
ButtonTertiaryFullRounded,
|
|
77
|
-
ButtonTertiaryRounded,
|
|
78
|
-
Card,
|
|
79
|
-
DropdownMenu,
|
|
80
|
-
DropdownOption,
|
|
81
|
-
FormFieldCheckbox,
|
|
82
|
-
FormFieldEmail,
|
|
83
|
-
FormFieldHidden,
|
|
84
|
-
FormFieldPassword,
|
|
85
|
-
FormFieldPasswordToggle,
|
|
86
|
-
FormFieldSearch,
|
|
87
|
-
FormFieldsLogin,
|
|
88
|
-
FormFieldSlot,
|
|
89
|
-
FormFieldsRegister,
|
|
90
|
-
FormFieldText,
|
|
91
|
-
FormFieldTextSuffix,
|
|
92
|
-
FormWrapperBuild,
|
|
93
|
-
FormWrapperLMS,
|
|
94
|
-
Image,
|
|
95
|
-
Image3By1,
|
|
96
|
-
Image9By16,
|
|
97
|
-
Image16By9,
|
|
98
|
-
ImageCircle,
|
|
99
|
-
LogoRedSeedBuild,
|
|
100
|
-
LogoRedSeedCoach,
|
|
101
|
-
LogoRedSeedCourses,
|
|
102
|
-
LogoRedSeedLMS,
|
|
103
|
-
MessageBox,
|
|
104
|
-
MetaInfo,
|
|
105
|
-
Modal,
|
|
106
|
-
PageHeading,
|
|
107
|
-
ProgressCircle,
|
|
108
|
-
SignInWithGoogle,
|
|
109
|
-
SignUpWithGoogle,
|
|
110
|
-
TwoColumnLayout,
|
|
111
|
-
}
|
|
1
|
+
export * from './src/components/Badge'
|
|
2
|
+
export * from './src/components/Button'
|
|
3
|
+
export * from './src/components/ButtonGroup'
|
|
4
|
+
export * from './src/components/Card'
|
|
5
|
+
export * from './src/components/DropdownMenu'
|
|
6
|
+
export * from './src/components/Form'
|
|
7
|
+
export * from './src/components/FormField'
|
|
8
|
+
export * from './src/components/Image'
|
|
9
|
+
export * from './src/components/Link'
|
|
10
|
+
export * from './src/components/List'
|
|
11
|
+
export * from './src/components/Logo'
|
|
12
|
+
export * from './src/components/MessageBox'
|
|
13
|
+
export * from './src/components/MetaInfo'
|
|
14
|
+
export * from './src/components/Modal'
|
|
15
|
+
export * from './src/components/PageHeading'
|
|
16
|
+
export * from './src/components/Pagination'
|
|
17
|
+
export * from './src/components/Progress'
|
|
18
|
+
export * from './src/components/Social'
|
|
19
|
+
export * from './src/components/Sorting'
|
|
20
|
+
export * from './src/components/TwoColumnLayout'
|
package/package.json
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import ButtonDanger from './ButtonDanger.vue'
|
|
2
|
+
import ButtonDangerFull from './ButtonDangerFull.vue'
|
|
3
|
+
import ButtonDangerFullRounded from './ButtonDangerFullRounded.vue'
|
|
4
|
+
import ButtonDangerRounded from './ButtonDangerRounded.vue'
|
|
5
|
+
import ButtonPrimary from './ButtonPrimary.vue'
|
|
6
|
+
import ButtonPrimaryFull from './ButtonPrimaryFull.vue'
|
|
7
|
+
import ButtonPrimaryFullRounded from './ButtonPrimaryFullRounded.vue'
|
|
8
|
+
import ButtonPrimaryRounded from './ButtonPrimaryRounded.vue'
|
|
9
|
+
import ButtonSecondary from './ButtonSecondary.vue'
|
|
10
|
+
import ButtonSecondaryFull from './ButtonSecondaryFull.vue'
|
|
11
|
+
import ButtonSecondaryFullRounded from './ButtonSecondaryFullRounded.vue'
|
|
12
|
+
import ButtonSecondaryRounded from './ButtonSecondaryRounded.vue'
|
|
13
|
+
import ButtonSlot from './ButtonSlot.vue'
|
|
14
|
+
import ButtonTertiary from './ButtonTertiary.vue'
|
|
15
|
+
import ButtonTertiaryFull from './ButtonTertiaryFull.vue'
|
|
16
|
+
import ButtonTertiaryFullRounded from './ButtonTertiaryFullRounded.vue'
|
|
17
|
+
import ButtonTertiaryRounded from './ButtonTertiaryRounded.vue'
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
ButtonDanger,
|
|
21
|
+
ButtonDangerFull,
|
|
22
|
+
ButtonDangerFullRounded,
|
|
23
|
+
ButtonDangerRounded,
|
|
24
|
+
ButtonPrimary,
|
|
25
|
+
ButtonPrimaryFull,
|
|
26
|
+
ButtonPrimaryFullRounded,
|
|
27
|
+
ButtonPrimaryRounded,
|
|
28
|
+
ButtonSecondary,
|
|
29
|
+
ButtonSecondaryFull,
|
|
30
|
+
ButtonSecondaryFullRounded,
|
|
31
|
+
ButtonSecondaryRounded,
|
|
32
|
+
ButtonSlot,
|
|
33
|
+
ButtonTertiary,
|
|
34
|
+
ButtonTertiaryFull,
|
|
35
|
+
ButtonTertiaryFullRounded,
|
|
36
|
+
ButtonTertiaryRounded,
|
|
37
|
+
}
|
|
@@ -39,18 +39,28 @@ function clicked() {
|
|
|
39
39
|
</div>
|
|
40
40
|
<div class="rsui-card__content">
|
|
41
41
|
<div v-if="$slots.title || $slots.status"
|
|
42
|
-
class="
|
|
42
|
+
:class="[
|
|
43
|
+
'rsui-card__content-top',
|
|
44
|
+
{
|
|
45
|
+
'rsui-card__content-top--action': $slots['title-action'],
|
|
46
|
+
}
|
|
47
|
+
]"
|
|
43
48
|
>
|
|
44
49
|
<div v-if="$slots.title"
|
|
45
|
-
class="rsui-
|
|
50
|
+
class="rsui-card__title"
|
|
46
51
|
>
|
|
47
52
|
<slot name="title"></slot>
|
|
48
53
|
</div>
|
|
49
54
|
<div v-if="$slots.status"
|
|
50
|
-
class="rsui-
|
|
55
|
+
class="rsui-card__title-status"
|
|
51
56
|
>
|
|
52
57
|
<slot name="status"></slot>
|
|
53
58
|
</div>
|
|
59
|
+
<div v-if="$slots['title-action']"
|
|
60
|
+
class="rsui-card__title-action"
|
|
61
|
+
>
|
|
62
|
+
<slot name="title-action"></slot>
|
|
63
|
+
</div>
|
|
54
64
|
</div>
|
|
55
65
|
<slot></slot>
|
|
56
66
|
<div v-if="$slots.meta"
|
|
@@ -69,7 +79,7 @@ function clicked() {
|
|
|
69
79
|
<style lang="scss" scoped>
|
|
70
80
|
.rsui-card {
|
|
71
81
|
@apply flex flex-col;
|
|
72
|
-
@apply select-none
|
|
82
|
+
@apply select-none transition duration-200;
|
|
73
83
|
@apply border border-gray-100 rounded-lg bg-white shadow-full-light;
|
|
74
84
|
&--hoverable {
|
|
75
85
|
@apply hover:shadow-md;
|
|
@@ -78,16 +88,19 @@ function clicked() {
|
|
|
78
88
|
@apply cursor-pointer;
|
|
79
89
|
}
|
|
80
90
|
&__image {
|
|
81
|
-
|
|
91
|
+
@apply rounded-t-lg overflow-hidden;
|
|
82
92
|
}
|
|
83
93
|
&__content {
|
|
84
94
|
@apply min-h-14 p-3 flex-1;
|
|
85
95
|
&-top {
|
|
86
96
|
@apply flex justify-between space-x-2 pb-2;
|
|
97
|
+
&--action {
|
|
98
|
+
@apply items-center;
|
|
99
|
+
}
|
|
87
100
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
101
|
+
}
|
|
102
|
+
&__title {
|
|
103
|
+
@apply max-h-12 text-lg font-semibold leading-6 line-clamp-2;
|
|
91
104
|
}
|
|
92
105
|
&__meta {
|
|
93
106
|
@apply grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-2 mt-4;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import Card from '../Card/Card.vue'
|
|
3
|
+
</script>
|
|
4
|
+
<template>
|
|
5
|
+
<Card class="rsui-card-resource"
|
|
6
|
+
:clickable="false"
|
|
7
|
+
:hoverable="false"
|
|
8
|
+
>
|
|
9
|
+
<template #title>
|
|
10
|
+
<slot name="card-title"></slot>
|
|
11
|
+
</template>
|
|
12
|
+
<template #title-action>
|
|
13
|
+
<slot name="card-action"></slot>
|
|
14
|
+
</template>
|
|
15
|
+
<div class="rsui-card-resource__content">
|
|
16
|
+
<slot></slot>
|
|
17
|
+
</div>
|
|
18
|
+
</Card>
|
|
19
|
+
</template>
|
|
20
|
+
<style lang="scss" scoped>
|
|
21
|
+
.rsui-card-resource {
|
|
22
|
+
&__content {
|
|
23
|
+
@apply mt-4;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
</style>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import FormFieldsLogin from './FormFieldsLogin.vue'
|
|
2
|
+
import FormFieldsRegister from './FormFieldsRegister.vue'
|
|
3
|
+
import FormSlot from './FormSlot.vue'
|
|
4
|
+
import FormWrapperBuild from './FormWrapperBuild.vue'
|
|
5
|
+
import FormWrapperLMS from './FormWrapperLMS.vue'
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
FormFieldsLogin,
|
|
9
|
+
FormFieldsRegister,
|
|
10
|
+
FormSlot,
|
|
11
|
+
FormWrapperBuild,
|
|
12
|
+
FormWrapperLMS,
|
|
13
|
+
}
|
|
@@ -67,7 +67,7 @@ const proxyChecked = computed({
|
|
|
67
67
|
@apply w-6 h-6 shrink-0 relative bg-white;
|
|
68
68
|
|
|
69
69
|
input[type="checkbox"] {
|
|
70
|
-
@apply appearance-none absolute inset-0 rounded transition shadow-sm;
|
|
70
|
+
@apply appearance-none absolute inset-0 rounded-md transition shadow-sm;
|
|
71
71
|
@apply w-full h-full border border-gray-300 text-transparent bg-none;
|
|
72
72
|
@apply focus:border-gray-300 focus:ring focus:ring-offset-0 focus:ring-gray-300 focus:ring-opacity-50;
|
|
73
73
|
@apply invalid:border-red-500 invalid:ring invalid:ring-red-500 invalid:ring-opacity-20;
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { ref } from 'vue'
|
|
3
|
+
import { onClickOutside } from '@vueuse/core'
|
|
4
|
+
import FormFieldSlot from './FormFieldSlot.vue'
|
|
5
|
+
import { ChevronDownIcon, CheckIcon } from '@heroicons/vue/24/outline'
|
|
6
|
+
|
|
7
|
+
// Apply all attributes to the input element, not the wrapper div
|
|
8
|
+
defineOptions({
|
|
9
|
+
inheritAttrs: false,
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
const props = defineProps({
|
|
13
|
+
modelValue: [
|
|
14
|
+
String,
|
|
15
|
+
Number
|
|
16
|
+
], //vue3 specific v-model pattern
|
|
17
|
+
options: {
|
|
18
|
+
type: Array,
|
|
19
|
+
default: () => []
|
|
20
|
+
},
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
const emit = defineEmits(['update:modelValue']) //vue3 specific v-model pattern
|
|
24
|
+
|
|
25
|
+
const formFieldSelect = ref(null)
|
|
26
|
+
|
|
27
|
+
onClickOutside(formFieldSelect, () => close())
|
|
28
|
+
|
|
29
|
+
const isOpen = ref(false)
|
|
30
|
+
|
|
31
|
+
function toggle() {
|
|
32
|
+
isOpen.value = !isOpen.value
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function close() {
|
|
36
|
+
isOpen.value = false
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
function onClick() {
|
|
41
|
+
toggle()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function onChange(event) {
|
|
45
|
+
emit('update:modelValue', event.target.value)
|
|
46
|
+
close()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function choose(option) {
|
|
50
|
+
emit('update:modelValue', option.value)
|
|
51
|
+
close()
|
|
52
|
+
}
|
|
53
|
+
</script>
|
|
54
|
+
<template>
|
|
55
|
+
<FormFieldSlot
|
|
56
|
+
ref="formFieldSelect"
|
|
57
|
+
class="rsui-form-field-select"
|
|
58
|
+
:id="$attrs.id"
|
|
59
|
+
>
|
|
60
|
+
<template #label v-if="$slots.label">
|
|
61
|
+
<slot name="label"></slot>
|
|
62
|
+
</template>
|
|
63
|
+
<div :class="{
|
|
64
|
+
'rsui-form-field-select__group': true,
|
|
65
|
+
}">
|
|
66
|
+
<select
|
|
67
|
+
v-bind="$attrs"
|
|
68
|
+
@click="onClick"
|
|
69
|
+
@change="onChange"
|
|
70
|
+
>
|
|
71
|
+
<option value="">
|
|
72
|
+
<slot name="default-option">
|
|
73
|
+
Select an option
|
|
74
|
+
</slot>
|
|
75
|
+
</option>
|
|
76
|
+
<option
|
|
77
|
+
v-for="option in options"
|
|
78
|
+
:key="option.value"
|
|
79
|
+
:value="option.value"
|
|
80
|
+
:selected="option.value === modelValue"
|
|
81
|
+
>
|
|
82
|
+
{{ option.label }}
|
|
83
|
+
</option>
|
|
84
|
+
</select>
|
|
85
|
+
|
|
86
|
+
<transition
|
|
87
|
+
enter-active-class="enter-active-class"
|
|
88
|
+
enter-from-class="enter-from-class"
|
|
89
|
+
enter-to-class="enter-to-class"
|
|
90
|
+
leave-active-class="leave-active-class"
|
|
91
|
+
leave-from-class="leave-from-class"
|
|
92
|
+
leave-to-class="leave-to-class"
|
|
93
|
+
>
|
|
94
|
+
<div v-show="isOpen"
|
|
95
|
+
:class="[
|
|
96
|
+
'rsui-form-field-select__options',
|
|
97
|
+
{ 'rsui-form-field-select__options--open': isOpen }
|
|
98
|
+
]"
|
|
99
|
+
>
|
|
100
|
+
<div class="rsui-form-field-select__option rsui-form-field-select__option--disabled"
|
|
101
|
+
value=""
|
|
102
|
+
>
|
|
103
|
+
<slot name="default-option">
|
|
104
|
+
Select an option
|
|
105
|
+
</slot>
|
|
106
|
+
</div>
|
|
107
|
+
<div v-for="option in options"
|
|
108
|
+
:key="option.value"
|
|
109
|
+
class="rsui-form-field-select__option"
|
|
110
|
+
@click="choose(option)"
|
|
111
|
+
>
|
|
112
|
+
<div class="rsui-form-field-select__option-label"
|
|
113
|
+
:title="option.label"
|
|
114
|
+
>
|
|
115
|
+
{{ option.label }}
|
|
116
|
+
</div>
|
|
117
|
+
<div class="rsui-form-field-select__option-icon">
|
|
118
|
+
<CheckIcon v-if="option.value === modelValue"></CheckIcon>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
</transition>
|
|
123
|
+
<div :class="[
|
|
124
|
+
'rsui-form-field-select__icon',
|
|
125
|
+
{ 'rsui-form-field-select__icon--open': isOpen }
|
|
126
|
+
]">
|
|
127
|
+
<ChevronDownIcon></ChevronDownIcon>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<template #help v-if="$slots.help">
|
|
132
|
+
<slot name="help"></slot>
|
|
133
|
+
</template>
|
|
134
|
+
|
|
135
|
+
<template #error v-if="$slots.error">
|
|
136
|
+
<slot name="error"></slot>
|
|
137
|
+
</template>
|
|
138
|
+
</FormFieldSlot>
|
|
139
|
+
</template>
|
|
140
|
+
<style lang="scss" scoped>
|
|
141
|
+
.enter-active-class {
|
|
142
|
+
@apply transition ease-out duration-200;
|
|
143
|
+
}
|
|
144
|
+
.enter-from-class {
|
|
145
|
+
@apply transform opacity-0 scale-95;
|
|
146
|
+
}
|
|
147
|
+
.enter-to-class {
|
|
148
|
+
@apply transform opacity-100 scale-100;
|
|
149
|
+
}
|
|
150
|
+
.leave-active-class {
|
|
151
|
+
@apply transition ease-in duration-75;
|
|
152
|
+
}
|
|
153
|
+
.leave-from-class {
|
|
154
|
+
@apply transform opacity-100 scale-100;
|
|
155
|
+
}
|
|
156
|
+
.leave-to-class {
|
|
157
|
+
@apply transform opacity-0 scale-95;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.rsui-form-field-select {
|
|
161
|
+
@apply relative;
|
|
162
|
+
|
|
163
|
+
&__group {
|
|
164
|
+
@apply relative;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
select {
|
|
168
|
+
@apply pr-14 truncate;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
&__options {
|
|
172
|
+
@apply hidden absolute origin-top w-full z-50;
|
|
173
|
+
@apply bg-white p-2 mt-2 rounded-md shadow-full-light;
|
|
174
|
+
&--open {
|
|
175
|
+
@apply block;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
&__option {
|
|
180
|
+
@apply flex flex-nowrap items-center justify-between cursor-pointer px-4 py-3 rounded-md;
|
|
181
|
+
@apply bg-white hover:bg-gray-200 text-default-dark transition;
|
|
182
|
+
&--disabled {
|
|
183
|
+
@apply opacity-50 hover:bg-white cursor-auto;
|
|
184
|
+
}
|
|
185
|
+
&-label {
|
|
186
|
+
@apply text-base truncate;
|
|
187
|
+
}
|
|
188
|
+
&-icon {
|
|
189
|
+
@apply size-5;
|
|
190
|
+
}
|
|
191
|
+
svg {
|
|
192
|
+
@apply size-5;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
&__icon {
|
|
197
|
+
@apply absolute top-0 right-5 bottom-0 flex items-center justify-center;
|
|
198
|
+
@apply text-secondary h-full w-8 pointer-events-none;
|
|
199
|
+
&--open {
|
|
200
|
+
svg {
|
|
201
|
+
@apply -rotate-180;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
svg {
|
|
205
|
+
@apply size-6 transform transition-transform;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
</style>
|
|
@@ -58,11 +58,17 @@ const formFieldSlotClass = computed(() => [
|
|
|
58
58
|
</style>
|
|
59
59
|
<style lang="scss">
|
|
60
60
|
.rsui-form-field-slot {
|
|
61
|
-
input:not([type='checkbox']):not([type='radio']) {
|
|
62
|
-
@apply block w-full border rounded shadow-sm text-base transition py-2 px-3;
|
|
61
|
+
input:not([type='checkbox']):not([type='radio']), select {
|
|
62
|
+
@apply block w-full border rounded-md shadow-sm text-base transition py-2 px-3;
|
|
63
63
|
@apply bg-white placeholder-gray-300 border-gray-300;
|
|
64
64
|
@apply focus:ring focus:ring-gray-300 focus:ring-opacity-50 focus:outline-none ring-0 focus:bg-white focus:border-gray-400;
|
|
65
65
|
@apply invalid:border-red-500 invalid:ring invalid:ring-red-500 invalid:ring-opacity-20;
|
|
66
66
|
}
|
|
67
|
+
select {
|
|
68
|
+
@apply appearance-none rounded-full px-5 cursor-pointer;
|
|
69
|
+
option {
|
|
70
|
+
@apply hidden;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
67
73
|
}
|
|
68
74
|
</style>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import FormFieldCheckbox from './FormFieldCheckbox.vue'
|
|
2
|
+
import FormFieldEmail from './FormFieldEmail.vue'
|
|
3
|
+
import FormFieldHidden from './FormFieldHidden.vue'
|
|
4
|
+
import FormFieldPassword from './FormFieldPassword.vue'
|
|
5
|
+
import FormFieldPasswordToggle from './FormFieldPasswordToggle.vue'
|
|
6
|
+
import FormFieldSearch from './FormFieldSearch.vue'
|
|
7
|
+
import FormFieldSelect from './FormFieldSelect.vue'
|
|
8
|
+
import FormFieldSlot from './FormFieldSlot.vue'
|
|
9
|
+
import FormFieldText from './FormFieldText.vue'
|
|
10
|
+
import FormFieldTextSuffix from './FormFieldTextSuffix.vue'
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
FormFieldCheckbox,
|
|
14
|
+
FormFieldEmail,
|
|
15
|
+
FormFieldHidden,
|
|
16
|
+
FormFieldPassword,
|
|
17
|
+
FormFieldPasswordToggle,
|
|
18
|
+
FormFieldSearch,
|
|
19
|
+
FormFieldSelect,
|
|
20
|
+
FormFieldSlot,
|
|
21
|
+
FormFieldText,
|
|
22
|
+
FormFieldTextSuffix,
|
|
23
|
+
}
|
|
@@ -7,7 +7,13 @@ defineOptions({
|
|
|
7
7
|
</script>
|
|
8
8
|
<template>
|
|
9
9
|
<div class="rsui-image-16/9">
|
|
10
|
-
<Image v-bind="$attrs"
|
|
10
|
+
<Image v-bind="$attrs">
|
|
11
|
+
<template v-for="(_, name) in $slots"
|
|
12
|
+
v-slot:[name]="slotProps"
|
|
13
|
+
>
|
|
14
|
+
<slot :name="name" v-bind="slotProps"></slot>
|
|
15
|
+
</template>
|
|
16
|
+
</Image>
|
|
11
17
|
</div>
|
|
12
18
|
</template>
|
|
13
19
|
<style lang="scss" scoped>
|
|
@@ -7,7 +7,13 @@ defineOptions({
|
|
|
7
7
|
</script>
|
|
8
8
|
<template>
|
|
9
9
|
<div class="rsui-image-3/1">
|
|
10
|
-
<Image v-bind="$attrs"
|
|
10
|
+
<Image v-bind="$attrs">
|
|
11
|
+
<template v-for="(_, name) in $slots"
|
|
12
|
+
v-slot:[name]="slotProps"
|
|
13
|
+
>
|
|
14
|
+
<slot :name="name" v-bind="slotProps"></slot>
|
|
15
|
+
</template>
|
|
16
|
+
</Image>
|
|
11
17
|
</div>
|
|
12
18
|
</template>
|
|
13
19
|
<style lang="scss" scoped>
|
|
@@ -7,7 +7,13 @@ defineOptions({
|
|
|
7
7
|
</script>
|
|
8
8
|
<template>
|
|
9
9
|
<div class="rsui-image-9/16">
|
|
10
|
-
<Image v-bind="$attrs"
|
|
10
|
+
<Image v-bind="$attrs">
|
|
11
|
+
<template v-for="(_, name) in $slots"
|
|
12
|
+
v-slot:[name]="slotProps"
|
|
13
|
+
>
|
|
14
|
+
<slot :name="name" v-bind="slotProps"></slot>
|
|
15
|
+
</template>
|
|
16
|
+
</Image>
|
|
11
17
|
</div>
|
|
12
18
|
</template>
|
|
13
19
|
<style lang="scss" scoped>
|
|
@@ -7,7 +7,13 @@ defineOptions({
|
|
|
7
7
|
</script>
|
|
8
8
|
<template>
|
|
9
9
|
<div class="rsui-image-circle">
|
|
10
|
-
<Image v-bind="$attrs"
|
|
10
|
+
<Image v-bind="$attrs">
|
|
11
|
+
<template v-for="(_, name) in $slots"
|
|
12
|
+
v-slot:[name]="slotProps"
|
|
13
|
+
>
|
|
14
|
+
<slot :name="name" v-bind="slotProps"></slot>
|
|
15
|
+
</template>
|
|
16
|
+
</Image>
|
|
11
17
|
</div>
|
|
12
18
|
</template>
|
|
13
19
|
<style lang="scss" scoped>
|