@cratis/components 4.14.3 → 4.15.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 (61) hide show
  1. package/compat-manifest.json +11 -11
  2. package/dist/esm/Common/CratisComponentsProvider.d.ts +7 -1
  3. package/dist/esm/Common/CratisComponentsProvider.js.map +1 -1
  4. package/dist/esm/DataPage/DataPage.d.ts +6 -0
  5. package/dist/esm/DataPage/DataPage.js.map +1 -1
  6. package/dist/esm/DataTables/DataTableCore.d.ts +18 -1
  7. package/dist/esm/DataTables/DataTableCore.js +13 -4
  8. package/dist/esm/DataTables/DataTableCore.js.map +1 -1
  9. package/dist/esm/DataTables/DataTableForObservableQuery.d.ts +6 -0
  10. package/dist/esm/DataTables/DataTableForObservableQuery.js +3 -2
  11. package/dist/esm/DataTables/DataTableForObservableQuery.js.map +1 -1
  12. package/dist/esm/DataTables/DataTableForQuery.d.ts +6 -0
  13. package/dist/esm/DataTables/DataTableForQuery.js +3 -2
  14. package/dist/esm/DataTables/DataTableForQuery.js.map +1 -1
  15. package/dist/esm/DataTables/DataTableStatus.d.ts +12 -0
  16. package/dist/esm/DataTables/DataTableStatus.d.ts.map +1 -0
  17. package/dist/esm/DataTables/DataTableStatus.js +10 -0
  18. package/dist/esm/DataTables/DataTableStatus.js.map +1 -0
  19. package/dist/esm/DataTables/index.d.ts +1 -0
  20. package/dist/esm/DataTables/index.js +1 -0
  21. package/dist/esm/DataTables/index.js.map +1 -1
  22. package/dist/esm/DataTables/resolveDataTableStatus.d.ts +8 -0
  23. package/dist/esm/DataTables/resolveDataTableStatus.js +14 -0
  24. package/dist/esm/DataTables/resolveDataTableStatus.js.map +1 -0
  25. package/dist/esm/PivotViewer/PivotViewer.d.ts +1 -1
  26. package/dist/esm/PivotViewer/PivotViewer.js +2 -2
  27. package/dist/esm/PivotViewer/PivotViewer.js.map +1 -1
  28. package/dist/esm/PivotViewer/components/PivotViewerMain.d.ts +2 -1
  29. package/dist/esm/PivotViewer/components/PivotViewerMain.js +2 -2
  30. package/dist/esm/PivotViewer/components/PivotViewerMain.js.map +1 -1
  31. package/dist/esm/PivotViewer/components/Spinner.d.ts +3 -1
  32. package/dist/esm/PivotViewer/components/Spinner.d.ts.map +1 -1
  33. package/dist/esm/PivotViewer/components/Spinner.js +3 -3
  34. package/dist/esm/PivotViewer/components/Spinner.js.map +1 -1
  35. package/dist/esm/PivotViewer/types.d.ts +2 -0
  36. package/dist/esm/Toolbar/ToolbarButton.js +3 -3
  37. package/dist/esm/Toolbar/ToolbarButton.js.map +1 -1
  38. package/dist/esm/configuration/CratisComponentsDefaults.js +3 -0
  39. package/dist/esm/configuration/CratisComponentsDefaults.js.map +1 -1
  40. package/dist/esm/styles.Canvas.css +11 -38
  41. package/dist/esm/styles.CommandDialog.css +14 -32
  42. package/dist/esm/styles.CommandForm.css +14 -32
  43. package/dist/esm/styles.CommandStepper.css +14 -32
  44. package/dist/esm/styles.Common.css +7 -19
  45. package/dist/esm/styles.DataPage.css +10 -20
  46. package/dist/esm/styles.DataTables.css +10 -20
  47. package/dist/esm/styles.Display.css +7 -19
  48. package/dist/esm/styles.Dropdown.css +7 -19
  49. package/dist/esm/styles.Filter.css +2 -7
  50. package/dist/esm/styles.ObjectContentEditor.css +7 -19
  51. package/dist/esm/styles.ObjectNavigationalBar.css +7 -19
  52. package/dist/esm/styles.PivotViewer.css +18 -20
  53. package/dist/esm/styles.SchemaEditor.css +10 -20
  54. package/dist/esm/styles.Toolbar.css +14 -58
  55. package/dist/esm/styles.css +46 -111
  56. package/dist/esm/styles.renderer.builtin.css +10 -20
  57. package/dist/esm/types/parts.d.ts +18 -6
  58. package/dist/esm/types/parts.d.ts.map +1 -1
  59. package/dist/esm/types/parts.js +18 -6
  60. package/dist/esm/types/parts.js.map +1 -1
  61. package/package.json +1 -1
@@ -123,7 +123,8 @@
123
123
  box-shadow: inset 0 1px 0 var(--cratis-surface-border);
124
124
  }
125
125
 
126
- .pv-search input:focus {
126
+ .pv-search input:focus,
127
+ .pv-filter-group-search input:focus {
127
128
  outline: none;
128
129
  border-color: var(--cratis-primary-color);
129
130
  box-shadow: var(--cratis-focus-ring);
@@ -143,12 +144,6 @@
143
144
  font-size: 0.85rem;
144
145
  }
145
146
 
146
- .pv-filter-group-search input:focus {
147
- outline: none;
148
- border-color: var(--cratis-primary-color);
149
- box-shadow: var(--cratis-focus-ring);
150
- }
151
-
152
147
  /* Reusable checkbox/radio option list (CheckboxListFilter) */
153
148
  .pv-option-list {
154
149
  position: relative;
@@ -666,7 +661,8 @@
666
661
  }
667
662
 
668
663
  .pv-filter-button.active,
669
- .pv-filter-button:hover {
664
+ .pv-filter-button:hover,
665
+ .pv-filter-icon-button.active {
670
666
  background: var(--cratis-surface-hover);
671
667
  box-shadow: var(--cratis-focus-ring);
672
668
  }
@@ -694,11 +690,6 @@
694
690
  background: var(--cratis-surface-hover);
695
691
  }
696
692
 
697
- .pv-filter-icon-button.active {
698
- background: var(--cratis-surface-hover);
699
- box-shadow: var(--cratis-focus-ring);
700
- }
701
-
702
693
  .pv-filter-badge {
703
694
  position: absolute;
704
695
  top: -4px;
@@ -1085,7 +1076,8 @@
1085
1076
  background: var(--cratis-highlight-bg);
1086
1077
  }
1087
1078
 
1088
- .pv-axis-label:focus-visible {
1079
+ .pv-axis-label:focus-visible,
1080
+ .pv-card:focus-visible {
1089
1081
  outline: none;
1090
1082
  border-color: var(--cratis-primary-color);
1091
1083
  box-shadow: var(--cratis-focus-ring);
@@ -1215,12 +1207,6 @@
1215
1207
  transition: border-color 160ms ease;
1216
1208
  }
1217
1209
 
1218
- .pv-card:focus-visible {
1219
- outline: none;
1220
- border-color: var(--cratis-primary-color);
1221
- box-shadow: var(--cratis-focus-ring);
1222
- }
1223
-
1224
1210
  .pv-card.selected {
1225
1211
  border-color: var(--cratis-primary-color);
1226
1212
  box-shadow:
@@ -1552,6 +1538,18 @@
1552
1538
  min-height: 400px;
1553
1539
  }
1554
1540
 
1541
+ .pv-loading__label {
1542
+ position: absolute;
1543
+ width: 1px;
1544
+ height: 1px;
1545
+ padding: 0;
1546
+ margin: -1px;
1547
+ overflow: hidden;
1548
+ clip: rect(0, 0, 0, 0);
1549
+ white-space: nowrap;
1550
+ border: 0;
1551
+ }
1552
+
1555
1553
  .pv-spinner {
1556
1554
  width: 80px;
1557
1555
  height: 80px;
@@ -322,7 +322,9 @@
322
322
  box-shadow: var(--cratis-focus-ring);
323
323
  }
324
324
  .cratis-toggle-group[data-disabled],
325
- .cratis-tabs[data-disabled] {
325
+ .cratis-tabs[data-disabled],
326
+ .cratis-toggle-group__option[data-disabled],
327
+ .cratis-tabs__tab[data-disabled] {
326
328
  cursor: not-allowed;
327
329
  opacity: var(--cratis-disabled-opacity);
328
330
  }
@@ -361,10 +363,6 @@
361
363
  box-shadow: var(--cratis-shadow-card, none);
362
364
  font-weight: 600;
363
365
  }
364
- .cratis-toggle-group__option[data-disabled] {
365
- cursor: not-allowed;
366
- opacity: var(--cratis-disabled-opacity);
367
- }
368
366
  .cratis-toggle-group__icon {
369
367
  display: inline-flex;
370
368
  }
@@ -395,10 +393,6 @@
395
393
  color: var(--cratis-text-color);
396
394
  font-weight: 600;
397
395
  }
398
- .cratis-tabs__tab[data-disabled] {
399
- cursor: not-allowed;
400
- opacity: var(--cratis-disabled-opacity);
401
- }
402
396
  .cratis-tabs__panel {
403
397
  padding: 0.75rem 0;
404
398
  outline: none;
@@ -764,7 +758,8 @@
764
758
  .cratis-number-input[data-invalid='true'] .cratis-number-input__group {
765
759
  border-color: var(--cratis-red-500);
766
760
  }
767
- .cratis-number-input[data-disabled='true'] {
761
+ .cratis-number-input[data-disabled='true'],
762
+ .cratis-number-input__step:disabled {
768
763
  cursor: not-allowed;
769
764
  opacity: var(--cratis-disabled-opacity);
770
765
  }
@@ -826,10 +821,6 @@
826
821
  outline: 2px solid var(--cratis-primary-color);
827
822
  outline-offset: -3px;
828
823
  }
829
- .cratis-number-input__step:disabled {
830
- cursor: not-allowed;
831
- opacity: var(--cratis-disabled-opacity);
832
- }
833
824
  .cratis-number-input__description,
834
825
  .cratis-number-input__error {
835
826
  display: block;
@@ -910,7 +901,8 @@
910
901
  background: var(--cratis-surface-100);
911
902
  }
912
903
  .cratis-text-input:disabled,
913
- .cratis-text-area:disabled {
904
+ .cratis-text-area:disabled,
905
+ .cratis-choice[data-disabled='true'] {
914
906
  cursor: not-allowed;
915
907
  opacity: var(--cratis-disabled-opacity);
916
908
  }
@@ -927,10 +919,6 @@
927
919
  color: var(--cratis-text-color);
928
920
  cursor: pointer;
929
921
  }
930
- .cratis-choice[data-disabled='true'] {
931
- cursor: not-allowed;
932
- opacity: var(--cratis-disabled-opacity);
933
- }
934
922
  .cratis-choice[data-readonly='true']:not([data-disabled='true']) {
935
923
  cursor: default;
936
924
  }
@@ -1284,7 +1272,9 @@
1284
1272
  background: var(--cratis-highlight-bg);
1285
1273
  color: var(--cratis-highlight-text-color);
1286
1274
  }
1287
- .cratis-datatable__empty-cell {
1275
+ .cratis-datatable__empty-cell,
1276
+ .cratis-datatable__loading-cell,
1277
+ .cratis-datatable__failure-cell {
1288
1278
  padding: 2rem 1rem;
1289
1279
  color: var(--cratis-text-color-secondary);
1290
1280
  text-align: center;
@@ -322,7 +322,9 @@
322
322
  box-shadow: var(--cratis-focus-ring);
323
323
  }
324
324
  .cratis-toggle-group[data-disabled],
325
- .cratis-tabs[data-disabled] {
325
+ .cratis-tabs[data-disabled],
326
+ .cratis-toggle-group__option[data-disabled],
327
+ .cratis-tabs__tab[data-disabled] {
326
328
  cursor: not-allowed;
327
329
  opacity: var(--cratis-disabled-opacity);
328
330
  }
@@ -361,10 +363,6 @@
361
363
  box-shadow: var(--cratis-shadow-card, none);
362
364
  font-weight: 600;
363
365
  }
364
- .cratis-toggle-group__option[data-disabled] {
365
- cursor: not-allowed;
366
- opacity: var(--cratis-disabled-opacity);
367
- }
368
366
  .cratis-toggle-group__icon {
369
367
  display: inline-flex;
370
368
  }
@@ -395,10 +393,6 @@
395
393
  color: var(--cratis-text-color);
396
394
  font-weight: 600;
397
395
  }
398
- .cratis-tabs__tab[data-disabled] {
399
- cursor: not-allowed;
400
- opacity: var(--cratis-disabled-opacity);
401
- }
402
396
  .cratis-tabs__panel {
403
397
  padding: 0.75rem 0;
404
398
  outline: none;
@@ -764,7 +758,8 @@
764
758
  .cratis-number-input[data-invalid='true'] .cratis-number-input__group {
765
759
  border-color: var(--cratis-red-500);
766
760
  }
767
- .cratis-number-input[data-disabled='true'] {
761
+ .cratis-number-input[data-disabled='true'],
762
+ .cratis-number-input__step:disabled {
768
763
  cursor: not-allowed;
769
764
  opacity: var(--cratis-disabled-opacity);
770
765
  }
@@ -826,10 +821,6 @@
826
821
  outline: 2px solid var(--cratis-primary-color);
827
822
  outline-offset: -3px;
828
823
  }
829
- .cratis-number-input__step:disabled {
830
- cursor: not-allowed;
831
- opacity: var(--cratis-disabled-opacity);
832
- }
833
824
  .cratis-number-input__description,
834
825
  .cratis-number-input__error {
835
826
  display: block;
@@ -910,7 +901,8 @@
910
901
  background: var(--cratis-surface-100);
911
902
  }
912
903
  .cratis-text-input:disabled,
913
- .cratis-text-area:disabled {
904
+ .cratis-text-area:disabled,
905
+ .cratis-choice[data-disabled='true'] {
914
906
  cursor: not-allowed;
915
907
  opacity: var(--cratis-disabled-opacity);
916
908
  }
@@ -927,10 +919,6 @@
927
919
  color: var(--cratis-text-color);
928
920
  cursor: pointer;
929
921
  }
930
- .cratis-choice[data-disabled='true'] {
931
- cursor: not-allowed;
932
- opacity: var(--cratis-disabled-opacity);
933
- }
934
922
  .cratis-choice[data-readonly='true']:not([data-disabled='true']) {
935
923
  cursor: default;
936
924
  }
@@ -1227,7 +1215,8 @@
1227
1215
  /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
1228
1216
 
1229
1217
  /* ── Toolbar container ───────────────────────────────────────────────────── */
1230
- .toolbar {
1218
+ .toolbar,
1219
+ .toolbar-group {
1231
1220
  background: var(--cratis-surface-card);
1232
1221
  border: 1px solid var(--cratis-surface-border);
1233
1222
  box-shadow: var(--cratis-shadow-overlay);
@@ -1282,17 +1271,10 @@
1282
1271
  white-space: nowrap;
1283
1272
  }
1284
1273
 
1285
- /* ── Toolbar section (context switching) ────────────────────────────────── */
1286
-
1287
- /*
1288
- * The section is a fixed-size container that transitions smoothly between
1289
- * the dimensions required by each context.
1290
- * Overflow stays visible in the settled state so absolutely-positioned
1291
- * children (e.g. fan-out panels) can extend beyond the section's bounds.
1292
- * During a context resize transition, a temporary modifier clips incoming
1293
- * content so buttons do not float outside the current toolbar bounds.
1294
- */
1295
- .toolbar-section {
1274
+ /* Context sections and group slots resize alike. Only transitioning modifiers clip contents;
1275
+ settled panels can extend beyond the section bounds. */
1276
+ .toolbar-section,
1277
+ .toolbar-slot-section {
1296
1278
  position: relative;
1297
1279
  transition:
1298
1280
  width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
@@ -1517,33 +1499,7 @@
1517
1499
  gap: 0.5rem;
1518
1500
  }
1519
1501
 
1520
- /*
1521
- * Each ToolbarGroup is a self-contained pill that matches the visual style
1522
- * of a standalone Toolbar.
1523
- */
1524
- .toolbar-group {
1525
- background: var(--cratis-surface-card);
1526
- border: 1px solid var(--cratis-surface-border);
1527
- box-shadow: var(--cratis-shadow-overlay);
1528
- }
1529
-
1530
- /* ── Toolbar slot transition (ToolbarGroup slot content) ─────────────────── */
1531
-
1532
- /*
1533
- * Size-morphing container for slot content inside a ToolbarGroup or ToolbarLayout.
1534
- * Mirrors the .toolbar-section transition parameters for visual consistency —
1535
- * the container resizes smoothly while content cross-fades.
1536
- * Overflow stays visible in the settled state so absolutely-positioned children
1537
- * (fan-out and folder panels, and the hover tooltips inside them) can escape the
1538
- * section's bounds; it is only clipped while outgoing content is fading out, so
1539
- * that content does not bleed past the container mid-transition.
1540
- */
1541
- .toolbar-slot-section {
1542
- position: relative;
1543
- transition:
1544
- width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
1545
- height 0.35s cubic-bezier(0.4, 0, 0.2, 1);
1546
- }
1502
+ /* ToolbarGroup slots use the section transition above. */
1547
1503
 
1548
1504
  .toolbar-slot-section--transitioning {
1549
1505
  overflow: hidden;
@@ -665,25 +665,8 @@
665
665
  flex-shrink: 0;
666
666
  }
667
667
 
668
- /* ── Canvas control icon button ──────────────────────────────────────────── */
669
- .canvas-controls-icon-btn {
670
- color: var(--cratis-text-color-secondary);
671
- background: transparent;
672
- border: none;
673
- transition: background 0.15s, color 0.15s;
674
- }
675
-
676
- .canvas-controls-icon-btn:hover {
677
- background: var(--cratis-surface-100);
678
- color: var(--cratis-text-color);
679
- }
680
-
681
- .canvas-controls-icon-btn--active {
682
- background: var(--cratis-surface-100);
683
- color: var(--cratis-text-color);
684
- }
685
-
686
- /* ── Canvas control zoom percentage button ───────────────────────────────── */
668
+ /* ── Canvas control buttons ──────────────────────────────────────────────── */
669
+ .canvas-controls-icon-btn,
687
670
  .canvas-controls-zoom-btn {
688
671
  color: var(--cratis-text-color-secondary);
689
672
  background: transparent;
@@ -691,6 +674,8 @@
691
674
  transition: background 0.15s, color 0.15s;
692
675
  }
693
676
 
677
+ .canvas-controls-icon-btn:hover,
678
+ .canvas-controls-icon-btn--active,
694
679
  .canvas-controls-zoom-btn:hover {
695
680
  background: var(--cratis-surface-100);
696
681
  color: var(--cratis-text-color);
@@ -2430,6 +2415,10 @@
2430
2415
  cursor: not-allowed;
2431
2416
  opacity: var(--cratis-disabled-opacity);
2432
2417
  }
2418
+ .cratis-choice-field:has(.cratis-choice-field__native:disabled) {
2419
+ cursor: not-allowed;
2420
+ opacity: var(--cratis-disabled-opacity);
2421
+ }
2433
2422
  .cratis-field-input[data-invalid='true'],
2434
2423
  .cratis-field-input[aria-invalid='true'] {
2435
2424
  border-color: var(--cratis-red-500);
@@ -2465,7 +2454,9 @@
2465
2454
  .cratis-password-field__toggle:hover {
2466
2455
  background: var(--cratis-surface-hover);
2467
2456
  }
2468
- .cratis-password-field__toggle:focus-visible {
2457
+ .cratis-password-field__toggle:focus-visible,
2458
+ .cratis-slider-field__input:focus-visible,
2459
+ .cratis-color-field__input:focus-visible {
2469
2460
  outline: none;
2470
2461
  box-shadow: var(--cratis-focus-ring);
2471
2462
  }
@@ -2477,10 +2468,6 @@
2477
2468
  gap: 0.5rem;
2478
2469
  cursor: pointer;
2479
2470
  }
2480
- .cratis-choice-field:has(.cratis-choice-field__native:disabled) {
2481
- cursor: not-allowed;
2482
- opacity: var(--cratis-disabled-opacity);
2483
- }
2484
2471
  .cratis-choice-field__native {
2485
2472
  position: absolute;
2486
2473
  width: 1px;
@@ -2592,10 +2579,6 @@
2592
2579
  width: 100%;
2593
2580
  accent-color: var(--cratis-primary-color);
2594
2581
  }
2595
- .cratis-slider-field__input:focus-visible {
2596
- outline: none;
2597
- box-shadow: var(--cratis-focus-ring);
2598
- }
2599
2582
  .cratis-slider-field__value {
2600
2583
  min-width: 2.5rem;
2601
2584
  text-align: end;
@@ -2665,10 +2648,6 @@
2665
2648
  border-radius: var(--cratis-border-radius);
2666
2649
  background: var(--cratis-control-background);
2667
2650
  }
2668
- .cratis-color-field__input:focus-visible {
2669
- outline: none;
2670
- box-shadow: var(--cratis-focus-ring);
2671
- }
2672
2651
  .cratis-color-field__value {
2673
2652
  font-family: ui-monospace, monospace;
2674
2653
  }
@@ -3035,7 +3014,9 @@
3035
3014
  box-shadow: var(--cratis-focus-ring);
3036
3015
  }
3037
3016
  .cratis-toggle-group[data-disabled],
3038
- .cratis-tabs[data-disabled] {
3017
+ .cratis-tabs[data-disabled],
3018
+ .cratis-toggle-group__option[data-disabled],
3019
+ .cratis-tabs__tab[data-disabled] {
3039
3020
  cursor: not-allowed;
3040
3021
  opacity: var(--cratis-disabled-opacity);
3041
3022
  }
@@ -3074,10 +3055,6 @@
3074
3055
  box-shadow: var(--cratis-shadow-card, none);
3075
3056
  font-weight: 600;
3076
3057
  }
3077
- .cratis-toggle-group__option[data-disabled] {
3078
- cursor: not-allowed;
3079
- opacity: var(--cratis-disabled-opacity);
3080
- }
3081
3058
  .cratis-toggle-group__icon {
3082
3059
  display: inline-flex;
3083
3060
  }
@@ -3108,10 +3085,6 @@
3108
3085
  color: var(--cratis-text-color);
3109
3086
  font-weight: 600;
3110
3087
  }
3111
- .cratis-tabs__tab[data-disabled] {
3112
- cursor: not-allowed;
3113
- opacity: var(--cratis-disabled-opacity);
3114
- }
3115
3088
  .cratis-tabs__panel {
3116
3089
  padding: 0.75rem 0;
3117
3090
  outline: none;
@@ -3477,7 +3450,8 @@
3477
3450
  .cratis-number-input[data-invalid='true'] .cratis-number-input__group {
3478
3451
  border-color: var(--cratis-red-500);
3479
3452
  }
3480
- .cratis-number-input[data-disabled='true'] {
3453
+ .cratis-number-input[data-disabled='true'],
3454
+ .cratis-number-input__step:disabled {
3481
3455
  cursor: not-allowed;
3482
3456
  opacity: var(--cratis-disabled-opacity);
3483
3457
  }
@@ -3539,10 +3513,6 @@
3539
3513
  outline: 2px solid var(--cratis-primary-color);
3540
3514
  outline-offset: -3px;
3541
3515
  }
3542
- .cratis-number-input__step:disabled {
3543
- cursor: not-allowed;
3544
- opacity: var(--cratis-disabled-opacity);
3545
- }
3546
3516
  .cratis-number-input__description,
3547
3517
  .cratis-number-input__error {
3548
3518
  display: block;
@@ -3623,7 +3593,8 @@
3623
3593
  background: var(--cratis-surface-100);
3624
3594
  }
3625
3595
  .cratis-text-input:disabled,
3626
- .cratis-text-area:disabled {
3596
+ .cratis-text-area:disabled,
3597
+ .cratis-choice[data-disabled='true'] {
3627
3598
  cursor: not-allowed;
3628
3599
  opacity: var(--cratis-disabled-opacity);
3629
3600
  }
@@ -3640,10 +3611,6 @@
3640
3611
  color: var(--cratis-text-color);
3641
3612
  cursor: pointer;
3642
3613
  }
3643
- .cratis-choice[data-disabled='true'] {
3644
- cursor: not-allowed;
3645
- opacity: var(--cratis-disabled-opacity);
3646
- }
3647
3614
  .cratis-choice[data-readonly='true']:not([data-disabled='true']) {
3648
3615
  cursor: default;
3649
3616
  }
@@ -3997,7 +3964,9 @@
3997
3964
  background: var(--cratis-highlight-bg);
3998
3965
  color: var(--cratis-highlight-text-color);
3999
3966
  }
4000
- .cratis-datatable__empty-cell {
3967
+ .cratis-datatable__empty-cell,
3968
+ .cratis-datatable__loading-cell,
3969
+ .cratis-datatable__failure-cell {
4001
3970
  padding: 2rem 1rem;
4002
3971
  color: var(--cratis-text-color-secondary);
4003
3972
  text-align: center;
@@ -4846,7 +4815,8 @@
4846
4815
  box-shadow: inset 0 1px 0 var(--cratis-surface-border);
4847
4816
  }
4848
4817
 
4849
- .pv-search input:focus {
4818
+ .pv-search input:focus,
4819
+ .pv-filter-group-search input:focus {
4850
4820
  outline: none;
4851
4821
  border-color: var(--cratis-primary-color);
4852
4822
  box-shadow: var(--cratis-focus-ring);
@@ -4866,12 +4836,6 @@
4866
4836
  font-size: 0.85rem;
4867
4837
  }
4868
4838
 
4869
- .pv-filter-group-search input:focus {
4870
- outline: none;
4871
- border-color: var(--cratis-primary-color);
4872
- box-shadow: var(--cratis-focus-ring);
4873
- }
4874
-
4875
4839
  /* Reusable checkbox/radio option list (CheckboxListFilter) */
4876
4840
  .pv-option-list {
4877
4841
  position: relative;
@@ -5534,7 +5498,8 @@
5534
5498
  }
5535
5499
 
5536
5500
  .pv-filter-button.active,
5537
- .pv-filter-button:hover {
5501
+ .pv-filter-button:hover,
5502
+ .pv-filter-icon-button.active {
5538
5503
  background: var(--cratis-surface-hover);
5539
5504
  box-shadow: var(--cratis-focus-ring);
5540
5505
  }
@@ -5562,11 +5527,6 @@
5562
5527
  background: var(--cratis-surface-hover);
5563
5528
  }
5564
5529
 
5565
- .pv-filter-icon-button.active {
5566
- background: var(--cratis-surface-hover);
5567
- box-shadow: var(--cratis-focus-ring);
5568
- }
5569
-
5570
5530
  .pv-filter-badge {
5571
5531
  position: absolute;
5572
5532
  top: -4px;
@@ -5953,7 +5913,8 @@
5953
5913
  background: var(--cratis-highlight-bg);
5954
5914
  }
5955
5915
 
5956
- .pv-axis-label:focus-visible {
5916
+ .pv-axis-label:focus-visible,
5917
+ .pv-card:focus-visible {
5957
5918
  outline: none;
5958
5919
  border-color: var(--cratis-primary-color);
5959
5920
  box-shadow: var(--cratis-focus-ring);
@@ -6083,12 +6044,6 @@
6083
6044
  transition: border-color 160ms ease;
6084
6045
  }
6085
6046
 
6086
- .pv-card:focus-visible {
6087
- outline: none;
6088
- border-color: var(--cratis-primary-color);
6089
- box-shadow: var(--cratis-focus-ring);
6090
- }
6091
-
6092
6047
  .pv-card.selected {
6093
6048
  border-color: var(--cratis-primary-color);
6094
6049
  box-shadow:
@@ -6420,6 +6375,18 @@
6420
6375
  min-height: 400px;
6421
6376
  }
6422
6377
 
6378
+ .pv-loading__label {
6379
+ position: absolute;
6380
+ width: 1px;
6381
+ height: 1px;
6382
+ padding: 0;
6383
+ margin: -1px;
6384
+ overflow: hidden;
6385
+ clip: rect(0, 0, 0, 0);
6386
+ white-space: nowrap;
6387
+ border: 0;
6388
+ }
6389
+
6423
6390
  .pv-spinner {
6424
6391
  width: 80px;
6425
6392
  height: 80px;
@@ -7421,7 +7388,8 @@
7421
7388
  /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
7422
7389
 
7423
7390
  /* ── Toolbar container ───────────────────────────────────────────────────── */
7424
- .toolbar {
7391
+ .toolbar,
7392
+ .toolbar-group {
7425
7393
  background: var(--cratis-surface-card);
7426
7394
  border: 1px solid var(--cratis-surface-border);
7427
7395
  box-shadow: var(--cratis-shadow-overlay);
@@ -7476,17 +7444,10 @@
7476
7444
  white-space: nowrap;
7477
7445
  }
7478
7446
 
7479
- /* ── Toolbar section (context switching) ────────────────────────────────── */
7480
-
7481
- /*
7482
- * The section is a fixed-size container that transitions smoothly between
7483
- * the dimensions required by each context.
7484
- * Overflow stays visible in the settled state so absolutely-positioned
7485
- * children (e.g. fan-out panels) can extend beyond the section's bounds.
7486
- * During a context resize transition, a temporary modifier clips incoming
7487
- * content so buttons do not float outside the current toolbar bounds.
7488
- */
7489
- .toolbar-section {
7447
+ /* Context sections and group slots resize alike. Only transitioning modifiers clip contents;
7448
+ settled panels can extend beyond the section bounds. */
7449
+ .toolbar-section,
7450
+ .toolbar-slot-section {
7490
7451
  position: relative;
7491
7452
  transition:
7492
7453
  width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
@@ -7711,33 +7672,7 @@
7711
7672
  gap: 0.5rem;
7712
7673
  }
7713
7674
 
7714
- /*
7715
- * Each ToolbarGroup is a self-contained pill that matches the visual style
7716
- * of a standalone Toolbar.
7717
- */
7718
- .toolbar-group {
7719
- background: var(--cratis-surface-card);
7720
- border: 1px solid var(--cratis-surface-border);
7721
- box-shadow: var(--cratis-shadow-overlay);
7722
- }
7723
-
7724
- /* ── Toolbar slot transition (ToolbarGroup slot content) ─────────────────── */
7725
-
7726
- /*
7727
- * Size-morphing container for slot content inside a ToolbarGroup or ToolbarLayout.
7728
- * Mirrors the .toolbar-section transition parameters for visual consistency —
7729
- * the container resizes smoothly while content cross-fades.
7730
- * Overflow stays visible in the settled state so absolutely-positioned children
7731
- * (fan-out and folder panels, and the hover tooltips inside them) can escape the
7732
- * section's bounds; it is only clipped while outgoing content is fading out, so
7733
- * that content does not bleed past the container mid-transition.
7734
- */
7735
- .toolbar-slot-section {
7736
- position: relative;
7737
- transition:
7738
- width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
7739
- height 0.35s cubic-bezier(0.4, 0, 0.2, 1);
7740
- }
7675
+ /* ToolbarGroup slots use the section transition above. */
7741
7676
 
7742
7677
  .toolbar-slot-section--transitioning {
7743
7678
  overflow: hidden;