@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.
- package/AGENTS.md +14 -0
- package/README.md +75 -0
- package/dist/components/calendar/Calendar.svelte +59 -56
- package/dist/components/calendar/CalendarView.svelte +80 -77
- package/dist/components/calendar/DayView.svelte +39 -36
- package/dist/components/chat/MessageBubble.svelte +26 -23
- package/dist/components/chat/ReactionPicker.svelte +12 -9
- package/dist/components/chat/TypingIndicator.svelte +12 -9
- package/dist/components/data/CollectionList.svelte +11 -8
- package/dist/components/data/CollectionToolbar.svelte +5 -2
- package/dist/components/data/DataTable.svelte +74 -59
- package/dist/components/data/ListSortSelect.svelte +8 -5
- package/dist/components/data/SortableHeader.svelte +10 -7
- package/dist/components/display/ConfidenceBadge.svelte +11 -8
- package/dist/components/display/CurrencyDisplay.svelte +7 -4
- package/dist/components/display/DateDisplay.svelte +6 -3
- package/dist/components/display/Icon.svelte +4 -1
- package/dist/components/display/StatusBadge.svelte +9 -6
- package/dist/components/feedback/Alert.svelte +12 -8
- package/dist/components/feedback/ConfirmDialog.svelte +13 -10
- package/dist/components/feedback/LoadingOverlay.svelte +37 -34
- package/dist/components/feedback/Meter.svelte +4 -1
- package/dist/components/feedback/Modal.svelte +26 -21
- package/dist/components/feedback/PhoneSheet.svelte +6 -3
- package/dist/components/feedback/Progress.svelte +8 -5
- package/dist/components/feedback/ProgressBar.svelte +13 -10
- package/dist/components/feedback/Spinner.svelte +4 -1
- package/dist/components/feedback/ToastViewport.svelte +18 -15
- package/dist/components/feedback/WorkingStrip.svelte +6 -3
- package/dist/components/forms/CameraCapture.svelte +8 -5
- package/dist/components/forms/Checkbox.svelte +11 -8
- package/dist/components/forms/Combobox.svelte +5 -2
- package/dist/components/forms/DatePicker.svelte +7 -2
- package/dist/components/forms/DictationButton.svelte +17 -14
- package/dist/components/forms/DictationStatus.svelte +12 -9
- package/dist/components/forms/ErrorSummary.svelte +4 -1
- package/dist/components/forms/FieldLabel.svelte +9 -6
- package/dist/components/forms/Fieldset.svelte +4 -1
- package/dist/components/forms/FilePicker.svelte +5 -2
- package/dist/components/forms/Form.svelte +1 -1
- package/dist/components/forms/FormActionBar.svelte +4 -1
- package/dist/components/forms/FormGroup.svelte +6 -3
- package/dist/components/forms/Input.svelte +22 -15
- package/dist/components/forms/InputGroup.svelte +6 -3
- package/dist/components/forms/Listbox.svelte +5 -2
- package/dist/components/forms/MultiSelect.svelte +4 -1
- package/dist/components/forms/Radio.svelte +9 -6
- package/dist/components/forms/RadioGroup.svelte +5 -2
- package/dist/components/forms/RangeSlider.svelte +5 -2
- package/dist/components/forms/RelationInput.svelte +7 -4
- package/dist/components/forms/SearchInput.svelte +7 -4
- package/dist/components/forms/SegmentedControl.svelte +6 -3
- package/dist/components/forms/Select.svelte +20 -13
- package/dist/components/forms/SignaturePad.svelte +8 -5
- package/dist/components/forms/Slider.svelte +5 -2
- package/dist/components/forms/StagedControlReview.svelte +15 -12
- package/dist/components/forms/Switch.svelte +8 -5
- package/dist/components/forms/TagsInput.svelte +5 -2
- package/dist/components/forms/Textarea.svelte +20 -13
- package/dist/components/forms/TimePicker.svelte +7 -2
- package/dist/components/forms/Toggle.svelte +14 -11
- package/dist/components/forms/ToggleButton.svelte +5 -2
- package/dist/components/layout/ActionGroup.svelte +4 -1
- package/dist/components/layout/Container.svelte +4 -1
- package/dist/components/layout/EmptyState.svelte +11 -8
- package/dist/components/layout/Footer.svelte +4 -1
- package/dist/components/layout/Grid.svelte +13 -10
- package/dist/components/layout/Header.svelte +4 -1
- package/dist/components/layout/Masthead.svelte +4 -1
- package/dist/components/layout/PageHeader.svelte +12 -9
- package/dist/components/layout/PageLayout.svelte +3 -0
- package/dist/components/layout/SummaryCard.svelte +9 -6
- package/dist/components/memberships/MembershipCard.svelte +5 -2
- package/dist/components/memberships/MembershipList.svelte +5 -2
- package/dist/components/nav/FilterChips.svelte +13 -10
- package/dist/components/nav/Tabs.svelte +75 -41
- package/dist/components/permissions/PermissionPicker.svelte +5 -2
- package/dist/components/roles/RoleBadge.svelte +8 -5
- package/dist/components/roles/RoleSelector.svelte +22 -19
- package/dist/components/theme/ThemeProvider.svelte +7 -4
- package/dist/components/ui/Accordion.svelte +4 -1
- package/dist/components/ui/AccordionItem.svelte +5 -2
- package/dist/components/ui/Avatar.svelte +10 -7
- package/dist/components/ui/Badge.svelte +6 -2
- package/dist/components/ui/Button.svelte +49 -37
- package/dist/components/ui/Card.svelte +18 -14
- package/dist/components/ui/Chip.svelte +41 -14
- package/dist/components/ui/Disclosure.svelte +5 -2
- package/dist/components/ui/Dropdown.svelte +33 -25
- package/dist/components/ui/IconToggle.svelte +12 -9
- package/dist/components/ui/IconToggle.svelte.d.ts +1 -1
- package/dist/components/ui/IconToggle.svelte.d.ts.map +1 -1
- package/dist/components/ui/IconToggleGroup.svelte +8 -5
- package/dist/components/ui/Pagination.svelte +11 -8
- package/dist/components/ui/Popover.svelte +9 -6
- package/dist/components/ui/Skeleton.svelte +10 -7
- package/dist/components/ui/Tooltip.svelte +13 -9
- package/dist/components/ui/Tree.svelte +12 -9
- package/dist/styles/layers.css +8 -0
- package/dist/styles/layers.d.ts +9 -0
- package/dist/styles/layers.d.ts.map +1 -0
- package/dist/styles/layers.js +8 -0
- package/dist/styles/tokens.css +27 -69
- package/dist/styles/unstyled.css +65 -0
- package/dist/svelte/playground/BaseControlsPreview.svelte +3 -0
- package/dist/svelte/playground/CalendarPreview.svelte +5 -2
- package/dist/svelte/playground/CapturePreview.svelte +3 -0
- package/dist/svelte/playground/CodeSelectorsPreview.svelte +3 -0
- package/dist/svelte/playground/CollectionsPreview.svelte +3 -0
- package/dist/svelte/playground/DataTablePreview.svelte +3 -0
- package/dist/svelte/playground/FeedbackPreview.svelte +3 -0
- package/dist/svelte/playground/InteractiveControlsPreview.svelte +3 -0
- package/dist/svelte/playground/StylelessPreview.svelte +110 -0
- package/dist/svelte/playground/StylelessPreview.svelte.d.ts +4 -0
- package/dist/svelte/playground/StylelessPreview.svelte.d.ts.map +1 -0
- package/dist/svelte/playground.d.ts.map +1 -1
- package/dist/svelte/playground.js +10 -0
- package/dist/test-support/setup.js +9 -0
- package/dist/theme/ThemeProvider.svelte +3 -0
- package/dist/themes/CUSTOM_THEME_GUIDE.md +40 -0
- package/dist/themes/README.md +151 -0
- package/dist/themes/ThemeProvider.svelte +181 -12
- package/dist/themes/ThemeProvider.svelte.d.ts +7 -2
- package/dist/themes/ThemeProvider.svelte.d.ts.map +1 -1
- package/dist/themes/components/ColorSchemeToggle.svelte +17 -14
- package/dist/themes/components/ThemeSwitcher.svelte +14 -11
- package/dist/themes/create-theme.d.ts +22 -1
- package/dist/themes/create-theme.d.ts.map +1 -1
- package/dist/themes/create-theme.js +100 -9
- package/dist/themes/css-generator.d.ts.map +1 -1
- package/dist/themes/css-generator.js +20 -20
- package/dist/themes/derive.d.ts +31 -0
- package/dist/themes/derive.d.ts.map +1 -0
- package/dist/themes/derive.js +183 -0
- package/dist/themes/glass/index.d.ts.map +1 -1
- package/dist/themes/glass/index.js +127 -14
- package/dist/themes/happyvertical/index.d.ts.map +1 -1
- package/dist/themes/happyvertical/index.js +101 -20
- package/dist/themes/index.d.ts +2 -2
- package/dist/themes/index.d.ts.map +1 -1
- package/dist/themes/index.js +1 -1
- package/dist/themes/material/index.d.ts.map +1 -1
- package/dist/themes/material/index.js +129 -28
- package/dist/themes/required-tokens.generated.json +201 -0
- package/dist/themes/shared.d.ts +35 -0
- package/dist/themes/shared.d.ts.map +1 -1
- package/dist/themes/shared.js +32 -0
- package/dist/themes/smrt/index.d.ts +3 -0
- package/dist/themes/smrt/index.d.ts.map +1 -1
- package/dist/themes/smrt/index.js +108 -26
- package/dist/themes/studio/index.d.ts.map +1 -1
- package/dist/themes/studio/index.js +116 -40
- package/dist/themes/styles/base.css +229 -1
- package/dist/themes/styles/glass.css +107 -20
- package/dist/themes/styles/happyvertical.css +111 -15
- package/dist/themes/styles/material.css +127 -35
- package/dist/themes/styles/smrt.css +126 -31
- package/dist/themes/styles/studio.css +132 -37
- package/dist/themes/theme-script.d.ts +3 -1
- package/dist/themes/theme-script.d.ts.map +1 -1
- package/dist/themes/theme-script.js +7 -2
- package/dist/themes/types.d.ts +118 -6
- package/dist/themes/types.d.ts.map +1 -1
- package/dist/utils/theme/typography.d.ts +21 -21
- package/dist/utils/theme/typography.js +21 -21
- package/package.json +8 -2
|
@@ -154,6 +154,7 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
154
154
|
{#snippet linkTab(tab: Tab)}
|
|
155
155
|
<a
|
|
156
156
|
class="tab-link"
|
|
157
|
+
data-smrt-part="tab"
|
|
157
158
|
class:active={tab.id === active}
|
|
158
159
|
href={tab.disabled ? undefined : tab.href}
|
|
159
160
|
aria-current={tab.id === active ? 'page' : undefined}
|
|
@@ -167,20 +168,20 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
167
168
|
handleClick(tab.id);
|
|
168
169
|
}}
|
|
169
170
|
>
|
|
170
|
-
<span class="tab-label">{tab.label}</span>
|
|
171
|
+
<span class="tab-label" data-smrt-part="label">{tab.label}</span>
|
|
171
172
|
{#if tab.count !== undefined}
|
|
172
|
-
<span class="tab-count">{tab.count}</span>
|
|
173
|
+
<span class="tab-count" data-smrt-part="count">{tab.count}</span>
|
|
173
174
|
{/if}
|
|
174
175
|
{#if hasBadge(tab)}
|
|
175
|
-
<span class="tab-badge">{tab.badge}</span>
|
|
176
|
+
<span class="tab-badge" data-smrt-part="badge">{tab.badge}</span>
|
|
176
177
|
{/if}
|
|
177
178
|
</a>
|
|
178
179
|
{/snippet}
|
|
179
180
|
|
|
180
181
|
{#if linkMode}
|
|
181
|
-
<div class="tabs-container">
|
|
182
|
+
<div class="tabs-container" data-smrt-component="Tabs">
|
|
182
183
|
<nav
|
|
183
|
-
class="tabs-links"
|
|
184
|
+
class="tabs-links" data-smrt-part="list"
|
|
184
185
|
class:sm={size === 'sm'}
|
|
185
186
|
class:lg={size === 'lg'}
|
|
186
187
|
aria-label={ariaLabel}
|
|
@@ -193,14 +194,14 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
193
194
|
</div>
|
|
194
195
|
{#if split.overflow.length > 0}
|
|
195
196
|
<details class="tabs-more" bind:this={moreMenu}>
|
|
196
|
-
<summary class="tab-link">
|
|
197
|
-
<span class="tab-label">{moreLabel}</span>
|
|
197
|
+
<summary class="tab-link" data-smrt-part="trigger">
|
|
198
|
+
<span class="tab-label" data-smrt-part="label">{moreLabel}</span>
|
|
198
199
|
{#if overflowHasBadge}
|
|
199
200
|
<span class="tab-dot" aria-hidden="true"></span>
|
|
200
201
|
<span class="visually-hidden">({moreBadgeLabel})</span>
|
|
201
202
|
{/if}
|
|
202
203
|
</summary>
|
|
203
|
-
<div class="tabs-more-menu">
|
|
204
|
+
<div class="tabs-more-menu" data-smrt-part="menu">
|
|
204
205
|
{#each split.overflow as tab (tab.id)}
|
|
205
206
|
{@render linkTab(tab)}
|
|
206
207
|
{/each}
|
|
@@ -209,15 +210,15 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
209
210
|
{/if}
|
|
210
211
|
</nav>
|
|
211
212
|
{#if children}
|
|
212
|
-
<div class="tab-panel">
|
|
213
|
+
<div class="tab-panel" data-smrt-part="panel">
|
|
213
214
|
{@render children()}
|
|
214
215
|
</div>
|
|
215
216
|
{/if}
|
|
216
217
|
</div>
|
|
217
218
|
{:else}
|
|
218
|
-
<div class="tabs-container">
|
|
219
|
+
<div class="tabs-container" data-smrt-component="Tabs">
|
|
219
220
|
<div
|
|
220
|
-
class="tabs-nav"
|
|
221
|
+
class="tabs-nav" data-smrt-part="list"
|
|
221
222
|
class:sm={size === 'sm'}
|
|
222
223
|
class:lg={size === 'lg'}
|
|
223
224
|
class:secondary={variant === 'secondary'}
|
|
@@ -228,7 +229,7 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
228
229
|
{#each tabs as tab (tab.id)}
|
|
229
230
|
<button
|
|
230
231
|
type="button"
|
|
231
|
-
class="tab-button"
|
|
232
|
+
class="tab-button" data-smrt-part="tab"
|
|
232
233
|
class:active={tab.id === active}
|
|
233
234
|
disabled={tab.disabled}
|
|
234
235
|
role="tab"
|
|
@@ -242,12 +243,12 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
242
243
|
use:ripple
|
|
243
244
|
>
|
|
244
245
|
<span class="tab-content-wrapper">
|
|
245
|
-
<span class="tab-label">{tab.label}</span>
|
|
246
|
+
<span class="tab-label" data-smrt-part="label">{tab.label}</span>
|
|
246
247
|
{#if tab.count !== undefined}
|
|
247
|
-
<span class="tab-count">{tab.count}</span>
|
|
248
|
+
<span class="tab-count" data-smrt-part="count">{tab.count}</span>
|
|
248
249
|
{/if}
|
|
249
250
|
{#if hasBadge(tab)}
|
|
250
|
-
<span class="tab-badge">{tab.badge}</span>
|
|
251
|
+
<span class="tab-badge" data-smrt-part="badge">{tab.badge}</span>
|
|
251
252
|
{/if}
|
|
252
253
|
</span>
|
|
253
254
|
<div class="active-indicator"></div>
|
|
@@ -257,7 +258,7 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
257
258
|
|
|
258
259
|
{#if children}
|
|
259
260
|
<div
|
|
260
|
-
class="tab-panel"
|
|
261
|
+
class="tab-panel" data-smrt-part="panel"
|
|
261
262
|
role="tabpanel"
|
|
262
263
|
id="tab-panel-{instanceId}"
|
|
263
264
|
aria-labelledby="tab-{instanceId}-{active}"
|
|
@@ -269,6 +270,8 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
269
270
|
{/if}
|
|
270
271
|
|
|
271
272
|
<style>
|
|
273
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
274
|
+
@layer smrt.theme {
|
|
272
275
|
.tabs-container {
|
|
273
276
|
display: flex;
|
|
274
277
|
flex-direction: column;
|
|
@@ -277,7 +280,7 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
277
280
|
|
|
278
281
|
.tabs-nav {
|
|
279
282
|
display: flex;
|
|
280
|
-
border-bottom:
|
|
283
|
+
border-bottom: var(--smrt-hairline);
|
|
281
284
|
width: 100%;
|
|
282
285
|
}
|
|
283
286
|
|
|
@@ -287,13 +290,14 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
287
290
|
flex-direction: column;
|
|
288
291
|
align-items: center;
|
|
289
292
|
justify-content: center;
|
|
290
|
-
padding: 0 var(--smrt-spacing-4
|
|
293
|
+
padding: 0 var(--smrt-spacing-4);
|
|
291
294
|
height: 48px;
|
|
292
295
|
font: var(--smrt-typography-title-small-font);
|
|
293
|
-
font-weight: var(--smrt-
|
|
296
|
+
font-weight: var(--smrt-control-weight);
|
|
294
297
|
color: var(--smrt-color-on-surface-variant);
|
|
295
298
|
background: transparent;
|
|
296
299
|
border: none;
|
|
300
|
+
border-radius: var(--smrt-control-radius) var(--smrt-control-radius) 0 0;
|
|
297
301
|
cursor: pointer;
|
|
298
302
|
transition: all 200ms cubic-bezier(0.2, 0, 0, 1);
|
|
299
303
|
position: relative;
|
|
@@ -311,14 +315,35 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
311
315
|
font: var(--smrt-typography-title-medium-font);
|
|
312
316
|
}
|
|
313
317
|
|
|
318
|
+
/* State layer: currentColor mixed at the theme's state opacity. */
|
|
319
|
+
.tab-button::after {
|
|
320
|
+
content: '';
|
|
321
|
+
position: absolute;
|
|
322
|
+
inset: 0;
|
|
323
|
+
border-radius: inherit;
|
|
324
|
+
background: transparent;
|
|
325
|
+
pointer-events: none;
|
|
326
|
+
}
|
|
327
|
+
|
|
314
328
|
.tab-button:hover:not(:disabled) {
|
|
315
|
-
background-color: var(--smrt-color-surface-container-high);
|
|
316
329
|
color: var(--smrt-color-on-surface);
|
|
317
330
|
}
|
|
318
331
|
|
|
332
|
+
.tab-button:hover:not(:disabled)::after {
|
|
333
|
+
background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.tab-button:active:not(:disabled)::after {
|
|
337
|
+
background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.tab-button.active::after {
|
|
341
|
+
background: color-mix(in srgb, currentColor calc(var(--smrt-state-selected) * 100%), transparent);
|
|
342
|
+
}
|
|
343
|
+
|
|
319
344
|
.tab-button:focus-visible {
|
|
320
|
-
outline:
|
|
321
|
-
outline-offset: -
|
|
345
|
+
outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
|
|
346
|
+
outline-offset: calc(var(--smrt-focus-ring-width) * -1);
|
|
322
347
|
}
|
|
323
348
|
|
|
324
349
|
.tab-button.active {
|
|
@@ -326,14 +351,14 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
326
351
|
}
|
|
327
352
|
|
|
328
353
|
.tab-button:disabled {
|
|
329
|
-
opacity:
|
|
354
|
+
opacity: var(--smrt-state-disabled);
|
|
330
355
|
cursor: not-allowed;
|
|
331
356
|
}
|
|
332
357
|
|
|
333
358
|
.tab-content-wrapper {
|
|
334
359
|
display: flex;
|
|
335
360
|
align-items: center;
|
|
336
|
-
gap: var(--smrt-spacing-2
|
|
361
|
+
gap: var(--smrt-spacing-2);
|
|
337
362
|
height: 100%;
|
|
338
363
|
}
|
|
339
364
|
|
|
@@ -347,7 +372,7 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
347
372
|
bottom: 0;
|
|
348
373
|
height: 3px;
|
|
349
374
|
background-color: var(--smrt-color-primary);
|
|
350
|
-
border-radius: var(--smrt-radius-sm
|
|
375
|
+
border-radius: var(--smrt-radius-sm) var(--smrt-radius-sm) 0 0;
|
|
351
376
|
transition: width 200ms, opacity 200ms;
|
|
352
377
|
width: 0;
|
|
353
378
|
opacity: 0;
|
|
@@ -372,7 +397,7 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
372
397
|
min-width: 1.25rem;
|
|
373
398
|
padding: 0.05rem 0.4rem;
|
|
374
399
|
border-radius: 999px;
|
|
375
|
-
background: var(--smrt-
|
|
400
|
+
background: var(--smrt-surface-sunken);
|
|
376
401
|
color: var(--smrt-color-on-surface);
|
|
377
402
|
font: var(--smrt-typography-label-small-font);
|
|
378
403
|
font-weight: var(--smrt-typography-weight-bold, 700);
|
|
@@ -383,16 +408,16 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
383
408
|
.tabs-links {
|
|
384
409
|
display: flex;
|
|
385
410
|
align-items: stretch;
|
|
386
|
-
gap: var(--smrt-spacing-1
|
|
411
|
+
gap: var(--smrt-spacing-1);
|
|
387
412
|
width: 100%;
|
|
388
|
-
border-bottom:
|
|
413
|
+
border-bottom: var(--smrt-hairline);
|
|
389
414
|
}
|
|
390
415
|
|
|
391
416
|
.tabs-links-row {
|
|
392
417
|
display: flex;
|
|
393
418
|
flex: 1 1 auto;
|
|
394
419
|
min-width: 0;
|
|
395
|
-
gap: var(--smrt-spacing-1
|
|
420
|
+
gap: var(--smrt-spacing-1);
|
|
396
421
|
overflow-x: auto;
|
|
397
422
|
scrollbar-width: thin;
|
|
398
423
|
}
|
|
@@ -401,21 +426,23 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
401
426
|
display: inline-flex;
|
|
402
427
|
flex: 0 0 auto;
|
|
403
428
|
align-items: center;
|
|
404
|
-
gap: var(--smrt-spacing-2
|
|
405
|
-
min-height:
|
|
406
|
-
padding: 0 var(--smrt-spacing-4
|
|
429
|
+
gap: var(--smrt-spacing-2);
|
|
430
|
+
min-height: var(--smrt-control-height);
|
|
431
|
+
padding: 0 var(--smrt-spacing-4);
|
|
407
432
|
margin-bottom: -1px;
|
|
433
|
+
border-radius: var(--smrt-control-radius) var(--smrt-control-radius) 0 0;
|
|
408
434
|
border-bottom: 2px solid transparent;
|
|
409
435
|
color: var(--smrt-color-on-surface-variant);
|
|
410
436
|
font: var(--smrt-typography-title-small-font);
|
|
411
|
-
font-weight: var(--smrt-
|
|
437
|
+
font-weight: var(--smrt-control-weight);
|
|
412
438
|
text-decoration: none;
|
|
413
439
|
white-space: nowrap;
|
|
414
440
|
cursor: pointer;
|
|
415
441
|
}
|
|
416
442
|
|
|
417
443
|
.tabs-links.sm .tab-link {
|
|
418
|
-
min-height:
|
|
444
|
+
min-height: var(--smrt-control-height-small);
|
|
445
|
+
border-radius: var(--smrt-control-radius-small) var(--smrt-control-radius-small) 0 0;
|
|
419
446
|
font: var(--smrt-typography-label-large-font);
|
|
420
447
|
}
|
|
421
448
|
|
|
@@ -426,6 +453,11 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
426
453
|
|
|
427
454
|
.tab-link:hover {
|
|
428
455
|
color: var(--smrt-color-on-surface);
|
|
456
|
+
background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.tab-link:active {
|
|
460
|
+
background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent);
|
|
429
461
|
}
|
|
430
462
|
|
|
431
463
|
.tab-link.active {
|
|
@@ -434,13 +466,13 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
434
466
|
}
|
|
435
467
|
|
|
436
468
|
.tab-link[aria-disabled='true'] {
|
|
437
|
-
opacity:
|
|
469
|
+
opacity: var(--smrt-state-disabled);
|
|
438
470
|
cursor: not-allowed;
|
|
439
471
|
}
|
|
440
472
|
|
|
441
473
|
.tab-link:focus-visible {
|
|
442
|
-
outline:
|
|
443
|
-
outline-offset: -
|
|
474
|
+
outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
|
|
475
|
+
outline-offset: calc(var(--smrt-focus-ring-width) * -1);
|
|
444
476
|
}
|
|
445
477
|
|
|
446
478
|
.tab-dot {
|
|
@@ -469,11 +501,12 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
469
501
|
z-index: var(--smrt-z-index-dropdown, 20);
|
|
470
502
|
display: grid;
|
|
471
503
|
min-width: 12rem;
|
|
472
|
-
padding: var(--smrt-spacing-1
|
|
473
|
-
border:
|
|
504
|
+
padding: var(--smrt-spacing-1);
|
|
505
|
+
border: var(--smrt-hairline);
|
|
474
506
|
border-radius: var(--smrt-radius-small, 0.5rem);
|
|
475
|
-
background: var(--smrt-
|
|
476
|
-
|
|
507
|
+
background: var(--smrt-glass-surface-strong);
|
|
508
|
+
backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
|
|
509
|
+
box-shadow: var(--smrt-inset-highlight), var(--smrt-elevation-3);
|
|
477
510
|
}
|
|
478
511
|
|
|
479
512
|
.tabs-more-menu .tab-link {
|
|
@@ -490,4 +523,5 @@ function handleKeydown(event: KeyboardEvent, tabId: string) {
|
|
|
490
523
|
clip: rect(0 0 0 0);
|
|
491
524
|
white-space: nowrap;
|
|
492
525
|
}
|
|
526
|
+
}
|
|
493
527
|
</style>
|
|
@@ -130,7 +130,7 @@ function matches(permission: PermissionPickerItem, category: string): boolean {
|
|
|
130
130
|
}
|
|
131
131
|
</script>
|
|
132
132
|
|
|
133
|
-
<section class="permission-picker" aria-labelledby={labelId}>
|
|
133
|
+
<section class="permission-picker" aria-labelledby={labelId} data-smrt-component="PermissionPicker">
|
|
134
134
|
<div class="heading">
|
|
135
135
|
<div>
|
|
136
136
|
<h2 id={labelId}>{label}</h2>
|
|
@@ -188,6 +188,8 @@ function matches(permission: PermissionPickerItem, category: string): boolean {
|
|
|
188
188
|
</section>
|
|
189
189
|
|
|
190
190
|
<style>
|
|
191
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
192
|
+
@layer smrt.theme {
|
|
191
193
|
.permission-picker { display: grid; gap: var(--smrt-spacing-4); min-inline-size: 0; }
|
|
192
194
|
.heading { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: var(--smrt-spacing-4); }
|
|
193
195
|
h2, p { margin: 0; }
|
|
@@ -199,7 +201,7 @@ function matches(permission: PermissionPickerItem, category: string): boolean {
|
|
|
199
201
|
.groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(20rem, 100%), 1fr)); gap: var(--smrt-spacing-4); align-items: start; }
|
|
200
202
|
.group { min-inline-size: 0; border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-medium); background: var(--smrt-color-surface); }
|
|
201
203
|
summary { display: flex; min-block-size: 2.75rem; align-items: center; justify-content: space-between; gap: var(--smrt-spacing-3); padding: var(--smrt-spacing-3) var(--smrt-spacing-4); color: var(--smrt-color-on-surface); font: var(--smrt-typography-title-medium-font); cursor: pointer; }
|
|
202
|
-
summary:focus-visible { outline:
|
|
204
|
+
summary:focus-visible { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
|
|
203
205
|
.selected-count { flex: 0 0 auto; color: var(--smrt-color-on-surface-variant); font: var(--smrt-typography-label-medium-font); }
|
|
204
206
|
.choices { display: grid; gap: var(--smrt-spacing-4); padding: 0 var(--smrt-spacing-4) var(--smrt-spacing-4); border-block-start: 1px solid var(--smrt-color-outline-variant); padding-block-start: var(--smrt-spacing-4); }
|
|
205
207
|
.choice { display: grid; min-inline-size: 0; gap: var(--smrt-spacing-1); }
|
|
@@ -210,4 +212,5 @@ function matches(permission: PermissionPickerItem, category: string): boolean {
|
|
|
210
212
|
.no-results { padding: var(--smrt-spacing-4); border-radius: var(--smrt-radius-medium); background: var(--smrt-color-surface-container-low); }
|
|
211
213
|
.visually-hidden { position: absolute; inline-size: 1px; block-size: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
|
|
212
214
|
[hidden] { display: none; }
|
|
215
|
+
}
|
|
213
216
|
</style>
|
|
@@ -31,33 +31,35 @@ const variantClass = $derived.by(() => {
|
|
|
31
31
|
<span
|
|
32
32
|
class="role-badge {variantClass}"
|
|
33
33
|
class:sm={size === 'sm'}
|
|
34
|
-
class:lg={size === 'lg'}
|
|
34
|
+
class:lg={size === 'lg'} data-smrt-component="RoleBadge"
|
|
35
35
|
>
|
|
36
36
|
{role.name}
|
|
37
37
|
</span>
|
|
38
38
|
|
|
39
39
|
<style>
|
|
40
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
41
|
+
@layer smrt.theme {
|
|
40
42
|
.role-badge {
|
|
41
43
|
display: inline-flex;
|
|
42
44
|
align-items: center;
|
|
43
|
-
padding: 0 var(--smrt-spacing-3
|
|
45
|
+
padding: 0 var(--smrt-spacing-3);
|
|
44
46
|
height: 24px;
|
|
45
47
|
font: var(--smrt-typography-label-large-font);
|
|
46
48
|
font-weight: var(--smrt-typography-weight-semibold, 600);
|
|
47
|
-
border-radius: var(--smrt-radius-md
|
|
49
|
+
border-radius: var(--smrt-radius-md);
|
|
48
50
|
white-space: nowrap;
|
|
49
51
|
transition: all 200ms cubic-bezier(0.2, 0, 0, 1);
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
.role-badge.sm {
|
|
53
|
-
padding: 0 var(--smrt-spacing-2
|
|
55
|
+
padding: 0 var(--smrt-spacing-2);
|
|
54
56
|
height: 20px;
|
|
55
57
|
font: var(--smrt-typography-label-small-font);
|
|
56
58
|
font-weight: var(--smrt-typography-weight-semibold, 600);
|
|
57
59
|
}
|
|
58
60
|
|
|
59
61
|
.role-badge.lg {
|
|
60
|
-
padding: 0 var(--smrt-spacing-4
|
|
62
|
+
padding: 0 var(--smrt-spacing-4);
|
|
61
63
|
height: 32px;
|
|
62
64
|
font: var(--smrt-typography-title-small-font);
|
|
63
65
|
font-weight: var(--smrt-typography-weight-semibold, 600);
|
|
@@ -83,4 +85,5 @@ const variantClass = $derived.by(() => {
|
|
|
83
85
|
background-color: var(--smrt-color-surface-variant);
|
|
84
86
|
color: var(--smrt-color-on-surface-variant);
|
|
85
87
|
}
|
|
88
|
+
}
|
|
86
89
|
</style>
|
|
@@ -122,7 +122,7 @@ $effect(() => {
|
|
|
122
122
|
});
|
|
123
123
|
</script>
|
|
124
124
|
|
|
125
|
-
<div class="role-selector" class:disabled bind:this={wrapEl}>
|
|
125
|
+
<div class="role-selector" class:disabled bind:this={wrapEl} data-smrt-component="RoleSelector">
|
|
126
126
|
<button
|
|
127
127
|
bind:this={triggerEl}
|
|
128
128
|
type="button"
|
|
@@ -189,6 +189,8 @@ $effect(() => {
|
|
|
189
189
|
</div>
|
|
190
190
|
|
|
191
191
|
<style>
|
|
192
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
193
|
+
@layer smrt.theme {
|
|
192
194
|
.role-selector {
|
|
193
195
|
position: relative;
|
|
194
196
|
width: 100%;
|
|
@@ -205,7 +207,7 @@ $effect(() => {
|
|
|
205
207
|
width: 100%;
|
|
206
208
|
padding: 0.5rem 0.75rem;
|
|
207
209
|
background: var(--smrt-color-surface, white);
|
|
208
|
-
border: 1px solid var(--smrt-color-outline
|
|
210
|
+
border: 1px solid var(--smrt-color-outline);
|
|
209
211
|
border-radius: var(--smrt-radius-small, 0.375rem);
|
|
210
212
|
font-size: var(--smrt-typography-body-medium-size, 0.875rem);
|
|
211
213
|
cursor: pointer;
|
|
@@ -214,16 +216,16 @@ $effect(() => {
|
|
|
214
216
|
|
|
215
217
|
.trigger:focus-visible {
|
|
216
218
|
outline: none;
|
|
217
|
-
border-color: var(--smrt-color-primary
|
|
218
|
-
box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary
|
|
219
|
+
border-color: var(--smrt-color-primary);
|
|
220
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--smrt-color-primary) 10%, transparent);
|
|
219
221
|
}
|
|
220
222
|
|
|
221
223
|
.trigger.open {
|
|
222
|
-
border-color: var(--smrt-color-primary
|
|
224
|
+
border-color: var(--smrt-color-primary);
|
|
223
225
|
}
|
|
224
226
|
|
|
225
227
|
.trigger:disabled {
|
|
226
|
-
background: var(--smrt-color-surface-container-high
|
|
228
|
+
background: var(--smrt-color-surface-container-high);
|
|
227
229
|
cursor: not-allowed;
|
|
228
230
|
}
|
|
229
231
|
|
|
@@ -234,13 +236,13 @@ $effect(() => {
|
|
|
234
236
|
}
|
|
235
237
|
|
|
236
238
|
.placeholder {
|
|
237
|
-
color: var(--smrt-color-on-surface-variant
|
|
239
|
+
color: var(--smrt-color-on-surface-variant);
|
|
238
240
|
}
|
|
239
241
|
|
|
240
242
|
.chevron {
|
|
241
243
|
width: 1.25rem;
|
|
242
244
|
height: 1.25rem;
|
|
243
|
-
color: var(--smrt-color-on-surface-variant
|
|
245
|
+
color: var(--smrt-color-on-surface-variant);
|
|
244
246
|
transition: transform var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
|
|
245
247
|
}
|
|
246
248
|
|
|
@@ -255,7 +257,7 @@ $effect(() => {
|
|
|
255
257
|
right: 0;
|
|
256
258
|
margin-top: 0.25rem;
|
|
257
259
|
background: var(--smrt-color-surface, white);
|
|
258
|
-
border: 1px solid var(--smrt-color-outline-variant
|
|
260
|
+
border: 1px solid var(--smrt-color-outline-variant);
|
|
259
261
|
border-radius: var(--smrt-radius-small, 0.375rem);
|
|
260
262
|
box-shadow: var(--smrt-elevation-2, 0 4px 6px -1px rgba(0, 0, 0, 0.1));
|
|
261
263
|
z-index: var(--smrt-z-index-dropdown, 1000);
|
|
@@ -277,20 +279,20 @@ $effect(() => {
|
|
|
277
279
|
}
|
|
278
280
|
|
|
279
281
|
.option:hover {
|
|
280
|
-
background: var(--smrt-color-surface-container-high
|
|
282
|
+
background: var(--smrt-color-surface-container-high);
|
|
281
283
|
}
|
|
282
284
|
/* Keyboard focus needs its own indicator: the hover background alone is a
|
|
283
285
|
~1.1:1 change against the list surface in every preset, which is invisible
|
|
284
286
|
and fails WCAG 2.4.11. Inset so it is not clipped by the list's overflow
|
|
285
287
|
(#2322). */
|
|
286
288
|
.option:focus-visible {
|
|
287
|
-
background: var(--smrt-color-surface-container-high
|
|
288
|
-
outline:
|
|
289
|
-
outline-offset: -
|
|
289
|
+
background: var(--smrt-color-surface-container-high);
|
|
290
|
+
outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
|
|
291
|
+
outline-offset: calc(var(--smrt-focus-ring-width) * -1);
|
|
290
292
|
}
|
|
291
293
|
|
|
292
294
|
.option.selected {
|
|
293
|
-
background: var(--smrt-color-primary-container
|
|
295
|
+
background: var(--smrt-color-primary-container);
|
|
294
296
|
}
|
|
295
297
|
|
|
296
298
|
.option-content {
|
|
@@ -301,22 +303,23 @@ $effect(() => {
|
|
|
301
303
|
|
|
302
304
|
.role-name {
|
|
303
305
|
font-weight: var(--smrt-typography-weight-medium, 500);
|
|
304
|
-
color: var(--smrt-color-on-surface
|
|
306
|
+
color: var(--smrt-color-on-surface);
|
|
305
307
|
text-transform: capitalize;
|
|
306
308
|
}
|
|
307
309
|
|
|
308
310
|
.system-badge {
|
|
309
311
|
font-size: var(--smrt-typography-label-small-size, 0.625rem);
|
|
310
312
|
padding: 0.125rem 0.375rem;
|
|
311
|
-
background: var(--smrt-color-primary-container
|
|
312
|
-
color: var(--smrt-color-on-primary-container
|
|
313
|
-
border-radius: var(--smrt-radius-full
|
|
313
|
+
background: var(--smrt-color-primary-container);
|
|
314
|
+
color: var(--smrt-color-on-primary-container);
|
|
315
|
+
border-radius: var(--smrt-radius-full);
|
|
314
316
|
text-transform: uppercase;
|
|
315
317
|
font-weight: var(--smrt-typography-weight-semibold, 600);
|
|
316
318
|
}
|
|
317
319
|
|
|
318
320
|
.description {
|
|
319
321
|
font-size: var(--smrt-typography-body-small-size, 0.75rem);
|
|
320
|
-
color: var(--smrt-color-on-surface-variant
|
|
322
|
+
color: var(--smrt-color-on-surface-variant);
|
|
321
323
|
}
|
|
324
|
+
}
|
|
322
325
|
</style>
|
|
@@ -36,11 +36,11 @@ $effect(() => {
|
|
|
36
36
|
const cssVariables = $derived.by(() => {
|
|
37
37
|
const themeVars = Object.entries(themeState.theme)
|
|
38
38
|
.map(([key, value]) => {
|
|
39
|
-
// camelCase to kebab-case: onPrimary -> --
|
|
39
|
+
// camelCase to kebab-case: onPrimary -> --smrt-color-on-primary
|
|
40
40
|
const kebab = key
|
|
41
41
|
.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2')
|
|
42
42
|
.toLowerCase();
|
|
43
|
-
return `--
|
|
43
|
+
return `--smrt-color-${kebab}: ${value};`;
|
|
44
44
|
})
|
|
45
45
|
.join('\n');
|
|
46
46
|
|
|
@@ -61,11 +61,14 @@ const cssVariables = $derived.by(() => {
|
|
|
61
61
|
</div>
|
|
62
62
|
|
|
63
63
|
<style>
|
|
64
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
65
|
+
@layer smrt.theme {
|
|
64
66
|
.smrt-theme-provider {
|
|
65
67
|
display: contents;
|
|
66
68
|
/* Base typography and other global resets can go here later */
|
|
67
|
-
color: var(--
|
|
68
|
-
background-color: var(--
|
|
69
|
+
color: var(--smrt-color-on-background);
|
|
70
|
+
background-color: var(--smrt-color-background);
|
|
69
71
|
font-family: var(--smrt-font-family, Roboto, sans-serif);
|
|
70
72
|
}
|
|
73
|
+
}
|
|
71
74
|
</style>
|
|
@@ -42,8 +42,11 @@ function toggle(item: string) {
|
|
|
42
42
|
setAccordionContext({ isOpen, toggle });
|
|
43
43
|
</script>
|
|
44
44
|
|
|
45
|
-
<div class="accordion {className}">{#if children}{@render children()}{/if}</div>
|
|
45
|
+
<div class="accordion {className}" data-smrt-component="Accordion">{#if children}{@render children()}{/if}</div>
|
|
46
46
|
|
|
47
47
|
<style>
|
|
48
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
49
|
+
@layer smrt.theme {
|
|
48
50
|
.accordion { overflow: hidden; border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-large); background: var(--smrt-color-surface); }
|
|
51
|
+
}
|
|
49
52
|
</style>
|
|
@@ -20,7 +20,7 @@ const context = getAccordionContext();
|
|
|
20
20
|
const open = $derived(context.isOpen(value));
|
|
21
21
|
</script>
|
|
22
22
|
|
|
23
|
-
<section class="item">
|
|
23
|
+
<section class="item" data-smrt-component="AccordionItem">
|
|
24
24
|
<h3>
|
|
25
25
|
<button id={triggerId} type="button" aria-expanded={open} aria-controls={panelId} {disabled} onclick={() => context.toggle(value)}>
|
|
26
26
|
<span>{title}</span><span class="chevron" aria-hidden="true">⌄</span>
|
|
@@ -32,15 +32,18 @@ const open = $derived(context.isOpen(value));
|
|
|
32
32
|
</section>
|
|
33
33
|
|
|
34
34
|
<style>
|
|
35
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
36
|
+
@layer smrt.theme {
|
|
35
37
|
.item { border-bottom: 1px solid var(--smrt-color-outline-variant); }
|
|
36
38
|
.item:last-child { border-bottom: 0; }
|
|
37
39
|
h3 { margin: 0; }
|
|
38
40
|
button { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: var(--smrt-spacing-3); padding: var(--smrt-spacing-4); border: 0; background: transparent; color: var(--smrt-color-on-surface); font: var(--smrt-typography-title-small-font); text-align: left; cursor: pointer; }
|
|
39
41
|
button:hover:not(:disabled) { background: var(--smrt-color-surface-container-low); }
|
|
40
|
-
button:focus-visible { outline:
|
|
42
|
+
button:focus-visible { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: calc(var(--smrt-focus-ring-width) * -1); }
|
|
41
43
|
button:disabled { opacity: .5; cursor: not-allowed; }
|
|
42
44
|
.chevron { transition: transform var(--smrt-duration-short4) var(--smrt-easing-standard); }
|
|
43
45
|
button[aria-expanded='true'] .chevron { transform: rotate(180deg); }
|
|
44
46
|
.panel { padding: 0 var(--smrt-spacing-4) var(--smrt-spacing-4); color: var(--smrt-color-on-surface-variant); }
|
|
45
47
|
@media (prefers-reduced-motion: reduce) { .chevron { transition: none; } }
|
|
48
|
+
}
|
|
46
49
|
</style>
|
|
@@ -57,7 +57,7 @@ const statusLabels: Record<AvatarStatus, string> = {
|
|
|
57
57
|
};
|
|
58
58
|
</script>
|
|
59
59
|
|
|
60
|
-
<span class="avatar {size} {className}" {...rest}>
|
|
60
|
+
<span class="avatar {size} {className}" {...rest} data-smrt-component="Avatar">
|
|
61
61
|
{#if src && !imgFailed}
|
|
62
62
|
<img
|
|
63
63
|
class="avatar__img"
|
|
@@ -80,13 +80,15 @@ const statusLabels: Record<AvatarStatus, string> = {
|
|
|
80
80
|
</span>
|
|
81
81
|
|
|
82
82
|
<style>
|
|
83
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
84
|
+
@layer smrt.theme {
|
|
83
85
|
.avatar {
|
|
84
86
|
position: relative;
|
|
85
87
|
display: inline-flex;
|
|
86
88
|
align-items: center;
|
|
87
89
|
justify-content: center;
|
|
88
90
|
flex-shrink: 0;
|
|
89
|
-
border-radius: var(--smrt-radius-full
|
|
91
|
+
border-radius: var(--smrt-radius-full);
|
|
90
92
|
background: var(--smrt-color-surface-container-high);
|
|
91
93
|
color: var(--smrt-color-on-surface-variant);
|
|
92
94
|
font-weight: var(--smrt-typography-weight-medium, 500);
|
|
@@ -136,21 +138,21 @@ const statusLabels: Record<AvatarStatus, string> = {
|
|
|
136
138
|
height: 28%;
|
|
137
139
|
min-width: 8px;
|
|
138
140
|
min-height: 8px;
|
|
139
|
-
border-radius: var(--smrt-radius-full
|
|
141
|
+
border-radius: var(--smrt-radius-full);
|
|
140
142
|
border: 2px solid var(--smrt-color-surface);
|
|
141
143
|
box-sizing: border-box;
|
|
142
144
|
}
|
|
143
145
|
.avatar__status.online {
|
|
144
|
-
background: var(--smrt-color-success
|
|
146
|
+
background: var(--smrt-color-success);
|
|
145
147
|
}
|
|
146
148
|
.avatar__status.offline {
|
|
147
|
-
background: var(--smrt-color-outline
|
|
149
|
+
background: var(--smrt-color-outline);
|
|
148
150
|
}
|
|
149
151
|
.avatar__status.away {
|
|
150
|
-
background: var(--smrt-color-warning
|
|
152
|
+
background: var(--smrt-color-warning);
|
|
151
153
|
}
|
|
152
154
|
.avatar__status.busy {
|
|
153
|
-
background: var(--smrt-color-error
|
|
155
|
+
background: var(--smrt-color-error);
|
|
154
156
|
}
|
|
155
157
|
|
|
156
158
|
.avatar__sr-only {
|
|
@@ -164,4 +166,5 @@ const statusLabels: Record<AvatarStatus, string> = {
|
|
|
164
166
|
white-space: nowrap;
|
|
165
167
|
border: 0;
|
|
166
168
|
}
|
|
169
|
+
}
|
|
167
170
|
</style>
|
|
@@ -15,16 +15,19 @@ interface Props extends Omit<HTMLAttributes<HTMLSpanElement>, 'class'> {
|
|
|
15
15
|
const { variant = 'default', size = 'md', children, ...rest }: Props = $props();
|
|
16
16
|
</script>
|
|
17
17
|
|
|
18
|
-
<span class="badge {variant} {size}" {...rest}>
|
|
18
|
+
<span class="badge {variant} {size}" {...rest} data-smrt-component="Badge">
|
|
19
19
|
{@render children?.()}
|
|
20
20
|
</span>
|
|
21
21
|
|
|
22
22
|
<style>
|
|
23
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
24
|
+
@layer smrt.theme {
|
|
23
25
|
.badge {
|
|
24
26
|
display: inline-flex;
|
|
25
27
|
align-items: center;
|
|
26
28
|
justify-content: center;
|
|
27
|
-
font-weight: var(--smrt-
|
|
29
|
+
font-weight: var(--smrt-control-weight);
|
|
30
|
+
border: var(--smrt-hairline);
|
|
28
31
|
border-radius: var(--smrt-radius-full);
|
|
29
32
|
white-space: nowrap;
|
|
30
33
|
}
|
|
@@ -70,4 +73,5 @@ const { variant = 'default', size = 'md', children, ...rest }: Props = $props();
|
|
|
70
73
|
background: var(--smrt-color-primary-container);
|
|
71
74
|
color: var(--smrt-color-on-primary-container);
|
|
72
75
|
}
|
|
76
|
+
}
|
|
73
77
|
</style>
|