@kanunilabs/datagrid-react 1.5.0 → 1.6.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 (44) hide show
  1. package/README.md +12 -4
  2. package/dist/index.cjs +2 -2
  3. package/dist/index.d.cts +92 -11
  4. package/dist/index.d.ts +92 -11
  5. package/dist/index.js +2 -2
  6. package/dist/styles.css +98 -74
  7. package/dist/themes/all.css +1588 -0
  8. package/dist/themes/amber.css +41 -0
  9. package/dist/themes/aubergine.css +49 -0
  10. package/dist/themes/azure.css +41 -0
  11. package/dist/themes/burgundy.css +49 -0
  12. package/dist/themes/charcoal.css +49 -0
  13. package/dist/themes/contrast-dark.css +49 -0
  14. package/dist/themes/contrast-light.css +41 -0
  15. package/dist/themes/coral.css +41 -0
  16. package/dist/themes/corporate.css +41 -0
  17. package/dist/themes/deep-sea.css +49 -0
  18. package/dist/themes/editorial.css +41 -0
  19. package/dist/themes/ember.css +49 -0
  20. package/dist/themes/emerald.css +41 -0
  21. package/dist/themes/forest.css +49 -0
  22. package/dist/themes/glacier.css +41 -0
  23. package/dist/themes/graphite.css +49 -0
  24. package/dist/themes/indigo-night.css +49 -0
  25. package/dist/themes/indigo.css +41 -0
  26. package/dist/themes/ivory.css +41 -0
  27. package/dist/themes/lagoon.css +41 -0
  28. package/dist/themes/linen.css +41 -0
  29. package/dist/themes/midnight.css +49 -0
  30. package/dist/themes/mist.css +41 -0
  31. package/dist/themes/monochrome.css +41 -0
  32. package/dist/themes/onyx.css +49 -0
  33. package/dist/themes/orchid.css +41 -0
  34. package/dist/themes/porcelain.css +41 -0
  35. package/dist/themes/rose.css +41 -0
  36. package/dist/themes/sandstone.css +41 -0
  37. package/dist/themes/slate-night.css +49 -0
  38. package/dist/themes/slate.css +41 -0
  39. package/dist/themes/steel.css +49 -0
  40. package/dist/themes/stone.css +41 -0
  41. package/dist/themes/taupe.css +41 -0
  42. package/dist/themes/teal.css +41 -0
  43. package/dist/themes/terminal.css +49 -0
  44. package/package.json +9 -5
package/dist/styles.css CHANGED
@@ -47,6 +47,11 @@
47
47
  --dg-primary: #0369a1; /* sky-700 */
48
48
  --dg-primary-soft: #e0f2fe; /* sky-100 */
49
49
  --dg-focus-ring: #0369a1; /* matches the accent */
50
+ /* Find without filtering (P-FIND-01): every match tinted, the current one
51
+ stronger and ringed. Translucent, so selection and zebra show through. */
52
+ --dg-find-match-bg: color-mix(in srgb, #facc15 24%, transparent);
53
+ --dg-find-active-bg: color-mix(in srgb, #f59e0b 45%, transparent);
54
+ --dg-find-active-ring: #b45309;
50
55
  /* Cell flash (P1.7). Translucent so the row's own background — striped,
51
56
  selected, dirty — stays visible under the pulse rather than being
52
57
  replaced by it. */
@@ -93,7 +98,7 @@
93
98
  --dg-scrollbar-track: transparent;
94
99
 
95
100
  /* ── Elevation ──
96
- A flat theme sets these to `none`; Material raises them. */
101
+ A flat theme sets these to `none`; Elevated raises them. */
97
102
  --dg-shadow-popup: 0 10px 25px -5px rgba(15, 23, 42, 0.25);
98
103
  --dg-shadow-popup-sm: 0 8px 24px rgba(15, 23, 42, 0.16);
99
104
  --dg-shadow-menu: 0 12px 28px rgba(15, 23, 42, 0.22);
@@ -114,14 +119,14 @@
114
119
  /* ── Line work ─────────────────────────────────────────────
115
120
  Whole SHORTHANDS rather than a colour and a width, so a theme can drop a
116
121
  line entirely (`none`) instead of only fading it. This is most of what
117
- separates the presets: Balham rules every column and every row, Material
118
- rules rows only, Quartz keeps the rows faint and skips the columns. */
122
+ separates the presets: Ledger rules every column and every row, Elevated
123
+ rules rows only, Minimal keeps the rows faint and skips the columns. */
119
124
  --dg-cell-border: 1px solid var(--dg-border);
120
125
  --dg-row-border: 1px solid var(--dg-border);
121
126
  --dg-header-cell-border: 1px solid var(--dg-border);
122
127
  --dg-header-border: 1px solid var(--dg-border-strong);
123
128
  /* A band's EDGE is not a column separator, so it gets its own token rather
124
- than riding on `--dg-header-cell-border`. Quartz and Material set that one
129
+ than riding on `--dg-header-cell-border`. Minimal and Elevated set that one
125
130
  to `none` on purpose — they rule rows, not columns — and the bands went
126
131
  with it: "Where" and "Sales" sat over their columns with nothing marking
127
132
  where either one started or stopped. Same argument the band row's
@@ -130,7 +135,7 @@
130
135
 
131
136
  Mixed from the header TEXT rather than taken from a border token, because
132
137
  both border tokens are too faint for a 24px vertical segment: measured on
133
- Quartz against the header background, `--dg-border` gives 1.17:1 and
138
+ Minimal against the header background, `--dg-border` gives 1.17:1 and
134
139
  `--dg-border-strong` 1.39:1 — lines that are technically drawn and
135
140
  practically invisible, i.e. a fix that changes nothing the user sees. The
136
141
  mix lands near 2:1 and follows the theme in both light and dark, since the
@@ -206,6 +211,7 @@
206
211
  --dg-primary: #38bdf8;
207
212
  --dg-primary-soft: #0c4a6e;
208
213
  --dg-focus-ring: #7dd3fc;
214
+ --dg-find-active-ring: #fbbf24;
209
215
  /* Lifted for a dark surface: crimson on near-black reads as brown. */
210
216
  --dg-note-marker: #f87171;
211
217
  --dg-shadow-pinned: 2px 0 4px -2px rgba(0, 0, 0, 0.55);
@@ -487,7 +493,7 @@
487
493
  out at 17.55px, so every wrapped row landed on a fractional boundary and
488
494
  its 1px border rendered a pixel thick on some rows and two on others.
489
495
  A token now, because a theme moves the body font under it — 18px is right
490
- for 13px text and cramped for Material's 14px. */
496
+ for 13px text and cramped for Elevated's 14px. */
491
497
  line-height: var(--dg-wrap-line-height);
492
498
  }
493
499
 
@@ -1114,6 +1120,16 @@
1114
1120
  outline-offset: -2px;
1115
1121
  }
1116
1122
 
1123
+ /* Find without filtering (P-FIND-01): every match tinted, the current one
1124
+ stronger and outlined so it reads at a glance among the others. */
1125
+ .kanuni-datagrid-cell--find-match {
1126
+ background: var(--dg-find-match-bg);
1127
+ }
1128
+ .kanuni-datagrid-cell--find-active {
1129
+ background: var(--dg-find-active-bg);
1130
+ box-shadow: inset 0 0 0 2px var(--dg-find-active-ring);
1131
+ }
1132
+
1117
1133
  .kanuni-datagrid-scroller:focus {
1118
1134
  outline: none;
1119
1135
  }
@@ -1529,6 +1545,14 @@
1529
1545
  overflow-wrap: anywhere;
1530
1546
  }
1531
1547
 
1548
+ /* An interactive tooltip (P-TOOL-01) takes the pointer: its text can be
1549
+ selected and a link in it clicked. The grace period in the hook lets the
1550
+ pointer cross the gap from the cell without closing it. */
1551
+ .kanuni-datagrid-tooltip--interactive {
1552
+ pointer-events: auto;
1553
+ user-select: text;
1554
+ }
1555
+
1532
1556
  .kanuni-datagrid-filter-popup {
1533
1557
  position: fixed;
1534
1558
  z-index: 1000;
@@ -2539,10 +2563,10 @@
2539
2563
  ─────────────────────────────────────────────────────────────
2540
2564
  Six presets, each in a light and a dark palette, each at three densities.
2541
2565
  Nothing here is copied from a third-party stylesheet: every rule is a
2542
- KanuniLabs class overriding a KanuniLabs --dg-* token. The names are the
2543
- industry's shared vocabulary for a grid's VISUAL DENSITY AND CHROME — the
2544
- same sense in which a typeface is called "grotesque" — and the palettes,
2545
- metrics and line work below are our own.
2566
+ KanuniLabs class overriding a KanuniLabs --dg-* token, and the names say
2567
+ what each theme does (minimal, ledger, elevated, framed). Until 2026-10-11
2568
+ four of them carried names another grid vendor also uses for its themes;
2569
+ they were renamed so nothing public reads as borrowed.
2546
2570
 
2547
2571
  ── How a theme is expressed ───────────────────────────────
2548
2572
  A theme is a token override and (almost) nothing else. That is the whole
@@ -2565,15 +2589,15 @@
2565
2589
  ───────────────────────────────────────────────────────────── */
2566
2590
 
2567
2591
  /* ═══════════════════════════════════════════════════════════
2568
- QUARTZ — modern, minimal chrome
2592
+ MINIMAL — modern, minimal chrome
2569
2593
  ═══════════════════════════════════════════════════════════
2570
2594
  The least furniture that still reads as a table: no column separators at
2571
2595
  all, hairline row rules, and a header that is the same white as the body,
2572
2596
  separated only by one firm line. Generous radii. For product UIs where the
2573
2597
  grid sits among cards rather than inside a terminal. */
2574
- .kanuni-datagrid-root.kanuni-datagrid-theme-quartz,
2575
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-quartz,
2576
- .kanuni-datagrid-detached.kanuni-datagrid-theme-quartz {
2598
+ .kanuni-datagrid-root.kanuni-datagrid-theme-minimal,
2599
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-minimal,
2600
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-minimal {
2577
2601
  --dg-bg: #ffffff;
2578
2602
  --dg-surface: #ffffff;
2579
2603
  --dg-surface-header: #ffffff;
@@ -2618,9 +2642,9 @@
2618
2642
  --dg-chrome-padding-y: 8px;
2619
2643
  }
2620
2644
 
2621
- .kanuni-datagrid-root.kanuni-datagrid-theme-quartz.kanuni-datagrid-dark,
2622
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-quartz.kanuni-datagrid-dark,
2623
- .kanuni-datagrid-detached.kanuni-datagrid-theme-quartz.kanuni-datagrid-dark {
2645
+ .kanuni-datagrid-root.kanuni-datagrid-theme-minimal.kanuni-datagrid-dark,
2646
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-minimal.kanuni-datagrid-dark,
2647
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-minimal.kanuni-datagrid-dark {
2624
2648
  --dg-bg: #0d1117;
2625
2649
  --dg-surface: #0d1117;
2626
2650
  --dg-surface-header: #0d1117;
@@ -2641,14 +2665,14 @@
2641
2665
  }
2642
2666
 
2643
2667
  /* ═══════════════════════════════════════════════════════════
2644
- BALHAM — dense, ruled, financial
2668
+ LEDGER — dense, ruled, financial
2645
2669
  ═══════════════════════════════════════════════════════════
2646
2670
  Every column and every row is ruled, the type is small, the padding is
2647
2671
  tight and the corners are nearly square. Built for the case where the grid
2648
2672
  IS the application and the user is counting rows on screen. */
2649
- .kanuni-datagrid-root.kanuni-datagrid-theme-balham,
2650
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-balham,
2651
- .kanuni-datagrid-detached.kanuni-datagrid-theme-balham {
2673
+ .kanuni-datagrid-root.kanuni-datagrid-theme-ledger,
2674
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-ledger,
2675
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-ledger {
2652
2676
  --dg-bg: #ffffff;
2653
2677
  --dg-surface: #ffffff;
2654
2678
  --dg-surface-header: #f2f4f6;
@@ -2703,9 +2727,9 @@
2703
2727
  --dg-chrome-padding-y: 4px;
2704
2728
  }
2705
2729
 
2706
- .kanuni-datagrid-root.kanuni-datagrid-theme-balham.kanuni-datagrid-dark,
2707
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-balham.kanuni-datagrid-dark,
2708
- .kanuni-datagrid-detached.kanuni-datagrid-theme-balham.kanuni-datagrid-dark {
2730
+ .kanuni-datagrid-root.kanuni-datagrid-theme-ledger.kanuni-datagrid-dark,
2731
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-ledger.kanuni-datagrid-dark,
2732
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-ledger.kanuni-datagrid-dark {
2709
2733
  --dg-bg: #1a2029;
2710
2734
  --dg-surface: #1a2029;
2711
2735
  --dg-surface-header: #232b36;
@@ -2726,14 +2750,14 @@
2726
2750
  }
2727
2751
 
2728
2752
  /* ═══════════════════════════════════════════════════════════
2729
- MATERIAL — tall, quiet lines, real elevation
2753
+ ELEVATED — tall, quiet lines, real elevation
2730
2754
  ═══════════════════════════════════════════════════════════
2731
2755
  Rows only, no column rules; larger rhythm; a header set in medium weight
2732
2756
  with open tracking rather than bold; pill-shaped controls; and shadows that
2733
2757
  actually lift. The one preset whose type scale grows rather than shrinks. */
2734
- .kanuni-datagrid-root.kanuni-datagrid-theme-material,
2735
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-material,
2736
- .kanuni-datagrid-detached.kanuni-datagrid-theme-material {
2758
+ .kanuni-datagrid-root.kanuni-datagrid-theme-elevated,
2759
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-elevated,
2760
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-elevated {
2737
2761
  --dg-bg: #ffffff;
2738
2762
  --dg-surface: #ffffff;
2739
2763
  --dg-surface-header: #ffffff;
@@ -2785,9 +2809,9 @@
2785
2809
  --dg-chrome-padding-y: 10px;
2786
2810
  }
2787
2811
 
2788
- .kanuni-datagrid-root.kanuni-datagrid-theme-material.kanuni-datagrid-dark,
2789
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-material.kanuni-datagrid-dark,
2790
- .kanuni-datagrid-detached.kanuni-datagrid-theme-material.kanuni-datagrid-dark {
2812
+ .kanuni-datagrid-root.kanuni-datagrid-theme-elevated.kanuni-datagrid-dark,
2813
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-elevated.kanuni-datagrid-dark,
2814
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-elevated.kanuni-datagrid-dark {
2791
2815
  --dg-bg: #141218;
2792
2816
  --dg-surface: #141218;
2793
2817
  --dg-surface-header: #141218;
@@ -2809,14 +2833,14 @@
2809
2833
  }
2810
2834
 
2811
2835
  /* ═══════════════════════════════════════════════════════════
2812
- ALPINE — airy, fully framed, high-chroma accent
2836
+ FRAMED — airy, fully framed, high-chroma accent
2813
2837
  ═══════════════════════════════════════════════════════════
2814
2838
  The middle position: both sets of rules are drawn but kept light, the rhythm
2815
2839
  is roomy, and the header is anchored by a doubled rule and a heavy weight so
2816
2840
  it reads as a distinct band even though it shares the body's palette. */
2817
- .kanuni-datagrid-root.kanuni-datagrid-theme-alpine,
2818
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-alpine,
2819
- .kanuni-datagrid-detached.kanuni-datagrid-theme-alpine {
2841
+ .kanuni-datagrid-root.kanuni-datagrid-theme-framed,
2842
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-framed,
2843
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-framed {
2820
2844
  --dg-bg: #ffffff;
2821
2845
  --dg-surface: #ffffff;
2822
2846
  --dg-surface-header: #f8f9fa;
@@ -2863,9 +2887,9 @@
2863
2887
  --dg-chrome-padding-y: 7px;
2864
2888
  }
2865
2889
 
2866
- .kanuni-datagrid-root.kanuni-datagrid-theme-alpine.kanuni-datagrid-dark,
2867
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-alpine.kanuni-datagrid-dark,
2868
- .kanuni-datagrid-detached.kanuni-datagrid-theme-alpine.kanuni-datagrid-dark {
2890
+ .kanuni-datagrid-root.kanuni-datagrid-theme-framed.kanuni-datagrid-dark,
2891
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-framed.kanuni-datagrid-dark,
2892
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-framed.kanuni-datagrid-dark {
2869
2893
  --dg-bg: #181d1f;
2870
2894
  --dg-surface: #181d1f;
2871
2895
  --dg-surface-header: #222628;
@@ -3033,7 +3057,7 @@
3033
3057
  together — row, header, cell padding, control height, toolbar and pager
3034
3058
  padding, filter field — so the proportions hold and the grid stays usable
3035
3059
  rather than merely smaller. Each theme scales from its OWN normal, because a
3036
- Material row starts at 40px and a Balham row at 25px; one shared compact
3060
+ Elevated row starts at 40px and a Ledger row at 25px; one shared compact
3037
3061
  value would have flattened the presets into each other at that density.
3038
3062
 
3039
3063
  The ROW HEIGHT is deliberately absent here: it is a core value the
@@ -3046,10 +3070,10 @@
3046
3070
  base sheet's presets are root-only, which left popup controls at their
3047
3071
  normal size whatever the grid was set to. */
3048
3072
 
3049
- /* ── Quartz ── */
3050
- .kanuni-datagrid-root.kanuni-datagrid-theme-quartz.kanuni-datagrid-density-compact,
3051
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-quartz.kanuni-datagrid-density-compact,
3052
- .kanuni-datagrid-detached.kanuni-datagrid-theme-quartz.kanuni-datagrid-density-compact {
3073
+ /* ── Minimal ── */
3074
+ .kanuni-datagrid-root.kanuni-datagrid-theme-minimal.kanuni-datagrid-density-compact,
3075
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-minimal.kanuni-datagrid-density-compact,
3076
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-minimal.kanuni-datagrid-density-compact {
3053
3077
  --dg-header-height: 30px;
3054
3078
  --dg-cell-padding-x: 8px;
3055
3079
  --dg-font-size: 12px;
@@ -3062,9 +3086,9 @@
3062
3086
  --dg-chrome-padding-y: 4px;
3063
3087
  }
3064
3088
 
3065
- .kanuni-datagrid-root.kanuni-datagrid-theme-quartz.kanuni-datagrid-density-comfortable,
3066
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-quartz.kanuni-datagrid-density-comfortable,
3067
- .kanuni-datagrid-detached.kanuni-datagrid-theme-quartz.kanuni-datagrid-density-comfortable {
3089
+ .kanuni-datagrid-root.kanuni-datagrid-theme-minimal.kanuni-datagrid-density-comfortable,
3090
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-minimal.kanuni-datagrid-density-comfortable,
3091
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-minimal.kanuni-datagrid-density-comfortable {
3068
3092
  --dg-header-height: 48px;
3069
3093
  --dg-cell-padding-x: 16px;
3070
3094
  --dg-font-size: 14px;
@@ -3077,10 +3101,10 @@
3077
3101
  --dg-chrome-padding-y: 10px;
3078
3102
  }
3079
3103
 
3080
- /* ── Balham ── */
3081
- .kanuni-datagrid-root.kanuni-datagrid-theme-balham.kanuni-datagrid-density-compact,
3082
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-balham.kanuni-datagrid-density-compact,
3083
- .kanuni-datagrid-detached.kanuni-datagrid-theme-balham.kanuni-datagrid-density-compact {
3104
+ /* ── Ledger ── */
3105
+ .kanuni-datagrid-root.kanuni-datagrid-theme-ledger.kanuni-datagrid-density-compact,
3106
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-ledger.kanuni-datagrid-density-compact,
3107
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-ledger.kanuni-datagrid-density-compact {
3084
3108
  --dg-header-height: 22px;
3085
3109
  --dg-cell-padding-x: 4px;
3086
3110
  --dg-font-size: 11px;
@@ -3093,9 +3117,9 @@
3093
3117
  --dg-chrome-padding-y: 2px;
3094
3118
  }
3095
3119
 
3096
- .kanuni-datagrid-root.kanuni-datagrid-theme-balham.kanuni-datagrid-density-comfortable,
3097
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-balham.kanuni-datagrid-density-comfortable,
3098
- .kanuni-datagrid-detached.kanuni-datagrid-theme-balham.kanuni-datagrid-density-comfortable {
3120
+ .kanuni-datagrid-root.kanuni-datagrid-theme-ledger.kanuni-datagrid-density-comfortable,
3121
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-ledger.kanuni-datagrid-density-comfortable,
3122
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-ledger.kanuni-datagrid-density-comfortable {
3099
3123
  --dg-header-height: 36px;
3100
3124
  --dg-cell-padding-x: 10px;
3101
3125
  --dg-font-size: 13px;
@@ -3108,10 +3132,10 @@
3108
3132
  --dg-chrome-padding-y: 6px;
3109
3133
  }
3110
3134
 
3111
- /* ── Material ── */
3112
- .kanuni-datagrid-root.kanuni-datagrid-theme-material.kanuni-datagrid-density-compact,
3113
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-material.kanuni-datagrid-density-compact,
3114
- .kanuni-datagrid-detached.kanuni-datagrid-theme-material.kanuni-datagrid-density-compact {
3135
+ /* ── Elevated ── */
3136
+ .kanuni-datagrid-root.kanuni-datagrid-theme-elevated.kanuni-datagrid-density-compact,
3137
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-elevated.kanuni-datagrid-density-compact,
3138
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-elevated.kanuni-datagrid-density-compact {
3115
3139
  --dg-header-height: 36px;
3116
3140
  --dg-cell-padding-x: 12px;
3117
3141
  --dg-font-size: 13px;
@@ -3124,9 +3148,9 @@
3124
3148
  --dg-chrome-padding-y: 6px;
3125
3149
  }
3126
3150
 
3127
- .kanuni-datagrid-root.kanuni-datagrid-theme-material.kanuni-datagrid-density-comfortable,
3128
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-material.kanuni-datagrid-density-comfortable,
3129
- .kanuni-datagrid-detached.kanuni-datagrid-theme-material.kanuni-datagrid-density-comfortable {
3151
+ .kanuni-datagrid-root.kanuni-datagrid-theme-elevated.kanuni-datagrid-density-comfortable,
3152
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-elevated.kanuni-datagrid-density-comfortable,
3153
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-elevated.kanuni-datagrid-density-comfortable {
3130
3154
  --dg-header-height: 56px;
3131
3155
  --dg-cell-padding-x: 20px;
3132
3156
  --dg-font-size: 15px;
@@ -3139,10 +3163,10 @@
3139
3163
  --dg-chrome-padding-y: 12px;
3140
3164
  }
3141
3165
 
3142
- /* ── Alpine ── */
3143
- .kanuni-datagrid-root.kanuni-datagrid-theme-alpine.kanuni-datagrid-density-compact,
3144
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-alpine.kanuni-datagrid-density-compact,
3145
- .kanuni-datagrid-detached.kanuni-datagrid-theme-alpine.kanuni-datagrid-density-compact {
3166
+ /* ── Framed ── */
3167
+ .kanuni-datagrid-root.kanuni-datagrid-theme-framed.kanuni-datagrid-density-compact,
3168
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-framed.kanuni-datagrid-density-compact,
3169
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-framed.kanuni-datagrid-density-compact {
3146
3170
  --dg-header-height: 28px;
3147
3171
  --dg-cell-padding-x: 8px;
3148
3172
  --dg-font-size: 12px;
@@ -3155,9 +3179,9 @@
3155
3179
  --dg-chrome-padding-y: 4px;
3156
3180
  }
3157
3181
 
3158
- .kanuni-datagrid-root.kanuni-datagrid-theme-alpine.kanuni-datagrid-density-comfortable,
3159
- .kanuni-datagrid-enterprise.kanuni-datagrid-theme-alpine.kanuni-datagrid-density-comfortable,
3160
- .kanuni-datagrid-detached.kanuni-datagrid-theme-alpine.kanuni-datagrid-density-comfortable {
3182
+ .kanuni-datagrid-root.kanuni-datagrid-theme-framed.kanuni-datagrid-density-comfortable,
3183
+ .kanuni-datagrid-enterprise.kanuni-datagrid-theme-framed.kanuni-datagrid-density-comfortable,
3184
+ .kanuni-datagrid-detached.kanuni-datagrid-theme-framed.kanuni-datagrid-density-comfortable {
3161
3185
  --dg-header-height: 46px;
3162
3186
  --dg-cell-padding-x: 16px;
3163
3187
  --dg-font-size: 14px;
@@ -3263,17 +3287,17 @@
3263
3287
  the edge element (there is exactly one per side, not one per cell) restores
3264
3288
  it without bringing the column rules back.
3265
3289
 
3266
- Every ruled preset — Balham, Alpine — needs nothing here: the seam is
3290
+ Every ruled preset — Ledger, Framed — needs nothing here: the seam is
3267
3291
  already drawn by the cell borders they keep. */
3268
- .kanuni-datagrid-theme-quartz .kanuni-datagrid-pin-edge-left,
3269
- .kanuni-datagrid-theme-material .kanuni-datagrid-pin-edge-left,
3292
+ .kanuni-datagrid-theme-minimal .kanuni-datagrid-pin-edge-left,
3293
+ .kanuni-datagrid-theme-elevated .kanuni-datagrid-pin-edge-left,
3270
3294
  .kanuni-datagrid-theme-kanuni .kanuni-datagrid-pin-edge-left,
3271
3295
  .kanuni-datagrid-theme-kanuni-midnight .kanuni-datagrid-pin-edge-left {
3272
3296
  border-inline-end: 1px solid var(--dg-border-strong);
3273
3297
  }
3274
3298
 
3275
- .kanuni-datagrid-theme-quartz .kanuni-datagrid-pin-edge-right,
3276
- .kanuni-datagrid-theme-material .kanuni-datagrid-pin-edge-right,
3299
+ .kanuni-datagrid-theme-minimal .kanuni-datagrid-pin-edge-right,
3300
+ .kanuni-datagrid-theme-elevated .kanuni-datagrid-pin-edge-right,
3277
3301
  .kanuni-datagrid-theme-kanuni .kanuni-datagrid-pin-edge-right,
3278
3302
  .kanuni-datagrid-theme-kanuni-midnight .kanuni-datagrid-pin-edge-right {
3279
3303
  border-inline-start: 1px solid var(--dg-border-strong);
@@ -3285,8 +3309,8 @@
3285
3309
  A palette is a SECOND, independent axis: it changes the colours and nothing
3286
3310
  else. The theme keeps deciding the structure — where the rules are drawn, how
3287
3311
  tall a row is, how round a control is, how much the popups lift — so
3288
- `theme="balham" palette="nord"` is Balham's dense ruled grid in Nord's arctic
3289
- blues, and `theme="material" palette="nord"` is Material's tall airy one in
3312
+ `theme="ledger" palette="nord"` is Ledger's dense ruled grid in Nord's arctic
3313
+ blues, and `theme="elevated" palette="nord"` is Elevated's tall airy one in
3290
3314
  the same blues. Four themes and six palettes is twenty-four looks out of ten
3291
3315
  class names, not twenty-four stylesheets.
3292
3316