@keenmate/web-grid 1.0.0-rc02

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 (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +243 -0
  3. package/component-variables.manifest.json +192 -0
  4. package/dist/grid.d.ts +319 -0
  5. package/dist/index.d.ts +4 -0
  6. package/dist/modules/contextmenu/index.d.ts +10 -0
  7. package/dist/modules/datepicker/datepicker.d.ts +79 -0
  8. package/dist/modules/datepicker/formatting.d.ts +44 -0
  9. package/dist/modules/datepicker/index.d.ts +4 -0
  10. package/dist/modules/datepicker/interaction.d.ts +39 -0
  11. package/dist/modules/datepicker/navigation.d.ts +37 -0
  12. package/dist/modules/datepicker/rendering.d.ts +56 -0
  13. package/dist/modules/datepicker/types.d.ts +62 -0
  14. package/dist/modules/dropdown/index.d.ts +4 -0
  15. package/dist/modules/dropdown/input-handlers.d.ts +14 -0
  16. package/dist/modules/dropdown/interaction.d.ts +34 -0
  17. package/dist/modules/dropdown/options.d.ts +33 -0
  18. package/dist/modules/dropdown/rendering.d.ts +11 -0
  19. package/dist/modules/editing/index.d.ts +2 -0
  20. package/dist/modules/editing/lifecycle.d.ts +25 -0
  21. package/dist/modules/editing/renderers.d.ts +39 -0
  22. package/dist/modules/navigation/focus.d.ts +46 -0
  23. package/dist/modules/navigation/index.d.ts +1 -0
  24. package/dist/modules/rendering/display.d.ts +7 -0
  25. package/dist/modules/rendering/index.d.ts +3 -0
  26. package/dist/modules/rendering/table.d.ts +39 -0
  27. package/dist/modules/toolbar/index.d.ts +55 -0
  28. package/dist/modules/tooltip/index.d.ts +1 -0
  29. package/dist/modules/tooltip/tooltip.d.ts +13 -0
  30. package/dist/modules/types.d.ts +32 -0
  31. package/dist/types.d.ts +311 -0
  32. package/dist/web-component.d.ts +277 -0
  33. package/dist/web-grid.js +5370 -0
  34. package/dist/web-grid.umd.js +618 -0
  35. package/package.json +78 -0
  36. package/src/css/_cells.css +77 -0
  37. package/src/css/_dark-mode.css +51 -0
  38. package/src/css/_dialogs.css +121 -0
  39. package/src/css/_dropdown.css +193 -0
  40. package/src/css/_editors.css +184 -0
  41. package/src/css/_header.css +105 -0
  42. package/src/css/_modifiers.css +36 -0
  43. package/src/css/_navigation.css +25 -0
  44. package/src/css/_pagination.css +156 -0
  45. package/src/css/_table.css +90 -0
  46. package/src/css/_toolbar.css +139 -0
  47. package/src/css/_variables.css +265 -0
  48. package/src/css/_virtual-scroll.css +24 -0
  49. package/src/css/main.css +35 -0
@@ -0,0 +1,265 @@
1
+ /* ==============================================================================
2
+ CSS CUSTOM PROPERTIES (:host level)
3
+ ==============================================================================
4
+ This file defines all CSS custom properties at the :host level, making them:
5
+ - Inspectable in browser DevTools
6
+ - Overridable from outside Shadow DOM
7
+ - Self-documenting in compiled CSS
8
+
9
+ Usage from outside Shadow DOM:
10
+ web-grid {
11
+ --wg-accent-color: #0078d4;
12
+ --wg-header-bg: #f5f5f5;
13
+ }
14
+ ============================================================================== */
15
+
16
+ :host {
17
+ /* ==========================================================================
18
+ BASE SIZING UNIT
19
+ ==========================================================================
20
+ All sizing values are based on this unit for consistent scaling.
21
+ Default: 10px produces standard pixel values
22
+ Pure Admin: Set to 1rem (inherits from html { font-size: 10px })
23
+ Custom: Set to any value to scale all sizes proportionally */
24
+ --wg-rem: 10px;
25
+
26
+ /* ==========================================================================
27
+ FONT FAMILY (set at :host so all shadow DOM content inherits)
28
+ ========================================================================== */
29
+ font-family: var(--wg-font-family, var(--base-font-family, system-ui, -apple-system, sans-serif));
30
+
31
+ /* ==========================================================================
32
+ HOST ELEMENT SIZING
33
+ ========================================================================== */
34
+ display: block;
35
+
36
+ /* ==========================================================================
37
+ COLORS & THEME
38
+ ==========================================================================
39
+ Color variables follow this priority chain:
40
+ 1. External override: --wg-accent-color: #custom
41
+ 2. Base theme value: var(--base-accent-color)
42
+ 3. Hardcoded default fallback */
43
+
44
+ /* Accent Colors */
45
+ --wg-accent-color: var(--base-accent-color, #0078d4);
46
+ --wg-accent-color-hover: var(--base-accent-color-hover, #106ebe);
47
+ --wg-accent-color-active: var(--base-accent-color-active, #005a9e);
48
+ --wg-accent-color-light: var(--base-accent-color-light, #e6f2ff);
49
+
50
+ /* Text Color Levels (FluentUI-style hierarchy) */
51
+ --wg-text-color-1: var(--base-text-color-1, #242424);
52
+ --wg-text-color-2: var(--base-text-color-2, #424242);
53
+ --wg-text-color-3: var(--base-text-color-3, #707070);
54
+ --wg-text-on-accent: var(--base-text-on-accent, #ffffff);
55
+
56
+ /* Background/Surface Colors */
57
+ --wg-surface-1: var(--base-surface-1, #ffffff);
58
+ --wg-surface-2: var(--base-surface-2, #f5f5f5);
59
+ --wg-surface-3: var(--base-surface-3, #ebebeb);
60
+ --wg-surface-floating: var(--base-dropdown-bg, var(--base-surface-1, #ffffff));
61
+
62
+ /* Border Colors */
63
+ --wg-border-color: var(--base-border-color, #e0e0e0);
64
+ --wg-border-color-hover: var(--base-border-color, #d1d1d1);
65
+
66
+ /* Input Colors */
67
+ --wg-input-bg: var(--base-input-bg, #ffffff);
68
+ --wg-input-color: var(--base-input-color, var(--wg-text-color-1));
69
+ --wg-input-border: var(--base-input-border, 1px solid #d1d1d1);
70
+ --wg-input-border-hover: var(--base-input-border-hover, 1px solid #0078d4);
71
+ --wg-input-border-focus: var(--base-input-border-focus, 1px solid #0078d4);
72
+ --wg-input-placeholder-color: var(--base-input-placeholder-color, #707070);
73
+
74
+ /* Danger/Error Colors */
75
+ --wg-danger-color: var(--base-danger-color, #d13438);
76
+ --wg-danger-bg-light: var(--base-danger-bg-light, #fde7e9);
77
+
78
+ /* Hover/Active States */
79
+ --wg-hover-bg: var(--base-surface-3, #f0f0f0);
80
+ --wg-active-bg: var(--base-surface-3, #e0e0e0);
81
+
82
+ /* ==========================================================================
83
+ TYPOGRAPHY
84
+ ========================================================================== */
85
+ --wg-font-size-base: calc(var(--base-font-size-base, 1.4) * var(--wg-rem));
86
+ --wg-font-size-sm: calc(var(--base-font-size-sm, 1.2) * var(--wg-rem));
87
+ --wg-font-size-xs: calc(var(--base-font-size-xs, 1.1) * var(--wg-rem));
88
+ --wg-font-size-lg: calc(var(--base-font-size-lg, 1.6) * var(--wg-rem));
89
+
90
+ --wg-line-height-base: calc(var(--base-line-height-normal, 2) * var(--wg-rem));
91
+ --wg-font-weight-normal: var(--base-font-weight-normal, 400);
92
+ --wg-font-weight-semibold: var(--base-font-weight-semibold, 600);
93
+
94
+ /* ==========================================================================
95
+ BORDER RADIUS
96
+ ========================================================================== */
97
+ --wg-border-radius-sm: calc(var(--base-border-radius-sm, 0.4) * var(--wg-rem));
98
+ --wg-border-radius-md: calc(var(--base-border-radius-md, 0.6) * var(--wg-rem));
99
+ --wg-border-radius-lg: calc(var(--base-border-radius-lg, 0.8) * var(--wg-rem));
100
+
101
+ /* ==========================================================================
102
+ SPACING (10px-based for clean pixel values)
103
+ ========================================================================== */
104
+ --wg-spacing-xs: calc(0.4 * var(--wg-rem)); /* 4px */
105
+ --wg-spacing-sm: calc(0.8 * var(--wg-rem)); /* 8px */
106
+ --wg-spacing-md: calc(1.2 * var(--wg-rem)); /* 12px */
107
+ --wg-spacing-lg: calc(1.6 * var(--wg-rem)); /* 16px */
108
+ --wg-spacing-xl: calc(2.4 * var(--wg-rem)); /* 24px */
109
+
110
+ /* ==========================================================================
111
+ TABLE COMPONENT
112
+ ========================================================================== */
113
+ --wg-table-bg: var(--wg-surface-1);
114
+ --wg-table-border: 1px solid var(--wg-border-color);
115
+
116
+ /* ==========================================================================
117
+ HEADER COMPONENT
118
+ ========================================================================== */
119
+ --wg-header-bg: var(--wg-surface-2);
120
+ --wg-header-bg-hover: var(--wg-surface-3);
121
+ --wg-header-bg-sorted: var(--wg-surface-3);
122
+ --wg-header-color: var(--wg-text-color-1);
123
+ --wg-header-border: 2px solid var(--wg-border-color);
124
+ --wg-header-padding: var(--wg-spacing-sm) var(--wg-spacing-md);
125
+ --wg-header-font-weight: var(--wg-font-weight-semibold);
126
+
127
+ /* ==========================================================================
128
+ CELL COMPONENT
129
+ ========================================================================== */
130
+ --wg-cell-padding: var(--wg-spacing-sm) var(--wg-spacing-md);
131
+ --wg-cell-color: var(--wg-text-color-1);
132
+ --wg-cell-border: 1px solid var(--wg-border-color);
133
+ --wg-cell-bg-hover: var(--wg-hover-bg);
134
+ --wg-cell-bg-editing: var(--wg-surface-1);
135
+ --wg-cell-readonly-bg: var(--wg-surface-2);
136
+
137
+ /* ==========================================================================
138
+ ROW COMPONENT
139
+ ========================================================================== */
140
+ --wg-row-border: 1px solid var(--wg-border-color);
141
+ --wg-row-bg-even: var(--wg-surface-2);
142
+ --wg-row-bg-hover: var(--wg-surface-3);
143
+
144
+ /* ==========================================================================
145
+ FILTER ROW
146
+ ========================================================================== */
147
+ --wg-filter-bg: var(--wg-surface-1);
148
+ --wg-filter-border: 1px solid var(--wg-border-color);
149
+ --wg-filter-padding: var(--wg-spacing-xs) var(--wg-spacing-sm);
150
+
151
+ /* Filter Input */
152
+ --wg-filter-input-padding: calc(0.4 * var(--wg-rem)) calc(0.8 * var(--wg-rem));
153
+ --wg-filter-input-bg: var(--wg-input-bg);
154
+ --wg-filter-input-border: var(--wg-input-border);
155
+ --wg-filter-input-border-focus: var(--wg-input-border-focus);
156
+ --wg-filter-input-border-radius: var(--wg-border-radius-sm);
157
+ --wg-filter-input-font-size: var(--wg-font-size-sm);
158
+
159
+ /* ==========================================================================
160
+ SORT INDICATOR
161
+ ========================================================================== */
162
+ --wg-sort-indicator-size: calc(1.4 * var(--wg-rem));
163
+ --wg-sort-indicator-opacity: 0.9;
164
+ --wg-sort-placeholder-opacity: 0.3;
165
+ --wg-sort-priority-size: calc(1.1 * var(--wg-rem));
166
+
167
+ /* ==========================================================================
168
+ PAGINATION
169
+ ========================================================================== */
170
+ --wg-pagination-padding: var(--wg-spacing-md);
171
+ --wg-pagination-gap: calc(1.6 * var(--wg-rem));
172
+ --wg-pagination-bg: var(--wg-surface-1);
173
+ --wg-pagination-border: 1px solid var(--wg-border-color);
174
+
175
+ /* Pagination Button */
176
+ --wg-pagination-btn-padding: calc(0.6 * var(--wg-rem)) calc(1.6 * var(--wg-rem));
177
+ --wg-pagination-btn-bg: var(--wg-surface-1);
178
+ --wg-pagination-btn-bg-hover: var(--wg-surface-2);
179
+ --wg-pagination-btn-bg-active: var(--wg-surface-3);
180
+ --wg-pagination-btn-border: 1px solid var(--wg-border-color);
181
+ --wg-pagination-btn-border-hover: 1px solid var(--wg-border-color-hover);
182
+ --wg-pagination-btn-border-radius: var(--wg-border-radius-sm);
183
+ --wg-pagination-btn-disabled-opacity: 0.4;
184
+
185
+ /* ==========================================================================
186
+ EMPTY STATE
187
+ ========================================================================== */
188
+ --wg-empty-padding: var(--wg-spacing-xl);
189
+ --wg-empty-color: var(--wg-text-color-3);
190
+
191
+ /* ==========================================================================
192
+ VALIDATION / ERROR
193
+ ========================================================================== */
194
+ --wg-error-cell-bg: var(--wg-danger-bg-light);
195
+ --wg-error-cell-border: 1px solid var(--wg-danger-color);
196
+ --wg-error-message-color: var(--wg-danger-color);
197
+ --wg-error-message-font-size: var(--wg-font-size-xs);
198
+ --wg-error-indicator-color: var(--wg-danger-color);
199
+
200
+ /* ==========================================================================
201
+ EDITOR
202
+ ========================================================================== */
203
+ --wg-editor-bg: var(--wg-surface-1);
204
+ --wg-editor-outline: 2px solid var(--wg-accent-color);
205
+ --wg-editor-outline-offset: -2px;
206
+ --wg-editor-validating-opacity: 0.7;
207
+
208
+ /* Dropdown Toggle */
209
+ --wg-dropdown-toggle-right: var(--wg-spacing-md);
210
+ --wg-dropdown-toggle-size: calc(1.2 * var(--wg-rem));
211
+ --wg-dropdown-toggle-hitbox: calc(2.4 * var(--wg-rem));
212
+
213
+ /* ==========================================================================
214
+ ROW TOOLBAR
215
+ ========================================================================== */
216
+ --wg-toolbar-bg: var(--wg-surface-floating);
217
+ --wg-toolbar-border: 1px solid var(--wg-border-color);
218
+ --wg-toolbar-border-radius: var(--wg-border-radius-sm);
219
+ --wg-toolbar-shadow: var(--base-dropdown-box-shadow, 0 2px 8px rgba(0, 0, 0, 0.15));
220
+ --wg-toolbar-divider-color: var(--wg-border-color);
221
+
222
+ /* Toolbar Button */
223
+ --wg-toolbar-btn-min-width: calc(2.4 * var(--wg-rem));
224
+ --wg-toolbar-btn-padding: 0 calc(0.4 * var(--wg-rem));
225
+ --wg-toolbar-btn-border-radius: var(--wg-border-radius-sm);
226
+ --wg-toolbar-btn-bg-hover: var(--wg-hover-bg);
227
+ --wg-toolbar-btn-bg-active: var(--wg-active-bg);
228
+ --wg-toolbar-btn-color: var(--wg-text-color-1);
229
+
230
+ /* Toolbar Trigger Button */
231
+ --wg-toolbar-trigger-color: var(--wg-text-color-3);
232
+ --wg-toolbar-trigger-color-hover: var(--wg-text-color-1);
233
+ --wg-toolbar-trigger-bg-hover: var(--wg-hover-bg);
234
+
235
+ /* ==========================================================================
236
+ TOOLTIP
237
+ ========================================================================== */
238
+ --wg-tooltip-bg: var(--base-tooltip-bg, #333);
239
+
240
+ /* ==========================================================================
241
+ CONTEXT MENU
242
+ ========================================================================== */
243
+ --wg-context-menu-z-index: 1001;
244
+ --wg-context-menu-min-width: calc(16 * var(--wg-rem));
245
+
246
+ /* ==========================================================================
247
+ NAVIGATE MODE
248
+ ========================================================================== */
249
+ --wg-focus-outline: 2px solid var(--wg-accent-color);
250
+ --wg-focus-outline-offset: -2px;
251
+ --wg-focus-bg: var(--wg-hover-bg);
252
+
253
+ /* ==========================================================================
254
+ TRANSITIONS
255
+ ========================================================================== */
256
+ --wg-transition-fast: 0.1s ease;
257
+ --wg-transition-normal: 0.15s ease;
258
+
259
+ /* ==========================================================================
260
+ Z-INDEX LAYERS
261
+ ========================================================================== */
262
+ --wg-z-dropdown: 9999;
263
+ --wg-z-toolbar: 1000;
264
+ --wg-z-context-menu: 1001;
265
+ }
@@ -0,0 +1,24 @@
1
+ /* ==============================================================================
2
+ VIRTUAL SCROLL
3
+ ==============================================================================
4
+ Virtualization support for large datasets
5
+ */
6
+
7
+ .wg--virtual-scroll {
8
+ /* No special container styles needed, spacers handle sizing */
9
+ }
10
+
11
+ /* Spacer rows - invisible rows that maintain scroll height */
12
+ .wg__spacer-top,
13
+ .wg__spacer-bottom {
14
+ /* Height is set inline via style attribute */
15
+ }
16
+
17
+ .wg__spacer-top td,
18
+ .wg__spacer-bottom td {
19
+ padding: 0;
20
+ border: none;
21
+ background: transparent;
22
+ height: inherit; /* Inherit height from parent TR */
23
+ line-height: 0; /* Prevent any text/content from affecting height */
24
+ }
@@ -0,0 +1,35 @@
1
+ /* ==============================================================================
2
+ WEB GRID COMPONENT - MAIN ENTRY POINT
3
+ ==============================================================================
4
+ Framework-agnostic data grid web component
5
+
6
+ File structure:
7
+ - _variables.css : All CSS custom properties at :host level (for theming)
8
+ - _table.css : FOUC prevention, container, table, rows
9
+ - _header.css : Header, sort indicators, filter row
10
+ - _cells.css : Cells, editable states, editing, validation
11
+ - _editors.css : All editor types (text, number, date, combobox, etc)
12
+ - _dropdown.css : Dropdown menus, select triggers
13
+ - _navigation.css : Keyboard navigation, focus states
14
+ - _pagination.css : Pagination controls, summary, footer
15
+ - _toolbar.css : Row toolbar styles
16
+ - _modifiers.css : Striped rows, hover effects, empty state
17
+ - _dialogs.css : Tooltips, go-to dialog
18
+ - _virtual-scroll.css : Virtual scroll support
19
+ - _dark-mode.css : Dark mode overrides
20
+ */
21
+
22
+ /* Import all partials in dependency order */
23
+ @import '_variables.css';
24
+ @import '_table.css';
25
+ @import '_header.css';
26
+ @import '_cells.css';
27
+ @import '_editors.css';
28
+ @import '_dropdown.css';
29
+ @import '_navigation.css';
30
+ @import '_pagination.css';
31
+ @import '_toolbar.css';
32
+ @import '_modifiers.css';
33
+ @import '_dialogs.css';
34
+ @import '_virtual-scroll.css';
35
+ @import '_dark-mode.css';