solid-js 1.2.3 → 1.2.4

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/dev.cjs CHANGED
@@ -1207,6 +1207,9 @@ function splitProps(props, ...keys) {
1207
1207
  Object.defineProperty(clone, key, descriptors[key] ? descriptors[key] : {
1208
1208
  get() {
1209
1209
  return props[key];
1210
+ },
1211
+ set() {
1212
+ return true;
1210
1213
  }
1211
1214
  });
1212
1215
  }
package/dist/dev.js CHANGED
@@ -1203,6 +1203,9 @@ function splitProps(props, ...keys) {
1203
1203
  Object.defineProperty(clone, key, descriptors[key] ? descriptors[key] : {
1204
1204
  get() {
1205
1205
  return props[key];
1206
+ },
1207
+ set() {
1208
+ return true;
1206
1209
  }
1207
1210
  });
1208
1211
  }
package/dist/solid.cjs CHANGED
@@ -1131,6 +1131,9 @@ function splitProps(props, ...keys) {
1131
1131
  Object.defineProperty(clone, key, descriptors[key] ? descriptors[key] : {
1132
1132
  get() {
1133
1133
  return props[key];
1134
+ },
1135
+ set() {
1136
+ return true;
1134
1137
  }
1135
1138
  });
1136
1139
  }
package/dist/solid.js CHANGED
@@ -1127,6 +1127,9 @@ function splitProps(props, ...keys) {
1127
1127
  Object.defineProperty(clone, key, descriptors[key] ? descriptors[key] : {
1128
1128
  get() {
1129
1129
  return props[key];
1130
+ },
1131
+ set() {
1132
+ return true;
1130
1133
  }
1131
1134
  });
1132
1135
  }
@@ -358,7 +358,8 @@ function createHTML(r, {
358
358
  childOptions = Object.assign({}, options, {
359
359
  first: true,
360
360
  decl: [],
361
- exprs: []
361
+ exprs: [],
362
+ parent: false
362
363
  });
363
364
  parseNode(children, childOptions);
364
365
  props.push(`children: () => { ${childOptions.exprs.join(";\n")}}`);
@@ -399,8 +400,8 @@ function createHTML(r, {
399
400
  decl: [],
400
401
  exprs: []
401
402
  });
402
- parseNode(child, childOptions);
403
403
  options.templateNodes.push([child]);
404
+ parseNode(child, childOptions);
404
405
  parts.push(`function() { ${childOptions.decl.join(",\n") + ";\n" + childOptions.exprs.join(";\n") + `;\nreturn _$el${id};\n`}}()`);
405
406
  options.counter = childOptions.counter;
406
407
  options.templateId = childOptions.templateId;
package/html/dist/html.js CHANGED
@@ -356,7 +356,8 @@ function createHTML(r, {
356
356
  childOptions = Object.assign({}, options, {
357
357
  first: true,
358
358
  decl: [],
359
- exprs: []
359
+ exprs: [],
360
+ parent: false
360
361
  });
361
362
  parseNode(children, childOptions);
362
363
  props.push(`children: () => { ${childOptions.exprs.join(";\n")}}`);
@@ -397,8 +398,8 @@ function createHTML(r, {
397
398
  decl: [],
398
399
  exprs: []
399
400
  });
400
- parseNode(child, childOptions);
401
401
  options.templateNodes.push([child]);
402
+ parseNode(child, childOptions);
402
403
  parts.push(`function() { ${childOptions.decl.join(",\n") + ";\n" + childOptions.exprs.join(";\n") + `;\nreturn _$el${id};\n`}}()`);
403
404
  options.counter = childOptions.counter;
404
405
  options.templateId = childOptions.templateId;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "solid-js",
3
3
  "description": "A declarative JavaScript library for building user interfaces.",
4
- "version": "1.2.3",
4
+ "version": "1.2.4",
5
5
  "author": "Ryan Carniato",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/solidjs/solid#readme",
@@ -132,5 +132,5 @@
132
132
  "compiler",
133
133
  "performance"
134
134
  ],
135
- "gitHead": "151eee8891045ff05229d6e38a71742c597102ba"
135
+ "gitHead": "2866e83def4f3a02c305277fa8f589e355ab8952"
136
136
  }
@@ -31,7 +31,7 @@ function wrap$1(value, name) {
31
31
  return p;
32
32
  }
33
33
  function isWrappable(obj) {
34
- return obj != null && typeof obj === "object" && (!obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
34
+ return obj != null && typeof obj === "object" && (obj[solidJs.$PROXY] || !obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
35
35
  }
36
36
  function unwrap(item, set = new Set()) {
37
37
  let result, unwrapped, v, prop;
package/store/dist/dev.js CHANGED
@@ -1,4 +1,4 @@
1
- import { DEV, $PROXY, getListener, batch, createSignal } from 'solid-js';
1
+ import { $PROXY, DEV, getListener, batch, createSignal } from 'solid-js';
2
2
 
3
3
  const $RAW = Symbol("store-raw"),
4
4
  $NODE = Symbol("store-node"),
@@ -27,7 +27,7 @@ function wrap$1(value, name) {
27
27
  return p;
28
28
  }
29
29
  function isWrappable(obj) {
30
- return obj != null && typeof obj === "object" && (!obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
30
+ return obj != null && typeof obj === "object" && (obj[$PROXY] || !obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
31
31
  }
32
32
  function unwrap(item, set = new Set()) {
33
33
  let result, unwrapped, v, prop;
@@ -28,7 +28,7 @@ function wrap$1(value, name) {
28
28
  return p;
29
29
  }
30
30
  function isWrappable(obj) {
31
- return obj != null && typeof obj === "object" && (!obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
31
+ return obj != null && typeof obj === "object" && (obj[solidJs.$PROXY] || !obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
32
32
  }
33
33
  function unwrap(item, set = new Set()) {
34
34
  let result, unwrapped, v, prop;
@@ -24,7 +24,7 @@ function wrap$1(value, name) {
24
24
  return p;
25
25
  }
26
26
  function isWrappable(obj) {
27
- return obj != null && typeof obj === "object" && (!obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
27
+ return obj != null && typeof obj === "object" && (obj[$PROXY] || !obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
28
28
  }
29
29
  function unwrap(item, set = new Set()) {
30
30
  let result, unwrapped, v, prop;
@@ -33,7 +33,7 @@ export declare type Store<T> = {
33
33
  } & {
34
34
  [$RAW]?: T;
35
35
  } & AddSymbolToPrimitive<T> & AddSymbolIterator<T> & AddSymbolToStringTag<T> & AddCallable<T>;
36
- export declare function isWrappable(obj: any): boolean;
36
+ export declare function isWrappable(obj: any): any;
37
37
  export declare function unwrap<T extends StoreNode>(item: any, set?: Set<unknown>): T;
38
38
  export declare function getDataNodes(target: StoreNode): any;
39
39
  export declare function proxyDescriptor(target: StoreNode, property: string | number | symbol): PropertyDescriptor | undefined;
package/types/jsx.d.ts CHANGED
@@ -92,6 +92,7 @@ export namespace JSX {
92
92
  onFocusIn?: EventHandlerUnion<T, FocusEvent>;
93
93
  onBlur?: EventHandlerUnion<T, FocusEvent>;
94
94
  onChange?: EventHandlerUnion<T, Event>;
95
+ onInvalid?: EventHandlerUnion<T, Event>;
95
96
  onInput?: EventHandlerUnion<T, InputEvent>;
96
97
  onBeforeInput?: EventHandlerUnion<T, InputEvent>;
97
98
  onReset?: EventHandlerUnion<T, Event>;
@@ -180,6 +181,7 @@ export namespace JSX {
180
181
  onfocusin?: EventHandlerUnion<T, FocusEvent>;
181
182
  onblur?: EventHandlerUnion<T, FocusEvent>;
182
183
  onchange?: EventHandlerUnion<T, Event>;
184
+ oninvalid?: EventHandlerUnion<T, Event>;
183
185
  oninput?: EventHandlerUnion<T, InputEvent>;
184
186
  onbeforeinput?: EventHandlerUnion<T, InputEvent>;
185
187
  onreset?: EventHandlerUnion<T, Event>;
package/web/dist/dev.cjs CHANGED
@@ -203,35 +203,19 @@ function insert(parent, accessor, marker, initial) {
203
203
  solidJs.createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);
204
204
  }
205
205
  function assign(node, props, isSVG, skipChildren, prevProps = {}) {
206
- let isCE, isProp, isChildProp;
206
+ for (const prop in prevProps) {
207
+ if (!(prop in props)) {
208
+ if (prop === "children") continue;
209
+ assignProp(node, prop, null, prevProps[prop], isSVG);
210
+ }
211
+ }
207
212
  for (const prop in props) {
208
213
  if (prop === "children") {
209
214
  if (!skipChildren) insertExpression(node, props.children);
210
215
  continue;
211
216
  }
212
217
  const value = props[prop];
213
- if (value === prevProps[prop]) continue;
214
- if (prop === "style") {
215
- style(node, value, prevProps[prop]);
216
- } else if (prop === "classList") {
217
- classList(node, value, prevProps[prop]);
218
- } else if (prop === "ref") {
219
- value(node);
220
- } else if (prop.slice(0, 3) === "on:") {
221
- node.addEventListener(prop.slice(3), value);
222
- } else if (prop.slice(0, 10) === "oncapture:") {
223
- node.addEventListener(prop.slice(10), value, true);
224
- } else if (prop.slice(0, 2) === "on") {
225
- const name = prop.slice(2).toLowerCase();
226
- const delegate = DelegatedEvents.has(name);
227
- addEventListener(node, name, value, delegate);
228
- delegate && delegateEvents([name]);
229
- } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
230
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
231
- } else {
232
- const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
233
- if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
234
- }
218
+ assignProp(node, prop, value, prevProps[prop], isSVG);
235
219
  prevProps[prop] = value;
236
220
  }
237
221
  }
@@ -314,6 +298,29 @@ function toggleClassKey(node, key, value) {
314
298
  const classNames = key.trim().split(/\s+/);
315
299
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
316
300
  }
301
+ function assignProp(node, prop, value, prev, isSVG) {
302
+ let isCE, isProp, isChildProp;
303
+ if (prop === "style") return style(node, value, prev);
304
+ if (prop === "classList") return classList(node, value, prev);
305
+ if (value === prev) return;
306
+ if (prop === "ref") {
307
+ value(node);
308
+ } else if (prop.slice(0, 3) === "on:") {
309
+ node.addEventListener(prop.slice(3), value);
310
+ } else if (prop.slice(0, 10) === "oncapture:") {
311
+ node.addEventListener(prop.slice(10), value, true);
312
+ } else if (prop.slice(0, 2) === "on") {
313
+ const name = prop.slice(2).toLowerCase();
314
+ const delegate = DelegatedEvents.has(name);
315
+ addEventListener(node, name, value, delegate);
316
+ delegate && delegateEvents([name]);
317
+ } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
318
+ if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
319
+ } else {
320
+ const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
321
+ if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
322
+ }
323
+ }
317
324
  function eventHandler(e) {
318
325
  const key = `$$${e.type}`;
319
326
  let node = e.composedPath && e.composedPath()[0] || e.target;
package/web/dist/dev.js CHANGED
@@ -200,35 +200,19 @@ function insert(parent, accessor, marker, initial) {
200
200
  createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);
201
201
  }
202
202
  function assign(node, props, isSVG, skipChildren, prevProps = {}) {
203
- let isCE, isProp, isChildProp;
203
+ for (const prop in prevProps) {
204
+ if (!(prop in props)) {
205
+ if (prop === "children") continue;
206
+ assignProp(node, prop, null, prevProps[prop], isSVG);
207
+ }
208
+ }
204
209
  for (const prop in props) {
205
210
  if (prop === "children") {
206
211
  if (!skipChildren) insertExpression(node, props.children);
207
212
  continue;
208
213
  }
209
214
  const value = props[prop];
210
- if (value === prevProps[prop]) continue;
211
- if (prop === "style") {
212
- style(node, value, prevProps[prop]);
213
- } else if (prop === "classList") {
214
- classList(node, value, prevProps[prop]);
215
- } else if (prop === "ref") {
216
- value(node);
217
- } else if (prop.slice(0, 3) === "on:") {
218
- node.addEventListener(prop.slice(3), value);
219
- } else if (prop.slice(0, 10) === "oncapture:") {
220
- node.addEventListener(prop.slice(10), value, true);
221
- } else if (prop.slice(0, 2) === "on") {
222
- const name = prop.slice(2).toLowerCase();
223
- const delegate = DelegatedEvents.has(name);
224
- addEventListener(node, name, value, delegate);
225
- delegate && delegateEvents([name]);
226
- } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
227
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
228
- } else {
229
- const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
230
- if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
231
- }
215
+ assignProp(node, prop, value, prevProps[prop], isSVG);
232
216
  prevProps[prop] = value;
233
217
  }
234
218
  }
@@ -311,6 +295,29 @@ function toggleClassKey(node, key, value) {
311
295
  const classNames = key.trim().split(/\s+/);
312
296
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
313
297
  }
298
+ function assignProp(node, prop, value, prev, isSVG) {
299
+ let isCE, isProp, isChildProp;
300
+ if (prop === "style") return style(node, value, prev);
301
+ if (prop === "classList") return classList(node, value, prev);
302
+ if (value === prev) return;
303
+ if (prop === "ref") {
304
+ value(node);
305
+ } else if (prop.slice(0, 3) === "on:") {
306
+ node.addEventListener(prop.slice(3), value);
307
+ } else if (prop.slice(0, 10) === "oncapture:") {
308
+ node.addEventListener(prop.slice(10), value, true);
309
+ } else if (prop.slice(0, 2) === "on") {
310
+ const name = prop.slice(2).toLowerCase();
311
+ const delegate = DelegatedEvents.has(name);
312
+ addEventListener(node, name, value, delegate);
313
+ delegate && delegateEvents([name]);
314
+ } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
315
+ if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
316
+ } else {
317
+ const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
318
+ if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
319
+ }
320
+ }
314
321
  function eventHandler(e) {
315
322
  const key = `$$${e.type}`;
316
323
  let node = e.composedPath && e.composedPath()[0] || e.target;
@@ -449,6 +449,8 @@ function ssrSpread(props, isSVG, skipChildren) {
449
449
  result += `class="${ssrClassList(value)}"`;
450
450
  } else if (BooleanAttributes.has(prop)) {
451
451
  if (value) result += prop;else continue;
452
+ } else if (prop === "ref" || prop.slice(0, 2) === "on") {
453
+ continue;
452
454
  } else {
453
455
  result += `${Aliases[prop] || prop}="${escape(value, true)}"`;
454
456
  }
@@ -525,7 +527,7 @@ function generateHydrationScript() {
525
527
  resources,
526
528
  eventNames = ["click", "input"]
527
529
  } = solidJs.sharedConfig.context;
528
- let s = `<script${nonce ? ` nonce="${nonce}"` : ""}>(()=>{_$HYDRATION={events:[],completed:new WeakSet};const t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")&&e||t(e.host&&e.host instanceof Node?e.host:e.parentNode)),e=e=>{let o=e.composedPath&&e.composedPath()[0]||e.target,s=t(o);s&&!_$HYDRATION.completed.has(s)&&_$HYDRATION.events.push([s,e])};["${eventNames.join('","')}"].forEach(t=>document.addEventListener(t,e))})();`;
530
+ let s = `<script${nonce ? ` nonce="${nonce}"` : ""}>(()=>{_$HYDRATION={events:[],completed:new WeakSet};const t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),e=e=>{let o=e.composedPath&&e.composedPath()[0]||e.target,s=t(o);s&&!_$HYDRATION.completed.has(s)&&_$HYDRATION.events.push([s,e])};["${eventNames.join('","')}"].forEach(t=>document.addEventListener(t,e))})();`;
529
531
  if (streaming) {
530
532
  s += `(()=>{const e=_$HYDRATION,o={};e.startResource=e=>{let r;o[e]=[new Promise(e=>r=e),r]},e.resolveResource=(e,r)=>{const n=o[e];if(!n)return o[e]=[r];n[1](r)},e.loadResource=e=>{const r=o[e];if(r)return r[0]}})();`;
531
533
  }
@@ -446,6 +446,8 @@ function ssrSpread(props, isSVG, skipChildren) {
446
446
  result += `class="${ssrClassList(value)}"`;
447
447
  } else if (BooleanAttributes.has(prop)) {
448
448
  if (value) result += prop;else continue;
449
+ } else if (prop === "ref" || prop.slice(0, 2) === "on") {
450
+ continue;
449
451
  } else {
450
452
  result += `${Aliases[prop] || prop}="${escape(value, true)}"`;
451
453
  }
@@ -522,7 +524,7 @@ function generateHydrationScript() {
522
524
  resources,
523
525
  eventNames = ["click", "input"]
524
526
  } = sharedConfig.context;
525
- let s = `<script${nonce ? ` nonce="${nonce}"` : ""}>(()=>{_$HYDRATION={events:[],completed:new WeakSet};const t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")&&e||t(e.host&&e.host instanceof Node?e.host:e.parentNode)),e=e=>{let o=e.composedPath&&e.composedPath()[0]||e.target,s=t(o);s&&!_$HYDRATION.completed.has(s)&&_$HYDRATION.events.push([s,e])};["${eventNames.join('","')}"].forEach(t=>document.addEventListener(t,e))})();`;
527
+ let s = `<script${nonce ? ` nonce="${nonce}"` : ""}>(()=>{_$HYDRATION={events:[],completed:new WeakSet};const t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),e=e=>{let o=e.composedPath&&e.composedPath()[0]||e.target,s=t(o);s&&!_$HYDRATION.completed.has(s)&&_$HYDRATION.events.push([s,e])};["${eventNames.join('","')}"].forEach(t=>document.addEventListener(t,e))})();`;
526
528
  if (streaming) {
527
529
  s += `(()=>{const e=_$HYDRATION,o={};e.startResource=e=>{let r;o[e]=[new Promise(e=>r=e),r]},e.resolveResource=(e,r)=>{const n=o[e];if(!n)return o[e]=[r];n[1](r)},e.loadResource=e=>{const r=o[e];if(r)return r[0]}})();`;
528
530
  }
package/web/dist/web.cjs CHANGED
@@ -202,35 +202,19 @@ function insert(parent, accessor, marker, initial) {
202
202
  solidJs.createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);
203
203
  }
204
204
  function assign(node, props, isSVG, skipChildren, prevProps = {}) {
205
- let isCE, isProp, isChildProp;
205
+ for (const prop in prevProps) {
206
+ if (!(prop in props)) {
207
+ if (prop === "children") continue;
208
+ assignProp(node, prop, null, prevProps[prop], isSVG);
209
+ }
210
+ }
206
211
  for (const prop in props) {
207
212
  if (prop === "children") {
208
213
  if (!skipChildren) insertExpression(node, props.children);
209
214
  continue;
210
215
  }
211
216
  const value = props[prop];
212
- if (value === prevProps[prop]) continue;
213
- if (prop === "style") {
214
- style(node, value, prevProps[prop]);
215
- } else if (prop === "classList") {
216
- classList(node, value, prevProps[prop]);
217
- } else if (prop === "ref") {
218
- value(node);
219
- } else if (prop.slice(0, 3) === "on:") {
220
- node.addEventListener(prop.slice(3), value);
221
- } else if (prop.slice(0, 10) === "oncapture:") {
222
- node.addEventListener(prop.slice(10), value, true);
223
- } else if (prop.slice(0, 2) === "on") {
224
- const name = prop.slice(2).toLowerCase();
225
- const delegate = DelegatedEvents.has(name);
226
- addEventListener(node, name, value, delegate);
227
- delegate && delegateEvents([name]);
228
- } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
229
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
230
- } else {
231
- const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
232
- if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
233
- }
217
+ assignProp(node, prop, value, prevProps[prop], isSVG);
234
218
  prevProps[prop] = value;
235
219
  }
236
220
  }
@@ -313,6 +297,29 @@ function toggleClassKey(node, key, value) {
313
297
  const classNames = key.trim().split(/\s+/);
314
298
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
315
299
  }
300
+ function assignProp(node, prop, value, prev, isSVG) {
301
+ let isCE, isProp, isChildProp;
302
+ if (prop === "style") return style(node, value, prev);
303
+ if (prop === "classList") return classList(node, value, prev);
304
+ if (value === prev) return;
305
+ if (prop === "ref") {
306
+ value(node);
307
+ } else if (prop.slice(0, 3) === "on:") {
308
+ node.addEventListener(prop.slice(3), value);
309
+ } else if (prop.slice(0, 10) === "oncapture:") {
310
+ node.addEventListener(prop.slice(10), value, true);
311
+ } else if (prop.slice(0, 2) === "on") {
312
+ const name = prop.slice(2).toLowerCase();
313
+ const delegate = DelegatedEvents.has(name);
314
+ addEventListener(node, name, value, delegate);
315
+ delegate && delegateEvents([name]);
316
+ } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
317
+ if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
318
+ } else {
319
+ const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
320
+ if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
321
+ }
322
+ }
316
323
  function eventHandler(e) {
317
324
  const key = `$$${e.type}`;
318
325
  let node = e.composedPath && e.composedPath()[0] || e.target;
package/web/dist/web.js CHANGED
@@ -199,35 +199,19 @@ function insert(parent, accessor, marker, initial) {
199
199
  createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);
200
200
  }
201
201
  function assign(node, props, isSVG, skipChildren, prevProps = {}) {
202
- let isCE, isProp, isChildProp;
202
+ for (const prop in prevProps) {
203
+ if (!(prop in props)) {
204
+ if (prop === "children") continue;
205
+ assignProp(node, prop, null, prevProps[prop], isSVG);
206
+ }
207
+ }
203
208
  for (const prop in props) {
204
209
  if (prop === "children") {
205
210
  if (!skipChildren) insertExpression(node, props.children);
206
211
  continue;
207
212
  }
208
213
  const value = props[prop];
209
- if (value === prevProps[prop]) continue;
210
- if (prop === "style") {
211
- style(node, value, prevProps[prop]);
212
- } else if (prop === "classList") {
213
- classList(node, value, prevProps[prop]);
214
- } else if (prop === "ref") {
215
- value(node);
216
- } else if (prop.slice(0, 3) === "on:") {
217
- node.addEventListener(prop.slice(3), value);
218
- } else if (prop.slice(0, 10) === "oncapture:") {
219
- node.addEventListener(prop.slice(10), value, true);
220
- } else if (prop.slice(0, 2) === "on") {
221
- const name = prop.slice(2).toLowerCase();
222
- const delegate = DelegatedEvents.has(name);
223
- addEventListener(node, name, value, delegate);
224
- delegate && delegateEvents([name]);
225
- } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
226
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
227
- } else {
228
- const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
229
- if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
230
- }
214
+ assignProp(node, prop, value, prevProps[prop], isSVG);
231
215
  prevProps[prop] = value;
232
216
  }
233
217
  }
@@ -310,6 +294,29 @@ function toggleClassKey(node, key, value) {
310
294
  const classNames = key.trim().split(/\s+/);
311
295
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
312
296
  }
297
+ function assignProp(node, prop, value, prev, isSVG) {
298
+ let isCE, isProp, isChildProp;
299
+ if (prop === "style") return style(node, value, prev);
300
+ if (prop === "classList") return classList(node, value, prev);
301
+ if (value === prev) return;
302
+ if (prop === "ref") {
303
+ value(node);
304
+ } else if (prop.slice(0, 3) === "on:") {
305
+ node.addEventListener(prop.slice(3), value);
306
+ } else if (prop.slice(0, 10) === "oncapture:") {
307
+ node.addEventListener(prop.slice(10), value, true);
308
+ } else if (prop.slice(0, 2) === "on") {
309
+ const name = prop.slice(2).toLowerCase();
310
+ const delegate = DelegatedEvents.has(name);
311
+ addEventListener(node, name, value, delegate);
312
+ delegate && delegateEvents([name]);
313
+ } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
314
+ if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
315
+ } else {
316
+ const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
317
+ if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
318
+ }
319
+ }
313
320
  function eventHandler(e) {
314
321
  const key = `$$${e.type}`;
315
322
  let node = e.composedPath && e.composedPath()[0] || e.target;