@aglyn/plugins-ai 1.0.0-beta.272 → 1.0.0-beta.274
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.
- package/package.json +17 -17
- package/src/lib/components/ai-site-start-card.component.js +237 -234
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/jobs/ai-empty-site-sweep.d.ts +12 -1
- package/src/lib/jobs/ai-empty-site-sweep.js +15 -3
- package/src/lib/jobs/ai-empty-site-sweep.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.js +21 -2
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-seo-step.js +8 -4
- package/src/lib/jobs/ai-job-seo-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-datasets.d.ts +39 -1
- package/src/lib/jobs/ai-job-site-datasets.js +111 -15
- package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
- package/src/lib/jobs/ai-job-site-step.d.ts +12 -3
- package/src/lib/jobs/ai-job-site-step.js +85 -11
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/jobs/ai-job-text-step.d.ts +8 -0
- package/src/lib/jobs/ai-job-text-step.js.map +1 -1
- package/src/lib/jobs/ai-jobs.d.ts +3 -0
- package/src/lib/jobs/ai-jobs.js +4 -0
- package/src/lib/jobs/ai-jobs.js.map +1 -1
- package/src/lib/jobs/ai-layout-owner-photos.js +4 -4
- package/src/lib/jobs/ai-layout-owner-photos.js.map +1 -1
- package/src/lib/jobs/ai-layout-stock-photos.d.ts +35 -0
- package/src/lib/jobs/ai-layout-stock-photos.js +114 -43
- package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
- package/src/lib/jobs/ai-site-late-photos.d.ts +143 -0
- package/src/lib/jobs/ai-site-late-photos.js +486 -0
- package/src/lib/jobs/ai-site-late-photos.js.map +1 -0
- package/src/lib/jobs/ai-site-publish.d.ts +18 -0
- package/src/lib/jobs/ai-site-publish.js +123 -5
- package/src/lib/jobs/ai-site-publish.js.map +1 -1
- package/src/lib/jobs/fixtures/ai-site-late-photos-laurel-fork.d.ts +83 -0
- package/src/lib/jobs/fixtures/ai-site-late-photos-laurel-fork.js +1553 -0
- package/src/lib/jobs/fixtures/ai-site-late-photos-laurel-fork.js.map +1 -0
- package/src/lib/layout-language/ai-layout-pictures.d.ts +50 -13
- package/src/lib/layout-language/ai-layout-pictures.js +81 -19
- package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +10 -0
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-site-photos.d.ts +119 -0
- package/src/lib/model/ai-site-photos.js +128 -0
- package/src/lib/model/ai-site-photos.js.map +1 -0
- package/src/lib/runtime/ai-doctrine-validators.d.ts +3 -1
- package/src/lib/runtime/ai-doctrine-validators.js +3 -1
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/seo-fields.d.ts +29 -4
- package/src/lib/runtime/seo-fields.js +58 -11
- package/src/lib/runtime/seo-fields.js.map +1 -1
- package/src/lib/tools/ai-seo-tool.d.ts +25 -1
- package/src/lib/tools/ai-seo-tool.js +61 -0
- package/src/lib/tools/ai-seo-tool.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-site-late-photos-laurel-fork.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { NodesMap } from '@aglyn/aglyn/types/nodes'\n\n/**\n * THE V1.0.0-BETA.271 LAUREL FORK PHOTOGRAPHY GUIDED START (AGL-3988), as\n * production left it: workspace jWmGooWE3L, host zVfToa7iIQ\n * (laurel-fork-photography.aglyn.app), job yZUqIPmjIZ, 2026-10-19 23:05Z,\n * \"a wedding and family photographer in the Blue Ridge Mountains who books\n * sessions and elopements\". Read back read-only from production's job and\n * host documents after the job finished.\n *\n * - `LAUREL_FORK_PAGES`: each published page's tree, cut to its sections,\n * its pictures and every node between them (frames keep their shape), in\n * document order. Copy and styling are left out; nothing else is changed.\n * - `LAUREL_FORK_PHOTOS`: the ten stock photos the job copied into the\n * site's library (23:08:29 to 23:13:30), with the query that found each.\n * - `LAUREL_FORK_COVERS`: the twelve \"Gallery collections\" records, in\n * order, every one on a starter (the office team and the desk in turn).\n * - `LAUREL_FORK_REFUSALS`: the Pixabay ids whose downloads the console's\n * request logs show pixabay.com's Cloudflare refusing with 429 (after four\n * tries each), by the beat that sent them. The logs name the photo, not\n * the slot: the covers' beat built the datasets (23:07:09), the next beat\n * the home page (23:08:11).\n */\n\n/** The site's share image the publish left: the starter the site was created with. */\nexport const LAUREL_FORK_SHARE_IMAGE = { image: '/_static/starter/hero-team.jpg', imageWidth: 1600, imageHeight: 1067, imageAlt: 'A small team working together around a table in a bright office' } as const\n\n/** The pages the start put live, in the site's order, each cut to its pictures. */\nexport const LAUREL_FORK_PAGES: ReadonlyArray<{ id: string; title: string; slug: string; nodes: NodesMap }> = [\n {\n id: '5opPRLVW_U',\n title: 'Home',\n slug: '/',\n nodes: {\n '_@_': { $id: '_@_', componentId: 'div', nodes: ['ai-5opPRLVW_U-section-1', 'ai-5opPRLVW_U-section-2', 'ai-5opPRLVW_U-section-3', 'ai-5opPRLVW_U-section-4', 'ai-5opPRLVW_U-section-5', 'ai-5opPRLVW_U-section-6'] },\n 'ai-5opPRLVW_U-section-1': { $id: 'ai-5opPRLVW_U-section-1', componentId: 'section', parentId: '_@_', nodes: ['bUKvvYVspl'] },\n 'ai-5opPRLVW_U-section-2': { $id: 'ai-5opPRLVW_U-section-2', componentId: 'section', parentId: '_@_', nodes: ['kZnxgtEEwW'] },\n 'ai-5opPRLVW_U-section-3': { $id: 'ai-5opPRLVW_U-section-3', componentId: 'section', parentId: '_@_', nodes: ['rPNWWfbfQf'] },\n 'ai-5opPRLVW_U-section-4': { $id: 'ai-5opPRLVW_U-section-4', componentId: 'section', parentId: '_@_', nodes: [] },\n 'ai-5opPRLVW_U-section-5': { $id: 'ai-5opPRLVW_U-section-5', componentId: 'section', parentId: '_@_', nodes: ['k0XulehpfP'] },\n 'ai-5opPRLVW_U-section-6': { $id: 'ai-5opPRLVW_U-section-6', componentId: 'section', parentId: '_@_', nodes: ['p9fSYaMS_L'], sx: { position: 'relative' } },\n bUKvvYVspl: { $id: 'bUKvvYVspl', componentId: 'muiContainer', parentId: 'ai-5opPRLVW_U-section-1', nodes: ['qDfEd0AZCr'] },\n kZnxgtEEwW: { $id: 'kZnxgtEEwW', componentId: 'muiContainer', parentId: 'ai-5opPRLVW_U-section-2', nodes: ['AyvCN0Vv9Z'] },\n rPNWWfbfQf: { $id: 'rPNWWfbfQf', componentId: 'muiContainer', parentId: 'ai-5opPRLVW_U-section-3', nodes: ['Ffnn6cK5Ga'] },\n k0XulehpfP: { $id: 'k0XulehpfP', componentId: 'muiContainer', parentId: 'ai-5opPRLVW_U-section-5', nodes: ['FR7WdQd4sZ'] },\n p9fSYaMS_L: { $id: 'p9fSYaMS_L', componentId: 'muiBox', parentId: 'ai-5opPRLVW_U-section-6', nodes: ['Hg-Yoxi45H'], sx: { position: 'absolute', width: '100%', height: '100%' } },\n qDfEd0AZCr: { $id: 'qDfEd0AZCr', componentId: 'muiStack', parentId: 'bUKvvYVspl', nodes: ['ECW4_DSLWt'] },\n AyvCN0Vv9Z: { $id: 'AyvCN0Vv9Z', componentId: 'muiStack', parentId: 'kZnxgtEEwW', nodes: ['QwlyU6yYqS'] },\n Ffnn6cK5Ga: { $id: 'Ffnn6cK5Ga', componentId: 'muiGrid', parentId: 'rPNWWfbfQf', nodes: ['bAJ25yBgWt'] },\n FR7WdQd4sZ: { $id: 'FR7WdQd4sZ', componentId: 'muiStack', parentId: 'k0XulehpfP', nodes: ['mTWJuHpqNc'] },\n 'Hg-Yoxi45H': { $id: 'Hg-Yoxi45H', componentId: 'image', parentId: 'p9fSYaMS_L', nodes: [], props: { alt: 'A couple at a wedding', src: 'media:zVfToa7iIQ/20t9SUxyKJ', intrinsicWidth: 1280, intrinsicHeight: 720 } },\n ECW4_DSLWt: { $id: 'ECW4_DSLWt', componentId: 'muiBox', parentId: 'qDfEd0AZCr', nodes: ['MDpjUplylc'], sx: { position: 'relative', aspectRatio: { xs: '4 / 3', md: '21 / 9' } } },\n QwlyU6yYqS: { $id: 'QwlyU6yYqS', componentId: 'muiBox', parentId: 'AyvCN0Vv9Z', nodes: ['-AJupgvXns'] },\n bAJ25yBgWt: { $id: 'bAJ25yBgWt', componentId: 'muiGrid', parentId: 'Ffnn6cK5Ga', nodes: ['21gPMGZVtp'] },\n mTWJuHpqNc: { $id: 'mTWJuHpqNc', componentId: 'muiGrid', parentId: 'FR7WdQd4sZ', nodes: ['6fk0o-tRgv'] },\n MDpjUplylc: { $id: 'MDpjUplylc', componentId: 'image', parentId: 'ECW4_DSLWt', nodes: [], props: { alt: 'A small team working together around a table in a bright office', src: '/_static/starter/hero-team.jpg', intrinsicWidth: 1600, intrinsicHeight: 1067, loading: 'eager' } },\n '-AJupgvXns': { $id: '-AJupgvXns', componentId: 'muiStack', parentId: 'QwlyU6yYqS', nodes: ['pfhzMkYkWV'] },\n '21gPMGZVtp': { $id: '21gPMGZVtp', componentId: 'muiBox', parentId: 'bAJ25yBgWt', nodes: ['A60C_InPsl'], sx: { position: 'relative', aspectRatio: '4 / 3' } },\n '6fk0o-tRgv': { $id: '6fk0o-tRgv', componentId: 'muiGrid', parentId: 'mTWJuHpqNc', nodes: ['MDsN8QXzkJ'] },\n pfhzMkYkWV: { $id: 'pfhzMkYkWV', componentId: 'image', parentId: '-AJupgvXns', nodes: [], sx: { aspectRatio: '4 / 5' }, props: { alt: '{{item.image_description}}', loading: 'lazy', src: '{{item.image}}' } },\n A60C_InPsl: { $id: 'A60C_InPsl', componentId: 'image', parentId: '21gPMGZVtp', nodes: [], sx: { position: 'absolute', width: '100%', height: '100%' }, props: { alt: 'A tidy desk with a laptop, a lamp and fresh flowers', src: '/_static/starter/gallery-desk.jpg', intrinsicWidth: 1600, intrinsicHeight: 1068 } },\n MDsN8QXzkJ: { $id: 'MDsN8QXzkJ', componentId: 'muiStack', parentId: '6fk0o-tRgv', nodes: ['HpkOCRgkaU'] },\n HpkOCRgkaU: { $id: 'HpkOCRgkaU', componentId: 'image', parentId: 'MDsN8QXzkJ', nodes: [], sx: { aspectRatio: { xs: '4 / 3', md: '4 / 5' } }, props: { alt: 'A family in the mountains', src: 'media:zVfToa7iIQ/Dno5tXH307', intrinsicWidth: 853, intrinsicHeight: 1280 } },\n } as unknown as NodesMap,\n },\n {\n id: 'GLoK3JfOCj',\n title: 'Galleries',\n slug: '/galleries',\n nodes: {\n '_@_': { $id: '_@_', componentId: 'div', nodes: ['ai-GLoK3JfOCj-section-1', 'ai-GLoK3JfOCj-section-2', 'ai-GLoK3JfOCj-section-3', 'ai-GLoK3JfOCj-section-4'] },\n 'ai-GLoK3JfOCj-section-1': { $id: 'ai-GLoK3JfOCj-section-1', componentId: 'section', parentId: '_@_', nodes: ['bE7h5VR4fS'] },\n 'ai-GLoK3JfOCj-section-2': { $id: 'ai-GLoK3JfOCj-section-2', componentId: 'section', parentId: '_@_', nodes: ['keKfGYqdrv'] },\n 'ai-GLoK3JfOCj-section-3': { $id: 'ai-GLoK3JfOCj-section-3', componentId: 'section', parentId: '_@_', nodes: ['T0-Kc1k-5E'] },\n 'ai-GLoK3JfOCj-section-4': { $id: 'ai-GLoK3JfOCj-section-4', componentId: 'section', parentId: '_@_', nodes: ['m7rhszuwJ_'], sx: { position: 'relative' } },\n bE7h5VR4fS: { $id: 'bE7h5VR4fS', componentId: 'muiContainer', parentId: 'ai-GLoK3JfOCj-section-1', nodes: ['61515BBhnA'] },\n keKfGYqdrv: { $id: 'keKfGYqdrv', componentId: 'muiContainer', parentId: 'ai-GLoK3JfOCj-section-2', nodes: ['dmaHvXXLog'] },\n 'T0-Kc1k-5E': { $id: 'T0-Kc1k-5E', componentId: 'muiContainer', parentId: 'ai-GLoK3JfOCj-section-3', nodes: ['rRaTuKKtV_'] },\n m7rhszuwJ_: { $id: 'm7rhszuwJ_', componentId: 'muiBox', parentId: 'ai-GLoK3JfOCj-section-4', nodes: ['wt_B806Cz2'], sx: { position: 'absolute', width: '100%', height: '100%' } },\n '61515BBhnA': { $id: '61515BBhnA', componentId: 'muiStack', parentId: 'bE7h5VR4fS', nodes: ['lxEoMaVorh'] },\n dmaHvXXLog: { $id: 'dmaHvXXLog', componentId: 'muiStack', parentId: 'keKfGYqdrv', nodes: ['vjw8N7hFAS'] },\n rRaTuKKtV_: { $id: 'rRaTuKKtV_', componentId: 'muiStack', parentId: 'T0-Kc1k-5E', nodes: ['lrqoLGssJc'] },\n wt_B806Cz2: { $id: 'wt_B806Cz2', componentId: 'image', parentId: 'm7rhszuwJ_', nodes: [], props: { alt: 'A father with a son in the mountains', src: 'media:zVfToa7iIQ/oKqg7KVmFs', intrinsicWidth: 1280, intrinsicHeight: 820 } },\n lxEoMaVorh: { $id: 'lxEoMaVorh', componentId: 'muiBox', parentId: '61515BBhnA', nodes: ['8Z0J2Dvkc4'], sx: { position: 'relative', aspectRatio: { xs: '16 / 9', md: '3 / 1' } } },\n vjw8N7hFAS: { $id: 'vjw8N7hFAS', componentId: 'muiBox', parentId: 'dmaHvXXLog', nodes: ['bctLBlZwCn'] },\n lrqoLGssJc: { $id: 'lrqoLGssJc', componentId: 'muiBox', parentId: 'rRaTuKKtV_', nodes: ['BuK5C-zbWh'] },\n '8Z0J2Dvkc4': { $id: '8Z0J2Dvkc4', componentId: 'image', parentId: 'lxEoMaVorh', nodes: [], props: { alt: 'A flower at a wedding', src: 'media:zVfToa7iIQ/adqePe-iIO', intrinsicWidth: 1280, intrinsicHeight: 853, loading: 'eager' } },\n bctLBlZwCn: { $id: 'bctLBlZwCn', componentId: 'muiStack', parentId: 'vjw8N7hFAS', nodes: ['5VjwlqdQsP'] },\n 'BuK5C-zbWh': { $id: 'BuK5C-zbWh', componentId: 'muiStack', parentId: 'lrqoLGssJc', nodes: ['rmPoyiqnm1'] },\n '5VjwlqdQsP': { $id: '5VjwlqdQsP', componentId: 'image', parentId: 'bctLBlZwCn', nodes: [], sx: { aspectRatio: '4 / 5' }, props: { alt: '{{item.image_description}}', loading: 'lazy', src: '{{item.image}}' } },\n rmPoyiqnm1: { $id: 'rmPoyiqnm1', componentId: 'image', parentId: 'BuK5C-zbWh', nodes: [], sx: { aspectRatio: '4 / 5' }, props: { alt: '{{item.image_description}}', loading: 'lazy', src: '{{item.image}}' } },\n } as unknown as NodesMap,\n },\n {\n id: 'KgHi9fbWpy',\n title: 'Packages',\n slug: '/packages',\n nodes: {\n '_@_': { $id: '_@_', componentId: 'div', nodes: ['ai-KgHi9fbWpy-section-1', 'ai-KgHi9fbWpy-section-2', 'ai-KgHi9fbWpy-section-3', 'ai-KgHi9fbWpy-section-4'] },\n 'ai-KgHi9fbWpy-section-1': { $id: 'ai-KgHi9fbWpy-section-1', componentId: 'section', parentId: '_@_', nodes: ['KcpbqM5HGe'] },\n 'ai-KgHi9fbWpy-section-2': { $id: 'ai-KgHi9fbWpy-section-2', componentId: 'section', parentId: '_@_', nodes: [] },\n 'ai-KgHi9fbWpy-section-3': { $id: 'ai-KgHi9fbWpy-section-3', componentId: 'section', parentId: '_@_', nodes: [] },\n 'ai-KgHi9fbWpy-section-4': { $id: 'ai-KgHi9fbWpy-section-4', componentId: 'section', parentId: '_@_', nodes: ['RUCfDEpGHe'], sx: { position: 'relative' } },\n KcpbqM5HGe: { $id: 'KcpbqM5HGe', componentId: 'muiContainer', parentId: 'ai-KgHi9fbWpy-section-1', nodes: ['FqJTPKOFhc'] },\n RUCfDEpGHe: { $id: 'RUCfDEpGHe', componentId: 'muiBox', parentId: 'ai-KgHi9fbWpy-section-4', nodes: ['JYPG2A7rAM'], sx: { position: 'absolute', width: '100%', height: '100%' } },\n FqJTPKOFhc: { $id: 'FqJTPKOFhc', componentId: 'muiStack', parentId: 'KcpbqM5HGe', nodes: ['A0jJJciYYl'] },\n JYPG2A7rAM: { $id: 'JYPG2A7rAM', componentId: 'image', parentId: 'RUCfDEpGHe', nodes: [], props: { alt: 'A couple at sunset', src: 'media:zVfToa7iIQ/RyW7TuJfq4', intrinsicWidth: 1280, intrinsicHeight: 1117 } },\n A0jJJciYYl: { $id: 'A0jJJciYYl', componentId: 'muiBox', parentId: 'FqJTPKOFhc', nodes: ['TSZstV47eS'], sx: { position: 'relative', aspectRatio: { xs: '16 / 9', md: '3 / 1' } } },\n TSZstV47eS: { $id: 'TSZstV47eS', componentId: 'image', parentId: 'A0jJJciYYl', nodes: [], props: { alt: 'An aisle at a wedding', src: 'media:zVfToa7iIQ/Q_imBRl0u7', intrinsicWidth: 1280, intrinsicHeight: 854, loading: 'eager' } },\n } as unknown as NodesMap,\n },\n {\n id: '2V3XE8mq50',\n title: 'About',\n slug: '/about',\n nodes: {\n '_@_': { $id: '_@_', componentId: 'div', nodes: ['ai-2V3XE8mq50-section-1', 'ai-2V3XE8mq50-section-2', 'ai-2V3XE8mq50-section-3', 'ai-2V3XE8mq50-section-4', 'ai-2V3XE8mq50-section-5'] },\n 'ai-2V3XE8mq50-section-1': { $id: 'ai-2V3XE8mq50-section-1', componentId: 'section', parentId: '_@_', nodes: ['_qdKnXC6SG'] },\n 'ai-2V3XE8mq50-section-2': { $id: 'ai-2V3XE8mq50-section-2', componentId: 'section', parentId: '_@_', nodes: ['DNXBX6Rjty'] },\n 'ai-2V3XE8mq50-section-3': { $id: 'ai-2V3XE8mq50-section-3', componentId: 'section', parentId: '_@_', nodes: ['P05uXIH3ay'] },\n 'ai-2V3XE8mq50-section-4': { $id: 'ai-2V3XE8mq50-section-4', componentId: 'section', parentId: '_@_', nodes: ['laVjLPJZ4L'] },\n 'ai-2V3XE8mq50-section-5': { $id: 'ai-2V3XE8mq50-section-5', componentId: 'section', parentId: '_@_', nodes: [] },\n _qdKnXC6SG: { $id: '_qdKnXC6SG', componentId: 'muiContainer', parentId: 'ai-2V3XE8mq50-section-1', nodes: ['uPTgcF6jUS'] },\n DNXBX6Rjty: { $id: 'DNXBX6Rjty', componentId: 'muiContainer', parentId: 'ai-2V3XE8mq50-section-2', nodes: ['7W5I4m7ArO'] },\n P05uXIH3ay: { $id: 'P05uXIH3ay', componentId: 'muiContainer', parentId: 'ai-2V3XE8mq50-section-3', nodes: ['3s62hrq9-J'] },\n laVjLPJZ4L: { $id: 'laVjLPJZ4L', componentId: 'muiContainer', parentId: 'ai-2V3XE8mq50-section-4', nodes: ['o66WNW1fIn'] },\n uPTgcF6jUS: { $id: 'uPTgcF6jUS', componentId: 'muiStack', parentId: '_qdKnXC6SG', nodes: ['Kg7ruI_Meh'] },\n '7W5I4m7ArO': { $id: '7W5I4m7ArO', componentId: 'muiGrid', parentId: 'DNXBX6Rjty', nodes: ['QWuFAJeRmO'] },\n '3s62hrq9-J': { $id: '3s62hrq9-J', componentId: 'muiStack', parentId: 'P05uXIH3ay', nodes: ['vFwen5PXdE'] },\n o66WNW1fIn: { $id: 'o66WNW1fIn', componentId: 'muiStack', parentId: 'laVjLPJZ4L', nodes: ['ermJcuJZ3n'] },\n Kg7ruI_Meh: { $id: 'Kg7ruI_Meh', componentId: 'muiBox', parentId: 'uPTgcF6jUS', nodes: ['w2coL2n_tN'], sx: { position: 'relative', aspectRatio: { xs: '16 / 9', md: '3 / 1' } } },\n QWuFAJeRmO: { $id: 'QWuFAJeRmO', componentId: 'muiGrid', parentId: '7W5I4m7ArO', nodes: ['oXdwyBK5Gj'] },\n vFwen5PXdE: { $id: 'vFwen5PXdE', componentId: 'muiGrid', parentId: '3s62hrq9-J', nodes: ['R8y0_H5y1r', 'qh6v4JMuvM', 'ss9ZdrPkPO'] },\n ermJcuJZ3n: { $id: 'ermJcuJZ3n', componentId: 'muiGrid', parentId: 'o66WNW1fIn', nodes: ['zNjq_ENdsA', 'xHGY5h74hw', 'OXk2tX7oIo'] },\n w2coL2n_tN: { $id: 'w2coL2n_tN', componentId: 'image', parentId: 'Kg7ruI_Meh', nodes: [], props: { alt: 'A father with a son in the mountains', src: 'media:zVfToa7iIQ/oKqg7KVmFs', intrinsicWidth: 1280, intrinsicHeight: 820, loading: 'eager' } },\n oXdwyBK5Gj: { $id: 'oXdwyBK5Gj', componentId: 'muiBox', parentId: 'QWuFAJeRmO', nodes: ['oFYhWhTjA8'], sx: { position: 'relative', aspectRatio: '4 / 3' } },\n R8y0_H5y1r: { $id: 'R8y0_H5y1r', componentId: 'muiGrid', parentId: 'vFwen5PXdE', nodes: ['mxxJl8mJeQ'] },\n qh6v4JMuvM: { $id: 'qh6v4JMuvM', componentId: 'muiGrid', parentId: 'vFwen5PXdE', nodes: ['7B-dRm9KH0'] },\n ss9ZdrPkPO: { $id: 'ss9ZdrPkPO', componentId: 'muiGrid', parentId: 'vFwen5PXdE', nodes: ['UqRQw7fAJL'] },\n zNjq_ENdsA: { $id: 'zNjq_ENdsA', componentId: 'muiGrid', parentId: 'ermJcuJZ3n', nodes: ['_tcXdiehBM'] },\n xHGY5h74hw: { $id: 'xHGY5h74hw', componentId: 'muiGrid', parentId: 'ermJcuJZ3n', nodes: ['DhHFJngdtx'] },\n OXk2tX7oIo: { $id: 'OXk2tX7oIo', componentId: 'muiGrid', parentId: 'ermJcuJZ3n', nodes: ['DX1d3Nk_SS'] },\n oFYhWhTjA8: { $id: 'oFYhWhTjA8', componentId: 'image', parentId: 'oXdwyBK5Gj', nodes: [], sx: { position: 'absolute', width: '100%', height: '100%' }, props: { alt: 'A couple at sunset', src: 'media:zVfToa7iIQ/RyW7TuJfq4', intrinsicWidth: 1280, intrinsicHeight: 1117 } },\n mxxJl8mJeQ: { $id: 'mxxJl8mJeQ', componentId: 'muiStack', parentId: 'R8y0_H5y1r', nodes: ['NUokTPuJqS'] },\n '7B-dRm9KH0': { $id: '7B-dRm9KH0', componentId: 'muiStack', parentId: 'qh6v4JMuvM', nodes: ['mXvxLG6ZCC'] },\n UqRQw7fAJL: { $id: 'UqRQw7fAJL', componentId: 'muiStack', parentId: 'ss9ZdrPkPO', nodes: ['cDkrmCHRY8'] },\n _tcXdiehBM: { $id: '_tcXdiehBM', componentId: 'muiStack', parentId: 'zNjq_ENdsA', nodes: ['_18zZdjkXI'] },\n DhHFJngdtx: { $id: 'DhHFJngdtx', componentId: 'muiStack', parentId: 'xHGY5h74hw', nodes: ['T4nyq3oMFE'] },\n DX1d3Nk_SS: { $id: 'DX1d3Nk_SS', componentId: 'muiStack', parentId: 'OXk2tX7oIo', nodes: ['6r8o7QflaP'] },\n NUokTPuJqS: { $id: 'NUokTPuJqS', componentId: 'image', parentId: 'mxxJl8mJeQ', nodes: [], sx: { aspectRatio: { xs: '4 / 3', md: '4 / 5' } }, props: { alt: 'A family in the mountains', src: 'media:zVfToa7iIQ/Dno5tXH307', intrinsicWidth: 853, intrinsicHeight: 1280 } },\n mXvxLG6ZCC: { $id: 'mXvxLG6ZCC', componentId: 'image', parentId: '7B-dRm9KH0', nodes: [], sx: { aspectRatio: { xs: '4 / 3', md: '4 / 5' } }, props: { alt: 'An aisle at a wedding', src: 'media:zVfToa7iIQ/Q_imBRl0u7', intrinsicWidth: 1280, intrinsicHeight: 854 } },\n cDkrmCHRY8: { $id: 'cDkrmCHRY8', componentId: 'image', parentId: 'UqRQw7fAJL', nodes: [], sx: { aspectRatio: { xs: '4 / 3', md: '4 / 5' } }, props: { alt: 'A flower at a wedding', src: 'media:zVfToa7iIQ/adqePe-iIO', intrinsicWidth: 1280, intrinsicHeight: 853 } },\n _18zZdjkXI: { $id: '_18zZdjkXI', componentId: 'image', parentId: '_tcXdiehBM', nodes: [], sx: { aspectRatio: { xs: '4 / 3', md: '4 / 5' } }, props: { alt: 'A couple at a wedding', src: 'media:zVfToa7iIQ/20t9SUxyKJ', intrinsicWidth: 1280, intrinsicHeight: 720 } },\n T4nyq3oMFE: { $id: 'T4nyq3oMFE', componentId: 'image', parentId: 'DhHFJngdtx', nodes: [], sx: { aspectRatio: { xs: '4 / 3', md: '4 / 5' } }, props: { alt: 'A family in the mountains', src: 'media:zVfToa7iIQ/Dno5tXH307', intrinsicWidth: 853, intrinsicHeight: 1280 } },\n '6r8o7QflaP': { $id: '6r8o7QflaP', componentId: 'image', parentId: 'DX1d3Nk_SS', nodes: [], sx: { aspectRatio: { xs: '4 / 3', md: '4 / 5' } }, props: { alt: 'A couple at sunset', src: 'media:zVfToa7iIQ/RyW7TuJfq4', intrinsicWidth: 1280, intrinsicHeight: 1117 } },\n } as unknown as NodesMap,\n },\n {\n id: 'uck__d_Wpk',\n title: 'FAQ',\n slug: '/faq',\n nodes: {\n '_@_': { $id: '_@_', componentId: 'div', nodes: ['ai-uck__d_Wpk-section-1', 'ai-uck__d_Wpk-section-2', 'ai-uck__d_Wpk-section-3'] },\n 'ai-uck__d_Wpk-section-1': { $id: 'ai-uck__d_Wpk-section-1', componentId: 'section', parentId: '_@_', nodes: ['Sq20gfoLHO'] },\n 'ai-uck__d_Wpk-section-2': { $id: 'ai-uck__d_Wpk-section-2', componentId: 'section', parentId: '_@_', nodes: [] },\n 'ai-uck__d_Wpk-section-3': { $id: 'ai-uck__d_Wpk-section-3', componentId: 'section', parentId: '_@_', nodes: ['iPn-4Qm3HO'], sx: { position: 'relative' } },\n Sq20gfoLHO: { $id: 'Sq20gfoLHO', componentId: 'muiContainer', parentId: 'ai-uck__d_Wpk-section-1', nodes: ['jm8QiMQi_q'] },\n 'iPn-4Qm3HO': { $id: 'iPn-4Qm3HO', componentId: 'muiBox', parentId: 'ai-uck__d_Wpk-section-3', nodes: ['ELjSSmxB67'], sx: { position: 'absolute', width: '100%', height: '100%' } },\n jm8QiMQi_q: { $id: 'jm8QiMQi_q', componentId: 'muiStack', parentId: 'Sq20gfoLHO', nodes: ['xBtp9iJ8EL'] },\n ELjSSmxB67: { $id: 'ELjSSmxB67', componentId: 'image', parentId: 'iPn-4Qm3HO', nodes: [], props: { alt: 'A family in the mountains', src: 'media:zVfToa7iIQ/OdwfZdKKAt', intrinsicWidth: 1280, intrinsicHeight: 853 } },\n xBtp9iJ8EL: { $id: 'xBtp9iJ8EL', componentId: 'muiBox', parentId: 'jm8QiMQi_q', nodes: ['AGD00MGenQ'], sx: { position: 'relative', aspectRatio: { xs: '16 / 9', md: '3 / 1' } } },\n AGD00MGenQ: { $id: 'AGD00MGenQ', componentId: 'image', parentId: 'xBtp9iJ8EL', nodes: [], props: { alt: 'A bride at a wedding', src: 'media:zVfToa7iIQ/abVI9Y5qiS', intrinsicWidth: 1280, intrinsicHeight: 853, loading: 'eager' } },\n } as unknown as NodesMap,\n },\n {\n id: 'BmIet_iYyX',\n title: 'Contact',\n slug: '/contact',\n nodes: {\n '_@_': { $id: '_@_', componentId: 'div', nodes: ['ai-BmIet_iYyX-section-1', 'ai-BmIet_iYyX-section-2', 'ai-BmIet_iYyX-section-3', 'ai-BmIet_iYyX-section-4'] },\n 'ai-BmIet_iYyX-section-1': { $id: 'ai-BmIet_iYyX-section-1', componentId: 'section', parentId: '_@_', nodes: ['30K-RgmUlF'] },\n 'ai-BmIet_iYyX-section-2': { $id: 'ai-BmIet_iYyX-section-2', componentId: 'section', parentId: '_@_', nodes: [] },\n 'ai-BmIet_iYyX-section-3': { $id: 'ai-BmIet_iYyX-section-3', componentId: 'section', parentId: '_@_', nodes: ['5DbQg2dXyW'] },\n 'ai-BmIet_iYyX-section-4': { $id: 'ai-BmIet_iYyX-section-4', componentId: 'section', parentId: '_@_', nodes: [] },\n '30K-RgmUlF': { $id: '30K-RgmUlF', componentId: 'muiContainer', parentId: 'ai-BmIet_iYyX-section-1', nodes: ['adsQCltSNm'] },\n '5DbQg2dXyW': { $id: '5DbQg2dXyW', componentId: 'muiContainer', parentId: 'ai-BmIet_iYyX-section-3', nodes: ['EYX7UJW0m4'] },\n adsQCltSNm: { $id: 'adsQCltSNm', componentId: 'muiStack', parentId: '30K-RgmUlF', nodes: ['4EJrAgdmXy'] },\n EYX7UJW0m4: { $id: 'EYX7UJW0m4', componentId: 'muiGrid', parentId: '5DbQg2dXyW', nodes: ['1wp3Gj6_uw'] },\n '4EJrAgdmXy': { $id: '4EJrAgdmXy', componentId: 'muiBox', parentId: 'adsQCltSNm', nodes: ['DY8Ya5RX5O'], sx: { position: 'relative', aspectRatio: { xs: '16 / 9', md: '3 / 1' } } },\n '1wp3Gj6_uw': { $id: '1wp3Gj6_uw', componentId: 'muiGrid', parentId: 'EYX7UJW0m4', nodes: ['4dzQeWnYMQ'] },\n DY8Ya5RX5O: { $id: 'DY8Ya5RX5O', componentId: 'image', parentId: '4EJrAgdmXy', nodes: [], props: { alt: 'A family in the mountains', src: 'media:zVfToa7iIQ/TIP2UNTKZJ', intrinsicWidth: 1280, intrinsicHeight: 853, loading: 'eager' } },\n '4dzQeWnYMQ': { $id: '4dzQeWnYMQ', componentId: 'muiBox', parentId: '1wp3Gj6_uw', nodes: ['cS8XMuN79D'], sx: { position: 'relative', aspectRatio: '4 / 3' } },\n cS8XMuN79D: { $id: 'cS8XMuN79D', componentId: 'image', parentId: '4dzQeWnYMQ', nodes: [], sx: { position: 'absolute', width: '100%', height: '100%' }, props: { alt: 'A couple with a cowboy', src: 'media:zVfToa7iIQ/4QuVNZGL4H', intrinsicWidth: 1280, intrinsicHeight: 719 } },\n } as unknown as NodesMap,\n },\n]\n\n/** The photos the job copied into the site's library, in the order it copied them. */\nexport const LAUREL_FORK_PHOTOS: ReadonlyArray<{ mediaId: string; key: string; width: number; height: number; alt: string; query: string; at: string }> = [\n { mediaId: '20t9SUxyKJ', key: 'pixabay:5401602', width: 1280, height: 720, alt: 'A couple at a wedding', query: 'wedding couple mountains', at: '2026-10-19T23:08:29.029Z' },\n { mediaId: 'Dno5tXH307', key: 'pixabay:6071186', width: 853, height: 1280, alt: 'A family in the mountains', query: 'family mountains', at: '2026-10-19T23:08:29.363Z' },\n { mediaId: 'adqePe-iIO', key: 'pixabay:5582980', width: 1280, height: 853, alt: 'A flower at a wedding', query: 'wedding', at: '2026-10-19T23:09:30.033Z' },\n { mediaId: 'oKqg7KVmFs', key: 'pixabay:1576456', width: 1280, height: 820, alt: 'A father with a son in the mountains', query: 'family mountains', at: '2026-10-19T23:09:30.054Z' },\n { mediaId: 'Q_imBRl0u7', key: 'pixabay:1846114', width: 1280, height: 854, alt: 'An aisle at a wedding', query: 'wedding', at: '2026-10-19T23:10:42.873Z' },\n { mediaId: 'RyW7TuJfq4', key: 'pixabay:2191391', width: 1280, height: 1117, alt: 'A couple at sunset', query: 'wedding couple mountains', at: '2026-10-19T23:10:42.886Z' },\n { mediaId: 'abVI9Y5qiS', key: 'pixabay:1837148', width: 1280, height: 853, alt: 'A bride at a wedding', query: 'wedding couple mountains', at: '2026-10-19T23:12:32.576Z' },\n { mediaId: 'OdwfZdKKAt', key: 'pixabay:4610864', width: 1280, height: 853, alt: 'A family in the mountains', query: 'family mountains', at: '2026-10-19T23:12:32.883Z' },\n { mediaId: '4QuVNZGL4H', key: 'pixabay:5404826', width: 1280, height: 719, alt: 'A couple with a cowboy', query: 'wedding couple mountains', at: '2026-10-19T23:13:29.574Z' },\n { mediaId: 'TIP2UNTKZJ', key: 'pixabay:7843738', width: 1280, height: 853, alt: 'A family in the mountains', query: 'family mountains', at: '2026-10-19T23:13:30.077Z' },\n]\n\n/** The \"Gallery collections\" records production wrote (dataset WX2B9IcAnF), in order. */\nexport const LAUREL_FORK_COVERS: ReadonlyArray<{ order: number; title: string; category: string; image: string; imageDescription: string }> = [\n { order: 0, title: 'Mountain elopements', category: 'Weddings and elopements', image: '/_static/starter/hero-team.jpg', imageDescription: 'A small team working together around a table in a bright office' },\n { order: 1, title: 'Overlook vows', category: 'Weddings and elopements', image: '/_static/starter/gallery-desk.jpg', imageDescription: 'A tidy desk with a laptop, a lamp and fresh flowers' },\n { order: 2, title: 'Small weddings', category: 'Weddings and elopements', image: '/_static/starter/hero-team.jpg', imageDescription: 'A small team working together around a table in a bright office' },\n { order: 3, title: 'Getting ready', category: 'Weddings and elopements', image: '/_static/starter/gallery-desk.jpg', imageDescription: 'A tidy desk with a laptop, a lamp and fresh flowers' },\n { order: 4, title: 'First looks in the trees', category: 'Weddings and elopements', image: '/_static/starter/hero-team.jpg', imageDescription: 'A small team working together around a table in a bright office' },\n { order: 5, title: 'Couples portraits', category: 'Weddings and elopements', image: '/_static/starter/gallery-desk.jpg', imageDescription: 'A tidy desk with a laptop, a lamp and fresh flowers' },\n { order: 6, title: 'Family sessions outdoors', category: 'Family portraits', image: '/_static/starter/hero-team.jpg', imageDescription: 'A small team working together around a table in a bright office' },\n { order: 7, title: 'Parents and little ones', category: 'Family portraits', image: '/_static/starter/gallery-desk.jpg', imageDescription: 'A tidy desk with a laptop, a lamp and fresh flowers' },\n { order: 8, title: 'Multi-generation portraits', category: 'Family portraits', image: '/_static/starter/hero-team.jpg', imageDescription: 'A small team working together around a table in a bright office' },\n { order: 9, title: 'Golden hour families', category: 'Family portraits', image: '/_static/starter/gallery-desk.jpg', imageDescription: 'A tidy desk with a laptop, a lamp and fresh flowers' },\n { order: 10, title: 'Milestone sessions', category: 'Family portraits', image: '/_static/starter/hero-team.jpg', imageDescription: 'A small team working together around a table in a bright office' },\n { order: 11, title: 'Siblings and cousins', category: 'Family portraits', image: '/_static/starter/gallery-desk.jpg', imageDescription: 'A tidy desk with a laptop, a lamp and fresh flowers' },\n]\n\n/** The downloads the image hosts refused, by the beat that sent them (its request's start, from the console's logs). */\nexport const LAUREL_FORK_REFUSALS = {\n /** The beat that built the site layout, the datasets and the form: every one of them a \"Gallery collections\" cover's pick. */\n covers: {\n at: '2026-10-19T23:07:09.140Z',\n ids: ['8028185', '2179256', '7612157', '1837148', '5693164', '6935359', '6704262', '7103290', '2191391', '7162791', '6230410', '1576456', '621634', '4610864', '2592704', '868394', '5401602', '7843738', '3717770', '6883668', '515532', '6935341'],\n },\n /** The beat that built the home page: its hero's and its about split's picks among them. */\n home: {\n at: '2026-10-19T23:08:11.813Z',\n ids: ['1846114', '5061887', '7302669', '7315389', '1837148', '3997967', '7103290', '621634', '5582980', '9981742', '9034408'],\n },\n} as const\n\n"],"names":["LAUREL_FORK_SHARE_IMAGE","image","imageWidth","imageHeight","imageAlt","LAUREL_FORK_PAGES","id","title","slug","nodes","$id","componentId","parentId","sx","position","bUKvvYVspl","kZnxgtEEwW","rPNWWfbfQf","k0XulehpfP","p9fSYaMS_L","width","height","qDfEd0AZCr","AyvCN0Vv9Z","Ffnn6cK5Ga","FR7WdQd4sZ","props","alt","src","intrinsicWidth","intrinsicHeight","ECW4_DSLWt","aspectRatio","xs","md","QwlyU6yYqS","bAJ25yBgWt","mTWJuHpqNc","MDpjUplylc","loading","pfhzMkYkWV","A60C_InPsl","MDsN8QXzkJ","HpkOCRgkaU","bE7h5VR4fS","keKfGYqdrv","m7rhszuwJ_","dmaHvXXLog","rRaTuKKtV_","wt_B806Cz2","lxEoMaVorh","vjw8N7hFAS","lrqoLGssJc","bctLBlZwCn","rmPoyiqnm1","KcpbqM5HGe","RUCfDEpGHe","FqJTPKOFhc","JYPG2A7rAM","A0jJJciYYl","TSZstV47eS","_qdKnXC6SG","DNXBX6Rjty","P05uXIH3ay","laVjLPJZ4L","uPTgcF6jUS","o66WNW1fIn","Kg7ruI_Meh","QWuFAJeRmO","vFwen5PXdE","ermJcuJZ3n","w2coL2n_tN","oXdwyBK5Gj","R8y0_H5y1r","qh6v4JMuvM","ss9ZdrPkPO","zNjq_ENdsA","xHGY5h74hw","OXk2tX7oIo","oFYhWhTjA8","mxxJl8mJeQ","UqRQw7fAJL","_tcXdiehBM","DhHFJngdtx","DX1d3Nk_SS","NUokTPuJqS","mXvxLG6ZCC","cDkrmCHRY8","_18zZdjkXI","T4nyq3oMFE","Sq20gfoLHO","jm8QiMQi_q","ELjSSmxB67","xBtp9iJ8EL","AGD00MGenQ","adsQCltSNm","EYX7UJW0m4","DY8Ya5RX5O","cS8XMuN79D","LAUREL_FORK_PHOTOS","mediaId","key","query","at","LAUREL_FORK_COVERS","order","category","imageDescription","LAUREL_FORK_REFUSALS","covers","ids","home"],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
import type { NodesMap } from '@aglyn/aglyn/types/nodes';
|
|
18
|
+
import { type AiSiteStarterSlot, type AiStockRefusedPicks } from '../model/ai-site-photos';
|
|
18
19
|
/**
|
|
19
20
|
* THE PICTURES OF A LANGUAGE PAGE (AGL-3660).
|
|
20
21
|
*
|
|
@@ -31,17 +32,21 @@ import type { NodesMap } from '@aglyn/aglyn/types/nodes';
|
|
|
31
32
|
* deployment has a stock-photo key.
|
|
32
33
|
* 2. Where the library failed the slot — down, refusing, out of time, or its
|
|
33
34
|
* photo not copied — one of the photos the same job already placed on
|
|
34
|
-
* this site, on its other pages
|
|
35
|
-
* ({@link aiLayoutJobPhotoPicks}, AGL-3988): each was found
|
|
36
|
-
* site's own world, so a wedding photographer's home page shows a
|
|
37
|
-
* and never an office.
|
|
35
|
+
* this site, on its other pages, its datasets' records or this page's
|
|
36
|
+
* other slots ({@link aiLayoutJobPhotoPicks}, AGL-3988): each was found
|
|
37
|
+
* for the site's own world, so a wedding photographer's home page shows a
|
|
38
|
+
* wedding and never an office.
|
|
38
39
|
* 3. Where the job has no photo of its own — no stock-photo key, or the
|
|
39
|
-
* library failed it
|
|
40
|
+
* library failed it before the job copied any — one of the
|
|
40
41
|
* STARTER PHOTOS every new site is born with (`DEFAULT_SITE_IMAGES`,
|
|
41
42
|
* served at `/_static/starter/` by the tenant and the console alike,
|
|
42
43
|
* credited in the CREDITS file beside them). They are the platform's own
|
|
43
44
|
* files, so a visitor's browser asks no other host for them, and a
|
|
44
|
-
* starter reads better than no picture when there is no library.
|
|
45
|
+
* starter reads better than no picture when there is no library. On a
|
|
46
|
+
* site start, which never places a photo its page already shows, a slot
|
|
47
|
+
* none of the job's other photos fits yet keeps one too, and the start's
|
|
48
|
+
* late photo pass gives it one of the job's own photos once every page
|
|
49
|
+
* is built (`jobs/ai-site-late-photos.ts`).
|
|
45
50
|
*
|
|
46
51
|
* Where the library answered and nothing in it fits a slot
|
|
47
52
|
* ({@link AI_LAYOUT_NO_PHOTO}), the slot never takes a starter: the beta.257
|
|
@@ -229,8 +234,17 @@ export declare function aiLayoutNeutralStarterPhotos(slots: readonly AiLayoutPic
|
|
|
229
234
|
* portrait of the business's people are of one named thing, which no other
|
|
230
235
|
* photo is, so they take none. Among equals the seed picks, so one job
|
|
231
236
|
* always picks the same. `null` for a slot given none. Pure.
|
|
237
|
+
*
|
|
238
|
+
* `repeats` is a site start's (AGL-3988), where a photo shown twice on one
|
|
239
|
+
* page reads as a defect: `'never'` when its page is built, where a slot no
|
|
240
|
+
* photo the page does not show yet fits keeps a starter for the start's
|
|
241
|
+
* late photo pass; `'last'` in that pass, where the other choice is a starter
|
|
242
|
+
* of another business, so a photo the page does not show comes first, then
|
|
243
|
+
* one it shows elsewhere, and the photo beside the slot only after that.
|
|
232
244
|
*/
|
|
233
|
-
export declare function aiLayoutJobPhotoPicks(slots: readonly AiLayoutPictureSlot[], need: readonly boolean[], jobPhotos: readonly AiLayoutPicturePhoto[], placed: ReadonlyArray<AiLayoutPicturePhoto | null | undefined>, seed: string
|
|
245
|
+
export declare function aiLayoutJobPhotoPicks(slots: readonly AiLayoutPictureSlot[], need: readonly boolean[], jobPhotos: readonly AiLayoutPicturePhoto[], placed: ReadonlyArray<AiLayoutPicturePhoto | null | undefined>, seed: string, options?: {
|
|
246
|
+
repeats?: 'never' | 'last';
|
|
247
|
+
}): Array<AiLayoutPicturePhoto | null>;
|
|
234
248
|
/**
|
|
235
249
|
* The page with each slot filled by its photo: the `image` given its source,
|
|
236
250
|
* its intrinsic size and how it loads (the hero eagerly, as the starter home
|
|
@@ -261,17 +275,31 @@ export declare function aiLayoutDropEmptyPictures(nodes: NodesMap, slots: readon
|
|
|
261
275
|
* not be asked, which takes a starter photo. It may throw, and then every
|
|
262
276
|
* slot takes a starter.
|
|
263
277
|
*/
|
|
264
|
-
export type AiLayoutPictureSource = (slots: readonly AiLayoutPictureSlot[]) => Promise<ReadonlyArray<AiLayoutPicturePhoto | null>>;
|
|
278
|
+
export type AiLayoutPictureSource = (slots: readonly AiLayoutPictureSlot[], report?: AiLayoutPictureReport) => Promise<ReadonlyArray<AiLayoutPicturePhoto | null>>;
|
|
279
|
+
/**
|
|
280
|
+
* What a source tells its caller beside its answers (AGL-3988): for each slot
|
|
281
|
+
* whose fitting photo the library's image hosts would not hand over, the
|
|
282
|
+
* picks it kept in hand and the search they came from, so the site start's
|
|
283
|
+
* late photo pass can ask for them again once the burst is over. Keyed by
|
|
284
|
+
* the slot itself, which every source hands on unchanged.
|
|
285
|
+
*/
|
|
286
|
+
export interface AiLayoutPictureReport {
|
|
287
|
+
refused: Map<AiLayoutPictureSlot, AiStockRefusedPicks>;
|
|
288
|
+
}
|
|
265
289
|
/**
|
|
266
290
|
* Fills a stored page's empty picture slots (AGL-3660): from `source` where
|
|
267
291
|
* one is given and it answers; a slot it answers with nothing fitting stays
|
|
268
292
|
* without a photo and is taken out ({@link aiLayoutDropEmptyPictures}). A
|
|
269
293
|
* slot it could not answer — the library down, out of time, or its photo not
|
|
270
|
-
* copied — takes one of the photos the job already placed on this site
|
|
271
|
-
* (`jobPhotos`, {@link aiLayoutJobPhotoPicks},
|
|
272
|
-
* job has none
|
|
273
|
-
* (AGL-3831).
|
|
274
|
-
*
|
|
294
|
+
* copied — takes one of the photos the job already placed on this site or
|
|
295
|
+
* this page just copied (`jobPhotos`, {@link aiLayoutJobPhotoPicks},
|
|
296
|
+
* AGL-3988), and only where the job has none, a starter photo described by
|
|
297
|
+
* its own words (AGL-3831). On a site start (`onStarters`), a photo the
|
|
298
|
+
* page already shows is never placed again, a slot none of the others fits
|
|
299
|
+
* yet keeps a neutral starter too, and `onStarters` is told of every
|
|
300
|
+
* picture left on one, for the late photo pass. Never throws, and
|
|
301
|
+
* never leaves a page worse than it came: a picture is decoration, and a
|
|
302
|
+
* job never fails over one.
|
|
275
303
|
*/
|
|
276
304
|
export declare function aiResolveLayoutPictures(nodes: NodesMap, input: {
|
|
277
305
|
rootId: string;
|
|
@@ -288,4 +316,13 @@ export declare function aiResolveLayoutPictures(nodes: NodesMap, input: {
|
|
|
288
316
|
jobPhotos?: readonly AiLayoutPicturePhoto[];
|
|
289
317
|
/** The site's language (AGL-3750); a starter photo's English words are not its own. */
|
|
290
318
|
language?: string;
|
|
319
|
+
/**
|
|
320
|
+
* Told the pictures left on a starter where the site has a library
|
|
321
|
+
* (AGL-3988), with the picks the image hosts refused for each: what the
|
|
322
|
+
* site start's late photo pass fills from the job's own photos. Given
|
|
323
|
+
* only where such a pass follows: a failed slot then never takes a photo
|
|
324
|
+
* the page already shows, and one none of the job's other photos fits
|
|
325
|
+
* yet keeps a neutral starter for that pass, rather than lose its frame.
|
|
326
|
+
*/
|
|
327
|
+
onStarters?: (slots: AiSiteStarterSlot[]) => void;
|
|
291
328
|
}): Promise<NodesMap>;
|
|
@@ -15,6 +15,7 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
15
15
|
* See the License for the specific language governing permissions and
|
|
16
16
|
* limitations under the License.
|
|
17
17
|
*/ import { DEFAULT_SITE_IMAGES } from "@aglyn/aglyn/app-utils/default-site";
|
|
18
|
+
import { aiSiteIsStarterSrc } from "../model/ai-site-photos.js";
|
|
18
19
|
import { aiLayoutLabel, aiLayoutSpeaksOtherThanEnglish } from "./ai-layout-labels.js";
|
|
19
20
|
/** Words that say a picture shows people, or a section is about them. */ const PEOPLE = /\b(team|story|owner|owners|founder|founders|staff|crew|people|person|portrait|meet|family|families|who we are|our (?:team|crew|people|story)|therapist|counsel(?:l)?or|coach|doctor|dentist|stylist|trainer|smil(?:e|es|ing)|headshot)\b/i;
|
|
20
21
|
/**
|
|
@@ -313,7 +314,14 @@ function rotate(list, by) {
|
|
|
313
314
|
* portrait of the business's people are of one named thing, which no other
|
|
314
315
|
* photo is, so they take none. Among equals the seed picks, so one job
|
|
315
316
|
* always picks the same. `null` for a slot given none. Pure.
|
|
316
|
-
|
|
317
|
+
*
|
|
318
|
+
* `repeats` is a site start's (AGL-3988), where a photo shown twice on one
|
|
319
|
+
* page reads as a defect: `'never'` when its page is built, where a slot no
|
|
320
|
+
* photo the page does not show yet fits keeps a starter for the start's
|
|
321
|
+
* late photo pass; `'last'` in that pass, where the other choice is a starter
|
|
322
|
+
* of another business, so a photo the page does not show comes first, then
|
|
323
|
+
* one it shows elsewhere, and the photo beside the slot only after that.
|
|
324
|
+
*/ export function aiLayoutJobPhotoPicks(slots, need, jobPhotos, placed, seed, options = {}) {
|
|
317
325
|
const seen = new Set();
|
|
318
326
|
const pool = jobPhotos.filter((photo)=>{
|
|
319
327
|
if (!photo.src || !(photo.width > 0) || !(photo.height > 0) || seen.has(photo.src)) return false;
|
|
@@ -345,13 +353,15 @@ function rotate(list, by) {
|
|
|
345
353
|
let best = null;
|
|
346
354
|
for (const [at, photo] of pool.entries()){
|
|
347
355
|
var _photo_alt;
|
|
348
|
-
|
|
349
|
-
const aspect = photo.width / photo.height;
|
|
356
|
+
const nextTo = beside.has(photo.src);
|
|
350
357
|
const uses = shown.filter((src)=>src === photo.src).length;
|
|
358
|
+
if (nextTo && options.repeats !== 'last') continue;
|
|
359
|
+
if (uses && options.repeats === 'never') continue;
|
|
360
|
+
const aspect = photo.width / photo.height;
|
|
351
361
|
const shared = [
|
|
352
362
|
...wordsOf((_photo_alt = photo.alt) != null ? _photo_alt : '')
|
|
353
363
|
].filter((word)=>says.has(word)).length;
|
|
354
|
-
const score = -100 * uses + (slot.role === 'hero' && aspect >= 1.3 ? 20 : 0) - 10 * Math.abs(Math.log(aspect / (slot.aspect > 0 ? slot.aspect : 1))) + 4 * shared;
|
|
364
|
+
const score = (nextTo ? -10000 : 0) - (options.repeats === 'last' ? 1000 : 100) * uses + (slot.role === 'hero' && aspect >= 1.3 ? 20 : 0) - 10 * Math.abs(Math.log(aspect / (slot.aspect > 0 ? slot.aspect : 1))) + 4 * shared;
|
|
355
365
|
// The seed turns the pool, so equals are taken in a per-job order.
|
|
356
366
|
const rank = (at - turn % pool.length + pool.length) % pool.length;
|
|
357
367
|
if (!best || score > best.score || score === best.score && rank < best.rank) best = {
|
|
@@ -501,23 +511,30 @@ function rotate(list, by) {
|
|
|
501
511
|
* one is given and it answers; a slot it answers with nothing fitting stays
|
|
502
512
|
* without a photo and is taken out ({@link aiLayoutDropEmptyPictures}). A
|
|
503
513
|
* slot it could not answer — the library down, out of time, or its photo not
|
|
504
|
-
* copied — takes one of the photos the job already placed on this site
|
|
505
|
-
* (`jobPhotos`, {@link aiLayoutJobPhotoPicks},
|
|
506
|
-
* job has none
|
|
507
|
-
* (AGL-3831).
|
|
508
|
-
*
|
|
514
|
+
* copied — takes one of the photos the job already placed on this site or
|
|
515
|
+
* this page just copied (`jobPhotos`, {@link aiLayoutJobPhotoPicks},
|
|
516
|
+
* AGL-3988), and only where the job has none, a starter photo described by
|
|
517
|
+
* its own words (AGL-3831). On a site start (`onStarters`), a photo the
|
|
518
|
+
* page already shows is never placed again, a slot none of the others fits
|
|
519
|
+
* yet keeps a neutral starter too, and `onStarters` is told of every
|
|
520
|
+
* picture left on one, for the late photo pass. Never throws, and
|
|
521
|
+
* never leaves a page worse than it came: a picture is decoration, and a
|
|
522
|
+
* job never fails over one.
|
|
509
523
|
*/ export async function aiResolveLayoutPictures(nodes, input) {
|
|
510
524
|
try {
|
|
511
|
-
var _input_jobPhotos;
|
|
525
|
+
var _input_jobPhotos, _input_jobPhotos1;
|
|
512
526
|
const slots = aiLayoutPictureSlots(nodes, input.rootId, {
|
|
513
527
|
ids: input.sectionIds,
|
|
514
528
|
names: input.sectionNames
|
|
515
529
|
});
|
|
516
530
|
if (!slots.length) return nodes;
|
|
517
531
|
let found = [];
|
|
532
|
+
const report = {
|
|
533
|
+
refused: new Map()
|
|
534
|
+
};
|
|
518
535
|
if (input.source) {
|
|
519
536
|
try {
|
|
520
|
-
found = await input.source(slots);
|
|
537
|
+
found = await input.source(slots, report);
|
|
521
538
|
} catch (error) {
|
|
522
539
|
console.warn('ai layout pictures: the stock source failed; the job’s own photos or starters fill the page', {
|
|
523
540
|
error
|
|
@@ -539,18 +556,44 @@ function rotate(list, by) {
|
|
|
539
556
|
// With a library, the job's own photos come before any starter (AGL-3988),
|
|
540
557
|
// and a starter is only ever a neutral one (AGL-3923): the beta.267
|
|
541
558
|
// Brightvale start, whose library refused its copies, showed a pottery
|
|
542
|
-
// bench and a coffee shop's owner as a marketer's pictures.
|
|
543
|
-
|
|
559
|
+
// bench and a coffee shop's owner as a marketer's pictures. The job's
|
|
560
|
+
// own are its other pages' and its records' photos, and the ones this
|
|
561
|
+
// page just copied for its other slots: the beta.271 Laurel Fork home
|
|
562
|
+
// page, the first page built, copied a wide wedding couple and a family
|
|
563
|
+
// for two of its slots while its hero's picks were refused, and opened
|
|
564
|
+
// on the starters' office team. A photo the page does not show yet is
|
|
565
|
+
// still preferred, and never the one beside it.
|
|
566
|
+
const own = input.source ? [
|
|
567
|
+
...(_input_jobPhotos = input.jobPhotos) != null ? _input_jobPhotos : [],
|
|
568
|
+
...photos.filter((photo)=>Boolean(photo))
|
|
569
|
+
].filter((photo)=>photo.src && photo.width > 0 && photo.height > 0) : [];
|
|
570
|
+
// On a site start (`onStarters`) a photo the page already shows is never
|
|
571
|
+
// placed again here (AGL-3988): the beta.271 Laurel Fork home page opened
|
|
572
|
+
// on the wedding couple its closing band shows. Such a slot keeps a
|
|
573
|
+
// starter, and the start's late photo pass fills it.
|
|
574
|
+
const lateStart = Boolean(input.source && input.onStarters);
|
|
544
575
|
if (own.length) {
|
|
545
|
-
aiLayoutJobPhotoPicks(slots, unanswered, own, photos, input.seed
|
|
576
|
+
aiLayoutJobPhotoPicks(slots, unanswered, own, photos, input.seed, lateStart ? {
|
|
577
|
+
repeats: 'never'
|
|
578
|
+
} : {}).forEach((pick, index)=>{
|
|
546
579
|
if (pick && unanswered[index]) photos[index] = pick;
|
|
547
580
|
});
|
|
548
|
-
} else {
|
|
549
|
-
const starters = input.source ? aiLayoutNeutralStarterPhotos(slots, input.seed) : aiLayoutStarterPhotos(slots, input.seed);
|
|
550
|
-
starters.forEach((photo, index)=>{
|
|
551
|
-
if (photo && unanswered[index]) photos[index] = said(photo);
|
|
552
|
-
});
|
|
553
581
|
}
|
|
582
|
+
// A failed slot takes a neutral starter only where the job had no photo
|
|
583
|
+
// of its own before this page, as #1831 had it. On a site start, where
|
|
584
|
+
// the job has photos of its own, every failed slot none of them fits yet
|
|
585
|
+
// keeps one: that start's late photo pass gives it one of the job's own
|
|
586
|
+
// once every page is built (AGL-3988), told of it by `onStarters`.
|
|
587
|
+
// Anywhere else it keeps the no-photo treatment. With no library, every
|
|
588
|
+
// starter, as before.
|
|
589
|
+
const hadOwn = ((_input_jobPhotos1 = input.jobPhotos) != null ? _input_jobPhotos1 : []).some((photo)=>photo.src && photo.width > 0 && photo.height > 0);
|
|
590
|
+
const starters = !input.source ? aiLayoutStarterPhotos(slots, input.seed) : lateStart && own.length ? aiLayoutNeutralStarterRun(slots.length, input.seed).map((photo, index)=>{
|
|
591
|
+
var _slots_index, _slots_index1;
|
|
592
|
+
return ((_slots_index = slots[index]) == null ? void 0 : _slots_index.people) || ((_slots_index1 = slots[index]) == null ? void 0 : _slots_index1.product) ? null : photo;
|
|
593
|
+
}) : hadOwn && !lateStart ? [] : aiLayoutNeutralStarterPhotos(slots, input.seed);
|
|
594
|
+
starters.forEach((photo, index)=>{
|
|
595
|
+
if (photo && unanswered[index] && !photos[index]) photos[index] = said(photo);
|
|
596
|
+
});
|
|
554
597
|
// The page floor (AGL-3923; Zach, 2026-10-12: a starter photo before no
|
|
555
598
|
// photo at all): a page the library answered that would show no picture
|
|
556
599
|
// keeps one, in its hero, else its first slot: one of the job's own
|
|
@@ -578,6 +621,25 @@ function rotate(list, by) {
|
|
|
578
621
|
alt: starter.alt
|
|
579
622
|
});
|
|
580
623
|
}
|
|
624
|
+
// The pictures left on a starter, for the late photo pass (AGL-3988).
|
|
625
|
+
if (input.source && input.onStarters) {
|
|
626
|
+
const left = slots.flatMap((slot, index)=>{
|
|
627
|
+
var _photos_index;
|
|
628
|
+
if (!aiSiteIsStarterSrc((_photos_index = photos[index]) == null ? void 0 : _photos_index.src)) return [];
|
|
629
|
+
const refused = report.refused.get(slot);
|
|
630
|
+
return [
|
|
631
|
+
_extends({
|
|
632
|
+
image: slot.imageId,
|
|
633
|
+
words: slot.alt,
|
|
634
|
+
role: slot.role,
|
|
635
|
+
aspect: slot.aspect
|
|
636
|
+
}, refused ? {
|
|
637
|
+
refused
|
|
638
|
+
} : {})
|
|
639
|
+
];
|
|
640
|
+
});
|
|
641
|
+
if (left.length) input.onStarters(left);
|
|
642
|
+
}
|
|
581
643
|
return aiLayoutDropEmptyPictures(aiLayoutPlacePictures(nodes, slots, photos), slots, photos, input.sectionIds);
|
|
582
644
|
} catch (error) {
|
|
583
645
|
console.error('ai layout pictures: the page keeps its empty picture slots', {
|