@policystudio/policy-studio-ui-vue 1.2.0-access.6 → 1.2.0-access.61

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 (72) hide show
  1. package/dist/composables/useCollapseAnimation.d.ts +8 -0
  2. package/dist/composables/useCollapseAnimation.js +65 -0
  3. package/dist/composables/useCollapseAnimation.js.map +1 -0
  4. package/dist/css/psui_styles_output.css +2954 -2258
  5. package/doc/src/stories/Colors.mdx +3 -3
  6. package/doc/src/stories/Dropdown.stories.ts +4 -4
  7. package/doc/src/stories/Input.stories.ts +9 -9
  8. package/package.json +1 -1
  9. package/src/assets/scss/base.scss +3 -1
  10. package/src/assets/scss/components/PsAccordion.scss +20 -29
  11. package/src/assets/scss/components/PsBadgeWithIcon.scss +2 -2
  12. package/src/assets/scss/components/PsButton.scss +117 -72
  13. package/src/assets/scss/components/PsCardInfos.scss +13 -3
  14. package/src/assets/scss/components/PsChartLegend.scss +2 -2
  15. package/src/assets/scss/components/PsCheckbox.scss +63 -48
  16. package/src/assets/scss/components/PsChips.scss +81 -31
  17. package/src/assets/scss/components/PsClimateZoneBadge.scss +1 -1
  18. package/src/assets/scss/components/PsCollapse.scss +52 -56
  19. package/src/assets/scss/components/PsDateCardInfo.scss +7 -4
  20. package/src/assets/scss/components/PsDialog.scss +114 -39
  21. package/src/assets/scss/components/PsDraggable.scss +28 -36
  22. package/src/assets/scss/components/PsDropdown.scss +7 -15
  23. package/src/assets/scss/components/PsIcon.scss +21 -0
  24. package/src/assets/scss/components/PsInlineSelector.scss +1 -1
  25. package/src/assets/scss/components/PsInput.scss +27 -64
  26. package/src/assets/scss/components/PsInputSelect.scss +6 -6
  27. package/src/assets/scss/components/PsInputTextArea.scss +1 -1
  28. package/src/assets/scss/components/PsMiniTag.scss +25 -30
  29. package/src/assets/scss/components/PsRadioButton.scss +90 -75
  30. package/src/assets/scss/components/PsSimpleAlert.scss +16 -13
  31. package/src/assets/scss/components/PsSlider.scss +2 -2
  32. package/src/assets/scss/components/PsSwitch.scss +39 -21
  33. package/src/assets/scss/components/PsTabHeader.scss +124 -133
  34. package/src/assets/scss/components/PsTableResults.scss +16 -723
  35. package/src/assets/scss/components/PsTagScope.scss +1 -1
  36. package/src/assets/scss/components/PsTestimonialCard.scss +2 -2
  37. package/src/assets/scss/components/PsToast.scss +62 -60
  38. package/src/assets/scss/components/PsToggle.scss +3 -6
  39. package/src/assets/scss/components/PsTooltip.scss +1 -1
  40. package/src/assets/scss/components/_PsTableResults.scss +1 -1
  41. package/src/assets/scss/components/table-layouts/LayoutComparison.scss +200 -0
  42. package/src/assets/scss/components/table-layouts/LayoutFlexible.scss +325 -0
  43. package/src/assets/scss/components/table-layouts/LayoutResults.scss +102 -0
  44. package/src/components/accordion/PsAccordionItem.vue +4 -62
  45. package/src/components/badges-and-tags/PsCardInfos.vue +6 -2
  46. package/src/components/badges-and-tags/PsChartLegend.vue +1 -1
  47. package/src/components/badges-and-tags/PsDateCardInfo.vue +16 -5
  48. package/src/components/badges-and-tags/PsMiniTag.vue +5 -5
  49. package/src/components/badges-and-tags/PsTestimonialCard.vue +8 -6
  50. package/src/components/buttons/PsButton.vue +62 -9
  51. package/src/components/chips/PsChips.vue +2 -2
  52. package/src/components/collapse/PsCollapse.vue +18 -16
  53. package/src/components/controls/PsCheckboxSimple.vue +7 -2
  54. package/src/components/controls/PsDraggable.vue +4 -4
  55. package/src/components/controls/PsRadioButton.vue +3 -1
  56. package/src/components/controls/PsRadioButtonSimple.vue +2 -0
  57. package/src/components/datatable/PsDataTableItem.vue +1 -1
  58. package/src/components/forms/PsDropdown.vue +77 -27
  59. package/src/components/forms/PsDropdownList.vue +5 -1
  60. package/src/components/forms/PsInput.vue +1 -1
  61. package/src/components/notifications/PsDialog.vue +60 -11
  62. package/src/components/notifications/PsSimpleAlert.vue +6 -7
  63. package/src/components/notifications/PsToast.vue +5 -5
  64. package/src/components/table-results/PsTableResults.vue +27 -21
  65. package/src/components/table-results/PsTableResultsHead.vue +5 -5
  66. package/src/components/table-results/PsTableResultsHeadComparison.vue +2 -2
  67. package/src/components/table-results/PsTableResultsHeadFlexible.vue +7 -7
  68. package/src/components/tabs/PsTabHeader.vue +6 -2
  69. package/src/components/tooltip/PsTooltip.vue +11 -1
  70. package/src/components/ui/PsIcon.vue +14 -6
  71. package/src/composables/useCollapseAnimation.ts +76 -0
  72. package/tailwind.config.js +50 -79
@@ -0,0 +1,325 @@
1
+ @mixin renderFlexible {
2
+ tr {
3
+ th,
4
+ td {
5
+ &:last-child {
6
+ @apply psui-pr-2;
7
+ }
8
+ }
9
+ }
10
+
11
+ thead {
12
+ @apply psui-bg-white psui-items-start psui-sticky psui-top-0 psui-z-15;
13
+
14
+ &:after {
15
+ content: "";
16
+ @apply psui-inline-block psui-absolute psui-top-0 psui-w-2 psui-h-full psui-bg-white;
17
+ right: -8px;
18
+ }
19
+
20
+ tr {
21
+ .title {
22
+ @apply psui-text-14 psui-font-semibold psui-text-gray-80;
23
+ }
24
+
25
+ th {
26
+ @apply psui-text-right psui-w-auto psui-align-top;
27
+
28
+ .description {
29
+ @apply psui-text-xsmall psui-font-normal psui-text-gray-60;
30
+ line-height: 110%;
31
+ }
32
+
33
+ &:first-child {
34
+ @apply psui-text-left psui-bg-white psui-sticky psui-z-10 psui-left-0;
35
+ padding-left: 0;
36
+
37
+ > div {
38
+ @apply psui-items-start;
39
+ }
40
+
41
+ &.pseudo-line {
42
+ &::after {
43
+ content: "";
44
+ position: absolute;
45
+ top: 10px;
46
+ right: 0;
47
+ width: 1px;
48
+ height: calc(100%);
49
+ background-color: #d6dde5;
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ &:first-of-type {
56
+ th {
57
+ @apply psui-text-left;
58
+ padding-top: 0;
59
+ padding-bottom: 0;
60
+ padding-left: 10px;
61
+ position: sticky;
62
+
63
+ &:first-child {
64
+ padding-left: 0;
65
+ width: 598px;
66
+ }
67
+
68
+ > div {
69
+ @apply psui-flex psui-flex-row psui-border-b psui-border-gray-30 psui-py-2;
70
+
71
+ > .title {
72
+ @apply psui-text-14 psui-text-gray-80 psui-font-semibold;
73
+ }
74
+ }
75
+ }
76
+
77
+ p {
78
+ @apply psui-text-16;
79
+ line-height: 18px;
80
+ }
81
+ }
82
+
83
+ &:not(:first-of-type) {
84
+ th {
85
+ &:not(:first-of-type) {
86
+ > div {
87
+ > div {
88
+ @apply psui-mx-auto;
89
+ }
90
+ }
91
+ }
92
+
93
+ > div {
94
+ @apply psui-border-b psui-border-gray-20 psui-pr-[20px];
95
+ }
96
+
97
+ .title {
98
+ @apply psui-text-gray-80;
99
+ }
100
+
101
+ p:not(:first-of-type) {
102
+ @apply psui-text-gray-60;
103
+ }
104
+
105
+ &:first-child {
106
+ @apply psui-text-left;
107
+ width: 352px;
108
+ padding-left: 0;
109
+ }
110
+
111
+ &:nth-child(2) {
112
+ @apply psui-sticky psui-z-10 psui-bg-white;
113
+ left: 352px;
114
+ min-width: 140px;
115
+ }
116
+
117
+ &:nth-child(3) {
118
+ @apply psui-sticky psui-z-10 psui-bg-white;
119
+ left: 492px;
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ tbody {
127
+ tr {
128
+ @apply psui-border-gray-20;
129
+ transition: background-color 0.5s ease;
130
+
131
+ .title {
132
+ @apply psui-flex psui-items-center psui-text-small psui-text-gray-80;
133
+ }
134
+
135
+ &.removed-class {
136
+ td {
137
+ .title {
138
+ @apply psui-text-gray-80 psui-text-14 psui-leading-[130%];
139
+ }
140
+
141
+ &:first-child {
142
+ > div {
143
+ margin-left: 4px;
144
+ }
145
+ }
146
+ }
147
+ }
148
+
149
+ &.is-disabled {
150
+ td {
151
+ &.hover-color {
152
+ background-color: #e6ecf2 !important;
153
+ opacity: 0.99;
154
+ transition: background-color 0.5s ease;
155
+ }
156
+ }
157
+ }
158
+
159
+ td {
160
+ @apply psui-text-gray-80 psui-h-[32px] psui-text-right psui-text-14;
161
+
162
+ &.hover-color {
163
+ background-color: #ecf7fb !important;
164
+ opacity: 0.99;
165
+ transition: background-color 0.5s ease;
166
+ }
167
+
168
+ > div {
169
+ @apply psui-flex psui-items-center;
170
+ }
171
+
172
+ .actions {
173
+ @apply psui-flex psui-items-center psui-h-full psui-relative;
174
+
175
+ &-button {
176
+ @apply psui-cursor-pointer;
177
+ }
178
+ }
179
+
180
+ &:first-child {
181
+ @apply psui-pr-8 psui-text-left psui-block psui-sticky psui-z-10 psui-left-0;
182
+ width: 352px;
183
+ }
184
+
185
+ &:nth-child(2) {
186
+ @apply psui-sticky psui-z-10;
187
+ width: 140px;
188
+ left: 352px;
189
+ > div {
190
+ @apply psui-justify-center;
191
+ }
192
+ }
193
+
194
+ &:nth-child(3) {
195
+ @apply psui-sticky psui-z-10;
196
+ min-width: 140px;
197
+ left: 492px;
198
+ > div {
199
+ @apply psui-justify-center;
200
+ }
201
+ }
202
+
203
+ &:nth-child(n + 3) {
204
+ padding-right: 20px;
205
+ }
206
+
207
+ .psui-el-tooltip-dialog {
208
+ text-align: left;
209
+ max-width: 180px;
210
+
211
+ .psui-el-tooltip-content-wrapper {
212
+ white-space: normal;
213
+ }
214
+ }
215
+ }
216
+
217
+ &.is-first {
218
+ @apply psui-border-transparent;
219
+
220
+ .actions-button span {
221
+ @apply psui-text-gray-60;
222
+ font-size: 16px !important;
223
+ }
224
+
225
+ .title {
226
+ @apply psui-text-xsmall psui-font-bold psui-text-gray-60;
227
+ }
228
+
229
+ td {
230
+ @apply psui-h-auto psui-py-1;
231
+ min-height: 1rem;
232
+ }
233
+
234
+ &.removed-class {
235
+ td {
236
+ .title {
237
+ @apply psui-ml-[6px] psui-text-gray-80 psui-text-14 psui-font-semibold;
238
+ }
239
+
240
+ .actions-button {
241
+ margin-left: 2px;
242
+ }
243
+
244
+ &:first-child {
245
+ @apply psui-sticky;
246
+ min-width: 330px;
247
+ }
248
+ }
249
+
250
+ &.closed {
251
+ td {
252
+ &:first-child {
253
+ @apply psui-sticky;
254
+
255
+ .actions-button {
256
+ margin-left: 2px;
257
+ }
258
+ }
259
+ }
260
+ }
261
+ }
262
+ }
263
+
264
+ &:not(.is-first):not(.removed-class) {
265
+ td {
266
+ &:first-child {
267
+ @apply psui-sticky;
268
+
269
+ &:before,
270
+ &:after {
271
+ content: "";
272
+ @apply psui-absolute psui-top-0;
273
+ }
274
+
275
+ &:before {
276
+ @apply psui-bg-white psui-left-0;
277
+ width: 14px;
278
+ height: calc(100% + 1px);
279
+ }
280
+
281
+ &:after {
282
+ @apply psui-bg-gray-20 psui-w-px psui-h-0 psui-rounded-lg;
283
+ left: 8px;
284
+ }
285
+ }
286
+ }
287
+
288
+ &:hover {
289
+ td {
290
+ @apply psui-bg-blue-10;
291
+ }
292
+ }
293
+
294
+ &.opened {
295
+ td:first-child {
296
+ &:after {
297
+ height: calc(100% + 1px);
298
+ }
299
+ }
300
+ }
301
+ }
302
+
303
+ &:not(.is-first) {
304
+ td {
305
+ &:first-child {
306
+ > div {
307
+ margin-left: 10px;
308
+ }
309
+ }
310
+ }
311
+ }
312
+
313
+ &.is-active {
314
+ td {
315
+ padding-top: 9px;
316
+ padding-bottom: 9px;
317
+
318
+ .title {
319
+ @apply psui-text-14 psui-text-gray-60;
320
+ }
321
+ }
322
+ }
323
+ }
324
+ }
325
+ }
@@ -0,0 +1,102 @@
1
+ %sticky-first-column {
2
+ @apply psui-pl-0 psui-pr-8 psui-text-left psui-bg-white psui-sticky psui-z-10 psui-left-0;
3
+ box-shadow: inset -1px 0px 0px #ebeef0;
4
+ }
5
+
6
+ @mixin renderResults {
7
+ tr th:last-child,
8
+ tr td:last-child {
9
+ @apply psui-pr-2;
10
+ }
11
+
12
+ thead {
13
+ @apply psui-bg-white psui-items-start psui-shadow-elevation-10 psui-sticky psui-top-0 psui-z-15;
14
+
15
+ &::after {
16
+ content: '';
17
+ @apply psui-inline-block psui-absolute psui-top-0 psui-w-2 psui-h-full psui-bg-white psui-right-[-8px];
18
+ }
19
+
20
+ tr {
21
+ .title {
22
+ @apply psui-text-14 psui-font-semibold psui-text-gray-80;
23
+ }
24
+
25
+ th {
26
+ @apply psui-pl-6 psui-text-gray-60 psui-text-right psui-w-auto psui-align-top psui-py-[13px];
27
+
28
+ .description {
29
+ @apply psui-text-14 psui-text-gray-60 psui-font-normal;
30
+ }
31
+
32
+ &:first-child {
33
+ @extend %sticky-first-column;
34
+ @apply psui-min-w-[300px];
35
+
36
+ > div {
37
+ @apply psui-pl-0;
38
+ }
39
+ }
40
+ }
41
+ }
42
+
43
+ tr:first-of-type {
44
+ th {
45
+ @apply psui-text-left psui-py-0;
46
+
47
+ > div {
48
+ @apply psui-flex psui-flex-row psui-border-b psui-border-gray-30 psui-py-[0.688rem] psui-px-0;
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ tbody tr {
55
+ @apply psui-border-b psui-border-gray-20;
56
+
57
+ .title {
58
+ @apply psui-flex psui-items-center psui-text-14 psui-leading-[24px];
59
+ }
60
+
61
+ &.is-first .title {
62
+ @apply psui-text-gray-80 psui-font-bold;
63
+ }
64
+
65
+ td {
66
+ @apply psui-pl-8 psui-text-gray-80 psui-h-10 psui-text-right psui-text-14 psui-py-[0.688rem] psui-min-h-[41.5px];
67
+
68
+ > div {
69
+ @apply psui-flex psui-items-center;
70
+ }
71
+
72
+ &:not(:first-child) > div {
73
+ @apply psui-justify-end;
74
+ }
75
+
76
+ &:first-child {
77
+ @extend %sticky-first-column;
78
+ @apply psui-block psui-py-2;
79
+ }
80
+ }
81
+
82
+ td .actions {
83
+ @apply psui-flex psui-items-center psui-h-full psui-relative;
84
+
85
+ &-button {
86
+ @apply psui-cursor-pointer psui-ml-1;
87
+ }
88
+
89
+ .is-last-deep {
90
+ @apply psui-pl-10;
91
+ }
92
+ }
93
+
94
+ &.is-active {
95
+ @apply psui-bg-gray-10;
96
+
97
+ td:first-child {
98
+ @apply psui-bg-gray-10;
99
+ }
100
+ }
101
+ }
102
+ }
@@ -2,7 +2,6 @@
2
2
  <div
3
3
  class="psui-el-accordion-item"
4
4
  :class="{ 'status-opened': isOpen, disabled: disabled }"
5
- tabindex="0"
6
5
  >
7
6
  <div class="psui-el-accordion-item-header">
8
7
  <slot
@@ -12,7 +11,9 @@
12
11
  >
13
12
  <div
14
13
  @click="toggle"
14
+ @keydown.enter.stop="toggle"
15
15
  class="psui-el-accordion-item-header-wrapper"
16
+ tabindex="0"
16
17
  v-if="!hasCustomHeader"
17
18
  >
18
19
  <h2
@@ -50,8 +51,10 @@
50
51
 
51
52
  <script setup>
52
53
  import { getParentVueComponentByName } from '../../util/GeneralFunctions.js'
54
+ import { useCollapseAnimation } from '../../../dist/composables/useCollapseAnimation.js'
53
55
  import { ref, computed, getCurrentInstance } from 'vue'
54
56
 
57
+ const { beforeEnter, enter, afterEnter, beforeLeave, leave } = useCollapseAnimation()
55
58
  defineExpose({
56
59
  toggle: () => toggle()
57
60
  })
@@ -132,67 +135,6 @@ const toggle = () => {
132
135
  }
133
136
  }
134
137
 
135
- const beforeEnter = (el) => {
136
- el.style.height = '0'
137
- el.style.opacity = '0'
138
- el.style.overflow = 'hidden'
139
- el.style.paddingTop = '0'
140
- el.style.paddingBottom = '0'
141
- el.style.marginTop = '0'
142
- el.style.marginBottom = '0'
143
- }
144
-
145
- const enter = (el, done) => {
146
- void el.offsetHeight
147
-
148
- el.style.transition = 'all 0.3s ease-in-out'
149
- el.style.height = el.scrollHeight + 'px'
150
- el.style.opacity = '1'
151
-
152
- el.style.removeProperty('padding-top')
153
- el.style.removeProperty('padding-bottom')
154
- el.style.removeProperty('margin-top')
155
- el.style.removeProperty('margin-bottom')
156
-
157
- el.addEventListener('transitionend', done, { once: true })
158
- }
159
-
160
- const afterEnter = (el) => {
161
- el.style.height = 'auto'
162
- el.style.overflow = 'visible'
163
- el.style.transition = ''
164
- }
165
-
166
- const beforeLeave = (el) => {
167
- if (!el) return
168
-
169
- el.style.height = el.scrollHeight + 'px'
170
- el.style.overflow = 'hidden'
171
-
172
- const style = window.getComputedStyle(el)
173
- el.style.paddingTop = style.paddingTop
174
- el.style.paddingBottom = style.paddingBottom
175
- el.style.marginTop = style.marginTop
176
- el.style.marginBottom = style.marginBottom
177
- }
178
-
179
- const leave = (el, done) => {
180
- if (!el) return
181
-
182
- void el.offsetHeight
183
- el.style.transition = 'all 0.3s ease-in-out'
184
-
185
- requestAnimationFrame(() => {
186
- el.style.height = '0'
187
- el.style.opacity = '0'
188
- el.style.paddingTop = '0'
189
- el.style.paddingBottom = '0'
190
- el.style.marginTop = '0'
191
- el.style.marginBottom = '0'
192
- })
193
-
194
- el.addEventListener('transitionend', done, { once: true })
195
- }
196
138
  </script>
197
139
 
198
140
  <style>
@@ -1,7 +1,11 @@
1
1
  <template>
2
2
  <div
3
3
  class="psui-el-card-infos"
4
+ role="button"
5
+ tabindex="0"
6
+ :aria-label="`View details for ${title} ${subtitle}`"
4
7
  @click="onClick()"
8
+ @keyup.enter="onClick()"
5
9
  >
6
10
  <span class="psui-el-card-infos-title">
7
11
  <span :class="[titleClass, 'psui-mr-1']">{{ title }}</span>
@@ -53,14 +57,14 @@ defineProps({
53
57
  */
54
58
  titleClass: {
55
59
  type: String,
56
- default: 'psui-text-gray-60 psui-font-bold',
60
+ default: 'psui-text-gray-80 psui-font-bold',
57
61
  },
58
62
  /**
59
63
  * It sets the class for the subtitle text (color, font-weight, font-size, etc.).
60
64
  */
61
65
  subtitleClass: {
62
66
  type: String,
63
- default: 'psui-text-gray-40 psui-font-bold',
67
+ default: 'psui-text-gray-80',
64
68
  },
65
69
  /**
66
70
  * It sets the class for the total text (color, font-weight, font-size, etc.).
@@ -16,7 +16,7 @@
16
16
  class="psui-el-chart-legend-total"
17
17
  >{{ total }}</span>
18
18
  <span
19
- class="psui-text-gray-30"
19
+ class="psui-text-gray-60"
20
20
  v-if="total && percentage"
21
21
  > | </span>
22
22
  <span
@@ -1,8 +1,14 @@
1
1
  <template>
2
2
  <div class="psui-el-date-card">
3
- <span class="psui-el-date-card-month-day">
4
- {{ getMonthAndDayFromDate }}
5
- </span>
3
+ <div class="psui-el-date-card-month-day">
4
+ <span>
5
+ {{ getMonth }}
6
+ </span>
7
+ <span>
8
+ {{ getDay }}
9
+ </span>
10
+ </div>
11
+
6
12
  <span class="psui-el-date-card-year">
7
13
  {{ getYearFromDate }}
8
14
  </span>
@@ -19,11 +25,16 @@ const props = defineProps({
19
25
  },
20
26
  })
21
27
 
22
- const getMonthAndDayFromDate = computed(() => {
23
- const options = { month: 'short', day: '2-digit' }
28
+ const getMonth= computed(() => {
29
+ const options = { month: 'short'}
24
30
  return new Date(props.date)?.toLocaleString('default', options).replace('.', '')
25
31
  })
26
32
 
33
+ const getDay = computed(() => {
34
+ const options = { day: '2-digit' }
35
+ return new Date(props.date)?.toLocaleString('default', options)
36
+ })
37
+
27
38
  const getYearFromDate = computed(() => {
28
39
  return new Date(props.date)?.toLocaleString('default', { year: 'numeric' })
29
40
  })
@@ -23,11 +23,11 @@ const props = defineProps({
23
23
  'warning',
24
24
  'error',
25
25
  'default',
26
- 'solid-info',
27
- 'solid-success',
28
- 'solid-warning',
29
- 'solid-error',
30
- 'solid-default'
26
+ 'dark-info',
27
+ 'dark-success',
28
+ 'dark-warning',
29
+ 'dark-error',
30
+ 'dark-default'
31
31
  ].indexOf(value) !== -1,
32
32
  },
33
33
  /**
@@ -1,22 +1,24 @@
1
1
  <template>
2
- <div class="psui-el-testimonial">
2
+ <figure class="psui-el-testimonial">
3
3
  <div class="psui-el-testimonial-icon">
4
4
  <PsIcon
5
5
  icon="format_quote"
6
6
  size="40"
7
7
  color="psui-text-white"
8
+ tabindex="-1"
9
+ aria-hidden="true"
8
10
  display="flex"
9
11
  />
10
12
  </div>
11
- <p class="psui-el-testimonial-description">
13
+ <blockquote class="psui-el-testimonial-description">
12
14
  {{ description }}
13
- </p>
14
- <div class="psui-el-testimonial-info">
15
+ </blockquote>
16
+ <figcaption class="psui-el-testimonial-info">
15
17
  <span class="psui-el-testimonial-info-user">{{ user }}</span>
16
18
  <span class="psui-el-testimonial-info-position">{{ position }}</span>
17
19
  <span class="psui-el-testimonial-info-jurisdiction">{{ jurisdiction }}</span>
18
- </div>
19
- </div>
20
+ </figcaption>
21
+ </figure>
20
22
  </template>
21
23
 
22
24
  <script setup>