@lssm/lib.contracts 0.0.0-canary-20251120170226

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 (623) hide show
  1. package/README.md +98 -0
  2. package/dist/app-config/branding.d.ts +56 -0
  3. package/dist/app-config/branding.d.ts.map +1 -0
  4. package/dist/app-config/branding.js +0 -0
  5. package/dist/app-config/contracts.d.ts +245 -0
  6. package/dist/app-config/contracts.d.ts.map +1 -0
  7. package/dist/app-config/contracts.js +2 -0
  8. package/dist/app-config/contracts.js.map +1 -0
  9. package/dist/app-config/events.d.ts +123 -0
  10. package/dist/app-config/events.d.ts.map +1 -0
  11. package/dist/app-config/events.js +2 -0
  12. package/dist/app-config/events.js.map +1 -0
  13. package/dist/app-config/index.d.ts +8 -0
  14. package/dist/app-config/index.js +1 -0
  15. package/dist/app-config/lifecycle-contracts.d.ts +383 -0
  16. package/dist/app-config/lifecycle-contracts.d.ts.map +1 -0
  17. package/dist/app-config/lifecycle-contracts.js +2 -0
  18. package/dist/app-config/lifecycle-contracts.js.map +1 -0
  19. package/dist/app-config/lifecycle.d.ts +28 -0
  20. package/dist/app-config/lifecycle.d.ts.map +1 -0
  21. package/dist/app-config/lifecycle.js +0 -0
  22. package/dist/app-config/runtime.d.ts +115 -0
  23. package/dist/app-config/runtime.d.ts.map +1 -0
  24. package/dist/app-config/runtime.js +2 -0
  25. package/dist/app-config/runtime.js.map +1 -0
  26. package/dist/app-config/spec.d.ts +176 -0
  27. package/dist/app-config/spec.d.ts.map +1 -0
  28. package/dist/app-config/spec.js +2 -0
  29. package/dist/app-config/spec.js.map +1 -0
  30. package/dist/app-config/validation.d.ts +48 -0
  31. package/dist/app-config/validation.d.ts.map +1 -0
  32. package/dist/app-config/validation.js +2 -0
  33. package/dist/app-config/validation.js.map +1 -0
  34. package/dist/capabilities/openbanking.d.ts +10 -0
  35. package/dist/capabilities/openbanking.d.ts.map +1 -0
  36. package/dist/capabilities/openbanking.js +2 -0
  37. package/dist/capabilities/openbanking.js.map +1 -0
  38. package/dist/capabilities.d.ts +45 -0
  39. package/dist/capabilities.d.ts.map +1 -0
  40. package/dist/capabilities.js +2 -0
  41. package/dist/capabilities.js.map +1 -0
  42. package/dist/client/index.d.ts +6 -0
  43. package/dist/client/index.js +1 -0
  44. package/dist/client/react/drivers/rn-reusables.d.ts +23 -0
  45. package/dist/client/react/drivers/rn-reusables.d.ts.map +1 -0
  46. package/dist/client/react/drivers/rn-reusables.js +2 -0
  47. package/dist/client/react/drivers/rn-reusables.js.map +1 -0
  48. package/dist/client/react/drivers/shadcn.d.ts +13 -0
  49. package/dist/client/react/drivers/shadcn.d.ts.map +1 -0
  50. package/dist/client/react/drivers/shadcn.js +2 -0
  51. package/dist/client/react/drivers/shadcn.js.map +1 -0
  52. package/dist/client/react/feature-render.d.ts +21 -0
  53. package/dist/client/react/feature-render.d.ts.map +1 -0
  54. package/dist/client/react/feature-render.js +2 -0
  55. package/dist/client/react/feature-render.js.map +1 -0
  56. package/dist/client/react/form-render.d.ts +92 -0
  57. package/dist/client/react/form-render.d.ts.map +1 -0
  58. package/dist/client/react/form-render.js +2 -0
  59. package/dist/client/react/form-render.js.map +1 -0
  60. package/dist/client/react/index.d.ts +5 -0
  61. package/dist/client/react/index.js +1 -0
  62. package/dist/contracts-adapter-hydration.d.ts +16 -0
  63. package/dist/contracts-adapter-hydration.d.ts.map +1 -0
  64. package/dist/contracts-adapter-hydration.js +2 -0
  65. package/dist/contracts-adapter-hydration.js.map +1 -0
  66. package/dist/contracts-adapter-input.d.ts +11 -0
  67. package/dist/contracts-adapter-input.d.ts.map +1 -0
  68. package/dist/contracts-adapter-input.js +2 -0
  69. package/dist/contracts-adapter-input.js.map +1 -0
  70. package/dist/data-views/query-generator.d.ts +40 -0
  71. package/dist/data-views/query-generator.d.ts.map +1 -0
  72. package/dist/data-views/query-generator.js +2 -0
  73. package/dist/data-views/query-generator.js.map +1 -0
  74. package/dist/data-views/runtime.d.ts +27 -0
  75. package/dist/data-views/runtime.d.ts.map +1 -0
  76. package/dist/data-views/runtime.js +2 -0
  77. package/dist/data-views/runtime.js.map +1 -0
  78. package/dist/data-views.d.ts +132 -0
  79. package/dist/data-views.d.ts.map +1 -0
  80. package/dist/data-views.js +2 -0
  81. package/dist/data-views.js.map +1 -0
  82. package/dist/events.d.ts +45 -0
  83. package/dist/events.d.ts.map +1 -0
  84. package/dist/events.js +2 -0
  85. package/dist/events.js.map +1 -0
  86. package/dist/experiments/evaluator.d.ts +38 -0
  87. package/dist/experiments/evaluator.d.ts.map +1 -0
  88. package/dist/experiments/evaluator.js +2 -0
  89. package/dist/experiments/evaluator.js.map +1 -0
  90. package/dist/experiments/spec.d.ts +90 -0
  91. package/dist/experiments/spec.d.ts.map +1 -0
  92. package/dist/experiments/spec.js +2 -0
  93. package/dist/experiments/spec.js.map +1 -0
  94. package/dist/features.d.ts +88 -0
  95. package/dist/features.d.ts.map +1 -0
  96. package/dist/features.js +2 -0
  97. package/dist/features.js.map +1 -0
  98. package/dist/forms.d.ts +259 -0
  99. package/dist/forms.d.ts.map +1 -0
  100. package/dist/forms.js +2 -0
  101. package/dist/forms.js.map +1 -0
  102. package/dist/graphql-federation/dist/index.js +2 -0
  103. package/dist/graphql-federation/dist/index.js.map +1 -0
  104. package/dist/index.d.ts +129 -0
  105. package/dist/index.js +1 -0
  106. package/dist/install.d.ts +77 -0
  107. package/dist/install.d.ts.map +1 -0
  108. package/dist/install.js +2 -0
  109. package/dist/install.js.map +1 -0
  110. package/dist/integrations/binding.d.ts +18 -0
  111. package/dist/integrations/binding.d.ts.map +1 -0
  112. package/dist/integrations/binding.js +0 -0
  113. package/dist/integrations/connection.d.ts +52 -0
  114. package/dist/integrations/connection.d.ts.map +1 -0
  115. package/dist/integrations/connection.js +0 -0
  116. package/dist/integrations/contracts.d.ts +436 -0
  117. package/dist/integrations/contracts.d.ts.map +1 -0
  118. package/dist/integrations/contracts.js +2 -0
  119. package/dist/integrations/contracts.js.map +1 -0
  120. package/dist/integrations/health.d.ts +22 -0
  121. package/dist/integrations/health.d.ts.map +1 -0
  122. package/dist/integrations/health.js +2 -0
  123. package/dist/integrations/health.js.map +1 -0
  124. package/dist/integrations/index.d.ts +53 -0
  125. package/dist/integrations/index.js +1 -0
  126. package/dist/integrations/openbanking/contracts/accounts.d.ts +288 -0
  127. package/dist/integrations/openbanking/contracts/accounts.d.ts.map +1 -0
  128. package/dist/integrations/openbanking/contracts/accounts.js +2 -0
  129. package/dist/integrations/openbanking/contracts/accounts.js.map +1 -0
  130. package/dist/integrations/openbanking/contracts/balances.d.ts +164 -0
  131. package/dist/integrations/openbanking/contracts/balances.d.ts.map +1 -0
  132. package/dist/integrations/openbanking/contracts/balances.js +2 -0
  133. package/dist/integrations/openbanking/contracts/balances.js.map +1 -0
  134. package/dist/integrations/openbanking/contracts/index.d.ts +10 -0
  135. package/dist/integrations/openbanking/contracts/index.d.ts.map +1 -0
  136. package/dist/integrations/openbanking/contracts/index.js +2 -0
  137. package/dist/integrations/openbanking/contracts/index.js.map +1 -0
  138. package/dist/integrations/openbanking/contracts/transactions.d.ts +212 -0
  139. package/dist/integrations/openbanking/contracts/transactions.d.ts.map +1 -0
  140. package/dist/integrations/openbanking/contracts/transactions.js +2 -0
  141. package/dist/integrations/openbanking/contracts/transactions.js.map +1 -0
  142. package/dist/integrations/openbanking/guards.d.ts +13 -0
  143. package/dist/integrations/openbanking/guards.d.ts.map +1 -0
  144. package/dist/integrations/openbanking/guards.js +2 -0
  145. package/dist/integrations/openbanking/guards.js.map +1 -0
  146. package/dist/integrations/openbanking/models.d.ts +229 -0
  147. package/dist/integrations/openbanking/models.d.ts.map +1 -0
  148. package/dist/integrations/openbanking/models.js +2 -0
  149. package/dist/integrations/openbanking/models.js.map +1 -0
  150. package/dist/integrations/openbanking/telemetry.d.ts +16 -0
  151. package/dist/integrations/openbanking/telemetry.d.ts.map +1 -0
  152. package/dist/integrations/openbanking/telemetry.js +2 -0
  153. package/dist/integrations/openbanking/telemetry.js.map +1 -0
  154. package/dist/integrations/providers/calendar.d.ts +79 -0
  155. package/dist/integrations/providers/calendar.d.ts.map +1 -0
  156. package/dist/integrations/providers/calendar.js +0 -0
  157. package/dist/integrations/providers/elevenlabs.d.ts +8 -0
  158. package/dist/integrations/providers/elevenlabs.d.ts.map +1 -0
  159. package/dist/integrations/providers/elevenlabs.js +2 -0
  160. package/dist/integrations/providers/elevenlabs.js.map +1 -0
  161. package/dist/integrations/providers/email.d.ts +87 -0
  162. package/dist/integrations/providers/email.d.ts.map +1 -0
  163. package/dist/integrations/providers/email.js +0 -0
  164. package/dist/integrations/providers/embedding.d.ts +25 -0
  165. package/dist/integrations/providers/embedding.d.ts.map +1 -0
  166. package/dist/integrations/providers/embedding.js +0 -0
  167. package/dist/integrations/providers/gcs-storage.d.ts +8 -0
  168. package/dist/integrations/providers/gcs-storage.d.ts.map +1 -0
  169. package/dist/integrations/providers/gcs-storage.js +2 -0
  170. package/dist/integrations/providers/gcs-storage.js.map +1 -0
  171. package/dist/integrations/providers/gmail.d.ts +8 -0
  172. package/dist/integrations/providers/gmail.d.ts.map +1 -0
  173. package/dist/integrations/providers/gmail.js +2 -0
  174. package/dist/integrations/providers/gmail.js.map +1 -0
  175. package/dist/integrations/providers/google-calendar.d.ts +8 -0
  176. package/dist/integrations/providers/google-calendar.d.ts.map +1 -0
  177. package/dist/integrations/providers/google-calendar.js +2 -0
  178. package/dist/integrations/providers/google-calendar.js.map +1 -0
  179. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +21 -0
  180. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +1 -0
  181. package/dist/integrations/providers/impls/elevenlabs-voice.js +2 -0
  182. package/dist/integrations/providers/impls/elevenlabs-voice.js.map +1 -0
  183. package/dist/integrations/providers/impls/gcs-storage.d.ts +25 -0
  184. package/dist/integrations/providers/impls/gcs-storage.d.ts.map +1 -0
  185. package/dist/integrations/providers/impls/gcs-storage.js +2 -0
  186. package/dist/integrations/providers/impls/gcs-storage.js.map +1 -0
  187. package/dist/integrations/providers/impls/gmail-inbound.d.ts +27 -0
  188. package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +1 -0
  189. package/dist/integrations/providers/impls/gmail-inbound.js +2 -0
  190. package/dist/integrations/providers/impls/gmail-inbound.js.map +1 -0
  191. package/dist/integrations/providers/impls/gmail-outbound.d.ts +19 -0
  192. package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +1 -0
  193. package/dist/integrations/providers/impls/gmail-outbound.js +7 -0
  194. package/dist/integrations/providers/impls/gmail-outbound.js.map +1 -0
  195. package/dist/integrations/providers/impls/google-calendar.d.ts +24 -0
  196. package/dist/integrations/providers/impls/google-calendar.d.ts.map +1 -0
  197. package/dist/integrations/providers/impls/google-calendar.js +2 -0
  198. package/dist/integrations/providers/impls/google-calendar.js.map +1 -0
  199. package/dist/integrations/providers/impls/index.d.ts +15 -0
  200. package/dist/integrations/providers/impls/index.js +1 -0
  201. package/dist/integrations/providers/impls/mistral-embedding.d.ts +24 -0
  202. package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +1 -0
  203. package/dist/integrations/providers/impls/mistral-embedding.js +2 -0
  204. package/dist/integrations/providers/impls/mistral-embedding.js.map +1 -0
  205. package/dist/integrations/providers/impls/mistral-llm.d.ts +32 -0
  206. package/dist/integrations/providers/impls/mistral-llm.d.ts.map +1 -0
  207. package/dist/integrations/providers/impls/mistral-llm.js +2 -0
  208. package/dist/integrations/providers/impls/mistral-llm.js.map +1 -0
  209. package/dist/integrations/providers/impls/postmark-email.d.ts +20 -0
  210. package/dist/integrations/providers/impls/postmark-email.d.ts.map +1 -0
  211. package/dist/integrations/providers/impls/postmark-email.js +2 -0
  212. package/dist/integrations/providers/impls/postmark-email.js.map +1 -0
  213. package/dist/integrations/providers/impls/powens-client.d.ts +125 -0
  214. package/dist/integrations/providers/impls/powens-client.d.ts.map +1 -0
  215. package/dist/integrations/providers/impls/powens-client.js +2 -0
  216. package/dist/integrations/providers/impls/powens-client.js.map +1 -0
  217. package/dist/integrations/providers/impls/powens-openbanking.d.ts +28 -0
  218. package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +1 -0
  219. package/dist/integrations/providers/impls/powens-openbanking.js +2 -0
  220. package/dist/integrations/providers/impls/powens-openbanking.js.map +1 -0
  221. package/dist/integrations/providers/impls/provider-factory.d.ts +27 -0
  222. package/dist/integrations/providers/impls/provider-factory.d.ts.map +1 -0
  223. package/dist/integrations/providers/impls/provider-factory.js +2 -0
  224. package/dist/integrations/providers/impls/provider-factory.js.map +1 -0
  225. package/dist/integrations/providers/impls/qdrant-vector.d.ts +25 -0
  226. package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +1 -0
  227. package/dist/integrations/providers/impls/qdrant-vector.js +2 -0
  228. package/dist/integrations/providers/impls/qdrant-vector.js.map +1 -0
  229. package/dist/integrations/providers/impls/stripe-payments.d.ts +29 -0
  230. package/dist/integrations/providers/impls/stripe-payments.d.ts.map +1 -0
  231. package/dist/integrations/providers/impls/stripe-payments.js +2 -0
  232. package/dist/integrations/providers/impls/stripe-payments.js.map +1 -0
  233. package/dist/integrations/providers/impls/twilio-sms.d.ts +21 -0
  234. package/dist/integrations/providers/impls/twilio-sms.d.ts.map +1 -0
  235. package/dist/integrations/providers/impls/twilio-sms.js +2 -0
  236. package/dist/integrations/providers/impls/twilio-sms.js.map +1 -0
  237. package/dist/integrations/providers/index.d.ts +36 -0
  238. package/dist/integrations/providers/index.js +1 -0
  239. package/dist/integrations/providers/llm.d.ts +83 -0
  240. package/dist/integrations/providers/llm.d.ts.map +1 -0
  241. package/dist/integrations/providers/llm.js +0 -0
  242. package/dist/integrations/providers/mistral.d.ts +8 -0
  243. package/dist/integrations/providers/mistral.d.ts.map +1 -0
  244. package/dist/integrations/providers/mistral.js +2 -0
  245. package/dist/integrations/providers/mistral.js.map +1 -0
  246. package/dist/integrations/providers/openbanking.d.ts +129 -0
  247. package/dist/integrations/providers/openbanking.d.ts.map +1 -0
  248. package/dist/integrations/providers/openbanking.js +0 -0
  249. package/dist/integrations/providers/payments.d.ts +110 -0
  250. package/dist/integrations/providers/payments.d.ts.map +1 -0
  251. package/dist/integrations/providers/payments.js +0 -0
  252. package/dist/integrations/providers/postmark.d.ts +8 -0
  253. package/dist/integrations/providers/postmark.d.ts.map +1 -0
  254. package/dist/integrations/providers/postmark.js +2 -0
  255. package/dist/integrations/providers/postmark.js.map +1 -0
  256. package/dist/integrations/providers/powens.d.ts +8 -0
  257. package/dist/integrations/providers/powens.d.ts.map +1 -0
  258. package/dist/integrations/providers/powens.js +2 -0
  259. package/dist/integrations/providers/powens.js.map +1 -0
  260. package/dist/integrations/providers/qdrant.d.ts +8 -0
  261. package/dist/integrations/providers/qdrant.d.ts.map +1 -0
  262. package/dist/integrations/providers/qdrant.js +2 -0
  263. package/dist/integrations/providers/qdrant.js.map +1 -0
  264. package/dist/integrations/providers/sms.d.ts +35 -0
  265. package/dist/integrations/providers/sms.d.ts.map +1 -0
  266. package/dist/integrations/providers/sms.js +0 -0
  267. package/dist/integrations/providers/storage.d.ts +61 -0
  268. package/dist/integrations/providers/storage.d.ts.map +1 -0
  269. package/dist/integrations/providers/storage.js +0 -0
  270. package/dist/integrations/providers/stripe.d.ts +8 -0
  271. package/dist/integrations/providers/stripe.d.ts.map +1 -0
  272. package/dist/integrations/providers/stripe.js +2 -0
  273. package/dist/integrations/providers/stripe.js.map +1 -0
  274. package/dist/integrations/providers/twilio-sms.d.ts +8 -0
  275. package/dist/integrations/providers/twilio-sms.d.ts.map +1 -0
  276. package/dist/integrations/providers/twilio-sms.js +2 -0
  277. package/dist/integrations/providers/twilio-sms.js.map +1 -0
  278. package/dist/integrations/providers/vector-store.d.ts +44 -0
  279. package/dist/integrations/providers/vector-store.d.ts.map +1 -0
  280. package/dist/integrations/providers/vector-store.js +0 -0
  281. package/dist/integrations/providers/voice.d.ts +35 -0
  282. package/dist/integrations/providers/voice.d.ts.map +1 -0
  283. package/dist/integrations/providers/voice.js +0 -0
  284. package/dist/integrations/runtime.d.ts +100 -0
  285. package/dist/integrations/runtime.d.ts.map +1 -0
  286. package/dist/integrations/runtime.js +2 -0
  287. package/dist/integrations/runtime.js.map +1 -0
  288. package/dist/integrations/secrets/env-secret-provider.d.ts +32 -0
  289. package/dist/integrations/secrets/env-secret-provider.d.ts.map +1 -0
  290. package/dist/integrations/secrets/env-secret-provider.js +2 -0
  291. package/dist/integrations/secrets/env-secret-provider.js.map +1 -0
  292. package/dist/integrations/secrets/gcp-secret-manager.d.ts +33 -0
  293. package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +1 -0
  294. package/dist/integrations/secrets/gcp-secret-manager.js +2 -0
  295. package/dist/integrations/secrets/gcp-secret-manager.js.map +1 -0
  296. package/dist/integrations/secrets/index.d.ts +5 -0
  297. package/dist/integrations/secrets/index.js +1 -0
  298. package/dist/integrations/secrets/manager.d.ts +48 -0
  299. package/dist/integrations/secrets/manager.d.ts.map +1 -0
  300. package/dist/integrations/secrets/manager.js +2 -0
  301. package/dist/integrations/secrets/manager.js.map +1 -0
  302. package/dist/integrations/secrets/provider.d.ts +53 -0
  303. package/dist/integrations/secrets/provider.d.ts.map +1 -0
  304. package/dist/integrations/secrets/provider.js +2 -0
  305. package/dist/integrations/secrets/provider.js.map +1 -0
  306. package/dist/integrations/spec.d.ts +80 -0
  307. package/dist/integrations/spec.d.ts.map +1 -0
  308. package/dist/integrations/spec.js +2 -0
  309. package/dist/integrations/spec.js.map +1 -0
  310. package/dist/jobs/gcp-cloud-tasks.d.ts +42 -0
  311. package/dist/jobs/gcp-cloud-tasks.d.ts.map +1 -0
  312. package/dist/jobs/gcp-cloud-tasks.js +2 -0
  313. package/dist/jobs/gcp-cloud-tasks.js.map +1 -0
  314. package/dist/jobs/gcp-pubsub.d.ts +26 -0
  315. package/dist/jobs/gcp-pubsub.d.ts.map +1 -0
  316. package/dist/jobs/gcp-pubsub.js +2 -0
  317. package/dist/jobs/gcp-pubsub.js.map +1 -0
  318. package/dist/jobs/handlers/gmail-sync-handler.d.ts +10 -0
  319. package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +1 -0
  320. package/dist/jobs/handlers/gmail-sync-handler.js +2 -0
  321. package/dist/jobs/handlers/gmail-sync-handler.js.map +1 -0
  322. package/dist/jobs/handlers/index.d.ts +3 -0
  323. package/dist/jobs/handlers/index.js +1 -0
  324. package/dist/jobs/handlers/storage-document-handler.d.ts +13 -0
  325. package/dist/jobs/handlers/storage-document-handler.d.ts.map +1 -0
  326. package/dist/jobs/handlers/storage-document-handler.js +2 -0
  327. package/dist/jobs/handlers/storage-document-handler.js.map +1 -0
  328. package/dist/jobs/index.d.ts +7 -0
  329. package/dist/jobs/index.js +1 -0
  330. package/dist/jobs/memory-queue.d.ts +19 -0
  331. package/dist/jobs/memory-queue.d.ts.map +1 -0
  332. package/dist/jobs/memory-queue.js +2 -0
  333. package/dist/jobs/memory-queue.js.map +1 -0
  334. package/dist/jobs/queue.d.ts +27 -0
  335. package/dist/jobs/queue.d.ts.map +1 -0
  336. package/dist/jobs/queue.js +0 -0
  337. package/dist/jsonschema.d.ts +27 -0
  338. package/dist/jsonschema.d.ts.map +1 -0
  339. package/dist/jsonschema.js +2 -0
  340. package/dist/jsonschema.js.map +1 -0
  341. package/dist/knowledge/binding.d.ts +26 -0
  342. package/dist/knowledge/binding.d.ts.map +1 -0
  343. package/dist/knowledge/binding.js +0 -0
  344. package/dist/knowledge/contracts.d.ts +317 -0
  345. package/dist/knowledge/contracts.d.ts.map +1 -0
  346. package/dist/knowledge/contracts.js +2 -0
  347. package/dist/knowledge/contracts.js.map +1 -0
  348. package/dist/knowledge/index.d.ts +10 -0
  349. package/dist/knowledge/index.js +1 -0
  350. package/dist/knowledge/ingestion/document-processor.d.ts +25 -0
  351. package/dist/knowledge/ingestion/document-processor.d.ts.map +1 -0
  352. package/dist/knowledge/ingestion/document-processor.js +2 -0
  353. package/dist/knowledge/ingestion/document-processor.js.map +1 -0
  354. package/dist/knowledge/ingestion/embedding-service.d.ts +13 -0
  355. package/dist/knowledge/ingestion/embedding-service.d.ts.map +1 -0
  356. package/dist/knowledge/ingestion/embedding-service.js +2 -0
  357. package/dist/knowledge/ingestion/embedding-service.js.map +1 -0
  358. package/dist/knowledge/ingestion/gmail-adapter.d.ts +19 -0
  359. package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +1 -0
  360. package/dist/knowledge/ingestion/gmail-adapter.js +7 -0
  361. package/dist/knowledge/ingestion/gmail-adapter.js.map +1 -0
  362. package/dist/knowledge/ingestion/index.d.ts +6 -0
  363. package/dist/knowledge/ingestion/index.js +1 -0
  364. package/dist/knowledge/ingestion/storage-adapter.d.ts +16 -0
  365. package/dist/knowledge/ingestion/storage-adapter.d.ts.map +1 -0
  366. package/dist/knowledge/ingestion/storage-adapter.js +2 -0
  367. package/dist/knowledge/ingestion/storage-adapter.js.map +1 -0
  368. package/dist/knowledge/ingestion/vector-indexer.d.ts +19 -0
  369. package/dist/knowledge/ingestion/vector-indexer.d.ts.map +1 -0
  370. package/dist/knowledge/ingestion/vector-indexer.js +2 -0
  371. package/dist/knowledge/ingestion/vector-indexer.js.map +1 -0
  372. package/dist/knowledge/query/index.d.ts +2 -0
  373. package/dist/knowledge/query/index.js +1 -0
  374. package/dist/knowledge/query/service.d.ts +30 -0
  375. package/dist/knowledge/query/service.d.ts.map +1 -0
  376. package/dist/knowledge/query/service.js +4 -0
  377. package/dist/knowledge/query/service.js.map +1 -0
  378. package/dist/knowledge/runtime.d.ts +33 -0
  379. package/dist/knowledge/runtime.d.ts.map +1 -0
  380. package/dist/knowledge/runtime.js +2 -0
  381. package/dist/knowledge/runtime.js.map +1 -0
  382. package/dist/knowledge/source.d.ts +33 -0
  383. package/dist/knowledge/source.d.ts.map +1 -0
  384. package/dist/knowledge/source.js +0 -0
  385. package/dist/knowledge/spaces/email-threads.d.ts +8 -0
  386. package/dist/knowledge/spaces/email-threads.d.ts.map +1 -0
  387. package/dist/knowledge/spaces/email-threads.js +2 -0
  388. package/dist/knowledge/spaces/email-threads.js.map +1 -0
  389. package/dist/knowledge/spaces/financial-docs.d.ts +8 -0
  390. package/dist/knowledge/spaces/financial-docs.d.ts.map +1 -0
  391. package/dist/knowledge/spaces/financial-docs.js +2 -0
  392. package/dist/knowledge/spaces/financial-docs.js.map +1 -0
  393. package/dist/knowledge/spaces/financial-overview.d.ts +8 -0
  394. package/dist/knowledge/spaces/financial-overview.d.ts.map +1 -0
  395. package/dist/knowledge/spaces/financial-overview.js +2 -0
  396. package/dist/knowledge/spaces/financial-overview.js.map +1 -0
  397. package/dist/knowledge/spaces/index.d.ts +7 -0
  398. package/dist/knowledge/spaces/index.js +1 -0
  399. package/dist/knowledge/spaces/product-canon.d.ts +8 -0
  400. package/dist/knowledge/spaces/product-canon.d.ts.map +1 -0
  401. package/dist/knowledge/spaces/product-canon.js +2 -0
  402. package/dist/knowledge/spaces/product-canon.js.map +1 -0
  403. package/dist/knowledge/spaces/support-faq.d.ts +8 -0
  404. package/dist/knowledge/spaces/support-faq.d.ts.map +1 -0
  405. package/dist/knowledge/spaces/support-faq.js +2 -0
  406. package/dist/knowledge/spaces/support-faq.js.map +1 -0
  407. package/dist/knowledge/spaces/uploaded-docs.d.ts +8 -0
  408. package/dist/knowledge/spaces/uploaded-docs.d.ts.map +1 -0
  409. package/dist/knowledge/spaces/uploaded-docs.js +2 -0
  410. package/dist/knowledge/spaces/uploaded-docs.js.map +1 -0
  411. package/dist/knowledge/spec.d.ts +53 -0
  412. package/dist/knowledge/spec.d.ts.map +1 -0
  413. package/dist/knowledge/spec.js +2 -0
  414. package/dist/knowledge/spec.js.map +1 -0
  415. package/dist/markdown.d.ts +22 -0
  416. package/dist/markdown.d.ts.map +1 -0
  417. package/dist/markdown.js +4 -0
  418. package/dist/markdown.js.map +1 -0
  419. package/dist/migrations.d.ts +53 -0
  420. package/dist/migrations.d.ts.map +1 -0
  421. package/dist/migrations.js +2 -0
  422. package/dist/migrations.js.map +1 -0
  423. package/dist/onboarding-base.d.ts +138 -0
  424. package/dist/onboarding-base.d.ts.map +1 -0
  425. package/dist/onboarding-base.js +2 -0
  426. package/dist/onboarding-base.js.map +1 -0
  427. package/dist/ownership.d.ts +76 -0
  428. package/dist/ownership.d.ts.map +1 -0
  429. package/dist/ownership.js +2 -0
  430. package/dist/ownership.js.map +1 -0
  431. package/dist/policy/engine.d.ts +40 -0
  432. package/dist/policy/engine.d.ts.map +1 -0
  433. package/dist/policy/engine.js +2 -0
  434. package/dist/policy/engine.js.map +1 -0
  435. package/dist/policy/opa-adapter.d.ts +46 -0
  436. package/dist/policy/opa-adapter.d.ts.map +1 -0
  437. package/dist/policy/opa-adapter.js +2 -0
  438. package/dist/policy/opa-adapter.js.map +1 -0
  439. package/dist/policy/spec.d.ts +115 -0
  440. package/dist/policy/spec.d.ts.map +1 -0
  441. package/dist/policy/spec.js +2 -0
  442. package/dist/policy/spec.js.map +1 -0
  443. package/dist/presentations.backcompat.d.ts +8 -0
  444. package/dist/presentations.backcompat.d.ts.map +1 -0
  445. package/dist/presentations.backcompat.js +2 -0
  446. package/dist/presentations.backcompat.js.map +1 -0
  447. package/dist/presentations.d.ts +97 -0
  448. package/dist/presentations.d.ts.map +1 -0
  449. package/dist/presentations.js +2 -0
  450. package/dist/presentations.js.map +1 -0
  451. package/dist/presentations.v2.d.ts +96 -0
  452. package/dist/presentations.v2.d.ts.map +1 -0
  453. package/dist/presentations.v2.js +2 -0
  454. package/dist/presentations.v2.js.map +1 -0
  455. package/dist/prompt.d.ts +61 -0
  456. package/dist/prompt.d.ts.map +1 -0
  457. package/dist/prompt.js +2 -0
  458. package/dist/prompt.js.map +1 -0
  459. package/dist/promptRegistry.d.ts +16 -0
  460. package/dist/promptRegistry.d.ts.map +1 -0
  461. package/dist/promptRegistry.js +2 -0
  462. package/dist/promptRegistry.js.map +1 -0
  463. package/dist/regenerator/adapters.d.ts +20 -0
  464. package/dist/regenerator/adapters.d.ts.map +1 -0
  465. package/dist/regenerator/adapters.js +0 -0
  466. package/dist/regenerator/executor.d.ts +71 -0
  467. package/dist/regenerator/executor.d.ts.map +1 -0
  468. package/dist/regenerator/executor.js +2 -0
  469. package/dist/regenerator/executor.js.map +1 -0
  470. package/dist/regenerator/index.d.ts +7 -0
  471. package/dist/regenerator/index.js +1 -0
  472. package/dist/regenerator/service.d.ts +34 -0
  473. package/dist/regenerator/service.d.ts.map +1 -0
  474. package/dist/regenerator/service.js +2 -0
  475. package/dist/regenerator/service.js.map +1 -0
  476. package/dist/regenerator/sinks.d.ts +27 -0
  477. package/dist/regenerator/sinks.d.ts.map +1 -0
  478. package/dist/regenerator/sinks.js +2 -0
  479. package/dist/regenerator/sinks.js.map +1 -0
  480. package/dist/regenerator/types.d.ts +108 -0
  481. package/dist/regenerator/types.d.ts.map +1 -0
  482. package/dist/regenerator/types.js +0 -0
  483. package/dist/regenerator/utils.d.ts +10 -0
  484. package/dist/regenerator/utils.d.ts.map +1 -0
  485. package/dist/regenerator/utils.js +2 -0
  486. package/dist/regenerator/utils.js.map +1 -0
  487. package/dist/registry.d.ts +73 -0
  488. package/dist/registry.d.ts.map +1 -0
  489. package/dist/registry.js +2 -0
  490. package/dist/registry.js.map +1 -0
  491. package/dist/resources.d.ts +65 -0
  492. package/dist/resources.d.ts.map +1 -0
  493. package/dist/resources.js +2 -0
  494. package/dist/resources.js.map +1 -0
  495. package/dist/schema/dist/EnumType.js +1 -0
  496. package/dist/schema/dist/FieldType.js +2 -0
  497. package/dist/schema/dist/FieldType.js.map +1 -0
  498. package/dist/schema/dist/ScalarTypeEnum.js +2 -0
  499. package/dist/schema/dist/ScalarTypeEnum.js.map +1 -0
  500. package/dist/schema/dist/SchemaModel.js +2 -0
  501. package/dist/schema/dist/SchemaModel.js.map +1 -0
  502. package/dist/schema/dist/index.js +1 -0
  503. package/dist/server/graphql-pothos.d.ts +32 -0
  504. package/dist/server/graphql-pothos.d.ts.map +1 -0
  505. package/dist/server/graphql-pothos.js +2 -0
  506. package/dist/server/graphql-pothos.js.map +1 -0
  507. package/dist/server/graphql-schema-export.d.ts +7 -0
  508. package/dist/server/graphql-schema-export.d.ts.map +1 -0
  509. package/dist/server/graphql-schema-export.js +2 -0
  510. package/dist/server/graphql-schema-export.js.map +1 -0
  511. package/dist/server/index.d.ts +9 -0
  512. package/dist/server/index.js +1 -0
  513. package/dist/server/provider-mcp.d.ts +52 -0
  514. package/dist/server/provider-mcp.d.ts.map +1 -0
  515. package/dist/server/provider-mcp.js +2 -0
  516. package/dist/server/provider-mcp.js.map +1 -0
  517. package/dist/server/rest-elysia.d.ts +41 -0
  518. package/dist/server/rest-elysia.d.ts.map +1 -0
  519. package/dist/server/rest-elysia.js +2 -0
  520. package/dist/server/rest-elysia.js.map +1 -0
  521. package/dist/server/rest-express.d.ts +17 -0
  522. package/dist/server/rest-express.d.ts.map +1 -0
  523. package/dist/server/rest-express.js +2 -0
  524. package/dist/server/rest-express.js.map +1 -0
  525. package/dist/server/rest-generic.d.ts +33 -0
  526. package/dist/server/rest-generic.d.ts.map +1 -0
  527. package/dist/server/rest-generic.js +2 -0
  528. package/dist/server/rest-generic.js.map +1 -0
  529. package/dist/server/rest-next-app.d.ts +36 -0
  530. package/dist/server/rest-next-app.d.ts.map +1 -0
  531. package/dist/server/rest-next-app.js +2 -0
  532. package/dist/server/rest-next-app.js.map +1 -0
  533. package/dist/server/rest-next-mcp.d.ts +12 -0
  534. package/dist/server/rest-next-mcp.d.ts.map +1 -0
  535. package/dist/server/rest-next-mcp.js +2 -0
  536. package/dist/server/rest-next-mcp.js.map +1 -0
  537. package/dist/server/rest-next-pages.d.ts +10 -0
  538. package/dist/server/rest-next-pages.d.ts.map +1 -0
  539. package/dist/server/rest-next-pages.js +2 -0
  540. package/dist/server/rest-next-pages.js.map +1 -0
  541. package/dist/spec.d.ts +172 -0
  542. package/dist/spec.d.ts.map +1 -0
  543. package/dist/spec.js +2 -0
  544. package/dist/spec.js.map +1 -0
  545. package/dist/telemetry/anomaly.d.ts +28 -0
  546. package/dist/telemetry/anomaly.d.ts.map +1 -0
  547. package/dist/telemetry/anomaly.js +2 -0
  548. package/dist/telemetry/anomaly.js.map +1 -0
  549. package/dist/telemetry/index.d.ts +4 -0
  550. package/dist/telemetry/index.js +1 -0
  551. package/dist/telemetry/spec.d.ts +99 -0
  552. package/dist/telemetry/spec.d.ts.map +1 -0
  553. package/dist/telemetry/spec.js +2 -0
  554. package/dist/telemetry/spec.js.map +1 -0
  555. package/dist/telemetry/tracker.d.ts +52 -0
  556. package/dist/telemetry/tracker.d.ts.map +1 -0
  557. package/dist/telemetry/tracker.js +2 -0
  558. package/dist/telemetry/tracker.js.map +1 -0
  559. package/dist/tests/index.d.ts +3 -0
  560. package/dist/tests/index.js +1 -0
  561. package/dist/tests/runner.d.ts +44 -0
  562. package/dist/tests/runner.d.ts.map +1 -0
  563. package/dist/tests/runner.js +2 -0
  564. package/dist/tests/runner.js.map +1 -0
  565. package/dist/tests/spec.d.ts +90 -0
  566. package/dist/tests/spec.d.ts.map +1 -0
  567. package/dist/tests/spec.js +2 -0
  568. package/dist/tests/spec.js.map +1 -0
  569. package/dist/themes.d.ts +56 -0
  570. package/dist/themes.d.ts.map +1 -0
  571. package/dist/themes.js +2 -0
  572. package/dist/themes.js.map +1 -0
  573. package/dist/translations/catalog.d.ts +29 -0
  574. package/dist/translations/catalog.d.ts.map +1 -0
  575. package/dist/translations/catalog.js +0 -0
  576. package/dist/translations/tenant.d.ts +16 -0
  577. package/dist/translations/tenant.d.ts.map +1 -0
  578. package/dist/translations/tenant.js +0 -0
  579. package/dist/types/all.d.ts +60 -0
  580. package/dist/types/all.js +0 -0
  581. package/dist/types.d.ts +86 -0
  582. package/dist/types.d.ts.map +1 -0
  583. package/dist/types.js +0 -0
  584. package/dist/workflow/adapters/db-adapter.d.ts +35 -0
  585. package/dist/workflow/adapters/db-adapter.d.ts.map +1 -0
  586. package/dist/workflow/adapters/db-adapter.js +2 -0
  587. package/dist/workflow/adapters/db-adapter.js.map +1 -0
  588. package/dist/workflow/adapters/file-adapter.d.ts +15 -0
  589. package/dist/workflow/adapters/file-adapter.d.ts.map +1 -0
  590. package/dist/workflow/adapters/file-adapter.js +2 -0
  591. package/dist/workflow/adapters/file-adapter.js.map +1 -0
  592. package/dist/workflow/adapters/index.d.ts +4 -0
  593. package/dist/workflow/adapters/index.js +1 -0
  594. package/dist/workflow/adapters/memory-store.d.ts +19 -0
  595. package/dist/workflow/adapters/memory-store.d.ts.map +1 -0
  596. package/dist/workflow/adapters/memory-store.js +2 -0
  597. package/dist/workflow/adapters/memory-store.js.map +1 -0
  598. package/dist/workflow/expression.d.ts +10 -0
  599. package/dist/workflow/expression.d.ts.map +1 -0
  600. package/dist/workflow/expression.js +2 -0
  601. package/dist/workflow/expression.js.map +1 -0
  602. package/dist/workflow/index.d.ts +10 -0
  603. package/dist/workflow/index.js +1 -0
  604. package/dist/workflow/runner.d.ts +75 -0
  605. package/dist/workflow/runner.d.ts.map +1 -0
  606. package/dist/workflow/runner.js +2 -0
  607. package/dist/workflow/runner.js.map +1 -0
  608. package/dist/workflow/sla-monitor.d.ts +21 -0
  609. package/dist/workflow/sla-monitor.d.ts.map +1 -0
  610. package/dist/workflow/sla-monitor.js +2 -0
  611. package/dist/workflow/sla-monitor.js.map +1 -0
  612. package/dist/workflow/spec.d.ts +100 -0
  613. package/dist/workflow/spec.d.ts.map +1 -0
  614. package/dist/workflow/spec.js +2 -0
  615. package/dist/workflow/spec.js.map +1 -0
  616. package/dist/workflow/state.d.ts +36 -0
  617. package/dist/workflow/state.d.ts.map +1 -0
  618. package/dist/workflow/state.js +0 -0
  619. package/dist/workflow/validation.d.ts +29 -0
  620. package/dist/workflow/validation.d.ts.map +1 -0
  621. package/dist/workflow/validation.js +2 -0
  622. package/dist/workflow/validation.js.map +1 -0
  623. package/package.json +403 -0
@@ -0,0 +1 @@
1
+ "use client";import{createEngineWithDefaults as e,createFeatureModule as t,registerFeature as n,renderFeaturePresentation as r}from"./react/feature-render.js";import{createFormRenderer as i}from"./react/form-render.js";import{shadcnDriver as a}from"./react/drivers/shadcn.js";import{rnReusablesDriver as o}from"./react/drivers/rn-reusables.js";import"./react/index.js";export{e as createEngineWithDefaults,t as createFeatureModule,i as createFormRenderer,n as registerFeature,r as renderFeaturePresentation,o as rnReusablesDriver,a as shadcnDriver};
@@ -0,0 +1,23 @@
1
+ import { DriverSlots } from "../form-render.js";
2
+
3
+ //#region src/client/react/drivers/rn-reusables.d.ts
4
+
5
+ /**
6
+ * Create a React Native UI-kit driver by mapping required slots to components.
7
+ * Host apps should import their UI-kit primitives and pass them here.
8
+ *
9
+ * Example usage:
10
+ * ```tsx
11
+ * import { rnReusablesDriver } from '@lssm/lib.contracts/client/react/drivers/rn-reusables';
12
+ * import { Input, Textarea, Button } from '@lssm/lib.ui-kit/ui';
13
+ *
14
+ * const driver = rnReusablesDriver({
15
+ * Input, Textarea, Button, // ... other components
16
+ * });
17
+ * ```
18
+ */
19
+ declare function rnReusablesDriver(slots: DriverSlots): DriverSlots;
20
+ type RnReusablesDriver = ReturnType<typeof rnReusablesDriver>;
21
+ //#endregion
22
+ export { RnReusablesDriver, rnReusablesDriver };
23
+ //# sourceMappingURL=rn-reusables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rn-reusables.d.ts","names":[],"sources":["../../../../src/client/react/drivers/rn-reusables.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;;iBAoBgB,iBAAA,QAAyB,cAAc;KAI3C,iBAAA,GAAoB,kBAAkB"}
@@ -0,0 +1,2 @@
1
+ function e(e){return e}export{e as rnReusablesDriver};
2
+ //# sourceMappingURL=rn-reusables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rn-reusables.js","names":[],"sources":["../../../../src/client/react/drivers/rn-reusables.ts"],"sourcesContent":["/**\n * React Native driver for FormSpec using @lssm/lib.ui-kit components.\n * Maps contract form slots to mobile UI-kit primitives.\n */\nimport type { DriverSlots } from '../form-render';\n\n/**\n * Create a React Native UI-kit driver by mapping required slots to components.\n * Host apps should import their UI-kit primitives and pass them here.\n *\n * Example usage:\n * ```tsx\n * import { rnReusablesDriver } from '@lssm/lib.contracts/client/react/drivers/rn-reusables';\n * import { Input, Textarea, Button } from '@lssm/lib.ui-kit/ui';\n *\n * const driver = rnReusablesDriver({\n * Input, Textarea, Button, // ... other components\n * });\n * ```\n */\nexport function rnReusablesDriver(slots: DriverSlots): DriverSlots {\n return slots;\n}\n\nexport type RnReusablesDriver = ReturnType<typeof rnReusablesDriver>;\n"],"mappings":"AAoBA,SAAgB,EAAkB,EAAiC,CACjE,OAAO"}
@@ -0,0 +1,13 @@
1
+ import { DriverSlots } from "../form-render.js";
2
+
3
+ //#region src/client/react/drivers/shadcn.d.ts
4
+
5
+ /**
6
+ * Create a shadcn/ui driver by mapping required slots to components.
7
+ * Host apps should import their shadcn primitives and pass them here.
8
+ */
9
+ declare function shadcnDriver(slots: DriverSlots): DriverSlots;
10
+ type ShadcnDriver = ReturnType<typeof shadcnDriver>;
11
+ //#endregion
12
+ export { ShadcnDriver, shadcnDriver };
13
+ //# sourceMappingURL=shadcn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadcn.d.ts","names":[],"sources":["../../../../src/client/react/drivers/shadcn.ts"],"sourcesContent":[],"mappings":";;;;;;AAMA;AAIA;iBAJgB,YAAA,QAAoB,cAAc;KAItC,YAAA,GAAe,kBAAkB"}
@@ -0,0 +1,2 @@
1
+ function e(e){return e}export{e as shadcnDriver};
2
+ //# sourceMappingURL=shadcn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadcn.js","names":[],"sources":["../../../../src/client/react/drivers/shadcn.ts"],"sourcesContent":["import type { DriverSlots } from '../form-render';\n\n/**\n * Create a shadcn/ui driver by mapping required slots to components.\n * Host apps should import their shadcn primitives and pass them here.\n */\nexport function shadcnDriver(slots: DriverSlots): DriverSlots {\n return slots;\n}\n\nexport type ShadcnDriver = ReturnType<typeof shadcnDriver>;\n"],"mappings":"AAMA,SAAgB,EAAa,EAAiC,CAC5D,OAAO"}
@@ -0,0 +1,21 @@
1
+ import { PresentationDescriptorV2, PresentationTarget, TransformEngine } from "../../presentations.v2.js";
2
+ import { FeatureModuleSpec, FeatureRegistry } from "../../features.js";
3
+ import React from "react";
4
+ import { BlockConfig } from "@blocknote/core";
5
+
6
+ //#region src/client/react/feature-render.d.ts
7
+ type ComponentMap = Record<string, React.ComponentType<any>>;
8
+ declare function createEngineWithDefaults(): TransformEngine;
9
+ declare function renderFeaturePresentation(engine: TransformEngine, target: PresentationTarget, desc: PresentationDescriptorV2, options?: {
10
+ componentMap?: ComponentMap;
11
+ reactProps?: Record<string, unknown>;
12
+ renderBlockNote?: (docJson: unknown, blockConfig?: BlockConfig) => React.ReactElement;
13
+ }): Promise<React.ReactElement | {
14
+ mimeType: string;
15
+ body: string;
16
+ } | null>;
17
+ declare function createFeatureModule(meta: FeatureModuleSpec['meta'], refs: Partial<Pick<FeatureModuleSpec, 'operations' | 'events' | 'presentations' | 'presentationsTargets'>>): FeatureModuleSpec;
18
+ declare function registerFeature(registry: FeatureRegistry, feature: FeatureModuleSpec): FeatureRegistry;
19
+ //#endregion
20
+ export { ComponentMap, createEngineWithDefaults, createFeatureModule, registerFeature, renderFeaturePresentation };
21
+ //# sourceMappingURL=feature-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-render.d.ts","names":[],"sources":["../../../src/client/react/feature-render.ts"],"sourcesContent":[],"mappings":";;;;;;KAaY,YAAA,GAAe,eAAe,KAAA,CAAM;iBAEhC,wBAAA,CAAA,GAA4B;AAFhC,iBAQU,yBAAA,CAR0B,MAArB,EASjB,eATuB,EAAA,MAAA,EAUvB,kBAVuB,EAAA,IAAA,EAWzB,wBAXyB,EAAA,OAUvB,CAVuB,EAAA;EAEjB,YAAA,CAAA,EAWG,YAXqB;EAMlB,UAAA,CAAA,EAML,MANK,CAAA,MAAA,EAAyB,OAAA,CAAA;EACrC,eAAA,CAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAQU,WARV,EAAA,GASD,KAAA,CAAM,YATL;CACA,CAAA,EAUP,OAVO,CAUC,KAAA,CAAM,YAVP,GAAA;EACF,QAAA,EAAA,MAAA;EAEW,IAAA,EAAA,MAAA;CACF,GAAA,IAAA,CAAA;AAGG,iBAkCJ,mBAAA,CAlCI,IAAA,EAmCZ,iBAnCY,CAAA,MAAA,CAAA,EAAA,IAAA,EAoCZ,OApCY,CAqChB,IArCgB,CAsCd,iBAtCc,EAAA,YAAA,GAAA,QAAA,GAAA,eAAA,GAAA,sBAAA,CAAA,CAAA,CAAA,EA0CjB,iBA1CiB;AACL,iBA6CC,eAAA,CA7CD,QAAA,EA8CH,eA9CG,EAAA,OAAA,EA+CJ,iBA/CI,CAAA,EA+Ca,eA/Cb"}
@@ -0,0 +1,2 @@
1
+ import{createDefaultTransformEngine as e,registerBasicValidation as t,registerDefaultReactRenderer as n}from"../../presentations.v2.js";import r from"react";function i(){return t(n(e()))}async function a(e,t,n,i){if(t===`react`){let t=await e.render(`react`,n);if(t.kind===`react_component`){let e=(i?.componentMap??{})[t.componentKey];if(!e)return null;let n={...t.props??{},...i?.reactProps??{}};return r.createElement(e,n)}return t.kind===`blocknotejs`?i?.renderBlockNote?i.renderBlockNote(t.docJson,t.blockConfig):r.createElement(`div`,{},`[BlockNote renderer not configured]`):null}return t===`markdown`||t===`application/json`||t===`application/xml`?e.render(t,n):null}function o(e,t){return{meta:e,...t}}function s(e,t){return e.register(t),e}export{i as createEngineWithDefaults,o as createFeatureModule,s as registerFeature,a as renderFeaturePresentation};
2
+ //# sourceMappingURL=feature-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-render.js","names":[],"sources":["../../../src/client/react/feature-render.ts"],"sourcesContent":["import React from 'react';\nimport {\n createDefaultTransformEngine,\n type PresentationDescriptorV2,\n type PresentationTarget,\n type ReactRenderDescriptor,\n registerBasicValidation,\n registerDefaultReactRenderer,\n TransformEngine,\n} from '../../presentations.v2';\nimport { type FeatureModuleSpec, FeatureRegistry } from '../../features';\nimport type { BlockConfig } from '@blocknote/core';\n\nexport type ComponentMap = Record<string, React.ComponentType<any>>;\n\nexport function createEngineWithDefaults(): TransformEngine {\n return registerBasicValidation(\n registerDefaultReactRenderer(createDefaultTransformEngine())\n );\n}\n\nexport async function renderFeaturePresentation(\n engine: TransformEngine,\n target: PresentationTarget,\n desc: PresentationDescriptorV2,\n options?: {\n componentMap?: ComponentMap;\n reactProps?: Record<string, unknown>;\n renderBlockNote?: (\n docJson: unknown,\n blockConfig?: BlockConfig\n ) => React.ReactElement;\n }\n): Promise<React.ReactElement | { mimeType: string; body: string } | null> {\n if (target === 'react') {\n const rd = await engine.render<ReactRenderDescriptor>('react', desc);\n if (rd.kind === 'react_component') {\n const map = options?.componentMap ?? {};\n const C = map[rd.componentKey];\n if (!C) return null;\n const merged = {\n ...(rd.props ?? {}),\n ...(options?.reactProps ?? {}),\n } as any;\n return React.createElement(C, merged);\n }\n if (rd.kind === 'blocknotejs') {\n if (options?.renderBlockNote)\n return options.renderBlockNote(rd.docJson, rd.blockConfig);\n return React.createElement(\n 'div',\n {},\n '[BlockNote renderer not configured]'\n );\n }\n return null;\n }\n // Non-react targets\n if (target === 'markdown') return engine.render(target, desc);\n if (target === 'application/json') return engine.render(target, desc);\n if (target === 'application/xml') return engine.render(target, desc);\n return null;\n}\n\nexport function createFeatureModule(\n meta: FeatureModuleSpec['meta'],\n refs: Partial<\n Pick<\n FeatureModuleSpec,\n 'operations' | 'events' | 'presentations' | 'presentationsTargets'\n >\n >\n): FeatureModuleSpec {\n return { meta, ...refs };\n}\n\nexport function registerFeature(\n registry: FeatureRegistry,\n feature: FeatureModuleSpec\n) {\n registry.register(feature);\n return registry;\n}\n"],"mappings":"6JAeA,SAAgB,GAA4C,CAC1D,OAAO,EACL,EAA6B,GAA8B,CAAC,CAC7D,CAGH,eAAsB,EACpB,EACA,EACA,EACA,EAQyE,CACzE,GAAI,IAAW,QAAS,CACtB,IAAM,EAAK,MAAM,EAAO,OAA8B,QAAS,EAAK,CACpE,GAAI,EAAG,OAAS,kBAAmB,CAEjC,IAAM,GADM,GAAS,cAAgB,EAAE,EACzB,EAAG,cACjB,GAAI,CAAC,EAAG,OAAO,KACf,IAAM,EAAS,CACb,GAAI,EAAG,OAAS,EAAE,CAClB,GAAI,GAAS,YAAc,EAAE,CAC9B,CACD,OAAO,EAAM,cAAc,EAAG,EAAO,CAWvC,OATI,EAAG,OAAS,cACV,GAAS,gBACJ,EAAQ,gBAAgB,EAAG,QAAS,EAAG,YAAY,CACrD,EAAM,cACX,MACA,EAAE,CACF,sCACD,CAEI,KAMT,OAHI,IAAW,YACX,IAAW,oBACX,IAAW,kBAA0B,EAAO,OAAO,EAAQ,EAAK,CAC7D,KAGT,SAAgB,EACd,EACA,EAMmB,CACnB,MAAO,CAAE,OAAM,GAAG,EAAM,CAG1B,SAAgB,EACd,EACA,EACA,CAEA,OADA,EAAS,SAAS,EAAQ,CACnB"}
@@ -0,0 +1,92 @@
1
+ import { FormOption, FormSpec, FormValuesFor } from "../../forms.js";
2
+ import React from "react";
3
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
+ import { AnySchemaModel } from "@lssm/lib.schema";
5
+
6
+ //#region src/client/react/form-render.d.ts
7
+ interface DriverSlots {
8
+ Field: React.ComponentType<React.PropsWithChildren<{
9
+ 'data-invalid'?: boolean;
10
+ hidden?: boolean;
11
+ disabled?: boolean;
12
+ }>>;
13
+ FieldLabel: React.ComponentType<React.PropsWithChildren<{
14
+ htmlFor?: string;
15
+ }>>;
16
+ FieldDescription: React.ComponentType<React.PropsWithChildren<{}>>;
17
+ FieldError: React.ComponentType<{
18
+ errors: {
19
+ message?: string;
20
+ }[];
21
+ }>;
22
+ FieldGroup?: React.ComponentType<React.PropsWithChildren<{
23
+ className?: string;
24
+ }>>;
25
+ FieldSet?: React.ComponentType<React.PropsWithChildren<{
26
+ className?: string;
27
+ }>>;
28
+ FieldLegend?: React.ComponentType<React.PropsWithChildren<{
29
+ variant?: 'label' | 'default';
30
+ }>>;
31
+ Input: React.ComponentType<React.InputHTMLAttributes<HTMLInputElement>>;
32
+ Textarea: React.ComponentType<React.TextareaHTMLAttributes<HTMLTextAreaElement>>;
33
+ Select: React.ComponentType<{
34
+ id?: string;
35
+ name?: string;
36
+ value?: unknown;
37
+ onChange?: (v: any) => void;
38
+ disabled?: boolean;
39
+ 'aria-invalid'?: boolean;
40
+ options: FormOption[];
41
+ } & Record<string, unknown>>;
42
+ Checkbox: React.ComponentType<{
43
+ id?: string;
44
+ name?: string;
45
+ checked?: boolean;
46
+ onCheckedChange?: (v: boolean) => void;
47
+ disabled?: boolean;
48
+ } & Record<string, unknown>>;
49
+ RadioGroup: React.ComponentType<{
50
+ id?: string;
51
+ name?: string;
52
+ value?: unknown;
53
+ onValueChange?: (v: any) => void;
54
+ disabled?: boolean;
55
+ options: FormOption[];
56
+ } & Record<string, unknown>>;
57
+ Switch: React.ComponentType<{
58
+ id?: string;
59
+ name?: string;
60
+ checked?: boolean;
61
+ onCheckedChange?: (v: boolean) => void;
62
+ disabled?: boolean;
63
+ } & Record<string, unknown>>;
64
+ Button: React.ComponentType<React.PropsWithChildren<{
65
+ type?: 'button' | 'submit' | 'reset';
66
+ variant?: string;
67
+ size?: string;
68
+ onClick?: () => void;
69
+ disabled?: boolean;
70
+ }>>;
71
+ }
72
+ type ResolverMap<TValues> = Record<string, (values: TValues, args?: any) => Promise<FormOption[]> | FormOption[]>;
73
+ type ComputationMap<TValues> = Record<string, (values: TValues) => any>;
74
+ interface CreateRendererOptions<TValues = any> {
75
+ driver: DriverSlots;
76
+ formOptions?: Record<string, unknown>;
77
+ onSubmitOverride?: (values: TValues, actionKey: string) => Promise<void> | void;
78
+ activeFlags?: string[];
79
+ resolvers?: ResolverMap<TValues>;
80
+ computations?: ComputationMap<TValues>;
81
+ unmountStrategy?: 'keep' | 'clear';
82
+ }
83
+ interface RenderOptions<TValues = any> {
84
+ defaultValues?: Partial<TValues>;
85
+ overrides?: Partial<CreateRendererOptions<TValues>>;
86
+ }
87
+ declare function createFormRenderer<M extends AnySchemaModel = AnySchemaModel>(base: CreateRendererOptions<FormValuesFor<M>>): {
88
+ render: (spec: FormSpec<M>, options?: RenderOptions<FormValuesFor<M>>) => react_jsx_runtime0.JSX.Element;
89
+ };
90
+ //#endregion
91
+ export { ComputationMap, CreateRendererOptions, DriverSlots, RenderOptions, ResolverMap, createFormRenderer };
92
+ //# sourceMappingURL=form-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-render.d.ts","names":[],"sources":["../../../src/client/react/form-render.tsx"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{buildZodWithRelations as e,evalPredicate as t}from"../../forms.js";import n,{useEffect as r,useMemo as i,useState as a}from"react";import{Controller as o,useFieldArray as s,useForm as c}from"react-hook-form";import{zodResolver as l}from"@hookform/resolvers/zod";import{Fragment as u,jsx as d,jsxs as f}from"react/jsx-runtime";function p(e){if(e)return Array.isArray(e)?{kind:`static`,options:e}:e}function m(e,t){if(!t)return;let n=t.replace(/\[(\d+)\]/g,`.$1`).split(`.`).filter(Boolean),r=e;for(let e of n){if(r==null)return;r=r[e]}return r}function h(e,t){if(!t||t.length===0)return`[]`;try{return JSON.stringify(t.map(t=>m(e,t)))}catch{return`[]`}}function g(e,t,n){let[o,s]=a([]);return r(()=>{let r=!0;return(async()=>{if(!t)return s([]);if(t.kind===`static`)return s([...t.options??[]]);let i=n?.[t.resolverKey];if(!i)return s([]);let a=await i(e,t.args);r&&s([...a??[]])})(),()=>{r=!1}},[i(()=>t?t.kind===`static`?JSON.stringify(t.options??[]):h(e,t.deps):`nil`,[t,e]),t&&t.resolverKey]),o}function _(e,t,n){if(!t)return e??``;let r=typeof n==`number`?`${t.replace(/^\$index$/,String(n))}`:t;return e?`${e}${typeof n==`number`?`.${n}`:``}.${r}`.replace(/\.+/g,`.`):r}function v(r){let a=r,{driver:m}=a;function h(r){let{spec:a,options:h,merged:v}=r,y=i(()=>e(a),[a]),b=c({...v.formOptions,resolver:l(y),defaultValues:h?.defaultValues}),x=b.watch(),S=(e,r,i)=>{let a=m.Field,s=m.FieldLabel,c=m.FieldDescription,l=m.FieldError,h=_(r,e.name,i),y=t(x,e.visibleWhen),w=t(x,e.enabledWhen),T=!!b.getFieldState(h)?.invalid;if(!y)return null;let E=h?.replace(/\./g,`-`),D={"data-invalid":T,hidden:!y,disabled:!w},O=e.labelI18n?d(s,{htmlFor:E,children:e.labelI18n}):null,k=e.descriptionI18n?d(c,{children:e.descriptionI18n}):null;if(e.kind===`group`){let t=e.fields.map((e,t)=>d(n.Fragment,{children:S(e,h,i)},`${h}-${t}`));return f(a,{...D,children:[O,t,k]})}return e.kind===`array`?C(e,r):d(o,{name:h,control:b.control,render:({field:t,fieldState:n})=>{let r=n.error?[n.error]:[],i=n.invalid||void 0;if(e.kind===`text`){let o=m.Input;return f(a,{...D,children:[O,d(o,{id:E,"aria-invalid":i,placeholder:e.placeholderI18n,autoComplete:e.autoComplete,inputMode:e.inputMode,maxLength:e.maxLength,minLength:e.minLength,disabled:!w,...t,...e.uiProps,keyboard:e.keyboard,autoComplete:e.keyboard?.autoComplete??e.autoComplete}),k,n.invalid?d(l,{errors:r}):null]})}if(e.kind===`textarea`){let o=m.Textarea;return f(a,{...D,children:[O,d(o,{id:E,"aria-invalid":i,placeholder:e.placeholderI18n,rows:e.rows,maxLength:e.maxLength,disabled:!w,...t,...e.uiProps,keyboard:e.keyboard,autoComplete:e.keyboard?.autoComplete??e.autoComplete}),k,n.invalid?d(l,{errors:r}):null]})}if(e.kind===`select`){let o=m.Select,s=g(x,p(e.options),v.resolvers);return f(a,{...D,children:[O,d(o,{id:E,name:h,"aria-invalid":i,disabled:!w,value:t.value,onChange:e=>t.onChange(e),options:s,...e.uiProps}),k,n.invalid?d(l,{errors:r}):null]})}if(e.kind===`checkbox`){let i=m.Checkbox;return f(a,{...D,children:[O,d(i,{id:E,name:h,disabled:!w,checked:!!t.value,onCheckedChange:e=>t.onChange(e),...e.uiProps}),k,n.invalid?d(l,{errors:r}):null]})}if(e.kind===`radio`){let i=m.RadioGroup,o=g(x,p(e.options),v.resolvers);return f(a,{...D,children:[O,d(i,{id:E,name:h,disabled:!w,value:t.value,onValueChange:e=>t.onChange(e),options:o,...e.uiProps}),k,n.invalid?d(l,{errors:r}):null]})}if(e.kind===`switch`){let i=m.Switch;return f(a,{...D,children:[O,d(i,{id:E,name:h,disabled:!w,checked:!!t.value,onCheckedChange:e=>t.onChange(e),...e.uiProps}),k,n.invalid?d(l,{errors:r}):null]})}return d(u,{})}},h)},C=(e,t)=>{let n=_(t,e.name),{fields:r,append:i,remove:a}=s({control:b.control,name:n}),o=e.max==null||r.length<e.max,c=t=>(e.min==null?r.length>0:r.length>e.min)&&t>=0,l=m.Button,u=m.FieldLabel;return f(`div`,{children:[e.labelI18n?d(u,{children:e.labelI18n}):null,r.map((t,r)=>f(`div`,{children:[S(e.of,n,r),c(r)?d(l,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>a(r),children:`Remove`}):null]},t.id??r)),o?d(l,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>i({}),children:`Add`}):null]},n)},w=async e=>{let t=a.actions?.[0]?.key??`submit`;if(v.onSubmitOverride)return v.onSubmitOverride(e,t)},T=m.Button;return f(`form`,{onSubmit:b.handleSubmit(w),children:[(a.fields||[]).map((e,t)=>d(n.Fragment,{children:S(e)},t)),a.actions&&a.actions.length?d(`div`,{children:a.actions.map(e=>d(T,{type:`submit`,children:e.labelI18n},e.key))}):null]})}return{render:(e,t)=>d(h,{spec:e,options:t,merged:{...a,...t?.overrides??{}}})}}export{v as createFormRenderer};
2
+ //# sourceMappingURL=form-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-render.js","names":["cur: any","Button"],"sources":["../../../src/client/react/form-render.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { Controller, useFieldArray, useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport type {\n ArrayFieldSpec,\n FieldSpec,\n FormOption,\n FormSpec,\n OptionsSource,\n FormValuesFor,\n} from '../../forms';\nimport { buildZodWithRelations, evalPredicate } from '../../forms';\nimport type { AnySchemaModel } from '@lssm/lib.schema';\n\n// Minimal, library-agnostic driver slots. Hosts can provide any UI lib via this interface.\nexport interface DriverSlots {\n Field: React.ComponentType<\n React.PropsWithChildren<{\n 'data-invalid'?: boolean;\n hidden?: boolean;\n disabled?: boolean;\n }>\n >;\n FieldLabel: React.ComponentType<\n React.PropsWithChildren<{ htmlFor?: string }>\n >;\n FieldDescription: React.ComponentType<React.PropsWithChildren<{}>>;\n FieldError: React.ComponentType<{ errors: { message?: string }[] }>;\n FieldGroup?: React.ComponentType<\n React.PropsWithChildren<{ className?: string }>\n >;\n FieldSet?: React.ComponentType<\n React.PropsWithChildren<{ className?: string }>\n >;\n FieldLegend?: React.ComponentType<\n React.PropsWithChildren<{ variant?: 'label' | 'default' }>\n >;\n\n Input: React.ComponentType<React.InputHTMLAttributes<HTMLInputElement>>;\n Textarea: React.ComponentType<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>\n >;\n // Select receives resolved options for simplicity\n Select: React.ComponentType<\n {\n id?: string;\n name?: string;\n value?: unknown;\n onChange?: (v: any) => void;\n disabled?: boolean;\n 'aria-invalid'?: boolean;\n options: FormOption[];\n } & Record<string, unknown>\n >;\n Checkbox: React.ComponentType<\n {\n id?: string;\n name?: string;\n checked?: boolean;\n onCheckedChange?: (v: boolean) => void;\n disabled?: boolean;\n } & Record<string, unknown>\n >;\n RadioGroup: React.ComponentType<\n {\n id?: string;\n name?: string;\n value?: unknown;\n onValueChange?: (v: any) => void;\n disabled?: boolean;\n options: FormOption[];\n } & Record<string, unknown>\n >;\n Switch: React.ComponentType<\n {\n id?: string;\n name?: string;\n checked?: boolean;\n onCheckedChange?: (v: boolean) => void;\n disabled?: boolean;\n } & Record<string, unknown>\n >;\n Button: React.ComponentType<\n React.PropsWithChildren<{\n type?: 'button' | 'submit' | 'reset';\n variant?: string;\n size?: string;\n onClick?: () => void;\n disabled?: boolean;\n }>\n >;\n}\n\nexport type ResolverMap<TValues> = Record<\n string,\n (values: TValues, args?: any) => Promise<FormOption[]> | FormOption[]\n>;\nexport type ComputationMap<TValues> = Record<string, (values: TValues) => any>;\n\nexport interface CreateRendererOptions<TValues = any> {\n driver: DriverSlots;\n formOptions?: Record<string, unknown>;\n onSubmitOverride?: (\n values: TValues,\n actionKey: string\n ) => Promise<void> | void;\n activeFlags?: string[];\n resolvers?: ResolverMap<TValues>;\n computations?: ComputationMap<TValues>;\n unmountStrategy?: 'keep' | 'clear';\n}\n\nexport interface RenderOptions<TValues = any> {\n defaultValues?: Partial<TValues>;\n overrides?: Partial<CreateRendererOptions<TValues>>;\n}\n\nfunction toOptionsArray(\n src: OptionsSource | FormOption[] | undefined\n): OptionsSource | undefined {\n if (!src) return undefined;\n if (Array.isArray(src)) return { kind: 'static', options: src };\n return src;\n}\n\nfunction getAtPath(values: unknown, path: string): unknown {\n if (!path) return undefined;\n const segs = path\n .replace(/\\[(\\d+)\\]/g, '.$1')\n .split('.')\n .filter(Boolean);\n let cur: any = values;\n for (const s of segs) {\n if (cur == null) return undefined;\n cur = cur[s as keyof typeof cur];\n }\n return cur;\n}\n\nfunction makeDepsKey(values: unknown, deps: string[] | undefined) {\n if (!deps || deps.length === 0) return '[]';\n try {\n return JSON.stringify(deps.map((d) => getAtPath(values, d)));\n } catch {\n return '[]';\n }\n}\n\nfunction useResolvedOptions<TValues>(\n values: TValues,\n source: OptionsSource | undefined,\n resolvers?: ResolverMap<TValues>\n): FormOption[] {\n const [opts, setOpts] = useState<FormOption[]>([]);\n const depKey = useMemo(() => {\n if (!source) return 'nil';\n if (source.kind === 'static') return JSON.stringify(source.options ?? []);\n return makeDepsKey(values, source.deps);\n }, [source, values]);\n\n useEffect(() => {\n let mounted = true;\n const run = async () => {\n if (!source) return setOpts([]);\n if (source.kind === 'static') return setOpts([...(source.options ?? [])]);\n const fn = resolvers?.[source.resolverKey];\n if (!fn) return setOpts([]);\n const res = await fn(values as any, source.args);\n if (mounted) setOpts([...(res ?? [])]);\n };\n run();\n return () => {\n mounted = false;\n };\n }, [depKey, source && (source as any).resolverKey]);\n return opts;\n}\n\nfunction fieldPath(\n parent: string | undefined,\n name?: string,\n arrayIndex?: number\n) {\n if (!name) return parent ?? '';\n const child =\n typeof arrayIndex === 'number'\n ? `${name.replace(/^\\$index$/, String(arrayIndex))}`\n : name;\n return parent\n ? `${parent}${typeof arrayIndex === 'number' ? `.${arrayIndex}` : ''}.${child}`.replace(\n /\\.+/g,\n '.'\n )\n : child;\n}\n\nexport function createFormRenderer<M extends AnySchemaModel = AnySchemaModel>(\n base: CreateRendererOptions<FormValuesFor<M>>\n) {\n const conf = base;\n const { driver } = conf;\n\n function InternalForm(props: {\n spec: FormSpec<M>;\n options?: RenderOptions<FormValuesFor<M>>;\n merged: CreateRendererOptions<FormValuesFor<M>>;\n }): React.ReactElement {\n const { spec, options, merged } = props;\n const baseZod = useMemo(() => buildZodWithRelations(spec), [spec]);\n const form = useForm<FormValuesFor<M>>({\n ...merged.formOptions,\n resolver: zodResolver(baseZod as any),\n defaultValues: options?.defaultValues as any,\n });\n\n const values = form.watch();\n\n const renderOne = (\n f: FieldSpec,\n parent?: string,\n arrayIndex?: number\n ): React.ReactElement | null => {\n const DriverField = driver.Field;\n const DriverLabel = driver.FieldLabel;\n const DriverDesc = driver.FieldDescription;\n const DriverError = driver.FieldError;\n const name = fieldPath(parent, f.name, arrayIndex);\n const visible = evalPredicate(values, f.visibleWhen);\n const enabled = evalPredicate(values, f.enabledWhen);\n const invalid = Boolean(form.getFieldState(name as any)?.invalid);\n\n if (!visible) return null;\n\n const id = name?.replace(/\\./g, '-');\n\n const commonWrapProps = {\n 'data-invalid': invalid,\n hidden: !visible,\n disabled: !enabled,\n } as any;\n const labelNode = f.labelI18n ? (\n <DriverLabel htmlFor={id}>{f.labelI18n}</DriverLabel>\n ) : null;\n const descNode = f.descriptionI18n ? (\n <DriverDesc>{f.descriptionI18n}</DriverDesc>\n ) : null;\n\n if (f.kind === 'group') {\n const children = f.fields.map((c: FieldSpec, i: number) => (\n <React.Fragment key={`${name}-${i}`}>\n {renderOne(c, name, arrayIndex)}\n </React.Fragment>\n ));\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n {children}\n {descNode}\n </DriverField>\n );\n }\n\n if (f.kind === 'array') {\n return renderArray(f as ArrayFieldSpec, parent);\n }\n\n // Leaf controls\n return (\n <Controller\n key={name}\n name={name as any}\n control={form.control}\n render={({ field, fieldState }) => {\n const err = fieldState.error ? [fieldState.error] : [];\n const ariaInvalid = fieldState.invalid || undefined;\n\n if (f.kind === 'text') {\n const Input = driver.Input;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Input\n id={id}\n aria-invalid={ariaInvalid}\n placeholder={f.placeholderI18n}\n autoComplete={(f as any).autoComplete as any}\n inputMode={(f as any).inputMode as any}\n maxLength={(f as any).maxLength as any}\n minLength={(f as any).minLength as any}\n disabled={!enabled}\n {...field}\n {...(f.uiProps as any)}\n // Pass keyboard/autocomplete hints down for adapters that support them\n {...({\n keyboard: (f as any).keyboard,\n autoComplete:\n (f as any).keyboard?.autoComplete ??\n (f as any).autoComplete,\n } as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'textarea') {\n const Textarea = driver.Textarea;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Textarea\n id={id}\n aria-invalid={ariaInvalid}\n placeholder={f.placeholderI18n}\n rows={(f as any).rows as any}\n maxLength={(f as any).maxLength as any}\n disabled={!enabled}\n {...field}\n {...(f.uiProps as any)}\n {...({\n keyboard: (f as any).keyboard,\n autoComplete:\n (f as any).keyboard?.autoComplete ??\n (f as any).autoComplete,\n } as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'select') {\n const Select = driver.Select;\n const src = toOptionsArray((f as any).options);\n const opts = useResolvedOptions(values, src, merged.resolvers);\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Select\n id={id}\n name={name}\n aria-invalid={ariaInvalid}\n disabled={!enabled}\n value={field.value}\n onChange={(v: any) => field.onChange(v)}\n options={opts}\n {...(f.uiProps as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'checkbox') {\n const Checkbox = driver.Checkbox;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Checkbox\n id={id}\n name={name}\n disabled={!enabled}\n checked={!!field.value}\n onCheckedChange={(v: boolean) => field.onChange(v)}\n {...(f.uiProps as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'radio') {\n const RadioGroup = driver.RadioGroup;\n const src = toOptionsArray((f as any).options);\n const opts = useResolvedOptions(values, src, merged.resolvers);\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <RadioGroup\n id={id}\n name={name}\n disabled={!enabled}\n value={field.value}\n onValueChange={(v: any) => field.onChange(v)}\n options={opts}\n {...(f.uiProps as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'switch') {\n const Switch = driver.Switch;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Switch\n id={id}\n name={name}\n disabled={!enabled}\n checked={!!field.value}\n onCheckedChange={(v: boolean) => field.onChange(v)}\n {...(f.uiProps as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n return <></>;\n }}\n />\n );\n };\n\n const renderArray = (f: ArrayFieldSpec, parent?: string) => {\n const name = fieldPath(parent, f.name);\n const { fields, append, remove } = useFieldArray({\n control: form.control as any,\n name: name as any,\n });\n const canAdd = f.max == null || fields.length < f.max;\n const canRemove = (idx: number) =>\n (f.min == null ? fields.length > 0 : fields.length > f.min) && idx >= 0;\n const Button = driver.Button;\n const Label = driver.FieldLabel;\n return (\n <div key={name}>\n {f.labelI18n ? <Label>{f.labelI18n}</Label> : null}\n {fields.map((row, idx) => (\n <div key={row.id ?? idx}>\n {renderOne(f.of as FieldSpec, name, idx)}\n {canRemove(idx) ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => remove(idx)}\n >\n Remove\n </Button>\n ) : null}\n </div>\n ))}\n {canAdd ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => append({})}\n >\n Add\n </Button>\n ) : null}\n </div>\n );\n };\n\n const onSubmit = async (data: FormValuesFor<M>) => {\n const actionKey = spec.actions?.[0]?.key ?? 'submit';\n if (merged.onSubmitOverride) {\n return merged.onSubmitOverride(data, actionKey);\n }\n // default: noop\n };\n\n const Button = driver.Button;\n return (\n <form onSubmit={form.handleSubmit(onSubmit)}>\n {(spec.fields || []).map((f: FieldSpec, i: number) => (\n <React.Fragment key={i}>{renderOne(f)}</React.Fragment>\n ))}\n {spec.actions && spec.actions.length ? (\n <div>\n {spec.actions.map((a: { key: string; labelI18n: string }) => (\n <Button key={a.key} type=\"submit\">\n {a.labelI18n}\n </Button>\n ))}\n </div>\n ) : null}\n </form>\n );\n }\n\n return {\n render: (spec: FormSpec<M>, options?: RenderOptions<FormValuesFor<M>>) => (\n <InternalForm\n spec={spec}\n options={options}\n merged={{\n ...conf,\n ...(options?.overrides ?? {}),\n }}\n />\n ),\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ComponentMap, createEngineWithDefaults, createFeatureModule, registerFeature, renderFeaturePresentation } from "./feature-render.js";
2
+ import { ComputationMap, CreateRendererOptions, DriverSlots, RenderOptions, ResolverMap, createFormRenderer } from "./form-render.js";
3
+ import { ShadcnDriver, shadcnDriver } from "./drivers/shadcn.js";
4
+ import { RnReusablesDriver, rnReusablesDriver } from "./drivers/rn-reusables.js";
5
+ export { ComponentMap, ComputationMap, CreateRendererOptions, DriverSlots, RenderOptions, ResolverMap, RnReusablesDriver, ShadcnDriver, createEngineWithDefaults, createFeatureModule, createFormRenderer, registerFeature, renderFeaturePresentation, rnReusablesDriver, shadcnDriver };
@@ -0,0 +1 @@
1
+ "use client";import{createEngineWithDefaults as e,createFeatureModule as t,registerFeature as n,renderFeaturePresentation as r}from"./feature-render.js";import{createFormRenderer as i}from"./form-render.js";import{shadcnDriver as a}from"./drivers/shadcn.js";import{rnReusablesDriver as o}from"./drivers/rn-reusables.js";export{e as createEngineWithDefaults,t as createFeatureModule,i as createFormRenderer,n as registerFeature,r as renderFeaturePresentation,o as rnReusablesDriver,a as shadcnDriver};
@@ -0,0 +1,16 @@
1
+ import { ResourceRegistry } from "./resources.js";
2
+
3
+ //#region src/contracts-adapter-hydration.d.ts
4
+ interface ReturnsDecl {
5
+ isList: boolean;
6
+ inner: string;
7
+ }
8
+ declare function parseReturns(returnsLike: string): ReturnsDecl;
9
+ declare function hydrateResourceIfNeeded(resources: ResourceRegistry | undefined, result: unknown, opts: {
10
+ template?: string;
11
+ varName?: string;
12
+ returns: ReturnsDecl;
13
+ }): Promise<unknown>;
14
+ //#endregion
15
+ export { ReturnsDecl, hydrateResourceIfNeeded, parseReturns };
16
+ //# sourceMappingURL=contracts-adapter-hydration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts-adapter-hydration.d.ts","names":[],"sources":["../src/contracts-adapter-hydration.ts"],"sourcesContent":[],"mappings":";;;UAEiB,WAAA;;EAAA,KAAA,EAAA,MAAA;AAKjB;AASsB,iBATN,YAAA,CAS6B,WAAA,EAAA,MAAA,CAAA,EATM,WASN;AAChC,iBADS,uBAAA,CACT,SAAA,EAAA,gBAAA,GAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA;EAE2C,QAAA,CAAA,EAAA,MAAA;EACrD,OAAA,CAAA,EAAA,MAAA;EAAO,OAAA,EAD8C,WAC9C;IAAP"}
@@ -0,0 +1,2 @@
1
+ function e(e){if(!e)return{isList:!1,inner:`JSON`};let t=String(e).trim();return t.startsWith(`[`)&&t.endsWith(`]`)?{isList:!0,inner:t.slice(1,-1).trim()}:{isList:!1,inner:t}}async function t(e,t,n){if(!e||!n.template)return t;let r=n.varName??`id`,i=async t=>{if(t&&t[r]!==void 0){let i=String(t[r]),a=n.template.replace(`{id}`,i),o=e.match(a);if(o){let e=await o.tmpl.resolve(o.params,{});try{return JSON.parse(String(e.data||`null`))}catch{return e.data}}}return t};return n.returns.isList&&Array.isArray(t)?await Promise.all(t.map(e=>i(e))):await i(t)}export{t as hydrateResourceIfNeeded,e as parseReturns};
2
+ //# sourceMappingURL=contracts-adapter-hydration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts-adapter-hydration.js","names":[],"sources":["../src/contracts-adapter-hydration.ts"],"sourcesContent":["import type { ResourceRegistry } from './resources';\n\nexport interface ReturnsDecl {\n isList: boolean;\n inner: string;\n}\n\nexport function parseReturns(returnsLike: string): ReturnsDecl {\n if (!returnsLike) return { isList: false, inner: 'JSON' };\n const trimmed = String(returnsLike).trim();\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n return { isList: true, inner: trimmed.slice(1, -1).trim() };\n }\n return { isList: false, inner: trimmed };\n}\n\nexport async function hydrateResourceIfNeeded(\n resources: ResourceRegistry | undefined,\n result: unknown,\n opts: { template?: string; varName?: string; returns: ReturnsDecl }\n): Promise<unknown> {\n if (!resources || !opts.template) return result;\n const varName = opts.varName ?? 'id';\n\n const hydrateOne = async (item: any) => {\n if (item && typeof item[varName] !== 'undefined') {\n const key = String(item[varName]);\n const uri = opts.template!.replace('{id}', key);\n const match = resources.match(uri);\n if (match) {\n const resolved = await match.tmpl.resolve(\n match.params as unknown as Record<string, string>,\n {}\n );\n try {\n return JSON.parse(String(resolved.data || 'null'));\n } catch {\n return resolved.data;\n }\n }\n }\n return item;\n };\n\n if (opts.returns.isList && Array.isArray(result)) {\n const hydrated = await Promise.all(result.map((x) => hydrateOne(x)));\n return hydrated;\n }\n return await hydrateOne(result as any);\n}\n"],"mappings":"AAOA,SAAgB,EAAa,EAAkC,CAC7D,GAAI,CAAC,EAAa,MAAO,CAAE,OAAQ,GAAO,MAAO,OAAQ,CACzD,IAAM,EAAU,OAAO,EAAY,CAAC,MAAM,CAI1C,OAHI,EAAQ,WAAW,IAAI,EAAI,EAAQ,SAAS,IAAI,CAC3C,CAAE,OAAQ,GAAM,MAAO,EAAQ,MAAM,EAAG,GAAG,CAAC,MAAM,CAAE,CAEtD,CAAE,OAAQ,GAAO,MAAO,EAAS,CAG1C,eAAsB,EACpB,EACA,EACA,EACkB,CAClB,GAAI,CAAC,GAAa,CAAC,EAAK,SAAU,OAAO,EACzC,IAAM,EAAU,EAAK,SAAW,KAE1B,EAAa,KAAO,IAAc,CACtC,GAAI,GAAe,EAAK,KAAa,OAAa,CAChD,IAAM,EAAM,OAAO,EAAK,GAAS,CAC3B,EAAM,EAAK,SAAU,QAAQ,OAAQ,EAAI,CACzC,EAAQ,EAAU,MAAM,EAAI,CAClC,GAAI,EAAO,CACT,IAAM,EAAW,MAAM,EAAM,KAAK,QAChC,EAAM,OACN,EAAE,CACH,CACD,GAAI,CACF,OAAO,KAAK,MAAM,OAAO,EAAS,MAAQ,OAAO,CAAC,MAC5C,CACN,OAAO,EAAS,OAItB,OAAO,GAOT,OAJI,EAAK,QAAQ,QAAU,MAAM,QAAQ,EAAO,CAC7B,MAAM,QAAQ,IAAI,EAAO,IAAK,GAAM,EAAW,EAAE,CAAC,CAAC,CAG/D,MAAM,EAAW,EAAc"}
@@ -0,0 +1,11 @@
1
+ import { SchemaTypes } from "@pothos/core";
2
+ import { AnySchemaModel } from "@lssm/lib.schema";
3
+
4
+ //#region src/contracts-adapter-input.d.ts
5
+ declare function isSchemaModel(x: unknown): x is AnySchemaModel;
6
+ declare function createInputTypeBuilder<T extends SchemaTypes>(builder: PothosSchemaTypes.SchemaBuilder<T>): {
7
+ buildInputFieldArgs: (model: AnySchemaModel | null) => null;
8
+ };
9
+ //#endregion
10
+ export { createInputTypeBuilder, isSchemaModel };
11
+ //# sourceMappingURL=contracts-adapter-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts-adapter-input.d.ts","names":[],"sources":["../src/contracts-adapter-input.ts"],"sourcesContent":[],"mappings":";;;;iBAOgB,aAAA,mBAAgC;iBAgChC,iCAAiC,sBACtC,iBAAA,CAAkB,cAAc;EAjC3B,mBAAa,EAAA,CAAA,KAAA,EA8HS,cA9HwB,GAAA,IAAA,EAAA,GAAA,IAAA;AAgC9D,CAAA"}
@@ -0,0 +1,2 @@
1
+ function e(e){return typeof e?.getPothosInput==`function`&&typeof e?.getZod==`function`}function t(e){return typeof e?.getPothos==`function`}function n(e){return typeof e?.getEnumValues==`function`&&typeof e?.getPothos==`function`}function r(e){return e===`Boolean_unsecure`?`Boolean`:e===`ID_unsecure`?`ID`:e===`String_unsecure`?`String`:e===`Int_unsecure`?`Int`:e===`Float_unsecure`?`Float`:e}function i(i){let a=new Map,o=new Set;function s(t){let r=Object.entries(t.config.fields);for(let[,t]of r)if(e(t.type))s(t.type);else if(n(t.type)){let e=t.type,n=e.getName?.()??e.getPothos().name;o.has(n)||(i.enumType(n,{values:e.getEnumValues()}),o.add(n))}}function c(n){let o=String(n.config?.name??`Input`),l=a.get(o);if(l)return l;s(n);let u=i.inputType(n.getPothosInput(),{fields:i=>{let a=Object.entries(n.config.fields),o={};for(let[n,s]of a)if(e(s.type)){let e=c(s.type),t=s.isArray?[e]:e;o[n]=i.field({type:t,required:!s.isOptional})}else if(t(s.type)){let e=r(String(s.type.getPothos().name)),t=s.isArray?[e]:e;o[n]=i.field({type:t,required:!s.isOptional})}else{let e=s.isArray?[`JSON`]:`JSON`;o[n]=i.field({type:e,required:!s.isOptional})}return o}});return a.set(o,u),u}function l(e){return!e||!e.config?.fields||Object.keys(e.config.fields).length===0?null:c(e)}return{buildInputFieldArgs:l}}export{i as createInputTypeBuilder,e as isSchemaModel};
2
+ //# sourceMappingURL=contracts-adapter-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts-adapter-input.js","names":["acc: Record<string, unknown>","typeName"],"sources":["../src/contracts-adapter-input.ts"],"sourcesContent":["import type {\n AnyEnumType,\n AnyFieldType,\n AnySchemaModel,\n} from '@lssm/lib.schema';\nimport type { SchemaTypes } from '@pothos/core';\n\nexport function isSchemaModel(x: unknown): x is AnySchemaModel {\n return (\n typeof (x as AnySchemaModel | undefined)?.getPothosInput === 'function' &&\n typeof (x as AnySchemaModel | undefined)?.getZod === 'function'\n );\n}\n\ninterface PothosNamed {\n getPothos: () => { name: string };\n}\nfunction isFieldType(\n x: unknown\n): x is AnyFieldType | AnyEnumType | PothosNamed {\n return typeof (x as { getPothos?: unknown })?.getPothos === 'function';\n}\n\nfunction isEnumType(x: unknown): x is AnyEnumType {\n return (\n typeof (x as { getEnumValues?: unknown })?.getEnumValues === 'function' &&\n typeof (x as { getPothos?: unknown })?.getPothos === 'function'\n );\n}\n\nfunction mapScalarName(name: string): string {\n if (name === 'Boolean_unsecure') return 'Boolean';\n if (name === 'ID_unsecure') return 'ID';\n if (name === 'String_unsecure') return 'String';\n if (name === 'Int_unsecure') return 'Int';\n if (name === 'Float_unsecure') return 'Float';\n return name;\n}\n\nexport function createInputTypeBuilder<T extends SchemaTypes>(\n builder: PothosSchemaTypes.SchemaBuilder<T>\n) {\n const inputTypeCache = new Map<string, unknown>();\n const enumTypeCache = new Set<string>();\n\n function registerEnumsForModel(model: AnySchemaModel) {\n const entries = Object.entries(model.config.fields) as [\n string,\n {\n type:\n | AnySchemaModel['config']['fields'][string]['type']\n | AnySchemaModel;\n isOptional: boolean;\n isArray?: boolean;\n },\n ][];\n for (const [, field] of entries) {\n if (isSchemaModel(field.type as unknown)) {\n registerEnumsForModel(field.type as unknown as AnySchemaModel);\n } else if (isEnumType((field as { type: unknown }).type)) {\n const enumObj = field.type as unknown as AnyEnumType;\n const name =\n (enumObj as { getName?: () => string }).getName?.() ??\n enumObj.getPothos().name;\n if (!enumTypeCache.has(name)) {\n builder.enumType(name as any, {\n values: enumObj.getEnumValues() as any,\n });\n enumTypeCache.add(name);\n }\n }\n }\n }\n\n function ensureInputTypeForModel(model: AnySchemaModel) {\n const typeName = String(model.config?.name ?? 'Input');\n const cached = inputTypeCache.get(typeName) as unknown;\n if (cached) return cached;\n // Pre-register any enum types used within this model (including nested models)\n registerEnumsForModel(model);\n const created = builder.inputType(model.getPothosInput(), {\n fields: (t) => {\n const entries = Object.entries(model.config.fields) as [\n string,\n {\n type:\n | AnySchemaModel['config']['fields'][string]['type']\n | AnySchemaModel;\n isOptional: boolean;\n isArray?: boolean;\n },\n ][];\n const acc: Record<string, unknown> = {};\n for (const [key, field] of entries) {\n if (isSchemaModel(field.type as unknown)) {\n const nested = ensureInputTypeForModel(\n field.type as unknown as AnySchemaModel\n );\n const typeRef = field.isArray\n ? ([nested] as never)\n : (nested as never);\n acc[key] = t.field({\n type: typeRef,\n required: !field.isOptional,\n });\n } else if (isFieldType((field as { type: unknown }).type)) {\n const typeName = mapScalarName(\n String((field.type as PothosNamed).getPothos().name)\n );\n const typeRef = field.isArray\n ? ([typeName] as never)\n : (typeName as never);\n acc[key] = t.field({\n type: typeRef,\n required: !field.isOptional,\n });\n } else {\n const typeRef = field.isArray\n ? (['JSON'] as never)\n : ('JSON' as never);\n acc[key] = t.field({\n type: typeRef,\n required: !field.isOptional,\n });\n }\n }\n return acc as never;\n },\n });\n inputTypeCache.set(typeName, created);\n return created;\n }\n\n function buildInputFieldArgs(model: AnySchemaModel | null) {\n if (!model) return null;\n if (\n !model.config?.fields ||\n Object.keys(model.config.fields).length === 0\n ) {\n return null;\n }\n const ref = ensureInputTypeForModel(model);\n return ref as never;\n }\n\n return { buildInputFieldArgs };\n}\n"],"mappings":"AAOA,SAAgB,EAAc,EAAiC,CAC7D,OACE,OAAQ,GAAkC,gBAAmB,YAC7D,OAAQ,GAAkC,QAAW,WAOzD,SAAS,EACP,EAC+C,CAC/C,OAAO,OAAQ,GAA+B,WAAc,WAG9D,SAAS,EAAW,EAA8B,CAChD,OACE,OAAQ,GAAmC,eAAkB,YAC7D,OAAQ,GAA+B,WAAc,WAIzD,SAAS,EAAc,EAAsB,CAM3C,OALI,IAAS,mBAA2B,UACpC,IAAS,cAAsB,KAC/B,IAAS,kBAA0B,SACnC,IAAS,eAAuB,MAChC,IAAS,iBAAyB,QAC/B,EAGT,SAAgB,EACd,EACA,CACA,IAAM,EAAiB,IAAI,IACrB,EAAgB,IAAI,IAE1B,SAAS,EAAsB,EAAuB,CACpD,IAAM,EAAU,OAAO,QAAQ,EAAM,OAAO,OAAO,CAUnD,IAAK,GAAM,EAAG,KAAU,EACtB,GAAI,EAAc,EAAM,KAAgB,CACtC,EAAsB,EAAM,KAAkC,SACrD,EAAY,EAA4B,KAAK,CAAE,CACxD,IAAM,EAAU,EAAM,KAChB,EACH,EAAuC,WAAW,EACnD,EAAQ,WAAW,CAAC,KACjB,EAAc,IAAI,EAAK,GAC1B,EAAQ,SAAS,EAAa,CAC5B,OAAQ,EAAQ,eAAe,CAChC,CAAC,CACF,EAAc,IAAI,EAAK,GAM/B,SAAS,EAAwB,EAAuB,CACtD,IAAM,EAAW,OAAO,EAAM,QAAQ,MAAQ,QAAQ,CAChD,EAAS,EAAe,IAAI,EAAS,CAC3C,GAAI,EAAQ,OAAO,EAEnB,EAAsB,EAAM,CAC5B,IAAM,EAAU,EAAQ,UAAU,EAAM,gBAAgB,CAAE,CACxD,OAAS,GAAM,CACb,IAAM,EAAU,OAAO,QAAQ,EAAM,OAAO,OAAO,CAU7CA,EAA+B,EAAE,CACvC,IAAK,GAAM,CAAC,EAAK,KAAU,EACzB,GAAI,EAAc,EAAM,KAAgB,CAAE,CACxC,IAAM,EAAS,EACb,EAAM,KACP,CACK,EAAU,EAAM,QACjB,CAAC,EAAO,CACR,EACL,EAAI,GAAO,EAAE,MAAM,CACjB,KAAM,EACN,SAAU,CAAC,EAAM,WAClB,CAAC,SACO,EAAa,EAA4B,KAAK,CAAE,CACzD,IAAMC,EAAW,EACf,OAAQ,EAAM,KAAqB,WAAW,CAAC,KAAK,CACrD,CACK,EAAU,EAAM,QACjB,CAACA,EAAS,CACVA,EACL,EAAI,GAAO,EAAE,MAAM,CACjB,KAAM,EACN,SAAU,CAAC,EAAM,WAClB,CAAC,KACG,CACL,IAAM,EAAU,EAAM,QACjB,CAAC,OAAO,CACR,OACL,EAAI,GAAO,EAAE,MAAM,CACjB,KAAM,EACN,SAAU,CAAC,EAAM,WAClB,CAAC,CAGN,OAAO,GAEV,CAAC,CAEF,OADA,EAAe,IAAI,EAAU,EAAQ,CAC9B,EAGT,SAAS,EAAoB,EAA8B,CASzD,MARI,CAAC,GAEH,CAAC,EAAM,QAAQ,QACf,OAAO,KAAK,EAAM,OAAO,OAAO,CAAC,SAAW,EAErC,KAEG,EAAwB,EAAM,CAI5C,MAAO,CAAE,sBAAqB"}
@@ -0,0 +1,40 @@
1
+ import { DataViewSpec } from "../data-views.js";
2
+
3
+ //#region src/data-views/query-generator.d.ts
4
+ interface DataViewQueryParams {
5
+ filters?: Record<string, any>;
6
+ sort?: {
7
+ field: string;
8
+ direction: 'asc' | 'desc';
9
+ };
10
+ pagination?: {
11
+ page: number;
12
+ pageSize: number;
13
+ };
14
+ search?: string;
15
+ }
16
+ interface DataViewQuery {
17
+ operationName: string;
18
+ input: Record<string, any>;
19
+ meta: {
20
+ pagination: {
21
+ page: number;
22
+ pageSize: number;
23
+ skip: number;
24
+ take: number;
25
+ };
26
+ sorting?: {
27
+ field: string;
28
+ direction: 'asc' | 'desc';
29
+ };
30
+ };
31
+ }
32
+ declare class DataViewQueryGenerator {
33
+ private spec;
34
+ constructor(spec: DataViewSpec);
35
+ generate(params: DataViewQueryParams): DataViewQuery;
36
+ validateParams(params: DataViewQueryParams): string[];
37
+ }
38
+ //#endregion
39
+ export { DataViewQuery, DataViewQueryGenerator, DataViewQueryParams };
40
+ //# sourceMappingURL=query-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-generator.d.ts","names":[],"sources":["../../src/data-views/query-generator.ts"],"sourcesContent":[],"mappings":";;;UAEiB,mBAAA;YACL;EADK,IAAA,CAAA,EAAA;IAOA,KAAA,EAAA,MAAa;IASjB,SAAA,EAAA,KAAA,GAAA,MAAsB;EACP,CAAA;EAET,UAAA,CAAA,EAAA;IAAsB,IAAA,EAAA,MAAA;IAiChB,QAAA,EAAA,MAAA;EAAmB,CAAA;;;UA7C3B,aAAA;;SAER;;;;;;;;;;;;;;cAOI,sBAAA;;oBACe;mBAET,sBAAsB;yBAiChB"}
@@ -0,0 +1,2 @@
1
+ var e=class{constructor(e){this.spec=e}generate(e){let{primary:t}=this.spec.source,n=e.pagination?.page??1,r=e.pagination?.pageSize??20,i=(n-1)*r,a=r,o={skip:i,take:a,...e.filters};return e.search&&(o.search=e.search),e.sort&&(o.orderBy={[e.sort.field]:e.sort.direction}),{operationName:t.name,input:o,meta:{pagination:{page:n,pageSize:r,skip:i,take:a},sorting:e.sort}}}validateParams(e){let t=[];if(e.filters&&this.spec.view.filters)for(let n of Object.keys(e.filters))this.spec.view.filters.find(e=>e.key===n)||t.push(`Unknown filter key: ${n}`);if(e.sort){let n=this.spec.view.fields.find(t=>t.key===e.sort.field);n?n.sortable===!1&&t.push(`Field is not sortable: ${e.sort.field}`):t.push(`Unknown sort field: ${e.sort.field}`)}return t}};export{e as DataViewQueryGenerator};
2
+ //# sourceMappingURL=query-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-generator.js","names":["spec: DataViewSpec","input: Record<string, any>","errors: string[]"],"sources":["../../src/data-views/query-generator.ts"],"sourcesContent":["import type { DataViewSpec } from '../data-views';\n\nexport interface DataViewQueryParams {\n filters?: Record<string, any>;\n sort?: { field: string; direction: 'asc' | 'desc' };\n pagination?: { page: number; pageSize: number };\n search?: string;\n}\n\nexport interface DataViewQuery {\n operationName: string;\n input: Record<string, any>;\n meta: {\n pagination: { page: number; pageSize: number; skip: number; take: number };\n sorting?: { field: string; direction: 'asc' | 'desc' };\n };\n}\n\nexport class DataViewQueryGenerator {\n constructor(private spec: DataViewSpec) {}\n\n generate(params: DataViewQueryParams): DataViewQuery {\n const { primary } = this.spec.source;\n const page = params.pagination?.page ?? 1;\n const pageSize = params.pagination?.pageSize ?? 20;\n const skip = (page - 1) * pageSize;\n const take = pageSize;\n\n const input: Record<string, any> = {\n skip,\n take,\n ...params.filters,\n };\n\n if (params.search) {\n input.search = params.search;\n }\n\n if (params.sort) {\n input.orderBy = {\n [params.sort.field]: params.sort.direction,\n };\n }\n\n return {\n operationName: primary.name,\n input,\n meta: {\n pagination: { page, pageSize, skip, take },\n sorting: params.sort,\n },\n };\n }\n\n validateParams(params: DataViewQueryParams): string[] {\n const errors: string[] = [];\n\n // Validate filters against spec\n if (params.filters && this.spec.view.filters) {\n for (const key of Object.keys(params.filters)) {\n const defined = this.spec.view.filters.find((f) => f.key === key);\n if (!defined) {\n errors.push(`Unknown filter key: ${key}`);\n }\n }\n }\n\n // Validate sort field\n if (params.sort) {\n const field = this.spec.view.fields.find(\n (f) => f.key === params.sort!.field\n );\n if (!field) {\n errors.push(`Unknown sort field: ${params.sort.field}`);\n } else if (field.sortable === false) {\n errors.push(`Field is not sortable: ${params.sort.field}`);\n }\n }\n\n return errors;\n }\n}\n"],"mappings":"AAkBA,IAAa,EAAb,KAAoC,CAClC,YAAY,EAA4B,CAApB,KAAA,KAAA,EAEpB,SAAS,EAA4C,CACnD,GAAM,CAAE,WAAY,KAAK,KAAK,OACxB,EAAO,EAAO,YAAY,MAAQ,EAClC,EAAW,EAAO,YAAY,UAAY,GAC1C,GAAQ,EAAO,GAAK,EACpB,EAAO,EAEPC,EAA6B,CACjC,OACA,OACA,GAAG,EAAO,QACX,CAYD,OAVI,EAAO,SACT,EAAM,OAAS,EAAO,QAGpB,EAAO,OACT,EAAM,QAAU,EACb,EAAO,KAAK,OAAQ,EAAO,KAAK,UAClC,EAGI,CACL,cAAe,EAAQ,KACvB,QACA,KAAM,CACJ,WAAY,CAAE,OAAM,WAAU,OAAM,OAAM,CAC1C,QAAS,EAAO,KACjB,CACF,CAGH,eAAe,EAAuC,CACpD,IAAMC,EAAmB,EAAE,CAG3B,GAAI,EAAO,SAAW,KAAK,KAAK,KAAK,YAC9B,IAAM,KAAO,OAAO,KAAK,EAAO,QAAQ,CAC3B,KAAK,KAAK,KAAK,QAAQ,KAAM,GAAM,EAAE,MAAQ,EAAI,EAE/D,EAAO,KAAK,uBAAuB,IAAM,CAM/C,GAAI,EAAO,KAAM,CACf,IAAM,EAAQ,KAAK,KAAK,KAAK,OAAO,KACjC,GAAM,EAAE,MAAQ,EAAO,KAAM,MAC/B,CACI,EAEM,EAAM,WAAa,IAC5B,EAAO,KAAK,0BAA0B,EAAO,KAAK,QAAQ,CAF1D,EAAO,KAAK,uBAAuB,EAAO,KAAK,QAAQ,CAM3D,OAAO"}
@@ -0,0 +1,27 @@
1
+ import { DataViewRegistry, DataViewSpec } from "../data-views.js";
2
+
3
+ //#region src/data-views/runtime.d.ts
4
+ interface DataViewRuntimeConfig {
5
+ registry: DataViewRegistry;
6
+ }
7
+ interface DataViewResult<T = any> {
8
+ data: T[];
9
+ total: number;
10
+ loading: boolean;
11
+ error?: Error;
12
+ }
13
+ declare class DataViewRuntime {
14
+ private config;
15
+ private cache;
16
+ private subscriptions;
17
+ constructor(config: DataViewRuntimeConfig);
18
+ register(spec: DataViewSpec): void;
19
+ getSpec(name: string, version?: number): DataViewSpec | undefined;
20
+ executeQuery(specName: string, params: any): Promise<DataViewResult>;
21
+ invalidate(specName: string): void;
22
+ subscribe(specName: string, callback: () => void): () => void;
23
+ private notifySubscribers;
24
+ }
25
+ //#endregion
26
+ export { DataViewResult, DataViewRuntime, DataViewRuntimeConfig };
27
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","names":[],"sources":["../../src/data-views/runtime.ts"],"sourcesContent":[],"mappings":";;;UAEiB,qBAAA;YACL;AADZ;AAKiB,UAAA,cAAc,CAAA,IACvB,GAGE,CAAA,CAAA;EAGG,IAAA,EANL,CAMK,EAAA;EAIiB,KAAA,EAAA,MAAA;EAEb,OAAA,EAAA,OAAA;EAIuB,KAAA,CAAA,EAb9B,KAa8B;;AAMa,cAhBxC,eAAA,CAgBwC;EAAO,QAAA,MAAA;;;sBAZ9B;iBAEb;2CAIuB;+CAMa,QAAQ"}
@@ -0,0 +1,2 @@
1
+ var e=class{cache=new Map;subscriptions=new Map;constructor(e){this.config=e}register(e){this.config.registry.register(e)}getSpec(e,t){return this.config.registry.get(e,t)}async executeQuery(e,t){if(!this.getSpec(e))throw Error(`DataView spec not found: ${e}`);return{data:[],total:0,loading:!1}}invalidate(e){this.cache.delete(e),this.notifySubscribers(e)}subscribe(e,t){return this.subscriptions.has(e)||this.subscriptions.set(e,new Set),this.subscriptions.get(e).add(t),()=>{this.subscriptions.get(e)?.delete(t)}}notifySubscribers(e){this.subscriptions.get(e)?.forEach(e=>e())}};export{e as DataViewRuntime};
2
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","names":["config: DataViewRuntimeConfig"],"sources":["../../src/data-views/runtime.ts"],"sourcesContent":["import { DataViewRegistry, type DataViewSpec } from '../data-views';\n\nexport interface DataViewRuntimeConfig {\n registry: DataViewRegistry;\n // eventBus?: EventBus; // To be integrated with actual bus implementation\n}\n\nexport interface DataViewResult<T = any> {\n data: T[];\n total: number;\n loading: boolean;\n error?: Error;\n}\n\nexport class DataViewRuntime {\n private cache = new Map<string, { data: any[]; timestamp: number }>();\n private subscriptions = new Map<string, Set<() => void>>();\n\n constructor(private config: DataViewRuntimeConfig) {}\n\n register(spec: DataViewSpec) {\n this.config.registry.register(spec);\n }\n\n getSpec(name: string, version?: number) {\n return this.config.registry.get(name, version);\n }\n\n // Simulating query execution for now as we don't have a full backend context here\n // In a real app, this would call the backend API via an adapter\n async executeQuery(specName: string, params: any): Promise<DataViewResult> {\n const spec = this.getSpec(specName);\n if (!spec) {\n throw new Error(`DataView spec not found: ${specName}`);\n }\n\n // TODO: Implement actual data fetching via Operation runtime\n // For now, return empty or cached data\n\n return {\n data: [],\n total: 0,\n loading: false,\n };\n }\n\n invalidate(specName: string) {\n this.cache.delete(specName);\n this.notifySubscribers(specName);\n }\n\n subscribe(specName: string, callback: () => void) {\n if (!this.subscriptions.has(specName)) {\n this.subscriptions.set(specName, new Set());\n }\n this.subscriptions.get(specName)!.add(callback);\n return () => {\n this.subscriptions.get(specName)?.delete(callback);\n };\n }\n\n private notifySubscribers(specName: string) {\n this.subscriptions.get(specName)?.forEach((cb) => cb());\n }\n}\n"],"mappings":"AAcA,IAAa,EAAb,KAA6B,CAC3B,MAAgB,IAAI,IACpB,cAAwB,IAAI,IAE5B,YAAY,EAAuC,CAA/B,KAAA,OAAA,EAEpB,SAAS,EAAoB,CAC3B,KAAK,OAAO,SAAS,SAAS,EAAK,CAGrC,QAAQ,EAAc,EAAkB,CACtC,OAAO,KAAK,OAAO,SAAS,IAAI,EAAM,EAAQ,CAKhD,MAAM,aAAa,EAAkB,EAAsC,CAEzE,GAAI,CADS,KAAK,QAAQ,EAAS,CAEjC,MAAU,MAAM,4BAA4B,IAAW,CAMzD,MAAO,CACL,KAAM,EAAE,CACR,MAAO,EACP,QAAS,GACV,CAGH,WAAW,EAAkB,CAC3B,KAAK,MAAM,OAAO,EAAS,CAC3B,KAAK,kBAAkB,EAAS,CAGlC,UAAU,EAAkB,EAAsB,CAKhD,OAJK,KAAK,cAAc,IAAI,EAAS,EACnC,KAAK,cAAc,IAAI,EAAU,IAAI,IAAM,CAE7C,KAAK,cAAc,IAAI,EAAS,CAAE,IAAI,EAAS,KAClC,CACX,KAAK,cAAc,IAAI,EAAS,EAAE,OAAO,EAAS,EAItD,kBAA0B,EAAkB,CAC1C,KAAK,cAAc,IAAI,EAAS,EAAE,QAAS,GAAO,GAAI,CAAC"}
@@ -0,0 +1,132 @@
1
+ import { OwnerShipMeta } from "./ownership.js";
2
+ import { ExperimentRef } from "./experiments/spec.js";
3
+ import { EventRef, OpRef, PresentationRef } from "./features.js";
4
+
5
+ //#region src/data-views.d.ts
6
+ type DataViewKind = 'list' | 'detail' | 'table' | 'grid';
7
+ interface DataViewMeta extends OwnerShipMeta {
8
+ /** Fully-qualified data view name (e.g., "sigil.spaces.admin_list"). */
9
+ name: string;
10
+ /** Version of this data view. Increment on breaking changes. */
11
+ version: number;
12
+ /** Canonical entity slug (e.g., "space", "resident"). */
13
+ entity: string;
14
+ }
15
+ interface DataViewSource {
16
+ /** Primary query used to fetch items for this view. */
17
+ primary: OpRef;
18
+ /** Optional operation used to fetch a single item (detail views). */
19
+ item?: OpRef;
20
+ /** Optional record mutation operations (used for inline editing or actions). */
21
+ mutations?: {
22
+ create?: OpRef;
23
+ update?: OpRef;
24
+ delete?: OpRef;
25
+ };
26
+ /** Events that should trigger refresh when emitted. */
27
+ refreshEvents?: EventRef[];
28
+ }
29
+ type DataViewFieldFormat = 'text' | 'number' | 'currency' | 'percentage' | 'date' | 'dateTime' | 'boolean' | 'badge';
30
+ interface DataViewField {
31
+ /** Unique identifier for the field within the view. */
32
+ key: string;
33
+ /** Human-friendly label for headers/tooltips. */
34
+ label: string;
35
+ /** Dot-path into the data item (e.g., "address.city"). */
36
+ dataPath: string;
37
+ /** Optional description surfaced in tooltips or docs. */
38
+ description?: string;
39
+ /** Optional formatting hint for renderers. */
40
+ format?: DataViewFieldFormat;
41
+ /** When true, the field can be used for sorting. */
42
+ sortable?: boolean;
43
+ /** When true, the field can be used for filtering. */
44
+ filterable?: boolean;
45
+ /** Optional width hint for table layouts. */
46
+ width?: 'auto' | 'xs' | 'sm' | 'md' | 'lg';
47
+ /** Optional presentation override (e.g., card component). */
48
+ presentation?: PresentationRef;
49
+ }
50
+ interface DataViewFilter {
51
+ key: string;
52
+ label: string;
53
+ field: string;
54
+ type: 'search' | 'enum' | 'number' | 'date' | 'boolean';
55
+ options?: {
56
+ value: string;
57
+ label: string;
58
+ }[];
59
+ }
60
+ interface DataViewAction {
61
+ key: string;
62
+ label: string;
63
+ kind: 'navigation' | 'operation';
64
+ /** Operation invoked when kind === 'operation'. */
65
+ operation?: OpRef;
66
+ /** Optional feature flag gating the action. */
67
+ requiresFlag?: string;
68
+ }
69
+ interface DataViewSections {
70
+ title?: string;
71
+ description?: string;
72
+ fields: string[];
73
+ }
74
+ interface DataViewBaseConfig {
75
+ kind: DataViewKind;
76
+ fields: DataViewField[];
77
+ primaryField?: string;
78
+ secondaryFields?: string[];
79
+ filters?: DataViewFilter[];
80
+ actions?: DataViewAction[];
81
+ }
82
+ interface DataViewListConfig extends DataViewBaseConfig {
83
+ kind: 'list';
84
+ layout?: 'card' | 'compact';
85
+ }
86
+ interface DataViewDetailConfig extends DataViewBaseConfig {
87
+ kind: 'detail';
88
+ sections?: DataViewSections[];
89
+ }
90
+ interface DataViewTableColumn {
91
+ field: string;
92
+ label?: string;
93
+ width?: 'auto' | 'xs' | 'sm' | 'md' | 'lg';
94
+ align?: 'left' | 'center' | 'right';
95
+ }
96
+ interface DataViewTableConfig extends DataViewBaseConfig {
97
+ kind: 'table';
98
+ columns?: DataViewTableColumn[];
99
+ rowSelectable?: boolean;
100
+ density?: 'comfortable' | 'compact';
101
+ }
102
+ interface DataViewGridConfig extends DataViewBaseConfig {
103
+ kind: 'grid';
104
+ columns?: number;
105
+ }
106
+ type DataViewConfig = DataViewListConfig | DataViewDetailConfig | DataViewTableConfig | DataViewGridConfig;
107
+ interface DataViewStates {
108
+ empty?: PresentationRef;
109
+ error?: PresentationRef;
110
+ loading?: PresentationRef;
111
+ }
112
+ interface DataViewSpec {
113
+ meta: DataViewMeta;
114
+ source: DataViewSource;
115
+ view: DataViewConfig;
116
+ states?: DataViewStates;
117
+ policy?: {
118
+ flags?: string[];
119
+ pii?: string[];
120
+ };
121
+ experiments?: ExperimentRef[];
122
+ }
123
+ declare class DataViewRegistry {
124
+ private readonly items;
125
+ register(spec: DataViewSpec): this;
126
+ list(): DataViewSpec[];
127
+ get(name: string, version?: number): DataViewSpec | undefined;
128
+ }
129
+ declare function dataViewKey(spec: DataViewSpec): string;
130
+ //#endregion
131
+ export { DataViewAction, DataViewBaseConfig, DataViewConfig, DataViewDetailConfig, DataViewField, DataViewFieldFormat, DataViewFilter, DataViewGridConfig, DataViewKind, DataViewListConfig, DataViewMeta, DataViewRegistry, DataViewSections, DataViewSource, DataViewSpec, DataViewStates, DataViewTableColumn, DataViewTableConfig, dataViewKey };
132
+ //# sourceMappingURL=data-views.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-views.d.ts","names":[],"sources":["../src/data-views.ts"],"sourcesContent":[],"mappings":";;;;;KAIY,YAAA;UAEK,YAAA,SAAqB;EAF1B;EAEK,IAAA,EAAA,MAAA;EASA;EAEN,OAAA,EAAA,MAAA;EAEF;EAGI,MAAA,EAAA,MAAA;;AAEA,UATI,cAAA,CASJ;EAGK;EAAQ,OAAA,EAVf,KAUe;EAGd;EAUK,IAAA,CAAA,EArBR,KAqBQ;EAqBA;EAQA,SAAA,CAAA,EAAA;IAUA,MAAA,CAAA,EAzDJ,KAyDI;IAMA,MAAA,CAAA,EA9DJ,KA8DI;IACT,MAAA,CAAA,EA9DK,KA8DL;EACE,CAAA;EAGE;EACA,aAAA,CAAA,EAhEM,QAgEN,EAAA;;AAGK,KAhEL,mBAAA,GAgEwB,MAAQ,GAAA,QAAA,GAAA,UAAkB,GAAA,YAAA,GAAA,MAAA,GAAA,UAAA,GAAA,SAAA,GAAA,OAAA;AAK7C,UA3DA,aAAA,CA2DqB;EAKrB;EAOA,GAAA,EAAA,MAAA;EAOA;EAKL,KAAA,EAAA,MAAA;EACR;EACA,QAAA,EAAA,MAAA;EACA;EACA,WAAA,CAAA,EAAA,MAAA;EAAkB;EAEL,MAAA,CAAA,EA/EN,mBA+EoB;EACrB;EACA,QAAA,CAAA,EAAA,OAAA;EACE;EAAe,UAAA,CAAA,EAAA,OAAA;EAGV;EACT,KAAA,CAAA,EAAA,MAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA;EACE;EACF,YAAA,CAAA,EAhFS,eAgFT;;AAGQ,UAhFC,cAAA,CAgFD;EAAa,GAAA,EAAA,MAAA;EAOhB,KAAA,EAAA,MAAA;EAGI,KAAA,EAAA,MAAA;EAOP,IAAA,EAAA,QAAA,GAAA,MAAA,GAAA,QAAA,GAAA,MAAA,GAAA,SAAA;EAI6B,OAAA,CAAA,EAAA;IAAY,KAAA,EAAA,MAAA;IAenC,KAAA,EAAA,MAAW;;;UA5GV,cAAA;;;;;cAKH;;;;UAKG,gBAAA;;;;;UAMA,kBAAA;QACT;UACE;;;YAGE;YACA;;UAGK,kBAAA,SAA2B;;;;UAK3B,oBAAA,SAA6B;;aAEjC;;UAGI,mBAAA;;;;;;UAOA,mBAAA,SAA4B;;YAEjC;;;;UAKK,kBAAA,SAA2B;;;;KAKhC,cAAA,GACR,qBACA,uBACA,sBACA;UAEa,cAAA;UACP;UACA;YACE;;UAGK,YAAA;QACT;UACE;QACF;WACG;;;;;gBAEK;;cAOH,gBAAA;;iBAGI;UAOP;uCAI6B;;iBAevB,WAAA,OAAkB"}
@@ -0,0 +1,2 @@
1
+ function e(e){return`${e.meta.name}.v${e.meta.version}`}var t=class{items=new Map;register(t){let n=e(t);if(this.items.has(n))throw Error(`Duplicate data view ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}};function n(t){return e(t)}export{t as DataViewRegistry,n as dataViewKey};
2
+ //# sourceMappingURL=data-views.js.map