@pwfabric/runtime 0.0.0-stage → 1.0.0-rc.1

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 (447) hide show
  1. package/LICENSE +90 -0
  2. package/README.md +43 -2
  3. package/dist/a11y/announcer.d.ts +65 -0
  4. package/dist/a11y/announcer.js +140 -0
  5. package/dist/a11y/announcer.js.map +1 -0
  6. package/dist/a11y/contrast.d.ts +54 -0
  7. package/dist/a11y/contrast.js +93 -0
  8. package/dist/a11y/contrast.js.map +1 -0
  9. package/dist/a11y/focus.d.ts +123 -0
  10. package/dist/a11y/focus.js +282 -0
  11. package/dist/a11y/focus.js.map +1 -0
  12. package/dist/a11y/index.d.ts +21 -0
  13. package/dist/a11y/index.js +18 -0
  14. package/dist/a11y/index.js.map +1 -0
  15. package/dist/a11y/keyboard.d.ts +144 -0
  16. package/dist/a11y/keyboard.js +317 -0
  17. package/dist/a11y/keyboard.js.map +1 -0
  18. package/dist/adapters/default-image.d.ts +25 -0
  19. package/dist/adapters/default-image.js +37 -0
  20. package/dist/adapters/default-image.js.map +1 -0
  21. package/dist/adapters/index.d.ts +27 -0
  22. package/dist/adapters/index.js +28 -0
  23. package/dist/adapters/index.js.map +1 -0
  24. package/dist/adapters/next-image.d.ts +38 -0
  25. package/dist/adapters/next-image.js +124 -0
  26. package/dist/adapters/next-image.js.map +1 -0
  27. package/dist/adapters/types.d.ts +61 -0
  28. package/dist/adapters/types.js +11 -0
  29. package/dist/adapters/types.js.map +1 -0
  30. package/dist/analytics/index.d.ts +14 -0
  31. package/dist/analytics/index.js +15 -0
  32. package/dist/analytics/index.js.map +1 -0
  33. package/dist/analytics/tracker.d.ts +65 -0
  34. package/dist/analytics/tracker.js +251 -0
  35. package/dist/analytics/tracker.js.map +1 -0
  36. package/dist/analytics/types.d.ts +130 -0
  37. package/dist/analytics/types.js +11 -0
  38. package/dist/analytics/types.js.map +1 -0
  39. package/dist/auth/index.d.ts +15 -0
  40. package/dist/auth/index.js +14 -0
  41. package/dist/auth/index.js.map +1 -0
  42. package/dist/auth/provider.d.ts +132 -0
  43. package/dist/auth/provider.js +473 -0
  44. package/dist/auth/provider.js.map +1 -0
  45. package/dist/auth/types.d.ts +117 -0
  46. package/dist/auth/types.js +9 -0
  47. package/dist/auth/types.js.map +1 -0
  48. package/dist/binding/collection.d.ts +190 -0
  49. package/dist/binding/collection.js +358 -0
  50. package/dist/binding/collection.js.map +1 -0
  51. package/dist/binding/datasource.d.ts +319 -0
  52. package/dist/binding/datasource.js +556 -0
  53. package/dist/binding/datasource.js.map +1 -0
  54. package/dist/binding/engine.d.ts +65 -0
  55. package/dist/binding/engine.js +268 -0
  56. package/dist/binding/engine.js.map +1 -0
  57. package/dist/binding/expression.d.ts +150 -0
  58. package/dist/binding/expression.js +787 -0
  59. package/dist/binding/expression.js.map +1 -0
  60. package/dist/binding/index.d.ts +19 -0
  61. package/dist/binding/index.js +14 -0
  62. package/dist/binding/index.js.map +1 -0
  63. package/dist/binding/two-way.d.ts +149 -0
  64. package/dist/binding/two-way.js +462 -0
  65. package/dist/binding/two-way.js.map +1 -0
  66. package/dist/binding/types.d.ts +119 -0
  67. package/dist/binding/types.js +9 -0
  68. package/dist/binding/types.js.map +1 -0
  69. package/dist/blocks/component-types.d.ts +81 -0
  70. package/dist/blocks/component-types.js +11 -0
  71. package/dist/blocks/component-types.js.map +1 -0
  72. package/dist/blocks/composition-rules.d.ts +168 -0
  73. package/dist/blocks/composition-rules.js +391 -0
  74. package/dist/blocks/composition-rules.js.map +1 -0
  75. package/dist/blocks/hooks.d.ts +31 -0
  76. package/dist/blocks/hooks.js +42 -0
  77. package/dist/blocks/hooks.js.map +1 -0
  78. package/dist/blocks/index.d.ts +14 -0
  79. package/dist/blocks/index.js +23 -0
  80. package/dist/blocks/index.js.map +1 -0
  81. package/dist/blocks/registry.d.ts +84 -0
  82. package/dist/blocks/registry.js +136 -0
  83. package/dist/blocks/registry.js.map +1 -0
  84. package/dist/blocks/rule-engine.d.ts +131 -0
  85. package/dist/blocks/rule-engine.js +321 -0
  86. package/dist/blocks/rule-engine.js.map +1 -0
  87. package/dist/blocks/surface-event-context.d.ts +13 -0
  88. package/dist/blocks/surface-event-context.js +14 -0
  89. package/dist/blocks/surface-event-context.js.map +1 -0
  90. package/dist/blocks/surface-id-context.d.ts +13 -0
  91. package/dist/blocks/surface-id-context.js +15 -0
  92. package/dist/blocks/surface-id-context.js.map +1 -0
  93. package/dist/bus.d.ts +41 -0
  94. package/dist/bus.js +158 -0
  95. package/dist/bus.js.map +1 -0
  96. package/dist/cache/index.d.ts +9 -0
  97. package/dist/cache/index.js +10 -0
  98. package/dist/cache/index.js.map +1 -0
  99. package/dist/cache/memory.d.ts +32 -0
  100. package/dist/cache/memory.js +138 -0
  101. package/dist/cache/memory.js.map +1 -0
  102. package/dist/cache/types.d.ts +62 -0
  103. package/dist/cache/types.js +9 -0
  104. package/dist/cache/types.js.map +1 -0
  105. package/dist/capability/index.d.ts +72 -0
  106. package/dist/capability/index.js +87 -0
  107. package/dist/capability/index.js.map +1 -0
  108. package/dist/capability/kernel-capabilities.d.ts +31 -0
  109. package/dist/capability/kernel-capabilities.js +36 -0
  110. package/dist/capability/kernel-capabilities.js.map +1 -0
  111. package/dist/capability/platform-capabilities.d.ts +71 -0
  112. package/dist/capability/platform-capabilities.js +267 -0
  113. package/dist/capability/platform-capabilities.js.map +1 -0
  114. package/dist/capability/type-mapping.d.ts +70 -0
  115. package/dist/capability/type-mapping.js +107 -0
  116. package/dist/capability/type-mapping.js.map +1 -0
  117. package/dist/capability/validation.d.ts +46 -0
  118. package/dist/capability/validation.js +54 -0
  119. package/dist/capability/validation.js.map +1 -0
  120. package/dist/connectors/declared-connector.d.ts +48 -0
  121. package/dist/connectors/declared-connector.js +333 -0
  122. package/dist/connectors/declared-connector.js.map +1 -0
  123. package/dist/connectors/engine-registry.d.ts +50 -0
  124. package/dist/connectors/engine-registry.js +135 -0
  125. package/dist/connectors/engine-registry.js.map +1 -0
  126. package/dist/connectors/index.d.ts +14 -0
  127. package/dist/connectors/index.js +14 -0
  128. package/dist/connectors/index.js.map +1 -0
  129. package/dist/connectors/module-loader.d.ts +70 -0
  130. package/dist/connectors/module-loader.js +143 -0
  131. package/dist/connectors/module-loader.js.map +1 -0
  132. package/dist/connectors/types.d.ts +174 -0
  133. package/dist/connectors/types.js +23 -0
  134. package/dist/connectors/types.js.map +1 -0
  135. package/dist/context.d.ts +27 -0
  136. package/dist/context.js +38 -0
  137. package/dist/context.js.map +1 -0
  138. package/dist/data/DataCapabilityProvider.d.ts +39 -0
  139. package/dist/data/DataCapabilityProvider.js +58 -0
  140. package/dist/data/DataCapabilityProvider.js.map +1 -0
  141. package/dist/data/index.d.ts +17 -0
  142. package/dist/data/index.js +18 -0
  143. package/dist/data/index.js.map +1 -0
  144. package/dist/data/manager.d.ts +40 -0
  145. package/dist/data/manager.js +442 -0
  146. package/dist/data/manager.js.map +1 -0
  147. package/dist/data/types.d.ts +218 -0
  148. package/dist/data/types.js +2 -0
  149. package/dist/data/types.js.map +1 -0
  150. package/dist/entity/aggregate.d.ts +8 -0
  151. package/dist/entity/aggregate.js +24 -0
  152. package/dist/entity/aggregate.js.map +1 -0
  153. package/dist/entity/apply-query.d.ts +58 -0
  154. package/dist/entity/apply-query.js +264 -0
  155. package/dist/entity/apply-query.js.map +1 -0
  156. package/dist/entity/behavior.d.ts +94 -0
  157. package/dist/entity/behavior.js +78 -0
  158. package/dist/entity/behavior.js.map +1 -0
  159. package/dist/entity/connector.d.ts +141 -0
  160. package/dist/entity/connector.js +89 -0
  161. package/dist/entity/connector.js.map +1 -0
  162. package/dist/entity/connectors/index.d.ts +12 -0
  163. package/dist/entity/connectors/index.js +11 -0
  164. package/dist/entity/connectors/index.js.map +1 -0
  165. package/dist/entity/connectors/static.d.ts +51 -0
  166. package/dist/entity/connectors/static.js +245 -0
  167. package/dist/entity/connectors/static.js.map +1 -0
  168. package/dist/entity/entity-datasource.d.ts +50 -0
  169. package/dist/entity/entity-datasource.js +33 -0
  170. package/dist/entity/entity-datasource.js.map +1 -0
  171. package/dist/entity/facade.d.ts +70 -0
  172. package/dist/entity/facade.js +70 -0
  173. package/dist/entity/facade.js.map +1 -0
  174. package/dist/entity/http-connector.d.ts +123 -0
  175. package/dist/entity/http-connector.js +295 -0
  176. package/dist/entity/http-connector.js.map +1 -0
  177. package/dist/entity/index.d.ts +38 -0
  178. package/dist/entity/index.js +31 -0
  179. package/dist/entity/index.js.map +1 -0
  180. package/dist/entity/postgres-connector.d.ts +64 -0
  181. package/dist/entity/postgres-connector.js +239 -0
  182. package/dist/entity/postgres-connector.js.map +1 -0
  183. package/dist/entity/registry.d.ts +59 -0
  184. package/dist/entity/registry.js +90 -0
  185. package/dist/entity/registry.js.map +1 -0
  186. package/dist/entity/store.d.ts +66 -0
  187. package/dist/entity/store.js +349 -0
  188. package/dist/entity/store.js.map +1 -0
  189. package/dist/entity/types.d.ts +180 -0
  190. package/dist/entity/types.js +10 -0
  191. package/dist/entity/types.js.map +1 -0
  192. package/dist/execution-context.d.ts +88 -0
  193. package/dist/execution-context.js +146 -0
  194. package/dist/execution-context.js.map +1 -0
  195. package/dist/executor.d.ts +27 -0
  196. package/dist/executor.js +33 -0
  197. package/dist/executor.js.map +1 -0
  198. package/dist/forms/form-entity-bridge.d.ts +94 -0
  199. package/dist/forms/form-entity-bridge.js +96 -0
  200. package/dist/forms/form-entity-bridge.js.map +1 -0
  201. package/dist/forms/form-write-target.d.ts +34 -0
  202. package/dist/forms/form-write-target.js +81 -0
  203. package/dist/forms/form-write-target.js.map +1 -0
  204. package/dist/forms/index.d.ts +22 -0
  205. package/dist/forms/index.js +25 -0
  206. package/dist/forms/index.js.map +1 -0
  207. package/dist/forms/named-control-values.d.ts +27 -0
  208. package/dist/forms/named-control-values.js +42 -0
  209. package/dist/forms/named-control-values.js.map +1 -0
  210. package/dist/forms/processor.d.ts +55 -0
  211. package/dist/forms/processor.js +154 -0
  212. package/dist/forms/processor.js.map +1 -0
  213. package/dist/forms/types.d.ts +174 -0
  214. package/dist/forms/types.js +33 -0
  215. package/dist/forms/types.js.map +1 -0
  216. package/dist/forms/validator.d.ts +61 -0
  217. package/dist/forms/validator.js +218 -0
  218. package/dist/forms/validator.js.map +1 -0
  219. package/dist/graph/index.d.ts +10 -0
  220. package/dist/graph/index.js +9 -0
  221. package/dist/graph/index.js.map +1 -0
  222. package/dist/graph/resolver.d.ts +66 -0
  223. package/dist/graph/resolver.js +243 -0
  224. package/dist/graph/resolver.js.map +1 -0
  225. package/dist/graph/types.d.ts +125 -0
  226. package/dist/graph/types.js +9 -0
  227. package/dist/graph/types.js.map +1 -0
  228. package/dist/hooks/useInstalledAtoms.d.ts +96 -0
  229. package/dist/hooks/useInstalledAtoms.js +92 -0
  230. package/dist/hooks/useInstalledAtoms.js.map +1 -0
  231. package/dist/i18n/index.d.ts +15 -0
  232. package/dist/i18n/index.js +14 -0
  233. package/dist/i18n/index.js.map +1 -0
  234. package/dist/i18n/translator.d.ts +76 -0
  235. package/dist/i18n/translator.js +357 -0
  236. package/dist/i18n/translator.js.map +1 -0
  237. package/dist/i18n/types.d.ts +93 -0
  238. package/dist/i18n/types.js +9 -0
  239. package/dist/i18n/types.js.map +1 -0
  240. package/dist/index.d.ts +64 -0
  241. package/dist/index.js +95 -0
  242. package/dist/index.js.map +1 -0
  243. package/dist/kernel.d.ts +47 -0
  244. package/dist/kernel.js +258 -0
  245. package/dist/kernel.js.map +1 -0
  246. package/dist/perf/budget.d.ts +92 -0
  247. package/dist/perf/budget.js +122 -0
  248. package/dist/perf/budget.js.map +1 -0
  249. package/dist/perf/index.d.ts +16 -0
  250. package/dist/perf/index.js +13 -0
  251. package/dist/perf/index.js.map +1 -0
  252. package/dist/perf/render-timer.d.ts +90 -0
  253. package/dist/perf/render-timer.js +136 -0
  254. package/dist/perf/render-timer.js.map +1 -0
  255. package/dist/perf/reporter.d.ts +126 -0
  256. package/dist/perf/reporter.js +241 -0
  257. package/dist/perf/reporter.js.map +1 -0
  258. package/dist/perf/web-vitals.d.ts +111 -0
  259. package/dist/perf/web-vitals.js +268 -0
  260. package/dist/perf/web-vitals.js.map +1 -0
  261. package/dist/registry.d.ts +63 -0
  262. package/dist/registry.js +126 -0
  263. package/dist/registry.js.map +1 -0
  264. package/dist/render/BehaviorSurfaceProvider.d.ts +65 -0
  265. package/dist/render/BehaviorSurfaceProvider.js +185 -0
  266. package/dist/render/BehaviorSurfaceProvider.js.map +1 -0
  267. package/dist/render/BlockErrorBoundary.d.ts +26 -0
  268. package/dist/render/BlockErrorBoundary.js +41 -0
  269. package/dist/render/BlockErrorBoundary.js.map +1 -0
  270. package/dist/render/DataBoundSurfaceRenderer.d.ts +78 -0
  271. package/dist/render/DataBoundSurfaceRenderer.js +998 -0
  272. package/dist/render/DataBoundSurfaceRenderer.js.map +1 -0
  273. package/dist/render/DynamicBlockWrapper.d.ts +23 -0
  274. package/dist/render/DynamicBlockWrapper.js +117 -0
  275. package/dist/render/DynamicBlockWrapper.js.map +1 -0
  276. package/dist/render/appearance-resolver.d.ts +50 -0
  277. package/dist/render/appearance-resolver.js +78 -0
  278. package/dist/render/appearance-resolver.js.map +1 -0
  279. package/dist/render/capability-gate.d.ts +69 -0
  280. package/dist/render/capability-gate.js +94 -0
  281. package/dist/render/capability-gate.js.map +1 -0
  282. package/dist/render/conditional-states-css.d.ts +41 -0
  283. package/dist/render/conditional-states-css.js +82 -0
  284. package/dist/render/conditional-states-css.js.map +1 -0
  285. package/dist/render/connections-context.d.ts +31 -0
  286. package/dist/render/connections-context.js +34 -0
  287. package/dist/render/connections-context.js.map +1 -0
  288. package/dist/render/dark-theme-css.d.ts +36 -0
  289. package/dist/render/dark-theme-css.js +67 -0
  290. package/dist/render/dark-theme-css.js.map +1 -0
  291. package/dist/render/data-binding-types.d.ts +191 -0
  292. package/dist/render/data-binding-types.js +11 -0
  293. package/dist/render/data-binding-types.js.map +1 -0
  294. package/dist/render/data-cache.d.ts +30 -0
  295. package/dist/render/data-cache.js +37 -0
  296. package/dist/render/data-cache.js.map +1 -0
  297. package/dist/render/derive-dark-theme.d.ts +17 -0
  298. package/dist/render/derive-dark-theme.js +18 -0
  299. package/dist/render/derive-dark-theme.js.map +1 -0
  300. package/dist/render/dynamic-artifact-context.d.ts +77 -0
  301. package/dist/render/dynamic-artifact-context.js +89 -0
  302. package/dist/render/dynamic-artifact-context.js.map +1 -0
  303. package/dist/render/dynamic-block-loader.d.ts +80 -0
  304. package/dist/render/dynamic-block-loader.js +197 -0
  305. package/dist/render/dynamic-block-loader.js.map +1 -0
  306. package/dist/render/endpoint.d.ts +18 -0
  307. package/dist/render/endpoint.js +109 -0
  308. package/dist/render/endpoint.js.map +1 -0
  309. package/dist/render/entity-facade-context.d.ts +34 -0
  310. package/dist/render/entity-facade-context.js +37 -0
  311. package/dist/render/entity-facade-context.js.map +1 -0
  312. package/dist/render/group-states-css.d.ts +41 -0
  313. package/dist/render/group-states-css.js +73 -0
  314. package/dist/render/group-states-css.js.map +1 -0
  315. package/dist/render/hooks/useSurfaceEvents.d.ts +8 -0
  316. package/dist/render/hooks/useSurfaceEvents.js +9 -0
  317. package/dist/render/hooks/useSurfaceEvents.js.map +1 -0
  318. package/dist/render/hooks/useSurfaceId.d.ts +8 -0
  319. package/dist/render/hooks/useSurfaceId.js +9 -0
  320. package/dist/render/hooks/useSurfaceId.js.map +1 -0
  321. package/dist/render/index.d.ts +48 -0
  322. package/dist/render/index.js +61 -0
  323. package/dist/render/index.js.map +1 -0
  324. package/dist/render/interaction-rule-engine.d.ts +12 -0
  325. package/dist/render/interaction-rule-engine.js +47 -0
  326. package/dist/render/interaction-rule-engine.js.map +1 -0
  327. package/dist/render/keyframes-css.d.ts +31 -0
  328. package/dist/render/keyframes-css.js +44 -0
  329. package/dist/render/keyframes-css.js.map +1 -0
  330. package/dist/render/query-state.d.ts +3 -0
  331. package/dist/render/query-state.js +70 -0
  332. package/dist/render/query-state.js.map +1 -0
  333. package/dist/render/renderer.d.ts +44 -0
  334. package/dist/render/renderer.js +937 -0
  335. package/dist/render/renderer.js.map +1 -0
  336. package/dist/render/resolve-expressions.d.ts +37 -0
  337. package/dist/render/resolve-expressions.js +309 -0
  338. package/dist/render/resolve-expressions.js.map +1 -0
  339. package/dist/render/responsive-style-css.d.ts +42 -0
  340. package/dist/render/responsive-style-css.js +123 -0
  341. package/dist/render/responsive-style-css.js.map +1 -0
  342. package/dist/render/responsive.d.ts +49 -0
  343. package/dist/render/responsive.js +99 -0
  344. package/dist/render/responsive.js.map +1 -0
  345. package/dist/render/scoped-css.d.ts +71 -0
  346. package/dist/render/scoped-css.js +102 -0
  347. package/dist/render/scoped-css.js.map +1 -0
  348. package/dist/render/shell-selection.d.ts +69 -0
  349. package/dist/render/shell-selection.js +117 -0
  350. package/dist/render/shell-selection.js.map +1 -0
  351. package/dist/render/states-css.d.ts +32 -0
  352. package/dist/render/states-css.js +63 -0
  353. package/dist/render/states-css.js.map +1 -0
  354. package/dist/render/surface-data-context.d.ts +18 -0
  355. package/dist/render/surface-data-context.js +21 -0
  356. package/dist/render/surface-data-context.js.map +1 -0
  357. package/dist/render/surface-event-bus.d.ts +19 -0
  358. package/dist/render/surface-event-bus.js +68 -0
  359. package/dist/render/surface-event-bus.js.map +1 -0
  360. package/dist/render/surface-event-context.d.ts +11 -0
  361. package/dist/render/surface-event-context.js +12 -0
  362. package/dist/render/surface-event-context.js.map +1 -0
  363. package/dist/render/surface-id-context.d.ts +8 -0
  364. package/dist/render/surface-id-context.js +9 -0
  365. package/dist/render/surface-id-context.js.map +1 -0
  366. package/dist/render/theme-utils.d.ts +14 -0
  367. package/dist/render/theme-utils.js +15 -0
  368. package/dist/render/theme-utils.js.map +1 -0
  369. package/dist/render/types.d.ts +282 -0
  370. package/dist/render/types.js +9 -0
  371. package/dist/render/types.js.map +1 -0
  372. package/dist/render/visibility-css.d.ts +42 -0
  373. package/dist/render/visibility-css.js +119 -0
  374. package/dist/render/visibility-css.js.map +1 -0
  375. package/dist/render/width-scope.d.ts +34 -0
  376. package/dist/render/width-scope.js +44 -0
  377. package/dist/render/width-scope.js.map +1 -0
  378. package/dist/render/write-only-sources.d.ts +33 -0
  379. package/dist/render/write-only-sources.js +99 -0
  380. package/dist/render/write-only-sources.js.map +1 -0
  381. package/dist/routing/index.d.ts +14 -0
  382. package/dist/routing/index.js +15 -0
  383. package/dist/routing/index.js.map +1 -0
  384. package/dist/routing/router.d.ts +42 -0
  385. package/dist/routing/router.js +218 -0
  386. package/dist/routing/router.js.map +1 -0
  387. package/dist/routing/types.d.ts +124 -0
  388. package/dist/routing/types.js +9 -0
  389. package/dist/routing/types.js.map +1 -0
  390. package/dist/seo/generator.d.ts +39 -0
  391. package/dist/seo/generator.js +236 -0
  392. package/dist/seo/generator.js.map +1 -0
  393. package/dist/seo/index.d.ts +14 -0
  394. package/dist/seo/index.js +15 -0
  395. package/dist/seo/index.js.map +1 -0
  396. package/dist/seo/types.d.ts +181 -0
  397. package/dist/seo/types.js +9 -0
  398. package/dist/seo/types.js.map +1 -0
  399. package/dist/state/index.d.ts +15 -0
  400. package/dist/state/index.js +16 -0
  401. package/dist/state/index.js.map +1 -0
  402. package/dist/state/manager.d.ts +33 -0
  403. package/dist/state/manager.js +81 -0
  404. package/dist/state/manager.js.map +1 -0
  405. package/dist/state/store.d.ts +40 -0
  406. package/dist/state/store.js +145 -0
  407. package/dist/state/store.js.map +1 -0
  408. package/dist/state/types.d.ts +107 -0
  409. package/dist/state/types.js +9 -0
  410. package/dist/state/types.js.map +1 -0
  411. package/dist/surface/expression.d.ts +65 -0
  412. package/dist/surface/expression.js +179 -0
  413. package/dist/surface/expression.js.map +1 -0
  414. package/dist/surface/index.d.ts +32 -0
  415. package/dist/surface/index.js +25 -0
  416. package/dist/surface/index.js.map +1 -0
  417. package/dist/surface/interpreter.d.ts +96 -0
  418. package/dist/surface/interpreter.js +231 -0
  419. package/dist/surface/interpreter.js.map +1 -0
  420. package/dist/surface/layout.d.ts +54 -0
  421. package/dist/surface/layout.js +288 -0
  422. package/dist/surface/layout.js.map +1 -0
  423. package/dist/surface/output.d.ts +90 -0
  424. package/dist/surface/output.js +104 -0
  425. package/dist/surface/output.js.map +1 -0
  426. package/dist/surface/primitives.d.ts +180 -0
  427. package/dist/surface/primitives.js +339 -0
  428. package/dist/surface/primitives.js.map +1 -0
  429. package/dist/surface/renderer.d.ts +96 -0
  430. package/dist/surface/renderer.js +190 -0
  431. package/dist/surface/renderer.js.map +1 -0
  432. package/dist/surface/schemas.d.ts +181 -0
  433. package/dist/surface/schemas.js +142 -0
  434. package/dist/surface/schemas.js.map +1 -0
  435. package/dist/surface/transforms.d.ts +144 -0
  436. package/dist/surface/transforms.js +120 -0
  437. package/dist/surface/transforms.js.map +1 -0
  438. package/dist/surface/types.d.ts +160 -0
  439. package/dist/surface/types.js +51 -0
  440. package/dist/surface/types.js.map +1 -0
  441. package/dist/surface/validation.d.ts +123 -0
  442. package/dist/surface/validation.js +147 -0
  443. package/dist/surface/validation.js.map +1 -0
  444. package/dist/validator.d.ts +55 -0
  445. package/dist/validator.js +100 -0
  446. package/dist/validator.js.map +1 -0
  447. package/package.json +106 -3
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Built-in Primitives
3
+ *
4
+ * Core primitive definitions for the runtime
5
+ *
6
+ * These are the built-in primitives that the runtime knows how to render.
7
+ * Each primitive has a defined contract for its props.
8
+ *
9
+ * @module @pwfabric/runtime/surface/primitives
10
+ */
11
+ import type { PrimitiveType, RenderNode, BaseNodeProps } from './types.js';
12
+ /**
13
+ * Text primitive props
14
+ */
15
+ export interface TextProps extends BaseNodeProps {
16
+ readonly content: string;
17
+ readonly variant?: 'body' | 'caption' | 'label';
18
+ readonly weight?: 'normal' | 'medium' | 'bold';
19
+ readonly truncate?: boolean;
20
+ }
21
+ /**
22
+ * Container primitive props
23
+ */
24
+ export interface ContainerProps extends BaseNodeProps {
25
+ readonly direction?: 'row' | 'column';
26
+ readonly align?: 'start' | 'center' | 'end' | 'stretch';
27
+ readonly justify?: 'start' | 'center' | 'end' | 'between' | 'around';
28
+ readonly gap?: number | string;
29
+ readonly padding?: number | string;
30
+ readonly wrap?: boolean;
31
+ }
32
+ /**
33
+ * Button primitive props
34
+ */
35
+ export interface ButtonProps extends BaseNodeProps {
36
+ readonly label: string;
37
+ readonly variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
38
+ readonly size?: 'sm' | 'md' | 'lg';
39
+ readonly disabled?: boolean;
40
+ readonly loading?: boolean;
41
+ readonly onClick?: string;
42
+ }
43
+ /**
44
+ * Input primitive props
45
+ */
46
+ export interface InputProps extends BaseNodeProps {
47
+ readonly name: string;
48
+ readonly type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';
49
+ readonly placeholder?: string;
50
+ readonly value?: string;
51
+ readonly disabled?: boolean;
52
+ readonly required?: boolean;
53
+ readonly onChange?: string;
54
+ }
55
+ /**
56
+ * Image primitive props
57
+ */
58
+ export interface ImageProps extends BaseNodeProps {
59
+ readonly src: string;
60
+ readonly alt: string;
61
+ readonly width?: number | string;
62
+ readonly height?: number | string;
63
+ readonly loading?: 'eager' | 'lazy';
64
+ readonly fit?: 'contain' | 'cover' | 'fill' | 'none';
65
+ }
66
+ /**
67
+ * Link primitive props
68
+ */
69
+ export interface LinkProps extends BaseNodeProps {
70
+ readonly href: string;
71
+ readonly target?: '_self' | '_blank' | '_parent' | '_top';
72
+ readonly rel?: string;
73
+ }
74
+ /**
75
+ * List primitive props
76
+ */
77
+ export interface ListProps extends BaseNodeProps {
78
+ readonly type?: 'ordered' | 'unordered';
79
+ readonly marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'none';
80
+ }
81
+ /**
82
+ * Heading primitive props
83
+ */
84
+ export interface HeadingProps extends BaseNodeProps {
85
+ readonly level: 1 | 2 | 3 | 4 | 5 | 6;
86
+ readonly content: string;
87
+ }
88
+ /**
89
+ * Spacer primitive props
90
+ */
91
+ export interface SpacerProps extends BaseNodeProps {
92
+ readonly size: number | string;
93
+ readonly direction?: 'horizontal' | 'vertical';
94
+ }
95
+ /**
96
+ * Divider primitive props
97
+ */
98
+ export interface DividerProps extends BaseNodeProps {
99
+ readonly orientation?: 'horizontal' | 'vertical';
100
+ readonly variant?: 'solid' | 'dashed' | 'dotted';
101
+ }
102
+ /**
103
+ * Slot primitive props - placeholder for injected content
104
+ */
105
+ export interface SlotProps extends BaseNodeProps {
106
+ readonly name: string;
107
+ readonly fallback?: readonly RenderNode[];
108
+ }
109
+ /**
110
+ * Conditional primitive props
111
+ */
112
+ export interface ConditionalProps extends BaseNodeProps {
113
+ readonly condition: string;
114
+ readonly then?: readonly RenderNode[];
115
+ readonly else?: readonly RenderNode[];
116
+ }
117
+ /**
118
+ * Loop primitive props
119
+ */
120
+ export interface LoopProps extends BaseNodeProps {
121
+ readonly items: string;
122
+ readonly as: string;
123
+ readonly keyExpr?: string;
124
+ }
125
+ /**
126
+ * Primitive definition
127
+ */
128
+ export interface PrimitiveDefinition {
129
+ readonly type: PrimitiveType;
130
+ readonly name: string;
131
+ readonly description: string;
132
+ readonly props: Record<string, PropDefinition>;
133
+ readonly allowsChildren: boolean;
134
+ }
135
+ /**
136
+ * Property definition
137
+ */
138
+ export interface PropDefinition {
139
+ readonly type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'expression';
140
+ readonly required: boolean;
141
+ readonly description: string;
142
+ readonly defaultValue?: unknown;
143
+ readonly oneOf?: readonly unknown[];
144
+ }
145
+ /**
146
+ * Built-in primitive definitions
147
+ */
148
+ export declare const PRIMITIVE_DEFINITIONS: Record<PrimitiveType, PrimitiveDefinition>;
149
+ /**
150
+ * Create a text node
151
+ */
152
+ export declare function text(content: string, props?: Omit<TextProps, 'content'>): RenderNode;
153
+ /**
154
+ * Create a container node
155
+ */
156
+ export declare function container(children: readonly RenderNode[], props?: ContainerProps): RenderNode;
157
+ /**
158
+ * Create a button node
159
+ */
160
+ export declare function button(label: string, props?: Omit<ButtonProps, 'label'>): RenderNode;
161
+ /**
162
+ * Create a heading node
163
+ */
164
+ export declare function heading(level: 1 | 2 | 3 | 4 | 5 | 6, content: string, props?: Omit<HeadingProps, 'level' | 'content'>): RenderNode;
165
+ /**
166
+ * Create a spacer node
167
+ */
168
+ export declare function spacer(size: number | string, direction?: 'horizontal' | 'vertical'): RenderNode;
169
+ /**
170
+ * Create a divider node
171
+ */
172
+ export declare function divider(props?: DividerProps): RenderNode;
173
+ /**
174
+ * Check if a type is a known primitive
175
+ */
176
+ export declare function isPrimitive(type: string): type is PrimitiveType;
177
+ /**
178
+ * Get primitive definition
179
+ */
180
+ export declare function getPrimitiveDefinition(type: PrimitiveType): PrimitiveDefinition | undefined;
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Built-in Primitives
3
+ *
4
+ * Core primitive definitions for the runtime
5
+ *
6
+ * These are the built-in primitives that the runtime knows how to render.
7
+ * Each primitive has a defined contract for its props.
8
+ *
9
+ * @module @pwfabric/runtime/surface/primitives
10
+ */
11
+ import { createNode } from './types.js';
12
+ /**
13
+ * Built-in primitive definitions
14
+ */
15
+ export const PRIMITIVE_DEFINITIONS = {
16
+ text: {
17
+ type: 'text',
18
+ name: 'Text',
19
+ description: 'Display text content',
20
+ props: {
21
+ content: { type: 'string', required: true, description: 'Text content to display' },
22
+ variant: {
23
+ type: 'string',
24
+ required: false,
25
+ description: 'Text variant',
26
+ oneOf: ['body', 'caption', 'label'],
27
+ defaultValue: 'body',
28
+ },
29
+ weight: {
30
+ type: 'string',
31
+ required: false,
32
+ description: 'Font weight',
33
+ oneOf: ['normal', 'medium', 'bold'],
34
+ defaultValue: 'normal',
35
+ },
36
+ truncate: {
37
+ type: 'boolean',
38
+ required: false,
39
+ description: 'Truncate with ellipsis',
40
+ defaultValue: false,
41
+ },
42
+ },
43
+ allowsChildren: false,
44
+ },
45
+ container: {
46
+ type: 'container',
47
+ name: 'Container',
48
+ description: 'Layout container for child elements',
49
+ props: {
50
+ direction: {
51
+ type: 'string',
52
+ required: false,
53
+ description: 'Flex direction',
54
+ oneOf: ['row', 'column'],
55
+ defaultValue: 'column',
56
+ },
57
+ align: {
58
+ type: 'string',
59
+ required: false,
60
+ description: 'Align items',
61
+ oneOf: ['start', 'center', 'end', 'stretch'],
62
+ },
63
+ justify: {
64
+ type: 'string',
65
+ required: false,
66
+ description: 'Justify content',
67
+ oneOf: ['start', 'center', 'end', 'between', 'around'],
68
+ },
69
+ gap: { type: 'string', required: false, description: 'Gap between children' },
70
+ padding: { type: 'string', required: false, description: 'Container padding' },
71
+ wrap: { type: 'boolean', required: false, description: 'Wrap children', defaultValue: false },
72
+ },
73
+ allowsChildren: true,
74
+ },
75
+ button: {
76
+ type: 'button',
77
+ name: 'Button',
78
+ description: 'Interactive button element',
79
+ props: {
80
+ label: { type: 'string', required: true, description: 'Button label' },
81
+ variant: {
82
+ type: 'string',
83
+ required: false,
84
+ description: 'Button style variant',
85
+ oneOf: ['primary', 'secondary', 'ghost', 'danger'],
86
+ defaultValue: 'primary',
87
+ },
88
+ size: {
89
+ type: 'string',
90
+ required: false,
91
+ description: 'Button size',
92
+ oneOf: ['sm', 'md', 'lg'],
93
+ defaultValue: 'md',
94
+ },
95
+ disabled: { type: 'boolean', required: false, description: 'Disable button' },
96
+ loading: { type: 'boolean', required: false, description: 'Show loading state' },
97
+ onClick: { type: 'expression', required: false, description: 'Click handler expression' },
98
+ },
99
+ allowsChildren: false,
100
+ },
101
+ input: {
102
+ type: 'input',
103
+ name: 'Input',
104
+ description: 'Text input field',
105
+ props: {
106
+ name: { type: 'string', required: true, description: 'Input name' },
107
+ type: {
108
+ type: 'string',
109
+ required: false,
110
+ description: 'Input type',
111
+ oneOf: ['text', 'email', 'password', 'number', 'tel', 'url'],
112
+ defaultValue: 'text',
113
+ },
114
+ placeholder: { type: 'string', required: false, description: 'Placeholder text' },
115
+ value: { type: 'string', required: false, description: 'Current value' },
116
+ disabled: { type: 'boolean', required: false, description: 'Disable input' },
117
+ required: { type: 'boolean', required: false, description: 'Mark as required' },
118
+ onChange: { type: 'expression', required: false, description: 'Change handler expression' },
119
+ },
120
+ allowsChildren: false,
121
+ },
122
+ image: {
123
+ type: 'image',
124
+ name: 'Image',
125
+ description: 'Display an image',
126
+ props: {
127
+ src: { type: 'string', required: true, description: 'Image source URL' },
128
+ alt: { type: 'string', required: true, description: 'Alt text for accessibility' },
129
+ width: { type: 'string', required: false, description: 'Image width' },
130
+ height: { type: 'string', required: false, description: 'Image height' },
131
+ loading: {
132
+ type: 'string',
133
+ required: false,
134
+ description: 'Loading strategy',
135
+ oneOf: ['eager', 'lazy'],
136
+ defaultValue: 'lazy',
137
+ },
138
+ fit: {
139
+ type: 'string',
140
+ required: false,
141
+ description: 'Object fit',
142
+ oneOf: ['contain', 'cover', 'fill', 'none'],
143
+ },
144
+ },
145
+ allowsChildren: false,
146
+ },
147
+ link: {
148
+ type: 'link',
149
+ name: 'Link',
150
+ description: 'Navigation link',
151
+ props: {
152
+ href: { type: 'string', required: true, description: 'Link destination' },
153
+ target: {
154
+ type: 'string',
155
+ required: false,
156
+ description: 'Link target',
157
+ oneOf: ['_self', '_blank', '_parent', '_top'],
158
+ },
159
+ rel: { type: 'string', required: false, description: 'Link relationship' },
160
+ },
161
+ allowsChildren: true,
162
+ },
163
+ list: {
164
+ type: 'list',
165
+ name: 'List',
166
+ description: 'List container',
167
+ props: {
168
+ type: {
169
+ type: 'string',
170
+ required: false,
171
+ description: 'List type',
172
+ oneOf: ['ordered', 'unordered'],
173
+ defaultValue: 'unordered',
174
+ },
175
+ marker: {
176
+ type: 'string',
177
+ required: false,
178
+ description: 'List marker style',
179
+ oneOf: ['disc', 'circle', 'square', 'decimal', 'none'],
180
+ },
181
+ },
182
+ allowsChildren: true,
183
+ },
184
+ 'list-item': {
185
+ type: 'list-item',
186
+ name: 'List Item',
187
+ description: 'Item within a list',
188
+ props: {},
189
+ allowsChildren: true,
190
+ },
191
+ heading: {
192
+ type: 'heading',
193
+ name: 'Heading',
194
+ description: 'Section heading',
195
+ props: {
196
+ level: {
197
+ type: 'number',
198
+ required: true,
199
+ description: 'Heading level (1-6)',
200
+ oneOf: [1, 2, 3, 4, 5, 6],
201
+ },
202
+ content: { type: 'string', required: true, description: 'Heading text' },
203
+ },
204
+ allowsChildren: false,
205
+ },
206
+ paragraph: {
207
+ type: 'paragraph',
208
+ name: 'Paragraph',
209
+ description: 'Text paragraph',
210
+ props: {},
211
+ allowsChildren: true,
212
+ },
213
+ spacer: {
214
+ type: 'spacer',
215
+ name: 'Spacer',
216
+ description: 'Empty space',
217
+ props: {
218
+ size: { type: 'string', required: true, description: 'Space size' },
219
+ direction: {
220
+ type: 'string',
221
+ required: false,
222
+ description: 'Space direction',
223
+ oneOf: ['horizontal', 'vertical'],
224
+ defaultValue: 'vertical',
225
+ },
226
+ },
227
+ allowsChildren: false,
228
+ },
229
+ divider: {
230
+ type: 'divider',
231
+ name: 'Divider',
232
+ description: 'Visual separator',
233
+ props: {
234
+ orientation: {
235
+ type: 'string',
236
+ required: false,
237
+ description: 'Divider orientation',
238
+ oneOf: ['horizontal', 'vertical'],
239
+ defaultValue: 'horizontal',
240
+ },
241
+ variant: {
242
+ type: 'string',
243
+ required: false,
244
+ description: 'Divider style',
245
+ oneOf: ['solid', 'dashed', 'dotted'],
246
+ defaultValue: 'solid',
247
+ },
248
+ },
249
+ allowsChildren: false,
250
+ },
251
+ slot: {
252
+ type: 'slot',
253
+ name: 'Slot',
254
+ description: 'Named slot for content injection',
255
+ props: {
256
+ name: { type: 'string', required: true, description: 'Slot name' },
257
+ },
258
+ allowsChildren: true, // Children are fallback content
259
+ },
260
+ fragment: {
261
+ type: 'fragment',
262
+ name: 'Fragment',
263
+ description: 'Invisible wrapper for multiple children',
264
+ props: {},
265
+ allowsChildren: true,
266
+ },
267
+ conditional: {
268
+ type: 'conditional',
269
+ name: 'Conditional',
270
+ description: 'Conditionally render content',
271
+ props: {
272
+ condition: { type: 'expression', required: true, description: 'Condition expression' },
273
+ },
274
+ allowsChildren: true,
275
+ },
276
+ loop: {
277
+ type: 'loop',
278
+ name: 'Loop',
279
+ description: 'Iterate over items',
280
+ props: {
281
+ items: { type: 'expression', required: true, description: 'Items expression' },
282
+ as: { type: 'string', required: true, description: 'Item variable name' },
283
+ keyExpr: { type: 'expression', required: false, description: 'Key expression' },
284
+ },
285
+ allowsChildren: true,
286
+ },
287
+ };
288
+ // ============================================================
289
+ // PRIMITIVE FACTORY FUNCTIONS
290
+ // ============================================================
291
+ /**
292
+ * Create a text node
293
+ */
294
+ export function text(content, props) {
295
+ return createNode('text', { content, ...props });
296
+ }
297
+ /**
298
+ * Create a container node
299
+ */
300
+ export function container(children, props) {
301
+ return createNode('container', props ? { ...props } : {}, children);
302
+ }
303
+ /**
304
+ * Create a button node
305
+ */
306
+ export function button(label, props) {
307
+ return createNode('button', { label, ...props });
308
+ }
309
+ /**
310
+ * Create a heading node
311
+ */
312
+ export function heading(level, content, props) {
313
+ return createNode('heading', { level, content, ...props });
314
+ }
315
+ /**
316
+ * Create a spacer node
317
+ */
318
+ export function spacer(size, direction) {
319
+ return createNode('spacer', { size, direction });
320
+ }
321
+ /**
322
+ * Create a divider node
323
+ */
324
+ export function divider(props) {
325
+ return createNode('divider', props ? { ...props } : {});
326
+ }
327
+ /**
328
+ * Check if a type is a known primitive
329
+ */
330
+ export function isPrimitive(type) {
331
+ return type in PRIMITIVE_DEFINITIONS;
332
+ }
333
+ /**
334
+ * Get primitive definition
335
+ */
336
+ export function getPrimitiveDefinition(type) {
337
+ return PRIMITIVE_DEFINITIONS[type];
338
+ }
339
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/surface/primitives.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Built-in Primitives\n *\n * Core primitive definitions for the runtime\n *\n * These are the built-in primitives that the runtime knows how to render.\n * Each primitive has a defined contract for its props.\n *\n * @module @pwfabric/runtime/surface/primitives\n */\n\nimport type { PrimitiveType, RenderNode, BaseNodeProps } from './types.js'\nimport { createNode } from './types.js'\n\n// ============================================================\n// PRIMITIVE DEFINITIONS\n// ============================================================\n\n/**\n * Text primitive props\n */\nexport interface TextProps extends BaseNodeProps {\n readonly content: string\n readonly variant?: 'body' | 'caption' | 'label'\n readonly weight?: 'normal' | 'medium' | 'bold'\n readonly truncate?: boolean\n}\n\n/**\n * Container primitive props\n */\nexport interface ContainerProps extends BaseNodeProps {\n readonly direction?: 'row' | 'column'\n readonly align?: 'start' | 'center' | 'end' | 'stretch'\n readonly justify?: 'start' | 'center' | 'end' | 'between' | 'around'\n readonly gap?: number | string\n readonly padding?: number | string\n readonly wrap?: boolean\n}\n\n/**\n * Button primitive props\n */\nexport interface ButtonProps extends BaseNodeProps {\n readonly label: string\n readonly variant?: 'primary' | 'secondary' | 'ghost' | 'danger'\n readonly size?: 'sm' | 'md' | 'lg'\n readonly disabled?: boolean\n readonly loading?: boolean\n readonly onClick?: string // Expression or capability reference\n}\n\n/**\n * Input primitive props\n */\nexport interface InputProps extends BaseNodeProps {\n readonly name: string\n readonly type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'\n readonly placeholder?: string\n readonly value?: string\n readonly disabled?: boolean\n readonly required?: boolean\n readonly onChange?: string\n}\n\n/**\n * Image primitive props\n */\nexport interface ImageProps extends BaseNodeProps {\n readonly src: string\n readonly alt: string\n readonly width?: number | string\n readonly height?: number | string\n readonly loading?: 'eager' | 'lazy'\n readonly fit?: 'contain' | 'cover' | 'fill' | 'none'\n}\n\n/**\n * Link primitive props\n */\nexport interface LinkProps extends BaseNodeProps {\n readonly href: string\n readonly target?: '_self' | '_blank' | '_parent' | '_top'\n readonly rel?: string\n}\n\n/**\n * List primitive props\n */\nexport interface ListProps extends BaseNodeProps {\n readonly type?: 'ordered' | 'unordered'\n readonly marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'none'\n}\n\n/**\n * Heading primitive props\n */\nexport interface HeadingProps extends BaseNodeProps {\n readonly level: 1 | 2 | 3 | 4 | 5 | 6\n readonly content: string\n}\n\n/**\n * Spacer primitive props\n */\nexport interface SpacerProps extends BaseNodeProps {\n readonly size: number | string\n readonly direction?: 'horizontal' | 'vertical'\n}\n\n/**\n * Divider primitive props\n */\nexport interface DividerProps extends BaseNodeProps {\n readonly orientation?: 'horizontal' | 'vertical'\n readonly variant?: 'solid' | 'dashed' | 'dotted'\n}\n\n/**\n * Slot primitive props - placeholder for injected content\n */\nexport interface SlotProps extends BaseNodeProps {\n readonly name: string\n readonly fallback?: readonly RenderNode[]\n}\n\n/**\n * Conditional primitive props\n */\nexport interface ConditionalProps extends BaseNodeProps {\n readonly condition: string // Expression\n readonly then?: readonly RenderNode[]\n readonly else?: readonly RenderNode[]\n}\n\n/**\n * Loop primitive props\n */\nexport interface LoopProps extends BaseNodeProps {\n readonly items: string // Expression\n readonly as: string\n readonly keyExpr?: string\n}\n\n// ============================================================\n// PRIMITIVE REGISTRY\n// ============================================================\n\n/**\n * Primitive definition\n */\nexport interface PrimitiveDefinition {\n readonly type: PrimitiveType\n readonly name: string\n readonly description: string\n readonly props: Record<string, PropDefinition>\n readonly allowsChildren: boolean\n}\n\n/**\n * Property definition\n */\nexport interface PropDefinition {\n readonly type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'expression'\n readonly required: boolean\n readonly description: string\n readonly defaultValue?: unknown\n readonly oneOf?: readonly unknown[]\n}\n\n/**\n * Built-in primitive definitions\n */\nexport const PRIMITIVE_DEFINITIONS: Record<PrimitiveType, PrimitiveDefinition> = {\n text: {\n type: 'text',\n name: 'Text',\n description: 'Display text content',\n props: {\n content: { type: 'string', required: true, description: 'Text content to display' },\n variant: {\n type: 'string',\n required: false,\n description: 'Text variant',\n oneOf: ['body', 'caption', 'label'],\n defaultValue: 'body',\n },\n weight: {\n type: 'string',\n required: false,\n description: 'Font weight',\n oneOf: ['normal', 'medium', 'bold'],\n defaultValue: 'normal',\n },\n truncate: {\n type: 'boolean',\n required: false,\n description: 'Truncate with ellipsis',\n defaultValue: false,\n },\n },\n allowsChildren: false,\n },\n\n container: {\n type: 'container',\n name: 'Container',\n description: 'Layout container for child elements',\n props: {\n direction: {\n type: 'string',\n required: false,\n description: 'Flex direction',\n oneOf: ['row', 'column'],\n defaultValue: 'column',\n },\n align: {\n type: 'string',\n required: false,\n description: 'Align items',\n oneOf: ['start', 'center', 'end', 'stretch'],\n },\n justify: {\n type: 'string',\n required: false,\n description: 'Justify content',\n oneOf: ['start', 'center', 'end', 'between', 'around'],\n },\n gap: { type: 'string', required: false, description: 'Gap between children' },\n padding: { type: 'string', required: false, description: 'Container padding' },\n wrap: { type: 'boolean', required: false, description: 'Wrap children', defaultValue: false },\n },\n allowsChildren: true,\n },\n\n button: {\n type: 'button',\n name: 'Button',\n description: 'Interactive button element',\n props: {\n label: { type: 'string', required: true, description: 'Button label' },\n variant: {\n type: 'string',\n required: false,\n description: 'Button style variant',\n oneOf: ['primary', 'secondary', 'ghost', 'danger'],\n defaultValue: 'primary',\n },\n size: {\n type: 'string',\n required: false,\n description: 'Button size',\n oneOf: ['sm', 'md', 'lg'],\n defaultValue: 'md',\n },\n disabled: { type: 'boolean', required: false, description: 'Disable button' },\n loading: { type: 'boolean', required: false, description: 'Show loading state' },\n onClick: { type: 'expression', required: false, description: 'Click handler expression' },\n },\n allowsChildren: false,\n },\n\n input: {\n type: 'input',\n name: 'Input',\n description: 'Text input field',\n props: {\n name: { type: 'string', required: true, description: 'Input name' },\n type: {\n type: 'string',\n required: false,\n description: 'Input type',\n oneOf: ['text', 'email', 'password', 'number', 'tel', 'url'],\n defaultValue: 'text',\n },\n placeholder: { type: 'string', required: false, description: 'Placeholder text' },\n value: { type: 'string', required: false, description: 'Current value' },\n disabled: { type: 'boolean', required: false, description: 'Disable input' },\n required: { type: 'boolean', required: false, description: 'Mark as required' },\n onChange: { type: 'expression', required: false, description: 'Change handler expression' },\n },\n allowsChildren: false,\n },\n\n image: {\n type: 'image',\n name: 'Image',\n description: 'Display an image',\n props: {\n src: { type: 'string', required: true, description: 'Image source URL' },\n alt: { type: 'string', required: true, description: 'Alt text for accessibility' },\n width: { type: 'string', required: false, description: 'Image width' },\n height: { type: 'string', required: false, description: 'Image height' },\n loading: {\n type: 'string',\n required: false,\n description: 'Loading strategy',\n oneOf: ['eager', 'lazy'],\n defaultValue: 'lazy',\n },\n fit: {\n type: 'string',\n required: false,\n description: 'Object fit',\n oneOf: ['contain', 'cover', 'fill', 'none'],\n },\n },\n allowsChildren: false,\n },\n\n link: {\n type: 'link',\n name: 'Link',\n description: 'Navigation link',\n props: {\n href: { type: 'string', required: true, description: 'Link destination' },\n target: {\n type: 'string',\n required: false,\n description: 'Link target',\n oneOf: ['_self', '_blank', '_parent', '_top'],\n },\n rel: { type: 'string', required: false, description: 'Link relationship' },\n },\n allowsChildren: true,\n },\n\n list: {\n type: 'list',\n name: 'List',\n description: 'List container',\n props: {\n type: {\n type: 'string',\n required: false,\n description: 'List type',\n oneOf: ['ordered', 'unordered'],\n defaultValue: 'unordered',\n },\n marker: {\n type: 'string',\n required: false,\n description: 'List marker style',\n oneOf: ['disc', 'circle', 'square', 'decimal', 'none'],\n },\n },\n allowsChildren: true,\n },\n\n 'list-item': {\n type: 'list-item',\n name: 'List Item',\n description: 'Item within a list',\n props: {},\n allowsChildren: true,\n },\n\n heading: {\n type: 'heading',\n name: 'Heading',\n description: 'Section heading',\n props: {\n level: {\n type: 'number',\n required: true,\n description: 'Heading level (1-6)',\n oneOf: [1, 2, 3, 4, 5, 6],\n },\n content: { type: 'string', required: true, description: 'Heading text' },\n },\n allowsChildren: false,\n },\n\n paragraph: {\n type: 'paragraph',\n name: 'Paragraph',\n description: 'Text paragraph',\n props: {},\n allowsChildren: true,\n },\n\n spacer: {\n type: 'spacer',\n name: 'Spacer',\n description: 'Empty space',\n props: {\n size: { type: 'string', required: true, description: 'Space size' },\n direction: {\n type: 'string',\n required: false,\n description: 'Space direction',\n oneOf: ['horizontal', 'vertical'],\n defaultValue: 'vertical',\n },\n },\n allowsChildren: false,\n },\n\n divider: {\n type: 'divider',\n name: 'Divider',\n description: 'Visual separator',\n props: {\n orientation: {\n type: 'string',\n required: false,\n description: 'Divider orientation',\n oneOf: ['horizontal', 'vertical'],\n defaultValue: 'horizontal',\n },\n variant: {\n type: 'string',\n required: false,\n description: 'Divider style',\n oneOf: ['solid', 'dashed', 'dotted'],\n defaultValue: 'solid',\n },\n },\n allowsChildren: false,\n },\n\n slot: {\n type: 'slot',\n name: 'Slot',\n description: 'Named slot for content injection',\n props: {\n name: { type: 'string', required: true, description: 'Slot name' },\n },\n allowsChildren: true, // Children are fallback content\n },\n\n fragment: {\n type: 'fragment',\n name: 'Fragment',\n description: 'Invisible wrapper for multiple children',\n props: {},\n allowsChildren: true,\n },\n\n conditional: {\n type: 'conditional',\n name: 'Conditional',\n description: 'Conditionally render content',\n props: {\n condition: { type: 'expression', required: true, description: 'Condition expression' },\n },\n allowsChildren: true,\n },\n\n loop: {\n type: 'loop',\n name: 'Loop',\n description: 'Iterate over items',\n props: {\n items: { type: 'expression', required: true, description: 'Items expression' },\n as: { type: 'string', required: true, description: 'Item variable name' },\n keyExpr: { type: 'expression', required: false, description: 'Key expression' },\n },\n allowsChildren: true,\n },\n}\n\n// ============================================================\n// PRIMITIVE FACTORY FUNCTIONS\n// ============================================================\n\n/**\n * Create a text node\n */\nexport function text(content: string, props?: Omit<TextProps, 'content'>): RenderNode {\n return createNode('text', { content, ...props })\n}\n\n/**\n * Create a container node\n */\nexport function container(children: readonly RenderNode[], props?: ContainerProps): RenderNode {\n return createNode('container', props ? { ...props } : {}, children)\n}\n\n/**\n * Create a button node\n */\nexport function button(label: string, props?: Omit<ButtonProps, 'label'>): RenderNode {\n return createNode('button', { label, ...props })\n}\n\n/**\n * Create a heading node\n */\nexport function heading(\n level: 1 | 2 | 3 | 4 | 5 | 6,\n content: string,\n props?: Omit<HeadingProps, 'level' | 'content'>\n): RenderNode {\n return createNode('heading', { level, content, ...props })\n}\n\n/**\n * Create a spacer node\n */\nexport function spacer(size: number | string, direction?: 'horizontal' | 'vertical'): RenderNode {\n return createNode('spacer', { size, direction })\n}\n\n/**\n * Create a divider node\n */\nexport function divider(props?: DividerProps): RenderNode {\n return createNode('divider', props ? { ...props } : {})\n}\n\n/**\n * Check if a type is a known primitive\n */\nexport function isPrimitive(type: string): type is PrimitiveType {\n return type in PRIMITIVE_DEFINITIONS\n}\n\n/**\n * Get primitive definition\n */\nexport function getPrimitiveDefinition(type: PrimitiveType): PrimitiveDefinition | undefined {\n return PRIMITIVE_DEFINITIONS[type]\n}\n"]}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Surface Renderer
3
+ *
4
+ * Deterministic surface rendering engine
5
+ *
6
+ * The renderer takes an interpreted surface and produces a render tree.
7
+ * Rendering is deterministic: same input + context = same output.
8
+ *
9
+ * INVARIANTS:
10
+ * - Rendering is pure (no side effects)
11
+ * - Same input always produces same output
12
+ * - Render order is deterministic
13
+ * - All expressions are evaluated synchronously
14
+ *
15
+ * @module @pwfabric/runtime/surface/renderer
16
+ */
17
+ import type { RenderNode, RenderContext, RenderResult, RenderOutput, RenderError, LayoutJSON } from './types.js';
18
+ import { type LayoutResult } from './layout.js';
19
+ import type { InterpretedSurface } from './interpreter.js';
20
+ /**
21
+ * Surface renderer options
22
+ */
23
+ export interface RenderOptions {
24
+ readonly data?: Record<string, unknown>;
25
+ readonly slots?: Record<string, readonly RenderNode[]>;
26
+ readonly strict?: boolean;
27
+ }
28
+ /**
29
+ * Surface renderer
30
+ */
31
+ export interface SurfaceRenderer {
32
+ /**
33
+ * Render an interpreted surface
34
+ */
35
+ render(surface: InterpretedSurface, options?: RenderOptions): RenderResult;
36
+ /**
37
+ * Render a layout directly
38
+ */
39
+ renderLayout(layout: LayoutJSON, context: RenderContext): LayoutResult;
40
+ }
41
+ /**
42
+ * Deterministic surface renderer implementation
43
+ *
44
+ * This renderer guarantees:
45
+ * - Same input produces same output
46
+ * - No hidden state or side effects
47
+ * - Predictable ordering
48
+ */
49
+ export declare class DeterministicRenderer implements SurfaceRenderer {
50
+ render(surface: InterpretedSurface, options?: RenderOptions): RenderResult;
51
+ renderLayout(layout: LayoutJSON, context: RenderContext): LayoutResult;
52
+ }
53
+ /**
54
+ * Create a new surface renderer
55
+ */
56
+ export declare function createRenderer(): SurfaceRenderer;
57
+ /**
58
+ * Render a surface to a render tree
59
+ */
60
+ export declare function renderSurface(surface: InterpretedSurface, options?: RenderOptions): RenderResult;
61
+ /**
62
+ * Check if a render result is successful
63
+ */
64
+ export declare function isRenderSuccess(result: RenderResult): result is {
65
+ success: true;
66
+ output: RenderOutput;
67
+ };
68
+ /**
69
+ * Check if a render result is a failure
70
+ */
71
+ export declare function isRenderError(result: RenderResult): result is {
72
+ success: false;
73
+ error: RenderError;
74
+ };
75
+ /**
76
+ * Serialize a render node to JSON
77
+ */
78
+ export declare function serializeNode(node: RenderNode): object;
79
+ /**
80
+ * Serialize render output to JSON
81
+ */
82
+ export declare function serializeOutput(output: RenderOutput): object;
83
+ /**
84
+ * Compute a hash of a render node for determinism verification
85
+ *
86
+ * Same input should always produce same hash
87
+ */
88
+ export declare function hashNode(node: RenderNode): string;
89
+ /**
90
+ * Verify determinism by rendering twice and comparing hashes
91
+ */
92
+ export declare function verifyDeterminism(surface: InterpretedSurface, options?: RenderOptions): {
93
+ deterministic: boolean;
94
+ hash1: string;
95
+ hash2: string;
96
+ };