@plures/praxis 1.0.2 → 1.1.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/FRAMEWORK.md +55 -5
- package/LICENSE +21 -21
- package/README.md +162 -375
- package/core/codegen/docs-generator.ts +5 -2
- package/core/codegen/index.ts +1 -1
- package/core/codegen/ts-generator.ts +15 -15
- package/core/db-adapter/index.ts +2 -2
- package/core/db-adapter/sync-engine.ts +17 -6
- package/core/logic-engine/engine.ts +1 -1
- package/core/logic-engine/index.ts +2 -2
- package/core/logic-engine/protocol.ts +1 -1
- package/core/logic-engine/psf-adapter.ts +8 -4
- package/core/logic-engine/rules.ts +1 -1
- package/core/schema-engine/compiler.ts +53 -11
- package/core/schema-engine/generator.ts +17 -7
- package/core/schema-engine/index.ts +2 -2
- package/core/schema-engine/psf.ts +12 -3
- package/core/schema-engine/types.ts +3 -11
- package/core/schema-engine/validator.ts +112 -22
- package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
- package/dist/browser/index.d.ts +3004 -0
- package/dist/browser/index.js +2892 -0
- package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
- package/dist/browser/integrations/svelte.js +298 -0
- package/dist/node/auth-STARLY7I.js +207 -0
- package/dist/node/build-Y7OT5VBF.js +144 -0
- package/dist/node/canvas-UERZHJYW.js +362 -0
- package/dist/node/chunk-DSDC2JWZ.js +256 -0
- package/dist/node/chunk-FXQZXAWF.js +175 -0
- package/dist/node/chunk-N5Y37EUV.js +202 -0
- package/dist/node/chunk-QGM4M3NI.js +37 -0
- package/dist/node/chunk-RJMWCNHR.js +175 -0
- package/dist/node/chunk-SRM3OPPM.js +404 -0
- package/dist/node/chunk-UATVJBNV.js +175 -0
- package/dist/node/chunk-UY7YEBE2.js +159 -0
- package/dist/node/chunk-XCY2VIFX.js +143 -0
- package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
- package/dist/node/cli/index.cjs +217418 -0
- package/dist/node/cli/index.d.cts +1 -0
- package/dist/node/cli/index.d.ts +1 -0
- package/dist/node/cli/index.js +690 -0
- package/dist/node/cloud/index.cjs +1043 -0
- package/dist/node/cloud/index.d.cts +864 -0
- package/dist/node/cloud/index.d.ts +864 -0
- package/dist/node/cloud/index.js +456 -0
- package/dist/node/cloud-AXOK4PSN.js +212 -0
- package/dist/node/component.cjs +374 -0
- package/dist/node/component.d.cts +125 -0
- package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
- package/dist/node/component.js +9 -0
- package/dist/node/components/index.cjs +216 -0
- package/dist/node/components/index.d.cts +43 -0
- package/dist/{src → node}/components/index.d.ts +8 -8
- package/dist/node/components/index.js +7 -0
- package/dist/node/create-TRLSVCNQ.js +584 -0
- package/dist/node/dev-PMJZUYGE.js +65 -0
- package/dist/node/engine-1iqLe6_P.d.ts +214 -0
- package/dist/node/engine-CVJobhHm.d.cts +214 -0
- package/dist/node/index.cjs +3247 -0
- package/dist/node/index.d.cts +2579 -0
- package/dist/node/index.d.ts +2579 -0
- package/dist/node/index.js +2098 -0
- package/dist/node/integrations/svelte.cjs +330 -0
- package/dist/node/integrations/svelte.d.cts +309 -0
- package/dist/node/integrations/svelte.d.ts +309 -0
- package/dist/node/integrations/svelte.js +300 -0
- package/dist/node/orchestrate-737TCL5H.js +127 -0
- package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
- package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
- package/dist/node/schema.cjs +200 -0
- package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
- package/dist/node/schema.d.ts +371 -0
- package/dist/node/schema.js +9 -0
- package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
- package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
- package/dist/node/verify-YBZ7W24H.js +213239 -0
- package/docs/MONETIZATION.md +21 -16
- package/docs/REACTIVE_REDESIGN.md +132 -0
- package/docs/README.md +47 -36
- package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
- package/docs/TERMINAL_NODE.md +27 -24
- package/docs/core/building-extensions.md +58 -61
- package/docs/core/cli-usage.md +59 -59
- package/docs/core/code-canvas-sync.md +28 -16
- package/docs/core/logic-engine.md +77 -82
- package/docs/core/pluresdb-integration.md +29 -39
- package/docs/core/schema-model.md +66 -52
- package/docs/core/ui-generation.md +57 -49
- package/docs/core/what-is-praxis.md +32 -15
- package/docs/guides/canvas.md +21 -5
- package/docs/guides/getting-started.md +13 -7
- package/docs/guides/history-state-pattern.md +65 -51
- package/docs/guides/orchestration.md +46 -32
- package/docs/guides/parallel-state-pattern.md +56 -72
- package/docs/guides/svelte-integration.md +45 -53
- package/docs/tutorials/README.md +16 -0
- package/docs/tutorials/ecommerce-cart.md +177 -95
- package/docs/tutorials/first-app.md +26 -41
- package/docs/tutorials/form-builder.md +191 -138
- package/docs/tutorials/todo-pluresdb.md +71 -69
- package/package.json +132 -96
- package/src/__tests__/actors.test.ts +68 -68
- package/src/__tests__/billing.test.ts +32 -32
- package/src/__tests__/canvas-components.test.ts +94 -73
- package/src/__tests__/cli-create.test.ts +28 -28
- package/src/__tests__/cloud.test.ts +36 -36
- package/src/__tests__/code-canvas-integration.test.ts +132 -141
- package/src/__tests__/docs-generator.test.ts +3 -9
- package/src/__tests__/dsl.test.ts +58 -64
- package/src/__tests__/edge-cases.test.ts +106 -108
- package/src/__tests__/engine.test.ts +51 -25
- package/src/__tests__/generators.test.ts +42 -44
- package/src/__tests__/introspection.test.ts +104 -114
- package/src/__tests__/pluresdb.test.ts +189 -187
- package/src/__tests__/protocol.test.ts +15 -15
- package/src/__tests__/provisioning.test.ts +61 -61
- package/src/__tests__/schema.test.ts +7 -11
- package/src/__tests__/state-docs-integration.test.ts +162 -145
- package/src/__tests__/svelte-integration.test.ts +16 -19
- package/src/__tests__/tauri-integration.test.ts +149 -147
- package/src/__tests__/terminal-node.test.ts +12 -7
- package/src/__tests__/unum-integration.test.ts +68 -68
- package/src/adapters/cli.ts +21 -15
- package/src/cli/commands/auth.ts +82 -78
- package/src/cli/commands/build.ts +29 -27
- package/src/cli/commands/canvas.ts +338 -127
- package/src/cli/commands/cloud.ts +47 -47
- package/src/cli/commands/create.ts +59 -47
- package/src/cli/commands/dev.ts +12 -12
- package/src/cli/commands/generate.ts +29 -40
- package/src/cli/commands/orchestrate.ts +24 -24
- package/src/cli/commands/verify.ts +49 -0
- package/src/cli/index.ts +21 -2
- package/src/cloud/README.md +28 -15
- package/src/cloud/auth.ts +55 -70
- package/src/cloud/billing.ts +59 -58
- package/src/cloud/client.ts +29 -35
- package/src/cloud/index.ts +19 -40
- package/src/cloud/marketplace.ts +69 -78
- package/src/cloud/provisioning.ts +42 -51
- package/src/cloud/relay/endpoints.ts +30 -34
- package/src/cloud/relay/health/index.ts +1 -1
- package/src/cloud/relay/stats/index.ts +1 -1
- package/src/cloud/relay/sync/index.ts +1 -1
- package/src/cloud/relay/usage/index.ts +1 -1
- package/src/cloud/sponsors.ts +31 -34
- package/src/cloud/types.ts +4 -4
- package/src/components/README.md +1 -0
- package/src/components/TerminalNode.svelte +457 -457
- package/src/components/index.ts +3 -4
- package/src/core/actors.ts +7 -7
- package/src/core/component/generator.ts +10 -28
- package/src/core/engine.ts +51 -24
- package/src/core/introspection.ts +37 -35
- package/src/core/logic/generator.ts +62 -62
- package/src/core/pluresdb/adapter.ts +8 -8
- package/src/core/pluresdb/generator.ts +39 -35
- package/src/core/pluresdb/index.ts +9 -12
- package/src/core/pluresdb/schema-registry.ts +22 -25
- package/src/core/pluresdb/store.ts +57 -57
- package/src/core/protocol.ts +14 -14
- package/src/core/reactive-engine.svelte.ts +65 -0
- package/src/core/reactive-engine.ts +67 -0
- package/src/core/rules.ts +4 -4
- package/src/core/schema/loader.common.ts +150 -0
- package/src/core/schema/loader.ts +19 -149
- package/src/core/schema/normalize.ts +34 -51
- package/src/core/schema/types.ts +47 -11
- package/src/dsl/index.ts +8 -8
- package/src/dsl.ts +11 -17
- package/src/examples/advanced-todo/App.svelte +506 -506
- package/src/examples/advanced-todo/README.md +58 -40
- package/src/examples/advanced-todo/index.ts +3 -3
- package/src/examples/auth-basic/index.ts +30 -30
- package/src/examples/cart/index.ts +50 -50
- package/src/examples/hero-ecommerce/index.ts +130 -157
- package/src/examples/svelte-counter/index.ts +22 -26
- package/src/flows.ts +6 -17
- package/src/index.browser.ts +204 -0
- package/src/index.ts +37 -42
- package/src/integrations/code-canvas.ts +237 -193
- package/src/integrations/pluresdb.ts +55 -35
- package/src/integrations/state-docs.ts +104 -104
- package/src/integrations/svelte.ts +35 -35
- package/src/integrations/tauri.ts +75 -73
- package/src/integrations/unum.ts +68 -61
- package/src/registry.ts +7 -14
- package/src/runtime/terminal-adapter.ts +31 -26
- package/src/step.ts +10 -16
- package/src/types.ts +1 -1
- package/templates/basic-app/README.md +6 -9
- package/templates/fullstack-app/README.md +10 -0
- package/dist/core/codegen/docs-generator.d.ts +0 -123
- package/dist/core/codegen/docs-generator.d.ts.map +0 -1
- package/dist/core/codegen/docs-generator.js +0 -674
- package/dist/core/codegen/docs-generator.js.map +0 -1
- package/dist/core/codegen/index.d.ts +0 -11
- package/dist/core/codegen/index.d.ts.map +0 -1
- package/dist/core/codegen/index.js +0 -13
- package/dist/core/codegen/index.js.map +0 -1
- package/dist/core/codegen/ts-generator.d.ts +0 -8
- package/dist/core/codegen/ts-generator.d.ts.map +0 -1
- package/dist/core/codegen/ts-generator.js +0 -8
- package/dist/core/codegen/ts-generator.js.map +0 -1
- package/dist/core/db-adapter/index.d.ts +0 -18
- package/dist/core/db-adapter/index.d.ts.map +0 -1
- package/dist/core/db-adapter/index.js +0 -23
- package/dist/core/db-adapter/index.js.map +0 -1
- package/dist/core/db-adapter/sync-engine.d.ts +0 -180
- package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
- package/dist/core/db-adapter/sync-engine.js +0 -342
- package/dist/core/db-adapter/sync-engine.js.map +0 -1
- package/dist/core/logic-engine/engine.d.ts +0 -8
- package/dist/core/logic-engine/engine.d.ts.map +0 -1
- package/dist/core/logic-engine/engine.js +0 -8
- package/dist/core/logic-engine/engine.js.map +0 -1
- package/dist/core/logic-engine/index.d.ts +0 -16
- package/dist/core/logic-engine/index.d.ts.map +0 -1
- package/dist/core/logic-engine/index.js +0 -16
- package/dist/core/logic-engine/index.js.map +0 -1
- package/dist/core/logic-engine/protocol.d.ts +0 -7
- package/dist/core/logic-engine/protocol.d.ts.map +0 -1
- package/dist/core/logic-engine/protocol.js +0 -7
- package/dist/core/logic-engine/protocol.js.map +0 -1
- package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
- package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
- package/dist/core/logic-engine/psf-adapter.js +0 -207
- package/dist/core/logic-engine/psf-adapter.js.map +0 -1
- package/dist/core/logic-engine/rules.d.ts +0 -7
- package/dist/core/logic-engine/rules.d.ts.map +0 -1
- package/dist/core/logic-engine/rules.js +0 -7
- package/dist/core/logic-engine/rules.js.map +0 -1
- package/dist/core/schema-engine/compiler.d.ts +0 -198
- package/dist/core/schema-engine/compiler.d.ts.map +0 -1
- package/dist/core/schema-engine/compiler.js +0 -262
- package/dist/core/schema-engine/compiler.js.map +0 -1
- package/dist/core/schema-engine/generator.d.ts +0 -115
- package/dist/core/schema-engine/generator.d.ts.map +0 -1
- package/dist/core/schema-engine/generator.js +0 -506
- package/dist/core/schema-engine/generator.js.map +0 -1
- package/dist/core/schema-engine/index.d.ts +0 -18
- package/dist/core/schema-engine/index.d.ts.map +0 -1
- package/dist/core/schema-engine/index.js +0 -18
- package/dist/core/schema-engine/index.js.map +0 -1
- package/dist/core/schema-engine/psf.d.ts +0 -612
- package/dist/core/schema-engine/psf.d.ts.map +0 -1
- package/dist/core/schema-engine/psf.js +0 -45
- package/dist/core/schema-engine/psf.js.map +0 -1
- package/dist/core/schema-engine/types.d.ts +0 -10
- package/dist/core/schema-engine/types.d.ts.map +0 -1
- package/dist/core/schema-engine/types.js +0 -7
- package/dist/core/schema-engine/types.js.map +0 -1
- package/dist/core/schema-engine/validator.d.ts +0 -140
- package/dist/core/schema-engine/validator.d.ts.map +0 -1
- package/dist/core/schema-engine/validator.js +0 -407
- package/dist/core/schema-engine/validator.js.map +0 -1
- package/dist/src/adapters/cli.d.ts +0 -43
- package/dist/src/adapters/cli.d.ts.map +0 -1
- package/dist/src/adapters/cli.js +0 -126
- package/dist/src/adapters/cli.js.map +0 -1
- package/dist/src/cli/commands/auth.d.ts +0 -26
- package/dist/src/cli/commands/auth.d.ts.map +0 -1
- package/dist/src/cli/commands/auth.js +0 -233
- package/dist/src/cli/commands/auth.js.map +0 -1
- package/dist/src/cli/commands/build.d.ts +0 -23
- package/dist/src/cli/commands/build.d.ts.map +0 -1
- package/dist/src/cli/commands/build.js +0 -162
- package/dist/src/cli/commands/build.js.map +0 -1
- package/dist/src/cli/commands/canvas.d.ts +0 -23
- package/dist/src/cli/commands/canvas.d.ts.map +0 -1
- package/dist/src/cli/commands/canvas.js +0 -215
- package/dist/src/cli/commands/canvas.js.map +0 -1
- package/dist/src/cli/commands/cloud.d.ts +0 -27
- package/dist/src/cli/commands/cloud.d.ts.map +0 -1
- package/dist/src/cli/commands/cloud.js +0 -232
- package/dist/src/cli/commands/cloud.js.map +0 -1
- package/dist/src/cli/commands/create.d.ts +0 -21
- package/dist/src/cli/commands/create.d.ts.map +0 -1
- package/dist/src/cli/commands/create.js +0 -621
- package/dist/src/cli/commands/create.js.map +0 -1
- package/dist/src/cli/commands/dev.d.ts +0 -21
- package/dist/src/cli/commands/dev.d.ts.map +0 -1
- package/dist/src/cli/commands/dev.js +0 -71
- package/dist/src/cli/commands/dev.js.map +0 -1
- package/dist/src/cli/commands/generate.d.ts +0 -25
- package/dist/src/cli/commands/generate.d.ts.map +0 -1
- package/dist/src/cli/commands/generate.js +0 -168
- package/dist/src/cli/commands/generate.js.map +0 -1
- package/dist/src/cli/commands/orchestrate.d.ts +0 -44
- package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
- package/dist/src/cli/commands/orchestrate.js +0 -150
- package/dist/src/cli/commands/orchestrate.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -8
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -211
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cloud/auth.d.ts +0 -51
- package/dist/src/cloud/auth.d.ts.map +0 -1
- package/dist/src/cloud/auth.js +0 -194
- package/dist/src/cloud/auth.js.map +0 -1
- package/dist/src/cloud/billing.d.ts +0 -184
- package/dist/src/cloud/billing.d.ts.map +0 -1
- package/dist/src/cloud/billing.js +0 -179
- package/dist/src/cloud/billing.js.map +0 -1
- package/dist/src/cloud/client.d.ts +0 -39
- package/dist/src/cloud/client.d.ts.map +0 -1
- package/dist/src/cloud/client.js +0 -176
- package/dist/src/cloud/client.js.map +0 -1
- package/dist/src/cloud/index.d.ts +0 -44
- package/dist/src/cloud/index.d.ts.map +0 -1
- package/dist/src/cloud/index.js +0 -44
- package/dist/src/cloud/index.js.map +0 -1
- package/dist/src/cloud/marketplace.d.ts +0 -166
- package/dist/src/cloud/marketplace.d.ts.map +0 -1
- package/dist/src/cloud/marketplace.js +0 -159
- package/dist/src/cloud/marketplace.js.map +0 -1
- package/dist/src/cloud/provisioning.d.ts +0 -110
- package/dist/src/cloud/provisioning.d.ts.map +0 -1
- package/dist/src/cloud/provisioning.js +0 -148
- package/dist/src/cloud/provisioning.js.map +0 -1
- package/dist/src/cloud/relay/endpoints.d.ts +0 -62
- package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
- package/dist/src/cloud/relay/endpoints.js +0 -217
- package/dist/src/cloud/relay/endpoints.js.map +0 -1
- package/dist/src/cloud/relay/health/index.d.ts +0 -5
- package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/health/index.js +0 -9
- package/dist/src/cloud/relay/health/index.js.map +0 -1
- package/dist/src/cloud/relay/stats/index.d.ts +0 -5
- package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/stats/index.js +0 -9
- package/dist/src/cloud/relay/stats/index.js.map +0 -1
- package/dist/src/cloud/relay/sync/index.d.ts +0 -5
- package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/sync/index.js +0 -9
- package/dist/src/cloud/relay/sync/index.js.map +0 -1
- package/dist/src/cloud/relay/usage/index.d.ts +0 -5
- package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/usage/index.js +0 -9
- package/dist/src/cloud/relay/usage/index.js.map +0 -1
- package/dist/src/cloud/sponsors.d.ts +0 -81
- package/dist/src/cloud/sponsors.d.ts.map +0 -1
- package/dist/src/cloud/sponsors.js +0 -130
- package/dist/src/cloud/sponsors.js.map +0 -1
- package/dist/src/cloud/types.d.ts +0 -169
- package/dist/src/cloud/types.d.ts.map +0 -1
- package/dist/src/cloud/types.js +0 -7
- package/dist/src/cloud/types.js.map +0 -1
- package/dist/src/components/index.d.ts.map +0 -1
- package/dist/src/components/index.js +0 -17
- package/dist/src/components/index.js.map +0 -1
- package/dist/src/core/actors.d.ts +0 -95
- package/dist/src/core/actors.d.ts.map +0 -1
- package/dist/src/core/actors.js +0 -158
- package/dist/src/core/actors.js.map +0 -1
- package/dist/src/core/component/generator.d.ts.map +0 -1
- package/dist/src/core/component/generator.js +0 -349
- package/dist/src/core/component/generator.js.map +0 -1
- package/dist/src/core/engine.d.ts +0 -92
- package/dist/src/core/engine.d.ts.map +0 -1
- package/dist/src/core/engine.js +0 -199
- package/dist/src/core/engine.js.map +0 -1
- package/dist/src/core/introspection.d.ts +0 -141
- package/dist/src/core/introspection.d.ts.map +0 -1
- package/dist/src/core/introspection.js +0 -208
- package/dist/src/core/introspection.js.map +0 -1
- package/dist/src/core/logic/generator.d.ts +0 -76
- package/dist/src/core/logic/generator.d.ts.map +0 -1
- package/dist/src/core/logic/generator.js +0 -370
- package/dist/src/core/logic/generator.js.map +0 -1
- package/dist/src/core/pluresdb/adapter.d.ts +0 -72
- package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
- package/dist/src/core/pluresdb/adapter.js +0 -73
- package/dist/src/core/pluresdb/adapter.js.map +0 -1
- package/dist/src/core/pluresdb/generator.d.ts +0 -58
- package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
- package/dist/src/core/pluresdb/generator.js +0 -191
- package/dist/src/core/pluresdb/generator.js.map +0 -1
- package/dist/src/core/pluresdb/index.d.ts +0 -15
- package/dist/src/core/pluresdb/index.d.ts.map +0 -1
- package/dist/src/core/pluresdb/index.js +0 -11
- package/dist/src/core/pluresdb/index.js.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
- package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.js +0 -130
- package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
- package/dist/src/core/pluresdb/store.d.ts +0 -199
- package/dist/src/core/pluresdb/store.d.ts.map +0 -1
- package/dist/src/core/pluresdb/store.js +0 -344
- package/dist/src/core/pluresdb/store.js.map +0 -1
- package/dist/src/core/protocol.d.ts.map +0 -1
- package/dist/src/core/protocol.js +0 -46
- package/dist/src/core/protocol.js.map +0 -1
- package/dist/src/core/rules.d.ts +0 -120
- package/dist/src/core/rules.d.ts.map +0 -1
- package/dist/src/core/rules.js +0 -81
- package/dist/src/core/rules.js.map +0 -1
- package/dist/src/core/schema/loader.d.ts +0 -47
- package/dist/src/core/schema/loader.d.ts.map +0 -1
- package/dist/src/core/schema/loader.js +0 -189
- package/dist/src/core/schema/loader.js.map +0 -1
- package/dist/src/core/schema/normalize.d.ts +0 -72
- package/dist/src/core/schema/normalize.d.ts.map +0 -1
- package/dist/src/core/schema/normalize.js +0 -190
- package/dist/src/core/schema/normalize.js.map +0 -1
- package/dist/src/core/schema/types.d.ts.map +0 -1
- package/dist/src/core/schema/types.js +0 -161
- package/dist/src/core/schema/types.js.map +0 -1
- package/dist/src/dsl/index.d.ts +0 -152
- package/dist/src/dsl/index.d.ts.map +0 -1
- package/dist/src/dsl/index.js +0 -132
- package/dist/src/dsl/index.js.map +0 -1
- package/dist/src/dsl.d.ts +0 -124
- package/dist/src/dsl.d.ts.map +0 -1
- package/dist/src/dsl.js +0 -130
- package/dist/src/dsl.js.map +0 -1
- package/dist/src/examples/advanced-todo/index.d.ts +0 -55
- package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
- package/dist/src/examples/advanced-todo/index.js +0 -222
- package/dist/src/examples/advanced-todo/index.js.map +0 -1
- package/dist/src/examples/auth-basic/index.d.ts +0 -17
- package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
- package/dist/src/examples/auth-basic/index.js +0 -122
- package/dist/src/examples/auth-basic/index.js.map +0 -1
- package/dist/src/examples/cart/index.d.ts +0 -19
- package/dist/src/examples/cart/index.d.ts.map +0 -1
- package/dist/src/examples/cart/index.js +0 -202
- package/dist/src/examples/cart/index.js.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
- package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.js +0 -506
- package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
- package/dist/src/examples/svelte-counter/index.d.ts +0 -31
- package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
- package/dist/src/examples/svelte-counter/index.js +0 -123
- package/dist/src/examples/svelte-counter/index.js.map +0 -1
- package/dist/src/flows.d.ts +0 -125
- package/dist/src/flows.d.ts.map +0 -1
- package/dist/src/flows.js +0 -160
- package/dist/src/flows.js.map +0 -1
- package/dist/src/index.d.ts +0 -77
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -64
- package/dist/src/index.js.map +0 -1
- package/dist/src/integrations/code-canvas.d.ts +0 -265
- package/dist/src/integrations/code-canvas.d.ts.map +0 -1
- package/dist/src/integrations/code-canvas.js +0 -451
- package/dist/src/integrations/code-canvas.js.map +0 -1
- package/dist/src/integrations/pluresdb.d.ts +0 -117
- package/dist/src/integrations/pluresdb.d.ts.map +0 -1
- package/dist/src/integrations/pluresdb.js +0 -117
- package/dist/src/integrations/pluresdb.js.map +0 -1
- package/dist/src/integrations/state-docs.d.ts +0 -191
- package/dist/src/integrations/state-docs.d.ts.map +0 -1
- package/dist/src/integrations/state-docs.js +0 -515
- package/dist/src/integrations/state-docs.js.map +0 -1
- package/dist/src/integrations/svelte.d.ts.map +0 -1
- package/dist/src/integrations/svelte.js +0 -447
- package/dist/src/integrations/svelte.js.map +0 -1
- package/dist/src/integrations/tauri.d.ts +0 -360
- package/dist/src/integrations/tauri.d.ts.map +0 -1
- package/dist/src/integrations/tauri.js +0 -278
- package/dist/src/integrations/tauri.js.map +0 -1
- package/dist/src/integrations/unum.d.ts +0 -159
- package/dist/src/integrations/unum.d.ts.map +0 -1
- package/dist/src/integrations/unum.js +0 -240
- package/dist/src/integrations/unum.js.map +0 -1
- package/dist/src/registry.d.ts +0 -94
- package/dist/src/registry.d.ts.map +0 -1
- package/dist/src/registry.js +0 -181
- package/dist/src/registry.js.map +0 -1
- package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
- package/dist/src/runtime/terminal-adapter.js +0 -239
- package/dist/src/runtime/terminal-adapter.js.map +0 -1
- package/dist/src/step.d.ts +0 -34
- package/dist/src/step.d.ts.map +0 -1
- package/dist/src/step.js +0 -111
- package/dist/src/step.js.map +0 -1
- package/dist/src/types.d.ts +0 -63
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -6
- package/dist/src/types.js.map +0 -1
- package/dist/tools/cli/commands/index.d.ts +0 -7
- package/dist/tools/cli/commands/index.d.ts.map +0 -1
- package/dist/tools/cli/commands/index.js +0 -7
- package/dist/tools/cli/commands/index.js.map +0 -1
- package/dist/tools/cli/index.d.ts +0 -8
- package/dist/tools/cli/index.d.ts.map +0 -1
- package/dist/tools/cli/index.js +0 -9
- package/dist/tools/cli/index.js.map +0 -1
- package/dist/tools/watcher/index.d.ts +0 -105
- package/dist/tools/watcher/index.d.ts.map +0 -1
- package/dist/tools/watcher/index.js +0 -213
- package/dist/tools/watcher/index.js.map +0 -1
- package/dist/ui/canvas/canvas-projection.d.ts +0 -78
- package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-projection.js +0 -416
- package/dist/ui/canvas/canvas-projection.js.map +0 -1
- package/dist/ui/canvas/canvas-state.d.ts +0 -200
- package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-state.js +0 -464
- package/dist/ui/canvas/canvas-state.js.map +0 -1
- package/dist/ui/canvas/components/index.d.ts +0 -95
- package/dist/ui/canvas/components/index.d.ts.map +0 -1
- package/dist/ui/canvas/components/index.js +0 -19
- package/dist/ui/canvas/components/index.js.map +0 -1
- package/dist/ui/canvas/index.d.ts +0 -32
- package/dist/ui/canvas/index.d.ts.map +0 -1
- package/dist/ui/canvas/index.js +0 -32
- package/dist/ui/canvas/index.js.map +0 -1
- package/dist/ui/svelte-generator/index.d.ts +0 -9
- package/dist/ui/svelte-generator/index.d.ts.map +0 -1
- package/dist/ui/svelte-generator/index.js +0 -11
- package/dist/ui/svelte-generator/index.js.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
- package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.js +0 -506
- package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
|
@@ -64,12 +64,12 @@ Facts are typed propositions about your domain. They represent "what is true" af
|
|
|
64
64
|
}
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
| Field
|
|
68
|
-
|
|
69
|
-
| `id`
|
|
70
|
-
| `tag`
|
|
71
|
-
| `description` | string | Yes
|
|
72
|
-
| `payload`
|
|
67
|
+
| Field | Type | Required | Description |
|
|
68
|
+
| ------------- | ------ | -------- | ---------------------------- |
|
|
69
|
+
| `id` | string | Yes | Unique identifier |
|
|
70
|
+
| `tag` | string | Yes | Fact tag (used in code) |
|
|
71
|
+
| `description` | string | Yes | Human-readable description |
|
|
72
|
+
| `payload` | object | Yes | JSON Schema for fact payload |
|
|
73
73
|
|
|
74
74
|
### Events
|
|
75
75
|
|
|
@@ -94,12 +94,12 @@ Events are things that happen in your application that drive state changes.
|
|
|
94
94
|
}
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-
| Field
|
|
98
|
-
|
|
99
|
-
| `id`
|
|
100
|
-
| `tag`
|
|
101
|
-
| `description` | string | Yes
|
|
102
|
-
| `payload`
|
|
97
|
+
| Field | Type | Required | Description |
|
|
98
|
+
| ------------- | ------ | -------- | ----------------------------- |
|
|
99
|
+
| `id` | string | Yes | Unique identifier |
|
|
100
|
+
| `tag` | string | Yes | Event tag (used in code) |
|
|
101
|
+
| `description` | string | Yes | Human-readable description |
|
|
102
|
+
| `payload` | object | Yes | JSON Schema for event payload |
|
|
103
103
|
|
|
104
104
|
### Rules
|
|
105
105
|
|
|
@@ -123,14 +123,14 @@ Rules are pure functions that produce facts from events and current state.
|
|
|
123
123
|
}
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
-
| Field
|
|
127
|
-
|
|
128
|
-
| `id`
|
|
129
|
-
| `name`
|
|
130
|
-
| `description` | string
|
|
131
|
-
| `triggers`
|
|
132
|
-
| `then`
|
|
133
|
-
| `priority`
|
|
126
|
+
| Field | Type | Required | Description |
|
|
127
|
+
| ------------- | -------- | -------- | ----------------------------------- |
|
|
128
|
+
| `id` | string | Yes | Unique identifier |
|
|
129
|
+
| `name` | string | Yes | Rule name |
|
|
130
|
+
| `description` | string | Yes | What the rule does |
|
|
131
|
+
| `triggers` | string[] | No | Events that trigger this rule |
|
|
132
|
+
| `then` | object | Yes | Rule implementation |
|
|
133
|
+
| `priority` | number | No | Execution priority (higher = first) |
|
|
134
134
|
|
|
135
135
|
### Constraints
|
|
136
136
|
|
|
@@ -154,14 +154,14 @@ Constraints are invariants that must always hold true.
|
|
|
154
154
|
}
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
-
| Field
|
|
158
|
-
|
|
159
|
-
| `id`
|
|
160
|
-
| `name`
|
|
161
|
-
| `description`
|
|
162
|
-
| `check`
|
|
163
|
-
| `errorMessage` | string | Yes
|
|
164
|
-
| `severity`
|
|
157
|
+
| Field | Type | Required | Description |
|
|
158
|
+
| -------------- | ------ | -------- | ------------------------------- |
|
|
159
|
+
| `id` | string | Yes | Unique identifier |
|
|
160
|
+
| `name` | string | Yes | Constraint name |
|
|
161
|
+
| `description` | string | Yes | What the constraint ensures |
|
|
162
|
+
| `check` | object | Yes | Constraint check implementation |
|
|
163
|
+
| `errorMessage` | string | Yes | Error message when violated |
|
|
164
|
+
| `severity` | string | Yes | `error` or `warning` |
|
|
165
165
|
|
|
166
166
|
### Models
|
|
167
167
|
|
|
@@ -179,11 +179,13 @@ Models define your data structures.
|
|
|
179
179
|
{ "name": "username", "type": "string", "description": "Username" },
|
|
180
180
|
{ "name": "email", "type": "string", "description": "Email address" },
|
|
181
181
|
{ "name": "createdAt", "type": "datetime", "description": "Creation time" },
|
|
182
|
-
{
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
182
|
+
{
|
|
183
|
+
"name": "role",
|
|
184
|
+
"type": { "enum": ["admin", "user", "guest"] },
|
|
185
|
+
"description": "User role"
|
|
186
|
+
}
|
|
186
187
|
],
|
|
188
|
+
"indexes": [{ "name": "idx_email", "fields": ["email"], "unique": true }],
|
|
187
189
|
"relationships": [
|
|
188
190
|
{ "name": "posts", "type": "one-to-many", "target": "Post", "foreignKey": "authorId" }
|
|
189
191
|
]
|
|
@@ -194,17 +196,17 @@ Models define your data structures.
|
|
|
194
196
|
|
|
195
197
|
#### Field Types
|
|
196
198
|
|
|
197
|
-
| Type
|
|
198
|
-
|
|
199
|
-
| `string`
|
|
200
|
-
| `number`
|
|
201
|
-
| `boolean`
|
|
202
|
-
| `uuid`
|
|
203
|
-
| `datetime`
|
|
204
|
-
| `object`
|
|
205
|
-
| `{ array: { type } }`
|
|
206
|
-
| `{ enum: [...] }`
|
|
207
|
-
| `{ reference: "Model" }` | Reference to another model | Foreign key
|
|
199
|
+
| Type | Description | Example |
|
|
200
|
+
| ------------------------ | -------------------------- | ------------------------ |
|
|
201
|
+
| `string` | Text value | `"Hello"` |
|
|
202
|
+
| `number` | Numeric value | `42` |
|
|
203
|
+
| `boolean` | True/false | `true` |
|
|
204
|
+
| `uuid` | UUID string | `"550e8400-..."` |
|
|
205
|
+
| `datetime` | ISO 8601 date | `"2024-01-01T00:00:00Z"` |
|
|
206
|
+
| `object` | Nested object | `{ key: value }` |
|
|
207
|
+
| `{ array: { type } }` | Array of type | `[1, 2, 3]` |
|
|
208
|
+
| `{ enum: [...] }` | Enumeration | `"active"` |
|
|
209
|
+
| `{ reference: "Model" }` | Reference to another model | Foreign key |
|
|
208
210
|
|
|
209
211
|
### Components
|
|
210
212
|
|
|
@@ -220,8 +222,18 @@ Components define UI elements generated from the schema.
|
|
|
220
222
|
"description": "Form for creating/editing users",
|
|
221
223
|
"model": "User",
|
|
222
224
|
"props": [
|
|
223
|
-
{
|
|
224
|
-
|
|
225
|
+
{
|
|
226
|
+
"name": "user",
|
|
227
|
+
"type": "User",
|
|
228
|
+
"required": false,
|
|
229
|
+
"description": "Existing user to edit"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"name": "onSubmit",
|
|
233
|
+
"type": "function",
|
|
234
|
+
"required": true,
|
|
235
|
+
"description": "Submit handler"
|
|
236
|
+
}
|
|
225
237
|
],
|
|
226
238
|
"events": [
|
|
227
239
|
{ "name": "submit", "payload": "User", "description": "Form submitted" },
|
|
@@ -234,13 +246,13 @@ Components define UI elements generated from the schema.
|
|
|
234
246
|
|
|
235
247
|
#### Component Types
|
|
236
248
|
|
|
237
|
-
| Type
|
|
238
|
-
|
|
239
|
-
| `form`
|
|
240
|
-
| `display`
|
|
241
|
-
| `list`
|
|
242
|
-
| `editor`
|
|
243
|
-
| `composite` | Composed of others | Layout, composition
|
|
249
|
+
| Type | Description | Generated Features |
|
|
250
|
+
| ----------- | ------------------ | --------------------------- |
|
|
251
|
+
| `form` | Input form | Validation, submit handling |
|
|
252
|
+
| `display` | Display data | Data binding, formatting |
|
|
253
|
+
| `list` | List of items | Pagination, filtering |
|
|
254
|
+
| `editor` | Rich editor | Editing capabilities |
|
|
255
|
+
| `composite` | Composed of others | Layout, composition |
|
|
244
256
|
|
|
245
257
|
### Flows
|
|
246
258
|
|
|
@@ -356,6 +368,7 @@ praxis validate --schema ./schema.psf.json
|
|
|
356
368
|
```
|
|
357
369
|
|
|
358
370
|
Common validation errors:
|
|
371
|
+
|
|
359
372
|
- Missing required fields
|
|
360
373
|
- Invalid type definitions
|
|
361
374
|
- Duplicate IDs
|
|
@@ -401,6 +414,7 @@ praxis generate --schema ./schema.psf.json --watch
|
|
|
401
414
|
```
|
|
402
415
|
|
|
403
416
|
Generated outputs:
|
|
417
|
+
|
|
404
418
|
- `facts.ts` - Fact type definitions and creators
|
|
405
419
|
- `events.ts` - Event type definitions and creators
|
|
406
420
|
- `rules.ts` - Rule implementations
|
|
@@ -5,6 +5,7 @@ Praxis automatically generates Svelte components from your schema definitions. T
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
7
|
From a single schema definition, Praxis generates:
|
|
8
|
+
|
|
8
9
|
- Svelte 5 components with runes
|
|
9
10
|
- TypeScript type definitions
|
|
10
11
|
- Data binding and validation
|
|
@@ -26,6 +27,7 @@ flowchart LR
|
|
|
26
27
|
Forms are generated from model definitions:
|
|
27
28
|
|
|
28
29
|
**Schema:**
|
|
30
|
+
|
|
29
31
|
```json
|
|
30
32
|
{
|
|
31
33
|
"components": [
|
|
@@ -41,33 +43,34 @@ Forms are generated from model definitions:
|
|
|
41
43
|
```
|
|
42
44
|
|
|
43
45
|
**Generated Component:**
|
|
46
|
+
|
|
44
47
|
```svelte
|
|
45
48
|
<script lang="ts">
|
|
46
49
|
import type { User } from '../models';
|
|
47
|
-
|
|
50
|
+
|
|
48
51
|
interface Props {
|
|
49
52
|
user?: User;
|
|
50
53
|
onsubmit?: (user: User) => void;
|
|
51
54
|
oncancel?: () => void;
|
|
52
55
|
}
|
|
53
|
-
|
|
56
|
+
|
|
54
57
|
let { user = $bindable(), onsubmit, oncancel }: Props = $props();
|
|
55
|
-
|
|
58
|
+
|
|
56
59
|
let formData = $state({
|
|
57
60
|
username: user?.username ?? '',
|
|
58
61
|
email: user?.email ?? '',
|
|
59
62
|
role: user?.role ?? 'user',
|
|
60
63
|
});
|
|
61
|
-
|
|
64
|
+
|
|
62
65
|
let errors = $state<Record<string, string>>({});
|
|
63
|
-
|
|
66
|
+
|
|
64
67
|
function validate(): boolean {
|
|
65
68
|
errors = {};
|
|
66
69
|
if (!formData.username) errors.username = 'Username is required';
|
|
67
70
|
if (!formData.email) errors.email = 'Email is required';
|
|
68
71
|
return Object.keys(errors).length === 0;
|
|
69
72
|
}
|
|
70
|
-
|
|
73
|
+
|
|
71
74
|
function handleSubmit(e: Event) {
|
|
72
75
|
e.preventDefault();
|
|
73
76
|
if (validate()) {
|
|
@@ -82,13 +85,13 @@ Forms are generated from model definitions:
|
|
|
82
85
|
<input id="username" bind:value={formData.username} />
|
|
83
86
|
{#if errors.username}<span class="error">{errors.username}</span>{/if}
|
|
84
87
|
</div>
|
|
85
|
-
|
|
88
|
+
|
|
86
89
|
<div class="field">
|
|
87
90
|
<label for="email">Email</label>
|
|
88
91
|
<input id="email" type="email" bind:value={formData.email} />
|
|
89
92
|
{#if errors.email}<span class="error">{errors.email}</span>{/if}
|
|
90
93
|
</div>
|
|
91
|
-
|
|
94
|
+
|
|
92
95
|
<div class="field">
|
|
93
96
|
<label for="role">Role</label>
|
|
94
97
|
<select id="role" bind:value={formData.role}>
|
|
@@ -97,7 +100,7 @@ Forms are generated from model definitions:
|
|
|
97
100
|
<option value="guest">Guest</option>
|
|
98
101
|
</select>
|
|
99
102
|
</div>
|
|
100
|
-
|
|
103
|
+
|
|
101
104
|
<div class="actions">
|
|
102
105
|
<button type="submit">Save</button>
|
|
103
106
|
<button type="button" onclick={oncancel}>Cancel</button>
|
|
@@ -110,6 +113,7 @@ Forms are generated from model definitions:
|
|
|
110
113
|
Display components show data in read-only format:
|
|
111
114
|
|
|
112
115
|
**Schema:**
|
|
116
|
+
|
|
113
117
|
```json
|
|
114
118
|
{
|
|
115
119
|
"components": [
|
|
@@ -125,15 +129,16 @@ Display components show data in read-only format:
|
|
|
125
129
|
```
|
|
126
130
|
|
|
127
131
|
**Generated Component:**
|
|
132
|
+
|
|
128
133
|
```svelte
|
|
129
134
|
<script lang="ts">
|
|
130
135
|
import type { User } from '../models';
|
|
131
|
-
|
|
136
|
+
|
|
132
137
|
interface Props {
|
|
133
138
|
user: User;
|
|
134
139
|
onclick?: (user: User) => void;
|
|
135
140
|
}
|
|
136
|
-
|
|
141
|
+
|
|
137
142
|
let { user, onclick }: Props = $props();
|
|
138
143
|
</script>
|
|
139
144
|
|
|
@@ -149,6 +154,7 @@ Display components show data in read-only format:
|
|
|
149
154
|
List components display collections:
|
|
150
155
|
|
|
151
156
|
**Schema:**
|
|
157
|
+
|
|
152
158
|
```json
|
|
153
159
|
{
|
|
154
160
|
"components": [
|
|
@@ -167,19 +173,20 @@ List components display collections:
|
|
|
167
173
|
```
|
|
168
174
|
|
|
169
175
|
**Generated Component:**
|
|
176
|
+
|
|
170
177
|
```svelte
|
|
171
178
|
<script lang="ts">
|
|
172
179
|
import type { User } from '../models';
|
|
173
180
|
import UserCard from './UserCard.svelte';
|
|
174
|
-
|
|
181
|
+
|
|
175
182
|
interface Props {
|
|
176
183
|
users: User[];
|
|
177
184
|
filter?: string;
|
|
178
185
|
onselect?: (user: User) => void;
|
|
179
186
|
}
|
|
180
|
-
|
|
187
|
+
|
|
181
188
|
let { users, filter = '', onselect }: Props = $props();
|
|
182
|
-
|
|
189
|
+
|
|
183
190
|
let filtered = $derived(
|
|
184
191
|
filter
|
|
185
192
|
? users.filter(u => u.username.includes(filter))
|
|
@@ -191,7 +198,7 @@ List components display collections:
|
|
|
191
198
|
{#each filtered as user (user.id)}
|
|
192
199
|
<UserCard {user} onclick={onselect} />
|
|
193
200
|
{/each}
|
|
194
|
-
|
|
201
|
+
|
|
195
202
|
{#if filtered.length === 0}
|
|
196
203
|
<p class="empty">No users found</p>
|
|
197
204
|
{/if}
|
|
@@ -203,6 +210,7 @@ List components display collections:
|
|
|
203
210
|
Editor components provide rich editing capabilities:
|
|
204
211
|
|
|
205
212
|
**Schema:**
|
|
213
|
+
|
|
206
214
|
```json
|
|
207
215
|
{
|
|
208
216
|
"components": [
|
|
@@ -251,9 +259,7 @@ Define events the component emits:
|
|
|
251
259
|
"id": "comp_cart_item",
|
|
252
260
|
"name": "CartItem",
|
|
253
261
|
"type": "display",
|
|
254
|
-
"props": [
|
|
255
|
-
{ "name": "item", "type": "CartItem", "required": true }
|
|
256
|
-
],
|
|
262
|
+
"props": [{ "name": "item", "type": "CartItem", "required": true }],
|
|
257
263
|
"events": [
|
|
258
264
|
{ "name": "remove", "payload": "{ itemId: string }" },
|
|
259
265
|
{ "name": "updateQuantity", "payload": "{ itemId: string; quantity: number }" }
|
|
@@ -272,11 +278,11 @@ Generated components can be extended without modifying them:
|
|
|
272
278
|
<script lang="ts">
|
|
273
279
|
import ProductCard from './generated/ProductCard.svelte';
|
|
274
280
|
import type { Product } from './generated/models';
|
|
275
|
-
|
|
281
|
+
|
|
276
282
|
interface Props {
|
|
277
283
|
product: Product;
|
|
278
284
|
}
|
|
279
|
-
|
|
285
|
+
|
|
280
286
|
let { product }: Props = $props();
|
|
281
287
|
</script>
|
|
282
288
|
|
|
@@ -290,22 +296,23 @@ Generated components can be extended without modifying them:
|
|
|
290
296
|
|
|
291
297
|
Praxis maps schema field types to HTML input types:
|
|
292
298
|
|
|
293
|
-
| Schema Type
|
|
294
|
-
|
|
295
|
-
| `string`
|
|
296
|
-
| `number`
|
|
297
|
-
| `boolean`
|
|
298
|
-
| `datetime`
|
|
299
|
-
| `{ enum: [...] }`
|
|
300
|
-
| `{ array: {...} }` | Custom
|
|
301
|
-
| `object`
|
|
302
|
-
| `uuid`
|
|
299
|
+
| Schema Type | HTML Input | Component |
|
|
300
|
+
| ------------------ | ------------------------------- | -------------- |
|
|
301
|
+
| `string` | `<input type="text">` | Text input |
|
|
302
|
+
| `number` | `<input type="number">` | Number input |
|
|
303
|
+
| `boolean` | `<input type="checkbox">` | Checkbox |
|
|
304
|
+
| `datetime` | `<input type="datetime-local">` | Date picker |
|
|
305
|
+
| `{ enum: [...] }` | `<select>` | Dropdown |
|
|
306
|
+
| `{ array: {...} }` | Custom | Array editor |
|
|
307
|
+
| `object` | Nested form | Fieldset |
|
|
308
|
+
| `uuid` | Hidden | Auto-generated |
|
|
303
309
|
|
|
304
310
|
## Validation
|
|
305
311
|
|
|
306
312
|
Generated forms include validation based on field definitions:
|
|
307
313
|
|
|
308
314
|
**Schema:**
|
|
315
|
+
|
|
309
316
|
```json
|
|
310
317
|
{
|
|
311
318
|
"models": [
|
|
@@ -322,27 +329,28 @@ Generated forms include validation based on field definitions:
|
|
|
322
329
|
```
|
|
323
330
|
|
|
324
331
|
**Generated Validation:**
|
|
332
|
+
|
|
325
333
|
```svelte
|
|
326
334
|
<script lang="ts">
|
|
327
335
|
function validate(): boolean {
|
|
328
336
|
errors = {};
|
|
329
|
-
|
|
337
|
+
|
|
330
338
|
if (!isValidEmail(formData.email)) {
|
|
331
339
|
errors.email = 'Invalid email format';
|
|
332
340
|
}
|
|
333
|
-
|
|
341
|
+
|
|
334
342
|
if (formData.age < 0 || formData.age > 150) {
|
|
335
343
|
errors.age = 'Age must be between 0 and 150';
|
|
336
344
|
}
|
|
337
|
-
|
|
345
|
+
|
|
338
346
|
if (formData.username.length < 3) {
|
|
339
347
|
errors.username = 'Username must be at least 3 characters';
|
|
340
348
|
}
|
|
341
|
-
|
|
349
|
+
|
|
342
350
|
if (formData.username.length > 20) {
|
|
343
351
|
errors.username = 'Username must be at most 20 characters';
|
|
344
352
|
}
|
|
345
|
-
|
|
353
|
+
|
|
346
354
|
return Object.keys(errors).length === 0;
|
|
347
355
|
}
|
|
348
356
|
</script>
|
|
@@ -362,7 +370,7 @@ Component props use the `$props` rune:
|
|
|
362
370
|
user: User;
|
|
363
371
|
editable?: boolean;
|
|
364
372
|
}
|
|
365
|
-
|
|
373
|
+
|
|
366
374
|
let { user, editable = false }: Props = $props();
|
|
367
375
|
</script>
|
|
368
376
|
```
|
|
@@ -377,7 +385,7 @@ Local state uses the `$state` rune:
|
|
|
377
385
|
name: '',
|
|
378
386
|
email: ''
|
|
379
387
|
});
|
|
380
|
-
|
|
388
|
+
|
|
381
389
|
let errors = $state<Record<string, string>>({});
|
|
382
390
|
</script>
|
|
383
391
|
```
|
|
@@ -391,7 +399,7 @@ Computed values use the `$derived` rune:
|
|
|
391
399
|
let filteredItems = $derived(
|
|
392
400
|
items.filter(item => item.name.includes(searchTerm))
|
|
393
401
|
);
|
|
394
|
-
|
|
402
|
+
|
|
395
403
|
let total = $derived(
|
|
396
404
|
items.reduce((sum, item) => sum + item.price, 0)
|
|
397
405
|
);
|
|
@@ -407,7 +415,7 @@ Two-way binding uses `$bindable`:
|
|
|
407
415
|
interface Props {
|
|
408
416
|
value?: string;
|
|
409
417
|
}
|
|
410
|
-
|
|
418
|
+
|
|
411
419
|
let { value = $bindable('') }: Props = $props();
|
|
412
420
|
</script>
|
|
413
421
|
|
|
@@ -423,24 +431,24 @@ Generated components integrate with the Praxis engine:
|
|
|
423
431
|
import { usePraxisEngine } from '@plures/praxis/svelte';
|
|
424
432
|
import { engine } from '../engine';
|
|
425
433
|
import { AddToCart, RemoveFromCart } from '../generated/events';
|
|
426
|
-
|
|
434
|
+
|
|
427
435
|
const { context, dispatch } = usePraxisEngine(engine);
|
|
428
|
-
|
|
436
|
+
|
|
429
437
|
function handleAddToCart(productId: string) {
|
|
430
438
|
dispatch([AddToCart.create({ productId, quantity: 1 })]);
|
|
431
439
|
}
|
|
432
|
-
|
|
440
|
+
|
|
433
441
|
function handleRemoveFromCart(itemId: string) {
|
|
434
442
|
dispatch([RemoveFromCart.create({ itemId })]);
|
|
435
443
|
}
|
|
436
444
|
</script>
|
|
437
445
|
|
|
438
|
-
<ProductList
|
|
439
|
-
products={context.products}
|
|
440
|
-
onaddtocart={handleAddToCart}
|
|
446
|
+
<ProductList
|
|
447
|
+
products={context.products}
|
|
448
|
+
onaddtocart={handleAddToCart}
|
|
441
449
|
/>
|
|
442
450
|
|
|
443
|
-
<ShoppingCart
|
|
451
|
+
<ShoppingCart
|
|
444
452
|
items={context.cart.items}
|
|
445
453
|
onremove={handleRemoveFromCart}
|
|
446
454
|
/>
|
|
@@ -457,19 +465,19 @@ Generated components include minimal default styles:
|
|
|
457
465
|
.field {
|
|
458
466
|
margin-bottom: 1rem;
|
|
459
467
|
}
|
|
460
|
-
|
|
468
|
+
|
|
461
469
|
label {
|
|
462
470
|
display: block;
|
|
463
471
|
margin-bottom: 0.25rem;
|
|
464
472
|
}
|
|
465
|
-
|
|
473
|
+
|
|
466
474
|
input, select, textarea {
|
|
467
475
|
width: 100%;
|
|
468
476
|
padding: 0.5rem;
|
|
469
477
|
border: 1px solid #ccc;
|
|
470
478
|
border-radius: 4px;
|
|
471
479
|
}
|
|
472
|
-
|
|
480
|
+
|
|
473
481
|
.error {
|
|
474
482
|
color: red;
|
|
475
483
|
font-size: 0.875rem;
|