@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.
- package/LICENSE +21 -0
- package/README.md +243 -0
- package/component-variables.manifest.json +192 -0
- package/dist/grid.d.ts +319 -0
- package/dist/index.d.ts +4 -0
- package/dist/modules/contextmenu/index.d.ts +10 -0
- package/dist/modules/datepicker/datepicker.d.ts +79 -0
- package/dist/modules/datepicker/formatting.d.ts +44 -0
- package/dist/modules/datepicker/index.d.ts +4 -0
- package/dist/modules/datepicker/interaction.d.ts +39 -0
- package/dist/modules/datepicker/navigation.d.ts +37 -0
- package/dist/modules/datepicker/rendering.d.ts +56 -0
- package/dist/modules/datepicker/types.d.ts +62 -0
- package/dist/modules/dropdown/index.d.ts +4 -0
- package/dist/modules/dropdown/input-handlers.d.ts +14 -0
- package/dist/modules/dropdown/interaction.d.ts +34 -0
- package/dist/modules/dropdown/options.d.ts +33 -0
- package/dist/modules/dropdown/rendering.d.ts +11 -0
- package/dist/modules/editing/index.d.ts +2 -0
- package/dist/modules/editing/lifecycle.d.ts +25 -0
- package/dist/modules/editing/renderers.d.ts +39 -0
- package/dist/modules/navigation/focus.d.ts +46 -0
- package/dist/modules/navigation/index.d.ts +1 -0
- package/dist/modules/rendering/display.d.ts +7 -0
- package/dist/modules/rendering/index.d.ts +3 -0
- package/dist/modules/rendering/table.d.ts +39 -0
- package/dist/modules/toolbar/index.d.ts +55 -0
- package/dist/modules/tooltip/index.d.ts +1 -0
- package/dist/modules/tooltip/tooltip.d.ts +13 -0
- package/dist/modules/types.d.ts +32 -0
- package/dist/types.d.ts +311 -0
- package/dist/web-component.d.ts +277 -0
- package/dist/web-grid.js +5370 -0
- package/dist/web-grid.umd.js +618 -0
- package/package.json +78 -0
- package/src/css/_cells.css +77 -0
- package/src/css/_dark-mode.css +51 -0
- package/src/css/_dialogs.css +121 -0
- package/src/css/_dropdown.css +193 -0
- package/src/css/_editors.css +184 -0
- package/src/css/_header.css +105 -0
- package/src/css/_modifiers.css +36 -0
- package/src/css/_navigation.css +25 -0
- package/src/css/_pagination.css +156 -0
- package/src/css/_table.css +90 -0
- package/src/css/_toolbar.css +139 -0
- package/src/css/_variables.css +265 -0
- package/src/css/_virtual-scroll.css +24 -0
- 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
|
+
}
|
package/src/css/main.css
ADDED
|
@@ -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';
|