sygnal 5.4.0 → 6.0.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/CHANGELOG.md +646 -0
- package/README.md +24 -9
- package/dist/astro/client.cjs.js +16 -9
- package/dist/astro/client.cjs.js.map +1 -1
- package/dist/astro/client.mjs +16 -9
- package/dist/astro/client.mjs.map +1 -1
- package/dist/astro/index.cjs.js +362 -91
- package/dist/astro/index.cjs.js.map +1 -1
- package/dist/astro/index.mjs +362 -92
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/server.cjs.js +3396 -165
- package/dist/astro/server.cjs.js.map +1 -1
- package/dist/astro/server.mjs +3396 -165
- package/dist/astro/server.mjs.map +1 -1
- package/dist/devtools.cjs.js +1431 -0
- package/dist/devtools.cjs.js.map +1 -0
- package/dist/devtools.esm.js +1419 -0
- package/dist/devtools.esm.js.map +1 -0
- package/dist/diagnostics.cjs.js +3032 -296
- package/dist/diagnostics.cjs.js.map +1 -1
- package/dist/diagnostics.esm.js +3032 -296
- package/dist/diagnostics.esm.js.map +1 -1
- package/dist/element.cjs.js +230 -0
- package/dist/element.cjs.js.map +1 -0
- package/dist/element.esm.js +228 -0
- package/dist/element.esm.js.map +1 -0
- package/dist/guide/accessibility.md +257 -0
- package/dist/guide/adapters.md +221 -0
- package/dist/guide/behaviors.md +312 -0
- package/dist/guide/browser-sources.md +203 -0
- package/dist/guide/drag-and-drop.md +342 -0
- package/dist/guide/element-commands.md +306 -0
- package/dist/guide/error-boundaries.md +169 -0
- package/dist/guide/forms-reference.md +381 -0
- package/dist/guide/forms.md +250 -0
- package/dist/guide/http.md +299 -0
- package/dist/guide/inputs.md +173 -0
- package/dist/guide/persistence.md +245 -0
- package/dist/guide/recipes/carousel.md +155 -0
- package/dist/guide/recipes/charts.md +177 -0
- package/dist/guide/recipes/code-editor.md +135 -0
- package/dist/guide/recipes/data-grid.md +155 -0
- package/dist/guide/recipes/data-table.md +196 -0
- package/dist/guide/recipes/i18n.md +222 -0
- package/dist/guide/recipes/icons.md +115 -0
- package/dist/guide/recipes/overview.md +33 -0
- package/dist/guide/recipes/rich-text.md +154 -0
- package/dist/guide/resources.md +471 -0
- package/dist/guide/ssr.md +255 -0
- package/dist/guide/timers.md +178 -0
- package/dist/guide/ui/accordion.md +93 -0
- package/dist/guide/ui/combobox.md +144 -0
- package/dist/guide/ui/dialog.md +124 -0
- package/dist/guide/ui/disclosure.md +60 -0
- package/dist/guide/ui/menu.md +125 -0
- package/dist/guide/ui/overview.md +166 -0
- package/dist/guide/ui/popover.md +101 -0
- package/dist/guide/ui/select.md +114 -0
- package/dist/guide/ui/tabs.md +161 -0
- package/dist/guide/ui/toaster.md +152 -0
- package/dist/guide/ui/tooltip.md +103 -0
- package/dist/guide/undo.md +178 -0
- package/dist/guide/virtual-collections.md +183 -0
- package/dist/guide/web-components.md +179 -0
- package/dist/guide/widgets.md +217 -0
- package/dist/index.cjs.js +13178 -5769
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2908 -276
- package/dist/index.esm.js +13149 -5779
- package/dist/index.esm.js.map +1 -1
- package/dist/jsx-dev-runtime.cjs.js +26 -334
- package/dist/jsx-dev-runtime.cjs.js.map +1 -1
- package/dist/jsx-dev-runtime.esm.js +19 -327
- package/dist/jsx-dev-runtime.esm.js.map +1 -1
- package/dist/jsx-runtime.cjs.js +26 -334
- package/dist/jsx-runtime.cjs.js.map +1 -1
- package/dist/jsx-runtime.esm.js +19 -327
- package/dist/jsx-runtime.esm.js.map +1 -1
- package/dist/jsx.cjs.js +10 -314
- package/dist/jsx.cjs.js.map +1 -1
- package/dist/jsx.esm.js +8 -315
- package/dist/jsx.esm.js.map +1 -1
- package/dist/react.cjs.js +117 -0
- package/dist/react.cjs.js.map +1 -0
- package/dist/react.esm.js +115 -0
- package/dist/react.esm.js.map +1 -0
- package/dist/shims/globalthis.cjs +20 -0
- package/dist/sygnal.min.js +1 -1
- package/dist/sygnal.min.js.map +1 -1
- package/dist/ui-combobox.cjs.js +169 -0
- package/dist/ui-combobox.cjs.js.map +1 -0
- package/dist/ui-combobox.esm.js +148 -0
- package/dist/ui-combobox.esm.js.map +1 -0
- package/dist/ui-menu.cjs.js +87 -0
- package/dist/ui-menu.cjs.js.map +1 -0
- package/dist/ui-menu.esm.js +66 -0
- package/dist/ui-menu.esm.js.map +1 -0
- package/dist/ui-select.cjs.js +104 -0
- package/dist/ui-select.cjs.js.map +1 -0
- package/dist/ui-select.esm.js +83 -0
- package/dist/ui-select.esm.js.map +1 -0
- package/dist/ui.cjs.js +738 -0
- package/dist/ui.cjs.js.map +1 -0
- package/dist/ui.esm.js +727 -0
- package/dist/ui.esm.js.map +1 -0
- package/dist/vike/ClientOnly.cjs.js +4 -14
- package/dist/vike/ClientOnly.cjs.js.map +1 -1
- package/dist/vike/ClientOnly.mjs +4 -14
- package/dist/vike/ClientOnly.mjs.map +1 -1
- package/dist/vike/{+config.js → config/+config.js} +9 -1
- package/dist/vike/config/+config.js.map +1 -0
- package/dist/vike/config/package.json +6 -0
- package/dist/vike/onRenderClient.cjs.js +165 -95
- package/dist/vike/onRenderClient.cjs.js.map +1 -1
- package/dist/vike/onRenderClient.mjs +165 -95
- package/dist/vike/onRenderClient.mjs.map +1 -1
- package/dist/vike/onRenderHtml.cjs.js +59 -24
- package/dist/vike/onRenderHtml.cjs.js.map +1 -1
- package/dist/vike/onRenderHtml.mjs +60 -25
- package/dist/vike/onRenderHtml.mjs.map +1 -1
- package/dist/vite/plugin.cjs.js +323 -88
- package/dist/vite/plugin.cjs.js.map +1 -1
- package/dist/vite/plugin.mjs +323 -89
- package/dist/vite/plugin.mjs.map +1 -1
- package/dist/zag.cjs.js +408 -0
- package/dist/zag.cjs.js.map +1 -0
- package/dist/zag.esm.js +405 -0
- package/dist/zag.esm.js.map +1 -0
- package/llms.txt +166 -103
- package/package.json +98 -14
- package/src/astro/client.ts +27 -16
- package/src/astro/index.d.ts +24 -0
- package/src/astro/index.ts +69 -3
- package/src/astro/server.ts +8 -2
- package/src/collection.ts +6 -93
- package/src/core/actions.ts +134 -0
- package/src/core/cell.ts +202 -0
- package/src/core/debug.ts +23 -0
- package/src/core/define.ts +242 -0
- package/src/core/hooks.ts +314 -0
- package/src/core/hosts/collection.ts +325 -0
- package/src/core/hosts/switchable.ts +146 -0
- package/src/core/instance.ts +592 -0
- package/src/core/markers/clientonly.ts +13 -0
- package/src/core/markers/lazy.ts +40 -0
- package/src/core/markers/portal.ts +96 -0
- package/src/core/markers/suspense.ts +41 -0
- package/src/core/markers/transition.ts +70 -0
- package/src/core/registry.ts +25 -0
- package/src/core/runtime.ts +573 -0
- package/src/core/statics.ts +104 -0
- package/src/core/teardown.ts +60 -0
- package/src/core/view.ts +37 -0
- package/src/cycle/dom/DocumentDOMSource.ts +13 -8
- package/src/cycle/dom/ElementFinder.ts +7 -9
- package/src/cycle/dom/EventDelegator.ts +174 -223
- package/src/cycle/dom/IsolateModule.ts +65 -35
- package/src/cycle/dom/MainDOMSource.ts +9 -2
- package/src/cycle/dom/PriorityQueue.ts +4 -2
- package/src/cycle/dom/SymbolTree.ts +18 -47
- package/src/cycle/dom/classNameModule.ts +9 -7
- package/src/cycle/dom/controlledInputModule.ts +23 -6
- package/src/cycle/dom/enrichEventStream.ts +25 -47
- package/src/cycle/dom/fragment.ts +7 -0
- package/src/cycle/dom/isolate.ts +30 -27
- package/src/cycle/dom/makeDOMDriver.ts +115 -56
- package/src/cycle/dom/mockDOMSource.ts +21 -1
- package/src/cycle/dom/modules.ts +16 -3
- package/src/cycle/dom/propsModule.ts +65 -0
- package/src/cycle/dom/selectModule.ts +22 -17
- package/src/cycle/dom/snabbdom.ts +1 -6
- package/src/cycle/dom/thunk.ts +3 -0
- package/src/cycle/dom/utils.ts +98 -0
- package/src/cycle/dom/viewTransition.ts +43 -0
- package/src/cycle/state/StateSource.ts +19 -3
- package/src/cycle/state/objIsEqual.ts +50 -0
- package/src/cycle/state/types.ts +0 -10
- package/src/defineComponent.ts +34 -0
- package/src/devtools.d.ts +151 -0
- package/src/devtools.ts +34 -0
- package/src/element.d.ts +59 -0
- package/src/element.ts +235 -0
- package/src/extra/backoff.ts +9 -0
- package/src/extra/behaviors.ts +169 -0
- package/src/extra/browserSignals.ts +23 -0
- package/src/extra/browserSources.ts +326 -0
- package/src/extra/command.ts +3 -3
- package/src/extra/controls.ts +47 -0
- package/src/extra/copyAsTest.ts +286 -0
- package/src/extra/devtools.ts +101 -31
- package/src/extra/devtoolsActions.ts +379 -0
- package/src/extra/devtoolsHook.ts +9 -0
- package/src/extra/devtoolsNext.ts +83 -0
- package/src/extra/diagnostics/checks/actionLog.ts +108 -0
- package/src/extra/diagnostics/checks/behaviors.ts +49 -0
- package/src/extra/diagnostics/checks/browserSources.ts +96 -0
- package/src/extra/diagnostics/checks/collections.ts +1 -1
- package/src/extra/diagnostics/checks/controls.ts +148 -0
- package/src/extra/diagnostics/checks/dataset.ts +57 -0
- package/src/extra/diagnostics/checks/dom.ts +20 -11
- package/src/extra/diagnostics/checks/elementCommands.ts +175 -0
- package/src/extra/diagnostics/checks/events.ts +17 -2
- package/src/extra/diagnostics/checks/fetch.ts +135 -0
- package/src/extra/diagnostics/checks/forms.ts +163 -0
- package/src/extra/diagnostics/checks/index.ts +97 -4
- package/src/extra/diagnostics/checks/inspect.ts +140 -32
- package/src/extra/diagnostics/checks/next.ts +417 -0
- package/src/extra/diagnostics/checks/persist.ts +54 -0
- package/src/extra/diagnostics/checks/props.ts +10 -5
- package/src/extra/diagnostics/checks/public.d.ts +98 -7
- package/src/extra/diagnostics/checks/replies.ts +128 -0
- package/src/extra/diagnostics/checks/router.ts +100 -0
- package/src/extra/diagnostics/checks/rxjsHints.ts +1 -1
- package/src/extra/diagnostics/checks/shared.ts +86 -2
- package/src/extra/diagnostics/checks/shorthand.ts +115 -0
- package/src/extra/diagnostics/checks/sortable.ts +129 -0
- package/src/extra/diagnostics/checks/state.ts +100 -7
- package/src/extra/diagnostics/checks/statics.ts +48 -0
- package/src/extra/diagnostics/checks/strict.ts +10 -67
- package/src/extra/diagnostics/checks/timers.ts +80 -0
- package/src/extra/diagnostics/checks/viewTransitions.ts +47 -0
- package/src/extra/diagnostics/checks/virtual.ts +73 -0
- package/src/extra/diagnostics/checks/widgets.ts +109 -0
- package/src/extra/diagnostics/checks/wiring.ts +66 -10
- package/src/extra/diagnostics/codes.ts +268 -23
- package/src/extra/diagnostics/index.ts +34 -9
- package/src/extra/diagnostics/legacy.ts +17 -0
- package/src/extra/driverFactories.ts +83 -19
- package/src/extra/elementCommands.ts +53 -0
- package/src/extra/fetchDriver.ts +519 -0
- package/src/extra/focusWithin.ts +27 -0
- package/src/extra/form.ts +268 -0
- package/src/extra/formHelpers.ts +139 -0
- package/src/extra/head.ts +106 -0
- package/src/extra/hmr.ts +2 -3
- package/src/extra/owned.ts +24 -0
- package/src/extra/pager.ts +50 -0
- package/src/extra/persist.ts +133 -0
- package/src/extra/pwa.ts +1 -1
- package/src/extra/queryCache.ts +107 -0
- package/src/extra/reducers.ts +1 -1
- package/src/extra/reduxDevtools.ts +92 -0
- package/src/extra/replies.ts +54 -0
- package/src/extra/router.ts +323 -0
- package/src/extra/run.ts +90 -217
- package/src/extra/selection.ts +76 -0
- package/src/extra/socketDriver.ts +265 -0
- package/src/extra/sortable.ts +377 -0
- package/src/extra/ssr.ts +427 -160
- package/src/extra/standardSchema.ts +27 -0
- package/src/extra/testing.ts +2433 -175
- package/src/extra/timers.ts +95 -0
- package/src/extra/undo.ts +261 -0
- package/src/extra/viewTransitions.ts +38 -0
- package/src/extra/virtual.ts +513 -0
- package/src/extra/widget.ts +201 -0
- package/src/index.d.ts +2631 -117
- package/src/index.ts +25 -4
- package/src/jsx-runtime.ts +15 -1
- package/src/jsx.ts +2 -1
- package/src/lazy.ts +50 -7
- package/src/portal.ts +3 -1
- package/src/pragma/index.ts +256 -133
- package/src/react-peers.d.ts +5 -0
- package/src/react.d.ts +43 -0
- package/src/react.ts +110 -0
- package/src/shared.ts +48 -0
- package/src/slot.ts +1 -1
- package/src/suspense.ts +3 -1
- package/src/switchable.ts +6 -121
- package/src/transition.ts +3 -1
- package/src/ui/accordion.ts +64 -0
- package/src/ui/dialog.ts +129 -0
- package/src/ui/disclosure.ts +35 -0
- package/src/ui/popover.ts +45 -0
- package/src/ui/shared.ts +94 -0
- package/src/ui/tabs.ts +82 -0
- package/src/ui/toaster.ts +198 -0
- package/src/ui/tooltip.ts +70 -0
- package/src/ui/zag/combobox.ts +115 -0
- package/src/ui/zag/menu.ts +40 -0
- package/src/ui/zag/select.ts +54 -0
- package/src/ui/zag/shared.ts +43 -0
- package/src/ui-combobox.d.ts +20 -0
- package/src/ui-combobox.ts +6 -0
- package/src/ui-menu.d.ts +30 -0
- package/src/ui-menu.ts +6 -0
- package/src/ui-select.d.ts +17 -0
- package/src/ui-select.ts +6 -0
- package/src/ui-zag-types.d.ts +42 -0
- package/src/ui.d.ts +208 -0
- package/src/ui.ts +15 -0
- package/src/vike/+config.ts +9 -1
- package/src/vike/ClientOnly.ts +1 -1
- package/src/vike/onRenderClient.ts +144 -96
- package/src/vike/onRenderHtml.ts +69 -26
- package/src/vike/types.ts +7 -1
- package/src/vite/globalthis-shim.ts +18 -0
- package/src/vite/globalthis.ts +56 -0
- package/src/vite/plugin.d.ts +22 -3
- package/src/vite/plugin.ts +222 -24
- package/src/zag.d.ts +64 -0
- package/src/zag.ts +238 -0
- package/dist/vike/+config.cjs.js +0 -66
- package/dist/vike/+config.cjs.js.map +0 -1
- package/dist/vike/+config.js.map +0 -1
- package/src/component.ts +0 -2301
- package/src/cycle/isolate/index.ts +0 -196
- package/src/cycle/run/index.ts +0 -151
- package/src/cycle/run/internals.ts +0 -143
- package/src/cycle/state/Collection.ts +0 -184
- package/src/cycle/state/index.ts +0 -5
- package/src/cycle/state/pickCombine.ts +0 -201
- package/src/cycle/state/pickMerge.ts +0 -122
- package/src/cycle/state/withState.ts +0 -47
- package/src/pragma/fn.ts +0 -55
package/src/index.ts
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
// export sygnal core functions
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
4
|
+
export { ABORT } from "./shared"
|
|
5
|
+
export { defineComponent } from "./defineComponent"
|
|
6
|
+
export { Collection } from "./collection"
|
|
7
|
+
export { VirtualCollection } from "./extra/virtual"
|
|
8
|
+
export { Switchable } from "./switchable"
|
|
7
9
|
export { Portal, default as portal } from "./portal"
|
|
8
10
|
export { Transition } from "./transition"
|
|
9
11
|
export { Suspense } from "./suspense"
|
|
10
12
|
export { Slot } from "./slot"
|
|
11
13
|
export { lazy } from "./lazy"
|
|
12
14
|
export { driverFromAsync } from "./extra/driverFactories"
|
|
15
|
+
export { makeFetchDriver } from "./extra/fetchDriver"
|
|
16
|
+
export { queryCache } from "./extra/queryCache"
|
|
17
|
+
export { makeSocketDriver } from "./extra/socketDriver"
|
|
18
|
+
export { makeRouter, makeRouterDriver } from "./extra/router"
|
|
19
|
+
export { makeViewTransitionDOMDriver } from "./extra/viewTransitions"
|
|
20
|
+
export { makeHeadDriver, renderHead } from "./extra/head"
|
|
21
|
+
export { makeTimerDriver } from "./extra/timers"
|
|
22
|
+
export { makeBrowserDriver, makeBrowserDriverWith, intersectionSource, resizeSource, mediaSource, storageSource, visibilitySource, onlineSource, geolocationSource, clipboardSource } from "./extra/browserSources"
|
|
23
|
+
export { focusWithin } from "./extra/focusWithin"
|
|
13
24
|
export { default as processForm } from "./extra/processForm"
|
|
14
25
|
export { default as processDrag } from "./extra/processDrag"
|
|
15
26
|
export { makeDragDriver } from "./extra/dragDriver"
|
|
@@ -20,12 +31,22 @@ export { default as classes } from './extra/classes'
|
|
|
20
31
|
export { createElement } from './pragma/index'
|
|
21
32
|
export { createCommand } from './extra/command'
|
|
22
33
|
export { createRef, createRef$ } from './extra/ref'
|
|
34
|
+
export { controls } from './extra/controls'
|
|
35
|
+
export { defineWidget } from './extra/widget'
|
|
36
|
+
export { defineBehavior } from './extra/behaviors'
|
|
37
|
+
export { pager } from './extra/pager'
|
|
38
|
+
export { form } from './extra/form'
|
|
39
|
+
export { checkForm, formErrors, setField, getField, hasField, fieldName, fieldNames, replyErrors, focusInvalid } from './extra/formHelpers'
|
|
40
|
+
export { selection, isSelected } from './extra/selection'
|
|
41
|
+
export { sortable } from './extra/sortable'
|
|
42
|
+
export { undoable, undo } from './extra/undo'
|
|
43
|
+
export { persist } from './extra/persist'
|
|
23
44
|
export { renderComponent } from './extra/testing'
|
|
24
45
|
export { set, toggle, emit, event } from './extra/reducers'
|
|
25
46
|
export { makeServiceWorkerDriver, onlineStatus$, createInstallPrompt } from './extra/pwa'
|
|
26
47
|
export { renderToString } from './extra/ssr'
|
|
27
48
|
export { default as xs } from './extra/xstreamCompat'
|
|
28
|
-
export { getDevTools } from './extra/
|
|
49
|
+
export { getDevTools } from './extra/devtoolsHook'
|
|
29
50
|
export { getDiagnostics, clearDiagnostics, onDiagnostic } from './extra/diagnostics/index'
|
|
30
51
|
|
|
31
52
|
// export dom helper functions (h, makeDOMDriver, etc.)
|
package/src/jsx-runtime.ts
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
|
+
// P46-Q (D188): the pragma is the core's. The build makes './pragma/index' the external 'sygnal'
|
|
2
|
+
// (the core entry) and keeps snabbdom external, so an app ships one copy of each; the element
|
|
3
|
+
// fast path is the core createElement's `.a` (the children as one array)
|
|
1
4
|
import { createElement } from './pragma/index'
|
|
2
|
-
export { Fragment } from './cycle/dom/
|
|
5
|
+
export { Fragment } from './cycle/dom/fragment'
|
|
6
|
+
|
|
7
|
+
// G-351: a 'sygnal' without `.a` (an older core next to this runtime): createElement itself
|
|
8
|
+
const createTag = (createElement as any).a || ((t: any, p: any, c: any[], k: any) => {
|
|
9
|
+
const { children, ...rest } = p
|
|
10
|
+
if (k !== undefined) rest.key = k
|
|
11
|
+
return createElement(t, rest, ...c)
|
|
12
|
+
})
|
|
3
13
|
|
|
4
14
|
export function jsx(type: any, props: any, key?: any): any {
|
|
5
15
|
if (props == null) return createElement(type, null)
|
|
16
|
+
if (typeof type == 'string') {
|
|
17
|
+
const c = props.children
|
|
18
|
+
return createTag(type, props, c === undefined ? [] : Array.isArray(c) ? c : [c], key)
|
|
19
|
+
}
|
|
6
20
|
const { children, ...rest } = props
|
|
7
21
|
if (key !== undefined) rest.key = key
|
|
8
22
|
if (children === undefined) return createElement(type, rest)
|
package/src/jsx.ts
CHANGED
package/src/lazy.ts
CHANGED
|
@@ -1,6 +1,45 @@
|
|
|
1
|
-
|
|
1
|
+
// the core's resolver for lazy components, registered on import (D157)
|
|
2
|
+
import './core/markers/lazy';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* PLAN-5 B-4 (D103): `when` defers the import: 'visible' starts it when a placeholder enters the
|
|
6
|
+
* viewport (IntersectionObserver, `rootMargin`; at once without one), 'idle' when the browser is
|
|
7
|
+
* idle after a placeholder is on the page (requestIdleCallback with a 2 s timeout; setTimeout
|
|
8
|
+
* without it). Until then the placeholder is data-sygnal-lazy="deferred" (not "loading": a Suspense
|
|
9
|
+
* boundary doesn't wait for it, G-385) plus `data-sygnal-when`, in its own place, so it can scroll
|
|
10
|
+
* into view; once the import starts the owners render again (markers/lazy.ts) and it is the
|
|
11
|
+
* loading one. `placeholderHeight` gives the
|
|
12
|
+
* placeholders a min-height (empty ones stacked together would all be visible at once).
|
|
13
|
+
* SSR and renderComponent's mock DOM run no hooks: the placeholder stays until `load()`
|
|
14
|
+
* (preloading, e.g. on hover). All instances share one import.
|
|
15
|
+
*/
|
|
16
|
+
export interface LazyOptions {
|
|
17
|
+
when?: 'visible' | 'idle';
|
|
18
|
+
/** 'visible': the IntersectionObserver's rootMargin ('200px' starts the import a little earlier) */
|
|
19
|
+
rootMargin?: string;
|
|
20
|
+
/** the placeholder's min-height (a number: px), e.g. the component's expected height */
|
|
21
|
+
placeholderHeight?: number | string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const WHEN = 'data-sygnal-when';
|
|
25
|
+
|
|
26
|
+
export function lazy(loadFn: () => Promise<any>, options?: LazyOptions): any {
|
|
2
27
|
let cachedComponent: any = null;
|
|
3
28
|
let loadError: any = null;
|
|
29
|
+
const g: any = globalThis, when = options?.when, ph = options?.placeholderHeight;
|
|
30
|
+
// the deferred import's trigger (once), its observer, the placeholder's hooks
|
|
31
|
+
let go: any, io: any;
|
|
32
|
+
const start = () => { io?.disconnect(); go?.(); go = 0; };
|
|
33
|
+
const arm = (v: any) => {
|
|
34
|
+
if (!go) return;
|
|
35
|
+
if (when == 'idle') {
|
|
36
|
+
const f = () => start();
|
|
37
|
+
g.requestIdleCallback ? g.requestIdleCallback(f, {timeout: 2000}) : setTimeout(f, 1);
|
|
38
|
+
} else if (!g.IntersectionObserver) start();
|
|
39
|
+
else (io ||= new g.IntersectionObserver((es: any[]) => es.some(e => e.isIntersecting) && start(), {rootMargin: options?.rootMargin})).observe(v.elm);
|
|
40
|
+
};
|
|
41
|
+
const hook = when && {insert: arm, update: (_: any, v: any) => when != 'idle' && arm(v), destroy: (v: any) => io?.unobserve(v.elm)};
|
|
42
|
+
const style = ph != null && {minHeight: typeof ph == 'number' ? ph + 'px' : ph};
|
|
4
43
|
|
|
5
44
|
// View function that delegates to the loaded component
|
|
6
45
|
function LazyWrapper(viewArgs: any) {
|
|
@@ -12,22 +51,22 @@ export function lazy(loadFn: () => Promise<any>): any {
|
|
|
12
51
|
}
|
|
13
52
|
if (!cachedComponent) {
|
|
14
53
|
return {
|
|
15
|
-
sel: 'div', data: { attrs: { 'data-sygnal-lazy': 'loading' } },
|
|
54
|
+
sel: 'div', data: { attrs: { 'data-sygnal-lazy': go ? 'deferred' : 'loading', ...go && { [WHEN]: when } }, ...go && { hook }, ...style && { style } },
|
|
16
55
|
children: [], text: undefined, elm: undefined, key: undefined,
|
|
17
56
|
};
|
|
18
57
|
}
|
|
19
58
|
return cachedComponent(viewArgs);
|
|
20
59
|
}
|
|
21
60
|
|
|
22
|
-
// Start loading eagerly and copy static properties when done
|
|
23
|
-
const
|
|
61
|
+
// Start loading eagerly (with `when`, once triggered) and copy static properties when done
|
|
62
|
+
const started = when && new Promise(r => go = r);
|
|
63
|
+
const loadPromise = (started ? started.then(loadFn) : loadFn())
|
|
24
64
|
.then((mod: any) => {
|
|
25
65
|
cachedComponent = mod.default || mod;
|
|
26
66
|
(LazyWrapper as any).__sygnalLazyLoadedComponent = cachedComponent;
|
|
27
67
|
// Copy static properties so the component works on next render
|
|
28
|
-
const statics = ['model', 'intent', '
|
|
29
|
-
'
|
|
30
|
-
'stateSourceName', 'onError', 'debug', 'componentName'];
|
|
68
|
+
const statics = ['model', 'intent', 'context', 'initialState', 'calculated', 'isolatedState',
|
|
69
|
+
'onError', 'debug', 'componentName', 'connections', 'resources', 'route', 'head', 'uses', 'timers', 'persist', 'viewTransitions', 'browser'];
|
|
31
70
|
for (const key of statics) {
|
|
32
71
|
if (cachedComponent[key] !== undefined && (LazyWrapper as any)[key] === undefined) {
|
|
33
72
|
(LazyWrapper as any)[key] = cachedComponent[key];
|
|
@@ -44,7 +83,11 @@ export function lazy(loadFn: () => Promise<any>): any {
|
|
|
44
83
|
(LazyWrapper as any).__sygnalLazyLoaded = () => cachedComponent !== null;
|
|
45
84
|
(LazyWrapper as any).__sygnalLazyLoadedComponent = null;
|
|
46
85
|
(LazyWrapper as any).__sygnalLazyPromise = loadPromise;
|
|
86
|
+
// a deferred import's start (G-385: Suspense waits for its placeholder from then on)
|
|
87
|
+
(LazyWrapper as any).__sygnalLazyStarted = started;
|
|
47
88
|
(LazyWrapper as any).__sygnalLazyReRenderScheduled = false;
|
|
89
|
+
// start the import now (a deferred one too); resolves once it has loaded (or failed)
|
|
90
|
+
(LazyWrapper as any).load = () => (start(), loadPromise);
|
|
48
91
|
|
|
49
92
|
return LazyWrapper;
|
|
50
93
|
}
|
package/src/portal.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import {h} from './cycle/dom/snabbdom';
|
|
2
|
+
// the core's handler for this marker, registered on import (D157)
|
|
3
|
+
import './core/markers/portal';
|
|
2
4
|
|
|
3
5
|
const Portal = (props: any) => {
|
|
4
6
|
const {children, ...sanitizedProps} = props;
|
|
5
7
|
return h('portal', {props: sanitizedProps}, children);
|
|
6
8
|
};
|
|
7
|
-
(Portal as any).
|
|
9
|
+
(Portal as any).componentName = 'portal';
|
|
8
10
|
(Portal as any).preventInstantiation = true;
|
|
9
11
|
|
|
10
12
|
export {Portal};
|