@pwfabric/runtime 0.0.0-stage → 1.0.0-rc.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 (603) hide show
  1. package/LICENSE +90 -0
  2. package/README.md +13 -2
  3. package/dist/__tests__/dom-test-setup.d.ts +21 -0
  4. package/dist/__tests__/dom-test-setup.d.ts.map +1 -0
  5. package/dist/__tests__/dom-test-setup.js +36 -0
  6. package/dist/__tests__/dom-test-setup.js.map +1 -0
  7. package/dist/a11y/announcer.d.ts +66 -0
  8. package/dist/a11y/announcer.d.ts.map +1 -0
  9. package/dist/a11y/announcer.js +140 -0
  10. package/dist/a11y/announcer.js.map +1 -0
  11. package/dist/a11y/contrast.d.ts +55 -0
  12. package/dist/a11y/contrast.d.ts.map +1 -0
  13. package/dist/a11y/contrast.js +93 -0
  14. package/dist/a11y/contrast.js.map +1 -0
  15. package/dist/a11y/focus.d.ts +124 -0
  16. package/dist/a11y/focus.d.ts.map +1 -0
  17. package/dist/a11y/focus.js +282 -0
  18. package/dist/a11y/focus.js.map +1 -0
  19. package/dist/a11y/index.d.ts +22 -0
  20. package/dist/a11y/index.d.ts.map +1 -0
  21. package/dist/a11y/index.js +18 -0
  22. package/dist/a11y/index.js.map +1 -0
  23. package/dist/a11y/keyboard.d.ts +145 -0
  24. package/dist/a11y/keyboard.d.ts.map +1 -0
  25. package/dist/a11y/keyboard.js +317 -0
  26. package/dist/a11y/keyboard.js.map +1 -0
  27. package/dist/adapters/default-image.d.ts +26 -0
  28. package/dist/adapters/default-image.d.ts.map +1 -0
  29. package/dist/adapters/default-image.js +37 -0
  30. package/dist/adapters/default-image.js.map +1 -0
  31. package/dist/adapters/index.d.ts +28 -0
  32. package/dist/adapters/index.d.ts.map +1 -0
  33. package/dist/adapters/index.js +28 -0
  34. package/dist/adapters/index.js.map +1 -0
  35. package/dist/adapters/next-image.d.ts +39 -0
  36. package/dist/adapters/next-image.d.ts.map +1 -0
  37. package/dist/adapters/next-image.js +124 -0
  38. package/dist/adapters/next-image.js.map +1 -0
  39. package/dist/adapters/types.d.ts +62 -0
  40. package/dist/adapters/types.d.ts.map +1 -0
  41. package/dist/adapters/types.js +11 -0
  42. package/dist/adapters/types.js.map +1 -0
  43. package/dist/analytics/index.d.ts +15 -0
  44. package/dist/analytics/index.d.ts.map +1 -0
  45. package/dist/analytics/index.js +15 -0
  46. package/dist/analytics/index.js.map +1 -0
  47. package/dist/analytics/tracker.d.ts +66 -0
  48. package/dist/analytics/tracker.d.ts.map +1 -0
  49. package/dist/analytics/tracker.js +251 -0
  50. package/dist/analytics/tracker.js.map +1 -0
  51. package/dist/analytics/types.d.ts +131 -0
  52. package/dist/analytics/types.d.ts.map +1 -0
  53. package/dist/analytics/types.js +11 -0
  54. package/dist/analytics/types.js.map +1 -0
  55. package/dist/auth/index.d.ts +16 -0
  56. package/dist/auth/index.d.ts.map +1 -0
  57. package/dist/auth/index.js +14 -0
  58. package/dist/auth/index.js.map +1 -0
  59. package/dist/auth/provider.d.ts +133 -0
  60. package/dist/auth/provider.d.ts.map +1 -0
  61. package/dist/auth/provider.js +473 -0
  62. package/dist/auth/provider.js.map +1 -0
  63. package/dist/auth/types.d.ts +118 -0
  64. package/dist/auth/types.d.ts.map +1 -0
  65. package/dist/auth/types.js +9 -0
  66. package/dist/auth/types.js.map +1 -0
  67. package/dist/binding/collection.d.ts +191 -0
  68. package/dist/binding/collection.d.ts.map +1 -0
  69. package/dist/binding/collection.js +358 -0
  70. package/dist/binding/collection.js.map +1 -0
  71. package/dist/binding/datasource.d.ts +320 -0
  72. package/dist/binding/datasource.d.ts.map +1 -0
  73. package/dist/binding/datasource.js +556 -0
  74. package/dist/binding/datasource.js.map +1 -0
  75. package/dist/binding/engine.d.ts +66 -0
  76. package/dist/binding/engine.d.ts.map +1 -0
  77. package/dist/binding/engine.js +268 -0
  78. package/dist/binding/engine.js.map +1 -0
  79. package/dist/binding/expression.d.ts +151 -0
  80. package/dist/binding/expression.d.ts.map +1 -0
  81. package/dist/binding/expression.js +787 -0
  82. package/dist/binding/expression.js.map +1 -0
  83. package/dist/binding/index.d.ts +20 -0
  84. package/dist/binding/index.d.ts.map +1 -0
  85. package/dist/binding/index.js +14 -0
  86. package/dist/binding/index.js.map +1 -0
  87. package/dist/binding/two-way.d.ts +150 -0
  88. package/dist/binding/two-way.d.ts.map +1 -0
  89. package/dist/binding/two-way.js +462 -0
  90. package/dist/binding/two-way.js.map +1 -0
  91. package/dist/binding/types.d.ts +120 -0
  92. package/dist/binding/types.d.ts.map +1 -0
  93. package/dist/binding/types.js +9 -0
  94. package/dist/binding/types.js.map +1 -0
  95. package/dist/blocks/__test-fixtures__/block-fixtures.d.ts +40 -0
  96. package/dist/blocks/__test-fixtures__/block-fixtures.d.ts.map +1 -0
  97. package/dist/blocks/__test-fixtures__/block-fixtures.js +506 -0
  98. package/dist/blocks/__test-fixtures__/block-fixtures.js.map +1 -0
  99. package/dist/blocks/component-types.d.ts +82 -0
  100. package/dist/blocks/component-types.d.ts.map +1 -0
  101. package/dist/blocks/component-types.js +11 -0
  102. package/dist/blocks/component-types.js.map +1 -0
  103. package/dist/blocks/composition-rules.d.ts +169 -0
  104. package/dist/blocks/composition-rules.d.ts.map +1 -0
  105. package/dist/blocks/composition-rules.js +391 -0
  106. package/dist/blocks/composition-rules.js.map +1 -0
  107. package/dist/blocks/hooks.d.ts +32 -0
  108. package/dist/blocks/hooks.d.ts.map +1 -0
  109. package/dist/blocks/hooks.js +42 -0
  110. package/dist/blocks/hooks.js.map +1 -0
  111. package/dist/blocks/index.d.ts +16 -0
  112. package/dist/blocks/index.d.ts.map +1 -0
  113. package/dist/blocks/index.js +24 -0
  114. package/dist/blocks/index.js.map +1 -0
  115. package/dist/blocks/registry.d.ts +85 -0
  116. package/dist/blocks/registry.d.ts.map +1 -0
  117. package/dist/blocks/registry.js +136 -0
  118. package/dist/blocks/registry.js.map +1 -0
  119. package/dist/blocks/rule-engine.d.ts +132 -0
  120. package/dist/blocks/rule-engine.d.ts.map +1 -0
  121. package/dist/blocks/rule-engine.js +321 -0
  122. package/dist/blocks/rule-engine.js.map +1 -0
  123. package/dist/blocks/surface-event-context.d.ts +14 -0
  124. package/dist/blocks/surface-event-context.d.ts.map +1 -0
  125. package/dist/blocks/surface-event-context.js +14 -0
  126. package/dist/blocks/surface-event-context.js.map +1 -0
  127. package/dist/blocks/surface-id-context.d.ts +14 -0
  128. package/dist/blocks/surface-id-context.d.ts.map +1 -0
  129. package/dist/blocks/surface-id-context.js +15 -0
  130. package/dist/blocks/surface-id-context.js.map +1 -0
  131. package/dist/bus.d.ts +42 -0
  132. package/dist/bus.d.ts.map +1 -0
  133. package/dist/bus.js +158 -0
  134. package/dist/bus.js.map +1 -0
  135. package/dist/cache/index.d.ts +10 -0
  136. package/dist/cache/index.d.ts.map +1 -0
  137. package/dist/cache/index.js +10 -0
  138. package/dist/cache/index.js.map +1 -0
  139. package/dist/cache/memory.d.ts +33 -0
  140. package/dist/cache/memory.d.ts.map +1 -0
  141. package/dist/cache/memory.js +138 -0
  142. package/dist/cache/memory.js.map +1 -0
  143. package/dist/cache/types.d.ts +63 -0
  144. package/dist/cache/types.d.ts.map +1 -0
  145. package/dist/cache/types.js +9 -0
  146. package/dist/cache/types.js.map +1 -0
  147. package/dist/capability/index.d.ts +73 -0
  148. package/dist/capability/index.d.ts.map +1 -0
  149. package/dist/capability/index.js +87 -0
  150. package/dist/capability/index.js.map +1 -0
  151. package/dist/capability/kernel-capabilities.d.ts +32 -0
  152. package/dist/capability/kernel-capabilities.d.ts.map +1 -0
  153. package/dist/capability/kernel-capabilities.js +36 -0
  154. package/dist/capability/kernel-capabilities.js.map +1 -0
  155. package/dist/capability/platform-capabilities.d.ts +72 -0
  156. package/dist/capability/platform-capabilities.d.ts.map +1 -0
  157. package/dist/capability/platform-capabilities.js +267 -0
  158. package/dist/capability/platform-capabilities.js.map +1 -0
  159. package/dist/capability/type-mapping.d.ts +71 -0
  160. package/dist/capability/type-mapping.d.ts.map +1 -0
  161. package/dist/capability/type-mapping.js +107 -0
  162. package/dist/capability/type-mapping.js.map +1 -0
  163. package/dist/capability/validation.d.ts +47 -0
  164. package/dist/capability/validation.d.ts.map +1 -0
  165. package/dist/capability/validation.js +54 -0
  166. package/dist/capability/validation.js.map +1 -0
  167. package/dist/connectors/declared-connector.d.ts +49 -0
  168. package/dist/connectors/declared-connector.d.ts.map +1 -0
  169. package/dist/connectors/declared-connector.js +333 -0
  170. package/dist/connectors/declared-connector.js.map +1 -0
  171. package/dist/connectors/engine-registry.d.ts +51 -0
  172. package/dist/connectors/engine-registry.d.ts.map +1 -0
  173. package/dist/connectors/engine-registry.js +135 -0
  174. package/dist/connectors/engine-registry.js.map +1 -0
  175. package/dist/connectors/index.d.ts +15 -0
  176. package/dist/connectors/index.d.ts.map +1 -0
  177. package/dist/connectors/index.js +14 -0
  178. package/dist/connectors/index.js.map +1 -0
  179. package/dist/connectors/module-loader.d.ts +71 -0
  180. package/dist/connectors/module-loader.d.ts.map +1 -0
  181. package/dist/connectors/module-loader.js +143 -0
  182. package/dist/connectors/module-loader.js.map +1 -0
  183. package/dist/connectors/types.d.ts +175 -0
  184. package/dist/connectors/types.d.ts.map +1 -0
  185. package/dist/connectors/types.js +23 -0
  186. package/dist/connectors/types.js.map +1 -0
  187. package/dist/context.d.ts +28 -0
  188. package/dist/context.d.ts.map +1 -0
  189. package/dist/context.js +38 -0
  190. package/dist/context.js.map +1 -0
  191. package/dist/data/DataCapabilityProvider.d.ts +40 -0
  192. package/dist/data/DataCapabilityProvider.d.ts.map +1 -0
  193. package/dist/data/DataCapabilityProvider.js +58 -0
  194. package/dist/data/DataCapabilityProvider.js.map +1 -0
  195. package/dist/data/index.d.ts +18 -0
  196. package/dist/data/index.d.ts.map +1 -0
  197. package/dist/data/index.js +18 -0
  198. package/dist/data/index.js.map +1 -0
  199. package/dist/data/manager.d.ts +41 -0
  200. package/dist/data/manager.d.ts.map +1 -0
  201. package/dist/data/manager.js +442 -0
  202. package/dist/data/manager.js.map +1 -0
  203. package/dist/data/types.d.ts +219 -0
  204. package/dist/data/types.d.ts.map +1 -0
  205. package/dist/data/types.js +2 -0
  206. package/dist/data/types.js.map +1 -0
  207. package/dist/entity/aggregate.d.ts +9 -0
  208. package/dist/entity/aggregate.d.ts.map +1 -0
  209. package/dist/entity/aggregate.js +24 -0
  210. package/dist/entity/aggregate.js.map +1 -0
  211. package/dist/entity/apply-query.d.ts +59 -0
  212. package/dist/entity/apply-query.d.ts.map +1 -0
  213. package/dist/entity/apply-query.js +264 -0
  214. package/dist/entity/apply-query.js.map +1 -0
  215. package/dist/entity/behavior.d.ts +95 -0
  216. package/dist/entity/behavior.d.ts.map +1 -0
  217. package/dist/entity/behavior.js +78 -0
  218. package/dist/entity/behavior.js.map +1 -0
  219. package/dist/entity/connector.d.ts +142 -0
  220. package/dist/entity/connector.d.ts.map +1 -0
  221. package/dist/entity/connector.js +89 -0
  222. package/dist/entity/connector.js.map +1 -0
  223. package/dist/entity/connectors/index.d.ts +13 -0
  224. package/dist/entity/connectors/index.d.ts.map +1 -0
  225. package/dist/entity/connectors/index.js +11 -0
  226. package/dist/entity/connectors/index.js.map +1 -0
  227. package/dist/entity/connectors/static.d.ts +52 -0
  228. package/dist/entity/connectors/static.d.ts.map +1 -0
  229. package/dist/entity/connectors/static.js +245 -0
  230. package/dist/entity/connectors/static.js.map +1 -0
  231. package/dist/entity/entity-datasource.d.ts +51 -0
  232. package/dist/entity/entity-datasource.d.ts.map +1 -0
  233. package/dist/entity/entity-datasource.js +33 -0
  234. package/dist/entity/entity-datasource.js.map +1 -0
  235. package/dist/entity/facade.d.ts +71 -0
  236. package/dist/entity/facade.d.ts.map +1 -0
  237. package/dist/entity/facade.js +70 -0
  238. package/dist/entity/facade.js.map +1 -0
  239. package/dist/entity/http-connector.d.ts +124 -0
  240. package/dist/entity/http-connector.d.ts.map +1 -0
  241. package/dist/entity/http-connector.js +295 -0
  242. package/dist/entity/http-connector.js.map +1 -0
  243. package/dist/entity/index.d.ts +39 -0
  244. package/dist/entity/index.d.ts.map +1 -0
  245. package/dist/entity/index.js +31 -0
  246. package/dist/entity/index.js.map +1 -0
  247. package/dist/entity/postgres-connector.d.ts +65 -0
  248. package/dist/entity/postgres-connector.d.ts.map +1 -0
  249. package/dist/entity/postgres-connector.js +239 -0
  250. package/dist/entity/postgres-connector.js.map +1 -0
  251. package/dist/entity/registry.d.ts +60 -0
  252. package/dist/entity/registry.d.ts.map +1 -0
  253. package/dist/entity/registry.js +90 -0
  254. package/dist/entity/registry.js.map +1 -0
  255. package/dist/entity/store.d.ts +67 -0
  256. package/dist/entity/store.d.ts.map +1 -0
  257. package/dist/entity/store.js +349 -0
  258. package/dist/entity/store.js.map +1 -0
  259. package/dist/entity/types.d.ts +181 -0
  260. package/dist/entity/types.d.ts.map +1 -0
  261. package/dist/entity/types.js +10 -0
  262. package/dist/entity/types.js.map +1 -0
  263. package/dist/execution-context.d.ts +89 -0
  264. package/dist/execution-context.d.ts.map +1 -0
  265. package/dist/execution-context.js +146 -0
  266. package/dist/execution-context.js.map +1 -0
  267. package/dist/executor.d.ts +28 -0
  268. package/dist/executor.d.ts.map +1 -0
  269. package/dist/executor.js +33 -0
  270. package/dist/executor.js.map +1 -0
  271. package/dist/forms/form-entity-bridge.d.ts +95 -0
  272. package/dist/forms/form-entity-bridge.d.ts.map +1 -0
  273. package/dist/forms/form-entity-bridge.js +96 -0
  274. package/dist/forms/form-entity-bridge.js.map +1 -0
  275. package/dist/forms/form-write-target.d.ts +35 -0
  276. package/dist/forms/form-write-target.d.ts.map +1 -0
  277. package/dist/forms/form-write-target.js +81 -0
  278. package/dist/forms/form-write-target.js.map +1 -0
  279. package/dist/forms/index.d.ts +23 -0
  280. package/dist/forms/index.d.ts.map +1 -0
  281. package/dist/forms/index.js +25 -0
  282. package/dist/forms/index.js.map +1 -0
  283. package/dist/forms/named-control-values.d.ts +28 -0
  284. package/dist/forms/named-control-values.d.ts.map +1 -0
  285. package/dist/forms/named-control-values.js +42 -0
  286. package/dist/forms/named-control-values.js.map +1 -0
  287. package/dist/forms/processor.d.ts +56 -0
  288. package/dist/forms/processor.d.ts.map +1 -0
  289. package/dist/forms/processor.js +154 -0
  290. package/dist/forms/processor.js.map +1 -0
  291. package/dist/forms/types.d.ts +175 -0
  292. package/dist/forms/types.d.ts.map +1 -0
  293. package/dist/forms/types.js +33 -0
  294. package/dist/forms/types.js.map +1 -0
  295. package/dist/forms/validator.d.ts +62 -0
  296. package/dist/forms/validator.d.ts.map +1 -0
  297. package/dist/forms/validator.js +218 -0
  298. package/dist/forms/validator.js.map +1 -0
  299. package/dist/graph/index.d.ts +11 -0
  300. package/dist/graph/index.d.ts.map +1 -0
  301. package/dist/graph/index.js +9 -0
  302. package/dist/graph/index.js.map +1 -0
  303. package/dist/graph/resolver.d.ts +67 -0
  304. package/dist/graph/resolver.d.ts.map +1 -0
  305. package/dist/graph/resolver.js +243 -0
  306. package/dist/graph/resolver.js.map +1 -0
  307. package/dist/graph/types.d.ts +126 -0
  308. package/dist/graph/types.d.ts.map +1 -0
  309. package/dist/graph/types.js +9 -0
  310. package/dist/graph/types.js.map +1 -0
  311. package/dist/hooks/useInstalledAtoms.d.ts +97 -0
  312. package/dist/hooks/useInstalledAtoms.d.ts.map +1 -0
  313. package/dist/hooks/useInstalledAtoms.js +92 -0
  314. package/dist/hooks/useInstalledAtoms.js.map +1 -0
  315. package/dist/i18n/index.d.ts +16 -0
  316. package/dist/i18n/index.d.ts.map +1 -0
  317. package/dist/i18n/index.js +14 -0
  318. package/dist/i18n/index.js.map +1 -0
  319. package/dist/i18n/translator.d.ts +77 -0
  320. package/dist/i18n/translator.d.ts.map +1 -0
  321. package/dist/i18n/translator.js +357 -0
  322. package/dist/i18n/translator.js.map +1 -0
  323. package/dist/i18n/types.d.ts +94 -0
  324. package/dist/i18n/types.d.ts.map +1 -0
  325. package/dist/i18n/types.js +9 -0
  326. package/dist/i18n/types.js.map +1 -0
  327. package/dist/index.d.ts +65 -0
  328. package/dist/index.d.ts.map +1 -0
  329. package/dist/index.js +95 -0
  330. package/dist/index.js.map +1 -0
  331. package/dist/kernel.d.ts +48 -0
  332. package/dist/kernel.d.ts.map +1 -0
  333. package/dist/kernel.js +258 -0
  334. package/dist/kernel.js.map +1 -0
  335. package/dist/perf/budget.d.ts +93 -0
  336. package/dist/perf/budget.d.ts.map +1 -0
  337. package/dist/perf/budget.js +122 -0
  338. package/dist/perf/budget.js.map +1 -0
  339. package/dist/perf/index.d.ts +17 -0
  340. package/dist/perf/index.d.ts.map +1 -0
  341. package/dist/perf/index.js +13 -0
  342. package/dist/perf/index.js.map +1 -0
  343. package/dist/perf/render-timer.d.ts +91 -0
  344. package/dist/perf/render-timer.d.ts.map +1 -0
  345. package/dist/perf/render-timer.js +136 -0
  346. package/dist/perf/render-timer.js.map +1 -0
  347. package/dist/perf/reporter.d.ts +127 -0
  348. package/dist/perf/reporter.d.ts.map +1 -0
  349. package/dist/perf/reporter.js +241 -0
  350. package/dist/perf/reporter.js.map +1 -0
  351. package/dist/perf/web-vitals.d.ts +112 -0
  352. package/dist/perf/web-vitals.d.ts.map +1 -0
  353. package/dist/perf/web-vitals.js +268 -0
  354. package/dist/perf/web-vitals.js.map +1 -0
  355. package/dist/registry.d.ts +64 -0
  356. package/dist/registry.d.ts.map +1 -0
  357. package/dist/registry.js +126 -0
  358. package/dist/registry.js.map +1 -0
  359. package/dist/render/BehaviorSurfaceProvider.d.ts +66 -0
  360. package/dist/render/BehaviorSurfaceProvider.d.ts.map +1 -0
  361. package/dist/render/BehaviorSurfaceProvider.js +185 -0
  362. package/dist/render/BehaviorSurfaceProvider.js.map +1 -0
  363. package/dist/render/BlockErrorBoundary.d.ts +27 -0
  364. package/dist/render/BlockErrorBoundary.d.ts.map +1 -0
  365. package/dist/render/BlockErrorBoundary.js +41 -0
  366. package/dist/render/BlockErrorBoundary.js.map +1 -0
  367. package/dist/render/DataBoundSurfaceRenderer.d.ts +79 -0
  368. package/dist/render/DataBoundSurfaceRenderer.d.ts.map +1 -0
  369. package/dist/render/DataBoundSurfaceRenderer.js +998 -0
  370. package/dist/render/DataBoundSurfaceRenderer.js.map +1 -0
  371. package/dist/render/DynamicBlockWrapper.d.ts +24 -0
  372. package/dist/render/DynamicBlockWrapper.d.ts.map +1 -0
  373. package/dist/render/DynamicBlockWrapper.js +117 -0
  374. package/dist/render/DynamicBlockWrapper.js.map +1 -0
  375. package/dist/render/appearance-resolver.d.ts +51 -0
  376. package/dist/render/appearance-resolver.d.ts.map +1 -0
  377. package/dist/render/appearance-resolver.js +78 -0
  378. package/dist/render/appearance-resolver.js.map +1 -0
  379. package/dist/render/capability-gate.d.ts +70 -0
  380. package/dist/render/capability-gate.d.ts.map +1 -0
  381. package/dist/render/capability-gate.js +94 -0
  382. package/dist/render/capability-gate.js.map +1 -0
  383. package/dist/render/conditional-states-css.d.ts +42 -0
  384. package/dist/render/conditional-states-css.d.ts.map +1 -0
  385. package/dist/render/conditional-states-css.js +82 -0
  386. package/dist/render/conditional-states-css.js.map +1 -0
  387. package/dist/render/connections-context.d.ts +32 -0
  388. package/dist/render/connections-context.d.ts.map +1 -0
  389. package/dist/render/connections-context.js +34 -0
  390. package/dist/render/connections-context.js.map +1 -0
  391. package/dist/render/dark-theme-css.d.ts +37 -0
  392. package/dist/render/dark-theme-css.d.ts.map +1 -0
  393. package/dist/render/dark-theme-css.js +67 -0
  394. package/dist/render/dark-theme-css.js.map +1 -0
  395. package/dist/render/data-binding-types.d.ts +192 -0
  396. package/dist/render/data-binding-types.d.ts.map +1 -0
  397. package/dist/render/data-binding-types.js +11 -0
  398. package/dist/render/data-binding-types.js.map +1 -0
  399. package/dist/render/data-cache.d.ts +31 -0
  400. package/dist/render/data-cache.d.ts.map +1 -0
  401. package/dist/render/data-cache.js +37 -0
  402. package/dist/render/data-cache.js.map +1 -0
  403. package/dist/render/derive-dark-theme.d.ts +18 -0
  404. package/dist/render/derive-dark-theme.d.ts.map +1 -0
  405. package/dist/render/derive-dark-theme.js +18 -0
  406. package/dist/render/derive-dark-theme.js.map +1 -0
  407. package/dist/render/dynamic-artifact-context.d.ts +78 -0
  408. package/dist/render/dynamic-artifact-context.d.ts.map +1 -0
  409. package/dist/render/dynamic-artifact-context.js +89 -0
  410. package/dist/render/dynamic-artifact-context.js.map +1 -0
  411. package/dist/render/dynamic-block-loader.d.ts +81 -0
  412. package/dist/render/dynamic-block-loader.d.ts.map +1 -0
  413. package/dist/render/dynamic-block-loader.js +197 -0
  414. package/dist/render/dynamic-block-loader.js.map +1 -0
  415. package/dist/render/endpoint.d.ts +19 -0
  416. package/dist/render/endpoint.d.ts.map +1 -0
  417. package/dist/render/endpoint.js +109 -0
  418. package/dist/render/endpoint.js.map +1 -0
  419. package/dist/render/entity-facade-context.d.ts +35 -0
  420. package/dist/render/entity-facade-context.d.ts.map +1 -0
  421. package/dist/render/entity-facade-context.js +37 -0
  422. package/dist/render/entity-facade-context.js.map +1 -0
  423. package/dist/render/group-states-css.d.ts +42 -0
  424. package/dist/render/group-states-css.d.ts.map +1 -0
  425. package/dist/render/group-states-css.js +73 -0
  426. package/dist/render/group-states-css.js.map +1 -0
  427. package/dist/render/hooks/useSurfaceEvents.d.ts +9 -0
  428. package/dist/render/hooks/useSurfaceEvents.d.ts.map +1 -0
  429. package/dist/render/hooks/useSurfaceEvents.js +9 -0
  430. package/dist/render/hooks/useSurfaceEvents.js.map +1 -0
  431. package/dist/render/hooks/useSurfaceId.d.ts +9 -0
  432. package/dist/render/hooks/useSurfaceId.d.ts.map +1 -0
  433. package/dist/render/hooks/useSurfaceId.js +9 -0
  434. package/dist/render/hooks/useSurfaceId.js.map +1 -0
  435. package/dist/render/index.d.ts +49 -0
  436. package/dist/render/index.d.ts.map +1 -0
  437. package/dist/render/index.js +61 -0
  438. package/dist/render/index.js.map +1 -0
  439. package/dist/render/interaction-rule-engine.d.ts +13 -0
  440. package/dist/render/interaction-rule-engine.d.ts.map +1 -0
  441. package/dist/render/interaction-rule-engine.js +47 -0
  442. package/dist/render/interaction-rule-engine.js.map +1 -0
  443. package/dist/render/keyframes-css.d.ts +32 -0
  444. package/dist/render/keyframes-css.d.ts.map +1 -0
  445. package/dist/render/keyframes-css.js +44 -0
  446. package/dist/render/keyframes-css.js.map +1 -0
  447. package/dist/render/query-state.d.ts +4 -0
  448. package/dist/render/query-state.d.ts.map +1 -0
  449. package/dist/render/query-state.js +70 -0
  450. package/dist/render/query-state.js.map +1 -0
  451. package/dist/render/renderer.d.ts +45 -0
  452. package/dist/render/renderer.d.ts.map +1 -0
  453. package/dist/render/renderer.js +937 -0
  454. package/dist/render/renderer.js.map +1 -0
  455. package/dist/render/resolve-expressions.d.ts +38 -0
  456. package/dist/render/resolve-expressions.d.ts.map +1 -0
  457. package/dist/render/resolve-expressions.js +309 -0
  458. package/dist/render/resolve-expressions.js.map +1 -0
  459. package/dist/render/responsive-style-css.d.ts +43 -0
  460. package/dist/render/responsive-style-css.d.ts.map +1 -0
  461. package/dist/render/responsive-style-css.js +123 -0
  462. package/dist/render/responsive-style-css.js.map +1 -0
  463. package/dist/render/responsive.d.ts +50 -0
  464. package/dist/render/responsive.d.ts.map +1 -0
  465. package/dist/render/responsive.js +99 -0
  466. package/dist/render/responsive.js.map +1 -0
  467. package/dist/render/scoped-css.d.ts +72 -0
  468. package/dist/render/scoped-css.d.ts.map +1 -0
  469. package/dist/render/scoped-css.js +102 -0
  470. package/dist/render/scoped-css.js.map +1 -0
  471. package/dist/render/shell-selection.d.ts +70 -0
  472. package/dist/render/shell-selection.d.ts.map +1 -0
  473. package/dist/render/shell-selection.js +117 -0
  474. package/dist/render/shell-selection.js.map +1 -0
  475. package/dist/render/states-css.d.ts +33 -0
  476. package/dist/render/states-css.d.ts.map +1 -0
  477. package/dist/render/states-css.js +63 -0
  478. package/dist/render/states-css.js.map +1 -0
  479. package/dist/render/surface-data-context.d.ts +19 -0
  480. package/dist/render/surface-data-context.d.ts.map +1 -0
  481. package/dist/render/surface-data-context.js +21 -0
  482. package/dist/render/surface-data-context.js.map +1 -0
  483. package/dist/render/surface-event-bus.d.ts +20 -0
  484. package/dist/render/surface-event-bus.d.ts.map +1 -0
  485. package/dist/render/surface-event-bus.js +68 -0
  486. package/dist/render/surface-event-bus.js.map +1 -0
  487. package/dist/render/surface-event-context.d.ts +12 -0
  488. package/dist/render/surface-event-context.d.ts.map +1 -0
  489. package/dist/render/surface-event-context.js +12 -0
  490. package/dist/render/surface-event-context.js.map +1 -0
  491. package/dist/render/surface-id-context.d.ts +9 -0
  492. package/dist/render/surface-id-context.d.ts.map +1 -0
  493. package/dist/render/surface-id-context.js +9 -0
  494. package/dist/render/surface-id-context.js.map +1 -0
  495. package/dist/render/theme-utils.d.ts +15 -0
  496. package/dist/render/theme-utils.d.ts.map +1 -0
  497. package/dist/render/theme-utils.js +15 -0
  498. package/dist/render/theme-utils.js.map +1 -0
  499. package/dist/render/types.d.ts +283 -0
  500. package/dist/render/types.d.ts.map +1 -0
  501. package/dist/render/types.js +9 -0
  502. package/dist/render/types.js.map +1 -0
  503. package/dist/render/visibility-css.d.ts +43 -0
  504. package/dist/render/visibility-css.d.ts.map +1 -0
  505. package/dist/render/visibility-css.js +119 -0
  506. package/dist/render/visibility-css.js.map +1 -0
  507. package/dist/render/width-scope.d.ts +35 -0
  508. package/dist/render/width-scope.d.ts.map +1 -0
  509. package/dist/render/width-scope.js +44 -0
  510. package/dist/render/width-scope.js.map +1 -0
  511. package/dist/render/write-only-sources.d.ts +34 -0
  512. package/dist/render/write-only-sources.d.ts.map +1 -0
  513. package/dist/render/write-only-sources.js +99 -0
  514. package/dist/render/write-only-sources.js.map +1 -0
  515. package/dist/routing/index.d.ts +15 -0
  516. package/dist/routing/index.d.ts.map +1 -0
  517. package/dist/routing/index.js +15 -0
  518. package/dist/routing/index.js.map +1 -0
  519. package/dist/routing/router.d.ts +43 -0
  520. package/dist/routing/router.d.ts.map +1 -0
  521. package/dist/routing/router.js +218 -0
  522. package/dist/routing/router.js.map +1 -0
  523. package/dist/routing/types.d.ts +125 -0
  524. package/dist/routing/types.d.ts.map +1 -0
  525. package/dist/routing/types.js +9 -0
  526. package/dist/routing/types.js.map +1 -0
  527. package/dist/seo/generator.d.ts +40 -0
  528. package/dist/seo/generator.d.ts.map +1 -0
  529. package/dist/seo/generator.js +236 -0
  530. package/dist/seo/generator.js.map +1 -0
  531. package/dist/seo/index.d.ts +15 -0
  532. package/dist/seo/index.d.ts.map +1 -0
  533. package/dist/seo/index.js +15 -0
  534. package/dist/seo/index.js.map +1 -0
  535. package/dist/seo/types.d.ts +182 -0
  536. package/dist/seo/types.d.ts.map +1 -0
  537. package/dist/seo/types.js +9 -0
  538. package/dist/seo/types.js.map +1 -0
  539. package/dist/state/index.d.ts +16 -0
  540. package/dist/state/index.d.ts.map +1 -0
  541. package/dist/state/index.js +16 -0
  542. package/dist/state/index.js.map +1 -0
  543. package/dist/state/manager.d.ts +34 -0
  544. package/dist/state/manager.d.ts.map +1 -0
  545. package/dist/state/manager.js +81 -0
  546. package/dist/state/manager.js.map +1 -0
  547. package/dist/state/store.d.ts +41 -0
  548. package/dist/state/store.d.ts.map +1 -0
  549. package/dist/state/store.js +145 -0
  550. package/dist/state/store.js.map +1 -0
  551. package/dist/state/types.d.ts +108 -0
  552. package/dist/state/types.d.ts.map +1 -0
  553. package/dist/state/types.js +9 -0
  554. package/dist/state/types.js.map +1 -0
  555. package/dist/surface/expression.d.ts +66 -0
  556. package/dist/surface/expression.d.ts.map +1 -0
  557. package/dist/surface/expression.js +179 -0
  558. package/dist/surface/expression.js.map +1 -0
  559. package/dist/surface/index.d.ts +33 -0
  560. package/dist/surface/index.d.ts.map +1 -0
  561. package/dist/surface/index.js +25 -0
  562. package/dist/surface/index.js.map +1 -0
  563. package/dist/surface/interpreter.d.ts +97 -0
  564. package/dist/surface/interpreter.d.ts.map +1 -0
  565. package/dist/surface/interpreter.js +231 -0
  566. package/dist/surface/interpreter.js.map +1 -0
  567. package/dist/surface/layout.d.ts +55 -0
  568. package/dist/surface/layout.d.ts.map +1 -0
  569. package/dist/surface/layout.js +288 -0
  570. package/dist/surface/layout.js.map +1 -0
  571. package/dist/surface/output.d.ts +91 -0
  572. package/dist/surface/output.d.ts.map +1 -0
  573. package/dist/surface/output.js +104 -0
  574. package/dist/surface/output.js.map +1 -0
  575. package/dist/surface/primitives.d.ts +181 -0
  576. package/dist/surface/primitives.d.ts.map +1 -0
  577. package/dist/surface/primitives.js +339 -0
  578. package/dist/surface/primitives.js.map +1 -0
  579. package/dist/surface/renderer.d.ts +97 -0
  580. package/dist/surface/renderer.d.ts.map +1 -0
  581. package/dist/surface/renderer.js +190 -0
  582. package/dist/surface/renderer.js.map +1 -0
  583. package/dist/surface/schemas.d.ts +182 -0
  584. package/dist/surface/schemas.d.ts.map +1 -0
  585. package/dist/surface/schemas.js +142 -0
  586. package/dist/surface/schemas.js.map +1 -0
  587. package/dist/surface/transforms.d.ts +145 -0
  588. package/dist/surface/transforms.d.ts.map +1 -0
  589. package/dist/surface/transforms.js +120 -0
  590. package/dist/surface/transforms.js.map +1 -0
  591. package/dist/surface/types.d.ts +161 -0
  592. package/dist/surface/types.d.ts.map +1 -0
  593. package/dist/surface/types.js +51 -0
  594. package/dist/surface/types.js.map +1 -0
  595. package/dist/surface/validation.d.ts +124 -0
  596. package/dist/surface/validation.d.ts.map +1 -0
  597. package/dist/surface/validation.js +147 -0
  598. package/dist/surface/validation.js.map +1 -0
  599. package/dist/validator.d.ts +56 -0
  600. package/dist/validator.d.ts.map +1 -0
  601. package/dist/validator.js +100 -0
  602. package/dist/validator.js.map +1 -0
  603. package/package.json +105 -3
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Core Web Vitals Collection
3
+ *
4
+ * Collects Core Web Vitals (LCP, FID, CLS, FCP, TTFB, INP) using
5
+ * PerformanceObserver. Provides real-time metric collection with
6
+ * rating classification based on web.dev thresholds.
7
+ *
8
+ * All browser APIs are guarded for SSR safety.
9
+ *
10
+ * @module @pwfabric/runtime/perf
11
+ */
12
+ /** Web Vital metric names */
13
+ export type WebVitalName = 'LCP' | 'FID' | 'CLS' | 'FCP' | 'TTFB' | 'INP';
14
+ /** Rating classification for a metric */
15
+ export type WebVitalRating = 'good' | 'needs-improvement' | 'poor';
16
+ /** A single Web Vital measurement */
17
+ export interface WebVitalMetric {
18
+ /** Metric name */
19
+ readonly name: WebVitalName;
20
+ /** Metric value (ms for timing metrics, unitless for CLS) */
21
+ readonly value: number;
22
+ /** Rating based on web.dev thresholds */
23
+ readonly rating: WebVitalRating;
24
+ /** Timestamp when the metric was collected */
25
+ readonly timestamp: number;
26
+ }
27
+ /** Callback invoked when a metric is collected */
28
+ export type WebVitalCallback = (metric: WebVitalMetric) => void;
29
+ /** Aggregated report of all collected Web Vitals */
30
+ export interface WebVitalsReport {
31
+ /** Largest Contentful Paint */
32
+ readonly lcp?: WebVitalMetric | undefined;
33
+ /** First Input Delay */
34
+ readonly fid?: WebVitalMetric | undefined;
35
+ /** Cumulative Layout Shift */
36
+ readonly cls?: WebVitalMetric | undefined;
37
+ /** First Contentful Paint */
38
+ readonly fcp?: WebVitalMetric | undefined;
39
+ /** Time to First Byte */
40
+ readonly ttfb?: WebVitalMetric | undefined;
41
+ /** Interaction to Next Paint */
42
+ readonly inp?: WebVitalMetric | undefined;
43
+ /** Timestamp when the report was generated */
44
+ readonly collectedAt: number;
45
+ }
46
+ /**
47
+ * Rate a metric value against web.dev thresholds.
48
+ *
49
+ * @param name - The metric name
50
+ * @param value - The measured value
51
+ * @returns The rating classification
52
+ */
53
+ export declare function rateMetric(name: WebVitalName, value: number): WebVitalRating;
54
+ /**
55
+ * Collects Core Web Vitals using PerformanceObserver.
56
+ *
57
+ * Supports LCP, FID, CLS, FCP, TTFB, and INP metrics.
58
+ * All observers are cleaned up on dispose.
59
+ */
60
+ export declare class WebVitalsCollector {
61
+ private metrics;
62
+ private observers;
63
+ private callbacks;
64
+ private clsValue;
65
+ private clsSessionEntries;
66
+ private clsSessionValue;
67
+ /**
68
+ * Start collecting all Web Vitals.
69
+ *
70
+ * Creates PerformanceObservers for each metric type.
71
+ * Safe to call in SSR environments (no-ops silently).
72
+ */
73
+ startCollecting(): void;
74
+ /**
75
+ * Register a callback for a specific metric.
76
+ *
77
+ * The callback fires each time the metric is updated.
78
+ *
79
+ * @param name - The metric name to observe
80
+ * @param callback - Function to call with the metric
81
+ */
82
+ onMetric(name: WebVitalName, callback: WebVitalCallback): void;
83
+ /**
84
+ * Get the current Web Vitals report.
85
+ *
86
+ * @returns A snapshot of all collected metrics
87
+ */
88
+ getReport(): WebVitalsReport;
89
+ /**
90
+ * Stop collecting metrics and disconnect all observers.
91
+ */
92
+ stopCollecting(): void;
93
+ /**
94
+ * Stop collecting and clear all state.
95
+ */
96
+ dispose(): void;
97
+ private recordMetric;
98
+ private tryObserve;
99
+ private observeLCP;
100
+ private observeFID;
101
+ private observeCLS;
102
+ private observeFCP;
103
+ private observeTTFB;
104
+ private observeINP;
105
+ }
106
+ /**
107
+ * Create a new WebVitalsCollector instance.
108
+ *
109
+ * @returns A new collector (not yet started)
110
+ */
111
+ export declare function createWebVitalsCollector(): WebVitalsCollector;
112
+ //# sourceMappingURL=web-vitals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-vitals.d.ts","sourceRoot":"","sources":["../../src/perf/web-vitals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,6BAA6B;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;AAEzE,yCAAyC;AACzC,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,mBAAmB,GAAG,MAAM,CAAA;AAElE,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAA;AAE/D,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IACzC,wBAAwB;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IACzC,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IACzC,6BAA6B;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IACzC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IAC1C,gCAAgC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IACzC,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAoBD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAY5E;AAMD;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,eAAe,CAAI;IAE3B;;;;;OAKG;IACH,eAAe,IAAI,IAAI;IAavB;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAM9D;;;;OAIG;IACH,SAAS,IAAI,eAAe;IAY5B;;OAEG;IACH,cAAc,IAAI,IAAI;IAOtB;;OAEG;IACH,OAAO,IAAI,IAAI;IAaf,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,UAAU;IA6ClB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;CAsBnB;AAoBD;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Core Web Vitals Collection
3
+ *
4
+ * Collects Core Web Vitals (LCP, FID, CLS, FCP, TTFB, INP) using
5
+ * PerformanceObserver. Provides real-time metric collection with
6
+ * rating classification based on web.dev thresholds.
7
+ *
8
+ * All browser APIs are guarded for SSR safety.
9
+ *
10
+ * @module @pwfabric/runtime/perf
11
+ */
12
+ // ============================================================
13
+ // THRESHOLDS (from web.dev)
14
+ // ============================================================
15
+ /** Rating thresholds: [goodThreshold, poorThreshold] */
16
+ const THRESHOLDS = {
17
+ LCP: [2500, 4000],
18
+ FID: [100, 300],
19
+ CLS: [0.1, 0.25],
20
+ FCP: [1800, 3000],
21
+ TTFB: [800, 1800],
22
+ INP: [200, 500],
23
+ };
24
+ // ============================================================
25
+ // UTILITY
26
+ // ============================================================
27
+ /**
28
+ * Rate a metric value against web.dev thresholds.
29
+ *
30
+ * @param name - The metric name
31
+ * @param value - The measured value
32
+ * @returns The rating classification
33
+ */
34
+ export function rateMetric(name, value) {
35
+ const threshold = THRESHOLDS[name];
36
+ if (!threshold) {
37
+ return 'good';
38
+ }
39
+ if (value <= threshold[0]) {
40
+ return 'good';
41
+ }
42
+ if (value > threshold[1]) {
43
+ return 'poor';
44
+ }
45
+ return 'needs-improvement';
46
+ }
47
+ // ============================================================
48
+ // COLLECTOR
49
+ // ============================================================
50
+ /**
51
+ * Collects Core Web Vitals using PerformanceObserver.
52
+ *
53
+ * Supports LCP, FID, CLS, FCP, TTFB, and INP metrics.
54
+ * All observers are cleaned up on dispose.
55
+ */
56
+ export class WebVitalsCollector {
57
+ metrics = new Map();
58
+ observers = [];
59
+ callbacks = new Map();
60
+ clsValue = 0;
61
+ clsSessionEntries = [];
62
+ clsSessionValue = 0;
63
+ /**
64
+ * Start collecting all Web Vitals.
65
+ *
66
+ * Creates PerformanceObservers for each metric type.
67
+ * Safe to call in SSR environments (no-ops silently).
68
+ */
69
+ startCollecting() {
70
+ if (typeof PerformanceObserver === 'undefined') {
71
+ return;
72
+ }
73
+ this.observeLCP();
74
+ this.observeFID();
75
+ this.observeCLS();
76
+ this.observeFCP();
77
+ this.observeTTFB();
78
+ this.observeINP();
79
+ }
80
+ /**
81
+ * Register a callback for a specific metric.
82
+ *
83
+ * The callback fires each time the metric is updated.
84
+ *
85
+ * @param name - The metric name to observe
86
+ * @param callback - Function to call with the metric
87
+ */
88
+ onMetric(name, callback) {
89
+ const existing = this.callbacks.get(name) ?? [];
90
+ existing.push(callback);
91
+ this.callbacks.set(name, existing);
92
+ }
93
+ /**
94
+ * Get the current Web Vitals report.
95
+ *
96
+ * @returns A snapshot of all collected metrics
97
+ */
98
+ getReport() {
99
+ return {
100
+ lcp: this.metrics.get('LCP'),
101
+ fid: this.metrics.get('FID'),
102
+ cls: this.metrics.get('CLS'),
103
+ fcp: this.metrics.get('FCP'),
104
+ ttfb: this.metrics.get('TTFB'),
105
+ inp: this.metrics.get('INP'),
106
+ collectedAt: Date.now(),
107
+ };
108
+ }
109
+ /**
110
+ * Stop collecting metrics and disconnect all observers.
111
+ */
112
+ stopCollecting() {
113
+ for (const observer of this.observers) {
114
+ observer.disconnect();
115
+ }
116
+ this.observers = [];
117
+ }
118
+ /**
119
+ * Stop collecting and clear all state.
120
+ */
121
+ dispose() {
122
+ this.stopCollecting();
123
+ this.metrics.clear();
124
+ this.callbacks.clear();
125
+ this.clsValue = 0;
126
+ this.clsSessionEntries = [];
127
+ this.clsSessionValue = 0;
128
+ }
129
+ // ----------------------------------------------------------
130
+ // Private: metric recording
131
+ // ----------------------------------------------------------
132
+ recordMetric(name, value) {
133
+ const metric = {
134
+ name,
135
+ value,
136
+ rating: rateMetric(name, value),
137
+ timestamp: Date.now(),
138
+ };
139
+ this.metrics.set(name, metric);
140
+ const cbs = this.callbacks.get(name);
141
+ if (cbs) {
142
+ for (const cb of cbs) {
143
+ cb(metric);
144
+ }
145
+ }
146
+ }
147
+ // ----------------------------------------------------------
148
+ // Private: observer helpers
149
+ // ----------------------------------------------------------
150
+ tryObserve(entryType, handler, options) {
151
+ try {
152
+ const observer = new PerformanceObserver((list) => {
153
+ handler(list.getEntries());
154
+ });
155
+ const observeOptions = {
156
+ type: options?.type ?? entryType,
157
+ buffered: options?.buffered ?? true,
158
+ };
159
+ observer.observe(observeOptions);
160
+ this.observers.push(observer);
161
+ }
162
+ catch {
163
+ // Entry type not supported in this browser — silently skip
164
+ }
165
+ }
166
+ observeLCP() {
167
+ this.tryObserve('largest-contentful-paint', (entries) => {
168
+ const last = entries[entries.length - 1];
169
+ if (last) {
170
+ this.recordMetric('LCP', last.startTime);
171
+ }
172
+ });
173
+ }
174
+ observeFID() {
175
+ this.tryObserve('first-input', (entries) => {
176
+ const first = entries[0];
177
+ if (first) {
178
+ const fidEntry = first;
179
+ this.recordMetric('FID', fidEntry.processingStart - fidEntry.startTime);
180
+ }
181
+ });
182
+ }
183
+ observeCLS() {
184
+ this.tryObserve('layout-shift', (entries) => {
185
+ for (const entry of entries) {
186
+ const lsEntry = entry;
187
+ // Only count shifts without recent user input
188
+ if (!lsEntry.hadRecentInput) {
189
+ // Session window algorithm
190
+ if (this.clsSessionEntries.length > 0 &&
191
+ entry.startTime -
192
+ (this.clsSessionEntries[this.clsSessionEntries.length - 1]?.startTime ?? 0) >
193
+ 1000) {
194
+ // Gap > 1s → start new session window
195
+ if (this.clsSessionValue > this.clsValue) {
196
+ this.clsValue = this.clsSessionValue;
197
+ }
198
+ this.clsSessionEntries = [];
199
+ this.clsSessionValue = 0;
200
+ }
201
+ // Add to current session
202
+ if (this.clsSessionEntries.length === 0 ||
203
+ entry.startTime - (this.clsSessionEntries[0]?.startTime ?? 0) <= 5000) {
204
+ this.clsSessionEntries.push(entry);
205
+ this.clsSessionValue += lsEntry.value;
206
+ }
207
+ else {
208
+ // Session exceeded 5s → start new session
209
+ if (this.clsSessionValue > this.clsValue) {
210
+ this.clsValue = this.clsSessionValue;
211
+ }
212
+ this.clsSessionEntries = [entry];
213
+ this.clsSessionValue = lsEntry.value;
214
+ }
215
+ // Report the max of current session and previous max
216
+ const currentCls = Math.max(this.clsValue, this.clsSessionValue);
217
+ this.recordMetric('CLS', currentCls);
218
+ }
219
+ }
220
+ });
221
+ }
222
+ observeFCP() {
223
+ this.tryObserve('paint', (entries) => {
224
+ const fcp = entries.find((e) => e.name === 'first-contentful-paint');
225
+ if (fcp) {
226
+ this.recordMetric('FCP', fcp.startTime);
227
+ }
228
+ });
229
+ }
230
+ observeTTFB() {
231
+ this.tryObserve('navigation', (entries) => {
232
+ const nav = entries[0];
233
+ if (nav) {
234
+ this.recordMetric('TTFB', nav.responseStart);
235
+ }
236
+ });
237
+ }
238
+ observeINP() {
239
+ this.tryObserve('event', (entries) => {
240
+ let maxDuration = 0;
241
+ for (const entry of entries) {
242
+ const eventEntry = entry;
243
+ if (eventEntry.duration > maxDuration) {
244
+ maxDuration = eventEntry.duration;
245
+ }
246
+ }
247
+ if (maxDuration > 0) {
248
+ const existing = this.metrics.get('INP');
249
+ // INP tracks the worst interaction
250
+ if (!existing || maxDuration > existing.value) {
251
+ this.recordMetric('INP', maxDuration);
252
+ }
253
+ }
254
+ }, { type: 'event', buffered: true });
255
+ }
256
+ }
257
+ // ============================================================
258
+ // FACTORY
259
+ // ============================================================
260
+ /**
261
+ * Create a new WebVitalsCollector instance.
262
+ *
263
+ * @returns A new collector (not yet started)
264
+ */
265
+ export function createWebVitalsCollector() {
266
+ return new WebVitalsCollector();
267
+ }
268
+ //# sourceMappingURL=web-vitals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-vitals.js","sourceRoot":"","sources":["../../src/perf/web-vitals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Capability Registry
3
+ *
4
+ * Registry for managing capability registration and lookup
5
+ *
6
+ * @module @pwfabric/runtime/registry
7
+ */
8
+ import type { CapabilityId, Capability, RegistrationResult, Resolution } from '@pwfabric/contracts';
9
+ /**
10
+ * Capability registry for managing registered capabilities
11
+ */
12
+ export interface CapabilityRegistry {
13
+ /**
14
+ * Register a capability
15
+ */
16
+ register<C extends Capability>(capability: C): RegistrationResult<C>;
17
+ /**
18
+ * Unregister a capability
19
+ */
20
+ unregister(id: CapabilityId): boolean;
21
+ /**
22
+ * Resolve a capability by ID
23
+ */
24
+ resolve<C extends Capability>(id: CapabilityId): Resolution<C>;
25
+ /**
26
+ * Check if a capability is registered
27
+ */
28
+ has(id: CapabilityId): boolean;
29
+ /**
30
+ * Get all registered capability IDs
31
+ */
32
+ list(): readonly CapabilityId[];
33
+ /**
34
+ * Get the count of registered capabilities
35
+ */
36
+ size(): number;
37
+ /**
38
+ * Clear all registered capabilities
39
+ */
40
+ clear(): void;
41
+ }
42
+ /**
43
+ * In-memory capability registry
44
+ */
45
+ export declare class InMemoryCapabilityRegistry implements CapabilityRegistry {
46
+ private readonly capabilities;
47
+ private readonly dependencyGraph;
48
+ register<C extends Capability>(capability: C): RegistrationResult<C>;
49
+ unregister(id: CapabilityId): boolean;
50
+ resolve<C extends Capability>(id: CapabilityId): Resolution<C>;
51
+ has(id: CapabilityId): boolean;
52
+ list(): readonly CapabilityId[];
53
+ size(): number;
54
+ clear(): void;
55
+ /**
56
+ * Detect circular dependencies using DFS
57
+ */
58
+ private detectCircularDependency;
59
+ }
60
+ /**
61
+ * Create a new capability registry
62
+ */
63
+ export declare function createRegistry(): CapabilityRegistry;
64
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,kBAAkB,EAElB,UAAU,EAEX,MAAM,qBAAqB,CAAA;AAM5B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAEpE;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAA;IAErC;;OAEG;IACH,OAAO,CAAC,CAAC,SAAS,UAAU,EAAE,EAAE,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;IAE9D;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAA;IAE9B;;OAEG;IACH,IAAI,IAAI,SAAS,YAAY,EAAE,CAAA;IAE/B;;OAEG;IACH,IAAI,IAAI,MAAM,CAAA;IAEd;;OAEG;IACH,KAAK,IAAI,IAAI,CAAA;CACd;AAMD;;GAEG;AACH,qBAAa,0BAA2B,YAAW,kBAAkB;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6C;IAE7E,QAAQ,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAyCpE,UAAU,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO;IAkBrC,OAAO,CAAC,CAAC,SAAS,UAAU,EAAE,EAAE,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC;IAc9D,GAAG,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO;IAI9B,IAAI,IAAI,SAAS,YAAY,EAAE;IAI/B,IAAI,IAAI,MAAM;IAId,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAiCjC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,CAEnD"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Capability Registry
3
+ *
4
+ * Registry for managing capability registration and lookup
5
+ *
6
+ * @module @pwfabric/runtime/registry
7
+ */
8
+ // ============================================================
9
+ // IN-MEMORY REGISTRY IMPLEMENTATION
10
+ // ============================================================
11
+ /**
12
+ * In-memory capability registry
13
+ */
14
+ export class InMemoryCapabilityRegistry {
15
+ capabilities = new Map();
16
+ dependencyGraph = new Map();
17
+ register(capability) {
18
+ const { id, dependencies } = capability;
19
+ // Check if already registered
20
+ if (this.capabilities.has(id)) {
21
+ const error = {
22
+ type: 'already_registered',
23
+ id,
24
+ };
25
+ return { success: false, error };
26
+ }
27
+ // Validate dependencies exist
28
+ for (const depId of dependencies) {
29
+ if (!this.capabilities.has(depId)) {
30
+ const error = {
31
+ type: 'missing_dependency',
32
+ id,
33
+ missing: depId,
34
+ };
35
+ return { success: false, error };
36
+ }
37
+ }
38
+ // Check for circular dependencies
39
+ const cycle = this.detectCircularDependency(id, dependencies);
40
+ if (cycle) {
41
+ const error = {
42
+ type: 'circular_dependency',
43
+ cycle,
44
+ };
45
+ return { success: false, error };
46
+ }
47
+ // Register the capability
48
+ this.capabilities.set(id, capability);
49
+ this.dependencyGraph.set(id, new Set(dependencies));
50
+ return { success: true, capability };
51
+ }
52
+ unregister(id) {
53
+ if (!this.capabilities.has(id)) {
54
+ return false;
55
+ }
56
+ // Check if other capabilities depend on this one
57
+ for (const [, deps] of this.dependencyGraph) {
58
+ if (deps.has(id)) {
59
+ // Cannot unregister - something depends on it
60
+ return false;
61
+ }
62
+ }
63
+ this.capabilities.delete(id);
64
+ this.dependencyGraph.delete(id);
65
+ return true;
66
+ }
67
+ resolve(id) {
68
+ const capability = this.capabilities.get(id);
69
+ if (!capability) {
70
+ const reason = {
71
+ type: 'not_found',
72
+ id,
73
+ };
74
+ return { found: false, reason };
75
+ }
76
+ return { found: true, capability: capability };
77
+ }
78
+ has(id) {
79
+ return this.capabilities.has(id);
80
+ }
81
+ list() {
82
+ return Array.from(this.capabilities.keys());
83
+ }
84
+ size() {
85
+ return this.capabilities.size;
86
+ }
87
+ clear() {
88
+ this.capabilities.clear();
89
+ this.dependencyGraph.clear();
90
+ }
91
+ /**
92
+ * Detect circular dependencies using DFS
93
+ */
94
+ detectCircularDependency(newId, newDeps) {
95
+ const visited = new Set();
96
+ const path = [];
97
+ const dfs = (id) => {
98
+ if (path.includes(id)) {
99
+ // Found a cycle
100
+ const cycleStart = path.indexOf(id);
101
+ return [...path.slice(cycleStart), id];
102
+ }
103
+ if (visited.has(id)) {
104
+ return null;
105
+ }
106
+ visited.add(id);
107
+ path.push(id);
108
+ const deps = id === newId ? newDeps : Array.from(this.dependencyGraph.get(id) || []);
109
+ for (const depId of deps) {
110
+ const cycle = dfs(depId);
111
+ if (cycle)
112
+ return cycle;
113
+ }
114
+ path.pop();
115
+ return null;
116
+ };
117
+ return dfs(newId);
118
+ }
119
+ }
120
+ /**
121
+ * Create a new capability registry
122
+ */
123
+ export function createRegistry() {
124
+ return new InMemoryCapabilityRegistry();
125
+ }
126
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * BehaviorSurfaceProvider
3
+ *
4
+ * React provider that wraps a surface render session with a
5
+ * stable `SurfaceEventBus` instance and the real `surfaceId`.
6
+ *
7
+ * When `entityFormBindings` are supplied and an EntityFacade
8
+ * is available via EntityFacadeContext, automatically attaches form→entity
9
+ * bridges on mount and tears them down on unmount.
10
+ *
11
+ * All block children receive both values via context so they can emit events
12
+ * that carry a meaningful surface ID without prop-drilling.
13
+ *
14
+ * Lifecycle:
15
+ * - Emits `surface:load` on mount
16
+ * - Emits `surface:unload` on unmount
17
+ * - Re-creates the bus (and re-emits lifecycle events) when `surfaceId` changes
18
+ *
19
+ * @module @pwfabric/runtime/render/BehaviorSurfaceProvider
20
+ */
21
+ import * as React from 'react';
22
+ import type { SurfaceEventDescriptor } from '@pwfabric/contracts';
23
+ import type { SurfaceDataSourceDefinition } from './data-binding-types.js';
24
+ import type { FormEntityBridgeConfig } from '../forms/form-entity-bridge.js';
25
+ import type { Block } from '@pwfabric/core';
26
+ export interface BehaviorSurfaceProviderProps {
27
+ /** The ID of the surface being rendered */
28
+ readonly surfaceId: string;
29
+ /** Block render tree */
30
+ readonly children: React.ReactNode;
31
+ /**
32
+ * Declarative form→entity bridge configurations extracted
33
+ * from `surface.capabilities` (platform/entities config.formBindings).
34
+ * When provided and EntityFacade is available, bridges are auto-attached on
35
+ * mount and torn down on unmount.
36
+ */
37
+ readonly entityFormBindings?: readonly FormEntityBridgeConfig[];
38
+ /**
39
+ * The read sources, so a form's `sourceId` can be resolved to a destination.
40
+ * A source that names an entity type writes through the facade; anything
41
+ * else is an address and writes over HTTP.
42
+ */
43
+ readonly dataSources?: readonly SurfaceDataSourceDefinition[];
44
+ /**
45
+ * The surface renderer's single event handler. Subscribed to the bus via the
46
+ * global `*` wildcard so EVERY block-emitted event (with its full payload,
47
+ * incl. a declarative `action`) reaches the action dispatcher + host
48
+ * notification — the canonical path replacing the retired legacy
49
+ * `context.onEvent` shim that blocks used to call directly.
50
+ */
51
+ readonly onEvent?: (event: SurfaceEventDescriptor) => void;
52
+ /**
53
+ * The rendered (resolved) block tree, so a form's submission can be
54
+ * completed with the named controls inside it that `FormData` cannot see —
55
+ * read from page state by their `stateKey`.
56
+ */
57
+ readonly blocks?: readonly Block[];
58
+ }
59
+ /**
60
+ * Wraps a surface render tree with a scoped `SurfaceEventBus` and `surfaceId`.
61
+ *
62
+ * Place this as the outermost wrapper inside `SurfaceRenderer` so every block
63
+ * in the tree can call `useSurfaceEvents()` and `useSurfaceId()`.
64
+ */
65
+ export declare function BehaviorSurfaceProvider({ surfaceId, children, entityFormBindings, dataSources, onEvent, blocks, }: BehaviorSurfaceProviderProps): React.ReactElement;
66
+ //# sourceMappingURL=BehaviorSurfaceProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BehaviorSurfaceProvider.d.ts","sourceRoot":"","sources":["../../src/render/BehaviorSurfaceProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAUjE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAE5E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,WAAW,4BAA4B;IAC3C,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAC/D;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,2BAA2B,EAAE,CAAA;IAC7D;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAA;IAC1D;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAA;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,WAAW,EACX,OAAO,EACP,MAAM,GACP,EAAE,4BAA4B,GAAG,KAAK,CAAC,YAAY,CA+JnD"}