@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.
- package/lib/analysis/index.js.html +1 -1
- package/lib/analysis/jsx-dev-runtime.js.html +1 -1
- package/lib/analysis/jsx-runtime.js.html +1 -1
- package/lib/index.js +128 -15
- package/lib/jsx-dev-runtime.js +7 -0
- package/lib/jsx-runtime.js +7 -0
- package/lib/types/index.d.ts +105 -10
- package/lib/types/jsx-dev-runtime.d.ts +3 -2
- package/lib/types/jsx-runtime.d.ts +3 -2
- package/package.json +3 -2
- package/src/compat-marker.ts +79 -0
- package/src/context.ts +38 -7
- package/src/dynamic.ts +16 -5
- package/src/error-boundary.ts +15 -2
- package/src/index.ts +1 -0
- package/src/jsx-runtime.ts +20 -2
- package/src/lifecycle.ts +1 -2
- package/src/manifest.ts +43 -3
- package/src/show.ts +19 -6
- package/src/suspense.ts +1 -2
- package/src/telemetry.ts +30 -2
- package/src/tests/compat-marker.test.ts +96 -0
- package/src/tests/dynamic.test.ts +33 -1
- package/src/tests/manifest-snapshot.test.ts +6 -1
- package/src/tests/native-marker-error-boundary.test.ts +12 -0
- package/src/tests/show.test.ts +76 -0
- package/src/tests/telemetry.test.ts +61 -0
- package/src/types.ts +2 -0
- package/lib/index.js.map +0 -1
- package/lib/jsx-dev-runtime.js.map +0 -1
- package/lib/jsx-runtime.js.map +0 -1
- package/lib/types/index.d.ts.map +0 -1
- package/lib/types/jsx-dev-runtime.d.ts.map +0 -1
- package/lib/types/jsx-runtime.d.ts.map +0 -1
|
@@ -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":"
|
|
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":"
|
|
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":"
|
|
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 =
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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__ =
|
|
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
|
package/lib/jsx-dev-runtime.js
CHANGED
|
@@ -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;
|
package/lib/jsx-runtime.js
CHANGED
|
@@ -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;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
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
|
-
/**
|
|
1035
|
-
|
|
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
|
-
/**
|
|
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 "
|
|
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
|
|
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.
|
|
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.
|
|
56
|
+
"@pyreon/reactivity": "^0.15.0"
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
59
|
"@pyreon/manifest": "0.13.1"
|