@weni/unnnic-system 3.2.4 → 3.2.5-alpha.1
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/components/Accordion/Accordion.vue.d.ts +1 -1
- package/dist/components/Alert/Alert.vue.d.ts +5 -5
- package/dist/components/Alert/Version1dot1.vue.d.ts +2 -2
- package/dist/components/AudioRecorder/AudioHandler.vue.d.ts +1 -1
- package/dist/components/AudioRecorder/AudioPlayer.vue.d.ts +1 -1
- package/dist/components/AudioRecorder/AudioRecorder.vue.d.ts +3 -3
- package/dist/components/AvatarIcon/AvatarIcon.vue.d.ts +2 -2
- package/dist/components/Banner/Banner.vue.d.ts +1 -1
- package/dist/components/Banner/InfoBanner.vue.d.ts +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.vue.d.ts +1 -1
- package/dist/components/Button/Button.vue.d.ts +2 -2
- package/dist/components/Button/Button.vue.d.ts.map +1 -1
- package/dist/components/Button/ButtonIcon.vue.d.ts +1 -1
- package/dist/components/Button/types.d.ts +1 -1
- package/dist/components/Button/types.d.ts.map +1 -1
- package/dist/components/Card/AccountCard.vue.d.ts +3 -3
- package/dist/components/Card/BlankCard.vue.d.ts +1 -1
- package/dist/components/Card/Card.vue.d.ts +20 -20
- package/dist/components/Card/CardCompany.vue.d.ts +7 -7
- package/dist/components/Card/CardData.vue.d.ts +1 -1
- package/dist/components/Card/CardStatusesContainer.vue.d.ts +3 -3
- package/dist/components/Card/ContentCard.vue.d.ts +2 -2
- package/dist/components/Card/DashCard.vue.d.ts +4 -4
- package/dist/components/Card/DefaultCard.vue.d.ts +1 -1
- package/dist/components/Card/MarketplaceCard.vue.d.ts +2 -2
- package/dist/components/Card/SimpleCard.vue.d.ts +2 -2
- package/dist/components/Card/StatusCard.vue.d.ts +2 -2
- package/dist/components/Card/TitleCard.vue.d.ts +1 -1
- package/dist/components/CardImage/CardImage.vue.d.ts +7 -7
- package/dist/components/CardInformation/CardInformation.vue.d.ts +3 -3
- package/dist/components/CardProject/CardProject.vue.d.ts +2 -2
- package/dist/components/Carousel/Carousel.vue.d.ts +10 -10
- package/dist/components/Carousel/TagCarousel.vue.d.ts +8 -8
- package/dist/components/ChartBar/ChartBar.vue.d.ts +7 -7
- package/dist/components/ChatText/ChatText.vue.d.ts +1 -1
- package/dist/components/ChatsContact/ChatsContact.vue.d.ts +14 -14
- package/dist/components/ChatsDashboardTagLive/ChatsDashboardTagLive.vue.d.ts +1 -1
- package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts +1 -1
- package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts.map +1 -1
- package/dist/components/ChatsMessage/ChatsMessage.vue.d.ts +4 -4
- package/dist/components/ChatsMessage/ChatsMessageStatusBackdrop.vue.d.ts +2 -2
- package/dist/components/ChatsNavbar/ChatsNavbar.vue.d.ts +1 -1
- package/dist/components/ChatsUserAvatar/ChatsUserAvatar.vue.d.ts +2 -2
- package/dist/components/Checkbox/Checkbox.vue.d.ts +3 -3
- package/dist/components/Comment/Comment.vue.d.ts +1 -1
- package/dist/components/DataArea/DataArea.vue.d.ts +1 -1
- package/dist/components/DataTable/index.vue.d.ts +1 -1
- package/dist/components/DataTable/index.vue.d.ts.map +1 -1
- package/dist/components/DateFilter/DateFilter.vue.d.ts +182 -27
- package/dist/components/DatePicker/DatePicker.vue.d.ts +8 -8
- package/dist/components/Drawer/Drawer.vue.d.ts +7 -7
- package/dist/components/DropArea/DropArea.vue.d.ts +2 -0
- package/dist/components/DropArea/DropArea.vue.d.ts.map +1 -1
- package/dist/components/Dropdown/LanguageSelect.vue.d.ts +3 -3
- package/dist/components/Flag.vue.d.ts +2 -2
- package/dist/components/FormElement/FormElement.vue.d.ts +38 -32
- package/dist/components/FormElement/FormElement.vue.d.ts.map +1 -1
- package/dist/components/Icon/types.d.ts +1 -1
- package/dist/components/Icon/types.d.ts.map +1 -1
- package/dist/components/Icon.vue.d.ts +1 -1
- package/dist/components/Icon.vue.d.ts.map +1 -1
- package/dist/components/IconLoading/IconLoading.vue.d.ts +1 -1
- package/dist/components/ImportCard/ImportCard.vue.d.ts +7 -7
- package/dist/components/Input/BaseInput.vue.d.ts +10 -1
- package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
- package/dist/components/Input/Input.vue.d.ts +182 -27
- package/dist/components/Input/Input.vue.d.ts.map +1 -1
- package/dist/components/Input/TextInput.vue.d.ts +31 -13
- package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +192 -37
- package/dist/components/InputNext/InputNext.vue.d.ts +3 -3
- package/dist/components/Modal/Modal.vue.d.ts +2 -2
- package/dist/components/ModalDialog/ModalDialog.vue.d.ts +10 -10
- package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
- package/dist/components/ModalNext/ModalNext.vue.d.ts +189 -34
- package/dist/components/ModalUpload/ModalUpload.vue.d.ts +20 -14
- package/dist/components/MultiSelect/MultiSelect.vue.d.ts +7 -7
- package/dist/components/Pagination/Pagination.vue.d.ts +6 -6
- package/dist/components/ProgressBar/ProgressBar.vue.d.ts +1 -1
- package/dist/components/Radio/Radio.vue.d.ts +2 -2
- package/dist/components/SelectSmart/SelectSmart.vue.d.ts +44 -26
- package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +7 -7
- package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +4 -4
- package/dist/components/SelectTime/index.vue.d.ts +31 -13
- package/dist/components/Slider/Slider.vue.d.ts +1 -1
- package/dist/components/StarRating/StarRating.vue.d.ts +1 -1
- package/dist/components/Switch/Switch.vue.d.ts +2 -2
- package/dist/components/Tab/Tab.vue.d.ts +1 -1
- package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
- package/dist/components/TableNext/TablePagination.vue.d.ts +6 -6
- package/dist/components/TabsExpanded/TabsExpanded.vue.d.ts +1 -1
- package/dist/components/Tag/BrandTag.vue.d.ts +2 -2
- package/dist/components/Tag/DefaultTag.vue.d.ts +2 -2
- package/dist/components/Tag/IndicatorTag.vue.d.ts +1 -1
- package/dist/components/Tag/Tag.vue.d.ts +7 -7
- package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts +9 -0
- package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts.map +1 -0
- package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts +15 -0
- package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts.map +1 -0
- package/dist/components/TextArea/TextArea.vue.d.ts +38 -32
- package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
- package/dist/components/Tour/Tour.vue.d.ts +6 -6
- package/dist/components/Tour/TourPopover.vue.d.ts +6 -6
- package/dist/components/UploadArea/UploadArea.vue.d.ts +13 -7
- package/dist/components/index.d.ts +2071 -767
- package/dist/components/index.d.ts.map +1 -1
- package/dist/{es-d628da75.mjs → es-dc7f4ae0.mjs} +1 -1
- package/dist/{index-9a407ee0.mjs → index-93c6d4e1.mjs} +7917 -7731
- package/dist/{pt-br-d5be1f83.mjs → pt-br-6c72f1f4.mjs} +1 -1
- package/dist/style.css +1 -1
- package/dist/unnnic.mjs +126 -122
- package/dist/unnnic.umd.js +42 -41
- package/package.json +2 -2
- package/src/assets/img/previews/doc-preview.png +0 -0
- package/src/assets/img/previews/image-preview.png +0 -0
- package/src/assets/img/previews/video-preview.png +0 -0
- package/src/components/Button/Button.vue +57 -108
- package/src/components/Button/types.ts +0 -1
- package/src/components/DropArea/DropArea.vue +26 -2
- package/src/components/FormElement/FormElement.vue +50 -90
- package/src/components/Icon/types.ts +7 -0
- package/src/components/Icon.vue +7 -0
- package/src/components/Input/BaseInput.vue +10 -12
- package/src/components/Input/Input.scss +17 -20
- package/src/components/Input/Input.vue +86 -28
- package/src/components/Input/TextInput.vue +27 -35
- package/src/components/Input/__test__/TextInput.spec.js +5 -5
- package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +12 -3
- package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -1
- package/src/components/ModalDialog/ModalDialog.vue +27 -29
- package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -1
- package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
- package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
- package/src/components/TemplatePreview/TemplatePreview.vue +249 -0
- package/src/components/TemplatePreview/TemplatePreviewModal.vue +51 -0
- package/src/components/TemplatePreview/types.d.ts +16 -0
- package/src/components/TextArea/TextArea.vue +14 -9
- package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +7 -2
- package/src/components/index.ts +12 -3
- package/src/stories/Button.stories.js +1 -10
- package/src/stories/Input.stories.js +17 -3
- package/src/stories/TemplatePreview.stories.js +94 -0
- package/src/stories/TemplatePreviewModal.stories.js +110 -0
|
@@ -42,7 +42,7 @@ exports[`TableNext.vue > matches the snapshot 1`] = `
|
|
|
42
42
|
<p data-v-e29458bb="" class="table-pagination__count" data-testid="count">1 - 1 of 1</p>
|
|
43
43
|
<div data-v-0eeff8cb="" data-v-e29458bb="" class="pagination"><button data-v-ceff2a60="" data-v-0eeff8cb="" data-test="previous-button" disabled="" class="unnnic-button unnnic-button--size-small unnnic-button--tertiary unnnic-button--icon-on-center">
|
|
44
44
|
<!--v-if-->
|
|
45
|
-
<!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--
|
|
45
|
+
<!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--ant unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
|
|
46
46
|
<path d="M26.8368 35.0005C26.5868 35.0005 26.3506 34.903 26.1743 34.7255L12.7743 21.3255C12.4206 20.9717 12.2256 20.5017 12.2256 20.0017C12.2256 19.5017 12.4193 19.0305 12.7731 18.6767L26.1743 5.27549C26.3506 5.09799 26.5868 5.00049 26.8368 5.00049C27.0868 5.00049 27.3231 5.09799 27.4993 5.27549C27.6768 5.45174 27.7743 5.68799 27.7743 5.93799C27.7743 6.18799 27.6768 6.42424 27.4993 6.60049L14.0993 20.0005L27.4993 33.4005C27.6768 33.578 27.7743 33.813 27.7743 34.063C27.7743 34.313 27.6768 34.5492 27.4993 34.7255C27.3218 34.9017 27.0868 35.0005 26.8368 35.0005Z" fill="#3B414D" class="primary"></path>
|
|
47
47
|
</svg><span data-v-ceff2a60="" class="unnnic-button__label" style="visibility: visible;" data-testid="button-label"> </span>
|
|
48
48
|
<!--v-if-->
|
|
@@ -53,7 +53,7 @@ exports[`TableNext.vue > matches the snapshot 1`] = `
|
|
|
53
53
|
<!--v-if-->
|
|
54
54
|
</button><button data-v-ceff2a60="" data-v-0eeff8cb="" data-test="next-button" disabled="" class="unnnic-button unnnic-button--size-small unnnic-button--tertiary unnnic-button--icon-on-center">
|
|
55
55
|
<!--v-if-->
|
|
56
|
-
<!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--
|
|
56
|
+
<!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--ant unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
|
|
57
57
|
<path d="M13.1635 35.0005C12.9135 35.0005 12.6772 34.903 12.501 34.7255C12.136 34.3605 12.136 33.7655 12.501 33.3992L25.901 20.0005L12.501 6.60049C12.3235 6.42424 12.226 6.18799 12.226 5.93799C12.226 5.68799 12.3235 5.45174 12.501 5.27549C12.6772 5.09799 12.9135 5.00049 13.1635 5.00049C13.4135 5.00049 13.6497 5.09799 13.826 5.27549L27.226 18.6755C27.956 19.4055 27.9572 20.5942 27.2272 21.3242L13.826 34.7255C13.6497 34.903 13.4135 35.0005 13.1635 35.0005Z" fill="#3B414D" class="primary"></path>
|
|
58
58
|
</svg><span data-v-ceff2a60="" class="unnnic-button__label" style="visibility: visible;" data-testid="button-label"> </span>
|
|
59
59
|
<!--v-if-->
|
|
@@ -5,7 +5,7 @@ exports[`TablePagination.vue > matches the snapshot 1`] = `
|
|
|
5
5
|
<p data-v-e29458bb="" class="table-pagination__count" data-testid="count">1 - 10 of 100</p>
|
|
6
6
|
<div data-v-0eeff8cb="" data-v-e29458bb="" class="pagination"><button data-v-ceff2a60="" data-v-0eeff8cb="" data-test="previous-button" disabled="" class="unnnic-button unnnic-button--size-small unnnic-button--tertiary unnnic-button--icon-on-center">
|
|
7
7
|
<!--v-if-->
|
|
8
|
-
<!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--
|
|
8
|
+
<!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--ant unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
|
|
9
9
|
<path d="M26.8368 35.0005C26.5868 35.0005 26.3506 34.903 26.1743 34.7255L12.7743 21.3255C12.4206 20.9717 12.2256 20.5017 12.2256 20.0017C12.2256 19.5017 12.4193 19.0305 12.7731 18.6767L26.1743 5.27549C26.3506 5.09799 26.5868 5.00049 26.8368 5.00049C27.0868 5.00049 27.3231 5.09799 27.4993 5.27549C27.6768 5.45174 27.7743 5.68799 27.7743 5.93799C27.7743 6.18799 27.6768 6.42424 27.4993 6.60049L14.0993 20.0005L27.4993 33.4005C27.6768 33.578 27.7743 33.813 27.7743 34.063C27.7743 34.313 27.6768 34.5492 27.4993 34.7255C27.3218 34.9017 27.0868 35.0005 26.8368 35.0005Z" fill="#3B414D" class="primary"></path>
|
|
10
10
|
</svg><span data-v-ceff2a60="" class="unnnic-button__label" style="visibility: visible;" data-testid="button-label"> </span>
|
|
11
11
|
<!--v-if-->
|
|
@@ -36,7 +36,7 @@ exports[`TablePagination.vue > matches the snapshot 1`] = `
|
|
|
36
36
|
<!--v-if-->
|
|
37
37
|
</button><button data-v-ceff2a60="" data-v-0eeff8cb="" data-test="next-button" class="unnnic-button unnnic-button--size-small unnnic-button--tertiary unnnic-button--icon-on-center">
|
|
38
38
|
<!--v-if-->
|
|
39
|
-
<!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--
|
|
39
|
+
<!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--ant unnnic-icon-scheme--neutral-dark" data-testid="icon-center" style="visibility: visible;">
|
|
40
40
|
<path d="M13.1635 35.0005C12.9135 35.0005 12.6772 34.903 12.501 34.7255C12.136 34.3605 12.136 33.7655 12.501 33.3992L25.901 20.0005L12.501 6.60049C12.3235 6.42424 12.226 6.18799 12.226 5.93799C12.226 5.68799 12.3235 5.45174 12.501 5.27549C12.6772 5.09799 12.9135 5.00049 13.1635 5.00049C13.4135 5.00049 13.6497 5.09799 13.826 5.27549L27.226 18.6755C27.956 19.4055 27.9572 20.5942 27.2272 21.3242L13.826 34.7255C13.6497 34.903 13.4135 35.0005 13.1635 35.0005Z" fill="#3B414D" class="primary"></path>
|
|
41
41
|
</svg><span data-v-ceff2a60="" class="unnnic-button__label" style="visibility: visible;" data-testid="button-label"> </span>
|
|
42
42
|
<!--v-if-->
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<section class="unnnic-template-preview">
|
|
3
|
+
<section
|
|
4
|
+
:class="[
|
|
5
|
+
'unnnic-template-preview__content',
|
|
6
|
+
{ 'unnnic-template-preview__content--has-media': hasHeaderMedia },
|
|
7
|
+
]"
|
|
8
|
+
>
|
|
9
|
+
<header
|
|
10
|
+
v-if="hasHeader"
|
|
11
|
+
:class="`unnnic-template-preview__header__${
|
|
12
|
+
template?.header.type === 'TEXT' ? 'text' : 'media'
|
|
13
|
+
}`"
|
|
14
|
+
>
|
|
15
|
+
<img
|
|
16
|
+
class="unnnic-template-preview__header__media__preview"
|
|
17
|
+
v-if="
|
|
18
|
+
template?.header.type === 'MEDIA' &&
|
|
19
|
+
template?.header.mediaType === 'IMAGE'
|
|
20
|
+
"
|
|
21
|
+
:src="template.header.src || imagePreview"
|
|
22
|
+
/>
|
|
23
|
+
<template
|
|
24
|
+
v-else-if="
|
|
25
|
+
template?.header.type === 'MEDIA' &&
|
|
26
|
+
template?.header.mediaType === 'VIDEO'
|
|
27
|
+
"
|
|
28
|
+
>
|
|
29
|
+
<video
|
|
30
|
+
v-if="template.header.src"
|
|
31
|
+
class="unnnic-template-preview__header__media__preview"
|
|
32
|
+
:src="template.header.src"
|
|
33
|
+
controls
|
|
34
|
+
/>
|
|
35
|
+
<img
|
|
36
|
+
v-else
|
|
37
|
+
class="unnnic-template-preview__header__media__preview"
|
|
38
|
+
:src="videoPreview"
|
|
39
|
+
/>
|
|
40
|
+
</template>
|
|
41
|
+
<template
|
|
42
|
+
v-else-if="
|
|
43
|
+
template?.header.type === 'MEDIA' &&
|
|
44
|
+
template?.header.mediaType === 'DOCUMENT'
|
|
45
|
+
"
|
|
46
|
+
>
|
|
47
|
+
<img
|
|
48
|
+
class="unnnic-template-preview__header__media__preview"
|
|
49
|
+
:src="documentPreview"
|
|
50
|
+
/>
|
|
51
|
+
</template>
|
|
52
|
+
<h1
|
|
53
|
+
class="unnnic-template-preview__header__text__preview"
|
|
54
|
+
v-else-if="template?.header.type === 'TEXT'"
|
|
55
|
+
>
|
|
56
|
+
{{ template.header.text }}
|
|
57
|
+
</h1>
|
|
58
|
+
</header>
|
|
59
|
+
<section
|
|
60
|
+
v-if="hasBody"
|
|
61
|
+
:class="[
|
|
62
|
+
'unnnic-template-preview__body',
|
|
63
|
+
{ 'unnnic-template-preview__body--has-media': hasHeaderMedia },
|
|
64
|
+
]"
|
|
65
|
+
>
|
|
66
|
+
<section v-html="parsedBody"></section>
|
|
67
|
+
</section>
|
|
68
|
+
<footer
|
|
69
|
+
v-if="hasFooter"
|
|
70
|
+
:class="[
|
|
71
|
+
'unnnic-template-preview__footer',
|
|
72
|
+
{ 'unnnic-template-preview__footer--has-media': hasHeaderMedia },
|
|
73
|
+
]"
|
|
74
|
+
>
|
|
75
|
+
{{ template?.footer }}
|
|
76
|
+
</footer>
|
|
77
|
+
</section>
|
|
78
|
+
<footer v-if="hasButtons" class="unnnic-template-preview__buttons">
|
|
79
|
+
<section
|
|
80
|
+
v-for="(button, index) in template?.buttons"
|
|
81
|
+
:key="`button-${index}`"
|
|
82
|
+
class="unnnic-template-preview__buttons__button"
|
|
83
|
+
>
|
|
84
|
+
<UnnnicIcon
|
|
85
|
+
class="unnnic-template-preview__buttons__button__icon"
|
|
86
|
+
:icon="getButtonIcon(button.type)"
|
|
87
|
+
scheme="aux-blue-500"
|
|
88
|
+
size="ant"
|
|
89
|
+
/>
|
|
90
|
+
<p class="unnnic-template-preview__buttons__button__text">
|
|
91
|
+
{{ button.text }}
|
|
92
|
+
</p>
|
|
93
|
+
</section>
|
|
94
|
+
</footer>
|
|
95
|
+
</section>
|
|
96
|
+
</template>
|
|
97
|
+
|
|
98
|
+
<script lang="ts" setup>
|
|
99
|
+
import { computed } from "vue";
|
|
100
|
+
|
|
101
|
+
import type { Template } from "./types";
|
|
102
|
+
|
|
103
|
+
import imagePreview from "../../assets/img/previews/image-preview.png";
|
|
104
|
+
import documentPreview from "../../assets/img/previews/doc-preview.png";
|
|
105
|
+
import videoPreview from "../../assets/img/previews/video-preview.png";
|
|
106
|
+
|
|
107
|
+
import UnnnicIcon from "../Icon.vue";
|
|
108
|
+
|
|
109
|
+
interface Props {
|
|
110
|
+
template?: Template | null;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
114
|
+
template: null,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
const hasHeader = computed(
|
|
118
|
+
() => props.template?.header && props.template.header.type
|
|
119
|
+
);
|
|
120
|
+
const hasHeaderMedia = computed(
|
|
121
|
+
() => !!props.template?.header && props.template.header.type === "MEDIA"
|
|
122
|
+
);
|
|
123
|
+
const hasBody = computed(
|
|
124
|
+
() => !!props.template?.body && props.template.body.length > 0
|
|
125
|
+
);
|
|
126
|
+
const hasFooter = computed(
|
|
127
|
+
() => !!props.template?.footer && props.template.footer.length > 0
|
|
128
|
+
);
|
|
129
|
+
const hasButtons = computed(
|
|
130
|
+
() => !!props.template?.buttons && props.template.buttons.length > 0
|
|
131
|
+
);
|
|
132
|
+
const parsedBody = computed(() => {
|
|
133
|
+
if (!hasBody.value) return "";
|
|
134
|
+
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
136
|
+
const result = props
|
|
137
|
+
.template!.body!.replaceAll("\n", "<br/>")
|
|
138
|
+
.replaceAll(/(?:\*)([^*<\n]+)(?:\*)/g, "<strong>$1</strong>")
|
|
139
|
+
.replaceAll(/(?:_)([^_<\n]+)(?:_)/g, "<i>$1</i>")
|
|
140
|
+
.replaceAll(/(?:~)([^~<\n]+)(?:~)/g, "<s>$1</s>")
|
|
141
|
+
.replaceAll(/(?:```)([^```<\n]+)(?:```)/g, "<tt>$1</tt>")
|
|
142
|
+
.replaceAll(/{{.*?}}/g, (match) => `<strong>${match}</strong>`);
|
|
143
|
+
|
|
144
|
+
return result;
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
const getButtonIcon = (buttonType) => {
|
|
148
|
+
const buttonMapper = {
|
|
149
|
+
PHONE_NUMBER: "phone",
|
|
150
|
+
URL: "open_in_new",
|
|
151
|
+
COPY_CODE: "content_copy",
|
|
152
|
+
FLOW: "",
|
|
153
|
+
QUICK_REPLY: "reply",
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
return buttonMapper[buttonType] || "";
|
|
157
|
+
};
|
|
158
|
+
</script>
|
|
159
|
+
|
|
160
|
+
<style lang="scss" scoped>
|
|
161
|
+
@use "@/assets/scss/unnnic" as *;
|
|
162
|
+
|
|
163
|
+
.unnnic-template-preview {
|
|
164
|
+
display: flex;
|
|
165
|
+
flex-direction: column;
|
|
166
|
+
box-shadow: $unnnic-shadow-level-near;
|
|
167
|
+
background-color: $unnnic-color-background-white;
|
|
168
|
+
width: 368px;
|
|
169
|
+
border-radius: $unnnic-border-radius-md;
|
|
170
|
+
|
|
171
|
+
&__content {
|
|
172
|
+
display: flex;
|
|
173
|
+
flex-direction: column;
|
|
174
|
+
gap: $unnnic-space-3;
|
|
175
|
+
padding: $unnnic-space-4 $unnnic-space-3;
|
|
176
|
+
|
|
177
|
+
&--has-media {
|
|
178
|
+
padding: $unnnic-space-1;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
&__header {
|
|
183
|
+
&__text {
|
|
184
|
+
&__preview {
|
|
185
|
+
font-family: $unnnic-font-family-secondary;
|
|
186
|
+
font-weight: $unnnic-font-weight-bold;
|
|
187
|
+
font-size: $unnnic-font-size-body-gt;
|
|
188
|
+
line-height: $unnnic-font-size-body-gt + $unnnic-line-height-medium;
|
|
189
|
+
color: $unnnic-color-neutral-dark;
|
|
190
|
+
|
|
191
|
+
margin: $unnnic-space-0;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
&__media {
|
|
196
|
+
&__preview {
|
|
197
|
+
width: 100%;
|
|
198
|
+
object-fit: cover;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
&__body {
|
|
204
|
+
font-family: $unnnic-font-family-secondary;
|
|
205
|
+
font-weight: $unnnic-font-weight-regular;
|
|
206
|
+
font-size: $unnnic-font-size-body-gt;
|
|
207
|
+
line-height: $unnnic-font-size-body-gt + $unnnic-line-height-medium;
|
|
208
|
+
color: $unnnic-color-neutral-cloudy;
|
|
209
|
+
|
|
210
|
+
&--has-media {
|
|
211
|
+
padding: $unnnic-space-0 $unnnic-space-2;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
&__footer {
|
|
216
|
+
font-family: $unnnic-font-family-secondary;
|
|
217
|
+
font-weight: $unnnic-font-weight-regular;
|
|
218
|
+
font-size: $unnnic-font-size-body-md;
|
|
219
|
+
line-height: $unnnic-font-size-body-md + $unnnic-line-height-medium;
|
|
220
|
+
color: $unnnic-color-neutral-clean;
|
|
221
|
+
|
|
222
|
+
&--has-media {
|
|
223
|
+
padding: $unnnic-space-0 $unnnic-space-3 $unnnic-space-2;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
&__buttons {
|
|
228
|
+
font-family: $unnnic-font-family-secondary;
|
|
229
|
+
font-weight: $unnnic-font-weight-bold;
|
|
230
|
+
font-size: $unnnic-font-size-body-gt;
|
|
231
|
+
line-height: $unnnic-font-size-body-gt + $unnnic-line-height-medium;
|
|
232
|
+
|
|
233
|
+
&__button {
|
|
234
|
+
margin: 0;
|
|
235
|
+
display: flex;
|
|
236
|
+
align-items: center;
|
|
237
|
+
justify-content: center;
|
|
238
|
+
gap: $unnnic-space-2;
|
|
239
|
+
padding: $unnnic-space-3;
|
|
240
|
+
border-top: 1px solid $unnnic-color-neutral-light;
|
|
241
|
+
|
|
242
|
+
&__text {
|
|
243
|
+
color: $unnnic-color-aux-blue-500;
|
|
244
|
+
margin: $unnnic-space-0;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
</style>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<UnnnicModalDialog
|
|
3
|
+
:model-value="modelValue"
|
|
4
|
+
@update:modelValue="$event === false && $emit('close')"
|
|
5
|
+
:title="defaultTranslations.title[props.locale]"
|
|
6
|
+
:show-close-icon="true"
|
|
7
|
+
class="unnnic-template-preview-modal"
|
|
8
|
+
>
|
|
9
|
+
<UnnnicTemplatePreview :template="template" />
|
|
10
|
+
</UnnnicModalDialog>
|
|
11
|
+
</template>
|
|
12
|
+
|
|
13
|
+
<script lang="ts" setup>
|
|
14
|
+
import UnnnicTemplatePreview from "./TemplatePreview.vue";
|
|
15
|
+
import UnnnicModalDialog from "../ModalDialog/ModalDialog.vue";
|
|
16
|
+
|
|
17
|
+
import type { Template } from "./types";
|
|
18
|
+
|
|
19
|
+
const defaultTranslations = {
|
|
20
|
+
title: {
|
|
21
|
+
"pt-br": "Visualizar modelo",
|
|
22
|
+
en: "Template preview",
|
|
23
|
+
es: "Vista previa de plantilla",
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
interface Props {
|
|
28
|
+
locale?: string;
|
|
29
|
+
template: Template;
|
|
30
|
+
modelValue: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
34
|
+
locale: "en",
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
defineEmits<{
|
|
38
|
+
close: void;
|
|
39
|
+
}>();
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
<style lang="scss" scoped>
|
|
43
|
+
@use "@/assets/scss/unnnic" as *;
|
|
44
|
+
|
|
45
|
+
:deep(.unnnic-modal-dialog__container__content) {
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
justify-content: center;
|
|
49
|
+
background-color: $unnnic-color-neutral-lightest;
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface Template {
|
|
2
|
+
header: {
|
|
3
|
+
type: "TEXT" | "MEDIA";
|
|
4
|
+
mediaType?: "IMAGE" | "VIDEO" | "DOCUMENT";
|
|
5
|
+
text?: string | null;
|
|
6
|
+
src?: string | null;
|
|
7
|
+
};
|
|
8
|
+
body?: string;
|
|
9
|
+
footer?: string;
|
|
10
|
+
buttons?: Array<{
|
|
11
|
+
type: "QUICK_REPLY" | "PHONE_NUMBER";
|
|
12
|
+
text: string;
|
|
13
|
+
countryCode?: string;
|
|
14
|
+
phoneNumber?: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
@@ -18,13 +18,14 @@
|
|
|
18
18
|
:disabled="disabled"
|
|
19
19
|
:value="modelValue"
|
|
20
20
|
@input="$emit('update:modelValue', fullySanitize($event.target.value))"
|
|
21
|
-
|
|
21
|
+
/>
|
|
22
22
|
|
|
23
23
|
<template
|
|
24
24
|
v-if="maxLength"
|
|
25
25
|
#rightMessage
|
|
26
|
-
>{{ modelValue.length }}/{{ maxLength }}</template
|
|
27
26
|
>
|
|
27
|
+
{{ modelValue.length }}/{{ maxLength }}
|
|
28
|
+
</template>
|
|
28
29
|
</UnnnicFormElement>
|
|
29
30
|
</template>
|
|
30
31
|
|
|
@@ -96,6 +97,12 @@ export default {
|
|
|
96
97
|
@use '@/assets/scss/unnnic' as *;
|
|
97
98
|
@use '@/components/Input/Input' as *;
|
|
98
99
|
|
|
100
|
+
* {
|
|
101
|
+
margin: 0;
|
|
102
|
+
padding: 0;
|
|
103
|
+
box-sizing: border-box;
|
|
104
|
+
}
|
|
105
|
+
|
|
99
106
|
.unnnic-text-area {
|
|
100
107
|
&__textarea {
|
|
101
108
|
@include input-base;
|
|
@@ -103,24 +110,22 @@ export default {
|
|
|
103
110
|
display: block;
|
|
104
111
|
width: 100%;
|
|
105
112
|
resize: vertical;
|
|
106
|
-
box-sizing: border-box;
|
|
107
113
|
|
|
108
114
|
scrollbar-width: thin;
|
|
109
115
|
|
|
116
|
+
padding: $unnnic-space-3 $unnnic-space-4;
|
|
117
|
+
|
|
110
118
|
&--size-md {
|
|
111
119
|
@include input-md-font;
|
|
112
120
|
|
|
113
|
-
min-height:
|
|
114
|
-
|
|
115
|
-
($unnnic-spacing-sm - $unnnic-border-width-thinner);
|
|
121
|
+
min-height: 100px;
|
|
122
|
+
|
|
116
123
|
}
|
|
117
124
|
|
|
118
125
|
&--size-sm {
|
|
119
126
|
@include input-sm-font;
|
|
120
127
|
|
|
121
|
-
min-height:
|
|
122
|
-
padding: ($unnnic-spacing-xs)
|
|
123
|
-
($unnnic-spacing-sm - $unnnic-border-width-thinner);
|
|
128
|
+
min-height: $unnnic-space-20;
|
|
124
129
|
}
|
|
125
130
|
|
|
126
131
|
&.unnnic-text-area__textarea--type-error {
|
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
exports[`TextArea.vue > matches the snapshot 1`] = `
|
|
4
4
|
"<section data-v-9f8d6c86="" data-v-735b3c51="" class="unnnic-form-element">
|
|
5
5
|
<p data-v-9f8d6c86="" class="unnnic-form-element__label">Description</p><textarea data-v-735b3c51="" class="unnnic-text-area__textarea unnnic-text-area__textarea--size-md unnnic-text-area__textarea--type-normal" placeholder="Enter text" maxlength="200" value=""></textarea>
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
<section data-v-9f8d6c86="" class="unnnic-form-element__hints-container">
|
|
7
|
+
<section data-v-9f8d6c86="" class="unnnic-form-element__message-container">
|
|
8
|
+
<!--v-if-->
|
|
9
|
+
<!--v-if-->
|
|
10
|
+
</section>
|
|
11
|
+
<p data-v-9f8d6c86="">0/200</p>
|
|
12
|
+
</section>
|
|
8
13
|
</section>"
|
|
9
14
|
`;
|
package/src/components/index.ts
CHANGED
|
@@ -88,7 +88,9 @@ import ModalDialog from "./ModalDialog/ModalDialog.vue";
|
|
|
88
88
|
import Tour from "./Tour/Tour.vue";
|
|
89
89
|
import Navigator from "./Navigator/index.vue";
|
|
90
90
|
import SelectTime from "./SelectTime/index.vue";
|
|
91
|
-
import
|
|
91
|
+
import TemplatePreview from "./TemplatePreview/TemplatePreview.vue";
|
|
92
|
+
import TemplatePreviewModal from "./TemplatePreview/TemplatePreviewModal.vue";
|
|
93
|
+
import DataTable from './DataTable/index.vue';
|
|
92
94
|
|
|
93
95
|
type VueComponent = Component;
|
|
94
96
|
|
|
@@ -187,6 +189,8 @@ export const components: ComponentsMap = {
|
|
|
187
189
|
unnnicTour: Tour,
|
|
188
190
|
unnnicNavigator: Navigator,
|
|
189
191
|
unnnicSelectTime: SelectTime,
|
|
192
|
+
unnnicTemplatePreview: TemplatePreview,
|
|
193
|
+
unnnicTemplatePreviewModal: TemplatePreviewModal,
|
|
190
194
|
unnnicDataTable: DataTable,
|
|
191
195
|
};
|
|
192
196
|
|
|
@@ -280,8 +284,10 @@ export const unnnicDrawer = Drawer;
|
|
|
280
284
|
export const unnnicTableNext = TableNext;
|
|
281
285
|
export const unnnicTour = Tour;
|
|
282
286
|
export const unnnicNavigator = Navigator;
|
|
283
|
-
export const unnnicDataTable = DataTable as VueComponent;
|
|
284
287
|
export const unnnicSelectTime = SelectTime as VueComponent;
|
|
288
|
+
export const unnnicTemplatePreview = TemplatePreview as VueComponent;
|
|
289
|
+
export const unnnicTemplatePreviewModal = TemplatePreviewModal as VueComponent;
|
|
290
|
+
export const unnnicDataTable = DataTable as VueComponent;
|
|
285
291
|
|
|
286
292
|
export const UnnnicFontSize = fontSize;
|
|
287
293
|
export const UnnnicFormElement = formElement;
|
|
@@ -373,5 +379,8 @@ export const UnnnicDrawer = Drawer;
|
|
|
373
379
|
export const UnnnicTableNext = TableNext;
|
|
374
380
|
export const UnnnicTour = Tour;
|
|
375
381
|
export const UnnnicNavigator = Navigator;
|
|
376
|
-
export const UnnnicDataTable = DataTable as VueComponent;
|
|
377
382
|
export const UnnnicSelectTime = SelectTime as VueComponent;
|
|
383
|
+
export const UnnnicTemplatePreview = TemplatePreview as VueComponent;
|
|
384
|
+
export const UnnnicTemplatePreviewModal = TemplatePreviewModal as VueComponent;
|
|
385
|
+
export const UnnnicDataTable = DataTable as VueComponent;
|
|
386
|
+
|
|
@@ -8,7 +8,7 @@ export default {
|
|
|
8
8
|
description: {
|
|
9
9
|
component: `Allows users to perform an action or navigate to another page.
|
|
10
10
|
It has styles for various needs and are ideal for directing the user's attention.
|
|
11
|
-
It is divided into
|
|
11
|
+
It is divided into 5 types: Primary, Secondary, Tertiary, Warning, Attention.
|
|
12
12
|
Each of these types has its states.
|
|
13
13
|
<br/>
|
|
14
14
|
<br/>
|
|
@@ -40,7 +40,6 @@ export default {
|
|
|
40
40
|
'primary',
|
|
41
41
|
'secondary',
|
|
42
42
|
'tertiary',
|
|
43
|
-
'alternative',
|
|
44
43
|
'warning',
|
|
45
44
|
'attention',
|
|
46
45
|
],
|
|
@@ -114,14 +113,6 @@ export const OnlyIcon = {
|
|
|
114
113
|
},
|
|
115
114
|
};
|
|
116
115
|
|
|
117
|
-
export const Alternative = {
|
|
118
|
-
args: {
|
|
119
|
-
type: 'alternative',
|
|
120
|
-
iconLeft: 'add',
|
|
121
|
-
text: 'Text',
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
|
|
125
116
|
export const Warning = {
|
|
126
117
|
parameters: {
|
|
127
118
|
docs: {
|
|
@@ -35,9 +35,7 @@ export default {
|
|
|
35
35
|
},
|
|
36
36
|
},
|
|
37
37
|
template: `
|
|
38
|
-
|
|
39
|
-
<unnnic-input v-model="value" @icon-right-click="click" v-bind="args" />
|
|
40
|
-
</unnnic-form-element>
|
|
38
|
+
<unnnic-input v-model="value" @icon-right-click="click" v-bind="args" label="Label" />
|
|
41
39
|
`,
|
|
42
40
|
}),
|
|
43
41
|
};
|
|
@@ -156,4 +154,20 @@ export const Mask = {
|
|
|
156
154
|
placeholder: 'Text',
|
|
157
155
|
mask: ['###.###.###-##', '##.###.###/####-##'],
|
|
158
156
|
},
|
|
157
|
+
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
export const LimitMaxLength = {
|
|
161
|
+
args: {
|
|
162
|
+
placeholder: 'Text',
|
|
163
|
+
maxlength: 10,
|
|
164
|
+
showMaxlengthCounter: true,
|
|
165
|
+
},
|
|
159
166
|
};
|
|
167
|
+
|
|
168
|
+
export const WithTooltip = {
|
|
169
|
+
args: {
|
|
170
|
+
placeholder: 'Text',
|
|
171
|
+
tooltip: 'Tooltip',
|
|
172
|
+
},
|
|
173
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import UnnnicTemplatePreview from "../components/TemplatePreview/TemplatePreview.vue";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: "example/TemplatePreview",
|
|
5
|
+
tags: ["autodocs"],
|
|
6
|
+
component: UnnnicTemplatePreview,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const Template = (args) => ({
|
|
10
|
+
components: { UnnnicTemplatePreview },
|
|
11
|
+
setup() {
|
|
12
|
+
return { args };
|
|
13
|
+
},
|
|
14
|
+
template: `
|
|
15
|
+
<unnnic-template-preview v-bind="args" />
|
|
16
|
+
`,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const bodyText =
|
|
20
|
+
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sem orci, ultrices id lectus non, vehicula suscipit libero. Ut vehicula libero a tempus fringilla. Nam tincidunt vestibulum maximus. Morbi vel pretium risus. Curabitur id quam lectus. Quisque dolor elit, auctor a lacus non, rutrum ullamcorper mi. Nulla et turpis sed eros pharetra ullamcorper fermentum ac nisl. Donec lacinia hendrerit tellus, sit amet suscipit velit vestibulum sed. Praesent gravida posuere metus, ut fringilla dolor euismod vel. Aenean vel ipsum magna. Integer metus mi, fermentum ut nulla at, facilisis lobortis metus. Ut vitae tortor posuere, dapibus leo quis, finibus neque.";
|
|
21
|
+
|
|
22
|
+
export const Default = Template.bind({});
|
|
23
|
+
Default.args = {
|
|
24
|
+
template: {
|
|
25
|
+
header: {
|
|
26
|
+
type: "TEXT",
|
|
27
|
+
text: "Hello, world!",
|
|
28
|
+
},
|
|
29
|
+
footer: "Weni by VTEX",
|
|
30
|
+
buttons: [
|
|
31
|
+
{
|
|
32
|
+
text: "Button 1",
|
|
33
|
+
type: "PHONE_NUMBER",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
text: "Button 2",
|
|
37
|
+
type: "URL",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
text: "Button 3",
|
|
41
|
+
type: "QUICK_REPLY",
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
body: bodyText,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const Image = Template.bind({});
|
|
49
|
+
Image.args = {
|
|
50
|
+
template: {
|
|
51
|
+
header: {
|
|
52
|
+
type: "MEDIA",
|
|
53
|
+
mediaType: "IMAGE",
|
|
54
|
+
},
|
|
55
|
+
footer: "Weni by VTEX",
|
|
56
|
+
body: bodyText,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const Video = Template.bind({});
|
|
61
|
+
Video.args = {
|
|
62
|
+
template: {
|
|
63
|
+
header: {
|
|
64
|
+
type: "MEDIA",
|
|
65
|
+
mediaType: "VIDEO",
|
|
66
|
+
},
|
|
67
|
+
buttons: [
|
|
68
|
+
{
|
|
69
|
+
text: "Button 1",
|
|
70
|
+
type: "PHONE_NUMBER",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
text: "Button 2",
|
|
74
|
+
type: "URL",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
text: "Button 3",
|
|
78
|
+
type: "QUICK_REPLY",
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const Document = Template.bind({});
|
|
85
|
+
Document.args = {
|
|
86
|
+
template: {
|
|
87
|
+
header: {
|
|
88
|
+
type: "MEDIA",
|
|
89
|
+
mediaType: "DOCUMENT",
|
|
90
|
+
},
|
|
91
|
+
footer: "Weni by VTEX",
|
|
92
|
+
body: bodyText,
|
|
93
|
+
},
|
|
94
|
+
};
|