@zengrid/core 1.2.1 → 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 (148) hide show
  1. package/dist/index.cjs.js +2571 -1388
  2. package/dist/index.esm.js +2569 -1389
  3. package/dist/package.json +2 -2
  4. package/dist/src/data/data-manager.d.ts.map +1 -1
  5. package/dist/src/datetime-core/formatting/date-formatter.d.ts +2 -0
  6. package/dist/src/datetime-core/formatting/date-formatter.d.ts.map +1 -1
  7. package/dist/src/datetime-core/theming/datetime.css +463 -407
  8. package/dist/src/editing/checkbox/checkbox-dom.d.ts.map +1 -1
  9. package/dist/src/editing/datetime/date-editor/date-editor.d.ts.map +1 -1
  10. package/dist/src/editing/datetime/date-range-editor/date-range-calendar.d.ts.map +1 -1
  11. package/dist/src/editing/editor-manager/editor-manager.d.ts +23 -1
  12. package/dist/src/editing/editor-manager/editor-manager.d.ts.map +1 -1
  13. package/dist/src/editing/number/number-editor.d.ts.map +1 -1
  14. package/dist/src/editing/select/select-editor.d.ts.map +1 -1
  15. package/dist/src/features/column-drag/drag-mouse-handler.d.ts +1 -0
  16. package/dist/src/features/column-drag/drag-mouse-handler.d.ts.map +1 -1
  17. package/dist/src/features/copy-paste/clipboard-manager.d.ts +24 -2
  18. package/dist/src/features/copy-paste/clipboard-manager.d.ts.map +1 -1
  19. package/dist/src/features/filtering/filter-ast-compiler.d.ts +1 -1
  20. package/dist/src/features/filtering/filter-ast-compiler.d.ts.map +1 -1
  21. package/dist/src/features/filtering/filter-ast.d.ts +6 -8
  22. package/dist/src/features/filtering/filter-ast.d.ts.map +1 -1
  23. package/dist/src/features/filtering/filter-execution-error.d.ts +2 -0
  24. package/dist/src/features/filtering/filter-execution-error.d.ts.map +1 -0
  25. package/dist/src/features/filtering/filter-expression.d.ts.map +1 -1
  26. package/dist/src/features/filtering/filter-manager/filter-core.d.ts +12 -4
  27. package/dist/src/features/filtering/filter-manager/filter-core.d.ts.map +1 -1
  28. package/dist/src/features/filtering/filter-manager/filter-query.d.ts +6 -1
  29. package/dist/src/features/filtering/filter-manager/filter-query.d.ts.map +1 -1
  30. package/dist/src/features/filtering/filter-manager/index.d.ts +1 -0
  31. package/dist/src/features/filtering/filter-manager/index.d.ts.map +1 -1
  32. package/dist/src/features/filtering/filter-signature.d.ts +6 -0
  33. package/dist/src/features/filtering/filter-signature.d.ts.map +1 -0
  34. package/dist/src/features/loading/loading-indicator.d.ts.map +1 -1
  35. package/dist/src/features/loading/loading.styles.css +346 -342
  36. package/dist/src/features/query/query-signature.d.ts +3 -0
  37. package/dist/src/features/query/query-signature.d.ts.map +1 -0
  38. package/dist/src/features/selection/selection-manager.d.ts +14 -0
  39. package/dist/src/features/selection/selection-manager.d.ts.map +1 -1
  40. package/dist/src/grid/api/filter-api.d.ts.map +1 -1
  41. package/dist/src/grid/api/sort-api.d.ts.map +1 -1
  42. package/dist/src/grid/grid-context.d.ts +2 -0
  43. package/dist/src/grid/grid-context.d.ts.map +1 -1
  44. package/dist/src/grid/grid-core.d.ts.map +1 -1
  45. package/dist/src/grid/grid-setup.d.ts.map +1 -1
  46. package/dist/src/grid/options-manager.d.ts +14 -0
  47. package/dist/src/grid/options-manager.d.ts.map +1 -0
  48. package/dist/src/grid/plugin-host.d.ts +3 -2
  49. package/dist/src/grid/plugin-host.d.ts.map +1 -1
  50. package/dist/src/grid/query-mode.d.ts +4 -0
  51. package/dist/src/grid/query-mode.d.ts.map +1 -0
  52. package/dist/src/index.d.ts +8 -3
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/plugins/clipboard/clipboard-plugin.d.ts +21 -0
  55. package/dist/src/plugins/clipboard/clipboard-plugin.d.ts.map +1 -0
  56. package/dist/src/plugins/clipboard/index.d.ts +3 -0
  57. package/dist/src/plugins/clipboard/index.d.ts.map +1 -0
  58. package/dist/src/plugins/column/column-plugin.d.ts.map +1 -1
  59. package/dist/src/plugins/data-plugin.d.ts.map +1 -1
  60. package/dist/src/plugins/dom/dom-plugin.d.ts.map +1 -1
  61. package/dist/src/plugins/editing/editing-plugin.d.ts.map +1 -1
  62. package/dist/src/plugins/filter-plugin.d.ts.map +1 -1
  63. package/dist/src/plugins/filter-ui/field-state-utils.d.ts +6 -0
  64. package/dist/src/plugins/filter-ui/field-state-utils.d.ts.map +1 -0
  65. package/dist/src/plugins/filter-ui/filter-chip-bar.d.ts +16 -0
  66. package/dist/src/plugins/filter-ui/filter-chip-bar.d.ts.map +1 -0
  67. package/dist/src/plugins/filter-ui/filter-chip-descriptors.d.ts +4 -0
  68. package/dist/src/plugins/filter-ui/filter-chip-descriptors.d.ts.map +1 -0
  69. package/dist/src/plugins/filter-ui/filter-popup-dom.d.ts +32 -0
  70. package/dist/src/plugins/filter-ui/filter-popup-dom.d.ts.map +1 -0
  71. package/dist/src/plugins/filter-ui/filter-popup.d.ts +3 -0
  72. package/dist/src/plugins/filter-ui/filter-popup.d.ts.map +1 -0
  73. package/dist/src/plugins/filter-ui/filter-ui-operators.d.ts +9 -0
  74. package/dist/src/plugins/filter-ui/filter-ui-operators.d.ts.map +1 -0
  75. package/dist/src/plugins/filter-ui/filter-ui-plugin.d.ts +1 -1
  76. package/dist/src/plugins/filter-ui/filter-ui-plugin.d.ts.map +1 -1
  77. package/dist/src/plugins/filter-ui/filter-ui-types.d.ts +56 -0
  78. package/dist/src/plugins/filter-ui/filter-ui-types.d.ts.map +1 -0
  79. package/dist/src/plugins/filter-ui/grid-filter-ui.d.ts +20 -0
  80. package/dist/src/plugins/filter-ui/grid-filter-ui.d.ts.map +1 -0
  81. package/dist/src/plugins/filter-ui/index.d.ts +1 -0
  82. package/dist/src/plugins/filter-ui/index.d.ts.map +1 -1
  83. package/dist/src/plugins/header/header-dom-operations.d.ts +6 -0
  84. package/dist/src/plugins/header/header-dom-operations.d.ts.map +1 -1
  85. package/dist/src/plugins/header/header-plugin.d.ts.map +1 -1
  86. package/dist/src/plugins/header/header-registry-setup.d.ts.map +1 -1
  87. package/dist/src/plugins/header/header-rendering.d.ts.map +1 -1
  88. package/dist/src/plugins/header/header-types.d.ts +8 -1
  89. package/dist/src/plugins/header/header-types.d.ts.map +1 -1
  90. package/dist/src/plugins/index.d.ts +4 -0
  91. package/dist/src/plugins/index.d.ts.map +1 -1
  92. package/dist/src/plugins/keyboard/index.d.ts +3 -0
  93. package/dist/src/plugins/keyboard/index.d.ts.map +1 -0
  94. package/dist/src/plugins/keyboard/keyboard-nav-utils.d.ts +13 -0
  95. package/dist/src/plugins/keyboard/keyboard-nav-utils.d.ts.map +1 -0
  96. package/dist/src/plugins/keyboard/keyboard-plugin.d.ts +17 -0
  97. package/dist/src/plugins/keyboard/keyboard-plugin.d.ts.map +1 -0
  98. package/dist/src/plugins/lifecycle/lifecycle-plugin.d.ts +1 -0
  99. package/dist/src/plugins/lifecycle/lifecycle-plugin.d.ts.map +1 -1
  100. package/dist/src/plugins/pagination/pagination-plugin.d.ts.map +1 -1
  101. package/dist/src/plugins/rendering/rendering-plugin.d.ts.map +1 -1
  102. package/dist/src/plugins/selection/selection-plugin.d.ts.map +1 -1
  103. package/dist/src/plugins/sort-plugin.d.ts.map +1 -1
  104. package/dist/src/reactive/index.d.ts +1 -1
  105. package/dist/src/reactive/index.d.ts.map +1 -1
  106. package/dist/src/reactive/store.d.ts +1 -0
  107. package/dist/src/reactive/store.d.ts.map +1 -1
  108. package/dist/src/reactive/types.d.ts +17 -1
  109. package/dist/src/reactive/types.d.ts.map +1 -1
  110. package/dist/src/rendering/cache/renderer-cache.interface.d.ts +6 -0
  111. package/dist/src/rendering/cache/renderer-cache.interface.d.ts.map +1 -1
  112. package/dist/src/rendering/cell-positioner/cell-positioner.d.ts +21 -0
  113. package/dist/src/rendering/cell-positioner/cell-positioner.d.ts.map +1 -1
  114. package/dist/src/rendering/headers/header-renderer.interface.d.ts +6 -0
  115. package/dist/src/rendering/headers/header-renderer.interface.d.ts.map +1 -1
  116. package/dist/src/rendering/headers/renderers/sortable-header-renderer.d.ts +4 -0
  117. package/dist/src/rendering/headers/renderers/sortable-header-renderer.d.ts.map +1 -1
  118. package/dist/src/rendering/renderers/dropdown/dropdown-dom.d.ts.map +1 -1
  119. package/dist/src/rendering/renderers/dropdown/dropdown-renderer.d.ts +2 -0
  120. package/dist/src/rendering/renderers/dropdown/dropdown-renderer.d.ts.map +1 -1
  121. package/dist/src/rendering/renderers/dropdown/dropdown-state.d.ts.map +1 -1
  122. package/dist/src/rendering/renderers/renderer.interface.d.ts +7 -0
  123. package/dist/src/rendering/renderers/renderer.interface.d.ts.map +1 -1
  124. package/dist/src/styles/a11y.css +20 -0
  125. package/dist/src/styles/calendar.css +291 -0
  126. package/dist/src/styles/cell-overflow.css +129 -0
  127. package/dist/src/styles/cell-renderers.css +90 -0
  128. package/dist/src/styles/date-picker.css +125 -0
  129. package/dist/src/styles/dropdown.css +156 -0
  130. package/dist/src/styles/filter.css +166 -0
  131. package/dist/src/styles/grid.css +91 -287
  132. package/dist/src/styles/header.css +60 -0
  133. package/dist/src/styles/overlays.css +44 -0
  134. package/dist/src/styles/tokens.css +86 -0
  135. package/dist/src/styles.css +24 -1112
  136. package/dist/src/types/data.d.ts +1 -0
  137. package/dist/src/types/data.d.ts.map +1 -1
  138. package/dist/src/types/filter.d.ts +12 -13
  139. package/dist/src/types/filter.d.ts.map +1 -1
  140. package/dist/src/types/grid.d.ts +37 -6
  141. package/dist/src/types/grid.d.ts.map +1 -1
  142. package/dist/src/types/query.d.ts +3 -43
  143. package/dist/src/types/query.d.ts.map +1 -1
  144. package/dist/src/utils/stable-hash.d.ts +2 -0
  145. package/dist/src/utils/stable-hash.d.ts.map +1 -0
  146. package/package.json +3 -3
  147. package/dist/src/grid/filter-ui.d.ts +0 -70
  148. package/dist/src/grid/filter-ui.d.ts.map +0 -1
@@ -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
+ }