bfg-common 1.0.15 → 1.0.17

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 (120) hide show
  1. package/components/atoms/alert/Notification.vue +167 -167
  2. package/components/atoms/autocomplete/Autocomplete.vue +236 -236
  3. package/components/atoms/combobox/Combobox.vue +131 -131
  4. package/components/atoms/datepicker/Datepicker.vue +612 -612
  5. package/components/atoms/dropdown/tree/Tree.vue +134 -134
  6. package/components/atoms/list/SelectList.vue +62 -62
  7. package/components/atoms/modal/bySteps/BySteps.vue +234 -234
  8. package/components/atoms/modal/byStepsSecond/ByStepsSecond.vue +174 -174
  9. package/components/atoms/nav/NavBar.vue +116 -116
  10. package/components/atoms/nav/VerticalNavBar.vue +89 -89
  11. package/components/atoms/notificationBar/NotificationBar.vue +175 -175
  12. package/components/atoms/perPage/PerPage.vue +52 -52
  13. package/components/atoms/popup/SimplePopup.vue +90 -90
  14. package/components/atoms/step/VerticalStep.vue +104 -104
  15. package/components/atoms/switch/Switch.vue +107 -107
  16. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +204 -204
  17. package/components/atoms/table/dataGrid/DataGridPage.vue +189 -189
  18. package/components/atoms/table/dataGrid/DataGridPagination.vue +83 -83
  19. package/components/atoms/table/dataGrid/config/itemsPerPage.ts +20 -20
  20. package/components/atoms/tabs/Tabs.vue +189 -189
  21. package/components/atoms/tooltip/Signpost.vue +224 -224
  22. package/components/common/accordion/Accordion.vue +176 -176
  23. package/components/common/accordion/Recursion.vue +195 -195
  24. package/components/common/adapterManager/AdapterManager.vue +9 -9
  25. package/components/common/adapterManager/AddAdapterWarningModal.vue +82 -82
  26. package/components/common/adapterManager/NoActiveAdaptersModal.vue +62 -62
  27. package/components/common/adapterManager/NoConnectedActiveAdaptersModal.vue +62 -62
  28. package/components/common/adapterManager/ui/table/Table.vue +2 -2
  29. package/components/common/addNetworking/AddNetworking.vue +2 -2
  30. package/components/common/addNetworking/config/sendData.ts +1 -1
  31. package/components/common/addNetworking/mappers/mappers.ts +1 -1
  32. package/components/common/browse/Browse.vue +182 -182
  33. package/components/common/browse/blocks/Title.vue +66 -66
  34. package/components/common/diagramMain/DiagramMain.vue +2 -2
  35. package/components/common/diagramMain/Header.vue +160 -160
  36. package/components/common/diagramMain/adapter/AdapterItem.vue +227 -227
  37. package/components/common/diagramMain/adapter/AdapterItems.vue +57 -57
  38. package/components/common/diagramMain/config/initial.ts +1 -1
  39. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +1 -1
  40. package/components/common/diagramMain/modals/config/initial.ts +31 -45
  41. package/components/common/diagramMain/modals/editSettings/EditSettings.vue +6 -5
  42. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +9 -4
  43. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +2 -1
  44. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +5 -4
  45. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +339 -339
  46. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +202 -202
  47. package/components/common/diagramMain/modals/remove/RemoveModal.vue +226 -226
  48. package/components/common/diagramMain/modals/viewSettings/Info.vue +94 -94
  49. package/components/common/diagramMain/models/interfaces.ts +53 -74
  50. package/components/common/diagramMain/models/types.ts +1 -1
  51. package/components/common/diagramMain/network/Contents.vue +238 -238
  52. package/components/common/feedback/Buttons.vue +232 -232
  53. package/components/common/feedback/Message.vue +468 -468
  54. package/components/common/feedback/VisitPortal.vue +54 -54
  55. package/components/common/modals/Rename.vue +165 -165
  56. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/Form.vue +388 -388
  57. package/components/common/perPage/PerPage.vue +51 -51
  58. package/components/common/recursionTree/RecursionTree.vue +201 -201
  59. package/components/common/vm/actions/add/Add.vue +687 -687
  60. package/components/common/vm/actions/add/FolderTreeView.vue +83 -83
  61. package/components/common/vm/actions/add/config/capabilities.ts +670 -670
  62. package/components/common/vm/actions/add/customizeHardware/CustomizeHardware.vue +1 -1
  63. package/components/common/vm/actions/add/customizeHardware/virtualHardware/browseView/BrowseView.vue +203 -203
  64. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +55 -55
  65. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CoresPerSocket.vue +1 -1
  66. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Cpu.vue +8 -5
  67. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CpuModel.vue +2 -2
  68. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/MaxCpu.vue +10 -4
  69. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/shares/Shares.vue +7 -3
  70. package/components/common/vm/actions/add/customizeHardware/virtualHardware/limit/Limit.vue +7 -3
  71. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/Memory.vue +9 -5
  72. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/Location.vue +10 -10
  73. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +10 -6
  74. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/cache/Cache.vue +1 -1
  75. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIops.vue +7 -3
  76. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/provisioning/Provisioning.vue +2 -2
  77. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/Location.vue +1 -1
  78. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +256 -252
  79. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterType.vue +86 -86
  80. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +6 -6
  81. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +3 -3
  82. package/components/common/vm/actions/add/customizeHardware/virtualHardware/reservation/Reservation.vue +231 -228
  83. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/TotalVideoMemory.vue +1 -1
  84. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/VideoCard.vue +173 -169
  85. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +1 -1
  86. package/components/common/vm/actions/add/customizeHardware/vmoptions/Vmoptions.vue +145 -141
  87. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/BootOptions.vue +1 -1
  88. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +1 -1
  89. package/components/common/vm/actions/add/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +114 -114
  90. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/RemoteConsoleOptions.vue +7 -3
  91. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/ImgCompression.vue +1 -1
  92. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/JpegCompression.vue +1 -1
  93. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +50 -50
  94. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/mouseMode/MouseMode.vue +52 -52
  95. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/StreamingMode.vue +1 -1
  96. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/type/Type.vue +1 -1
  97. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/ZlibCompression.vue +1 -1
  98. package/components/common/vm/actions/add/select/compatibility/Compatibility.vue +6 -6
  99. package/components/common/vm/actions/add/select/computeResource/ComputeResource.vue +170 -170
  100. package/components/common/vm/actions/add/select/computeResource/TreeView.vue +126 -126
  101. package/components/common/vm/actions/add/select/name/Name.vue +173 -173
  102. package/components/common/vm/actions/add/select/os/os.vue +221 -221
  103. package/components/common/vm/actions/add/utils.ts +118 -118
  104. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/TablesView.vue +141 -141
  105. package/components/common/wizards/datastore/add/nfs/configuration/Configuration.vue +373 -373
  106. package/components/common/wizards/datastore/add/nfs/configuration/serversList/ServersList.vue +123 -123
  107. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/KerberosAuthentication.vue +54 -54
  108. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/HostTable.vue +131 -131
  109. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/PartitionConfiguration.vue +230 -230
  110. package/models/store/storage/interfaces.ts +32 -32
  111. package/package.json +1 -1
  112. package/plugins/recursion.ts +230 -230
  113. package/public/spice-console/application/codec.js +257 -257
  114. package/public/spice-console/lib/rasterEngine.js +907 -907
  115. package/public/spice-console-minify/lib/decoder/dixie.min.js +4 -4
  116. package/public/spice-console-minify/lib/jgestures.min.js +24 -24
  117. package/public/spice-console-minify/lib/jquery-2.0.3.min.js +24 -24
  118. package/public/spice-console-minify/lib/jquery-mousewheel.min.js +11 -11
  119. package/public/spice-console-minify/lib/jquery-visibility.min.js +1 -1
  120. package/public/spice-console-minify/lib/lodash.4.0.0.min.js +5 -5
@@ -1,174 +1,174 @@
1
- <template>
2
- <div v-if="props.show" class="modal clr-wizard wizard-xl">
3
- <div class="modal-dialog modal-xl">
4
- <div class="wizard-modal-titlebar ui-draggable-handle">
5
- <h3>{{ props.title }}</h3>
6
- <button :id="`${props.testId}-close-icon`" class="close" @click="hide">
7
- <atoms-the-icon class="close-icon" name="close" />
8
- </button>
9
- </div>
10
- <div class="modal-content-wrapper">
11
- <nav class="wizard-panel-TOC">
12
- <atoms-step-vertical-step
13
- :test-id="props.testId"
14
- :items="props.stepItems"
15
- :step-position="props.stepPosition"
16
- type="check"
17
- @change="changeStep"
18
- />
19
- </nav>
20
- <div class="modal-content">
21
- <div class="modal-body">
22
- <slot name="modalBody" />
23
- </div>
24
- <div class="modal-footer">
25
- <slot name="modalFooter">
26
- <button
27
- :id="`${props.testId}-cancel-button`"
28
- class="btn btn-link"
29
- @click="hide"
30
- >
31
- {{ localization.cancel }}
32
- </button>
33
- <button
34
- v-show="props.stepPosition > 0"
35
- :id="`${props.testId}-back-button`"
36
- class="btn btn-outline"
37
- @click="back"
38
- >
39
- {{ localization.back }}
40
- </button>
41
- <button
42
- v-if="props.stepPosition === props.stepItems.length - 1"
43
- :id="`${props.testId}-finish-button`"
44
- class="btn btn-success"
45
- @click="finish"
46
- >
47
- {{ localization.finish }}
48
- </button>
49
- <button
50
- v-else
51
- :id="`${props.testId}-next-button`"
52
- class="btn btn-primary"
53
- @click="next"
54
- >
55
- {{ localization.next }}
56
- </button>
57
- </slot>
58
- </div>
59
- </div>
60
- </div>
61
- </div>
62
- <div class="modal-backdrop" />
63
- </div>
64
- </template>
65
-
66
- <script setup lang="ts">
67
- import { UI_I_VerticalStepItem } from '~/components/atoms/models/interfaces'
68
-
69
- const props = withDefaults(
70
- defineProps<{
71
- testId?: string
72
- show: boolean
73
- title: string
74
- stepItems: UI_I_VerticalStepItem
75
- stepPosition: number
76
- }>(),
77
- { testId: 'ui-modal-by-steps' }
78
- )
79
- const emits = defineEmits<{
80
- (event: 'finish'): void
81
- (event: 'next'): void
82
- (event: 'back'): void
83
- (event: 'hide'): void
84
- (event: 'change-step', num: number): void
85
- }>()
86
-
87
- const localization = computed(() => useLocal())
88
- const hide = (): void => emits('hide')
89
-
90
- const finish = (): void => {
91
- emits('finish')
92
- }
93
- const next = (): void => {
94
- emits('next')
95
- }
96
- const back = (): void => {
97
- emits('back')
98
- }
99
- const changeStep = (key: number): void => {
100
- emits('change-step', key)
101
- }
102
- </script>
103
-
104
- <style scoped lang="scss">
105
- .modal {
106
- position: fixed;
107
- top: 0;
108
- bottom: 0;
109
- right: 0;
110
- left: 0;
111
- z-index: 1050;
112
- display: flex;
113
- flex-direction: column;
114
- justify-content: center;
115
- align-items: center;
116
- padding: 48px;
117
- overflow-y: auto;
118
-
119
- .modal-dialog {
120
- padding: 24px;
121
- background-color: var(--modal-other-bg-color);
122
- border-radius: 6px;
123
-
124
- .wizard-modal-titlebar {
125
- display: flex;
126
- justify-content: space-between;
127
- align-items: center;
128
- width: 100%;
129
- border-bottom: 1px solid #a6a6a6;
130
- color: #333;
131
-
132
- & > h3 {
133
- color: var(--main-color-mode);
134
- }
135
-
136
- .close {
137
- display: flex;
138
- width: 16px;
139
- height: 16px;
140
- .close-icon {
141
- fill: var(--close-icon-color);
142
- }
143
- }
144
- }
145
-
146
- .clr-wizard-stepnav {
147
- padding: 10px 5px 10px 6px;
148
- }
149
-
150
- .modal-content {
151
- background-color: var(--modal-other-bg-color);
152
- .modal-footer {
153
- display: flex;
154
- justify-content: flex-end;
155
- padding: 24px 24px 0 0;
156
- }
157
- }
158
-
159
- .modal-backdrop {
160
- opacity: 1;
161
- background-color: rgba(0, 0, 0, 0.6);
162
- }
163
- }
164
- }
165
- </style>
166
-
167
- <style>
168
- :root {
169
- --close-icon-color: #8c8c8c;
170
- }
171
- :root.dark-theme {
172
- --close-icon-color: #fff;
173
- }
174
- </style>
1
+ <template>
2
+ <div v-if="props.show" class="modal clr-wizard wizard-xl">
3
+ <div class="modal-dialog modal-xl">
4
+ <div class="wizard-modal-titlebar ui-draggable-handle">
5
+ <h3>{{ props.title }}</h3>
6
+ <button :id="`${props.testId}-close-icon`" class="close" @click="hide">
7
+ <atoms-the-icon class="close-icon" name="close" />
8
+ </button>
9
+ </div>
10
+ <div class="modal-content-wrapper">
11
+ <nav class="wizard-panel-TOC">
12
+ <atoms-step-vertical-step
13
+ :test-id="props.testId"
14
+ :items="props.stepItems"
15
+ :step-position="props.stepPosition"
16
+ type="check"
17
+ @change="changeStep"
18
+ />
19
+ </nav>
20
+ <div class="modal-content">
21
+ <div class="modal-body">
22
+ <slot name="modalBody" />
23
+ </div>
24
+ <div class="modal-footer">
25
+ <slot name="modalFooter">
26
+ <button
27
+ :id="`${props.testId}-cancel-button`"
28
+ class="btn btn-link"
29
+ @click="hide"
30
+ >
31
+ {{ localization.cancel }}
32
+ </button>
33
+ <button
34
+ v-show="props.stepPosition > 0"
35
+ :id="`${props.testId}-back-button`"
36
+ class="btn btn-outline"
37
+ @click="back"
38
+ >
39
+ {{ localization.back }}
40
+ </button>
41
+ <button
42
+ v-if="props.stepPosition === props.stepItems.length - 1"
43
+ :id="`${props.testId}-finish-button`"
44
+ class="btn btn-success"
45
+ @click="finish"
46
+ >
47
+ {{ localization.finish }}
48
+ </button>
49
+ <button
50
+ v-else
51
+ :id="`${props.testId}-next-button`"
52
+ class="btn btn-primary"
53
+ @click="next"
54
+ >
55
+ {{ localization.next }}
56
+ </button>
57
+ </slot>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ <div class="modal-backdrop" />
63
+ </div>
64
+ </template>
65
+
66
+ <script setup lang="ts">
67
+ import { UI_I_VerticalStepItem } from '~/components/atoms/models/interfaces'
68
+
69
+ const props = withDefaults(
70
+ defineProps<{
71
+ testId?: string
72
+ show: boolean
73
+ title: string
74
+ stepItems: UI_I_VerticalStepItem
75
+ stepPosition: number
76
+ }>(),
77
+ { testId: 'ui-modal-by-steps' }
78
+ )
79
+ const emits = defineEmits<{
80
+ (event: 'finish'): void
81
+ (event: 'next'): void
82
+ (event: 'back'): void
83
+ (event: 'hide'): void
84
+ (event: 'change-step', num: number): void
85
+ }>()
86
+
87
+ const localization = computed(() => useLocal())
88
+ const hide = (): void => emits('hide')
89
+
90
+ const finish = (): void => {
91
+ emits('finish')
92
+ }
93
+ const next = (): void => {
94
+ emits('next')
95
+ }
96
+ const back = (): void => {
97
+ emits('back')
98
+ }
99
+ const changeStep = (key: number): void => {
100
+ emits('change-step', key)
101
+ }
102
+ </script>
103
+
104
+ <style scoped lang="scss">
105
+ .modal {
106
+ position: fixed;
107
+ top: 0;
108
+ bottom: 0;
109
+ right: 0;
110
+ left: 0;
111
+ z-index: 1050;
112
+ display: flex;
113
+ flex-direction: column;
114
+ justify-content: center;
115
+ align-items: center;
116
+ padding: 48px;
117
+ overflow-y: auto;
118
+
119
+ .modal-dialog {
120
+ padding: 24px;
121
+ background-color: var(--modal-other-bg-color);
122
+ border-radius: 6px;
123
+
124
+ .wizard-modal-titlebar {
125
+ display: flex;
126
+ justify-content: space-between;
127
+ align-items: center;
128
+ width: 100%;
129
+ border-bottom: 1px solid #a6a6a6;
130
+ color: #333;
131
+
132
+ & > h3 {
133
+ color: var(--main-color-mode);
134
+ }
135
+
136
+ .close {
137
+ display: flex;
138
+ width: 16px;
139
+ height: 16px;
140
+ .close-icon {
141
+ fill: var(--close-icon-color);
142
+ }
143
+ }
144
+ }
145
+
146
+ .clr-wizard-stepnav {
147
+ padding: 10px 5px 10px 6px;
148
+ }
149
+
150
+ .modal-content {
151
+ background-color: var(--modal-other-bg-color);
152
+ .modal-footer {
153
+ display: flex;
154
+ justify-content: flex-end;
155
+ padding: 24px 24px 0 0;
156
+ }
157
+ }
158
+
159
+ .modal-backdrop {
160
+ opacity: 1;
161
+ background-color: rgba(0, 0, 0, 0.6);
162
+ }
163
+ }
164
+ }
165
+ </style>
166
+
167
+ <style>
168
+ :root {
169
+ --close-icon-color: #8c8c8c;
170
+ }
171
+ :root.dark-theme {
172
+ --close-icon-color: #fff;
173
+ }
174
+ </style>
@@ -1,116 +1,116 @@
1
- <template>
2
- <nav :id="id" :class="['nav', { 'not-collapse': notCollapse }]">
3
- <ul>
4
- <li v-for="(item, key) in props.items" :key="key" class="nav-item">
5
- <atoms-collapse-nav-item
6
- :test-id="`${props.testId}-item-${key}`"
7
- :is-link="props.isLink"
8
- :item="item"
9
- :value="props.modelValue"
10
- btn-class="btn btn-link nav-link"
11
- @change="change"
12
- />
13
- </li>
14
- <atoms-collapse-nav
15
- v-show="collapsedItems.length && !notCollapse"
16
- :test-id="`${props.testId}-container`"
17
- :items="collapsedItems"
18
- :is-link="props.isLink"
19
- :value="props.modelValue"
20
- @change="change"
21
- />
22
- </ul>
23
- </nav>
24
- </template>
25
-
26
- <script setup lang="ts">
27
- import { UI_I_CollapseNavItem } from '~/components/atoms/collapse/models/interfaces'
28
-
29
- const props = withDefaults(
30
- defineProps<{
31
- testId?: string
32
- items: UI_I_CollapseNavItem[]
33
- modelValue?: number | string
34
- isLink?: boolean
35
- notCollapse?: boolean
36
- }>(),
37
- { testId: 'ui-nav-bar' }
38
- )
39
- const emits = defineEmits<{
40
- (event: 'update:model-value', num: number): void
41
- (event: 'change', num: number): void
42
- }>()
43
-
44
- const change = (value: number): void => {
45
- emits('update:model-value', value)
46
- emits('change', value)
47
- }
48
-
49
- const visibleCount = ref(props.items.length)
50
- const collapsedItems = computed<UI_I_CollapseNavItem[]>(() => {
51
- return props.items.filter((_, index) => {
52
- return index >= visibleCount.value
53
- })
54
- })
55
-
56
- let outputSize = (): void => {
57
- const el = document.getElementById(id.value)
58
- if (!el) return
59
-
60
- const elWidth = el.clientWidth
61
- const elItems = el.children[0].children
62
- const elItemsMarginLeft = parseInt(getComputedStyle(elItems[0]).marginLeft)
63
- const elItemsMarginRight = parseInt(getComputedStyle(elItems[0]).marginRight)
64
- const childrenMarginY = elItemsMarginLeft + elItemsMarginRight
65
-
66
- let childrenWidth = 0
67
- let count = 0
68
- for (let i = 0; i < elItems.length; i++) {
69
- childrenWidth += elItems[i].clientWidth + childrenMarginY
70
- const isWrap = elWidth < childrenWidth
71
-
72
- if (isWrap) break
73
- count++
74
- }
75
-
76
- visibleCount.value = count
77
- }
78
- outputSize = useThrottle(outputSize)
79
-
80
- const id = ref<string>('')
81
- const setResizeObserve = (): void => {
82
- const el = document.getElementById(id.value)
83
-
84
- if (!el) {
85
- setTimeout(setResizeObserve, 0)
86
- return
87
- }
88
-
89
- new ResizeObserver(outputSize).observe(el)
90
- }
91
- onMounted(() => {
92
- setResizeObserve()
93
- id.value = `nav-bar${useUniqueId()}`
94
- })
95
- </script>
96
-
97
- <style scoped lang="scss">
98
- .nav {
99
- box-shadow: inset 0 -0.05rem 0 var(--nav-panel-border-color);
100
- align-items: flex-start;
101
-
102
- &.not-collapse {
103
- ul {
104
- flex-wrap: nowrap;
105
- }
106
- }
107
-
108
- ul {
109
- position: relative;
110
- height: 36px;
111
- overflow: hidden;
112
- display: flex;
113
- flex-wrap: wrap;
114
- }
115
- }
116
- </style>
1
+ <template>
2
+ <nav :id="id" :class="['nav', { 'not-collapse': notCollapse }]">
3
+ <ul>
4
+ <li v-for="(item, key) in props.items" :key="key" class="nav-item">
5
+ <atoms-collapse-nav-item
6
+ :test-id="`${props.testId}-item-${key}`"
7
+ :is-link="props.isLink"
8
+ :item="item"
9
+ :value="props.modelValue"
10
+ btn-class="btn btn-link nav-link"
11
+ @change="change"
12
+ />
13
+ </li>
14
+ <atoms-collapse-nav
15
+ v-show="collapsedItems.length && !notCollapse"
16
+ :test-id="`${props.testId}-container`"
17
+ :items="collapsedItems"
18
+ :is-link="props.isLink"
19
+ :value="props.modelValue"
20
+ @change="change"
21
+ />
22
+ </ul>
23
+ </nav>
24
+ </template>
25
+
26
+ <script setup lang="ts">
27
+ import { UI_I_CollapseNavItem } from '~/components/atoms/collapse/models/interfaces'
28
+
29
+ const props = withDefaults(
30
+ defineProps<{
31
+ testId?: string
32
+ items: UI_I_CollapseNavItem[]
33
+ modelValue?: number | string
34
+ isLink?: boolean
35
+ notCollapse?: boolean
36
+ }>(),
37
+ { testId: 'ui-nav-bar' }
38
+ )
39
+ const emits = defineEmits<{
40
+ (event: 'update:model-value', num: number): void
41
+ (event: 'change', num: number): void
42
+ }>()
43
+
44
+ const change = (value: number): void => {
45
+ emits('update:model-value', value)
46
+ emits('change', value)
47
+ }
48
+
49
+ const visibleCount = ref(props.items.length)
50
+ const collapsedItems = computed<UI_I_CollapseNavItem[]>(() => {
51
+ return props.items.filter((_, index) => {
52
+ return index >= visibleCount.value
53
+ })
54
+ })
55
+
56
+ let outputSize = (): void => {
57
+ const el = document.getElementById(id.value)
58
+ if (!el) return
59
+
60
+ const elWidth = el.clientWidth
61
+ const elItems = el.children[0].children
62
+ const elItemsMarginLeft = parseInt(getComputedStyle(elItems[0]).marginLeft)
63
+ const elItemsMarginRight = parseInt(getComputedStyle(elItems[0]).marginRight)
64
+ const childrenMarginY = elItemsMarginLeft + elItemsMarginRight
65
+
66
+ let childrenWidth = 0
67
+ let count = 0
68
+ for (let i = 0; i < elItems.length; i++) {
69
+ childrenWidth += elItems[i].clientWidth + childrenMarginY
70
+ const isWrap = elWidth < childrenWidth
71
+
72
+ if (isWrap) break
73
+ count++
74
+ }
75
+
76
+ visibleCount.value = count
77
+ }
78
+ outputSize = useThrottle(outputSize)
79
+
80
+ const id = ref<string>('')
81
+ const setResizeObserve = (): void => {
82
+ const el = document.getElementById(id.value)
83
+
84
+ if (!el) {
85
+ setTimeout(setResizeObserve, 0)
86
+ return
87
+ }
88
+
89
+ new ResizeObserver(outputSize).observe(el)
90
+ }
91
+ onMounted(() => {
92
+ setResizeObserve()
93
+ id.value = `nav-bar${useUniqueId()}`
94
+ })
95
+ </script>
96
+
97
+ <style scoped lang="scss">
98
+ .nav {
99
+ box-shadow: inset 0 -0.05rem 0 var(--nav-panel-border-color);
100
+ align-items: flex-start;
101
+
102
+ &.not-collapse {
103
+ ul {
104
+ flex-wrap: nowrap;
105
+ }
106
+ }
107
+
108
+ ul {
109
+ position: relative;
110
+ height: 36px;
111
+ overflow: hidden;
112
+ display: flex;
113
+ flex-wrap: wrap;
114
+ }
115
+ }
116
+ </style>