@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,172 @@
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 CrmScoped } from './crm';
18
+ /** The most a template's name may hold. */
19
+ export declare const CRM_EMAIL_TEMPLATE_NAME_MAX = 80;
20
+ /**
21
+ * The listing's window, and the ceiling the console's create respects.
22
+ *
23
+ * A LOOKUP rather than a list: the picker is a menu a rep opens, and two
24
+ * hundred named letters for one workspace is past what anybody scrolls.
25
+ * Bounded so the listen cannot grow with the org.
26
+ */
27
+ export declare const CRM_EMAIL_TEMPLATES_LIMIT = 200;
28
+ /** A whole letter under a name, or a paragraph under one. */
29
+ export declare const CRM_EMAIL_TEMPLATE_KINDS: readonly ["template", "snippet"];
30
+ export type CrmEmailTemplateKind = (typeof CRM_EMAIL_TEMPLATE_KINDS)[number];
31
+ export declare const CRM_EMAIL_TEMPLATE_KIND_LABELS: Record<CrmEmailTemplateKind, string>;
32
+ export declare function isCrmEmailTemplateKind(value: unknown): value is CrmEmailTemplateKind;
33
+ /** The team's, or one person's. */
34
+ export declare const CRM_EMAIL_TEMPLATE_VISIBILITIES: readonly ["shared", "personal"];
35
+ export type CrmEmailTemplateVisibility = (typeof CRM_EMAIL_TEMPLATE_VISIBILITIES)[number];
36
+ export declare const CRM_EMAIL_TEMPLATE_VISIBILITY_LABELS: Record<CrmEmailTemplateVisibility, string>;
37
+ export declare function isCrmEmailTemplateVisibility(value: unknown): value is CrmEmailTemplateVisibility;
38
+ /**
39
+ * `orgs/{orgId}/crmEmailTemplates/{templateId}`.
40
+ *
41
+ * Scoped like a task (AGL-2637): under a site it carries that site's tokens
42
+ * and `hostId`; written from the organization's own hub it carries the org
43
+ * token and `hostId: null`, because a letter the whole workspace keeps is
44
+ * not any one brand's. `ownerUid` is set on a personal template only, and
45
+ * is the one member the listing shows it to.
46
+ */
47
+ export interface CrmEmailTemplate extends Omit<CrmScoped, 'hostId'> {
48
+ /** The site it was written under, or `null` for the organization's own. */
49
+ hostId: string | null;
50
+ name: string;
51
+ /** The subject line a template fills in; `''` on a snippet. */
52
+ subject: string;
53
+ /** Plain text, with merge fields — see {@link renderCrmMergeFields}. */
54
+ body: string;
55
+ kind: CrmEmailTemplateKind;
56
+ visibility: CrmEmailTemplateVisibility;
57
+ /** The one member a personal template is listed for; absent on a shared one. */
58
+ ownerUid?: string;
59
+ /** Who made it — `'api'` for a key, which has no uid. */
60
+ createdByUid: string;
61
+ createdAtMs: number;
62
+ updatedAtMs: number;
63
+ }
64
+ /** A template as a listener hands it back: the document plus its id. */
65
+ export type CrmEmailTemplateRow = CrmEmailTemplate & {
66
+ $id: string;
67
+ };
68
+ /**
69
+ * Whether a template belongs in `uid`'s menu: every shared one, and the
70
+ * personal ones they own. A colleague's personal template is readable under
71
+ * the rules and hidden here — see the module header.
72
+ */
73
+ export declare function crmEmailTemplateIsListed(template: Pick<CrmEmailTemplate, 'visibility' | 'ownerUid'>, uid: string | null | undefined): boolean;
74
+ /**
75
+ * A stored document held to shape, for a listener that reads it raw.
76
+ *
77
+ * Lenient where the rules are not: a kind or a visibility the union does not
78
+ * name reads as the default, because a row some other writer produced is
79
+ * still a letter somebody kept, and dropping it from the menu would lose it.
80
+ */
81
+ export declare function normalizeCrmEmailTemplate(row: Record<string, unknown> | null | undefined): CrmEmailTemplate;
82
+ /** The group a field belongs to, as the picker headings it. */
83
+ export type CrmMergeFieldGroup = 'Contact' | 'Lead' | 'Deal' | 'You' | 'Site';
84
+ export interface CrmMergeFieldDefinition {
85
+ key: string;
86
+ label: string;
87
+ group: CrmMergeFieldGroup;
88
+ }
89
+ /**
90
+ * Every field the resolver knows, in the order the picker offers them.
91
+ *
92
+ * A fixed list rather than a path into the document, because a merge field
93
+ * is a promise about what a person will read: `contact.title` has to mean
94
+ * the job title on every send, whatever the document happens to call it
95
+ * this year, and a free path would let a template reach into a note or a
96
+ * consent map.
97
+ */
98
+ export declare const CRM_MERGE_FIELDS: readonly CrmMergeFieldDefinition[];
99
+ /** `{{key}}` — the one spelling the resolver reads and the picker inserts. */
100
+ export declare function crmMergeFieldToken(key: string): string;
101
+ /**
102
+ * What the resolver reads from: the documents as they are stored, so the
103
+ * send route hands over what it already read and the dialog what it
104
+ * fetched for the preview, with no projection in between to drift.
105
+ */
106
+ export interface CrmMergeContext {
107
+ /** The contact document, `orgs/{orgId}/contacts/{id}`. */
108
+ contact?: Record<string, unknown> | null;
109
+ /**
110
+ * The holder group whose facet names the contact — the sending site's,
111
+ * since a name, a job title and a company are one holder's knowledge of
112
+ * a person (`readContactFacet`). The canonical name is the fallback.
113
+ */
114
+ contactGroupId?: string | null;
115
+ /** The lead document, `hosts/{hostId}/leads/{id}`. */
116
+ lead?: Record<string, unknown> | null;
117
+ /** The deal document, `orgs/{orgId}/deals/{id}`. */
118
+ deal?: Record<string, unknown> | null;
119
+ /** The person sending, as their token or session names them. */
120
+ sender?: {
121
+ name?: string | null;
122
+ email?: string | null;
123
+ } | null;
124
+ /** The site the email leaves from. */
125
+ site?: {
126
+ name?: string | null;
127
+ } | null;
128
+ /**
129
+ * Fields a caller brings from a record of its own, keyed by the whole
130
+ * `group.field` name — a plugin's `enrollment.personalLine`, say.
131
+ *
132
+ * Read only for a group the resolver above does not know, so no caller can
133
+ * change what `contact.email` means. The fixed list is a promise about what
134
+ * a person will read, and this is where a caller that makes its own promise
135
+ * keeps it: the value is passed as written, never looked up by path.
136
+ */
137
+ extra?: Readonly<Record<string, string | null | undefined>> | null;
138
+ }
139
+ export interface CrmMergeResult {
140
+ /** The text with every field replaced — by its value, or by nothing. */
141
+ text: string;
142
+ /** The fields that rendered as nothing, unique, in order of appearance. */
143
+ unresolved: string[];
144
+ }
145
+ /** The merge fields a text names, unique, in order of first appearance. */
146
+ export declare function crmMergeFieldsIn(text: string): string[];
147
+ export declare function hasCrmMergeFields(text: string): boolean;
148
+ /** A name as one string → its first word and the rest. */
149
+ export declare function splitPersonName(name: unknown): {
150
+ firstName: string;
151
+ lastName: string;
152
+ };
153
+ /**
154
+ * A deal's amount as a letter prints it.
155
+ *
156
+ * A fixed locale rather than the reader's, on purpose: the server has no
157
+ * reader, and the preview has to print what the server will send. Cents
158
+ * that are not a number render as nothing, so a deal with no value greets
159
+ * nobody with "$0.00".
160
+ */
161
+ export declare function formatCrmMergeAmount(cents: unknown, currency: unknown): string;
162
+ /**
163
+ * Every merge field in `text` replaced from `context`, and the ones that
164
+ * had nothing to say. Pure, and never throws: a missing record, an unknown
165
+ * field, a malformed context each render as nothing and are named in
166
+ * `unresolved`.
167
+ */
168
+ export declare function resolveCrmMergeFields(text: string, context: CrmMergeContext | null | undefined): CrmMergeResult;
169
+ /** {@link resolveCrmMergeFields}, text alone — what the send route sends. */
170
+ export declare function renderCrmMergeFields(text: string, context: CrmMergeContext | null | undefined): string;
171
+ /** What the dialog says under a draft whose fields have nothing to fill. */
172
+ export declare function crmMergeUnresolvedMessage(unresolved: readonly string[]): string;
@@ -0,0 +1,382 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ /**
3
+ * @license
4
+ * Copyright 2026 Aglyn LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */ /*==========================================
18
+ * EMAIL TEMPLATES, SNIPPETS AND MERGE FIELDS (AGL-2658).
19
+ *
20
+ * A one-to-one email is a letter, and a rep writes the same three letters
21
+ * all week: the follow-up, the proposal cover note, the "still keen?". A
22
+ * TEMPLATE is one of those letters kept under a name — a subject and a body
23
+ * the dialog fills in whole. A SNIPPET is a paragraph kept under a name —
24
+ * a signature block, a pricing line — inserted where the caret is. Both
25
+ * carry MERGE FIELDS, `{{contact.firstName}}` and the like, which the send
26
+ * route fills from the record the email is about, so a template written
27
+ * once reads as a letter to each person it is sent to.
28
+ *
29
+ * ## One resolver, run twice
30
+ *
31
+ * The server resolves at send time, off the documents it has already read
32
+ * to find the recipient, and what it writes to the timeline is the letter
33
+ * as it left. The dialog runs the SAME resolver over the same documents to
34
+ * show the rep what will go out, so the preview and the message cannot
35
+ * disagree. The resolver is pure and lives here, beside the model, so
36
+ * neither caller can drift into its own grammar.
37
+ *
38
+ * ## What a field with no value does
39
+ *
40
+ * It renders as nothing. A template that greets `{{contact.firstName}}` is
41
+ * sent to a contact known only by email as "Hi ," — which is why the dialog
42
+ * counts the empty fields and says so before the rep clicks Send, and why
43
+ * an unknown field name renders as nothing too rather than as its own
44
+ * braces: a typo in a merge field must not reach a customer as `{{contct.
45
+ * firstName}}`. Nothing is escaped, because the mail is plain text.
46
+ *
47
+ * ## Shared or personal
48
+ *
49
+ * A template is either the team's — every CRM editor may use and change it
50
+ * — or one person's, listed for its owner alone. The rules gate the writes
51
+ * (`cloud/firebase-firestore.rules`); the listing hides a colleague's
52
+ * personal rows the way a private saved view is hidden (AGL-2617), because
53
+ * a rule per reader would need a query per reader.
54
+ *==========================================*/ import { contactDisplayName, normalizeContactEmail, readContactFacet } from "./contacts.js";
55
+ import { CRM_EMAIL_BODY_MAX, CRM_EMAIL_SUBJECT_MAX } from "./crm.js";
56
+ /** The most a template's name may hold. */ export const CRM_EMAIL_TEMPLATE_NAME_MAX = 80;
57
+ /**
58
+ * The listing's window, and the ceiling the console's create respects.
59
+ *
60
+ * A LOOKUP rather than a list: the picker is a menu a rep opens, and two
61
+ * hundred named letters for one workspace is past what anybody scrolls.
62
+ * Bounded so the listen cannot grow with the org.
63
+ */ export const CRM_EMAIL_TEMPLATES_LIMIT = 200;
64
+ /** A whole letter under a name, or a paragraph under one. */ export const CRM_EMAIL_TEMPLATE_KINDS = [
65
+ 'template',
66
+ 'snippet'
67
+ ];
68
+ export const CRM_EMAIL_TEMPLATE_KIND_LABELS = {
69
+ template: 'Template',
70
+ snippet: 'Snippet'
71
+ };
72
+ export function isCrmEmailTemplateKind(value) {
73
+ return typeof value === 'string' && CRM_EMAIL_TEMPLATE_KINDS.includes(value);
74
+ }
75
+ /** The team's, or one person's. */ export const CRM_EMAIL_TEMPLATE_VISIBILITIES = [
76
+ 'shared',
77
+ 'personal'
78
+ ];
79
+ export const CRM_EMAIL_TEMPLATE_VISIBILITY_LABELS = {
80
+ shared: 'Shared',
81
+ personal: 'Personal'
82
+ };
83
+ export function isCrmEmailTemplateVisibility(value) {
84
+ return typeof value === 'string' && CRM_EMAIL_TEMPLATE_VISIBILITIES.includes(value);
85
+ }
86
+ /**
87
+ * Whether a template belongs in `uid`'s menu: every shared one, and the
88
+ * personal ones they own. A colleague's personal template is readable under
89
+ * the rules and hidden here — see the module header.
90
+ */ export function crmEmailTemplateIsListed(template, uid) {
91
+ if (template.visibility !== 'personal') return true;
92
+ return Boolean(uid) && template.ownerUid === uid;
93
+ }
94
+ const asText = (value, max)=>typeof value === 'string' ? value.slice(0, max) : '';
95
+ const asMs = (value)=>typeof value === 'number' && Number.isFinite(value) ? value : 0;
96
+ /**
97
+ * A stored document held to shape, for a listener that reads it raw.
98
+ *
99
+ * Lenient where the rules are not: a kind or a visibility the union does not
100
+ * name reads as the default, because a row some other writer produced is
101
+ * still a letter somebody kept, and dropping it from the menu would lose it.
102
+ */ export function normalizeCrmEmailTemplate(row) {
103
+ const data = row != null ? row : {};
104
+ const visibility = isCrmEmailTemplateVisibility(data['visibility']) ? data['visibility'] : 'shared';
105
+ const ownerUid = asText(data['ownerUid'], 128);
106
+ return _extends({
107
+ name: asText(data['name'], CRM_EMAIL_TEMPLATE_NAME_MAX).trim(),
108
+ subject: asText(data['subject'], CRM_EMAIL_SUBJECT_MAX),
109
+ body: asText(data['body'], CRM_EMAIL_BODY_MAX),
110
+ kind: isCrmEmailTemplateKind(data['kind']) ? data['kind'] : 'template',
111
+ visibility
112
+ }, visibility === 'personal' && ownerUid ? {
113
+ ownerUid
114
+ } : {}, {
115
+ createdByUid: asText(data['createdByUid'], 128),
116
+ createdAtMs: asMs(data['createdAtMs']),
117
+ updatedAtMs: asMs(data['updatedAtMs']),
118
+ hostId: typeof data['hostId'] === 'string' ? data['hostId'] : null,
119
+ visibleTo: Array.isArray(data['visibleTo']) ? data['visibleTo'].map(String) : [],
120
+ createdAt: data['createdAt'],
121
+ updatedAt: data['updatedAt']
122
+ });
123
+ }
124
+ /**
125
+ * Every field the resolver knows, in the order the picker offers them.
126
+ *
127
+ * A fixed list rather than a path into the document, because a merge field
128
+ * is a promise about what a person will read: `contact.title` has to mean
129
+ * the job title on every send, whatever the document happens to call it
130
+ * this year, and a free path would let a template reach into a note or a
131
+ * consent map.
132
+ */ export const CRM_MERGE_FIELDS = [
133
+ {
134
+ key: 'contact.firstName',
135
+ label: 'First name',
136
+ group: 'Contact'
137
+ },
138
+ {
139
+ key: 'contact.lastName',
140
+ label: 'Last name',
141
+ group: 'Contact'
142
+ },
143
+ {
144
+ key: 'contact.name',
145
+ label: 'Full name',
146
+ group: 'Contact'
147
+ },
148
+ {
149
+ key: 'contact.email',
150
+ label: 'Email address',
151
+ group: 'Contact'
152
+ },
153
+ {
154
+ key: 'contact.company',
155
+ label: 'Company',
156
+ group: 'Contact'
157
+ },
158
+ {
159
+ key: 'contact.title',
160
+ label: 'Job title',
161
+ group: 'Contact'
162
+ },
163
+ {
164
+ key: 'lead.firstName',
165
+ label: 'First name',
166
+ group: 'Lead'
167
+ },
168
+ {
169
+ key: 'lead.lastName',
170
+ label: 'Last name',
171
+ group: 'Lead'
172
+ },
173
+ {
174
+ key: 'lead.name',
175
+ label: 'Full name',
176
+ group: 'Lead'
177
+ },
178
+ {
179
+ key: 'lead.email',
180
+ label: 'Email address',
181
+ group: 'Lead'
182
+ },
183
+ {
184
+ key: 'deal.name',
185
+ label: 'Deal name',
186
+ group: 'Deal'
187
+ },
188
+ {
189
+ key: 'deal.amount',
190
+ label: 'Deal amount',
191
+ group: 'Deal'
192
+ },
193
+ {
194
+ key: 'sender.firstName',
195
+ label: 'Your first name',
196
+ group: 'You'
197
+ },
198
+ {
199
+ key: 'sender.name',
200
+ label: 'Your name',
201
+ group: 'You'
202
+ },
203
+ {
204
+ key: 'sender.email',
205
+ label: 'Your email address',
206
+ group: 'You'
207
+ },
208
+ {
209
+ key: 'site.name',
210
+ label: 'Site name',
211
+ group: 'Site'
212
+ }
213
+ ];
214
+ /** `{{key}}` — the one spelling the resolver reads and the picker inserts. */ export function crmMergeFieldToken(key) {
215
+ return `{{${key}}}`;
216
+ }
217
+ /*
218
+ * `{{ group.field }}`, spaces allowed inside the braces because a rep will
219
+ * type them. A single brace pair or a bare word is left alone: a letter may
220
+ * legitimately contain braces.
221
+ */ const MERGE_FIELD_PATTERN = /\{\{\s*([A-Za-z][A-Za-z0-9]*\.[A-Za-z][A-Za-z0-9]*)\s*\}\}/g;
222
+ /** The merge fields a text names, unique, in order of first appearance. */ export function crmMergeFieldsIn(text) {
223
+ const seen = new Set();
224
+ const fields = [];
225
+ for (const match of String(text != null ? text : '').matchAll(MERGE_FIELD_PATTERN)){
226
+ const key = match[1];
227
+ if (seen.has(key)) continue;
228
+ seen.add(key);
229
+ fields.push(key);
230
+ }
231
+ return fields;
232
+ }
233
+ export function hasCrmMergeFields(text) {
234
+ MERGE_FIELD_PATTERN.lastIndex = 0;
235
+ return MERGE_FIELD_PATTERN.test(String(text != null ? text : ''));
236
+ }
237
+ /** A name as one string → its first word and the rest. */ export function splitPersonName(name) {
238
+ var _words_;
239
+ const words = String(name != null ? name : '').trim().split(/\s+/).filter(Boolean);
240
+ return {
241
+ firstName: (_words_ = words[0]) != null ? _words_ : '',
242
+ lastName: words.slice(1).join(' ')
243
+ };
244
+ }
245
+ /**
246
+ * A deal's amount as a letter prints it.
247
+ *
248
+ * A fixed locale rather than the reader's, on purpose: the server has no
249
+ * reader, and the preview has to print what the server will send. Cents
250
+ * that are not a number render as nothing, so a deal with no value greets
251
+ * nobody with "$0.00".
252
+ */ export function formatCrmMergeAmount(cents, currency) {
253
+ if (typeof cents !== 'number' || !Number.isFinite(cents)) return '';
254
+ const code = String(currency || 'usd').toUpperCase();
255
+ const amount = cents / 100;
256
+ try {
257
+ return new Intl.NumberFormat('en-US', {
258
+ style: 'currency',
259
+ currency: code
260
+ }).format(amount);
261
+ } catch (unused) {
262
+ return `${amount.toFixed(2)} ${code}`;
263
+ }
264
+ }
265
+ const text = (value)=>typeof value === 'string' ? value.trim() : '';
266
+ /** One field's value from the context, or `''` for anything it cannot answer. */ function resolveCrmMergeField(key, context) {
267
+ const [group, field] = key.split('.');
268
+ switch(group){
269
+ case 'contact':
270
+ {
271
+ const contact = context.contact;
272
+ if (!contact) return '';
273
+ const groupId = text(context.contactGroupId);
274
+ const facet = readContactFacet(contact, groupId);
275
+ const name = groupId ? contactDisplayName(contact, groupId) : text(contact['name']);
276
+ switch(field){
277
+ case 'firstName':
278
+ return splitPersonName(name).firstName;
279
+ case 'lastName':
280
+ return splitPersonName(name).lastName;
281
+ case 'name':
282
+ return name;
283
+ case 'email':
284
+ var _normalizeContactEmail;
285
+ return (_normalizeContactEmail = normalizeContactEmail(contact['email'])) != null ? _normalizeContactEmail : '';
286
+ case 'company':
287
+ return text(facet.companyName);
288
+ case 'title':
289
+ return text(facet.jobTitle);
290
+ default:
291
+ return '';
292
+ }
293
+ }
294
+ case 'lead':
295
+ {
296
+ const lead = context.lead;
297
+ if (!lead) return '';
298
+ switch(field){
299
+ case 'firstName':
300
+ return splitPersonName(lead['name']).firstName;
301
+ case 'lastName':
302
+ return splitPersonName(lead['name']).lastName;
303
+ case 'name':
304
+ return text(lead['name']);
305
+ case 'email':
306
+ var _normalizeContactEmail1;
307
+ return (_normalizeContactEmail1 = normalizeContactEmail(lead['email'])) != null ? _normalizeContactEmail1 : '';
308
+ default:
309
+ return '';
310
+ }
311
+ }
312
+ case 'deal':
313
+ {
314
+ const deal = context.deal;
315
+ if (!deal) return '';
316
+ switch(field){
317
+ case 'name':
318
+ return text(deal['title']);
319
+ case 'amount':
320
+ return formatCrmMergeAmount(deal['amountCents'], deal['currency']);
321
+ default:
322
+ return '';
323
+ }
324
+ }
325
+ case 'sender':
326
+ {
327
+ const sender = context.sender;
328
+ if (!sender) return '';
329
+ switch(field){
330
+ case 'firstName':
331
+ return splitPersonName(sender.name).firstName;
332
+ case 'name':
333
+ return text(sender.name);
334
+ case 'email':
335
+ var _normalizeContactEmail2;
336
+ return (_normalizeContactEmail2 = normalizeContactEmail(sender.email)) != null ? _normalizeContactEmail2 : '';
337
+ default:
338
+ return '';
339
+ }
340
+ }
341
+ case 'site':
342
+ var _context_site;
343
+ return field === 'name' ? text((_context_site = context.site) == null ? void 0 : _context_site.name) : '';
344
+ default:
345
+ {
346
+ const extra = context.extra;
347
+ return extra && Object.prototype.hasOwnProperty.call(extra, key) ? text(extra[key]) : '';
348
+ }
349
+ }
350
+ }
351
+ /**
352
+ * Every merge field in `text` replaced from `context`, and the ones that
353
+ * had nothing to say. Pure, and never throws: a missing record, an unknown
354
+ * field, a malformed context each render as nothing and are named in
355
+ * `unresolved`.
356
+ */ export function resolveCrmMergeFields(text, context) {
357
+ const source = String(text != null ? text : '');
358
+ const ctx = context != null ? context : {};
359
+ const unresolved = new Set();
360
+ const rendered = source.replace(MERGE_FIELD_PATTERN, (_match, key)=>{
361
+ const value = resolveCrmMergeField(key, ctx);
362
+ if (!value) unresolved.add(key);
363
+ return value;
364
+ });
365
+ return {
366
+ text: rendered,
367
+ unresolved: [
368
+ ...unresolved
369
+ ]
370
+ };
371
+ }
372
+ /** {@link resolveCrmMergeFields}, text alone — what the send route sends. */ export function renderCrmMergeFields(text, context) {
373
+ return resolveCrmMergeFields(text, context).text;
374
+ }
375
+ /** What the dialog says under a draft whose fields have nothing to fill. */ export function crmMergeUnresolvedMessage(unresolved) {
376
+ if (unresolved.length === 0) return '';
377
+ const count = unresolved.length;
378
+ const noun = count === 1 ? '1 field has no value' : `${count} fields have no value`;
379
+ return `${noun}: ${unresolved.map(crmMergeFieldToken).join(', ')}`;
380
+ }
381
+
382
+ //# sourceMappingURL=crm-email-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/crm-email-templates.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 * EMAIL TEMPLATES, SNIPPETS AND MERGE FIELDS (AGL-2658).\n *\n * A one-to-one email is a letter, and a rep writes the same three letters\n * all week: the follow-up, the proposal cover note, the \"still keen?\". A\n * TEMPLATE is one of those letters kept under a name — a subject and a body\n * the dialog fills in whole. A SNIPPET is a paragraph kept under a name —\n * a signature block, a pricing line — inserted where the caret is. Both\n * carry MERGE FIELDS, `{{contact.firstName}}` and the like, which the send\n * route fills from the record the email is about, so a template written\n * once reads as a letter to each person it is sent to.\n *\n * ## One resolver, run twice\n *\n * The server resolves at send time, off the documents it has already read\n * to find the recipient, and what it writes to the timeline is the letter\n * as it left. The dialog runs the SAME resolver over the same documents to\n * show the rep what will go out, so the preview and the message cannot\n * disagree. The resolver is pure and lives here, beside the model, so\n * neither caller can drift into its own grammar.\n *\n * ## What a field with no value does\n *\n * It renders as nothing. A template that greets `{{contact.firstName}}` is\n * sent to a contact known only by email as \"Hi ,\" — which is why the dialog\n * counts the empty fields and says so before the rep clicks Send, and why\n * an unknown field name renders as nothing too rather than as its own\n * braces: a typo in a merge field must not reach a customer as `{{contct.\n * firstName}}`. Nothing is escaped, because the mail is plain text.\n *\n * ## Shared or personal\n *\n * A template is either the team's — every CRM editor may use and change it\n * — or one person's, listed for its owner alone. The rules gate the writes\n * (`cloud/firebase-firestore.rules`); the listing hides a colleague's\n * personal rows the way a private saved view is hidden (AGL-2617), because\n * a rule per reader would need a query per reader.\n *==========================================*/\n\nimport {\n contactDisplayName,\n normalizeContactEmail,\n readContactFacet,\n} from './contacts'\nimport { CRM_EMAIL_BODY_MAX, CRM_EMAIL_SUBJECT_MAX, type CrmScoped } from './crm'\n\n/** The most a template's name may hold. */\nexport const CRM_EMAIL_TEMPLATE_NAME_MAX = 80\n\n/**\n * The listing's window, and the ceiling the console's create respects.\n *\n * A LOOKUP rather than a list: the picker is a menu a rep opens, and two\n * hundred named letters for one workspace is past what anybody scrolls.\n * Bounded so the listen cannot grow with the org.\n */\nexport const CRM_EMAIL_TEMPLATES_LIMIT = 200\n\n/** A whole letter under a name, or a paragraph under one. */\nexport const CRM_EMAIL_TEMPLATE_KINDS = ['template', 'snippet'] as const\nexport type CrmEmailTemplateKind = (typeof CRM_EMAIL_TEMPLATE_KINDS)[number]\n\nexport const CRM_EMAIL_TEMPLATE_KIND_LABELS: Record<CrmEmailTemplateKind, string> = {\n template: 'Template',\n snippet: 'Snippet',\n}\n\nexport function isCrmEmailTemplateKind(value: unknown): value is CrmEmailTemplateKind {\n return (\n typeof value === 'string' &&\n (CRM_EMAIL_TEMPLATE_KINDS as readonly string[]).includes(value)\n )\n}\n\n/** The team's, or one person's. */\nexport const CRM_EMAIL_TEMPLATE_VISIBILITIES = ['shared', 'personal'] as const\nexport type CrmEmailTemplateVisibility = (typeof CRM_EMAIL_TEMPLATE_VISIBILITIES)[number]\n\nexport const CRM_EMAIL_TEMPLATE_VISIBILITY_LABELS: Record<CrmEmailTemplateVisibility, string> = {\n shared: 'Shared',\n personal: 'Personal',\n}\n\nexport function isCrmEmailTemplateVisibility(\n value: unknown,\n): value is CrmEmailTemplateVisibility {\n return (\n typeof value === 'string' &&\n (CRM_EMAIL_TEMPLATE_VISIBILITIES as readonly string[]).includes(value)\n )\n}\n\n/**\n * `orgs/{orgId}/crmEmailTemplates/{templateId}`.\n *\n * Scoped like a task (AGL-2637): under a site it carries that site's tokens\n * and `hostId`; written from the organization's own hub it carries the org\n * token and `hostId: null`, because a letter the whole workspace keeps is\n * not any one brand's. `ownerUid` is set on a personal template only, and\n * is the one member the listing shows it to.\n */\nexport interface CrmEmailTemplate extends Omit<CrmScoped, 'hostId'> {\n /** The site it was written under, or `null` for the organization's own. */\n hostId: string | null\n name: string\n /** The subject line a template fills in; `''` on a snippet. */\n subject: string\n /** Plain text, with merge fields — see {@link renderCrmMergeFields}. */\n body: string\n kind: CrmEmailTemplateKind\n visibility: CrmEmailTemplateVisibility\n /** The one member a personal template is listed for; absent on a shared one. */\n ownerUid?: string\n /** Who made it — `'api'` for a key, which has no uid. */\n createdByUid: string\n createdAtMs: number\n updatedAtMs: number\n}\n\n/** A template as a listener hands it back: the document plus its id. */\nexport type CrmEmailTemplateRow = CrmEmailTemplate & { $id: string }\n\n/**\n * Whether a template belongs in `uid`'s menu: every shared one, and the\n * personal ones they own. A colleague's personal template is readable under\n * the rules and hidden here — see the module header.\n */\nexport function crmEmailTemplateIsListed(\n template: Pick<CrmEmailTemplate, 'visibility' | 'ownerUid'>,\n uid: string | null | undefined,\n): boolean {\n if (template.visibility !== 'personal') return true\n return Boolean(uid) && template.ownerUid === uid\n}\n\nconst asText = (value: unknown, max: number): string =>\n typeof value === 'string' ? value.slice(0, max) : ''\n\nconst asMs = (value: unknown): number =>\n typeof value === 'number' && Number.isFinite(value) ? value : 0\n\n/**\n * A stored document held to shape, for a listener that reads it raw.\n *\n * Lenient where the rules are not: a kind or a visibility the union does not\n * name reads as the default, because a row some other writer produced is\n * still a letter somebody kept, and dropping it from the menu would lose it.\n */\nexport function normalizeCrmEmailTemplate(\n row: Record<string, unknown> | null | undefined,\n): CrmEmailTemplate {\n const data = row ?? {}\n const visibility = isCrmEmailTemplateVisibility(data['visibility'])\n ? data['visibility']\n : 'shared'\n const ownerUid = asText(data['ownerUid'], 128)\n return {\n name: asText(data['name'], CRM_EMAIL_TEMPLATE_NAME_MAX).trim(),\n subject: asText(data['subject'], CRM_EMAIL_SUBJECT_MAX),\n body: asText(data['body'], CRM_EMAIL_BODY_MAX),\n kind: isCrmEmailTemplateKind(data['kind']) ? data['kind'] : 'template',\n visibility,\n ...(visibility === 'personal' && ownerUid ? { ownerUid } : {}),\n createdByUid: asText(data['createdByUid'], 128),\n createdAtMs: asMs(data['createdAtMs']),\n updatedAtMs: asMs(data['updatedAtMs']),\n hostId: typeof data['hostId'] === 'string' ? data['hostId'] : null,\n visibleTo: Array.isArray(data['visibleTo'])\n ? (data['visibleTo'] as unknown[]).map(String)\n : [],\n createdAt: data['createdAt'],\n updatedAt: data['updatedAt'],\n }\n}\n\n/*==========================================\n * MERGE FIELDS.\n *==========================================*/\n\n/** The group a field belongs to, as the picker headings it. */\nexport type CrmMergeFieldGroup = 'Contact' | 'Lead' | 'Deal' | 'You' | 'Site'\n\nexport interface CrmMergeFieldDefinition {\n key: string\n label: string\n group: CrmMergeFieldGroup\n}\n\n/**\n * Every field the resolver knows, in the order the picker offers them.\n *\n * A fixed list rather than a path into the document, because a merge field\n * is a promise about what a person will read: `contact.title` has to mean\n * the job title on every send, whatever the document happens to call it\n * this year, and a free path would let a template reach into a note or a\n * consent map.\n */\nexport const CRM_MERGE_FIELDS: readonly CrmMergeFieldDefinition[] = [\n { key: 'contact.firstName', label: 'First name', group: 'Contact' },\n { key: 'contact.lastName', label: 'Last name', group: 'Contact' },\n { key: 'contact.name', label: 'Full name', group: 'Contact' },\n { key: 'contact.email', label: 'Email address', group: 'Contact' },\n { key: 'contact.company', label: 'Company', group: 'Contact' },\n { key: 'contact.title', label: 'Job title', group: 'Contact' },\n { key: 'lead.firstName', label: 'First name', group: 'Lead' },\n { key: 'lead.lastName', label: 'Last name', group: 'Lead' },\n { key: 'lead.name', label: 'Full name', group: 'Lead' },\n { key: 'lead.email', label: 'Email address', group: 'Lead' },\n { key: 'deal.name', label: 'Deal name', group: 'Deal' },\n { key: 'deal.amount', label: 'Deal amount', group: 'Deal' },\n { key: 'sender.firstName', label: 'Your first name', group: 'You' },\n { key: 'sender.name', label: 'Your name', group: 'You' },\n { key: 'sender.email', label: 'Your email address', group: 'You' },\n { key: 'site.name', label: 'Site name', group: 'Site' },\n]\n\n/** `{{key}}` — the one spelling the resolver reads and the picker inserts. */\nexport function crmMergeFieldToken(key: string): string {\n return `{{${key}}}`\n}\n\n/**\n * What the resolver reads from: the documents as they are stored, so the\n * send route hands over what it already read and the dialog what it\n * fetched for the preview, with no projection in between to drift.\n */\nexport interface CrmMergeContext {\n /** The contact document, `orgs/{orgId}/contacts/{id}`. */\n contact?: Record<string, unknown> | null\n /**\n * The holder group whose facet names the contact — the sending site's,\n * since a name, a job title and a company are one holder's knowledge of\n * a person (`readContactFacet`). The canonical name is the fallback.\n */\n contactGroupId?: string | null\n /** The lead document, `hosts/{hostId}/leads/{id}`. */\n lead?: Record<string, unknown> | null\n /** The deal document, `orgs/{orgId}/deals/{id}`. */\n deal?: Record<string, unknown> | null\n /** The person sending, as their token or session names them. */\n sender?: { name?: string | null; email?: string | null } | null\n /** The site the email leaves from. */\n site?: { name?: string | null } | null\n /**\n * Fields a caller brings from a record of its own, keyed by the whole\n * `group.field` name — a plugin's `enrollment.personalLine`, say.\n *\n * Read only for a group the resolver above does not know, so no caller can\n * change what `contact.email` means. The fixed list is a promise about what\n * a person will read, and this is where a caller that makes its own promise\n * keeps it: the value is passed as written, never looked up by path.\n */\n extra?: Readonly<Record<string, string | null | undefined>> | null\n}\n\nexport interface CrmMergeResult {\n /** The text with every field replaced — by its value, or by nothing. */\n text: string\n /** The fields that rendered as nothing, unique, in order of appearance. */\n unresolved: string[]\n}\n\n/*\n * `{{ group.field }}`, spaces allowed inside the braces because a rep will\n * type them. A single brace pair or a bare word is left alone: a letter may\n * legitimately contain braces.\n */\nconst MERGE_FIELD_PATTERN = /\\{\\{\\s*([A-Za-z][A-Za-z0-9]*\\.[A-Za-z][A-Za-z0-9]*)\\s*\\}\\}/g\n\n/** The merge fields a text names, unique, in order of first appearance. */\nexport function crmMergeFieldsIn(text: string): string[] {\n const seen = new Set<string>()\n const fields: string[] = []\n for (const match of String(text ?? '').matchAll(MERGE_FIELD_PATTERN)) {\n const key = match[1]\n if (seen.has(key)) continue\n seen.add(key)\n fields.push(key)\n }\n return fields\n}\n\nexport function hasCrmMergeFields(text: string): boolean {\n MERGE_FIELD_PATTERN.lastIndex = 0\n return MERGE_FIELD_PATTERN.test(String(text ?? ''))\n}\n\n/** A name as one string → its first word and the rest. */\nexport function splitPersonName(name: unknown): { firstName: string; lastName: string } {\n const words = String(name ?? '')\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n return {\n firstName: words[0] ?? '',\n lastName: words.slice(1).join(' '),\n }\n}\n\n/**\n * A deal's amount as a letter prints it.\n *\n * A fixed locale rather than the reader's, on purpose: the server has no\n * reader, and the preview has to print what the server will send. Cents\n * that are not a number render as nothing, so a deal with no value greets\n * nobody with \"$0.00\".\n */\nexport function formatCrmMergeAmount(cents: unknown, currency: unknown): string {\n if (typeof cents !== 'number' || !Number.isFinite(cents)) return ''\n const code = String(currency || 'usd').toUpperCase()\n const amount = cents / 100\n try {\n return new Intl.NumberFormat('en-US', { style: 'currency', currency: code }).format(amount)\n } catch {\n return `${amount.toFixed(2)} ${code}`\n }\n}\n\nconst text = (value: unknown): string => (typeof value === 'string' ? value.trim() : '')\n\n/** One field's value from the context, or `''` for anything it cannot answer. */\nfunction resolveCrmMergeField(key: string, context: CrmMergeContext): string {\n const [group, field] = key.split('.')\n switch (group) {\n case 'contact': {\n const contact = context.contact\n if (!contact) return ''\n const groupId = text(context.contactGroupId)\n const facet = readContactFacet(contact, groupId)\n const name = groupId\n ? contactDisplayName(contact, groupId)\n : text(contact['name'])\n switch (field) {\n case 'firstName':\n return splitPersonName(name).firstName\n case 'lastName':\n return splitPersonName(name).lastName\n case 'name':\n return name\n case 'email':\n return normalizeContactEmail(contact['email']) ?? ''\n case 'company':\n return text(facet.companyName)\n case 'title':\n return text(facet.jobTitle)\n default:\n return ''\n }\n }\n case 'lead': {\n const lead = context.lead\n if (!lead) return ''\n switch (field) {\n case 'firstName':\n return splitPersonName(lead['name']).firstName\n case 'lastName':\n return splitPersonName(lead['name']).lastName\n case 'name':\n return text(lead['name'])\n case 'email':\n return normalizeContactEmail(lead['email']) ?? ''\n default:\n return ''\n }\n }\n case 'deal': {\n const deal = context.deal\n if (!deal) return ''\n switch (field) {\n case 'name':\n return text(deal['title'])\n case 'amount':\n return formatCrmMergeAmount(deal['amountCents'], deal['currency'])\n default:\n return ''\n }\n }\n case 'sender': {\n const sender = context.sender\n if (!sender) return ''\n switch (field) {\n case 'firstName':\n return splitPersonName(sender.name).firstName\n case 'name':\n return text(sender.name)\n case 'email':\n return normalizeContactEmail(sender.email) ?? ''\n default:\n return ''\n }\n }\n case 'site':\n return field === 'name' ? text(context.site?.name) : ''\n default: {\n const extra = context.extra\n return extra && Object.prototype.hasOwnProperty.call(extra, key)\n ? text(extra[key])\n : ''\n }\n }\n}\n\n/**\n * Every merge field in `text` replaced from `context`, and the ones that\n * had nothing to say. Pure, and never throws: a missing record, an unknown\n * field, a malformed context each render as nothing and are named in\n * `unresolved`.\n */\nexport function resolveCrmMergeFields(\n text: string,\n context: CrmMergeContext | null | undefined,\n): CrmMergeResult {\n const source = String(text ?? '')\n const ctx = context ?? {}\n const unresolved = new Set<string>()\n const rendered = source.replace(MERGE_FIELD_PATTERN, (_match, key: string) => {\n const value = resolveCrmMergeField(key, ctx)\n if (!value) unresolved.add(key)\n return value\n })\n return { text: rendered, unresolved: [...unresolved] }\n}\n\n/** {@link resolveCrmMergeFields}, text alone — what the send route sends. */\nexport function renderCrmMergeFields(\n text: string,\n context: CrmMergeContext | null | undefined,\n): string {\n return resolveCrmMergeFields(text, context).text\n}\n\n/** What the dialog says under a draft whose fields have nothing to fill. */\nexport function crmMergeUnresolvedMessage(unresolved: readonly string[]): string {\n if (unresolved.length === 0) return ''\n const count = unresolved.length\n const noun = count === 1 ? '1 field has no value' : `${count} fields have no value`\n return `${noun}: ${unresolved.map(crmMergeFieldToken).join(', ')}`\n}\n"],"names":["contactDisplayName","normalizeContactEmail","readContactFacet","CRM_EMAIL_BODY_MAX","CRM_EMAIL_SUBJECT_MAX","CRM_EMAIL_TEMPLATE_NAME_MAX","CRM_EMAIL_TEMPLATES_LIMIT","CRM_EMAIL_TEMPLATE_KINDS","CRM_EMAIL_TEMPLATE_KIND_LABELS","template","snippet","isCrmEmailTemplateKind","value","includes","CRM_EMAIL_TEMPLATE_VISIBILITIES","CRM_EMAIL_TEMPLATE_VISIBILITY_LABELS","shared","personal","isCrmEmailTemplateVisibility","crmEmailTemplateIsListed","uid","visibility","Boolean","ownerUid","asText","max","slice","asMs","Number","isFinite","normalizeCrmEmailTemplate","row","data","name","trim","subject","body","kind","createdByUid","createdAtMs","updatedAtMs","hostId","visibleTo","Array","isArray","map","String","createdAt","updatedAt","CRM_MERGE_FIELDS","key","label","group","crmMergeFieldToken","MERGE_FIELD_PATTERN","crmMergeFieldsIn","text","seen","Set","fields","match","matchAll","has","add","push","hasCrmMergeFields","lastIndex","test","splitPersonName","words","split","filter","firstName","lastName","join","formatCrmMergeAmount","cents","currency","code","toUpperCase","amount","Intl","NumberFormat","style","format","toFixed","resolveCrmMergeField","context","field","contact","groupId","contactGroupId","facet","companyName","jobTitle","lead","deal","sender","email","site","extra","Object","prototype","hasOwnProperty","call","resolveCrmMergeFields","source","ctx","unresolved","rendered","replace","_match","renderCrmMergeFields","crmMergeUnresolvedMessage","length","count","noun"],"mappings":"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"}