@happyvertical/smrt-ui 0.55.16 → 0.55.18

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 (166) hide show
  1. package/AGENTS.md +14 -0
  2. package/README.md +75 -0
  3. package/dist/components/calendar/Calendar.svelte +59 -56
  4. package/dist/components/calendar/CalendarView.svelte +80 -77
  5. package/dist/components/calendar/DayView.svelte +39 -36
  6. package/dist/components/chat/MessageBubble.svelte +26 -23
  7. package/dist/components/chat/ReactionPicker.svelte +12 -9
  8. package/dist/components/chat/TypingIndicator.svelte +12 -9
  9. package/dist/components/data/CollectionList.svelte +11 -8
  10. package/dist/components/data/CollectionToolbar.svelte +5 -2
  11. package/dist/components/data/DataTable.svelte +74 -59
  12. package/dist/components/data/ListSortSelect.svelte +8 -5
  13. package/dist/components/data/SortableHeader.svelte +10 -7
  14. package/dist/components/display/ConfidenceBadge.svelte +11 -8
  15. package/dist/components/display/CurrencyDisplay.svelte +7 -4
  16. package/dist/components/display/DateDisplay.svelte +6 -3
  17. package/dist/components/display/Icon.svelte +4 -1
  18. package/dist/components/display/StatusBadge.svelte +9 -6
  19. package/dist/components/feedback/Alert.svelte +12 -8
  20. package/dist/components/feedback/ConfirmDialog.svelte +13 -10
  21. package/dist/components/feedback/LoadingOverlay.svelte +37 -34
  22. package/dist/components/feedback/Meter.svelte +4 -1
  23. package/dist/components/feedback/Modal.svelte +26 -21
  24. package/dist/components/feedback/PhoneSheet.svelte +6 -3
  25. package/dist/components/feedback/Progress.svelte +8 -5
  26. package/dist/components/feedback/ProgressBar.svelte +13 -10
  27. package/dist/components/feedback/Spinner.svelte +4 -1
  28. package/dist/components/feedback/ToastViewport.svelte +18 -15
  29. package/dist/components/feedback/WorkingStrip.svelte +6 -3
  30. package/dist/components/forms/CameraCapture.svelte +8 -5
  31. package/dist/components/forms/Checkbox.svelte +11 -8
  32. package/dist/components/forms/Combobox.svelte +5 -2
  33. package/dist/components/forms/DatePicker.svelte +7 -2
  34. package/dist/components/forms/DictationButton.svelte +17 -14
  35. package/dist/components/forms/DictationStatus.svelte +12 -9
  36. package/dist/components/forms/ErrorSummary.svelte +4 -1
  37. package/dist/components/forms/FieldLabel.svelte +9 -6
  38. package/dist/components/forms/Fieldset.svelte +4 -1
  39. package/dist/components/forms/FilePicker.svelte +5 -2
  40. package/dist/components/forms/Form.svelte +1 -1
  41. package/dist/components/forms/FormActionBar.svelte +4 -1
  42. package/dist/components/forms/FormGroup.svelte +6 -3
  43. package/dist/components/forms/Input.svelte +22 -15
  44. package/dist/components/forms/InputGroup.svelte +6 -3
  45. package/dist/components/forms/Listbox.svelte +5 -2
  46. package/dist/components/forms/MultiSelect.svelte +4 -1
  47. package/dist/components/forms/Radio.svelte +9 -6
  48. package/dist/components/forms/RadioGroup.svelte +5 -2
  49. package/dist/components/forms/RangeSlider.svelte +5 -2
  50. package/dist/components/forms/RelationInput.svelte +7 -4
  51. package/dist/components/forms/SearchInput.svelte +7 -4
  52. package/dist/components/forms/SegmentedControl.svelte +6 -3
  53. package/dist/components/forms/Select.svelte +20 -13
  54. package/dist/components/forms/SignaturePad.svelte +8 -5
  55. package/dist/components/forms/Slider.svelte +5 -2
  56. package/dist/components/forms/StagedControlReview.svelte +15 -12
  57. package/dist/components/forms/Switch.svelte +8 -5
  58. package/dist/components/forms/TagsInput.svelte +5 -2
  59. package/dist/components/forms/Textarea.svelte +20 -13
  60. package/dist/components/forms/TimePicker.svelte +7 -2
  61. package/dist/components/forms/Toggle.svelte +14 -11
  62. package/dist/components/forms/ToggleButton.svelte +5 -2
  63. package/dist/components/layout/ActionGroup.svelte +4 -1
  64. package/dist/components/layout/Container.svelte +4 -1
  65. package/dist/components/layout/EmptyState.svelte +11 -8
  66. package/dist/components/layout/Footer.svelte +4 -1
  67. package/dist/components/layout/Grid.svelte +13 -10
  68. package/dist/components/layout/Header.svelte +4 -1
  69. package/dist/components/layout/Masthead.svelte +4 -1
  70. package/dist/components/layout/PageHeader.svelte +12 -9
  71. package/dist/components/layout/PageLayout.svelte +3 -0
  72. package/dist/components/layout/SummaryCard.svelte +9 -6
  73. package/dist/components/memberships/MembershipCard.svelte +5 -2
  74. package/dist/components/memberships/MembershipList.svelte +5 -2
  75. package/dist/components/nav/FilterChips.svelte +13 -10
  76. package/dist/components/nav/Tabs.svelte +75 -41
  77. package/dist/components/permissions/PermissionPicker.svelte +5 -2
  78. package/dist/components/roles/RoleBadge.svelte +8 -5
  79. package/dist/components/roles/RoleSelector.svelte +22 -19
  80. package/dist/components/theme/ThemeProvider.svelte +7 -4
  81. package/dist/components/ui/Accordion.svelte +4 -1
  82. package/dist/components/ui/AccordionItem.svelte +5 -2
  83. package/dist/components/ui/Avatar.svelte +10 -7
  84. package/dist/components/ui/Badge.svelte +6 -2
  85. package/dist/components/ui/Button.svelte +49 -37
  86. package/dist/components/ui/Card.svelte +18 -14
  87. package/dist/components/ui/Chip.svelte +41 -14
  88. package/dist/components/ui/Disclosure.svelte +5 -2
  89. package/dist/components/ui/Dropdown.svelte +33 -25
  90. package/dist/components/ui/IconToggle.svelte +12 -9
  91. package/dist/components/ui/IconToggle.svelte.d.ts +1 -1
  92. package/dist/components/ui/IconToggle.svelte.d.ts.map +1 -1
  93. package/dist/components/ui/IconToggleGroup.svelte +8 -5
  94. package/dist/components/ui/Pagination.svelte +11 -8
  95. package/dist/components/ui/Popover.svelte +9 -6
  96. package/dist/components/ui/Skeleton.svelte +10 -7
  97. package/dist/components/ui/Tooltip.svelte +13 -9
  98. package/dist/components/ui/Tree.svelte +12 -9
  99. package/dist/styles/layers.css +8 -0
  100. package/dist/styles/layers.d.ts +9 -0
  101. package/dist/styles/layers.d.ts.map +1 -0
  102. package/dist/styles/layers.js +8 -0
  103. package/dist/styles/tokens.css +27 -69
  104. package/dist/styles/unstyled.css +65 -0
  105. package/dist/svelte/playground/BaseControlsPreview.svelte +3 -0
  106. package/dist/svelte/playground/CalendarPreview.svelte +5 -2
  107. package/dist/svelte/playground/CapturePreview.svelte +3 -0
  108. package/dist/svelte/playground/CodeSelectorsPreview.svelte +3 -0
  109. package/dist/svelte/playground/CollectionsPreview.svelte +3 -0
  110. package/dist/svelte/playground/DataTablePreview.svelte +3 -0
  111. package/dist/svelte/playground/FeedbackPreview.svelte +3 -0
  112. package/dist/svelte/playground/InteractiveControlsPreview.svelte +3 -0
  113. package/dist/svelte/playground/StylelessPreview.svelte +110 -0
  114. package/dist/svelte/playground/StylelessPreview.svelte.d.ts +4 -0
  115. package/dist/svelte/playground/StylelessPreview.svelte.d.ts.map +1 -0
  116. package/dist/svelte/playground.d.ts.map +1 -1
  117. package/dist/svelte/playground.js +10 -0
  118. package/dist/test-support/setup.js +9 -0
  119. package/dist/theme/ThemeProvider.svelte +3 -0
  120. package/dist/themes/CUSTOM_THEME_GUIDE.md +40 -0
  121. package/dist/themes/README.md +151 -0
  122. package/dist/themes/ThemeProvider.svelte +181 -12
  123. package/dist/themes/ThemeProvider.svelte.d.ts +7 -2
  124. package/dist/themes/ThemeProvider.svelte.d.ts.map +1 -1
  125. package/dist/themes/components/ColorSchemeToggle.svelte +17 -14
  126. package/dist/themes/components/ThemeSwitcher.svelte +14 -11
  127. package/dist/themes/create-theme.d.ts +22 -1
  128. package/dist/themes/create-theme.d.ts.map +1 -1
  129. package/dist/themes/create-theme.js +100 -9
  130. package/dist/themes/css-generator.d.ts.map +1 -1
  131. package/dist/themes/css-generator.js +20 -20
  132. package/dist/themes/derive.d.ts +31 -0
  133. package/dist/themes/derive.d.ts.map +1 -0
  134. package/dist/themes/derive.js +183 -0
  135. package/dist/themes/glass/index.d.ts.map +1 -1
  136. package/dist/themes/glass/index.js +127 -14
  137. package/dist/themes/happyvertical/index.d.ts.map +1 -1
  138. package/dist/themes/happyvertical/index.js +101 -20
  139. package/dist/themes/index.d.ts +2 -2
  140. package/dist/themes/index.d.ts.map +1 -1
  141. package/dist/themes/index.js +1 -1
  142. package/dist/themes/material/index.d.ts.map +1 -1
  143. package/dist/themes/material/index.js +129 -28
  144. package/dist/themes/required-tokens.generated.json +201 -0
  145. package/dist/themes/shared.d.ts +35 -0
  146. package/dist/themes/shared.d.ts.map +1 -1
  147. package/dist/themes/shared.js +32 -0
  148. package/dist/themes/smrt/index.d.ts +3 -0
  149. package/dist/themes/smrt/index.d.ts.map +1 -1
  150. package/dist/themes/smrt/index.js +108 -26
  151. package/dist/themes/studio/index.d.ts.map +1 -1
  152. package/dist/themes/studio/index.js +116 -40
  153. package/dist/themes/styles/base.css +229 -1
  154. package/dist/themes/styles/glass.css +107 -20
  155. package/dist/themes/styles/happyvertical.css +111 -15
  156. package/dist/themes/styles/material.css +127 -35
  157. package/dist/themes/styles/smrt.css +126 -31
  158. package/dist/themes/styles/studio.css +132 -37
  159. package/dist/themes/theme-script.d.ts +3 -1
  160. package/dist/themes/theme-script.d.ts.map +1 -1
  161. package/dist/themes/theme-script.js +7 -2
  162. package/dist/themes/types.d.ts +118 -6
  163. package/dist/themes/types.d.ts.map +1 -1
  164. package/dist/utils/theme/typography.d.ts +21 -21
  165. package/dist/utils/theme/typography.js +21 -21
  166. package/package.json +8 -2
@@ -84,10 +84,10 @@ const responsiveStyles = $derived.by(() => {
84
84
  if (!isResponsive) return '';
85
85
  const cols = columns as ResponsiveColumns;
86
86
  const vars: string[] = [];
87
- if (cols.sm !== undefined) vars.push(`--grid-columns-sm: ${cols.sm}`);
88
- if (cols.md !== undefined) vars.push(`--grid-columns-md: ${cols.md}`);
89
- if (cols.lg !== undefined) vars.push(`--grid-columns-lg: ${cols.lg}`);
90
- if (cols.xl !== undefined) vars.push(`--grid-columns-xl: ${cols.xl}`);
87
+ if (cols.sm !== undefined) vars.push(`--smrt-grid-columns-sm: ${cols.sm}`);
88
+ if (cols.md !== undefined) vars.push(`--smrt-grid-columns-md: ${cols.md}`);
89
+ if (cols.lg !== undefined) vars.push(`--smrt-grid-columns-lg: ${cols.lg}`);
90
+ if (cols.xl !== undefined) vars.push(`--smrt-grid-columns-xl: ${cols.xl}`);
91
91
  return vars.join('; ');
92
92
  });
93
93
 
@@ -143,19 +143,21 @@ const gridClasses = $derived.by(() => {
143
143
  </script>
144
144
 
145
145
  {#if header}
146
- <div class="grid-header">
146
+ <div class="grid-header" data-smrt-component="Grid">
147
147
  {@render header()}
148
148
  </div>
149
149
  {/if}
150
150
  <div
151
151
  class={gridClasses}
152
152
  style={inlineStyles}
153
- {...rest}
153
+ {...rest} data-smrt-component="Grid"
154
154
  >
155
155
  {@render children?.()}
156
156
  </div>
157
157
 
158
158
  <style>
159
+ @layer smrt.reset, smrt.structure, smrt.theme;
160
+ @layer smrt.theme {
159
161
  .grid {
160
162
  display: grid;
161
163
  min-width: 0;
@@ -168,24 +170,24 @@ const gridClasses = $derived.by(() => {
168
170
 
169
171
  /* Responsive grid - uses CSS variables set via inline styles */
170
172
  .grid-responsive {
171
- grid-template-columns: repeat(var(--grid-columns-sm, 1), 1fr);
173
+ grid-template-columns: repeat(var(--smrt-grid-columns-sm, 1), 1fr);
172
174
  }
173
175
 
174
176
  @media (min-width: 640px) {
175
177
  .grid-responsive {
176
- grid-template-columns: repeat(var(--grid-columns-md, var(--grid-columns-sm, 2)), 1fr);
178
+ grid-template-columns: repeat(var(--smrt-grid-columns-md, var(--smrt-grid-columns-sm, 2)), 1fr);
177
179
  }
178
180
  }
179
181
 
180
182
  @media (min-width: 1024px) {
181
183
  .grid-responsive {
182
- grid-template-columns: repeat(var(--grid-columns-lg, var(--grid-columns-md, var(--grid-columns-sm, 3))), 1fr);
184
+ grid-template-columns: repeat(var(--smrt-grid-columns-lg, var(--smrt-grid-columns-md, var(--smrt-grid-columns-sm, 3))), 1fr);
183
185
  }
184
186
  }
185
187
 
186
188
  @media (min-width: 1280px) {
187
189
  .grid-responsive {
188
- grid-template-columns: repeat(var(--grid-columns-xl, var(--grid-columns-lg, var(--grid-columns-md, var(--grid-columns-sm, 4)))), 1fr);
190
+ grid-template-columns: repeat(var(--smrt-grid-columns-xl, var(--smrt-grid-columns-lg, var(--smrt-grid-columns-md, var(--smrt-grid-columns-sm, 4)))), 1fr);
189
191
  }
190
192
  }
191
193
 
@@ -239,4 +241,5 @@ const gridClasses = $derived.by(() => {
239
241
  .col-gap-xl {
240
242
  column-gap: var(--smrt-spacing-12);
241
243
  }
244
+ }
242
245
  </style>
@@ -12,7 +12,7 @@ export interface Props {
12
12
  const { logo, nav }: Props = $props();
13
13
  </script>
14
14
 
15
- <header class="site-header">
15
+ <header class="site-header" data-smrt-component="Header">
16
16
  <Container>
17
17
  <div class="header-content">
18
18
  {#if logo}
@@ -31,6 +31,8 @@ const { logo, nav }: Props = $props();
31
31
  </header>
32
32
 
33
33
  <style>
34
+ @layer smrt.reset, smrt.structure, smrt.theme;
35
+ @layer smrt.theme {
34
36
  .site-header {
35
37
  background: var(--smrt-color-primary);
36
38
  color: var(--smrt-color-on-primary);
@@ -85,4 +87,5 @@ const { logo, nav }: Props = $props();
85
87
  font-size: var(--smrt-typography-headline-medium-size);
86
88
  }
87
89
  }
90
+ }
88
91
  </style>
@@ -36,7 +36,7 @@ const {
36
36
  }: Props = $props();
37
37
  </script>
38
38
 
39
- <div class="masthead">
39
+ <div class="masthead" data-smrt-component="Masthead">
40
40
  <Container>
41
41
  <!-- Desktop layout -->
42
42
  <div class="subheader desktop">
@@ -87,6 +87,8 @@ const {
87
87
  </div>
88
88
 
89
89
  <style>
90
+ @layer smrt.reset, smrt.structure, smrt.theme;
91
+ @layer smrt.theme {
90
92
  .masthead {
91
93
  border-bottom: 1px solid var(--smrt-color-outline-variant);
92
94
  background: var(--smrt-color-surface);
@@ -222,4 +224,5 @@ const {
222
224
  justify-self: unset;
223
225
  }
224
226
  }
227
+ }
225
228
  </style>
@@ -91,7 +91,7 @@ const trail = $derived<readonly PageHeaderCrumb[]>(
91
91
  $effect(() => shell?.report?.({ title: shortTitle ?? title, parents }));
92
92
  </script>
93
93
 
94
- <header class="page-header" data-page-header>
94
+ <header class="page-header" data-page-header data-smrt-component="PageHeader">
95
95
  {#if trail.length > 0}
96
96
  <nav class="page-crumbs" aria-label={crumbsLabel} data-shell-breadcrumbs>
97
97
  <ol>
@@ -140,12 +140,14 @@ $effect(() => shell?.report?.({ title: shortTitle ?? title, parents }));
140
140
  </header>
141
141
 
142
142
  <style>
143
+ @layer smrt.reset, smrt.structure, smrt.theme;
144
+ @layer smrt.theme {
143
145
  .page-header {
144
146
  margin-bottom: 1.5rem;
145
147
  }
146
148
 
147
149
  .page-crumbs {
148
- margin-bottom: var(--smrt-spacing-1, 4px);
150
+ margin-bottom: var(--smrt-spacing-1);
149
151
  color: var(--smrt-color-on-surface-variant);
150
152
  font: var(--smrt-typography-body-small-font);
151
153
  font-size: 0.84rem;
@@ -185,9 +187,9 @@ $effect(() => shell?.report?.({ title: shortTitle ?? title, parents }));
185
187
  }
186
188
 
187
189
  .page-crumbs a:focus-visible {
188
- outline: 2px solid var(--smrt-color-primary);
189
- outline-offset: 2px;
190
- border-radius: var(--smrt-radius-sm, 4px);
190
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
191
+ outline-offset: var(--smrt-focus-ring-offset);
192
+ border-radius: var(--smrt-radius-sm);
191
193
  }
192
194
 
193
195
  .header-main {
@@ -201,7 +203,7 @@ $effect(() => shell?.report?.({ title: shortTitle ?? title, parents }));
201
203
  .header-content {
202
204
  display: flex;
203
205
  flex-direction: column;
204
- gap: var(--smrt-spacing-1, 4px);
206
+ gap: var(--smrt-spacing-1);
205
207
  flex: 1;
206
208
  min-width: min(100%, 200px);
207
209
  }
@@ -209,13 +211,13 @@ $effect(() => shell?.report?.({ title: shortTitle ?? title, parents }));
209
211
  .back-link {
210
212
  display: inline-flex;
211
213
  align-items: center;
212
- gap: var(--smrt-spacing-1, 4px);
214
+ gap: var(--smrt-spacing-1);
213
215
  color: var(--smrt-color-primary);
214
216
  font: var(--smrt-typography-label-large-font);
215
217
  text-decoration: none;
216
218
  margin-bottom: 0.75rem;
217
- padding: var(--smrt-spacing-1, 4px) var(--smrt-spacing-2, 8px) var(--smrt-spacing-1, 4px) var(--smrt-spacing-1, 4px);
218
- border-radius: var(--smrt-radius-md, 8px);
219
+ padding: var(--smrt-spacing-1) var(--smrt-spacing-2) var(--smrt-spacing-1) var(--smrt-spacing-1);
220
+ border-radius: var(--smrt-radius-md);
219
221
  margin-left: -4px; /* Align icon with text below */
220
222
  transition: background-color 200ms;
221
223
  }
@@ -262,4 +264,5 @@ $effect(() => shell?.report?.({ title: shortTitle ?? title, parents }));
262
264
  .header-extra {
263
265
  margin-top: 1rem;
264
266
  }
267
+ }
265
268
  </style>
@@ -33,6 +33,8 @@ const {
33
33
  </Container>
34
34
 
35
35
  <style>
36
+ @layer smrt.reset, smrt.structure, smrt.theme;
37
+ @layer smrt.theme {
36
38
  .page-layout {
37
39
  display: grid;
38
40
  grid-template-columns: minmax(0, 1fr);
@@ -58,4 +60,5 @@ const {
58
60
  padding-block: var(--smrt-spacing-6) var(--smrt-spacing-10);
59
61
  }
60
62
  }
63
+ }
61
64
  </style>
@@ -76,7 +76,7 @@ const valueColorClass = $derived.by(() => {
76
76
  class:highlight
77
77
  class:clickable={true}
78
78
  {href}
79
- use:ripple
79
+ use:ripple data-smrt-component="SummaryCard"
80
80
  >
81
81
  {@render cardIcon()}
82
82
  <div class="card-content">
@@ -93,7 +93,7 @@ const valueColorClass = $derived.by(() => {
93
93
  </div>
94
94
  </a>
95
95
  {:else}
96
- <div class="summary-card" class:highlight>
96
+ <div class="summary-card" class:highlight data-smrt-component="SummaryCard">
97
97
  {@render cardIcon()}
98
98
  <div class="card-content">
99
99
  <span class="card-label">
@@ -108,13 +108,15 @@ const valueColorClass = $derived.by(() => {
108
108
  {/if}
109
109
 
110
110
  <style>
111
+ @layer smrt.reset, smrt.structure, smrt.theme;
112
+ @layer smrt.theme {
111
113
  .summary-card {
112
114
  display: flex;
113
115
  align-items: center;
114
116
  gap: 1rem;
115
117
  padding: 1rem 1.25rem;
116
118
  background-color: var(--smrt-color-surface-container-low);
117
- border-radius: var(--smrt-radius-lg, 12px);
119
+ border-radius: var(--smrt-radius-lg);
118
120
  text-decoration: none;
119
121
  color: var(--smrt-color-on-surface);
120
122
  transition: all 200ms cubic-bezier(0.2, 0, 0, 1);
@@ -140,7 +142,7 @@ const valueColorClass = $derived.by(() => {
140
142
  width: 3rem;
141
143
  height: 3rem;
142
144
  background-color: var(--smrt-color-surface-container-high);
143
- border-radius: var(--smrt-radius-lg, 12px);
145
+ border-radius: var(--smrt-radius-lg);
144
146
  color: var(--smrt-color-primary);
145
147
  flex-shrink: 0;
146
148
  }
@@ -154,7 +156,7 @@ const valueColorClass = $derived.by(() => {
154
156
  flex: 1;
155
157
  display: flex;
156
158
  flex-direction: column;
157
- gap: var(--smrt-spacing-1, 4px);
159
+ gap: var(--smrt-spacing-1);
158
160
  }
159
161
 
160
162
  .card-label {
@@ -180,7 +182,7 @@ const valueColorClass = $derived.by(() => {
180
182
  font: var(--smrt-typography-label-small-font);
181
183
  background-color: var(--smrt-color-primary);
182
184
  color: var(--smrt-color-on-primary);
183
- border-radius: var(--smrt-radius-full, 9999px);
185
+ border-radius: var(--smrt-radius-full);
184
186
  }
185
187
 
186
188
  .card-value {
@@ -202,4 +204,5 @@ const valueColorClass = $derived.by(() => {
202
204
  opacity: 1;
203
205
  color: var(--smrt-color-primary);
204
206
  }
207
+ }
205
208
  </style>
@@ -43,7 +43,7 @@ function formatDate(date: Date | string | null | undefined): string {
43
43
  }
44
44
  </script>
45
45
 
46
- <div class="membership-card">
46
+ <div class="membership-card" data-smrt-component="MembershipCard">
47
47
  <div class="main">
48
48
  <div class="tenant-info">
49
49
  <span class="tenant-name">{tenant.name}</span>
@@ -72,6 +72,8 @@ function formatDate(date: Date | string | null | undefined): string {
72
72
  </div>
73
73
 
74
74
  <style>
75
+ @layer smrt.reset, smrt.structure, smrt.theme;
76
+ @layer smrt.theme {
75
77
  .membership-card {
76
78
  padding: 1rem;
77
79
  background: var(--smrt-color-surface);
@@ -100,7 +102,7 @@ function formatDate(date: Date | string | null | undefined): string {
100
102
  .status {
101
103
  font-size: var(--smrt-typography-label-small-size, 0.625rem);
102
104
  padding: 0.125rem 0.375rem;
103
- border-radius: var(--smrt-radius-full, 9999px);
105
+ border-radius: var(--smrt-radius-full);
104
106
  text-transform: uppercase;
105
107
  font-weight: var(--smrt-typography-weight-semibold, 600);
106
108
  }
@@ -165,4 +167,5 @@ function formatDate(date: Date | string | null | undefined): string {
165
167
  .action-btn.danger:hover {
166
168
  background: var(--smrt-color-error-container);
167
169
  }
170
+ }
168
171
  </style>
@@ -37,7 +37,7 @@ const {
37
37
  }: Props = $props();
38
38
  </script>
39
39
 
40
- <div class="membership-list">
40
+ <div class="membership-list" data-smrt-component="MembershipList">
41
41
  {#if loading}
42
42
  <div class="loading">
43
43
  <div class="spinner"></div>
@@ -63,6 +63,8 @@ const {
63
63
  </div>
64
64
 
65
65
  <style>
66
+ @layer smrt.reset, smrt.structure, smrt.theme;
67
+ @layer smrt.theme {
66
68
  .membership-list {
67
69
  display: flex;
68
70
  flex-direction: column;
@@ -83,7 +85,7 @@ const {
83
85
  height: 1.25rem;
84
86
  border: 2px solid var(--smrt-color-outline-variant);
85
87
  border-top-color: var(--smrt-color-primary);
86
- border-radius: var(--smrt-radius-full, 9999px);
88
+ border-radius: var(--smrt-radius-full);
87
89
  animation: spin 0.6s linear infinite;
88
90
  }
89
91
 
@@ -101,4 +103,5 @@ const {
101
103
  border: 1px dashed var(--smrt-color-outline);
102
104
  border-radius: 0.5rem;
103
105
  }
106
+ }
104
107
  </style>
@@ -57,7 +57,7 @@ function handleClick(value: string) {
57
57
  }
58
58
  </script>
59
59
 
60
- <div data-density={density} class="filter-chips" class:sm={size === 'sm'} role="radiogroup">
60
+ <div data-density={density} class="filter-chips" class:sm={size === 'sm'} role="radiogroup" data-smrt-component="FilterChips">
61
61
  {#each allOptions as option (option.value)}
62
62
  {@const isActive = option.value === selected}
63
63
  <button
@@ -84,24 +84,26 @@ function handleClick(value: string) {
84
84
  </div>
85
85
 
86
86
  <style>
87
+ @layer smrt.reset, smrt.structure, smrt.theme;
88
+ @layer smrt.theme {
87
89
  .filter-chips {
88
90
  display: flex;
89
- gap: var(--smrt-spacing-2, 8px);
91
+ gap: var(--smrt-spacing-2);
90
92
  flex-wrap: wrap;
91
93
  }
92
94
 
93
95
  .filter-chip {
94
96
  display: inline-flex;
95
97
  align-items: center;
96
- gap: var(--smrt-spacing-2, 8px);
98
+ gap: var(--smrt-spacing-2);
97
99
  height: 32px;
98
- padding: 0 var(--smrt-spacing-4, 16px);
100
+ padding: 0 var(--smrt-spacing-4);
99
101
  font: var(--smrt-typography-label-large-font);
100
102
  font-weight: var(--smrt-typography-weight-medium, 500);
101
103
  color: var(--smrt-color-on-surface-variant);
102
104
  background-color: transparent;
103
105
  border: 1px solid var(--smrt-color-outline);
104
- border-radius: var(--smrt-radius-md, 8px);
106
+ border-radius: var(--smrt-radius-md);
105
107
  cursor: pointer;
106
108
  transition: all 200ms cubic-bezier(0.2, 0, 0, 1);
107
109
  white-space: nowrap;
@@ -111,9 +113,9 @@ function handleClick(value: string) {
111
113
 
112
114
  .sm .filter-chip {
113
115
  height: 28px;
114
- padding: 0 var(--smrt-spacing-3, 12px);
116
+ padding: 0 var(--smrt-spacing-3);
115
117
  font: var(--smrt-typography-label-medium-font);
116
- gap: var(--smrt-spacing-2, 8px);
118
+ gap: var(--smrt-spacing-2);
117
119
  }
118
120
 
119
121
  .filter-chip:hover:not(:disabled) {
@@ -124,11 +126,11 @@ function handleClick(value: string) {
124
126
  background-color: var(--smrt-color-secondary-container);
125
127
  border-color: transparent;
126
128
  color: var(--smrt-color-on-secondary-container);
127
- padding-left: var(--smrt-spacing-3, 12px);
129
+ padding-left: var(--smrt-spacing-3);
128
130
  }
129
131
 
130
132
  .sm .filter-chip.active {
131
- padding-left: var(--smrt-spacing-2, 8px);
133
+ padding-left: var(--smrt-spacing-2);
132
134
  }
133
135
 
134
136
  .filter-chip:disabled {
@@ -153,7 +155,8 @@ function handleClick(value: string) {
153
155
  color: var(--smrt-color-on-secondary-container);
154
156
  }
155
157
 
156
- .filter-chips[data-density='touch'] { --smrt-control-target-min: var(--smrt-touch-target-min, 48px); }
158
+ .filter-chips[data-density='touch'] { --smrt-control-target-min: var(--smrt-touch-target-min); }
157
159
  .filter-chips[data-density='comfortable'] { --smrt-control-target-min: 0px; }
158
160
  .filter-chip { min-height: var(--smrt-control-target-min, 0px); min-width: var(--smrt-control-target-min, 0px); }
161
+ }
159
162
  </style>