contain-css-svelte 1.1.19 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Card.svelte +22 -8
- package/dist/Card.svelte.d.ts +4 -5
- package/dist/controls/Button.svelte +19 -5
- package/dist/controls/Button.svelte.d.ts +4 -4
- package/dist/controls/ButtonLink.svelte +17 -14
- package/dist/controls/ButtonLink.svelte.d.ts +4 -4
- package/dist/controls/Checkbox.svelte +15 -8
- package/dist/controls/Checkbox.svelte.d.ts +4 -4
- package/dist/controls/CircleButton.svelte +14 -7
- package/dist/controls/CircleButton.svelte.d.ts +4 -4
- package/dist/controls/Input.svelte +14 -3
- package/dist/controls/Input.svelte.d.ts +4 -3
- package/dist/controls/Option.svelte +4 -3
- package/dist/controls/Option.svelte.d.ts +3 -2
- package/dist/controls/RadioButton.svelte +14 -7
- package/dist/controls/RadioButton.svelte.d.ts +4 -4
- package/dist/controls/Select.svelte +15 -3
- package/dist/controls/Select.svelte.d.ts +4 -3
- package/dist/controls/Slider.svelte +5 -11
- package/dist/controls/Slider.svelte.d.ts +3 -3
- package/dist/controls/TabItem.svelte +24 -5
- package/dist/controls/TabItem.svelte.d.ts +4 -4
- package/dist/controls/Toggle.svelte +21 -5
- package/dist/controls/Toggle.svelte.d.ts +4 -4
- package/dist/dropdowns/DropdownMenu.svelte +18 -6
- package/dist/dropdowns/DropdownMenu.svelte.d.ts +4 -4
- package/dist/layout/Accordion.svelte +17 -2
- package/dist/layout/Accordion.svelte.d.ts +5 -3
- package/dist/layout/Bar.svelte +27 -15
- package/dist/layout/Bar.svelte.d.ts +4 -4
- package/dist/layout/Column.svelte.d.ts +3 -3
- package/dist/layout/ColumnContainer.svelte +12 -9
- package/dist/layout/ColumnContainer.svelte.d.ts +4 -4
- package/dist/layout/Columns.svelte +4 -3
- package/dist/layout/Columns.svelte.d.ts +7 -3
- package/dist/layout/Container.svelte +23 -8
- package/dist/layout/Container.svelte.d.ts +7 -5
- package/dist/layout/DataList.svelte +15 -7
- package/dist/layout/DataList.svelte.d.ts +5 -4
- package/dist/layout/DataListItem.svelte +14 -8
- package/dist/layout/DataListItem.svelte.d.ts +4 -4
- package/dist/layout/Fieldset.svelte +16 -8
- package/dist/layout/Fieldset.svelte.d.ts +6 -3
- package/dist/layout/Form.svelte +17 -8
- package/dist/layout/Form.svelte.d.ts +8 -6
- package/dist/layout/FormItem.svelte +12 -7
- package/dist/layout/FormItem.svelte.d.ts +4 -3
- package/dist/layout/FormProvider.svelte +3 -0
- package/dist/layout/GridLayout.svelte +14 -9
- package/dist/layout/GridLayout.svelte.d.ts +4 -4
- package/dist/layout/GridRow.svelte +6 -10
- package/dist/layout/GridRow.svelte.d.ts +3 -2
- package/dist/layout/Hero.svelte +14 -8
- package/dist/layout/Hero.svelte.d.ts +4 -4
- package/dist/layout/Inline.svelte +16 -15
- package/dist/layout/Inline.svelte.d.ts +4 -4
- package/dist/layout/MenuList.svelte +13 -6
- package/dist/layout/MenuList.svelte.d.ts +4 -4
- package/dist/layout/Page.svelte +14 -8
- package/dist/layout/Page.svelte.d.ts +11 -3
- package/dist/layout/ResponsiveText.svelte +4 -0
- package/dist/layout/Row.svelte.d.ts +3 -3
- package/dist/layout/RowContainer.svelte +12 -9
- package/dist/layout/RowContainer.svelte.d.ts +4 -4
- package/dist/layout/Sidebar.svelte +17 -6
- package/dist/layout/Sidebar.svelte.d.ts +12 -4
- package/dist/layout/SplitPane.svelte +8 -14
- package/dist/layout/SplitPane.svelte.d.ts +16 -2
- package/dist/layout/Stack.svelte +16 -15
- package/dist/layout/Stack.svelte.d.ts +4 -4
- package/dist/layout/TabBar.svelte +12 -2
- package/dist/layout/TabBar.svelte.d.ts +17 -10
- package/dist/layout/Table.svelte +5 -1
- package/dist/layout/Tile.svelte +40 -27
- package/dist/layout/Tile.svelte.d.ts +32 -10
- package/dist/misc/Code.svelte +2 -0
- package/dist/misc/Progress.svelte +25 -8
- package/dist/misc/Progress.svelte.d.ts +15 -8
- package/dist/misc/Tag.svelte +97 -44
- package/dist/misc/Tag.svelte.d.ts +17 -5
- package/dist/overlays/Dialog.svelte +18 -5
- package/dist/overlays/Dialog.svelte.d.ts +5 -3
- package/dist/overlays/Tooltip.svelte +21 -3
- package/dist/overlays/Tooltip.svelte.d.ts +5 -3
- package/dist/styleProps.d.ts +67 -0
- package/dist/styleProps.js +76 -0
- package/dist/types.d.ts +40 -1
- package/dist/types.js +1 -1
- package/dist/typography/Text.svelte +4 -11
- package/dist/typography/TextLayout.svelte +4 -7
- package/dist/typography/TextLayout.svelte.d.ts +4 -3
- package/dist/util.d.ts +60 -3
- package/dist/util.js +101 -11
- package/package.json +1 -1
|
@@ -1,11 +1,19 @@
|
|
|
1
|
+
import { type StyleProps } from "../styleProps";
|
|
1
2
|
import type { Snippet } from "svelte";
|
|
2
|
-
import type { SidebarStyleProps } from "../types";
|
|
3
|
+
import type { ContainProps, SidebarStyleProps } from "../types";
|
|
3
4
|
import type { HTMLAttributes } from "svelte/elements";
|
|
4
|
-
|
|
5
|
+
declare const Sidebar: import("svelte").Component<ContainProps<HTMLAttributes<HTMLElement>, {
|
|
5
6
|
left?: boolean;
|
|
6
7
|
right?: boolean;
|
|
7
8
|
children?: Snippet;
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Accessible name for the button that opens the sidebar on narrow
|
|
11
|
+
* screens, and for the one that collapses it once open. What the sidebar
|
|
12
|
+
* holds is the useful thing to say -- `expandLabel="Show filters"` beats
|
|
13
|
+
* "Expand sidebar" for anyone who cannot see what it contains.
|
|
14
|
+
*/
|
|
15
|
+
expandLabel?: string;
|
|
16
|
+
collapseLabel?: string;
|
|
17
|
+
}, SidebarStyleProps & StyleProps<readonly ["bg", "fg", "fontFamily", "fontSize", "fontWeight", "lineHeight", "letterSpacing", "textAlign", "textTransform", "textDecoration", "fontVariant"]>>, {}, "">;
|
|
10
18
|
type Sidebar = ReturnType<typeof Sidebar>;
|
|
11
19
|
export default Sidebar;
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
1
|
+
<script lang="ts">import { elementProps } from "../util";
|
|
2
2
|
import { onMount } from "svelte";
|
|
3
|
-
let { left, right, ...restProps } = $props();
|
|
4
|
-
const style = $derived(injectVars(restProps, "split-pane", [
|
|
5
|
-
"bg",
|
|
6
|
-
"fg",
|
|
7
|
-
"border",
|
|
8
|
-
"height",
|
|
9
|
-
"leftWidth",
|
|
10
|
-
"rightWidth",
|
|
11
|
-
]));
|
|
3
|
+
let { left, right, resizerLabel = "Resize panes", class: className, ...restProps } = $props();
|
|
12
4
|
let resizeStyle = $state("");
|
|
5
|
+
/* resizeStyle is the live drag offset, so it goes in as extraVars -- after
|
|
6
|
+
the prop variables and before the caller's own `style`. */
|
|
7
|
+
const el = $derived(elementProps(restProps, "split-pane", ["bg", "fg", "border", "height", "leftWidth", "rightWidth"], resizeStyle));
|
|
13
8
|
let startWidthLeft = $state(0);
|
|
14
9
|
let startWidthRight = $state(0);
|
|
15
10
|
let startX = $state(0);
|
|
@@ -96,10 +91,9 @@ onMount(() => {
|
|
|
96
91
|
</script>
|
|
97
92
|
|
|
98
93
|
<div
|
|
99
|
-
class="split-pane"
|
|
100
|
-
style={style + resizeStyle}
|
|
94
|
+
class={["split-pane", className]}
|
|
101
95
|
bind:this={splitPaneContainer}
|
|
102
|
-
{...
|
|
96
|
+
{...el}
|
|
103
97
|
>
|
|
104
98
|
<div class="left" bind:this={leftPane}>
|
|
105
99
|
{@render left?.()}
|
|
@@ -113,7 +107,7 @@ onMount(() => {
|
|
|
113
107
|
tabindex="0"
|
|
114
108
|
role="separator"
|
|
115
109
|
aria-orientation="vertical"
|
|
116
|
-
aria-label=
|
|
110
|
+
aria-label={resizerLabel}
|
|
117
111
|
onpointerdown={onMouseDown}
|
|
118
112
|
onkeydown={onKeyUp}
|
|
119
113
|
></div>
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
2
|
import type { HTMLAttributes } from "svelte/elements";
|
|
3
|
-
type
|
|
3
|
+
import type { ContainProps } from "../types";
|
|
4
|
+
type Props = ContainProps<HTMLAttributes<HTMLElement>, {
|
|
4
5
|
left?: Snippet;
|
|
5
6
|
right?: Snippet;
|
|
6
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Accessible name for the drag handle between the panes. Name what the
|
|
9
|
+
* panes hold -- `resizerLabel="Resize the preview"` -- so it is clear
|
|
10
|
+
* what moving the handle does.
|
|
11
|
+
*/
|
|
12
|
+
resizerLabel?: string;
|
|
13
|
+
}, {
|
|
14
|
+
bg?: string | null;
|
|
15
|
+
fg?: string | null;
|
|
16
|
+
border?: string | null;
|
|
17
|
+
height?: string | null;
|
|
18
|
+
leftWidth?: string | null;
|
|
19
|
+
rightWidth?: string | null;
|
|
20
|
+
}>;
|
|
7
21
|
declare const SplitPane: import("svelte").Component<Props, {}, "">;
|
|
8
22
|
type SplitPane = ReturnType<typeof SplitPane>;
|
|
9
23
|
export default SplitPane;
|
package/dist/layout/Stack.svelte
CHANGED
|
@@ -1,32 +1,33 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
2
|
-
|
|
1
|
+
<script lang="ts">import { elementProps } from "../util";
|
|
2
|
+
import { MARGIN_VARS, PADDING_VARS, RADIUS_VARS, } from "../styleProps";
|
|
3
|
+
let { fill = false, stretch = false, split = false, center = false, justify = null, align = null, gap = null, children, class: className, ...restProps } = $props();
|
|
3
4
|
const resolvedAlign = $derived(align ?? (center ? "center" : null));
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
/* The shorthands stack's own CSS backs, one group per mixin it
|
|
6
|
+
includes. The Props type is derived from this same array, so what the
|
|
7
|
+
component accepts and what it emits cannot drift apart. */
|
|
8
|
+
const STACK_VARS = [
|
|
9
|
+
...PADDING_VARS,
|
|
10
|
+
...RADIUS_VARS,
|
|
11
|
+
...MARGIN_VARS,
|
|
12
|
+
];
|
|
13
|
+
const el = $derived(elementProps({ justify, align: resolvedAlign, gap, ...restProps }, "stack", [
|
|
14
|
+
...STACK_VARS,
|
|
10
15
|
"bg",
|
|
11
16
|
"fg",
|
|
12
|
-
"padding",
|
|
13
17
|
"width",
|
|
14
18
|
"height",
|
|
15
19
|
"gap",
|
|
16
20
|
"justify",
|
|
17
21
|
"align",
|
|
18
|
-
|
|
19
|
-
"marginInline",
|
|
20
|
-
]) + (inlineStyle ?? ""));
|
|
22
|
+
]));
|
|
21
23
|
</script>
|
|
22
24
|
|
|
23
25
|
<div
|
|
24
|
-
class="stack"
|
|
26
|
+
class={["stack", className]}
|
|
25
27
|
class:fill
|
|
26
28
|
class:stretch
|
|
27
29
|
class:split
|
|
28
|
-
{
|
|
29
|
-
{...elementProps}
|
|
30
|
+
{...el}
|
|
30
31
|
>
|
|
31
32
|
{@render children?.()}
|
|
32
33
|
</div>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
2
|
import type { HTMLAttributes } from "svelte/elements";
|
|
3
|
-
import type { BaseStyleProps, MarginStyleProps } from "../types";
|
|
4
|
-
type
|
|
3
|
+
import type { BaseStyleProps, ContainProps, MarginStyleProps } from "../types";
|
|
4
|
+
import { type StyleProps } from "../styleProps";
|
|
5
|
+
declare const Stack: import("svelte").Component<ContainProps<HTMLAttributes<HTMLDivElement>, {
|
|
5
6
|
fill?: boolean;
|
|
6
7
|
stretch?: boolean;
|
|
7
8
|
split?: boolean;
|
|
@@ -10,7 +11,6 @@ type Props = {
|
|
|
10
11
|
align?: string | null;
|
|
11
12
|
gap?: string | null;
|
|
12
13
|
children?: Snippet;
|
|
13
|
-
}
|
|
14
|
-
declare const Stack: import("svelte").Component<Props, {}, "">;
|
|
14
|
+
}, BaseStyleProps & MarginStyleProps & StyleProps<readonly ["padding", "borderRadius", "marginBlock", "marginInline"]>>, {}, "">;
|
|
15
15
|
type Stack = ReturnType<typeof Stack>;
|
|
16
16
|
export default Stack;
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
<script lang="ts">import Bar from "./Bar.svelte";
|
|
2
2
|
import TabItem from "../controls/TabItem.svelte";
|
|
3
|
-
|
|
3
|
+
import { elementProps } from "../util";
|
|
4
|
+
import { COLOR_VARS, TYPOGRAPHY_VARS, } from "../styleProps";
|
|
5
|
+
let { sticky = false, active = $bindable(null), items = [], onchange, children, class: className, ...restProps } = $props();
|
|
6
|
+
/* The shorthands this component's own CSS backs, one group per mixin
|
|
7
|
+
it includes. The Props type is derived from this same array, so what
|
|
8
|
+
the component accepts and what it emits cannot drift apart. */
|
|
9
|
+
const TAB_BAR_VARS = [
|
|
10
|
+
...COLOR_VARS,
|
|
11
|
+
...TYPOGRAPHY_VARS,
|
|
12
|
+
];
|
|
13
|
+
const el = $derived(elementProps(restProps, "tab-bar", TAB_BAR_VARS));
|
|
4
14
|
let lastActive = $state(active);
|
|
5
15
|
</script>
|
|
6
16
|
|
|
7
|
-
<div class="tabs" class:sticky>
|
|
17
|
+
<div class={["tabs", className]} class:sticky {...el}>
|
|
8
18
|
<Bar
|
|
9
19
|
padding="0"
|
|
10
20
|
--button-height="var(--tab-bar-height, 3em)"
|
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
type
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
interface Props {
|
|
1
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
2
|
+
import type { ContainProps } from "../types";
|
|
3
|
+
import { type StyleProps } from "../styleProps";
|
|
4
|
+
declare const TabBar: import("svelte").Component<ContainProps<HTMLAttributes<HTMLDivElement>, {
|
|
6
5
|
sticky?: boolean;
|
|
7
|
-
active?: string |
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
active?: string | {
|
|
7
|
+
label: string;
|
|
8
|
+
value: string;
|
|
9
|
+
} | null;
|
|
10
|
+
items?: (string | {
|
|
11
|
+
label: string;
|
|
12
|
+
value: string;
|
|
13
|
+
})[];
|
|
14
|
+
onchange?: (value: string | {
|
|
15
|
+
label: string;
|
|
16
|
+
value: string;
|
|
17
|
+
} | null) => void;
|
|
10
18
|
children?: import("svelte").Snippet;
|
|
11
|
-
}
|
|
12
|
-
declare const TabBar: import("svelte").Component<Props, {}, "active">;
|
|
19
|
+
}, StyleProps<readonly ["bg", "fg", "fontFamily", "fontSize", "fontWeight", "lineHeight", "letterSpacing", "textAlign", "textTransform", "textDecoration", "fontVariant"]>>, {}, "active">;
|
|
13
20
|
type TabBar = ReturnType<typeof TabBar>;
|
|
14
21
|
export default TabBar;
|
package/dist/layout/Table.svelte
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
<script lang="ts"
|
|
1
|
+
<script lang="ts">/* No attribute pass-through, deliberately: the sticky variant renders the
|
|
2
|
+
visible tables AND a visually-hidden clone of them used to measure column
|
|
3
|
+
widths. Spreading a caller's `id` would emit it twice, which is invalid.
|
|
4
|
+
Set attributes on the <table> markup you pass in as `thead`/`tbody`. */
|
|
5
|
+
let { sticky = false, column_widths = null, thead, tbody, children, } = $props();
|
|
2
6
|
// svelte-ignore state_referenced_locally
|
|
3
7
|
let columns = $state(column_widths || []);
|
|
4
8
|
/* Code for syncing column widths for scrolling table solution */
|
package/dist/layout/Tile.svelte
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
1
|
+
<script lang="ts">import { splitProps } from "../util";
|
|
2
|
+
import { COLOR_VARS, PADDING_VARS, RADIUS_VARS, MARGIN_VARS, TYPOGRAPHY_CONTAINER_VARS, } from "../styleProps";
|
|
3
|
+
/* The shorthands this component's own CSS backs, one group per mixin
|
|
4
|
+
it includes. The Props type is derived from this same array, so what
|
|
5
|
+
the component accepts and what it emits cannot drift apart. */
|
|
6
|
+
const TILE_VARS = [
|
|
7
|
+
...COLOR_VARS,
|
|
8
|
+
...PADDING_VARS,
|
|
9
|
+
...RADIUS_VARS,
|
|
10
|
+
...MARGIN_VARS,
|
|
11
|
+
...TYPOGRAPHY_CONTAINER_VARS,
|
|
12
|
+
];
|
|
2
13
|
let { checked = $bindable(false), ...props } = $props();
|
|
3
14
|
/* Props to CSS variables, the way Stack, Card, Tag and the rest do it, so a
|
|
4
15
|
Tile can be aimed with `<Tile center>` rather than only a raw variable. */
|
|
@@ -16,43 +27,45 @@ const styleProps = $derived.by(() => {
|
|
|
16
27
|
align: align ?? (center ? "center" : null),
|
|
17
28
|
};
|
|
18
29
|
});
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
function getSelectableInputProps(value) {
|
|
36
|
-
return stripOwnProps(value);
|
|
37
|
-
}
|
|
38
|
-
function getInteractiveButtonProps(value) {
|
|
39
|
-
return stripOwnProps(value);
|
|
40
|
-
}
|
|
30
|
+
/* splitProps consumes the style props and `--*`, and keeps `style` out of
|
|
31
|
+
the attributes; the props that are Tile's own rather than the element's
|
|
32
|
+
are peeled off here first. In the selectable case the variables land on
|
|
33
|
+
the label that `.tile` styles while the attributes go to the checkbox,
|
|
34
|
+
which is what a caller's `aria-*` and `data-*` are describing. */
|
|
35
|
+
const el = $derived.by(() => {
|
|
36
|
+
const { selectable: _selectable, interactive: _interactive, children: _children, center: _center, class: _class, ...rest } = props;
|
|
37
|
+
return splitProps({ ...rest, ...styleProps }, "tile", [
|
|
38
|
+
...TILE_VARS,
|
|
39
|
+
"width",
|
|
40
|
+
"height",
|
|
41
|
+
"justify",
|
|
42
|
+
"align",
|
|
43
|
+
]);
|
|
44
|
+
});
|
|
45
|
+
const className = $derived(props.class);
|
|
41
46
|
</script>
|
|
42
47
|
|
|
43
48
|
{#if props.selectable}
|
|
44
|
-
<label class="tile" {style}>
|
|
49
|
+
<label class={["tile", className]} style={el.style}>
|
|
45
50
|
<div class="checkbox">
|
|
46
|
-
<input
|
|
51
|
+
<input
|
|
52
|
+
type="checkbox"
|
|
53
|
+
bind:checked
|
|
54
|
+
{...el.attrs as HTMLInputAttributes}
|
|
55
|
+
/>
|
|
47
56
|
</div>
|
|
48
57
|
{@render props.children?.()}
|
|
49
58
|
</label>
|
|
50
59
|
{:else if props.interactive}
|
|
51
|
-
<button
|
|
60
|
+
<button
|
|
61
|
+
class={["tile", className]}
|
|
62
|
+
style={el.style}
|
|
63
|
+
{...el.attrs as HTMLButtonAttributes}
|
|
64
|
+
>
|
|
52
65
|
{@render props.children?.()}
|
|
53
66
|
</button>
|
|
54
67
|
{:else}
|
|
55
|
-
<div class="tile" {style} {...
|
|
68
|
+
<div class={["tile", className]} style={el.style} {...el.attrs}>
|
|
56
69
|
{@render props.children?.()}
|
|
57
70
|
</div>
|
|
58
71
|
{/if}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
2
|
import type { HTMLAttributes, HTMLButtonAttributes, HTMLInputAttributes } from "svelte/elements";
|
|
3
|
+
import { type StyleProps } from "../styleProps";
|
|
3
4
|
import type { BaseStyleProps, MarginStyleProps } from "../types";
|
|
4
|
-
|
|
5
|
+
declare const Tile: import("svelte").Component<(BaseStyleProps & MarginStyleProps & StyleProps<readonly ["bg", "fg", "padding", "borderRadius", "marginBlock", "marginInline", "fontFamily", "fontSize", "fontWeight", "lineHeight", "letterSpacing", "textAlign", "textTransform", "textDecoration", "fontVariant", "lineWidth"]> & {
|
|
5
6
|
/** Distribution along the tile's own axis, which is vertical. */
|
|
6
7
|
justify?: string | null;
|
|
7
8
|
/** Cross-axis alignment, which is horizontal. Centred already. */
|
|
@@ -14,23 +15,44 @@ type BaseProps = BaseStyleProps & MarginStyleProps & {
|
|
|
14
15
|
*/
|
|
15
16
|
center?: boolean;
|
|
16
17
|
children?: Snippet;
|
|
17
|
-
}
|
|
18
|
-
type StaticTileProps = BaseProps & HTMLAttributes<HTMLDivElement> & {
|
|
18
|
+
} & HTMLAttributes<HTMLDivElement> & {
|
|
19
19
|
interactive?: false;
|
|
20
20
|
selectable?: false;
|
|
21
21
|
checked?: never;
|
|
22
|
-
}
|
|
23
|
-
|
|
22
|
+
}) | (BaseStyleProps & MarginStyleProps & StyleProps<readonly ["bg", "fg", "padding", "borderRadius", "marginBlock", "marginInline", "fontFamily", "fontSize", "fontWeight", "lineHeight", "letterSpacing", "textAlign", "textTransform", "textDecoration", "fontVariant", "lineWidth"]> & {
|
|
23
|
+
/** Distribution along the tile's own axis, which is vertical. */
|
|
24
|
+
justify?: string | null;
|
|
25
|
+
/** Cross-axis alignment, which is horizontal. Centred already. */
|
|
26
|
+
align?: string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Shorthand for centring the tile's contents. Sets both axes, unlike
|
|
29
|
+
* `Stack`'s `center`, because a Tile already centres horizontally -- setting
|
|
30
|
+
* only the cross axis here would be a no-op and `<Tile center>` would look
|
|
31
|
+
* broken.
|
|
32
|
+
*/
|
|
33
|
+
center?: boolean;
|
|
34
|
+
children?: Snippet;
|
|
35
|
+
} & HTMLButtonAttributes & {
|
|
24
36
|
interactive: true;
|
|
25
37
|
selectable?: false;
|
|
26
38
|
checked?: never;
|
|
27
|
-
}
|
|
28
|
-
|
|
39
|
+
}) | (BaseStyleProps & MarginStyleProps & StyleProps<readonly ["bg", "fg", "padding", "borderRadius", "marginBlock", "marginInline", "fontFamily", "fontSize", "fontWeight", "lineHeight", "letterSpacing", "textAlign", "textTransform", "textDecoration", "fontVariant", "lineWidth"]> & {
|
|
40
|
+
/** Distribution along the tile's own axis, which is vertical. */
|
|
41
|
+
justify?: string | null;
|
|
42
|
+
/** Cross-axis alignment, which is horizontal. Centred already. */
|
|
43
|
+
align?: string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Shorthand for centring the tile's contents. Sets both axes, unlike
|
|
46
|
+
* `Stack`'s `center`, because a Tile already centres horizontally -- setting
|
|
47
|
+
* only the cross axis here would be a no-op and `<Tile center>` would look
|
|
48
|
+
* broken.
|
|
49
|
+
*/
|
|
50
|
+
center?: boolean;
|
|
51
|
+
children?: Snippet;
|
|
52
|
+
} & HTMLInputAttributes & {
|
|
29
53
|
selectable: true;
|
|
30
54
|
interactive?: false;
|
|
31
55
|
checked?: boolean;
|
|
32
|
-
}
|
|
33
|
-
type Props = StaticTileProps | InteractiveTileProps | SelectableTileProps;
|
|
34
|
-
declare const Tile: import("svelte").Component<Props, {}, "checked">;
|
|
56
|
+
}), {}, "checked">;
|
|
35
57
|
type Tile = ReturnType<typeof Tile>;
|
|
36
58
|
export default Tile;
|
package/dist/misc/Code.svelte
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<script lang="ts">const browser = typeof window !== "undefined";
|
|
2
|
+
/* No attribute pass-through, deliberately: this renders CodeInner (loaded
|
|
3
|
+
lazily in the browser) and no element of its own. */
|
|
2
4
|
let { code, inline = false, language = "html" } = $props();
|
|
3
5
|
let component = $state(null);
|
|
4
6
|
if (browser) {
|
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
2
|
-
|
|
3
|
-
let { state = "inprogress", value = 0, max = 100, bg = null, fg = null, padding = null, width = null, height = null, children, ...restProps } = $props();
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
<script lang="ts">import { elementProps } from "../util";
|
|
2
|
+
import { COLOR_VARS, PADDING_VARS, RADIUS_VARS, TYPOGRAPHY_CONTAINER_VARS, } from "../styleProps";
|
|
3
|
+
let { state = "inprogress", value = 0, max = 100, bg = null, fg = null, padding = null, width = null, height = null, children, progressLabel = "Progress", class: className, ...restProps } = $props();
|
|
4
|
+
/* The shorthands this component's own CSS backs, one group per mixin
|
|
5
|
+
it includes. The Props type is derived from this same array, so what
|
|
6
|
+
the component accepts and what it emits cannot drift apart. */
|
|
7
|
+
const PROGRESS_VARS = [
|
|
8
|
+
...COLOR_VARS,
|
|
9
|
+
...PADDING_VARS,
|
|
10
|
+
...RADIUS_VARS,
|
|
11
|
+
...TYPOGRAPHY_CONTAINER_VARS,
|
|
12
|
+
];
|
|
13
|
+
const cssKeys = [...PROGRESS_VARS, "width", "height"];
|
|
14
|
+
/* Every style prop is destructured above, so they are handed back
|
|
15
|
+
explicitly. Passing `restProps` alone -- which is what this did before --
|
|
16
|
+
meant <Progress bg="red"> emitted no --progress-bg at all. */
|
|
17
|
+
const el = $derived(elementProps({ bg, fg, padding, width, height, ...restProps }, "progress", cssKeys));
|
|
6
18
|
// Compute filled fraction (0..1). 'indeterminate' treats as 1 for the visual bar,
|
|
7
19
|
// but the native <progress> should omit the value attribute for indeterminate.
|
|
8
20
|
let fillFraction = $derived(value === "indeterminate"
|
|
@@ -19,11 +31,16 @@ let halfFull = $derived(fillFraction > 0.5);
|
|
|
19
31
|
1) Hidden native <progress> for a11y.
|
|
20
32
|
If 'indeterminate', omit the value attribute entirely.
|
|
21
33
|
-->
|
|
22
|
-
<div class="progress-container" data-state={state} {
|
|
34
|
+
<div class={["progress-container", className]} data-state={state} {...el}>
|
|
23
35
|
{#if value === "indeterminate"}
|
|
24
|
-
<progress aria-label=
|
|
36
|
+
<progress aria-label={progressLabel} {max} hidden></progress>
|
|
25
37
|
{:else}
|
|
26
|
-
<progress
|
|
38
|
+
<progress
|
|
39
|
+
aria-label={progressLabel}
|
|
40
|
+
{max}
|
|
41
|
+
value={Number(value)}
|
|
42
|
+
hidden
|
|
43
|
+
></progress>
|
|
27
44
|
{/if}
|
|
28
45
|
|
|
29
46
|
<!-- 2) Custom track with diagonal stripes (scrolling) when animateTrack=true -->
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
+
import { type StyleProps } from "../styleProps";
|
|
1
2
|
import type { Snippet } from "svelte";
|
|
2
|
-
type
|
|
3
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
4
|
+
import type { BaseStyleProps, ContainProps } from "../types";
|
|
5
|
+
declare const Progress: import("svelte").Component<ContainProps<HTMLAttributes<HTMLDivElement>, {
|
|
3
6
|
state?: "uninitiated" | "inprogress" | "complete";
|
|
4
7
|
value?: number | "indeterminate";
|
|
5
8
|
max?: number;
|
|
6
|
-
bg?: string | null;
|
|
7
|
-
fg?: string | null;
|
|
8
|
-
padding?: string | null;
|
|
9
|
-
width?: string | null;
|
|
10
|
-
height?: string | null;
|
|
11
9
|
children?: Snippet;
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Accessible name for the native <progress> that carries this bar's
|
|
12
|
+
* semantics. Say what is progressing -- `progressLabel="Upload"` -- since
|
|
13
|
+
* "Progress" tells a screen-reader user nothing they did not already know
|
|
14
|
+
* from the role.
|
|
15
|
+
*
|
|
16
|
+
* Named `progressLabel`, not `label`, because `label` is a real HTML
|
|
17
|
+
* attribute; a style or a11y prop must never shadow one.
|
|
18
|
+
*/
|
|
19
|
+
progressLabel?: string;
|
|
20
|
+
}, BaseStyleProps & StyleProps<readonly ["bg", "fg", "padding", "borderRadius", "fontFamily", "fontSize", "fontWeight", "lineHeight", "letterSpacing", "textAlign", "textTransform", "textDecoration", "fontVariant", "lineWidth"]>>, {}, "">;
|
|
14
21
|
type Progress = ReturnType<typeof Progress>;
|
|
15
22
|
export default Progress;
|