@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.
Files changed (142) hide show
  1. package/dist/components/Accordion/Accordion.vue.d.ts +1 -1
  2. package/dist/components/Alert/Alert.vue.d.ts +5 -5
  3. package/dist/components/Alert/Version1dot1.vue.d.ts +2 -2
  4. package/dist/components/AudioRecorder/AudioHandler.vue.d.ts +1 -1
  5. package/dist/components/AudioRecorder/AudioPlayer.vue.d.ts +1 -1
  6. package/dist/components/AudioRecorder/AudioRecorder.vue.d.ts +3 -3
  7. package/dist/components/AvatarIcon/AvatarIcon.vue.d.ts +2 -2
  8. package/dist/components/Banner/Banner.vue.d.ts +1 -1
  9. package/dist/components/Banner/InfoBanner.vue.d.ts +1 -1
  10. package/dist/components/Breadcrumb/Breadcrumb.vue.d.ts +1 -1
  11. package/dist/components/Button/Button.vue.d.ts +2 -2
  12. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  13. package/dist/components/Button/ButtonIcon.vue.d.ts +1 -1
  14. package/dist/components/Button/types.d.ts +1 -1
  15. package/dist/components/Button/types.d.ts.map +1 -1
  16. package/dist/components/Card/AccountCard.vue.d.ts +3 -3
  17. package/dist/components/Card/BlankCard.vue.d.ts +1 -1
  18. package/dist/components/Card/Card.vue.d.ts +20 -20
  19. package/dist/components/Card/CardCompany.vue.d.ts +7 -7
  20. package/dist/components/Card/CardData.vue.d.ts +1 -1
  21. package/dist/components/Card/CardStatusesContainer.vue.d.ts +3 -3
  22. package/dist/components/Card/ContentCard.vue.d.ts +2 -2
  23. package/dist/components/Card/DashCard.vue.d.ts +4 -4
  24. package/dist/components/Card/DefaultCard.vue.d.ts +1 -1
  25. package/dist/components/Card/MarketplaceCard.vue.d.ts +2 -2
  26. package/dist/components/Card/SimpleCard.vue.d.ts +2 -2
  27. package/dist/components/Card/StatusCard.vue.d.ts +2 -2
  28. package/dist/components/Card/TitleCard.vue.d.ts +1 -1
  29. package/dist/components/CardImage/CardImage.vue.d.ts +7 -7
  30. package/dist/components/CardInformation/CardInformation.vue.d.ts +3 -3
  31. package/dist/components/CardProject/CardProject.vue.d.ts +2 -2
  32. package/dist/components/Carousel/Carousel.vue.d.ts +10 -10
  33. package/dist/components/Carousel/TagCarousel.vue.d.ts +8 -8
  34. package/dist/components/ChartBar/ChartBar.vue.d.ts +7 -7
  35. package/dist/components/ChatText/ChatText.vue.d.ts +1 -1
  36. package/dist/components/ChatsContact/ChatsContact.vue.d.ts +14 -14
  37. package/dist/components/ChatsDashboardTagLive/ChatsDashboardTagLive.vue.d.ts +1 -1
  38. package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts +1 -1
  39. package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts.map +1 -1
  40. package/dist/components/ChatsMessage/ChatsMessage.vue.d.ts +4 -4
  41. package/dist/components/ChatsMessage/ChatsMessageStatusBackdrop.vue.d.ts +2 -2
  42. package/dist/components/ChatsNavbar/ChatsNavbar.vue.d.ts +1 -1
  43. package/dist/components/ChatsUserAvatar/ChatsUserAvatar.vue.d.ts +2 -2
  44. package/dist/components/Checkbox/Checkbox.vue.d.ts +3 -3
  45. package/dist/components/Comment/Comment.vue.d.ts +1 -1
  46. package/dist/components/DataArea/DataArea.vue.d.ts +1 -1
  47. package/dist/components/DataTable/index.vue.d.ts +1 -1
  48. package/dist/components/DataTable/index.vue.d.ts.map +1 -1
  49. package/dist/components/DateFilter/DateFilter.vue.d.ts +182 -27
  50. package/dist/components/DatePicker/DatePicker.vue.d.ts +8 -8
  51. package/dist/components/Drawer/Drawer.vue.d.ts +7 -7
  52. package/dist/components/DropArea/DropArea.vue.d.ts +2 -0
  53. package/dist/components/DropArea/DropArea.vue.d.ts.map +1 -1
  54. package/dist/components/Dropdown/LanguageSelect.vue.d.ts +3 -3
  55. package/dist/components/Flag.vue.d.ts +2 -2
  56. package/dist/components/FormElement/FormElement.vue.d.ts +38 -32
  57. package/dist/components/FormElement/FormElement.vue.d.ts.map +1 -1
  58. package/dist/components/Icon/types.d.ts +1 -1
  59. package/dist/components/Icon/types.d.ts.map +1 -1
  60. package/dist/components/Icon.vue.d.ts +1 -1
  61. package/dist/components/Icon.vue.d.ts.map +1 -1
  62. package/dist/components/IconLoading/IconLoading.vue.d.ts +1 -1
  63. package/dist/components/ImportCard/ImportCard.vue.d.ts +7 -7
  64. package/dist/components/Input/BaseInput.vue.d.ts +10 -1
  65. package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
  66. package/dist/components/Input/Input.vue.d.ts +182 -27
  67. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  68. package/dist/components/Input/TextInput.vue.d.ts +31 -13
  69. package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +192 -37
  70. package/dist/components/InputNext/InputNext.vue.d.ts +3 -3
  71. package/dist/components/Modal/Modal.vue.d.ts +2 -2
  72. package/dist/components/ModalDialog/ModalDialog.vue.d.ts +10 -10
  73. package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
  74. package/dist/components/ModalNext/ModalNext.vue.d.ts +189 -34
  75. package/dist/components/ModalUpload/ModalUpload.vue.d.ts +20 -14
  76. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +7 -7
  77. package/dist/components/Pagination/Pagination.vue.d.ts +6 -6
  78. package/dist/components/ProgressBar/ProgressBar.vue.d.ts +1 -1
  79. package/dist/components/Radio/Radio.vue.d.ts +2 -2
  80. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +44 -26
  81. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +7 -7
  82. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +4 -4
  83. package/dist/components/SelectTime/index.vue.d.ts +31 -13
  84. package/dist/components/Slider/Slider.vue.d.ts +1 -1
  85. package/dist/components/StarRating/StarRating.vue.d.ts +1 -1
  86. package/dist/components/Switch/Switch.vue.d.ts +2 -2
  87. package/dist/components/Tab/Tab.vue.d.ts +1 -1
  88. package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
  89. package/dist/components/TableNext/TablePagination.vue.d.ts +6 -6
  90. package/dist/components/TabsExpanded/TabsExpanded.vue.d.ts +1 -1
  91. package/dist/components/Tag/BrandTag.vue.d.ts +2 -2
  92. package/dist/components/Tag/DefaultTag.vue.d.ts +2 -2
  93. package/dist/components/Tag/IndicatorTag.vue.d.ts +1 -1
  94. package/dist/components/Tag/Tag.vue.d.ts +7 -7
  95. package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts +9 -0
  96. package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts.map +1 -0
  97. package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts +15 -0
  98. package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts.map +1 -0
  99. package/dist/components/TextArea/TextArea.vue.d.ts +38 -32
  100. package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
  101. package/dist/components/Tour/Tour.vue.d.ts +6 -6
  102. package/dist/components/Tour/TourPopover.vue.d.ts +6 -6
  103. package/dist/components/UploadArea/UploadArea.vue.d.ts +13 -7
  104. package/dist/components/index.d.ts +2071 -767
  105. package/dist/components/index.d.ts.map +1 -1
  106. package/dist/{es-d628da75.mjs → es-dc7f4ae0.mjs} +1 -1
  107. package/dist/{index-9a407ee0.mjs → index-93c6d4e1.mjs} +7917 -7731
  108. package/dist/{pt-br-d5be1f83.mjs → pt-br-6c72f1f4.mjs} +1 -1
  109. package/dist/style.css +1 -1
  110. package/dist/unnnic.mjs +126 -122
  111. package/dist/unnnic.umd.js +42 -41
  112. package/package.json +2 -2
  113. package/src/assets/img/previews/doc-preview.png +0 -0
  114. package/src/assets/img/previews/image-preview.png +0 -0
  115. package/src/assets/img/previews/video-preview.png +0 -0
  116. package/src/components/Button/Button.vue +57 -108
  117. package/src/components/Button/types.ts +0 -1
  118. package/src/components/DropArea/DropArea.vue +26 -2
  119. package/src/components/FormElement/FormElement.vue +50 -90
  120. package/src/components/Icon/types.ts +7 -0
  121. package/src/components/Icon.vue +7 -0
  122. package/src/components/Input/BaseInput.vue +10 -12
  123. package/src/components/Input/Input.scss +17 -20
  124. package/src/components/Input/Input.vue +86 -28
  125. package/src/components/Input/TextInput.vue +27 -35
  126. package/src/components/Input/__test__/TextInput.spec.js +5 -5
  127. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +12 -3
  128. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -1
  129. package/src/components/ModalDialog/ModalDialog.vue +27 -29
  130. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -1
  131. package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
  132. package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
  133. package/src/components/TemplatePreview/TemplatePreview.vue +249 -0
  134. package/src/components/TemplatePreview/TemplatePreviewModal.vue +51 -0
  135. package/src/components/TemplatePreview/types.d.ts +16 -0
  136. package/src/components/TextArea/TextArea.vue +14 -9
  137. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +7 -2
  138. package/src/components/index.ts +12 -3
  139. package/src/stories/Button.stories.js +1 -10
  140. package/src/stories/Input.stories.js +17 -3
  141. package/src/stories/TemplatePreview.stories.js +94 -0
  142. 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--sm unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
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--sm unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
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--sm unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
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--sm unnnic-icon-scheme--neutral-dark" data-testid="icon-center" style="visibility: visible;">
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
- ></textarea>
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: 6.25 * $unnnic-font-size;
114
- padding: ($unnnic-spacing-ant - $unnnic-border-width-thinner)
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: 5 * $unnnic-font-size;
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
- <!--v-if-->
7
- <p data-v-9f8d6c86="" class="unnnic-form-element__message"> <span data-v-9f8d6c86="" class="unnnic-form-element__right-message">0/200</span></p>
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
  `;
@@ -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 DataTable from "./DataTable/index.vue";
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 6 types: Primary, Secondary, Tertiary, Alternative, Warning, Attention.
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
- <unnnic-form-element label="Label" message="Helper text">
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
+ };