@svadmin/ui 0.85.0 → 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 (69) hide show
  1. package/README.md +29 -0
  2. package/dist/app-shell.css +216 -0
  3. package/dist/app.css +483 -172
  4. package/dist/app.theme.css +483 -172
  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/AutoForm.svelte +7 -12
  10. package/dist/components/AutoForm.svelte.d.ts +0 -1
  11. package/dist/components/AutoTable.svelte +2 -0
  12. package/dist/components/AutoTable.svelte.d.ts +2 -0
  13. package/dist/components/ConfigurationPage.svelte +0 -3
  14. package/dist/components/ConfigurationPage.svelte.d.ts +0 -1
  15. package/dist/components/CreatePage.svelte +1 -5
  16. package/dist/components/CreatePage.svelte.d.ts +0 -1
  17. package/dist/components/EditPage.svelte +1 -5
  18. package/dist/components/EditPage.svelte.d.ts +0 -1
  19. package/dist/components/FieldRenderer.svelte +2 -10
  20. package/dist/components/FieldRenderer.svelte.d.ts +0 -1
  21. package/dist/components/ListPage.svelte +2 -5
  22. package/dist/components/ListPage.svelte.d.ts +0 -1
  23. package/dist/components/PageHeader.svelte +1 -3
  24. package/dist/components/PageHeader.svelte.d.ts +0 -1
  25. package/dist/components/PagePattern.svelte +36 -13
  26. package/dist/components/PagePattern.svelte.d.ts +7 -0
  27. package/dist/components/QuickEditDrawer.svelte +0 -1
  28. package/dist/components/ShowPage.svelte +5 -9
  29. package/dist/components/ShowPage.svelte.d.ts +0 -1
  30. package/dist/components/SvarAutoTable.svelte +2 -1
  31. package/dist/components/SvarDataGrid.svelte +8 -4
  32. package/dist/components/SvarDataGrid.svelte.d.ts +3 -0
  33. package/dist/components/SvarResourceTable.svelte +0 -1
  34. package/dist/components/SvarResourceTable.svelte.d.ts +0 -1
  35. package/dist/components/SvarResourceTableView.svelte +2 -2
  36. package/dist/components/auto-table-grid.d.ts +1 -0
  37. package/dist/components/content/ContentPageHeader.svelte +2 -1
  38. package/dist/components/content/ContentPageHeader.svelte.d.ts +1 -0
  39. package/dist/components/content/ContentPageShell.svelte +1 -1
  40. package/dist/components/content/ContentPageShell.svelte.d.ts +1 -0
  41. package/dist/components/content/DataPanel.svelte +58 -0
  42. package/dist/components/content/DataPanel.svelte.d.ts +16 -0
  43. package/dist/components/content/DescriptionList.svelte +5 -8
  44. package/dist/components/content/DescriptionList.svelte.d.ts +0 -1
  45. package/dist/components/content/FilterToolbar.svelte +2 -5
  46. package/dist/components/content/FilterToolbar.svelte.d.ts +0 -1
  47. package/dist/components/content/NetworkTable.svelte +3 -3
  48. package/dist/components/content/NetworkTable.svelte.d.ts +0 -1
  49. package/dist/components/content/PageSection.svelte +1 -1
  50. package/dist/components/content/StatusTabs.svelte +2 -7
  51. package/dist/components/content/StatusTabs.svelte.d.ts +0 -1
  52. package/dist/components/content/index.d.ts +1 -0
  53. package/dist/components/content/index.js +1 -0
  54. package/dist/components/ui/table/index.d.ts +0 -1
  55. package/dist/components/ui/table/table.svelte +1 -0
  56. package/dist/components/ui/table/table.svelte.d.ts +1 -0
  57. package/dist/components.css +1 -11
  58. package/dist/data-panel.css +88 -0
  59. package/dist/design-contract.d.ts +11 -0
  60. package/dist/design-contract.js +8 -0
  61. package/dist/design-system.d.ts +3 -2
  62. package/dist/design-system.js +3 -2
  63. package/dist/index.d.ts +4 -2
  64. package/dist/index.js +2 -0
  65. package/dist/page-chrome.css +40 -62
  66. package/dist/recipes.d.ts +67 -154
  67. package/dist/recipes.js +32 -68
  68. package/dist/styles/recipes.css +15 -48
  69. package/package.json +4 -4
@@ -12,7 +12,6 @@
12
12
  interface Props {
13
13
  items: StatusTabItem[];
14
14
  value?: string;
15
- density?: 'compact' | 'comfortable';
16
15
  variant?: 'pills' | 'underline' | 'segmented';
17
16
  onchange?: (key: string) => void;
18
17
  class?: string;
@@ -21,7 +20,6 @@
21
20
  let {
22
21
  items = [],
23
22
  value = $bindable(items[0]?.key ?? ''),
24
- density = 'compact',
25
23
  variant = 'pills',
26
24
  onchange,
27
25
  class: className = '',
@@ -61,8 +59,6 @@
61
59
  tabs[nextIndex]?.click();
62
60
  }
63
61
 
64
- const isCompact = $derived(density === 'compact');
65
-
66
62
  const toneClasses: Record<NonNullable<StatusTabItem['tone']>, { activeBadge: string; inactiveBadge: string }> = {
67
63
  default: {
68
64
  activeBadge: 'svadmin-u-6a1572b6bf5a svadmin-u-20aaf08a7ed1',
@@ -95,7 +91,6 @@
95
91
  role="tablist"
96
92
  aria-orientation="horizontal"
97
93
  data-svadmin-status-tabs
98
- data-density={density}
99
94
  data-variant={variant}
100
95
  class={cn(
101
96
  'svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-44ee8ba0a421 svadmin-u-1384f66f41d0',
@@ -118,7 +113,7 @@
118
113
  onkeydown={handleKeydown}
119
114
  class={cn(
120
115
  'svadmin-u-52083e7da442 svadmin-u-3960ffc248d9 svadmin-u-58284b4ea568 svadmin-u-e82ae8be04aa svadmin-u-2689f3958069 svadmin-u-ceb69a6b0e5f svadmin-u-34516836730d svadmin-u-df37b1fd9495 svadmin-u-793c80e97ffb svadmin-u-ddac70ae5d29 svadmin-u-49330148794a svadmin-u-b29d8adbad2e',
121
- isCompact ? 'svadmin-u-359090c2d529 svadmin-u-0b91436debbd svadmin-u-660d2effb880' : 'svadmin-u-fc7473ca09eb svadmin-u-0e17f2bd9074 svadmin-u-ec0091ee009b',
116
+ 'svadmin-u-fc7473ca09eb svadmin-u-0e17f2bd9074 svadmin-u-ec0091ee009b',
122
117
  variant === 'pills' && [
123
118
  'svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f',
124
119
  active
@@ -144,7 +139,7 @@
144
139
  <span
145
140
  class={cn(
146
141
  'svadmin-u-52083e7da442 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-ac204c108886 svadmin-u-e83a7042bc91 svadmin-u-3032cae0badb svadmin-u-c2385a463da8',
147
- isCompact ? 'svadmin-u-69aaf7265e58 svadmin-u-d8e0e382c67b svadmin-u-465609a240a8 svadmin-u-1dc571a3609f' : 'svadmin-u-f8516763aedd svadmin-u-45d828117213 svadmin-u-465609a240a8 svadmin-u-359090c2d529',
142
+ 'svadmin-u-f8516763aedd svadmin-u-45d828117213 svadmin-u-465609a240a8 svadmin-u-359090c2d529',
148
143
  active ? badgeTone.activeBadge : badgeTone.inactiveBadge
149
144
  )}
150
145
  >
@@ -8,7 +8,6 @@ export interface StatusTabItem {
8
8
  interface Props {
9
9
  items: StatusTabItem[];
10
10
  value?: string;
11
- density?: 'compact' | 'comfortable';
12
11
  variant?: 'pills' | 'underline' | 'segmented';
13
12
  onchange?: (key: string) => void;
14
13
  class?: string;
@@ -1,6 +1,7 @@
1
1
  export { default as ContentPageShell } from './ContentPageShell.svelte';
2
2
  export { default as DashboardPage } from './DashboardPage.svelte';
3
3
  export { default as PageSection } from './PageSection.svelte';
4
+ export { default as DataPanel } from './DataPanel.svelte';
4
5
  export { default as ContentPageHeader } from './ContentPageHeader.svelte';
5
6
  export { default as SectionHeader } from './SectionHeader.svelte';
6
7
  export { default as PageToolbar } from './PageToolbar.svelte';
@@ -1,6 +1,7 @@
1
1
  export { default as ContentPageShell } from './ContentPageShell.svelte';
2
2
  export { default as DashboardPage } from './DashboardPage.svelte';
3
3
  export { default as PageSection } from './PageSection.svelte';
4
+ export { default as DataPanel } from './DataPanel.svelte';
4
5
  export { default as ContentPageHeader } from './ContentPageHeader.svelte';
5
6
  export { default as SectionHeader } from './SectionHeader.svelte';
6
7
  export { default as PageToolbar } from './PageToolbar.svelte';
@@ -6,5 +6,4 @@ import Footer from "./table-footer.svelte";
6
6
  import Head from "./table-head.svelte";
7
7
  import Header from "./table-header.svelte";
8
8
  import Row from "./table-row.svelte";
9
- export type { TableDensity } from "./table.svelte";
10
9
  export { Root, Body, Caption, Cell, Footer, Head, Header, Row, Root as Table, Body as TableBody, Caption as TableCaption, Cell as TableCell, Footer as TableFooter, Head as TableHead, Header as TableHeader, Row as TableRow, };
@@ -6,6 +6,7 @@
6
6
  export type TableDensity = "compact" | "comfortable";
7
7
 
8
8
  type Props = WithElementRef<HTMLTableAttributes, HTMLTableElement> & {
9
+ /** @deprecated Retained for compatibility; comfortable is the shared default. */
9
10
  density?: TableDensity;
10
11
  };
11
12
 
@@ -2,6 +2,7 @@ import type { HTMLTableAttributes } from "svelte/elements";
2
2
  import { type WithElementRef } from "../../../utils.js";
3
3
  export type TableDensity = "compact" | "comfortable";
4
4
  type Props = WithElementRef<HTMLTableAttributes, HTMLTableElement> & {
5
+ /** @deprecated Retained for compatibility; comfortable is the shared default. */
5
6
  density?: TableDensity;
6
7
  };
7
8
  declare const Table: import("svelte").Component<Props, {}, "ref">;
@@ -889,11 +889,6 @@ main {
889
889
  vertical-align: middle;
890
890
  white-space: nowrap;
891
891
  }
892
- .svadmin-table-cell[data-density="compact"] {
893
- height: 2rem;
894
- padding: 0.25rem 0.5rem;
895
- font-size: 0.75rem;
896
- }
897
892
  .svadmin-table-cell[data-sticky="right"], .svadmin-table-cell[data-sticky="left"] {
898
893
  position: sticky;
899
894
  z-index: 10;
@@ -2041,11 +2036,6 @@ main {
2041
2036
  font-weight: 500;
2042
2037
  white-space: nowrap;
2043
2038
  }
2044
- .svadmin-table-head[data-density="compact"] {
2045
- height: 2rem;
2046
- padding: 0.25rem 0.5rem;
2047
- font-size: 0.75rem;
2048
- }
2049
2039
  .svadmin-table-head[data-sticky="right"], .svadmin-table-head[data-sticky="left"] {
2050
2040
  position: sticky;
2051
2041
  z-index: 20;
@@ -2218,7 +2208,7 @@ details[data-svadmin-filter][open] > :not(summary),
2218
2208
 
2219
2209
  /* --- Admin UI layout preset (clean-flat) --- */
2220
2210
  /* Keep this public class for layoutPreset API compatibility. The preset only
2221
- * adjusts density and composition; color, focus, and elevation stay semantic. */
2211
+ * adjusts composition; color, focus, and elevation stay semantic. */
2222
2212
  .layout-clean-flat {
2223
2213
  --radius: 0.5rem;
2224
2214
  --svadmin-content-width: 74rem;
@@ -0,0 +1,88 @@
1
+ /* Data panel: the recurring "titled surface with a body" container.
2
+ *
3
+ * Hosts previously hand-rolled this block per page, which is how a project ends
4
+ * up with three panel paddings and two radii. Every length here is a token. */
5
+ @layer components {
6
+ .svadmin-data-panel {
7
+ --svadmin-panel-padding: var(--svadmin-space-5);
8
+ display: grid;
9
+ grid-template-columns: minmax(0, 1fr);
10
+ align-content: start;
11
+ min-width: 0;
12
+ border: 1px solid var(--border);
13
+ border-radius: var(--radius-lg);
14
+ background: var(--card);
15
+ color: var(--card-foreground);
16
+ overflow: hidden;
17
+ }
18
+ .svadmin-data-panel[data-padding="compact"] {
19
+ --svadmin-panel-padding: var(--svadmin-space-4);
20
+ }
21
+ .svadmin-data-panel[data-padding="none"] {
22
+ --svadmin-panel-padding: 0;
23
+ }
24
+
25
+ .svadmin-data-panel__header {
26
+ display: flex;
27
+ flex-wrap: wrap;
28
+ align-items: flex-start;
29
+ justify-content: space-between;
30
+ gap: var(--svadmin-space-3);
31
+ min-width: 0;
32
+ padding: var(--svadmin-panel-padding);
33
+ padding-block-end: 0;
34
+ }
35
+ .svadmin-data-panel[data-padding="none"] .svadmin-data-panel__header {
36
+ padding: var(--svadmin-space-4) var(--svadmin-space-5);
37
+ border-bottom: 1px solid var(--border);
38
+ }
39
+ .svadmin-data-panel__heading {
40
+ display: grid;
41
+ gap: var(--svadmin-space-1);
42
+ min-width: 0;
43
+ flex: 1 1 0;
44
+ }
45
+ .svadmin-data-panel__title {
46
+ margin: 0;
47
+ color: var(--foreground);
48
+ font-size: var(--svadmin-text-section);
49
+ font-weight: 600;
50
+ line-height: var(--svadmin-leading-tight);
51
+ overflow-wrap: anywhere;
52
+ }
53
+ .svadmin-data-panel__description {
54
+ max-width: var(--svadmin-measure);
55
+ margin: 0;
56
+ color: var(--muted-foreground);
57
+ font-size: var(--svadmin-text-body);
58
+ line-height: var(--svadmin-leading-body);
59
+ overflow-wrap: anywhere;
60
+ }
61
+ .svadmin-data-panel__actions {
62
+ display: flex;
63
+ flex-wrap: wrap;
64
+ align-items: center;
65
+ gap: var(--svadmin-space-2);
66
+ flex: 0 0 auto;
67
+ }
68
+ .svadmin-data-panel__body {
69
+ display: grid;
70
+ gap: var(--svadmin-space-4);
71
+ min-width: 0;
72
+ padding: var(--svadmin-panel-padding);
73
+ }
74
+ .svadmin-data-panel[data-padding="none"] .svadmin-data-panel__body {
75
+ gap: 0;
76
+ }
77
+ .svadmin-data-panel__footer {
78
+ display: flex;
79
+ flex-wrap: wrap;
80
+ align-items: center;
81
+ justify-content: flex-end;
82
+ gap: var(--svadmin-space-2);
83
+ padding: var(--svadmin-space-3) var(--svadmin-space-5);
84
+ border-top: 1px solid var(--border);
85
+ color: var(--muted-foreground);
86
+ font-size: var(--svadmin-text-caption);
87
+ }
88
+ }
@@ -8,6 +8,17 @@ export declare const surfaceDesignContract: {
8
8
  readonly table: {
9
9
  readonly density: readonly ["comfortable", "compact"];
10
10
  };
11
+ readonly pageFamilies: readonly ["list", "form", "detail", "workspace", "dashboard"];
12
+ readonly pageStates: readonly ["ready", "loading", "empty", "error", "forbidden"];
13
+ readonly composition: {
14
+ readonly maxPrimaryActions: 1;
15
+ readonly secondaryActions: "overflow";
16
+ readonly destructiveActions: "confirm";
17
+ readonly modalNesting: 0;
18
+ };
11
19
  };
12
20
  export type SurfaceTone = typeof surfaceDesignContract.metric.tone[number];
21
+ /** @deprecated Kept for source compatibility; product pages use one baseline rhythm. */
13
22
  export type SurfaceDensity = typeof surfaceDesignContract.metric.density[number];
23
+ export type AdminPageFamily = typeof surfaceDesignContract.pageFamilies[number];
24
+ export type AdminPageState = typeof surfaceDesignContract.pageStates[number];
@@ -8,4 +8,12 @@ export const surfaceDesignContract = {
8
8
  table: {
9
9
  density: ['comfortable', 'compact'],
10
10
  },
11
+ pageFamilies: ['list', 'form', 'detail', 'workspace', 'dashboard'],
12
+ pageStates: ['ready', 'loading', 'empty', 'error', 'forbidden'],
13
+ composition: {
14
+ maxPrimaryActions: 1,
15
+ secondaryActions: 'overflow',
16
+ destructiveActions: 'confirm',
17
+ modalNesting: 0,
18
+ },
11
19
  };
@@ -1,11 +1,12 @@
1
- import type { SurfaceTone, SurfaceDensity } from "./design-contract.js";
1
+ import type { SurfaceDensity, SurfaceTone } from "./design-contract.js";
2
2
  export declare function metricSurfaceClasses(tone?: SurfaceTone): {
3
3
  state: string;
4
4
  description: string;
5
5
  root: string;
6
6
  card: string;
7
7
  };
8
- export declare function tableSurfaceClasses(density?: SurfaceDensity): {
8
+ /** @deprecated The argument is accepted for compatibility and uses the shared baseline. */
9
+ export declare function tableSurfaceClasses(_density?: SurfaceDensity): {
9
10
  state: string;
10
11
  content: string;
11
12
  head: string;
@@ -2,6 +2,7 @@ import { surfaceMetricRecipe as surfaceMetric, surfaceTableRecipe as surfaceTabl
2
2
  export function metricSurfaceClasses(tone = "neutral") {
3
3
  return surfaceMetric({ tone });
4
4
  }
5
- export function tableSurfaceClasses(density = "comfortable") {
6
- return surfaceTable({ density });
5
+ /** @deprecated The argument is accepted for compatibility and uses the shared baseline. */
6
+ export function tableSurfaceClasses(_density = "comfortable") {
7
+ return surfaceTable();
7
8
  }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { surfaceDesignContract } from "./design-contract.js";
2
- export type { SurfaceTone, SurfaceDensity } from "./design-contract.js";
2
+ export type { AdminPageFamily, AdminPageState, SurfaceDensity, SurfaceTone } from "./design-contract.js";
3
3
  export { designSystemComponents, type DesignComponentContract, type DesignComponentId, type DesignComponentState, } from "./design-system-components.js";
4
4
  export { metricSurfaceClasses, tableSurfaceClasses } from "./design-system.js";
5
5
  export { default as AdminApp } from './components/AdminApp.svelte';
@@ -38,7 +38,8 @@ export { default as MetricStrip } from './components/MetricStrip.svelte';
38
38
  export type { MetricStripItem, MetricTone } from './components/MetricStrip.svelte';
39
39
  export { default as PageHeader } from './components/PageHeader.svelte';
40
40
  export { default as PagePattern } from './components/PagePattern.svelte';
41
- export type { PagePatternKind } from './components/PagePattern.svelte';
41
+ export type { PagePatternKind, PagePatternState } from './components/PagePattern.svelte';
42
+ export { default as AppShellPage } from './components/AppShellPage.svelte';
42
43
  export { default as ResourceOperationsPage } from './components/ResourceOperationsPage.svelte';
43
44
  export { default as RecordDetailDrawer } from './components/RecordDetailDrawer.svelte';
44
45
  export { default as ResourceAccessGuard } from './components/ResourceAccessGuard.svelte';
@@ -278,6 +279,7 @@ export { default as TwoFactorAuthPage } from './components/TwoFactorAuthPage.sve
278
279
  export { default as ContentPageShell } from './components/content/ContentPageShell.svelte';
279
280
  export { default as DashboardPage } from './components/content/DashboardPage.svelte';
280
281
  export { default as PageSection } from './components/content/PageSection.svelte';
282
+ export { default as DataPanel } from './components/content/DataPanel.svelte';
281
283
  export { default as ContentPageHeader } from './components/content/ContentPageHeader.svelte';
282
284
  export { default as ConfigurationPage } from './components/ConfigurationPage.svelte';
283
285
  export { default as SectionHeader } from './components/content/SectionHeader.svelte';
package/dist/index.js CHANGED
@@ -31,6 +31,7 @@ export { default as StatsCard } from './components/StatsCard.svelte';
31
31
  export { default as MetricStrip } from './components/MetricStrip.svelte';
32
32
  export { default as PageHeader } from './components/PageHeader.svelte';
33
33
  export { default as PagePattern } from './components/PagePattern.svelte';
34
+ export { default as AppShellPage } from './components/AppShellPage.svelte';
34
35
  export { default as ResourceOperationsPage } from './components/ResourceOperationsPage.svelte';
35
36
  export { default as RecordDetailDrawer } from './components/RecordDetailDrawer.svelte';
36
37
  export { default as ResourceAccessGuard } from './components/ResourceAccessGuard.svelte';
@@ -245,6 +246,7 @@ export { default as TwoFactorAuthPage } from './components/TwoFactorAuthPage.sve
245
246
  export { default as ContentPageShell } from './components/content/ContentPageShell.svelte';
246
247
  export { default as DashboardPage } from './components/content/DashboardPage.svelte';
247
248
  export { default as PageSection } from './components/content/PageSection.svelte';
249
+ export { default as DataPanel } from './components/content/DataPanel.svelte';
248
250
  export { default as ContentPageHeader } from './components/content/ContentPageHeader.svelte';
249
251
  export { default as ConfigurationPage } from './components/ConfigurationPage.svelte';
250
252
  export { default as SectionHeader } from './components/content/SectionHeader.svelte';
@@ -6,7 +6,7 @@
6
6
  * the host application's utility CSS implementation.
7
7
  */
8
8
  [data-svadmin-skip-link] {
9
- transform: translateY(calc(-100% - 1rem));
9
+ transform: translateY(calc(-100% - var(--svadmin-space-4)));
10
10
  }
11
11
  [data-svadmin-skip-link]:focus,
12
12
  [data-svadmin-skip-link]:focus-visible {
@@ -14,24 +14,17 @@
14
14
  }
15
15
 
16
16
  .svadmin-page-header {
17
- --svadmin-page-header-gap: 0.5rem;
17
+ --svadmin-page-header-gap: var(--svadmin-space-2);
18
18
  min-width: 0;
19
19
  }
20
- .svadmin-page-header[data-density="compact"] {
21
- --svadmin-page-header-gap: 0.375rem;
22
- }
23
20
  .svadmin-page-header__breadcrumbs {
24
- margin-bottom: 1rem;
25
- }
26
- .svadmin-page-header[data-density="compact"] .svadmin-page-header__breadcrumbs {
27
- margin-bottom: 0.375rem;
28
- font-size: 0.75rem;
21
+ margin-bottom: var(--svadmin-space-4);
29
22
  }
30
23
  .svadmin-page-header__row, .svadmin-filter-toolbar__row {
31
24
  display: flex;
32
25
  flex-direction: column;
33
26
  min-width: 0;
34
- gap: 0.5rem;
27
+ gap: var(--svadmin-space-2);
35
28
  }
36
29
  .svadmin-page-header__row {
37
30
  gap: var(--svadmin-page-header-gap);
@@ -40,7 +33,7 @@
40
33
  display: flex;
41
34
  align-items: center;
42
35
  min-width: 0;
43
- gap: 0.625rem;
36
+ gap: var(--svadmin-space-3);
44
37
  }
45
38
  .svadmin-page-header__text {
46
39
  min-width: 0;
@@ -50,7 +43,7 @@
50
43
  flex-wrap: wrap;
51
44
  align-items: center;
52
45
  min-width: 0;
53
- gap: 0.5rem;
46
+ gap: var(--svadmin-space-2);
54
47
  }
55
48
  .svadmin-page-header__tags, .svadmin-page-header__actions {
56
49
  max-width: 100%;
@@ -59,24 +52,17 @@
59
52
  .svadmin-page-header__title {
60
53
  min-width: 0;
61
54
  color: var(--foreground);
62
- font-size: 1.25rem;
55
+ font-size: var(--svadmin-text-title);
63
56
  font-weight: 600;
64
- line-height: 1.75rem;
57
+ line-height: var(--svadmin-leading-tight);
65
58
  overflow-wrap: anywhere;
66
59
  }
67
60
  .svadmin-page-header__description {
68
61
  color: var(--muted-foreground);
69
- font-size: 0.875rem;
70
- line-height: 1.25rem;
62
+ font-size: var(--svadmin-text-body);
63
+ line-height: var(--svadmin-leading-body);
71
64
  overflow-wrap: anywhere;
72
65
  }
73
- .svadmin-page-header[data-density="compact"] .svadmin-page-header__title {
74
- font-size: 1.125rem;
75
- }
76
- .svadmin-page-header[data-density="compact"] .svadmin-page-header__description {
77
- font-size: 0.75rem;
78
- line-height: 1rem;
79
- }
80
66
  .svadmin-page-header .svadmin-page-header__back {
81
67
  flex-shrink: 0;
82
68
  color: var(--muted-foreground);
@@ -85,14 +71,14 @@
85
71
  color: var(--foreground);
86
72
  }
87
73
  .svadmin-page-header .svadmin-page-header__back-icon {
88
- width: 1rem;
89
- height: 1rem;
74
+ width: var(--svadmin-space-4);
75
+ height: var(--svadmin-space-4);
90
76
  }
91
77
  .svadmin-breadcrumbs {
92
78
  min-width: 0;
93
79
  }
94
80
  .svadmin-breadcrumbs--spaced {
95
- margin-bottom: 1rem;
81
+ margin-bottom: var(--svadmin-space-4);
96
82
  }
97
83
  .svadmin-breadcrumbs__item {
98
84
  display: inline-flex;
@@ -103,16 +89,11 @@
103
89
  color: var(--muted-foreground);
104
90
  }
105
91
  .svadmin-filter-toolbar {
106
- --svadmin-filter-control-height: 2.25rem;
107
- --svadmin-filter-control-font: 0.875rem;
108
- --svadmin-filter-search-icon-size: 1rem;
92
+ --svadmin-filter-control-height: var(--svadmin-control-h);
93
+ --svadmin-filter-control-font: var(--svadmin-text-body);
94
+ --svadmin-filter-search-icon-size: var(--svadmin-space-4);
109
95
  min-width: 0;
110
96
  }
111
- .svadmin-filter-toolbar[data-density="compact"] {
112
- --svadmin-filter-control-height: 2rem;
113
- --svadmin-filter-control-font: 0.75rem;
114
- --svadmin-filter-search-icon-size: 0.875rem;
115
- }
116
97
  .svadmin-filter-toolbar__search {
117
98
  position: relative;
118
99
  min-width: 0;
@@ -120,60 +101,57 @@
120
101
  .svadmin-filter-toolbar__search-icon {
121
102
  position: absolute;
122
103
  top: 50%;
123
- inset-inline-start: 0.75rem;
104
+ inset-inline-start: var(--svadmin-space-3);
124
105
  width: var(--svadmin-filter-search-icon-size);
125
106
  height: var(--svadmin-filter-search-icon-size);
126
107
  color: var(--muted-foreground);
127
108
  transform: translateY(-50%);
128
109
  pointer-events: none;
129
110
  }
130
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__input {
111
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__input {
131
112
  height: var(--svadmin-filter-control-height);
132
- padding-inline: 2.25rem;
113
+ padding-inline: calc(var(--svadmin-space-5) + var(--svadmin-space-3));
133
114
  font-size: var(--svadmin-filter-control-font);
134
- line-height: 1rem;
115
+ line-height: var(--svadmin-leading-tight);
135
116
  }
136
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__clear {
117
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__clear {
137
118
  position: absolute;
138
119
  top: 50%;
139
- inset-inline-end: 0.25rem;
120
+ inset-inline-end: var(--svadmin-space-1);
140
121
  transform: translateY(-50%);
141
122
  }
142
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__toggle {
123
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__toggle {
143
124
  flex-shrink: 0;
144
- gap: 0.375rem;
125
+ gap: var(--svadmin-space-2);
145
126
  height: var(--svadmin-filter-control-height);
146
127
  font-size: var(--svadmin-filter-control-font);
147
128
  max-width: 100%;
148
129
  white-space: normal;
149
130
  overflow-wrap: anywhere;
150
131
  }
151
- .svadmin-filter-toolbar[data-density="compact"] .svadmin-filter-toolbar__toggle {
152
- padding-inline: 0.625rem;
153
- }
154
132
  .svadmin-filter-toolbar .svadmin-filter-toolbar__control-icon {
155
- width: 0.875rem;
156
- height: 0.875rem;
133
+ width: var(--svadmin-space-3);
134
+ height: var(--svadmin-space-3);
157
135
  }
158
136
  .svadmin-filter-toolbar .svadmin-filter-toolbar__chevron {
159
- width: 0.75rem;
160
- height: 0.75rem;
161
- margin-inline-start: 0.125rem;
137
+ width: var(--svadmin-space-3);
138
+ height: var(--svadmin-space-3);
139
+ margin-inline-start: var(--svadmin-space-1);
162
140
  color: var(--muted-foreground);
163
141
  }
164
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__count {
165
- height: 1rem;
166
- min-height: 1rem;
167
- min-width: 1rem;
168
- margin-inline-start: 0.125rem;
169
- padding: 0 0.25rem;
170
- font-size: 0.625rem;
142
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__count {
143
+ height: var(--svadmin-space-4);
144
+ min-height: var(--svadmin-space-4);
145
+ min-width: var(--svadmin-space-4);
146
+ margin-inline-start: var(--svadmin-space-1);
147
+ padding: 0 var(--svadmin-space-1);
148
+ font-size: var(--svadmin-text-caption);
171
149
  font-weight: 600;
172
150
  line-height: 1;
173
151
  font-variant-numeric: tabular-nums;
174
152
  }
175
153
  .svadmin-filter-toolbar .svadmin-filter-toolbar-advanced {
176
- margin-top: 0.5rem;
154
+ margin-top: var(--svadmin-space-2);
177
155
  border: 1px solid var(--border);
178
156
  @supports (color: color-mix(in lab, red, red)) {
179
157
  border: 1px solid color-mix(in oklch, var(--border) 60%, transparent);
@@ -183,7 +161,7 @@
183
161
  @supports (color: color-mix(in lab, red, red)) {
184
162
  background: color-mix(in oklch, var(--muted) 20%, transparent);
185
163
  }
186
- padding: 0.75rem;
164
+ padding: var(--svadmin-space-3);
187
165
  overflow-wrap: anywhere;
188
166
  }
189
167
  @media (min-width: 640px) {
@@ -196,10 +174,10 @@
196
174
  justify-content: space-between;
197
175
  }
198
176
  .svadmin-page-header__heading {
199
- flex: 1 1 16rem;
177
+ flex: 1 1 var(--svadmin-chrome-basis);
200
178
  }
201
179
  .svadmin-filter-toolbar__search {
202
- flex: 1 1 14rem;
180
+ flex: 1 1 var(--svadmin-chrome-basis);
203
181
  }
204
182
  }
205
183
  }