@askrjs/askr 0.0.52 → 0.0.53
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 +5 -1
- package/dist/{runtime/scheduler.js → access-Bg4RJNC8.js} +182 -9
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.js +103 -0
- package/dist/{common/attr-names.js → attr-names-CjhzmHOn.js} +1 -1
- package/dist/benchmark.d.ts +6 -2
- package/dist/benchmark.js +63 -11
- package/dist/boot/index.d.ts +61 -2
- package/dist/boot/index.js +1 -203
- package/dist/boot-j2KoN6ss.js +647 -0
- package/dist/cleanup-COv77su2.js +487 -0
- package/dist/component-internal-B3z7GXlD.js +614 -0
- package/dist/component-lifecycle-CO4hXlP4.js +357 -0
- package/dist/{runtime/component-scope.js → component-scope-CC3cojX9.js} +8 -1
- package/dist/component-scope-CvPba6O6.d.ts +12 -0
- package/dist/components/index.d.ts +17 -2
- package/dist/components/index.js +39 -1
- package/dist/compose-ref-Cc_YkUpM.js +92 -0
- package/dist/{foundations/utilities/compose-ref.d.ts → compose-ref-Cizq72-x.d.ts} +1 -1
- package/dist/control/index.d.ts +1 -3
- package/dist/control/index.js +1 -3
- package/dist/control-BQvNVfAd.d.ts +436 -0
- package/dist/control-BYyLTFyw.js +165 -0
- package/dist/control-Bf4Wkdvv.d.ts +9 -0
- package/dist/{common/control.js → control-DhFRTIoE.js} +1 -1
- package/dist/data/index.d.ts +2 -6
- package/dist/data/index.js +4 -5
- package/dist/data-DnxnDxD-.js +559 -0
- package/dist/{data/data-runtime.js → data-runtime-SJ1BSUvk.js} +32 -31
- package/dist/deferred-lKE8uR0z.js +386 -0
- package/dist/{runtime/effect.js → effect-BwnIvLah.js} +4 -4
- package/dist/fastlane-Dw8SOBr9.js +343 -0
- package/dist/for-internal-BKf_Tnv1.js +1563 -0
- package/dist/foundations/icon/index.d.ts +68 -2
- package/dist/foundations/icon/index.js +85 -1
- package/dist/foundations/index.d.ts +2 -5
- package/dist/foundations/index.js +2 -5
- package/dist/foundations/interactions/index.d.ts +264 -6
- package/dist/foundations/interactions/index.js +1 -6
- package/dist/foundations/state/index.d.ts +32 -1
- package/dist/foundations/state/index.js +78 -1
- package/dist/foundations/structures/index.d.ts +2 -7
- package/dist/foundations/structures/index.js +2 -7
- package/dist/foundations/utilities/index.d.ts +2 -6
- package/dist/foundations/utilities/index.js +2 -5
- package/dist/fx/index.d.ts +190 -3
- package/dist/fx/index.js +454 -4
- package/dist/index-31Uoz_NS.d.ts +239 -0
- package/dist/index-Bki2rqcr.d.ts +233 -0
- package/dist/index-BnU0NPwM.d.ts +101 -0
- package/dist/index-D73jgYx1.d.ts +48 -0
- package/dist/{runtime/runtime.d.ts → index-R2JJIbM-.d.ts} +31 -8
- package/dist/index-SJXJkssx.d.ts +44 -0
- package/dist/index.d.ts +8 -13
- package/dist/index.js +150 -15
- package/dist/interactions-w7gQN4ha.js +280 -0
- package/dist/{data/invalidation-listeners.js → invalidation-listeners-Des3AHYs.js} +1 -1
- package/dist/{common/props.d.ts → jsx-CP0gmYwJ.d.ts} +17 -5
- package/dist/{common/jsx.js → jsx-CUpRxrLH.js} +1 -1
- package/dist/jsx-dev-runtime.d.ts +2 -4
- package/dist/jsx-dev-runtime.js +7 -5
- package/dist/jsx-runtime-92bV2hSa.d.ts +34 -0
- package/dist/jsx-runtime-BVVgDSdq.d.ts +1 -0
- package/dist/jsx-runtime.d.ts +2 -35
- package/dist/jsx-runtime.js +11 -5
- package/dist/{runtime/lifecycle-operations.js → lifecycle-operations-D9va7GOU.js} +4 -5
- package/dist/navigate-BVDCzOuB.d.ts +34 -0
- package/dist/navigate-CmPLSXyw.js +1449 -0
- package/dist/{runtime/portal.js → portal-CyU3Ucf2.js} +33 -36
- package/dist/query-registry-CQIT4mXr.js +73 -0
- package/dist/{common/render-context.js → render-context-Clw3rFiO.js} +14 -6
- package/dist/renderer-DzPjeLby.js +6197 -0
- package/dist/{runtime/resource-operation.js → resource-operation-CEzfpnDk.js} +118 -15
- package/dist/resources/index.d.ts +42 -3
- package/dist/resources/index.js +3 -4
- package/dist/{common/route-activity.js → route-activity-CNJfpwx-.js} +1 -1
- package/dist/route-matching-vJpvLVbX.js +515 -0
- package/dist/router/index.d.ts +166 -14
- package/dist/router/index.js +150 -12
- package/dist/{common/router.d.ts → router-CeYvjj5_.d.ts} +72 -28
- package/dist/{common/router-internal.js → router-internal-BC0w1_xk.js} +1 -1
- package/dist/{runtime/scheduler.d.ts → scheduler-CmLO4Dfm.d.ts} +1 -3
- package/dist/{runtime/selector.js → selector-DafVYzV4.js} +34 -11
- package/dist/{runtime/snapshot-source.js → snapshot-source-BB42xgwb.js} +1 -1
- package/dist/ssg/index.d.ts +252 -4
- package/dist/ssg/index.js +857 -1
- package/dist/ssr/index.d.ts +225 -8
- package/dist/ssr/index.js +3 -6
- package/dist/{common/ssr.js → ssr-CbQO5xd3.js} +1 -1
- package/dist/ssr-D3t80Rc0.js +1413 -0
- package/dist/{runtime/state.js → state-DPl8lffD.js} +3 -5
- package/dist/structures-DUB3HchX.js +221 -0
- package/dist/testing/index.d.ts +3 -2
- package/dist/testing/index.js +2 -5
- package/dist/{jsx/types.d.ts → types-DnQVG4ZY.d.ts} +2 -5
- package/dist/{foundations/utilities/use-id.js → utilities-C_CGX4Dz.js} +1 -1
- package/dist/{ssr/verify-hydration.js → verify-hydration-io9ahUeq.js} +2 -2
- package/dist/{common/vnode.js → vnode-CGMJYPMB.js} +2 -2
- package/package.json +12 -7
- package/dist/bench/components/benchmark-row.d.ts +0 -20
- package/dist/bench/components/benchmark-row.js +0 -40
- package/dist/bench/components/benchmark-table.js +0 -23
- package/dist/bin/askr-ssg.d.ts +0 -27
- package/dist/bin/askr-ssg.js +0 -186
- package/dist/boot/hydration.js +0 -139
- package/dist/boot/root-lifecycle.d.ts +0 -18
- package/dist/boot/root-lifecycle.js +0 -209
- package/dist/boot/route-startup.js +0 -54
- package/dist/boot/types.d.ts +0 -61
- package/dist/common/component.d.ts +0 -18
- package/dist/common/control.d.ts +0 -12
- package/dist/common/dom-range.d.ts +0 -13
- package/dist/common/env.js +0 -41
- package/dist/common/error-boundary.d.ts +0 -15
- package/dist/common/invariant.js +0 -15
- package/dist/common/jsx.d.ts +0 -22
- package/dist/common/logger.js +0 -34
- package/dist/common/promise.js +0 -6
- package/dist/common/ssr-errors.d.ts +0 -10
- package/dist/common/ssr-errors.js +0 -14
- package/dist/common/ssr.d.ts +0 -41
- package/dist/common/vnode.d.ts +0 -21
- package/dist/components/error-boundary.d.ts +0 -14
- package/dist/components/error-boundary.js +0 -41
- package/dist/components/link.d.ts +0 -68
- package/dist/components/link.js +0 -74
- package/dist/control/case.d.ts +0 -18
- package/dist/control/case.js +0 -68
- package/dist/control/for.d.ts +0 -23
- package/dist/control/for.js +0 -61
- package/dist/control/shared.d.ts +0 -8
- package/dist/control/shared.js +0 -18
- package/dist/control/show.d.ts +0 -14
- package/dist/control/show.js +0 -32
- package/dist/data/data-runtime.d.ts +0 -27
- package/dist/data/invalidation.d.ts +0 -8
- package/dist/data/invalidation.js +0 -25
- package/dist/data/mutation-cell.d.ts +0 -27
- package/dist/data/mutation-cell.js +0 -133
- package/dist/data/query-cell.d.ts +0 -47
- package/dist/data/query-cell.js +0 -324
- package/dist/data/query-key.js +0 -40
- package/dist/data/shared.js +0 -20
- package/dist/data/testing.js +0 -2
- package/dist/data/types.d.ts +0 -160
- package/dist/foundations/icon/icon.d.ts +0 -52
- package/dist/foundations/icon/icon.js +0 -86
- package/dist/foundations/icon/icon.types.d.ts +0 -21
- package/dist/foundations/interactions/dismissable.d.ts +0 -71
- package/dist/foundations/interactions/dismissable.js +0 -24
- package/dist/foundations/interactions/focusable.d.ts +0 -21
- package/dist/foundations/interactions/focusable.js +0 -16
- package/dist/foundations/interactions/hoverable.d.ts +0 -25
- package/dist/foundations/interactions/hoverable.js +0 -13
- package/dist/foundations/interactions/interaction-policy.d.ts +0 -49
- package/dist/foundations/interactions/interaction-policy.js +0 -120
- package/dist/foundations/interactions/pressable.d.ts +0 -60
- package/dist/foundations/interactions/pressable.js +0 -49
- package/dist/foundations/interactions/roving-focus.d.ts +0 -51
- package/dist/foundations/interactions/roving-focus.js +0 -69
- package/dist/foundations/state/controllable.d.ts +0 -32
- package/dist/foundations/state/controllable.js +0 -80
- package/dist/foundations/structures/collection.d.ts +0 -51
- package/dist/foundations/structures/collection.js +0 -49
- package/dist/foundations/structures/layer.d.ts +0 -80
- package/dist/foundations/structures/layer.js +0 -79
- package/dist/foundations/structures/layout.d.ts +0 -32
- package/dist/foundations/structures/layout.js +0 -11
- package/dist/foundations/structures/portal.d.ts +0 -2
- package/dist/foundations/structures/portal.js +0 -3
- package/dist/foundations/structures/presence.d.ts +0 -36
- package/dist/foundations/structures/presence.js +0 -37
- package/dist/foundations/structures/slot.d.ts +0 -34
- package/dist/foundations/structures/slot.js +0 -39
- package/dist/foundations/utilities/aria.d.ts +0 -15
- package/dist/foundations/utilities/aria.js +0 -15
- package/dist/foundations/utilities/compose-handlers.d.ts +0 -36
- package/dist/foundations/utilities/compose-handlers.js +0 -18
- package/dist/foundations/utilities/compose-ref.js +0 -16
- package/dist/foundations/utilities/event-types.d.ts +0 -19
- package/dist/foundations/utilities/merge-props.d.ts +0 -4
- package/dist/foundations/utilities/merge-props.js +0 -47
- package/dist/foundations/utilities/use-id.d.ts +0 -31
- package/dist/fx/fx.d.ts +0 -32
- package/dist/fx/fx.js +0 -211
- package/dist/fx/noop.js +0 -7
- package/dist/fx/timing.d.ts +0 -158
- package/dist/fx/timing.js +0 -241
- package/dist/jsx/index.d.ts +0 -2
- package/dist/jsx/index.js +0 -4
- package/dist/jsx/types.js +0 -2
- package/dist/jsx/utils.d.ts +0 -4
- package/dist/jsx/utils.js +0 -17
- package/dist/jsx-runtime2.d.ts +0 -3
- package/dist/jsx-runtime2.js +0 -4
- package/dist/renderer/attributes.js +0 -254
- package/dist/renderer/boundaries.js +0 -142
- package/dist/renderer/boundary-materialization.js +0 -72
- package/dist/renderer/boundary-range-adoption.js +0 -76
- package/dist/renderer/boundary-range-sync.js +0 -101
- package/dist/renderer/boundary-state.js +0 -50
- package/dist/renderer/child-shape.js +0 -83
- package/dist/renderer/children-fastpath.js +0 -149
- package/dist/renderer/children.js +0 -158
- package/dist/renderer/cleanup.js +0 -267
- package/dist/renderer/component-host-cleanup.js +0 -143
- package/dist/renderer/component-host-instances.js +0 -116
- package/dist/renderer/component-host-replacement.js +0 -105
- package/dist/renderer/component-host-results.js +0 -138
- package/dist/renderer/component-host.js +0 -172
- package/dist/renderer/dom-host.js +0 -11
- package/dist/renderer/dom-internal.js +0 -243
- package/dist/renderer/dom-range.js +0 -161
- package/dist/renderer/dom.js +0 -11
- package/dist/renderer/element-children.js +0 -359
- package/dist/renderer/env.js +0 -2
- package/dist/renderer/error-boundary-dom.js +0 -86
- package/dist/renderer/evaluate-dom-range.js +0 -84
- package/dist/renderer/evaluate-reconcile.js +0 -257
- package/dist/renderer/evaluate.js +0 -95
- package/dist/renderer/fastpath.js +0 -142
- package/dist/renderer/for-commit-dom-map.js +0 -71
- package/dist/renderer/for-commit-removal.js +0 -27
- package/dist/renderer/for-commit-reorder.js +0 -87
- package/dist/renderer/for-commit.js +0 -442
- package/dist/renderer/hydration-boundaries.js +0 -60
- package/dist/renderer/hydration-listener-transaction.js +0 -49
- package/dist/renderer/index.js +0 -39
- package/dist/renderer/intrinsic-blueprint-analysis.js +0 -202
- package/dist/renderer/intrinsic-blueprint-bindings.js +0 -152
- package/dist/renderer/intrinsic-blueprint-materialization.js +0 -100
- package/dist/renderer/intrinsic-blueprint.js +0 -30
- package/dist/renderer/intrinsic-hydration-adoption.js +0 -66
- package/dist/renderer/keyed-children.js +0 -26
- package/dist/renderer/keyed.js +0 -167
- package/dist/renderer/namespaces.js +0 -21
- package/dist/renderer/prop-bindings.js +0 -315
- package/dist/renderer/reactive-child-dom.js +0 -139
- package/dist/renderer/reactive-child-sources.js +0 -182
- package/dist/renderer/reactive-children.js +0 -303
- package/dist/renderer/reconcile-commit.js +0 -36
- package/dist/renderer/reconcile-fastpaths.js +0 -100
- package/dist/renderer/reconcile-resolution.js +0 -163
- package/dist/renderer/reconcile.js +0 -37
- package/dist/renderer/retained-element-rollback.js +0 -288
- package/dist/renderer/stable-patch.js +0 -80
- package/dist/renderer/static-reuse.js +0 -94
- package/dist/renderer/types.js +0 -2
- package/dist/renderer/utils.js +0 -265
- package/dist/router/access.js +0 -34
- package/dist/router/activity.d.ts +0 -9
- package/dist/router/activity.js +0 -85
- package/dist/router/authoring.d.ts +0 -21
- package/dist/router/authoring.js +0 -196
- package/dist/router/internal-types.d.ts +0 -30
- package/dist/router/lazy.d.ts +0 -18
- package/dist/router/lazy.js +0 -50
- package/dist/router/manifest.d.ts +0 -9
- package/dist/router/manifest.js +0 -47
- package/dist/router/match.js +0 -120
- package/dist/router/navigate.d.ts +0 -10
- package/dist/router/navigate.js +0 -73
- package/dist/router/navigation-registry.d.ts +0 -31
- package/dist/router/navigation-registry.js +0 -103
- package/dist/router/navigation-scroll.d.ts +0 -13
- package/dist/router/navigation-scroll.js +0 -91
- package/dist/router/navigation-targets.d.ts +0 -30
- package/dist/router/navigation-targets.js +0 -634
- package/dist/router/policy.d.ts +0 -27
- package/dist/router/policy.js +0 -130
- package/dist/router/rendering.d.ts +0 -9
- package/dist/router/rendering.js +0 -47
- package/dist/router/resolution.d.ts +0 -3
- package/dist/router/resolution.js +0 -84
- package/dist/router/route-context.js +0 -77
- package/dist/router/route-matching.d.ts +0 -19
- package/dist/router/route-matching.js +0 -173
- package/dist/router/route-query.d.ts +0 -16
- package/dist/router/route-query.js +0 -45
- package/dist/router/route.d.ts +0 -8
- package/dist/router/route.js +0 -10
- package/dist/router/store.d.ts +0 -49
- package/dist/router/store.js +0 -169
- package/dist/router/testing.js +0 -4
- package/dist/runtime/access.d.ts +0 -19
- package/dist/runtime/access.js +0 -43
- package/dist/runtime/child-scope.d.ts +0 -41
- package/dist/runtime/child-scope.js +0 -134
- package/dist/runtime/component-cleanup.d.ts +0 -15
- package/dist/runtime/component-cleanup.js +0 -68
- package/dist/runtime/component-commit.js +0 -167
- package/dist/runtime/component-facade.d.ts +0 -5
- package/dist/runtime/component-facade.js +0 -6
- package/dist/runtime/component-internal.d.ts +0 -105
- package/dist/runtime/component-internal.js +0 -237
- package/dist/runtime/component-lifecycle.d.ts +0 -10
- package/dist/runtime/component-lifecycle.js +0 -33
- package/dist/runtime/component-scope.d.ts +0 -54
- package/dist/runtime/component.d.ts +0 -5
- package/dist/runtime/component.js +0 -6
- package/dist/runtime/context.d.ts +0 -72
- package/dist/runtime/context.js +0 -236
- package/dist/runtime/control.d.ts +0 -62
- package/dist/runtime/control.js +0 -239
- package/dist/runtime/derive.d.ts +0 -16
- package/dist/runtime/derive.js +0 -140
- package/dist/runtime/dev-namespace.d.ts +0 -30
- package/dist/runtime/dev-namespace.js +0 -64
- package/dist/runtime/effect.d.ts +0 -35
- package/dist/runtime/error-boundary.d.ts +0 -4
- package/dist/runtime/error-boundary.js +0 -29
- package/dist/runtime/events.d.ts +0 -58
- package/dist/runtime/events.js +0 -201
- package/dist/runtime/execution-model.d.ts +0 -6
- package/dist/runtime/execution-model.js +0 -13
- package/dist/runtime/fastlane.d.ts +0 -33
- package/dist/runtime/fastlane.js +0 -173
- package/dist/runtime/for-bench.d.ts +0 -40
- package/dist/runtime/for-bench.js +0 -13
- package/dist/runtime/for-internal.d.ts +0 -106
- package/dist/runtime/for-internal.js +0 -285
- package/dist/runtime/for-reconcile.d.ts +0 -7
- package/dist/runtime/for-reconcile.js +0 -442
- package/dist/runtime/for-scopes.d.ts +0 -26
- package/dist/runtime/for-scopes.js +0 -280
- package/dist/runtime/for-signals.d.ts +0 -39
- package/dist/runtime/for-signals.js +0 -213
- package/dist/runtime/for-types.d.ts +0 -8
- package/dist/runtime/for.d.ts +0 -4
- package/dist/runtime/for.js +0 -5
- package/dist/runtime/index.d.ts +0 -24
- package/dist/runtime/index.js +0 -33
- package/dist/runtime/lifecycle-batch.d.ts +0 -59
- package/dist/runtime/lifecycle-batch.js +0 -178
- package/dist/runtime/lifecycle-operation-settlement.d.ts +0 -5
- package/dist/runtime/lifecycle-operation-settlement.js +0 -51
- package/dist/runtime/lifecycle-operations.d.ts +0 -30
- package/dist/runtime/operations.d.ts +0 -3
- package/dist/runtime/operations.js +0 -3
- package/dist/runtime/perf-metrics.d.ts +0 -27
- package/dist/runtime/perf-metrics.js +0 -6
- package/dist/runtime/portal.d.ts +0 -21
- package/dist/runtime/readable.d.ts +0 -34
- package/dist/runtime/readable.js +0 -183
- package/dist/runtime/resource-cell.js +0 -112
- package/dist/runtime/resource-operation.d.ts +0 -12
- package/dist/runtime/runtime.js +0 -57
- package/dist/runtime/selector-store.js +0 -22
- package/dist/runtime/selector.d.ts +0 -10
- package/dist/runtime/snapshot-source.d.ts +0 -9
- package/dist/runtime/state.d.ts +0 -54
- package/dist/ssg/batch-render.js +0 -101
- package/dist/ssg/create-static-gen.d.ts +0 -66
- package/dist/ssg/create-static-gen.js +0 -250
- package/dist/ssg/generate-metadata.js +0 -92
- package/dist/ssg/generation-plan.js +0 -68
- package/dist/ssg/incremental-manifest.js +0 -54
- package/dist/ssg/resolve-ssg-data.js +0 -103
- package/dist/ssg/route-utils.js +0 -22
- package/dist/ssg/static-routes.js +0 -100
- package/dist/ssg/types.d.ts +0 -188
- package/dist/ssg/write-static-files.js +0 -77
- package/dist/ssr/attrs.js +0 -92
- package/dist/ssr/boundaries.js +0 -124
- package/dist/ssr/component-runtime.js +0 -85
- package/dist/ssr/context.d.ts +0 -49
- package/dist/ssr/context.js +0 -89
- package/dist/ssr/errors.d.ts +0 -9
- package/dist/ssr/errors.js +0 -12
- package/dist/ssr/escape.js +0 -191
- package/dist/ssr/hydration-data.js +0 -8
- package/dist/ssr/hydration-verify.d.ts +0 -11
- package/dist/ssr/hydration-verify.js +0 -171
- package/dist/ssr/index-internal.d.ts +0 -14
- package/dist/ssr/index-internal.js +0 -17
- package/dist/ssr/render-keys.js +0 -14
- package/dist/ssr/render-resolved.d.ts +0 -19
- package/dist/ssr/render-resolved.js +0 -33
- package/dist/ssr/render-sync.d.ts +0 -20
- package/dist/ssr/render-sync.js +0 -283
- package/dist/ssr/route-policy-resolution.js +0 -76
- package/dist/ssr/route-render.d.ts +0 -76
- package/dist/ssr/route-render.js +0 -118
- package/dist/ssr/sink.d.ts +0 -25
- package/dist/ssr/sink.js +0 -84
- package/dist/ssr/types.d.ts +0 -22
package/dist/fx/timing.d.ts
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
//#region src/fx/timing.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Timing utilities — pure helpers for common async patterns
|
|
4
|
-
* No framework coupling. No lifecycle awareness.
|
|
5
|
-
*/
|
|
6
|
-
interface DebounceOptions {
|
|
7
|
-
leading?: boolean;
|
|
8
|
-
trailing?: boolean;
|
|
9
|
-
}
|
|
10
|
-
interface ThrottleOptions {
|
|
11
|
-
leading?: boolean;
|
|
12
|
-
trailing?: boolean;
|
|
13
|
-
}
|
|
14
|
-
interface RetryOptions {
|
|
15
|
-
maxAttempts?: number;
|
|
16
|
-
delayMs?: number;
|
|
17
|
-
backoff?: (attemptIndex: number) => number;
|
|
18
|
-
}
|
|
19
|
-
type AnyFn = (...args: never[]) => unknown;
|
|
20
|
-
/**
|
|
21
|
-
* Debounce — delay execution, coalesce rapid calls
|
|
22
|
-
*
|
|
23
|
-
* Useful for: text input, resize, autosave
|
|
24
|
-
*
|
|
25
|
-
* @param fn Function to debounce
|
|
26
|
-
* @param ms Delay in milliseconds
|
|
27
|
-
* @param options trailing (default true), leading
|
|
28
|
-
* @returns Debounced function with cancel() method
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* ```ts
|
|
32
|
-
* const save = debounce((text) => api.save(text), 500);
|
|
33
|
-
* input.addEventListener('input', (e) => save(e.target.value));
|
|
34
|
-
* save.cancel(); // stop any pending execution
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
declare function debounce<T extends AnyFn>(fn: T, ms: number, options?: DebounceOptions): T & {
|
|
38
|
-
cancel(): void;
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Throttle — rate-limit execution, keep first/last
|
|
42
|
-
*
|
|
43
|
-
* Useful for: scroll, mouse move, high-frequency events
|
|
44
|
-
*
|
|
45
|
-
* @param fn Function to throttle
|
|
46
|
-
* @param ms Minimum interval between calls in milliseconds
|
|
47
|
-
* @param options leading (default true), trailing (default true)
|
|
48
|
-
* @returns Throttled function with cancel() method
|
|
49
|
-
*
|
|
50
|
-
* @example
|
|
51
|
-
* ```ts
|
|
52
|
-
* const handleScroll = throttle(updateUI, 100);
|
|
53
|
-
* window.addEventListener('scroll', handleScroll);
|
|
54
|
-
* handleScroll.cancel();
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
declare function throttle<T extends AnyFn>(fn: T, ms: number, options?: ThrottleOptions): T & {
|
|
58
|
-
cancel(): void;
|
|
59
|
-
};
|
|
60
|
-
/**
|
|
61
|
-
* Once — guard against double execution
|
|
62
|
-
*
|
|
63
|
-
* Useful for: init logic, event safety
|
|
64
|
-
*
|
|
65
|
-
* @param fn Function to call at most once
|
|
66
|
-
* @returns Function that executes fn only on first call
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* ```ts
|
|
70
|
-
* const init = once(setup);
|
|
71
|
-
* init(); // runs
|
|
72
|
-
* init(); // does nothing
|
|
73
|
-
* init(); // does nothing
|
|
74
|
-
* ```
|
|
75
|
-
*/
|
|
76
|
-
declare function once<T extends AnyFn>(fn: T): T;
|
|
77
|
-
/**
|
|
78
|
-
* Defer — schedule on microtask queue
|
|
79
|
-
*
|
|
80
|
-
* Useful for: run-after-current-stack logic
|
|
81
|
-
* More reliable than setTimeout(..., 0)
|
|
82
|
-
*
|
|
83
|
-
* @param fn Function to defer
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* ```ts
|
|
87
|
-
* defer(() => update()); // runs after current stack, before next macrotask
|
|
88
|
-
* ```
|
|
89
|
-
*/
|
|
90
|
-
declare function defer(fn: () => void): void;
|
|
91
|
-
/**
|
|
92
|
-
* RAF — coalesce multiple updates into single frame
|
|
93
|
-
*
|
|
94
|
-
* Useful for: animation, layout work, render updates
|
|
95
|
-
*
|
|
96
|
-
* @param fn Function to schedule on next animation frame
|
|
97
|
-
* @returns Function that schedules fn on requestAnimationFrame
|
|
98
|
-
*
|
|
99
|
-
* @example
|
|
100
|
-
* ```ts
|
|
101
|
-
* const update = raf(render);
|
|
102
|
-
* update(); // schedules on next frame
|
|
103
|
-
* update(); // same frame, no duplicate
|
|
104
|
-
* ```
|
|
105
|
-
*/
|
|
106
|
-
declare function raf<T extends AnyFn>(fn: T): T;
|
|
107
|
-
/**
|
|
108
|
-
* Idle — schedule low-priority work
|
|
109
|
-
*
|
|
110
|
-
* Useful for: background prep, non-urgent updates
|
|
111
|
-
* Falls back to setTimeout if requestIdleCallback unavailable
|
|
112
|
-
*
|
|
113
|
-
* @param fn Function to call when idle
|
|
114
|
-
* @param options timeout for fallback
|
|
115
|
-
*
|
|
116
|
-
* @example
|
|
117
|
-
* ```ts
|
|
118
|
-
* idle(() => prefetchData());
|
|
119
|
-
* ```
|
|
120
|
-
*/
|
|
121
|
-
declare function idle(fn: () => void, options?: {
|
|
122
|
-
timeout?: number;
|
|
123
|
-
}): void;
|
|
124
|
-
/**
|
|
125
|
-
* Timeout — Promise-based delay
|
|
126
|
-
*
|
|
127
|
-
* Useful for: readable async code, waiting between retries
|
|
128
|
-
*
|
|
129
|
-
* @param ms Milliseconds to wait
|
|
130
|
-
* @returns Promise that resolves after delay
|
|
131
|
-
*
|
|
132
|
-
* @example
|
|
133
|
-
* ```ts
|
|
134
|
-
* await timeout(300);
|
|
135
|
-
* console.log('300ms later');
|
|
136
|
-
* ```
|
|
137
|
-
*/
|
|
138
|
-
declare function timeout(ms: number): Promise<void>;
|
|
139
|
-
/**
|
|
140
|
-
* Retry — attempt function with backoff
|
|
141
|
-
*
|
|
142
|
-
* Useful for: network calls, transient failures
|
|
143
|
-
*
|
|
144
|
-
* @param fn Async function to retry
|
|
145
|
-
* @param options maxAttempts, delayMs, backoff function
|
|
146
|
-
* @returns Promise with final result or error
|
|
147
|
-
*
|
|
148
|
-
* @example
|
|
149
|
-
* ```ts
|
|
150
|
-
* const data = await retry(() => fetch(url), {
|
|
151
|
-
* maxAttempts: 3,
|
|
152
|
-
* delayMs: 100,
|
|
153
|
-
* });
|
|
154
|
-
* ```
|
|
155
|
-
*/
|
|
156
|
-
declare function retry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
157
|
-
//#endregion
|
|
158
|
-
export { DebounceOptions, RetryOptions, ThrottleOptions, debounce, defer, idle, once, raf, retry, throttle, timeout };
|
package/dist/fx/timing.js
DELETED
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
//#region src/fx/timing.ts
|
|
2
|
-
/**
|
|
3
|
-
* Debounce — delay execution, coalesce rapid calls
|
|
4
|
-
*
|
|
5
|
-
* Useful for: text input, resize, autosave
|
|
6
|
-
*
|
|
7
|
-
* @param fn Function to debounce
|
|
8
|
-
* @param ms Delay in milliseconds
|
|
9
|
-
* @param options trailing (default true), leading
|
|
10
|
-
* @returns Debounced function with cancel() method
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```ts
|
|
14
|
-
* const save = debounce((text) => api.save(text), 500);
|
|
15
|
-
* input.addEventListener('input', (e) => save(e.target.value));
|
|
16
|
-
* save.cancel(); // stop any pending execution
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
function debounce(fn, ms, options) {
|
|
20
|
-
const callable = fn;
|
|
21
|
-
let timeoutId = null;
|
|
22
|
-
const { leading = false, trailing = true } = options || {};
|
|
23
|
-
let lastArgs = null;
|
|
24
|
-
let lastThis = null;
|
|
25
|
-
let lastCallTime = 0;
|
|
26
|
-
const debounced = function(...args) {
|
|
27
|
-
const callTime = Date.now();
|
|
28
|
-
lastArgs = args;
|
|
29
|
-
lastThis = this;
|
|
30
|
-
if (timeoutId !== null) clearTimeout(timeoutId);
|
|
31
|
-
if (leading && callTime - lastCallTime >= ms) {
|
|
32
|
-
callable.apply(this, args);
|
|
33
|
-
lastCallTime = callTime;
|
|
34
|
-
}
|
|
35
|
-
if (trailing) timeoutId = setTimeout(() => {
|
|
36
|
-
callable.apply(lastThis, lastArgs);
|
|
37
|
-
timeoutId = null;
|
|
38
|
-
lastCallTime = Date.now();
|
|
39
|
-
}, ms);
|
|
40
|
-
};
|
|
41
|
-
debounced.cancel = () => {
|
|
42
|
-
if (timeoutId !== null) {
|
|
43
|
-
clearTimeout(timeoutId);
|
|
44
|
-
timeoutId = null;
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
return debounced;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Throttle — rate-limit execution, keep first/last
|
|
51
|
-
*
|
|
52
|
-
* Useful for: scroll, mouse move, high-frequency events
|
|
53
|
-
*
|
|
54
|
-
* @param fn Function to throttle
|
|
55
|
-
* @param ms Minimum interval between calls in milliseconds
|
|
56
|
-
* @param options leading (default true), trailing (default true)
|
|
57
|
-
* @returns Throttled function with cancel() method
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* ```ts
|
|
61
|
-
* const handleScroll = throttle(updateUI, 100);
|
|
62
|
-
* window.addEventListener('scroll', handleScroll);
|
|
63
|
-
* handleScroll.cancel();
|
|
64
|
-
* ```
|
|
65
|
-
*/
|
|
66
|
-
function throttle(fn, ms, options) {
|
|
67
|
-
const callable = fn;
|
|
68
|
-
let lastCallTime = null;
|
|
69
|
-
let timeoutId = null;
|
|
70
|
-
const { leading = true, trailing = true } = options || {};
|
|
71
|
-
let lastArgs = null;
|
|
72
|
-
let lastThis = null;
|
|
73
|
-
const throttled = function(...args) {
|
|
74
|
-
const callTime = Date.now();
|
|
75
|
-
const timeSinceLastCall = lastCallTime === null ? Number.POSITIVE_INFINITY : callTime - lastCallTime;
|
|
76
|
-
lastArgs = args;
|
|
77
|
-
lastThis = this;
|
|
78
|
-
if (leading && timeSinceLastCall >= ms) {
|
|
79
|
-
callable.apply(this, args);
|
|
80
|
-
lastCallTime = callTime;
|
|
81
|
-
if (timeoutId !== null) {
|
|
82
|
-
clearTimeout(timeoutId);
|
|
83
|
-
timeoutId = null;
|
|
84
|
-
}
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
if (!leading && lastCallTime === null) lastCallTime = callTime;
|
|
88
|
-
if (trailing && timeoutId === null) timeoutId = setTimeout(() => {
|
|
89
|
-
callable.apply(lastThis, lastArgs);
|
|
90
|
-
lastCallTime = Date.now();
|
|
91
|
-
timeoutId = null;
|
|
92
|
-
}, lastCallTime === null ? ms : Math.max(0, ms - (callTime - lastCallTime)));
|
|
93
|
-
};
|
|
94
|
-
throttled.cancel = () => {
|
|
95
|
-
if (timeoutId !== null) {
|
|
96
|
-
clearTimeout(timeoutId);
|
|
97
|
-
timeoutId = null;
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
return throttled;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Once — guard against double execution
|
|
104
|
-
*
|
|
105
|
-
* Useful for: init logic, event safety
|
|
106
|
-
*
|
|
107
|
-
* @param fn Function to call at most once
|
|
108
|
-
* @returns Function that executes fn only on first call
|
|
109
|
-
*
|
|
110
|
-
* @example
|
|
111
|
-
* ```ts
|
|
112
|
-
* const init = once(setup);
|
|
113
|
-
* init(); // runs
|
|
114
|
-
* init(); // does nothing
|
|
115
|
-
* init(); // does nothing
|
|
116
|
-
* ```
|
|
117
|
-
*/
|
|
118
|
-
function once(fn) {
|
|
119
|
-
const callable = fn;
|
|
120
|
-
let called = false;
|
|
121
|
-
let result;
|
|
122
|
-
return ((...args) => {
|
|
123
|
-
if (!called) {
|
|
124
|
-
called = true;
|
|
125
|
-
result = callable(...args);
|
|
126
|
-
}
|
|
127
|
-
return result;
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Defer — schedule on microtask queue
|
|
132
|
-
*
|
|
133
|
-
* Useful for: run-after-current-stack logic
|
|
134
|
-
* More reliable than setTimeout(..., 0)
|
|
135
|
-
*
|
|
136
|
-
* @param fn Function to defer
|
|
137
|
-
*
|
|
138
|
-
* @example
|
|
139
|
-
* ```ts
|
|
140
|
-
* defer(() => update()); // runs after current stack, before next macrotask
|
|
141
|
-
* ```
|
|
142
|
-
*/
|
|
143
|
-
function defer(fn) {
|
|
144
|
-
Promise.resolve().then(fn);
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* RAF — coalesce multiple updates into single frame
|
|
148
|
-
*
|
|
149
|
-
* Useful for: animation, layout work, render updates
|
|
150
|
-
*
|
|
151
|
-
* @param fn Function to schedule on next animation frame
|
|
152
|
-
* @returns Function that schedules fn on requestAnimationFrame
|
|
153
|
-
*
|
|
154
|
-
* @example
|
|
155
|
-
* ```ts
|
|
156
|
-
* const update = raf(render);
|
|
157
|
-
* update(); // schedules on next frame
|
|
158
|
-
* update(); // same frame, no duplicate
|
|
159
|
-
* ```
|
|
160
|
-
*/
|
|
161
|
-
function raf(fn) {
|
|
162
|
-
const callable = fn;
|
|
163
|
-
let frameId = null;
|
|
164
|
-
let lastArgs = null;
|
|
165
|
-
let lastThis = null;
|
|
166
|
-
return function(...args) {
|
|
167
|
-
lastArgs = args;
|
|
168
|
-
lastThis = this;
|
|
169
|
-
if (frameId === null) frameId = requestAnimationFrame(() => {
|
|
170
|
-
callable.apply(lastThis, lastArgs);
|
|
171
|
-
frameId = null;
|
|
172
|
-
});
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Idle — schedule low-priority work
|
|
177
|
-
*
|
|
178
|
-
* Useful for: background prep, non-urgent updates
|
|
179
|
-
* Falls back to setTimeout if requestIdleCallback unavailable
|
|
180
|
-
*
|
|
181
|
-
* @param fn Function to call when idle
|
|
182
|
-
* @param options timeout for fallback
|
|
183
|
-
*
|
|
184
|
-
* @example
|
|
185
|
-
* ```ts
|
|
186
|
-
* idle(() => prefetchData());
|
|
187
|
-
* ```
|
|
188
|
-
*/
|
|
189
|
-
function idle(fn, options) {
|
|
190
|
-
if (typeof requestIdleCallback !== "undefined") requestIdleCallback(fn, options ? { timeout: options.timeout } : void 0);
|
|
191
|
-
else Promise.resolve().then(() => {
|
|
192
|
-
setTimeout(fn, 0);
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Timeout — Promise-based delay
|
|
197
|
-
*
|
|
198
|
-
* Useful for: readable async code, waiting between retries
|
|
199
|
-
*
|
|
200
|
-
* @param ms Milliseconds to wait
|
|
201
|
-
* @returns Promise that resolves after delay
|
|
202
|
-
*
|
|
203
|
-
* @example
|
|
204
|
-
* ```ts
|
|
205
|
-
* await timeout(300);
|
|
206
|
-
* console.log('300ms later');
|
|
207
|
-
* ```
|
|
208
|
-
*/
|
|
209
|
-
function timeout(ms) {
|
|
210
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Retry — attempt function with backoff
|
|
214
|
-
*
|
|
215
|
-
* Useful for: network calls, transient failures
|
|
216
|
-
*
|
|
217
|
-
* @param fn Async function to retry
|
|
218
|
-
* @param options maxAttempts, delayMs, backoff function
|
|
219
|
-
* @returns Promise with final result or error
|
|
220
|
-
*
|
|
221
|
-
* @example
|
|
222
|
-
* ```ts
|
|
223
|
-
* const data = await retry(() => fetch(url), {
|
|
224
|
-
* maxAttempts: 3,
|
|
225
|
-
* delayMs: 100,
|
|
226
|
-
* });
|
|
227
|
-
* ```
|
|
228
|
-
*/
|
|
229
|
-
async function retry(fn, options) {
|
|
230
|
-
const { maxAttempts = 3, delayMs = 100, backoff = (i) => delayMs * Math.pow(2, i) } = options || {};
|
|
231
|
-
let lastError = null;
|
|
232
|
-
for (let attempt = 0; attempt < maxAttempts; attempt++) try {
|
|
233
|
-
return await fn();
|
|
234
|
-
} catch (error) {
|
|
235
|
-
lastError = error;
|
|
236
|
-
if (attempt < maxAttempts - 1) await timeout(backoff(attempt));
|
|
237
|
-
}
|
|
238
|
-
throw lastError || /* @__PURE__ */ new Error("Retry failed");
|
|
239
|
-
}
|
|
240
|
-
//#endregion
|
|
241
|
-
export { debounce, defer, idle, once, raf, retry, throttle, timeout };
|
package/dist/jsx/index.d.ts
DELETED
package/dist/jsx/index.js
DELETED
package/dist/jsx/types.js
DELETED
package/dist/jsx/utils.d.ts
DELETED
package/dist/jsx/utils.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { ELEMENT_TYPE } from "../common/jsx.js";
|
|
2
|
-
import "./types.js";
|
|
3
|
-
//#region src/jsx/utils.ts
|
|
4
|
-
function isElement(value) {
|
|
5
|
-
return typeof value === "object" && value !== null && value.$$typeof === ELEMENT_TYPE;
|
|
6
|
-
}
|
|
7
|
-
function cloneElement(element, props) {
|
|
8
|
-
return {
|
|
9
|
-
...element,
|
|
10
|
-
props: {
|
|
11
|
-
...element.props,
|
|
12
|
-
...props
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
//#endregion
|
|
17
|
-
export { cloneElement, isElement };
|
package/dist/jsx-runtime2.d.ts
DELETED
package/dist/jsx-runtime2.js
DELETED
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import { incrementPerfMetric } from "../runtime/perf-metrics.js";
|
|
2
|
-
import "../runtime/index.js";
|
|
3
|
-
import { extractKey, getRenderedAttributeName, isSkippedProp, parseEventName, readElementClassName, removeRenderedAttribute, setRenderedAttribute, tagNamesEqualIgnoreCase, writeElementClassName } from "./utils.js";
|
|
4
|
-
function applyFormControlProp(el, key, value, tagName) {
|
|
5
|
-
if (key === "value") {
|
|
6
|
-
if (tagNamesEqualIgnoreCase(tagName, "input") || tagNamesEqualIgnoreCase(tagName, "textarea") || tagNamesEqualIgnoreCase(tagName, "select")) {
|
|
7
|
-
el.value = String(value);
|
|
8
|
-
el.setAttribute("value", String(value));
|
|
9
|
-
} else el.setAttribute("value", String(value));
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
if (key === "checked") if (tagNamesEqualIgnoreCase(tagName, "input")) {
|
|
13
|
-
const checked = Boolean(value);
|
|
14
|
-
el.checked = checked;
|
|
15
|
-
if (checked) el.setAttribute("checked", "");
|
|
16
|
-
else el.removeAttribute("checked");
|
|
17
|
-
} else if (value) el.setAttribute("checked", "");
|
|
18
|
-
else el.removeAttribute("checked");
|
|
19
|
-
}
|
|
20
|
-
function normalizeStylePropertyName(propertyName) {
|
|
21
|
-
if (propertyName.startsWith("--")) return propertyName;
|
|
22
|
-
return propertyName.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);
|
|
23
|
-
}
|
|
24
|
-
function collectCurrentStyleEntries(el) {
|
|
25
|
-
const entries = /* @__PURE__ */ new Map();
|
|
26
|
-
const style = el.style;
|
|
27
|
-
if (!style) return entries;
|
|
28
|
-
for (let index = 0; index < style.length; index += 1) {
|
|
29
|
-
const propertyName = style.item(index);
|
|
30
|
-
entries.set(propertyName, style.getPropertyValue(propertyName));
|
|
31
|
-
}
|
|
32
|
-
return entries;
|
|
33
|
-
}
|
|
34
|
-
function normalizeStyleEntries(value) {
|
|
35
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
|
|
36
|
-
const entries = /* @__PURE__ */ new Map();
|
|
37
|
-
for (const [key, entryValue] of Object.entries(value)) {
|
|
38
|
-
if (entryValue === void 0 || entryValue === null || entryValue === false) continue;
|
|
39
|
-
entries.set(normalizeStylePropertyName(key), String(entryValue));
|
|
40
|
-
}
|
|
41
|
-
return entries;
|
|
42
|
-
}
|
|
43
|
-
function applyStylePropValue(el, value) {
|
|
44
|
-
const style = el.style;
|
|
45
|
-
if (!style) {
|
|
46
|
-
if (value === null || value === void 0 || value === false) {
|
|
47
|
-
el.removeAttribute("style");
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
el.setAttribute("style", String(value));
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (value === null || value === void 0 || value === false) {
|
|
54
|
-
if (!el.getAttribute("style")) {
|
|
55
|
-
incrementPerfMetric("skippedDomPropWrites");
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
style.cssText = "";
|
|
59
|
-
el.removeAttribute("style");
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
if (typeof value === "string") {
|
|
63
|
-
if ((el.getAttribute("style") ?? "") === value) {
|
|
64
|
-
incrementPerfMetric("skippedDomPropWrites");
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
style.cssText = value;
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
const nextEntries = normalizeStyleEntries(value);
|
|
71
|
-
if (!nextEntries) {
|
|
72
|
-
const nextText = String(value);
|
|
73
|
-
if ((el.getAttribute("style") ?? "") === nextText) {
|
|
74
|
-
incrementPerfMetric("skippedDomPropWrites");
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
style.cssText = nextText;
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
const previousEntries = collectCurrentStyleEntries(el);
|
|
81
|
-
let didWrite = false;
|
|
82
|
-
for (const [propertyName] of previousEntries) {
|
|
83
|
-
if (nextEntries.has(propertyName)) continue;
|
|
84
|
-
style.removeProperty(propertyName);
|
|
85
|
-
didWrite = true;
|
|
86
|
-
}
|
|
87
|
-
for (const [propertyName, propertyValue] of nextEntries) {
|
|
88
|
-
if (previousEntries.get(propertyName) === propertyValue) continue;
|
|
89
|
-
style.setProperty(propertyName, propertyValue);
|
|
90
|
-
didWrite = true;
|
|
91
|
-
}
|
|
92
|
-
if (!didWrite) incrementPerfMetric("skippedDomPropWrites");
|
|
93
|
-
}
|
|
94
|
-
function applyStaticScalarPropsToElement(el, props, tagName) {
|
|
95
|
-
for (const key in props) {
|
|
96
|
-
if (isSkippedProp(key)) continue;
|
|
97
|
-
const value = props[key];
|
|
98
|
-
if (value === void 0 || value === null || value === false) continue;
|
|
99
|
-
if (key === "class" || key === "className") writeElementClassName(el, String(value));
|
|
100
|
-
else if (key === "style") applyStylePropValue(el, value);
|
|
101
|
-
else if (key === "value" || key === "checked") applyFormControlProp(el, key, value, tagName);
|
|
102
|
-
else setRenderedAttribute(el, key, String(value));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
function tokenizeClassValue(value) {
|
|
106
|
-
if (typeof value !== "string") return null;
|
|
107
|
-
const trimmed = value.trim();
|
|
108
|
-
if (trimmed.length === 0) return [];
|
|
109
|
-
return trimmed.split(/\s+/);
|
|
110
|
-
}
|
|
111
|
-
function patchClassList(el, previousTokens, nextTokens) {
|
|
112
|
-
if (previousTokens.length === nextTokens.length) {
|
|
113
|
-
let identical = true;
|
|
114
|
-
for (let index = 0; index < previousTokens.length; index += 1) if (previousTokens[index] !== nextTokens[index]) {
|
|
115
|
-
identical = false;
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
if (identical) return;
|
|
119
|
-
}
|
|
120
|
-
if (previousTokens.length === 0) {
|
|
121
|
-
if (nextTokens.length === 0) return;
|
|
122
|
-
el.classList.add(...nextTokens);
|
|
123
|
-
incrementPerfMetric("classListPatchOps");
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
if (nextTokens.length === 0) {
|
|
127
|
-
el.classList.remove(...previousTokens);
|
|
128
|
-
incrementPerfMetric("classListPatchOps");
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
if (previousTokens.length === 1 && nextTokens.length === 1) {
|
|
132
|
-
el.classList.remove(previousTokens[0]);
|
|
133
|
-
el.classList.add(nextTokens[0]);
|
|
134
|
-
incrementPerfMetric("classListPatchOps");
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
const nextSet = new Set(nextTokens);
|
|
138
|
-
const previousSet = new Set(previousTokens);
|
|
139
|
-
for (const token of previousTokens) if (!nextSet.has(token)) el.classList.remove(token);
|
|
140
|
-
for (const token of nextTokens) if (!previousSet.has(token)) el.classList.add(token);
|
|
141
|
-
incrementPerfMetric("classListPatchOps");
|
|
142
|
-
}
|
|
143
|
-
function applyClassPropValue(el, value, previousValue, descriptor) {
|
|
144
|
-
const nextString = String(value);
|
|
145
|
-
const nextTokens = tokenizeClassValue(nextString);
|
|
146
|
-
const previousTokens = descriptor?.lastClassTokens ?? tokenizeClassValue(previousValue);
|
|
147
|
-
if (nextTokens && previousTokens) {
|
|
148
|
-
patchClassList(el, previousTokens, nextTokens);
|
|
149
|
-
if (descriptor) descriptor.lastClassTokens = nextTokens;
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
writeElementClassName(el, nextString);
|
|
153
|
-
if (descriptor) descriptor.lastClassTokens = nextTokens;
|
|
154
|
-
}
|
|
155
|
-
function applyScalarPropValue(el, key, value, tagName, previousValue, descriptor) {
|
|
156
|
-
if (value === void 0 || value === null || value === false) {
|
|
157
|
-
if (key === "class" || key === "className") {
|
|
158
|
-
const previousTokens = descriptor?.lastClassTokens;
|
|
159
|
-
if (previousTokens && previousTokens.length > 0) {
|
|
160
|
-
el.classList.remove(...previousTokens);
|
|
161
|
-
incrementPerfMetric("classListPatchOps");
|
|
162
|
-
} else writeElementClassName(el, "");
|
|
163
|
-
if (descriptor) descriptor.lastClassTokens = [];
|
|
164
|
-
} else if (key === "value") applyFormControlProp(el, key, "", tagName);
|
|
165
|
-
else if (key === "checked") applyFormControlProp(el, key, false, tagName);
|
|
166
|
-
else if (key === "style") applyStylePropValue(el, null);
|
|
167
|
-
else removeRenderedAttribute(el, key);
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
if (key === "class" || key === "className") applyClassPropValue(el, value, previousValue, descriptor);
|
|
171
|
-
else if (key === "style") applyStylePropValue(el, value);
|
|
172
|
-
else if (key === "value" || key === "checked") applyFormControlProp(el, key, value, tagName);
|
|
173
|
-
else setRenderedAttribute(el, key, String(value));
|
|
174
|
-
}
|
|
175
|
-
function removeStaleAttributes(el, vnode, props) {
|
|
176
|
-
const desiredAttributes = /* @__PURE__ */ new Set();
|
|
177
|
-
if (extractKey(vnode) !== void 0) {
|
|
178
|
-
desiredAttributes.add("data-key");
|
|
179
|
-
desiredAttributes.add("data-askr-key-kind");
|
|
180
|
-
}
|
|
181
|
-
for (const propName in props) {
|
|
182
|
-
if (isSkippedProp(propName)) continue;
|
|
183
|
-
if (parseEventName(propName)) continue;
|
|
184
|
-
const value = props[propName];
|
|
185
|
-
if (value === void 0 || value === null || value === false) continue;
|
|
186
|
-
desiredAttributes.add(getRenderedAttributeName(el, propName));
|
|
187
|
-
}
|
|
188
|
-
for (const attribute of Array.from(el.attributes)) if (!desiredAttributes.has(getRenderedAttributeName(el, attribute.name))) removeRenderedAttribute(el, attribute.name);
|
|
189
|
-
}
|
|
190
|
-
function materializeKey(el, vnode, props) {
|
|
191
|
-
const rawKey = vnode.key ?? props.key;
|
|
192
|
-
const vnodeKey = rawKey === null || rawKey === void 0 ? void 0 : typeof rawKey === "symbol" ? String(rawKey) : rawKey;
|
|
193
|
-
if (vnodeKey !== void 0) {
|
|
194
|
-
const nextKey = String(vnodeKey);
|
|
195
|
-
if (el.getAttribute("data-key") !== nextKey) el.setAttribute("data-key", nextKey);
|
|
196
|
-
const keyKind = typeof vnodeKey;
|
|
197
|
-
if (el.getAttribute("data-askr-key-kind") !== keyKind) el.setAttribute("data-askr-key-kind", keyKind);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/** @internal Materialize keyed metadata on a newly created or cloned node. */
|
|
201
|
-
function materializeFreshKey(el, vnode, props) {
|
|
202
|
-
const rawKey = vnode.key ?? props.key;
|
|
203
|
-
if (rawKey === null || rawKey === void 0) return;
|
|
204
|
-
const vnodeKey = typeof rawKey === "symbol" ? String(rawKey) : rawKey;
|
|
205
|
-
el.setAttribute("data-key", String(vnodeKey));
|
|
206
|
-
const keyKind = typeof vnodeKey;
|
|
207
|
-
if (el.getAttribute("data-askr-key-kind") !== keyKind) el.setAttribute("data-askr-key-kind", keyKind);
|
|
208
|
-
}
|
|
209
|
-
function hasMatchingStaticPropsInternal(el, props, vnodeType, ignoreEventProps) {
|
|
210
|
-
let staticPropCount = 0;
|
|
211
|
-
for (const key in props) {
|
|
212
|
-
if (isSkippedProp(key)) continue;
|
|
213
|
-
const value = props[key];
|
|
214
|
-
if (value === void 0 || value === null || value === false) return false;
|
|
215
|
-
if (parseEventName(key)) {
|
|
216
|
-
if (ignoreEventProps) continue;
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
|
-
if (typeof value === "function") return false;
|
|
220
|
-
if (key === "class" || key === "className") {
|
|
221
|
-
if (readElementClassName(el) !== String(value)) return false;
|
|
222
|
-
staticPropCount += 1;
|
|
223
|
-
continue;
|
|
224
|
-
}
|
|
225
|
-
if (key === "style") {
|
|
226
|
-
const styleValue = typeof value === "string" ? value.trim().replace(/;$/, "") : null;
|
|
227
|
-
const domStyle = el.getAttribute("style")?.trim().replace(/;$/, "") ?? "";
|
|
228
|
-
if (styleValue === null || domStyle !== styleValue) return false;
|
|
229
|
-
staticPropCount += 1;
|
|
230
|
-
continue;
|
|
231
|
-
}
|
|
232
|
-
if (key === "value" || key === "checked") {
|
|
233
|
-
if (el[key] !== value) return false;
|
|
234
|
-
staticPropCount += 1;
|
|
235
|
-
continue;
|
|
236
|
-
}
|
|
237
|
-
if (key === "selected" && vnodeType === "option") {
|
|
238
|
-
if (el.selected !== Boolean(value)) return false;
|
|
239
|
-
staticPropCount += 1;
|
|
240
|
-
continue;
|
|
241
|
-
}
|
|
242
|
-
if (el.getAttribute(getRenderedAttributeName(el, key)) !== String(value)) return false;
|
|
243
|
-
staticPropCount += 1;
|
|
244
|
-
}
|
|
245
|
-
return el.attributes.length === staticPropCount;
|
|
246
|
-
}
|
|
247
|
-
function hasMatchingStaticProps(el, props, vnodeType) {
|
|
248
|
-
return hasMatchingStaticPropsInternal(el, props, vnodeType, false);
|
|
249
|
-
}
|
|
250
|
-
function hasMatchingStaticPropsIgnoringEvents(el, props, vnodeType) {
|
|
251
|
-
return hasMatchingStaticPropsInternal(el, props, vnodeType, true);
|
|
252
|
-
}
|
|
253
|
-
//#endregion
|
|
254
|
-
export { applyClassPropValue, applyFormControlProp, applyScalarPropValue, applyStaticScalarPropsToElement, applyStylePropValue, hasMatchingStaticProps, hasMatchingStaticPropsIgnoringEvents, materializeFreshKey, materializeKey, removeStaleAttributes };
|