@pyreon/core 0.14.0 → 0.15.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.
@@ -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":"fe312da0-1","name":"lifecycle.ts"},{"uid":"fe312da0-3","name":"component.ts"},{"uid":"fe312da0-5","name":"context.ts"},{"uid":"fe312da0-7","name":"h.ts"},{"uid":"fe312da0-9","name":"dynamic.ts"},{"uid":"fe312da0-11","name":"telemetry.ts"},{"uid":"fe312da0-13","name":"error-boundary.ts"},{"uid":"fe312da0-15","name":"for.ts"},{"uid":"fe312da0-17","name":"lazy.ts"},{"uid":"fe312da0-19","name":"map-array.ts"},{"uid":"fe312da0-21","name":"portal.ts"},{"uid":"fe312da0-23","name":"props.ts"},{"uid":"fe312da0-25","name":"ref.ts"},{"uid":"fe312da0-27","name":"show.ts"},{"uid":"fe312da0-29","name":"style.ts"},{"uid":"fe312da0-31","name":"suspense.ts"},{"uid":"fe312da0-33","name":"index.ts"}]}]}],"isRoot":true},"nodeParts":{"fe312da0-1":{"renderedLength":3070,"gzipLength":1306,"brotliLength":0,"metaUid":"fe312da0-0"},"fe312da0-3":{"renderedLength":1471,"gzipLength":693,"brotliLength":0,"metaUid":"fe312da0-2"},"fe312da0-5":{"renderedLength":2925,"gzipLength":1260,"brotliLength":0,"metaUid":"fe312da0-4"},"fe312da0-7":{"renderedLength":1082,"gzipLength":597,"brotliLength":0,"metaUid":"fe312da0-6"},"fe312da0-9":{"renderedLength":339,"gzipLength":245,"brotliLength":0,"metaUid":"fe312da0-8"},"fe312da0-11":{"renderedLength":570,"gzipLength":346,"brotliLength":0,"metaUid":"fe312da0-10"},"fe312da0-13":{"renderedLength":1622,"gzipLength":822,"brotliLength":0,"metaUid":"fe312da0-12"},"fe312da0-15":{"renderedLength":700,"gzipLength":478,"brotliLength":0,"metaUid":"fe312da0-14"},"fe312da0-17":{"renderedLength":461,"gzipLength":273,"brotliLength":0,"metaUid":"fe312da0-16"},"fe312da0-19":{"renderedLength":1018,"gzipLength":571,"brotliLength":0,"metaUid":"fe312da0-18"},"fe312da0-21":{"renderedLength":818,"gzipLength":491,"brotliLength":0,"metaUid":"fe312da0-20"},"fe312da0-23":{"renderedLength":4339,"gzipLength":1641,"brotliLength":0,"metaUid":"fe312da0-22"},"fe312da0-25":{"renderedLength":86,"gzipLength":98,"brotliLength":0,"metaUid":"fe312da0-24"},"fe312da0-27":{"renderedLength":1892,"gzipLength":810,"brotliLength":0,"metaUid":"fe312da0-26"},"fe312da0-29":{"renderedLength":1858,"gzipLength":825,"brotliLength":0,"metaUid":"fe312da0-28"},"fe312da0-31":{"renderedLength":1096,"gzipLength":603,"brotliLength":0,"metaUid":"fe312da0-30"},"fe312da0-33":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"fe312da0-32"}},"nodeMetas":{"fe312da0-0":{"id":"/src/lifecycle.ts","moduleParts":{"index.js":"fe312da0-1"},"imported":[],"importedBy":[{"uid":"fe312da0-32"},{"uid":"fe312da0-2"},{"uid":"fe312da0-4"},{"uid":"fe312da0-12"}]},"fe312da0-2":{"id":"/src/component.ts","moduleParts":{"index.js":"fe312da0-3"},"imported":[{"uid":"fe312da0-0"}],"importedBy":[{"uid":"fe312da0-32"},{"uid":"fe312da0-12"}]},"fe312da0-4":{"id":"/src/context.ts","moduleParts":{"index.js":"fe312da0-5"},"imported":[{"uid":"fe312da0-0"}],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-6":{"id":"/src/h.ts","moduleParts":{"index.js":"fe312da0-7"},"imported":[],"importedBy":[{"uid":"fe312da0-32"},{"uid":"fe312da0-8"},{"uid":"fe312da0-16"},{"uid":"fe312da0-30"}]},"fe312da0-8":{"id":"/src/dynamic.ts","moduleParts":{"index.js":"fe312da0-9"},"imported":[{"uid":"fe312da0-6"}],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-10":{"id":"/src/telemetry.ts","moduleParts":{"index.js":"fe312da0-11"},"imported":[],"importedBy":[{"uid":"fe312da0-32"},{"uid":"fe312da0-12"}]},"fe312da0-12":{"id":"/src/error-boundary.ts","moduleParts":{"index.js":"fe312da0-13"},"imported":[{"uid":"fe312da0-34"},{"uid":"fe312da0-2"},{"uid":"fe312da0-0"},{"uid":"fe312da0-10"}],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-14":{"id":"/src/for.ts","moduleParts":{"index.js":"fe312da0-15"},"imported":[],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-16":{"id":"/src/lazy.ts","moduleParts":{"index.js":"fe312da0-17"},"imported":[{"uid":"fe312da0-34"},{"uid":"fe312da0-6"}],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-18":{"id":"/src/map-array.ts","moduleParts":{"index.js":"fe312da0-19"},"imported":[],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-20":{"id":"/src/portal.ts","moduleParts":{"index.js":"fe312da0-21"},"imported":[],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-22":{"id":"/src/props.ts","moduleParts":{"index.js":"fe312da0-23"},"imported":[],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-24":{"id":"/src/ref.ts","moduleParts":{"index.js":"fe312da0-25"},"imported":[],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-26":{"id":"/src/show.ts","moduleParts":{"index.js":"fe312da0-27"},"imported":[],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-28":{"id":"/src/style.ts","moduleParts":{"index.js":"fe312da0-29"},"imported":[],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-30":{"id":"/src/suspense.ts","moduleParts":{"index.js":"fe312da0-31"},"imported":[{"uid":"fe312da0-6"}],"importedBy":[{"uid":"fe312da0-32"}]},"fe312da0-32":{"id":"/src/index.ts","moduleParts":{"index.js":"fe312da0-33"},"imported":[{"uid":"fe312da0-2"},{"uid":"fe312da0-4"},{"uid":"fe312da0-8"},{"uid":"fe312da0-12"},{"uid":"fe312da0-14"},{"uid":"fe312da0-6"},{"uid":"fe312da0-16"},{"uid":"fe312da0-0"},{"uid":"fe312da0-18"},{"uid":"fe312da0-20"},{"uid":"fe312da0-22"},{"uid":"fe312da0-24"},{"uid":"fe312da0-26"},{"uid":"fe312da0-28"},{"uid":"fe312da0-30"},{"uid":"fe312da0-10"}],"importedBy":[],"isEntry":true},"fe312da0-34":{"id":"@pyreon/reactivity","moduleParts":{},"imported":[],"importedBy":[{"uid":"fe312da0-12"},{"uid":"fe312da0-16"}]}},"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":"824f9243-1","name":"lifecycle.ts"},{"uid":"824f9243-3","name":"component.ts"},{"uid":"824f9243-5","name":"compat-marker.ts"},{"uid":"824f9243-7","name":"context.ts"},{"uid":"824f9243-9","name":"h.ts"},{"uid":"824f9243-11","name":"dynamic.ts"},{"uid":"824f9243-13","name":"telemetry.ts"},{"uid":"824f9243-15","name":"error-boundary.ts"},{"uid":"824f9243-17","name":"for.ts"},{"uid":"824f9243-19","name":"lazy.ts"},{"uid":"824f9243-21","name":"map-array.ts"},{"uid":"824f9243-23","name":"portal.ts"},{"uid":"824f9243-25","name":"props.ts"},{"uid":"824f9243-27","name":"ref.ts"},{"uid":"824f9243-29","name":"show.ts"},{"uid":"824f9243-31","name":"style.ts"},{"uid":"824f9243-33","name":"suspense.ts"},{"uid":"824f9243-35","name":"index.ts"}]}]}],"isRoot":true},"nodeParts":{"824f9243-1":{"renderedLength":3078,"gzipLength":1313,"brotliLength":0,"metaUid":"824f9243-0"},"824f9243-3":{"renderedLength":1471,"gzipLength":693,"brotliLength":0,"metaUid":"824f9243-2"},"824f9243-5":{"renderedLength":3173,"gzipLength":1409,"brotliLength":0,"metaUid":"824f9243-4"},"824f9243-7":{"renderedLength":3600,"gzipLength":1542,"brotliLength":0,"metaUid":"824f9243-6"},"824f9243-9":{"renderedLength":1082,"gzipLength":597,"brotliLength":0,"metaUid":"824f9243-8"},"824f9243-11":{"renderedLength":490,"gzipLength":291,"brotliLength":0,"metaUid":"824f9243-10"},"824f9243-13":{"renderedLength":1208,"gzipLength":633,"brotliLength":0,"metaUid":"824f9243-12"},"824f9243-15":{"renderedLength":1659,"gzipLength":842,"brotliLength":0,"metaUid":"824f9243-14"},"824f9243-17":{"renderedLength":700,"gzipLength":478,"brotliLength":0,"metaUid":"824f9243-16"},"824f9243-19":{"renderedLength":461,"gzipLength":273,"brotliLength":0,"metaUid":"824f9243-18"},"824f9243-21":{"renderedLength":1018,"gzipLength":571,"brotliLength":0,"metaUid":"824f9243-20"},"824f9243-23":{"renderedLength":818,"gzipLength":491,"brotliLength":0,"metaUid":"824f9243-22"},"824f9243-25":{"renderedLength":4339,"gzipLength":1641,"brotliLength":0,"metaUid":"824f9243-24"},"824f9243-27":{"renderedLength":86,"gzipLength":98,"brotliLength":0,"metaUid":"824f9243-26"},"824f9243-29":{"renderedLength":2022,"gzipLength":854,"brotliLength":0,"metaUid":"824f9243-28"},"824f9243-31":{"renderedLength":1858,"gzipLength":825,"brotliLength":0,"metaUid":"824f9243-30"},"824f9243-33":{"renderedLength":1104,"gzipLength":614,"brotliLength":0,"metaUid":"824f9243-32"},"824f9243-35":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"824f9243-34"}},"nodeMetas":{"824f9243-0":{"id":"/src/lifecycle.ts","moduleParts":{"index.js":"824f9243-1"},"imported":[],"importedBy":[{"uid":"824f9243-34"},{"uid":"824f9243-2"},{"uid":"824f9243-6"},{"uid":"824f9243-14"}]},"824f9243-2":{"id":"/src/component.ts","moduleParts":{"index.js":"824f9243-3"},"imported":[{"uid":"824f9243-0"}],"importedBy":[{"uid":"824f9243-34"},{"uid":"824f9243-14"}]},"824f9243-4":{"id":"/src/compat-marker.ts","moduleParts":{"index.js":"824f9243-5"},"imported":[],"importedBy":[{"uid":"824f9243-34"},{"uid":"824f9243-14"}]},"824f9243-6":{"id":"/src/context.ts","moduleParts":{"index.js":"824f9243-7"},"imported":[{"uid":"824f9243-36"},{"uid":"824f9243-0"}],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-8":{"id":"/src/h.ts","moduleParts":{"index.js":"824f9243-9"},"imported":[],"importedBy":[{"uid":"824f9243-34"},{"uid":"824f9243-10"},{"uid":"824f9243-18"},{"uid":"824f9243-32"}]},"824f9243-10":{"id":"/src/dynamic.ts","moduleParts":{"index.js":"824f9243-11"},"imported":[{"uid":"824f9243-8"}],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-12":{"id":"/src/telemetry.ts","moduleParts":{"index.js":"824f9243-13"},"imported":[],"importedBy":[{"uid":"824f9243-34"},{"uid":"824f9243-14"}]},"824f9243-14":{"id":"/src/error-boundary.ts","moduleParts":{"index.js":"824f9243-15"},"imported":[{"uid":"824f9243-36"},{"uid":"824f9243-4"},{"uid":"824f9243-2"},{"uid":"824f9243-0"},{"uid":"824f9243-12"}],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-16":{"id":"/src/for.ts","moduleParts":{"index.js":"824f9243-17"},"imported":[],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-18":{"id":"/src/lazy.ts","moduleParts":{"index.js":"824f9243-19"},"imported":[{"uid":"824f9243-36"},{"uid":"824f9243-8"}],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-20":{"id":"/src/map-array.ts","moduleParts":{"index.js":"824f9243-21"},"imported":[],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-22":{"id":"/src/portal.ts","moduleParts":{"index.js":"824f9243-23"},"imported":[],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-24":{"id":"/src/props.ts","moduleParts":{"index.js":"824f9243-25"},"imported":[],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-26":{"id":"/src/ref.ts","moduleParts":{"index.js":"824f9243-27"},"imported":[],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-28":{"id":"/src/show.ts","moduleParts":{"index.js":"824f9243-29"},"imported":[],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-30":{"id":"/src/style.ts","moduleParts":{"index.js":"824f9243-31"},"imported":[],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-32":{"id":"/src/suspense.ts","moduleParts":{"index.js":"824f9243-33"},"imported":[{"uid":"824f9243-8"}],"importedBy":[{"uid":"824f9243-34"}]},"824f9243-34":{"id":"/src/index.ts","moduleParts":{"index.js":"824f9243-35"},"imported":[{"uid":"824f9243-2"},{"uid":"824f9243-4"},{"uid":"824f9243-6"},{"uid":"824f9243-10"},{"uid":"824f9243-14"},{"uid":"824f9243-16"},{"uid":"824f9243-8"},{"uid":"824f9243-18"},{"uid":"824f9243-0"},{"uid":"824f9243-20"},{"uid":"824f9243-22"},{"uid":"824f9243-24"},{"uid":"824f9243-26"},{"uid":"824f9243-28"},{"uid":"824f9243-30"},{"uid":"824f9243-32"},{"uid":"824f9243-12"}],"importedBy":[],"isEntry":true},"824f9243-36":{"id":"@pyreon/reactivity","moduleParts":{},"imported":[],"importedBy":[{"uid":"824f9243-6"},{"uid":"824f9243-14"},{"uid":"824f9243-18"}]}},"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":"457db80a-1","name":"h.ts"},{"uid":"457db80a-3","name":"jsx-runtime.ts"},{"uid":"457db80a-5","name":"jsx-dev-runtime.ts"}]}]}],"isRoot":true},"nodeParts":{"457db80a-1":{"renderedLength":1082,"gzipLength":597,"brotliLength":0,"metaUid":"457db80a-0"},"457db80a-3":{"renderedLength":657,"gzipLength":403,"brotliLength":0,"metaUid":"457db80a-2"},"457db80a-5":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"457db80a-4"}},"nodeMetas":{"457db80a-0":{"id":"/src/h.ts","moduleParts":{"jsx-dev-runtime.js":"457db80a-1"},"imported":[],"importedBy":[{"uid":"457db80a-2"}]},"457db80a-2":{"id":"/src/jsx-runtime.ts","moduleParts":{"jsx-dev-runtime.js":"457db80a-3"},"imported":[{"uid":"457db80a-0"}],"importedBy":[{"uid":"457db80a-4"}]},"457db80a-4":{"id":"/src/jsx-dev-runtime.ts","moduleParts":{"jsx-dev-runtime.js":"457db80a-5"},"imported":[{"uid":"457db80a-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":"3319ebff-1","name":"h.ts"},{"uid":"3319ebff-3","name":"jsx-runtime.ts"},{"uid":"3319ebff-5","name":"jsx-dev-runtime.ts"}]}]}],"isRoot":true},"nodeParts":{"3319ebff-1":{"renderedLength":1082,"gzipLength":597,"brotliLength":0,"metaUid":"3319ebff-0"},"3319ebff-3":{"renderedLength":1103,"gzipLength":640,"brotliLength":0,"metaUid":"3319ebff-2"},"3319ebff-5":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"3319ebff-4"}},"nodeMetas":{"3319ebff-0":{"id":"/src/h.ts","moduleParts":{"jsx-dev-runtime.js":"3319ebff-1"},"imported":[],"importedBy":[{"uid":"3319ebff-2"}]},"3319ebff-2":{"id":"/src/jsx-runtime.ts","moduleParts":{"jsx-dev-runtime.js":"3319ebff-3"},"imported":[{"uid":"3319ebff-0"}],"importedBy":[{"uid":"3319ebff-4"}]},"3319ebff-4":{"id":"/src/jsx-dev-runtime.ts","moduleParts":{"jsx-dev-runtime.js":"3319ebff-5"},"imported":[{"uid":"3319ebff-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":"a8d14f92-1","name":"h.ts"},{"uid":"a8d14f92-3","name":"jsx-runtime.ts"}]}]}],"isRoot":true},"nodeParts":{"a8d14f92-1":{"renderedLength":1082,"gzipLength":597,"brotliLength":0,"metaUid":"a8d14f92-0"},"a8d14f92-3":{"renderedLength":657,"gzipLength":403,"brotliLength":0,"metaUid":"a8d14f92-2"}},"nodeMetas":{"a8d14f92-0":{"id":"/src/h.ts","moduleParts":{"jsx-runtime.js":"a8d14f92-1"},"imported":[],"importedBy":[{"uid":"a8d14f92-2"}]},"a8d14f92-2":{"id":"/src/jsx-runtime.ts","moduleParts":{"jsx-runtime.js":"a8d14f92-3"},"imported":[{"uid":"a8d14f92-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":"843e1a91-1","name":"h.ts"},{"uid":"843e1a91-3","name":"jsx-runtime.ts"}]}]}],"isRoot":true},"nodeParts":{"843e1a91-1":{"renderedLength":1082,"gzipLength":597,"brotliLength":0,"metaUid":"843e1a91-0"},"843e1a91-3":{"renderedLength":1103,"gzipLength":640,"brotliLength":0,"metaUid":"843e1a91-2"}},"nodeMetas":{"843e1a91-0":{"id":"/src/h.ts","moduleParts":{"jsx-runtime.js":"843e1a91-1"},"imported":[],"importedBy":[{"uid":"843e1a91-2"}]},"843e1a91-2":{"id":"/src/jsx-runtime.ts","moduleParts":{"jsx-runtime.js":"843e1a91-3"},"imported":[{"uid":"843e1a91-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 { signal } from "@pyreon/reactivity";
1
+ import { setSnapshotCapture, signal } from "@pyreon/reactivity";
2
2
 
3
3
  //#region src/lifecycle.ts
4
- const __DEV__$3 = import.meta.env?.DEV === true;
4
+ const __DEV__$3 = process.env.NODE_ENV !== "production";
5
5
  let _current = null;
6
6
  function setCurrentHooks(hooks) {
7
7
  _current = hooks;
@@ -157,6 +157,80 @@ function dispatchToErrorBoundary(err) {
157
157
  return handler ? handler(err) : false;
158
158
  }
159
159
 
160
+ //#endregion
161
+ //#region src/compat-marker.ts
162
+ /**
163
+ * Compat-mode native-component marker.
164
+ *
165
+ * Pyreon ships compat layers (`@pyreon/{react,preact,vue,solid}-compat`) that
166
+ * wrap every JSX-called component function to emulate that source framework's
167
+ * render-on-state-change semantics. That wrapping is correct for user code
168
+ * (the whole point of compat mode) but corrupts Pyreon framework components
169
+ * — those manage their own reactivity via `provide()` / signals / lifecycle
170
+ * hooks, and wrapping them runs their setup body inside the compat layer's
171
+ * render context instead of Pyreon's, breaking `provide()` and
172
+ * `onMount()` / `onUnmount()` calls.
173
+ *
174
+ * Framework components opt out of compat wrapping by setting a well-known
175
+ * registry symbol (`Symbol.for('pyreon:native-compat')`) on the function.
176
+ * The compat layer reads that symbol and routes marked components straight
177
+ * through Pyreon's `h()` mount path. The symbol is registry-shared, so no
178
+ * import direction between framework and compat is implied — both sides
179
+ * reference the same global symbol via the helpers exported here.
180
+ *
181
+ * Audience: framework-package authors writing JSX components in `@pyreon/*`
182
+ * packages whose setup body uses `provide()` / lifecycle hooks / signal
183
+ * subscriptions. Wrap exported components with `nativeCompat()`. One line
184
+ * per export site; zero runtime cost beyond a single property write at
185
+ * module load.
186
+ */
187
+ /**
188
+ * The well-known registry symbol that marks a component as a Pyreon native
189
+ * framework component. Compat layers check this symbol to decide whether to
190
+ * skip their `wrapCompatComponent` call.
191
+ *
192
+ * Exported for advanced cases where a caller needs to test the marker
193
+ * directly (most callers should use `isNativeCompat()`).
194
+ */
195
+ const NATIVE_COMPAT_MARKER = Symbol.for("pyreon:native-compat");
196
+ /**
197
+ * Mark a Pyreon framework component as "self-managing" — compat layers will
198
+ * skip their React/Vue/Solid/Preact-style wrapping and route the component
199
+ * directly through Pyreon's mount path. Use on every `@pyreon/*` JSX
200
+ * component whose setup body uses `provide()`, lifecycle hooks
201
+ * (`onMount` / `onUnmount`), signal-driven reactivity, or any other Pyreon
202
+ * native pattern that depends on the active component-setup frame.
203
+ *
204
+ * Idempotent: re-applying the marker is a no-op. Non-function inputs pass
205
+ * through unchanged so callers don't have to typecheck before wrapping.
206
+ *
207
+ * @example
208
+ * import { nativeCompat, provide } from '@pyreon/core'
209
+ *
210
+ * export const RouterView = nativeCompat(function RouterView(props) {
211
+ * provide(RouterContext, ...)
212
+ * return <div data-pyreon-router-view>{children}</div>
213
+ * })
214
+ */
215
+ function nativeCompat(fn) {
216
+ if (typeof fn === "function") fn[NATIVE_COMPAT_MARKER] = true;
217
+ return fn;
218
+ }
219
+ /**
220
+ * Read whether a component has been marked as a Pyreon native framework
221
+ * component. Compat-layer code calls this from its `jsx()` to decide whether
222
+ * to wrap or pass through.
223
+ *
224
+ * @example
225
+ * import { isNativeCompat } from '@pyreon/core'
226
+ *
227
+ * if (isNativeCompat(type)) return h(type, props)
228
+ * return wrapCompatComponent(type)(props)
229
+ */
230
+ function isNativeCompat(fn) {
231
+ return typeof fn === "function" && fn[NATIVE_COMPAT_MARKER] === true;
232
+ }
233
+
160
234
  //#endregion
161
235
  //#region src/context.ts
162
236
  /**
@@ -191,7 +265,7 @@ function setContextStackProvider(fn) {
191
265
  function getStack() {
192
266
  return _stackProvider();
193
267
  }
194
- import.meta.env?.DEV;
268
+ process.env.NODE_ENV;
195
269
  function pushContext(values) {
196
270
  getStack().push(values);
197
271
  }
@@ -248,18 +322,31 @@ function captureContextStack() {
248
322
  }
249
323
  /**
250
324
  * Execute `fn()` with a previously captured context stack active.
251
- * Restores the original stack after `fn()` completes (even on throw).
325
+ *
326
+ * After `fn()` returns, removes ONLY the snapshot frames this call pushed
327
+ * — anything `fn()` itself pushed (typically provider frames from
328
+ * `provide()` calls during component mount) stays on the stack so
329
+ * subsequent reactive re-runs (e.g. `_bind` text bindings,
330
+ * `renderEffect` callbacks) can still find ancestor providers via
331
+ * `useContext`. Pre-fix this method was `stack.length = savedLength`,
332
+ * which destructively truncated provider frames pushed during mount —
333
+ * silently breaking `useMode()` / `useTheme()` / `useRouter()` etc. on
334
+ * every signal-driven update under a `mountReactive` boundary.
252
335
  */
253
336
  function restoreContextStack(snapshot, fn) {
254
337
  const stack = getStack();
255
- const savedLength = stack.length;
338
+ const insertIndex = stack.length;
256
339
  for (const frame of snapshot) stack.push(frame);
257
340
  try {
258
341
  return fn();
259
342
  } finally {
260
- stack.length = savedLength;
343
+ stack.splice(insertIndex, snapshot.length);
261
344
  }
262
345
  }
346
+ setSnapshotCapture({
347
+ capture: () => captureContextStack(),
348
+ restore: (snap, fn) => restoreContextStack(snap, fn)
349
+ });
263
350
 
264
351
  //#endregion
265
352
  //#region src/h.ts
@@ -295,12 +382,14 @@ function flattenChildren(children) {
295
382
 
296
383
  //#endregion
297
384
  //#region src/dynamic.ts
298
- const __DEV__$2 = import.meta.env?.DEV === true;
385
+ const __DEV__$2 = process.env.NODE_ENV !== "production";
299
386
  function Dynamic(props) {
300
- const { component, ...rest } = props;
387
+ const { component, children, ...rest } = props;
301
388
  if (__DEV__$2 && !component) console.warn("[Pyreon] <Dynamic> received a falsy `component` prop. Nothing will be rendered.");
302
389
  if (!component) return null;
303
- return h(component, rest);
390
+ if (children === void 0) return h(component, rest);
391
+ if (Array.isArray(children)) return h(component, rest, ...children);
392
+ return h(component, rest, children);
304
393
  }
305
394
 
306
395
  //#endregion
@@ -308,10 +397,17 @@ function Dynamic(props) {
308
397
  let _handlers = [];
309
398
  /**
310
399
  * Register a global error handler. Called whenever a component throws in any
311
- * lifecycle phase. Returns an unregister function.
400
+ * lifecycle phase, OR an effect throws in `@pyreon/reactivity`. Returns an
401
+ * unregister function.
402
+ *
403
+ * Also installs a `globalThis.__pyreon_report_error__` bridge so the
404
+ * reactivity package (which can't depend on core) can forward effect errors
405
+ * into the same telemetry pipeline. Pre-fix the two surfaces were
406
+ * disconnected — Sentry/Datadog wiring missed effect-thrown errors.
312
407
  */
313
408
  function registerErrorHandler(handler) {
314
409
  _handlers.push(handler);
410
+ _installReactivityBridge();
315
411
  return () => {
316
412
  _handlers = _handlers.filter((h) => h !== handler);
317
413
  };
@@ -325,10 +421,22 @@ function reportError(ctx) {
325
421
  h(ctx);
326
422
  } catch {}
327
423
  }
424
+ const _bridgeHost = globalThis;
425
+ function _installReactivityBridge() {
426
+ if (_bridgeHost.__pyreon_report_error__) return;
427
+ _bridgeHost.__pyreon_report_error__ = (err, phase) => {
428
+ reportError({
429
+ component: "Effect",
430
+ phase,
431
+ error: err,
432
+ timestamp: Date.now()
433
+ });
434
+ };
435
+ }
328
436
 
329
437
  //#endregion
330
438
  //#region src/error-boundary.ts
331
- const __DEV__$1 = import.meta.env?.DEV === true;
439
+ const __DEV__$1 = process.env.NODE_ENV !== "production";
332
440
  /**
333
441
  * ErrorBoundary — catches errors thrown by child components and renders a
334
442
  * fallback UI instead of crashing the whole tree.
@@ -376,6 +484,7 @@ function ErrorBoundary(props) {
376
484
  return typeof ch === "function" ? ch() : ch;
377
485
  };
378
486
  }
487
+ nativeCompat(ErrorBoundary);
379
488
 
380
489
  //#endregion
381
490
  //#region src/for.ts
@@ -637,6 +746,9 @@ function createRef() {
637
746
 
638
747
  //#endregion
639
748
  //#region src/show.ts
749
+ function callWhen(when) {
750
+ return typeof when === "function" ? when() : when;
751
+ }
640
752
  /**
641
753
  * Conditionally render children based on a reactive condition.
642
754
  *
@@ -651,7 +763,7 @@ function createRef() {
651
763
  * )
652
764
  */
653
765
  function Show(props) {
654
- return (() => props.when() ? props.children ?? null : props.fallback ?? null);
766
+ return (() => callWhen(props.when) ? props.children ?? null : props.fallback ?? null);
655
767
  }
656
768
  /**
657
769
  * A branch inside `<Switch>`. Renders when `when()` is truthy.
@@ -691,7 +803,8 @@ function Switch(props) {
691
803
  const branches = normalizeBranches(props.children);
692
804
  for (const branch of branches) {
693
805
  if (!isMatchVNode(branch)) continue;
694
- if (branch.props.when()) return resolveMatchChildren(branch);
806
+ const matchProps = branch.props;
807
+ if (callWhen(matchProps.when)) return resolveMatchChildren(branch);
695
808
  }
696
809
  return props.fallback ?? null;
697
810
  });
@@ -781,7 +894,7 @@ function normalizeStyleValue(key, value) {
781
894
 
782
895
  //#endregion
783
896
  //#region src/suspense.ts
784
- const __DEV__ = import.meta.env?.DEV === true;
897
+ const __DEV__ = process.env.NODE_ENV !== "production";
785
898
  /**
786
899
  * Suspense — shows `fallback` while a lazy child component is still loading.
787
900
  *
@@ -809,5 +922,5 @@ function Suspense(props) {
809
922
  }
810
923
 
811
924
  //#endregion
812
- export { CSS_UNITLESS, Dynamic, EMPTY_PROPS, ErrorBoundary, For, ForSymbol, Fragment, Match, MatchSymbol, Portal, PortalSymbol, REACTIVE_PROP, Show, Suspense, Switch, _rp, captureContextStack, createContext, createReactiveContext, createRef, createUniqueId, cx, defineComponent, dispatchToErrorBoundary, h, lazy, makeReactiveProps, mapArray, mergeProps, normalizeStyleValue, onErrorCaptured, onMount, onUnmount, onUpdate, popContext, propagateError, provide, pushContext, registerErrorHandler, reportError, restoreContextStack, runWithHooks, setContextStackProvider, splitProps, toKebabCase, useContext, withContext };
925
+ 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 };
813
926
  //# sourceMappingURL=index.js.map
@@ -37,6 +37,13 @@ function flattenChildren(children) {
37
37
  * When tsconfig has `"jsxImportSource": "@pyreon/core"`, the TS/bundler compiler
38
38
  * rewrites JSX to imports from this file automatically:
39
39
  * <div class="x" /> → jsx("div", { class: "x" })
40
+ *
41
+ * The triple-slash reference above makes this file self-declare its DOM-lib
42
+ * dependency. Without it, any consumer whose tsconfig has `lib: ["ESNext"]`
43
+ * (no DOM) — e.g. backend-only packages like @pyreon/cli — fails to typecheck
44
+ * once `@pyreon/core` becomes resolvable from their dependency graph (e.g. via
45
+ * a transitive devDep), because tsc auto-resolves jsxImportSource and pulls
46
+ * jsx-runtime.ts into the consumer's compilation unit.
40
47
  */
41
48
  function jsx(type, props, key) {
42
49
  const { children, ...rest } = props;
@@ -37,6 +37,13 @@ function flattenChildren(children) {
37
37
  * When tsconfig has `"jsxImportSource": "@pyreon/core"`, the TS/bundler compiler
38
38
  * rewrites JSX to imports from this file automatically:
39
39
  * <div class="x" /> → jsx("div", { class: "x" })
40
+ *
41
+ * The triple-slash reference above makes this file self-declare its DOM-lib
42
+ * dependency. Without it, any consumer whose tsconfig has `lib: ["ESNext"]`
43
+ * (no DOM) — e.g. backend-only packages like @pyreon/cli — fails to typecheck
44
+ * once `@pyreon/core` becomes resolvable from their dependency graph (e.g. via
45
+ * a transitive devDep), because tsc auto-resolves jsxImportSource and pulls
46
+ * jsx-runtime.ts into the consumer's compilation unit.
40
47
  */
41
48
  function jsx(type, props, key) {
42
49
  const { children, ...rest } = props;
@@ -75,6 +75,74 @@ declare function propagateError(err: unknown, hooks: LifecycleHooks): boolean;
75
75
  */
76
76
  declare function dispatchToErrorBoundary(err: unknown): boolean;
77
77
  //#endregion
78
+ //#region src/compat-marker.d.ts
79
+ /**
80
+ * Compat-mode native-component marker.
81
+ *
82
+ * Pyreon ships compat layers (`@pyreon/{react,preact,vue,solid}-compat`) that
83
+ * wrap every JSX-called component function to emulate that source framework's
84
+ * render-on-state-change semantics. That wrapping is correct for user code
85
+ * (the whole point of compat mode) but corrupts Pyreon framework components
86
+ * — those manage their own reactivity via `provide()` / signals / lifecycle
87
+ * hooks, and wrapping them runs their setup body inside the compat layer's
88
+ * render context instead of Pyreon's, breaking `provide()` and
89
+ * `onMount()` / `onUnmount()` calls.
90
+ *
91
+ * Framework components opt out of compat wrapping by setting a well-known
92
+ * registry symbol (`Symbol.for('pyreon:native-compat')`) on the function.
93
+ * The compat layer reads that symbol and routes marked components straight
94
+ * through Pyreon's `h()` mount path. The symbol is registry-shared, so no
95
+ * import direction between framework and compat is implied — both sides
96
+ * reference the same global symbol via the helpers exported here.
97
+ *
98
+ * Audience: framework-package authors writing JSX components in `@pyreon/*`
99
+ * packages whose setup body uses `provide()` / lifecycle hooks / signal
100
+ * subscriptions. Wrap exported components with `nativeCompat()`. One line
101
+ * per export site; zero runtime cost beyond a single property write at
102
+ * module load.
103
+ */
104
+ /**
105
+ * The well-known registry symbol that marks a component as a Pyreon native
106
+ * framework component. Compat layers check this symbol to decide whether to
107
+ * skip their `wrapCompatComponent` call.
108
+ *
109
+ * Exported for advanced cases where a caller needs to test the marker
110
+ * directly (most callers should use `isNativeCompat()`).
111
+ */
112
+ declare const NATIVE_COMPAT_MARKER: symbol;
113
+ /**
114
+ * Mark a Pyreon framework component as "self-managing" — compat layers will
115
+ * skip their React/Vue/Solid/Preact-style wrapping and route the component
116
+ * directly through Pyreon's mount path. Use on every `@pyreon/*` JSX
117
+ * component whose setup body uses `provide()`, lifecycle hooks
118
+ * (`onMount` / `onUnmount`), signal-driven reactivity, or any other Pyreon
119
+ * native pattern that depends on the active component-setup frame.
120
+ *
121
+ * Idempotent: re-applying the marker is a no-op. Non-function inputs pass
122
+ * through unchanged so callers don't have to typecheck before wrapping.
123
+ *
124
+ * @example
125
+ * import { nativeCompat, provide } from '@pyreon/core'
126
+ *
127
+ * export const RouterView = nativeCompat(function RouterView(props) {
128
+ * provide(RouterContext, ...)
129
+ * return <div data-pyreon-router-view>{children}</div>
130
+ * })
131
+ */
132
+ declare function nativeCompat<T>(fn: T): T;
133
+ /**
134
+ * Read whether a component has been marked as a Pyreon native framework
135
+ * component. Compat-layer code calls this from its `jsx()` to decide whether
136
+ * to wrap or pass through.
137
+ *
138
+ * @example
139
+ * import { isNativeCompat } from '@pyreon/core'
140
+ *
141
+ * if (isNativeCompat(type)) return h(type, props)
142
+ * return wrapCompatComponent(type)(props)
143
+ */
144
+ declare function isNativeCompat(fn: unknown): boolean;
145
+ //#endregion
78
146
  //#region src/context.d.ts
79
147
  /**
80
148
  * Provide / inject — like React context or Vue provide/inject.
@@ -155,7 +223,16 @@ type ContextSnapshot = Map<symbol, unknown>[];
155
223
  declare function captureContextStack(): ContextSnapshot;
156
224
  /**
157
225
  * Execute `fn()` with a previously captured context stack active.
158
- * Restores the original stack after `fn()` completes (even on throw).
226
+ *
227
+ * After `fn()` returns, removes ONLY the snapshot frames this call pushed
228
+ * — anything `fn()` itself pushed (typically provider frames from
229
+ * `provide()` calls during component mount) stays on the stack so
230
+ * subsequent reactive re-runs (e.g. `_bind` text bindings,
231
+ * `renderEffect` callbacks) can still find ancestor providers via
232
+ * `useContext`. Pre-fix this method was `stack.length = savedLength`,
233
+ * which destructively truncated provider frames pushed during mount —
234
+ * silently breaking `useMode()` / `useTheme()` / `useRouter()` etc. on
235
+ * every signal-driven update under a `mountReactive` boundary.
159
236
  */
160
237
  declare function restoreContextStack<T>(snapshot: ContextSnapshot, fn: () => T): T;
161
238
  //#endregion
@@ -365,6 +442,7 @@ interface PyreonHTMLAttributes<E extends Element = HTMLElement> {
365
442
  } | undefined;
366
443
  onClick?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
367
444
  onDblClick?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
445
+ onDoubleClick?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
368
446
  onMouseDown?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
369
447
  onMouseUp?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
370
448
  onMouseEnter?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
@@ -428,7 +506,7 @@ interface InputAttributes extends PyreonHTMLAttributes<HTMLInputElement> {
428
506
  defaultChecked?: boolean | undefined;
429
507
  placeholder?: string | (() => string) | undefined;
430
508
  disabled?: boolean | (() => boolean) | undefined;
431
- readOnly?: boolean | undefined;
509
+ readOnly?: boolean | (() => boolean) | undefined;
432
510
  required?: boolean | (() => boolean) | undefined;
433
511
  min?: string | number | undefined;
434
512
  max?: string | number | undefined;
@@ -477,7 +555,7 @@ interface TextareaAttributes extends PyreonHTMLAttributes<HTMLTextAreaElement> {
477
555
  defaultValue?: string | undefined;
478
556
  placeholder?: string | (() => string) | undefined;
479
557
  disabled?: boolean | (() => boolean) | undefined;
480
- readOnly?: boolean | undefined;
558
+ readOnly?: boolean | (() => boolean) | undefined;
481
559
  required?: boolean | (() => boolean) | undefined;
482
560
  rows?: number | undefined;
483
561
  cols?: number | undefined;
@@ -1031,8 +1109,15 @@ declare function createUniqueId(): string;
1031
1109
  //#endregion
1032
1110
  //#region src/show.d.ts
1033
1111
  interface ShowProps extends Props {
1034
- /** Accessor — children render when truthy, fallback when falsy. */
1035
- when: () => unknown;
1112
+ /**
1113
+ * Truthy condition. Accepts a value or an accessor.
1114
+ *
1115
+ * Use an accessor (`() => signal()`) for reactive conditions.
1116
+ * Bare values are accepted for static cases and as a defensive normalization
1117
+ * for cases where the compiler's signal auto-call has already invoked
1118
+ * a signal at the prop site (e.g. `when={mySignal}` becomes `when={mySignal()}`).
1119
+ */
1120
+ when: unknown | (() => unknown);
1036
1121
  fallback?: VNodeChild;
1037
1122
  children?: VNodeChild;
1038
1123
  }
@@ -1051,8 +1136,8 @@ interface ShowProps extends Props {
1051
1136
  */
1052
1137
  declare function Show(props: ShowProps): VNode | null;
1053
1138
  interface MatchProps extends Props {
1054
- /** Accessor this branch renders when truthy. */
1055
- when: () => unknown;
1139
+ /** Truthy condition. Accepts a value or an accessor — see {@link ShowProps.when}. */
1140
+ when: unknown | (() => unknown);
1056
1141
  children?: VNodeChild;
1057
1142
  }
1058
1143
  /**
@@ -1075,6 +1160,10 @@ declare const MatchSymbol: unique symbol;
1075
1160
  /**
1076
1161
  * Error telemetry — hook into Pyreon's error reporting for Sentry, Datadog, etc.
1077
1162
  *
1163
+ * Captures errors from ALL lifecycle phases including reactive effects.
1164
+ * `effect()` errors thrown by `@pyreon/reactivity` are bridged through a
1165
+ * globalThis sink (no upward import — reactivity doesn't depend on core).
1166
+ *
1078
1167
  * @example
1079
1168
  * import { registerErrorHandler } from "@pyreon/core"
1080
1169
  * import * as Sentry from "@sentry/browser"
@@ -1086,7 +1175,7 @@ declare const MatchSymbol: unique symbol;
1086
1175
  * })
1087
1176
  */
1088
1177
  interface ErrorContext {
1089
- /** Component function name, or "Anonymous" */
1178
+ /** Component function name, "Anonymous", or "Effect" for reactive effects */
1090
1179
  component: string;
1091
1180
  /** Lifecycle phase where the error occurred */
1092
1181
  phase: 'setup' | 'render' | 'mount' | 'unmount' | 'effect';
@@ -1100,7 +1189,13 @@ interface ErrorContext {
1100
1189
  type ErrorHandler = (ctx: ErrorContext) => void;
1101
1190
  /**
1102
1191
  * Register a global error handler. Called whenever a component throws in any
1103
- * lifecycle phase. Returns an unregister function.
1192
+ * lifecycle phase, OR an effect throws in `@pyreon/reactivity`. Returns an
1193
+ * unregister function.
1194
+ *
1195
+ * Also installs a `globalThis.__pyreon_report_error__` bridge so the
1196
+ * reactivity package (which can't depend on core) can forward effect errors
1197
+ * into the same telemetry pipeline. Pre-fix the two surfaces were
1198
+ * disconnected — Sentry/Datadog wiring missed effect-thrown errors.
1104
1199
  */
1105
1200
  declare function registerErrorHandler(handler: ErrorHandler): () => void;
1106
1201
  /**
@@ -1109,5 +1204,5 @@ declare function registerErrorHandler(handler: ErrorHandler): () => void;
1109
1204
  */
1110
1205
  declare function reportError(ctx: ErrorContext): void;
1111
1206
  //#endregion
1112
- 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, 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, lazy, makeReactiveProps, mapArray, mergeProps, normalizeStyleValue, onErrorCaptured, onMount, onUnmount, onUpdate, popContext, propagateError, provide, pushContext, registerErrorHandler, reportError, restoreContextStack, runWithHooks, setContextStackProvider, splitProps, toKebabCase, useContext, withContext };
1207
+ 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 };
1113
1208
  //# sourceMappingURL=index2.d.ts.map
@@ -135,6 +135,7 @@ interface PyreonHTMLAttributes<E extends Element = HTMLElement> {
135
135
  } | undefined;
136
136
  onClick?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
137
137
  onDblClick?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
138
+ onDoubleClick?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
138
139
  onMouseDown?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
139
140
  onMouseUp?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
140
141
  onMouseEnter?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
@@ -198,7 +199,7 @@ interface InputAttributes extends PyreonHTMLAttributes<HTMLInputElement> {
198
199
  defaultChecked?: boolean | undefined;
199
200
  placeholder?: string | (() => string) | undefined;
200
201
  disabled?: boolean | (() => boolean) | undefined;
201
- readOnly?: boolean | undefined;
202
+ readOnly?: boolean | (() => boolean) | undefined;
202
203
  required?: boolean | (() => boolean) | undefined;
203
204
  min?: string | number | undefined;
204
205
  max?: string | number | undefined;
@@ -247,7 +248,7 @@ interface TextareaAttributes extends PyreonHTMLAttributes<HTMLTextAreaElement> {
247
248
  defaultValue?: string | undefined;
248
249
  placeholder?: string | (() => string) | undefined;
249
250
  disabled?: boolean | (() => boolean) | undefined;
250
- readOnly?: boolean | undefined;
251
+ readOnly?: boolean | (() => boolean) | undefined;
251
252
  required?: boolean | (() => boolean) | undefined;
252
253
  rows?: number | undefined;
253
254
  cols?: number | undefined;
@@ -135,6 +135,7 @@ interface PyreonHTMLAttributes<E extends Element = HTMLElement> {
135
135
  } | undefined;
136
136
  onClick?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
137
137
  onDblClick?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
138
+ onDoubleClick?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
138
139
  onMouseDown?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
139
140
  onMouseUp?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
140
141
  onMouseEnter?: ((e: TargetedEvent<E, MouseEvent>) => void) | undefined;
@@ -198,7 +199,7 @@ interface InputAttributes extends PyreonHTMLAttributes<HTMLInputElement> {
198
199
  defaultChecked?: boolean | undefined;
199
200
  placeholder?: string | (() => string) | undefined;
200
201
  disabled?: boolean | (() => boolean) | undefined;
201
- readOnly?: boolean | undefined;
202
+ readOnly?: boolean | (() => boolean) | undefined;
202
203
  required?: boolean | (() => boolean) | undefined;
203
204
  min?: string | number | undefined;
204
205
  max?: string | number | undefined;
@@ -247,7 +248,7 @@ interface TextareaAttributes extends PyreonHTMLAttributes<HTMLTextAreaElement> {
247
248
  defaultValue?: string | undefined;
248
249
  placeholder?: string | (() => string) | undefined;
249
250
  disabled?: boolean | (() => boolean) | undefined;
250
- readOnly?: boolean | undefined;
251
+ readOnly?: boolean | (() => boolean) | undefined;
251
252
  required?: boolean | (() => boolean) | undefined;
252
253
  rows?: number | undefined;
253
254
  cols?: number | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyreon/core",
3
- "version": "0.14.0",
3
+ "version": "0.15.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": {
@@ -14,6 +14,7 @@
14
14
  },
15
15
  "files": [
16
16
  "lib",
17
+ "!lib/**/*.map",
17
18
  "src",
18
19
  "README.md",
19
20
  "LICENSE"
@@ -52,7 +53,7 @@
52
53
  "prepublishOnly": "bun run build"
53
54
  },
54
55
  "dependencies": {
55
- "@pyreon/reactivity": "^0.14.0"
56
+ "@pyreon/reactivity": "^0.15.0"
56
57
  },
57
58
  "devDependencies": {
58
59
  "@pyreon/manifest": "0.13.1"