@pyreon/core 0.16.0 → 0.18.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.
package/README.md CHANGED
@@ -50,6 +50,7 @@ Lifecycle hook arrays are lazy-allocated -- `LifecycleHooks.mount`/`.unmount`/`.
50
50
 
51
51
  - **`makeReactiveProps(raw)`** -- Converts compiler-emitted `_rp()` wrappers into getter properties. Uses a scan-first strategy: checks for any branded reactive prop before allocating the result object. Static-only components return `raw` immediately with no allocation.
52
52
  - **`_rp(fn)`** -- Brands a function as a reactive prop wrapper (compiler-emitted, not user-facing).
53
+ - **`_wrapSpread(source)`** -- Compiler-emitted helper that makes JSX spread on a component reactivity-safe. For `<Comp {...source}>`, the compiler emits `<Comp {..._wrapSpread(source)}>`. `_wrapSpread` walks `source`'s own keys without firing getters and re-brands each getter-shaped value as an `_rp` thunk pointing back at the live source. JS spread then carries the brands as plain data properties; `makeReactiveProps` converts them back to getters on the consumer side -- so reactive props survive the spread end-to-end. Fast path: when `source` has no getter descriptors, returns the source unchanged (zero cost). Not user-facing; emitted automatically by `@pyreon/compiler` for any component JSX with a spread. See `docs/patterns/reactive-spread.md` for the full contract.
53
54
 
54
55
  ### Context
55
56
 
@@ -5386,7 +5386,7 @@ var drawChart = (function (exports) {
5386
5386
  </script>
5387
5387
  <script>
5388
5388
  /*<!--*/
5389
- const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.js","children":[{"name":"src","children":[{"uid":"46e89893-1","name":"lifecycle.ts"},{"uid":"46e89893-3","name":"component.ts"},{"uid":"46e89893-5","name":"compat-marker.ts"},{"uid":"46e89893-7","name":"context.ts"},{"uid":"46e89893-9","name":"h.ts"},{"uid":"46e89893-11","name":"dynamic.ts"},{"uid":"46e89893-13","name":"telemetry.ts"},{"uid":"46e89893-15","name":"error-boundary.ts"},{"uid":"46e89893-17","name":"for.ts"},{"uid":"46e89893-19","name":"lazy.ts"},{"uid":"46e89893-21","name":"map-array.ts"},{"uid":"46e89893-23","name":"portal.ts"},{"uid":"46e89893-25","name":"props.ts"},{"uid":"46e89893-27","name":"ref.ts"},{"uid":"46e89893-29","name":"show.ts"},{"uid":"46e89893-31","name":"style.ts"},{"uid":"46e89893-33","name":"suspense.ts"},{"uid":"46e89893-35","name":"index.ts"}]}]}],"isRoot":true},"nodeParts":{"46e89893-1":{"renderedLength":3078,"gzipLength":1313,"brotliLength":0,"metaUid":"46e89893-0"},"46e89893-3":{"renderedLength":1471,"gzipLength":693,"brotliLength":0,"metaUid":"46e89893-2"},"46e89893-5":{"renderedLength":3173,"gzipLength":1409,"brotliLength":0,"metaUid":"46e89893-4"},"46e89893-7":{"renderedLength":3600,"gzipLength":1542,"brotliLength":0,"metaUid":"46e89893-6"},"46e89893-9":{"renderedLength":1813,"gzipLength":957,"brotliLength":0,"metaUid":"46e89893-8"},"46e89893-11":{"renderedLength":490,"gzipLength":291,"brotliLength":0,"metaUid":"46e89893-10"},"46e89893-13":{"renderedLength":1208,"gzipLength":633,"brotliLength":0,"metaUid":"46e89893-12"},"46e89893-15":{"renderedLength":1659,"gzipLength":842,"brotliLength":0,"metaUid":"46e89893-14"},"46e89893-17":{"renderedLength":700,"gzipLength":478,"brotliLength":0,"metaUid":"46e89893-16"},"46e89893-19":{"renderedLength":461,"gzipLength":273,"brotliLength":0,"metaUid":"46e89893-18"},"46e89893-21":{"renderedLength":1018,"gzipLength":571,"brotliLength":0,"metaUid":"46e89893-20"},"46e89893-23":{"renderedLength":818,"gzipLength":491,"brotliLength":0,"metaUid":"46e89893-22"},"46e89893-25":{"renderedLength":4339,"gzipLength":1641,"brotliLength":0,"metaUid":"46e89893-24"},"46e89893-27":{"renderedLength":86,"gzipLength":98,"brotliLength":0,"metaUid":"46e89893-26"},"46e89893-29":{"renderedLength":2022,"gzipLength":854,"brotliLength":0,"metaUid":"46e89893-28"},"46e89893-31":{"renderedLength":1858,"gzipLength":825,"brotliLength":0,"metaUid":"46e89893-30"},"46e89893-33":{"renderedLength":1104,"gzipLength":614,"brotliLength":0,"metaUid":"46e89893-32"},"46e89893-35":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"46e89893-34"}},"nodeMetas":{"46e89893-0":{"id":"/src/lifecycle.ts","moduleParts":{"index.js":"46e89893-1"},"imported":[],"importedBy":[{"uid":"46e89893-34"},{"uid":"46e89893-2"},{"uid":"46e89893-6"},{"uid":"46e89893-14"}]},"46e89893-2":{"id":"/src/component.ts","moduleParts":{"index.js":"46e89893-3"},"imported":[{"uid":"46e89893-0"}],"importedBy":[{"uid":"46e89893-34"},{"uid":"46e89893-14"}]},"46e89893-4":{"id":"/src/compat-marker.ts","moduleParts":{"index.js":"46e89893-5"},"imported":[],"importedBy":[{"uid":"46e89893-34"},{"uid":"46e89893-14"}]},"46e89893-6":{"id":"/src/context.ts","moduleParts":{"index.js":"46e89893-7"},"imported":[{"uid":"46e89893-36"},{"uid":"46e89893-0"}],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-8":{"id":"/src/h.ts","moduleParts":{"index.js":"46e89893-9"},"imported":[],"importedBy":[{"uid":"46e89893-34"},{"uid":"46e89893-10"},{"uid":"46e89893-18"},{"uid":"46e89893-32"}]},"46e89893-10":{"id":"/src/dynamic.ts","moduleParts":{"index.js":"46e89893-11"},"imported":[{"uid":"46e89893-8"}],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-12":{"id":"/src/telemetry.ts","moduleParts":{"index.js":"46e89893-13"},"imported":[],"importedBy":[{"uid":"46e89893-34"},{"uid":"46e89893-14"}]},"46e89893-14":{"id":"/src/error-boundary.ts","moduleParts":{"index.js":"46e89893-15"},"imported":[{"uid":"46e89893-36"},{"uid":"46e89893-4"},{"uid":"46e89893-2"},{"uid":"46e89893-0"},{"uid":"46e89893-12"}],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-16":{"id":"/src/for.ts","moduleParts":{"index.js":"46e89893-17"},"imported":[],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-18":{"id":"/src/lazy.ts","moduleParts":{"index.js":"46e89893-19"},"imported":[{"uid":"46e89893-36"},{"uid":"46e89893-8"}],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-20":{"id":"/src/map-array.ts","moduleParts":{"index.js":"46e89893-21"},"imported":[],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-22":{"id":"/src/portal.ts","moduleParts":{"index.js":"46e89893-23"},"imported":[],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-24":{"id":"/src/props.ts","moduleParts":{"index.js":"46e89893-25"},"imported":[],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-26":{"id":"/src/ref.ts","moduleParts":{"index.js":"46e89893-27"},"imported":[],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-28":{"id":"/src/show.ts","moduleParts":{"index.js":"46e89893-29"},"imported":[],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-30":{"id":"/src/style.ts","moduleParts":{"index.js":"46e89893-31"},"imported":[],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-32":{"id":"/src/suspense.ts","moduleParts":{"index.js":"46e89893-33"},"imported":[{"uid":"46e89893-8"}],"importedBy":[{"uid":"46e89893-34"}]},"46e89893-34":{"id":"/src/index.ts","moduleParts":{"index.js":"46e89893-35"},"imported":[{"uid":"46e89893-2"},{"uid":"46e89893-4"},{"uid":"46e89893-6"},{"uid":"46e89893-10"},{"uid":"46e89893-14"},{"uid":"46e89893-16"},{"uid":"46e89893-8"},{"uid":"46e89893-18"},{"uid":"46e89893-0"},{"uid":"46e89893-20"},{"uid":"46e89893-22"},{"uid":"46e89893-24"},{"uid":"46e89893-26"},{"uid":"46e89893-28"},{"uid":"46e89893-30"},{"uid":"46e89893-32"},{"uid":"46e89893-12"}],"importedBy":[],"isEntry":true},"46e89893-36":{"id":"@pyreon/reactivity","moduleParts":{},"imported":[],"importedBy":[{"uid":"46e89893-6"},{"uid":"46e89893-14"},{"uid":"46e89893-18"}]}},"env":{"rollup":"4.23.0"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
5389
+ const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.js","children":[{"name":"src","children":[{"uid":"5310d1da-1","name":"lifecycle.ts"},{"uid":"5310d1da-3","name":"component.ts"},{"uid":"5310d1da-5","name":"compat-marker.ts"},{"uid":"5310d1da-7","name":"context.ts"},{"uid":"5310d1da-9","name":"h.ts"},{"uid":"5310d1da-11","name":"dynamic.ts"},{"uid":"5310d1da-13","name":"telemetry.ts"},{"uid":"5310d1da-15","name":"error-boundary.ts"},{"uid":"5310d1da-17","name":"for.ts"},{"uid":"5310d1da-19","name":"ref.ts"},{"uid":"5310d1da-21","name":"defer.ts"},{"uid":"5310d1da-23","name":"lazy.ts"},{"uid":"5310d1da-25","name":"map-array.ts"},{"uid":"5310d1da-27","name":"portal.ts"},{"uid":"5310d1da-29","name":"props.ts"},{"uid":"5310d1da-31","name":"show.ts"},{"uid":"5310d1da-33","name":"style.ts"},{"uid":"5310d1da-35","name":"suspense.ts"},{"uid":"5310d1da-37","name":"index.ts"}]}]}],"isRoot":true},"nodeParts":{"5310d1da-1":{"renderedLength":3078,"gzipLength":1313,"brotliLength":0,"metaUid":"5310d1da-0"},"5310d1da-3":{"renderedLength":1471,"gzipLength":693,"brotliLength":0,"metaUid":"5310d1da-2"},"5310d1da-5":{"renderedLength":3173,"gzipLength":1409,"brotliLength":0,"metaUid":"5310d1da-4"},"5310d1da-7":{"renderedLength":3600,"gzipLength":1542,"brotliLength":0,"metaUid":"5310d1da-6"},"5310d1da-9":{"renderedLength":1813,"gzipLength":957,"brotliLength":0,"metaUid":"5310d1da-8"},"5310d1da-11":{"renderedLength":490,"gzipLength":291,"brotliLength":0,"metaUid":"5310d1da-10"},"5310d1da-13":{"renderedLength":1208,"gzipLength":633,"brotliLength":0,"metaUid":"5310d1da-12"},"5310d1da-15":{"renderedLength":1659,"gzipLength":843,"brotliLength":0,"metaUid":"5310d1da-14"},"5310d1da-17":{"renderedLength":700,"gzipLength":478,"brotliLength":0,"metaUid":"5310d1da-16"},"5310d1da-19":{"renderedLength":86,"gzipLength":98,"brotliLength":0,"metaUid":"5310d1da-18"},"5310d1da-21":{"renderedLength":3979,"gzipLength":1715,"brotliLength":0,"metaUid":"5310d1da-20"},"5310d1da-23":{"renderedLength":461,"gzipLength":273,"brotliLength":0,"metaUid":"5310d1da-22"},"5310d1da-25":{"renderedLength":1018,"gzipLength":571,"brotliLength":0,"metaUid":"5310d1da-24"},"5310d1da-27":{"renderedLength":818,"gzipLength":491,"brotliLength":0,"metaUid":"5310d1da-26"},"5310d1da-29":{"renderedLength":6310,"gzipLength":2344,"brotliLength":0,"metaUid":"5310d1da-28"},"5310d1da-31":{"renderedLength":2022,"gzipLength":854,"brotliLength":0,"metaUid":"5310d1da-30"},"5310d1da-33":{"renderedLength":1858,"gzipLength":825,"brotliLength":0,"metaUid":"5310d1da-32"},"5310d1da-35":{"renderedLength":1104,"gzipLength":614,"brotliLength":0,"metaUid":"5310d1da-34"},"5310d1da-37":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"5310d1da-36"}},"nodeMetas":{"5310d1da-0":{"id":"/src/lifecycle.ts","moduleParts":{"index.js":"5310d1da-1"},"imported":[],"importedBy":[{"uid":"5310d1da-36"},{"uid":"5310d1da-2"},{"uid":"5310d1da-6"},{"uid":"5310d1da-14"},{"uid":"5310d1da-20"}]},"5310d1da-2":{"id":"/src/component.ts","moduleParts":{"index.js":"5310d1da-3"},"imported":[{"uid":"5310d1da-0"}],"importedBy":[{"uid":"5310d1da-36"},{"uid":"5310d1da-14"}]},"5310d1da-4":{"id":"/src/compat-marker.ts","moduleParts":{"index.js":"5310d1da-5"},"imported":[],"importedBy":[{"uid":"5310d1da-36"},{"uid":"5310d1da-14"}]},"5310d1da-6":{"id":"/src/context.ts","moduleParts":{"index.js":"5310d1da-7"},"imported":[{"uid":"5310d1da-38"},{"uid":"5310d1da-0"}],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-8":{"id":"/src/h.ts","moduleParts":{"index.js":"5310d1da-9"},"imported":[],"importedBy":[{"uid":"5310d1da-36"},{"uid":"5310d1da-10"},{"uid":"5310d1da-20"},{"uid":"5310d1da-22"},{"uid":"5310d1da-34"}]},"5310d1da-10":{"id":"/src/dynamic.ts","moduleParts":{"index.js":"5310d1da-11"},"imported":[{"uid":"5310d1da-8"}],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-12":{"id":"/src/telemetry.ts","moduleParts":{"index.js":"5310d1da-13"},"imported":[],"importedBy":[{"uid":"5310d1da-36"},{"uid":"5310d1da-14"}]},"5310d1da-14":{"id":"/src/error-boundary.ts","moduleParts":{"index.js":"5310d1da-15"},"imported":[{"uid":"5310d1da-38"},{"uid":"5310d1da-4"},{"uid":"5310d1da-2"},{"uid":"5310d1da-0"},{"uid":"5310d1da-12"}],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-16":{"id":"/src/for.ts","moduleParts":{"index.js":"5310d1da-17"},"imported":[],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-18":{"id":"/src/ref.ts","moduleParts":{"index.js":"5310d1da-19"},"imported":[],"importedBy":[{"uid":"5310d1da-36"},{"uid":"5310d1da-20"}]},"5310d1da-20":{"id":"/src/defer.ts","moduleParts":{"index.js":"5310d1da-21"},"imported":[{"uid":"5310d1da-38"},{"uid":"5310d1da-8"},{"uid":"5310d1da-0"},{"uid":"5310d1da-18"}],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-22":{"id":"/src/lazy.ts","moduleParts":{"index.js":"5310d1da-23"},"imported":[{"uid":"5310d1da-38"},{"uid":"5310d1da-8"}],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-24":{"id":"/src/map-array.ts","moduleParts":{"index.js":"5310d1da-25"},"imported":[],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-26":{"id":"/src/portal.ts","moduleParts":{"index.js":"5310d1da-27"},"imported":[],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-28":{"id":"/src/props.ts","moduleParts":{"index.js":"5310d1da-29"},"imported":[],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-30":{"id":"/src/show.ts","moduleParts":{"index.js":"5310d1da-31"},"imported":[],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-32":{"id":"/src/style.ts","moduleParts":{"index.js":"5310d1da-33"},"imported":[],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-34":{"id":"/src/suspense.ts","moduleParts":{"index.js":"5310d1da-35"},"imported":[{"uid":"5310d1da-8"}],"importedBy":[{"uid":"5310d1da-36"}]},"5310d1da-36":{"id":"/src/index.ts","moduleParts":{"index.js":"5310d1da-37"},"imported":[{"uid":"5310d1da-2"},{"uid":"5310d1da-4"},{"uid":"5310d1da-6"},{"uid":"5310d1da-10"},{"uid":"5310d1da-14"},{"uid":"5310d1da-16"},{"uid":"5310d1da-8"},{"uid":"5310d1da-20"},{"uid":"5310d1da-22"},{"uid":"5310d1da-0"},{"uid":"5310d1da-24"},{"uid":"5310d1da-26"},{"uid":"5310d1da-28"},{"uid":"5310d1da-18"},{"uid":"5310d1da-30"},{"uid":"5310d1da-32"},{"uid":"5310d1da-34"},{"uid":"5310d1da-12"}],"importedBy":[],"isEntry":true},"5310d1da-38":{"id":"@pyreon/reactivity","moduleParts":{},"imported":[],"importedBy":[{"uid":"5310d1da-6"},{"uid":"5310d1da-14"},{"uid":"5310d1da-20"},{"uid":"5310d1da-22"}]}},"env":{"rollup":"4.23.0"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
5390
5390
 
5391
5391
  const run = () => {
5392
5392
  const width = window.innerWidth;
@@ -5386,7 +5386,7 @@ var drawChart = (function (exports) {
5386
5386
  </script>
5387
5387
  <script>
5388
5388
  /*<!--*/
5389
- const data = {"version":2,"tree":{"name":"root","children":[{"name":"jsx-dev-runtime.js","children":[{"name":"src","children":[{"uid":"235a8e25-1","name":"h.ts"},{"uid":"235a8e25-3","name":"jsx-runtime.ts"},{"uid":"235a8e25-5","name":"jsx-dev-runtime.ts"}]}]}],"isRoot":true},"nodeParts":{"235a8e25-1":{"renderedLength":1813,"gzipLength":957,"brotliLength":0,"metaUid":"235a8e25-0"},"235a8e25-3":{"renderedLength":1103,"gzipLength":640,"brotliLength":0,"metaUid":"235a8e25-2"},"235a8e25-5":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"235a8e25-4"}},"nodeMetas":{"235a8e25-0":{"id":"/src/h.ts","moduleParts":{"jsx-dev-runtime.js":"235a8e25-1"},"imported":[],"importedBy":[{"uid":"235a8e25-2"}]},"235a8e25-2":{"id":"/src/jsx-runtime.ts","moduleParts":{"jsx-dev-runtime.js":"235a8e25-3"},"imported":[{"uid":"235a8e25-0"}],"importedBy":[{"uid":"235a8e25-4"}]},"235a8e25-4":{"id":"/src/jsx-dev-runtime.ts","moduleParts":{"jsx-dev-runtime.js":"235a8e25-5"},"imported":[{"uid":"235a8e25-2"}],"importedBy":[],"isEntry":true}},"env":{"rollup":"4.23.0"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
5389
+ const data = {"version":2,"tree":{"name":"root","children":[{"name":"jsx-dev-runtime.js","children":[{"name":"src","children":[{"uid":"430b4b1b-1","name":"h.ts"},{"uid":"430b4b1b-3","name":"jsx-runtime.ts"},{"uid":"430b4b1b-5","name":"jsx-dev-runtime.ts"}]}]}],"isRoot":true},"nodeParts":{"430b4b1b-1":{"renderedLength":1813,"gzipLength":957,"brotliLength":0,"metaUid":"430b4b1b-0"},"430b4b1b-3":{"renderedLength":1789,"gzipLength":834,"brotliLength":0,"metaUid":"430b4b1b-2"},"430b4b1b-5":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"430b4b1b-4"}},"nodeMetas":{"430b4b1b-0":{"id":"/src/h.ts","moduleParts":{"jsx-dev-runtime.js":"430b4b1b-1"},"imported":[],"importedBy":[{"uid":"430b4b1b-2"}]},"430b4b1b-2":{"id":"/src/jsx-runtime.ts","moduleParts":{"jsx-dev-runtime.js":"430b4b1b-3"},"imported":[{"uid":"430b4b1b-0"}],"importedBy":[{"uid":"430b4b1b-4"}]},"430b4b1b-4":{"id":"/src/jsx-dev-runtime.ts","moduleParts":{"jsx-dev-runtime.js":"430b4b1b-5"},"imported":[{"uid":"430b4b1b-2"}],"importedBy":[],"isEntry":true}},"env":{"rollup":"4.23.0"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
5390
5390
 
5391
5391
  const run = () => {
5392
5392
  const width = window.innerWidth;
@@ -5386,7 +5386,7 @@ var drawChart = (function (exports) {
5386
5386
  </script>
5387
5387
  <script>
5388
5388
  /*<!--*/
5389
- const data = {"version":2,"tree":{"name":"root","children":[{"name":"jsx-runtime.js","children":[{"name":"src","children":[{"uid":"8c2807f7-1","name":"h.ts"},{"uid":"8c2807f7-3","name":"jsx-runtime.ts"}]}]}],"isRoot":true},"nodeParts":{"8c2807f7-1":{"renderedLength":1813,"gzipLength":957,"brotliLength":0,"metaUid":"8c2807f7-0"},"8c2807f7-3":{"renderedLength":1103,"gzipLength":640,"brotliLength":0,"metaUid":"8c2807f7-2"}},"nodeMetas":{"8c2807f7-0":{"id":"/src/h.ts","moduleParts":{"jsx-runtime.js":"8c2807f7-1"},"imported":[],"importedBy":[{"uid":"8c2807f7-2"}]},"8c2807f7-2":{"id":"/src/jsx-runtime.ts","moduleParts":{"jsx-runtime.js":"8c2807f7-3"},"imported":[{"uid":"8c2807f7-0"}],"importedBy":[],"isEntry":true}},"env":{"rollup":"4.23.0"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
5389
+ const data = {"version":2,"tree":{"name":"root","children":[{"name":"jsx-runtime.js","children":[{"name":"src","children":[{"uid":"36dca003-1","name":"h.ts"},{"uid":"36dca003-3","name":"jsx-runtime.ts"}]}]}],"isRoot":true},"nodeParts":{"36dca003-1":{"renderedLength":1813,"gzipLength":957,"brotliLength":0,"metaUid":"36dca003-0"},"36dca003-3":{"renderedLength":1789,"gzipLength":834,"brotliLength":0,"metaUid":"36dca003-2"}},"nodeMetas":{"36dca003-0":{"id":"/src/h.ts","moduleParts":{"jsx-runtime.js":"36dca003-1"},"imported":[],"importedBy":[{"uid":"36dca003-2"}]},"36dca003-2":{"id":"/src/jsx-runtime.ts","moduleParts":{"jsx-runtime.js":"36dca003-3"},"imported":[{"uid":"36dca003-0"}],"importedBy":[],"isEntry":true}},"env":{"rollup":"4.23.0"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
5390
5390
 
5391
5391
  const run = () => {
5392
5392
  const width = window.innerWidth;
package/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { setSnapshotCapture, signal } from "@pyreon/reactivity";
1
+ import { effect, setSnapshotCapture, signal } from "@pyreon/reactivity";
2
2
 
3
3
  //#region src/lifecycle.ts
4
- const __DEV__$3 = process.env.NODE_ENV !== "production";
4
+ const __DEV__$4 = process.env.NODE_ENV !== "production";
5
5
  let _current = null;
6
6
  function setCurrentHooks(hooks) {
7
7
  _current = hooks;
@@ -40,7 +40,7 @@ function captureCallSite() {
40
40
  return "";
41
41
  }
42
42
  function warnOutsideSetup(hookName) {
43
- if (__DEV__$3 && !_current) {
43
+ if (__DEV__$4 && !_current) {
44
44
  const callSite = captureCallSite();
45
45
  const location = callSite ? `\n Called from: ${callSite}` : "";
46
46
  console.warn(`[Pyreon] ${hookName}() called outside component setup. Lifecycle hooks must be called synchronously during a component's setup function.` + location + (hookName === "onUnmount" ? "\n Hint: `provide()` internally calls onUnmount(). If you use provide(), ensure it runs during synchronous component setup — not inside effects, callbacks, or after awaits." : ""));
@@ -396,10 +396,10 @@ function flattenChildren(children) {
396
396
 
397
397
  //#endregion
398
398
  //#region src/dynamic.ts
399
- const __DEV__$2 = process.env.NODE_ENV !== "production";
399
+ const __DEV__$3 = process.env.NODE_ENV !== "production";
400
400
  function Dynamic(props) {
401
401
  const { component, children, ...rest } = props;
402
- if (__DEV__$2 && !component) console.warn("[Pyreon] <Dynamic> received a falsy `component` prop. Nothing will be rendered.");
402
+ if (__DEV__$3 && !component) console.warn("[Pyreon] <Dynamic> received a falsy `component` prop. Nothing will be rendered.");
403
403
  if (!component) return null;
404
404
  if (children === void 0) return h(component, rest);
405
405
  if (Array.isArray(children)) return h(component, rest, ...children);
@@ -450,7 +450,7 @@ function _installReactivityBridge() {
450
450
 
451
451
  //#endregion
452
452
  //#region src/error-boundary.ts
453
- const __DEV__$1 = process.env.NODE_ENV !== "production";
453
+ const __DEV__$2 = process.env.NODE_ENV !== "production";
454
454
  /**
455
455
  * ErrorBoundary — catches errors thrown by child components and renders a
456
456
  * fallback UI instead of crashing the whole tree.
@@ -475,7 +475,7 @@ const __DEV__$1 = process.env.NODE_ENV !== "production";
475
475
  * </ErrorBoundary>
476
476
  */
477
477
  function ErrorBoundary(props) {
478
- if (__DEV__$1 && typeof props.fallback !== "function") console.warn(`[Pyreon] <ErrorBoundary> expects \`fallback\` to be a function: (err, reset) => VNode. Received ${typeof props.fallback}.`);
478
+ if (__DEV__$2 && typeof props.fallback !== "function") console.warn(`[Pyreon] <ErrorBoundary> expects \`fallback\` to be a function: (err, reset) => VNode. Received ${typeof props.fallback}.`);
479
479
  const error = signal(null);
480
480
  const reset = () => error.set(null);
481
481
  const handler = (err) => {
@@ -527,6 +527,132 @@ function For(props) {
527
527
  };
528
528
  }
529
529
 
530
+ //#endregion
531
+ //#region src/ref.ts
532
+ function createRef() {
533
+ return { current: null };
534
+ }
535
+
536
+ //#endregion
537
+ //#region src/defer.ts
538
+ const __DEV__$1 = process.env.NODE_ENV !== "production";
539
+ /**
540
+ * Set up the `on="idle"` trigger. Returns a teardown function the
541
+ * caller must invoke on unmount. Browser-API access is gated by
542
+ * `typeof` checks so SSR / jsdom environments fall back to a
543
+ * `setTimeout(1)` shim. Extracted as a standalone helper so it's
544
+ * directly testable without going through `onMount` (core tests
545
+ * don't run in happy-dom; runtime-dom is where the lifecycle hooks
546
+ * live).
547
+ *
548
+ * @internal Exported for tests; not part of the stable public API.
549
+ */
550
+ function _setupIdleTrigger(startLoad) {
551
+ const ric = globalThis.requestIdleCallback;
552
+ const cic = globalThis.cancelIdleCallback;
553
+ if (typeof ric === "function") {
554
+ const id = ric(startLoad);
555
+ return () => cic?.(id);
556
+ }
557
+ const t = setTimeout(startLoad, 1);
558
+ return () => clearTimeout(t);
559
+ }
560
+ /**
561
+ * Set up the `on="visible"` trigger. Observes `el` via an
562
+ * `IntersectionObserver` and fires `startLoad` once on the first
563
+ * intersection. If `IntersectionObserver` is unavailable (jsdom)
564
+ * or `el` is null (SSR), falls back to loading immediately.
565
+ *
566
+ * Returns a teardown function — call to disconnect the observer.
567
+ *
568
+ * @internal Exported for tests; not part of the stable public API.
569
+ */
570
+ function _setupVisibleTrigger(el, startLoad, rootMargin) {
571
+ if (!el || typeof IntersectionObserver === "undefined") {
572
+ startLoad();
573
+ return () => {};
574
+ }
575
+ const obs = new IntersectionObserver((entries) => {
576
+ if (entries.some((e) => e.isIntersecting)) {
577
+ startLoad();
578
+ obs.disconnect();
579
+ }
580
+ }, { rootMargin });
581
+ obs.observe(el);
582
+ return () => obs.disconnect();
583
+ }
584
+ /**
585
+ * Lazy-load a chunk when a trigger condition is met.
586
+ *
587
+ * Three trigger modes:
588
+ * - `when={() => signal()}` — load when condition flips truthy (modal pattern)
589
+ * - `on="visible"` — load when the wrapper scrolls into view
590
+ * - `on="idle"` — load during browser idle time
591
+ *
592
+ * The chunk fetch is fired exactly once per `Defer` instance — repeated
593
+ * trigger firings after the chunk loads are no-ops.
594
+ *
595
+ * @example
596
+ * // Signal-driven (modal):
597
+ * <Defer chunk={() => import('./ConfirmDeleteModal')} when={open}>
598
+ * {Modal => <Modal onClose={() => setOpen(false)} />}
599
+ * </Defer>
600
+ *
601
+ * @example
602
+ * // Viewport-driven (below-fold):
603
+ * <Defer chunk={() => import('./Comments')} on="visible">
604
+ * {Comments => <Comments postId={id} />}
605
+ * </Defer>
606
+ *
607
+ * @example
608
+ * // Idle-driven (non-critical):
609
+ * <Defer chunk={() => import('./Analytics')} on="idle">
610
+ * {Dashboard => <Dashboard />}
611
+ * </Defer>
612
+ */
613
+ function Defer(props) {
614
+ const Loaded = signal(null);
615
+ const Failed = signal(null);
616
+ let loadStarted = false;
617
+ const startLoad = () => {
618
+ if (loadStarted) return;
619
+ loadStarted = true;
620
+ props.chunk().then((mod) => {
621
+ const Comp = typeof mod === "function" ? mod : mod.default;
622
+ if (__DEV__$1 && typeof Comp !== "function") {
623
+ console.warn("[Pyreon] <Defer> chunk() resolved without a default-exported component. Make sure your module exports default.");
624
+ return;
625
+ }
626
+ Loaded.set(Comp);
627
+ }).catch((err) => {
628
+ const wrapped = err instanceof Error ? err : new Error(String(err));
629
+ if (__DEV__$1) console.error("[Pyreon] <Defer> chunk() rejected:", wrapped);
630
+ Failed.set(wrapped);
631
+ });
632
+ };
633
+ if ("when" in props) effect(() => {
634
+ if (props.when() && !loadStarted) startLoad();
635
+ });
636
+ else if (props.on === "idle") onMount(() => _setupIdleTrigger(startLoad));
637
+ const renderContent = () => {
638
+ const err = Failed();
639
+ if (err) throw err;
640
+ const Comp = Loaded();
641
+ if (!Comp) return props.fallback ?? null;
642
+ return props.children ? props.children(Comp) : h(Comp, {});
643
+ };
644
+ if ("on" in props && props.on === "visible") {
645
+ const containerRef = createRef();
646
+ onMount(() => _setupVisibleTrigger(containerRef.current, startLoad, props.rootMargin ?? "200px"));
647
+ return h("div", {
648
+ "data-pyreon-defer": "visible",
649
+ ref: containerRef,
650
+ style: "display: contents"
651
+ }, renderContent);
652
+ }
653
+ return h(Fragment, null, renderContent);
654
+ }
655
+
530
656
  //#endregion
531
657
  //#region src/lazy.ts
532
658
  function lazy(load) {
@@ -705,6 +831,54 @@ function _rp(fn) {
705
831
  return fn;
706
832
  }
707
833
  /**
834
+ * Wrap a JSX spread source so its getter-shaped reactive props survive
835
+ * the JS-level object spread that esbuild's automatic JSX runtime emits
836
+ * for `<Comp {...source}>`.
837
+ *
838
+ * Without this wrapper, esbuild compiles `<Comp {...source}>` to
839
+ * `jsx(Comp, { ...source })` — and JS spread fires every getter on
840
+ * `source`, storing the resolved values as plain data properties. Any
841
+ * compiler-emitted reactive prop (`_rp(() => signal())` converted to a
842
+ * getter by `makeReactiveProps`) on `source` is collapsed to its
843
+ * initial value before the receiving component ever sees it.
844
+ *
845
+ * `_wrapSpread(source)` walks `source`'s own keys via `Reflect.ownKeys`
846
+ * (no getter firing) and returns a new object whose values are
847
+ * `_rp`-branded thunks `() => source[key]`. When `{ ..._wrapSpread(s) }`
848
+ * is spread by esbuild, the thunks are stored as plain data property
849
+ * values (no getters to fire), then `makeReactiveProps` in `mount.ts`
850
+ * converts the brands back into getters that lazily read from the
851
+ * original `source` — preserving the reactive subscription end-to-end.
852
+ *
853
+ * Fast path: when `source` has no getter descriptors, return the
854
+ * source object unchanged. JS spread will work correctly in that case
855
+ * because there's nothing reactive to preserve. Saves N thunk
856
+ * allocations per component render in the 99% case.
857
+ *
858
+ * Emitted by the compiler — not generally meant for hand-written code.
859
+ */
860
+ function _wrapSpread(source) {
861
+ if (!source || typeof source !== "object") return source;
862
+ const descriptors = Object.getOwnPropertyDescriptors(source);
863
+ let hasGetter = false;
864
+ for (const k in descriptors) if (descriptors[k].get) {
865
+ hasGetter = true;
866
+ break;
867
+ }
868
+ if (!hasGetter) return source;
869
+ const result = {};
870
+ for (const key of Reflect.ownKeys(source)) {
871
+ const desc = descriptors[key];
872
+ if (!desc) continue;
873
+ if (desc.get) {
874
+ const fn = () => source[key];
875
+ fn[REACTIVE_PROP] = true;
876
+ result[key] = fn;
877
+ } else result[key] = desc.value;
878
+ }
879
+ return result;
880
+ }
881
+ /**
708
882
  * Convert compiler-emitted `_rp(() => expr)` prop values into getter properties.
709
883
  *
710
884
  * Only converts functions branded with REACTIVE_PROP — user-written accessor
@@ -752,12 +926,6 @@ function createUniqueId() {
752
926
  return `pyreon-${++_idCounter}`;
753
927
  }
754
928
 
755
- //#endregion
756
- //#region src/ref.ts
757
- function createRef() {
758
- return { current: null };
759
- }
760
-
761
929
  //#endregion
762
930
  //#region src/show.ts
763
931
  function callWhen(when) {
@@ -936,5 +1104,5 @@ function Suspense(props) {
936
1104
  }
937
1105
 
938
1106
  //#endregion
939
- export { CSS_UNITLESS, Dynamic, EMPTY_PROPS, ErrorBoundary, For, ForSymbol, Fragment, Match, MatchSymbol, NATIVE_COMPAT_MARKER, Portal, PortalSymbol, REACTIVE_PROP, Show, Suspense, Switch, _rp, captureContextStack, createContext, createReactiveContext, createRef, createUniqueId, cx, defineComponent, dispatchToErrorBoundary, h, isNativeCompat, lazy, makeReactiveProps, mapArray, mergeProps, nativeCompat, normalizeStyleValue, onErrorCaptured, onMount, onUnmount, onUpdate, popContext, propagateError, provide, pushContext, registerErrorHandler, reportError, restoreContextStack, runWithHooks, setContextStackProvider, splitProps, toKebabCase, useContext, withContext };
1107
+ export { CSS_UNITLESS, Defer, Dynamic, EMPTY_PROPS, ErrorBoundary, For, ForSymbol, Fragment, Match, MatchSymbol, NATIVE_COMPAT_MARKER, Portal, PortalSymbol, REACTIVE_PROP, Show, Suspense, Switch, _rp, _wrapSpread, captureContextStack, createContext, createReactiveContext, createRef, createUniqueId, cx, defineComponent, dispatchToErrorBoundary, h, isNativeCompat, lazy, makeReactiveProps, mapArray, mergeProps, nativeCompat, normalizeStyleValue, onErrorCaptured, onMount, onUnmount, onUpdate, popContext, propagateError, provide, pushContext, registerErrorHandler, reportError, restoreContextStack, runWithHooks, setContextStackProvider, splitProps, toKebabCase, useContext, withContext };
940
1108
  //# sourceMappingURL=index.js.map
@@ -60,15 +60,35 @@ function flattenChildren(children) {
60
60
  * jsx-runtime.ts into the consumer's compilation unit.
61
61
  */
62
62
  function jsx(type, props, key) {
63
- const { children, ...rest } = props;
64
- const propsWithKey = key != null ? {
65
- ...rest,
66
- key
67
- } : rest;
68
- if (typeof type === "function") return h(type, children !== void 0 ? {
69
- ...propsWithKey,
70
- children
71
- } : propsWithKey);
63
+ const descriptors = Object.getOwnPropertyDescriptors(props);
64
+ let hasGetter = false;
65
+ for (const k in descriptors) if (descriptors[k].get) {
66
+ hasGetter = true;
67
+ break;
68
+ }
69
+ const children = props.children;
70
+ if (!hasGetter) {
71
+ const { children: _ignored, ...rest } = props;
72
+ const propsWithKey = key != null ? {
73
+ ...rest,
74
+ key
75
+ } : rest;
76
+ if (typeof type === "function") return h(type, children !== void 0 ? {
77
+ ...propsWithKey,
78
+ children
79
+ } : propsWithKey);
80
+ return h(type, propsWithKey, ...children === void 0 ? [] : Array.isArray(children) ? children : [children]);
81
+ }
82
+ const propsWithKey = {};
83
+ for (const k in descriptors) {
84
+ if (k === "children") continue;
85
+ Object.defineProperty(propsWithKey, k, descriptors[k]);
86
+ }
87
+ if (key != null) propsWithKey.key = key;
88
+ if (typeof type === "function") {
89
+ if (children !== void 0) propsWithKey.children = children;
90
+ return h(type, propsWithKey);
91
+ }
72
92
  return h(type, propsWithKey, ...children === void 0 ? [] : Array.isArray(children) ? children : [children]);
73
93
  }
74
94
  const jsxs = jsx;
@@ -60,15 +60,35 @@ function flattenChildren(children) {
60
60
  * jsx-runtime.ts into the consumer's compilation unit.
61
61
  */
62
62
  function jsx(type, props, key) {
63
- const { children, ...rest } = props;
64
- const propsWithKey = key != null ? {
65
- ...rest,
66
- key
67
- } : rest;
68
- if (typeof type === "function") return h(type, children !== void 0 ? {
69
- ...propsWithKey,
70
- children
71
- } : propsWithKey);
63
+ const descriptors = Object.getOwnPropertyDescriptors(props);
64
+ let hasGetter = false;
65
+ for (const k in descriptors) if (descriptors[k].get) {
66
+ hasGetter = true;
67
+ break;
68
+ }
69
+ const children = props.children;
70
+ if (!hasGetter) {
71
+ const { children: _ignored, ...rest } = props;
72
+ const propsWithKey = key != null ? {
73
+ ...rest,
74
+ key
75
+ } : rest;
76
+ if (typeof type === "function") return h(type, children !== void 0 ? {
77
+ ...propsWithKey,
78
+ children
79
+ } : propsWithKey);
80
+ return h(type, propsWithKey, ...children === void 0 ? [] : Array.isArray(children) ? children : [children]);
81
+ }
82
+ const propsWithKey = {};
83
+ for (const k in descriptors) {
84
+ if (k === "children") continue;
85
+ Object.defineProperty(propsWithKey, k, descriptors[k]);
86
+ }
87
+ if (key != null) propsWithKey.key = key;
88
+ if (typeof type === "function") {
89
+ if (children !== void 0) propsWithKey.children = children;
90
+ return h(type, propsWithKey);
91
+ }
72
92
  return h(type, propsWithKey, ...children === void 0 ? [] : Array.isArray(children) ? children : [children]);
73
93
  }
74
94
  const jsxs = jsx;
@@ -1011,6 +1011,89 @@ declare global {
1011
1011
  }
1012
1012
  } //# sourceMappingURL=jsx-runtime.d.ts.map
1013
1013
  //#endregion
1014
+ //#region src/defer.d.ts
1015
+ /**
1016
+ * Module shape `<Defer>` accepts from `chunk()`. Mirrors `lazy()`'s
1017
+ * contract — either an ES module with `default` export, OR a raw
1018
+ * `ComponentFn` returned directly (rare; covers re-export patterns).
1019
+ */
1020
+ type ChunkResult<P extends Props> = {
1021
+ default: ComponentFn<P>;
1022
+ } | ComponentFn<P>;
1023
+ /**
1024
+ * Trigger discriminant. Exactly ONE shape is provided:
1025
+ * - `when={() => signal()}` — load when the accessor becomes truthy
1026
+ * - `on="visible"` — load when the wrapper enters the viewport
1027
+ * - `on="idle"` — load during browser idle time
1028
+ */
1029
+ type DeferTrigger = {
1030
+ when: () => boolean;
1031
+ } | {
1032
+ on: 'visible' | 'idle';
1033
+ };
1034
+ /**
1035
+ * Set up the `on="idle"` trigger. Returns a teardown function the
1036
+ * caller must invoke on unmount. Browser-API access is gated by
1037
+ * `typeof` checks so SSR / jsdom environments fall back to a
1038
+ * `setTimeout(1)` shim. Extracted as a standalone helper so it's
1039
+ * directly testable without going through `onMount` (core tests
1040
+ * don't run in happy-dom; runtime-dom is where the lifecycle hooks
1041
+ * live).
1042
+ *
1043
+ * @internal Exported for tests; not part of the stable public API.
1044
+ */
1045
+ type DeferProps<P extends Props> = DeferTrigger & {
1046
+ /**
1047
+ * Dynamic import to lazy-load. The literal `import('./X')` is what
1048
+ * Rolldown / Vite see when emitting chunks — using a variable here
1049
+ * defeats code splitting.
1050
+ */
1051
+ chunk: () => Promise<ChunkResult<P>>;
1052
+ /**
1053
+ * Render-prop for the loaded component. Receives the resolved component
1054
+ * and returns its JSX with whatever props the parent needs to pass.
1055
+ * Optional — omitting it renders `<Comp />` with no props.
1056
+ */
1057
+ children?: (Component: ComponentFn<P>) => VNodeChild; /** Shown while the chunk is loading. Default: `null`. */
1058
+ fallback?: VNodeChild;
1059
+ /**
1060
+ * IntersectionObserver `rootMargin` for `on="visible"` mode. Default
1061
+ * `'200px'` — start loading the chunk before the wrapper is fully in
1062
+ * view so it's typically ready by the time the user scrolls to it.
1063
+ */
1064
+ rootMargin?: string;
1065
+ };
1066
+ /**
1067
+ * Lazy-load a chunk when a trigger condition is met.
1068
+ *
1069
+ * Three trigger modes:
1070
+ * - `when={() => signal()}` — load when condition flips truthy (modal pattern)
1071
+ * - `on="visible"` — load when the wrapper scrolls into view
1072
+ * - `on="idle"` — load during browser idle time
1073
+ *
1074
+ * The chunk fetch is fired exactly once per `Defer` instance — repeated
1075
+ * trigger firings after the chunk loads are no-ops.
1076
+ *
1077
+ * @example
1078
+ * // Signal-driven (modal):
1079
+ * <Defer chunk={() => import('./ConfirmDeleteModal')} when={open}>
1080
+ * {Modal => <Modal onClose={() => setOpen(false)} />}
1081
+ * </Defer>
1082
+ *
1083
+ * @example
1084
+ * // Viewport-driven (below-fold):
1085
+ * <Defer chunk={() => import('./Comments')} on="visible">
1086
+ * {Comments => <Comments postId={id} />}
1087
+ * </Defer>
1088
+ *
1089
+ * @example
1090
+ * // Idle-driven (non-critical):
1091
+ * <Defer chunk={() => import('./Analytics')} on="idle">
1092
+ * {Dashboard => <Dashboard />}
1093
+ * </Defer>
1094
+ */
1095
+ declare function Defer<P extends Props>(props: DeferProps<P>): VNode;
1096
+ //#endregion
1014
1097
  //#region src/suspense.d.ts
1015
1098
  /** Internal marker attached to lazy()-wrapped components */
1016
1099
  type LazyComponent<P extends Props = Props> = ((props: P) => VNodeChild) & {
@@ -1144,6 +1227,34 @@ declare const REACTIVE_PROP: unique symbol;
1144
1227
  * Called by the compiler for component prop expressions containing signal reads.
1145
1228
  */
1146
1229
  declare function _rp<T>(fn: () => T): () => T;
1230
+ /**
1231
+ * Wrap a JSX spread source so its getter-shaped reactive props survive
1232
+ * the JS-level object spread that esbuild's automatic JSX runtime emits
1233
+ * for `<Comp {...source}>`.
1234
+ *
1235
+ * Without this wrapper, esbuild compiles `<Comp {...source}>` to
1236
+ * `jsx(Comp, { ...source })` — and JS spread fires every getter on
1237
+ * `source`, storing the resolved values as plain data properties. Any
1238
+ * compiler-emitted reactive prop (`_rp(() => signal())` converted to a
1239
+ * getter by `makeReactiveProps`) on `source` is collapsed to its
1240
+ * initial value before the receiving component ever sees it.
1241
+ *
1242
+ * `_wrapSpread(source)` walks `source`'s own keys via `Reflect.ownKeys`
1243
+ * (no getter firing) and returns a new object whose values are
1244
+ * `_rp`-branded thunks `() => source[key]`. When `{ ..._wrapSpread(s) }`
1245
+ * is spread by esbuild, the thunks are stored as plain data property
1246
+ * values (no getters to fire), then `makeReactiveProps` in `mount.ts`
1247
+ * converts the brands back into getters that lazily read from the
1248
+ * original `source` — preserving the reactive subscription end-to-end.
1249
+ *
1250
+ * Fast path: when `source` has no getter descriptors, return the
1251
+ * source object unchanged. JS spread will work correctly in that case
1252
+ * because there's nothing reactive to preserve. Saves N thunk
1253
+ * allocations per component render in the 99% case.
1254
+ *
1255
+ * Emitted by the compiler — not generally meant for hand-written code.
1256
+ */
1257
+ declare function _wrapSpread(source: Record<string, unknown> | null | undefined): Record<string, unknown> | null | undefined;
1147
1258
  /**
1148
1259
  * Convert compiler-emitted `_rp(() => expr)` prop values into getter properties.
1149
1260
  *
@@ -1263,5 +1374,5 @@ declare function registerErrorHandler(handler: ErrorHandler): () => void;
1263
1374
  */
1264
1375
  declare function reportError(ctx: ErrorContext): void;
1265
1376
  //#endregion
1266
- export { type AnchorAttributes, type ButtonAttributes, type CSSProperties, CSS_UNITLESS, type ClassValue, type CleanupFn, type ComponentFn, type ComponentInstance, type Context, type ContextSnapshot, Dynamic, type DynamicProps, EMPTY_PROPS, ErrorBoundary, type ErrorContext, type ErrorHandler, type ExtractProps, For, type ForProps, ForSymbol, type FormAttributes, Fragment, type HigherOrderComponent, type ImgAttributes, type InputAttributes, type LazyComponent, type LifecycleHooks, Match, type MatchProps, MatchSymbol, NATIVE_COMPAT_MARKER, type NativeItem, Portal, type PortalProps, PortalSymbol, type Props, type PyreonHTMLAttributes, REACTIVE_PROP, type ReactiveContext, type Ref, type RefCallback, type RefProp, type SelectAttributes, Show, type ShowProps, type StyleValue, Suspense, type SvgAttributes, Switch, type SwitchProps, type TargetedEvent, type TextareaAttributes, type VNode, type VNodeChild, type VNodeChildAccessor, type VNodeChildAtom, _rp, captureContextStack, createContext, createReactiveContext, createRef, createUniqueId, cx, defineComponent, dispatchToErrorBoundary, h, isNativeCompat, lazy, makeReactiveProps, mapArray, mergeProps, nativeCompat, normalizeStyleValue, onErrorCaptured, onMount, onUnmount, onUpdate, popContext, propagateError, provide, pushContext, registerErrorHandler, reportError, restoreContextStack, runWithHooks, setContextStackProvider, splitProps, toKebabCase, useContext, withContext };
1377
+ export { type AnchorAttributes, type ButtonAttributes, type CSSProperties, CSS_UNITLESS, type ClassValue, type CleanupFn, type ComponentFn, type ComponentInstance, type Context, type ContextSnapshot, Defer, type DeferProps, Dynamic, type DynamicProps, EMPTY_PROPS, ErrorBoundary, type ErrorContext, type ErrorHandler, type ExtractProps, For, type ForProps, ForSymbol, type FormAttributes, Fragment, type HigherOrderComponent, type ImgAttributes, type InputAttributes, type LazyComponent, type LifecycleHooks, Match, type MatchProps, MatchSymbol, NATIVE_COMPAT_MARKER, type NativeItem, Portal, type PortalProps, PortalSymbol, type Props, type PyreonHTMLAttributes, REACTIVE_PROP, type ReactiveContext, type Ref, type RefCallback, type RefProp, type SelectAttributes, Show, type ShowProps, type StyleValue, Suspense, type SvgAttributes, Switch, type SwitchProps, type TargetedEvent, type TextareaAttributes, type VNode, type VNodeChild, type VNodeChildAccessor, type VNodeChildAtom, _rp, _wrapSpread, captureContextStack, createContext, createReactiveContext, createRef, createUniqueId, cx, defineComponent, dispatchToErrorBoundary, h, isNativeCompat, lazy, makeReactiveProps, mapArray, mergeProps, nativeCompat, normalizeStyleValue, onErrorCaptured, onMount, onUnmount, onUpdate, popContext, propagateError, provide, pushContext, registerErrorHandler, reportError, restoreContextStack, runWithHooks, setContextStackProvider, splitProps, toKebabCase, useContext, withContext };
1267
1378
  //# sourceMappingURL=index2.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyreon/core",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "Core component model and lifecycle for Pyreon",
5
5
  "homepage": "https://github.com/pyreon/pyreon/tree/main/packages/core#readme",
6
6
  "bugs": {
@@ -53,7 +53,7 @@
53
53
  "prepublishOnly": "bun run build"
54
54
  },
55
55
  "dependencies": {
56
- "@pyreon/reactivity": "^0.16.0"
56
+ "@pyreon/reactivity": "^0.18.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@pyreon/manifest": "0.13.1"