@redseed/redseed-ui-vue3 2.23.7 → 2.24.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
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
|
+
import _ from 'lodash'
|
|
2
|
+
window._ = _
|
|
3
|
+
|
|
1
4
|
export * from './src/components/Avatar'
|
|
2
5
|
export * from './src/components/Badge'
|
|
3
|
-
export * from './src/components/BodyText'
|
|
4
6
|
export * from './src/components/Breadcrumbs'
|
|
5
7
|
export * from './src/components/Button'
|
|
6
8
|
export * from './src/components/ButtonGroup'
|
|
7
9
|
export * from './src/components/Card'
|
|
8
10
|
export * from './src/components/CardGroup'
|
|
11
|
+
export * from './src/components/ColumnLayout'
|
|
9
12
|
export * from './src/components/DropdownMenu'
|
|
10
13
|
export * from './src/components/Empty'
|
|
11
14
|
export * from './src/components/Form'
|
|
12
15
|
export * from './src/components/FormField'
|
|
16
|
+
export * from './src/components/HTML'
|
|
13
17
|
export * from './src/components/Image'
|
|
14
18
|
export * from './src/components/Link'
|
|
15
19
|
export * from './src/components/LinkedList'
|
|
@@ -26,5 +30,4 @@ export * from './src/components/SectionHeading'
|
|
|
26
30
|
export * from './src/components/Social'
|
|
27
31
|
export * from './src/components/Sorting'
|
|
28
32
|
export * from './src/components/Switcher'
|
|
29
|
-
export * from './src/components/Toggle'
|
|
30
|
-
export * from './src/components/ColumnLayout'
|
|
33
|
+
export * from './src/components/Toggle'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redseed/redseed-ui-vue3",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.24.0",
|
|
4
4
|
"description": "RedSeed UI Vue 3 components",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"@heroicons/vue": "^2.1.5",
|
|
14
14
|
"@vueuse/components": "^10.11.0",
|
|
15
15
|
"@vueuse/core": "^10.11.0",
|
|
16
|
+
"lodash": "^4.17.21",
|
|
16
17
|
"lottie-web": "^5.12.2",
|
|
17
18
|
"vue": "^3.4.36"
|
|
18
19
|
}
|
|
@@ -3,7 +3,7 @@ import { ref, computed } from 'vue'
|
|
|
3
3
|
import ButtonPrimary from '../Button/ButtonPrimary.vue'
|
|
4
4
|
import ButtonSecondary from '../Button/ButtonSecondary.vue'
|
|
5
5
|
import ButtonTertiary from '../Button/ButtonTertiary.vue'
|
|
6
|
-
import BodyText from '../
|
|
6
|
+
import BodyText from '../HTML/BodyText.vue'
|
|
7
7
|
import { ExclamationCircleIcon } from '@heroicons/vue/24/outline'
|
|
8
8
|
import { useResponsiveWidth } from '../../helpers/ResponsiveWidth'
|
|
9
9
|
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { ref, computed, onMounted, watch } from 'vue'
|
|
3
|
+
import { useElementBounding } from '@vueuse/core'
|
|
4
|
+
import LinkPrimary from '../Link/LinkPrimary.vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps({
|
|
7
|
+
html: {
|
|
8
|
+
type: String,
|
|
9
|
+
required: true,
|
|
10
|
+
},
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
const readMoreId = _.uniqueId('read_more_')
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Custom interpolate to allow for
|
|
17
|
+
* {{read_more}}, {{ read_more }}, {{ ReadMore }} interpolation
|
|
18
|
+
*/
|
|
19
|
+
const customInterpolate = /{{([\s\S]+?)}}/g
|
|
20
|
+
|
|
21
|
+
const compiled = _.template(props.html, { interpolate: customInterpolate })
|
|
22
|
+
const result = compiled({ read_more: `<a id="${readMoreId}"></a>` })
|
|
23
|
+
|
|
24
|
+
const showMore = ref(false)
|
|
25
|
+
|
|
26
|
+
watch(showMore, () => {
|
|
27
|
+
if (showMore.value) {
|
|
28
|
+
htmlContentElement.value.style.maxHeight = `${htmlContentElementMoreHeight.value}px`
|
|
29
|
+
return
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
htmlContentElement.value.style.maxHeight = `${htmlContentElementLessHeight.value}px`
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
const htmlContentElement = ref(null)
|
|
36
|
+
const htmlContentElementBounding = useElementBounding(htmlContentElement)
|
|
37
|
+
|
|
38
|
+
const htmlContentElementLessHeight = ref(0)
|
|
39
|
+
const htmlContentElementMoreHeight = ref(0)
|
|
40
|
+
|
|
41
|
+
const readMoreElement = ref(null)
|
|
42
|
+
|
|
43
|
+
const hasReadMore = computed(() => !!readMoreElement.value)
|
|
44
|
+
|
|
45
|
+
onMounted(() => {
|
|
46
|
+
if (!document.getElementById(readMoreId)) return
|
|
47
|
+
|
|
48
|
+
readMoreElement.value = document.getElementById(readMoreId)
|
|
49
|
+
const readMoreElementBounding = readMoreElement.value.getBoundingClientRect()
|
|
50
|
+
|
|
51
|
+
if (htmlContentElement.value && readMoreElement.value) {
|
|
52
|
+
htmlContentElementMoreHeight.value = htmlContentElementBounding.height.value
|
|
53
|
+
|
|
54
|
+
htmlContentElementLessHeight.value = readMoreElementBounding.top - htmlContentElementBounding.top.value
|
|
55
|
+
|
|
56
|
+
htmlContentElement.value.style.maxHeight = `${htmlContentElementLessHeight.value}px`
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
</script>
|
|
60
|
+
<template>
|
|
61
|
+
<div class="rsui-read-more-html">
|
|
62
|
+
<div ref="htmlContentElement"
|
|
63
|
+
class="rsui-read-more-html__content"
|
|
64
|
+
v-html="result"
|
|
65
|
+
></div>
|
|
66
|
+
<div v-if="hasReadMore" class="rsui-read-more-html__link">
|
|
67
|
+
<LinkPrimary md v-if="!showMore" @click="showMore = true">
|
|
68
|
+
<slot name="more-label">More details</slot>
|
|
69
|
+
</LinkPrimary>
|
|
70
|
+
<LinkPrimary md v-if="showMore" @click="showMore = false">
|
|
71
|
+
<slot name="less-label">Less details</slot>
|
|
72
|
+
</LinkPrimary>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</template>
|
|
76
|
+
<style lang="scss" scoped>
|
|
77
|
+
.rsui-read-more-html {
|
|
78
|
+
&__content {
|
|
79
|
+
@apply transition-all overflow-hidden;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&__link {
|
|
83
|
+
@apply mt-4;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
</style>
|
|
File without changes
|