sygnal 5.3.7 → 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 +77 -47
- package/dist/astro/client.cjs.js +33 -8114
- package/dist/astro/client.cjs.js.map +1 -0
- package/dist/astro/client.mjs +33 -8114
- package/dist/astro/client.mjs.map +1 -0
- package/dist/astro/index.cjs.js +1039 -9
- package/dist/astro/index.cjs.js.map +1 -0
- package/dist/astro/index.mjs +1038 -9
- package/dist/astro/index.mjs.map +1 -0
- package/dist/astro/server.cjs.js +3400 -166
- package/dist/astro/server.cjs.js.map +1 -0
- package/dist/astro/server.mjs +3400 -166
- package/dist/astro/server.mjs.map +1 -0
- 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 +4033 -0
- package/dist/diagnostics.cjs.js.map +1 -0
- package/dist/diagnostics.esm.js +4003 -0
- package/dist/diagnostics.esm.js.map +1 -0
- 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 +15283 -6279
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +3739 -370
- package/dist/index.esm.js +15230 -6274
- package/dist/index.esm.js.map +1 -0
- package/dist/jsx-dev-runtime.cjs.js +27 -329
- package/dist/jsx-dev-runtime.cjs.js.map +1 -0
- package/dist/jsx-dev-runtime.esm.js +20 -322
- package/dist/jsx-dev-runtime.esm.js.map +1 -0
- package/dist/jsx-runtime.cjs.js +27 -329
- package/dist/jsx-runtime.cjs.js.map +1 -0
- package/dist/jsx-runtime.esm.js +20 -322
- package/dist/jsx-runtime.esm.js.map +1 -0
- package/dist/jsx.cjs.js +11 -309
- package/dist/jsx.cjs.js.map +1 -0
- package/dist/jsx.esm.js +9 -310
- package/dist/jsx.esm.js.map +1 -0
- 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 +2 -1
- package/dist/sygnal.min.js.map +1 -0
- 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 +5 -14
- package/dist/vike/ClientOnly.cjs.js.map +1 -0
- package/dist/vike/ClientOnly.mjs +5 -14
- package/dist/vike/ClientOnly.mjs.map +1 -0
- package/dist/vike/{+config.js → config/+config.js} +10 -1
- package/dist/vike/config/+config.js.map +1 -0
- package/dist/vike/config/package.json +6 -0
- package/dist/vike/onRenderClient.cjs.js +166 -95
- package/dist/vike/onRenderClient.cjs.js.map +1 -0
- package/dist/vike/onRenderClient.mjs +166 -95
- package/dist/vike/onRenderClient.mjs.map +1 -0
- package/dist/vike/onRenderHtml.cjs.js +60 -24
- package/dist/vike/onRenderHtml.cjs.js.map +1 -0
- package/dist/vike/onRenderHtml.mjs +61 -25
- package/dist/vike/onRenderHtml.mjs.map +1 -0
- package/dist/vite/plugin.cjs.js +926 -65
- package/dist/vite/plugin.cjs.js.map +1 -0
- package/dist/vite/plugin.mjs +925 -65
- package/dist/vite/plugin.mjs.map +1 -0
- 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 +313 -0
- package/package.json +109 -16
- package/src/astro/client.ts +40 -18
- package/src/astro/index.d.ts +48 -1
- package/src/astro/index.ts +106 -9
- package/src/astro/server.ts +11 -3
- package/src/collection.ts +6 -90
- 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 +13 -2
- package/src/cycle/dom/PriorityQueue.ts +4 -2
- package/src/cycle/dom/SymbolTree.ts +18 -47
- package/src/cycle/dom/classNameModule.ts +76 -0
- package/src/cycle/dom/controlledInputModule.ts +50 -0
- package/src/cycle/dom/enrichEventStream.ts +29 -45
- package/src/cycle/dom/fragment.ts +7 -0
- package/src/cycle/dom/isolate.ts +30 -27
- package/src/cycle/dom/makeDOMDriver.ts +115 -57
- package/src/cycle/dom/mockDOMSource.ts +83 -9
- package/src/cycle/dom/modules.ts +21 -4
- 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 +20 -4
- 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 +109 -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 +67 -0
- 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 +250 -0
- package/src/extra/diagnostics/checks/elementCommands.ts +175 -0
- package/src/extra/diagnostics/checks/events.ts +83 -0
- 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 +202 -0
- package/src/extra/diagnostics/checks/inspect.ts +427 -0
- 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 +56 -0
- package/src/extra/diagnostics/checks/public.d.ts +302 -0
- 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 +88 -0
- package/src/extra/diagnostics/checks/shared.ts +203 -0
- 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 +148 -0
- package/src/extra/diagnostics/checks/statics.ts +48 -0
- package/src/extra/diagnostics/checks/strict.ts +55 -0
- 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 +121 -0
- package/src/extra/diagnostics/codes.ts +477 -0
- package/src/extra/diagnostics/index.ts +353 -0
- package/src/extra/diagnostics/legacy.ts +76 -0
- package/src/extra/driverFactories.ts +172 -60
- package/src/extra/elementCommands.ts +53 -0
- package/src/extra/eventDriver.ts +4 -0
- package/src/extra/fetchDriver.ts +519 -0
- package/src/extra/flatten.ts +75 -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 +13 -6
- 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 +94 -210
- 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 +3158 -190
- 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/extra/xstreamExtras.ts +269 -0
- package/src/index.d.ts +3012 -87
- package/src/index.ts +32 -10
- 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 +262 -134
- 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 -119
- 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 +27 -4
- package/src/vite/globalthis-shim.ts +18 -0
- package/src/vite/globalthis.ts +56 -0
- package/src/vite/plugin.d.ts +114 -2
- package/src/vite/plugin.ts +920 -56
- package/src/zag.d.ts +64 -0
- package/src/zag.ts +238 -0
- package/dist/astro/astro/client.d.ts +0 -5
- package/dist/astro/astro/index.d.ts +0 -16
- package/dist/astro/astro/server.d.ts +0 -12
- package/dist/astro/client.d.ts +0 -5
- package/dist/astro/client.esm.js +0 -4665
- package/dist/astro/collection.d.ts +0 -12
- package/dist/astro/component.d.ts +0 -22
- package/dist/astro/cycle/dom/BodyDOMSource.d.ts +0 -10
- package/dist/astro/cycle/dom/DOMSource.d.ts +0 -11
- package/dist/astro/cycle/dom/DocumentDOMSource.d.ts +0 -12
- package/dist/astro/cycle/dom/ElementFinder.d.ts +0 -8
- package/dist/astro/cycle/dom/EventDelegator.d.ts +0 -34
- package/dist/astro/cycle/dom/IsolateModule.d.ts +0 -23
- package/dist/astro/cycle/dom/MainDOMSource.d.ts +0 -32
- package/dist/astro/cycle/dom/PriorityQueue.d.ts +0 -7
- package/dist/astro/cycle/dom/ScopeChecker.d.ts +0 -9
- package/dist/astro/cycle/dom/SymbolTree.d.ts +0 -9
- package/dist/astro/cycle/dom/VNodeWrapper.d.ts +0 -8
- package/dist/astro/cycle/dom/enrichEventStream.d.ts +0 -24
- package/dist/astro/cycle/dom/fromEvent.d.ts +0 -6
- package/dist/astro/cycle/dom/index.d.ts +0 -8
- package/dist/astro/cycle/dom/isolate.d.ts +0 -9
- package/dist/astro/cycle/dom/makeDOMDriver.d.ts +0 -11
- package/dist/astro/cycle/dom/mockDOMSource.d.ts +0 -17
- package/dist/astro/cycle/dom/modules.d.ts +0 -5
- package/dist/astro/cycle/dom/snabbdom.d.ts +0 -22
- package/dist/astro/cycle/dom/styleModule.d.ts +0 -13
- package/dist/astro/cycle/dom/thunk.d.ts +0 -11
- package/dist/astro/cycle/dom/utils.d.ts +0 -8
- package/dist/astro/cycle/isolate/index.d.ts +0 -42
- package/dist/astro/cycle/run/adapt.d.ts +0 -6
- package/dist/astro/cycle/run/index.d.ts +0 -36
- package/dist/astro/cycle/run/internals.d.ts +0 -8
- package/dist/astro/cycle/run/types.d.ts +0 -49
- package/dist/astro/cycle/state/Collection.d.ts +0 -29
- package/dist/astro/cycle/state/StateSource.d.ts +0 -20
- package/dist/astro/cycle/state/index.d.ts +0 -5
- package/dist/astro/cycle/state/pickCombine.d.ts +0 -3
- package/dist/astro/cycle/state/pickMerge.d.ts +0 -3
- package/dist/astro/cycle/state/types.d.ts +0 -18
- package/dist/astro/cycle/state/withState.d.ts +0 -17
- package/dist/astro/extra/classes.d.ts +0 -7
- package/dist/astro/extra/devtools.d.ts +0 -78
- package/dist/astro/extra/dragDriver.d.ts +0 -20
- package/dist/astro/extra/driverFactories.d.ts +0 -12
- package/dist/astro/extra/eventDriver.d.ts +0 -9
- package/dist/astro/extra/exactState.d.ts +0 -1
- package/dist/astro/extra/hmr.d.ts +0 -17
- package/dist/astro/extra/logDriver.d.ts +0 -2
- package/dist/astro/extra/processDrag.d.ts +0 -19
- package/dist/astro/extra/processForm.d.ts +0 -15
- package/dist/astro/extra/run.d.ts +0 -13
- package/dist/astro/extra/xstreamCompat.d.ts +0 -5
- package/dist/astro/index.d.ts +0 -19
- package/dist/astro/index.esm.js +0 -27
- package/dist/astro/jsx-dev-runtime.d.ts +0 -1
- package/dist/astro/jsx-runtime.d.ts +0 -4
- package/dist/astro/jsx.d.ts +0 -2
- package/dist/astro/pragma/fn.d.ts +0 -7
- package/dist/astro/pragma/index.d.ts +0 -7
- package/dist/astro/pragma/is.d.ts +0 -10
- package/dist/astro/server.d.ts +0 -12
- package/dist/astro/server.esm.js +0 -25
- package/dist/astro/switchable.d.ts +0 -7
- package/dist/collection.d.ts +0 -12
- package/dist/component.d.ts +0 -22
- package/dist/cycle/dom/BodyDOMSource.d.ts +0 -10
- package/dist/cycle/dom/DOMSource.d.ts +0 -11
- package/dist/cycle/dom/DocumentDOMSource.d.ts +0 -12
- package/dist/cycle/dom/ElementFinder.d.ts +0 -8
- package/dist/cycle/dom/EventDelegator.d.ts +0 -34
- package/dist/cycle/dom/IsolateModule.d.ts +0 -23
- package/dist/cycle/dom/MainDOMSource.d.ts +0 -32
- package/dist/cycle/dom/PriorityQueue.d.ts +0 -7
- package/dist/cycle/dom/ScopeChecker.d.ts +0 -9
- package/dist/cycle/dom/SymbolTree.d.ts +0 -9
- package/dist/cycle/dom/VNodeWrapper.d.ts +0 -8
- package/dist/cycle/dom/enrichEventStream.d.ts +0 -24
- package/dist/cycle/dom/fromEvent.d.ts +0 -6
- package/dist/cycle/dom/index.d.ts +0 -8
- package/dist/cycle/dom/isolate.d.ts +0 -9
- package/dist/cycle/dom/makeDOMDriver.d.ts +0 -11
- package/dist/cycle/dom/mockDOMSource.d.ts +0 -17
- package/dist/cycle/dom/modules.d.ts +0 -5
- package/dist/cycle/dom/snabbdom.d.ts +0 -22
- package/dist/cycle/dom/styleModule.d.ts +0 -13
- package/dist/cycle/dom/thunk.d.ts +0 -11
- package/dist/cycle/dom/utils.d.ts +0 -8
- package/dist/cycle/isolate/index.d.ts +0 -42
- package/dist/cycle/run/adapt.d.ts +0 -6
- package/dist/cycle/run/index.d.ts +0 -36
- package/dist/cycle/run/internals.d.ts +0 -8
- package/dist/cycle/run/types.d.ts +0 -49
- package/dist/cycle/state/Collection.d.ts +0 -29
- package/dist/cycle/state/StateSource.d.ts +0 -20
- package/dist/cycle/state/index.d.ts +0 -5
- package/dist/cycle/state/pickCombine.d.ts +0 -3
- package/dist/cycle/state/pickMerge.d.ts +0 -3
- package/dist/cycle/state/types.d.ts +0 -18
- package/dist/cycle/state/withState.d.ts +0 -17
- package/dist/extra/classes.d.ts +0 -7
- package/dist/extra/devtools.d.ts +0 -78
- package/dist/extra/dragDriver.d.ts +0 -20
- package/dist/extra/driverFactories.d.ts +0 -12
- package/dist/extra/eventDriver.d.ts +0 -9
- package/dist/extra/exactState.d.ts +0 -1
- package/dist/extra/hmr.d.ts +0 -17
- package/dist/extra/logDriver.d.ts +0 -2
- package/dist/extra/processDrag.d.ts +0 -19
- package/dist/extra/processForm.d.ts +0 -15
- package/dist/extra/run.d.ts +0 -13
- package/dist/extra/xstreamCompat.d.ts +0 -5
- package/dist/jsx-dev-runtime.d.ts +0 -1
- package/dist/jsx-dev-runtime.js +0 -224
- package/dist/jsx-runtime.d.ts +0 -4
- package/dist/jsx-runtime.js +0 -224
- package/dist/jsx.d.ts +0 -2
- package/dist/pragma/fn.d.ts +0 -7
- package/dist/pragma/index.d.ts +0 -7
- package/dist/pragma/is.d.ts +0 -10
- package/dist/switchable.d.ts +0 -7
- package/dist/vike/+config.cjs.js +0 -65
- package/src/component.ts +0 -2256
- 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 -174
- package/src/cycle/state/index.ts +0 -5
- package/src/cycle/state/pickCombine.ts +0 -167
- package/src/cycle/state/pickMerge.ts +0 -122
- package/src/cycle/state/withState.ts +0 -47
- package/src/pragma/fn.ts +0 -55
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ A reactive component framework with pure functions, zero side effects, and autom
|
|
|
14
14
|
- **Pure components** — Views are plain functions. All side effects are handled by drivers, outside your code.
|
|
15
15
|
- **Automatic state management** — Monolithic state tree with no store setup, no providers, no hooks. Trivial undo/redo and time-travel debugging.
|
|
16
16
|
- **Model-View-Intent** — Cleanly separate *what* happens (Model), *when* it happens (Intent), and *how* it looks (View).
|
|
17
|
-
- **Tiny footprint** —
|
|
17
|
+
- **Tiny footprint** — Two runtime dependencies: [snabbdom](https://github.com/snabbdom/snabbdom) and [xstream](https://github.com/staltz/xstream).
|
|
18
18
|
|
|
19
19
|
## Quick Start
|
|
20
20
|
|
|
@@ -26,7 +26,7 @@ cd my-app
|
|
|
26
26
|
npm run dev
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
Choose from Vite (SPA), Vite + PWA, Vike (SSR), or Astro templates in JavaScript or TypeScript.
|
|
29
|
+
Choose from Vite (SPA), Vite + PWA, Vike (SSR), or Astro templates in JavaScript or TypeScript. Without prompts (scripts, CI, coding agents): `npm create sygnal-app@latest my-app -- --template vite --js --install`.
|
|
30
30
|
|
|
31
31
|
**Or add to an existing project:**
|
|
32
32
|
|
|
@@ -73,6 +73,20 @@ run(Counter)
|
|
|
73
73
|
|
|
74
74
|
No store setup, no providers, no hooks — just a function and some properties.
|
|
75
75
|
|
|
76
|
+
## Built for Agents
|
|
77
|
+
|
|
78
|
+
Sygnal includes tooling so that coding agents (and people) can write and debug Sygnal code without guessing:
|
|
79
|
+
|
|
80
|
+
- **[`llms.txt`](https://sygnal.js.org/llms.txt)**: one compact reference of the API in its canonical forms, written for language models.
|
|
81
|
+
- **Diagnostics**: silent wiring mistakes (a selector that matches nothing, an action with no model entry, an EVENTS type nobody selects) are reported as coded messages, such as `[Sygnal SYG104]`, with a fix and a link to the [error reference](https://sygnal.js.org/reference/errors/). They're on automatically in the Vite dev server and in tests, and add nothing to production bundles.
|
|
82
|
+
- **[`sygnal-check`](./sygnal-check)**: a static checker for the same mistakes, with a strict mode for the canonical forms, `--fix`, an app graph (`--graph`) and `explain <code>`.
|
|
83
|
+
- **MCP server**: `sygnal-check mcp` exposes `check`, `graph` and `explain` as tools (`claude mcp add sygnal-check -- npx --no-install sygnal-check mcp`).
|
|
84
|
+
- **`inspect()`**: a machine-readable graph of the running app, in the browser or from `renderComponent()` in a test.
|
|
85
|
+
|
|
86
|
+
The repository also contains an evaluation harness ([`evals/agent-ergonomics`](./evals/agent-ergonomics)) that runs coding agents on the same tasks in a Sygnal app and an equivalent React app, scores each run with hidden acceptance tests, and records time and iteration counts. The baseline results, from before this tooling existed, are in [`results/BASELINE.md`](./evals/agent-ergonomics/results/BASELINE.md).
|
|
87
|
+
|
|
88
|
+
See [Building with AI Agents](https://sygnal.js.org/integration/agents/).
|
|
89
|
+
|
|
76
90
|
## Features
|
|
77
91
|
|
|
78
92
|
### Collections
|
|
@@ -113,12 +127,12 @@ Structured message passing between components:
|
|
|
113
127
|
```jsx
|
|
114
128
|
// Child emits
|
|
115
129
|
TaskCard.model = {
|
|
116
|
-
DELETE: { PARENT: (state) => ({
|
|
130
|
+
DELETE: { PARENT: (state) => ({ taskId: state.id }) }
|
|
117
131
|
}
|
|
118
132
|
|
|
119
|
-
// Parent receives (
|
|
133
|
+
// Parent receives (pass the component itself)
|
|
120
134
|
Lane.intent = ({ CHILD }) => ({
|
|
121
|
-
TASK_DELETED: CHILD.select(TaskCard).
|
|
135
|
+
TASK_DELETED: CHILD.select(TaskCard).map(e => e.taskId),
|
|
122
136
|
})
|
|
123
137
|
```
|
|
124
138
|
|
|
@@ -127,14 +141,16 @@ Lane.intent = ({ CHILD }) => ({
|
|
|
127
141
|
Global broadcast for cross-component communication:
|
|
128
142
|
|
|
129
143
|
```jsx
|
|
144
|
+
import { event } from 'sygnal'
|
|
145
|
+
|
|
130
146
|
// Any component can emit
|
|
131
147
|
Publisher.model = {
|
|
132
|
-
NOTIFY: { EVENTS: (state) =>
|
|
148
|
+
NOTIFY: { EVENTS: event('NOTIFICATION', (state) => state.message) }
|
|
133
149
|
}
|
|
134
150
|
|
|
135
151
|
// Any component can subscribe
|
|
136
152
|
Subscriber.intent = ({ EVENTS }) => ({
|
|
137
|
-
HANDLE: EVENTS.select('
|
|
153
|
+
HANDLE: EVENTS.select('NOTIFICATION'),
|
|
138
154
|
})
|
|
139
155
|
```
|
|
140
156
|
|
|
@@ -170,19 +186,34 @@ import { makeDragDriver } from 'sygnal'
|
|
|
170
186
|
run(RootComponent, { DND: makeDragDriver() })
|
|
171
187
|
```
|
|
172
188
|
|
|
189
|
+
### HTTP and Sockets
|
|
190
|
+
|
|
191
|
+
Requests name the actions that receive their reply; connections are declared from state:
|
|
192
|
+
|
|
193
|
+
```jsx
|
|
194
|
+
import { run, makeFetchDriver, makeSocketDriver } from 'sygnal'
|
|
195
|
+
|
|
196
|
+
Quote.model = {
|
|
197
|
+
LOAD: { HTTP: (state, id) => ({ url: `/api/quotes/${id}`, ok: 'LOADED', error: 'FAILED', latest: true }) },
|
|
198
|
+
LOADED: (state, quote) => ({ ...state, quote }), // the parsed body
|
|
199
|
+
FAILED: (state, { status }) => ({ ...state, error: status }),
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
Chat.connections = (state) => ({
|
|
203
|
+
room: state.room && { socket: `/ws/rooms/${state.room}`, message: 'RECEIVED' },
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
run(App, { HTTP: makeFetchDriver(), WS: makeSocketDriver() })
|
|
207
|
+
```
|
|
208
|
+
|
|
173
209
|
### Custom Drivers
|
|
174
210
|
|
|
175
|
-
Wrap any async operation as a driver:
|
|
211
|
+
Wrap any other async operation as a driver; requests take the same reply actions (`{ value, ok: 'DONE', error: 'FAILED' }`):
|
|
176
212
|
|
|
177
213
|
```javascript
|
|
178
214
|
import { driverFromAsync } from 'sygnal'
|
|
179
215
|
|
|
180
|
-
|
|
181
|
-
const res = await fetch(url)
|
|
182
|
-
return res.json()
|
|
183
|
-
}, { selector: 'endpoint', args: 'url', return: 'data' })
|
|
184
|
-
|
|
185
|
-
run(RootComponent, { API: apiDriver })
|
|
216
|
+
run(RootComponent, { GEO: driverFromAsync(geocode) })
|
|
186
217
|
```
|
|
187
218
|
|
|
188
219
|
### Error Boundaries
|
|
@@ -258,8 +289,10 @@ Access DOM elements declaratively:
|
|
|
258
289
|
|
|
259
290
|
```jsx
|
|
260
291
|
const inputRef = createRef()
|
|
261
|
-
|
|
262
|
-
|
|
292
|
+
|
|
293
|
+
function Search({ state }) {
|
|
294
|
+
return <input ref={inputRef} /> // inputRef.current is the element once mounted
|
|
295
|
+
}
|
|
263
296
|
```
|
|
264
297
|
|
|
265
298
|
### Commands
|
|
@@ -270,10 +303,14 @@ Send imperative commands from parent to child:
|
|
|
270
303
|
import { createCommand } from 'sygnal'
|
|
271
304
|
|
|
272
305
|
const playerCmd = createCommand()
|
|
273
|
-
<VideoPlayer commands={playerCmd} />
|
|
274
306
|
|
|
275
|
-
// Parent sends commands with optional data
|
|
276
|
-
|
|
307
|
+
// Parent passes the command as a prop and sends commands with optional data
|
|
308
|
+
function App({ state }) {
|
|
309
|
+
return <VideoPlayer commands={playerCmd} />
|
|
310
|
+
}
|
|
311
|
+
App.model = {
|
|
312
|
+
SEEK: { EFFECT: () => playerCmd.send('seek', { time: 30 }) },
|
|
313
|
+
}
|
|
277
314
|
|
|
278
315
|
// Child receives via commands$ source
|
|
279
316
|
VideoPlayer.intent = ({ commands$ }) => ({
|
|
@@ -283,7 +320,7 @@ VideoPlayer.intent = ({ commands$ }) => ({
|
|
|
283
320
|
|
|
284
321
|
### Effect Handlers
|
|
285
322
|
|
|
286
|
-
Run side effects without state changes
|
|
323
|
+
Run side effects without state changes:
|
|
287
324
|
|
|
288
325
|
```jsx
|
|
289
326
|
App.model = {
|
|
@@ -299,18 +336,6 @@ App.model = {
|
|
|
299
336
|
}
|
|
300
337
|
```
|
|
301
338
|
|
|
302
|
-
### Model Shorthand
|
|
303
|
-
|
|
304
|
-
Compact syntax for single-driver model entries:
|
|
305
|
-
|
|
306
|
-
```jsx
|
|
307
|
-
App.model = {
|
|
308
|
-
'SEND_CMD | EFFECT': () => playerCmd.send('play'),
|
|
309
|
-
'NOTIFY | EVENTS': (state) => ({ type: 'alert', data: state.message }),
|
|
310
|
-
'DELETE | PARENT': (state) => ({ type: 'DELETE', id: state.id }),
|
|
311
|
-
}
|
|
312
|
-
```
|
|
313
|
-
|
|
314
339
|
### Disposal Hooks
|
|
315
340
|
|
|
316
341
|
Cleanup on unmount with the built-in `DISPOSE` action:
|
|
@@ -346,15 +371,16 @@ App.intent = ({ DOM, SW }) => ({
|
|
|
346
371
|
|
|
347
372
|
### Testing
|
|
348
373
|
|
|
349
|
-
Test components in isolation with `renderComponent
|
|
374
|
+
Test components in isolation with `renderComponent`, driving them with DOM events:
|
|
350
375
|
|
|
351
376
|
```jsx
|
|
352
377
|
import { renderComponent } from 'sygnal'
|
|
353
378
|
|
|
354
379
|
const t = renderComponent(Counter, { initialState: { count: 0 } })
|
|
355
380
|
|
|
356
|
-
t.
|
|
357
|
-
await t.
|
|
381
|
+
t.simulateEvent('.increment', 'click')
|
|
382
|
+
await t.next(s => s.count === 1)
|
|
383
|
+
t.expectNoDiagnostics()
|
|
358
384
|
|
|
359
385
|
t.dispose()
|
|
360
386
|
```
|
|
@@ -374,7 +400,7 @@ const html = renderToString(App, {
|
|
|
374
400
|
|
|
375
401
|
### Vite Plugin
|
|
376
402
|
|
|
377
|
-
Auto-configures JSX
|
|
403
|
+
Auto-configures JSX, HMR with state preservation, and dev-only diagnostics:
|
|
378
404
|
|
|
379
405
|
```javascript
|
|
380
406
|
// vite.config.js
|
|
@@ -430,27 +456,31 @@ Pages are standard Sygnal components in `pages/*/+Page.jsx`. Supports layouts, d
|
|
|
430
456
|
Full type definitions included:
|
|
431
457
|
|
|
432
458
|
```tsx
|
|
433
|
-
import type { RootComponent } from 'sygnal'
|
|
459
|
+
import type { RootComponent, IntentSources, ActionsOf } from 'sygnal'
|
|
434
460
|
|
|
435
461
|
type State = { count: number }
|
|
436
|
-
type Actions = { INCREMENT: null }
|
|
437
462
|
|
|
438
|
-
const
|
|
439
|
-
|
|
463
|
+
const intent = ({ DOM }: IntentSources<State>) => ({
|
|
464
|
+
INCREMENT: DOM.click('.inc'),
|
|
465
|
+
})
|
|
466
|
+
|
|
467
|
+
const App: RootComponent<State, {}, ActionsOf<typeof intent>> = ({ state }) => (
|
|
468
|
+
<button className="inc">{state.count}</button>
|
|
440
469
|
)
|
|
470
|
+
App.intent = intent
|
|
471
|
+
App.model = { INCREMENT: (state) => ({ ...state, count: state.count + 1 }) }
|
|
441
472
|
```
|
|
442
473
|
|
|
474
|
+
Typed actions from the intent, a typed EVENTS registry, typed `CHILD.select()` payloads and type-checked Collection `from`.
|
|
475
|
+
|
|
443
476
|
## Bundler Setup
|
|
444
477
|
|
|
445
|
-
**Vite** (recommended):
|
|
478
|
+
**Vite** (recommended): use the plugin above (`plugins: [sygnal()]`). Without it, configure the automatic JSX runtime yourself:
|
|
446
479
|
|
|
447
480
|
```javascript
|
|
448
|
-
// vite.config.js
|
|
481
|
+
// vite.config.js (Vite 8; under Vite 7 use esbuild: { jsx: 'automatic', jsxImportSource: 'sygnal' })
|
|
449
482
|
export default defineConfig({
|
|
450
|
-
|
|
451
|
-
jsx: 'automatic',
|
|
452
|
-
jsxImportSource: 'sygnal',
|
|
453
|
-
},
|
|
483
|
+
oxc: { jsx: { runtime: 'automatic', importSource: 'sygnal' } },
|
|
454
484
|
})
|
|
455
485
|
```
|
|
456
486
|
|
|
@@ -493,7 +523,7 @@ h('div', [h('h1', 'Hello'), h('button.btn', 'Click')])
|
|
|
493
523
|
|
|
494
524
|
## Acknowledgments
|
|
495
525
|
|
|
496
|
-
Sygnal's reactive architecture is built on patterns from [Cycle.js](https://cycle.js.org/) by [André Staltz](https://github.com/staltz). The Cycle.js runtime, DOM driver, state management, and isolation modules have been absorbed into the library — snabbdom
|
|
526
|
+
Sygnal's reactive architecture is built on patterns from [Cycle.js](https://cycle.js.org/) by [André Staltz](https://github.com/staltz). The Cycle.js runtime, DOM driver, state management, and isolation modules have been absorbed into the library — snabbdom and xstream are the only external dependencies.
|
|
497
527
|
|
|
498
528
|
## License
|
|
499
529
|
|