fix: transform input defaults from spread

pull/16481/head
daimond113 1 month ago
parent 68372460e9
commit ebd01fa8f6
No known key found for this signature in database

@ -11,6 +11,7 @@ import {
import { regex_starts_with_newline } from '../../../../patterns.js';
import * as b from '#compiler/builders';
import {
ELEMENT_IS_INPUT,
ELEMENT_IS_NAMESPACED,
ELEMENT_PRESERVE_ATTRIBUTE_CASE
} from '../../../../../../constants.js';
@ -401,6 +402,8 @@ function build_element_spread_attributes(
flags |= ELEMENT_IS_NAMESPACED | ELEMENT_PRESERVE_ATTRIBUTE_CASE;
} else if (is_custom_element_node(element)) {
flags |= ELEMENT_PRESERVE_ATTRIBUTE_CASE;
} else if (element.type === 'RegularElement' && element.name === 'input') {
flags |= ELEMENT_IS_INPUT;
}
const object = build_spread_object(element, attributes, context);

@ -28,6 +28,7 @@ export const HYDRATION_ERROR = {};
export const ELEMENT_IS_NAMESPACED = 1;
export const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;
export const ELEMENT_IS_INPUT = 1 << 2;
export const UNINITIALIZED = Symbol();

@ -8,7 +8,8 @@ import { subscribe_to_store } from '../../store/utils.js';
import {
UNINITIALIZED,
ELEMENT_PRESERVE_ATTRIBUTE_CASE,
ELEMENT_IS_NAMESPACED
ELEMENT_IS_NAMESPACED,
ELEMENT_IS_INPUT
} from '../../constants.js';
import { escape_html } from '../../escaping.js';
import { DEV } from 'esm-env';
@ -187,6 +188,7 @@ export function spread_attributes(attrs, css_hash, classes, styles, flags = 0) {
const is_html = (flags & ELEMENT_IS_NAMESPACED) === 0;
const lowercase = (flags & ELEMENT_PRESERVE_ATTRIBUTE_CASE) === 0;
const ignore_defaults = (flags & ELEMENT_IS_INPUT) === 0;
for (name in attrs) {
// omit functions, internal svelte properties and invalid attribute names
@ -200,6 +202,14 @@ export function spread_attributes(attrs, css_hash, classes, styles, flags = 0) {
name = name.toLowerCase();
}
if (!ignore_defaults) {
if (name === 'defaultvalue') {
name = 'value';
} else if (name === 'defaultchecked') {
name = 'checked';
}
}
attr_str += attr(name, value, is_html && is_boolean_attribute(name));
}

@ -0,0 +1,9 @@
import { test } from '../../test';
export default test({
mode: ['server'],
html: `
<input value="a">
<input type="checkbox" checked>
`
});

@ -0,0 +1,7 @@
<script>
let text = { defaultValue: "a" };
let checkbox = { defaultChecked: true }
</script>
<input {...text} />
<input type="checkbox" {...checkbox} />
Loading…
Cancel
Save