@aglyn/aglyn 1.0.0-beta.143

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 (963) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +11 -0
  3. package/package.json +66 -0
  4. package/src/index.d.ts +25 -0
  5. package/src/index.js +26 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/aglyn.d.ts +31 -0
  8. package/src/lib/aglyn.js +114 -0
  9. package/src/lib/aglyn.js.map +1 -0
  10. package/src/lib/app-utils/abuse-report.d.ts +193 -0
  11. package/src/lib/app-utils/abuse-report.js +321 -0
  12. package/src/lib/app-utils/abuse-report.js.map +1 -0
  13. package/src/lib/app-utils/accept-negotiation.d.ts +129 -0
  14. package/src/lib/app-utils/accept-negotiation.js +266 -0
  15. package/src/lib/app-utils/accept-negotiation.js.map +1 -0
  16. package/src/lib/app-utils/account-emails.d.ts +263 -0
  17. package/src/lib/app-utils/account-emails.js +264 -0
  18. package/src/lib/app-utils/account-emails.js.map +1 -0
  19. package/src/lib/app-utils/actions.d.ts +717 -0
  20. package/src/lib/app-utils/actions.js +1031 -0
  21. package/src/lib/app-utils/actions.js.map +1 -0
  22. package/src/lib/app-utils/activity-presenter.d.ts +152 -0
  23. package/src/lib/app-utils/activity-presenter.js +326 -0
  24. package/src/lib/app-utils/activity-presenter.js.map +1 -0
  25. package/src/lib/app-utils/advertising-tag-mounts.d.ts +133 -0
  26. package/src/lib/app-utils/advertising-tag-mounts.js +118 -0
  27. package/src/lib/app-utils/advertising-tag-mounts.js.map +1 -0
  28. package/src/lib/app-utils/advertising-tags.d.ts +307 -0
  29. package/src/lib/app-utils/advertising-tags.js +525 -0
  30. package/src/lib/app-utils/advertising-tags.js.map +1 -0
  31. package/src/lib/app-utils/agent-api-catalog.d.ts +94 -0
  32. package/src/lib/app-utils/agent-api-catalog.js +106 -0
  33. package/src/lib/app-utils/agent-api-catalog.js.map +1 -0
  34. package/src/lib/app-utils/agent-openapi.d.ts +103 -0
  35. package/src/lib/app-utils/agent-openapi.js +1128 -0
  36. package/src/lib/app-utils/agent-openapi.js.map +1 -0
  37. package/src/lib/app-utils/analytics-beacon.d.ts +154 -0
  38. package/src/lib/app-utils/analytics-beacon.js +152 -0
  39. package/src/lib/app-utils/analytics-beacon.js.map +1 -0
  40. package/src/lib/app-utils/analytics-environment.d.ts +133 -0
  41. package/src/lib/app-utils/analytics-environment.js +152 -0
  42. package/src/lib/app-utils/analytics-environment.js.map +1 -0
  43. package/src/lib/app-utils/analytics-events.d.ts +744 -0
  44. package/src/lib/app-utils/analytics-events.js +650 -0
  45. package/src/lib/app-utils/analytics-events.js.map +1 -0
  46. package/src/lib/app-utils/analytics-link-clicks.d.ts +102 -0
  47. package/src/lib/app-utils/analytics-link-clicks.js +267 -0
  48. package/src/lib/app-utils/analytics-link-clicks.js.map +1 -0
  49. package/src/lib/app-utils/analytics-path-key.d.ts +46 -0
  50. package/src/lib/app-utils/analytics-path-key.js +46 -0
  51. package/src/lib/app-utils/analytics-path-key.js.map +1 -0
  52. package/src/lib/app-utils/api-adapter.d.ts +47 -0
  53. package/src/lib/app-utils/api-adapter.js +367 -0
  54. package/src/lib/app-utils/api-adapter.js.map +1 -0
  55. package/src/lib/app-utils/api-idempotency.d.ts +169 -0
  56. package/src/lib/app-utils/api-idempotency.js +213 -0
  57. package/src/lib/app-utils/api-idempotency.js.map +1 -0
  58. package/src/lib/app-utils/api-plugins.d.ts +210 -0
  59. package/src/lib/app-utils/api-plugins.js +221 -0
  60. package/src/lib/app-utils/api-plugins.js.map +1 -0
  61. package/src/lib/app-utils/assist-credits.d.ts +482 -0
  62. package/src/lib/app-utils/assist-credits.js +509 -0
  63. package/src/lib/app-utils/assist-credits.js.map +1 -0
  64. package/src/lib/app-utils/attribution-attribute.d.ts +34 -0
  65. package/src/lib/app-utils/attribution-attribute.js +34 -0
  66. package/src/lib/app-utils/attribution-attribute.js.map +1 -0
  67. package/src/lib/app-utils/attribution-guard.d.ts +130 -0
  68. package/src/lib/app-utils/attribution-guard.js +410 -0
  69. package/src/lib/app-utils/attribution-guard.js.map +1 -0
  70. package/src/lib/app-utils/author-css.d.ts +123 -0
  71. package/src/lib/app-utils/author-css.js +275 -0
  72. package/src/lib/app-utils/author-css.js.map +1 -0
  73. package/src/lib/app-utils/author-html-markdown.d.ts +31 -0
  74. package/src/lib/app-utils/author-html-markdown.js +497 -0
  75. package/src/lib/app-utils/author-html-markdown.js.map +1 -0
  76. package/src/lib/app-utils/author-html.d.ts +135 -0
  77. package/src/lib/app-utils/author-html.js +1037 -0
  78. package/src/lib/app-utils/author-html.js.map +1 -0
  79. package/src/lib/app-utils/automation-placeholders.d.ts +72 -0
  80. package/src/lib/app-utils/automation-placeholders.js +207 -0
  81. package/src/lib/app-utils/automation-placeholders.js.map +1 -0
  82. package/src/lib/app-utils/bandwidth-cap.d.ts +183 -0
  83. package/src/lib/app-utils/bandwidth-cap.js +193 -0
  84. package/src/lib/app-utils/bandwidth-cap.js.map +1 -0
  85. package/src/lib/app-utils/binding-token-catalog.d.ts +82 -0
  86. package/src/lib/app-utils/binding-token-catalog.js +293 -0
  87. package/src/lib/app-utils/binding-token-catalog.js.map +1 -0
  88. package/src/lib/app-utils/binding-tokens.d.ts +157 -0
  89. package/src/lib/app-utils/binding-tokens.js +251 -0
  90. package/src/lib/app-utils/binding-tokens.js.map +1 -0
  91. package/src/lib/app-utils/breadcrumb-json-ld.d.ts +57 -0
  92. package/src/lib/app-utils/breadcrumb-json-ld.js +67 -0
  93. package/src/lib/app-utils/breadcrumb-json-ld.js.map +1 -0
  94. package/src/lib/app-utils/campaign-attribution.d.ts +117 -0
  95. package/src/lib/app-utils/campaign-attribution.js +162 -0
  96. package/src/lib/app-utils/campaign-attribution.js.map +1 -0
  97. package/src/lib/app-utils/campaign-forwarding.d.ts +220 -0
  98. package/src/lib/app-utils/campaign-forwarding.js +332 -0
  99. package/src/lib/app-utils/campaign-forwarding.js.map +1 -0
  100. package/src/lib/app-utils/campaign-membership.d.ts +109 -0
  101. package/src/lib/app-utils/campaign-membership.js +176 -0
  102. package/src/lib/app-utils/campaign-membership.js.map +1 -0
  103. package/src/lib/app-utils/campaign-touch.d.ts +206 -0
  104. package/src/lib/app-utils/campaign-touch.js +326 -0
  105. package/src/lib/app-utils/campaign-touch.js.map +1 -0
  106. package/src/lib/app-utils/child-contract-compose.d.ts +28 -0
  107. package/src/lib/app-utils/child-contract-compose.js +140 -0
  108. package/src/lib/app-utils/child-contract-compose.js.map +1 -0
  109. package/src/lib/app-utils/child-contract.d.ts +129 -0
  110. package/src/lib/app-utils/child-contract.js +153 -0
  111. package/src/lib/app-utils/child-contract.js.map +1 -0
  112. package/src/lib/app-utils/collection-delete.d.ts +113 -0
  113. package/src/lib/app-utils/collection-delete.js +120 -0
  114. package/src/lib/app-utils/collection-delete.js.map +1 -0
  115. package/src/lib/app-utils/collection-entries.d.ts +833 -0
  116. package/src/lib/app-utils/collection-entries.js +1285 -0
  117. package/src/lib/app-utils/collection-entries.js.map +1 -0
  118. package/src/lib/app-utils/collection-entry-date.d.ts +129 -0
  119. package/src/lib/app-utils/collection-entry-date.js +183 -0
  120. package/src/lib/app-utils/collection-entry-date.js.map +1 -0
  121. package/src/lib/app-utils/collection-kind.d.ts +55 -0
  122. package/src/lib/app-utils/collection-kind.js +69 -0
  123. package/src/lib/app-utils/collection-kind.js.map +1 -0
  124. package/src/lib/app-utils/collection-slug.d.ts +79 -0
  125. package/src/lib/app-utils/collection-slug.js +70 -0
  126. package/src/lib/app-utils/collection-slug.js.map +1 -0
  127. package/src/lib/app-utils/compose-layout-nodes.d.ts +147 -0
  128. package/src/lib/app-utils/compose-layout-nodes.js +261 -0
  129. package/src/lib/app-utils/compose-layout-nodes.js.map +1 -0
  130. package/src/lib/app-utils/compose-layout-props.d.ts +71 -0
  131. package/src/lib/app-utils/compose-layout-props.js +61 -0
  132. package/src/lib/app-utils/compose-layout-props.js.map +1 -0
  133. package/src/lib/app-utils/compose-reusable-components.d.ts +504 -0
  134. package/src/lib/app-utils/compose-reusable-components.js +1366 -0
  135. package/src/lib/app-utils/compose-reusable-components.js.map +1 -0
  136. package/src/lib/app-utils/compress.d.ts +35 -0
  137. package/src/lib/app-utils/compress.js +38 -0
  138. package/src/lib/app-utils/compress.js.map +1 -0
  139. package/src/lib/app-utils/consent-banner-ui.d.ts +226 -0
  140. package/src/lib/app-utils/consent-banner-ui.js +583 -0
  141. package/src/lib/app-utils/consent-banner-ui.js.map +1 -0
  142. package/src/lib/app-utils/consent-groups.d.ts +189 -0
  143. package/src/lib/app-utils/consent-groups.js +219 -0
  144. package/src/lib/app-utils/consent-groups.js.map +1 -0
  145. package/src/lib/app-utils/consent-preferences-dialog.d.ts +58 -0
  146. package/src/lib/app-utils/consent-preferences-dialog.js +106 -0
  147. package/src/lib/app-utils/consent-preferences-dialog.js.map +1 -0
  148. package/src/lib/app-utils/console-record-links.d.ts +163 -0
  149. package/src/lib/app-utils/console-record-links.js +178 -0
  150. package/src/lib/app-utils/console-record-links.js.map +1 -0
  151. package/src/lib/app-utils/console-routes.d.ts +658 -0
  152. package/src/lib/app-utils/console-routes.js +489 -0
  153. package/src/lib/app-utils/console-routes.js.map +1 -0
  154. package/src/lib/app-utils/console-widget-slot-context.d.ts +46 -0
  155. package/src/lib/app-utils/console-widget-slot-context.js +23 -0
  156. package/src/lib/app-utils/console-widget-slot-context.js.map +1 -0
  157. package/src/lib/app-utils/contact-custom-fields.d.ts +191 -0
  158. package/src/lib/app-utils/contact-custom-fields.js +349 -0
  159. package/src/lib/app-utils/contact-custom-fields.js.map +1 -0
  160. package/src/lib/app-utils/contact-holder.d.ts +52 -0
  161. package/src/lib/app-utils/contact-holder.js +98 -0
  162. package/src/lib/app-utils/contact-holder.js.map +1 -0
  163. package/src/lib/app-utils/contact-merge.d.ts +136 -0
  164. package/src/lib/app-utils/contact-merge.js +379 -0
  165. package/src/lib/app-utils/contact-merge.js.map +1 -0
  166. package/src/lib/app-utils/contacts.d.ts +554 -0
  167. package/src/lib/app-utils/contacts.js +401 -0
  168. package/src/lib/app-utils/contacts.js.map +1 -0
  169. package/src/lib/app-utils/content-author-profile.d.ts +68 -0
  170. package/src/lib/app-utils/content-author-profile.js +118 -0
  171. package/src/lib/app-utils/content-author-profile.js.map +1 -0
  172. package/src/lib/app-utils/content-authors.d.ts +662 -0
  173. package/src/lib/app-utils/content-authors.js +771 -0
  174. package/src/lib/app-utils/content-authors.js.map +1 -0
  175. package/src/lib/app-utils/content-schema-type.d.ts +81 -0
  176. package/src/lib/app-utils/content-schema-type.js +87 -0
  177. package/src/lib/app-utils/content-schema-type.js.map +1 -0
  178. package/src/lib/app-utils/contexts.d.ts +35 -0
  179. package/src/lib/app-utils/contexts.js +35 -0
  180. package/src/lib/app-utils/contexts.js.map +1 -0
  181. package/src/lib/app-utils/create-resource-uid.d.ts +18 -0
  182. package/src/lib/app-utils/create-resource-uid.js +23 -0
  183. package/src/lib/app-utils/create-resource-uid.js.map +1 -0
  184. package/src/lib/app-utils/crm-booking.d.ts +75 -0
  185. package/src/lib/app-utils/crm-booking.js +133 -0
  186. package/src/lib/app-utils/crm-booking.js.map +1 -0
  187. package/src/lib/app-utils/crm-csv.d.ts +232 -0
  188. package/src/lib/app-utils/crm-csv.js +432 -0
  189. package/src/lib/app-utils/crm-csv.js.map +1 -0
  190. package/src/lib/app-utils/crm-digest.d.ts +179 -0
  191. package/src/lib/app-utils/crm-digest.js +271 -0
  192. package/src/lib/app-utils/crm-digest.js.map +1 -0
  193. package/src/lib/app-utils/crm-email-templates.d.ts +172 -0
  194. package/src/lib/app-utils/crm-email-templates.js +382 -0
  195. package/src/lib/app-utils/crm-email-templates.js.map +1 -0
  196. package/src/lib/app-utils/crm-inbound.d.ts +245 -0
  197. package/src/lib/app-utils/crm-inbound.js +407 -0
  198. package/src/lib/app-utils/crm-inbound.js.map +1 -0
  199. package/src/lib/app-utils/crm-kinds.d.ts +73 -0
  200. package/src/lib/app-utils/crm-kinds.js +92 -0
  201. package/src/lib/app-utils/crm-kinds.js.map +1 -0
  202. package/src/lib/app-utils/crm-next-activity.d.ts +107 -0
  203. package/src/lib/app-utils/crm-next-activity.js +140 -0
  204. package/src/lib/app-utils/crm-next-activity.js.map +1 -0
  205. package/src/lib/app-utils/crm-reports.d.ts +479 -0
  206. package/src/lib/app-utils/crm-reports.js +680 -0
  207. package/src/lib/app-utils/crm-reports.js.map +1 -0
  208. package/src/lib/app-utils/crm-task-reminders.d.ts +129 -0
  209. package/src/lib/app-utils/crm-task-reminders.js +139 -0
  210. package/src/lib/app-utils/crm-task-reminders.js.map +1 -0
  211. package/src/lib/app-utils/crm.d.ts +1546 -0
  212. package/src/lib/app-utils/crm.js +1814 -0
  213. package/src/lib/app-utils/crm.js.map +1 -0
  214. package/src/lib/app-utils/csp-report.d.ts +84 -0
  215. package/src/lib/app-utils/csp-report.js +177 -0
  216. package/src/lib/app-utils/csp-report.js.map +1 -0
  217. package/src/lib/app-utils/csv-import.d.ts +192 -0
  218. package/src/lib/app-utils/csv-import.js +279 -0
  219. package/src/lib/app-utils/csv-import.js.map +1 -0
  220. package/src/lib/app-utils/dataset-csv.d.ts +109 -0
  221. package/src/lib/app-utils/dataset-csv.js +235 -0
  222. package/src/lib/app-utils/dataset-csv.js.map +1 -0
  223. package/src/lib/app-utils/dataset-models.d.ts +194 -0
  224. package/src/lib/app-utils/dataset-models.js +409 -0
  225. package/src/lib/app-utils/dataset-models.js.map +1 -0
  226. package/src/lib/app-utils/dataset-query.d.ts +57 -0
  227. package/src/lib/app-utils/dataset-query.js +126 -0
  228. package/src/lib/app-utils/dataset-query.js.map +1 -0
  229. package/src/lib/app-utils/datasets.d.ts +136 -0
  230. package/src/lib/app-utils/datasets.js +177 -0
  231. package/src/lib/app-utils/datasets.js.map +1 -0
  232. package/src/lib/app-utils/decompress.d.ts +36 -0
  233. package/src/lib/app-utils/decompress.js +32 -0
  234. package/src/lib/app-utils/decompress.js.map +1 -0
  235. package/src/lib/app-utils/dedicated-sending-domain.d.ts +47 -0
  236. package/src/lib/app-utils/dedicated-sending-domain.js +114 -0
  237. package/src/lib/app-utils/dedicated-sending-domain.js.map +1 -0
  238. package/src/lib/app-utils/deferred-image.d.ts +86 -0
  239. package/src/lib/app-utils/deferred-image.js +83 -0
  240. package/src/lib/app-utils/deferred-image.js.map +1 -0
  241. package/src/lib/app-utils/definition-canvas-tree.d.ts +61 -0
  242. package/src/lib/app-utils/definition-canvas-tree.js +126 -0
  243. package/src/lib/app-utils/definition-canvas-tree.js.map +1 -0
  244. package/src/lib/app-utils/deployment-shape.d.ts +167 -0
  245. package/src/lib/app-utils/deployment-shape.js +238 -0
  246. package/src/lib/app-utils/deployment-shape.js.map +1 -0
  247. package/src/lib/app-utils/detect-template-placeholders.d.ts +30 -0
  248. package/src/lib/app-utils/detect-template-placeholders.js +53 -0
  249. package/src/lib/app-utils/detect-template-placeholders.js.map +1 -0
  250. package/src/lib/app-utils/dmca-counter-notice.d.ts +185 -0
  251. package/src/lib/app-utils/dmca-counter-notice.js +277 -0
  252. package/src/lib/app-utils/dmca-counter-notice.js.map +1 -0
  253. package/src/lib/app-utils/docs-deflection.d.ts +156 -0
  254. package/src/lib/app-utils/docs-deflection.js +547 -0
  255. package/src/lib/app-utils/docs-deflection.js.map +1 -0
  256. package/src/lib/app-utils/docs-help.d.ts +57 -0
  257. package/src/lib/app-utils/docs-help.generated.d.ts +303 -0
  258. package/src/lib/app-utils/docs-help.generated.js +867 -0
  259. package/src/lib/app-utils/docs-help.generated.js.map +1 -0
  260. package/src/lib/app-utils/docs-help.js +46 -0
  261. package/src/lib/app-utils/docs-help.js.map +1 -0
  262. package/src/lib/app-utils/docs-index.generated.d.ts +29 -0
  263. package/src/lib/app-utils/docs-index.generated.js +8388 -0
  264. package/src/lib/app-utils/docs-index.generated.js.map +1 -0
  265. package/src/lib/app-utils/docs-retrieval.d.ts +67 -0
  266. package/src/lib/app-utils/docs-retrieval.js +188 -0
  267. package/src/lib/app-utils/docs-retrieval.js.map +1 -0
  268. package/src/lib/app-utils/document-landmark.d.ts +50 -0
  269. package/src/lib/app-utils/document-landmark.js +100 -0
  270. package/src/lib/app-utils/document-landmark.js.map +1 -0
  271. package/src/lib/app-utils/duplicate-resource.d.ts +101 -0
  272. package/src/lib/app-utils/duplicate-resource.js +206 -0
  273. package/src/lib/app-utils/duplicate-resource.js.map +1 -0
  274. package/src/lib/app-utils/dynamic-list-rule.d.ts +471 -0
  275. package/src/lib/app-utils/dynamic-list-rule.js +914 -0
  276. package/src/lib/app-utils/dynamic-list-rule.js.map +1 -0
  277. package/src/lib/app-utils/element-animation.d.ts +200 -0
  278. package/src/lib/app-utils/element-animation.js +233 -0
  279. package/src/lib/app-utils/element-animation.js.map +1 -0
  280. package/src/lib/app-utils/element-hidden-style.d.ts +46 -0
  281. package/src/lib/app-utils/element-hidden-style.js +48 -0
  282. package/src/lib/app-utils/element-hidden-style.js.map +1 -0
  283. package/src/lib/app-utils/element-ui.d.ts +243 -0
  284. package/src/lib/app-utils/element-ui.js +459 -0
  285. package/src/lib/app-utils/element-ui.js.map +1 -0
  286. package/src/lib/app-utils/email-starter-policy.d.ts +160 -0
  287. package/src/lib/app-utils/email-starter-policy.js +327 -0
  288. package/src/lib/app-utils/email-starter-policy.js.map +1 -0
  289. package/src/lib/app-utils/email-topics.d.ts +310 -0
  290. package/src/lib/app-utils/email-topics.js +336 -0
  291. package/src/lib/app-utils/email-topics.js.map +1 -0
  292. package/src/lib/app-utils/enabled-plugins-context.d.ts +100 -0
  293. package/src/lib/app-utils/enabled-plugins-context.js +113 -0
  294. package/src/lib/app-utils/enabled-plugins-context.js.map +1 -0
  295. package/src/lib/app-utils/ensure-canvas-root.d.ts +38 -0
  296. package/src/lib/app-utils/ensure-canvas-root.js +61 -0
  297. package/src/lib/app-utils/ensure-canvas-root.js.map +1 -0
  298. package/src/lib/app-utils/entity-picker-context.d.ts +199 -0
  299. package/src/lib/app-utils/entity-picker-context.js +93 -0
  300. package/src/lib/app-utils/entity-picker-context.js.map +1 -0
  301. package/src/lib/app-utils/error-beacon.d.ts +107 -0
  302. package/src/lib/app-utils/error-beacon.js +296 -0
  303. package/src/lib/app-utils/error-beacon.js.map +1 -0
  304. package/src/lib/app-utils/expand-repeatables.d.ts +172 -0
  305. package/src/lib/app-utils/expand-repeatables.js +299 -0
  306. package/src/lib/app-utils/expand-repeatables.js.map +1 -0
  307. package/src/lib/app-utils/foreign-script.d.ts +82 -0
  308. package/src/lib/app-utils/foreign-script.js +102 -0
  309. package/src/lib/app-utils/foreign-script.js.map +1 -0
  310. package/src/lib/app-utils/form-abuse-ceiling.d.ts +146 -0
  311. package/src/lib/app-utils/form-abuse-ceiling.js +158 -0
  312. package/src/lib/app-utils/form-abuse-ceiling.js.map +1 -0
  313. package/src/lib/app-utils/form-contract.d.ts +198 -0
  314. package/src/lib/app-utils/form-contract.js +282 -0
  315. package/src/lib/app-utils/form-contract.js.map +1 -0
  316. package/src/lib/app-utils/form-dataset-binding.d.ts +50 -0
  317. package/src/lib/app-utils/form-dataset-binding.js +74 -0
  318. package/src/lib/app-utils/form-dataset-binding.js.map +1 -0
  319. package/src/lib/app-utils/forms.d.ts +727 -0
  320. package/src/lib/app-utils/forms.js +777 -0
  321. package/src/lib/app-utils/forms.js.map +1 -0
  322. package/src/lib/app-utils/functions.d.ts +188 -0
  323. package/src/lib/app-utils/functions.js +529 -0
  324. package/src/lib/app-utils/functions.js.map +1 -0
  325. package/src/lib/app-utils/guarded-version-save.d.ts +91 -0
  326. package/src/lib/app-utils/guarded-version-save.js +131 -0
  327. package/src/lib/app-utils/guarded-version-save.js.map +1 -0
  328. package/src/lib/app-utils/health-report.d.ts +1766 -0
  329. package/src/lib/app-utils/health-report.js +2072 -0
  330. package/src/lib/app-utils/health-report.js.map +1 -0
  331. package/src/lib/app-utils/host-naming.d.ts +135 -0
  332. package/src/lib/app-utils/host-naming.js +188 -0
  333. package/src/lib/app-utils/host-naming.js.map +1 -0
  334. package/src/lib/app-utils/host-permissions.d.ts +76 -0
  335. package/src/lib/app-utils/host-permissions.js +119 -0
  336. package/src/lib/app-utils/host-permissions.js.map +1 -0
  337. package/src/lib/app-utils/host-tokens.d.ts +228 -0
  338. package/src/lib/app-utils/host-tokens.js +304 -0
  339. package/src/lib/app-utils/host-tokens.js.map +1 -0
  340. package/src/lib/app-utils/idp-profile.d.ts +83 -0
  341. package/src/lib/app-utils/idp-profile.js +268 -0
  342. package/src/lib/app-utils/idp-profile.js.map +1 -0
  343. package/src/lib/app-utils/image-upload-types.d.ts +49 -0
  344. package/src/lib/app-utils/image-upload-types.js +86 -0
  345. package/src/lib/app-utils/image-upload-types.js.map +1 -0
  346. package/src/lib/app-utils/index.d.ts +18 -0
  347. package/src/lib/app-utils/index.js +23 -0
  348. package/src/lib/app-utils/index.js.map +1 -0
  349. package/src/lib/app-utils/internal-traffic.d.ts +197 -0
  350. package/src/lib/app-utils/internal-traffic.js +288 -0
  351. package/src/lib/app-utils/internal-traffic.js.map +1 -0
  352. package/src/lib/app-utils/lineal-order.d.ts +62 -0
  353. package/src/lib/app-utils/lineal-order.js +65 -0
  354. package/src/lib/app-utils/lineal-order.js.map +1 -0
  355. package/src/lib/app-utils/link-references.d.ts +36 -0
  356. package/src/lib/app-utils/link-references.js +89 -0
  357. package/src/lib/app-utils/link-references.js.map +1 -0
  358. package/src/lib/app-utils/link-target-search-context.d.ts +123 -0
  359. package/src/lib/app-utils/link-target-search-context.js +221 -0
  360. package/src/lib/app-utils/link-target-search-context.js.map +1 -0
  361. package/src/lib/app-utils/list-assignment-policy.d.ts +169 -0
  362. package/src/lib/app-utils/list-assignment-policy.js +170 -0
  363. package/src/lib/app-utils/list-assignment-policy.js.map +1 -0
  364. package/src/lib/app-utils/list-import.d.ts +158 -0
  365. package/src/lib/app-utils/list-import.js +332 -0
  366. package/src/lib/app-utils/list-import.js.map +1 -0
  367. package/src/lib/app-utils/llms-txt.d.ts +104 -0
  368. package/src/lib/app-utils/llms-txt.js +144 -0
  369. package/src/lib/app-utils/llms-txt.js.map +1 -0
  370. package/src/lib/app-utils/local-storage-budget.d.ts +75 -0
  371. package/src/lib/app-utils/local-storage-budget.js +153 -0
  372. package/src/lib/app-utils/local-storage-budget.js.map +1 -0
  373. package/src/lib/app-utils/lockdown.d.ts +698 -0
  374. package/src/lib/app-utils/lockdown.js +929 -0
  375. package/src/lib/app-utils/lockdown.js.map +1 -0
  376. package/src/lib/app-utils/margin-utilization.d.ts +267 -0
  377. package/src/lib/app-utils/margin-utilization.js +351 -0
  378. package/src/lib/app-utils/margin-utilization.js.map +1 -0
  379. package/src/lib/app-utils/markdown-lite.d.ts +297 -0
  380. package/src/lib/app-utils/markdown-lite.js +705 -0
  381. package/src/lib/app-utils/markdown-lite.js.map +1 -0
  382. package/src/lib/app-utils/marketing-consent.d.ts +704 -0
  383. package/src/lib/app-utils/marketing-consent.js +783 -0
  384. package/src/lib/app-utils/marketing-consent.js.map +1 -0
  385. package/src/lib/app-utils/marketplace-listing-visibility.d.ts +120 -0
  386. package/src/lib/app-utils/marketplace-listing-visibility.js +139 -0
  387. package/src/lib/app-utils/marketplace-listing-visibility.js.map +1 -0
  388. package/src/lib/app-utils/marketplace-overrides.d.ts +271 -0
  389. package/src/lib/app-utils/marketplace-overrides.js +462 -0
  390. package/src/lib/app-utils/marketplace-overrides.js.map +1 -0
  391. package/src/lib/app-utils/marketplace-provenance.d.ts +150 -0
  392. package/src/lib/app-utils/marketplace-provenance.js +136 -0
  393. package/src/lib/app-utils/marketplace-provenance.js.map +1 -0
  394. package/src/lib/app-utils/marketplace-theme.d.ts +237 -0
  395. package/src/lib/app-utils/marketplace-theme.js +525 -0
  396. package/src/lib/app-utils/marketplace-theme.js.map +1 -0
  397. package/src/lib/app-utils/marketplace-update-state.d.ts +119 -0
  398. package/src/lib/app-utils/marketplace-update-state.js +132 -0
  399. package/src/lib/app-utils/marketplace-update-state.js.map +1 -0
  400. package/src/lib/app-utils/marketplace-verification.d.ts +95 -0
  401. package/src/lib/app-utils/marketplace-verification.js +81 -0
  402. package/src/lib/app-utils/marketplace-verification.js.map +1 -0
  403. package/src/lib/app-utils/measure-node-map.d.ts +76 -0
  404. package/src/lib/app-utils/measure-node-map.js +111 -0
  405. package/src/lib/app-utils/measure-node-map.js.map +1 -0
  406. package/src/lib/app-utils/media-alt.d.ts +55 -0
  407. package/src/lib/app-utils/media-alt.js +58 -0
  408. package/src/lib/app-utils/media-alt.js.map +1 -0
  409. package/src/lib/app-utils/media-asset-facts.d.ts +125 -0
  410. package/src/lib/app-utils/media-asset-facts.js +467 -0
  411. package/src/lib/app-utils/media-asset-facts.js.map +1 -0
  412. package/src/lib/app-utils/media-cdn-scope.d.ts +65 -0
  413. package/src/lib/app-utils/media-cdn-scope.js +75 -0
  414. package/src/lib/app-utils/media-cdn-scope.js.map +1 -0
  415. package/src/lib/app-utils/media-folders.d.ts +161 -0
  416. package/src/lib/app-utils/media-folders.js +230 -0
  417. package/src/lib/app-utils/media-folders.js.map +1 -0
  418. package/src/lib/app-utils/media-metadata.d.ts +277 -0
  419. package/src/lib/app-utils/media-metadata.js +388 -0
  420. package/src/lib/app-utils/media-metadata.js.map +1 -0
  421. package/src/lib/app-utils/media-picker-context.d.ts +93 -0
  422. package/src/lib/app-utils/media-picker-context.js +26 -0
  423. package/src/lib/app-utils/media-picker-context.js.map +1 -0
  424. package/src/lib/app-utils/media-quarantine.d.ts +247 -0
  425. package/src/lib/app-utils/media-quarantine.js +323 -0
  426. package/src/lib/app-utils/media-quarantine.js.map +1 -0
  427. package/src/lib/app-utils/media-ref.d.ts +661 -0
  428. package/src/lib/app-utils/media-ref.js +1055 -0
  429. package/src/lib/app-utils/media-ref.js.map +1 -0
  430. package/src/lib/app-utils/media-takedown-reach.d.ts +126 -0
  431. package/src/lib/app-utils/media-takedown-reach.js +143 -0
  432. package/src/lib/app-utils/media-takedown-reach.js.map +1 -0
  433. package/src/lib/app-utils/member-email-aliases.d.ts +180 -0
  434. package/src/lib/app-utils/member-email-aliases.js +217 -0
  435. package/src/lib/app-utils/member-email-aliases.js.map +1 -0
  436. package/src/lib/app-utils/merge-node-sx.d.ts +47 -0
  437. package/src/lib/app-utils/merge-node-sx.js +123 -0
  438. package/src/lib/app-utils/merge-node-sx.js.map +1 -0
  439. package/src/lib/app-utils/name-match.d.ts +155 -0
  440. package/src/lib/app-utils/name-match.js +175 -0
  441. package/src/lib/app-utils/name-match.js.map +1 -0
  442. package/src/lib/app-utils/name-search.d.ts +117 -0
  443. package/src/lib/app-utils/name-search.js +145 -0
  444. package/src/lib/app-utils/name-search.js.map +1 -0
  445. package/src/lib/app-utils/node-capabilities.d.ts +85 -0
  446. package/src/lib/app-utils/node-capabilities.js +88 -0
  447. package/src/lib/app-utils/node-capabilities.js.map +1 -0
  448. package/src/lib/app-utils/node-definition-sanitizer.d.ts +164 -0
  449. package/src/lib/app-utils/node-definition-sanitizer.js +402 -0
  450. package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -0
  451. package/src/lib/app-utils/node-identity.d.ts +47 -0
  452. package/src/lib/app-utils/node-identity.js +50 -0
  453. package/src/lib/app-utils/node-identity.js.map +1 -0
  454. package/src/lib/app-utils/node-interactions.d.ts +102 -0
  455. package/src/lib/app-utils/node-interactions.js +192 -0
  456. package/src/lib/app-utils/node-interactions.js.map +1 -0
  457. package/src/lib/app-utils/node-url-policy.d.ts +54 -0
  458. package/src/lib/app-utils/node-url-policy.js +72 -0
  459. package/src/lib/app-utils/node-url-policy.js.map +1 -0
  460. package/src/lib/app-utils/notifications.d.ts +71 -0
  461. package/src/lib/app-utils/notifications.js +101 -0
  462. package/src/lib/app-utils/notifications.js.map +1 -0
  463. package/src/lib/app-utils/onboarding-deep-link.d.ts +120 -0
  464. package/src/lib/app-utils/onboarding-deep-link.js +142 -0
  465. package/src/lib/app-utils/onboarding-deep-link.js.map +1 -0
  466. package/src/lib/app-utils/operator-identity.d.ts +207 -0
  467. package/src/lib/app-utils/operator-identity.js +186 -0
  468. package/src/lib/app-utils/operator-identity.js.map +1 -0
  469. package/src/lib/app-utils/org-billing-doc.d.ts +231 -0
  470. package/src/lib/app-utils/org-billing-doc.js +238 -0
  471. package/src/lib/app-utils/org-billing-doc.js.map +1 -0
  472. package/src/lib/app-utils/org-override-reason.d.ts +100 -0
  473. package/src/lib/app-utils/org-override-reason.js +116 -0
  474. package/src/lib/app-utils/org-override-reason.js.map +1 -0
  475. package/src/lib/app-utils/org-permissions.d.ts +194 -0
  476. package/src/lib/app-utils/org-permissions.js +357 -0
  477. package/src/lib/app-utils/org-permissions.js.map +1 -0
  478. package/src/lib/app-utils/org-roles.d.ts +72 -0
  479. package/src/lib/app-utils/org-roles.js +131 -0
  480. package/src/lib/app-utils/org-roles.js.map +1 -0
  481. package/src/lib/app-utils/organizations.d.ts +407 -0
  482. package/src/lib/app-utils/organizations.js +511 -0
  483. package/src/lib/app-utils/organizations.js.map +1 -0
  484. package/src/lib/app-utils/page-header-actions-context.d.ts +83 -0
  485. package/src/lib/app-utils/page-header-actions-context.js +58 -0
  486. package/src/lib/app-utils/page-header-actions-context.js.map +1 -0
  487. package/src/lib/app-utils/page-header-record-context.d.ts +80 -0
  488. package/src/lib/app-utils/page-header-record-context.js +64 -0
  489. package/src/lib/app-utils/page-header-record-context.js.map +1 -0
  490. package/src/lib/app-utils/page-markdown.d.ts +103 -0
  491. package/src/lib/app-utils/page-markdown.js +385 -0
  492. package/src/lib/app-utils/page-markdown.js.map +1 -0
  493. package/src/lib/app-utils/paid-media-source.d.ts +90 -0
  494. package/src/lib/app-utils/paid-media-source.js +184 -0
  495. package/src/lib/app-utils/paid-media-source.js.map +1 -0
  496. package/src/lib/app-utils/palette-sx.d.ts +34 -0
  497. package/src/lib/app-utils/palette-sx.js +150 -0
  498. package/src/lib/app-utils/palette-sx.js.map +1 -0
  499. package/src/lib/app-utils/password-policy.d.ts +47 -0
  500. package/src/lib/app-utils/password-policy.js +46 -0
  501. package/src/lib/app-utils/password-policy.js.map +1 -0
  502. package/src/lib/app-utils/payments-configured.d.ts +84 -0
  503. package/src/lib/app-utils/payments-configured.js +88 -0
  504. package/src/lib/app-utils/payments-configured.js.map +1 -0
  505. package/src/lib/app-utils/person-erasure.d.ts +126 -0
  506. package/src/lib/app-utils/person-erasure.js +121 -0
  507. package/src/lib/app-utils/person-erasure.js.map +1 -0
  508. package/src/lib/app-utils/person-key.d.ts +32 -0
  509. package/src/lib/app-utils/person-key.js +62 -0
  510. package/src/lib/app-utils/person-key.js.map +1 -0
  511. package/src/lib/app-utils/plan-entitlements.d.ts +2756 -0
  512. package/src/lib/app-utils/plan-entitlements.js +4085 -0
  513. package/src/lib/app-utils/plan-entitlements.js.map +1 -0
  514. package/src/lib/app-utils/platform-ad-conversions.d.ts +122 -0
  515. package/src/lib/app-utils/platform-ad-conversions.js +174 -0
  516. package/src/lib/app-utils/platform-ad-conversions.js.map +1 -0
  517. package/src/lib/app-utils/platform-advertising-tags.d.ts +139 -0
  518. package/src/lib/app-utils/platform-advertising-tags.js +203 -0
  519. package/src/lib/app-utils/platform-advertising-tags.js.map +1 -0
  520. package/src/lib/app-utils/platform-brand.d.ts +151 -0
  521. package/src/lib/app-utils/platform-brand.js +175 -0
  522. package/src/lib/app-utils/platform-brand.js.map +1 -0
  523. package/src/lib/app-utils/platform-consent-default.d.ts +142 -0
  524. package/src/lib/app-utils/platform-consent-default.js +295 -0
  525. package/src/lib/app-utils/platform-consent-default.js.map +1 -0
  526. package/src/lib/app-utils/platform-marketing-consent.d.ts +151 -0
  527. package/src/lib/app-utils/platform-marketing-consent.js +182 -0
  528. package/src/lib/app-utils/platform-marketing-consent.js.map +1 -0
  529. package/src/lib/app-utils/platform-marketing-host.d.ts +33 -0
  530. package/src/lib/app-utils/platform-marketing-host.js +97 -0
  531. package/src/lib/app-utils/platform-marketing-host.js.map +1 -0
  532. package/src/lib/app-utils/platform-visitor-consent.d.ts +252 -0
  533. package/src/lib/app-utils/platform-visitor-consent.js +533 -0
  534. package/src/lib/app-utils/platform-visitor-consent.js.map +1 -0
  535. package/src/lib/app-utils/plugin-api-cross-origin.d.ts +61 -0
  536. package/src/lib/app-utils/plugin-api-cross-origin.js +202 -0
  537. package/src/lib/app-utils/plugin-api-cross-origin.js.map +1 -0
  538. package/src/lib/app-utils/plugin-api-rate-limit.d.ts +192 -0
  539. package/src/lib/app-utils/plugin-api-rate-limit.js +270 -0
  540. package/src/lib/app-utils/plugin-api-rate-limit.js.map +1 -0
  541. package/src/lib/app-utils/plugin-artifact-path.d.ts +32 -0
  542. package/src/lib/app-utils/plugin-artifact-path.js +33 -0
  543. package/src/lib/app-utils/plugin-artifact-path.js.map +1 -0
  544. package/src/lib/app-utils/plugin-bundle-checks.d.ts +148 -0
  545. package/src/lib/app-utils/plugin-bundle-checks.js +989 -0
  546. package/src/lib/app-utils/plugin-bundle-checks.js.map +1 -0
  547. package/src/lib/app-utils/plugin-manifest.d.ts +516 -0
  548. package/src/lib/app-utils/plugin-manifest.js +687 -0
  549. package/src/lib/app-utils/plugin-manifest.js.map +1 -0
  550. package/src/lib/app-utils/published-legal-pages.d.ts +71 -0
  551. package/src/lib/app-utils/published-legal-pages.js +90 -0
  552. package/src/lib/app-utils/published-legal-pages.js.map +1 -0
  553. package/src/lib/app-utils/publisher-agreement.d.ts +254 -0
  554. package/src/lib/app-utils/publisher-agreement.js +274 -0
  555. package/src/lib/app-utils/publisher-agreement.js.map +1 -0
  556. package/src/lib/app-utils/publisher-attestation.d.ts +99 -0
  557. package/src/lib/app-utils/publisher-attestation.js +158 -0
  558. package/src/lib/app-utils/publisher-attestation.js.map +1 -0
  559. package/src/lib/app-utils/recipient-email-render.d.ts +216 -0
  560. package/src/lib/app-utils/recipient-email-render.js +221 -0
  561. package/src/lib/app-utils/recipient-email-render.js.map +1 -0
  562. package/src/lib/app-utils/redispatch-caught-error.d.ts +38 -0
  563. package/src/lib/app-utils/redispatch-caught-error.js +46 -0
  564. package/src/lib/app-utils/redispatch-caught-error.js.map +1 -0
  565. package/src/lib/app-utils/registering-plugin.d.ts +19 -0
  566. package/src/lib/app-utils/registering-plugin.js +38 -0
  567. package/src/lib/app-utils/registering-plugin.js.map +1 -0
  568. package/src/lib/app-utils/release-flags.d.ts +283 -0
  569. package/src/lib/app-utils/release-flags.js +518 -0
  570. package/src/lib/app-utils/release-flags.js.map +1 -0
  571. package/src/lib/app-utils/repair-canvas-nodes.d.ts +130 -0
  572. package/src/lib/app-utils/repair-canvas-nodes.js +298 -0
  573. package/src/lib/app-utils/repair-canvas-nodes.js.map +1 -0
  574. package/src/lib/app-utils/repeat-infringer.d.ts +166 -0
  575. package/src/lib/app-utils/repeat-infringer.js +188 -0
  576. package/src/lib/app-utils/repeat-infringer.js.map +1 -0
  577. package/src/lib/app-utils/repeat-sources.d.ts +115 -0
  578. package/src/lib/app-utils/repeat-sources.js +86 -0
  579. package/src/lib/app-utils/repeat-sources.js.map +1 -0
  580. package/src/lib/app-utils/request-geo.d.ts +114 -0
  581. package/src/lib/app-utils/request-geo.js +247 -0
  582. package/src/lib/app-utils/request-geo.js.map +1 -0
  583. package/src/lib/app-utils/request-ip.d.ts +213 -0
  584. package/src/lib/app-utils/request-ip.js +344 -0
  585. package/src/lib/app-utils/request-ip.js.map +1 -0
  586. package/src/lib/app-utils/resolve-named-tokens.d.ts +26 -0
  587. package/src/lib/app-utils/resolve-named-tokens.js +59 -0
  588. package/src/lib/app-utils/resolve-named-tokens.js.map +1 -0
  589. package/src/lib/app-utils/responsive-typography-sx.d.ts +77 -0
  590. package/src/lib/app-utils/responsive-typography-sx.js +122 -0
  591. package/src/lib/app-utils/responsive-typography-sx.js.map +1 -0
  592. package/src/lib/app-utils/reusable-component-keys.d.ts +135 -0
  593. package/src/lib/app-utils/reusable-component-keys.js +140 -0
  594. package/src/lib/app-utils/reusable-component-keys.js.map +1 -0
  595. package/src/lib/app-utils/reusable-prop-values.d.ts +199 -0
  596. package/src/lib/app-utils/reusable-prop-values.js +494 -0
  597. package/src/lib/app-utils/reusable-prop-values.js.map +1 -0
  598. package/src/lib/app-utils/safe-json-ld.d.ts +29 -0
  599. package/src/lib/app-utils/safe-json-ld.js +37 -0
  600. package/src/lib/app-utils/safe-json-ld.js.map +1 -0
  601. package/src/lib/app-utils/sanitize-svg.d.ts +55 -0
  602. package/src/lib/app-utils/sanitize-svg.js +460 -0
  603. package/src/lib/app-utils/sanitize-svg.js.map +1 -0
  604. package/src/lib/app-utils/scheme-sx.d.ts +84 -0
  605. package/src/lib/app-utils/scheme-sx.js +148 -0
  606. package/src/lib/app-utils/scheme-sx.js.map +1 -0
  607. package/src/lib/app-utils/scope-tokens.d.ts +249 -0
  608. package/src/lib/app-utils/scope-tokens.js +331 -0
  609. package/src/lib/app-utils/scope-tokens.js.map +1 -0
  610. package/src/lib/app-utils/screen-link-context-value.d.ts +57 -0
  611. package/src/lib/app-utils/screen-link-context-value.js +43 -0
  612. package/src/lib/app-utils/screen-link-context-value.js.map +1 -0
  613. package/src/lib/app-utils/screen-link-context.d.ts +185 -0
  614. package/src/lib/app-utils/screen-link-context.js +304 -0
  615. package/src/lib/app-utils/screen-link-context.js.map +1 -0
  616. package/src/lib/app-utils/screen-link-value.d.ts +269 -0
  617. package/src/lib/app-utils/screen-link-value.js +384 -0
  618. package/src/lib/app-utils/screen-link-value.js.map +1 -0
  619. package/src/lib/app-utils/screen-route.d.ts +669 -0
  620. package/src/lib/app-utils/screen-route.js +751 -0
  621. package/src/lib/app-utils/screen-route.js.map +1 -0
  622. package/src/lib/app-utils/screen-seo-fields.d.ts +37 -0
  623. package/src/lib/app-utils/screen-seo-fields.js +42 -0
  624. package/src/lib/app-utils/screen-seo-fields.js.map +1 -0
  625. package/src/lib/app-utils/search-indexing.d.ts +162 -0
  626. package/src/lib/app-utils/search-indexing.js +207 -0
  627. package/src/lib/app-utils/search-indexing.js.map +1 -0
  628. package/src/lib/app-utils/seo-listing-fields.d.ts +70 -0
  629. package/src/lib/app-utils/seo-listing-fields.js +75 -0
  630. package/src/lib/app-utils/seo-listing-fields.js.map +1 -0
  631. package/src/lib/app-utils/seo-locale.d.ts +119 -0
  632. package/src/lib/app-utils/seo-locale.js +133 -0
  633. package/src/lib/app-utils/seo-locale.js.map +1 -0
  634. package/src/lib/app-utils/seo-title-variables.d.ts +149 -0
  635. package/src/lib/app-utils/seo-title-variables.js +190 -0
  636. package/src/lib/app-utils/seo-title-variables.js.map +1 -0
  637. package/src/lib/app-utils/seo-title.d.ts +70 -0
  638. package/src/lib/app-utils/seo-title.js +117 -0
  639. package/src/lib/app-utils/seo-title.js.map +1 -0
  640. package/src/lib/app-utils/server.d.ts +174 -0
  641. package/src/lib/app-utils/server.js +314 -0
  642. package/src/lib/app-utils/server.js.map +1 -0
  643. package/src/lib/app-utils/site-context.d.ts +106 -0
  644. package/src/lib/app-utils/site-context.js +100 -0
  645. package/src/lib/app-utils/site-context.js.map +1 -0
  646. package/src/lib/app-utils/sitemap.d.ts +117 -0
  647. package/src/lib/app-utils/sitemap.js +183 -0
  648. package/src/lib/app-utils/sitemap.js.map +1 -0
  649. package/src/lib/app-utils/social-image.d.ts +112 -0
  650. package/src/lib/app-utils/social-image.js +191 -0
  651. package/src/lib/app-utils/social-image.js.map +1 -0
  652. package/src/lib/app-utils/starter-templates.d.ts +99 -0
  653. package/src/lib/app-utils/starter-templates.js +579 -0
  654. package/src/lib/app-utils/starter-templates.js.map +1 -0
  655. package/src/lib/app-utils/stored-nodes.d.ts +120 -0
  656. package/src/lib/app-utils/stored-nodes.js +174 -0
  657. package/src/lib/app-utils/stored-nodes.js.map +1 -0
  658. package/src/lib/app-utils/strip-undefined.d.ts +59 -0
  659. package/src/lib/app-utils/strip-undefined.js +95 -0
  660. package/src/lib/app-utils/strip-undefined.js.map +1 -0
  661. package/src/lib/app-utils/stripe-deployment-mode.d.ts +47 -0
  662. package/src/lib/app-utils/stripe-deployment-mode.js +70 -0
  663. package/src/lib/app-utils/stripe-deployment-mode.js.map +1 -0
  664. package/src/lib/app-utils/support-tiers.d.ts +108 -0
  665. package/src/lib/app-utils/support-tiers.js +201 -0
  666. package/src/lib/app-utils/support-tiers.js.map +1 -0
  667. package/src/lib/app-utils/timezone-geo-hint.d.ts +36 -0
  668. package/src/lib/app-utils/timezone-geo-hint.js +180 -0
  669. package/src/lib/app-utils/timezone-geo-hint.js.map +1 -0
  670. package/src/lib/app-utils/upload-cors.d.ts +155 -0
  671. package/src/lib/app-utils/upload-cors.js +254 -0
  672. package/src/lib/app-utils/upload-cors.js.map +1 -0
  673. package/src/lib/app-utils/upload-inspection.d.ts +159 -0
  674. package/src/lib/app-utils/upload-inspection.js +539 -0
  675. package/src/lib/app-utils/upload-inspection.js.map +1 -0
  676. package/src/lib/app-utils/url-slug.d.ts +40 -0
  677. package/src/lib/app-utils/url-slug.js +42 -0
  678. package/src/lib/app-utils/url-slug.js.map +1 -0
  679. package/src/lib/app-utils/usage-budget.d.ts +429 -0
  680. package/src/lib/app-utils/usage-budget.js +421 -0
  681. package/src/lib/app-utils/usage-budget.js.map +1 -0
  682. package/src/lib/app-utils/variables.d.ts +96 -0
  683. package/src/lib/app-utils/variables.js +233 -0
  684. package/src/lib/app-utils/variables.js.map +1 -0
  685. package/src/lib/app-utils/video-asset-facts.d.ts +61 -0
  686. package/src/lib/app-utils/video-asset-facts.js +70 -0
  687. package/src/lib/app-utils/video-asset-facts.js.map +1 -0
  688. package/src/lib/app-utils/video-object.d.ts +89 -0
  689. package/src/lib/app-utils/video-object.js +245 -0
  690. package/src/lib/app-utils/video-object.js.map +1 -0
  691. package/src/lib/app-utils/visitor-consent.d.ts +757 -0
  692. package/src/lib/app-utils/visitor-consent.js +981 -0
  693. package/src/lib/app-utils/visitor-consent.js.map +1 -0
  694. package/src/lib/app-utils/visitor-record-ceiling.d.ts +223 -0
  695. package/src/lib/app-utils/visitor-record-ceiling.js +215 -0
  696. package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -0
  697. package/src/lib/app-utils/web-vitals-rum.d.ts +53 -0
  698. package/src/lib/app-utils/web-vitals-rum.js +278 -0
  699. package/src/lib/app-utils/web-vitals-rum.js.map +1 -0
  700. package/src/lib/app-utils/webhook-delivery.d.ts +324 -0
  701. package/src/lib/app-utils/webhook-delivery.js +413 -0
  702. package/src/lib/app-utils/webhook-delivery.js.map +1 -0
  703. package/src/lib/app-utils/where-used.d.ts +57 -0
  704. package/src/lib/app-utils/where-used.js +59 -0
  705. package/src/lib/app-utils/where-used.js.map +1 -0
  706. package/src/lib/app-utils/wistia-embed.d.ts +86 -0
  707. package/src/lib/app-utils/wistia-embed.js +119 -0
  708. package/src/lib/app-utils/wistia-embed.js.map +1 -0
  709. package/src/lib/app-utils/workflows.d.ts +136 -0
  710. package/src/lib/app-utils/workflows.js +346 -0
  711. package/src/lib/app-utils/workflows.js.map +1 -0
  712. package/src/lib/canvas-manager/canvas-manager-tree.d.ts +109 -0
  713. package/src/lib/canvas-manager/canvas-manager-tree.js +139 -0
  714. package/src/lib/canvas-manager/canvas-manager-tree.js.map +1 -0
  715. package/src/lib/canvas-manager/canvas-manager.d.ts +549 -0
  716. package/src/lib/canvas-manager/canvas-manager.js +1311 -0
  717. package/src/lib/canvas-manager/canvas-manager.js.map +1 -0
  718. package/src/lib/canvas-manager/index.d.ts +20 -0
  719. package/src/lib/canvas-manager/index.js +21 -0
  720. package/src/lib/canvas-manager/index.js.map +1 -0
  721. package/src/lib/canvas-manager/stores/index.d.ts +17 -0
  722. package/src/lib/canvas-manager/stores/index.js +18 -0
  723. package/src/lib/canvas-manager/stores/index.js.map +1 -0
  724. package/src/lib/canvas-manager/stores/node.store.d.ts +30 -0
  725. package/src/lib/canvas-manager/stores/node.store.js +45 -0
  726. package/src/lib/canvas-manager/stores/node.store.js.map +1 -0
  727. package/src/lib/components-manager/components-manager.d.ts +56 -0
  728. package/src/lib/components-manager/components-manager.js +191 -0
  729. package/src/lib/components-manager/components-manager.js.map +1 -0
  730. package/src/lib/components-manager/index.d.ts +18 -0
  731. package/src/lib/components-manager/index.js +19 -0
  732. package/src/lib/components-manager/index.js.map +1 -0
  733. package/src/lib/emit-manager/emit-manager.d.ts +56 -0
  734. package/src/lib/emit-manager/emit-manager.js +60 -0
  735. package/src/lib/emit-manager/emit-manager.js.map +1 -0
  736. package/src/lib/emit-manager/index.d.ts +18 -0
  737. package/src/lib/emit-manager/index.js +19 -0
  738. package/src/lib/emit-manager/index.js.map +1 -0
  739. package/src/lib/foundation/constants/_internal.d.ts +18 -0
  740. package/src/lib/foundation/constants/_internal.js +62 -0
  741. package/src/lib/foundation/constants/_internal.js.map +1 -0
  742. package/src/lib/foundation/constants/app.d.ts +23 -0
  743. package/src/lib/foundation/constants/app.js +25 -0
  744. package/src/lib/foundation/constants/app.js.map +1 -0
  745. package/src/lib/foundation/constants/canvas.d.ts +18 -0
  746. package/src/lib/foundation/constants/canvas.js +18 -0
  747. package/src/lib/foundation/constants/canvas.js.map +1 -0
  748. package/src/lib/foundation/constants/components.d.ts +54 -0
  749. package/src/lib/foundation/constants/components.js +61 -0
  750. package/src/lib/foundation/constants/components.js.map +1 -0
  751. package/src/lib/foundation/constants/shared.d.ts +50 -0
  752. package/src/lib/foundation/constants/shared.js +49 -0
  753. package/src/lib/foundation/constants/shared.js.map +1 -0
  754. package/src/lib/foundation/constants/symbol.d.ts +63 -0
  755. package/src/lib/foundation/constants/symbol.js +75 -0
  756. package/src/lib/foundation/constants/symbol.js.map +1 -0
  757. package/src/lib/foundation/definitions/components.types.d.ts +372 -0
  758. package/src/lib/foundation/definitions/components.types.js +180 -0
  759. package/src/lib/foundation/definitions/components.types.js.map +1 -0
  760. package/src/lib/foundation/definitions/contact.types.d.ts +73 -0
  761. package/src/lib/foundation/definitions/contact.types.js +107 -0
  762. package/src/lib/foundation/definitions/contact.types.js.map +1 -0
  763. package/src/lib/foundation/definitions/host-content-collections.d.ts +137 -0
  764. package/src/lib/foundation/definitions/host-content-collections.js +219 -0
  765. package/src/lib/foundation/definitions/host-content-collections.js.map +1 -0
  766. package/src/lib/foundation/definitions/org-billing.types.d.ts +1361 -0
  767. package/src/lib/foundation/definitions/org-billing.types.js +77 -0
  768. package/src/lib/foundation/definitions/org-billing.types.js.map +1 -0
  769. package/src/lib/foundation/definitions/organization.types.d.ts +307 -0
  770. package/src/lib/foundation/definitions/organization.types.js +42 -0
  771. package/src/lib/foundation/definitions/organization.types.js.map +1 -0
  772. package/src/lib/foundation/definitions/platform.types.d.ts +1326 -0
  773. package/src/lib/foundation/definitions/platform.types.js +124 -0
  774. package/src/lib/foundation/definitions/platform.types.js.map +1 -0
  775. package/src/lib/foundation/definitions/property-kinds.d.ts +189 -0
  776. package/src/lib/foundation/definitions/property-kinds.js +565 -0
  777. package/src/lib/foundation/definitions/property-kinds.js.map +1 -0
  778. package/src/lib/foundation/definitions/shared.d.ts +23 -0
  779. package/src/lib/foundation/definitions/shared.js +18 -0
  780. package/src/lib/foundation/definitions/shared.js.map +1 -0
  781. package/src/lib/foundation/definitions/write-deny-coverage.util.d.ts +249 -0
  782. package/src/lib/foundation/definitions/write-deny-coverage.util.js +499 -0
  783. package/src/lib/foundation/definitions/write-deny-coverage.util.js.map +1 -0
  784. package/src/lib/foundation/index.d.ts +32 -0
  785. package/src/lib/foundation/index.js +67 -0
  786. package/src/lib/foundation/index.js.map +1 -0
  787. package/src/lib/lifecycle.d.ts +24 -0
  788. package/src/lib/lifecycle.js +39 -0
  789. package/src/lib/lifecycle.js.map +1 -0
  790. package/src/lib/mst/common.d.ts +17 -0
  791. package/src/lib/mst/common.js +23 -0
  792. package/src/lib/mst/common.js.map +1 -0
  793. package/src/lib/mst/index.d.ts +19 -0
  794. package/src/lib/mst/index.js +20 -0
  795. package/src/lib/mst/index.js.map +1 -0
  796. package/src/lib/mst/json.d.ts +22 -0
  797. package/src/lib/mst/json.js +23 -0
  798. package/src/lib/mst/json.js.map +1 -0
  799. package/src/lib/mst/types.d.ts +20 -0
  800. package/src/lib/mst/types.js +18 -0
  801. package/src/lib/mst/types.js.map +1 -0
  802. package/src/lib/plugin-manager/billing-webhook-hooks.d.ts +77 -0
  803. package/src/lib/plugin-manager/billing-webhook-hooks.js +55 -0
  804. package/src/lib/plugin-manager/billing-webhook-hooks.js.map +1 -0
  805. package/src/lib/plugin-manager/commerce-zone-props.d.ts +172 -0
  806. package/src/lib/plugin-manager/commerce-zone-props.js +31 -0
  807. package/src/lib/plugin-manager/commerce-zone-props.js.map +1 -0
  808. package/src/lib/plugin-manager/custom-fields.d.ts +60 -0
  809. package/src/lib/plugin-manager/custom-fields.js +39 -0
  810. package/src/lib/plugin-manager/custom-fields.js.map +1 -0
  811. package/src/lib/plugin-manager/editor-sessions.d.ts +109 -0
  812. package/src/lib/plugin-manager/editor-sessions.js +137 -0
  813. package/src/lib/plugin-manager/editor-sessions.js.map +1 -0
  814. package/src/lib/plugin-manager/enabled-plugins.d.ts +438 -0
  815. package/src/lib/plugin-manager/enabled-plugins.js +403 -0
  816. package/src/lib/plugin-manager/enabled-plugins.js.map +1 -0
  817. package/src/lib/plugin-manager/feature-plugins.d.ts +1314 -0
  818. package/src/lib/plugin-manager/feature-plugins.js +609 -0
  819. package/src/lib/plugin-manager/feature-plugins.js.map +1 -0
  820. package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +11 -0
  821. package/src/lib/plugin-manager/first-party-plugins.generated.js +149 -0
  822. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -0
  823. package/src/lib/plugin-manager/index.d.ts +42 -0
  824. package/src/lib/plugin-manager/index.js +46 -0
  825. package/src/lib/plugin-manager/index.js.map +1 -0
  826. package/src/lib/plugin-manager/install-presets.d.ts +93 -0
  827. package/src/lib/plugin-manager/install-presets.js +86 -0
  828. package/src/lib/plugin-manager/install-presets.js.map +1 -0
  829. package/src/lib/plugin-manager/media-delivery-provider.d.ts +124 -0
  830. package/src/lib/plugin-manager/media-delivery-provider.js +53 -0
  831. package/src/lib/plugin-manager/media-delivery-provider.js.map +1 -0
  832. package/src/lib/plugin-manager/order-fulfilment.d.ts +142 -0
  833. package/src/lib/plugin-manager/order-fulfilment.js +104 -0
  834. package/src/lib/plugin-manager/order-fulfilment.js.map +1 -0
  835. package/src/lib/plugin-manager/plugin-activity-actions.d.ts +122 -0
  836. package/src/lib/plugin-manager/plugin-activity-actions.js +140 -0
  837. package/src/lib/plugin-manager/plugin-activity-actions.js.map +1 -0
  838. package/src/lib/plugin-manager/plugin-bridge.d.ts +98 -0
  839. package/src/lib/plugin-manager/plugin-bridge.js +154 -0
  840. package/src/lib/plugin-manager/plugin-bridge.js.map +1 -0
  841. package/src/lib/plugin-manager/plugin-config.d.ts +148 -0
  842. package/src/lib/plugin-manager/plugin-config.js +228 -0
  843. package/src/lib/plugin-manager/plugin-config.js.map +1 -0
  844. package/src/lib/plugin-manager/plugin-console-crons.d.ts +139 -0
  845. package/src/lib/plugin-manager/plugin-console-crons.js +177 -0
  846. package/src/lib/plugin-manager/plugin-console-crons.js.map +1 -0
  847. package/src/lib/plugin-manager/plugin-contact-capture.d.ts +220 -0
  848. package/src/lib/plugin-manager/plugin-contact-capture.js +89 -0
  849. package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -0
  850. package/src/lib/plugin-manager/plugin-contributions.d.ts +244 -0
  851. package/src/lib/plugin-manager/plugin-contributions.js +283 -0
  852. package/src/lib/plugin-manager/plugin-contributions.js.map +1 -0
  853. package/src/lib/plugin-manager/plugin-entitlement-keys.d.ts +169 -0
  854. package/src/lib/plugin-manager/plugin-entitlement-keys.js +84 -0
  855. package/src/lib/plugin-manager/plugin-entitlement-keys.js.map +1 -0
  856. package/src/lib/plugin-manager/plugin-entitlements.d.ts +181 -0
  857. package/src/lib/plugin-manager/plugin-entitlements.js +188 -0
  858. package/src/lib/plugin-manager/plugin-entitlements.js.map +1 -0
  859. package/src/lib/plugin-manager/plugin-events.d.ts +145 -0
  860. package/src/lib/plugin-manager/plugin-events.js +79 -0
  861. package/src/lib/plugin-manager/plugin-events.js.map +1 -0
  862. package/src/lib/plugin-manager/plugin-figures.d.ts +251 -0
  863. package/src/lib/plugin-manager/plugin-figures.js +252 -0
  864. package/src/lib/plugin-manager/plugin-figures.js.map +1 -0
  865. package/src/lib/plugin-manager/plugin-host-collections.d.ts +146 -0
  866. package/src/lib/plugin-manager/plugin-host-collections.js +116 -0
  867. package/src/lib/plugin-manager/plugin-host-collections.js.map +1 -0
  868. package/src/lib/plugin-manager/plugin-jobs.d.ts +130 -0
  869. package/src/lib/plugin-manager/plugin-jobs.js +182 -0
  870. package/src/lib/plugin-manager/plugin-jobs.js.map +1 -0
  871. package/src/lib/plugin-manager/plugin-loader.d.ts +86 -0
  872. package/src/lib/plugin-manager/plugin-loader.js +223 -0
  873. package/src/lib/plugin-manager/plugin-loader.js.map +1 -0
  874. package/src/lib/plugin-manager/plugin-manager.d.ts +95 -0
  875. package/src/lib/plugin-manager/plugin-manager.js +343 -0
  876. package/src/lib/plugin-manager/plugin-manager.js.map +1 -0
  877. package/src/lib/plugin-manager/plugin-metered-lines.d.ts +97 -0
  878. package/src/lib/plugin-manager/plugin-metered-lines.js +123 -0
  879. package/src/lib/plugin-manager/plugin-metered-lines.js.map +1 -0
  880. package/src/lib/plugin-manager/plugin-org-erasure.d.ts +52 -0
  881. package/src/lib/plugin-manager/plugin-org-erasure.js +100 -0
  882. package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -0
  883. package/src/lib/plugin-manager/plugin-permissions.d.ts +69 -0
  884. package/src/lib/plugin-manager/plugin-permissions.js +77 -0
  885. package/src/lib/plugin-manager/plugin-permissions.js.map +1 -0
  886. package/src/lib/plugin-manager/plugin-person-erasure.d.ts +58 -0
  887. package/src/lib/plugin-manager/plugin-person-erasure.js +109 -0
  888. package/src/lib/plugin-manager/plugin-person-erasure.js.map +1 -0
  889. package/src/lib/plugin-manager/plugin-record-cards.d.ts +99 -0
  890. package/src/lib/plugin-manager/plugin-record-cards.js +59 -0
  891. package/src/lib/plugin-manager/plugin-record-cards.js.map +1 -0
  892. package/src/lib/plugin-manager/plugin-record-facts.d.ts +111 -0
  893. package/src/lib/plugin-manager/plugin-record-facts.js +51 -0
  894. package/src/lib/plugin-manager/plugin-record-facts.js.map +1 -0
  895. package/src/lib/plugin-manager/plugin-record-routes.d.ts +129 -0
  896. package/src/lib/plugin-manager/plugin-record-routes.js +93 -0
  897. package/src/lib/plugin-manager/plugin-record-routes.js.map +1 -0
  898. package/src/lib/plugin-manager/plugin-record-timeline.d.ts +147 -0
  899. package/src/lib/plugin-manager/plugin-record-timeline.js +39 -0
  900. package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -0
  901. package/src/lib/plugin-manager/plugin-resource-drafts.d.ts +137 -0
  902. package/src/lib/plugin-manager/plugin-resource-drafts.js +51 -0
  903. package/src/lib/plugin-manager/plugin-resource-drafts.js.map +1 -0
  904. package/src/lib/plugin-manager/plugin-services.d.ts +94 -0
  905. package/src/lib/plugin-manager/plugin-services.js +153 -0
  906. package/src/lib/plugin-manager/plugin-services.js.map +1 -0
  907. package/src/lib/plugin-manager/plugin-styles-ui.d.ts +71 -0
  908. package/src/lib/plugin-manager/plugin-styles-ui.js +80 -0
  909. package/src/lib/plugin-manager/plugin-styles-ui.js.map +1 -0
  910. package/src/lib/plugin-manager/plugin-styles.d.ts +176 -0
  911. package/src/lib/plugin-manager/plugin-styles.js +186 -0
  912. package/src/lib/plugin-manager/plugin-styles.js.map +1 -0
  913. package/src/lib/plugin-manager/plugin-subprocessors.d.ts +135 -0
  914. package/src/lib/plugin-manager/plugin-subprocessors.js +129 -0
  915. package/src/lib/plugin-manager/plugin-subprocessors.js.map +1 -0
  916. package/src/lib/plugin-manager/plugin-tax-profile.d.ts +84 -0
  917. package/src/lib/plugin-manager/plugin-tax-profile.js +39 -0
  918. package/src/lib/plugin-manager/plugin-tax-profile.js.map +1 -0
  919. package/src/lib/plugin-manager/plugin-user-erasure.d.ts +53 -0
  920. package/src/lib/plugin-manager/plugin-user-erasure.js +84 -0
  921. package/src/lib/plugin-manager/plugin-user-erasure.js.map +1 -0
  922. package/src/lib/plugin-manager/plugin-zones.d.ts +121 -0
  923. package/src/lib/plugin-manager/plugin-zones.js +74 -0
  924. package/src/lib/plugin-manager/plugin-zones.js.map +1 -0
  925. package/src/lib/plugin-manager/realm-plugins.d.ts +112 -0
  926. package/src/lib/plugin-manager/realm-plugins.js +196 -0
  927. package/src/lib/plugin-manager/realm-plugins.js.map +1 -0
  928. package/src/lib/plugin-manager/realm-server.d.ts +54 -0
  929. package/src/lib/plugin-manager/realm-server.js +88 -0
  930. package/src/lib/plugin-manager/realm-server.js.map +1 -0
  931. package/src/lib/plugin-manager/record-zone-props.d.ts +126 -0
  932. package/src/lib/plugin-manager/record-zone-props.js +31 -0
  933. package/src/lib/plugin-manager/record-zone-props.js.map +1 -0
  934. package/src/lib/plugin-manager/site-page-hooks.d.ts +102 -0
  935. package/src/lib/plugin-manager/site-page-hooks.js +114 -0
  936. package/src/lib/plugin-manager/site-page-hooks.js.map +1 -0
  937. package/src/lib/plugin-manager/site-runtime.d.ts +57 -0
  938. package/src/lib/plugin-manager/site-runtime.js +25 -0
  939. package/src/lib/plugin-manager/site-runtime.js.map +1 -0
  940. package/src/lib/plugin-manager/usage-alert-contributors.d.ts +115 -0
  941. package/src/lib/plugin-manager/usage-alert-contributors.js +106 -0
  942. package/src/lib/plugin-manager/usage-alert-contributors.js.map +1 -0
  943. package/src/lib/types/ast.d.ts +199 -0
  944. package/src/lib/types/ast.js +20 -0
  945. package/src/lib/types/ast.js.map +1 -0
  946. package/src/lib/types/index.d.ts +20 -0
  947. package/src/lib/types/index.js +21 -0
  948. package/src/lib/types/index.js.map +1 -0
  949. package/src/lib/types/nodes.d.ts +608 -0
  950. package/src/lib/types/nodes.js +28 -0
  951. package/src/lib/types/nodes.js.map +1 -0
  952. package/src/lib/types/routing.d.ts +17 -0
  953. package/src/lib/types/routing.js +18 -0
  954. package/src/lib/types/routing.js.map +1 -0
  955. package/src/lib/types/screen.d.ts +23 -0
  956. package/src/lib/types/screen.js +18 -0
  957. package/src/lib/types/screen.js.map +1 -0
  958. package/src/lib/utils.d.ts +25 -0
  959. package/src/lib/utils.js +42 -0
  960. package/src/lib/utils.js.map +1 -0
  961. package/src/server.d.ts +37 -0
  962. package/src/server.js +55 -0
  963. package/src/server.js.map +1 -0
@@ -0,0 +1,282 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ /**
17
+ * What a form's DESIGN must still satisfy for its submissions to arrive.
18
+ *
19
+ * A reusable component is only ever drawn: the worst an author can do to one
20
+ * is make it ugly, and the page still renders. A form is drawn AND it is a
21
+ * contract — `/api/forms/submit` keys submissions on its id, reads consent out
22
+ * of a field it names, and creates a lead from an address it expects to find.
23
+ * Every one of those couplings is resolved by NAME at submit time, so the
24
+ * design can break them, and breaking them is silent in every case: the form
25
+ * still renders, the visitor still submits, the row still lands, and the thing
26
+ * the merchant believed they were collecting is simply not there.
27
+ *
28
+ * That asymmetry is the whole reason this module exists. Publishing a form is
29
+ * not "save the drawing"; it is "promise the server can still read this".
30
+ *
31
+ * ## The six silent failures, and why each one is checked here
32
+ *
33
+ * Every check below corresponds to something a design can do that produces NO
34
+ * error at submit time. A design that fails loudly needs no guard — the author
35
+ * finds out. These are the ones where nobody finds out.
36
+ *
37
+ * 1. **The form node stops naming this form.** Submissions carry `formId` and
38
+ * the route stamps it only after verifying it against this host's forms;
39
+ * the Inbox's per-form list is an equality on it. Clear or rebind it and
40
+ * every later submission is unattributable — while still landing in the
41
+ * Inbox, so nothing looks broken and the form's own list just stops
42
+ * growing.
43
+ * 2. **A field with no name.** `formFieldDeclsFromNodes` drops it, and the
44
+ * runtime falls back to `name = fieldName || 'field'`, so several unnamed
45
+ * inputs collapse onto ONE submission key. The visitor types, the value is
46
+ * posted, and it is not retrievable under any name the author knows.
47
+ * 3. **Two fields sharing a name.** `FormData` joins entries under one key,
48
+ * so the second input contributes no separate value and the declaration
49
+ * keeps only the first. Two questions, one answer.
50
+ * 4. **Lead routing with nothing to extract an address from.**
51
+ * `routing.lead` only ever fires when `extractEmailFromFields` finds one,
52
+ * and that prefers a key matching `/email/i` before falling back to any
53
+ * email-shaped value. A form with no such field can still route to leads
54
+ * on paper and never create one.
55
+ * 5. **Lead routing with nothing that records consent.** The route files
56
+ * the lead either way, and stamps an opt-in on it only from the field the
57
+ * form declares or from an undeclared field on the closed name list it
58
+ * falls back to. A form with neither files leads nobody may email — the
59
+ * send-time consent join refuses every one — so the sales team works a
60
+ * list the campaigns cannot reach, and nothing at submit time says so.
61
+ * 6. **A consent field that no longer exists.** `readFormDeclaredConsent`
62
+ * looks up exactly `consentFieldName`. Rename or delete that field and it
63
+ * returns `false` forever — the form keeps collecting the tick and the
64
+ * opt-in stops being recorded. This is the one with consequences outside
65
+ * the product, since an advertising basis that quietly stops is
66
+ * indistinguishable downstream from one that was never given.
67
+ *
68
+ * ## What is NOT checked
69
+ *
70
+ * Anything the author can see. A missing label, an empty select, a field in
71
+ * the wrong order — those are visible on the canvas and are the author's to
72
+ * judge. This module is only for couplings that are invisible at design time
73
+ * and asymptomatic at run time.
74
+ *
75
+ * Pure and dependency-free, like `forms.ts` beside it: it reaches client
76
+ * bundles through `app-utils/index`, so nothing here may import a Node
77
+ * builtin.
78
+ */ import { collectFormFieldNodeIds, FORM_COMPONENT_ID, isMarketingConsentFieldName } from "./forms.js";
79
+ /**
80
+ * `extractEmailFromFields` prefers a key matching this before falling back to
81
+ * any email-shaped value. Restated rather than imported so this module stays
82
+ * free of `contacts.ts`; {@link EMAIL_KEY_PATTERN} and that function agreeing
83
+ * is asserted in the spec rather than assumed.
84
+ */ const EMAIL_KEY_PATTERN = /email/i;
85
+ /**
86
+ * Reads the fields a design draws, keeping every one of them.
87
+ *
88
+ * Deliberately NOT `formFieldDeclsFromNodes`. That function drops an unnamed
89
+ * field and the second of a duplicate pair, which is right for adoption — it
90
+ * describes what a page already submits — and useless here, because the
91
+ * dropped ones are precisely what this module has to report. Asking it would
92
+ * be asking a question whose answer has the evidence removed from it.
93
+ */ function drawnFields(nodes, formNodeId, formFieldComponentId) {
94
+ return collectFormFieldNodeIds(nodes, formNodeId, formFieldComponentId).map((nodeId)=>{
95
+ var _ref, _props_fieldName, _props_fieldType;
96
+ var _nodes_nodeId;
97
+ const props = (_ref = nodes == null ? void 0 : (_nodes_nodeId = nodes[nodeId]) == null ? void 0 : _nodes_nodeId.props) != null ? _ref : {};
98
+ return {
99
+ nodeId,
100
+ fieldName: String((_props_fieldName = props['fieldName']) != null ? _props_fieldName : '').trim(),
101
+ fieldType: String((_props_fieldType = props['fieldType']) != null ? _props_fieldType : 'text')
102
+ };
103
+ });
104
+ }
105
+ /**
106
+ * Whether a submission carrying these fields could yield an address to key
107
+ * a lead on — the one precondition of lead routing (AGL-2612).
108
+ *
109
+ * Exported because the check is asked in two places that never see a node
110
+ * tree: the form's own page decides whether to offer the routing switch, and
111
+ * the CRM's Leads section offers to turn routing on for a form from the
112
+ * declared field list alone. Both must agree with the publish check here or
113
+ * a switch flipped on one surface is refused on the next.
114
+ */ export function formFieldsCanYieldAnEmail(fields) {
115
+ return fields.some((field)=>field.fieldType === 'email' || EMAIL_KEY_PATTERN.test(field.fieldName));
116
+ }
117
+ /** The same question, of the fields a design DRAWS. */ function canYieldAnEmail(fields) {
118
+ return formFieldsCanYieldAnEmail(fields);
119
+ }
120
+ /**
121
+ * Whether a submission carrying these fields could record an opt-in — the
122
+ * other precondition of lead routing, and the one that decides whether a
123
+ * lead is worth filing: a lead nobody consented with is one the campaigns
124
+ * refuse at send time.
125
+ *
126
+ * Consent is recorded from the field the form DECLARES, or, when it declares
127
+ * none, from an undeclared field the route recognizes by name. Whether a
128
+ * declared field still exists is `consent-field-missing`'s question, asked
129
+ * separately so a lost field is reported once, as the loss it is.
130
+ *
131
+ * Exported for the same two surfaces as {@link formFieldsCanYieldAnEmail}:
132
+ * the switch on the form's page and the Leads section's offer must refuse
133
+ * what the publish check would refuse.
134
+ */ export function formFieldsCaptureConsent(fields, consentFieldName) {
135
+ if (String(consentFieldName != null ? consentFieldName : '').trim()) return true;
136
+ return fields.some((field)=>isMarketingConsentFieldName(field.fieldName));
137
+ }
138
+ /**
139
+ * A site that switched Forms off (AGL-3029) publishes no form — neither a form
140
+ * design nor a page, layout or component that carries one.
141
+ *
142
+ * Not one of the six silent failures above, and checked ahead of all of them:
143
+ * on such a site the published page does not draw a form and `/api/forms/submit`
144
+ * refuses every submission, so publishing one would put a hole on a live page
145
+ * while the author believed they had shipped a form. Refusing it is what makes
146
+ * the empty space on a page published BEFORE the switch the only kind there is.
147
+ */ export const FORMS_OFF_FOR_SITE_VIOLATION = {
148
+ code: 'forms-off-for-site',
149
+ message: 'Forms is switched off for this site, so a form published here would not ' + 'show on its pages or accept submissions. Switch Forms back on for this ' + 'site in Admin › Plugins to publish it.'
150
+ };
151
+ /**
152
+ * Whether a node map carries a form: a `form` node anywhere in it, bound to
153
+ * an entity or drawn inline. Read by `componentId`, which every form node has
154
+ * carried from the start, rather than by the `pluginId` a node was stamped
155
+ * with when it was placed.
156
+ */ export function nodesCarryForm(nodes) {
157
+ return Object.values(nodes != null ? nodes : {}).some((node)=>(node == null ? void 0 : node.componentId) === FORM_COMPONENT_ID);
158
+ }
159
+ /**
160
+ * The same refusal, for a page, layout or component that CARRIES a form: the
161
+ * sentence names the two ways forward, because removing the form publishes
162
+ * the rest of the page.
163
+ */ export const FORMS_OFF_FOR_SITE_PAGE_VIOLATION = {
164
+ code: 'forms-off-for-site',
165
+ message: 'Forms is switched off for this site, so the form on this page would not ' + 'show or accept submissions. Remove the form, or switch Forms back on for ' + 'this site in Admin › Plugins, to publish it.'
166
+ };
167
+ /**
168
+ * The refusal for publishing a page, layout or component that carries a form
169
+ * on a site that switched Forms off, or `null` (AGL-3029). `formsOnForSite`
170
+ * absent means the caller could not tell, which refuses nothing.
171
+ */ export function formsOffPublishViolation(nodes, formsOnForSite) {
172
+ return formsOnForSite === false && nodesCarryForm(nodes) ? FORMS_OFF_FOR_SITE_PAGE_VIOLATION : null;
173
+ }
174
+ /**
175
+ * Everything this design would break, or an empty array.
176
+ *
177
+ * @param options.form the stored document, for what it ROUTES and what it
178
+ * names as its consent field. `routing` and
179
+ * `consentFieldName` are the only two parts read: the
180
+ * stored `fields` are the previous design's output,
181
+ * not a contract the new one owes anything to.
182
+ * @param options.formId the id this design is the design OF.
183
+ * @param options.nodes the flat node map, canvas or published.
184
+ * @param options.formNodeId the `form` node inside it.
185
+ * @param options.formsOnForSite whether Forms runs on the site the form is
186
+ * published to; `false` refuses the design outright.
187
+ * Absent, the caller could not tell, and nothing is
188
+ * refused for it.
189
+ */ export function checkFormContract(options) {
190
+ var _ref, _ref1, _ref2, _ref3;
191
+ var _options_componentIds, _options_componentIds1, _formNode_props, _form_routing;
192
+ const { form, formId, nodes, formNodeId } = options;
193
+ // Nothing about the design matters on a site that will not draw it.
194
+ if (options.formsOnForSite === false) return [
195
+ FORMS_OFF_FOR_SITE_VIOLATION
196
+ ];
197
+ const formComponentId = (_ref = (_options_componentIds = options.componentIds) == null ? void 0 : _options_componentIds.form) != null ? _ref : 'form';
198
+ const formFieldComponentId = (_ref1 = (_options_componentIds1 = options.componentIds) == null ? void 0 : _options_componentIds1.formField) != null ? _ref1 : 'formField';
199
+ const violations = [];
200
+ const formNode = formNodeId ? nodes == null ? void 0 : nodes[formNodeId] : undefined;
201
+ if (!formNode || formNode.componentId !== formComponentId) {
202
+ // Nothing else is answerable without it, and reporting a cascade of
203
+ // consequences would bury the one thing the author has to do.
204
+ return [
205
+ {
206
+ code: 'form-node-missing',
207
+ message: 'This design no longer contains a form. Submissions have nowhere ' + 'to come from, so nothing would reach the Inbox.'
208
+ }
209
+ ];
210
+ }
211
+ const boundId = String((_ref2 = (_formNode_props = formNode.props) == null ? void 0 : _formNode_props['formId']) != null ? _ref2 : '').trim();
212
+ if (boundId !== formId) {
213
+ violations.push({
214
+ code: 'form-id-unbound',
215
+ nodeId: formNodeId,
216
+ message: boundId ? `This form's design is bound to a different form (${boundId}). ` + 'Submissions would be filed under that one instead of this one.' : 'This form lost its binding. Submissions would still arrive in the ' + 'Inbox but would not appear in this form’s own list.'
217
+ });
218
+ }
219
+ const fields = drawnFields(nodes, formNodeId, formFieldComponentId);
220
+ const seen = new Map();
221
+ for (const field of fields){
222
+ if (!field.fieldName) {
223
+ violations.push({
224
+ code: 'field-unnamed',
225
+ nodeId: field.nodeId,
226
+ message: 'This field has no name, so whatever a visitor types into it ' + 'arrives under a shared key and cannot be told apart from any ' + 'other unnamed field.'
227
+ });
228
+ continue;
229
+ }
230
+ const first = seen.get(field.fieldName);
231
+ if (first !== undefined) {
232
+ violations.push({
233
+ code: 'field-name-duplicated',
234
+ nodeId: field.nodeId,
235
+ fieldName: field.fieldName,
236
+ message: `Another field is already called “${field.fieldName}”. ` + 'Two fields sharing a name arrive as one answer, and this one’s ' + 'value would be lost.'
237
+ });
238
+ continue;
239
+ }
240
+ seen.set(field.fieldName, field.nodeId);
241
+ }
242
+ const consentFieldName = String((_ref3 = form == null ? void 0 : form.consentFieldName) != null ? _ref3 : '').trim();
243
+ /*
244
+ * The two gates on a lead, reported one at a time in the order the route
245
+ * decides them: no address means no lead at all, which makes consent moot
246
+ * until a field exists to key one on.
247
+ */ if ((form == null ? void 0 : (_form_routing = form.routing) == null ? void 0 : _form_routing.lead) === true) {
248
+ if (!canYieldAnEmail(fields)) {
249
+ violations.push({
250
+ code: 'lead-routing-has-no-email-field',
251
+ nodeId: formNodeId,
252
+ message: 'This form creates a lead from the address someone gives it, and the ' + 'design has no email field. It would collect submissions and never ' + 'create a lead.'
253
+ });
254
+ } else if (!formFieldsCaptureConsent(fields, consentFieldName)) {
255
+ violations.push({
256
+ code: 'lead-routing-has-no-consent-field',
257
+ nodeId: formNodeId,
258
+ message: 'This form creates a lead from the address someone gives it, and ' + 'nothing on it records their consent. Every lead it filed would be ' + 'one the team cannot email — name a marketing consent field on the ' + 'form’s page.'
259
+ });
260
+ }
261
+ }
262
+ if (consentFieldName && !seen.has(consentFieldName)) {
263
+ violations.push({
264
+ code: 'consent-field-missing',
265
+ fieldName: consentFieldName,
266
+ message: `This form records marketing consent from a field called ` + `“${consentFieldName}”, which the design no longer has. ` + 'Opt-ins would stop being recorded without any other sign.'
267
+ });
268
+ }
269
+ return violations;
270
+ }
271
+ /**
272
+ * Whether this design may be published.
273
+ *
274
+ * Every violation is blocking. There is no advisory tier because there is no
275
+ * violation here an author would be right to ship: each one names data that
276
+ * silently fails to arrive, and a warning that can be clicked past is how a
277
+ * silent failure ships anyway.
278
+ */ export function formContractIsSatisfied(violations) {
279
+ return violations.length === 0;
280
+ }
281
+
282
+ //# sourceMappingURL=form-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/form-contract.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * What a form's DESIGN must still satisfy for its submissions to arrive.\n *\n * A reusable component is only ever drawn: the worst an author can do to one\n * is make it ugly, and the page still renders. A form is drawn AND it is a\n * contract — `/api/forms/submit` keys submissions on its id, reads consent out\n * of a field it names, and creates a lead from an address it expects to find.\n * Every one of those couplings is resolved by NAME at submit time, so the\n * design can break them, and breaking them is silent in every case: the form\n * still renders, the visitor still submits, the row still lands, and the thing\n * the merchant believed they were collecting is simply not there.\n *\n * That asymmetry is the whole reason this module exists. Publishing a form is\n * not \"save the drawing\"; it is \"promise the server can still read this\".\n *\n * ## The six silent failures, and why each one is checked here\n *\n * Every check below corresponds to something a design can do that produces NO\n * error at submit time. A design that fails loudly needs no guard — the author\n * finds out. These are the ones where nobody finds out.\n *\n * 1. **The form node stops naming this form.** Submissions carry `formId` and\n * the route stamps it only after verifying it against this host's forms;\n * the Inbox's per-form list is an equality on it. Clear or rebind it and\n * every later submission is unattributable — while still landing in the\n * Inbox, so nothing looks broken and the form's own list just stops\n * growing.\n * 2. **A field with no name.** `formFieldDeclsFromNodes` drops it, and the\n * runtime falls back to `name = fieldName || 'field'`, so several unnamed\n * inputs collapse onto ONE submission key. The visitor types, the value is\n * posted, and it is not retrievable under any name the author knows.\n * 3. **Two fields sharing a name.** `FormData` joins entries under one key,\n * so the second input contributes no separate value and the declaration\n * keeps only the first. Two questions, one answer.\n * 4. **Lead routing with nothing to extract an address from.**\n * `routing.lead` only ever fires when `extractEmailFromFields` finds one,\n * and that prefers a key matching `/email/i` before falling back to any\n * email-shaped value. A form with no such field can still route to leads\n * on paper and never create one.\n * 5. **Lead routing with nothing that records consent.** The route files\n * the lead either way, and stamps an opt-in on it only from the field the\n * form declares or from an undeclared field on the closed name list it\n * falls back to. A form with neither files leads nobody may email — the\n * send-time consent join refuses every one — so the sales team works a\n * list the campaigns cannot reach, and nothing at submit time says so.\n * 6. **A consent field that no longer exists.** `readFormDeclaredConsent`\n * looks up exactly `consentFieldName`. Rename or delete that field and it\n * returns `false` forever — the form keeps collecting the tick and the\n * opt-in stops being recorded. This is the one with consequences outside\n * the product, since an advertising basis that quietly stops is\n * indistinguishable downstream from one that was never given.\n *\n * ## What is NOT checked\n *\n * Anything the author can see. A missing label, an empty select, a field in\n * the wrong order — those are visible on the canvas and are the author's to\n * judge. This module is only for couplings that are invisible at design time\n * and asymptomatic at run time.\n *\n * Pure and dependency-free, like `forms.ts` beside it: it reaches client\n * bundles through `app-utils/index`, so nothing here may import a Node\n * builtin.\n */\n\nimport type {\n AglynNodeSchema,\n NodeId,\n} from '../foundation/definitions/components.types'\nimport {\n collectFormFieldNodeIds,\n FORM_COMPONENT_ID,\n type FormDocument,\n isMarketingConsentFieldName,\n} from './forms'\n\n/**\n * Which coupling a violation is about.\n *\n * A code rather than a message so a caller can decide presentation — the\n * besigner shows these beside the offending node, the API route puts them in\n * a 422 body — without either one parsing prose.\n */\nexport type FormContractViolationCode =\n | 'forms-off-for-site'\n | 'form-node-missing'\n | 'form-id-unbound'\n | 'field-unnamed'\n | 'field-name-duplicated'\n | 'lead-routing-has-no-email-field'\n | 'lead-routing-has-no-consent-field'\n | 'consent-field-missing'\n\n/** One way this design would fail to keep the server's side of the bargain. */\nexport interface FormContractViolation {\n code: FormContractViolationCode\n /** The node the author has to fix, when a single node is at fault. */\n nodeId?: NodeId\n /** The name at issue, for the two checks that are about names. */\n fieldName?: string\n /** Author-facing, and stated as the CONSEQUENCE rather than the rule. */\n message: string\n}\n\n/** A field as the design declares it, before any de-duplication. */\ninterface DrawnField {\n nodeId: NodeId\n fieldName: string\n fieldType: string\n}\n\n/**\n * `extractEmailFromFields` prefers a key matching this before falling back to\n * any email-shaped value. Restated rather than imported so this module stays\n * free of `contacts.ts`; {@link EMAIL_KEY_PATTERN} and that function agreeing\n * is asserted in the spec rather than assumed.\n */\nconst EMAIL_KEY_PATTERN = /email/i\n\n/**\n * Reads the fields a design draws, keeping every one of them.\n *\n * Deliberately NOT `formFieldDeclsFromNodes`. That function drops an unnamed\n * field and the second of a duplicate pair, which is right for adoption — it\n * describes what a page already submits — and useless here, because the\n * dropped ones are precisely what this module has to report. Asking it would\n * be asking a question whose answer has the evidence removed from it.\n */\nfunction drawnFields(\n nodes: Record<NodeId, AglynNodeSchema | undefined> | undefined | null,\n formNodeId: NodeId,\n formFieldComponentId: string,\n): DrawnField[] {\n return collectFormFieldNodeIds(nodes, formNodeId, formFieldComponentId).map(\n (nodeId) => {\n const props = (nodes?.[nodeId]?.props ?? {}) as Record<string, unknown>\n return {\n nodeId,\n fieldName: String(props['fieldName'] ?? '').trim(),\n fieldType: String(props['fieldType'] ?? 'text'),\n }\n },\n )\n}\n\n/**\n * Whether a submission carrying these fields could yield an address to key\n * a lead on — the one precondition of lead routing (AGL-2612).\n *\n * Exported because the check is asked in two places that never see a node\n * tree: the form's own page decides whether to offer the routing switch, and\n * the CRM's Leads section offers to turn routing on for a form from the\n * declared field list alone. Both must agree with the publish check here or\n * a switch flipped on one surface is refused on the next.\n */\nexport function formFieldsCanYieldAnEmail(\n fields: ReadonlyArray<{ fieldName: string; fieldType: string }>,\n): boolean {\n return fields.some(\n (field) =>\n field.fieldType === 'email' || EMAIL_KEY_PATTERN.test(field.fieldName),\n )\n}\n\n/** The same question, of the fields a design DRAWS. */\nfunction canYieldAnEmail(fields: DrawnField[]): boolean {\n return formFieldsCanYieldAnEmail(fields)\n}\n\n/**\n * Whether a submission carrying these fields could record an opt-in — the\n * other precondition of lead routing, and the one that decides whether a\n * lead is worth filing: a lead nobody consented with is one the campaigns\n * refuse at send time.\n *\n * Consent is recorded from the field the form DECLARES, or, when it declares\n * none, from an undeclared field the route recognizes by name. Whether a\n * declared field still exists is `consent-field-missing`'s question, asked\n * separately so a lost field is reported once, as the loss it is.\n *\n * Exported for the same two surfaces as {@link formFieldsCanYieldAnEmail}:\n * the switch on the form's page and the Leads section's offer must refuse\n * what the publish check would refuse.\n */\nexport function formFieldsCaptureConsent(\n fields: ReadonlyArray<{ fieldName: string }>,\n consentFieldName: string | null | undefined,\n): boolean {\n if (String(consentFieldName ?? '').trim()) return true\n return fields.some((field) => isMarketingConsentFieldName(field.fieldName))\n}\n\n/**\n * A site that switched Forms off (AGL-3029) publishes no form — neither a form\n * design nor a page, layout or component that carries one.\n *\n * Not one of the six silent failures above, and checked ahead of all of them:\n * on such a site the published page does not draw a form and `/api/forms/submit`\n * refuses every submission, so publishing one would put a hole on a live page\n * while the author believed they had shipped a form. Refusing it is what makes\n * the empty space on a page published BEFORE the switch the only kind there is.\n */\nexport const FORMS_OFF_FOR_SITE_VIOLATION: FormContractViolation = {\n code: 'forms-off-for-site',\n message:\n 'Forms is switched off for this site, so a form published here would not ' +\n 'show on its pages or accept submissions. Switch Forms back on for this ' +\n 'site in Admin › Plugins to publish it.',\n}\n\n/**\n * Whether a node map carries a form: a `form` node anywhere in it, bound to\n * an entity or drawn inline. Read by `componentId`, which every form node has\n * carried from the start, rather than by the `pluginId` a node was stamped\n * with when it was placed.\n */\nexport function nodesCarryForm(\n nodes: Record<NodeId, AglynNodeSchema | undefined> | undefined | null,\n): boolean {\n return Object.values(nodes ?? {}).some(\n (node) => node?.componentId === FORM_COMPONENT_ID,\n )\n}\n\n/**\n * The same refusal, for a page, layout or component that CARRIES a form: the\n * sentence names the two ways forward, because removing the form publishes\n * the rest of the page.\n */\nexport const FORMS_OFF_FOR_SITE_PAGE_VIOLATION: FormContractViolation = {\n code: 'forms-off-for-site',\n message:\n 'Forms is switched off for this site, so the form on this page would not ' +\n 'show or accept submissions. Remove the form, or switch Forms back on for ' +\n 'this site in Admin › Plugins, to publish it.',\n}\n\n/**\n * The refusal for publishing a page, layout or component that carries a form\n * on a site that switched Forms off, or `null` (AGL-3029). `formsOnForSite`\n * absent means the caller could not tell, which refuses nothing.\n */\nexport function formsOffPublishViolation(\n nodes: Record<NodeId, AglynNodeSchema | undefined> | undefined | null,\n formsOnForSite: boolean | undefined,\n): FormContractViolation | null {\n return formsOnForSite === false && nodesCarryForm(nodes)\n ? FORMS_OFF_FOR_SITE_PAGE_VIOLATION\n : null\n}\n\n/**\n * Everything this design would break, or an empty array.\n *\n * @param options.form the stored document, for what it ROUTES and what it\n * names as its consent field. `routing` and\n * `consentFieldName` are the only two parts read: the\n * stored `fields` are the previous design's output,\n * not a contract the new one owes anything to.\n * @param options.formId the id this design is the design OF.\n * @param options.nodes the flat node map, canvas or published.\n * @param options.formNodeId the `form` node inside it.\n * @param options.formsOnForSite whether Forms runs on the site the form is\n * published to; `false` refuses the design outright.\n * Absent, the caller could not tell, and nothing is\n * refused for it.\n */\nexport function checkFormContract(options: {\n form: Pick<FormDocument, 'routing' | 'consentFieldName'> | null | undefined\n formId: string\n nodes: Record<NodeId, AglynNodeSchema | undefined> | undefined | null\n formNodeId: NodeId | undefined | null\n /** Overridable for a host whose plugin registers these under other ids. */\n componentIds?: { form?: string; formField?: string }\n formsOnForSite?: boolean\n}): FormContractViolation[] {\n const { form, formId, nodes, formNodeId } = options\n // Nothing about the design matters on a site that will not draw it.\n if (options.formsOnForSite === false) return [FORMS_OFF_FOR_SITE_VIOLATION]\n const formComponentId = options.componentIds?.form ?? 'form'\n const formFieldComponentId = options.componentIds?.formField ?? 'formField'\n const violations: FormContractViolation[] = []\n\n const formNode = formNodeId ? nodes?.[formNodeId] : undefined\n if (!formNode || formNode.componentId !== formComponentId) {\n // Nothing else is answerable without it, and reporting a cascade of\n // consequences would bury the one thing the author has to do.\n return [\n {\n code: 'form-node-missing',\n message:\n 'This design no longer contains a form. Submissions have nowhere ' +\n 'to come from, so nothing would reach the Inbox.',\n },\n ]\n }\n\n const boundId = String(\n (formNode.props as Record<string, unknown> | undefined)?.['formId'] ?? '',\n ).trim()\n if (boundId !== formId) {\n violations.push({\n code: 'form-id-unbound',\n nodeId: formNodeId as NodeId,\n message: boundId\n ? `This form's design is bound to a different form (${boundId}). ` +\n 'Submissions would be filed under that one instead of this one.'\n : 'This form lost its binding. Submissions would still arrive in the ' +\n 'Inbox but would not appear in this form’s own list.',\n })\n }\n\n const fields = drawnFields(nodes, formNodeId as NodeId, formFieldComponentId)\n\n const seen = new Map<string, NodeId>()\n for (const field of fields) {\n if (!field.fieldName) {\n violations.push({\n code: 'field-unnamed',\n nodeId: field.nodeId,\n message:\n 'This field has no name, so whatever a visitor types into it ' +\n 'arrives under a shared key and cannot be told apart from any ' +\n 'other unnamed field.',\n })\n continue\n }\n const first = seen.get(field.fieldName)\n if (first !== undefined) {\n violations.push({\n code: 'field-name-duplicated',\n nodeId: field.nodeId,\n fieldName: field.fieldName,\n message:\n `Another field is already called “${field.fieldName}”. ` +\n 'Two fields sharing a name arrive as one answer, and this one’s ' +\n 'value would be lost.',\n })\n continue\n }\n seen.set(field.fieldName, field.nodeId)\n }\n\n const consentFieldName = String(form?.consentFieldName ?? '').trim()\n\n /*\n * The two gates on a lead, reported one at a time in the order the route\n * decides them: no address means no lead at all, which makes consent moot\n * until a field exists to key one on.\n */\n if (form?.routing?.lead === true) {\n if (!canYieldAnEmail(fields)) {\n violations.push({\n code: 'lead-routing-has-no-email-field',\n nodeId: formNodeId as NodeId,\n message:\n 'This form creates a lead from the address someone gives it, and the ' +\n 'design has no email field. It would collect submissions and never ' +\n 'create a lead.',\n })\n } else if (!formFieldsCaptureConsent(fields, consentFieldName)) {\n violations.push({\n code: 'lead-routing-has-no-consent-field',\n nodeId: formNodeId as NodeId,\n message:\n 'This form creates a lead from the address someone gives it, and ' +\n 'nothing on it records their consent. Every lead it filed would be ' +\n 'one the team cannot email — name a marketing consent field on the ' +\n 'form’s page.',\n })\n }\n }\n\n if (consentFieldName && !seen.has(consentFieldName)) {\n violations.push({\n code: 'consent-field-missing',\n fieldName: consentFieldName,\n message:\n `This form records marketing consent from a field called ` +\n `“${consentFieldName}”, which the design no longer has. ` +\n 'Opt-ins would stop being recorded without any other sign.',\n })\n }\n\n return violations\n}\n\n/**\n * Whether this design may be published.\n *\n * Every violation is blocking. There is no advisory tier because there is no\n * violation here an author would be right to ship: each one names data that\n * silently fails to arrive, and a warning that can be clicked past is how a\n * silent failure ships anyway.\n */\nexport function formContractIsSatisfied(\n violations: FormContractViolation[],\n): boolean {\n return violations.length === 0\n}\n"],"names":["collectFormFieldNodeIds","FORM_COMPONENT_ID","isMarketingConsentFieldName","EMAIL_KEY_PATTERN","drawnFields","nodes","formNodeId","formFieldComponentId","map","nodeId","props","fieldName","String","trim","fieldType","formFieldsCanYieldAnEmail","fields","some","field","test","canYieldAnEmail","formFieldsCaptureConsent","consentFieldName","FORMS_OFF_FOR_SITE_VIOLATION","code","message","nodesCarryForm","Object","values","node","componentId","FORMS_OFF_FOR_SITE_PAGE_VIOLATION","formsOffPublishViolation","formsOnForSite","checkFormContract","options","formNode","form","formId","formComponentId","componentIds","formField","violations","undefined","boundId","push","seen","Map","first","get","set","routing","lead","has","formContractIsSatisfied","length"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DC,GAMD,SACEA,uBAAuB,EACvBC,iBAAiB,EAEjBC,2BAA2B,QACtB,aAAS;AAqChB;;;;;CAKC,GACD,MAAMC,oBAAoB;AAE1B;;;;;;;;CAQC,GACD,SAASC,YACPC,KAAqE,EACrEC,UAAkB,EAClBC,oBAA4B;IAE5B,OAAOP,wBAAwBK,OAAOC,YAAYC,sBAAsBC,GAAG,CACzE,CAACC;kBAIqBC,kBACAA;YAJLL;QAAf,MAAMK,gBAASL,0BAAAA,gBAAAA,KAAO,CAACI,OAAO,qBAAfJ,cAAiBK,KAAK,mBAAI,CAAC;QAC1C,OAAO;YACLD;YACAE,WAAWC,QAAOF,mBAAAA,KAAK,CAAC,YAAY,YAAlBA,mBAAsB,IAAIG,IAAI;YAChDC,WAAWF,QAAOF,mBAAAA,KAAK,CAAC,YAAY,YAAlBA,mBAAsB;QAC1C;IACF;AAEJ;AAEA;;;;;;;;;CASC,GACD,OAAO,SAASK,0BACdC,MAA+D;IAE/D,OAAOA,OAAOC,IAAI,CAChB,CAACC,QACCA,MAAMJ,SAAS,KAAK,WAAWX,kBAAkBgB,IAAI,CAACD,MAAMP,SAAS;AAE3E;AAEA,qDAAqD,GACrD,SAASS,gBAAgBJ,MAAoB;IAC3C,OAAOD,0BAA0BC;AACnC;AAEA;;;;;;;;;;;;;;CAcC,GACD,OAAO,SAASK,yBACdL,MAA4C,EAC5CM,gBAA2C;IAE3C,IAAIV,OAAOU,2BAAAA,mBAAoB,IAAIT,IAAI,IAAI,OAAO;IAClD,OAAOG,OAAOC,IAAI,CAAC,CAACC,QAAUhB,4BAA4BgB,MAAMP,SAAS;AAC3E;AAEA;;;;;;;;;CASC,GACD,OAAO,MAAMY,+BAAsD;IACjEC,MAAM;IACNC,SACE,6EACA,4EACA;AACJ,EAAC;AAED;;;;;CAKC,GACD,OAAO,SAASC,eACdrB,KAAqE;IAErE,OAAOsB,OAAOC,MAAM,CAACvB,gBAAAA,QAAS,CAAC,GAAGY,IAAI,CACpC,CAACY,OAASA,CAAAA,wBAAAA,KAAMC,WAAW,MAAK7B;AAEpC;AAEA;;;;CAIC,GACD,OAAO,MAAM8B,oCAA2D;IACtEP,MAAM;IACNC,SACE,6EACA,8EACA;AACJ,EAAC;AAED;;;;CAIC,GACD,OAAO,SAASO,yBACd3B,KAAqE,EACrE4B,cAAmC;IAEnC,OAAOA,mBAAmB,SAASP,eAAerB,SAC9C0B,oCACA;AACN;AAEA;;;;;;;;;;;;;;;CAeC,GACD,OAAO,SAASG,kBAAkBC,OAQjC;;QAIyBA,uBACKA,wBAkB1BC,iBAoDCC;IA1EJ,MAAM,EAAEA,IAAI,EAAEC,MAAM,EAAEjC,KAAK,EAAEC,UAAU,EAAE,GAAG6B;IAC5C,oEAAoE;IACpE,IAAIA,QAAQF,cAAc,KAAK,OAAO,OAAO;QAACV;KAA6B;IAC3E,MAAMgB,2BAAkBJ,wBAAAA,QAAQK,YAAY,qBAApBL,sBAAsBE,IAAI,mBAAI;IACtD,MAAM9B,iCAAuB4B,yBAAAA,QAAQK,YAAY,qBAApBL,uBAAsBM,SAAS,oBAAI;IAChE,MAAMC,aAAsC,EAAE;IAE9C,MAAMN,WAAW9B,aAAaD,yBAAAA,KAAO,CAACC,WAAW,GAAGqC;IACpD,IAAI,CAACP,YAAYA,SAASN,WAAW,KAAKS,iBAAiB;QACzD,oEAAoE;QACpE,8DAA8D;QAC9D,OAAO;YACL;gBACEf,MAAM;gBACNC,SACE,qEACA;YACJ;SACD;IACH;IAEA,MAAMmB,UAAUhC,iBACbwB,kBAAAA,SAAS1B,KAAK,qBAAf,AAAC0B,eAAwD,CAAC,SAAS,oBAAI,IACvEvB,IAAI;IACN,IAAI+B,YAAYN,QAAQ;QACtBI,WAAWG,IAAI,CAAC;YACdrB,MAAM;YACNf,QAAQH;YACRmB,SAASmB,UACL,CAAC,iDAAiD,EAAEA,QAAQ,GAAG,CAAC,GAChE,mEACA,uEACA;QACN;IACF;IAEA,MAAM5B,SAASZ,YAAYC,OAAOC,YAAsBC;IAExD,MAAMuC,OAAO,IAAIC;IACjB,KAAK,MAAM7B,SAASF,OAAQ;QAC1B,IAAI,CAACE,MAAMP,SAAS,EAAE;YACpB+B,WAAWG,IAAI,CAAC;gBACdrB,MAAM;gBACNf,QAAQS,MAAMT,MAAM;gBACpBgB,SACE,iEACA,kEACA;YACJ;YACA;QACF;QACA,MAAMuB,QAAQF,KAAKG,GAAG,CAAC/B,MAAMP,SAAS;QACtC,IAAIqC,UAAUL,WAAW;YACvBD,WAAWG,IAAI,CAAC;gBACdrB,MAAM;gBACNf,QAAQS,MAAMT,MAAM;gBACpBE,WAAWO,MAAMP,SAAS;gBAC1Bc,SACE,CAAC,iCAAiC,EAAEP,MAAMP,SAAS,CAAC,GAAG,CAAC,GACxD,oEACA;YACJ;YACA;QACF;QACAmC,KAAKI,GAAG,CAAChC,MAAMP,SAAS,EAAEO,MAAMT,MAAM;IACxC;IAEA,MAAMa,mBAAmBV,gBAAOyB,wBAAAA,KAAMf,gBAAgB,oBAAI,IAAIT,IAAI;IAElE;;;;GAIC,GACD,IAAIwB,CAAAA,yBAAAA,gBAAAA,KAAMc,OAAO,qBAAbd,cAAee,IAAI,MAAK,MAAM;QAChC,IAAI,CAAChC,gBAAgBJ,SAAS;YAC5B0B,WAAWG,IAAI,CAAC;gBACdrB,MAAM;gBACNf,QAAQH;gBACRmB,SACE,yEACA,uEACA;YACJ;QACF,OAAO,IAAI,CAACJ,yBAAyBL,QAAQM,mBAAmB;YAC9DoB,WAAWG,IAAI,CAAC;gBACdrB,MAAM;gBACNf,QAAQH;gBACRmB,SACE,qEACA,uEACA,uEACA;YACJ;QACF;IACF;IAEA,IAAIH,oBAAoB,CAACwB,KAAKO,GAAG,CAAC/B,mBAAmB;QACnDoB,WAAWG,IAAI,CAAC;YACdrB,MAAM;YACNb,WAAWW;YACXG,SACE,CAAC,wDAAwD,CAAC,GAC1D,CAAC,CAAC,EAAEH,iBAAiB,mCAAmC,CAAC,GACzD;QACJ;IACF;IAEA,OAAOoB;AACT;AAEA;;;;;;;CAOC,GACD,OAAO,SAASY,wBACdZ,UAAmC;IAEnC,OAAOA,WAAWa,MAAM,KAAK;AAC/B"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { AglynNodeSchema, NodeId } from '../foundation';
18
+ /**
19
+ * Where a form's submissions are also written as dataset records, read off
20
+ * the form as a page renders it.
21
+ */
22
+ export interface FormDatasetBinding {
23
+ /** The dataset, by id, so renaming it never breaks the binding (AGL-556). */
24
+ datasetId?: string;
25
+ /** The legacy by-name binding, honored when no id is set (AGL-141). */
26
+ datasetName?: string;
27
+ /** Submitted field name → the dataset field id the value is stored under. */
28
+ fieldMap: Record<string, string>;
29
+ }
30
+ /** The most fields a submission may carry, and so the most a map can name. */
31
+ export declare const FORM_DATASET_BINDING_MAX_FIELDS = 20;
32
+ /**
33
+ * The dataset binding a `form` node declares, or null when it declares none.
34
+ *
35
+ * The map is built the way the browser builds the submission: every
36
+ * `formField` under the form, in reading order, keyed by the name the field
37
+ * submits under (`fieldName`, or `field` when it has none), and a later field
38
+ * under the same name replaces an earlier one. A field with no
39
+ * `datasetFieldId` maps nothing and its value falls back to matching dataset
40
+ * fields by name.
41
+ *
42
+ * Read from the COMPOSED tree, so a form grafted from a layout, a reusable
43
+ * component or a form entity is read exactly as the page renders it.
44
+ */
45
+ export declare function formDatasetBindingOf(nodes: Record<NodeId, AglynNodeSchema | undefined> | undefined | null, formNodeId: NodeId): FormDatasetBinding | null;
46
+ /** Every `form` node in a composed tree that declares a dataset binding. */
47
+ export declare function formDatasetBindingsOf(nodes: Record<NodeId, AglynNodeSchema | undefined> | undefined | null): Array<{
48
+ nodeId: NodeId;
49
+ binding: FormDatasetBinding;
50
+ }>;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ import { _ as _extends } from "@swc/helpers/_/_extends";
17
+ import { collectFormFieldNodeIds, FORM_COMPONENT_ID } from "./forms.js";
18
+ /** The most fields a submission may carry, and so the most a map can name. */ export const FORM_DATASET_BINDING_MAX_FIELDS = 20;
19
+ const text = (value, max)=>typeof value === 'string' ? value.trim().slice(0, max) : '';
20
+ /**
21
+ * The dataset binding a `form` node declares, or null when it declares none.
22
+ *
23
+ * The map is built the way the browser builds the submission: every
24
+ * `formField` under the form, in reading order, keyed by the name the field
25
+ * submits under (`fieldName`, or `field` when it has none), and a later field
26
+ * under the same name replaces an earlier one. A field with no
27
+ * `datasetFieldId` maps nothing and its value falls back to matching dataset
28
+ * fields by name.
29
+ *
30
+ * Read from the COMPOSED tree, so a form grafted from a layout, a reusable
31
+ * component or a form entity is read exactly as the page renders it.
32
+ */ export function formDatasetBindingOf(nodes, formNodeId) {
33
+ var _node_props;
34
+ const node = nodes == null ? void 0 : nodes[formNodeId];
35
+ if ((node == null ? void 0 : node.componentId) !== FORM_COMPONENT_ID) return null;
36
+ const props = (_node_props = node.props) != null ? _node_props : {};
37
+ const datasetId = text(props['datasetId'], 128);
38
+ const datasetName = text(props['datasetName'], 60);
39
+ if (!datasetId && !datasetName) return null;
40
+ const fieldMap = {};
41
+ for (const fieldNodeId of collectFormFieldNodeIds(nodes, formNodeId)){
42
+ var _ref;
43
+ var _nodes_fieldNodeId;
44
+ const fieldProps = (_ref = nodes == null ? void 0 : (_nodes_fieldNodeId = nodes[fieldNodeId]) == null ? void 0 : _nodes_fieldNodeId.props) != null ? _ref : {};
45
+ const datasetFieldId = text(fieldProps['datasetFieldId'], 64);
46
+ if (!datasetFieldId) continue;
47
+ const submittedKey = text(fieldProps['fieldName'], 64) || 'field';
48
+ if (!(submittedKey in fieldMap) && Object.keys(fieldMap).length >= FORM_DATASET_BINDING_MAX_FIELDS) {
49
+ continue;
50
+ }
51
+ fieldMap[submittedKey] = datasetFieldId;
52
+ }
53
+ return _extends({}, datasetId ? {
54
+ datasetId
55
+ } : {}, datasetName ? {
56
+ datasetName
57
+ } : {}, {
58
+ fieldMap
59
+ });
60
+ }
61
+ /** Every `form` node in a composed tree that declares a dataset binding. */ export function formDatasetBindingsOf(nodes) {
62
+ const found = [];
63
+ for (const [nodeId, node] of Object.entries(nodes != null ? nodes : {})){
64
+ if ((node == null ? void 0 : node.componentId) !== FORM_COMPONENT_ID) continue;
65
+ const binding = formDatasetBindingOf(nodes, nodeId);
66
+ if (binding) found.push({
67
+ nodeId: nodeId,
68
+ binding
69
+ });
70
+ }
71
+ return found;
72
+ }
73
+
74
+ //# sourceMappingURL=form-dataset-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/form-dataset-binding.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AglynNodeSchema, NodeId } from '../foundation'\nimport { collectFormFieldNodeIds, FORM_COMPONENT_ID } from './forms'\n\n/**\n * Where a form's submissions are also written as dataset records, read off\n * the form as a page renders it.\n */\nexport interface FormDatasetBinding {\n /** The dataset, by id, so renaming it never breaks the binding (AGL-556). */\n datasetId?: string\n /** The legacy by-name binding, honored when no id is set (AGL-141). */\n datasetName?: string\n /** Submitted field name → the dataset field id the value is stored under. */\n fieldMap: Record<string, string>\n}\n\n/** The most fields a submission may carry, and so the most a map can name. */\nexport const FORM_DATASET_BINDING_MAX_FIELDS = 20\n\nconst text = (value: unknown, max: number): string =>\n typeof value === 'string' ? value.trim().slice(0, max) : ''\n\n/**\n * The dataset binding a `form` node declares, or null when it declares none.\n *\n * The map is built the way the browser builds the submission: every\n * `formField` under the form, in reading order, keyed by the name the field\n * submits under (`fieldName`, or `field` when it has none), and a later field\n * under the same name replaces an earlier one. A field with no\n * `datasetFieldId` maps nothing and its value falls back to matching dataset\n * fields by name.\n *\n * Read from the COMPOSED tree, so a form grafted from a layout, a reusable\n * component or a form entity is read exactly as the page renders it.\n */\nexport function formDatasetBindingOf(\n nodes: Record<NodeId, AglynNodeSchema | undefined> | undefined | null,\n formNodeId: NodeId,\n): FormDatasetBinding | null {\n const node = nodes?.[formNodeId]\n if (node?.componentId !== FORM_COMPONENT_ID) return null\n const props = (node.props ?? {}) as Record<string, unknown>\n const datasetId = text(props['datasetId'], 128)\n const datasetName = text(props['datasetName'], 60)\n if (!datasetId && !datasetName) return null\n const fieldMap: Record<string, string> = {}\n for (const fieldNodeId of collectFormFieldNodeIds(nodes, formNodeId)) {\n const fieldProps = (nodes?.[fieldNodeId]?.props ?? {}) as Record<\n string,\n unknown\n >\n const datasetFieldId = text(fieldProps['datasetFieldId'], 64)\n if (!datasetFieldId) continue\n const submittedKey = text(fieldProps['fieldName'], 64) || 'field'\n if (\n !(submittedKey in fieldMap) &&\n Object.keys(fieldMap).length >= FORM_DATASET_BINDING_MAX_FIELDS\n ) {\n continue\n }\n fieldMap[submittedKey] = datasetFieldId\n }\n return {\n ...(datasetId ? { datasetId } : {}),\n ...(datasetName ? { datasetName } : {}),\n fieldMap,\n }\n}\n\n/** Every `form` node in a composed tree that declares a dataset binding. */\nexport function formDatasetBindingsOf(\n nodes: Record<NodeId, AglynNodeSchema | undefined> | undefined | null,\n): Array<{ nodeId: NodeId; binding: FormDatasetBinding }> {\n const found: Array<{ nodeId: NodeId; binding: FormDatasetBinding }> = []\n for (const [nodeId, node] of Object.entries(nodes ?? {})) {\n if (node?.componentId !== FORM_COMPONENT_ID) continue\n const binding = formDatasetBindingOf(nodes, nodeId as NodeId)\n if (binding) found.push({ nodeId: nodeId as NodeId, binding })\n }\n return found\n}\n"],"names":["collectFormFieldNodeIds","FORM_COMPONENT_ID","FORM_DATASET_BINDING_MAX_FIELDS","text","value","max","trim","slice","formDatasetBindingOf","nodes","formNodeId","node","componentId","props","datasetId","datasetName","fieldMap","fieldNodeId","fieldProps","datasetFieldId","submittedKey","Object","keys","length","formDatasetBindingsOf","found","nodeId","entries","binding","push"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC;AAGD,SAASA,uBAAuB,EAAEC,iBAAiB,QAAQ,aAAS;AAepE,4EAA4E,GAC5E,OAAO,MAAMC,kCAAkC,GAAE;AAEjD,MAAMC,OAAO,CAACC,OAAgBC,MAC5B,OAAOD,UAAU,WAAWA,MAAME,IAAI,GAAGC,KAAK,CAAC,GAAGF,OAAO;AAE3D;;;;;;;;;;;;CAYC,GACD,OAAO,SAASG,qBACdC,KAAqE,EACrEC,UAAkB;QAIHC;IAFf,MAAMA,OAAOF,yBAAAA,KAAO,CAACC,WAAW;IAChC,IAAIC,CAAAA,wBAAAA,KAAMC,WAAW,MAAKX,mBAAmB,OAAO;IACpD,MAAMY,SAASF,cAAAA,KAAKE,KAAK,YAAVF,cAAc,CAAC;IAC9B,MAAMG,YAAYX,KAAKU,KAAK,CAAC,YAAY,EAAE;IAC3C,MAAME,cAAcZ,KAAKU,KAAK,CAAC,cAAc,EAAE;IAC/C,IAAI,CAACC,aAAa,CAACC,aAAa,OAAO;IACvC,MAAMC,WAAmC,CAAC;IAC1C,KAAK,MAAMC,eAAejB,wBAAwBS,OAAOC,YAAa;;YAChDD;QAApB,MAAMS,qBAAcT,0BAAAA,qBAAAA,KAAO,CAACQ,YAAY,qBAApBR,mBAAsBI,KAAK,mBAAI,CAAC;QAIpD,MAAMM,iBAAiBhB,KAAKe,UAAU,CAAC,iBAAiB,EAAE;QAC1D,IAAI,CAACC,gBAAgB;QACrB,MAAMC,eAAejB,KAAKe,UAAU,CAAC,YAAY,EAAE,OAAO;QAC1D,IACE,CAAEE,CAAAA,gBAAgBJ,QAAO,KACzBK,OAAOC,IAAI,CAACN,UAAUO,MAAM,IAAIrB,iCAChC;YACA;QACF;QACAc,QAAQ,CAACI,aAAa,GAAGD;IAC3B;IACA,OAAO,aACDL,YAAY;QAAEA;IAAU,IAAI,CAAC,GAC7BC,cAAc;QAAEA;IAAY,IAAI,CAAC;QACrCC;;AAEJ;AAEA,0EAA0E,GAC1E,OAAO,SAASQ,sBACdf,KAAqE;IAErE,MAAMgB,QAAgE,EAAE;IACxE,KAAK,MAAM,CAACC,QAAQf,KAAK,IAAIU,OAAOM,OAAO,CAAClB,gBAAAA,QAAS,CAAC,GAAI;QACxD,IAAIE,CAAAA,wBAAAA,KAAMC,WAAW,MAAKX,mBAAmB;QAC7C,MAAM2B,UAAUpB,qBAAqBC,OAAOiB;QAC5C,IAAIE,SAASH,MAAMI,IAAI,CAAC;YAAEH,QAAQA;YAAkBE;QAAQ;IAC9D;IACA,OAAOH;AACT"}