bfg-common 1.5.23 → 1.5.24

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 (161) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/scss/common/normalize.scss +339 -339
  3. package/components/atoms/TheIcon3.vue +50 -50
  4. package/components/atoms/collapse/CollapseNav.vue +165 -165
  5. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  6. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  7. package/components/atoms/perPage/PerPage.vue +58 -58
  8. package/components/atoms/stack/StackBlock.vue +185 -185
  9. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  10. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  11. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  12. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  13. package/components/common/accordion/Recursion.vue +222 -222
  14. package/components/common/browse/BrowseNew.vue +237 -237
  15. package/components/common/browse/BrowseOld.vue +217 -217
  16. package/components/common/browse/blocks/contents/Files.vue +37 -37
  17. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  18. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  19. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  20. package/components/common/context/Context.vue +111 -111
  21. package/components/common/context/lib/models/interfaces.ts +31 -31
  22. package/components/common/context/recursion/Recursion.vue +87 -87
  23. package/components/common/context/recursion/RecursionNew.vue +238 -238
  24. package/components/common/context/recursion/RecursionOld.vue +228 -228
  25. package/components/common/details/DetailsItem.vue +109 -109
  26. package/components/common/diagramMain/DiagramMain.vue +897 -897
  27. package/components/common/diagramMain/Header.vue +214 -214
  28. package/components/common/graph/Graph.vue +104 -104
  29. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  30. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  31. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  32. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +336 -336
  33. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  34. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  35. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  36. package/components/common/monitor/overview/Overview.vue +1 -0
  37. package/components/common/monitor/overview/Overview.vue~ +132 -0
  38. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  39. package/components/common/pages/home/StatusContent.vue +49 -49
  40. package/components/common/pages/home/headline/Headline.vue +45 -45
  41. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  42. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  43. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  44. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  45. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  46. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  47. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  48. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  49. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  50. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  51. package/components/common/pages/packages/Packages.vue +208 -208
  52. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  53. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  54. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  55. package/components/common/portlets/tag/Portlet.vue +433 -433
  56. package/components/common/recursionTree/RecursionTree.vue +223 -223
  57. package/components/common/select/button/ButtonDropdown.vue +108 -108
  58. package/components/common/spiceConsole/Drawer.vue +370 -370
  59. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  60. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  61. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  62. package/components/common/split/vertical/Vertical.vue +160 -160
  63. package/components/common/tools/Actions.vue +188 -188
  64. package/components/common/vm/actions/add/Add.vue +622 -622
  65. package/components/common/vm/actions/clone/Clone.vue +639 -639
  66. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  67. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  68. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  69. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  70. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  71. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  139. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  140. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  141. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  142. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  143. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  144. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  145. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  146. package/components/common/wizards/vm/migrate/Migrate.vue +302 -302
  147. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  148. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  149. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  150. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  151. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  152. package/composables/productNameLocal.ts +30 -30
  153. package/composables/useAppVersion.ts +21 -21
  154. package/package.json +1 -1
  155. package/plugins/date.ts +233 -233
  156. package/plugins/directives.ts +24 -24
  157. package/public/spice-console/lib/images/bitmap.js +203 -203
  158. package/public/spice-console/network/spicechannel.js +383 -383
  159. package/store/main/mutations.ts +7 -7
  160. package/store/main/state.ts +7 -7
  161. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,105 +1,105 @@
1
- <template>
2
- <nav class="sidenav vertical-groups-sidenav">
3
- <ul class="sidenav-content">
4
- <li
5
- v-for="(item, key) in props.items"
6
- :id="`${props.testId}-item-${key}`"
7
- :data-id="item.testId"
8
- :key="item.value"
9
- :class="[
10
- 'vertical-nav-link group-nav-link',
11
- { active: item.value === props.modelValue },
12
- { disabled: item.disabled },
13
- ]"
14
- :title="item.title || item.text"
15
- @click="selectItem(item)"
16
- >
17
- {{ item.text }}
18
- </li>
19
- </ul>
20
- </nav>
21
- </template>
22
- <script setup lang="ts">
23
- import type { UI_I_VerticalTabs } from '~/components/atoms/tabs/lib/models/interfaces'
24
-
25
- const props = withDefaults(
26
- defineProps<{
27
- modelValue: string | number
28
- items: UI_I_VerticalTabs[]
29
- hasErrorMessages?: number | boolean
30
- testId?: string
31
- }>(),
32
- { testId: 'ui-vertical-tabs' }
33
- )
34
-
35
- const emits = defineEmits<{
36
- (event: 'update:model-value', value: string): void
37
- (event: 'set-alert'): void
38
- }>()
39
-
40
- const selectItem = ({
41
- value,
42
- disabled,
43
- }: {
44
- value: string
45
- disabled: boolean
46
- }): void => {
47
- if (disabled) return
48
- if (
49
- props.hasErrorMessages === undefined ||
50
- props.hasErrorMessages === 0 ||
51
- props.hasErrorMessages === false
52
- ) {
53
- emits('update:model-value', value)
54
- return
55
- }
56
- emits('set-alert')
57
- }
58
- </script>
59
-
60
- <style>
61
- :root {
62
- --vertical-tabs-nav-link: --grey-100;
63
- --vertical-tabs-bg-color: #fafafa;
64
- }
65
- :root.dark-theme {
66
- --vertical-tabs-nav-link: #ffffff;
67
- --vertical-tabs-bg-color: transparent;
68
- }
69
- </style>
70
- <style lang="scss" scoped>
71
- .vertical-groups-sidenav {
72
- min-height: 94%;
73
- background-color: var(--vertical-tabs-bg-color);
74
-
75
- .vertical-nav-link {
76
- display: inline-block;
77
- width: 100%;
78
- margin-top: 5px;
79
- padding-left: 12px;
80
- color: var(--vertical-tabs-nav-link);
81
- border-bottom: 1px solid transparent;
82
- text-decoration: none;
83
- font-size: 14px;
84
- cursor: pointer;
85
- border-radius: 2.5px 0 0 2.5px;
86
-
87
- &.active {
88
- color: var(--vertical-nav-active-item-color);
89
- background: var(--vertical-nav-active-bg-color);
90
- border-bottom: 1px solid transparent;
91
- }
92
-
93
- &.disabled {
94
- cursor: not-allowed;
95
- opacity: 0.6;
96
- }
97
-
98
- &:hover:not(.active) {
99
- background: var(--vertical-nav-hover-bg-color);
100
- color: var(--blue-950);
101
- border-bottom: 1px solid #666;
102
- }
103
- }
104
- }
105
- </style>
1
+ <template>
2
+ <nav class="sidenav vertical-groups-sidenav">
3
+ <ul class="sidenav-content">
4
+ <li
5
+ v-for="(item, key) in props.items"
6
+ :id="`${props.testId}-item-${key}`"
7
+ :data-id="item.testId"
8
+ :key="item.value"
9
+ :class="[
10
+ 'vertical-nav-link group-nav-link',
11
+ { active: item.value === props.modelValue },
12
+ { disabled: item.disabled },
13
+ ]"
14
+ :title="item.title || item.text"
15
+ @click="selectItem(item)"
16
+ >
17
+ {{ item.text }}
18
+ </li>
19
+ </ul>
20
+ </nav>
21
+ </template>
22
+ <script setup lang="ts">
23
+ import type { UI_I_VerticalTabs } from '~/components/atoms/tabs/lib/models/interfaces'
24
+
25
+ const props = withDefaults(
26
+ defineProps<{
27
+ modelValue: string | number
28
+ items: UI_I_VerticalTabs[]
29
+ hasErrorMessages?: number | boolean
30
+ testId?: string
31
+ }>(),
32
+ { testId: 'ui-vertical-tabs' }
33
+ )
34
+
35
+ const emits = defineEmits<{
36
+ (event: 'update:model-value', value: string): void
37
+ (event: 'set-alert'): void
38
+ }>()
39
+
40
+ const selectItem = ({
41
+ value,
42
+ disabled,
43
+ }: {
44
+ value: string
45
+ disabled: boolean
46
+ }): void => {
47
+ if (disabled) return
48
+ if (
49
+ props.hasErrorMessages === undefined ||
50
+ props.hasErrorMessages === 0 ||
51
+ props.hasErrorMessages === false
52
+ ) {
53
+ emits('update:model-value', value)
54
+ return
55
+ }
56
+ emits('set-alert')
57
+ }
58
+ </script>
59
+
60
+ <style>
61
+ :root {
62
+ --vertical-tabs-nav-link: --grey-100;
63
+ --vertical-tabs-bg-color: #fafafa;
64
+ }
65
+ :root.dark-theme {
66
+ --vertical-tabs-nav-link: #ffffff;
67
+ --vertical-tabs-bg-color: transparent;
68
+ }
69
+ </style>
70
+ <style lang="scss" scoped>
71
+ .vertical-groups-sidenav {
72
+ min-height: 94%;
73
+ background-color: var(--vertical-tabs-bg-color);
74
+
75
+ .vertical-nav-link {
76
+ display: inline-block;
77
+ width: 100%;
78
+ margin-top: 5px;
79
+ padding-left: 12px;
80
+ color: var(--vertical-tabs-nav-link);
81
+ border-bottom: 1px solid transparent;
82
+ text-decoration: none;
83
+ font-size: 14px;
84
+ cursor: pointer;
85
+ border-radius: 2.5px 0 0 2.5px;
86
+
87
+ &.active {
88
+ color: var(--vertical-nav-active-item-color);
89
+ background: var(--vertical-nav-active-bg-color);
90
+ border-bottom: 1px solid transparent;
91
+ }
92
+
93
+ &.disabled {
94
+ cursor: not-allowed;
95
+ opacity: 0.6;
96
+ }
97
+
98
+ &:hover:not(.active) {
99
+ background: var(--vertical-nav-hover-bg-color);
100
+ color: var(--blue-950);
101
+ border-bottom: 1px solid #666;
102
+ }
103
+ }
104
+ }
105
+ </style>
@@ -1,222 +1,222 @@
1
- <template>
2
- <div class="accordion" :class="{ disabled: props.accordion.disabled }">
3
- <nuxt-link
4
- v-development="props.accordion.development"
5
- class="accordion-item"
6
- :to="accordionLocal.path"
7
- :data-id="accordionLocal.testId"
8
- active-class="active"
9
- @click.prevent="onSelect(accordionLocal)"
10
- >
11
- <div
12
- :class="['heading-wrap', { group: props.accordion.hasChild }]"
13
- :style="{ paddingLeft: `${props.level * 24 || 10}px` }"
14
- >
15
- <div class="flex-align-center heading">
16
- <div
17
- v-if="props.accordion.iconClassName"
18
- :class="['icon', props.accordion.iconClassName]"
19
- ></div>
20
- <div
21
- :class="['text text-ellipsis', headingClass]"
22
- :data-id="`${accordionLocal.testId}`"
23
- >
24
- {{ props.accordion.name }}
25
- </div>
26
- </div>
27
- <button
28
- v-if="props.accordion.hasChild"
29
- :id="`${props.testId}-trigger-button`"
30
- :data-id="`${accordionLocal.testId}-toggle-button`"
31
- class="btn-trigger max-width"
32
- @click="toggle"
33
- >
34
- <atoms-the-icon
35
- :class="[
36
- 'trigger-icon',
37
- {
38
- isOpen: accordionLocal.isOpen,
39
- },
40
- ]"
41
- name="angle"
42
- />
43
- </button>
44
- </div>
45
- </nuxt-link>
46
-
47
- <transition
48
- v-if="props.accordion.hasChild"
49
- name="accordion"
50
- @before-enter="end"
51
- @enter="start"
52
- @before-leave="start"
53
- @leave="end"
54
- >
55
- <div v-show="accordionLocal.isOpen" class="accordion__content">
56
- <common-accordion-recursion
57
- v-for="(item, key) in props.accordion.children"
58
- :key="item.id"
59
- :test-id="`${props.testId}-${key}`"
60
- :accordion="item"
61
- :level="props.level + 1"
62
- @change="onSelect"
63
- />
64
- </div>
65
- </transition>
66
- </div>
67
- </template>
68
-
69
- <script setup lang="ts">
70
- import type {
71
- UI_I_AccordionRecursion,
72
- UI_I_HeadingClass,
73
- } from '~/components/common/accordion/lib/models/interfaces'
74
-
75
- const props = withDefaults(
76
- defineProps<{
77
- accordion: UI_I_AccordionRecursion
78
- testId: string
79
- level?: number
80
- }>(),
81
- { level: 0 }
82
- )
83
- const emits = defineEmits<{
84
- (event: 'change', value: UI_I_AccordionRecursion): void
85
- }>()
86
-
87
- const accordionLocal = ref<UI_I_AccordionRecursion>(props.accordion)
88
-
89
- // TODO CHANGE
90
- watch(
91
- accordionLocal,
92
- () => {
93
- if (accordionLocal.value.isOpen !== false)
94
- accordionLocal.value.isOpen = true
95
- },
96
- { immediate: true }
97
- )
98
-
99
- const toggle = (): void => {
100
- if (!props.accordion.hasChild) return
101
-
102
- accordionLocal.value.isOpen = !accordionLocal.value.isOpen
103
- }
104
-
105
- const start = (element: any): void => {
106
- element.style.height = 'auto'
107
- }
108
- const end = (element: any): void => {
109
- element.style.height = 0
110
- }
111
-
112
- const headingClass = computed<UI_I_HeadingClass>(() => {
113
- return {
114
- 'text-normal': !props.accordion.hasChild,
115
- disabled: props.accordion.disabled && !props.accordion.hasChild,
116
- }
117
- })
118
-
119
- const onSelect = (item: UI_I_AccordionRecursion): void => {
120
- emits('change', item)
121
- }
122
- </script>
123
-
124
- <style lang="scss">
125
- @import '~/assets/scss/common/mixins';
126
-
127
- %hover-effect {
128
- margin-bottom: -1px;
129
- border-bottom: 1px solid var(--row-hover-border-color);
130
- background-color: var(--row-hover-bg-color);
131
- cursor: pointer;
132
- }
133
- %active-mode {
134
- background-color: var(--row-selected-bg-color);
135
- color: var(--row-selected-text-color);
136
- }
137
- .accordion {
138
- .accordion-item {
139
- display: block;
140
- text-decoration: none;
141
- color: var(--global-font-color);
142
-
143
- &.active {
144
- background-color: #29414e;
145
- color: #fff;
146
- border-bottom: 1px solid transparent;
147
- cursor: default;
148
- %hover-effect {
149
- margin-bottom: unset;
150
- border-bottom: unset;
151
- background-color: unset;
152
- cursor: unset;
153
- }
154
- }
155
-
156
- .heading-wrap {
157
- width: 100%;
158
- @include flex($align: center, $just: space-between);
159
-
160
- &:not(.group) {
161
- display: block;
162
- padding-right: 14px;
163
- }
164
-
165
- &.group .heading {
166
- width: calc(100% - 30px);
167
- }
168
- .heading {
169
- margin-right: 10px;
170
- //overflow: hidden;
171
- .icon {
172
- margin: 1px 4px 0 0;
173
- }
174
-
175
- .text {
176
- font-weight: 600;
177
-
178
- &.text-normal {
179
- font-weight: 400;
180
-
181
- &.disabled {
182
- opacity: 0.3;
183
- cursor: not-allowed;
184
- }
185
- }
186
- }
187
- }
188
- &:hover:not(:has(> .disabled)) {
189
- @extend %hover-effect;
190
- }
191
- &:has(> .disabled) {
192
- cursor: not-allowed;
193
- }
194
- }
195
- }
196
- &__content {
197
- transition: 0.1s ease-in-out;
198
- overflow: hidden;
199
- }
200
- }
201
-
202
- .btn-trigger {
203
- flex: auto;
204
- margin-right: 10px;
205
-
206
- &.max-width {
207
- width: max-content;
208
- }
209
-
210
- //padding-right: 10px;
211
- .trigger-icon {
212
- width: 16px;
213
- height: 16px;
214
- transform: rotate(90deg);
215
- margin-left: auto;
216
- fill: var(--triger-icon-color);
217
- &.isOpen {
218
- transform: rotate(180deg);
219
- }
220
- }
221
- }
222
- </style>
1
+ <template>
2
+ <div class="accordion" :class="{ disabled: props.accordion.disabled }">
3
+ <nuxt-link
4
+ v-development="props.accordion.development"
5
+ class="accordion-item"
6
+ :to="accordionLocal.path"
7
+ :data-id="accordionLocal.testId"
8
+ active-class="active"
9
+ @click.prevent="onSelect(accordionLocal)"
10
+ >
11
+ <div
12
+ :class="['heading-wrap', { group: props.accordion.hasChild }]"
13
+ :style="{ paddingLeft: `${props.level * 24 || 10}px` }"
14
+ >
15
+ <div class="flex-align-center heading">
16
+ <div
17
+ v-if="props.accordion.iconClassName"
18
+ :class="['icon', props.accordion.iconClassName]"
19
+ ></div>
20
+ <div
21
+ :class="['text text-ellipsis', headingClass]"
22
+ :data-id="`${accordionLocal.testId}`"
23
+ >
24
+ {{ props.accordion.name }}
25
+ </div>
26
+ </div>
27
+ <button
28
+ v-if="props.accordion.hasChild"
29
+ :id="`${props.testId}-trigger-button`"
30
+ :data-id="`${accordionLocal.testId}-toggle-button`"
31
+ class="btn-trigger max-width"
32
+ @click="toggle"
33
+ >
34
+ <atoms-the-icon
35
+ :class="[
36
+ 'trigger-icon',
37
+ {
38
+ isOpen: accordionLocal.isOpen,
39
+ },
40
+ ]"
41
+ name="angle"
42
+ />
43
+ </button>
44
+ </div>
45
+ </nuxt-link>
46
+
47
+ <transition
48
+ v-if="props.accordion.hasChild"
49
+ name="accordion"
50
+ @before-enter="end"
51
+ @enter="start"
52
+ @before-leave="start"
53
+ @leave="end"
54
+ >
55
+ <div v-show="accordionLocal.isOpen" class="accordion__content">
56
+ <common-accordion-recursion
57
+ v-for="(item, key) in props.accordion.children"
58
+ :key="item.id"
59
+ :test-id="`${props.testId}-${key}`"
60
+ :accordion="item"
61
+ :level="props.level + 1"
62
+ @change="onSelect"
63
+ />
64
+ </div>
65
+ </transition>
66
+ </div>
67
+ </template>
68
+
69
+ <script setup lang="ts">
70
+ import type {
71
+ UI_I_AccordionRecursion,
72
+ UI_I_HeadingClass,
73
+ } from '~/components/common/accordion/lib/models/interfaces'
74
+
75
+ const props = withDefaults(
76
+ defineProps<{
77
+ accordion: UI_I_AccordionRecursion
78
+ testId: string
79
+ level?: number
80
+ }>(),
81
+ { level: 0 }
82
+ )
83
+ const emits = defineEmits<{
84
+ (event: 'change', value: UI_I_AccordionRecursion): void
85
+ }>()
86
+
87
+ const accordionLocal = ref<UI_I_AccordionRecursion>(props.accordion)
88
+
89
+ // TODO CHANGE
90
+ watch(
91
+ accordionLocal,
92
+ () => {
93
+ if (accordionLocal.value.isOpen !== false)
94
+ accordionLocal.value.isOpen = true
95
+ },
96
+ { immediate: true }
97
+ )
98
+
99
+ const toggle = (): void => {
100
+ if (!props.accordion.hasChild) return
101
+
102
+ accordionLocal.value.isOpen = !accordionLocal.value.isOpen
103
+ }
104
+
105
+ const start = (element: any): void => {
106
+ element.style.height = 'auto'
107
+ }
108
+ const end = (element: any): void => {
109
+ element.style.height = 0
110
+ }
111
+
112
+ const headingClass = computed<UI_I_HeadingClass>(() => {
113
+ return {
114
+ 'text-normal': !props.accordion.hasChild,
115
+ disabled: props.accordion.disabled && !props.accordion.hasChild,
116
+ }
117
+ })
118
+
119
+ const onSelect = (item: UI_I_AccordionRecursion): void => {
120
+ emits('change', item)
121
+ }
122
+ </script>
123
+
124
+ <style lang="scss">
125
+ @import '~/assets/scss/common/mixins';
126
+
127
+ %hover-effect {
128
+ margin-bottom: -1px;
129
+ border-bottom: 1px solid var(--row-hover-border-color);
130
+ background-color: var(--row-hover-bg-color);
131
+ cursor: pointer;
132
+ }
133
+ %active-mode {
134
+ background-color: var(--row-selected-bg-color);
135
+ color: var(--row-selected-text-color);
136
+ }
137
+ .accordion {
138
+ .accordion-item {
139
+ display: block;
140
+ text-decoration: none;
141
+ color: var(--global-font-color);
142
+
143
+ &.active {
144
+ background-color: #29414e;
145
+ color: #fff;
146
+ border-bottom: 1px solid transparent;
147
+ cursor: default;
148
+ %hover-effect {
149
+ margin-bottom: unset;
150
+ border-bottom: unset;
151
+ background-color: unset;
152
+ cursor: unset;
153
+ }
154
+ }
155
+
156
+ .heading-wrap {
157
+ width: 100%;
158
+ @include flex($align: center, $just: space-between);
159
+
160
+ &:not(.group) {
161
+ display: block;
162
+ padding-right: 14px;
163
+ }
164
+
165
+ &.group .heading {
166
+ width: calc(100% - 30px);
167
+ }
168
+ .heading {
169
+ margin-right: 10px;
170
+ //overflow: hidden;
171
+ .icon {
172
+ margin: 1px 4px 0 0;
173
+ }
174
+
175
+ .text {
176
+ font-weight: 600;
177
+
178
+ &.text-normal {
179
+ font-weight: 400;
180
+
181
+ &.disabled {
182
+ opacity: 0.3;
183
+ cursor: not-allowed;
184
+ }
185
+ }
186
+ }
187
+ }
188
+ &:hover:not(:has(> .disabled)) {
189
+ @extend %hover-effect;
190
+ }
191
+ &:has(> .disabled) {
192
+ cursor: not-allowed;
193
+ }
194
+ }
195
+ }
196
+ &__content {
197
+ transition: 0.1s ease-in-out;
198
+ overflow: hidden;
199
+ }
200
+ }
201
+
202
+ .btn-trigger {
203
+ flex: auto;
204
+ margin-right: 10px;
205
+
206
+ &.max-width {
207
+ width: max-content;
208
+ }
209
+
210
+ //padding-right: 10px;
211
+ .trigger-icon {
212
+ width: 16px;
213
+ height: 16px;
214
+ transform: rotate(90deg);
215
+ margin-left: auto;
216
+ fill: var(--triger-icon-color);
217
+ &.isOpen {
218
+ transform: rotate(180deg);
219
+ }
220
+ }
221
+ }
222
+ </style>