bfg-common 1.3.260 → 1.3.261

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.
@@ -1,362 +1,363 @@
1
- <template>
2
- <div
3
- :class="['main-navigation-panel', { pinned: menuPined }]"
4
- @mouseenter="mainMenuHovered = true"
5
- @mouseleave="mainMenuHovered = false"
6
- >
7
- <div
8
- v-show="showMenu"
9
- :class="['nav-context', { collapsed: menuCollapsed }]"
10
- >
11
- <div class="category-wrap">
12
- <div class="clr-vertical-nav">
13
- <button
14
- v-if="menuPined"
15
- id="nav-trigger"
16
- data-id="navigation-panel-trigger"
17
- class="nav-trigger"
18
- @click="collapseMenu"
19
- >
20
- <span class="nav-trigger-icon">
21
- <atoms-the-icon name="doubleArrows" />
22
- </span>
23
- </button>
24
- <div class="nav-content">
25
- <template v-for="(item, key) in navigationItems" :key="key">
26
- <nuxt-link
27
- v-for="(item2, key2) in item"
28
- :id="`nav-item-${key}-${key2}`"
29
- :key="item2.id"
30
- :data-id="item2.testId"
31
- class="nav-link"
32
- active-class="active"
33
- :to="item2.to"
34
- :title="item2.title"
35
- @click="hideMainMenu"
36
- >
37
- <span class="nav-text">
38
- <span
39
- :class="['clr-flex-shrink-0 category-icon', item2.iconName]"
40
- />
41
- <span class="category-text" :title="item2.title">{{
42
- item2.title
43
- }}</span>
44
- </span>
45
- </nuxt-link>
46
- <div
47
- v-show="key !== navigationItems.length - 1"
48
- class="nav-divider"
49
- />
50
- </template>
51
- </div>
52
- </div>
53
- </div>
54
-
55
- <div v-show="!menuCollapsed" class="pin-wrap">
56
- <div class="clr-checkbox-wrapper">
57
- <input
58
- id="pin-menu-control"
59
- v-model="menuPined"
60
- data-id="navigation-panel-pin-menu-control"
61
- type="checkbox"
62
- :disabled="props.disabledPin"
63
- @change="changeMenuPin"
64
- />
65
- <label for="pin-menu-control">{{ localization.pinMenu }}</label>
66
- </div>
67
- </div>
68
- </div>
69
- </div>
70
- </template>
71
-
72
- <script setup lang="ts">
73
- import { UI_I_Localization } from '~/lib/models/interfaces'
74
- import { UI_I_NavigationItem } from '~/components/common/mainNavigationPanel/lib/models/interfaces'
75
- import { UI_T_ParentStatus } from '~/components/common/mainNavigationPanel/lib/models/types'
76
-
77
- const props = defineProps<{
78
- mainMenuStatus: boolean
79
- navigationItems: UI_I_NavigationItem[][]
80
- parentStatus: UI_T_ParentStatus
81
- disabledPin: boolean
82
- }>()
83
- const emits = defineEmits<{
84
- (event: 'toggle', value: boolean): void
85
- }>()
86
-
87
- // const { $store } = useNuxtApp()
88
-
89
- const localization = computed<UI_I_Localization>(() => useLocal())
90
- const route = useRoute()
91
-
92
- const showMenu = computed<boolean>(
93
- () => props.mainMenuStatus || menuPined.value
94
- )
95
-
96
- const menuPined = ref<boolean>(false)
97
- const changeMenuPin = (): void => {
98
- useLocalStorage('menuPined', menuPined.value)
99
- }
100
- const setMenuPined = (): void => {
101
- menuPined.value = props.disabledPin ? false : useLocalStorage('menuPined')
102
- }
103
- watch(
104
- () => props.disabledPin,
105
- () => {
106
- setMenuPined()
107
- },
108
- { immediate: true }
109
- )
110
-
111
- const menuCollapsed = ref<boolean>(false)
112
- const collapseMenu = (): void => {
113
- menuCollapsed.value = !menuCollapsed.value
114
- useLocalStorage('menuCollapsed', menuCollapsed.value)
115
- }
116
-
117
- const mainMenuHovered = ref<boolean>(false)
118
-
119
- const clickWindow = (event: Event): void => {
120
- const target = event.target as any
121
- if (
122
- menuPined.value ||
123
- mainMenuHovered.value ||
124
- target.className.baseVal?.includes('menu-icon') ||
125
- target.className.baseVal?.includes('clr-i-outline')
126
- ) {
127
- return
128
- }
129
-
130
- emits('toggle', false)
131
- }
132
-
133
- const mountedReady = ref<boolean>(false)
134
- onMounted(() => {
135
- mountedReady.value = true
136
- window.addEventListener('click', clickWindow)
137
- })
138
-
139
- onUnmounted(() => {
140
- window.removeEventListener('click', clickWindow)
141
- })
142
-
143
- watch(
144
- [mountedReady, () => route.fullPath, () => props.parentStatus],
145
- ([mountedReadyNewValue, routeNewValue, parentStatusNewValue]: [
146
- boolean,
147
- any,
148
- UI_T_ParentStatus
149
- ]): void => {
150
- if (parentStatusNewValue === 1) return
151
-
152
- const name = location.pathname.split('/')[1]
153
-
154
- if (!mountedReadyNewValue || name === 'auth') return
155
-
156
- setSidebarOptions()
157
- useLocalStorage('navigationHistoryRoute', routeNewValue)
158
- },
159
- { immediate: true, deep: true }
160
- )
161
-
162
- const setSidebarOptions = (): void => {
163
- setMenuPined()
164
- menuCollapsed.value = useLocalStorage('menuCollapsed')
165
-
166
- if (menuPined.value) {
167
- emits('toggle', true)
168
- }
169
- }
170
-
171
- const hideMainMenu = (): void => {
172
- emits('toggle', false)
173
- }
174
- </script>
175
-
176
- <style scoped lang="scss">
177
- .main-navigation-panel {
178
- display: flex;
179
- flex: 1 1 auto;
180
- &.pinned {
181
- .nav-context {
182
- position: relative;
183
- }
184
- }
185
- .nav-context {
186
- position: absolute;
187
- z-index: 1001;
188
- height: 100%;
189
- display: flex;
190
- flex-direction: column;
191
- background-color: var(--vertical-nav-bg-color);
192
- border-right: 0.05rem solid var(--vertical-border-color);
193
- &.collapsed {
194
- .category-wrap .clr-vertical-nav {
195
- width: 48px;
196
- .nav-trigger {
197
- svg {
198
- transform: rotate(90deg);
199
- }
200
- }
201
- .nav-content {
202
- overflow-y: hidden;
203
-
204
- &:hover {
205
- overflow-y: auto;
206
- }
207
- .nav-link {
208
- display: flex;
209
- padding: 2px 0.6rem 2px 0.7rem;
210
- width: fit-content;
211
- .category-text {
212
- opacity: 0;
213
- }
214
- }
215
- }
216
- }
217
- }
218
- .nav-trigger {
219
- margin-top: 0;
220
- outline: none;
221
- .nav-trigger-icon {
222
- height: 16px;
223
- svg {
224
- fill: var(--arrows-icon);
225
- width: 16px;
226
- height: 16px;
227
- transform: rotate(-90deg);
228
- }
229
- }
230
- }
231
- .category-wrap {
232
- overflow: hidden;
233
- flex: 1 1 auto;
234
- .clr-vertical-nav {
235
- padding-top: 0;
236
- background: none;
237
- width: 100%;
238
- height: 100%;
239
- overflow-y: auto;
240
- }
241
- .nav-content {
242
- padding-top: 12px;
243
- height: 100%;
244
- .nav-link {
245
- padding: 2px 12px;
246
- font-weight: 400;
247
- height: auto;
248
- line-height: 21px;
249
- flex-basis: auto;
250
- &.active {
251
- background-color: var(--row-selected-bg-color);
252
- border-bottom: 1px solid transparent;
253
- .nav-text {
254
- .category-icon {
255
- &.icon-lifecycle-manager {
256
- background-image: url('assets/img/icons/icon-life-m-light.svg');
257
-
258
- html.dark-theme & {
259
- background-image: url('assets/img/icons/icon-life-m-dark.svg');
260
- }
261
- }
262
- &.icon-realize-operations {
263
- background-image: url('assets/img/icons/icon-ro-light.svg');
264
- html.dark-theme & {
265
- background-image: url('assets/img/icons/icon-ro-dark.svg');
266
- }
267
- }
268
- }
269
- .category-text {
270
- color: var(--vertical-nav-active-item-color);
271
- }
272
- }
273
- }
274
-
275
- &:hover:not(.active) {
276
- margin-bottom: -1px;
277
- border-bottom: 1px solid var(--row-hover-border-color);
278
- background-color: var(--row-hover-bg-color);
279
- color: #454545;
280
- }
281
- .nav-text {
282
- display: flex;
283
- .category-icon {
284
- margin: 1px 4px 0 0;
285
- min-width: 16px;
286
- display: inline-block;
287
- &.icon-hybrid-cloud-services {
288
- background: url('assets/img/icons/icon-hcs.svg');
289
- width: 16px;
290
- height: 16px;
291
- min-height: 16px;
292
- }
293
- &.icon-realize-operations,
294
- &.icon-cloud-provider-services,
295
- &.icon-lifecycle-manager {
296
- background-size: contain;
297
- background-repeat: no-repeat;
298
- width: 18px;
299
- height: 18px;
300
- display: inline-block;
301
- vertical-align: text-bottom;
302
- }
303
- &.icon-lifecycle-manager {
304
- background-image: url('assets/img/icons/icon-life-m-light.svg');
305
- html.dark-theme & {
306
- background-image: url('assets/img/icons/icon-life-m-dark.svg');
307
- }
308
- }
309
- &.icon-cloud-provider-services {
310
- background-image: url('assets/img/icons/icon-cps.png');
311
- html.dark-theme & {
312
- background-image: url('assets/img/icons/icon-cps-dark-mode.png');
313
- }
314
- }
315
- &.icon-realize-operations {
316
- background-image: url('assets/img/icons/icon-ro-light.svg');
317
- html.dark-theme & {
318
- background-image: url('assets/img/icons/icon-ro-dark.svg');
319
- }
320
- }
321
- }
322
- .category-text {
323
- white-space: nowrap;
324
- overflow: hidden;
325
- text-overflow: ellipsis;
326
- font-size: 13px;
327
- }
328
- }
329
- }
330
- }
331
- }
332
- .pin-wrap {
333
- padding: 6px 4px 5px 12px;
334
- border-top: 0.05rem solid var(--vertical-nav-divider-border-color);
335
- label {
336
- font-size: 13px;
337
- }
338
- input[disabled] + label {
339
- cursor: not-allowed;
340
- opacity: 0.5;
341
- }
342
- }
343
- }
344
- }
345
- </style>
346
-
347
- <style>
348
- :root {
349
- --vertical-nav-bg-color: rgba(232, 232, 232, 0.85);
350
- --vertical-nav-item-color: #565656;
351
- --vertical-nav-active-item-color: #fff;
352
- --vertical-nav-divider-border-color: #ccc;
353
- --vertical-border-color: tranparent;
354
- }
355
- :root.dark-theme {
356
- --vertical-nav-bg-color: #17242b;
357
- --vertical-nav-item-color: #e9ecef;
358
- --vertical-nav-active-item-color: #000;
359
- --vertical-nav-divider-border-color: #495865;
360
- --vertical-border-color: #495865;
361
- }
362
- </style>
1
+ <template>
2
+ <div
3
+ :class="['main-navigation-panel', { pinned: menuPined }]"
4
+ @mouseenter="mainMenuHovered = true"
5
+ @mouseleave="mainMenuHovered = false"
6
+ >
7
+ <div
8
+ v-show="showMenu"
9
+ :class="['nav-context', { collapsed: menuCollapsed }]"
10
+ >
11
+ <div class="category-wrap">
12
+ <div class="clr-vertical-nav">
13
+ <button
14
+ v-if="menuPined"
15
+ id="nav-trigger"
16
+ data-id="navigation-panel-trigger"
17
+ class="nav-trigger"
18
+ @click="collapseMenu"
19
+ >
20
+ <span class="nav-trigger-icon">
21
+ <atoms-the-icon name="doubleArrows" />
22
+ </span>
23
+ </button>
24
+ <div class="nav-content">
25
+ <template v-for="(item, key) in navigationItems" :key="key">
26
+ <nuxt-link
27
+ v-for="(item2, key2) in item"
28
+ :id="`nav-item-${key}-${key2}`"
29
+ :key="item2.id"
30
+ :data-id="item2.testId"
31
+ class="nav-link"
32
+ active-class="active"
33
+ :to="item2.to"
34
+ :title="item2.title"
35
+ @click="hideMainMenu"
36
+ >
37
+ <span class="nav-text">
38
+ <span
39
+ :class="['clr-flex-shrink-0 category-icon', item2.iconName]"
40
+ />
41
+ <span class="category-text" :title="item2.title">{{
42
+ item2.title
43
+ }}</span>
44
+ </span>
45
+ </nuxt-link>
46
+ <div
47
+ v-show="key !== navigationItems.length - 1"
48
+ class="nav-divider"
49
+ />
50
+ </template>
51
+ </div>
52
+ </div>
53
+ </div>
54
+
55
+ <div v-show="!menuCollapsed" class="pin-wrap">
56
+ <div class="clr-checkbox-wrapper">
57
+ <input
58
+ id="pin-menu-control"
59
+ v-model="menuPined"
60
+ data-id="navigation-panel-pin-menu-control"
61
+ type="checkbox"
62
+ :disabled="props.disabledPin"
63
+ @change="changeMenuPin"
64
+ />
65
+ <label for="pin-menu-control">{{ localization.pinMenu }}</label>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </template>
71
+
72
+ <script setup lang="ts">
73
+ import { UI_I_Localization } from '~/lib/models/interfaces'
74
+ import { UI_I_NavigationItem } from '~/components/common/mainNavigationPanel/lib/models/interfaces'
75
+ import { UI_T_ParentStatus } from '~/components/common/mainNavigationPanel/lib/models/types'
76
+
77
+ const props = defineProps<{
78
+ mainMenuStatus: boolean
79
+ navigationItems: UI_I_NavigationItem[][]
80
+ parentStatus: UI_T_ParentStatus
81
+ disabledPin: boolean
82
+ }>()
83
+ const emits = defineEmits<{
84
+ (event: 'toggle', value: boolean): void
85
+ }>()
86
+
87
+ // const { $store } = useNuxtApp()
88
+
89
+ const localization = computed<UI_I_Localization>(() => useLocal())
90
+ const route = useRoute()
91
+
92
+ const showMenu = computed<boolean>(
93
+ () => props.mainMenuStatus || menuPined.value
94
+ )
95
+
96
+ const menuPined = ref<boolean>(false)
97
+ const changeMenuPin = (): void => {
98
+ useLocalStorage('menuPined', menuPined.value)
99
+ }
100
+ const setMenuPined = (): void => {
101
+ menuPined.value = props.disabledPin ? false : useLocalStorage('menuPined')
102
+ }
103
+ watch(
104
+ () => props.disabledPin,
105
+ () => {
106
+ setMenuPined()
107
+ },
108
+ { immediate: true }
109
+ )
110
+
111
+ const menuCollapsed = ref<boolean>(false)
112
+ const collapseMenu = (): void => {
113
+ menuCollapsed.value = !menuCollapsed.value
114
+ useLocalStorage('menuCollapsed', menuCollapsed.value)
115
+ }
116
+
117
+ const mainMenuHovered = ref<boolean>(false)
118
+
119
+ const clickWindow = (event: Event): void => {
120
+ const target = event.target as any
121
+ if (
122
+ menuPined.value ||
123
+ mainMenuHovered.value ||
124
+ target.className.baseVal?.includes('menu-icon') ||
125
+ target.className.baseVal?.includes('clr-i-outline')
126
+ ) {
127
+ return
128
+ }
129
+
130
+ emits('toggle', false)
131
+ }
132
+
133
+ const mountedReady = ref<boolean>(false)
134
+ onMounted(() => {
135
+ mountedReady.value = true
136
+ window.addEventListener('click', clickWindow)
137
+ })
138
+
139
+ onUnmounted(() => {
140
+ window.removeEventListener('click', clickWindow)
141
+ })
142
+
143
+ watch(
144
+ [mountedReady, () => route.fullPath, () => props.parentStatus],
145
+ ([mountedReadyNewValue, routeNewValue, parentStatusNewValue]: [
146
+ boolean,
147
+ any,
148
+ UI_T_ParentStatus
149
+ ]): void => {
150
+ if (parentStatusNewValue === 1) return
151
+
152
+ const name = location.pathname.split('/')[1]
153
+
154
+ if (!mountedReadyNewValue || name === 'auth') return
155
+
156
+ setSidebarOptions()
157
+ useLocalStorage('navigationHistoryRoute', routeNewValue)
158
+ },
159
+ { immediate: true, deep: true }
160
+ )
161
+
162
+ const setSidebarOptions = (): void => {
163
+ setMenuPined()
164
+ menuCollapsed.value = useLocalStorage('menuCollapsed')
165
+
166
+ if (menuPined.value) {
167
+ emits('toggle', true)
168
+ }
169
+ }
170
+
171
+ const hideMainMenu = (): void => {
172
+ if (menuPined.value) return
173
+ emits('toggle', false)
174
+ }
175
+ </script>
176
+
177
+ <style scoped lang="scss">
178
+ .main-navigation-panel {
179
+ display: flex;
180
+ flex: 1 1 auto;
181
+ &.pinned {
182
+ .nav-context {
183
+ position: relative;
184
+ }
185
+ }
186
+ .nav-context {
187
+ position: absolute;
188
+ z-index: 1001;
189
+ height: 100%;
190
+ display: flex;
191
+ flex-direction: column;
192
+ background-color: var(--vertical-nav-bg-color);
193
+ border-right: 0.05rem solid var(--vertical-border-color);
194
+ &.collapsed {
195
+ .category-wrap .clr-vertical-nav {
196
+ width: 48px;
197
+ .nav-trigger {
198
+ svg {
199
+ transform: rotate(90deg);
200
+ }
201
+ }
202
+ .nav-content {
203
+ overflow-y: hidden;
204
+
205
+ &:hover {
206
+ overflow-y: auto;
207
+ }
208
+ .nav-link {
209
+ display: flex;
210
+ padding: 2px 0.6rem 2px 0.7rem;
211
+ width: fit-content;
212
+ .category-text {
213
+ opacity: 0;
214
+ }
215
+ }
216
+ }
217
+ }
218
+ }
219
+ .nav-trigger {
220
+ margin-top: 0;
221
+ outline: none;
222
+ .nav-trigger-icon {
223
+ height: 16px;
224
+ svg {
225
+ fill: var(--arrows-icon);
226
+ width: 16px;
227
+ height: 16px;
228
+ transform: rotate(-90deg);
229
+ }
230
+ }
231
+ }
232
+ .category-wrap {
233
+ overflow: hidden;
234
+ flex: 1 1 auto;
235
+ .clr-vertical-nav {
236
+ padding-top: 0;
237
+ background: none;
238
+ width: 100%;
239
+ height: 100%;
240
+ overflow-y: auto;
241
+ }
242
+ .nav-content {
243
+ padding-top: 12px;
244
+ height: 100%;
245
+ .nav-link {
246
+ padding: 2px 12px;
247
+ font-weight: 400;
248
+ height: auto;
249
+ line-height: 21px;
250
+ flex-basis: auto;
251
+ &.active {
252
+ background-color: var(--row-selected-bg-color);
253
+ border-bottom: 1px solid transparent;
254
+ .nav-text {
255
+ .category-icon {
256
+ &.icon-lifecycle-manager {
257
+ background-image: url('assets/img/icons/icon-life-m-light.svg');
258
+
259
+ html.dark-theme & {
260
+ background-image: url('assets/img/icons/icon-life-m-dark.svg');
261
+ }
262
+ }
263
+ &.icon-realize-operations {
264
+ background-image: url('assets/img/icons/icon-ro-light.svg');
265
+ html.dark-theme & {
266
+ background-image: url('assets/img/icons/icon-ro-dark.svg');
267
+ }
268
+ }
269
+ }
270
+ .category-text {
271
+ color: var(--vertical-nav-active-item-color);
272
+ }
273
+ }
274
+ }
275
+
276
+ &:hover:not(.active) {
277
+ margin-bottom: -1px;
278
+ border-bottom: 1px solid var(--row-hover-border-color);
279
+ background-color: var(--row-hover-bg-color);
280
+ color: #454545;
281
+ }
282
+ .nav-text {
283
+ display: flex;
284
+ .category-icon {
285
+ margin: 1px 4px 0 0;
286
+ min-width: 16px;
287
+ display: inline-block;
288
+ &.icon-hybrid-cloud-services {
289
+ background: url('assets/img/icons/icon-hcs.svg');
290
+ width: 16px;
291
+ height: 16px;
292
+ min-height: 16px;
293
+ }
294
+ &.icon-realize-operations,
295
+ &.icon-cloud-provider-services,
296
+ &.icon-lifecycle-manager {
297
+ background-size: contain;
298
+ background-repeat: no-repeat;
299
+ width: 18px;
300
+ height: 18px;
301
+ display: inline-block;
302
+ vertical-align: text-bottom;
303
+ }
304
+ &.icon-lifecycle-manager {
305
+ background-image: url('assets/img/icons/icon-life-m-light.svg');
306
+ html.dark-theme & {
307
+ background-image: url('assets/img/icons/icon-life-m-dark.svg');
308
+ }
309
+ }
310
+ &.icon-cloud-provider-services {
311
+ background-image: url('assets/img/icons/icon-cps.png');
312
+ html.dark-theme & {
313
+ background-image: url('assets/img/icons/icon-cps-dark-mode.png');
314
+ }
315
+ }
316
+ &.icon-realize-operations {
317
+ background-image: url('assets/img/icons/icon-ro-light.svg');
318
+ html.dark-theme & {
319
+ background-image: url('assets/img/icons/icon-ro-dark.svg');
320
+ }
321
+ }
322
+ }
323
+ .category-text {
324
+ white-space: nowrap;
325
+ overflow: hidden;
326
+ text-overflow: ellipsis;
327
+ font-size: 13px;
328
+ }
329
+ }
330
+ }
331
+ }
332
+ }
333
+ .pin-wrap {
334
+ padding: 6px 4px 5px 12px;
335
+ border-top: 0.05rem solid var(--vertical-nav-divider-border-color);
336
+ label {
337
+ font-size: 13px;
338
+ }
339
+ input[disabled] + label {
340
+ cursor: not-allowed;
341
+ opacity: 0.5;
342
+ }
343
+ }
344
+ }
345
+ }
346
+ </style>
347
+
348
+ <style>
349
+ :root {
350
+ --vertical-nav-bg-color: rgba(232, 232, 232, 0.85);
351
+ --vertical-nav-item-color: #565656;
352
+ --vertical-nav-active-item-color: #fff;
353
+ --vertical-nav-divider-border-color: #ccc;
354
+ --vertical-border-color: tranparent;
355
+ }
356
+ :root.dark-theme {
357
+ --vertical-nav-bg-color: #17242b;
358
+ --vertical-nav-item-color: #e9ecef;
359
+ --vertical-nav-active-item-color: #000;
360
+ --vertical-nav-divider-border-color: #495865;
361
+ --vertical-border-color: #495865;
362
+ }
363
+ </style>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.3.260",
4
+ "version": "1.3.261",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",