bfg-common 1.3.231 → 1.3.233

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 (75) hide show
  1. package/components/atoms/alert/Alert.vue +96 -95
  2. package/components/atoms/alert/Notification.vue +171 -170
  3. package/components/atoms/autocomplete/Autocomplete.vue +3 -0
  4. package/components/atoms/collapse/CollapseNav.vue +1 -1
  5. package/components/atoms/collapse/CollapseNavItem.vue +17 -13
  6. package/components/atoms/combobox/Combobox.vue +5 -0
  7. package/components/atoms/datepicker/Datepicker.vue +19 -1
  8. package/components/atoms/datepicker/lib/models/interfaces.ts +1 -0
  9. package/components/atoms/dropdown/Portlet.vue +10 -7
  10. package/components/atoms/dropdown/dropdown/Dropdown.vue +10 -2
  11. package/components/atoms/dropdown/dropdown/lib/models/interfaces.ts +1 -0
  12. package/components/atoms/dropdown/tree/Tree.vue +2 -0
  13. package/components/atoms/dropdown/tree/lib/models/interfaces.ts +1 -0
  14. package/components/atoms/lib/models/interfaces.ts +2 -0
  15. package/components/atoms/list/SelectList.vue +1 -0
  16. package/components/atoms/modal/Modal.vue +3 -0
  17. package/components/atoms/modal/bySteps/BySteps.vue +56 -51
  18. package/components/atoms/modal/byStepsSecond/ByStepsSecond.vue +10 -1
  19. package/components/atoms/nav/VerticalNavBar.vue +1 -0
  20. package/components/atoms/nav/lib/models/interfaces.ts +1 -0
  21. package/components/atoms/notificationBar/NotificationBar.vue +9 -1
  22. package/components/atoms/perPage/PerPage.vue +1 -0
  23. package/components/atoms/popover/Popover.vue +5 -1
  24. package/components/atoms/popup/SimplePopup.vue +1 -0
  25. package/components/atoms/select/TheSelect.vue +2 -0
  26. package/components/atoms/select/lib/models/interfaces.ts +1 -0
  27. package/components/atoms/stack/StackBlock.vue +3 -0
  28. package/components/atoms/step/VerticalStep.vue +1 -0
  29. package/components/atoms/switch/Switch.vue +111 -111
  30. package/components/atoms/table/compact/Compact.vue +526 -526
  31. package/components/atoms/table/dataGrid/DataGrid.vue +13 -1
  32. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +10 -2
  33. package/components/atoms/table/dataGrid/DataGridPage.vue +5 -0
  34. package/components/atoms/table/dataGrid/lib/models/interfaces.ts +2 -0
  35. package/components/atoms/table/simpleInfo/SimpleInfo.vue +7 -2
  36. package/components/atoms/table/simpleInfo/lib/models/interfaces.ts +1 -0
  37. package/components/atoms/table/simpleTable/SimpleTable.vue +5 -1
  38. package/components/atoms/table/simpleTable/lib/models/interfaces.ts +2 -0
  39. package/components/atoms/tabs/VerticalTabs.vue +1 -0
  40. package/components/atoms/tabs/lib/models/interfaces.ts +3 -2
  41. package/components/atoms/tooltip/Signpost.vue +226 -225
  42. package/components/atoms/wizard/Wizard.vue +5 -0
  43. package/components/atoms/wizard/step/Step.vue +1 -0
  44. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +4 -1
  45. package/components/common/mainNavigationPanel/lib/models/interfaces.ts +1 -0
  46. package/components/common/pages/Tasks.vue +120 -120
  47. package/components/common/recursionTree/RecursionTree.vue +203 -203
  48. package/components/common/tools/Actions.vue +2 -1
  49. package/components/common/tools/lib/models/interfaces.ts +1 -0
  50. package/components/common/vm/actions/add/Add.vue +575 -575
  51. package/components/common/vm/actions/clone/Clone.vue +518 -518
  52. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +269 -269
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +693 -693
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuModel.vue +220 -220
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +59 -59
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +294 -294
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +165 -165
  58. package/components/common/vm/actions/common/select/storage/lib/config/config.ts +166 -166
  59. package/components/common/vm/actions/editSettings/EditSettings.vue +313 -313
  60. package/components/common/weekSelect/WeekSelect.vue +112 -112
  61. package/components/common/weekSelect/lib/config/options.ts +10 -10
  62. package/composables/useAppVersion.ts +21 -21
  63. package/composables/useEnvLanguage.ts +20 -20
  64. package/lib/utils/sendTask.ts +72 -72
  65. package/minify.js +146 -146
  66. package/package.json +1 -1
  67. package/public/spice-console/application/codec.js +257 -257
  68. package/public/spice-console/lib/rasterEngine.js +907 -907
  69. package/public/spice-console/network/spicechannel.js +369 -369
  70. package/store/main/lib/interfaces.ts +9 -9
  71. package/store/tasks/actions.ts +133 -133
  72. package/store/tasks/getters.ts +25 -25
  73. package/store/tasks/lib/models/interfaces.ts +18 -18
  74. package/store/tasks/mutations.ts +58 -58
  75. package/store/tasks/state.ts +16 -16
@@ -1,95 +1,96 @@
1
- <template>
2
- <div :class="['alert', status]">
3
- <div class="alert-items">
4
- <slot v-if="$slots.headline" name="headline" :icon="iconName" />
5
-
6
- <slot name="body">
7
- <div v-for="(item, key) in items" :key="key" class="alert-item">
8
- <div v-if="!$slots.headline" class="alert-icon-wrapper">
9
- <atoms-the-icon
10
- :class="['alert-icon', iconName]"
11
- :name="iconName"
12
- />
13
- </div>
14
-
15
- <slot :item="item" :index="key">
16
- <span class="alert-text">{{ item }}</span>
17
- </slot>
18
- </div>
19
- </slot>
20
- </div>
21
- <button
22
- v-if="!hideCloseIcon"
23
- :id="`${props.testId}-close-button`"
24
- class="close"
25
- @click="removeAlert"
26
- >
27
- <atoms-the-icon class="alert-icon" name="close" />
28
- </button>
29
- </div>
30
- </template>
31
-
32
- <script setup lang="ts">
33
- import { UI_E_IconsByStatus } from '~/components/atoms/alert/lib/models/enums'
34
- import type {
35
- UI_T_AlertStatus,
36
- UI_T_AlertIcon,
37
- } from '~/components/atoms/alert/lib/models/types'
38
-
39
- const props = withDefaults(
40
- defineProps<{
41
- status: UI_T_AlertStatus
42
- items: string[] | any
43
- testId?: string
44
- hideCloseIcon?: boolean
45
- }>(),
46
- { testId: 'ui-alert' }
47
- )
48
- const emits = defineEmits<{
49
- (event: 'remove'): void
50
- }>()
51
-
52
- const removeAlert = (): void => {
53
- emits('remove')
54
- }
55
- const iconName = computed<UI_T_AlertIcon>(
56
- () => UI_E_IconsByStatus[props.status as UI_T_AlertStatus]
57
- )
58
- </script>
59
-
60
- <style scoped lang="scss">
61
- .alert {
62
- &-info {
63
- fill: #004d8a;
64
- }
65
- &-warning {
66
- background-color: var(--alert-warning-bg-color);
67
- border: 1px solid var(--alert-warning-border-color);
68
- fill: var(--alert-warning-icon-color);
69
- }
70
-
71
- &-icon {
72
- width: 20px;
73
- height: 20px;
74
- }
75
- &-text {
76
- color: var(--global-font-color5);
77
- }
78
-
79
- button.close:focus {
80
- box-shadow: none;
81
- }
82
- }
83
- </style>
84
- <style>
85
- :root {
86
- --alert-warning-icon-color: #d28f00;
87
- --alert-warning-bg-color: #fef3b5;
88
- --alert-warning-border-color: #d28f00;
89
- }
90
- :root.dark-theme {
91
- --alert-warning-icon-color: currentColor;
92
- --alert-warning-bg-color: #816709;
93
- --alert-warning-border-color: transparent;
94
- }
95
- </style>
1
+ <template>
2
+ <div :class="['alert', status]">
3
+ <div class="alert-items">
4
+ <slot v-if="$slots.headline" name="headline" :icon="iconName" />
5
+
6
+ <slot name="body">
7
+ <div v-for="(item, key) in items" :key="key" class="alert-item">
8
+ <div v-if="!$slots.headline" class="alert-icon-wrapper">
9
+ <atoms-the-icon
10
+ :class="['alert-icon', iconName]"
11
+ :name="iconName"
12
+ />
13
+ </div>
14
+
15
+ <slot :item="item" :index="key">
16
+ <span class="alert-text">{{ item }}</span>
17
+ </slot>
18
+ </div>
19
+ </slot>
20
+ </div>
21
+ <button
22
+ v-if="!hideCloseIcon"
23
+ :id="`${props.testId}-close-button`"
24
+ :data-id="`${props.testId}-close-button`"
25
+ class="close"
26
+ @click="removeAlert"
27
+ >
28
+ <atoms-the-icon class="alert-icon" name="close" />
29
+ </button>
30
+ </div>
31
+ </template>
32
+
33
+ <script setup lang="ts">
34
+ import { UI_E_IconsByStatus } from '~/components/atoms/alert/lib/models/enums'
35
+ import type {
36
+ UI_T_AlertStatus,
37
+ UI_T_AlertIcon,
38
+ } from '~/components/atoms/alert/lib/models/types'
39
+
40
+ const props = withDefaults(
41
+ defineProps<{
42
+ status: UI_T_AlertStatus
43
+ items: string[] | any
44
+ testId?: string
45
+ hideCloseIcon?: boolean
46
+ }>(),
47
+ { testId: 'ui-alert' }
48
+ )
49
+ const emits = defineEmits<{
50
+ (event: 'remove'): void
51
+ }>()
52
+
53
+ const removeAlert = (): void => {
54
+ emits('remove')
55
+ }
56
+ const iconName = computed<UI_T_AlertIcon>(
57
+ () => UI_E_IconsByStatus[props.status as UI_T_AlertStatus]
58
+ )
59
+ </script>
60
+
61
+ <style scoped lang="scss">
62
+ .alert {
63
+ &-info {
64
+ fill: #004d8a;
65
+ }
66
+ &-warning {
67
+ background-color: var(--alert-warning-bg-color);
68
+ border: 1px solid var(--alert-warning-border-color);
69
+ fill: var(--alert-warning-icon-color);
70
+ }
71
+
72
+ &-icon {
73
+ width: 20px;
74
+ height: 20px;
75
+ }
76
+ &-text {
77
+ color: var(--global-font-color5);
78
+ }
79
+
80
+ button.close:focus {
81
+ box-shadow: none;
82
+ }
83
+ }
84
+ </style>
85
+ <style>
86
+ :root {
87
+ --alert-warning-icon-color: #d28f00;
88
+ --alert-warning-bg-color: #fef3b5;
89
+ --alert-warning-border-color: #d28f00;
90
+ }
91
+ :root.dark-theme {
92
+ --alert-warning-icon-color: currentColor;
93
+ --alert-warning-bg-color: #816709;
94
+ --alert-warning-border-color: transparent;
95
+ }
96
+ </style>
@@ -1,170 +1,171 @@
1
- <template>
2
- <div class="notification">
3
- <div
4
- class="notification-container-wrap animation"
5
- :class="{ active: isActive }"
6
- >
7
- <div class="notification-container">
8
- <div v-show="props.show" class="toast">
9
- <atoms-the-icon
10
- class="toast-icon"
11
- :class="iconName !== 'info' && 'with'"
12
- :name="iconName"
13
- />
14
- <div class="toast-content">
15
- <div class="flex-align-center flex-space-between">
16
- <h4>{{ props.title }}</h4>
17
- <button
18
- :id="`${props.testId}-close-button`"
19
- :title="localization.closeNotification"
20
- @click="hide"
21
- >
22
- <atoms-the-icon name="close" />
23
- </button>
24
- </div>
25
- <div class="description">
26
- <slot>
27
- <p class="pre-line">{{ props.description }}</p>
28
- </slot>
29
- </div>
30
- </div>
31
- </div>
32
- </div>
33
- </div>
34
- </div>
35
- </template>
36
-
37
- <script setup lang="ts">
38
- import type { UI_I_Localization } from '~/lib/models/interfaces'
39
- import type {
40
- UI_T_NotificationStatus,
41
- UI_T_NotificationIcon,
42
- } from '~/components/atoms/alert/lib/models/types'
43
- import { UI_E_IconsByStatusNotification } from '~/components/atoms/alert/lib/models/enums'
44
-
45
- const props = withDefaults(
46
- defineProps<{
47
- status: UI_T_NotificationStatus
48
- id: number
49
- show: boolean
50
- title: string
51
- description: string
52
- testId?: string
53
- }>(),
54
- { testId: 'ui-notification' }
55
- )
56
- const emits = defineEmits<{
57
- (event: 'hide', value: number): void
58
- }>()
59
-
60
- const localization = computed<UI_I_Localization>(() => useLocal())
61
- const hide = (): void => {
62
- isActive.value = false
63
-
64
- setTimeout(() => {
65
- emits('hide', props.id)
66
- }, 200)
67
- }
68
- const isActive = ref<boolean>(false)
69
-
70
- const iconName = computed<UI_T_NotificationIcon>(
71
- () => UI_E_IconsByStatusNotification[props.status as UI_T_NotificationStatus]
72
- )
73
-
74
- setTimeout(() => {
75
- isActive.value = true
76
- }, 1000)
77
- </script>
78
-
79
- <style scoped lang="scss">
80
- @import '~/assets/scss/common/mixins.scss';
81
-
82
- .notification {
83
- .notification-container-wrap {
84
- display: block;
85
- margin-top: 10px;
86
- width: 414px;
87
- position: relative;
88
- right: -600px;
89
- opacity: 0;
90
-
91
- &.active {
92
- right: 0;
93
- opacity: 1;
94
- }
95
-
96
- .notification-container {
97
- @include flex($dir: column, $just: flex-end);
98
- margin-right: 0;
99
-
100
- .toast {
101
- @include flex($dir: row);
102
- background-color: #25333d;
103
- border-radius: 3px;
104
- box-shadow: 0 2px 10px rgb(0 0 0 / 40%);
105
- margin: 0;
106
- padding: 12px;
107
- transform: scale(1);
108
- transform-origin: 100% 0;
109
- width: 100%;
110
-
111
- .toast-icon {
112
- width: 36px;
113
- height: 36px;
114
- &.with {
115
- width: 26px;
116
- height: 26px;
117
- }
118
- }
119
-
120
- .toast-content {
121
- padding-left: 12px;
122
- width: 100%;
123
-
124
- h4 {
125
- color: #e9ecef;
126
- font-size: 14px;
127
- font-weight: 500;
128
- line-height: 24px;
129
- margin-top: 0;
130
- max-width: 240px;
131
- overflow: hidden;
132
- text-overflow: ellipsis;
133
- white-space: nowrap;
134
- }
135
-
136
- button {
137
- background: transparent;
138
- border: none;
139
- border-radius: 100%;
140
- cursor: pointer;
141
- display: inline-block;
142
- height: 30px;
143
- position: absolute;
144
- right: 8px;
145
- top: 8px;
146
- width: 30px;
147
-
148
- svg {
149
- width: 16px;
150
- height: 16px;
151
- fill: #adbbc4;
152
- margin-left: 1px;
153
- margin-top: -8px;
154
- }
155
- }
156
-
157
- .description {
158
- max-height: 60vh;
159
- overflow: auto;
160
-
161
- p {
162
- color: var(--global-font-color6);
163
- }
164
- }
165
- }
166
- }
167
- }
168
- }
169
- }
170
- </style>
1
+ <template>
2
+ <div class="notification">
3
+ <div
4
+ class="notification-container-wrap animation"
5
+ :class="{ active: isActive }"
6
+ >
7
+ <div class="notification-container">
8
+ <div v-show="props.show" class="toast">
9
+ <atoms-the-icon
10
+ class="toast-icon"
11
+ :class="iconName !== 'info' && 'with'"
12
+ :name="iconName"
13
+ />
14
+ <div class="toast-content">
15
+ <div class="flex-align-center flex-space-between">
16
+ <h4>{{ props.title }}</h4>
17
+ <button
18
+ :id="`${props.testId}-close-button`"
19
+ :data-id="`${props.testId}-close-button`"
20
+ :title="localization.closeNotification"
21
+ @click="hide"
22
+ >
23
+ <atoms-the-icon name="close" />
24
+ </button>
25
+ </div>
26
+ <div class="description">
27
+ <slot>
28
+ <p class="pre-line">{{ props.description }}</p>
29
+ </slot>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </template>
37
+
38
+ <script setup lang="ts">
39
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
40
+ import type {
41
+ UI_T_NotificationStatus,
42
+ UI_T_NotificationIcon,
43
+ } from '~/components/atoms/alert/lib/models/types'
44
+ import { UI_E_IconsByStatusNotification } from '~/components/atoms/alert/lib/models/enums'
45
+
46
+ const props = withDefaults(
47
+ defineProps<{
48
+ status: UI_T_NotificationStatus
49
+ id: number
50
+ show: boolean
51
+ title: string
52
+ description: string
53
+ testId?: string
54
+ }>(),
55
+ { testId: 'ui-notification' }
56
+ )
57
+ const emits = defineEmits<{
58
+ (event: 'hide', value: number): void
59
+ }>()
60
+
61
+ const localization = computed<UI_I_Localization>(() => useLocal())
62
+ const hide = (): void => {
63
+ isActive.value = false
64
+
65
+ setTimeout(() => {
66
+ emits('hide', props.id)
67
+ }, 200)
68
+ }
69
+ const isActive = ref<boolean>(false)
70
+
71
+ const iconName = computed<UI_T_NotificationIcon>(
72
+ () => UI_E_IconsByStatusNotification[props.status as UI_T_NotificationStatus]
73
+ )
74
+
75
+ setTimeout(() => {
76
+ isActive.value = true
77
+ }, 1000)
78
+ </script>
79
+
80
+ <style scoped lang="scss">
81
+ @import '~/assets/scss/common/mixins.scss';
82
+
83
+ .notification {
84
+ .notification-container-wrap {
85
+ display: block;
86
+ margin-top: 10px;
87
+ width: 414px;
88
+ position: relative;
89
+ right: -600px;
90
+ opacity: 0;
91
+
92
+ &.active {
93
+ right: 0;
94
+ opacity: 1;
95
+ }
96
+
97
+ .notification-container {
98
+ @include flex($dir: column, $just: flex-end);
99
+ margin-right: 0;
100
+
101
+ .toast {
102
+ @include flex($dir: row);
103
+ background-color: #25333d;
104
+ border-radius: 3px;
105
+ box-shadow: 0 2px 10px rgb(0 0 0 / 40%);
106
+ margin: 0;
107
+ padding: 12px;
108
+ transform: scale(1);
109
+ transform-origin: 100% 0;
110
+ width: 100%;
111
+
112
+ .toast-icon {
113
+ width: 36px;
114
+ height: 36px;
115
+ &.with {
116
+ width: 26px;
117
+ height: 26px;
118
+ }
119
+ }
120
+
121
+ .toast-content {
122
+ padding-left: 12px;
123
+ width: 100%;
124
+
125
+ h4 {
126
+ color: #e9ecef;
127
+ font-size: 14px;
128
+ font-weight: 500;
129
+ line-height: 24px;
130
+ margin-top: 0;
131
+ max-width: 240px;
132
+ overflow: hidden;
133
+ text-overflow: ellipsis;
134
+ white-space: nowrap;
135
+ }
136
+
137
+ button {
138
+ background: transparent;
139
+ border: none;
140
+ border-radius: 100%;
141
+ cursor: pointer;
142
+ display: inline-block;
143
+ height: 30px;
144
+ position: absolute;
145
+ right: 8px;
146
+ top: 8px;
147
+ width: 30px;
148
+
149
+ svg {
150
+ width: 16px;
151
+ height: 16px;
152
+ fill: #adbbc4;
153
+ margin-left: 1px;
154
+ margin-top: -8px;
155
+ }
156
+ }
157
+
158
+ .description {
159
+ max-height: 60vh;
160
+ overflow: auto;
161
+
162
+ p {
163
+ color: var(--global-font-color6);
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
170
+ }
171
+ </style>
@@ -19,6 +19,7 @@
19
19
  <input
20
20
  :id="`${props.testId}-search-input`"
21
21
  v-model.trim="search"
22
+ :data-id="`${props.testId}-search-input`"
22
23
  type="text"
23
24
  class="search-input"
24
25
  :placeholder="props.placeholder"
@@ -34,6 +35,7 @@
34
35
  v-for="(item, key) in items"
35
36
  :key="`${item}_${key}`"
36
37
  :class="['item', { active: key === selectedTabIndex }]"
38
+ :data-id="item.testId"
37
39
  @mouseenter="selectedTabIndex = key"
38
40
  @click="onSelect(key)"
39
41
  >
@@ -87,6 +89,7 @@ const items = computed<any[]>(() => {
87
89
  firstText: texts[0],
88
90
  secondText: term,
89
91
  thirdText: texts[1],
92
+ testId: `${term}-filtered-item`
90
93
  }
91
94
  })
92
95
  })
@@ -6,6 +6,7 @@
6
6
  'btn btn-link nav-link dropdown-toggle',
7
7
  { active: collapsedBtnActive },
8
8
  ]"
9
+ :data-id="`${props.testId}-toggle-button`"
9
10
  @mouseenter="hover = true"
10
11
  @mouseleave="hover = false"
11
12
  @mousedown="showMenu"
@@ -36,7 +37,6 @@
36
37
  ></div>
37
38
  <atoms-collapse-nav-item
38
39
  v-else
39
- :test-id="item.testId || collapsedBtnId"
40
40
  :is-link="props.isLink"
41
41
  :item="item"
42
42
  :value="value"
@@ -1,8 +1,13 @@
1
1
  <template>
2
2
  <div>
3
- <NuxtLink v-if="props.isLink" :to="props.item.path">
3
+ <NuxtLink
4
+ v-if="props.isLink"
5
+ :to="props.item.path"
6
+ :data-id="`${item.testId}-link`"
7
+ >
4
8
  <button
5
- :id="`${props.testId}-button`"
9
+ :id="`${item.testId}-button`"
10
+ :data-id="`${item.testId}-button`"
6
11
  :disabled="props.item.disabled"
7
12
  :class="[
8
13
  props.btnClass,
@@ -24,6 +29,7 @@
24
29
  </span>
25
30
  <input
26
31
  :id="`select-file-button-${props.item.type}`"
32
+ :data-id="`${item.testId}-button`"
27
33
  type="file"
28
34
  :disabled="props.item.disabled"
29
35
  :multiple="false"
@@ -33,7 +39,8 @@
33
39
  </label>
34
40
  <button
35
41
  v-else
36
- :id="`${props.testId}-button`"
42
+ :id="`${item.testId}-button`"
43
+ :data-id="`${item.testId}-button`"
37
44
  :disabled="props.item.disabled"
38
45
  :class="[
39
46
  props.btnClass,
@@ -56,16 +63,13 @@
56
63
  <script setup lang="ts">
57
64
  import { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
58
65
 
59
- const props = withDefaults(
60
- defineProps<{
61
- item: UI_I_CollapseNavItem
62
- testId?: string
63
- value?: number | string
64
- isLink?: boolean
65
- btnClass?: string
66
- }>(),
67
- { testId: 'ui-collapse-nav-item' }
68
- )
66
+ const props = defineProps<{
67
+ item: UI_I_CollapseNavItem
68
+ value?: number | string
69
+ isLink?: boolean
70
+ btnClass?: string
71
+ }>()
72
+
69
73
  const emits = defineEmits<{
70
74
  (event: 'change', value: number | string): void
71
75
  (event: 'select-file', value1: Event, value2: string): void
@@ -7,11 +7,13 @@
7
7
  v-show="!isOpen"
8
8
  class="angle-icon clr-icon"
9
9
  name="angle"
10
+ :data-id="`${props.testId}-open-icon`"
10
11
  @click="onFocusInput"
11
12
  />
12
13
  <input
13
14
  :id="id"
14
15
  v-model="modelValueLocal"
16
+ :data-id="`${props.testId}-search-input`"
15
17
  type="text"
16
18
  tabindex="-1"
17
19
  :disabled="props.disabled"
@@ -20,6 +22,7 @@
20
22
  />
21
23
  <atoms-the-icon
22
24
  v-show="isOpen"
25
+ :data-id="`${props.testId}-close-icon`"
23
26
  class="close-icon clr-icon"
24
27
  name="close-circle"
25
28
  @mousedown="clear"
@@ -31,6 +34,7 @@
31
34
  v-for="(item, key) in props.items"
32
35
  :key="key"
33
36
  :id="`${id}-${key}`"
37
+ :data-id="item.testId"
34
38
  class="btn btn-link dropdown-item"
35
39
  @mousedown="select(item.value)"
36
40
  >
@@ -48,6 +52,7 @@ const props = defineProps<{
48
52
  items: UI_I_OptionItem[]
49
53
  modelValue?: string | number
50
54
  disabled?: boolean
55
+ testId?: string
51
56
  }>()
52
57
  const emits = defineEmits<{
53
58
  (event: 'update:model-value', value: string | number): void