@streamscloud/kit 0.9.5 → 0.9.7
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/dist/ui/avatar/cmp.avatar.svelte +6 -0
- package/dist/ui/avatar/cmp.avatar.svelte.d.ts +2 -0
- package/dist/ui/card/cmp.card.svelte +23 -10
- package/dist/ui/card/cmp.card.svelte.d.ts +4 -1
- package/dist/ui/date-picker/cmp.date-picker.svelte +2 -1
- package/dist/ui/select/cmp.singleselect-async.svelte +1 -0
- package/dist/ui/select/multiselect-base.svelte +1 -0
- package/dist/ui/select/select-core.svelte.d.ts +1 -0
- package/dist/ui/select/select-core.svelte.js +9 -0
- package/dist/ui/select/select-listbox.svelte +5 -1
- package/package.json +1 -1
|
@@ -72,6 +72,8 @@ load / error / stub state machine.
|
|
|
72
72
|
| `--sc-kit--avatar--badge--size` | Badge mini-avatar box | 45% of the avatar diameter |
|
|
73
73
|
| `--sc-kit--avatar--badge--ring-color` | Badge separation ring (override on active/hover row backgrounds to blend) | `--sc-kit--color--bg--panel` |
|
|
74
74
|
| `--sc-kit--avatar--badge--ring-width` | Badge separation ring thickness | `1.5px` |
|
|
75
|
+
| `--sc-kit--avatar--badge--initials--background` | Badge initials chip background (contrast element of org-with-user) | `--sc-kit--color--accent` |
|
|
76
|
+
| `--sc-kit--avatar--badge--initials--color` | Badge initials chip text color | `--sc-kit--color--text--on-accent` |
|
|
75
77
|
-->
|
|
76
78
|
|
|
77
79
|
<style>.avatar {
|
|
@@ -86,6 +88,8 @@ load / error / stub state machine.
|
|
|
86
88
|
--_avatar--badge-size: var(--sc-kit--avatar--badge--size, calc(var(--_avatar--size) * 0.45));
|
|
87
89
|
--_avatar--badge-ring-color: var(--sc-kit--avatar--badge--ring-color, var(--sc-kit--color--bg--panel));
|
|
88
90
|
--_avatar--badge-ring-width: var(--sc-kit--avatar--badge--ring-width, 1.5px);
|
|
91
|
+
--_avatar--badge-initials-background: var(--sc-kit--avatar--badge--initials--background, var(--sc-kit--color--accent));
|
|
92
|
+
--_avatar--badge-initials-color: var(--sc-kit--avatar--badge--initials--color, var(--sc-kit--color--text--on-accent));
|
|
89
93
|
--_avatar--border-radius: var(--sc-kit--avatar--border-radius, 50%);
|
|
90
94
|
--sc-kit--image--border-radius: var(--_avatar--border-radius);
|
|
91
95
|
--sc-kit--image--background: var(--_avatar--background);
|
|
@@ -133,6 +137,8 @@ load / error / stub state machine.
|
|
|
133
137
|
.avatar__initials--badge {
|
|
134
138
|
border-radius: var(--sc-kit--radius--sm);
|
|
135
139
|
font-size: calc(var(--_avatar--badge-size) * 0.5);
|
|
140
|
+
background: var(--_avatar--badge-initials-background);
|
|
141
|
+
color: var(--_avatar--badge-initials-color);
|
|
136
142
|
}
|
|
137
143
|
.avatar__badge {
|
|
138
144
|
position: absolute;
|
|
@@ -35,6 +35,8 @@ type Props = {
|
|
|
35
35
|
* | `--sc-kit--avatar--badge--size` | Badge mini-avatar box | 45% of the avatar diameter |
|
|
36
36
|
* | `--sc-kit--avatar--badge--ring-color` | Badge separation ring (override on active/hover row backgrounds to blend) | `--sc-kit--color--bg--panel` |
|
|
37
37
|
* | `--sc-kit--avatar--badge--ring-width` | Badge separation ring thickness | `1.5px` |
|
|
38
|
+
* | `--sc-kit--avatar--badge--initials--background` | Badge initials chip background (contrast element of org-with-user) | `--sc-kit--color--accent` |
|
|
39
|
+
* | `--sc-kit--avatar--badge--initials--color` | Badge initials chip text color | `--sc-kit--color--text--on-accent` |
|
|
38
40
|
*/
|
|
39
41
|
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
40
42
|
type Cmp = ReturnType<typeof Cmp>;
|
|
@@ -37,8 +37,11 @@ whole card becomes a clickable target with hover and focus state, no `interactiv
|
|
|
37
37
|
| `--sc-kit--card--color` | Body text color | `var(--sc-kit--color--text--primary)` |
|
|
38
38
|
| `--sc-kit--card--header--background` | Header bar background | `transparent` |
|
|
39
39
|
| `--sc-kit--card--header--border-color` | Header bottom divider | `var(--sc-kit--color--border)` |
|
|
40
|
+
| `--sc-kit--card--header--padding` | Header padding (full shorthand) | block `var(--sc-kit--space--3)`, inline follows the `padding` preset |
|
|
41
|
+
| `--sc-kit--card--body--padding` | Body padding (full shorthand) | the `padding` preset value |
|
|
40
42
|
| `--sc-kit--card--footer--background` | Footer bar background | `var(--sc-kit--color--bg--element)` |
|
|
41
43
|
| `--sc-kit--card--footer--border-color` | Footer top divider | `var(--sc-kit--color--border)` |
|
|
44
|
+
| `--sc-kit--card--footer--padding` | Footer padding (full shorthand) | block `var(--sc-kit--space--3)`, inline follows the `padding` preset |
|
|
42
45
|
-->
|
|
43
46
|
|
|
44
47
|
<style>.card {
|
|
@@ -53,6 +56,9 @@ whole card becomes a clickable target with hover and focus state, no `interactiv
|
|
|
53
56
|
--_card--header-border-color: var(--sc-kit--card--header--border-color, var(--sc-kit--color--border));
|
|
54
57
|
--_card--footer-background: var(--sc-kit--card--footer--background, var(--sc-kit--color--bg--element));
|
|
55
58
|
--_card--footer-border-color: var(--sc-kit--card--footer--border-color, var(--sc-kit--color--border));
|
|
59
|
+
--_card--header-padding: var(--sc-kit--card--header--padding, var(--sc-kit--space--3) var(--_card--chrome-padding-inline));
|
|
60
|
+
--_card--body-padding: var(--sc-kit--card--body--padding, var(--_card--body-padding-default));
|
|
61
|
+
--_card--footer-padding: var(--sc-kit--card--footer--padding, var(--sc-kit--space--3) var(--_card--chrome-padding-inline));
|
|
56
62
|
display: block;
|
|
57
63
|
width: 100%;
|
|
58
64
|
box-sizing: border-box;
|
|
@@ -66,25 +72,32 @@ whole card becomes a clickable target with hover and focus state, no `interactiv
|
|
|
66
72
|
.card--raised {
|
|
67
73
|
box-shadow: var(--_card--shadow);
|
|
68
74
|
}
|
|
69
|
-
.card--pad-none
|
|
70
|
-
padding: 0;
|
|
75
|
+
.card--pad-none {
|
|
76
|
+
--_card--body-padding-default: 0;
|
|
77
|
+
--_card--chrome-padding-inline: var(--sc-kit--space--5);
|
|
71
78
|
}
|
|
72
|
-
.card--pad-sm
|
|
73
|
-
padding: var(--sc-kit--space--3);
|
|
79
|
+
.card--pad-sm {
|
|
80
|
+
--_card--body-padding-default: var(--sc-kit--space--3);
|
|
81
|
+
--_card--chrome-padding-inline: var(--sc-kit--space--3);
|
|
74
82
|
}
|
|
75
|
-
.card--pad-md
|
|
76
|
-
padding: var(--sc-kit--space--5);
|
|
83
|
+
.card--pad-md {
|
|
84
|
+
--_card--body-padding-default: var(--sc-kit--space--5);
|
|
85
|
+
--_card--chrome-padding-inline: var(--sc-kit--space--5);
|
|
77
86
|
}
|
|
78
|
-
.card--pad-lg
|
|
79
|
-
padding: var(--sc-kit--space--6);
|
|
87
|
+
.card--pad-lg {
|
|
88
|
+
--_card--body-padding-default: var(--sc-kit--space--6);
|
|
89
|
+
--_card--chrome-padding-inline: var(--sc-kit--space--6);
|
|
90
|
+
}
|
|
91
|
+
.card__body {
|
|
92
|
+
padding: var(--_card--body-padding);
|
|
80
93
|
}
|
|
81
94
|
.card__header {
|
|
82
|
-
padding: var(--
|
|
95
|
+
padding: var(--_card--header-padding);
|
|
83
96
|
background: var(--_card--header-background);
|
|
84
97
|
border-bottom: 1px solid var(--_card--header-border-color);
|
|
85
98
|
}
|
|
86
99
|
.card__footer {
|
|
87
|
-
padding: var(--
|
|
100
|
+
padding: var(--_card--footer-padding);
|
|
88
101
|
background: var(--_card--footer-background);
|
|
89
102
|
border-top: 1px solid var(--_card--footer-border-color);
|
|
90
103
|
}
|
|
@@ -4,7 +4,7 @@ type CardPadding = 'none' | 'sm' | 'md' | 'lg';
|
|
|
4
4
|
type Props = {
|
|
5
5
|
/** Visual elevation. @default 'flat' */
|
|
6
6
|
elevation?: CardElevation;
|
|
7
|
-
/** Inner body padding preset. Header
|
|
7
|
+
/** Inner body padding preset. Header/footer inline padding follows it; their block padding stays fixed. @default 'md' */
|
|
8
8
|
padding?: CardPadding;
|
|
9
9
|
header?: Snippet;
|
|
10
10
|
footer?: Snippet;
|
|
@@ -34,8 +34,11 @@ type Props = {
|
|
|
34
34
|
* | `--sc-kit--card--color` | Body text color | `var(--sc-kit--color--text--primary)` |
|
|
35
35
|
* | `--sc-kit--card--header--background` | Header bar background | `transparent` |
|
|
36
36
|
* | `--sc-kit--card--header--border-color` | Header bottom divider | `var(--sc-kit--color--border)` |
|
|
37
|
+
* | `--sc-kit--card--header--padding` | Header padding (full shorthand) | block `var(--sc-kit--space--3)`, inline follows the `padding` preset |
|
|
38
|
+
* | `--sc-kit--card--body--padding` | Body padding (full shorthand) | the `padding` preset value |
|
|
37
39
|
* | `--sc-kit--card--footer--background` | Footer bar background | `var(--sc-kit--color--bg--element)` |
|
|
38
40
|
* | `--sc-kit--card--footer--border-color` | Footer top divider | `var(--sc-kit--color--border)` |
|
|
41
|
+
* | `--sc-kit--card--footer--padding` | Footer padding (full shorthand) | block `var(--sc-kit--space--3)`, inline follows the `padding` preset |
|
|
39
42
|
*/
|
|
40
43
|
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
41
44
|
type Cmp = ReturnType<typeof Cmp>;
|
|
@@ -156,7 +156,8 @@ $effect(() => {
|
|
|
156
156
|
{/if}
|
|
157
157
|
|
|
158
158
|
{#if open}
|
|
159
|
-
<
|
|
159
|
+
<!-- preventDefault cancels FormField's <label> activation — a dead-space click inside the panel would forward to the trigger and close the calendar. -->
|
|
160
|
+
<div bind:this={panelEl} class="date-picker__panel" role="presentation" onclick={(e) => e.preventDefault()} onkeydown={() => undefined}>
|
|
160
161
|
<DatePickerCalendar
|
|
161
162
|
selectedDate={selectedDate}
|
|
162
163
|
minDate={minDate}
|
|
@@ -74,6 +74,7 @@ const showClear = $derived(mode.clearable && hasValue && isInteractive && !core.
|
|
|
74
74
|
class:singleselect--inert={inert}
|
|
75
75
|
class:singleselect--borderless={borderless}
|
|
76
76
|
onclick={core.handleClick}
|
|
77
|
+
onmousedown={core.handleMousedown}
|
|
77
78
|
onkeydown={() => undefined}
|
|
78
79
|
role="presentation">
|
|
79
80
|
{#if icon}
|
|
@@ -185,6 +185,7 @@ const handleDndFinalize = (e) => {
|
|
|
185
185
|
class:multiselect-trigger--inert={inert}
|
|
186
186
|
class:multiselect-trigger--borderless={borderless}
|
|
187
187
|
onclick={core.handleClick}
|
|
188
|
+
onmousedown={core.handleMousedown}
|
|
188
189
|
onkeydown={() => undefined}
|
|
189
190
|
role="presentation">
|
|
190
191
|
{#if icon}
|
|
@@ -73,6 +73,7 @@ export type SelectCore<T> = {
|
|
|
73
73
|
readonly interactionLocked: boolean;
|
|
74
74
|
handleFocus: () => void;
|
|
75
75
|
handleClick: (e: MouseEvent) => void;
|
|
76
|
+
handleMousedown: (e: MouseEvent) => void;
|
|
76
77
|
handleInput: (e: Event) => void;
|
|
77
78
|
handleKeydown: (e: KeyboardEvent) => void;
|
|
78
79
|
openPopover: () => void;
|
|
@@ -250,6 +250,8 @@ export function createSelectCore(config) {
|
|
|
250
250
|
};
|
|
251
251
|
const handleFocus = () => undefined;
|
|
252
252
|
const handleClick = (e) => {
|
|
253
|
+
// Cancels FormField's <label> activation — else its synthetic click re-toggles the popover on every pick.
|
|
254
|
+
e.preventDefault();
|
|
253
255
|
if (!config.getInteractive() || isFiltering) {
|
|
254
256
|
return;
|
|
255
257
|
}
|
|
@@ -268,6 +270,12 @@ export function createSelectCore(config) {
|
|
|
268
270
|
openPopover();
|
|
269
271
|
}
|
|
270
272
|
};
|
|
273
|
+
const handleMousedown = (e) => {
|
|
274
|
+
// Keeps the inner input focused — default mousedown on the chevron/padding blurs it (focus-ring flicker).
|
|
275
|
+
if (e.target !== config.getInputEl()) {
|
|
276
|
+
e.preventDefault();
|
|
277
|
+
}
|
|
278
|
+
};
|
|
271
279
|
const handleInput = (e) => {
|
|
272
280
|
if (!config.getInteractive()) {
|
|
273
281
|
return;
|
|
@@ -357,6 +365,7 @@ export function createSelectCore(config) {
|
|
|
357
365
|
},
|
|
358
366
|
handleFocus,
|
|
359
367
|
handleClick,
|
|
368
|
+
handleMousedown,
|
|
360
369
|
handleInput,
|
|
361
370
|
handleKeydown,
|
|
362
371
|
openPopover,
|
|
@@ -116,7 +116,11 @@ $effect(() => {
|
|
|
116
116
|
role="listbox"
|
|
117
117
|
id={listboxId}
|
|
118
118
|
tabindex="-1"
|
|
119
|
-
onclick={(e) =>
|
|
119
|
+
onclick={(e) => {
|
|
120
|
+
// preventDefault cancels FormField's <label> activation — stopPropagation alone doesn't.
|
|
121
|
+
e.preventDefault();
|
|
122
|
+
e.stopPropagation();
|
|
123
|
+
}}
|
|
120
124
|
onmousedown={(e) => e.stopPropagation()}
|
|
121
125
|
onkeydown={() => undefined}>
|
|
122
126
|
{#if headerSnippet}
|