@zengrid/core 1.2.2 → 1.3.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 (105) hide show
  1. package/dist/index.cjs.js +1873 -1095
  2. package/dist/index.esm.js +1936 -1161
  3. package/dist/package.json +2 -2
  4. package/dist/src/datetime-core/formatting/date-formatter.d.ts +2 -0
  5. package/dist/src/datetime-core/formatting/date-formatter.d.ts.map +1 -1
  6. package/dist/src/datetime-core/theming/datetime.css +463 -407
  7. package/dist/src/editing/checkbox/checkbox-dom.d.ts.map +1 -1
  8. package/dist/src/editing/datetime/date-editor/date-editor.d.ts.map +1 -1
  9. package/dist/src/editing/datetime/date-range-editor/date-range-calendar.d.ts.map +1 -1
  10. package/dist/src/editing/editor-manager/editor-manager.d.ts +23 -1
  11. package/dist/src/editing/editor-manager/editor-manager.d.ts.map +1 -1
  12. package/dist/src/editing/number/number-editor.d.ts.map +1 -1
  13. package/dist/src/editing/select/select-editor.d.ts.map +1 -1
  14. package/dist/src/features/column-drag/drag-mouse-handler.d.ts +1 -0
  15. package/dist/src/features/column-drag/drag-mouse-handler.d.ts.map +1 -1
  16. package/dist/src/features/copy-paste/clipboard-manager.d.ts +24 -2
  17. package/dist/src/features/copy-paste/clipboard-manager.d.ts.map +1 -1
  18. package/dist/src/features/loading/loading-indicator.d.ts.map +1 -1
  19. package/dist/src/features/loading/loading.styles.css +346 -342
  20. package/dist/src/features/selection/selection-manager.d.ts +14 -0
  21. package/dist/src/features/selection/selection-manager.d.ts.map +1 -1
  22. package/dist/src/grid/grid-core.d.ts.map +1 -1
  23. package/dist/src/grid/grid-setup.d.ts.map +1 -1
  24. package/dist/src/index.d.ts +6 -2
  25. package/dist/src/index.d.ts.map +1 -1
  26. package/dist/src/plugins/clipboard/clipboard-plugin.d.ts +21 -0
  27. package/dist/src/plugins/clipboard/clipboard-plugin.d.ts.map +1 -0
  28. package/dist/src/plugins/clipboard/index.d.ts +3 -0
  29. package/dist/src/plugins/clipboard/index.d.ts.map +1 -0
  30. package/dist/src/plugins/column/column-plugin.d.ts.map +1 -1
  31. package/dist/src/plugins/dom/dom-plugin.d.ts.map +1 -1
  32. package/dist/src/plugins/editing/editing-plugin.d.ts.map +1 -1
  33. package/dist/src/plugins/filter-ui/field-state-utils.d.ts +6 -0
  34. package/dist/src/plugins/filter-ui/field-state-utils.d.ts.map +1 -0
  35. package/dist/src/plugins/filter-ui/filter-chip-bar.d.ts +16 -0
  36. package/dist/src/plugins/filter-ui/filter-chip-bar.d.ts.map +1 -0
  37. package/dist/src/plugins/filter-ui/filter-chip-descriptors.d.ts +4 -0
  38. package/dist/src/plugins/filter-ui/filter-chip-descriptors.d.ts.map +1 -0
  39. package/dist/src/plugins/filter-ui/filter-popup-dom.d.ts +32 -0
  40. package/dist/src/plugins/filter-ui/filter-popup-dom.d.ts.map +1 -0
  41. package/dist/src/plugins/filter-ui/filter-popup.d.ts +3 -0
  42. package/dist/src/plugins/filter-ui/filter-popup.d.ts.map +1 -0
  43. package/dist/src/plugins/filter-ui/filter-ui-operators.d.ts +9 -0
  44. package/dist/src/plugins/filter-ui/filter-ui-operators.d.ts.map +1 -0
  45. package/dist/src/plugins/filter-ui/filter-ui-types.d.ts +56 -0
  46. package/dist/src/plugins/filter-ui/filter-ui-types.d.ts.map +1 -0
  47. package/dist/src/plugins/filter-ui/grid-filter-ui.d.ts +20 -0
  48. package/dist/src/plugins/filter-ui/grid-filter-ui.d.ts.map +1 -0
  49. package/dist/src/plugins/filter-ui/index.d.ts +1 -0
  50. package/dist/src/plugins/filter-ui/index.d.ts.map +1 -1
  51. package/dist/src/plugins/header/header-dom-operations.d.ts +6 -0
  52. package/dist/src/plugins/header/header-dom-operations.d.ts.map +1 -1
  53. package/dist/src/plugins/header/header-plugin.d.ts.map +1 -1
  54. package/dist/src/plugins/header/header-registry-setup.d.ts.map +1 -1
  55. package/dist/src/plugins/header/header-rendering.d.ts.map +1 -1
  56. package/dist/src/plugins/header/header-types.d.ts +8 -1
  57. package/dist/src/plugins/header/header-types.d.ts.map +1 -1
  58. package/dist/src/plugins/index.d.ts +4 -0
  59. package/dist/src/plugins/index.d.ts.map +1 -1
  60. package/dist/src/plugins/keyboard/index.d.ts +3 -0
  61. package/dist/src/plugins/keyboard/index.d.ts.map +1 -0
  62. package/dist/src/plugins/keyboard/keyboard-nav-utils.d.ts +13 -0
  63. package/dist/src/plugins/keyboard/keyboard-nav-utils.d.ts.map +1 -0
  64. package/dist/src/plugins/keyboard/keyboard-plugin.d.ts +17 -0
  65. package/dist/src/plugins/keyboard/keyboard-plugin.d.ts.map +1 -0
  66. package/dist/src/plugins/lifecycle/lifecycle-plugin.d.ts +1 -0
  67. package/dist/src/plugins/lifecycle/lifecycle-plugin.d.ts.map +1 -1
  68. package/dist/src/plugins/pagination/pagination-plugin.d.ts.map +1 -1
  69. package/dist/src/plugins/rendering/rendering-plugin.d.ts.map +1 -1
  70. package/dist/src/plugins/selection/selection-plugin.d.ts.map +1 -1
  71. package/dist/src/reactive/store.d.ts +1 -0
  72. package/dist/src/reactive/store.d.ts.map +1 -1
  73. package/dist/src/reactive/types.d.ts +1 -0
  74. package/dist/src/reactive/types.d.ts.map +1 -1
  75. package/dist/src/rendering/cache/renderer-cache.interface.d.ts +6 -0
  76. package/dist/src/rendering/cache/renderer-cache.interface.d.ts.map +1 -1
  77. package/dist/src/rendering/cell-positioner/cell-positioner.d.ts +21 -0
  78. package/dist/src/rendering/cell-positioner/cell-positioner.d.ts.map +1 -1
  79. package/dist/src/rendering/headers/header-renderer.interface.d.ts +6 -0
  80. package/dist/src/rendering/headers/header-renderer.interface.d.ts.map +1 -1
  81. package/dist/src/rendering/headers/renderers/sortable-header-renderer.d.ts +4 -0
  82. package/dist/src/rendering/headers/renderers/sortable-header-renderer.d.ts.map +1 -1
  83. package/dist/src/rendering/renderers/dropdown/dropdown-dom.d.ts.map +1 -1
  84. package/dist/src/rendering/renderers/dropdown/dropdown-renderer.d.ts +2 -0
  85. package/dist/src/rendering/renderers/dropdown/dropdown-renderer.d.ts.map +1 -1
  86. package/dist/src/rendering/renderers/dropdown/dropdown-state.d.ts.map +1 -1
  87. package/dist/src/rendering/renderers/renderer.interface.d.ts +7 -0
  88. package/dist/src/rendering/renderers/renderer.interface.d.ts.map +1 -1
  89. package/dist/src/styles/a11y.css +20 -0
  90. package/dist/src/styles/calendar.css +291 -0
  91. package/dist/src/styles/cell-overflow.css +129 -0
  92. package/dist/src/styles/cell-renderers.css +90 -0
  93. package/dist/src/styles/date-picker.css +125 -0
  94. package/dist/src/styles/dropdown.css +156 -0
  95. package/dist/src/styles/filter.css +166 -0
  96. package/dist/src/styles/grid.css +91 -287
  97. package/dist/src/styles/header.css +60 -0
  98. package/dist/src/styles/overlays.css +44 -0
  99. package/dist/src/styles/tokens.css +86 -0
  100. package/dist/src/styles.css +24 -1112
  101. package/dist/src/types/grid.d.ts +32 -2
  102. package/dist/src/types/grid.d.ts.map +1 -1
  103. package/package.json +3 -3
  104. package/dist/src/grid/filter-ui.d.ts +0 -71
  105. package/dist/src/grid/filter-ui.d.ts.map +0 -1
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Cell renderers — number, image, advanced (icon + text), badge, button and checkbox.
3
+ */
4
+
5
+ /* Number renderer */
6
+ .zg-cell-number {
7
+ /* Right-align under the flex .zg-cell; text-align alone is a no-op on a flex container */
8
+ justify-content: flex-end;
9
+ text-align: right;
10
+ font-variant-numeric: tabular-nums;
11
+ }
12
+
13
+ .zg-cell-negative {
14
+ color: var(--zg-text-negative, #d32f2f);
15
+ }
16
+
17
+ /* Image renderer */
18
+ .zg-cell-image {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ padding: 2px;
23
+ }
24
+
25
+ .zg-cell-image__img {
26
+ max-width: 100%;
27
+ max-height: 100%;
28
+ object-fit: contain;
29
+ }
30
+
31
+ /* Advanced cell renderer */
32
+ .zg-cell-advanced {
33
+ overflow: hidden;
34
+ }
35
+
36
+ .zg-cell-advanced__icon {
37
+ flex-shrink: 0;
38
+ }
39
+
40
+ .zg-cell-advanced__text {
41
+ flex: 1;
42
+ overflow: hidden;
43
+ text-overflow: ellipsis;
44
+ white-space: nowrap;
45
+ }
46
+
47
+ .zg-badge {
48
+ display: inline-flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ padding: 2px 6px;
52
+ border-radius: 4px;
53
+ font-size: 0.75em;
54
+ font-weight: 500;
55
+ background: var(--zg-badge-bg, #e0e0e0);
56
+ color: var(--zg-badge-color, #333);
57
+ }
58
+
59
+ /* Button Renderer Styles */
60
+ .zg-cell.zg-cell-button {
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: center;
64
+ }
65
+
66
+ .zg-button {
67
+ line-height: 1;
68
+ text-align: center;
69
+ }
70
+
71
+ /* Checkbox Renderer Styles */
72
+ .zg-cell.zg-cell-checkbox-container {
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ padding: 0 !important; /* Override default cell padding */
77
+ }
78
+
79
+ .zg-checkbox-wrapper {
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ }
84
+
85
+ .zg-cell-checkbox {
86
+ cursor: pointer;
87
+ width: 16px;
88
+ height: 16px;
89
+ margin: 0;
90
+ }
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Date picker renderer — trigger button, text/icon, popup and cell state classes.
3
+ */
4
+
5
+ /* Container */
6
+ .zg-date-picker-wrapper {
7
+ display: flex;
8
+ width: 100%;
9
+ height: 100%;
10
+ align-items: center;
11
+ }
12
+
13
+ /* Trigger button */
14
+ .zg-date-picker-trigger {
15
+ display: flex;
16
+ align-items: center;
17
+ justify-content: space-between;
18
+ width: 100%;
19
+ padding: 6px 8px;
20
+ border: 1px solid var(--zg-border-color, #d0d0d0);
21
+ border-radius: 4px;
22
+ background: var(--zg-bg-primary, #ffffff);
23
+ color: var(--zg-text-color, #333333);
24
+ font-family: inherit;
25
+ font-size: inherit;
26
+ cursor: pointer;
27
+ text-align: left;
28
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
29
+ }
30
+
31
+ .zg-date-picker-trigger:hover:not(:disabled) {
32
+ border-color: var(--zg-focus-ring, #1976d2);
33
+ }
34
+
35
+ .zg-date-picker-trigger:focus {
36
+ outline: none;
37
+ border-color: var(--zg-focus-ring, #1976d2);
38
+ box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.2);
39
+ }
40
+
41
+ /* Editing state - use CSS variable, not hardcoded green */
42
+ .zg-cell-editing .zg-date-picker-trigger {
43
+ outline: 2px solid var(--zg-border-editing, #4caf50);
44
+ outline-offset: -1px;
45
+ }
46
+
47
+ /* Open state */
48
+ .zg-date-picker-open .zg-date-picker-trigger {
49
+ border-color: var(--zg-focus-ring, #1976d2);
50
+ }
51
+
52
+ /* Disabled state */
53
+ .zg-date-picker-trigger:disabled,
54
+ .zg-date-picker-disabled {
55
+ background: var(--zg-hover-bg, #f5f5f5);
56
+ color: var(--zg-text-color, #999999);
57
+ opacity: 0.6;
58
+ cursor: not-allowed;
59
+ }
60
+
61
+ /* Text display */
62
+ .zg-date-picker-text {
63
+ flex: 1;
64
+ overflow: hidden;
65
+ text-overflow: ellipsis;
66
+ white-space: nowrap;
67
+ }
68
+
69
+ /* Empty placeholder */
70
+ .zg-date-picker-empty .zg-date-picker-text {
71
+ color: var(--zg-text-color, #999999);
72
+ opacity: 0.6;
73
+ }
74
+
75
+ /* Calendar icon */
76
+ .zg-date-picker-icon {
77
+ flex-shrink: 0;
78
+ margin-left: 8px;
79
+ color: var(--zg-text-color, #666666);
80
+ opacity: 0.7;
81
+ }
82
+
83
+ .zg-date-picker-icon svg {
84
+ display: block;
85
+ width: 16px;
86
+ height: 16px;
87
+ }
88
+
89
+ /* Popup container */
90
+ .zg-date-picker-popup {
91
+ position: fixed;
92
+ z-index: 10003;
93
+ background: var(--zg-calendar-bg, #ffffff);
94
+ border: 1px solid var(--zg-calendar-border, #e0e0e0);
95
+ border-radius: var(--zg-calendar-radius, 8px);
96
+ box-shadow: var(--zg-shadow-lg, 0 4px 20px rgba(0, 0, 0, 0.15));
97
+ }
98
+
99
+ /* Calendar wrapper */
100
+ .zg-date-picker-calendar-wrapper {
101
+ padding: 4px;
102
+ }
103
+
104
+ /* Dark theme adjustments */
105
+ [data-theme="dark"] .zg-date-picker-trigger,
106
+ .zg-theme-dark .zg-date-picker-trigger {
107
+ background: var(--zg-bg-primary, #1e1e1e);
108
+ border-color: var(--zg-border-color, #444444);
109
+ color: var(--zg-text-color, #e0e0e0);
110
+ }
111
+
112
+ [data-theme="dark"] .zg-date-picker-popup,
113
+ .zg-theme-dark .zg-date-picker-popup {
114
+ background: var(--zg-calendar-bg, #2d2d2d);
115
+ border-color: var(--zg-calendar-border, #444444);
116
+ }
117
+
118
+ /* Cell state classes */
119
+ .zg-cell-date-picker {
120
+ /* Cell containing date picker */
121
+ }
122
+
123
+ .zg-date-picker-has-value .zg-date-picker-text {
124
+ font-weight: 400;
125
+ }
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Dropdown renderer.
3
+ * Visual defaults live here (not inline) so apps can re-skin via these classes
4
+ * without !important. The menu is portaled to <body>, so its rules use
5
+ * standalone selectors, not descendants of the wrapper.
6
+ */
7
+
8
+ .zg-cell-dropdown {
9
+ padding: 0;
10
+ }
11
+
12
+ /* Wrapper (in-grid) */
13
+ .zg-dropdown-wrapper {
14
+ display: flex;
15
+ width: 100%;
16
+ height: 100%;
17
+ align-items: center;
18
+ }
19
+
20
+ /* Trigger button (in-grid) */
21
+ .zg-dropdown-trigger {
22
+ display: flex;
23
+ align-items: center;
24
+ justify-content: space-between;
25
+ gap: 8px;
26
+ width: 100%;
27
+ padding: 6px 8px;
28
+ border: 1px solid var(--zg-border-color, #d0d0d0);
29
+ border-radius: 6px;
30
+ background: var(--zg-bg-primary, #ffffff);
31
+ color: var(--zg-text-primary, #333333);
32
+ font-family: inherit;
33
+ font-size: inherit;
34
+ line-height: 1.4;
35
+ cursor: pointer;
36
+ text-align: left;
37
+ white-space: nowrap;
38
+ overflow: hidden;
39
+ text-overflow: ellipsis;
40
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
41
+ }
42
+
43
+ .zg-dropdown-trigger:hover {
44
+ border-color: var(--zg-focus-ring, #1976d2);
45
+ }
46
+
47
+ .zg-dropdown-trigger:focus-visible {
48
+ outline: none;
49
+ border-color: var(--zg-focus-ring, #1976d2);
50
+ box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.2);
51
+ }
52
+
53
+ .zg-dropdown-wrapper.open .zg-dropdown-trigger {
54
+ border-color: var(--zg-focus-ring, #1976d2);
55
+ }
56
+
57
+ .zg-dropdown-arrow {
58
+ flex-shrink: 0;
59
+ font-size: 10px;
60
+ line-height: 1;
61
+ color: var(--zg-text-secondary, #666666);
62
+ transition: transform 0.15s ease;
63
+ }
64
+
65
+ .zg-dropdown-wrapper.open .zg-dropdown-arrow {
66
+ transform: rotate(180deg);
67
+ }
68
+
69
+ /* Menu (portaled to <body>) */
70
+ .zg-dropdown-menu {
71
+ min-width: 200px;
72
+ overflow-y: auto;
73
+ background: var(--zg-bg-primary, #ffffff);
74
+ color: var(--zg-text-primary, #333333);
75
+ border: 1px solid var(--zg-border-color, #d0d0d0);
76
+ border-radius: 8px;
77
+ box-shadow: var(--zg-shadow-lg, 0 4px 20px rgba(0, 0, 0, 0.15));
78
+ overscroll-behavior: contain;
79
+ }
80
+
81
+ /* Search */
82
+ .zg-dropdown-search {
83
+ padding: 8px;
84
+ border-bottom: 1px solid var(--zg-border-color, #eeeeee);
85
+ }
86
+
87
+ .zg-dropdown-search-input {
88
+ width: 100%;
89
+ padding: 6px 8px;
90
+ border: 1px solid var(--zg-border-color, #d0d0d0);
91
+ border-radius: 6px;
92
+ font: inherit;
93
+ color: inherit;
94
+ background: var(--zg-bg-primary, #ffffff);
95
+ }
96
+
97
+ .zg-dropdown-search-input:focus-visible {
98
+ outline: none;
99
+ border-color: var(--zg-focus-ring, #1976d2);
100
+ box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.2);
101
+ }
102
+
103
+ /* Options */
104
+ .zg-dropdown-options {
105
+ padding: 4px;
106
+ }
107
+
108
+ .zg-dropdown-option {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: 8px;
112
+ padding: 8px 10px;
113
+ border-radius: 6px;
114
+ cursor: pointer;
115
+ color: var(--zg-text-primary, #333333);
116
+ transition: background-color 0.1s ease;
117
+ }
118
+
119
+ .zg-dropdown-option:hover,
120
+ .zg-dropdown-option:focus {
121
+ background: var(--zg-bg-hover, #f0f4f8);
122
+ outline: none;
123
+ }
124
+
125
+ .zg-dropdown-option.selected {
126
+ background: var(--zg-bg-selected, #e3f2fd);
127
+ font-weight: 600;
128
+ }
129
+
130
+ .zg-dropdown-option.disabled {
131
+ color: var(--zg-text-disabled, #999999);
132
+ cursor: not-allowed;
133
+ }
134
+
135
+ .zg-dropdown-group-header {
136
+ padding: 8px 10px 4px;
137
+ font-size: 11px;
138
+ font-weight: 700;
139
+ letter-spacing: 0.04em;
140
+ text-transform: uppercase;
141
+ color: var(--zg-text-secondary, #666666);
142
+ }
143
+
144
+ .zg-dropdown-no-options {
145
+ padding: 12px;
146
+ text-align: center;
147
+ color: var(--zg-text-disabled, #999999);
148
+ }
149
+
150
+ /* Dark theme (in-grid trigger; portaled menu resolves :root vars) */
151
+ [data-theme="dark"] .zg-dropdown-trigger,
152
+ .zg-theme-dark .zg-dropdown-trigger {
153
+ background: var(--zg-bg-primary, #1e1e1e);
154
+ border-color: var(--zg-border-color, #444444);
155
+ color: var(--zg-text-primary, #e0e0e0);
156
+ }
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Filtering UI — active-filter chip bar and the per-column filter popup.
3
+ */
4
+
5
+ /* Active filter chips */
6
+ .zg-filter-chip-bar {
7
+ position: absolute;
8
+ left: 0;
9
+ right: 0;
10
+ z-index: 9;
11
+ display: flex;
12
+ align-items: flex-start;
13
+ gap: 8px;
14
+ padding: 6px 8px;
15
+ border-bottom: 1px solid var(--zg-border-color);
16
+ background: var(--zg-bg-secondary, #f9f9f9);
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ .zg-filter-chip-bar__title {
21
+ font-size: 12px;
22
+ font-weight: 600;
23
+ color: var(--zg-text-secondary, #666666);
24
+ line-height: 24px;
25
+ }
26
+
27
+ .zg-filter-chip-bar__list {
28
+ display: flex;
29
+ flex: 1;
30
+ flex-wrap: wrap;
31
+ gap: 6px;
32
+ }
33
+
34
+ .zg-filter-chip-bar__clear {
35
+ flex-shrink: 0;
36
+ padding: 4px 8px;
37
+ border: 1px solid var(--zg-border-color);
38
+ border-radius: 999px;
39
+ background: transparent;
40
+ color: var(--zg-text-secondary, #666666);
41
+ font-size: 12px;
42
+ cursor: pointer;
43
+ }
44
+
45
+ .zg-filter-chip {
46
+ display: inline-flex;
47
+ align-items: center;
48
+ gap: 6px;
49
+ min-width: 0;
50
+ padding: 4px 8px;
51
+ border: 1px solid var(--zg-border-color);
52
+ border-radius: 999px;
53
+ background: var(--zg-bg-color);
54
+ color: var(--zg-text-color);
55
+ box-shadow: var(--zg-shadow-sm);
56
+ }
57
+
58
+ .zg-filter-chip__label {
59
+ min-width: 0;
60
+ max-width: 320px;
61
+ overflow: hidden;
62
+ text-overflow: ellipsis;
63
+ white-space: nowrap;
64
+ font-size: 12px;
65
+ }
66
+
67
+ .zg-filter-chip__remove {
68
+ flex-shrink: 0;
69
+ border: 0;
70
+ padding: 0;
71
+ background: transparent;
72
+ color: inherit;
73
+ font-size: 14px;
74
+ line-height: 1;
75
+ cursor: pointer;
76
+ }
77
+
78
+ /* Filter popup */
79
+ .zg-filter-popup {
80
+ position: fixed;
81
+ min-width: 220px;
82
+ max-width: 320px;
83
+ background: var(--zg-bg-color);
84
+ color: var(--zg-text-color);
85
+ border: 1px solid var(--zg-border-color);
86
+ border-radius: 6px;
87
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
88
+ padding: 10px;
89
+ z-index: 2000;
90
+ font-size: 13px;
91
+ }
92
+
93
+ .zg-filter-popup__title {
94
+ font-weight: 600;
95
+ margin-bottom: 8px;
96
+ }
97
+
98
+ .zg-filter-popup__row {
99
+ display: flex;
100
+ flex-direction: column;
101
+ gap: 4px;
102
+ margin-bottom: 8px;
103
+ }
104
+
105
+ .zg-filter-popup__conditions {
106
+ display: flex;
107
+ flex-direction: column;
108
+ gap: 8px;
109
+ margin-bottom: 8px;
110
+ }
111
+
112
+ .zg-filter-popup__condition {
113
+ padding: 6px;
114
+ border: 1px solid var(--zg-border-color);
115
+ border-radius: 4px;
116
+ background: var(--zg-bg-secondary, #f9f9f9);
117
+ }
118
+
119
+ .zg-filter-popup__condition-actions {
120
+ display: flex;
121
+ justify-content: flex-end;
122
+ }
123
+
124
+ .zg-filter-popup__select,
125
+ .zg-filter-popup__input {
126
+ width: 100%;
127
+ padding: 6px 8px;
128
+ border: 1px solid var(--zg-border-color);
129
+ border-radius: 4px;
130
+ background: var(--zg-bg-color);
131
+ color: var(--zg-text-color);
132
+ font-size: 13px;
133
+ box-sizing: border-box;
134
+ }
135
+
136
+ .zg-filter-popup__actions {
137
+ display: flex;
138
+ gap: 8px;
139
+ justify-content: flex-end;
140
+ }
141
+
142
+ .zg-filter-popup__btn {
143
+ padding: 6px 10px;
144
+ border: 1px solid var(--zg-border-color);
145
+ background: var(--zg-header-bg);
146
+ color: var(--zg-header-text);
147
+ border-radius: 4px;
148
+ cursor: pointer;
149
+ font-size: 12px;
150
+ }
151
+
152
+ .zg-filter-popup__btn--add {
153
+ width: 100%;
154
+ margin-bottom: 8px;
155
+ }
156
+
157
+ .zg-filter-popup__btn--remove {
158
+ padding: 4px 8px;
159
+ font-size: 11px;
160
+ }
161
+
162
+ .zg-filter-popup__btn.primary {
163
+ background: var(--zg-selected-border);
164
+ border-color: var(--zg-selected-border);
165
+ color: #fff;
166
+ }