@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,118 @@
1
+ /**
2
+ * Authentication Types
3
+ *
4
+ * Authentication system types
5
+ *
6
+ * @module @pwfabric/runtime/auth/types
7
+ */
8
+ /**
9
+ * Authentication provider type
10
+ */
11
+ export type AuthProviderType = 'msal' | 'oauth2' | 'api-key' | 'custom';
12
+ /**
13
+ * Authentication state
14
+ */
15
+ export type AuthState = 'unauthenticated' | 'authenticating' | 'authenticated' | 'error' | 'expired';
16
+ /**
17
+ * User identity
18
+ */
19
+ export interface UserIdentity {
20
+ readonly id: string;
21
+ readonly name?: string;
22
+ readonly email?: string;
23
+ readonly worldId?: string;
24
+ readonly roles?: readonly string[];
25
+ readonly claims?: Record<string, unknown>;
26
+ }
27
+ /**
28
+ * Authentication token
29
+ */
30
+ export interface AuthToken {
31
+ readonly accessToken: string;
32
+ readonly refreshToken?: string;
33
+ readonly idToken?: string;
34
+ readonly expiresAt: number;
35
+ readonly scopes: readonly string[];
36
+ }
37
+ /**
38
+ * Authentication session
39
+ */
40
+ export interface AuthSession {
41
+ readonly id: string;
42
+ readonly state: AuthState;
43
+ readonly user?: UserIdentity;
44
+ readonly token?: AuthToken;
45
+ readonly provider: AuthProviderType;
46
+ readonly createdAt: number;
47
+ readonly expiresAt?: number;
48
+ }
49
+ /**
50
+ * Base auth provider configuration
51
+ */
52
+ export interface AuthProviderConfig {
53
+ readonly type: AuthProviderType;
54
+ readonly clientId?: string;
55
+ readonly authority?: string;
56
+ readonly scopes?: readonly string[];
57
+ readonly redirectUri?: string;
58
+ }
59
+ /**
60
+ * MSAL configuration
61
+ */
62
+ export interface MsalConfig extends AuthProviderConfig {
63
+ readonly type: 'msal';
64
+ readonly clientId: string;
65
+ readonly authority: string;
66
+ readonly scopes: readonly string[];
67
+ readonly redirectUri: string;
68
+ readonly worldId?: string;
69
+ }
70
+ /**
71
+ * OAuth2 configuration
72
+ */
73
+ export interface OAuth2Config extends AuthProviderConfig {
74
+ readonly type: 'oauth2';
75
+ readonly authorizationEndpoint: string;
76
+ readonly tokenEndpoint: string;
77
+ readonly clientId: string;
78
+ readonly scopes: readonly string[];
79
+ readonly redirectUri: string;
80
+ }
81
+ /**
82
+ * API Key configuration
83
+ */
84
+ export interface ApiKeyConfig extends AuthProviderConfig {
85
+ readonly type: 'api-key';
86
+ readonly headerName: string;
87
+ readonly keyPrefix?: string;
88
+ }
89
+ /**
90
+ * Authentication result
91
+ */
92
+ export type AuthResult = {
93
+ readonly success: true;
94
+ readonly session: AuthSession;
95
+ } | {
96
+ readonly success: false;
97
+ readonly error: AuthError;
98
+ };
99
+ /**
100
+ * Token acquisition result
101
+ */
102
+ export type TokenResult = {
103
+ readonly success: true;
104
+ readonly token: AuthToken;
105
+ } | {
106
+ readonly success: false;
107
+ readonly error: AuthError;
108
+ };
109
+ /**
110
+ * Authentication error
111
+ */
112
+ export interface AuthError {
113
+ readonly type: 'invalid_config' | 'network_error' | 'invalid_credentials' | 'token_expired' | 'insufficient_scope' | 'provider_error';
114
+ readonly message: string;
115
+ readonly code?: string;
116
+ readonly cause?: unknown;
117
+ }
118
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Authentication Types
3
+ *
4
+ * Authentication system types
5
+ *
6
+ * @module @pwfabric/runtime/auth/types
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Collection Binding
3
+ *
4
+ * Reactive collection binding for arrays/lists in surfaces
5
+ *
6
+ * Provides:
7
+ * - Reactive array subscriptions
8
+ * - Filter, sort, map operations
9
+ * - Item change tracking (add, remove, update)
10
+ * - Derived/computed collections
11
+ *
12
+ * @module @pwfabric/runtime/binding/collection
13
+ */
14
+ /**
15
+ * Types of changes that can occur to a collection
16
+ */
17
+ export type CollectionChangeType = 'add' | 'remove' | 'update' | 'reset' | 'reorder';
18
+ /**
19
+ * Event emitted when collection changes
20
+ */
21
+ export interface CollectionChangeEvent<T> {
22
+ /** Type of change */
23
+ readonly type: CollectionChangeType;
24
+ /** Index where change occurred (-1 for reset/reorder) */
25
+ readonly index: number;
26
+ /** Item that was affected (undefined for reset) */
27
+ readonly item?: T | undefined;
28
+ /** Previous items (for reset) */
29
+ readonly previousItems?: readonly T[] | undefined;
30
+ /** Timestamp of the change */
31
+ readonly timestamp: number;
32
+ }
33
+ /**
34
+ * Listener for collection changes
35
+ */
36
+ export type CollectionChangeListener<T> = (items: readonly T[], event: CollectionChangeEvent<T>) => void;
37
+ /**
38
+ * Reactive collection binding interface
39
+ */
40
+ export interface CollectionBinding<T> {
41
+ /** Current items in the collection */
42
+ readonly items: readonly T[];
43
+ /** Field used as unique key for items */
44
+ readonly keyField: string;
45
+ /** Number of items */
46
+ readonly length: number;
47
+ /**
48
+ * Subscribe to collection changes
49
+ * @returns Unsubscribe function
50
+ */
51
+ subscribe(listener: CollectionChangeListener<T>): () => void;
52
+ /**
53
+ * Create a filtered view of the collection
54
+ */
55
+ filter(predicate: (item: T, index: number) => boolean): CollectionBinding<T>;
56
+ /**
57
+ * Create a sorted view of the collection
58
+ */
59
+ sort(comparator: (a: T, b: T) => number): CollectionBinding<T>;
60
+ /**
61
+ * Create a mapped view of the collection
62
+ */
63
+ map<U>(mapper: (item: T, index: number) => U): CollectionBinding<U>;
64
+ /**
65
+ * Create a sliced view of the collection
66
+ */
67
+ slice(start?: number, end?: number): CollectionBinding<T>;
68
+ /**
69
+ * Get item by key value
70
+ */
71
+ getByKey(keyValue: unknown): T | undefined;
72
+ /**
73
+ * Get item at index
74
+ */
75
+ at(index: number): T | undefined;
76
+ /**
77
+ * Find first item matching predicate
78
+ */
79
+ find(predicate: (item: T, index: number) => boolean): T | undefined;
80
+ /**
81
+ * Find index of first item matching predicate
82
+ */
83
+ findIndex(predicate: (item: T, index: number) => boolean): number;
84
+ /**
85
+ * Check if any item matches predicate
86
+ */
87
+ some(predicate: (item: T, index: number) => boolean): boolean;
88
+ /**
89
+ * Check if all items match predicate
90
+ */
91
+ every(predicate: (item: T, index: number) => boolean): boolean;
92
+ /**
93
+ * Reduce collection to single value
94
+ */
95
+ reduce<U>(reducer: (acc: U, item: T, index: number) => U, initial: U): U;
96
+ /**
97
+ * Dispose of the collection and all subscriptions
98
+ */
99
+ dispose(): void;
100
+ }
101
+ /**
102
+ * Mutable collection binding interface
103
+ */
104
+ export interface MutableCollectionBinding<T> extends CollectionBinding<T> {
105
+ /**
106
+ * Add item to collection
107
+ */
108
+ add(item: T): void;
109
+ /**
110
+ * Add multiple items to collection
111
+ */
112
+ addMany(items: readonly T[]): void;
113
+ /**
114
+ * Remove item by key value
115
+ */
116
+ remove(keyValue: unknown): boolean;
117
+ /**
118
+ * Remove item at index
119
+ */
120
+ removeAt(index: number): T | undefined;
121
+ /**
122
+ * Update item by key value
123
+ */
124
+ update(keyValue: unknown, updates: Partial<T>): boolean;
125
+ /**
126
+ * Replace item at index
127
+ */
128
+ replace(index: number, item: T): void;
129
+ /**
130
+ * Replace all items
131
+ */
132
+ reset(items: readonly T[]): void;
133
+ /**
134
+ * Clear all items
135
+ */
136
+ clear(): void;
137
+ /**
138
+ * Move item from one index to another
139
+ */
140
+ move(fromIndex: number, toIndex: number): void;
141
+ }
142
+ /**
143
+ * Reactive collection implementation with change tracking
144
+ */
145
+ export declare class ReactiveCollection<T> implements MutableCollectionBinding<T> {
146
+ private _items;
147
+ private readonly _keyField;
148
+ private readonly listeners;
149
+ private disposed;
150
+ constructor(initialItems?: readonly T[], keyField?: string);
151
+ get items(): readonly T[];
152
+ get keyField(): string;
153
+ get length(): number;
154
+ subscribe(listener: CollectionChangeListener<T>): () => void;
155
+ filter(predicate: (item: T, index: number) => boolean): CollectionBinding<T>;
156
+ sort(comparator: (a: T, b: T) => number): CollectionBinding<T>;
157
+ map<U>(mapper: (item: T, index: number) => U): CollectionBinding<U>;
158
+ slice(start?: number, end?: number): CollectionBinding<T>;
159
+ getByKey(keyValue: unknown): T | undefined;
160
+ at(index: number): T | undefined;
161
+ find(predicate: (item: T, index: number) => boolean): T | undefined;
162
+ findIndex(predicate: (item: T, index: number) => boolean): number;
163
+ some(predicate: (item: T, index: number) => boolean): boolean;
164
+ every(predicate: (item: T, index: number) => boolean): boolean;
165
+ reduce<U>(reducer: (acc: U, item: T, index: number) => U, initial: U): U;
166
+ add(item: T): void;
167
+ addMany(items: readonly T[]): void;
168
+ remove(keyValue: unknown): boolean;
169
+ removeAt(index: number): T | undefined;
170
+ update(keyValue: unknown, updates: Partial<T>): boolean;
171
+ replace(index: number, item: T): void;
172
+ reset(items: readonly T[]): void;
173
+ clear(): void;
174
+ move(fromIndex: number, toIndex: number): void;
175
+ dispose(): void;
176
+ private getKeyValue;
177
+ private notify;
178
+ }
179
+ /**
180
+ * Create a reactive collection
181
+ */
182
+ export declare function createCollection<T>(initialItems?: readonly T[], keyField?: string): MutableCollectionBinding<T>;
183
+ /**
184
+ * Create a read-only collection from existing data
185
+ */
186
+ export declare function createReadOnlyCollection<T>(items: readonly T[], keyField?: string): CollectionBinding<T>;
187
+ /**
188
+ * Create a collection from an async iterable
189
+ */
190
+ export declare function createCollectionFromAsync<T>(asyncIterable: AsyncIterable<T>, keyField?: string): Promise<MutableCollectionBinding<T>>;
191
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/binding/collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,358 @@
1
+ /**
2
+ * Collection Binding
3
+ *
4
+ * Reactive collection binding for arrays/lists in surfaces
5
+ *
6
+ * Provides:
7
+ * - Reactive array subscriptions
8
+ * - Filter, sort, map operations
9
+ * - Item change tracking (add, remove, update)
10
+ * - Derived/computed collections
11
+ *
12
+ * @module @pwfabric/runtime/binding/collection
13
+ */
14
+ // ============================================================
15
+ // REACTIVE COLLECTION IMPLEMENTATION
16
+ // ============================================================
17
+ /**
18
+ * Reactive collection implementation with change tracking
19
+ */
20
+ export class ReactiveCollection {
21
+ _items;
22
+ _keyField;
23
+ listeners = new Set();
24
+ disposed = false;
25
+ constructor(initialItems = [], keyField = 'id') {
26
+ this._items = [...initialItems];
27
+ this._keyField = keyField;
28
+ }
29
+ get items() {
30
+ return this._items;
31
+ }
32
+ get keyField() {
33
+ return this._keyField;
34
+ }
35
+ get length() {
36
+ return this._items.length;
37
+ }
38
+ subscribe(listener) {
39
+ if (this.disposed) {
40
+ throw new Error('Cannot subscribe to disposed collection');
41
+ }
42
+ this.listeners.add(listener);
43
+ return () => {
44
+ this.listeners.delete(listener);
45
+ };
46
+ }
47
+ filter(predicate) {
48
+ return new DerivedCollection(this, (items) => items.filter((item, index) => predicate(item, index)));
49
+ }
50
+ sort(comparator) {
51
+ return new DerivedCollection(this, (items) => [...items].sort(comparator));
52
+ }
53
+ map(mapper) {
54
+ return new DerivedCollection(this, (items) => items.map((item, index) => mapper(item, index)));
55
+ }
56
+ slice(start, end) {
57
+ return new DerivedCollection(this, (items) => items.slice(start, end));
58
+ }
59
+ getByKey(keyValue) {
60
+ return this._items.find((item) => this.getKeyValue(item) === keyValue);
61
+ }
62
+ at(index) {
63
+ if (index < 0) {
64
+ return this._items[this._items.length + index];
65
+ }
66
+ return this._items[index];
67
+ }
68
+ find(predicate) {
69
+ return this._items.find((item, index) => predicate(item, index));
70
+ }
71
+ findIndex(predicate) {
72
+ return this._items.findIndex((item, index) => predicate(item, index));
73
+ }
74
+ some(predicate) {
75
+ return this._items.some((item, index) => predicate(item, index));
76
+ }
77
+ every(predicate) {
78
+ return this._items.every((item, index) => predicate(item, index));
79
+ }
80
+ reduce(reducer, initial) {
81
+ return this._items.reduce((acc, item, index) => reducer(acc, item, index), initial);
82
+ }
83
+ add(item) {
84
+ if (this.disposed)
85
+ return;
86
+ const index = this._items.length;
87
+ this._items.push(item);
88
+ this.notify({ type: 'add', index, item, timestamp: Date.now() });
89
+ }
90
+ addMany(items) {
91
+ if (this.disposed || items.length === 0)
92
+ return;
93
+ const startIndex = this._items.length;
94
+ this._items.push(...items);
95
+ // Notify for each added item
96
+ for (let i = 0; i < items.length; i++) {
97
+ this.notify({
98
+ type: 'add',
99
+ index: startIndex + i,
100
+ item: items[i],
101
+ timestamp: Date.now(),
102
+ });
103
+ }
104
+ }
105
+ remove(keyValue) {
106
+ if (this.disposed)
107
+ return false;
108
+ const index = this._items.findIndex((item) => this.getKeyValue(item) === keyValue);
109
+ if (index === -1)
110
+ return false;
111
+ const [item] = this._items.splice(index, 1);
112
+ this.notify({ type: 'remove', index, item, timestamp: Date.now() });
113
+ return true;
114
+ }
115
+ removeAt(index) {
116
+ if (this.disposed)
117
+ return undefined;
118
+ if (index < 0 || index >= this._items.length)
119
+ return undefined;
120
+ const [item] = this._items.splice(index, 1);
121
+ this.notify({ type: 'remove', index, item, timestamp: Date.now() });
122
+ return item;
123
+ }
124
+ update(keyValue, updates) {
125
+ if (this.disposed)
126
+ return false;
127
+ const index = this._items.findIndex((item) => this.getKeyValue(item) === keyValue);
128
+ if (index === -1)
129
+ return false;
130
+ const existing = this._items[index];
131
+ if (existing === undefined)
132
+ return false;
133
+ const updated = { ...existing, ...updates };
134
+ this._items[index] = updated;
135
+ this.notify({ type: 'update', index, item: updated, timestamp: Date.now() });
136
+ return true;
137
+ }
138
+ replace(index, item) {
139
+ if (this.disposed)
140
+ return;
141
+ if (index < 0 || index >= this._items.length)
142
+ return;
143
+ this._items[index] = item;
144
+ this.notify({ type: 'update', index, item, timestamp: Date.now() });
145
+ }
146
+ reset(items) {
147
+ if (this.disposed)
148
+ return;
149
+ const previousItems = this._items;
150
+ this._items = [...items];
151
+ this.notify({
152
+ type: 'reset',
153
+ index: -1,
154
+ previousItems,
155
+ timestamp: Date.now(),
156
+ });
157
+ }
158
+ clear() {
159
+ this.reset([]);
160
+ }
161
+ move(fromIndex, toIndex) {
162
+ if (this.disposed)
163
+ return;
164
+ if (fromIndex < 0 || fromIndex >= this._items.length)
165
+ return;
166
+ if (toIndex < 0 || toIndex >= this._items.length)
167
+ return;
168
+ if (fromIndex === toIndex)
169
+ return;
170
+ const [item] = this._items.splice(fromIndex, 1);
171
+ if (item === undefined)
172
+ return;
173
+ this._items.splice(toIndex, 0, item);
174
+ this.notify({ type: 'reorder', index: toIndex, item, timestamp: Date.now() });
175
+ }
176
+ dispose() {
177
+ this.disposed = true;
178
+ this.listeners.clear();
179
+ }
180
+ getKeyValue(item) {
181
+ if (typeof item === 'object' && item !== null) {
182
+ return item[this._keyField];
183
+ }
184
+ return item;
185
+ }
186
+ notify(event) {
187
+ const items = this._items;
188
+ for (const listener of this.listeners) {
189
+ try {
190
+ listener(items, event);
191
+ }
192
+ catch {
193
+ // Swallow errors from listeners
194
+ }
195
+ }
196
+ }
197
+ }
198
+ // ============================================================
199
+ // DERIVED COLLECTION IMPLEMENTATION
200
+ // ============================================================
201
+ /**
202
+ * Derived collection that transforms a source collection
203
+ */
204
+ class DerivedCollection {
205
+ source;
206
+ transform;
207
+ listeners = new Set();
208
+ _items;
209
+ unsubscribe = null;
210
+ disposed = false;
211
+ constructor(source, transform) {
212
+ this.source = source;
213
+ this.transform = transform;
214
+ this._items = transform(source.items);
215
+ // Subscribe to source changes
216
+ this.unsubscribe = source.subscribe(() => {
217
+ this.update();
218
+ });
219
+ }
220
+ get items() {
221
+ return this._items;
222
+ }
223
+ get keyField() {
224
+ return this.source.keyField;
225
+ }
226
+ get length() {
227
+ return this._items.length;
228
+ }
229
+ subscribe(listener) {
230
+ if (this.disposed) {
231
+ throw new Error('Cannot subscribe to disposed collection');
232
+ }
233
+ this.listeners.add(listener);
234
+ return () => {
235
+ this.listeners.delete(listener);
236
+ };
237
+ }
238
+ filter(predicate) {
239
+ return new DerivedCollection(this, (items) => items.filter((item, index) => predicate(item, index)));
240
+ }
241
+ sort(comparator) {
242
+ return new DerivedCollection(this, (items) => [...items].sort(comparator));
243
+ }
244
+ map(mapper) {
245
+ return new DerivedCollection(this, (items) => items.map((item, index) => mapper(item, index)));
246
+ }
247
+ slice(start, end) {
248
+ return new DerivedCollection(this, (items) => items.slice(start, end));
249
+ }
250
+ getByKey(keyValue) {
251
+ // Note: For derived collections with map transforms, key lookup may not work as expected
252
+ return this._items.find((item) => {
253
+ if (typeof item === 'object' && item !== null) {
254
+ return item[this.keyField] === keyValue;
255
+ }
256
+ return item === keyValue;
257
+ });
258
+ }
259
+ at(index) {
260
+ if (index < 0) {
261
+ return this._items[this._items.length + index];
262
+ }
263
+ return this._items[index];
264
+ }
265
+ find(predicate) {
266
+ return this._items.find((item, index) => predicate(item, index));
267
+ }
268
+ findIndex(predicate) {
269
+ return this._items.findIndex((item, index) => predicate(item, index));
270
+ }
271
+ some(predicate) {
272
+ return this._items.some((item, index) => predicate(item, index));
273
+ }
274
+ every(predicate) {
275
+ return this._items.every((item, index) => predicate(item, index));
276
+ }
277
+ reduce(reducer, initial) {
278
+ return this._items.reduce((acc, item, index) => reducer(acc, item, index), initial);
279
+ }
280
+ dispose() {
281
+ this.disposed = true;
282
+ this.listeners.clear();
283
+ if (this.unsubscribe) {
284
+ this.unsubscribe();
285
+ this.unsubscribe = null;
286
+ }
287
+ }
288
+ update() {
289
+ const previousItems = this._items;
290
+ this._items = this.transform(this.source.items);
291
+ // Notify listeners
292
+ const event = {
293
+ type: 'reset',
294
+ index: -1,
295
+ previousItems,
296
+ timestamp: Date.now(),
297
+ };
298
+ for (const listener of this.listeners) {
299
+ try {
300
+ listener(this._items, event);
301
+ }
302
+ catch {
303
+ // Swallow errors from listeners
304
+ }
305
+ }
306
+ }
307
+ }
308
+ // ============================================================
309
+ // FACTORY FUNCTIONS
310
+ // ============================================================
311
+ /**
312
+ * Create a reactive collection
313
+ */
314
+ export function createCollection(initialItems, keyField) {
315
+ return new ReactiveCollection(initialItems, keyField);
316
+ }
317
+ /**
318
+ * Create a read-only collection from existing data
319
+ */
320
+ export function createReadOnlyCollection(items, keyField = 'id') {
321
+ const collection = new ReactiveCollection(items, keyField);
322
+ // Return interface without mutation methods
323
+ return {
324
+ get items() {
325
+ return collection.items;
326
+ },
327
+ get keyField() {
328
+ return collection.keyField;
329
+ },
330
+ get length() {
331
+ return collection.length;
332
+ },
333
+ subscribe: (listener) => collection.subscribe(listener),
334
+ filter: (predicate) => collection.filter(predicate),
335
+ sort: (comparator) => collection.sort(comparator),
336
+ map: (mapper) => collection.map(mapper),
337
+ slice: (start, end) => collection.slice(start, end),
338
+ getByKey: (keyValue) => collection.getByKey(keyValue),
339
+ at: (index) => collection.at(index),
340
+ find: (predicate) => collection.find(predicate),
341
+ findIndex: (predicate) => collection.findIndex(predicate),
342
+ some: (predicate) => collection.some(predicate),
343
+ every: (predicate) => collection.every(predicate),
344
+ reduce: (reducer, initial) => collection.reduce(reducer, initial),
345
+ dispose: () => collection.dispose(),
346
+ };
347
+ }
348
+ /**
349
+ * Create a collection from an async iterable
350
+ */
351
+ export async function createCollectionFromAsync(asyncIterable, keyField = 'id') {
352
+ const items = [];
353
+ for await (const item of asyncIterable) {
354
+ items.push(item);
355
+ }
356
+ return new ReactiveCollection(items, keyField);
357
+ }
358
+ //# sourceMappingURL=collection.js.map