@svadmin/ui 0.84.1 → 0.86.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 (71) hide show
  1. package/README.md +29 -0
  2. package/dist/app-shell.css +216 -0
  3. package/dist/app.css +496 -171
  4. package/dist/app.theme.css +496 -171
  5. package/dist/component-registry.d.ts +7292 -529
  6. package/dist/component-registry.js +32 -3
  7. package/dist/components/AppShellPage.svelte +172 -0
  8. package/dist/components/AppShellPage.svelte.d.ts +30 -0
  9. package/dist/components/AuthPageShell.svelte +14 -7
  10. package/dist/components/AuthPageShell.svelte.d.ts +1 -0
  11. package/dist/components/AutoForm.svelte +7 -12
  12. package/dist/components/AutoForm.svelte.d.ts +0 -1
  13. package/dist/components/AutoTable.svelte +2 -0
  14. package/dist/components/AutoTable.svelte.d.ts +2 -0
  15. package/dist/components/ConfigurationPage.svelte +0 -3
  16. package/dist/components/ConfigurationPage.svelte.d.ts +0 -1
  17. package/dist/components/CreatePage.svelte +1 -5
  18. package/dist/components/CreatePage.svelte.d.ts +0 -1
  19. package/dist/components/EditPage.svelte +1 -5
  20. package/dist/components/EditPage.svelte.d.ts +0 -1
  21. package/dist/components/FieldRenderer.svelte +2 -10
  22. package/dist/components/FieldRenderer.svelte.d.ts +0 -1
  23. package/dist/components/ListPage.svelte +2 -5
  24. package/dist/components/ListPage.svelte.d.ts +0 -1
  25. package/dist/components/PageHeader.svelte +1 -3
  26. package/dist/components/PageHeader.svelte.d.ts +0 -1
  27. package/dist/components/PagePattern.svelte +36 -13
  28. package/dist/components/PagePattern.svelte.d.ts +7 -0
  29. package/dist/components/QuickEditDrawer.svelte +0 -1
  30. package/dist/components/ShowPage.svelte +5 -9
  31. package/dist/components/ShowPage.svelte.d.ts +0 -1
  32. package/dist/components/SvarAutoTable.svelte +2 -1
  33. package/dist/components/SvarDataGrid.svelte +8 -4
  34. package/dist/components/SvarDataGrid.svelte.d.ts +3 -0
  35. package/dist/components/SvarResourceTable.svelte +0 -1
  36. package/dist/components/SvarResourceTable.svelte.d.ts +0 -1
  37. package/dist/components/SvarResourceTableView.svelte +2 -2
  38. package/dist/components/auto-table-grid.d.ts +1 -0
  39. package/dist/components/content/ContentPageHeader.svelte +2 -1
  40. package/dist/components/content/ContentPageHeader.svelte.d.ts +1 -0
  41. package/dist/components/content/ContentPageShell.svelte +1 -1
  42. package/dist/components/content/ContentPageShell.svelte.d.ts +1 -0
  43. package/dist/components/content/DataPanel.svelte +58 -0
  44. package/dist/components/content/DataPanel.svelte.d.ts +16 -0
  45. package/dist/components/content/DescriptionList.svelte +5 -8
  46. package/dist/components/content/DescriptionList.svelte.d.ts +0 -1
  47. package/dist/components/content/FilterToolbar.svelte +2 -5
  48. package/dist/components/content/FilterToolbar.svelte.d.ts +0 -1
  49. package/dist/components/content/NetworkTable.svelte +3 -3
  50. package/dist/components/content/NetworkTable.svelte.d.ts +0 -1
  51. package/dist/components/content/PageSection.svelte +1 -1
  52. package/dist/components/content/StatusTabs.svelte +2 -7
  53. package/dist/components/content/StatusTabs.svelte.d.ts +0 -1
  54. package/dist/components/content/index.d.ts +1 -0
  55. package/dist/components/content/index.js +1 -0
  56. package/dist/components/ui/table/index.d.ts +0 -1
  57. package/dist/components/ui/table/table.svelte +1 -0
  58. package/dist/components/ui/table/table.svelte.d.ts +1 -0
  59. package/dist/components.css +1 -11
  60. package/dist/data-panel.css +88 -0
  61. package/dist/design-contract.d.ts +11 -0
  62. package/dist/design-contract.js +8 -0
  63. package/dist/design-system.d.ts +3 -2
  64. package/dist/design-system.js +3 -2
  65. package/dist/index.d.ts +4 -2
  66. package/dist/index.js +2 -0
  67. package/dist/page-chrome.css +53 -61
  68. package/dist/recipes.d.ts +67 -154
  69. package/dist/recipes.js +32 -68
  70. package/dist/styles/recipes.css +15 -48
  71. package/package.json +4 -4
package/dist/app.css CHANGED
@@ -5522,23 +5522,16 @@
5522
5522
  --container-xs: 20rem;
5523
5523
  --container-sm: 24rem;
5524
5524
  --container-xl: 36rem;
5525
- --container-2xl: 42rem;
5526
5525
  --container-3xl: 48rem;
5527
5526
  --text-xs: 0.75rem;
5528
5527
  --text-xs--line-height: calc(1 / 0.75);
5529
5528
  --text-sm: 0.875rem;
5530
5529
  --text-sm--line-height: calc(1.25 / 0.875);
5531
- --text-base: 1rem;
5532
- --text-base--line-height: calc(1.5 / 1);
5533
- --text-lg: 1.125rem;
5534
- --text-lg--line-height: calc(1.75 / 1.125);
5535
- --text-xl: 1.25rem;
5536
- --text-xl--line-height: calc(1.75 / 1.25);
5537
5530
  --text-2xl: 1.5rem;
5538
5531
  --text-2xl--line-height: calc(2 / 1.5);
5539
5532
  --font-weight-medium: 500;
5540
5533
  --font-weight-semibold: 600;
5541
- --leading-tight: 1.25;
5534
+ --radius-md: calc(var(--radius) - 2px);
5542
5535
  --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
5543
5536
  --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);
5544
5537
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
@@ -5605,6 +5598,9 @@
5605
5598
  .mt-3 {
5606
5599
  margin-top: calc(var(--spacing) * 3);
5607
5600
  }
5601
+ .mt-\[var\(--svadmin-space-1\)\] {
5602
+ margin-top: var(--svadmin-space-1);
5603
+ }
5608
5604
  .block {
5609
5605
  display: block;
5610
5606
  }
@@ -5653,9 +5649,6 @@
5653
5649
  .w-full {
5654
5650
  width: 100%;
5655
5651
  }
5656
- .max-w-2xl {
5657
- max-width: var(--container-2xl);
5658
- }
5659
5652
  .max-w-3xl {
5660
5653
  max-width: var(--container-3xl);
5661
5654
  }
@@ -5665,9 +5658,6 @@
5665
5658
  .max-w-\[64rem\] {
5666
5659
  max-width: 64rem;
5667
5660
  }
5668
- .max-w-\[65ch\] {
5669
- max-width: 65ch;
5670
- }
5671
5661
  .max-w-\[74rem\] {
5672
5662
  max-width: 74rem;
5673
5663
  }
@@ -5677,6 +5667,9 @@
5677
5667
  .max-w-\[92rem\] {
5678
5668
  max-width: 92rem;
5679
5669
  }
5670
+ .max-w-\[var\(--svadmin-measure\)\] {
5671
+ max-width: var(--svadmin-measure);
5672
+ }
5680
5673
  .max-w-full {
5681
5674
  max-width: 100%;
5682
5675
  }
@@ -5695,8 +5688,8 @@
5695
5688
  .flex-1 {
5696
5689
  flex: 1;
5697
5690
  }
5698
- .flex-\[1_1_16rem\] {
5699
- flex: 1 1 16rem;
5691
+ .flex-\[1_1_var\(--svadmin-chrome-basis\)\] {
5692
+ flex: 1 1 var(--svadmin-chrome-basis);
5700
5693
  }
5701
5694
  .flex-shrink {
5702
5695
  flex-shrink: 1;
@@ -5770,15 +5763,14 @@
5770
5763
  .gap-8 {
5771
5764
  gap: calc(var(--spacing) * 8);
5772
5765
  }
5773
- :where(.space-y-0\.5 > :not(:last-child)) {
5774
- --tw-space-y-reverse: 0;
5775
- margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));
5776
- margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));
5766
+ .gap-\[var\(--svadmin-space-2\)\] {
5767
+ gap: var(--svadmin-space-2);
5777
5768
  }
5778
- :where(.space-y-1 > :not(:last-child)) {
5779
- --tw-space-y-reverse: 0;
5780
- margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));
5781
- margin-block-end: calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)));
5769
+ .gap-\[var\(--svadmin-space-3\)\] {
5770
+ gap: var(--svadmin-space-3);
5771
+ }
5772
+ .gap-\[var\(--svadmin-space-5\)\] {
5773
+ gap: var(--svadmin-space-5);
5782
5774
  }
5783
5775
  :where(.space-y-2 > :not(:last-child)) {
5784
5776
  --tw-space-y-reverse: 0;
@@ -5805,6 +5797,21 @@
5805
5797
  margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));
5806
5798
  margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
5807
5799
  }
5800
+ :where(.space-y-\[var\(--svadmin-space-1\)\] > :not(:last-child)) {
5801
+ --tw-space-y-reverse: 0;
5802
+ margin-block-start: calc(var(--svadmin-space-1) * var(--tw-space-y-reverse));
5803
+ margin-block-end: calc(var(--svadmin-space-1) * calc(1 - var(--tw-space-y-reverse)));
5804
+ }
5805
+ :where(.space-y-\[var\(--svadmin-space-3\)\] > :not(:last-child)) {
5806
+ --tw-space-y-reverse: 0;
5807
+ margin-block-start: calc(var(--svadmin-space-3) * var(--tw-space-y-reverse));
5808
+ margin-block-end: calc(var(--svadmin-space-3) * calc(1 - var(--tw-space-y-reverse)));
5809
+ }
5810
+ :where(.space-y-\[var\(--svadmin-space-5\)\] > :not(:last-child)) {
5811
+ --tw-space-y-reverse: 0;
5812
+ margin-block-start: calc(var(--svadmin-space-5) * var(--tw-space-y-reverse));
5813
+ margin-block-end: calc(var(--svadmin-space-5) * calc(1 - var(--tw-space-y-reverse)));
5814
+ }
5808
5815
  .overflow-hidden {
5809
5816
  overflow: hidden;
5810
5817
  }
@@ -5895,9 +5902,6 @@
5895
5902
  .p-0 {
5896
5903
  padding: 0px;
5897
5904
  }
5898
- .p-3 {
5899
- padding: calc(var(--spacing) * 3);
5900
- }
5901
5905
  .p-4 {
5902
5906
  padding: calc(var(--spacing) * 4);
5903
5907
  }
@@ -5910,6 +5914,9 @@
5910
5914
  .px-4 {
5911
5915
  padding-inline: calc(var(--spacing) * 4);
5912
5916
  }
5917
+ .px-\[var\(--svadmin-space-4\)\] {
5918
+ padding-inline: var(--svadmin-space-4);
5919
+ }
5913
5920
  .py-1 {
5914
5921
  padding-block: var(--spacing);
5915
5922
  }
@@ -5919,9 +5926,6 @@
5919
5926
  .py-3 {
5920
5927
  padding-block: calc(var(--spacing) * 3);
5921
5928
  }
5922
- .py-4 {
5923
- padding-block: calc(var(--spacing) * 4);
5924
- }
5925
5929
  .py-5 {
5926
5930
  padding-block: calc(var(--spacing) * 5);
5927
5931
  }
@@ -5931,6 +5935,15 @@
5931
5935
  .py-\[7px\] {
5932
5936
  padding-block: 7px;
5933
5937
  }
5938
+ .py-\[var\(--svadmin-space-1\)\] {
5939
+ padding-block: var(--svadmin-space-1);
5940
+ }
5941
+ .py-\[var\(--svadmin-space-3\)\] {
5942
+ padding-block: var(--svadmin-space-3);
5943
+ }
5944
+ .py-\[var\(--svadmin-space-4\)\] {
5945
+ padding-block: var(--svadmin-space-4);
5946
+ }
5934
5947
  .text-left {
5935
5948
  text-align: left;
5936
5949
  }
@@ -5938,22 +5951,10 @@
5938
5951
  font-size: var(--text-2xl);
5939
5952
  line-height: var(--tw-leading, var(--text-2xl--line-height));
5940
5953
  }
5941
- .text-base {
5942
- font-size: var(--text-base);
5943
- line-height: var(--tw-leading, var(--text-base--line-height));
5944
- }
5945
- .text-lg {
5946
- font-size: var(--text-lg);
5947
- line-height: var(--tw-leading, var(--text-lg--line-height));
5948
- }
5949
5954
  .text-sm {
5950
5955
  font-size: var(--text-sm);
5951
5956
  line-height: var(--tw-leading, var(--text-sm--line-height));
5952
5957
  }
5953
- .text-xl {
5954
- font-size: var(--text-xl);
5955
- line-height: var(--tw-leading, var(--text-xl--line-height));
5956
- }
5957
5958
  .text-xs {
5958
5959
  font-size: var(--text-xs);
5959
5960
  line-height: var(--tw-leading, var(--text-xs--line-height));
@@ -5961,17 +5962,32 @@
5961
5962
  .text-\[0\.8125rem\] {
5962
5963
  font-size: 0.8125rem;
5963
5964
  }
5964
- .leading-5 {
5965
- --tw-leading: calc(var(--spacing) * 5);
5966
- line-height: calc(var(--spacing) * 5);
5965
+ .text-\[length\:var\(--svadmin-text-body\)\] {
5966
+ font-size: var(--svadmin-text-body);
5967
+ }
5968
+ .text-\[length\:var\(--svadmin-text-caption\)\] {
5969
+ font-size: var(--svadmin-text-caption);
5970
+ }
5971
+ .text-\[length\:var\(--svadmin-text-label\)\] {
5972
+ font-size: var(--svadmin-text-label);
5973
+ }
5974
+ .text-\[length\:var\(--svadmin-text-section\)\] {
5975
+ font-size: var(--svadmin-text-section);
5976
+ }
5977
+ .text-\[length\:var\(--svadmin-text-title\)\] {
5978
+ font-size: var(--svadmin-text-title);
5967
5979
  }
5968
5980
  .leading-6 {
5969
5981
  --tw-leading: calc(var(--spacing) * 6);
5970
5982
  line-height: calc(var(--spacing) * 6);
5971
5983
  }
5972
- .leading-tight {
5973
- --tw-leading: var(--leading-tight);
5974
- line-height: var(--leading-tight);
5984
+ .leading-\[var\(--svadmin-leading-body\)\] {
5985
+ --tw-leading: var(--svadmin-leading-body);
5986
+ line-height: var(--svadmin-leading-body);
5987
+ }
5988
+ .leading-\[var\(--svadmin-leading-tight\)\] {
5989
+ --tw-leading: var(--svadmin-leading-tight);
5990
+ line-height: var(--svadmin-leading-tight);
5975
5991
  }
5976
5992
  .font-medium {
5977
5993
  --tw-font-weight: var(--font-weight-medium);
@@ -6095,15 +6111,9 @@
6095
6111
  .\[--svadmin-metric-state-border-width\:3px\] {
6096
6112
  --svadmin-metric-state-border-width: 3px;
6097
6113
  }
6098
- .\[--svadmin-metric-state-height\:4\.5rem\] {
6099
- --svadmin-metric-state-height: 4.5rem;
6100
- }
6101
6114
  .\[--svadmin-metric-state-height\:6rem\] {
6102
6115
  --svadmin-metric-state-height: 6rem;
6103
6116
  }
6104
- .\[--svadmin-metric-state-padding\:0\.75rem\] {
6105
- --svadmin-metric-state-padding: 0.75rem;
6106
- }
6107
6117
  .\[--svadmin-metric-state-padding\:1\.25rem\] {
6108
6118
  --svadmin-metric-state-padding: 1.25rem;
6109
6119
  }
@@ -6122,11 +6132,8 @@
6122
6132
  .\[--svadmin-status-color\:var\(--warning\)\] {
6123
6133
  --svadmin-status-color: var(--warning);
6124
6134
  }
6125
- .\[--svadmin-table-state-height\:6rem\] {
6126
- --svadmin-table-state-height: 6rem;
6127
- }
6128
- .\[--svadmin-table-state-height\:8rem\] {
6129
- --svadmin-table-state-height: 8rem;
6135
+ .\[--svadmin-table-state-height\:var\(--svadmin-table-state-min-h\)\] {
6136
+ --svadmin-table-state-height: var(--svadmin-table-state-min-h);
6130
6137
  }
6131
6138
  .\[writing-mode\:vertical-rl\] {
6132
6139
  writing-mode: vertical-rl;
@@ -6207,33 +6214,17 @@
6207
6214
  .\[\&_\[data-command-group-heading\]\]\:uppercase [data-command-group-heading] {
6208
6215
  text-transform: uppercase;
6209
6216
  }
6210
- .\[\&\[data-slot\=table-cell\]\]\:py-1[data-slot=table-cell] {
6211
- padding-block: var(--spacing);
6212
- }
6213
- .\[\&\[data-slot\=table-cell\]\]\:py-2[data-slot=table-cell] {
6214
- padding-block: calc(var(--spacing) * 2);
6215
- }
6216
- .\[\&\[data-slot\=table-cell\]\]\:text-sm[data-slot=table-cell] {
6217
- font-size: var(--text-sm);
6218
- line-height: var(--tw-leading, var(--text-sm--line-height));
6219
- }
6220
- .\[\&\[data-slot\=table-cell\]\]\:text-xs[data-slot=table-cell] {
6221
- font-size: var(--text-xs);
6222
- line-height: var(--tw-leading, var(--text-xs--line-height));
6223
- }
6224
- .\[\&\[data-slot\=table-head\]\]\:py-1[data-slot=table-head] {
6225
- padding-block: var(--spacing);
6217
+ .\[\&\[data-slot\=table-cell\]\]\:py-\[var\(--svadmin-space-2\)\][data-slot=table-cell] {
6218
+ padding-block: var(--svadmin-space-2);
6226
6219
  }
6227
- .\[\&\[data-slot\=table-head\]\]\:py-2[data-slot=table-head] {
6228
- padding-block: calc(var(--spacing) * 2);
6220
+ .\[\&\[data-slot\=table-cell\]\]\:text-\[length\:var\(--svadmin-text-body\)\][data-slot=table-cell] {
6221
+ font-size: var(--svadmin-text-body);
6229
6222
  }
6230
- .\[\&\[data-slot\=table-head\]\]\:text-sm[data-slot=table-head] {
6231
- font-size: var(--text-sm);
6232
- line-height: var(--tw-leading, var(--text-sm--line-height));
6223
+ .\[\&\[data-slot\=table-head\]\]\:py-\[var\(--svadmin-space-2\)\][data-slot=table-head] {
6224
+ padding-block: var(--svadmin-space-2);
6233
6225
  }
6234
- .\[\&\[data-slot\=table-head\]\]\:text-xs[data-slot=table-head] {
6235
- font-size: var(--text-xs);
6236
- line-height: var(--tw-leading, var(--text-xs--line-height));
6226
+ .\[\&\[data-slot\=table-head\]\]\:text-\[length\:var\(--svadmin-text-body\)\][data-slot=table-head] {
6227
+ font-size: var(--svadmin-text-body);
6237
6228
  }
6238
6229
  }
6239
6230
  @property --tw-rotate-x {
@@ -6471,25 +6462,32 @@
6471
6462
  }
6472
6463
  }
6473
6464
  @layer components {
6465
+ /*
6466
+ * The skip link uses a generated translate-y utility, whose composite
6467
+ * translate declaration is invalid when no x-axis value is present.
6468
+ * Keep this accessibility control hidden until focus without relying on
6469
+ * the host application's utility CSS implementation.
6470
+ */
6471
+ [data-svadmin-skip-link] {
6472
+ transform: translateY(calc(-100% - var(--svadmin-space-4)));
6473
+ }
6474
+ [data-svadmin-skip-link]:focus,
6475
+ [data-svadmin-skip-link]:focus-visible {
6476
+ transform: translateY(0);
6477
+ }
6478
+
6474
6479
  .svadmin-page-header {
6475
- --svadmin-page-header-gap: 0.5rem;
6480
+ --svadmin-page-header-gap: var(--svadmin-space-2);
6476
6481
  min-width: 0;
6477
6482
  }
6478
- .svadmin-page-header[data-density="compact"] {
6479
- --svadmin-page-header-gap: 0.375rem;
6480
- }
6481
6483
  .svadmin-page-header__breadcrumbs {
6482
- margin-bottom: 1rem;
6483
- }
6484
- .svadmin-page-header[data-density="compact"] .svadmin-page-header__breadcrumbs {
6485
- margin-bottom: 0.375rem;
6486
- font-size: 0.75rem;
6484
+ margin-bottom: var(--svadmin-space-4);
6487
6485
  }
6488
6486
  .svadmin-page-header__row, .svadmin-filter-toolbar__row {
6489
6487
  display: flex;
6490
6488
  flex-direction: column;
6491
6489
  min-width: 0;
6492
- gap: 0.5rem;
6490
+ gap: var(--svadmin-space-2);
6493
6491
  }
6494
6492
  .svadmin-page-header__row {
6495
6493
  gap: var(--svadmin-page-header-gap);
@@ -6498,7 +6496,7 @@
6498
6496
  display: flex;
6499
6497
  align-items: center;
6500
6498
  min-width: 0;
6501
- gap: 0.625rem;
6499
+ gap: var(--svadmin-space-3);
6502
6500
  }
6503
6501
  .svadmin-page-header__text {
6504
6502
  min-width: 0;
@@ -6508,7 +6506,7 @@
6508
6506
  flex-wrap: wrap;
6509
6507
  align-items: center;
6510
6508
  min-width: 0;
6511
- gap: 0.5rem;
6509
+ gap: var(--svadmin-space-2);
6512
6510
  }
6513
6511
  .svadmin-page-header__tags, .svadmin-page-header__actions {
6514
6512
  max-width: 100%;
@@ -6517,24 +6515,17 @@
6517
6515
  .svadmin-page-header__title {
6518
6516
  min-width: 0;
6519
6517
  color: var(--foreground);
6520
- font-size: 1.25rem;
6518
+ font-size: var(--svadmin-text-title);
6521
6519
  font-weight: 600;
6522
- line-height: 1.75rem;
6520
+ line-height: var(--svadmin-leading-tight);
6523
6521
  overflow-wrap: anywhere;
6524
6522
  }
6525
6523
  .svadmin-page-header__description {
6526
6524
  color: var(--muted-foreground);
6527
- font-size: 0.875rem;
6528
- line-height: 1.25rem;
6525
+ font-size: var(--svadmin-text-body);
6526
+ line-height: var(--svadmin-leading-body);
6529
6527
  overflow-wrap: anywhere;
6530
6528
  }
6531
- .svadmin-page-header[data-density="compact"] .svadmin-page-header__title {
6532
- font-size: 1.125rem;
6533
- }
6534
- .svadmin-page-header[data-density="compact"] .svadmin-page-header__description {
6535
- font-size: 0.75rem;
6536
- line-height: 1rem;
6537
- }
6538
6529
  .svadmin-page-header .svadmin-page-header__back {
6539
6530
  flex-shrink: 0;
6540
6531
  color: var(--muted-foreground);
@@ -6543,14 +6534,14 @@
6543
6534
  color: var(--foreground);
6544
6535
  }
6545
6536
  .svadmin-page-header .svadmin-page-header__back-icon {
6546
- width: 1rem;
6547
- height: 1rem;
6537
+ width: var(--svadmin-space-4);
6538
+ height: var(--svadmin-space-4);
6548
6539
  }
6549
6540
  .svadmin-breadcrumbs {
6550
6541
  min-width: 0;
6551
6542
  }
6552
6543
  .svadmin-breadcrumbs--spaced {
6553
- margin-bottom: 1rem;
6544
+ margin-bottom: var(--svadmin-space-4);
6554
6545
  }
6555
6546
  .svadmin-breadcrumbs__item {
6556
6547
  display: inline-flex;
@@ -6561,16 +6552,11 @@
6561
6552
  color: var(--muted-foreground);
6562
6553
  }
6563
6554
  .svadmin-filter-toolbar {
6564
- --svadmin-filter-control-height: 2.25rem;
6565
- --svadmin-filter-control-font: 0.875rem;
6566
- --svadmin-filter-search-icon-size: 1rem;
6555
+ --svadmin-filter-control-height: var(--svadmin-control-h);
6556
+ --svadmin-filter-control-font: var(--svadmin-text-body);
6557
+ --svadmin-filter-search-icon-size: var(--svadmin-space-4);
6567
6558
  min-width: 0;
6568
6559
  }
6569
- .svadmin-filter-toolbar[data-density="compact"] {
6570
- --svadmin-filter-control-height: 2rem;
6571
- --svadmin-filter-control-font: 0.75rem;
6572
- --svadmin-filter-search-icon-size: 0.875rem;
6573
- }
6574
6560
  .svadmin-filter-toolbar__search {
6575
6561
  position: relative;
6576
6562
  min-width: 0;
@@ -6578,60 +6564,57 @@
6578
6564
  .svadmin-filter-toolbar__search-icon {
6579
6565
  position: absolute;
6580
6566
  top: 50%;
6581
- inset-inline-start: 0.75rem;
6567
+ inset-inline-start: var(--svadmin-space-3);
6582
6568
  width: var(--svadmin-filter-search-icon-size);
6583
6569
  height: var(--svadmin-filter-search-icon-size);
6584
6570
  color: var(--muted-foreground);
6585
6571
  transform: translateY(-50%);
6586
6572
  pointer-events: none;
6587
6573
  }
6588
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__input {
6574
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__input {
6589
6575
  height: var(--svadmin-filter-control-height);
6590
- padding-inline: 2.25rem;
6576
+ padding-inline: calc(var(--svadmin-space-5) + var(--svadmin-space-3));
6591
6577
  font-size: var(--svadmin-filter-control-font);
6592
- line-height: 1rem;
6578
+ line-height: var(--svadmin-leading-tight);
6593
6579
  }
6594
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__clear {
6580
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__clear {
6595
6581
  position: absolute;
6596
6582
  top: 50%;
6597
- inset-inline-end: 0.25rem;
6583
+ inset-inline-end: var(--svadmin-space-1);
6598
6584
  transform: translateY(-50%);
6599
6585
  }
6600
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__toggle {
6586
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__toggle {
6601
6587
  flex-shrink: 0;
6602
- gap: 0.375rem;
6588
+ gap: var(--svadmin-space-2);
6603
6589
  height: var(--svadmin-filter-control-height);
6604
6590
  font-size: var(--svadmin-filter-control-font);
6605
6591
  max-width: 100%;
6606
6592
  white-space: normal;
6607
6593
  overflow-wrap: anywhere;
6608
6594
  }
6609
- .svadmin-filter-toolbar[data-density="compact"] .svadmin-filter-toolbar__toggle {
6610
- padding-inline: 0.625rem;
6611
- }
6612
6595
  .svadmin-filter-toolbar .svadmin-filter-toolbar__control-icon {
6613
- width: 0.875rem;
6614
- height: 0.875rem;
6596
+ width: var(--svadmin-space-3);
6597
+ height: var(--svadmin-space-3);
6615
6598
  }
6616
6599
  .svadmin-filter-toolbar .svadmin-filter-toolbar__chevron {
6617
- width: 0.75rem;
6618
- height: 0.75rem;
6619
- margin-inline-start: 0.125rem;
6600
+ width: var(--svadmin-space-3);
6601
+ height: var(--svadmin-space-3);
6602
+ margin-inline-start: var(--svadmin-space-1);
6620
6603
  color: var(--muted-foreground);
6621
6604
  }
6622
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__count {
6623
- height: 1rem;
6624
- min-height: 1rem;
6625
- min-width: 1rem;
6626
- margin-inline-start: 0.125rem;
6627
- padding: 0 0.25rem;
6628
- font-size: 0.625rem;
6605
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__count {
6606
+ height: var(--svadmin-space-4);
6607
+ min-height: var(--svadmin-space-4);
6608
+ min-width: var(--svadmin-space-4);
6609
+ margin-inline-start: var(--svadmin-space-1);
6610
+ padding: 0 var(--svadmin-space-1);
6611
+ font-size: var(--svadmin-text-caption);
6629
6612
  font-weight: 600;
6630
6613
  line-height: 1;
6631
6614
  font-variant-numeric: tabular-nums;
6632
6615
  }
6633
6616
  .svadmin-filter-toolbar .svadmin-filter-toolbar-advanced {
6634
- margin-top: 0.5rem;
6617
+ margin-top: var(--svadmin-space-2);
6635
6618
  border: 1px solid var(--border);
6636
6619
  @supports (color: color-mix(in lab, red, red)) {
6637
6620
  border: 1px solid color-mix(in oklch, var(--border) 60%, transparent);
@@ -6641,7 +6624,7 @@
6641
6624
  @supports (color: color-mix(in lab, red, red)) {
6642
6625
  background: color-mix(in oklch, var(--muted) 20%, transparent);
6643
6626
  }
6644
- padding: 0.75rem;
6627
+ padding: var(--svadmin-space-3);
6645
6628
  overflow-wrap: anywhere;
6646
6629
  }
6647
6630
  @media (min-width: 640px) {
@@ -6654,13 +6637,317 @@
6654
6637
  justify-content: space-between;
6655
6638
  }
6656
6639
  .svadmin-page-header__heading {
6657
- flex: 1 1 16rem;
6640
+ flex: 1 1 var(--svadmin-chrome-basis);
6658
6641
  }
6659
6642
  .svadmin-filter-toolbar__search {
6660
- flex: 1 1 14rem;
6643
+ flex: 1 1 var(--svadmin-chrome-basis);
6661
6644
  }
6662
6645
  }
6663
6646
  }
6647
+ /* Router-agnostic application shell.
6648
+ *
6649
+ * Every length, size and color here comes from a token. That is the contract
6650
+ * hosts rely on: a host with its own router composes the shell with snippets and
6651
+ * overrides tokens, instead of re-implementing sidebar, topbar and page
6652
+ * composition in bespoke CSS. See docs/components/app-shell.md. */
6653
+ @layer components {
6654
+ .svadmin-app-shell {
6655
+ display: grid;
6656
+ grid-template-rows: auto minmax(0, 1fr) auto;
6657
+ grid-template-columns: minmax(0, 1fr);
6658
+ min-height: 100dvh;
6659
+ background: var(--background);
6660
+ color: var(--foreground);
6661
+ font-size: var(--svadmin-text-body);
6662
+ line-height: var(--svadmin-leading-body);
6663
+ }
6664
+ .svadmin-app-shell[data-width="narrow"] {
6665
+ --svadmin-shell-max: 48rem;
6666
+ }
6667
+ .svadmin-app-shell[data-width="wide"] {
6668
+ --svadmin-shell-max: 92rem;
6669
+ }
6670
+ .svadmin-app-shell[data-width="full"] {
6671
+ --svadmin-shell-max: none;
6672
+ }
6673
+ .svadmin-app-shell[data-sidebar="true"] {
6674
+ grid-template-columns: var(--svadmin-shell-sidebar-w) minmax(0, 1fr);
6675
+ grid-template-areas:
6676
+ "topbar topbar"
6677
+ "sidebar main"
6678
+ "sidebar footer";
6679
+ }
6680
+ .svadmin-app-shell[data-collapsed="true"] {
6681
+ --svadmin-shell-sidebar-w: var(--svadmin-shell-sidebar-w-collapsed);
6682
+ }
6683
+ .svadmin-app-shell[data-aside="true"] .svadmin-app-shell__body {
6684
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--svadmin-shell-aside-w));
6685
+ }
6686
+
6687
+ .svadmin-app-shell__skip {
6688
+ position: fixed;
6689
+ z-index: 60;
6690
+ inset-block-start: var(--svadmin-space-2);
6691
+ inset-inline-start: var(--svadmin-space-2);
6692
+ border: 1px solid var(--border);
6693
+ border-radius: var(--radius-md);
6694
+ background: var(--card);
6695
+ padding: var(--svadmin-space-2) var(--svadmin-space-3);
6696
+ color: var(--foreground);
6697
+ font-size: var(--svadmin-text-caption);
6698
+ font-weight: 600;
6699
+ transform: translateY(calc(-1 * (var(--svadmin-space-6) + var(--svadmin-space-5))));
6700
+ }
6701
+ .svadmin-app-shell__skip:focus-visible {
6702
+ transform: none;
6703
+ outline: var(--svadmin-focus-width) solid var(--ring);
6704
+ outline-offset: var(--svadmin-focus-offset);
6705
+ }
6706
+
6707
+ .svadmin-app-shell__topbar {
6708
+ grid-area: topbar;
6709
+ display: flex;
6710
+ align-items: center;
6711
+ gap: var(--svadmin-space-3);
6712
+ min-width: 0;
6713
+ min-height: var(--svadmin-shell-topbar-h);
6714
+ border-bottom: 1px solid var(--border);
6715
+ background: var(--card);
6716
+ padding-inline: var(--svadmin-shell-gutter);
6717
+ }
6718
+ .svadmin-app-shell__topbar-start,
6719
+ .svadmin-app-shell__topbar-end {
6720
+ display: flex;
6721
+ align-items: center;
6722
+ min-width: 0;
6723
+ gap: var(--svadmin-space-2);
6724
+ }
6725
+ .svadmin-app-shell__topbar-main {
6726
+ display: flex;
6727
+ flex: 1 1 auto;
6728
+ align-items: center;
6729
+ min-width: 0;
6730
+ gap: var(--svadmin-space-3);
6731
+ }
6732
+ .svadmin-app-shell__topbar-end {
6733
+ flex: 0 0 auto;
6734
+ justify-content: flex-end;
6735
+ }
6736
+
6737
+ .svadmin-app-shell__sidebar {
6738
+ grid-area: sidebar;
6739
+ display: flex;
6740
+ flex-direction: column;
6741
+ min-width: 0;
6742
+ min-height: 0;
6743
+ border-inline-end: 1px solid var(--sidebar-border, var(--border));
6744
+ background: var(--sidebar, var(--card));
6745
+ color: var(--sidebar-foreground, var(--foreground));
6746
+ overflow-y: auto;
6747
+ overscroll-behavior: contain;
6748
+ }
6749
+ .svadmin-app-shell__sidebar-inner {
6750
+ display: flex;
6751
+ flex: 1 1 auto;
6752
+ flex-direction: column;
6753
+ gap: var(--svadmin-space-2);
6754
+ min-width: 0;
6755
+ padding: var(--svadmin-space-3) var(--svadmin-space-2);
6756
+ }
6757
+
6758
+ .svadmin-app-shell__main {
6759
+ grid-area: main;
6760
+ display: flex;
6761
+ flex-direction: column;
6762
+ min-width: 0;
6763
+ min-height: 0;
6764
+ }
6765
+ .svadmin-app-shell__body {
6766
+ display: grid;
6767
+ grid-template-columns: minmax(0, 1fr);
6768
+ align-items: start;
6769
+ gap: var(--svadmin-section-gap);
6770
+ width: 100%;
6771
+ max-width: var(--svadmin-shell-max);
6772
+ margin-inline: auto;
6773
+ padding: var(--svadmin-shell-gutter);
6774
+ min-width: 0;
6775
+ }
6776
+ .svadmin-app-shell__content {
6777
+ display: grid;
6778
+ gap: var(--svadmin-section-gap);
6779
+ min-width: 0;
6780
+ }
6781
+ .svadmin-app-shell__aside {
6782
+ display: grid;
6783
+ gap: var(--svadmin-section-gap);
6784
+ min-width: 0;
6785
+ }
6786
+
6787
+ .svadmin-app-shell__footer {
6788
+ grid-area: footer;
6789
+ display: flex;
6790
+ flex-wrap: wrap;
6791
+ align-items: center;
6792
+ justify-content: space-between;
6793
+ gap: var(--svadmin-space-2);
6794
+ width: 100%;
6795
+ max-width: var(--svadmin-shell-max);
6796
+ margin-inline: auto;
6797
+ border-top: 1px solid var(--border);
6798
+ padding: var(--svadmin-space-3) var(--svadmin-shell-gutter);
6799
+ color: var(--muted-foreground);
6800
+ font-size: var(--svadmin-text-caption);
6801
+ }
6802
+
6803
+ /* The mobile navigation trigger only exists below the sidebar breakpoint. */
6804
+ .svadmin-app-shell__mobile-toggle {
6805
+ display: none;
6806
+ }
6807
+ .svadmin-app-shell__scrim {
6808
+ display: none;
6809
+ }
6810
+
6811
+ @media (max-width: 63.999rem) {
6812
+ .svadmin-app-shell[data-sidebar="true"] {
6813
+ grid-template-columns: minmax(0, 1fr);
6814
+ grid-template-areas:
6815
+ "topbar"
6816
+ "main"
6817
+ "footer";
6818
+ }
6819
+ .svadmin-app-shell[data-aside="true"] .svadmin-app-shell__body {
6820
+ grid-template-columns: minmax(0, 1fr);
6821
+ }
6822
+ .svadmin-app-shell__mobile-toggle {
6823
+ display: inline-flex;
6824
+ }
6825
+ .svadmin-app-shell__sidebar {
6826
+ position: fixed;
6827
+ z-index: 45;
6828
+ inset-block: var(--svadmin-shell-topbar-h) 0;
6829
+ inset-inline-start: 0;
6830
+ width: var(--svadmin-shell-sidebar-w);
6831
+ max-width: 85vw;
6832
+ box-shadow: var(--shadow-overlay);
6833
+ transform: translateX(-100%);
6834
+ visibility: hidden;
6835
+ transition: transform var(--svadmin-motion-standard) var(--svadmin-motion-easing), visibility var(--svadmin-motion-standard);
6836
+ }
6837
+ [dir="rtl"] .svadmin-app-shell__sidebar {
6838
+ transform: translateX(100%);
6839
+ }
6840
+ .svadmin-app-shell[data-mobile-open="true"] .svadmin-app-shell__sidebar {
6841
+ transform: none;
6842
+ visibility: visible;
6843
+ }
6844
+ .svadmin-app-shell[data-mobile-open="true"] .svadmin-app-shell__scrim {
6845
+ display: block;
6846
+ position: fixed;
6847
+ z-index: 40;
6848
+ inset: var(--svadmin-shell-topbar-h) 0 0;
6849
+ border: 0;
6850
+ background: var(--foreground);
6851
+ opacity: 0.28;
6852
+ cursor: pointer;
6853
+ }
6854
+ }
6855
+
6856
+ /* 窄视口下页面容器自己承担横向留白,外壳不再重复叠加。 */
6857
+ @media (max-width: 40rem) {
6858
+ .svadmin-app-shell {
6859
+ --svadmin-shell-gutter: var(--svadmin-space-4);
6860
+ }
6861
+ }
6862
+ }
6863
+ /* Data panel: the recurring "titled surface with a body" container.
6864
+ *
6865
+ * Hosts previously hand-rolled this block per page, which is how a project ends
6866
+ * up with three panel paddings and two radii. Every length here is a token. */
6867
+ @layer components {
6868
+ .svadmin-data-panel {
6869
+ --svadmin-panel-padding: var(--svadmin-space-5);
6870
+ display: grid;
6871
+ grid-template-columns: minmax(0, 1fr);
6872
+ align-content: start;
6873
+ min-width: 0;
6874
+ border: 1px solid var(--border);
6875
+ border-radius: var(--radius-lg);
6876
+ background: var(--card);
6877
+ color: var(--card-foreground);
6878
+ overflow: hidden;
6879
+ }
6880
+ .svadmin-data-panel[data-padding="compact"] {
6881
+ --svadmin-panel-padding: var(--svadmin-space-4);
6882
+ }
6883
+ .svadmin-data-panel[data-padding="none"] {
6884
+ --svadmin-panel-padding: 0;
6885
+ }
6886
+
6887
+ .svadmin-data-panel__header {
6888
+ display: flex;
6889
+ flex-wrap: wrap;
6890
+ align-items: flex-start;
6891
+ justify-content: space-between;
6892
+ gap: var(--svadmin-space-3);
6893
+ min-width: 0;
6894
+ padding: var(--svadmin-panel-padding);
6895
+ padding-block-end: 0;
6896
+ }
6897
+ .svadmin-data-panel[data-padding="none"] .svadmin-data-panel__header {
6898
+ padding: var(--svadmin-space-4) var(--svadmin-space-5);
6899
+ border-bottom: 1px solid var(--border);
6900
+ }
6901
+ .svadmin-data-panel__heading {
6902
+ display: grid;
6903
+ gap: var(--svadmin-space-1);
6904
+ min-width: 0;
6905
+ flex: 1 1 0;
6906
+ }
6907
+ .svadmin-data-panel__title {
6908
+ margin: 0;
6909
+ color: var(--foreground);
6910
+ font-size: var(--svadmin-text-section);
6911
+ font-weight: 600;
6912
+ line-height: var(--svadmin-leading-tight);
6913
+ overflow-wrap: anywhere;
6914
+ }
6915
+ .svadmin-data-panel__description {
6916
+ max-width: var(--svadmin-measure);
6917
+ margin: 0;
6918
+ color: var(--muted-foreground);
6919
+ font-size: var(--svadmin-text-body);
6920
+ line-height: var(--svadmin-leading-body);
6921
+ overflow-wrap: anywhere;
6922
+ }
6923
+ .svadmin-data-panel__actions {
6924
+ display: flex;
6925
+ flex-wrap: wrap;
6926
+ align-items: center;
6927
+ gap: var(--svadmin-space-2);
6928
+ flex: 0 0 auto;
6929
+ }
6930
+ .svadmin-data-panel__body {
6931
+ display: grid;
6932
+ gap: var(--svadmin-space-4);
6933
+ min-width: 0;
6934
+ padding: var(--svadmin-panel-padding);
6935
+ }
6936
+ .svadmin-data-panel[data-padding="none"] .svadmin-data-panel__body {
6937
+ gap: 0;
6938
+ }
6939
+ .svadmin-data-panel__footer {
6940
+ display: flex;
6941
+ flex-wrap: wrap;
6942
+ align-items: center;
6943
+ justify-content: flex-end;
6944
+ gap: var(--svadmin-space-2);
6945
+ padding: var(--svadmin-space-3) var(--svadmin-space-5);
6946
+ border-top: 1px solid var(--border);
6947
+ color: var(--muted-foreground);
6948
+ font-size: var(--svadmin-text-caption);
6949
+ }
6950
+ }
6664
6951
 
6665
6952
  /* 保留状态对比度和 clean-flat 卡片表现,颜色始终来自宿主 token。 */
6666
6953
  .svadmin-product-status[data-slot="badge"] {
@@ -6739,6 +7026,41 @@
6739
7026
  --svadmin-shadow-control: 0 1px 2px rgb(15 23 42 / 0.04);
6740
7027
  --svadmin-shadow-surface: 0 1px 2px rgb(15 23 42 / 0.035);
6741
7028
  --svadmin-shadow-surface-hover: 0 2px 5px rgb(15 23 42 / 0.06);
7029
+
7030
+ /* Size rhythm. Single source of truth for control, row, spacing and type
7031
+ * sizes; components read these tokens and hosts override the token instead
7032
+ * of re-writing component CSS. Values stay on the 4px grid from DESIGN.md
7033
+ * (xs 4, sm 8, md 16, lg 24, xl 32). */
7034
+ --svadmin-control-h-sm: 1.75rem; /* 28px */
7035
+ --svadmin-control-h: 2.25rem; /* 36px */
7036
+ --svadmin-control-h-lg: 2.5rem; /* 40px */
7037
+ --svadmin-row-h: 3rem; /* 48px */
7038
+ --svadmin-table-head-h: 2.75rem; /* 44px */
7039
+ --svadmin-table-state-min-h: 8rem; /* 128px */
7040
+ --svadmin-space-1: 0.25rem; /* 4px */
7041
+ --svadmin-space-2: 0.5rem; /* 8px */
7042
+ --svadmin-space-3: 0.75rem; /* 12px */
7043
+ --svadmin-space-4: 1rem; /* 16px */
7044
+ --svadmin-space-5: 1.5rem; /* 24px */
7045
+ --svadmin-space-6: 2rem; /* 32px */
7046
+ --svadmin-section-gap: var(--svadmin-space-5);
7047
+ --svadmin-text-caption: 0.75rem; /* 12px */
7048
+ --svadmin-text-label: 0.8125rem; /* 13px */
7049
+ --svadmin-text-body: 0.875rem; /* 14px */
7050
+ --svadmin-text-section: 1rem; /* 16px */
7051
+ --svadmin-text-title: 1.25rem; /* 20px */
7052
+ --svadmin-leading-tight: 1.25;
7053
+ --svadmin-leading-snug: 1.35;
7054
+ --svadmin-leading-body: 1.5;
7055
+ --svadmin-focus-width: 2px;
7056
+ --svadmin-measure: 65ch;
7057
+ --svadmin-shell-sidebar-w: 15rem;
7058
+ --svadmin-shell-sidebar-w-collapsed: 3.5rem;
7059
+ --svadmin-shell-topbar-h: 3.5rem;
7060
+ --svadmin-shell-gutter: var(--svadmin-space-5);
7061
+ --svadmin-shell-max: 74rem;
7062
+ --svadmin-chrome-basis: 16rem;
7063
+ --svadmin-shell-aside-w: 22rem;
6742
7064
  --svadmin-shadow-overlay: 0 20px 52px rgb(15 23 42 / 0.18), 0 6px 16px rgb(15 23 42 / 0.1);
6743
7065
  }
6744
7066
 
@@ -7164,15 +7486,15 @@ h6,
7164
7486
  }
7165
7487
 
7166
7488
  :is([data-slot="button"], .svadmin-button):is([data-size="default"], .svadmin-button-size--default),
7167
- :is([data-svadmin-button], .svadmin-button):is([data-size="default"], .svadmin-button-size--default) { min-height: 2.25rem; padding: 0 0.75rem; }
7489
+ :is([data-svadmin-button], .svadmin-button):is([data-size="default"], .svadmin-button-size--default) { min-height: var(--svadmin-control-h); padding: 0 0.75rem; }
7168
7490
  :is([data-slot="button"], .svadmin-button):is([data-size="xs"], .svadmin-button-size--xs),
7169
7491
  :is([data-svadmin-button], .svadmin-button):is([data-size="xs"], .svadmin-button-size--xs) { min-height: 1.5rem; padding: 0 0.5rem; font-size: 0.75rem; }
7170
7492
  :is([data-slot="button"], .svadmin-button):is([data-size="sm"], .svadmin-button-size--sm),
7171
7493
  :is([data-svadmin-button], .svadmin-button):is([data-size="sm"], .svadmin-button-size--sm) { min-height: 2rem; padding: 0 0.75rem; font-size: 0.8rem; }
7172
7494
  :is([data-slot="button"], .svadmin-button):is([data-size="lg"], .svadmin-button-size--lg),
7173
- :is([data-svadmin-button], .svadmin-button):is([data-size="lg"], .svadmin-button-size--lg) { min-height: 2.5rem; padding: 0 1rem; }
7495
+ :is([data-svadmin-button], .svadmin-button):is([data-size="lg"], .svadmin-button-size--lg) { min-height: var(--svadmin-control-h-lg); padding: 0 1rem; }
7174
7496
  :is([data-slot="button"], .svadmin-button):is([data-size="icon"], .svadmin-button-size--icon),
7175
- :is([data-svadmin-button], .svadmin-button):is([data-size="icon"], .svadmin-button-size--icon) { width: 2.25rem; height: 2.25rem; }
7497
+ :is([data-svadmin-button], .svadmin-button):is([data-size="icon"], .svadmin-button-size--icon) { width: var(--svadmin-control-h); height: var(--svadmin-control-h); }
7176
7498
  :is([data-slot="button"], .svadmin-button):is([data-size="icon-xs"], .svadmin-button-size--icon-xs),
7177
7499
  :is([data-svadmin-button], .svadmin-button):is([data-size="icon-xs"], .svadmin-button-size--icon-xs) { width: 1.5rem; height: 1.5rem; }
7178
7500
  :is([data-slot="button"], .svadmin-button):is([data-size="icon-sm"], .svadmin-button-size--icon-sm),
@@ -7624,7 +7946,7 @@ main {
7624
7946
  .svadmin-input {
7625
7947
  width: 100%;
7626
7948
  min-width: 0;
7627
- height: 2.25rem;
7949
+ height: var(--svadmin-control-h);
7628
7950
  border: 1px solid var(--border);
7629
7951
  border-radius: 0.5rem;
7630
7952
  background: transparent;
@@ -7714,15 +8036,17 @@ main {
7714
8036
  }
7715
8037
 
7716
8038
  .svadmin-table-cell {
7717
- padding: 0.5rem;
8039
+ height: var(--svadmin-row-h);
8040
+ padding: var(--svadmin-space-2);
8041
+ font-size: var(--svadmin-text-label);
7718
8042
  vertical-align: middle;
7719
8043
  white-space: nowrap;
7720
8044
  }
7721
8045
 
7722
8046
  .svadmin-table-cell[data-density="compact"] {
7723
- height: 2rem;
7724
- padding: 0.25rem 0.5rem;
7725
- font-size: 0.75rem;
8047
+ height: calc(var(--svadmin-row-h) - var(--svadmin-space-4));
8048
+ padding: var(--svadmin-space-1) var(--svadmin-space-2);
8049
+ font-size: var(--svadmin-text-caption);
7726
8050
  }
7727
8051
 
7728
8052
  .svadmin-table-cell[data-sticky="right"],
@@ -8048,9 +8372,9 @@ main {
8048
8372
  }
8049
8373
 
8050
8374
  .svadmin-table-caption {
8051
- margin-top: 1rem;
8375
+ margin-top: var(--svadmin-space-4);
8052
8376
  color: var(--muted-foreground);
8053
- font-size: 0.875rem;
8377
+ font-size: var(--svadmin-text-body);
8054
8378
  }
8055
8379
 
8056
8380
  .svadmin-table-footer {
@@ -8207,7 +8531,7 @@ main {
8207
8531
 
8208
8532
  .svadmin-select {
8209
8533
  width: 100%;
8210
- height: 2.25rem;
8534
+ height: var(--svadmin-control-h);
8211
8535
  border: 1px solid var(--border);
8212
8536
  border-radius: 0.5rem;
8213
8537
  padding: 0.375rem 0.75rem;
@@ -8244,7 +8568,7 @@ main {
8244
8568
  .svadmin-tabs-list {
8245
8569
  display: inline-flex;
8246
8570
  width: fit-content;
8247
- height: 2.25rem;
8571
+ height: var(--svadmin-control-h);
8248
8572
  align-items: center;
8249
8573
  justify-content: center;
8250
8574
  gap: 0.25rem;
@@ -8591,7 +8915,7 @@ main {
8591
8915
  .svadmin-navigation-trigger {
8592
8916
  display: inline-flex;
8593
8917
  width: max-content;
8594
- height: 2.25rem;
8918
+ height: var(--svadmin-control-h);
8595
8919
  align-items: center;
8596
8920
  justify-content: center;
8597
8921
  gap: 0.25rem;
@@ -8991,19 +9315,20 @@ main {
8991
9315
  }
8992
9316
 
8993
9317
  .svadmin-table-head {
8994
- height: 2.25rem;
8995
- padding: 0.5rem;
9318
+ height: var(--svadmin-table-head-h);
9319
+ padding: var(--svadmin-space-2);
8996
9320
  color: var(--foreground);
8997
9321
  text-align: left;
8998
9322
  vertical-align: middle;
9323
+ font-size: var(--svadmin-text-caption);
8999
9324
  font-weight: 500;
9000
9325
  white-space: nowrap;
9001
9326
  }
9002
9327
 
9003
9328
  .svadmin-table-head[data-density="compact"] {
9004
- height: 2rem;
9005
- padding: 0.25rem 0.5rem;
9006
- font-size: 0.75rem;
9329
+ height: calc(var(--svadmin-table-head-h) - var(--svadmin-space-3));
9330
+ padding: var(--svadmin-space-1) var(--svadmin-space-2);
9331
+ font-size: var(--svadmin-text-caption);
9007
9332
  }
9008
9333
 
9009
9334
  .svadmin-table-head[data-sticky="right"],
@@ -9053,8 +9378,8 @@ main {
9053
9378
  }
9054
9379
 
9055
9380
  .svadmin-pagination-icon {
9056
- width: 1rem;
9057
- height: 1rem;
9381
+ width: var(--svadmin-space-4);
9382
+ height: var(--svadmin-space-4);
9058
9383
  }
9059
9384
 
9060
9385
  @keyframes svadmin-menu-enter {
@@ -9356,11 +9681,11 @@ details[data-svadmin-filter][open] > :not(summary),
9356
9681
  }
9357
9682
 
9358
9683
  .layout-clean-flat [data-svadmin-table-head] [data-slot="table-head"] {
9359
- height: 2.75rem;
9684
+ height: var(--svadmin-table-head-h);
9360
9685
  border-bottom-color: var(--svadmin-border);
9361
9686
  background: var(--svadmin-surface-muted);
9362
9687
  color: var(--svadmin-text-muted);
9363
- font-size: 0.75rem;
9688
+ font-size: var(--svadmin-text-caption);
9364
9689
  font-weight: 600;
9365
9690
  letter-spacing: 0;
9366
9691
  text-transform: none;
@@ -9371,10 +9696,10 @@ details[data-svadmin-filter][open] > :not(summary),
9371
9696
  }
9372
9697
 
9373
9698
  .layout-clean-flat [data-svadmin-table-row] [data-slot="table-cell"] {
9374
- height: 3rem;
9699
+ height: var(--svadmin-row-h);
9375
9700
  border-bottom-color: var(--svadmin-border);
9376
9701
  color: var(--svadmin-text);
9377
- font-size: 0.8125rem;
9702
+ font-size: var(--svadmin-text-label);
9378
9703
  }
9379
9704
 
9380
9705
  .layout-clean-flat [data-svadmin-table-head] [data-slot="table-head"][data-density="compact"],
@@ -9426,19 +9751,19 @@ details[data-svadmin-filter][open] > :not(summary),
9426
9751
  border-bottom: 1px solid var(--svadmin-border);
9427
9752
  border-radius: 0;
9428
9753
  background: transparent;
9429
- padding: 0.75rem 0;
9754
+ padding: var(--svadmin-space-3) 0;
9430
9755
  box-shadow: none;
9431
9756
  }
9432
9757
 
9433
9758
  .layout-clean-flat [data-svadmin-table-toolbar] [data-slot="input"] {
9434
- height: 2.625rem;
9759
+ height: var(--svadmin-control-h-lg);
9435
9760
  background: var(--svadmin-surface-muted);
9436
9761
  }
9437
9762
 
9438
9763
  .layout-clean-flat [data-svadmin-list-actions] :is([data-slot="button"], .svadmin-button),
9439
9764
  .layout-clean-flat [data-svadmin-table-toolbar] :is([data-slot="button"], .svadmin-button),
9440
9765
  .layout-clean-flat [data-svadmin-form-actions] :is([data-slot="button"], .svadmin-button) {
9441
- height: 2.5rem;
9766
+ height: var(--svadmin-control-h-lg);
9442
9767
  flex-shrink: 0;
9443
9768
  }
9444
9769