@aglyn/aglyn 1.0.0-beta.221 → 1.0.0-beta.222

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 (346) hide show
  1. package/package.json +15 -11
  2. package/src/lib/app-utils/agent-openapi.js +1 -1
  3. package/src/lib/app-utils/agent-openapi.js.map +1 -1
  4. package/src/lib/app-utils/analytics-events.d.ts +3 -2
  5. package/src/lib/app-utils/analytics-events.js +3 -2
  6. package/src/lib/app-utils/analytics-events.js.map +1 -1
  7. package/src/lib/app-utils/api-plugins.d.ts +30 -0
  8. package/src/lib/app-utils/api-plugins.js +24 -1
  9. package/src/lib/app-utils/api-plugins.js.map +1 -1
  10. package/src/lib/app-utils/author-html.d.ts +1 -1
  11. package/src/lib/app-utils/author-html.js.map +1 -1
  12. package/src/lib/app-utils/bandwidth-cap.d.ts +12 -1
  13. package/src/lib/app-utils/bandwidth-cap.js +17 -1
  14. package/src/lib/app-utils/bandwidth-cap.js.map +1 -1
  15. package/src/lib/app-utils/compose-reusable-components.d.ts +19 -0
  16. package/src/lib/app-utils/compose-reusable-components.js +116 -26
  17. package/src/lib/app-utils/compose-reusable-components.js.map +1 -1
  18. package/src/lib/app-utils/console-routes.d.ts +4 -0
  19. package/src/lib/app-utils/console-routes.js +3 -0
  20. package/src/lib/app-utils/console-routes.js.map +1 -1
  21. package/src/lib/app-utils/contacts.d.ts +71 -0
  22. package/src/lib/app-utils/contacts.js +55 -0
  23. package/src/lib/app-utils/contacts.js.map +1 -1
  24. package/src/lib/app-utils/contexts.d.ts +1 -0
  25. package/src/lib/app-utils/contexts.js +1 -0
  26. package/src/lib/app-utils/contexts.js.map +1 -1
  27. package/src/lib/app-utils/crm-email-templates.js +21 -4
  28. package/src/lib/app-utils/crm-email-templates.js.map +1 -1
  29. package/src/lib/app-utils/crm-kinds.d.ts +2 -0
  30. package/src/lib/app-utils/crm-kinds.js +1 -0
  31. package/src/lib/app-utils/crm-kinds.js.map +1 -1
  32. package/src/lib/app-utils/crm.d.ts +1199 -67
  33. package/src/lib/app-utils/crm.js +1951 -310
  34. package/src/lib/app-utils/crm.js.map +1 -1
  35. package/src/lib/app-utils/csv-import.d.ts +10 -38
  36. package/src/lib/app-utils/csv-import.js +17 -42
  37. package/src/lib/app-utils/csv-import.js.map +1 -1
  38. package/src/lib/app-utils/csv.d.ts +32 -11
  39. package/src/lib/app-utils/csv.js +43 -5
  40. package/src/lib/app-utils/csv.js.map +1 -1
  41. package/src/lib/app-utils/default-site.d.ts +116 -0
  42. package/src/lib/app-utils/default-site.js +1024 -0
  43. package/src/lib/app-utils/default-site.js.map +1 -0
  44. package/src/lib/app-utils/docs-help.generated.d.ts +22 -22
  45. package/src/lib/app-utils/docs-help.generated.js +44 -10
  46. package/src/lib/app-utils/docs-help.generated.js.map +1 -1
  47. package/src/lib/app-utils/docs-index.generated.js +738 -150
  48. package/src/lib/app-utils/docs-index.generated.js.map +1 -1
  49. package/src/lib/app-utils/draft-placeholders.d.ts +76 -0
  50. package/src/lib/app-utils/draft-placeholders.js +115 -0
  51. package/src/lib/app-utils/draft-placeholders.js.map +1 -0
  52. package/src/lib/app-utils/entity-picker-context.d.ts +19 -15
  53. package/src/lib/app-utils/entity-picker-context.js +4 -4
  54. package/src/lib/app-utils/entity-picker-context.js.map +1 -1
  55. package/src/lib/app-utils/expand-repeatables.d.ts +66 -10
  56. package/src/lib/app-utils/expand-repeatables.js +88 -14
  57. package/src/lib/app-utils/expand-repeatables.js.map +1 -1
  58. package/src/lib/app-utils/forms.d.ts +33 -22
  59. package/src/lib/app-utils/forms.js +47 -28
  60. package/src/lib/app-utils/forms.js.map +1 -1
  61. package/src/lib/app-utils/full-use-cost.d.ts +277 -0
  62. package/src/lib/app-utils/full-use-cost.js +421 -0
  63. package/src/lib/app-utils/full-use-cost.js.map +1 -0
  64. package/src/lib/app-utils/health-report.js +11 -0
  65. package/src/lib/app-utils/health-report.js.map +1 -1
  66. package/src/lib/app-utils/llms-txt.d.ts +20 -0
  67. package/src/lib/app-utils/llms-txt.js +7 -1
  68. package/src/lib/app-utils/llms-txt.js.map +1 -1
  69. package/src/lib/app-utils/media-asset-facts.d.ts +16 -1
  70. package/src/lib/app-utils/media-asset-facts.js +40 -13
  71. package/src/lib/app-utils/media-asset-facts.js.map +1 -1
  72. package/src/lib/app-utils/media-bandwidth.d.ts +52 -0
  73. package/src/lib/app-utils/media-bandwidth.js +94 -0
  74. package/src/lib/app-utils/media-bandwidth.js.map +1 -0
  75. package/src/lib/app-utils/media-ref.d.ts +241 -33
  76. package/src/lib/app-utils/media-ref.js +324 -43
  77. package/src/lib/app-utils/media-ref.js.map +1 -1
  78. package/src/lib/app-utils/media-src.d.ts +8 -8
  79. package/src/lib/app-utils/media-src.js +27 -11
  80. package/src/lib/app-utils/media-src.js.map +1 -1
  81. package/src/lib/app-utils/media-takedown-reach.d.ts +4 -1
  82. package/src/lib/app-utils/media-takedown-reach.js +6 -3
  83. package/src/lib/app-utils/media-takedown-reach.js.map +1 -1
  84. package/src/lib/app-utils/notifications.d.ts +1 -1
  85. package/src/lib/app-utils/notifications.js +2 -0
  86. package/src/lib/app-utils/notifications.js.map +1 -1
  87. package/src/lib/app-utils/organizations.d.ts +51 -2
  88. package/src/lib/app-utils/organizations.js +56 -3
  89. package/src/lib/app-utils/organizations.js.map +1 -1
  90. package/src/lib/app-utils/page-record-sources.d.ts +87 -0
  91. package/src/lib/app-utils/page-record-sources.js +53 -0
  92. package/src/lib/app-utils/page-record-sources.js.map +1 -0
  93. package/src/lib/app-utils/paid-media-source.d.ts +3 -7
  94. package/src/lib/app-utils/paid-media-source.js +5 -19
  95. package/src/lib/app-utils/paid-media-source.js.map +1 -1
  96. package/src/lib/app-utils/person-erasure.d.ts +5 -2
  97. package/src/lib/app-utils/person-erasure.js.map +1 -1
  98. package/src/lib/app-utils/picklists.d.ts +187 -0
  99. package/src/lib/app-utils/picklists.js +320 -0
  100. package/src/lib/app-utils/picklists.js.map +1 -0
  101. package/src/lib/app-utils/plan-entitlements.d.ts +220 -50
  102. package/src/lib/app-utils/plan-entitlements.js +309 -115
  103. package/src/lib/app-utils/plan-entitlements.js.map +1 -1
  104. package/src/lib/app-utils/realm-host-surface.generated.js +2 -0
  105. package/src/lib/app-utils/realm-host-surface.generated.js.map +1 -1
  106. package/src/lib/app-utils/release-flags.d.ts +1 -1
  107. package/src/lib/app-utils/release-flags.js +11 -0
  108. package/src/lib/app-utils/release-flags.js.map +1 -1
  109. package/src/lib/app-utils/rendered-widths.d.ts +121 -0
  110. package/src/lib/app-utils/rendered-widths.js +211 -0
  111. package/src/lib/app-utils/rendered-widths.js.map +1 -0
  112. package/src/lib/app-utils/repeat-sources.d.ts +2 -1
  113. package/src/lib/app-utils/repeat-sources.js.map +1 -1
  114. package/src/lib/app-utils/screen-route.d.ts +154 -36
  115. package/src/lib/app-utils/screen-route.js +185 -40
  116. package/src/lib/app-utils/screen-route.js.map +1 -1
  117. package/src/lib/app-utils/seo-audit.d.ts +11 -1
  118. package/src/lib/app-utils/seo-audit.js +33 -13
  119. package/src/lib/app-utils/seo-audit.js.map +1 -1
  120. package/src/lib/app-utils/seo-keywords.d.ts +11 -0
  121. package/src/lib/app-utils/seo-keywords.js +19 -5
  122. package/src/lib/app-utils/seo-keywords.js.map +1 -1
  123. package/src/lib/app-utils/seo-page-facts.d.ts +47 -4
  124. package/src/lib/app-utils/seo-page-facts.js +136 -31
  125. package/src/lib/app-utils/seo-page-facts.js.map +1 -1
  126. package/src/lib/app-utils/seo-site-scan.d.ts +42 -4
  127. package/src/lib/app-utils/seo-site-scan.js +113 -12
  128. package/src/lib/app-utils/seo-site-scan.js.map +1 -1
  129. package/src/lib/app-utils/server.d.ts +5 -4
  130. package/src/lib/app-utils/server.js +14 -5
  131. package/src/lib/app-utils/server.js.map +1 -1
  132. package/src/lib/app-utils/site-icon-set.d.ts +195 -0
  133. package/src/lib/app-utils/site-icon-set.js +351 -0
  134. package/src/lib/app-utils/site-icon-set.js.map +1 -0
  135. package/src/lib/app-utils/site-interactions.d.ts +101 -4
  136. package/src/lib/app-utils/site-interactions.js +120 -4
  137. package/src/lib/app-utils/site-interactions.js.map +1 -1
  138. package/src/lib/app-utils/starter-template-nodes.d.ts +7 -0
  139. package/src/lib/app-utils/starter-template-nodes.js +3 -0
  140. package/src/lib/app-utils/starter-template-nodes.js.map +1 -1
  141. package/src/lib/app-utils/starter-templates.d.ts +5 -19
  142. package/src/lib/app-utils/starter-templates.js +5 -49
  143. package/src/lib/app-utils/starter-templates.js.map +1 -1
  144. package/src/lib/app-utils/transfer-launcher-context.d.ts +136 -0
  145. package/src/lib/app-utils/transfer-launcher-context.js +23 -0
  146. package/src/lib/app-utils/transfer-launcher-context.js.map +1 -0
  147. package/src/lib/app-utils/transfer-resume-import.d.ts +39 -0
  148. package/src/lib/app-utils/transfer-resume-import.js +128 -0
  149. package/src/lib/app-utils/transfer-resume-import.js.map +1 -0
  150. package/src/lib/app-utils/upgrade-proposal.d.ts +66 -0
  151. package/src/lib/app-utils/upgrade-proposal.js +95 -0
  152. package/src/lib/app-utils/upgrade-proposal.js.map +1 -0
  153. package/src/lib/app-utils/utc-month.d.ts +33 -0
  154. package/src/lib/app-utils/utc-month.js +35 -0
  155. package/src/lib/app-utils/utc-month.js.map +1 -0
  156. package/src/lib/app-utils/visitor-record-ceiling.d.ts +4 -4
  157. package/src/lib/app-utils/visitor-record-ceiling.js +4 -4
  158. package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -1
  159. package/src/lib/app-utils/wire-nodes.d.ts +39 -19
  160. package/src/lib/app-utils/wire-nodes.js +120 -34
  161. package/src/lib/app-utils/wire-nodes.js.map +1 -1
  162. package/src/lib/data-transfer/access.d.ts +74 -0
  163. package/src/lib/data-transfer/access.js +93 -0
  164. package/src/lib/data-transfer/access.js.map +1 -0
  165. package/src/lib/data-transfer/derive.d.ts +246 -0
  166. package/src/lib/data-transfer/derive.js +1007 -0
  167. package/src/lib/data-transfer/derive.js.map +1 -0
  168. package/src/lib/data-transfer/export-file.d.ts +46 -0
  169. package/src/lib/data-transfer/export-file.js +146 -0
  170. package/src/lib/data-transfer/export-file.js.map +1 -0
  171. package/src/lib/data-transfer/field-catalog.d.ts +134 -0
  172. package/src/lib/data-transfer/field-catalog.js +278 -0
  173. package/src/lib/data-transfer/field-catalog.js.map +1 -0
  174. package/src/lib/data-transfer/header-match.d.ts +129 -0
  175. package/src/lib/data-transfer/header-match.js +367 -0
  176. package/src/lib/data-transfer/header-match.js.map +1 -0
  177. package/src/lib/data-transfer/index.d.ts +34 -0
  178. package/src/lib/data-transfer/index.js +40 -0
  179. package/src/lib/data-transfer/index.js.map +1 -0
  180. package/src/lib/data-transfer/job.d.ts +190 -0
  181. package/src/lib/data-transfer/job.js +229 -0
  182. package/src/lib/data-transfer/job.js.map +1 -0
  183. package/src/lib/data-transfer/lookup.d.ts +45 -0
  184. package/src/lib/data-transfer/lookup.js +71 -0
  185. package/src/lib/data-transfer/lookup.js.map +1 -0
  186. package/src/lib/data-transfer/match.d.ts +99 -0
  187. package/src/lib/data-transfer/match.js +244 -0
  188. package/src/lib/data-transfer/match.js.map +1 -0
  189. package/src/lib/data-transfer/package-plan.d.ts +205 -0
  190. package/src/lib/data-transfer/package-plan.js +475 -0
  191. package/src/lib/data-transfer/package-plan.js.map +1 -0
  192. package/src/lib/data-transfer/package.d.ts +181 -0
  193. package/src/lib/data-transfer/package.js +426 -0
  194. package/src/lib/data-transfer/package.js.map +1 -0
  195. package/src/lib/data-transfer/picklist-map.d.ts +139 -0
  196. package/src/lib/data-transfer/picklist-map.js +271 -0
  197. package/src/lib/data-transfer/picklist-map.js.map +1 -0
  198. package/src/lib/data-transfer/plan.d.ts +176 -0
  199. package/src/lib/data-transfer/plan.js +451 -0
  200. package/src/lib/data-transfer/plan.js.map +1 -0
  201. package/src/lib/data-transfer/policy.d.ts +170 -0
  202. package/src/lib/data-transfer/policy.js +378 -0
  203. package/src/lib/data-transfer/policy.js.map +1 -0
  204. package/src/lib/data-transfer/resource.d.ts +211 -0
  205. package/src/lib/data-transfer/resource.js +241 -0
  206. package/src/lib/data-transfer/resource.js.map +1 -0
  207. package/src/lib/data-transfer/review.d.ts +70 -0
  208. package/src/lib/data-transfer/review.js +233 -0
  209. package/src/lib/data-transfer/review.js.map +1 -0
  210. package/src/lib/data-transfer/similarity.d.ts +40 -0
  211. package/src/lib/data-transfer/similarity.js +106 -0
  212. package/src/lib/data-transfer/similarity.js.map +1 -0
  213. package/src/lib/data-transfer/site-package.d.ts +365 -0
  214. package/src/lib/data-transfer/site-package.js +1077 -0
  215. package/src/lib/data-transfer/site-package.js.map +1 -0
  216. package/src/lib/data-transfer/source.d.ts +74 -0
  217. package/src/lib/data-transfer/source.js +293 -0
  218. package/src/lib/data-transfer/source.js.map +1 -0
  219. package/src/lib/data-transfer/transfer-api.d.ts +898 -0
  220. package/src/lib/data-transfer/transfer-api.js +107 -0
  221. package/src/lib/data-transfer/transfer-api.js.map +1 -0
  222. package/src/lib/foundation/definitions/org-billing.types.d.ts +31 -0
  223. package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
  224. package/src/lib/foundation/definitions/organization.types.d.ts +42 -1
  225. package/src/lib/foundation/definitions/organization.types.js.map +1 -1
  226. package/src/lib/foundation/definitions/platform.types.d.ts +6 -4
  227. package/src/lib/foundation/definitions/platform.types.js.map +1 -1
  228. package/src/lib/foundation/index.d.ts +1 -1
  229. package/src/lib/foundation/index.js.map +1 -1
  230. package/src/lib/plugin-manager/feature-plugins.d.ts +91 -2
  231. package/src/lib/plugin-manager/feature-plugins.js +48 -3
  232. package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
  233. package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +50 -0
  234. package/src/lib/plugin-manager/first-party-plugins.generated.js +1129 -28
  235. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
  236. package/src/lib/plugin-manager/index.d.ts +0 -1
  237. package/src/lib/plugin-manager/index.js +0 -1
  238. package/src/lib/plugin-manager/index.js.map +1 -1
  239. package/src/lib/plugin-manager/interaction-recipes.d.ts +142 -0
  240. package/src/lib/plugin-manager/interaction-recipes.js +104 -0
  241. package/src/lib/plugin-manager/interaction-recipes.js.map +1 -0
  242. package/src/lib/plugin-manager/interaction-step-checks.d.ts +66 -0
  243. package/src/lib/plugin-manager/interaction-step-checks.js +86 -0
  244. package/src/lib/plugin-manager/interaction-step-checks.js.map +1 -0
  245. package/src/lib/plugin-manager/plugin-artifact-types.d.ts +235 -0
  246. package/src/lib/plugin-manager/plugin-artifact-types.js +99 -0
  247. package/src/lib/plugin-manager/plugin-artifact-types.js.map +1 -0
  248. package/src/lib/plugin-manager/plugin-contact-capture.d.ts +8 -0
  249. package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -1
  250. package/src/lib/plugin-manager/plugin-conversion-credit.d.ts +216 -0
  251. package/src/lib/plugin-manager/plugin-conversion-credit.js +91 -0
  252. package/src/lib/plugin-manager/plugin-conversion-credit.js.map +1 -0
  253. package/src/lib/plugin-manager/plugin-entity-pickers.d.ts +83 -0
  254. package/src/lib/plugin-manager/plugin-entity-pickers.js +87 -0
  255. package/src/lib/plugin-manager/plugin-entity-pickers.js.map +1 -0
  256. package/src/lib/plugin-manager/plugin-host-resources.d.ts +6 -0
  257. package/src/lib/plugin-manager/plugin-host-resources.js +6 -1
  258. package/src/lib/plugin-manager/plugin-host-resources.js.map +1 -1
  259. package/src/lib/plugin-manager/plugin-intake-gates.d.ts +75 -0
  260. package/src/lib/plugin-manager/plugin-intake-gates.js +49 -0
  261. package/src/lib/plugin-manager/plugin-intake-gates.js.map +1 -0
  262. package/src/lib/plugin-manager/plugin-jobs.d.ts +5 -5
  263. package/src/lib/plugin-manager/plugin-jobs.js +7 -7
  264. package/src/lib/plugin-manager/plugin-jobs.js.map +1 -1
  265. package/src/lib/plugin-manager/plugin-live-paths.d.ts +70 -0
  266. package/src/lib/plugin-manager/plugin-live-paths.js +66 -0
  267. package/src/lib/plugin-manager/plugin-live-paths.js.map +1 -0
  268. package/src/lib/plugin-manager/plugin-org-erasure.d.ts +3 -2
  269. package/src/lib/plugin-manager/plugin-org-erasure.js +30 -5
  270. package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -1
  271. package/src/lib/plugin-manager/plugin-person-erasure.d.ts +68 -9
  272. package/src/lib/plugin-manager/plugin-person-erasure.js +196 -51
  273. package/src/lib/plugin-manager/plugin-person-erasure.js.map +1 -1
  274. package/src/lib/plugin-manager/plugin-person-records.d.ts +275 -0
  275. package/src/lib/plugin-manager/plugin-person-records.js +107 -0
  276. package/src/lib/plugin-manager/plugin-person-records.js.map +1 -0
  277. package/src/lib/plugin-manager/plugin-record-counts.d.ts +76 -0
  278. package/src/lib/plugin-manager/plugin-record-counts.js +49 -0
  279. package/src/lib/plugin-manager/plugin-record-counts.js.map +1 -0
  280. package/src/lib/plugin-manager/plugin-record-email-state.d.ts +26 -0
  281. package/src/lib/plugin-manager/plugin-record-email-state.js +16 -0
  282. package/src/lib/plugin-manager/plugin-record-email-state.js.map +1 -1
  283. package/src/lib/plugin-manager/plugin-record-index.d.ts +10 -0
  284. package/src/lib/plugin-manager/plugin-record-index.js.map +1 -1
  285. package/src/lib/plugin-manager/plugin-record-lists.d.ts +86 -6
  286. package/src/lib/plugin-manager/plugin-record-lists.js +42 -5
  287. package/src/lib/plugin-manager/plugin-record-lists.js.map +1 -1
  288. package/src/lib/plugin-manager/plugin-record-origin.d.ts +79 -0
  289. package/src/lib/plugin-manager/plugin-record-origin.js +46 -0
  290. package/src/lib/plugin-manager/plugin-record-origin.js.map +1 -0
  291. package/src/lib/plugin-manager/plugin-record-pages.d.ts +37 -0
  292. package/src/lib/plugin-manager/plugin-record-pages.js +52 -0
  293. package/src/lib/plugin-manager/plugin-record-pages.js.map +1 -0
  294. package/src/lib/plugin-manager/plugin-record-timeline.d.ts +60 -0
  295. package/src/lib/plugin-manager/plugin-record-timeline.js +16 -0
  296. package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -1
  297. package/src/lib/plugin-manager/plugin-resource-drafts.d.ts +5 -5
  298. package/src/lib/plugin-manager/plugin-resource-drafts.js.map +1 -1
  299. package/src/lib/plugin-manager/plugin-revocations.d.ts +64 -0
  300. package/src/lib/plugin-manager/plugin-revocations.js +47 -0
  301. package/src/lib/plugin-manager/plugin-revocations.js.map +1 -0
  302. package/src/lib/plugin-manager/plugin-send-tallies.d.ts +69 -0
  303. package/src/lib/plugin-manager/plugin-send-tallies.js +45 -0
  304. package/src/lib/plugin-manager/plugin-send-tallies.js.map +1 -0
  305. package/src/lib/plugin-manager/plugin-site-bundle.d.ts +40 -0
  306. package/src/lib/plugin-manager/plugin-site-bundle.js +4 -0
  307. package/src/lib/plugin-manager/plugin-site-bundle.js.map +1 -1
  308. package/src/lib/plugin-manager/plugin-site-export.d.ts +57 -1
  309. package/src/lib/plugin-manager/plugin-site-export.js +23 -10
  310. package/src/lib/plugin-manager/plugin-site-export.js.map +1 -1
  311. package/src/lib/plugin-manager/plugin-sitemap-readers.d.ts +146 -0
  312. package/src/lib/plugin-manager/plugin-sitemap-readers.js +110 -0
  313. package/src/lib/plugin-manager/plugin-sitemap-readers.js.map +1 -0
  314. package/src/lib/plugin-manager/plugin-transfer-resources.d.ts +714 -0
  315. package/src/lib/plugin-manager/plugin-transfer-resources.js +443 -0
  316. package/src/lib/plugin-manager/plugin-transfer-resources.js.map +1 -0
  317. package/src/lib/plugin-manager/plugin-usage-axes.d.ts +54 -5
  318. package/src/lib/plugin-manager/plugin-usage-axes.js +11 -3
  319. package/src/lib/plugin-manager/plugin-usage-axes.js.map +1 -1
  320. package/src/lib/plugin-manager/plugin-user-erasure.js +9 -1
  321. package/src/lib/plugin-manager/plugin-user-erasure.js.map +1 -1
  322. package/src/lib/plugin-manager/plugin-visitor-doors.d.ts +104 -0
  323. package/src/lib/plugin-manager/plugin-visitor-doors.js +108 -0
  324. package/src/lib/plugin-manager/plugin-visitor-doors.js.map +1 -0
  325. package/src/lib/plugin-manager/realm-host-aglyn.generated.js +2 -0
  326. package/src/lib/plugin-manager/realm-host-aglyn.generated.js.map +1 -1
  327. package/src/lib/plugin-manager/repeat-rows.d.ts +5 -6
  328. package/src/lib/plugin-manager/repeat-rows.js.map +1 -1
  329. package/src/lib/app-utils/actions.d.ts +0 -310
  330. package/src/lib/app-utils/actions.js +0 -506
  331. package/src/lib/app-utils/actions.js.map +0 -1
  332. package/src/lib/app-utils/automation-placeholders.d.ts +0 -72
  333. package/src/lib/app-utils/automation-placeholders.js +0 -207
  334. package/src/lib/app-utils/automation-placeholders.js.map +0 -1
  335. package/src/lib/app-utils/dataset-models.d.ts +0 -339
  336. package/src/lib/app-utils/dataset-models.js +0 -722
  337. package/src/lib/app-utils/dataset-models.js.map +0 -1
  338. package/src/lib/app-utils/datasets.d.ts +0 -171
  339. package/src/lib/app-utils/datasets.js +0 -227
  340. package/src/lib/app-utils/datasets.js.map +0 -1
  341. package/src/lib/app-utils/form-abuse-ceiling.d.ts +0 -146
  342. package/src/lib/app-utils/form-abuse-ceiling.js +0 -158
  343. package/src/lib/app-utils/form-abuse-ceiling.js.map +0 -1
  344. package/src/lib/plugin-manager/order-fulfilment.d.ts +0 -142
  345. package/src/lib/plugin-manager/order-fulfilment.js +0 -104
  346. package/src/lib/plugin-manager/order-fulfilment.js.map +0 -1
@@ -0,0 +1,187 @@
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
+ /** The most values one list holds — a menu, not a table. */
18
+ export declare const PICKLIST_VALUES_MAX = 200;
19
+ /** The longest label a value carries. */
20
+ export declare const PICKLIST_LABEL_MAX = 120;
21
+ /** One value of a list. `id` never changes; `label` is what records store. */
22
+ export interface PicklistValue {
23
+ id: string;
24
+ label: string;
25
+ active: boolean;
26
+ /**
27
+ * The group the value is listed under, by group id; `null` for none.
28
+ * Present only on a list whose spec has groups.
29
+ */
30
+ group?: string | null;
31
+ /**
32
+ * What the value MEANS to the platform, from the spec's `meanings`;
33
+ * `null` for an added value that names none. Present only on a list whose
34
+ * spec has meanings, and fixed by the spec for a standard value.
35
+ */
36
+ meaning?: string | null;
37
+ }
38
+ /** A list as stored and as every reader takes it. */
39
+ export interface PicklistValueSet {
40
+ /** In the order every picker lists them. */
41
+ values: PicklistValue[];
42
+ /** The value a new record starts with, by id — `null` for none. */
43
+ defaultValueId: string | null;
44
+ }
45
+ /** One value a spec ships to every organization. */
46
+ export interface PicklistStandardValue {
47
+ id: string;
48
+ label: string;
49
+ group?: string;
50
+ meaning?: string;
51
+ }
52
+ /** One heading values may be listed under. */
53
+ export interface PicklistGroup {
54
+ id: string;
55
+ label: string;
56
+ }
57
+ /** What the engine needs to know of a picklist. */
58
+ export interface PicklistSpec {
59
+ /**
60
+ * A restricted list refuses a write naming a value it does not hold; an
61
+ * unrestricted one stores it as typed.
62
+ */
63
+ restricted: boolean;
64
+ /** The values every organization has, in their starting order. */
65
+ standardValues: readonly PicklistStandardValue[];
66
+ /** The value a new record starts with while the organization has stored no list. */
67
+ defaultValueId?: string;
68
+ /** The headings values are listed under, in order; ungrouped values come last. */
69
+ groups?: readonly PicklistGroup[];
70
+ /**
71
+ * The platform's own vocabulary for what a value means, when it has one.
72
+ * Every value carries one of these or `null`, and a value deleted with a
73
+ * replacement moves its records only to a value of the SAME meaning.
74
+ */
75
+ meanings?: readonly string[];
76
+ }
77
+ /** A label as a list stores it: trimmed, single-spaced, capped. */
78
+ export declare function normalizePicklistLabel(value: unknown): string;
79
+ /** The key two labels are compared by: case and spacing do not make a new value. */
80
+ export declare function picklistLabelKey(label: unknown): string;
81
+ /**
82
+ * A new value's id: the label as a slug, suffixed until it is not one of
83
+ * `taken`. Derived rather than random so a list reads the same in every
84
+ * organization, and never reused, because a default names a value by it.
85
+ * A caller minting an ADDED value counts every standard id as taken, so an
86
+ * added value can never be mistaken for a standard one.
87
+ */
88
+ export declare function mintPicklistValueId(label: string, taken: Iterable<string>): string;
89
+ /** A list of active values from labels, in order, with no default. */
90
+ export declare function picklistFromLabels(labels: readonly string[]): PicklistValueSet;
91
+ /** The standard value an id names under `spec`, or `null`. */
92
+ export declare function picklistStandardValue(spec: PicklistSpec, id: string | null | undefined): PicklistStandardValue | null;
93
+ /** Whether `id` is one of the spec's standard values — computed, never stored. */
94
+ export declare function isStandardPicklistValueId(spec: PicklistSpec, id: string | null | undefined): boolean;
95
+ /**
96
+ * A stored document as a list, or `null` for one that holds none.
97
+ *
98
+ * Tolerant, because the document is client-written: a value with no label
99
+ * is dropped, a second value with the same label (in any case) or the same
100
+ * id is dropped, `active` is true unless it is `false`, and a default that
101
+ * names no value is no default. With a `spec`, each value's group and
102
+ * meaning are read against it as well.
103
+ */
104
+ export declare function normalizePicklistValueSet(raw: unknown, spec?: PicklistSpec): PicklistValueSet | null;
105
+ /**
106
+ * The effective list: `stored` (already normalized against `spec`) with
107
+ * every standard value it lacks — see the block header. `null` for an
108
+ * organization that stored nothing answers the standard values in order,
109
+ * with the spec's default.
110
+ */
111
+ export declare function mergePicklistStandard(spec: PicklistSpec, stored: PicklistValueSet | null): PicklistValueSet;
112
+ /** A stored document as every reader should take it under `spec`. */
113
+ export declare function effectivePicklistValueSet(spec: PicklistSpec, raw: unknown): PicklistValueSet;
114
+ /** The value a label names, in any case or spacing — `null` for none. */
115
+ export declare function picklistValueByLabel(set: PicklistValueSet, label: unknown): PicklistValue | null;
116
+ /** The values a picker offers. */
117
+ export declare function picklistActiveValues(set: PicklistValueSet): PicklistValue[];
118
+ /** The label a new record starts with — only while the default value is active. */
119
+ export declare function picklistDefaultLabel(set: PicklistValueSet): string | null;
120
+ /**
121
+ * The sentence a value outside a restricted list is refused with, naming
122
+ * what the list allows: `{field} must be one of: …`. A long list is cut at
123
+ * twenty names so the sentence stays one a person can read; `empty` is the
124
+ * sentence for a list with no active value at all.
125
+ */
126
+ export declare function picklistRefusalSentence(set: PicklistValueSet, words: {
127
+ field: string;
128
+ empty: string;
129
+ }): string;
130
+ /** What a judged write stores, or why it is refused. */
131
+ export type PicklistJudgement = {
132
+ ok: true;
133
+ value: string | null;
134
+ } | {
135
+ ok: false;
136
+ error: string;
137
+ };
138
+ /**
139
+ * Whether a write may store `value` on a record, and the label it stores.
140
+ *
141
+ * - Blank or `null` clears the field.
142
+ * - An ACTIVE value, in any case or spacing, stores that value's label.
143
+ * - The record's `current` value is kept even when it is inactive or no
144
+ * longer listed: re-saving a record must never be refused for a value
145
+ * somebody else deactivated.
146
+ * - On an unrestricted list anything else is stored — as the list spells
147
+ * it when the list holds it, else as typed.
148
+ * - On a restricted list anything else is refused with `refusal()`.
149
+ */
150
+ export declare function judgePicklistValue(set: PicklistValueSet, value: unknown, options: {
151
+ restricted: boolean;
152
+ current?: unknown;
153
+ refusal: () => string;
154
+ }): PicklistJudgement;
155
+ /** One option of a select over a list. */
156
+ export interface PicklistOption {
157
+ label: string;
158
+ /** Listed but deactivated — shown with an "(inactive)" hint. */
159
+ inactive: boolean;
160
+ /** Not in the list at all — a value written before the list held it. */
161
+ unlisted: boolean;
162
+ /** The group it is listed under, when the list has groups; `null` for none. */
163
+ group?: string | null;
164
+ }
165
+ /**
166
+ * What a select offers for a record holding `current`: every active value
167
+ * in order, then the record's own value when the list would not otherwise
168
+ * show it, so the select keeps what the record holds until it is changed.
169
+ */
170
+ export declare function picklistOptions(set: PicklistValueSet, current?: unknown): PicklistOption[];
171
+ /** One heading of a grouped select and the options under it; `group` null is the ungrouped tail. */
172
+ export interface PicklistOptionGroup {
173
+ group: PicklistGroup | null;
174
+ options: PicklistOption[];
175
+ }
176
+ /**
177
+ * Options under their headings: each group in the spec's order, then every
178
+ * option with no group (or an unknown one) last. A heading with no option
179
+ * is left out, and the list's own order holds within each.
180
+ */
181
+ export declare function groupPicklistOptions(options: readonly PicklistOption[], groups: readonly PicklistGroup[]): PicklistOptionGroup[];
182
+ /**
183
+ * Where a label sorts: its value's position in the list, unlisted values
184
+ * after every listed one, and a record with none last. The order the admin
185
+ * chose is the order a sort by the field reads in.
186
+ */
187
+ export declare function picklistRank(set: PicklistValueSet, label: unknown): number;
@@ -0,0 +1,320 @@
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
+ * PICKLISTS — a field whose choices an admin keeps.
19
+ *
20
+ * The engine under every standard picklist a plugin declares (AGL-3510).
21
+ * It knows nothing of the records that hold the values; a plugin names its
22
+ * picklists in a registry of its own, each one a {@link PicklistSpec}, and
23
+ * asks this module what the effective list is, whether a write may store a
24
+ * value, and what a select offers.
25
+ *
26
+ * ## Standard values are built in
27
+ *
28
+ * A spec ships STANDARD values that every organization has whether or not
29
+ * it ever stored a list. An admin may relabel, reorder, deactivate, regroup
30
+ * or make one the default — all of which is stored under the standard
31
+ * value's own id — but never delete it, and the organization ADDS its own
32
+ * values beside them. Whether a value is standard is computed from its id
33
+ * every time it is asked (see {@link isStandardPicklistValueId}); nothing a
34
+ * stored document says about it is believed.
35
+ *
36
+ * ## The effective list
37
+ *
38
+ * The stored values in their stored order, then every standard value the
39
+ * document does not hold, appended active in the spec's order. A stored
40
+ * value whose id is a standard id IS that standard value, overridden. A
41
+ * stored value that is not standard but carries a missing standard value's
42
+ * label is adopted as it — it takes the standard id — so two values never
43
+ * share a label. A missing standard value whose label a stored STANDARD
44
+ * value has taken (one standard renamed onto another's name) stays out until
45
+ * that rename is undone; labels are unique before anything else.
46
+ *
47
+ * ## Records store the LABEL
48
+ *
49
+ * Every reader compares labels by {@link picklistLabelKey} — case and
50
+ * spacing never make a new value — and a write stores the label as the list
51
+ * spells it. Ids key the list itself: the default, a reorder, a row.
52
+ *=========================================*/ /** The most values one list holds — a menu, not a table. */ export const PICKLIST_VALUES_MAX = 200;
53
+ /** The longest label a value carries. */ export const PICKLIST_LABEL_MAX = 120;
54
+ /** A label as a list stores it: trimmed, single-spaced, capped. */ export function normalizePicklistLabel(value) {
55
+ return String(value != null ? value : '').trim().replace(/\s+/g, ' ').slice(0, PICKLIST_LABEL_MAX);
56
+ }
57
+ /** The key two labels are compared by: case and spacing do not make a new value. */ export function picklistLabelKey(label) {
58
+ return normalizePicklistLabel(label).toLowerCase();
59
+ }
60
+ /**
61
+ * A new value's id: the label as a slug, suffixed until it is not one of
62
+ * `taken`. Derived rather than random so a list reads the same in every
63
+ * organization, and never reused, because a default names a value by it.
64
+ * A caller minting an ADDED value counts every standard id as taken, so an
65
+ * added value can never be mistaken for a standard one.
66
+ */ export function mintPicklistValueId(label, taken) {
67
+ const used = new Set(taken);
68
+ const base = normalizePicklistLabel(label).toLowerCase().normalize('NFKD').replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 40) || 'value';
69
+ let id = base;
70
+ for(let n = 2; used.has(id); n += 1)id = `${base}-${n}`;
71
+ return id;
72
+ }
73
+ /** A list of active values from labels, in order, with no default. */ export function picklistFromLabels(labels) {
74
+ const values = [];
75
+ const seen = new Set();
76
+ for (const raw of labels){
77
+ const label = normalizePicklistLabel(raw);
78
+ if (!label || seen.has(picklistLabelKey(label))) continue;
79
+ seen.add(picklistLabelKey(label));
80
+ values.push({
81
+ id: mintPicklistValueId(label, values.map((value)=>value.id)),
82
+ label,
83
+ active: true
84
+ });
85
+ }
86
+ return {
87
+ values: values.slice(0, PICKLIST_VALUES_MAX),
88
+ defaultValueId: null
89
+ };
90
+ }
91
+ /** The standard value an id names under `spec`, or `null`. */ export function picklistStandardValue(spec, id) {
92
+ var _spec_standardValues_find;
93
+ return (_spec_standardValues_find = spec.standardValues.find((value)=>value.id === id)) != null ? _spec_standardValues_find : null;
94
+ }
95
+ /** Whether `id` is one of the spec's standard values — computed, never stored. */ export function isStandardPicklistValueId(spec, id) {
96
+ return picklistStandardValue(spec, id) !== null;
97
+ }
98
+ /** A group id the spec knows, or `null`. */ function knownGroup(spec, value) {
99
+ var _spec_groups;
100
+ return typeof value === 'string' && ((_spec_groups = spec.groups) == null ? void 0 : _spec_groups.some((group)=>group.id === value)) ? value : null;
101
+ }
102
+ /** A meaning the spec knows, or `null`. */ function knownMeaning(spec, value) {
103
+ var _spec_meanings;
104
+ return typeof value === 'string' && ((_spec_meanings = spec.meanings) == null ? void 0 : _spec_meanings.includes(value)) ? value : null;
105
+ }
106
+ /**
107
+ * The spec-dependent fields of one value: its group and its meaning, each
108
+ * present only when the spec has them. A standard value's meaning is the
109
+ * spec's whatever was stored; its group is the stored one when the document
110
+ * names one (`null` included — an admin may ungroup it), else the spec's.
111
+ */ function specFields(spec, id, entry) {
112
+ var _spec_groups, _spec_meanings;
113
+ if (!spec) return {};
114
+ const standard = picklistStandardValue(spec, id);
115
+ const fields = {};
116
+ if ((_spec_groups = spec.groups) == null ? void 0 : _spec_groups.length) {
117
+ fields.group = 'group' in entry ? knownGroup(spec, entry['group']) : knownGroup(spec, standard == null ? void 0 : standard.group);
118
+ }
119
+ if ((_spec_meanings = spec.meanings) == null ? void 0 : _spec_meanings.length) {
120
+ fields.meaning = standard ? knownMeaning(spec, standard.meaning) : knownMeaning(spec, entry['meaning']);
121
+ }
122
+ return fields;
123
+ }
124
+ /**
125
+ * A stored document as a list, or `null` for one that holds none.
126
+ *
127
+ * Tolerant, because the document is client-written: a value with no label
128
+ * is dropped, a second value with the same label (in any case) or the same
129
+ * id is dropped, `active` is true unless it is `false`, and a default that
130
+ * names no value is no default. With a `spec`, each value's group and
131
+ * meaning are read against it as well.
132
+ */ export function normalizePicklistValueSet(raw, spec) {
133
+ var _stored_defaultValueId;
134
+ if (!raw || typeof raw !== 'object') return null;
135
+ const stored = raw;
136
+ if (!Array.isArray(stored['values'])) return null;
137
+ const values = [];
138
+ const labels = new Set();
139
+ const ids = new Set();
140
+ for (const entry of stored['values']){
141
+ var _value_id;
142
+ if (!entry || typeof entry !== 'object') continue;
143
+ const value = entry;
144
+ const label = normalizePicklistLabel(value['label']);
145
+ if (!label || labels.has(picklistLabelKey(label))) continue;
146
+ let id = String((_value_id = value['id']) != null ? _value_id : '').trim().slice(0, 64);
147
+ if (!id || id.includes('/') || ids.has(id)) {
148
+ var _ref;
149
+ id = mintPicklistValueId(label, [
150
+ ...ids,
151
+ ...(_ref = spec == null ? void 0 : spec.standardValues.map((entry)=>entry.id)) != null ? _ref : []
152
+ ]);
153
+ }
154
+ labels.add(picklistLabelKey(label));
155
+ ids.add(id);
156
+ values.push(_extends({
157
+ id,
158
+ label,
159
+ active: value['active'] !== false
160
+ }, specFields(spec, id, value)));
161
+ if (values.length >= PICKLIST_VALUES_MAX) break;
162
+ }
163
+ const defaultId = String((_stored_defaultValueId = stored['defaultValueId']) != null ? _stored_defaultValueId : '');
164
+ return {
165
+ values,
166
+ defaultValueId: ids.has(defaultId) ? defaultId : null
167
+ };
168
+ }
169
+ /**
170
+ * The effective list: `stored` (already normalized against `spec`) with
171
+ * every standard value it lacks — see the block header. `null` for an
172
+ * organization that stored nothing answers the standard values in order,
173
+ * with the spec's default.
174
+ */ export function mergePicklistStandard(spec, stored) {
175
+ var _spec_defaultValueId;
176
+ const values = stored ? stored.values.map((value)=>_extends({}, value)) : [];
177
+ let defaultValueId = stored ? stored.defaultValueId : (_spec_defaultValueId = spec.defaultValueId) != null ? _spec_defaultValueId : null;
178
+ for (const standard of spec.standardValues){
179
+ if (values.some((value)=>value.id === standard.id)) continue;
180
+ const key = picklistLabelKey(standard.label);
181
+ const holder = values.find((value)=>picklistLabelKey(value.label) === key);
182
+ if (holder) {
183
+ var _spec_meanings;
184
+ if (isStandardPicklistValueId(spec, holder.id)) continue;
185
+ if (defaultValueId === holder.id) defaultValueId = standard.id;
186
+ holder.id = standard.id;
187
+ if ((_spec_meanings = spec.meanings) == null ? void 0 : _spec_meanings.length) holder.meaning = knownMeaning(spec, standard.meaning);
188
+ continue;
189
+ }
190
+ values.push(_extends({
191
+ id: standard.id,
192
+ label: normalizePicklistLabel(standard.label),
193
+ active: true
194
+ }, specFields(spec, standard.id, {})));
195
+ }
196
+ return {
197
+ values,
198
+ defaultValueId: values.some((value)=>value.id === defaultValueId) ? defaultValueId : null
199
+ };
200
+ }
201
+ /** A stored document as every reader should take it under `spec`. */ export function effectivePicklistValueSet(spec, raw) {
202
+ return mergePicklistStandard(spec, normalizePicklistValueSet(raw, spec));
203
+ }
204
+ /** The value a label names, in any case or spacing — `null` for none. */ export function picklistValueByLabel(set, label) {
205
+ var _set_values_find;
206
+ const key = picklistLabelKey(label);
207
+ if (!key) return null;
208
+ return (_set_values_find = set.values.find((value)=>picklistLabelKey(value.label) === key)) != null ? _set_values_find : null;
209
+ }
210
+ /** The values a picker offers. */ export function picklistActiveValues(set) {
211
+ return set.values.filter((value)=>value.active);
212
+ }
213
+ /** The label a new record starts with — only while the default value is active. */ export function picklistDefaultLabel(set) {
214
+ const value = set.values.find((entry)=>entry.id === set.defaultValueId);
215
+ return (value == null ? void 0 : value.active) ? value.label : null;
216
+ }
217
+ /**
218
+ * The sentence a value outside a restricted list is refused with, naming
219
+ * what the list allows: `{field} must be one of: …`. A long list is cut at
220
+ * twenty names so the sentence stays one a person can read; `empty` is the
221
+ * sentence for a list with no active value at all.
222
+ */ export function picklistRefusalSentence(set, words) {
223
+ const active = picklistActiveValues(set).map((value)=>value.label);
224
+ if (!active.length) return words.empty;
225
+ const shown = active.slice(0, 20).join(', ');
226
+ const more = active.length > 20 ? `, and ${active.length - 20} more` : '';
227
+ return `${words.field} must be one of: ${shown}${more}.`;
228
+ }
229
+ /**
230
+ * Whether a write may store `value` on a record, and the label it stores.
231
+ *
232
+ * - Blank or `null` clears the field.
233
+ * - An ACTIVE value, in any case or spacing, stores that value's label.
234
+ * - The record's `current` value is kept even when it is inactive or no
235
+ * longer listed: re-saving a record must never be refused for a value
236
+ * somebody else deactivated.
237
+ * - On an unrestricted list anything else is stored — as the list spells
238
+ * it when the list holds it, else as typed.
239
+ * - On a restricted list anything else is refused with `refusal()`.
240
+ */ export function judgePicklistValue(set, value, options) {
241
+ var _ref;
242
+ const label = normalizePicklistLabel(value);
243
+ if (!label) return {
244
+ ok: true,
245
+ value: null
246
+ };
247
+ const held = normalizePicklistLabel(options.current);
248
+ if (held && picklistLabelKey(held) === picklistLabelKey(label)) return {
249
+ ok: true,
250
+ value: held
251
+ };
252
+ const match = picklistValueByLabel(set, label);
253
+ if (match == null ? void 0 : match.active) return {
254
+ ok: true,
255
+ value: match.label
256
+ };
257
+ if (!options.restricted) return {
258
+ ok: true,
259
+ value: (_ref = match == null ? void 0 : match.label) != null ? _ref : label
260
+ };
261
+ return {
262
+ ok: false,
263
+ error: options.refusal()
264
+ };
265
+ }
266
+ /**
267
+ * What a select offers for a record holding `current`: every active value
268
+ * in order, then the record's own value when the list would not otherwise
269
+ * show it, so the select keeps what the record holds until it is changed.
270
+ */ export function picklistOptions(set, current) {
271
+ const option = (value, inactive)=>_extends({
272
+ label: value.label,
273
+ inactive,
274
+ unlisted: false
275
+ }, value.group !== undefined ? {
276
+ group: value.group
277
+ } : {});
278
+ const options = picklistActiveValues(set).map((value)=>option(value, false));
279
+ const held = normalizePicklistLabel(current);
280
+ if (held && !options.some((entry)=>picklistLabelKey(entry.label) === picklistLabelKey(held))) {
281
+ const listed = picklistValueByLabel(set, held);
282
+ // The record's own spelling, so the select finds the option it holds.
283
+ options.push(listed ? _extends({}, option(listed, true), {
284
+ label: held
285
+ }) : {
286
+ label: held,
287
+ inactive: false,
288
+ unlisted: true
289
+ });
290
+ }
291
+ return options;
292
+ }
293
+ /**
294
+ * Options under their headings: each group in the spec's order, then every
295
+ * option with no group (or an unknown one) last. A heading with no option
296
+ * is left out, and the list's own order holds within each.
297
+ */ export function groupPicklistOptions(options, groups) {
298
+ const known = new Set(groups.map((group)=>group.id));
299
+ const sections = groups.map((group)=>({
300
+ group,
301
+ options: options.filter((option)=>option.group === group.id)
302
+ }));
303
+ sections.push({
304
+ group: null,
305
+ options: options.filter((option)=>!option.group || !known.has(option.group))
306
+ });
307
+ return sections.filter((section)=>section.options.length > 0);
308
+ }
309
+ /**
310
+ * Where a label sorts: its value's position in the list, unlisted values
311
+ * after every listed one, and a record with none last. The order the admin
312
+ * chose is the order a sort by the field reads in.
313
+ */ export function picklistRank(set, label) {
314
+ const key = picklistLabelKey(label);
315
+ if (!key) return Number.MAX_SAFE_INTEGER;
316
+ const at = set.values.findIndex((value)=>picklistLabelKey(value.label) === key);
317
+ return at < 0 ? PICKLIST_VALUES_MAX : at;
318
+ }
319
+
320
+ //# sourceMappingURL=picklists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/picklists.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 * PICKLISTS — a field whose choices an admin keeps.\n *\n * The engine under every standard picklist a plugin declares (AGL-3510).\n * It knows nothing of the records that hold the values; a plugin names its\n * picklists in a registry of its own, each one a {@link PicklistSpec}, and\n * asks this module what the effective list is, whether a write may store a\n * value, and what a select offers.\n *\n * ## Standard values are built in\n *\n * A spec ships STANDARD values that every organization has whether or not\n * it ever stored a list. An admin may relabel, reorder, deactivate, regroup\n * or make one the default — all of which is stored under the standard\n * value's own id — but never delete it, and the organization ADDS its own\n * values beside them. Whether a value is standard is computed from its id\n * every time it is asked (see {@link isStandardPicklistValueId}); nothing a\n * stored document says about it is believed.\n *\n * ## The effective list\n *\n * The stored values in their stored order, then every standard value the\n * document does not hold, appended active in the spec's order. A stored\n * value whose id is a standard id IS that standard value, overridden. A\n * stored value that is not standard but carries a missing standard value's\n * label is adopted as it — it takes the standard id — so two values never\n * share a label. A missing standard value whose label a stored STANDARD\n * value has taken (one standard renamed onto another's name) stays out until\n * that rename is undone; labels are unique before anything else.\n *\n * ## Records store the LABEL\n *\n * Every reader compares labels by {@link picklistLabelKey} — case and\n * spacing never make a new value — and a write stores the label as the list\n * spells it. Ids key the list itself: the default, a reorder, a row.\n *=========================================*/\n\n/** The most values one list holds — a menu, not a table. */\nexport const PICKLIST_VALUES_MAX = 200\n\n/** The longest label a value carries. */\nexport const PICKLIST_LABEL_MAX = 120\n\n/** One value of a list. `id` never changes; `label` is what records store. */\nexport interface PicklistValue {\n id: string\n label: string\n active: boolean\n /**\n * The group the value is listed under, by group id; `null` for none.\n * Present only on a list whose spec has groups.\n */\n group?: string | null\n /**\n * What the value MEANS to the platform, from the spec's `meanings`;\n * `null` for an added value that names none. Present only on a list whose\n * spec has meanings, and fixed by the spec for a standard value.\n */\n meaning?: string | null\n}\n\n/** A list as stored and as every reader takes it. */\nexport interface PicklistValueSet {\n /** In the order every picker lists them. */\n values: PicklistValue[]\n /** The value a new record starts with, by id — `null` for none. */\n defaultValueId: string | null\n}\n\n/** One value a spec ships to every organization. */\nexport interface PicklistStandardValue {\n id: string\n label: string\n group?: string\n meaning?: string\n}\n\n/** One heading values may be listed under. */\nexport interface PicklistGroup {\n id: string\n label: string\n}\n\n/** What the engine needs to know of a picklist. */\nexport interface PicklistSpec {\n /**\n * A restricted list refuses a write naming a value it does not hold; an\n * unrestricted one stores it as typed.\n */\n restricted: boolean\n /** The values every organization has, in their starting order. */\n standardValues: readonly PicklistStandardValue[]\n /** The value a new record starts with while the organization has stored no list. */\n defaultValueId?: string\n /** The headings values are listed under, in order; ungrouped values come last. */\n groups?: readonly PicklistGroup[]\n /**\n * The platform's own vocabulary for what a value means, when it has one.\n * Every value carries one of these or `null`, and a value deleted with a\n * replacement moves its records only to a value of the SAME meaning.\n */\n meanings?: readonly string[]\n}\n\n/** A label as a list stores it: trimmed, single-spaced, capped. */\nexport function normalizePicklistLabel(value: unknown): string {\n return String(value ?? '')\n .trim()\n .replace(/\\s+/g, ' ')\n .slice(0, PICKLIST_LABEL_MAX)\n}\n\n/** The key two labels are compared by: case and spacing do not make a new value. */\nexport function picklistLabelKey(label: unknown): string {\n return normalizePicklistLabel(label).toLowerCase()\n}\n\n/**\n * A new value's id: the label as a slug, suffixed until it is not one of\n * `taken`. Derived rather than random so a list reads the same in every\n * organization, and never reused, because a default names a value by it.\n * A caller minting an ADDED value counts every standard id as taken, so an\n * added value can never be mistaken for a standard one.\n */\nexport function mintPicklistValueId(label: string, taken: Iterable<string>): string {\n const used = new Set(taken)\n const base =\n normalizePicklistLabel(label)\n .toLowerCase()\n .normalize('NFKD')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 40) || 'value'\n let id = base\n for (let n = 2; used.has(id); n += 1) id = `${base}-${n}`\n return id\n}\n\n/** A list of active values from labels, in order, with no default. */\nexport function picklistFromLabels(labels: readonly string[]): PicklistValueSet {\n const values: PicklistValue[] = []\n const seen = new Set<string>()\n for (const raw of labels) {\n const label = normalizePicklistLabel(raw)\n if (!label || seen.has(picklistLabelKey(label))) continue\n seen.add(picklistLabelKey(label))\n values.push({ id: mintPicklistValueId(label, values.map((value) => value.id)), label, active: true })\n }\n return { values: values.slice(0, PICKLIST_VALUES_MAX), defaultValueId: null }\n}\n\n/** The standard value an id names under `spec`, or `null`. */\nexport function picklistStandardValue(\n spec: PicklistSpec,\n id: string | null | undefined,\n): PicklistStandardValue | null {\n return spec.standardValues.find((value) => value.id === id) ?? null\n}\n\n/** Whether `id` is one of the spec's standard values — computed, never stored. */\nexport function isStandardPicklistValueId(spec: PicklistSpec, id: string | null | undefined): boolean {\n return picklistStandardValue(spec, id) !== null\n}\n\n/** A group id the spec knows, or `null`. */\nfunction knownGroup(spec: PicklistSpec, value: unknown): string | null {\n return typeof value === 'string' && spec.groups?.some((group) => group.id === value)\n ? value\n : null\n}\n\n/** A meaning the spec knows, or `null`. */\nfunction knownMeaning(spec: PicklistSpec, value: unknown): string | null {\n return typeof value === 'string' && spec.meanings?.includes(value) ? value : null\n}\n\n/**\n * The spec-dependent fields of one value: its group and its meaning, each\n * present only when the spec has them. A standard value's meaning is the\n * spec's whatever was stored; its group is the stored one when the document\n * names one (`null` included — an admin may ungroup it), else the spec's.\n */\nfunction specFields(\n spec: PicklistSpec | undefined,\n id: string,\n entry: Record<string, unknown>,\n): Pick<PicklistValue, 'group' | 'meaning'> {\n if (!spec) return {}\n const standard = picklistStandardValue(spec, id)\n const fields: Pick<PicklistValue, 'group' | 'meaning'> = {}\n if (spec.groups?.length) {\n fields.group =\n 'group' in entry ? knownGroup(spec, entry['group']) : knownGroup(spec, standard?.group)\n }\n if (spec.meanings?.length) {\n fields.meaning = standard ? knownMeaning(spec, standard.meaning) : knownMeaning(spec, entry['meaning'])\n }\n return fields\n}\n\n/**\n * A stored document as a list, or `null` for one that holds none.\n *\n * Tolerant, because the document is client-written: a value with no label\n * is dropped, a second value with the same label (in any case) or the same\n * id is dropped, `active` is true unless it is `false`, and a default that\n * names no value is no default. With a `spec`, each value's group and\n * meaning are read against it as well.\n */\nexport function normalizePicklistValueSet(\n raw: unknown,\n spec?: PicklistSpec,\n): PicklistValueSet | null {\n if (!raw || typeof raw !== 'object') return null\n const stored = raw as Record<string, unknown>\n if (!Array.isArray(stored['values'])) return null\n const values: PicklistValue[] = []\n const labels = new Set<string>()\n const ids = new Set<string>()\n for (const entry of stored['values']) {\n if (!entry || typeof entry !== 'object') continue\n const value = entry as Record<string, unknown>\n const label = normalizePicklistLabel(value['label'])\n if (!label || labels.has(picklistLabelKey(label))) continue\n let id = String(value['id'] ?? '').trim().slice(0, 64)\n if (!id || id.includes('/') || ids.has(id)) {\n id = mintPicklistValueId(label, [...ids, ...(spec?.standardValues.map((entry) => entry.id) ?? [])])\n }\n labels.add(picklistLabelKey(label))\n ids.add(id)\n values.push({ id, label, active: value['active'] !== false, ...specFields(spec, id, value) })\n if (values.length >= PICKLIST_VALUES_MAX) break\n }\n const defaultId = String(stored['defaultValueId'] ?? '')\n return {\n values,\n defaultValueId: ids.has(defaultId) ? defaultId : null,\n }\n}\n\n/**\n * The effective list: `stored` (already normalized against `spec`) with\n * every standard value it lacks — see the block header. `null` for an\n * organization that stored nothing answers the standard values in order,\n * with the spec's default.\n */\nexport function mergePicklistStandard(\n spec: PicklistSpec,\n stored: PicklistValueSet | null,\n): PicklistValueSet {\n const values: PicklistValue[] = stored ? stored.values.map((value) => ({ ...value })) : []\n let defaultValueId = stored ? stored.defaultValueId : (spec.defaultValueId ?? null)\n for (const standard of spec.standardValues) {\n if (values.some((value) => value.id === standard.id)) continue\n const key = picklistLabelKey(standard.label)\n const holder = values.find((value) => picklistLabelKey(value.label) === key)\n if (holder) {\n if (isStandardPicklistValueId(spec, holder.id)) continue\n if (defaultValueId === holder.id) defaultValueId = standard.id\n holder.id = standard.id\n if (spec.meanings?.length) holder.meaning = knownMeaning(spec, standard.meaning)\n continue\n }\n values.push({\n id: standard.id,\n label: normalizePicklistLabel(standard.label),\n active: true,\n ...specFields(spec, standard.id, {}),\n })\n }\n return {\n values,\n defaultValueId: values.some((value) => value.id === defaultValueId) ? defaultValueId : null,\n }\n}\n\n/** A stored document as every reader should take it under `spec`. */\nexport function effectivePicklistValueSet(spec: PicklistSpec, raw: unknown): PicklistValueSet {\n return mergePicklistStandard(spec, normalizePicklistValueSet(raw, spec))\n}\n\n/** The value a label names, in any case or spacing — `null` for none. */\nexport function picklistValueByLabel(set: PicklistValueSet, label: unknown): PicklistValue | null {\n const key = picklistLabelKey(label)\n if (!key) return null\n return set.values.find((value) => picklistLabelKey(value.label) === key) ?? null\n}\n\n/** The values a picker offers. */\nexport function picklistActiveValues(set: PicklistValueSet): PicklistValue[] {\n return set.values.filter((value) => value.active)\n}\n\n/** The label a new record starts with — only while the default value is active. */\nexport function picklistDefaultLabel(set: PicklistValueSet): string | null {\n const value = set.values.find((entry) => entry.id === set.defaultValueId)\n return value?.active ? value.label : null\n}\n\n/**\n * The sentence a value outside a restricted list is refused with, naming\n * what the list allows: `{field} must be one of: …`. A long list is cut at\n * twenty names so the sentence stays one a person can read; `empty` is the\n * sentence for a list with no active value at all.\n */\nexport function picklistRefusalSentence(\n set: PicklistValueSet,\n words: { field: string; empty: string },\n): string {\n const active = picklistActiveValues(set).map((value) => value.label)\n if (!active.length) return words.empty\n const shown = active.slice(0, 20).join(', ')\n const more = active.length > 20 ? `, and ${active.length - 20} more` : ''\n return `${words.field} must be one of: ${shown}${more}.`\n}\n\n/** What a judged write stores, or why it is refused. */\nexport type PicklistJudgement = { ok: true; value: string | null } | { ok: false; error: string }\n\n/**\n * Whether a write may store `value` on a record, and the label it stores.\n *\n * - Blank or `null` clears the field.\n * - An ACTIVE value, in any case or spacing, stores that value's label.\n * - The record's `current` value is kept even when it is inactive or no\n * longer listed: re-saving a record must never be refused for a value\n * somebody else deactivated.\n * - On an unrestricted list anything else is stored — as the list spells\n * it when the list holds it, else as typed.\n * - On a restricted list anything else is refused with `refusal()`.\n */\nexport function judgePicklistValue(\n set: PicklistValueSet,\n value: unknown,\n options: { restricted: boolean; current?: unknown; refusal: () => string },\n): PicklistJudgement {\n const label = normalizePicklistLabel(value)\n if (!label) return { ok: true, value: null }\n const held = normalizePicklistLabel(options.current)\n if (held && picklistLabelKey(held) === picklistLabelKey(label)) return { ok: true, value: held }\n const match = picklistValueByLabel(set, label)\n if (match?.active) return { ok: true, value: match.label }\n if (!options.restricted) return { ok: true, value: match?.label ?? label }\n return { ok: false, error: options.refusal() }\n}\n\n/** One option of a select over a list. */\nexport interface PicklistOption {\n label: string\n /** Listed but deactivated — shown with an \"(inactive)\" hint. */\n inactive: boolean\n /** Not in the list at all — a value written before the list held it. */\n unlisted: boolean\n /** The group it is listed under, when the list has groups; `null` for none. */\n group?: string | null\n}\n\n/**\n * What a select offers for a record holding `current`: every active value\n * in order, then the record's own value when the list would not otherwise\n * show it, so the select keeps what the record holds until it is changed.\n */\nexport function picklistOptions(set: PicklistValueSet, current?: unknown): PicklistOption[] {\n const option = (value: PicklistValue, inactive: boolean): PicklistOption => ({\n label: value.label,\n inactive,\n unlisted: false,\n ...(value.group !== undefined ? { group: value.group } : {}),\n })\n const options = picklistActiveValues(set).map((value) => option(value, false))\n const held = normalizePicklistLabel(current)\n if (held && !options.some((entry) => picklistLabelKey(entry.label) === picklistLabelKey(held))) {\n const listed = picklistValueByLabel(set, held)\n // The record's own spelling, so the select finds the option it holds.\n options.push(\n listed\n ? { ...option(listed, true), label: held }\n : { label: held, inactive: false, unlisted: true },\n )\n }\n return options\n}\n\n/** One heading of a grouped select and the options under it; `group` null is the ungrouped tail. */\nexport interface PicklistOptionGroup {\n group: PicklistGroup | null\n options: PicklistOption[]\n}\n\n/**\n * Options under their headings: each group in the spec's order, then every\n * option with no group (or an unknown one) last. A heading with no option\n * is left out, and the list's own order holds within each.\n */\nexport function groupPicklistOptions(\n options: readonly PicklistOption[],\n groups: readonly PicklistGroup[],\n): PicklistOptionGroup[] {\n const known = new Set(groups.map((group) => group.id))\n const sections: PicklistOptionGroup[] = groups.map((group) => ({\n group,\n options: options.filter((option) => option.group === group.id),\n }))\n sections.push({\n group: null,\n options: options.filter((option) => !option.group || !known.has(option.group)),\n })\n return sections.filter((section) => section.options.length > 0)\n}\n\n/**\n * Where a label sorts: its value's position in the list, unlisted values\n * after every listed one, and a record with none last. The order the admin\n * chose is the order a sort by the field reads in.\n */\nexport function picklistRank(set: PicklistValueSet, label: unknown): number {\n const key = picklistLabelKey(label)\n if (!key) return Number.MAX_SAFE_INTEGER\n const at = set.values.findIndex((value) => picklistLabelKey(value.label) === key)\n return at < 0 ? PICKLIST_VALUES_MAX : at\n}\n"],"names":["PICKLIST_VALUES_MAX","PICKLIST_LABEL_MAX","normalizePicklistLabel","value","String","trim","replace","slice","picklistLabelKey","label","toLowerCase","mintPicklistValueId","taken","used","Set","base","normalize","id","n","has","picklistFromLabels","labels","values","seen","raw","add","push","map","active","defaultValueId","picklistStandardValue","spec","standardValues","find","isStandardPicklistValueId","knownGroup","groups","some","group","knownMeaning","meanings","includes","specFields","entry","standard","fields","length","meaning","normalizePicklistValueSet","stored","Array","isArray","ids","defaultId","mergePicklistStandard","key","holder","effectivePicklistValueSet","picklistValueByLabel","set","picklistActiveValues","filter","picklistDefaultLabel","picklistRefusalSentence","words","empty","shown","join","more","field","judgePicklistValue","options","ok","held","current","match","restricted","error","refusal","picklistOptions","option","inactive","unlisted","undefined","listed","groupPicklistOptions","known","sections","section","picklistRank","Number","MAX_SAFE_INTEGER","at","findIndex"],"mappings":"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"}