bfg-common 1.5.43 → 1.5.45

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 (185) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/scss/common/normalize.scss +339 -339
  7. package/components/atoms/TheIcon3.vue +50 -50
  8. package/components/atoms/collapse/CollapseNav.vue +165 -165
  9. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  10. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  11. package/components/atoms/perPage/PerPage.vue +58 -58
  12. package/components/atoms/stack/StackBlock.vue +185 -185
  13. package/components/atoms/table/dataGrid/DataGrid.vue +1 -1
  14. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  15. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  16. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  17. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  18. package/components/atoms/tooltip/Signpost.vue +227 -227
  19. package/components/common/accordion/Recursion.vue +222 -222
  20. package/components/common/browse/BrowseNew.vue +237 -237
  21. package/components/common/browse/BrowseOld.vue +217 -217
  22. package/components/common/browse/blocks/contents/Files.vue +37 -37
  23. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  24. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  25. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  26. package/components/common/context/Context.vue +111 -111
  27. package/components/common/context/lib/models/interfaces.ts +31 -31
  28. package/components/common/context/recursion/Recursion.vue +87 -87
  29. package/components/common/context/recursion/RecursionNew.vue +238 -238
  30. package/components/common/context/recursion/RecursionOld.vue +228 -228
  31. package/components/common/details/DetailsItem.vue +109 -109
  32. package/components/common/diagramMain/DiagramMain.vue +897 -897
  33. package/components/common/diagramMain/Header.vue +214 -214
  34. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  35. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  36. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  37. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +336 -336
  38. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  39. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  40. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  41. package/components/common/pages/home/StatusContent.vue +49 -49
  42. package/components/common/pages/home/headline/Headline.vue +45 -45
  43. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  44. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  45. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  46. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  47. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  48. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  49. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  50. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  51. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  52. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  53. package/components/common/pages/licensing/Licensing.vue +128 -0
  54. package/components/common/pages/licensing/lib/models/interfaces.ts +22 -0
  55. package/components/common/pages/licensing/lib/utils/validation.ts +29 -0
  56. package/components/common/pages/licensing/listView/ListView.vue +50 -0
  57. package/components/common/pages/licensing/listView/lib/config/list.ts +57 -0
  58. package/components/common/pages/licensing/listView/lib/models/interfaces.ts +5 -0
  59. package/components/common/pages/licensing/modals/assign/Assign.vue +247 -0
  60. package/components/common/pages/licensing/modals/assign/lib/config/tabsPannel.ts +17 -0
  61. package/components/common/pages/licensing/modals/assign/lib/models/interfaces.ts +5 -0
  62. package/components/common/pages/licensing/modals/assign/lib/utils/error.ts +25 -0
  63. package/components/common/pages/licensing/modals/assign/new/New.vue +216 -0
  64. package/components/common/pages/licensing/modals/assign/tableView/TableView.vue +193 -0
  65. package/components/common/pages/licensing/modals/assign/tableView/lib/config/table.ts +100 -0
  66. package/components/common/pages/licensing/modals/assign/tableView/lib/config/tableKeys.ts +10 -0
  67. package/components/common/pages/licensing/modals/assign/tableView/lib/models/interfaces.ts +9 -0
  68. package/components/common/pages/licensing/modals/assign/tableView/lib/models/types.ts +8 -0
  69. package/components/common/pages/packages/Packages.vue +208 -208
  70. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  71. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  72. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  73. package/components/common/portlets/tag/Portlet.vue +433 -433
  74. package/components/common/recursionTree/RecursionTree.vue +223 -223
  75. package/components/common/select/button/ButtonDropdown.vue +108 -108
  76. package/components/common/spiceConsole/Drawer.vue +370 -370
  77. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  78. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  79. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  80. package/components/common/split/vertical/Vertical.vue +160 -160
  81. package/components/common/tools/Actions.vue +188 -188
  82. package/components/common/vm/actions/add/Add.vue +774 -774
  83. package/components/common/vm/actions/add/lib/config/steps.ts +247 -247
  84. package/components/common/vm/actions/clone/Clone.vue +798 -798
  85. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  86. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  87. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  88. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  89. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  90. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  132. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  133. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  134. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  135. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  136. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  137. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  141. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  142. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  143. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  144. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  146. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  148. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  149. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  150. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  151. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  152. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  153. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  154. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  155. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  156. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  157. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  158. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  159. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  160. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  161. package/components/common/vm/actions/common/select/createType/CreateType.vue +74 -74
  162. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  163. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  164. package/components/common/vm/actions/common/select/template/Template.vue +65 -65
  165. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  166. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  167. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  168. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  169. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  170. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  171. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  172. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  173. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  174. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  175. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  176. package/composables/productNameLocal.ts +30 -30
  177. package/composables/useAppVersion.ts +21 -21
  178. package/package.json +1 -1
  179. package/plugins/date.ts +233 -233
  180. package/plugins/directives.ts +24 -24
  181. package/public/spice-console/lib/images/bitmap.js +203 -203
  182. package/public/spice-console/network/spicechannel.js +383 -383
  183. package/store/main/mutations.ts +7 -7
  184. package/store/main/state.ts +7 -7
  185. 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,227 +1,227 @@
1
- <template>
2
- <div
3
- id="signpost"
4
- :class="['signpost', signpostClass]"
5
- :data-id="`${props.testId}-signpost`"
6
- :style="signpostStyles"
7
- @click.stop
8
- @mouseenter="hovered = true"
9
- @mouseleave="hovered = false"
10
- >
11
- <div class="signpost-wrap">
12
- <div class="popover-pointer" />
13
- <div class="signpost-content-header">
14
- <button
15
- :id="`${props.testId}-close-icon`"
16
- :data-id="`${props.testId}-close-icon`"
17
- class="signpost-action close"
18
- @click="hide"
19
- >
20
- <atoms-the-icon class="close-icon" name="close" />
21
- </button>
22
- </div>
23
- <div class="signpost-content-body">
24
- <slot />
25
- </div>
26
- </div>
27
- </div>
28
- </template>
29
-
30
- <script setup lang="ts">
31
- import type { UI_I_ElPosition } from '~/components/atoms/tooltip/lib/models/interfaces'
32
- const props = withDefaults(
33
- defineProps<{
34
- elemId: string
35
- testId?: string
36
- }>(),
37
- { testId: 'ui-signpost' }
38
- )
39
- const emits = defineEmits<{
40
- (event: 'hide'): void
41
- }>()
42
- const hide = (): void => {
43
- emits('hide')
44
- }
45
-
46
- const signpostStyles = ref<UI_I_ElPosition | null>(null)
47
- watch(
48
- () => props.elemId,
49
- (newValue: string) => {
50
- const element =
51
- (document.getElementById(newValue) as HTMLDivElement) || null
52
- const { width, x, y } = element.getBoundingClientRect()
53
-
54
- signpostStyles.value = {
55
- top: `${y}px`,
56
- left: `${x + width / 2}px`,
57
- }
58
- setTimeout(() => {
59
- setSignpostPosition()
60
- }, 0)
61
- },
62
- { immediate: true }
63
- )
64
- const signpostClass = ref<string[]>([])
65
- const setSignpostPosition = (): void => {
66
- const signpost =
67
- (document.getElementById('signpost') as HTMLDivElement) || null
68
- const signpostRect = (signpost?.getBoundingClientRect() as DOMRect) || null
69
-
70
- type PositionX = 'right' | 'left'
71
- let positionX: PositionX = 'right'
72
-
73
- type PositionY = 'top' | 'middle'
74
- let positionY: PositionY = 'middle'
75
-
76
- const isOutRight = signpostRect.left + signpostRect.width > window.innerWidth
77
- const isOutTop = signpostRect.top < 0
78
-
79
- if (isOutTop) {
80
- positionY = 'top'
81
- }
82
- if (isOutRight) {
83
- positionX = 'left'
84
- }
85
-
86
- signpostClass.value.push(positionY)
87
- signpostClass.value.push(positionX)
88
- signpostClass.value.push('show')
89
- }
90
-
91
- const hovered = ref<boolean>(false)
92
- const windowClick = (): void => {
93
- hide()
94
- }
95
- const windowScroll = (): void => {
96
- if (hovered.value) {
97
- return
98
- }
99
- hide()
100
- }
101
- onMounted(() => {
102
- setTimeout(() => {
103
- window.addEventListener('click', windowClick)
104
- window.addEventListener('scroll', windowScroll, true)
105
- })
106
- })
107
- onUnmounted(() => {
108
- window.removeEventListener('click', windowClick)
109
- window.removeEventListener('scroll', windowScroll, true)
110
- })
111
- </script>
112
-
113
- <style scoped lang="scss">
114
- .signpost {
115
- opacity: 0;
116
- position: fixed;
117
- cursor: default;
118
- transform: translateY(calc(-50% + 14px)) translateX(20px);
119
- z-index: var(--z-popover);
120
-
121
- &.show {
122
- opacity: 1;
123
- }
124
- &.left {
125
- transform: translateY(calc(-50% + 14px)) translateX(calc(-100% - 20px));
126
-
127
- .signpost-wrap {
128
- .popover-pointer {
129
- left: 100%;
130
- border-right: unset;
131
- border-left: 12px solid var(--signpost-border-color);
132
-
133
- &::before {
134
- border-right: unset;
135
- border-left: 12px solid var(--signpost-bgcolor);
136
- left: unset;
137
- right: 2px;
138
- }
139
- }
140
- }
141
- }
142
- &.top {
143
- transform: translateY(calc(0% + 10px)) translateX(20px);
144
-
145
- &.left {
146
- transform: translateY(calc(0% + 10px)) translateX(calc(-100% - 20px));
147
-
148
- .popover-pointer {
149
- top: 5px;
150
- }
151
- }
152
-
153
- .signpost-wrap {
154
- .popover-pointer {
155
- top: 5px;
156
- }
157
- }
158
- }
159
-
160
- .signpost-wrap {
161
- border-radius: 3px;
162
- border: 1px solid var(--signpost-border-color);
163
- background-color: var(--signpost-bgcolor);
164
- position: relative;
165
-
166
- .popover-pointer {
167
- border-bottom: 12px solid transparent;
168
- top: 50%;
169
- transform: translateY(-50%);
170
- border-right: 12px solid var(--signpost-border-color);
171
- left: -12px;
172
- height: 0;
173
- width: 0;
174
- position: absolute;
175
-
176
- &::before {
177
- border-bottom: 12px solid transparent;
178
- top: 1px;
179
- border-right: 12px solid var(--signpost-bgcolor);
180
- left: 2px;
181
- content: '';
182
- height: 0;
183
- width: 0;
184
- position: absolute;
185
- }
186
- }
187
-
188
- .signpost-content-header {
189
- display: flex;
190
- justify-content: flex-end;
191
- position: absolute;
192
- width: 100%;
193
- background-color: inherit;
194
- top: 0;
195
-
196
- button {
197
- line-height: 24px;
198
-
199
- .close-icon {
200
- width: 16px;
201
- height: 16px;
202
- }
203
- }
204
- }
205
-
206
- .signpost-content-body {
207
- padding: 24px;
208
- max-height: 480px;
209
- overflow-y: auto;
210
- text-transform: none;
211
- }
212
- }
213
- }
214
- </style>
215
-
216
- <style>
217
- :root {
218
- --signpost-bgcolor: #fff;
219
- --signpost-border-color: #b3b3b3;
220
- --signpost-color: #acbac3;
221
- }
222
- :root.dark-theme {
223
- --signpost-bgcolor: #21333b;
224
- --signpost-border-color: #000;
225
- --signpost-color: #acbac3;
226
- }
227
- </style>
1
+ <template>
2
+ <div
3
+ id="signpost"
4
+ :class="['signpost', signpostClass]"
5
+ :data-id="`${props.testId}-signpost`"
6
+ :style="signpostStyles"
7
+ @click.stop
8
+ @mouseenter="hovered = true"
9
+ @mouseleave="hovered = false"
10
+ >
11
+ <div class="signpost-wrap">
12
+ <div class="popover-pointer" />
13
+ <div class="signpost-content-header">
14
+ <button
15
+ :id="`${props.testId}-close-icon`"
16
+ :data-id="`${props.testId}-close-icon`"
17
+ class="signpost-action close"
18
+ @click="hide"
19
+ >
20
+ <atoms-the-icon class="close-icon" name="close" />
21
+ </button>
22
+ </div>
23
+ <div class="signpost-content-body">
24
+ <slot />
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </template>
29
+
30
+ <script setup lang="ts">
31
+ import type { UI_I_ElPosition } from '~/components/atoms/tooltip/lib/models/interfaces'
32
+ const props = withDefaults(
33
+ defineProps<{
34
+ elemId: string
35
+ testId?: string
36
+ }>(),
37
+ { testId: 'ui-signpost' }
38
+ )
39
+ const emits = defineEmits<{
40
+ (event: 'hide'): void
41
+ }>()
42
+ const hide = (): void => {
43
+ emits('hide')
44
+ }
45
+
46
+ const signpostStyles = ref<UI_I_ElPosition | null>(null)
47
+ watch(
48
+ () => props.elemId,
49
+ (newValue: string) => {
50
+ const element =
51
+ (document.getElementById(newValue) as HTMLDivElement) || null
52
+ const { width, x, y } = element.getBoundingClientRect()
53
+
54
+ signpostStyles.value = {
55
+ top: `${y}px`,
56
+ left: `${x + width / 2}px`,
57
+ }
58
+ setTimeout(() => {
59
+ setSignpostPosition()
60
+ }, 0)
61
+ },
62
+ { immediate: true }
63
+ )
64
+ const signpostClass = ref<string[]>([])
65
+ const setSignpostPosition = (): void => {
66
+ const signpost =
67
+ (document.getElementById('signpost') as HTMLDivElement) || null
68
+ const signpostRect = (signpost?.getBoundingClientRect() as DOMRect) || null
69
+
70
+ type PositionX = 'right' | 'left'
71
+ let positionX: PositionX = 'right'
72
+
73
+ type PositionY = 'top' | 'middle'
74
+ let positionY: PositionY = 'middle'
75
+
76
+ const isOutRight = signpostRect.left + signpostRect.width > window.innerWidth
77
+ const isOutTop = signpostRect.top < 0
78
+
79
+ if (isOutTop) {
80
+ positionY = 'top'
81
+ }
82
+ if (isOutRight) {
83
+ positionX = 'left'
84
+ }
85
+
86
+ signpostClass.value.push(positionY)
87
+ signpostClass.value.push(positionX)
88
+ signpostClass.value.push('show')
89
+ }
90
+
91
+ const hovered = ref<boolean>(false)
92
+ const windowClick = (): void => {
93
+ hide()
94
+ }
95
+ const windowScroll = (): void => {
96
+ if (hovered.value) {
97
+ return
98
+ }
99
+ hide()
100
+ }
101
+ onMounted(() => {
102
+ setTimeout(() => {
103
+ window.addEventListener('click', windowClick)
104
+ window.addEventListener('scroll', windowScroll, true)
105
+ })
106
+ })
107
+ onUnmounted(() => {
108
+ window.removeEventListener('click', windowClick)
109
+ window.removeEventListener('scroll', windowScroll, true)
110
+ })
111
+ </script>
112
+
113
+ <style scoped lang="scss">
114
+ .signpost {
115
+ opacity: 0;
116
+ position: fixed;
117
+ cursor: default;
118
+ transform: translateY(calc(-50% + 14px)) translateX(20px);
119
+ z-index: var(--z-popover);
120
+
121
+ &.show {
122
+ opacity: 1;
123
+ }
124
+ &.left {
125
+ transform: translateY(calc(-50% + 14px)) translateX(calc(-100% - 20px));
126
+
127
+ .signpost-wrap {
128
+ .popover-pointer {
129
+ left: 100%;
130
+ border-right: unset;
131
+ border-left: 12px solid var(--signpost-border-color);
132
+
133
+ &::before {
134
+ border-right: unset;
135
+ border-left: 12px solid var(--signpost-bgcolor);
136
+ left: unset;
137
+ right: 2px;
138
+ }
139
+ }
140
+ }
141
+ }
142
+ &.top {
143
+ transform: translateY(calc(0% + 10px)) translateX(20px);
144
+
145
+ &.left {
146
+ transform: translateY(calc(0% + 10px)) translateX(calc(-100% - 20px));
147
+
148
+ .popover-pointer {
149
+ top: 5px;
150
+ }
151
+ }
152
+
153
+ .signpost-wrap {
154
+ .popover-pointer {
155
+ top: 5px;
156
+ }
157
+ }
158
+ }
159
+
160
+ .signpost-wrap {
161
+ border-radius: 3px;
162
+ border: 1px solid var(--signpost-border-color);
163
+ background-color: var(--signpost-bgcolor);
164
+ position: relative;
165
+
166
+ .popover-pointer {
167
+ border-bottom: 12px solid transparent;
168
+ top: 50%;
169
+ transform: translateY(-50%);
170
+ border-right: 12px solid var(--signpost-border-color);
171
+ left: -12px;
172
+ height: 0;
173
+ width: 0;
174
+ position: absolute;
175
+
176
+ &::before {
177
+ border-bottom: 12px solid transparent;
178
+ top: 1px;
179
+ border-right: 12px solid var(--signpost-bgcolor);
180
+ left: 2px;
181
+ content: '';
182
+ height: 0;
183
+ width: 0;
184
+ position: absolute;
185
+ }
186
+ }
187
+
188
+ .signpost-content-header {
189
+ display: flex;
190
+ justify-content: flex-end;
191
+ position: absolute;
192
+ width: 100%;
193
+ background-color: inherit;
194
+ top: 0;
195
+
196
+ button {
197
+ line-height: 24px;
198
+
199
+ .close-icon {
200
+ width: 16px;
201
+ height: 16px;
202
+ }
203
+ }
204
+ }
205
+
206
+ .signpost-content-body {
207
+ padding: 24px;
208
+ max-height: 480px;
209
+ overflow-y: auto;
210
+ text-transform: none;
211
+ }
212
+ }
213
+ }
214
+ </style>
215
+
216
+ <style>
217
+ :root {
218
+ --signpost-bgcolor: #fff;
219
+ --signpost-border-color: #b3b3b3;
220
+ --signpost-color: #acbac3;
221
+ }
222
+ :root.dark-theme {
223
+ --signpost-bgcolor: #21333b;
224
+ --signpost-border-color: #000;
225
+ --signpost-color: #acbac3;
226
+ }
227
+ </style>