@itfin/components 1.3.99 → 1.4.0

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 (151) hide show
  1. package/package.json +1 -1
  2. package/src/components/button/Button.vue +4 -2
  3. package/src/components/card/BentoCard.vue +70 -19
  4. package/src/components/card/BentoGrid.vue +21 -8
  5. package/src/components/filter/FilterAmountRange.vue +50 -42
  6. package/src/components/filter/FilterBadge.vue +27 -22
  7. package/src/components/filter/FilterFacetsList.vue +21 -17
  8. package/src/components/filter/FilterPanel.vue +141 -44
  9. package/src/components/filter/index.stories.js +0 -2
  10. package/src/components/form/Label.vue +19 -2
  11. package/src/components/icon/Icon.vue +4 -2
  12. package/src/components/icon/components/fi_fingerprint.vue +4 -0
  13. package/src/components/icon/components/nomi-ai.vue +6 -0
  14. package/src/components/icon/components/nomi-arrow-down.vue +4 -0
  15. package/src/components/icon/components/nomi-arrow-right-top.vue +4 -0
  16. package/src/components/icon/components/nomi-arrow-up.vue +4 -0
  17. package/src/components/icon/components/nomi-arrow_down.vue +4 -0
  18. package/src/components/icon/components/nomi-arrow_up.vue +4 -0
  19. package/src/components/icon/components/nomi-arrows.vue +7 -0
  20. package/src/components/icon/components/nomi-calendar-alt.vue +4 -0
  21. package/src/components/icon/components/nomi-calendar-alt2.vue +4 -0
  22. package/src/components/icon/components/nomi-calendar.vue +11 -0
  23. package/src/components/icon/components/nomi-card.vue +4 -0
  24. package/src/components/icon/components/nomi-clear.vue +4 -0
  25. package/src/components/icon/components/nomi-close.vue +5 -0
  26. package/src/components/icon/components/nomi-counterparty.vue +4 -0
  27. package/src/components/icon/components/nomi-dashboard.vue +4 -0
  28. package/src/components/icon/components/nomi-expand.vue +7 -0
  29. package/src/components/icon/components/nomi-eye-close.vue +4 -0
  30. package/src/components/icon/components/nomi-eye-open.vue +4 -0
  31. package/src/components/icon/components/nomi-eye.vue +4 -0
  32. package/src/components/icon/components/nomi-filter.vue +4 -0
  33. package/src/components/icon/components/nomi-help.vue +5 -0
  34. package/src/components/icon/components/nomi-hide.vue +4 -0
  35. package/src/components/icon/components/nomi-logout.vue +5 -0
  36. package/src/components/icon/components/nomi-money.vue +4 -0
  37. package/src/components/icon/components/nomi-move-left.vue +4 -0
  38. package/src/components/icon/components/nomi-move-right.vue +4 -0
  39. package/src/components/icon/components/nomi-pen.vue +5 -0
  40. package/src/components/icon/components/nomi-person.vue +5 -0
  41. package/src/components/icon/components/nomi-pin.vue +7 -0
  42. package/src/components/icon/components/nomi-project.vue +4 -0
  43. package/src/components/icon/components/nomi-recurrence.vue +2 -0
  44. package/src/components/icon/components/nomi-repeat.vue +7 -0
  45. package/src/components/icon/components/nomi-report.vue +4 -0
  46. package/src/components/icon/components/nomi-scissors.vue +4 -0
  47. package/src/components/icon/components/nomi-settings.vue +4 -0
  48. package/src/components/icon/components/nomi-sort-asc.vue +7 -0
  49. package/src/components/icon/components/nomi-sort-desc.vue +7 -0
  50. package/src/components/icon/components/nomi-table-view.vue +4 -0
  51. package/src/components/icon/components/nomi-tag.vue +4 -0
  52. package/src/components/icon/components/nomi-target.vue +4 -0
  53. package/src/components/icon/components/nomi-text.vue +6 -0
  54. package/src/components/icon/components/nomi-transactions.vue +8 -0
  55. package/src/components/icon/components/nomi-trash.vue +4 -0
  56. package/src/components/icon/components/nomi-unpin.vue +7 -0
  57. package/src/components/icon/components/nomi-user.vue +5 -0
  58. package/src/components/icon/convert-icons.js +11 -0
  59. package/src/components/icon/icons.js +332 -286
  60. package/src/components/icon/new-icons/ai.svg +5 -0
  61. package/src/components/icon/new-icons/arrow-down.svg +3 -0
  62. package/src/components/icon/new-icons/arrow-right-top.svg +3 -0
  63. package/src/components/icon/new-icons/arrow-up.svg +3 -0
  64. package/src/components/icon/new-icons/arrow_down.svg +3 -0
  65. package/src/components/icon/new-icons/arrow_up.svg +3 -0
  66. package/src/components/icon/new-icons/arrows.svg +6 -0
  67. package/src/components/icon/new-icons/calendar-alt.svg +3 -0
  68. package/src/components/icon/new-icons/calendar-alt2.svg +3 -0
  69. package/src/components/icon/new-icons/calendar.svg +10 -0
  70. package/src/components/icon/new-icons/card.svg +3 -0
  71. package/src/components/icon/new-icons/clear.svg +3 -0
  72. package/src/components/icon/new-icons/close.svg +4 -0
  73. package/src/components/icon/new-icons/counterparty.svg +3 -0
  74. package/src/components/icon/new-icons/dashboard.svg +3 -0
  75. package/src/components/icon/new-icons/expand.svg +6 -0
  76. package/src/components/icon/new-icons/eye-close.svg +3 -0
  77. package/src/components/icon/new-icons/eye-open.svg +3 -0
  78. package/src/components/icon/new-icons/eye.svg +3 -0
  79. package/src/components/icon/new-icons/filter.svg +3 -0
  80. package/src/components/icon/new-icons/help.svg +4 -0
  81. package/src/components/icon/new-icons/hide.svg +3 -0
  82. package/src/components/icon/new-icons/logout.svg +4 -0
  83. package/src/components/icon/new-icons/money.svg +3 -0
  84. package/src/components/icon/new-icons/move-left.svg +3 -0
  85. package/src/components/icon/new-icons/move-right.svg +3 -0
  86. package/src/components/icon/new-icons/pen.svg +4 -0
  87. package/src/components/icon/new-icons/person.svg +4 -0
  88. package/src/components/icon/new-icons/pin.svg +6 -0
  89. package/src/components/icon/new-icons/project.svg +3 -0
  90. package/src/components/icon/new-icons/recurrence.svg +1 -0
  91. package/src/components/icon/new-icons/repeat.svg +6 -0
  92. package/src/components/icon/new-icons/report.svg +3 -0
  93. package/src/components/icon/new-icons/scissors.svg +3 -0
  94. package/src/components/icon/new-icons/settings.svg +3 -0
  95. package/src/components/icon/new-icons/sort-asc.svg +6 -0
  96. package/src/components/icon/new-icons/sort-desc.svg +6 -0
  97. package/src/components/icon/new-icons/table-view.svg +3 -0
  98. package/src/components/icon/new-icons/tag.svg +3 -0
  99. package/src/components/icon/new-icons/target.svg +3 -0
  100. package/src/components/icon/new-icons/text.svg +5 -0
  101. package/src/components/icon/new-icons/transactions.svg +7 -0
  102. package/src/components/icon/new-icons/trash.svg +3 -0
  103. package/src/components/icon/new-icons/unpin.svg +6 -0
  104. package/src/components/icon/new-icons/user.svg +4 -0
  105. package/src/components/modal/DeleteConfirmModal.vue +0 -2
  106. package/src/components/modal/ItemEditor.vue +1 -5
  107. package/src/components/pagination/Pagination.vue +3 -2
  108. package/src/components/pagination/Pagination2.vue +179 -0
  109. package/src/components/panels/Panel.vue +23 -7
  110. package/src/components/panels/PanelItemEdit.vue +62 -0
  111. package/src/components/panels/PanelLink.vue +26 -6
  112. package/src/components/panels/PanelList.vue +27 -26
  113. package/src/components/panels/helpers.spec.ts +27 -0
  114. package/src/components/panels/helpers.ts +37 -0
  115. package/src/components/popover/NoticePopout.vue +1 -1
  116. package/src/components/select/Select.vue +1 -1
  117. package/src/components/sortable/draggable.js +2 -1
  118. package/src/components/table/Table2.vue +35 -8
  119. package/src/components/table/TableBody.vue +10 -18
  120. package/src/components/table/TableGroup.vue +30 -14
  121. package/src/components/table/TableHeader.vue +122 -73
  122. package/src/components/table/TableRowToggle.vue +51 -0
  123. package/src/components/table/TableRows.vue +20 -29
  124. package/src/components/table/index.stories.js +22 -200
  125. package/src/components/table/table2.scss +237 -68
  126. package/src/components/text-field/MoneyField.vue +23 -21
  127. package/src/components/text-field/TextField.vue +12 -8
  128. package/src/components/tree/TreeEditor.vue +615 -0
  129. package/src/components/view/View.vue +244 -0
  130. package/src/components/view/index.stories.js +588 -0
  131. package/src/helpers/formatters.js +14 -1
  132. package/src/helpers/tree/cdbl.js +32 -0
  133. package/src/helpers/tree/cint.js +43 -0
  134. package/src/helpers/tree/domDrag.js +911 -0
  135. package/src/helpers/tree/domFinds.js +20 -0
  136. package/src/helpers/tree/domGetPointFromEvent.js +53 -0
  137. package/src/helpers/tree/domIsClientXYIn.js +65 -0
  138. package/src/helpers/tree/domRemove.js +50 -0
  139. package/src/helpers/tree/evem.js +27 -0
  140. package/src/helpers/tree/genID.js +56 -0
  141. package/src/helpers/tree/isEle.js +28 -0
  142. package/src/helpers/tree/isestr.js +35 -0
  143. package/src/helpers/tree/isint.js +40 -0
  144. package/src/helpers/tree/isnbr.js +24 -0
  145. package/src/helpers/tree/isnum.js +38 -0
  146. package/src/helpers/tree/ispint.js +41 -0
  147. package/src/helpers/tree/isstr.js +27 -0
  148. package/src/helpers/tree.js +30 -0
  149. package/src/helpers/vuetifyColor.js +136 -0
  150. package/src/locales/en.js +17 -0
  151. package/src/locales/uk.js +17 -0
@@ -1,30 +1,35 @@
1
1
  :root {
2
- --itf-table-border-color: #e1e1e1;
3
- --itf-table-header-bg: #f8f8f8;
4
- --itf-table-font-size: 1rem;
5
- --itf-table-selected-bg: #f0f0f0;
6
- --itf-table-active-bg: #e0e0e0;
7
- --itf-table-alt-bg: #f9f9f9;
8
- //--itf-table-border-color: #e1e1e1;
9
- //--itf-table-header-bg: #f9faf5;
10
- //--itf-table-selected-bg: #cbd6f4;
11
- --itf-table-header-bg: #f8f8f8;
12
- --itf-table-border-color: #dbddd1;
13
- --itf-table-hover-header-bg: var(--bs-tertiary-bg);
14
- --itf-table-hover-bg: #f2f2f2;
2
+ --itf-primary: #1A4A97;
3
+ --itf-table-header-font-size: 12px;
4
+ --itf-table-content-font-size: 16px;
5
+ --itf-table-selected-bg: #f9fafc;
6
+ --itf-table-active-bg: #d4dbec;
7
+ --itf-table-alt-bg: #F9FAFB;
8
+ --itf-table-alt-selected-bg: #eff1f3;
9
+ --itf-table-header-bg: #f5f7f8;
10
+ --itf-table-header-color: #8E97A5;
11
+ --itf-table-mirror-bg: #F2F4F7;
12
+ --itf-table-border-color: transparent; //var(--itf-table-header-bg);
13
+ --itf-table-header-border-color: #8E97A533;
14
+ --itf-table-border-base-color: var(--itf-table-header-bg); // кольори границь таблиці без внутрішніх рядків
15
+ --itf-table-border-base-width: 2px;
16
+ --itf-table-hover-header-bg: #dfe5ef;
17
+ --itf-table-hover-bg: #e9edf5;
15
18
  --itf-table-bg: var(--bs-body-bg);
16
19
  --itf-table-min-width: 45px;
17
20
  --itf-table-input-border-color: #aaaba6;
18
21
  --itf-table-input-focus-border-color: #0028aa;
19
22
  --itf-table-header-subtitle-color: #aeafaa;
20
23
  --itf-table-summary-text: var(--bs-tertiary-color);
24
+ --itf-table-table-border-radius: 1rem;
25
+ --itf-table-header-height: 2.25rem;
21
26
 
22
27
  --group-title-height: 40px;
23
- --table-row-height: 36px;
24
- --table-small-row-size: var(--table-row-height);
28
+ --table-row-height: none;
29
+ --table-small-row-size: 3rem;
25
30
  --shadow-area-width: 12px;
26
31
  --indicator-area-width: 38px;
27
- --hover-bg: var(--bs-tertiary-bg);
32
+ --bs-dropdown-item-border-radius: .5rem;
28
33
  }
29
34
  // dark
30
35
  body[data-theme="dark"] {
@@ -40,16 +45,27 @@ body[data-theme="dark"] {
40
45
  --itf-table-summary-text: #82909d80;
41
46
  }
42
47
  .itf-table2 {
43
- font-size: var(--itf-table-font-size);
48
+ font-size: var(--itf-table-content-font-size, var(--itf-table-font-size));
49
+ position: relative;
44
50
 
51
+ .itf-cell-center {
52
+ width: 100%;
53
+ height: 100%;
54
+ display: flex;
55
+ align-items: center;
56
+ }
45
57
  .scrollable {
46
58
  -webkit-overflow-scrolling: touch;
47
59
  overflow: hidden scroll;
48
60
  height: 100%;
49
61
  }
62
+ .scroller {
63
+ margin-bottom: .5rem;
64
+ }
50
65
  .scrollable-x {
51
66
  overflow-x: scroll;
52
67
  padding-right: 4px;
68
+ padding-top: 10px; // щоб drag для колонок був видимий
53
69
  }
54
70
  &.table-absolute {
55
71
  position: absolute;
@@ -68,12 +84,21 @@ body[data-theme="dark"] {
68
84
  cursor: pointer;
69
85
  }
70
86
  }
87
+
88
+ &_mass-operations {
89
+ .btn-default {
90
+ color: #fff !important;
91
+ background-color: #494A55;
92
+ }
93
+ }
94
+
71
95
  .table-view-item-actions {
72
96
  background-image: linear-gradient(90deg, transparent 0, var(--itf-table2-row-bg) 10px);
73
97
  position: sticky;
74
98
  top: 0;
75
99
  bottom: 0;
76
100
  right: -5px;
101
+ z-index: 8;
77
102
  padding-right: 5px;
78
103
  padding-left: 5px;
79
104
  display: flex;
@@ -92,16 +117,74 @@ body[data-theme="dark"] {
92
117
  pointer-events: none;
93
118
  }
94
119
  .table-header-add-column {
95
- background-image: linear-gradient(90deg, transparent 0, var(--itf-table-header-bg) 10px);
120
+ border-top-right-radius: var(--itf-table-table-border-radius);
121
+ background-image: linear-gradient(90deg, var(--itf-table2-row-bg) 0, var(--itf-table-header-bg) 10px);
96
122
  }
97
123
 
124
+ &__header-icon {
125
+ margin-top: -1px;
126
+ }
127
+ &__drag-column {
128
+ position: absolute;
129
+ top: -.5rem;
130
+ left: 50%;
131
+ transform: translateX(-50%);
132
+ z-index: 100;
133
+ opacity: 0;
134
+ transition: opacity 0.2s;
135
+ cursor: move;
136
+ height: 1.5rem !important;
137
+ padding: 0 !important;
138
+ min-height: auto !important;
139
+ }
140
+ .last-sticky-column {
141
+ position: relative;
142
+ border-right: 0 none !important;
143
+ &:after {
144
+ content: "";
145
+ position: absolute;
146
+ right: 0;
147
+ top: 0;
148
+ width: 20px;
149
+ z-index: 1;
150
+ bottom: 5px;
151
+ box-shadow: 0px 4px 20px 0px #0000001A;
152
+ }
153
+ }
154
+ .table-group-wrapper {
155
+ .table-row-template {
156
+ &:after {
157
+ content: "";
158
+ position: absolute;
159
+ display: block;
160
+ height: 12px;
161
+ left: 0;
162
+ right: 0;
163
+ top: -12px;
164
+ z-index: 4;
165
+ background: var(--itf-table-bg);
166
+ }
167
+ }
168
+ }
98
169
  &__header {
99
- --itf-table2-row-bg: --itf-table-header-bg;
100
- background-color: var(--itf-table-header-bg);
170
+ --itf-table2-row-bg: var(--itf-table-header-bg);
171
+ //background-color: var(--itf-table-header-bg);
101
172
  position: sticky;
102
173
  top: 0;
103
174
  z-index: calc(var(--row-count) + 1);
175
+ font-size: var(--itf-table-header-font-size, var(--itf-table-font-size));
176
+ color: var(--itf-table-header-color);
177
+ text-transform: uppercase;
178
+
179
+ .table-view-header-value:hover {
180
+ .itf-table2__drag-column {
181
+ opacity: 1;
182
+ }
183
+ }
104
184
 
185
+ .table-view-item-value.extra {
186
+ border-top-right-radius: var(--itf-table-table-border-radius);
187
+ }
105
188
  &.no-header {
106
189
  --table-row-height: 0px;
107
190
  --table-small-row-size: 0px;
@@ -113,10 +196,21 @@ body[data-theme="dark"] {
113
196
  }
114
197
  .table-header.draggable-mirror{
115
198
  z-index: 100000001;
116
- background: rgba(235,237,239,0.75);
199
+ border-radius: .25rem;
200
+ border: 1px solid var(--itf-primary);
201
+ color: var(--itf-primary);
202
+ background-color: var(--itf-table-hover-header-bg);
203
+
204
+ .itf-table2__drag-column {
205
+ opacity: 1;
206
+ display: block;
207
+ }
208
+ }
209
+ .itf-table2 & .boundary.right {
210
+ top: var(--itf-table-table-border-radius);
117
211
  }
118
212
  .itf-table2 & .boundary.top, .itf-table2 & .boundary.bottom {
119
- border-color: var(--itf-table-border-color)
213
+ border-color: transparent;// var(--itf-table-border-color)
120
214
  }
121
215
  .table-row-template {
122
216
  display: flex;
@@ -124,6 +218,23 @@ body[data-theme="dark"] {
124
218
  align-items: stretch;
125
219
  height: auto;
126
220
  user-select: none;
221
+ background: var(--itf-table-bg);
222
+ min-height: var(--itf-table-header-height);
223
+
224
+ &:not(.draggable-container--is-dragging):hover .table-view-header-value {
225
+ z-index: 39;
226
+ }
227
+ &:after {
228
+ content: "";
229
+ position: absolute;
230
+ display: block;
231
+ height: 12px;
232
+ left: 0;
233
+ right: 0;
234
+ top: -12px;
235
+ z-index: 4;
236
+ background: var(--itf-table-bg);
237
+ }
127
238
  }
128
239
  .table-view-header-value {
129
240
  cursor: pointer;
@@ -132,10 +243,9 @@ body[data-theme="dark"] {
132
243
  height: auto;
133
244
  white-space: nowrap;
134
245
  //border-top: 0;
135
- border-top: 1px solid var(--itf-table-border-color);
246
+ //border-top: 1px solid var(--itf-table-border-color);
136
247
  border-left: 0;
137
- border-right: 1px solid var(--itf-table-border-color);
138
- border-bottom: 1px solid var(--itf-table-border-color);
248
+ //border-bottom: 1px solid var(--itf-table-border-color);
139
249
  position: relative;
140
250
  display: flex;
141
251
  min-width: var(--itf-table-min-width);
@@ -143,14 +253,27 @@ body[data-theme="dark"] {
143
253
  //background-color: var(--bs-body-bg);
144
254
  //background-color: rgb(238 238 238 / 1);
145
255
  //font-weight: 500;
146
-
147
- &.last-sticky-column {
148
- border-right-color: var(--bs-border-color);
256
+ &:not(.reserved) {
257
+ border-right: 1px solid var(--itf-table-header-border-color);
258
+ }
259
+ &.active .table-header {
260
+ color: var(--itf-primary);
261
+ background-color: var(--itf-table-hover-header-bg);
149
262
  }
263
+
264
+ //&.last-sticky-column {
265
+ // border-right-color: var(--bs-border-color);
266
+ //}
150
267
  &.reserved {
151
- border-left: 1px solid var(--itf-table-border-color);
268
+ border-left: var(--itf-table-border-base-width) solid var(--itf-table-border-base-color);
152
269
  left: var(--shadow-area-width);
153
270
  width: var(--indicator-area-width);
271
+ min-width: 1rem;
272
+
273
+ &.sticky {
274
+ border-top-left-radius: var(--itf-table-table-border-radius);
275
+ z-index: 13;
276
+ }
154
277
  }
155
278
  &.sticky {
156
279
  position: sticky;
@@ -160,16 +283,21 @@ body[data-theme="dark"] {
160
283
  }
161
284
  .table-header {
162
285
  flex: 0 0 auto;
163
- overflow: hidden;
286
+ //overflow: hidden;
164
287
  width: 100%;
288
+ height: 100%;
165
289
  text-overflow: ellipsis;
166
- padding-left: 0.75rem;
167
- padding-right: 0.5rem;
168
290
  gap: 0.25rem;
169
291
  align-items: center;
292
+ position: relative;
293
+ z-index: 2;
294
+ background: var(--itf-table-header-bg);
295
+
170
296
  & > div {
297
+ padding: .5rem .75rem;
298
+ height: 100%;
171
299
  min-height: var(--table-row-height);
172
- align-items: center;
300
+ align-items: start;
173
301
  justify-content: space-between;
174
302
  display: flex;
175
303
  }
@@ -179,12 +307,12 @@ body[data-theme="dark"] {
179
307
  }
180
308
  }
181
309
  .resize-handle {
182
- width: 4px;
310
+ width: 2px;
183
311
  bottom: 0;
184
312
  position: absolute;
185
- right: -2px;
313
+ right: -1px;
186
314
  top: 0;
187
- background: #29ACE1;
315
+ background: var(--itf-primary);
188
316
  border-radius: 2px;
189
317
  z-index: 100;
190
318
  opacity: 0;
@@ -226,19 +354,20 @@ body[data-theme="dark"] {
226
354
  }
227
355
  &.active {
228
356
  display: block;
357
+
358
+ .drag-handle {
359
+ opacity: 1;
360
+ }
229
361
  &.over {
230
- background: #47BEFF;
362
+ background: var(--itf-primary);
231
363
  }
232
364
  }
233
365
  }
234
- .draggable-mirror {
235
- opacity: .5;
236
- }
237
366
  .draggable-container--over .table-view-header-space {
238
367
  display: block;
239
368
  }
240
369
  .draggable-container--over .draggable--over .table-view-header-space {
241
- background: #47BEFF;
370
+ background: var(--itf-primary);
242
371
  }
243
372
  .table-view-header-space > .table-view-header-dropzone {
244
373
  position: absolute;
@@ -247,42 +376,84 @@ body[data-theme="dark"] {
247
376
  bottom: 0;
248
377
  left: -50px;
249
378
  }
250
- .table-view-header-value:not(.reserved):hover {
251
- background-color: var(--itf-table-hover-header-bg);
379
+ .table-view-header-value:not(.reserved):hover .table-header {
380
+ color: var(--itf-primary);
381
+ //background-color: var(--itf-table-hover-header-bg);
252
382
  }
253
383
  .draggable-source--is-dragging {
254
- z-index: 100;
384
+ z-index: 1000;
385
+ color: transparent;
386
+ background: var(--itf-table-mirror-bg);
387
+ }
388
+ .draggable-container--is-dragging {
389
+ .itf-table2__drag-column, .resize-handle {
390
+ display: none;
391
+ }
255
392
  }
256
393
  }
257
394
 
395
+ &__title-container, &__header-title, &__title, &__subtitle {
396
+ min-width: 0; // for text ellipsis
397
+ }
258
398
  &__subtitle {
259
399
  color: var(--itf-table-header-subtitle-color);
400
+
401
+ .draggable-source--is-dragging & {
402
+ color: transparent;
403
+ }
260
404
  }
261
405
 
262
406
  .table-view-item {
263
407
  --itf-table2-row-bg: var(--itf-table-bg);
408
+ --itf-table2-border-color: var(--itf-table-border-base-color);
264
409
 
265
410
  background-color: var(--itf-table2-row-bg);
266
411
 
267
- &.selected, &:hover {
412
+ &.selected {
413
+ --itf-table2-border-color: var(--bs-body-color);
414
+ }
415
+ &:hover {
416
+ --itf-table2-row-bg: var(--itf-table-hover-bg) !important;
417
+ }
418
+ &.selected {
268
419
  --itf-table2-row-bg: var(--itf-table-selected-bg) !important;
420
+ &:nth-child(even) {
421
+ --itf-table2-row-bg: var(--itf-table-alt-selected-bg) !important;
422
+ }
423
+
424
+ &:hover {
425
+ --itf-table2-row-bg: var(--itf-table-hover-bg) !important;
426
+ }
269
427
  }
270
428
  &.active {
271
429
  --itf-table2-row-bg: var(--itf-table-active-bg) !important;
272
430
  }
273
431
 
274
432
  .indicator {
275
- border-left: 1px solid var(--itf-table-border-color);
433
+ border-left: var(--itf-table-border-base-width) solid var(--itf-table2-border-color);
276
434
  }
277
435
  }
278
436
 
279
-
280
- &:hover {
281
- .table-view-item-value.editable {
282
- .form-control {
283
- border: 1px solid var(--itf-table-input-border-color);
284
- }
285
- }
437
+ &__row-divider {
438
+ background-color: #F7F8FA;
439
+ height: 5px;
440
+ padding: 0;
441
+ border-top: 1px solid rgba(238, 238, 238, 1);
442
+ border-bottom: 1px solid rgba(238, 238, 238, 1);
443
+ }
444
+ //&:hover, &.permanent-editable-border {
445
+ // .table-view-item-value.editable {
446
+ // .form-control {
447
+ // border: 1px solid var(--itf-table-input-border-color);
448
+ // }
449
+ // }
450
+ //}
451
+ .table-view-item-value-content {
452
+ position: relative;
453
+ z-index: 2;
454
+ width: 100%;
455
+ height: 100%;
456
+ background: var(--itf-table2-row-bg)
286
457
  }
287
458
  .table-view-item-value {
288
459
  text-overflow: ellipsis;
@@ -296,20 +467,19 @@ body[data-theme="dark"] {
296
467
  border-right: 1px solid var(--bs-border-color);
297
468
  border-bottom: 1px solid var(--bs-border-color);
298
469
  }
299
-
300
470
  &.editable {
301
471
  padding: 2px;
302
472
 
303
- .form-control {
304
- border-radius: 0;
305
- border: 1px solid transparent;
306
- background-color: transparent;
307
- box-shadow: none;
308
-
309
- &:focus {
310
- border-color: var(--itf-table-input-focus-border-color);
311
- }
312
- }
473
+ //.form-control {
474
+ // border-radius: 0;
475
+ // border: 1px solid transparent;
476
+ // background-color: transparent;
477
+ // box-shadow: none;
478
+ //
479
+ // &:focus {
480
+ // border-color: var(--itf-table-input-focus-border-color);
481
+ // }
482
+ //}
313
483
  }
314
484
 
315
485
  &.highlight-drop-column {
@@ -318,9 +488,9 @@ body[data-theme="dark"] {
318
488
  &:after {
319
489
  content: "";
320
490
  height: 100%;
321
- z-index: 100;
491
+ z-index: 1000;
322
492
  width: 2px;
323
- background: #47beff;
493
+ background: var(--itf-primary);
324
494
  margin-left: -1px;
325
495
  position: absolute;
326
496
  left: 0;
@@ -357,7 +527,7 @@ body[data-theme="dark"] {
357
527
 
358
528
  &.right {
359
529
  left: auto;
360
- border-right: 1px solid var(--itf-table-border-color);
530
+ border-right: var(--itf-table-border-base-width) solid var(--itf-table-border-base-color);
361
531
  right: 0;
362
532
  }
363
533
 
@@ -368,7 +538,6 @@ body[data-theme="dark"] {
368
538
  }
369
539
 
370
540
  .table-group-operations {
371
- background: red;
372
541
  position: absolute;
373
542
  bottom: 1rem;
374
543
  left: 1rem;
@@ -1,11 +1,11 @@
1
1
  <template>
2
2
  <div class="itf-money-field ph-no-capture" :class="{'currency-arrow': !currencyDisabled, 'currency-select': currencySelect}">
3
- <div class="h-100" :class="{'input-group h-100': noCurrencySign}" :style="`--itf-money-field-padding-left: ${noCurrencySign ? 1 : selectedCurrencySymbol.length * 0.6 + 1}rem`">
3
+ <div :class="{'input-group h-100': noCurrencySign}" :style="`--itf-money-field-padding-left: ${noCurrencySign ? 1 : selectedCurrencySymbol.length * 0.6 + 1}rem`">
4
4
  <span class="itf-money-field__prepend" v-if="!noCurrencySign">{{ selectedCurrencySymbol }}</span>
5
5
  <i-mask-component
6
6
  ref="input"
7
7
  v-bind="mask"
8
- class="form-control h-100"
8
+ class="form-control"
9
9
  :class="{ 'is-invalid': isInvalid(), 'is-valid': isSuccess() }"
10
10
  @input="setValue"
11
11
  :value="maskedValue"
@@ -13,15 +13,16 @@
13
13
  :disabled="disabled"
14
14
  />
15
15
  </div>
16
-
17
- <div v-if="currencySelect" class="itf-money-field__currency">
18
- <span>{{ selectedCurrencyCode }}<itf-icon v-if="!currencyDisabled && currenciesList.length > 1" name="chevron_down" /></span>
19
- <select v-if="!disabled && !currencyDisabled" :value="currencyId" @input="onCurrencyChanged">
20
- <option v-for="currency in currenciesList" :key="currency.Id" :value="currency.Id" :selected="currencyId === currency.Id">
21
- {{ currency.Symbol }}, {{ currency.Code }} - {{ currency.Title }}
22
- </option>
23
- </select>
24
- </div>
16
+ <slot name="postfix">
17
+ <div v-if="currencySelect" class="itf-money-field__currency">
18
+ <span>{{ selectedCurrencyCode }}<itf-icon v-if="!currencyDisabled && currenciesList.length > 1" name="chevron_down" /></span>
19
+ <select v-if="!disabled && !currencyDisabled" :value="currencyId" @input="onCurrencyChanged">
20
+ <option v-for="currency in currenciesList" :key="currency[itemKey]" :value="currency[itemKey]" :selected="currencyId === currency[itemKey]">
21
+ {{ currency[symbolKey] }}, {{ currency[codeKey] }} - {{ currency[titleKey] }}
22
+ </option>
23
+ </select>
24
+ </div>
25
+ </slot>
25
26
  </div>
26
27
  </template>
27
28
  <style lang="scss">
@@ -105,6 +106,11 @@ class itfMoneyField extends Vue {
105
106
  @Prop({ type: Boolean, default: true }) currencySelect;
106
107
  @Prop({ type: Array, default: () => ([]) }) currencies;
107
108
  @Prop({ type: Boolean, default: false }) currencyDisabled;
109
+ @Prop({ type: String, default: 'Id' }) itemKey;
110
+ @Prop({ type: String, default: 'Code' }) codeKey;
111
+ @Prop({ type: String, default: 'Symbol' }) symbolKey;
112
+ @Prop({ type: String, default: 'Title' }) titleKey;
113
+ @Prop({ type: String, default: 'Precision' }) precisionKey;
108
114
  @Prop({ type: Number, default: -1000000000}) minValue;
109
115
  @Prop({ type: Number, default: 1000000000}) maxValue;
110
116
 
@@ -139,38 +145,34 @@ class itfMoneyField extends Vue {
139
145
  }
140
146
 
141
147
  onCurrencyChanged(e) {
142
- const currency = this.currenciesList.find((c) => c.Id === parseInt(e.target.value));
148
+ const currency = this.currenciesList.find((c) => c[this.itemKey] === parseInt(e.target.value));
143
149
  this.$emit('update:currency', currency)
144
150
  }
145
151
 
146
152
  get precition() {
147
- return this.selectedCurrency ? this.selectedCurrency.Precision : 2;
153
+ return this.selectedCurrency ? this.selectedCurrency[this.precisionKey] : 2;
148
154
  }
149
155
 
150
156
  get selectedCurrencySymbol() {
151
- return this.selectedCurrency ? this.selectedCurrency.Symbol : '#';
157
+ return this.selectedCurrency ? this.selectedCurrency[this.symbolKey] : '#';
152
158
  }
153
159
 
154
160
  get selectedCurrencyCode() {
155
- return this.selectedCurrency ? this.selectedCurrency.Code : '###';
161
+ return this.selectedCurrency ? this.selectedCurrency[this.codeKey] : '###';
156
162
  }
157
163
 
158
164
  get currencyId() {
159
- return this.selectedCurrency && this.selectedCurrency.Id;
165
+ return this.selectedCurrency && this.selectedCurrency[this.itemKey];
160
166
  }
161
167
 
162
168
  get selectedCurrency() {
163
169
  if (!this.currency || !this.currenciesList) {
164
170
  return this.currenciesList.find(({ IsDefault }) => IsDefault) || null;
165
171
  }
166
- return this.currenciesList.find(({ Id }) => this.currency.Id === Id);
172
+ return this.currenciesList.find((itm) => this.currency[this.itemKey] === itm[this.itemKey]);
167
173
  }
168
174
 
169
175
  setValue (val) {
170
- if (val === '') {
171
- this.$emit('input', null);
172
- return;
173
- }
174
176
  if (!isNumeric(val) || (val || '').toString().match(/\..*0$/)) { // що не видаляло останній нуль вкінці
175
177
  return;
176
178
  }
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
 
3
- <div class="itf-text-field input-group" :class="{ 'with-addon addon-start': prependIcon, 'with-addon addon-end': clearable }">
3
+ <div class="itf-text-field input-group form-control p-0" :class="{ 'is-invalid': isInvalid(), 'is-valid': isSuccess() }">
4
4
  <slot name="addon">
5
- <div class="addon" v-if="prependIcon">
6
- <itf-icon :name="prependIcon"/>
5
+ <div class="input-group-text" v-if="prependIcon">
6
+ <itf-icon :size="small ? 18 : 20" :name="prependIcon"/>
7
7
  </div>
8
8
  </slot>
9
9
 
@@ -11,7 +11,7 @@
11
11
  ref="input"
12
12
  autocomplete="off"
13
13
  :placeholder="placeholder"
14
- :class="{ 'is-invalid': isInvalid(), 'is-valid': isSuccess(), 'form-control-sm': small }"
14
+ :class="{ 'form-control-sm': small }"
15
15
  class="itf-text-field__input form-control"
16
16
  :type="type"
17
17
  :value="value"
@@ -24,12 +24,13 @@
24
24
  @blur="$emit('blur', $event)"
25
25
  @focus="$emit('focus', $event)"
26
26
  @change="$emit('change', $event.target.value)"
27
+ :maxlength="maxlength"
27
28
  :min="min"
28
29
  :max="max"
29
30
  :step="step"
30
31
  />
31
32
 
32
- <div class="addon-end" v-if="clearable && value">
33
+ <template v-if="clearable && value">
33
34
  <slot name="clear">
34
35
  <itf-button
35
36
  icon
@@ -39,7 +40,7 @@
39
40
  <itf-icon name="close" />
40
41
  </itf-button>
41
42
  </slot>
42
- </div>
43
+ </template>
43
44
  </div>
44
45
 
45
46
  </template>
@@ -64,10 +65,13 @@ class itfTextField extends Vue {
64
65
  @Prop() step;
65
66
  @Prop() min;
66
67
  @Prop() max;
68
+ @Prop() maxlength;
67
69
  @Prop(Boolean) clearable;
68
70
  @Prop(Boolean) disabled;
69
71
  @Prop(Boolean) readonly;
70
72
  @Prop(Boolean) small;
73
+ @Prop(Boolean) invalid;
74
+ @Prop(Boolean) valid;
71
75
  @Prop({ type: String, default: 'text' }) type;
72
76
  @Prop({ type: [Number, String], default: 0 }) delayInput;
73
77
 
@@ -78,11 +82,11 @@ class itfTextField extends Vue {
78
82
  }
79
83
 
80
84
  isInvalid() {
81
- return this.itemLabel && this.itemLabel.isHasError();
85
+ return typeof this.invalid !== 'undefined' ? this.invalid : (this.itemLabel && this.itemLabel.isHasError());
82
86
  }
83
87
 
84
88
  isSuccess() {
85
- return this.itemLabel && this.itemLabel.isHasSuccess();
89
+ return typeof this.valid !== 'undefined' ? this.valid : (this.itemLabel && this.itemLabel.isHasSuccess());
86
90
  }
87
91
 
88
92
  insertTextToCurrentPosition(text) {