igniteui-angular 19.0.6 → 19.1.0-beta.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 (83) hide show
  1. package/fesm2022/igniteui-angular.mjs +1874 -718
  2. package/fesm2022/igniteui-angular.mjs.map +1 -1
  3. package/lib/carousel/carousel-base.d.ts +2 -31
  4. package/lib/carousel/carousel.component.d.ts +12 -12
  5. package/lib/carousel/enums.d.ts +8 -0
  6. package/lib/carousel/slide.component.d.ts +3 -2
  7. package/lib/checkbox/checkbox.component.d.ts +5 -4
  8. package/lib/core/i18n/query-builder-resources.d.ts +22 -2
  9. package/lib/core/styles/components/avatar/_avatar-theme.scss +31 -1
  10. package/lib/core/styles/components/card/_card-theme.scss +1 -1
  11. package/lib/core/styles/components/carousel/_carousel-component.scss +4 -4
  12. package/lib/core/styles/components/carousel/_carousel-theme.scss +8 -4
  13. package/lib/core/styles/components/checkbox/_checkbox-component.scss +4 -8
  14. package/lib/core/styles/components/checkbox/_checkbox-theme.scss +3 -8
  15. package/lib/core/styles/components/chip/_chip-theme.scss +4 -2
  16. package/lib/core/styles/components/combo/_combo-theme.scss +10 -24
  17. package/lib/core/styles/components/grid/_excel-filtering-theme.scss +14 -16
  18. package/lib/core/styles/components/grid/_grid-theme.scss +34 -30
  19. package/lib/core/styles/components/input/_input-group-theme.scss +2 -5
  20. package/lib/core/styles/components/query-builder/_query-builder-component.scss +59 -44
  21. package/lib/core/styles/components/query-builder/_query-builder-theme.scss +325 -232
  22. package/lib/core/styles/components/radio/_radio-theme.scss +2 -0
  23. package/lib/core/styles/components/switch/_switch-theme.scss +2 -0
  24. package/lib/core/styles/components/tree/_tree-theme.scss +1 -7
  25. package/lib/core/styles/themes/generators/_base.scss +4 -6
  26. package/lib/core/styles/themes/generators/_bootstrap.scss +0 -2
  27. package/lib/core/styles/themes/generators/_fluent.scss +0 -2
  28. package/lib/core/styles/themes/generators/_indigo.scss +0 -2
  29. package/lib/core/utils.d.ts +0 -2
  30. package/lib/data-operations/filtering-condition.d.ts +16 -5
  31. package/lib/data-operations/filtering-expression.interface.d.ts +4 -1
  32. package/lib/data-operations/filtering-expressions-tree.d.ts +29 -3
  33. package/lib/directives/drag-drop/drag-drop.directive.d.ts +0 -1
  34. package/lib/grids/common/grid.interface.d.ts +13 -10
  35. package/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.d.ts +7 -0
  36. package/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.d.ts +1 -4
  37. package/lib/grids/filtering/excel-style/excel-style-date-expression.component.d.ts +3 -1
  38. package/lib/grids/grid-base.directive.d.ts +2 -5
  39. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +1 -1
  40. package/lib/grids/resizing/resizer.directive.d.ts +0 -2
  41. package/lib/grids/resizing/resizing.service.d.ts +2 -2
  42. package/lib/icon/icon.component.d.ts +17 -1
  43. package/lib/icon/icon.service.d.ts +4 -7
  44. package/lib/icon/types.d.ts +1 -3
  45. package/lib/input-group/input-group.component.d.ts +10 -8
  46. package/lib/query-builder/public_api.d.ts +3 -1
  47. package/lib/query-builder/query-builder-header.component.d.ts +1 -11
  48. package/lib/query-builder/query-builder-tree.component.d.ts +565 -0
  49. package/lib/query-builder/query-builder.component.d.ts +43 -303
  50. package/lib/query-builder/query-builder.directives.d.ts +22 -0
  51. package/lib/query-builder/query-builder.module.d.ts +2 -1
  52. package/lib/services/public_api.d.ts +0 -1
  53. package/lib/services/theme/theme.service.d.ts +27 -0
  54. package/migrations/update-18_2_0/changes/inputs.json +9 -0
  55. package/migrations/update-18_2_0/index.js +4 -0
  56. package/package.json +2 -2
  57. package/styles/igniteui-angular-dark.css +1 -1
  58. package/styles/igniteui-angular.css +1 -1
  59. package/styles/igniteui-bootstrap-dark.css +1 -1
  60. package/styles/igniteui-bootstrap-light.css +1 -1
  61. package/styles/igniteui-dark-green.css +1 -1
  62. package/styles/igniteui-fluent-dark-excel.css +1 -1
  63. package/styles/igniteui-fluent-dark-word.css +1 -1
  64. package/styles/igniteui-fluent-dark.css +1 -1
  65. package/styles/igniteui-fluent-light-excel.css +1 -1
  66. package/styles/igniteui-fluent-light-word.css +1 -1
  67. package/styles/igniteui-fluent-light.css +1 -1
  68. package/styles/igniteui-indigo-dark.css +1 -1
  69. package/styles/igniteui-indigo-light.css +1 -1
  70. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  71. package/styles/maps/igniteui-angular.css.map +1 -1
  72. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  73. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  74. package/styles/maps/igniteui-dark-green.css.map +1 -1
  75. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  76. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  77. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  78. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  79. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  80. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  81. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  82. package/styles/maps/igniteui-indigo-light.css.map +1 -1
  83. package/lib/services/theme/theme.token.d.ts +0 -24
@@ -10,26 +10,38 @@
10
10
  /// @param {Color} header-background [null] - The background color of the query builder header.
11
11
  /// @param {Color} header-foreground [null] - The foreground color of the query builder header.
12
12
  /// @param {Color} header-border [null] - The border color of the query builder header.
13
- /// @param {Map} background-and [null] - The background color of advanced filtering "AND" condition.
14
- /// @param {Map} background-and--focus [null] - The background color on focus/selected of advanced filtering "AND" condition.
15
- /// @param {Map} background-or [null] - The background color of advanced filtering "OR" condition.
16
- /// @param {Map} background-or--focus [null] - The background color on focus/selected of advanced filtering "OR" condition.
13
+ ///
14
+ /// @param {Map} subquery-background [null] - The background color of the subquery block.
15
+ /// @param {Map} subquery-border-color [null] - The border color of the query block.
16
+ /// @param {Map} separator-color [null] - The separator color of the query block.
17
+ /// @param {Number} subquery-border-radius [null] - The border radius of the subquery block.
18
+ ///
19
+ /// @param {Map} label-foreground [null] - The color for query builder labels "from" & "select".
20
+ /// @param {Map} separator-color [null] - The separator color of the query builder tree block.
21
+ /// @param {Number} border-radius [null] - The border radius of the query builder.
22
+ ///
23
+ /// @param {Color} color-expression-group-and [null] - The color of advanced filtering "AND" condition group.
24
+ /// @param {Color} color-expression-group-or [null] - The color of advanced filtering "OR" condition group.
25
+ ///
17
26
  /// @example scss Set custom query-builder colors
18
- /// $my-query-builder-theme: query-builder-theme($$background: red);
27
+ /// $my-query-builder-theme: query-builder-theme($background: red);
19
28
  /// // Pass the theme to the css-vars() mixin
20
29
  /// @include css-vars($my-query-builder-theme);
21
30
  @function query-builder-theme(
22
31
  $schema: $light-material-schema,
23
32
  $elevations: null,
24
-
25
33
  $background: null,
26
34
  $header-background: null,
27
35
  $header-foreground: null,
28
36
  $header-border: null,
29
- $background-and: null,
30
- $background-and--focus: null,
31
- $background-or: null,
32
- $background-or--focus: null,
37
+ $color-expression-group-and: null,
38
+ $color-expression-group-or: null,
39
+ $border-radius: null,
40
+ $subquery-background: null,
41
+ $subquery-border-color: null,
42
+ $subquery-border-radius: null,
43
+ $separator-color: null,
44
+ $label-foreground: null,
33
45
  ) {
34
46
  $name: 'igx-query-builder';
35
47
  $selector: 'igx-query-builder';
@@ -48,21 +60,29 @@
48
60
  $header-foreground: text-contrast($header-background);
49
61
  }
50
62
 
63
+ @if not($header-background) and $background {
64
+ $header-background: $background;
65
+ }
66
+
51
67
  @return extend($theme, (
52
68
  name: $name,
53
69
  selector: $selector,
54
-
55
70
  background: $background,
56
71
  header-background: $header-background,
57
72
  header-foreground: $header-foreground,
58
73
  header-border: $header-border,
59
- background-and: $background-and,
60
- background-and--focus: $background-and--focus,
61
- background-or: $background-or,
62
- background-or--focus: $background-or--focus,
74
+ color-expression-group-and: $color-expression-group-and,
75
+ color-expression-group-or: $color-expression-group-or,
76
+ subquery-background: $subquery-background,
77
+ subquery-border-color: $subquery-border-color,
78
+ subquery-border-radius: $subquery-border-radius,
79
+ separator-color: $separator-color,
80
+ border-radius: $border-radius,
81
+ label-foreground: $label-foreground,
63
82
  theme: map.get($schema, '_meta', 'theme'),
64
83
  _meta: map.merge(if($meta, $meta, ()), (
65
- variant: map.get($schema, '_meta', 'theme')
84
+ variant: map.get($schema, '_meta', 'theme'),
85
+ theme-variant: map.get($schema, '_meta', 'variant')
66
86
  )),
67
87
  ));
68
88
  }
@@ -85,18 +105,12 @@
85
105
  $bootstrap-theme: $variant == 'bootstrap';
86
106
  $not-bootstrap-theme: not($bootstrap-theme);
87
107
 
88
- $filter-empty: (
89
- comfortable: rem(144px),
90
- cosy: rem(107px),
91
- compact: rem(92px)
92
- );
93
-
94
- $vertical-space: (
95
- comfortable: rem(16px),
96
- cosy: rem(12px),
97
- compact: rem(8px)
98
- );
108
+ // Custom colors alpha
109
+ $alpha-hover: .08;
110
+ $alpha-focus: .16;
111
+ $alpha-focus-hover: .24;
99
112
 
113
+ $border-radius: var-get($theme, 'border-radius');
100
114
  $icon-size: rem(18px);
101
115
 
102
116
  %advanced-filter {
@@ -105,48 +119,146 @@
105
119
  width: auto;
106
120
  min-width: rem(660px);
107
121
  background-color: var-get($theme, 'background');
108
- border-radius: border-radius(rem(4px));
109
- box-shadow: elevation(12);
122
+ border-radius: $border-radius;
123
+ box-shadow: var-get($theme, 'elevation');
124
+ overflow: hidden;
110
125
  }
111
126
 
112
- %advanced-filter__header {
113
- @if $variant != 'indigo' {
114
- @include type-style('h6');
115
- } @else {
116
- @include type-style('h5');
127
+ %query-builder-tree {
128
+ background: var-get($theme, 'background');
129
+
130
+ %query-builder-tree {
131
+ border-radius: var-get($theme, 'subquery-border-radius');
132
+ }
133
+ }
134
+
135
+ %query-level-0 {
136
+ display: block;
137
+ width: 100%;
138
+ padding-inline: if($variant != 'bootstrap', rem(24px), rem(16px));
139
+ padding-block:
140
+ if($variant != 'bootstrap', 0, rem(16px))
141
+ if($variant != 'bootstrap', rem(24px), rem(16px));
142
+
143
+ > %advanced-filter__main {
144
+ > %filter-tree__section {
145
+ --sb-size: #{rem(10px)};
146
+
147
+ max-height: rem(570px);
148
+ overflow-y: auto;
149
+ overflow-x: hidden;
150
+ padding-inline-end: rem(16px);
151
+ }
152
+ }
153
+ }
154
+
155
+ %filter-tree__subquery {
156
+ // Add styles to the subquery itself only if there is a direct .igx-filter-tree__inputs inside it
157
+ &:has( > %filter-tree__inputs) {
158
+ background: var-get($theme, 'subquery-background');
159
+ border: rem(1px) solid var-get($theme, 'subquery-border-color');
160
+ border-radius: var-get($theme, 'subquery-border-radius');
161
+ }
162
+
163
+ // Hide the subquery itself if there is a tree with display none inside
164
+ &:has( > %query-builder-tree[style='display: none;']) {
165
+ display: none;
166
+ }
117
167
 
118
- border-top-left-radius: border-radius(rem(10px));
119
- border-top-right-radius: border-radius(rem(10px));
168
+ > %filter-tree__inputs {
169
+ padding: rem(12px);
170
+ border-radius: inherit;
171
+
172
+ > igx-input-group,
173
+ > igx-date-picker,
174
+ > igx-time-picker {
175
+ flex-grow: 1;
176
+ }
120
177
  }
121
178
 
179
+ %filter-tree__buttons {
180
+ margin-block-start: rem(8px);
181
+ }
182
+
183
+ %query-builder-tree {
184
+ border-block-start: rem(1px) dashed var-get($theme, 'separator-color');
185
+ padding: rem(16px);
186
+ }
187
+
188
+ &:empty {
189
+ display: none;
190
+ }
191
+
192
+ }
193
+
194
+ %filter-tree-details-button {
195
+ margin-inline-start: auto;
196
+ }
197
+
198
+ %query-builder-dialog {
199
+ display: flex;
200
+ flex-direction: column;
201
+ gap: rem(16px);
202
+ max-width: rem(310px);
203
+
204
+ > * {
205
+ margin: 0 !important;
206
+ }
207
+ }
208
+
209
+ %advanced-filter__header {
122
210
  display: flex;
123
211
  align-items: center;
124
212
  background-color: var-get($theme, 'header-background');
125
213
  color: var-get($theme, 'header-foreground');
126
214
  user-select: none;
215
+ border-radius: $border-radius $border-radius 0 0;
127
216
  margin-bottom: 0;
128
217
  border-block-end: rem(1px) solid var-get($theme, 'header-border');
218
+
219
+ padding-inline: if($variant != 'bootstrap', rem(24px), rem(16px));
220
+ padding-block: if($variant != 'bootstrap', rem(24px), rem(16px)) rem(16px);
129
221
  }
130
222
 
131
- %advanced-filter__main {
132
- display: block;
133
- overflow: auto;
134
- min-height: pad(rem(138px), rem(164px), rem(214px));
135
- max-height: pad(rem(305px), rem(394px), rem(468px));
223
+ %advanced-filter__title {
224
+ @if $variant == 'material' {
225
+ @include type-style('h6');
226
+ }
136
227
 
137
- [igxButton] + [igxButton] {
138
- margin-inline-start: rem(8px);
228
+ @if $variant == 'fluent' {
229
+ @include type-style('h6');
139
230
  }
231
+
232
+ @if $variant == 'indigo' {
233
+ @include type-style('h5');
234
+ }
235
+
236
+ @if $variant == 'bootstrap' {
237
+ @include type-style('h5');
238
+ }
239
+
240
+ margin: 0;
140
241
  }
141
242
 
142
- %advanced-filter__header,
143
243
  %advanced-filter__main {
144
- padding-inline: pad-inline(
145
- map.get($vertical-space, 'compact'),
146
- map.get($vertical-space, 'cosy'),
147
- map.get($vertical-space, 'comfortable')
148
- );
149
- padding-block: rem(16px);
244
+ display: grid;
245
+ gap: rem(16px);
246
+ }
247
+
248
+ %advanced-filter__root {
249
+ display: flex;
250
+ flex-direction: column;
251
+ flex-grow: 1;
252
+
253
+ > * {
254
+ flex-grow: 1;
255
+ }
256
+ }
257
+
258
+ %advanced-filter__root-actions {
259
+ display: flex;
260
+ gap: rem(8px);
261
+ padding-bottom: rem(16px);
150
262
  }
151
263
 
152
264
  %advanced-filter__outlet {
@@ -160,87 +272,152 @@
160
272
 
161
273
  %filter-tree {
162
274
  display: flex;
275
+ width: 100%;
276
+
277
+ %filter-tree {
278
+ margin-block: rem(8px);
279
+ }
280
+ }
281
+
282
+ %filter-tree__section {
283
+ display: flex;
284
+ flex-direction: column;
285
+ gap: rem(8px);
163
286
 
164
- + %filter-tree,
165
- + %filter-tree__expression-item,
166
- + %filter-tree__inputs {
167
- margin-top: pad(
168
- map.get($vertical-space, 'compact'),
169
- map.get($vertical-space, 'cosy'),
170
- map.get($vertical-space, 'comfortable')
171
- );
287
+ > %filter-tree {
288
+ margin-block: 0;
289
+ }
290
+ }
291
+
292
+ %filter-tree__expression-context-menu {
293
+ display: flex;
294
+ width: 100%;
295
+
296
+ [igxbutton='flat'] {
297
+ --ig-size: 1;
298
+
299
+ @if $variant == 'bootstrap' {
300
+ --ig-button-text-transform: capitalize;
301
+ }
302
+
303
+ border: none;
304
+ min-width: auto;
172
305
  }
173
306
  }
174
307
 
175
308
  %filter-tree__line {
176
- width: rem(8px);
177
- min-width: rem(8px);
309
+ $size: rem(2px);
310
+ width: $size;
178
311
  background-color: white;
179
- margin-inline-end: pad(rem(8px), rem(12px), rem(16px));
312
+ margin-inline-end: calc(rem(8px) - $size);
180
313
  outline-style: none;
181
- border-radius: border-radius(rem(4px));
182
- cursor: pointer;
183
314
  }
184
315
 
185
316
  %filter-tree__line--and {
186
- background: var-get($theme, 'background-and');
317
+ background: var-get($theme, 'color-expression-group-and');
318
+ }
319
+
320
+ %filter-tree__line--or {
321
+ background: var-get($theme, 'color-expression-group-or');
322
+ }
187
323
 
188
- &-selected {
189
- background: var-get($theme, 'background-and--focus');
324
+ %filter-tree__button--and {
325
+ @if $variant == 'material' {
326
+ --focus-hover-background: hsl(from #{var-get($theme, 'color-expression-group-and')} h s l / #{$alpha-focus-hover});
327
+ --focus-visible-background: hsl(from #{var-get($theme, 'color-expression-group-and')} h s l / #{$alpha-focus});
328
+ --focus-background: hsl(from #{var-get($theme, 'color-expression-group-and')} h s l / #{$alpha-focus});
329
+ --active-background: hsl(from #{var-get($theme, 'color-expression-group-and')} h s l / #{$alpha-focus});
330
+ --hover-background: hsl(from #{var-get($theme, 'color-expression-group-and')} h s l / #{$alpha-hover});
331
+ --background: transparent;
190
332
  }
191
333
 
192
- &:focus {
193
- box-shadow: inset 0 0 0 rem(2px) var-get($theme, 'background-and--focus');
334
+ @if $variant == 'bootstrap' {
335
+ --shadow-color: hsl(from #{var-get($theme, 'color-expression-group-and')} h s l / .5);
194
336
  }
195
- }
196
337
 
197
- %filter-tree__line--or {
198
- background: var-get($theme, 'background-or');
338
+ --foreground: #{var-get($theme, 'color-expression-group-and')};
339
+ --focus-foreground: #{var-get($theme, 'color-expression-group-and')};
340
+ --hover-foreground: #{var-get($theme, 'color-expression-group-and')};
341
+ --focus-hover-foreground: #{var-get($theme, 'color-expression-group-and')};
342
+ --focus-visible-foreground: #{var-get($theme, 'color-expression-group-and')};
343
+ --active-foreground: #{var-get($theme, 'color-expression-group-and')};
344
+
345
+ --icon-color: #{var-get($theme, 'color-expression-group-and')};
346
+ --icon-color-hover: #{var-get($theme, 'color-expression-group-and')};
347
+ }
199
348
 
200
- &-selected {
201
- background-color: var-get($theme, 'background-or--focus');
349
+ %filter-tree__button--or {
350
+ @if $variant == 'material' {
351
+ --focus-hover-background: hsl(from #{var-get($theme, 'color-expression-group-or')} h s l / #{$alpha-focus-hover});
352
+ --focus-visible-background: hsl(from #{var-get($theme, 'color-expression-group-or')} h s l / #{$alpha-focus});
353
+ --focus-background: hsl(from #{var-get($theme, 'color-expression-group-or')} h s l / #{$alpha-focus});
354
+ --active-background: hsl(from #{var-get($theme, 'color-expression-group-or')} h s l / #{$alpha-focus});
355
+ --hover-background: hsl(from #{var-get($theme, 'color-expression-group-or')} h s l / #{$alpha-hover});
356
+ --background: transparent;
202
357
  }
203
358
 
204
- &:focus {
205
- box-shadow: inset 0 0 0 rem(2px) var-get($theme, 'background-or--focus');
359
+ @if $variant == 'bootstrap' {
360
+ --shadow-color: hsl(from #{var-get($theme, 'color-expression-group-or')} h s l / .5);
206
361
  }
362
+
363
+ --foreground: #{var-get($theme, 'color-expression-group-or')};
364
+ --focus-foreground: #{var-get($theme, 'color-expression-group-or')};
365
+ --hover-foreground: #{var-get($theme, 'color-expression-group-or')};
366
+ --focus-hover-foreground: #{var-get($theme, 'color-expression-group-or')};
367
+ --focus-visible-foreground: #{var-get($theme, 'color-expression-group-or')};
368
+ --active-foreground: #{var-get($theme, 'color-expression-group-or')};
369
+
370
+ --icon-color: #{var-get($theme, 'color-expression-group-or')};
371
+ --icon-color-hover: #{var-get($theme, 'color-expression-group-or')};
207
372
  }
208
373
 
209
- %filter-tree__expression {
374
+ %filter-tree__expressions {
210
375
  display: flex;
211
376
  flex-direction: column;
212
377
  align-items: flex-start;
378
+ flex-grow: 1;
379
+ gap: rem(8px);
213
380
  }
214
381
 
215
- %filter-tree__expression-item {
382
+ %filter-tree__expression-section {
383
+ $spacing: rem(16px);
216
384
  display: flex;
217
- align-items: center;
385
+ flex-direction: column;
386
+ width: calc(100% - #{$spacing});
387
+ gap: rem(8px);
388
+ margin-inline-start: $spacing;
218
389
 
219
- + %filter-tree,
220
- + %filter-tree__inputs,
221
- + %filter-tree__expression-item {
222
- margin-top: pad(
223
- map.get($vertical-space, 'compact'),
224
- map.get($vertical-space, 'cosy'),
225
- map.get($vertical-space, 'comfortable')
226
- );
390
+ &:empty {
391
+ display: none;
227
392
  }
393
+ }
228
394
 
229
- > igx-chip {
230
- @container style(--ig-size: 1) {
231
- --ig-size: 2;
232
- }
395
+ %filter-tree__expression-item {
396
+ display: flex;
397
+ align-items: center;
398
+ width: 100%;
399
+ gap: rem(8px);
400
+ position: relative;
401
+
402
+ igx-chip {
403
+ --ig-size: 3;
233
404
 
234
405
  @if $variant != 'indigo' {
235
- .igx-chip__item {
236
- border-block: none;
406
+ igx-icon {
407
+ --component-size: 1;
237
408
  }
238
409
  }
410
+ }
239
411
 
240
- .igx-filter-tree__expression-column {
412
+ > igx-chip {
413
+ %filter-tree__expression-column {
241
414
  padding-inline: pad-inline(rem(3px), rem(6px), rem(8px));
242
415
  }
243
416
 
417
+ %filter-tree__expression-condition {
418
+ padding-inline-start: pad-inline(rem(3px), rem(6px), rem(8px));
419
+ }
420
+
244
421
  igx-prefix {
245
422
  display: flex;
246
423
  }
@@ -251,156 +428,94 @@
251
428
  }
252
429
  }
253
430
 
431
+
432
+ %filter-tree__expression-item-ghost {
433
+ &.igx-chip__item {
434
+ @include type-style('body-2');
435
+
436
+ --ig-body-2-text-transform: unset;
437
+
438
+ padding-inline: rem(32px);
439
+ }
440
+
441
+ color: color($color: 'gray', $variant: if($theme-variant == 'light', 600, 900));
442
+ border: rem(1px) dashed color($color: 'gray', $variant: if($theme-variant == 'light', 600, 300));
443
+ background: transparent;
444
+ }
445
+
254
446
  %filter-tree__expression-column {
255
447
  padding: 0 rem(8px);
256
448
  }
257
449
 
258
450
  %filter-tree__expression-actions {
259
451
  display: inline-flex;
260
- margin: 0 rem(8px);
261
- gap: rem(8px);
452
+ gap: if($variant != 'indigo', rem(16px), rem(8px));
262
453
 
263
- %igx-icon-button-display {
264
- --size: #{sizable(rem(20px), rem(24px), if($variant != 'indigo', rem(32px), rem(28px)))};
454
+ span {
455
+ display: inline-flex;
265
456
  }
457
+
458
+ %igx-icon-button-display {
459
+ --ig-size: #{if($variant != 'bootstrap', 2, 1)};
460
+ };
266
461
  }
267
462
 
268
463
  %filter-tree__expression-condition {
269
- opacity: .7;
464
+ opacity: if($variant != 'indigo', .6, .8);
270
465
  }
271
466
 
272
467
  %filter-tree__buttons {
468
+ --ig-size: 1;
469
+
273
470
  display: flex;
274
- justify-content: space-between;
275
471
  align-items: center;
276
- margin-top: pad(
277
- map.get($vertical-space, 'compact'),
278
- map.get($vertical-space, 'cosy'),
279
- map.get($vertical-space, 'comfortable')
280
- );
472
+ gap: rem(8px);
281
473
 
282
- + %filter-tree,
283
- + %filter-tree__expression-item,
284
- + %filter-tree__inputs {
285
- margin-top: pad(
286
- map.get($vertical-space, 'compact'),
287
- map.get($vertical-space, 'cosy'),
288
- map.get($vertical-space, 'comfortable')
289
- );
474
+ [igxbutton='flat'] {
475
+ padding-block: 0;
476
+ border: none
290
477
  }
291
478
  }
292
479
 
293
480
  %filter-tree__inputs {
294
- display: flex;
295
- justify-content: space-between;
296
- align-items: center;
297
-
298
- igx-input-group {
299
- --ig-size: 1;
300
- }
301
-
302
- igx-select + igx-select,
303
- igx-select + igx-input-group,
304
- igx-select + igx-date-picker,
305
- igx-select + igx-time-picker,
306
- igx-input-group + igx-select {
307
- margin-inline-start: rem(8px);
308
- }
481
+ --ig-size: #{if($variant == 'indigo' or $variant == 'bootstrap', 2, 1)};
309
482
 
310
- + %filter-tree,
311
- + %filter-tree__expression-item {
312
- margin-top: pad(
313
- map.get($vertical-space, 'compact'),
314
- map.get($vertical-space, 'cosy'),
315
- map.get($vertical-space, 'comfortable')
316
- );
317
- }
318
- }
319
-
320
- %filter-tree__inputs-actions {
321
483
  display: flex;
322
- margin: 0 rem(8px);
323
- align-items: center;
324
-
325
- [igxIconButton] {
326
- transition: none;
327
- }
484
+ align-items: flex-end;
485
+ gap: rem(16px);
486
+ width: 100%;
487
+ border-radius: inherit;
328
488
 
329
- [igxIconButton] + [igxIconButton] {
330
- margin-inline-start: rem(8px);
489
+ &:empty {
490
+ display: none;
331
491
  }
332
492
  }
333
493
 
334
- %filter-legend {
494
+ %filter-tree__inputs-field {
335
495
  display: flex;
336
- margin-inline-start: auto;
337
- pointer-events: none;
496
+ flex-direction: column;
497
+ gap: rem(4px);
498
+ max-width: rem(250px);
499
+ width: 100%;
338
500
  }
339
501
 
340
- %filter-legend__item {
341
- position: relative;
342
- display: inline-flex;
343
- align-items: center;
344
- font-size: rem(12px);
502
+ %advanced-filter__label {
503
+ @include type-style('body-2');
345
504
 
346
- @if $variant == 'indigo' {
347
- font-weight: 400;
348
- }
349
-
350
- &::before {
351
- content: '';
352
- width: rem(24px);
353
- height: rem(24px);
354
- background: white;
355
- border-radius: border-radius(rem(4px));
356
- margin-inline-end: rem(8px);
357
- }
358
-
359
- + %filter-legend__item {
360
- margin-inline-start: rem(24px);
361
- }
505
+ color: var-get($theme, 'label-foreground');
362
506
  }
363
507
 
364
- %filter-legend__item--and::before {
365
- background: var-get($theme, 'background-and');
366
- }
367
-
368
- %filter-legend__item--or::before {
369
- background: var-get($theme, 'background-or');
370
- }
508
+ %filter-tree__inputs-actions {
509
+ --ig-size: 2;
371
510
 
372
- %filter-con-menu {
373
- position: relative;
374
511
  display: flex;
375
- flex-flow: column;
376
- width: rem(196px);
377
- background-color: var-get($theme, 'background');
378
- padding: rem(16px);
379
- margin-inline-start: rem(16px);
380
- border-radius: border-radius(rem(4px));
381
- border: rem(1px) solid color(null, 'gray', 200);
382
-
383
- > [igxButton] + [igxButton],
384
- igx-buttongroup + [igxButton],
385
- [igxButton] + igx-buttongroup {
386
- margin-top: pad(
387
- map.get($vertical-space, 'compact'),
388
- map.get($vertical-space, 'cosy'),
389
- map.get($vertical-space, 'comfortable')
390
- );
391
- }
392
-
393
- > [igxButton]%filter-con-menu__close-btn + [igxButton],
394
- [igxButton]%filter-con-menu__close-btn + igx-buttongroup {
395
- margin-top: 0;
396
- }
397
-
398
- [igxButton] > igx-icon + * {
399
- margin-inline-start: rem(8px);
400
- }
512
+ gap: rem(8px);
513
+ align-items: center;
514
+ width: auto;
515
+ align-self: center;
401
516
 
402
- igx-buttongroup > * {
403
- box-shadow: none;
517
+ [igxIconButton] {
518
+ transition: none;
404
519
  }
405
520
  }
406
521
 
@@ -424,8 +539,9 @@
424
539
 
425
540
  %filter-con-menu__close-btn {
426
541
  position: absolute;
427
- top: rem(-18px);
428
- inset-inline-end: rem(-18px);
542
+ top: 0;
543
+ inset-inline-start: 100%;
544
+ transform: translate(-50%, -50%);
429
545
  background-color: var-get($theme, 'background');
430
546
  border: rem(1px) solid color(null, 'gray', 200);
431
547
 
@@ -437,29 +553,6 @@
437
553
  }
438
554
  }
439
555
 
440
- %filter-empty {
441
- display: flex;
442
- align-items: center;
443
- justify-content: center;
444
- height: pad(
445
- map.get($filter-empty, 'compact'),
446
- map.get($filter-empty, 'cosy'),
447
- map.get($filter-empty, 'comfortable')
448
- );
449
- }
450
-
451
- %filter-empty__title {
452
- @if $variant == 'indigo' {
453
- @if $theme-variant == 'light' {
454
- color: color(null, 'gray', 600);
455
- } @else {
456
- color: contrast-color(null, 'gray', 50, .6);
457
- }
458
- } @else {
459
- color: color(null, 'gray', 600);
460
- }
461
- }
462
-
463
556
  %advanced-filter--inline {
464
557
  display: flex;
465
558
  flex-direction: column;