@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.
Files changed (518) hide show
  1. package/FRAMEWORK.md +55 -5
  2. package/LICENSE +21 -21
  3. package/README.md +162 -375
  4. package/core/codegen/docs-generator.ts +5 -2
  5. package/core/codegen/index.ts +1 -1
  6. package/core/codegen/ts-generator.ts +15 -15
  7. package/core/db-adapter/index.ts +2 -2
  8. package/core/db-adapter/sync-engine.ts +17 -6
  9. package/core/logic-engine/engine.ts +1 -1
  10. package/core/logic-engine/index.ts +2 -2
  11. package/core/logic-engine/protocol.ts +1 -1
  12. package/core/logic-engine/psf-adapter.ts +8 -4
  13. package/core/logic-engine/rules.ts +1 -1
  14. package/core/schema-engine/compiler.ts +53 -11
  15. package/core/schema-engine/generator.ts +17 -7
  16. package/core/schema-engine/index.ts +2 -2
  17. package/core/schema-engine/psf.ts +12 -3
  18. package/core/schema-engine/types.ts +3 -11
  19. package/core/schema-engine/validator.ts +112 -22
  20. package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
  21. package/dist/browser/index.d.ts +3004 -0
  22. package/dist/browser/index.js +2892 -0
  23. package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
  24. package/dist/browser/integrations/svelte.js +298 -0
  25. package/dist/node/auth-STARLY7I.js +207 -0
  26. package/dist/node/build-Y7OT5VBF.js +144 -0
  27. package/dist/node/canvas-UERZHJYW.js +362 -0
  28. package/dist/node/chunk-DSDC2JWZ.js +256 -0
  29. package/dist/node/chunk-FXQZXAWF.js +175 -0
  30. package/dist/node/chunk-N5Y37EUV.js +202 -0
  31. package/dist/node/chunk-QGM4M3NI.js +37 -0
  32. package/dist/node/chunk-RJMWCNHR.js +175 -0
  33. package/dist/node/chunk-SRM3OPPM.js +404 -0
  34. package/dist/node/chunk-UATVJBNV.js +175 -0
  35. package/dist/node/chunk-UY7YEBE2.js +159 -0
  36. package/dist/node/chunk-XCY2VIFX.js +143 -0
  37. package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
  38. package/dist/node/cli/index.cjs +217418 -0
  39. package/dist/node/cli/index.d.cts +1 -0
  40. package/dist/node/cli/index.d.ts +1 -0
  41. package/dist/node/cli/index.js +690 -0
  42. package/dist/node/cloud/index.cjs +1043 -0
  43. package/dist/node/cloud/index.d.cts +864 -0
  44. package/dist/node/cloud/index.d.ts +864 -0
  45. package/dist/node/cloud/index.js +456 -0
  46. package/dist/node/cloud-AXOK4PSN.js +212 -0
  47. package/dist/node/component.cjs +374 -0
  48. package/dist/node/component.d.cts +125 -0
  49. package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
  50. package/dist/node/component.js +9 -0
  51. package/dist/node/components/index.cjs +216 -0
  52. package/dist/node/components/index.d.cts +43 -0
  53. package/dist/{src → node}/components/index.d.ts +8 -8
  54. package/dist/node/components/index.js +7 -0
  55. package/dist/node/create-TRLSVCNQ.js +584 -0
  56. package/dist/node/dev-PMJZUYGE.js +65 -0
  57. package/dist/node/engine-1iqLe6_P.d.ts +214 -0
  58. package/dist/node/engine-CVJobhHm.d.cts +214 -0
  59. package/dist/node/index.cjs +3247 -0
  60. package/dist/node/index.d.cts +2579 -0
  61. package/dist/node/index.d.ts +2579 -0
  62. package/dist/node/index.js +2098 -0
  63. package/dist/node/integrations/svelte.cjs +330 -0
  64. package/dist/node/integrations/svelte.d.cts +309 -0
  65. package/dist/node/integrations/svelte.d.ts +309 -0
  66. package/dist/node/integrations/svelte.js +300 -0
  67. package/dist/node/orchestrate-737TCL5H.js +127 -0
  68. package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
  69. package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
  70. package/dist/node/schema.cjs +200 -0
  71. package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
  72. package/dist/node/schema.d.ts +371 -0
  73. package/dist/node/schema.js +9 -0
  74. package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
  75. package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
  76. package/dist/node/verify-YBZ7W24H.js +213239 -0
  77. package/docs/MONETIZATION.md +21 -16
  78. package/docs/REACTIVE_REDESIGN.md +132 -0
  79. package/docs/README.md +47 -36
  80. package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
  81. package/docs/TERMINAL_NODE.md +27 -24
  82. package/docs/core/building-extensions.md +58 -61
  83. package/docs/core/cli-usage.md +59 -59
  84. package/docs/core/code-canvas-sync.md +28 -16
  85. package/docs/core/logic-engine.md +77 -82
  86. package/docs/core/pluresdb-integration.md +29 -39
  87. package/docs/core/schema-model.md +66 -52
  88. package/docs/core/ui-generation.md +57 -49
  89. package/docs/core/what-is-praxis.md +32 -15
  90. package/docs/guides/canvas.md +21 -5
  91. package/docs/guides/getting-started.md +13 -7
  92. package/docs/guides/history-state-pattern.md +65 -51
  93. package/docs/guides/orchestration.md +46 -32
  94. package/docs/guides/parallel-state-pattern.md +56 -72
  95. package/docs/guides/svelte-integration.md +45 -53
  96. package/docs/tutorials/README.md +16 -0
  97. package/docs/tutorials/ecommerce-cart.md +177 -95
  98. package/docs/tutorials/first-app.md +26 -41
  99. package/docs/tutorials/form-builder.md +191 -138
  100. package/docs/tutorials/todo-pluresdb.md +71 -69
  101. package/package.json +132 -96
  102. package/src/__tests__/actors.test.ts +68 -68
  103. package/src/__tests__/billing.test.ts +32 -32
  104. package/src/__tests__/canvas-components.test.ts +94 -73
  105. package/src/__tests__/cli-create.test.ts +28 -28
  106. package/src/__tests__/cloud.test.ts +36 -36
  107. package/src/__tests__/code-canvas-integration.test.ts +132 -141
  108. package/src/__tests__/docs-generator.test.ts +3 -9
  109. package/src/__tests__/dsl.test.ts +58 -64
  110. package/src/__tests__/edge-cases.test.ts +106 -108
  111. package/src/__tests__/engine.test.ts +51 -25
  112. package/src/__tests__/generators.test.ts +42 -44
  113. package/src/__tests__/introspection.test.ts +104 -114
  114. package/src/__tests__/pluresdb.test.ts +189 -187
  115. package/src/__tests__/protocol.test.ts +15 -15
  116. package/src/__tests__/provisioning.test.ts +61 -61
  117. package/src/__tests__/schema.test.ts +7 -11
  118. package/src/__tests__/state-docs-integration.test.ts +162 -145
  119. package/src/__tests__/svelte-integration.test.ts +16 -19
  120. package/src/__tests__/tauri-integration.test.ts +149 -147
  121. package/src/__tests__/terminal-node.test.ts +12 -7
  122. package/src/__tests__/unum-integration.test.ts +68 -68
  123. package/src/adapters/cli.ts +21 -15
  124. package/src/cli/commands/auth.ts +82 -78
  125. package/src/cli/commands/build.ts +29 -27
  126. package/src/cli/commands/canvas.ts +338 -127
  127. package/src/cli/commands/cloud.ts +47 -47
  128. package/src/cli/commands/create.ts +59 -47
  129. package/src/cli/commands/dev.ts +12 -12
  130. package/src/cli/commands/generate.ts +29 -40
  131. package/src/cli/commands/orchestrate.ts +24 -24
  132. package/src/cli/commands/verify.ts +49 -0
  133. package/src/cli/index.ts +21 -2
  134. package/src/cloud/README.md +28 -15
  135. package/src/cloud/auth.ts +55 -70
  136. package/src/cloud/billing.ts +59 -58
  137. package/src/cloud/client.ts +29 -35
  138. package/src/cloud/index.ts +19 -40
  139. package/src/cloud/marketplace.ts +69 -78
  140. package/src/cloud/provisioning.ts +42 -51
  141. package/src/cloud/relay/endpoints.ts +30 -34
  142. package/src/cloud/relay/health/index.ts +1 -1
  143. package/src/cloud/relay/stats/index.ts +1 -1
  144. package/src/cloud/relay/sync/index.ts +1 -1
  145. package/src/cloud/relay/usage/index.ts +1 -1
  146. package/src/cloud/sponsors.ts +31 -34
  147. package/src/cloud/types.ts +4 -4
  148. package/src/components/README.md +1 -0
  149. package/src/components/TerminalNode.svelte +457 -457
  150. package/src/components/index.ts +3 -4
  151. package/src/core/actors.ts +7 -7
  152. package/src/core/component/generator.ts +10 -28
  153. package/src/core/engine.ts +51 -24
  154. package/src/core/introspection.ts +37 -35
  155. package/src/core/logic/generator.ts +62 -62
  156. package/src/core/pluresdb/adapter.ts +8 -8
  157. package/src/core/pluresdb/generator.ts +39 -35
  158. package/src/core/pluresdb/index.ts +9 -12
  159. package/src/core/pluresdb/schema-registry.ts +22 -25
  160. package/src/core/pluresdb/store.ts +57 -57
  161. package/src/core/protocol.ts +14 -14
  162. package/src/core/reactive-engine.svelte.ts +65 -0
  163. package/src/core/reactive-engine.ts +67 -0
  164. package/src/core/rules.ts +4 -4
  165. package/src/core/schema/loader.common.ts +150 -0
  166. package/src/core/schema/loader.ts +19 -149
  167. package/src/core/schema/normalize.ts +34 -51
  168. package/src/core/schema/types.ts +47 -11
  169. package/src/dsl/index.ts +8 -8
  170. package/src/dsl.ts +11 -17
  171. package/src/examples/advanced-todo/App.svelte +506 -506
  172. package/src/examples/advanced-todo/README.md +58 -40
  173. package/src/examples/advanced-todo/index.ts +3 -3
  174. package/src/examples/auth-basic/index.ts +30 -30
  175. package/src/examples/cart/index.ts +50 -50
  176. package/src/examples/hero-ecommerce/index.ts +130 -157
  177. package/src/examples/svelte-counter/index.ts +22 -26
  178. package/src/flows.ts +6 -17
  179. package/src/index.browser.ts +204 -0
  180. package/src/index.ts +37 -42
  181. package/src/integrations/code-canvas.ts +237 -193
  182. package/src/integrations/pluresdb.ts +55 -35
  183. package/src/integrations/state-docs.ts +104 -104
  184. package/src/integrations/svelte.ts +35 -35
  185. package/src/integrations/tauri.ts +75 -73
  186. package/src/integrations/unum.ts +68 -61
  187. package/src/registry.ts +7 -14
  188. package/src/runtime/terminal-adapter.ts +31 -26
  189. package/src/step.ts +10 -16
  190. package/src/types.ts +1 -1
  191. package/templates/basic-app/README.md +6 -9
  192. package/templates/fullstack-app/README.md +10 -0
  193. package/dist/core/codegen/docs-generator.d.ts +0 -123
  194. package/dist/core/codegen/docs-generator.d.ts.map +0 -1
  195. package/dist/core/codegen/docs-generator.js +0 -674
  196. package/dist/core/codegen/docs-generator.js.map +0 -1
  197. package/dist/core/codegen/index.d.ts +0 -11
  198. package/dist/core/codegen/index.d.ts.map +0 -1
  199. package/dist/core/codegen/index.js +0 -13
  200. package/dist/core/codegen/index.js.map +0 -1
  201. package/dist/core/codegen/ts-generator.d.ts +0 -8
  202. package/dist/core/codegen/ts-generator.d.ts.map +0 -1
  203. package/dist/core/codegen/ts-generator.js +0 -8
  204. package/dist/core/codegen/ts-generator.js.map +0 -1
  205. package/dist/core/db-adapter/index.d.ts +0 -18
  206. package/dist/core/db-adapter/index.d.ts.map +0 -1
  207. package/dist/core/db-adapter/index.js +0 -23
  208. package/dist/core/db-adapter/index.js.map +0 -1
  209. package/dist/core/db-adapter/sync-engine.d.ts +0 -180
  210. package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
  211. package/dist/core/db-adapter/sync-engine.js +0 -342
  212. package/dist/core/db-adapter/sync-engine.js.map +0 -1
  213. package/dist/core/logic-engine/engine.d.ts +0 -8
  214. package/dist/core/logic-engine/engine.d.ts.map +0 -1
  215. package/dist/core/logic-engine/engine.js +0 -8
  216. package/dist/core/logic-engine/engine.js.map +0 -1
  217. package/dist/core/logic-engine/index.d.ts +0 -16
  218. package/dist/core/logic-engine/index.d.ts.map +0 -1
  219. package/dist/core/logic-engine/index.js +0 -16
  220. package/dist/core/logic-engine/index.js.map +0 -1
  221. package/dist/core/logic-engine/protocol.d.ts +0 -7
  222. package/dist/core/logic-engine/protocol.d.ts.map +0 -1
  223. package/dist/core/logic-engine/protocol.js +0 -7
  224. package/dist/core/logic-engine/protocol.js.map +0 -1
  225. package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
  226. package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
  227. package/dist/core/logic-engine/psf-adapter.js +0 -207
  228. package/dist/core/logic-engine/psf-adapter.js.map +0 -1
  229. package/dist/core/logic-engine/rules.d.ts +0 -7
  230. package/dist/core/logic-engine/rules.d.ts.map +0 -1
  231. package/dist/core/logic-engine/rules.js +0 -7
  232. package/dist/core/logic-engine/rules.js.map +0 -1
  233. package/dist/core/schema-engine/compiler.d.ts +0 -198
  234. package/dist/core/schema-engine/compiler.d.ts.map +0 -1
  235. package/dist/core/schema-engine/compiler.js +0 -262
  236. package/dist/core/schema-engine/compiler.js.map +0 -1
  237. package/dist/core/schema-engine/generator.d.ts +0 -115
  238. package/dist/core/schema-engine/generator.d.ts.map +0 -1
  239. package/dist/core/schema-engine/generator.js +0 -506
  240. package/dist/core/schema-engine/generator.js.map +0 -1
  241. package/dist/core/schema-engine/index.d.ts +0 -18
  242. package/dist/core/schema-engine/index.d.ts.map +0 -1
  243. package/dist/core/schema-engine/index.js +0 -18
  244. package/dist/core/schema-engine/index.js.map +0 -1
  245. package/dist/core/schema-engine/psf.d.ts +0 -612
  246. package/dist/core/schema-engine/psf.d.ts.map +0 -1
  247. package/dist/core/schema-engine/psf.js +0 -45
  248. package/dist/core/schema-engine/psf.js.map +0 -1
  249. package/dist/core/schema-engine/types.d.ts +0 -10
  250. package/dist/core/schema-engine/types.d.ts.map +0 -1
  251. package/dist/core/schema-engine/types.js +0 -7
  252. package/dist/core/schema-engine/types.js.map +0 -1
  253. package/dist/core/schema-engine/validator.d.ts +0 -140
  254. package/dist/core/schema-engine/validator.d.ts.map +0 -1
  255. package/dist/core/schema-engine/validator.js +0 -407
  256. package/dist/core/schema-engine/validator.js.map +0 -1
  257. package/dist/src/adapters/cli.d.ts +0 -43
  258. package/dist/src/adapters/cli.d.ts.map +0 -1
  259. package/dist/src/adapters/cli.js +0 -126
  260. package/dist/src/adapters/cli.js.map +0 -1
  261. package/dist/src/cli/commands/auth.d.ts +0 -26
  262. package/dist/src/cli/commands/auth.d.ts.map +0 -1
  263. package/dist/src/cli/commands/auth.js +0 -233
  264. package/dist/src/cli/commands/auth.js.map +0 -1
  265. package/dist/src/cli/commands/build.d.ts +0 -23
  266. package/dist/src/cli/commands/build.d.ts.map +0 -1
  267. package/dist/src/cli/commands/build.js +0 -162
  268. package/dist/src/cli/commands/build.js.map +0 -1
  269. package/dist/src/cli/commands/canvas.d.ts +0 -23
  270. package/dist/src/cli/commands/canvas.d.ts.map +0 -1
  271. package/dist/src/cli/commands/canvas.js +0 -215
  272. package/dist/src/cli/commands/canvas.js.map +0 -1
  273. package/dist/src/cli/commands/cloud.d.ts +0 -27
  274. package/dist/src/cli/commands/cloud.d.ts.map +0 -1
  275. package/dist/src/cli/commands/cloud.js +0 -232
  276. package/dist/src/cli/commands/cloud.js.map +0 -1
  277. package/dist/src/cli/commands/create.d.ts +0 -21
  278. package/dist/src/cli/commands/create.d.ts.map +0 -1
  279. package/dist/src/cli/commands/create.js +0 -621
  280. package/dist/src/cli/commands/create.js.map +0 -1
  281. package/dist/src/cli/commands/dev.d.ts +0 -21
  282. package/dist/src/cli/commands/dev.d.ts.map +0 -1
  283. package/dist/src/cli/commands/dev.js +0 -71
  284. package/dist/src/cli/commands/dev.js.map +0 -1
  285. package/dist/src/cli/commands/generate.d.ts +0 -25
  286. package/dist/src/cli/commands/generate.d.ts.map +0 -1
  287. package/dist/src/cli/commands/generate.js +0 -168
  288. package/dist/src/cli/commands/generate.js.map +0 -1
  289. package/dist/src/cli/commands/orchestrate.d.ts +0 -44
  290. package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
  291. package/dist/src/cli/commands/orchestrate.js +0 -150
  292. package/dist/src/cli/commands/orchestrate.js.map +0 -1
  293. package/dist/src/cli/index.d.ts +0 -8
  294. package/dist/src/cli/index.d.ts.map +0 -1
  295. package/dist/src/cli/index.js +0 -211
  296. package/dist/src/cli/index.js.map +0 -1
  297. package/dist/src/cloud/auth.d.ts +0 -51
  298. package/dist/src/cloud/auth.d.ts.map +0 -1
  299. package/dist/src/cloud/auth.js +0 -194
  300. package/dist/src/cloud/auth.js.map +0 -1
  301. package/dist/src/cloud/billing.d.ts +0 -184
  302. package/dist/src/cloud/billing.d.ts.map +0 -1
  303. package/dist/src/cloud/billing.js +0 -179
  304. package/dist/src/cloud/billing.js.map +0 -1
  305. package/dist/src/cloud/client.d.ts +0 -39
  306. package/dist/src/cloud/client.d.ts.map +0 -1
  307. package/dist/src/cloud/client.js +0 -176
  308. package/dist/src/cloud/client.js.map +0 -1
  309. package/dist/src/cloud/index.d.ts +0 -44
  310. package/dist/src/cloud/index.d.ts.map +0 -1
  311. package/dist/src/cloud/index.js +0 -44
  312. package/dist/src/cloud/index.js.map +0 -1
  313. package/dist/src/cloud/marketplace.d.ts +0 -166
  314. package/dist/src/cloud/marketplace.d.ts.map +0 -1
  315. package/dist/src/cloud/marketplace.js +0 -159
  316. package/dist/src/cloud/marketplace.js.map +0 -1
  317. package/dist/src/cloud/provisioning.d.ts +0 -110
  318. package/dist/src/cloud/provisioning.d.ts.map +0 -1
  319. package/dist/src/cloud/provisioning.js +0 -148
  320. package/dist/src/cloud/provisioning.js.map +0 -1
  321. package/dist/src/cloud/relay/endpoints.d.ts +0 -62
  322. package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
  323. package/dist/src/cloud/relay/endpoints.js +0 -217
  324. package/dist/src/cloud/relay/endpoints.js.map +0 -1
  325. package/dist/src/cloud/relay/health/index.d.ts +0 -5
  326. package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
  327. package/dist/src/cloud/relay/health/index.js +0 -9
  328. package/dist/src/cloud/relay/health/index.js.map +0 -1
  329. package/dist/src/cloud/relay/stats/index.d.ts +0 -5
  330. package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
  331. package/dist/src/cloud/relay/stats/index.js +0 -9
  332. package/dist/src/cloud/relay/stats/index.js.map +0 -1
  333. package/dist/src/cloud/relay/sync/index.d.ts +0 -5
  334. package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
  335. package/dist/src/cloud/relay/sync/index.js +0 -9
  336. package/dist/src/cloud/relay/sync/index.js.map +0 -1
  337. package/dist/src/cloud/relay/usage/index.d.ts +0 -5
  338. package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
  339. package/dist/src/cloud/relay/usage/index.js +0 -9
  340. package/dist/src/cloud/relay/usage/index.js.map +0 -1
  341. package/dist/src/cloud/sponsors.d.ts +0 -81
  342. package/dist/src/cloud/sponsors.d.ts.map +0 -1
  343. package/dist/src/cloud/sponsors.js +0 -130
  344. package/dist/src/cloud/sponsors.js.map +0 -1
  345. package/dist/src/cloud/types.d.ts +0 -169
  346. package/dist/src/cloud/types.d.ts.map +0 -1
  347. package/dist/src/cloud/types.js +0 -7
  348. package/dist/src/cloud/types.js.map +0 -1
  349. package/dist/src/components/index.d.ts.map +0 -1
  350. package/dist/src/components/index.js +0 -17
  351. package/dist/src/components/index.js.map +0 -1
  352. package/dist/src/core/actors.d.ts +0 -95
  353. package/dist/src/core/actors.d.ts.map +0 -1
  354. package/dist/src/core/actors.js +0 -158
  355. package/dist/src/core/actors.js.map +0 -1
  356. package/dist/src/core/component/generator.d.ts.map +0 -1
  357. package/dist/src/core/component/generator.js +0 -349
  358. package/dist/src/core/component/generator.js.map +0 -1
  359. package/dist/src/core/engine.d.ts +0 -92
  360. package/dist/src/core/engine.d.ts.map +0 -1
  361. package/dist/src/core/engine.js +0 -199
  362. package/dist/src/core/engine.js.map +0 -1
  363. package/dist/src/core/introspection.d.ts +0 -141
  364. package/dist/src/core/introspection.d.ts.map +0 -1
  365. package/dist/src/core/introspection.js +0 -208
  366. package/dist/src/core/introspection.js.map +0 -1
  367. package/dist/src/core/logic/generator.d.ts +0 -76
  368. package/dist/src/core/logic/generator.d.ts.map +0 -1
  369. package/dist/src/core/logic/generator.js +0 -370
  370. package/dist/src/core/logic/generator.js.map +0 -1
  371. package/dist/src/core/pluresdb/adapter.d.ts +0 -72
  372. package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
  373. package/dist/src/core/pluresdb/adapter.js +0 -73
  374. package/dist/src/core/pluresdb/adapter.js.map +0 -1
  375. package/dist/src/core/pluresdb/generator.d.ts +0 -58
  376. package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
  377. package/dist/src/core/pluresdb/generator.js +0 -191
  378. package/dist/src/core/pluresdb/generator.js.map +0 -1
  379. package/dist/src/core/pluresdb/index.d.ts +0 -15
  380. package/dist/src/core/pluresdb/index.d.ts.map +0 -1
  381. package/dist/src/core/pluresdb/index.js +0 -11
  382. package/dist/src/core/pluresdb/index.js.map +0 -1
  383. package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
  384. package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
  385. package/dist/src/core/pluresdb/schema-registry.js +0 -130
  386. package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
  387. package/dist/src/core/pluresdb/store.d.ts +0 -199
  388. package/dist/src/core/pluresdb/store.d.ts.map +0 -1
  389. package/dist/src/core/pluresdb/store.js +0 -344
  390. package/dist/src/core/pluresdb/store.js.map +0 -1
  391. package/dist/src/core/protocol.d.ts.map +0 -1
  392. package/dist/src/core/protocol.js +0 -46
  393. package/dist/src/core/protocol.js.map +0 -1
  394. package/dist/src/core/rules.d.ts +0 -120
  395. package/dist/src/core/rules.d.ts.map +0 -1
  396. package/dist/src/core/rules.js +0 -81
  397. package/dist/src/core/rules.js.map +0 -1
  398. package/dist/src/core/schema/loader.d.ts +0 -47
  399. package/dist/src/core/schema/loader.d.ts.map +0 -1
  400. package/dist/src/core/schema/loader.js +0 -189
  401. package/dist/src/core/schema/loader.js.map +0 -1
  402. package/dist/src/core/schema/normalize.d.ts +0 -72
  403. package/dist/src/core/schema/normalize.d.ts.map +0 -1
  404. package/dist/src/core/schema/normalize.js +0 -190
  405. package/dist/src/core/schema/normalize.js.map +0 -1
  406. package/dist/src/core/schema/types.d.ts.map +0 -1
  407. package/dist/src/core/schema/types.js +0 -161
  408. package/dist/src/core/schema/types.js.map +0 -1
  409. package/dist/src/dsl/index.d.ts +0 -152
  410. package/dist/src/dsl/index.d.ts.map +0 -1
  411. package/dist/src/dsl/index.js +0 -132
  412. package/dist/src/dsl/index.js.map +0 -1
  413. package/dist/src/dsl.d.ts +0 -124
  414. package/dist/src/dsl.d.ts.map +0 -1
  415. package/dist/src/dsl.js +0 -130
  416. package/dist/src/dsl.js.map +0 -1
  417. package/dist/src/examples/advanced-todo/index.d.ts +0 -55
  418. package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
  419. package/dist/src/examples/advanced-todo/index.js +0 -222
  420. package/dist/src/examples/advanced-todo/index.js.map +0 -1
  421. package/dist/src/examples/auth-basic/index.d.ts +0 -17
  422. package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
  423. package/dist/src/examples/auth-basic/index.js +0 -122
  424. package/dist/src/examples/auth-basic/index.js.map +0 -1
  425. package/dist/src/examples/cart/index.d.ts +0 -19
  426. package/dist/src/examples/cart/index.d.ts.map +0 -1
  427. package/dist/src/examples/cart/index.js +0 -202
  428. package/dist/src/examples/cart/index.js.map +0 -1
  429. package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
  430. package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
  431. package/dist/src/examples/hero-ecommerce/index.js +0 -506
  432. package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
  433. package/dist/src/examples/svelte-counter/index.d.ts +0 -31
  434. package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
  435. package/dist/src/examples/svelte-counter/index.js +0 -123
  436. package/dist/src/examples/svelte-counter/index.js.map +0 -1
  437. package/dist/src/flows.d.ts +0 -125
  438. package/dist/src/flows.d.ts.map +0 -1
  439. package/dist/src/flows.js +0 -160
  440. package/dist/src/flows.js.map +0 -1
  441. package/dist/src/index.d.ts +0 -77
  442. package/dist/src/index.d.ts.map +0 -1
  443. package/dist/src/index.js +0 -64
  444. package/dist/src/index.js.map +0 -1
  445. package/dist/src/integrations/code-canvas.d.ts +0 -265
  446. package/dist/src/integrations/code-canvas.d.ts.map +0 -1
  447. package/dist/src/integrations/code-canvas.js +0 -451
  448. package/dist/src/integrations/code-canvas.js.map +0 -1
  449. package/dist/src/integrations/pluresdb.d.ts +0 -117
  450. package/dist/src/integrations/pluresdb.d.ts.map +0 -1
  451. package/dist/src/integrations/pluresdb.js +0 -117
  452. package/dist/src/integrations/pluresdb.js.map +0 -1
  453. package/dist/src/integrations/state-docs.d.ts +0 -191
  454. package/dist/src/integrations/state-docs.d.ts.map +0 -1
  455. package/dist/src/integrations/state-docs.js +0 -515
  456. package/dist/src/integrations/state-docs.js.map +0 -1
  457. package/dist/src/integrations/svelte.d.ts.map +0 -1
  458. package/dist/src/integrations/svelte.js +0 -447
  459. package/dist/src/integrations/svelte.js.map +0 -1
  460. package/dist/src/integrations/tauri.d.ts +0 -360
  461. package/dist/src/integrations/tauri.d.ts.map +0 -1
  462. package/dist/src/integrations/tauri.js +0 -278
  463. package/dist/src/integrations/tauri.js.map +0 -1
  464. package/dist/src/integrations/unum.d.ts +0 -159
  465. package/dist/src/integrations/unum.d.ts.map +0 -1
  466. package/dist/src/integrations/unum.js +0 -240
  467. package/dist/src/integrations/unum.js.map +0 -1
  468. package/dist/src/registry.d.ts +0 -94
  469. package/dist/src/registry.d.ts.map +0 -1
  470. package/dist/src/registry.js +0 -181
  471. package/dist/src/registry.js.map +0 -1
  472. package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
  473. package/dist/src/runtime/terminal-adapter.js +0 -239
  474. package/dist/src/runtime/terminal-adapter.js.map +0 -1
  475. package/dist/src/step.d.ts +0 -34
  476. package/dist/src/step.d.ts.map +0 -1
  477. package/dist/src/step.js +0 -111
  478. package/dist/src/step.js.map +0 -1
  479. package/dist/src/types.d.ts +0 -63
  480. package/dist/src/types.d.ts.map +0 -1
  481. package/dist/src/types.js +0 -6
  482. package/dist/src/types.js.map +0 -1
  483. package/dist/tools/cli/commands/index.d.ts +0 -7
  484. package/dist/tools/cli/commands/index.d.ts.map +0 -1
  485. package/dist/tools/cli/commands/index.js +0 -7
  486. package/dist/tools/cli/commands/index.js.map +0 -1
  487. package/dist/tools/cli/index.d.ts +0 -8
  488. package/dist/tools/cli/index.d.ts.map +0 -1
  489. package/dist/tools/cli/index.js +0 -9
  490. package/dist/tools/cli/index.js.map +0 -1
  491. package/dist/tools/watcher/index.d.ts +0 -105
  492. package/dist/tools/watcher/index.d.ts.map +0 -1
  493. package/dist/tools/watcher/index.js +0 -213
  494. package/dist/tools/watcher/index.js.map +0 -1
  495. package/dist/ui/canvas/canvas-projection.d.ts +0 -78
  496. package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
  497. package/dist/ui/canvas/canvas-projection.js +0 -416
  498. package/dist/ui/canvas/canvas-projection.js.map +0 -1
  499. package/dist/ui/canvas/canvas-state.d.ts +0 -200
  500. package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
  501. package/dist/ui/canvas/canvas-state.js +0 -464
  502. package/dist/ui/canvas/canvas-state.js.map +0 -1
  503. package/dist/ui/canvas/components/index.d.ts +0 -95
  504. package/dist/ui/canvas/components/index.d.ts.map +0 -1
  505. package/dist/ui/canvas/components/index.js +0 -19
  506. package/dist/ui/canvas/components/index.js.map +0 -1
  507. package/dist/ui/canvas/index.d.ts +0 -32
  508. package/dist/ui/canvas/index.d.ts.map +0 -1
  509. package/dist/ui/canvas/index.js +0 -32
  510. package/dist/ui/canvas/index.js.map +0 -1
  511. package/dist/ui/svelte-generator/index.d.ts +0 -9
  512. package/dist/ui/svelte-generator/index.d.ts.map +0 -1
  513. package/dist/ui/svelte-generator/index.js +0 -11
  514. package/dist/ui/svelte-generator/index.js.map +0 -1
  515. package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
  516. package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
  517. package/dist/ui/svelte-generator/psf-generator.js +0 -506
  518. 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 | 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 |
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 | 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 |
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 | 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) |
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 | 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` |
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
- { "name": "role", "type": { "enum": ["admin", "user", "guest"] }, "description": "User role" }
183
- ],
184
- "indexes": [
185
- { "name": "idx_email", "fields": ["email"], "unique": true }
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 | Description | Example |
198
- |------|-------------|---------|
199
- | `string` | Text value | `"Hello"` |
200
- | `number` | Numeric value | `42` |
201
- | `boolean` | True/false | `true` |
202
- | `uuid` | UUID string | `"550e8400-..."` |
203
- | `datetime` | ISO 8601 date | `"2024-01-01T00:00:00Z"` |
204
- | `object` | Nested object | `{ key: value }` |
205
- | `{ array: { type } }` | Array of type | `[1, 2, 3]` |
206
- | `{ enum: [...] }` | Enumeration | `"active"` |
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
- { "name": "user", "type": "User", "required": false, "description": "Existing user to edit" },
224
- { "name": "onSubmit", "type": "function", "required": true, "description": "Submit handler" }
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 | Description | Generated Features |
238
- |------|-------------|-------------------|
239
- | `form` | Input form | Validation, submit handling |
240
- | `display` | Display data | Data binding, formatting |
241
- | `list` | List of items | Pagination, filtering |
242
- | `editor` | Rich editor | Editing capabilities |
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 | HTML Input | Component |
294
- |-------------|------------|-----------|
295
- | `string` | `<input type="text">` | Text input |
296
- | `number` | `<input type="number">` | Number input |
297
- | `boolean` | `<input type="checkbox">` | Checkbox |
298
- | `datetime` | `<input type="datetime-local">` | Date picker |
299
- | `{ enum: [...] }` | `<select>` | Dropdown |
300
- | `{ array: {...} }` | Custom | Array editor |
301
- | `object` | Nested form | Fieldset |
302
- | `uuid` | Hidden | Auto-generated |
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;