m3-svelte 3.6.1 → 4.0.0-beta.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/package/buttons/Button.svelte +142 -78
- package/package/buttons/Button.svelte.d.ts +17 -34
- package/package/buttons/ConnectedButtons.svelte +26 -0
- package/package/buttons/ConnectedButtons.svelte.d.ts +8 -0
- package/package/buttons/FAB.svelte +30 -15
- package/package/buttons/FAB.svelte.d.ts +14 -25
- package/package/containers/BottomSheet.svelte +33 -27
- package/package/containers/BottomSheet.svelte.d.ts +7 -21
- package/package/containers/Card.svelte +45 -14
- package/package/containers/Card.svelte.d.ts +10 -30
- package/package/containers/Dialog.svelte +46 -32
- package/package/containers/Dialog.svelte.d.ts +9 -34
- package/package/containers/ListItem.svelte +78 -14
- package/package/containers/ListItem.svelte.d.ts +14 -25
- package/package/containers/Menu.svelte +6 -3
- package/package/containers/Menu.svelte.d.ts +6 -28
- package/package/containers/MenuItem.svelte +15 -5
- package/package/containers/MenuItem.svelte.d.ts +7 -29
- package/package/containers/Snackbar.svelte +35 -37
- package/package/containers/Snackbar.svelte.d.ts +7 -22
- package/package/containers/SnackbarItem.svelte +6 -6
- package/package/containers/SnackbarItem.svelte.d.ts +6 -29
- package/package/containers/StandardSideSheet.svelte +14 -8
- package/package/containers/StandardSideSheet.svelte.d.ts +7 -30
- package/package/forms/Checkbox.svelte +19 -4
- package/package/forms/Checkbox.svelte.d.ts +6 -29
- package/package/forms/Chip.svelte +41 -29
- package/package/forms/Chip.svelte.d.ts +18 -41
- package/package/forms/CircularProgress.svelte +4 -6
- package/package/forms/CircularProgress.svelte.d.ts +4 -20
- package/package/forms/CircularProgressIndeterminate.svelte +3 -4
- package/package/forms/CircularProgressIndeterminate.svelte.d.ts +2 -20
- package/package/forms/DatePickerDocked.svelte +52 -35
- package/package/forms/DatePickerDocked.svelte.d.ts +6 -22
- package/package/forms/LinearProgress.svelte +10 -5
- package/package/forms/LinearProgress.svelte.d.ts +4 -20
- package/package/forms/LinearProgressIndeterminate.svelte +4 -3
- package/package/forms/LinearProgressIndeterminate.svelte.d.ts +2 -20
- package/package/forms/RadioAnim1.svelte +10 -4
- package/package/forms/RadioAnim1.svelte.d.ts +6 -29
- package/package/forms/RadioAnim2.svelte +10 -4
- package/package/forms/RadioAnim2.svelte.d.ts +6 -29
- package/package/forms/RadioAnim3.svelte +10 -4
- package/package/forms/RadioAnim3.svelte.d.ts +6 -29
- package/package/forms/Slider.svelte +32 -26
- package/package/forms/Slider.svelte.d.ts +5 -21
- package/package/forms/SliderTicks.svelte +40 -33
- package/package/forms/SliderTicks.svelte.d.ts +5 -21
- package/package/forms/Switch.svelte +23 -21
- package/package/forms/Switch.svelte.d.ts +5 -22
- package/package/forms/TextField.svelte +36 -19
- package/package/forms/TextField.svelte.d.ts +14 -27
- package/package/forms/TextFieldMultiline.svelte +21 -21
- package/package/forms/TextFieldMultiline.svelte.d.ts +6 -23
- package/package/forms/TextFieldOutlined.svelte +36 -18
- package/package/forms/TextFieldOutlined.svelte.d.ts +14 -26
- package/package/forms/TextFieldOutlinedMultiline.svelte +21 -21
- package/package/forms/TextFieldOutlinedMultiline.svelte.d.ts +6 -23
- package/package/forms/_picker/Actions.svelte +16 -18
- package/package/forms/_picker/Actions.svelte.d.ts +7 -22
- package/package/forms/_picker/CalendarPicker.svelte +14 -4
- package/package/forms/_picker/CalendarPicker.svelte.d.ts +4 -18
- package/package/forms/_picker/FocusPicker.svelte +8 -9
- package/package/forms/_picker/FocusPicker.svelte.d.ts +5 -21
- package/package/forms/_picker/Header.svelte +20 -9
- package/package/forms/_picker/Header.svelte.d.ts +4 -18
- package/package/forms/_picker/Item.svelte +15 -6
- package/package/forms/_picker/Item.svelte.d.ts +8 -23
- package/package/index.d.ts +3 -9
- package/package/index.js +1 -8
- package/package/misc/Layer.svelte +7 -3
- package/package/misc/Layer.svelte.d.ts +5 -17
- package/package/misc/StyleFromScheme.svelte +6 -2
- package/package/misc/StyleFromScheme.svelte.d.ts +5 -19
- package/package/misc/_icon.svelte +12 -5
- package/package/misc/_icon.svelte.d.ts +5 -19
- package/package/misc/_ripple.svelte +11 -3
- package/package/misc/_ripple.svelte.d.ts +5 -17
- package/package/misc/_ripplesimple.svelte +4 -0
- package/package/misc/_ripplesimple.svelte.d.ts +5 -25
- package/package/misc/_styling.svelte +7 -3
- package/package/misc/_styling.svelte.d.ts +5 -19
- package/package/misc/animation.js +1 -5
- package/package/misc/easing.js +1 -28
- package/package/misc/styles.css +135 -107
- package/package/misc/utils.d.ts +1 -0
- package/package/misc/utils.js +5 -0
- package/package/nav/NavDrawer.svelte +9 -5
- package/package/nav/NavDrawer.svelte.d.ts +6 -30
- package/package/nav/NavDrawerButton.svelte +22 -12
- package/package/nav/NavDrawerButton.svelte.d.ts +8 -31
- package/package/nav/NavDrawerLink.svelte +21 -12
- package/package/nav/NavDrawerLink.svelte.d.ts +8 -30
- package/package/nav/NavList.svelte +13 -9
- package/package/nav/NavList.svelte.d.ts +7 -31
- package/package/nav/NavListButton.svelte +26 -22
- package/package/nav/NavListButton.svelte.d.ts +9 -33
- package/package/nav/NavListLink.svelte +26 -23
- package/package/nav/NavListLink.svelte.d.ts +9 -32
- package/package/nav/Tabs.svelte +20 -19
- package/package/nav/Tabs.svelte.d.ts +5 -22
- package/package/nav/TabsLink.svelte +22 -18
- package/package/nav/TabsLink.svelte.d.ts +5 -22
- package/package/nav/VariableTabs.svelte +25 -20
- package/package/nav/VariableTabs.svelte.d.ts +5 -22
- package/package/nav/VariableTabsLink.svelte +29 -22
- package/package/nav/VariableTabsLink.svelte.d.ts +5 -22
- package/package/utils/ChipChooser.svelte +10 -4
- package/package/utils/ChipChooser.svelte.d.ts +5 -19
- package/package/utils/DateField.svelte +24 -18
- package/package/utils/DateField.svelte.d.ts +4 -19
- package/package/utils/Divider.svelte +5 -1
- package/package/utils/Divider.svelte.d.ts +4 -18
- package/package.json +44 -43
- package/package/buttons/ButtonLink.svelte +0 -116
- package/package/buttons/ButtonLink.svelte.d.ts +0 -34
- package/package/buttons/SegmentedButtonContainer.svelte +0 -27
- package/package/buttons/SegmentedButtonContainer.svelte.d.ts +0 -31
- package/package/buttons/SegmentedButtonItem.svelte +0 -119
- package/package/buttons/SegmentedButtonItem.svelte.d.ts +0 -34
- package/package/containers/CardClickable.svelte +0 -78
- package/package/containers/CardClickable.svelte.d.ts +0 -34
- package/package/containers/ListItemButton.svelte +0 -86
- package/package/containers/ListItemButton.svelte.d.ts +0 -31
- package/package/containers/ListItemLabel.svelte +0 -82
- package/package/containers/ListItemLabel.svelte.d.ts +0 -29
- package/package/containers/SnackbarAnim.svelte +0 -127
- package/package/containers/SnackbarAnim.svelte.d.ts +0 -33
- package/package/forms/CheckboxAnim.svelte +0 -116
- package/package/forms/CheckboxAnim.svelte.d.ts +0 -31
|
@@ -1,50 +1,169 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
HTMLButtonAttributes,
|
|
4
|
+
HTMLAnchorAttributes,
|
|
5
|
+
HTMLLabelAttributes,
|
|
6
|
+
} from "svelte/elements";
|
|
7
|
+
import type { Snippet } from "svelte";
|
|
3
8
|
import Layer from "../misc/Layer.svelte";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
|
|
10
|
+
// If you want a toggle button, use `for` with an `<input>`.
|
|
11
|
+
type ActionProps =
|
|
12
|
+
| ({ click: () => void; disabled?: boolean } & HTMLButtonAttributes)
|
|
13
|
+
| ({ href: string } & HTMLAnchorAttributes)
|
|
14
|
+
| ({ for: string } & HTMLLabelAttributes);
|
|
15
|
+
type Props = {
|
|
16
|
+
variant: "elevated" | "filled" | "tonal" | "outlined" | "text";
|
|
17
|
+
square?: boolean;
|
|
18
|
+
iconType?: "none" | "left" | "full";
|
|
19
|
+
children: Snippet;
|
|
20
|
+
} & ActionProps;
|
|
21
|
+
|
|
22
|
+
let props: Props = $props();
|
|
9
23
|
</script>
|
|
10
24
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
{#if "click" in props}
|
|
26
|
+
{@const {
|
|
27
|
+
variant,
|
|
28
|
+
click,
|
|
29
|
+
disabled,
|
|
30
|
+
square = false,
|
|
31
|
+
iconType = "none",
|
|
32
|
+
children,
|
|
33
|
+
...extra
|
|
34
|
+
} = props}
|
|
35
|
+
<button
|
|
36
|
+
onclick={click}
|
|
37
|
+
{disabled}
|
|
38
|
+
class="m3-container m3-font-label-large {variant} icon-{iconType}"
|
|
39
|
+
class:square
|
|
40
|
+
{...extra}
|
|
41
|
+
>
|
|
42
|
+
<Layer morph />
|
|
43
|
+
{@render children()}
|
|
44
|
+
</button>
|
|
45
|
+
{:else if "href" in props}
|
|
46
|
+
{@const { variant, href, square = false, iconType = "none", children, ...extra } = props}
|
|
47
|
+
<a
|
|
48
|
+
{href}
|
|
49
|
+
class="m3-container m3-font-label-large {variant} icon-{iconType}"
|
|
50
|
+
class:square
|
|
51
|
+
{...extra}
|
|
52
|
+
>
|
|
53
|
+
<Layer morph />
|
|
54
|
+
{@render children()}
|
|
55
|
+
</a>
|
|
56
|
+
{:else}
|
|
57
|
+
{@const { variant, for: forItem, square = false, iconType = "none", children, ...extra } = props}
|
|
58
|
+
<label
|
|
59
|
+
for={forItem}
|
|
60
|
+
class="m3-container m3-font-label-large {variant} icon-{iconType}"
|
|
61
|
+
class:square
|
|
62
|
+
{...extra}
|
|
63
|
+
>
|
|
64
|
+
<Layer morph />
|
|
65
|
+
{@render children()}
|
|
66
|
+
</label>
|
|
67
|
+
{/if}
|
|
21
68
|
|
|
22
69
|
<style>
|
|
23
70
|
:root {
|
|
24
|
-
--m3-button-shape:
|
|
71
|
+
--m3-button-shape: 1.25rem;
|
|
25
72
|
}
|
|
26
73
|
|
|
27
74
|
.m3-container {
|
|
75
|
+
display: inline-flex;
|
|
28
76
|
border: none;
|
|
29
77
|
height: 2.5rem;
|
|
30
|
-
|
|
78
|
+
gap: 0.5rem;
|
|
79
|
+
padding: 0 1rem;
|
|
31
80
|
border-radius: var(--m3-button-shape);
|
|
32
81
|
transition: all 200ms;
|
|
33
82
|
|
|
34
83
|
align-items: center;
|
|
35
84
|
justify-content: center;
|
|
36
85
|
cursor: pointer;
|
|
86
|
+
user-select: none;
|
|
37
87
|
position: relative;
|
|
38
88
|
overflow: hidden;
|
|
89
|
+
-webkit-tap-highlight-color: transparent;
|
|
90
|
+
|
|
91
|
+
&:disabled,
|
|
92
|
+
&:is(:global(input:disabled) + label) {
|
|
93
|
+
background-color: rgb(var(--m3-scheme-on-surface) / 0.12);
|
|
94
|
+
color: rgb(var(--m3-scheme-on-surface) / 0.38);
|
|
95
|
+
cursor: auto;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
&.elevated:not(:disabled, :global(input:disabled) + label) {
|
|
99
|
+
background-color: rgb(var(--m3-scheme-surface-container-low));
|
|
100
|
+
color: rgb(var(--m3-scheme-primary));
|
|
101
|
+
box-shadow: var(--m3-util-elevation-1);
|
|
102
|
+
&:is(:global(input:checked) + .m3-container) {
|
|
103
|
+
background-color: rgb(var(--m3-scheme-primary));
|
|
104
|
+
color: rgb(var(--m3-scheme-on-primary));
|
|
105
|
+
}
|
|
106
|
+
@media (hover: hover) {
|
|
107
|
+
&:hover {
|
|
108
|
+
box-shadow: var(--m3-util-elevation-2);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
&.filled:not(:disabled, :global(input:disabled) + label) {
|
|
113
|
+
background-color: rgb(var(--m3-scheme-primary));
|
|
114
|
+
color: rgb(var(--m3-scheme-on-primary));
|
|
115
|
+
&:is(:global(input:not(:checked)) + label) {
|
|
116
|
+
background-color: rgb(var(--m3-scheme-surface-container));
|
|
117
|
+
color: rgb(var(--m3-scheme-on-surface-variant));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
&.tonal:not(:disabled, :global(input:disabled) + label) {
|
|
121
|
+
background-color: rgb(var(--m3-scheme-secondary-container));
|
|
122
|
+
color: rgb(var(--m3-scheme-on-secondary-container));
|
|
123
|
+
&:is(:global(input:checked) + label) {
|
|
124
|
+
background-color: rgb(var(--m3-scheme-secondary));
|
|
125
|
+
color: rgb(var(--m3-scheme-on-secondary));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
&.outlined {
|
|
129
|
+
outline: 1px solid rgb(var(--m3-scheme-outline));
|
|
130
|
+
outline-offset: -1px;
|
|
131
|
+
}
|
|
132
|
+
&.outlined:not(:disabled, :global(input:disabled) + label) {
|
|
133
|
+
outline-color: rgb(var(--m3-scheme-outline));
|
|
134
|
+
color: rgb(var(--m3-scheme-primary));
|
|
135
|
+
&:is(:global(input:checked) + label) {
|
|
136
|
+
outline-color: rgb(var(--m3-scheme-inverse-surface));
|
|
137
|
+
background-color: rgb(var(--m3-scheme-inverse-surface));
|
|
138
|
+
color: rgb(var(--m3-scheme-inverse-on-surface));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
&.outlined:is(:disabled, :global(input:disabled) + label) {
|
|
142
|
+
outline-color: rgb(var(--m3-scheme-on-surface) / 0.12);
|
|
143
|
+
background-color: transparent;
|
|
144
|
+
}
|
|
145
|
+
&.text:not(:disabled, :global(input:disabled) + label) {
|
|
146
|
+
background-color: transparent;
|
|
147
|
+
color: rgb(var(--m3-scheme-primary));
|
|
148
|
+
}
|
|
149
|
+
@media (hover: hover) {
|
|
150
|
+
&:is(.filled, .tonal):not(:disabled, label):hover {
|
|
151
|
+
box-shadow: var(--m3-util-elevation-1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
&.square:not(:global(input:checked) + label),
|
|
156
|
+
&:is(:global(input:checked) + label):not(.square) {
|
|
157
|
+
border-radius: var(--m3-util-rounding-medium);
|
|
158
|
+
}
|
|
159
|
+
&:global(.activated) {
|
|
160
|
+
border-radius: var(--m3-util-rounding-small) !important;
|
|
161
|
+
}
|
|
39
162
|
}
|
|
40
163
|
|
|
41
164
|
.m3-container > :global(*) {
|
|
42
165
|
flex-shrink: 0;
|
|
43
166
|
}
|
|
44
|
-
.icon-left {
|
|
45
|
-
padding-left: 1rem;
|
|
46
|
-
gap: 0.5rem;
|
|
47
|
-
}
|
|
48
167
|
.icon-left > :global(svg) {
|
|
49
168
|
width: 1.125rem;
|
|
50
169
|
height: 1.125rem;
|
|
@@ -58,61 +177,6 @@
|
|
|
58
177
|
height: 1.5rem;
|
|
59
178
|
}
|
|
60
179
|
|
|
61
|
-
.m3-container:disabled {
|
|
62
|
-
background-color: rgb(var(--m3-scheme-on-surface) / 0.12);
|
|
63
|
-
color: rgb(var(--m3-scheme-on-surface) / 0.38);
|
|
64
|
-
cursor: auto;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.m3-container:enabled.elevated {
|
|
68
|
-
background-color: rgb(var(--m3-scheme-surface-container-low));
|
|
69
|
-
color: rgb(var(--m3-scheme-primary));
|
|
70
|
-
box-shadow: var(--m3-util-elevation-1);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.m3-container:enabled.filled {
|
|
74
|
-
background-color: rgb(var(--m3-scheme-primary));
|
|
75
|
-
color: rgb(var(--m3-scheme-on-primary));
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.m3-container:enabled.tonal {
|
|
79
|
-
background-color: rgb(var(--m3-scheme-secondary-container));
|
|
80
|
-
color: rgb(var(--m3-scheme-on-secondary-container));
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.m3-container.outlined {
|
|
84
|
-
background-color: transparent;
|
|
85
|
-
border: 0.0625rem solid rgb(var(--m3-scheme-on-surface) / 0.12);
|
|
86
|
-
}
|
|
87
|
-
.m3-container:enabled.outlined {
|
|
88
|
-
border: 0.0625rem solid rgb(var(--m3-scheme-outline));
|
|
89
|
-
color: rgb(var(--m3-scheme-primary));
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.m3-container.text {
|
|
93
|
-
background-color: transparent;
|
|
94
|
-
padding: 0 0.75rem;
|
|
95
|
-
color: rgb(var(--m3-scheme-primary));
|
|
96
|
-
}
|
|
97
|
-
.m3-container.text.icon-left {
|
|
98
|
-
padding-right: 1rem;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.m3-container {
|
|
102
|
-
-webkit-tap-highlight-color: transparent;
|
|
103
|
-
}
|
|
104
|
-
@media (hover: hover) {
|
|
105
|
-
.m3-container:enabled.elevated:hover {
|
|
106
|
-
box-shadow: var(--m3-util-elevation-2);
|
|
107
|
-
}
|
|
108
|
-
.m3-container:enabled.filled:hover {
|
|
109
|
-
box-shadow: var(--m3-util-elevation-1);
|
|
110
|
-
}
|
|
111
|
-
.m3-container:enabled.tonal:hover {
|
|
112
|
-
box-shadow: var(--m3-util-elevation-1);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
180
|
.m3-container {
|
|
117
181
|
print-color-adjust: exact;
|
|
118
182
|
-webkit-print-color-adjust: exact;
|
|
@@ -120,7 +184,7 @@
|
|
|
120
184
|
@media screen and (forced-colors: active) {
|
|
121
185
|
.m3-container:is(.elevated, .filled, .tonal) {
|
|
122
186
|
background-color: transparent;
|
|
123
|
-
border:
|
|
187
|
+
border: 1px solid;
|
|
124
188
|
}
|
|
125
189
|
.m3-container:disabled {
|
|
126
190
|
opacity: 0.38;
|
|
@@ -1,36 +1,19 @@
|
|
|
1
|
-
import type { HTMLButtonAttributes } from "svelte/elements";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} & Exports;
|
|
6
|
-
(internal: unknown, props: Props & {
|
|
7
|
-
$$events?: Events;
|
|
8
|
-
$$slots?: Slots;
|
|
9
|
-
}): Exports & {
|
|
10
|
-
$set?: any;
|
|
11
|
-
$on?: any;
|
|
12
|
-
};
|
|
13
|
-
z_$$bindings?: Bindings;
|
|
14
|
-
}
|
|
15
|
-
type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
|
|
16
|
-
default: any;
|
|
17
|
-
} ? Props extends Record<string, never> ? any : {
|
|
18
|
-
children?: any;
|
|
19
|
-
} : {});
|
|
20
|
-
declare const Button: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
|
|
21
|
-
display?: string;
|
|
22
|
-
extraOptions?: HTMLButtonAttributes;
|
|
23
|
-
iconType?: "none" | "left" | "full";
|
|
24
|
-
type: "elevated" | "filled" | "tonal" | "outlined" | "text";
|
|
1
|
+
import type { HTMLButtonAttributes, HTMLAnchorAttributes, HTMLLabelAttributes } from "svelte/elements";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
type ActionProps = ({
|
|
4
|
+
click: () => void;
|
|
25
5
|
disabled?: boolean;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
} &
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
6
|
+
} & HTMLButtonAttributes) | ({
|
|
7
|
+
href: string;
|
|
8
|
+
} & HTMLAnchorAttributes) | ({
|
|
9
|
+
for: string;
|
|
10
|
+
} & HTMLLabelAttributes);
|
|
11
|
+
type Props = {
|
|
12
|
+
variant: "elevated" | "filled" | "tonal" | "outlined" | "text";
|
|
13
|
+
square?: boolean;
|
|
14
|
+
iconType?: "none" | "left" | "full";
|
|
15
|
+
children: Snippet;
|
|
16
|
+
} & ActionProps;
|
|
17
|
+
declare const Button: import("svelte").Component<Props, {}, "">;
|
|
18
|
+
type Button = ReturnType<typeof Button>;
|
|
36
19
|
export default Button;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
|
|
4
|
+
let { round = false, children }: { round?: boolean; children: Snippet } = $props();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="m3-container" class:round>
|
|
8
|
+
{@render children()}
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<style>
|
|
12
|
+
.m3-container {
|
|
13
|
+
display: grid;
|
|
14
|
+
grid-auto-flow: column;
|
|
15
|
+
grid-auto-columns: 1fr;
|
|
16
|
+
gap: 0.125rem;
|
|
17
|
+
border-radius: var(--m3-util-rounding-full);
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
|
|
20
|
+
> :global(input) {
|
|
21
|
+
position: absolute;
|
|
22
|
+
opacity: 0;
|
|
23
|
+
pointer-events: none;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
</style>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
round?: boolean;
|
|
4
|
+
children: Snippet;
|
|
5
|
+
};
|
|
6
|
+
declare const ConnectedButtons: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
7
|
+
type ConnectedButtons = ReturnType<typeof ConnectedButtons>;
|
|
8
|
+
export default ConnectedButtons;
|
|
@@ -1,27 +1,41 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import type { HTMLButtonAttributes } from "svelte/elements";
|
|
3
|
-
import Icon from "../misc/_icon.svelte";
|
|
4
3
|
import type { IconifyIcon } from "@iconify/types";
|
|
4
|
+
import Icon from "../misc/_icon.svelte";
|
|
5
5
|
import Layer from "../misc/Layer.svelte";
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
type ContentProps =
|
|
8
|
+
| {
|
|
9
|
+
size?: "normal";
|
|
10
|
+
icon?: IconifyIcon;
|
|
11
|
+
text: string;
|
|
12
|
+
}
|
|
13
|
+
| {
|
|
14
|
+
size?: "small" | "normal" | "large";
|
|
15
|
+
icon: IconifyIcon;
|
|
16
|
+
text?: undefined;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
color = "primary",
|
|
21
|
+
elevation = "normal",
|
|
22
|
+
click,
|
|
23
|
+
size = "normal",
|
|
24
|
+
icon,
|
|
25
|
+
text,
|
|
26
|
+
...extra
|
|
27
|
+
}: {
|
|
28
|
+
color?: "primary" | "surface" | "secondary" | "tertiary";
|
|
29
|
+
elevation?: "normal" | "lowered" | "none";
|
|
30
|
+
click: () => void;
|
|
31
|
+
} & ContentProps &
|
|
32
|
+
HTMLButtonAttributes = $props();
|
|
18
33
|
</script>
|
|
19
34
|
|
|
20
35
|
<button
|
|
21
|
-
|
|
36
|
+
onclick={click}
|
|
22
37
|
class="m3-container m3-font-label-large color-{color} size-{size} elevation-{elevation}"
|
|
23
|
-
|
|
24
|
-
{...extraOptions}
|
|
38
|
+
{...extra}
|
|
25
39
|
>
|
|
26
40
|
<Layer />
|
|
27
41
|
{#if icon}
|
|
@@ -39,6 +53,7 @@
|
|
|
39
53
|
--m3-fab-large-shape: var(--m3-util-rounding-extra-large);
|
|
40
54
|
}
|
|
41
55
|
button {
|
|
56
|
+
display: inline-flex;
|
|
42
57
|
border: none;
|
|
43
58
|
position: relative;
|
|
44
59
|
overflow: hidden;
|
|
@@ -1,30 +1,19 @@
|
|
|
1
1
|
import type { HTMLButtonAttributes } from "svelte/elements";
|
|
2
2
|
import type { IconifyIcon } from "@iconify/types";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
$$events?: Events;
|
|
9
|
-
$$slots?: Slots;
|
|
10
|
-
}): Exports & {
|
|
11
|
-
$set?: any;
|
|
12
|
-
$on?: any;
|
|
13
|
-
};
|
|
14
|
-
z_$$bindings?: Bindings;
|
|
15
|
-
}
|
|
16
|
-
declare const Fab: $$__sveltets_2_IsomorphicComponent<{
|
|
17
|
-
display?: string;
|
|
18
|
-
extraOptions?: HTMLButtonAttributes;
|
|
19
|
-
color?: "primary" | "surface" | "secondary" | "tertiary";
|
|
3
|
+
type ContentProps = {
|
|
4
|
+
size?: "normal";
|
|
5
|
+
icon?: IconifyIcon;
|
|
6
|
+
text: string;
|
|
7
|
+
} | {
|
|
20
8
|
size?: "small" | "normal" | "large";
|
|
9
|
+
icon: IconifyIcon;
|
|
10
|
+
text?: undefined;
|
|
11
|
+
};
|
|
12
|
+
type $$ComponentProps = {
|
|
13
|
+
color?: "primary" | "surface" | "secondary" | "tertiary";
|
|
21
14
|
elevation?: "normal" | "lowered" | "none";
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
} & {
|
|
27
|
-
[evt: string]: CustomEvent<any>;
|
|
28
|
-
}, {}, {}, string>;
|
|
29
|
-
type Fab = InstanceType<typeof Fab>;
|
|
15
|
+
click: () => void;
|
|
16
|
+
} & ContentProps & HTMLButtonAttributes;
|
|
17
|
+
declare const Fab: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
18
|
+
type Fab = ReturnType<typeof Fab>;
|
|
30
19
|
export default Fab;
|
|
@@ -1,31 +1,32 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
3
|
import type { TransitionConfig } from "svelte/transition";
|
|
4
4
|
import { easeEmphasizedAccel, easeEmphasizedDecel } from "../misc/easing";
|
|
5
5
|
import { outroClass } from "../misc/animation";
|
|
6
6
|
|
|
7
|
-
let
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
let { children, close }: { children: Snippet; close: (reason: "esc" | "click" | "low") => void } =
|
|
8
|
+
$props();
|
|
9
|
+
|
|
10
|
+
let height = $state(480);
|
|
11
|
+
let container: HTMLDivElement | undefined = $state();
|
|
12
|
+
let isDragging = $state(false),
|
|
13
|
+
startY = $state(0);
|
|
12
14
|
|
|
13
|
-
const dispatch = createEventDispatcher();
|
|
14
15
|
const open = (node: HTMLDialogElement) => node.showModal();
|
|
15
16
|
const heightAnim = (
|
|
16
17
|
node: HTMLDialogElement,
|
|
17
|
-
options:
|
|
18
|
+
options: { duration: number; easing: typeof easeEmphasizedDecel },
|
|
18
19
|
): TransitionConfig => {
|
|
19
20
|
if (node.clientHeight < height) height = node.clientHeight;
|
|
20
21
|
return {
|
|
21
|
-
duration:
|
|
22
|
-
easing:
|
|
23
|
-
...options,
|
|
22
|
+
duration: options.duration,
|
|
23
|
+
easing: options.easing,
|
|
24
24
|
css: (t) => `max-height: ${t * height}px`,
|
|
25
25
|
};
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
const moveWheel = (e: WheelEvent) => {
|
|
29
|
+
e.preventDefault();
|
|
29
30
|
height += e.deltaY;
|
|
30
31
|
if (container && container.clientHeight < height) height = container.clientHeight;
|
|
31
32
|
};
|
|
@@ -36,50 +37,55 @@
|
|
|
36
37
|
startY = e.clientY;
|
|
37
38
|
}
|
|
38
39
|
};
|
|
40
|
+
$effect(() => {
|
|
41
|
+
if (height < 48) close("low");
|
|
42
|
+
});
|
|
39
43
|
</script>
|
|
40
44
|
|
|
41
45
|
<svelte:window
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
onmousemove={moveMouse}
|
|
47
|
+
onmouseup={() => (isDragging = false)}
|
|
48
|
+
ontouchmove={(e) => moveMouse(e.touches[0])}
|
|
49
|
+
ontouchend={() => (isDragging = false)}
|
|
46
50
|
/>
|
|
47
51
|
|
|
48
|
-
<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
|
|
49
52
|
<dialog
|
|
50
53
|
class="m3-container"
|
|
51
|
-
style
|
|
54
|
+
style:max-height="{height}px"
|
|
52
55
|
use:open
|
|
53
56
|
use:outroClass
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
oncancel={(e) => {
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
close("esc");
|
|
56
60
|
}}
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
onmousedown={(e) => {
|
|
62
|
+
if (e.target != e.currentTarget) return;
|
|
63
|
+
close("click");
|
|
59
64
|
}}
|
|
60
|
-
|
|
61
|
-
in:heightAnim
|
|
65
|
+
onwheel={moveWheel}
|
|
66
|
+
in:heightAnim={{ easing: easeEmphasizedDecel, duration: 400 }}
|
|
62
67
|
out:heightAnim={{ easing: easeEmphasizedAccel, duration: 300 }}
|
|
63
68
|
>
|
|
64
69
|
<div
|
|
65
70
|
class="container"
|
|
66
71
|
bind:this={container}
|
|
67
|
-
|
|
72
|
+
ontouchstart={(e) => {
|
|
68
73
|
isDragging = true;
|
|
69
74
|
startY = e.touches[0].clientY;
|
|
70
75
|
}}
|
|
71
76
|
>
|
|
72
|
-
<!-- svelte-ignore
|
|
77
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
73
78
|
<div
|
|
74
79
|
class="handle-container"
|
|
75
|
-
|
|
80
|
+
onmousedown={(e) => {
|
|
81
|
+
e.preventDefault();
|
|
76
82
|
isDragging = true;
|
|
77
83
|
startY = e.clientY;
|
|
78
84
|
}}
|
|
79
85
|
>
|
|
80
86
|
<div class="handle"></div>
|
|
81
87
|
</div>
|
|
82
|
-
|
|
88
|
+
{@render children()}
|
|
83
89
|
</div>
|
|
84
90
|
</dialog>
|
|
85
91
|
|
|
@@ -1,22 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}): Exports & {
|
|
9
|
-
$set?: any;
|
|
10
|
-
$on?: any;
|
|
11
|
-
};
|
|
12
|
-
z_$$bindings?: Bindings;
|
|
13
|
-
}
|
|
14
|
-
declare const BottomSheet: $$__sveltets_2_IsomorphicComponent<any, {
|
|
15
|
-
close: CustomEvent<any>;
|
|
16
|
-
} & {
|
|
17
|
-
[evt: string]: CustomEvent<any>;
|
|
18
|
-
}, {
|
|
19
|
-
default: {};
|
|
20
|
-
}, {}, string>;
|
|
21
|
-
type BottomSheet = InstanceType<typeof BottomSheet>;
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
children: Snippet;
|
|
4
|
+
close: (reason: "esc" | "click" | "low") => void;
|
|
5
|
+
};
|
|
6
|
+
declare const BottomSheet: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
7
|
+
type BottomSheet = ReturnType<typeof BottomSheet>;
|
|
22
8
|
export default BottomSheet;
|