@kanunilabs/datagrid 1.9.2 → 1.9.3
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/datagrid.umd.js +8 -8
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +46 -4
- package/dist/index.d.ts +46 -4
- package/dist/index.js +2 -2
- package/dist/styles.css +143 -0
- package/package.json +4 -4
package/dist/styles.css
CHANGED
|
@@ -679,6 +679,48 @@
|
|
|
679
679
|
font-size: 11px;
|
|
680
680
|
}
|
|
681
681
|
|
|
682
|
+
/* The search box's own refusal (`toolbar.search.validate`), right after it. */
|
|
683
|
+
.kanuni-datagrid-toolbar-search-error {
|
|
684
|
+
color: var(--dg-danger-text);
|
|
685
|
+
font-size: 11px;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
.kanuni-datagrid-toolbar-search[aria-invalid='true'] {
|
|
689
|
+
border-color: var(--dg-danger);
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
/* An app's own button (GridToolbarButton / toolbarButton()), drawn like the
|
|
693
|
+
grid's commands wherever it sits: the toolbar's rule above reaches only its
|
|
694
|
+
DIRECT children, and the status bar has none. */
|
|
695
|
+
.kanuni-datagrid-app-button {
|
|
696
|
+
display: inline-flex;
|
|
697
|
+
align-items: center;
|
|
698
|
+
justify-content: center;
|
|
699
|
+
gap: 5px;
|
|
700
|
+
padding: 3px 10px;
|
|
701
|
+
border: 1px solid var(--dg-border-strong);
|
|
702
|
+
border-radius: var(--dg-radius-control);
|
|
703
|
+
background: var(--dg-surface);
|
|
704
|
+
color: inherit;
|
|
705
|
+
font: inherit;
|
|
706
|
+
font-size: var(--dg-control-font-size);
|
|
707
|
+
cursor: pointer;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
.kanuni-datagrid-app-button.kanuni-datagrid-toolbar-icon-button {
|
|
711
|
+
padding: 0;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
.kanuni-datagrid-app-button:hover:not([aria-disabled='true']) {
|
|
715
|
+
background: var(--dg-surface-hover);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
/* Unavailable but still focusable, so its reason can be read. */
|
|
719
|
+
.kanuni-datagrid-app-button[aria-disabled='true'] {
|
|
720
|
+
opacity: 0.6;
|
|
721
|
+
cursor: not-allowed;
|
|
722
|
+
}
|
|
723
|
+
|
|
682
724
|
/*
|
|
683
725
|
* The same message, but floating where a context menu just was — the cell
|
|
684
726
|
* menu's Export entries have nowhere else to report a missing optional peer.
|
|
@@ -1886,6 +1928,17 @@
|
|
|
1886
1928
|
flex: none;
|
|
1887
1929
|
}
|
|
1888
1930
|
|
|
1931
|
+
/* A row of a server's list whose piece has not arrived: the slot is held (the
|
|
1932
|
+
scroll bar describes the whole list), the value is not known yet. */
|
|
1933
|
+
.kanuni-datagrid-filter-item--pending {
|
|
1934
|
+
color: var(--dg-text-muted);
|
|
1935
|
+
cursor: default;
|
|
1936
|
+
}
|
|
1937
|
+
|
|
1938
|
+
.kanuni-datagrid-filter-item--pending:hover {
|
|
1939
|
+
background: transparent;
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1889
1942
|
.kanuni-datagrid-filter-item:hover,
|
|
1890
1943
|
.kanuni-datagrid-filter-item--active {
|
|
1891
1944
|
background: var(--dg-surface-hover);
|
|
@@ -2846,6 +2899,19 @@
|
|
|
2846
2899
|
margin: 0 calc(var(--dg-cell-padding-x) * -1);
|
|
2847
2900
|
}
|
|
2848
2901
|
|
|
2902
|
+
/* ...but the TEXT stays where the cell drew it. Widened to the cell's edges
|
|
2903
|
+
with only 4px of padding, the value jumped left by the cell padding as the
|
|
2904
|
+
editor opened; in row mode, with every cell open, no value lined up with the
|
|
2905
|
+
column above it (2026-10-19, content session). The date editor's own input
|
|
2906
|
+
keeps its 4px, so its wrapper makes up the rest. */
|
|
2907
|
+
.kanuni-datagrid-root .kanuni-datagrid-cell > .kanuni-datagrid-editor:not([type='checkbox']) {
|
|
2908
|
+
padding-inline: var(--dg-cell-padding-x);
|
|
2909
|
+
}
|
|
2910
|
+
|
|
2911
|
+
.kanuni-datagrid-root .kanuni-datagrid-cell > .kanuni-datagrid-date-editor {
|
|
2912
|
+
padding-inline: max(0px, calc(var(--dg-cell-padding-x) - 4px)) 0;
|
|
2913
|
+
}
|
|
2914
|
+
|
|
2849
2915
|
/* In a WRAPPED cell the editor takes the LINE BOX, not the row height.
|
|
2850
2916
|
A wrapping cell is as tall as its own text: one line of it is
|
|
2851
2917
|
`padding-block x2 + --dg-wrap-line-height`, which is shorter than a standard
|
|
@@ -2883,6 +2949,38 @@
|
|
|
2883
2949
|
background: var(--dg-surface);
|
|
2884
2950
|
}
|
|
2885
2951
|
|
|
2952
|
+
/* Row mode opens every cell of the row at once and marks none of them
|
|
2953
|
+
`--editing`, so the focused one kept its ring around the underlined editor —
|
|
2954
|
+
the double rectangle above, on one cell of the row (2026-10-19, content
|
|
2955
|
+
session). Any cell that holds an editor drops the ring. */
|
|
2956
|
+
.kanuni-datagrid-root .kanuni-datagrid-cell--focused:has(> .kanuni-datagrid-editor),
|
|
2957
|
+
.kanuni-datagrid-root .kanuni-datagrid-cell--focused:has(> .kanuni-datagrid-date-editor) {
|
|
2958
|
+
outline: none;
|
|
2959
|
+
}
|
|
2960
|
+
|
|
2961
|
+
/* A number is typed where it is read: right-aligned, as the cell shows it.
|
|
2962
|
+
Left-aligned editors made the value jump across the column the moment the
|
|
2963
|
+
cell opened, and in row mode two number editors side by side read as one
|
|
2964
|
+
field. */
|
|
2965
|
+
.kanuni-datagrid-root .kanuni-datagrid-cell--number > .kanuni-datagrid-editor {
|
|
2966
|
+
text-align: right;
|
|
2967
|
+
}
|
|
2968
|
+
|
|
2969
|
+
/* Chrome keeps ~15px at the end of a number input for its spin buttons, shown
|
|
2970
|
+
or not, so a right-aligned value still stopped short of the column's
|
|
2971
|
+
numbers. In a row-high cell the arrows are too small to use anyway; the
|
|
2972
|
+
keyboard's arrow keys move between cells here. */
|
|
2973
|
+
.kanuni-datagrid-root input.kanuni-datagrid-editor[type='number'] {
|
|
2974
|
+
appearance: textfield;
|
|
2975
|
+
-moz-appearance: textfield;
|
|
2976
|
+
}
|
|
2977
|
+
|
|
2978
|
+
.kanuni-datagrid-root input.kanuni-datagrid-editor[type='number']::-webkit-inner-spin-button,
|
|
2979
|
+
.kanuni-datagrid-root input.kanuni-datagrid-editor[type='number']::-webkit-outer-spin-button {
|
|
2980
|
+
-webkit-appearance: none;
|
|
2981
|
+
margin: 0;
|
|
2982
|
+
}
|
|
2983
|
+
|
|
2886
2984
|
.kanuni-datagrid-root input.kanuni-datagrid-editor[type='checkbox'] {
|
|
2887
2985
|
width: auto;
|
|
2888
2986
|
height: auto;
|
|
@@ -3366,6 +3464,51 @@ input[type='checkbox'].kanuni-datagrid-edit-form-input {
|
|
|
3366
3464
|
outline-offset: -1px;
|
|
3367
3465
|
}
|
|
3368
3466
|
|
|
3467
|
+
/* The date and lookup editors in a form are the CELL editors (one control per
|
|
3468
|
+
column), whose look is an underline sized to a row. In a form that read as a
|
|
3469
|
+
different kind of field from its boxed neighbours (2026-10-19, content
|
|
3470
|
+
session), so here they take the form's box: on the date editor's wrapper,
|
|
3471
|
+
which holds the calendar button too, and on a lookup's input directly. */
|
|
3472
|
+
.kanuni-datagrid-root .kanuni-datagrid-edit-form-lookup > .kanuni-datagrid-editor,
|
|
3473
|
+
.kanuni-datagrid-edit-form-lookup > .kanuni-datagrid-date-editor {
|
|
3474
|
+
height: auto;
|
|
3475
|
+
padding: 4px 6px;
|
|
3476
|
+
border: 1px solid var(--dg-border-strong);
|
|
3477
|
+
border-radius: var(--dg-radius-control);
|
|
3478
|
+
background: var(--dg-surface);
|
|
3479
|
+
}
|
|
3480
|
+
|
|
3481
|
+
.kanuni-datagrid-root .kanuni-datagrid-edit-form-lookup > .kanuni-datagrid-date-editor > .kanuni-datagrid-editor {
|
|
3482
|
+
height: auto;
|
|
3483
|
+
padding: 0;
|
|
3484
|
+
border: none;
|
|
3485
|
+
}
|
|
3486
|
+
|
|
3487
|
+
.kanuni-datagrid-root .kanuni-datagrid-edit-form-lookup > .kanuni-datagrid-editor:focus,
|
|
3488
|
+
.kanuni-datagrid-edit-form-lookup > .kanuni-datagrid-date-editor:focus-within {
|
|
3489
|
+
outline: 2px solid var(--dg-primary);
|
|
3490
|
+
outline-offset: -1px;
|
|
3491
|
+
}
|
|
3492
|
+
|
|
3493
|
+
/* A field the user cannot change must not look like one they can.
|
|
3494
|
+
`editable: false` columns were drawn as disabled inputs with the same
|
|
3495
|
+
surface, border and text as the open ones: readers clicked them and nothing
|
|
3496
|
+
happened (2026-10-19, content session). Recessed surface, muted text, a
|
|
3497
|
+
lighter border and the not-allowed cursor — the value stays readable. */
|
|
3498
|
+
.kanuni-datagrid-edit-form-input:disabled,
|
|
3499
|
+
.kanuni-datagrid-root .kanuni-datagrid-edit-form-lookup > .kanuni-datagrid-editor:disabled,
|
|
3500
|
+
.kanuni-datagrid-edit-form-lookup > .kanuni-datagrid-date-editor:has(.kanuni-datagrid-editor:disabled) {
|
|
3501
|
+
border-color: var(--dg-border);
|
|
3502
|
+
background: var(--dg-surface-header);
|
|
3503
|
+
color: var(--dg-text-muted);
|
|
3504
|
+
cursor: not-allowed;
|
|
3505
|
+
}
|
|
3506
|
+
|
|
3507
|
+
.kanuni-datagrid-root .kanuni-datagrid-edit-form-lookup .kanuni-datagrid-date-editor .kanuni-datagrid-editor:disabled {
|
|
3508
|
+
color: var(--dg-text-muted);
|
|
3509
|
+
cursor: not-allowed;
|
|
3510
|
+
}
|
|
3511
|
+
|
|
3369
3512
|
.kanuni-datagrid-edit-form-field[data-invalid] .kanuni-datagrid-edit-form-input {
|
|
3370
3513
|
border-color: var(--dg-danger);
|
|
3371
3514
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kanunilabs/datagrid",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.3",
|
|
4
4
|
"description": "High-performance data grid for vanilla JavaScript — no framework required. Virtualized rows and columns, a Web Worker pipeline, sorting, filtering, grouping and theming, with a UMD build for script-tag use.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"data-grid",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"access": "public"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@kanunilabs/datagrid-core": "1.10.
|
|
63
|
+
"@kanunilabs/datagrid-core": "1.10.3"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"@types/node": "^22.0.0",
|
|
@@ -68,8 +68,8 @@
|
|
|
68
68
|
"jsdom": "^30.0.1",
|
|
69
69
|
"react": "^19.0.0",
|
|
70
70
|
"react-dom": "^19.0.0",
|
|
71
|
-
"@kanunilabs/
|
|
72
|
-
"@kanunilabs/
|
|
71
|
+
"@kanunilabs/datagrid-react": "1.8.3",
|
|
72
|
+
"@kanunilabs/foundation": "1.0.4"
|
|
73
73
|
},
|
|
74
74
|
"scripts": {
|
|
75
75
|
"build": "tsup && node scripts/build-css.mjs && node scripts/build-umd.mjs && node ../../scripts/check-esm-load.mjs",
|