solid-js 1.8.22 → 1.9.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.
Files changed (59) hide show
  1. package/dist/dev.cjs +7 -6
  2. package/dist/dev.js +567 -325
  3. package/dist/server.cjs +1 -1
  4. package/dist/server.js +169 -75
  5. package/dist/solid.cjs +7 -6
  6. package/dist/solid.js +494 -283
  7. package/h/dist/h.js +40 -9
  8. package/h/jsx-runtime/dist/jsx.js +1 -1
  9. package/h/jsx-runtime/types/index.d.ts +13 -10
  10. package/h/jsx-runtime/types/jsx.d.ts +22 -1
  11. package/h/types/hyperscript.d.ts +11 -11
  12. package/h/types/index.d.ts +1 -1
  13. package/html/dist/html.cjs +4 -2
  14. package/html/dist/html.js +222 -95
  15. package/html/types/index.d.ts +1 -1
  16. package/html/types/lit.d.ts +52 -33
  17. package/package.json +1 -5
  18. package/store/dist/dev.cjs +1 -1
  19. package/store/dist/dev.js +123 -43
  20. package/store/dist/server.cjs +4 -0
  21. package/store/dist/server.js +23 -8
  22. package/store/dist/store.cjs +1 -1
  23. package/store/dist/store.js +114 -40
  24. package/store/package.json +0 -4
  25. package/store/types/index.d.ts +21 -7
  26. package/store/types/modifiers.d.ts +6 -3
  27. package/store/types/mutable.d.ts +5 -2
  28. package/store/types/server.d.ts +26 -5
  29. package/store/types/store.d.ts +219 -62
  30. package/types/index.d.ts +75 -10
  31. package/types/jsx.d.ts +35 -8
  32. package/types/reactive/array.d.ts +12 -4
  33. package/types/reactive/observable.d.ts +25 -17
  34. package/types/reactive/scheduler.d.ts +9 -6
  35. package/types/reactive/signal.d.ts +236 -143
  36. package/types/render/Suspense.d.ts +5 -5
  37. package/types/render/component.d.ts +64 -33
  38. package/types/render/flow.d.ts +43 -31
  39. package/types/render/hydration.d.ts +15 -15
  40. package/types/server/index.d.ts +57 -2
  41. package/types/server/reactive.d.ts +73 -42
  42. package/types/server/rendering.d.ts +169 -98
  43. package/universal/dist/dev.js +28 -12
  44. package/universal/dist/universal.js +28 -12
  45. package/universal/types/index.d.ts +3 -1
  46. package/universal/types/universal.d.ts +0 -1
  47. package/web/dist/dev.cjs +57 -24
  48. package/web/dist/dev.js +679 -101
  49. package/web/dist/server.cjs +96 -15
  50. package/web/dist/server.js +676 -105
  51. package/web/dist/web.cjs +53 -23
  52. package/web/dist/web.js +664 -99
  53. package/web/package.json +0 -4
  54. package/web/storage/dist/storage.js +3 -3
  55. package/web/types/client.d.ts +5 -3
  56. package/web/types/core.d.ts +10 -1
  57. package/web/types/index.d.ts +27 -10
  58. package/web/types/server-mock.d.ts +47 -32
  59. package/web/types/server.d.ts +88 -0
package/web/dist/web.cjs CHANGED
@@ -119,14 +119,14 @@ function render(code, element, init, options = {}) {
119
119
  element.textContent = "";
120
120
  };
121
121
  }
122
- function template(html, isCE, isSVG) {
122
+ function template(html, isImportNode, isSVG) {
123
123
  let node;
124
124
  const create = () => {
125
125
  const t = document.createElement("template");
126
126
  t.innerHTML = html;
127
127
  return isSVG ? t.content.firstChild.firstChild : t.content.firstChild;
128
128
  };
129
- const fn = isCE ? () => solidJs.untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);
129
+ const fn = isImportNode ? () => solidJs.untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);
130
130
  fn.cloneNode = fn;
131
131
  return fn;
132
132
  }
@@ -158,6 +158,10 @@ function setAttributeNS(node, namespace, name, value) {
158
158
  if (isHydrating(node)) return;
159
159
  if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);
160
160
  }
161
+ function setBoolAttribute(node, name, value) {
162
+ if (isHydrating(node)) return;
163
+ value ? node.setAttribute(name, "") : node.removeAttribute(name);
164
+ }
161
165
  function className(node, value) {
162
166
  if (isHydrating(node)) return;
163
167
  if (value == null) node.removeAttribute("class");else node.className = value;
@@ -171,7 +175,7 @@ function addEventListener(node, name, handler, delegate) {
171
175
  } else if (Array.isArray(handler)) {
172
176
  const handlerFn = handler[0];
173
177
  node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));
174
- } else node.addEventListener(name, handler);
178
+ } else node.addEventListener(name, handler, typeof handler !== "function" && handler);
175
179
  }
176
180
  function classList(node, value, prev = {}) {
177
181
  const classKeys = Object.keys(value || {}),
@@ -245,7 +249,7 @@ function assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = fals
245
249
  for (const prop in prevProps) {
246
250
  if (!(prop in props)) {
247
251
  if (prop === "children") continue;
248
- prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef);
252
+ prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);
249
253
  }
250
254
  }
251
255
  for (const prop in props) {
@@ -254,7 +258,7 @@ function assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = fals
254
258
  continue;
255
259
  }
256
260
  const value = props[prop];
257
- prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef);
261
+ prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);
258
262
  }
259
263
  }
260
264
  function hydrate$1(code, element, options = {}) {
@@ -317,6 +321,7 @@ function runHydrationEvents() {
317
321
  completed,
318
322
  events
319
323
  } = solidJs.sharedConfig;
324
+ if (!events) return;
320
325
  events.queued = false;
321
326
  while (events.length) {
322
327
  const [el, e] = events[0];
@@ -342,7 +347,7 @@ function toggleClassKey(node, key, value) {
342
347
  const classNames = key.trim().split(/\s+/);
343
348
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
344
349
  }
345
- function assignProp(node, prop, value, prev, isSVG, skipRef) {
350
+ function assignProp(node, prop, value, prev, isSVG, skipRef, props) {
346
351
  let isCE, isProp, isChildProp, propAlias, forceProp;
347
352
  if (prop === "style") return style(node, value, prev);
348
353
  if (prop === "classList") return classList(node, value, prev);
@@ -351,8 +356,8 @@ function assignProp(node, prop, value, prev, isSVG, skipRef) {
351
356
  if (!skipRef) value(node);
352
357
  } else if (prop.slice(0, 3) === "on:") {
353
358
  const e = prop.slice(3);
354
- prev && node.removeEventListener(e, prev);
355
- value && node.addEventListener(e, value);
359
+ prev && node.removeEventListener(e, prev, typeof prev !== "function" && prev);
360
+ value && node.addEventListener(e, value, typeof value !== "function" && value);
356
361
  } else if (prop.slice(0, 10) === "oncapture:") {
357
362
  const e = prop.slice(10);
358
363
  prev && node.removeEventListener(e, prev, true);
@@ -370,7 +375,9 @@ function assignProp(node, prop, value, prev, isSVG, skipRef) {
370
375
  }
371
376
  } else if (prop.slice(0, 5) === "attr:") {
372
377
  setAttribute(node, prop.slice(5), value);
373
- } else if ((forceProp = prop.slice(0, 5) === "prop:") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
378
+ } else if (prop.slice(0, 5) === "bool:") {
379
+ setBoolAttribute(node, prop.slice(5), value);
380
+ } else if ((forceProp = prop.slice(0, 5) === "prop:") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-") || 'is' in props)) {
374
381
  if (forceProp) {
375
382
  prop = prop.slice(5);
376
383
  isProp = true;
@@ -386,30 +393,52 @@ function eventHandler(e) {
386
393
  if (solidJs.sharedConfig.registry && solidJs.sharedConfig.events) {
387
394
  if (solidJs.sharedConfig.events.find(([el, ev]) => ev === e)) return;
388
395
  }
396
+ let node = e.target;
389
397
  const key = `$$${e.type}`;
390
- let node = e.composedPath && e.composedPath()[0] || e.target;
391
- if (e.target !== node) {
392
- Object.defineProperty(e, "target", {
393
- configurable: true,
394
- value: node
395
- });
396
- }
397
- Object.defineProperty(e, "currentTarget", {
398
+ const oriTarget = e.target;
399
+ const oriCurrentTarget = e.currentTarget;
400
+ const retarget = value => Object.defineProperty(e, "target", {
398
401
  configurable: true,
399
- get() {
400
- return node || document;
401
- }
402
+ value
402
403
  });
403
- if (solidJs.sharedConfig.registry && !solidJs.sharedConfig.done) solidJs.sharedConfig.done = _$HY.done = true;
404
- while (node) {
404
+ const handleNode = () => {
405
405
  const handler = node[key];
406
406
  if (handler && !node.disabled) {
407
407
  const data = node[`${key}Data`];
408
408
  data !== undefined ? handler.call(node, data, e) : handler.call(node, e);
409
409
  if (e.cancelBubble) return;
410
410
  }
411
- node = node._$host || node.parentNode || node.host;
411
+ node.host && node.contains(e.target) && !node.host._$host && retarget(node.host);
412
+ return true;
413
+ };
414
+ const walkUpTree = () => {
415
+ while (handleNode() && (node = node._$host || node.parentNode || node.host));
416
+ };
417
+ Object.defineProperty(e, "currentTarget", {
418
+ configurable: true,
419
+ get() {
420
+ return node || document;
421
+ }
422
+ });
423
+ if (solidJs.sharedConfig.registry && !solidJs.sharedConfig.done) solidJs.sharedConfig.done = _$HY.done = true;
424
+ if (e.composedPath) {
425
+ const path = e.composedPath();
426
+ retarget(path[0]);
427
+ for (let i = 0; i < path.length - 2; i++) {
428
+ node = path[i];
429
+ if (!handleNode()) break;
430
+ if (node._$host) {
431
+ node = node._$host;
432
+ walkUpTree();
433
+ break;
434
+ }
435
+ if (node.parentNode === oriCurrentTarget) {
436
+ break;
437
+ }
438
+ }
412
439
  }
440
+ else walkUpTree();
441
+ retarget(oriTarget);
413
442
  }
414
443
  function insertExpression(parent, value, current, marker, unwrapArray) {
415
444
  const hydrating = isHydrating(parent);
@@ -748,6 +777,7 @@ exports.resolveSSRNode = resolveSSRNode;
748
777
  exports.runHydrationEvents = runHydrationEvents;
749
778
  exports.setAttribute = setAttribute;
750
779
  exports.setAttributeNS = setAttributeNS;
780
+ exports.setBoolAttribute = setBoolAttribute;
751
781
  exports.setProperty = setProperty;
752
782
  exports.spread = spread;
753
783
  exports.ssr = ssr;