@policystudio/policy-studio-ui-vue 1.1.90-beta.12 → 1.1.90-beta.18

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 (231) hide show
  1. package/.eslintrc.js +2 -1
  2. package/.github/workflows/deploy-storybook.yml +4 -4
  3. package/.nvmrc +1 -0
  4. package/dist/css/psui_styles_output.css +6986 -0
  5. package/dist/index.d.ts +50 -0
  6. package/dist/index.js +53 -63
  7. package/dist/index.js.map +1 -1
  8. package/dist/util/GeneralFunctions.d.ts +3 -0
  9. package/dist/util/GeneralFunctions.js.map +1 -1
  10. package/dist/util/directives.d.ts +1 -0
  11. package/dist/util/directives.js +22 -0
  12. package/dist/util/directives.js.map +1 -0
  13. package/dist/util/eventBus.d.ts +7 -0
  14. package/dist/util/eventBus.js +8 -0
  15. package/dist/util/eventBus.js.map +1 -0
  16. package/dist/util/imageLoader.d.ts +6 -0
  17. package/dist/util/imageLoader.js.map +1 -1
  18. package/package.json +9 -23
  19. package/src/assets/scss/components/PsDataTable.scss +1 -1
  20. package/src/components/accordion/PsAccordionItem.vue +75 -75
  21. package/src/components/badges-and-tags/PsBadgeWithIcon.vue +31 -34
  22. package/src/components/badges-and-tags/PsCardInfos.vue +40 -41
  23. package/src/components/badges-and-tags/PsChartLegend.vue +47 -51
  24. package/src/components/badges-and-tags/PsClimateZoneBadge.vue +14 -19
  25. package/src/components/badges-and-tags/PsCostEffectBar.vue +24 -56
  26. package/src/components/badges-and-tags/PsDateCardInfo.vue +17 -18
  27. package/src/components/badges-and-tags/PsHighlightRippleDot.vue +3 -2
  28. package/src/components/badges-and-tags/PsMiniTag.vue +39 -41
  29. package/src/components/badges-and-tags/PsProgressBar.vue +72 -68
  30. package/src/components/badges-and-tags/PsTagScope.vue +17 -22
  31. package/src/components/badges-and-tags/PsTestimonialCard.vue +20 -26
  32. package/src/components/buttons/PsButton.vue +61 -62
  33. package/src/components/chips/PsChips.vue +98 -101
  34. package/src/components/controls/PsCheckbox.vue +84 -84
  35. package/src/components/controls/PsCheckboxSimple.vue +95 -95
  36. package/src/components/controls/PsDraggable.vue +53 -55
  37. package/src/components/controls/PsInlineSelector.vue +99 -99
  38. package/src/components/controls/PsRadioButton.vue +59 -58
  39. package/src/components/controls/PsRadioButtonSimple.vue +79 -75
  40. package/src/components/controls/PsSlider.vue +185 -176
  41. package/src/components/controls/PsSwitch.vue +51 -52
  42. package/src/components/controls/PsToggle.vue +53 -50
  43. package/src/components/data-graphics/PsBarChart.vue +19 -21
  44. package/src/components/datatable/PsDataTable.vue +56 -60
  45. package/src/components/datatable/PsDataTableItem.vue +14 -28
  46. package/src/components/forms/PsDropdown.vue +164 -162
  47. package/src/components/forms/PsDropdownList.vue +132 -129
  48. package/src/components/forms/PsInput.vue +155 -153
  49. package/src/components/forms/PsInputSelect.vue +91 -92
  50. package/src/components/forms/PsInputTextArea.vue +71 -71
  51. package/src/components/navigations/PsBreadcrumb.vue +26 -34
  52. package/src/components/notifications/PsDialog.vue +57 -56
  53. package/src/components/notifications/PsSimpleAlert.vue +28 -29
  54. package/src/components/notifications/PsToast.vue +40 -39
  55. package/src/components/table-results/PsTableResults.vue +452 -458
  56. package/src/components/table-results/PsTableResultsBody.vue +66 -67
  57. package/src/components/table-results/PsTableResultsHead.vue +62 -56
  58. package/src/components/table-results/PsTableResultsHeadComparison.vue +62 -56
  59. package/src/components/table-results/PsTableResultsHeadFlexible.vue +63 -56
  60. package/src/components/table-results/PsTableResultsRow.vue +55 -56
  61. package/src/components/tabs/PsTabHeader.vue +106 -100
  62. package/src/components/tooltip/PsDialogTooltip.vue +96 -101
  63. package/src/components/tooltip/PsRichTooltip.vue +42 -45
  64. package/src/components/tooltip/PsTooltip.vue +111 -116
  65. package/src/components/ui/PsDotLoader.vue +1 -5
  66. package/src/components/ui/PsIcon.vue +126 -129
  67. package/src/index.ts +57 -71
  68. package/src/tsconfig.json +12 -0
  69. package/src/{shims-vue.d.ts → types/index.d.ts} +0 -5
  70. package/src/util/{GeneralFunctions.ts → GeneralFunctions.js} +0 -3
  71. package/src/util/directives.ts +24 -0
  72. package/src/util/eventBus.js +10 -0
  73. package/src/util/{imageLoader.ts → imageLoader.js} +7 -8
  74. package/tailwind.config.js +1 -1
  75. package/tsconfig.json +15 -17
  76. package/.storybook/PolicyStudio.ts +0 -11
  77. package/.storybook/eventBus.ts +0 -26
  78. package/.storybook/main.ts +0 -21
  79. package/.storybook/manager.ts +0 -7
  80. package/.storybook/preview.ts +0 -17
  81. package/dist/contents/ComparisonData.js +0 -376
  82. package/dist/contents/ComparisonData.js.map +0 -1
  83. package/dist/contents/FlexibleData.js +0 -501
  84. package/dist/contents/FlexibleData.js.map +0 -1
  85. package/dist/contents/ResultsData.js +0 -530
  86. package/dist/contents/ResultsData.js.map +0 -1
  87. package/dist/css/psui_styles.css +0 -4647
  88. package/dist/stories/Accordion.stories.js +0 -56
  89. package/dist/stories/Accordion.stories.js.map +0 -1
  90. package/dist/stories/BadgeWithIcon.stories.js +0 -28
  91. package/dist/stories/BadgeWithIcon.stories.js.map +0 -1
  92. package/dist/stories/BarChart.stories.js +0 -16
  93. package/dist/stories/BarChart.stories.js.map +0 -1
  94. package/dist/stories/Breadcrumb.stories.js +0 -21
  95. package/dist/stories/Breadcrumb.stories.js.map +0 -1
  96. package/dist/stories/Button.stories.js +0 -44
  97. package/dist/stories/Button.stories.js.map +0 -1
  98. package/dist/stories/CardInfos.stories.js +0 -13
  99. package/dist/stories/CardInfos.stories.js.map +0 -1
  100. package/dist/stories/ChartLegend.stories.js +0 -13
  101. package/dist/stories/ChartLegend.stories.js.map +0 -1
  102. package/dist/stories/Checkbox.stories.js +0 -44
  103. package/dist/stories/Checkbox.stories.js.map +0 -1
  104. package/dist/stories/CheckboxSimple.stories.js +0 -48
  105. package/dist/stories/CheckboxSimple.stories.js.map +0 -1
  106. package/dist/stories/Chips.stories.js +0 -27
  107. package/dist/stories/Chips.stories.js.map +0 -1
  108. package/dist/stories/ClimateZoneBadge.stories.js +0 -15
  109. package/dist/stories/ClimateZoneBadge.stories.js.map +0 -1
  110. package/dist/stories/CostEffectBar.stories.js +0 -21
  111. package/dist/stories/CostEffectBar.stories.js.map +0 -1
  112. package/dist/stories/Datatable.stories.js +0 -45
  113. package/dist/stories/Datatable.stories.js.map +0 -1
  114. package/dist/stories/DateCardInfo.stories.js +0 -18
  115. package/dist/stories/DateCardInfo.stories.js.map +0 -1
  116. package/dist/stories/Dialog.stories.js +0 -127
  117. package/dist/stories/Dialog.stories.js.map +0 -1
  118. package/dist/stories/Draggable.stories.js +0 -20
  119. package/dist/stories/Draggable.stories.js.map +0 -1
  120. package/dist/stories/Dropdown.stories.js +0 -98
  121. package/dist/stories/Dropdown.stories.js.map +0 -1
  122. package/dist/stories/DropdownList.stories.js +0 -208
  123. package/dist/stories/DropdownList.stories.js.map +0 -1
  124. package/dist/stories/Header.stories.js +0 -39
  125. package/dist/stories/Header.stories.js.map +0 -1
  126. package/dist/stories/HighlightRippleDot.stories.js +0 -13
  127. package/dist/stories/HighlightRippleDot.stories.js.map +0 -1
  128. package/dist/stories/Icon.stories.js +0 -19
  129. package/dist/stories/Icon.stories.js.map +0 -1
  130. package/dist/stories/InlineSelector.stories.js +0 -16
  131. package/dist/stories/InlineSelector.stories.js.map +0 -1
  132. package/dist/stories/Input.stories.js +0 -235
  133. package/dist/stories/Input.stories.js.map +0 -1
  134. package/dist/stories/InputSelect.stories.js +0 -28
  135. package/dist/stories/InputSelect.stories.js.map +0 -1
  136. package/dist/stories/InputTextArea.stories.js +0 -23
  137. package/dist/stories/InputTextArea.stories.js.map +0 -1
  138. package/dist/stories/MiniTag.stories.js +0 -44
  139. package/dist/stories/MiniTag.stories.js.map +0 -1
  140. package/dist/stories/Playground.stories.js +0 -14
  141. package/dist/stories/Playground.stories.js.map +0 -1
  142. package/dist/stories/ProgressBar.stories.js +0 -21
  143. package/dist/stories/ProgressBar.stories.js.map +0 -1
  144. package/dist/stories/RadioButton.stories.js +0 -36
  145. package/dist/stories/RadioButton.stories.js.map +0 -1
  146. package/dist/stories/RadioButtonSimple.stories.js +0 -40
  147. package/dist/stories/RadioButtonSimple.stories.js.map +0 -1
  148. package/dist/stories/SimpleAlert.stories.js +0 -19
  149. package/dist/stories/SimpleAlert.stories.js.map +0 -1
  150. package/dist/stories/Slider.stories.js +0 -70
  151. package/dist/stories/Slider.stories.js.map +0 -1
  152. package/dist/stories/Switch.stories.js +0 -35
  153. package/dist/stories/Switch.stories.js.map +0 -1
  154. package/dist/stories/TabHeader.stories.js +0 -48
  155. package/dist/stories/TabHeader.stories.js.map +0 -1
  156. package/dist/stories/TableResults.stories.js +0 -717
  157. package/dist/stories/TableResults.stories.js.map +0 -1
  158. package/dist/stories/TagScope.stories.js +0 -16
  159. package/dist/stories/TagScope.stories.js.map +0 -1
  160. package/dist/stories/TestimonialCard.stories.js +0 -24
  161. package/dist/stories/TestimonialCard.stories.js.map +0 -1
  162. package/dist/stories/Toast.stories.js +0 -51
  163. package/dist/stories/Toast.stories.js.map +0 -1
  164. package/dist/stories/Toggle.stories.js +0 -42
  165. package/dist/stories/Toggle.stories.js.map +0 -1
  166. package/dist/stories/Tooltip.stories.js +0 -108
  167. package/dist/stories/Tooltip.stories.js.map +0 -1
  168. package/postcss.config.js +0 -8
  169. package/src/assets/images/multifamily-units.svg +0 -10
  170. package/src/assets/images/policy-studio.svg +0 -15
  171. package/src/components/playground/PsScrollBar.vue +0 -320
  172. package/src/contents/ComparisonData.ts +0 -378
  173. package/src/contents/FlexibleData.ts +0 -502
  174. package/src/contents/ResultsData.ts +0 -531
  175. package/src/stories/Accordion.stories.ts +0 -59
  176. package/src/stories/BadgeWithIcon.stories.ts +0 -31
  177. package/src/stories/BarChart.stories.ts +0 -17
  178. package/src/stories/Breadcrumb.stories.ts +0 -22
  179. package/src/stories/Button.stories.ts +0 -48
  180. package/src/stories/Button.vue +0 -59
  181. package/src/stories/CardInfos.stories.ts +0 -15
  182. package/src/stories/ChartLegend.stories.ts +0 -15
  183. package/src/stories/Checkbox.stories.ts +0 -45
  184. package/src/stories/CheckboxSimple.stories.ts +0 -49
  185. package/src/stories/Chips.stories.ts +0 -33
  186. package/src/stories/ClimateZoneBadge.stories.ts +0 -18
  187. package/src/stories/Colors.mdx +0 -70
  188. package/src/stories/CostEffectBar.stories.ts +0 -24
  189. package/src/stories/Datatable.stories.ts +0 -53
  190. package/src/stories/DateCardInfo.stories.ts +0 -20
  191. package/src/stories/Dialog.stories.ts +0 -131
  192. package/src/stories/Draggable.stories.ts +0 -23
  193. package/src/stories/Dropdown.stories.ts +0 -100
  194. package/src/stories/DropdownList.stories.ts +0 -213
  195. package/src/stories/ElevationSystem.mdx +0 -41
  196. package/src/stories/Header.stories.ts +0 -42
  197. package/src/stories/Header.vue +0 -77
  198. package/src/stories/HighlightRippleDot.stories.ts +0 -16
  199. package/src/stories/Icon.stories.ts +0 -23
  200. package/src/stories/InlineSelector.stories.ts +0 -18
  201. package/src/stories/Input.stories.ts +0 -243
  202. package/src/stories/InputSelect.stories.ts +0 -31
  203. package/src/stories/InputTextArea.stories.ts +0 -25
  204. package/src/stories/Introduction.mdx +0 -211
  205. package/src/stories/MiniTag.stories.ts +0 -59
  206. package/src/stories/Playground.stories.ts +0 -16
  207. package/src/stories/ProgressBar.stories.ts +0 -24
  208. package/src/stories/RadioButton.stories.ts +0 -40
  209. package/src/stories/RadioButtonSimple.stories.ts +0 -43
  210. package/src/stories/SimpleAlert.stories.ts +0 -22
  211. package/src/stories/Slider.stories.ts +0 -79
  212. package/src/stories/Switch.stories.ts +0 -39
  213. package/src/stories/TabHeader.stories.ts +0 -57
  214. package/src/stories/TableResults.stories.ts +0 -728
  215. package/src/stories/TagScope.stories.ts +0 -17
  216. package/src/stories/TestimonialCard.stories.ts +0 -27
  217. package/src/stories/Toast.stories.ts +0 -52
  218. package/src/stories/Toggle.stories.ts +0 -48
  219. package/src/stories/Tooltip.stories.ts +0 -114
  220. package/src/stories/Typography.mdx +0 -212
  221. package/src/stories/assets/code-brackets.svg +0 -1
  222. package/src/stories/assets/colors.svg +0 -1
  223. package/src/stories/assets/comments.svg +0 -1
  224. package/src/stories/assets/direction.svg +0 -1
  225. package/src/stories/assets/flow.svg +0 -1
  226. package/src/stories/assets/plugin.svg +0 -1
  227. package/src/stories/assets/repo.svg +0 -1
  228. package/src/stories/assets/stackalt.svg +0 -1
  229. package/src/stories/button.css +0 -30
  230. package/src/stories/header.css +0 -32
  231. package/webpack.config.js +0 -36
@@ -1,25 +1,25 @@
1
1
  <template>
2
- <ul
2
+ <ul
3
3
  class="psui-el-dropdown-menu-list"
4
4
  :class="`layout-${layout}`"
5
5
  >
6
- <li
7
- v-for="(item, index) in getItems"
6
+ <li
7
+ v-for="(item, index) in getItems"
8
8
  :key="`${index}-${getKeyValue(item)}`"
9
9
  :id="`${index}-${getKeyValue(item)}`"
10
- :class="{ 'is-selected psui-bg-blue-10 psui-text-blue-60 hover:psui-bg-blue-10 hover:psui-text-blue-60' : getSelected === getKeyValue(item) }"
10
+ :class="{ 'is-selected psui-bg-blue-10 psui-text-blue-60 hover:psui-bg-blue-10 hover:psui-text-blue-60': getSelected === getKeyValue(item) }"
11
11
  class="psui-el-dropdown-menu-list-item"
12
- @mouseover="isHovering = index"
12
+ @mouseover="isHovering = index"
13
13
  @mouseout="isHovering = false"
14
14
  @click="selectItem(item)"
15
15
  >
16
16
  <div class="psui-el-dropdown-menu-list-item-left-label">
17
17
  {{ getLeftLabel(item) }}
18
-
18
+
19
19
  <div
20
20
  v-if="item.description"
21
21
  class="psui-font-normal psui-text-gray-50 psui-ml-1"
22
- :class="{ 'psui-text-blue-60' : item.key == getItems.key }"
22
+ :class="{ 'psui-text-blue-60': item.key == getItems.key }"
23
23
  >
24
24
  {{ item.description }}
25
25
  </div>
@@ -35,13 +35,13 @@
35
35
 
36
36
  <template v-if="layout == 'rich'">
37
37
  <div class="psui-el-dropdown-menu-list-item-line" />
38
- <div
38
+ <div
39
39
  v-if="rightLabelFormatter"
40
40
  class="psui-el-dropdown-menu-list-item-rigth-label"
41
41
  >
42
42
  {{ rightLabelFormatter(item.key, getStudyDataLevel[item.key], getStudyDataLevel) }}
43
43
  </div>
44
- <div
44
+ <div
45
45
  v-else
46
46
  class="psui-el-dropdown-menu-list-item-rigth-label"
47
47
  >
@@ -49,132 +49,135 @@
49
49
  </div>
50
50
  </template>
51
51
  </li>
52
- </ul>
52
+ </ul>
53
53
  </template>
54
54
 
55
- <script>
55
+ <script setup>
56
56
  import PsIcon from '../ui/PsIcon.vue'
57
- export const itemStyle = ['onlytext', 'radio', 'icon', 'checkbox', 'switch', 'rich']
57
+ import { defineProps, ref, computed, defineEmits } from 'vue'
58
58
 
59
- export default {
60
- name: 'PsDropdownList',
61
- components: { PsIcon },
62
- props: {
63
- /**
64
- * It sets the style of items
65
- */
66
- layout: {
67
- type: String,
68
- default: 'onlytext',
69
- validator: (value) => {
70
- return itemStyle.indexOf(value) !== -1
71
- }
72
- },
73
- /**
74
- * It sets the text key which will retrieve a icon from Google Fonts. Make sure to get the correct description of your icon on https://fonts.google.com/.
75
- */
76
- icon: {
77
- type: String,
78
- },
79
- /**
80
- * It sets the items which will be displayed on the dropdown menu.
81
- */
82
- items: {
83
- type: [Array, Object],
84
- required: true
85
- },
86
- /**
87
- * It sets the left key label of your items if needed.
88
- */
89
- leftLabel: {
90
- type: [String, Function],
91
- default: 'left_label'
92
- },
93
- /**
94
- * It sets the right key label of your items if needed.
95
- */
96
- rightLabel: {
97
- type: [String, Function],
98
- default: 'right_label'
99
- },
100
- /**
101
- * It sets the key label of your items if needed.
102
- */
103
- label: {
104
- type: [String, Function],
105
- default: 'label'
106
- },
107
- /**
108
- * It sets the key value of your items if needed.
109
- */
110
- keyValue: {
111
- type: [String, Function],
112
- default: 'value'
113
- },
114
- /**
115
- * It sets the format function to display values.
116
- */
117
- rightLabelFormatter: {
118
- type: Function
59
+ const props = defineProps({
60
+ /**
61
+ * It sets the style of items
62
+ */
63
+ layout: {
64
+ type: String,
65
+ default: 'onlytext',
66
+ validator: (value) => {
67
+ return ['onlytext', 'radio', 'icon', 'checkbox', 'switch', 'rich'].indexOf(value) !== -1
119
68
  },
120
- /**
121
- * It sets the format function to display values.
122
- */
123
- studyData: {
124
- type: [String, Object]
125
- },
126
- /**
127
- * It sets the item selected on the dropdown menu.
128
- */
129
- selected: {},
130
69
  },
131
- data: () => ({
132
- isHovering: false
133
- }),
134
- computed: {
135
- getSelected() {
136
- if (this.selected !== undefined) {
137
- if (typeof this.selected === 'object' && this.selected[this.keyValue] ) {
138
- return this.selected[this.keyValue]
139
- } else {
140
- return this.selected
141
- }
142
- } else {
143
- return false
144
- }
145
- },
146
- getItems() {
147
- return this.items
148
- },
149
- getStudyDataLevel() {
150
- return this.studyData?.data || this.studyData
151
- },
70
+ /**
71
+ * It sets the text key which will retrieve a icon from Google Fonts. Make sure to get the correct description of your icon on https://fonts.google.com/.
72
+ */
73
+ icon: {
74
+ type: String,
75
+ default: '',
152
76
  },
153
- methods: {
154
- selectItem(item) {
155
- this.$emit('update:selected', this.getKeyValue(item) )
156
- this.$emit('change', item )
157
- },
158
- getLeftLabel(item) {
159
- if(typeof this.leftLabel == 'function') return this.leftLabel(item)
160
- if(typeof item === 'string') return item
161
- return item[this.leftLabel]
162
- },
163
- getRightLabel(item) {
164
- if(typeof this.rightLabel == 'function') return this.rightLabel(item)
165
- if(typeof item === 'string') return item
166
- return item[this.rightLabel]
167
- },
168
- getLabel(item) {
169
- if(typeof this.label == 'function') return this.label(item)
170
- if(typeof item === 'string') return item
171
- return item[this.label]
172
- },
173
- getKeyValue(item) {
174
- if(typeof this.keyValue == 'function') return this.keyValue(item)
175
- if(typeof item === 'string') return item
176
- return item[this.keyValue]
177
- },
77
+ /**
78
+ * It sets the items which will be displayed on the dropdown menu.
79
+ */
80
+ items: {
81
+ type: [Array, Object],
82
+ required: true,
83
+ },
84
+ /**
85
+ * It sets the left key label of your items if needed.
86
+ */
87
+ leftLabel: {
88
+ type: [String, Function],
89
+ default: 'left_label',
90
+ },
91
+ /**
92
+ * It sets the right key label of your items if needed.
93
+ */
94
+ rightLabel: {
95
+ type: [String, Function],
96
+ default: 'right_label',
97
+ },
98
+ /**
99
+ * It sets the key label of your items if needed.
100
+ */
101
+ label: {
102
+ type: [String, Function],
103
+ default: 'label',
104
+ },
105
+ /**
106
+ * It sets the key value of your items if needed.
107
+ */
108
+ keyValue: {
109
+ type: [String, Function],
110
+ default: 'value',
111
+ },
112
+ /**
113
+ * It sets the format function to display values.
114
+ */
115
+ rightLabelFormatter: {
116
+ type: Function,
117
+ default: () => '',
118
+ },
119
+ /**
120
+ * It sets the format function to display values.
121
+ */
122
+ studyData: {
123
+ type: [String, Object],
124
+ default: '',
125
+ },
126
+ /**
127
+ * It sets the item selected on the dropdown menu.
128
+ */
129
+ selected: {},
130
+ })
131
+ const emit = defineEmits(['update:selected', 'change'])
132
+
133
+ const isHovering = ref(false)
134
+
135
+ const getSelected = computed(() => {
136
+ if (props.selected !== undefined) {
137
+ if (typeof props.selected === 'object' && props.selected[props.keyValue]) {
138
+ return props.selected[props.keyValue]
139
+ } else {
140
+ return props.selected
141
+ }
142
+ } else {
143
+ return false
178
144
  }
145
+ })
146
+
147
+ const getItems = computed(() => {
148
+ return props.items
149
+ })
150
+
151
+ const getStudyDataLevel = computed(() => {
152
+ return props.studyData?.data || props.studyData
153
+ })
154
+
155
+ const selectItem = (item) => {
156
+ emit('update:selected', getKeyValue(item))
157
+ emit('change', item)
158
+ }
159
+
160
+ const getLeftLabel = (item) => {
161
+ if (typeof props.leftLabel == 'function') return props.leftLabel(item)
162
+ if (typeof item === 'string') return item
163
+ return item[props.leftLabel]
164
+ }
165
+
166
+ const getRightLabel = (item) => {
167
+ if (typeof props.rightLabel == 'function') return props.rightLabel(item)
168
+ if (typeof item === 'string') return item
169
+ return item[props.rightLabel]
170
+ }
171
+
172
+ // const getLabel = (item) => {
173
+ // if(typeof props.label == 'function') return props.label(item)
174
+ // if(typeof item === 'string') return item
175
+ // return item[props.label]
176
+ // }
177
+
178
+ const getKeyValue = (item) => {
179
+ if (typeof props.keyValue == 'function') return props.keyValue(item)
180
+ if (typeof item === 'string') return item
181
+ return item[props.keyValue]
179
182
  }
180
- </script>
183
+ </script>
@@ -1,22 +1,22 @@
1
1
  <template>
2
- <div
3
- class="psui-el-input"
4
- :class="[getComponentClass, `layout-${layout}`]"
5
- >
2
+ <div
3
+ class="psui-el-input"
4
+ :class="[getComponentClass, `layout-${layout}`]"
5
+ >
6
6
  <label v-if="label"> {{ label }} </label>
7
7
 
8
- <div
8
+ <div
9
9
  class="psui-el-input-wrapper"
10
- @mouseenter="$emit('mouseenter',$event)"
11
- @mouseleave="$emit('mouseleave',$event)"
10
+ @mouseenter="emit('mouseenter', $event)"
11
+ @mouseleave="emit('mouseleave', $event)"
12
12
  >
13
- <div
14
- v-if="$slots.prepend"
15
- class="psui-el-input-prepend"
13
+ <div
14
+ v-if="$slots.prepend"
15
+ class="psui-el-input-prepend"
16
16
  >
17
17
  <slot name="prepend" />
18
18
  </div>
19
- <PsRichTooltip
19
+ <PsRichTooltip
20
20
  class="psui-w-full"
21
21
  css-class="psui-w-48"
22
22
  :ignore-dialog="!showTooltip"
@@ -33,11 +33,11 @@
33
33
  :max="maxValue"
34
34
  @focus="onInputFocus"
35
35
  @blur="onInputBlur"
36
- @input="$emit('input', $event)"
37
- @keydown="$emit('keydown', $event)"
38
- @change="$emit('change', $event)"
36
+ @input="emit('input', $event)"
37
+ @keydown="emit('keydown', $event)"
38
+ @change="emit('change', $event)"
39
39
  v-bind="getAttrs"
40
- :class="{ 'focus': isFocus }"
40
+ :class="{ focus: isFocus }"
41
41
  >
42
42
  </template>
43
43
  <template #content>
@@ -46,160 +46,162 @@
46
46
  </div>
47
47
  </template>
48
48
  </PsRichTooltip>
49
- <div
50
- v-if="$slots.append || hasError"
51
- class="psui-el-input-append"
49
+ <div
50
+ v-if="$slots.append || hasError"
51
+ class="psui-el-input-append"
52
52
  >
53
- <span
54
- v-if="hasError"
55
- class="material-icons psui-text-red-20 material-icons-sharp"
53
+ <span
54
+ v-if="hasError"
55
+ class="material-icons psui-text-red-20 material-icons-sharp"
56
56
  >error</span>
57
- <slot
58
- v-else
59
- name="append"
57
+ <slot
58
+ v-else
59
+ name="append"
60
60
  />
61
61
  </div>
62
62
  </div>
63
63
 
64
- <p
65
- v-if="hint || (hasError && typeof hasError === 'string')"
66
- class="psui-el-input-hint"
64
+ <p
65
+ v-if="hint || (hasError && typeof hasError === 'string')"
66
+ class="psui-el-input-hint"
67
67
  >
68
68
  {{ typeof hasError === 'string' ? hasError : hint }}
69
- </p>
69
+ </p>
70
70
  </div>
71
71
  </template>
72
72
 
73
- <script>
73
+ <script setup>
74
74
  import PsRichTooltip from '../tooltip/PsRichTooltip.vue'
75
+ import { defineProps, ref, computed, useAttrs, defineEmits } from 'vue'
75
76
 
76
- export default {
77
- name: 'PsInput',
78
- components: {
79
- PsRichTooltip,
77
+ const props = defineProps({
78
+ /**
79
+ * It set the title and also its tooltip default behavior
80
+ */
81
+ title: {
82
+ type: String,
83
+ default: '',
80
84
  },
81
- props: {
82
- /**
83
- * It set the title and also its tooltip default behavior
84
- */
85
- title: {
86
- type: String,
87
- default: ''
88
- },
89
- /**
90
- * It sets the type of your button. default: text.
91
- */
92
- type: {
93
- type: String,
94
- default: 'text'
95
- },
96
- /**
97
- * It sets a placeholder for your button if needed.
98
- */
99
- placeholder: {
100
- type: String
101
- },
102
- /**
103
- * It sets the label of the input if needed.
104
- */
105
- label: {
106
- type: String
107
- },
108
- /**
109
- * It sets a text below the input. See Figma Text fileds & Forms.
110
- */
111
- hint: {
112
- type: String
113
- },
114
- /**
115
- * It sets the layout of your button. eg: mini and default.
116
- */
117
- layout: {
118
- type: String,
119
- default: 'default',
120
- validator: (value) => ['default', 'mini'].includes(value)
121
- },
122
- /**
123
- * It sets the value of the button.
124
- */
125
- value: {
126
- required: true,
127
- },
128
- /**
129
- * It disables the input. All mouse events are disabled.
130
- */
131
- disabled: {
132
- type: Boolean,
133
- default: false
134
- },
135
- /**
136
- * It sets if the input found any error.
137
- */
138
- hasError: {
139
- type: [String, Boolean],
140
- default: false
141
- },
142
- /**
143
- * It sets a active css class based on a boolean property.
144
- */
145
- active: {
146
- type: Boolean,
147
- default: false
148
- },
149
- minValue: {
150
- type: null
151
- },
152
- maxValue: {
153
- type: null
154
- },
155
- step:{
156
- type: null
157
- },
158
- showTooltip: {
159
- type: Boolean,
160
- default: false,
161
- },
162
- tooltipText: {
163
- type: String,
164
- default: '',
165
- },
166
- },
167
- data: () => ({
168
- isFocus: false,
169
- }),
170
- computed: {
171
- getAttrs() {
172
- const defaultAttrs = {
173
- autocapitalize: 'sentences',
174
- autocomplete: 'chrome-off',
175
- autocorrect: 'off',
176
- spellcheck: 'spellcheck'
177
- }
178
- return { ...defaultAttrs, ...this.$attrs }
179
- },
180
- getComponentClass() {
181
- if (this.disabled) {
182
- return 'status-disabled'
183
- } else if (this.hasError) {
184
- return 'status-error'
185
- } else if (this.isFocus || this.isTyping || this.active ) {
186
- return 'status-active'
187
- } else {
188
- return 'status-resting'
189
- }
190
- },
85
+ /**
86
+ * It sets the type of your button. default: text.
87
+ */
88
+ type: {
89
+ type: String,
90
+ default: 'text',
191
91
  },
192
- methods: {
193
- onInputFocus($event) {
194
- this.isFocus = true
195
- this.$emit('focus', $event)
196
- },
197
- onInputBlur($event) {
198
- this.isFocus = false
199
- this.$emit('blur', $event)
200
- },
92
+ /**
93
+ * It sets a placeholder for your button if needed.
94
+ */
95
+ placeholder: {
96
+ type: String,
97
+ default: '',
98
+ },
99
+ /**
100
+ * It sets the label of the input if needed.
101
+ */
102
+ label: {
103
+ type: String,
104
+ default: '',
105
+ },
106
+ /**
107
+ * It sets a text below the input. See Figma Text fileds & Forms.
108
+ */
109
+ hint: {
110
+ type: String,
111
+ default: '',
112
+ },
113
+ /**
114
+ * It sets the layout of your button. eg: mini and default.
115
+ */
116
+ layout: {
117
+ type: String,
118
+ default: 'default',
119
+ validator: (value) => ['default', 'mini'].includes(value),
120
+ },
121
+ /**
122
+ * It sets the value of the button.
123
+ */
124
+ value: {
125
+ required: true,
126
+ },
127
+ /**
128
+ * It disables the input. All mouse events are disabled.
129
+ */
130
+ disabled: {
131
+ type: Boolean,
132
+ default: false,
133
+ },
134
+ /**
135
+ * It sets if the input found any error.
136
+ */
137
+ hasError: {
138
+ type: [String, Boolean],
139
+ default: false,
140
+ },
141
+ /**
142
+ * It sets a active css class based on a boolean property.
143
+ */
144
+ active: {
145
+ type: Boolean,
146
+ default: false,
147
+ },
148
+ minValue: {
149
+ type: null,
150
+ },
151
+ maxValue: {
152
+ type: null,
153
+ },
154
+ step: {
155
+ type: null,
156
+ },
157
+ showTooltip: {
158
+ type: Boolean,
159
+ default: false,
160
+ },
161
+ tooltipText: {
162
+ type: String,
163
+ default: '',
164
+ },
165
+ })
166
+
167
+ const emit = defineEmits(['focus', 'blur', 'mouseenter', 'mouseleave', 'input', 'keydown', 'change'])
168
+
169
+ const isFocus = ref(false)
170
+ const attrs = useAttrs()
171
+
172
+ const getAttrs = computed(() => {
173
+ const defaultAttrs = {
174
+ autocapitalize: 'sentences',
175
+ autocomplete: 'chrome-off',
176
+ autocorrect: 'off',
177
+ spellcheck: 'spellcheck',
201
178
  }
179
+ return { ...defaultAttrs, ...attrs }
180
+ })
181
+
182
+ const getComponentClass = computed(() => {
183
+ if (props.disabled) {
184
+ return 'status-disabled'
185
+ } else if (props.hasError) {
186
+ return 'status-error'
187
+ } else if (isFocus.value || props.active) {
188
+ return 'status-active'
189
+ } else {
190
+ return 'status-resting'
191
+ }
192
+ })
193
+
194
+ const onInputFocus = ($event) => {
195
+ isFocus.value = true
196
+ emit('focus', $event)
197
+ }
198
+
199
+ const onInputBlur = ($event) => {
200
+ isFocus.value = false
201
+ emit('blur', $event)
202
202
  }
203
203
  </script>
204
204
 
205
- <style> /* Please, use the file src/assets/scss/components/PsInput.scss */</style>
205
+ <style>
206
+ /* Please, use the file src/assets/scss/components/PsInput.scss */
207
+ </style>