@it-enterprise/forcebpm-ui-kit 1.0.2-beta.29 → 1.0.2-beta.30

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.
package/index.js CHANGED
@@ -27,6 +27,8 @@ export { default as FMenuDatePicker } from './src/f-date-picker/FMenuDatePicker.
27
27
  export { default as FTextFieldDate } from './src/f-date-picker/FTextFieldDate.vue'
28
28
  export { default as FUserGroupPicker } from './src/FUserGroupPicker.vue'
29
29
  export { default as FLangSwitcher } from './src/FLangSwitcher.vue'
30
+ export { default as FActionSnackbar } from './src/FActionSnackbar.vue'
31
+ export { default as FPagination } from './src/FPagination.vue'
30
32
 
31
33
  // Utils
32
34
  export { hexToRGBA, createRadialGradient } from './src/utils/color.js'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@it-enterprise/forcebpm-ui-kit",
4
- "version": "1.0.2-beta.29",
4
+ "version": "1.0.2-beta.30",
5
5
  "description": "FBPM UI Kit",
6
6
  "author": "it-enterprise",
7
7
  "license": "MIT",
@@ -0,0 +1,107 @@
1
+ <script setup>
2
+ // FActionSnackbar
3
+ import { computed } from 'vue'
4
+
5
+ const props = defineProps({
6
+ actions: {
7
+ type: Array,
8
+ default: () => []
9
+ // Example of list item:
10
+ // {
11
+ // text: 'Button Text',
12
+ // action: () => {},
13
+ // icon: 'fire',
14
+ // size: 20, // optional, default is 20
15
+ // hide: false, // optional setting to hide button without removing it from the list
16
+ // disabled: false // optional setting to disable button
17
+ // }
18
+ },
19
+ loading: {
20
+ type: Boolean,
21
+ default: false
22
+ },
23
+ tooltipProps: {
24
+ type: Object,
25
+ default: () => ({
26
+ location: 'top'
27
+ })
28
+ }
29
+ })
30
+
31
+ const state = defineModel({
32
+ type: Boolean,
33
+ default: false
34
+ })
35
+
36
+ const loaderItems = computed(() => {
37
+ const visibleCount = props.actions.filter(action => !action.hide).length
38
+ return Array.from({ length: visibleCount }, (_, i) => i)
39
+ })
40
+ </script>
41
+
42
+ <template>
43
+ <v-snackbar class="f-action-snackbar" position="absolute" :model-value="state" rounded="lg" :timeout="-1">
44
+ <!-- Loading -->
45
+ <div v-if="loading" class="d-flex">
46
+ <v-skeleton-loader v-for="i in loaderItems" :key="i" type="button" height="40" width="60" class="f-skeleton-loader" />
47
+ </div>
48
+
49
+ <!-- Actions -->
50
+ <template v-else>
51
+ <v-tooltip v-for="(btn, idx) in props.actions" :key="idx" :text="btn.text" v-bind="tooltipProps">
52
+ <template #activator="{ props: propsTooltip }">
53
+ <v-btn v-if="!btn.hide" v-bind="propsTooltip" variant="text" width="60" :disabled="btn.disabled" @click="btn.action">
54
+ <FIcon :icon="btn.icon" :size="btn.size || 20" color="white" />
55
+ </v-btn>
56
+ </template>
57
+ </v-tooltip>
58
+ </template>
59
+ </v-snackbar>
60
+ </template>
61
+
62
+ <style lang="scss" scoped>
63
+ .f-action-snackbar {
64
+ bottom: 8%;
65
+ :deep(.v-snackbar__wrapper) {
66
+ min-height: 0;
67
+ min-width: min-content;
68
+ background-color: rgb(var(--v-theme-title-dark));
69
+ box-shadow: var(--f-box-shadow);
70
+ }
71
+ :deep(.v-snackbar__content) {
72
+ padding: 0;
73
+ .v-btn {
74
+ .v-btn__underlay {
75
+ transition: background-color 0.3s ease-in-out;
76
+ }
77
+ &:hover {
78
+ .v-btn__underlay {
79
+ background-color: rgba(255, 255, 255, 0.08);
80
+ }
81
+ }
82
+ }
83
+ .v-skeleton-loader:first-child {
84
+ border-top-right-radius: 0;
85
+ border-bottom-right-radius: 0;
86
+ .v-skeleton-loader__button {
87
+ border-top-right-radius: 0;
88
+ border-bottom-right-radius: 0;
89
+ }
90
+ }
91
+ .v-skeleton-loader:last-child {
92
+ border-top-left-radius: 0;
93
+ border-bottom-left-radius: 0;
94
+ .v-skeleton-loader__button {
95
+ border-top-left-radius: 0;
96
+ border-bottom-left-radius: 0;
97
+ }
98
+ }
99
+ .v-skeleton-loader:not(.v-skeleton-loader:first-child, .v-skeleton-loader:last-child) {
100
+ border-radius: 0;
101
+ .v-skeleton-loader__button {
102
+ border-radius: 0;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ </style>
@@ -64,7 +64,7 @@ const isEmpty = computed(() => !props.list.length || props.list.every(el => el.h
64
64
  </v-tooltip>
65
65
  </template>
66
66
 
67
- <v-list>
67
+ <v-list class="f-context-menu-list">
68
68
  <template v-for="(item, idx) in list">
69
69
  <template v-if="!item.hide">
70
70
  <!-- Divider top -->
@@ -85,40 +85,3 @@ const isEmpty = computed(() => !props.list.length || props.list.every(el => el.h
85
85
  </v-list>
86
86
  </v-menu>
87
87
  </template>
88
-
89
- <style lang="scss" scoped>
90
- .f-menu {
91
- .f-context-menu-content {
92
- .v-list {
93
- padding: 12px 6px;
94
- overflow-x: hidden;
95
- .v-list-item {
96
- padding: 4px 6px;
97
- min-height: auto;
98
- :deep(.v-list-item__overlay) {
99
- border-radius: 5.8px;
100
- background: rgb(var(--v-theme-primary));
101
- }
102
- &:hover {
103
- :deep(.v-list-item__overlay) {
104
- opacity: 0.15;
105
- }
106
- }
107
- .v-list-item__content {
108
- .v-list-item-title {
109
- display: flex;
110
- align-items: center;
111
- font-weight: 600;
112
- font-size: 1em;
113
- }
114
- }
115
- }
116
- .v-divider {
117
- position: relative;
118
- min-width: calc(100% + 12px);
119
- left: -6px;
120
- }
121
- }
122
- }
123
- }
124
- </style>
@@ -0,0 +1,163 @@
1
+ <script setup>
2
+ // FPagination
3
+ import { computed, useTemplateRef } from 'vue'
4
+ import { useI18n } from 'vue-i18n'
5
+
6
+ const { t } = useI18n()
7
+
8
+ const props = defineProps({
9
+ length: {
10
+ type: Number,
11
+ default: 1
12
+ },
13
+ total: {
14
+ type: Number,
15
+ default: 0
16
+ },
17
+ itemsPerPageOptions: {
18
+ type: Array,
19
+ default: () => [18, 36, 72, -1],
20
+ validator: value => {
21
+ return value.every(number => typeof number === 'number')
22
+ }
23
+ },
24
+ itemsPerPageText: {
25
+ type: String,
26
+ default: ''
27
+ }
28
+ })
29
+
30
+ const page = defineModel('page', {
31
+ type: Number,
32
+ default: 1
33
+ })
34
+ const itemsPerPage = defineModel('itemsPerPage', {
35
+ type: Number,
36
+ default: 18
37
+ })
38
+
39
+ const itemCountBtnRef = useTemplateRef('item-count-btn')
40
+
41
+ const itemsCountLabel = computed(() => {
42
+ const label = props.itemsPerPageText || t('pagination.itemsPerPage')
43
+ const count = itemsPerPage.value === -1 || props.length === 1 ? t('pagination.all') : itemsPerPage.value
44
+ return `${label} ${count} ${t('pagination.of')} ${props.total}`
45
+ })
46
+
47
+ const offset = computed(() => {
48
+ return itemCountBtnRef.value ? -itemCountBtnRef.value.$el.offsetWidth : 0
49
+ })
50
+
51
+ const changeItemsPerPage = number => {
52
+ itemsPerPage.value = number
53
+ page.value = 1
54
+ }
55
+ </script>
56
+
57
+ <template>
58
+ <div class="f-pagination d-flex">
59
+ <!-- Pagination -->
60
+ <v-pagination
61
+ v-if="itemsPerPage !== -1 && length > 1"
62
+ v-model="page"
63
+ :length="length"
64
+ :total-visible="7"
65
+ color="secondary"
66
+ class="ml-auto"
67
+ next-icon="chevron-right bg-secondary"
68
+ prev-icon="chevron-left bg-secondary"
69
+ :style="`margin-right: ${offset}px`"
70
+ />
71
+
72
+ <!-- Items Per Page -->
73
+ <div class="d-flex flex-column flex-end ml-auto f-pagination--items-per-page">
74
+ <span v-if="!length" class="text-secondary f-pagination--items-per-page-text">
75
+ {{ props.itemsPerPageText || t('pagination.itemsPerPage') }}: {{ $t('pagination.all') }}
76
+ </span>
77
+
78
+ <v-menu v-else>
79
+ <template #activator="{ props: propsMenu }">
80
+ <v-btn v-bind="propsMenu" ref="item-count-btn" variant="text" height="22" color="secondary" class="pa-0 f-pagination--item-count-btn">
81
+ {{ itemsCountLabel }}
82
+ <FIcon icon="chevron-down" color="secondary" size="16" class="ml-1" />
83
+ </v-btn>
84
+ </template>
85
+
86
+ <v-list>
87
+ <v-list-item v-for="(number, idx) in itemsPerPageOptions" :key="idx" :active="number === itemsPerPage" @click="changeItemsPerPage(number)">
88
+ <v-list-item-title>
89
+ {{ number === -1 ? $t('pagination.all') : number }}
90
+ </v-list-item-title>
91
+ </v-list-item>
92
+ </v-list>
93
+ </v-menu>
94
+ </div>
95
+ </div>
96
+ </template>
97
+
98
+ <style lang="scss" scoped>
99
+ .f-pagination {
100
+ .v-pagination {
101
+ :deep(.v-pagination__list) {
102
+ .v-pagination__item,
103
+ .v-pagination__first,
104
+ .v-pagination__prev,
105
+ .v-pagination__next,
106
+ .v-pagination__last {
107
+ margin: 0;
108
+ .v-btn {
109
+ min-width: 22px;
110
+ width: 22px;
111
+ height: 22px;
112
+ border-radius: 4px;
113
+ }
114
+ }
115
+ .v-pagination__prev,
116
+ .v-pagination__next {
117
+ .v-btn {
118
+ border: 1px solid rgb(var(--v-theme-secondary));
119
+ }
120
+ .f-icon {
121
+ min-height: 12px;
122
+ min-width: 12px;
123
+ width: 12px;
124
+ height: 12px;
125
+ }
126
+ }
127
+ .v-pagination__next {
128
+ margin-left: 12px;
129
+ }
130
+ .v-pagination__prev {
131
+ margin-right: 12px;
132
+ }
133
+ .v-pagination__item {
134
+ margin: 0 2px;
135
+ .v-btn {
136
+ font-size: 0.9em;
137
+ }
138
+ &.v-pagination__item--is-active {
139
+ .v-btn {
140
+ background: rgb(var(--v-theme-secondary));
141
+ .v-btn__content {
142
+ color: white;
143
+ }
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ .f-pagination--items-per-page {
150
+ .f-pagination--items-per-page-text {
151
+ line-height: 22px;
152
+ }
153
+ .f-pagination--item-count-btn {
154
+ margin-left: -1px;
155
+ }
156
+ .v-list-item--active {
157
+ .v-list-item-title {
158
+ font-weight: 500;
159
+ }
160
+ }
161
+ }
162
+ }
163
+ </style>
@@ -0,0 +1,6 @@
1
+ <svg width="15" height="16" viewBox="0 0 15 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M9.95427 2.17569V0H4.69795V2.17569H0V2.9651H1.38628L2.38748 16H12.284L13.2852 2.9651H14.8833V2.17569H9.95427ZM9.18412 0.770156V2.15644H5.48737V0.770156H9.18412ZM12.4958 2.92659L11.5523 15.1721H3.09988L2.17569 2.92659H12.4958Z" fill="#5E5CE6"/>
3
+ <path d="M7.72007 5.02527H6.93066V13.1697H7.72007V5.02527Z" fill="#5E5CE6"/>
4
+ <path d="M10.3283 5.03313L9.54004 4.99042L9.09837 13.1418L9.8866 13.1845L10.3283 5.03313Z" fill="#5E5CE6"/>
5
+ <path d="M5.54505 13.1455L5.10352 4.99408L4.31529 5.03678L4.75682 13.1882L5.54505 13.1455Z" fill="#5E5CE6"/>
6
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path id="&#208;&#152;&#209;&#129;&#209;&#133;&#208;&#190;&#208;&#180;&#209;&#143;&#209;&#137;&#208;&#184;&#208;&#181; &#208;&#180;&#208;&#190;&#208;&#186;&#209;&#131;&#208;&#188;&#208;&#181;&#208;&#189;&#209;&#130;&#209;&#139;" d="M14.8981 0.00134478C14.9857 -0.00339847 15.0717 0.0284092 15.135 0.0903504C15.1981 0.151176 15.231 0.236833 15.2254 0.323885L15.0552 2.98596H15.6858C15.8666 2.99545 16.0078 3.15198 15.9997 3.33278V3.33752L15.2391 12.8246C15.2248 12.9903 15.0817 13.1178 14.9157 13.1131H1.06877C0.903036 13.1189 0.758786 12.992 0.744277 12.8265L0.0009827 3.34143C-0.00599266 3.2513 0.0244199 3.16258 0.084129 3.09534C0.14328 3.02837 0.227821 2.98819 0.317664 2.98596H0.748183V1.75858C0.75767 1.5814 0.901083 1.43715 1.07826 1.42739H7.47327L9.53239 0.0404069C9.60857 -0.0112108 9.68195 0.00134478 9.71292 0.00134478H14.8981ZM14.5627 0.643915H9.81141L7.75228 2.03034C7.67667 2.0814 7.60357 2.06996 7.57176 2.06996H1.39047V2.98596H14.4124L14.5627 0.643915ZM15.3314 3.62853H0.668943L1.36174 12.4711H14.6225L15.3314 3.62853Z" fill="#888EA4"/>
3
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M0 10.6068H10.6066V0.000156449" stroke="#97A7C8" stroke-width="2"/>
3
+ <path d="M21.2129 10.6068H10.6063V21.2134" stroke="#97A7C8" stroke-width="2"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M0 8H8V2.73828e-07" stroke="#97A7C8"/>
3
+ <path d="M15.9999 8H7.99988V16" stroke="#97A7C8"/>
4
+ </svg>
@@ -1,3 +1,3 @@
1
- <svg width="16" height="16" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
2
  <circle cx="8" cy="8" r="7.75" fill="none" stroke="#888EA4" stroke-width="0.5"/>
3
3
  </svg>
@@ -1,4 +1,4 @@
1
- <svg width="16" height="16" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
2
  <circle cx="8" cy="8" r="7.75" fill="none" stroke="#97B960" stroke-width="0.5"/>
3
3
  <circle cx="8" cy="8" r="4" fill="#97B960"/>
4
4
  </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="10" height="12" viewBox="0 0 10 12" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M0.320068 9.40088L1.82007 10.6509M1.82007 10.6509L3.32007 9.40088M1.82007 10.6509V0.650879M8.82007 1.90088L7.32007 0.650879M7.32007 0.650879L5.82007 1.90088M7.32007 0.650879V10.6509" stroke="#888EA4"/>
3
+ </svg>
@@ -1,6 +1,6 @@
1
- <svg width="10" height="12" viewBox="0 0 10 12" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M1 9.75L2.5 11L4 9.75" stroke="#3B3B47"/>
3
- <path d="M2.5 1L2.5 11" stroke="#3B3B47"/>
4
- <path d="M9.5 2.25L8 1L6.5 2.25" stroke="#3B3B47"/>
5
- <path d="M8 11L8 1" stroke="#3B3B47"/>
1
+ <svg width="15" height="17" viewBox="0 0 15 17" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M0.224121 14.4561L2.62412 16.4561L5.02412 14.4561" stroke="#888EA4" stroke-width="0.7"/>
3
+ <path d="M2.62402 0.456055L2.62402 16.4561" stroke="#888EA4" stroke-width="0.7"/>
4
+ <path d="M13.8247 2.45605L11.4247 0.456055L9.02471 2.45605" stroke="#888EA4" stroke-width="0.7"/>
5
+ <path d="M11.4248 16.4561L11.4248 0.456054" stroke="#888EA4" stroke-width="0.7"/>
6
6
  </svg>
@@ -120,6 +120,13 @@
120
120
  mask-size: contain;
121
121
  mask-position: center;
122
122
  }
123
+ &.sort-solid {
124
+ background-color: rgb(var(--v-theme-primary));
125
+ -webkit-mask: url('./../icons/sort-solid.svg') no-repeat;
126
+ mask: url('./../icons/sort-solid.svg') no-repeat;
127
+ mask-size: contain;
128
+ mask-position: center;
129
+ }
123
130
  &.filter {
124
131
  background-color: rgb(var(--v-theme-primary));
125
132
  -webkit-mask: url('./../icons/filter.svg') no-repeat;
@@ -177,21 +184,21 @@
177
184
  mask-position: center;
178
185
  }
179
186
  &.ctx-pen {
180
- background-color: rgb(var(--v-primary-base));
187
+ background-color: rgb(var(--v-theme-primary));
181
188
  -webkit-mask: url('./../icons/ctx-pen.svg') no-repeat;
182
189
  mask: url('./../icons/ctx-pen.svg') no-repeat;
183
190
  mask-size: contain;
184
191
  mask-position: center;
185
192
  }
186
193
  &.ctx-delete {
187
- background-color: rgb(var(--v-primary-base));
194
+ background-color: rgb(var(--v-theme-primary));
188
195
  -webkit-mask: url('./../icons/ctx-delete.svg') no-repeat;
189
196
  mask: url('./../icons/ctx-delete.svg') no-repeat;
190
197
  mask-size: contain;
191
198
  mask-position: center;
192
199
  }
193
200
  &.ctx-arrow-next {
194
- background-color: rgb(var(--v-primary-base));
201
+ background-color: rgb(var(--v-theme-primary));
195
202
  -webkit-mask: url('./../icons/ctx-arrow.svg') no-repeat;
196
203
  mask: url('./../icons/ctx-arrow.svg') no-repeat;
197
204
  mask-size: contain;
@@ -225,6 +232,34 @@
225
232
  mask-size: contain;
226
233
  mask-position: center;
227
234
  }
235
+ &.folder {
236
+ background-color: rgb(var(--v-theme-primary));
237
+ -webkit-mask: url('./../icons/folder.svg') no-repeat;
238
+ mask: url('./../icons/folder.svg') no-repeat;
239
+ mask-size: contain;
240
+ mask-position: center;
241
+ }
242
+ &.plus {
243
+ background-color: rgb(var(--v-theme-primary));
244
+ -webkit-mask: url('./../icons/plus.svg') no-repeat;
245
+ mask: url('./../icons/plus.svg') no-repeat;
246
+ mask-size: contain;
247
+ mask-position: center;
248
+ }
249
+ &.plus-solid {
250
+ background-color: rgb(var(--v-theme-primary));
251
+ -webkit-mask: url('./../icons/plus-solid.svg') no-repeat;
252
+ mask: url('./../icons/plus-solid.svg') no-repeat;
253
+ mask-size: contain;
254
+ mask-position: center;
255
+ }
256
+ &.delete {
257
+ background-color: rgb(var(--v-theme-primary));
258
+ -webkit-mask: url('./../icons/delete.svg') no-repeat;
259
+ mask: url('./../icons/delete.svg') no-repeat;
260
+ mask-size: contain;
261
+ mask-position: center;
262
+ }
228
263
  }
229
264
 
230
265
  @media screen and (max-width: 1280px) {
@@ -7,6 +7,4 @@
7
7
  @use 'expansion';
8
8
  @use 'skeleton';
9
9
  @use 'card';
10
- @use 'pagination';
11
- @use 'snackbar';
12
10
  // @use 'tables';
@@ -22,6 +22,12 @@
22
22
  line-height: 1.1em;
23
23
  font-weight: 500;
24
24
  letter-spacing: normal;
25
+ color: rgb(var(--v-theme-subTitle));
26
+ }
27
+ }
28
+ &.v-list-item--active {
29
+ .v-list-item__overlay {
30
+ background: rgb(var(--v-theme-primary));
25
31
  }
26
32
  }
27
33
  }
@@ -6,9 +6,11 @@
6
6
 
7
7
  .v-skeleton-loader__image {
8
8
  height: inherit;
9
+ border-radius: inherit;
9
10
  }
10
11
 
11
- .v-skeleton-loader__avatar {
12
+ .v-skeleton-loader__avatar,
13
+ .v-skeleton-loader__button {
12
14
  min-height: inherit;
13
15
  min-width: inherit;
14
16
  max-width: inherit;
@@ -28,10 +28,7 @@
28
28
  background-color: currentColor;
29
29
  }
30
30
  .v-btn__content {
31
- .v-tab__slider {
32
- // height: 0;
33
- // opacity: 0;
34
- }
31
+ padding: 0 4px;
35
32
  }
36
33
  }
37
34
  .v-tab--selected {
@@ -80,6 +80,38 @@
80
80
  }
81
81
  }
82
82
 
83
+ .f-menu.v-menu .v-overlay__content .f-context-menu-list.v-list {
84
+ padding: 12px 6px;
85
+ overflow-x: hidden;
86
+ .v-list-item {
87
+ padding: 4px 6px;
88
+ min-height: auto;
89
+ .v-list-item__overlay {
90
+ border-radius: 5.8px;
91
+ background: rgb(var(--v-theme-primary));
92
+ }
93
+ &:hover {
94
+ .v-list-item__overlay {
95
+ opacity: 0.15;
96
+ }
97
+ }
98
+ .v-list-item__content {
99
+ .v-list-item-title {
100
+ display: flex;
101
+ align-items: center;
102
+ font-weight: 600;
103
+ font-size: 1em;
104
+ color: rgb(var(--v-theme-subTitle));
105
+ }
106
+ }
107
+ }
108
+ .v-divider {
109
+ position: relative;
110
+ min-width: calc(100% + 12px);
111
+ left: -6px;
112
+ }
113
+ }
114
+
83
115
  .v-virtual-scroll {
84
116
  &::-webkit-scrollbar {
85
117
  width: 6px;
@@ -20,7 +20,7 @@ const modelValue = defineModel({
20
20
  <v-tooltip :text="$t('tooltip.sort')">
21
21
  <template #activator="{ props: tooltipProps }">
22
22
  <v-btn class="f-sort-panel-activator" variant="text" size="30" v-bind="mergeProps(menuProps, tooltipProps)">
23
- <v-badge dot color="primary" :model-value="badge" offset-x="-4" offset-y="-2">
23
+ <v-badge dot color="primary" :model-value="badge" offset-x="-2" offset-y="-2">
24
24
  <FIcon icon="sort" color="text" size="18" />
25
25
  </v-badge>
26
26
  </v-btn>
@@ -32,7 +32,7 @@ const modelValue = defineModel({
32
32
  <div>
33
33
  <!-- Sort header -->
34
34
  <div class="f-sort-panel-header d-flex align-end pa-3 text-uppercase text-subTitle">
35
- <FIcon icon="sort" color="text" size="14" class="mr-2" />
35
+ <FIcon icon="sort-solid" color="text" size="14" class="mr-2" />
36
36
  <span class="lh-1">{{ $t('tooltip.sort') }}</span>
37
37
  </div>
38
38
 
@@ -45,3 +45,11 @@ const modelValue = defineModel({
45
45
  </div>
46
46
  </v-menu>
47
47
  </template>
48
+
49
+ <style lang="scss" scoped>
50
+ :deep(.f-sort-panel-body) {
51
+ .f-radio .v-selection-control__wrapper .v-selection-control__input .f-icon {
52
+ --v-selection-control-size: 16px;
53
+ }
54
+ }
55
+ </style>
@@ -105,5 +105,11 @@
105
105
  "yFormat": "yyyy",
106
106
  "hFormat": "hh",
107
107
  "minFormat": "mm"
108
+ },
109
+ "pagination": {
110
+ "itemsPerPage": "Items per page",
111
+ "total": "Total items",
112
+ "of": "of",
113
+ "all": "All"
108
114
  }
109
115
  }
@@ -106,5 +106,11 @@
106
106
  "yFormat": "гггг",
107
107
  "hFormat": "чч",
108
108
  "minFormat": "мм"
109
+ },
110
+ "pagination": {
111
+ "itemsPerPage": "Элементов на странице",
112
+ "total": "Всего элементов",
113
+ "of": "из",
114
+ "all": "Все"
109
115
  }
110
116
  }
@@ -106,5 +106,11 @@
106
106
  "yFormat": "рррр",
107
107
  "hFormat": "гг",
108
108
  "minFormat": "хх"
109
+ },
110
+ "pagination": {
111
+ "itemsPerPage": "Елементів на сторінці",
112
+ "total": "Всього елементів",
113
+ "of": "з",
114
+ "all": "Всі"
109
115
  }
110
116
  }
@@ -1,80 +0,0 @@
1
- // todo f-pagination styles
2
- .app-pagination {
3
- .v-theme--light.v-pagination .v-pagination__item {
4
- color: rgb(var(--v-theme-secondary));
5
- background-color: rgb(var(--v-theme-fields));
6
- margin: 0 2px;
7
- }
8
- .v-theme--light.v-pagination .v-pagination__item--is-active {
9
- color: rgb(var(--v-theme-fields));
10
- background-color: rgb(var(--v-theme-secondary)) !important;
11
- border-color: rgb(var(--v-theme-secondary)) !important;
12
- }
13
- .v-theme--dark.v-pagination .v-pagination__item {
14
- color: rgb(var(--v-theme-secondary));
15
- background-color: rgb(var(--v-theme-fields));
16
- margin: 0 2px;
17
- }
18
- .v-theme--dark.v-pagination .v-pagination__item--is-active {
19
- color: rgb(var(--v-theme-fields));
20
- background-color: rgb(var(--v-theme-secondary)) !important;
21
- border-color: rgb(var(--v-theme-secondary)) !important;
22
- }
23
- .v-pagination {
24
- display: flex;
25
- justify-content: center;
26
- min-width: 320px;
27
- max-width: 320px;
28
- height: 40px;
29
- .v-pagination__list {
30
- align-items: center;
31
- li {
32
- height: 20px;
33
- width: 20px;
34
- border: 1px solid transparent;
35
- border-radius: 3px;
36
- button {
37
- height: 20px;
38
- min-height: 20px !important;
39
- width: auto;
40
- padding: 0 2px 2px 0 !important;
41
- min-width: 20px !important;
42
- font-size: 0.65em;
43
- box-shadow: none;
44
- }
45
- button[ellipsis='true'] {
46
- font-size: 1em !important;
47
- color: rgb(var(--v-theme-secondary));
48
- }
49
- &.v-pagination__prev {
50
- .v-btn {
51
- border: 1px solid rgb(var(--v-theme-secondary));
52
- margin: 0;
53
- }
54
- background-color: rgb(var(--v-theme-fields));
55
- margin: 0 10px;
56
- i {
57
- background: rgb(var(--v-theme-secondary)) !important;
58
- height: 8px !important;
59
- min-height: 8px !important;
60
- margin: 2px 0 0 2px;
61
- }
62
- }
63
- &.v-pagination__next {
64
- .v-btn {
65
- border: 1px solid rgb(var(--v-theme-secondary));
66
- margin: 0;
67
- }
68
- background-color: rgb(var(--v-theme-fields));
69
- margin: 0 10px;
70
- i {
71
- background: rgb(var(--v-theme-secondary)) !important;
72
- height: 8px !important;
73
- min-height: 8px !important;
74
- margin: 2px 0 0 2px;
75
- }
76
- }
77
- }
78
- }
79
- }
80
- }
@@ -1,36 +0,0 @@
1
- .fbpm-action-snackbar.v-overlay {
2
- bottom: 8%;
3
- .v-snackbar__wrapper {
4
- background-color: rgb(var(--v-theme-title-dark));
5
- min-height: 0;
6
- min-width: min-content;
7
- }
8
- .v-snackbar__content {
9
- padding: 0;
10
- .v-skeleton-loader:first-child {
11
- border-top-right-radius: 0;
12
- border-bottom-right-radius: 0;
13
- .v-skeleton-loader__button {
14
- border-top-right-radius: 0;
15
- border-bottom-right-radius: 0;
16
- }
17
- }
18
- .v-skeleton-loader:last-child {
19
- border-top-left-radius: 0;
20
- border-bottom-left-radius: 0;
21
- .v-skeleton-loader__button {
22
- border-top-left-radius: 0;
23
- border-bottom-left-radius: 0;
24
- }
25
- }
26
- .v-skeleton-loader:not(.v-skeleton-loader:first-child, .v-skeleton-loader:last-child) {
27
- border-radius: 0;
28
- .v-skeleton-loader__button {
29
- border-radius: 0;
30
- }
31
- }
32
- }
33
- .v-snackbar__action {
34
- display: none;
35
- }
36
- }