bfg-common 1.4.581 → 1.4.583

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 (138) hide show
  1. package/assets/img/icons/icons-sprite-dark-1.svg +407 -407
  2. package/assets/img/icons/icons-sprite-dark-2.svg +343 -343
  3. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  4. package/assets/img/icons/icons-sprite-dark-4.svg +255 -255
  5. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  6. package/assets/img/icons/icons-sprite-dark-6.svg +94 -94
  7. package/assets/img/icons/icons-sprite-light-1.svg +407 -407
  8. package/assets/img/icons/icons-sprite-light-2.svg +343 -343
  9. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  10. package/assets/img/icons/icons-sprite-light-4.svg +255 -255
  11. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  12. package/assets/img/icons/icons-sprite-light-6.svg +94 -94
  13. package/assets/scss/common/theme.scss +7 -1
  14. package/components/atoms/TheIcon3.vue +50 -50
  15. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  16. package/components/atoms/stack/StackBlock.vue +185 -185
  17. package/components/atoms/table/dataGrid/DataGrid.vue +1633 -1633
  18. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  19. package/components/common/browse/BrowseNew.vue +237 -237
  20. package/components/common/browse/BrowseOld.vue +217 -217
  21. package/components/common/browse/blocks/contents/Files.vue +35 -35
  22. package/components/common/browse/blocks/contents/FilesOld.vue +70 -70
  23. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +92 -92
  24. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  25. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  26. package/components/common/browse/lib/models/interfaces.ts +5 -5
  27. package/components/common/context/lib/models/interfaces.ts +30 -30
  28. package/components/common/context/recursion/Recursion.vue +86 -86
  29. package/components/common/context/recursion/RecursionNew.vue +199 -199
  30. package/components/common/context/recursion/RecursionOld.vue +213 -213
  31. package/components/common/diagramMain/Header.vue +211 -211
  32. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  33. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  34. package/components/common/diagramMain/lib/models/types.ts +21 -21
  35. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  36. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +330 -330
  37. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  38. package/components/common/diagramMain/modals/editSettings/EditSettings.vue +497 -497
  39. package/components/common/diagramMain/modals/editSettings/EditSettingsModal.vue +812 -812
  40. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  41. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  42. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  43. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  44. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +398 -398
  45. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  46. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +205 -205
  47. package/components/common/diagramMain/modals/lib/config/diagramConfig.ts +23 -23
  48. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  49. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  50. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  51. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  52. package/components/common/diagramMain/modals/migrateVmkernelAdapter/MigrateVmkernelAdapter.vue +537 -537
  53. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  54. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  55. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  56. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  57. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  58. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  59. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  60. package/components/common/diagramMain/port/Ports.vue +47 -47
  61. package/components/common/layout/theHeader/helpMenu/About.vue +85 -85
  62. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  63. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +152 -152
  64. package/components/common/spiceConsole/Drawer.vue +370 -370
  65. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  66. package/components/common/split/vertical/Vertical.vue +160 -223
  67. package/components/common/split/vertical/VerticalNew.vue +123 -0
  68. package/components/common/split/vertical/VerticalOld.vue +108 -0
  69. package/components/common/vm/actions/add/Add.vue +617 -617
  70. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  71. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +267 -267
  72. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +264 -264
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +118 -118
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +55 -55
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +147 -147
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +55 -55
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +74 -74
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceNew.vue +85 -85
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceOld.vue +91 -91
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +35 -35
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +48 -48
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +30 -30
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionNew.vue +46 -46
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +27 -27
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +100 -100
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  122. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  123. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  124. package/components/common/vm/actions/common/select/storage/new/New.vue +159 -159
  125. package/components/common/vm/actions/editSettings/EditSettings.vue +214 -214
  126. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +182 -182
  127. package/components/common/vm/actions/editSettings/new/New.vue +176 -176
  128. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  129. package/components/common/wizards/network/add/lib/config/steps.ts +464 -464
  130. package/composables/productNameLocal.ts +30 -30
  131. package/package.json +1 -1
  132. package/plugins/date.ts +233 -233
  133. package/plugins/recursion.ts +311 -311
  134. package/public/spice-console/lib/images/bitmap.js +203 -203
  135. package/public/spice-console/network/spicechannel.js +383 -383
  136. package/store/main/mutations.ts +7 -7
  137. package/store/main/state.ts +7 -7
  138. package/store/tasks/mappers/recentTasks.ts +2 -2
@@ -1,5 +1,5 @@
1
- export interface UI_I_DeviceOption {
2
- label: string
3
- value: any
4
- disabled?: boolean
5
- }
1
+ export interface UI_I_DeviceOption {
2
+ label: string
3
+ value: any
4
+ disabled?: boolean
5
+ }
@@ -1,223 +1,160 @@
1
- <template>
2
- <div :id="elementId" :class="['fill-parent vertical', { dragging: isDrag }]">
3
- <div class="vui-horizontal-panel firstPanel" :style="topPanelStyle">
4
- <div class="vui-horizontal-panel sec-nav-container">
5
- <slot name="firstPanel" />
6
- </div>
7
- </div>
8
-
9
- <div
10
- :id="`gutter-${elementId}`"
11
- class="gutter gutter-vertical"
12
- tabindex="0"
13
- @mousedown="isGrab = true"
14
- @focus="isFocus = true"
15
- @blur="isFocus = false"
16
- >
17
- <div class="gutter-vertical-handler"></div>
18
- </div>
19
-
20
- <div class="secondPanel bottom" :style="bottomPanelStyle">
21
- <slot name="secondPanel" />
22
- </div>
23
- </div>
24
- </template>
25
-
26
- <script setup lang="ts">
27
- import type { UI_I_SplitVerticalStyle } from '~/components/common/split/vertical/lib/models/interfaces'
28
-
29
- interface UI_I_SplitVerticalProps {
30
- parentElementSelector: string
31
- topPanelHForce?: string
32
- topPanelH?: number
33
- topPanelMinHeight?: number
34
- bottomPanelMinHeight?: number
35
- }
36
- const props = withDefaults(defineProps<UI_I_SplitVerticalProps>(), {
37
- topPanelMinHeight: 200, // 200px
38
- bottomPanelMinHeight: 200, // 200px
39
- topPanelHForce: '',
40
- topPanelH: undefined,
41
- })
42
- const emits = defineEmits<{
43
- (event: 'dragend', value: number): void
44
- }>()
45
-
46
- const topPanelStyle = computed<UI_I_SplitVerticalStyle>(() => {
47
- let height = `calc(${topPanelH.value}% - 1.5px)`
48
- if (props.topPanelHForce) {
49
- height = props.topPanelHForce
50
- }
51
- return { height }
52
- })
53
-
54
- const bottomPanelStyle = computed<UI_I_SplitVerticalStyle>(() => {
55
- let height = `calc(${100 - topPanelH.value}% - 1.5px)`
56
-
57
- return { height }
58
- })
59
-
60
- const isGrab = ref<boolean>(false)
61
- const isFocus = ref<boolean>(false)
62
- const isDrag = ref<boolean>(false)
63
- const topPanelH = ref<number>(80) // 80%
64
- watch(
65
- () => props.topPanelH,
66
- (newValue) => {
67
- if (newValue === undefined) return
68
- topPanelH.value = newValue
69
- },
70
- { immediate: true }
71
- )
72
-
73
- let parentElem: HTMLDivElement | null
74
- const mouseup = (): void => {
75
- if (!isGrab.value) {
76
- return
77
- }
78
-
79
- isGrab.value = false
80
- isDrag.value = false
81
-
82
- emits('dragend', topPanelH.value)
83
- }
84
- let mousemove = (e: MouseEvent): void => {
85
- if (!isGrab.value) {
86
- return
87
- }
88
-
89
- e.preventDefault()
90
- isDrag.value = true
91
-
92
- doDrag(e.clientY)
93
- }
94
- mousemove = useThrottle(mousemove)
95
-
96
- const doDrag = (clientY: number): void => {
97
- const parentElemTop = parentElem?.getBoundingClientRect().top || 0
98
- const parentHeight = parentElem?.clientHeight || 0
99
- const onePercent = parentHeight / 100
100
-
101
- const topLimit = clientY <= props.topPanelMinHeight + parentElemTop + 1.5
102
- const bottomLimit =
103
- clientY >= parentHeight + parentElemTop - props.bottomPanelMinHeight - 1.5
104
-
105
- if (topLimit || bottomLimit) {
106
- return
107
- }
108
-
109
- topPanelH.value = (clientY - parentElemTop) / onePercent
110
- }
111
-
112
- const elementId = `vertical${useUniqueId()}`
113
- const keydown = (e: KeyboardEvent): void => {
114
- if (!isFocus.value) return
115
-
116
- const gutter = document.getElementById(`gutter-${elementId}`)
117
-
118
- if (!gutter) return
119
-
120
- const gutterTop = ~~(gutter.getBoundingClientRect().top + 1.5)
121
-
122
- if (e.keyCode === 40) {
123
- doDrag(gutterTop + 10)
124
- }
125
- if (e.keyCode === 38) {
126
- doDrag(gutterTop - 10)
127
- }
128
- }
129
-
130
- onMounted(() => {
131
- parentElem = document.querySelector(props.parentElementSelector)
132
-
133
- window.addEventListener('mousemove', mousemove)
134
- window.addEventListener('mouseup', mouseup)
135
- window.addEventListener('keydown', keydown)
136
- })
137
- onUnmounted(() => {
138
- window.removeEventListener('mouseup', mouseup)
139
- window.removeEventListener('mousemove', mousemove)
140
- window.removeEventListener('keydown', keydown)
141
- })
142
- </script>
143
-
144
- <style scoped lang="scss">
145
- .fill-parent {
146
- &.dragging {
147
- .gutter-vertical.gutter {
148
- background-color: var(--gutter-active-bg-color);
149
- }
150
- }
151
-
152
- .vui-horizontal-panel.firstPanel {
153
- max-height: calc(100% - 36px);
154
- height: calc(100vh - 36px);
155
-
156
- .sec-nav-container {
157
- width: 100%;
158
- height: 100%;
159
- overflow: hidden;
160
- }
161
- }
162
-
163
- .gutter-vertical {
164
- position: relative;
165
- //min-height: 3px; // for old
166
- min-height: 4px; // for new
167
- background-color: var(--gutter-bg-color);
168
- transition-delay: 0.25s;
169
- transition-duration: 0.25s;
170
-
171
- &-handler {
172
- position: absolute;
173
- width: 100%;
174
- height: 10px;
175
- background: transparent;
176
- left: 0;
177
- top: -3.5px;
178
- z-index: 2;
179
- }
180
-
181
- &:focus {
182
- background-color: var(--gutter-active-bg-color);
183
- outline: none;
184
- }
185
-
186
- &:hover {
187
- background-color: var(--gutter-hover-bg-color);
188
- cursor: row-resize;
189
-
190
- &:before {
191
- // for old
192
- //background-color: hsla(0, 0%, 100%, 0.5);
193
- //box-shadow: inset 0 0 0 1px rgb(0 0 0 / 10%);
194
-
195
- // for new
196
- background-color: rgba(255, 255, 255, 0.8)
197
- }
198
- }
199
-
200
- &:before {
201
- content: '';
202
- position: relative;
203
- display: block;
204
- //background: rgba(0, 0, 0, 0.1); // for old
205
- background: #9da6ad;
206
- transition-delay: 0.25s;
207
- transition-duration: 0.25s;
208
- width: 24px;
209
- height: 100%;
210
- left: calc(50% - 12px);
211
- }
212
- }
213
- .secondPanel {
214
- height: auto;
215
- overflow: hidden;
216
- flex: 1;
217
-
218
- // for new
219
- box-shadow: 0 4px 20px 0 #0000001F;
220
- z-index: 1;
221
- }
222
- }
223
- </style>
1
+ <template>
2
+ <common-split-vertical-new
3
+ v-if="isNewView"
4
+ v-model:is-grab="isGrab"
5
+ v-model:is-focus="isFocus"
6
+ :element-id="elementId"
7
+ :is-drag="isDrag"
8
+ :top-panel-style="topPanelStyle"
9
+ :bottom-panel-style="bottomPanelStyle"
10
+ >
11
+ <template #firstPanel>
12
+ <slot name="firstPanel" />
13
+ </template>
14
+
15
+ <template #secondPanel>
16
+ <slot name="secondPanel" />
17
+ </template>
18
+ </common-split-vertical-new>
19
+
20
+ <common-split-vertical-old
21
+ v-else
22
+ v-model:is-grab="isGrab"
23
+ v-model:is-focus="isFocus"
24
+ :element-id="elementId"
25
+ :is-drag="isDrag"
26
+ :top-panel-style="topPanelStyle"
27
+ :bottom-panel-style="bottomPanelStyle"
28
+ >
29
+ <template #firstPanel>
30
+ <slot name="firstPanel" />
31
+ </template>
32
+
33
+ <template #secondPanel>
34
+ <slot name="secondPanel" />
35
+ </template>
36
+ </common-split-vertical-old>
37
+ </template>
38
+
39
+ <script setup lang="ts">
40
+ import type { UI_I_SplitVerticalStyle } from '~/components/common/split/vertical/lib/models/interfaces'
41
+
42
+ const props = withDefaults(defineProps<{
43
+ parentElementSelector: string
44
+ topPanelHForce?: string
45
+ topPanelH?: number
46
+ topPanelMinHeight?: number
47
+ bottomPanelMinHeight?: number
48
+ }>(), {
49
+ topPanelMinHeight: 200, // 200px
50
+ bottomPanelMinHeight: 200, // 200px
51
+ topPanelHForce: '',
52
+ topPanelH: undefined,
53
+ })
54
+ const emits = defineEmits<{
55
+ (event: 'dragend', value: number): void
56
+ }>()
57
+
58
+ const { $store }: any = useNuxtApp()
59
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
60
+
61
+ const topPanelStyle = computed<UI_I_SplitVerticalStyle>(() => {
62
+ let height = `calc(${topPanelH.value}% - 1.5px)`
63
+ if (props.topPanelHForce) {
64
+ height = props.topPanelHForce
65
+ }
66
+ return { height }
67
+ })
68
+
69
+ const bottomPanelStyle = computed<UI_I_SplitVerticalStyle>(() => {
70
+ let height = `calc(${100 - topPanelH.value}% - 1.5px)`
71
+
72
+ return { height }
73
+ })
74
+
75
+ const isGrab = ref<boolean>(false)
76
+ const isFocus = ref<boolean>(false)
77
+ const isDrag = ref<boolean>(false)
78
+ const topPanelH = ref<number>(80) // 80%
79
+ watch(
80
+ () => props.topPanelH,
81
+ (newValue) => {
82
+ if (newValue === undefined) return
83
+ topPanelH.value = newValue
84
+ },
85
+ { immediate: true }
86
+ )
87
+
88
+ let parentElem: HTMLDivElement | null
89
+ const mouseup = (): void => {
90
+ if (!isGrab.value) {
91
+ return
92
+ }
93
+
94
+ isGrab.value = false
95
+ isDrag.value = false
96
+
97
+ emits('dragend', topPanelH.value)
98
+ }
99
+ let mousemove = (e: MouseEvent): void => {
100
+ if (!isGrab.value) {
101
+ return
102
+ }
103
+
104
+ e.preventDefault()
105
+ isDrag.value = true
106
+
107
+ doDrag(e.clientY)
108
+ }
109
+ mousemove = useThrottle(mousemove)
110
+
111
+ const doDrag = (clientY: number): void => {
112
+ const parentElemTop = parentElem?.getBoundingClientRect().top || 0
113
+ const parentHeight = parentElem?.clientHeight || 0
114
+ const onePercent = parentHeight / 100
115
+
116
+ const topLimit = clientY <= props.topPanelMinHeight + parentElemTop + 1.5
117
+ const bottomLimit =
118
+ clientY >= parentHeight + parentElemTop - props.bottomPanelMinHeight - 1.5
119
+
120
+ if (topLimit || bottomLimit) {
121
+ return
122
+ }
123
+
124
+ topPanelH.value = (clientY - parentElemTop) / onePercent
125
+ }
126
+
127
+ const elementId = `vertical${useUniqueId()}`
128
+ const keydown = (e: KeyboardEvent): void => {
129
+ if (!isFocus.value) return
130
+
131
+ const gutter = document.getElementById(`gutter-${elementId}`)
132
+
133
+ if (!gutter) return
134
+
135
+ const gutterTop = ~~(gutter.getBoundingClientRect().top + 1.5)
136
+
137
+ if (e.keyCode === 40) {
138
+ doDrag(gutterTop + 10)
139
+ }
140
+ if (e.keyCode === 38) {
141
+ doDrag(gutterTop - 10)
142
+ }
143
+ }
144
+
145
+ onMounted(() => {
146
+ parentElem = document.querySelector(props.parentElementSelector)
147
+
148
+ window.addEventListener('mousemove', mousemove)
149
+ window.addEventListener('mouseup', mouseup)
150
+ window.addEventListener('keydown', keydown)
151
+ })
152
+ onUnmounted(() => {
153
+ window.removeEventListener('mouseup', mouseup)
154
+ window.removeEventListener('mousemove', mousemove)
155
+ window.removeEventListener('keydown', keydown)
156
+ })
157
+ </script>
158
+
159
+ <style scoped lang="scss">
160
+ </style>
@@ -0,0 +1,123 @@
1
+ <template>
2
+ <div :id="props.elementId" :class="['fill-parent vertical', { dragging: props.isDrag }]">
3
+ <div class="vui-horizontal-panel firstPanel" :style="props.topPanelStyle">
4
+ <div class="vui-horizontal-panel sec-nav-container">
5
+ <slot name="firstPanel" />
6
+ </div>
7
+ </div>
8
+
9
+ <div
10
+ :id="`gutter-${props.elementId}`"
11
+ class="gutter gutter-vertical"
12
+ tabindex="0"
13
+ @mousedown="isGrab = true"
14
+ @focus="isFocus = true"
15
+ @blur="isFocus = false"
16
+ >
17
+ <div class="gutter-vertical-handler"></div>
18
+ </div>
19
+
20
+ <div class="secondPanel bottom" :style="props.bottomPanelStyle">
21
+ <slot name="secondPanel" />
22
+ </div>
23
+ </div>
24
+ </template>
25
+
26
+ <script setup lang="ts">
27
+ const isGrab = defineModel<boolean>('isGrab')
28
+ const isFocus = defineModel<boolean>('isFocus')
29
+
30
+ const props = defineProps<{
31
+ elementId: number
32
+ isDrag: number
33
+ topPanelStyle: number
34
+ bottomPanelStyle: number
35
+ }>()
36
+ </script>
37
+
38
+ <style>
39
+ :root {
40
+ --gutter-handler-bg-color: #9da6ad;
41
+ --gutter-handler-active-bg-color: #FFFFFFCC;
42
+ --second-panel-box-shadow: 0 4px 20px 0 #0000001F, 0 -1px 12px 0 #00000014;
43
+ }
44
+ :root.dark-theme {
45
+ --gutter-handler-bg-color: #9DA6AD52;
46
+ --gutter-handler-active-bg-color: #213444CC;
47
+ --second-panel-box-shadow: 0 4px 20px 0 #0000001F;
48
+ }
49
+ </style>
50
+
51
+ <style scoped lang="scss">
52
+ .fill-parent {
53
+ &.dragging {
54
+ .gutter-vertical.gutter {
55
+ background-color: var(--gutter-active-bg-color);
56
+ }
57
+ }
58
+
59
+ .vui-horizontal-panel.firstPanel {
60
+ max-height: calc(100% - 36px);
61
+ height: calc(100vh - 36px);
62
+
63
+ .sec-nav-container {
64
+ width: 100%;
65
+ height: 100%;
66
+ overflow: hidden;
67
+ }
68
+ }
69
+
70
+ .gutter-vertical {
71
+ position: relative;
72
+ min-height: 4px;
73
+ background-color: var(--gutter-bg-color);
74
+ transition-delay: 0.25s;
75
+ transition-duration: 0.25s;
76
+
77
+ &-handler {
78
+ position: absolute;
79
+ width: 100%;
80
+ height: 10px;
81
+ background: transparent;
82
+ left: 0;
83
+ top: -3.5px;
84
+ z-index: 2;
85
+ }
86
+
87
+ &:focus {
88
+ background-color: var(--gutter-active-bg-color);
89
+ outline: none;
90
+ }
91
+
92
+ &:hover {
93
+ background-color: var(--gutter-hover-bg-color);
94
+ cursor: row-resize;
95
+
96
+ &:before {
97
+ background-color: var(--gutter-handler-active-bg-color);
98
+ }
99
+ }
100
+
101
+ &:before {
102
+ content: '';
103
+ position: relative;
104
+ display: block;
105
+ background: var(--gutter-handler-bg-color);
106
+ transition-delay: 0.25s;
107
+ transition-duration: 0.25s;
108
+ width: 24px;
109
+ height: 2px;
110
+ left: calc(50% - 12px);
111
+ top: calc(50% - 1px);
112
+ border-radius: 4px;
113
+ }
114
+ }
115
+ .secondPanel {
116
+ height: auto;
117
+ overflow: hidden;
118
+ flex: 1;
119
+ box-shadow: var(--second-panel-box-shadow);
120
+ z-index: 1;
121
+ }
122
+ }
123
+ </style>
@@ -0,0 +1,108 @@
1
+ <template>
2
+ <div :id="props.elementId" :class="['fill-parent vertical', { dragging: props.isDrag }]">
3
+ <div class="vui-horizontal-panel firstPanel" :style="props.topPanelStyle">
4
+ <div class="vui-horizontal-panel sec-nav-container">
5
+ <slot name="firstPanel" />
6
+ </div>
7
+ </div>
8
+
9
+ <div
10
+ :id="`gutter-${props.elementId}`"
11
+ class="gutter gutter-vertical"
12
+ tabindex="0"
13
+ @mousedown="isGrab = true"
14
+ @focus="isFocus = true"
15
+ @blur="isFocus = false"
16
+ >
17
+ <div class="gutter-vertical-handler"></div>
18
+ </div>
19
+
20
+ <div class="secondPanel bottom" :style="props.bottomPanelStyle">
21
+ <slot name="secondPanel" />
22
+ </div>
23
+ </div>
24
+ </template>
25
+
26
+ <script setup lang="ts">
27
+ const isGrab = defineModel<boolean>('isGrab')
28
+ const isFocus = defineModel<boolean>('isFocus')
29
+
30
+ const props = defineProps<{
31
+ elementId: number
32
+ isDrag: number
33
+ topPanelStyle: number
34
+ bottomPanelStyle: number
35
+ }>()
36
+ </script>
37
+
38
+ <style scoped lang="scss">
39
+ .fill-parent {
40
+ &.dragging {
41
+ .gutter-vertical.gutter {
42
+ background-color: var(--gutter-active-bg-color);
43
+ }
44
+ }
45
+
46
+ .vui-horizontal-panel.firstPanel {
47
+ max-height: calc(100% - 36px);
48
+ height: calc(100vh - 36px);
49
+
50
+ .sec-nav-container {
51
+ width: 100%;
52
+ height: 100%;
53
+ overflow: hidden;
54
+ }
55
+ }
56
+
57
+ .gutter-vertical {
58
+ position: relative;
59
+ min-height: 3px;
60
+ background-color: var(--gutter-bg-color);
61
+ transition-delay: 0.25s;
62
+ transition-duration: 0.25s;
63
+
64
+ &-handler {
65
+ position: absolute;
66
+ width: 100%;
67
+ height: 10px;
68
+ background: transparent;
69
+ left: 0;
70
+ top: -3.5px;
71
+ z-index: 2;
72
+ }
73
+
74
+ &:focus {
75
+ background-color: var(--gutter-active-bg-color);
76
+ outline: none;
77
+ }
78
+
79
+ &:hover {
80
+ background-color: var(--gutter-hover-bg-color);
81
+ cursor: row-resize;
82
+
83
+ &:before {
84
+ background-color: hsla(0, 0%, 100%, 0.5);
85
+ box-shadow: inset 0 0 0 1px rgb(0 0 0 / 10%);
86
+ }
87
+ }
88
+
89
+ &:before {
90
+ content: '';
91
+ position: relative;
92
+ display: block;
93
+ background: rgba(0, 0, 0, 0.1);
94
+ background: #9da6ad;
95
+ transition-delay: 0.25s;
96
+ transition-duration: 0.25s;
97
+ width: 24px;
98
+ height: 100%;
99
+ left: calc(50% - 12px);
100
+ }
101
+ }
102
+ .secondPanel {
103
+ height: auto;
104
+ overflow: hidden;
105
+ flex: 1;
106
+ }
107
+ }
108
+ </style>