@happyvertical/smrt-ui 0.57.35 → 0.57.37
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/README.md +21 -2
- package/dist/components/data/DataTable.svelte +7 -3
- package/dist/components/display/StatusBadge.svelte +5 -1
- package/dist/components/display/StatusBadge.svelte.d.ts +2 -1
- package/dist/components/display/StatusBadge.svelte.d.ts.map +1 -1
- package/dist/components/feedback/Drawer.svelte +4 -1
- package/dist/components/feedback/Drawer.svelte.d.ts +2 -0
- package/dist/components/feedback/Drawer.svelte.d.ts.map +1 -1
- package/dist/components/feedback/Modal.svelte +9 -3
- package/dist/components/feedback/Modal.svelte.d.ts +2 -0
- package/dist/components/feedback/Modal.svelte.d.ts.map +1 -1
- package/dist/components/forms/SegmentedControl.svelte +6 -3
- package/dist/components/layout/DescriptionList.svelte +58 -0
- package/dist/components/layout/DescriptionList.svelte.d.ts +15 -0
- package/dist/components/layout/DescriptionList.svelte.d.ts.map +1 -0
- package/dist/components/layout/Stack.svelte +77 -0
- package/dist/components/layout/Stack.svelte.d.ts +25 -0
- package/dist/components/layout/Stack.svelte.d.ts.map +1 -0
- package/dist/components/layout/description-list.d.ts +8 -0
- package/dist/components/layout/description-list.d.ts.map +1 -0
- package/dist/components/layout/description-list.js +1 -0
- package/dist/components/layout/index.d.ts +3 -0
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +2 -0
- package/dist/components/ui/Badge.svelte +7 -0
- package/dist/components/ui/Disclosure.svelte +8 -2
- package/dist/components/ui/Disclosure.svelte.d.ts +2 -0
- package/dist/components/ui/Disclosure.svelte.d.ts.map +1 -1
- package/dist/themes/required-tokens.generated.json +6 -0
- package/dist/types-generic.d.ts +1 -1
- package/dist/types-generic.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ pnpm add @happyvertical/smrt-ui
|
|
|
41
41
|
| Disclosure and overlays | `Popover`, `Disclosure`, `Accordion`/`AccordionItem`, `Modal`, `Drawer`/`Sheet`, `PhoneSheet`, `ConfirmDialog` |
|
|
42
42
|
| Feedback | `Alert`, `ToastViewport`, `Progress`, `Meter`, `Spinner`, `LoadingOverlay`, `WorkingStrip` |
|
|
43
43
|
| Collections | `CollectionToolbar`, `CollectionList`/`ContentList`, `DataTable`, `Pagination` |
|
|
44
|
-
| Layout and navigation | `Container`, `PageLayout`, `Grid`, `ActionGroup`, `Header`, `Footer`, `PageHeader`, `EmptyState`, `Tabs`, `FilterChips` |
|
|
44
|
+
| Layout and navigation | `Container`, `PageLayout`, `Grid`, `Stack`, `DescriptionList`, `ActionGroup`, `Header`, `Footer`, `PageHeader`, `EmptyState`, `Tabs`, `FilterChips` |
|
|
45
45
|
| Calendar | `CalendarView` (deprecated: `Calendar`, `DayView`) |
|
|
46
46
|
|
|
47
47
|
### Phone surfaces
|
|
@@ -230,7 +230,10 @@ tone overrides the built-in domain scheme while label, size, and outline variant
|
|
|
230
230
|
continue to work independently. Tones use the active theme's paired container
|
|
231
231
|
and text tokens. Without a tone, known domain statuses retain their existing
|
|
232
232
|
colors and unknown statuses retain the neutral fallback. `StatusTone` is exported
|
|
233
|
-
as a TypeScript type from the package root.
|
|
233
|
+
as a TypeScript type from the package root. `StatusBadge` also spreads rest
|
|
234
|
+
props (`data-*`, `aria-*`, `title`, ...) onto its root `<span>`; `class` is not
|
|
235
|
+
accepted. It and the other display components are importable from
|
|
236
|
+
`@happyvertical/smrt-ui/display` as well as the package root.
|
|
234
237
|
|
|
235
238
|
### Touch targets for Checkbox, Radio and Switch
|
|
236
239
|
|
|
@@ -1138,6 +1141,22 @@ vertical gap.
|
|
|
1138
1141
|
Use `PageLayout` inside an application shell to give each route responsive
|
|
1139
1142
|
gutters, block padding, vertical rhythm, and the width appropriate to its
|
|
1140
1143
|
content. It never creates a scroll container or claims viewport height.
|
|
1144
|
+
Use `Stack` for vertical or horizontal rhythm from the spacing tokens
|
|
1145
|
+
(`gap` `xs` to `xl`, optional `align`, `justify` and `wrap`), and
|
|
1146
|
+
`DescriptionList` for a term/description grid that collapses to one column on
|
|
1147
|
+
narrow screens (pass `items`, or `<dt>`/`<dd>` children).
|
|
1148
|
+
|
|
1149
|
+
```svelte
|
|
1150
|
+
<script>
|
|
1151
|
+
import { DescriptionList, Stack } from '@happyvertical/smrt-ui/layout';
|
|
1152
|
+
</script>
|
|
1153
|
+
|
|
1154
|
+
<Stack gap="lg">
|
|
1155
|
+
<DescriptionList items={[{ term: 'Status', description: 'Open' }]} />
|
|
1156
|
+
<Stack direction="horizontal" gap="sm" wrap>...</Stack>
|
|
1157
|
+
</Stack>
|
|
1158
|
+
```
|
|
1159
|
+
|
|
1141
1160
|
Use `ActionGroup` for adjacent page or card actions; it wraps with token spacing
|
|
1142
1161
|
and can justify actions at the start or end without form-specific behavior.
|
|
1143
1162
|
|
|
@@ -2028,8 +2028,12 @@ $effect(() => {
|
|
|
2028
2028
|
}
|
|
2029
2029
|
|
|
2030
2030
|
/* Header */
|
|
2031
|
+
/* --smrt-data-table-head-bg / -color: sunken is darker than every
|
|
2032
|
+
surface-container level in both themes, so the head stays visible on a
|
|
2033
|
+
surface-container-low page. */
|
|
2031
2034
|
.data-table__head {
|
|
2032
|
-
background: var(--smrt-surface-sunken);
|
|
2035
|
+
background: var(--smrt-data-table-head-bg, var(--smrt-surface-sunken));
|
|
2036
|
+
color: var(--smrt-data-table-head-color, var(--smrt-color-on-surface));
|
|
2033
2037
|
}
|
|
2034
2038
|
|
|
2035
2039
|
.data-table-container--sticky .data-table__head {
|
|
@@ -2048,7 +2052,7 @@ $effect(() => {
|
|
|
2048
2052
|
font-weight: var(--smrt-typography-weight-semibold, 600);
|
|
2049
2053
|
text-align: left;
|
|
2050
2054
|
white-space: nowrap;
|
|
2051
|
-
color:
|
|
2055
|
+
color: inherit;
|
|
2052
2056
|
}
|
|
2053
2057
|
|
|
2054
2058
|
.data-table__cell--sortable {
|
|
@@ -2187,7 +2191,7 @@ $effect(() => {
|
|
|
2187
2191
|
.data-table__cell--header.data-table__cell--pinned-start,
|
|
2188
2192
|
.data-table__cell--header.data-table__cell--pinned-end {
|
|
2189
2193
|
z-index: 3;
|
|
2190
|
-
background: var(--smrt-surface-sunken);
|
|
2194
|
+
background: var(--smrt-data-table-head-bg, var(--smrt-surface-sunken));
|
|
2191
2195
|
}
|
|
2192
2196
|
|
|
2193
2197
|
.data-table__row--selected .data-table__cell--pinned-start,
|
|
@@ -6,10 +6,12 @@
|
|
|
6
6
|
* or an explicit semantic tone for custom status vocabulary.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
9
10
|
import type { StatusTone, StatusType } from './types.js';
|
|
10
11
|
|
|
11
12
|
/** Props for StatusBadge component */
|
|
12
|
-
export interface Props
|
|
13
|
+
export interface Props
|
|
14
|
+
extends Omit<HTMLAttributes<HTMLSpanElement>, 'class' | 'children'> {
|
|
13
15
|
/** The status value to display */
|
|
14
16
|
status: string;
|
|
15
17
|
/** Pre-defined color scheme type */
|
|
@@ -31,6 +33,7 @@ const {
|
|
|
31
33
|
size = 'md',
|
|
32
34
|
variant = 'filled',
|
|
33
35
|
label,
|
|
36
|
+
...rest
|
|
34
37
|
}: Props = $props();
|
|
35
38
|
|
|
36
39
|
// Color mappings for different status domains, referencing the canonical
|
|
@@ -247,6 +250,7 @@ const displayLabel = $derived(label ?? status.replace(/_/g, ' '));
|
|
|
247
250
|
</script>
|
|
248
251
|
|
|
249
252
|
<span
|
|
253
|
+
{...rest}
|
|
250
254
|
class="status-badge"
|
|
251
255
|
class:sm={size === 'sm'}
|
|
252
256
|
class:lg={size === 'lg'}
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
* Provides pre-defined color schemes for common status domains (invoice, project, etc.)
|
|
5
5
|
* or an explicit semantic tone for custom status vocabulary.
|
|
6
6
|
*/
|
|
7
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
7
8
|
import type { StatusTone, StatusType } from './types.js';
|
|
8
9
|
/** Props for StatusBadge component */
|
|
9
|
-
export interface Props {
|
|
10
|
+
export interface Props extends Omit<HTMLAttributes<HTMLSpanElement>, 'class' | 'children'> {
|
|
10
11
|
/** The status value to display */
|
|
11
12
|
status: string;
|
|
12
13
|
/** Pre-defined color scheme type */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBadge.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/display/StatusBadge.svelte.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGzD,sCAAsC;AACtC,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"StatusBadge.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/display/StatusBadge.svelte.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGzD,sCAAsC;AACtC,MAAM,WAAW,KACf,SAAQ,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACnE,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,wDAAwD;IACxD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,iBAAiB;IACjB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,qBAAqB;IACrB,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA+OD,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
|
@@ -25,6 +25,8 @@ export interface Props {
|
|
|
25
25
|
onclose?: () => void;
|
|
26
26
|
/** Accessibility label for the drawer dialog. */
|
|
27
27
|
ariaLabel?: string;
|
|
28
|
+
/** Target density; omit to inherit the ThemeProvider setting. */
|
|
29
|
+
density?: 'comfortable' | 'touch';
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
let {
|
|
@@ -39,7 +41,8 @@ let {
|
|
|
39
41
|
footer,
|
|
40
42
|
onclose,
|
|
41
43
|
ariaLabel,
|
|
44
|
+
density,
|
|
42
45
|
}: Props = $props();
|
|
43
46
|
</script>
|
|
44
47
|
|
|
45
|
-
<Modal bind:open {title} {size} placement={side} {showClose} {closeOnBackdrop} onClose={onclose} {header} {footer} {children} {ariaLabel} />
|
|
48
|
+
<Modal bind:open {title} {size} placement={side} {showClose} {closeOnBackdrop} onClose={onclose} {header} {footer} {children} {ariaLabel} {density} />
|
|
@@ -22,6 +22,8 @@ export interface Props {
|
|
|
22
22
|
onclose?: () => void;
|
|
23
23
|
/** Accessibility label for the drawer dialog. */
|
|
24
24
|
ariaLabel?: string;
|
|
25
|
+
/** Target density; omit to inherit the ThemeProvider setting. */
|
|
26
|
+
density?: 'comfortable' | 'touch';
|
|
25
27
|
}
|
|
26
28
|
declare const Drawer: import("svelte").Component<Props, {}, "open">;
|
|
27
29
|
type Drawer = ReturnType<typeof Drawer>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/feedback/Drawer.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,WAAW,KAAK;IACpB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uDAAuD;IACvD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Drawer.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/feedback/Drawer.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,WAAW,KAAK;IACpB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uDAAuD;IACvD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;CACnC;AA0BD,QAAA,MAAM,MAAM,+CAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
|
|
@@ -46,6 +46,8 @@ export interface Props {
|
|
|
46
46
|
ariaLabel?: string;
|
|
47
47
|
/** ARIA described by ID */
|
|
48
48
|
ariaDescribedBy?: string;
|
|
49
|
+
/** Target density; omit to inherit the ThemeProvider setting. */
|
|
50
|
+
density?: 'comfortable' | 'touch';
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
let {
|
|
@@ -62,6 +64,7 @@ let {
|
|
|
62
64
|
children,
|
|
63
65
|
ariaLabel,
|
|
64
66
|
ariaDescribedBy,
|
|
67
|
+
density,
|
|
65
68
|
}: Props = $props();
|
|
66
69
|
|
|
67
70
|
let dialogEl: HTMLDialogElement | null = $state(null);
|
|
@@ -125,7 +128,7 @@ const placementClass = $derived(`modal--${placement}`);
|
|
|
125
128
|
onkeydown={handleKeydown}
|
|
126
129
|
oncancel={handleCancel}
|
|
127
130
|
aria-label={ariaLabel ?? title}
|
|
128
|
-
aria-describedby={ariaDescribedBy} data-smrt-component="Modal"
|
|
131
|
+
aria-describedby={ariaDescribedBy} data-density={density} data-smrt-component="Modal"
|
|
129
132
|
>
|
|
130
133
|
<div class="modal__container">
|
|
131
134
|
{#if header}
|
|
@@ -331,12 +334,15 @@ const placementClass = $derived(`modal--${placement}`);
|
|
|
331
334
|
line-height: var(--smrt-typography-headline-small-line-height, 1.4);
|
|
332
335
|
}
|
|
333
336
|
|
|
337
|
+
.modal[data-density='touch'] { --smrt-control-target-min: var(--smrt-touch-target-min); }
|
|
338
|
+
.modal[data-density='comfortable'] { --smrt-control-target-min: 0px; }
|
|
339
|
+
|
|
334
340
|
.modal__close {
|
|
335
341
|
display: flex;
|
|
336
342
|
align-items: center;
|
|
337
343
|
justify-content: center;
|
|
338
|
-
width: 32px;
|
|
339
|
-
height: 32px;
|
|
344
|
+
width: max(32px, var(--smrt-control-target-min));
|
|
345
|
+
height: max(32px, var(--smrt-control-target-min));
|
|
340
346
|
padding: 0;
|
|
341
347
|
border: none;
|
|
342
348
|
background: transparent;
|
|
@@ -39,6 +39,8 @@ export interface Props {
|
|
|
39
39
|
ariaLabel?: string;
|
|
40
40
|
/** ARIA described by ID */
|
|
41
41
|
ariaDescribedBy?: string;
|
|
42
|
+
/** Target density; omit to inherit the ThemeProvider setting. */
|
|
43
|
+
density?: 'comfortable' | 'touch';
|
|
42
44
|
}
|
|
43
45
|
declare const Modal: import("svelte").Component<Props, {}, "open">;
|
|
44
46
|
type Modal = ReturnType<typeof Modal>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/feedback/Modal.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAKtC,gCAAgC;AAChC,MAAM,WAAW,KAAK;IACpB,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC1C,yEAAyE;IACzE,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IACvC,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Modal.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/feedback/Modal.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAKtC,gCAAgC;AAChC,MAAM,WAAW,KAAK;IACpB,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC1C,yEAAyE;IACzE,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IACvC,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;CACnC;AA4HD,QAAA,MAAM,KAAK,+CAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
|
|
@@ -252,16 +252,19 @@ useControlRegistration(() => {
|
|
|
252
252
|
<style>
|
|
253
253
|
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
254
254
|
@layer smrt.theme {
|
|
255
|
-
.segmented { display: inline-flex; border: var(--smrt-hairline-strong); border-radius: var(--smrt-radius-full); overflow: hidden; }
|
|
255
|
+
.segmented { display: inline-flex; flex-wrap: wrap; max-inline-size: 100%; border: var(--smrt-hairline-strong); border-radius: var(--smrt-radius-full); overflow: hidden; }
|
|
256
256
|
.segmented.full-width { display: flex; width: 100%; }
|
|
257
|
-
label { position: relative; display: inline-flex; align-items: center; justify-content: center; flex: 1; min-height: 2.5rem; padding: 0 var(--smrt-spacing-4); border: 0; border-right: var(--smrt-hairline-strong); background: var(--smrt-color-surface); color: var(--smrt-color-on-surface); cursor: pointer; }
|
|
257
|
+
label { position: relative; display: inline-flex; align-items: center; justify-content: center; flex: 1 1 0%; min-width: max-content; text-align: center; min-height: 2.5rem; padding: 0 var(--smrt-spacing-4); border: 0; border-right: var(--smrt-hairline-strong); background: var(--smrt-color-surface); color: var(--smrt-color-on-surface); cursor: pointer; }
|
|
258
|
+
/* Options share the row equally while they fit; one that would clip wraps onto a further row instead (#4462). */
|
|
258
259
|
label:last-child { border-right: 0; } label.selected { background: var(--smrt-color-secondary-container); color: var(--smrt-color-on-secondary-container); }
|
|
259
260
|
label:has(input:focus-visible) { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: calc(var(--smrt-focus-ring-width) * -1); } label.disabled, label:has(input:disabled) { opacity: .5; cursor: not-allowed; }
|
|
260
261
|
:global(.segmented[data-smrt-highlighted='true']) { outline: 3px solid var(--smrt-color-tertiary); outline-offset: 4px; }
|
|
261
262
|
|
|
262
263
|
.segmented[data-density='touch'] { --smrt-control-target-min: var(--smrt-touch-target-min); }
|
|
263
264
|
.segmented[data-density='comfortable'] { --smrt-control-target-min: 0px; }
|
|
264
|
-
label { min-height: max(2.5rem, var(--smrt-control-target-min));
|
|
265
|
+
label { min-height: max(2.5rem, var(--smrt-control-target-min)); }
|
|
266
|
+
/* The touch target width rides on the text so the label keeps its content minimum (a negative calc clamps to 0). */
|
|
267
|
+
label > span { min-width: calc(var(--smrt-control-target-min) - 2 * var(--smrt-spacing-4)); }
|
|
265
268
|
input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: inherit; }
|
|
266
269
|
/* Forced colors (#3908): system colours where colour alone carries meaning. */
|
|
267
270
|
@media (forced-colors: active) {
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
|
+
|
|
5
|
+
import type { DescriptionListItem } from './description-list.js';
|
|
6
|
+
|
|
7
|
+
export interface Props extends Omit<HTMLAttributes<HTMLDListElement>, 'class'> {
|
|
8
|
+
/** Term/description pairs, rendered before any `children`. */
|
|
9
|
+
items?: DescriptionListItem[];
|
|
10
|
+
/** Extra `<dt>`/`<dd>` content, rendered after `items`. */
|
|
11
|
+
children?: Snippet;
|
|
12
|
+
/** CSS classes appended to the list. */
|
|
13
|
+
class?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
items = [],
|
|
18
|
+
children,
|
|
19
|
+
class: className = '',
|
|
20
|
+
...rest
|
|
21
|
+
}: Props = $props();
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<dl class="description-list {className}" {...rest} data-smrt-component="DescriptionList">
|
|
25
|
+
{#each items as item, index (index)}
|
|
26
|
+
<dt>{item.term}</dt>
|
|
27
|
+
<dd>{item.description}</dd>
|
|
28
|
+
{/each}
|
|
29
|
+
{@render children?.()}
|
|
30
|
+
</dl>
|
|
31
|
+
|
|
32
|
+
<style>
|
|
33
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
34
|
+
@layer smrt.theme {
|
|
35
|
+
.description-list {
|
|
36
|
+
display: grid;
|
|
37
|
+
grid-template-columns: minmax(8rem, max-content) minmax(0, 1fr);
|
|
38
|
+
column-gap: var(--smrt-spacing-6);
|
|
39
|
+
row-gap: var(--smrt-spacing-2);
|
|
40
|
+
margin: 0;
|
|
41
|
+
min-inline-size: 0;
|
|
42
|
+
}
|
|
43
|
+
.description-list :global(dt) {
|
|
44
|
+
color: var(--smrt-color-on-surface-variant);
|
|
45
|
+
font-weight: var(--smrt-control-weight);
|
|
46
|
+
}
|
|
47
|
+
.description-list :global(dd) {
|
|
48
|
+
margin: 0;
|
|
49
|
+
min-inline-size: 0;
|
|
50
|
+
overflow-wrap: anywhere;
|
|
51
|
+
}
|
|
52
|
+
/* Collapse to one column on narrow screens. */
|
|
53
|
+
@media (max-width: 40rem) {
|
|
54
|
+
.description-list { grid-template-columns: minmax(0, 1fr); row-gap: 0; }
|
|
55
|
+
.description-list :global(dd) { margin-block-end: var(--smrt-spacing-3); }
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
import type { DescriptionListItem } from './description-list.js';
|
|
4
|
+
export interface Props extends Omit<HTMLAttributes<HTMLDListElement>, 'class'> {
|
|
5
|
+
/** Term/description pairs, rendered before any `children`. */
|
|
6
|
+
items?: DescriptionListItem[];
|
|
7
|
+
/** Extra `<dt>`/`<dd>` content, rendered after `items`. */
|
|
8
|
+
children?: Snippet;
|
|
9
|
+
/** CSS classes appended to the list. */
|
|
10
|
+
class?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const DescriptionList: import("svelte").Component<Props, {}, "">;
|
|
13
|
+
type DescriptionList = ReturnType<typeof DescriptionList>;
|
|
14
|
+
export default DescriptionList;
|
|
15
|
+
//# sourceMappingURL=DescriptionList.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DescriptionList.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/layout/DescriptionList.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,MAAM,WAAW,KAAM,SAAQ,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC5E,8DAA8D;IAC9D,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4BD,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
|
+
|
|
5
|
+
type Gap = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
6
|
+
type Align = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
|
|
7
|
+
type Justify = 'start' | 'center' | 'end' | 'between';
|
|
8
|
+
|
|
9
|
+
export interface Props extends Omit<HTMLAttributes<HTMLDivElement>, 'class'> {
|
|
10
|
+
/** Stacking axis: `vertical` (a column) or `horizontal` (a row). */
|
|
11
|
+
direction?: 'vertical' | 'horizontal';
|
|
12
|
+
/** Space between children, from the spacing tokens. */
|
|
13
|
+
gap?: Gap;
|
|
14
|
+
/** Cross-axis alignment. Omit for the browser default (stretch). */
|
|
15
|
+
align?: Align;
|
|
16
|
+
/** Main-axis distribution. Omit for the start of the axis. */
|
|
17
|
+
justify?: Justify;
|
|
18
|
+
/** Let children wrap onto further lines when they do not fit. */
|
|
19
|
+
wrap?: boolean;
|
|
20
|
+
/** CSS classes appended to the stack. */
|
|
21
|
+
class?: string;
|
|
22
|
+
/** Stacked content. */
|
|
23
|
+
children?: Snippet;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const {
|
|
27
|
+
direction = 'vertical',
|
|
28
|
+
gap = 'md',
|
|
29
|
+
align,
|
|
30
|
+
justify,
|
|
31
|
+
wrap = false,
|
|
32
|
+
class: className = '',
|
|
33
|
+
children,
|
|
34
|
+
...rest
|
|
35
|
+
}: Props = $props();
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<div
|
|
39
|
+
class="stack stack-{direction} gap-{gap} {className}"
|
|
40
|
+
class:wrap
|
|
41
|
+
data-align={align}
|
|
42
|
+
data-justify={justify}
|
|
43
|
+
{...rest}
|
|
44
|
+
data-smrt-component="Stack"
|
|
45
|
+
>
|
|
46
|
+
{@render children?.()}
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<style>
|
|
50
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
51
|
+
@layer smrt.theme {
|
|
52
|
+
.stack {
|
|
53
|
+
display: flex;
|
|
54
|
+
min-inline-size: 0;
|
|
55
|
+
}
|
|
56
|
+
.stack-vertical { flex-direction: column; }
|
|
57
|
+
.stack-horizontal { flex-direction: row; }
|
|
58
|
+
.wrap { flex-wrap: wrap; }
|
|
59
|
+
|
|
60
|
+
.gap-xs { gap: var(--smrt-spacing-1); }
|
|
61
|
+
.gap-sm { gap: var(--smrt-spacing-2); }
|
|
62
|
+
.gap-md { gap: var(--smrt-spacing-4); }
|
|
63
|
+
.gap-lg { gap: var(--smrt-spacing-6); }
|
|
64
|
+
.gap-xl { gap: var(--smrt-spacing-8); }
|
|
65
|
+
|
|
66
|
+
.stack[data-align='start'] { align-items: flex-start; }
|
|
67
|
+
.stack[data-align='center'] { align-items: center; }
|
|
68
|
+
.stack[data-align='end'] { align-items: flex-end; }
|
|
69
|
+
.stack[data-align='stretch'] { align-items: stretch; }
|
|
70
|
+
.stack[data-align='baseline'] { align-items: baseline; }
|
|
71
|
+
|
|
72
|
+
.stack[data-justify='start'] { justify-content: flex-start; }
|
|
73
|
+
.stack[data-justify='center'] { justify-content: center; }
|
|
74
|
+
.stack[data-justify='end'] { justify-content: flex-end; }
|
|
75
|
+
.stack[data-justify='between'] { justify-content: space-between; }
|
|
76
|
+
}
|
|
77
|
+
</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type Gap = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
4
|
+
type Align = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
|
|
5
|
+
type Justify = 'start' | 'center' | 'end' | 'between';
|
|
6
|
+
export interface Props extends Omit<HTMLAttributes<HTMLDivElement>, 'class'> {
|
|
7
|
+
/** Stacking axis: `vertical` (a column) or `horizontal` (a row). */
|
|
8
|
+
direction?: 'vertical' | 'horizontal';
|
|
9
|
+
/** Space between children, from the spacing tokens. */
|
|
10
|
+
gap?: Gap;
|
|
11
|
+
/** Cross-axis alignment. Omit for the browser default (stretch). */
|
|
12
|
+
align?: Align;
|
|
13
|
+
/** Main-axis distribution. Omit for the start of the axis. */
|
|
14
|
+
justify?: Justify;
|
|
15
|
+
/** Let children wrap onto further lines when they do not fit. */
|
|
16
|
+
wrap?: boolean;
|
|
17
|
+
/** CSS classes appended to the stack. */
|
|
18
|
+
class?: string;
|
|
19
|
+
/** Stacked content. */
|
|
20
|
+
children?: Snippet;
|
|
21
|
+
}
|
|
22
|
+
declare const Stack: import("svelte").Component<Props, {}, "">;
|
|
23
|
+
type Stack = ReturnType<typeof Stack>;
|
|
24
|
+
export default Stack;
|
|
25
|
+
//# sourceMappingURL=Stack.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stack.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Stack.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5C,KAAK,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;AACjE,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,KAAM,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAC1E,oEAAoE;IACpE,SAAS,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACtC,uDAAuD;IACvD,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,oEAAoE;IACpE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA6BD,QAAA,MAAM,KAAK,2CAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"description-list.d.ts","sourceRoot":"","sources":["../../../src/components/layout/description-list.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { default as ActionGroup } from './ActionGroup.svelte';
|
|
5
5
|
export { default as Container } from './Container.svelte';
|
|
6
|
+
export { default as DescriptionList } from './DescriptionList.svelte';
|
|
7
|
+
export type { DescriptionListItem } from './description-list.js';
|
|
6
8
|
export { default as EmptyState } from './EmptyState.svelte';
|
|
7
9
|
export { default as Footer } from './Footer.svelte';
|
|
8
10
|
export { default as Grid } from './Grid.svelte';
|
|
@@ -11,5 +13,6 @@ export { default as Masthead } from './Masthead.svelte';
|
|
|
11
13
|
export { default as PageHeader } from './PageHeader.svelte';
|
|
12
14
|
export { default as PageLayout } from './PageLayout.svelte';
|
|
13
15
|
export { getPageHeaderContext, type PageHeaderContext, type PageHeaderCrumb, type PageHeaderReport, setPageHeaderContext, } from './page-header-context.js';
|
|
16
|
+
export { default as Stack } from './Stack.svelte';
|
|
14
17
|
export { default as SummaryCard } from './SummaryCard.svelte';
|
|
15
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/layout/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/layout/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { default as ActionGroup } from './ActionGroup.svelte';
|
|
5
5
|
export { default as Container } from './Container.svelte';
|
|
6
|
+
export { default as DescriptionList } from './DescriptionList.svelte';
|
|
6
7
|
export { default as EmptyState } from './EmptyState.svelte';
|
|
7
8
|
export { default as Footer } from './Footer.svelte';
|
|
8
9
|
export { default as Grid } from './Grid.svelte';
|
|
@@ -11,4 +12,5 @@ export { default as Masthead } from './Masthead.svelte';
|
|
|
11
12
|
export { default as PageHeader } from './PageHeader.svelte';
|
|
12
13
|
export { default as PageLayout } from './PageLayout.svelte';
|
|
13
14
|
export { getPageHeaderContext, setPageHeaderContext, } from './page-header-context.js';
|
|
15
|
+
export { default as Stack } from './Stack.svelte';
|
|
14
16
|
export { default as SummaryCard } from './SummaryCard.svelte';
|
|
@@ -51,6 +51,13 @@ const { variant = 'default', size = 'md', children, ...rest }: Props = $props();
|
|
|
51
51
|
background: var(--smrt-color-surface-container-high);
|
|
52
52
|
color: var(--smrt-color-on-surface);
|
|
53
53
|
}
|
|
54
|
+
/* Quiet neutral status: outlined, square-cornered and unfilled so it does not read as a tonal button. */
|
|
55
|
+
.smrt-badge__neutral {
|
|
56
|
+
background: transparent;
|
|
57
|
+
color: var(--smrt-color-on-surface-variant);
|
|
58
|
+
border-color: var(--smrt-color-outline-variant);
|
|
59
|
+
border-radius: var(--smrt-radius-small);
|
|
60
|
+
}
|
|
54
61
|
.smrt-badge__primary {
|
|
55
62
|
background: var(--smrt-color-primary-container);
|
|
56
63
|
color: var(--smrt-color-on-primary-container);
|
|
@@ -14,6 +14,8 @@ export interface Props {
|
|
|
14
14
|
onopenchange?: (open: boolean) => void;
|
|
15
15
|
/** Additional CSS class names. */
|
|
16
16
|
class?: string;
|
|
17
|
+
/** Target density; omit to inherit the ThemeProvider setting. */
|
|
18
|
+
density?: 'comfortable' | 'touch';
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
let {
|
|
@@ -23,6 +25,7 @@ let {
|
|
|
23
25
|
children,
|
|
24
26
|
onopenchange,
|
|
25
27
|
class: className = '',
|
|
28
|
+
density,
|
|
26
29
|
}: Props = $props();
|
|
27
30
|
|
|
28
31
|
function handleToggle(event: Event) {
|
|
@@ -36,7 +39,7 @@ function handleToggle(event: Event) {
|
|
|
36
39
|
}
|
|
37
40
|
</script>
|
|
38
41
|
|
|
39
|
-
<details class="disclosure {className}" bind:open ontoggle={handleToggle} data-smrt-component="Disclosure">
|
|
42
|
+
<details class="disclosure {className}" data-density={density} bind:open ontoggle={handleToggle} data-smrt-component="Disclosure">
|
|
40
43
|
<summary aria-disabled={disabled} onclick={(event) => disabled && event.preventDefault()}>
|
|
41
44
|
<span>{title}</span><span class="chevron" aria-hidden="true">⌄</span>
|
|
42
45
|
</summary>
|
|
@@ -47,7 +50,10 @@ function handleToggle(event: Event) {
|
|
|
47
50
|
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
48
51
|
@layer smrt.theme {
|
|
49
52
|
.disclosure { border-bottom: var(--smrt-hairline); color: var(--smrt-color-on-surface); }
|
|
50
|
-
|
|
53
|
+
.disclosure[data-density='touch'] { --smrt-control-target-min: var(--smrt-touch-target-min); }
|
|
54
|
+
.disclosure[data-density='comfortable'] { --smrt-control-target-min: 0px; }
|
|
55
|
+
.disclosure[data-density='touch'] summary { align-items: center; }
|
|
56
|
+
summary { display: flex; min-height: var(--smrt-control-target-min); justify-content: space-between; gap: var(--smrt-spacing-3); padding: var(--smrt-spacing-3) 0; font: var(--smrt-typography-title-small-font); cursor: pointer; list-style: none; }
|
|
51
57
|
summary::-webkit-details-marker { display: none; }
|
|
52
58
|
summary:focus-visible { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
|
|
53
59
|
summary[aria-disabled='true'] { opacity: .5; cursor: not-allowed; }
|
|
@@ -12,6 +12,8 @@ export interface Props {
|
|
|
12
12
|
onopenchange?: (open: boolean) => void;
|
|
13
13
|
/** Additional CSS class names. */
|
|
14
14
|
class?: string;
|
|
15
|
+
/** Target density; omit to inherit the ThemeProvider setting. */
|
|
16
|
+
density?: 'comfortable' | 'touch';
|
|
15
17
|
}
|
|
16
18
|
declare const Disclosure: import("svelte").Component<Props, {}, "open">;
|
|
17
19
|
type Disclosure = ReturnType<typeof Disclosure>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Disclosure.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Disclosure.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,MAAM,WAAW,KAAK;IACpB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Disclosure.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Disclosure.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,MAAM,WAAW,KAAK;IACpB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;CACnC;AAqCD,QAAA,MAAM,UAAU,+CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
|
@@ -200,15 +200,21 @@
|
|
|
200
200
|
],
|
|
201
201
|
"optional": [
|
|
202
202
|
"--smrt-admin-shell-background",
|
|
203
|
+
"--smrt-admin-shell-band-padding-inline",
|
|
204
|
+
"--smrt-admin-shell-left-rail-padding",
|
|
205
|
+
"--smrt-admin-shell-left-rail-padding-collapsed",
|
|
203
206
|
"--smrt-admin-shell-scrollbar-thumb",
|
|
204
207
|
"--smrt-admin-shell-scrollbar-thumb-hover",
|
|
205
208
|
"--smrt-admin-shell-scrollbar-track",
|
|
209
|
+
"--smrt-admin-shell-tenant-gap",
|
|
206
210
|
"--smrt-card-background",
|
|
207
211
|
"--smrt-card-border",
|
|
208
212
|
"--smrt-card-divider",
|
|
209
213
|
"--smrt-card-shadow",
|
|
210
214
|
"--smrt-content-editor-icon-size",
|
|
211
215
|
"--smrt-control-hit-size",
|
|
216
|
+
"--smrt-data-table-head-bg",
|
|
217
|
+
"--smrt-data-table-head-color",
|
|
212
218
|
"--smrt-popover-panel-padding",
|
|
213
219
|
"--smrt-popover-panel-width",
|
|
214
220
|
"--smrt-shell-title-font-family",
|
package/dist/types-generic.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { Snippet } from 'svelte';
|
|
5
5
|
import type { HTMLAnchorAttributes, HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
|
|
6
|
-
export type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
|
|
6
|
+
export type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info' | 'neutral';
|
|
7
7
|
export type BadgeSize = 'sm' | 'md';
|
|
8
8
|
export interface BadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'class'> {
|
|
9
9
|
variant?: BadgeVariant;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-generic.d.ts","sourceRoot":"","sources":["../src/types-generic.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types-generic.d.ts","sourceRoot":"","sources":["../src/types-generic.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-ui",
|
|
3
|
-
"version": "0.57.
|
|
3
|
+
"version": "0.57.37",
|
|
4
4
|
"smrtJsdoc": "strict",
|
|
5
5
|
"description": "Domain-agnostic Svelte 5 UI runtime for SMRT: primitives, i18n client, theme system, and module UI registry",
|
|
6
6
|
"type": "module",
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
"access": "public"
|
|
177
177
|
},
|
|
178
178
|
"dependencies": {
|
|
179
|
-
"@happyvertical/smrt-types": "0.57.
|
|
179
|
+
"@happyvertical/smrt-types": "0.57.37",
|
|
180
180
|
"esm-env": "^1.2.2"
|
|
181
181
|
},
|
|
182
182
|
"peerDependencies": {
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
}
|
|
197
197
|
},
|
|
198
198
|
"devDependencies": {
|
|
199
|
-
"@happyvertical/speech": "^0.
|
|
199
|
+
"@happyvertical/speech": "^0.110.0",
|
|
200
200
|
"@sveltejs/package": "^2.5.8",
|
|
201
201
|
"@sveltejs/vite-plugin-svelte": "^7.3.0",
|
|
202
202
|
"@testing-library/jest-dom": "^7.0.1",
|