@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
@@ -25,6 +25,7 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
25
25
  };
26
26
  const walk = (spec, parentId)=>{
27
27
  var _spec_pluginId, _spec_props, _spec_children, _spec_children1;
28
+ var _spec_interactions;
28
29
  map[spec.id] = _extends({
29
30
  $id: spec.id,
30
31
  componentId: spec.componentId,
@@ -33,6 +34,8 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
33
34
  props: (_spec_props = spec.props) != null ? _spec_props : {}
34
35
  }, spec.sx ? {
35
36
  sx: spec.sx
37
+ } : {}, ((_spec_interactions = spec.interactions) == null ? void 0 : _spec_interactions.length) ? {
38
+ interactions: spec.interactions
36
39
  } : {}, {
37
40
  nodes: ((_spec_children = spec.children) != null ? _spec_children : []).map((child)=>child.id)
38
41
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/starter-template-nodes.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CANVAS_ROOT_ELEMENT_ID } from '../foundation/constants/canvas'\n\n/**\n * What a starter site is, and the kit its pages are built with (AGL-687,\n * AGL-3080).\n *\n * A starter is a bundle of page templates the template gallery offers and\n * the seed route copies into a site's library on first use. The platform's\n * own starters live in `starter-templates.ts`; a plugin whose elements a\n * starter is built around declares its own, built with this same kit, and\n * the manifest generator compiles them into\n * `plugin-starter-templates.generated.ts`.\n *\n * Leaf imports only, for the reason `starter-templates.ts` states: this is\n * read from the console's client gallery, its seed route and a plugin's\n * server alike, so it imports a canvas constant and nothing that drags in\n * either barrel.\n *\n * PERSISTED IDENTIFIERS: `StarterTemplate.id`, `StarterTemplateScreen.key`\n * and every node id a starter builds appear in stored documents (seeded\n * template doc ids are derived from the first two). They must never be\n * renamed.\n */\nexport interface StarterTemplateScreen {\n /**\n * Stable, starter-local key. Part of the seeded document id, so it is a\n * persisted identifier — never rename one.\n */\n key: string\n displayName: string\n description?: string\n /**\n * Routing-map slug. `SCREEN_ROOT_PATH` (`'/'`) asks for the site root — the\n * home page — and anything else is a single path segment.\n *\n * It used to be `''` that meant home, which no normalizer agreed with: both\n * the apply path and the seed below read an empty string as \"no address\n * authored\" and derived one from the display name, so the shop starters'\n * home page was published at `/home` and the site 404'd at its own URL\n * (AGL-1575).\n */\n slug: string\n seo?: { title?: string; description?: string }\n /** Flat node map including the canvas root. */\n nodes: Record<string, any>\n}\n\nexport interface StarterTemplate {\n id: string\n displayName: string\n description: string\n category: string\n screens: StarterTemplateScreen[]\n}\n\n/** A materialized starter template document, keyed by its deterministic id. */\n\nexport type StarterNodeSpec = {\n id: string\n componentId: string\n /** Bundle owning the component; defaults to 'mui' (AGL-300). */\n pluginId?: string\n props?: Record<string, unknown>\n /**\n * Node-level styles — a SIBLING of props, never `props.sx` (AGL-1346).\n *\n * Both records render (`Leaf` composes `(sx, props.sx, node.sx)`, later\n * wins), but the Styles panel edits `node.sx`. A starter that seeded its\n * styling into `props.sx` handed the author a document full of values\n * the panel could show but no click could change or clear.\n */\n sx?: Record<string, unknown>\n children?: StarterNodeSpec[]\n}\n\n/** Builds the flat, persisted node map from a nested spec. */\nexport function buildStarterNodes(children: StarterNodeSpec[]): Record<string, any> {\n const map: Record<string, any> = {\n [CANVAS_ROOT_ELEMENT_ID]: {\n $id: CANVAS_ROOT_ELEMENT_ID,\n componentId: 'div',\n nodes: children.map((child) => child.id),\n },\n }\n const walk = (spec: StarterNodeSpec, parentId: string) => {\n map[spec.id] = {\n $id: spec.id,\n componentId: spec.componentId,\n pluginId: spec.pluginId ?? 'mui',\n parentId,\n props: spec.props ?? {},\n ...(spec.sx ? { sx: spec.sx } : {}),\n nodes: (spec.children ?? []).map((child) => child.id),\n }\n for (const child of spec.children ?? []) walk(child, spec.id)\n }\n for (const child of children) walk(child, CANVAS_ROOT_ELEMENT_ID)\n return map\n}\n\n/** One line of a starter's copy: a `muiTypography` of the given variant. */\nexport const starterText = (\n id: string,\n variant: string,\n children: string,\n extra?: Record<string, unknown>,\n): StarterNodeSpec => ({\n id,\n componentId: 'muiTypography',\n props: { variant, children, ...extra },\n})\n\n/**\n * The stock widths a starter band may be (AGL-1932, AGL-1298).\n *\n * Three cases, and only three, because the standard has three. There is no\n * pixel case: `1328` is a CONTENT width, not a breakpoint, and the ban on\n * bespoke numbers is the half of AGL-1298 these templates used to violate\n * four times over.\n */\nexport type StarterSectionWidth = 'md' | 'lg' | 'xl'\n\n/**\n * One page band: a `Container` at a stock width, carrying the band's own\n * vertical rhythm (AGL-1932).\n *\n * The layout standard (AGL-1298): every section is a Container. Full-bleed is\n * the Container's own full-width attribute, never the absence of a Container,\n * and anything else is one of three stock widths. A template that seeds no\n * Container hands every customer a site that starts outside the standard.\n *\n * How the three widths are chosen here, stated so the next audit does not\n * have to guess:\n *\n * - `xl` — a marketing band: hero, feature row, product grid, gallery. The\n * default width, and what an unremarkable page should be.\n * - `lg` — the deliberate middle case: wide but text-led and interactive.\n * Cart and account are the honest instances, not decoration.\n * - `md` — long-form prose and narrow form columns, on READING grounds: at\n * `xl` a paragraph runs 110–120 characters a line. This is the case the\n * `Prose Container` preset exists for.\n *\n * Horizontal padding is the Container's own gutters, so bands no longer carry\n * horizontal padding at all. Only the vertical rhythm rides here, which is\n * rhythm rather than width.\n *\n * Written as the two longhands rather than MUI's `py` (AGL-2207/2208): the\n * Styles panel's Padding control is named for the four sides, so a band\n * seeded with `py` handed the customer a document whose padding the panel\n * showed as empty and no click could clear.\n */\nexport const starterSection = (\n id: string,\n maxWidth: StarterSectionWidth,\n verticalPadding: number,\n children: StarterNodeSpec[],\n): StarterNodeSpec => ({\n id,\n componentId: 'muiContainer',\n props: { maxWidth },\n sx: { paddingTop: verticalPadding, paddingBottom: verticalPadding },\n children,\n})\n\n/**\n * The hero band a starter page opens with: a headline, a tagline and a call\n * to action, centered in an `xl` band. Its node ids are `prefix` plus fixed\n * names, so a starter's prefix keeps them its own.\n */\nexport const starterHeroSection = (\n prefix: string,\n headline: string,\n tagline: string,\n): StarterNodeSpec =>\n // The Container is a NEW node (`…heroSection`); `…hero` keeps its id and\n // stays the Stack. Node ids here are persisted identifiers, so bands are\n // wrapped rather than re-pointed.\n starterSection(`${prefix}heroSection`, 'xl', 10, [\n {\n id: `${prefix}hero`,\n componentId: 'muiStack',\n props: { spacing: 2 },\n sx: { alignItems: 'center' },\n children: [\n starterText(`${prefix}heroTitle`, 'h2', headline, { align: 'center' }),\n starterText(`${prefix}heroSub`, 'h6', tagline, { align: 'center' }),\n {\n id: `${prefix}heroCta`,\n componentId: 'muiButton',\n props: {\n variant: 'contained',\n size: 'large',\n children: 'Get in touch',\n },\n },\n ],\n },\n ])\n"],"names":["CANVAS_ROOT_ELEMENT_ID","buildStarterNodes","children","map","$id","componentId","nodes","child","id","walk","spec","parentId","pluginId","props","sx","starterText","variant","extra","starterSection","maxWidth","verticalPadding","paddingTop","paddingBottom","starterHeroSection","prefix","headline","tagline","spacing","alignItems","align","size"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,sBAAsB,QAAQ,oCAAgC;AA2EvE,4DAA4D,GAC5D,OAAO,SAASC,kBAAkBC,QAA2B;IAC3D,MAAMC,MAA2B;QAC/B,CAACH,uBAAuB,EAAE;YACxBI,KAAKJ;YACLK,aAAa;YACbC,OAAOJ,SAASC,GAAG,CAAC,CAACI,QAAUA,MAAMC,EAAE;QACzC;IACF;IACA,MAAMC,OAAO,CAACC,MAAuBC;YAIvBD,gBAEHA,aAECA,gBAEUA;QATpBP,GAAG,CAACO,KAAKF,EAAE,CAAC,GAAG;YACbJ,KAAKM,KAAKF,EAAE;YACZH,aAAaK,KAAKL,WAAW;YAC7BO,QAAQ,GAAEF,iBAAAA,KAAKE,QAAQ,YAAbF,iBAAiB;YAC3BC;YACAE,KAAK,GAAEH,cAAAA,KAAKG,KAAK,YAAVH,cAAc,CAAC;WAClBA,KAAKI,EAAE,GAAG;YAAEA,IAAIJ,KAAKI,EAAE;QAAC,IAAI,CAAC;YACjCR,OAAO,EAACI,iBAAAA,KAAKR,QAAQ,YAAbQ,iBAAiB,EAAE,EAAEP,GAAG,CAAC,CAACI,QAAUA,MAAMC,EAAE;;QAEtD,KAAK,MAAMD,UAASG,kBAAAA,KAAKR,QAAQ,YAAbQ,kBAAiB,EAAE,CAAED,KAAKF,OAAOG,KAAKF,EAAE;IAC9D;IACA,KAAK,MAAMD,SAASL,SAAUO,KAAKF,OAAOP;IAC1C,OAAOG;AACT;AAEA,0EAA0E,GAC1E,OAAO,MAAMY,cAAc,CACzBP,IACAQ,SACAd,UACAe,QACqB,CAAA;QACrBT;QACAH,aAAa;QACbQ,OAAO;YAAEG;YAASd;WAAae;IACjC,CAAA,EAAE;AAYF;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC,GACD,OAAO,MAAMC,iBAAiB,CAC5BV,IACAW,UACAC,iBACAlB,WACqB,CAAA;QACrBM;QACAH,aAAa;QACbQ,OAAO;YAAEM;QAAS;QAClBL,IAAI;YAAEO,YAAYD;YAAiBE,eAAeF;QAAgB;QAClElB;IACF,CAAA,EAAE;AAEF;;;;CAIC,GACD,OAAO,MAAMqB,qBAAqB,CAChCC,QACAC,UACAC,UAEA,yEAAyE;IACzE,yEAAyE;IACzE,kCAAkC;IAClCR,eAAe,GAAGM,OAAO,WAAW,CAAC,EAAE,MAAM,IAAI;QAC/C;YACEhB,IAAI,GAAGgB,OAAO,IAAI,CAAC;YACnBnB,aAAa;YACbQ,OAAO;gBAAEc,SAAS;YAAE;YACpBb,IAAI;gBAAEc,YAAY;YAAS;YAC3B1B,UAAU;gBACRa,YAAY,GAAGS,OAAO,SAAS,CAAC,EAAE,MAAMC,UAAU;oBAAEI,OAAO;gBAAS;gBACpEd,YAAY,GAAGS,OAAO,OAAO,CAAC,EAAE,MAAME,SAAS;oBAAEG,OAAO;gBAAS;gBACjE;oBACErB,IAAI,GAAGgB,OAAO,OAAO,CAAC;oBACtBnB,aAAa;oBACbQ,OAAO;wBACLG,SAAS;wBACTc,MAAM;wBACN5B,UAAU;oBACZ;gBACF;aACD;QACH;KACD,EAAC"}
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/starter-template-nodes.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CANVAS_ROOT_ELEMENT_ID } from '../foundation/constants/canvas'\nimport type { NodeInteraction } from './node-interactions'\n\n/**\n * What a starter site is, and the kit its pages are built with (AGL-687,\n * AGL-3080).\n *\n * A starter is a bundle of page templates the template gallery offers and\n * the seed route copies into a site's library on first use. The platform's\n * own starters live in `starter-templates.ts`; a plugin whose elements a\n * starter is built around declares its own, built with this same kit, and\n * the manifest generator compiles them into\n * `plugin-starter-templates.generated.ts`.\n *\n * Leaf imports only, for the reason `starter-templates.ts` states: this is\n * read from the console's client gallery, its seed route and a plugin's\n * server alike, so it imports a canvas constant and nothing that drags in\n * either barrel.\n *\n * PERSISTED IDENTIFIERS: `StarterTemplate.id`, `StarterTemplateScreen.key`\n * and every node id a starter builds appear in stored documents (seeded\n * template doc ids are derived from the first two). They must never be\n * renamed.\n */\nexport interface StarterTemplateScreen {\n /**\n * Stable, starter-local key. Part of the seeded document id, so it is a\n * persisted identifier — never rename one.\n */\n key: string\n displayName: string\n description?: string\n /**\n * Routing-map slug. `SCREEN_ROOT_PATH` (`'/'`) asks for the site root — the\n * home page — and anything else is a single path segment.\n *\n * It used to be `''` that meant home, which no normalizer agreed with: both\n * the apply path and the seed below read an empty string as \"no address\n * authored\" and derived one from the display name, so the shop starters'\n * home page was published at `/home` and the site 404'd at its own URL\n * (AGL-1575).\n */\n slug: string\n seo?: { title?: string; description?: string }\n /** Flat node map including the canvas root. */\n nodes: Record<string, any>\n}\n\nexport interface StarterTemplate {\n id: string\n displayName: string\n description: string\n category: string\n screens: StarterTemplateScreen[]\n}\n\n/** A materialized starter template document, keyed by its deterministic id. */\n\nexport type StarterNodeSpec = {\n id: string\n componentId: string\n /** Bundle owning the component; defaults to 'mui' (AGL-300). */\n pluginId?: string\n props?: Record<string, unknown>\n /**\n * Node-level styles — a SIBLING of props, never `props.sx` (AGL-1346).\n *\n * Both records render (`Leaf` composes `(sx, props.sx, node.sx)`, later\n * wins), but the Styles panel edits `node.sx`. A starter that seeded its\n * styling into `props.sx` handed the author a document full of values\n * the panel could show but no click could change or clear.\n */\n sx?: Record<string, unknown>\n /**\n * What the element does when a visitor acts on it, stored on the node as\n * the interactions editor stores it (AGL-2867) — a button that scrolls to\n * a section of its own page, for one.\n */\n interactions?: NodeInteraction[]\n children?: StarterNodeSpec[]\n}\n\n/** Builds the flat, persisted node map from a nested spec. */\nexport function buildStarterNodes(children: StarterNodeSpec[]): Record<string, any> {\n const map: Record<string, any> = {\n [CANVAS_ROOT_ELEMENT_ID]: {\n $id: CANVAS_ROOT_ELEMENT_ID,\n componentId: 'div',\n nodes: children.map((child) => child.id),\n },\n }\n const walk = (spec: StarterNodeSpec, parentId: string) => {\n map[spec.id] = {\n $id: spec.id,\n componentId: spec.componentId,\n pluginId: spec.pluginId ?? 'mui',\n parentId,\n props: spec.props ?? {},\n ...(spec.sx ? { sx: spec.sx } : {}),\n ...(spec.interactions?.length ? { interactions: spec.interactions } : {}),\n nodes: (spec.children ?? []).map((child) => child.id),\n }\n for (const child of spec.children ?? []) walk(child, spec.id)\n }\n for (const child of children) walk(child, CANVAS_ROOT_ELEMENT_ID)\n return map\n}\n\n/** One line of a starter's copy: a `muiTypography` of the given variant. */\nexport const starterText = (\n id: string,\n variant: string,\n children: string,\n extra?: Record<string, unknown>,\n): StarterNodeSpec => ({\n id,\n componentId: 'muiTypography',\n props: { variant, children, ...extra },\n})\n\n/**\n * The stock widths a starter band may be (AGL-1932, AGL-1298).\n *\n * Three cases, and only three, because the standard has three. There is no\n * pixel case: `1328` is a CONTENT width, not a breakpoint, and the ban on\n * bespoke numbers is the half of AGL-1298 these templates used to violate\n * four times over.\n */\nexport type StarterSectionWidth = 'md' | 'lg' | 'xl'\n\n/**\n * One page band: a `Container` at a stock width, carrying the band's own\n * vertical rhythm (AGL-1932).\n *\n * The layout standard (AGL-1298): every section is a Container. Full-bleed is\n * the Container's own full-width attribute, never the absence of a Container,\n * and anything else is one of three stock widths. A template that seeds no\n * Container hands every customer a site that starts outside the standard.\n *\n * How the three widths are chosen here, stated so the next audit does not\n * have to guess:\n *\n * - `xl` — a marketing band: hero, feature row, product grid, gallery. The\n * default width, and what an unremarkable page should be.\n * - `lg` — the deliberate middle case: wide but text-led and interactive.\n * Cart and account are the honest instances, not decoration.\n * - `md` — long-form prose and narrow form columns, on READING grounds: at\n * `xl` a paragraph runs 110–120 characters a line. This is the case the\n * `Prose Container` preset exists for.\n *\n * Horizontal padding is the Container's own gutters, so bands no longer carry\n * horizontal padding at all. Only the vertical rhythm rides here, which is\n * rhythm rather than width.\n *\n * Written as the two longhands rather than MUI's `py` (AGL-2207/2208): the\n * Styles panel's Padding control is named for the four sides, so a band\n * seeded with `py` handed the customer a document whose padding the panel\n * showed as empty and no click could clear.\n */\nexport const starterSection = (\n id: string,\n maxWidth: StarterSectionWidth,\n verticalPadding: number,\n children: StarterNodeSpec[],\n): StarterNodeSpec => ({\n id,\n componentId: 'muiContainer',\n props: { maxWidth },\n sx: { paddingTop: verticalPadding, paddingBottom: verticalPadding },\n children,\n})\n\n/**\n * The hero band a starter page opens with: a headline, a tagline and a call\n * to action, centered in an `xl` band. Its node ids are `prefix` plus fixed\n * names, so a starter's prefix keeps them its own.\n */\nexport const starterHeroSection = (\n prefix: string,\n headline: string,\n tagline: string,\n): StarterNodeSpec =>\n // The Container is a NEW node (`…heroSection`); `…hero` keeps its id and\n // stays the Stack. Node ids here are persisted identifiers, so bands are\n // wrapped rather than re-pointed.\n starterSection(`${prefix}heroSection`, 'xl', 10, [\n {\n id: `${prefix}hero`,\n componentId: 'muiStack',\n props: { spacing: 2 },\n sx: { alignItems: 'center' },\n children: [\n starterText(`${prefix}heroTitle`, 'h2', headline, { align: 'center' }),\n starterText(`${prefix}heroSub`, 'h6', tagline, { align: 'center' }),\n {\n id: `${prefix}heroCta`,\n componentId: 'muiButton',\n props: {\n variant: 'contained',\n size: 'large',\n children: 'Get in touch',\n },\n },\n ],\n },\n ])\n"],"names":["CANVAS_ROOT_ELEMENT_ID","buildStarterNodes","children","map","$id","componentId","nodes","child","id","walk","spec","parentId","pluginId","props","sx","interactions","length","starterText","variant","extra","starterSection","maxWidth","verticalPadding","paddingTop","paddingBottom","starterHeroSection","prefix","headline","tagline","spacing","alignItems","align","size"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,sBAAsB,QAAQ,oCAAgC;AAkFvE,4DAA4D,GAC5D,OAAO,SAASC,kBAAkBC,QAA2B;IAC3D,MAAMC,MAA2B;QAC/B,CAACH,uBAAuB,EAAE;YACxBI,KAAKJ;YACLK,aAAa;YACbC,OAAOJ,SAASC,GAAG,CAAC,CAACI,QAAUA,MAAMC,EAAE;QACzC;IACF;IACA,MAAMC,OAAO,CAACC,MAAuBC;YAIvBD,gBAEHA,aAGCA,gBAEUA;YAHdA;QAPNP,GAAG,CAACO,KAAKF,EAAE,CAAC,GAAG;YACbJ,KAAKM,KAAKF,EAAE;YACZH,aAAaK,KAAKL,WAAW;YAC7BO,QAAQ,GAAEF,iBAAAA,KAAKE,QAAQ,YAAbF,iBAAiB;YAC3BC;YACAE,KAAK,GAAEH,cAAAA,KAAKG,KAAK,YAAVH,cAAc,CAAC;WAClBA,KAAKI,EAAE,GAAG;YAAEA,IAAIJ,KAAKI,EAAE;QAAC,IAAI,CAAC,GAC7BJ,EAAAA,qBAAAA,KAAKK,YAAY,qBAAjBL,mBAAmBM,MAAM,IAAG;YAAED,cAAcL,KAAKK,YAAY;QAAC,IAAI,CAAC;YACvET,OAAO,EAACI,iBAAAA,KAAKR,QAAQ,YAAbQ,iBAAiB,EAAE,EAAEP,GAAG,CAAC,CAACI,QAAUA,MAAMC,EAAE;;QAEtD,KAAK,MAAMD,UAASG,kBAAAA,KAAKR,QAAQ,YAAbQ,kBAAiB,EAAE,CAAED,KAAKF,OAAOG,KAAKF,EAAE;IAC9D;IACA,KAAK,MAAMD,SAASL,SAAUO,KAAKF,OAAOP;IAC1C,OAAOG;AACT;AAEA,0EAA0E,GAC1E,OAAO,MAAMc,cAAc,CACzBT,IACAU,SACAhB,UACAiB,QACqB,CAAA;QACrBX;QACAH,aAAa;QACbQ,OAAO;YAAEK;YAAShB;WAAaiB;IACjC,CAAA,EAAE;AAYF;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC,GACD,OAAO,MAAMC,iBAAiB,CAC5BZ,IACAa,UACAC,iBACApB,WACqB,CAAA;QACrBM;QACAH,aAAa;QACbQ,OAAO;YAAEQ;QAAS;QAClBP,IAAI;YAAES,YAAYD;YAAiBE,eAAeF;QAAgB;QAClEpB;IACF,CAAA,EAAE;AAEF;;;;CAIC,GACD,OAAO,MAAMuB,qBAAqB,CAChCC,QACAC,UACAC,UAEA,yEAAyE;IACzE,yEAAyE;IACzE,kCAAkC;IAClCR,eAAe,GAAGM,OAAO,WAAW,CAAC,EAAE,MAAM,IAAI;QAC/C;YACElB,IAAI,GAAGkB,OAAO,IAAI,CAAC;YACnBrB,aAAa;YACbQ,OAAO;gBAAEgB,SAAS;YAAE;YACpBf,IAAI;gBAAEgB,YAAY;YAAS;YAC3B5B,UAAU;gBACRe,YAAY,GAAGS,OAAO,SAAS,CAAC,EAAE,MAAMC,UAAU;oBAAEI,OAAO;gBAAS;gBACpEd,YAAY,GAAGS,OAAO,OAAO,CAAC,EAAE,MAAME,SAAS;oBAAEG,OAAO;gBAAS;gBACjE;oBACEvB,IAAI,GAAGkB,OAAO,OAAO,CAAC;oBACtBrB,aAAa;oBACbQ,OAAO;wBACLK,SAAS;wBACTc,MAAM;wBACN9B,UAAU;oBACZ;gBACF;aACD;QACH;KACD,EAAC"}
@@ -14,7 +14,7 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
- import { type StarterTemplate, type StarterTemplateScreen } from './starter-template-nodes';
17
+ import { type StarterTemplate } from './starter-template-nodes';
18
18
  export type { StarterNodeSpec, StarterSectionWidth, StarterTemplate, StarterTemplateScreen, } from './starter-template-nodes';
19
19
  export { buildStarterNodes, starterHeroSection, starterSection, starterText, } from './starter-template-nodes';
20
20
  /**
@@ -66,25 +66,11 @@ export declare function buildStarterTemplateDocs(starter: StarterTemplate): Star
66
66
  /** Every document a starter COULD materialize as, in bundle order. */
67
67
  export declare function buildAllStarterTemplateDocs(): StarterTemplateDoc[];
68
68
  /**
69
- * The home page every new site is born with (AGL-3408).
70
- *
71
- * A site used to be created with an empty routing map, so the address the
72
- * create dialog calls live answered with the tenant's 404 until somebody
73
- * built and published a page. `claimHostForOrg` now writes this screen, its
74
- * first version and its `/` route in the same transaction that creates the
75
- * host, which makes "a site with no home page" a state no new site starts in.
76
- *
77
- * It is PUBLIC from the first request, so the copy speaks to a visitor, never
78
- * to the owner — no "edit this in the besigner". The site's name is written in
79
- * as text, not bound: there is no page-content token for it, and a heading
80
- * that followed a rename is not worth one.
81
- *
82
- * Deliberately not a starter: it is not offered in the gallery, and applying a
83
- * starter may take the root back from it (see `defaultHomeScreenId`).
84
- *
85
- * PERSISTED IDENTIFIERS: every node id below is stored on every new site.
69
+ * The home page every new site is born with now lives with the rest of the
70
+ * site it is born into — layout, theme and SEO — in `default-site.ts`
71
+ * (AGL-3497). Re-exported so the name keeps its home here.
86
72
  */
87
- export declare function buildDefaultHomeScreen(siteName: string): StarterTemplateScreen;
73
+ export { buildDefaultHomeScreen } from './default-site';
88
74
  /**
89
75
  * Every starter in this build, in gallery order: the platform's own, then
90
76
  * each plugin's in config order (AGL-3080). A plugin whose elements a starter
@@ -24,7 +24,7 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
24
24
  // plugin starters are data behind a type-only import; and `screen-route`
25
25
  // imports only a TYPE from foundation — so all three are safe on either side.
26
26
  import { PLUGIN_STARTER_TEMPLATES } from "./plugin-starter-templates.generated.js";
27
- import { normalizeScreenSlug, SCREEN_ROOT_PATH } from "./screen-route.js";
27
+ import { normalizeScreenSlug } from "./screen-route.js";
28
28
  import { buildStarterNodes as buildNodes, starterHeroSection as heroSection, starterSection as section, starterText as text } from "./starter-template-nodes.js";
29
29
  export { buildStarterNodes, starterHeroSection, starterSection, starterText } from "./starter-template-nodes.js";
30
30
  /**
@@ -143,54 +143,10 @@ const contactForm = (prefix)=>({
143
143
  ]
144
144
  });
145
145
  /**
146
- * The home page every new site is born with (AGL-3408).
147
- *
148
- * A site used to be created with an empty routing map, so the address the
149
- * create dialog calls live answered with the tenant's 404 until somebody
150
- * built and published a page. `claimHostForOrg` now writes this screen, its
151
- * first version and its `/` route in the same transaction that creates the
152
- * host, which makes "a site with no home page" a state no new site starts in.
153
- *
154
- * It is PUBLIC from the first request, so the copy speaks to a visitor, never
155
- * to the owner — no "edit this in the besigner". The site's name is written in
156
- * as text, not bound: there is no page-content token for it, and a heading
157
- * that followed a rename is not worth one.
158
- *
159
- * Deliberately not a starter: it is not offered in the gallery, and applying a
160
- * starter may take the root back from it (see `defaultHomeScreenId`).
161
- *
162
- * PERSISTED IDENTIFIERS: every node id below is stored on every new site.
163
- */ export function buildDefaultHomeScreen(siteName) {
164
- const name = siteName.trim() || 'Welcome';
165
- return {
166
- key: 'home',
167
- displayName: 'Home',
168
- slug: SCREEN_ROOT_PATH,
169
- nodes: buildNodes([
170
- section('dh_heroSection', 'md', 12, [
171
- {
172
- id: 'dh_hero',
173
- componentId: 'muiStack',
174
- props: {
175
- spacing: 2
176
- },
177
- sx: {
178
- alignItems: 'center'
179
- },
180
- children: [
181
- text('dh_heroTitle', 'h2', name, {
182
- align: 'center'
183
- }),
184
- text('dh_heroSub', 'h6', 'Welcome — our new website is on its way.', {
185
- align: 'center',
186
- color: 'text.secondary'
187
- })
188
- ]
189
- }
190
- ])
191
- ])
192
- };
193
- }
146
+ * The home page every new site is born with now lives with the rest of the
147
+ * site it is born into — layout, theme and SEO — in `default-site.ts`
148
+ * (AGL-3497). Re-exported so the name keeps its home here.
149
+ */ export { buildDefaultHomeScreen } from "./default-site.js";
194
150
  /** The platform's own starters, which name no plugin's elements. */ const PLATFORM_STARTER_TEMPLATES = [
195
151
  {
196
152
  id: 'landing',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/starter-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// Leaf imports only, deliberately (AGL-687). This module is imported from\n// BOTH graphs — the console's client gallery renders virtual starters from\n// it, the console's seed route materializes them, and the AI plugin's server\n// shows them to a model — and neither barrel works in both: the full\n// `@aglyn/aglyn` barrel breaks the RSC/server-route graph, while the server\n// entry drags `node:fs` into the client bundle. The starter kit imports only\n// the canvas constants, a leaf with no imports of their own; the compiled\n// plugin starters are data behind a type-only import; and `screen-route`\n// imports only a TYPE from foundation — so all three are safe on either side.\nimport { PLUGIN_STARTER_TEMPLATES } from './plugin-starter-templates.generated'\nimport { normalizeScreenSlug, SCREEN_ROOT_PATH } from './screen-route'\nimport {\n buildStarterNodes as buildNodes,\n starterHeroSection as heroSection,\n starterSection as section,\n starterText as text,\n type StarterNodeSpec as NodeSpec,\n type StarterTemplate,\n type StarterTemplateScreen,\n} from './starter-template-nodes'\n\nexport type {\n StarterNodeSpec,\n StarterSectionWidth,\n StarterTemplate,\n StarterTemplateScreen,\n} from './starter-template-nodes'\nexport {\n buildStarterNodes,\n starterHeroSection,\n starterSection,\n starterText,\n} from './starter-template-nodes'\n\n/**\n * First-party starter definitions (AGL-78/79), SEED INPUT (AGL-687).\n *\n * These used to be rendered straight into the gallery and instantiated from\n * code, which made a starter a second kind of template: no version history,\n * no placeholders, no editor, changeable only by shipping a release. Now\n * they are seeded into each host's own template library as ordinary\n * `hosts/{hostId}/templates` documents (see the console's\n * `utils/server/seed-starter-templates.ts` for why copy-on-use rather than a\n * global read-only collection), and nothing reads this file at render time.\n *\n * They are also the page examples the AI plugin's template generator shows a\n * model (AGL-2909), which is why they live in the core package rather than\n * beside the console gallery that renders them.\n *\n * Node ids stay template-local (unique within each screen's version doc);\n * `createPageFromTemplate` re-keys screen and version ids at instantiation.\n *\n * PERSISTED IDENTIFIERS: `StarterTemplate.id`, `StarterTemplateScreen.key`\n * and every node id below appear in stored documents (seeded template doc\n * ids are derived from the first two). They must never be renamed.\n */\nexport interface StarterTemplateDoc {\n id: string\n /** Which starter this page belongs to — lets one starter be selected. */\n starterId: string\n data: Record<string, unknown>\n}\n\n/**\n * Deterministic document id for a seeded starter screen (AGL-687).\n *\n * Derived from the starter id and the screen key — never randomly generated\n * — so re-running the seed addresses the same documents instead of stacking\n * duplicate copies of every starter on every run.\n */\nexport function starterTemplateDocId(\n starterId: string,\n screenKey: string,\n): string {\n return `starter-${starterId}-${screenKey}`\n}\n\n/**\n * Expands one starter into the template documents it seeds as.\n *\n * One page template per screen, matching what a marketplace install of a\n * multi-screen site template already produces (AGL-669) — the alternative,\n * a bespoke multi-page template shape, would be a third lifecycle on top of\n * the two this issue exists to merge. The bundle's name/description/order\n * ride `source` so the gallery can still present the starter as one card.\n */\nexport function buildStarterTemplateDocs(\n starter: StarterTemplate,\n): StarterTemplateDoc[] {\n return starter.screens.map((screen, index) => {\n // Normalized on the way into the document so the persisted address is in\n // the routing-map format the tenant matches against — in particular the\n // root, which the previous `screen.slug ? …` guard dropped entirely when\n // home was spelled `''` (AGL-1575). A slug that sanitizes away carries no\n // field, and the apply path derives one from the display name.\n const slug = normalizeScreenSlug(screen.slug)\n return {\n id: starterTemplateDocId(starter.id, screen.key),\n starterId: starter.id,\n data: {\n kind: 'page',\n displayName: screen.displayName,\n // Only the screen's own description, never the starter blurb: a\n // template's `description` is carried onto the page it creates, and a\n // screen description is the live site's meta-description fallback.\n // The bundle blurb lives on `source.starterDescription` instead.\n ...(screen.description ? { description: screen.description } : {}),\n category: starter.category,\n ...(slug ? { slug } : {}),\n ...(screen.seo ? { seo: screen.seo } : {}),\n nodes: screen.nodes,\n source: {\n type: 'starter',\n starterId: starter.id,\n starterName: starter.displayName,\n starterDescription: starter.description,\n starterOrder: index,\n },\n },\n }\n })\n}\n\n/** Every document a starter COULD materialize as, in bundle order. */\nexport function buildAllStarterTemplateDocs(): StarterTemplateDoc[] {\n return STARTER_TEMPLATES.flatMap(buildStarterTemplateDocs)\n}\n\nconst featureColumn = (id: string, title: string, body: string): NodeSpec => ({\n id,\n componentId: 'muiStack',\n props: { spacing: 1 },\n // `flex: 1` is a column's share of its row, not a width cap — it survives\n // the sweep deliberately. Only `maxWidth` in raw pixels was the violation.\n sx: {\n flex: 1,\n paddingTop: 2,\n paddingRight: 2,\n paddingBottom: 2,\n paddingLeft: 2,\n },\n children: [text(`${id}T`, 'h5', title), text(`${id}B`, 'body1', body)],\n})\n\nconst contactForm = (prefix: string): NodeSpec => ({\n id: `${prefix}form`,\n componentId: 'form',\n props: {\n formName: 'Contact',\n submitLabel: 'Send message',\n successMessage: 'Thanks — we will get back to you soon.',\n },\n children: [\n {\n id: `${prefix}fName`,\n componentId: 'formField',\n props: { fieldName: 'name', label: 'Name', required: true },\n },\n {\n id: `${prefix}fEmail`,\n componentId: 'formField',\n props: {\n fieldName: 'email',\n label: 'Email',\n fieldType: 'email',\n required: true,\n },\n },\n {\n id: `${prefix}fMessage`,\n componentId: 'formField',\n props: {\n fieldName: 'message',\n label: 'Message',\n fieldType: 'textarea',\n required: true,\n },\n },\n ],\n})\n\n\n/**\n * The home page every new site is born with (AGL-3408).\n *\n * A site used to be created with an empty routing map, so the address the\n * create dialog calls live answered with the tenant's 404 until somebody\n * built and published a page. `claimHostForOrg` now writes this screen, its\n * first version and its `/` route in the same transaction that creates the\n * host, which makes \"a site with no home page\" a state no new site starts in.\n *\n * It is PUBLIC from the first request, so the copy speaks to a visitor, never\n * to the owner — no \"edit this in the besigner\". The site's name is written in\n * as text, not bound: there is no page-content token for it, and a heading\n * that followed a rename is not worth one.\n *\n * Deliberately not a starter: it is not offered in the gallery, and applying a\n * starter may take the root back from it (see `defaultHomeScreenId`).\n *\n * PERSISTED IDENTIFIERS: every node id below is stored on every new site.\n */\nexport function buildDefaultHomeScreen(siteName: string): StarterTemplateScreen {\n const name = siteName.trim() || 'Welcome'\n return {\n key: 'home',\n displayName: 'Home',\n slug: SCREEN_ROOT_PATH,\n nodes: buildNodes([\n section('dh_heroSection', 'md', 12, [\n {\n id: 'dh_hero',\n componentId: 'muiStack',\n props: { spacing: 2 },\n sx: { alignItems: 'center' },\n children: [\n text('dh_heroTitle', 'h2', name, { align: 'center' }),\n text(\n 'dh_heroSub',\n 'h6',\n 'Welcome — our new website is on its way.',\n { align: 'center', color: 'text.secondary' },\n ),\n ],\n },\n ]),\n ]),\n }\n}\n\n/** The platform's own starters, which name no plugin's elements. */\nconst PLATFORM_STARTER_TEMPLATES: StarterTemplate[] = [\n {\n id: 'landing',\n displayName: 'Landing Page',\n description:\n 'One-page launch site: hero, three selling points, and a contact form.',\n category: 'Marketing',\n screens: [\n {\n key: 'landing',\n displayName: 'Landing',\n slug: 'landing',\n seo: {\n title: 'Welcome',\n description: 'Everything you need to know, on one page.',\n },\n nodes: buildNodes([\n heroSection(\n 'l_',\n 'A headline that sells your idea',\n 'One clear sentence about the value you deliver.',\n ),\n section('l_featuresSection', 'xl', 6, [\n {\n id: 'l_features',\n componentId: 'muiStack',\n props: { direction: 'row', spacing: 2 },\n children: [\n featureColumn(\n 'l_f1',\n 'Fast',\n 'Explain the first reason customers pick you.',\n ),\n featureColumn(\n 'l_f2',\n 'Simple',\n 'Explain the second reason customers pick you.',\n ),\n featureColumn(\n 'l_f3',\n 'Reliable',\n 'Explain the third reason customers pick you.',\n ),\n ],\n },\n ]),\n // Was `maxWidth: 560`. A band, not an inner measure: it sat at the\n // top level carrying the section's own gutters and rhythm, so the\n // pixel value was capping the BAND. MD is the stock width for a\n // narrow, form-led column.\n section('l_contactSection', 'md', 6, [\n {\n id: 'l_contact',\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n text('l_contactTitle', 'h4', 'Get in touch'),\n contactForm('l_'),\n ],\n },\n ]),\n ]),\n },\n ],\n },\n {\n id: 'business',\n displayName: 'Business',\n description:\n 'Company site: home with services, an about page, and a contact page.',\n category: 'Business',\n screens: [\n {\n key: 'home',\n displayName: 'Business Home',\n slug: 'home',\n seo: { title: 'Home' },\n nodes: buildNodes([\n heroSection(\n 'b_',\n 'Your business, done right',\n 'Tell visitors what you do and who you do it for.',\n ),\n section('b_servicesSection', 'xl', 6, [\n {\n id: 'b_services',\n componentId: 'muiStack',\n props: { direction: 'row', spacing: 2 },\n children: [\n featureColumn('b_s1', 'Service one', 'Describe this service.'),\n featureColumn('b_s2', 'Service two', 'Describe this service.'),\n featureColumn(\n 'b_s3',\n 'Service three',\n 'Describe this service.',\n ),\n ],\n },\n ]),\n ]),\n },\n {\n key: 'about-us',\n displayName: 'About Us',\n slug: 'about-us',\n seo: { title: 'About us' },\n nodes: buildNodes([\n // Was `maxWidth: 720` — the one unambiguous PROSE band in the set,\n // and the case the Prose Container preset exists for. MD (900px)\n // lands near the 65–75 characters a line that reads comfortably.\n section('a_wrapSection', 'md', 8, [\n {\n id: 'a_wrap',\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n text('a_title', 'h3', 'About us'),\n text(\n 'a_body',\n 'body1',\n 'Share your story: how you started, what you believe, and ' +\n 'why customers trust you.',\n ),\n ],\n },\n ]),\n ]),\n },\n {\n key: 'contact-us',\n displayName: 'Contact Us',\n slug: 'contact-us',\n seo: { title: 'Contact' },\n nodes: buildNodes([\n // Was `maxWidth: 560`. Same reading as the landing page's contact\n // band: text plus a form column, so MD.\n section('c_wrapSection', 'md', 8, [\n {\n id: 'c_wrap',\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n text('c_title', 'h3', 'Contact us'),\n text(\n 'c_body',\n 'body1',\n 'Questions or quotes — send a message and we reply within ' +\n 'one business day.',\n ),\n contactForm('c_'),\n ],\n },\n ]),\n ]),\n },\n ],\n },\n {\n id: 'portfolio',\n displayName: 'Portfolio',\n description: 'Personal portfolio: intro, work grid, and contact form.',\n category: 'Personal',\n screens: [\n {\n key: 'portfolio',\n displayName: 'Portfolio',\n slug: 'portfolio',\n seo: { title: 'Portfolio' },\n nodes: buildNodes([\n heroSection(\n 'p_',\n 'Hi, I make things',\n 'Designer / developer / photographer — introduce yourself here.',\n ),\n section('p_gridSection', 'xl', 6, [\n {\n id: 'p_grid',\n componentId: 'muiStack',\n props: { direction: 'row', spacing: 2 },\n children: [\n {\n id: 'p_img1',\n componentId: 'image',\n // `height` is an image's own intrinsic sizing prop, not a\n // band cap — out of scope for the container standard.\n props: { alt: 'Project one', height: '220px' },\n },\n {\n id: 'p_img2',\n componentId: 'image',\n props: { alt: 'Project two', height: '220px' },\n },\n {\n id: 'p_img3',\n componentId: 'image',\n props: { alt: 'Project three', height: '220px' },\n },\n ],\n },\n ]),\n // Was `maxWidth: 560`, the third of the three contact bands.\n section('p_contactSection', 'md', 6, [\n {\n id: 'p_contact',\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n text('p_contactTitle', 'h4', 'Work with me'),\n contactForm('p_'),\n ],\n },\n ]),\n ]),\n },\n ],\n },\n]\n\n/**\n * Every starter in this build, in gallery order: the platform's own, then\n * each plugin's in config order (AGL-3080). A plugin whose elements a starter\n * is built around — a storefront's product grid and cart — declares it under\n * `starterTemplates` in plugins.config.json, and the manifest generator\n * compiles what it returns, so the gallery, the seed route and a model\n * shown examples all read one list without loading any plugin.\n */\nexport const STARTER_TEMPLATES: StarterTemplate[] = [\n ...PLATFORM_STARTER_TEMPLATES,\n ...PLUGIN_STARTER_TEMPLATES,\n]\n"],"names":["PLUGIN_STARTER_TEMPLATES","normalizeScreenSlug","SCREEN_ROOT_PATH","buildStarterNodes","buildNodes","starterHeroSection","heroSection","starterSection","section","starterText","text","starterTemplateDocId","starterId","screenKey","buildStarterTemplateDocs","starter","screens","map","screen","index","slug","id","key","data","kind","displayName","description","category","seo","nodes","source","type","starterName","starterDescription","starterOrder","buildAllStarterTemplateDocs","STARTER_TEMPLATES","flatMap","featureColumn","title","body","componentId","props","spacing","sx","flex","paddingTop","paddingRight","paddingBottom","paddingLeft","children","contactForm","prefix","formName","submitLabel","successMessage","fieldName","label","required","fieldType","buildDefaultHomeScreen","siteName","name","trim","alignItems","align","color","PLATFORM_STARTER_TEMPLATES","direction","alt","height"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/starter-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// Leaf imports only, deliberately (AGL-687). This module is imported from\n// BOTH graphs — the console's client gallery renders virtual starters from\n// it, the console's seed route materializes them, and the AI plugin's server\n// shows them to a model — and neither barrel works in both: the full\n// `@aglyn/aglyn` barrel breaks the RSC/server-route graph, while the server\n// entry drags `node:fs` into the client bundle. The starter kit imports only\n// the canvas constants, a leaf with no imports of their own; the compiled\n// plugin starters are data behind a type-only import; and `screen-route`\n// imports only a TYPE from foundation — so all three are safe on either side.\nimport { PLUGIN_STARTER_TEMPLATES } from './plugin-starter-templates.generated'\nimport { normalizeScreenSlug } from './screen-route'\nimport {\n buildStarterNodes as buildNodes,\n starterHeroSection as heroSection,\n starterSection as section,\n starterText as text,\n type StarterNodeSpec as NodeSpec,\n type StarterTemplate,\n} from './starter-template-nodes'\n\nexport type {\n StarterNodeSpec,\n StarterSectionWidth,\n StarterTemplate,\n StarterTemplateScreen,\n} from './starter-template-nodes'\nexport {\n buildStarterNodes,\n starterHeroSection,\n starterSection,\n starterText,\n} from './starter-template-nodes'\n\n/**\n * First-party starter definitions (AGL-78/79), SEED INPUT (AGL-687).\n *\n * These used to be rendered straight into the gallery and instantiated from\n * code, which made a starter a second kind of template: no version history,\n * no placeholders, no editor, changeable only by shipping a release. Now\n * they are seeded into each host's own template library as ordinary\n * `hosts/{hostId}/templates` documents (see the console's\n * `utils/server/seed-starter-templates.ts` for why copy-on-use rather than a\n * global read-only collection), and nothing reads this file at render time.\n *\n * They are also the page examples the AI plugin's template generator shows a\n * model (AGL-2909), which is why they live in the core package rather than\n * beside the console gallery that renders them.\n *\n * Node ids stay template-local (unique within each screen's version doc);\n * `createPageFromTemplate` re-keys screen and version ids at instantiation.\n *\n * PERSISTED IDENTIFIERS: `StarterTemplate.id`, `StarterTemplateScreen.key`\n * and every node id below appear in stored documents (seeded template doc\n * ids are derived from the first two). They must never be renamed.\n */\nexport interface StarterTemplateDoc {\n id: string\n /** Which starter this page belongs to — lets one starter be selected. */\n starterId: string\n data: Record<string, unknown>\n}\n\n/**\n * Deterministic document id for a seeded starter screen (AGL-687).\n *\n * Derived from the starter id and the screen key — never randomly generated\n * — so re-running the seed addresses the same documents instead of stacking\n * duplicate copies of every starter on every run.\n */\nexport function starterTemplateDocId(\n starterId: string,\n screenKey: string,\n): string {\n return `starter-${starterId}-${screenKey}`\n}\n\n/**\n * Expands one starter into the template documents it seeds as.\n *\n * One page template per screen, matching what a marketplace install of a\n * multi-screen site template already produces (AGL-669) — the alternative,\n * a bespoke multi-page template shape, would be a third lifecycle on top of\n * the two this issue exists to merge. The bundle's name/description/order\n * ride `source` so the gallery can still present the starter as one card.\n */\nexport function buildStarterTemplateDocs(\n starter: StarterTemplate,\n): StarterTemplateDoc[] {\n return starter.screens.map((screen, index) => {\n // Normalized on the way into the document so the persisted address is in\n // the routing-map format the tenant matches against — in particular the\n // root, which the previous `screen.slug ? …` guard dropped entirely when\n // home was spelled `''` (AGL-1575). A slug that sanitizes away carries no\n // field, and the apply path derives one from the display name.\n const slug = normalizeScreenSlug(screen.slug)\n return {\n id: starterTemplateDocId(starter.id, screen.key),\n starterId: starter.id,\n data: {\n kind: 'page',\n displayName: screen.displayName,\n // Only the screen's own description, never the starter blurb: a\n // template's `description` is carried onto the page it creates, and a\n // screen description is the live site's meta-description fallback.\n // The bundle blurb lives on `source.starterDescription` instead.\n ...(screen.description ? { description: screen.description } : {}),\n category: starter.category,\n ...(slug ? { slug } : {}),\n ...(screen.seo ? { seo: screen.seo } : {}),\n nodes: screen.nodes,\n source: {\n type: 'starter',\n starterId: starter.id,\n starterName: starter.displayName,\n starterDescription: starter.description,\n starterOrder: index,\n },\n },\n }\n })\n}\n\n/** Every document a starter COULD materialize as, in bundle order. */\nexport function buildAllStarterTemplateDocs(): StarterTemplateDoc[] {\n return STARTER_TEMPLATES.flatMap(buildStarterTemplateDocs)\n}\n\nconst featureColumn = (id: string, title: string, body: string): NodeSpec => ({\n id,\n componentId: 'muiStack',\n props: { spacing: 1 },\n // `flex: 1` is a column's share of its row, not a width cap — it survives\n // the sweep deliberately. Only `maxWidth` in raw pixels was the violation.\n sx: {\n flex: 1,\n paddingTop: 2,\n paddingRight: 2,\n paddingBottom: 2,\n paddingLeft: 2,\n },\n children: [text(`${id}T`, 'h5', title), text(`${id}B`, 'body1', body)],\n})\n\nconst contactForm = (prefix: string): NodeSpec => ({\n id: `${prefix}form`,\n componentId: 'form',\n props: {\n formName: 'Contact',\n submitLabel: 'Send message',\n successMessage: 'Thanks — we will get back to you soon.',\n },\n children: [\n {\n id: `${prefix}fName`,\n componentId: 'formField',\n props: { fieldName: 'name', label: 'Name', required: true },\n },\n {\n id: `${prefix}fEmail`,\n componentId: 'formField',\n props: {\n fieldName: 'email',\n label: 'Email',\n fieldType: 'email',\n required: true,\n },\n },\n {\n id: `${prefix}fMessage`,\n componentId: 'formField',\n props: {\n fieldName: 'message',\n label: 'Message',\n fieldType: 'textarea',\n required: true,\n },\n },\n ],\n})\n\n\n/**\n * The home page every new site is born with now lives with the rest of the\n * site it is born into — layout, theme and SEO — in `default-site.ts`\n * (AGL-3497). Re-exported so the name keeps its home here.\n */\nexport { buildDefaultHomeScreen } from './default-site'\n\n/** The platform's own starters, which name no plugin's elements. */\nconst PLATFORM_STARTER_TEMPLATES: StarterTemplate[] = [\n {\n id: 'landing',\n displayName: 'Landing Page',\n description:\n 'One-page launch site: hero, three selling points, and a contact form.',\n category: 'Marketing',\n screens: [\n {\n key: 'landing',\n displayName: 'Landing',\n slug: 'landing',\n seo: {\n title: 'Welcome',\n description: 'Everything you need to know, on one page.',\n },\n nodes: buildNodes([\n heroSection(\n 'l_',\n 'A headline that sells your idea',\n 'One clear sentence about the value you deliver.',\n ),\n section('l_featuresSection', 'xl', 6, [\n {\n id: 'l_features',\n componentId: 'muiStack',\n props: { direction: 'row', spacing: 2 },\n children: [\n featureColumn(\n 'l_f1',\n 'Fast',\n 'Explain the first reason customers pick you.',\n ),\n featureColumn(\n 'l_f2',\n 'Simple',\n 'Explain the second reason customers pick you.',\n ),\n featureColumn(\n 'l_f3',\n 'Reliable',\n 'Explain the third reason customers pick you.',\n ),\n ],\n },\n ]),\n // Was `maxWidth: 560`. A band, not an inner measure: it sat at the\n // top level carrying the section's own gutters and rhythm, so the\n // pixel value was capping the BAND. MD is the stock width for a\n // narrow, form-led column.\n section('l_contactSection', 'md', 6, [\n {\n id: 'l_contact',\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n text('l_contactTitle', 'h4', 'Get in touch'),\n contactForm('l_'),\n ],\n },\n ]),\n ]),\n },\n ],\n },\n {\n id: 'business',\n displayName: 'Business',\n description:\n 'Company site: home with services, an about page, and a contact page.',\n category: 'Business',\n screens: [\n {\n key: 'home',\n displayName: 'Business Home',\n slug: 'home',\n seo: { title: 'Home' },\n nodes: buildNodes([\n heroSection(\n 'b_',\n 'Your business, done right',\n 'Tell visitors what you do and who you do it for.',\n ),\n section('b_servicesSection', 'xl', 6, [\n {\n id: 'b_services',\n componentId: 'muiStack',\n props: { direction: 'row', spacing: 2 },\n children: [\n featureColumn('b_s1', 'Service one', 'Describe this service.'),\n featureColumn('b_s2', 'Service two', 'Describe this service.'),\n featureColumn(\n 'b_s3',\n 'Service three',\n 'Describe this service.',\n ),\n ],\n },\n ]),\n ]),\n },\n {\n key: 'about-us',\n displayName: 'About Us',\n slug: 'about-us',\n seo: { title: 'About us' },\n nodes: buildNodes([\n // Was `maxWidth: 720` — the one unambiguous PROSE band in the set,\n // and the case the Prose Container preset exists for. MD (900px)\n // lands near the 65–75 characters a line that reads comfortably.\n section('a_wrapSection', 'md', 8, [\n {\n id: 'a_wrap',\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n text('a_title', 'h3', 'About us'),\n text(\n 'a_body',\n 'body1',\n 'Share your story: how you started, what you believe, and ' +\n 'why customers trust you.',\n ),\n ],\n },\n ]),\n ]),\n },\n {\n key: 'contact-us',\n displayName: 'Contact Us',\n slug: 'contact-us',\n seo: { title: 'Contact' },\n nodes: buildNodes([\n // Was `maxWidth: 560`. Same reading as the landing page's contact\n // band: text plus a form column, so MD.\n section('c_wrapSection', 'md', 8, [\n {\n id: 'c_wrap',\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n text('c_title', 'h3', 'Contact us'),\n text(\n 'c_body',\n 'body1',\n 'Questions or quotes — send a message and we reply within ' +\n 'one business day.',\n ),\n contactForm('c_'),\n ],\n },\n ]),\n ]),\n },\n ],\n },\n {\n id: 'portfolio',\n displayName: 'Portfolio',\n description: 'Personal portfolio: intro, work grid, and contact form.',\n category: 'Personal',\n screens: [\n {\n key: 'portfolio',\n displayName: 'Portfolio',\n slug: 'portfolio',\n seo: { title: 'Portfolio' },\n nodes: buildNodes([\n heroSection(\n 'p_',\n 'Hi, I make things',\n 'Designer / developer / photographer — introduce yourself here.',\n ),\n section('p_gridSection', 'xl', 6, [\n {\n id: 'p_grid',\n componentId: 'muiStack',\n props: { direction: 'row', spacing: 2 },\n children: [\n {\n id: 'p_img1',\n componentId: 'image',\n // `height` is an image's own intrinsic sizing prop, not a\n // band cap — out of scope for the container standard.\n props: { alt: 'Project one', height: '220px' },\n },\n {\n id: 'p_img2',\n componentId: 'image',\n props: { alt: 'Project two', height: '220px' },\n },\n {\n id: 'p_img3',\n componentId: 'image',\n props: { alt: 'Project three', height: '220px' },\n },\n ],\n },\n ]),\n // Was `maxWidth: 560`, the third of the three contact bands.\n section('p_contactSection', 'md', 6, [\n {\n id: 'p_contact',\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n text('p_contactTitle', 'h4', 'Work with me'),\n contactForm('p_'),\n ],\n },\n ]),\n ]),\n },\n ],\n },\n]\n\n/**\n * Every starter in this build, in gallery order: the platform's own, then\n * each plugin's in config order (AGL-3080). A plugin whose elements a starter\n * is built around — a storefront's product grid and cart — declares it under\n * `starterTemplates` in plugins.config.json, and the manifest generator\n * compiles what it returns, so the gallery, the seed route and a model\n * shown examples all read one list without loading any plugin.\n */\nexport const STARTER_TEMPLATES: StarterTemplate[] = [\n ...PLATFORM_STARTER_TEMPLATES,\n ...PLUGIN_STARTER_TEMPLATES,\n]\n"],"names":["PLUGIN_STARTER_TEMPLATES","normalizeScreenSlug","buildStarterNodes","buildNodes","starterHeroSection","heroSection","starterSection","section","starterText","text","starterTemplateDocId","starterId","screenKey","buildStarterTemplateDocs","starter","screens","map","screen","index","slug","id","key","data","kind","displayName","description","category","seo","nodes","source","type","starterName","starterDescription","starterOrder","buildAllStarterTemplateDocs","STARTER_TEMPLATES","flatMap","featureColumn","title","body","componentId","props","spacing","sx","flex","paddingTop","paddingRight","paddingBottom","paddingLeft","children","contactForm","prefix","formName","submitLabel","successMessage","fieldName","label","required","fieldType","buildDefaultHomeScreen","PLATFORM_STARTER_TEMPLATES","direction","alt","height"],"mappings":"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"}
@@ -0,0 +1,136 @@
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 { TransferUnfinishedImportSummary } from '../data-transfer/transfer-api';
18
+ /**
19
+ * The console shell's import wizard and export dialog, for a plugin to open.
20
+ *
21
+ * The wizard and the dialog are the console's private UI kit, which a
22
+ * published plugin cannot depend on. So the shell hands down a launcher
23
+ * through this context, and a plugin's list or hub opens the wizard for its
24
+ * own resource — the key it declared in `transferResources` — with
25
+ * `useTransferLauncher()?.openImport({ resource, scope })`.
26
+ *
27
+ * Outside the console shell — a spec, a tenant page, a surface mounted by
28
+ * something else — the context holds `null`, and a plugin hides its Import
29
+ * and Export actions: with no shell there is no workspace to move data into.
30
+ *
31
+ * Inside it, `can('import' | 'export', target)` says which of the two this
32
+ * person may use (AGL-3546): a plugin shows Import only when `can('import')`
33
+ * and Export only when `can('export')`. The transfer routes stay the
34
+ * enforcement; `can` answers what they would.
35
+ *
36
+ * Only types and a context: it names no resource, imports nothing from the
37
+ * transfer core, and so costs the barrel nothing past React.
38
+ *
39
+ * A client-only context like the others in `contexts.ts`: it calls
40
+ * `createContext` at module scope, so it is reachable from the full
41
+ * `@aglyn/aglyn` barrel (and this subpath) and never from
42
+ * `@aglyn/aglyn/server` (AGL-405).
43
+ */
44
+ /** Where the records live: the workspace, or one of its sites. */
45
+ export type TransferLaunchScope = 'org' | 'host';
46
+ /** Opens the import wizard on one resource. */
47
+ export interface TransferImportLaunch {
48
+ /**
49
+ * The resource key the plugin declared in `transferResources` — for one
50
+ * declared with `instances`, the key naming the instance
51
+ * (`data.dataset:<datasetId>`).
52
+ */
53
+ resource: string;
54
+ scope: TransferLaunchScope;
55
+ /** The wizard's title, naming the instance ("Import into Products"); "Import <resource label>" when absent. */
56
+ title?: string;
57
+ /** The site, for a `host` resource. */
58
+ hostId?: string | null;
59
+ /** Resume this import instead of starting a new one. */
60
+ jobId?: string | null;
61
+ /**
62
+ * What the file is imported as, as the `importMapping` zone's widgets know
63
+ * it (`contacts`); omitted, the mapping step shows no zone.
64
+ */
65
+ mappingZone?: string;
66
+ /** Called when the person leaves the wizard from its results with Done. */
67
+ onFinished?(): void;
68
+ }
69
+ /** Opens the export dialog on one resource. */
70
+ export interface TransferExportLaunch {
71
+ /** The resource key the plugin declared in `transferResources`, naming the instance for one declared with `instances`. */
72
+ resource: string;
73
+ scope: TransferLaunchScope;
74
+ /** The dialog's title, naming the instance ("Export Products"); "Export <resource label>" when absent. */
75
+ title?: string;
76
+ /** The site, for a `host` resource. */
77
+ hostId?: string | null;
78
+ /** The record ids the person selected in the list, when there is a selection. */
79
+ selection?: readonly string[];
80
+ /** The list's current filter: a name for it, and the value the resource's `readPage` reads. */
81
+ filter?: {
82
+ label: string;
83
+ value: unknown;
84
+ };
85
+ }
86
+ /** What a person may do with a resource's records. */
87
+ export type TransferAction = 'import' | 'export';
88
+ /** The resource a list asks {@link TransferLauncher.can} about. */
89
+ export interface TransferAccessTarget {
90
+ /** The resource key, naming the instance for one declared with `instances`. */
91
+ resource: string;
92
+ scope: TransferLaunchScope;
93
+ /** The site, for a `host` resource or a workspace resource read through one site. */
94
+ hostId?: string | null;
95
+ }
96
+ /**
97
+ * An import the person started and left before it wrote anything
98
+ * (AGL-3549) — a tab closed mid-wizard — which `openImport({ jobId })`
99
+ * reopens on the step it was left at.
100
+ */
101
+ export type TransferUnfinishedImport = TransferUnfinishedImportSummary;
102
+ /** What the shell offers: open the wizard or the dialog, or close whichever is open. */
103
+ export interface TransferLauncher {
104
+ openImport(launch: TransferImportLaunch): void;
105
+ openExport(launch: TransferExportLaunch): void;
106
+ close(): void;
107
+ /**
108
+ * Whether the person may `action` the target's records (AGL-3546) — the
109
+ * answer the transfer routes give, from the permissions the shell already
110
+ * holds: synchronous, with no request per button, and `false` until those
111
+ * permissions have answered. Importing needs "Manage data" (on the named
112
+ * site, for a site's records); exporting needs only access to the
113
+ * records — membership, and reaching the named site — unless the resource
114
+ * declares a `readPermission`. The routes stay the enforcement.
115
+ */
116
+ can(action: TransferAction, target: TransferAccessTarget): boolean;
117
+ /**
118
+ * The person's own unfinished imports (AGL-3549), newest first: of the
119
+ * target's resource — the exact key, so one dataset's are not another's —
120
+ * on the target's site when it names one, when a target is given; every
121
+ * one otherwise. Empty
122
+ * until the shell has read them; the first ask starts the read, and the
123
+ * list is read again whenever the wizard closes. Only for a person who may
124
+ * import into the workspace.
125
+ */
126
+ unfinished?(target?: TransferAccessTarget): readonly TransferUnfinishedImport[];
127
+ /**
128
+ * Throws an unfinished import away now — its job, its file and its saved
129
+ * choices — instead of leaving it to expire. Refused for an import that
130
+ * has written anything, which is undone instead.
131
+ */
132
+ discard?(jobId: string): Promise<void>;
133
+ }
134
+ export declare const TransferLauncherContext: import("react").Context<TransferLauncher>;
135
+ /** The shell's launcher, or `null` outside the console shell. */
136
+ export declare function useTransferLauncher(): TransferLauncher | null;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ import { createContext, useContext } from "react";
17
+ export const TransferLauncherContext = createContext(null);
18
+ TransferLauncherContext.displayName = 'TransferLauncherContext';
19
+ /** The shell's launcher, or `null` outside the console shell. */ export function useTransferLauncher() {
20
+ return useContext(TransferLauncherContext);
21
+ }
22
+
23
+ //# sourceMappingURL=transfer-launcher-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/transfer-launcher-context.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createContext, useContext } from 'react'\nimport type { TransferUnfinishedImportSummary } from '../data-transfer/transfer-api'\n\n/**\n * The console shell's import wizard and export dialog, for a plugin to open.\n *\n * The wizard and the dialog are the console's private UI kit, which a\n * published plugin cannot depend on. So the shell hands down a launcher\n * through this context, and a plugin's list or hub opens the wizard for its\n * own resource — the key it declared in `transferResources` — with\n * `useTransferLauncher()?.openImport({ resource, scope })`.\n *\n * Outside the console shell — a spec, a tenant page, a surface mounted by\n * something else — the context holds `null`, and a plugin hides its Import\n * and Export actions: with no shell there is no workspace to move data into.\n *\n * Inside it, `can('import' | 'export', target)` says which of the two this\n * person may use (AGL-3546): a plugin shows Import only when `can('import')`\n * and Export only when `can('export')`. The transfer routes stay the\n * enforcement; `can` answers what they would.\n *\n * Only types and a context: it names no resource, imports nothing from the\n * transfer core, and so costs the barrel nothing past React.\n *\n * A client-only context like the others in `contexts.ts`: it calls\n * `createContext` at module scope, so it is reachable from the full\n * `@aglyn/aglyn` barrel (and this subpath) and never from\n * `@aglyn/aglyn/server` (AGL-405).\n */\n\n/** Where the records live: the workspace, or one of its sites. */\nexport type TransferLaunchScope = 'org' | 'host'\n\n/** Opens the import wizard on one resource. */\nexport interface TransferImportLaunch {\n /**\n * The resource key the plugin declared in `transferResources` — for one\n * declared with `instances`, the key naming the instance\n * (`data.dataset:<datasetId>`).\n */\n resource: string\n scope: TransferLaunchScope\n /** The wizard's title, naming the instance (\"Import into Products\"); \"Import <resource label>\" when absent. */\n title?: string\n /** The site, for a `host` resource. */\n hostId?: string | null\n /** Resume this import instead of starting a new one. */\n jobId?: string | null\n /**\n * What the file is imported as, as the `importMapping` zone's widgets know\n * it (`contacts`); omitted, the mapping step shows no zone.\n */\n mappingZone?: string\n /** Called when the person leaves the wizard from its results with Done. */\n onFinished?(): void\n}\n\n/** Opens the export dialog on one resource. */\nexport interface TransferExportLaunch {\n /** The resource key the plugin declared in `transferResources`, naming the instance for one declared with `instances`. */\n resource: string\n scope: TransferLaunchScope\n /** The dialog's title, naming the instance (\"Export Products\"); \"Export <resource label>\" when absent. */\n title?: string\n /** The site, for a `host` resource. */\n hostId?: string | null\n /** The record ids the person selected in the list, when there is a selection. */\n selection?: readonly string[]\n /** The list's current filter: a name for it, and the value the resource's `readPage` reads. */\n filter?: { label: string; value: unknown }\n}\n\n/** What a person may do with a resource's records. */\nexport type TransferAction = 'import' | 'export'\n\n/** The resource a list asks {@link TransferLauncher.can} about. */\nexport interface TransferAccessTarget {\n /** The resource key, naming the instance for one declared with `instances`. */\n resource: string\n scope: TransferLaunchScope\n /** The site, for a `host` resource or a workspace resource read through one site. */\n hostId?: string | null\n}\n\n/**\n * An import the person started and left before it wrote anything\n * (AGL-3549) — a tab closed mid-wizard — which `openImport({ jobId })`\n * reopens on the step it was left at.\n */\nexport type TransferUnfinishedImport = TransferUnfinishedImportSummary\n\n/** What the shell offers: open the wizard or the dialog, or close whichever is open. */\nexport interface TransferLauncher {\n openImport(launch: TransferImportLaunch): void\n openExport(launch: TransferExportLaunch): void\n close(): void\n /**\n * Whether the person may `action` the target's records (AGL-3546) — the\n * answer the transfer routes give, from the permissions the shell already\n * holds: synchronous, with no request per button, and `false` until those\n * permissions have answered. Importing needs \"Manage data\" (on the named\n * site, for a site's records); exporting needs only access to the\n * records — membership, and reaching the named site — unless the resource\n * declares a `readPermission`. The routes stay the enforcement.\n */\n can(action: TransferAction, target: TransferAccessTarget): boolean\n /**\n * The person's own unfinished imports (AGL-3549), newest first: of the\n * target's resource — the exact key, so one dataset's are not another's —\n * on the target's site when it names one, when a target is given; every\n * one otherwise. Empty\n * until the shell has read them; the first ask starts the read, and the\n * list is read again whenever the wizard closes. Only for a person who may\n * import into the workspace.\n */\n unfinished?(target?: TransferAccessTarget): readonly TransferUnfinishedImport[]\n /**\n * Throws an unfinished import away now — its job, its file and its saved\n * choices — instead of leaving it to expire. Refused for an import that\n * has written anything, which is undone instead.\n */\n discard?(jobId: string): Promise<void>\n}\n\nexport const TransferLauncherContext = createContext<TransferLauncher | null>(null)\nTransferLauncherContext.displayName = 'TransferLauncherContext'\n\n/** The shell's launcher, or `null` outside the console shell. */\nexport function useTransferLauncher(): TransferLauncher | null {\n return useContext(TransferLauncherContext)\n}\n\n"],"names":["createContext","useContext","TransferLauncherContext","displayName","useTransferLauncher"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,aAAa,EAAEC,UAAU,QAAQ,QAAO;AA4HjD,OAAO,MAAMC,0BAA0BF,cAAuC,MAAK;AACnFE,wBAAwBC,WAAW,GAAG;AAEtC,+DAA+D,GAC/D,OAAO,SAASC;IACd,OAAOH,WAAWC;AACpB"}
@@ -0,0 +1,39 @@
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 TransferAccessTarget } from './transfer-launcher-context';
18
+ export interface TransferResumeImportProps {
19
+ /** The resource the surface imports into, and the site — as its Import button opens it. */
20
+ target: TransferAccessTarget;
21
+ /** The wizard's title, as the surface's Import button sets it. */
22
+ title?: string;
23
+ /** Called when the person leaves the resumed wizard from its results. */
24
+ onFinished?(): void;
25
+ }
26
+ /**
27
+ * "Resume import" beside a surface's Import (AGL-3549): the imports the
28
+ * person started on this resource and left before anything was written —
29
+ * a tab closed mid-wizard — each reopened where it stopped
30
+ * (`openImport({ jobId })`) or discarded. Draws nothing outside the
31
+ * console shell, for a person who may not import here, or when there is
32
+ * nothing to resume. Every choice made in the wizard is kept with the job,
33
+ * so a resumed import opens on the step it was left at.
34
+ */
35
+ export declare function TransferResumeImport(props: TransferResumeImportProps): import("react").JSX.Element;
36
+ export declare namespace TransferResumeImport {
37
+ var displayName: string;
38
+ }
39
+ export default TransferResumeImport;