@vueye-table/styled 3.0.0-alpha.1

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/dist/style.css ADDED
@@ -0,0 +1,537 @@
1
+ /*
2
+ * vueye-table styled theme.
3
+ *
4
+ * Every color, size, and radius is a custom property on .vt-surface, so a theme is a handful of
5
+ * overrides. Dark colors apply under prefers-color-scheme unless a surface is forced light, and
6
+ * always under data-vt-theme="dark". Any element with .vt-theme carries the tokens, so controls
7
+ * placed outside a table match it.
8
+ */
9
+
10
+ .vt-surface,
11
+ .vt-theme {
12
+ --vt-font: inherit;
13
+ --vt-font-size: 0.875rem;
14
+ --vt-bg: #ffffff;
15
+ --vt-fg: #1f2328;
16
+ --vt-muted: #656d76;
17
+ --vt-border: #d8dee4;
18
+ --vt-header-bg: #f6f8fa;
19
+ --vt-stripe: #f9fafb;
20
+ --vt-hover: #f0f3f6;
21
+ --vt-accent: #3b5bdb;
22
+ --vt-accent-fg: #ffffff;
23
+ --vt-selected: #edf2ff;
24
+ --vt-range: rgb(59 91 219 / 0.1);
25
+ --vt-focus: #3b5bdb;
26
+ --vt-danger: #cf222e;
27
+ --vt-radius: 8px;
28
+ --vt-control-radius: 6px;
29
+ --vt-cell-x: 0.75rem;
30
+ --vt-cell-y: 0.625rem;
31
+ --vt-shadow: 0 8px 24px rgb(31 35 40 / 0.12);
32
+
33
+ font-family: var(--vt-font);
34
+ font-size: var(--vt-font-size);
35
+ color: var(--vt-fg);
36
+ }
37
+
38
+ .vt-surface {
39
+ position: relative;
40
+ background: var(--vt-bg);
41
+ border: 1px solid var(--vt-border);
42
+ border-radius: var(--vt-radius);
43
+ }
44
+
45
+ /*
46
+ * The surface does not clip, so menus can open past its edge. The scroll area rounds its own
47
+ * corners wherever it touches the surface's border instead.
48
+ */
49
+ .vt-surface > .vt-scroll,
50
+ .vt-root > .vt-progress:first-child + .vt-scroll {
51
+ border-start-start-radius: calc(var(--vt-radius) - 1px);
52
+ border-start-end-radius: calc(var(--vt-radius) - 1px);
53
+ }
54
+
55
+ .vt-surface > .vt-scroll,
56
+ .vt-root > .vt-scroll:last-child {
57
+ border-end-start-radius: calc(var(--vt-radius) - 1px);
58
+ border-end-end-radius: calc(var(--vt-radius) - 1px);
59
+ }
60
+
61
+ :is(.vt-surface, .vt-theme)[data-density="compact"] {
62
+ --vt-cell-x: 0.5rem;
63
+ --vt-cell-y: 0.3rem;
64
+ }
65
+
66
+ :is(.vt-surface, .vt-theme)[data-density="spacious"] {
67
+ --vt-cell-x: 1rem;
68
+ --vt-cell-y: 0.9rem;
69
+ }
70
+
71
+ @media (prefers-color-scheme: dark) {
72
+ :is(.vt-surface, .vt-theme):not([data-vt-theme="light"]) {
73
+ --vt-bg: #0d1117;
74
+ --vt-fg: #e6edf3;
75
+ --vt-muted: #8d96a0;
76
+ --vt-border: #30363d;
77
+ --vt-header-bg: #161b22;
78
+ --vt-stripe: #11161d;
79
+ --vt-hover: #1c2129;
80
+ --vt-accent: #7b93ff;
81
+ --vt-accent-fg: #0d1117;
82
+ --vt-selected: #1b2440;
83
+ --vt-range: rgb(123 147 255 / 0.16);
84
+ --vt-focus: #7b93ff;
85
+ --vt-danger: #ff7b72;
86
+ --vt-shadow: 0 8px 24px rgb(0 0 0 / 0.5);
87
+ }
88
+ }
89
+
90
+ :is(.vt-surface, .vt-theme)[data-vt-theme="dark"] {
91
+ --vt-bg: #0d1117;
92
+ --vt-fg: #e6edf3;
93
+ --vt-muted: #8d96a0;
94
+ --vt-border: #30363d;
95
+ --vt-header-bg: #161b22;
96
+ --vt-stripe: #11161d;
97
+ --vt-hover: #1c2129;
98
+ --vt-accent: #7b93ff;
99
+ --vt-accent-fg: #0d1117;
100
+ --vt-selected: #1b2440;
101
+ --vt-range: rgb(123 147 255 / 0.16);
102
+ --vt-focus: #7b93ff;
103
+ --vt-danger: #ff7b72;
104
+ --vt-shadow: 0 8px 24px rgb(0 0 0 / 0.5);
105
+ }
106
+
107
+ .vt-scroll {
108
+ overflow: auto;
109
+ max-height: var(--vt-max-height, none);
110
+ }
111
+
112
+ .vt-table {
113
+ width: 100%;
114
+ border-collapse: separate;
115
+ border-spacing: 0;
116
+ font-variant-numeric: tabular-nums;
117
+ }
118
+
119
+ .vt-table caption {
120
+ padding: var(--vt-cell-y) var(--vt-cell-x);
121
+ text-align: start;
122
+ color: var(--vt-muted);
123
+ }
124
+
125
+ .vt-table th,
126
+ .vt-table td {
127
+ padding: var(--vt-cell-y) var(--vt-cell-x);
128
+ text-align: start;
129
+ vertical-align: middle;
130
+ border-bottom: 1px solid var(--vt-border);
131
+ }
132
+
133
+ .vt-table [data-align="center"] {
134
+ text-align: center;
135
+ }
136
+
137
+ .vt-table [data-align="end"] {
138
+ text-align: end;
139
+ }
140
+
141
+ .vt-table thead th {
142
+ background: var(--vt-header-bg);
143
+ color: var(--vt-muted);
144
+ font-weight: 600;
145
+ white-space: nowrap;
146
+ }
147
+
148
+ .vt-surface[data-sticky-header] thead th {
149
+ position: sticky;
150
+ top: 0;
151
+ z-index: 1;
152
+ }
153
+
154
+ .vt-surface[data-bordered] .vt-table th + th,
155
+ .vt-surface[data-bordered] .vt-table td + td {
156
+ border-inline-start: 1px solid var(--vt-border);
157
+ }
158
+
159
+ .vt-table tbody tr:last-child > * {
160
+ border-bottom: 0;
161
+ }
162
+
163
+ .vt-surface[data-striped] .vt-table tbody tr:nth-child(even) > * {
164
+ background: var(--vt-stripe);
165
+ }
166
+
167
+ .vt-surface[data-hover] .vt-table tbody tr:hover > * {
168
+ background: var(--vt-hover);
169
+ }
170
+
171
+ .vt-table tbody tr[data-selected] > * {
172
+ background: var(--vt-selected);
173
+ }
174
+
175
+ .vt-table input[type="checkbox"] {
176
+ accent-color: var(--vt-accent);
177
+ width: 1rem;
178
+ height: 1rem;
179
+ margin: 0;
180
+ cursor: pointer;
181
+ }
182
+
183
+ .vt-selection-cell {
184
+ width: 1%;
185
+ }
186
+
187
+ .vt-sort-button {
188
+ display: inline-flex;
189
+ align-items: center;
190
+ gap: 0.25rem;
191
+ padding: 0;
192
+ font: inherit;
193
+ color: inherit;
194
+ background: none;
195
+ border: 0;
196
+ cursor: pointer;
197
+ }
198
+
199
+ .vt-sort-button:hover,
200
+ .vt-table th[data-sort] {
201
+ color: var(--vt-fg);
202
+ }
203
+
204
+ .vt-sort-indicator {
205
+ display: inline-flex;
206
+ align-items: center;
207
+ opacity: 0.35;
208
+ }
209
+
210
+ .vt-sort-indicator[data-active] {
211
+ opacity: 1;
212
+ color: var(--vt-accent);
213
+ }
214
+
215
+ .vt-sort-priority {
216
+ font-size: 0.7em;
217
+ font-weight: 700;
218
+ }
219
+
220
+ .vt-empty {
221
+ display: flex;
222
+ flex-direction: column;
223
+ align-items: center;
224
+ gap: 0.5rem;
225
+ padding: 2.5rem 1rem;
226
+ color: var(--vt-muted);
227
+ text-align: center;
228
+ }
229
+
230
+ .vt-empty-icon {
231
+ width: 1.75rem;
232
+ height: 1.75rem;
233
+ opacity: 0.6;
234
+ }
235
+
236
+ .vt-progress {
237
+ position: absolute;
238
+ inset: 0 0 auto;
239
+ border-radius: var(--vt-radius) var(--vt-radius) 0 0;
240
+ height: 2px;
241
+ overflow: hidden;
242
+ z-index: 2;
243
+ pointer-events: none;
244
+ }
245
+
246
+ .vt-surface[data-loading] .vt-progress::after {
247
+ content: "";
248
+ position: absolute;
249
+ inset: 0;
250
+ width: 40%;
251
+ background: var(--vt-accent);
252
+ animation: vt-progress 1.1s ease-in-out infinite;
253
+ }
254
+
255
+ .vt-surface[data-loading] .vt-body {
256
+ opacity: 0.55;
257
+ transition: opacity 0.15s;
258
+ }
259
+
260
+ @keyframes vt-progress {
261
+ from {
262
+ transform: translateX(-100%);
263
+ }
264
+ to {
265
+ transform: translateX(250%);
266
+ }
267
+ }
268
+
269
+ @media (prefers-reduced-motion: reduce) {
270
+ .vt-surface[data-loading] .vt-progress::after {
271
+ animation: none;
272
+ width: 100%;
273
+ opacity: 0.5;
274
+ }
275
+ }
276
+
277
+ /* Controls */
278
+
279
+ .vt-toolbar {
280
+ display: flex;
281
+ flex-wrap: wrap;
282
+ align-items: center;
283
+ gap: 0.5rem;
284
+ padding: 0.625rem var(--vt-cell-x);
285
+ }
286
+
287
+ .vt-surface .vt-toolbar {
288
+ border-bottom: 1px solid var(--vt-border);
289
+ }
290
+
291
+ .vt-toolbar.vt-footer {
292
+ justify-content: space-between;
293
+ }
294
+
295
+ .vt-surface .vt-toolbar.vt-footer {
296
+ border-top: 1px solid var(--vt-border);
297
+ border-bottom: 0;
298
+ }
299
+
300
+ .vt-toolbar-spacer {
301
+ flex: 1;
302
+ }
303
+
304
+ .vt-search {
305
+ display: inline-flex;
306
+ align-items: center;
307
+ gap: 0.375rem;
308
+ min-width: 12rem;
309
+ padding: 0.3rem 0.6rem;
310
+ color: var(--vt-muted);
311
+ border: 1px solid var(--vt-border);
312
+ border-radius: var(--vt-control-radius);
313
+ background: var(--vt-bg);
314
+ }
315
+
316
+ .vt-search:focus-within {
317
+ border-color: var(--vt-focus);
318
+ box-shadow: 0 0 0 3px var(--vt-range);
319
+ }
320
+
321
+ .vt-search input {
322
+ flex: 1;
323
+ min-width: 0;
324
+ font: inherit;
325
+ color: var(--vt-fg);
326
+ background: none;
327
+ border: 0;
328
+ outline: none;
329
+ }
330
+
331
+ .vt-button,
332
+ .vt-pagination button,
333
+ .vt-page-size select {
334
+ display: inline-flex;
335
+ align-items: center;
336
+ gap: 0.375rem;
337
+ min-height: 2rem;
338
+ padding: 0.25rem 0.625rem;
339
+ font: inherit;
340
+ color: var(--vt-fg);
341
+ background: var(--vt-bg);
342
+ border: 1px solid var(--vt-border);
343
+ border-radius: var(--vt-control-radius);
344
+ cursor: pointer;
345
+ }
346
+
347
+ .vt-button:hover,
348
+ .vt-pagination button:hover:not(:disabled) {
349
+ background: var(--vt-hover);
350
+ }
351
+
352
+ .vt-button:focus-visible,
353
+ .vt-pagination button:focus-visible,
354
+ .vt-page-size select:focus-visible,
355
+ .vt-sort-button:focus-visible,
356
+ .vt-table input[type="checkbox"]:focus-visible {
357
+ outline: 2px solid var(--vt-focus);
358
+ outline-offset: 2px;
359
+ }
360
+
361
+ .vt-pagination {
362
+ display: flex;
363
+ align-items: center;
364
+ gap: 0.25rem;
365
+ }
366
+
367
+ .vt-pagination button {
368
+ min-width: 2rem;
369
+ justify-content: center;
370
+ padding-inline: 0.5rem;
371
+ }
372
+
373
+ .vt-pagination button[data-current] {
374
+ color: var(--vt-accent-fg);
375
+ background: var(--vt-accent);
376
+ border-color: var(--vt-accent);
377
+ }
378
+
379
+ .vt-pagination button:disabled {
380
+ opacity: 0.45;
381
+ cursor: default;
382
+ }
383
+
384
+ .vt-pagination [data-gap] {
385
+ padding-inline: 0.25rem;
386
+ color: var(--vt-muted);
387
+ }
388
+
389
+ .vt-page-size {
390
+ display: inline-flex;
391
+ align-items: center;
392
+ gap: 0.5rem;
393
+ color: var(--vt-muted);
394
+ }
395
+
396
+ .vt-status {
397
+ margin: 0;
398
+ color: var(--vt-muted);
399
+ }
400
+
401
+ .vt-menu {
402
+ position: relative;
403
+ }
404
+
405
+ .vt-menu > summary {
406
+ list-style: none;
407
+ }
408
+
409
+ .vt-menu > summary::-webkit-details-marker {
410
+ display: none;
411
+ }
412
+
413
+ .vt-menu-panel {
414
+ position: absolute;
415
+ inset-inline-end: 0;
416
+ top: calc(100% + 0.25rem);
417
+ z-index: 3;
418
+ display: grid;
419
+ gap: 0.25rem;
420
+ min-width: 11rem;
421
+ padding: 0.5rem;
422
+ background: var(--vt-bg);
423
+ border: 1px solid var(--vt-border);
424
+ border-radius: var(--vt-control-radius);
425
+ box-shadow: var(--vt-shadow);
426
+ }
427
+
428
+ .vt-menu-panel label {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: 0.5rem;
432
+ padding: 0.25rem 0.375rem;
433
+ border-radius: 4px;
434
+ cursor: pointer;
435
+ }
436
+
437
+ .vt-menu-panel label:hover {
438
+ background: var(--vt-hover);
439
+ }
440
+
441
+ .vt-menu-panel input {
442
+ accent-color: var(--vt-accent);
443
+ }
444
+
445
+ .vt-icon {
446
+ flex: none;
447
+ }
448
+
449
+ /* Spreadsheet grid */
450
+
451
+ .vt-grid {
452
+ outline: none;
453
+ user-select: none;
454
+ }
455
+
456
+ .vt-grid td,
457
+ .vt-grid th {
458
+ border-inline-end: 1px solid var(--vt-border);
459
+ }
460
+
461
+ /* The surface draws the outer edge; a last column line would double it. */
462
+ .vt-grid tr > :last-child {
463
+ border-inline-end: 0;
464
+ }
465
+
466
+ .vt-grid td {
467
+ position: relative;
468
+ cursor: cell;
469
+ white-space: nowrap;
470
+ }
471
+
472
+ .vt-grid td[data-selected] {
473
+ background: var(--vt-range);
474
+ }
475
+
476
+ .vt-grid td[data-focused] {
477
+ box-shadow: inset 0 0 0 2px var(--vt-focus);
478
+ }
479
+
480
+ .vt-grid:not(:focus-within) td[data-focused] {
481
+ box-shadow: inset 0 0 0 2px var(--vt-border);
482
+ }
483
+
484
+ .vt-grid td[data-readonly] {
485
+ color: var(--vt-muted);
486
+ }
487
+
488
+ .vt-grid td[data-editing] {
489
+ padding: 0;
490
+ box-shadow: inset 0 0 0 2px var(--vt-focus);
491
+ }
492
+
493
+ .vt-grid td [data-editor] {
494
+ box-sizing: border-box;
495
+ width: 100%;
496
+ height: 100%;
497
+ padding: var(--vt-cell-y) var(--vt-cell-x);
498
+ font: inherit;
499
+ color: inherit;
500
+ text-align: inherit;
501
+ background: var(--vt-bg);
502
+ border: 0;
503
+ outline: none;
504
+ }
505
+
506
+ .vt-grid .vt-row-number {
507
+ width: 1%;
508
+ padding-inline: 0.5rem;
509
+ color: var(--vt-muted);
510
+ font-weight: 400;
511
+ text-align: center;
512
+ background: var(--vt-header-bg);
513
+ }
514
+
515
+ .vt-column-letter {
516
+ display: block;
517
+ font-size: 0.7em;
518
+ font-weight: 400;
519
+ opacity: 0.7;
520
+ }
521
+
522
+ .vt-footer-controls {
523
+ display: flex;
524
+ flex-wrap: wrap;
525
+ align-items: center;
526
+ gap: 0.75rem;
527
+ }
528
+
529
+ .vueye-grid {
530
+ display: grid;
531
+ gap: 0.5rem;
532
+ }
533
+
534
+ .vueye-grid > .vt-toolbar {
535
+ padding-inline: 0;
536
+ border: 0;
537
+ }
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@vueye-table/styled",
3
+ "version": "3.0.0-alpha.1",
4
+ "description": "Styled, themeable Vue components for vueye-table, built on the headless layer.",
5
+ "keywords": [
6
+ "data-table",
7
+ "datagrid",
8
+ "spreadsheet",
9
+ "styled",
10
+ "vue"
11
+ ],
12
+ "homepage": "https://github.com/boussadjra/vueye-table#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/boussadjra/vueye-table/issues"
15
+ },
16
+ "license": "MIT",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/boussadjra/vueye-table.git",
20
+ "directory": "packages/styled"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md",
25
+ "LICENSE"
26
+ ],
27
+ "type": "module",
28
+ "sideEffects": [
29
+ "**/*.css"
30
+ ],
31
+ "types": "./dist/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.js"
36
+ },
37
+ "./style.css": "./dist/style.css"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public",
41
+ "provenance": true
42
+ },
43
+ "dependencies": {
44
+ "@vueye-table/headless": "3.0.0-alpha.1",
45
+ "@vueye-table/vue": "3.0.0-alpha.1",
46
+ "@vueye-table/core": "3.0.0-alpha.1"
47
+ },
48
+ "devDependencies": {
49
+ "vue": "3.5.43",
50
+ "@vueye-table/typescript-config": "0.0.0"
51
+ },
52
+ "peerDependencies": {
53
+ "vue": ">=3.5.0 <4"
54
+ },
55
+ "engines": {
56
+ "node": ">=22.12.0"
57
+ },
58
+ "scripts": {
59
+ "build": "tsdown",
60
+ "dev": "tsdown --watch",
61
+ "typecheck": "tsc -p tsconfig.json",
62
+ "package:check": "publint --strict && attw --pack . --profile esm-only --exclude-entrypoints ./style.css",
63
+ "clean": "node ../../scripts/clean-package.mjs"
64
+ }
65
+ }