Skip to content

Commit a82d923

Browse files
committed
feat: migrate components in linear progress to runes
1 parent a5ff2a0 commit a82d923

File tree

7 files changed

+82
-54
lines changed

7 files changed

+82
-54
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ Svelte 5 Runes mode is being migrated to slowly. This is the todo list of compon
191191
- [x] Paper
192192
- Progress Indicators
193193
- [x] Circular Progress
194-
- [ ] Linear Progress
194+
- [x] Linear Progress
195195
- [ ] Snackbar
196196
- [ ] Kitchen
197197
- Tabs

packages/circular-progress/src/CircularProgress.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@
126126
*/
127127
class?: string;
128128
/**
129-
* Whether to show indeterminate progress.
129+
* Whether to show indeterminate progress (a throbber).
130130
*/
131131
indeterminate?: boolean;
132132
/**

packages/linear-progress/src/LinearProgress.svelte

Lines changed: 78 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<svelte:options runes={false} />
1+
<svelte:options runes />
22

33
<div
44
bind:this={element}
@@ -20,12 +20,12 @@
2020
aria-valuemax={1}
2121
aria-valuenow={indeterminate ? undefined : progress}
2222
{...internalAttrs}
23-
{...$$restProps}
23+
{...restProps}
2424
ontransitionend={(e) => {
2525
if (instance) {
2626
instance.handleTransitionEnd();
2727
}
28-
$$restProps.ontransitionend?.(e);
28+
restProps.ontransitionend?.(e);
2929
}}
3030
>
3131
<div class="mdc-linear-progress__buffer">
@@ -60,65 +60,101 @@
6060
import { classMap, useActions } from '@smui/common/internal';
6161
6262
type OwnProps = {
63+
/**
64+
* An array of Action or [Action, ActionProps] to be applied to the element.
65+
*/
6366
use?: ActionArray;
67+
/**
68+
* A space separated list of CSS classes.
69+
*/
6470
class?: string;
71+
/**
72+
* A list of CSS styles.
73+
*/
6574
style?: string;
75+
/**
76+
* Whether to show indeterminate progress (a throbber).
77+
*/
6678
indeterminate?: boolean;
79+
/**
80+
* Whether the progress indicator is closed.
81+
*
82+
* Closed progress indicators animate out, then still take up space in the
83+
* UI.
84+
*/
6785
closed?: boolean;
86+
/**
87+
* The current progress (between 0 and 1).
88+
*/
6889
progress?: number;
90+
/**
91+
* An optional buffer section of the progress bar.
92+
*
93+
* This can be used to show when, for example, a video has a current
94+
* position and a buffered position.
95+
*/
6996
buffer?: number | undefined;
7097
};
71-
type $$Props = OwnProps & SmuiAttrs<'div', keyof OwnProps>;
72-
73-
// Remember to update $$Props if you add/remove/rename props.
74-
export let use: ActionArray = [];
75-
let className = '';
76-
export { className as class };
77-
export let style = '';
78-
export let indeterminate = false;
79-
export let closed = false;
80-
export let progress = 0;
81-
export let buffer: number | undefined = undefined;
98+
let {
99+
use = [],
100+
class: className = '',
101+
style = '',
102+
indeterminate = false,
103+
closed = false,
104+
progress = 0,
105+
buffer = undefined,
106+
...restProps
107+
}: OwnProps & SmuiAttrs<'div', keyof OwnProps> = $props();
82108
83109
let element: HTMLDivElement;
84-
let instance: MDCLinearProgressFoundation;
85-
let internalClasses: { [k: string]: boolean } = {};
86-
let internalAttrs: { [k: string]: string | undefined } = {};
87-
let internalStyles: { [k: string]: string } = {};
88-
let bufferBarStyles: { [k: string]: string } = {};
89-
let primaryBarStyles: { [k: string]: string } = {};
110+
let instance: MDCLinearProgressFoundation | undefined = $state();
111+
let internalClasses: { [k: string]: boolean } = $state({});
112+
let internalAttrs: { [k: string]: string | undefined } = $state({});
113+
let internalStyles: { [k: string]: string } = $state({});
114+
let bufferBarStyles: { [k: string]: string } = $state({});
115+
let primaryBarStyles: { [k: string]: string } = $state({});
90116
let context = getContext<string | undefined>('SMUI:linear-progress:context');
91117
let closedStore = getContext<Writable<boolean> | undefined>(
92118
'SMUI:linear-progress:closed',
93119
);
94120
95-
$: if (closedStore) {
96-
$closedStore = closed;
97-
}
121+
$effect(() => {
122+
if (closedStore) {
123+
$closedStore = closed;
124+
}
125+
});
98126
99-
$: if (instance && instance.isDeterminate() !== !indeterminate) {
100-
instance.setDeterminate(!indeterminate);
101-
}
127+
$effect(() => {
128+
if (instance && instance.isDeterminate() !== !indeterminate) {
129+
instance.setDeterminate(!indeterminate);
130+
}
131+
});
102132
103-
$: if (instance && instance.getProgress() !== progress) {
104-
instance.setProgress(progress);
105-
}
133+
$effect(() => {
134+
if (instance && instance.getProgress() !== progress) {
135+
instance.setProgress(progress);
136+
}
137+
});
106138
107-
$: if (instance) {
108-
if (buffer == null) {
109-
instance.setBuffer(1);
110-
} else {
111-
instance.setBuffer(buffer);
139+
$effect(() => {
140+
if (instance) {
141+
if (buffer == null) {
142+
instance.setBuffer(1);
143+
} else {
144+
instance.setBuffer(buffer);
145+
}
112146
}
113-
}
147+
});
114148
115-
$: if (instance) {
116-
if (closed) {
117-
instance.close();
118-
} else {
119-
instance.open();
149+
$effect(() => {
150+
if (instance) {
151+
if (closed) {
152+
instance.close();
153+
} else {
154+
instance.open();
155+
}
120156
}
121-
}
157+
});
122158
123159
onMount(() => {
124160
instance = new MDCLinearProgressFoundation({
@@ -151,7 +187,7 @@
151187
instance.init();
152188
153189
return () => {
154-
instance.destroy();
190+
instance?.destroy();
155191
};
156192
});
157193

packages/site/src/routes/demo/linear-progress/_Buffered.svelte

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
<svelte:options runes={false} />
2-
31
<LinearProgress progress={0.5} buffer={0.75} />
42

53
<script lang="ts">

packages/site/src/routes/demo/linear-progress/_Colored.svelte

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
<svelte:options runes={false} />
2-
31
<LinearProgress
42
class="my-colored-linear-progress"
53
progress={0.5}

packages/site/src/routes/demo/linear-progress/_Indeterminate.svelte

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
<svelte:options runes={false} />
2-
31
<LinearProgress indeterminate />
42

53
<script lang="ts">

packages/site/src/routes/demo/linear-progress/_Simple.svelte

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
<svelte:options runes={false} />
2-
31
<LinearProgress {progress} {closed} />
42

53
<br />
@@ -20,8 +18,8 @@
2018
import FormField from '@smui/form-field';
2119
import Button from '@smui/button';
2220
23-
let progress = 0;
24-
let closed = false;
21+
let progress = $state(0);
22+
let closed = $state(false);
2523
let timer: NodeJS.Timer;
2624
2725
onMount(reset);

0 commit comments

Comments
 (0)