bfg-common 1.4.816 → 1.4.818

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.
@@ -1282,6 +1282,7 @@
1282
1282
  "schedulingAffinityHelpDescription2": "Выкарыстоўвайце '-' для дыяпазонаў і ',' для падзелу значэнняў. ",
1283
1283
  "schedulingAffinityHelpDescription3": "Ачысціце радок, каб выдаліць налады блізкасці.",
1284
1284
  "screenshotQualityMayVary": "Якасць скрыншота можа адрознівацца ў залежнасці ад зместу!",
1285
+ "imageQualityMayVary": "Якасць выявы можа мяняцца ў залежнасці ад зместу!",
1285
1286
  "scsi": "SCSI",
1286
1287
  "search": "Пошук",
1287
1288
  "searchDomains": "Пошукавыя дамены",
@@ -2310,7 +2311,9 @@
2310
2311
  "emailAddressOptional": "Адрас электроннай пошты (неабавязкова)",
2311
2312
  "permissionDeleteMsg": "Вы ўпэўненыя, што хочаце выдаліць дазвол для \"{subject}\"?",
2312
2313
  "editPermission": "Дазвол на рэдагаванне",
2313
- "userGroupNameIsInvalid": "Няправільнае імя карыстальніка ці групы!"
2314
+ "userGroupNameIsInvalid": "Няправільнае імя карыстальніка ці групы!",
2315
+ "submit": "Падпарадкоўвацца",
2316
+ "up": "Наверсе"
2314
2317
  },
2315
2318
  "auth": {
2316
2319
  "welcomeTo": "Сардэчна запрашаем у",
@@ -2937,5 +2940,31 @@
2937
2940
  "annotateScreenshot": "Анатаваць скрыншот",
2938
2941
  "annotateImage": "Анатаваць малюнак",
2939
2942
  "selectType": "Выберыце Тып"
2943
+ },
2944
+ "vsphereNa": {
2945
+ "vCenterHA": "vCenter ha",
2946
+ "setUpvSphereNa": "Наладзіць vsphere ha",
2947
+ "setUpvSphereNaDesc": "Каб забяспечыць максімальную абарону, пастаўце вузлы на асобныя хасты і сходы дадзеных. ",
2948
+ "spherePackageFile": "Файл пакета сферы",
2949
+ "selectSpherePackageFile": "Выберыце файл пакета сферы",
2950
+ "numberOfNodes": "Колькасць вузлоў:",
2951
+ "selectHost": "Выберыце хост",
2952
+ "setAsLeader": "Усталяваны ў якасці лідэра",
2953
+ "standalone": "Паласны",
2954
+ "clusterNodes": "Кластарныя вузлы",
2955
+ "leaderRoleConfirmation": "Пацверджанне ролі лідэра",
2956
+ "leaderRoleConfirmationDesc": "Вы ўпэўнены, што хочаце ўсталяваць вузел \"{node}\" у якасці лідэра? ",
2957
+ "standaloneConfirmation": "Аўтаномнае пацверджанне",
2958
+ "standaloneConfirmationDesc": "Усе дадзеныя сферы на вузле \"{node}\" будуць канчаткова выдалены. ",
2959
+ "proceed": "Працягваць",
2960
+ "removeConfirmation": "Зніміце пацверджанне",
2961
+ "removeConfirmationDesc": "вы ўпэўненыя, што хочаце выдаліць вузел \"{node}\" з кластара? адзначце \"{node}\" у полі ніжэй для пацверджання",
2962
+ "nodeIPAddress": "IP -адрас вузла",
2963
+ "nodeIPAddressInvalidText": "Няправільнае пацверджанне. Калі ласка, увядзіце \" {node}\", каб працягнуць.",
2964
+ "addNode": "Дадаць вузел",
2965
+ "hostHelp": "Хост дапамогі",
2966
+ "hostHelpTooltipContent": "Выберыце мэтавы вылічаны рэсурс для гэтай аперацыі. ",
2967
+ "selectValidHostComputeResource": "Выберыце сапраўдны хост у якасці вылічальнага рэсурсу",
2968
+ "syncData": "Дадзеныя сінхранізацыі"
2940
2969
  }
2941
2970
  }
@@ -1281,6 +1281,7 @@
1281
1281
  "schedulingAffinityHelpDescription2": "Use '-' for ranges and ',' to separate values. For example, \"0, 2, 4-7\" would indicate processors 0, 2, 4, 5, 6 and 7.",
1282
1282
  "schedulingAffinityHelpDescription3": "Clear the string to remove affinity settings.",
1283
1283
  "screenshotQualityMayVary": "Screenshot quality may vary based on the content!",
1284
+ "imageQualityMayVary": "Image quality may vary based on the content!",
1284
1285
  "scsi": "SCSI",
1285
1286
  "search": "Search",
1286
1287
  "searchDomains": "Search domains",
@@ -2314,7 +2315,9 @@
2314
2315
  "emailAddressOptional": "Email Address (Optional)",
2315
2316
  "permissionDeleteMsg": "Are you sure you want to remove the permission for \"{subject}\"?",
2316
2317
  "editPermission": "Edit Permission",
2317
- "userGroupNameIsInvalid": "User or group name is invalid!"
2318
+ "userGroupNameIsInvalid": "User or group name is invalid!",
2319
+ "submit": "Submit",
2320
+ "up": "Up"
2318
2321
  },
2319
2322
  "auth": {
2320
2323
  "welcomeTo": "Welcome to",
@@ -2941,5 +2944,31 @@
2941
2944
  "annotateScreenshot": "Annotate Screenshot",
2942
2945
  "annotateImage": "Annotate Image",
2943
2946
  "selectType": "Select Type"
2947
+ },
2948
+ "vsphereNa": {
2949
+ "vCenterHA": "vCenter HA",
2950
+ "setUpvSphereNa": "Set Up vSphere HA",
2951
+ "setUpvSphereNaDesc": "To ensure maximum protection, place the nodes on separate hosts and datastores. If they are placed within the same compute cluster with DRS and/or SDRS enabled in automatic mode, anti-affinity rules will be automatically applied to keep them separate. For optimal performance, maintain network latency between the nodes at 10 ms or less.",
2952
+ "spherePackageFile": "Sphere Package File",
2953
+ "selectSpherePackageFile": "Select Sphere package file",
2954
+ "numberOfNodes": "Number of Nodes:",
2955
+ "selectHost": "Select Host",
2956
+ "setAsLeader": "Set as Leader",
2957
+ "standalone": "Standalone",
2958
+ "clusterNodes": "Cluster Nodes",
2959
+ "leaderRoleConfirmation": "Leader Role Confirmation",
2960
+ "leaderRoleConfirmationDesc": "Are you sure you want to set the node “{node}” as a leader? This action will assign leadership responsibilities to this node, which may impact current setup.",
2961
+ "standaloneConfirmation": "Standalone Confirmation",
2962
+ "standaloneConfirmationDesc": "All Sphere data on the node “{node}” will be permanently deleted. The node will restart and operate independently from the cluster. Are you sure you want to proceed?",
2963
+ "proceed": "Proceed",
2964
+ "removeConfirmation": "Remove Confirmation",
2965
+ "removeConfirmationDesc": "Are you sure you want to remove the node “{node}” from cluster? To confirm, type “{node}” in the field below.",
2966
+ "nodeIPAddress": "Node IP Address",
2967
+ "nodeIPAddressInvalidText": "Incorrect confirmation. Please type “{node}” to proceed.",
2968
+ "addNode": "Add Node",
2969
+ "hostHelp": "Host Help",
2970
+ "hostHelpTooltipContent": "Select the target compute resource for this operation. Each node must have a unique host.",
2971
+ "selectValidHostComputeResource": "Select a valid host as the compute resource",
2972
+ "syncData": "Sync Data"
2944
2973
  }
2945
2974
  }
@@ -1281,6 +1281,7 @@
1281
1281
  "schedulingAffinityHelpDescription2": "Օգտագործեք ' - 'տիրույթների համար և', ' արժեքները բաժանելու համար: Օրինակ, \"0, 2, 4-7\" - ը կնշանակեր 0, 2, 4, 5, 6 և 7 պրոցեսորներ:",
1282
1282
  "schedulingAffinityHelpDescription3": "Մաքրել գիծը՝ կապակցման կարգավորումները հեռացնելու համար:",
1283
1283
  "screenshotQualityMayVary": "Սքրինշոթի որակը կարող է տարբերվել՝ կախված բովանդակությունից:",
1284
+ "imageQualityMayVary": "Պատկերի որակը կարող է տարբեր լինել բովանդակության հիման վրա:",
1284
1285
  "scsi": "SCSI",
1285
1286
  "search": "Որոնում",
1286
1287
  "searchDomains": "Որոնման տիրույթներ",
@@ -2314,7 +2315,9 @@
2314
2315
  "emailAddressOptional": "Էլ.փոստի հասցե (ըստ ցանկության)",
2315
2316
  "permissionDeleteMsg": "Համոզվա՞ծ եք, որ ցանկանում եք հեռացնել թույլտվությունը \"{subject}\"-ի համար:",
2316
2317
  "editPermission": "Խմբագրել թույլտվությունը",
2317
- "userGroupNameIsInvalid": "Սխալ օգտվողի անուն կամ խումբ"
2318
+ "userGroupNameIsInvalid": "Սխալ օգտվողի անուն կամ խումբ",
2319
+ "submit": "Ներկայացնել",
2320
+ "up": "Վեր"
2318
2321
  },
2319
2322
  "auth": {
2320
2323
  "welcomeTo": "Բարի գալուստ",
@@ -2941,5 +2944,31 @@
2941
2944
  "annotateScreenshot": "Նշել սքրինշոթը",
2942
2945
  "annotateImage": "Նշել պատկերը",
2943
2946
  "selectType": "Ընտրեք տեսակը"
2947
+ },
2948
+ "vsphereNa": {
2949
+ "vCenterHA": "vCenter հա",
2950
+ "setUpvSphereNa": "Ստեղծեք vsphere հա",
2951
+ "setUpvSphereNaDesc": "Առավելագույն պաշտպանություն ապահովելու համար հանգույցները տեղադրեք առանձին տանտերերի եւ տվյալների շտեմարանների վրա: ",
2952
+ "spherePackageFile": "Ոլորտի փաթեթի ֆայլ",
2953
+ "selectSpherePackageFile": "Ընտրեք ոլորտի փաթեթի ֆայլը",
2954
+ "numberOfNodes": "Հանգույցների քանակը.",
2955
+ "selectHost": "Ընտրեք հյուրընկալողը",
2956
+ "setAsLeader": "Սահմանել որպես առաջնորդ",
2957
+ "standalone": "Ինքնաբերական",
2958
+ "clusterNodes": "Կլաստերի հանգույցներ",
2959
+ "leaderRoleConfirmation": "Առաջնորդի դերի հաստատում",
2960
+ "leaderRoleConfirmationDesc": "Համոզված եք, որ ցանկանում եք «{node}» հանգույցը դնել որպես առաջնորդ: ",
2961
+ "standaloneConfirmation": "Անկախ հաստատում",
2962
+ "standaloneConfirmationDesc": "«{node}» հանգույցի բոլոր ոլորտային տվյալները մշտապես կջնջվեն: ",
2963
+ "proceed": "Վարել",
2964
+ "removeConfirmation": "Հեռացրեք հաստատումը",
2965
+ "removeConfirmationDesc": "համոզված եք, որ ցանկանում եք հեռացնել , «{node}» հանգույցը կլաստերից: Հաստատելու համար ներքևի դաշտում մուտքագրեք «{node}»:",
2966
+ "nodeIPAddress": "NODE IP հասցե",
2967
+ "nodeIPAddressInvalidText": "Սխալ հաստատում: Շարունակելու համար մուտքագրեք \"{node}\":",
2968
+ "addNode": "Ավելացնել հանգույց",
2969
+ "hostHelp": "Հյուրընկալող օգնություն",
2970
+ "hostHelpTooltipContent": "Ընտրեք թիրախային հաշվարկային ռեսուրսը այս գործողության համար: ",
2971
+ "selectValidHostComputeResource": "Ընտրեք վավեր հյուրընկալող որպես հաշվարկային ռեսուրս",
2972
+ "syncData": "Համաժամացման տվյալներ"
2944
2973
  }
2945
2974
  }
@@ -1281,6 +1281,7 @@
1281
1281
  "schedulingAffinityHelpDescription2": "Ауқымдар үшін '-' және мәндерді бөлу үшін ',' пайдаланыңыз. ",
1282
1282
  "schedulingAffinityHelpDescription3": "Сәйкестік параметрлерін жою үшін жолды тазалаңыз.",
1283
1283
  "screenshotQualityMayVary": "Скриншоттың сапасы мазмұнға байланысты өзгеруі мүмкін!",
1284
+ "imageQualityMayVary": "Мазмұнға байланысты кескін сапасы әр түрлі болуы мүмкін!",
1284
1285
  "scsi": "SCSI",
1285
1286
  "search": "Іздеу",
1286
1287
  "searchDomains": "Іздеу домендері",
@@ -2313,7 +2314,9 @@
2313
2314
  "emailAddressOptional": "Электрондық пошта мекенжайы (міндетті емес)",
2314
2315
  "permissionDeleteMsg": "\"{subject}\" рұқсатын алып тастағыңыз келетініне сенімдісіз бе?",
2315
2316
  "editPermission": "Рұқсатты Өңдеу",
2316
- "userGroupNameIsInvalid": "Пайдаланушы немесе топ атауы жарамсыз!"
2317
+ "userGroupNameIsInvalid": "Пайдаланушы немесе топ атауы жарамсыз!",
2318
+ "submit": "Бағыну",
2319
+ "up": "Бойымен"
2317
2320
  },
2318
2321
  "auth": {
2319
2322
  "welcomeTo": "Қош келдіңіз",
@@ -2940,5 +2943,31 @@
2940
2943
  "annotateScreenshot": "Скриншотқа түсініктеме жазу",
2941
2944
  "annotateImage": "Суретке түсініктеме жазу",
2942
2945
  "selectType": "Түрді таңдаңыз"
2946
+ },
2947
+ "vsphereNa": {
2948
+ "vCenterHA": "vCenter ha",
2949
+ "setUpvSphereNa": "Vsphere ha",
2950
+ "setUpvSphereNaDesc": "Максималды қорғауды қамтамасыз ету үшін түйіндерді бөлек хосттар мен деректер базаларына салыңыз. ",
2951
+ "spherePackageFile": "Сфера пакетіне арналған файл",
2952
+ "selectSpherePackageFile": "Сфера пакетін таңдаңыз",
2953
+ "numberOfNodes": "Түйіндердің саны:",
2954
+ "selectHost": "Хостты таңдаңыз",
2955
+ "setAsLeader": "Көшбасшы ретінде орнатыңыз",
2956
+ "standalone": "Оқшаулағы",
2957
+ "clusterNodes": "Кластерлік түйіндер",
2958
+ "leaderRoleConfirmation": "Көшбасшы рөлді растау",
2959
+ "leaderRoleConfirmationDesc": "«{node}» түйінін көшбасшы ретінде орнатқыңыз келе ме? ",
2960
+ "standaloneConfirmation": "Жеке растау",
2961
+ "standaloneConfirmationDesc": "«{node}» түйініндегі барлық сфера деректері біржола жойылады. ",
2962
+ "proceed": "Жалғастыру",
2963
+ "removeConfirmation": "Растауды жойыңыз",
2964
+ "removeConfirmationDesc": "«{node}» түйінін кластерден шығарғыңыз келе ме? ",
2965
+ "nodeIPAddress": "IP мекенжайы",
2966
+ "nodeIPAddressInvalidText": "Дұрыс емес растау. ",
2967
+ "addNode": "Түйінді қосыңыз",
2968
+ "hostHelp": "Хосттық көмек",
2969
+ "hostHelpTooltipContent": "Осы жұмыс үшін мақсатты есептеу қорын таңдаңыз. ",
2970
+ "selectValidHostComputeResource": "Жарамды хостты есептік ресурс ретінде таңдаңыз",
2971
+ "syncData": "Деректерді синхрондау"
2943
2972
  }
2944
2973
  }
@@ -1283,6 +1283,7 @@
1283
1283
  "schedulingAffinityHelpDescription2": "Используйте '-' для диапазонов и ',' для разделения значений. Например, \"0, 2, 4-7\" будет обозначать процессоры 0, 2, 4, 5, 6 и 7.",
1284
1284
  "schedulingAffinityHelpDescription3": "Очистите строку, чтобы удалить настройки сходства.",
1285
1285
  "screenshotQualityMayVary": "Качество скриншота может варьироваться в зависимости от контента!",
1286
+ "imageQualityMayVary": "Качество изображения может варьироваться в зависимости от контента!",
1286
1287
  "scsi": "SCSI",
1287
1288
  "search": "Поиск",
1288
1289
  "searchDomains": "Поисковые домены",
@@ -2315,7 +2316,9 @@
2315
2316
  "emailAddressOptional": "Адрес электронной почты (необязательно)",
2316
2317
  "permissionDeleteMsg": "Вы уверены, что хотите удалить разрешение для \"{subject}\"?",
2317
2318
  "editPermission": "Редактирование разрешения",
2318
- "userGroupNameIsInvalid": "Неверное имя пользователя или группы!"
2319
+ "userGroupNameIsInvalid": "Неверное имя пользователя или группы!",
2320
+ "submit": "Представлять на рассмотрение",
2321
+ "up": "Вверх"
2319
2322
  },
2320
2323
  "auth": {
2321
2324
  "welcomeTo": "Добро пожаловать в",
@@ -2942,5 +2945,31 @@
2942
2945
  "annotateScreenshot": "Аннотировать снимок экрана",
2943
2946
  "annotateImage": "Аннотировать изображение",
2944
2947
  "selectType": "Выберите тип"
2948
+ },
2949
+ "vsphereNa": {
2950
+ "vCenterHA": "vCenter ха",
2951
+ "setUpvSphereNa": "Установите vsphere ha",
2952
+ "setUpvSphereNaDesc": "Чтобы обеспечить максимальную защиту, поместите узлы на отдельные хосты и данные данных. ",
2953
+ "spherePackageFile": "Файл пакета сферы",
2954
+ "selectSpherePackageFile": "Выберите файл пакета сферов",
2955
+ "numberOfNodes": "Количество узлов:",
2956
+ "selectHost": "Выберите хост",
2957
+ "setAsLeader": "Установить как лидер",
2958
+ "standalone": "Автономный",
2959
+ "clusterNodes": "Кластерные узлы",
2960
+ "leaderRoleConfirmation": "Подтверждение роли лидера",
2961
+ "leaderRoleConfirmationDesc": "Вы уверены, что хотите установить узел «{node}» в качестве лидера? ",
2962
+ "standaloneConfirmation": "Автономное подтверждение",
2963
+ "standaloneConfirmationDesc": "Все данные сферы на узле «{node}» будут навсегда удалены. ",
2964
+ "proceed": "Продолжить",
2965
+ "removeConfirmation": "Удалить подтверждение",
2966
+ "removeConfirmationDesc": "Вы уверены, что хотите удалить узел “{node}” из кластера? Для подтверждения введите “{node}” в поле ниже.",
2967
+ "nodeIPAddress": "IP -адрес узла",
2968
+ "nodeIPAddressInvalidText": "Неверное подтверждение. Пожалуйста, введите “{node}”, чтобы продолжить.",
2969
+ "addNode": "Добавить узел",
2970
+ "hostHelp": "Хозяева",
2971
+ "hostHelpTooltipContent": "Выберите целевой вычислительный ресурс для этой операции. ",
2972
+ "selectValidHostComputeResource": "Выберите действительный хост в качестве ресурса вычисления",
2973
+ "syncData": "Синхронизированные данные"
2945
2974
  }
2946
2975
  }
@@ -1281,6 +1281,7 @@
1281
1281
  "schedulingAffinityHelpDescription2": "使用“-”表示范围,使用“,”分隔值。",
1282
1282
  "schedulingAffinityHelpDescription3": "清除该行以删除关联设置。",
1283
1283
  "screenshotQualityMayVary": "屏幕截圖質量可能因內容而異!",
1284
+ "imageQualityMayVary": "图像质量可能会因内容而异!",
1284
1285
  "scsi": "SCSI接口",
1285
1286
  "search": "搜索",
1286
1287
  "searchDomains": "搜索域名",
@@ -2312,7 +2313,9 @@
2312
2313
  "emailAddressOptional": "电子邮件地址(可选)",
2313
2314
  "permissionDeleteMsg": "您确定要删除\"{subject}\"的权限吗?",
2314
2315
  "editPermission": "编辑权限",
2315
- "userGroupNameIsInvalid": "用户或组名无效!"
2316
+ "userGroupNameIsInvalid": "用户或组名无效!",
2317
+ "submit": "提交",
2318
+ "up": "向上"
2316
2319
  },
2317
2320
  "auth": {
2318
2321
  "welcomeTo": "欢迎来到",
@@ -2939,5 +2942,31 @@
2939
2942
  "annotateScreenshot": "注释屏幕截图",
2940
2943
  "annotateImage": "注释图像",
2941
2944
  "selectType": "选择类型"
2945
+ },
2946
+ "vsphereNa": {
2947
+ "vCenterHA": "vcenter ha",
2948
+ "setUpvSphereNa": "设置vsphere ha",
2949
+ "setUpvSphereNaDesc": "为了确保最大程度的保护,请将节点放在单独的主机和数据存储上。",
2950
+ "spherePackageFile": "Sphere软件包文件",
2951
+ "selectSpherePackageFile": "选择球形包装文件",
2952
+ "numberOfNodes": "节点数:",
2953
+ "selectHost": "选择主机",
2954
+ "setAsLeader": "设置为领导者",
2955
+ "standalone": "独立",
2956
+ "clusterNodes": "群集节点",
2957
+ "leaderRoleConfirmation": "领导角色确认",
2958
+ "leaderRoleConfirmationDesc": "您确定要将节点“ {node}”设置为领导者?",
2959
+ "standaloneConfirmation": "独立确认",
2960
+ "standaloneConfirmationDesc": "节点“ {node}”上的所有领域数据将被永久删除。",
2961
+ "proceed": "继续",
2962
+ "removeConfirmation": "删除确认",
2963
+ "removeConfirmationDesc": "您确定要从群集中删除节点“ {node}”?",
2964
+ "nodeIPAddress": "节点IP地址",
2965
+ "nodeIPAddressInvalidText": "不正确的确认。 请输入\"{node}\"继续。",
2966
+ "addNode": "添加节点",
2967
+ "hostHelp": "主持人帮助",
2968
+ "hostHelpTooltipContent": "为此操作选择目标计算资源。",
2969
+ "selectValidHostComputeResource": "选择有效主机作为计算资源",
2970
+ "syncData": "同步数据"
2942
2971
  }
2943
2972
  }
@@ -1,298 +1,300 @@
1
- <template>
2
- <div class="autocomplete" @click.stop>
3
- <div class="content-search">
4
- <div v-show="props.loading" class="loader">
5
- <atoms-loader-pre-loader
6
- id="loader"
7
- :test-id="`${props.testId}-pre-loader`"
8
- class="content-area__loading"
9
- :show="true"
10
- />
11
- </div>
12
- <div class="search-icon">
13
- <atoms-the-icon
14
- fill="#666"
15
- stroke-width="10"
16
- class="alert-icon search-icon"
17
- name="search"
18
- />
19
- </div>
20
-
21
- <div class="clr-error">
22
- <div class="form-group__input">
23
- <input
24
- :id="`${props.testId}-search-input`"
25
- v-model.trim="search"
26
- :data-id="`${props.testId}-search-input`"
27
- type="text"
28
- class="search-input"
29
- :class="fieldErrorText && 'clr-input'"
30
- autocomplete="off"
31
- :placeholder="props.placeholder"
32
- @blur="onInitValidation"
33
- @input="onSearch"
34
- />
35
- <div v-show="fieldErrorText" class="form-validate">
36
- <atoms-the-icon class="is-error tooltip-trigger" name="info" />
37
- </div>
38
- </div>
39
- <div
40
- v-show="fieldErrorText"
41
- class="form-group__input-error clr-subtext"
42
- >
43
- {{ fieldErrorText }}
44
- </div>
45
- </div>
46
- </div>
47
- <div
48
- v-show="isShow"
49
- :class="['content-filtered', { active: items.length }]"
50
- >
51
- <ul class="dropdown-menu filtered-items">
52
- <li
53
- v-for="(item, key) in items"
54
- :key="`${item}_${key}`"
55
- :class="['item', { active: key === selectedTabIndex }]"
56
- :data-id="item.testId"
57
- @mouseenter="selectedTabIndex = key"
58
- @click="onSelect(key)"
59
- >
60
- {{ item.firstText }}<b>{{ item.secondText }}</b
61
- >{{ item.thirdText }}
62
- </li>
63
- </ul>
64
- </div>
65
- </div>
66
- </template>
67
-
68
- <script setup lang="ts">
69
- import type { UI_I_Localization } from '~/lib/models/interfaces'
70
-
71
- const props = withDefaults(
72
- defineProps<{
73
- placeholder: string
74
- items: string[]
75
- loading?: boolean
76
- testId?: string
77
- ms?: number
78
- showValidation?: boolean
79
- }>(),
80
- {
81
- testId: 'ui-autocomplete',
82
- ms: 500,
83
- loading: false,
84
- showValidation: false,
85
- }
86
- )
87
- const emits = defineEmits<{
88
- (event: 'search', value: string): void
89
- (event: 'select', value: string): void
90
- }>()
91
-
92
- const localization = computed<UI_I_Localization>(() => useLocal())
93
-
94
- const search = ref<string>('')
95
-
96
- let timer: NodeJS.Timeout
97
- const onSearch = (): void => {
98
- onInitValidation()
99
- clearTimeout(timer)
100
- timer = setTimeout(
101
- (value) => {
102
- emits('search', value)
103
- },
104
- props.ms,
105
- search.value
106
- )
107
- }
108
- const isInitFieldValidation = ref<boolean>(false)
109
- const onInitValidation = (): void => {
110
- isInitFieldValidation.value = true
111
- }
112
- const fieldErrorText = computed<string>(() => {
113
- if (!isInitFieldValidation.value) return ''
114
-
115
- if (!search.value && props.showValidation)
116
- return localization.value.common.fieldRequired
117
- })
118
- const items = computed<any[]>(() => {
119
- return [...props.items].map((text) => {
120
- const term = search.value.toLowerCase()
121
- const texts = text.toLowerCase().split(term)
122
- return {
123
- firstText: texts[0],
124
- secondText: term,
125
- thirdText: texts[1],
126
- testId: `${term}-filtered-item`,
127
- }
128
- })
129
- })
130
-
131
- const selectedTabIndex = ref<number>(0)
132
- const onSelect = (key: number): void => {
133
- search.value = props.items[key]
134
- emits('select', search.value)
135
- isHide.value = true
136
- }
137
-
138
- const isHide = ref<boolean>(false)
139
- const isShow = computed<boolean>(
140
- () => Boolean(items.value.length) && !isHide.value
141
- )
142
-
143
- const onKeyDown = (event: KeyboardEvent): void => {
144
- switch (event.code) {
145
- case 'ArrowUp':
146
- prevTabItem()
147
- break
148
- case 'ArrowDown':
149
- nextTabItem()
150
- break
151
- case 'Enter':
152
- event.preventDefault()
153
- onSelect(selectedTabIndex.value)
154
- break
155
- case 'Tab':
156
- isHide.value = true
157
- break
158
- }
159
- }
160
-
161
- const nextTabItem = (): void => {
162
- if (selectedTabIndex.value === items.value.length - 1)
163
- selectedTabIndex.value = 0
164
- else selectedTabIndex.value++
165
- }
166
-
167
- const prevTabItem = (): void => {
168
- if (selectedTabIndex.value === 0)
169
- selectedTabIndex.value = items.value.length - 1
170
- else selectedTabIndex.value--
171
- }
172
-
173
- watch(
174
- () => props.items,
175
- (newValue) => {
176
- if (newValue.length) {
177
- isHide.value = false
178
- }
179
- }
180
- )
181
- window.addEventListener('keydown', onKeyDown, true)
182
- watch(isHide, (newValue) => {
183
- if (!newValue) {
184
- window.addEventListener('keydown', onKeyDown, true)
185
- } else {
186
- window.removeEventListener('keydown', onKeyDown, true)
187
- }
188
- })
189
- watch(
190
- () => props.showValidation,
191
- (newValue: boolean) => {
192
- isInitFieldValidation.value = newValue
193
- },
194
- { immediate: true }
195
- )
196
- </script>
197
-
198
- <style scoped lang="scss">
199
- .autocomplete {
200
- max-width: 180px;
201
- position: relative;
202
-
203
- .content-search {
204
- .loader {
205
- position: absolute;
206
- top: 3px;
207
- left: -6px;
208
- z-index: 1;
209
- height: 16px;
210
- width: 16px;
211
-
212
- #loader {
213
- height: 100%;
214
- width: 100%;
215
-
216
- :deep(.spinner-inverse) {
217
- min-width: auto;
218
- min-height: auto;
219
- width: 100%;
220
- height: 100%;
221
- }
222
- }
223
- }
224
- .search-icon {
225
- position: absolute;
226
- width: 17px;
227
- top: 2px;
228
- bottom: 0;
229
- }
230
- .search-input {
231
- background-color: white;
232
- padding: 0 6px 0 20px;
233
- }
234
- }
235
-
236
- .content-filtered {
237
- position: absolute;
238
- display: block;
239
- overflow-y: visible;
240
- height: auto;
241
- visibility: visible;
242
- will-change: transform;
243
- top: 0;
244
- left: 0;
245
- transform: translate3d(0px, 25px, 0px);
246
- width: 250px;
247
- z-index: 1000;
248
-
249
- &.active .filtered-items {
250
- max-height: 164px;
251
- visibility: visible;
252
- position: absolute;
253
- top: 100%;
254
- left: 0;
255
- min-width: 96px;
256
- max-width: 288px;
257
- border: 0.8px solid #ccc;
258
- padding: 9.6px 0;
259
- z-index: 1060;
260
- overflow: auto;
261
- width: 100%;
262
- margin: 1px 0 0;
263
-
264
- .item {
265
- line-height: 20px;
266
- padding: 5px 0 0 5px;
267
- color: #333;
268
- cursor: pointer;
269
- outline: unset;
270
-
271
- &.active,
272
- &:focus,
273
- &:hover {
274
- background-color: #2b5480;
275
- color: #fff;
276
- }
277
- }
278
- }
279
- }
280
- .form-group {
281
- &__input {
282
- display: flex;
283
- .form-validate {
284
- svg {
285
- width: 24px;
286
- height: 24px;
287
- }
288
- }
289
- input {
290
- width: 100%;
291
- }
292
- &-error {
293
- margin-top: 0;
294
- }
295
- }
296
- }
297
- }
298
- </style>
1
+ <template>
2
+ <div class="autocomplete" @click.stop>
3
+ <div class="content-search">
4
+ <div v-show="props.loading" class="loader">
5
+ <atoms-loader-pre-loader
6
+ id="loader"
7
+ :test-id="`${props.testId}-pre-loader`"
8
+ class="content-area__loading"
9
+ :show="true"
10
+ />
11
+ </div>
12
+ <div class="search-icon">
13
+ <atoms-the-icon
14
+ fill="#666"
15
+ stroke-width="10"
16
+ class="alert-icon search-icon"
17
+ name="search"
18
+ />
19
+ </div>
20
+
21
+ <div class="clr-error">
22
+ <div class="form-group__input">
23
+ <input
24
+ :id="`${props.testId}-search-input`"
25
+ v-model.trim="search"
26
+ :data-id="`${props.testId}-search-input`"
27
+ type="text"
28
+ class="search-input"
29
+ :class="fieldErrorText && 'clr-input'"
30
+ autocomplete="off"
31
+ :placeholder="props.placeholder"
32
+ @blur="onInitValidation"
33
+ @input="onSearch"
34
+ />
35
+ <div v-show="fieldErrorText" class="form-validate">
36
+ <atoms-the-icon class="is-error tooltip-trigger" name="info" />
37
+ </div>
38
+ </div>
39
+ <div
40
+ v-show="fieldErrorText"
41
+ class="form-group__input-error clr-subtext"
42
+ >
43
+ {{ fieldErrorText }}
44
+ </div>
45
+ </div>
46
+ </div>
47
+ <div
48
+ v-show="isShow"
49
+ :class="['content-filtered', { active: items.length }]"
50
+ >
51
+ <ul class="dropdown-menu filtered-items">
52
+ <li
53
+ v-for="(item, key) in items"
54
+ :key="`${item}_${key}`"
55
+ :class="['item', { active: key === selectedTabIndex }]"
56
+ :data-id="item.testId"
57
+ @mouseenter="selectedTabIndex = key"
58
+ @click="onSelect(key)"
59
+ >
60
+ {{ item.firstText }}<b>{{ item.secondText }}</b
61
+ >{{ item.thirdText }}
62
+ </li>
63
+ </ul>
64
+ </div>
65
+ </div>
66
+ </template>
67
+
68
+ <script setup lang="ts">
69
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
70
+
71
+ const props = withDefaults(
72
+ defineProps<{
73
+ placeholder: string
74
+ items: string[]
75
+ loading?: boolean
76
+ testId?: string
77
+ ms?: number
78
+ showValidation?: boolean
79
+ errorText?: string
80
+ }>(),
81
+ {
82
+ testId: 'ui-autocomplete',
83
+ ms: 500,
84
+ loading: false,
85
+ showValidation: false,
86
+ errorText: '',
87
+ }
88
+ )
89
+ const emits = defineEmits<{
90
+ (event: 'search', value: string): void
91
+ (event: 'select', value: string): void
92
+ }>()
93
+
94
+ const localization = computed<UI_I_Localization>(() => useLocal())
95
+
96
+ const search = ref<string>('')
97
+
98
+ let timer: NodeJS.Timeout
99
+ const onSearch = (): void => {
100
+ onInitValidation()
101
+ clearTimeout(timer)
102
+ timer = setTimeout(
103
+ (value) => {
104
+ emits('search', value)
105
+ },
106
+ props.ms,
107
+ search.value
108
+ )
109
+ }
110
+ const isInitFieldValidation = ref<boolean>(false)
111
+ const onInitValidation = (): void => {
112
+ isInitFieldValidation.value = true
113
+ }
114
+ const fieldErrorText = computed<string>(() => {
115
+ if (!isInitFieldValidation.value) return ''
116
+
117
+ if (!search.value) return localization.value.common.fieldRequired
118
+ else if (props.showValidation) return props.errorText
119
+ })
120
+ const items = computed<any[]>(() => {
121
+ return [...props.items].map((text) => {
122
+ const term = search.value.toLowerCase()
123
+ const texts = text.toLowerCase().split(term)
124
+ return {
125
+ firstText: texts[0],
126
+ secondText: term,
127
+ thirdText: texts[1],
128
+ testId: `${term}-filtered-item`,
129
+ }
130
+ })
131
+ })
132
+
133
+ const selectedTabIndex = ref<number>(0)
134
+ const onSelect = (key: number): void => {
135
+ search.value = props.items[key]
136
+ emits('select', search.value)
137
+ isHide.value = true
138
+ }
139
+
140
+ const isHide = ref<boolean>(false)
141
+ const isShow = computed<boolean>(
142
+ () => Boolean(items.value.length) && !isHide.value
143
+ )
144
+
145
+ const onKeyDown = (event: KeyboardEvent): void => {
146
+ switch (event.code) {
147
+ case 'ArrowUp':
148
+ prevTabItem()
149
+ break
150
+ case 'ArrowDown':
151
+ nextTabItem()
152
+ break
153
+ case 'Enter':
154
+ event.preventDefault()
155
+ onSelect(selectedTabIndex.value)
156
+ break
157
+ case 'Tab':
158
+ isHide.value = true
159
+ break
160
+ }
161
+ }
162
+
163
+ const nextTabItem = (): void => {
164
+ if (selectedTabIndex.value === items.value.length - 1)
165
+ selectedTabIndex.value = 0
166
+ else selectedTabIndex.value++
167
+ }
168
+
169
+ const prevTabItem = (): void => {
170
+ if (selectedTabIndex.value === 0)
171
+ selectedTabIndex.value = items.value.length - 1
172
+ else selectedTabIndex.value--
173
+ }
174
+
175
+ watch(
176
+ () => props.items,
177
+ (newValue) => {
178
+ if (newValue.length) {
179
+ isHide.value = false
180
+ }
181
+ }
182
+ )
183
+ window.addEventListener('keydown', onKeyDown, true)
184
+ watch(isHide, (newValue) => {
185
+ if (!newValue) {
186
+ window.addEventListener('keydown', onKeyDown, true)
187
+ } else {
188
+ window.removeEventListener('keydown', onKeyDown, true)
189
+ }
190
+ })
191
+ watch(
192
+ () => props.showValidation,
193
+ (newValue: boolean) => {
194
+ isInitFieldValidation.value = newValue
195
+ },
196
+ { immediate: true }
197
+ )
198
+ </script>
199
+
200
+ <style scoped lang="scss">
201
+ .autocomplete {
202
+ max-width: 180px;
203
+ position: relative;
204
+
205
+ .content-search {
206
+ .loader {
207
+ position: absolute;
208
+ top: 3px;
209
+ left: -6px;
210
+ z-index: 1;
211
+ height: 16px;
212
+ width: 16px;
213
+
214
+ #loader {
215
+ height: 100%;
216
+ width: 100%;
217
+
218
+ :deep(.spinner-inverse) {
219
+ min-width: auto;
220
+ min-height: auto;
221
+ width: 100%;
222
+ height: 100%;
223
+ }
224
+ }
225
+ }
226
+ .search-icon {
227
+ position: absolute;
228
+ width: 17px;
229
+ top: 2px;
230
+ bottom: 0;
231
+ }
232
+ .search-input {
233
+ background-color: white;
234
+ padding: 0 6px 0 20px;
235
+ }
236
+ }
237
+
238
+ .content-filtered {
239
+ position: absolute;
240
+ display: block;
241
+ overflow-y: visible;
242
+ height: auto;
243
+ visibility: visible;
244
+ will-change: transform;
245
+ top: 0;
246
+ left: 0;
247
+ transform: translate3d(0px, 25px, 0px);
248
+ width: 250px;
249
+ z-index: 1000;
250
+
251
+ &.active .filtered-items {
252
+ max-height: 164px;
253
+ visibility: visible;
254
+ position: absolute;
255
+ top: 100%;
256
+ left: 0;
257
+ min-width: 96px;
258
+ max-width: 288px;
259
+ border: 0.8px solid #ccc;
260
+ padding: 9.6px 0;
261
+ z-index: 1060;
262
+ overflow: auto;
263
+ width: 100%;
264
+ margin: 1px 0 0;
265
+
266
+ .item {
267
+ line-height: 20px;
268
+ padding: 5px 0 0 5px;
269
+ color: #333;
270
+ cursor: pointer;
271
+ outline: unset;
272
+
273
+ &.active,
274
+ &:focus,
275
+ &:hover {
276
+ background-color: #2b5480;
277
+ color: #fff;
278
+ }
279
+ }
280
+ }
281
+ }
282
+ .form-group {
283
+ &__input {
284
+ display: flex;
285
+ .form-validate {
286
+ svg {
287
+ width: 24px;
288
+ height: 24px;
289
+ }
290
+ }
291
+ input {
292
+ width: 100%;
293
+ }
294
+ &-error {
295
+ margin-top: 0;
296
+ }
297
+ }
298
+ }
299
+ }
300
+ </style>
@@ -16,7 +16,10 @@
16
16
  v-if="props.accordion.iconClassName"
17
17
  :class="['icon', props.accordion.iconClassName]"
18
18
  ></div>
19
- <div :class="['text text-ellipsis', headingClass]">
19
+ <div
20
+ :class="['text text-ellipsis', headingClass]"
21
+ :data-id="`${accordionLocal.testId}`"
22
+ >
20
23
  {{ props.accordion.name }}
21
24
  </div>
22
25
  </div>
@@ -39,6 +39,7 @@ export interface UI_I_Localization {
39
39
  remoteConsole: UI_I_ArbitraryObject<string>
40
40
  vmWizard: UI_I_ArbitraryObject<string>
41
41
  feedback: UI_I_ArbitraryObject<string>
42
+ vsphereNa: UI_I_ArbitraryObject<string>
42
43
  }
43
44
  export interface UI_I_SendTaskParams {
44
45
  method: string
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.4.816",
4
+ "version": "1.4.818",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",