Skip to content

Commit 286398b

Browse files
committed
bind:files
1 parent 10a908e commit 286398b

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2841,6 +2841,10 @@ export const template_visitors = {
28412841
break;
28422842
}
28432843

2844+
case 'files':
2845+
call_expr = b.call(`$.bind_files`, state.node, getter, setter);
2846+
break;
2847+
28442848
case 'this':
28452849
call_expr = serialize_bind_this(node.expression, context, state.node);
28462850
break;

packages/svelte/src/compiler/phases/bindings.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,6 @@ export const binding_properties = {
182182
valid_elements: ['input', 'textarea', 'select']
183183
},
184184
files: {
185-
event: 'change',
186-
type: 'set',
187185
valid_elements: ['input'],
188186
omit_in_ssr: true
189187
}

packages/svelte/src/internal/client/dom/elements/bindings/input.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,17 @@ function is_numberlike_input(input) {
175175
function to_number(value) {
176176
return value === '' ? null : +value;
177177
}
178+
179+
/**
180+
* @param {HTMLInputElement} input
181+
* @param {() => FileList | null} get_value
182+
* @param {(value: FileList | null) => void} update
183+
*/
184+
export function bind_files(input, get_value, update) {
185+
listen_to_event_and_reset_event(input, 'change', () => {
186+
update(input.files);
187+
});
188+
render_effect(() => {
189+
input.files = get_value();
190+
});
191+
}

0 commit comments

Comments
 (0)