bfg-common 1.5.92 → 1.5.94

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 (112) hide show
  1. package/assets/scss/common/normalize.scss +347 -347
  2. package/components/atoms/alert/Notification.vue +169 -169
  3. package/components/atoms/autocomplete/Autocomplete.vue +361 -362
  4. package/components/atoms/collapse/CollapseNav.vue +169 -169
  5. package/components/atoms/comboDropdownMenu/ComboDropdownMenu.vue +357 -357
  6. package/components/atoms/combobox/Combobox.vue +154 -154
  7. package/components/atoms/datepicker/Datepicker.vue +639 -639
  8. package/components/atoms/dropdown/Portlet.vue +113 -113
  9. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  10. package/components/atoms/dropdown/tree/Tree.vue +137 -137
  11. package/components/atoms/list/SelectList.vue +63 -63
  12. package/components/atoms/list/dragDropList/DragDropList.vue +148 -148
  13. package/components/atoms/modal/Modal.vue +250 -250
  14. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  15. package/components/atoms/notificationBar/NotificationBar.vue +178 -178
  16. package/components/atoms/popover/Popover.vue +58 -58
  17. package/components/atoms/popover/lib/models/interfaces.ts +4 -4
  18. package/components/atoms/select/TheSelect.vue +187 -187
  19. package/components/atoms/stack/StackBlock.vue +185 -185
  20. package/components/atoms/stack/StackContent.vue +63 -63
  21. package/components/atoms/step/lib/models/verticalStepItem.ts +5 -5
  22. package/components/atoms/switch/Switch.vue +111 -111
  23. package/components/atoms/table/compact/Compact.vue +529 -529
  24. package/components/atoms/table/dataGrid/DataGrid.vue +1716 -1713
  25. package/components/atoms/table/dataGrid/DataGridPage.vue +195 -195
  26. package/components/atoms/table/info/Info.vue +2 -2
  27. package/components/atoms/table/simpleEvent/SimpleEvent.vue +98 -98
  28. package/components/atoms/table/simpleInfo/SimpleInfo.vue +73 -73
  29. package/components/atoms/tabs/Tabs.vue +217 -217
  30. package/components/atoms/wizard/Wizard.vue +341 -341
  31. package/components/common/accordion/Recursion.vue +222 -222
  32. package/components/common/adapterManager/AddAdapterModal.vue +561 -561
  33. package/components/common/adapterManager/ui/actions/AddAdapterButton.vue +30 -30
  34. package/components/common/adapterManager/ui/table/Table.vue +162 -162
  35. package/components/common/browse/BrowseNew.vue +237 -237
  36. package/components/common/browse/BrowseOld.vue +217 -217
  37. package/components/common/browse/blocks/TitleNew.vue +145 -145
  38. package/components/common/browse/blocks/TitleOld.vue +91 -91
  39. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  40. package/components/common/chartOptionsModal/counters/timespan/form/FormNew.vue +262 -262
  41. package/components/common/context/Context.vue +111 -111
  42. package/components/common/context/recursion/RecursionOld.vue +228 -228
  43. package/components/common/details/DetailsItem.vue +109 -109
  44. package/components/common/feedback/Buttons.vue +229 -229
  45. package/components/common/feedback/Feedback.vue +270 -270
  46. package/components/common/feedback/Message.vue +519 -519
  47. package/components/common/graph/graphNew/GraphNew.vue +194 -194
  48. package/components/common/graph/lib/utils/renderGraph.ts +389 -389
  49. package/components/common/layout/theHeader/feedback/new/New.vue +227 -227
  50. package/components/common/layout/theHeader/feedback/new/additionalDetails/AdditionalDetails.vue +606 -606
  51. package/components/common/layout/theHeader/feedback/new/additionalDetails/Headline.vue +98 -98
  52. package/components/common/layout/theHeader/feedback/new/description/Description.vue +59 -59
  53. package/components/common/layout/theHeader/feedback/new/email/Email.vue +43 -43
  54. package/components/common/layout/theHeader/feedback/new/subtitle/Subtitle.vue +103 -103
  55. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +112 -112
  56. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +80 -80
  57. package/components/common/layout/theHeader/helpMenu/helpMenuOld/HelpMenuOld.vue +1 -1
  58. package/components/common/layout/theHeader/modals/Reconnect.vue +2 -2
  59. package/components/common/layout/theHeader/modals/RedirectLogin.vue +3 -3
  60. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePassword.vue +1 -1
  61. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePasswordNew.vue +8 -8
  62. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePasswordOld.vue +3 -3
  63. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesNew.vue +1 -1
  64. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesOld.vue +1 -1
  65. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +1 -1
  66. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguageNew.vue +1 -1
  67. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguageOld.vue +2 -5
  68. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/DefaultConsoleOld.vue +1 -1
  69. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/InventoryNew.vue +1 -1
  70. package/components/common/layout/theHeader/userMenu/userMenuNew/UserMenuNew.vue +2 -2
  71. package/components/common/layout/theHeader/userMenu/userMenuNew/lib/config/dropMenu.ts +1 -1
  72. package/components/common/layout/theHeader/userMenu/userMenuOld/UserMenuOld.vue +1 -1
  73. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +2 -2
  74. package/components/common/modals/Rename.vue +2 -2
  75. package/components/common/modals/confirmByInput/ConfirmByInput.vue +2 -3
  76. package/components/common/modals/confirmByInput/ConfirmByInputOld.vue +3 -3
  77. package/components/common/modals/confirmation/ConfirmationOld.vue +1 -1
  78. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +1 -1
  79. package/components/common/monitor/advanced/Advanced.vue +1 -1
  80. package/components/common/monitor/advanced/AdvancedNew.vue +1 -1
  81. package/components/common/monitor/advanced/AdvancedOld.vue +1 -1
  82. package/components/common/monitor/advanced/graphView/GraphViewNew.vue +1 -1
  83. package/components/common/monitor/advanced/graphView/GraphViewOld.vue +1 -1
  84. package/components/common/monitor/advanced/table/Table.vue +1 -1
  85. package/components/common/monitor/advanced/table/tableNew/TableNew.vue +2 -2
  86. package/components/common/monitor/advanced/table/tableOld/lib/config/performanceDatatable.ts +2 -2
  87. package/components/common/monitor/advanced/tools/ToolsOld.vue +2 -2
  88. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModalOld.vue +1 -1
  89. package/components/common/monitor/advanced/tools/chartOptionsModal/NotificationOld.vue +1 -1
  90. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/ActionsOld.vue +1 -1
  91. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/saveOptionsModal/SaveOptionsModal.vue +1 -1
  92. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/CountersNew.vue +1 -1
  93. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/tableOld/lib/config/tableConfig.ts +2 -2
  94. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/lib/config/objectTable.ts +10 -3
  95. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/ObjectNew.vue +1 -1
  96. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectOld/ObjectOld.vue +2 -2
  97. package/components/common/monitor/advanced/tools/lib/utils/countCores.ts +1 -1
  98. package/components/common/monitor/lib/models/interfaces.ts +1 -1
  99. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModalOld.vue +3 -3
  100. package/components/common/monitor/overview/filters/customIntervalModal/customIntervalModalNew/CustomIntervalModalNew.vue +4 -3
  101. package/components/common/monitor/resourceAllocation/lib/models/interfaces.ts +8 -8
  102. package/components/common/monitor/resourceAllocation/resourceAllocation.vue +2 -2
  103. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/ChartOptionsModal.vue +1 -1
  104. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/Notification.vue +1 -1
  105. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/actions/SaveOptionsModal.vue +1 -1
  106. package/components/common/pages/hardwareHealth/tableView/lib/config/alertWarningTable.ts +1 -1
  107. package/components/common/pages/hardwareHealth/tableView/lib/config/historyTestimonyTable.ts +5 -5
  108. package/components/common/wizards/vm/migrate/Migrate.vue +39 -2
  109. package/components/common/wizards/vm/migrate/vmOrigin/VmOrigin.vue +92 -0
  110. package/components/common/wizards/vm/migrate/vmOrigin/lib/models/interfaces.ts +19 -0
  111. package/components/common/wizards/vm/migrate/vmOrigin/lib/utils/constructItems.ts +62 -0
  112. package/package.json +1 -1
@@ -1,639 +1,639 @@
1
- <template>
2
- <div class="container-datepicker">
3
- <atoms-the-icon
4
- :class="[`btn-show-calendar calendar-id-${uniqueId}`]"
5
- :data-id="`${props.testId}-toggle-icon`"
6
- name="calendar"
7
- @click.stop="showHideCalendar"
8
- />
9
- <div
10
- v-show="isShowCalendar"
11
- :style="[{ top: calendarTop + 'px' }, { left: calendarLeft + 'px' }]"
12
- class="the-datepicer"
13
- @click.stop
14
- >
15
- <div v-show="showAllMonths" class="content-month">
16
- <div class="all-months">
17
- <div
18
- v-for="(item, key) in allMonths"
19
- :key="key"
20
- :class="['calendar-btn', item.class]"
21
- :data-id="item.testId"
22
- @click="selectMonth(key)"
23
- >
24
- {{ item.text }}
25
- </div>
26
- </div>
27
- </div>
28
- <div v-show="showAllYears" class="content-years">
29
- <div class="content-buttons-arrow">
30
- <button
31
- :id="`${props.testId}-prev-button`"
32
- :data-id="`${props.testId}-select-prev-year`"
33
- class="calendar-btn"
34
- title="Previous decade"
35
- @click="prevYear"
36
- >
37
- <atoms-the-icon
38
- name="arrow"
39
- fill="#0095d3"
40
- class="arrow-btn prev"
41
- />
42
- </button>
43
- <button
44
- :id="`${props.testId}-current-year-button`"
45
- :data-id="`${props.testId}-select-current-year`"
46
- class="calendar-btn set-current-data"
47
- title="Current decade"
48
- @click="setCurrentYear"
49
- >
50
- <atoms-the-icon name="calendar-current-date" class="current-btn" />
51
- </button>
52
- <button
53
- :id="`${props.testId}-next-button`"
54
- :data-id="`${props.testId}-select-next-year`"
55
- class="calendar-btn"
56
- title="Next decade"
57
- @click="nextYear"
58
- >
59
- <atoms-the-icon
60
- name="arrow"
61
- fill="#0095d3"
62
- class="arrow-btn next"
63
- />
64
- </button>
65
- </div>
66
- <div class="all-years">
67
- <div
68
- v-for="(item, key) in allYears"
69
- :key="key"
70
- :class="['calendar-btn', item.class]"
71
- :data-id="item.testId"
72
- @click="selectYear(item.text)"
73
- >
74
- {{ item.text }}
75
- </div>
76
- </div>
77
- </div>
78
- <div v-if="!showAllMonths && !showAllYears" class="main-content">
79
- <div class="the-month">
80
- <div class="date top-menu">
81
- <button
82
- :id="`${props.testId}-current-month-button`"
83
- :data-id="`${props.testId}-show-all-months`"
84
- class="calendar-btn show-all-months"
85
- title="Select Month"
86
- @click="showAllMonths = true"
87
- >
88
- {{ currentMonth }}
89
- </button>
90
- <button
91
- :id="`${props.testId}-current-year-button`"
92
- :data-id="`${props.testId}-select-all-years`"
93
- class="calendar-btn current-year"
94
- title="Select Year"
95
- @click="showAllYears = true"
96
- >
97
- {{ currentYear }}
98
- </button>
99
- </div>
100
- <div class="content-buttons-arrow">
101
- <button
102
- :id="`${props.testId}-prev-month-button`"
103
- :data-id="`${props.testId}-select-prev-month`"
104
- class="calendar-btn"
105
- title="Previous Month"
106
- @click="prevMonth"
107
- >
108
- <atoms-the-icon
109
- name="arrow"
110
- fill="#0095d3"
111
- class="arrow-btn prev"
112
- />
113
- </button>
114
- <button
115
- :id="`${props.testId}-current-date-button`"
116
- :data-id="`${props.testId}-set-current-date`"
117
- class="calendar-btn set-current-data"
118
- title="Current Month"
119
- @click="setCurrentDate"
120
- >
121
- <atoms-the-icon
122
- name="calendar-current-date"
123
- class="current-btn"
124
- />
125
- </button>
126
- <button
127
- :id="`${props.testId}-next-month-icon`"
128
- :data-id="`${props.testId}-select-next-month`"
129
- class="calendar-btn"
130
- title="Next Month"
131
- @click="nextMonth"
132
- >
133
- <atoms-the-icon
134
- name="arrow"
135
- fill="#0095d3"
136
- class="arrow-btn next"
137
- />
138
- </button>
139
- </div>
140
- </div>
141
- <div class="bottom-panel">
142
- <div class="weekdays">
143
- <div v-for="(item, key) in weekdays" :key="key">{{ item }}</div>
144
- </div>
145
- <div class="days">
146
- <div
147
- v-for="(item, key) in days"
148
- :key="key"
149
- :class="['item-day', item.class]"
150
- :data-id="item.testId"
151
- @click="selectDay(item.text, item.class)"
152
- >
153
- {{ item.text }}
154
- </div>
155
- </div>
156
- </div>
157
- </div>
158
- </div>
159
- </div>
160
- </template>
161
-
162
- <script setup lang="ts">
163
- import type { UI_I_Localization } from '~/lib/models/interfaces'
164
- import type { UI_I_Items } from '~/components/atoms/datepicker/lib/models/interfaces'
165
- import {
166
- getMonthsFunc,
167
- getWeekdaysFunc,
168
- datepickerWidth,
169
- datepickerHeight,
170
- } from '~/components/atoms/datepicker/lib/config/datepicker'
171
- import { getShortMonths } from '~/components/atoms/datepicker/lib/config/allShortMonths'
172
-
173
- const { $isDate } = useNuxtApp()
174
-
175
- const localization = computed<UI_I_Localization>(() => useLocal())
176
-
177
- const props = withDefaults(
178
- defineProps<{
179
- modelValue: number
180
- lang: string
181
- testId?: string
182
- }>(),
183
- { testId: 'ui-datepicker' }
184
- )
185
- const emits = defineEmits<{
186
- (event: 'update:model-value', value: number): void
187
- (event: 'update', value: number): void
188
- }>()
189
-
190
- const interfaceLang = computed<string>(() => props.lang)
191
-
192
- let isEnabledEmit = false
193
- const checkingDate = computed<Date>({
194
- get() {
195
- return new Date(props.modelValue)
196
- },
197
- set(newValue) {
198
- if (isEnabledEmit) {
199
- const newDate = new Date(newValue).getTime()
200
- emits('update:model-value', newDate)
201
- emits('update', newDate)
202
- isEnabledEmit = false
203
- if ($isDate(newValue.toString())) {
204
- renderCalendar()
205
- }
206
- }
207
- },
208
- })
209
-
210
- const currentYear = ref<number>()
211
- const currentMonth = ref<string>()
212
- const showAllYears = ref<boolean>(false)
213
- const showAllMonths = ref<boolean>(false)
214
- const selectedMonth = ref<number>(new Date().getMonth())
215
-
216
- const days = ref<UI_I_Items[]>([])
217
- const months = computed<string[]>(() => getMonthsFunc(localization.value))
218
- const weekdays = computed<string[]>(() => {
219
- const language = interfaceLang.value
220
- return getWeekdaysFunc(localization.value, language)
221
- })
222
-
223
- const renderCalendar = (): void => {
224
- checkingDate.value.setDate(1)
225
- days.value = []
226
-
227
- const lastDay = new Date(
228
- checkingDate.value.getFullYear(),
229
- checkingDate.value.getMonth() + 1,
230
- 0
231
- ).getDate()
232
-
233
- const prevLastDay = new Date(
234
- checkingDate.value.getFullYear(),
235
- checkingDate.value.getMonth(),
236
- 0
237
- ).getDate()
238
-
239
- const firstDayIndex = checkingDate.value.getDay()
240
- const language = interfaceLang.value
241
- const firstDayIndexByLanguage =
242
- language === 'en_US' ? firstDayIndex : firstDayIndex - 1
243
-
244
- const shortMonths = getShortMonths(language)
245
-
246
- currentMonth.value = shortMonths[checkingDate.value.getMonth()]
247
-
248
- currentYear.value = checkingDate.value.getFullYear()
249
-
250
- for (let x = firstDayIndexByLanguage; x > 0; x--) {
251
- const result = prevLastDay - x + 1
252
- days.value.push({
253
- text: result,
254
- class: 'prev-date',
255
- testId: `day-${result}`,
256
- })
257
- }
258
- const indexCurrentMonth = shortMonths.findIndex(
259
- (x) => x === currentMonth.value
260
- )
261
-
262
- for (let i = 1; i <= lastDay; i++) {
263
- if (
264
- i === new Date(props.modelValue).getDate() &&
265
- new Date(props.modelValue).getMonth() === indexCurrentMonth &&
266
- new Date(props.modelValue).getFullYear() === currentYear.value
267
- ) {
268
- days.value.push({
269
- text: i,
270
- class: 'active',
271
- testId: `day-${i}`,
272
- })
273
- } else if (
274
- i === new Date().getDate() &&
275
- indexCurrentMonth === new Date().getMonth() &&
276
- currentYear.value === new Date().getFullYear()
277
- ) {
278
- days.value.push({
279
- text: i,
280
- class: 'today',
281
- testId: `day-${i}`,
282
- })
283
- } else {
284
- days.value.push({ text: i, class: '', testId: `day-${i}` })
285
- }
286
- }
287
-
288
- const x = 42 - days.value.length
289
- for (let j = 1; j <= x; j++) {
290
- days.value.push({
291
- text: j,
292
- class: 'next-date',
293
- testId: `day-${j}`,
294
- })
295
- }
296
- }
297
-
298
- const allMonths = computed<UI_I_Items[]>(() => {
299
- const result = []
300
- for (let i = 0; i < months.value.length; i++) {
301
- const active = i + 1 === selectedMonth.value + 1 ? 'active' : ''
302
- result.push({
303
- text: months.value[i],
304
- class: active,
305
- testId: `month-${i}`,
306
- })
307
- }
308
- return result
309
- })
310
-
311
- const firstYear = ref<number>(
312
- Number(checkingDate.value.getFullYear().toString().slice(0, 3) + 0)
313
- )
314
- const allYears = computed<UI_I_Items[]>(() => {
315
- const result = []
316
- for (let i = firstYear.value; i < firstYear.value + 10; i++) {
317
- const active = i === currentYear.value ? 'active' : ''
318
- result.push({
319
- text: i,
320
- class: active,
321
- testId: `year-${i}`,
322
- })
323
- }
324
- return result
325
- })
326
- const prevYear = (): void => {
327
- firstYear.value = firstYear.value - 10
328
- }
329
- const nextYear = (): void => {
330
- firstYear.value = firstYear.value + 10
331
- }
332
- const setCurrentYear = (): void => {
333
- firstYear.value = Number(
334
- checkingDate.value.getFullYear().toString().slice(0, 3) + 0
335
- )
336
- }
337
- const selectYear = (value: number): void => {
338
- checkingDate.value = new Date(checkingDate.value.setFullYear(value))
339
- renderCalendar()
340
- showAllYears.value = false
341
- }
342
-
343
- const prevMonth = (): void => {
344
- checkingDate.value.setMonth(checkingDate.value.getMonth() - 1)
345
-
346
- renderCalendar()
347
- }
348
- const nextMonth = (): void => {
349
- checkingDate.value.setMonth(checkingDate.value.getMonth() + 1)
350
-
351
- renderCalendar()
352
- }
353
- const setCurrentDate = (): void => {
354
- isEnabledEmit = true
355
- checkingDate.value = new Date()
356
-
357
- setTimeout(() => {
358
- renderCalendar()
359
- }, 0)
360
- }
361
-
362
- const selectMonth = (value: number): void => {
363
- checkingDate.value = new Date(checkingDate.value.setMonth(value))
364
- selectedMonth.value = value
365
- showAllMonths.value = false
366
-
367
- renderCalendar()
368
- }
369
- const selectDay = (value: number | string, type: string): void => {
370
- isEnabledEmit = true
371
- if (type === 'prev-date') {
372
- checkingDate.value = new Date(
373
- checkingDate.value.setMonth(checkingDate.value.getMonth() - 1)
374
- )
375
- } else if (type === 'next-date') {
376
- checkingDate.value = new Date(
377
- checkingDate.value.setMonth(checkingDate.value.getMonth() + 1)
378
- )
379
- }
380
- checkingDate.value = new Date(checkingDate.value.setDate(+value))
381
-
382
- isShowCalendar.value = false
383
- }
384
-
385
- const isShowCalendar = ref<boolean>(false)
386
-
387
- const uniqueId = ref<number>(0)
388
- const calendarTop = ref<number>()
389
- const calendarLeft = ref<number>()
390
- const showHideCalendar = (): void => {
391
- const allDatePickers = document.querySelectorAll('.the-datepicer')
392
- allDatePickers.forEach((element: any) => (element.style.display = 'none'))
393
- const element = document.querySelector(
394
- `.calendar-id-${uniqueId.value}`
395
- ) as HTMLElement
396
-
397
- const elementSizes = element.getBoundingClientRect()
398
-
399
- const isOverTop = elementSizes.y - datepickerWidth + 2 < 0
400
- // Set content top
401
- if (!isOverTop) calendarTop.value = elementSizes.y - datepickerWidth + 2
402
- else calendarTop.value = elementSizes.y + elementSizes.height + 2
403
-
404
- // Set content left
405
- calendarLeft.value = elementSizes.x - datepickerHeight / 2
406
-
407
- isShowCalendar.value = !isShowCalendar.value
408
- }
409
-
410
- const windowClick = (): void => {
411
- isShowCalendar.value = false
412
- }
413
-
414
- const bodyScroll = (): void => {
415
- isShowCalendar.value = false
416
- }
417
-
418
- onMounted(() => {
419
- renderCalendar()
420
- window.addEventListener('click', windowClick)
421
- uniqueId.value = useUniqueId()
422
- })
423
- onUnmounted(() => {
424
- window.removeEventListener('scroll', windowClick)
425
- })
426
-
427
- watch(isShowCalendar, (newValue) => {
428
- if (newValue) {
429
- checkingDate.value.setMonth(new Date(props.modelValue).getMonth())
430
- checkingDate.value.setFullYear(new Date(props.modelValue).getFullYear())
431
- renderCalendar()
432
- window.addEventListener('scroll', bodyScroll, true)
433
- } else window.removeEventListener('scroll', bodyScroll, true)
434
- })
435
- </script>
436
-
437
- <style scoped lang="scss">
438
- .item-day {
439
- font-size: 13px;
440
- width: 36px;
441
- height: 36px;
442
- display: flex;
443
- justify-content: center;
444
- align-items: center;
445
- transition: background-color 0.2s;
446
- cursor: pointer;
447
- border-radius: 0.15rem;
448
- }
449
- .container-datepicker {
450
- background: unset;
451
-
452
- .the-datepicer {
453
- width: 278px;
454
- height: 314px;
455
- border: 1px solid var(--vertical-nav-hover-bg-color);
456
- border-radius: 0.15rem;
457
- box-shadow: 0 1px 2.4px hsl(0deg 0% 45% / 25%);
458
- padding: 12px;
459
- position: fixed;
460
- z-index: var(--z-fixed);
461
- background-color: var(--modal-other-bg-color);
462
-
463
- .content-month {
464
- .all-months {
465
- display: grid;
466
- grid-template-columns: 1fr 1fr;
467
-
468
- .calendar-btn {
469
- width: 100%;
470
- height: 48px;
471
- display: flex;
472
- justify-content: center;
473
- align-items: center;
474
- color: var(--checkbox-label-color);
475
- }
476
- .active {
477
- background: var(--vertical-nav-hover-bg-color);
478
- color: var(--form-input-color);
479
- }
480
- }
481
- }
482
- .content-years {
483
- .content-buttons-arrow {
484
- max-width: 108px;
485
- margin: 0 auto;
486
- }
487
- .all-years {
488
- display: grid;
489
- grid-template-columns: 1fr 1fr;
490
-
491
- .calendar-btn {
492
- width: 100%;
493
- height: 48px;
494
- color: var(--checkbox-label-color);
495
- display: flex;
496
- justify-content: center;
497
- align-items: center;
498
- }
499
- .active {
500
- background: var(--vertical-nav-hover-bg-color);
501
- color: var(--form-input-color);
502
- }
503
- }
504
- }
505
- .main-content {
506
- .the-month {
507
- height: 36px;
508
- display: flex;
509
- justify-content: space-between;
510
- align-items: center;
511
- text-align: center;
512
-
513
- i {
514
- font-size: 29px;
515
- cursor: pointer;
516
- }
517
- h1 {
518
- font-size: 3rem;
519
- font-weight: 400;
520
- text-transform: uppercase;
521
- letter-spacing: 0.2rem;
522
- margin-bottom: 1rem;
523
- }
524
- p {
525
- font-size: 1.6rem;
526
- }
527
-
528
- .top-menu {
529
- display: flex;
530
- align-items: center;
531
- }
532
- }
533
-
534
- .bottom-panel {
535
- .weekdays {
536
- display: flex;
537
- align-items: center;
538
-
539
- div {
540
- font-size: 12px;
541
- font-weight: bold;
542
- letter-spacing: 0.1rem;
543
- width: 36px;
544
- height: 36px;
545
- display: flex;
546
- justify-content: center;
547
- align-items: center;
548
- color: var(--checkbox-label-color);
549
- }
550
- }
551
- .days {
552
- width: 100%;
553
- display: flex;
554
- flex-wrap: wrap;
555
-
556
- .item-day {
557
- font-size: 13px;
558
- width: 36px;
559
- height: 36px;
560
- display: flex;
561
- justify-content: center;
562
- align-items: center;
563
- transition: background-color 0.2s;
564
- cursor: pointer;
565
- border-radius: 0.15rem;
566
- color: var(--checkbox-label-color);
567
-
568
- &:not(.prev-date):not(.today):hover {
569
- background: #eee;
570
- }
571
- &.active {
572
- background: #d9e4ea;
573
- color: #000;
574
- font-weight: bold;
575
- }
576
- &.today {
577
- color: var(--blue-950);
578
- font-weight: bold;
579
- }
580
- &.prev-date,
581
- &.next-date {
582
- opacity: 0.5;
583
- }
584
- }
585
- }
586
- }
587
- }
588
- }
589
-
590
- .calendar-btn {
591
- width: 48px;
592
- height: 36px;
593
- color: #0095d3;
594
- text-align: center;
595
- white-space: nowrap;
596
- overflow: hidden;
597
- text-overflow: ellipsis;
598
- background: unset;
599
- border: none;
600
- cursor: pointer;
601
- font-size: 18px;
602
- border-radius: 3px;
603
-
604
- &:hover {
605
- background: #eee;
606
- }
607
- }
608
-
609
- .content-buttons-arrow {
610
- display: flex;
611
- align-items: center;
612
- justify-content: space-between;
613
-
614
- .icons {
615
- color: #0095d3;
616
- }
617
-
618
- .calendar-btn {
619
- width: 40px;
620
- height: 40px;
621
- display: flex;
622
- align-items: center;
623
- justify-content: center;
624
- }
625
- }
626
-
627
- .arrow-btn {
628
- width: 18px;
629
- height: 18px;
630
-
631
- &.prev {
632
- transform: rotate(-90deg);
633
- }
634
- &.next {
635
- transform: rotate(90deg);
636
- }
637
- }
638
- }
639
- </style>
1
+ <template>
2
+ <div class="container-datepicker">
3
+ <atoms-the-icon
4
+ :class="[`btn-show-calendar calendar-id-${uniqueId}`]"
5
+ :data-id="`${props.testId}-toggle-icon`"
6
+ name="calendar"
7
+ @click.stop="showHideCalendar"
8
+ />
9
+ <div
10
+ v-show="isShowCalendar"
11
+ :style="[{ top: calendarTop + 'px' }, { left: calendarLeft + 'px' }]"
12
+ class="the-datepicer"
13
+ @click.stop
14
+ >
15
+ <div v-show="showAllMonths" class="content-month">
16
+ <div class="all-months">
17
+ <div
18
+ v-for="(item, key) in allMonths"
19
+ :key="key"
20
+ :class="['calendar-btn', item.class]"
21
+ :data-id="item.testId"
22
+ @click="selectMonth(key)"
23
+ >
24
+ {{ item.text }}
25
+ </div>
26
+ </div>
27
+ </div>
28
+ <div v-show="showAllYears" class="content-years">
29
+ <div class="content-buttons-arrow">
30
+ <button
31
+ :id="`${props.testId}-prev-button`"
32
+ :data-id="`${props.testId}-select-prev-year`"
33
+ class="calendar-btn"
34
+ title="Previous decade"
35
+ @click="prevYear"
36
+ >
37
+ <atoms-the-icon
38
+ name="arrow"
39
+ fill="#0095d3"
40
+ class="arrow-btn prev"
41
+ />
42
+ </button>
43
+ <button
44
+ :id="`${props.testId}-current-year-button`"
45
+ :data-id="`${props.testId}-select-current-year`"
46
+ class="calendar-btn set-current-data"
47
+ title="Current decade"
48
+ @click="setCurrentYear"
49
+ >
50
+ <atoms-the-icon name="calendar-current-date" class="current-btn" />
51
+ </button>
52
+ <button
53
+ :id="`${props.testId}-next-button`"
54
+ :data-id="`${props.testId}-select-next-year`"
55
+ class="calendar-btn"
56
+ title="Next decade"
57
+ @click="nextYear"
58
+ >
59
+ <atoms-the-icon
60
+ name="arrow"
61
+ fill="#0095d3"
62
+ class="arrow-btn next"
63
+ />
64
+ </button>
65
+ </div>
66
+ <div class="all-years">
67
+ <div
68
+ v-for="(item, key) in allYears"
69
+ :key="key"
70
+ :class="['calendar-btn', item.class]"
71
+ :data-id="item.testId"
72
+ @click="selectYear(item.text)"
73
+ >
74
+ {{ item.text }}
75
+ </div>
76
+ </div>
77
+ </div>
78
+ <div v-if="!showAllMonths && !showAllYears" class="main-content">
79
+ <div class="the-month">
80
+ <div class="date top-menu">
81
+ <button
82
+ :id="`${props.testId}-current-month-button`"
83
+ :data-id="`${props.testId}-show-all-months`"
84
+ class="calendar-btn show-all-months"
85
+ title="Select Month"
86
+ @click="showAllMonths = true"
87
+ >
88
+ {{ currentMonth }}
89
+ </button>
90
+ <button
91
+ :id="`${props.testId}-current-year-button`"
92
+ :data-id="`${props.testId}-select-all-years`"
93
+ class="calendar-btn current-year"
94
+ title="Select Year"
95
+ @click="showAllYears = true"
96
+ >
97
+ {{ currentYear }}
98
+ </button>
99
+ </div>
100
+ <div class="content-buttons-arrow">
101
+ <button
102
+ :id="`${props.testId}-prev-month-button`"
103
+ :data-id="`${props.testId}-select-prev-month`"
104
+ class="calendar-btn"
105
+ title="Previous Month"
106
+ @click="prevMonth"
107
+ >
108
+ <atoms-the-icon
109
+ name="arrow"
110
+ fill="#0095d3"
111
+ class="arrow-btn prev"
112
+ />
113
+ </button>
114
+ <button
115
+ :id="`${props.testId}-current-date-button`"
116
+ :data-id="`${props.testId}-set-current-date`"
117
+ class="calendar-btn set-current-data"
118
+ title="Current Month"
119
+ @click="setCurrentDate"
120
+ >
121
+ <atoms-the-icon
122
+ name="calendar-current-date"
123
+ class="current-btn"
124
+ />
125
+ </button>
126
+ <button
127
+ :id="`${props.testId}-next-month-icon`"
128
+ :data-id="`${props.testId}-select-next-month`"
129
+ class="calendar-btn"
130
+ title="Next Month"
131
+ @click="nextMonth"
132
+ >
133
+ <atoms-the-icon
134
+ name="arrow"
135
+ fill="#0095d3"
136
+ class="arrow-btn next"
137
+ />
138
+ </button>
139
+ </div>
140
+ </div>
141
+ <div class="bottom-panel">
142
+ <div class="weekdays">
143
+ <div v-for="(item, key) in weekdays" :key="key">{{ item }}</div>
144
+ </div>
145
+ <div class="days">
146
+ <div
147
+ v-for="(item, key) in days"
148
+ :key="key"
149
+ :class="['item-day', item.class]"
150
+ :data-id="item.testId"
151
+ @click="selectDay(item.text, item.class)"
152
+ >
153
+ {{ item.text }}
154
+ </div>
155
+ </div>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </template>
161
+
162
+ <script setup lang="ts">
163
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
164
+ import type { UI_I_Items } from '~/components/atoms/datepicker/lib/models/interfaces'
165
+ import {
166
+ getMonthsFunc,
167
+ getWeekdaysFunc,
168
+ datepickerWidth,
169
+ datepickerHeight,
170
+ } from '~/components/atoms/datepicker/lib/config/datepicker'
171
+ import { getShortMonths } from '~/components/atoms/datepicker/lib/config/allShortMonths'
172
+
173
+ const { $isDate } = useNuxtApp()
174
+
175
+ const localization = computed<UI_I_Localization>(() => useLocal())
176
+
177
+ const props = withDefaults(
178
+ defineProps<{
179
+ modelValue: number
180
+ lang: string
181
+ testId?: string
182
+ }>(),
183
+ { testId: 'ui-datepicker' }
184
+ )
185
+ const emits = defineEmits<{
186
+ (event: 'update:model-value', value: number): void
187
+ (event: 'update', value: number): void
188
+ }>()
189
+
190
+ const interfaceLang = computed<string>(() => props.lang)
191
+
192
+ let isEnabledEmit = false
193
+ const checkingDate = computed<Date>({
194
+ get() {
195
+ return new Date(props.modelValue)
196
+ },
197
+ set(newValue) {
198
+ if (isEnabledEmit) {
199
+ const newDate = new Date(newValue).getTime()
200
+ emits('update:model-value', newDate)
201
+ emits('update', newDate)
202
+ isEnabledEmit = false
203
+ if ($isDate(newValue.toString())) {
204
+ renderCalendar()
205
+ }
206
+ }
207
+ },
208
+ })
209
+
210
+ const currentYear = ref<number>()
211
+ const currentMonth = ref<string>()
212
+ const showAllYears = ref<boolean>(false)
213
+ const showAllMonths = ref<boolean>(false)
214
+ const selectedMonth = ref<number>(new Date().getMonth())
215
+
216
+ const days = ref<UI_I_Items[]>([])
217
+ const months = computed<string[]>(() => getMonthsFunc(localization.value))
218
+ const weekdays = computed<string[]>(() => {
219
+ const language = interfaceLang.value
220
+ return getWeekdaysFunc(localization.value, language)
221
+ })
222
+
223
+ const renderCalendar = (): void => {
224
+ checkingDate.value.setDate(1)
225
+ days.value = []
226
+
227
+ const lastDay = new Date(
228
+ checkingDate.value.getFullYear(),
229
+ checkingDate.value.getMonth() + 1,
230
+ 0
231
+ ).getDate()
232
+
233
+ const prevLastDay = new Date(
234
+ checkingDate.value.getFullYear(),
235
+ checkingDate.value.getMonth(),
236
+ 0
237
+ ).getDate()
238
+
239
+ const firstDayIndex = checkingDate.value.getDay()
240
+ const language = interfaceLang.value
241
+ const firstDayIndexByLanguage =
242
+ language === 'en_US' ? firstDayIndex : firstDayIndex - 1
243
+
244
+ const shortMonths = getShortMonths(language)
245
+
246
+ currentMonth.value = shortMonths[checkingDate.value.getMonth()]
247
+
248
+ currentYear.value = checkingDate.value.getFullYear()
249
+
250
+ for (let x = firstDayIndexByLanguage; x > 0; x--) {
251
+ const result = prevLastDay - x + 1
252
+ days.value.push({
253
+ text: result,
254
+ class: 'prev-date',
255
+ testId: `day-${result}`,
256
+ })
257
+ }
258
+ const indexCurrentMonth = shortMonths.findIndex(
259
+ (x) => x === currentMonth.value
260
+ )
261
+
262
+ for (let i = 1; i <= lastDay; i++) {
263
+ if (
264
+ i === new Date(props.modelValue).getDate() &&
265
+ new Date(props.modelValue).getMonth() === indexCurrentMonth &&
266
+ new Date(props.modelValue).getFullYear() === currentYear.value
267
+ ) {
268
+ days.value.push({
269
+ text: i,
270
+ class: 'active',
271
+ testId: `day-${i}`,
272
+ })
273
+ } else if (
274
+ i === new Date().getDate() &&
275
+ indexCurrentMonth === new Date().getMonth() &&
276
+ currentYear.value === new Date().getFullYear()
277
+ ) {
278
+ days.value.push({
279
+ text: i,
280
+ class: 'today',
281
+ testId: `day-${i}`,
282
+ })
283
+ } else {
284
+ days.value.push({ text: i, class: '', testId: `day-${i}` })
285
+ }
286
+ }
287
+
288
+ const x = 42 - days.value.length
289
+ for (let j = 1; j <= x; j++) {
290
+ days.value.push({
291
+ text: j,
292
+ class: 'next-date',
293
+ testId: `day-${j}`,
294
+ })
295
+ }
296
+ }
297
+
298
+ const allMonths = computed<UI_I_Items[]>(() => {
299
+ const result = []
300
+ for (let i = 0; i < months.value.length; i++) {
301
+ const active = i + 1 === selectedMonth.value + 1 ? 'active' : ''
302
+ result.push({
303
+ text: months.value[i],
304
+ class: active,
305
+ testId: `month-${i}`,
306
+ })
307
+ }
308
+ return result
309
+ })
310
+
311
+ const firstYear = ref<number>(
312
+ Number(checkingDate.value.getFullYear().toString().slice(0, 3) + 0)
313
+ )
314
+ const allYears = computed<UI_I_Items[]>(() => {
315
+ const result = []
316
+ for (let i = firstYear.value; i < firstYear.value + 10; i++) {
317
+ const active = i === currentYear.value ? 'active' : ''
318
+ result.push({
319
+ text: i,
320
+ class: active,
321
+ testId: `year-${i}`,
322
+ })
323
+ }
324
+ return result
325
+ })
326
+ const prevYear = (): void => {
327
+ firstYear.value = firstYear.value - 10
328
+ }
329
+ const nextYear = (): void => {
330
+ firstYear.value = firstYear.value + 10
331
+ }
332
+ const setCurrentYear = (): void => {
333
+ firstYear.value = Number(
334
+ checkingDate.value.getFullYear().toString().slice(0, 3) + 0
335
+ )
336
+ }
337
+ const selectYear = (value: number): void => {
338
+ checkingDate.value = new Date(checkingDate.value.setFullYear(value))
339
+ renderCalendar()
340
+ showAllYears.value = false
341
+ }
342
+
343
+ const prevMonth = (): void => {
344
+ checkingDate.value.setMonth(checkingDate.value.getMonth() - 1)
345
+
346
+ renderCalendar()
347
+ }
348
+ const nextMonth = (): void => {
349
+ checkingDate.value.setMonth(checkingDate.value.getMonth() + 1)
350
+
351
+ renderCalendar()
352
+ }
353
+ const setCurrentDate = (): void => {
354
+ isEnabledEmit = true
355
+ checkingDate.value = new Date()
356
+
357
+ setTimeout(() => {
358
+ renderCalendar()
359
+ }, 0)
360
+ }
361
+
362
+ const selectMonth = (value: number): void => {
363
+ checkingDate.value = new Date(checkingDate.value.setMonth(value))
364
+ selectedMonth.value = value
365
+ showAllMonths.value = false
366
+
367
+ renderCalendar()
368
+ }
369
+ const selectDay = (value: number | string, type: string): void => {
370
+ isEnabledEmit = true
371
+ if (type === 'prev-date') {
372
+ checkingDate.value = new Date(
373
+ checkingDate.value.setMonth(checkingDate.value.getMonth() - 1)
374
+ )
375
+ } else if (type === 'next-date') {
376
+ checkingDate.value = new Date(
377
+ checkingDate.value.setMonth(checkingDate.value.getMonth() + 1)
378
+ )
379
+ }
380
+ checkingDate.value = new Date(checkingDate.value.setDate(+value))
381
+
382
+ isShowCalendar.value = false
383
+ }
384
+
385
+ const isShowCalendar = ref<boolean>(false)
386
+
387
+ const uniqueId = ref<number>(0)
388
+ const calendarTop = ref<number>()
389
+ const calendarLeft = ref<number>()
390
+ const showHideCalendar = (): void => {
391
+ const allDatePickers = document.querySelectorAll('.the-datepicer')
392
+ allDatePickers.forEach((element: any) => (element.style.display = 'none'))
393
+ const element = document.querySelector(
394
+ `.calendar-id-${uniqueId.value}`
395
+ ) as HTMLElement
396
+
397
+ const elementSizes = element.getBoundingClientRect()
398
+
399
+ const isOverTop = elementSizes.y - datepickerWidth + 2 < 0
400
+ // Set content top
401
+ if (!isOverTop) calendarTop.value = elementSizes.y - datepickerWidth + 2
402
+ else calendarTop.value = elementSizes.y + elementSizes.height + 2
403
+
404
+ // Set content left
405
+ calendarLeft.value = elementSizes.x - datepickerHeight / 2
406
+
407
+ isShowCalendar.value = !isShowCalendar.value
408
+ }
409
+
410
+ const windowClick = (): void => {
411
+ isShowCalendar.value = false
412
+ }
413
+
414
+ const bodyScroll = (): void => {
415
+ isShowCalendar.value = false
416
+ }
417
+
418
+ onMounted(() => {
419
+ renderCalendar()
420
+ window.addEventListener('click', windowClick)
421
+ uniqueId.value = useUniqueId()
422
+ })
423
+ onUnmounted(() => {
424
+ window.removeEventListener('scroll', windowClick)
425
+ })
426
+
427
+ watch(isShowCalendar, (newValue) => {
428
+ if (newValue) {
429
+ checkingDate.value.setMonth(new Date(props.modelValue).getMonth())
430
+ checkingDate.value.setFullYear(new Date(props.modelValue).getFullYear())
431
+ renderCalendar()
432
+ window.addEventListener('scroll', bodyScroll, true)
433
+ } else window.removeEventListener('scroll', bodyScroll, true)
434
+ })
435
+ </script>
436
+
437
+ <style scoped lang="scss">
438
+ .item-day {
439
+ font-size: 13px;
440
+ width: 36px;
441
+ height: 36px;
442
+ display: flex;
443
+ justify-content: center;
444
+ align-items: center;
445
+ transition: background-color 0.2s;
446
+ cursor: pointer;
447
+ border-radius: 0.15rem;
448
+ }
449
+ .container-datepicker {
450
+ background: unset;
451
+
452
+ .the-datepicer {
453
+ width: 278px;
454
+ height: 314px;
455
+ border: 1px solid var(--vertical-nav-hover-bg-color);
456
+ border-radius: 0.15rem;
457
+ box-shadow: 0 1px 2.4px hsl(0deg 0% 45% / 25%);
458
+ padding: 12px;
459
+ position: fixed;
460
+ z-index: var(--z-fixed);
461
+ background-color: var(--modal-other-bg-color);
462
+
463
+ .content-month {
464
+ .all-months {
465
+ display: grid;
466
+ grid-template-columns: 1fr 1fr;
467
+
468
+ .calendar-btn {
469
+ width: 100%;
470
+ height: 48px;
471
+ display: flex;
472
+ justify-content: center;
473
+ align-items: center;
474
+ color: var(--checkbox-label-color);
475
+ }
476
+ .active {
477
+ background: var(--vertical-nav-hover-bg-color);
478
+ color: var(--form-input-color);
479
+ }
480
+ }
481
+ }
482
+ .content-years {
483
+ .content-buttons-arrow {
484
+ max-width: 108px;
485
+ margin: 0 auto;
486
+ }
487
+ .all-years {
488
+ display: grid;
489
+ grid-template-columns: 1fr 1fr;
490
+
491
+ .calendar-btn {
492
+ width: 100%;
493
+ height: 48px;
494
+ color: var(--checkbox-label-color);
495
+ display: flex;
496
+ justify-content: center;
497
+ align-items: center;
498
+ }
499
+ .active {
500
+ background: var(--vertical-nav-hover-bg-color);
501
+ color: var(--form-input-color);
502
+ }
503
+ }
504
+ }
505
+ .main-content {
506
+ .the-month {
507
+ height: 36px;
508
+ display: flex;
509
+ justify-content: space-between;
510
+ align-items: center;
511
+ text-align: center;
512
+
513
+ i {
514
+ font-size: 29px;
515
+ cursor: pointer;
516
+ }
517
+ h1 {
518
+ font-size: 3rem;
519
+ font-weight: 400;
520
+ text-transform: uppercase;
521
+ letter-spacing: 0.2rem;
522
+ margin-bottom: 1rem;
523
+ }
524
+ p {
525
+ font-size: 1.6rem;
526
+ }
527
+
528
+ .top-menu {
529
+ display: flex;
530
+ align-items: center;
531
+ }
532
+ }
533
+
534
+ .bottom-panel {
535
+ .weekdays {
536
+ display: flex;
537
+ align-items: center;
538
+
539
+ div {
540
+ font-size: 12px;
541
+ font-weight: bold;
542
+ letter-spacing: 0.1rem;
543
+ width: 36px;
544
+ height: 36px;
545
+ display: flex;
546
+ justify-content: center;
547
+ align-items: center;
548
+ color: var(--checkbox-label-color);
549
+ }
550
+ }
551
+ .days {
552
+ width: 100%;
553
+ display: flex;
554
+ flex-wrap: wrap;
555
+
556
+ .item-day {
557
+ font-size: 13px;
558
+ width: 36px;
559
+ height: 36px;
560
+ display: flex;
561
+ justify-content: center;
562
+ align-items: center;
563
+ transition: background-color 0.2s;
564
+ cursor: pointer;
565
+ border-radius: 0.15rem;
566
+ color: var(--checkbox-label-color);
567
+
568
+ &:not(.prev-date):not(.today):hover {
569
+ background: #eee;
570
+ }
571
+ &.active {
572
+ background: #d9e4ea;
573
+ color: #000;
574
+ font-weight: bold;
575
+ }
576
+ &.today {
577
+ color: var(--blue-950);
578
+ font-weight: bold;
579
+ }
580
+ &.prev-date,
581
+ &.next-date {
582
+ opacity: 0.5;
583
+ }
584
+ }
585
+ }
586
+ }
587
+ }
588
+ }
589
+
590
+ .calendar-btn {
591
+ width: 48px;
592
+ height: 36px;
593
+ color: #0095d3;
594
+ text-align: center;
595
+ white-space: nowrap;
596
+ overflow: hidden;
597
+ text-overflow: ellipsis;
598
+ background: unset;
599
+ border: none;
600
+ cursor: pointer;
601
+ font-size: 18px;
602
+ border-radius: 3px;
603
+
604
+ &:hover {
605
+ background: #eee;
606
+ }
607
+ }
608
+
609
+ .content-buttons-arrow {
610
+ display: flex;
611
+ align-items: center;
612
+ justify-content: space-between;
613
+
614
+ .icons {
615
+ color: #0095d3;
616
+ }
617
+
618
+ .calendar-btn {
619
+ width: 40px;
620
+ height: 40px;
621
+ display: flex;
622
+ align-items: center;
623
+ justify-content: center;
624
+ }
625
+ }
626
+
627
+ .arrow-btn {
628
+ width: 18px;
629
+ height: 18px;
630
+
631
+ &.prev {
632
+ transform: rotate(-90deg);
633
+ }
634
+ &.next {
635
+ transform: rotate(90deg);
636
+ }
637
+ }
638
+ }
639
+ </style>